第087讲 http协议深度剖析④-http响应详解(文件下载)_h . cc_有时有晌的博客-程序员秘密

技术标签: PHP入门到精通系列学习笔记  

下载头必须有的 不然浏览器不认的。

image

Notice 注意代码里边的注释

<?php
    $file_name="b.png";

    //1、打开文件
    if(!file_exists($file_name)){
        echo "文件不存在";
        return;
    }
    $fp=fopen($file_name,"r");

    //获取下载文件的大小
    $file_size=filesize($file_name);
    //echo "文件的大小是".$file_size;//这个也不能有

    //返回的文件
    header("Content-type:application/octet-stream");
    //按照字节返回
    header("Accept-Ranges:bytes");
    //返回这个文件大小
    header("Accept-Length:$file_size");
    //对应客户端弹出的对话框,对应的文件名
    header("Content-Disposition:attachment;filename=".$file_name);

    //向客户端回传数据

    $buffer = 1024;
    $file_count = 0;
    //用于判断数据读取
    while(!feof($fp) && $file_size-$file_count>0){
        $file_count+=$buffer;
        $file_data = fread($fp,$buffer);
        //把部分数据回送给浏览器
        //echo $file_count;//输出文件的时候不能有其他的echo 否则实际下载的写入的图片大小会和实际图片大小有出入
        echo $file_data;

    }
    fclose($fp);
?>

如上 注释掉 几个无用的echo之后 图片打开正常了

上边的注释如果放开,那么错误的图片打开之后显示的就很尴尬了 看打开图片的文件头显示的竟然是文件大小。。。。很显然这就错了 难怪 去比较两张图片大小不一样

文件的大小是109187ʐNG


IHDR    #   `b    IDATxݬ݅ݜƕO$`  ۠﯐՘ۢƅݭť٫q)wwwנRēg{࠹࠙sgᄏ^^䵁��}��r縜)477'Rӄ_.
ٿ
؞_̿݇|=핯��kϾ��Zڼߧ:Ӯ|ڶޛ/SÚԠyh˖֗6Ǫ4jr몫lG׃ʭK5ھ9��ŕɺјϱٲ䷹\ֿ}S׫��U+��l��ɿ��޳޾bZ6ǸkϽؚmuľԏܣ.دӵ޺w3߾،��A
jPĩyZ婷ҢۖŴvӵI˲Fήח+Ԓj����˧&Ǿڶ霪ퟒ���fPΓƂ1-Χں̊`؞iƁpܬұ?MMMiGJŒtΥ̧ٹ)-_WWеSnㄆԱuꓯ릚Ĵ��ܫ0R��΍-ܛ__迮֖ײʀ
ퟷ�2ZZZRm˳c?גy&0d_ބӠѴdëPÚ��π+<Ӑ˟ZB��ԖAׂޮ]Б顔x��5fXշQw̜�y֫јB!ԕ+Yڞfhȯ+Ի[~ӴӘ��ױ䚡ҒVˀfǵ?(Ŵ࠶1&j՗<��Ν'W]uլڤҲĒKȜs̡ǝ��`ȐOe߹ʀsˌ3��ࠏ^CCì֖Z2��QN9敹��߹畁۲+߳kݔ䷆n$]tҴ홫Snיh9~��ξ��Í��Ьԍ&믿޼��فX갰⠋O?͔ͯ6&��۳erܘ֕YŘ~��5��ڂް��մ$*ԇ:\RjllT��XUʼ!UǢ៾ѐ0QՖXh��ePދ^Uї��ȼõǧͬ}c˖玪m2À͓ԁ~(O>��ܯ࠭ȅ2lٷɖlձו֏i\فIR^Ӗ{饗d࠽��ߒeיƱџşߙ*֗(?jՈ9rŪh

ͩIJz��T滄��턟vί1cƨƽ��߸��ޞν��࠾��؊I&L՝wޕN>��mǏCǎ֧࠽ו7^ȁKCa��#ᄋ^e>1ЩõɁ
 ЉՔ6L߼��ǵҤbmɲ߆Ӡࠝ۴U��Ј}��זDu͓Z��˿��맨֛n܍߼��&��Ō40KO��瑦3۩Ѯ=ŞϿ��ဋ؟~ؖĂΩm2BϡөԆ��:J8ࡥ4/߸ìڧ߲��/7΅:χτ��ˑG)nƧf̖A| ��셊����kѻ��ׂ͐\����ח퀸öӴӋ̮ܭ绸L5؜i]h~��ߛqŕ3��"Ӎ6܈}ޯ��Ōϒ*G,ࠆퟅ�:Iv࠽w7֣Ӊ7hjjכoࠝ녩=ì갃;LΌRÚՠ׉F��իθBםv[y��[JK]юLHꩧ墋/vJΛj5CC\`EƗОe&ܫثcðģλNڨSSĜ��֗ʗ_|t?��/��ܨ>��ڱ{Ͻ����́��CQڌ_AI̹Ф@۾Bo׭ꁒ᯿��啵;0 ŞާH%ﳫԦ࠿��ퟄ�VXaYt҅‰)Tޗ؄��엍6ܬ3e޳М?ʻ}<xf]jƔt&��пn޵Vڷ߻��ퟌ�ŖZ(u؝W࠵֛*]ܿ��x��=ڡRҧ࠽Vik"f66F 3;vն   mw��ߝLѥ��德ࠗ1࠵יTK^aŕ妛nҹ瞻ͩ́
j��9yW
Ԗ\^h.eԅ錋/ݠԿ{Əߙ愓OӳϿ_ꎫϾ‚߾}$ࣳΌ̟O<��ꪮ}ĥ㏿֍6ۈ܁ྷއמzڥ؝ӺL��СCԯ@;ϻh��ڤm͚G%؜¿Ͻ����Ԛ[hֶ֠Mΐ|qcC��؂y1
Ȏ⠪1bIJك嘟ξ:LձꔛԺ݆ȯ̆H80Ѿ}��<{챺lѾˀ��m„ےڮĞƟԖ|��T6I9HSZѾ��5ܟ罐Cɏ?��ݳNEÇ}Եw57ܝۘ��gՎVZi%'Y})\pª³̲ˬڦ۩ࠪPÚ��͔Cy[6޴S5M��/ěʳ·߹[YdaڴӋޢҘڗ��ʶ��עӱY��k࿓࠾ğǟ\͢ϼ��٩䙚QڵС_xᆕⸯ܃U˻퟈�Рyʆ⁢Ǝ+?��zEBkQn`ǖǐ��l؇;Eyٍ7ި/lllЭךJUat˭ؔtr)߰?԰Ԏ;M~r͠7࠹Σݏ꽿إt
)B폽��۫C��O<��h\^É2%LȰ߲Vgݭ#oǮ˓9Vƭڶ:ҐVYeyMʹ
Ƿ࠿ܪǾꫯˤҁ܋.ڨړٔԮ�Кk̮��إ0ܪ빕gjPğ+ؐ΄x��ဿ{%NWѠ<&w8Ԍ3kџRK-ʹʄzܸ0ԙfءͨLɲV͋Z[m֕4碶ܯS��z٪ʫʅ͛g}Х믄zwڥ׫
Ħ.؜rӼ����/㏭����-ů��˃?ա¦մ$ޢ]iQ7ݰޚ}Qܿ��C>шJ^̈́7ϣ!��‹ԗ6ǫwՑG쥵ⱭʬE` ࠸㍕&`ܭםݵיʔш_|��Lj̐ʹ暇M꒚iˉ֕gĭ1ڝ:ЍVӼӏ ԅ붍S顁��^yƼ寻ꥡca<ퟀ�嘟^כo=cLΦj.ć윾��ٰÍռۻwoeˈOy̭��j��՛aǝԑ‘>��=0��䣳؝wˀNщ&ܬˑ��ü����=º҆ۀwƻf{Ͻ��s̫뜥ǀa٣~4F߃HT*&P֙⛤߮ݻ;
��/ԥיV֮bͰ޶¦OgЗ[n��֓Ygݵ͂ͣ����ŷ̒ګλ^
��鰳λשƇiő၃+OӢҁ~AuEѽ#`Kʴfrգ՜��ցۤ��ﳎ:뫿ѻӦϓO?]~����GT��¨ґTŌ
ܔʜ����ˊnÇ˹D��m }۩ƙTkǶ
æݗEГ>L0J! 6ڎ:븆��3Ƙ6bΕ°˙իPÚ��ϥ    ډӹ��҇WZdžFtݷ߻*cɃޠ|0gbuä   āSŖڞ?⸌/#dι谌����ԁ,טbʿPԠ{﵎quї^z1Udh࠸
QO?��\LFϬҔߗ\pA��Ө?Æ
R��[email protected]$5BsJ^sΕJؙ0ؙLȈи{E��ӡ̐)ƐZٝ
7ܠ>EԽԤХ«ڔ}҅고ϗԟ"ȺwࡘAwҽw<w2힉2+��՘۽œڤZޟ蟇IްÍʼئ„��:!Dڂǟܢڮԅߐڐbι眍")т1MPО{�ǩ̄3hĺyҩ۾ט_
j��
ˉͷߢ4ě4Nٮϳٶ s=ڹ晕ҠBƾ 0Cؘ=t˝Yʠ͖ޮż
O dϽ��ߙiЯ_?GӾNĉᦘֺ��6ͩĖ@ܸވ~"뼾��]Sڈ墟6ʆ`A;Duיؘȷ[שZ4'\u��żِZTѸ†<І`Ξɤʠᓸ_{���׉b+&@&Ў!   01H5յ�iݰLՂԽŗ^ʢյNDͤo;0&ǩ̕��䨣rDŽڰo֌ۼ��Ӏݼ��ĄSdL`zT;Ì޵r��•#)��ثѯر@v/��՚Ć
~=ƹФі`ǖ#ć焵=��EؼllA9bŻ퟈�΂ۍH61ב牖͊΂+ġA˨ӏ̊E`%��U_  ¡T΁��نЀ㵷ʃQX��׻�̼��[ɲe[?⍜͐҉ٳLjǽ撬ƴ��ΫҵӸ⋫D3X8��Ĝ͐
��?͏G-2Db2TիW隷^��@!}O��_^Ӗѭ#ܒӢX
5Ə߷႔L1ӽ��q*ɦܬš#cg&OЄ혠֟ԓP{>ɂ߂5טCş߉͔��5��½Ǹ_N9唥̀w࠽Wɐ-ƾ=ꅖ[ݑԥ5��VF澻_k܂۴(g[2l/ԥI㜺O}Do>��͑튽"ǣ㍷V-ӫ5ت #4Q.꘱ܡp��.&蟂?3��̐ېxفђJ+:ζbLj۩MůʶKy߳ѭY��&#갂^3=Ǎ��
绶ؐЖ��긟
Sbῒýt2Üsιrh$*eŇ2l!`ϞHH
܏ې¡ި�� 0(dށo#  RѲL
��$娙��v࠯ǟ��ޣ@ǀƦdu猇{L��1̄È杳NޏٹKխبИ-PǾs
+HǞKЦέiõɁϋX����U |ƙຉԁȻꫯԶ`ك@ۭ˔4˘j΄��b Ѥͷ࠼JߠgҶ��鷂>��g׻(��ԗmEߟ4ݸι荾Կۯ��̪ƛ͝69ˁ;ǑrՉۓrLq4Ƨ.Ś՟hK˖%LJuĜqđ)Ĥ$븘1ĝ ή時„̼s?ծPÁʢ֟s͑ʠذ޷ߛĦڴØcŠ໵몑T߬ۜ:xҿ��3��ؤΩvѸLlν��Ԭ1ƊߟљD O)ƊDzԟʧüު23 Ʉ痊̽��(Ȉo��꩚6̴ƄkPğ'@ࠠ2hƘ҈,XL``”ɦċ˛L    sɁݱߨ&4ۜK\C٧+ѣ~܄p}שCkϽ֖l۩ƛŁɰ^LȐ:؝ˈȑ?ɒBc仛1ຘ܌[email protected] ̖C;EٛPɌtkګ:j)k��Љ6=N!Uٯ٢J��޻۝&.۾ )��Ф˙=zࠜd³cDާЙ0LΌTtiIܮ܇ܪбϲ�٘ږ
ۃЍ|ŔܲΘʙщuJد꿟r٪࠺��Ԕͷ҉б6܂
jPğ@
8mǍ��, ͢(Φ-&ڟazϽ��eƠ6Ӄ��٘��':bďʁ����˶ƙߑ��,ʒh¿Q鄊Tv+\lqCsŖ1ԛCEnːޘ޷�ӎǁ!&U 믿ߊݖ`̬۶ÐDž������3$ϐ
Iʁ'˶úץ߆�㱣j��Ҷ踀ǘ'"ƭ^؈ؿT԰ƚԴZՠ׋0ʼn'(=FKÜpՒﻈ��b–f~ːŻ뒴1ΆÇícrRߕ��̪`ըі
ϕЃ
��v��͟vĀMͦǴܭhS#l̳!��iZŸɲE%oέMӃgաju��兾֠5Ɂ50Z¿׏{��نAĉBbړࠐaY\ο��bǝvԽѶŁ;u޺��䙃>ׁżįڜ։ʸCYٯѣ Šݒ0U͐G��ڟŠ>1۠��Ǔ퐓a߶����5ٚ��JжӁǡIz-f:��Ѱ`.uڄV7ߡĤqÉܡq[��"I+ۉྎ?k>KkۅL
tؑǚ߷5g��Ex꡵茟W;㰸Hȏ#ʌk
ڟ��́
j0- رùӘKРbԤ֑ć锉9cǬ]7ʵ!NW٧s1#4%'`fxNkи{Ȕ*bYaƽƨ��0ݐ}չƽ?(I%ˌMӯȍ0}'ݎy��֔h߾Ȉ͕{yQג��5�� ($٘¸14š"ʻԂ`IܻʛԤ|=Ӯ辶·zǭoІ��ŸіA͓v뚎A/ſƄ��ˎ�ХҨŎẔ3֜ߞ,ܵNϚա֙ρЗȆ}ᦾqӯӨ֍׶Z��q܏sѓżO܆5Ȇvhڱ÷Aˊ[٤=ȷD۳͟t⬦צf7лwtġٵѭ҆:)E!7f}ࠓ#Rш+
ј2M2_��#{rpg,Xϰ*ЎǾ��Ǧܸ[F
~ΠӦԝ
ԕЊCV#
)w��%9#M
jP͹e͙��cͯԵ۪L${Уm��ٻbk볥̶Ǽ��=îǿm
*>ŠĐ٦X��m\إʄZWѝ��ױ��ŐGƟKܫ0킔{ƂԻLԖrWǎ˂ſT裍
MҜ8YՎ밶ȨqɱÚԇyЧԕZLȚ«a+ۤգ��Յdȶ}S
ѧ2ퟎ�*߲朊'^[ƿܐ(ŏυⷿݚ]Ď טʽz:fXRMP
u��ˢ۬"̯ք|>䴇K^řNؾЧ-yzӧAy:՞����;%��VϑƜ5ͰIuAU��酰ؚՠ׋i跌0)یG͝'ٷ+yϟًɬ|��ٷI࿽ų1썬%ݙזÚ��ŅՇ藝ۍĬ'Ǯ쯟@ąڹƆ5؂0φѹn-޶��şҦYۥ嗗ϐܯ݁vࠣ/),ΠxԆ5Ɂԇ֓n˷κ;o9\%��ĵɁ儅ߢ.Ҧч˜ȗڹyԩҢįr:cʋt޽Ȇ5��ǑåXѨ˥$٦8p׶,kPéÂ֔rAZ
ͺ׆Θ#ܮө|҇W2ѱI٬^ڭ윤י��Xӭ5ѳ5轐FXմ6ƊݨAտ‚ŀڔ_!P[ҵɁԃ[Κ
ɐ&٧]y嶗d��ֶ��2ˬ-ڛĮ��ϚԠ3ӜԔٯ⥓ތ[pLРCߟ.G࠰ʌ6Lڸ㈲aƮț
j��̈́��)&Ύ쳫-)ʆ}˒Ւ׻ƕƜ��w��`ٚԠŽȹ*Uҽʺ,ڸ࠺՗ˊͫ��٠AĨʮ\Q��5آ:R(ɀꘟ۹ڦȴ߸J'ȦĦԖ��*lbСͨZÚt6ɩԐ-ٛť˯ڹ5Ɂ
:κ꫽ߩǝ��A
~͠QÉX܌7(   FMmҐާݢ#G̵R.ԫϣfƩA
&X]łϰӔɓԨБ܏٤��]\ͨĬWӺIǏĕjPğ����_ցpԇ駞͊⮖˙M��ġ棿keke࠻ѲϢTYƂт5��̒Ϣ麯ղղԻ٤rMˊࠗլ⢲ŝ|BSͤΫゝtҖᴨǁߨ߽ƊɘߒͿܵ:ꨕ͕͕͔%1q]%ǟŖ��Nۨ%dց#��Vז��߻f̮بyaeƉlj|䆗 đAƌqH~݆ĸӧƗ˖˖ʶW6߹ߎһ��ܼź
BhҏꨑؚښٟKڸ0��I҂ y
쪰ئփE$s2ܱͰޕࠟhĬ%}[ȊNNݿ׶��c69m譶Nܺ��ؚޱ��DGvŋ��?ײ5��Ŀw²ȫҊqأrFDŽ���bzހ߲ߠZڤ2˚݅i\vJېYԡԧmZסԦxڍ×Z����6��Ɗ=׀^س=ԡƿ5��ᚿΎ��VٲW塤j`೶}ڕ-vRک}նtnƇғז]*ٚĴؽ��ʋ*��ΖǩȬ/࠾ۙՃ¾DΨ‹.ѹ朏ν��ܱՑG˷࠼#Ć͖Ï?\+x����ࠗ\qż��|[eϽ��ֺϺ뫩ZvJېYԡԧmZסԦسǡ֗^ֿ��ƚ嫯ޒԎ:K?_|��7N=������[
��Q繌1G̨ѣ<ϣX牧ࠌ݂LӋ/ݴں꫓ˮڨڹ曓6ܟrȡʻᅲ|��࠽��ܘ<��qȽ#.ڤҶ̎ذƒeΞ#ϼrږݒ6tV{.m魹ܖm謹٧࠽ӱ䇧Ͻ��1ǤG}t��찣λΕ}?6lؖΡറo5��ߛoܱڡƛӋ.۬QF��9��7߸䅱S��Ǥ؞zkd࠽����O>I��}ᾷޫ׭Ҭ莖ֺiӴ,;%m譶��ڳ6Λљsݙ䱩Ǿ욧ܑݲ˭IڜNښ۴ؓ+e����[
9��!کǝ��Ґ)pʵ۫ϓM��ߜqǝɏ?��os��؟vݶ_]m֝}��ת}��i٩iCgַ蒆Ξة݆Κ䎚ǽ��߷߹˼X{|��ȫٻSƿԙݕ��ϼ��࠻]`ė_~yrԍ7醻9��G}49챃ՁÆ^|��M��c�� IDAT߰*踚aCǦϼ��QG;Zתޭ؝ǩ٩iCgַ蒆Ξة݆Κ䎘ǣθBݑ,PL8GuT2v홽`=��EQğ꬞j��࠘\؇ГFȊxՑG&˯߼DΜsϽނ��˓ʩ۪pс%Ͼ��ޓߧUYٶgԝۛkC緡z(ܑqa޶۫ʣϽ֬Ԏ:ɺ뮓<��ۘܛkĴƧԃ8Lc6%mL
c=zվ3Ⱦ��؟ޞdN2DϏ;&5jվƱ㵄׸|��(N��ښَեxu��iچdž]o࠿��˘ո=ԷVז��̘1ϡƌѐӒݜu؝��˞{ݰ¸ΐךk-ދDة�؛:#߶ݛލRBQߣeÎ����סjʆ6Բ��oޟߖcׯऔ��ޜ"ݏߝ휗����ۈ��JݲǝʧOijƫ6Y?��ǔؿWk��&ŏ6��ؤÏ>ѳxeȐϔ   ^y啲ˬԈlВ۰Cn6kѿ]ϼ繁߫Ȧډ˗/ӲeP<aڜ6قպǥߺZ6F��͐vfǶ͂��ܳ샋߲vࠚsԪ࠾͟ծcfˀ��Ӻ伓v͂��[ӹlО{ր6چz߷غ*ݲǶ/"I˶Lmތہ΍��؞ͷޞ䏿mӞó٬-캘׭��}��ˍ ݜVe��°arכԜ䯿����/LGԧߺRN<��۫淿��֭ިXR͡۵IֵĢЙ #ʗ˦߉ӣ�!~nj��~qi(ࠈ²��ґӕȲ֓ZoD=fıծKYʼת;“7hǹ碋̷/Kt'5׭ЃѪ㬡ؕǬf
����ǜۚéڣۗ/݄ÂK:ԛo<?ߏ&ퟓ�ƥ���aj正e
b:ԕ&
ڒаªʱpZԡ傴֌ߦ׫dR��ߊ:Ǔjô3,3/ǫ҆̆Ԛ}ɟ7
}(TʶOۧߢ'NԣκJלrK⧟}&������Ϥߎ/��ۺߖ٠׏јQѻRoPm}=FL;۞#RߜǷV��M^Y��J[ەLXȭ:^60<cՙ"nܘMg ץԏ��ӶʉڝlƋր̄ȸ者ǂӺΈŋUr)ܺچ��֛ݶ!ɃỈ"ռĕ쩨fįɰ4ʰ֯3cù֙a��[^hݺq驙دҥ!/ؘ��9m��ֳ툦ڶ멛N��Q:ܞݝ)ϯDގk[h‰LͻߞTԚ┬cϐ՜·Ŭ۪˾<óϿOS:����̡ǝ&]ܶʚtØڊѫ#Lٶ0A˭Ū3Ě׆ٙ`ܻbډȀİӡ����bs��׍lL��#Ɖɘ飂۞ǘލKLD��:��$igB6��n��褅 ƴǥ\^忦LZv��Bvܓ$k&΍ڡӽٶ��B!ᨌѽҘᐂRiꛥƄ@ᣏgҾӟZұ��ǧsݍȹ߁^رž���I%Wh5cҕJƆȯ޾^טcM9�Dĥ&NlP5��Ҡى'Ɍ3Ϝ.��鄎544ȆZθU��ԉ5   wӯﶢPͼ۹є4ے*906ȴњ˳Ƃbbjݫƾܱ
c��tȭϬ"ػ±ڠc85ֱࠑ��¯&��ҟȘ`1ࠤGؐ⻌jЋ��ɡ폵����6ׁ(͞إɽnSֶ��3Ι–
ǻVυZcX)ҩۣɁзؒLŀܲ$pԶeƾeý��
fź��ɩɇ˰Ч࠼Ӭ۫Κ��OTǘ]]، 耮әеk؊pϔ��ن>cyÛŗʆEYLčMΕ͍࠙œl랼Ѡ࠵��ļھի"ࣛӏ޿mݫ��KDŽΎIBFؗǒޤ횘<n<fͼ֣ŌץqNѰʊǁ��X3үfRxԶϏ齇Ϸ5ֶ'ѠZގ͟ȭ>Adⵛr&h"ܷߛbE03ƺΏ_[kqR쁣SӪc6Ш|ܦVNqЭֵfՓӣ��ιM֭ƛߋۈȹŪǨϓ̶ޛǗ!뢨^3L2뵔ˋ͒1ӏ��?1_ۜڛߋd��t鑹࠿��s��s̡ܭ֙f�쥗\ҕ��t6+��4z��ƙR"iӨ놷��O?��g߈ڌӿ۶k?&Lѽ����GϞΞӶ/ŞԞɔaܱɳ[؟Ԉ$٩漯ࠗԣL3ͤˠ,��̴ûb&Ȋ?��֨͜~
㻭~힏=��ŕVԑ#Gʍ7ޤܬ҉8{e.<ΰ֯޴Ҍ2Dםv[��Ľm
yl.䮇A¶srêˬ"Æ
ӛn٥3ƴuיfӥ؞J査ޔY��gɔАt޵؉ʫΨ-Ԑ^ϏP��䚧ޑ�ԛ٦bȒrз֧$3Ϲ̸ޱ����垿��$ڲЈY��gŝIϾٸ&UqG$،࠻ྩ࠿&꘯LjˋƒͿɑĒݝg��fwشieޒ靡���ca3ۗ (UÏǞzH߼��%טBǬ޾Զ)^S߾캫F؟&?��^Ϟ=dɥ֖X@Ɛgp%ƵV{OݞǷ߸S_|1e>y솾�l̫Ή��Ҿ��~ڡĻ��I꣣Ͻ籭.Yt҅Զ竰zXS?����]}(]۴э7޸țөcG��Û믻� 7ܝw߭࠙xh��܍oޯ뾾磴2����RސRʿ}㰰´ܯؼ܋ڙr؝vI߾��LJ�̽��Sť����܀��o{Ӽ젿ӌVІmҫϱhreۍࠀ   'ܠ'Pdžپ۞d愸裏ԓN;Uܯcemֺx׆կx߂?ҴᴍеƮY9ܼMYҳ̽��ԫᄋߒՇz0ͫn/☜pA��˚ݪбǟϙX˝s˨<xОł^?ޓǫ��fҫWФ��ŧ̗8гgO-臺Qǵߞ|[lN˩��:Εÿ[ҿ��!ubGDZG͠ZȿЧՕ��9ëפܯ߱������׹ &՞2홎��ٻԪ4Ïuvޛ��ߘ8��>ڦk餿��{�ƝΩէmκ̵֨GLC����Di+Ɉ?ūӣٍIF+����Ьטbۮߣ����σ؎��Џɦ؞uי֖Ҍ㕓OM��(
ĎnjХ9Զ6Ɵx≚Ґ������mʹEȗ׍ݛoܡ'ܨ[͒W]uՓ䇪DЩtᄋט[I ��fzꙝ    c刱N
۝לsMҍϞ��Ĥ뵿ڵʬ��Rཪ⣑e��ދ`˫NR)֋4մJ܇��ݩp3˖[l—Ѯܢʊʟ$$˻��ΝܷػhƯ߸Ì>��ۘ֟)ֈIp۫ϧ߅_߷ljr؝wʩǜ˵��ΝDŽرۼ淿QʹDȉ>LǺ��ηpÍ7h[؝wޖӶ[Ѝ܅_,cƌ׾��9呱Bќw޹¿:ՑN-hѿ��裏ֵטâ׸ʹ~7v֮˯߈ҍ��Ԛߖ3θC57ޛZ?ӷݙ列vm>-ȻSI֌¾сñڇĪ۸ٟԤ{l��݈ڊbߊ Sֵ��ȾŪ࠽mw݃\ 5I-֔Rٹҍɡ_Y]V͢��jՈ��ﬨΣmYׁ��#䇏׺;޷ߙֺÖҔ׷ӽ&۱࠷-؏ͯIŅ����ﱙ؋QWק臿E��ɚkֲͥy瞗ސ��.o6͵װŤf֚nܭd࠽��̘��w/࠼
ڽ����Ƶۦ㘛ɆǏޜ읿|��OR­ᒠӛE��4&2\
I$րĴ‹غu½ꐿR̉o��yz¯ѣGi  cϚ��λפǠ߶²䇏֋.܌ă칷˯ޢĤ4Bݱ睳(Š8ࠀBȼ¤D}ۯF᫭ʝ��'y)csR׆ԚSˇǦ̈͌3Ψ��e&ؼ֌αȿ֋䶴LէхKt۱vYӤͤ‹.Չ0Ձ̅Ud��I͚ޅFࠡHO>��݆ʈL��^,9@î]ۥ�CɁ܂щMZ-L՗\rɚ����߾������knjęԠaǝꐲϾض��Ohύّ֥כ.ӎ��˶ɷ^˻1Ǹɰړ8A脽֬Ӌժ{͵֖w࠽G:Ɓ
٠��!̙σ0yƴ��7^ 'čg0Rǻٌ氖^l��p֑ȖL붖͍
JXܵ뮿��Ž̥3ce��঵B봨}�ڜna΋ñر㪸13VΥNsNMq׮WXaƌx��ΘdԊ��̊d>pĬ��?NﱎfB4ܳfKɽ (П��ܠȿƞUƹYɱۮ7޴SeǦ'4ࠥc乭kκ
ࠨ녹e퀅hʉ>1��޻wη࠾{ŏ����f[

�ӪՕႱ0\d|f١Ѭ+̵uA��U1IZОcGYߍݻݷ8Ǹ��:곜Tu��݆+dÍ6Jq7ѣlԮý޷߭uӾ긷ڗ��&雑鸞uԑ#Xp鶽͗‡侃;֙ӗ,֏$:)N%՛oߙ̌〞zࠑb3��Bv?PܬӍ��MяЩՆѣοɞä����?W6Ұu��^LV[oοĐ1މ㑗˜?ב ܚо5��$#F͐Ƅ׃f΃F齐G{࠷rdАw.ڽՑKmq!5|��RȫϿ.Ͻ��⋯ޢࠄx<̝LÂ\ؘń;��&=3_6ϾkFڲiQͮD٢~הxˏ֥҅
1٥י֢اJt҈#}cΎ׳̸ŢǑ[��ɟy蝔ٲö<��ߺˊ1hg뭷ޓFΗѪ!��Iu衇Ɇڵכq܎΅_"K.ٔj심ҨϭkӍ`ࠡמ8��b"ȑ͉0ƶ3 `vHϜ~ܚ'Ʌ݃Ȃ賖��o2Bךӊܷ雚z饝~բ6ݰ#՘騷࠽ǙЖYfYŘĸ߼_ަבFꇩ/߸BƕYgޕ֎ʼEʙ·ַM=ퟍ�λҦ`:` ]#̉셟z.ʀҀ<��)ۮ ��CՂƜκ뫮mƴZ��ϝ����:E{aǘP<��맊śoߥ۸Îۆnɻ#Ѷ۫ٲ*o��֋/ޠܭ֛��޹曕|��ƦƗѧ����&ْ綾_qxqٞȗַ̿اĽΓ��ロJƙƬž۷׿��݄¾XƫNܘ��łZȃ��y瞲יgiƙ۫F��
C=Eģ0юg޵֎kż{䒇څ��h됗A؇W[m֊;։Κ`u庤ԏ430`֨㟐xܗsR8ژğ߁jxЀij1 5��V½ ��̂Οaǝ*A!ԉcϽˎcL?+ʹӊˆܐ8-Ii��EnRۉԆɡP܏Ƈb؉ȹڰ.ñε֚έȈ;Ց
 &Hh̟ˠb͢bᱏWk:,2Hd[=bcڐeBӯȘ
_ùØ1��芦6#E[8Ⱉ˿ƙ׽ԹG[üܬšoød˅!80oMM
ʯ˭ת&աޠʰBـ��?��ؿ~Zţᄋqط^   "s՗^{̉'ΑFa䄝Oʌ<83~6ǡь㎑ʘU��%Ϙ ݬ/F̛g嬨ș[mՕց0ԒGp
)BɉݲvӁ퍱  {ܙثϿߪļӉ'ɣϼã#žᏹ衇eι痧Кa—^zʶ⣌3Д{̵碑GRA类࠿މſh=ݻι蔳BDae҅˼��YpE��ۈ߅)-ܾ%ͳМ˝nWǢ˛sĠ3F3Hݧ࠽VǛڋ0̀Y0_^˜#|Њa0悶ߵכjʄ梑>��ҵtLjaR7﹣eÐԕW_]٢ACШ莸   Ư<N>φ!ܬӋֹŭÜ^Bw;ˮۈۮ¹5Q����/AﲫTމIBzƶѫ}&��࠴3Р��Œʈ̔yάƛ  rԍ~뤩m3~[
ÀPüܮ��ۛL
˗FƠȻ^��f̈́G递;��ÌᶗࠐӋ̠!ƃƠ\,Խ����ɩŠॲނ��7qໍٗ6lȚLbBݣϽ3瘚a߸䟺&}ʫଊݠFDѡĀ`0]wݑʢϞ޴o?qŌGJEsĘAnݱ7'ϪAD&şSO=UaܣզğHܶ8!Ԭ$͍ݙu!Р?D)쇊[$РѽȚ4Rҵ7ڔ)C4SFL����ࠇ-��S^ַwݱֶVO_בMҰҾYӺl��
KOšy喕ظ۹c��鶞����ْ��֭wَɎsú��Ո;O9楅=42؎٣aXᲬǣc{ՌKc]ว~ɏݷ߹ѻͶ[컀@ơ\~��࠸㱥͠좋/edᅗV
ɵnڲwݾ-kmʧżކn׌��_߸䵝Sݙ%Ѧ>��ȍXShѰN룽@ߠ����D]rɥZ޹:��оX۰I��yĶˈ֖Nη0̷ߺӲ޿̼gxSΈېĂt��WmZƺCS�¹C��Ɵ@ą}€Bࠩͱꫯױō̙t]׌4ۃ܃́ł��ٜ{ﺊĠ޿��ܠ$ݴԍ˔›東>䑃ٖľӂP٫����ʵaٻDqAkÙǟͭ��IԪ��ѭ1ؤ½ʈ1Ԁՙݴ̍��ʡ_ ߗ^xr܅#ͯϧ:۵uҔнvࠝޤÙl\gکʹX֢1㢁ٿӀmɷiƋ팦ҡ `����"ˡ`IJޏYǻʔW\qŶI邋.ѱc��},ӈ"jKŀ#8HCX��ǁ>Hژj0㑢ϔ5��"e෥޾��aѾ��A��˛ÑJ,Ұ٣ДƏ"کƠ !‹afѠq��:ӱ��ퟁ�wٞY8֍ߴۈ㪋|}aSl[ڙg��b죭`Wz
톍ܰ
݄0¿,��㓨Ġ؎0C+Ĝ࠷࠽��‚ِ��fۧz߹珉$dž8eͯ˹߈–fΗ^zک+{)ԶЬ��Uiވ8,0$vٱ7HߟfL耱A MƠbO nLȬ}LϨRX0ӂkґj̴o֙|ϑWbʇeɥذ۵ߊn];瑢nfX0۰lހó͕1 pAස鷪֓ёԽ1Ԍ��כ_ްӊſ׬@g��̝Ա����׶!؋'$��؄Ý2唕R ދх��ԧϣ'g΁Հǟ~ˑɍG̍Bhìq4Jݑ$وQH塎ͥϣ݀Ä ׃(`\Ƞ+mgݏ8㠊W;$ЩhׅUPJ
x^͑Յ=xʷ޺-аҟ��Êݢ-/ݰŠ6ԕ߯S6&Вď߫��@~:vg4%ɳȕ$]ŃLy@܁Åݶ(/̪2΍*3p0
ȂRV/Gݱ��!Í٣ޚxsӌ��LJgh;&~хg͜lߠ,̐6#u��ɛSӌ��dϼ��术ϗЋϳϚJр>�߸ӖԙfۧQņP0Հ0P ��邇Q    ³XҜѾ(kDsҮڿ_凟ýŽ����ѰX`H��NN:ꄕ��!ʠمL3ᆍ��q}ڹ��±܄
AJ¶LDщؿKڏ8 ɯŠ��[nY7~quܴü#ᠤ6޴ퟛ�ퟭ�䩈ۻϽw;bqfŠˮ-p��VÆȜy)_RIEԅ拉˪!teჁo ��EÕ1匿C¶
ࠁ/k]׿xŶРlkȫٯɿSxI`Ż[o˶GܽǷ[7ᔕ��ƀj��&,i0CҘꐑ  ;̆ۯ߸\|��a~��RȂ·��瞤ܭחу٣烥֧ɲe����ڕͺ1΂xь
k֢֯ש'8c2`#ŸڅÐ&痺ęƠ��άҸΕϿ5��wpD'[ՊF[>��2(ǞϘ㡑≇ي��ƴ{R࠿?ܱΧS!$ćڧɴ
^ 36'םh    IDATƋχ&Մ‡4x旾|ڽգ푍.Җnͪ`໼��ձ
ӝʢ̏;u��9΁Jȃڅ݉wɟH#qݢ^ҡw݉5(ċ��Ą՜BL0
6��ԉtካΤ$B��i&����糁uHp2ƙտ��ńIڶˠֺDs̱걝žØ��L…AYٹႳFQΉ2{͐0
ѮRɚq´Ø��J��Tۄ��.ې٘׌
��١Qdy湊t,��TFίʅDݰ4ڂM��V������A#ٟOP��ÿ˯߄ᩳܬӦD٠ațȲfOIࠧe仐rA٘Ñ��śL;ɷǴвۢ㈳ԭA��̄1#ǨSlwY}��̼yfդxImݭѳ������ٞެ–ҔQמkh`kúYK|DZ*(1гܲNĿpӤk؄Ƭ6ϣ��¦ǾNޞ|ŖᦠBsBÚ騌BV՜`׃KdЄ1Bg㩯L}ݷʠPýǴƢl��Qk37��ځӂS��Ǐ蠥ᰈ_uȾƭ̳�G=&<��vӇ��x܁7-=fl㰆ʢX̍¿Ƥ�ַϜV͖wܭ؋KϾ��Kڹ࠾��B-Â݂-VغՅɀƒ WȠqҐᴨhږfm/訏%HNA+dРΘͰg2݆ԅ߀ ƌݟ&��B̘!p٭РW_}5ՊтörدʒԎݦĩȰ��콷Ԧң9̧נퟢ�ͫϼғӖW��Ե|̨T��igm?̦PPÅޤؘR6me"9��HdL6ܘLùƞzD`y֭h㴃„ԃ̀ÄĂ��ƿ+��ax1Ocß4hіFùˢ-딓֠Ʌ3Ǥ٣Ӹ4ʧ;fʴ:Ң1oŴ?CA÷溒Fܭݶ갹v滥ZְИY[̩��{Jȗi-��փ��–ܑ0ƚoۉ%hզۅ補AxZ��s-SM ��!!ـᛞ,2f~ޒ0-܌ܴS&-[O mª»„ǰRԉ݄ࠐ_;kȺ��z_oȚ0ُٔטw݆_]ȫϣ>ԟ­晻dˇeʽK۰TنL!ʹeMŵڦŻplί~܌ԢZ帷Ĺ)ũ��4��͖ᮯ޽ʎ{ٜ��L��ӈϐɯ^]w��˛nڕإ,łYR    ٣̇GĥL@ƞԨ͉MƂ̪˩˯ߜr⼰����dB+aA4>Շ-ǰrŢp��̵ʐǷ֕WˮܾE��ΐ۠.��U��vĄ��0Օąc!1vQ͕ؽ`Phq̗3el0#aӄtb煸"͕q1\CԦ禋EďvЅfcÅوП aºȋ-ԫ،<��66ܛƈCD��š<aր¢RL ѭ
ĦӔLJɏѭ1糋ީ��ͼ`^̴s��сՄш؝vڌ9pↂǑxƎ��&
ABPƼf渓��3ڂ֥ÅD!䣛 Ƌa닯ߐˉɸ!0⧃X"HĄcfҍ��kצpԾ"ءҙڻIEĖ˛F��*c肵M­#FX㣒',BַΘV̳mѭכ3ҐW��4\c͕H!��γ>̉\‘ւ˜a͠`Ԓ������Ұē��) .䍷ࠎܬx͠B Q[䎇ڋΡ�A Ӵ.3hԮ<£٩aZ|~L؍݉޻ĉ.ϼ��'>ͦ PҐ؜K̼o҅䂁FḚ̀d!ɏل|˚á@ďDd&̕ӈ-ĨދKVƔe"DrウϪږߞm߽ʎ-��<xТ=пm 

謿��<Ɉ��[email protected]'炰Ώم뤐}Dq{ x' ~:˘˟f3ۉչԍͧx‘ߏ聈bҡ۳nj!Jԏ͛?ohݴǗ(HFԥ>̔��Ä����"0Rˠ嫼8
c0ɚL"��Â#ئӠϴE ”JD"렟࠭˶ۉW֐юٯӝ넳8s̹ۈAk3&ғO��̍`Ąb͜܃Y#aR؊֣œ|و↜ۆΑυ K.Ø^c㔒DŽbB熚߉B߂ micՠ⎓屲37Ԯ4C֍߸m9}=
`퐙��ʐcAY��ǘ:jA��ƫ˺ϥ݅ho(.X԰$sФФ#ީÒ݃楹ρ9ׄ1Lj˜ԄШԵ��Ȑe/쇟}(׵ƺQힹѱžCð㙵;r匠Fʐ'ͣO��H����ѓN;]��R ґ̈∃
˵I#QӁ޾ՇᕓOэ6ذ֋b窙$٨̐H҄'0ձؐ4̬C;z{o睭ڍIe?ìZ$Ӭ㬟L8ͨɥ״ܗɿ҇;ŧɹdɥWMˈL|90\4-��psœ/ D    ��Ᵽ࠶Џ0w    %É0%&伋��ضuž͢DŽǴ҂ЗN|dI
ASǙ5i䨦8ȉf0߇d!괍͗����ٹ:$5;��Zp&gҷ6ُ ��g?ӦդįŒ۟iɕ
ߨꑯΝ柍R"kڶ࠘ި׭8x敼ÿﱬѵ[email protected]퟉�°��CٲRH}6ԏkݠ;cC@šǞۮࠃc|≧UؤOh˴ኟеŖ(ֳ֓B��L`܈ք׷޶}
[email protected]̀Ȇط֙$[gAĥǢݏ8@��}Ҭ4ҠϻײLJpͫÏߗ؅ƛnѣ\ӆݹ>ˁܹࠎ:ʮ-bޣ֥*��Ѕb ݢ ��@��oɬ嚨߬Դwͧ{ՔAܘ̯„!ðќP6X;֥  랻(h7ɝ̴@ƪ��Rt ��͹Ѐٍ6ܔРe^`ζqМŠt,z\_fڥ��5{]0yଦC#ӥ 
޺4?ۻGدD٫ҿTx{‹ˋda߁��ݕɒц��3��bׄ۾@Ӯ��`PȢ¹Rէ䔏Չ9郓ߗǔƴԿ��ݻQ��ׁ`ۂ޿    Ž0Cݘ6±޹ћhL,&Ċƌš䢼ɢČlј84C>ڬ��ՠɘ̊`^ah+ɸGʤJՙٴ܌"<A޷࠼C͘ &B��ӍĴǼǿ��$AY
Ԋ>ޖuń큸V��ý(h}쭗I��)ɟ)fYgڥ׎ͫŀ��Ղ#<Sʷ��ӦڄlDğŕӂ`r;蠃ݸ��4-̆DŽ9ùFpĔ#D e��䬡��7c��J?Dp��ɜΰGaԴ7ɅF ţE“ԁvDž  ӖTˮϳ1gࠬ؛֍Ǫ޻NJ9;ڈҁǯMЌ�ݳuہtud��Ɯנy晤}Ć֌ذv؞��hӯ_baϮ웠��}U@Ȅ'̭֍⓷UƴpڴցҐѲ6V֏zïUڌ࠳۫϶ͮ{1׊B4hҲ+͠㣸=瞷ࠓՀڳ֕Vă쒇��Ȁ{Xࠨ/ؠdX)`ɔͩ��Ƴӎ}ՠfeĬ4B˂e>PJi,#��P0Ԑ"4ĝ˿Ҽ͓ԧ]̋Ѫ0)͈NVr2˻$JCԌꖙݲڷ<Cݕݥ��'}'Ҵ䊋Rn��2qܸŋݦƧ
ىҬ��Ĉڵ݌��Nȕ%ׁީXɦܬҸ‰ݔݜ~���=��u��ΰ˴խߎЈOpL$9��穷��¦ϡWǏߢѿEď+ϼ쾯$N����eʛXɰaÒԏ>+qZۦk׌��S��  0ޯȕވAf��8ڀ2γ2“fԡÇƭЏݴࠜ|��'⩉SO=լךjꙛɔ܄��툫}̰:G˛㱺ղț��¿��ԃۑUߝ?ƺ舾⤇͎㷡 mqÕղ̇������ݗ憏Ӳgٷ;œY치鬵3όYܞ��t
ǧdܟXʺߘΣ͇Ήֺm߆ϟȳߓv��DԾ)7WΏrv:H��Ƶϥۣץ��gʳ��/e㻩Ýzi
ևϟô<ell��mgl]ƪϋܷqnظ䅿
lNҧܸ~��؝8᧌Ó«��ђڗ@߽Ϙݶv1Π׏ꉏԱ։u��IǓ̍s࠸ㅸƱퟙ�ѯ顃?̧ل'��߾��h,��Ɏgܺ޺eH鶞GȶŶ$Kč$By  ܘӆٰE‰4CύiVvĈտǤʄ ؇ćקf9߁b¤ɟ.>ܗѝđLḦ
htlׇ��ދi%Ҥҷm��ʪ壂#}܉Iɉv⼳)ŠՠìɄ)Ӷӗҷ޻=輣^K��;;͚��]!/ꘆҐפӆӠ��~_ֽ<غ]N3ѓ⌽KّɎDz۞šȩ<b팤ڙםט7֕҅XFͼ̇?ߗܮۑךˀҬ֌ɽ1Æࠬнי��ןZȃ=����&ŬqЕ=oՋӷ+оq?CɂǢeIG:ۖț:Ƶ ؏΋࠯ᅗQ{?fCҢˬݮeےA00Ӧ㸊о��~[ʝ ֹȦƐɡuxߌ£��Խ[mdǜإ۔����\нƍ����O��ȴČ̖ʏ$ʟϷ7ǻfϞw꣨C&��차صd#؊?箸ة?gm_��I˂ֱ
}۶�>&͎fbټ0BLфҙĴ΍ݮԠŦnc$޶v^4tGhƽ6<ƶc��1׬ѯ܏ه}ϣ%D,˥Ȭkڐ:ڍʘ/  ԑґ?טl־[email protected]ʘa��Zq݁Ҥ}��2DVžج��2쇛Să5>¨����ԪчҪ/W��քcc͐��H(cʅ踑욭ᬵB筆 
ɈΩZЏޚ����ҧퟔ�ưȽۉꇜޘ,b֒>X_'稱΂   $7fM��ũŌ삣d;Q훞߆цӟŧQƈאՠ٢AܓPz��ģւ֑åqżL뫇!X‹ʋֈBñԴJƈͼ䰽��aʓ
`ل0L#̳ӼCҼƶ`��c2ƔKؓƳv��Vc(6eg5Sc^ҩȦͶՌٽ‘KƑϛۊ֌#%-ӊשIJ鸘蘤m`̯FND��ږN߿=��}Y6_6&Ӛh؉sg&ڈ~ٰ8п7ۚIO0
!鲉izÚLߐeY$��czbtяM؆ɔ
}��Ζ3ΝjޮzhqȺ˲"߮&Z΢dzѬ%DLaƿAȭQȓKl
wԞ؏蟏'O۩̕SShL4bW^Վֿ+ݰ
cԺ:
F䌹ڶNUާִθkG!ͮ
LϚϱ˚˵7+ վЁ|?/Մi͘٫|ȸdnCV��ߞ��ùð46Y
/$_֐Ѩ��ؠj!1��׸o‰Gߪ��ʦƜ欌��p%ЪÛǬO��ص톶"ٿܠ��!ʗ>c͍]չ
߱цRz߸ٌޤFIJ؉Ϛ泺kϑ҆qL
ߙXJ֪۔æɠݙ=I̤6m'h՘ϵ۲ݙƕgl!��kk̹ŵ扊յ!c͙“؝��˗N"w'ַUxY+≊Ǟ߆̜瘡Vc:q9̼pұdصq,mѱHGࠈܘڛm䱞gbۺݟ۵ 䫍ۦ˽ϵۨ����⦖ܾu&Řc7sӏ[ֺ��OѠ¡Lس܌’߇x͢۲ӱL,»
iܢɱ·'IĹΎ[ö߱<ŵֶ5g̈́��yې̊$jb"ܢÅ|��ǫЅJ ��Tή^ʜԑj)VřŶCۿJ}»ޠc]ɽ[lԖ些{cƭÆ"ͼ̩ˮق'��եV,>\';}…b ߑHڙ޳WK]܆䞨ΫֶH”ɩ(
΍Մ塽��(h��bݢ��ݬ˫؜
ㄛ*A.ڧȩ  T@܀>ڮz'Վ��*7ܵʻ��>yHҰʷ̙ݶ^ܙЦǂͅӓZё˙̎Д'Ȁ0WG&Ⱦ =HǾ
"좰ǦܽDۙbβ٠ކǓ$��ˡȕoӴ{Իĩү0б��u��2ޛbͥ劤Lh̄iL-��߶ՍO�΀��!ǫࠗҡ귖~��NϚ艁L��-Z3����٩\쿛{öܕᤍޘM<ԣϣ␬5ٔݴbࠌȆ࠺��յ�� ӭc̹Ɩ눅ޅٗùݕLM͙`歙!†;ٌMÔ��ɍ[Y!eڳBߊ峒釽ĜIEÀ̕��neFI!��Ӵ]žۗ*��>Բɓâ RɊDٗ+/��[$z̧xڷj܊QkٖͨG��+TʖӜǘ��㻉L(һւE)Ƿ��Ϙ
Qmde)UꯕJߘfͧԘРŹA̚YǑڙΖijfF֥UZ\㥮��n
zퟋ�̵ُѡۍ̬ħ͘܂̩mٮEٴ8[`��̊ʆ3ݱ0:яaa&Ŷ&ҡلyЦέƝe%Ἁ5ɊŖ֒Bⵍh��ԫܾɛѧޭƣ&3χ    ſLx>€ɣΎFʢQ-͗O唤��ɕ?a,��ӿԣ`펚C^ӎ��r¹%ԝTϊ0NΫbࠫ޽S
AӋֺ3.Ŗɶ|ǡڠEhRň��Ģѐ࠲*��m
)ó!ɿ+XwbAյٯ$԰NЭ썼&Ԛ|nճۍⴳAا७γZ`޴ͫ׮%~u܊ŮΘ׻ϛ��Rsꅍz׆ڐޅQ㺂͊>ѵj걓帰Ժ)Øˤu۠٧jيɉ귮`ڸח8ԛ;GWʕĵ˳DĚ7vΡЮ粗ih):ͨNړϮ۫;eۧز-Ӡې�ޅr%1z:ͼ(z}Рǥخ`?-iɖXt}jI٤߫ܻEۘŲͰYjk̰Ѣ癗a啔Iٍ��Ufa8~͞kҐ
Ǚ׫��(I㟙hQΘꏮďk᭭ѵO2E̔x��_��̽zġ잽[ˇĩǎ؉MӶFㄟӧ`܉0^ف۬ɨI5˚ɦjˉٱ¼媸Θm0OU#ȱĞ̄پU+ۥퟔ�˩٨Șڦ!&ұ)ګǵi;�� þG;��Ϧ_˚֕̓za!6̅٨ʘ燡��Uʞ9ӭL
9cܱ3r0⇋7ɿ|˙Ǭ&ݬ%š۫3ʼnĘ*
آÜ}j02XбɺC7箹G˭��ׇŖkOݯ3ג[email protected]ݏ_?Y?|Nˬ��榵ݚۍ
Łг2ykʹZ#˃P'ߤCË#ߗ��ۏܧϞڿ<⿣࠼\Mlʙ*5ſӂƬYHspz˳ϸJ^]+��F6MՂ_JҰ^ڑڨ����<ޜҤ*džJʨEˉ*˕`f[ퟒ�צןࠠߠpŌnVǖaغۭܜ��ѵS��ڒܷķ=Ӛɘ3ꪚ?حɃΕ.3��Y^6:��ҽ֚ÈۯϚM*x-״Ӱ)̙⩯��f*Ξ׊WLݓ෦tՃϺdșr˭4Ӛֈ��ژǑ´:ÌޛИӽ׍ޥOQnҳ��$ˠҳ㏢ ʎTE)Õحä}c1aɷǚULlᚦW͠Sք͖~(㎎kŞӑ3Ǭퟒ�K��ҍ˿댐cRƹԂɺ��Ź )AOŨs��ɧ%Q[퍵Rʹܒ& ��F��Ɛt]ŋŸmڦ3`óļδd|ޡ��6
̺߽��Ӛl͢>SXVȬ��ݷ޻ۗɺ
ցl��fûı9ǏDŽC麈ƅ҉~K;ҊO<޳ܯ߃櫴ך{鈉(ڊhΧ.᭹Ԟ6޺��cuΚ*԰c࠰㏲~пӺ��sέ̽9D瀳z鿬s֮ZŢгߦÃ7职ʲޢ۞̘:Ͳα.xӎDZީ$2_nj҅M֍zE	��ӏnR~텙GݮΆw_ַnچʍ-ʉՕۖ8͏ʹْ$EȀ늭zĔJTNVҒ��̗CչяR2ޱMخ҆ང돽PfXyu1{£~ˊ무Jߏҝӂ唉ߍ˖io��㌉ǫ͍쓆ZJߛo+)8#v^ܾhؙ̑A��sÔ.9K˧ܦ-ݘו3����cGʹͰ9ҸѩÝ˫ .7>AӔŕӹ҉ݤ٬TlϔeϺOЧ꺺䖤|rʽ    IDATbv렺衺?*>8рퟰ�9wm߹fZD��҅��仌MJɝ]Ӵ0JdԓÆə׬-ܬL]d7i[Ƕi;fLϒ��ɣR+ulńMࠈ̪_ղ��d��w����r塠2∍0g&_ǂ   ri;{B   >챃5m��تCBˉ9kY��k��Ъ`uџr4ƾնգ80-ڛФ΃ɦY҅ҼعΪ]Ak4Fⴏ����Ҿ5G֑㵟Ǹ࠼rȜ}��ȣՂ߅IG��׽ň$g稬��3f͸,H\omй㾘w>��0sΪ|衇۔JLXŰߎAϖȭ9%?$����ኜA֋ֵ͋ǏӴ瀬IJѝ��޻>|契⠉ϯߓ޽ΨփJ䝕����նȠ<��f��Ĺ΢ܘɳ��2��K=\ݿ8ƵlǾ"樘+Eƾ��ˣ"ާPͲ٢��[ӖR
ԢʵuĻGd摣eÀR霃ꟽCꟻT
Йb)ڱηߘŹv
Mڛ'ֹᎬіeʼȴ^1Ҫ*cڝ��˶9h~?ׁ��ܣЯЦͻ⻭ֹ\ϸ3ӊ6։ƌͅΑK٤ΝzɌߛ1Qгp̻jڸ^^>襹��쥝��뗰sÒ±p?}ì �ۊųܭ��ץˈ&ѦMPΑFCǼƦ0֙҇�ΩVhВƤ٤ϥaԼԭ0ҽ��͒>풇Ӎ6ܰmٽȇּ��촏顂ܩģψ͋×2э#ƖݠԬ٣à&lإᇰĘ"ņ9��Ymϼ��5?KKƎxs?۳SO=̈́Ь8vخĂ}eěөf߹v3��Ȯp~Ž:>·=ؘ訋дvȦHMƌĖ̜߱9$㻝䨏ǽҾĦܸ5慐Ɛc>ᱠkɄqx7Y|ӲæР'#Sd<BࠣӬ߂f̄λ0ѠAọ̀޻ܬb��1ퟀ�ܷߡXܘ†ɑ8����뛵<`nIَI$̡1C悡zX/0YNKQ›��ѼHܠ؈$ϐGîR ۙÁ㣛İØu얽mܩȘ��r櫣bVÒkܛ}njژѣ55cDBϯ䔄<ؼؘȳԮ$WϤl��†؀͡ߋ|��Gӫ3ȉβk|WE5նJ翶E)Q](iväئ��Yݚݩw܊›ԟ*ᰃ+s̸qࠅǑ��Ȍ˭*Ԍ6бڲ4ٵ0ٟ)-Ѭ4ᇑ-ΤܫNձfǠݜ:
��Ї/ެ]Ǽ$㈼ ?ݹ׬wӍ2㕡ӫ㵥ࠅWIsߺoप޳JЕWצ؇㝳ɬΆҦG~��د߽ƧְدߠC]:ă_JF9%戇׻Ͻдǽ��ۍK;\hٕ彡ࠨݴ~��޲Lz^Hzv͗o߽[ی5Hz8檤㐢p¨ܢ¼:Ζ;ݽqƁ2pҗ̛OϽ��Ţӫ܏R~��òDṢ	֝SںPܜ۷&g��@����Nh/՘-ȵҝEɃ焦;̖��نȠϺ1Džړ��UՑÅ{챺郢/ǙRَ׻ޏ@ʳʅک9Ï@˥'''dі[豩0ԡȍڍy஽ÀȢc>݊Ȥ��‷߻T3%��.PـX÷ϣp��ɰùփ3a@ԃSشІμPߑܻɠ҃ȋ#2۴9(ބ��}A5߃ߡޤWXAȰ��69٩+ܡGR— ژ—��LٝĸƊਗ$6ȯĹ>_2̥IӉjݜƶ裏ꒂ_|ϣr䒇永[Сd0ՖĺðᷜƠ3��و2
2��.;Ǎ9aޙ'28·!鋏#̊~ïv(/ꘈlͶ޵ב덥ن!i_҆Ȇ㈝,#��#˿��-*m��ԴӆǠ2ЪB    ঢ়ؖ��֣ퟏ�vT˩ٙҾฦ~ʝm4��іߙ0eïՀ/4â簚ջ͕ࠑõVׂF܈��ʋǐ��IڟāuF&8♟W{oÌܮJ��ƺI맙}߃R7ܱ��“К蜂䖨բ75?։ϱ҂࠾)]ؚ_Z껈wW擏ޖ1}��攮-%������ǜE%0դ'ټy牲쾷Iݣŋ;]䈕֐ߛӕ֐{
    {<��|հbӳλd��޹oѷ��ڻΎH̪ӷ⓭څޘ7Hӝ؉产Jݰе׺ⅹ����۶܈יg҆矓����x鸍}gӾ?
��)ץέd��טQzُǞsʈ��GĆ:f#wࠪŒ˥ۅ꡹Qߩ[<Ş뜽f蘲烏ɻϮ.��ࠬ��K��hQ40Ꙟa-۾��bƑ=0ͱݓأλLJcdTǂfўpƒӱĚѶ>��aѸҔ!وʬ|ωBje1q-ɯ䡆ԎΪሠԅȭރĢl0)˶0A#nҪ]Fܡ0Q41ۙtằ䈉)ǜ˄bsǰӇ4^ւ̯秴��6!408B
@Ġ_әf럹 ۤ乔�ᕳΣd��}����ų悂^Iߥ0쭲ܬݖ��\��W��'ۑ͂Ԫ��[ΐ?ށÀѻѵ߿̹㩇A40͢Ƈڤ1ƅQP-
퐓0������EӾǯՕ瓟s��՘ͨuYĭx͚ x}ކ3"ɁY_0Ɠ+
����s��m��+㫴Ľ7ۨèM\6ɽߘPaٿtZL͜%dzí"p
48fÜqε瘵|͢«Mzf%֖ٽԏ?#ܮډjvƱ��퟼�ࡪnjz޵ש:bďꃡڪ싆۬·ުx۠ݩxuԥˌ\b)��欆   ҮߒqZߣXaNnȾ[w߿��秩qh    
ݹ겠."s:Fޭ̶ЌŤ}?\̺Ԕ;ᯁқ��᪇݂ٝFݳ˜��ݐ!2`ܿEà帕ЧϤǵʅؑޭÖ,��әֲؒˉ8΍��FǦ2m��/מ߿��脎"]Ͽ퟇�Ͼ2ҴHХו㧛̜uTMʼ޲ڎ1؋O؞(Ńκ��лɗǜ.ő࠺?ࠂKKʯ)}��ݰջм>RȌ껊��-ב��}��yy.2⑻ĩ2Н`Į޽&8㣏D_VGЗӧλKZn��4ÑO< =ڇיuoɟiVՃF,ԍ^`Ы¦QNƌł!؂Ķ瑖ˈL‰)ӤgV!���BޅțBı衟ۆI$��gŋʡ��āI��fV6Ib߅Ӳ	8 $ߜۏ&EbƬن˧@ֱы0?��zaZvڳā4ŸےmΓFΐF̽L|岤GЮڶ��#꟨ϼӊr؝wɋ/ܨČDШZ̭̄⛘jb\ϕܯϽ��ؗɕ Ýg߁ڸ+ө毤b
Íö͋K>h`ʼĨaĦ5Zp̑">ٸ3��ɑӎ?ǭΝѠs4Űuo࠽ޚx9hmɶпr”⥛تï:ߣBǑʼn*%Żܧɦɞ\ؖ̌ߪ謢Xa瑩H鵷߻˰dg湍߶רa޴Եs'ퟫ�҇+��2ƪ 'ە8%՛BȂ/̦Jջ,h��ȫ˦e��gޖ[nyڬӋ擋/Ӷcq��Ճ<H3ش7o",Ošŝˈƺ؜sMpx.듵Қˋs٢Ȕ ͮ◗غȕޟԝ竖Wӈ²[ߞӛΫ��cϞRϷ볙or��Ŏܩ��dN܋qȝdtø��em7զߟ٩?ɯ˖+W]
E��'��֙]T\3^ί?ԁ؟/劣䧾؋Jkͣο��_Nڜ஢nĮCLZ
ڟ��光㦧|sɬ߅ڻ��tM%вط_ʜzǴܢKڱɇ娋Nӆ錊+K��½ퟻ�Ÿ��֑��㱯Ņ帑"ǜ)ݾ|GMǿޥ⩗ʿԷpvUU࠿:螻3ɤ'@B ŐBՄA@ʢퟠ�ʅAСϽÊ؞EQ͘h
ퟆ�;fB   궊޷ݻܖYwﻓ(">࠿��fʽ謳����؎밐DІއɝ˖˹֞uJ= f՜Gċ]aU~wʔg\-z^=]69뭙֟A׽ϡӾ~ތ޵F��w͔ဘV~뵙;��ޒs��툥D8;oyܴeb`yt@̐ ɕ̊ҝxᐔ$Ɓƹ"șøࠀ%࠘Š��LjDˡߠôݜ̕&0f$b$u3Фʱ`ʡ0 ǹ۩ȩ-:}²̆̄Š܁@vŋ̛͎{  B>K䆻|Z׳=���߮畮만��ىƙٸ]ۆaఌލHLjVϳKӹj_ؤ҂aV̥瀠 Ɓ9̗A$6 dV4`إQܯ‹ڟk��гΰ۪͗u4h,<׵坰��Ļp/ܬ2ޗgPϰbӖ C䡝`��ʷVҰ̂�4ɟFoL|��<`ðѹ��Ɓ+BޑЛn����OƬJ+즇#
EqɣݎސBࠣ.̘࠱ηצeKQ ȸ��Όަΐ6lj"Vٿ+�� 6Ü֧̆#Lp޾��&ΐiXIa`}b��Z=a⾩ލ`ǼVҼ`5!ŧ]EƇ~��뢁A荰ݰÍշʳ  'N݄Ŵ؆ᘻڱ͆zיg먘˯}錫8WN^��ǗcԀΖ>X΍̤H>|ЌؿWF������MGIeڴھSna��ťhjBأq{헾ό_׍ג錠ωӠ܂@ЙS��`����r䡁(àϽfƍӡ.۞yXǭћlxbЬ;(oة��̲ۦإj赚/̥֕בĤ侇Kޣٔo࠙מzԔ࠺niϛvV[NJ誩lazڅl纍ܮ!̦ߠ��ʸќտԆm7Iǒƥ2EEۏ=mZaA.����Ȯʫ\'ͦџ뇟ӡjE͌Sաhŷ��ߥjͿZApӝ�� wֻ~{Ѽ{ϗeԕ̥۳?+֮aPսד$з˪��ܫ́G܁(零Lꆎ]將޽Ρذ2GͩáР9zйf��Ü͖ӊ��̩Ԍ#VPǧ��̙fzꑀ”
(Ø2AӼ��    4Jl0Z嘂آʡVv١듃›贘T9��`j3f��ПcŔʳШٿkĂ3`SȎҵ��ؠåʸX����/ށޟù��}؝T{
    Y#yc^D3۵؝ֹ ٠EۆӪ=즑ʘ����5E̢w��췞xBү1xə ڹǠ3eç725{ƴ_1kr舁芫ВԹܞ��mߠeဨ瑳��؞��44߅Μޛu軷۳=/ԟٲ˺ƜΦʆ38ўʲϭNJ5y܃m¹ퟹ�i7Ě��ʯγºࣴ3S#ݜ%s��z㯜ܶޒq �� gнC@ѥڌӬڶ߯ڨ��BеیնњÃ0ȧࠟQƩꓚ&VūϽ&<úޓĴnݘֶ@Ә��͎ֈӶ댯ְꪤܷΙױ´м@F߿޺��İLjəOJeʦI��ۺ^��kZӈ��ϺTѸƇߒʩчQ��؉FЎۺuд߸֌tMӾ����+ѕٓ? Ņߕ5K׋⫮ю蟐��cGKӞ#ڥV،̳��nߎ6^ތ׮:EVſ͍ZҒo|Ujмִ͛ĹõfEj٥ѫٲ
 Õp# ݫޠ̦ό ԟʨӯݗT߹e��쪞pڗvᶻҷˤ^%����6٠=AۣՇɲƷjČMΙҜ֭_ڒuڃ ӷÂ꼯ْ��ࠌӋŕ̤��=��5靾J*оޤaΆަu'ɚ?-׎`Аۀ֞ɰ��֯~��҉̗ДÃʦɧf̩ѐ|찔ӢÉ5vԺg(��4B>Cƾag  ҡѡevݱo
า࠽��8Ę>퟇�LȽ���Țޡ3'$y 3_됤oᜆ��۴ۣ"ԫ珟Ȍߞ硦ؖЂ́ԐlѰqϠ̦̦ƫs_?
 ؂舉 Ӄ  'ɵ5֘؎̞‰cۦsퟝ�x>>S`7å��ĄzGӁQ*ъڃՆ^Пɧ:::[��N̴[O4Ͷٞ��܃ȗRljìѨڧݹϪ`ĜҎ1κ��=ğ͘fۈ ̛��/<f༧Ǻw߳]
~Jٺ䪜͚5Z瀍łϽ��õm(ٲՂލ@pyD҂#?��̂`��҃ʳퟟ�k:Àى   dc࠹״ꛏßo煝ę!,ӷРL
T͇uԊq=ûL��΃��{VΚɩ>oy̱ӻﻨOئٮvzū^§рإKש`Eī��A)ߏ}]ܵ��Ų׺c̼ٜxٔ��ϬЧ猎ߐ��զȏ׆[ϕ瞇JǶ܊1f5֊5ѡeʹ��MڐðĚe`ր%ڧʽ��v
sȄmfγsd盾ڡß
*����ᮂНa��؟%rԌ۪;9l谡Б鑼joӛ]мⴲ������]g鋙dԉ<:ŷًR9܄v΃,僠h܏۱ճʠ   ͣȫԅ<2>��=(Třպ-��툱ӷө��o؈\U=��ɍ̨ࠪ9Ďќǎ麖)ӡķ9\ǼtK��حצ��]���^ڿ��ё��ɖޗێzϬ}ūƫ��ә៼鼝Ш��§F¼��Ƌ9��Xقi衰Դ"И_E%uퟯ�`F؁РڃTĕ|@ŧq߃\0ڀL0ǡƃ`0VE%jPQK3ࠊE��I��Q��
`‰ۜՀ"modˀ{F|v��"Á hbl��côݓڏӁӞֺ<R)ڵ\ۤɲLHHکMk詝5[捯'��YH��Mq��|_��A ȀSᘛυ��ͽ��Aڃ4kτD܅/ża��oޅҠ끦A��ۓ蚃V3ҞǦD=h
a��ۋ}?ƏŒǽȡ좠��ڦ>ࠍ6ژӇͼP⛀#Čʦɳ t4!,.\죠PĻ ĠTrΠSߥ꒥z6  >n��Oݲ˟+424Y|܀&ߣQbefܛB(ϸ袋TZ2OLԘ"ث��Ȳŕ؋҇ߖׄ픟/璎/f��Jij/x֚4mā4c脡-҇˼AɷƮ s֟��шČۙ��嵇����Ǜ%tնuМ|匩7Ȉ{��ђ��ꠈ|ˇ٦긌zLFa۫²��J]��ߖ)ZE࠷Oߌ࠿UәԜ$0��қl]z׺ֶ6?��#ߏȂ��˝ӌ(葠ȩف؝��‡澯٦޽=ӘوdףҶ$����^ϿƴTͯV벪7T쨨-ѦGڪo*݃ܛ=⾷ߓC[t��ē]ࠍ6֚c)ϰοէD࠷.{����ǴهėЌ뵦Èб2��څO˟~����ʢڽ��vە6Z��%����?"G࠾8ʴo / ӁōMȁ2ٓ`��Ă˜_��̄ɬCB��݀0]᱐懆Ģ qɝ݅߰Ҩ95ī xػǜ¶̼1AŇď즱tx׉p3ۗţ Ÿ9܊ɋʱ��Érw࠿ 55>弡}Ϙq݆NцhRiĢ��KĖƟgb ͉A:'ퟙ�xѱي͚HեŒᩓ0]"ٯk˶ʺ"ʥ&5HyU@CDžɊ װތছOSᦖ̌Όs��`Ih?ȢўɝM잫ζɰƶƻӆYQsjϘ峨ŃȜH0в_4��2?υ��ۚݹ暁ӛ3ɵ͛.1Mơ{ӣ~4"c��J;N̑T࠾60̢a9��@lܫԩJ!ӏ֧4ͣZծ˶ʵ䈯$矻U��@J!퟈���ῄЯܫxf7ۨà־F#>Ͻ�� >z#䑧鮔͗<ѤݱPLܸъտ͋,    IDATؔ9ܐ;4p+ߩ��ځehOӠ��]��и̪A־52�ȁЍژ-]cFʦo8F��ʐ!e��^V��Ψ6֨Pؔ@Pڂѱ&|��뺟Շ0\5ň{໤ҟ¡��uʰʛIwփ˛gHשkĥʃљ魨޻̌٩+νT^h䳭-Z&`䫍-zjάс͞d��ؽ��꒑ڏ镇o܁̜ߣٯؔrkĤG۱xr��՛ϖQǼ: 0ʗВЯﺯɫԬ_Y��ʨ (Ӄڳʨ+͝P_퟇�揻H��޺��͘8sƂO.ȎѦퟶ�ٹZ̦m��eÔϹUP.Ώ׋֕b֔ۋںɃḙ��xࠔg=+Cʵҽ��2]ҳ>"շ<,r计:p��ۃ琛FMÀ ̂Dv̥ـ>TxԅʥQsӃnhϹ҃CsŠʘ��@ᐙװ֕שƆ��ăaĄlцqFЬҭ3ɔw3?��#cp莿��>,yخͥ҇
ͪغ{҂矂(`bS4!;F̲ŧ4
.̐EEѸ����ڛ͗;׳ɚs懓ű!ⴌLO^-(k╺ݩzBڂŵC+a}IHͯa중&Hޑؽ癌Ҽϩ
εt#B1}ҿ.\ŀ銽1,ߨ ,0Nԓ>ԁ ݴһU��ǭh̹"Đ˃۳3ԉّ뿽svƝ
9pι}Ľޭ߳JfOD({߾\koГsiחė͘uƷ

r��ɝJԧ4շK‚°0ˢɽퟍ�߇>���NAɹŨۖbR/X‹=GΜՊ[Յ46ۨܞkϹ'аߣggṳ̊ ⾷ߧ
ɑ<~��܄@¸N>c~֖^Ʀպ/үJӑ껷ɋÂ:ѩ4fϖ5̖m��W��͏~ӔSǗN㳒軑ӨѼ͉>��>%��̸����ըڪCșݔұʬ薻ϽAV����}(žPʟV6ƴ/|Ɋ˱ệ7ϗMҮe+ƫ��#ƻ˜Mޏʡ4ij̋~!{qݜ��힘xݴラȂŲdӤڦշR癥>$㵲lƢY;~Ӵ͙J͕4ڡ8K:пش^��FJ%h��)ɨ$fʟ뺛ϓߛoI##_}ŔV/؅��؍d鶻˃࠾ʚR5؇��2Sڌ��ozܜw֥R_ۯ޻�ֻȂ˯@ړ-ٵҾצNխǏֹ逝��֛"����bıa⇉ǻ(ύZbG֫젒e\ØЫrn١zͅìȃƉǾ0?��ăaE Aٙ8Ĝ
L\<ȲK0$IL),ҙgޥأneы߿��ĹQ'&>̶'PBSAҝȑL��ץ)ޣU1Ҝ7ПʻŃ  `����ợwPG᰷4կ֝\��ѪL@ "߿��䋙㿖Զڦ"cը7Dzo܇ײ{ז簕IyԶH�� ²0Q|ŀ8{̉ߌ��ތ��ĹӢ'뫈`rFCƪ и
݇adƶf&邾ص��ʨAĜܭ6Iû��h۰X̏0|׼]#ßX`
佐h 
ؼђhD��ࠞӿو$6٠ö3Ԗ JT܋����ֹhiҷ`՚~ދk[һʂ ȹ��˖ϳ]wޝ*��ߧ{
    Z͇9 ؼ����=镩Դ}؏_ɀÏŇq~��aʚɇΜƁ<Ь–.-Oу˧����5��xNn��ãިӎ~͔3ΐjཫ{
    RӱKAGڹɴКя宠ٛVN;̦'ܤրת#NJ뉸S͕xyLj��鍉ѾAfʇш��
š|>Zҝ>��ΒϰIͧݯ��ޚł]+ĜG?t״࠶Ӗ:ͺNJ帷J易剠 nΐ5dŴ>8Dw#+̃ᴩ҅࠺Ɍ��썧JſҞOݗ��Ҹ��皒ܓ/ιsƱƏHe囏&յw߫Ƙ��KſĆҪh˹ȟ/޳gK��mퟢ���,¶,˶$햮۔Տ?(��ꅿРeǏϓ��ޯCw߁ࠄԮ@ZЃ촮Yr����騊㧖˒ܾ$Ԯܗ��ĢmëСV䠯ʞ롟8м坥ͪǓŒ`‘AȐ̷ʃО
"��Μ԰e‘؏
?GAєʪJ��vaUM ՟��ıēߦࠇ1С"tͨeퟸ�ݲyrݝⷺ��a

切换文件路径

<?php
    //$file_name="b.png";
    $file_name="乔彬.png";   

    //如果是中文的。需要转码 php 这个古老的语言仅仅识别中文转换为gb2312
    //$file_name=iconv("UTF-8","GB2312",$file_name);//在google浏览器里边试了下,。php 5.4 下边 中文不会乱码---放开直接报错
    //$file_name=mb_convert_encoding($file_name,"UTF-8","gb2312");//这个也能转字符编码 但是 就当前这个来说并没有什么卵用
    //Notice: iconv(): Detected an illegal character in input string in D:\phpStudy\WWW\087_fileDown.php on line 6  //这个啥意思

    $file_path="./image/".$file_name;
    //1、打开文件
    if(!file_exists($file_path)){
        echo "文件不存在";
        return;
    }
    $fp=fopen($file_path,"r");

    //获取下载文件的大小
    $file_size=filesize($file_path);
    //echo "文件的大小是".$file_size;//这个也不能有

    //返回的文件
    header("Content-type:application/octet-stream");
    //按照字节返回
    header("Accept-Ranges:bytes");
    //返回这个文件大小
    header("Accept-Length:$file_size");
    //对应客户端弹出的对话框,对应的文件名
    header("Content-Disposition:attachment;filename=".$file_name);

    //向客户端回传数据

    $buffer = 1024;
    $file_count = 0;
    //用于判断数据读取
    while(!feof($fp) && $file_size-$file_count>0){
        $file_count+=$buffer;
        $file_data = fread($fp,$buffer);
        //把部分数据回送给浏览器
        //echo $file_count;//输出文件的时候不能有其他的echo 否则实际下载的写入的图片大小会和实际图片大小有出入
        echo $file_data;

    }
    fclose($fp);
?>

代码封装:

<?php

    function downFile($file_name,$file_sub_dir){
     
        //$file_name="b.png";
        //$file_name="乔彬.png"; 

        //如果是中文的。需要转码 php 这个古老的语言仅仅识别中文转换为gb2312
        //$file_name=iconv("UTF-8","GB2312",$file_name);//在google浏览器里边试了下,。php 5.4 下边 中文不会乱码---放开直接报错
        //$file_name=mb_convert_encoding($file_name,"UTF-8","gb2312");//这个也能转字符编码 但是 就当前这个来说并没有什么卵用
        //Notice: iconv(): Detected an illegal character in input string in D:\phpStudy\WWW\087_fileDown.php on line 6  //这个啥意思

        $file_path=/**"./image/"*/$file_sub_dir.$file_name;
        //1、打开文件
        if(!file_exists($file_path)){
            echo "文件不存在";
            return;
        }
        $fp=fopen($file_path,"r");

        //获取下载文件的大小
        $file_size=filesize($file_path);
        //echo "文件的大小是".$file_size;//这个也不能有

        //返回的文件
        header("Content-type:application/octet-stream");
        //按照字节返回
        header("Accept-Ranges:bytes");
        //返回这个文件大小
        header("Accept-Length:$file_size");
        //对应客户端弹出的对话框,对应的文件名
        header("Content-Disposition:attachment;filename=".$file_name);

        //向客户端回传数据

        $buffer = 1024;
        $file_count = 0;
        //用于判断数据读取
        while(!feof($fp) && $file_size-$file_count>0){
            $file_count+=$buffer;
            $file_data = fread($fp,$buffer);
            //把部分数据回送给浏览器
            //echo $file_count;//输出文件的时候不能有其他的echo 否则实际下载的写入的图片大小会和实际图片大小有出入
            echo $file_data;

        }
        fclose($fp);
    }

    downFile("乔彬.png","./image/");
?>
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014449096/article/details/80707174

智能推荐

C#之DataTable转Entity实体_「已注销」的博客-程序员秘密

笔者原是前端,因公司业务需要,现在也开始跨后端开发;手头一个项目,因公司配备的后端写接口是用Hand Sql,返回的都是DataTable,这让用惯了EF的笔者,十分不习惯。网上找了些DataTable转Entity的文章,都不是令笔者十分满意。笔者发现了一种十分简便易懂的写法,利用Newtonsoft.Json非常轻松的实现DataTable转Entity,遂贴出来供大家参考。...

Chapter 11.顺序容器forward_list[c++11]_vv_VV_vv的博客-程序员秘密

前向链表简介前向链表是用单链表实现的,可在常量时间内在链表中做插入或删除操作list比之forward_list,双向链表要消耗额外的空间存储每个元素和在插入和删除元素时一个轻微的更高的时间开销,所以forward_list更有效率,虽然只能向前遍历。forward_list是唯一的标准容器中故意不给出size()成员函数的,这样是为了更高效而考虑,可以用distance(c.

Chrome您的连接不是私密连接解决办法--一个比较实用的技巧分享_你的链接不是私密链接怎么办谷歌_baoleilei6的博客-程序员秘密

问题:运行项目在Chrome中打开出现以下问题这个问题大量出现在我访问公司网络,github之类的,头疼得很您的连接不是私密连接攻击者可能会试图从 x.x.x.x 窃取您的信息(例如:密码、通讯内容或信用卡信息)。了解详情NET::ERR_CERT_INVALID将您访问的部分网页的网址、有限的系统信息以及部分网页内容发送给 Google,以帮助我们提升 Chrome 的安全性。隐私权政策x.x.x.x 通常会使用加密技术来保护您的信息。Google Chrome 此次尝试连接到 x.x.

PaddleOCR使用笔记-文字检测训练_paddleocr怎么断点训练_快乐的小小程序猿的博客-程序员秘密

PaddleOCR使用笔记Linux环境下文字检测训练官方文档:https://gitee.com/paddlepaddle/PaddleOCR/blob/release/2.0/doc/doc_ch/detection.md数据准备从官网下载icdar2015数据集,首次下载需注册。将下载到的数据集解压到工作目录下,解压在 PaddleOCR/train_data/ 下,并下载单独的标注文件(PaddleOCR将零散的标注文件整理成单独的标注文件)# 在PaddleOCR路径

非线性规划与内点法_非线性预报一校正内点法编程_萤 火的博客-程序员秘密

优化是自然界和人类社会最为普遍行为,物理系统趋于较低的能量,化学分子相互作用以达到最小的电子势能,投资者寻求最佳收益,工程师寻求最佳性能,优化是宇宙运行的本质之一。在本文中,我们将主要讨论非线性规划的数值方法。根据函数性质,优化问题可分为线性优化和非线性优化;根据是否含有约束,可以分为无约束优化和有约束优化。一般来说,有约束优化问题要比无约束优化问题更难求解,因此本文将先介绍非线性优化的求解算法...

随便推点

base64 string类 放不下_base64编码处理数据踩过的坑_weixin_39592026的博客-程序员秘密

由于业务场景中使用了base64编码进行数据的处理,最近被它折腾的不轻,今天就来看看,都是哪里出了问题。一、参与签名时,对base64编码结果处理不当我们知道,base64编码是由大小写字母、数字和+/=三个特殊字符,合计65个字符构成,而=是作为末尾补位符使用,参与编码的字符是64个。因此,base64编码结果存在等号(=),经过urlencode编码过后,等号会被处理成%3D假定被base64...

WMS相关面试题_android wms面试题_xuyin1204的博客-程序员秘密

参考学习视频:阿里、腾讯等一线大厂必问的WMS面试题,作为Android工程师的你还在等什么?ViewRootImpl是UI刷新和核心类,所有UI相关动作,包括触摸、触屏事件、响应事件、按键事件都是有ViewRootImpl来完成。Activity生命周期是用来管理View,View的整个显示是由ViewRootImpl来完成的。...

xs资料网-jdpaint编程图档下载_限时下载 | 西门子、三菱、欧姆龙PLC电气设计与编程自学宝典(3册)..._weixin_39549936的博客-程序员秘密

  推荐阅读 限时下载 | 3000多套PLC程序实例,PLC就该这么学!Hot~限时下载 | 工业机器人四大家族(ABB、库卡、安川)全套资料!限时下载 | 40本电工书籍免费领取,仅限200人!Hot~限时下载 | 珍藏版《一步一步学PLC编程》全套资料,不要错过!Hot~限时下载 | 三菱PLC史上最全视频教程,限500人!Hot~限时下载 | 《PLC零基础到专家》51...

DeepFaceLab错误:DLL Load failed 找不到指定模块!_openfaceswap找不到指定模块_托尼不是塔克的博客-程序员秘密

这个错误不知道多少人遇到了,我反正是看到过不少次了。但是一直没有花时间去研究。 今日有空帮群友远程了一下,虽然搞了一会儿,最终还是搞定了,分享一下经验。问题描述:在执行2号脚本,视频转图片的时候出现了这个问题。ImportError:DLL load failed 找不到指定的模块。运行的操作系统为win7, 显卡为10xx 3G, 版本为10.1Avx版,系统环境为纯净环境。问题...

【思维导图】一图让你了解用什么男士洗面奶(懒人必看!整理自知乎回答,本人程序员,对这套完全不了解,使用后后果自负~)_认知计算_茂森的博客-程序员秘密

【点开看大图】本人只是自己想买,顺手整理了一下~不是广告哦单身的男程序员同胞们,一个人,也要对自己好一点啦!男士洗面奶选购指南男士肤质鉴别o洗完脸后不涂任何东西,1小时候后观察脸部出油情况:① 油性肌肤:整张脸都在出油,闪着油光;③ 混合型肌肤:T区(额头和鼻子)出油,脸颊部分没有油;② 干性肌肤:整张脸都没什么油,脸颊上起了皮屑;④ 中性肌肤:脸部无明显油光,但也没有起皮屑;⑤ 敏感性肌肤:这跟出油状况无关,平常肌肤换季容易敏感刺痛,自己应该能够感受得出来。洗面奶分类

mysql error 1146错误解决办法_灿夏的博客-程序员秘密

mysql error 1146 错误出现原因有很多,网上的解决办法也是林林总总。我是通过网上的建表语句在本地建表报的这个错误,一一排查之后发现只是复制了语句中多余的注释部分,去掉之后问题解决。

推荐文章

热门文章

相关标签