From: "Yugui (Yuki Sonoda)" Date: 2008-11-24T22:05:10+09:00 Subject: [ruby-dev:37161] m17n of irb This is a multi-part message in MIME format. --------------080602050305000109030107 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Yuguiです。 irbの多言語化を試みてみました。パッチを添付します。この変更により、 * ファイルからコードを読む際にmagic commentを解釈します。 * lex結果に正しくencodingを付けるので、__ENCODING__を使うプログラムが正 しく動きます。 * Kconvの代わりにString#encodeを使うので、日本語以外についてもうまくメッ セージを変換できる可能性があります。 * 独自のlocale解析の他にEncoding::LOCALEを使います。 (日本語ヘルプは、どうせならダミーエンコーディングじゃないほうが良いだろ うと思いまして、ISO-2022-JPからUTF-8に変換しました) 残る問題は-K, -U, -Eをどうやってサポートするかです。(必要ですよね?) * default_internal, default_external, default_src_encodingを設定するメ ソッドを追加 => 言語設計ポリシーに反する * 設定するための拡張ライブラリを書く => ほとんど変わらない * rubyプロセスを再spawnする => Ruby処理系のパスを確実に得るポータブルな方法がない * 設定対象変数のアドレスを取得してdlで無理矢理 => ポータブルでない と考えて、IRB.parse_optを拡張ライブラリで書くのが良いのではないかと思い ました。そんな方向でいかがでしょうか。 -- Yugui http://yugui.jp 私は私をDumpする --------------080602050305000109030107 Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0"; name="irb-m17n.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="irb-m17n.diff" ZGlmZiAtLWdpdCBhL2xpYi9pcmIvaGVscC5yYiBiL2xpYi9pcmIvaGVscC5yYgppbmRleCAw MWU1ODc4Li4yYjA2NGQ1IDEwMDY0NAotLS0gYS9saWIvaXJiL2hlbHAucmIKKysrIGIvbGli L2lyYi9oZWxwLnJiCkBAIC05LDI0ICs5LDI3IEBACiAjICAgCiAjCiAKK3JlcXVpcmUgJ2ly Yi9tYWdpYy1maWxlJworCiBtb2R1bGUgSVJCCiAgIGRlZiBJUkIucHJpbnRfdXNhZ2UKICAg ICBsYyA9IElSQi5jb25mWzpMQ19NRVNTQUdFU10KICAgICBwYXRoID0gbGMuZmluZCgiaXJi L2hlbHAtbWVzc2FnZSIpCiAgICAgc3BhY2VfbGluZSA9IGZhbHNlCi0gICAgRmlsZS5mb3Jl YWNoKHBhdGgpIGRvCi0gICAgICB8bHwKLSAgICAgIGlmIC9eXHMqJC8gPX4gbAotCWxjLnB1 dHMgbCB1bmxlc3Mgc3BhY2VfbGluZQotCXNwYWNlX2xpbmUgPSB0cnVlCi0JbmV4dAorICAg IElSQjo6TWFnaWNGaWxlLm9wZW4ocGF0aCl7fGZ8CisgICAgICBmLmVhY2hfbGluZSBkbyB8 bHwKKwlpZiAvXlxzKiQvID1+IGwKKwkgIGxjLnB1dHMgbCB1bmxlc3Mgc3BhY2VfbGluZQor CSAgc3BhY2VfbGluZSA9IHRydWUKKwkgIG5leHQKKwllbmQKKwlzcGFjZV9saW5lID0gZmFs c2UKKworCWwuc3ViISgvIy4qJC8sICIiKQorCSAgbmV4dCBpZiAvXlxzKiQvID1+IGwKKwls Yy5wdXRzIGwKICAgICAgIGVuZAotICAgICAgc3BhY2VfbGluZSA9IGZhbHNlCi0gICAgICAK LSAgICAgIGwuc3ViISgvIy4qJC8sICIiKQotICAgICAgbmV4dCBpZiAvXlxzKiQvID1+IGwK LSAgICAgIGxjLnB1dHMgbAotICAgIGVuZAorICAgIH0KICAgZW5kCiBlbmQKIApkaWZmIC0t Z2l0IGEvbGliL2lyYi9pbnB1dC1tZXRob2QucmIgYi9saWIvaXJiL2lucHV0LW1ldGhvZC5y YgppbmRleCBmYzhkNDc2Li4yZjc3MjQ1IDEwMDY0NAotLS0gYS9saWIvaXJiL2lucHV0LW1l dGhvZC5yYgorKysgYi9saWIvaXJiL2lucHV0LW1ldGhvZC5yYgpAQCAtOCw2ICs4LDkgQEAK ICMKICMgICAKICMKK3JlcXVpcmUgJ2lyYi9zcmNfZW5jb2RpbmcnCityZXF1aXJlICdpcmIv bWFnaWMtZmlsZScKKwogbW9kdWxlIElSQgogICAjIAogICAjIElucHV0TWV0aG9kCkBAIC00 MSw2ICs0NCw3IEBAIG1vZHVsZSBJUkIKICAgICAgIHN1cGVyCiAgICAgICBAbGluZV9ubyA9 IDAKICAgICAgIEBsaW5lID0gW10KKyAgICAgICRzdGRpbi5zZXRfZW5jb2RpbmcoSVJCLmNv bmZbOkxDX01FU1NBR0VTXS5lbmNvZGluZywgbmlsKQogICAgIGVuZAogCiAgICAgZGVmIGdl dHMKQEAgLTU5LDEyICs2MywxNiBAQCBtb2R1bGUgSVJCCiAgICAgZGVmIGxpbmUobGluZV9u bykKICAgICAgIEBsaW5lW2xpbmVfbm9dCiAgICAgZW5kCisKKyAgICBkZWYgZW5jb2RpbmcK KyAgICAgICRzdGRpbi5leHRlcm5hbF9lbmNvZGluZworICAgIGVuZAogICBlbmQKICAgCiAg IGNsYXNzIEZpbGVJbnB1dE1ldGhvZCA8IElucHV0TWV0aG9kCiAgICAgZGVmIGluaXRpYWxp emUoZmlsZSkKICAgICAgIHN1cGVyCi0gICAgICBAaW8gPSBvcGVuKGZpbGUpCisgICAgICBA aW8gPSBJUkI6Ok1hZ2ljRmlsZS5vcGVuKGZpbGUpCiAgICAgZW5kCiAgICAgYXR0cl9yZWFk ZXIgOmZpbGVfbmFtZQogCkBAIC03OCw2ICs4NiwxMCBAQCBtb2R1bGUgSVJCCiAjICAgICAg cHJpbnQgQHByb21wdCwgbAogICAgICAgbAogICAgIGVuZAorCisgICAgZGVmIGVuY29kaW5n CisgICAgICBAaW8uZXh0ZXJuYWxfZW5jb2RpbmcKKyAgICBlbmQKICAgZW5kCiAKICAgYmVn aW4KQEAgLTkwLDYgKzEwMiw3IEBAIG1vZHVsZSBJUkIKIAlAbGluZV9ubyA9IDAKIAlAbGlu ZSA9IFtdCiAJQGVvZiA9IGZhbHNlCisJU1RESU4uc2V0X2VuY29kaW5nKElSQi5jb25mWzpM Q19NRVNTQUdFU10uZW5jb2RpbmcsIG5pbCkKICAgICAgIGVuZAogCiAgICAgICBkZWYgZ2V0 cwpAQCAtMTE1LDYgKzEyOCwxMCBAQCBtb2R1bGUgSVJCCiAgICAgICBkZWYgbGluZShsaW5l X25vKQogCUBsaW5lW2xpbmVfbm9dCiAgICAgICBlbmQKKworICAgICAgZGVmIGVuY29kaW5n CisJU1RESU4uZXh0ZXJuYWxfZW5jb2RpbmcKKyAgICAgIGVuZAogICAgIGVuZAogICByZXNj dWUgTG9hZEVycm9yCiAgIGVuZApkaWZmIC0tZ2l0IGEvbGliL2lyYi9sYy9oZWxwLW1lc3Nh Z2UgYi9saWIvaXJiL2xjL2hlbHAtbWVzc2FnZQppbmRleCBkOTM5NTFiLi42MTQ4MGVlIDEw MDY0NAotLS0gYS9saWIvaXJiL2xjL2hlbHAtbWVzc2FnZQorKysgYi9saWIvaXJiL2xjL2hl bHAtbWVzc2FnZQpAQCAtMSwzICsxLDQgQEAKKyMgLSotIGNvZGluZzogVVMtQVNDSUkgLSot CiAjCiAjICAgaXJiL2xjL2hlbHAtbWVzc2FnZS5yYiAtIAogIyAgIAkkUmVsZWFzZSBWZXJz aW9uOiAwLjkuNSQKQEAgLTMyLDMgKzMzLDQgQEAgVXNhZ2U6ICBpcmIucmIgW29wdGlvbnNd IFtwcm9ncmFtZmlsZV0gW2FyZ3VtZW50c10KIAkJICAgIHZhbHVlIGlzIDE2LiAKICAgLS1p cmJfZGVidWcgbgkgICAgU2V0IGludGVybmFsIGRlYnVnIGxldmVsIHRvIG4gKG5vdCBmb3Ig cG9wdWxhciB1c2UpCiAgIC12LCAtLXZlcnNpb24JICAgIFByaW50IHRoZSB2ZXJzaW9uIG9m IGlyYgorIyB2aW06ZmlsZWVuY29kaW5nPXVzLWFzY2lpCmRpZmYgLS1naXQgYS9saWIvaXJi L2xjL2phL2VuY29kaW5nX2FsaWFzZXMucmIgYi9saWIvaXJiL2xjL2phL2VuY29kaW5nX2Fs aWFzZXMucmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxM2RmZgot LS0gL2Rldi9udWxsCisrKyBiL2xpYi9pcmIvbGMvamEvZW5jb2RpbmdfYWxpYXNlcy5yYgpA QCAtMCwwICsxLDggQEAKK21vZHVsZSBJUkIKKyAgY2xhc3MgTG9jYWxlCisgICAgQEBsZWdh Y3lfZW5jb2RpbmdfYWxpYXNfbWFwID0geworICAgICAgJ3VqaXMnID0+IEVuY29kaW5nOjpF VUNfSlAsCisgICAgICAnZXVjJyA9PiBFbmNvZGluZzo6RVVDX0pQCisgICAgfS5mcmVlemUK KyAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL2xpYi9pcmIvbGMvamEvZXJyb3IucmIgYi9saWIv aXJiL2xjL2phL2Vycm9yLnJiCmluZGV4IDEzY2YxODAuLmRjMDM0NWUgMTAwNjQ0Ci0tLSBh L2xpYi9pcmIvbGMvamEvZXJyb3IucmIKKysrIGIvbGliL2lyYi9sYy9qYS9lcnJvci5yYgpA QCAtMSw0ICsxLDQgQEAKLSMKKyMgLSotIGNvZGluZzogdXRmLTggLSotCiAjICAgaXJiL2xj L2phL2Vycm9yLnJiIC0gCiAjICAgCSRSZWxlYXNlIFZlcnNpb246IDAuOS41JAogIyAgIAkk UmV2aXNpb24kCkBAIC0xMywxNCArMTMsMTUgQEAgcmVxdWlyZSAiZTJtbWFwIgogbW9kdWxl IElSQgogICAjIGV4Y2VwdGlvbnMKICAgZXh0ZW5kIEV4Y2VwdGlvbjJNZXNzYWdlTWFwcGVy Ci0gIGRlZl9leGNlcHRpb24gOlVucmVjb2duaXplZFN3aXRjaCwgJxskQiU5JSQlQyVBGyhC KCVzKRskQiQsSiwkaiReJDskcxsoQicKLSAgZGVmX2V4Y2VwdGlvbiA6Tm90SW1wbGVtZW50 ZWRFcnJvciwgJ2Alc1wnGyRCJE5EajVBJCxJLE1XJEckORsoQicKLSAgZGVmX2V4Y2VwdGlv biA6Q2FudFJldHVyblRvTm9ybWFsTW9kZSwgJ05vcm1hbBskQiViITwlSSRLTGEkbCReJDsk cxsoQi4nCi0gIGRlZl9leGNlcHRpb24gOklsbGVnYWxQYXJhbWV0ZXIsICcbJEIlUSVpJWEh PCU/GyhCKCVzKRskQiQsNFYwYyRDJEYkJCReJDkbKEIuJwotICBkZWZfZXhjZXB0aW9uIDpJ cmJBbHJlYWR5RGVhZCwgJ0lyYhskQiRPNHskSztgJHMkRyQkJF4kORsoQi4nCi0gIGRlZl9l eGNlcHRpb24gOklyYlN3aXRjaGVkVG9DdXJyZW50VGhyZWFkLCAnGyRCJSslbCVzJUglOSVs JUMlSSRLQFokakJYJG8kaiReJDckPxsoQi4nCi0gIGRlZl9leGNlcHRpb24gOk5vU3VjaEpv YiwgJxskQiQ9JE4kaCQmJEolOCVnJVYbKEIoJXMpGyRCJE8kIiRqJF4kOyRzGyhCLicKLSAg ZGVmX2V4Y2VwdGlvbiA6Q2FudFNoaWZ0VG9NdWx0aUlyYk1vZGUsICdtdWx0aS1pcmIgbW9k ZRskQiRLMFwkbCReJDskcxsoQi4nCi0gIGRlZl9leGNlcHRpb24gOkNhbnRDaGFuZ2VCaW5k aW5nLCAnGyRCJVAlJCVzJUclIyVzJTAbKEIoJXMpGyRCJEtKUTk5JEckLSReJDskcxsoQi4n Ci0gIGRlZl9leGNlcHRpb24gOlVuZGVmaW5lZFByb21wdE1vZGUsICcbJEIlVyVtJXMlVyVI JWIhPCVJGyhCKCVzKRskQiRPRGo1QSQ1JGwkRiQkJF4kOyRzGyhCLicKKyAgZGVmX2V4Y2Vw dGlvbiA6VW5yZWNvZ25pemVkU3dpdGNoLCAn44K544Kk44OD44OBKCVzKeOBjOWIhuOCiuOB vuOBm+OCkycKKyAgZGVmX2V4Y2VwdGlvbiA6Tm90SW1wbGVtZW50ZWRFcnJvciwgJ2Alc1wn 44Gu5a6a576p44GM5b+F6KaB44Gn44GZJworICBkZWZfZXhjZXB0aW9uIDpDYW50UmV0dXJu VG9Ob3JtYWxNb2RlLCAnTm9ybWFs44Oi44O844OJ44Gr5oi744KM44G+44Gb44KTLicKKyAg ZGVmX2V4Y2VwdGlvbiA6SWxsZWdhbFBhcmFtZXRlciwgJ+ODkeODqeODoeODvOOCvyglcynj gYzplpPpgZXjgaPjgabjgYTjgb7jgZkuJworICBkZWZfZXhjZXB0aW9uIDpJcmJBbHJlYWR5 RGVhZCwgJ0lyYuOBr+aXouOBq+atu+OCk+OBp+OBhOOBvuOBmS4nCisgIGRlZl9leGNlcHRp b24gOklyYlN3aXRjaGVkVG9DdXJyZW50VGhyZWFkLCAn44Kr44Os44Oz44OI44K544Os44OD 44OJ44Gr5YiH44KK5pu/44KP44KK44G+44GX44GfLicKKyAgZGVmX2V4Y2VwdGlvbiA6Tm9T dWNoSm9iLCAn44Gd44Gu44KI44GG44Gq44K444On44OWKCVzKeOBr+OBguOCiuOBvuOBm+OC ky4nCisgIGRlZl9leGNlcHRpb24gOkNhbnRTaGlmdFRvTXVsdGlJcmJNb2RlLCAnbXVsdGkt aXJiIG1vZGXjgavnp7vjgozjgb7jgZvjgpMuJworICBkZWZfZXhjZXB0aW9uIDpDYW50Q2hh bmdlQmluZGluZywgJ+ODkOOCpOODs+ODh+OCo+ODs+OCsCglcynjgavlpInmm7TjgafjgY3j gb7jgZvjgpMuJworICBkZWZfZXhjZXB0aW9uIDpVbmRlZmluZWRQcm9tcHRNb2RlLCAn44OX 44Ot44Oz44OX44OI44Oi44O844OJKCVzKeOBr+Wumue+qeOBleOCjOOBpuOBhOOBvuOBm+OC ky4nCiBlbmQKKyMgdmltOmZpbGVlbmNvZGluZz11dGYtOApkaWZmIC0tZ2l0IGEvbGliL2ly Yi9sYy9qYS9oZWxwLW1lc3NhZ2UgYi9saWIvaXJiL2xjL2phL2hlbHAtbWVzc2FnZQppbmRl eCBmZjA5YjA3Li42NjAxZDExIDEwMDY0NAotLS0gYS9saWIvaXJiL2xjL2phL2hlbHAtbWVz c2FnZQorKysgYi9saWIvaXJiL2xjL2phL2hlbHAtbWVzc2FnZQpAQCAtMSw0ICsxLDQgQEAK LSMKKyMgLSotIGNvZGluZzogdXRmLTggLSotCiAjICAgaXJiL2xjL2phL2hlbHAtbWVzc2Fn ZS5yYiAtIAogIyAgIAkkUmVsZWFzZSBWZXJzaW9uOiAwLjkuNSQKICMgICAJJFJldmlzaW9u JApAQCAtOSwyNyArOSwyOSBAQAogIyAgIAogIwogVXNhZ2U6ICBpcmIucmIgW29wdGlvbnNd IFtwcm9ncmFtZmlsZV0gW2FyZ3VtZW50c10KLSAgLWYJCSAgICB+Ly5pcmJyYyAbJEIkckZJ JF85fiReJEokJBsoQi4KLSAgLW0JCSAgICBiYxskQiViITwlSRsoQigbJEJKLD90GyhCLCAb JEI5VE5zJE43Vzs7JCwkRyQtJGsbKEIpCi0gIC1kICAgICAgICAgICAgICAgICRERUJVRyAb JEIkchsoQnRydWUbJEIkSyQ5JGsbKEIocnVieSAtZCAbJEIkSEYxJDgbKEIpCi0gIC1yIGxv YWQtbW9kdWxlICAgIHJ1YnkgLXIgGyRCJEhGMSQ4GyhCLgotICAtSSBwYXRoICAgICAgICAg ICAkTE9BRF9QQVRIIBskQiRLGyhCIHBhdGggGyRCJHJESTJDJDkkaxsoQi4KLSAgLS1pbnNw ZWN0CSAgICAbJEI3azJMPVBOTyRLGyhCaW5zcGVjdBskQiRyTVEkJCRrGyhCKGJjGyRCJWIh PCVJMEozMCRPJUclVSUpJWslSBsoQikuIAotICAtLW5vaW5zcGVjdAkgICAgGyRCN2syTD1Q Tk8kSxsoQmluc3BlY3QbJEIkck1RJCQkSiQkGyhCLgotICAtLXJlYWRsaW5lCSAgICByZWFk bGluZRskQiVpJSQlViVpJWokck14TVEkOSRrGyhCLgotICAtLW5vcmVhZGxpbmUJICAgIHJl YWRsaW5lGyRCJWklJCVWJWklaiRyTXhNUSQ3JEokJBsoQi4gCisgIC1mCQkgICAgfi8uaXJi cmMg44KS6Kqt44G/6L6844G+44Gq44GELgorICAtbQkJICAgIGJj44Oi44O844OJKOWIhuaV sCwg6KGM5YiX44Gu6KiI566X44GM44Gn44GN44KLKQorICAtZCAgICAgICAgICAgICAgICAk REVCVUcg44KSdHJ1ZeOBq+OBmeOCiyhydWJ5IC1kIOOBqOWQjOOBmCkKKyAgLXIgbG9hZC1t b2R1bGUgICAgcnVieSAtciDjgajlkIzjgZguCisgIC1JIHBhdGggICAgICAgICAgICRMT0FE X1BBVEgg44GrIHBhdGgg44KS6L+95Yqg44GZ44KLLgorICAtLWluc3BlY3QJICAgIOe1kOae nOWHuuWKm+OBq2luc3BlY3TjgpLnlKjjgYTjgosoYmPjg6Ljg7zjg4nku6XlpJbjga/jg4fj g5Xjgqnjg6vjg4gpLiAKKyAgLS1ub2luc3BlY3QJICAgIOe1kOaenOWHuuWKm+OBq2luc3Bl Y3TjgpLnlKjjgYTjgarjgYQuCisgIC0tcmVhZGxpbmUJICAgIHJlYWRsaW5l44Op44Kk44OW 44Op44Oq44KS5Yip55So44GZ44KLLgorICAtLW5vcmVhZGxpbmUJICAgIHJlYWRsaW5l44Op 44Kk44OW44Op44Oq44KS5Yip55So44GX44Gq44GELiAKICAgLS1wcm9tcHQgcHJvbXB0LW1v ZGUvLS1wcm9tcHQtbW9kZSBwcm9tcHQtbW9kZQotCQkgICAgGyRCJVclbSVzJVclSCViITwl SSRyQFpCWCQoJF4kORsoQi4gGyRCOD06X0RqNUEkNSRsJEYkJCRrJVcbKEIKLQkJICAgIBsk QiVtJXMlVyVIJWIhPCVJJE8bKEIsIGRlZmF1bHQsIHNpbXBsZSwgeG1wLCBpbmYtcnVieRsk QiQsGyhCCi0JCSAgICAbJEJNUTBVJDUkbCRGJCQkXiQ5GyhCLiAKLSAgLS1pbmYtcnVieS1t b2RlICAgZW1hY3MbJEIkThsoQmluZi1ydWJ5LW1vZGUbJEJNUSROJVclbSVzJVclSEk9PCgk cjlUJEokJhsoQi4gGyRCRkMbKEIKLQkJICAgIBskQiRLO1hEaiQsJEokJDhCJGobKEIsIHJl YWRsaW5lGyRCJWklJCVWJWklaiRPO0gkbyRKJC8kSiRrGyhCLgotICAtLXNpbXBsZS1wcm9t cHQgICAbJEJIcz5vJEslNyVzJVclayRKJVclbSVzJVclSCRyTVEkJCRrJWIhPCVJJEckORso Qi4KLSAgLS1ub3Byb21wdAkgICAgGyRCJVclbSVzJVclSEk9PCgkcjlUJEokbyRKJCQbKEIu Ci0gIC0tdHJhY2VyCSAgICAbJEIlMyVeJXMlSTxCOVQ7fiRLJUglbCE8JTkkcjlUJEokJhso Qi4KKwkJICAgIOODl+ODreODs+ODl+ODiOODouODvOODieOCkuWIh+abv+OBiOOBvuOBmS4g 54++5Zyo5a6a576p44GV44KM44Gm44GE44KL44OXCisJCSAgICDjg63jg7Pjg5fjg4jjg6Lj g7zjg4njga8sIGRlZmF1bHQsIHNpbXBsZSwgeG1wLCBpbmYtcnVieeOBjAorCQkgICAg55So 5oSP44GV44KM44Gm44GE44G+44GZLiAKKyAgLS1pbmYtcnVieS1tb2RlICAgZW1hY3Pjga5p bmYtcnVieS1tb2Rl55So44Gu44OX44Ot44Oz44OX44OI6KGo56S644KS6KGM44Gq44GGLiDn ibkKKwkJICAgIOOBq+aMh+WumuOBjOOBquOBhOmZkOOCiiwgcmVhZGxpbmXjg6njgqTjg5bj g6njg6rjga/kvb/jgo/jgarjgY/jgarjgosuCisgIC0tc2ltcGxlLXByb21wdCAgIOmdnuW4 uOOBq+OCt+ODs+ODl+ODq+OBquODl+ODreODs+ODl+ODiOOCkueUqOOBhOOCi+ODouODvOOD ieOBp+OBmS4KKyAgLS1ub3Byb21wdAkgICAg44OX44Ot44Oz44OX44OI6KGo56S644KS6KGM 44Gq44KP44Gq44GELgorICAtLXRyYWNlcgkgICAg44Kz44Oe44Oz44OJ5a6f6KGM5pmC44Gr 44OI44Os44O844K544KS6KGM44Gq44GGLgogICAtLWJhY2stdHJhY2UtbGltaXQgbgotCQkg ICAgGyRCJVAlQyUvJUglbCE8JTlJPTwoJHIlUCVDJS8lSCVsITwlOSRORiwkKyRpGyhCIG4s IBskQjhlJG0bKEIKLQkJICAgIBskQiQrJGkbKEJuGyRCJEAkMTlUJEokJhsoQi4gGyRCJUcl VSUpJWslSCRPGyhCMTYgCi0gIC0taXJiX2RlYnVnIG4JICAgIGlyYhskQiROJUclUCVDJTAl RyVQJUMlMCVsJVklayRyGyhCbhskQiRLQF9EaiQ5JGsbKEIoGyRCTXhNUSQ3JEobKEIKLQkJ ICAgIBskQiQkSn0kLEw1RnEkRyQ3JGckJhsoQikuCi0gIC12LCAtLXZlcnNpb24JICAgIGly YhskQiROJVAhPCU4JWclcyRyST08KCQ5JGsbKEIKKwkJICAgIOODkOODg+OCr+ODiOODrOOD vOOCueihqOekuuOCkuODkOODg+OCr+ODiOODrOODvOOCueOBrumgreOBi+OCiSBuLCDlvozj go0KKwkJICAgIOOBi+OCiW7jgaDjgZHooYzjgarjgYYuIOODh+ODleOCqeODq+ODiOOBrzE2 IAorICAtLWlyYl9kZWJ1ZyBuCSAgICBpcmLjga7jg4fjg5Djg4PjgrDjg4fjg5Djg4PjgrDj g6zjg5njg6vjgpJu44Gr6Kit5a6a44GZ44KLKOWIqeeUqOOBl+OBqgorCQkgICAg44GE5pa5 44GM54Sh6Zuj44Gn44GX44KH44GGKS4KKyAgLXYsIC0tdmVyc2lvbgkgICAgaXJi44Gu44OQ 44O844K444On44Oz44KS6KGo56S644GZ44KLCisKKyMgdmltOmZpbGVlbmNvZGluZz11dGYt OApkaWZmIC0tZ2l0IGEvbGliL2lyYi9sb2NhbGUucmIgYi9saWIvaXJiL2xvY2FsZS5yYgpp bmRleCA4NTViZTMxLi5mZjhkM2E0IDEwMDY0NAotLS0gYS9saWIvaXJiL2xvY2FsZS5yYgor KysgYi9saWIvaXJiL2xvY2FsZS5yYgpAQCAtOCw0MyArOCw1MSBAQAogIwogIyAgIAogIwot Ci1hdXRvbG9hZCA6S2NvbnYsICJrY29udiIKLQogbW9kdWxlIElSQgogICBjbGFzcyBMb2Nh bGUKICAgICBAUkNTX0lEPSctJElkJC0nCiAKLSAgICBKUERlZmF1bHRMb2NhbGUgPSAiamEi CisgICAgTE9DQUxFX05BTUVfUkUgPSAlclsKKyAgICAgICg/PGxhbmd1YWdlPltbOmFscGhh Ol1dezJ9KQorICAgICAgKD86XworICAgICAgICg/PHRlcnJpdG9yeT5bWzphbHBoYTpdXXsy LDN9KQorICAgICAgICg/OlwuCisJKD88Y29kZXNldD5bXkBdKykKKyAgICAgICApPworICAg ICAgKT8KKyAgICAgICg/OkAKKyAgICAgICAoPzxtb2RpZmllcj4uKikKKyAgICAgICk/Cisg ICAgXXgKICAgICBMT0NBTEVfRElSID0gIi9sYy8iCiAKLSAgICBkZWYgaW5pdGlhbGl6ZShs b2NhbGUgPSBuaWwpCi0gICAgICBAbGFuZyA9IGxvY2FsZSB8fCBFTlZbIklSQl9MQU5HIl0g fHwgRU5WWyJMQ19NRVNTQUdFUyJdIHx8IEVOVlsiTENfQUxMIl0gfHwgRU5WWyJMQU5HIl0g fHwgIkMiIAotICAgIGVuZAotCi0gICAgYXR0cl9yZWFkZXIgOmxhbmcKKyAgICBAQGxlZ2Fj eV9lbmNvZGluZ19hbGlhc19tYXAgPSB7fS5mcmVlemUKIAotICAgIGRlZiBsYzJrY29udihs YW5nKQotICAgICAgY2FzZSBsYW5nCi0gICAgICB3aGVuICJqYV9KUC51amlzIiwgImphX0pQ LmV1YyIsICJqYV9KUC5ldWNKUCIsICJqYV9KUC5FVUMtSlAiCi0gICAgICAgIEtjb252OjpF VUMKLSAgICAgIHdoZW4gImphX0pQLnNqaXMiLCAiamFfSlAuU0pJUyIKLSAgICAgICAgS2Nv bnY6OlNKSVMKLSAgICAgIHdoZW4gL2phX0pQLnV0Zi0/OC9pCi0JS2NvbnY6OlVURjgKKyAg ICBkZWYgaW5pdGlhbGl6ZShsb2NhbGUgPSBuaWwpCisgICAgICBAbG9jYWxlID0gbG9jYWxl IHx8IEVOVlsiSVJCX0xBTkciXSB8fCBFTlZbIkxDX01FU1NBR0VTIl0gfHwgRU5WWyJMQ19B TEwiXSB8fCBFTlZbIkxBTkciXSB8fCAiQyIgCisgICAgICBpZiBtID0gTE9DQUxFX05BTUVf UkUubWF0Y2goQGxvY2FsZSkKKwlAbGFuZywgQHRlcnJpdG9yeSwgQGVuY29kaW5nX25hbWUs IEBtb2RpZmllciA9IG1bOmxhbmd1YWdlXSwgbVs6dGVycml0b3J5XSwgbVs6Y29kZXNldF0s IG1bOm1vZGlmaWVyXQorCisJaWYgQGVuY29kaW5nX25hbWUKKwkgIGJlZ2luOyBsb2FkICdp cmIvZW5jb2RpbmdfYWxpYXNlcy5yYicgcmVzY3VlIExvYWRFcnJvcjsgZW5kCisJICBpZiBA ZW5jb2RpbmcgPSBAQGxlZ2FjeV9lbmNvZGluZ19hbGlhc19tYXBbQGVuY29kaW5nX25hbWVd CisJICAgIHdhcm4gIiVzIGlzIG9ic29sZXRlLiB1c2UgJXMiICUgWyIje0BsYW5nfV8je0B0 ZXJyaXRvcnl9LiN7QGVuY29kaW5nX25hbWV9IiwgIiN7QGxhbmd9XyN7QHRlcnJpdG9yeX0u I3tAZW5jb2RpbmcubmFtZX0iXQorCSAgZWxzZQorCSAgICBAZW5jb2RpbmcgPSBFbmNvZGlu Zzo6TE9DQUxFCisJICBlbmQKKwllbmQKICAgICAgIGVuZAogICAgIGVuZAotICAgIHByaXZh dGUgOmxjMmtjb252CisKKyAgICBhdHRyX3JlYWRlciA6bGFuZywgOnRlcnJpdG9yeSwgOmVu Y29kaW5nLCA6bW9kaWZpZWVyCiAKICAgICBkZWYgU3RyaW5nKG1lcykKICAgICAgIG1lcyA9 IHN1cGVyKG1lcykKLSAgICAgIGNhc2UgQGxhbmcKLSAgICAgIHdoZW4gL15qYS8KLQltZXMg PSBLY29udjo6a2NvbnYobWVzLCBsYzJrY29udihAbGFuZykpCisgICAgICBpZiBAZW5jb2Rp bmcKKwltZXMuZW5jb2RlKEBlbmNvZGluZykgCiAgICAgICBlbHNlCiAJbWVzCiAgICAgICBl bmQKLSAgICAgIG1lcwogICAgIGVuZAogCiAgICAgZGVmIGZvcm1hdCgqb3B0cykKQEAgLTEw NiwyNyArMTE0LDIwIEBAIG1vZHVsZSBJUkIKICAgICAgIGRpciA9ICIiIGlmIGRpciA9PSAi LiIKICAgICAgIGJhc2UgPSBGaWxlLmJhc2VuYW1lKGZpbGUpCiAKLSAgICAgIGlmIC9eamEo X0pQKT8kLyA9fiBAbGFuZwotIAliYWNrLCBAbGFuZyA9IEBsYW5nLCAiQyIKKyAgICAgIGlm IGRpclswXSA9PSA/LyAjLworCWxjX3BhdGggPSBzZWFyY2hfZmlsZShkaXIsIGJhc2UpCisJ cmV0dXJuIHJlYWxfbG9hZChsY19wYXRoLCBwcml2KSBpZiBsY19wYXRoCiAgICAgICBlbmQK LSAgICAgIGJlZ2luCi0JaWYgZGlyWzBdID09ID8vICMvCi0JICBsY19wYXRoID0gc2VhcmNo X2ZpbGUoZGlyLCBiYXNlKQotCSAgcmV0dXJuIHJlYWxfbG9hZChsY19wYXRoLCBwcml2KSBp ZiBsY19wYXRoCi0JZW5kCi0JCi0JZm9yIHBhdGggaW4gJDoKLQkgIGxjX3BhdGggPSBzZWFy Y2hfZmlsZShwYXRoICsgIi8iICsgZGlyLCBiYXNlKQotCSAgcmV0dXJuIHJlYWxfbG9hZChs Y19wYXRoLCBwcml2KSBpZiBsY19wYXRoCi0JZW5kCi0gICAgICBlbnN1cmUKLQlAbGFuZyA9 IGJhY2sgaWYgYmFjaworCisgICAgICBmb3IgcGF0aCBpbiAkOgorCWxjX3BhdGggPSBzZWFy Y2hfZmlsZShwYXRoICsgIi8iICsgZGlyLCBiYXNlKQorCXJldHVybiByZWFsX2xvYWQobGNf cGF0aCwgcHJpdikgaWYgbGNfcGF0aAogICAgICAgZW5kCiAgICAgICByYWlzZSBMb2FkRXJy b3IsICJObyBzdWNoIGZpbGUgdG8gbG9hZCAtLSAje2ZpbGV9IgogICAgIGVuZCAKIAogICAg IGRlZiByZWFsX2xvYWQocGF0aCwgcHJpdikKLSAgICAgIHNyYyA9IHNlbGYuU3RyaW5nKEZp bGUucmVhZChwYXRoKSkKKyAgICAgIHNyYyA9IE1hZ2ljRmlsZS5vcGVuKHBhdGgpe3xmfCBm LnJlYWR9CiAgICAgICBpZiBwcml2CiAJZXZhbCgic2VsZiIsIFRPUExFVkVMX0JJTkRJTkcp LmV4dGVuZChNb2R1bGUubmV3IHtldmFsKHNyYywgbmlsLCBwYXRoKX0pCiAgICAgICBlbHNl CkBAIC0xNTIsMjkgKzE1MywzOSBAQCBtb2R1bGUgSVJCCiAgICAgZW5kCiAKICAgICBkZWYg c2VhcmNoX2ZpbGUocGF0aCwgZmlsZSkKLSAgICAgIGlmIEZpbGUuZXhpc3Q/KHAxID0gcGF0 aCArIGxjX3BhdGgoZmlsZSwgIkMiKSkKLQlpZiBGaWxlLmV4aXN0PyhwMiA9IHBhdGggKyBs Y19wYXRoKGZpbGUpKQotCSAgcmV0dXJuIHAyCi0JZWxzZQotCWVuZAotCXJldHVybiBwMQot ICAgICAgZWxzZQorICAgICAgZWFjaF9zdWJsb2NhbGUgZG8gfGxjfAorCWZ1bGxfcGF0aCA9 IHBhdGggKyBsY19wYXRoKGZpbGUsIGxjKQorCXJldHVybiBmdWxsX3BhdGggaWYgRmlsZS5l eGlzdD8oZnVsbF9wYXRoKQogICAgICAgZW5kCiAgICAgICBuaWwKICAgICBlbmQKICAgICBw cml2YXRlIDpzZWFyY2hfZmlsZQogCi0gICAgZGVmIGxjX3BhdGgoZmlsZSA9ICIiLCBsYyA9 IEBsYW5nKQotICAgICAgY2FzZSBsYwotICAgICAgd2hlbiAiQyIKKyAgICBkZWYgbGNfcGF0 aChmaWxlID0gIiIsIGxjID0gQGxvY2FsZSkKKyAgICAgIGlmIGxjLm5pbD8KIAlMT0NBTEVf RElSICsgZmlsZQotICAgICAgd2hlbiAvXmphLwotCUxPQ0FMRV9ESVIgKyAiamEvIiArIGZp bGUKICAgICAgIGVsc2UKIAlMT0NBTEVfRElSICsgQGxhbmcgKyAiLyIgKyBmaWxlCiAgICAg ICBlbmQKICAgICBlbmQKICAgICBwcml2YXRlIDpsY19wYXRoCisKKyAgICBkZWYgZWFjaF9z dWJsb2NhbGUKKyAgICAgIGlmIEBsYW5nCisJaWYgQHRlcnJpdG9yeQorCSAgaWYgQGVuY29k aW5nX25hbWUKKwkgICAgeWllbGQgIiN7QGxhbmd9XyN7QHRlcnJpdG9yeX0uI3tAZW5jb2Rp bmdfbmFtZX1AI3tAbW9kaWZpZXJ9IiBpZiBAbW9kaWZpZXIKKwkgICAgeWllbGQgIiN7QGxh bmd9XyN7QHRlcnJpdG9yeX0uI3tAZW5jb2RpbmdfbmFtZX0iCisJICBlbmQKKwkgIHlpZWxk ICIje0BsYW5nfV8je0B0ZXJyaXRvcnl9QCN7QG1vZGlmaWVyfSIgaWYgQG1vZGlmaWVyCisJ ICB5aWVsZCAiI3tAbGFuZ31fI3tAdGVycml0b3J5fSIKKwllbmQKKwl5aWVsZCAiI3tAbGFu Z31AI3tAbW9kaWZpZXJ9IiBpZiBAbW9kaWZpZXIKKwl5aWVsZCAiI3tAbGFuZ30iCisgICAg ICBlbmQKKyAgICAgIHlpZWxkIG5pbAorICAgIGVuZAorICAgIHByaXZhdGUgOmVhY2hfc3Vi bG9jYWxlCiAgIGVuZAogZW5kCiAKZGlmZiAtLWdpdCBhL2xpYi9pcmIvbWFnaWMtZmlsZS5y YiBiL2xpYi9pcmIvbWFnaWMtZmlsZS5yYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi44NjEyNjIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2lyYi9tYWdpYy1maWxl LnJiCkBAIC0wLDAgKzEsMzYgQEAKK21vZHVsZSBJUkIKKyAgY2xhc3MgPDwgKE1hZ2ljRmls ZSA9IE9iamVjdC5uZXcpCisgICAgIyBzZWUgcGFyc2VyX21hZ2ljX2NvbW1lbnQgaW4gcGFy c2UueQorICAgIEVOQ09ESU5HX1NQRUNfUkUgPSAlciJjb2RpbmdccypbPTpdXHMqKFtbOmFs bnVtOl1cLV9dKykiCisKKyAgICBkZWYgb3BlbihwYXRoKQorICAgICAgaW8gPSBGaWxlLm9w ZW4ocGF0aCwgJ3JiJykKKyAgICAgIGxpbmUgPSBpby5nZXRzCisgICAgICBsaW5lID0gaW8u Z2V0cyBpZiBsaW5lWzAsMl0gPT0gIiMhIgorICAgICAgZW5jb2RpbmcgPSBkZXRlY3RfZW5j b2RpbmcobGluZSkKKyAgICAgIGVuY29kaW5nIHx8PSBkZWZhdWx0X3NyY19lbmNvZGluZwor ICAgICAgaW8ucmV3aW5kCisgICAgICBpby5zZXRfZW5jb2RpbmcoZW5jb2RpbmcsIG5pbCkK KworICAgICAgaWYgYmxvY2tfZ2l2ZW4/CisgICAgICAgIGJlZ2luCisgICAgICAgICAgcmV0 dXJuICh5aWVsZCBpbykKKyAgICAgICAgZW5zdXJlCisgICAgICAgICAgaW8uY2xvc2UKKyAg ICAgICAgZW5kCisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBpbworICAgICAgZW5kCisg ICAgZW5kCisKKyAgICBwcml2YXRlCisgICAgZGVmIGRldGVjdF9lbmNvZGluZyhsaW5lKQor ICAgICAgcmV0dXJuIHVubGVzcyBsaW5lWzBdID09ID8jCisgICAgICBsaW5lID0gbGluZVsx Li4tMV0KKyAgICAgIGxpbmUgPSAkMSBpZiBsaW5lWy8tXCotXHMqKC4qPylccyotKi0kL10K KyAgICAgIHJldHVybiBuaWwgdW5sZXNzIEVOQ09ESU5HX1NQRUNfUkUgPX4gbGluZQorICAg ICAgZW5jb2RpbmcgPSAkMQorICAgICAgcmV0dXJuIGVuY29kaW5nLnN1YigvLSg/Om1hY3xk b3N8dW5peCkvaSwgJycpCisgICAgZW5kCisgIGVuZAorZW5kCmRpZmYgLS1naXQgYS9saWIv aXJiL3J1YnktbGV4LnJiIGIvbGliL2lyYi9ydWJ5LWxleC5yYgppbmRleCAyNTY5ZmQ5Li5i MjFmMGQzIDEwMDY0NAotLS0gYS9saWIvaXJiL3J1YnktbGV4LnJiCisrKyBiL2xpYi9pcmIv cnVieS1sZXgucmIKQEAgLTI0MCw2ICsyNDAsNyBAQCBjbGFzcyBSdWJ5TGV4CiAJICAgIGVu ZAogCSAgZW5kCiAJICBpZiBAbGluZSAhPSAiXG4iCisgICAgICBAbGluZS5mb3JjZV9lbmNv ZGluZyhAaW8uZW5jb2RpbmcpCiAJICAgIHlpZWxkIEBsaW5lLCBAZXhwX2xpbmVfbm8KIAkg IGVuZAogCSAgYnJlYWsgdW5sZXNzIGwKZGlmZiAtLWdpdCBhL2xpYi9pcmIvc3JjX2VuY29k aW5nLnJiIGIvbGliL2lyYi9zcmNfZW5jb2RpbmcucmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMTI4YmM2MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pcmIvc3Jj X2VuY29kaW5nLnJiCkBAIC0wLDAgKzEsNCBAQAorIyBETyBOT1QgV1JJVEUgQU5ZIE1BR0lD IENPTU1FTlQuCitkZWYgZGVmYXVsdF9zcmNfZW5jb2RpbmcKKyAgcmV0dXJuIF9fRU5DT0RJ TkdfXworZW5kCg== --------------080602050305000109030107--