diff --git a/build.gradle b/build.gradle index e84ac5a..c5b51f1 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.1' + classpath 'com.android.tools.build:gradle:4.1.2' def nav_version = "2.3.0" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' diff --git a/frostwire-jlibtorrent/.travis.yml b/frostwire-jlibtorrent/.travis.yml index f14ffae..9f2b5d2 100644 --- a/frostwire-jlibtorrent/.travis.yml +++ b/frostwire-jlibtorrent/.travis.yml @@ -30,7 +30,7 @@ before_install: - export BOOST_ROOT=$PWD/boost_1_73_0 - export BOOST_BUILD_PATH=$BOOST_ROOT - # openssl: download +# openssl: download - wget -nv -O openssl.tar.gz https://www.openssl.org/source/openssl-1.1.1i.tar.gz - tar xzf openssl.tar.gz - export OPENSSL_SOURCE=$PWD/openssl-1.1.1i diff --git a/frostwire-jlibtorrent/build.gradle b/frostwire-jlibtorrent/build.gradle index a06a41d..e5aa386 100644 --- a/frostwire-jlibtorrent/build.gradle +++ b/frostwire-jlibtorrent/build.gradle @@ -22,20 +22,6 @@ repositories { mavenCentral() } -dependencies { - testCompile 'junit:junit:4.12' -} - -tasks.withType(Test) { - systemProperty "java.library.path", "." -} - -test { - testLogging { - events "passed", "skipped", "failed", "standard_out" - } -} - task sourcesJar(type: Jar) { classifier = 'sources' from sourceSets.main.allSource diff --git a/frostwire-jlibtorrent/logo/jlibtorrent_logo.ai b/frostwire-jlibtorrent/logo/jlibtorrent_logo.ai deleted file mode 100644 index 7a31859..0000000 --- a/frostwire-jlibtorrent/logo/jlibtorrent_logo.ai +++ /dev/null @@ -1,3802 +0,0 @@ -%PDF-1.5 % -1 0 obj <>/OCGs[5 0 R 31 0 R 55 0 R 101 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream - - - - - application/pdf - - - Print - - - 2015-12-09T12:00:08-05:00 - 2015-12-09T12:00:08-05:00 - 2015-12-09T11:35:16-05:00 - Adobe Illustrator CC 2015 (Macintosh) - - - - 256 - 104 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAaAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A6F/ifzD/ANXG4/5GNnV/ lMX80PnX8o6j+fL5u/xP5h/6uNx/yMbH8pi/mhf5R1H8+Xzd/ifzD/1cbj/kY2P5TF/NC/yjqP58 vm2vmTzG7BU1C4ZmNFUOxJJ8MTpcQ/hCjtDUk0Jy+av+mPNYNHvp4zzMZEk3pkMOoPMrT6ch4GH+ aPk2/m9V1nIb1vKvvaGsebGIEd7cSlmZVEchkJK1rQIT4HfHwMHWI+SjV6s8pyPuN/coHzN5iBIO oXAI6jm2T/K4v5oav5R1H8+Xzd/ifzD/ANXG4/5GNj+UxfzQv8o6j+fL5u/xP5h/6uNx/wAjGx/K Yv5oX+UdR/Pl81ay8ya+97bo2oTlWkQMC7UILDIZNLiET6RybMPaGczAM5cx1ew5y76C7FXYq7FX EgAkmgG5JxUlDi/tGCmNzKrKXVolaRSFrWjIGHbpk/Dl12+xq8eB5G/dv9zvr9rQF2aNShk5So8a hR1qXCgfI4+GUePHrtte4I+9XR0kRXjYOjCqspqCD3BGRIrYtsZAixybwJdirsVdirwaT+8b5n9e dkOT5dLmtwodiraI7uqIpZ2ICqBUknoAMBNJAJNBXNhdA0dViYP6ZSV0jYNSu6uVI+fTI+IGzwZd dt63IH3uFhdMQI1ErFzGEidJGLCp2VCx7demDxB1T4Ejy33rYg/coMrKxVgVZTRlOxBHY5MFqIrY tYUOxV2Kt4q7FVeO2Ai9actFEwb0TxJ9RloOI6bVO5/X0yBnvQbY49rlsOnm3LeOQ6QqLeBiG9JC eqgAVYkseletK9MRDv3KyynlH0x7kPk2pwJBqNiOhxVXW8YqqTqJ40VljViQV5b1BFDsfHbIGHds 2jKeUvUA1NbUj9aEmW3BVWkK8eLsK8WFT4GnjjGe9HmiWPaxvH9Kjk2tX0//AHvtv+Mqf8SGQyfS fc24P7yPvD3POPfTXYq7FVCa6pJ6EIElzRWaMniFQtTkxofeg75OMNrPJqnk34Y7y/R3/jm5bNOS yTMZ5EZmjdwvwctqKAAOm3jiZnkNlGIXcvUR9ivkG12KqEtnGxeSImC4cBTPGF5UBqK1BB+kZMTI 2O4apYgbI9Mj1DSXJWYQXHGOSRmEFDX1FUA+Ao1D0xMNrHxUZKPDLYnl5/juRGQbXYq7FXg0n943 zP687Icny6XNbhQrx2wEQmnLRwuG9FgKl3WmwFRtU7n+OQM96HNtjj24pbDevN0l5IUeKICCCTjz hjLcW49OVSSd9/niIDmdysspogemJ6BQybU7FVeO8kCpHKBPBGGCQyFuK8uvGhBG+/zyBgOY2LbH KaAPqiOhdJbAxGaAtJCgX1WIAKM1diATtUbHES3o81lj2uO42vyUMm1OxVvFVS3jR5KO6oqqzEt3 4gniKd26DIyNBnjiCdzTriYzSs/EIpJ4Rr9lQTXivtjGNBE58Rvkp5Ji7FWReXfKE+pW73tyWhsV 2QigaRq0+GoOw8cwdVrRjPCN5fc7fQdlSzRM5bQ+9lX/ACrLQf8Af91/wcf/AFTzW/yrk7o/b+t3 n+h3B3z+Y/4lguqW8Gl63c2sama3hcpwlNSwK03Kgb77HNxhkcmMSOxLzGpxxwZpRG8Qa3QNxEsU zIriVBusi9GB3By6JsONkjwmgbX6f/vfbf8AGVP+JDBk+k+5lg/vI+8Pc8499NdiqncytFCzohlc fYjGxZj0FclEWaYZJGMbAsugiMUYUu0jVJaR6VJJJ7dt9sZSsrCPCKu1TIs3YqkPmHzVbaXNDZxU lvp3VfT7IrEDk1PwGZmm0ZyAyO0Q6vX9pxwEQG8yR8Pew3/lZPmH+W3/AOAb/mrNr/JeLzed/wBE Go/o/L9rNvLl/c6zoCXNyfTml9RecPwlaMVBWtaHNTqsYxZaHId70vZ+eWowCUtib5JrbSSPGfUU pIjFWBoa8TQNt/MN8xpAA7OdjkSN+f4+9VyLN2KvBpP7xvmf152Q5Pl0ua63iSSTi7iNAGZnIqBx BPbx6DBI0GUIgnc064m9aVnCLGp+zGgoqgdAMYxoUs58RuqU8kwdirK/KPkqXU2S8vlMenA1Vdw0 3sO4XxP3eI1ut1wx+mP1fc73svsg5iJz2x/7r9nn8k203yx5fubGC4azo0qBiPUl7/7LNX/KGb+d 9g/U9D/Iul/mfbL9bFNchttN1+aK3hU28XCkL1ZSGjUsDU17+O3bN3pZSyYQZHc/reT7QxwwamUY j0itvgEtniWOTijiRCAyuARWor38Oh98yYmw4E4gHY2p5Jg3iqID8LDirms8n7xOP7MYBU8vcudh 4b9srq5e5tusfPmfu8/ih8sanYqitLeyS/ha8ha4gDCsKtx5HtU0O3jlWYSMTwmi36YwGQGY4o9z 2e8RI7FkRQiKFCqooAARQADOVgblu+i5QBChyW6vqH6O024vfT9X0E5+nXjX2rQ0+7Dhx8cxHlbH VZ/CxynV8LxvV9Q/SGpXF76fpeu/P068qe1aCv3Z1OHHwQEe5881Wfxckp1XEVkrGSzhYuWaEtFx 47Kh+Nfi71ZnwgVI+f4/UxkbgN+W3w5j9LWn/wC99t/xlT/iQw5PpPuXB/eR94e55x76a7FUPKok vYFKhlhDS8uW6v8AYX4a7gqz5YDUT5/j9TTIXMeW/wAeQ/SiMrbnYqpXSXElu6W8ognYUSVl9QKf HjVa/fkoEA7iwwyCRiRE0e+r+x4wGmOuKZpDNL9ZAeVurEPSpzq9vD2FDhfOgT4+5s8XP4qGn2v1 y/trTlw+sSpFzpXjzYLWlRWlcnknwxMu4NWDF4mSMOXEQPm9i8v6R+iNLjsfV9f0yx9TjwryYt0q 3j45y2pz+LMyqn0HQ6XwMQhfFXwRPEJqAZVUevGRI1aMTGRwAWu+ztU0yF3H3H726qyX/OH3cvvK IytudirwaT+8b5n9edkOT5dLmrKxjsXoxBnfgw47FUo32qfzEbD+mQIuXubQagfM/d+Ah8saXYqr Wc8dvcpNJClwqGvoyV4Mf8qhFRkJxMhQNNmKYjIEgSroeT3KEgwxkAKCooo2A26DOQlzfTIcgxG1 upLTyslzGAZIbfmoapFQtd6UyzBATmInqWnV5TjxSmOcRbz7UtQm1C9ku5lVZJePIICF+FQopUnw zqcOIY4iI5B891WplmyGcqs93uppmMlinJmJgfgo4/CFerfap4g7E4QKl72JNwHkfvQ+WNLeKq8x P1W33YqOexFFDct+JpvtSuQj9RbZ/TH4qGTakSmnXb2Mt+IyLWJlRpDsCzfsjx98rOWIkI9S3R08 zA5K9I2tRg/v4/8AWX9eTlyLXD6g9wv/APeR/o/WM5DH9T6Xn+gpf5u/5RvUP+MR/WMv0X97H3uJ 2r/i0/c8czqXz1XQ0sJRVhWWOigfAaK+5NOortv45A/UPcf0No/uz7x7urtP/wB77b/jKn/Ehjk+ k+5cH95H3h7nnHvprsVUFA+vykhKmKPia/GaM9aiv2dxTJn6R7/1NQ/vDy5D39VfINqGudSs7e6t 7WSQC4umKwxDdjQEk08NuuWRxSkDIcg05NRCEoxJ9UuQROVtzxT/AKX3/R1/zMzrf8l/m/ofN/8A L/5/6XeX/wDjvab/AMxUH/JxcdT/AHcv6p+5dD/f4/68fve15yT6Qh5xW6ttkJBc/F9oDjT4fv3y ceRap/VHl1+7oiMg2uxV4NJ/eN8z+vOyHJ8ulzVpK/UIPt8fUl2I+CvGOvE+NKVHyyI+o+4fpbJf QOfM+7p+D8EPk2pHRaNeyaVPqhXhaQlVDt+2zMFovyrucpOeImIfxFyo6SZxHL/APtQOXOK93t/9 54v9Rf1Zx0uZfT8f0j3MMb/lDG/5hD/xHLtJ/ex97jdo/wCLz/ql53nVvnKvH/vDNXnT1Iug+CtH +0fGlafTkD9Q+P6G2P0HnzHu6qGTam8VRCAyWTqObGBvUoKcAj0RmPevIIMgdpe/8frbRvAjf07+ VHY/oRPl3S49U1q2sZXKRylubL1oilyB8+NMr1WU48ZkOjfoNMM+aMCaB/QLel+YvLzXXl9dL01I 4gjIY0YlVAU770O+aDTanhy8c93sdfoOPT+FiAFUw+H8uPMCyozNbgBgSebdAf8AVzZy7UxV1dBD 2f1AI+n5/sej3/8AvI/0frGaLH9T1+f6Cl/m7/lG9Q/4xH9Yy/Rf3sfe4nav+LT9zxzOpfPURMDH awxHmGcmV1NONGACED5VyuO8iW2e0QN+/wDU1p/+99t/xlT/AIkMOT6T7lwf3kfeHuece+muxVD3 BEVzDMxRUNYWZq8quRwAI/yhTfLI7gj4tMzwyB27vnyW6tetZaZdXiKHaCJpFU9CVFRXHDDjmI95 Rqsxx4pTH8It5PpvmCRfMcOr6izzFWLScAC1CpUBQSBQVzpcumBxHHDZ4TT64jUDNkss0/5WboP+ +Lr/AICP/qpmp/krJ3x+39T0f+iLB3T+Q/4p5/DKsusRyqCFkuAwB60Z65u5CsdeTykJcWYHvl+l f5f/AOO9pv8AzFQf8nFwan+7l/VP3MtD/f4/68fve15yT6Qh0IlvnYFGWBfTNAeYd6OwrSlOPE5Y do+/8fraRvMnb07ednf7qRGVtzsVeDSf3jfM/rzshyfLpc1aIGSzljAdmiYSqARwVKcZCR4k8Onh kDtIHv8AwP0tsd4Eb7b+Xn+hFeXNPg1DW7SzuK+jK558TQkBS1K+9Mr1WQwxmQ5hu0GCOXNGEuRL 1PW9Bjv9EbS7dltY/gEdFqqhGBpQEeGc7g1Bhk4zu9vrNEMuHwo+kbfYxT/lVs//AFcU/wCRR/5q zZfyuP5v2uj/ANDcv54+X7XoEacI1SteIAr8s0pNl6qIoUwlv+UMb/mEP/Ecv0n97H3uJ2j/AIvP +qXnedW+coiUGKzijIdXlYysCRwZAOMZoO4PPr45WN5E934P6G6QqAG++/w6fpQ+WNLeKqltKsUy u6epHUepFUryWu61GRkLDPHIRNkWO7vRunXsuj6pbX8PCYxjmoBqCHUqynYEMA1OmVZcYywMTs5G nzHT5Y5BRr9I5Mo/5Wlcf9W9P+Rp/wCac138kD+d9ju/9Esv5g+f7Hf8rSuP+ren/I0/804/yQP5 32L/AKJZfzB8/wBinP8AmbPLE0f1BRypv6h7Gv8ALko9lAG+L7GM/aKUhXB9v7ELrX5gXWpadLZL aJAswAd+ZY8a1oNh1yzB2bHHMSu6aNZ27PNjMOERvzY1bRIzGSSnpRUZ1LcC4BAKpsfiNfDbrmfI 9BzdNjiDueQ+3yCyaUyys5FK9FqSFA2CitTQDYZKIoUxnLiNqmn/AO99t/xlT/iQyOT6T7meD+8j 7w9zzj3012KrZYxJGUJpXoRSoPYivcHfCDRYyjYpBywC+sbjT7osGZDDLLQJzqorInUU3+jLRLgk JR9/7GiUPEgccu6ie/bmGKf8qtt+2oP/AMih/wA1Zsv5XP8AN+10X+hqP88/L9rv+VWwf9XF/wDk UP8AmrH+Vz/N+1H+hqP88/L9q+D8soIZ45RfsfTZXp6Y34mv82Rl2qSCOH7WcPZ2MZA8fLy/araZ +XNpZX8F2948v1d1kWMIFqyGq1NW2qMjl7TlOJjVW2absCGPIJmRPCb5MsnmMSjijSOzBVVRU7mn I7jYdTmtjG3eznw9LdbxNFCqO/qSAfvJCACzdzQYyNlccTEUTZVMizdirwaT+8b5n9edkOT5dLm3 BJ6UqSFQ4UgshqAw7qadj0wSFikwlRBRMFxNp17Be2kil0pJGR8XGtQUeoG43ByEoicTGTdDIcMx OB35/sLIv+Vna9/vi1/4CT/qpmD/ACVj75fZ+p2/+iLP3Q+R/wCKd/ys7Xv+We1/4CT/AKqY/wAl Y++X2fqX/RFn7ofI/wDFNH8zfMFNoLQH3ST/AKqY/wAlY++X2fqX/RFn7ofI/rSmXzRqcmmDTqRR w8QhZFYMVHapZuuWYezscJCQskNGp7bzZYGB4QD3f2pbbwq5ZnZUjRSx5EjlT9haA/Ea/wAczZSp 1cIg8+Q/FLZ5PVleQKEDElUFSFHZRXsOmMRQpjOVklZkmLeKuxVWguTGPSkBktiwZ4a0qQKVB34n 3yEoXuObZDJWx3j3LvqqSAG3lVmKszxOQjLxPSrcVetduO/tg465hPhg/Sfhyr58/h8lOS2uY6ep E6clDryUiqHowr298kJg8ixljkOYPe5LW5cMUidgg5OQpIVfE+AxMwOqjHI8gdlU20UDH6y4ZkK1 giZWLA7n94vNF2+Zr2yPGTy/HwZnGIn1H4A/p3A/GynPcvKFT7MEZYwwjogc1PXc/M75KMQN+rCe Qy2/hHIdylkmCvp/+99t/wAZU/4kMhk+k+5twf3kfeHuece+muxV2KqU1vHKVcjjLHy9KUAckLCh IrXJRkR7mE8Ylv1HI9ykbmeBT9ZjLoiqTPEpbkejful5MPorkuEHl8v2tfiSj9Q2HUfq5/eqC8sy zqJ4y0ZCyLyFVY9AwrsTg4JdzMZocrGzcl5aRmkk8aHkE+JlHxHou56nwwCEjyCyywHMj5rBdSSk C3iYjkyPJIGjC8R1CsAzb9KbHxyXABzLHxDL6R89v7fxuugthGRJIRJclQkk/EKWAJNKDoKnpglO 9hyZQx1ud5d6tkGx2KuxV4NJ/eN8z+vOyHJ8ulzW4UKsFy0VUI5wMQZISSFbj0rQg/TkZRv3tkMh jtzj1C8W0U1PQkUMeRMUrBOIG4+NuKtUfL5ZHiI5hkMYl9J+B2+3l+OSw2d2ArGCQBl9RSVahT+Y bdPfDxx72JxT7j38ujYsrwhmEEhVV9RjxagT+Y7dPfHjj3qMU+49/LouNtFDX15FLLxKxRMr8gdz 8allWg+fywcRPIMjjEfqPwG/28vxyWT3LygIB6cCEmKEElV5daVJNffDGNe9jPIZbco9ApZNrdir eKuxVVtrS5uZPTt4mlfb4UBJ3IA6e5pkZTERZNM8eKUzURZVrbSNUuYTNb2ss0QrV0QsNuvT5ZCW aETRIBbMelyzHFGJI9yIj0PzEpMcdpcAuhJVVbdB16dt8gdRi5khtjo9QNhGXL7Fn6J1654N9VuJ vUXlGSrNVRTp/wAF+OHxsceoCPyuedHhkb9/46qTaRqipza0lC8DKSUP2Fpyb5CoyQzQ5WGs6XKB fCeV8ujV1pWpWsXq3NtJDHyKc3Ugch1G/fDDNCRoEFcmmyQFyiQELljQr6f/AL323/GVP+JDIZPp PubcH95H3h7nnHvprsVdiqncXNvbR+rPIsUdQvJjQVY0A+k5KMDI0GGTJGAuRoIW41zSbYRme6SM SqHjLd1apB+WxyyOnnLkOTTk1mKFcUgL3UZfMXl1ldZbuErGQHDbivbqN8mNNl6AtUtfpzdyjsu/ T2gRGSl1CtKO/E9edKNt1rzH34Py+U9Cy/O4I36o/wBv9q7/ABBovJh9cj+EKzEHYB+PE16b8xg/ LZO4p/PYf5w/t5feF0Gt6TPdC0huUe4NaRitdhU9vbBLTzEeIjZlDWYpS4BIGSOylyXYq7FXg0n9 43zP687Icny6XNbhQr2VheXsvpWsRlkFKgdqsFFSdvtMBkMmSMBcjTbhwTyGoiyiLPQNXvLf6xa2 zSw7jkCu5FagAmp6HK56iETRO7di0WXJHijGwiE8r+YlYCO1bky8qo6H4SaDcN37eOQOrxdS2js7 UA7R+0frWJ5d1+4CMLZ3DryQll6fDtudj8Y2O+E6nFHqxGgzzr0k/j9oU28vayqljbNtG0xWqlhG lOTFa8hTlkhqcff1pgdDmA+npfwC290PVLGETXUPpxlzGDyQ/EuxFASdsOPUQmaiUZtHlxi5Chdd EDlziuxVvFXYqnOi+YYdKjBSyElxUcp+ZXkokSTiVoe8eYmfTHIfq2/YR+l2Oj1wwDaNy778wf0I zTvOQ0+ze0trFfSYkoHkLUqCCDsCfte2VZdDxy4jLf3ORg7W8KBhGG3vUrLzjd2nERW8ZVYreIhi TU2zllbanXkcnPQxlzPUn5teHtaePkByiP8ASmwrW3nq8gVf9HRnReKNWg39MsStN6mLvuMhLs+J 6/jf9bbj7anEfSLH/Hf+J+DX+NHR1khtArrF6HxSFwU5o5BBWpqE4nfvh/I3sT1vkx/lcg2I71XO 9rB7vKkr1bWW1FFVohHxnuLioNd7lgxXoPs8cyMODg69APk4eq1Zyiqr1Sl/pil2XuGr6f8A7323 /GVP+JDIZPpPubcH95H3h7nnHvprsVdiqWavo0mpMitdPFbqUZoFVSGZH5A1O4zIw5xj6WXC1WkO avURHbb3G0tvfJUd7DBHcXrt6EaxKwRB8ChgOngHy/HrzAkiPNw83Y4yACUz6RXIct/1oqbyraTP I8k0pZ2RwwI5ApB6HWm9V3+eVx1khyA/Btvn2ZCRJJO9fZHhQv8AgTTgOKzScTwV60qyJ6VFqKU/ ueo8fllv8oT7vxv+to/kXHys9PkOH/iftbTyTbAMkly0kDiFXiKKAVg4ACo8ViAOA689Bvv9t/rT HsePIyuJ4dq/m1+pMNL0CLT5YpFmeVooDb1elSGlMvI+9TlObUGYIqrN/ZTlabQjEQbJqPD9tppm M5zsVdirwaT+8b5n9edkOT5dLmtwoTfSPML6ZGBDaQtMDU3Dc+ZXmknE0YClYx2zFzabxDuTXd8x +lz9LrzhHpjG+/e+YPf5Iqx853NjayWtrZwJA5JEZMjKKggjd/iG/Q5Xk0ImbkTfwb8Pa0sUTGMY 8J9/6/vUrTzfqdpxEKRUWKCEqykgi3YsjbEb7muSnooS53zJ+bDF2pkhyA5RH+lNhWg886vCFIWN pEXhHIQaqDwLd6fEYgTkZdnwP49/62yHbOWPdf8AZfzp3+Nb9QnpQRxGNPSSjSFQnNHpwLFf91gH bcY/kI9Sfs/HVf5XmKoAUK68rB5XXRLNT1mfUFVZUVAs08441+1cMGYbnoOO2X4sAhy7gPk4eo1c sooj+KR/0yAy9xHYq9g+r+Sv996b/wADBnL8Wo75/a+geHou7F/sXfV/JX++9N/4GDHi1HfP7V8P Rd2L/Yu+r+Sv996b/wADBjxajvn9q+Hou7F/sXfV/JX++9N/4GDHi1HfP7V8PRd2L/Yu+r+Sv996 b/wMGPFqO+f2r4ei7sX+xd9X8lf7703/AIGDHi1HfP7V8PRd2L/Yu+r+Sv8Afem/8DBjxajvn9q+ Hou7F/sXfV/JX++9N/4GDHi1HfP7V8PRd2L/AGLvq/kr/fem/wDAwY8Wo75/avh6Luxf7FckHk0O pSPTg4IKkCCte1MTLP8A0/tSIaO9hi/2Kc5iOxdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirwXOzfLU10LQJNWMpEwhSJoUYkcmJmkEYoKjpWvXMbUakY62u7+wW52i0Jz3vQ HD/sjSvovlj9J3F5D9Z9H6pJHHy4cuXqSenX7S0p1yGfV+GAau/1W26Ps7xpSHFXCQOXea70fJ5I t4tRtbGXUWSS8VjCDB8QKHfkPUoAQNjXKRryYGQj9Pn+xypdjRGSMDOjPl6f2rLTyXb3KxumoMEu 5HisW9BvjaNSXL0Y8ACrDqfHDPXGN+nkLO7HF2RGdET2kSI+nnXO99uR+9Z/gwrpou5bv05KgNGY /g5esYSqyct2+GtKZL896+ED7fK+TH+SKx8ZlR9231cNXfNES+QljvIrf68xMgmJBgIk/c91Tn8Q bsa5WO0biTw93Xv+DbLsQCYjx8+L+Hf09wve1FPJEksM0sNw9YLhIGilhMcnBljZpOJY/Z9Xp4b1 yZ14BAI5i+fv2+xrHY5lEkSO0gKMaNUN6vpfyUL7y3ptpZXVydSd2tp3tPT+r05TIGIWvqGgPHrk seqnKQHDzF8+nyas3Z+OEJS4z6ZGP0/xb/0kit/7+P8A11/XmZLkXWY/qHve75xz6g7FUFquqJp6 wFo2kNxKsK02ALd2P0Zdhw8d78hbjanUjEBtfEaQN15l9DQ7TVPq3L61w/c86cealvtcd6U8Mthp byGF8nGydocOCOXh+qtr7x7kvtPPFzdWt1PBpgc2kSzy8bhSgjKljVuGzCn2aZfPQCMgDLma5OJi 7ZlOMpRx3wiz6unvrn5Ol88XEccNdNHrzQG7MX1hABb8eQfkV3YgH4aVxGgBJ9WwNcuv46rLtmQA /d+ox4q4h9PfdfYqDzvE97awQ2hkiuvRo3qASj1q9IuPxBOPxEHI/kCIkk7i/dt5s/5ZBnGIjYlw 9d/V5eXXdQi8/wDOG5kNh/vPEZQEmDDaX0uL0T4Ceorkz2dRA4uZrl5X37tUe3LEjwfSL+rzrfbZ FDzkkctglzBGiXrOjTRTrOkfEhVJZFoalhXfbK/yNiVH6e8Vbf8AysAYCQAE73EhID5fgLYfNmqT yWKxaSGXUEL27fWVFQigyVBTbjX6cMtHACVz+nnt8urGHamWRhWP+8G3q7ufToybNe7p2KuxV2Ku xV2KuxV2KuxV2KuxV2KvDP0ff/8ALNL/AMA39M7DxI94fMvAyfzT8mRQ+Y9WhiVYtIjjcegHkWKQ FhbsrJXen7OYMtLAneff1HV20NfliKGIA+nof4eS238warbXEs9tpCQmb0zIqxy0LRyeoG69SeuM tNCQAM7rzHdSIa7LCRlHGBddJdDbUnmLX3vrO5/R4RbEu0MKxycayCjFiSWP34RpsQiRxfV5hEtf nM4y4PouhR6/ahrLV/MlmsKwwOUt5XmhVomPFpEZG+j4yfnlmTDildnmK59zVh1Wpx0AD6SSNu8E fpVYtc19IvSezaWMxGN1dJCGb1TMJDT9sM2ROnxE3db+XdVM463OBRjYquR7+K/faunmbXvUZ5dP 9YmSZ1DpKeKzijxih+z3yB0uKqEq5d3Tq2jtHPdmF7y6H+LmPcsi8wa3byRta6d9XWOf6xwRJeJJ jETKak7ED78MtNjl9Ur2rp32wjrs8COGHDUuLke6qQN5d6vdW1zbvZMq3N2165CPUOwI4iv7PxZd CEIkHi5R4XGy5c04yiY/VPj5HmgoLC/E8ZNtL9pf2G8fllsskaO4caGCfEPSfk9vzkX0t2KpLN5Z WW7adr2cxtcC6NueBT1AAo3K8qAClK5lx1dRrhHKrdbPs4SnxGcq4uKtqv5WsHlOM6ethLezy28Z QwhhGOARWWgoo68u/hh/OHi4hEA/Fj/Jg8PwzORiKrltV+XmssfJlhaR3KieaR7m2NoXbgOMZXjs FUb+5w5NdKRGw2N/Fjh7Ix4xLcnijw9OXyVp/KWlzx26yGTnb2psllUgMYynDfYioqaZGOsmCa6y 4vi2z7LxSEbu4w4L8qpa3lDTAwaJnieP0PQdaco/q9acSRX4uXxYfzs+u/P7WJ7Kx8xYrhry4f19 VBvI+mm39FJpI+UbxSuvEGRXl9Uctt+J6ZMa+d3Q539lNZ7Gx8PCCRsQeW9ni39yvJ5Vt5wBeXMt zRJYwXEa0WUL/Iq/ZK1HvkBrCPpAHLv6NkuzIy+uRlsR0613DpSItfL9tbHTSkjn9GJJHFWnxCUA Hlt2p2yuepMuLb66+xtxaGMOCif3YIHxTTMdznYq7FXYq7FXYq7FXYq7FXYq7FXYq//Z - - - - uuid:55729de8-ce10-5e4b-bd9c-8f6f469f8e69 - xmp.did:1311eb72-f8f3-457b-957c-d696baba59db - uuid:5D20892493BFDB11914A8590D31508C8 - proof:pdf - - uuid:d1c078a0-2746-42b2-b0d1-25aedff8fb1e - xmp.did:1b6690ed-28a8-c141-9479-b6a9cf6be651 - uuid:5D20892493BFDB11914A8590D31508C8 - proof:pdf - - - - - saved - xmp.iid:1311eb72-f8f3-457b-957c-d696baba59db - 2015-12-09T11:35:17-05:00 - Adobe Illustrator CC 2015 (Macintosh) - / - - - - Document - Print - False - True - 1 - - 500.000000 - 500.000000 - Pixels - - - - Cyan - Magenta - Yellow - Black - - - - - - Default Swatch Group - 0 - - - - White - RGB - PROCESS - 255 - 255 - 255 - - - Black - RGB - PROCESS - 35 - 31 - 32 - - - CMYK Red - RGB - PROCESS - 237 - 28 - 36 - - - CMYK Yellow - RGB - PROCESS - 255 - 242 - 0 - - - CMYK Green - RGB - PROCESS - 0 - 166 - 81 - - - CMYK Cyan - RGB - PROCESS - 0 - 174 - 239 - - - CMYK Blue - RGB - PROCESS - 46 - 49 - 146 - - - CMYK Magenta - RGB - PROCESS - 236 - 0 - 140 - - - C=15 M=100 Y=90 K=10 - RGB - PROCESS - 190 - 30 - 45 - - - C=0 M=90 Y=85 K=0 - RGB - PROCESS - 239 - 65 - 54 - - - C=0 M=80 Y=95 K=0 - RGB - PROCESS - 241 - 90 - 41 - - - C=0 M=50 Y=100 K=0 - RGB - PROCESS - 247 - 148 - 30 - - - C=0 M=35 Y=85 K=0 - RGB - PROCESS - 251 - 176 - 64 - - - C=5 M=0 Y=90 K=0 - RGB - PROCESS - 249 - 237 - 50 - - - C=20 M=0 Y=100 K=0 - RGB - PROCESS - 215 - 223 - 35 - - - C=50 M=0 Y=100 K=0 - RGB - PROCESS - 141 - 198 - 63 - - - C=75 M=0 Y=100 K=0 - RGB - PROCESS - 57 - 181 - 74 - - - C=85 M=10 Y=100 K=10 - RGB - PROCESS - 0 - 148 - 68 - - - C=90 M=30 Y=95 K=30 - RGB - PROCESS - 0 - 104 - 56 - - - C=75 M=0 Y=75 K=0 - RGB - PROCESS - 43 - 182 - 115 - - - C=80 M=10 Y=45 K=0 - RGB - PROCESS - 0 - 167 - 157 - - - C=70 M=15 Y=0 K=0 - RGB - PROCESS - 39 - 170 - 225 - - - C=85 M=50 Y=0 K=0 - RGB - PROCESS - 28 - 117 - 188 - - - C=100 M=95 Y=5 K=0 - RGB - PROCESS - 43 - 57 - 144 - - - C=100 M=100 Y=25 K=25 - RGB - PROCESS - 38 - 34 - 98 - - - C=75 M=100 Y=0 K=0 - RGB - PROCESS - 102 - 45 - 145 - - - C=50 M=100 Y=0 K=0 - RGB - PROCESS - 146 - 39 - 143 - - - C=35 M=100 Y=35 K=10 - RGB - PROCESS - 158 - 31 - 99 - - - C=10 M=100 Y=50 K=0 - RGB - PROCESS - 218 - 28 - 92 - - - C=0 M=95 Y=20 K=0 - RGB - PROCESS - 238 - 42 - 123 - - - C=25 M=25 Y=40 K=0 - RGB - PROCESS - 194 - 181 - 155 - - - C=40 M=45 Y=50 K=5 - RGB - PROCESS - 155 - 133 - 121 - - - C=50 M=50 Y=60 K=25 - RGB - PROCESS - 114 - 102 - 88 - - - C=55 M=60 Y=65 K=40 - RGB - PROCESS - 89 - 74 - 66 - - - C=25 M=40 Y=65 K=0 - RGB - PROCESS - 196 - 154 - 108 - - - C=30 M=50 Y=75 K=10 - RGB - PROCESS - 169 - 124 - 80 - - - C=35 M=60 Y=80 K=25 - RGB - PROCESS - 139 - 94 - 60 - - - C=40 M=65 Y=90 K=35 - RGB - PROCESS - 117 - 76 - 41 - - - C=40 M=70 Y=100 K=50 - RGB - PROCESS - 96 - 57 - 19 - - - C=50 M=70 Y=80 K=70 - RGB - PROCESS - 60 - 36 - 21 - - - - - - Grays - 1 - - - - C=0 M=0 Y=0 K=100 - RGB - PROCESS - 35 - 31 - 32 - - - C=0 M=0 Y=0 K=90 - RGB - PROCESS - 65 - 64 - 66 - - - C=0 M=0 Y=0 K=80 - RGB - PROCESS - 88 - 89 - 91 - - - C=0 M=0 Y=0 K=70 - RGB - PROCESS - 109 - 110 - 113 - - - C=0 M=0 Y=0 K=60 - RGB - PROCESS - 128 - 130 - 133 - - - C=0 M=0 Y=0 K=50 - RGB - PROCESS - 147 - 149 - 152 - - - C=0 M=0 Y=0 K=40 - RGB - PROCESS - 167 - 169 - 172 - - - C=0 M=0 Y=0 K=30 - RGB - PROCESS - 188 - 190 - 192 - - - C=0 M=0 Y=0 K=20 - RGB - PROCESS - 209 - 211 - 212 - - - C=0 M=0 Y=0 K=10 - RGB - PROCESS - 230 - 231 - 232 - - - C=0 M=0 Y=0 K=5 - RGB - PROCESS - 241 - 242 - 242 - - - - - - Brights - 1 - - - - C=0 M=100 Y=100 K=0 - RGB - PROCESS - 237 - 28 - 36 - - - C=0 M=75 Y=100 K=0 - RGB - PROCESS - 242 - 101 - 34 - - - C=0 M=10 Y=95 K=0 - RGB - PROCESS - 255 - 222 - 23 - - - C=85 M=10 Y=100 K=0 - RGB - PROCESS - 0 - 161 - 75 - - - C=100 M=90 Y=0 K=0 - RGB - PROCESS - 33 - 64 - 154 - - - C=60 M=90 Y=0 K=0 - RGB - PROCESS - 127 - 63 - 152 - - - - - - - Adobe PDF library 10.01 - - - - - - - - - - - - - - - - - - - - - - - - - endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 12 0 R/TrimBox[0.0 0.0 500.0 500.0]/Type/Page>> endobj 33 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 500.0 500.0]/Type/Page>> endobj 57 0 obj <>/Resources<>/ExtGState<>/Properties<>/XObject<>>>/TrimBox[0.0 0.0 500.0 500.0]/Type/Page>> endobj 103 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 500.0 101.0]/Type/Page>> endobj 104 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 500.0 101.0]/Type/Page>> endobj 118 0 obj <>stream -HlWKn7)xGnYE ˀUn搜,Y~kp~yu]Z \{?^~ޏ.bPW|csK xhF'58i9L/ |Ԝfb˗ão%{Kq(ݏc| '߲L= >ٗ%P3 -{w8М%+.V"m6i~dkO[i=ELvu|5JR".8S9 D9f3(9pt5W^vbl?Ga2 䢉gj5 -s}i,4x~^Bu)4[tE ch@34/?Φ[d{O 7`|х5eQ`&j!)b~@@r Nwnpۆ. /΁+'!tOP|T'r$$nXlqdzԐp!#2BӉEœI4>:rDk}ՇL\H)$w)ѥ` 7=) qTxPUV/yK٭с-n3v!KO/ Jz~O'Á)7&؞#`dL5H~@HvkŜ\;s# -+6G%[·C3m$O,xJb`&H!sfhbE!>CY&0WJP?n qT? Ds؉=P6s3a)i!K;1&3 3jCr'FKȗ%m(>¨-Qq~j 8(sEt#7>s,K:` 1\(sgdG$>Ċ8w{"2+,}8 Q=ij̣j+*@#Km+Xeι@.o:L }ۈF=syAZ?Wx' F\>xaF >T+m+d 0u" endstream endobj 119 0 obj <> endobj 101 0 obj <> endobj 121 0 obj [/View/Design] endobj 122 0 obj <>>> endobj 109 0 obj <> endobj 108 0 obj [/ICCBased 123 0 R] endobj 123 0 obj <>stream -HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  - 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 -V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= -x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- -ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 -N')].uJr - wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 -n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! -zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 107 0 obj <> endobj 124 0 obj <> endobj 125 0 obj <>stream -%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 17.0 %%AI8_CreatorVersion: 19.1.0 %%For: (Marcelina Knitter) () %%Title: (jlibtorrent_logo.ai) %%CreationDate: 12/9/15 12:00 PM %%Canvassize: 16383 %%BoundingBox: 0 -643 1613 9 %%HiResBoundingBox: 0 -643 1613 9 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 13.0 %AI12_BuildNumber: 29 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -500 500 0 %AI3_TemplateBox: 250.5 -250.5 250.5 -250.5 %AI3_TileBox: -38 -606 538 128 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI17_Begin_Content_if_version_gt:17 1 %AI9_OpenToView: 70 -30 1 1782 954 90 1 0 331 334 0 0 0 1 1 0 1 1 0 1 %AI17_Alternate_Content %AI9_OpenToView: 70 -30 1 1782 954 90 1 0 331 334 0 0 0 1 1 0 1 1 0 1 %AI17_End_Versioned_Content %AI5_OpenViewLayers: 7 %%PageOrigin:-56 -646 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 126 0 obj <>stream -%%BoundingBox: 0 -643 1613 9 %%HiResBoundingBox: 0 -643 1613 9 %AI7_Thumbnail: 128 52 8 %%BeginData: 10604 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45AF8BAF85AF8BAF85AF8BAF85AF8BAF85AF8BAF85AF8BAF85AF8BAF %85AF8BAF85AF8BAF85AF8BAFAFFD30FF613D613D613D613D613D613D613D %613D613D613D613D613D613D613D613D613D613D613D613D613D363D3C3D %363D3C3D363D3C3D363D3C3D363D3C3D363D3C3D363D3C3D363D3C3D363D %3C3D363D1461FD30FF3C3D3C3D363D3C3D363D3C3D363D3C3D363D3C3D36 %3D3C3D363D3C3D363D3C3D363D3C3D363D3C3D3D3D613D3D3D613D3D3D61 %3D3D3D613D3D3D613D613D613D3D3D613D3D3D613D3D3D61FD043D61FD30 %FF613C613D3D3C613D3D3C613D3D3C613D3D3D613D613D613D3D3C613D3D %3C613D3D3C613D3D3C613D3C3D363D3C3D363D3C3D363D3C3D366160613C %6160613C613C3D363D3C3D363D3C3D363D3C3D3661FD12FFA9FFA9AF84AF %A9AFA8AFA9FFAFFD11FF3C3D363D3C3D363D3C3D363D363D366160616061 %60613C613C3D363D3C3D363D3C3D363D3C3D363D613D613D613D613D613D %613D61618B61613D613D3D3DFD05613D3D3D613D613D613D613D3D61FD11 %FFAFAFAFFD09FFAFFD12FF613D613D613D613D613D613D61618B3D613D61 %3D3D3DFD046167613D3D613D613D613D613D613D3C3D363D3C3D363D3C3D %36616161363D3C3D363D3C3D363D3C3D60853C3D363D3C3D363D3C3D3661 %FD10FFA9AFFD0CFFAFAFAFFD0FFF3C3D363D3C3D363D3C3D36616161363D %3C3D363D3C3D363D3C3D3C853C3D363D3C3D363D3C3D363D613D3D3D613D %3D3D613D8B61FD043D613D3D3D613D3D3D613D3D3D8B613D3D613D3D3D61 %3D3D61FD0FFFA9FD11FFAFFD0EFF613D3D3C613D3D3C613D61613D3D3D3C %613D3D3C613D3D3C613D3D3C8B613D3C613D3D3C613D3D3C363D3C3D363D %3C3D36853C3D363D3C3D363D3C3D363D3C3D363D3C3D3661603D363D3C3D %363D3661FD0DFFAFA9FD13FF85FD0DFF3C3D3C3D363D3C3D36853C3D363D %3C3D363D3C3D363D3C3D363D363D1461603D363D3C3D363D3C3D613D613D %613D613D8B613D3D613D613D613D613D61FD093D6161613D613D613D3D61 %FD0DFFAFFD15FFAFFD0CFF613D613D613D613D8B613D3D613D613D613D61 %3D613D3D3D613D613D613D6161613D613D613D613D363D3C3D363D3C6160 %3D3C3D363D3C3D363D3C3D363D3C85848B858B603D3C853C3D3C3D363D3C %61FD0CFF85FD0EFFAF608B618560FFFFAFA9FD0BFF3C3D3C3D363D3C6160 %3D3C3D363D3C3D363D3C3D363D3CAFA8FFA8FFA8613C613C3D3C3D363D3C %3D3D3D613D3D3D61613D3D613D3D3D613D3D3D613D3D3DAFFD05FFAF3D3D %3D8B3D61FD043D61FD0BFFAFFD0EFF8B613D3C3D3D3DAFFFFFAFAFFD0AFF %613C613D3D3C61613D3C613D3D3C613D3D3C613D3D3CFFFFA8CAFFFFFF3C %3D3D8B3D613D3D3C613D3C3D363D3C3D3C61363D363D3C3D363D3C3D363D %3CAFFFAFFD04FFA93D363D6061363D3C3D3661FD0AFFA9AFFD0DFF851461 %3C3D363D3CAFFFFFAFAFFD0AFF3C3D363D3C3D3C61363D363D3C3D363D3C %3D363D3CAFFFFF7EFFA8FFA83D363D3C61363D3C3D363D613D613D613D8B %3D613D613D613D613D613D3D3DFFFFFFAFFD04FFAF3D613D61613D3D613D %3D61FD0AFFAFFD0DFF8B3D3D61613D613D3DAFFFFFFFA9FD0AFF613D613D %613D8B3D613D613D613D613D613D6161FD04FFA8A8FFFFFF3D613D616161 %3D613D613D3C3D363D3C613C3D3C3D363D3C3D363D3C3D3CFD04FFAFFD04 %FF853D363D3C613C3D3C3D3661FD0AFFA9FD0CFF8B3C3D36613C3D363D3C %AFFD04FFA9FD09FF3C3D363D3C613C3D3C3D363D3C3D363D3C3D3CAFFD04 %FFA8FFA8AF603D363D3C613C3D3C3D363D61FD043D61613D613D3D3D613D %3D3D613D6161FFFFFFAFFFFFFF6161FD043D61613D613D3D61FD09FFAFAF %FD0CFFAF8B3D3D61613D3D85FD05FFAFAFFD09FF613D3D3C3D61613C613D %3D3C613D3D3C613D3D3CFD04FFA8FFFF603D3D3D3C3D61613C613D3D3C36 %3D3C3D36613C3D363D3C3D363D3C3D363D3661AFFFFFAFAFFFFF61143D3C %3D36613C3D363D3661FD0AFFAFFD0DFF603D3661363D148BFD06FFA9FD09 %FF3C3D3C3D36613C3D363D3C3D363D3C3D363D363DA8FFFFFF7DFFCA8514 %3D3C3D3661603D363D3C3D613D613D6161613D613D613D613D613D613D3D %61FFFFFFAFFFFFFF613D3D613D613D8B3D613D3D61FD09FFAFFD0EFF8B3D %3D61613D3D85FD06FFAFFD09FF613D613D3D61613D613D613D613D613D61 %3D3D3DFD04FFA8FFFF613D3D613D613D673D613D613D363D3C3D3C613C3D %363D3C3D363D3C3D363D3C61FFFFFFAFFFFFFF61363D3C3D3661613D363D %3C61FD0AFFAFFD0DFF603D3C613C3D368BFD06FFAFFD09FF3C3D3C3D3661 %3C3D363D3C3D363D3C3D363D3C3DA9FFFFFF7DFFCA85363D3C3D3661613D %363D3C3D3D3D613D6161613D3D3D613D3D3C61FD043D61FFFFFFAFFFFFFF %613D3D613D3D3D8BFD043D61FD09FFA9FD0EFF853C3D61613D3D85FD06FF %AFFD09FF613C613D3D61613D3D3C613D3D3C8B3D3D3C613DFD04FFA8A8FF %613D3C613D3D3D673D3D3C613D3C3D363D3C61363D3C3D363D1485A83D3C %3D3661FFFFAFAFFFFFFF61363D363D3C613C3D3C3D3661FD09FFAFA8FD07 %FF3CAFFD04FF603D36613C3D148BFD06FFA8FD09FF3C3D363D3661363D3C %3D363D36AFA93D363D363DA9FFFFFFA8FFA885363D363D3661603D3C3D36 %3D613D613D3D61613D613D613D8BFFFF3D613D6161FFFFFFAFFFFFFF613D %3D613D3D61673D613D3D61FD09FFAFFD07FF3D3DAFFD04FF8B3D6161613D %3D85FD10FF613D613D3D61613D613D613DAFFFFF3D3D3D613DFD04FFA8CA %FF613D3D613D613D8B3D613D613D3C3D363D3C613C3D3C3D368BFFFF853D %3C3D1461FFFFFFAFFFFFFF613C3D363D3C613C3D3C3D3661FD0AFFA9FD05 %FF3C3D3CFD05FF613D36613C3D148BFD05FFAFA9FD09FF3C3D363D3C6160 %3D3C3D36AFFFFFA9613C3D3661AFFFFFFFA8FFA8853C3D363D3C613C3D3C %3D363D613D3D3D6161613C613D61FD04FF618B858B85FFFFFFAFFFFFFF61 %FD043D6161613D613D3D61FD0AFFAFFD04FF613D3D3D85AF858B85613D3D %61613D3D85FD05FFAFFD0AFF613D3D3C613D613C613D61AFFFFFFFAFFFAF %FFAFFD04FFA8FFFF603D3D3D3C3D61613C613D3D3C363D3C3D363D606136 %3D3CFD0CFFAFAFFFFF61143D3C3D6061363D363D3661FD0AFFA9AFFFFFFF %85143D3C3D143D143D363D3661363D1485FD04FFA9AFFD0AFF3C3D3C3D36 %3D6061363D3CFD0DFF7DFFCA85143D3C3D3C61363D363D3C3D613D613D61 %3D6161613D61FD0CFFAFFFFFFF613D3D613D8B3D613D613D3D61FD0BFFAF %FFFFFF61FD0B3D61613D3D85FD10FF613D613D613D6161613D3DAFFD0CFF %CAFFFF613D3D613D673D613D613D613D363D3C3D363D3C853C3D3CAFA9FF %AFAFA9FFAFAFA9FFAFAFA9FF853D363D3C61603D3C3D363D3C61FD0BFFAF %85FFFFAF3C6161613C6161613C613D85606161AFFD04FF85FD0BFF3C3D3C %3D363D3C613C3D3C61848B858B848B858B848B85855A8B603D363D3C6160 %3D3C3D363D3C3D3D3D613D3D3D613D613D3D3D613D613D613D613D613D61 %3D61FD043D3C61613D3D61FD043D61FD0DFFAFFD15FFAFFD0CFF613C613D %3D3C613D61613D3D3D3C3D3D3D3C3D3D3D3CFD073D3C61613D3C613D3D3C %613D3C3D363D3C3D363D3C61363D3C3D363D3C3D363D3C3D363D3C3D363D %3C3D60613C3D363D3C3D3661FD0CFFAFAFA9FD13FFA8FD0DFF3C3D363D3C %3D363D3C61363D3C3D363D3C3D363D3C3D363D3C3D363D36616061363D36 %3D3C3D363D613D613D613D613D3D618B3D3D3D613D613D613D613D613D61 %3D613D6185613D613D613D613D3D61FD0EFFAFFD12FFA9FD0EFF613D613D %613D613D3D3D8B3D3D3D613D613D613D613D613D613D613D6161613D613D %613D613D613D3C3D363D3C3D363D3C3D3C8B3D3D363D3C3D363D3C3D363D %3C3D3685613D363D3C3D363D3C3D3661FD0FFFAFA9FD0FFF85FD0FFF3C3D %363D3C3D363D3C3D3685613D363D3C3D363D3C3D363D3C3D3661613D363D %3C3D363D3C3D363D613D3D3D613D3D3D613D3D3D618561FD053D613D3D3D %61618B3D613D3D3D613D3D3D613D3D61FD11FFAFFFAFFD0AFFAFAFFD10FF %613D3D3C613D3D3C613D3D3C616161FD043D3C3D3D3D3C61618B3D613D3D %3C613D3D3C613D3D3C363D3C3D363D3C3D363D3C3D363D606160613C613C %61606160613C3D363D3C3D363D3C3D363D3661FD12FFAFAFA8AFAFAFA9AF %A9AF84AFFD12FF3C3D3C3D363D3C3D363D3C3D363D3C613C613C613C6160 %6160613C3D363D3C3D363D3C3D363D3C3D613D613D613D613D613D613D61 %3D3D3DFD04616761613D3D3D613D613D613D613D613D613D3D61FD17FFAF %FFAFFFAFFD14FF613D613D613D613D613D613D613D3D3D613D6161676161 %3D3D3D613D613D613D613D613D613D613D363D3C3D363D3C3D363D3C3D36 %3D3C3D363D3C3D363D3C3D363D3C3D363D3C3D363D3C3D363D3C61FD30FF %3C3D3C3D363D3C3D363D3C3D363D3C3D363D3C3D363D3C3D363D3C3D363D %3C3D363D3C3D363D3C3D3D3D613D3D3D61FD063D3C3D3D3D3C3D3D3D3CFD %073D3C613D3D3D61FD043D61FD30FF613C613D3D3C613D3D3C3D3D3D3C61 %3D613C613D3D3C613D3D3D613D613D613D3D3C613D3D3C613D3C3D363D3C %3D363D3C3D3C8B3C85848B8585848B6085608B60856085608B603D3C3D36 %3D3C3D3661FD0EFFA88BA9AF608585858485858584858585848B858560FD %0DFF3C3D363D3C3D363D3C3D60AF3C85A8AF85AF84AF84AF84AF85AF84AF %85AF603D3C3D363D3C3D363D613D613D613D613D3D3DAFAF61A9FFAFAF85 %FFAFAFAFFFFFAF85AFFFAFAF673D613D613D613D3D61FD0EFFAF3DAFA961 %3DAF618B61613D8B3D8B61AF3D8B858BFD0DFF613D613D613D613D3D61AF %AF61A9FFAFAF85FFAFAFAFFFFFAFAFAFFFAFA9673D613D613D613D613D3C %3D363D3C3D363D3C8B85AF858BA98B6185608B618B85AF858B84AF85853C %3D3C3D363D3C3D3661FD0DFFAF608B85AF608BA9AFA9AF85AF848B858584 %AF85AF85FD0DFF3C3D363D3C3D363D3C85848B8585848B61616085616184 %8B858B608B61853C3D3C3D363D3C3D363D613D3D3D613D3D3D613D613D61 %3D613D613D3D3C613D613D613D613D613D3D3D613D3D3D613D3D61FD30FF %613D3D3C3D3D3D3C3D3D3D3C3D3D3D3C3D3D3D3C3D3D3D3C3D3D3D3C3D3D %3D3C3D3D3D3C3D3D3D3C143D143D143D143D143D143D143D143D143D143D %143D143D143D143D143D143D143D143D143D1461FD30FF3C3D3C3D36613C %3D36613C3D36613C3D36613C3D36613C3D36613C3D36613C3D36613C3D36 %613C3DAF858B85AF858B85AF858B85AF858B85AF858B85AF858B85AF858B %85AF858B85AF858B85AF858B85FDFCFFFD5CFF85AF84AF85AF84AF85AF84 %AF85AF84AF85AF84AF85AF84AF85AF84AF85AF84AF85AF84AF85AF84AFFD %58FFFD273D61FD58FF3C3D363D3C3D36613C3D3C613C3D3C613C3D3C613C %613C3D3C3D36613C3D363D3C613C613C3D3661FD10FFAFFFFFFFAFFD05FF %AFFD05FFAFFFAFFFFFFFAFFD31FF61FD053DAFA98B3DAFAFFFAF8BFFAF85 %FFA98BAFAF85FFAF8BAF8B85AF61AFAFFF613D3D3D61FD0AFFAF618BFFAF %6161618B3D6185613DAF8561858B618B618BAF61A98B616161FD30FF363D %3C3D3661A9AF603DA9AFA9AF3CAF60FF60FF84AFA985A8AF85AF608BFFAF %608B853D363D3661AFFD09FF856184FF85613C61A985608B3C853C853C85 %6061856184AF3C6160FF60FD31FF613D613DAF85FFAFAF61FFAFFFFF61AF %67FD06AF85FFAFAFAF8BAFAFFF8B85AF3D613D3D61FD08FFAF858B618BFF %AF3D673DAF858BAF61618B6161858B618B618B8B8B6167FF61FD31FF363D %3C3D60AF8585858B858B858B3C8B3C6161613C61618B6061858B848B6185 %6061613D363D3C61FD08FFA98B61AF608BA98B608BAFAF85FFA9AFA9AFAF %8B84FF858B60AFA9AF84FF85FD31FF3D3C3D3D3D3C3D3D3D3C3D3D3D143D %3D3D3C3D3D3D3C3D3D3D3C3D3D3D3C3D3D3D3C3D3D3D3C3D61FD58FF6061 %606160616061606160616061606160616061606160616061606160616061 %6061606160616085FD57FFFF %%EndData endstream endobj 127 0 obj <>stream -JeO(NN}l&;1335)=]$ -\ٰMSTGP"|6i8|ejl^eŶɴu&*+I'3*ѳiiܾCyZ\[lbw| ǯ:h7R6]t$ukLt~?jrJ -ZD;TjtŸǗ2#AiƸ]H&ܝM̠ ݜ9&KxD*&WH'.;w+$WMZGun>Ѳq㓱^~vs0Kz ~E06.Ov0-_?Ic` #:mi, |=ڀg[Eyo~t |oW\0''xPɁl}r.r&9ĐFg:0I:~)4 5Luw³ z}~jL,zI X2tӰF )YWG_6,d -RQj x|}͋t|@;/}VKc4j!V_ZI>W\)u`%=jZTkDw2$CrpD*eT< -WO8(\  ^SH8Tt5c*)a< GeFC1`h^#sF p»{VCa@R!`d@M[ڰEipii4) -dz.8Q1]i&p -K ͖^(wj=Fj;Gtp7{{[ՏxB.z2𡒳x]udo͇scO+5E[gC[_kymx#EHz7YLJ`c|4u5S` 6RL`0,O.~䨐{MFWؼ -,GDzw.DzZ< v齯 Bo]$tzzn0ydt_8<˦:v_ӳѩoڟ> ;_wHCo@'XU2*SIUrW@ADS 5|Ȓ*: 4׈΋rQXށ.i54a]6eqMX]WPw53zܸqLK\/k=#_Z@']i|aQ;021L2֍dICXKW. YAW)$ݢ&:߆ :滫khԆ%]0X2ƒRQq_Q%PTэyZ`W5WG4E/eEm(_.K,Pe|-B.Ka ws_6d GUȮ) eHe:9Yפ9 RtcԺp/|ȯjCg~{Gy nZwnVһc ]f*mꤥ~ ]|·wwݳy\1sB=?Sn㧞vo{~t<쉈8{kk -t;ttEet쁓cvSIjاҫ,0Cgyӓ/1sXmVIPlthÍqOU&ܼL5)o7XB:i6t^"2fS'*Q҈YXA2, -ep䁻ALZU^9IR[3xyB;TR$z;VTj3FZ!QE6 ^ YlI'Q`Hrt4)!iX֓Q,%hLo; Sq hGbTSu%᥂xVcaJtV'ϥiu~ޤ}Ђrsv +tIT}W5:4doWp&v gqW}:Z<Ȳ]k):B -)9eɉMytP|7{!To.wNRӹzuyӥ3s^ Õ-E]r{{g1m~a1-܂(1~UL].4ל眄ǘPdQ5?O?$aڧ It4= 0J&*IܽL`JR42祩H GTC_;l6K *(I6cUJTU˺Ekjx^<٢cj-g]Xq=#CpR8W}1;,WQe .5OM& YBLPhf*nQcy+6y9Kd" -;0<-h`kAH`8|Ds kѹ $6ߵN47M,GTL;PmCLts*;̑Vp"0DJLGF $3<&X+[^jUR: WwTT̃VcTjTqRD# -c?@A`r@myL<%A#~[ZTIsG+ŜAc1b^ -KiFFy˼ -.7?F?C;igͮ x&P%V?~p* Ke[.1 aS#"eE֠]sO[BCbB w*0~=t  syA~ o[TWNd:XY-HR]sqefﮧ*t$xcNQ^FGc&M:tzy,? :OA24VI$  xFU0`1$Dy($D~/VŰ`]p\ʘ3FKIXDS 䲽mK+T>lণL. tEFiD܍7 12H|C! g &ڤOsgS(TFI1rP 'vW*RF2 >*wQ>>Et  ,*:$EdIuTTʑzv,UcaX"-O]Km(A)d^\}B^XȮ&CNE#5}3YTRgoCBz -MEtn0L.nKwX*2Q-P J'[nӕX8 ˃trLB^SEɦ]l 0ӝCtFSAT g6U>I GEv9 R%Ω.Iշ<?֌*`s -~YiJR e<0ba -Q}^C\"hw8=^% 17PvS ">Ls*$ -S2T|i4=qanUC+v6k4!@Hm/;x *NDZvu7G#œ&P(&e/f␱`*:gnq棣mڕx$bɲOpK*p02UOsm$'Gb%^-~]óYtF~:g+ڴ3V3u[ -S$"^%.H1> u+WtL3l~4;ߤeXM>>1=B/%g;i#)zɎhQFcʹp;¦XY^- pϰ"eϿ`XHwen -vx~ -C1 v!F@['2d`Xa[8A\ 6zwNg%xW( T %@b}P\*OhQpXSP nX -;@笒IrɆiv#¤upfƭ0*oerNTP(wD)`T"8 .u䈓^O2SSMApAtc.fKOfe'n -Q,r;Qhܤ@8)~܁%M 5,Ils3IHlˠ [$z~U==3AB6Y=}UU T R{`#,ވAl+Ջ?pO(gTx8(iB2G#C-X0y99uu@Bj+~,E͌KP%Cx>%r82Z,,A"</e邽SJ;B-BG#{D=[h>Mbن-hmlbCDOQVSat?AvXReeORNc]A9ࡷz%$ѽ3b%W!Z:V֧'ӼX9#me63 ::/D܋y>%uE)[_JAW6TFlsW6qsVy^l44jl/b┴@c{;o[ˢ.\o2|J#60jTŌL5K&9 9q% TAN]1y+Y<<ׄm3 -l7,|:R2AvY eӐT*s)Ir6V,Mj/I,[l0yl˩so]?{t2=ON{/~p{r6϶N9$zW`ɯW3F>^Uq [T }g?cNO GjB3*ƔeK?Og>y_yfE%8? ?V#er!8|ֱ]'2KRx JgLEBǜ٭*??) 7' hRUfhA lagC8.戜gM#C j?A~% 7g  :~9 -IyR -xǾgKpz@7%Q†Z54ǻjXՐᛓɏq~$hA唦N!Gg3EE r -#a;Xݑ~F 2c=A>N!t`T:1t %# 4c0<4r9A'+b+JU-mwx圪 }#͛, pKN:]Zqt/8NN#Q)NdxuJyE{5]$!'l]91ѳ)d6]BKQ>qM -"e*s8,5HX#鼴"O^:νƗP]hd|W)h!@6 lf qf;ȷra}*"dKV1mEb`KnՄű[E)ZvN#Re3z[jxV巀DY-ІvvW+zP8 WV;CH4 0K7`UƮGhY>RQR f !JM߾+͢ [ζU -";"k7z䅒5>{H_Olj5ra5s@0&ɪCܴԹ#H1$QaF)6vȷelH\ܤ6`0Hc] 5?yXDnHrq`YŻ 4"[n5;/7o IL8ib4@ɊI{:]1?]dH~3EUE&KJ1MrVk8-P&9L{JP1*?Z%HmK#UlN)2w@Vm1#tPqʠ6\*NV J -2O!q4C^[cPLˠyE'ʷcZ'S["߇dUU~ꢤD{HCWFlMq`de]CE1CA"D?\d=,^ .6r|%r"e jd07Z88 jegZDK_a<2N/c!ZWEa:l͠A$e +3EXD (PZNa؅y!G(SjAy"% xs1(0tf*KuTb35' -@Sp -[ &gjP@Tekxk }y -.P]xSP b_ Ie:n8ZzxAaL['/RLaS?L%W@9  )\)z`5|*=dP晥~ ]<^VoiY3, tq_O#TwV.nn4 Ο\Y"z~m}lt";`@;|-ȉAjpV\Ϝ+|d ռNںs&q9֭_ hq6/+(>r#IHii2Qq|qɮJ}s& Fˬ91eE{w\E#jNf7)(r>Rp -L9PQA9Vޒ$lWPxsRl%Y4KYx`Ԑ"(˩a@gM~H誼" (G3Z[m8"q^bgǼ;OJl@3]ySIe.'yr%%k&s@yHgN17e4Z丼8 ] PY7i[Лh&ׁۗ U Pi_<ɪFDjMI.!/+"(uY`)ھ\|)XTיZT J.]6hmjY'v܃@zܕV698L->+};2(zѱ&S^{jA''/AㄥeMD3`Ax!LG_4 ^`T֘'Dy1'j{8 -Ji(뵁ƕ^4lVy -maAp4aDRq@Ū#]eÇB15_K*AU)m^a%WRW۪~FESRx`!E:/a֟R7ǫS5BIA]٧kIT -d?l -sLcjUF#"! u-OWd28bC[|H -c"CUʵ6Ym0"%њh,z~DcQeDr b)F{v8 -U -og qRԅٰyhSerϜ]Hn} JC TDB -L HF HICE5YװzVȚ 6-$`$s<4~%"`\Fsk$$ "4#a1Kj !AN<đ c@dujD`^Dl[^/K65߸8 D 3ًU"IzdF - 00Ȯn0ȋG<]v^t>2o=P% ߕ_Fڕ믉G5mCޤ!kNXkK+x9'9G |k"5Ğ(F5e 1;e(G k\ Ѫu`qUQ\ߖ8D%) N@*G5PsL(̓ BF*بgXz:/9 }qUa\S,nUJ6<%nzxRPdP)32 vT*pp'j|UdEkpx{RKFg$B]DT%Brl5n)ܟcS:9ԽԬIE}@v!5'D -d#ZxjHbI>?ɠ4ar<K4*K_T ]T52\"^t*>I=e%FXr:;04 -\^%gQ5NJny4t cUw=*yZ@ )CVDۀ+QƪAVe8KCCm%*ɄJxl[׼ޔTK͑dGQA5;Wx>ݸF2Wxϋ A(5(nJ -%4-oGa59`jJjAvȌ %kY {,Ab@ FMNj1Š ,lY X ͬa1e1jY ,׶زlZ X XkZ j5-ܔŠ :i1-ŀ۴46%,A( 9`1H6X (4p[ @:VC*Z{u,eŠZ4u,MDbTŠqq mA b@3ydؠZjK@O)c1HXb8dnmAr]A %86c1h1( 8 - \Ƒ-#ɌR$&%Đ)[1glrVhBPuUIrԤ*3 4?jC| -ncQ{F4Z`>@j<8=( F;~yHaAtΛQ -^ кSjAJG픀jgn -|g\B$-S&vf]h>p>gD'E·smp.U&ZTze"Î@z=Ei;ICʅbxm7o< `01h(٣ !Xh}H 7vU'FJnkb^P4+)Z1(18qp'h=pu>@z 7 BY]5("$ i|9h=p@փ]o<~^BkhWQ'Q'D -&&S6\ 50HcȡLH&q%J04!dg%Vq`)%KRymۙİU~Ad~m $h8-5(l2PDM w;~]al?jĥtvSL8bdШBPqpIb6eRz:*1Ia'-kT,R2!89-j5Kb7}٦N#"A}UjHV8\J(Ie-Ӄq~גBP嵩|"PMLKIȄ"!~{?@}/b!3P6I[r!ffi<)9#H -$}1QC#M|[6[Z󶐮)eƿ%hPUfFB0iycUHNXG/JPյ'ʎL&+y]wވ%YyF -6fkt\.E+.1@ L BM®- TGe\̺&q%vGhdbg{Ά߾2(qoR8.)QDBK:JK#p#$sHИAsC-#Lɞ) |t"qPCh5m( -47_^JDJld7ML^gjAZ zr bEo8-R,@Ҙ!ķ:qu{OTW?OMٍǯEZT+6Ի%DT%Om/YrzY}gp5ޙ&3G9Lr-e+^r4H7 43Ѡq@ƈXH^@ DLyP -W/K÷JkbW<4OOzNg=A9ãAvB]^?%;~(9,KydʽVT -Dz h`-`$ʵSs]?f&t3ߥFW ;Д)1o;"ϞQ# (|aB!9*tQ2q?ZДAN(Xq! -Pt04eعc٣#x~7{dO/ҿ*G"P{[ڒ猔^Ծ/vGvܻ$]u?ܾG\B:[¹{7d%?sCG7#8D;7c-D=YT>w>f3o߯}EM8 -Hf͙󯮬Mf7?w@Yx<-U`;؞m5oo,.Sk׻rwƍl6짋z@CV.6Z!h -Dz]y2gԳjs4lnG׷'Ý{a&*wh-}8Lc|o~0^zK˽Ϝ٫;zݾZ%{3ڛG,# 7:lE^ϋ?藯臟 Ğ?d~/@o$>44g"5ϪTbgpq?(!Xe!OHh{34y)EyY'X܄yxRR{*C"ڙĭ e -֒c7t#?ͨ׊[ y94 pʫUG 'gr_e51gYp!$ 54p+OE=ι6Wx\YJ.q&G%6p1PHTĞ=E%*q&rB{,jK\80S&TsʿԦMҥ'NS)*l"/.rPbw%g\axH.UPEA*9jWEֲc_RY!V룭@ -o,M;G?2x"*-L!d(їZ+y6g.%V%5oS)i[>D bp~_6͆2ej0gex -PիX|ȭ՝:m^P?.PpΚ8תBoOn/ڧ#čJ2JxMsN@{b\.e[Mt>?5Ѯ@6RF3#<l 0/P.ϭ<N۞sJ<g p3.$/$+֜?\xKBv$5hy5.c':(+gL,CDA#\\1|D(%)6x B` є a;"- Tx(w3x1J/pJ9q^x" -iu]#$Ħ\3ž`r\ⓉЊk(䢲F+q5D}M<.BB pT 5૖RX'ѥ%0&h62\O`C$.?\)q ˙< -2X.cTP ݔ,yFd@]1aW%Q'Qx&!kI#fI(K$oI)=!%& -mWU*9fY43V(xc_Õ>]PTn/)ap-[wiZ UK 2;HIKNbCVj]H3H_1 S*ִu)Zl؍pN4b>Pɶh2D弼 FS䚵 hT»i8_-_+=O #h\.U\-sVzO8I)v'~$ofQ >n+tDjĤg0 -%+}>U\.8 b%P;U$uxB̗P8LJ`$ D$Yβ]o`,{H9F΅A* l%5 -}hx @UbE|K+q8I%fQ$!~\\l$=ڰ)%IY܆1N )2`5i)ʸ Hs -jI*U7pE+mnuy_O -Y%oZwt$a<H5( .$6]{,X;XTE#4(%^ -Sb)*P,Iޖ @ &^Ȏ2U3+WI*R:"\)R*_!)Te/a%(:|% oAřS*ތ<.A -fV\Chs6>9]pa*_*6GH6vCPC`1rs@HWr}k&JΨLZIQ8*L`e1BWV o'ܢ<+%Z%Ń' Ԅ1IBb^bBOHJQSRqY$ρ*R}/H@̭'2'8sL|9jS~ee@Vk_<#-ݡ-ͥWZ$NOɒH ZLEc% >=!)8 +BAưvkx!EE3pcR/HHFiZUqLئÜM JnZ H6A -!TƜv"(ۚWAPW;cM `s1:.̌ -50ѯ܆)6p6J4$.ٖ"W*Ư4ȭŠ]_Ċ+\0½n -Q`pʂN?uEr$8#8sH i7;"eI e rAjP4wڤG;'۴K\ÜMz%([# \ so/v:,}h0T:^%R,[ޞ24 -lH'ⲗU̩Jm:Vw61drŖ4B1%~Ex52C 6N3hXԦ8";P39'E4cĉF7 @dakDPx -Wf<.nX ,w(hR0y@64AɦYs\t>o?Ѽ 3qrFŠ6X+GÄRkX1pؓq~L1,I]F=Nnz $FvQyRD Дr`b*(6낫NS,+I0K,A5WSNdH(8q#P cPb&*v -VlW # j}(WO&M,ʳmyF5`u'DVpfwLBAƂ0Pxa3" o?:.؅Ǿ+Qdj vQIo!%+ 3Q||J@ɡ޳aMA,Y-%x+΋řs*J|vFC QE^6hCH9<}*KQ UY" -fE V1XD g{fcS29ZG~%uK;Nq L`l4\U̇AnT_&D@ey#pgڟgU)ٶ;}A -A^ -)@"p8t̓LNԥDž0h]>y=&J4kPKx)> x3P2̔23V@@f@LQI#+WWVcPp^"ss0VL'ΉyK8B @ʼC=І9*;Dgp7}?;iX3xa3 :Qto0ѲRގ+_q__=? g4sLy3RxtH~3ꙥ֠>9=_&Gdhz?x3-\`{m[9젎llz vS1o>͟B?n&&DO1ƛd{̟z+[j1WBhO4=&}k?m{W{#T yϘ#';xfJz\V9s/c'Yzyo ]р{nxI-+ oΫ[k%Gaę+pEJLl(qsKC<0I~z0L>l}_xXR ykŠ\ɡb?OWC("ÓzxB$&^9$@d55jH%7xt\,+WiUd(J{Iw{LCUa&\^E2> ^rk3dxt3{hMvw2~r?$\j?ȼ^>!v.'jt8+tw:[#Z9=_8䚫#G~яx2=LCh^Q)s!a,&˪Ȕ+r- -RJۼB+щ9tOtN'O9bsgȀZ6ϋtv9wR).>QOo4_tr'Zo%߫81Ɔb2]宬.=+}buor;1i u(EGڇǰ&x35b'ivGnB[兟g؄"vgo4O+xj?~!$!V!3Y%1Jg!M WQ Yw"4r":A^)yO`9A |pwڸ)CHmhՁNgZֆӕt:Id<' ͝ρ 91x=t4^X/wā/0ypoc|0߯A_`wD<żwZ=3M;g oY8 0(B|BDJ>*y>آZFBfqH1~'a||C'B**gK3(E"w -)ZǪPO$IഅߴO/̍YUUi>O_MP>6$Sh NP'~c>t]׃W7?90̏I*-ǫg[5,X݊j_HBC|[,JJW=ttQ8*۲RO!h{ȋ':/ iiꝵUI[gD:;'Q_NuZa7\q74T[L3.Ũ\9I܊C6E|B+ެRYeD#6-b3v>>yWm'ɴ{\1E0nz;'Ǻ}qTb9H 'st8(#tsU%;FnԥFNWt3Ҝx?ocL(K.ȴVͻ̭tm+WWeKߧ~X~6,=3 oY&?,ֹB`9 j -U$~2r)k/B,jy<57G?|d(:q:+ hf|\Ki[,^Kʬ*=,U5ccC=WOEۙ(SJ$jGk4r Q:8ރT!+aHYBCƢ &qBcځqz;IhU+OԄazяƣ!Q<(maX]>VdMWʐlV_'‰1^:n.CC8xxYf9r%w6c*B-Hs:I,TO'D(1[%/!B -EdXZiK"yf l.H}ę)8<H'cpa &St3|0K_Ky (̌]'Jez:Z~V3ժK,nAj,*#gsѿmnqK!Dq@H| 'ґTr),68aV E najz&+IGAfH2LyJ,W$SP4pSϽq.+C^:+be%aI{D% 3ӞIsr,\2 aɴ"o&`Bl`{PfIP> f%;&% AG tPsX1Ģ v4q^\*7"HB,I]jy&NNLUAbD1Ȝ+1BtkP ^mo5I%N-CV\?Ns`1v oI5ZVG#46B|1˂R:hW_sD.ةZ\q4_ˈQНdOtvSRJ90ڤ*9$iv# C`7esEoArdX'eEt\50Όh|!:HEL/ǂ7*_b$%˅4/"g91bpg,"D8>M Lrywqj|LerÔ2zf&j^V6q70ÃSl{φa>G@džb[N!Ik`nOnC!qI!2t"@(o!@DEtBȩUJZ:L(WErkyX%C^ j ɻTdr -7}BlŴ9=e[o*&Mi8Hivfp{0L~|q:ѫc}7؟gο~]ߒ ?^-7ڧ?gpp&/ ڄI7d/mBWk@tadz-) 6i vx-L?bcFLhykk[bmC^K[/wBZ5O<Տ|ѷއ&*vS/MONϣ+vZtb51S_#_))A]Q mUN<^Rf;iVZ~%Ou?Rr{"qWD٣ɐTӬm=Xм6mmo'{H H[\5]׬?y=Ӭ_H 8A>}*lq gɨ}:C#kjgoNqAcc´ýW%qGzd5<Nz'~4}ڟnƭV({<L_g;Yk8)Jh0؁ƌ GnLkA_jtŻ;]ڪϚqsF0 ғ`*Qa7ӃQ:%mxNoۄ둢x,뭸͋~2=?ay!a& -_ؠ w [UCΡH߶GU4wܣ.{=R{כWg=<{E;OVy{أ\ڿrV;lnc3%`gx{2G>E{9XbIt[#hČzɚp7') ^&LF&kxt8;8';ׇ׃AGAoh'дRLǵpŚc/@r;;Gvv8mhSu iwIv{ '4DxzSHt|-9ną }L3=hx@ܔ<6 ÷x `2=\r$Wth<<oh1h&XQفXDDRRO!brwhqx4xQ9މNyG{41_$ȓF7 NܿR9{|^_p2= '}T#~E;؁ SaH]Hܾ]?! -NfyE֘.{-Zi\ S_%ڏL{(z(= -DbΣ9">foBKZN ճ`d ~\גVݲcnX6; s-+m蠿˺co8ָx6FHS_Ќ ;M$﹣ےcbSҦxe# VAܶƌ3]34^\Cȓ*1MH|LSLzw$^$A? 3φ=dni=zbr5gmbChׇ}}ƷJ$A"H yyoq/hKGP֙EU ;OBxhԬwX}8u{M&]f:]&}cާkiaiRc|U%bw<ڡ##w/s>wyi<VLowǟm"nɼcqx0nCC`MatvOEҙSC]=2w E;Smc)y.^Mbc9rЫK:g|BQɣީwIOy);ǧZr߼I籄icssN61z?2wtiΑxT9$[v0iz{wtΏ 5ɧ>{;/N]ٓWᥰYt.͈Aǿң bPDkc k>K]+: i7e#B4 -]ZGn>!p2`6qiBwOF7FQ4BqVO"^]݂Mf*|:m^!(-SՆZM dļ-Oi}X>޻{s:iv#bKqIa*oĺ57;a&4ok:F[C`bD -?-IM6Z ky>OWoDj6;bͳߤC] -v}vk4aV0):r餧"e-nǧ|o'|ZnIBcXs0iP̔eUzՠv#:UJGbOJOh)-RR#g)mSQcpmO2b^_Ov.knэ4՗>5N̽|լЊc1*wDm&,_En,ǶOE<՝@qtW= E`;Zƀ-I綞쬒b]phOG:a;zXms5_A+.hub__t`TIl6(+ޥ1sg!Jj:\t}1NӇP~*p~&)hCIѬNh=9N0&ЂwlD:iP,1 krƩ}Rۄ4#QSw)FAhlY%gt9bkw{Q_JQŝ8ݩ9|CIz׈4DƐP+>mz+1fn~n3vm'iZҶ렶p@?;q fG}3dnr=]k()GMzLɟLIٝAed];Lb> ͍wKwcb?.,,<j?77.?D+'n>Y+zkc0~_Wn/KOܺ~5_y-,w{ompͭ8\[5̬_Yy[7?ӴK?:wq[ƛiΜͿvv፾q<7}5zM󯆯+~o._ypg|8ov};&=79}ԛ_2/oUΣWO-_o~QWo{d 7_~to^Ww.˷>"{l5N<]>\]:ɟ/T_݋gί;UWfm}W]z[W4›K755YŭreuKscG*g' g+{ ;w~^XN6jy.ZŅ/~Yj8+7vvҸ̟.}9]~]O+ ~p ] 9W K__X9^޵ՅK_//\~㳅7^XZY^zx}!{svvn~/ j!|DžB,_>0 -{g7 ?.\ަZ~y_=Z _K W?W 7/L-z˗ w\½õ~qiy[kÅͻ7ًob|wQ^X˅ [Ϟl.887loY?Z_fŅų/76WZ-`Eկˇ]|ƛ'~gpwxGv'={mFy6Z\|jqkF޽vW/=aqyF]&?99w+|[u̥^z??]=哟;{Wn_~m>o._oNo /?ڞ{[o,?}rK+Օ<_7ύR' U;=LE a`7OVU>:HL.iqV,vsXMt[1(GffXmRQb&T9iS-@QvekSe\t&Ѡ\DWIb. 2&宙RsɴW+fؾZ2Kjݫ ] =ܻ}9N'Qd@?9a5~eXw -rkƩ17XrtS(Z,CL =#wQ9O U>}ݜ(1~Ea/ p{=걬*Of&SGY2RϾU"#OQi FQݿvCG̗hgbq~cͫrl^ -qoDz]}ُGϗ'wRMtlb1}!Lq#Ysڭxv)2JgN;4M"Il3;7IQxZ2B3{Z2[oOߩ㶖 \Gt5^;~H Ǎ|~,XîX! u -7;Rxo עHL1[]\|xMi37?|aQrR|hjws/;_sYߗy9ZUE{{H+͗[imGm1n띇K7#Aݿ\J}wm՛oP~vp;çu=:U1ApP {(Fx:yzꩇhv׿Vߴ5/p㹖|h,q3؉m:J)xz/\-=Hk|o{>vkPgkw$7窼KK :+ַfjd0nfSx3NФ&o2ZPӜ|DlYH?;{"mjc>XK_#{^.Hߚw7WX71* 5ϖtj0 /ټ":c6]Ҭwq/<9+L}9"ݖD_E;5Vӑu+Q̱pQ2pq\\>G݆b~ydw'2,S=XKUPIFa x?;v@Ume0\Xe̳ nOe=qֶgdg?RO+/z*/oz뼳01ܝV3|sϤ>YKF"ځ./3 dMB?W6;s3ͼG);}Iy?|7Koct5>+dt#<=-Sx_P﷜oR ˽A>3mc1=mfWxź-g c@=Dq@ ?v{~WUa~yOSa$r}fFJl7"/p ׭'Vz.I@^A^qVT bμȦ귳d~B-=!rtsf-5%A&]A0_8* cd-s0۟*kS_"\zs_T u3(tc>~a̝=SqBȾv-rz?X|xn]y1OŠafEԳrї.=^&Iz'JL9$A93HerJcيýnR~+YfWHo%9{G -rw$oCͪu~Ei<Ȋ:`(+xE,hVH.JA-:_K(H˝ >wR+f,2&B5 x, YQ':?z +DzKXL p%J|* PcY<[+QmIef]d Ƙ!3zY6dc%Joӄ7op_ -=erVܡ>&XE; 1H@9z(o1%o6F`ïQdis b+< 4 a-=>5M=~~,U -#Uo$I-fIl=_QnuJ&}&]myկSOOU푹pd}z2" -U\bJ̎@W6c -(-t8 9lP="ɤb^RzrҸH^E+\j2׌LCwQOCjy"ggYi~Om6#Ba8Wf]e8Kf3Fo;3:9m{" ~ R4+r>X_jOάr'g֏7ok,x*fia'Df_1I+[4L=:\ -Qa zN⤹]M2/pۏfWռ:g/|D#ȯo x९ħk{URAp(]Gz2mfO>su<]L34AzK o~N}bp\=i32oq5?xJCrۺ0 -ܧjlXyѨ*s!8vןƒrqs1![Z b–HMC; .ysm!_)Ipۿwb$]I?^(_xNZ@T=h_O*J*<>fyg0B_"J ΢\\IPl:c5-}Ϥ2#o$Z2hȿ0/[Z?s#{3+H8MW޿kV_/[F%T5+^#Ƨ2 %9ܪ(=I6V+b_6~W@uIP(^&Cֻ]]5 IJz{^s|~M [_61υ\wozrW EM/LБu6ғ%7"Mֳb|{_SqLAQgr`lL+\pkt>FIZye 'xubOƼaK~}U˿ۮ;0.:VzCs^1+iEr@hlhof*VYu}ez)zeAMx1&G/  I@G 2.L0'VRZGi^yA`LF=[M݇sd$=Y~!3^W2֨BcNj'e/Bo`qCt7)sn V"+&PpyK/lm2w&EZ,KLkg??( |ɨ:Gz~DWYx=q|E ZIT"Ȥ]~i&h|AEB~Y[] ܊x*o5~|%ieryPɏSz@~R  }5{eL+IDX/Jf+3P (+0,-m(襩O/p*"gH$COfD:wH|hJ4E:iO4xXkA/{sӺB$;v.S@D Idp dCg6_vwiL*RN2j"`4Eo-R!PXJvo_([{lx5Xy3!6CFfCu{cSТH*[e{7LɌPVa2ˬ-"Ս }#E - -zTnhd_.zO\WBǺ#dvUA.qS -sҬ _lxմ`E ZGv˼`,ǟaCT=Խ-cHz.0bTjLJ%m.rHGWl>u]JFë r:bϗELޝ<8 \^Yfʖ<^=s/i}Kɱt> -Squf7Vrj]~@r&F%TzU,d/눍sj\%iiQN-E7b%,Q]yp,Z_u|`x0T]MO|dznM6<)roogB0Ʋ$_k'UWܘ=Դ5P-v|3A]Pl;k,v[Op?0˂pӎh${胅PN#nC-^R{}0/Mhv$MSb>m -w WS~{>~ rw_[1q#z%j{2`̵r}Lߺ\#nzٍ_ C_if~\ٿr74tlq"8U۪v,K*i~|'',T -w&fQ‘/G[hV])('VcGY}D|!s^}aۛFAݓu/P,\?wq=+i=+2gwp=wG4'˕=U?/*9OG ƪl:/f쟩P\yA'}k}M!BAx<݊hau6%KjL&k^<[FW;I쭋O(tgܥzbrZK0AFϕ3|Ii3A/N nЇha@qTSfU1S4Q}C8, /Fh0OIz78+_Qa{ۛvGc"7hjp6mas#*h_H&/KM]vI:?:O>1`!Q #敍}NwUm9>?Gx 7'I g?bsZɥYtJc.}qg[p؇͹iEF\F[Q[=z^^9VMW+Uu CD)eA"N(e OZcx - i2AUY]J*ׄ*ԫ@_ -dgDe{m( a[ٯbjt)`&%rֿA^v^],N/ܗ9V%M+ܸg9ICk澺):MF{6N}j?gf @,\QnТkmF6ZCf[z:M*helpXᾠ!37J} >hޝg%oNgx 1R9gTδ.H}T--.% mɎ@ $4-St̂)[~G3Q~pD ['D -?Љ* ce$S{d.GꉏV3o~ǧYkVm+k|Кq=0Kjy ˎGN>>%ÌžXcw~WJeg[>|b}ҝD~oQ>fG0@}Xݔw>4|ˎ|GՁ͑ˬ`*P [? bpJ,ȲxD ( RE'Nox˸~Z{m(3{Mvcoߵ-XG='4vТm z.:ѨT@JeV}i~Z٨j/9UVJo|ۧ;Z&_^>%rсWzZJJ"=oc࣯:̾sʯ~=Zkƈw.uqvtRR+5drI_ՌF42kOW+s1Gy}i urǵ#uF]` GtwݧkO&(=}_`zuK{jg\!1qBE/)>wE n>ūRbc̤mXeZ=^PMVLl7hj1l b=Le$zQ!#V sd#h]Ţ9m= MH j&ub?G(kؑ~ -%+"OKZȁF.9Pv%Go5Hɀm[Y V ~# qw -{L [:@Ch](p[:@4q T+7"BIJWws%w,}7 aEN'JKllm -"17+6, H7-:p| #ܙ{@H 1XӾL̽- Zx.ØpK|T'w+EOn+z$ߌh{ -n:@ Z0vqCkuo 40Wvr:]ܚ\)4WZ"pk04\טQJ˶w1Qk{5S H.Msr:߰ίџGQy'G|BVK N;E A|IGMY{Y(.Vz\g٫2zژ#[؋2(Bd *~F~Gn?OU#ӳ$-;`[L`)* -SN>@?ym`c,Z --6/C;k-P4'C멠ӻrծ.٩ᥞLnzcKȠՕGy36ǼSX jF Me91#χ1OØEB:_Eb挽JCˠՓcմ͕_E'~ -WW:x=Vҭ\zmcv&]GݱdSQ8xȺa\UGlKʶ<#2NUACEq Rt6#ń3zZE kv~ntkmZba,o?]wIWl}l=jYK0o+yG'[a^NB:{FVS-|7!kɁW۰Y,1XL"k0b],A*z'#$%%K+X8%uHV;Ւ%vh - phuD ȝ,.Qh3⮉ž1a糉q0(PDt`ה^:4hxl{e?QkR{ՠ"?8Lm,ݡOy@t+v̨輼{5 ~ɪ\F;FZXb۲EG63,ZRxr4!!9"dqK>5^VXluLnՎ\PZ9@鶣^)Tbn$j"9y69#h>Ŭz ,y*{s*PƢBQ7~}PƧT "7@ %Zs+D *D\l8^ASž_ hj=Rj5Nh[އy;DCJ4-mc)9]V$[ʗ^8ڶrŒʈi\!Iszf&춅oI2F:9hȮ5)] &R b?h3^۞d}c^vr`hQrVÍ F-Z -#瓛yӫ!1.M1M2QFFֺdl 08S.1F&C0Zb˳0tgwo#E+ uHMStT? uɦۥԩO7O4:aaλisbƌOAiJk2jCt0f1s( BǘJ6HUw{z3V0QVqYJvЖuؗ-j@c]l-%I?ړ:;9gN_fjcq Wiqm~Xx8NtI;uPDƠK3UNW8ȔlN<5l[yG,_]HϹ -#+K'GdPfJGFdT( Ԉ SFdθۇA9fqzA9h,Jh1c,-g;='lv'lϕ2/|nF#mE~ںKhMo6ʫ4i]ͫ;tc*d^ %ܶXG?Z|=)NXKRgĝ;p;&Nk*d;o>);Te/y|7·SJKN͇ۜa2U|8=g·n;"nfey拝'Re[sllSx93k19ҜP*xn8br%cr)oY8NӴܞ!S2.slxȞQ9&saSkk8n"t6DUhDHL.ΩG]Va̙Bczˮz'QĥGSZunFY2R=H%/~ %c 5H^M$ OgH}:SFә2RΒu 301Њ v9Tlq 4j+0mϛ -'Ε -wYGmWj6vT8⦅ -W=N+pT8AW*Mp !šՇl='kl%vjZ^Cņ9SkI&$1Zs&1l;L9.(B#=[E54Y/VoRt+9TfTRL絪[}Rrϒ/\Pb.0w6*dy׃Pfk'/znvQ]M5Yz(3X *= -EuXw3Ruj3ЊC(˲՚|:%JWy}wEɵnsN/J:zMLQi ǹ{a~_%IkYjJ Vc%]}WǪx|/lJ?GisuJrZ֯l-Lu䎍eo4ꢹu].}}uVDNw72[Qew|ZQ6ZP#t[)Kdo͛4;c6(|rf'Ndh. -$)-ZÜ=_+Nwd:3{ʺDm~fx@}DwQjGmNѡ@;hwzs톪 e}7SD pOnuHKx썪NLu2;PS~SdbkWg<3ob1qR7)KJż )Surda"(f96^3+4UmϘQ6f -˱6VUx9q]N Ƞ]\Dw*/a@x$pg. -w7Sspc*f>φVPn9ٗOdRiDJylxz;M c -wGjMO=/ 9 -~9>ث6[d3$B+ZѬ\ ܉ 휞X  wX~;*-nvLcz_!ײM!Eк$& ;Mn"}Íw-&0nR1<~%dw_#Z%1P ;uA2/A[m:U}QX)|9m ׭gqhk564+[E?Uk㨣s ̄ p=Rr7tg)(e#ukюDJVw9B$=WzubUU+@k̉'6;'ES([0ju U2w\u؜DZWUt4{b -MȻ^^hZ(,ڲȕ: Ǯ_R BGMj` g9F& 4;%gzSY}hvz`"5V1dj} =z1PYr7תYE񕔂xb_mC3-^Ǭ&[vYDSb]TN#QC۩*j=h'vzB[GiV13[koiKXOm:hk޳l$ T܀OLg ̳/+zxgvoJqٲib|+pkwICubaH'/Z67V%Ne>CU2ɝgZȮ4Y6&cmT#55vdY&-euRWbud#jjKK#c$YqyՖijS{ZGΟEG)w 䵎—W3S.yv7 -Z.fBUzM!|VH{ Gƛm ;q()5ָS -y'0jT*16n*S'Q13 eeR7Tb46}=+ RhPWF$/BcNYgYfsMׄzGeO>6 poOYfs-SZN4O440uWߌDQ>uNQ>%%:(³ӌ(߾:)ʇOhϮًFZO3gERroQ>yF2=~Uΐu36)uC;PuBj;غ~U:JqL/к~UP-U4Oi>ߩ\ح(fr)Ia+6GKU罚gJiu7\[vܔvuU?]~~iYFIq@=3ԱXoۊֲK:qU?Og+SO؅~C3^o֔cG;du;w_FN`CY+ Obzcb^,mbf׬gFNqήcX5";G->O=_uCֳIkU`Jn#D |K$D' -Yu = p&&#q=Wrsb:{6.pɖ}ⱹ]Yūb+-LkT%>N_ؖП*Y8 -is[i-N!<[Ye*?=uGݢ]n"_uuyd#V<AnlὁJI-ZdB̽K3dD|t21%Gw,HП54&$CbB> x>}𳁛uW -~ЁژoO<K>n:5u4 .#)zYM>N3iG9Y=Wb=B>ֳ71F"%bSۉ\w[?.xxqz> / F@\yA*7.z!u8C\t5`pԎq>lV@vBHWR6=0*q?-{бW~űYitEgߧ'![H&F;Yi€( /ʪC2鄫.)] { (a|F y+ᚾǭǪ~_rD \"/pPZ -jf*ajI{vt\!Eוk+|-Mabm'4)'f9I+? SAr"QHIK|3`\t iΟ?8S?Ix$2m+;zV~!1=X˕cJ RʪGi\ }Y u/o@%3D'Vⱔ85B؅hM",=|{'( ūd [hK. -OL2q'fNmDu}\mB-}2;*M|Ϻr.7 TU]3/1O`=r[Qc˓rmzk]WYn5j"5A[rE:ށQ&0"8s^O^ ~ꡯL䶘G-P6;HV%S'M" 1\)ZqD[.ge.ah~,@ɭU-^ -V_[y:ku %,!#*LA!t0 -S5P Hȑ0ͅY]$i -Q뇄&E>"= )nLݔƼo uKVfrm%yӮ 7OCBߧK.uIX Zį nchhٰvzM4 zMdӆ$bG AHj[]9nn2!C&bo䨴ս]ݐelq,?{K|/Cn߳3wA'Ҙ40輓$N1ǷT#Eǻm@FcJLțF; 4N PT1& h8=AB=i6i)4Qc [ړQ ]]wFMEfoDe}u{tF}y.PIr=?&礓N NlJQmdVv-T2o%&=I, -`),)S)^xNSVuQNLkދ/QԷO^ǖN4./_{Z_0.&,9a m9qBB -b߄90'1p:R3ēۀ<eP$! av+H1(xD?m@&փF v&L'pb bGTM^桁qTB9#ΩD2DD}ܩj-Xkۀ?Mv3D6jTE1Ull:^ oϡTm}5=hNnz[w" ;&XH&MɇQIe2HZ>E'h'R=7W@.b[|cxެ;<+QTg$晖?ȎOP3+U&5{˻:ѼȃC_a0qA[@k=BϹzBQ7rsE߼b=F7f;\|Ab X`) p3"h,R _`Zd1^%W;L}4o yד~1M/%!t0/VY;.T-ss -f`xSn,#0"邐~qf?v\gw(3 -/V/Yťl 5O24nEg.X;bwEc("Q}HQjg^ܮ [b!3s~\b2d`-%A$SD+xalARq1s`ƎDx:VcM0'y%9KIl)2mH'_c6@P['``/}lx:7?a1˰{ 9ܔ0kH@80kH`cJlV& !l+:[: ppb?܀8|?؀,bn{r$2iVԔM2QInYyql}8u4)2 +0v&J!Kڴg"Z - bs1mn'/|7m>^=kCL;%\3l'6~<8bx (@E @5DMͫ/5Hmj6b3UR-}NkoMMiy<@hw*b-zЕs/⭡NNZZ"LX|S.bWr+[O>Zj"l59~KRF,aO$tOBZ!^/֗fۯ ]7Eo{-#)4xyMoS3C?5kFt[[?KkJ)atR\?'6EG&חJkPt3YΘbf1E'y,#PvNΓDz=`m'y,n&Xd9c E/y,h,:, 7zJbPGTVg"[cqY -jtYXR.~jfAF(ktm7ū$miPrg&ѱ~|fR+tN.(ⱇ]ң ɏ[ Of%mvU!*(C3WB{rL',t!#!ZIXKڮmr97nXh=7ȗX-v;ܩ W9z!~ÅG_   [Y?Qo5[,1z2Mf_3Ee -ߧr{ XeGh6.[J&{ȆXc"hյ"Fؿ?p xy#.# A^Xtd(eOt; \tkhua՝~MpfpM #.D`^äjf/Of?Pxtg="{B^/77jԝbw: wߡv]|u;-WH7NAC@2!2` -kd)3$`O`Cfŗ,$%Lv?DreC'&m6_]qwkO`2 φ5+g,LC,j>a I^PɱM ^a2Dd^ -+$4B3$<!ha,ދ S$ApUĜBnO3t4+6H$ _,0$b"^2AI##'C,zA $( -zB&`N9 YhI4d( 8IBY&I35, J!"?KDNH -14I]D",\hffK@]@"< 0ũ#6M?TJ>''x>H! Dd<DFj2 s 4+hqxF0 ,, q@4O -Bg@cv_$ } 0/EaPZBMrks_%hlM-JrKRn|Cv8?Xw4&D-E#d8 A-d!* gMa5UIP0`pvsXK`ca%P,Hyhy4I l81 DAd8aYVһ0`2)]hq +'JpBH4(!n<x I -YE0< E7Qȵ@| f)WY_h =)H69L<,r@WssH<`@a2!N " @ n' 0ӄWBH̓Gj-"(rN B(ƠP - -?-$p -A7ИXBi%$$IpX$]+Yp*\O DR.E@IȡѨy5+Xt@Ԑ8ʄcFyɢ@ K!ɡ}BAf V<} Q0FnAA_D 8(za - ^Q<"iE tRk -@Ss% ŋSu0?4X -!DH)".`)QLůDK -XȁEw`t099|eP -ap%H |^ |iB -)Jj%P- {`4X /Hd}I~BzW60^/֓Ħh3x_HBl}\E{A=##N0]` @'z -%@@O0+5.,!!QHQ482܅IE1 JZ" +zK0& d>a\tå5Cp5)&BH!TvMx"\^$^p)ZzK!G^9f&}=hA:$/Z/@(R -^}=wAv̑B 8F`_ohUr{38n,3ZBLL *(EpXkDJ!n_ģKqY "@ 'DH`OIQd 61z9䨃ւ78<3ט=lQ}kI](ђ[Ib5n$Kۖg}?6,!"2@T&*@"DF Eo!{Nfd<:uv?[.Fݭ|~ ^~R g_ρѰg>ǟz^=u^=;vwC*7"כg9!ŭ҇!"\K@um8Q"Njau7] -xAK37bmhƫψ2\ݍFjV.v޿<8GM+WQn/$o w Ě%o~xկ=m+%a|>s^X(~M6\ahE-صa"&DЛw9yyp}OTzq~YB4>,FNH$ʫyB -0uu.RN I}ǃ1i`W8{ 'k$|9}/cA'?0IgkH(tTͦA|y红;~ݼG㳉!C4w:iBWthE4Z4l1Ew1MZ4bb(A4Jl1=67| [LZ3bwq1͝74 i4inug{g.h)u[E0\"RBLS\LU^HժP4\^[LŦol1z|w1 &f4u{Vw3jSRi{b1MUYL5FVpͪl1M4uXL44ibY3'FjV4\/4Kt5YY5q]Ԭ{tjw5+\_L5]FjV|1 ׬l ,,׬bZ{'4b8m6n6X7o_lrMg6#M 6r}?. {[,bza=}͇|1Mݻ4iSl1Ms?n6w͛_fVw1M4i"|1.ai4i޼-. 4wb1ܺnމkȚYf+n68?Į7 nqpzOKg -} [L[_Ltg1M蘊4wb_Ls&bbY-F)s&^Jw1ͽbIA|b47iob;4 b|1M]/]LSivEb|1M藉4wi"f`,Q.ղ{YL{/ib?&\~4|= = bYR3r~_r/ʑBG(&B[~կ>'b ݸ,nÝOUu=icTuᶒީ?h~hM6-x˯gwŃg^/] 7nnS_l{N$vKL;&~ΤSةo۱mr~&mv|BH7f{°*CIҁ<7 NmnLZ^&tmMH>2m*AP&s4r6w֋1ٻF3.>峗IP {[4r|4rZ ObO8dN{Nb#0a9%ϒä -dr'bC F}^| -eAj%|ei AW,iM+ B@4 2 - GxjG GC.N"7RX̧Ѹ-vjm*1!L(ưL)Cv -H6CB)nE0^n=Jai9!,Ôs%[- $L]m8C#{Wme/RU]iSq(#2i` -?u~0d/Lƙzc԰0'T!|1_,>:SLTQ84Lڍ8v#V X7[S?%,<4};3l#2PfBH'~k|갱1)T1FvOԻwj.Նrvݞ %oɘ2mfō~cF Gz!Drd@хvU14 mp'C$c*6g;cs(r A$+L‰:ɀ}M;&yD(˩=ۓʡC aM ~1u?ŐLd)ѦqOagg8;lpRC6<1 DSx3nbd@ Cy`-iN-kGap}pL~`I%p=Q HH#FiPOy*ۮ+9ˑCB@/|,lb [q&3ctG!Dޢ#a!$Gl\"بd0z0BETylLb(!D $b_F(GDfD.r@FR4Nc0zgpiUe琍Pa@8b/TD HIcgxF96qP>5'ASph!z?fiLd"I?U O16078&䰂^:CH#_8!HȤhh,i4´*MDC6u9a2bIHWD {,FpPPd@cf8t0zη^wy*c ʑAHQB[2 X,*Qi&юbaQ92R0졉> !!p&D&!@0#1Z:\T2̌mH=O0JHP%H"H!$'0ôF68"F8ġbhC䐂rd#Rz-’c9^ѱr4%ch40#8xوnp+1pH6q9a8i,!$H0.=TiN#iUmL8WC9Sv=6{lp -DWR1IJ4df@"$'=~cM0 -#1mWw{wQ^彚C!#ie -A!HjfVct(rjLnrXCU;Xa܎$BHp?Ka TBbt&iLMR Fce.*WyU3Cê0.CU Xݩ\8 BJi,ic1z\w԰Fpզn8Ur9` u!IJ4RLHRߒ& ӡ9Qyd1zPw@q40sFʦu_l0!uIž(> -#^04z0$樨RN䏣Uϰ[m&He(9DTp BȄv"팄`hFr KCc *=#2Uq2G{19qe!%;3 6R?q'i v%'Fg\N ˡ nTE3QcsHRvH x*'&dthe#FJGꫯRVG.8hsX%̒8_ˡd`LNbQFX€=I7Ta4b.n3b 鹞`2!$BY#!cٿj *:쎤01:x98d]mzM)Ģ}2CڈBW3aP -0̉ͤ1Z.:h923J\`sHlC\Ѵ j#CQm0X $ieڛѬ(2S%q8S9ʁ*뭱n[>$m$0T*M31Die(Ũj. -3gb/۱Cf{ -Xls)۬[%0ɮM%=c/1]d#9VQ4sN^6!6TTvd/v*16Q9DPiqk0 -#24݁3v#KJi]^UH#]r>gS*W+s*;1$_ShY)(UwZ$tKTb9[m>g(2nk<+V葱2dz(Qd=I! GcwF.4g>g(^rLS7Ew*qT 9O?LTC,J+.ڶX&NR#KG'N)D!!i 7c!D$JO*\jNߣx'c>8(ʩs@qcW;lnpBpK"H" B2U,S%SosflڬjZasYA sV;)Dbq`q7YRU],~h!r>Gy P{9܎]!a$*UȰ̏VWbԌb/KzsYכEë,Qe uKX*y3$Q[Ph`KPro MM-ƥb+FqvS7ŏae~pِ+Q D>D"FpI֌đ CCWCf{C%͈% ^' -GBF2dbGd Jf(u)V;`_1)neHɰDdz+kzXȅdkƦBi7jh!UFv0ndDfk\S:ɢHىԎ"΋P,ˡlQyj̩B.%>K#+a㲬3˄#5MPh6P|7urxu!!s9DK1[€dr$KJPdkvCY`(n' _o^>>dmr:u\I!c2:Kzl!#٦Kq*;E8':g?"PCf&fpUI-љK=*]GvIa%FLQčLSE<ܐqNݰVhBWrh*ٹXNtCO-oZn:P08ɐ9g¨ -F)*DX/Ef ~ cs:"=p+"p:PT95TpLwHO࿒`,G_*:(Ē!ĖΈȮ? !P9Cf{C}E2Ka$"@B6ezTQv,P.3A1q!3&^dphrX&}S5 q,3aD\q"J{* $2;L@L0{aie)Xrb(V#_V$]DI!LC dR%fXXcV zHC3Dic!C9]9dW; 6*Qd{qHF:~6Zg]B BSB(S0gus*!3mP.C -- T`5j [+ 2S8g}(EL=UI U!3nTڐ ΛWN!GV ȝ%!aE*P| 2C1mD13jA(^ ͙C2Ԑ4fZxګj H<SQ$ UcgPb%b$JafRBx."K הpJ)jJZ1*VҌd(g^:2:KVL -NhQ3ߪ>oDv@EXF*%RxK%*U;]ôix5\erԌfol~*-LGOTe@ Eׇℒ(f 8:X,SN,Lg=2!"]@HQʘK4$VijfY9~tUIDQ`BlIw*8Iijhe#"%#2F$0֠<]8Cs3{I$\b$ -ONfL8hP70MfUlYhDJ%}XiNh"4՝Rs8ɄG\OB˶\\b$hBTiCu;%̳S5#Eū=$QK̗D9Xpٕ);XHuۯ^Q-\"JbM)QkcO)2:\phhI,9S2WbA`0ҿ6ַTJ-jG'pn(J"rg$? H6:Quo1QBƁbٿRS;ѹE86XfKb!~/٥+mTOsaW((fFќsTJb ?]vFÿ)r8TʩqҪBZ.DgZ" endstream endobj 128 0 obj <>stream -XsHJb%~Q?Gٟ% -ͬ0}d#ak)#P^O)A^=cE;:,:Ǜ@tSަ]xƛLPf+RXB]桘:YbYX62Pu832%.Vݚ)A*t *2Fń׾E$}GdNtQtK] -)I{(~PFtf(jlG13:&>q[%QRj-`Rp Qt{QT;UwɑtaEC4FJS{"GqOsfSYX6Ʈ`l?s.SK!`KtMumKP 8ӢYHU%1_%<}B(u{,(F&0ocI s-pH H|rjr fی21|,cUbܩb9HţHl&GXQ,s.HEj5W<Ȍcs>r3QG-#&q# >Ĺ2fXLv2dm(oLN LPd *m>P[X {+,lPf9E1Q ʙP64·t*"66f8ŧkE"qfQ?{̆vh ؅Q916B-V' Z IPt"M%*Hu"[(!V]IEo{wjf6̶0/BczR$OsԆk2mm02iSZpy 0dlv҃RTS0ME1"LЩG-U74>oCS`p- WYek("K%ش9Ut٦RqZ>(.241VtU aNaRsH%tֳq{{M(jn|>ubm, W^_GꟆI&3D~FYL5<(Q,",Q?ު(|D> BGQN),.U+T@Q-( EէLh9FцQ\:sPT PDGSziGQ…?U Y Q;-{EGCC(2Tcן*(E4A(JCX LGqM(fN8x-%(|S/LGQzJ20FV:E1])Kșy,`/9#Ԇ$P Wӌ_K؎B:C^mL( E]Lx}EziK/ )j{ٰ:G1t)ZEGqV.eKSlQ<7((QH}(.M -Fv r%F:Q%0Gq([(n۷Y]f,|FQ:HFGQTQub7>e`6P)$s}Z#vO^7iXo2P%:5$JyRQy+ťr -rPMt2"B18+ -Ec*; EsrPw(>o#GU偎RP"`(1`Rg)%dQKxMn6𶧼_j(2Ǖ(jť5p?&(n/5PDL"+3P( ūB+s.QPm*~8.d&Fm%(.ԊMVӢUBvJuׇb\]Et -dx -fB{ (j`V~ PIR:y6bP:V*tat&ĉ1UuOJbOSbiꞬ}(E~- 8 Bq\*4 "_TWJGj;Ogr -J&?ژc*K<3Gqrb䒃Si^sUۋGsC mrsCqY8oVڔs -yD Qxo=T~:EyTxHf_nG Hj{?b(.䟪Hsf2Q\WZa(矢0/E:sFqeŕZzSƀ](+'?U}Ws9埖 *,[( cJSQd}Ա6PL>TQ\7CO4S*)*S0Q2;GCjd q4GLPUi)6{řx>)ՠ2O x$ )?(ŰSGqV(O (XEZGqA(68Q\%?Mtvf?CT4̠ -8Gf( JOmSrgOOGq(nJgQK:W@EtOO%T Q\M)Q9?ee3GqTQ\7ێF.HNwgչQ\?-΃\ճK?uׇO#[0UTxL8Q\%?-( Olf\!]iSXe'U?kmGq(^.94}x ewQEq5~Gq(.7(řQ\s?E(OSG9EvHxr??ŕS:KDe$e8GqB$*!O9;sm(^.-L+P!6Gq(56Gq(<ƹESEOG(^yxN(..ԮQ<-uʓʪGlQ\J)ۙȣ2!P:^sׁOUrcx>*9GPOQ<92o9GFQv3QCi -A((#矒lzUW^X(.ť(M{9G@ƙҟ'QT(nK0MnJE+>TRFv;3tř䟪۬ Sq{Q ?Ż7Sr SGq/?enCB7Tv:+@LOeS:Gq(."(œ矲-#6+Q4FqS~(Y"8S+"63?5(u׍"K+Pܜ.trsEI*%Q۪CѰ |4ZQ\tJ1Xa];eFroQ6@ُEq(. Ų;)Y%LxrSd3Ea:eUw m>}Q<OYC9J1Gqn(f&MN =*8g?I&[\vHCh9tQGq(n-Fi(pSi:sCO XXj(<=#G)[QLIvs+jpQ9'DC䟦Ev:Aruy{?rIE2 AgEGLI"FiE2b -] ոh'ѳ?m `г)!K,?Wδ@LU_mr""+[^=6Gq(V{矖fgQUզ4Q<9LV2Gq(L"pMHV2b(.ŧ/D7OHjr-(^%?5OeO ~9 Eq3N:G2:WCO$ߥ9kEqNژ2 >9xhPD:kBQvsP$?;LGlRa%Q\"2HF# -U5Ku5jQ- Y %HvFx`OդJQ]] ?걎IP__*tDҟIT)sŰ/?Β@;F(#wEq{S۪P*(tţ9u,^tQ\%} U{(tWUbj܄e5xN2mL4k3Q\/;?EPbcœ(6^:P@@S#Q<WOH:""*6?OK''GѰ(ճz(Ÿz"RF5^[L0Gqn(VSPOv -l(05S9sCXIŨSqF24Gq(yэ*,w (Ns@a5q@:sFq|͌A(x'$F(ŭ䠘z8NR3+wt좈RldPQ=xhCOK'7{2md#UQ7fIEs1P4G(nͤˁ?jQFv*GLP=Fv ɤJZ^u"TkF!E:Q&H(˩_:mSr}#(E9\)Ӕ62ԢzVZ)s+ïi(qѿ)%$Q\(S埢rGRH3lxPZ\$(r%O(.Oă2c"tbjEfP4.S84t3 Hr7 e3S ] -T>(^MW>L%k3fs8gjb0Q<2?u -jHi1!s=Q曣8COŎPEE0qO%*-Xx((Tb#q2Q\:G?U uWvMK'M;n/QUNSd/AQS=Q<-:+Fqt -LsgfCR(˅2ͤ -Pm)+`Pd'U;SSGLP[4Gq(N*!)J!bi(^Aif-:BqP4VϮ Q\G?e( ū -V*TQҍ&TiQY柪(ESs*pGQv3Q\Jnj(œ䟲r[i;Cq.^z8goq,%a&SQ(#{/r{9kBY7COf?В2TQ<&S矲Ш`$0D_)BrDK)qAQ\J)󩍐tO9EqQ\qx;(VB٢xS$Gqe(VDlN|L O9G%}(nJj87R՛C&F0phs"ݱRL-mXWo~ʿثCxN(?T(ųB~"QAOa%a1G$(//:"O $6(ť66`U%wHm=JJ HQ[v2 -'Ev:Gqn(nN* ؇e*87'O2xyNj4EVm_Gqn( ((J rb;9ItMQt7x$CQrEI1f|$mG(^>#(2s@qNCѦT?rgb#t%dcH rtb\=[E]Pjkn3A*ZSePE2Yik$#qձQ`Q/Q<'E"~tJ1]?VZWQ!QOQ02Gq}(NZO%Ea=PSGqB( TtV\rP?E==K'X -$V8UQ<+OIlfc_:;i#ˈȒ(II=qٿtE[G( ŭw904gued7ր W-(. šIcd7`LzC1e:PL*( 02ًbD1Q&?E ˴<~Gq(|O ic^J{( Ń0d6:b -p+埢6(Q\%S埢r@QWwO Ka(JQTc&?-.{ $yŅZ9Q)s;Q(CO7_:ɀ$CCqgDIOF(eGq(&T*xn(2=`[c2~G>UQ:KG1l-TBXGq(OY'9TpׄOeax("1YQ\%'?-5$ PNx$yMCE%-vuJ,S(bGq(nʬE)*]lxr*I;Eq3S~Gq(^,SQ\M*BQ\DJNj? Q4Q\?5Pd0৽gq/Gq(^:>Rr矲5hm=rqWOh'Cd;ClOվRy8SUiUSţ8a)ݷ OS(Ū䟦*Ī%(ffeř(((Q<&x養">(mOٱrQDm?UKƟPd8s@1J?QAÐr0qO.f8L6CG.jT(3pObf(퐤?5/YNGqV(n-Fi(pSD2P1ӢO&*Eb(9Aq;SKFvU`S(0Q9)^:ɼ -O>c sb?Mv P/:=UQ\{&(]Kic/'Pt -Gq(nD&D#`3iUhhG%)R(tR:Q\ ggIGPg˱(2ZTmd@REV ETlskwb9U:jvN/h*!D(ūc%O ez7G(ym,,w (?Mq;:"(.Eդdը<<,lQ$0DKz]8(@h:Cq+F.9(矢I<|TuWӣt҆-E) -P(VCOv{YQ\a{6:'GQvUgÒzGq(0δr -埖DQt<[[Q3O7/$'Ϊ'TiwO柪*8O?E;gON(.lOUie%Qq[Փ̸*Gh(.(vRmci3(.ť䟲.! -X~IGqV(3(0(9g0V Y{(NKh|{u8U8g"BQ'埪BnP%P[i93Dju(R;Fq)6lP0n0*98gbWM*qׄL;yQ\4OKA2 *Q(VcOnaTђ1Q\"!x?^(t=Q:=&~g;"V( œ矦;S*w:KGq̕䔎98aRnOzSdP{Gq9Sxu??Fzd̤bULoգHSeUHW2"#8IE|ݚ΅9g"29X8KG1J?Q ҘM凎E!1EكM};KG1E]D$tJ֐b>lQL#TSV+? rGq("K0rI^vgvHC}$Q\tz -(َǪ(b/'=,O6Gq}(S#/G1bx(KKKj(#N -P܎?U*mJ1@T(vR&P -3Q8G1ll KAQzL9EI,G?eaHB%?uWth({\+?::/2/^mwl8.u C2Gqe(Nʀ$SQk QL1TI\2 kFQ\CO7tQ'W%U{矲*}] Ioq OMm|PU1P!tׁIO%0U/ZGqq(N"3GEGN~Gq(^Nz(BGq(9bj KUvׇOS{$-TqVO*F{89Qo#dGqM("RB((ū"J`hqWOS9CX={Sre] acQ\)G?f(gE9Cj)HB]8sYi"FZ)xN(ť䟪`q(*/j -:E 񩣸eIOE(2R(8GCQv3Q<~):}Zف((#矒JDՒH(N*fП~,vWS R@(Mh2(. ?eժ($~Rz(tI E -C`w,(:!OQ\!E٢xyS+b ($0 ަxBgjRAuO%?L [QOe PɌQ\4P2"YF"]2`ȄQ'1OYtQ\1I*;v:GQr>E %)R("oQIc(ʀCH*:@(M:? &?% PSJʘ˪AQڎ("(⥓{(6EXafҟj -b"Vg+uvGq>(^=4E W%Q\.{&(]cE:j -P܈?DQl lzQı #Q\v=..PDp(&A1޲S2JJ(2Qz 9:Y kGq(!DD -;F18gB_eB%  *3'G6!O3^:(nO%<*DWas5v=QO'O߯s㣸~d)Qd,8R}vvGq("TFg 6j(_:FUubh4(s Sw:bK'ǘE۪Ȉ!(S#FKy8+toGFqڤ?EYO(S5ҦtsxM4sR'I#hx>( $X}I9(^ LboOQ< Bq{SAQ<*'XFQM=Q< -3S9@2Gxzŵx9NfS(FxN2d~QT9t^:Y3T{GTv8efK'q:9SX,(&A/(wE?t: BQb&Q<E~OḬjv,T'NNj5rbA(Nɢ$ZBBGHFubS"(FK#I5XKDz ޅ6^9ҝ Ɵ|!v%+)T!_":6>ˋ"㘥7xQvWگ98~)`ϣԚ1h -۶9LcYj#"W$$SEpaQ´dD" -NYh(}HL:){LX&:uG1:n(f.Α+".l(~$%}d*RİUR2EwXpׁa 1,EtFTPLT>I,oȯj!mb%Xx5jqN14=˙BJ)>KMTڈ'MA"e ²^lt?Bڈbۈb^=<.Y@&^b zH~ܘČb߫oj 5ʫ8aZJ)팷F1 }uFuNM_ǦEQ&"frU).TH&)beal?!HīM(OEKܘG9e7.pXX"RI$q*ҧcQtJTdݕյͱ bcSUz̀x0!U%*փF,#leWqj% p׍Q?m3Xd 1:Sl @[6{YU9dס1:h~;|Gl{Y9,Bv6raE6Pc X@V"*<}_Tħ~Z}p/ީJω 'dPz02t˱Re(X2[P~B6F(A4\"{lJG.6s4Q*,DOOB oUy8[uݲE5w!2׍Y|NDˑ {L=%5 -ݡ!eLTnUhI-EalϺ(LCpGEqDݑK%2n,n v -IDQ=!mc^>6-[h(K)` f˄<2aTy3N(^*$(ژSoK_lgSh\pJ+ctJY#ZT5l숦EjĒ-IYLZ'F.*2F#6r)E;VɄ}]vՒ\kY -UfgA,TG15fYbہsJmbwA8-ICIUuR9#Y!+YEΦ -LƫR,b/wURHV )=DקhxiݓdIˣӿUp3m]5oGWPDEKhCLGۧ#0ZlFcľ[4ziB]QXn ,ef%,1"Ӛnu(FE4m #S1  -n64V _v^Vq(UJeU$Ql'tv)l鉪i(Ic;5|~ure,⇡ }Wj&.1:Gi` "|2c(Ubue7- KHjt^wGDq)O0M -{H*Q2%"/U_wIN.%=i_#QT;s]1Wq!yi3):!zJJaLEفL邫P*BNaͽXfDQ#F -#1yJ.G(V2.K!EwR -a f5h$7TIye9 1Fa*eK&+8(LX8Qh%y}(љ06PAXxe7(QP'UqJ$JJqUظ,zjrmt[0-&ɌY+V^hV>)A(J[RQ͑(m!َ (F1zi5AM DGNJe4T=d2HA-'F7x#i^Y$%yd -0 (eV퐙}=!}9>q.YJb%,WWSc| ӑ1iTi$p<6Xx,`&@1V^Z/lR 6"4TLFh%O8$ϝW(nLa/jNcF6uQNzQ3KL+0pc'O -T083b$eE h{F祣3Q ӑ;B㟛7ySݸXvbJBvRCƹD䐆*(G+$X+OM`S˜ -iLш'HTO7q0UMIiS^ I\@a|ᶝK<+I9h^iL `]Q&;Xb+ -#CjDHe8sC#4$FFu(MaiIcB2i'zuD7$1<#*`Ÿ!TJnR -!!u>2Yx2t2q+/aæfxv§j&ãQI1&I 1 SEo1BbH8MXpUI\St&!FfCƪ}: `$ +2G>U]Jo$>a|1_NP_Ü|VmOaTôM#D1XӞIJtwii#Iˆ0$DGQ CO8ylx3C9Hb|a ӒF߈b2vƐIĒ5ٰF!\!Ep&NqvȄ13LKS8FUcOL2ƘdRI<Ӱ^d# D>!PC$Λv0BXʈZ`/6$xq4d4 v0rQ>pÔz߮]Yo;w=w띱iݹ[V;]7_F -^o]_<|V}?g״u6,qdI^[wP{띡UIwкMћq2b%axݮ 빛 -]>}iЇo}Zjw.(d o(|ަUG?c>M{{η7>Fr(dk׿mWkw5ͪ[?Ou M NkZvn#l"Mзio@w}?ZO~Stc'}@1eux 0lWi'>Og>>B>B5_3roZC-#uu.vPl /~s?/ƽֶe]Q=&lXkuu?+~3/&7Km̧?ִ\a+Jjx{vko _/~ ^ִ~gq2b1~t8D jzĮY_G//= -m.8-|{ebK6y2 ̬]A6j >6_/+Wдikk-/fÁ -r^5zMZʫ_ꫯ=/?O<ctY _6,-(خ[vWዟoUk_ok_ M>>}vY-;/YG'm-pu^×4+7U7жW_ NK eE/a??Qzs)aۮO~:`GMB^{o+4k_ N{>O.Y ~ɂzz?A ܴ돚| ~+MB6(o^7 u#K֨GE7,%Bv=^×_mZUVՓƪx^ʗǟltٻA/N=,D31nj9 _W/fՓ^IU<NW_a.{bozJ -}Wad㋏_fӬ}{ mo\~/Itه#7 3Q0 ^jW/}%`OV}? Cӂ6^JP[o=Q VkoXh׃ЏzoljpSTYU?яo|i_V.̧Y|Kײ8q2{;AluA:ߴ+W/C~?O~Ҽ'?qho2(?cqװQ9=r-MGЮ -o8{Y?/"g۟鏂^R06.kX}jheC4^ }v]A6ZQw 4//дUZpW}5K$7,Wkሁ9tNlWM? ˿oCӂ~cPƯ_ -,/Y,a鞯&1=|[]A6'^p׶n?OoϷ?'/dA=ZYzГ5,Ccϗ ʏ<ɶ]A6~nOϿMeƧ[_ˏ|kzOz &Mn /~ - -iMj˂|Ժ7}&lذ/]/}q׮я&4_дe%xҰ_aiAOL5Rۮ'Ь_e?__J%kԣmoC$ ݍTb ħvw]uܼ<%yɉbj! Bћ!BE4ы@u ;1vʟssxkg{kw1sߚk )y6u1j,f^5J=LLrlם?LmN Tk3\k欫k暫v^| d'?A0 6 V*߂Ѓkprsvu;hBv<=zadTm}&5ĂЫ l}a)"\3uϙs s\4!C2"dE qB= { -)[`- bQeb@pr]t 5Xsn&n7xׁl!dgqA&걋"]zTy9X{7zNQu6.νܹ70d3g dM?4Q&B=#`*=P,6jkYB/¡'qk3>.bƬkf_?ƛny|ݬɮ!c.b)9~dVb]PSGu . -uĚ7-z뭷ܲh },>V`?+XCHSc$ԇ+Bιqvnz]]qECOL,Pz4Î G*&0D}WϾnm/C@ٍsf"#jGcA%^&0GN)r!\ uǝw%۝w,$}Us9ȠEm.XS( (zN`:vyf.bu=,Z{N|Cvťd -`'`5`bRѫ : p]7ixBb-Eٵ !&;`=Ć(B lǞpig&\^ n^x=wql3.s^*X5deo -*z5=u暷{A=Ѓ>p}BpW3 jȺ֬( -H6N=s: ;ix"`=?#?s!Bv2= (U#/EAs;SϘ~^뎻X?裏=أ]ĐͻiC3q7ZZAA PHM?K`x!\ŋŋ{݃͟;g]DYDCjȺhbEUE'3&U =.d܇ݶf 2tNduЁgpqt"",.䊫&׭cx1\Z$%KxGF[nk"`FQok2‘] г򫮞=Gq G?ɧzSO!箅λq0C:XV г|nwwB6BX<3d޿`;L0k8J(z51Ϙrax=p=e˖-l}{ z@1PT] Xu%'‘D='0p]p-]| -n˗/[ -{v{֩'{Ё5`9>'i((Bcֵק\.~Z|ʕ\bg~ŏ<\zP/Kƣo*XE pBkfp-]bիWV B\ eލŮ B Ssbׂ۠Z3KXz͚֬YjO?\ Y 8``zfV^F!Jѩ@eb8k>:l>v+2"U1`uB"g0=3jAĬ\Vs٪"6UY,XD,ĤURZ!WfZϿ ?O2$2P\LdCVDjI/G" b»)ˑzEـY$r"dQOGBmiw ҫ1`C "ěiK&gK/K/uk !zM77 V -R55FO -*D-b׋z^|g׬ZAȃ޽`QS*z'"KdVEU"E!{0b^~Uـ 3ddE6KN6X5`9IDU"9r8[SY!W\Ok kk+/#]A حrHWgUd|aT"; -<pgz7U xzF[BXrd(`zff &+_N^x֛5 AY|~N6X)SJDR 0`l!|!ze+W+׀[o[oMBܳ -atL0U#rjVDT%b683KAP K/# k"K+/Mv at͑%L0Uq(A$V^.P hoIȐk,;猓O2btQ(jDDg0p(O0xXr*dz<iEV55KɡQzf`Qq( lŪm+dk`3Vk#UD&(}:Xqh_|U l@{g=B[ `woRJ VNlDF2lY6nN(Q0US9'LpkB>n@pֿEYLtlm!sC )7I8(t$sX1`TDl_ XqLzvZB&fҁ>(:`sE& lalA5DUt$X D & \&\3 -Gy?\`:_~U\3\_| n$SzaNnX5E:P%aaILv;k_/$q B&R:d9,0P"J"p`| חj#sQd34 XN,eb"/UqhYo]b~ d#Vt(gAILƮY+fRW_%dzp+eTtV( 0dCAÝ=<`!։7NWtJLY$2`rH"*@WHU?|peCL׉J%Qu(8ҁ*EG":`djF"p C`/,=bl1Y,:PB:P֣J9,0)Hm b+WT(`Bt" -42W`$*ZCLtC"!ZsX4_cc+hG:D9;2 &H -_%*`* -K1 -@;wUggDf"-Qt$fD$o,.hG~ 14t&\_ !E=aݑiP!6I&tJ9Lʁ&\&J>9vHstԉEs(70oi_*ov0XA;XOmˎ(Ye"&%O+xM(0Ȇ(cseCW\D-i$^Qh0(Rؗ2M"2HiL^vHeYL^fTZ:T!+Ytxd˩}"!X:dv.f"0IDB,?*(ӳh9VCl9Md&On*EGe-P)jzfeY,b/bc&R:84HULӂ -XOωvCL΢ !`jjOG -*Ebh9=+,1I&\5`2`2-JQT(ev<bJ [=؋C|~N1])ڣҢ8ObR!,M!`4= -TRW^SX6Ē #%gieC3Ԟ*g׎tgl cEz;t4cJ(>bN; -KhgT,j??y/юk~Tw`i>X)jω2 R*JE16-Yۣ˔i,D;[LETTƦ`R)RsHo!z6vcIyqSjOQm Ë`2??ϩڋvo3^TL* LϙQyZSdbus`YEW{#tQ!&**= -vyr ?d-a劲#[\/49%[?NVTmğ`~deNe+5{sƃm^$ƵT,9:n9Z*CZ*g%N̙wJ7[o6oBv`ʎOi$1`-bҜǴjz7*c59ka%f VNi⿕(h,NlX/a!ߌk3 -I`)o /Zmv2nsUޛ dE 7Uo7 7#ZߖeM̪E@6`C -UH5:>7MeZ6կL+_m( t[σu ։y=֎fXBMeXWʝJF[`oy8Ao6h0oƃ俽j1ܐ;u`zcoF5_1F -ۧƃuʝ#_ڲ`5ן\6,q䈀u+{=ֶ=kzd:7 -6U-߷6Xu.o%8O f$X[c7iQ`X[O 3lH f7gS*]&`ebo2*vLbb4XebTmzަJp#<.oF56߮n⿙Ħj濕LZLsC -kZ^&viX[3`C Z3HBߢlőe7 KoF;I+oۯf>X`oExv7ykT惵}ԃ`7`X77+KȌf4XG[0l/+d +/X[yاM^6-\ޛ -֮V[L6i 3`<4noo1S7zLA0T5L17`N~g#5-3=z%-iZ@.d=֪f" S`4XW7y`oupvoVrsNLS6ՇֲVL3lpۈ {Mf2[6io$v6`m?lS֥m/*/k1ɢrk1`?@ -6ۤ֕k`> (2ZyLA0 lp)0)=օ`moӃ`_֩Vc - -n`-? oS}؋`[zf0~#`-? gz$dƂ,c -z#:zL:Me0Xۏ)P6~+G{)(=c -}'k1Fո9l򘂂7 `-=lzX[6U \ 1y0=@TKc:yLAjzz}#6 wiSTc -*-4~eXItSУ`m,3ۤ21t::L3#ھM6e%on\Y5=Lk6i -LT[զ`--+9)F )0lifW36[S^t1vs>34+nN/0lj~矎4XI+T2B m$XIS^6n7=T e .,}\..,9_|`o4HC6R`rW3GZLs݋$nΧƁ 2r m*XGa`]MZuX;[6-ܜ -6ebf 2MeSk`-obS2ZLbzhk3 _ֱi`߲:i`moMe0XGۋ֚VY&f,X6=>V7@_*>@60 [ -~`moE/zEHNSobz(2#ZyLA٦2l*) k[YA k2I[hF.:Z&'.[Zg-[2=tMe6XIl -.ƫ -6ebnyӣw,+9 vXOuc,X'i[h#}7V5MZr5 >h`-&-O-X6UBSp@`q]Yps>̃}`m,MM`]Y2= 21q^k2ͼM%ހ*Iy`&-K`}n.X;ۚ -gy^x8VbYY`^pV/, -,{ [nX-؇w[֪ƁuںM)}:MZa6=bh6KMzM,]YqsY/⿩ZKlEzdz,dF {eؠV`֡VpsXX7=_&`oڦzl7#`mo֊d,-Mk@O>!noy*Wޫ}悵⿭.}bHLvAoKz %S`SoV-`m?։vuK =6TILO߮oyCW[٦2X۬Ɓux4u؀iT)X2Z|Lrs,mZ[̒k6iǻ=+XC֦&[ru7*؆3MZDq6-J k1K}ሂu k# 2xLA[Ջ`1ۤ)?6lP[bSVxS&lwֿ+ 俕ܜ*FZPSPrs` -ֆ0־T4=Tvn^)(TlGoj*#ZT=1 -,4{ۤC:LA*z\&؛UA2p֩M5dm -`->``[&MZbSk2͜*k"X2*6i`MSMz`~`> ssZ1``Mm){uLLܜ2M9Nd6S`-=xf٦2eHME k2M $`e%7G`Er2ʋ LLlg{ c -ntRS}8`]Z&֣`,TFuL,oze9*i er5cQ5!`rGR,I[w׿`o/ׂe.X 6U@`= -`=|c -jl*)U[;R`_Y`{zcgX y5㖂l:XC-gz ֩V`XGĴMEo@T;M:l`/{&LlEO࿥nuP:͞TcAO5L -`2^Yn.K:jl*`V=\%6U!3ۤ5r`e.XCLF2p V hS -XLLiJM+`-of}fɦZހTJ=zl`-1=zVrs\ߋ`vz+`d1`moڦZZc k+^h&4}=cBs6Ւ< -TCTƃ5|LAL,us^ @6e;ͤ -.9 VL,H-_y{r@^9Uݜ:^0l4SL,,]5doiW`k  -q6.ԦXz1#e n;usTyBV޻`S鱶<` WMk#`Rzf$X4+6u̦#׷ٛ-6`.+z/XyXѦ`xvݳ֦R-[^{9#VLL`Sͫ{3nK|o7Gy -~E혀-& ` X6Uy aՌy*]M9EMQl:M C@?n ?'`'Vusr} k]8`VS%GB.blѝU`gX7 * M C앗d5g$`]}# -V]Msst)}KZz K^x<^6[ X!SU0ghQLcE`oŏf[tL"`=|u%L?h,\u -V34C1` -;nW%StC{USA #kJ;I c)ٳ駟t#lW,t ``Wg`xBKCT,=xzA&de[# 1# -V^!--,uH/zfEbصݛna+.>O:n#Vӑ^+C"&RQ촓;zvo*Ţ*=s\|WE6ڙ_|٧HqcI`4X#jȲEX vՃLBF%`(Rq9^uEEIl6? X7:.Ȫ -5JLdESK%y1h4v=qlޜ`&6`^I&2U^|饗_zE DQl/ܳNvQ -lh!ط -``0ezyBg}ne",J$sQ dB(BY*O69}P`qo؟v!S}R3LdJd| BO/A|RxTԧ?cn0?CVSˉ$]zp"SL=t.yd@{yp=fJbJ;Db;&7O{w$F -NMn5ɍsظArq ρkU+OP;(7\;S -M]%/|*U2Yd}?_#2!{vցk* (*Eh\=^9?a;x -"XWUpDF,z`I."dK\z а]D!FQ25I 4 ;o`6xXdLd{-\1s6r$d˄lڵZL\x C"1VT{f^P X,gh=de0t.ː-ye+@lWZvgjǥ@ƒ΀wV7CzOYz\.ϐ!-R{%((B9q~ /8C+gG2!l䢄Kي+劋&J&:[^;5CKZzpM׹8q |˖-_|ٲK~j}Mgv@gE t/YNH" dO3(1(7]LCn jϪ2≤DVŽ Lv(>$dHēO=4zrv /|+q(fsMqM _8fAƙLQv"![Kd?F{!؜ku&t< *jEj/ kH3AvEJ[%_#?V0JD1Ĕv(Xx hVD=rLrs.`f0w-Ic/~G}!;nQeK1%{` >EYSO|0d\ox XܧT *!&ڑ}Td,{ʢdqa\.B6cֵ [h>x{[Ͻkf2`889bvhQσ+D"dEE$d\ds{l;3%;Тص:ezCdi.&!~E!I6Ew5gW]q0·,(C uGݝ*`kY"*dg{$n-޾;nlwI[W^vyI&&"9%C,юMc^G6t.r| dǝxLg0f7Νn_l ~ۭ̿K.\J"F&J&˴c C.RG P!zI9=!n7-zeyso\0OA:vۉDv4R#dY.g;*!(d%bY\{s ۜ믟}5fθⲋGP%`YvL,wNy\|Wk=:lAu5ҋ/8ob" -C2bf1iGCHY*d[oQ׾cp$ NB̦{E@bU3gͺZYf^uscy:`$`?N2b XA4de8pSN;lK.+1*l3f2`]p9gy4%`4gC QB.BQ.crɎ?@λ‹v]v饗\t!\gv {.`JfRFd<@M=~hw^tŲ];XrҴ㧂0 0&;&sM&^4E>t{IƄc;ēO9? _{u'p1G3^…Da{0ιLb!d2m"ۏd|ґh~Yg=}9ئ -TkɚlmHgJ#'d: !d2꘍;Ï@Јv)`;3vꔓNTЦL=O6D٦M;㎝&<%wDtIlL :Ȳ\̅6J;DߘЎ8򨣧3cX@M9#!טKqA8ô$3{`FLF#m2=AN<|wَ#&~ءBg=vYmED"HXrsm#a3h8vwdَk_…Ed"fˤ#Ur12! 3amvڅAژ!lrĉ6q⡇jAc߾{#\t#"nRX&\,L'#&rm#&h#l7~„e0aq=po EֿiL.X%ddWd-@a'Ak}6ǎ=Hc{J~'SHb5`b.VCH -O0ж^v`gd^{|vy$\[?,DU0%]D d(?0Sd~鸵.`p{>^}]wy~*\. 0Q=H`JQf LF~6l;n=l{;@` ÅR,Q-%jT2bA@ (鈠mm~ p;ˮ;ӎnmr ._ϸ"ryr12IF ڨ# ho`pw|hBm`mO+q)EL5 -Yf MT:zG?m n퓍L?݆T# BbD+HG7G)dE-h9 -¶9x鶵@m``3%iɷrrY-Y7{-J~[lŖ" Uވ:O.$!d'dP}4-A5?TB%XFft^qXXW -!SXTifk(7? 7fJ,p! W!uu!KD阠m!- T{ 790/5NƌJ MtnH Xjxe!] -X,MFfNmc1nnm[տXH -W X=ٟìH94aMn@d`dTdI6Ƹm 舗n.6"U+55J"Z$p ۄT W5&X2,h -M!'Ё/+UJu>R퀕CV Ӫ-AcؾOIaַ_-"}_X}$ÕrP-CC7όddXl WTM?M^#`Un"0?4YZ&p#^a[ JXzx$`Ői2iM@G†4*bp Wc24QGV`WV -X:\'bY.iHG$P%j5`t t+o-LRbY.hM¦G:ךPeXp =׀d94Ŧr2S|P)U"Րՠ%k -Tjl)J+)26 ]m * V k8*duh:ld8rT.X᪒UВpn*p X,- [l+Jj-l$O5RXMф-mzYC` #WF˳)~qFk -dh-+0JykXĖUs@9kd W޲B52X25fY-70^~ܟ,V ZHdT#UVdkW޽y#UVa+C6' VZi*~Wt vҭoi6/mgiw*~'w~o6h;u쨽cw{ SF8j1|ԭ&:cL oY]'Էڳ;4e!'ƍ4aa?':g'G?[^cGzkil7-r mԵ#Fٞmףk0pض|ωnV:c۵cqn ] G<|=F}oҷמxUykǏ -i/_Ώh7&U/7|͏zd6uɇXm#0f1;t̄)M?gQ; )~ ?|>;p|91 -  \yo8.;웤w?b7]ν;N9Vlam -m|p 8!uBɻFNף׎9vhEk;o{6wm^gϕp-?];# onlagwZ ^xHw1\Z :9xI> amշYƇMx#L0yꦓ<ȩӎ0Im_c-d{:i{x8ףׁz_'.Q>A#Xpp-!6 -,/b$Ve!#TYqxA]~b"7Ȏ,;wm bUa1?l ;%.6>a?pb:7,PdK~ۏQ1:Y^:Qϱ1s\?PTxRf-@cR:Pc|mY(T7=Q>(0^D>cGt8Jy6q}FNڐa |Ѷ#0-@삄7C8·G#_UG7r"ϵ$"~~`+֚2F#4ChT~H!u\* e],(I ~ ?p-fq*8TrBێ:>4|Ki EJ!g bCNRN{?1/V9'c3Wliq _1] :╝~AyQ[:F|Mݸ(g}]ͳDKVR)Zj -P-Nto!;"p9rPEYbb JPoCm€ԮAY!?Ce'?f@B1~C(Ш !]{HC|j4G^?>3d.bcI}X6}J\lo -~̧R' ϖ@^h _aC1ޏ1,@d_$}۲3Si Q1p DLPq؎uĜ%܄ǗAC(?" -iURljc̆oG(g ,ϒGgз<ju@X; d^Ɖ{.+a`.QϷB`a,\)8Qd>X)NM LCD#PS_DZۨ~5 ǾÉI+BcnsC&uxTp# #Jxh8`X -'P?S_e?+|qe'LH}d;TS#:a_۲N( guяތ4߮]Vݩ,`gak 5m?z50tT_K,CwZXR&1ՅAx}l '&^6N䰋WRX[v)ZLP{Bm(0qP拀TA.GF0S!Vh5:X#|GYE8#)тT<;` -*BbDnRgTX-1@B5 -oĈė_`*> -V?X -GVRLO)z]`? %34`6 -حS0=Ev.@϶icXaRհ&i ,.FְW0L`yh(rkU} ->Z٤f̿ƥmп!:g ڞ4n86!dJG~ jUmP4!ƩF(4hԤ,cC1PD*`L0.O$ KM)bSoDP&e<^Ώi|)T( y`VϢF?xlN0} ^1?dEJՇB# C\"Z`nIG Ĉ/ Rv?X*#t&=q9AfL! - -498x,[->nV>8ATzf^)nw(Mƥ{ZZkg_ @.ǖt_ٷ8Pa^=W<.z豋]/=Gz|7VȵO+t}Q; 'cU`auc+P%!@1 2?ACӿ)'_O8f4USDŽ -c*qlE|n|U->Fy^5tT]W!~SDH#.FWR{ǩ@Ӛ=nsQS1)"%b5"'&M l+) %y\q.++G?uIBB+ҿ&m d=" ]$g2U?Ekh*]mD x%!SA JUټ^6`e2fd}q⤡p#DZu1p[ ]/kXJS6rN̷\P戧l@PGeљ_HK(%J5@c'v~JۺAꠖcUK: %G2-KBr' -p$]KJB/2q0Q"tB"F䐿 -r;4Ѫ;xb}uS0UG=j7*Rt#:б<ߕHܵ|"qs>xg}m㳦m$Vzco(n?ZLo3[>=d jľ.HW^oĞkf@PxZ"[|4d_FceBTvǧW'_vlǗfWmUA7hʑNAGN?aʘ`S#MCn߇!a(G928I:K䡻EiL+%D8~fNn_'q2~CeuTIB* X1RRoT+]9Pq,[i_E)q9*?'NOVW4VV;pCZl|YhW)v%S(RUvQxJ/dKڡ5Y?r };z=^v~ -"@QpDc퐻0 -"t-h=l–L贤GcV&54_2cND Lgѧ ćÜp/F@ tD`tǷS;y>lŒ -<üFiKosѢܓ]N ]i〃GR0Z @#yGWP\ ociMּPBh_kiU@c -lK!Wvy*)”!_ǐ9[te} F"`pw>sh48A=;@(ԧ '2N"1!b=˟(M 'Ԉ솴kvhxduWq>d yE- οjtDR[L|x=1:8Rf~Y):j+o -Be`?'H1m#:҇"-DHa\K?1q|QkP\F0sE[Fhȡ/ECNZ,)2%n8o\Ay)m(.r6A@Jc")1A yϕډGP0 ;1QVȲ,jf? Gx<(ClP~x*,qј%1f)-U AN"H~,aH5l,kd*VKEjv*KpuE1  C+AVJEh\HkC -F4@ʩH8D"Vd14yƄjs,V}5]RidϵC$ [ \  ,Va%WU\#R;kD Gh̢ՒT1$׬azAK#+!j8BQR,$4(9/+c}5*,b2ڬU s+jiN\3sZQyYi*_P1 @MsF5a.?XɘswP0kd .)7׫]*2VSIk"L}^E\/R+k꥔jK+!{)nf9.A>,R}uh8 -(0E4ۜ7Qz"\uw˨C/8^. -CB#P㧋vj=ڑ1 0ݠ5.p˓3 -E28uϨ -vj[xS_Z4DPTDq>%/E/PÌxX^PO^rTZERJThB`sX~wl趐PC}-W~fQ%ǶaC}im5=`.#CȊaYeb-Ra%$bȨCYQ>q\|Yʢ4d!Kf -/ŗz/(oM?7&EFM[FZ B!TfTv2.W,Fl]>ayi ?%0qBDidh;dEdy7KYpvżU3E3؇% yz@Uy'94p-Uixِ'H!ܸ# 7!POf)Ţ@8,N`aVTJ.fpA/ XY?0ɬ!Nz]jF,8e%wwC]d]kزKBslwlByWpD7-..<W9>d (b^0_bDZ{]HE,l9U!ֲ(yZy#Z_')J~ -G|@^#2 y3KXdSgEt.5u!e!'=? l4baϟ̯HGWAxS,Qq!/:fNs^s 0fpC!5vT} qU^r;^FVgt3 z#x5җj7TS\ [:y(_ -V\tvyu]TPAu،+:q? x2P,8KVE$cQxqp$83.Ud\Y+,*l~rbwi. -;L~_(/]^#m;\)G=99yRQh{OH.)"u+\H#N r-^`5S:Pakz*gBU 夳4Ry_ĝȽi@}XeOT`V -6 -Y߇`jyz5tQ3M ZPt+cËiC`݅Wk(SA+uX8|8ϫ`)v?_NnhCp8}#jz)tC5gG44#V0,0)6+&]BJͫ!S~˪߄ɑIGu5sƴQ堻v%[^1\bE<_Ȳ~ucT)i=qBs+6 잪dKxīz\Ze#9O<縢ӑLOx Dt˕>(y='M0+_"E9Q( S^TU# Tܒ#Vr&yݍ+1>>gz.Zfź~#fϓ; 22qLiX\s"X-RO?&5~%-&9]LWKgȪU+؉qbY؟Ӳzʢ WV;=]E}P!G;IGG6.Y}܀ȭEah/QR}Jr1:C14zA,+jE-ki -qH|Y\U#a/HqxVO/IRK#) -:?{ -0|W'#!bk8{u!B aEF,aЃzĎ%>^u_TbUhQ,W. Ǣ8Wrx*/$ÅP z C❐ݨ,ajBYjLQB+"v20. c%%,Ui<xQqA"jkoՀi"T -q#/Cr8=*VOYS<:jŖ>W}ĨI ^!{)!RJ( eeN +rb_AІ' D]wSB}~X,7(9'֢#sTQN\fjG\}Z"p\ӓ?lITJb`OSrb)ԇɳ/Yٖ}rӂ ;!8nKee>e 4X}lu}!wbˀׇ^m3|7<&@1#Pt# !4.on#!N0*l.ŲX h˚H6{YN,B#Kё[x .T;ت:ȿV_1NX޿KC^dv!Oxz]i:cQT*k?Y"["py~eȳռYzd(؈Z퐫ڑsHbOWV]xoIkq|Uu'.ggbv~39kK9ba\*XI5; Hxkơr]ObIʑyґJaX ֧L\CWErf&In - -_IS&a庼#Է4:p@|-Gq'Wj\N1ذyPN fك:p2M.كLFIcb;14(<'y8,L}:u y_?t+"ݱ.: Y@jHǹzrdĪ*x[8s%܈Lb'xG%}zCJaUCrN1@iav-^8kv|N}+n\9haЗJCr *.[);pRU#ța&WxÏyA/^;l)MnNq.n˝U]bYP&'Cdm[98[R.ЧRNE#Z\;>)y?}P_p &ph) :;W+.7ts>8'xZq3ZM*xt:4,tv G6aʦh2a)c'N0e!nj=nBɓ:vꄣ/}Lp iB1y<$o;m3; endstream endobj 129 0 obj <>stream -%AI12_CompressedDataxɕ&w~l4՚JBAPd(L0Rk~݈ JRRKYsο_ś>n9}۟O_woҏ~N-:t}>۷߾|';J޼go߾z}ݻ۷_~wnz{|wO_/qw?v?Vdw9?}o:^xݸ{2 i|o<~o=y?ٝϾ;vq՛쎯=ӀOo^ţ~NM|O~zbSK?_^kwǵYp?_~Rk}曯ӷH+?7_ -(O'Y<|ɴbmygW>~y~_w_0;cv3_r~~+|>}3yzj7~u;wxϞ[%WS#V5SӯD-c/}7GYr猪U5;?M -L7;U~W~4܁׏Op~Rۗx<3 |Doo_hlѻ%kbG)GC_qʮ臼{ V:n~zyF_Q7_LG|om׼ yg}W{o~oy+N_;?~+p-oy}gs}=N^zgm:-Aooȯs\˷ 1} b~UDX~s,>縴;F?Cx]ם/=^k޾˛⢽} ?ͤ~YN_ݾ~mZF%? -0Ϳ~7^~Fz+D_>u_}wW;ϑ -yϷ|F=]xN4IOm|WlP\.g=a٘^1za x9ޜƓ>M'stOr/\e.e+ >aL5fԟ0+\P|9g8tcx6ϳ0zVؚ{R]l5V[-1<8c&20Ltǡ?"7rOadXd$/^qeuq=7:&guMst'wv7s1{Xp8NXܛxԘ9xqHecMcǐ䧵 yR"`IFs=࠮8N88bpp8aa78?GwWX`'&1YOy7jTJi5Acլ*N )uQ6jl^>>鳾P&=M4XH..d~S0׸Xˆҹٶ`a /=>k -.ra)Vx:ce*GYe3ԬAzR^eW,Aq!pRa0L6-^ /opZf956  @P7ϊ NLCpAqCeяMcHifeONAƍʁsx^S|E/Ǝ4f?'اfuZfp7`7 #`&yҎ Jb0m>|[Sn̺Z"͜)M}ң8b+.d OVzZYab^aP/m_UUOAs>G~ڊU@qFB(N#. ^]^l>,:LЕGU^AT)cgu~D5Aot|7Q;Wo߽b=kJCǤI) 5a&bG3A@F7+̘ ;`3& x'g1ZiiiitFtIv;ZԼNk hpy7:C,n@|6 w}9Fzf_?N v^9=x/* -nģz 7瀾zRލ J8C;Sn:q.н@ NaA< AL%x Q9C|uN!4+6,?C67/ >〙oJܿ'q;;]ĭK[$6E +&$N4 V%) -+,i[hb$7Lx1b@xO'.A #f>3'%}O0ͱ;Fd%ao7GÓXp:>h@O*ƣx/8Wq:x GMhb_W<,F|"w^Y.x!8t@*CI>Z.m0/r\_$ .6 -sFX.;Hj{ IU(>I6VW%%,gfLn'N5x+SKt3]$$8Ėen# +ؕ _]Yd;-_J6[Zvd`CvG'z61hNM`0 U^Zádw1n[?&țzU`Ud,$0a.fG[G -kr,C P |BvFI?#^Ēz\(n 1J` -KP9!%ANX(|XşWs 'a8bDѸy?^2ŘT~҃{Q+jn>Aq lc-ƒ 0m2F1:(á:(hCy1G LK-R(qdFDXb4"rj(35]85-X>&x%~6"&Qb-EA`"B#;DݺIt=DJ+FBGZɇ#6 QY"J9wZ$eD>||2% KGR4C"%E CT0n -ۘ0(>#>v&>bHdUh11̜VZ +MZ jo BGEoH <!6 !Q#I.#2g!m' -o9w;i$HsB4[xf q6 kJ1Wq x1W\^D%QbbJQxI%k1\6JY ?9J\m OK*!@ ?22X^8cs+DF`]E~Df<K8wYqy|h1lŵ(lXYt|,`oN%- ؿ.ٿ=S9m؉K#O4j"yv)P7FZ:@f]k5F@EzM3 iDo U:^_exc!~8 Jw*p -pvdddNci{< (Y0Agq3ȣb($,W1.=+A9h7uscÿ^6kpTũ3L+ߓO< t7o]z 5 C68e#hW4ʖ``φ"TqaTsS#g&J~P1tЊf -Nr$⣂sh|OIT6%pS oN5ɯ]{*нW9IN+]k> -ob{72% _so(s__wjFSCa/39F$V,Cro͹٬uPPh%~ϩ2{w^8ePGWs2?n<6tho;TIC0&KtIO(iu74:KrIC82yF;VnE3ђ)DLt`4#{ 7-C5\97%01vץh|R Sba|!ČEď옾%m͚I,6TJh7 _yƜeafBa4j,D1:S1!N-\ő՜ A}qM֨d:/dv(,&sڦG'̀ij&Z!a|CFaQs$:xe?JOZVNžKv]cBg`T,݊ѱHX87ע̧l'/9$HH ,aSK:}}ғw>H7jIO):ҽD??b~QWW&{z#%E8/OlL,ބEQ$ƍ<"t!OsT}YtCPi2.!2+ æ︠ .4 x]{W?WԟVM\;b9!bXg\a;̣(ǔuyAh5Doz-BTVؼQZxQ 2bwf^ Y)-tt:xGiKJzEB='3} rO1mȱg  ΜBKR[{EE,H3[HR:^}~Wni -7HV|&/oovEiQKg6GgpkSB)Ս$3c.NaO0 IG-Ԍl9swPvdO?"ؒi^y0IfdZU - v)l#B +/v v+`Ar$T<sᙈ~ N+q# zZ1Rd7}: W"-or7[X  tgBsfP.s()xق73p=H :Tpя->w EnB-/s>| crYl'xD <Ʉ: #6+|CJ\b>s2%0 {"})o#P;J gue|p^Y >׊ww'.+1; 'Ao;@Lcr|ntux.1g5$`݈^gѐybާ%B(smEپLT_tcC(~6H.)Ѥ/QI!t8>pu~#ʆHЎ$֛Yy"xĐHg ͞ 0Xp9/\F-WayODE.a8 :R -L+\Kp/MρD1@r]enWRy\Gv4%v[|8M=z -!eUs^ӹWEii|VP<姛WǚwjڙW,_/KRUqAY33333333333333>₏MMԙMs&[D\% EG2/H Px4uZn*t* S.ɼT)%X=b.G7)Q,ʷ,WBuỸy -cjpwi'u!R'P;>7(Fq,[+U#Wt -οDў^2 rgU>ݰ?C̭l斣5PNuv:!.΢Ml%LͩIJGY]X='Iʛ|Ɨb,z==7u=*]5gQJ dB_p:AC6AsJXd>\K f}uCZ[(~w{ I| - pb]+J?LZd~ꬺ0OT=ZIuq*~Epy&$dYZ`g5,"AN*HoBڱW֢Iuմ>.WMK6\KjûՐ -k75äqnݚF94;}فc*C\ώ׍H1yC"lnb"՘ͧmL}zV>[RW z{ClR82T{.s~U0z4Kce -MF(|j"I'F\D"Jd:@i$8[1>!-,.59H\pl?scS#R%_<=0@kT*b *GW U9g{Ο=9Ye##ǡ(qci|Q*ر5 -/O|bO'b! @p_3wJ2:==?:H v5:"lڵEyكpySPj#(":߶oj.MzZ:0%u VE{ z)h{ -LsQ CM}H@K[KvTb r4NJn Qe&p` clװ 5fq 6>Ր2@UcG#a 2ؗiN.d8tRF'J[U+f  ^" m鎡dGv-y8f|1-zO.:IT/͡c i? i;jv҅,WFlSB{uP[ ⑎ܬ9yoL7,0GzT١ǭFWsp]l ZBtR4V'`FVPl#wFX@1bjhKʦ)`p@\olFfOjU=$s'7o殑3S8PS=,=#ܲݾTͺ 7-./Q@hSw.J\Qon{#h'{BY<09 j*ߩyy} ] I|5tf 6W:yS\sLŠr!ֈp* kF5ib;&\Ik26_[<)$q7Q[G5XtbE*3np(d{n "LսQūvlGvkC<9wo8otyg^'m@іpumzqW7;zʗc;R1|FϑYv;,+(É o.H5m͠tఔf%V-xnIh2[u#l.o7m '-+N`V$}ьNsbf0/f\=&&Qt.J:Z$4di[hm&~˃/-ZT 4Z^{_ (y1/?_,qk64h+T á!Xh]yΟx7YS0B}Z~oZ4rCHֳX7wn6P'!]~>a\ TAbky1ǰu!!0+WUyŨ~yPLhVN=Ξ8[x7h_;U5ȭ{y)gY foBCf$u]3{ռM`{0ݹ ?$SoYgIl:$Ց%@ѽm^̬80KD3O);.PxG%,ڬ!G7&X'PJI`+IqeB*Te>t#Nc:yu={X'Nc:yu= >{X'Nc:yu={X'y5b`cJyRH*RŶk˵˽dxV!4PV c3q s >sꊆWLjK:>f(|HWa !|OE!M;%r1yo -}І-&%4BM"L!V!c)üy2ֱ2V;dib~~"!y}4 Ēe3H CsN1H 99hs6xKv@JNjJN#~ -gG!-286!6 b;χ9Q[FT4N!}dgq){ll[YSGOcPly\"ٶb]Ɓ| #ߎaw!Uao>W[aek-&zV~WOqqO'ѱD:7U7|[< 24nFXR`I)"/!H}(-gk7;+YȔXs }ϓ?4=.wXw7{; CfKaW!srYxP/>7=,EvYa -f4kNꔬęgi*|Nj7s׊eq`ʍpFFKvI;IGNb.ѽAwFSfm k_8MKbs8˹[|\zX5B~}|<`h]= ce!·N[6\Ayn"&C*ɝjVu{+'Țsy,5Yή9nxICj6n%Qsl>!P -9YY@TF·,AebM~$ +/WnP=='{zIDXɘ>e(rP%.5ܖ1Ld+5fkzXK;} ;d>].ldN3aSrL|X.*CwEs;'bKH?="ͳcg{i }`y6<>,}2 .c]EqZo,;a{_]S;:xKRеfo(Xp]ޏ7;^k6Շ;; -ޘѯ}wǯw{h\^/!: w}UCiӳknio:_p}„WVe,G3+äe9z9M5yu͌>MϺieӯ=~Eolk?װbW+z ݷt2-љ,?Ξ`k=]:dөpHJ=_Nye]}Qvf}ŏYBT`$( #N;OU9$lȐ!䭔x;t;ބn粍n^Wr;?^ԢET5s~j&I$)4] -_ Xg/|*t&ns"nֶ" Wֳ3 B|ebeq4ͳt㙜{/Tw -- WtiG^(_Cڐx/޼߽ۗ|Փ'i13w~ݻ۷as޼yW07v{qI]A26PvӲ HRq-N^ gqsowB>gfLJ/{D\?>yjOr?xۧGؒyob?RhxUfᴭc(ur - n\YXmSJn]Mzko3.fi9l3UyݩuB.>q Y2|`o?n -%qOgIM'`?\c6YO\wŷV~<܄NYg<)<ݞn`X`~ݸ\voXpNRVf Okhۋ #X~+:[p>5QJہU|Rx5NNcj2Udy7]?CzMfgղ_z<> SD~EO=;g& R~]#bd6jdGp*<dR(`3ÚM*:3q8u[玗ħ28WjFCଐm8~*X!e&|oi=G8FiL\2 ?07 +6Ix&,.KH5\_<8В۳!'s͡4? G_qN0=007X`tz'>,1</L_Gu,(YG0R9p^ *eؘEpFFq,v/x<{3a,X'*րJ8( 8Pe>q: h*+8-6Vʸ q'\I\ OTH l[%QCZq4[b0'hdb.1+}ܘ$(P(8T)7~N?{xt@y#4[vTj6 u'=.~.J/|hHmv/`ԁqE'Q;X\3cP*@PK;~{<U|>a F*܁V7zAz'V - -v==381nA_ikw3Os '+,*9̐ 俐8@,>kp4{Z녌fp8Wr|6: {|6N{S(AE[,тǾݏ7o_5!Ə}ϟ{û?oCO?uO1/vJ"ҷ;-cf1 -?Uz3u`mCTq?bm)B 4` ݠj0 %`h@/Jhn5ܳ'=C˟6cTK@B׸ҫk2`0P`볿\-Gnfa(I+O%Q) Z#5I׷TK&K$=$4Aֱ87/pAnHf %gcGхg+X#k/%]mX28iU=\f58k\sc(g A'Cb`d~"U2^4X8> u -Z mh!l ㇽe*gdjLXS'_!V Ë|ݠ ƞP&ҠgGdX&Yybka , JlY%$T?` SPL@;h(t4q yZm;9/K@1QP/0'~kI0(D5@ᡥsʬ.mqbvj( @Tʖ^{~. -s[p2SR-Ɯ1W1Y4Pʸu^'"uD/,hfyȲe*/W_hM{Z,+iXŋ0OnmOrģ "$XGʛ,L~tavCMld1'!wJ:lLK1v}@3l -jqqx_< A3qSZڑ NC &=RF4_6)v*ǃCM&hW[?T3=:yBre)P;5cy4p< 8cHgGp nN[<2EB.n -|(tºW,&u{ft;pȲ^ k5LrC! BaDTmD~`|TqiǰGV&*0;ri1ꊎ/I|6J4nq<őt8:d|NNKYMZ nc<,oc͡g1|CpKȐD82{z@w` :8&Jl'N -MqQ<&,*3mSS0)؋$  '$!xG? iވG#ƨ .)W0IAq;|`H ԻR[CAb x0 -B M f}-= %fhãkQWV[Z5Dh-RЎ\ 6+/vQRӱlG\&(Ax~(54. "Ezey[)x~`)~(%{]`CZ*NW8];Nqfǧ2KU{X~#=3ԁXHUE d .%3~s"o^t`CFn'lCq==XB/nelЖ~J$]A çI6 pU ]YQhWSD:tĚ; -/SmtvB+m*j䷴SF܏ OKTXe:zM6ښBF[*3Y$n&elJ}iw\㤒z  9(90ADO~I!Q&vIA^q -tuh$e yO EBx$c2_K͔4AK" {uZ%ݱy#87JW="*j;b{a!*`N}`Y1LE`l>MH`/*} Wc#k3xGm߰b >)9}#.E2aKV%A$ H+JTD&r'?]h .e\v<WFCNB'"8f2H۷6THS47ZM2,^ڦЖ_x@L,YQIi5~ѵmLh&`8g&TNa$c\jl /?YF~$0/ Pc(dRzj{cs\x@5f -|pSmBvK*DgҎ`TJK}x8\:*ʒJ':p1g1ċ)NbQTbf dZjaG}u4}m\/J蘓xLPǧg%6³Mg aW'픥I;?4qi[sp݈^cf7j^C-Z"IZ=V F3zJU.C‘xxfA:0E w]ZI%pxd@BډbzG -yyFhpy0z{vPg&Ja6LJ1ԢX̲b\OaV - `C,:μ͝50uh1pP땘9wzfH2D T1IpFC9s .6G1q.PFMaC|paaEҞnJDZUaKu y(XS(sߠ27OwɛYEb|i}"s,pj&#vzI7nmj]\@d=]j~x)CWwfW'ezkb@‰Eze*O"2X&ub -˟Sj\㘅quQ# Ѱ>IOl2.X2ڕ/LBBK'HA wޓBk4HFSM`jDc23P=4lX<*dOSGLIewm4 -q"I2mHj[l6Ɇ(b0KS1YctDT{6G6 _9e9&ܰ&jeOMлasMa!M`aML $+9DA-Z,B]-'ZD-A[D-|E.[F-G>4@Lu&"SXSi?4tNGFO<HPz60FmLB15w=5{ Ԫ#Vc4 M`ۨ5U~2"1k],w`Tev7`b]9WEZ| q4Ю 6}ڸx5s"5HՀd7VznMkG <{ Ƹ6Pl =wdBxA#Dڍ/6»7n -yDyt% 3vzo `q7x37.M~@7~J4 M`IlH&Vԡ6G♩Vx*T$OMO=ɡMԪd;qDfڔ A[_P_T%Xs@[Ӑ@@l?,?2U}51ԮU:/Z'6,9>(42nl$ K6Wڗo~{: -lٹojϣL78gd`XrRIq9bɉ#ɗhx\:ZsoO{MqKKIŤX3kE h23iw YمjSL7T'N!C|E 0fKN|3v$=ѮHsfUkvC}j[2pUoNIE]g*BYھUvw>yZJ:G~ya9ߪ(C@g&R0Q\PqX%)N"X:I=9,fYP"K!`$4"r\ì<0BʞeMaPT@8GJːfGR1&Ū+fR>gi1aVbe  颃jyIRta%j4`g*={lY[MQ -8]᧬kxxTQ@|1,Ijo綼" Yӧ]C+NKMHik|wR,֑,k=q^Wz T4SwBbT%<`avc;VRO1Jգ-}ԈԾ^$,̗k5-0lT9KkG@Z>]e/+ԲȒ|]I,yD;kѬ#%BY%ipDž&tH(8=nnV%F;,.1bN1W uw,#%vK \D%֬jRL;0,k -z ZSoc+zT -ZYSd+|y#kwT[>5kzYT`5eBtz/O7شaɴLP4 GdUnۿnսi6V Ƀ۪|bID^6ڀ%%2@'$ºWkW"QPq _&%й -#aY7;'3F% -J[e&^gd,+*sh kW,4>ɐC،Q$i&HUP2V45U9$_5bBXa,&@Eb@ʬ}2:cE;L'-#?c;4vY4 {@S$k&4RSnxb<Ԅ;Dꤪ"!)`5c# &k5WC`.v{a^'!Z,7|g.n%YD$l>)ߖIR'_~q44s-='*qPd wNrA$1`%akm]5ioܨvO -0+cI5k -N#7d}K7)W,oJ*oj6 ,P'ciBGNN:닫m_%wjDc秙BCB P]>7qC7DYf@kQgPaGU35TJ&Gq{9RޏfS5ƗX& -I…f\B"rp&77+7bOTZF(ܙfGO$fcfyϣƻB>xtE1'+arXV&C"ף-5i%'*5N(UB&y!VTS25Lk6C*3nI-y>hX'F k>ǹ3%67Lc0pq*j2NLkB(jg|>Fym%ʄHBc]2b*2Bk&6LBu$d*)R -{S߸Uv8\JP~aK0\X 3&5 !6 xuOaTaD{z?ipK ytIaCO0U+jdIH&Ҵ nI{d@LldPtX'N}H۹gL5hצ6ּK k6 4Gw-#3Pˍqb7vۧٻ`uuQQ'I{TҽM VյKm -j;]{jt6?%}i<6u_E. Ғ))M#jDµY7Ci jT> [ jcja­YQ{m jfeecZlB.Ummu5` hU~&*)Kdml: =yzay)fkF$rUu.5*6P5\≠wOml_tՖ,"+E3k٫m`XqMK[>[؋mXBS> :4|m0 =#EZRَ?kSpD=2HVH'-x~gA_|QnG'ʄ{VtKBXK6461N%!gUҞs,ᖙx*YJ]9 穀k1^Ra뫐"e6EZ-StGrcTkY+[ۦ;LxGajJMٞ5ݑIiIuYKݰH׹subP([k꺣i(2&v' fh% 2;Z#LArv)(F^#E>*S;WWt+Lmj 1FKRbO/^-^-~Fǔpb*LVz`2˜!Rcqf^_agXY4#^5hXر4] ~LX -Yj>%Uo9dmI#Cm捼v-v<:k淰T Q̣"1 83yb{^\<+Nb˱.phC",;Ve/33gm~ϴIBQgrW S*'ە.W5#Kc(/,1f1BQMdŤb/j"jnH 8aQ֙!Eh;ۑ2 ]\lFђ-пAYǒ3oAc>zkb[JV9n9klCCblϨ{WxFۜbn/܏^v632<5$:"hՌnY!UؽCb9\͆q"Ą;( v$f 1a 1h1AI䈋%QE+?1Lؒs y6 -fRĮ14rlǢ3HͼOklhzQ$E1uq%dXFeqS;kz1M(qњݳg^]rIʉrI$rS1d^K`!b_a,I)=ZKUT%f2dqԫ㠂*oj[fiP!w ޔAP/4 -[uF}zo&M`'yXIwf-yGzNR֓g[Dvп; t:SCᢾ9>)âɚ` ;/WrDL.?[t&H5ᯎ+=B9V$pGBy2βrHwxnaCU*Z.E/,LKZIF* F]. _،r腆.3R\dִV޾.v ng]tr(/,\s'b1qJ-y e.ca33' kM})쨗~0ۼ9 )eMr!d;K~*tT2:#)@O{h;W -AA)mTXaN!.")vAalzOfֱ\Nf}ՉbrVInUᛱ&zMߒ8^4Pz^s4mKu颴$aڶ#~{n#4ŞuZ:՛Jdޔ -硭tOPV8iMx$]v |/`! )+TU4*ĝ7*5[›*_gm?+~.퍦lct+6FNS1ލWS7iMʶhXo&}6c4V;FkS9طݚNVnfusrFoJ{_ڛmK"hawBQD;81QN^^kH]bt+7nyt4ңקWj=8ёvoO)4]4}.~ルK^}WWo݆Uw,+34hF{iкm 'zO8[,Zhex3'j>լLoWv_٥*j6 -3Q(dD8jbC# ׁ2ɫ:A_E稣O-bW}UGz,5 5>,6'F"jÖ=F=kKkD[s1Bnob]e %7FI4MшyP@{WjD=-TA1k,BEeh a7F=o_c?B iM6iFƉoR{i67jMkp|gw -fԚ5HoJ:5<5U=PSukԨ?RZKk4׸u\ -XCA58Z` kwZLs5hkoF_v=5tK6ƥ`F{pڸ[K'>UU1,I{hfZZ.4"E6I2ʶuЮOKuHVۥ5h؇3۽ ԡ׆b!<[z ߟ i)ȨޱB{L dAx&*i\6hDJmK%26uPZS[_MHsm\Uo'PWo ]:֝͢ ɶuUloV"Zoo3ѼmRq۾;]=}Ot:CPMZ>\k\cI5e - { KN?/+ʶ(kխJV6YWJ ʲvZW]\҇M8~(k.RTM5Md#7cC -b 捼q{]>@ֈ!6tHyhZC[:\YH&̺l -AO0n"2NawڑJhM)u}yjV׳kkӚU$hYtbL8CPWʗE4]yy7WA\睤hpMw,2\n_@-ýiJхĥkOkMͲCM'ŷMZ5$*Hl: * \o.t -kxULDvKMÈEgiLwnx Y3WCS5]םMZ|zoUΦtE\vhu|գ05i@t Pޱe'ô43}y;G~.uy:SHA{ -ڛ1^"fY(/~[ͬ{ۇط Xo7gBZ揤Pɨyغ@CuP3!4n^C9~ _ hZRmvڝeÖ =-O-EmH'(ji]hDcCcxm3J.q7½9$aQXsUש#O%ba B!;.%g{uˮ*Op-eU!iZAHPYu8rY0g\9Ysksm g5_ͪ? TQ5oשqsS+ p+YX g⣽Cڝ" DѶ9+ˑYDAghrv x7\jqSynLS 5Q -glrQxiocJ|Yf~^k!Zp)F1tuU6v-rm^U꾰zQ_/& & -cC3_ߡh9lm($x F^Ё8(H~h'^)쨒X)û\Yر?/HǥP㳎 sŎ{֎{cX<ͺI㭬{}H@7lRe~۰OlbXnWYaF뾮]=2sGlbEGre;"` E6HGerzm"|3o>Xr$p'= ^JI9Gq ʭJIH@ [CjOP3S/(%&B} -)%u#=~_@96JIǸ Q)iS‹וRaR`2H%Aqfخ0nT[3% \-U9vXDe#}uysAi7oo͏eIK.<#tJ^Wf=5'|^~ZIf>Xcnt -IB-dj Zjv$aPv[$R`7`? -liObaObx'.2~o|쏾I-_g/?~W+-)- T4uT` 2Že`E ZˬKGP=X) -߳pMrf.P7-Y<,}d]9<2Fގh:& x}`.ͩP ; bv[,T e:۴PZhyT~NcavV2Y<'Mݳ3袏byJb0T2U~O`>grڋ -r>dsd8p@C8pKQW`hGgÁ'[0-Ȩp+h RmEr8l;b̷c9%3h=2gpUK脸\mY yc0:0ykkONNNNNb05׬xEf5ЧJY~zrh.h>ajR,%Ǥ\lk@g\RLu/۪>8  Olo.>oTw,] ~]ޭiٷtOmӴvY AG@cl!̾] |F}L S5wg,N;:t F0nK7Cۇ_LWZPDS"X:@^f =+q==_'(v#6lHsjf8_v?2eީblx٠Qm|q`~N32g|# OZ[段a,pDccw?Y||h32E϶PH9LM0g@-|K /e$[E(}r_U,z 9g!84x17b8ʶ<$DDyz:i}f&[Զt!־VjfcUqLl@n;Iwݪpo6Y4޹BOpⷸ)-:bfpڏ/$vmaP8@57)/DŎDSN+QZ@۫t1 jBI0tiTs[^SɟDa $&YVd@D -eZ4_Jh#.CE1SY|#ksHޫB*[(vԟxQ] a?/I3juW\l < f u=!S;f?9߼gpu wwWW>$9pX>%n(Q 1@0F͞yU1PxvLPPy`|~V0' g#N/eUC P7t1Ui"sU*ߺWȅu,zF,ʝJQm^Ӎb;hZڋd2 4X~^auK̨B4:T1s{YU:GTՏ; EW}L{/{a45<@:$Dh"* -15u{ta_.8P9D\q63LY#GTq; t2E|~~WO*ԾD|>@*C\Ru +"\*늢 wHD̷LSYʼn\F@@G> -m/{J*/KW#9Z+5f!vV[ - -#-t|챼Uذ(b:;‚p+#ţW2/=,R_/bjtj*l?@ jsvcެm3ɛBDU (NLc'tu!sě+§N+DH?Ἠ$Ch+hys'2B67[9CiȧhT28MhlU;"ʐaΎwV`bR]9xm=8Q}[f2x31Xn݃+N`/ T1w4,1fky;^x&X/Ɗ5i~1MknF,CJd;BU$G@g/S$ G1$ uh2D{ۈZ<9_UKdd:16,C18wxA֓Zdw՝_뎛GkŠ]Jdlܒ8So6 cn܅&f:qCjo'>mӨNQЕ|&a!Р]r<0TiA9)ߛ4YMǕ;&ŚTG|c&ۚc# P 7}5lwnD!hmpw$NA? -4u$ pލLfƲQ'UK ' XbPrցۆėڛ{QkQqƴ x]Q?$Yb]66͵thK,UNVXajhէۣk]vR"#U*jncw .{n'91dE"4= -D3q -aUp!tzړ5]K׻{ 1ڶh(80N'epʼnhBЋSV?˫}ʈg6~\)/g?ȱ»G9b_7:jؗehVnbmZk#o3l]cbK~N.{dMڧ#{9'{ö<@6ߘ8M\/ÿ 1.Z۫IW!s>dJC;O)Żs'$Xlv6dxjYGD 1*zet&AUq͌c4$וJBt) Zh}qq09:Ub$]/ v8odNU:EI6[ p&-aZ$xu6 *z%yW2|K|+wBt XOe"_"Hd]-< lMbYnCe>ŋ^!ozc}(YplgaOgO7X\b#`̏}lBp܆sN{=a~3 iW@v2Dh= L1fQE#-nxaWW 7]~ m_mtN Ϋ&7GfRkzybh(4sTnKz|LKg]ˬD!h⫷]Zcý1" -Y\RQ"*@43b9@KnyGpk ȞZٓYLړ$&c9K JA):6QzLt0qrxF-1f@EfTH*pMNͱƎm Ya1MQ9!DWyJ7ئfpK`"Bs1F35қ7Cϛ'N| YX#ɛc6830g&|ZLz;as,s(&89xĚ;S,J돯c l%"y|U $Z,&A2r:5nX>>S! -ƕ>JI-E9k5ѱkʀ"/"gvmpנ$\ -!GsAK6m}VA<:[?*ȵ^P(]9Bܫ@ڭo !& ^B 1pAbk+A*ɖK٦n|HUmX~n^6[jꍑyR>ۺ_fR{5˧@cTBN`՝ -D+uV-]DB@gr -yVjmV=rk,"ȆEz> 5fڮ#l|T͏خXo"² 8VF؉Ύ~' F(j&ˉٚڀ &;nc0Do[,[/a[ܣ0LQͩ1 YK k LVH}|7~d(;xjidU'=Tͮduf; -fDҖhC%4Y b-W)rz|+ de suمjHi0(MUTO:BLI>ШӢyHwZ9FcNMG^pd9l4 -GM  F5(*dAw6}| -]8k-;*#$vK)ݽTy3TT;HR-TfDsW[GҐ(Y$Hc~-g+%?)wF@*fQ$3Bb@Py9 S^ufgY,.)p_ywasWuՌL Pf;@03VP<6Cvn4b7T6 ǥp;}cO5Rig<t^4^B;CQ9 1')rRh9 $ßNFIL "Rv>I:H72Z*":3l=4/lTL]O}v͑a5ae4ckeX@ GKEj#C7eH\IΪ*eIHDET[(%LMv8<PJsk⡣t8JqqN|N [@JśX쾥]~ᤑ;i"w 3֓@J5aۢ􈯮*NQO1UJL6/f#| :O̬"Dr^fDĜ-g!=n8~ dGPpOx~1hdG!1 RWL*+!WZ%jI4T[3irp(e)8iCPE\ԤBNy\uiI$e ڬ'ΠVW온HA{<V#3=pVn!s+01[GQbpGByw 38I rL L\zb.G2($;чv,"&KX0ObRv4'R~ێ3p_!ӅyC*vKvf-0(N y7;KP ȕ}bBj\8+nܞԺv"h@9.D$ښ"k2@ɮim倊=#,$|_NG&>_<*׉Lh XQhLP`de"027+CV #O.Ey(x,USlSWy1OO9Y9.oKWI,<vynϟT*V.#rY'ݣp`ů\9(s*is\q$ y\QR ?5b^/%Rȩ{~L<6s4@ܼ9s 4~w>}GF l9K{,nV"?c0sYgi5w7YNO`Za=m$Lgr?^o҉MrlT <œ@6?b'9|aR($@zEr .fT̯iUbD<.182nx8o?_eOZ&VKj_%Xq #߸̢ _W,+]7r~*> dGؕN @@Ĥ>OHlWʻSH d`O4Nȝ"w?/>"͗/X-hy>I ?*]| CbX e 5 S'!=&J+AiA")!񂐹& -3` "a\kWWB4Jl!X^IK!.fх,YNy"3#Z!jr{oҐ$2GCr8i*OTPD+ΐo*54@9iҔ.M?d Sbhř$Dv"HLx [\uhRϞ?N([x%XN! P@d~^(‡ybp5$EF|_ (7l6gf_L, }zbmoLͲ (yV!:w,@Ιi[_pNυW:=nr+iڍ 蛂Yuz -xz*,KEtzxW.R.%o\u"moqcQø&9uTM佢bO jLdKG@LuVQXάظ.P s)-u -4w6=9]'eH8v0ܚ+f7w]wi.l5f(Q.AE$<`Y3jH^CXg1B֖e#G;;2-Gi_ᾞ%,;y&*ՒRJnkL! 376CpWW!`gE3|x`?x/~ooY>6CTlӋīsX晜Xƀbl2U`ikfNG i-v_`PN~b snCi$EȠEtoN!X* ՎȎM7pbu=ꡃfM:qj[~lVtZ>Lnvm4 =٠N -D(+BeK>*Ѕ5.\i^S')P7eo͑NOş0' 4:&,3-A~2BN㜑g5󟨏5`*~\.!eUrKr^H>?]xUEIš*Ϗ#-; E "VS{EL`GOhpɼzM`.6ZyVB=$&jEh]Al9 -B HZGN '4ЏJQS>g?=m-dol97Ф8Ϻq4}g;(vfj//2઩oR5,f:/Y&[QH/B嚊K 幎U0C=˨Iuu۸j"ڇGQНȹH }љʋy' <.dE] `#wZ$xMk,| 1(jRzԸސ%Z< ΩT;( \L;>PtP˝ -SX*WuyFX+W~X%$&fau$-*NpAQϹҸ"$r̄ ?!*縓!9$%{6 y6 }ȇJSG6 e/UƁD:Z25oshL#]@5hj*TP\USA"M!CTބ5y-tb織l2)$a $(u}&`PW$c]s>~L՘(L:& @&*` шe@tE.(cV`NԻG%3Qt6B=4lcp^5%jJ0RnG_ս*TBp-lDNaGlasDX[ؠ m6)6/~;Kmam/z %[<澇&dT&jyH{)=l ?@ YﳇMhîd7I#}_`a Lou9u0]]{لƲe*boA]dee{ ? 8b~F͙TL'&e_ͷY{qﱚa8C5Rgh8 |r/"ZϠSF}1?Æ^.OT%T|tkf^ Yc_s&!z3R&xVQP -Vbr ='.+uT*%|յo:P3%Aws"~Yb/ԍ"Bq..o~ŤA}$SE-(+yW HlXķ{p1k:~(=-aEBHPa! |jhVVV31ќ -|0DUgqs۱Ηn>BH󾖟> O -@Z>PU%?9yxOcx1G< -[R3=T(&[;qN:3RbݢZRnk'KqX)mE<NҴ-4׎ꬍMm[a1ySؕKN0 = ĭ-jJANqB ه3Fq7/%K [0O4TmJ@"!Kp2i=З Ȥr&XKrZby>WyXT/:U' * cEF/|am5$3ȧ2"/*E88(27|!a fNTWĢ(v0u4 -9$J -y'&OiCjHBÆn"1aHI,qd Ddg̊]W2v(Ugv+,p0aFörafynr+9q^<. -X7袱d𱶫ۛUG-]ټ<ٺSOaQHfJSqTtJڛzM g%'«U: %E^NQ>4/$չ¯D@ǯөxDQbYuzW/1 G$Q?ãtXS9/d6&[A9LxAA]'E䨓#M2#֣eEXrBriZȁ-ġj/צ`S|dXMaTWpN5Eʓ-Sۆ:l1sYXp!!Wc5NrX`^;&R} a ͸=5`BuA,rt2 -zA% #32h6;ב%dDjp\oc2JU!MGX]S7 F V?DBTxԘ^RϛaTf%,fc*d|)u[U2*Qjׂ"f)*ѰuCÝf趡f55.vzT4{lQO7aJ);G}{L@͌&Ll9#VzJ-R*3,&r K -^Xvi|vB*+ Dxd^h3$+2\u@fFK4˔W0\ -.rKcӫ>$0aaբȒ>$Bx4.Dqnˀ(ו"] [{5p^~' >@['SOGUx *ĖQILY%g1ChK3<\g ;JuOp«-k2!D1Bi[ Dt,…JuȬ{H:!9*m.@F@%_#10lP^wrBBZ85AHZ̒CE;m QrYyq7*${yݦ{ |Z<^G4n4kv !Bm-V?T|$eqҍCX,:1[ * |\hR}guϋV½M\P%cbf_G ÆhWOcC3C8E[cctD`]Ǧ*kX+B0u&ݶ/K[em)-X__lm {J !T}D}@ZN3tR†&'<ֱOSd2D/( P6ԀY0Ia"A?]> 8Jb^!ap\gn+T&}Ov]q9GlRpTHP)-`!fW3h P3[0:w=khQ^9q+؍YX -+LkaZۗg0*Bǀ"ѬPR*\Ph[ZP UuY@̔BYW1D}4^¾ČRcZ0zbۃÃ"[j9QTbg8Cmw^4*5t/?S_ t/In{4kσ7xjTTmB|gY̶y ~E.zMV*M'H<ʢ;J%TɶZ7>$/jXcZ0X`C ,g-Zz4ŭxFZjU2Ds_bo# ͛ :B -bTs7 b67GໃKW7^m0#̤\B¸ pTT 0|#ƗAk/`[fnь)L>`Z̔ < "atiIdg jppȮ-$h`Tv6q 5fߚM7f5O$[nx ֑&Cr]/hi[}%$I@HT]wr, "|%O䍧]H^#<\y Uz+wGf\}C6]DxĚ*`^R!gV5/T MCME[j͓} -Kjѝy 5% geK$l* ].?ͧR hJ-AKz ؆#SB ?ڵzBi~meѫ,BA^O/+ h\HZ$MÛȡg_ |DwkAgneGTJ(9,Yˑ Y uƲNz~F(JRL$PbZ /,Vj9;Uz*j&- A(9,'a՘TΈIRfG$.ysԢ:Rgm|f驐/#X}雜w ixĈYnVrar914| -uLCX<1͖z*),NJ-]yk qNΏ-3v_FL+Us"/Ub5mhCۋO}k ֋JFNfYc'Wѻ&r"qA.84\U\ZZMw3Th 2k_5s{b͛#lB]!8zfC\š0O~;ـ>y|Ak}~0\N?/yV -^vA -hc<_@slo@*oNS02ܭH O035+hu }ں^][[@` Yml! h6y! -L6[wP@1\!.f mX0׺O2C!P]!m ՘zm -! -0ېNE.-G] 1f/ k@]9jIo8wo>_11P0mI#HϪJ2j;a . y]U)%8ì^am+UE8Ǜ2^Yqd$mErt u0*jami5LlkЮ':rVZkqiWӎ3Skm<]zږXIC'vxc֮GuOڅk'':Bm -@Ҽtb;;8LߺAkbEb}V 3$buHJ̆k=6x=<8$.']wV|gl\l^iQ?bT_{pE{M4[2Z}t{~lC3`,ks8`O6?n~׵]Yֶ{k2vVA\+!! -/#oƄ+cݍX8H]K鴔*3Ңx.Pfye@ԡqߙO8I:<>4?Z$S*zaRUgQ\P}')U -"=^?~4'jAJCX|?Asd5g&@Y?P~n +,z8KW!LB3}C.dHQdl>JRIҋ^[O_+@ʑIl6Qz%"2dC㲺ǁ*~kDh`T5`O7<> -]B}3Jb 4Y[ۙ!=¥&E㋔15S; O7 fzbꅶDѶ;OT"U)Uj XA}H+]g*m PY}N:\-9yE?hp@̂؆[gRh,2&OFw\!Rzn:KnLe6Xp`旳}__KV}~ĨD,P(9 6fS΀dy게v8^C,BI0⹇kQ[2O_5Ue-z=Ah*}mJ8dQ63Ic0N]6aenJQES|qSЊs̿%t'U gYh |)a-vgp;A/vيSڳ,olt4/n;A g 7$Ry}-թ_9tͅ& R~]?q5"zBHfY6 ,Pj{~pf3y(s>^S7:NM>FH -%]W n>#N=Zo&`Jku1X7! - w۰4YAMxxw>(|Ջ݋bu%'}"ŒC2'I=Cg8@kaOg39iʿD ?#| Χc/Sg2uSg1u\3ΕlW3<~oy:~\Mg rvbyt(fuy)agv@(agvHعrΕss_ ;~ L[;oӛ7Ieb" >p&϶Qb SllT߅Ļ*aܫfi>eĤŁw1ltEj 筱7"G_RIvgnk5z'^;WiY#eW^ZHQg٬*k8fֱFQjbHƯ2Z'(H/FESdS!)@0e&{BFbkUr --,_F+*<_Ԙ\=_Ԙ\=_Иz1<߭1Ԙܺ 2\\ԖܹVtwAerEE՗Eɝ;o'Wo(WmT<[(-kxwMKC-Ӗ -xfF,@f[6o3c\% = o#KD&QRk}1G΄/3N6(lqTr6Tr#%L#Va5M8CA{xO=&umT/"{x%\ 4+^J ]MiBh> : 3;|GTdQvs'=f=YVءpg%u޴4|r^TI׸b,txrۗaPA?'3(eaץ`ph0^( Z:7+n77hڬ^}9 if$/=z+D{dU2|Ҟ}^^e/񝢈\5AA V{d-ZP(acVհ!*]x KaYܴoR {|{TLxZm?IzGoVmÒ&]֟w x\U;8cUdmެB$|9gA|ppYx]|_ ڨө"iYQ"IWDn^ (A4.Wz'gXQhL . g_ G-ACԻN^nTٖxKTL[' 2M]h;O怫yK㳣:8eY14xU$%Hb24 -~EG+eXNm~ZsO{)cmѪ|e"co3/a O9=#RT=T?<8Z|;C/G~iM㭋,S"aOm9zpw=DUf*|=}l[5;(3 7(Dm?.]P:'lHfl1ER5ºD;~ {?d 1<9tR%[yu|L돾ΥSO~_Ǐ_}O8# -K.fK>#T|(z?,gstGAO3p&,HѠFCn⌭P{qF>P1x= XO)1f3fQǫ5364X~;a[S!K',"/ƭ\Η} \'.1'm ziSp&!2`ӛʓI1"*j}B7q8(\AQeηk Ύi6w#J;'fHm& 5@[$6`Ht }UNo9Ao޶N1Lmm`rI!ɎZ[Irv]>9^GW> yQk+x,r!;/]lL1rtfeɄSaZ͌L"3Yu%L-7'!@]D=iSL]1+}GTY,ջXf5h"&d} 67UནB]DvGg5+߉+qV7PfV+ÉeӘ9|6JB^Tp5:o/e"ODB݀"@^;>Jd;e[>&}wYALM>S}YsIbэ&RkQLI=75B}ĸ^zǗz}RsܛHsZfI)|4|N m[wX‡ڔiL.efH\qT/"Ӧo´Ku(6'/L^L$lݩ|Z^LIeUb ?\T7وX5Aw.IP'ob㐰aszh]87sALGwZIGzk$7E{$q&oݫ›9P0dW̡#{ Gl) ݃k0%{,:l0JJcP%T%R/i똑:CVg69zʏf͛kP(o_% nv$tm[s\ʲw-J7A߻n xfhq߳-`-ZBD&mSk$SGMh ۇR=,zw,,*By ”.NAe] -^=%_Y|,M,+nuT!e3R^b pQ@& s`VRM!%mo8AwVYh$W) 2꯶N!K-Z?5bL]9a)1C{ϻ$ c]'xTͪ^~vZ'^lyO|d ] Gk >Drv1cRɋK6_t/jQu4E9i;mtX][W Iٜ WHl(q`be66-n @4॓nLokgx!y; vSU0DdQ/SuJ3qz%48s -<*#\I߯hȄYWᖈSsv~ɫ?F^ ÜsOFus?ɋ7ܥ`MZ<ob~{|1n2$9"d8m?' -ŹF/"y{J T z<Èކ9!y8 4akҾIG%Z>#iB'w - -"eD?knnRI U9my}p -ko6kE5{64 -,pDK}s41148nao/ߐ»4@B·Oyc,o')Ho1kBRЎF50fǫL0==MRV{w.y-Ń=M;@ c9ye2(ݯ IekD$ƒpx'd`{'=uMygi EKGC+;uK2z{k`![42sSA= 9qFOY \!@`P7@4dXNQp9dCj' U5sc#)Lчv<, -~;};φ^˚C=X$\)Շiv`b%i( ="*]FKG"Y0D"܅j lwwwWG|S[@8*hA^!K^rwIOA CZ&dŤ&uhP{Oy0 )RUC0ʟ&[,sA$O6 宋5_ Qy'E@Qzy6^eXw!3XfBC"B -c2"I -pኑ#i^A<+5"XXb|+*nJ3+jy[ᙘ>ұ4Tj -<p}p wrs.U0C(m8Lar߸ac[#&PB<̱lk<0̈́ -~6N v}]Oġ.#J,sL+qæRDS$»ihh*>v"+HXp3"a1]5R\cI'<|տ6<Ƶ ^;\w`ex6;oE+@=qv`U|ڋ)f|Gk~4AOzv^g5nY۾aqXo.X[q=O#|3qϯqf`*tց,]p?R,*L䬋NE[\|-C.XL.a 7w{`Jlw5f $ -0jCj *Tޓ{s$ EM$Jh.ܠ̘o\ -'UMMr YI*$,=<[$Kkp$J#L!0oBh~xH`h'PBDRw_ԫ:P$,&p oN8e^` +zx 5Y$|Ȓ#2;%`eN7kTʋ ۿ -؇|hu%D.๮蹐d]EU1ƛY<.DܞmVS| qjnXuۡthًmw4hTB LؾBtsq7PYo"&4Xh@Dk}- -.;mFi4wKQw˅tg0Mj${XKjRh/HcAT’Y/hP9 Dfʣ7V$A3a3@>?'Ư^Xnۼf6M^R2+n5`yVn%X}҇7:gg%\vegp¾}v[3 qC ç(,HrI^]j<$bGE8!9oLrrwuSd6=#H% BnN%5)vcjik4ħxNh\ICe8iJNn6*U,64;™:NPN5ːfUԆcg0d'x N d`Q)܏VjE`C/aH<-Na2Ni'nֽ 45srlGhmq6A8 ^q<ᕊdZvxm /( 4n?|@΃ K;FLQ@'ged/H(BFNUx* 9$2"gqs -<z47o9b{c)2Pڮ -=z8>^^h4MJj!E?,EwWYWΒx<ǻso??_}O?|^x5.?o~_S\ d0̿Q?W?_?oW??_t翘߿_~/W7+e?_2!-C#:L::?'=;lcO/9L/?_]{{3륦v'n/vG?ٶf~گjXVyU8Nߢn$ r?)4sb}fEO:/@vYif׀!TT13d|7: T [in -aԖw -1\(zHI5c/x2aO}-j5^Z+A2/|\`\W -QLͽr4CabwC(~K?B.sAMt'X%.8)r&?GPqĘ$pdК %FND8N10!e=~$JgN -v>&J@}lǩ94nPqcex\kg,Й!p  'J"K&x(E<1 jvQX"*E Ņ`( 3ͪI<\W& h9My:8?*vw8:K1(U@G.E1w|F 1Oߝ+Py/QTѼ@w4UJa҄޵,c"տ묽9$*0b):?[B^%CLx1 YUtܥ#(.,_k[WÑUl_,+{!*߈a(]0- Ge5ӯ:*#5&/ed$ا"013BN abˊGs-?jb !`6d}*ID|${C|]=!"7HG.DQ_[R#a;!醧2(&X+le9dj`!p=e\ PnGst5䤀2.n,ٙ/Xjwg#/[ihcӾuU-,3"k*<Ȉc;lYpöd-BNm. !)!8”戚=E tEZ+7羑'!L1/hGŅՁ!_UC3 b![VKVxQA]0a!_1. 꺙qο?9P$̎\W _fZǪq}<㎦Y(Q dH{()BR.l#R2 WHKehd?~=O*>Tx$R7eI=%,ٙqhDrxsSOyC{t'2a P8FRbM`^fwzSiH3(C'd X:[c|{/1 OQK`U(ޏ9Tx1SlvԒ?Q#w^kpPrmS|0jpxk1WgOk0O t%fhhˣ<Ow9A <1:S1sz4v1ϫ3:V ;cNJ9KB`k8y (_,lLnAR}h-ƼZ{x|"8XsmupLRHl%c_ula]nƯHU1p~0)5Ջ&{6 47z#B;Gݯx7@hTnn hJ~ݳE4b{Zn\7y{M>ڈF`Ŭ14^.Id4I}NgŃ}M-("Z!P ڕ1D$\!t*c)Xz> q߸inB?y> Ӑ?;زk F;i ,M}m$*N 9EnSt1$>>h6p㷍$NT{(ZIC S{@Kɮ$Oן5wlxУTߛ(m=~+ |zŪU\-H7W I4 jbr @EѝX7hX}5kcz=IB&̏ۻTO|H -ZR2F>*?f!~XJ۬$gHbfg,IA )l^ >[ F2>l4Fl~~OJοs'lYQ<d]\FOfyk8:Q$=QsN 'FcBH@&YI&NgM>:*IXF&,l4&8|#|;HV_BUg;ZAS\_wN?N"YcO CSqEM46|+_~ }_ -ZZBΫKḲڬ-kZ(FHl'Q[Eknb&vcH+wt1$F3!#2,#g>lSL |qj؈#-G -ĭEAԖ)>%/t[X򷚅)nr+&Bx%>4(N.ёEs_)Kz*XiM઻F!)se_vEHy~@66nGظ)S z@WxF(\X'hOqBb^9vշ*3/p)8z CeԞmIx %<:>&AG&v5)G;^PW@cˢK3VB Q5?=m:~\S<]1Z[*|(D,{|oosxScEQٯ=C}:1*33"s; )ߙ2E"( )w+ {ҩ"VO1,m*wR'u TݲF`oc;,@PBo{ހoۚtZP@~3uWK{y[_O(cʈ};ͬpA[BQq==41ohUwСx8 -; E¯=^Hx%CS;x -#4 4S|L{>-{LvE0:^ǭ/1υ9bzRgeHIҊ ݗX)< =1S]L T\kOQƋ'ͣ X -?\c{I.Ա4xq>V0ィO+BzG@:KO+z'D`֥iuaםd(r l͈RK^y $u]DyDD|$$X3 | UUd*%<ߦIsĭ"IY<{;{|!GͻS {) N<(  Zj{ "k)V#Ԅm7AlJW兗A>ª]$&GC|{t]T}G #b_u1L0_A=c.fWz@AcQ|=&{*u䯾AWOmo{`^X/䖚:;o/^`=ɿϪgwo3a!)?ؒ%eKlcfj^܎\ޛTjCE\@ - xHGb\A]?hM/ VDᣧ$ZT3MPkixZ I-oهSUC @rL_{|]3koNs%vXfk&+7W}ʌ{)M+1ueCA3꿱σ4AdQc b~L=,Ԑ %+n xlC{H)AҲ* 7qF6L_So܆fJ"F۟330Qvz,_l i@5_{gHP@8/Cn mkc$i \9!G*V@jlsh˓9ž<%~KoMZ4 ˎxU!O?:zmw=NfIM+ ; zפԢ]|M{rשRDI숁CZs~7I)Mp[jW=dNhtR^NUHϓb#qgksY51|:׉7uL2pyzA7Y֦Gx*@lT#A/>YjpjD˄3Kp#*'-d$!8>;P,m&hvuL ӚLK#y]DQnP-]'Z+BBQQEӘ#:"P:9\+Q -jL -yY%n"`wWOdq&w %Ca2'-q %>?SXy)!|كΚbq`8@w9Tٓk!2#}ň:F" KDp:8wI s=;qj:E莣X]ϲPlb*MMy=-g lN8=3̊*H|]luXkM*&Nz0iHzQvQȈ1~g2c̍-F)&E vZI/V:zMse ؑYwTi3:VH(l -i S/l+Rá%/2': aNhbdg9&qWD愠AA:? "LW8o5 vCFUn!Ȁ1zA/V{"Joy[ Z ?Zyuƹ84rpg7ѝ\ƕR"3Y5Xَ6N`Q.Q[yA9MΓ[d~J@1LZT S<ӹ=s"Z`4DSl͏'^CK,x"" TH~֢%}}%B -=E$GRsgI3 ܼ?EUI+>rPpkR Ӷ,{bv11WV4uz%+pNO_hWr^${@yHۖ;kRLd_Bj{+킛Zjlu/Inv4 endstream endobj 130 0 obj <>stream -hH@]@F2&'&J3B~Ʌjs#·'F??W_??oц%ڮD@P?`A,, a|~z|b',|rnMl 7L 0=ކTW#PrַFoaC9φaPhXӵ@;h1w&'ٙtz,]6s%lMByd=wHU_};᭬2-&_Mtbd8VO<_?-FÔ G]# #^{yV-;[H(4N#OB ,MΈ/_0tQd)AJH!Ljf= YKO]4Ϣ|*%{3##FꋞG  uU{}1y2,bJT!XM)=*3ghJr+ ۯTaaZŠ0qT(q'^E fϒ~)BnO67ncZwѣ^s~^X7]Ʌw *p EF{T[n7J\AEӆׄ8TibD(B_5MU3ff#L*+S:9ގ]2YIcJ~c;T$< ,? "6Hfҕ6;wZ\_c6e,. NM&5"5\!0Υtf6QH[ӳ##n<=1*[ޑ;8B>zߩ=Fׇý{mÖ**TC!{}kS"$3D;kyC`;$oꍯ \"bKɽ${FVe]@ I5 -G?%!j݄6-CA1 *7#rG Us o1`|^K;[ byʑ\NI;D9Be)5GQ`I\PV[G_P%S2Ƀ|$k5jyMj>FJE -r\ ;Ie'8bڕݲq*7ZsiYɝ6/cXdwK72(_{Ž$,W )ڲnT`@~;GYkA6gEƼ8)()Ȣ!Nscc)7z{{}1.u0(JF;Oƀa4l!xKNDMkey#}KĈMa,Kw ?S eZ&K{s4*qǒQ(9pӰyC4!X&5?OSSWx؇zRJ _|4TB!eV=iݗ\QȢ1bjcQZ%o6ؐ կKJ{zNnRQf4HEEJjF{"z д'''AL+Q90 =j%NjIɭBi%2|har]ߘES]:N})T,GT fIZ苰?*5P.blUDesBro ̩?4jB%<ji" e=%2Rt7; 'K. Wy.%=,b0-M./xԄbMGf8˚ױ?RM?Sr#0 9Dfzе]L$HeX6lR뒯u@xyvS16Ud{?QdJ$S3^<٫ЯsNKуM -BӔq )~bz+E>4z$2);̼׾( 6zOo@Si)c֥魘qM5Cͪ}?oNP앐h@Z0SI,ҙm-ilM:E4̗]{9:NdFhvt-[ d_ cJRVɱ6`겄;f+mv?}v;aUr P]mEN#q<89MQAbf0[ᄰh0 '&Y-Wʼ/DTǸJ*,ͽQc3dm-^]JwZS{nv. &5TOL(+սcasXQrx^)+|[?=P'9!SvPngaNAX%Xdޗ\l~4 +ʾw7 - - ]E]l$,QBP^;, IbȪ%f.I8OLM`,gusBj,);. /챀-w7<:m I!>ףEЌ񈗋C!wsCM|[G6rQKja(\0;җ:k>q$(7)%xg98E9_mr^WJtFQ̘ES!RZgZ(TX‰1LR*aϩ;jSѴIea0(Ux T+ͬ:6,]0IIbs#2d-Y'&3 'a){VLIX(;udmndL:_ۑ-쌦vF+%OH1(QlEnh-* -qxV:B2P4ѽH ~>:< A]_d1E )xhHmPΤ=܋94Y2/``kJYH!ω6RSj:Cl$C "ӽϦXRI\؆F @NOkfX-0Ε=tU|=XBzEX}ЎԦ7g;'Gƪz5`ɛ$V8cz,4 UD0981bbpj#_uL!3ЎJ䝞 C|=kl1y5Sg#g#,O/N:JהkEô^#mmݚϪƹ9ĻJѯN_yPP( )U$E5V˯/1/;+U{5x:T77 WDsm.|; G񭭜%%V -GM\B>K1T=\  41J "b#lƱYBQ 2hUS_un:a9Ste? An^5ͬhٝRBq`~BwuA6 р(g{@{MU8y9dvbjHKT++y/lkDg%iNUE&sɆv3&2["tfYֶɍ12cP`eS]!˜n;n-M'NL4 -"2 ɩ7%ygpV'[Q!_;y0nG}*>X{Ox KlC>̠ WC&YL,L)%1^2Fezd%\EN^Q<%I 3QLW2 Chʳ"k> +7 'ao"X#1-<_~-]E))<>c?NJ )L2ݠm@~dLY" Ԙ~N}T-JeC H:?O+&)R("Kg?)r K) 83W"1)Y\̓m[ўft^c<Ї$^`l,ϳhe8vHRh'>$.y/H6Pa&IJdf{oPJ/gt]>:PBII%ʈigJ=ǷW(,2JC~GA?C>UǢ!U Xp֡5QT1F]oA TR=gB8 B -,]t&} -8hick~ҵ_{a?#?~qj>: -~{Nl[.K :.kMN!>ȗ([/ %f-ѓWa(4 ja\G7ah7n*A_"#qz@-73ECP7Pr~wg:K& cM40Lc%m]r'axP">32_w CS/gk/\3&rj(d%R^ -~;$;++=V5̚Ef {y8K.եuW6*垯#/uPʊu(Ih"j[ʢ<8?%`!E|UQLKqR^,갡LF*8AWaL(KlXВRAr{C8j*!JҬEЇ•B4d"̅ aExZ@D/˙4HZqbJāOb&zH%i$ ٫aҢWmPUaf"d)OW"8mHj;d!jf‚%kG}Ru?d FSWs[+r }:}+:(p.!::#[˝44#^TR$ZoMX&(O&x9o2ݯ=ӈr2Ink ˌM 14y@6j,4Yt],tE2uNN=ۖ,N6fpv;;)jB}8cFQEUdGPR8kx=ht8:yz4XVWyAz<&-bzQ[6Ӭb/wzB* !ELOZlԪU1 򛤲wjWm10&mI2[|vܨ*+}{$N4G=D֓)a/J;䉸ΟnVHף^DI jg:{|+==xK-)8X&'+ط[)g .K繲GN D_:ȗ׌_;1BAIfJ@Sq"y>]iG;qH#mh޾bY1 pI.`{$$Cg$Ptd`})XnP#6qBz+ $<ȌRX~j]Yb FϦR+wC3" -4Te0j#`ԽRT8 ^+PEiL5Db7>w=R=iWH @eȅ P.LDs߁0#L JW)F-VX!_C+=!!0*"Ѓ&[m"N^)qEM{5{sJtfkUr5<_H2Yz<{ -gq;\KΘ5G%kN [R3k/uF=1S Qt\h<,[{4HlҐg~;)XngI"E O_ݪ5, PG ՈVް~ǯOiKѵ~?ſ$Ň\rVk {oƯ4dnw{/P3/Q4VŬ#'7wD@,*NhG%Nh - 'ayG&vEs*/NVR`t7V˓YAzu!>шWO-E -jTG<6P'$u,RpT.´s&WrIeB=S΢!8`{ @J{r_NhfHbe3O?VR -.^3)&Ͽ׻\"Վt)%"ƌ C)ESם1Hԧ2%OhK FC_eRfui|݈sb\w(ck>^ɻBGPt[C̯Aጼ,C=| |ićF<5*QƸ*J$yvSLTiQȍ L|3XPM {ȇ؁:*+i h)ֽVfӾ>=k.56(^-F -ML0V"%,%~ XhҀdq.}wj=1b#t6ioq܁gIT7m<[?4FH3"]H B}i #!Nq,yP9Kf)ܚ1dAX!\ܞromGjZZ]UaLH+[m֫ݥ+.󨘡UXM4<qߊ'~`ԫlخtcKVY^/idB*_pYMἮ |<'q0L }CaJ*WbVbf;]EۋƝ';YEP=4G{5j:9:ԓkpEM$ @;h4nF]#l?,A`I=dL嫨$?Cƭq ; 5ቸ ^aX}]TVg٢ L9Z0;%10)JG"] lewp#S&H JVI޸[RxUm]Q"^{^ދ (+?$cFK'r9&75]Ur* [9_  KBK{QC9._Vz3?^( YG0_Fj=K<51bJw -t4d~a`XòS+ bϤ藶A;ڡ%6r -W<م*w̏+O???O_oon~?/hzZPK:S*'㊆;%YS,qx7zU1>@$~٣*c%]ƚ -Ֆ`(E uO# f(DPmJoA0peE`fO1S".C4Ś.F imhA5 63é?Lث|أ8=JDvH9ȏ9z9Yh!`F\,L$3=xx-{,֘,fsI=%@r~(VPAHefc -1 FqqPؓX>I-^2Q,1R 6DVb>NjJSbΉSB%YAVsia]}3dUnwL!yO)?n'cC'ov NDk֞ao१N -RT^wEDU̍9h/S˵WJ7ӧ[a+B"] 5gBj}#b/wZLKJ@crBK.r=[rE>ӿuZn;aw)WYBZjS D8$ ;ѫj#~Mpwگ +ꞧmYb+a4d+3Nʜg z-Qqfrv4 -RY0)xyE1`~ J7Ry!EnÍf -E!vډFl ݹ^`w'u{$ɘzEs6pb5}296+81V|oQ9hd﵃%y Na T ݁ԫ^)h)g z =ukC[پCs(ruH1d?aVjRE(a!1 ʛHՄ]Ay(^|!<1{4vrpR{oS Ӛv4cbI8Q2 -jI@3/E{H Akg}~yRZµAN [(3HW QЭ-$VjM!n~wY<ǟH~!\IJS+s -9WDI -zCÃq4CQ4p7y(8i@,!݈H#qBѝ󘻻h6:/}T;`ӐHG1No-)h'>2)#db8Q,&ul`sS-2n;bx9Xr|[( 91#BN{}+:$;ѣXT\c#`M7OWrYqG[ЋiꁹzVC2[CDW=Fqf -Q5JZ^ ywiĺTq~zN?M -aY(&ۦ./&HnS:tGUמ=,8_yTR 68Oj1lS ]h|#MA4shhb#E-WAZVۏ`4?AU-mD.P0Rt!Gٗ|7!0mW(sg61mDȞ,[?a6W܃J -5(SqxUo2GN#XZ^%dj#[ɏsagSB^-|~)V @GzAgS%t|'b(oP -6wA~xw֜itZ-gҮLd-I bq]IFԒw3%x9}P?#ǟϕ@?ndH kwW/ -/DZPhjCQJ} \tl0S Su@JE6a<=oױ'z -jXo2о8F常ʢ -Tp@ql~P1g1"Y:\ ӠyhP$vV<2QuΔ_= litL Lw9sҩzXK!LfOm.T/7VJx5{Q -IaK}$4E{^9ˆ|jܾ9ڻhY5{jÊdkں+ O )L,0tf[Z)j_W_61kAiȢ(&o:{W=7-`pir] Ӑ&-Hxy oqk]Jb,ƕ{y;a5lR1)^ ˟nyH[̣$lOGb]p<Ŗ=|l;q_`L=12%mE7[> ( RMK4@$,ju/,D:1? 8'VUkPus*묂+TC?!]>;wby[4ev6vuA@'Ii81 f;ƛЄaJzd__Jc[Zl$4{ W3ds(\ίA(an+_ iQent_57HV,~y _l|ܷƫ;GZcwX׳*UAZuHIiK.Ťy}ǘ?UD1?f3ay#uҐk V#PhF;E'1A\.+5سxr*"X5< -WH R_BF{bJ=OÝSt"I侕y;jOg68mƔ!3w%y0MWjxڥl{.61(*tLDZZ\K<^㠶jˈn?'@37s UƳS^*vdr - ^ZkC^y6рy,IX7LPؚ'L+f1Z'+PXA^2T)}7(БH2_[]/ߑɹiK 9D*ֈtRBC*fEs{{!ݽA| \8hJϑ|Gg]eFY6L׀w -–dE-NVH"B$m˓*lE!0l}a[WKoT)#Tz^8 4>-y^G}jW}r__~;y5Z8X7$Ϯ`سWQ' lĜB 5Oc&)d@V&6PBnY6#; VcnFDQȁ xo -yj/pou!I+IMߧ&AeFj]԰ -Q~%](!7J;]Py-H{ʓg)6ׄP  I2&GJ7G*ٴ,4o=dcow$iUٶ>t REsnReB:Ϥ(O^U њPy.B zX0EK =1= I!ʬ޿.Z^Yy;ɰcrj聣 )@j&V7%@W6T>2Uԑ -,GՐ/K|:Փ*z @iy{~^3ҩ` w掌{Z瞐j+%_HBQS77,I(ʧ1D-}o˪0H~,i.kfxoHv-[/**%Ӆs5U{ 7.5%W"^u*~E/e9-O$7MekV\^`9YHBV>4JyGA>?ۭt&H *]]Y藍Pq͊q"RS"׿AL2EhѾ—@풡ߎr;pa1wBX7 -._{z" -v<ı+0 )3 ׃Z|oS)R)[ xj1L``5Q]Ԕz*He w -IWGhq|܏:MQߨoӃTKD[bJ = %tɶ*1:w RI=H;RH@ֽKs:&aqF8@; ::H@{ycy*w㈉uRktuyB 9c6jsˊ%wCnPôI/gI'=w>) %IJzSy]u@M@[,vX`Mo[^% <: MksfI-P]u3>솁*3E] 1ptHK bgKU׿1Q>,1"8@VB0əaaKm&d:j_*]"]1Ol},6\Kߜ"u܏*LR:K|& 3s$3LbM?gJebM4#[lWS! @(kڗƕB* jÊ/"^rŴGAȾAظÃ`0[iTeC]bNrPf#KXr][S꧓KѵrN#YZ|F&!;BdHO=^=c:@-ogziF@Pf(ڲrc //Q[y1W6I -4].weu9Ò!-S#(ȻٴN$x pjLMsS]M.XpB8F2_Ti(A5;a`+fJp$Gu',bqŷybU -( ž]:IXѵp?dwd /vD8=!@jIbftԙeM/ؘ3%AL/ -z*)&V.?Y^+1AP67GEن5,hك3֫褜&\oMY3Wܗ1j궬p/M78傍T$:*BHb/3oG70R§ç7/;XH{$ ^r]zHcn_0Em4i%%'1mA/TEF*"? @5;>}O5n䕨ңKNQKB0%ZK.<#&!;o?"9>L\ -J@#H$ bZܭoy2<$ 3b h -6Oc`Qޱ9%i@05lE+mbP#oCw1BnLaݙ@N - nVPL`(u5O&=ȓ!gRݭW H邔3;S/iY Z?B.ۭ5Ij%tˬ6{DElz$eJ0WaۃcHMC[1UYz4hF eV6:]pKYܕ -nn 0 hܟΨ4s[ ZLUD\8-vMYzX0HVwA/RZ`Aʂ={]=`!Wgqf\BpĦ^*3-zKJ)HC8Jnm8^Ё`}a [#Ƨ) [`;#_>Lçlbw![`,7 y$JQ& $hoQt" -P%OwD{X`H18"K|TeHϴ -#E]gM# H*sbVQ[ 7杛@|OƆESʬ6Wy4fnzQL}$f[^dC_EV1{ 6.L!̫(5X1h:%Fb9*ڷ<Py#u碼).ϯ"j%#~'/`S Y4PUvI|RL ػɰc* 4! 7"ȊR6%H2_ %/RcnH( -( >ȊڮSs:j*H={8 9 ٕ%WyuN |9,r)Cr VSx!ڇ7y۸MUܟ@oڈj[Ǖs KuŌJxF\kFFݬ%Xf rEacI -bƯ>'3Spm}d !&vrgZ/!û(-]Wɣj#cPfwi=:%&EQhQ\mKnl=6K]uR҆M` !VPۇGfib=X“p%1ٹ#\ ViO -!v̔eG| +X;~)QB}1`•SmO_$, UuzoT=Fno';>=6ՆGFFRX4%ېDlx!q:4D6+Nn)H%nL>DC`aɖ <.]V`БjXC2I> }vE?@}@k`q,UzplZʳ&nH<@w3t `Cc>$L.$|(sD/#!yÒ -"kLD#Lؿʌs@2RRjl%!loG|bC u+j]$v/V]ʺsf~L5=X{LR$^_p}NV5GRܥcߏ= L.ں#RD8 j)bj'݆kX9k6 "T/,6?*T._a; չMhl#Դe; f LęppR\""+gB,gw̑>}no|wll41o39IF'.e#+QsxHX7]4}gEa.HU$+ rs][ُ͂]7 +GCD-׭aJ7ԏ$aQ K|YrjB|4OT:c%R&z=k4Bz2:R˨.pOfPA A9lp_#%ߢ!VSlޕ.yh*) cJ)_Ҝ4LuJ ajE.;"LhGrAźv`+O%G4LQ(uI'_E.y1:XTGDV3hlHO~\[;e["Xt\TJD; "-L$p%^CSfb~'# y;&!F+9<o `R34&թN]a.fC3ؽuϐ3.Da&CiH?VIo-:4r'$y4$|3f*/tsD*:>> jFXP*.N}`6Q,J_<-i.e蕴Y&& /c缆xabXt]m2Yxmyָ:an \!%~MhN ܔzb U*I+kvdŠ'$E \J8,k!Ś]+ \c !A4㢦,cjpcS hLl*$r qdI 5iCͰkˡ1^=_b -O@ƀ\ 2!%1΀jQ蹄ૢ $ -8W畎\m[gdPȩ;CO3b!8WB)f`ۻO4NuHaUJEq7pbԐau nNPcyԭ| c&(e\"=o bڼ 1D8 -6yQys֔ X="M!ʥ %=&Xv(th8-PCfWC;ߤ7 -KG*>C rzuU8y):Xzvh]QUeⅷvV% +IA[K{r#~U<atTQZ*- L(Dׄb;\1;}Lh(4(KP -5cRyQvQqa>r@{F+5Y8޼$Db9g T>ejp̀g X5 d k8C)mZ& R^`ǩ;h>' -^0(`*E JC~[VQ9+(J(&}DVt,ѥOd!J>pvC 1!TJ]1/ʒcW{8CكOn6<=j6 R ,wyTn5 -dFDF0ŵޟ&F=Rmb -D(0[v8lQ8p檱A=KXij@):A%VEJe&GРNf<\=g:W}4OgBT/' ;ĸΚZQϑ%^2E: y'Ir+n6-8C_:}!gɍl//̳8IS~}w9&ḉ&~,ֳlChNXޓӕÄfPQǃWYi&fS]gJjbOedz&FEzaҦfw8p@t=+}O6/MM+ŐrP9)iPfD׀t^$N~d`Ļ#;Y -GT3@U≴@*TY1kɴM#|oҴ>@ %"HP# c&]@@(N˿F 'w^;ʣ#j,fd|׉To7{=fW{p"[pf>\!|/-''k -fy9^3e24kf %ck8 OT)EA!naALUBϕ~ &/ '|i$F@9Yi~4M gEן RHr׶ $ -QE(GGP%ST*20PG-"j-Z~JҀvYY󸮤##EZ;ȖaH3f Q $*_p:P"3t$*h Pa6@g4=#K{pwR~gofWB-=)v=+/5 f$1H|4jT7vp3 \|vjaXLVb~a T~1p*h;ط=}2Rݩ#A>[wmf ԞcJyf EFyDinwd,\dtD;+AxJނ l6Ķ={3#ia%3GHZźEzu+]quzYbWq8"Y8O/bmV3$E -Rc,UԱGI:B<\?[hRkL{7$~6pO7Pܛ6r)$Q@ +j!fܾXaYw>QLAYui"99K #8ˑ$+A:s$ - -S=v/ }p1@c[\4y z7tV - gMn.rIPSPB`g&u"hon@LToc[ĭ,j -+Ygx?TۈhB^7I{ ;ͧ%J@2EC 8U^2$tVk? vō+[-/|U }*o=L82v,;^L!RZ5Vr]PGSIaJEΨG(q -v#p<,O1xL_nz̓/kOMUY.+~d»4awʚL:> {י"7k@C{׌=DH$`W \x\3ǔA21'Y9HMHQꦉ4e.|PlV#< rеEYt!XxR<58? –彇0Ns6{||^A0QE\B8Z6S7K|JN;H )ΏXT˃6OD|Iz`bL^u~|j-M6P’5bf1fHA n(r7I4o~\ HRjN>tօE:Dp;)bY=ELLn(y9Cu%q6.E2TISwPUc Bw=j8Rϝ{AI??n .1|nx&8>k816Q8F15yoӨ-%K>28jw({}U<'/_͟guאb LN.*m]"-K3g E.@BP[ ,9T(pJO_ -9'<]sFcD"L=Ӕ4s#LvA{z{ɧ8Kݻ}F@`!{E`xXHS9:# -b5Ȕs5d.LI7f4(]~͛(+g 5u#ǟ 4Ȕi+ .7@y6.\Jv̊[߳}; n]GR`u"C@C8.ߎ'X#Wh)Q/gRuvzǘ_-r 6/;qQCUzęvZ0$ayL[ E" F7mQ;B1PZ aڴ"j.a M؈ O6(3+2y~I5r*}z-AcKa92z@VTԡ9_3AW9㬅%LF{셞Lxb7!*t.fs;Yӽuq{ DvgX<ȏ#}(3dK@b4S㞃Z?5+a oG=.=: HW5 {|9:zpI/b#T`*VaBYqG{}%;ټTf$5-^?MLps=;{^"LXY >d~{(,lm:^mE/5J|eZT8uewh$ )1쓎rw<~4c&?xMQO{״xoy?7AD .%9uLȖo{Wa2^YEI&")YtD#O=ϒqbZh*+l=7ŤugIK,FF<Æ|B= j0{؎v?Rz^C$)pC1AYEnpRD8Qi,<- :Zg"Ť@&("nr/e=ބ퇾 (GDH CdG}\ -3]ضN;ẗ4a>aB̧Sͅ_S~G=)R1Ө- -R(~`fw{,5Bҙ˳^' oC)BKɬ-L0㙔L顖jC57Wlw7NUs?i5̬mǁ(1`׽T -Qfz<߉ԣ|/M>6416lBʾJH?$Ef*b:oY:+|70nVsYYC6=] ?zDqr)OyI[&@7P*h>d)=d˓:NFV+ܹA)KQX$c.B'HHc޷@De{Q&+Df`@h |#rNMx3w5c.FO . mX{)o/L]٩ӉM1aLaR3zG=1MHGLi4>һ2$?/dq;X0 R%r{Ӽ#i27F0\(7-xE;)!=>8(Ϣo(t4y.iϫda&ᅑU.Gyυ A}x,聏9y9ear!|漜n!lz1(wTpUewi?_.%*E)W NEAv[Fk!br|I fkZUwJ(C" x]$g8ҘJf5vXNVyx 8BR 02z v[WVp_%h܅c'>¢;ܗGnJw4zB"6"h:_ڥ:! یV ّ1 o+c{M}Z3w-]B? jr!,R=nTƎ m&T(p"QMY%a#;M%s8ǡq~@hσwLh7_gh=)R@YĆ"O>XϠS=u3z]p¸a@VX'TqrB/9ͨs 6z;G(e1z^g0F9\'j2=Ѡd+%Ri~tglT9 -]bH GϢ J+G8콝.@)T J@NLP\֭B'=䙫ψWfC𤸂vd -;<cME*QYI@K+qeg7nw!FG`XJ:gL1BG(+ nh!&;zy Y4E<+t4xgC~:||U6V5_ġbW(4 C="^Jb="Hڏ;L LDKcM1B " 77`k1pA_qִ;mEtԹ;*pCD~q$Jһ|٘D蒟G ,?&:Qd|>T?3# Qɗ^ +=@ȂP<|[1؉K-A00O;Hl̓"@{7JyDf*{BV Dji.hc tW l)4bg(z^ϡ0g֨{yڊ5 .:w2 Za2FH 8PZ9 ǎMtDǸ]ERvf" .truJ"N+^TwbrtgL4}BYqv#L;"no  Ձ]m*@:D=ڻrN錛~(q- -NZ6<҄q}GZp -Q!: :ESP]} Y)L k= C@l{hLާ`.a_*B7y<{k=rMP= ~:ЊimeϊK= ^3 {M9Ue1Pz[B|^b k_z ~s_v-=~ tg%&1z˛Upn8C pOi,M40R]0oՅ̯P;#{ZGA7夥_ cSB~3Pje%ڸ{i8 W83{/~?bG?TM" 7B0l|ּIE#Wj|rC=b?3u:@fFcgUU|}}R@>*4os>W} HNvAjCȝCm2gҟˀ(L~jY䋭0-غ!¡;!'"yqӕ)]@oH-, S;R,xD#I>oY,4b1w`%; |=ildƞ`a^XvIŬmП0;hc>Jke7 OO`18 -ξt2\25依iod0=B/Dw䲚zL`2& #Ν\O"#soZf]cŨXs>A -ZP< -8aLϳ${pazL/TƱK -aVCc70YM2 Ea6],ڤj,#gP;E\861dMP cz<:KK鉃ҋO6Rfg[Re$̌fǂXNzhBYBb/GXtuh7 [6@J. א|̄ ɀ7=|o~nrqB)BurF2%دSv™R9;0o@H@l"uSHPZ_w%@{HmX;^P?)C̴# 1j`U4lpL0G]0@B,%&9 8+r -fa߇?UtNחRXT;e!6Nx0t?ҥ8\74?fnsSqbmFZ ,f5qU|UWǫQx:dZ'jvџ sq49Ī^I4WCD'|}B40vϭG@ޱFguhQ1䮴D u))1^ynQE^<[Y?_`,뢕|^ p^r[z p1Ś H(RޑP7 $.=$1:*P,rjÇP -4PӆGO.J6'^;Կ5eK(֭}mdZ -H;VϭjpcAOH̏}/{# Apl(84^ȜJ7'0<4tLm&<Æ)bO t8jB=_IF9?)v EݐSams9IᐴY)e7 -80_5p :#"m,ABCU6Wn5rj PCK&L|j ϱ?JW%c Mˈ3/7GTg_\OmS&PH h,MEph1NMRN=q>Դ'ICPzSI"ww3ԠܴfR4`Ls4ISu'gbfR%'sl\f5#)>ݨ3w;(ѵ׳pR,{t*u|&R\7]g%Jl,F@tnC0P?@EN>3MB@t ZjM}LBw;q>=(췗f75 E]y$CO:Oى фjO"27-r+T9  &`1qg尩ljeNBk\b窢}5z}D92K7 lC;w4ĸ+H׿9 yW ;,,"X^Nmv;UyzrЭ#Qd U9#1icyFfHnפbMbz{y.xSB#V12K{*sCDg 1Xaft}k{qt~w1F`D`B([Wii&3sJy~ . -;Rf!Jq6s/XgZ$. 8 dkoͣyh+0@ D߱ e *EQw-{jxh@L߯F|J?]2`^{$(ԟpbސ_yW Iуضefog^M8mEq2Gyn>DjJ*JXqI=z)h-eEXU;±ek-:+\y? r8J P^kg pBF<j2?1HP@-IZ|ٽֱ$YoAyc_46|[y=dkGc'-Ǩt>{P5Πq+(E&?w(е+o%#oM7DKCT cbg.AB'"CsϐC‘aIЕի|To?8aȫV(2P%.ȏ}{Osj{@T6QD -mL{r]l!X rzS AwU3۰{Ϙpл߯zd -8gi&R=Z~>}-E@qΙE۹퀀yu7 oUab֎p*vG*-lq&=8+pfԍSM2&<XAMip[@[\qF؀)vhe#nf47\u&&ކ9+$%(~VA% K5=ԋ)IAN+3m(cCK+P'A97dX i4F`DUf?0#:W<< -k!쀶ol^ccQ+vLwz80=УlLvI8'Pc?a/ HԳGyQ `a˚)W3Z6.#N WE2B4iܫc 'jsH6v ʂ6 -*伽2R) *&İrA% J/bV,R"-$Wyy&VոGr1i}7[/k'w( OvRztKPa5ZnC "sBxkUܿ&dUPbY%Y‡B8M˩lwO#{+b/[߹Gy9,P4Ż`pHh1)#tOH8U0h314rv̲BLP2H(-4O؉T\ZRPVrN..?iNDAaP@ݖ'Sʏ'w">.G%Q(uC턗h'ījsY-#4gVO,CgX́$"I83$ -_l`f0+խ4`+j!|:Q4o ?~>60˺iYxɐY5x/QIcALeQ&<;}=a|Ÿ<7 :b#?i쇜4n% ݮ1K$%Jڛn/uiQ" \rXl>j?Dm?(y3"v8A<5ޒDFqLSڹڸ`IORyA5Y`FTD2$'#5Ò:J'4AcuŔ(BSG a/QA\IGaS#<%:0O+x;@ln˞@گF"~ 84! b;_L˼{p~Vi5d+*``s~ms&CG" K?$`u"--E нgakO@HajrUHyn:ѧʑF8T\J0O,Bn#:5u) 0T \l|RIꑐ;W`GЃUL5gB|;СϣhXom@d~OѮbLR(5qu|Z(~9Va?=PX+5FٞkZXX }ppS|*@/OC<%P<;6сtmٺ%݉9"h*M;'E//F,_ -M5 }WYS2bYԵe/,~UU$220B<ڞ[2EVKw*YȞ^|0v8EjtXI$՛E Ġy9q8%Ha0A - ^T0N)xC -hCd0[c=D^O}gq?n ?#1͓2$` -`. Qo~ľz,>*`qxŵJ 6ֿуdmٖUvΖdJ|UEM<\Sʈq6u*Ёvsؗe-WXj=2[P}m`4;ez)7˭}>Bakc EY;4ID~D>"!2}Bݟjǩ 4Y:]~.~eoߤy+!v2R~ת[pzߙp +`Io_^hr 0vIW&eÃ"jyBbHzSyppu8{>͔ za+=zΣƃ595Ƞ -m%L?.]ӈZѮ@ V8F)$/p% G}It︬"uЃk1/9}=Q䉒'7S-w{BTpPvڥ]%xWU(~s Xh$PhIc]y*w -fb8/󕻽o%DJjn YvExCr39.}9gf&Wt R{L&XQ_gUXLg_\`sKC\#?rDSS$^ʨu -8i)FHa2δ%-r"a4@.CH]!0qҬQHi1, (X5](bJEڟ>&=aK\!d{qp"Y=5]>#?0z!.6F*J>)e]Xa&- aM`Z3E:{g,bP*huCqN&hJ.H fpJJ#AFla`g9a )!Tq4~޾>GI,:eOugCVmK:43\e4o.u_-I$vqK9#(C  -t!hh52;`7!%TXV|,3cXڱҎs&mxEe2==Q鞱ZtilFbtKDXOp4.~ZDL=zq]y)WN"ddԒV}at@a= 'G(m~왘_8LNj4&B;F4Dqs)9t zAV.8Z͜=XKZw"v2Ҏ2O:IGZ։9 -,Zm>H̘l<dd6)c)(DR9-G6&nP }_ CQ) }-c'~lZ__QGhsZ{L[xåpbE:g1^&~j`qySL}RxXNr?zQᦗ]`&J3J2S>.0pƞQ]؀8S`NjDԦ*ѻSaSXGR; zx}MG -@H3pBU(!C,{_' `q:۷m9$7<_ce lpqLuXs+80zhVwВ~)ƥǙ -jX+(+Et~ُE"Lc!Ȱ*젱C-RO\r]xf"< ;1Z:2#<\Cֈ%ѺJ RN1K63ho:3j%ɰ05ɀ#[moQmbK5 -mAbAz 6.f29CiFM-zHVZ!`@uco"@HS{Vq5XJ[HGa/raLۨ k>St\CWar -xvarxu%W -B\c18E`gsجa-pbI!=JāgԦ_wFa*ŕs8=̆:ݫh*  G2Mn\nh$\OY׎gNׁy!êoaY^P -"&wN%TwxUۻԈnlK_k riCyf)8yE,TQ. -POsi>?k=>(Ɍ6t~Z6<TS 2գf}Rގb@wgd -?`3WU톨(# |T0e3et%e@+BD$ ՒbvH32]zS8Cn/,n) - -Mgcľ0ѯHD(^P̘MCR%v:t -G~Ȩ:WG1jQF9nU裪vBVK9#rͬQ|+J U&YV4ȹE,?p<П|g" ^8"  5oLA-2Q; pXwÈC$.Y$%QJ5`Zgc{N[_[a [{MnﵡY^3 zM1 -][TyO^#C{jBϟ]#~ Lb禙1kX(1ة3JL5uzɥ5aъe=[T, O<.yD -5WF ϾdmXɐʆz b3 &Q* -ţŵP@+$*Nib{[ -DIw^3">GApz?O_VP!xTױ Wřfe727 z` !*vN{=FrE -@i){@$:Plo?X 7O -8"G[±#JArf{X{vO~TTUTF=k%&^$ӑD rFY؇ ,U^ Fp䖜m - @g+X aSpyZhkK{&%Pp眅*dd9Cv{RC+H?dEfXaw7^tr A 4(րs*CW֑$ -A13!6Gi)ȦCTrOIHXߚh AȄl+|;8c2G;="<[/2>^a塶slxK Zhj( \;=|IホB{h@H4ӵGf *59W\i0R=M24དྷ(q h4amfƹZ -TR_1I{_F7S- !\>jrЦnᾮ2CI?b@ cheu5u"G/];ąк% 0*-E(OfU@ -)_4 >~FK35W"?thdzgb31â-DyrQP( ]/ 2f@l8X&$UI$sM7H- U\%S~hrRY{聣"8n%PM>z%1K}t5ɚFlV;>Bu촔}&2 accÅވJd2T#`85emh*Mn'C6צ+964ޟ/Gz{_jn$ @p|F8%gn[]>j+^^~_bqT%<[(^G!ZSssRV YB#_{04$s:h)y͆"#j4ts6p6ؿ|4z4aeAQd WjcN#fњM -ВɾkÚu.Qp *#l=ʅYu7ҘݼϺ )8;P`7,;Fn*mcõjapұSxis -cFF1Os-T|1{ԩ$uy$QzZ6P(C{GKP $ڼީ< .a2 -^q/330Vz|PF7F  -aP6Y"S>-LIK PJw!q`mAw -844-=T :bKk\2|*]e3JjBU9yd;+9+)9{pdSiVΟ=&x26.0O9P>"!Ef5}z(JVx"@:yo_'CmCx\JtZEKs =hu4 Owꅇ.\%F>Q`#>rY޽q|A -=TO1b$vrT4iVKtN#7>ixw36qGܶY||}Ru$~FUX|q7L\V͢g+/n%'dƫ1څMFR-`CMx?#7ѓ##*!+@['ܥ3b=(dv:S!3?䒔囹֩9=< _Gpuv|t4EYn((pJ X=ycnXKBIYVGk n8W qq! |ϒ qS[J#@QY'R5YEJCHPbC4({.0oϷ1tS?دx5$g9! -;#D9כZZپB}oJ'B%,P Q~gҔ)ڨ^xu\:Dq=BSY!lXakȺ>8~u.jŭ8Oel*cke!Z|ciEc^^f5hAP}dnC<£es;ŠhC, 9dRBIj8 `D4LӏWuEvȻWLoH\8Y F8C~>o{>MR>s`dP!5dHA|//TC9{gǛjW'/`m}CB S2t Bъ1,Qy2|; 0w׎hK3~͡ @%q޸B\)XE`+!pi7|7n#`Bj y !nM16OI?!6LW\OLTK %RK+~ - 2CO$#`}5~4<N~qsœ%S"52 )WZ.}(/i[+;>_B#tY[ ˹;F&eiU2S.ZtX`*Bs͂"@1@G -z#輼"\?'W,aC6__o?Co~7ݧ=+¿Z#=fLxᡰo CUzR59) j̡C-{PAe# }Kj,0؏BX 6Krw~5~\AIkHcE%~P5wj ch_b{^dQH'Goe=`֡wdc~Zy!>դQξ-ZjфNWjبb EF@#zsP(9ko1 uB98 (@ W)C$~RN Ke>z*dD2^L7 a -Tqv{;ڡ,{:`U;hPɼFUpli;aYU%]/ڛo\6֐wPB@Op |(~>q^ozpN%SA1Pe1s5 -?b[0\]uBaQC7*n -POrˎ: $GzӲ2 -.c19SFi%zP~ű%xWtג9!U*!+HM]JȤw&"S"0fP{0@|;3Oi1rM8tBȣ5 - pfSUY qUw6gݫR>Gi@,9~0fzrY~袠MQ,+F -#A[8z<pʸ\XH{&~6+7BH> ^ߜW!@mnqA=`jAK@*NCbu򄌢ᖜ0: U?{" ,-2=H?fB gG4RD6{1N=RPLp^=S8<lSvg"&0<$ȟPnj[Ou F,qv">d OtBQ/+GP?H`RU'tꔔX"Xb>?Ww=qibKﳧɽMY?ǵ:SfW;-ap`q^kp%wkc8g7r 0'/?PNq;SpQ%2iW-qJ#֢s+xtQDx+*2Y7\`D%ۤ?]ACN,B5|s؃Ue|K%j B>u]aռNK麬rZ{= pm'VZ(;G <)_sƷ3ې\z\@dv2YSאNUsYr7~L+~q-Pqįy"Zψd+8~t|5v$㽇qwپjP\IZLbX;`&<$ Ƚ5Sev>ck]xy )RlHjqXp -pt?d}'aAO1Wq ~.X6ֶJozlZkp^CGĪWe^04oc\Ps= q=z?j:(2>: X48y>zQfM)x06hQj͗^ -Hk{=;#xkš{.9S`yMBm9la1=IR^gIn=z1vX)У@©)kXAdНh"hw` -|BJp'f>:7"g[uu_w]|>{9zJqL}yR~Ӯ|R-11G߻įib:~k$-NW( -,fq͕H~cFѼW% KI yLZ(ni#]{V=:{DvOљtmBsK|̞j7Z)^h2L c*B v-Lq;勃鮺r}LL0HH;VسG+va9tԇ`4zlQů#҄Kgg[sx\ ky C'ɮx$|hT Ka -=jYR##A^ ޑi9҈QoV֛)K#زC$ߪo)3p^]O->{|H*W֫^$ػt!4®۟Vbw>FnǞ^D,T=ZW #xqcI(옺$ȾI|Ń3+ffJzmބF2.;zJnJ`p9#ӊ#VtRdт^-pCR7g~؁Q" bCDXO,^xh [U  -`. 5D - pTLDɶ8"0c;Ce]Mr9>eڌW[R9au{חu/jfm{Ø U ?}RQ.A(9=t;@|#PZb22emq<̏,yŮY PÓrg-!Ԭ1l6bgQtgBndYPD"<xfY.3EF]mT9ˢ2zwR^o=L#iz󞉭;vj\?q^]pwi]7%Gy+ #rS{{^kNv#Ez q4IG i3H.NZ]tCREYգvL6$Mj^TH@+0Ȧ4lͿ&Uge>np oBb3{<<eK4hQwVٌp@gb{x'iqr՛!x'8[r7F#d3XBWEAGU{Vg~1 -23"+d(.[SDDA@e{F -.%= - $'hĈ2GAPWĬ S JOm[ -Ԉ't\c[0%DYՀ44 -vD3pK4(*N -bA{f3oyT:SG>ד{Qoao0 C {Oq`qJ-чx9 -CRPS%Uze=$mǮ#h܉> Ti4& Hio jуmS@cvLqKQQגN;0CN1zPO+aN$`24__! a%[G`~n(NW[;ݫiS yQN%sm3CŅ>@&"߮/( -L1ҎlpTCG<4{E QYvX ўrRC zGD&L1)Fc}Rw2oDMS: ɇ]@yX񟽨e4@ΞX3d+ qShw8(g/Du l6bl^QZgfTәVtLZUC(Yj؏ڃvWh,!vO]5+$eך%{ij3M`hpVJ4 &w1#_& $vZy.rq4tsXԬ4o1k^ET{D%y/O%XIlnW\~mMA~Gי5k%S%)/PY u!bg%\ l!)Hmde1Om !Sy˛o4JKA*m"k˔ks;e Z-Z@98#F*A3ԕybpQ%H&ZCip#8u,QO3\LwkPy]1+RE6 ?94RЛ(]@ԫBFpREIZ0#>6{U3 zd–Uq`.0E}YD]N@x^P<')Eԭ!+WO@|ӓ⯹a!G)xmr0pOq >}._BA9f&~g lYG ׷B$?h߹D/L/8V<0P #Ě'QÉ #0 Q]L׉O<{gM lF^)\(Ƞb,AhSBUft ͏~^UgMUھaF a}FjWuȵ $$xyH QU3s}/wpi3oׁC;ಂuTeEZS&9eUтA[&t_-BY1$sZi;#lo})Ss^pׄjW:7dߣGpGBrmi3pd@1镊a8GQrhbhї4(?` <$mRZAy/mV6<йӏ#\ hrӧ@T4 h4(V{eg0bܠ< #\0+y=K(T!c줋^p>iӤ+fIɟ|FYA,9wfEpַAˬvFCU3o)`@񛕺~\`{?2_U孂Ȓ~3适PC,r>Wh[Hq:D! 99IQ`$z;óʅ"@r7PI%f}AkQa,U5ſsHXgQ.lv{0B3@Z$_Lv~=t`06!OiZ>L޲ˡ%b?th;?ȠR=FۢdGmn{' &}1xG!^~@;JPuH#m]"rP,_̗FY -82(<gMHkYzu ŜMߦ:[Z?VPOLTJ*h}J~[3.ʸ=3uu_A'8ƲM!IE~,BQӵ /(( ti7 ;^XMClrv-+gPY7o(RϬ,w蕆57$}^Q?aw`dk2 Kt ELTDjȬ}%X¢:K$~lC+ ^D.sIWg׳-'"BjR]e:8n"Bkp ,);%C-PdG54 `v֑Λ=;PUP*ʽmWwTq$U 8DuQ併^+nǞ~ 7UwnZT'IXW3ଚEatF=73i6ax#>fR'.-p6jۀg.3$3wJ oȊMICb?嬻)3(K_rScOʼx8(ʍND<p셸BJNOU{%Dr20uf  Rjt(4/T\z"<,,D8d9u!#GCG%'"0zVDc ?s)б )3v6v -Mk\p)($,P)Q?1iRO}GQ,R_|&{tyr.|>1wưQT ]•3% -m>j>ȦBu1=O_@ے=Sv}{3#s#oFȓRLs&|kt݉4-IRREӘYb cK_"ե\ [XVkI2- {I67EJn|RG)L'ˣ`h\"K` )3G;{:Q -Sx_B :h^`o@MQFˋm+ x9k4$z哷,JC"Ajǿ+Ig - )ܭT*1:Jհ Jxe=_aq&@CDR:1N@i)gܙ_3%DH d # Q^ -[cA~6J"EBpTEЬ5?FpGMe; ,*IkHJltKjD^yhMznuoܯ4A7IBKqx$QA"ta$:ԍ3(DQ~3Iؠ)%;snO*ФwųH[0]J:9R85SA L {Xv<+$9^҃&y_Na(:ӘcC&jxIW -\iaI0"2k"rIV)ґwVuVgs b] HnBHDazsEryQM nQ-bBr\FR{2ҤQs"n'>7N{T< -z{7iUB})>3(@-\)Y(`T)yyq9:?sN>̴׊.n -e]U: -[ca$PtZJX Tx@Os6noaҌ5a}x@LɅQv#*/RvGWLwۮl`C|īHџiDu9c}%%iz1 旨$NTuIk92""QtL9Cڝ]W.UR!vD-e|=a )Cmj.ضk4abAHbLGH0 @h,l<SibdIߗ_>.fX>V?gqakkW3?YPø|tVWBЄ ]wtFŬLPaWÎG+ۑGWz -$ Jo7dy+n|ȱ4 `;gL d&$W, 3ܵP^ďާr@Mq™y@6/0K? -9BPc FoEe'}ɖIT-u8B}GJ%J~=G -yw;Z@p$W^v, <}S19V 6CTn ],fh@8?tGљ5~d}Vtb}~^,G+m;6ۑF`6VG?2c$]G -6&ׂSN ֦#\! t %oRу!犤!6/5+8#2$=SyĿb ^C#0ttNU½+'evG^<0tG0A` ߪy#jdYXWCn{= i~2( S }?Groh7fs]ܮ(I@KrfʸlbI~t^`4y$%D JIVxj3t[w?$ -E QiBv>2PD6kڭzh*e 7Ngt6ˣB.ͯCǖ|'фh߈ڍ!îZ?qvב%;ґXxf:2˓D UJ= H{jz)r0Fb} #.5 A;`YV~ SCbT'S &] v^ACP -V<(P07*+vb.+S4v,?Iy8@e,YX_^| o_:X1|fH ljxQHB;p5l sDI{飇F5Hms8:Z&iJws:l,FD\SmBi;_(vmg&DyVŧ +k&^Lz#<#یQ (MJF.,R'`˲#=c%1;Z -W -FMU9ѭMI9y,MCi_dHH1&h!>*|0W4yCnbMʪFDrİ0nqŦ//sS -E"I9>Uq$"+*Bo!T$X'$je>=,%rU^?6m:t9݊͗FY#Z< ]8vd+ JۀNS>Fu,"82A3,gD*+L*c_ASl6F`݈~fx<=L@.} {)EiRwԔqe3Oԥ!JKtiHEmt{IimD{C))^Ojb^r QW4~1iT#j2"YXK^ )y8 ښQT`0/: 0wʽ 7-* /9QARbN!u+)<f兜"E=d9;U dqfVIg%=4T!_9R-Q <~YQXxloDp*vKZ I.(Uue3zY)L:lAu3ioͳ6Dvywc67R׮~kxf/RqnKdsj6!$7׾An*کE\i"r•MQ2xErRsu(˕b$D(K41"W2h.֯'1)R$䈌) `.hj[\X_{"+gxM -L†L[e@E#o#<2fS*X1+W"ϽfKK* ~Odf/͂qQl`;|xKh`fk[@FEI W>XnHRzH!PAbajSxAua4rS`p5F"83c;E`l7RV6f0j%Csl?\XQQ[N!Dox"͙P2 ,HB2AثĭReBQ4" o@nsvVqO@ݯdngJ vB+FʔP5ZZ$뫆M d,K"7ί3sjMS56-j,OEL>A%ACx:ڝf%FͿ xzHF$-LfG Bfv+%`X;8 V.VЫM[Alγ:v$Jپy. -ne"+KueoqN6KO/1;V'wFKKBM{0M)mL2p-xN&<,$jaQjj4Pt;~X{˼-@:8 o胛pE`,x`u]ξx!yHP!O5+y&ey_B*!YU-R=yݗGˁ0Cߏߥ'يz]\ouDGJ.ϐnaWD\6Dx8sV:>7 -LJK5z@C;>)oopP@9z/; -o" -Ng8J>)A'&3 }+tA -cߕ*E -5q "o{*oVX=Hcŀm쨹w,$1zF84/C a$&c? 'K]GD<3#rL P:#Us5! 5 0ޟ\ -g sPmh0w.qF셙Tĺwe#lS |kk)D{2$ $R &%:ZϒJtԝ}7BEBellA3^j&؈6T}DUj776@45\ַj ]b"K?eh~[@*;b &bwX "a)뢿OXɟ -ǘW3ɉd lZ5Ny1 4 h  Z)е;~>bB}gf#'g_;D 8;wilC6qӑA0͟bҰ~%P>QE!,&4 %F VAyWpNaŌCpbMѽd`\u;㇈Ϩ -RPcA?γAǕiٿJ,B$Kiz<܀f;;#E ]9-,HBt}㋕VB4y yL}UZR#Lhx1BJR_t31mf^y nAc gge>bTE~m^̏Ni"-wnXb.DSKSi -l3z)|~dH;YI'}oԞW\( DQ@]DR -BX8CF@6:ש%zF8WV - clLU@*mj7 .R-0#q$ xQ)J2ЕzeVyo q -yUpcXXw`D4t"7+oE44!5LiBU":ۏ%Ʃ@b>HD=ǔb6Q-@WVK? *4+Rǭz Љd_$@A> h0"K&/L]?r#0 R -/\w'yX'HZp>bai"h/ZL{5ܤE>,S 5@80!;KDIJi5WM:tE5ԕFpn4#=BhEmlOD.&o2yLVk9P<~MUUZ1D -a%k% IHU]o1Xi Qhp%VR9YKsWRm!7@|Y?|.~&]4">og':2[5`~LgXfW咂EM\30?6'Pw1|0_/FQXd9k]i:%ǐ."e֧zl]z>B9*Co#zz-#}E*l5Kh_ }n&eHbF:+zuFAV|>+\sE:VP2 -;FLVbOݎ?"Yuڸ7{;qB%ϵ6wy~>7߳n O&oJ\K}|.3/(j<:Ufe2怕DP5W;{~WsW#;(R@𕟞ǘѮtW^}y019isHXɗV)!.QL=(yzXwnw]4_>l.`ʣ,.vU{^qc&;tZk=_> ¡hŬ5,"__"E`(@Ο#0}b`#ZgVuhS ~Wdd {"nhP׎\1׉ӬDLHśwp/|}ϸnr/%HyBmǦ -0.gd0gSgG rەQ> !v# "L`ꭐOhT8?ur(nbwo3`Bs2-Y; -ɖDmO q=[U3K##_'ү3 ET?߇Uޟü4p.qoϑ3or/fFC yBԉ0YS`PD \d?tN2h0^!d֕JP^́#= umsΟs )$0& ԄgaZ *Aڸ3(%'XS9gð{6X(Ys<a b&B#Lޕۇ$MCldHvk,Z -2yg^Fr;A"GYc7 -t@ppȥQFR2j"g+]?E1^* 6\ -&w?Lw2ˊ)EdL:Ϗ~NnU6.C;'qB3+o꺦r#ֹ#5wdB*b;ิ1Păۈ. vatkY6 gdL>"F[-{>U9bHOS/Xԃvˊ?QjOj|>}HG4ڷ?Epd=ۋrmȞuvH-h "=OOMpU~?/}7C .r?n߂Mm\yIJs9|chɘ1?gqF ȔCMe/c -5`Ijr@֢44DIcjM)S}Di!rpnycĢu4{cml{r7T;sT띴\E+X>DZ]6 u":+A\HCB%sǰra" ? ^3/s}=1<;X CŅ]H/xfOgQfoA{h^t= ?n~xj `A*wz -EixH%r9`K*-Îy'X4rEA;8DǺ$d 9M7:~)={յ;_ze;C^QBu` Hc3H1;!IVy1 K CLuXJATqS:"e z}pqXqcLV b ^ *0Mi^^zQҧ٨(WDtiS,#gAoԎ+\>stream -MԒ@z9Ozˤv*k@u$_5p[ם6/b uѼD5 "-_GAK{GǁjĹz!@]y65N/E'(i^VZtA;YG`T[$r|B>fDSIw^}_虆#m@=|SjZ?9ѓ3Y;"Za(A&/[gyz!K%.s'=!zw„_"V*v/J{ 0>dJEYl' 9ψ4m2]ÀWn+rWa3VQ c#8(~ owǟx@p6d>"#q(.vA,2ItFHg=~h+#I%{*3/uJw|7e*@ EcPtV `jGĸcDD,'B\:\#F(?".S )a־!s\Eo>;I,OQWFÎnArY\=z!:HWhs R$(^,9ql2UVJ#upD<*f:TjHY`YT{2%98Ēf]D{\ }cȍ -~di񷢮A#J#nŕ??d++-CjY\|}N6PYg-5_G|!! 8{Sr -l $W]%rĚ˽o9Q+ەi" Cr Oq6HgD A(_kSeeDF6w&āJQN:_qJlBKw [<'Z,8E݈;Th#K/>YwMCt8FLm+ݡ5hY2*cr$a cHR8Gm+&G7tW6C-TQC.3v"D1c-ÿ]N狯#4.3pkxѪ[[VL(X%"ybqWl#eh O+l_AW - m_kubFJ|'>.ڿavɏ{x(RbMWЍ$ -sE:{M;u)שB"5;-NFIǹ -Dk9S6ߎs>"UU[RdVJ9 Ttu=aֈj:@(:D}Ljþ4tL%Z> 9%]cɉWwZGu#wF+]. 4KY(2`U"c"wGsPkݙ2V_2ygYʃ]њso?d~oǿoOo?I垯o; ?$st.GBi4^ég/o -@N -M#oH -YD]\(YJj\;xږ~LnluU+oQʌPFD,| 11N"$OxcTa4U-K Rov!f༖ . y ` 1@Ƈ #FLjE,4U+`e?U(g>qRLtA^:,`D1G6AEgjh]!@JJY{>X*9bte^O_ Ijn7J0bA -c$kAȕ0UqUp[~=@pNH`-ƅq-IR#0, -:QC*XĵKs]kg僡 +M32ѧoT^iÎ_pQGմy34+RlBC<rӾP`~,"+h :(UL !P!s:ܩJЃ8jhV%&??IʦʽCEN*=z6ϙL w]j4+@tQsq*2)יK;LΐRZw3#YpvOfCqGlynHe&*na|"h$˩ӄ9ǐ,6nIyֈ=ߏb^Ac5Ca?=QtJ$%B#'F+o4]7їZ/!܋v~  ^nj2‡wX&{Cޚ꼣P wYYh*r^EuirQw\,DK#0slv^s&:3D^d;cCa̻/¶Y3[2m}Fx[#2Oǡ.,X1Iwl-J>IW.SIt@=2$(La&u^CS73@waB"2+  -gV+HaJ¹_!ߠ{#tb/,KQ%Gԛ̵b;zwpyXM:nn^9>h3=`{q[y_(pg/R%Lo^VvDMÆ%p~6MZm~R3~5{t\iߪmeI}5B&p\=%5 G1]ם{=ZM`74E /j8I/Ex~K7|AGk?>j -S[#e8g`ytZEQhCjR V-?<0GXWh="V*\ A(ƻ?*g_#gwxejKzb[54W$R} % HqG`2~/V;e㖏ڵD<ߣnBOVL9k!:!)NgM)\f8#p&jlxN93%&e}?GJ(V!:*[y4m׌[@nqcBkY&z3@?#ٺ{7-AaKw"~%1G?ϵ".qTO<ߴy'#V戝l|BwW~Bo"~?TaPֱ~;yLL Z$coLvz EzU{߱_ES!5DLK긡'sMSӢ2eP"sbE}R͚~}FA+LaHdl8/(t -r:N-gwmDKyhs"xw$"(83ҢgS{r䎨n[({v3c?"9giߗQaEZT>%iQPoa@b厝uhRg>3+.F(Ii.}@(x5[W_1P\< gt6@EK/M=S/3 -psh{0@#QyHs,|L=M<K{2E{gQG1HRAvXbq0G^"9>8 rL^4X%%Mج k; Bw8 ^3F̔;u$]aOXo#zᕹ*nR@NCoVIy D?Ș)+ -]љ jcqyDQ_(*[悔3e_tGem{2;Pts?7Xamd$s~;Ly>Ds|kZ$eB17F[@1B+0'kyǥ橺F,h>9,6NIҕ_@.*X7=0OܿZn/(S*@W. *Ùxb0,bh4^%C -Veie-縿>f|Tz?.9_&DxtmVX-vS"=ʮ=亨~[TWn6 Qo>AQ+C5&%^Q&cQ>; YA mUxCPP DkJ?𹂾5k^4:Yb/]o{dqGΉb[ak1^(Q6Kyl+P#X:]}V1y!B{Dn8krؠ -UY>=@z}Qamqpm>3Oa? 0D^N7]F!͏Ň*p%pqA-Q^ +ts=GQBĄP@Ld]Oh Woi=H>WPzЪd Ժ⊡4}GiADcJ_gr[R6Y$8h1I3=XD\~M>(aHm5s33-g6Z=kS/ YAVZ(L^~lʛ}I#oV!'HT;`H/·J@Q+3b ƃEq0 ZIીkY:|#YDNs] _\kzu(9D$LTt9KN }99]6”UָۭV.,MCHGaNْϛT#%cL3 Β3=hzM;/6)\9G#Ha^@\yJ#-c~8^gDj#p8#|cdpe%eIje\qNL}dF[! ؒ![oH_Ю/^!F(%2͢pO&(?ZuC#B!Ӎ.X.MعBp3N {A -*cat 1y,TȺA75"J~Í_q,9̰B|eZzWˤg0WDϔfqQ=؀'9ر#G ^=9u5d-Z|3"BzarQXf ͷn9y$Շu0FZ׳]5?!$TnE*;| E_eh<*Y,*Uf0 x() C&;oCs5[o/ơ)q:SW9hsoǵ (_,Jt+*ȪnZdev;O#ԕ3X\n+5KL M)(]KPeTB!0c9F".?W*@UU(5205wei]Ԟt_BPm9nj;j90[/F:)M4J. ༩a\V mLJ:VXMZoh\N3JӑB -/k]xCUUKyCC{|b{7-5c [YՅU=yvk;AƱg ^P,FS&J`HebNBnD+.1&=? D\n[0hZr&&"zmw0A1a :UÁ&U2! ;q.sBdb/7AvL}MH9eޙQ eRӬkpye.{C9;u;={A՘'uBL4D 5]p*>u-#`kW2{}u+AMCrsc)j/wYnl8ܺ0a7Å)Q٢L#o&o?y%}_^CaUyssFŵ foxY暉5T߇uWǶWn-,~z z\rh: y)f_GMKgKп>oU+p_!_+0뽊8E tPۡ%/󞞼Gz.ԓ;Y1*w*9K{_yj*w{٢=THi(ғ{ urC=S?`"ϴv:g -q|xp_ќ~itvQ0b<l;P@p"BHv &0 kuJ?} /K*J:{Sܾs4OR}CS*R@yVWyXp ;;"G JL޺|βe36+WS̝e.b@WExXkrSaQ=,_jߏ?IqD0z6?QS*)pu<RBq@&&ap Fd)#EU`KACЭ\Zsyu}!& m%&0Jc{ЧvI2+`uDET~l {1!l_co1=yA1_׫c*֎~ h4趁K<)PBF20(%s:%['~1}DzͥJ̥j/1Rf 6]~1aBtfڮaӾiO -%8>b_dl _A{af֭e,uoLȸlyQ٩NaXDw(Q]&^hPsXsX{&ropόE130#%곮IAB. 1;3N:*xOti<HEBKDvh$D8ǥ$?)}9ݨ5|Hi:T4vf#5M yE0ʢ*}I!̚F!, %ցCr~~IQ+2@u/4q܅8$zF';cC?l6#p =9j܌:dڱ/R>ASdMJ|7+o޸1bY0my@{\+X>81c1´{>b0 kG3iDx:CeCjVpt٣cvXegwk9h\r_sHA@c=dh8[O{7 ԚƎ7uZjvSI -U;Bi<QV*Vo:rS^"-*4OzU -< 2 -w[Q+Vu7_+!+Si空 -|xhUg=ky(/0`8QXz<.&Edr`;PtPŘ$?3fMX)n\S"tK8&Ba3}c;㐠Xx=ѦD?膈쓮Y?b -KDnDuΤ-'f) -C7"qim RV_˱IaHweH% n?D/1d7م9 H. } -, -Rm'f(fH']Tgq-j%#زCEnsVhgJy9HbHX -~q=K)#^q&=N::%M@3=Q|:f~4\Dk8;A":/2>9e'ЄܙG4̧ ;[>1}tMca[!0Y8A-yu}w$<_Յ#J{Vj%ѻ;[Ʈ7Ҝ(,*+Ͼ Yk( ^a`2:/:Fڃ9vϡiGE`K2c!))k_"'`:w4F k ^I~$ :1꯺c_2Zqܐ*=7un-Zݵ_d6hhl^î3ysRhE~u*]w9a&ݗ;TrO:)7 \%8"~HQۅ%гeY#"W1,tͲLgL6]}686]v~Z=?zkڱ*2_N( i - ݯ1 j?]c(wH}ct^\5P,aڗۧc̥vMN'ʑĵ/-LTf@L&\7Iȑ;l'?\dLrij=0y/8)Qߠt\DznG: Z7ɹnK2:h2bb?,( -^w,'NC]A^ zE\u"mV ҩAH!VCcz`z%vPT&IkE+N3C f)FĞCA`wUa 2#(଎O"Q~ F;sR2;e -(U6 *DP M7S_aaTNƄII}xwxewbfP!̓6Ubċo @'CzբތFv]1DyyfM ?읚m{^F:/ TIH YWqO |+g Q;>NVO 3OHu`V;-!e#=a#U|#rӊ v?F):F7f3jv}wrŸ́._N64 -6Uvx:(*1ajMPRB>DI(»E{²3 #L+}H}P;bWzR$%@]':')V5in tZ݃EVG:: ƾIN-anH}2JȱYWtO||ci|5bhzm}Nv1";.g` 6*3W ^y g\i P6Jf˳7y6kB:ӾX7 2m!l}OsCcnh|Xi4vFf$0=ep T+y [^1 -YZn߹_`!S,BDWI2\wr}ljP.Fm vR;Bhcf"*lC3׵#x2T ''z7h+gEk-^ Ҳ 4-WRe32ecw~ Y^.*"XoW)00fQE>/(i39:t;nZ)$E$QuӾ~Rhs("3dpP\xzxs_1cj(΂b8^=N"[wD Pt8L$8*gboe,ѐ87y3-ܹIs Nve{xUDy6t #¯~w >02ّ6"0t cBЗט|tܟ<_FBr݂Wi=:ɿ"@Bd@s"$X>'٩<+H;μNM]5||ZIr37:\.64E"/Hv] FzBqEL*l^ Ap]dTӪ󰭐~0eQu2"iV]ϤtظwN@2,K -Vt`7'UN&T9 L*FhiZhC7ÀVy'_$P%*њi*a/ -ӌåB~?{t]V |fr -xV'8YpSmpT2bTWq] tB??-izz"qK} ѓ-Hw{).yY78tuE"tJJߕUu-d -4,-3wt8O ,m"zwcDz1hH#'Eⶋv -rW2n3&M+H8RDD+0Y=л86)sLtgL$g>_fc)ɴ2 jppl~~9m kP53zBP~{%۽? -\ -M -] r~ȃKdӣ:+PirWӺ7:*1U6)O,vq,]2k09R @K7kR I[Qd ۻ}UWh|/,_d62_?B_nm Ri|I>S,9tw)h&q|.h3qcRA'?-4?0)`KǑRxAMT72`<, -]@j ^a/a'y0PVXFm?{S{޿YmKu'0?崥,`?ofAXX&32FxK}j"6Lߛ&\O P_6k'm*iδ,B:io qhvw - 16ep&ꇅV?ߓw -`#6i -b7_Һ#ux:Q"K *F\EE]j M\ :ָP!1'ԠPMxHױsXhΐU% -V$ ?*[]Kh' |#(?u/w*ti:*~:I=EVI+F~~PX!-걿*|zr44Jr[q~v{_b)p,GnkMdEs/$F&g [S2 "xz+;&Ov#o6R[{ߥq3DP(Yy.wH$֡E.p@iM=FbH⤜O޳25(q]I0vTܙFH.DR3"Rf~GzquWqa_gr@_GVX L`g0@ׁ5Hf<ۓ$Bvǣ@qVmOtkXM93t`07~մԌ8 .b>}|a-ЂK s {9_PW̅j6AUG?b ܶ-#ҫCo:+J7P9 -$k~8Tߢ*WoΎya>x ( -h|֭Fs /Zsǧ.J \3F!@y)uBpʧ 7Iӣygvv[\8%",|qDs@ȥˮ7B_'N+xe^ZK"2F7Y="QA;v:ղ<)3 -J0PUr[CZtȬ.kBH؉va )U^? 6yg`uy + ljvГ.^#v*^ C.gٹE[}5 8DV[0+Y̔\¡EˣsrMz eO&Bۍ%eۨ+>Bji,̕ (I>:=Qų7!&O C{ q@BkX܁gNe`az^Ÿ뉆1r9.r"w)vQ)޲›ᇚI^ -d*(0l --PgiwV3jDf1y SLպ$~ܭ,|W)/O1bXEhK -[ѭK`*v{kΑ:15B{iQ3]X{JSͮhD )9g PgH2d3ZcRvYpoF[U9O\MOKe2Z!o/~gY1?U8ٷΈx 0 EuxG>Q+ݡF2>E]ts<a40,,z]@<.k|O?ⷈ$Vסg6NPn~X&,g(x]x>~4KWg}C{`oRN{bO&HA%G+$^%G >k p ҁ `o`.@f(6aOHZK/73T ˄ذN)}wRC3jD\oxlEផ(nlaGT5L-QN^"Z%0AmrU5IXl -n%~Kbz_qzY xN?v5;fmtyE7`2kCJ C=C ϚA μ #Kn(sj]+@)n2uT ;k[: "bN -_u\{Eߐ'2xDzJ!;J0;Ra$=  . -z9z3t -{ -3ːn{vʶw$jðZ-@xZL.F#ߌ~$^#W'R -r㇝{f$n*(ˠg0^ &u!LVgfGKD$g﷏e@лAKdo 4 I-M7{%ZF >j^O ;#VFhr%irS}#k ӈO U'r63nIj6h\ˍÿIgAr&5z &#CEFʳ؈ pHQ,sG.)o@ǜyKYVةjA=u,VM#]'`cY՜q(TN&W3^+KP~8L:&S~ Ppj)i}r)ctW׫UsQ -eԒP^o=B+p5. iQx]a6*%;LJ^}Ds$ӄE2;ώVXfs61YHVD0¢, -dm3{@97Z]*6@#_'Bx BXUڶ'޼uKVo 3f(d1΀}bb(Ue](aA/$G -YSܖîw7D(B\J=WZVowq%\MzlHZ6^pE3k\)pWׯ#G<3Sz?m9̇m "8 Wn1^۷m^Ho"nU :z-%y2gI:_AHN;9vS{*:)|3QxO~B-J372-̺Ƨ ^śsNV~q`GU_B+4 -م$J'`Jl%Ҕ' R(ʚ/sIqT]t &{GI*{3?G|t".G4f"7)ڊ'B#ER;knU2'IiVLf'JE50D -+~84-cB}]CqG){{&7rzd'J<lg{05My9=ʯD& ZD;{05Sԫ?O#AYg-ҮX -[a1DA.GNVhjF-% xbt+mW8GR|Wu=UOe5ӠuBi )0hr4CC  y3U2HHXs3R۸_/Eԇ+PARV4Z}BquvPvyJl` E+tiBd`AJn -Aۇ!>TK˳/v$g"BM,B=ZlƳ>}FI>{wK&c'D!fl<[ -;(]AU -µ?ԂCC -QDJ5ւĶK3xĥ[=|_%QX\$}5oU|#uHcں%Xo0Ό8{x\#:tC:;Hk(=ɦ vѣN}Ő "&Q&ttd4҂becu6H +𞿏 ScfP* B6+`\L/f[Sj@WWmj9'٧|^t;8T&N4Zs}gb♩: -)kWI?4MkH8mT;53RRQpFSЈߑ%Q~;g%W?SYKPBe 0CR7Alh' -.?yDLF)u y9,3o$'pA:% -c 37/9I2yEָeStO\{9UX^u})}FׯW o֥rMUSKuudbzѢ=7BXO3HsQ> a"wQ3|"H1KW+̫ihlhX4[zLUVS"gu=(seN$)hQ pr6R@{5d5iD+5YR\,Y;d(! i5i4bS5.tqO~HZhĕ:n٭1CQ٠o*˝~i|x.5 `QƧ+Al|]߂A -FWLX;Ktk=Qmvy 9UMz'wא3KA+E) {wĐͷCEX}%$(ɳʿA^w~"%:)7Òi<7/z Tv"oՎ|;,>5kTVf^!/Xe{~TjٶJ09)3ߒlfi{ RӀz isWhtܵ8f]Z峣5e p9 k9 O^%- V7p]Lp][@ ez^dϊmD|;28O{)h tns &;iM :o?_[jϼ]Dǁ0ULӵЛaދOO& 5<N+,0TtkfraFE]ͿqzLw\! 8aT2M4\d.?,)| fRK_j7jKoNwSQW9ܹ'Je -\غ: Z2w. ӷlk^EgRmz"ZP~ !P;L IB 'vQ%upQxTBeK؞t\h*(W*b'ɢJ[Ti15=\ ?'Qr`z:nLa.DL6I= -Qv -]"L)]ԮT0KlX6 -Źp:Ľ4hAƸ$/nezܷRn&y6\+${lh 岔IRNeow8p-!˨ -( ,W(6F[Af)~Gx+)`nZ3P(l۝q|YnV|D*Jʅ}0Ԥma}bq<3.BXI 0k~XQ(7~kǴxٰ-L&1t,ԭ׏dArP߽p7j5Äv +{ pQ@xwuĬqPL&Uƅ>yPuJO t˹*Ȥ(!7eMBEe.r4 Z[i3UJ=QH;Zvs2R^" ꏹ[}{vh,r$Zj;GAOכ=jp<#ox ߩI!{m` -광@= aK)Si@tѬ@ɮ珚/D;L->B Ř{ \"B={R-&--'vID~k=Aoʻ0JjHl~b,A;|R$#Bj'J޸CS^:s3'ߞg&Bh+{"~x%6e%%trΟ'5G8KMA2lW!4Wz@vW违7Mk)J?}fY[ oQ7.Xc+{ן|X7&f f.2~^SFm lRb`&@hHFĵe]DC?"do"l`05?мdS@|]Xߗ>~Y4<-ԁw(l'rبM*PYTФh`JQ􌱒Ÿy'lHPqyf) )(#T% x)dT -{ ɩĕ6q eE.lHk-]ʋKs#~V 8~̏;ƑmGM'VC} !([׮5XCw:[͑P0URcRMao6 ɫ FVo·wcsKra 1v tOx?f 6ºmajr85d'GxM\=[A_5 -x2Y&d^4 C>k\tw6ŎLwnVH?ZsGҪߺ g[qc:{ ?n{2(ѓ6mZ YFFN97Z׏+ "&)M*4!D1BRhiӭ>aO7~"]X:&'˒YsiOe*zC3us+*N}ۧU]#@)&@݊ -, C PjH\ T'OxIM. )DU*~ -Co(Vilw|[l(Ppdg?"u}XJ 3B*>jEғ>Hl[K_jAFm#+7 uQdAszjaqU?h4(f WU"Z a]Vii\ _Џ֛8-%+ldJbHk_r< - ,V:աI] tH?~H\1V҆H;W1ϡV -v.3iKW &o)%٣u U.w0~YWb';C)d#D++`|tb|1}SI D -K<0J/=QK0hY4|- -A c+la;!cE;zh9~b*i|:mj!Պ7P?(X4D/+n迡ځ7ҕ% m؆ S؏mdu1`$ p8 W{?f%gӛ'Ͱ8$C6|3s/eo{4,]85-{`!JBÈ,{8 G*J'"aWD2Ҿ`&V7JttZ=Na3 -T|kNs]% koI91LE׉=(QL`78@s\A? X Nڔ&b7̇ꈒ%#V$9JG؅cPM8iF_&>F5J;?=iG L*Sbx @;gK ɝ\'gre$+ؑUN(9 -ǣԅ)Xa%ĦԪaYÞ@kv ;^Wwy;hu]ZwS¤9GJ)3|CMH%TXp6$3tqp6ةhCQ'2\5$RF k['(gVwLdWpO`XFJqMC0`Ad5 sg%Z(\ЗIa.4 X -Vl{`b3z% Ѽ#wݩ䦬Y=Kjb5"X&%0pn[Wmi8R9AkcH)?, -$,ŧjV:gwD"ͦ~*!Y᠞U;81J#8J*Rװa(9 } 7}`J dO6Re&T)ɴQ-j6YHLs/[$W$7 R: -VcDhq@=UoۏPWB&X+T}6JlbO`a60,/Ip|Nx6Ckȫo oN^TB4Wޢp{fH_W(;gBPe|&Tǫq1sZ@+C vk}Ԉ-ܺXIɤtN@z SEq[_G -< nRƖY |%Թ8`,|Ch\Fv}~*T3is^?aBopXoNRDtwn~D[AFE bW@DϯDc7_U`ПcS:K-DlhcJ/8"oHpaJ5MqvHwDI Q?RMw "t# 5?zӖ++c͘UTّ[C+7Rl#Οl[Ũ]$viPB2*ÔN0Z453 kyy|O.z0%$MW GE) J -@ffZb;W Guf YQŒ͵Íl_3p=5 }:z(YKIk!2mP[(Dޓ8:} ]RgxPT)Ja9ZEjjŴF\G.΢9/*G:h˝ ٵi45COv 3j-^B!tCJҝRrVgUR~xjSzM}{F$ -PAh#z4y@ !|QgvʀBe\BDy+mϙ0Tt6mA,]* vᑞ6||lԀ蝄 x`?C4& -b -!KMq›ԅ6h#s`۩?~G^V#W|*0PC9[LYuQ㼲򚃙. -O0}Ö,{:rfl!eBj.'Topi53@ʘG!ATg)n -9у'cd*O1Qiy8p^Pj?:+*tʡ8/tL`JɈvf0kI#936|[k&R tupn=*ί`f+3x47-O(vsQG'k0wC=(}%WC@7H%B3T7x 4Ѷ5<V4ɀD>k3Q -/i{L\%vs!!B~ sZ}Hpո [J7"O M=ʩF%lzJ@QINn^U lб"ir[1ޤX -r.LKd0uK@µ"])-FqR.1Q%J-j ǹBL:fê;`;ؙu1W`'撬L牮7\(rFzv}rD "#@+ڣs!ȳoٹdW"B؏V[\a0CdPCtd ՜Hn%Hwb#lsnXHY\wwl29z8f.2cRANDA҈hHzwEWA!;I7)&|#|l0ZYjGgS~14,ZMqp0bNFWJM! M^:wr</U޳;p0YB4W QSԙ+ %ű2aAD$(oGv>>7sZԇOLxŇ7^Ye岣S>F-?9]'"?l :9zS+p'Ag6j!ֹG:/(NY8R%' -c S=Td~Ca[N0b?U9vrE!]IIaq%0r!c+:!F*:dh֧غN`I -|œ: -#0|Ҙ -R#R0 6ǂemOP8{>HOxO q];-59q@/= -;ib6zbVm-6òih#cݨF#S v᪰Q5T3 =A=lX0PIYKv\'yוy|]@ %a,>[ A_Cf/4bWo @6V1U ʮ~p1VO>RD>͢칯LFNTth!1ا (l Q-V~FZf.'mrQ)a\-Hpq,DZfד9tU-EBQL``oh$E5㥵B@<*||mrOgw*9Z+k%He*K[m[ޘkRnZU72 -:XQdK/A =B&-J-IXȄҨEv};s\AޛXH -*yjL=,vD'se}lYዾuĵ!\F5圀e3RW&Zj(4p`)8M(k7 jt  -y' -`Px% -#(+.ȽCs٦!;sբVK(}6h v>9d 8(n`Q n~R札ԟD%M4W79?|BLΊ_{I"3='jS~a >h|Jq5{q\r 1at_0FaU`0hn|MUPKd(t%׋W%fT \2yZRh Ә8Y{ -+R I]&XxP6%3k -= -QG{#bfu!@LN%)eQĤ1L PNQ\+̇SZc 쮃/" 7-:0TJ*rgk bQD q֙2*Ah;~0}ȱ(X-{a$/5sˋ* -m -Zؔw.3@ѐ!V];s/MQ<U-z._ͱG/,!z@ޢv'w*YS5A,]U5?99tׁ.oj/>UBtCs}>Q7u~(H]*>yRRÊނ޶M`HǕE#a!-6g'b!&V07iŽl+6ѴW%CPP_\HxӺc %JfY-]SKdՇ*9 )0XS(" KZFVoܖ:4,1OTx~8$ߢ6ƥx~l`񻗪u+<ɐD{fzL5dlieRt ;l0)3`1#!*tC"YFGss-F5r }p=o /Ago<b`3j>/` x~<{!%Xur_いUGD-(IxKagYJK}m ݡ鶇>2{D ٳ"!BM(i`TMu4R&5q}H6 D> l{-k)" -tJs=4)8\^/W@s`2"bt=ED{`4/B -ǮP0@QtS|zmJ+ +`J$Ym.$s: -]eQq7BGNj(gKtfd<-m  -X|It5dtDݶk'(ȯtV)!M@VE J'!\9jW =5۲{И6c9_Am>Q -E-58~De\|'[W\Grƺjg}6ܺ s PϙU1tX;[Rǫk1-lK/6ʦ>;S|]n8gHIy/A]g[# mO`?XJI&a*>v /yr+0vJef KƢ#4I0zVQ,.Љ:Cw "*+g.m Ep[uBjA vF -J*Bzb 4OKiO[ﳧ$C:b)kd;p2m~eGjGϐ3ۤY 9WH]"σiB+vSV+\Qg#XDV/A,8+] |1.QصsD]#K-^PD̰&w>QYqt\(:L-'R[.\;y ޢ ) iTlt+1w#?44D` ^5}by=:G=JJr1ըmI;V#J>r]gY! u)P|?u'X.ozV=0vne4N~e \WL4VC}C@RY;RP]S7ky +t;m -1j`6| -"0(S1a:c:aU%ٴFN+l(U^As5E#f}Tev˂IX-<`M*$E*& G t4=-4e ->_HP=1ql|03qɃr ش" Fvh#Zq)G< 󤝽dgxe -!E5s~W"}Js:t+tj|bΩtۜazw;MJufK 䣬~F?鐍cL) ;&I oణ`;6 gJǹJI΃CwLbwd*|6'(sr(d֜<(uU\˒yK~i 9 oA5 l" ^4teV#{YIuYKl~u[z"}?8k:ƛ%4$DS[>{Vx3} 6fF2gP"!(ɕ!ߚk$:J:g4s mX +(=ej]N*`VrI亓sfB>! :9nHzy6s΍L'˕KȹWO#Drσhѻcx:s o d=P,,zQܤ?> :|[pFv1J}8$鸫_$U| -5JbعdѲ<8 hoҤ2F3#RcΜǐ*¯3vܹB.-Fo[[`ڔ7.y)4vЧ)uG;9UiU F4xSτm㧃!xvگXXO;[)uQ%D*a..p!#b#ΟDħXT*zBν)9KX`]ܥb]>˼ yNg%?йR*#i$񶢄xyb0@lj5Q|b~J'sYkQ_]"EWX|C sg +a'SX *6B*C+@%!Pf.3sn, -1 -a>-%edc|Z)Tt(nޞTo?}`/(S'G=Um0# [n^嶮> r_Y͒i hNvDCA8bPDzJIȄ[dc؁^i6JD={O|}oOcK35)4T$EYP?Vp9nq )rQ割NKy\B#beV-QDX(!G6qxF@ZL0ۀpR4߬Tfb#؞1"?QÚZF=wƳ~r> H!scj\B} Nzی3:K8jm*3b*ɚӚ!NPA0WՈPtteY< 9eN - -5lƮ l$NNڇE1"aX3 EXa2\3$W)nh. =In9e*^l`#[O}֚u@(FG'Jo ]Z%!k a6nHڸ, Fi1Pp:GjKo Fcmt`d>o?+c/f%B!{=c(YE1=wKf$V-?)N OL6g E Kvʈ""4m 1!bҨg~G?4' -xjq2I'a"d= m3)iG%tE --yxFDA5"K:ɬapJQKh D ԛ XWrL[M - ׮8h52'6C:|@)(S^?|Դ{sg~lTE|ZZ'⣙dA=Q~*3. -?'`"Yi u": ? \p=Guʀ!9-%O{j4eI%5T`UKU:kkxAQ#E<h  z=r6_}f#I B(^-XJ 7Bk>f˃ ܟ:~"60݃ꥒjgۃS?oa ے ̉/iӞӭK{AoFCF/"!PqlKgR0+9y I(_ */*p dy(V>٪o?x*KڊW#MG/;[`vgq7:S#M#P\"a0 PFJ X{T@nM m=yу]A* H` 0 h%jRL! DÊB m -- wxj+C5 lk,H)8%zG_J|⡣0 $zKک(6bq~WaXh*q*5-*̔x4nWlȍNCI}$2O\]Eo-a|5-]ZLz; DCQCN? apFHYrlD8K.zߢ޴Ti^^6ϋf@%kc@ F,8YC dm:7,0bԤ|2#?jEo?(PN -Pc0Q !́3EDY5 J7.;'D| -e/{ >"?B5T|aB~?@b<_`Q_2H}XP( +W08cٺGL֢c*>{}40b싩G+ -x_zn57A9PO~φ҄%crXp6}s2ӷ8kω1IbS6V -ˏ5ö(5 -b"tʇӔTlA3bUŕ K z3=?%X n -s +dW6SZs3^: ./yя̩h3NsjL ӅDůyTO3gkAx H S0:?=& -<3Q|#n*Ky)b;xizĹX8* @:<ٞns*t>0 ,Zּ%?93g3o,ˆz[ȁo?X>s_k #ī>;s};r^?|rφq۫:4+O|CU6 -"H"^2.#f3\#:+"1$ōׅ"̰'>7Ai07?>Լ0O"O)bN5Ou#Yc8Oƫj; H"P5gbJ6g3IɃg QϛT=5L1K VK%",.ҹɭ'kbu -o- ޹` g>S9bhLך3<ʏ i0T$4f[ELCc8"q -0C](y!!zsÎʢQ"nr]Ep*]5Mv/ :ÿ/Ɋ\ #,Tu/vP; -.5:HE`y -ܕ`RRB{ J#As -{!(MdX<n@,.)^2Na}lhz` k JZ{S>33p,&{6j8GnbMxv`ף򦞻h -`(v. =Hsr;K;>Rs-кIo(=VzO>ɧ535ZAl( -#BSv.Lt$cpƸϲ\fO$Q\u&iX,3^{ X,ςmj-A&AfK - 7 Gh#(^W|8)}Ȭzӆ -Zhu^@JhHq͗dlXCC u=̪cUa515>61U3$-$lQKW!C]w#W!sXum3ǚAZ ^gt=zۨ26RF_d~;#`u -,fMb0w*HU<.}p`>#~z<I2v3,{h6RqnԒ*&sv{OQa?Vy(7͉.HiB%&,[9Tz&ҭ7=XDn) 'uKq뜌'*u~Sw8"Emu'VvF`-)LIy nyՆ!c0Q6s)DԅE5Q4<&ǭ1>KF8ǝO6ʿC_G6Uvda6ݫF](t6+W/t[oZ\*j"fxW]O]--DˎgB&d?C RA ibg`*$$X؁P\e_Q"J >,iƯq=Iij"zׯb&gR 3T(Zjٝ i/uv-wiOR"7?8{:B -n^ן, ^~o`c`8|80X^Mz|w[/+'XHƛN¹T4s\l^H6d@~L-'.KS[x/4[9^FxTR5HD{i.w=:K3Qi)f@c&BұO]b/ 38DQNp_,)Tx0[sv]QxXIgԑCcj$M|vNA'gŠ ?N'+=$U~M9o6P!ehaO0LnSvD1#®sD7'uLeBӓ 4 ~O};}RFCLsG,(\OD0hĪ")t*.sޑufJ5H,|.u)^bj2^_[~ $D؁s\d(#Hq}Y_8 peڮnPDn’=4#olODADL_A߆v3B@<_gd{9SsKuf6ڟ<> Uet=0(B F5uHGMLKu:>aRk7Z~: t[C>>#P^DJ'O4`cvl}em_AyMR;yiLxVM^=?(X BAWSM"Ṡ|y%>:C̿hdX,n!'Ok fHݷOs -LŜx-x-|NX Br.|sKa 2h1EX~o, -o#PP֩=gD~0rTt">@$̽lD~@Sߠ_ve1f[ϥǟ\߈p5_AZ1g0b uХ?`wg:wy >:jô_ -?PgK;]78Ks(&l~٘Jݘeqcf"E>,|K>C:;7ICC">(Y'" \:|FH0BtNƝ>烅s 8(\ٹbo`^0ԗO$J 겥C?}8zZkkf((\P) -#DQ_l !H YxC'3]E> v*Br2Ԍve|h1It,rnf# + -y:S6.Q.RUzKd0G}"F $škq"B\.B4]nrPgöqV#O8 M!98sKN@! Tcv _wv|D$M`صPqԝi,>E[۴tNbȼ/t>( mSa[+8?poOyQNψE -L/8>Q:%.+뷲 @)={S[>@gƂPq1g H ]DY&/Dr.t_{Juyp'"/x)ڛ0X'Ez@^IN&0/:ot\hR fAMv3db,2/BC&G Tj~}=T‹̥^pSr$w8ڠ5<'H_Yğ⌻۞2PXK`rψ+cϨ"JL/^ D`#Xd#b0Xh JX1"L<{H?Quy YCcÀ'y;3*A"7 xFDx壁ҁZBWQt Ih~D˲-[s-5d9-q]o/nZA/kA3\&jx~Xa^o{ϵSPA9ҟW=r8yqFq>GV ңzN/}GPSƞͮ8Ow /VBn -v^KV˥NOa˴94|,N,au)`PoG*9#PFSF0[re3Mwk8L)${B+j ܌כ)Y#PE23pzyqw6F ZDQ1R"@7F3>7!M8uU͘0#yORAa )xVkvƥk1yNNW <,8kD8 -E0#„q+ - {? ?ٕS1-wS?3L~G zyGkɟL-?gۡXǺ($OYsוMpȁYĥ0!^)?Ʉ 5h(042\6lۆ1 aᝎ Y[Kb9Pvah xFQrx&MCTp%Z;&yX -\!Je2dWքL'ò)h<~}I'ىϘO?+V L ݻFJXxx#43ToZyT*͍!uBe?ob4YVe)` -̰tPzyJ6m&6{4]kv"3$VNRORdLT]n*V*G'EkM z2rx6Rp$vYڻ~m]c?l -@A^L5 C'P> oJEL̓)LDQx!74)ޯQ m$9JБ*aM:R[r:$߯Da>Ia]0P$է|M#_}=B|}=%}VӍL'Kuˇ$qb o -r瓧l?r4A8MDsKJ悰jdW#"L/&MN3#&h+5?ߟ#o)@9?U: |axW(H"m نGl-Q>If24z||S~o@oɖacXj3!@֖`=;bX~d+ej'v]n08 a[!)WRIKC@ѬY7v+Gq(Ű(@Q<ʺEh}*'OFp_%4v=M4vs<(Pr^ a '$o޲F(D ,3@YA{}\RO&RYNs%3'Bo2ñ=W$xbt @?&=tǡtvq HߧU06a: ;`ӮVY|LDKj|iA/xz`9+t1}Wj\;EwCќ w.f;ljF)c.]A1\I&WmD,ezt$p^')]S"p l tٳUJT}4.'̒p;BKI]:p'w"fδN.ғ+@W&^q[M1_F"~IH|BR S^kfopP,O:2 a46teZ~j s]eD(rG~,㦭hjj4j -!{.Y-z׉+:^X4WoDԯphֲnfΔM$)6EWÍJ 2 >nFB먌Qy(Kp1lTi?$ DsMG+)O{AG$6YM* -VDLځ>c7T DbP(HuP -U<{8׼&3rM ؾG[,1W]d$fv_n ԢdWL%Gg!"HT {S7ۙ|)K<5DAlg7䱄1!|E"3iO?=t)؃jB9S_{Ca`~s !1:? &H5RHr (sW4À Dc;6M@ШV :rfF~Cb!"8A0Q#YZ΃r=yx@•O/ϼ XdБX֎Z`0|9%<ݫ^o ^}p2 &]Ck-L)@Xȴ4e,cֹþHqXC$B$k }$#J[jᗐ+Z[l'W*?Wq]E@|z@K/ -Hk;ZדZ(&!^onC#CmcxxulTC UtivN'!—PJa3P賖Txガ*=UcMVN"}{˾\uuƹB _V_cgn* iZY)|psa:^=x,3'i~N.,x0I˪o Stё=IuԱPI+ݒ|S4CjHƟS~p::E:f|vjQ78EX`0sͿ"S,A9J4_ v-7 Ԙ֬$ -{Бf^S.Ň ATO}<$32KJP5p6,IKUnFa t9bQMq |"AqnhT-1ǣ kNНaQ=Wߎ?0Ou:I*v;AՆ['8ƪ48CWMAX)2a}eD)OC4QXT#n!)5 Ov"%=gWm D$O1ʵG'4َy_!-v_{1ӹz g\v=. g%"D ;}\2蓶UtD,"3=tj/ٚYz-!M۴5ɚ#'S0M~ރ)QGa̘nz a"1FOP`K[fc,!Q! \dj^ZLlc*3Q"I1ZrCtXh`8M@+@3a.#vb0fQQg}+3B0ˋ`5 w;,.3 -E1Pe>~TyׯgHfP.cʡ' Q}QNC}r澲 ݷB6&J؋~29ԺʹƁ'Ia9AYP m)+Ce"C]POc;B_AEKkEfqvVhZ@t"PbT&^Ȃ"%jƀ({cG췬'X4Y TUJx6H @wzs :T@=F”pRi?;+Z݄}ŪP"wU>y8&.p'*]VxlShy uըdOWk(|ӄ| -|ɯ\(lQ',p= 7ɱ_"50 +уt!P$ kMN"^U.w9Ϗd#|~H 9\VIG!} 2,KH,zIs?,~S;X(LbCu3jcK-`:jۏzۑjS{:j}EETw0o"/^[̊{|3IR5R<^j z#rW~",IFLgT)5sB$߈q۳%vO$uv YtyX(ci`Kӆ^͸UX_Z)%z,&O_yJ. z  QثTcSNFה, ݴg\ja$|PuhQHZ$'k?_ WsywK.~QbZZ;`M"I%Oz % 䇘G+8ZLzd h -W[AAX;]'c;bw(ep٧ HqwcOJiɄ0y:ZMW&8i{UBFiro8襂o=' '~F|3OOF_nPh>Xq-':sg= ҊCp!AXX2 SJKt잇9QH؍he# ~v20`5 ޞbdC@'csusx:$O~TT@H1a񪄰߯*÷ζUϨo(v T_ t Ʌ6ը3"HK0&(/\?^_}kۅV - ,6_su by -"/J3~ MrG(FYLŇe_5W0u&j_C`3بΛf5jG(/#a򰣊SSZ.[?A b[9L1H#/G /'zrg_nZLYJW ){#^u"yFp͔_D2(fHSO+$T'Tp62-gI`/Ʀ'I-^!wbbGTT/8Qe+?|7㸮Bedi ŒႦ}<:񚵴(%8!̜ _eU:0c fX}ZT |ߝ .B !7Ŭr{cfƇpe =r OtCna솒, $>_l#_4߃;?CapM(=Q_EX'W*U= Fl`̢;Hvk\姯c]9SCt"-Fѝ?êA-"R է1jF2bMs=޻c>lbeq -h"1R -A@{G{G^Hzp  -s:Ձ6nz(n@s?1bI10opiOVr@PGFqBÇtX |%>~F=`eixcMM&5H8:b?!h[A8Qq30kiBB>mW8D+Z @ЂI}Xw*bUІ;xhrO&WfS=&bn`B}qNW.fHW}} F+vqF:t\+k*!Eܪi(NVF^jNwڻ2 -DQ._ -RR Z9 Uyyv:lx ; -a1mt瑄KMxMp䋊I˰׬ψ?I$lvlqrsMK% -g3lm?H?`;??`ai=S~ ^BТjUM 4RwD 8J So޿aC 74`.RITmV&cNXc'#4t wa^YQ":2XhuDÀK:i';=|9h Lt!+NVܲΦmH;M"{.CZؕYy8c8NLC;@{ ;b_'j~ -{ ƂP5 ,L"ڊCs]Pԝ?G3 Npܷ CBb_ҿ ؕaQfR lFys WQQ)%kI:0H7 -ooX?^86h ->-}ӕ*tyer< 5#Mfuͭi;ce7GOf$ַN c u"5 '|>fǴ_T52=>`RSytݴPC>݅3L(%PeWs]XjRנ?7n>D//x1H"Zdd #9#5F {}xnP?((-:J_Sl|gXšvE Ǝh/.ШɢԲF ovZFǭJ;/ \={2ad\>P)ltu5[fk?y>K:Q=4fsݠ COk 9]@K"C:"ԾJܔuPuN,.##Qzdt+X07b3uZ{Z:n-r=|Z+-1g^v]؋1/C30-7huFQM7GåG]3-:#OWފPe ;u&3>Xh??1ٖ5]-ٍB: 1U]󰪞1TAkH@qΧ^OܼC"]nX= W`ʙ-(^(x9S;DiWY/T}FxMs BG"=ђ"1u0!"?JH.4zD͐T7}+uRbb(rTq'CXZ(R i?blM\p!ʏ8KAV&LXYǡy%|>?U깿Vnͣrx΂4 @~g^zbvP\k ^@GDTs[I\w4/1yfQK)gþj8B>ɔ1QxTgIyWT-/~_%Sdsbx @UR86Fg*}n+> GT UB`W꛸b C:;`Қ_Gg0gB"]:(մ3IC3KZp#;;,v:EMoP3 ׺LYfsm!wHp9^~JXdA2#ǽ{ݥ\>_8clC634l{lW5+e%^j"z5leONGGY/ӏ=^P:f1 -}DnV͔[ :P3E$ TA-AkAq0qX=JY#Ȥ(ϗUu5Ȇ_jĨWx#..I[ %,Tw;XBS#%75P7_F D"OP^p4b_ݥϫc*t[١`oWam>z0lHwG*rizgemnw_pUi+Aw[NTq {M^~h,'4:!: Ij9w}1SX~OvDr"#j`)b_>t(τ\*=g4V!E檜W{U'+B]H)B"eΓzr?q+`;W?(l١N59,;5Uu ;Fs 3H7D;Ӥe㑅k"$wR5+sH}_LzI@JNA[$)P tW}.BTF)I8}av?µ`Şz{3#boR>Fij -Y~D : *8Rnm]giY8B<+8l8pAޘIǟRsd~L]8+0 !ݺ\HM.a(-sWq11@M3od꜖YJIwX{Gau)n0X=}S]VJowi7GD1!zxg"Y~Zϑm*Sza Ug cBkc?繽=΀p TB~&"@;I$(ہ&W|pEUDZ Բ=A2PlV z/Tg^(#Z+хQ .;.e6RLl$ L ɨ @v(M#ŇE -1(h=8XZAKėAi1bhhEš0y1YL~ ->_O;'Z6EZc{^Wbw`~qKn:S񙩸(Dԉ -&4FC㨂nHG}EpXV]m Vhp#b~Y$Sl0!]S:֙qbjBxLC!79>'$n[T@Ua5'ǜS:!_ž/(_/AӏH.2zo;/x~(SiK*JMXB+X'vH++B_ND Ca6\J⡙ϜGs+'VJE:~rp²uΟCrϙHƔ`[C~| -/lSxeo)Ͱ~5贂W(AHLMU*ggcf~&./D|:_qu1)fw"Ph9S=Y6\8v%$ -lC:hK~S+QS#i}zHhVK<7O1(mk!nSm9BrAug~wfmvڗ&+-(>K 咑]ĭQR(|%V)s1ݻ=$AWZ1ٷsOq< ^ ~D5uH2u _kOY hUkF M/ +5@&P>lh0F:;Wt?vIwCB9"j죓MxtXG/0-E1 {T+1^w.H}_ `*i@%YjRo(|ӡ]:^'x^ﱱw'f/~{bOV~o?oOwÿ?SN_ۧ=_Wg7#VsO\=:DWDY-XhStAVo],gfT\׵$ -b -~Vg]ÉHo>3,~d­:"(ɍՑP4_/F?Չ8# -XMgPBu}cqg8֩*:f:bQ{6?Fo Z#bM1z9cȾRzމ[مo4݉#g"hК=#3d7hK+ˡ弓콼x(ܿ*Ԗ.VT`-ToTV܅v 5Qs*7g.%$Fl !T_67c0trHbzTҬNltص^eih+`N$%uFDW$!~ *&l}߶h`[îfwZô* ~& -{B; -~zysA5<0(J踳'SN \:??AG7I,Z <xUIـp,dhsQH -zt}Q 5NPׁ:M1< y)o -Uzѩ1` T9GenX;\ʓ9 :4mB' g(c&QwCͫTsAZQ0I,wq!S{gBk[pM0(@hLfUstߐ3̞\ -ʛK?EeWBq#f 2_\Jݝ \S])~S,GoGPeh"j о ،q:8y͗̽ R`Eْn3:cwuwPQsq*=tb\X|:nV?Ԉ6A>ӨvCRIf9 {s -2EQu3 -c 5T; )cJbKzDc]?Q=1>w{icg"^BGў -i4@㲡gsS9r|e8('mㅬ.vyx#bl6B6 <}TU!D*wP;&-MԄ6-L9{t/S+ޭy(LI׎OPaV'r%uNhE!.~Q( ?tL&^pu\gjMf:  xDKCĖK(^O+EV\FOI-aoY4 Y }Q B6Jz(= ٨8Q ccАX~+K!UZND]#&M5_eNw;{;*+@t2!e/z۾{G l_I'ďGdVՑ褿rAo]yǖ!["R8Nk*`Ȣ3w,9."~'mƜGT:2QweЄ};t#]nh- 'UG͞~6o1 h~ѿVVV<@XBg9P9S- m}>cV@Hw,h@"ms9 3ON0Cb+UČkhȷSnDTtъtm_,&)kŶq(q+L-cɆjQόė0{NaDKɽ#ZpN"||w!ZSy?Dc7V8mϣc5R;tpaakFg.y irblHh(%>\ >zLr|ysFFjN@ʚN_]dB}>B@s@MV}93.τ_P#kXK Ƃ?| m.3HVšv5ui -y#\Pģe^zuIq Hچ&sdBPO*|P1-KA'НisӶ$zO0Ξy|msoy$};w4f_e1ZcsZ I2-hT"Џ}kvM8R_jۥf"R/&u`ϼNIwakjkËDO3Bt]_??D)mvWt}L_6ꁨ@t*[gn?e(vKҰ~A!>;C-l5׃" ޿rև#a=G) + -jE+*W??h"2aeD]㠡ي-2Ėbo~ߌoM Fꊺ xPu ՏW2+'H -?hwyQ~`.\dY*w=J!Ns{6j]ψy6Rhj3`#(#x5]AKRB /І@ -8נf)ШFeÎOĥh壐JL_-if_<顪2XJ|u0H\;=0{+AFE0#$-%s*rʉ $YT~{{ިrN>c7]3"R?yQBCYWSҐ.NTD} 6\hm8Y@ɩO,vψܳ!ȌRGqL@ϖXuqo{Ԋ"1sy5j5آ#?.k[v+U㐦\jOj6Nj$OX-nWJZwq)G|UCOL+ æwY!+tI>wFcbDycE{$$D{ UXTMB":14W)Ħ]:1ψ$Eȱ RD@i]->O31 -& eUAaa #Yw&cqCx֚' endstream endobj 132 0 obj <>stream -}]Q x/Oky2؇ -Em6FaWQxv=6u~ -:?4^vėL+w~tvBGk=: J6wҚ##ڻ-pGKҏ.*ޕĝ1|l3g;MhțHj;}HUBn<] 5A\k@%ea2#>"KRPm&,,hgq -f$B,P4ЁnU ٺy?Tϟ-CɎsVD78P 1׉TKa_&iKBH:'|(& r-:-Ol#K3$v^*RX)jZU¿7~a@b厃u;#ΐ~A:J%Iu>R'$"6Nk΄+,?|S([؞ |)&s`vY%z8 X&A u| ;pt該7'T#cDh )>"|fmS4pr < Fޚjޕ~*v>ScX;S̝keћ\@rЫȼD(ϯӔ|$W0 ݘ%M|지ϼ:mQ&gSX'$Z0F"aERR &b9^d|f`#9> xd+þ$]\ZTz5?M]v琿PqGb/.Zw*G $>Pu4ʜAGf$c\?vu5χv{sddfԌF- -'BxǾVF5FZF,N+>=D64T kPk:9Svq(GФ/*ylԡo@5?gWYp5Ҿd`~Xi)o:#/Q K\ c%Ĵg [bBWao2k"ԅ -8wo@h$(C-,gNW ؘ߿R`"I3/vD &);߿ogt@|aA 0B ߚbʀ(~'Ic׭ U̦mAңݘ @jv~ۥϗ*J;S2ȡ)2֔T<4@fuYqmǁ95_KCCp]Alo<^: YiSpނsP[ğ -61? jFUPCd<(ba -bN}=|pPKzꆠ4~P/~bV jq cJ|GD[ui 4ZF}&&0NIX,Ư3Mb`zꤑ2{y4v>yd -DXN.~PD|', `53Ca;{(C3h"`Q"Ei!FiEhԞ"[GğOy?gⒼ*nv#_?|aaKZPλ ~='~#VH+ШoߏF7"v~iWY1Xqvnw~=ʼn8˫z -+4h`XV c=g2y&ޚFhH_gʊ}FogQW9W?ͣ$IH -egqzAc_^ x Bؔ,<  L=&q~@`soA=^ck"X+SH^Y -3폀G߷p;EOQ2XtR-1>&  nMM+5>0=d{IOdzyK= LwW"#g6FazԪ)I1] QMJF"~ZZVopڬĹ 씧3K#ꉇ^< ԿHS$x %(0xiMP1s>s{l v)G\ ܴ("x2sC{EGK!KͦhmKG_B*Ѓx`Jx|!עz3g~F -q̘L%@v5hpo\ !^}?̴ 8; |tZ>@U ?w -dJFGyuzp;*x}s=NŒ90Cnߨ*Rk?jwwcgź7R?ʊ#'B7q>,ծa[Ű_H.0?R?MqhފEWC>}[s:ߣ:Z^'"l4`H@55OdJ)J6;/ I#(Am22d =Ј$910`ypGi&V_vuq Ю(5TAf;PPl*Fm?[s4+} lA G>Ņ]!ۇzF]Qmu<4 ȕAdP6"posn2)gz<0FϣZAVԟ{?.I8x¨dEA˟rAD񼆇,gdL&eB12,lr['1־ $\$\qKüҵ=)X:;yqZ3̏ہG|AXQR˝A/)-N)dw|DuDTF:%y U\>}ldSajGwve 1O>(ESGHx2mn: -<)A0PŚuU %d?>Y45#AMYQEӁ -ԃŎ#`R" -_EBp$QJ#(ʐD2i? -[܌·z>{h?.X0?Z'}71*6.:cwk)%"ROpͣ{N4Zn/" 'e/ bs%W y\Bg~8 6n~oD'FوT"ƑjO0iv!8u|V" jj֨v:CwX"Ux<Ř0\haQ %1nel7.*LX ̥/4XBԻ\G' A7&v"V(T -BDAO ToKF;u. X5?c/+w´$(ѸҏwgTM臇1?]gcˣ>=7e?rVw Suz!Hy$ytaΒڭeHr>[ 'a捬- -iI5ި0^'+:"}iGԨ!lFt(f+!{5 /tgO.{`̙k AƉ %wsj+\5`rW;:Jf^oCr}@1mU]JͫDM_?FzO@Q,2(M?NvtlA*tah -8ᦐԜv7/jZFʠu -9jUR I2vJ.P]c|b,kıI{$@8}" {(uUQV&է1](ػ`2-&X$h29@"P?Z v]i <=)#.GFkߨ?:vZ¹ _Bz,OyN*i;PrSEloЦ;P\̀=.EJofϣYcH+U -GbQhVQ cHfT;sV~*"X ߵQ5#Ї9 -F}^vS\Sʼn0JX(^ ̝ӳ?vW.[[3"7>,}qIqVRf @x% C !WAU.iG#mM2k/X椗ihsOsg9[D.R(!.xM}xG3\q-jw dtGV3s,3HtFS) -avéL8XUD=Y|>QcyǤ+FuF**GCyzy -H#ESJ;$6_HΑγtLpFD}f-})]V""dK*w!Ցs߯[T)۠'}%W}?2"vF@|W4;!dN9ڸޗ=@QPINW&xl,3t;:?x{~Bύ£UBC -.2"&r8Ƣa@B 0 r rI;'XO8GҔjށAI})|jKZ4g,9vsکsbzn4`16O+9bX+;!L}I(6v"{q؀Q38W#2|qAϗ=_^E(Fl+Qk5]\GKxSNE^I&x>;<=JO=.GjjqdCr&"qw{ujb+5Axd=VG{KP@E ~Zk^(uQDQy8xi/qPkT#5K!D40Q@\$*P5`P0zNi^>3fϯ1D8-aMIȣ -~h8{iuѐVG%#4vi&Ӿ1r2ꃈ# 1}~?wQ;iZD7G}׬OuwZ#sE)YLvAb;*} 5dL!6Y']uo`ex++KgS6Dt&; )1ߵsm<ܿx:>S0aZZRBƽB)iS p7[݆{ -YӋ+| ҷvz*ZxVGDc}dꠣ1@VH,2b=j<NI#j3l׏QzЇ]GfڈF`Lי$OיHXitӼJ3a]mEXIDȥH*F1s&aLKh#atfT*t@%2@wįP 9'*Ip@^ǃڡ͸jd\"J3LA+`]11"#rt!< PdKCA\ջ Ƈ&vc -sKRy?OPs DI)4 ^̪Q;5wpƕV>bMy}[RQO Zf_x["׋^])ĖW^yz_>!/N\TY$bzv˓eggfUl 0$`U-݋O<9^1F@6bǃpIF⯨!4ONf 7/A]b)ѨK C ?$Y[A]B g HFj(6]1✖+%1 -mitYu($kfD2C[m* J alxR~oo0lsbLo=#+$u]"3]o / @^!-͆Z_{8¶6`CQl,?84'qn/UGGF%3>U6hCԂމ( )GUB u*ZM`e3{;Qa"=B`YX%wXGPP[H <Ú'F |sZ4,q̟~/TƕoZR$tÌb jʏ&V,TPP!NSyLy cF:ZOE`Uثa(bSC\#]ue+D(OViyCkfb9DKm.^Z$Y۩Rdff"gӛ'R_喢DB΁z.`P:ҺĴ? HeCF@Wu,Po1R;&W4XF\ X2L^I;APg=ce1B$WY@HiZc )W( 4VzT՟?F@8l祜{ה7"ԡFEP5Qj@j 8Ol(+@0W9A0Q(2spQbT 9ai -A@] (\)R]kҮxhp{C>H1RTg Av7%~9&IL"@/+,<@yZ]+FyUMI 0Xznp5DA9).QmP9#>>L=|{g dhBcTeȻPi o}!>Ul)\Zeg쇴s^>\ ǭ\aWY5mx4[ߗ:TSId-.]-yXBZd CG Uc:4ݵ䥄hKs:,cWqVDHq+8Zg[:#ȳ:`' g .D qRS.8z-Vs o%A -sn~:Lu9*`ȊHȞR F+V8$u#yz0gRw?iI8zAT&+p<*DTJy/fet2$} -M>uLLpyEeQQ&]F&]+r) -+&c|B 3kvv b8Hˁf\X^gu2pN`GnV+]DNr$b)pk -H*LԞY"aB~! <v*8Wk2[M`-u@هJ[~pCu]W a - -p@,dftsۂAFr{)ܑYJE*>@A˼fGؒẠNrT!UC~oFіw(䴇͂$4itJ|$*jNGDvV*0 ; XK ^^ZP-<,̓E})(gO?~q'F"~~U>+wQOy)ƌ1#gU >V9&[U~x:)UW@ﵛXeŨԳN!`̈(C}Eڎbt06s~p~w~c6QY"N-\ I=8=p+RteyfF^;Z&IG ;b’hXC8=Hs|"y -mci. -P^BujsQ[ ``5vLTJ%PzCqH| $%\knמG>kq? =.r|V=ط]yx]'we ]Uv|dF ϳ''ZvUsro0=~;mC`icd[Zbfbrкvɒbڞ\ 9œ!EjN^ayBi,` -'W}< faQy -:@PJS U!zdYI숫"#mWhUGj)RG>{_Sf}h=n׺oC?MwG&bT!nWAdP - {QlnT{0r~'j(C( 6+0a${,Lis^ԧ(^ EQ )ֺajJ)utCOkY@G ;fᣴ,iQR@m[΃'0 -ZF -mSux]S+O`B#{H줏 .+^U\/LKb߮,ʭ`K,QM.mC|S`=L+`.%OŨ?t1hj0x`ֿ龗x(Qd/^oWNo<{-Ȝ8 {P?tG`ŝB -闀[-JuP⦎HLcњ5Tv"i/Mg)ZRe’Ru)LOq&=8(]7u@(F]W -c,PfG;s9wĨ_fa2(Szϊ07n>@CN;Rև>$&zFyj)}'IWU*WkQێ"XUOd_!8+m"`K=pMRKF % -!,DBn{34kvDk="d¸2NN;Y0$P;|NP:;b\ $ܻgPt#Ge -Ld**D՟`pJBZ|BIIP3DkJTqpH%pHa"*yn`v;qBh2X2-{Ռ[} s󁹢Wϟ". G3~~{R@8}r -uЩ"[)D_AT$=ED)(xq99-XfnCж ->0͛,*7( - $\vb1uN= -SPQ{D0v8>8ž P"RtfG]W'Wϙ`!IBxl/B {S,QCeHtz/ESz]`C)#(]"$ѢecNl V(QZ'DLtп/#HjP 1jiO+EI%()gXIu/wJ~鋨Fs!iq$$yv"#V|{|n(> [ =|OFcυ]ZzF$%g$gGvȭNSmIy4FUDy0wwu`CMQ >(j?i),rwnQGo9`XU)'_AܷZ~|cġNkǷsu@{,7WHJ"/>XF;m9<0탼3ɽo֧(4eFXM\BvCU*O:94mH:|J?6$ 9،P:+v -Ё#\Ǡ㧝'"[-#݁RJmMŮ^ed'jzZ%4:8Z2X=aZD>f5Ds єk -oE"\ ԵW88>;L0Տ* -#Pl c)#`c,qױWO@2sP`&~ |A[ `UbrMnwJavmrZBGhEטdS#+HѬ_#ʍ3 -'Q\Q #LOCkL^L砾Mt4ﴙ.9Aˌ m -G > --G>cw cD? )-n8Q1 -+BԙLe -@6kV;A8,G7y7oAT/pCAC9F"M io 6YkІe;0 !2|:LUtkF|9OĺMn=;3uE7u9S5NhMo%~,C[(P -a|2\!A޲g1:L;EUoC;]k54"(gJ[o ݶĢU2X2b.\n0t b=ԇe j - ݘ;4 f!|vy1JCMա+#"#"e2NAtKHe0k,GOBq~dHg5fD|le,ms -h`p)JQ$h'EqZ$K ̦zLPgqۆ%H6@ϧ0*"*%O1qѿ_3Wt$Ξ(`FEmhư|{=cGNVm) //#XDjB{mu |k!{hM1M,E}=GĽFPqn=Oxp+.u(;qVdͰY3\fZǙ Q9;2Śx$UMj1\X.xvtW  ؛+x<srQ{( \Ej(WZB>֔B ̠; -*NgJwxd)µ(Q -|R!rK ]nv޴iLjtzޅ(&L8&pOMɲ$Ph2͇f;XTnY8T 9"q+ -&3 B'4 LaeZΙ"{]M9q WU_x(6U"nѸ}: -Vf7ڮ(AbXԅEQ©B ;0-  *Rs ku$ҵe -N\."^QQ,6En\"'*B_4pYk$6j̲fpq 9&%^\THᾋ- -n a -jƎPM9WcZ8@,\éBmyODC\LKHMғ ݉4KTI1 -#F7>;a4Qs\:Nsd+PF//I1"U)d -^Uj\;(D̜b>hgٿ$FC䝁9V7sFO6*OCSezrsX%jFvi0: ůN -Pq,-&',C?o%Aoxьz[|20@Hz7eu<Ιp4*?9~03za}gpZvtnAL"H$H&EI -}ϡa -OlC+yDVo>G+u!*Q_p#%GA!aX00OLG(a -]&8w{p+ĠxZ$0Z9Cۃ18Af`B[ :[+#@?2z8zPn:sGʋ#ddW;*foՇ 7]a`8|1:xr߳4%Y,F[=<)(MR=W;/|IB8QtkURP_{!ǟ7q ;sa6k2 D磺T6&/E7Mone?$3KJhP_QL~{e^\G]3{GJ9:|ᜒ_4N;?L~BXńڹФ^> xС =KIA;&5 ~ ;Z."ҥr懪- λ_@G:LT/b[ܺyv4O -x\3\N@p/B%Z"itItC A=iFL%j?W1O7)JPݖ"wD}je0{'s<$E ܻNN)Zu2 lO?j%M{_^UyXA -IC u5~cDɵIy )?۟?O,_ÿ_~o~o~|?7͏w?o㤯_Oŭ,~ȶv@vFfzEt?H.QPTcEٿ'+J`F* -,n󰶿=HRTST7R6WdR8T no5BA!39i'_ˀ9g5w"Ǝb+vpUO?%VA)I3,Rf[99܄kJ9(5` :|TA5l t@G7NSëmA?$$_&[=(d@ G!1(y1 v9cd#( /hTY9wet@6< ?I $vU -2DΒrcyIc~7*z8|c*?ЌL?jߠ#5B %#Qҋڃz T{_g 2J -h15+TtϰPKIKc=kѠ_~hJc7 -uH~GŢjvp5λ/˺+UhFoXs6eC[w~l?uƢq+ף, #0Ol~%X\j -PY]qؔ+VaƎy\+PKGvBɊd+6QzIQٽ}XnP|w؜vZHF; 9M\~SaIrgBL]u3uOLv캓)NXu5|Kw`A^>]ͱd2%N,]{LE6 dH{q`|.6e_$)n -(Ld}vΔL{bH -V֎ؿJKw,'5”f?ė@>j@&7~07FHav>5tC %PEg",A\LK8Ek=wguX(aL̢e0fKj 74 oXrBrHp-gSB -8͸ԃ4άTΉ NUc }c}Ad5Þ=~^ЄWNEͪ,ߝz)2f;9 oכe| F TřiI07Q:4,i# *b-8Z";xawrh3Eː3i7x={ŌF?2YuR 6yqQ%$JXhSERvc@UkOD7j\qF`iZtُX$Ễ%fD)~>}`+t߬P@FPkQ"ݟO@bYKs,!w 'yc[V[  %ӯkm̨+k%qԣt<{"'?)#V8?o!>\ Au\~{ )wP q!Ʀ2({Σ`y{A3(KV%OcXRTgq ˺*0L_ _^ǝ LMn^8R;1ef6͂gM'ݪ=o,rRQQm8Ia,OhDvZHila'QgCtOχttvT%yR0֎1 s3SNZv(|4#l# /{ -.fCv"4l:3>DK3JW &%M0 =뤈lK04C;Y3Zva܇7Fv RnM<#EOu%URHt`ժ.h#ғwuĕ;a!k#4KeIWH4vtt2Co?SvOzqPF`RtrCqNbnvj(%r,' -k nj`L]3y1Mi8H>5JPT -}3Ln]Z7M99|y;5KBj/GIiYLa`D.io1@ -xdiP4}ĺy}>QZf6P/6 |fB!0 -ѠXRquؼbxǸLҘFKc3(kAS:&-~ȅ+DtgusECYOn($ts!z> #%I4d'^Бuz;  d-qD{)"qBIC4~:Ww%v$el'ؒ#7JrB+Vt9ztR1 l8fTtB}=GDer|^Y60Лf?G|4߮br+U +buQ4o`e9{{maЭk/RIӕŮb*xW7nX}l+k2Gk,ZR^kBS/3T8'څU P$$mMb$"r" iK= Iu"t[tVQ :rNJIF@(Ə[/<*K8;#c -UPuu^\&4{=xZ"Ue ̢;, UДq!s|Rˆ7V$b -ZJ_qˀ!uР;M (ȹSI}X D!J%NS$xYAub>e$iSt 7ϛ]eǨ+j&#yVֆ & b HcD'D('qezV쬝 }9A2(,F[ASB: -`6,@"Ae>4>]GQ2V'9\I}?OsOQ:(Z\p?b8g\…g.pYk8 OBء$;"R ʧ?oT$19T)']~5tVkԲP䩴JEH{i {%$Dqȡʝ_']4kMFDvA3"Ɗ R?̘lFAQwn{ԙv68'@9mG\e-I?p7nHe"QoNZNIq(bApu`Um -Ǩ2 )ff߸)>IrwxoM٩3o[Ak<{=޶ 0z)1-+!ޭNkuUi@#u~q3DAEH-FRTy찕y) -%PSu9Wu1cb>?ϲ҅ul lŰ;Q8UXP@ҽ2[7+ -`7''vb -{ <:_{G-`N-L滂,L04 dKw%y=Bo_f rS`o8Y0&'k%3ȺaAH#)kȄ¬_GP{аyEƾ :&a*w獅D-lJ$oIUt樻ŽS7_Sp{a -iSY8]blo)na?Nx R'xjB4Ot[I'~]PE5 c]r|xdBH,0FBfӋN:nQR{(7T;wCj$J̥BFQ4MŤ rz4L».1q&^A,$ao'O/[@9TDž$E~߷{et ?hc&S - Z%<s4lP"8џWb;bj/0lԱKat/}/*H7@x'54.x wXͯ<|Af 0{h ƫ -ޣٙ;072>Ny#TA-+E'wR!&k=%(O^-%BtVbMGt}tosT 9ti0VNs?,oo0n#B e^^c: JO^QE>79 -W>NH\+hnI(_w; Gj2g!?I'bE8责q܁ "-͍sz{|Dt <\zE !eb/)i" `#u -=>Њ6'enq6Ӕ#hd>jLB+Yp -)HVtΦOt>dSL:DfT -E)3xy&jb!b:\c"1w;;T(X 6bP_Dow?Ew%t]yEA*,&wOe:IVtOQK] 50+fbwh~wp9TBGX7R]x V*aPSap,cNZ<v ڏ -FA,Lf+fǧx֎hhq]H:4=xGm󬗞l5+)dV<*LEG v_)txڇI -EhW5 t g}I5 A?f0^" -@8$2F(L5( _F JL<O;\^6z\ ge:A_*KX.WA <Pԯ4dGRzL0DJ`OE1-I9pm`2]pO/{E;X| t"'BB6=Qtl8BtbݝmU%!OWJͮ%a'F&Tm7,Xb -0 -38՞cܤǀ2Ƭ1'ބ}c3n{E\IɃub /楒!-q =Kt6 PVzxD 1 -dӘWiI qC1ZFgY'x ( VxΔ3XIc,GsUEF, zöF ~b|ϗIPǣhc1s݉TGt4Yzw+R eiKySTurq :_QKh/nC쫩/vEkHj!%F}|f:&R S(Y)K1~wxthMmn՘[ԸqxK57F1shmRZ87J'ń"Nq,jh/jUpd7fd7$!uNҬ߭@kv)CC,.[j -0S2^@kXj}r,\CT24ckS'n|=,9>K2Za/"ě=4 -zjtYYL4ۢ& RExŴ!0|eZ0$]B~@ T^-NI\:nᵦ *g3!K'i>pd6IpY.5%x@\j^x#X 7]'ZOXcF -8fX,dv^nᰐ8go>c1|8ӊ7LECx-&:i)j((h RXSFiW=}^>Va,wp7ev}?hyE\cGԛopYOQ7R碤eg`MkUvkvACr:ޅg1 -\Qgue~EΈ4E#)N݇w=J9H[q90\Fh~0.^}jvy4dlC!q?{2}G\|!R{F\tcvs& % ]ߧk},)fL\鈚yr,Fyi®(o3$Uj_dGU\h3'k6:~>30(@$V(BQYx/K9u!$PoRg҃A; _G10~&H.[P5+|q?'8M^QZDkbTw7kQQ{"|{ص>U8Z9rpO# 0F6BpL\9KGGoWLE|Jij yRbyL_d?{ ӓ>l3I^A$P@5 -鱤Jf9Oh|x"I&c{1ωQ-Wz4"lR)B7o^Sv/2+}ǩpkqv(JMb-ځ>09Zti&Znױh&s; Y~-3* -xOMHaef Kӑ#W-8RXq0IٱtDw-/p-$t5y4mZ);iG@Z#!y,xRJ޸s/q ޑ՝L>XCkwqAiXA>N0!hT;@c tkp?ZP|dd@E0c)r6thNb~`Fg~G{g =yW tԎ [dZrPRIiZ;F+TzP<8P f S.G/e*ljӔ+FF Vr6D -A?_&VXan\=AU6!/0Q.𜾝N\_>W:V2@ Q;t.cYJ@#lx-Arc-=j5VFotUK'z|b lM4H8Vz0p:IAZ ,ziU2 i:)ڰnieH̓qjfX]]ɪޅ_B|oj04hh.(|⁧ZX5.""Y$Ò-bVkbk2<5!YQX6!oОHQ$@ztM͟7)H&&MAVKɉOsWRUI+fwVfY@#[)PckC)G(U;!Q%TV$EJFwY'@g$_Y%Ӌ/ήQ²Sa0jr?t`N8ޅ\"qȻbl -!,.db}'D5x :]APqn޻c -)v(?oz [2K=w57ء6 -/|# _%vAÊ+d8LcTz߱%pt)i -^ITNZ;9abT$H R=0钀SRIȐ뒹](jotq@,7CQ(9*bz#3| ; -5qAv]-\hp@AwɞZf$E( 0@2P4GDwʹ}B``6G!|)tDRϛߨ@pZjw @Dr) j4NT}_ڈJYmSdBGz[i*A|TP/8~k:Sv:œ -Nyp-=?L9,-PQ&_G P{_@|b$9}>seMWX{+}JIrT+i$W4vo'3"jNqfբZ/wd{He`|fZ!D d"X)$ؚMB};ZJ,guH8t~dI@cXC~腨1HsOVH9JBy"H9 q阞MrJKgݰ@mS-["{e+MS>E]G%!֣Dg1n~i>2' Ur.4s^R{pmHϰYS/Y@wͣGKN+qqp -5m/}+οuO͡{<FH@1]Jf/˪x(5tpo H85-T"*.3[4Y -kIҖ}J({5p:(< -Fh7=(w*岳k,MaaKB:sL)vس8,y8͆AHw\=zK4_+`8<~7b=GX 21{X*oa r:U/-3yDY %B-5|5fciO;95=B~1[UX|fP>FHT=KY`7:KZLBM%:sXtVs l'-D?Yͥx/+nW5V#P,\um0jǼX2_iP&۩,W I"XBI?:qo]WφNp1;Q Dqxq/ C9PЕQ`&pB`QڸфN#RQF8OG`eQuEGla(>4E " -تD҃HFS>R ENJ[i}!`\>l.%F]I^{=),k\9Y<@Ttj.̒/aoJLʼn}2 qg? x'xV**6)Yl|b6Jʲ,ʀYP -N7|:9`<#YMO'ڳρ <_PCYrZuA32rx}v -)w -/R'~8w{a"_AY͕Y?ۋf8iaCkV3+vWϰ} -Nf]Q -%V %/Ȟa3BJד"j>ԐI ֎p o ^Zc6Y|ļU"L|lUm#,6RQ:tr&nZm2 ,rRsd2\*-_4Ǿ,jS#"*\ckX(T~9U^R]SSwpAz0zoN40Iqbpk UW+.#~2XIڏ^QnCWd!k{aV(F9 G(ZuzaNBIb_(|R GQwmLdI@MlǝRQQofu7m'_I0ӌu)fɧc]D %k@`MSzaJϽfJ F/l|OZ -nq -4N-`S<;?)/ -)-fu@'NXgƑBxaĚ ̻tmZ1+laS%CaZ'ԟ8np?C~x f=6HASurC +XDCؚNl#[,R_d*HBQ.WjYCSd w]Z#w[}ǃW]Hao}EK\37#R6?LzQXq JN%yVF:l'Գs,FL/?X ULI~YS -$a:_&0^ 1KY'^eA|\B=2\!yP?I'@TNY=6&Qj\T~}RQtZQPZ=8]*`*L1~;Qqy*9s#ps3L-t0 BUP@=^ՕzHS vèhۦDD18ӀnA= |]]K h F_t 1b`ة%Sq\Ed>9!PyĸR.+ j[Pz "=! A4PӥSD /di,\Z9޾%8J,& =#-Y49Z#uQ*O;]Cȱ>fd"3FOu4kn\sjb|DU -NUIPs#4[ܻ:|if6vuI<[ig/Y|?V!F0WeC -3(x&pAsI -Re}A0QP/mZSBQh\[W65얚m#4L"zjlHQH1kВO[T+wԥ -1J3 b,ӭQDJ읓 heN5@3#΃'5XjkAH^7#X -:աD='վ!R80xQ7ir͸S,IISAFK-j `+E$>]gF 0H˯6K~`$ (٬Ճ]RIGT #vƊt[AwR,?wA mְ=rbp5B܀%'N+A -cPKl_`-*'!.4 )aݹ>&e@\Y.2,.׮DT. ~;Gy!vڵne!Ɩ%woIMfiAAd)Q SЋz95R*ת~9bl.ް=}EJԥRz(AIeZGJeZ`..3kՂT MUW%2Lǐj/?$o\ ,5Mu 2"J%k\Dg|0+=+& U*1vV|p^`QprP&DGeF}K!,0vpJ!c3^ЇV.rRs)X,WU`] uXU1ja|`tRzQʆC3ȅϋpA {ЎJԐ+ڝ¹WNM=^„Um:d+k=]ADZaS!01I9܇i(mFNOkg:vaR=.2ȳ;[P4sݞosIџ~U: l-f3_=uh1E/aF4$S*ŷ Ps&qC -EH?ND)>Nd*Q`g@s4q)1YŪgh6ǠL 03@dUskkZ |r&V|x>!wYg&"xMTsMWI.R`+KzSUS@! lDf~W)}=Dc -bڳY4L4Ӹ[vBa;FXR5U@ D8 ؍f aLv2ZZ_PLGY7;8 (FP${G{x) -*)7k4Ŏzj~>Q} 4L X9}~5^Ȟj놈r"n /㜹h&LO#i_OQ_ .=pnfƗNH04?5yY%vYu&HOz;MD[:J`-< HD7dDavfgGbLƜg6'L٭V;(]yvxβ 0tA`:ؤZi?q+&߫Cʰޟ#tȯqXYB2ֽi Cn19D‚3 KI-+H;݁ RwƔC-)\?zX6Xlj(l*d/t-&bQE4 8`L-hJsh; Ż*&Z?컊ĩ<ξWD>zB"gRUWI!n>SiB+pԊt8{ AN6;b3o -b':R*hӶ -p,;#0&6V=B$E'\.!P@FTlmPA;&@F%@F)U0*9ԿCz숎 @>0$1bpT%唣F+Pvӡ]hwp6>ۖUe{%&oc\qV>B>FĢg -=EƩ16F!:am}ošU'.zLTU΋aP81;D#B ARQ?5eR'VCiL8N,3a8PvĠlDZ!ZVl,AmB+Mh,BٽE=rzR}Ah{)"kQ̃v>dg-. Yu0@=uI@U#wU99(%zhsrtOiOCįNOCX|䁠 a0n'}l -t֚.:EA=ؖ#!9Ϩg LR -閃#J* :pCFDlF?%3 -T+?ݪQ]t-f4G ׎(QV7}VPQ{3xG[֮Oo=G{NY9[9:FsihC1z1['썁~>Xu@~DS(mQ|r -֋(@RMF)MQ{9:F(I"4z!ը>b u?~)MX /%S*jm5Y{/-kb.$*aT؜T0X= R@Wmh `%TsNLY4T q1ڮcD,hfK% -@k`EL'"4v!ȯꉒa$&&B̘I=d)3{ KЀ1z nˬn4""Z)q. CN@ԥrAB$h'IQE9]+~cߦSv7lyf23&p >Q`4!/yo L .5 *ce|4JC "f(]ajO;'ȋ~μZWj@S|/WX#SB@ؾ\ʛAʣ&1uIy {5d"_r1ÿb;ũEy#^8#"ZO4NIHa3RgHDi5t(ZRq+FŤ4\y3dA6wԬw )p=4jG"m:M5{JRQ%8+>u'+Ah .Ȏ5z{{"B<'Ă!qS9c 3ƷI4bbϷ9y -28>)DGd.MJ6Q_E@G}:?jwL|Jk!0M& c303 GAIAոxX?Pm `(CU^* PɴFœ8_@Ghwk b$kJ -IU9*HGs -TWi1Hƾ4ϭt=!J@50%SXَ)X^-ۂ* -xsOiVnE_z i=Ny*YܥFe6Yc;\P+3/a%Iޠ#+]yIC՞&'P`!M}#7 ;GNH[jU!ы8t!JA"6bǣ@CP9IR{ɤuOlr9 >eG;tdEҟ"J̍kW -#M<)Pz=j,4GZߒtP8׆Df^:.{r9s7KiVEqD !&_`jC+ؠ3DȱDnftD(nLai!áA_aEܞ;D_ -m*wQzi:ڶːL{#,X!!6d!J>G}?ӟ+hۇe-U)8QD^|hqf"2bRQuzIwB6 7_h;g[Q*̓4?B4iLjx1ȧ'qg4Nzs!惆jRl 'hHɚu""w5à uW@h52F)79w ?ķ v7n~D![?1[Miw LU?,xx@ATX|+3NWꊧiWEQ 2BpgE.9[ af'`D~R@[/N a?7i 2#mSR*VEG- #o/Zqq#I2`Y쇞s$Ar:H)'IQ5\`@I -~<p/E.MLgݥ}cB'y~shpkG9w{N"PU z>(. hs0,ڒ(k`uXsDfdy8zaM6ޗxt?'0]YzV|b6_'-_RlE@qPv$(I^];+ GI]bA+2Kο#ID?jJJ17)X^;œD`{A=S^2f'aˁioLЇ\'[o[O(Zh}^Gvs)zz -qqcr3R -:]=U8-t=jZtdI,ŕ@BP#ݨ}KQ[Z5u)q_D>2 RǷ(!WLx"IsJN^NHѵ(-ds4I״|\6Q(7Cap?9TkȼIy )kZ2oo?}g?~_o7?𯿍o>g~ -_?='w/6.~k忼oox}ͯ.~/%odo?uu۷?߿|W(>ɿ_d왱q_~q_*_|F!?߽߾_k 4?{~Ǘ?WoZ8$ 2i".%=<ɳ. ,VX+Kt< c:t;?W% ]+&}~ VƢwX!_}9:Am>Ek[AhkzDy:qtVܡqtJ -lfoq‰[Er}uD}Nw=6S9aB{nIֵG^l#eW'ٸW`I:[>mM7{cY8}\?ƕ׽yrӂz?:v{/}bؼ|!2 --!&d_A<3Ɨe{^^W n%|w6^Q75 \Wr9v6884JJb?sB:^cgHnl^/|ђP[vgAt{v~paW<xvݟq:3'rݗf>0MqƠnt^ d^^W'#Xv:qbyGSs7ϖhE9^wgsNfb5۹3/C?\5<;Ⴥع -E§|yaWYׯhЏl!P}Q2~D\5X^XWylp{8N6_Ag+(?>8:Pw9ҺqFLZU:||u0~kDlut.~#"V>GM=#徵/T';|i;ju"u6*R.m 3(0sǞ3Ҽ_/gz `+4蘭Ԃ>_q{O}=Ȭ+rR $~qR %l#6C׺C;~AhȏAv'Sם0Vܱ\UǠ -KÑ#;[Fq7H#r\PBc@rbGĮ;~g RY+ۉUz cwb"l#u,&t_?Uϼw? SayOy a٨v??6$TG;M6ݶ=y_-1~_7,k -!BFA@5Q[ajbjEÏοPLqB T G Xɥ -+CS#OqPz}tz=qIcͺD{2F4;T@M[(/İX2P3#Sʼnxwwj|0PfE}134ck2Y6u/j<@r7̔)ZnQ'kI "iGP <'S_B* -},-Q6CicE@D;Ą"U$|rB Hg#Lh'H͊'Q<4*OSèH#* CW 7?L1KB8&ZY>U,V ;yooy-Yvmt+=Z-ev<S) \s:l~{ -L?u֧'i-DZ}Fk|Hk rK"uS8WFPeyE,aG5j iy/smAV K%g§Hʣ~P{jzkylד2X67$~0ϋ%Lr=l᷸M=/ChS?Fb$ЂPO,xν\WIhu+oY_D7£j(:"n}Ȝ~0k%IƧσ3Eb+/R#9`/eq"xgG -J 3z4g5I DbluJgD[LYfjlf}Bewzb0܀GfK=*TJ1g4#e-F %Q:J A,֟2ڄ[H-=\YLr˲ 4B_x*Vs񽥽XPfFɰJ)dȡ -7)y4ݪ(a1myI;edlQ^$ZN¬||2qص7D9@u0&7Rߡ ' rF[ճ\(jg+h}*@7`ظꅱvd^Y^kHǷ"<9nظtu;trԼŒD0%ڍGgYbVH u"!/ImNԄ}I̠k9a"+C$}, 3ݫ),U&zH6ʡWHb"6ӿ@Mz%ߚf}@eτlT\##R. ZCwAcM)sJ z=K%@(r,%S&VIʤ*ЀvuPVȑrcIbCS\#L$riggP;:#ia:G "0I" -.U!:,?6^4VbOsԆk$oD >p@GsgB -[^ OPS #WbЧ{B~bri9J-ILXTj% 0JTt@HZJ љ'0nFN,B"zYRhs"jrDn8G?!Jc?>萬\ԃ >Ѯ'&+/-FaOJmzN j&gBn*­@BNDf?19[d&2VLY$9?* @!e媙mJ}͉u_Ey9Jcju݅$KYB -n 2.>PGgPL-։1yDئGa!k2^ θQoT?J%*jV:y|%% ]JȡJ$D= cHgHb%ʋHѝ(3Y3"*fOJ9ab7~6TA4A4/~IkZ -{j&@U1o0$jW`|^&e;]D+cR&KY{z2eJT;"k ,%0DE *cB\xԚS 'hgJQ [(Nx3XHz&4Sm,zBYt(+(',L_ļ < D:['"&*+i/­U$9?IמKdcȢT)fxwVj\IB2yPe6$2KԍS,4r0nXょH5T: Q KocC#(YFR;V> (3`'jB96GӹZÜt'"r)@X;6>"LETJo$IfiNu> 9XǧUS I|x+UTr(Ȩk/$HLgy|V+6Ε|sM@9-|uϊ4CUʪ5^^MWFdOSD('t(gT*5z6`ΐAMAd},%g^%LHw9f|<Yv), "H8&%svd?e%xTR  BU臈U^Pb}!ɩr "KNrn(`B^͋-E23vʪ4ߘŹ[<4R{X!GHdHV,U&R(R^ /ZI|Uze=HU-aVZmIгti|TTM<&fσ&HUBUs%Bx>ဥ"(FzϏX$24L $`2i$ډH)# ˑ/QDc -#ezNnJvaFi® nȱΈIRaޤD1Lbf/EWt^+~_pb-Qo/:ΰ\)K 2%-Pf -<9%#mz*EGw', -K{h EbH&?se!,:E65g-6 epz@yg{x"9DzeJ$`Q\ąrr F"&gbˆɣDXi;#Ef\ -Tq7Iq0D꾤#eD -o$EN"T3t:YF-3oԳE@SPLZE_"}%rL'*%1J <ϒ>)Q)Nus؜ Wdޒws,jQDe#$+RyXqRl27V1eis+HXWAٗA3 ~aNtXS$F, e/1!xjU`%ա6hX3(@fŅUYR-SHR]CIǖ]W`N]ØöNRc\%O/sSs/8KU/ApR6!S/S%5vHH?2niI PY:HB}3UT"}0y "=PiLM;pNtiB̹@tvvw,PM[q|c"SvW~/X`@=b-_Fbq9BY@q!" {_pc5Hy]3+s{##}8EhU$Q0 * ;֥aڽ!Gn7Gα-OGqo( -Ek)SI"5"])QQB[2fD87qI$9Ʋ|@Q-I*/SH8a!6(rpJ.` z:5f"nj8dhs%;Q*B)J%X09+zG< těWfkF&յH\GoJF.PmfEj%@N9YalˌX"F\& 9#9Џ&^TYN-e@:, ^K,/ -/Hx -K1F>,D(%l]U!q OZu$2\Pr( ٥~s5y=n #N)XvI]i0%:A`I0כ:E˿T='3!\JJVUhGp Qɪ~zdϑ"u=)lOa ~tL9Fˆ(AȭX9Lu !Vԉ:߁sȟɒ'qۀ$ 9m)(E!'SNBDѓ:RPE.:gZ}NIb~-Qt78`*8+ *ӉZVYd>کaEn$6*ՉR|}S.ѥ2[4$U" 0d^#O@V JbQ>.%1Ve,"r:Œ+Dέ\/u [^$'2LU0Qcj (M^ üA9HƜ7\٢o@׈.:z*Еd]&¾L2w1;8$.B~CꍍƸps5T8I!D$ +ԩ0لQEA Oƴnaj%"^"&KH[ⒾZ趁r@t8 .fQ(H,Z[0n͙DZ.cq[(ՙ(O2=tWF01O9QQnYb  J5XTlˆry$ӾA, _%+ѓLS/E3c|#-4 d*r*tW1}4c2_+wqs - 0و c_"\ c2GVe;&L +ߩ2~%2GӘdAƙ#}<䳁J2wD2sT#D/9%&CϢ}9IVrm~"(R/(~K<%fE OV\GI%EE2 -D'ZN'o$MpQ0ЩbQ8YMR@/G:uNYl (<$IarJ4\b)= y*R*iHdu}Hs,m\ؒH7Q&.WHQd/y=B%93)䂉id,HՇRٱ&Uĉzv/>d~XeyZd$}]H)sȉ;MhaQr8Q\U=)kr(8HV0-9eAASyUɫG9*p\e:Dbk]u~R/Kf$ZT)gs~I"& -Ev$2oITИ-X  䖝!J.M@2'}Qs!N3V^6M3kFE$yYu:G]8jtWi?e"*n {Ɇ9s1 26|/ -gdOg֊(l8dTYr~9 ˙:lsN.|/ȵQ3ePR>{ tᏯX[rʲ"]ȻLA -6 CvyLҙ.*`6 ugV' -oUiEc_.B}'LJrRP<$nP>,ENd(77Pg =bP,$\ gRYaH,kF'u<EETuDW rD:嬊<J>0 -"nk̥".Rj*A2"NV$LD}fM%/Z %"VC -YR ~P,zhWPEf2uaI5| -f:Y&- "GRC j#%iDž7<9 il$Luj%7t xDnM^ynu 6% -;߮LRIB=ʹ I`ĚA0!RqR'Wq!gLI7ʋ1_b?)r e/j1H}qQ`M!U,iDH7$Dʟ4jjVڼj:E,m tq,Z䜨Ma*Tȡ&݊3?-BCc"7peHhUx,`NOuؕ~0[~SIFM‰E01P}HW^,ѽ/٫Y D*AQT?[Rh H7PxozI/!fT"Ncn(¾_q>,r`Rc='?6+؎ -|6`۫~c9).ת$ 0֕hTtDy}?|?hB|]o桛u4oO%ٓH9S%eq?qL×nJ=xo^E|vVF-}NH;\$IU}G :" [-T7P<ݫ6ΫX@_i)>0;u>;DUp\\$YgE "h&W:SOt)?f{ -t{(-B(*<,dp+0 !d95:R`EwLg%!T[ᚈ9'!p_420AS"[si{/{Fp0#1@I1|ԊVqTPcSԬ~;grr*w&0QW$TI&@U=;>oT;թ?qei)\.M]7MG^φQ:>:1^LqcO\P-}DTWVU2?b@'v9{o++U+!^P;0ସ(QW-#p\t`Z9׽ - =xO4L% 45A %r!aΪ[eE0&!.J,| ":bl1՞)5O  'qw*p`ܧA S|:`$#:":. 0egz_ գGɛO,G ,1,H`AB@ne`xJLOi;ӥhs e'&t)wo??5u*\'i;,G>3$(>wٓ{Ѿ;(]1߯ruqһNwG-6Y϶g_#na7)ԓo*V8o \$=ǂpo9g(!Lo?OEu_| uĩea(Z"A{CIʠhAS2(|f (#le Β!)6GȗLwd5xSd!Ci% S̲RլhȐշMޟY|',D(ȭO'H[ZOna&9@&7MTOD_]}x XMT&)ERx6cqM/E%v9NFI]9a$.]qEN&_FĔ̊__C[2,! sNU#$fy?Pᤤ[C5G戏ߜ}7>z?7Ϗ>yE!#ׯ̢X%_bv~*& -s;yǷO_WV7o z3se/vN3tfsavKwtV0|ʴN7ɑ^Mod4jͩVdx- &WёM?M+M招 ~3zm#n4;8rܣEtc:Ru4" ޘf26 f7tyݘv]/y䟥o'#ىT`>oF{{0`m;X֘VkCÜwZ]kYov4c lgwʴ>5z;ԧƬehrh=κ~jӶ <Df'NmV^Z#wPMkfV;UTj -muǣ3mT풃?ʰZŇ];z}l^Tjn9oF3X{.F1E2rh1rmc{бֽ`x6|w<7֛zmnE;81{fPg̦~V'K?<{l>;Շow9IN&^{i;ٿ?̴c~Ll{њ7Z |oZf2j}Z0m< VƳM7ӏZpze/'uG];?\jx~}su=ݳv'k4XFÌ1x>)M2vg2" ߷V]8`<5FVfkn c9&``$HwgITrJ;juT*wll">ִ׽i}wp=^UkV;0a &lq߰⭒ugsBǗ V4NmK݃shuҝR0RukxьJy4[~ZF$X#|EPFO??>|ӧwjwgtRkc0|1&xOOmp?zwQkK5׶I&H_ܲZ !. ankOQl8>5ڋ$]=WbEps}E1l9']:ݽv U8U|Q{رqvvͶL+7'+ vF7_O|qëo 'v'ؿԋ_:[:;6]=6xZ}|!^ZR -ZOAdNZm+-mv쓩_U.y4Wkxxkg96f ̃jƢZKJ[9k6t08GJri%6+ͅi\N{&bb m` Lp4%-gU+aF8tvwe)Dhxfej5hu`t Bf3vq%NeRҦ6v'°;%dxogw(Hf-=kUpV-t::qmcgj00lIJl]͸?:{vĹv0Fc'o_Oˮ{N̲\w+adҲ!`z Zͤb`e2:8"y> n:ʏ{d;d]~0O QwXh_ LJeȖq7٣qύP#X2V2_kL,h;hzݫס\ժ D2) r U)wl5*qh6 -lxjq룖iMCelj,p!+RiXf;+SJ6vj Ϸ6IA`}4Xܴ9;3ڐ]~lWInW_w|m3@̰8{fn?{Q;86,ϞoM4: ׀:|43d]^̻>?9o}ox8 g xq!p.d~w< Ά+wSkVlud4>oE>Z6_K/]lh~G~`F;/!Q!0^)A.*A>vZ<8LTOF4 E{G=k6U:rivV ՂVmZVcX2v֘AtM\ooCc6,@Äl{/k6v{}`f 11@Wxr2$^N)?z6j1 5;I:fÀU"X[9aX!ְrڋuf,GݫOtqFS?{9^\d8> ' {3;}ﭖ h/>g7?Ytxt+/yR7ջVoEOx;”v'i¦a煏A^ZM{4o+(;9v0<7mXON~^ď|° -]8X"м#sAqʮ]}` xzO5n!yj3ad% `lXRTBmanF,/WP -l-`cTGY= j 3a*)V'5aAh/Vu h?¦^''/O.>ġkIˣ.^T.`^dS@]HQ;FӃ:(-U],ZJ%Ok@6 w ?O:)x>w1xz qҞO 哯 zěfK-34¶ yGjsl`|<[zoQ =YxxN NNh;zON̂;vYNgnlye2qк{鋆4 ~"X;vp?- ;T>,;ӲÁ{e*tac˺;0ZoV@ȴM\]?B"1Ěe;I2n/[FUZSta\7&w2 IH䕟<ϯ`rѲr} ~<WSK@?6 覰lEܝ^ Ͱm3tܳ(:a?a/+sj{/g0K^=awW`B+aWN+#$^Nn²MΆZ߮Aq8}X+-p0efx6mADj.,3yĎhC2כS,)n8 xf{GR!2~!TAABvA6cH'kdh WR}GBS';zm=uU3 k E -Mf7ɤkC|d`d¶٪L0 ގ 69A -EҦ`,[Kl!-;ZSj4J;F}wəi[|z hu* N6"xvd9(@mHvW@~ra̰yNfOOr)l:8ʲKÆFzfWBKpB8]\^6+a+?xIOM*~V+e]ݽg ->MWGWόNG.[ ÓR[:pIvx1RmӇhVT~`!X 3X-ӯĭ-<S߲F}ܵ8lt|!FPArK%kgFkl8Yyt> ^+5"R\h(r_ob[[0do~ߓsl]@BV0x{~W;=k޳B[TV'?x[ (VH< \7 ʠZAGN\OKg-$H{_'uˀv>p`lo7ueѶ_[æ>4W0~q?ϟo~;;F㻶ss~-s4fNW0!rb}onm!+Twl|rZ{6,;XBaX0};j'rۓzpW.0X@(LOΖՆ="N:pla՞'X[8[Q\p HIǍڴkeY,dfim#i2.zv8Z]J~UJɶ> Ȯm|飹w^.1ًv씱O!0eZJ_&mlD7sktZunC&qcx7o{A?p_Ego֞v꺇rVbZy^W 8;ClrF5͝a9w]a[y=:?{^}U29v{^ iùޞb]Nf{2琽'tճK3nwL/6أPm_1Lݞfk˂1)4&߼w'_Clo*S@bz}:SH`rٱb~鸫Rm 9cC@)zAo5-V'Fs -ժ ''8QR V}aN6x5@ H lp{ǀE3C<~Ieg\Cj Y*uR}o".DM`֎$&,q#S".4Cwp&O+|Nn"bÊT`= +]wx_:}KϿ:ٔ w} ?$d?:c -°\lqwy&9x; ^9%c>,Gk8붵^xOCZs nrcQma@[Y1vJm+bPmxN_w/rrqJ%,2NU.h0:xW{DާִVu*.6&Y^k{i+2 @\؎}Nn4L?5Asw "vcҨM:Fw lGHIq1=3[;=ٜA?t쑵 9IQ.$p&ޘY>"hF)Dmd }<O>8B$Bɡ1:nKMOrzZ3L UKfr1X`8>zi:YXa}.} [BB!뭨NҎ݃z{,]w=y„VaA۩a%c; ۱a:gHjaషf6cEb ى]W-3Ԡa/ab=Z#5j#֡rYOp(^Y`ߵr٩U.Ih܁t'qv4Va$Eֽad 8 jwڰ*@q5T;?7H^A~߽Z,^LgS?XN"+>TPƓfcbn^1a ?ƤXl!tSY4[9ڧV%N޹fN¤ Nl٦lz򼻃0m2[ղ 3Z1lnoU4_d6U!2جBi)jTL4&.WO'{|R۽}nub$.!Ύ=SbI2C chx>ms]vFkۥP~zN[,`ru@u:f+w~B&dAeq>R oaZE}{4g - j K|fw➽/ZE.Vܩlq?_w~ ;䆑ПO8S9ƪVqfVP80`aV"+[;؃Q?Y -1AU]t⮡Z`0<`j]s~6sq'/F@T<ְP+A VfeSXϦw`op L pJpPU }؏>![0,e|{.צe6+PvM#ܦT ~p3`ګ8\ xsxUщ;<>s4HP׍1jc w/r"qGg@q.٘I-{U- sm%0{`b MNj-H$6 RS~Avx 6o|yB!N:F5̸mŕ ~OY;PٓEE`Fk2`E!0Wm$} Dy,Ɩy0 'L]Lk%e禕CRa!䉑Hhq`h.#6Fߟ&+sN[ jJ* )m.{㮵jPwnDyy;l5TJJe .yؔvwkˮ@8nA -5( 5jlo9{K4z텟~Zi^!^ 1+" xI '}P bΎa;@az1*~ӭ;0E PJctNw_D)x7B( k@Hڦ*7+2I8ǥ=tz4 g?'c^p70;TO1Oh J}ڬ@#tJJҰmR2%74i7vz֎۹\@fBM[5r:3 G'?Íݥ"(t"R=]k %}8Y5f+Gxv6KOLF dN5`6z - :/[[`aȧE.Ў~Vk!),8fJm;~vlH`?m"bPzWaNqp|OJиe j*|RIfE*,6;eK, ;t|&Z|8 ̿ӛ +d0N/QL݃6%!|ͥثS2-H9#;' -Mgsݓ./&s `K , kaC}pagٵ;4.bSzh@r?LmP5!v*#]wr MNKH64;N0rX6)Bº$wA(޶r0p9kL +iI`UrVL mvoQkMJ`lRnFGKZ'c}"r&Z{Nw|C'Cwx^\^uC* {6Wk}`G78`pIQ:)>Fcm;hRmCCaG(#FA10~lR(a#k?kȋoӋX»JW/G׃9yM?LG] ;E|87xv)繓 ?}<<{6n1T»VGX9</ȾL ׳Յ6C񉊀. )!q`m ϱܿwrD_B<;sp__|OS`J@h0:߮ t":r(8}<|//3*ر WA)j&}4Z@\RIjߛlīa|Mt. $IvGZ<~oܸKmxaMH7X-k``vݟ^N3b8cYx?/.[O׏>in:Y>fwO0p WNn=<877xÿ/_Cho_/Ͽxd{å;{|c3>Mz*Z|=}2O/uwp7ן?|#/9_|>/^? ~8eڏof09Nrw;ΗGx Ldby7[}I ]fEz:}>Y$7~h4&Ǔ,ON -_?ԻQ[& /p?lo~Xhωwur?׿o˃/?9_$W~s|owR4Z>;?G?t'?,GT"?zs]~;kE{w2;7WWO=9jZLYm.\;u7kk5q)]ۖ#ݛށWٖ#HU%*;sjzjgBj|`@x}zeTcәzo`={?O*@@-m_;sS;g${3PRR (D~9uf]?vvf(-fH;HjųGozx!Ble^,ASBcp#S:L1H Y jo>BΦ狝S`bw GdcF%,v;wgP/Lܾb*6Ǐ5b s Jq=uzE8ME3K$ٵs&bџ;sƒ<^F 5Y+*;H.A eBm4Z'2'3OFo^唬Iˁ| -b^+Vݿ|첟0rL}#_OZlf;o<TFm" p1qmvg^ZgVkWw\&*'q:FRhlg*cb~}Oˋ榑fK͝.SgH>3lEl]*5x.̧Jmzl8Wktsi\>yF -5(TD.5Ϭ|Гx/כܩh~1Id7Wb85t?LL jI 1&s9 #6@pMPРkN0@8L-Smo/tg3'GU]?s_VwpxM(˜OdG_+8HrFߙk|@u&[Y{eR{O|tyk nJp9^k\&W^:z%AW %D* ]WT׃p@tgڡٜn|bw e*1;gu(TP U㙅Tyߙ\:~fOjR hͬߕol*+&Szc8 9\Ȁ%SZ<C=EcH ^@T*!ñ)_ӴZ[hoR{;]YT45Npj#NCOcAh9,(H`T,oK@R|\2R;;P"͊Pr4~G8`s͕CKKͩS +,]WEY?uwJ~:qb3؀;rI |TMdBi``t*[݊D:Ss.@.&$\,Z4ca@yN06%jd~1'&6ǥ:|sK2RXq^jL/ݡ 7~zD;z&;yC4jMQX8vE2q#SsNӐFYFȠI$ yPDa9؆5jgp ^O-DGUIS95'x;Q\[$Zl(ҕl4y!b<#`_O̧*:R{eUU>\I&[{n?Rlh]?.etu:M5]5S?TN٤L,=]T,ԖP"Nh1N8fCv*dݽbs:~./E9PΗ׃ ʃh4JZoˍp1ɘ Rj@UnZnNܕ.sN89  -N;ܜTwsw#S$_FNJ)O-wDv -X7~HwiH|F 6NӅY^JLT4VEV(9L@J>` lF˂\&ӋAgs\ 1<n͏DPls~\"򁧖=tz JbevVQ\AyJs"Y_-L1!u?V]EkT:x4``;ƙi`[&/&iFOzj%zj#XuqzŇqHd&'gdL1.~2 -ʕ޽+;y%]uN^͔gn\CZ86OgO;IЀI|ܘ\Ԟ8jÃDuIN.P|EuU2ti(&"kEPԁBeq6Z -tK8 -;XįbjAFF\&J{jMP"Rilu&NC#td@̙)l̃>+H6}KTٛ8`ǫ`MewVȃV0 y$ -dq&zҝ w*V;p.$ҢdnAd}yHIJ1LKg/<Ô!NhP$d|env{lGd= -g3Z*bEpte Ђ㓼ӂLcҍgc 5R0#)AGFz.CISP XsТ[;y5\,FqJ =K- Y%Xa1 .])VT6Ad3QR;wpE -ɔ@W % j YS^Mݤ$'Kɹ Zw3iD3g?sNcd24/L" fj6Y-hti'_;IQl4/R0L>O`l"_لlSu[Zvd~*QZ %'(! ɇZ{8f%VfмTnm!q"[0O"RkS6 6HN<'t/R7s5~"_"˫ܴ'PLH l4##&91t25'"<CGG|.;s$n8FbnTjA("ms\ZWKfh:g #nZJ9is 'VOWvxQRF Cqx$94*z&rO;<%A@@t. c>=Z܅r\bTNP)=K EQnjZq`Dpť3de̅:|CqFGA f)qPj' =yiyT:NpaDl FE729VBJ8r`梦7mJdO dy *%Y-*bPh/j\\:uҵxS/OW_??~?灧pmcրx$ Z7۪`b~uc~>>}ՋoϾO~sk'60"@ YtgV׷N;s>>;?׾/};7?-o)W^'jjSΩs>_W~+y`|r=l݂!y*x\^$In>6d'Oy='_}'w|Y-R)prD)Oz8VIfJљ]𻟻c{葧/t߃t2v4mZ5R"  xќ:zvjfo{g>op8>2Rtd6b 6+xQHStڇD0FޙKWݿxC?N?syZ'חwΞ:{}ݯ~oo~?|x1o0\N$X݃q~D/tꤦg}G;zG7??J~goO&&IHQ=U+WWݻv= /?/|_~ßg~#.ߛˏK\!2a+QI=vޛO<Ͽ_ޏ_O^__׿o^w]fx:7==Ro5gN3Os2KO_ƒS~募5T[o??ᄡ7XE WfȠ@t%T˕m'ȋ}s_|'z哟~fgIQ2p5_ed47~ts偫sҗ^7ۿ_/|?{_+O>I%%# E4*O>u7'xGo}|?{G۷4O>+׮߬6g \'0=UcIqBmwcw=}˟_ǿxGo~??eCVJdDhu0>7;5w>?~ß?}/_߿׿/_~߾>35ˈ?aN>]-;{Ͼ癏~ endstream endobj 133 0 obj <>stream -O'?_?o?7{?~_W゙J71PZ-pyeaG|}|/;?ܙwSP -%{\.;Far3s>'?O?7~}˗X3Ry=$śNT/gx{yd DdFa#6IUxSiwڻ[;۫ssg~ܓu;߸~҅NIrֈ.z,a 0c緶fV.ul}'yʳ?S7_pdHk/,ɣΟVoNˍngs~Kz77z}^g?|bg՚ n7G!/`v;qQ*ѣ+ O{>k_䫯O|}/;5m4*sNFS!8PL"UDZ]vO?x_{7o՟WW ʢIDv4Q?(Q- s'kw>tW>|/S}ŧN6U|i I{A-C]۾^z_=7ڻo|8jgme2vW7Z f04.;zl~ݗ?^}xS?/?׮n.VJUV1Tq{dvB} M&K%n7G$:}̏ze *y,-EL}8K JƍV;r2OAQp(!I18N *GED#\zrwĩՕx<hw`V; -%Ib"*2j- v43h*(+Y#d$Ñ^^fByYpdPl\.R)J\\stdUO -rNQI?٭moxFݖQߓ:rvKkwݮbZ+vsJ>Q{ᡱam >rY0.īиJ0جh&ω\K !9OƛSIRF"$F(Tt:1bdtyTI**Ja йH -M-zcc~)En!)i# ACr=vVg(.BUP"j$N&h& BRsV4"TfR:H2b~bu7"ܠ-,Jx -ʆpz,i2EG )is`>4C0,1+rSn†@eq:i3RV -%>/I -rT8V:ln uq8hW0t: #Kb,F@@ >/?fAF<.1q:d6Db"].ܷF}k.`u6 4w* 6.8$|+"HrYF?lE6::ѐ-p=,T~Z9Ӵ(P~f}.zR: -%WaT0"[J0&Lq9~ǭV8}C13B`b>N#o>5#CME"WRXtiG\HS([y( ?zȨ{Ⲍ,V2Κ'H2 f~"=a/puh?jjpt2P~|1<qäSlJtDE|çFG}jE|>9ZF'@aD%d<^"Ajd~#݄SՆAAA*Bje(BA1K$llxTEiI%=AySP~yܹY|Va,GNtV܇ۭxmfd҇vH͋$= e0VzOw:6P*pcܫyz-r[mA(2 $cԈ`ˈ&4Wty4Ӣ2jh\ - TZǢy OdGGU{'P$t'c،HCv :FQEqTZQ; T6FZct'6E3QD)H1fgP$FtMh.Iy˩lލB= ,aQ f FEC9[MDK+l1(OSrqGwfw5"A9BE[P K^/7<솹Ur͈ϨbDPQ4DOP8G1IA(:f=^]nMAtrC!I!>y &݌ RT@冫 6@NB|3AStcBpl&oj+^O^%MplNyk!0#MPjkя:K HDo< i.cƞ˫ pB477XiP,%Q(x0נv {-#!tl.DX}R|Ph:) Ni%Ji jeS|NԲ WY>F0ZȐӀy Ĩaа`&% yŁS]ޠKLT*f8\u{8SDRzy#G 0La8{dksxmqZ&wIW©l XR+gPסCNSB0Z=w9űD5M:8|"/dDʣcɺ<N$᧋ 5&:Ƭ(a"B#SsԜۯ<N{Q)XtƜfN'vv+uk>FL\"!^y@Y/|QFG1@QUnXǒn7ХCGlvZ8% #8 &(qUnq~*Սd$w893@oxrz%V.\҃BIEӭީxadHH -:Qc*s֪kle^L -J$9NQr-7FFyK~+1T(la+Z3 4'Uc&ݩuo7s^ -԰D8P""%l JeON-t))-6k݀1eDA -eowi3%KRjje(" l7\n@Ef%AɁJ,7iQRSfB 1'fT8w? - V%%/ҜhÈe!b*4V>F$@k@=XHب|6+PF"Սz}F(1l.jLL2Ss?|+ @!rqE*SS ^ J)HQL`0 hn2l&퀸J|^RJp@p |f`RXtN#=#9uh+n$3#۠.{~|$s0/_@ˁPKZ6v8u$x UXJIPla.6s^h?S\jvv'gvNdŘB*("GܬӫZpt1~9uS\`Q![*ɥi>͉ _kDL]f86ZkwV&vl}=`FDlh,9o8> c@:h=>9=ⓥJDVWgN@B*[]*vJwW -hCT89|!=܂y@!'S\+o~25U+rp2\PF[a[l\|6cnSa`PtNR|d J_nH7qxGc Wɴ PS*(J HHQ1|i&xܥY6``omjAF ˁO3l$bN;ph7Gi^* - {nψ!mE0qvDop:SY{ePYNcPҙLap -=>Hȸ&Ʒ=~O!J f/f89,%lvNDb[>pi-6@FPpgD,Fz(ڞ]ϝdw4ұj1jQ*$ NSj0r2=:C9InJSpZk - 8HtY):'lnS{Dz9&fwNrJeW/^y%5zt5ˁu[+;Wnݘ?^ίH0T~Oo^RjCA{jgY38n)rQNX1 U^n;v$Ѡ }nOa#H2v3jhOfz,@:Z3SAp$G">/'A`*P^ 8daN*[{v$4fQU3>?4<%xbS2z`/ZWV.ql(5V+ '{Ǎ8/$3sx$>\Q΍ ^%K&U2|Axvf~r`YoYd 0].o߄z2FI YF%E!Qוּ&7& +&Ni:v{rGј#z;[#GFqN(u@/b H23#(q/D3sΉxfFU{o./|{ GS`A[" 1A-pB1s GF<'?zbSb  LXJkP34h -Eg(3^sdh'€Sf"3a$fE%Z(t/dfthf0|qG07AOrr"C#ӣOvT.<Fm<./x8 jb5-6/d>jL4?@;%maw;EХPb P4㪼0VWydF%[PRsS+竽@FsQ -P jB.' PLG+̓+~3aDh4r8> Arbh4W)2\azqc9yk}gn>{%`!3`2񃙅;Q,}x7 B$ -Fmc4mbnGlNDL`<%@h Yt ApDz##ǫs"h>]>Ї邃;^(D3|w-\fJ(:s>W L:,sB-TaKA.d O=4XR'#~9}cFwy^$!Ƴŝ\io|p9I >&z3E-;C~=Xf;QC@hWRhpB4_*'kTq]t+X -iuˣVbl a.,¤? OlSͩc'/]ϴϫ MYY- FCaE"e`xO[;wv`#( -F<_Cu淗έwy=SgӵuK[8! &Ve '\ Qqx@byedI rᢊct -SZZ>)P8 ʁr46i& b8v3c^.JUN(r|áPP+(bkp;szc3~yr~$Kqh+l Gʌ eĠ@-VXj̞_ݹ7ﯭW6fk)ՋW>w׳Rwd -ը1횢@Q+Orr.owr6?j,ڱr89OsdfJ7Fv{汛.?s~ :cVbxcE.@TN3'*x `*jfwc^W RqPWժF-5G&$NE|H f XwmǀY@2IܞաZI8VuX7ŵk;Jӻ -K,7=-\Z?È~&Ӄ Co-13( {{ADDj*Rjcfg|ZlNK䗴Ps~l0KLbPr;Qߡl.;"&& GGQ7 Kv@1U}>?i -tB oz("P -f۰p4D`;ni)\w8ر1'D., MDb?s %P*tV3N1q([قnOح$Dá(<>@X/aaV;#^ (Uimq*h\eE'/ϭ^v{k9Og5X2G2W i`[& 4LO8}ޕ+]y#ǩIg*%p|>ӝ'8>YoljkH[ mv388<:|5l!Hʩ=ߊX&/PLd2;~SyB0>ե;POBnwpTYz&ӕ8L8_N;o_hfz00tD-l 'RpeyT"բp8՟Z~Rr.9qansq2|3@>=gg&w7/9:r F0 8*fW7.F!vt k z ` Q8aZpGBӏ7/N,,IJ ǧW/t>:$,>@B[G"q@Ad0>d9te8Z2,W+q0vB3 -Y1cZ{ka/}grDp1IriO~vYNS*A͊RRB0֩uV;czADf%\6-mߜZ8>4:hR0FZ4Dv1Y@"Af~/`rpR4QYk/L(W'IIT!{EkngkC$U@DʌToON b(Z"yA3$"̣ݎ۬TB#^diaLqx:ܝۿw~=9GE翖OA@m4C'%*I-A=2 UN# r.;JO4E9&3f1SvMpOsE7vnT3RaRLajqv>l;@4#y"Z^ʡC#C֑aܑfh6upuU/@HyNV2?hN[  MIb.R9l*%9gVwy4 ./Mg%#c0ˋPs\r$5Ynug,muܱ_b uP&pS]Xknr|JT -IfXd1_g#>1GZqQ4-8s}X*%IJ=}n#ťc)Q)7}߇Gonn@$74cS7/ffRRizmi5v(Rrcg>H@:ȸ1>v:7){ix;FdB[us9T9P9 tdd3lQ(,[V%e4k:wQ0$jVMDO;A,Z3 ["ϫ'"(.b4@g+ncvghmCJ{dGE@Hh@`GX՛Z=}̵\{i3 EUO+iE+q>T>5)cO D!._/fC! %l O|?8H,)-:v -(B2d͛鋼*4713N,5f%n!5#Dz@|@@dJBy3 -Jj0HC^w(y (;Q+`K[Բ,A9 P4SZ2;ÚϚYiP]jtwꝍXj:]\̔Tskg^_8@0KLf+ ^z\ZX dhT:{pP ȋFQ8X/&1Ixa3}tާnVX&26}}zRt#G+k=#p0-;KSۀ 2JE^ds *X h3)Zi߽ :+km(-bc -@Sl0iZPكV¬Ҕg3_[Xw&IP !Cixၓёa2"h -H+n>:{ūz;wysz{Ϯ_HǗbkvWn-ݝ ݛ&'CP1͆`!2Rt*omF?Y%<oM\m|A2TGv,;;~/ Si㜅CȠ)iMPSM8NP*~9 L(bz^rS 8{UJV(/JKno/yv عF|aX^hMf5ṰԺgy{QZ>z3[&i_k!?;h椛X Hf6|峮ێº(DvN1|Ғ\G~zܦoJ`8~,TbA`(살 bKZgˊovO@8xk6d'>h w^~۪,dfw<$ۣA.i@~7"%nWc[< 8kW'ty46wkfrFkzb&{Ĺ$ &W@6Je8g 6i%Vl Ez$γݹKn ދ568^,;5LF8֕CWA&[Ҭ1F`(Ǵ,?v,<_8!/if( aX};>^ܸLFX > P0CѱbeXǻ~?uD0!HSeS^. 3=4m?~exvɱ'?$2'0@QizDRVk֔vUݮg{ {&&g7g moA<_l퐄;8bqNGǡo/៌ '| Pr(cbj] gQl׻.jn}l#JwkyB{r#RIV;hV.2I""c~?@Zn{vo=ӝ[ɏ~v5e%D~%_^ں{l9bt{.6v/}?9AI<!5O/VkK<5{0r={&Y?]pʋ_T8_mݼ}w쑛b˗D7 #0GIAfᲬT A&/aDQ/2y =)jnrjz>)W(*GI4D4b J$G`{(ڣTTٰC< ̻$ikvVhF(?d7VY 6 䞓?iruZfaX =]T< IzyJ+RN8:q<@+h$3q d < HDJ<3- MkNmy]I.N -jfE%-e+\ EHr[0, -pf#Et1=vuuWݭݣWv;w{al^)]z֌0=pqea$;]̦;3/ømySٍOuwj۹bkzgbqo|?3?w>쬗5b^y%OA 5pQf3WucKӌW:Zkv\|TgۉedVwzMUR C? |,ͤ5^AQ덉ӪӒIT0*J$R ^ JN5˜ Y^NZ'e84QD#GЂ`據WwEɰi \ZZ9Hf߀8r@ !EQtug`@|!A A$7z`n-$m^J8kf״RDf,Y5+GҶnl@bkQr(F"@pГB5CQRm7O?Wn/r܉UgnMfX!@MNp0]n,Zr(a㴣Y*fn/YxQ05w5FG3[ٽr/w_y|p/]}8={קVnάYݾ;xL+I{1ή a#>RHw'_4@ E0ƹv鋏n b|ƙ7 D g.YyhD0#|tMN֮uA/!IŪG8p_ 4XLBw}E)XH/ϻe6y!+IDjLқձs7E2:-RPH%ɸ Q.f6~; O"?5aSsvrʈu5)`H :'tq=Y,De("XNNUZ,҃0 1)$$K5qD)e$7W5ͫ9ndPKJY]X5#d|T$j2LDJJ`p*;IH\;䳩( 5YMM.ǦҹfD#YWͫ>ٸFR eF[:sP4:شjAUQ=6U\zs7 ^x~7(*og'7~ ;*9μd`T{2]9՞pxt~.6^z7= Gu^,lݽ̻f뵅jKPTru[??9k7?/Οw|,*˒y3AR|Uf׎~G3߼[dgGcs8,ch^髷n<rӾ>1zX4 3~g|RYCq00Yf(iN'UXnvOݰfNy -)@7HV 1!?Rr($J0: A02xM+ W:`qN{J,2HTдR?{9($sl&,xl \hy`Cr~!rWs e$m5,@8UΜ8}cnrDӉq9OQ,:M0CV !c*k q )8Ǧ` f]d%p|2f<ՒՔ$yٚH1I \00=a'/>&h@PfEjM̜Yؼ\jYLO]& Kb iHjV3'+J9p4ZѲ'XDRv{kSX~;vR75I3qVO],$H~6B=]?]̆!9с8Ga+F a,+4wtwRh>Xz\KnȄk i(Eb.G, |xW§CAZA1 -@~Rlv? $`LX6ΰ.E9`ՋXjNƚ=/> ZT.φC$QXu/t$' -UpIA?l1S/sIsяPJvǶB4 4ߑH`-aH!ADt8@PqN(`D<bҹ^<ۍFE5e5qEJzFp9/jQV)ފ.8 n遼 &%d( hD.7dLQ1 &4%MjЏ @ 6 8y"8>  -&\OZP -P&48* -hd( -Ó' /B}w[PA|2V3Q@d0lq\=_hJ lM55ñޓ -07 8*B”(Dj:]Q|ۄeG@i((Ҹ CE`6ᥒ+RbG,+D,j}ɋu]#NpГHIףaP@$"DB$ > FN< R2d!X!##o?<GVJ V,E*8ԟb$( zSA-ID,Gh[YM|(5˱~ yâ8>:n !H4arF>D ȡa0 >X"(vp< /kdX)ѨLcKTN #AF]T5Iy(H ;6ŀ "@KM0!U9wI,u=D4P *Gh)cRmˌPdU9$Gy2 -s-H"i<" - -(Lp  ^h3׺;KWw7N@cQO <dQ"LJ%:/a xB ¢~?\醽8]U\Z kfl䝸jcCC4 r -҉J3[!qt9ym|{v_{r -  O:ptcE)cݜxj2՗}GՇ|p{c!thY`)C`X"ed]U4&^5lƱDFh0l Bvks/Zف4@ |(jRGsN02Z6OX4hYY\><-Z[M(BB!.˺@рR2 a3=՛śIix'?s|M  -1$>"*=vv \<7g?ԝ/>k˯_z3N%s"!0 hrx"00yMlĴNl3=׼sikKo>/Ki op QO ~5Țrd`j+ MI"ʜ8 1 T,lu+rfB}rkr__]}A߻yϿ컯,v C|,4ᣓqd*\*F/iWOe7G{qé7I 4<" !HF u~>I}}_|?3_}_Kە\! ZYGԳHrKuu˜ sE$Zj[:WK=_ytw}oc\o -`pT 86x\$%Ds -챣fĹ6&lh廛_~O~/]]U/`AEqiYؙq{q _|瞛ƒ~W//[plB,QLq68mƾ>w3϶ɩ~/?>;W?lL:9ʸ$Mю +ޛ7&^:Wxt>'͏?|xW߽7{Fڔ#0HrBHO'&><%///-&yŋ?_7_q\81S lJYT޿;yg_?y?/~O_>OJEGD0)a`Y|9K?\G/_}7߿]͟\{t'A BBF=Q+iBzyK}bs׳y}8፿K|v~xo_}c|nVv# St_+ݕt}Ip~̟~v^?ǿz^?><X0va3| ԃ-- Ms[xs_K_o:X,\EVl#Kإqꃻ_~߾w׿~_~]ovLU$ O>=FLp*kחG=;oz??>G^^bDBDY! u+Nb*M%=s?:/;g~˿hopp囟|A0#pv4^iCyٞroMyqxb__}ϿvWoϜ{tkh,D)i>qХ~4.|V|p??xj6Pi#D)'s9&'Yp*yw+>~~_ZA{o-K3sF`R$f/jLm'+.qf:7i]>s;~k /?zmtg-V)HW$R(XjN ->꯾s߿x~Ͼz_=o|_pBkex Zjt ޘ>y~r+oz~XRtT2 "pz1d.7g/_<[ίy_k_|nKӱ<ȩH%3|b`ZC񍆵?K\Y̾p敱o̼yclG?V:|B/q1kbZrLE 1QT&q@"BrKB5 [+rgsƫwowW\/N\W#QX(LuYYDRXhKv_~qo~TIi -#a('vw -k ݫ3$~4t/>=ve9wks50/W26iLZ֒)ʖ 'O#艓A7I*JΖ DKh*&j%_3֦+Ť,N :b -թ*LlBʼn+G7ia+'snʹL*(d'"TP`@A`[Q\  hTq!C0"6A1e, i4"@PQVfÞ覬[LaBx-HPO/CǞ~eK%F4URpjҴ6c0|} s=e(&la%hDMt320YN΄fsZIOw{$ )(?0aAcZp8 -|2 A,~# 4l5MǼ_hCQ TՒa7u* -1I!x,գE P DQiR(&9n4 ##PC`][VbR~j` rd3H%}>pCj4%Fd '`_vD -KR!_aR(lr'|T(ף !e/0C\qC@@+3"ĀGcOKi7Z[\znZXb>]uSK# qr 駆Ii šnzOO?Dq2^bU7{! (Ce)rOFOBQ -G M*\7}0 DtAp~#f|Ҝ__=jMlts8M՚ !R8*\ʈ0&A(vwx\my` -FO:MAt6!-^,IQӝ)Rl0BQ3W*Fl+. bN*4Vr*VXwRslg W#*i9Ϫv+(řtLs?*Ir#<^nw!5FT` HO?HE$EKRPyY*qON4j=YXN)F(`s$F5˄#z `d - jIyaQ*4gF$)& %HԁNa,ALC9!!H"< mAoD0%Ӿ0+=e%rde؜ 塨# ca 2)N[Nϲǣ=hm] ر!APAQh-Ӝ qΝ<1R˱D܃J{t#gƭTb`m&XGB\2hZi.e뻤 'UT{Jufp i0ݍf5g K$2'p*Ai EN*T -V%g;VR7rk~ڭ\c:vVQj0jT @Kugŭj9,NJ9IB`Q !tST4 !.LĞ셓"Qi߅Y\DtzNbm$2r[X8uw wJ$ELjE"keh*D:>&Dzq/rCRFѰ10AH&ۯoXwTlG@WBbLΈrJSu&]IR EAj8(FaG5@"*xfk-#`v1"%=V(}l0 B!8_<)ZZV;mR㤼6KMU[DdAaT$ a(YE(IvO=j^ 3^wq09xYTTe'UߕzZfKQ -TE.)JHܩvu՝7Ҩ-o#&(|m:O]*${Nbrvf ͉ k{4o -/!&NL.S{AHO@hFA! j-[>mǗ -Vbjć}!-eO !0V&a4 ݙxn$р8F'q UZ'Vo3r։zͪV W*=0kRŊg ͳ7nQ42,y D5{5q>~ -=iNW2:X #1-չstʧykΗk0nR#WkL\]03$&4Lڄ .5s6Z6v(̉R笝Z.+'998#js]DF.y_kwn\ܻ@-hzͷ>6ݱ!ES=*iXy:Twr7[ aĢ۝[ؙ0>s$ $FLIo+$Q|#_9=1wFc@*h4Z&'Q"0=ZLVV;fRbkC HuoE4# -FDsˆQyCF&Rk @PrEPR' -b'VjcWw^{Wu4'͍ztcL$By4x%XymĦsm+Ly2~9w-=Բw& o2Uژ[qKoٝ=rccf6STiXߚ_s0Y:3WuwJ8PbP7c\SrwvO45I$k7ͩKLޔ_ۼ|\IA؁`KzfLNKªlu] 93ZlI-sf+ΫVRNW>,/KFG'9$,w,Ҫ;)3 BRњ:Iӛl6)OTBbs=G˝e7>|0b"DMLSGɳC Ү^{yn,NZ[YԙJaHlډi;5o$f8Oo Q؋gi<8 C$8#k`P<~"+'V>$S @e'R@"#AeANf+ y>0)Nj<ͻ;ֺV+*vk|:Vf|ٻkeVsEj^/UَW6dwK=+5Rn}:S\?su'9(3}^gsg/>;zeԳwKӚ>:s0HWY6S\9c/C/_1Vz<~6x+YoQF|)Yܭ -ZS3Wo}pB"ApeRJrzy8pkF=ngbj6i7Rk.x%SF<AN)%Jkƙ\\sfqF{XxsZd [% -RW.=k|y~sׁ_Pfopn뎓[1|~"IR,5/1U3$ VgONjf۩} -бg8n!Gcj$ `PD !&8ʼnm]rKPf2a d! E&'A0JZ c^,%r+33yٴR86l*Z咀&Wo_zvaE#Ӟ<  i~+UEo" vZ,Q͗i#c S6Aa“V4c'>̺1Upt̢Y\XX87|0-Qm! IXgܽ|u Q@/ڎ^OL4jዯ:_X}ST=}g>f <hHZWE(6NoINT'촱{-9.'W׈1?ߔڮj4T]Z,tL-\ 8)WX%)0k\h궗[b`yL=1}" CɚOX6yQ˃ -ŗ2XbJj`HMXXG%R rLnZ &*m7b)h -ZJ5C,J!Qx,.yy;6[n/j5nfZQ 3͕74c +(76˝StY0qij  E*)dz*[İ1'h=Ev7Wr8#AQK:ZFxQձɥH[֩_[[frY_Qf7oayp8!9u%`G g^zNί\q7z}oiθM\bee&Zxfl\RL[u{g"xͭ뻩V cS_z Vq/% +3鵭(>erT ^it Xg|f20@N+KSKG(alF+7ћ09sdryxQɞc6Y𩵭+VS` -6/mފ[%$ʰ9 );ً eAslM14 RiISjҥىDa5R: H=uǜDD *jΌQi Xqg+^p*"HM/䩂u(ܯw!(G5FmlIF8Њ@5[۹|1$jgA$_M6wtTfkNI*'MŚZg:rv&aDJ`  ~+ͨ$M|>^;v2>fd$thLq%vJ~#!c=R6^M$z;ygRZH-+3++Kj5=F{^a A @F4>'$'>Ќeɩ.~'<"`FEd>4Gp&3 cÛI`9Y<=lϾϟWf DЊ-\ /~EM'55kh9U0-`T5'\ /NҺA8:~ QTً;8(Y>]Ӈqq ntI 4ڮOṺ7 ۧϾSRM6Vmц4[ם`|usjt -10\)싏FCL5ywu[>g ﷠Iu"?M_8YNW?Эib88+IE-g;f9Fh$4MEw29l$_p~:IM/V? -faijww^3i: t{m=咢|/Ed@pQ3/kFG/!% KQRIgݷ0bjU6\TI5ҽ0Y9חn]R -P`jY>1;ߞ|]\`{KA `C㴿9 Yx78=7Du׋.o֢ld$pyXR֟JM΃W*jQ,h.Ӭ{ ПR!%WŅ M^ {CaZi.;qyqBY 9/?nz0m?!; N+;ܷ%_^jK p\0dF {-tٙHZIv4y*ӟ忞@9 -QJQmv-b^s EgGϾN= -]Iz`<,s&x@c)k4,]wUVQ* ˞˄H2mw寨=U'""cK-A9l=/<^/H7y3xt[/9$˿^8zˋWTgmwh6ΎU\&Ŧ?8?Az,v׳VG&h\{4״T׻qv:xóa ̗SZT}UZb_㽯U{ k<"̋ ;? 6ACA$/.-fz۾dQ6E +Jvsq,7_'ϳjmFnh4vto{%pCƒ7_M;nϡ۔k[,y~M*j6ivD[N(qeHQwKۛKqbG߄Pd5W(1Qb8:`| K -R0v| 1)I%;\oj]~me> H1CSrUmFN<ϗĎHcV[_,o/ot<Z2>DE4q_6MA-$l -"?7_qJs^ -ro#5,-qs?Mz`S/\9ne[iĎ78ߎamԿJ:`fqV/xG'ӛ.^*r>t|8]賌~}\`:oXKs -Ѳ^}gw=gH\"ޢRwPCۦﺽYV`4x(Zߍ0˶63U"7ܩ)'æVۧTPz -װQT`U5m$ҤCX@eʼn,wixRW(B0>}?|cۛ&L:N2N^R\eΊOҠEU~|M*Zf9]_$)Xf|I ANJ!h>|{pcXBR&jU_ ΫK981kܥ(e;_r&AtȰd[]`I,5Aٱe foQ~CF^a ͞HF;Cޏ|dN߮%:.7mCAiWHjeLS?@Pt`85]t6%+T=vx4zĎfBၩWYyz텨d} fw~{VS ]V=ne#ln s`fmw -φIG$  |{9]QN.[都>3ͱӧPb {tb釃{iM_?v7^wbN z#լ3w߮798ӻOSǁN\5iq쳿yФVc^5Ouw5[9 aշљVG; b~#߸ %~~>ͺw{MY!a-OIZTsv_zM[EQSUBHrRjWz/D×=Nxqxd9(^QjG$kZDxz;Y|$G7lL-.DQ+ÜqV#tzf۽f1|I߬NCsFwp|*5嚽wUBII^S?}·ZtŚѵqob4G:)hZUU8awGgN0E1N9H w&ۢ{Qq x@q5|ZWAL~vH ņ9Q ;1xO6njLWwf R>Kݘap` ۈX qD%N]I.e=ť'5bT4M=C7>GuR1Qt8q"ԃh޾^F+1x2V([t 1.[-m ۴sEd=a2(EP~Cq HQ!tn-b-㾌}lr*)EGM-CnwG 6ʏB#E&PpUt`!Ζ!"(&EYƆ3]7<Ѷߜ_Wz/ceVJ_ҧ_vz$v<畎,d@q^'ݧ,(]e6مF'0+f &Ie -R,<:^r,E%0i~4Z> =9!fvزfkGe"YE}Sw+ G5HՋ0>^fC$!89͋;=uV -r)Yls^Mٹzyu!?I:򣥤Yaz -~`<|^Ӎ\ì@vv@щn̋ -yŲ 1,5Wu\Т^oz5x gS]Joc^-"T٩鹻"E\Y[ִMv3Rq/h6vS(Nolq59t ly<7OW8§O';$uߨm3, kBQ6Z/>Mh(ZJv24lۅ/X)a|4'HjW;.Hy{S n9<˫pmR+i"$i]iuc9M{(3s8,mgJh!>ӢsaXsS莇3ݧx/e@BGXTٲ8> NLg\o4iVA<[ر[,@";/oS]pW1 0:g[V;hS~r;B4}k|r"$N>;1N7h(*Hg ;7U8M[FCa]rO\ E,Hc([AG=y"RT + 9\ q :ZTt{f/`,G; "E:^ /4 ŇŻNNxq}I2 ršxܰm q|kr1莞yVĻ0`CBzǍiu{7~kuzMoR}Y4pǖq -RrrFSaUͩš5IbgZ@.: -x$?4X?}] n-/ Ba"^x0h>SXv.oM ,ZQz!аCTtg> en*Q;!Nn͖kY0>_I[-SFVS㤎b@rlҸ [qu}8dѩݲ.e)zի/O?@3< Fc|%7TG_ɡ tL;>̫(C.s",$U z\E Zv -ZU_lNn3QΡ]Q, ϼLK@DU37%Ë -twmݞȵY{%QL|o:#^p[-"LbM>39jDarX^fh ;U19%,)rEן(`.$  ؍[l&|suiʠ:W{y_ͮJK \p#ꖧ!wQ~bykOay!Em'Pq\D3PA;;|8ZO1$}Fir=I sƫ׸z]DSƀ_͚ ߼ϋЖ4>yZ$ yy>[q@_Xg4rm~|_b&+]9 npOwI)Rdv,! ڜ\_8њ3Vt܄轨Foh*4cC}d#x;jb/fMMu;/bkI" &"DT;ҏVZ F|z -٦Oj66yf|JEe( -JJOjpHv+Oχ#$UiٻEO ?|Hً)RcΎIJit{b-ϋ VIvB*]/>,*0/sX*;(I<~=/ƫ6Z.91kZ_1g^tvnF" 3R~w}۴{_R'YL5$V=RT(>!&yL*N&W)-Ɓ΋kX 7:#߄Ѿ"=iƧ_Mp I oqA![j:,_zhfInƋZzRG1ׯ>\< -=k{cc?= 0Brqd}l0LN lge[6FXr{ƲW,v5 !Hp(|ư S?ّڥ\RaQ'diy8=ZXOәe3fuX ǰE"d= 5x}\Aޯ̫3~P 8>4!T띍KmJiv[mbMw2 ob^䭢 -RI:G%˝彫9R Lf Gaכb@.槧_c!zM&+xcd$8[-mT `ZDQaW6MwrQz$c-7<}ˁݳ?\jRTЁv ]/:T&m]EjbJtVi7=4lX.g؜r^ÜVK(Y.n%1C u7NHk4F̳f<r?teVC<3|e} !yZZM0/.\o%)P j\Aul*Hϩ$X(؏W -3"(}]1bEXrb2)Z쭦:46)K1zZj΢;O՗:+P2/gK4CK̯ -GY0lH!RՀ|rdޛޝN5{:@FVZV|u}ׂ)lv/4à WW5&TpI[TJKk"DE^<Φ~8V>H䗢~_(põf y92]|t

HnwM+7.?/,g]뵚2'pU] cSPo: ?9w4*90{5>mVeXrBB3zm<M.(@ڤ׽!󸀑 Z(x,ͽ,0G6"RLVo4 JiֻRuߕ>$t*yh^tG ߯2 '@Ò#b(Nc\60ORΌ6mqbNB8I 50>G - I#h&S NezrI~uBo6撒,ȺDni巙Pc:3V ۬uξ~!^op#)Mmѽ cϓ'4 sr7n%׭P9>”D hí9!wݢSVZ6N#rw5 2/4l2ET}=./D1O\?MtE t%f --w7vwh͆c;%TOH:>zǷ'`6Ť -y؛|O}V> #d*` @wu{ّd?by3Nљ$|xwK;ޣ(/"jC՜(ǐmSÞr M;9>܅‡)8 oz/قm{)6 !M]ʬ|Z^i.7 b7ۿYg4ޢڸurC**8z~%GG-o1e/R9} aƴ{cF&dF&8[#Y - -~DF1$Vx~j ~hO -۞{.؝Eo߁%dI=yzaHrp- -)ɋ#FòIu㸇1Itr*INMP\nxfZM)5]X ӚҤB?:ZVCVsUgAߢ]䣠L kX}<(|JVGetwY l w FCO_cTWI:M*i/>cGZ{Ckyh#=v䡵ǎ<ؑ;cGZ{Ckyh#=v䡵ǎ<ؑ;cGZ{Ckyh#=v䡵ǎ<ؑ;cGZ{Ckyh#=v䡵ǎ<ؑ;cGZ{Ckyh#=v䡵ǎ<ؑ;cGZ{Ckyh#=v䡵ǎ<ؑ;cGZ{CkyhH;if?_'O^?oE4Ň?|{UylLOG8'9x_9{~m_|7k9M X7o>$r|/ao~X>>O? :<|nv_G?ϟ}wY$,o7_ܿK!g$Z7|}S9oKa$LN*} x3iҹ?\?'q$zruLVIAJ5CTe@T${0 URJjTQ9,6^L*tx9-+mJoUuIi)oNthzՙ j(YT+ۄqZ\i( tg-k#^(6ԁjtkǢ>hVE 1X2+.h;SVHD#nwiW^\g[/=Y)g4N˴wt. ',Ilal6:JGCM7Z.(fCO6$p4ƙG1ℬ&I6:䱦M{i;y=`9G*Y١l@S8j.DuH)E>mD!}sRҰҴ* mc*k$Պa"%'Vi~RrGn-{/'7GJFIꦿZ}䵊bC7</>vJT1laĂazӠ٘fFcrB.#Ğ %Oxc!"O .F&Jg& P0(tzUY7zNi -&fDyʋ#ܷMIY T! :b!? N`9BhS ESUhT:ն(A,1lh4)39{Xhhb qrf7IreNyן>C,N^΂l%$I݌6㑽 oEkUJ{?^S\ؠ,EiNQR}_i +cGyvw>Egpg#o(=?*J\ ,,.Tk+I6zGH@IAudS(4둚'f1/(=_l~Z8ݼ\5{^v+n\L_T,m΅T6Ѕ(u/jھ(V%Y~ [\bZ,J2-8;!ͶS73,Lq<2Qe7F X&]Ӝ" 0-hj4vts_7|uQ1H!03Q:a^`!5[ `:}_'6Ze |"A,ֵܶ>(- -=^m)a `1) +Io|'ҒH!@{"@Zadpd;|Э!ǒRnZP0D+[ ÙP1&"ZWpxfI{5oUGүK/^5iEPY0R3|!6lj"50WiO,odcI$yW?-N~~#G&֛:B̎o-{.+=z ]Ͷ$ɀbf(5c?_"e81O3;8hA6Z -b -!CMxkMt'6Mÿ&q,cy8+ț{\ -l82 !蟞 wk MeIAL]]45c78scZu`ԸAJ? d06 -|I1M\vr -0 iOvXhV˥eS1Z&pbݭf )vd,#r88phXMӉw) |h( -y>4y=|K -+*}^aTm - &./dYlRVe՚6z7mQ:t)4)"W<âzQt2n0UslV/uwfǙr}+;?*dI+P%4 ⣢wXjsAJÝ +S@0n.mwVP\As-{+rYv6=5/ɪ>Lj _">֙ -= `߃2>%%pP< Envx6;)8h^XKH}EiL,[⯵jТ,lka][.(ʥӦHvEZfVuefӭǃCmI=D 325rOF8&GhAtK-Y'BMWB([H5{ jl8 )-$u ܕn"V cr̅_ _ᡮYJ3'5q$;ohl{94^_DU gB1o  u~>_:/z/,wS).e0Yy:_}voh/Bk)=t;­oXӞAJ7/v7OAHDHz]@4;EH`F \X7,G* D3X{Zhl ?2 Y"-Lr<8Jձe~eKAabYGh}R ID*Q3ftD ?\oRmfөUuMHȱ A6m"H;%:I(-c֤Q -^SR:~Q -m- /ƍ&c)5OޒѬ S=5=XcN춘{бq|6"skӝR4Ƃ֏۸<B6AzF'w3'RH`r%c)+iS(}gH^Cz5 %:CEaѹa#~T8AӘ&4+8N)&=૬mԴ`eq"YL -"ku4@!IgI=vY+ q?SQ A3(sYm}NC4"x8T†f';LTI(R8{Cο/l4NoA@L29Ǖ76Pg"5Ed2;o5Op8$TԲ?ĀL “OͺXc  Nڱv]L+esfLQI4c;#UR^#[srI쒠GFgj6ʯ-W8;AaIhkw_ _:ɉd+A(>ī֍omD>fRazA|!1J8yB.M{V^r*-pZotcX2`/ޢF$Bql$32Ӭ!E`)Y"fjuoaDZ -!1#K -"`E!Lzf0G{FZݤs -wCB*]T  P2ͼLXK-` -d7D $l )Z0r~C~B*l苤t`HuD!1.EW3:о}o)!G?2L@Zb& Nr⛳Zcu`&~Cj PYeo - 8u_EjU$?C_s՞HwIiD\UgFVWq`hRsYfE{ʟmRu l@Zth~8:T5ؠ7rE1Bx•Ż;] -RG -ށ1x1"=EҴ)IY!!1RT*Xbɰ)5تMf\<ȲE Z]Ǔ c ĝ"x( -drЮ*E -:,m4dU.pX6HےԨ$+l-"[81 lLJK{%Y_"nA-MëAE%M59H%Kh^ nq{xq}o~b[Ǧ<)\ƈ,=3&'ıfN{×ͫҤu%GwkZc/Xn>0ъ2_:0ITrN KIH޼˴w.3 dtEΏ ?⯞M&ܥzAs;;5XA -ȫ_3U.SScj5AV*RlSE i" &PR/FKJ^_kux=8܁ &AePagOܓNǴ6 -+Ͷv'&0n L -YVnu,j rxK!$1 2FVEIqҔuc-jBt(O.kv|ɷ)KUtxliJijp)wp[sȤȴ4/P+AT;!JNDcǓW9 d #륻W/~Gt,k}Dl?{olMhܱevOugNݳM:>#,w5kZ?x_MH46D /0>)kCi$cM}&4c-",pbv惫?㤰V%1N-sTo w`ggqKi^fWl{{h7$"! `. -'z l`! &R[{ˁ]^w20 -(I'.p+ &.SRQ,s)/pOjl1Ky#tsKXHÞ -r'JLa9fdOF tM0ņ98R)`ؤp*䕗bC/1ݤEDyyŗQr -qE. gqkSp[Lf0b᫄LϊevG9P86%<~Pn.U~3T慸M$5ˮӗMrBB5ddl*4ԋ75#OOVKD`yb֥ "_Ua|+*b i(.LaOdN5v3 뀈3Cyc`Gh\9],Kj#׉tԈN6*6ă2BnG# 9XM5f;5OHym"Nڠ~@(Y0AzLODh夀3@AkiN9(1݉u>夊0̾eM{az.j=XxhuZrO[/BYg()f!qo iHsR[R?PqKTzE<8i5{(jW G%%( L,XEe&WR=cZ@}M) Z1`OK'9 -)PDOdq"*dej3Hx/bx+ݡiBD5vjH4&7`װdhZ80M1AjKy\H#xMFEtYAƟ>4:-#,o5]PQYg2MF'`胲s"(Yx7Nx#Sj1[>Y4[ ;9-pwL;MD$0._ٵ0Y2Ө1-(,duNI`NoXsA@{6SPlf6 F:qR3V7:r-y)-op4|4Ya29=\ !-jd8:Eʧ` HHl'jAVAamNJ1ޔˣ]L6, oF] ]Y%`LPLerYuh~5'' :1 lKE< L ϥJvB \" ZMig 0k eM)8(բl`"rM.F@Q{ƮOhWF6Tȝ$?ƒN+˕O{e{P -/e+TdBb amAZKX\p6ɠ0 >MGns&"QJ&RG:cG7E*4WDq;M2T}DGiqPY~ - n%yp O5 5U~6LJ3( (*A -\nf0e8V?wk۪mgԦqbfœ--YcS!B(D:EKj*PuCK ̱c'9;0ANرLf;0}s]wuNZ,O8ܾ}}vb aL(7yCN%1:G#`3ׁoBX- }ɯB ۄThD1}{^ fcDw{SPn0d H~OBnaO2nNnh7; G! ?g>1{.WgFFhth?$oxƨ|@*%f{ӏ6.?!iШ ->N>NA>P{B&%8 -dy<* I qz`4Lث(e`e@qfV[\ii toho<5<_[]!(CPj@GF˜" p- s @=Bi]7Q稝K0`ѽDNO`:7HPyjpȶ@vZh -U> ȥpI{ -JAfMۋw$a --Fm+ -U$OFLrz%[mC[(` "^l!&1"3QjYZ`iɍ8Y!ICa`/g읜x2`oPiVJ~$ - L@$`!xQ0h:&A-)Hf @cV&M5p-({do'. (ar!=a(2\gO;mg#nO1ڛm>BN8{Þb{zR㱧@~n5:q{ A{cx _b{{sXvG8Vq&B (j1{x{[eSD5 ~AJTH!|I-עՆP HLej֔) 4^{CA@3ц#$IsSk/a * yQTrhdRH.pB<%dpC8!s|hJ0k| wBFcFgʞt(v=`OZ)Pvd W)6 - @coR{$Nbx:L@҂s!Icd 6!q nn{L/8e5XʠZNŞctr{{pPM kxa h -mޱ8Q\Npg -"x~ |vAdL[PQef"x6ZcF_ *qZ*KfGXɀ] A+& -sV!D9WimR9+@F[X`$œS*AlQ u!B 3>MpUբ &jdɫ5`*fp&M%Vn)՚23ByX&>ZxJd CxؖbTd%䴨4U8;7{}#8E5J˰b^1$!:j*5r2!0~3Pjw/fز23Z3bf|ʰp7"#چX,Khwoe61:) -lHsR&cg)DHsL`\TZFHC}E/Χ*+ƥDi g$Z(3!!6ŵXf:HEބ@ Tn͚hzڈKJ>@&T0"㳷$ER1JpjU֬^zArFE;jc&'DJyNKEJL3\OŒ33)lQbb!5lD3 Fb9S9 -c`>= IZXLB˱ܪ7D 9%<)ff$NG3jxT$LYQk {e3>ňRI^Z\ H&OD, hL/D3pA72AYAoz3[f!XVuz b$E%E -f՛RUPbZ !cDiA6H=ՙ>RlArJJQgl*5*<`SIu0SYӭn=-G%M$J+I. P!1'nd5͛bdnfqzEo1Al⩅I#6 :2F`Zt"gpS/lm;A5͚7Ie@TJju|q#7tvaJF-YZHx/Y\ٝټLNL-|c9NL.m_bgSY :\VHO &Tu4=mɶXɹX4ݕb47E& UXr( JU1ZFt"],4\S^ -*EDeF3>8 Wj\A45nZGcU@ZR(6kdIOz 㲜b%j(/T'+# dM6ۅvmTz" ''Wr͍څŝW45Ҍ4d*,lJWn{\{8[]B{-fEDў>ٜ>Qn^ssӫV5Gwn:hoUGcS7On388u98 ,wuwP%-NkH~)/KCfSXMPSti)gD;D?f/K8\4=)6[}#:e˭P5%jR"P5Ʒ__hLu;ܟ?S?\lL7%=9yjj|3i> )Q7 s+7\hkHCΛYHHj^.S۵9QE2$zϚ^4=(57% ,f&EN¼ji6l؜8:,W*\fe zF<'(lmو4SAkp$[]r{? rM͙3F<;Mcwgs.kfZ\:=۝?7yU1FxKcN -A([3s!YJV(VE?x:(m14>ltUz"; \MDfj>]]f@}tX֪fd2_561}! T3WMb+7W*ݍ nZ``婵\Czc_қ;5uu|bu Ft䧬lg JJc'O3-!j|} Rnе7>sXzu=xC*zj2U\mϜ]9vϡoL^87xsfNP[ wգwx!A| UA"3RkpCЭ&jc$iN](V7J]5Fi6L -%x07qay WhvGx9ړڃ3r mK%䤕y2NSgoz|cyQӽ\mؚX8{⽷=A<0:fr|>y1y.8{xF@ͦxvyvHz#f | -%pz^ 3+w=}f"\y8]"]3wsӡpJQzvhbZPTGPU89ɮd7~԰~dPmo[aA;jKb}'SZSFtݫn¨HknŋKLsLLA~ڨu@BҶà/K>h GhCW;qMן톛!ٴ—[Z՝ۭMCS-aL\hoGs|zp|zf,-H|Y[נx Qϖ3nH0Q=1 (Xj=uRuh!Ӝ>[*AIQ F8̭d<7f{_8/.R &\zΧ4-LoLf$"U˒BzI PҔnLx(Ε@8YX: ʧݚ\NNm-ЃO~?[?|'`tJ6N c>MkWOP,MҨό/ud\s-8=,N$dn)SݮML\p&S^e4U+Fg%a3Mdj* -Bf|H}P7A𤨴fWnЬ ?*N1q?ڞ8.i\~ܥX6*l Eb2 +,چ4sRg,/R ArrA -J!(X{&\$ZwyhPS SlA4\'T*YV8M)N*?T-_-m_g8%IR6#倎j`]:BGu -!ts̽љ86z*7g(T( !IjURbwjwv(\7vWTAP `714cTqɇVXȏ+E3֌(jm Ƞu -d Dn>OPD4=+4SX -5X62;/AY6"+"&%Fry+V?>r &pM/!Ns3>.,8hj0+cP]T 2]9w>І<^7E!dAѰJB!PՊ"L~#SX/pP81 u'E`*kgri?!RB$h鱆h@D2A$c}3.p2B1)I\.6hQ'K59{f]W˥ p`hr\mkr |uNTR-ٽ"1*VM⚨g~ZQӕɅ v8֊g^9~17KiQmZ'"A"&) -ڼ֕~Sl#شf> r - s,0#A1SzN ԅ?hHJUudLNO1RLY:I|7)6b☃T8֩tP⳾eh vs:'2+ gpHj0qc{IrR^!VprZNgәA|n -4z{3U™W2P1rbQJ "Ș!A3c'^:@F"Ig\k9XX:tbڎ,sZ&7F$2ΰI ""M EjV Z)_r3Z㬚HeI ~$Vsq#J˕fjⲖTfn* 2DC\{q1כ%(Gq> J#^Nf#hIP"FHlXӑT}bvenp([CSڡ9yx?2Ln&c@!F|.!8+If҇ RLI1`#q=~ ME)8*spDҬn8>I2ɑdtuh doBxAJg Y->yy\}N -AyeVj Rd4p4ZgsLPZUT˥Rl%l/Wb):~MYp nY+Z.rq܁h`d cJp0Z昼#fUQSb{yS/_?ӟ|wx㭿?w_/n6ͱ&cyкN:h/׷O|ҭwu_~_W6>t\%@Pa-T6' #]fW7>]?tn·g?7?C#?QTC#Libjqeڡ摝Sxÿx嗿[/~[7vf*%G uju#n7#`5\OBs~ /x#| 3V)p5dHV4QKZ5>?|k~'z_[_:V͊r. -IPBW"h"5w7R^9s~#we#Y'UJBR2n=737{xmw.-piG?oW~՗_??%~Ou6#6&M)q+Өv79|m}#O?>O?O? ?}og>7Q(N*BrD(>rwc?ԇz򕟽_?x<|\aN!s\dߊ5;'N{}3ϿO_կ+۷|Z|ȗg^8=IfQ.Ƿ{ٟW_77~?^o}.xK&8ۄC" jyffjwÏ=寽_{?7?O|7x?~_G'֋=ώ1R`ZZm4I?w+?^~ _|Go^j BAgfk'z{G׿{7ͯ~/~铷ry}}=WlE] ACkXZQ;t;~>C3?/w_W _oSM%b7{^|xo+}~gyP,T49R+5V^8}cGڋ/~~[+|{?[-(W nޞH"YO:!V6K[kO/{} ?gݿwW_?s|ҌJ$ފɅ'O}>O|~?}ϯ']E7{%1$1[ΗGw5T Psן—ŗ ~ǟAo;{㥓r:d,͡(Ey\CҘגde֝>sh}yovíz\$Q|$ڻhp!x.]8xh>26ot<ĝ~poW~7[I3T`b -9y ךj5^x}^o|k/}_'>|ctb`3V~ATsn71:kKqW}O/?[/;ypjueC<-éV9|S{_^z~ozӫ'ySzy3h*q(;F1 -f1ifg'WvwO|ۯxW^3K_zS=O/?Gܑ|ưFD" cl?d(LHZg??o'_~/Kyg v6V&\n;q؊t!h0 $ͻoK/|ŗ̇}{Gvu{uV N?zݬׅ"G8M3N VTP %~? -E^fJ\cGY%[4$ !$ZΏN7r}NtȑQp8h#PIDA7dpasX;qje}-LBtT$xYYN%*f̌\2IJ`z>~‚Jyp⸄gP;ZV$ZJ%Ʉ̔^^hdJ^xajˁ9ǂQ(?7YqlJ - +W;ݼ{P=4jBi~ЭS%,H 9F.1|3 P -K cj%t$Ro E $e2q .^/E&xdE.l8njBȐk,Zg  119#q &B> -bh-x$]c>$< {|*pM[BΙlH&Q`Ԑol#(ё n(C{x8*ìf و%?ةMU8/UFP1_P @E]~#2o]3:tIlCF [3q 8F$  !MeŎHHSr_E!Hk3atd?:sc|+)N⠅)9 p"F c~Аd)<"AA 22⇠3|F5e EM"'fFGӉ",Sd*U G -u0CA4&)\0Â~0mx8]d$$KU}1 P& $`|>"fIѱ` kZK74-ꘃxk q!Aa(7 5$^eu~ F~N#vT0hȾIos0VVN` =u" nA gI0 56tC~75㢦ՠQ Kk< tʾ@ӽmQ9=< "0ZXgje z?s 3(*>`(:1jx&.IurCiIAnrK3XD5YsJbԁܼ} TQBH|;.̰BRPP-ܣzηB{g0D²TTjL\)TvJҫc0A' 4>xtgwn0 -FX0yQj]P% i6)HrN7$ȤBVbS_0(dppi(c/`u`w>/"n_b,JX< .#gy)fA g$T%%N9}QaQ܄'=H@xEF@а4ad3s'e C96P)JT:0SH@z6A,̮/mSiMA}a$Vf#rE*z=.;=#lxf_2*G W1gBuF֘CuH#c!02rgXW#FJN rq~sO -qH b˰\>0 {Bc fH$ @1Y)N MrI6$dĂfM3ZJ4:zaRQCþCq\F lKD!\]RU:t3ӉëCH*E3+T?}Q#ÁchsW2ɤa:y%٩ J*P -UG0IiJ9!3vN 7yd0Ĥ+;FP7Y>u`{Px$fXt\rRQBRir%NS:㛕Nvtr:`@a00pBt泼\ -*vhPN2)V1Q}K$ | CiQHߤ$5@HJ] +A싧X+J\5 1::1$)*Z>)BcLuEti^.t<nDttw:8$hdF-S H,Z52 !<*"X '4C0@,IEд6̤ˍ<+`+Ж7j"NM~,5LK!NODR}J41BqRF}CR{r04أPRKOSݭDkDn0bݕ7Gd7%$+dz5_:ċ5]oEGDVPzd.i7q=nx]@V@1|ވjk<2|ާdfĬhL$!wN>y]NN(Jr*fUN,j] +ͭly##>?"rҠT(,ZG&huvSZՆF3ʐ};vU) -bˬ`_hUj -ٵw>AGQXM d Blt Hb^.'1T)oF'8Pr&+En0%rIMf33 x|g Ie.(]76lߴ*#EE@߁pcaL@PDR$1[?#jrsJ bP_&N>IA Ynv\aI2)cct (PJHs[fc`5O+;'Kp˾7UBPH*j'yoP#n,%LQRuZȲbVA6H x܈fo5lLX8ë-Qk[\qp1?qBTj%_:H/*N:Qk%g/^z qQ+ޑJM,֏ -e؈I.*xd n cD0#Nήbt#MݬjprZҬVbF;a[\!D1r;Nˇhz+4_BΉlq푇 OpB\m`8H* !$\N{5Ӿ'.Ű{u11e,xx4𺁣e8<ϊJ%SZJNv".' -,Nj:6F0l#TfNH\4G2q$HJR36땩CQaՒ]˥vMϢ@I=CRqHDfi-3YQ\43KFH)ld̅w7z>қ?-hls&=u8LҥEQf+3P7r+>GEmIZÏ@r]5Z)%_ zX T+͝Z?מީtsV>+ Њ/Ut ^gm{`ZC4/t.Gk~" -Wp2jñAwj̃sq^YljdpXXNj0& U\iN.k鳼Py=+g:[|,o.T{}fz.%23  dse}Z^JP 32a`-`X<3i5܎$gU#lufHb|}==@Znz.=9Z(+9Je=2'ӕӗ@o(Pl]˂aR4$˹}=nICֆJozG7N2XdGpWHRC3%PGX( )qx1fʯD u!w * ^Dk @B! #>X`H-jRl pJQ1tR3 ]sxZy9Sط9p¢R/5'%,\nגŭk3W KU3植P.0[V䃨} YmFlK4t$+9`Ts|3}5}\Z\;?pZ5X1~;ԝ1~r}&!NXѫ=s۞Οxf<nã`LP,KG{)_V2sԅ;Nל^ -04#,7Dgh81* L SHjS:Xa*PeθܲR̆}KL~abyEF_7AO j%bC#7`g <kX’\v"N7]H6ĢH7m{Eqyh~JGzOʠK!%׾*pzh 'Gfbf -7!3;v?h'([5<(C՘ڻSW0gcSH'=G2=Ӛ+ȅn^g0]xz,Wo<{|@(F$!ڝܝ['a*mF'u(d<r yhau5Pwl/Vs&_]ܝ_+%O -~ƈGF@d _t@VDOϥ -gnou&^ÝnFeܪ ퟇fX&B xmxs(SZOIAᄙHv>!6O7XҘ:C 0AF#@ R|yP92lqy|^fb#wֹ|I` -6Qi {M:zt"^$X `5p^,JE2 -h=<ٷ{WAq$p3N*ݝpbp,ѷ53d8K7V4:Y9:!*YCgA*'5 b93 0hEF(Ofv&ϔk+bmD-Xf>[ҭYIhLU+qoC3/XDPãC`P [XbT;sh0C/mJ$\}/H`b9:=3==9 f D$A$HQ̢(Q(J`VpP%e9N[VmPUjsOw+';&zS836J \b0 @ -X2I :,ԣD4*!C5Z蝞_<$ڽ}cr(i"'8lLr2U^MNo9 ~1j]VN8-0FI.R&k`H -ܮ_&n A5ZjQl -Qa@IY-Dx/A,reVgp9[6)YowT^$jс9>Njx$`B݄Y[Z>Kr NvNxwW ͥ--xryc ӢQJW'0 'L5;jd`#PQj By!-^:sgV/8Uwwb*RR5m -k8!a) @bA -d͉JV@q<LVl.\zA֫\΂ ^K$t˰ =U,:`H`[XIU ~ t ݍ͝/.":oaH$(&dyxuTkܟn* Tۼ~˷?)SLJ05Xjԯ1ȆBM@Ѩ0FaMJ!e@{xx?I2QΨ WfRg-Iv(uKpO8& (B,W&1 (ڕnZBs\MV8m3Yټq{D#)*-5rS/gH^9IГ,iVKl1|ZJ`~?׿ٕC|wpښ_^(U- )rapIς(M/@ڣ$ Qcc~ !H xa߃+Se`N2×29;Ձ(UZ^w釗õ?/d@:9<EbQ,d"~PI<*Pdd;>kp5#q2 ʢԨN{wATQt17a-ў4 r _$ګ[NިWW7UNH9)m_ N㤇g76.SீMY"d,p\EBy~Gpc(^Υ2IΞyW0tiͰ:k5S`@drVˀCaft~`4aCáQ tс^ -+&"E$þWaiRu4+p=4ղ_mpfG#!&p;>:N9! iwe)qi/ٻ'OߋC:AE8=WZ -dT~&H2?*Wӡ% ת8P>c~',<q  @&iRd2Hb}ðK6ԛŭ+Tqr@3Ovh`G$W3 `[ -;cc..p;w^=''4I:+* 7P^\cgx!j[U_X};#)kSSzRO|BГԙ[o} >WԀ*[{wvQ -J;998Uv+|i& L( z>tGhUaN2\ [_[X<'[hL)ff.xg 7' shP΍ǣǏ4LU7O\^A-d$ P= `IGL8 S@HEDO7"TYپv,,7:x!yarr#6rjlH?б`K{:p鱧:Q 8Ze7)`BʉlI:fwweswgTFef,3+( "0 jV3 fmNΞ柽ک6-Tf9pnSgnf:k"XfLJj7[Lp(aeoF|Zs>xfjbTݜ<7vKW&_yYnG3,b:`8gࣨ -5yD_?!hmN2|%~u0{ -F1Kq(m'QHXG O4ݡ'0Lz#\c*H܁(eͰRb٤f(ҫf;/&CqgIfd±'JǪG$jG $j#L` cCo up,TIx-0h#(K ʅû{f3KEALaag>̞ njh&׊X5DaIw';N:Zܥ{{׀0%/97pauJ2='vmӟ3}ꩧB Hz^b90ivn9hQD#T(@gsN*ns+gowY+9Ct^US 4.IqPH0UZS8bz1ep\hL£ɊֵcǠhL@0 %4K(v]ع51YYO*;Tn9[L4x/ PT -hCq (f p\P*n\+͍~T g?R䄌+o`{t -)UsTKt"a,`H@LUAX)vwvNlV/?fWx~:yo>|~s1kvV6Wjg*ӦӏxKڒ\st|/<Pqͻ?z `D":J$ќnwԺ .[]X TFZylF?Qqa@R/MY*^/'NZX4d~~br59PTJP(o(>+^U:+g>m:Bw'N;}ڨ՗_ ԕqtڱ:Ҁp@ ~So$ѴjNZXZR*'kB4ڊ=i$fqYҊDOjť[K{fn:O'^?,+9ZjUdsA! h`a/ؓml5*_4.ڋ;g=r6p* PTFY6^LXHthXdZYNef6)ƋDpafŹJc kMu+͵N=y"WW jn83-6Vir#SAjrv+ ( Ya'_u8p9;3lL_q/h.?+cgkKׇQ EkW֛[4'COVgUvfStW(fW.5zLf8Ќژ߽X-Fϲ -^vvE8g89aT+EE+L/;j,JZ\!$} o~+2>Ǖ11ll/h?:4Ft$,Upbz1AS;Gzgz:wߚ_<{ۗ2鵋@1%[nP̭kϼ1zQ6vb.T5w#02 KVI%Q$`Ͼ,K<Vw~L&FVgĢnwĬb͘%A ,䯻qb u1esAҴd~r|;savJÊY)LuSyc‹ʲ5IoeH -8mZ>l*kY`BL^O%$PMŨF^]ھa~>r'w*Nb>?!Żuʼn֨d֯YF:ϱw_v~0D\+ endstream endobj 134 0 obj <>stream -7o_{M6!& }uor8Èa&2,WXM[tjKɁ$n?HԔպ)ַN޼Xg~Om@W.EcQs`'G}4h19&t=n:;3XDToPƅ{/~gpn|vνy7}G&*Ń{^(* 5O"iiٟl,&)iBs?Xܺ>~L4w.N-[ֶ]e]hlL٤EL}ř`E F7_:×η Rf=@=\Jc _[SLuN -Tqn䳅I-1Z X76pRD\ipx`ZmuQaꉫœi!'0Um9MUkr:p=(0hGs2Y,;?6m}mtqb0l |o~rit8XIXƒa֞~* |(MeUW拏_7DgfvfgB -MNcX2&4 ,! Ӥ"P4LO?c0 ftɅTbR`mEbh)RV;كԉLqִz'rd NjF"x.-2,>S0 -n\pN-?FdәF{7OhO<|}=я_N5Nyks[t;„jOziUt~Zsg.l\-֗/]ҝ>.7'n=x>ŋ/Wx&k(ie%aN(J#٢TE151_ԵUkBVų]ڭ|dzs`Cg}id2GGi*6{I2lR^6PeA2$o(0D5jR';HXp\t{(fǢb$$pCi/3OpD0r Œ RFeqt6|::A -M'?`#O`H E[ S҅LiMBiZW:{N(E9QuyIbcxԆV%3q"nvlFve,7:'mny3ŗ6?3U˭^Q_x9;卽[SG檗j1?n< -JNrN ^x\_]wΣWtXϬ›}~|'?JE+5_,߾̧6sRM3 b+$L.'s@MM)Jɰ&涁Dլ햜DK禗nu /tMr cf8k -AƖ( Dz`~fgu`2K4`#% ԍz4",2 U 1C9ؘcV(] H 4ȝX1Oi;Ѯ0"MTdԄ6N ¬ 9Nf]ybӡ  -80$!}8n RwݯD5Gb\g SA hHBeYW2+p%YO7S-g d Ȃݩl: =zk幅k_[/}8~y}/^4xʭ6n-lܻzVMKuqdiN)f'Wߟ9⥬"?{] &\֩.1uG/z=%=5{շZCy3~K)+OLr033޶d02)(iz'xp_<9\:3{VSHt.`mQ**J6R̉y39Gs:JY,tMvVq2&XјmFwb~h0?5QznvJ gB5;јasQMAΧv `]Qlp,9^=]nltO=)J Gx`h|t$@ xa\{b|'یTO{fwy %-T`tw68ٛtt|y)nn0"{GLQo޻{(,[+F<@fo?u`nDNvgg0~[_|;ң7W <%*}xg9v,xS ;ġ-crfr pIȄ`rdQiU52\e78X?&X)rH -q03j,G"4N6 E:Dè מ={Ti+0D28}_ȗY2"!2@Xn/߇ZTI|i]M.qt -ff{,oG"8pt_8u3KGd&TQHjZg$Oqx+Ɂ' CXTR O iK\@0 KZ1h: -`p t9EIZF5ep\ L8)HTKU,]ٹZnQ]ͷOV,RD2Kf,E*WH*19Њ;L/iz璆5j`?XL7f0W^HfY.MckRRд&(*A: ң?ڻUb(le+/?~p:C(5 -hT" $0@{@1`zc1l908(ECXhB ľU)V,=?p3VZ" -Nq% ELţ,Iܡ|%2K%MO4V 6W#ôt8č~ qCM0&<D-YdJLgjbt2=aFV/c~eV=zV&hԔmB7Ŕ߯BćpX0,?Ci&gfh/ f$RD0@ 2&pOgx)c҂T!t,Kt ڪ^Ĵ]xd.AVIh 5 \pN8F#E%`H1m0J$#00{'T0)M g -Oz4L@ 7)Ñ jiV-΃<F)IQ\0Rynexυy3 [fV/Ap"-HLS}IJKDD.'M-&4C&I A2q$¨B),c$m^-`w7N]c@a2BPH4.4i3LFVZaVr.=xI0Ⰸ 1hH q , )0b<) B"pik1CZ:_.rsnj`9SDpLMgs$b,x$G22q$c2N DQ;B?= 0@F`8b;c~U1'e)"q%8Z9Q 6h(RH5a-IJq+Mh"8Ol51׸ 1#ppwx$0a s/L=@ɓ;c$# d(4>p -($jyv1Av:~< -phO)$X$!(p<㴒!*| 8 ΪWsi \T(",MI&q56vF+X,81NQM|Ots%T˶ʀ0'Q*0/jU8 QlV>KehT8"q8,$p8`ㅪOΤi1D೰x$Sz29U,90aYy.7$1Q)hP01% -6ozU fF6hql |RZ! s;gܢI+a - -7R,B LY6r,`GJ4!c I߂Leux0GǟLjpap,62<Fb{ܜ*/o]Qq| ~(Ӕ!*)(9I(2 4$J Ki QDcC α( &(D`UkC(b<7Z$kR!4bt=.8D 36cP7 EeLg9F! kj bQ\QLM]GaN(,>&UB.lUH8 ]bui\aq 0 ñ(<|,4z< 1~G~,DI8#a({VxBRj'8P1QR0:=ƣAV "A@I+vV 4.)X`x88 -C$ D Cő*f@@GAe)V ,fƂ0G@fc8Gx - *0PHUvJW˭d" -#$x4V&RPdl$G9SJ&°ĵ dCCuIS]zŌܽXtl4S -䑮CJ H4,RH.! g&x3ЁPyb p%;jhczб @uǏǎņ8?BM(`ƒX h~%`8@$XBE[9~WZ W'K{[USnP]"x 8!!P:kdUsl ѱ-E`3,k=;'^yo+h`M䈴'` T~j,_Of^ʽo}~?J1뱪3LCȌULXݪ5I 1(YN|(7eKX6\+=UnϽ~]=<\P4J@a,Ec$?]ci>>_݅/۟?;L6J 0i(r'G.r'eTm~fOe'r{Kwl_=pc|իOMVkkH,E)8FD> F0CmuKQ\fDR7t< -@lDܥBm>;pظ}b7Ͻ~??s}puH F8 -"2ѵ*riɸ~xt"q;փ n޼WWgϔ-< -0G<%0bI9e/Ί>|iS߹ٟ}??_/vWG! [yO6 -km̌PdZ:v߻W{~GW?O%* AEб$H -pNBJCI!/K-{gyxg^^{뭊4_\_߽"vX4-b]8;=:|tpZzRgy痿p~KW<_Ae!$4KEN۟=>^s~b_<_>˯\?\3|KIi[) Qnm$zf -_ogw߿_~wv{t"o -HXXM*bEjzyqyrOƕ^^(V sbI]>g?۟~_$+{FR(A;ZD/[KګS|}_ϝ[[??껷~󝫿ݘ{>  DOFPW2+SY woO_/7/Oͷ 8aqɍv/Tn_zN}ů<'9ާ?7~߾A,G`qҎiK_k_Kw_˯>\. RǴhJ?EՈ+GoOno7o|/_W/}arS"@`(ERs~|ss?;Wo?~?|_9Gɹ,^WRTF!rQV*\]bgwt_ٷ./Oޕ޵o|bS/VZsPYNjyT87oi/[o_΃?o]Woͷoo K|JV2"I_+WVw?}G?S<\=X@P&jVL\IA\nS}r/]/[']*w 䔔 x1 vzENPge7_~w?{o|7.u_;Sih,ge *^ҙF.'_{uo]w/^_?/O^/|q3ġxsJ!3aɶEuudً>3/|(/o߼?7/,MNб!#o–Йv+ε/q_6W&/ϧˀS1\Jf|PVFcI::':ΙTjųM[,4I{DYyWĥ 9oJz:SՊoԽ3i+W_??{/xG_~{uy?oUeqJYѤl OP ¹G&?΃zruEFtXuEo9LVhG٫ky{swjs5SdQ(P\${ziiPt'i[_?Xdɋ3;_zʝSSKw*_г G9~Bġ 0Ag̈́*0tT+p{PپV==/r)0Y](XDИ!4 a|dh>qw3~W^^o~.I]t1 ' T/XENuK3+η~~k7TVƚu XAnWA\2MS;.ͧM]+N:\]br0cF$t1%bA -tds**4) @ ]ʜ\ <*s= )4~f -bRtUDase(nk{sjUe")xQp&FL!5ʵXL%jB͖z*!A`K`TFf4a+ 81dpE8.Β.Gy*Ƃq< beTJLb -0K&GڶQӔH5F(p<)'rNfYTap-WaPPy;:i)eii)!iY\fYO0]!'B~An}%-{?8!ьkbe#S\bX$dCNLld4 2ÞZYY'i8 t2b #G#O I1LdHBȒPX EVG4̺ JDˇІ Ue5˝0,8b"N&q܋dYѴ,g4JMyeY\X+ex,B`]'3P 0p]@bi8*A, oLS C19q)(Byjjx~2=gb04`hLaKX8GӥR^咚+nv!]YigtWtwzi;Tf9WL}h%q3`~j|lStDe:!(*OFGqt2iڃd"蘿,3)Y`t - "SF -8>^ 7/vgp6%JZY5ΜaJQX!g$Beך8}tRk}$Da^nG2[#*702+S7QTufL&3$M\ҍ+$kLUܒMrqr6aTW+uwW8[$'gw!XUV(,-GxޛӬj83kJ pAEQʲ֧J,"ƣԄ''dیb&B B6#ӬT!r j24CB E 5X 2\Ij= -0Dd(a -AgGȱQRۂTb_잤21|0G` n~Cu쪝ZKR @P3Af g(6xǝFP=3X)=hرX`xLd?kA('4FXIr oFue{dKCt8 ?l6 4F'Դ+l3eb bfw1RlR Ai-|`--d(F/߳S%'HZ%l"W,7v խdv1?qpW4R+Nٸw~vߜ:i\zjmFp&BKO,fQ}BI^.)FW)Z=Io8P#2ډj}.W9d BXRO)0]5/%moe E)L"l@Trz~a@"--NCiuk@1Ts*]M3PXՎE >+%Bqk$ @hK/\ѯoO&8&[FA`4Xï$Z ݛnM(T2@hQtER; A buEo kkpUѸ mXر*g^|4"IR)y$Rn[o^RRM -JY; %5zۉd&Z(ƈ,B7P=1BbOYfǽ0쯮 / 18IU͞5sn -sZS5D)[Tq5cꝼٻA'@L鴷#&irk=j]N+4Rc;3SfV..m~h$:'P&ٕggR=TB1ʒ K7Lo9U60PzaW>4Wn[7 juaܑllF`N/]dI]ڵZ:3##uuuUw%0h ᎑\h $yfLщ*Oxx|Om$r5Lv3C3:FZ}9!/EԎH} 2O-V,. t_?c8(Mp5;m֏q* @iT'_8M uy"E=*W|٬)Ըo|vo.9 I&!*$7qJqͰv<F0IS#^lϖNwz5x<~Lfo`ղ,i6ޏ=NL* dc#.>l{t׉VpQ؍g>amv^}Ǩ}^/ON^?/ǤXU׻g7 rZF5YJZ#Śl}Oo` s^wu}sᄻWiPfqZunT_bGP^_<~񳧯^(+(nb{'I/kC7a4&P__Nj7jpk;Ŋz֙>MzgUtRTKTgY:{{'_Fyqt^zh;9>8 h׎Z!hGϿoc^jx_65[g|0zgɣ%Z~wp(ׇk;u}ɘ ʤP2ZE>T* -J^}73 oA{gŀpKuov -⍴y8zz]kzibJT?1ùOX`;jj6{ӷξ~fz5Q3yr_?A]m~L7?m''߆՚HPP4k#nohN v$fuӧGó_`9$M)6 í8{թb o՝t}{z_Oz+NLyچUޭvOAH0=.^č}rf[OGa\?o)ƨ>֭uϮ/}\? cNjZˣ/8|8"=W5?x?]du,K[4W[y:1M?y3lٻPib\@l㸽N|5왒eP=}V*'!%4 :C-fc?r/o֮ v/?` WO_l;|ӛ?o/\>\VT̞7gOڞjO'~tx6~_}gOO79=~t~?\'A?kV6@{<+ƴ=zgx5ϓއ_ٓ'/k=Ԇ^Fll9n۟`U9%SٚB5O?>\6@&:+7 6Z{px]L/KVr7^|jx``󭣟7}}|@\ tٿL;`5sz~X߆l57pkٳK31px@S'gţzMwP*-Uǝ|:쫿:z*ؽw9b01I%hG74EP5H kiq2m_/Cp -Tm O:0UsU)O>btcӞnbH|zɿ[]h:ׯ6_GӼ} }Ż?1\\[ؓuȷvEk :=y]wx|Y 7P* o:mVPUjу I' F=V~:^<%,1؄V\;70tucD1X= -8sқ4ZGAVZ/B:n97b]%āLZ:Ne3;(DםpJkRA{;j/jta ֯>> 8LM7NW/s?Ճ5?N8C-ݣCIGis[PCӬ{<`-ƀb'XNvk O;/X~Q6݊?>|-}Nl|}:_=׍WX -ꝓ -#r QGZʀQm9._|Ql$Qz$V -? +hY<lU> ҽ~$نY  Γ?{ƫp -&G{7bջoڣ( ų߿{@w6mڍjlXψ=Q3pvyt/Uu縳j`Ó6@0T|o~rs9T2 k;|bK?}u|δEel]p[WbXro(P6?k3sPIs6 jWz=k// j;%D1ܹb [-/ճ& w0쇧7{ g P1/AvBR\Mg0 -!EX;=jfѳo`S0/ϞZooQOsSVH0AZ\^fK:JҍJGbP)^}; -uRyTOq^*[N: R9?}Z^JJ.' Rc%%Mu(*Dq8&xDVsKꕊ醫9IEhE+Ept9UͩbLxp?3F6;`NyizV$ oӍ'oRE!/7YiD&g~{қ=V㏧˗I<1M`SNM9+A@OW`Ni.#m t|0KM6p/H6֍bEd!8t8j$]FH*$ٌ(.#TFBQxum]Wׇǯi>Sh gx9pq^XHn+OGQ}5yၢ`i'/~4cqen}:֍O Zsa9*qU]Fu[ovv-ʄ6d$qV -Uw,״Ʋ;/;y ZH:`Hܹ8{ukv``(4تӕP.9,._6EF,Wkt!' 9ŭ'QjvX̦$uo.}kA0$i5:uu8S*J)Ån7Ar7ڞ ;]ͷ_RF[|˝߀['iL(`#6!`W|mMDT$!)^v?4Frc&DRNs -?n?Ks e cAy W8+͘ȉbE]_Ϛvת٥XeSJ$A-v^tfgwFaśv%m=eR;eI`[}x0|X6Qӽ~Y:* +p3~Q^Dn9-S#ڕη&WHS[zё*gr祜}蜷'u@ K$]{a -5PQhG顢wK7(C˞"I3UQzգzawTRۀpbKgᰂEAzÂEf6*5(.c:EzsŽ?1 O#L"D#pu5 |l -Xҧ E}j*$ݟootX#pmAh`hz;lo X4/ &!xsY/z72%@R2Fx$護OwN:Ǧ>/(=P$eD1z~g6ɗ2IJ-6!nX@Ҟ>OJ7< O@&C7>Jڏ@m - -6_)δT F8a7"IB3 5uiS(N:31&P_!,Zҭ.+]j%P<ͤg-nkMF} VJYXOcxnͰ)cIJ8]l9d6Y<ɧdPF%ڏgķBAaPtU(7lo#pU6FQ]oLk7KYoA0,LxnS?3 7 @娶[YڴuQu۴i?#[#JhTp@Hz.!@sUm] !cA]T*2A{:J77 {I=uEEi u8yDo{ Dz.3%RHQTb-LN˘@48n!us8>Lws1<(u-w~WRq2*Fx4&R \[*Q3'`@l ХصUw -M/moybhCMG GH5=-YA -bDYBuʶ@QEζ\af)6R bO1f`~(eU$C+j]*~o{iw %{4h6Uɮ 'K7vA5Ir -@wNв~Lj676y}*I}5(.-k;2%6}xiP:r쇨q -KXD -RJr-Ynسi-`CNR4_!p(I+zvS_v$ꂵ!έ"頜mIlT3Y I0 xfoI\62 -\zP{I2f`˂Tz_^ӽ=Sm@e]V\ao>NŢ6Yśے}*#7sCW'Q*+e$*X]0U,Y+e-MMMl5k;r5۽JETT v+l#_ U(:$i'#XB: XAlDNGE>R!F@mc-TeE ǗD(f¯F5QZJ_4ݾY[8E>k.4\mK QI_Zֹދ'ipyadκC24 |*qӆRB݁Bak0-a8 8Py_\%CAL_Oxyp-^ctRD2o $=*NRh+k*="HuKV1۩d|,9@(un2:/b\9xO$* Zn](X*#ۚkl$UZ([O7+N -S63G(L@MUDH&$# BU<ܗ./6ˈcr}M٠Y'YHHEK`oEH^$E\(gaHM80=pmHȋtY.LSKC) <^5m\V!@\ DJr[A!ɭ׻İpŋ'CijK3hV H/WAb3 4BJT$z+W,r#~|vx=#IօX3~`0.r?K} `6M=QLڪXҊ%j#-(&66gOhʇD` 0 -g3έ<0T ZN& I*L=T${U!4 L>ȭREO:=T):,w,oAg2$hpp3Nƒ¯Vv9Z. rOMk> $Ĉ$( -ꂜ@NMUd7l5x}P |׏Us -▀w@,kg˅uazeE\kvuƈ-{B -D4D!T k JrIfu!U#H,̊ 8Ie  eu ۛ,X4pu-/I -k< %C1v6 -7¨9@0@rvѩXq[[P(Im4Ϣ_[sfDfo2Ns^+ |ܲ8+v IE'~pHb'6$bDbP[P SS+>'ukװvʈt.2``:©Z:V-x}X Ӏ^6øѶ|@eq -YM<] - Ԏ"1\)PPn¢tG -P܆r/1T5qUÞG37p(#:,4N9ҢFso֨: \Pt T} ǁhdݘZע㤆bM -}o$0K:K|ڠѹ❛vAT} pk׃`X|<>i@_C@ަ9v ª518Pq$1\yPJ|@l -rݶyOgV*N` _Vlǫϻӧ-e=`pQԮl`0q*劍QU-<~Rt r|d nNcIwvlq)a(.8go4rR7ь -SIAl4)f,?kq)xQ lPFP &)HT>X Vae+Ђh.ڹjn`dBqMpq-x`KZ!ŵ< *jv' _us[j-7AtӨ~P<]HdF`&%mΊ}{aӭG^,`du8[ ݴEdk @T*(hb2\Ͷ|d:ۦbTq~ J"6AWR>;+]?IJƏ1͵"] `Ӥ~afm/з"WthYDZ?818.NU1ljv7tZFx9Ay0|B hN7?1xQB\AN p5J mv}7ڕ!`c& jX7H3X,+7-ul@+YsmաP̹j.ml/WRY{3EMݘM@k:^O p Ej 5g3F[G[&NkNtK{ QT :kCRŏF`=ImHZW74g #PVP\"@30ݹao$J%#$(IP1N!2B AiN -8,')&.ɀEmfv7{`]ܴ%( TeW+`i8 -@/u]YJ5dn- -dU6 w $ɲk`n %]-P-oX~+@u1<[$0Ow5#/QI%Y`Fp) -B(B]uEirhTа:H5n= X7/g?ԁꁪtv|Aߴ\\ZA2b@Zrb+J/_]GGb:1l -EZ\ RvaήfSQX)Ql -p ̾i^+Qc^NI/†5c-h|HO`oZ1dFy8rubd -jD7ƭCV - -"91 &"HNIsʰÄRzS?2TT0i*)dƼ8RYNbV ! ;9$ Tm}AICC -qbNP Vr(j[nˈu Vbq -z# UCdUmܗ/n6`s0D5Ȱ"<t8Xr1 |Xlv_XuNnc_,(ΖXz8*g=Ԁ0`*LRUrť +v)X\I-7<aS쐴ch Xd%aq Zbr!"b|wmP!j(II:G :ـw P*RUX{Uif3aɸLY99`V3>DqZ; -e! -Kֲ7=0 d-_s%8AӇ6NB1kfJ  ^ -Z>'Kr?=f74'0̃4!K#̓泧 %}\!d"kI۝ZdXR%nFO%kT ??lT/ ۠Nyuдs/> "} <77x` -aIf&Xm]{%4U'$s$aT3/zό6]*h`ৃ5w o9Q,٧'0ZpIJ;3\=,TB5bv>dWVUXfvp4Plf_ˬPIS}(¯J$uTxt wd.$aVH 9">W(|=<%y:Ҏee=췚[$_i/;~;L1ŊFl􃠀P?]%C37A-VIYd߫Z֤PVqŋ4: -^S Kg@22`%W2>] mr] mr] mr] mr] mr] mr] mr] mr] mr] mr] mr] mr] mr] mr] mr] mr] mr] mr] mr] mr] mr] mr] mr] mr] mr] m_JƜW2{/.?~·F)u՛Ofͻw_8J,(s%H -o?|ryqJ48 -}bQ6eo'zŮaؖƖg8VAFn@=b'60tǶ}/=:~`9??vC;lvU{'/>$$ۅZW/Yp7*W0#d³`ݫ/mjoal>/AAQa@SeSd_YY {T\9,*pcdoPLֱ'rBZT1"./iA4hHĩ,H&Z( $ڶܱje8x);W,2(d}Ԏjds.cFnLXF +z"YR SNRl -bLmNl(n+:Awl96rR\5FL`aZut*c[QIpǯƜf$xV,I8a1+Te ދeԩ`.BTϭMs)/6i6%Z4ʘS(kŊfdWA - b[Y=$h$x#="(,.g.+(M| Ȅĉ "o1l:9&h'}EGc;8JH֥B03kGooDa 265&jl 9kv;HCISV_>vcF2bVdwF%PE"]2U'cY]eo#f.#GAu -&12Ak$Wzx2 C@8 XA-HBQګf3 -J*R6QĂD"0 v;rl(: tˆ(L$i\,iYO ",F>tsSuo LQ, XW+J5< a&˵(2\ϱp8b,C.U/W0AS<ʀ,Cy' z.ϖSIq„FTyYa ݒչQ\z?G Ndh&%NIs>U*8fST'B}#E -^PEPڏ'I^v=GgXG<߂((iFZ&+Z hChq`(^0D%5;=ZH:Ⲧ%CT@(*Rվn1&hI@]s͛sÝDuFbM'IE;5ȗBYHF] &_PZlz0ռ58*U)]Nv7= -o!h]pZ+HOf0P#&D]sB:+XERl}e H -`C`eAuX~bygP2(9Rg+( -l/Ԡ+eЩ\XǀרM/pof=!;%.LR 466b pXG4M1\ĮG. $ 4kkl -'ozLݱ'_ϳpR} -v7LwuP։u4ٗԋ*ťMX#It# !EQ lqP36MN.c#BXk`uHׁRoY/z؃̱b CovG1e%d]AR;V2d+I݀2jKd]FŊ2ZE)#1/m(R78qp,R,Yߧ_0 ۀı\e X2SsbNBjd@̽hBA)Lq(` g \, I+)SCESdN ^p(/s9\ ,.AE \meh)` P#aZb&a[p '"<+ȗĵ NP@fȺPNDeG~xpEیЄLh/[ -Y݈kn:6Y[1(tk'{՛x`^HTҧ`ةېtPQ9/)cJUMF%/>4D++x ]w٨n h{Q\6&կ$|se0 g srp)F1RY+e-X<hlQm8W O0` -:\,e}ErPaeI*.Ut`uA|^Y[Q jD Am dM2EfP A3k~ׄU=T2^yH -S'UTy9/ JAfze:LSl ngc$8[ iUj1縪,$EwF2+49)=۝Uk9UEJJ4L{״f5{EoϦ~ALZ /D˭vxxay+/>SQ)IJ7,`RܥvϜxU ZtBgUchQ1L Atl{ok"ntXj0Nx$=u8ryc )+N68oÊYk&+'cH`r| m -h8_ -d,aAb?v_oY -Q*JeRY+ϺAeĒʟQ ,߆E +C  ~7R80` X& !d]e2T,.V`EB%u$|;_!טJ7h7Wa0O?-Ar#6~vW$T2RHz/I;]x0mWVwU{oa,00x/Ă0ZieC dVy VȬv{/Z3ӕ>bpZYm&8#$h@L4VL'y 8'A;F_jL2̜5x̫5cLڈM:' w2 THp֬)YJ6~ B%M՘ "8 ZS I$ڄ0X&Yk^,>Ĭ`DFMZ@\4a(1 -7?t[~0?^tIRyQB7gnPˣcp3QfgH6/D0;HXΜF"hD0T:ʁm gIjJr z4<3Ol -t H8CA'vopa`AtzOILO]5a<SXB0\CMƱWzt621AE>HFaM'#zm -!MTq^i }!e2?A@kp/FLKxxl,8>TͫJ ǣU 0rA =:QM@gƁpT|0$Zd4P5Mj \ B6rMg"jd⤧h@9VB& D"o`(r6[7҄@s؜&M@~Жk5[2 -r= }O,0B>RYɪx' {"H+KR$-0"f:}7ƒㅮيYSXҁO8 @JGpRd0dxqWZ (сȽ W# -82 đ 4Ĝf`Z>~`Ny|ց@B!;uhDDžo8_@{P(O/D-52GgUSO=F#^/6~)Cf6;TQ!~E" 7WX,ipxU -jA;*X.dJّ1Ybዩ'VT>~'1. rthj-Y D}`ESTN7 Ng8"&(6^'s\ھlz}~FC1JrbKsux' &܉dp=B٫Oպ&W;<2H*vdrz eB1 7#JANPN8D-mݣc f`![Q+4>0D NZv7<>fOxH[P`4d-O@B"呃~&R! A@1;[pT@$EP,Z4 }d`/$z)2bBE$bɨQc$0 A"StJ@wP1I_tdGcP;P^م:u'N>yA1S3R߈,"B !AЀc$U=^ywlNa0d "8@VGp$#c$p(#A8$q,iel؃ m/16،!4#`b Brb#5 =9I2\0rT0(T@-3?B%(6dMVºbq6ExQDYH$]`vƌn\C2\!iFV9|t, pd,9w>p8"t?)d5iU`/j+=,yД5> MzJ@H  36{ c:2(OYG(#H* "FU(=cAt1WyD+W\ ̉B4x0)UDvo Z5Jap,%#VH4F-g9߱RKXh& 2 -4 PՆ/%(ӂŚ.D)IANAƢR b$3sSCr@؆&$p ?W$.FmS>4@$ i131M$$$!Tn >-HXq* *f85XMhg:NdH"~hFzt4'xDKJ3H 'Y%I9hG"I$ӊ iHR)%#X0n$vG}^[WxDyaFFP_Fe ( ,^/\v2Aj"lEBh"n>Fb> ast  @@Ct)+{=2|~4 ]Դ.0\fl4'YԦAְ!e1t7f$*m-Xx"Ge)(Z-V|uϊ/~!S@jL:21cN8.iHj+;h` ~ łc!|P$˂N(pexpV0仰~, &tF=T9Ƹ2a1FX H48TPP@B{Ýj@MQp}>m8 296D#E\ 1R^@V'J+T1|R5(&}pAF8bwm -Oßx8 v>P78

0Bx:KaX0<դz$l:< X|tI}}Vf^4P7908\8J0c~{\U{hI@D "ɨ>1\-,qh(tA&%.*A/RT^m j;(pZACK 5^y?yW aZ zjzЇ&t,bD9.0yꅕ Vy kcTLFA>z=Ǽ4oe .,#HD,,( -,ǔq,PXyYfWѭ1/A'pa R ,C㊐yLԂ硐ơ+@,9AƳ P+[\8</q Byhð ? -ڨb?.M#8: ] X8wt=~ Jo J}AJdh ȏ4[@)8|?d妍s v!< G΀ |Jr R/xH E's# -T@*X&s hQ3xDc\/pBCV;84CPɸ kBua}@҄˒ QC!Yj~lIR},;|RD`*Z<AJEb!B;2|ʐg ->2AG(p ݺ/vJ?~k¾%9& -S -( _f F(cp2{zn?de ֒f(f4 y^pP 17DBhlt4pXGc$ZFcCy<"T:\?c2 Ѐ7t\ntbi g0,1G_jBqэϰ<BXB,0tPQ@`]p2?4Zqd -<"(,W@@B!@hfh 'r [ςЙpx@qЏ0494L gAny?Z!Z2T{k8Щq8mvɀNgO47JP^в@pA!A0Xzt$8:d ˏ;,W^9~JoݟO'oт:'Tc!#@ja$# "&'GPh. V#\;^.FK6(epnnM >h e?TF+\#<4U&(˰= M ϛָ_A- Z lGNAI :KUIa=^8d ` Ap)V*{ءh4ROa]#2 Ae{pаb4=J{jO5EIHf1&0!&~4 -GFHP}? }|hc h=Z -y+(``?x?*ABb,hy#6h[ޟbP85PsW\8pE]NHz- aCZHRTV|*j4i'R|W4bvrͮbt!@ \Es8T}'͢8ST E YUF.+T9BI4j\~M@pNB`! \b?C`dk5psJ"dɴf%QnN>y% PQ4h fJZ]Tkp1'\Ut L=@:p2 `#y-d@ )/H |hqDn*F2;b0\VVrRPǩeiN?WH4GIy 7Lg -*4UXvTh t}{T{Tfx7;<\i8s7;XN j@˖,`n3da6[~؉eiP>ɯ% - 'ƒ_@u 7J)5pVمZX?1;~37jwŕի]Zؼ?r~g=so>v&OvgNM^Xع;sd珬\2֎S$Pi>];=n*Q77*txIMz%&r3bcӊUIUpr&ϔ6'N&O3D;m7;ShlkVo[W/[F>ԛ>>z;u;Rh`n5$j vw͹K+7\̻e}jQEI^*j)_]t2겛N]郊ȕBmՊ5E9j؟=cŇ2\jՕjo+YZԖnO+Y)wRBu~bD4[w=Op՜Y9{S|-/F m{Խ -hO8uar[Mw2X _@{ϯO4\oηrT[:NOH3ĮV;Ε!T[X-K !E4p_0춛U7*xr&]Or.%3|Ku[n]u9]]6}CL]>|uٳsK]~R5-W3Oٝ=t|> t{@nmo|OffV驓dgkqͮ"7:{RcTLݍ{M*FB/^ƻe:ޠj8HNz@;pmu/œغtڇܶ~_ܹͰמ墓/w[Ó+:xnr`m*dJC'3v9]\Z(F+>8p Y#jOdIi=7uz`ጓZxLLHQp=Aoz17@lcT d6?KffIld\Zؼ7{:^XҝksJjp<ͻSu.TMj*Tk`VOmӝ<d a"ƉYklc& o XUPSk7m&P{]v6bKk™ġ7rFw'AE݁Anj#'o:|Y7ꝉ(kxz:\inl2拾ӬeQ::SZKk0Qfr٩['n!_CZ ,Kq'W6JKgI`EˍA3VvoO:[ B'x))/ &ON^5\:fKf{Rub3{>yHpb.dӐ HMija\ug7&ӭɣΖ9j549NDHމ rC>GQe'2a Po\?rGDnsvR{z[xR6ʪ1(nnH6!Zk2T9X:;vޝ;ԻG -U=}i2rRwͭ!s=vZmhv յDn+]vd2SKkK5.P$mlhҜxǒSܒN|a!ԴRbQsby;9qG3>\՛=՛99=Jufu˽#P6Nݽ}FQ,\塥H3WX)LV:8RŨBPm(,Zɦh%"Nyjg3U`izrl$ dL Dfڲub;XbƊ& ΞW@^kRbz o?r)ӝ9hdsf{l$(j9v<#gUAoJܛ= m:e"*@HJ&'ݹk5$k[vO/pRLY)nfLbp umSNusYk gqX̙s^RJ`ڍ̒mRQ*LX_ڸ7yP=XnIZ#;rtfzsΩKr wZnF(eӅDvv8{j -Y|O=jEں'.,{? Kтv͍W&q.*hxn1 EX̌b -lO RAZ*jcu'ݓ*fy)iŪ{naLǪzU;ޢ?BWP)۫tϭRm86śSk'.b>NTZش56Ot[Qi[Ý3k;ͮ]M%2l[N_9& {.hj\:OBzT{Rwgʭc)N.0qŒf~*jEQ*TC4زZp]dL7N|h80-֗ -₤!4Qt,;{!e -ś+.5;#0"/d*uSDf񁠖1Œ`QAFHlIN_Yz8wU)* LB`LRSReEi>.%(jFՉ bi%eѢz=(\T$ńA2jRt}Z2NrR5!I -EҊ,Wh% -j6ʣ?Xު*sWm0u7MbTjJDRQQtMOu٩z9u-9_̈FVb;j_Τ2`UT`p>Fq5u-,Jְs[躅I)&x2X_L/fWShx\cF"W3'NNuLŲ-IOn4T*tg7W;:A<=1>{ *K"(ry0ĩEJHqJ2Snc57 -R)TC誘R,˺8aqb]iy^ppBUo(vt;9R㡼^:6` !15$u*[ZIg ~CGVs`"8;Uc55hYSͺҠѼT:?r@KFa,i'Fc`2͗ r}3[WFGqI.$xD yH0VU/,42!ƼZT;/Tj$l8n۴ -ѽ#g|wo?{׀| -^:S ۇ_򃏼=z=>/}iU{G/68!aǛdGѳXݙ^^=r>|7=KwO~ӟ|_wo~XPN'BrRRcva}镭ÅŃ۫'ɧg7}o|;[-8aK3AQLBMoOu͙Zo<^|GnV - Z6e .tSg|ɧw7u{V7N;QBR.AZ@A7 'DtK -ɝBmP~O|w{my}=?xY!TYN9n7V87`ɫV]oλ?;;O=fs^ .^VBA=hR7$):Aӎ$5[.Nxֻ_]<ć +gG ֲ^Gtqб^}M7~~گo_/^~|ީk[$xRU(S!_t vO<~+3~k+ /}~oۋ_{sQ(ԛ+SV+퍵CG>~oW~_O??J~ݟ'\Me@`f^{r{{cOvϽ~OϽ_~?}Ltjb$KI}ǟx=^7~W~+݋_S7Uj+h3Niz*?#W{xȳz~/~7^y_~sZ (XV;rꁇc_􍯾oo~S?w*CEͅMk7vΜ=>+/Ώ|w_|7|o}z{Ӊ0 -~xMJj&lu:IgVN?<>k|귿_?};?д*K7\{7_w{nc㫟- 7___ޮ'RIMQq]%D:uȣ?~z/_}}{nLmv%֛3jXl-=u߭˗>|7ǿ_ʯ~ۿ7Lo*F语xҹΞ:y]^{g7_oo߂by /ptd -d-ㇷ/u؉'O|?ygw|wW~敟>Q*OF'V̭%\q}_O^wwΛo߼ ~?}>p۷Oި '04b!N⬙k=/~/Ao~?  >vM79JZ݄z~\]XXY=zx垻.>ȭwyϴx̐EeA!0/2Fη#ǎn\_n뎫/_7JLʂnJF%Nrԥ#GNV atjwz[|o y7g?u7_XYL$n&AteLhk.]?Xh';ُw^o}+/}ꋟcGD $H!pH`:|ƣw}+{ӟ~|˧Y4]"aNp$:gpwmW~?ϏKϾڏo/xg_3z~*D!AK^F[ϻCk.qZHrTyUL<w+;G=~{|~嗿cp챝L259{<|\/ql$t,ijR5Ol{M_xS/g鱧xgɏ~n;iu5X'HHiXJVpeumG4R%H6!HcaIKb K-CWe3&Eha(^ Ev@" -SpCBeyƠ uˁ4'f8\f̩nnoyP X`1LpD6B"P[Q͸i7^gKBٙ_\M%RtfU+ HR3%NIjqd4 n'f5-4sV+_*݂;9ۯ˙akhII*2 -A?~/R"l֮Η3Vvm7_8y[:Zcuj6٩ )xύǰI[SYICV1Ul$|ؚ,-^JFFbHX_4PMi ΤPFܟ8uyamfYHv9Up8a"jNLŧ F8I vɔB*[kZL/V-6S JRawF T^2hB\4ZiN- oYTZTo@ A,BpxDZ%Y75zT)HrH*,): mJE4K8X$HDbVXö$)R( &VRAu)*q ^p%9pX&I#0LDs!#FMVfXFrnRd]RjnjQ>"~X -g9nWu5!r1̂<96EFEГJz0lT"YqצO;_7BۆŤ5 Ϥ}^^D(%OP\ -OO1L *5b q(\0yajW@wp*V -ZGջ FZTo0Z(Tw+7=4CY#~F u&OL(&FpXemuJ\v!cOhꡠDEY.M̌/a>?V1Q5I\FDc4ƩH`l, _ 䒦U~zwxCy<8tؔa4eJjDK^/MQV. N"U#H > -aI:q:ǐ8*APG1qlz;^& 0qh1 3>Hpl{‰DH)A"/aq= -9K@1t H21mL8z(): -UpI:ޤ|(U2=/2 wRгz S%A\Fʶ3Unz7~( ]ӌ ۝ѢM -J6̬b~:R[@鱗sڒ5h5'1ӢZtxV(v,ei&au+IY;9%Dk!܀ͭAk0L}s1Zd]Y-Q Ee\wIOEa6pPDޑC+Q9mt^!I”(gl-1|=~E4W럘Z`- +Qn@j9QpL \w0 IФHBPC;V:PT Yk4j*Ih65Zvr:Q.Fj5?Sz2=HE0nN6Cے\C$1ZVH0Tq0({yY*(j)/j@odX#lP& i_r\_`su圫sqzzzr0DDA$D(ٲ%[AUϖzzyo߂3gf鮺~%Ij>(W> Ṽ ^,Hz-%.v늚D:f$EEAkgx>E\L2;юI#V Q|r #6IfD)K`ОH<@ (e`[d"DCa9%$i)mI7>܅W-?j!²Rsjt:ZL_^IV!NiL41B=mIu`ŸPRK'sZnsp5wT~w{o nJRIVFϋ5]oI;A`"+(]=̟inY z( -h6^zk}JvjL,fψG+LUt`qK !-+Jb{rciT9 u5Ү4w g]Da%:dUs -KkvI'S*n9w >R -/Y-hUj>A43;A<XH 8>2ļ(=8DS^,3HysR r[57bj-"Ԕj63T5|8CgH*p9}4`Hy(s:GF<0'q$6MHSvX/[T"]Pk/0z  -&%ljհ:ؠ%ɸ?!DzBsQקwj=k3Ǐx9%juS*\ -aC9v/,mltK+X~Ja2DJҊbi!ˊYAУ-q#ފ禚x~@z=|W[ֆ7vS㢔˽ٵoGB6*E$ق-|x}{<|@~+rpbtF0:ꞕ,FY2+$٭\ut:a[y<\6'HܱĂiXފ#VhElqGF -Ig%R9p*U@BIx&Lb.E}晱q|b EY8,i*G^qy J. Drx&ӝ>?=xu|`GepY7& s"~%)gD;vr*]`X!J7Jn⯕Z{枓^@qSU:/X{`¥0yYQ=43ӫ;/8h)/lt܃mŻK;{-]B6Q;s<,$StiEԻz~_A#W9ci-Ik:nU -Ԓ'¹|m9Dv[λ ս+o>^Vs8lq뼑['UJѾ[-`a<3ijGmGVbcQBV,]})κGp?լׯz"T ";T+IWo>zx<2Fcd<fFGYM)rS>o@RA,Yݚ9^a]kn0XaGp^(_^aqX劙*x[#$$ -Eʀm|<8H '([$ #=2%AK(@.Y6fĆ_Plwc0b7)wZV6z8VG`c "B CW9|B)ܪz8xaQ[qj7^_8 Z2{~ns4X6z];㓴iŀp1bˊփxƉmFlK4t$+9`Ǧ9!-Kvg5w\]ټ:|Q4X1uwΘə p>V&1R*=SD (4%(IN,ҋܢ'08a+F:8{/~] T$fCԄWp EAI[ -LAi%g.=|]{鋉_ ELDF3<4YEƭ @S AoFSҡ -+UJntMgV1nu n}by Cώzf<#&JĆG9W5>>ye_4P8shlu%\v^n!Q6+O!m9Upw*>Bl {/.PZP-WDLN**nˌZ,lvv"VS2'ӧXqA ]Q Uc6[<[k̮Ǧ"H#_@{`LW V{-S w]{ړO>eGQB$!ѝ9Y\}'#!TtftHd<`Al =-1MTB`#A\mu.e +'K[xH/Q&؂ @Haz~NJbқ?tƙۼV+ݰb6mReX&B xmds$Sڨӥ5Ph8a&]@y-H Owhxj#` 0|q43Bp} iO!p\tD$0L(9ͥ' i{M;ӷҫvvs+9&΋YH U&T{GFq9d -'HJRA\X鞱3ci;^8M%)+yl9,6 rt'">? U4 m̓OBTO IYa5 I#-N!Q̬\*֋ŝD?_ۓN,B8BјVD)?΀`GA]O {D^,\y4vS/@D`ٜG'1Z+?<p0@@!tL[XKVˆw|ZaX6e[N_vy"hN@ lOm7Oop6"!Pz4{-4lGvl9UXWk@y=\0-7NCV{NL `vO!C @8!|.2%JA)| -|Y*nW336?w19>A/oQD;4#L{w.lwe֗ά\QZA uWq:mh9MɁa!TK{}&}=: -H(GqCSW>ڕlc`낔 %I-z>P.sh$B YಒZ愸1 fH6#5n4뗮Y)jTy\piV+^v-+uA* b"˪¿KʭuzwލPp(|črmQRrbxnH[K׶μH7/҉'=*7S[7})aFJ)VcnA55}:hz k ~!~<ҸC7}LKON3ws'(6/j`յX~6QX*eBtd-[-~³9#!XҭL6Gc{H@#Qӱk[k+7|c-^\{&@)Q|VQ4T\0KQxmЃB -ާşY0@+OWe$lBJҋ0ڇ}[?1`3]ґiM5Uf ^:2XE!>a]BFg$q;iV6.{mgf-SȕH^oR[ UEE.1gHx|'; 5'&rJmA`鴢㙁nD$HU`2X&LXXe(jD<QsZ[ۺxpTx1MNN{}APL1\n -t(q% ͠c؄[(-81$|2=}uH;n]MM~XI9Y*9z}Xg</.&x0bz뮘H4^5ƀO3H]an#i( E i| rBS(rSԝ>sbdJ:(X -WxzZ8/|ɎOy'iE;V3zBa@I;cCPGBtu[IIpR RP4jpiI̋\~GJOw0## -w+&ؖ|q I,VV/>xݻoA4'(&#u'X^ܵnNۑXW5 =^a} -SPi->-ӧ\.[\etvµj$9ϫV g+5nr=EIte 1v n1swL)HHAulԏ $ A˳;Oz4 fWlWhTҚ, B܆C -MF) :> ĩg'O=;3C^jhM]-%8x)]ͅ/HN^oNӫ?_\ Q5b,=7nFh! -+X##qG !JP,AIL5zsg*ՅrvňTn3^ϭ?_1p)JŧV" A nd -[^ ʄOp`gŒv|ڹgvUd's՝F ^{al\|hzrں,bPŀ U͸0jʔi΀0qk2 \~r@& "ESn̰.I +$`x\5[+sg!69JJʶw`0!Fe7uzC$@TSRJr^(US"%[b,̣Kz& ( -DNqD^wx^2'77RA@z=,Ǧ(IiC* ]+N;KA8yȀke ]rnap6^C"@ǟ8q89Xhv>SYϕזμz= f b<@^ !Yصg Nyy`O7O{AaPJQd']gwʝUFLƳ3枢7mo\0" Y:Zs]b6!Hlo@˲yEm%OAAt![SX^G\{[wdz'|O#2I:ɾi*fpr}ZVSۊ/Tlzt, 1 ipHV[Kf0_qBv;3FH:H^j6`Ici5Hwjjg:S( cV$PLډd+@Q~2р m0{p͝?<8~a_hI{;Cn&J5xKQ8Q$jP8gc#n!4}^'\ǚi2l-I's?ݾN.._:H:yAȀ>s< ̀n뜖 -x~p:si^(J렬ppK/^Z[.j:/|Ҟ93I$bL}hFg;"!ݚuQOdaҐMҮk(b~tҕ{ Bc(%dv+ 22l:jG5:ƍ3HX,AVl(n>|;\$Th#QDESy^(3j٠0<&d$25;ۼX%[ml \eg%+^Z>{w:n ;n}"Fz_8$ BpKd^`3_%S魳w|/`%zAl2]N I`]0کg&Fát׋`݃ہ;A'zr0_N!:F WjeUKZ<7_t¶{J<ʯNg^ j'!;* 0D +|!Q*zFN8;y)56[6"g=R} IbZVs[/۱𐟢jjŝU$Of99br "\na^m?s/έ^/2T'yWbD=\zP"~(OLdKV0GCnI5rHݺwzb50:)Fg=v/B.SY&8fI:{iNxt?Uq&0 HVrU*Rs3s}Мw~Nox (*5ô$i:6.;$IOJPKї?7/]YvpsjmoejYӚ`? Ijf -2|59z& ZjXdy­c$sj"7cDR5H U/)<A(AL(n}m0wzbd^H7{ o>o}}CuOIJb,_ڜ^B}ŊØI4F$kXn{}n~fRZzuL6 nV$Gs͜~(dxjT+ӒZ5 -i^airuI3KofK^+Di];U0VfPPEgu ڏr33#eY׏VĨL6}wάQkܿq݅s%][Y )QvR@1?elrk'_НyH"NZcRr<7xD_lt dۍ )5V*v7SHbY:Au7fPbNR\6HD:>Ye<^[{㤲{Ҁdaii޿JbgbluDczJ.l -iX tcЭ6gDv"5V=@QYrs-[])go~q4t/ʵh|>ݾJ=6ukV/Sl/T:-I`PĈWjpiHwyz85w̢irjIM;36%f0;b͏8fvx8&4,:,UG@/\?}hvRLspħ9_P2n{ 9je3R}PhFS5;jd]UwMZ{pj5.Ezuli)$unܭ,b^3r+^R>1 nf s+?=x-3эf+sf~;lh,T:_9sΙoo?}~~&cހG3-:ʭ5wシ{|wxvLmyfxiʥ}sJ}{/sWO/]g,HUEFHuuj\,@qY_4R<%IŒ$`"fcS!O&SZ>2 -G7i]AcгLn{%e$)M3dJ*.ˢ/VkAMU1W4G .(z1S\/ U- 4E0aҌD~]XuݗV6Ӈ_WoKJA  ڳgXWh0Bf(NaT`9KTҒZaD% :sR_'k5 5>ˆ(u4{<4霔1RP1:,0k21p\2b7E21""6ݝ~g'!e[:N3r&7%XcgLo;b:?'QMshHk4 43Hf& AcӚBZ嬠S{g;:yPZT,X8J?,aM:B%N.Cq1#RpBi6E ko;De<~dqe?xkO}|G\xasߚ߼uoke0 HƚqrbV gT9>08>:{|[~S|Vthʭ+篽}޶/-F$bFݙԎTBTzYR(,}RRRr H=vŷx^+v|upn}ޑ䂪fi5iL_$oMQ@g0)'MV!&o) MRqXѸmFv1?<%BmƦ̼юifDK $\*d`kIgZSCr46U+5Իgty'ɨQh@ 0KAg6l|LQQΖbi@`Kla3[5}pp̰6/=ly>OUBN (z<: -w' CbB(Iȴs\g:U+Tsލ^ܽ#i%u\%\.^=sp\l[trMkF )C1/PËu'\kl}qÕ[̬&%^y~wX햦.=Wˎ_:p/h` g.W?35w{r:~o/= Im>0_i5WPHEPU5k鋯y`nt2vA=Ǔ5U߾'R`F$nVN޼| /<|+IfzflFIQjV7<)ϩg=)4 -YKG]ZpHP LB0wY0Y42(|%X/[ޘny>!IPXnSD8푬+i >\`I\ dI&D$,khdqqT6*:} jϕV8JN%!=-0K~w?+.Օ"$!MLflg(}~y$kӝXr)\$x+BScf0 bZ`CB3EۜT{ZFYTKeUՄe&3w~ -'I2e4$=%RӲdv)SZ{תm+s 9LkFJ*jOSV:Բn4>a*zl+[VcpgKǧ\:9s]Q #Vf@}%40I*^}OxCbXɖ3U}=y>;<$@@XylRd@( ` 'VK!DC|{',D"a !1YDsZdJg/lJfH5JPH(S2d\2 OTʐԗWO<B6>FBa'cAHB#h)Z''Ѫ4Ht;HmjK['a#U/@ܓ' mL,As\̀hwG"Mn}b`H7}\ ͳ)Q.t*sAGQfD)9'Wx(b"mc(M:v|>.i:F  #&FE6 - k]ͬlRn^Qr&H!8R9=V - ##1E4_IFYVԦbNyduυff/.nߞ]p,)\vd57x "P=1O&E>Ia -jīk3-A㤍aNo;|׌HK2 q"JQQ<, ~:॰LP6˦)r9"jO>f(,p&CK(a7Qi ATO9&EiJ/U -dvI]w&gDr&ݢ&3q]*R|-#,˔2   @`x x%a  yw"S  "TDK48a@ aD(d#9ƒ$9"cH ш3|A,pòq8 {&HCqA|:0Sz3{ yD"m1db4$ܘp+T``)̊٥h;KPpxOR>/H,Zx&1pӍz4Ltҡ ):<4$$UdHD:p1T"lrnczolzƃ KJD%.ǻ" )N`R&ٴ0NZT(CE+ 4$KM,4*3Jc4;(hTCU24BC~9b;ڋX5|UHTry9O~㢂@bnJ -ɡ  rLH\8@%gITdqdTpx|T!%1+iwK#AhI8$& NƇ -CTrtK.Y<>".UA JaAyƱ݊;8Air ?3'd)C`&TX$EA`\ yN[IA~1#v•SPP"˥yD3) >;#>4ȩBԓ1'KW/1ib0 ]N"arO?鿦-ApH@8(>/cB:D -}ϋ5`@+jɞz, ᄅ%e&i@ěT Q2g0*G !NNhB z#cCuOŃ>it80:դ4Hhm[sx$&F2 y&pS{0$%(a`TL3aBr'GCq=-|r}}9BKPCdgbttgDhb<0>hYydh$hr>aD$I4+}~o SSL•hD#1 xXRRoMF2mE"IH :ueQn۪MECσ E)ΰv2 #/IIFC< Kɚ`EPgExUgB܌MmU(B c~+ܕ@EGD,Qa 2&"~,C~K;r-~0Wy{pn-KXX eJUL$cYGV(Yb^гcç<@c:ǘSS#Èoy1,gy0kq<ȸ'^|d0A$*װfVXh;k f=ViZVNbK75$Sq?,^As:K6Q;[-UQQ֧/ި7E9*11Kؠln35oarf.o WwwW &p, -kVb͵F: XTA,+~o6:= '~.`t׍fGsyv/e ! bvk'ӽ^ (qArP^h)R$ N曩NF_O魋otpʠulhT)'PSGL}qy{_}{wA^ -9ILa`KN[ZNvs﹝k oѧ^vlRSP<gD9 >L.ZMhӍlˤ#񌕡Q~x H[rho+>?k|\s_zcG?Z}xgB@y Kzl8S8]=R;wxo%y}>O5V0usғُ_]ygﵿd߽_|گϾy+׋B -1%R팸2f<\zz'vWO>zs3L=^Ob26>5z&b8+EKބ妽6e>hO^]?xrty|q)_Rލg/+ȯ_׿W GڿK?տՋ1Cp[%e̟^{_</}ũo|zG_=_<_G7bţb3 ʔmdUVHh/mۛw}bɥ~t?~_;~߿I۟=ݜ&1 Y" x"ߦ& -̵ss+Wvw|o?+785|o0w;߻O?y??׿7޿|f>)13дbm\+`esUo.|??+_?px͛ K B0"Y54i㽫/*|ſ7_ӯw.Ï~oO:ka?X.LmNw zk?oͷW'/G?3 lB^١){m}t:觮?~/ֻ?ǯ+;kAP"p=ds3~'`;_~߹v_?_ʷU|;{<- <;Nx)>0D.N 'J8?[Oݏݏ_O~~n --hI:n9Q!V*^z>-g}r_9w/Ϟ򓽿s׿Wi )Ռ @z`}jF_}Ͽq~;"ɑa!iI^X/Rgϗ>/__?'?G,'4-ck|QV -|+g?{_}mGf_ww^_. e rJ2^L9B3ыs+lK~ W^xJͣJ…CbQ4؊NgJ|c޴G5;}}ȈȈ*3++kߺ}sg;3p8 E-4%BH$LC?L˖(H  gD/pAFWwVf=9G/>7?GOÿ?rqGkG=U$JH^+; eg~?ߗmWw_?_g/g[g:9ֆ+5">w?z5ν|??}G]ȩ*so{zU/xw??rQ>2p~]TjkMG ~Y0xxɟ_ً_??5C'֏75)8e;d q2T8tbw9]gkſӟ}'?{qS - -"纘%M/p7p@ |A`nrdɓUyc;~Ƿ;_=^˖U%8" -qj AAqux:AӋggn׈`"4P([HˣD( E~?z?_C'T0hť -G{%D(?y5h?ﺟx;o_,mlu@.3kس/ ~(MoUk/nk/?XMY`}xzI:j#KFP5%K PD)ҕu5b&w_w8e.*V8XҪk4L娖)jjNAv}+!uMQ(FN8njz\PM|WVQ4I ieStNAxPRhIeL%8O#dFS]-dqHӼ#G`Y%(Rb î'S 4mhu҉\6]度oQni=ߞ.w'ӋI}a/k+E|}=S*϶3z&Ƿa[(,vuf|zQnh˰$+JIzYU[/Ghӝ}S X/6*FSfip&ȒYS_,:łI&װ 34oy Q(_dPJY*XAJ߱r62YJ%do1/#2=0 K&oT J{'b@mj_5pMkj \ )*(43͖LE[Ae]RTAs`aZ& -4I81jD[[G1(eسr4lel64hƗ.kd\~7 B:ku%uPB<1p*˰MLoәdX0U y59snnL5ϑ 144Awڏ;^vyߘ=N[FF8$eSIR77{[BѢ*7nIꖻ.򪄖s3oKI|Μw2uʵ!GZ,rQo|#SrSVw/vRB$hFfװeo6yV"uF3Zl`TU͞O6엝D/bAjXv$ӌh}7 -HY[Nh#Um 8U楮-*lNu,{$(ՙ5Fݠq Ek/W1FX/$cD mFlrsi>Je"br7>99~sC0܉hL)NJcX -gEu]j{CȗO4hִ޻ q:Bt8")L -jH"ąd "#AJrfؑՁ]^`.AxGsdI%˚jPJ)]VR,U#>I>5E 7 ϫHQ. !hL35ui^mޣ%[PNJ1w7o2)FRa)~EQ(/8s-;1m5Z7DmV/_4?Gi$zѶW݋+9R|f'mH#S +(ha{Siׄwe8-j,Gec -Ts(fѻwaɷ{泝/~gW9iT~P.GZV0^.JZG:b6Uk޳k(aJD8N_5z/yy(Y!,z:lƵ -˷02,O >1׽ò큏!|zs79y+SYZ m U{hV~Zmݮ5Osy]36tk3.7QT8׷g*6܅,EmTD-pl&!kĕƴqCܴ]ќ!DEwInik\Og D'<0Pҭiu&(fK*"e@ٛ7lW:gbAU՞!Lgґie}< /`Έ)U pB՚Fo0Cu&4$'KtF3%P/oxя營l$V<=}AKXHs}=nLiX'ݝ*H1ǚ;ڧ6ѻ~I}pתO!;~3qvaoL v/-vxz;'޿v CQmLg=xy{H3 vWu'/]sǕywN yz -0~}i vh $'* :du??ﻃdF#,Ftc'/N{$Kru\OY>gj=LJdlɒ[X*EU-">JVAs :WPTiPL%uLj4{s-hխvzw4_Z&SsF3Xm>UoU9<3I!dX^+6D'Omwf` Q[7ϿTT\U LxruK~쇳ǿ:YE_7:g;->N\ɋd&Bbo,>=boBl1%4`o*&3D*Yt4hah:Z/?v2狚Lˏk>թ(#XP~>ʬ[_OʕTV5/_F:iEgO|;ɃB_v sJĉv>߽xC=}.0.< {Ӎjt{ #4ek8cF@bUw&y lM17ZO7>._0 w7ncp7֛<|Wۏfw{cMc?}p|w?WŽOʎXK U`b:-GDz11Vv!)ގ.7><=rv/v:נDot7 6Espֻ0Xp,_7 endstream endobj 135 0 obj <>stream - I8G$w-o,덠쿪^wdǠ~a~:~w>ڼ7{kWvjO&/jIb~㝋φWRjO~A+lTmɧ?9:zEQ>/;.\|sKI u0Ʊ[; ?za")DXm -0&S&  BŢvkUF|u]NWI&OmHa{tbYQ'[)[ {ˋߛ,{fvVgo -@87GO:Za;StUc:gTm=Ci,p๢w[ݣWٻ=/|/|M0_C<1/ͽO"ٰ=w^bGstatWI=3ZճzhjoF/~0!}Sǒ9Nw'9e"3d - .r*Ob*A{z;3iQ\5WaT NgEg7/lh>_'vA gO3/+ʍ߯6WN8oTwg\=zsw _u;f0{Н k;nGtV׍!Ay7>G_56JgM;/d y-IcXH(@)%OVg6/W΂\Q"*Alf[fy60b橪MU=zhZ Ht\kx1^1-FjQS'=:0w)ݗ&CF}*f DqwWJf6re.Vx8W6_? c94ڱ޻O~~͏i:;9y}t@Zw`\ףO֒$ͷ^ABZ٘_~E<@'?;/}y|4h(d鋟ªdYms[ Tq=?xK(%Лx0ybVyӮ,~wQֻW*{G _jmގL*YXۣ(bv.$[q*glŒ5::"'xeZuclV1EA|V̤K\ (C^P\ :mάčl[oAYv5Q/dspW OW{ҥ*UewJ uԮ6ZЭpo՝r}!k)TLd$?1&:6S YB:8 W8xeInN@3,w[ Pэ;AVTkC 8ѼOsmi -l&/$SXKقˑ˗%ht%iӰv;֮6 aBqM ][po/`5Ug.٢CUUSdp)6 ldRO^7O%1ЌfX[tF'r39M`[ZEg2K'vyv:-T5L-kb{;ыr[=AYR:d9У]"k`/L)Qc:k@ĘX6I[hƆ[ٖ5cqYg{϶N>`P4r#rsѷ櫇p{ -"Ցe?}BsMI/` oeAvPOY6@39D'(=TH D1@cT[Seei/g%4; 1NWry \k4:6(B,.ŶH,k&BF2%%mh6:!}te8>wxI/"6#v5{Fl -b;FqF,?Xdj0`2WE?S՝|U\DqB4fY)p-Yڍ+ɢ?7ޕBTeTdeT\?D7vs@|^Mu$";IJ 6Ieem13!|?{8kBwcFSnthi`z `%B"G2Yzڌ;P^d%MRe񝣋Nu9;_uvSTf`#\^vigD2"Fz\ܧA:IUc3/vߍg@@h"/@|rg8~mO1G 4R(P^|wӀI3e, YDd۟ w_ȃnOœ׿l -Ctٛ4WߓMQ!AUdVSIm TFɗLɜOឨ{s> A g?4oDFgӝWP紡.9m"6G7mW̙)֒W5jwg[ɾz8O+= mNyڠPAညt vy2 Ua.`] }V…Me`qnE%Ĥ@TPf%4~RdY]i$ݲ:6N(CO b/!~Bw\ˤQUhF\+DӲR2E6;[; ߼Ek1t&b^uTȫMQ"_6!|@iK}٢"*}/XϦYս\986Xk -=O 6q -I9L{bWOK^o32% '(ʐe5BDɂ?GEE _5^pۯ”~F1a)1ՋWA5A(9&dR$)g&nY kE˙uc Kp^lZ~x䷷\AeIJƦhmNt87i1Wcԍ$3kΆam# +bSfeGDIț ۈ+=mwg9*p h6 ΰ@ՀT;@daopz\1%u8~O:#ltvc@SkqBwʎPy oӰZ͗iMlu[^e(y;6iHRq}Ns$`N7tg7l<ۃF ,׀`e !@|RsEx' mGkH&E0gzQOg --C~E6Yi,9ľn%l^:aBl*(o 2Pe tA> -={A]V!prx#[R9E-_PSǒyi=6_=y}2y!| 0Uc{ ESq yh qKSEdjǔaY!ޜ)6JRp﮲V_ -A2t%NyѼpV3h*dK3RY[n3 Bf<Љt Q * ۆH$('7on$SC1P*4d4Ezչ<@T2`:5!'jq?6Y۴4 =|Tr#}3˻]`E1Qid8!ws2j:&L yEk 2UEup<ȱeyF+W'KS|B3+MʕE*-<!n֞'D{j#e @0l-WO&__+Q63L;po Wֹ`""2X -SASL)vԼN/ y3ЭtVM<ƍR:-'I=n(~ u| -ᾠ ܖ[Ahq%^iFwN sjmjG8SWCJ|qRl52i2e%I/pda" %pt:1BdS+oe H -0L DAހOl2r - ӟ<LӖP Vp[IgE `k4{<2XWoXD\?pK$y uԕE0`wb2IT% r w ]a$[@9.tJ%b޼!$ŎW=r_͛$ 3LX8mt@8MQ/ ^kdxiPmNjdl8Y|&;%:& - E>;-Xf.@AA8a!/!I_nxdx+LN*:0*y 3Ӭ)!>}ڡ@悠*%Hn"$N9#H6A2ݸ -(6r9>)W;Q.o]cRZ,Y\aqv3/koΟB쀓+#t!IrPA bSVO!UݼYH$HHɴ%̎AA@5mNm,^\#nJF`/T>pLFqbhHbA煦isAq+/_Z, -/:{oǟJ΁ 8ew!/H̨y\r F}>N$ԀQ=YVbI1Q 犐(kݥ>N,`; j;D]"ΔPPjTR)<t}+<1Tf@32L$> 8^F࿞h&jg^XPC*ಳ)5x KJ%빢>l?׌?_Io,^)Fe;+]rb1&)!eu=2eK 5Nq -biC׋CU)i U8jz3RlSbǪo}F]7.5m2 /eeqLVLg$@`ߖ FT%y2!E FQs'.8Uk>Qؾ||IcjX$/a5k1Xᗰۧ_2WhBĊOE}NPW2:.KP L+T. %7 0ϰ\ty#3'DFP;hoest$:q7n"(^MZv50l !PYfk檈E9+phpl +2mM^v?  -1tG%+:]eyprZS͛TBVi#TmN9˛ٜɛquL&q]or%AЙRVM.kƦNQ,z q= y5nߎG=-H>7Todخ÷y-w%'s%;_rbFvHR)L^O -Mprl~0GA_p\də nI257MVv'5  gN gb&Njb ~}:Xl- Rex: 8U4OKټ&iFb Mtg;^% jD9(`_:xK0j1fד=X؈$k *WpAѻc{Rvd1wEp`J T s9xs 8p^ )O1CQ[H:3l#U@Fd>qw*{ ׽F޺Ẽz TcKAUA%H@Vz`ڜd*FK03/x- >>"AP^Y#Hy-h^^ʢVhP{]( L-5R&)WM[LX"Wkݙ! bǫ9*ŠsAYq҄b`{i6T K+I>wjjOK108\Z /I=oaLC 2>ઽ ZCP.50< `R}=kP4LŚmO} kI1Ujh+ɩ`8ћb2 DTE3ݱ;>q#I4 ̣..Z9/VmmX22fA:pu`Vu@x:蹒w+)UN\@RIdݰqQ@_J:䩍ËhKH5ki;[zRLs,*GrHwhrt}EuBƁy`*8v:UW}pկ {Y.l)` UwuIvѡ#N sV<1b( -V>ٲNjݷ%U 3ah)VШ 6j0ЯJG<vXOb•gZv - -ntkјg+9R)ym-{SZ\Ak4*=? dVLfemjq#fCFoaE> Ʉ(Y.bUIKP(j 1bن |C6^ K[`B\ - zbBPWAA%@4Ӛ9__gXn8\+ST DWڵ&7o1I[q*+ܺYhuAJiYT6-VHZU$uEF1fx/-CM%7o m(foZ}f3~9;g2Ƶ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!Wm\rƵ!WmLdE5_c ֳ/n?ԡR{yǏE='UMe콣d;ZW+s*9W޾}s֍YH d,<`mc I" -C1YozoYuN}v?wU_y'73WN<}/.;wBcMXzH"9^圬cۙtyi+v3\L=&+t,/sy7˞#oz5ϲ~|Ns;c:wԑ#XUcWW,?adW]=5w'+/6N`Nե Οg_e28Y TWoN?Ϛt-vnlY>y<}f='˾w_ߏ.?(ӣs܉+?^LF=j~n]>3~;LHX6)K?uϿͳ.hfɁI:!E #I;q(e)'$ U!]8`&֒f#h.M۲\Ќ qTQr!1cQ425RӲ1±d:5cL:AmLIzPSH4%^nJ#Œ/E4{1 -G4ՍYRQG)s4L^)XU gGtrlw>_u -kvn9SђӜRж W9E`H$9 r1VY [ ǜH܍4kpbIRjPr.i4_ ǝ@ F16}hGbHԔuH(iU{jIӤ]V-2|"5scq<26+4X'Rx4:/Tb4˕"1m:јۊԵi&I?r -u~ar p4;˰e)l0FJr!Ib~g8ưUAhjG՚vGctU&!-Kㄼܢr(IQR٥e Ec\d%#k]A'PXi&ge}IȮ.*pYeJ 4eF0uoEsttnsb3Fg"d$R#Fct.6 H%gsPla<1|1&]+Vlv -["|?s!.CѤ.NGIL#EgHɰ1Q4|~DGQi /UXL8řB.P\A)_"6YH@P&cIgP;MBF4E-$rJ6)!|~irCq4W.tE:Lr|! iC;̄=:I!9)-hD"oOLR~G berS>àt r)MpĉH-A` k -?&/QTֲwͶW$.^w iZtQt F W#ތfCsbI_Hbqrﱜ -z@8[2NjətnETrF4AZ&텄+X<8C/A\Q<d8N@6l65H7x/,{at{CNm[ZLJ@`Θ[RCZ.F3t @Фab -5!md fGVp-^aR `t(bĔ Sh fbq~2Xޖ:2>>hcQr4t}:EVcES>N! kt:Ɋ MZq|s 31A#B!,[@h&M|SU)r00A(M8׌4N;9I ,ʫ%S3A"=hX1NOQexC"@YaX'HsOJ9./,=LF'a tFjTk=}Mם +5ϜXab>lX]X u+j*(0tPf0 GTK -ބ"/e-Q%RUÙeĒY32hֳܭj4501u/"tcN :9R&;@4 5@<1,`*֋"lf4һ(v51 `+˗QpxKq[8쁤F(@&dH]F -YQn`A1fQl#0MJq #1 d@TfrR@@`ќ$w-[D_qa*ٙ | D/AnW$m6.!mrd`=5qlTXS>W$*"FmkjNS\%ΐ\4Y,=39 -͸ ZT!` C&pa"TPle6S=eﭫnQB&ι -I6ܥl~P: -9LERFzrYO,,F39Y,A(Yi̤f Uc$tzqyFIg+Nx}9;`G# 窘+MBÙ")P7飂/#e[H&tI?EG=I zbVTj =HS,E"T<[0E -0mʧ $R @щ(4X BhP T@"iU}$H(2ͲȜ:N|ϧ6BI]ML-?w& Zqd8LGsEIbx FŁ],FqTR&ʤ_5] -@Zy-+t&m']Ext~kH0fN*f˯zpִV![ՌYcs% kȉeR9ad -+^?X8M YIoɑ2҆HrBRFr'Ep㋡X&˰|UQ[űs݅jeH,i͋U@;/iɡpչ2>wuރbB ~ePqf:%B%lk"`3'}yQ#}Y"'40h4-&KҒĚ(TeQ1j`4 uX ! " ~>9 Tbqj"9A[LqeҌ-B~91~DWzPzSS҉б_~?W==r E@i& -l8!iNSc(#@P"mqGbY39-EM. z] rMTjZmby]OAC7ZބsK){%efM{o$յp,5by;۝Й=I7:'RzZ饴)(CRisl F{" 8r!܆8Jj<;\HeMgƫQ\.@j'@ҋb/: /RYQjECC %qm r,]$ X,kSS~X,$'d$&p՚1fVgr)iĜUWvvYOlblOW`deK?F(spp>ȗRUǹ!k[餽Rf1i|(Q[*2GF( |qa V+"j9]jɯOJ{H6#&I"Q,b GiQSlA) -%ELN Dxb)0-*d6!%KZ"`E!dU$j"5hLNP -1;єs^?K@d QhY`2aJ_a4*G'S>Р6uC -"h0lp=Jz˸(-I^(,MbSST,6%jNrҬAar#{|>4Gdr`CY|ڼRDu=`<^! 5Qžj -LJ`CqP\N&ilZcŊI6/zcF.+{VnM2]aydV@:MICq4 ~r`Cۙ44V!7\+5˯ J5M+ -D$X+e^PLNq0}t>gŨcNlW{>̀_9M&7:-蹉0IJwt;{Y6 5=I򤍨PI% , g(>'.D bd;åcq#W'pK -4!fG'8|:xtr2~p -x"s඀tȭpX9\рsIH|đBlFuRҍDJe.TR{â8GF k1@!ȁu8ʹql܆vMNC |&~RQ8  ܉J2)2 j>G VP0I!C4)Lyǚ ->Y/m )J1/lfJqa w$r4QN"5+oZ3tQGu^*d 4_4yg{L&3K9x[q;Ph@Z;)aXY'q8nb"Jx"F'1|YZyѷŘd-'="FS>Ԏ<E n':­ l8er2p˔_"FT8@ׁO6~75BJ;JRɉ) R,tJY&ڃHLL¸ptvNW`0L|"蛲 d.㐈$s`x @) -Ժ;&qr*DJIh]78 kNL(0#di8q*2# '%ӌCӮ"re59'CV3(6fv`!%N= ^ -+xT쾠T|aЙI$w$Pa\,3XC8y>k;ڞb9MxƉeQ0VSrʞ -Eu #ļCp[.ʑT0'bxf0Ng!-gr#8"jǯ -]r7H8e2&_Du'χIFu~?kV74S @G 8Y1B"[IkJ >&kwvs[p㈝2K  N;c$C8l8Q#(/(Mg2{JFqIr׆rxG,WA8ܨ҃GIĢF`U]jLLG@wDAP!cRxE?R+MZSGHpѓz vT -H܉1(Uغ*TO9M^(F#a@4H0KGY6>2R \TvzY,<:(6[w`b1Y,WF, qXCyEC!x|<(ƀqʋ3&9YzZ % -?DhabFRa7"k(G'Yh `vұ9( -0ą(PKU2I6 qx8 t`[ IM@ -?q Cd)CqH1$9s;0a -ZrF ~(4CA,Uʹb(VŦ5[murȟp6Rs#IZ] -p%ӚOedJ8%Z,_AN~QR lBL( F`"Oy CYucw1C]!H3 AhKz3 MָJ9HGr1r70 iwOQ@0L"T4Ǖ50u@ -`01qBC~CȪ8ȖA*f&J`%./Y"J1F *fJ盢'ݦ$0&}H -b#wMHxc -;`7ܝ$$4i -٨Y*"LFu+nM^fUU 3 c`?ś:n)|P ?<R41- ,g,btYMCѣ$Ed~4(<0h%J9 $& j7qEx}8 NƃwPz>B&KփJt#/ɚ?YƵI@Ĝ -?d.Y>R$٪Aeg@Gn(W&tRq79]wNҫ~,h-Em OB8O|FR@IXOyK]E@9uh&r`(Eх8!:4Z{ȲHE]WɊl^UYT 5$>~R!aTЄ ?ɌrB5E#.H$yH*wD>1q@">tYB xb@!L!+SS;BR %8*'˵CIKB o s@:MNr׀ >78y'xh7Db^8kN pw^>Śhf?'w4"{Pm,)7. @(&$F! rQ}1xYu -)@oWQ?3q6@A3TeeK)g.FmՆ/8\E,},Pr!` ?\tlE.YHI"H`%BvPL+'UδLE[8 -ćXAz`N$Xq0Q,W]l(M-E] ^kaZCQ 3ZcGl!^) &N҆Tᑉ9 ;6{ ]VT61'D"""6(](Tԡ,WwЭdux06K)is /Ilɖw*H5D5α 3La X>+Zb_H A- S2dۆ=S'}j&J@o0)×eL4Wd $08×3YEqTVG*RW#k$Yv8lCV'yĥfGKÕ$SB0 GPVYM| ;H-5#K QJ45| -ȆRGB!FCq\ _99l}p\#K>9%@D Ĩb:tH( X{RqS|WR+Tt۹YAoF_5Vfֳ@:KҨ͒S5k5 D;iE-)-4F9].<isB A$ R=PQ-zGM s5~x09W&QL^ KjΧ K3,`W%v+J I5=,A[;V-E^zw*W^ɖ7$c(i#P-/fXQ쬕1%BgPVW̞nZu[73\t0_w=ty -O;`[Y)1Vn$J8*FWT1=}>k/w9A,+j,멁l4dFҊ%a:3Bu+[\Vy}ә3@d{gƦ2ly=CpOKKR).e}YPd:u#5BΓ, sU+7}ׇ[Ӏj,\/_Yܹ~N]u~ƍ݋Ouoq=uy3[\-Z;ٳxDmgf҅5|yyiz U6Uష) rq4JZXL/9{-M^ssx;}?rVWYEJ/ǧս{|Ϯ\b2r>[Bj;nq7_;;Z+'k lTB-/kө X,[ZM:Js7sq2}U gV9Jk 5Aݞ>9H jg -3ڥp߫.^Nyg6oO[5A>wu6'Zn7=z6O?fg2u= ȃ\uoi{3 -+pf8N]Bk6AW=;Yin[BDS(6֣'d5ola>֚>_ڙߗ󖋍56mW]X[>~zp^yamѵVvX?xOy*ei֙w\_`ăwMלF̈́=UZ{N^yrrqc{ݹȁ)]*O.޻HtIZ래ۼ~ꍓ޻[li!_]ssn~:qO%$jq3dckW%5%*io!pE 0tݝG_Wd D33naER;)k|k^{s93CFU'+TmHJ8q;0u'dx9i0j;;;|fzaubm㺓Fg IMnWBg5s=6q1s6[YGozC~K4 -DL+ DZKW1i;w~S_\ܸlc^s7lzr䃏U>;>f,l\r3o<~M-hwۥ`‰˯]} _ܹ&[ ̷ҰuJbtFsa4'iE^Y'&ӥti^M4f6nY- 1*f 5Sm df.,^/wIx\o=r5WLVf(M9U*kMio6),Js.֥cנ| gVZڹ}meIϛy|cLFRkz/ E>؛w{p;Q囋?^ۣN%׼'.=\h6$:윚n:S.);=n+(W\kδ'yr򒨖0u2qgnv<'QJ5JkeqZ3'/BD8jVr:\ؿ d7}RkOo~;{3:Ο0"Lx^R4]s8ԌWu7۳F+W VʕRu ^rGblB6/_-U 監=(7V KDz$8r|'ɷ{ PnDPmAIZT{瞘Y'__ٸwr. }]~4|``q,BY^ C5sחw;8Gsqi_٥SqV$w;[ *kz|}Άhk|e ̕+oJݛ.Ruc'd]RBzg\e.Իjm\ZH$+sR>\V*pb5in?z4?ڹ;WL/_[rgZ퍻Z׋ gܜ>-ykNۀPTk<݋qbHK⎑jlx+'R](Rrމy,٨)V8Ti+c# I3dWWjcEv~ɗ=l;{_i]L~ɭx謖j۽¹E#3as[_s7_bggy Q7'@@ ìեtyk z yԓJskz:P7D)XPD G|aafRx|k^]'3OօhRMQ+ON/4d"Hy(40Wdnvҽ٭GjNw~B3k^UMGD_۸wm\iSME渽מh4yk6=p>^kh^zU'7-UәLnAOqNn RV.+'7SXg\.7p9la{ 뷶j.mm:}9ޒw^8m,˚d-ؽl_L w܀2Ok;;Yݽ n CNv/z4}AI5R:bCOB6tU۩O-n]=u饳l<}Wo?ZO:;_('.eYQˊ( 9]He +^RF:.זV ]j-hZc2!? f-SLsVzfmp<__Ru&dYPX Ulx+tvUVJ^0$Z4??)fb8 -NJtqev]w6ѣX3Pr)ͨjk[UlN9jV=aәj}صR2YĀ -G\d3aDwk6J㠟הR[0Di5I.fm]oV42jP?uО[oͮά;kV.վ6 -LfPXj$\RUF^ewB_gvlU;b}<^9VB -ﴗ Q$*&jfk[QJcZFFkno%E,qJ)  $v5|)(j*a2偖l-]z6^>s1Z6+S|>ch*hmV9( -?)%IfS -ᕚTJ F џ;hHIjʢ+F81kꚜh8$%w/G!Jq)[ȗWesb$JB,n'Rrc;_\k8w5^U0B!Т' ѮiwT) ͵\$ DT_2۳܁~oXoWWKN_;“׼,ק&~Z5 Z `@LiM -zb蜫֎Z;١ԺݹϞ~?G_y~׿}n,:ʥ6n{~z6w<[7᧟c?ԓozk_O~3O\?㍌T9GK[;'OqG_7m?̛} O=?_|s_|y84D9M3"EoXM;B[Y?su;/]~|[?ɏ~k9N1ӊTUZFTvrvxgQ/wf6_{ѧ[[[ߕ- wTLM+wi*Wh~vqgw?~ﻞ{ _|꩝cWb,: ìBxJxTT߼|}͛׿>wg+7O_/_@@CA4MY79>iM/fٜtg;ƃ+g[ve=B'uoif w]zϻ?}?ɷ_|_>{+ ΰ|gs%rV/6a!.޺}U|;?C_>?_~7{~OnDo/7^y[Ͼ{П~ __~+/|3__}[ogg_OsLU^czp)<.\OC?|?O~O}~‹//C7}ߌMp"E%cddZժL^<{Ͼ??ï;~_?×_z?^/~^h)Wꁓ'Oʂ(81\Jxn~3rzݛ}[Wo~K_/o'?;~*qjgO|>_~s?|?__w_~G/?gΗj3۲kFo{W.Տ?Go}>ҏX?OvS$/WjZI^)ۜM_]u0XA<[*Vww6wo\G?Ʒ_?/_O~ws 'x!tO_x{<%iu$*`1&$ܾʕ\~P)\;\g>w???~rΚV銫RxtΕη/˿şO~OٓWӌFEN !A&a gW|_/'?z+^^oS X9۟~O~o~nu5<ЩP(DiLOլY\]\ڸ݇_~7?G˟?Orr*L&/,Ѹg'}𢡊^oo~'~?nL h89Xp R—3Ï^>?ş~o_OǻF[ У1- 3d|?op-"D<4m? D8,s% Nm+#$8J 󺤗R0O`%(\b<ɚ"%)F\1XPXN+Ņk7neY` @#9CaNQrDMI2)*eӅlVoMדdI-tr)!j$"j&I3vz -3!`;qE[ʍFP̜ioLf1825Q0Dfrn&47H. 9*i%dVV1pU0rv-ebeylHr!K()P!nGHPպx>"@:) IHnhs[&9S((Rzo|+n~D"hDd C*:\2]T8-Sb\ΛZ6I@h@[ -Bx<[>?QDbCa沼ZV5]/#" K$!hE4@StR鲻/\E$hp8Q2aa&MȪRḬ  "2bghT ue)zp`|^7ѐ/EgeYH0V$_o-eH"Q%%N%9Rh"Ѡ1]O7$S82c8Qp.#y c ǡUqY,of'F4-"2--NE-Vɥ\T/^΢5N8]iKwz4Sja$31PH 0KZz&pBєj(bdT3L,a>o ddsiBˢ\beqphelns4( fhn BA _'{ ^*x<׋j–^RrDCDl0i!XJV{ő(>|U0$D[ZS5Fcq z,Qh*cZ]FxH,fzψw6Ò4W 5 ΅Ph(@d zG4#H2u=&bv0TD0uހ}e;lq&<σ 8{94U@#cMјpl`TƲZ4fcAl|켻0]w둘a-d$A-JHi $B(y<& 7,1s9L1-B8f{k4Xbdf1*ecg>dɊJGTz Juׂ5ͫ TnV7^N̊j+Fb'ƌPbNVHhY&$"WxgnsSI6#Z -K7wnF }h MCP^mAhakt*,[䖢 E>"Ea,p`u5ÜRd_<[A$X$&G&Z z=Őd$fG隙BaHPZDZ,[DUYOkދBFq*PXq;X@Y. ҢP I-$p= QB{И -K7 QbHܵ4!g6N%*$ijѤYg΃xx Dbs/iΥȥKHX%H2q,FŠocr3 ES9H9#I.)j-h Jyusey/Aasa xhCb*K'bh&-l 8u_ѩtGb9'a>~F?<n0(#z| vvZҥCڀ&F\_8;(*QP|~!pgXr+R#a}:nYN9˹ܺf/ILZcf`HȜO6ǙLVcRRl;iux]FɥO[!%QTEPm^2 n&HS%ւGb#A I* ϗ^m+J9i#lIiX2:8f$kz 7΋UY<E3Qtq BAm}"4#%8`}x B(zK$N "1*l&/]a05Y?ն4YD0N*S Ud K2z3U+hx<8P96KIZ( -A1 %9HF1i+#I3O}<UĮ"Q)"J皟CfQhMW$_&0r7jZNӪr>nfA4Ba5݉W([aD%cd"[֒ ``^)|~-0,dd^FUk^*X./]<+QQyJUVL;B,k'2n&:4kigv2$D`D S -xrjmx(h[139'WM`&QDg!juىV!~SfKIkkV=*wq**R?N2RU[`v ->|ɬdsk*;wATE!HuNt mx)ֆD1'<o&!IV Tss1Y*Kb<Ʃ+Mg ^X\'+5773euY,@]@bCP )PtKiPV1s$UU7 @* J0LVJfV[Vj!VWK8UZS!i{`q&s/4hxb`@8J#j;&' ^8rkwAzRGg7? JȉDMU* †v$]Y#K9EɊ5F1ZmF,rRQTvdxpQTGиGfɯRj5inG27DSR C4 Y6𻳙c(Մ=[yp<PBAyЙpjt -EImj[>a23Rs%] n,LoZADzI˱P7"Y膓BTQlWKNs3hœ(jEnMZ=vajA Ҟ4Xurz% G(f’7FPu,$B}Av"=\?|'߻mQ3ӫO pUM;êFRN1\Ezމzs38VZ-Uczڈn,/6WҥuQ Bw?z @F}tҿh<;>}~2VK1DžIop%SV?㓳G>? 6ƷN|>Xͅ1qy/ pԖ3 0 Y\w/6>ܽ]A`DrtVIʃlq+(W%X0jHׅ,I6: 4RP+Q|0!ND#$hT~#9GTky}*nn&nCJ(=]Ob1'S`*bv!fX>l={GrQ6ti-]Vu].KZdSi";JE27;;cjJṊlTނ^xu6 oˮwy|޷^elT>oF39q\GnǝHTA$D?])6wnou΋xKs)iHIeQVZ.GDwreTO a-0(GS(prW*\7KFz1ؘl~nyJ[fj~H՚.]#zbj$f9*q2qt_x9~d罠}\icx㫅h[#$&U*SU.l˲r)f*>EQ$a=fžy *ZHQ8OB܇%-xzU݅Zݥ%jE%>u&M:"b$JXNp0 -v:u]|haIm{'rg6+$H[w>yw!t1)]YI 36D"N8 L0<ʢ\\_b:3E-oyᗿaU+1̂*FEHrДH3"vW\i)[#58 dAtT+ht 7m f.y.@Ey>AUy=PP pD E)FJ;唊YxLljI~yVuSh O2!9@@G -R7R"vU ?$BKxGfRnwph%XXڸX{^Ou81MJ7M&"a_*VKp繜5 -ED(Hش'~E2\8Y&AZ}|O+Jݻ|e Jŋw xy h@"i Z,y nu`w\3\קX덣Ny@Pklq<0?[TOX@|ة1(`Z:lWyAo%^"F<1֊|iWyXAcS@ -<_Ff&; G`XЂ$8tYg#V/\Air8sq"aaSs؛ݔun:ڃ;$k #R z~Qx"!a {`8D~.RBR/%y Y*Ģh\tv6uΙ7eJ,4EX0'=͔34Y-,Ydy[R=YBF$I -s@PEȰWe =hP|~J(ŵxCq[jܩdzkZ88|Xm2|Lʭc -ƑahR֐hÀ2 &07h!-(ʵ|uw+Figtsfʘ;ۘ$ ˱$aD"L\/j  IP< 0ryFPԍt% :%⢔댶W6Ov?V;$n6V?l e}NhkAb8bhP B4d/ZӺQ8Ťh@qhvݹsC5P -( ^,kf:9 d8t͠ %-uQҔHu_G$ϕ[G_Xtp -B"֚ ݔx'S??}?8?qB4E?j-5\@Zy\A>4ucJNu:HXD`X D$O@yfb kP 2~?wמ~ʲʨN2j$YP!0 ܮH2PJhQf:v}8MɣrgNWc@<޿xsF$*2LNPT:fUT,t6gw,87 -&81'UNwG?_-o݄lf`q|~4ff[2Tmn=b3AhCϝBf#>/Qa[Vp{7`|b -RzmLJVu( -;¼\ԫ˞9;OPd ->CNPH${A&taj=Ir{<:.4cPIa G5N☞1ΓԚnMNr{ԩΫDbO+ פr i5;}sfA^V7w>8x==.]\vѐBMAp\ -hL xn:MNK+v06F'å[>;O(J鹹׃E#<îO$2NRb>n_CG(F:abt1B8@:'dF ՇDBe՛ [,7@F"K wgƝ eMt -xwTZO,]"ј>(5{gyq$WX槊Z8:~?:!8Gڍ\uL7w:;S!r&5( -D<;xcXRН1*r*PO ]rg=,5m8EdHФ; Rv(Nz| U)*9Aȥ2}zE STNPӋ`4 -\3EuP UN;0.b[xݓH;y$ʁ!窭,fxWiv操[|E!HRyjX7+s 聹YwM` cdŐ bcO.?{~M(6p%-ZɮwǛ(廽+΁jft Pg#g"s^ۢ@q76}-O|zBkNE~p|ʻZ3O6Z۶-ƪr3{ƨ{zNtH"!^Sk5E+W&+o7ZRHT Kd] 25 o8"CAX%YEjR\2h|hzן+Url~ݿs֣;VrK^Z()+0&aD(_HQ @gvzڵw4fgJΓ[xE _vVVEi>blXFv&vz*(QԦ\huw4+-wUPF4PWV(\B !#1⥊,'F*,7㵻;Oohi"]ZZ۸_U<5vP&kM';1%U[cu_Q&l.) bNg3b,ӡɖz 7t ƥ0]<5y8-ʠPbҠT Hkc U3Of[7*Ab~^0*ntHڡټ^,V7@}LBDC<&#a>N%Q!t5Z/wr/_x}vt3 K-ͺk;cM4wWk=ֶV8Nv$QXX{ -;*%fhH *J=꒔r)Ij9S^^ںsrKI΅ܥ٦!S9,#P/~<"6+ݓy=#ty# +׊+P⽋'YF5YYYv&^s~շ -tOҋ\DPI2;G|*Cuj)LՃ[k;Q*ХDZfoWoV:Xň$dcX2f`Jg{'^}5X8D wy$da>4&q D:q-=L0!xrVln8]ٍw>7NJdQ,.Fgo0 -`uP4#)~1`V\5y4|3|t$7B=k6?7;iŵw6LMƬ+9W/_~+07BX5:oJUK dc3Q)T=Ѭv6n\yqbif&g7^JEQqZk ς - _xelŗjKgWn>xI&DE8Dx$],͕6x(A V ڷoȆ""å1x1k$Jvzg?9덏Rc܊'tƭG7 +Li1j;!5HLui+P$a /d7W|>v~5W}w?W^Sliٸ}\Vc՝WDj9p09P8nA ;+' l+{y6?جT~?%I,y-lZ8'i6u(/ߺX_W2Iw_laeZAƢ^;{yYx-H~ KX6cͶΏ/>;ۏ@zg/=zu_˷Vwc4'rejvRwXn -A~}JSE%JZbRZz-OϮ?}[Bv!FYe*F+q{hĒِMwM`,#VC0e׊/ݣ 2VMoV7Kw߮vyjI6ex'[Y_?||/O|o͛ڹ0e5%56(6w9ٽ~q n'wꭣdz5侟A=y2zqםj >' iȵrpuW?{>4egprr?~}ˆi/Px FZg$zYorvf(ŧ/?7N0R]6wN?~]Anq\I{إK~x̀_tej$_9|1< e1 \ xa:'xm0:Z %ŋOQz,L.Ov|볭}A~~TaHQ& iDFLr!pRFsМ?˸Co`T0楷BCYǻ9Ь;t>W)P=wʍmC'H@ X&X:c  ݟD]@Fatf-K\biPKP8#[֚hp,[vۿthX[Iydw2=5̖E*BgZ3%1 -1 0=ۇ^M֮l?~afJcx-_۫uOvͣwz>Q<=Ti1ڙ;VG( -F7g[ГvG\ڻ7ZQhm,n\߽w'>ni'Y1I}z+w>WG'sj{{z}ɇ_/~|?T3Dv:^}z}*(MU.MWCEx4\ģY=JV-,hZL ¢L`rߔTd7;]lJM[(B<@mEPXw"/Y"XxjHpRa$A(&r|BRVUjnIj9e-3|m 5@B ^.isXRĬ"2n"aey>k]IiD@bb<$81i1g!w~>IrsvWTJ#Y˧;hY(eIIc&,Xɡ[!!Ai. DqN"y7B%@dBRZ鏎O=~5ڑ\*Y߽(T&ƤP^"a<6͎@ -뫭nxJ2ͧVI6*t~@ ޖ V6n ƴ?Ov$×~棗'?Vo䋕'kO^ml~pwK 5_l .D)o~nAB)'¹rp\9xw|OZ(ր[XwM=?>eHYV CVgizuhx5:T&Ag$n$ёb%YY-B+Ti{_da4n)݈ $C(+M+ 5,ܶ2+ ෥j(ghesNf+MAi<  -MiXw]u'qϟ'cmFNa%Ɂn#Q"ZZʕKB`K BtZ$SZ{^}cJT2^OAGx'晏(+Rb"yofFrj9PV) YGfrBN_P*b  f4HʉD@9XA8$aiTRV)T5zݕJ:6f"/4VÍսk\;z=i5sHB#Qn=w7?ۉq>xq5~~~fAj;Vl{'_o?Nt9On>zuTZ>'?=pw[ϣ.,ڧ{Wmo|O>^ "x}h++BThDѤ:m$fy1-ݨӝQۂ_\C=^ԴL8f -ܽ eaD(O܂b#[\/Զڍ؍R굇2Ceŕlq)k񊙨*%jUI{N\1,erF+ -SMݥ;Ӌf..B%UTJ WFWkIGo}{_!)Fjʖ/g $e]nOE"J4c, (IF B޼jC- XQ!$>b#(e3+[ \y{uq[tɔc1MM"<i2Ri/&#e8\\riغ@ -IHLX+PPyHfK(1 T@P5↕\erKa;z,:`8HL8"tIг njDB!LrE;ǦQh0gHŒYqW$2 AKb,dK!?0/2$N1hT(U@z"9C+9VYӱ0JbcV Mކ .B|$,1LE$aQ D .%%. CH7[Id1o%GBwdl3$O -oFetnz 2Bfs8] K-nt h/ Tk#"H* ۙDJ@Tp"u%b ̣h'@;K@\!4|mԊ7 D#P ("Vkt -Q[UH*NպAjma:q+yzx_,l@I19l:ИTddL^׻E.<4YC^{^ nmtt>`s8h5QVHb+Wb(;'IKpDΤ\Q2)DEyJfHGtٙ$T3huݣ&E#Û}y6Ed.uɃCs?1"#rG,Ga%5?9 TI!3Y2&Uue11 G1 U%Vl -7t:c Zm`|˄3dDˀΥ򱜒L8&JV$dq *0 B#' 0ܢ<j!e`p!T I7oݢ 1:#''әy䜇7,gi -I!H2:̥O;%W+ؚ͏EC#cDNͥG',$6Zt^KI,+(9r"6w2e$$ <4'1?fs'T@Ϧv9q[őDƣSqLdunx./"(bԛIEH -AΒ dTZo/>{6^|+W>{/Mڝ7efA}R\k&usK$tmζy|֙'/^9|=?oݯ?\}BiD2GxZhAp Lʈ&~k;#.|'{?so?qQhU eqh\Y7kv{8 NOǝO~__ܻ_3ˆL\Pe~>=sbhC!iM8{c|+ov?{rק[N{ΰZd:rXQG.yuYFkw:?ޫ?yi /}??^ᩰ&!) JX(g ̕}?O0k΅{?B+պg4ȕEǨPщ\}7k[?>^G/}3UGK0H`cEF'2R~.n)nՙ{{NU/Zwy뱷s"k$6yg?w?v;?=xF L!DS-o3>v'oyg/\oO_>ϝ;+38WV}$YCWطG_n}_~??[;׎ |$€]^بI';6ٗϹ>N7s|{'x˿~|Ͽʴ^u^^2熿ڭ|~?z~~Oo__7_nʵ% XEe|zOz!wc,<~_|ɫ×G쫷~ŋO=QlC[*% ˉ -Oہݘz.wW<ǟ8/^/\w'O__<L>~7xZkP2,/5LI_^ -+Gk߭l/sg_Wow>yD#%J#eoyO^oۯ??WK{yVdp"IӸlieG+{j|CvҭsTG>}K=ŗ'O|oyzvs޲! -Cڨ9nޫ+ԲO_]vowO>/r;7t=*aErr -_-hl[vxΟ}_|o=ˏkwWogz+cl -wV-[rЦG㥟?pW^}~~_'|o|[pz[K -sz[)ܕŷv}g[~'^Zc&T\%0@Dgs<)X&`Kŷ{evq^=W;o?'7~rĺ16MV ):#ȴ_ 2_4%bh-C8z7V+ݷ|ͭk[_yu+/쾼k~zV\*ã&{P@aD$3Ico__7{zw @P@2}]T.Zz歭Kک}G[渳ޱ$˥X6J=U:o4w/n۫{o,|=siS϶.xӚQ608< -QfJ`AUpYii-GSƃckՍfaRe,HBg2\*%rtu$Òi>,\-4nmTO{w~Ν~w?t}O۲ ӮFX̀!ʱ|a\*|fG/;kw:?O|7|~lko7ղ.DZoݪʷLf[۷R4JsK7JYVMFd1>bvn iH \Naϭk|EbseEA EeX)%)ʘ&l -6Md~co`gae ƹVJtK;wkvbdA$tk(,8\J[S4l4{,WNe1kAesa6Rh'aB K6t^e}Xw -v3/7Rq*Zs -A)`գQEuEHHNU,\ rTFCfXpR ӱbe\ iU8\F!M,67F;JdIZzv.L(QtMVt.Od/sXw[{cz{wx8(ViFggctl{4F̦o2lR6wrD ;?*zhc.kBS4N.;ɴlZopVX8{ouOq%~[UX3Zl !tJt+b I`Tr=4d%58*IxȰHJ@2ޱ9,e2*t1EUk" ]TГa ,]JGK#4j ,1e0/᳸$간qhR:J&‚0,hz>_̰y[694ތl<)VMgY +k:]9ڽxF' .fs&il*h—րPLY,I$D*luDRiu4` [>mŸDE+rA8UȢ9& LF!p\])JIۅ’m),\ŲcVIvn03$O!LlV, H*/ oK ` gsK4qF)X>ϢGs[Xۣc+pJʲ̮F3EUN؅W"@ɢbo=\M#[^l\ATF$)WRڀ7pK=YFuPaNjI&)Yif5ZʶM$>Y#k}3TIu#?)n{S$B$Τ'6 ~lGx\;fxmH-J: gpO`2͢ME2l+iIS;'cXnOҀ(Ya/5$ֲJ$S5cisne c,Fㄦ H Q$T -61 --)Gu7Eg oSBe^29S5A)V0"tr.@Eu읫VqⳒcN};o=X_JqiA 2r\z;YnL (  -rO`mڙ/+Fo.Fe0ǯ5+kct^8Ah؅Yk>bj-x -`h%#+ #B1NgBikSww.l@bIr l?ʓ1IUWͦlbB2w֦JM_>5Z=BWۊ5 B‡dc6˕YX.U{0kJ Tj`%RQE|_?YX]|6E29{EW4;{1)ekۼzÍǭ`#*]xBqzRL蹬!+-XI! -GO"Vu<`#l>-8HPIԎL@&\=|^q=ϖ[;T^ozV-lNkxx 6aIDh -2,+%"kf~mzs|T'2viCۻ7^yDXU -Jx|msvy'67/|c0X9\^X7ݾKP*i|\n?=rgtE2!u Zપڙ\WTk -|cXaʨؘ*$խR}^zv>&ӊ( ǷμVϳ/Aq7x}{w.kLk"q %*F~ҽ:|k5NL.[]Nۧ_lY޼pGƺ&K]Zݾ@Ѫ=UpS+vt oZ^q+^÷@rt/ETڲe]G1p˛@EVpS]vb0y7lȻI2%?xp[soy be@ݫ^Ko}ջt4(.zŵRw_֚^g|⪢ё>%t J.l4ǬT& 5wk;Xtl>y{o>t_X^/bujafs=uK8uǟ -Bҥ{i_Z^\=\>X"7DKϭ>5X~lqKʎ]?rxn^@X|Ĩeg09N3cC5@eg/Rl^ũɑf됦AqK[ieIn\W 1~(s^L7VG7S ꘼_w/o,\=7:{h+qwF9h<]juF>FR)6NsXXTs᪙__l@\1| BwtXw%PXڻspX]1/6;tx ukܳ^c_r${ [/6HNUvgt98 -JnyѸj]p'7+ kJD:իBQ0N6Ҡy%A#77GKV@Js>qEy$*ci -'8Ϫ0_ӝIPC ,W UsXR:ƁM @?ڟKPMtQ./fW@tkO{a+ wegxÐPoZ{ަ -~^ll؅d^ pQѽI4W02ozvÇݡvwol L :x:n0E3j0rfwf'KupBhK S;iV8Ճd9I_V -<pHc{WNlQaoeRlURtRmmcME^! -ɜ;`8?dBuInªeЮq#Xb T>Pu7KVlRLa09>{WJZ|PZ7AX6Ku,\DHYv7duh0ͤ5ф -HS_>E^+A @p#| AtIkAu'_.,~3چU\I& gL{ &(m gMER8t\]dV兂W%InkΈ9U͉d ӈBstqmֽTNɅ[KTzѹlr,uk&/?g -橳πpU,,NDh/Ɠ ͵`rLwvLwE620Gbr14ϙ޲bX~ f94lyRfqrj~:Xk.„Ta}k_U𞊵Tց-'z@ԡ_1up\(L7/3b (UKedJFPS^>X]ٺyܺY:Ey0\YmFԼ앫O hb^kYc+Yy g -MA|dv~&(msPnqY HF5N+{L)`|DRkFٖ[PZ@SNZhFW'OZ -D) ΂S h'grP4bWXb/3R*GW+T NyZoo} [T oz]tSiIP^0:x (?`v~JQZݩvVOwnZ[9[!8 Ӎ;g_V[\ɾV/6MQbhHD,\@q</ZhEU \6w|ŕ 4bwft٫lT"qjDRL %.Sla4場NcoΝ$]!N:cd"ɤY4'xeڽRqx\ҬIq8PHF!PWZ֭Q}N -,n3霞P1Q_h;Õ9YAjLc=$rP/V7kӬXQvwt!_ٴNyڀDВ.TF.XT5|RQe_aؓBy=.) Uc/ LXEId$w'?LD%%\NimM6.!*mJljWJ˪V/T+5gD -\lR"cAA*m\ /*<_>sIfgtZC _&5gsf4XxR|XFʼnW }TkQVʔ=2!L^at`'Ԩ7CXMsB7 -G6s$NjvGMg˙(Am:3\X!N0Z]uJg.'U0"'!$ψ ^”frQS o "T!Rdu3&k ,-Qvz G)O_~/>n=`BPHYxg?3^9vd*9 :{fNp>TĺxT;ͩiO<HJOg '*F}H%ssٹt<ɁGJniz+$}QsV,;(' -@)V'9T]@ԭòƒR49U#\2m`T]PƕNRq -I_+gt֤bNiCT5[;9Å`` &#F* )f|,6 Aq-3kzosp @i4JӤ8]|&SLMT(7g2"EE|NyMQQd9ʕ8Qnv±USIb8&"btP!l?(W j$/ -IdE8``h44SYZ\ ;ǩpnq`&E@eώ -FnvFg';F$3l=(pWv/._E07-oܹ\T +0.i`㎬-zŝ2Xhg/Vlt+w!= ɔ`v5;kɥfuu6+˶!#NÞ&N4v9THmAŽ_>-#+8Qԍ /xg8H vTE X/KzbL̦dޣyra6BU ofh%&m=\=wUxPTQngҕ[o]PXV\$2`OTye\k_p-Aׁ\J"1)}^ru^jadIyz -&JӪ;GO W\Q=eW4:hYIdLYzsgt +*;_^ -(HtR) -Hmoڪ(Hd5Y&)׃a}pbgXO0LV'c<&KU?XͶWX6ӪT1.lQ ,y?4HAsa1 &v;($ k10Xi@Z\eH'NZY! 'OfRI96 07>mB%6-tASBW6iڮ^.3IĊtaqW񚝣S_/A'_<yXCPu)f=8;U۽$s gBVˏ<˺fp9"1s=IlXPӺ(g8 (JR-| LM*|4fPp u0JY51,fl7`,9 Rj_=Lo=idKZj^O !n64)y!cAi 4qhE2T%qț D%#nn9TmuGӽ[ZOR%?ʵSZ( aA1@I[-4Wz˖ʊQ5D^5O^|rJ,(b*w4o gq{:#tw[^0ʠv -loo0F|{b9Z@\GYϡyO5Ph aX[<:4w\,Ӭo 1ڭb:4(Zsk@mLvnhZ *(YIKXTEq<ϵy !TAl0ꠘ L WA\ \׊}H*TR_Jꮠ 0:3Kc MEUj<ȏ'NxTolд;7OB,FWtN2 -\&unƺn\N͜Dy45?ϑLVsQ-pak lMQ'1B 3a8 j`Qβ/I -MP2&Pe۟ -rج+Z?֢ ;?rq+Gi``k8S& )%m TNarvlbA]L39K& *%ErM8ӀDca(b"/AgdLV,%̈́=E05N (} 5ݣ-i]_H1!1em <Z Uh\MetszB12ilD^!q `>8Kqj"?hmq8A51QƄ, 1B P$aHp3 DMMq,IXJG"tX?-N|rGO"јh8+wdc:UyƱDBpܑfNuSvA4ь'5'?aҒ:c kS`Qjx>J>FnҜ[$cb5+w [XE0;x;3u ˊֵjS3Pе=Yʄfn @&56ٜ[ʳ3XP -ʹQ@f|Wi yb89Ǔ<˖QD'0bS2ƚ̩ UTV@*5_`ݚz|~+ޓ!P_e tMQ]JgHIdJ<ܖ -]kiֲf_չ9"q2^,)e]c /}'N'O8U!F*͇UhiwՉ$xF$rBQњTV$ /<,3990$p/A&kd^Au j"h? 0EqF Þe*bu.Y<|00H(/ |2b" YYԍufs. rh>(VirЈVɇu{K,..#asC1D@^ 3d ҆d02`x."Dc -NT s -q*+Q̇i -CA׃)7X#)7#BH"8YH'A\ѣ ɱ5"PEІUxqOFp`ӫ|32ffNg%Xy.)G@Y X12ΐxCؖ"w ka( j -Th]'z&ް? 9ɌA9`66$S"Ð+.iJPXB:9S>d SBGqu{[ej"`APn1aGN4tNVUk ).t{  p`*ID`|j>@q0@ -\ң2T!'fJa?TOΦ,ք*DDJD_ם5.E*F UxC"i'Rj4&Sɔz $Scq5Êᬂ<,ϘE8 C@B8[Fc_߇wmm D FNQO"Q>e!v@d]6S$g)ZWdaL @G=h&r+-n SI)2l3t^]gxR/G3UE3lK _`TꡕȢTK\!I DUFa qo S´[TUj+5ebirK(UEz@ -l"-1Ö14Dz2 /UX,V,Q8TFa"j.\d*b`LҞZH$Ј -"(h(Z/Ry$hZK WP@;"6\ohQxK}00rTb:g%mn@5aՁ~;~~ ~uZKÞ`+XpA-q0EϋJ5w!`ZJ%(:)[Җ_ARiH4 vpʝl&%|%`cQ"{9Q?{#I.Mkm&]kCȌH-+讞j1=ӣW쒳䒻 $>A@EZ{yGD۽O\3S?ݶctg%u`8y7Ⱥ{ 嬪}ywPq8AjOѺPA;;l.8EXyBGZ׊҂\cMH$qdvLgP_赆O/fqhڒA~(Fa0pPeg_#bӭ^ξgg뷟cQC v]\5wa -y\ vŅs}Sܮ3 -[ICqb" pVJZl<խ!%->́(>9j_kvȦeW  !pS@ ]V@BAѵL:b&&|AAgVӺ=++7뢜f[st}˝BH 7*=tg&!DPtrW$|`p49Xe))͸Pܱ|$dWxw/4|` d3#Chyr4޳ xHқJweO+B9Uv32/VTUKÚ*jkەSfl\ɗi\>Bt6wsF&vGi,0UJJ-ѱ3_1-W.|/Z+Q6+m"I!<l*d\r+1[p '֑PnT~>Q޶ xpֲ>5x; Wiv faHyl9q͝׿ur4ϙ%9]8=]$Jnl#8m9]I!_8l@*uorDK۠z;z ^ذ0&/>诇ϟƯ, =06+YAY8>@=@4Ţi4]yS&9sJh'h%ZxZ[Wkw().dXYmy :XIQe`2^.D[f\PfyM\i@$#~P 4-wߏ>SF&r8vϻ[mQt -d z DmP;֜O䕤9+>G%$q6-gM^$Q=5 l;l1BE=_|uw^rtu Œu \gba5Xr j:}NLie -8esÞ=Qm/ ԏG?ֻ>U]}];z:H%[ ؕ2TJXP{5ZPz[LRI4ssJOyYZ cKf`A^)ٜY<;ƀeyƕcj0 {( TҰ' TOۙr\IJ)? (֠:@ :Tg_+2Jz 6ޣeR7JZ/O96ŒpRS%|0|KJ 6̕.y[b劆z\QQt}  -ԃ_lԀf(nh9jD#-U_k_3\ϟ nW@;>J0%ƥhuD_$ !Ykb6>8peG>i^JLKÁJIY!w½zN1jq/MՑg3hbIqtrIemM_g/`sl=4 אQYÄC)юa/:&!eU(Be,k*ɰ ^hjB3V0ήPlKe(Q'k×kÚf]3Fl( >@Z SE Vænxl6hg`&Utj_(x]gu Ek\*9u!iFTcR\ʊ TbM_,řGQfƍ3J||/.to7},BDMJUbti&F]&s` D5dX%GP]Pm`/DQ+`ď-oh͝D8H50> -<((J$`Ap14o`ճE &q -z#W^y(H+=. -tɻRѭډ{lvEօ hRL~iO7a`FI?Wf2Ö2 -UrE@fn7k橈y 2;+Εl1Yg:/_| -t<5Lk:>]XFƘ<$mbyiho -%gwWJ7 +|+劾[>ZVCVEsUG^S6ꑓ1MQxA(HàQ'z+&ǿ' endstream endobj 136 0 obj <>stream -'a wm0}]> mr׶kۇܵ@a wm0}]> mr׶kۇܵ@a wm0}]> mr׶kۇܵ@a wm0}]> mr׶kۇܵ@a wm0}]> mr׶kۇܵ@a wm0}]> mr׶kۇܵ@a wm0}]nO4miyz}ųmi7g_^='}?JGoE"qW/^4EZ( mR Vy; prbr8>/,gL1ǼRtX.-eAn@5dW[قEs /.JWlg'VyZ} y˱j)ΕFP9Nti!)qQzQ"HFćޕTLBR, EVWf2^ؤ4@R[ѓ/0>.Fy-< ]n9hW75!hψ"笐TPt2Y01*H1Ƣ2^t*_eð(JLDOYB3͆1 V򔿛UBd 2E<rnF i6*ѱ )yY: J$s9eSI bWQ91h0iℚaMxcc2 (#^nH)W;$e) ͜TQj/R&HN핤!HN[J U`t-T~CgRNHmwSk -+%u(hL3e _cjrsy DzҲUq>;TF(4]4Gٚ9;nUjEڷ]T61aZ1it9CttKD$1b श6IO9DeرH|A'UḬD{ŢCSe`H$6*g8UP9m7#!,/umʋ}4K:bIn#d>';Y.2g(rS*/3rYg#Y)j_$_0\*I6SfH)Ś`,"IiW (3MV+_}/>~rbFF[QD,iQ(9kK)lw,!ågn0+2~hHRRג\X4f@VlBCFTL{̱eU[n͖l1=-GriG^|"c rHmZ\-`Dl(H$l -E;݉@sr_/qj" ' 9ҋuy5>N2*rY=г9˼2/U}G)Ȋ6CzX!Rr6IZT[;Y!W9W8mhgGjdž@hJӉ,Mc(uCo2y'W`! 6UM,?O  pB%f@q*CB\ujJ5%6JZ8 3@D8/X|Y=QkKZG]m[77#?^҉3ܩ,AjjN0QF9fsQ .|StEQǘj 0ܔզn g˕s'Vɞ`J50q5SB!:2̡(5;[iؕ+X0hDVPіAra$Lolc,&m{NTŃXNckbc$bC&H;ZrXBgR.RЊ0 D ؔ)LS˹$v@H4ʥJ!ΎHUM[S*%܉eٟdr -N>_$G/'f|^vfLFZqa:sNJ>*m_bdNi0 1-x>j\"^AK"` C'p.1N`1FnϪѯ~7珿唔bń$[Ivh?P>ļьމePզ/L3i9KYi"IOϾn)4(zq{ꆫ(|_U0#[sy`YSțJqA.GOY@ )VQa=3nbSt]3mUc؅F>b,J -Er -DLd|N" $'ߡyX,t@3L^QHZ^)iGE"2g@y٬͚lQ\Y +zv Z,>r R祦fN1i҇X`i{UrEc7oLn/Х XĶaoMZ}ySCKMR; Y;-]E:ԑO-g~נc%^ԶL@{i|4}ٗ8z+V S&i$9uC_F'W:z9;]RdRIEk#˞b_ÞQgHz%j:0LkG w=E—X3(v *0fS ؈4/&%B%b[{E-px -s`Y^ټ370Y-7A[87Z*AsyE(G)Ã#P1$g>)ࣽ#k!=H9؅*#T} ISĢoQ:2gx@¯x#ۙ>@`ba$28FD]24)CP;.sH7*r N*6Q1+HD)h7[00i,dG`%Hn:T琔3FrjnqX]B{ jU1 pVH -(jJ _ϗbo@M --*̎t{^rJ3H'Op0F]zѱ]>056^_8* {/h^ICl}Z4x%<YcP\rP`%<~EP GKEK'0p}]mSH;T&#`xf`H_m,6}\[X -D#rՋ2L)aJ]יP0G\+ x_QkLu"oX6%ڶPJ4 8^6ZJvGIX6{Q1<)LkmZQPМ9lEZsv.^}fE|IQvCc WF/=4Lx5C"4:6Q6/S.q&+n$ii*4JY>,5*s9īF"ye"Q/$w3*^i8)Ewv)AO(&%ʖ$M4k֥KUr٬(K5)Y43m$+ -=WEt] 0S.Qh o%Q[z,?"oAyNIEE1fKH% -N -^ nyE O3.腼K)!KOr}4{Z흌$8P~}#י^(F^KvZ  d]VK+HxtN={Yd.'J5gS5 e")LJ[zR/F R°/tfp[4!;HVw><%n,$bre':0n JA\Y(c,٥+5ϙH!1մ.lӹ T:-:sd"ŶCj|Z<8y_|VصKNPLsYNE*4|- Tclaf]@:(X9d$XYC[\az"HR0r+wG^ҋ"GSԎiLھRaqѶ5*#^n0b]1ɣx_Ej 4GO,wJv6ЀwRб5źaz {.aWOe>1dQ;Z9s8>`YcgcDue{M*3U@(^+$0qW^7{7#'>vČSf$ 7*=\bC"m#^8C[\*JH~7YyFGi4=(s,_1ToF,(TAY# T6IFuDQn`ĸłϒzC.yE,!ŅpXE8> Lm.D4䔊%IF2PTLXU|& c@fg/M"v䪍 1. AgcGIjRR 8+r֘a*N;_W\TO-#وC}۰VՖe-{=E.ojR@.vMTDPtTsF7>%H-78,%\(,w 75c(z¦XJtP -?] W*e5e Sy H5{HG5na Ð =:G E:c` L])8BPvs(o,Y(/\iAL29<DPlgAq5nM&IjT` Dog(>*rYru}=:K\'#-l|}G&b -CVs!P;( -U:^q/tu}@H~b9PLqdLTro*P[%r'nךu"`&뵃} [WJOesPRd3(ޮ#e<hݢ-B!|%rR 4"vw -|\Md%TN o'B;`:w 'SCgTxdbd-17U~"WaJ}X`HDdQ)pRur!u8"ȝbrNv0YXQHֈ(I Syr؋2Ŗ1-mMG=䮢5(a,U)G99ʆ>/>6:'D٢CS -䶍p'kfM'J@o0 uk,( Lд(wd.Rp\[a$\CD[PVOc{]Z0J0>TVGfj6ZG#ۛm -˒=14ǝX 1ڮdħgaJPȭ&E -gΎaYaڡKF>Xpp!7JR?*f3'I/b(2"@^s8upQhД᪈PS ڽ{{49+Ba)/4DrZ?(H !BZfH8O-< au_1G37yJ{,Fk<ŋ@3TE~|zF|M5׌`cyvfɫN0% - 7j]" a9- w5ntJB^xXi^KYu[6}0.Y75 6WKXܿjc*%f=0 +H6*j_;HZ4gY+P(WQe? -RSj wfA2_k?9rb~Nqb e\OP1RClf7y\\4W~Tpgֈ2C>!Vm8= 8Ncx&}Pi}e`n,oFx&t'Qpy]\[*mWڗ){\daZ&mmfbv=*`CķD@)&P*$K1ر퇛`\'I¡K\Yk~hOoz˓w/3{c݅)nMho<}b;-m!QԑJVU<. PGnQ땓qd/s'ZƋIghz'/y5+3?]U;n6SI4k'cV믚ˠos"HVaeܦ'{̉}=REo%8jRsѳ ™!GaK.5'G_+&@vnvy$Nj5{X$uX* (Fc@.l r [C|"!)MN_Z;y6ta IhK6^=n X^_*0,LQx/{gj*"ϖufAeSml_^}:T:,aawEj#T2;X*;Oo_=Wb6 PZ?\Ujʪ:Ο$8QMJezr~|ËϚ2mƍs UҼM-O?^\ݣP.t?m&Oto0jd8 ?6㋯!pk-_i^4{73 -Rk?[㛸qRFMV3t⍗1fxy 撜hZ]aUo&{oV_gfˋ?ZW_~o=>,W^wuֵ^9YVڧv~9~_߼hӛoǟL7o{W?vOWG?<|>6r~onmfu_^r];莯Q{>i/f{X:Ygx9{ћDܴ;`ý/agg놋x>E:Yzhz6zO˧C^re{ hWo?qev|a(]@G<;{]Qq6],R - _= _ F -<5*YspI zP_Y eq?m^͏>~W6h?mݣWKQGxq/?\o_gP)'zǷ?[}uNjg?O??@^W<_>g> x)|myG9^$ $yo?_v0j݋z -Pk L#xSԆ:h_|U$="C}/|_ //ۨ8j\ٺ֬՚×?j˯WJC+{A"ܴO]HR%`MUӛ?}%xu8I9X͟ځ[!:gnzcAN5)ȉ$GQQbᗍ3]Os^qܰ۟.쟾==)֎lf~7|~hu{xޛJQw$m%7HHII9&?/Wxo__^M?FIo:]Ο_=vuYPT(\Nz=M{NojOh>?O|8|u9YRs7( YqR߯jhv Y>ͷ'SYtq?'_6:c^L oWLo -,_},o{jbx=ziOTKĝɱNCIitVgtv|O={Q=U[դoVgﮞ?l$ʕ/_MLVϗo' -SGcV5F_?]\kfZoozӣOکfvڝV^ WƱRl֧̎V'vy#h+/YivcI~OTEm܈q4ƊӬN{{ - -.ivgNކ/lOy -~ {_l>ۜ?8W_vӋ[ǟɃ? ޏo?a!mU7NyZuV -x핧PN0)W{gQFMFs]bL^ 穃MP95ClJjQ>kݣ1lQX;oj(Y{zS'uZ;gޣUdzGˣ7Ot-m^Jz~_̏> +hOpq>}Ps{ nUNF4m>؜}Tm&X!JŒJVqwOj[xaQt9]6/5k -n\؜'Po\fGjv0 0W븲Kl_O'ów.ަ{hꇋ_T[צT^ϾSYfds7~?Ysvz$$U7|9tU]9WuuuWs8}930dA2`ETP9gTDz٫}w{j\ Fj;7N&@;0B 4S4E"A(oM.IJy:{ eE"*Xj37p{6ӛZ>)%*#!7vk>4gs yZn$&f+o?0:bBm ௲B^k+bq7#P`ϯ):b$ G`'ƙ`[ VOGH[ -tG;X{k1Zt8>5Ƙhg6?Ή˗z'w\޾&3|wlee:4ES4x` NaW̜I&+˷vǏJ20 =^LW=;YnlqBxX9Zr <` RLBW 6GUmZ}||u jaJi-OgaJ!P]K$4 9vĂ*$!kٙ-C=0ͥsa!#.(ЂR?+' 7.|8oѺI "%m2 -Ø?FI:)*eB}Ni9s1֕@. vO+|be,#x`~%rK:E *ʴ ]a3Ne!SC}_qz5²nJVRjw^6cɓlgp*%(My &-[#jv~gRvjXrpKY.˲Y e밢pI5 rE %p dJb -LZ{hV+p9hxjT]7Ph-˸<%H݋H9>;.,Rladz\nƋ4'{+Q"HiVJRN TzVEG!e`e'7Ga7Eʟ8z)GPz -<_$NDVj4dY!kwRz6N5kgc֑{mx7]I؜(Jt0\u% Rܥg7OcT$U'ύUc9@P>RP֒SteTKִdQ^:@ˑ`:ۚ9Bpa8pyf٩讠IJp VE]Ғjȩp֟Z^ f(z+ܧ G=nNS r}B 6s) TE-x!JZ#ƚ=>QaaH`VĀ@8>rnqd(U0"N(6FЉdB6ʇq"bI̋@Xz:KJacG. -?Zy7&1B8[#桤 :LABi|"9_eE-CbkYDd -Lzfzv2C#^]r-0lb& =02yF>/KI*,Z [NrÏ>'ͯx{kmYnhn] Zݹ[w>ȅ?~k7xϣw>_}uRmNR@b,HUŕO^{矻pg{'?/~[W>u\1Bu{XGJ"YWp"]-^jOM,̬n;7~+_p=ckTVI_*pD&reMYI+Jbf2BQf",dZ'_Ĺ+{<{mcޖ$猵טX[>uԕ G_{3?o~[wҳy~Эֺ `\LE2];{gnҕO<_?/}koWy 7o#<~Z23Z(Mwkڄrmz/~c_W~oO?p%Ow±&E1=]tVVV᳽{;>g_'ǟ}/_?dȒH/-0Cd]Mp~獇?SOů|'ooo㗿o~W?CiA(./‰Q=hf7ݻ==>‹~g?o/Οt_R4iwr.0VHP|y辇ﱇ ?|g?}_7_~w~럼߼?ҹۯm;$"&'W>}<«?Ͼ~_~w}w'{y_)T`2?[OGD.hc'{C|o_w_W/ϟO~Gx;&W820hO/nzĵgS/~W>ѫWϯd paaīTPd?Tϗm}zÏ<>|_|ڟ˯|^X9.xV(fsT<;vpcWW//׿˷}W~_{VɆJJ/ɽ3Ǐ?vׯo~W埿;姟}3WݨfHB'q= 2b}g}>?oϽ7~?ooOѧ?ї>sZr(ch6=~~/>OϽ?xo|;_߽^Z%1n"Q*3B{c'>?|7}Wz'o|?~t)J1 -hy=TG*>o};y׿[۟{GOO}ɇ|;Z.Xe0TtHp9'rܭvƺ͵'#^zkׯ:v05e%.yHLqCg67撩v>}hm#w'o|˟[?}7?{ϞDHOh< 'c" O9sTS/|o7^{s/g{ G7Pv$~ | nSrj);<ȝ_ }W?>\;\*j;8C*|hJ(1J6+?c o_|]tQ+uAK-&cZ!e&g^+w|_k^zc{zjw;Lp"rLf4eIS;[wy }虧>o|G={o;sl{ufn͸BX]vxiwe>_}>O ~;ssJ\n3Nxh a)\д\*괧gfWAF}-9sY*d餇XUH<4g1r,Ӄ)G>BpIJ~uN,nS.b#|aqTTT0)aWJ0fh)=tr"y;pRd$) -9.LiQ-v4X:,p(DGz.ˁk XR8@gt9̕ˉt:%bdcF2^9tNPn%m쵘f$+I|%7DKDƕ{j^m3lZH}^rxbv,jP!ª͊eS|̩IRTy59ўP1N(IN3b!G,ˣr/lEx:7Ԡ%!h-J1 AӪ6 x:5p/ B:A4UK440x.rkz  -o\NE L W|178bFm%ҁP/Ĝ)f^ tL\Ro TlM\(༹ &Ldrh#Bp,$M(2hUtlx"2vOj0p#0 E+ -V,e:TQ؎ay7ɄJ3r./:`*n QR@j|t$-q&jN^~GG02hpd"H&g}tBTlHVP zF<^?z -i1Mf+Z]]''`0$^ďt/E㳢pibq2#]ԂZH&3V3>'aٜ$Iʅj(E1]~'ur!tsn zdS P>OS+G}:IA>T2 -.(PV IKv}b2& 4fP~.AkQ([(ArM*4Ũ8#@z'Er -"|YhL>W:fIAk9<ϥ9.IQDf"]YPj 81`V xuH |C;nnF{|@K} #C\I~*3  -M&ޠ)&y]T4,ZfGlh9H) -%'h49=?(|*ꇓ pp{Jwkbm^\r45ˍ95W7GGte -4w_WvpLŢ$\qZ7 /wt"]Nzobj(TG%QQ)f\ ܫV\}drVOQONj)A“(O):ac;^?rjjei2*lҒ܀JSx~.ܥ*)ZN -H|2R2}+v;X/9F +U@Sjȶa8;*a>>~g+I3a(>hb,N{(-H, 6$LF\/W2IGAрx|4Ai6 ȷb6v@\ p@H|faRx R8>U FGél(?ڋf`Št]O}$Ums0nC1K6)WIdabê ϖ[ݝ78)`b(4rS -\ -eCFX?qz&34N&9/"Ds9YQ|2򵮆X36zK܀ f{ubj4 >v_la`Ѡ?1dr1W<O*NȪ Q'&{qALjny… àBi&,$nƽ^clQi>ЎW6B%U8YQ)fEڠa[lX"ߋfwڭ>7xj*, "Z(S\WG2uCF|X2fH8BT i:no3/ Bz -fbGP2pNFTah4BQhlDRS() -PRfkOd -,ߺڞ:a!lNldD.mί]Gñ^43a H=̬zާN_~7s3 ji1HS9A -5Xp4Eݍ@BW$mnكSrYVoʩv">W]4zl=oVVsk/ol_޷LkPzVsLg|ƣP^9gjCAwlăSFpܰSc 1 -5Ai;v2ՠ]KLhot7ٍU~Fh3y&wU=fw hQH>DŽ>EC|$0(Na8D3^.ڻV4=NLq6TY">yixVD`9"gH O ,Sn,d^n.hW,;JRP]k'@B1ǢA(:x:714A&sJ89Eq\eN^&@@ko`nVFJsn<SЋw ԰t&_9o ԝn'Zoܼq% ctJ ‰Le)n4;O\ $~B -CKƍ#Xvbw -(fSc6"EJyF,q56*ga#b@:52$ew]DS@ M3Tg?z`᜞1a/\i3l!o }@`4ӴXdn37MpF!xIEN7X5 f,ĦdX % X=8V!Di* %Dbi*LJe}x`૥ta`Y0‚\+5ϟ{`viσ+K*Ã3cgmR` קLIi@8&[4ř#q:#ݑcże$&ġBc~nq5XףzwLlk177b]RT& 5b"xc~ zInLQqĈ$XMMfNWGiU-~ބ1p]͝'={ӝPNKwn6DZ1A}a[j.Dn~ؙ;N043,FiI b а)dxLD; 6pr۔Pf -PIwS D ^o@U$r99PJ`q}K85jlơXb6fV]~ wĥP45Uo~(5g.Kbazy!/eQJ{ -x!{hm6Ωe ]NFP#˝P| p4>Ǫ$9fuQR.5#q/ZRa : TP :Y'fxO ,jR*3q<@`~sr{lDX(̮-T(6s QkG3O!HER,+xCwS<* a8u=lryJHEjq}v=9r DG c6QWT9/|. pRGDh=\"9O@s$90lVz3n&t28 AɅ"}.&2ﯴ;DZ݄?_ qAC`V8>GgEYm=4&783,T:аOr=h 4z<|1K/KגtE^Lтfgׯ}x -iuV+if sG) PH,X;Br1NJ&=豋OtΨqK)E-0#z T -~9 '/ewn00Q##8(QjB |x!Y.Lm-n^=|im;&Nek867bƒRPuÒO5QQDǰF= - 2fD1L`҂Zzx]r,yp,SX|20lp4ҨFf.5^,B$"PP_Q`ɓمXougNgye?|h70W8JiQAAIz؜9}g<_]>~?[m -S*+.?~rp]#Eh+1_ ~"~N.'r v'os &h6PP[Tr&nVj=1c9~dr -Ψ -+WYBk+(vg{m΀޴F dq<%drp4Ƹwu TN)mԚ s[r\}!V6NC4\nXa,(:!K|~$Cൽl4 6fFC|.y'E[o,<_z[GO6cp:ۙ9i9-PTU_U6I6ex8b4Bi9xrY̘B z;sK'mNT j̧KZ5]XʖV` ^o\)A"5^1e„i1`C5v:TKM( XzMA*b]l\CǀIN(4XŁG`(h zKQJȥg |qP %,pEsVCgDiln4H omqpH2 g(=+d90}Hj 줞hy)m[cnן9~'fx! 2Eu-Vrxc6n *K3)x\pBt|̍!/+c~< jp#uGAG4pEQU.X&,,znOPN2AFU].±2'$‰Q-Z\;(lv8h'hg==Z>X?L^߸˜{G[E-Ԛ[A')&KiQE%=5 Fs3__ F;!mƁ@!a3I5^%͘>cT8!Bi|~^<7WkmRBfn,dNqa`لB""$5 y.u>[CP~1Qz:`'U%AM=J{5ثw6_ww]Ϩjt457'(>Ad--#t; HԬ$D9Q^,zw7]L]z&-Dj:ucrԉ`u n eS֓;E0eP,bFEMI0kvo[WVcSv{3Nt;©Pjuˀ/U xDٍCP]6mF&3VD&&L$`H B5 &BmTjIAC85 ͇H=qVrZ?51+J9AhX6d$V -0v;aPQ${ݲLEr*iHo|}ݓwY+Xby>BncX&%5YnrQ@fH鰓PN63>#~Mtg;4nm| P<ֽ~NKVʡf83./f 3ۏ=`ZX $yY72IpR, f\<71>b季W'EFBYJ1\Ӡ84\MQ/_7eIf6|scP˲9wem,(+ (D㓓'o''%Y{oFI|hlc^DغNtx-6 ,CurOcӋ" i0P. ;O]~5/X4Fڙ\8EaRawC#&d2lv; N ^X*4-p͹TG?~>[XvZ4W+NǗfx^m<䇆K񱍫"(I5ԒBAgfk˻wbك=rUcy$1(E:iˈ1QvErm# 7W^:r#:q-/f T' [y]tXbfJSoF[pyq ._a2Q `>BW b/dAPq]%2sL2F:؍@TC$T@%0 C.PYUI!(O,-6׊Nfgl`)ྩ8E9!%)N{mw'IFPSR('X*;Ji$SDVP KƑWե+;?1pk%YƷ2FN։{9-Z'YM{j(Ӛh&bh06A7T|pL/Ǔru] $ hV*7fd*Z:{(*=(Uñ)|w=Ϊ8dPUCta?Vnpl{vf'rg=}SŠIB{Onmv0˕L& EnoX_Xi7ÌMN$e.^}| 뢾Fm]?u UMqxg>+ܦRt -Br&5vbТ,:=UoVZaFb;y(ޕ{~5X{r_#[K#wF]Kp{5Pk"GiF&#(n%V3ƗNcGslcMOOKp3W[I!탻&TP|V*֤ Wpu{dh=l -~a뎅;zL}aBaAPL gf/h{7N$[D]=!oFq<IY-Xw|(M`xs|D=S3N m١ɄXLjɨXwCՌC8P։ŧ'8bOJN6GS^7W]\9՝Xg@6xHlZX"x.a(-#>pPN 0,;qCӇ綾o]a- '˝CryG7{7|&}hv=X{t{'Wot6^ܷԛgǒمzcO{?IvWhSU3&]]ն@ha hAf$Q8"9HIVncڈmo"**dU{w{~ߓ{tavj|I‹Gy0ةIaIʑ_XhtvV.nm~ٕs3W^'’Z(6ا6bMs Ohś^vuY.fΨNIIku_{YPS63go; +TpGMSs &F$)8WۂT ;g5'L8%T8ьKA.jIT'8AoYm,'*u$C$5 - De3eȥD~l-5J)aR*7 #!`1N$#a 6`@WwFE bg* j\FS\ڕ:{Y9㦺7[C˙39^8ݳ ie3Jg!*1DaI aM!Maɋ9N*v{YilLjq 9s o8z`3޿8-Vrr'^e)w\|2)i\q?wr}@ ǎ=Gǎ%g+(b.[J#x&k&$ ˪ _3)*љӏ׊7=yxt "-.*A(AQ2&(,QEInLUK]ڿz'\OI@\I2ܐ 'Ey6-IB-WTnIL{px1X?5md EQTmI$ "GSe OA r|uAs08.219"L(.Kb&ɡl\jCtQXtJ塗jD"8Cbg\ -W E1j"GIơi]$LONj<&z*`& f4%Yp%p DX$Ejq -C1]l sx<~<Rc-, `IR(qyUkvU 8ȧp 1@ϚL.32P xDZs0 9F FH Lib|t 2AKD8*p\L3BSk=gT䈸D}4 -uQ;8 MX'aE:E"8ʓdбc0dWuo܋N9q ɰ|ґbJٛo{яL<Isu5:97._FޟS/#Di(&1@R$sYۓh)A"aEemj+Q^SqWI b}EZt; F &q,|tDb|d<4 <<qGz XB 3#(&"Pvqz_R`xx (?y"vb!F -I8}3Zp$!Ik c$I)A|DaDlxX2'c 2e)5!.p Pcnw!HbS 4ED J:X- -&cL<^.^p~cq{Xm&20M1D5PtU ,M*2dOd -I6Ӛ*,k(O &O& er1`avmK - "!GU -\ E[a4 hL&XNiK - elgU*z -/Z,@F#vzm'r)Ch x„88Ebd4j -b7g/׽ҭ33xB4hRF`>3p1.H JOVmI1CNHs!ʌkE8NdıHuNRǏǎO"?F8 $’0mbpOdh=y" 0q<DSV[8k V-Aݾռ{ueۭZv<]qpL8yl*<OjD4"Tf[km2dlYRKO{7QdSd`t^QO@F}ssz}|bwuEhGm6٫sԨ+&P2ES^} (&NbUKӹc'XYVX(g<H2Hܭ]m^3JA)Iy@1XQZa:v\|j4Jw(퍏?s.+zαHAb8!iԔB1(pAHΥll<]<_?vغwO<5ן=ȔM,DB0K*)Q0:,H-koΙo=փs/Ww^{fb/6NՌ - ОQ_j>sX0#t^ܳ+_xn?҅ kV]&!HTh-Rܹ}o?҅Ńʏ?_7?3g,拮VAL[ZNxf싗*.˿wyzQ[o}nRbA$Y`cyJq|(dQ,kG7ƕk?Sr돾C`0UM5':}܇owǯ?҅Oo?O]9=HK$iH׊!ugY}0;7/\?ؿg7ow~[Z$DH< ̗fNio_K}vK??{Op\>~/y~Svރ(؜ͦ|{᏾p[-}_~?̙|j??|w߽a`!JD6-3sO/_-`;7Vw_퟾֪aP5o{ G _|7߹wv|_|o\꯿~U?'waZ"|h2v),Nt^\.~ÏG??gn]PSdFD9%M, Af>,gk#sOuS???<7?}o_/n|O]_Piet$|c\]P;y>~q>p`y-f_~xg_?wӗ< s)Id^.^"/|խ܏?~?{g{nR11|7W{=`I `$ +VJ{xe;^>|_/>xW_΃ 2E(jk7xfI{lQկ>X߽O}w?|~_}/Olh Q<;Ji\~f'.ͿWߺnխ/=;棃k 2ȩD -4%8 #!qM;n>7W83V7zl/K}Z8)AR)N$ye>%i]WOgRѸͺ{i6w4ch뛯.7_/}W_ٷ[巫M$YS l S<(Ub~v|\g~owW_[Ζjgo߸w.zk^eoYҔyT+ -4=JkKBf뚔eiE=q(@\RJr$#hNӪk6'%oآG'LRؓX (yD$n&@lXRif6W:%KңKNE٭m9o64` -B chp(OlAڶT Y/oޚKYR ~n3R&9Raq0!!j*+.k)eGƒyCVYF X@M&UIѬ0$cJv+3UR qA^}gLk7<.Rbe3S\%](:1E8^nnZYIGe9>z,MyP$bA.9 K!: _7ҵro -mf_bUkV3a7%1%+%H%F1!x\PalU-HRFUԴM`HXX1 &QE EٙM΅#|d# -H S.Kzsz9x@P'a<<\)79O؉DtPG\Rvbq MQ B5Jae@ SX_SB.+kqGڹer:SzaTf%Wrvb<9'F8<$*te7W6@"!GⓓAe5sl(Y:95~,..Yp$ frES)(BȤD*;.,I瑏y1u71)F*LVTˊ^^o0ʉ93I<-V'J O,=QLN8 UEM<`DEmb1Р,+kz'S;(U7D F(F/8츹eRq0UT0z3 hƩp:5b ~tGxlfG1[ -6EeKxO`$F',%uHѕxTHEO4HZ;[UwhE $JK&u/$`#Uq*͈)c$M~q!YxpedfKXӭA8"Is]F Up*;9ELMR4!ʤP%jEe-ʇbZ7gήYՓT0ȱ\IPDPrƉ M2yLqƽG:#6o ,XI%&D)Eئ3=#Y3S:yg+SхK5n`L|;5cÌ7l3fQdf1z>CEy9Hpuʃ7a*Ӏ^.}?o6xG9j-VyPl -m?.yR\+vg7_jaR9}QU[fbt -@KSQ}p9[(J>/j IZc"H˭s 4߅,zzNr`܅Y=.o#73B:`Y/fj`,ЦgLp)F mRAu ]@p^v-]YR:6xDM/Slq\ߞX&R#iؚ31ْZծαj/x1VCQK@*30$%WA" d.3Bk\%H%,l' HZ3z$Ţ(V8¨ >3yW*շ O)NX\SFt"-ΣDq<Y=}ٚ6SᕵKdE?\[;JnvⰏSU՚5r37V+̳JM6ۂԦdR5/7Oy+?}免O6Gg[鴷73&r;j?Z B֝Rc'7R;Wy@b?RgBX[XrnTe'rzY4[A.wiƢx\e%u٨M+9s4z+W69 cV%ox#$s. -`a -db ʎaO`sѸQn{(x.{Y05' $͝Tb\ُ -x@bڣkkA!0EcX6t{/ #W^ -$JeajX?#aJhT1 ျ&B(qBb#)ADN@$c Bӆ.m>IT/lcD+2QQwyv V)|}i2%nɔFcxVm6WnةJb{0#>)ai* );sxHw9`̚l.^;qUM rUK (Z6oj@mߺRȬ^q3EF8ٜeW'h0mW{"Ag@7M*8] LяS8Nezo֙kUZ1c8lāI lM?%\yL_[}O-7yk^y]WYmh׳3#QJ@̐|bRͭ^!'0R7]9M˖Le;Q\.Ø˫Lm9_^)wH*n=8 ^PiVh?Ieu5FYyS! -D[{h ۟E @>bӡxz\F0!n/nD,7ۛ-\\|!<K;R_>3?O[7U`!'rqzuK6Ho~q8:o5O{gcDj~fkǟU=%coۇʦNFsGh cK6YAL ų`f YLhŠDU^,W0Ḃ4vtun"ŖQ%d5ta'Oϋ|yWPzVpkxO/%]OgֲUsL  - Ym+sjc@fg~v-9Nψ )`thM4^ib9SY#qTMYlY,?w9Jrq LY\@v" ೢT(l0ɜ2+Oݐ@Srby}yqxb/#M+.;Z ;܎N*~۰TpyІfÕLe BtRT:Hµdg)ynf6G&AWuw̬I"Fo,np*zP9H0@t=`%UHnۚ>tsKI" "c~DMh%3+73Òcw{3 :M%Q,#Bg1^Y:?m2 -Jz7\[ybq3Dd2"1q+ld]C!A1~2#!68Eq\F| -̌jS¸ts1͙A*,+;^(4袠!F4o1&y+dZ8E3=keGHdZZ.&WY,<>D,<00|BR@0=04/+,^I [9He --$+5@ZG擸N9ݱv$Fd0LN0,L#͹Y3@R˼\'T1QV܌T_z0^G+wmӟX0̏tƍ%~ ݓ'XLIbjt7k$*`9Ba kj,FWܐf]A`T^ֺnjNNI-_\(ַjFQ:iQl!-pY-9`1ym|Ʊ̠X/ --U'&PXbGNǃAK3Շ =`QOukp<91.XZ=[l2fzrB $9I=q4 4Staly2 LbI8Vt[{ؘ;s1NRhIvt[9|WWo5`B%T8*')];{h$SA !p8Th bus@1Id-5$ᄌ`NRDbb"0X 0JpUY`J @XIPRI3 -YtR@̓e F@&HLC"'sZl{tƕr,lY҇$_#b4ʕ(i#.@0s|qqF`T:8яs H];z1SE1%@$qòJP^%^,yg.C\H #4"/4<;5dss&`HD ' I޼°p 6&p-i5fLI:?IGndsHIdAd*0T1?'CӋ f.3R38!^޺w3UZr7X92 S~fSTښ5Uߝ9#v8Lv:#Zh DFmjܧ) 2Zu++! !f+||?h$=@nI40b&Z,.[|mp:8^NUdX+ۃC#6e}aOV6ӿp :pDqUԊ+(V7XYS!ĉqӮJ}0BWDDVFs8(F'Wuҋ6M1@H8q"99 |ab!)-/?; xI֦1׸]Xd0/y@P8q y[D!E(z/>v,#P%q?X GH"Q-eI"lBAt$:5IS ȡ(rt@8d2|s䎟YKvgI''2Q +8yAm(a(<֙97qBє&ڬ LwkpKAV낔O"+k^?s[Ba ٴ:ũ,/wY_y8ڜXI,5"qSەY˟gbdf!̆檧(Eɯln^D,%ysHI-NivGJ NvԞj ڐ(Wzd_6[׼< %<I"Hh~- XϚTe HLw9Qt:~q+_#,Rpaa95 \&Q{~WիnjqC) 9]1H耺yA3$, LM q1a*LG_Ƶh0179拳ӳ ;E9cшH>|l*UNpuQ PQ}؞#8Y%] -׶7o\V(OELee$d.×($ DqE&TnF55+8Cfgj,[멵x" a0 l{ 1##7)(8~^ -2 s?k,.ՖH& 0An[gs31 ]rl4"〾jCNS)M)Ϭl=h톗_!sZ+W 8$E%K)Z $Ce5ӬX#h@` aD)-f/j=02w&_ml"OԘW˟l~A1{(Ȱ *''X\`3uNea5BE'?xJ(AxSlgoLG2)6cOPF0 ƣ* >$q&5' W $%RTEQ $"UU1=cϼx3=G?*H9&H U4UdJTux];=yp*Ty+WZfh7X)Jd:r<HRY^zl>Nc R"stb( & (phLՅVAdO@xXHbek&neXb#@Jxߨ4^衪|8xTMBQ#](73)1U3 {Tn9Ruk~AdJW,g[  XУ<Șc^ޭ}fTce,8BӬHdm:%g5K تeU~|s^|z7;Ma0{YH & mzO%gK@Lal(JI` ̍͝-=.\a0 P>6އ/<['Hre}oeչWf& ;1St~r2WloD@ U: xBN,R ,*qpJ$_@!3a=2+ؘ{|*>br:J:c ɤ$/ߊl;]7 d3I5@f:(+q"9 T}U'&3fF=}ZoEB`-)61UFY{mVA~1&>{vqnO߅''>Rɴ/0mZSx4K&M|<69>wb3L!;ta̚>h/mrz. -sD ,)[e:XNg -?;zu,/.2 3f/MA)oU -R%0JmGjT0dXyTf۩J0dsu!9;S5PL23*AsVAڮhO^ \g _XY_o~_zSQ x˂}2 FGIy -dz& /5eFbp&,X<-xr,0L}UzxiI".CɄg|TY gR(j$ e(Bflr0X*r9<;8/])7 Dzuj*fr|Xn|:P֬z>/i&ٟf+C VuWџ GngU{6SRICb5c: MYZ-K:s#sJxDFEM$O^7l. XDH.iFX/=ЭgՅLi殬?ǍT~YQ,6^d+DLȐMLc4~/JD@,߈'gZ2M,-%ң`L3; -D\M'U͊XGl=.cJrij<]zW{ U UP.ukGO~.O#Qkj*PX7bD:*2df6Ē50uf5SXC>Z -i<ҴR,wh՛T1.kRc~5`2tMNt -b:Vsr"Iσd6]F{wiP\G)p"B`WZ*.O \ȖܚnЍƔٟ bGNΔz.UVcqʺY}ρaҠRi=*3&(T4<1%NX*gwA)iIe(8qrZLVLv߾oC:HӅp:D6YܫM@:=sWw/S,,̲jl>3x81HT{ -z(ݻz%xpPʦ,U^'wwⱘRqj4~/3baI@kO$s֍k*xur/=BCOBQ=tnf#T)2C Sςg2(sm&/`xb|2h0񤌕2j:r)p0| S)#'b'x,(S=~/,P -%flo=PLPyq5riT 0v3a= F4JF!?&'CNÑ -,!Pp3|8T4Jl˜T_pEXh g -xzqgi̾6j=40@ [$&/e+BAz0dݍER T -[,-4Zc痞ʀTȥz O~T/;@QJG` K}@q@'bH-& OL@qLNgѸ0g_'{άqq⽻{ K@&揀-@-0"aP\VK.4}70Bdn>?F!nP!DE6 T Hxx,\g0YC -g&3:@UYq75] Ptf=Obl#Hdv8ƥș ÒvT2&[Ftz!}66> -DbzHք 92B:ܽJqB7@4ƼبkBR+Ŷj~OD -P,D`AFbz (29+pD+1b"/R{L9@˫~=+`DKj~QJdA̘)Ä0H,'eZ1^S('B:_< ǪBj`),]l[~/=̮ϔWrѓW%0Knѥ2ugηEu|"!<̕U{bq L2YՌ·V"uB#Q"5n6c9 .)1K5!@'c2}tX -ƴtv4RGTks2# ExW_HglU[YEd-Y*V |/lD`0U 8_<F=N -tu"H14x=ZI~RS6 -|qQJҚ6l.0*7õX\W`J*[vt\yx`4AeyxrQ,7LH|._|8T[7Eys~󗍝L KcU_,,KGl~%QԢq<'&o6?okx #' ҬV{X'暜;X]^([e P.ˮLO'`%5 |?[ Nw  )T:08 6`&-a>N 5u]T3,VI.7-P Ri0JH|LP,޻G|n\@OVޯo@jòO TJH$70r 2>HBzA^Xo$qF-Tr3ZjxlaI>S|q5N - -&#…R&7I rYTwz'2-dac@0rekr 4K\4i -+ 63la"o  -Gy ߟsM4QF D+;kIۉgB٥1PM߉VbL~MVᥛ$XIx?Rgj s` !.G񸢀rYSc1Kbی=AbNINHu|4>Fbv)jo1癰RT -}2[X w=)"9IA~,?*  -`c)`z,'ZlBIڲ?lBUbH*D@9CQ# q%T@SgsdA402!yb:O%([/Гek`P -Tp>]Z91AT#mXnr(S3r XLe,nET\OAh+I=̈́J`TýѱЛ-$Ź'ǒH/Niq&D [c"ۖ F]*7$^*/5PUQGb΅5ו?m?\ ЈX__!C&9fc^9 `GM Μ*D`)e39Em-X,4̔٩i@YZ<v53fI;wcӁB6ט%soƇƟRw&aJBBl%)OEPE0 -Mhtf)Jq5 3%B)qr0lxXb:Z܈rʋP/=`p0Ɂ$@F`qDF1 ɉ|*@6UN^Hkw1(g &0?IMcB .0`KfLQW7$)V\.u}TP7Y@dKhy*XT??3o&Q}`ʮnԬe!wA1V fAzb?M[ٽD(\%K! -K@̖͢ ks/; hdV0;9aA&fi%Zof}ʠ=j ?-vo"woY ]X.g k?O.nO&@Ῑwxba}o -,aOяE>'ޟAgL-8*SL̗j/ -孩ݻqM|sDOwRe`q_ծ(= #z:vߣB?wlTa`ɝ;I0ly`[0k[rbZnMw>@ⵏ?}xk ^>@ⵏ?}xk ^>@ⵏ?}xk ^>@ⵏ?}xk ^>@ⵏ?}xk ^>@ⵏ?}xk ^>@yޒϖpK>!^99X?{>oh{XzR?;_>l"TI*˪Pi 9~ gOq %&H_Dô"4e,l5MR4E$Y"KRˊ)벩/:‹M,4T]W]aE tuƞ=\^xlI77mӇ0%'uz(6LUc[&vT.Wo6NgQ~~[go/۟pm`]W>OwYl_wGZt^<99lA.<}寧.?OZ}u#>||!u.1 >70ӷnΗN/NkK_հ`=>^=6/ 02ҡWۋI=T[{yT'/1}ž{}C;8nbdݷ\?O%mб^=kwpuu#DtgOGH_:]ʬx@qrߘk^ÓAWclluکm^;5Tt+de`dOCBv~'|{#M@M@7 dLwgN?FH;|14m@tŷ[g1QEX`-?v?t bd,ͭ5ڟ۟CC7: `G_^ />}:?YYSR`pupJk .n¬>}S˜1ܿM#=}n]5NO> 4o <3(W~xzQ^iu>pɧw7|ѭ dfk!rZW䬨IRۦȤ!2yVcc B'aLkĦ-FΰÐX$CFf.}E8+2aq|(Ɇ[Qx xץ+3H~ !n8=%y<@_v/zKT{VN7mуDʌ[$\?ģq0?hmg鷵qzztnuxw[_upx?xlj*j >`=Vswfg?Xzlȴw2ͳk4.9_5ɯola!6HFG5}ׯ`FGFRmѫ0f݆ip4(Wm@m|?9iڭallNz;*v}m#Bh!^Om>٨O[I𨁣`+ !Ѽ.[a, Wuӷ͍^Q} ܭ9|VJBnx]|$wCD;<:&w`yx׿f`w5oQkY<88?q7)78353d"!sX6bC1JFg-~lnM2 -6-v{%ʢ{ҾMد(˷7_|V}˷3h[n#"|K!7 |6JntXuKteBn.葊L42 ˉ]?~!mk xh`9WgxG=v2}UB{[JG'U4B~g?::ip-,z;ywmm>\:}.QsqaT{n@ٷk0χGYvzλ:/w:A7:fN^NocjC1!Y'M7;͕{FO-2gCo ;ʕ?Q^iC:?xc{Wĭ5g۳C>ߙ;s|g93wx\}!0Bz3{]ٵuM_a{Ws+7{e9hnKY_ y]{ޚV_ex]խAVߒ -Dӯj>UFӟ#FG< \/\ ?0Fx> ;gOd#kwg탡$ڨIm7e#|bc+s=1Y߈T)=(tx0D>}{]G=LN>&iiput~appph?t-6G^2?Krwr|c1luuz8x>y5PLJGCGr{$ùɍF8x}S4vS{IkpqЯV~_?ߝ\t{*!~M/j*ݦJ~ "Ғ#TH*|X3~5k$=8{{q:g]ǭ)rC؝aӑpІѨd >"?;N+%"#68 ,AVcKY,wo~60[[I[k]+OdU;p*g<4 t 7}37}37h[g1Q1Eh>;==x?8 Z;p`=5)nى7C> †yE.ܦ -~Uظ-R̯ui6Y^'wGER~ǚN?Ht>}jfFVqFnt8AqG6nToq_ o]4p"ǧwnksӵnt=.(}T#cG7I4 -A|hڢx2sB} ;ʕ?bW7z:8˿'<]{ng+D$[{|U<;ob [~•a70_dzR}/y]{.<=|u(v:އG \cy'H?] :\6t\~^[?}9kt<(8( -A} FȵGԭ-" ӽ^\dG;8ng*x!>S#?}PץE:j,5i(gg^xeƣ󔅁#4ù{B`'*ʆ vƾtÉ*dag' ~څwvzNy~妯Qyslё+Su4링~E?n_sUˣIÖӓ #Óƶ>3T/oOrkOcP= .ƮR[܇/U^}/ xΘ(ed +ebp -* b@S25{M7efY2ޤ\=ƤY*p*F5tMǧ(01x,1=lHhr(` b`;|q a|@i"q~SKN0 ,/Țl)H2nMU5^nN 岩*Nй*3_T›,`YW2tN Y!ꀇ K0)2SH9$`x>YĖ.*:L,d -$z=22 K݁&D+MU2Ő `4jREaAkP6!1@nD^Lt)2:#ʵȇ:̸^Lr;(ta*xO -8)vK%KũE -+x@K-"I+k:)/7 /e(|ak0'$UmBq*94@2Ppgp/n#;dCQU#T^lhH0L1Di:W^̦VP\0CI`vtQŲ.x>DeIH\hiF6:E :GoFqtPqty$%fuD - 2zހ~6qi - dkd\fUCY`A|f:ȗT6qm]3;q CVRÔd ͉_PɦEԎ"SuS6PsKcom`Q}ʃpIM3%hƉ$qd =@m:o8jQ1m0$i %Ih@ Lz }1 {$ Dh5-iФ:9Fb.B TRTx^m҈aud*0M K,-R4jEfOh.4ZIz4 s6N-FlIR>"h[ܛ&{f ]ѯ`sG^- -bEU u1}<2_{qrQRi}w*\mg>W@X+؀wqLtiY#0+ʈ-MFK449Kab,3-.s GG"_&psDJy-jv -4q" -PXZwbXi" -%ysKj=2Za`;su2G2v:+2̶D)NT|xB0ˆ ^tRР7ht.{i8WE5uLRFDsOdv 1r 2N&[> SA!H[`HNJn96RFHmDІ擮+ R9`ڑd-ZYE/@cˊ i1-bhd)$2h4xj2CRv0$\ZXMB#L_yrdI0(/+nd|)b)2ZuӦp$RPc$5?-(6 $B1jwE"VEA"69=OL6$Q Q --̝eu8 -wb2 4=4cׯ-'+g2n3 Y14NYy"b(Q;S,rš!D!0 Q0aEwR uyf;3 աI8n;L&"ћIĆH0S>%'MCS@e MHbS#Q -yJ6G,$]#8{qƓ.eGdO7€ QPIȫaJDt܈f6;0΁c K$h͂ (Ղ+@7PP`Z{dJ5y /$2[]ǿdh-N%\JY(Xa[J /!Ao0TupĪ>Yp;$fٮ`D D])y7LSRxώ^ŸKA.5㓒lW,B!n1CJy* -ȹM.4p\a(G5֘k>\3Xh;blu2\2BEMDs,C{?"WcDU  C -:K5TQ,Ƞf i%Vz]z - 5I>FUL&P -Qc vE{Rp  & !Iw1"fc+ Һs{(VAQ'fyǁI^\wr/lcs$;g$a)q1{tw0FYtMXh4@7[_qu/l -.6 {K749wr{N -%F43-q0`$b16ـfBz|ׄ\?ԔoV 5Ìqy~`Q;\2E&?rГĝPx d o5ruM;^(v6P9/_di;cE)vDC3Xwڎ+:[H1zk=o$•r;(mFzlD,(X#:DxBLj>JQN"C.j%FwM&}QE[78&8qe3V΄Fߴ-g籾.g G2;a_ZihM C0Z O,Y^61М&d31)i!gEˤ.>ܷ^K>x).3HEM zN<Aa -ZlSi 4N5l$Q"8 -#[(` ;xtt7~uH8M.JiMSs2.s=3S\`Z@1gw4ФP l1wހӖȪBj\tjQL.UOr6j/Nt[䏠PO! 1쥗6$ T,nXdIÄskIBg ]U,aG Kbɿ LNhR)LɠnX,!~ѝ/"\d q:!n M@u6('X.. -{WԵNgL(#}o;kV/Sn8긊͹s%9x;<+jyx  [dHe=pmti85D^FrrNqU/5cTpIC(EY\t 9o\8\seiv₝d)Ί]2tgQTt;3LrɘE@rp#Qv>5@MN<`#g %ؕlQ'i܈/ϕ%<6se9BMM|Ӝn;O{ctM$JCqb;5nSU8ѤPI6z(A!ܠ -gujA|(ٽdv9hI$2\@lf[ <ϑdJt,h9a2lYvL[vn2?&E1BO3oz׵N!Ȗ6m( Fe"bD8SJʄ(ڇi^ЌKȍEl+`!皐BRlLtfHw6K^Lk qryiY \H4q̛lGp7.\)OwdE&Vڲcsg! 9Mo`j!{@0HCKnR#mb-ΜT(e_EO+ӕm],~8~AtyƠK-41N~+m2: knB[4wd]0Two|6Faqhkd8wF1e94H1hOZVCEnvd~sg$χVΈl$@-2Ƀ|bɐב4TJڦdƫd1ȡ@2Jvo ؾKT!/ؑzLv.`rg ycmuvg7\ι|<4}|uf]uoq\^'`R Qd%-Dpc֘3ٙݛ ¬=נ4v'Q:9hk1')D+{yɎe"2M[)""Jܭ, r7 ]]g/9!hK1]DITmG^cⴣR3L1îkV3%!eaδ]\"QTgG=#cfGs5I7xB2*4qF<tԢ}R^t0WX rNdB9<Q4AɅe# #ə'UJ.d1S3(&(ҰXp1ƄeL ]t*OX*YZMur+73T[š9W )&9qi |},jtI}ix#וJ na)w+YM`0:r/&W~+ӑHpɑIM#M8{trQN/BSh m1{z\a>yc2gٱ4 uzsg;Eə6MNIW&b_k}2]^vøsf\5<|cXY0L#ܛʋ GE8bq@r}cGCs@BNMvN#T;ws\AW7b_F,nZ#(8 -[!g7 C@ JFҥkR:֝QZ/GOlL7qٌ:vh6 -v:Hduxξ>^qE>rސJ)~;/wt8?soݝڹs:I:RGe'6T4ػzh}b۵!ձaD-k:MWr`"΍HMvx҉[cn B&?&~  {v"V@|XWb)H0:4#L-< eB#|G ,[ PJ. sT(*&vUIP^h s"r8 -qۉ;GpEIH2mAW7X \ĉw'p+}+vN', endstream endobj 120 0 obj [/ICCBased 123 0 R] endobj 116 0 obj <>stream -HtWˎ7 WV"5 '#0r )*8z4$EI/˧׸뾽kVھ?^~[^bSL߿oli?? c!darxID &@-Ig;oPIՏCoMei!jϻP:^ eRJc6aYB%\ -36SUsa)F^ϐrV|<`. PpFBqlOFqUmˆX=ՠۂ3‡ԁr&ݏ'PQDIuW @CB(E]U#k\ D0h3 £1z " f#PAk*HB}[z(z9R Y'=O Nޅ0bO LS®2 _(`VXN!lS'xHyBi6(n)|=7ĜgnywO- ՙ`CkVkB3ᆓ+bįhqLBer;NG~ Ш A뵛")΅;h6nc[/3  >O KVAEU?& 8@ hg q˔[,>rR?'^+{NһL ɝ\8dѤ.{N[N,;-T;)])!_ܱ( w`K&u_d8?ycԅ7jx qđ8)weq%YYc oipo:JYݻX;W:}XLewE0nɢ ֢P+uGύ%./`^ъQbIH!!ѾKn,C1'%C\NЂp{na*.Nvu/~tvNlW6Y'6:9~/Nj] -$Q/;3q9`A ɘ H)$%O -Itb\oODAy,}ꀏvzZY{p-_(5;ž*a01wH*nKV(Ն^r -m;GFyjam,3\ mɤ}K,Q?'OL5a?uڅFu I{߹Uwe`>\MgR?06lJtG Rƻ̉b>h qS1GMr0]1 ܡ<S_9g[˷ʉCc wM%#hthu.p%O=yW) endstream endobj 117 0 obj <> endobj 137 0 obj [/ICCBased 123 0 R] endobj 112 0 obj <>stream -HtWˎ$5WWz 4HvfODf=3h4]+]_kp_ >⿵Qso\p%߿mo>9Q'i86g:ˉcq)cNzvgyVOCwKh'±rsM#Ӯ1$i_=Oߋc/ !%kx >bf -f;ݤRJ.Gj>M;<}Of"ѨH||q, WzxA -n[ݭ'Z)JrwpphI4ORK3vM2otIF5_ UBe32e -@(v2Vz8br2듊ؓ;8&C&,KՃ۶A.+hH[;:C{f708ht_1IeLаw -<D1U}?6Y.C($}ȐSȝ$#D+s]Kk Ӎ$?^,*pkzrA@X'{:`f7:Q wۗew13iU%_*"V[*"fAT5Eh@%657-o@=N;{#_L`r'vROX+lD(YC>TШQPe`-6ŪӍzLhK)M񠜡~ޮlHrn}vv:ԡKUa:E(pQ1_)XyL+ TKxv)j5q:6 -GepKr߰-*DB.hr92є 4pȥE.HK+\`/rrɋ\R˫\v8KE.\\8 ">\ rʥU.rʆC!!VȽ^EVE/Mz'!)t -f`\"vcAtZWڎ2ю'2Ohv7jZbN8puB$a:9ֻ@HDd+C`4;W}rx/HyLԼ0|M.VmzRI#\2/8_LZZG ΞQzp w.[ v*Q$Ϸ/,8X+ͱ|,0=+:T ( -b6Npk{E -ܦقKGĽ^Tp} w[vo/QHxܯnnB~vZ溎|gTGE?&^.e=˶G?0_ endstream endobj 113 0 obj <> endobj 115 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream -q -/GS0 gs -52.0799988 0 0 236.1599947 266.1087341 168.8636869 cm -/Im0 Do -Q - endstream endobj 139 0 obj <> endobj 142 0 obj <>stream -H엉v:D3-@J<~tUw&1d}IkƏ88888888s=9~)93P&3}:̜_/OBpڗ2ݓ,ۭ9Fgl'9gn28TsP3pwujvdPC%xaqodsX=RepI6de;⚥B FhwC6˱JaK૒}A;**GxE?aShB6qSK-E,R"3UF!- Щq8GR%z,z9d3\=qj|uHv[.Kbm -8\FdlUʕ-Py5ME3IfrX=x)[FlR.g˰^_?3gs4MfWa)s/YD3K6aoCscR -dIȦh&ڀ4㭸,^LfT9td+0so" Wi× ,P:p`#ژF22$tBy]h6dW xT, T JQˣŷ%z\l?uGbu -ԞG{SshV]lP\>k -P">:ƬZ^\2ƋA~+ -J舦dI 6clkp/se -)&U(t@CvB(C\BPe.!u&d]E2glF^,Ë~K%e8 Êd5b[# -;2gxKɮI!.qmi.2!c%@djFJfLxY\%uxIQ% -%1K@kdYhR/6SovQp6LYeXR7bB‡)hc@̶Q%,x1[UqRr c&+VmDrN"$R*2$gjR2ԇ zq\;ax%]BQ>M -^/Zd$^̅!a!l\O+V;s-)D5&N"9 f40ԋ l8\ R ]Ibb ĕOňx3Nc/zVH.C+I?HeѰ :' -tc 3dGzc&8 -_+Iu[P*tًӐ]k3`% -;pau[ " oh%x4cOVыOruK%45 Y4#l0bUqɰ~ {Rq}s!^bQ6ćTr R2dhE)ꌫ)j0Rd';|T#+zq+}TƵ} -h< 4"&JCөdR{Ek"d}Xʵ/5;nRpQM&AW,{QC6ib`\S4bu:DB|/0`dًÐs Q,#ܚ!v2 ^]lɅPp3!b"Y4b,Ek>;j^d.PVr5G懎G3r1[N$ESY/~lWK6%.qt`os0CkVhE`23apl<Y.2iك__m}X`^n}+S+QXV,J/38iōZ`K8)zy#3\6Zx*hku-Ƕt:lŹ_ B`&Wk\ndDւ%+ЋzoT/rW\<Y1|s dKOFڲ/vF=6rPdo*hi>&dTjqme.,z!s0E+0~2 q]1蔱EkP>Z8Jܯ(.wtnl1Ћ YSi{[gBf=Y!JFMs ?*XsCJ{'8|3sb͡TȔ;ol]ZauAYc:'7_n&t.|FV| -5ӝCiHb%`^` oQ eQrj=:1ZLHlLpiAZԾ ].;v曋^$RfpC`2Z#gvea ]mQQwΓhN e)E1EatX {ZKoXDyQۢ^.0jaۃzI'MdvBB4l[mQ񬻕 "&bu3;胪տ#\7==fKx/k\3o.zuaOݚdkKR#j( -bmB v'[يE)-3hM'2بkb ;>S^X}7 -7>n]V\!ފXM3"]DŽC0]7! -eEهf(=FLXJʨR@Łܭ֍ 6_3X=}dJ!gaKʈQvಘz /IJU2/ cCRޭv0[=t ƽ`űXuQx3͊M# O#b+dLfE-‰_i\/.Lq/60mLVZo^[ |qL Eh!B82]¦eb="8}`aXl!` Q7@̔/**kFrFY>|qL |˔RWzUIש蕨Em}݂8د`Ӏ1*DymB(˷{+7B0[m@XK47/۾+։3,[D^Z -XjUVqPR'/?E9nc*ŖDb@drTy.Y^F'p<:RQ P& {oJ icJ _nj`[#*gu6($%#@[F5Kv`^`%8 RT Nzث jCP|5sF @G4)bj&X2Nv|)HFb VuXJ=7ad%|-ˁ"8a!+71(ǍaQށaN{P -o Irjv#~ f%Z _]We |%9NL6p9")b/ V #O.nD r%\ڨ5HTlZ`U?p#ַE󋊞?$Q9aJS3j -X#-td3Ss[.}Kl`c$FKrjD$P\Z[9b[5Km˥$")QR.Z/- -&-f&֫[# H= -{AI簎8IM)`Gnlve`9,9V^\9af $ÂsEZ5t2gN䖸,jo kV(ZI=4],`Ê`+Qz(z6+'PT(%KirpG,Fd+:}xgI`p1ĈA)RL2-):G:`_lO{-L.:%oʧDn#v[x` mRFu"g};djBd1`vysJ`ɭ(Y#زv4lbf]Ü>WۀV[%8xPZu#:=D"`mQ,NT)Oė0Xm3NL'A0v#jA2pyWU :ZDi~悁`Ɗi*6L/hS`>xDrDG+ME&t[ĔcnXȳg`_ى3H`/.!&Ɖ7;7bʼn| -hpa99KQ- =qljs.Rg) B* n]CT{o9Q?l*k,)|+h-#ۙH1YtȌY Nph`ɉ`uļ'RZi84Kв`ٛXXb6byfᢒXV;t;C>r`{g -Bžwm#fXMt K xeط3rү:{"VM5Z`١#aoejA0ԋI0҇xk0b$UJ¾xQ!؈ nv.;^_^uYzЦn.*dob>b;;1Ylgوv,k`C(F-K]@R*+`cݼ%{VtŽTy0;uJv`It>Wָ I{.TҀ=;ƈhVw6i8f,V*GE1-:Gk4w<;,s.bdss35Bq2G8 nn`}* E2?1ɝ8|lG6`T<6k~P쏣!Bm]/c ߕo8Vz|]؇\1lC7%`9>d'|`xI`Z8-2rVۀ};1E*[ -h۷6&KGϿ `V<(Q]ӷ^k }xFDK RnB}9Xg7k[xEB0?ڑ *&@yWŷWd;cFA7ʡjU,ܨ׎4AƼjQ,mkȊc&ּYIE‡`CKXNlv yo΂RCk&иˍj[92d0o| cQf0+P*X: P`jD)^9F+=3p#brHgŘkn +q#`PR``O`y1N_vAK} -hR+FM3`>E͂A<گ| 6W0;TKז|@0l_js`vÀ z탵^uW!`r!O ة΁ݼ|o㴾0 - +!3Nla0-59^0 ZȇlvLv4 lN` -[!S0h7M+(`3}*ܖ@ځ --vfl|Р6xw ̨t4 8a f w}:-f(Xg -((3{b -PP>vzFLjA{ɂ𚁡ϖϊ65a0yƞ΀P0`PT@c8[Wk v0)y40k/f0 ydm T44I,`x80^a -_3S3D,yG?9y&G{ W M`q^ױYR[,`~ ;}Xs0HH ``]ȦV -X;GI`'#8`8cM [lC;kˎ O:؂MNfe1wN -qWԂS涴V% -VF]0?su*f9@<5t*SZ" }(t4 8bm[4krOL`JT(3{QiYQP`F0 {@(G| K-Ώ=C勜g0<vW-fу)ԍcF®Uƺ"kזg2 ۧ"9Wx1߰- -+L\B4iQ"t:6 X~)  .O` kϕHUkC}>yJ\ ޳X9ͻM_ag6+rŲ¶uQVig.0[QL6C}w?ۛؓIa{9ÈU&>[K W0W Ц3-fX;Y >֝kl|]_Lb r ".0WSaoh:zπ-=5_$z(L{;zn?X^pa ,)ۙ ||L -&Rawb% Á?Gx&lQѩM2/4JΛCXoFOJ-Ώ=_g+ =>[{ zU=kl=C h;/R!\[0@B^,S}$ų~7'àڃ%Rտu+,$+rg0]T`?LzVTwض~ 0ʊҳZrVZװ -=l VXk?KC/E9y@p2=~a%0g/7X VvNi8SW[ -l:ɂaF9~+πC6n{0EhQa_#n5z4ٞIQ -=UV-f; $z(L{&0+ba7{%>eQ3W88;awbM -G oWEa ,X XDzy4 #(~f=ͳaFJ-0)1fbao0Zdv`2]"{za| :{ /ۀ`GU)) O]>+,A{2?$e[<=Ò.r,Ƿ ' tj/E0zVj~юQv_-jaB"k1 aO -9xP^V%.C6u%,!2K`Ԫ[A'àڣ%Rv q7 Y˧=M{i-+;xt<¶& &Y&х `ezSkZlx aĞYMZDke6 X~)'zd aP`vF ̎FdEPb}~Ɯ37`g=+oA}2l[GepY!gE8`[? l F^3AF!wZ}q{gXy7'Ԛ{`r DKjcvڴxs*Zؽ[E!O ;AKX;d ٶ|]_L6k<þ U3to47M74J-gaI´g0S$8-``0EG Sa&Rawb%[`K*@PN >hzy{4 -%]r|a k虎  vW-f)8ʵeѼzU=3n;`c&QNQc;cNPv8Cm_P`?\ڨkO-(_V?8]sаԶ -/!0 ̐NO`k} kq1iVbGώK03(<(+kz!(!xߺwH+(P3SafQ.4]b&VԮzcZl ,Q&X]>- -P0[laev-z<Լnr`r)WIMaԯ}YGoalhbFCw`3-.`]n V+Y`.l鰛R.CqHb0J V,,bSC>4;eGQ\gM/చx=p{fsxh1O4RA_JK2Ѽy@LC8W^;Zj'R^+R c(:!0h0~FѪp0/|0fEZ{#i -YdYh FY?^{+ATX)`0h2-0n<>VF\D"˒<{ -"Y -KSzfXeKFwKmu=0l;s=B#`׭^f`g5`} -rUg C -Gz&p0dXa0a`uî+ie Rr ,l_+9l1 !2v9XK$RL0 F`q~9g%s#i "rʔta5-5d@l -ԯ22;vzԶ -x" ; l< {X -K`-.&͊ܺxoqu^;K,6l=CZ 4vd{~N``om84)|9f ={ȢҨo0x!@t9b¶+ò䶳V|d]C;lE0lGa )RqY8^ yА#V2}@g8rNYeOa!+{-*j/&@$ .x5 qZ <Qa_ &>J/-a2}8RXv0F ,0聅5'*]`[˕v;{%g> h}a2)S3r] \wlG6W X~) !cc$ C``|T08YQ*n sO0I4,BiV7=b`=CZXg",NO`okA~G@kWe`z%q~ez@0˺Ȱʰl0Sհ dy {V> )g VYdAFs@`32luk:{E{=l~!_s) , d=S 2`ME,,bSC>4=e`?`"? 2'XVYSϤ^Ζ nL0zD%t yaK! "00R;=|Y]Z7(,*`=& -^ -;=}  Hշ3Z!0kq1iV_{ܥz&ϒ1P +Оu¦vzie~fM>CBs& 7q$þðLϱD4=]`N/s,.]Z- uveX6W - L`tV/ &'Y6Om -~ìi؎[eCtw=U6\#@|Xa0 ԏ` 8nW[vJCQ`.׺a7\r%6pcG XSѯKK}ԐMOy {5(;E~dLϖȰa*g%,f0ZG -RYx{xX9P= GpMf~ak]P,V V X~ ؇T};Ubq~Z\L34#z6<ge^WhMtc߭ɯ`=CZF -ㄏvy>M&$7q$ 98`hÈ&>ՒϰFꛚ`v"؟FwKm=,\ˌ,? v<s=r{T'6Q`̕˘@ljȇ E Fq 0 ѱL -VgzI0Xh1O4RX陋`4=22zfb¾0Ma?vX{vAwZ`e03 NO`4RV< -ŤYQgܷn%Ei -Yd4=kО%vz{K+ㆁE>CB04(^dYf{Y -KSa`}S32wYtv0gY?'_s d ̟Z`#=z\[^ LV3X` 82h0*BYۢ]1o V+˶wZKvX%p0o,-`R 65}nwa0ڢh9iG?D9Nlk>DDo$ɦ``eMLa4Fr`Z#ݟ|TaP rk -O+&K y -׊2FݭT`Wa'Kuz-5نV"YGA:2gBh4XIU fa-$ S8e~tX1hMw]_|r -{Xob7tCsU VŖ=r:"X [KzU_ FT3a-s4C=qa<`2E* a<;l!MП=֚5a8le=,8y̅R&u`îl|eA`4Ⱦ0ix|&;`W^,m`!K/@B0l ,+`'Aqd:Ð=؇p&XMUI\[[ -sO0I\e>B!zw`!- ,5w PUI$ M`ÐobOh k4ŀ}ðLױD4{Z:n^ dkI "av*l1, kD` C,y)lo[LV0gA`x {UaF U9]dݙ(9fA,"l m0=3 %W>6vòU؊BP^Ѣ\ -.eKy+`SUDu yhZap{5/Ӎe +bE+X`{K `4 F+DŇՆQ33m˯}a | t>a9lYKՏ_Q^aNV W - -`a'AqtF^Aa5.&͊p#-$m?̀#6C–yQVle虵PogHiaf*LnhFCV? &Vݾ`0,u,N/0Nk%e)gvoưl6ѦuƂ#-d|u`(-ÝY`!,`Zcܝd4.O[dBkwwg,W j0%[Y4 Va>aRp)L vXk^@ t@$aUE*,,b]C2F(.rF57 -LX +r`xh0>W`{Ѯeè{?gaЎ ;,ǃ}a(0/Va4Xe_V0k@WaNV >(O2 vyTMgra0fE~A0mٙGXav20ʊkͅp 0 -TmT(!ă ~M㄀}ÈU;>֒& Oj`f `ho6 e#`\2ܙAe]2> )Ϋ5ݙAk ?2E-2%h7D= 't|Xpa*lW֧a R0 ,5`+Zha4d0JV*,,b]cF˽Fq4SG7.ƃWm0|n0,lO+a=: P`_: Ѿsز(-/*:aXXk:/xnc <} *He~APXIb6jGV~(')ΌihK䂰e~`v !waT[ZV643Ul?>~,CNq`߇RXzU&5, hLJRa[Y i[:X>_#`\GJpgGUa`k#/-z<f -~aZ 6!VC=@0o+DҪA\ -R^ -'ro&Q -Ra`5ȥC[_ M$RHu0_O^Y6FX?2~8 /0lM#? .)9,d =]Lnx+t^FgO x֚.O` Z $xaaaZFѦifEk()v 8gT{`e~tX1 -D[d.07:&V %, _`-d`߇Z.T1ǚ -~TvcX6X{Yɦ`-s4Cva@2Ɓ#Om>ˋdRŅ-=3n 1 $$zb#"lCm6|>4pXR^JcBN`ڠav*Uaih%:XБ`({X⥬7Ėݝ3J 0.ӎ -&DF`+OTxG`}%C̋Ư(0d_{4{h+XCxot + VKX8ЅA_Rm y)Ll=#>ͯ]>ƕhBIpvXMUIbVzsO0;30X>l`5䝁,20XwH mQ+MG~~`'7OD=yUvEGA`0,u,Έ[Fo*ZD/m`@0Ky`yòtiyi.=>z:lo[W0I -`*w$ئ0:Oa83i {n#`cxDR;14Q;sbnE'ȗC" [uؒAyDlladQ;pVFەVaҚ )),ąKx38`aUſ*,1,]dTq(hZX?{X&M-90 ﭰ8-}]",âVBiaİ5gѩ/{Za0:$mMaParTK*;dYĹM wFQwqҜ<8+u }jd Nw`_!@şZ;_Q`/ -ߒ&j`1}އQaciUrcZ@ױijza}C' vk*0ti0&LaV.&P3;ef,n1ќU'4 -z8 F-`]lYBI{'B -.en -K1Ct&[S"<êUXbXj ĻD񠭟Gq0r@GeB]~l>a<߼ƨ_ -~a&& }a0XUfak. V%* -/ KuzrXTv ;=) *LbJ S25dY޵>po!j C㬈5Ix2 +U`ښvv3Ea{DMlyƬA1TaA jag n`{iE&la>.~Ӝ&LaV.&}pHN=3l3׫5]Sfp.تt -a1*Za٢`={Ch&FەVaY_%*=i`!`7%̘!|:3tXU -K Kxh=F fq0r@  -2`_a2(?80 C4X)x# gq GCTnyFF -#@ad_ \^,QQf1?SR^+0pFC0&H%$ギ8dYi b>of㬈5郒\ ;݁z~ -U[35SS '(~Sؓǐ{[[,0fՎX -iBa -zIͰijzZDT - &0[*la>pka5{*Lnr`[5 5W|;6qZck&HU'4i/1]X<N=.W{6HM+ mW*[e}e}ZXSB -f`7%̘!b<2`D0NV*,1,]CaX qQb+' px0SpwCxM0v`ZzqBF -#Q:/lͥԧsжZam""=M;=) *L8"hV0pa5.&ˊ^yi2`ߟ`Z͐GYk(LS#7=v -{IIBjJ -UѣdoyXKвsK?MjYFCZ_Ra[Y#ZYb̀JvX+,0yd캕#yOf&z77auڢGdODdBZb-`$laבM+ ,v%*,+sǟagB -f` ,C[eFsq -Raa50CpJn -:. a|L -ӹdCv{ K==R&opB 0r`= +H ->wz(a+0A2鼃I`hO,J^}:{V# 4RZ9 H]ai:dYh0 #n?kScjEبI煭WHkO^V4 ԰ز\2q k,Э%ya谻`U`0/dn#Q@]LGa l\i -qY~ѴUk`Mh; -Ya 1lL<-b) ,vM13( D UaLI`[)8’,eS?dFx -n!R0>Gz0snDX6Xv@PI ƃcf$н ,: 4Xl:; tejK:3,& -FEzv0x00 MjJ5inx1,l,)*Y`vM晰|]L1Qaq`_! ۚ)//`C}Ea;#ox}:֏HpfX֒xP3|D=5GMku - ֦3hšV)aa׭\JZԻ~?LG3\J1t #ػed8U0$dγ+UXjdSpfv%TXH==~T`!3lif02AbTKT0NV*,1,89yp߄i4ygOL`,=K`YkzFlH ]m]",|t}i[w.ad? M=F:$V^^kakwWRh}lp+uuUW:Rm+Z>t٠°DN/EՋ'Yv6ͤ/X8\{>y2vpnrR#Ɂ@R{B^N߻=GB!nmx"VGk"6dOd&' lQm6CL8:4I/a:캜\X los(`a!h;,VW-ط&,`bd}(apZVAF)>&F\PV}`k`k,La0+}ӶaKK3?F_,=&whN>*K?}n eY[,;FZbp&YW1} -f1 &{Ɯg| [,74jTrz+| %"@m|?a7h`uSu JktBviz2?19Rrْ2 ,wNG=_^M>ZEb)6[?nr-ZA[qm`DGRٸ4;<>NW@{9sf`]`{EAVfsK"&+`[`O-XeESɴAɽjQk`բn`Z8[ cA(KhQ3i+^b{oЫH$Bu,z$v̉1Fd=-hc#Cٷl£WzeQ:ո(3BX|tEOZJ-_=+^tCLc u*,O22y-BBOK4_|\8l,EbQ<{0n͕WL3,WZqئ,S lE8ц,\h|qX D5f9]_r$u_=\(ңc@_ b5F;`"_5#=DscoKqkj jX<ţW`CWQM^GYDSn3ΞڈA3~>iCGk,Zz$HC[ n@!-Nl}VoU/G=bQÂYG%ÉP &u/[1Gg+]dOy Q'7 -E'$-(c'.;";_WZ?HU٨XP16!fbai<=ڐ(Lv(99cŷmmVWXXdqk˼C^,va`D_peL=7#-#ֳ`qj]gb<6 "H(oYFL _bmi^lϽg'O ΢Nc,FLi9$OC^P+26{v8RV'bňIv5is,> {jR,joG$ 4o[؜]/hUi-jy+^zb  -9Ʉɶmaˎ/Æyq <(Tŏh` Ydk`_ EZu7o.ST*_]V_#9^F짎1C^K.u!LTE֮Ŋ[Кc M^$,@&F-/NU.Q1Tܗ/:n[ - ѡylj}ų{ -d8f.)S̨TOWrx! /^FlJ"ʑlR=y?L#V܉ӈ -3dI21yZ@.Sb9, %UMm8^,jJ&y^ 2I -u@kq~tZCڛ fxdrm:D`g̹̝FBHj.Xc8Iv)>{SE -(hH*IG/#ėxHfgdtXGtP.9JJ10 N|i8KYͨlY(Z3Vr2qIpgɾW5#m"" Tgb1KQKj\-M0`_Hfcd>\YdWqFI4eK&ZO<=I&(cdhU4[ӚbjɈ9>C`]2chăB27c' v\;Ix=Z@"_5`]Htx`6KɨԎVan5G7bEQEXu/wl#J6|>ԎlSjfD @-VUTM.00l2Eh6@$@2f&bDZ.wо5q.ؾd[2/ -'X֕%ZA,-ro8}u Wd?h&+uE*MeoFxXK:_t2.3FLUi!ZAj;PLа`CzOw $نdI {V'J\p#r#j\KB?#\{d'CcT@ 6;=dPgXױFN9Yر5 wB ڰpfɜhvTΆ2Q( Dؐ1/4)1?|9,Z⺚2_sO6' ލ}F K\#dh nHegH/drbU¢akŝF4mCѹ/$4"Uu]KHv3 jcPwbY9 *T] \S2M'-Co} PAu,[u-+R5m$D+"B-feu- -VOZl#{zTY +hRׇG0f(T(+m\,Imd-Σ+Uu-ӗP@E8|)UU4qck!j-,+8ፂ:r#:2{$apzYVe-ڙ4m :%q)U\ҲA<'Ig"˖"҄u] l -7ؔQӷ^[ o:O4ʖ՜Ѭfb]#I6 endstream endobj 140 0 obj [/Indexed 108 0 R 28 144 0 R] endobj 143 0 obj <>/Filter/FlateDecode/Height 984/Intent/RelativeColorimetric/Length 30581/Name/X/Subtype/Image/Type/XObject/Width 217>>stream -H[Tgf5ٰĵ'iA.}`2&7EDms i3ydG?O|'>O|'>Ȝ so?o?B}>?1TجςIاf3툨h X*\ 6 *[[ :i3hѦQe(͉HeŢ̞翴QV\lⲨ7V -\*gŌebI?ds-F\Ƹ*sNJŀ>.(2bEfˈq6[Zeq)tZIgȢaUmG,fdN.T_ٌТ,q,R}7 -euma)7Q8 -d.c\ZX -u2gdу9mtԷ6CyPc)Կ,l&C22ƆKݖ`Iwb7e4UP.Kx-+LhDfued=#tliFf2E*ħIUd\f0?4IȂty#x :j2^FKDq R=_sb+`cMF]XJuy .'`L-c#sv5qa T.\4 `4 -Q2F:2す_r ).B,!ҥ\tpơ İbKE[,ʕ+?W)Mn,KEL?c MƲ3g2" ?:ip}d\E*"FO4љ9E~XdgJ_1iI:&C3Ȝ#Pu,~ܠ'ti4?)b׷KgQV׉tHOQpdEDjq euHIIIx:'iJfY`S˰XE11M2ed]KYJIIMM -!4%3s,G:mva U\LߵIONh̸Y$vѦ\b mdqGFpX;Ù2#.bkbUffVV,e0 aL,#G&e.v4jϋ [(XPs99e e^Fcd] ̦8/~0._5P^Q̸YvѶK&\祋VrjSTD -v;(2hL{Ff`Pt^t]`)...*̌߅ (#aa>0ͅy%&q\Y9wIURZZVVV^^e%M2MU-2Gḏ8]8/azlJ****T@WJ4Mv+&-̺B ^ uH畒-͓ʻUUחA]YHU[W_ ˲n2j]Y#Pѫ3.\XC\WaqiYEeU5T .WccOE -e>*+gVxi<7l XȻi]:{Z< u5XFYZ80œ XFWth [ژEaAкZ["bT!.DF/׮]8/YP ?y[B6]2L (a'C E/(P\MXÎNfA5:6>>mpu{[=M*2E:2Ec߇A3n zk,&&orrb|lB֢"(CԢ:̩^R.:/ao?fx|Sc^k^#Z KŃ:ya 5훙{H37;;㛚Dh}"rE<oW-|_Bmttb G5;p~aa0o=/"Hj1hS]^ͅONBKK!=hFDVv1=TyN"=?{T)ߗۏ5=T߫Ya{`.:kHhcMO. h;*s!~o)Dz񃹖]]ʵqu۷0o߾y} -ۛk+sɱ>2nj}1|/\ʵ^ݻ B{lwg"]#s= -rW''t.D7_襫 ~Lq??|pgOvG'` Zx/ި3 KU?SVm6P%Јa P6xxl}6^mh@z3bC<+pyB h6уk'\/q\ɕ 4!uch-l&j`!DUع \L Wr|#hBeȸ8=ah`HY4}IvK0 C&W5+X|gә d,6:̩826WuzOl>3wQWR -,P;@v# #s^T҂/leq Gv!R c'N%Wr`\u jiq--MBȮ|z~Z v!R FġoWkX[,&Ymu%F̓#Z {1` -v!R Sg.YjzU{&{=`"Bܪ E*RBRp0`utvvuuuvv#+.td%'R 2V{uCPfwBT^Xt, .aX]򺄬#+/)‘q 2$.oG? q!D=TµLrU8.btwubdEܬtEGBz[#*/(gḖP\ jyf/82Wq - Nv,@BѳpUZQ m1}x@#YKS=a]AB6j}B86] - Ձq z P#=E>F 3X8,B`ʶpɸ=!>gpd]-uuȁ>o"!E(y&W{g75 vwl}1ԁ_y"*\C#^|#Baqd.'Q=X"U!Og0>$WȨ; yz<2" h=0"M6"T z fpU W0Qwtx#.ȪʋB~mXlhM0fڱo"D/ܚkdt TMld#ar*&4bB-8&gpIqa 1[SSS$2bahA)`,5L!`e5k5$Դ0&+on51.`ݑy #M+` =0ejQ3` (4_\ãkXKKK@={?`~SѬETw`Lfib{535eAf{-z ABLwK4"j"Fx@[aC.F;10t71EDE &ɬšDopἾC{|@[R#&` .*rE Q Ɍơ!64260.`hKm٘,-`-19L#r恱qhq 59=;Z"ֿ2F67K!jQ0%6y3\ē꫒=#^ }y 6-Zd@YT` GLZ9#J4E<-UA!2\?{wӓCBv$l`!70)#2eY)qP&SdAxQ`{9TI4(gUְqP 0ͅq<83ߣz`Y ̗a2[F4Ջӫ8 D>\=#Fv4 -fMu*4߭xC-q`yp0ǏH-`>#6ǭVs0-.`d22P=Qk_ MFFs]DI!-֗|@=uD̶>u?̮D=09R #8|\z"]\*[3تJĀh6 &{Ẽz&DUmsh#2!>⸞İptp֣t /LM0Sv_Þ`b_At i]+"Q\xx%d -+&;&zΜ@KDH4."LB/-SvSLbΔK6Exa*`9=JVl0CL1`|x:S&j/Z"0qa`*,|}0k+DΜK^B:D} 0ofS]eCa??xb3Et\E@I PJz(*0]l~2: z€Qޣz`!sC);bsKHH,:- & EFvp)_ aYDz2:ąi`9KcLI{-SLb"װoV|Ƙl(T2D(jX~1 sg1ƴGCϗ)f|1XF1eL=*Q=q2Gt=0*,؜XDoP< >+eX9h.41Ʀϡ -Li=b7(p +z.>K w{cQSi|Eւ9UEnTr=LcZS`Zv0+Y7*lcSXHi"^ba36 1&ҞBFA5x>3泞Eʚ0,֨ F -6Ai*L{6-\$;3a4<`TG.5m *`+rw`Y%aO3i0Y4, ocZsA#Kz7vda76SmSa?!Bnւ߫)-Z|`nٶk#vU߱as6Q R5C6(\~l1 -m.=2wEDX~ :֒` 6 -,`v [wx!6 -X? XhDT -;]06pc[zݦ)i;fva!{-n€BF5j9󺰗n ],Mbt#cW۸9YN%؍[mkشzlT@$B*X_,a¥+׬ {]V6kب@懄/Yvcbr=2N02 G& -&Xy("? okש`6 e1qk\ >,zZ֓`> 6N:c) 8ɅfVGؽ-R&4il^p5 I[vTݷ,|0Ov$y̳6KWِ`;i?X] ACGBg6MլMava[vr2%>cZsA#Kz7:,a?q ˊ X|vf4S6͟Mlђ+v˶] -V #|ǎ+g>sι27ʺQ R5C6(\~'*+l1bM -6MQN=$XolK#رvK=:6 -X? XhDTly谁C؂Ј6mNI۹7㰅ar oUQ؜֦}y1l:`ᑱmܜ,`Yƭ۶5lڂ`6* h`!% -aX*2p5+yWUw 6* !bVݘcOơ̬Sg/`!SajæѰl nn޾ ^5a 6`]n f4–ĭOLk XON, ;quar!s1 v*k2Al8-[u;`G+_,0?f v?SYq}XKתǩU&s%+1,KQɘ &P2뚕`XAkso}< ?_^0)`9gaVրٻ)wvN 2`(M -[je~v0Q}`ƀl6`MNa=ogblV]a 0* eUWo -6m_`gÔqI#`$ -c{ 0*%PX5s&f``z;=|;WTRqz톦n&`o#PsLE0oI`C^Va`?B`!e+@aIH-*adދ`@`{ [;0>4a[$x -+#LGπ.P\ܽ;[X\~ zea);*]E`]"_Yv䌜‹3Yf0+k];X>0]C&-^?; (>s cf60Klk`JUrzNk7r31`6yvD.0QiXR؅75`,lt-0;gW/ Ά)ҳXsn`}wD-0ut91`+V`'Xk_E%+V˗E%e`4{CfA`"X%kn(?4v8 LhTlbZV+7S_dRo3|; kj$W}[|Z)`YyKd 32[H` 'p/`!`C0uUK -k <}0 2LOqO`C"cR3J*._ -{.Js 1 vK`}yi¾~qA7]@a[$x -+13l\ܽ;[X\~ z{2l0`GŰk[ 3Sx3)f0+k];X 4LIaKN2 -Na=o԰wQ x& l, l)U9ZaGg 6Ĝ -yWO0* eUWon@-a -8f0e\RzkD-0u9q0_NRO_ fA`l(0`QqIi<=o>BհJ&G\c3mDΗV^#P3N<};Ea7`^(_dqV:32X|Z)`Yy-$5~&ȘM"Ia[%1AX#)mwȘ̼ko ״[~烌eJs ر1`c6I !`sl59PA"bR2sE[sXpDLڡ+0= -o¶SX_}۟EXaq%b6uTܪolz`&j=,r -/`/ -[je; -{Ƽ믇Mk`HJ0KLa~t(~K;H`IL 3LI`˪d#)31`6yXRܼ+d`vήbXvkng 0ep؋>` -VÌ-X0'W/_NPX`&v 0 D`,yؽ6Hi36`8>B)Rưl.O@PXV+uw԰W} ?cdXvi [j-`<};NapN9Œ,<;X$i}L` )l+ XHdlUX`ݏ>lLOqO`),3 M(W92 A6Tv 5zHoL~hiJ`{XL& 0Űe+] U[;2l`x#b)\0= -o¶lwpqTpDt|JFn!a/{YMf "إk[:3 Ej8'x(dMs#=LAFaKKa* -+< # chifI`m~<T%v5l`L9 `^+ׄ50QiXR؅57 0Zlt-0;gW/ RX6U),Z:VP%V)HT09%w sVr&d*HA bQ9޾w_q>unbX V1;09q^`3UN(e`2yRZv> {`‚ !6 IVZ5`ctPi[0] "dr{6. إY*-+z60Avò93]0dM#lZ `NVzzaJl[ `>R&'e糰'-,Ͽ mC$`U Uh0T6 l;\a##=03;@ -KUZV~qYͻ4Cpilm`g5aM\~#1bTYyťY`[_z`Zݽ}Q<*qSK (́!za0# ] WfV޸S@69遡'4, `gx:0 -جI?!) ؚuaL-* {`[Or`a|XcK;zK7 2M,*tþS 3020/?q0.E%dT\X:1ޞi s`I 흿z~v `Qq9X9i-basݰB#JV;:o1ise߀-b#vWO_QU$Lcdfnev,`X5#Js*QE*vV={aa'0.Gʓҳ93*a3u -604f`sp"`8Xeal GV98mOIi, u A0;ۆ`;IX+ K҆b`G!8C} .M-^i(.ETiYeU7֓W5?~{ aՄ5va[vFc $RKIXf9mE0Iak^t!lB0<*qSKNjT@F4`{KBv1<&^WTZyNa4, `gx:fq0f -%faqE+S2sJx7Co[-'90>]06԰0la0bS -302\ܼ[XRq` |5}E l0N۵;!샐`V|1E%&g^[+ ->+†BibjG͓S`X9=mn 6[ 0{+ -b`0f޳2aV l7vUߪ SsJQE*ҳ `ڞ cQ'0.G5`]=flh,mW98mb`R`enyll66Zm۽NL&OJgaOX B¾PCAv,@z"԰*֪$. -`eU7k0yO+M|^i(.ETiYvj{`g9X)kjX`6v+׮0w ;UjV&l12al+KB,\ DCI3lfć$vz2>_l~I.+S3J+oܩ{`ifaM;f-6A lC+`[`kmXt2%35 v [-'9DwG`Re] U X:_z`sq38+,~~Ccs;*7TN 4%Zm؟Yav `QSxM ZF-lѿ1lfؕ8Tq`3=mǰ ǰtc6j<1bZy5J[2 :x`$v#=oy삫س]=X404;ˑrMX7|%4fYگrp0@)aXxa~Cm!X> {uj~D ,B&WaXaflw4`0,+fMC4^XSk&ala![~#ܽ$0k*KUDr1\(HR19%u s Ӥ,f $Q:|w^̹bzz;a+c`Vvkv -`VHPi - -2pE'+1YD  e ),)[60bi Za'9 * ;:ov Ú:hشI`4vyv1"6A_,mV0  zu #JgIƭk7vv`>~6gA/_Qa]Ű< SC+ؔY]X -`t- `Wd)yXXck`` vUpePiZZ1} e)*v3d4,8CAa-KVe^j {am/ &.҅Iv^B-} nܼ`v -`ɪe՛ H nDiX8x#\^La G?V0='@ -QIʌ’ʻ0y>'(`dVLsS ͝`4læ-sǰKR2.m#=[/ = -H}C ӆV` {+-]yKBv)2.Q]P\Zqں^VØ ElA ;K>1 N,6Q_|S%,`n~#Ú:hM|N5J;:ovKJs;TM[ [`]ܼ O/b`Yڬ``&v~c~}F` O+vvC -6gA/_Qa]lZFƦ `NR0\l6y,%53 klv!X N*78,*MKk;X,EUj= Y,8CAa-KVebX5Zå taR`e՛l[a-$a=F0+UaR*yK; h`LA!l st8"N=Œ̡41lv "vRشI``l8%ӲX=_f0k7vvCQ #JgIfX`s՘C0nO9lZFƦ `N+ǰ֎IaÃ}uN+ -b`̼k|Xp`dG] -`ϴa(Ⱦ åim1cv^#{F?"0uix - -ؕhY*3ê՛6F}taR`eX۾aͼl[a- o_Y٭B XV`[ &˃)3тzHCv9*>ISXRVyaS~`fؿy0(M +[&9mXs{ݰ `lmش`v`qIRL?l v $("u`4 # v%V` m,ldl\0#3>_KqҊ;ꞨaC\S`gyZlMTe 2E1l st8"N L0c3s(M []09"`M`KvyX<-+ & & -`"!`>oj^Oa O+a`,zjLB.op*t=0M1 ]`F,=NLwM6& -2`A,Z 3[?8>J#NLU=kl@7`6F+ME|CAa-KVe ->d&yV&hڍN,>Y[žk`ܼlDiX8԰J2`3g0>l/XIY꺧0H zHCv9*>Ia1Kh0(M +[&9Vۻ^ldl V0 6l0w ; $ezN {aH`;_?),Z:V1TXUHT19Msdh21T$Ϊ0!*#snw>,*>9j M Č.- -z su e$+~Y&”`Da6j, -*!`޼yN. WXd\R065o#_l¸0c3sR9f - 4VC`ԃ}6WEaSXiE͵[MZ;a40K{"$ ` Qx`lVPZn62:/ cl/`cU"X{w>OM4+X wX0OE0`(`a9& (`VR^}?}r|`4-l,&15n6mi#)7sO@p8`(, -` iJtذyllks1 )TQ؃^Ci fex)` #"X6I- 脔 6+lDcP`g),rUݍ;I adVvd1W4KFKS 켢˕2M -VZn?C61{NaB`K Na #я;\ŒL(lB -۲/03QIٹEeo75 0F\\ sL q}CYlC%gU0XlT60'ܼ}ExC¦flf N.륰4 -!V{Jaǀx&FK0 td*-+uS؀`6 0`İ[Js -626e0kESRXr-_cf`f -JOL9-&MQƻd ؟ßyҴcm vLX{u7Y,4{;y)_- 2GoZ-MfчvRO /+W̃Žy1X=¾a#_yY-"h5UrUݍ;{7&OLt`;0 XU.†8M4#+ؔstNQ%0d 6K[0OE0%X wo6X`G),®lmcX~Y,4{;"1-MfчvR]Rt굀yPR2/K`/^y/L`Vvl#,Z p>`4e *evz:%0GlDcP`g3. ~Tþ?0r2 iae+vB^a`xM¦$0s~'NaO+`m=Z#ȼ -&.l`뛚321 0oPD'gv~߰c\Sv )?v² - 0'ܼ}EJ`"f, 363GiRr'Zi( u'&69fW7/_eҲr -K+jj=;O,ml;` -$D9 ` 9 N`j߃Oش`|!{;J4D0M0Gg]Zd%-st^" *u l1m"RX&l+G-Mk;`!+bJs4`;=v.&1E{+LxȤ٦saAUia{7(-]z-`v+f { 2"fe6P~R2(FÝ:{ qUW|zY Lt`;9jk>0!԰ )l,z}Ss[G)ML̤0WwoPD'agXW{OM8eV!4? -f#, -XkGSE 0'ܼ}E%QX,af(M -[^ ;Ma9 ?l>`W`*+vx*.M ,ml;` -Q- .^` ;X,覢2Na]^>Uja-cTD0Ma: STYq|k!(/ƝAJN M%D%guD)]GL>9ݷmW{O=4I`k AiaI戰cze"W#xa S QD_Xjfv> {*EqXyM= aBix(ð4 ߀v֌-{ν̋.L{6oxmCQˣ,Eɣ]}|3Nʪ$Óab`^~Hŧ( lx ^}76+ Jƞv -$HW0we W0, a{']Xª`|ana`;vaAsKPR؃GcOĥ9̂6o%,JI$0<0\kqۥw lhlR0;̃bÄҔl laE,)]C`3`KZXbil;ŽX8n%g.ml74:¾g]6=C KYm 2`\ v'E `,ESX6 [jFVfe.'CUfbZfvAqEMCK[{Oa;]tw&$ҴuSv`562!&Y 3!(%,ӝ?Piaô?D JM~Qy60(3,|lw(‚v{X{`g? F`')KL&=)MaML)`N. &W4utF7'1]N.L`#Xon_戰c X">|x% KցNQ"\ {m_;XBj602fP {9`=m{?0R|\`7z.n(s"Sjav=y vq؆ GXRž<)&`y4UQ8&߰+/X z`x2 ƞv -ք~ - {O72=lZD؞}I`ia 0 l ,Hy`\-SB0mN8+MJ -fbfA``A -SX# M>{kqۥ lJ0;1, -, F-`a1KJWPΞQ=0S K(MzXE`% -Y`l;Žy^X1PiRXZVNAIEm N<˜\vKV1; ĴlkiE(8-5lbjNasr]P\Qv¾_: "0oϿ az°4m(KFFJl*oEiw!0R|\`7R{#+ -lE` aXzgl!(‚QUױ0R3R`6;n`W003_<քᱹ0<G0<iecd+,k+ 2=lZYl;0Ot>o/",9C[XZu†0$!3{;T8\kqۥ74*$`vbX,k#~6jaή XR*`>Hfja I`]aDx6EL%wy,_a<|cb,t0]i΁1n X(eTf81"kX`  XbZV6jZڻ0w\ -6150[9ha -LL.(n*a.'C&+Fƥ #Ž!,D}`,셴`4m(K` 쌷"4vk!0R|\`7Rj=ذLeܻ O`#l!(‚QU10(M.N -xxt2<``f0w/`y$ IMQÓ`PV6 L)²: g2=lZYl|"K85Xfvjb`s$g$H,9lDrFEQQQ8sݷo ٹӿsEX:ljN4`Fv` O-`k S]`*YMۀg`(O"H {SX)ʪ;z=0,MTҁYbU`O]r`s -X&gIi½L􍌡4v(dc ^0[{a&Q -\š®,r 0f{->! ڦ6lc޾ lYzf0S,`2r DgE[` vY#,a` RĂ.X@pD rFx2n*"u]`9%4 A0bƗ; 84O "}^[9~4ܣ ,9='{OK*.`<07 NO/Anߥ3:H`_ %2˺d`WXذ`  `Nn^$~$`ߪ4M,E0W#Ӳ]-% -1~%c'NaqCA&1!'0?YX˪9Ԭv*k0.x~,R#I*O*6^۽),sѓYei~2i,Ta+J}`.A$ ` 72DQ{sLE6:90,Mf`;/%K.Juy. L-)C"o,ڻ>س F` -?eV&fHIcQv'0$6avj -70sk#vRX0ne5`6vuw% `]621-= 2v`1!ƶ;JfbnK)(`} KuvaBiQ9{$$#)a#cȶSX>:6>MJs{)̬l?y`nON/)i5%lzbMA@`h`Ss|i(aV}f -"Ҳ)~߀&`䑩~ܼaInhc 4M,E0`cS/^)lA.FV0+;q`KJ+.oaD:0[DC;O`~(`C1~dÎ<07yxL<֩aiJ ffes`̟² ~߀潔`v¢Ӳ9c}2 `Nn^0VBacS$؆G 31dKJӀ"0,MuXA`C`daN,, -`YVуI1 e¸ WDaP"T .;zBVUf `0۽!`A@X;F'ii+]YbS3EUu \<}B#En Rv k!v(G'–?-c &l 쒣oPHd͔ʺ&= 7av ``ӌD͔ەMmWwSky -þ^ 캇O`H6-M2=V7bt#+XOߐfwVFnº<{pSG{vnA;bw,p+#vEm#l|Z(M!MGa4Mͭ(K)(ilE遇I_D9{$$f_=ci~4ܣ rulD݂maZ;g憰lkha$;H`__cE+n^0VЂ0(Y,M[ D0$9L[*,.)-+>dK \$|D7]`aiر' BXAiȁ1!PXU}F"\+ہg` 첓'Sk'0Z{d+d* %3sXPhTlbj]-dS}ütn s -MLTV5i .E1^ 327l#Ia!E&Mn<-fa$k)GX|L\0}#cd%K.#̟8iҚtnڴQĚz1⁊"(r,,}.܂ (+&Ny}wө,!L0)zȒ` a€-`ꥹr XDӃL`^hɾFΘ7X`[6%-ln"E 4F(0Wyӑx`o`K؊knQ`Q񞗦ւՅ=Fw**]m^`Go 0t*z 5dZW -ZTKF;HT`ux߿d9^EzCFɓOG E)ٙ6K|ltđ{ڶ[i(F!EniCZg h]\14*>b"BCl;x`F VZ2d*gA_kv$qjxG+5s~,Ճ-߷˒]Ȅ== IFS;cr,̵kV^jՃi,d#uᛝee`j(uƤ;s㧟l~/ (!5-Uaɐ˃2)!%]qc{:%E16* W,طE MCGi~l|Mmz;Eg )8czϱe0_={TD3 a 4~w1[%"l3ygz,4V狌5%sIedãΝV\(IdRR8WgŃ`o,V=x5kOMh9,QW!7&oޚ}ԭ[cÃXq۞ʻ{^ ,=d&-4L!#CI64~7o*!l$bՂ";ykqdd(22*nLLL򛘸1~\W.q`Mpbi!ϳM1L>(3]h{uȖ{%%ӲX]-$do>B~(kՒhMb;(E^[<0C,Ze#+W#;{AȆёkCW.lQ$yƊ)w[,O.?`^aZ2bf#krw;O!  r^}ݲa(WX1Ɣs -,:.x 44w ٕCCԡY1qa{}L= KfʢUU ] W_׹vwSCMȰ'cSܡItW?d=d̢x7:YFVT06~wXtA'q;twhR }~y|C\2#y%#;{vҥKpWq5UWp"$b;{ƞ^g,>8 IV߈=:{h򒂼LG,F$+#pg̿5{xL"o4%2 -άs==zzuwubЙC%b`T(Ic+qǂQK,ҋvAjd=ӡ54wtvuuhosh\E blu|EQK"{A00̓ō[w양aF$+6E%dغ#;p8ØdUTjjklhqUU --Ad<F"dǓDK$XSm4lTkJ%XWTdx̋1ˆMb`|ekdHfɂ:r4"Rn?5uFamtiE,"D HbJ| ZoS3{N_|:(X{;[,' -D,dVd[ZEq@l5QDh{''xNpXk"\8\D|ɓ(E;F*cGW3 =.h{1Po޼~uʯ.gEDC&NGM L5֬o2Y*=How+aI|.,."fNnb|PXkF2\Bm_CUXϯWf.\t[鈫.#e5Yƴb*nnekfzw.:|g7ibPd0el2$-5ǴlO^ȯ,g9QLQp`DnpC,4`[] uB!Tney)0Kq\c#C}ȁ]WS%,"2|25Do?1ɴٹ lYVrU\nP lqar0VX|8,#L: Ј6r4%lv((.WKĂ!O1‘2bp@XuDh=x`.d2,&'c2.|~|9~t|LpEi?O6L*O*5C) -k|ld՛@ j\"aQ2b̈́ mlju|C}ؒMNMM!Ӌ Rj// 9q®"seM\ǎ'϶Q'ӓd('X\ÖhG74RI3e$ E5lj;O.E70d(-2\}Z4h608844gh(zXw2.]``D߭:Ҧ1SڞH}@)U`Q\Z) ,&"e h D>=DOOT?~X^\\vc,"2YF#3QGC6{ڭOpVmK`"Xkfd \tvvv *f!͚K1m{L<=mQ -n9.`9e2 l[s tJfdE*e~ b,Li5%C4)giRyYqydS<ȟ`:6 yޣR -|2ImyjTѬ&mZ*ͪh\ѴMB@ d˪˕hcu9+fl\>CUaW@f,\i>׫l;c.E\ټC:,/-d "~KUdEJUmR]V'++5Sm%J͹D9$gΟb.b.b.bf`<E endstream endobj 144 0 obj <>stream -yyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhfffcccbbb```]]]UUU@@@ endstream endobj 141 0 obj <> endobj 145 0 obj <> endobj 146 0 obj [0.0 0.0 0.0] endobj 147 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream -q -/GS0 gs -52.0799988 0 0 236.1599947 266.1087341 168.8636869 cm -/Im0 Do -Q - endstream endobj 148 0 obj <> endobj 150 0 obj <>/Filter/FlateDecode/Height 984/Intent/RelativeColorimetric/Length 30581/Name/X/Subtype/Image/Type/XObject/Width 217>>stream -H[Tgf5ٰĵ'iA.}`2&7EDms i3ydG?O|'>O|'>Ȝ so?o?B}>?1TجςIاf3툨h X*\ 6 *[[ :i3hѦQe(͉HeŢ̞翴QV\lⲨ7V -\*gŌebI?ds-F\Ƹ*sNJŀ>.(2bEfˈq6[Zeq)tZIgȢaUmG,fdN.T_ٌТ,q,R}7 -euma)7Q8 -d.c\ZX -u2gdу9mtԷ6CyPc)Կ,l&C22ƆKݖ`Iwb7e4UP.Kx-+LhDfued=#tliFf2E*ħIUd\f0?4IȂty#x :j2^FKDq R=_sb+`cMF]XJuy .'`L-c#sv5qa T.\4 `4 -Q2F:2す_r ).B,!ҥ\tpơ İbKE[,ʕ+?W)Mn,KEL?c MƲ3g2" ?:ip}d\E*"FO4љ9E~XdgJ_1iI:&C3Ȝ#Pu,~ܠ'ti4?)b׷KgQV׉tHOQpdEDjq euHIIIx:'iJfY`S˰XE11M2ed]KYJIIMM -!4%3s,G:mva U\LߵIONh̸Y$vѦ\b mdqGFpX;Ù2#.bkbUffVV,e0 aL,#G&e.v4jϋ [(XPs99e e^Fcd] ̦8/~0._5P^Q̸YvѶK&\祋VrjSTD -v;(2hL{Ff`Pt^t]`)...*̌߅ (#aa>0ͅy%&q\Y9wIURZZVVV^^e%M2MU-2Gḏ8]8/azlJ****T@WJ4Mv+&-̺B ^ uH畒-͓ʻUUחA]YHU[W_ ˲n2j]Y#Pѫ3.\XC\WaqiYEeU5T .WccOE -e>*+gVxi<7l XȻi]:{Z< u5XFYZ80œ XFWth [ژEaAкZ["bT!.DF/׮]8/YP ?y[B6]2L (a'C E/(P\MXÎNfA5:6>>mpu{[=M*2E:2Ec߇A3n zk,&&orrb|lB֢"(CԢ:̩^R.:/ao?fx|Sc^k^#Z KŃ:ya 5훙{H37;;㛚Dh}"rE<oW-|_Bmttb G5;p~aa0o=/"Hj1hS]^ͅONBKK!=hFDVv1=TyN"=?{T)ߗۏ5=T߫Ya{`.:kHhcMO. h;*s!~o)Dz񃹖]]ʵqu۷0o߾y} -ۛk+sɱ>2nj}1|/\ʵ^ݻ B{lwg"]#s= -rW''t.D7_襫 ~Lq??|pgOvG'` Zx/ި3 KU?SVm6P%Јa P6xxl}6^mh@z3bC<+pyB h6уk'\/q\ɕ 4!uch-l&j`!DUع \L Wr|#hBeȸ8=ah`HY4}IvK0 C&W5+X|gә d,6:̩826WuzOl>3wQWR -,P;@v# #s^T҂/leq Gv!R c'N%Wr`\u jiq--MBȮ|z~Z v!R FġoWkX[,&Ymu%F̓#Z {1` -v!R Sg.YjzU{&{=`"Bܪ E*RBRp0`utvvuuuvv#+.td%'R 2V{uCPfwBT^Xt, .aX]򺄬#+/)‘q 2$.oG? q!D=TµLrU8.btwubdEܬtEGBz[#*/(gḖP\ jyf/82Wq - Nv,@BѳpUZQ m1}x@#YKS=a]AB6j}B86] - Ձq z P#=E>F 3X8,B`ʶpɸ=!>gpd]-uuȁ>o"!E(y&W{g75 vwl}1ԁ_y"*\C#^|#Baqd.'Q=X"U!Og0>$WȨ; yz<2" h=0"M6"T z fpU W0Qwtx#.ȪʋB~mXlhM0fڱo"D/ܚkdt TMld#ar*&4bB-8&gpIqa 1[SSS$2bahA)`,5L!`e5k5$Դ0&+on51.`ݑy #M+` =0ejQ3` (4_\ãkXKKK@={?`~SѬETw`Lfib{535eAf{-z ABLwK4"j"Fx@[aC.F;10t71EDE &ɬšDopἾC{|@[R#&` .*rE Q Ɍơ!64260.`hKm٘,-`-19L#r恱qhq 59=;Z"ֿ2F67K!jQ0%6y3\ē꫒=#^ }y 6-Zd@YT` GLZ9#J4E<-UA!2\?{wӓCBv$l`!70)#2eY)qP&SdAxQ`{9TI4(gUְqP 0ͅq<83ߣz`Y ̗a2[F4Ջӫ8 D>\=#Fv4 -fMu*4߭xC-q`yp0ǏH-`>#6ǭVs0-.`d22P=Qk_ MFFs]DI!-֗|@=uD̶>u?̮D=09R #8|\z"]\*[3تJĀh6 &{Ẽz&DUmsh#2!>⸞İptp֣t /LM0Sv_Þ`b_At i]+"Q\xx%d -+&;&zΜ@KDH4."LB/-SvSLbΔK6Exa*`9=JVl0CL1`|x:S&j/Z"0qa`*,|}0k+DΜK^B:D} 0ofS]eCa??xb3Et\E@I PJz(*0]l~2: z€Qޣz`!sC);bsKHH,:- & EFvp)_ aYDz2:ąi`9KcLI{-SLb"װoV|Ƙl(T2D(jX~1 sg1ƴGCϗ)f|1XF1eL=*Q=q2Gt=0*,؜XDoP< >+eX9h.41Ʀϡ -Li=b7(p +z.>K w{cQSi|Eւ9UEnTr=LcZS`Zv0+Y7*lcSXHi"^ba36 1&ҞBFA5x>3泞Eʚ0,֨ F -6Ai*L{6-\$;3a4<`TG.5m *`+rw`Y%aO3i0Y4, ocZsA#Kz7vda76SmSa?!Bnւ߫)-Z|`nٶk#vU߱as6Q R5C6(\~l1 -m.=2wEDX~ :֒` 6 -,`v [wx!6 -X? XhDT -;]06pc[zݦ)i;fva!{-n€BF5j9󺰗n ],Mbt#cW۸9YN%؍[mkشzlT@$B*X_,a¥+׬ {]V6kب@懄/Yvcbr=2N02 G& -&Xy("? okש`6 e1qk\ >,zZ֓`> 6N:c) 8ɅfVGؽ-R&4il^p5 I[vTݷ,|0Ov$y̳6KWِ`;i?X] ACGBg6MլMava[vr2%>cZsA#Kz7:,a?q ˊ X|vf4S6͟Mlђ+v˶] -V #|ǎ+g>sι27ʺQ R5C6(\~'*+l1bM -6MQN=$XolK#رvK=:6 -X? XhDTly谁C؂Ј6mNI۹7㰅ar oUQ؜֦}y1l:`ᑱmܜ,`Yƭ۶5lڂ`6* h`!% -aX*2p5+yWUw 6* !bVݘcOơ̬Sg/`!SajæѰl nn޾ ^5a 6`]n f4–ĭOLk XON, ;quar!s1 v*k2Al8-[u;`G+_,0?f v?SYq}XKתǩU&s%+1,KQɘ &P2뚕`XAkso}< ?_^0)`9gaVրٻ)wvN 2`(M -[je~v0Q}`ƀl6`MNa=ogblV]a 0* eUWo -6m_`gÔqI#`$ -c{ 0*%PX5s&f``z;=|;WTRqz톦n&`o#PsLE0oI`C^Va`?B`!e+@aIH-*adދ`@`{ [;0>4a[$x -+#LGπ.P\ܽ;[X\~ zea);*]E`]"_Yv䌜‹3Yf0+k];X>0]C&-^?; (>s cf60Klk`JUrzNk7r31`6yvD.0QiXR؅75`,lt-0;gW/ Ά)ҳXsn`}wD-0ut91`+V`'Xk_E%+V˗E%e`4{CfA`"X%kn(?4v8 LhTlbZV+7S_dRo3|; kj$W}[|Z)`YyKd 32[H` 'p/`!`C0uUK -k <}0 2LOqO`C"cR3J*._ -{.Js 1 vK`}yi¾~qA7]@a[$x -+13l\ܽ;[X\~ z{2l0`GŰk[ 3Sx3)f0+k];X 4LIaKN2 -Na=o԰wQ x& l, l)U9ZaGg 6Ĝ -yWO0* eUWon@-a -8f0e\RzkD-0u9q0_NRO_ fA`l(0`QqIi<=o>BհJ&G\c3mDΗV^#P3N<};Ea7`^(_dqV:32X|Z)`Yy-$5~&ȘM"Ia[%1AX#)mwȘ̼ko ״[~烌eJs ر1`c6I !`sl59PA"bR2sE[sXpDLڡ+0= -o¶SX_}۟EXaq%b6uTܪolz`&j=,r -/`/ -[je; -{Ƽ믇Mk`HJ0KLa~t(~K;H`IL 3LI`˪d#)31`6yXRܼ+d`vήbXvkng 0ep؋>` -VÌ-X0'W/_NPX`&v 0 D`,yؽ6Hi36`8>B)Rưl.O@PXV+uw԰W} ?cdXvi [j-`<};NapN9Œ,<;X$i}L` )l+ XHdlUX`ݏ>lLOqO`),3 M(W92 A6Tv 5zHoL~hiJ`{XL& 0Űe+] U[;2l`x#b)\0= -o¶lwpqTpDt|JFn!a/{YMf "إk[:3 Ej8'x(dMs#=LAFaKKa* -+< # chifI`m~<T%v5l`L9 `^+ׄ50QiXR؅57 0Zlt-0;gW/ RX6U),Z:VP%V)HT09%w sVr&d*HA bQ9޾w_q>unbX V1;09q^`3UN(e`2yRZv> {`‚ !6 IVZ5`ctPi[0] "dr{6. إY*-+z60Avò93]0dM#lZ `NVzzaJl[ `>R&'e糰'-,Ͽ mC$`U Uh0T6 l;\a##=03;@ -KUZV~qYͻ4Cpilm`g5aM\~#1bTYyťY`[_z`Zݽ}Q<*qSK (́!za0# ] WfV޸S@69遡'4, `gx:0 -جI?!) ؚuaL-* {`[Or`a|XcK;zK7 2M,*tþS 3020/?q0.E%dT\X:1ޞi s`I 흿z~v `Qq9X9i-basݰB#JV;:o1ise߀-b#vWO_QU$Lcdfnev,`X5#Js*QE*vV={aa'0.Gʓҳ93*a3u -604f`sp"`8Xeal GV98mOIi, u A0;ۆ`;IX+ K҆b`G!8C} .M-^i(.ETiYeU7֓W5?~{ aՄ5va[vFc $RKIXf9mE0Iak^t!lB0<*qSKNjT@F4`{KBv1<&^WTZyNa4, `gx:fq0f -%faqE+S2sJx7Co[-'90>]06԰0la0bS -302\ܼ[XRq` |5}E l0N۵;!샐`V|1E%&g^[+ ->+†BibjG͓S`X9=mn 6[ 0{+ -b`0f޳2aV l7vUߪ SsJQE*ҳ `ڞ cQ'0.G5`]=flh,mW98mb`R`enyll66Zm۽NL&OJgaOX B¾PCAv,@z"԰*֪$. -`eU7k0yO+M|^i(.ETiYvj{`g9X)kjX`6v+׮0w ;UjV&l12al+KB,\ DCI3lfć$vz2>_l~I.+S3J+oܩ{`ifaM;f-6A lC+`[`kmXt2%35 v [-'9DwG`Re] U X:_z`sq38+,~~Ccs;*7TN 4%Zm؟Yav `QSxM ZF-lѿ1lfؕ8Tq`3=mǰ ǰtc6j<1bZy5J[2 :x`$v#=oy삫س]=X404;ˑrMX7|%4fYگrp0@)aXxa~Cm!X> {uj~D ,B&WaXaflw4`0,+fMC4^XSk&ala![~#ܽ$0k*KUDr1\(HR19%u s Ӥ,f $Q:|w^̹bzz;a+c`Vvkv -`VHPi - -2pE'+1YD  e ),)[60bi Za'9 * ;:ov Ú:hشI`4vyv1"6A_,mV0  zu #JgIƭk7vv`>~6gA/_Qa]Ű< SC+ؔY]X -`t- `Wd)yXXck`` vUpePiZZ1} e)*v3d4,8CAa-KVe^j {am/ &.҅Iv^B-} nܼ`v -`ɪe՛ H nDiX8x#\^La G?V0='@ -QIʌ’ʻ0y>'(`dVLsS ͝`4læ-sǰKR2.m#=[/ = -H}C ӆV` {+-]yKBv)2.Q]P\Zqں^VØ ElA ;K>1 N,6Q_|S%,`n~#Ú:hM|N5J;:ovKJs;TM[ [`]ܼ O/b`Yڬ``&v~c~}F` O+vvC -6gA/_Qa]lZFƦ `NR0\l6y,%53 klv!X N*78,*MKk;X,EUj= Y,8CAa-KVebX5Zå taR`e՛l[a-$a=F0+UaR*yK; h`LA!l st8"N=Œ̡41lv "vRشI``l8%ӲX=_f0k7vvCQ #JgIfX`s՘C0nO9lZFƦ `N+ǰ֎IaÃ}uN+ -b`̼k|Xp`dG] -`ϴa(Ⱦ åim1cv^#{F?"0uix - -ؕhY*3ê՛6F}taR`eX۾aͼl[a- o_Y٭B XV`[ &˃)3тzHCv9*>ISXRVyaS~`fؿy0(M +[&9mXs{ݰ `lmش`v`qIRL?l v $("u`4 # v%V` m,ldl\0#3>_KqҊ;ꞨaC\S`gyZlMTe 2E1l st8"N L0c3s(M []09"`M`KvyX<-+ & & -`"!`>oj^Oa O+a`,zjLB.op*t=0M1 ]`F,=NLwM6& -2`A,Z 3[?8>J#NLU=kl@7`6F+ME|CAa-KVe ->d&yV&hڍN,>Y[žk`ܼlDiX8԰J2`3g0>l/XIY꺧0H zHCv9*>Ia1Kh0(M +[&9Vۻ^ldl V0 6l0w ; $ezN {aH`;_?),Z:V1TXUHT19Msdh21T$Ϊ0!*#snw>,*>9j M Č.- -z su e$+~Y&”`Da6j, -*!`޼yN. WXd\R065o#_l¸0c3sR9f - 4VC`ԃ}6WEaSXiE͵[MZ;a40K{"$ ` Qx`lVPZn62:/ cl/`cU"X{w>OM4+X wX0OE0`(`a9& (`VR^}?}r|`4-l,&15n6mi#)7sO@p8`(, -` iJtذyllks1 )TQ؃^Ci fex)` #"X6I- 脔 6+lDcP`g),rUݍ;I adVvd1W4KFKS 켢˕2M -VZn?C61{NaB`K Na #я;\ŒL(lB -۲/03QIٹEeo75 0F\\ sL q}CYlC%gU0XlT60'ܼ}ExC¦flf N.륰4 -!V{Jaǀx&FK0 td*-+uS؀`6 0`İ[Js -626e0kESRXr-_cf`f -JOL9-&MQƻd ؟ßyҴcm vLX{u7Y,4{;y)_- 2GoZ-MfчvRO /+W̃Žy1X=¾a#_yY-"h5UrUݍ;{7&OLt`;0 XU.†8M4#+ؔstNQ%0d 6K[0OE0%X wo6X`G),®lmcX~Y,4{;"1-MfчvR]Rt굀yPR2/K`/^y/L`Vvl#,Z p>`4e *evz:%0GlDcP`g3. ~Tþ?0r2 iae+vB^a`xM¦$0s~'NaO+`m=Z#ȼ -&.l`뛚321 0oPD'gv~߰c\Sv )?v² - 0'ܼ}EJ`"f, 363GiRr'Zi( u'&69fW7/_eҲr -K+jj=;O,ml;` -$D9 ` 9 N`j߃Oش`|!{;J4D0M0Gg]Zd%-st^" *u l1m"RX&l+G-Mk;`!+bJs4`;=v.&1E{+LxȤ٦saAUia{7(-]z-`v+f { 2"fe6P~R2(FÝ:{ qUW|zY Lt`;9jk>0!԰ )l,z}Ss[G)ML̤0WwoPD'agXW{OM8eV!4? -f#, -XkGSE 0'ܼ}E%QX,af(M -[^ ;Ma9 ?l>`W`*+vx*.M ,ml;` -Q- .^` ;X,覢2Na]^>Uja-cTD0Ma: STYq|k!(/ƝAJN M%D%guD)]GL>9ݷmW{O=4I`k AiaI戰cze"W#xa S QD_Xjfv> {*EqXyM= aBix(ð4 ߀v֌-{ν̋.L{6oxmCQˣ,Eɣ]}|3Nʪ$Óab`^~Hŧ( lx ^}76+ Jƞv -$HW0we W0, a{']Xª`|ana`;vaAsKPR؃GcOĥ9̂6o%,JI$0<0\kqۥw lhlR0;̃bÄҔl laE,)]C`3`KZXbil;ŽX8n%g.ml74:¾g]6=C KYm 2`\ v'E `,ESX6 [jFVfe.'CUfbZfvAqEMCK[{Oa;]tw&$ҴuSv`562!&Y 3!(%,ӝ?Piaô?D JM~Qy60(3,|lw(‚v{X{`g? F`')KL&=)MaML)`N. &W4utF7'1]N.L`#Xon_戰c X">|x% KցNQ"\ {m_;XBj602fP {9`=m{?0R|\`7z.n(s"Sjav=y vq؆ GXRž<)&`y4UQ8&߰+/X z`x2 ƞv -ք~ - {O72=lZD؞}I`ia 0 l ,Hy`\-SB0mN8+MJ -fbfA``A -SX# M>{kqۥ lJ0;1, -, F-`a1KJWPΞQ=0S K(MzXE`% -Y`l;Žy^X1PiRXZVNAIEm N<˜\vKV1; ĴlkiE(8-5lbjNasr]P\Qv¾_: "0oϿ az°4m(KFFJl*oEiw!0R|\`7R{#+ -lE` aXzgl!(‚QUױ0R3R`6;n`W003_<քᱹ0<G0<iecd+,k+ 2=lZYl;0Ot>o/",9C[XZu†0$!3{;T8\kqۥ74*$`vbX,k#~6jaή XR*`>Hfja I`]aDx6EL%wy,_a<|cb,t0]i΁1n X(eTf81"kX`  XbZV6jZڻ0w\ -6150[9ha -LL.(n*a.'C&+Fƥ #Ž!,D}`,셴`4m(K` 쌷"4vk!0R|\`7Rj=ذLeܻ O`#l!(‚QU10(M.N -xxt2<``f0w/`y$ IMQÓ`PV6 L)²: g2=lZYl|"K85Xfvjb`s$g$H,9lDrFEQQQ8sݷo ٹӿsEX:ljN4`Fv` O-`k S]`*YMۀg`(O"H {SX)ʪ;z=0,MTҁYbU`O]r`s -X&gIi½L􍌡4v(dc ^0[{a&Q -\š®,r 0f{->! ڦ6lc޾ lYzf0S,`2r DgE[` vY#,a` RĂ.X@pD rFx2n*"u]`9%4 A0bƗ; 84O "}^[9~4ܣ ,9='{OK*.`<07 NO/Anߥ3:H`_ %2˺d`WXذ`  `Nn^$~$`ߪ4M,E0W#Ӳ]-% -1~%c'NaqCA&1!'0?YX˪9Ԭv*k0.x~,R#I*O*6^۽),sѓYei~2i,Ta+J}`.A$ ` 72DQ{sLE6:90,Mf`;/%K.Juy. L-)C"o,ڻ>س F` -?eV&fHIcQv'0$6avj -70sk#vRX0ne5`6vuw% `]621-= 2v`1!ƶ;JfbnK)(`} KuvaBiQ9{$$#)a#cȶSX>:6>MJs{)̬l?y`nON/)i5%lzbMA@`h`Ss|i(aV}f -"Ҳ)~߀&`䑩~ܼaInhc 4M,E0`cS/^)lA.FV0+;q`KJ+.oaD:0[DC;O`~(`C1~dÎ<07yxL<֩aiJ ffes`̟² ~߀潔`v¢Ӳ9c}2 `Nn^0VBacS$؆G 31dKJӀ"0,MuXA`C`daN,, -`YVуI1 e¸ WDaP"T .;zBVUf `0۽!`A@X;F'ii+]YbS3EUu \<}B#En Rv k!v(G'–?-c &l 쒣oPHd͔ʺ&= 7av ``ӌD͔ەMmWwSky -þ^ 캇O`H6-M2=V7bt#+XOߐfwVFnº<{pSG{vnA;bw,p+#vEm#l|Z(M!MGa4Mͭ(K)(ilE遇I_D9{$$f_=ci~4ܣ rulD݂maZ;g憰lkha$;H`__cE+n^0VЂ0(Y,M[ D0$9L[*,.)-+>dK \$|D7]`aiر' BXAiȁ1!PXU}F"\+ہg` 첓'Sk'0Z{d+d* %3sXPhTlbj]-dS}ütn s -MLTV5i .E1^ 327l#Ia!E&Mn<-fa$k)GX|L\0}#cd%K.#̟8iҚtnڴQĚz1⁊"(r,,}.܂ (+&Ny}wө,!L0)zȒ` a€-`ꥹr XDӃL`^hɾFΘ7X`[6%-ln"E 4F(0Wyӑx`o`K؊knQ`Q񞗦ւՅ=Fw**]m^`Go 0t*z 5dZW -ZTKF;HT`ux߿d9^EzCFɓOG E)ٙ6K|ltđ{ڶ[i(F!EniCZg h]\14*>b"BCl;x`F VZ2d*gA_kv$qjxG+5s~,Ճ-߷˒]Ȅ== IFS;cr,̵kV^jՃi,d#uᛝee`j(uƤ;s㧟l~/ (!5-Uaɐ˃2)!%]qc{:%E16* W,طE MCGi~l|Mmz;Eg )8czϱe0_={TD3 a 4~w1[%"l3ygz,4V狌5%sIedãΝV\(IdRR8WgŃ`o,V=x5kOMh9,QW!7&oޚ}ԭ[cÃXq۞ʻ{^ ,=d&-4L!#CI64~7o*!l$bՂ";ykqdd(22*nLLL򛘸1~\W.q`Mpbi!ϳM1L>(3]h{uȖ{%%ӲX]-$do>B~(kՒhMb;(E^[<0C,Ze#+W#;{AȆёkCW.lQ$yƊ)w[,O.?`^aZ2bf#krw;O!  r^}ݲa(WX1Ɣs -,:.x 44w ٕCCԡY1qa{}L= KfʢUU ] W_׹vwSCMȰ'cSܡItW?d=d̢x7:YFVT06~wXtA'q;twhR }~y|C\2#y%#;{vҥKpWq5UWp"$b;{ƞ^g,>8 IV߈=:{h򒂼LG,F$+#pg̿5{xL"o4%2 -άs==zzuwubЙC%b`T(Ic+qǂQK,ҋvAjd=ӡ54wtvuuhosh\E blu|EQK"{A00̓ō[w양aF$+6E%dغ#;p8ØdUTjjklhqUU --Ad<F"dǓDK$XSm4lTkJ%XWTdx̋1ˆMb`|ekdHfɂ:r4"Rn?5uFamtiE,"D HbJ| ZoS3{N_|:(X{;[,' -D,dVd[ZEq@l5QDh{''xNpXk"\8\D|ɓ(E;F*cGW3 =.h{1Po޼~uʯ.gEDC&NGM L5֬o2Y*=How+aI|.,."fNnb|PXkF2\Bm_CUXϯWf.\t[鈫.#e5Yƴb*nnekfzw.:|g7ibPd0el2$-5ǴlO^ȯ,g9QLQp`DnpC,4`[] uB!Tney)0Kq\c#C}ȁ]WS%,"2|25Do?1ɴٹ lYVrU\nP lqar0VX|8,#L: Ј6r4%lv((.WKĂ!O1‘2bp@XuDh=x`.d2,&'c2.|~|9~t|LpEi?O6L*O*5C) -k|ld՛@ j\"aQ2b̈́ mlju|C}ؒMNMM!Ӌ Rj// 9q®"seM\ǎ'϶Q'ӓd('X\ÖhG74RI3e$ E5lj;O.E70d(-2\}Z4h608844gh(zXw2.]``D߭:Ҧ1SڞH}@)U`Q\Z) ,&"e h D>=DOOT?~X^\\vc,"2YF#3QGC6{ڭOpVmK`"Xkfd \tvvv *f!͚K1m{L<=mQ -n9.`9e2 l[s tJfdE*e~ b,Li5%C4)giRyYqydS<ȟ`:6 yޣR -|2ImyjTѬ&mZ*ͪh\ѴMB@ d˪˕hcu9+fl\>CUaW@f,\i>׫l;c.E\ټC:,/-d "~KUdEJUmR]V'++5Sm%J͹D9$gΟb.b.b.bf`<E endstream endobj 149 0 obj <> endobj 114 0 obj <> endobj 138 0 obj [/ICCBased 123 0 R] endobj 110 0 obj <>stream -HtWˎ$5WW 4SXٕ= ̲˽3QOeTt8QO?ӻ[p|{ssp._kGi}<}}|rI &wp!pb{hH܌aRra?' (~W_}|Wmq 0l ;2'L>zS[~r,u1NbrɧQԫpN.Ï;ArG /׊q>w`GI&:]_؉0 G G,x(cK+ \}.+$}!w)qv`abPzNQ) -e>$m8xntM9P C jElxd](HcYYI*L.}'k~X7T0j;̰n}O{2`=geK1lǶa8 OF|e!Me|Z,7))ju[m(uf(w*y=3Qa,z iIm+ۘUQ|JLquްKr[*j-˕#5Tg;Q׼<М쉅H=1kWUyF[a!Wqf@f;?fw-g$ҿB,]D;쐴| O4!C#*R2D`拙IZY`b1Dj,}h#'Z!k ^BZ*oo>Ï=~dܯ؄DRq-FrJ,!XQMoY_4qh/ )c"'N/_wneF endstream endobj 111 0 obj <> endobj 151 0 obj [/ICCBased 123 0 R] endobj 105 0 obj <>stream -HtWn,5We@HH,X VÅ%H,O9shҧqΣ~ǫ3|{5əۛq6Wk1oϷg??o'c>sΔhn2`.%a3BS|L8V|^ڿ%['ҬK-l{j7\#fXךV6Kg30@Floy:,u(_!hc;'14:e.Om,Ͷ&((Ը[lD?J;{> ؉A÷W@2= 5cfp5"jB!ylv\!QDd3{LszLy.%y#h9f}#[籇acڢQdpm'#BZ%ωظlO5l- 6"}f\BYX@P"NisZl\ kBQdOd*U0d}"0"o -̟.x$ -J -0*TdLte[r=#A{8 (&x"&lh;} {5f [/EDS2Du Bb=LlNϗ12H|0͋V#Ϭ!PH~G  -&w /{S.4\&r\ZM/|&̒Kk2%7lr!r%&֧\ r%].r<†E`#]/^/+z^P`bLBS]>#Nl)A\Z!RL޺ -u]Q՗QrZȒ jk\cQ\!*" nK͂c3RDtT-,pS֕vg__/HgZ+0Y{jU.Q|uG)G?\f#UpU|(w-ވܢh\ ˛Qͫ%J{gSgHJJ5 )Hd*<}Et^7M <%Oʻ+`چⵓvL܋)) J3zIO >0jQa+:{X2X(nv -csx+5‰p ԑa 'I@Ccl=1! cP7 Q>div>͚FLΚ-::3GКtǼ0I -y-iQmͬۘU^B锬*<2 a$傷źi#UTg;Qr|ۿ@V -T;82+1 1O\mI+RI"UAvQIsI -DUU"FAtvj*reL F}Ad2ܺ4r^*$r|^֋ZH+Ep}rdƧ#M2 ).9٨A&@C[vs_d`?DwL&wsyʈ|[dx2V{\`- endstream endobj 106 0 obj <> endobj 12 0 obj <>stream -8;Yhs;6n(^#eZL2c!bX)Y4L)q6s5g%WF*u1SV`'%b9F61qnggjf>?='0Dn"8OC'F] -Ze]Hq-_<0T@[#Y25G_sin'="[ -hEl.mYZYrT4WVpPi*n&Q=AP7A@mtnHTCi+%!9\^QX8~> endstream endobj 13 0 obj [/Indexed/DeviceRGB 255 14 0 R] endobj 14 0 obj <>stream -8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 -b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` -E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn -6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( -l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 152 0 obj [/ICCBased 123 0 R] endobj 5 0 obj <> endobj 31 0 obj <> endobj 55 0 obj <> endobj 83 0 obj [/View/Design] endobj 84 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 15 0 obj [/View/Design] endobj 16 0 obj <>>> endobj 102 0 obj [101 0 R] endobj 153 0 obj <> endobj xref 0 154 0000000004 65535 f -0000000016 00000 n -0000000190 00000 n -0000046127 00000 n -0000000006 00000 f -0000800220 00000 n -0000000008 00000 f -0000046208 00000 n -0000000009 00000 f -0000000010 00000 f -0000000011 00000 f -0000000017 00000 f -0000798975 00000 n -0000799622 00000 n -0000799670 00000 n -0000800692 00000 n -0000800723 00000 n -0000000018 00000 f -0000000019 00000 f -0000000020 00000 f -0000000021 00000 f -0000000022 00000 f -0000000023 00000 f -0000000024 00000 f -0000000025 00000 f -0000000026 00000 f -0000000027 00000 f -0000000028 00000 f -0000000029 00000 f -0000000030 00000 f -0000000032 00000 f -0000800290 00000 n -0000000034 00000 f -0000046578 00000 n -0000000035 00000 f -0000000036 00000 f -0000000037 00000 f -0000000038 00000 f -0000000041 00000 f -0000800576 00000 n -0000800607 00000 n -0000000042 00000 f -0000000043 00000 f -0000000044 00000 f -0000000045 00000 f -0000000046 00000 f -0000000047 00000 f -0000000048 00000 f -0000000049 00000 f -0000000050 00000 f -0000000051 00000 f -0000000052 00000 f -0000000053 00000 f -0000000054 00000 f -0000000000 00000 f -0000800375 00000 n -0000000000 00000 f -0000046945 00000 n -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000800460 00000 n -0000800491 00000 n -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000049588 00000 n -0000800808 00000 n -0000047339 00000 n -0000047698 00000 n -0000797248 00000 n -0000798911 00000 n -0000052594 00000 n -0000049908 00000 n -0000049794 00000 n -0000795482 00000 n -0000797147 00000 n -0000707772 00000 n -0000709490 00000 n -0000795320 00000 n -0000709554 00000 n -0000706202 00000 n -0000707671 00000 n -0000048061 00000 n -0000049524 00000 n -0000706165 00000 n -0000049676 00000 n -0000049708 00000 n -0000049945 00000 n -0000052670 00000 n -0000053058 00000 n -0000054294 00000 n -0000065078 00000 n -0000130667 00000 n -0000181453 00000 n -0000247042 00000 n -0000312631 00000 n -0000378220 00000 n -0000443809 00000 n -0000509398 00000 n -0000574987 00000 n -0000640576 00000 n -0000707735 00000 n -0000795445 00000 n -0000709894 00000 n -0000732763 00000 n -0000763780 00000 n -0000709958 00000 n -0000732810 00000 n -0000763643 00000 n -0000763896 00000 n -0000763962 00000 n -0000763993 00000 n -0000764299 00000 n -0000795207 00000 n -0000764374 00000 n -0000797211 00000 n -0000800183 00000 n -0000800835 00000 n -trailer <<8C96E18997454E31A040AC4BB426E500>]>> startxref 801024 %%EOF \ No newline at end of file diff --git a/frostwire-jlibtorrent/logo/jlibtorrent_logo_color.png b/frostwire-jlibtorrent/logo/jlibtorrent_logo_color.png deleted file mode 100644 index b64efc0..0000000 Binary files a/frostwire-jlibtorrent/logo/jlibtorrent_logo_color.png and /dev/null differ diff --git a/frostwire-jlibtorrent/logo/jlibtorrent_logo_white.png b/frostwire-jlibtorrent/logo/jlibtorrent_logo_white.png deleted file mode 100644 index a7a323b..0000000 Binary files a/frostwire-jlibtorrent/logo/jlibtorrent_logo_white.png and /dev/null differ diff --git a/frostwire-jlibtorrent/logo/jlibtorrent_type_color.png b/frostwire-jlibtorrent/logo/jlibtorrent_type_color.png deleted file mode 100644 index 6a334fa..0000000 Binary files a/frostwire-jlibtorrent/logo/jlibtorrent_type_color.png and /dev/null differ diff --git a/frostwire-jlibtorrent/logo/jlibtorrent_type_white.png b/frostwire-jlibtorrent/logo/jlibtorrent_type_white.png deleted file mode 100644 index 3945876..0000000 Binary files a/frostwire-jlibtorrent/logo/jlibtorrent_type_white.png and /dev/null differ diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/AddTorrentParams.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/AddTorrentParams.java index a0b5b12..856c5b5 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/AddTorrentParams.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/AddTorrentParams.java @@ -56,42 +56,6 @@ public final class AddTorrentParams { this(add_torrent_params.create_instance()); } - /** - * @return an instance with the default storage - */ - public static AddTorrentParams createInstance() { - return new AddTorrentParams(add_torrent_params.create_instance()); - } - - /** - * @return an instance with a disabled storage - */ - public static AddTorrentParams createInstanceDisabledStorage() { - return new AddTorrentParams(add_torrent_params.create_instance_disabled_storage()); - } - - /** - * @return an instance with a zero storage - */ - public static AddTorrentParams createInstanceZeroStorage() { - return new AddTorrentParams(add_torrent_params.create_instance_zero_storage()); - } - - /** - * Helper function to parse a magnet uri and fill the parameters. - * - * @param uri the magnet uri - * @return the params object filled with the data from the magnet - */ - public static AddTorrentParams parseMagnetUri(String uri) { - error_code ec = new error_code(); - add_torrent_params params = add_torrent_params.parse_magnet_uri(uri, ec); - if (ec.value() != 0) { - throw new IllegalArgumentException("Invalid magnet uri: " + ec.message()); - } - return new AddTorrentParams(params); - } - /** * @return the native object */ @@ -539,4 +503,40 @@ public final class AddTorrentParams { p.set_banned_peers(v); } + + /** + * @return an instance with the default storage + */ + public static AddTorrentParams createInstance() { + return new AddTorrentParams(add_torrent_params.create_instance()); + } + + /** + * @return an instance with a disabled storage + */ + public static AddTorrentParams createInstanceDisabledStorage() { + return new AddTorrentParams(add_torrent_params.create_instance_disabled_storage()); + } + + /** + * @return an instance with a zero storage + */ + public static AddTorrentParams createInstanceZeroStorage() { + return new AddTorrentParams(add_torrent_params.create_instance_zero_storage()); + } + + /** + * Helper function to parse a magnet uri and fill the parameters. + * + * @param uri the magnet uri + * @return the params object filled with the data from the magnet + */ + public static AddTorrentParams parseMagnetUri(String uri) { + error_code ec = new error_code(); + add_torrent_params params = add_torrent_params.parse_magnet_uri(uri, ec); + if (ec.value() != 0) { + throw new IllegalArgumentException("Invalid magnet uri: " + ec.message()); + } + return new AddTorrentParams(params); + } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Address.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Address.java index 142b655..0a6a4c6 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Address.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Address.java @@ -39,15 +39,6 @@ public final class Address implements Comparable

, Cloneable { this(new address()); } - static String toString(address a) { - error_code ec = new error_code(); - String s = a.to_string(ec); - if (ec.value() != 0) { - s = ""; - } - return s; - } - /** * @return native object */ @@ -125,4 +116,13 @@ public final class Address implements Comparable
, Cloneable { public Address clone() { return new Address(new address(addr)); } + + static String toString(address a) { + error_code ec = new error_code(); + String s = a.to_string(ec); + if (ec.value() != 0) { + s = ""; + } + return s; + } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/AlertMulticaster.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/AlertMulticaster.java index bde48dd..5cba995 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/AlertMulticaster.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/AlertMulticaster.java @@ -16,6 +16,17 @@ final class AlertMulticaster implements AlertListener { this.b = b; } + @Override + public int[] types() { + return null; + } + + @Override + public void alert(Alert alert) { + a.alert(alert); + b.alert(alert); + } + public static AlertListener add(AlertListener a, AlertListener b) { return addInternal(a, b); } @@ -24,6 +35,17 @@ final class AlertMulticaster implements AlertListener { return removeInternal(l, oldl); } + private AlertListener remove(AlertListener oldl) { + if (oldl == a) return b; + if (oldl == b) return a; + AlertListener a2 = removeInternal(a, oldl); + AlertListener b2 = removeInternal(b, oldl); + if (a2 == a && b2 == b) { + return this; // it's not here + } + return addInternal(a2, b2); + } + private static AlertListener addInternal(AlertListener a, AlertListener b) { if (a == null) return b; if (b == null) return a; @@ -39,26 +61,4 @@ final class AlertMulticaster implements AlertListener { return l; // it's not here } } - - @Override - public int[] types() { - return null; - } - - @Override - public void alert(Alert alert) { - a.alert(alert); - b.alert(alert); - } - - private AlertListener remove(AlertListener oldl) { - if (oldl == a) return b; - if (oldl == b) return a; - AlertListener a2 = removeInternal(a, oldl); - AlertListener b2 = removeInternal(b, oldl); - if (a2 == a && b2 == b) { - return this; // it's not here - } - return addInternal(a2, b2); - } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/BDecodeNode.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/BDecodeNode.java index 27e48ad..376e11b 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/BDecodeNode.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/BDecodeNode.java @@ -31,19 +31,6 @@ public final class BDecodeNode { this.buffer = buffer; } - public static BDecodeNode bdecode(byte[] data) { - byte_vector buffer = Vectors.bytes2byte_vector(data); - bdecode_node n = new bdecode_node(); - error_code ec = new error_code(); - int ret = bdecode_node.bdecode(buffer, n, ec); - - if (ret == 0) { - return new BDecodeNode(n, buffer); - } else { - throw new IllegalArgumentException("Can't decode data: " + ec.message()); - } - } - /** * @return the native object */ @@ -73,4 +60,17 @@ public final class BDecodeNode { public String toString() { return bdecode_node.to_string(n, false, 2); } + + public static BDecodeNode bdecode(byte[] data) { + byte_vector buffer = Vectors.bytes2byte_vector(data); + bdecode_node n = new bdecode_node(); + error_code ec = new error_code(); + int ret = bdecode_node.bdecode(buffer, n, ec); + + if (ret == 0) { + return new BDecodeNode(n, buffer); + } else { + throw new IllegalArgumentException("Can't decode data: " + ec.message()); + } + } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/BlockInfo.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/BlockInfo.java index c9b346a..19b01af 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/BlockInfo.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/BlockInfo.java @@ -105,12 +105,19 @@ public final class BlockInfo { */ UNKNOWN(-1); - private final int swigValue; - BlockState(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + /** + * @return the native value + */ + public int swig() { + return swigValue; + } + /** * @param swigValue the native value * @return the state @@ -124,12 +131,5 @@ public final class BlockInfo { } return UNKNOWN; } - - /** - * @return the native value - */ - public int swig() { - return swigValue; - } } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Entry.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Entry.java index ffa28d6..9843cfe 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Entry.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Entry.java @@ -38,6 +38,35 @@ public final class Entry { this(new entry(n)); } + public entry swig() { + return e; + } + + public byte[] bencode() { + return Vectors.byte_vector2bytes(e.bencode()); + } + + public String string() { + return e.string(); + } + + public long integer() { + return e.integer(); + } + + public List list() { + return new EntryList(e.list()); + } + + public Map dictionary() { + return new EntryMap(e.dict()); + } + + @Override + public String toString() { + return e.to_string(); + } + public static Entry bdecode(byte[] data) { return new Entry(entry.bdecode(Vectors.bytes2byte_vector(data))); } @@ -99,35 +128,6 @@ public final class Entry { return new Entry(e); } - public entry swig() { - return e; - } - - public byte[] bencode() { - return Vectors.byte_vector2bytes(e.bencode()); - } - - public String string() { - return e.string(); - } - - public long integer() { - return e.integer(); - } - - public List list() { - return new EntryList(e.list()); - } - - public Map dictionary() { - return new EntryMap(e.dict()); - } - - @Override - public String toString() { - return e.to_string(); - } - private static final class EntryList extends AbstractList { private final entry_vector v; diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/EnumNet.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/EnumNet.java index 27a630c..2c955c0 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/EnumNet.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/EnumNet.java @@ -58,7 +58,7 @@ public final class EnumNet { } public static Address getGateway(SessionManager session, IpInterface ipInterface, ip_route_vector routes) { - return new Address(libtorrent.get_gateway(ipInterface.swig(), routes)); + return new Address(libtorrent.get_gateway(ipInterface.swig(), routes)); } public static final class IpInterface { diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/FileStorage.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/FileStorage.java index d1f66db..2267549 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/FileStorage.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/FileStorage.java @@ -20,29 +20,6 @@ import java.util.ArrayList; */ public final class FileStorage { - /** - * This file is a pad file. The creator of the - * torrent promises the file is entirely filled with - * zeroes and does not need to be downloaded. The - * purpose is just to align the next file to either - * a block or piece boundary. - */ - public static final file_flags_t FLAG_PAD_FILE = file_storage.flag_pad_file; - /** - * This file is hidden (sets the hidden attribute - * on windows). - */ - public static final file_flags_t FLAG_HIDDEN = file_storage.flag_hidden; - /** - * This file is executable (sets the executable bit - * on posix like systems). - */ - public static final file_flags_t FLAG_EXECUTABLE = file_storage.flag_executable; - /** - * This file is a symlink. The symlink target is - * specified in a separate field - */ - public static final file_flags_t FLAG_SYMLINK = file_storage.flag_symlink; private final file_storage fs; private final torrent_info ti; @@ -64,17 +41,6 @@ public final class FileStorage { this.ti = ti; } - static ArrayList mapBlock(file_slice_vector v) { - int size = (int) v.size(); - - ArrayList l = new ArrayList<>(size); - for (int i = 0; i < size; i++) { - l.add(new FileSlice(v.get(i))); - } - - return l; - } - /** * @return the native object */ @@ -436,6 +402,33 @@ public final class FileStorage { return l; } + /** + * This file is a pad file. The creator of the + * torrent promises the file is entirely filled with + * zeroes and does not need to be downloaded. The + * purpose is just to align the next file to either + * a block or piece boundary. + */ + public static final file_flags_t FLAG_PAD_FILE = file_storage.flag_pad_file; + + /** + * This file is hidden (sets the hidden attribute + * on windows). + */ + public static final file_flags_t FLAG_HIDDEN = file_storage.flag_hidden; + + /** + * This file is executable (sets the executable bit + * on posix like systems). + */ + public static final file_flags_t FLAG_EXECUTABLE = file_storage.flag_executable; + + /** + * This file is a symlink. The symlink target is + * specified in a separate field + */ + public static final file_flags_t FLAG_SYMLINK = file_storage.flag_symlink; + /** * Returns a bitmask of flags from {@link file_flags_t} that apply * to file at {@code index}. @@ -468,4 +461,15 @@ public final class FileStorage { public int fileIndexAtOffset(long offset) { return fs.file_index_at_offset(offset); } + + static ArrayList mapBlock(file_slice_vector v) { + int size = (int) v.size(); + + ArrayList l = new ArrayList<>(size); + for (int i = 0; i < size; i++) { + l.add(new FileSlice(v.get(i))); + } + + return l; + } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Files.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Files.java index 1bb5e0b..526f170 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Files.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Files.java @@ -26,11 +26,11 @@ import java.io.InputStream; final class Files { - private static final int EOF = -1; - private Files() { } + private static final int EOF = -1; + /** * Reads the contents of a file into a byte array. * The file is always closed. diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Hex.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Hex.java index c139e57..631b820 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Hex.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Hex.java @@ -22,15 +22,15 @@ package com.frostwire.jlibtorrent; */ final class Hex { + private Hex() { + } + /** * Used to build output as Hex */ private static final char[] DIGITS_LOWER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; - private Hex() { - } - /** * Converts an array of characters representing hexadecimal values into an array of bytes of those same values. The * returned array will be half the length of the passed array, as it takes two characters to represent any given @@ -66,7 +66,8 @@ final class Hex { * The returned array will be double the length of the passed array, as it takes two characters to represent any * given byte. * - * @param data a byte[] to convert to Hex characters + * @param data + * a byte[] to convert to Hex characters * @return A char[] containing hexadecimal characters */ public static String encode(final byte[] data) { @@ -78,8 +79,10 @@ final class Hex { * The returned array will be double the length of the passed array, as it takes two characters to represent any * given byte. * - * @param data a byte[] to convert to Hex characters - * @param toDigits the output alphabet + * @param data + * a byte[] to convert to Hex characters + * @param toDigits + * the output alphabet * @return A char[] containing hexadecimal characters * @since 1.4 */ @@ -97,8 +100,10 @@ final class Hex { /** * Converts a hexadecimal character to an integer. * - * @param ch A character to convert to an integer digit - * @param index The index of the character in the source + * @param ch + * A character to convert to an integer digit + * @param index + * The index of the character in the source * @return An integer */ private static int toDigit(final char ch, final int index) { diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/MoveFlags.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/MoveFlags.java index f461254..b1c4e9d 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/MoveFlags.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/MoveFlags.java @@ -34,12 +34,19 @@ public enum MoveFlags { */ DONT_REPLACE(move_flags_t.dont_replace); - private final move_flags_t swigValue; - MoveFlags(move_flags_t swigValue) { this.swigValue = swigValue; } + private final move_flags_t swigValue; + + /** + * @return the native value + */ + public move_flags_t swig() { + return swigValue; + } + /** * @param swigValue the native value */ @@ -52,11 +59,4 @@ public enum MoveFlags { } throw new IllegalArgumentException("Enum value not supported"); } - - /** - * @return the native value - */ - public move_flags_t swig() { - return swigValue; - } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Operation.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Operation.java index 1d9d2bb..3fc0a54 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Operation.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Operation.java @@ -209,12 +209,27 @@ public enum Operation { */ HOSTNAME_LOOKUP(operation_t.hostname_lookup.swigValue()); - private final int swigValue; - Operation(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + /** + * @return the native value. + */ + public int swig() { + return swigValue; + } + + public String nativeName() { + try { + return libtorrent.operation_name(operation_t.swigToEnum(swigValue)); + } catch (Throwable e) { + return "invalid enum value"; + } + } + /** * @param swigValue the native value * @return the swig enum. @@ -236,19 +251,4 @@ public enum Operation { public static Operation fromSwig(operation_t swigValue) { return fromSwig(swigValue.swigValue()); } - - /** - * @return the native value. - */ - public int swig() { - return swigValue; - } - - public String nativeName() { - try { - return libtorrent.operation_name(operation_t.swigToEnum(swigValue)); - } catch (Throwable e) { - return "invalid enum value"; - } - } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Pair.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Pair.java index 6b56fc8..9274919 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Pair.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Pair.java @@ -11,15 +11,6 @@ import com.frostwire.jlibtorrent.swig.string_string_pair; */ public final class Pair { - /** - * the first element - */ - public final T1 first; - /** - * the second element - */ - public final T2 second; - /** * @param first first element * @param second second element @@ -29,6 +20,16 @@ public final class Pair { this.second = second; } + /** + * the first element + */ + public final T1 first; + + /** + * the second element + */ + public final T2 second; + /** * @return a native object */ diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/PeerInfo.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/PeerInfo.java index 3f9b064..592edaa 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/PeerInfo.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/PeerInfo.java @@ -188,12 +188,19 @@ public class PeerInfo { */ UNKNOWN(-1); - private final int swigValue; - ConnectionType(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + /** + * @return the native value + */ + public int swig() { + return swigValue; + } + /** * @param swigValue the swig value * @return the enum value @@ -207,12 +214,5 @@ public class PeerInfo { } return UNKNOWN; } - - /** - * @return the native value - */ - public int swig() { - return swigValue; - } } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/PortmapProtocol.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/PortmapProtocol.java index 5856c38..e66e0c0 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/PortmapProtocol.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/PortmapProtocol.java @@ -14,12 +14,16 @@ public enum PortmapProtocol { UDP(portmap_protocol.udp.swigValue()); - private final int swigValue; - PortmapProtocol(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + public int swig() { + return swigValue; + } + public static PortmapProtocol fromSwig(int swigValue) { PortmapProtocol[] enumValues = PortmapProtocol.class.getEnumConstants(); for (PortmapProtocol ev : enumValues) { @@ -29,8 +33,4 @@ public enum PortmapProtocol { } throw new IllegalArgumentException("No enum " + PortmapProtocol.class + " with value " + swigValue); } - - public int swig() { - return swigValue; - } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/PortmapTransport.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/PortmapTransport.java index 5904ddc..346176d 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/PortmapTransport.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/PortmapTransport.java @@ -12,12 +12,16 @@ public enum PortmapTransport { UPNP(portmap_transport.upnp.swigValue()); - private final int swigValue; - PortmapTransport(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + public int swig() { + return swigValue; + } + public static PortmapTransport fromSwig(int swigValue) { PortmapTransport[] enumValues = PortmapTransport.class.getEnumConstants(); for (PortmapTransport ev : enumValues) { @@ -27,8 +31,4 @@ public enum PortmapTransport { } throw new IllegalArgumentException("No enum " + PortmapTransport.class + " with value " + swigValue); } - - public int swig() { - return swigValue; - } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Priority.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Priority.java index 809122d..afebd20 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Priority.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Priority.java @@ -52,12 +52,19 @@ public enum Priority { */ SEVEN(7); - private final int swigValue; - Priority(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + /** + * @return the native value + */ + public int swig() { + return swigValue; + } + /** * @param swigValue the native value * @return the enum corresponding value @@ -103,11 +110,4 @@ public enum Priority { return v; } - - /** - * @return the native value - */ - public int swig() { - return swigValue; - } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/SessionHandle.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/SessionHandle.java index 4b49156..d352de7 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/SessionHandle.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/SessionHandle.java @@ -37,43 +37,8 @@ import java.util.List; */ public class SessionHandle { - /** - * When set, the session will start paused. Call SessionHandle::resume() to start - */ - public static final session_flags_t PAUSED = session_handle.paused; - /** - * Saves settings (i.e. the {@link SettingsPack}). - */ - public static final save_state_flags_t SAVE_SETTINGS = session_handle.save_settings; - /** - * Saves {@link DhtSettings}. - */ - public static final save_state_flags_t SAVE_DHT_SETTINGS = session_handle.save_dht_settings; - /** - * Saves dht state such as nodes and node-id, possibly accelerating - * joining the DHT if provided at next session startup. - */ - public static final save_state_flags_t SAVE_DHT_STATE = session_handle.save_dht_state; - /** - * Delete the files belonging to the torrent from disk, - * including the part-file, if there is one. - */ - public static final remove_flags_t DELETE_FILES = session_handle.delete_files; - /** - * Delete just the part-file associated with this torrent. - */ - public static final remove_flags_t DELETE_PARTFILE = session_handle.delete_partfile; - /** - * This option indicates if the ports are mapped using natpmp - * and UPnP. If mapping was already made, they are deleted and added - * again. This only works if natpmp and/or upnp are configured to be - * enable. - */ - public static final reopen_network_flags_t REOPEN_MAP_PORTS = session_handle.reopen_map_ports; - public static final int DHT_ANNOUNCE_SEED = 1; - public static final int DHT_ANNOUNCE_IMPLIED_PORT = 1 << 1; - public static final int DHT_ANNOUNCE_SSL_TORRENT = 1 << 2; private static final Logger LOG = Logger.getLogger(SessionHandle.class); + protected final session_handle s; /** @@ -94,6 +59,27 @@ public class SessionHandle { return s.is_valid(); } + /** + * When set, the session will start paused. Call SessionHandle::resume() to start + */ + public static final session_flags_t PAUSED = session_handle.paused; + + /** + * Saves settings (i.e. the {@link SettingsPack}). + */ + public static final save_state_flags_t SAVE_SETTINGS = session_handle.save_settings; + + /** + * Saves {@link DhtSettings}. + */ + public static final save_state_flags_t SAVE_DHT_SETTINGS = session_handle.save_dht_settings; + + /** + * Saves dht state such as nodes and node-id, possibly accelerating + * joining the DHT if provided at next session startup. + */ + public static final save_state_flags_t SAVE_DHT_STATE = session_handle.save_dht_state; + /** * Loads and saves all session settings, including dht settings, * encryption settings and proxy settings. This method @@ -288,6 +274,17 @@ public class SessionHandle { s.async_add_torrent(params.swig()); } + /** + * Delete the files belonging to the torrent from disk, + * including the part-file, if there is one. + */ + public static final remove_flags_t DELETE_FILES = session_handle.delete_files; + + /** + * Delete just the part-file associated with this torrent. + */ + public static final remove_flags_t DELETE_PARTFILE = session_handle.delete_partfile; + /** * This method will close all peer connections associated with the torrent and tell the * tracker that we've stopped participating in the swarm. This operation cannot fail. @@ -307,6 +304,17 @@ public class SessionHandle { } } + /** + * This option indicates if the ports are mapped using natpmp + * and UPnP. If mapping was already made, they are deleted and added + * again. This only works if natpmp and/or upnp are configured to be + * enable. + */ + public static final reopen_network_flags_t REOPEN_MAP_PORTS = session_handle.reopen_map_ports; + public static final int DHT_ANNOUNCE_SEED = 1; + public static final int DHT_ANNOUNCE_IMPLIED_PORT = 1 << 1; + public static final int DHT_ANNOUNCE_SSL_TORRENT = 1 << 2; + // starts/stops UPnP, NATPMP or LSD port mappers they are stopped by // default These functions are not available in case // ``TORRENT_DISABLE_DHT`` is defined. ``start_dht`` starts the dht node @@ -346,42 +354,6 @@ public class SessionHandle { // and false // otherwise. - /** - * This method will close all peer connections associated with the torrent and tell the - * tracker that we've stopped participating in the swarm. This operation cannot fail. - * When it completes, you will receive a torrent_removed_alert. - * - * @param th - */ - public void removeTorrent(TorrentHandle th) { - if (th.isValid()) { - s.remove_torrent(th.swig()); - } - } - - /** - * Pausing the session has the same effect as pausing every torrent in - * it, except that torrents will not be resumed by the auto-manage - * mechanism. - */ - public void pause() { - s.pause(); - } - - /** - * Resuming will restore the torrents to their previous paused - * state. i.e. the session pause state is separate from the torrent pause - * state. A torrent is inactive if it is paused or if the session is - * paused. - */ - public void resume() { - s.resume(); - } - - public boolean isPaused() { - return s.is_paused(); - } - void setDhtSettings(DhtSettings settings) { s.set_dht_settings(settings.swig()); } @@ -447,6 +419,19 @@ public class SessionHandle { s.delete_port_mapping(handle); } + /** + * This method will close all peer connections associated with the torrent and tell the + * tracker that we've stopped participating in the swarm. This operation cannot fail. + * When it completes, you will receive a torrent_removed_alert. + * + * @param th + */ + public void removeTorrent(TorrentHandle th) { + if (th.isValid()) { + s.remove_torrent(th.swig()); + } + } + /** * Instructs the session to reopen all listen and outgoing sockets. *

@@ -562,6 +547,29 @@ public class SessionHandle { s.dht_get_peers(infoHash.swig()); } + /** + * Pausing the session has the same effect as pausing every torrent in + * it, except that torrents will not be resumed by the auto-manage + * mechanism. + */ + public void pause() { + s.pause(); + } + + /** + * Resuming will restore the torrents to their previous paused + * state. i.e. the session pause state is separate from the torrent pause + * state. A torrent is inactive if it is paused or if the session is + * paused. + */ + public void resume() { + s.resume(); + } + + public boolean isPaused() { + return s.is_paused(); + } + /** * @param infoHash * @param port diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/SessionManager.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/SessionManager.java index 2e1d11d..b4d70ae 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/SessionManager.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/SessionManager.java @@ -73,11 +73,13 @@ public class SessionManager { private final ReentrantLock sync; private final ReentrantLock syncMagnet; - private final SessionStats stats; + private final Map listenEndpoints; - private volatile session session; + + private final SessionStats stats; private long lastStatsRequestTime; private boolean firewalled; + private volatile session session; private String externalAddress; private int externalPort; private Thread alertsLoop; @@ -103,40 +105,6 @@ public class SessionManager { this(false); } - private static alert_category_t alertMask(boolean logging) { - alert_category_t mask = alert.all_categories; - if (!logging) { - alert_category_t log_mask = alert.session_log_notification; - log_mask = log_mask.or_(alert.torrent_log_notification); - log_mask = log_mask.or_(alert.peer_log_notification); - log_mask = log_mask.or_(alert.dht_log_notification); - log_mask = log_mask.or_(alert.port_mapping_log_notification); - log_mask = log_mask.or_(alert.picker_log_notification); - - mask = mask.and_(log_mask.inv()); - } - return mask; - } - - private static String dhtBootstrapNodes() { - StringBuilder sb = new StringBuilder(); - - sb.append("dht.libtorrent.org:25401").append(","); - sb.append("router.bittorrent.com:6881").append(","); - sb.append("router.utorrent.com:6881").append(","); - sb.append("dht.transmissionbt.com:6881").append(","); - // for DHT IPv6 - sb.append("router.silotis.us:6881"); - - return sb.toString(); - } - - private static boolean isSpecialType(int type) { - return type == AlertType.SESSION_STATS.swig() || - type == AlertType.STATE_UPDATE.swig() || - type == AlertType.SESSION_STATS_HEADER.swig(); - } - public session swig() { return session; } @@ -158,49 +126,19 @@ public class SessionManager { start(params, null); } - /** - * @param params - * @param flags You can pass a flag like SessionHandle.PAUSED to start the session paused. - */ - public void start(SessionParams params, session_flags_t flags) { - if (session != null) { - return; - } - - sync.lock(); - - try { - if (session != null) { - return; - } - - onBeforeStart(); - - resetState(); - - params.settings().setInteger(settings_pack.int_types.alert_mask.swigValue(), alertMask(logging).to_int()); - sessionParams = params; - - if (flags == null) { - session = new session(params.swig()); - } else { - session = new session(params.swig(), flags); - } - alertsLoop(); - - // block all connections to port < 1024, but - // allows 80 and 443 for web seeds - port_filter f = new port_filter(); - f.add_rule(0, 79, 1); - f.add_rule(81, 442, 1); - f.add_rule(444, 1023, 1); - session.set_port_filter(f); - - onAfterStart(); - - } finally { - sync.unlock(); + private static alert_category_t alertMask(boolean logging) { + alert_category_t mask = alert.all_categories; + if (!logging) { + alert_category_t log_mask = alert.session_log_notification; + log_mask = log_mask.or_(alert.torrent_log_notification); + log_mask = log_mask.or_(alert.peer_log_notification); + log_mask = log_mask.or_(alert.dht_log_notification); + log_mask = log_mask.or_(alert.port_mapping_log_notification); + log_mask = log_mask.or_(alert.picker_log_notification); + + mask = mask.and_(log_mask.inv()); } + return mask; } public void start() { @@ -323,10 +261,6 @@ public class SessionManager { return stats.dhtNodes(); } - //-------------------------------------------------- - // Settings methods - //-------------------------------------------------- - public boolean isFirewalled() { return firewalled; } @@ -339,6 +273,10 @@ public class SessionManager { return new ArrayList<>(listenEndpoints.values()); } + //-------------------------------------------------- + // Settings methods + //-------------------------------------------------- + /** * Returns a setting pack with all the settings * the current session is working with. @@ -441,10 +379,6 @@ public class SessionManager { return settings().maxPeerlistSize(); } - //-------------------------------------------------- - // more methods - //-------------------------------------------------- - public void maxPeers(int limit) { if (session == null) { return; @@ -466,6 +400,10 @@ public class SessionManager { applySettings(new SettingsPack().listenInterfaces(value)); } + //-------------------------------------------------- + // more methods + //-------------------------------------------------- + /** * This function will post a {@link SessionStatsAlert} object, containing a * snapshot of the performance counters from the internals of libtorrent. @@ -1197,6 +1135,70 @@ public class SessionManager { return name != null && name.contains(FETCH_MAGNET_DOWNLOAD_KEY); } + private static String dhtBootstrapNodes() { + StringBuilder sb = new StringBuilder(); + + sb.append("dht.libtorrent.org:25401").append(","); + sb.append("router.bittorrent.com:6881").append(","); + sb.append("router.utorrent.com:6881").append(","); + sb.append("dht.transmissionbt.com:6881").append(","); + // for DHT IPv6 + sb.append("router.silotis.us:6881"); + + return sb.toString(); + } + + private static boolean isSpecialType(int type) { + return type == AlertType.SESSION_STATS.swig() || + type == AlertType.STATE_UPDATE.swig() || + type == AlertType.SESSION_STATS_HEADER.swig(); + } + + /** + * @param params + * @param flags You can pass a flag like SessionHandle.PAUSED to start the session paused. + */ + public void start(SessionParams params, session_flags_t flags) { + if (session != null) { + return; + } + + sync.lock(); + + try { + if (session != null) { + return; + } + + onBeforeStart(); + + resetState(); + + params.settings().setInteger(settings_pack.int_types.alert_mask.swigValue(), alertMask(logging).to_int()); + sessionParams = params; + + if (flags == null) { + session = new session(params.swig()); + } else { + session = new session(params.swig(), flags); + } + alertsLoop(); + + // block all connections to port < 1024, but + // allows 80 and 443 for web seeds + port_filter f = new port_filter(); + f.add_rule(0, 79, 1); + f.add_rule(81, 442, 1); + f.add_rule(444, 1023, 1); + session.set_port_filter(f); + + onAfterStart(); + + } finally { + sync.unlock(); + } + } + private void alertsLoop() { Runnable r = new Runnable() { @Override @@ -1286,14 +1288,14 @@ public class SessionManager { public static final class MutableItem { - public final Entry item; - public final byte[] signature; - public final long seq; - private MutableItem(Entry item, byte[] signature, long seq) { this.item = item; this.signature = signature; this.seq = seq; } + + public final Entry item; + public final byte[] signature; + public final long seq; } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Sha1Hash.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Sha1Hash.java index 5cb36cb..6c69dc8 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Sha1Hash.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/Sha1Hash.java @@ -52,39 +52,6 @@ public final class Sha1Hash implements Comparable, Cloneable { this(new sha1_hash()); } - /** - * returns an all-F sha1-hash. i.e. the maximum value - * representable by a 160 bit number (20 bytes). This is - * a static member function. - * - * @return the maximum number - */ - public static Sha1Hash max() { - return new Sha1Hash(sha1_hash.max()); - } - - /** - * returns an all-zero sha1-hash. i.e. the minimum value - * representable by a 160 bit number (20 bytes). This is - * a static member function. - * - * @return the minimum number (zero) - */ - public static Sha1Hash min() { - return new Sha1Hash(sha1_hash.min()); - } - - static ArrayList convert(sha1_hash_vector v) { - int size = (int) v.size(); - ArrayList l = new ArrayList<>(size); - - for (int i = 0; i < size; i++) { - l.add(new Sha1Hash(v.get(i))); - } - - return l; - } - /** * @return the native object */ @@ -171,4 +138,37 @@ public final class Sha1Hash implements Comparable, Cloneable { public Sha1Hash clone() { return new Sha1Hash(new sha1_hash(h)); } + + /** + * returns an all-F sha1-hash. i.e. the maximum value + * representable by a 160 bit number (20 bytes). This is + * a static member function. + * + * @return the maximum number + */ + public static Sha1Hash max() { + return new Sha1Hash(sha1_hash.max()); + } + + /** + * returns an all-zero sha1-hash. i.e. the minimum value + * representable by a 160 bit number (20 bytes). This is + * a static member function. + * + * @return the minimum number (zero) + */ + public static Sha1Hash min() { + return new Sha1Hash(sha1_hash.min()); + } + + static ArrayList convert(sha1_hash_vector v) { + int size = (int) v.size(); + ArrayList l = new ArrayList<>(size); + + for (int i = 0; i < size; i++) { + l.add(new Sha1Hash(v.get(i))); + } + + return l; + } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/StatsMetric.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/StatsMetric.java index 811faf0..7b46bec 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/StatsMetric.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/StatsMetric.java @@ -30,9 +30,6 @@ public final class StatsMetric { public static final int TYPE_COUNTER = metric_type_t.counter.swigValue(); public static final int TYPE_GAUGE = metric_type_t.gauge.swigValue(); - public final String name; - public final int valueIndex; - public final int type; StatsMetric(stats_metric sm) { this.name = sm.get_name(); @@ -40,6 +37,12 @@ public final class StatsMetric { this.type = sm.getType().swigValue(); } + public final String name; + + public final int valueIndex; + + public final int type; + @Override public String toString() { return name + ":" + valueIndex + ":" + typeStr(); diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/StorageMode.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/StorageMode.java index 685eddd..7f9e541 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/StorageMode.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/StorageMode.java @@ -28,12 +28,19 @@ public enum StorageMode { */ UNKNOWN(-1); - private final int swigValue; - StorageMode(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + /** + * @return the native value + */ + public int swig() { + return swigValue; + } + /** * @param swigValue the native value * @return the java enum @@ -47,11 +54,4 @@ public enum StorageMode { } return UNKNOWN; } - - /** - * @return the native value - */ - public int swig() { - return swigValue; - } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentBuilder.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentBuilder.java index 095da14..b45a1e8 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentBuilder.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentBuilder.java @@ -22,6 +22,14 @@ import static com.frostwire.jlibtorrent.swig.libtorrent.set_piece_hashes_ex; */ public final class TorrentBuilder { + private File path; + private int pieceSize; + private int padFileLimit; + private create_flags_t flags; + private int alignment; + + private String comment; + private String creator; /** * This will insert pad files to align the files to piece boundaries, for * optimized disk-I/O. This will minimize the number of bytes of pad- @@ -55,6 +63,7 @@ public final class TorrentBuilder { * symlinks. */ public static final create_flags_t SYMLINKS = create_torrent.symlinks; + private boolean priv; /** * To create a torrent that can be updated via a *mutable torrent* * (see BEP38_). This also needs to be enabled for torrents that update @@ -64,19 +73,7 @@ public final class TorrentBuilder { */ public static final create_flags_t MUTABLE_TORRENT_SUPPORT = create_torrent.mutable_torrent_support; private final List urlSeeds; - private final List httpSeeds; - private final List> nodes; - private final List> trackers; - private final List similarTorrents; - private final List collections; - private File path; - private int pieceSize; - private int padFileLimit; - private create_flags_t flags; - private int alignment; - private String comment; - private String creator; - private boolean priv; + private Listener listener; public TorrentBuilder() { @@ -586,6 +583,12 @@ public final class TorrentBuilder { return new Result(t); } + private final List httpSeeds; + private final List> nodes; + private final List> trackers; + private final List similarTorrents; + private final List collections; + /** * */ diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentFlags.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentFlags.java index 898eeee..5639a41 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentFlags.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentFlags.java @@ -9,6 +9,11 @@ import com.frostwire.jlibtorrent.swig.torrent_flags_t; */ public final class TorrentFlags { + /** + * Set this flag to disable peer exchange for this torrent. + */ + public static final torrent_flags_t DISABLE_PEX = libtorrent.getDisable_pex(); + // If ``seed_mode`` is set, libtorrent will assume that all files // are present for this torrent and that they all match the hashes in // the torrent file. Each time a peer requests to download a block, @@ -25,6 +30,7 @@ public final class TorrentFlags { // If resume data is passed in with this torrent, the seed mode saved // in there will override the seed mode you set here. public static final torrent_flags_t SEED_MODE = libtorrent.getSeed_mode(); + // If ``upload_mode`` is set, the torrent will be initialized in // upload-mode, which means it will not make any piece requests. This // state is typically entered on disk I/O errors, and if the torrent @@ -40,6 +46,7 @@ public final class TorrentFlags { // got there. If it's important to manually control when the torrent // leaves upload mode, don't make it auto managed. public static final torrent_flags_t UPLOAD_MODE = libtorrent.getUpload_mode(); + // determines if the torrent should be added in *share mode* or not. // Share mode indicates that we are not interested in downloading the // torrent, but merely want to improve our share ratio (i.e. increase @@ -59,18 +66,21 @@ public final class TorrentFlags { // The share mode has one setting, the share ratio target, see // ``settings_pack::share_mode_target`` for more info. public static final torrent_flags_t SHARE_MODE = libtorrent.getShare_mode(); + // determines if the IP filter should apply to this torrent or not. By // default all torrents are subject to filtering by the IP filter // (i.e. this flag is set by default). This is useful if certain // torrents needs to be exempt for some reason, being an auto-update // torrent for instance. public static final torrent_flags_t APPLY_IP_FILTER = libtorrent.getApply_ip_filter(); + // specifies whether or not the torrent is to be started in a paused // state. I.e. it won't connect to the tracker or any of the peers // until it's resumed. This is typically a good way of avoiding race // conditions when setting configuration options on torrents before // starting them. public static final torrent_flags_t PAUSED = libtorrent.getPaused(); + // If the torrent is auto-managed (``auto_managed``), the torrent // may be resumed at any point, regardless of how it paused. If it's // important to manually control when the torrent is paused and @@ -88,18 +98,22 @@ public final class TorrentFlags { // ``override_resume_data``. public static final torrent_flags_t AUTO_MANAGED = libtorrent.getAuto_managed(); public static final torrent_flags_t DUPLICATE_IS_ERROR = libtorrent.getDuplicate_is_error(); + // on by default and means that this torrent will be part of state // updates when calling post_torrent_updates(). public static final torrent_flags_t UPDATE_SUBSCRIBE = libtorrent.getUpdate_subscribe(); + // sets the torrent into super seeding mode. If the torrent is not a // seed, this flag has no effect. It has the same effect as calling // ``torrent_handle::super_seeding(true)`` on the torrent handle // immediately after adding it. public static final torrent_flags_t SUPER_SEEDING = libtorrent.getSuper_seeding(); + // sets the sequential download state for the torrent. It has the same // effect as calling ``torrent_handle::sequential_download(true)`` on // the torrent handle immediately after adding it. public static final torrent_flags_t SEQUENTIAL_DOWNLOAD = libtorrent.getSequential_download(); + // When this flag is set, the // torrent will *force stop* whenever it transitions from a // non-data-transferring state into a data-transferring state (referred to @@ -130,16 +144,19 @@ public final class TorrentFlags { // will most likely start in between posting the alert and receiving the // call to pause. public static final torrent_flags_t STOP_WHEN_READY = libtorrent.getStop_when_ready(); + // when this flag is set, the tracker list in the add_torrent_params // object override any trackers from the torrent file. If the flag is // not set, the trackers from the add_torrent_params object will be // added to the list of trackers used by the torrent. public static final torrent_flags_t OVERRIDE_TRACKERS = libtorrent.getOverride_trackers(); + // If this flag is set, the web seeds from the add_torrent_params // object will override any web seeds in the torrent file. If it's not // set, web seeds in the add_torrent_params object will be added to the // list of web seeds used by the torrent. public static final torrent_flags_t OVERRIDE_WEB_SEEDS = libtorrent.getOverride_web_seeds(); + /** * If this flag is set (which it is by default) the torrent will be * considered needing to save its resume data immediately as it's @@ -147,6 +164,7 @@ public final class TorrentFlags { * This flag is cleared by a successful call to save_resume_data() */ public static final torrent_flags_t NEED_SAVE_RESUME = libtorrent.getNeed_save_resume(); + /** * Set this flag to disable DHT for this torrent. This lets you have the DHT * enabled for the whole client, and still have specific torrents not @@ -154,16 +172,14 @@ public final class TorrentFlags { * from it. */ public static final torrent_flags_t DISABLE_DHT = libtorrent.getDisable_dht(); + /** * Set this flag to disable local service discovery for this torrent. */ public static final torrent_flags_t DISABLE_LSD = libtorrent.getDisable_lsd(); - /** - * Set this flag to disable peer exchange for this torrent. - */ - public static final torrent_flags_t DISABLE_PEX = libtorrent.getDisable_pex(); - public static final torrent_flags_t ALL = libtorrent.getAll(); private TorrentFlags() { } + + public static final torrent_flags_t ALL = libtorrent.getAll(); } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentHandle.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentHandle.java index 16c3072..baa9542 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentHandle.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentHandle.java @@ -53,84 +53,12 @@ import java.util.List; */ public final class TorrentHandle { - /** - * Instruct libtorrent to overwrite any data that may already have been - * downloaded with the data of the new piece being added. - */ - public static final add_piece_flags_t OVERWRITE_EXISTING = torrent_handle.overwrite_existing; - /** - * calculates ``distributed_copies``, ``distributed_full_copies`` and - * ``distributed_fraction``. - */ - public static final status_flags_t QUERY_DISTRIBUTED_COPIES = torrent_handle.query_distributed_copies; - /** - * includes partial downloaded blocks in ``total_done`` and - * ``total_wanted_done``. - */ - public static final status_flags_t QUERY_ACCURATE_DOWNLOAD_COUNTERS = torrent_handle.query_accurate_download_counters; - /** - * includes ``last_seen_complete``. - */ - public static final status_flags_t QUERY_LAST_SEEN_COMPLETE = torrent_handle.query_last_seen_complete; - /** - * includes ``pieces``. - */ - public static final status_flags_t QUERY_PIECES = torrent_handle.query_pieces; - /** - * includes ``verified_pieces`` (only applies to torrents in *seed mode*). - */ - public static final status_flags_t QUERY_VERIFIED_PIECES = torrent_handle.query_verified_pieces; - /** - * includes ``torrent_file``, which is all the static information from the .torrent file. - */ - public static final status_flags_t QUERY_TORRENT_FILE = torrent_handle.query_torrent_file; - /** - * includes {@code name}, the name of the torrent. This is either derived - * from the .torrent file, or from the {@code &dn=} magnet link argument - * or possibly some other source. If the name of the torrent is not - * known, this is an empty string. - */ - public static final status_flags_t QUERY_NAME = torrent_handle.query_name; - /** - * includes ``save_path``, the path to the directory the files of the - * torrent are saved to. - */ - public static final status_flags_t QUERY_SAVE_PATH = torrent_handle.query_save_path; - /** - * The disk cache will be flushed before creating the resume data. - * This avoids a problem with file timestamps in the resume data in - * case the cache hasn't been flushed yet. - */ - public static final resume_data_flags_t FLUSH_DISK_CACHE = torrent_handle.flush_disk_cache; - /** - * The resume data will contain the metadata from the torrent file as - * well. This is default for any torrent that's added without a - * torrent file (such as a magnet link or a URL). - */ - public static final resume_data_flags_t SAVE_INFO_DICT = torrent_handle.save_info_dict; - /** - * If nothing significant has changed in the torrent since the last - * time resume data was saved, fail this attempt. Significant changes - * primarily include more data having been downloaded, file or piece - * priorities having changed etc. If the resume data doesn't need - * saving, a save_resume_data_failed_alert is posted with the error - * resume_data_not_modified. - */ - public static final resume_data_flags_t ONLY_IF_MODIFIED = torrent_handle.only_if_modified; - /** - * By default, force-reannounce will still honor the min-interval - * published by the tracker. If this flag is set, it will be ignored - * and the tracker is announced immediately. - */ - public static final reannounce_flags_t IGNORE_MIN_INTERVAL = torrent_handle.ignore_min_interval; - /** - * - */ - public static final deadline_flags_t ALERT_WHEN_AVAILABLE = torrent_handle.alert_when_available; private static final long REQUEST_STATUS_RESOLUTION_MILLIS = 500; // cache this zero flag for performance reasons private static final status_flags_t STATUS_FLAGS_ZERO = new status_flags_t(); + private final torrent_handle th; + private long lastStatusRequestTime; private TorrentStatus lastStatus; @@ -145,6 +73,12 @@ public final class TorrentHandle { return th; } + /** + * Instruct libtorrent to overwrite any data that may already have been + * downloaded with the data of the new piece being added. + */ + public static final add_piece_flags_t OVERWRITE_EXISTING = torrent_handle.overwrite_existing; + /** * This function will write {@code data} to the storage as piece {@code piece}, * as if it had been downloaded from a peer. {@code data} is expected to @@ -302,6 +236,52 @@ public final class TorrentHandle { return status(false); } + /** + * calculates ``distributed_copies``, ``distributed_full_copies`` and + * ``distributed_fraction``. + */ + public static final status_flags_t QUERY_DISTRIBUTED_COPIES = torrent_handle.query_distributed_copies; + + /** + * includes partial downloaded blocks in ``total_done`` and + * ``total_wanted_done``. + */ + public static final status_flags_t QUERY_ACCURATE_DOWNLOAD_COUNTERS = torrent_handle.query_accurate_download_counters; + + /** + * includes ``last_seen_complete``. + */ + public static final status_flags_t QUERY_LAST_SEEN_COMPLETE = torrent_handle.query_last_seen_complete; + + /** + * includes ``pieces``. + */ + public static final status_flags_t QUERY_PIECES = torrent_handle.query_pieces; + + /** + * includes ``verified_pieces`` (only applies to torrents in *seed mode*). + */ + public static final status_flags_t QUERY_VERIFIED_PIECES = torrent_handle.query_verified_pieces; + + /** + * includes ``torrent_file``, which is all the static information from the .torrent file. + */ + public static final status_flags_t QUERY_TORRENT_FILE = torrent_handle.query_torrent_file; + + /** + * includes {@code name}, the name of the torrent. This is either derived + * from the .torrent file, or from the {@code &dn=} magnet link argument + * or possibly some other source. If the name of the torrent is not + * known, this is an empty string. + */ + public static final status_flags_t QUERY_NAME = torrent_handle.query_name; + + /** + * includes ``save_path``, the path to the directory the files of the + * torrent are saved to. + */ + public static final status_flags_t QUERY_SAVE_PATH = torrent_handle.query_save_path; + /** * This method returns an up to date torrent status, the {@code flags} parameters * is an or-combination of the {@link status_flags_t} native values, in case you want @@ -349,7 +329,6 @@ public final class TorrentHandle { /** * Note that this is a blocking function, unlike torrent_handle::is_valid() which returns immediately. - * * @return Returns true if the torrent is in the session. It returns true before SessionHandle::removeTorrent() is called, and false afterward. */ public boolean inSession() { @@ -593,6 +572,30 @@ public final class TorrentHandle { th.set_ssl_certificate_buffer2(cert, pk, dh); } + /** + * The disk cache will be flushed before creating the resume data. + * This avoids a problem with file timestamps in the resume data in + * case the cache hasn't been flushed yet. + */ + public static final resume_data_flags_t FLUSH_DISK_CACHE = torrent_handle.flush_disk_cache; + + /** + * The resume data will contain the metadata from the torrent file as + * well. This is default for any torrent that's added without a + * torrent file (such as a magnet link or a URL). + */ + public static final resume_data_flags_t SAVE_INFO_DICT = torrent_handle.save_info_dict; + + /** + * If nothing significant has changed in the torrent since the last + * time resume data was saved, fail this attempt. Significant changes + * primarily include more data having been downloaded, file or piece + * priorities having changed etc. If the resume data doesn't need + * saving, a save_resume_data_failed_alert is posted with the error + * resume_data_not_modified. + */ + public static final resume_data_flags_t ONLY_IF_MODIFIED = torrent_handle.only_if_modified; + /** * ``save_resume_data()`` generates fast-resume data and returns it as an * entry. This entry is suitable for being bencoded. For more information @@ -836,6 +839,13 @@ public final class TorrentHandle { th.force_recheck(); } + /** + * By default, force-reannounce will still honor the min-interval + * published by the tracker. If this flag is set, it will be ignored + * and the tracker is announced immediately. + */ + public static final reannounce_flags_t IGNORE_MIN_INTERVAL = torrent_handle.ignore_min_interval; + // ``force_reannounce()`` will force this torrent to do another tracker // request, to receive new peers. The ``seconds`` argument specifies how // many seconds from now to issue the tracker announces. @@ -1189,6 +1199,11 @@ public final class TorrentHandle { th.set_piece_deadline(index, deadline); } + /** + * + */ + public static final deadline_flags_t ALERT_WHEN_AVAILABLE = torrent_handle.alert_when_available; + /** * This function sets or resets the deadline associated with a specific * piece index (``index``). libtorrent will attempt to download this @@ -1367,12 +1382,12 @@ public final class TorrentHandle { */ PIECE_GRANULARITY(torrent_handle.file_progress_flags_t.piece_granularity.swigValue()); - private final int swigValue; - FileProgressFlags(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + /** * @return the native value */ diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentInfo.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentInfo.java index e497146..d404e1d 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentInfo.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentInfo.java @@ -75,50 +75,6 @@ public final class TorrentInfo { } } - public static TorrentInfo bdecode(byte[] data) { - return new TorrentInfo(bdecode0(data)); - } - - // helper function - static ArrayList trackers(announce_entry_vector v) { - int size = (int) v.size(); - ArrayList l = new ArrayList<>(size); - - for (int i = 0; i < size; i++) { - l.add(new AnnounceEntry(v.get(i))); - } - - return l; - } - - private static torrent_info bdecode0(File file) { - try { - byte[] data = Files.bytes(file); - return bdecode0(data); - } catch (IOException e) { - throw new IllegalArgumentException("Can't decode data from file: " + file, e); - } - } - - private static torrent_info bdecode0(byte[] data) { - byte_vector buffer = Vectors.bytes2byte_vector(data); - bdecode_node n = new bdecode_node(); - error_code ec = new error_code(); - int ret = bdecode_node.bdecode(buffer, n, ec); - - if (ret == 0) { - ec.clear(); - torrent_info ti = new torrent_info(n, ec); - buffer.clear(); // prevents GC - if (ec.value() != 0) { - throw new IllegalArgumentException("Can't decode data: " + ec.message()); - } - return ti; - } else { - throw new IllegalArgumentException("Can't decode data: " + ec.message()); - } - } - /** * @return the native object */ @@ -706,4 +662,48 @@ public final class TorrentInfo { public byte[] bencode() { return toEntry().bencode(); } + + public static TorrentInfo bdecode(byte[] data) { + return new TorrentInfo(bdecode0(data)); + } + + // helper function + static ArrayList trackers(announce_entry_vector v) { + int size = (int) v.size(); + ArrayList l = new ArrayList<>(size); + + for (int i = 0; i < size; i++) { + l.add(new AnnounceEntry(v.get(i))); + } + + return l; + } + + private static torrent_info bdecode0(File file) { + try { + byte[] data = Files.bytes(file); + return bdecode0(data); + } catch (IOException e) { + throw new IllegalArgumentException("Can't decode data from file: " + file, e); + } + } + + private static torrent_info bdecode0(byte[] data) { + byte_vector buffer = Vectors.bytes2byte_vector(data); + bdecode_node n = new bdecode_node(); + error_code ec = new error_code(); + int ret = bdecode_node.bdecode(buffer, n, ec); + + if (ret == 0) { + ec.clear(); + torrent_info ti = new torrent_info(n, ec); + buffer.clear(); // prevents GC + if (ec.value() != 0) { + throw new IllegalArgumentException("Can't decode data: " + ec.message()); + } + return ti; + } else { + throw new IllegalArgumentException("Can't decode data: " + ec.message()); + } + } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentStatus.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentStatus.java index 677b7e2..9773dd6 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentStatus.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/TorrentStatus.java @@ -24,10 +24,6 @@ public final class TorrentStatus implements Cloneable { this.ts = ts; } - private static long time2millis(long time) { - return time * 1000; - } - /** * @return the native object */ @@ -150,22 +146,8 @@ public final class TorrentStatus implements Cloneable { return ts.getTotal_redundant_bytes(); } - /** - * IMPORTANT: If you are not getting up to date information about pieces - * remember that PieceIndexBitfield data is considered augmented data - * for a torrentHandle.status() call, meaning, if you want to get the latest - * piece data, you must use the TorrentHandle.QUERY_PIECES flag when invoking - * torrentHandle.status(TorrentHandle.QUERY_PIECES). Keep in mind this is - * an expensive call, therefore not part of the default flags. - *

- * A bitmask that represents which pieces we have (set to true) and the - * pieces we don't have. It's a pointer and may be set to 0 if the - * torrent isn't downloading or seeding. - * - * @return the bitfield of pieces - */ - public PieceIndexBitfield pieces() { - return new PieceIndexBitfield(ts.getPieces(), ts); + private static long time2millis(long time) { + return time * 1000; } /** @@ -699,6 +681,24 @@ public final class TorrentStatus implements Cloneable { return new TorrentStatus(new torrent_status(ts)); } + /** + * IMPORTANT: If you are not getting up to date information about pieces + * remember that PieceIndexBitfield data is considered augmented data + * for a torrentHandle.status() call, meaning, if you want to get the latest + * piece data, you must use the TorrentHandle.QUERY_PIECES flag when invoking + * torrentHandle.status(TorrentHandle.QUERY_PIECES). Keep in mind this is + * an expensive call, therefore not part of the default flags. + *

+ * A bitmask that represents which pieces we have (set to true) and the + * pieces we don't have. It's a pointer and may be set to 0 if the + * torrent isn't downloading or seeding. + * + * @return the bitfield of pieces + */ + public PieceIndexBitfield pieces() { + return new PieceIndexBitfield(ts.getPieces(), ts); + } + /** * the different overall states a torrent can be in. */ @@ -750,12 +750,19 @@ public final class TorrentStatus implements Cloneable { */ UNKNOWN(-1); - private final int swigValue; - State(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + /** + * @return the native value + */ + public int swig() { + return swigValue; + } + /** * @param swigValue * @return @@ -769,12 +776,5 @@ public final class TorrentStatus implements Cloneable { } return UNKNOWN; } - - /** - * @return the native value - */ - public int swig() { - return swigValue; - } } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/WebSeedEntry.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/WebSeedEntry.java index 6750c57..13887e4 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/WebSeedEntry.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/WebSeedEntry.java @@ -96,12 +96,19 @@ public final class WebSeedEntry { */ UNKNOWN(-1); - private final int swigValue; - Type(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + /** + * @return + */ + public int swig() { + return swigValue; + } + /** * @param swigValue * @return @@ -115,12 +122,5 @@ public final class WebSeedEntry { } return UNKNOWN; } - - /** - * @return - */ - public int swig() { - return swigValue; - } } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/Alert.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/Alert.java index e04e771..5b0daf8 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/Alert.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/Alert.java @@ -9,6 +9,8 @@ import com.frostwire.jlibtorrent.swig.alert_category_t; */ public interface Alert { + T swig(); + alert_category_t ERROR_NOTIFICATION = alert.error_notification; alert_category_t PEER_NOTIFICATION = alert.peer_notification; alert_category_t PORT_MAPPING_NOTIFICATION = alert.port_mapping_notification; @@ -34,8 +36,6 @@ public interface Alert { alert_category_t BLOCK_PROGRESS_NOTIFICATION = alert.block_progress_notification; alert_category_t ALL_CATEGORIES = alert.all_categories; - T swig(); - /** * A timestamp is automatically created in the constructor (in milliseconds). * diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/AlertType.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/AlertType.java index 86e938d..98e62d3 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/AlertType.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/AlertType.java @@ -186,12 +186,20 @@ public enum AlertType { UNKNOWN(-1); private static final AlertType[] TABLE = buildTable(); - private final int swigValue; AlertType(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + /** + * @return the native swig value + */ + public int swig() { + return swigValue; + } + /** * @param swigValue the native swig value * @return the API enum alert type @@ -302,11 +310,4 @@ public enum AlertType { arr[96] = SOCKS5_ALERT; return arr; } - - /** - * @return the native swig value - */ - public int swig() { - return swigValue; - } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/CloseReason.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/CloseReason.java index 97bbda8..b0b2d6c 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/CloseReason.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/CloseReason.java @@ -273,12 +273,19 @@ public enum CloseReason { */ UNKNOWN(-1); - private final int swigValue; - CloseReason(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + /** + * @return the native value + */ + public int swig() { + return swigValue; + } + /** * Converted method, it's public in order to be used in other * internal packages. @@ -295,11 +302,4 @@ public enum CloseReason { } return UNKNOWN; } - - /** - * @return the native value - */ - public int swig() { - return swigValue; - } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/DhtLogAlert.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/DhtLogAlert.java index ecf4753..3d11689 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/DhtLogAlert.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/DhtLogAlert.java @@ -42,12 +42,19 @@ public final class DhtLogAlert extends AbstractAlert { TRAVERSAL(dht_log_alert.dht_module_t.traversal.swigValue()), UNKNOWN(-1); - private final int swigValue; - DhtModule(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + /** + * @return the native value + */ + public int swig() { + return swigValue; + } + /** * @param swigValue the native value * @return the java enum @@ -61,12 +68,5 @@ public final class DhtLogAlert extends AbstractAlert { } return UNKNOWN; } - - /** - * @return the native value - */ - public int swig() { - return swigValue; - } } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/DhtPktAlert.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/DhtPktAlert.java index 09b62cd..bfd8c49 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/DhtPktAlert.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/DhtPktAlert.java @@ -69,12 +69,19 @@ public final class DhtPktAlert extends AbstractAlert { */ UNKNOWN(-1); - private final int swigValue; - Direction(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + /** + * @return the native value + */ + public int swig() { + return swigValue; + } + /** * @param swigValue the native value * @return the java enum @@ -88,12 +95,5 @@ public final class DhtPktAlert extends AbstractAlert { } return UNKNOWN; } - - /** - * @return the native value - */ - public int swig() { - return swigValue; - } } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/IncomingConnectionAlert.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/IncomingConnectionAlert.java index 1244280..7832d2b 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/IncomingConnectionAlert.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/IncomingConnectionAlert.java @@ -98,12 +98,19 @@ public final class IncomingConnectionAlert extends AbstractAlert @@ -177,4 +151,30 @@ public final class MetadataReceivedAlert extends TorrentAlert { */ UNKNOWN(-1); - private final int swigValue; - Reason(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + /** + * @return + */ + public int swig() { + return swigValue; + } + /** * @param swigValue * @return @@ -94,12 +101,5 @@ public final class PeerBlockedAlert extends TorrentAlert { } return UNKNOWN; } - - /** - * @return - */ - public int swig() { - return swigValue; - } } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/PeerLogAlert.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/PeerLogAlert.java index feac985..548ccf7 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/PeerLogAlert.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/PeerLogAlert.java @@ -78,12 +78,19 @@ public final class PeerLogAlert extends PeerAlert { */ UNKNOWN(-1); - private final int swigValue; - Direction(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + /** + * @return the native value + */ + public int swig() { + return swigValue; + } + /** * @param swigValue * @return @@ -97,12 +104,5 @@ public final class PeerLogAlert extends PeerAlert { } return UNKNOWN; } - - /** - * @return the native value - */ - public int swig() { - return swigValue; - } } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/PerformanceAlert.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/PerformanceAlert.java index 609c092..83a2003 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/PerformanceAlert.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/PerformanceAlert.java @@ -97,12 +97,16 @@ public final class PerformanceAlert extends TorrentAlert { UNKNOWN(-1); - private final int swigValue; - PerformanceWarning(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + public int getSwig() { + return swigValue; + } + public static PerformanceWarning fromSwig(int swigValue) { PerformanceWarning[] enumValues = PerformanceWarning.class.getEnumConstants(); for (PerformanceWarning ev : enumValues) { @@ -112,9 +116,5 @@ public final class PerformanceAlert extends TorrentAlert { } return UNKNOWN; } - - public int getSwig() { - return swigValue; - } } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/PickerLogAlert.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/PickerLogAlert.java index 6f306f8..c8a963d 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/PickerLogAlert.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/PickerLogAlert.java @@ -13,6 +13,10 @@ import com.frostwire.jlibtorrent.swig.picker_log_alert; */ public final class PickerLogAlert extends PeerAlert { + PickerLogAlert(picker_log_alert alert) { + super(alert); + } + public static final picker_flags_t PARTIAL_RATIO = picker_log_alert.partial_ratio; public static final picker_flags_t PRIORITIZE_PARTIALS = picker_log_alert.prioritize_partials; public static final picker_flags_t RAREST_FIRST_PARTIALS = picker_log_alert.rarest_first_partials; @@ -31,10 +35,6 @@ public final class PickerLogAlert extends PeerAlert { public static final picker_flags_t END_GAME = picker_log_alert.end_game; public static final picker_flags_t EXTENT_AFFINITY = picker_log_alert.extent_affinity; - PickerLogAlert(picker_log_alert alert) { - super(alert); - } - /** * This is a bitmask of which features were enabled for this particular * pick. The bits are defined in the picker_flags_t enum. diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/SocketType.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/SocketType.java index b5b5cc5..fd8cda2 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/SocketType.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/SocketType.java @@ -42,12 +42,19 @@ public enum SocketType { */ UNKNOWN(-1); - private final int swigValue; - SocketType(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + + /** + * @return the native value + */ + public int swig() { + return swigValue; + } + /** * @param swigValue the native value * @return the enum value @@ -61,11 +68,4 @@ public enum SocketType { } return UNKNOWN; } - - /** - * @return the native value - */ - public int swig() { - return swigValue; - } } diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/StatsAlert.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/StatsAlert.java index 0c52567..70ac524 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/StatsAlert.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/StatsAlert.java @@ -75,12 +75,12 @@ public final class StatsAlert extends TorrentAlert { */ NUM_CHANNELS(stats_alert.stats_channel.num_channels.swigValue()); - private final int swigValue; - StatsChannel(int swigValue) { this.swigValue = swigValue; } + private final int swigValue; + /** * @return */ diff --git a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/TrackerAnnounceAlert.java b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/TrackerAnnounceAlert.java index b501bd0..a120a63 100644 --- a/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/TrackerAnnounceAlert.java +++ b/frostwire-jlibtorrent/src/main/java/com/frostwire/jlibtorrent/alerts/TrackerAnnounceAlert.java @@ -38,12 +38,16 @@ public final class TrackerAnnounceAlert extends TrackerAlert 0); - - entry e = entry.bdecode(Vectors.bytes2byte_vector(torrentBytes)); - string_entry_map m = e.dict(); - if (m.has_key("announce")) { - m.erase("announce"); - } - if (m.has_key("announce-list")) { - m.erase("announce-list"); - } - - ti = TorrentInfo.bdecode(Vectors.byte_vector2bytes(e.bencode())); - // did we remove all trackers - assertEquals(ti.trackers().size(), 0); - - create_torrent c = new create_torrent(ti.swig()); - - c.add_tracker("http://a:6969/announce", 0); - c.add_tracker("http://b:6969/announce", 1); - - e = c.generate(); - ti = TorrentInfo.bdecode(Vectors.byte_vector2bytes(e.bencode())); - ArrayList trackers = ti.trackers(); - // do we have exactly the two added trackers - assertEquals(trackers.size(), 2); - assertEquals(trackers.get(0).url(), "http://a:6969/announce"); - assertEquals(trackers.get(1).url(), "http://b:6969/announce"); - } - - @Test - public void testChangeTrackersLowLevel() throws IOException { - byte[] torrentBytes = Utils.resourceBytes("test4.torrent"); - TorrentInfo ti = TorrentInfo.bdecode(torrentBytes); - - // do we have any tracker - assertTrue(ti.trackers().size() > 0); - - entry e = entry.bdecode(Vectors.bytes2byte_vector(torrentBytes)); - string_entry_map m = e.dict(); - - // remove trackers - if (m.has_key("announce")) { - m.erase("announce"); - } - if (m.has_key("announce-list")) { - m.erase("announce-list"); - } - - // add trackers - String[] tks = new String[]{"http://a:6969/announce", "http://b:6969/announce"}; - entry_vector l = new entry_vector(); - l.push_back(new entry(tks[0])); - m.set("announce", new entry(l)); - - entry_vector tl = new entry_vector(); - for (int i = 0; i < tks.length; i++) { - l.clear(); - l.push_back(new entry(tks[i])); - tl.push_back(new entry(l)); - } - m.set("announce-list", new entry(tl)); - - ti = TorrentInfo.bdecode(Vectors.byte_vector2bytes(e.bencode())); - ArrayList trackers = ti.trackers(); - // do we have exactly the two added trackers - assertEquals(trackers.size(), 2); - assertEquals(trackers.get(0).url(), "http://a:6969/announce"); - assertEquals(trackers.get(1).url(), "http://b:6969/announce"); - } - - @Test - public void testChangeTrackersWithTorrentInfo() throws IOException { - byte[] torrentBytes = Utils.resourceBytes("test4.torrent"); - TorrentInfo ti = TorrentInfo.bdecode(torrentBytes); - - // do we have any tracker - assertTrue(ti.trackers().size() > 0); - - ti.clearTrackers(); - - // did we remove all trackers - assertEquals(ti.trackers().size(), 0); - - ti.addTracker("http://a:6969/announce", 0); - ti.addTracker("http://b:6969/announce", 1); - - ArrayList trackers = ti.trackers(); - // do we have exactly the two added trackers - assertEquals(trackers.size(), 2); - assertEquals(trackers.get(0).url(), "http://a:6969/announce"); - assertEquals(trackers.get(1).url(), "http://b:6969/announce"); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/CreateTorrentTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/CreateTorrentTest.java deleted file mode 100644 index 17f84c2..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/CreateTorrentTest.java +++ /dev/null @@ -1,213 +0,0 @@ -package com.frostwire.jlibtorrent; - -import com.frostwire.jlibtorrent.swig.add_files_listener; -import com.frostwire.jlibtorrent.swig.byte_vector; -import com.frostwire.jlibtorrent.swig.create_flags_t; -import com.frostwire.jlibtorrent.swig.create_torrent; -import com.frostwire.jlibtorrent.swig.entry; -import com.frostwire.jlibtorrent.swig.error_code; -import com.frostwire.jlibtorrent.swig.file_storage; -import com.frostwire.jlibtorrent.swig.set_piece_hashes_listener; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.concurrent.atomic.AtomicBoolean; - -import static com.frostwire.jlibtorrent.swig.libtorrent.add_files_ex; -import static com.frostwire.jlibtorrent.swig.libtorrent.set_piece_hashes_ex; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * @author gubatron - * @author aldenml - */ -public class CreateTorrentTest { - - @Rule - public TemporaryFolder folder = new TemporaryFolder(); - - @Test - public void testFromFile() throws IOException { - final File f = folder.newFile("test.txt"); - Utils.writeByteArrayToFile(f, new byte[]{0}, false); - - file_storage fs = new file_storage(); - add_files_listener l1 = new add_files_listener() { - @Override - public boolean pred(String p) { - assertEquals(f.getAbsolutePath(), p); - return true; - } - }; - add_files_ex(fs, f.getAbsolutePath(), l1, new create_flags_t()); - create_torrent ct = new create_torrent(fs); - set_piece_hashes_listener l2 = new set_piece_hashes_listener() { - @Override - public void progress(int i) { - assertTrue(i >= 0); - } - }; - error_code ec = new error_code(); - set_piece_hashes_ex(ct, f.getParent(), l2, ec); - assertEquals(ec.value(), 0); - entry e = ct.generate(); - byte_vector buffer = e.bencode(); - TorrentInfo ti = TorrentInfo.bdecode(Vectors.byte_vector2bytes(buffer)); - assertEquals(1, ti.numFiles()); - } - - @Test - public void testFromDir() throws IOException { - File dir = folder.newFolder(); - File f1 = new File(dir, "test.txt"); - Utils.writeByteArrayToFile(f1, new byte[]{0}, false); - File f2 = new File(dir, "test1.txt"); - Utils.writeByteArrayToFile(f2, new byte[]{0}, false); - - file_storage fs = new file_storage(); - add_files_listener l1 = new add_files_listener() { - @Override - public boolean pred(String p) { - return true; - } - }; - add_files_ex(fs, dir.getAbsolutePath(), l1, new create_flags_t()); - create_torrent ct = new create_torrent(fs); - set_piece_hashes_listener l2 = new set_piece_hashes_listener() { - @Override - public void progress(int i) { - assertTrue(i >= 0); - } - }; - error_code ec = new error_code(); - set_piece_hashes_ex(ct, dir.getParent(), l2, ec); - assertEquals(ec.value(), 0); - entry e = ct.generate(); - byte_vector buffer = e.bencode(); - TorrentInfo ti = TorrentInfo.bdecode(Vectors.byte_vector2bytes(buffer)); - assertEquals(2, ti.numFiles()); - } - - @Test - public void testUsingBuilder() throws IOException { - File dir = folder.newFolder(); - File f1 = new File(dir, "test.txt"); - Utils.writeByteArrayToFile(f1, new byte[]{0}, false); - File f2 = new File(dir, "test1.txt"); - Utils.writeByteArrayToFile(f2, new byte[]{0}, false); - - TorrentBuilder b = new TorrentBuilder(); - TorrentBuilder.Result r = b.path(dir) - .comment("comment") - .creator("creator") - .addUrlSeed("http://urlseed/") - .addHttpSeed("http://httpseed/") - .addNode(new Pair<>("1.1.1.1", 1)) - .addTracker("udp://tracker/") - .setPrivate(true) - .addSimilarTorrent(Sha1Hash.min()) - .addCollection("collection") - .generate(); - - TorrentInfo ti = TorrentInfo.bdecode(r.entry().bencode()); - assertEquals("comment", ti.comment()); - assertEquals("creator", ti.creator()); - - ArrayList seeds = ti.webSeeds(); - for (WebSeedEntry e : seeds) { - if (e.type() == WebSeedEntry.Type.URL_SEED) { - assertEquals("http://urlseed/", e.url()); - } - if (e.type() == WebSeedEntry.Type.HTTP_SEED) { - assertEquals("http://httpseed/", e.url()); - } - } - - assertEquals("1.1.1.1", ti.nodes().get(0).first); - assertEquals("udp://tracker/", ti.trackers().get(0).url()); - assertEquals(true, ti.isPrivate()); - assertTrue(ti.similarTorrents().get(0).isAllZeros()); - assertEquals("collection", ti.collections().get(0)); - assertEquals(2, ti.numFiles()); - } - - @Test - public void testBuilderListener() throws IOException { - File dir = folder.newFolder(); - File f1 = new File(dir, "test.txt"); - Utils.writeByteArrayToFile(f1, new byte[]{0, 0}, false); - File f2 = new File(dir, "test1.txt"); - Utils.writeByteArrayToFile(f2, new byte[]{0, 0}, false); - - final AtomicBoolean b1 = new AtomicBoolean(); - final AtomicBoolean b2 = new AtomicBoolean(); - - TorrentBuilder b = new TorrentBuilder(); - TorrentBuilder.Result r = b.path(dir) - .listener(new TorrentBuilder.Listener() { - @Override - public boolean accept(String filename) { - b1.set(true); - return true; - } - - @Override - public void progress(int piece, int total) { - b2.set(true); - } - }) - .generate(); - - TorrentInfo ti = TorrentInfo.bdecode(r.entry().bencode()); - assertEquals(2, ti.numFiles()); - assertTrue(b1.get()); - assertTrue(b2.get()); - } - - /* - @Test - public void testBuilderMerkle() throws IOException { - File dir = folder.newFolder(); - File f1 = new File(dir, "test.txt"); - Utils.writeByteArrayToFile(f1, new byte[]{0, 0, 0}, false); - File f2 = new File(dir, "test1.txt"); - Utils.writeByteArrayToFile(f2, new byte[]{0, 0, 0}, false); - - TorrentBuilder b = new TorrentBuilder(); - TorrentBuilder.Result r = b.path(dir) - .flags(b.flags() | TorrentBuilder.Flags.MERKLE.swig()) - .generate(); - - TorrentInfo ti = TorrentInfo.bdecode(r.entry().bencode()); - assertEquals(2, ti.numFiles()); - - ArrayList tree = r.merkleTree(); - assertTrue(tree.size() >= 0); - ti.merkleTree(tree); - assertEquals(tree.get(0), ti.merkleTree().get(0)); - }*/ - - /* - @Test - public void testMerkleFlag() throws IOException { - TorrentBuilder b = new TorrentBuilder(); - - assertFalse(b.merkle()); - b.merkle(false); - assertFalse(b.merkle()); - b.merkle(true); - assertTrue(b.merkle()); - b.merkle(true); - assertTrue(b.merkle()); - b.merkle(false); - assertFalse(b.merkle()); - b.merkle(false); - assertFalse(b.merkle()); - }*/ -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/EntryTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/EntryTest.java deleted file mode 100644 index 0fc0562..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/EntryTest.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.frostwire.jlibtorrent; - -import com.frostwire.jlibtorrent.swig.entry; -import com.frostwire.jlibtorrent.swig.string_entry_map; -import com.frostwire.jlibtorrent.swig.string_vector; - -import org.junit.Test; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -/** - * @author gubatron - * @author aldenml - */ -public class EntryTest { - - @Test - public void testSimpleCreation() { - Map m = new HashMap<>(); - - m.put("a", 1); - m.put("b", "b"); - m.put("c", new Entry("es")); - - Entry e = Entry.fromMap(m); - - List l = new ArrayList(); - - l.add("l1"); - l.add("l2"); - - m.put("m", e); - m.put("l", l); - - e = Entry.fromMap(m); - assertNotNull(e); - - string_entry_map dict = e.swig().dict(); - string_vector keys = dict.keys(); - for (int i = 0; i < keys.size(); i++) { - String k = keys.get(i); - assertNotNull(dict.get(k).to_string()); - } - } - - @Test - public void testCreation1() { - //old school using libtorrent's (tedious if i may say) entry api - final entry url_list = new entry(); - url_list.list().push_back(new entry("http://server1.com")); - url_list.list().push_back(new entry("http://server2.com")); - final entry swig_entry = new entry(); - swig_entry.dict().set("url-list", url_list); - final Entry e = new Entry(swig_entry); - final String oldSchoolBencodedMapString = new String(e.bencode()); - - //now using Java's collection API - final List urlList = new ArrayList(); - urlList.add("http://server1.com"); - urlList.add("http://server2.com"); - final Map urlListMap = new HashMap(); - urlListMap.put("url-list", urlList); - final String javaAPIBencodedMapString = new String(Entry.fromMap(urlListMap).bencode()); - - final String expectedBencodedList = "d8:url-listl18:http://server1.com18:http://server2.comee"; - assertEquals(expectedBencodedList, oldSchoolBencodedMapString); - assertEquals(expectedBencodedList, javaAPIBencodedMapString); - - final Map torrentMap = new HashMap(); - torrentMap.put("Comment", new entry("Torrent created with FrostWire")); - - final Map ccMap = new HashMap(); - ccMap.put("attributionAuthor", new entry("FrostWire LLC")); - ccMap.put("attributionTitle", new entry("FrostWire 5.7.7")); - ccMap.put("attributionUrl", "http://www.frostwire.com"); //on purpose not an entry - ccMap.put("licenseUrl", new entry("https://www.gnu.org/licenses/gpl.html")); - - final Map openSourceMap = new HashMap(); - //works both with an entry object created out of a Map, or straight up with the Map. - //openSourceMap.put("open-source", Entry.fromMap(ccMap).getSwig()); - openSourceMap.put("open-source", ccMap); - - final Map licenseMap = new HashMap(); - licenseMap.put("license", Entry.fromMap(openSourceMap).swig()); - - final String expectedLicenseBencoded = "d7:licensed11:open-sourced17:attributionAuthor13:FrostWire LLC16:attributionTitle15:FrostWire 5.7.714:attributionUrl24:http://www.frostwire.com10:licenseUrl37:https://www.gnu.org/licenses/gpl.htmleee"; - final String bencodedLicenseMap = new String(Entry.fromMap(licenseMap).bencode()); - assertEquals(expectedLicenseBencoded, bencodedLicenseMap); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/FetchMagnetTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/FetchMagnetTest.java deleted file mode 100644 index 450ce4e..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/FetchMagnetTest.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.frostwire.jlibtorrent; - -import com.frostwire.jlibtorrent.alerts.Alert; -import com.frostwire.jlibtorrent.alerts.AlertType; - -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -/** - * @author gubatron - * @author aldenml - */ -public class FetchMagnetTest { - - //@Test - public void testRemoveAfterFetch() { - - String sha1 = "a83cc13bf4a07e85b938dcf06aa707955687ca7c"; - String uri = "magnet:?xt=urn:btih:" + sha1; - - final SessionManager s = new SessionManager(); - - final CountDownLatch signal = new CountDownLatch(1); - - // the session stats are posted about once per second. - AlertListener l = new AlertListener() { - @Override - public int[] types() { - return new int[]{AlertType.SESSION_STATS.swig(), AlertType.DHT_STATS.swig()}; - } - - @Override - public void alert(Alert alert) { - if (alert.type().equals(AlertType.SESSION_STATS)) { - s.postDhtStats(); - } - - if (alert.type().equals(AlertType.DHT_STATS)) { - - long nodes = s.stats().dhtNodes(); - // wait for at least 10 nodes in the DHT. - if (nodes >= 10) { - signal.countDown(); - } - } - } - }; - - s.addListener(l); - s.start(); - s.postDhtStats(); - - // waiting for nodes in DHT (10 seconds) - boolean r = false; - try { - r = signal.await(10, TimeUnit.SECONDS); - } catch (InterruptedException e) { - // ignore - } - assertTrue("DHT bootstrap timeout", r); - - // no more trigger of DHT stats - s.removeListener(l); - - - // Fetching the magnet uri, waiting 30 seconds max - byte[] data = s.fetchMagnet(uri, 30); - assertNotNull("Failed to retrieve the magnet", data); - - //TorrentHandle th = s.findTorrent(new Sha1Hash(sha1)); - //assertNull(th); - - s.stop(); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/FileProgressTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/FileProgressTest.java deleted file mode 100644 index ad6f38c..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/FileProgressTest.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.frostwire.jlibtorrent; - -import com.frostwire.jlibtorrent.alerts.AddTorrentAlert; -import com.frostwire.jlibtorrent.alerts.Alert; -import com.frostwire.jlibtorrent.alerts.AlertType; -import com.frostwire.jlibtorrent.alerts.PieceFinishedAlert; -import com.frostwire.jlibtorrent.alerts.TorrentCheckedAlert; - -import org.junit.Rule; -import org.junit.rules.TemporaryFolder; - -import java.io.File; -import java.util.concurrent.CountDownLatch; - -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertNull; - -/** - * @author gubatron - * @author aldenml - */ -public final class FileProgressTest { - - @Rule - public TemporaryFolder folder = new TemporaryFolder(); - - private static void log(String msg) { - // comment/uncomment for hand debugging - //System.out.println(msg); - } - - //@Test - public void testForceRecheck() throws Throwable { - - String torrentFilename = "AJC_and_The_Envelope_Pushers_Fallen_Star_FrostClick_FrostWire_MP3_January_16_2017.torrent"; - File torrentFile = folder.newFile(torrentFilename); - byte[] data = Utils.resourceBytes(torrentFilename); - Utils.writeByteArrayToFile(torrentFile, data, false); - - final SessionManager s = new SessionManager(); - - final CountDownLatch signalFinished = new CountDownLatch(1); - - s.addListener(new AlertListener() { - - private boolean forceChecked = false; - - @Override - public int[] types() { - return null; - } - - @Override - public void alert(Alert alert) { - AlertType type = alert.type(); - - switch (type) { - case ADD_TORRENT: - ((AddTorrentAlert) alert).handle().resume(); - break; - case PIECE_FINISHED: - int progress = (int) (((PieceFinishedAlert) alert).handle().status().progress() * 100); - // this number represents the current progress of - // the current status (downloading or checking) - log("progress: " + progress); - if (progress > 2 && !forceChecked) { - forceChecked = true; - ((PieceFinishedAlert) alert).handle().forceRecheck(); - } - break; - case TORRENT_CHECKED: - log("Torrent checked, (forced: " + forceChecked + ")"); - if (forceChecked) { - TorrentHandle th = ((TorrentCheckedAlert) alert).handle(); - long[] fileProgress = th.fileProgress(); - long total = 0; - for (long p : fileProgress) { - total += p; - } - assertNotEquals("At least one file should have some progress", 0, total); - } - break; - case TORRENT_FINISHED: - signalFinished.countDown(); - break; - } - } - }); - - s.start(); - - TorrentInfo ti = new TorrentInfo(torrentFile); - s.download(ti, torrentFile.getParentFile()); - - Utils.awaitMinutes(signalFinished, "too much time downloading the torrent", 5); - assertNull(s.lastAlertError()); - - s.stop(); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/FileStorageTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/FileStorageTest.java deleted file mode 100644 index 3e980ff..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/FileStorageTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.frostwire.jlibtorrent; - -import org.junit.Test; - -import java.io.IOException; - -import static org.junit.Assert.assertEquals; - -/** - * @author gubatron - * @author aldenml - */ -public class FileStorageTest { - - @Test - public void testFileName() throws IOException { - byte[] data = Utils.resourceBytes("test5.torrent"); - TorrentInfo ti = TorrentInfo.bdecode(data); - String name = ti.files().fileName(0); - assertEquals("frostwire-6.2.3.windows.fusion.exe", name); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/GetPiecesTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/GetPiecesTest.java deleted file mode 100644 index e614d4b..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/GetPiecesTest.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.frostwire.jlibtorrent; - -import com.frostwire.jlibtorrent.alerts.AddTorrentAlert; -import com.frostwire.jlibtorrent.alerts.Alert; -import com.frostwire.jlibtorrent.alerts.AlertType; -import com.frostwire.jlibtorrent.alerts.PieceFinishedAlert; - -import org.junit.Rule; -import org.junit.rules.TemporaryFolder; - -import java.io.File; -import java.util.concurrent.CountDownLatch; - -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -/** - * @author gubatron - * @author aldenml - */ -public final class GetPiecesTest { - - @Rule - public TemporaryFolder folder = new TemporaryFolder(); - - private static void log(String msg) { - // comment/uncomment for hand debugging - //System.out.println(msg); - } - - //@Test - public void testStatusPieces() throws Throwable { - - String torrentFilename = "AJC_and_The_Envelope_Pushers_Fallen_Star_FrostClick_FrostWire_MP3_January_16_2017.torrent"; - File torrentFile = folder.newFile(torrentFilename); - byte[] data = Utils.resourceBytes(torrentFilename); - Utils.writeByteArrayToFile(torrentFile, data, false); - - final SessionManager s = new SessionManager(); - - final CountDownLatch signalFinished = new CountDownLatch(1); - - s.addListener(new AlertListener() { - - private boolean forceChecked = false; - - @Override - public int[] types() { - return null; - } - - @Override - public void alert(Alert alert) { - AlertType type = alert.type(); - - switch (type) { - case ADD_TORRENT: - ((AddTorrentAlert) alert).handle().resume(); - break; - case PIECE_FINISHED: - int progress = (int) (((PieceFinishedAlert) alert).handle().status().progress() * 100); - // this number represents the current progress of - // the current status (downloading or checking) - log("progress: " + progress); - if (progress > 4 && !forceChecked) { - forceChecked = true; - TorrentHandle th = ((PieceFinishedAlert) alert).handle(); - PieceIndexBitfield pieces = th.status(TorrentHandle.QUERY_PIECES).pieces(); - log("pieces size: " + pieces.size()); - assertTrue(pieces.size() > 0); - assertTrue(pieces.count() > 0); - log("pieces value at 0: " + pieces.getBit(0)); - signalFinished.countDown(); - } - break; - } - } - }); - - s.start(); - - TorrentInfo ti = new TorrentInfo(torrentFile); - s.download(ti, torrentFile.getParentFile()); - - Utils.awaitMinutes(signalFinished, "too much time downloading the torrent", 5); - assertNull(s.lastAlertError()); - - s.stop(); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/IntSeriesTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/IntSeriesTest.java deleted file mode 100644 index 911a77a..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/IntSeriesTest.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.frostwire.jlibtorrent; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * Created on 12/21/16. - * - * @author aldenml - * @author gubatron - */ -public class IntSeriesTest { - private static void printArray(String name, int[] arr) { - System.out.print(name + " [ "); - for (int i = 0; i < arr.length; i++) { - System.out.print(arr[i]); - if (i != arr.length - 1) { - System.out.print(", "); - } - } - System.out.println(" ]"); - } - - private static void debugAddElement(IntSeries circular, int elem) { - //System.out.println(">>> Adding " + elem); - circular.add(elem); - //printArray("internal buffer", circular.getBufferCopy()); - //printArray(" tail", circular.tail(3)); - //System.out.println(); - } - - @Test - public void addAndGetTest() { - IntSeries series = new IntSeries(3); - - assertEquals("addAndGetTest 1", 0, series.size()); - - debugAddElement(series, 1); - assertEquals("addAndGetTest 2.a", 1, series.size()); - assertEquals("addAndGetTest 2.b", 1, series.get(0)); - - debugAddElement(series, 2); - assertEquals("addAndGetTest 3.a", 2, series.size()); - assertEquals("addAndGetTest 3.b", 1, series.get(0)); - assertEquals("addAndGetTest 3.c", 2, series.get(1)); - - debugAddElement(series, 3); - assertEquals("addAndGetTest 4.a", 3, series.size()); - assertEquals("addAndGetTest 4.b", 1, series.get(0)); - assertEquals("addAndGetTest 4.c", 2, series.get(1)); - assertEquals("addAndGetTest 4.d", 3, series.get(2)); - - debugAddElement(series, 4); - - assertEquals("addAndGetTest 5.a", 2, series.get(0)); - assertEquals("addAndGetTest 5.b", 3, series.get(1)); - assertEquals("addAndGetTest 5.c", 4, series.get(2)); - - debugAddElement(series, 5); - - assertEquals("addAndGetTest 6.a", 3, series.get(0)); - assertEquals("addAndGetTest 6.b", 4, series.get(1)); - assertEquals("addAndGetTest 6.c", 5, series.get(2)); - - debugAddElement(series, 6); - - assertEquals("addAndGetTest 7.a", 4, series.get(0)); - assertEquals("addAndGetTest 7.b", 5, series.get(1)); - assertEquals("addAndGetTest 7.c", 6, series.get(2)); - - debugAddElement(series, 7); - - assertEquals("addAndGetTest 8.a", 5, series.get(0)); - assertEquals("addAndGetTest 8.b", 6, series.get(1)); - assertEquals("addAndGetTest 8.c", 7, series.get(2)); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/PriorityTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/PriorityTest.java deleted file mode 100644 index 91e808b..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/PriorityTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.frostwire.jlibtorrent; - -import com.frostwire.jlibtorrent.swig.int_vector; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author aldenml - * @author gubatron - */ -public class PriorityTest { - - @Test - public void testArray2vector() { - Priority[] arr = Priority.array(Priority.FOUR, 10); - int_vector vec = Priority.array2vector(arr); - assertEquals(arr.length, vec.size()); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/Sha1HashTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/Sha1HashTest.java deleted file mode 100644 index 991a494..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/Sha1HashTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.frostwire.jlibtorrent; - -import org.junit.Test; - -import java.util.Arrays; - -import static org.junit.Assert.assertEquals; - -/** - * @author gubatron - * @author aldenml - */ -public class Sha1HashTest { - - @Test - public void testHashCode() { - byte[] arr = new byte[20]; - Arrays.fill(arr, (byte) 2); - Sha1Hash h = new Sha1Hash(arr); - assertEquals(Arrays.hashCode(arr), h.hashCode()); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/StartPausedSessionTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/StartPausedSessionTest.java deleted file mode 100644 index 467aec0..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/StartPausedSessionTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.frostwire.jlibtorrent; - -import com.frostwire.jlibtorrent.swig.session_params; -import com.frostwire.jlibtorrent.swig.settings_pack; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class StartPausedSessionTest { - @Test - public void startSessionPausedTest() { - SessionManager sessionManager = new SessionManager(); - sessionManager.start(new SessionParams(new session_params(new settings_pack())), - SessionHandle.PAUSED); - assertEquals(sessionManager.isPaused(), true); - sessionManager.stop(); - } - - @Test - public void startSessionNonPausedTest() { - SessionManager sessionManager = new SessionManager(); - sessionManager.start(new SessionParams(new session_params(new settings_pack()))); - assertEquals(sessionManager.isPaused(), false); - sessionManager.stop(); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/StatsMetricTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/StatsMetricTest.java deleted file mode 100644 index 851e40a..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/StatsMetricTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.frostwire.jlibtorrent; - -import org.junit.Test; - -import java.util.List; - -import static org.junit.Assert.assertEquals; - -/** - * @author gubatron - * @author aldenml - */ -public class StatsMetricTest { - - @Test - public void testListStatsMetric() { - List metrics = LibTorrent.sessionStatsMetrics(); - - for (StatsMetric m : metrics) { - assertEquals(m.valueIndex, LibTorrent.findMetricIdx(m.name)); - } - - assertEquals(-1, LibTorrent.findMetricIdx("anything")); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/StatusDurationTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/StatusDurationTest.java deleted file mode 100644 index db53c2a..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/StatusDurationTest.java +++ /dev/null @@ -1,136 +0,0 @@ -package com.frostwire.jlibtorrent; - -import com.frostwire.jlibtorrent.alerts.AddTorrentAlert; -import com.frostwire.jlibtorrent.alerts.Alert; -import com.frostwire.jlibtorrent.alerts.AlertType; -import com.frostwire.jlibtorrent.alerts.PieceFinishedAlert; -import com.frostwire.jlibtorrent.alerts.SaveResumeDataAlert; -import com.frostwire.jlibtorrent.alerts.TorrentFinishedAlert; -import com.frostwire.jlibtorrent.alerts.TorrentPausedAlert; - -import org.junit.Rule; -import org.junit.rules.TemporaryFolder; - -import java.io.File; -import java.util.concurrent.CountDownLatch; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -/** - * @author gubatron - * @author aldenml - */ -public final class StatusDurationTest { - - @Rule - public TemporaryFolder folder = new TemporaryFolder(); - - private long activeDuration = 0; - private Entry resumeData; - - private static void log(String msg) { - // comment/uncomment for hand debugging - System.out.println(msg); - } - - //@Test - public void testDuration() throws Throwable { - - String torrentFilename = "AJC_and_The_Envelope_Pushers_Fallen_Star_FrostClick_FrostWire_MP3_January_16_2017.torrent"; - File torrentFile = folder.newFile(torrentFilename); - byte[] data = Utils.resourceBytes(torrentFilename); - Utils.writeByteArrayToFile(torrentFile, data, false); - - final SessionManager s = new SessionManager(); - - final CountDownLatch signal1 = new CountDownLatch(1); - final CountDownLatch signal2 = new CountDownLatch(1); - - s.addListener(new AlertListener() { - - private boolean paused = false; - - @Override - public int[] types() { - return null; - } - - @Override - public void alert(Alert alert) { - AlertType type = alert.type(); - - switch (type) { - case ADD_TORRENT: - ((AddTorrentAlert) alert).handle().resume(); - break; - case PIECE_FINISHED: - int progress = (int) (((PieceFinishedAlert) alert).handle().status().progress() * 100); - // this number represents the current progress of - // the current status (downloading or checking) - log("progress: " + progress); - if (progress > 2 && !paused) { - paused = true; - ((PieceFinishedAlert) alert).handle().pause(); - } - break; - case TORRENT_PAUSED: - log("Torrent paused"); - TorrentHandle th = ((TorrentPausedAlert) alert).handle(); - th.saveResumeData(); - break; - case SAVE_RESUME_DATA: - // TODO: restore later - resumeData = null;//((SaveResumeDataAlert) alert).resumeData(); - TorrentHandle th2 = ((SaveResumeDataAlert) alert).handle(); - TorrentStatus status2 = th2.status(); - activeDuration = status2.activeDuration(); - signal1.countDown(); - break; - case TORRENT_FINISHED: - TorrentHandle th1 = ((TorrentFinishedAlert) alert).handle(); - TorrentStatus status1 = th1.status(); - activeDuration = status1.activeDuration(); - signal2.countDown(); - break; - - } - } - }); - - s.start(); - - TorrentInfo ti = new TorrentInfo(torrentFile); - s.download(ti, torrentFile.getParentFile()); - - Utils.awaitMinutes(signal1, "too much time downloading the torrent 2%", 5); - assertNull(s.lastAlertError()); - - s.stop(); - - log("activeDuration: " + activeDuration); - - //log(resumeData.toString()); - long savedActiveDuration = resumeData.dictionary().get("active_time").integer() * 1000; - assertEquals(activeDuration, savedActiveDuration); - - File resumeFile = folder.newFile("resume.data"); - Utils.writeByteArrayToFile(resumeFile, resumeData.bencode(), false); - - Thread.sleep(10000); - - s.start(); - - long timeMark = System.currentTimeMillis(); - s.download(ti, torrentFile.getParentFile(), resumeFile, null, null); - - Utils.awaitMinutes(signal2, "too much time downloading the torrent 100%", 5); - assertNull(s.lastAlertError()); - - log("activeDuration: " + activeDuration); - long t1 = activeDuration - savedActiveDuration; // time active in the 98% - long t2 = System.currentTimeMillis() - timeMark; // approximate time in the 98% - assertTrue(t2 - t1 < 2000); // active time should not be affected by the sleep(10000) - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/TcpEndpointTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/TcpEndpointTest.java deleted file mode 100644 index ed2cef8..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/TcpEndpointTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.frostwire.jlibtorrent; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author gubatron - * @author aldenml - */ -public class TcpEndpointTest { - - @Test - public void testToString() { - TcpEndpoint endp1 = new TcpEndpoint("1.1.1.1", 80); - assertEquals("1.1.1.1:80", endp1.toString()); - - TcpEndpoint endp2 = new TcpEndpoint("::1", 80); - assertEquals("[::1]:80", endp2.toString()); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/Utils.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/Utils.java deleted file mode 100644 index 50f968e..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/Utils.java +++ /dev/null @@ -1,359 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.frostwire.jlibtorrent; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -import static org.junit.Assert.assertTrue; - -public final class Utils { - - /** - * The extension separator character. - * - * @since 1.4 - */ - public static final char EXTENSION_SEPARATOR = '.'; - /** - * The Unix separator character. - */ - private static final char UNIX_SEPARATOR = '/'; - /** - * The Windows separator character. - */ - private static final char WINDOWS_SEPARATOR = '\\'; - private static final int EOF = -1; - - private Utils() { - } - - /** - * Gets the name minus the path from a full filename. - *

- * This method will handle a file in either Unix or Windows format. - * The text after the last forward or backslash is returned. - *

-     * a/b/c.txt --> c.txt
-     * a.txt     --> a.txt
-     * a/b/c     --> c
-     * a/b/c/    --> ""
-     * 
- *

- * The output will be the same irrespective of the machine that the code is running on. - * - * @param filename the filename to query, null returns null - * @return the name of the file without the path, or an empty string if none exists - */ - public static String getName(String filename) { - if (filename == null) { - return null; - } - int index = indexOfLastSeparator(filename); - return filename.substring(index + 1); - } - - /** - * Gets the base name, minus the full path and extension, from a full filename. - *

- * This method will handle a file in either Unix or Windows format. - * The text after the last forward or backslash and before the last dot is returned. - *

-     * a/b/c.txt --> c
-     * a.txt     --> a
-     * a/b/c     --> c
-     * a/b/c/    --> ""
-     * 
- *

- * The output will be the same irrespective of the machine that the code is running on. - * - * @param filename the filename to query, null returns null - * @return the name of the file without the path, or an empty string if none exists - */ - public static String getBaseName(String filename) { - return removeExtension(getName(filename)); - } - - //----------------------------------------------------------------------- - - /** - * Removes the extension from a filename. - *

- * This method returns the textual part of the filename before the last dot. - * There must be no directory separator after the dot. - *

-     * foo.txt    --> foo
-     * a\b\c.jpg  --> a\b\c
-     * a\b\c      --> a\b\c
-     * a.b\c      --> a.b\c
-     * 
- *

- * The output will be the same irrespective of the machine that the code is running on. - * - * @param filename the filename to query, null returns null - * @return the filename minus the extension - */ - public static String removeExtension(String filename) { - if (filename == null) { - return null; - } - int index = indexOfExtension(filename); - if (index == -1) { - return filename; - } else { - return filename.substring(0, index); - } - } - - /** - * Returns the index of the last extension separator character, which is a dot. - *

- * This method also checks that there is no directory separator after the last dot. - * To do this it uses {@link #indexOfLastSeparator(String)} which will - * handle a file in either Unix or Windows format. - *

- * The output will be the same irrespective of the machine that the code is running on. - * - * @param filename the filename to find the last path separator in, null returns -1 - * @return the index of the last separator character, or -1 if there - * is no such character - */ - public static int indexOfExtension(String filename) { - if (filename == null) { - return -1; - } - int extensionPos = filename.lastIndexOf(EXTENSION_SEPARATOR); - int lastSeparator = indexOfLastSeparator(filename); - return lastSeparator > extensionPos ? -1 : extensionPos; - } - - /** - * Returns the index of the last directory separator character. - *

- * This method will handle a file in either Unix or Windows format. - * The position of the last forward or backslash is returned. - *

- * The output will be the same irrespective of the machine that the code is running on. - * - * @param filename the filename to find the last path separator in, null returns -1 - * @return the index of the last separator character, or -1 if there - * is no such character - */ - public static int indexOfLastSeparator(String filename) { - if (filename == null) { - return -1; - } - int lastUnixPos = filename.lastIndexOf(UNIX_SEPARATOR); - int lastWindowsPos = filename.lastIndexOf(WINDOWS_SEPARATOR); - return Math.max(lastUnixPos, lastWindowsPos); - } - - /** - * Get the contents of an InputStream as a byte[]. - * Use this method instead of toByteArray(InputStream) - * when InputStream size is known - * - * @param input the InputStream to read from - * @param size the size of InputStream - * @return the requested byte array - * @throws java.io.IOException if an I/O error occurs or InputStream size differ from parameter size - * @throws IllegalArgumentException if size is less than zero - * @since 2.1 - */ - public static byte[] toByteArray(InputStream input, int size) throws IOException { - - if (size < 0) { - throw new IllegalArgumentException("Size must be equal or greater than zero: " + size); - } - - if (size == 0) { - return new byte[0]; - } - - byte[] data = new byte[size]; - int offset = 0; - int readed; - - while (offset < size && (readed = input.read(data, offset, size - offset)) != EOF) { - offset += readed; - } - - if (offset != size) { - throw new IOException("Unexpected readed size. current: " + offset + ", excepted: " + size); - } - - return data; - } - - /** - * Get contents of an InputStream as a byte[]. - * Use this method instead of toByteArray(InputStream) - * when InputStream size is known. - * NOTE: the method checks that the length can safely be cast to an int without truncation - * before using {@link Utils#toByteArray(java.io.InputStream, int)} to read into the byte array. - * (Arrays can have no more than Integer.MAX_VALUE entries anyway) - * - * @param input the InputStream to read from - * @param size the size of InputStream - * @return the requested byte array - * @throws IOException if an I/O error occurs or InputStream size differ from parameter size - * @throws IllegalArgumentException if size is less than zero or size is greater than Integer.MAX_VALUE - * @see Utils#toByteArray(java.io.InputStream, int) - * @since 2.1 - */ - public static byte[] toByteArray(InputStream input, long size) throws IOException { - - if (size > Integer.MAX_VALUE) { - throw new IllegalArgumentException("Size cannot be greater than Integer max value: " + size); - } - - return toByteArray(input, (int) size); - } - - //----------------------------------------------------------------------- - - /** - * Opens a {@link java.io.FileInputStream} for the specified file, providing better - * error messages than simply calling new FileInputStream(file). - *

- * At the end of the method either the stream will be successfully opened, - * or an exception will have been thrown. - *

- * An exception is thrown if the file does not exist. - * An exception is thrown if the file object exists but is a directory. - * An exception is thrown if the file exists but cannot be read. - * - * @param file the file to open for input, must not be {@code null} - * @return a new {@link java.io.FileInputStream} for the specified file - * @throws java.io.FileNotFoundException if the file does not exist - * @throws IOException if the file object is a directory - * @throws IOException if the file cannot be read - * @since 1.3 - */ - public static FileInputStream openInputStream(File file) throws IOException { - if (file.exists()) { - if (file.isDirectory()) { - throw new IOException("File '" + file + "' exists but is a directory"); - } - if (file.canRead() == false) { - throw new IOException("File '" + file + "' cannot be read"); - } - } else { - throw new FileNotFoundException("File '" + file + "' does not exist"); - } - return new FileInputStream(file); - } - - /** - * Reads the contents of a file into a byte array. - * The file is always closed. - * - * @param file the file to read, must not be {@code null} - * @return the file contents, never {@code null} - * @throws IOException in case of an I/O error - * @since 1.1 - */ - public static byte[] readFileToByteArray(File file) throws IOException { - return Files.bytes(file); - } - - public static String toHex(byte[] bytes) { - return Hex.encode(bytes); - } - - public static byte[] fromHex(String str) { - return Hex.decode(str); - } - - public static FileOutputStream openOutputStream(File file, boolean append) throws IOException { - if (file.exists()) { - if (file.isDirectory()) { - throw new IOException("File '" + file + "' exists but is a directory"); - } - if (file.canWrite() == false) { - throw new IOException("File '" + file + "' cannot be written to"); - } - } else { - File parent = file.getParentFile(); - if (parent != null) { - if (!parent.mkdirs() && !parent.isDirectory()) { - throw new IOException("Directory '" + parent + "' could not be created"); - } - } - } - return new FileOutputStream(file, append); - } - - public static void writeByteArrayToFile(File file, byte[] data, boolean append) throws IOException { - OutputStream out = null; - try { - out = openOutputStream(file, append); - out.write(data); - out.close(); // don't swallow close Exception if copy completes normally - } finally { - Files.closeQuietly(out); - } - } - - public static byte[] resourceBytes(String path) throws IOException { - ClassLoader classLoader = Utils.class.getClassLoader(); - InputStream input = classLoader.getResourceAsStream(path); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - try { - int n = 0; - byte[] buffer = new byte[1024 * 4]; - while (EOF != (n = input.read(buffer))) { - output.write(buffer, 0, n); - } - return output.toByteArray(); - } finally { - Files.closeQuietly(input); - Files.closeQuietly(output); - } - } - - public static File home(String path) { - return new File(System.getProperty("user.home"), path); - } - - static void await(CountDownLatch s, String message, long timeout, TimeUnit unit) { - boolean r = false; - try { - r = s.await(timeout, unit); - } catch (InterruptedException e) { - // ignore - } - assertTrue(message, r); - } - - static void awaitSeconds(CountDownLatch s, String message, long timeout) { - await(s, message, timeout, TimeUnit.SECONDS); - } - - static void awaitMinutes(CountDownLatch s, String message, long timeout) { - await(s, message, timeout, TimeUnit.MINUTES); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/VectorsTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/VectorsTest.java deleted file mode 100644 index e1dd69d..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/VectorsTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Created by Angel Leon (@gubatron), Alden Torres (aldenml) - * - * Licensed under the MIT License. - */ - -package com.frostwire.jlibtorrent; - -import com.frostwire.jlibtorrent.swig.byte_vector; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author aldenml - * @author gubatron - */ -public class VectorsTest { - - @Test - public void testByteVector2String() { - byte_vector v = new byte_vector(); - v.push_back((byte) 'A'); - v.push_back((byte) 'B'); - v.push_back((byte) 'C'); - assertEquals(Vectors.byte_vector2ascii(v), "ABC"); - - v.clear(); - v.push_back((byte) 'A'); - v.push_back((byte) 'B'); - v.push_back((byte) 0); - assertEquals(Vectors.byte_vector2ascii(v), "AB"); - - v.clear(); - v.push_back((byte) 0); - v.push_back((byte) 0); - v.push_back((byte) 0); - assertEquals(Vectors.byte_vector2ascii(v), ""); - - v.clear(); - v.push_back((byte) 'A'); - v.push_back((byte) 0); - v.push_back((byte) 'B'); - assertEquals(Vectors.byte_vector2ascii(v), "A"); - - v.clear(); - v.push_back((byte) 194); - v.push_back((byte) 181); - assertEquals(Vectors.byte_vector2utf8(v), "µ"); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/AlertsSwitch.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/AlertsSwitch.java deleted file mode 100644 index 95dd91d..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/AlertsSwitch.java +++ /dev/null @@ -1,152 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.alerts.Alerts; -import com.frostwire.jlibtorrent.alerts.TorrentAlert; - -import java.io.File; -import java.lang.reflect.Field; -import java.net.URL; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.List; - -/** - * @author gubatron - * @author aldenml - */ -public final class AlertsSwitch { - - public static void main(String[] args) throws Exception { - printForAlerts(); - System.out.println("============================="); - printForTorrentAlertsAdapter(); - System.out.println("============================="); - printForAlertType(); - } - - private static void printForAlerts() throws Exception { - Class[] arr = getSwigAlerts(); - - for (int i = 0; i < arr.length; i++) { - String s = "arr[" + i + "] = new CastLambda() { @Override public Alert cast(alert a) { return new "; - if (arr[i] != null) { - String c = capitalizeAlertTypeName(arr[i].getSimpleName()); - s += c + "(cast_to_" + arr[i].getSimpleName() + "(a));"; - } else { - s += "GenericAlert(a);"; - } - - s += "}};"; - - System.out.println(s); - } - } - - private static void printForTorrentAlertsAdapter() throws Exception { - Class[] arr = getSwigAlerts(); - - for (int i = 0; i < arr.length; i++) { - String s = "arr[" + i + "] = new InvokeLambda() { @Override public void invoke(TorrentAlertAdapter l, Alert a) { "; - if (arr[i] != null) { - String c = capitalizeAlertTypeName(arr[i].getSimpleName()); - Class alertClass = Class.forName("com.frostwire.jlibtorrent.alerts." + c); - if (TorrentAlert.class.isAssignableFrom(alertClass)) { - String cc = Character.toLowerCase(c.charAt(0)) + c.substring(1); - cc = cc.replace("Alert", ""); - s += "l." + cc + "((" + c + ")a);"; - s += "}};"; - } else { - s = "arr[" + i + "] = null;"; - } - } else { - s = "arr[" + i + "] = null;"; - } - - System.out.println(s); - } - } - - private static void printForAlertType() throws Exception { - Class[] arr = getSwigAlerts(); - - for (int i = 0; i < arr.length; i++) { - String s = "arr[" + i + "] = "; - if (arr[i] != null) { - String c = arr[i].getSimpleName().toUpperCase(); - c = c.replace("_ALERT", ""); - s += c + ";"; - } else { - s += "UNKNOWN;"; - } - - System.out.println(s); - } - } - - private static Class[] getSwigAlerts() throws Exception { - int n = 0; - Class[] arr = new Class[Alerts.NUM_ALERT_TYPES]; - for (Class c : getClasses("com.frostwire.jlibtorrent.swig")) { - if (c.getName().endsWith("_alert")) { - Field f = c.getDeclaredField("alert_type"); - int type = f.getInt(null); - - arr[type] = c; - n++; - } - } - - return arr; - } - - private static Class[] getClasses(String packageName) throws Exception { - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - String path = packageName.replace('.', '/'); - Enumeration resources = cl.getResources(path); - List dirs = new ArrayList<>(); - while (resources.hasMoreElements()) { - URL resource = resources.nextElement(); - dirs.add(new File(resource.getFile())); - } - ArrayList classes = new ArrayList<>(); - for (File directory : dirs) { - classes.addAll(findClasses(directory, packageName)); - } - return classes.toArray(new Class[classes.size()]); - } - - private static List findClasses(File directory, String packageName) throws Exception { - List classes = new ArrayList<>(); - if (!directory.exists()) { - return classes; - } - File[] files = directory.listFiles(); - for (File file : files) { - if (file.isDirectory()) { - classes.addAll(findClasses(file, packageName + "." + file.getName())); - } else if (file.getName().endsWith(".class")) { - classes.add(Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6))); - } - } - return classes; - } - - private static String capitalizeAlertTypeName(String s) { - StringBuilder sb = new StringBuilder(s.length()); - - boolean capitalize = true; - for (int i = 0; i < s.length(); i++) { - char ch = s.charAt(i); - if (capitalize) { - sb.append(Character.toUpperCase(ch)); - capitalize = false; - } else if (ch == '_') { - capitalize = true; - } else { - sb.append(ch); - } - } - - return sb.toString(); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/DhtShell.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/DhtShell.java deleted file mode 100644 index c3fc81f..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/DhtShell.java +++ /dev/null @@ -1,251 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.AlertListener; -import com.frostwire.jlibtorrent.Ed25519; -import com.frostwire.jlibtorrent.Entry; -import com.frostwire.jlibtorrent.Pair; -import com.frostwire.jlibtorrent.SessionManager; -import com.frostwire.jlibtorrent.Sha1Hash; -import com.frostwire.jlibtorrent.TcpEndpoint; -import com.frostwire.jlibtorrent.Utils; -import com.frostwire.jlibtorrent.alerts.Alert; -import com.frostwire.jlibtorrent.alerts.AlertType; -import com.frostwire.jlibtorrent.alerts.DhtPutAlert; -import com.frostwire.jlibtorrent.alerts.ListenFailedAlert; -import com.frostwire.jlibtorrent.alerts.ListenSucceededAlert; - -import java.io.File; -import java.util.ArrayList; -import java.util.Scanner; - -/** - * @author gubatron - * @author aldenml - */ -public final class DhtShell { - - public static void main(String[] args) throws Throwable { - - AlertListener mainListener = new AlertListener() { - @Override - public int[] types() { - return null; - } - - @Override - public void alert(Alert alert) { - AlertType type = alert.type(); - - if (type == AlertType.LISTEN_SUCCEEDED) { - ListenSucceededAlert a = (ListenSucceededAlert) alert; - log(a.message()); - } - - if (type == AlertType.LISTEN_FAILED) { - ListenFailedAlert a = (ListenFailedAlert) alert; - log(a.message()); - } - - if (type == AlertType.DHT_PUT) { - DhtPutAlert a = (DhtPutAlert) alert; - log(a.message()); - } - } - }; - - SessionManager s = new SessionManager(); - s.addListener(mainListener); - s.start(); - - try { - File f = new File("dht_shell.dat"); - if (f.exists()) { - byte[] data = Utils.readFileToByteArray(f); - s.loadState(data); - } - } catch (Throwable e) { - log(e.getMessage()); - } - - Scanner in = new Scanner(System.in); - while (true) { - System.out.print("$ "); - - String line = in.nextLine().trim(); - - if (is_quit(line)) { - quit(s); - } else if (is_put(line)) { - put(s, line); - } else if (is_get(line)) { - get(s, line); - } else if (is_get_peers(line)) { - get_peers(s, line); - } else if (is_announce(line)) { - announce(s, line); - } else if (is_mkeys(line)) { - mkeys(line); - } else if (is_mput(line)) { - mput(s, line); - } else if (is_mget(line)) { - mget(s, line); - } else if (is_magnet(line)) { - magnet(s, line); - } else if (is_count_nodes(line)) { - count_nodes(s); - } else if (is_invalid(line)) { - invalid(line); - } - } - } - - private static void print(String s, boolean dollar) { - System.out.println(); - System.out.println(s); - if (dollar) { - System.out.print("$ "); - } - } - - private static void print(String s) { - print(s, false); - } - - private static void log(String s) { - print(s, true); - } - - private static boolean is_quit(String s) { - s = s.split(" ")[0]; - return s.equals("quit") || s.equals("exit") || s.equals("stop"); - } - - private static void quit(SessionManager s) { - print("Exiting..."); - byte[] data = s.saveState(); - try { - Utils.writeByteArrayToFile(new File("dht_shell.dat"), data, false); - } catch (Throwable e) { - print(e.getMessage()); - } - s.stop(); - System.exit(0); - } - - private static boolean is_put(String s) { - return s.startsWith("put "); - } - - private static void put(SessionManager sm, String s) { - String data = s.split(" ")[1]; - String sha1 = sm.dhtPutItem(new Entry(data)).toString(); - print("Wait for completion of put for key: " + sha1); - } - - private static boolean is_get(String s) { - return s.startsWith("get "); - } - - private static void get(SessionManager sm, String s) { - String sha1 = s.split(" ")[1]; - print("Waiting a max of 20 seconds to get data for key: " + sha1); - Entry data = sm.dhtGetItem(new Sha1Hash(sha1), 20); - print(data.toString()); - } - - private static boolean is_get_peers(String s) { - return s.startsWith("get_peers "); - } - - private static void get_peers(SessionManager sm, String s) { - String sha1 = s.split(" ")[1]; - print("Waiting a max of 20 seconds to get peers for key: " + sha1); - ArrayList peers = sm.dhtGetPeers(new Sha1Hash(sha1), 20); - print(peers.toString()); - } - - private static boolean is_announce(String s) { - return s.startsWith("announce "); - } - - private static void announce(SessionManager sm, String s) { - String sha1 = s.split(" ")[1]; - sm.dhtAnnounce(new Sha1Hash(sha1), 9000, 0); - print("Wait for completion of announce for key: " + sha1); - } - - private static boolean is_mkeys(String s) { - return s.startsWith("mkeys"); - } - - private static void mkeys(String s) { - byte[] seed = Ed25519.createSeed(); - - Pair keypair = Ed25519.createKeypair(seed); - byte[] publicKey = keypair.first; - byte[] privateKey = keypair.second; - - - byte[][] keys = new byte[2][]; - keys[0] = publicKey; - keys[1] = privateKey; - - String msg = "Save this key pair\n"; - msg += "Public: " + Utils.toHex(keys[0]) + "\n"; - msg += "Private: " + Utils.toHex(keys[1]) + "\n"; - print(msg); - } - - private static boolean is_mput(String s) { - return s.startsWith("mput "); - } - - private static void mput(SessionManager sm, String s) { - String[] arr = s.split(" "); - byte[] publicKey = Utils.fromHex(arr[1]); - byte[] privateKey = Utils.fromHex(arr[2]); - String data = arr[3]; - sm.dhtPutItem(publicKey, privateKey, new Entry(data), new byte[0]); - print("Wait for completion of mput for public key: " + arr[1]); - } - - private static boolean is_mget(String s) { - return s.startsWith("mget "); - } - - private static void mget(SessionManager sm, String s) { - String[] arr = s.split(" "); - byte[] publicKey = Utils.fromHex(arr[1]); - print("Waiting a max of 20 seconds to get mutable data for public key: " + arr[1]); - SessionManager.MutableItem data = sm.dhtGetItem(publicKey, new byte[0], 20); - print(data.item.toString()); - } - - private static boolean is_magnet(String s) { - return s.startsWith("magnet "); - } - - private static void magnet(SessionManager session, String s) { - String sha1 = s.split(" ")[1]; - String uri = "magnet:?xt=urn:btih:" + sha1; - print("Waiting a max of 20 seconds to fetch magnet for sha1: " + sha1); - byte[] data = session.fetchMagnet(uri, 20); - print(Entry.bdecode(data).toString()); - } - - private static boolean is_count_nodes(String s) { - return s.startsWith("count_nodes"); - } - - private static void count_nodes(SessionManager s) { - log("DHT contains " + s.stats().dhtNodes() + " nodes"); - } - - private static boolean is_invalid(String s) { - return !s.isEmpty(); - } - - private static void invalid(String s) { - print("Invalid command: " + s + "\n" + "Try ? for help"); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/DownloadTorrent.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/DownloadTorrent.java deleted file mode 100644 index 3993d68..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/DownloadTorrent.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.AlertListener; -import com.frostwire.jlibtorrent.LibTorrent; -import com.frostwire.jlibtorrent.SessionManager; -import com.frostwire.jlibtorrent.TorrentInfo; -import com.frostwire.jlibtorrent.alerts.AddTorrentAlert; -import com.frostwire.jlibtorrent.alerts.Alert; -import com.frostwire.jlibtorrent.alerts.AlertType; -import com.frostwire.jlibtorrent.alerts.BlockFinishedAlert; - -import java.io.File; -import java.util.concurrent.CountDownLatch; - -/** - * @author gubatron - * @author aldenml - */ -public final class DownloadTorrent { - - public static void main(String[] args) throws Throwable { - - // comment this line for a real application - args = new String[]{"/Users/aldenml/Downloads/Honey_Larochelle_Hijack_FrostClick_FrostWire_MP3_May_06_2016.torrent"}; - - File torrentFile = new File(args[0]); - - System.out.println("Using libtorrent version: " + LibTorrent.version()); - - final SessionManager s = new SessionManager(); - - final CountDownLatch signal = new CountDownLatch(1); - - s.addListener(new AlertListener() { - @Override - public int[] types() { - return null; - } - - @Override - public void alert(Alert alert) { - AlertType type = alert.type(); - - switch (type) { - case ADD_TORRENT: - System.out.println("Torrent added"); - ((AddTorrentAlert) alert).handle().resume(); - break; - case BLOCK_FINISHED: - BlockFinishedAlert a = (BlockFinishedAlert) alert; - int p = (int) (a.handle().status().progress() * 100); - System.out.println("Progress: " + p + " for torrent name: " + a.torrentName()); - System.out.println(s.stats().totalDownload()); - break; - case TORRENT_FINISHED: - System.out.println("Torrent finished"); - signal.countDown(); - break; - } - } - }); - - s.start(); - - TorrentInfo ti = new TorrentInfo(torrentFile); - s.download(ti, torrentFile.getParentFile()); - - signal.await(); - - s.stop(); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/EnumNetTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/EnumNetTest.java deleted file mode 100644 index 2584f03..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/EnumNetTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.AlertListener; -import com.frostwire.jlibtorrent.EnumNet; -import com.frostwire.jlibtorrent.SessionManager; -import com.frostwire.jlibtorrent.alerts.Alert; -import com.frostwire.jlibtorrent.swig.ip_route_vector; - -import java.util.List; - -/** - * @author gubatron - * @author aldenml - */ -public final class EnumNetTest { - - public static void main(String[] args) throws Throwable { - - SessionManager s = new SessionManager(); - - s.addListener(new AlertListener() { - @Override - public int[] types() { - return null; - } - - @Override - public void alert(Alert alert) { - System.out.println(alert); - //System.out.println("listen_interfaces: " + s.listenInterfaces()); - } - }); - - s.start(); - - System.out.println("Enum interfaces"); - List ipInterfaces = EnumNet.enumInterfaces(s); - for (EnumNet.IpInterface iface : ipInterfaces) { - System.out.println(iface); - } - - System.out.println("Enum routers"); - List ipRoutes = EnumNet.enumRoutes(s); - for (EnumNet.IpRoute route : ipRoutes) { - System.out.println(route); - } - - ip_route_vector ip_routes = new ip_route_vector(); - for (EnumNet.IpRoute route : ipRoutes) { - ip_routes.push_back(route.swig()); - } - for (EnumNet.IpInterface iface : ipInterfaces) { - System.out.println("Default gateway for iface=" + iface + " -> " + EnumNet.getGateway(s, iface, ip_routes)); - } - - System.out.println("Press ENTER to exit"); - System.in.read(); - - s.stop(); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/GetMagnet.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/GetMagnet.java deleted file mode 100644 index ce460bc..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/GetMagnet.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.Entry; -import com.frostwire.jlibtorrent.SessionManager; -import com.frostwire.jlibtorrent.SessionParams; -import com.frostwire.jlibtorrent.SettingsPack; - -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -/** - * @author gubatron - * @author aldenml - */ -public final class GetMagnet { - - public static void main(String[] args) throws Throwable { - - //String uri = "magnet:?xt=urn:btih:86d0502ead28e495c9e67665340f72aa72fe304e&dn=Frostwire.5.3.6.+%5BWindows%5D&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.istole.it%3A6969&tr=udp%3A%2F%2Fopen.demonii.com%3A1337"; - String uri = "magnet:?xt=urn:btih:a83cc13bf4a07e85b938dcf06aa707955687ca7c"; - - final SessionManager s = new SessionManager(); - //final SessionManager s = new SessionManager(true); - - /*s.addListener(new AlertListener() { - @Override - public int[] types() { - return null; - } - - @Override - public void alert(Alert alert) { - System.out.println(alert); - } - });*/ - - SettingsPack sp = new SettingsPack(); - //sp.listenInterfaces("0.0.0.0:43567"); - //sp.listenInterfaces("[::]:43567"); - //sp.listenInterfaces("0.0.0.0:43567,[::]:43567"); - //sp.setString(settings_pack.string_types.dht_bootstrap_nodes.swigValue(), "router.silotis.us:6881"); - //sp.setString(settings_pack.string_types.dht_bootstrap_nodes.swigValue(), "router.bittorrent.com:6881"); - //sp.setString(settings_pack.string_types.dht_bootstrap_nodes.swigValue(), "dht.transmissionbt.com:6881"); - - SessionParams params = new SessionParams(sp); - - s.start(params); - - final CountDownLatch signal = new CountDownLatch(1); - - final Timer timer = new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - long nodes = s.stats().dhtNodes(); - // wait for at least 10 nodes in the DHT. - if (nodes >= 10) { - System.out.println("DHT contains " + nodes + " nodes"); - signal.countDown(); - timer.cancel(); - } - } - }, 0, 1000); - - System.out.println("Waiting for nodes in DHT (10 seconds)..."); - boolean r = signal.await(40, TimeUnit.SECONDS); - if (!r) { - System.out.println("DHT bootstrap timeout"); - System.exit(0); - } - - System.out.println("Fetching the magnet uri, please wait..."); - byte[] data = s.fetchMagnet(uri, 30); - - if (data != null) { - System.out.println(Entry.bdecode(data)); - } else { - System.out.println("Failed to retrieve the magnet"); - } - - s.stop(); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/GetMagnet2.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/GetMagnet2.java deleted file mode 100644 index 48de9d2..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/GetMagnet2.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.AlertListener; -import com.frostwire.jlibtorrent.SessionManager; -import com.frostwire.jlibtorrent.alerts.Alert; -import com.frostwire.jlibtorrent.alerts.AlertType; - -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * @author gubatron - * @author aldenml - */ -public final class GetMagnet2 { - - public static void main(String[] args) throws Throwable { - - final String uri = "magnet:?xt=urn:btih:a83cc13bf4a07e85b938dcf06aa707955687ca7c"; - - final SessionManager s = new SessionManager(); - - final CountDownLatch signal = new CountDownLatch(1); - - // the session stats are posted about once per second. - AlertListener l = new AlertListener() { - @Override - public int[] types() { - return new int[]{AlertType.SESSION_STATS.swig(), AlertType.DHT_STATS.swig()}; - } - - @Override - public void alert(Alert alert) { - if (alert.type().equals(AlertType.SESSION_STATS)) { - s.postDhtStats(); - } - - if (alert.type().equals(AlertType.DHT_STATS)) { - - long nodes = s.stats().dhtNodes(); - // wait for at least 10 nodes in the DHT. - if (nodes >= 10) { - System.out.println("DHT contains " + nodes + " nodes"); - signal.countDown(); - } - } - } - }; - - s.addListener(l); - s.start(); - s.postDhtStats(); - - System.out.println("Waiting for nodes in DHT (10 seconds)..."); - boolean r = signal.await(10, TimeUnit.SECONDS); - if (!r) { - System.out.println("DHT bootstrap timeout"); - System.exit(0); - } - - // no more trigger of DHT stats - s.removeListener(l); - - System.out.println("Fetching the magnet uri (multi thread), please wait..."); - - final AtomicInteger counter = new AtomicInteger(0); - for (int i = 0; i < 50; i++) { - final int index = i; - Thread t = new Thread() { - @Override - public void run() { - byte[] data = s.fetchMagnet(uri, 30); - - int count = counter.incrementAndGet(); - if (data != null) { - System.out.println("Success fetching magnet: " + index + "/" + count); - } else { - System.out.println("Failed to retrieve the magnet: " + index + "/" + count); - } - } - }; - - t.start(); - //t.join(); - } - - System.out.println("Press ENTER to exit"); - System.in.read(); - - s.stop(); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/GetMagnet3.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/GetMagnet3.java deleted file mode 100644 index e9704fe..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/GetMagnet3.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.AlertListener; -import com.frostwire.jlibtorrent.Priority; -import com.frostwire.jlibtorrent.SessionManager; -import com.frostwire.jlibtorrent.TorrentHandle; -import com.frostwire.jlibtorrent.TorrentInfo; -import com.frostwire.jlibtorrent.alerts.AddTorrentAlert; -import com.frostwire.jlibtorrent.alerts.Alert; -import com.frostwire.jlibtorrent.alerts.StatsAlert; - -import java.io.File; -import java.io.FileOutputStream; -import java.sql.Time; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -/** - * To test issue https://github.com/frostwire/frostwire-jlibtorrent/issues/180 - * - * @author gubatron - * @author aldenml - */ -public final class GetMagnet3 { - - public static void main(String[] args) throws Throwable { - - // code taken from - // https://github.com/frostwire/frostwire-jlibtorrent/issues/180#issuecomment-345458935 - // author proninyaroslav - - final String magnet = ""; - - final SessionManager s = new SessionManager(); - - final CountDownLatch signal = new CountDownLatch(1); - - // the session stats are posted about once per second. - AlertListener l = new AlertListener() { - @Override - public int[] types() { - return null; - } - - @Override - public void alert(Alert alert) { - switch (alert.type()) { - case ADD_TORRENT: - System.out.println("Torrent added"); - TorrentHandle th = ((AddTorrentAlert) alert).handle(); - th.resume(); - - TorrentInfo ti = th.torrentFile(); - Priority[] p = th.filePriorities(); - p[0] = Priority.IGNORE; - - System.out.println("Expected priorities:"); - for (int i = 0; i < ti.numFiles(); i++) - System.out.println(String.format("priority=%-8sfile=%s", - p[i], - ti.files().fileName(i))); - System.out.println(); - th.prioritizeFiles(p); - break; - case STATS: - th = ((StatsAlert) alert).handle(); - ti = th.torrentFile(); - p = th.filePriorities(); - System.out.println(String.format("[%s] Current priorities:", - new Time(System.currentTimeMillis()))); - for (int i = 0; i < ti.numFiles(); i++) - System.out.println(String.format("priority=%-8sfile=%s", - p[i], - ti.files().fileName(i))); - System.out.println(); - break; - case TORRENT_FINISHED: - System.out.println("Torrent finished\n"); - break; - } - } - }; - - s.addListener(l); - s.start(); - - final Timer timer = new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - long nodes = s.stats().dhtNodes(); - if (nodes >= 10) { - System.out.println("DHT contains " + nodes + " nodes"); - signal.countDown(); - timer.cancel(); - } - } - }, 0, 1000); - - System.out.println("Waiting for nodes in DHT (10 seconds)..."); - boolean r = signal.await(10, TimeUnit.SECONDS); - if (!r) { - System.out.println("DHT bootstrap timeout"); - System.exit(0); - } - - System.out.println("Fetching the magnet uri, please wait..."); - byte[] data = s.fetchMagnet(magnet, 30, true); - if (data == null) { - System.out.println("data == null"); - s.stop(); - return; - } - File f = File.createTempFile("test", "torrent"); - FileOutputStream fos = new FileOutputStream(f); - fos.write(data); - s.download(new TorrentInfo(f), new File(System.getProperty("user.dir"))); - - System.in.read(); - s.stop(); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/GetMagnet4.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/GetMagnet4.java deleted file mode 100644 index 8c74e1d..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/GetMagnet4.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.AlertListener; -import com.frostwire.jlibtorrent.Priority; -import com.frostwire.jlibtorrent.SessionManager; -import com.frostwire.jlibtorrent.TorrentHandle; -import com.frostwire.jlibtorrent.TorrentInfo; -import com.frostwire.jlibtorrent.alerts.AddTorrentAlert; -import com.frostwire.jlibtorrent.alerts.Alert; -import com.frostwire.jlibtorrent.alerts.MetadataReceivedAlert; -import com.frostwire.jlibtorrent.alerts.StatsAlert; - -import java.sql.Time; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -/** - * To test issue https://github.com/frostwire/frostwire-jlibtorrent/issues/174 - * - * @author gubatron - * @author aldenml - */ -public final class GetMagnet4 { - - public static void main(String[] args) throws Throwable { - - final String magnet = ""; - - final SessionManager s = new SessionManager(); - - AlertListener l = new AlertListener() { - @Override - public int[] types() { - return null; - } - - @Override - public void alert(Alert alert) { - switch (alert.type()) { - case ADD_TORRENT: - System.out.println("Torrent added"); - TorrentHandle th = ((AddTorrentAlert) alert).handle(); - th.resume(); - break; - case METADATA_RECEIVED: - th = ((MetadataReceivedAlert) alert).handle(); - TorrentInfo ti = th.torrentFile(); - Priority[] p = th.filePriorities(); - p[0] = Priority.IGNORE; - - System.out.println("Expected priorities:"); - for (int i = 0; i < ti.numFiles(); i++) - System.out.println(String.format("priority=%-8sfile=%s", - p[i], - ti.files().fileName(i))); - System.out.println(); - th.prioritizeFiles(p); - break; - case STATS: - th = ((StatsAlert) alert).handle(); - ti = th.torrentFile(); - // ti is null while the metadata is not received - if (ti != null) { - p = th.filePriorities(); - System.out.println(String.format("[%s] Current priorities:", - new Time(System.currentTimeMillis()))); - for (int i = 0; i < ti.numFiles(); i++) - System.out.println(String.format("priority=%-8sfile=%s", - p[i], - ti.files().fileName(i))); - System.out.println(); - } - break; - case TORRENT_FINISHED: - System.out.println("Torrent finished\n"); - break; - } - } - }; - - s.addListener(l); - s.start(); - - waitForNodesInDHT(s); - - System.out.println("About to download magnet: " + magnet); - s.download(magnet, null); - - System.in.read(); - s.stop(); - } - - private static void waitForNodesInDHT(final SessionManager s) throws InterruptedException { - final CountDownLatch signal = new CountDownLatch(1); - - final Timer timer = new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - long nodes = s.stats().dhtNodes(); - if (nodes >= 10) { - System.out.println("DHT contains " + nodes + " nodes"); - signal.countDown(); - timer.cancel(); - } - } - }, 0, 1000); - - System.out.println("Waiting for nodes in DHT (10 seconds)..."); - boolean r = signal.await(10, TimeUnit.SECONDS); - if (!r) { - System.out.println("DHT bootstrap timeout"); - System.exit(0); - } - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/GetMagnet5.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/GetMagnet5.java deleted file mode 100644 index ac1cbba..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/GetMagnet5.java +++ /dev/null @@ -1,166 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.AlertListener; -import com.frostwire.jlibtorrent.Entry; -import com.frostwire.jlibtorrent.SessionManager; -import com.frostwire.jlibtorrent.TorrentInfo; -import com.frostwire.jlibtorrent.alerts.AddTorrentAlert; -import com.frostwire.jlibtorrent.alerts.Alert; -import com.frostwire.jlibtorrent.alerts.AlertType; -import com.frostwire.jlibtorrent.alerts.BlockFinishedAlert; -import com.frostwire.jlibtorrent.alerts.DhtErrorAlert; -import com.frostwire.jlibtorrent.alerts.PieceFinishedAlert; -import com.frostwire.jlibtorrent.alerts.StateUpdateAlert; -import com.frostwire.jlibtorrent.alerts.TorrentErrorAlert; -import com.frostwire.jlibtorrent.alerts.TorrentFinishedAlert; - -import java.io.File; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -/** - * To test issue https://github.com/frostwire/frostwire-jlibtorrent/issues/195 - * - * @author gubatron - * @author aldenml - */ -public final class GetMagnet5 { - - public static void main(String[] args) throws Throwable { - - final String magnet = "magnet:?xt=urn:btih:737d38ed01da1df727a3e0521a6f2c457cb812de&dn=HOME+-+a+film+by+Yann+Arthus-Bertrand+%282009%29+%5BEnglish%5D+%5BHD+MP4%5D&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.zer0day.to%3A1337&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969"; - - final SessionManager s = new SessionManager(); - - startdl(magnet, s); - - System.in.read(); - s.stop(); - } - - private static void waitForNodesInDHT(final SessionManager s) throws InterruptedException { - final CountDownLatch signal = new CountDownLatch(1); - - final Timer timer = new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - long nodes = s.stats().dhtNodes(); - if (nodes >= 10) { - System.out.println("DHT contains " + nodes + " nodes"); - signal.countDown(); - timer.cancel(); - } - } - }, 0, 1000); - - System.out.println("Waiting for nodes in DHT (10 seconds)..."); - boolean r = signal.await(10, TimeUnit.SECONDS); - if (!r) { - System.out.println("DHT bootstrap timeout"); - System.exit(0); - } - } - - private static void log(String s) { - System.out.println(s); - } - - private static void startdl(String magnetLink, SessionManager sm) throws InterruptedException { - //Torrent dbTorrent = torrentService.findByTorrentName(name); - String link = magnetLink;//dbTorrent.getPathToTorrent(); - File saveDir = new File("torrents/"); - if (!saveDir.exists()) { - saveDir.mkdirs(); - } - final SessionManager s = sm;//storrent.getSessionManager(); - AlertListener l = new AlertListener() { - private int grade = 0; - - @Override - public int[] types() { - return null; - } - - @Override - public void alert(Alert alert) { - AlertType type = alert.type(); - switch (type) { - case ADD_TORRENT: - //((AddTorrentAlert) alert).handle().setFlags(TorrentFlags.SEQUENTIAL_DOWNLOAD); - ((AddTorrentAlert) alert).handle().resume(); - break; - case PIECE_FINISHED: - int progress = (int) (((PieceFinishedAlert) alert).handle().status().progress() * 100); - if (grade < progress / 20) { - int index = (int) (((PieceFinishedAlert) alert).pieceIndex()); - log("index: " + index); - grade += 1; - s.downloadRate(); - log(progress + " % downloaded"); - } - System.out.println("PIECE_FINISHED"); - break; - case TORRENT_FINISHED: - grade = 0; - ((TorrentFinishedAlert) alert).handle().pause(); - System.out.println("TORRENT_FINISHED"); - break; - case TORRENT_ERROR: - log(((TorrentErrorAlert) alert).what()); - log("is paused = " + ((TorrentErrorAlert) alert).handle().status()); - break; - case BLOCK_FINISHED: - System.out.println("HERE: " + ((BlockFinishedAlert) alert).handle().status().progress()); - progress = (int) (((BlockFinishedAlert) alert).handle().status().progress() * 100); - if (grade < progress / 20) { - int index = (int) (((BlockFinishedAlert) alert).pieceIndex()); - log("index: " + index); - grade += 1; - s.downloadRate(); - log(progress + " % downloaded"); - } - System.out.println("BLOCK_FINISHED"); - break; - case STATE_UPDATE: - log(((StateUpdateAlert) alert).message()); - break; - case METADATA_RECEIVED: - log("metadata received"); - break; - case DHT_ERROR: - log("dht error"); - log(((DhtErrorAlert) alert).message()); - break; - default: - break; - } - } - }; - s.addListener(l); - if (s.isRunning() != true) - s.start(); - if (link.startsWith("magnet:?")) { - waitForNodesInDHT(s); - byte[] data = s.fetchMagnet(link, 30); - TorrentInfo ti = TorrentInfo.bdecode(data); - log(Entry.bdecode(data).toString()); - log("is valid ? =" + ti.isValid()); - s.download(ti, saveDir); - log("torrent added with name = " + ti.name()); - //storrent.addTh(s.find(ti.infoHash()), name); - log(s.find(ti.infoHash()).isValid() + " isvalid"); - log("torrent added to session"); - //this.videoname = ti.name(); - int i = 0; - while (i < 20) { - TimeUnit.SECONDS.sleep(1); - log(s.find(ti.infoHash()).status().state() + " state"); - log(s.find(ti.infoHash()).status().progress() * 100 + " progress"); - i++; - } - } - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/PieceMap.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/PieceMap.java deleted file mode 100644 index 17afcfa..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/PieceMap.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.PiecesTracker; -import com.frostwire.jlibtorrent.TorrentInfo; - -import java.io.File; - -/** - * @author gubatron - * @author aldenml - */ -public final class PieceMap { - - - public static void main(String[] args) throws Throwable { - - // comment this line for a real application - args = new String[]{"/Users/aldenml/Downloads/ReSet_Resynthformation_SOSEP051_FrostClick_FrostWire_6_28_2014.torrent"}; - - File torrentFile = new File(args[0]); - - TorrentInfo ti = new TorrentInfo(torrentFile); - - int numFiles = ti.numFiles(); - int numPieces = ti.numPieces(); - - System.out.println("Num Pieces: " + numPieces); - - PiecesTracker tracker = new PiecesTracker(ti); - - for (int i = 0; i < numPieces / 2; i++) { - tracker.setComplete(i, true); - } - - for (int i = 0; i < numFiles; i++) { - System.out.println("File index (seq)completed: " + tracker.getSequentialDownloadedBytes(i)); - } - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/PluginTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/PluginTest.java deleted file mode 100644 index ca4ae15..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/PluginTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.AlertListener; -import com.frostwire.jlibtorrent.BDecodeNode; -import com.frostwire.jlibtorrent.Entry; -import com.frostwire.jlibtorrent.Plugin; -import com.frostwire.jlibtorrent.SessionHandle; -import com.frostwire.jlibtorrent.SessionManager; -import com.frostwire.jlibtorrent.UdpEndpoint; -import com.frostwire.jlibtorrent.alerts.Alert; - -/** - * @author gubatron - * @author aldenml - */ -public final class PluginTest { - - public static void main(String[] args) throws Throwable { - - SessionManager s = new SessionManager(); - - s.addListener(new AlertListener() { - @Override - public int[] types() { - return null; - } - - @Override - public void alert(Alert alert) { - System.out.println(alert); - } - }); - - s.start(); - - SessionHandle h = new SessionHandle(s.swig()); - h.addExtension(new Plugin() { - @Override - public boolean onDhtRequest(String query, UdpEndpoint source, BDecodeNode message, Entry response) { - System.out.println("DHT MSG: " + query + ", from: " + source); - return false; - } - }); - - System.out.println("Press ENTER to exit"); - System.in.read(); - - s.stop(); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/PosixTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/PosixTest.java deleted file mode 100644 index 1328799..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/PosixTest.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.AlertListener; -import com.frostwire.jlibtorrent.SessionManager; -import com.frostwire.jlibtorrent.TorrentInfo; -import com.frostwire.jlibtorrent.alerts.AddTorrentAlert; -import com.frostwire.jlibtorrent.alerts.Alert; -import com.frostwire.jlibtorrent.alerts.AlertType; -import com.frostwire.jlibtorrent.alerts.BlockFinishedAlert; -import com.frostwire.jlibtorrent.swig.libtorrent; -import com.frostwire.jlibtorrent.swig.posix_stat_t; -import com.frostwire.jlibtorrent.swig.posix_wrapper; - -import java.io.File; -import java.util.concurrent.CountDownLatch; - -/** - * @author gubatron - * @author aldenml - */ -public final class PosixTest { - - public static void main(String[] args) throws Throwable { - - posix_wrapper p = new posix_wrapper() { - - @Override - public int open(String path, int flags, int mode) { - System.out.println("open: " + path); - return super.open(path, flags, mode); - } - - @Override - public int stat(String path, posix_stat_t buf) { - System.out.println("stat: " + path); - return super.stat(path, buf); - } - - @Override - public int mkdir(String path, int mode) { - System.out.println("mkdir: " + path); - return super.mkdir(path, mode); - } - - @Override - public int rename(String oldpath, String newpath) { - System.out.println("rename: " + newpath); - return super.rename(oldpath, newpath); - } - - @Override - public int remove(String path) { - System.out.println("remove: " + path); - return super.remove(path); - } - }; - - p.swigReleaseOwnership(); - libtorrent.set_posix_wrapper(p); - - // comment this line for a real application - args = new String[]{"/Users/aldenml/Downloads/Honey_Larochelle_Hijack_FrostClick_FrostWire_MP3_May_06_2016.torrent"}; - - File torrentFile = new File(args[0]); - - final SessionManager s = new SessionManager(); - - final CountDownLatch signal = new CountDownLatch(1); - - s.addListener(new AlertListener() { - @Override - public int[] types() { - return null; - } - - @Override - public void alert(Alert alert) { - AlertType type = alert.type(); - - switch (type) { - case ADD_TORRENT: - System.out.println("Torrent added"); - ((AddTorrentAlert) alert).handle().resume(); - break; - case BLOCK_FINISHED: - BlockFinishedAlert a = (BlockFinishedAlert) alert; - int p = (int) (a.handle().status().progress() * 100); - System.out.println("Progress: " + p + " for torrent name: " + a.torrentName()); - System.out.println(s.stats().totalDownload()); - break; - } - } - }); - - s.start(); - - TorrentInfo ti = new TorrentInfo(torrentFile); - s.download(ti, torrentFile.getParentFile()); - - signal.await(); - - s.stop(); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/PrintMetrics.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/PrintMetrics.java deleted file mode 100644 index ac2f7e0..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/PrintMetrics.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.LibTorrent; -import com.frostwire.jlibtorrent.StatsMetric; - -/** - * @author gubatron - * @author aldenml - */ -public final class PrintMetrics { - - public static void main(String[] args) throws Throwable { - - for (StatsMetric m : LibTorrent.sessionStatsMetrics()) { - System.out.println(m); - } - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/ReadBEncoded.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/ReadBEncoded.java deleted file mode 100644 index 210c941..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/ReadBEncoded.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.BDecodeNode; -import com.frostwire.jlibtorrent.Utils; - -import java.io.File; - -/** - * @author gubatron - * @author aldenml - */ -public final class ReadBEncoded { - - public static void main(String[] args) throws Throwable { - args = new String[]{"/Users/aldenml/Downloads/303dde355f99c9b903efaeba57e23194a7a6713f.resume"}; - - byte[] data = Utils.readFileToByteArray(new File(args[0])); - - BDecodeNode n = BDecodeNode.bdecode(data); - - System.out.println(n); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/ReadTorrent.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/ReadTorrent.java deleted file mode 100644 index 8eab2d4..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/ReadTorrent.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.TorrentInfo; - -import java.io.File; -import java.io.RandomAccessFile; -import java.nio.MappedByteBuffer; -import java.nio.channels.FileChannel; - -/** - * @author gubatron - * @author aldenml - */ -public final class ReadTorrent { - - public static void main(String[] args) throws Throwable { - args = new String[]{"/Users/aldenml/Downloads/Honey_Larochelle_Hijack_FrostClick_FrostWire_MP3_May_06_2016.torrent"}; - - File torrentFile = new File(args[0]); - - System.out.println("Reading all in memory"); - TorrentInfo ti = new TorrentInfo(torrentFile); - System.out.println("info-hash: " + ti.infoHash()); - System.out.println(ti.toEntry()); - - System.out.println("Reading with memory mapped"); - FileChannel fc = new RandomAccessFile(args[0], "r").getChannel(); - MappedByteBuffer buffer = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size()); - TorrentInfo ti2 = new TorrentInfo(buffer); - System.out.println("info-hash: " + ti2.infoHash()); - System.out.println("creator: " + ti2.creator()); - System.out.println("comment: " + ti2.comment()); - System.out.println(ti2.toEntry()); - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/ResumeTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/ResumeTest.java deleted file mode 100644 index 8c51083..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/ResumeTest.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.AlertListener; -import com.frostwire.jlibtorrent.Entry; -import com.frostwire.jlibtorrent.SessionManager; -import com.frostwire.jlibtorrent.TorrentHandle; -import com.frostwire.jlibtorrent.TorrentInfo; -import com.frostwire.jlibtorrent.TorrentStatus; -import com.frostwire.jlibtorrent.Utils; -import com.frostwire.jlibtorrent.Vectors; -import com.frostwire.jlibtorrent.alerts.AddTorrentAlert; -import com.frostwire.jlibtorrent.alerts.Alert; -import com.frostwire.jlibtorrent.alerts.AlertType; -import com.frostwire.jlibtorrent.alerts.SaveResumeDataAlert; -import com.frostwire.jlibtorrent.alerts.StatsAlert; -import com.frostwire.jlibtorrent.swig.add_torrent_params; -import com.frostwire.jlibtorrent.swig.byte_vector; - -import java.io.File; -import java.io.IOException; -import java.util.concurrent.CountDownLatch; - -public final class ResumeTest { - - public static void main(String[] args) throws Throwable { - File torrentFile = new File("/Users/aldenml/Downloads/FROSTCLICK_FROSTWIRE_CREATIVE_COMMONS_MIXTAPE_VOL_6__MP3__December_2017.torrent"); - - final SessionManager s = new SessionManager(); - final CountDownLatch signal = new CountDownLatch(10); - final CountDownLatch signalResumeData = new CountDownLatch(1); - s.addListener(new AlertListener() { - @Override - public int[] types() { - return null; - } - - @Override - public void alert(Alert alert) { - AlertType type = alert.type(); - - switch (type) { - case ADD_TORRENT: - System.out.println("Torrent added"); - ((AddTorrentAlert) alert).handle().resume(); - break; - case TORRENT_FINISHED: - System.out.println("Torrent finished"); - //((TorrentFinishedAlert) alert).handle().saveResumeData(TorrentHandle.SAVE_INFO_DICT); - break; - case TORRENT_PAUSED: - System.out.println("Torrent paused"); - break; - case SAVE_RESUME_DATA: - System.out.println("Torrent saveResumeData"); - serializeResumeData((SaveResumeDataAlert) alert); - signalResumeData.countDown(); - break; - case STATS: - TorrentHandle th = ((StatsAlert) alert).handle(); - if (th.status().isFinished()) { - TorrentStatus ts = th.status(); - System.out.println(String.format("seeding time=%d\nactive time=%d\n", - ts.seedingDuration(), ts.activeDuration())); - signal.countDown(); - } - break; - } - } - }); - - s.start(); - TorrentInfo ti = new TorrentInfo(torrentFile); - s.download(ti, torrentFile.getParentFile()); - signal.await(); - - // save resume data just before restarting session - s.find(ti.infoHash()).saveResumeData(TorrentHandle.SAVE_INFO_DICT); - - signalResumeData.await(); - - System.out.println(Entry.bdecode(new File("resume.dat")).toString()); - - s.restart(); - s.download(ti, torrentFile.getParentFile(), new File("resume.dat"), null, null); - - System.in.read(); - s.stop(); - } - - private static void serializeResumeData(SaveResumeDataAlert alert) { - File resume = new File("resume.dat"); - if (resume.exists()) - return; - byte_vector data = add_torrent_params.write_resume_data(alert.params().swig()).bencode(); - try { - Utils.writeByteArrayToFile(resume, Vectors.byte_vector2bytes(data), false); - } catch (IOException e) { - System.err.println("Error saving resume data"); - } - } -} diff --git a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/SessionTest.java b/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/SessionTest.java deleted file mode 100644 index 550b877..0000000 --- a/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/demo/SessionTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.frostwire.jlibtorrent.demo; - -import com.frostwire.jlibtorrent.AlertListener; -import com.frostwire.jlibtorrent.SessionManager; -import com.frostwire.jlibtorrent.alerts.Alert; - -/** - * @author gubatron - * @author aldenml - */ -public final class SessionTest { - - public static void main(String[] args) throws Throwable { - - SessionManager s = new SessionManager(); - - s.addListener(new AlertListener() { - @Override - public int[] types() { - return null; - } - - @Override - public void alert(Alert alert) { - System.out.println(alert); - } - }); - - s.start(); - - System.out.println("Press ENTER to exit"); - System.in.read(); - - s.stop(); - } -} diff --git a/frostwire-jlibtorrent/src/test/resources/AJC_and_The_Envelope_Pushers_Fallen_Star_FrostClick_FrostWire_MP3_January_16_2017.torrent b/frostwire-jlibtorrent/src/test/resources/AJC_and_The_Envelope_Pushers_Fallen_Star_FrostClick_FrostWire_MP3_January_16_2017.torrent deleted file mode 100644 index 4f287f1..0000000 Binary files a/frostwire-jlibtorrent/src/test/resources/AJC_and_The_Envelope_Pushers_Fallen_Star_FrostClick_FrostWire_MP3_January_16_2017.torrent and /dev/null differ diff --git a/frostwire-jlibtorrent/src/test/resources/Honey_Larochelle_Hijack_FrostClick_FrostWire_MP3_May_06_2016.torrent b/frostwire-jlibtorrent/src/test/resources/Honey_Larochelle_Hijack_FrostClick_FrostWire_MP3_May_06_2016.torrent deleted file mode 100644 index 2aff6b4..0000000 Binary files a/frostwire-jlibtorrent/src/test/resources/Honey_Larochelle_Hijack_FrostClick_FrostWire_MP3_May_06_2016.torrent and /dev/null differ diff --git a/frostwire-jlibtorrent/src/test/resources/Shinobi_Ninja_FrostWire_Mixtape__MP3_128K_Oct_02_2015.torrent b/frostwire-jlibtorrent/src/test/resources/Shinobi_Ninja_FrostWire_Mixtape__MP3_128K_Oct_02_2015.torrent deleted file mode 100644 index dd413aa..0000000 Binary files a/frostwire-jlibtorrent/src/test/resources/Shinobi_Ninja_FrostWire_Mixtape__MP3_128K_Oct_02_2015.torrent and /dev/null differ diff --git a/frostwire-jlibtorrent/src/test/resources/test1.torrent b/frostwire-jlibtorrent/src/test/resources/test1.torrent deleted file mode 100644 index cf06f31..0000000 Binary files a/frostwire-jlibtorrent/src/test/resources/test1.torrent and /dev/null differ diff --git a/frostwire-jlibtorrent/src/test/resources/test2.torrent b/frostwire-jlibtorrent/src/test/resources/test2.torrent deleted file mode 100644 index 0781c54..0000000 Binary files a/frostwire-jlibtorrent/src/test/resources/test2.torrent and /dev/null differ diff --git a/frostwire-jlibtorrent/src/test/resources/test3.torrent b/frostwire-jlibtorrent/src/test/resources/test3.torrent deleted file mode 100644 index d25d4f4..0000000 Binary files a/frostwire-jlibtorrent/src/test/resources/test3.torrent and /dev/null differ diff --git a/frostwire-jlibtorrent/src/test/resources/test4.torrent b/frostwire-jlibtorrent/src/test/resources/test4.torrent deleted file mode 100644 index 5a006d1..0000000 Binary files a/frostwire-jlibtorrent/src/test/resources/test4.torrent and /dev/null differ diff --git a/frostwire-jlibtorrent/src/test/resources/test5.torrent b/frostwire-jlibtorrent/src/test/resources/test5.torrent deleted file mode 100644 index 92c6a27..0000000 Binary files a/frostwire-jlibtorrent/src/test/resources/test5.torrent and /dev/null differ diff --git a/frostwire-jlibtorrent/swig/android-ndk-r21d.zip b/frostwire-jlibtorrent/swig/android-ndk-r21d.zip deleted file mode 100644 index a3e709b..0000000 Binary files a/frostwire-jlibtorrent/swig/android-ndk-r21d.zip and /dev/null differ diff --git a/frostwire-jlibtorrent/swig/build-android-arm.sh b/frostwire-jlibtorrent/swig/build-android-arm.sh index 640b013..1c32bd4 100755 --- a/frostwire-jlibtorrent/swig/build-android-arm.sh +++ b/frostwire-jlibtorrent/swig/build-android-arm.sh @@ -24,12 +24,30 @@ export run_objcopy="${ANDROID_TOOLCHAIN}/bin/arm-linux-androideabi-objcopy --onl export PATH=$ANDROID_TOOLCHAIN/arm-linux-androideabi/bin:$PATH; sed -i 's/RANLIB = ranlib/RANLIB = "${ANDROID_TOOLCHAIN}\/bin\/arm-linux-androideabi-ranlib"/g' ${BOOST_ROOT}/tools/build/src/tools/gcc.jam; create_folder_if_it_doesnt_exist ${SRC} -prompt_msg "About to prepare BOOST ${BOOST_VERSION}" -prepare_boost -prepare_openssl -build_openssl -prepare_android_standalone_toolchain -export CC=${ANDROID_TOOLCHAIN}/bin/armv7a-linux-androideabi${android_api}-clang++ -prepare_libtorrent -./run-swig.sh -build_libraries + +FILE=../../torrentStream/src/main/jnLibs/${os_arch}eabi-v7a/${SHARED_LIB} +if [ -f "$FILE" ]; then + echo "${SHARED_LIB} exists for ${os_arch}eabi-v7a" +else + FILE2=bin/release/${os_build}/${os_arch}eabi-v7a/${SHARED_LIB} + if [ -f "$FILE2" ]; then + cd .. + mkdir -p ../torrentStream/src/main/jnLibs/${os_arch}eabi-v7a + cp swig/bin/release/${os_build}/${os_arch}eabi-v7a/${SHARED_LIB} ../torrentStream/src/main/jnLibs/${os_arch}eabi-v7a/ + cd swig || exit + else + prompt_msg "About to prepare BOOST ${BOOST_VERSION}" + prepare_boost + prepare_openssl + build_openssl + prepare_android_standalone_toolchain + export CC=${ANDROID_TOOLCHAIN}/bin/armv7a-linux-androideabi${android_api}-clang++ + prepare_libtorrent + ./run-swig.sh + build_libraries + cd .. + mkdir -p ../torrentStream/src/main/jnLibs/${os_arch}eabi-v7a + cp swig/bin/release/${os_build}/${os_arch}eabi-v7a/${SHARED_LIB} ../torrentStream/src/main/jnLibs/${os_arch}eabi-v7a/ + cd swig || exit + fi +fi diff --git a/frostwire-jlibtorrent/swig/build-android-arm64.sh b/frostwire-jlibtorrent/swig/build-android-arm64.sh index 461a8f8..2b454f7 100755 --- a/frostwire-jlibtorrent/swig/build-android-arm64.sh +++ b/frostwire-jlibtorrent/swig/build-android-arm64.sh @@ -15,7 +15,7 @@ export CXX=g++ export NDK_VERSION=r21d prepare_android_toolchain abort_if_var_unset "ANDROID_TOOLCHAIN" ${ANDROID_TOOLCHAIN} -export CC=${ANDROID_TOOLCHAIN}/bin/aarch64-linux-android${android_api}-clang +export CC=$ANDROID_TOOLCHAIN/bin/aarch64-linux-android-clang export run_openssl_configure="./Configure linux-aarch64 ${OPENSSL_NO_OPTS} -march=armv8-a+crypto -mfpu=neon -fPIC --prefix=${OPENSSL_ROOT}"; export run_readelf="${ANDROID_TOOLCHAIN}/bin/aarch64-linux-android-readelf -d bin/release/${os_build}/${os_arch}-v8a/${SHARED_LIB}" export run_bjam="${BOOST_ROOT}/b2 -j8 --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=clang-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}-v8a" @@ -24,11 +24,32 @@ export run_objcopy="${ANDROID_TOOLCHAIN}/bin/aarch64-linux-android-objcopy --onl export PATH=$ANDROID_TOOLCHAIN/aarch64-linux-android/bin:$PATH; sed -i 's/RANLIB = ranlib/RANLIB = "${ANDROID_TOOLCHAIN}\/bin\/aarch64-linux-android-ranlib"/g' ${BOOST_ROOT}/tools/build/src/tools/gcc.jam; create_folder_if_it_doesnt_exist ${SRC} -prompt_msg "About to prepare BOOST ${BOOST_VERSION}" -prepare_boost -prepare_openssl -build_openssl -export CC=${ANDROID_TOOLCHAIN}/bin/aarch64-linux-android${android_api}-clang++ -prepare_libtorrent -./run-swig.sh -build_libraries + + +FILE=../../torrentStream/src/main/jnLibs/${os_arch}-v8a/${SHARED_LIB} +if [ -f "$FILE" ]; then + echo "${SHARED_LIB} exists for ${os_arch}-v8a" +else + FILE2=bin/release/${os_build}/${os_arch}-v8a/${SHARED_LIB} + if [ -f "$FILE2" ]; then + cd .. + mkdir -p ../torrentStream/src/main/jnLibs/${os_arch}-v8a + cp swig/bin/release/${os_build}/${os_arch}-v8a/${SHARED_LIB} ../torrentStream/src/main/jnLibs/${os_arch}-v8a/ + cd swig || exit + else + prompt_msg "About to prepare BOOST ${BOOST_VERSION}" + prepare_boost + prepare_openssl + build_openssl + export CC=${ANDROID_TOOLCHAIN}/bin/aarch64-linux-android${android_api}-clang++ + prepare_libtorrent + ./run-swig.sh + build_libraries + cd .. + mkdir -p ../torrentStream/src/main/jnLibs/${os_arch}-v8a + cp swig/bin/release/${os_build}/${os_arch}-v8a/${SHARED_LIB} ../torrentStream/src/main/jnLibs/${os_arch}-v8a/ + cd swig || exit + fi +fi + + diff --git a/frostwire-jlibtorrent/swig/build-android-x86.sh b/frostwire-jlibtorrent/swig/build-android-x86.sh index c0f5ded..b1df292 100755 --- a/frostwire-jlibtorrent/swig/build-android-x86.sh +++ b/frostwire-jlibtorrent/swig/build-android-x86.sh @@ -23,14 +23,35 @@ export run_objcopy="${ANDROID_TOOLCHAIN}/bin/i686-linux-android-objcopy --only-k export PATH=$ANDROID_TOOLCHAIN/i686-linux-android/bin:$PATH; sed -i 's/RANLIB = ranlib/RANLIB = "${ANDROID_TOOLCHAIN}\/bin\/i686-linux-android-ranlib"/g' ${BOOST_ROOT}/tools/build/src/tools/gcc.jam; create_folder_if_it_doesnt_exist ${SRC} -prompt_msg "About to prepare BOOST ${BOOST_VERSION}" -prepare_boost -export CC=${ANDROID_TOOLCHAIN}/bin/i686-linux-android${android_api}-clang -prepare_openssl -build_openssl -export CC=${ANDROID_TOOLCHAIN}/bin/i686-linux-android${android_api}-clang++ -export CXXFLAGS="-fPIC -std=c++14 -DANDROID -D__STDC_FORMAT_MACROS -DWITH_IPP=OFF -D__USE_FILE_OFFSET64 -D_FILE_OFFSET_BITS=64 -fno-strict-aliasing -fvisibility=hidden -mstackrealign" -export LDFLAGS="-static-libstdc++" -prepare_libtorrent -./run-swig.sh -build_libraries + + +FILE=../../torrentStream/src/main/jnLibs/${os_arch}/${SHARED_LIB} +if [ -f "$FILE" ]; then + echo "${SHARED_LIB} exists for ${os_arch}" +else + FILE2=bin/release/${os_build}/${os_arch}/${SHARED_LIB} + if [ -f "$FILE2" ]; then + cd .. + mkdir -p ../torrentStream/src/main/jnLibs/${os_arch} + cp swig/bin/release/${os_build}/${os_arch}/${SHARED_LIB} ../torrentStream/src/main/jnLibs/${os_arch}/ + cd swig || exit + else + prompt_msg "About to prepare BOOST ${BOOST_VERSION}" + prepare_boost + export CC=${ANDROID_TOOLCHAIN}/bin/i686-linux-android${android_api}-clang + prepare_openssl + build_openssl + export CC=${ANDROID_TOOLCHAIN}/bin/i686-linux-android${android_api}-clang++ + export CXXFLAGS="-fPIC -std=c++14 -DANDROID -D__STDC_FORMAT_MACROS -DWITH_IPP=OFF -D__USE_FILE_OFFSET64 -D_FILE_OFFSET_BITS=64 -fno-strict-aliasing -fvisibility=hidden -mstackrealign" + export LDFLAGS="-static-libstdc++" + prepare_libtorrent + ./run-swig.sh + build_libraries + + cd .. + mkdir -p ../torrentStream/src/main/jnLibs/${os_arch} + cp swig/bin/release/${os_build}/${os_arch}/${SHARED_LIB} ../torrentStream/src/main/jnLibs/${os_arch}/ + cd swig || exit + fi +fi + diff --git a/frostwire-jlibtorrent/swig/build-android-x86_64.sh b/frostwire-jlibtorrent/swig/build-android-x86_64.sh index 38f6c86..5bf15ea 100755 --- a/frostwire-jlibtorrent/swig/build-android-x86_64.sh +++ b/frostwire-jlibtorrent/swig/build-android-x86_64.sh @@ -23,13 +23,35 @@ export run_objcopy="${ANDROID_TOOLCHAIN}/bin/i686-linux-android-objcopy --only-k export PATH=$ANDROID_TOOLCHAIN/i686-linux-android/bin:$PATH; sed -i 's/RANLIB = ranlib/RANLIB = "${ANDROID_TOOLCHAIN}\/bin\/i686-linux-android-ranlib"/g' ${BOOST_ROOT}/tools/build/src/tools/gcc.jam; create_folder_if_it_doesnt_exist ${SRC} -prompt_msg "About to prepare BOOST ${BOOST_VERSION}" -prepare_boost -# openssl compilation fails for x86_64 if we use the c++ compiler -export CC=${ANDROID_TOOLCHAIN}/bin/x86_64-linux-android${android_api}-clang -prepare_openssl -build_openssl -export CC=${ANDROID_TOOLCHAIN}/bin/x86_64-linux-android${android_api}-clang++ -prepare_libtorrent -./run-swig.sh -build_libraries + + + +FILE=../../torrentStream/src/main/jnLibs/${os_arch}/${SHARED_LIB} +if [ -f "$FILE" ]; then + echo "${SHARED_LIB} exists for ${os_arch}" +else + FILE2=bin/release/${os_build}/${os_arch}/${SHARED_LIB} + if [ -f "$FILE2" ]; then + cd .. + mkdir -p ../torrentStream/src/main/jnLibs/${os_arch} + cp swig/bin/release/${os_build}/${os_arch}/${SHARED_LIB} ../torrentStream/src/main/jnLibs/${os_arch}/ + cd swig || exit + else + prompt_msg "About to prepare BOOST ${BOOST_VERSION}" + prepare_boost + # openssl compilation fails for x86_64 if we use the c++ compiler + export CC=${ANDROID_TOOLCHAIN}/bin/x86_64-linux-android${android_api}-clang + prepare_openssl + build_openssl + export CC=${ANDROID_TOOLCHAIN}/bin/x86_64-linux-android${android_api}-clang++ + prepare_libtorrent + ./run-swig.sh + build_libraries + + cd .. + mkdir -p ../torrentStream/src/main/jnLibs/${os_arch} + cp swig/bin/release/${os_build}/${os_arch}/${SHARED_LIB} ../torrentStream/src/main/jnLibs/${os_arch}/ + cd swig || exit + fi +fi + diff --git a/frostwire-jlibtorrent/swig/build-linux-x86_64.sh b/frostwire-jlibtorrent/swig/build-linux-x86_64.sh new file mode 100755 index 0000000..611666d --- /dev/null +++ b/frostwire-jlibtorrent/swig/build-linux-x86_64.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# This script is meant to run here inside the swig/ folder +# It's supposed to be a one step build for the java jar and android (.so enclosing) jars (armv7 and x86) +# Output .jar files will be at: +# ../build/libs/${LIBRARY_NAME}-.jar +# ../build/libs/${LIBRARY_NAME}-linux-.jar +# remote linux-x86 build with travis is available at https://s3.amazonaws.com/gubatron-jlibtorrent/release/linux/x86_64/libjlibtorrent.so +source build-utils.shinc +check_min_req_vars +export os_arch=x86_64 +export os_build=linux +export SHARED_LIB=lib${LIBRARY_NAME}.so +export CXX=g++ +prepare_linux_toolchain +export CC=gcc-7 +export run_openssl_configure="./Configure linux-x86_64 ${OPENSSL_NO_OPTS} -fPIC --prefix=${OPENSSL_ROOT}"; +export run_readelf="readelf -d bin/release/${os_build}/${os_arch}/${SHARED_LIB}" +export run_bjam="${BOOST_ROOT}/b2 -j8 --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=gcc-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}" +export run_strip="strip --strip-unneeded -x bin/release/${os_build}/${os_arch}/${SHARED_LIB}" +export run_objcopy="objcopy --only-keep-debug bin/release/${os_build}/${os_arch}/${SHARED_LIB} bin/release/${os_build}/{$os_arch}/${SHARED_LIB}.debug" +sed -i 's/RANLIB = ranlib/RANLIB = "${ANDROID_TOOLCHAIN}\/bin\/i686-linux-android-ranlib"/g' ${BOOST_ROOT}/tools/build/src/tools/gcc.jam; +create_folder_if_it_doesnt_exist ${SRC} +prompt_msg "About to prepare BOOST ${BOOST_VERSION}" +press_any_to_continue +prepare_boost +prepare_openssl +build_openssl +prepare_libtorrent +./run-swig.sh +build_libraries diff --git a/frostwire-jlibtorrent/swig/build-macos.sh b/frostwire-jlibtorrent/swig/build-macos.sh new file mode 100755 index 0000000..3efb16f --- /dev/null +++ b/frostwire-jlibtorrent/swig/build-macos.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +# This script is meant to run here inside the swig folder +# It's supposed to be a one step build for the java jar and macosx (.dylib enclosing) jar +# Output .jar files will be at: +# ../build/libs/${LIBRARY_NAME}-.jar +# ../build/libs/${LIBRARY_NAME}-macosx-.jar +source build-utils.shinc +check_min_req_vars +os_arch=x86_64 +os_build=macosx +SHARED_LIB=lib${LIBRARY_NAME}.dylib +CXX=g++ +CC=gcc +run_openssl_configure="./Configure darwin64-${os_arch}-cc ${OPENSSL_NO_OPTS} --prefix=${OPENSSL_ROOT}"; +run_readelf="otool -L bin/release/${os_build}/${os_arch}/${SHARED_LIB}"; +run_bjam="${BOOST_ROOT}/b2 -j8 --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=darwin-${os_arch} target-os=darwin location=bin/release/${os_build}/${os_arch}" +run_strip="strip -S -x bin/release/${os_build}/${os_arch}/${SHARED_LIB}" +run_objcopy="echo dummy run_objcopy for ${os_build} ${os_arch}" +create_folder_if_it_doesnt_exist ${SRC} +prompt_msg "About to prepare BOOST ${BOOST_VERSION}" +press_any_to_continue +prepare_boost +prepare_openssl +build_openssl +prepare_libtorrent +./run-swig.sh +build_libraries diff --git a/frostwire-jlibtorrent/swig/build-utils.shinc b/frostwire-jlibtorrent/swig/build-utils.shinc index 6e33080..b84accc 100644 --- a/frostwire-jlibtorrent/swig/build-utils.shinc +++ b/frostwire-jlibtorrent/swig/build-utils.shinc @@ -198,12 +198,6 @@ prepare_openssl() { wget -4 --no-check-certificate -O openssl.tar.gz https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz tar xvfz openssl.tar.gz rm -f openssl.tar.gz - # avoid GDI dependency in windows, fix double return statement on threads_none.c - if [[ $os_build == "windows" ]]; then - sed -i 's/if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333/if 0/g' ${OPENSSL_SOURCE}/crypto/cryptlib.c; - sed -i 's/MessageBox.*//g' ${OPENSSL_SOURCE}/crypto/cryptlib.c; - sed -i 's/return return 0;/return 0;/g' ${OPENSSL_SOURCE}/crypto/threads_none.c; - fi popd fi } @@ -222,18 +216,6 @@ build_openssl() { make -j 8 make install_sw popd - fi - if [[ $os_build == "windows" ]]; then - pushd ${OPENSSL_ROOT}/lib - if [ -L libcrypto.lib ]; then - rm libcrypto.lib - fi - if [ -L libssl.lib ]; then - rm libssl.lib - fi - ln -s libcrypto.a libcrypto.lib - ln -s libssl.a libssl.lib - popd fi } @@ -272,10 +254,6 @@ build_libraries() { abort_if_var_unset "run_readelf" ${run_readelf} set -x cd ${SWIG} - if [[ $os_build == "windows" && $os_arch == "x86" ]]; then - pwd - sed -i 's/ JNICALL Java_com_frostwire/ JNICALL _Java_com_frostwire/g' libtorrent_jni.cpp; - fi export PATH=${PATH}:${BOOST_ROOT}/tools/build/src/engine echo "Added boost tools to PATH:" echo ${PATH} @@ -286,20 +264,6 @@ build_libraries() { $run_bjam $run_objcopy $run_strip - - # fix libjlibtorrent.dll -> jlibtorrent.dll - if [[ $os_build == "windows" ]]; then - cp bin/release/windows/${os_arch}/libjlibtorrent.dll bin/release/windows/${os_arch}/jlibtorrent.dll - fi - - cd .. - - # so that tests pass when running on mac or linux we copy the shared library to the root folder - if [[ $os_build == "macosx" || $os_build == "linux" ]]; then - cp swig/bin/release/${os_build}/${os_arch}/${SHARED_LIB} . - fi - gradle clean - gradle build } cleanup_objects() { diff --git a/frostwire-jlibtorrent/swig/build-windows-x86.sh b/frostwire-jlibtorrent/swig/build-windows-x86.sh new file mode 100755 index 0000000..de8caa5 --- /dev/null +++ b/frostwire-jlibtorrent/swig/build-windows-x86.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +# This script is meant to run here inside the swig folder +# It's supposed to be a one step build for the java jar and windows x86 (.dll enclosing) jar +# Output .jar files will be at: +# ../build/libs/${LIBRARY_NAME}-.jar +# ../build/libs/${LIBRARY_NAME}-windows-x86-.jar +source build-utils.shinc +check_min_req_vars +os_arch=x86 +os_build=windows +SHARED_LIB=lib${LIBRARY_NAME}.dll +CXX=g++ +CC=i686-w64-mingw32-gcc-posix +run_openssl_configure="./Configure mingw ${OPENSSL_NO_OPTS} --prefix=$OPENSSL_SOURCE/../openssl" +run_readelf="eval objdump -p bin/release/${os_build}/${os_arch}/jlibtorrent.dll | grep DLL" +run_bjam="${BOOST_ROOT}/b2 -j8 --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=gcc-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}" +run_strip="i686-w64-mingw32-strip --strip-unneeded -x bin/release/${os_build}/${os_arch}/libjlibtorrent.dll" +run_objcopy="echo dummy run_objcopy for ${os_build} ${os_arch}" +prepare_windows_x86_toolchain +create_folder_if_it_doesnt_exist ${SRC} +prompt_msg "About to prepare BOOST ${BOOST_VERSION}" +press_any_to_continue +prepare_boost +prepare_openssl +build_openssl +prepare_libtorrent +./run-swig.sh +build_libraries diff --git a/frostwire-jlibtorrent/swig/build-windows-x86_64.sh b/frostwire-jlibtorrent/swig/build-windows-x86_64.sh new file mode 100755 index 0000000..67a54ce --- /dev/null +++ b/frostwire-jlibtorrent/swig/build-windows-x86_64.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# This script is meant to run here inside the swig folder +# It's supposed to be a one step build for the java jar and windows x86 (.dll enclosing) jar +# Output .jar files will be at: +# ../build/libs/${LIBRARY_NAME}-.jar +# ../build/libs/${LIBRARY_NAME}-windows-x86-.jar +source build-utils.shinc +check_min_req_vars +os_arch=x86_64 +os_build=windows +SHARED_LIB=lib${LIBRARY_NAME}.dll +CXX=g++ +export CC=x86_64-w64-mingw32-gcc-posix; +export run_openssl_configure="./Configure mingw64 ${OPENSSL_NO_OPTS} --prefix=$OPENSSL_SOURCE/../openssl"; +run_bjam="${BOOST_ROOT}/b2 -j8 --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=gcc-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}" +run_readelf="eval objdump -p bin/release/${os_build}/${os_arch}/jlibtorrent.dll | grep DLL" +run_bjam="${BOOST_ROOT}/b2 -j8 --user-config=config/${os_build}-${os_arch}-config.jam variant=release toolset=gcc-${os_arch} target-os=${os_build} location=bin/release/${os_build}/${os_arch}" +run_strip="x86_64-w64-mingw32-strip --strip-unneeded -x bin/release/${os_build}/${os_arch}/libjlibtorrent.dll"; +run_objcopy="echo dummy run_objcopy for ${os_build} ${os_arch}" +./run-swigh.sh +prepare_windows_x86_64_toolchain +create_folder_if_it_doesnt_exist ${SRC} +prompt_msg "About to prepare BOOST ${BOOST_VERSION}" +press_any_to_continue +prepare_boost +prepare_openssl +build_openssl +prepare_libtorrent +./run-swig.sh +build_libraries diff --git a/settings.gradle b/settings.gradle index 093b59f..3adbab0 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,6 @@ +include ':frostwire-jlibtorrent-master' +include ':frostwire-jlibtorrent-release-1.2.11.0' include ':frostwire-jlibtorrent' include ':torrentStream' include ':app' -rootProject.name = "Fedilab Tube" \ No newline at end of file +rootProject.name = "Fedilab_Tube" \ No newline at end of file diff --git a/torrentStream/compile.sh b/torrentStream/compile.sh index 13b9c33..ae5e53a 100755 --- a/torrentStream/compile.sh +++ b/torrentStream/compile.sh @@ -10,12 +10,12 @@ # sudo apt-get install -qq g++-mingw-w64-i686 swig # 3b - toolchain (64) # sudo apt-get install -qq g++-mingw-w64-x86-64 swig - cd ../frostwire-jlibtorrent/swig/ || exit +chmod +x build-android-arm.sh +chmod +x build-android-arm64.sh +chmod +x build-android-x86.sh +chmod +x build-android-x86_64.sh source build-android-arm.sh -#cd ../frostwire-jlibtorrent/swig/ || exit -#source build-android-arm64.sh -#cd ../frostwire-jlibtorrent/swig/ || exit -#source build-android-x86.sh -#cd ../frostwire-jlibtorrent/swig/ || exit -#source build-android-x86_64.sh +source build-android-arm64.sh +source build-android-x86.sh +source build-android-x86_64.sh