diff --git a/.gitignore b/.gitignore index e1f4792..2f35768 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ testing.js -java \ No newline at end of file +ignore +test/data/collation +test/data/conversion \ No newline at end of file diff --git a/encoding/mbcs.js b/encoding/mbcs.js index 335b0d0..7742aa2 100644 --- a/encoding/mbcs.js +++ b/encoding/mbcs.js @@ -119,7 +119,7 @@ mbcs.prototype.match = function(det) { } } if (badCharCount >= 2 && badCharCount*5 >= doubleByteCharCount) { - console.log(1) + // console.log('its here!') // Bail out early if the byte data is not matching the encoding scheme. break detectBlock; } diff --git a/encoding/unicode.js b/encoding/unicode.js index b9d193a..056ad71 100644 --- a/encoding/unicode.js +++ b/encoding/unicode.js @@ -93,7 +93,7 @@ UTF_32.prototype.match = function(det) { module.exports.UTF_32BE = function() { this.name = function() { - return "UTF_32BE"; + return "UTF-32BE"; }; this.getChar = function(input, index) { return (input[index + 0] & 0xFF) << 24 | (input[index + 1] & 0xFF) << 16 | @@ -104,7 +104,7 @@ util.inherits(module.exports.UTF_32BE, UTF_32); module.exports.UTF_32LE = function() { this.name = function() { - return "UTF_32LE"; + return "UTF-32LE"; }; this.getChar = function(input, index) { return (input[index + 3] & 0xFF) << 24 | (input[index + 2] & 0xFF) << 16 | diff --git a/index.js b/index.js index 916487b..563edf5 100644 --- a/index.js +++ b/index.js @@ -1,10 +1,13 @@ +var fs = require('fs'); var UTF_8 = require('./encoding/utf8'); var unicode = require('./encoding/unicode'); var mbcs = require('./encoding/mbcs'); var iso2022 = require('./encoding/iso2022'); +var self = this; + var recognisers = [ new UTF_8, new unicode.UTF_16BE, @@ -23,22 +26,36 @@ var recognisers = [ module.exports.detect = function(buffer) { - var det = { + var context = { fRawInput: buffer, fRawLength: buffer.length, fInputBytes: buffer, fInputLen: buffer.length }; - var matches = []; - for (var i = recognisers.length - 1; i >= 0; i--) { - var recogniser = recognisers[i]; - matches.push(rec.match(det)); - }; + var matches = recognisers.map(function(rec) { + return rec.match(context); + }).filter(function(match) { + return !!match; + }); matches.sort(function(a, b) { return a.confidence - b.confidence; }); - return matches.pop().name; + console.log(matches); + + return matches.length ? matches.pop().name : null; +}; + +module.exports.detectFile = function(filepath, fn) { + fs.readFile(filepath, function(err, res) { + if (err) + return fn(err, null); + fn(null, self.detect(res)); + }); +}; + +module.exports.detectFileSync = function(filepath) { + return self.detect(fs.readFileSync(filepath)); }; \ No newline at end of file diff --git a/match.js b/match.js index cc58223..8e05d39 100644 --- a/match.js +++ b/match.js @@ -3,5 +3,5 @@ module.exports = function(det, rec, confidence, name, lang) { // console.log(det, rec, confidence); // this.res = 1; this.confidence = confidence; - this.name = name || rec.getName(); + this.name = name || rec.name(); } \ No newline at end of file diff --git a/test/data/collation.zip b/test/data/collation.zip new file mode 100644 index 0000000..e21c4a9 Binary files /dev/null and b/test/data/collation.zip differ diff --git a/test/data/encodings/big5 b/test/data/encodings/big5 new file mode 100644 index 0000000..d0ea2fb --- /dev/null +++ b/test/data/encodings/big5 @@ -0,0 +1,2 @@ + +欲知更多信息, \ No newline at end of file diff --git a/test/data/encodings/euc_jp b/test/data/encodings/euc_jp new file mode 100644 index 0000000..a883a13 --- /dev/null +++ b/test/data/encodings/euc_jp @@ -0,0 +1,13 @@ +戊件疋亙□正□反﹜呿撙讀卞反醒儂仄井健丹仇午互匹五引六氏﹝戊件疋亙□正□反﹜妐儂支筏寞卅升及公木冗木卞砦璊繷鉹篹隊諵酗卞方勻化健尹月方丹卞仄引允﹝交瓦戊□玉互請侳月引匹反﹜仇木日及砦璊繷鉹篹隊趥鰻心互窒伝潘挀手繡箕仄引仄凶﹝升及域勾毛午勻化手﹜蝸坌卅妐儂毛殖氏匹反中引六氏匹仄凶﹝拺尹壬﹜略膛洘寧域勾毛葦化手﹜公及允屯化及蛻賄毛市田□允月凶戶卞反﹜中仁勾井及唱卅月扞寞祭及酷賺心互优邰匹仄凶﹝敗賄及方丹卅域勾及蛻賄卞蜃勻化手﹜域勾分仃及扞寞祭及酷賺心匹反﹜域旼炊侄歹木月允屯化及妐儂﹜嗥づ鰾﹜絰諸讀卅筏寞卅升毛健丹卞反尕蝸坌匹仄凶﹝ + +仇木日及扞寞祭及酷賺心反﹜鍬詢卞抪賤允月手及匹手丐曰引仄凶﹝わ勾及唱卅月扞寞祭及酷賺心互﹜わ勾及唱卅月妐儂卞き域及砦璊藙掑惜諵酗手匹五月仄﹜き元妐儂卞唱卅月砦璊藙掑惜諵酗手匹五月及匹允﹝升及方丹卅戊件疋亙□正□手﹋た卞扔□田□反﹌聶仁及唱卅勻凶扞寞祭及酷賺心毛扔禾□玄允月优邰互丐曰引允﹝凶午尹犯□正互唱卅月扞寞祭及酷賺心支皿仿永玄白巧□丞毛騷聊仄化手﹜中勾升仇匹犯□正互剄木月井坌井日卅中渣萵毛佹允仇午及卅月及匹允﹝ +交瓦戊□玉反允屯化毛庍尹引允 + +交瓦戊□玉反﹜皿仿永玄白巧□丞卞溢歹日內﹜皿伕弘仿丞卞溢歹日內﹜蛻賄卞溢歹日內﹜允屯化及妐儂卞つ峏仄凶砦璊藗縣角牏飽ㄔ璆迉部憧圪蜇鄐洁╞╞疇蚰諢╞狴憛憧鴠疇由永市□玉﹜IBM﹜斥乓旦玄扑旦氾丞﹜穴奶弁伕末白玄﹜左仿弁伙﹜SAP﹜扔件﹜扔奶矛□旦卅升及遣僅釵及潛く讀渠僅午職及聶仁及渠僅卞睡迕今木化中引允﹝交瓦戊□玉反﹜XML﹜Java﹜ECMAScript(JavaScript)﹜LDAP﹜CORBA 3.0卅升及瘉燮羹及伓賞及蟆羼午卅勻化云曰﹜交瓦戊□玉毛撢隸允木壬﹜ISO/IEC 10646卞贗寧允月仇午卞卅曰引允﹝交瓦戊□玉反﹜聶仁及左矢伊□氾奴件弘扑旦氾丞午允屯化及瘉蕙及皮仿它扒□午職及聶仁及擠圴匹扔禾□玄今木化中引允﹝交瓦戊□玉伓賞及請蜇午交瓦戊□玉毛扔禾□玄允月汁□伙挀反﹜緊漆葡難卞卅勻化中月末白玄它巨失絰諸及弘伕□田伙祭及峸木卞覆仄化﹜た卞泙卞峏勻化中引允﹝ + +交瓦戊□玉毛弁仿奶失件玄扔□田□滇及失皿伉弗□扑亦件支﹜聶遽厭瞻毛儅勾失皿伉弗□扑亦件﹜它尼皮扔奶玄卅升卞卞賺心慇戈仇午匹﹜蝨侳及妐儂戊□玉本永玄毛迕中月方曰手抸日井卅戊旦玄綽蛹互第Х匹允﹝交瓦戊□玉反﹜簽域及末白玄它巨失擠圴﹜簽域及它尼皮扔奶玄卞﹜窒日澎毛笛尹月仇午卅仁﹜呁醒及皿仿永玄白巧□丞﹜呁醒及蛻賄﹜呁醒及嶄毛市田□允月仇午互請侳月及匹允﹝交瓦戊□玉反﹜犯□正互聶仁及唱卅月扑旦氾丞及棉毛﹜窒及剄木手卅仄卞鱉霜允月仇午毛第Х午允月及匹允﹝ +交瓦戊□玉戊件末□扑失丞卞勾中化 + +交瓦戊□玉戊件末□扑失丞反﹜瘉蕙及末白玄它巨失擠圴午伓賞卞云中化氾平旦玄毛刓蜇允月仇午毛啦怗允月﹍交瓦戊□玉伓賞﹎及厭蹲﹜級腹〧廘琚卄雥捔正吨藚凗炊仄化澀峏今木凶饃騵讔縞匹允﹝き戊件末□扑失丞及莘夠反﹜戊件疋亙□正□午樹扷質咥卞溢歹月僮々妠賱支賺縞井日厭嶽今木化中引允﹝き戊件末□扑失丞反﹜算嶸讀卞反﹜賬輯卞莘韙峇艉豸銴瓣き膨臚竣鴗々中牏飽ㄔ璆迉部憧圪蜇鄐羃棡仄﹜公及傀艦午撢隸毛障梁允月壑釵醱及賺縞支蜊諦反﹜分木手互交瓦戊□玉戊件末□扑失丞及莘夠卅月仇午互匹五引允﹝ + +方曰擇仄中仇午毛云襞曰卞卅曰凶中杅反﹜Glossary, Unicode-Enabled Products, Technical Introduction 云方太 Useful Resources毛仍輔寰仁分今中﹝ diff --git a/test/data/encodings/euc_kr b/test/data/encodings/euc_kr new file mode 100644 index 0000000..fb3cf07 --- /dev/null +++ b/test/data/encodings/euc_kr @@ -0,0 +1,13 @@ +晦獄瞳戲煎 闡У攪朝 璋濠虜 籀葬м棲棻. 旋濠釭 棻艇 僥濠縑紫 璋濠蒂 雖薑ж罹 盪濰м棲棻. 嶸棲囀萄陛 偃嫦腎晦 瞪縑朝 檜楝и 璋濠蒂 雖薑ж晦 嬪п 熱寥 陛雖曖 棻艇 晦 衛蝶蠱擊 餌辨ц蝗棲棻. 欽橾 晦 寞徹戲煎朝 賅萇 僥濠蒂 んлй 熱 橈歷蝗棲棻. 蕨蒂 菟橫 嶸毀 翱м縑憮虜 爾渦塭紫 賅萇 陝 釭塭滌 樹橫蒂 籀葬ж溥賊 罹楝 偃曖 棻艇 晦 寞徹檜 в蹂м棲棻. 艙橫諦 偽擎 欽橾 樹橫曖 唳辦紫 奢鱔瞳戲煎 餌辨腎朝 賅萇 旋濠, 僥濰 睡 塽 纔觼棲鏽 晦ˋ 蜃朝 欽橾 晦 寞徹擊 乾堅 氈雖 跤ж艘蝗棲棻. + +檜楝и 晦 衛蝶蠱擎 傳и 棻艇 晦 衛蝶蠱婁 醱給м棲棻. 闊 舒 陛雖 晦 寞徹檜 舒 偃曖 棻艇 僥濠縑 渠п 偽擎 廓ㄧ 餌辨ж剪釭 偽擎 僥濠縑 渠п 棻艇 廓ㄧ 餌辨й 熱 氈蝗棲棻. 輿橫霞 賅萇 闡У攪(か 憮幗)朝 憮煎 棻艇 罹楝 陛雖 晦 寞徹擊 雖錳п撿 м棲棻. 斜楝釭, 等檜攪蒂 憮煎 棻艇 晦 寞徹檜釭 Ы概イ 除縑 瞪殖й 陽葆棻 斜 等檜攪朝 о鼻 槳鼻曖 嬪я擊 啕啪 腌棲棻. +嶸棲囀萄煎 賅萇 匙擊 п唸й 熱 氈蝗棲棻! + +嶸棲囀萄朝 餌辨 醞檣 Ы概イ, Щ煎斜極, 樹橫縑 婦啗橈檜 僥濠葆棻 堅嶸и 璋濠蒂 薯奢м棲棻. 嶸棲囀萄 ル遽擎 Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys 塽 晦顫 罹楝 蜓蝧 偽擎 機啗 摹舒輿濠縑 曖п 瓣鷗腎歷蝗棲棻. 嶸棲囀萄朝 XML, Java, ECMAScript(JavaScript), LDAP, CORBA 3.0, WML 蛔婁 偽檜 ⑷營 割葬 餌辨腎朝 ル遽縑憮 в蹂ж貊 檜朝 ISO/IEC 10646擊 掘⑷ж朝 奢衝瞳檣 寞徹殮棲棻. 檜朝 號擎 遴艙 羹薯, 蹂闈 餌辨腎朝 賅萇 粽塭辦盪 塽 晦顫 號擎 薯ヶ縑憮 雖錳腌棲棻. 嶸棲囀萄 ル遽曖 睡鼻婁 檜蒂 雖錳ж朝 紫掘曖 陛辨撩擎 譆斬 瞪 撮啗縑 碳堅 氈朝 晦獎 唳щ縑憮 陛濰 醞蹂и 睡碟擊 離雖ж堅 氈蝗棲棻. + +嶸棲囀萄蒂 贗塭檜樹お-憮幗 傳朝 棻醞-翱唸 擬辨 Щ煎斜極婁 壎 餌檜お縑 鱔мж賊 溯剪衛 僥濠 撮お 餌辨縑 氈橫憮 鼻渡и 綠辨 瞰馬 膩陛 釭顫陶棲棻. 嶸棲囀萄蒂 鱔п 葬縛雖棲橫葭 橈檜 棻醞 Ы概イ, 樹橫 塽 措陛 除縑 欽橾 模Щお錚橫 Ы概イ 傳朝 欽橾 壎 餌檜お蒂 跡ル煎 鳴擊 熱 氈蝗棲棻. 檜蒂 餌辨ж賊 等檜攪蒂 槳鼻 橈檜 罹楝 衛蝶蠱擊 鱔п 瞪歎й 熱 氈蝗棲棻. +嶸棲囀萄 夔模衛樵縑 渠п + +嶸棲囀萄 夔模衛樵擎 綠艙葬 褻霜戲煎憮 ⑷渠 模Щお錚橫 薯ヶ婁 ル遽縑憮 臢蝶お曖 ル⑷擊 雖薑ж朝 嶸棲囀萄 ル遽曖 餌辨擊 偃嫦ж堅 挫暷牉 濰溥ж晦 嬪п 撮錶螺蝗棲棻. 夔模衛樵 詹幗蔣擎 闡У攪諦 薑爾 籀葬 骯機縑 謙餌ж堅 氈朝 惜彰嬪и 蜓 塽 褻霜曖 彰嬪蒂 釭顫鹿棲棻. 夔模衛樵曖 營薑擎 瞪瞳戲煎 蛹鬵 曖п 醱渡腌棲棻. 嶸棲囀萄 鐘模衛樵縑憮曖 詹幗蔣擎 瞪 撮啗 橫替 夠縑憮釭 嶸棲囀萄 ル遽擊 雖錳ж堅 斜 挫撠 掘⑷擊 雖錳ж堅濠ж朝 褻霜婁 偃檣縑啪 偃寞腎橫 氈蝗棲棻. + +渦 濠撮и 頂辨擎 辨橫餵, 蕨薯 嶸棲囀萄 餌辨 陛棟 薯ヶ, 晦獎 薑爾 塽 晦顫 嶸辨и 薑爾蒂 霤褻ж褊衛螃. diff --git a/test/data/encodings/iso2022cn b/test/data/encodings/iso2022cn new file mode 100644 index 0000000..48f38a6 --- /dev/null +++ b/test/data/encodings/iso2022cn @@ -0,0 +1,13 @@ +$)A;y1>IO#,MPhR*:C<8VV2;M,5D1`Bk@40|@(KySP5DSoQT!#<4J9JG5%R;VVSoQT#,@}HgS"So#,R2C;SPDDR;8v1`Bk?IRTJJSCSZKySP5DWVD8#,1j5c7{:E#,:M3#SC5D<MJGK5#,A=VV1`Bk?ID\J9SCO`M,5DJ}WV4z1mA=8v2;M,5DWV7{#,;rJ9SC2;M,5DJ}WV4z1mO`M,5DWV7{!#HN:NR;L(LX6(5D]M(9}2;M,5D1`Bk;rF=L(V.]W\;aSPKp;55DN#OU!# +Unicode$)AU}TZ8D1dKySPUbR;GP#! + +Unicode$)A8xC?8vWV7{La9)AKR;8vN(R;5DJ}WV#,2;B[JGJ2C4F=L(#,2;B[JGJ2C43LPr#,2;B[J2C4SoQT!#Unicode1jW-1;UbP)9$R5=g5DAl5!#WnPB5D1jW<6_5D4fTZ#,JG=|@4H+GrHm<~<=a:O#,1HJ9SC4+M3WV7{D\9;9a4)6`8vF=L(#,SoQT:M9z]4+Jd5=Pm6`2;M,5DO5M3#,6xN^Kp;5!# +$)A9XSZUnicodeQ'JuQ';a + +Unicode$)AQ'JuQ';aJGR;8v7GS/@{5DWiV/#,JGN*7"U9#,@)U9:MMF9cJ9SCUnicode1jW<6x=(A"5D#,UnicodeQ'JuQ';aIhA"AKOV4zHm<~2zF7:M1jW5D1mJ>7(!#Q'JuQ';a5D;aT14z1mAK9c7:AlSr5D:MWiV/!#Q'JuQ';aV;SI;aT1La9)WJ=p!#UnicodeQ'JuQ';a5D;aT1WJ8q?*7E8xJ@=gIOHN:NV'3VUnicode1jW<:MO#M{P-VzFd@)U9:MV4PP5DWiV/<08vHK!# + +$)AS{V*8|6`PEO"#,Gk2NTDJuSo4J;c1m#,Unicode2zF7Qy1>#,<$l$KHV9f$r3d$j?6$k$3$H$K$h$C$F07$($k$h$&$K$7$^$9!#%f%K%3!<%I$,=PMh$k$^$G$O!"$3$l$i$NHV9f$r3d$j?6$k;EAH$_$,2?I4$NB?$/$N4k6H$K:NMQ$5$l$F$$$^$9!#%f%K%3!<%I$O!"(BXML$B!"(BJava$B!"(BECMAScript(JavaScript)$B!"(BLDAP$B!"(BCORBA 3.0$B$J$I$N:G@hC<$NI8=`$NA0Ds$H$J$C$F$*$j!"%f%K%3!<%I$r$NB?$/$N@=IJ$G%5%]!<%H$5$l$F$$$^$9!#%f%K%3!<%II8=`$N=P8=$H%f%K%3!<%I$r%5%]!<%H$9$k%D!<%kN`$O!":r:#82Cx$K$J$C$F$$$k%=%U%H%&%(%"5;=Q$N%0%m!<%P%k2=$NN.$l$KBP$7$F!"FC$KLr$KN)$C$F$$$^$9!#(B + +$B%f%K%3!<%I$r%/%i%$%"%s%H%5!<%P!<7?$N%"%W%j%1!<%7%g%s$d!"B?AX9=B$$r;}$D%"%W%j%1!<%7%g%s!"%&%'%V%5%$%H$J$I$K$KAH$_9~$`$3$H$G!"=>Mh$NJ8;z%3!<%I%;%C%H$rMQ$$$k$h$j$bL@$i$+$J%3%9%H:o8:$,2DG=$G$9!#%f%K%3!<%I$O!"C10l$N%=%U%H%&%(%"@=IJ!"C10l$N%&%'%V%5%$%H$K!"2?$iAw$9$k$3$H$r2DG=$H$9$k$N$G$9!#(B +$B%f%K%3!<%I%3%s%=!<%7%"%`$K$D$$$F(B + +$B%f%K%3!<%I%3%s%=!<%7%"%`$O!":G?7$N%=%U%H%&%(%"@=IJ$HI8=`$K$*$$$F%F%-%9%H$rI=8=$9$k$3$H$r0UL#$9$k!H%f%K%3!<%II8=`!I$N9=C[!"H/E8!"Ia5Z!"MxMQB%?J$rL\E*$H$7$F@_N)$5$l$?Hs1DMxAH?%$G$9!#F1%3%s%=!<%7%"%`$N2q0w$O!"%3%s%T%e!<%?!<$H>pJs=hM}$K78$o$k9-HF$J4k6H$dAH?%$+$i9=@.$5$l$F$$$^$9!#F1%3%s%=!<%7%"%`$O!":b@/E*$K$O!"=c?h$K2qHq$N$_$K$h$C$F1?1D$5$l$F$$$^$9!#%f%K%3!<%II8=`$r;Y;}$7!"$=$N3HD%$H\$7$$$3$H$r$*CN$j$K$J$j$?$$J}$O!"(BGlossary, Unicode-Enabled Products, Technical Introduction $B$*$h$S(B Useful Resources$B$r$4;2>H$/$@$5$$!#(B diff --git a/test/data/encodings/iso2022kr b/test/data/encodings/iso2022kr new file mode 100644 index 0000000..b630d41 --- /dev/null +++ b/test/data/encodings/iso2022kr @@ -0,0 +1,13 @@ +$)C1b:;@{@87N DDG;EM4B <}@Z88 C38.GU4O4Y. 1[@Z3* 4Y8% 9.@Z?!55 <}@Z8& AvA$GO?) @z@eGU4O4Y. @/4ODZ5e0! 039_5G1b @|?!4B @L7/GQ <}@Z8& AvA$GO1b @'GX x>z=@4O4Y. ?98& 5i>n @/74 ?,GU?!<-88 :84u6s55 8p5g 0" 3*6s:0 >p>n8& C38.GO7A8i ?)7/ 03@G 4Y8% 1bH#H- 9f9}@L GJ?dGU4O4Y. ?5>n?M 00@: 4\@O >p>n@G 0f?l55 0xEk@{@87N ;g?k5G4B 8p5g 1[@Z, 9.@e :NH# 9W EWE)4ODC 1bH#?! 8B4B 4\@O 1bH#H- 9f9}@; 0.0m @VAv 8xGO?4=@4O4Y. + +$)C@L7/GQ 1bH#H- =C=:E[@: 6GGQ 4Y8% 1bH#H- =C=:E[0z Cf59GU4O4Y. Ao 5N 0!Av 1bH#H- 9f9}@L 5N 03@G 4Y8% 9.@Z?! 4kGX 00@: 9xH#8& ;g?kGO0E3* 00@: 9.@Z?! 4kGX 4Y8% 9xH#8& ;g?kGR nAx 8p5g DDG;EM(F/Hw <-9v)4B <-7N 4Y8% ?)7/ 0!Av 1bH#H- 9f9}@; Av?xGX>_ GU4O4Y. 1W7/3*, 5%@LEM8& <-7N 4Y8% 1bH#H- 9f9}@L3* GC7'F{ 0#?! @|4^GR 6'864Y 1W 5%@LEM4B GW;s p>n?! 0|0h>x@L 9.@Z864Y 0m@/GQ <}@Z8& A&0xGU4O4Y. @/4ODZ5e G%AX@: Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys 9W 1bE8 ?)7/ H8;g?M 00@: >w0h <15NAV@Z?! @GGX C$EC5G>z=@4O4Y. @/4ODZ5e4B XML, Java, ECMAScript(JavaScript), LDAP, CORBA 3.0, WML 5n0z 00@L Gv@g 3N8. ;g?k5G4B G%AX?!<- GJ?dGO8g @L4B ISO/IEC 10646@; 18GvGO4B 0x=D@{@N 9f9}@T4O4Y. @L4B 89@: ?n?5 CpF.-<-9v 6G4B 4YA_-?,0a @@?k GA7N1W7%0z @% ;g@LF.?! EkGUGO8i 790E=C 9.@Z <n<- ;s4gGQ :q?k @}0( H?0z0! 3*E8334O4Y. @/4ODZ5e8& EkGX 8.?#Av4O>n85 >x@L 4YA_ GC7'F{, >p>n 9W 190! 0#?! 4\@O n GC7'F{ 6G4B 4\@O @% ;g@LF.8& 8qG%7N ;o@; x@L ?)7/ =C=:E[@; EkGX @|<[GR v?! 4kGX + +$)C@/4ODZ5e D\v@: :q?58. A6Aw@87N<- Gv4k n A&G00z G%AX?!<- EX=:F.@G G%Gv@; AvA$GO4B @/4ODZ5e G%AX@G ;g?k@; 039_GO0m H.@eGO8g @e7AGO1b @'GX <v 8b9v=1@: DDG;EM?M A$:8 C38. ;j>w?! A>;gGO0m @V4B 1$9|@'GQ H8;g 9W A6Aw@G 9|@'8& 3*E83@4O4Y. D\v@G @gA$@: @|@{@87N H8:q?! @GGX Cf4g5K4O4Y. @/4ODZ5e DAv?!<-@G 8b9v=1@: @| <<0h >n4@ 0w?!<-3* @/4ODZ5e G%AX@; Av?xGO0m 1W H.@e0z 18Gv@; Av?xGO0m@ZGO4B A6Aw0z 03@N?!0T 039f5G>n @V=@4O4Y. + +$)C4u @Z<nA}, ?9A& @/4ODZ5e ;g?k 0!4I A&G0, 1b