スクランブルを解除したストリームを再生して初めて、VLC プレイヤーが ARIB 字幕に対応していることを知りました。
VLC プレイヤーが ARIB 字幕(青色の字)を表示しているところ
すごいな VLC プレイヤー……。
ネットワーク帯域食いすぎ問題は、試しに Null パケット(PID: 0x1fff)を全て捨てたところ、帯域が半分(地デジで 30Mbps → 16Mbps)くらいになりました。
追加でワンセグ、字幕、音声も捨ててみましたが、あまり帯域は変わりません。1Mbps 変わるくらいかな…。
VLC プレイヤーさん曰く、動画の平均ビットレートが 13Mbps ほどらしいので、TS 化のオーバーヘッドと、UDP/IP のオーバヘッドも考えるとこんなもんなんでしょう。
Null パケットを捨てて BS プレミアムを UDP で送った時の帯域
我が家の PT2 は元々 Null パケットを捨てているらしく、デスクランブラ側で Null パケットを捨てようが捨てまいが、特に帯域は変わりませんでした。写真は BS プレミアムのときの帯域です。地デジよりはちょっと高目かな?
メモ: 技術系の話は Facebook から転記しておくことにした。加筆あり。
ISDB 用のチューナーとデモジュレーターを買ってきて、動かせる人ならば、放送されている MPEG2-TS をそのままコピーできてしまいます。PT2 はそんな感じの製品です。
じゃあテレビ番組はコピーし放題かというと、そんなことはありません。日本では B-CAS カードの発行許可と、ダビング 10 の順守によって、番組のコピーが出回るのを防いでいます。
ダビング 10 とは、無料放送でも 10回までしかコピーしてはいけないルールのことです。市販のテレビは全てこのルールを守っています。
ルールはダビング 10 以外にも色々ありますが、全てのルールを守らないと日本向けのテレビとして認められず、B-CAS カードが発行されません。
例えば TS を無限にダビングできるような受信機には B-CAS カードは絶対に発行されません。B-CAS カードが無ければ、無料放送のスクランブルすら解除できませんから、いくら MPEG2-TS をコピーしても視聴できません。
一見良さそうな仕組みに見えますが、実は穴だらけです。
スクランブルが掛かったまま構わずコピーし、RF 送出機(安いものでも 20万円くらいしますけど)を使い、正規のテレビに送れば、何度でも視聴できます。
また、正規のテレビから B-CAS カードを奪うこともできます。テレビと B-CAS カードに関連付けが無いからできる技ですが、これは仕様の穴ではなく想定通りのはずです。
B-CAS は有料放送の視聴管理、つまり、スカパーや WOWOW を何年の何月まで見る資格があります、という情報を管理するためのカードです。もしテレビと B-CAS が紐づいていたら、テレビを買い換えた瞬間に有料放送の契約が全て消えてしまいます。そんなことしたら、みなさん怒りますよね?
何が何でもコピーを阻止したい人たち(テレビ局などのコンテンツホルダー?)は B-CAS を乱用して、無料放送にスクランブル掛けたり、ダビング 10 とか、色々頑張っているものの……。
悲しいことに本当に悪い人から見ると、今の仕組みは有っても無くても大差ないです。真っ当に使っている人が不便するだけの嫌がらせ(ダビング 1 から、ダビング 10 への移行で少しマシになったけど)です。
メモ: 技術系の話は Facebook から転記しておくことにした。
また 10種類ほどアップロードして、アイス 101種類になりました(リンク)。ついに 100種類突破。前回からの増分を数えてみると、
赤城乳業は圧倒的。森永も結構多いです。ストックはまだまだありますよ。
その他がだいぶ増えたので、独立ページを増やした方が良いかな。同メーカーが 5種類くらいたまったら分離しているんですけど、3種類のメーカーがたくさん…。
九州のセリア・ロイルというアイス会社があります(リンク)、有名な商品は「白くま」と「ブラックサンダー」ですね。この会社、色々な商品に関わっています。ルマンドアイスにも関わっているそうです。
ところが商品の表側でセリア・ロイルの社名を見かけることはあまりなく、共同企画もしくは製造担当として、商品の「裏側」で社名を見かけることが多いです。
自社ブランドより共同企画商品を優先…?戦略なのでしょうか。全国区の会社なのに、ちょっと不思議な会社ですね。
だいぶ昔に購入したゲームコントローラー(おそらく Logicool F710 だと思う)のゴム部分が劣化してベタベタになってしまったので、買い換えました。
新たに買ったのは ELECOM JC-U3808TWH です。近所のジョーシンで安かったので買ってみました。どこからどう見てもスーパーファミコンのコントローラーですね。
この製品は割と最近(2年前)の製品ですが、どうしてかエレコムから製品の紹介サイトが完全に消え去っていて、当時のニュースリリースに小さな写真を残すのみとなっています。
生産終了品とはいえ、サイトまで根絶やしにする必要はないと思うんですが、何か嫌なことでもあったのでしょうか…??
目次: 射的 - まとめリンク
たまに「子供の時に欲しかったけど、買えなかったおもちゃ」を大人買いしています。大人は良いぞ。
ラジコンカー、ラジコンヘリ、エアガン(エアソフトガンのこと、狩猟用の空気銃のことではありません)ときて、今回は 18歳以上限定のガスガンを買ってみました。東京マルイ M92F Military Model です。Amazon で 1万円くらいでした。東京マルイはエアガン、ガスガンの定番メーカーですね。M92F と言われても意味不明でしょうけど、ベレッタといえばわかる人も居るでしょう。
ちなみに兵器、銃器の類は Wikipedia の説明が異様に詳しく、ベレッタも例外ではありません(ベレッタ 92 - Wikipedia)。その手の執筆者が多いんでしょうかね……?
ガスガンの商品名は M92F という名前になっていますが、どうも頭の M は余計みたいです。Wikipedia 曰く Beretta modello 92 のバリエーション 92F ですから、M92F じゃなくて、ベレッタ 92F が正しいお名前とのこと。
でもこのガスガン、刻印を見ると M9 と書いてあるので、米軍の M9 ピストルを元にしているのだろうと思います。M9 と 92F を混ぜて、M92F という名称にした?のかな??
なんで M9 にしなかったんだろ?と思ったら、東京マルイのサイトに M9 ピストルも売っていました。なぜか M9 の方が M92F より 3,000円くらい高いです。不思議ですね。素人目にはほぼ同じに見えます……。
まあ、箱に書いてある名前と、刻印が多少違っていても害はありません。安く買えて良かったです。
目次: 射的 - まとめリンク
ガスガンが手元に届きました。箱の中はこんな感じで、銃本体とマガジンが分かれて入っています(説明書などの紙類は取り除いています)。
東京マルイ M92F Military Model 箱の中身
一度、全部取り出してから戻して写真を撮ったので、買った直後の状態と比べると、左の小物入れなどの細かい部分は少し違っているかもしれません。
銃本体だけ取り出すとこんな感じです。武器にオシャレと言うのも何か変ですけど、スライド上部の欠け方が格好良いと思います。映画などでも人気の銃だそうで、納得のデザインですね。
乾いたタオル(撃った BB 弾の跳弾防止)を段ボール箱に入れ、20発くらい試し打ちしてみました。撃った瞬間にスライドが後ろにガツンと下がる、実銃のような動きが良いです。リコイルって言うんですかね?とにかくナイスなギミックです。
電動ガンはこのギミックが無いらしいので、これだけでもガスガン良いじゃん!買ってよかった〜と思います。気に入りました。
電動ガンと比較するとガスガンは、リコイルの衝撃で銃がブレて照準が合わせづらい、ガスが高価なためランニングコストが高い、連射したり気温が低いとガス圧が落ちて、威力が下がったり動作に不具合が出るなど、欠点も多いのですが…。
これらの欠点はいずれも、サバイバルゲームを頻繁に楽しむ方など、何百〜何千発も打つ人しか気にならないはずですから、安心して好きなものを買って楽しんだら良いと思います。
エアガンを買った時も思ったのですが、エアガン、ガスガンを撃てる場所…というか撃っても迷惑が掛からない時間、場所って身近に無いんですよ。
18歳以上限定のエアガン、ガスガンは安全(直撃しても死にはしない)に出来ているとはいえ、威力はかなり高めです。素肌に撃ったらケガするか超痛いですし、眼に当たると失明の危険があります。
誰が射線に入ってくるかわかりませんから、近所の公園や道端でエアガン、ガスガンをぶっ放してはいけません。危ない、絶対ダメ!
発射音「ボン!!」という音がかなりうるさいため、早朝、夜中にぶっ放すのもやめた方が良いでしょう。近所迷惑です。
BB 弾は小さく硬いので、踏むとかなり痛いです。何も考えず部屋でガスガンをぶっ放すと、飛び散った BB 弾を踏む羽目になります、なりました。足が痛え。
そんなこんなで、私も撃つ場所に困ってしまいました。
サバイバルゲームをやらない限り、1万円のオモチャがこのままお蔵入り?まさか…そんな馬鹿な……??と思いきや、この世には「シューティングバー」なる、エアガン、ガスガンを持ち込んで、ぶっ放せるスペースを備えたバーがあることを知りました。
これは素敵です。今度行ってみようと思います。
ノート PC の力不足を感じるようになってきたので、新しいノート PC を注文しました。ベースは ThinkPad E480 のパフォーマンスモデルです。今使っているのは ThinkPad Edge E420 ですから、6年経過(※)しました。毎年買うようなものでもないし、アップグレードとしては順当な期間かな……。
CPU 周りとグラフィクスを換装するカスタム注文をしています。
CPU は特に不満は無いのですが、第 8 世代 Core i5 は、第 7 世代以前に比べてコア数が倍になって面白そうなので、あえてカスタムしました。
グラフィクスは E420 の不満点だったので、AMD Radeon RX 550 を選びました…というより、内蔵グラフィクスの Intel UHD Graphics 620 か Radeon RX 550 しか選択肢がないです。RX 550 はローエンド向けですが、内蔵グラフィクスよりはマシなはずです。
そろそろ新しい Office も欲しかったので、Office Home & Business 2016 も付けました。お値段は Lenovo の直販サイトで 109,890円でした。届くのは月末になるそうです。楽しみです。
(※)ThinkPad E シリーズは、型番 E4x0 の x の部分が毎年 1ずつ増えているようです。将来、ルールが変わるかもしれませんけど。
行ってきました。京橋の SHOOTING BAR FIVE というお店です。店員さんは親切&フレンドリーです。お客さんは常連さんというのか、顔見知りの方が多いようですが、ハブられたりはしないです。
レンタルにも対応していますので、手ぶらで訪れても OK なお店です。楽しかったです。
しかし最近、喉の調子があまり良くないのか、タバコなどの煙が強いところにいくと、喉が痛くて息苦しくなってしまいます。バーは普通タバコを吸って OK なので、お店に全く問題はないんですよ。私個人の問題です。
思い返せば、お葬式に行ったときも、部屋に充満する線香の煙で目と喉がおかしくなって非常に辛かったので、体質なんでしょうか。バーを素直に楽しみたいのになあ、困ったもんです……。
大阪北部地震が直撃しました。震源の住所を見たら、直線で 7〜8km くらいの距離でした。こんな近くで地震が起きたのは初めてです。
遠方にお住まいの皆さんから、いろいろご心配いただきまして、ありがとうございました。夫婦ともに無事で、部屋や家財にも深刻な被害はありませんでした。
本棚は倒れなかったものの、本が大量に散乱し、部屋が散らかり放題になりました。
あと、アパートの壁が割れました。大丈夫かね、この建物。
食器棚が倒れたり、食器が割れたりしたご家庭も多かったようですが、我が家の食器棚は微動だにせず、ドアすら開かず、そのままの姿で佇んでいました。強いな君……。
冷蔵庫は地震の衝撃で全てのドアが開き、エラーで止まりました。地震発生時、偶然、部屋にいたので冷蔵庫のドアに気づいて、すぐ閉めることができ、中の食材も無事でしたが、もし出かけている時間帯だったら食材、特に冷凍庫は全滅していたと思います。
また部屋の壁のところどころに穴が開いてしまいました。本棚や冷蔵庫が地震でぶっ飛んだとき激突したのでしょう。これは誰が直すべきなんでしょうね?奥さんがメールで不動産屋に聞いてくれていますが、今のところお返事が無いです。
向こう 1週間はさらに大地震がくるかもしれない、油断ならないとのことなので、食器棚、冷蔵庫は養生テープで目張りして、ドアが容易に開かないようにします。
また重量物(電子レンジ、鍋)などは床など、自分に向かって吹っ飛んでこない場所に置いています。
先日の大阪北部地震でデスクトップマシン本体と、自宅サーバーの外付け HDD が空を舞いました。電源が入った状態で床に叩きつけられたにも関わらず、どちらもデータ読み出しに支障はなく、最近の HDD はすごいな〜!と感心しましたが、寿命は確実に縮んだと思います。
デスクトップマシンは以前の買い替えから約 2年半(サーバーは 1年弱)が経過しており、正常利用だったとしても、そろそろ HDD に故障が出る時期です。サーバーの HDD はまだ買い替えには早いですが、容量アップも兼ねて一緒に替えることにしました。
購入した HDD は下記の 2種類です。
1つ目は WD Red WD40EFRX-RT2 です。Amazon で 14,900円でした。容量は 4TB、用途は NAS用とあります。回転数は 5400rpm、キャシュは 64MB です。サーバーとデスクトップのメイン HDD として使います。
2つ目は Seagate IronWolf ST4000VN008 です。Amazon で 12,480円でした。容量は同じく 4TB、用途は NAS、サーバー、ゲーム、映像編集向けとあります。回転数は 5900rpm、キャッシュは 64MB です。サーバーの 2台目バックアップ用の HDD として使います。
Seagate IronWolf は 6TB 以上と 4TB 以下でスペックがやや違います。具体的には、回転数 7,200rpm(6TB モデル)-> 5,900rpm(4TB モデル)、キャッシュが 256MB -> 64MB となります。同じシリーズだと思って油断していました。悲しい。
このサイトには Namazu を使った検索機能を設置していますが、撤去したいと思っています。Namazu は Sakura のサーバーの Perl のバージョンが入れ替わるたびに動かなくなってメンテナンスが面倒、既に開発が止まっている、など今後が不安です。
一番困っている点は UTF-8 に対応していないことで、日記の表示されているページ(UTF-8)から、日本語を入力して検索すると文字化けしてしまいます。
実は Namazu の検索結果ページは EUC-JP で出力されるので、一度、検索結果ページを表示してから、もう一回、日本語で入力すれば文字化けしません。しかし検索機能を使う人はそんなこと知りませんから、ナニコレ…日本語検索できないじゃん……。と思ったはずです。
Namazu の代わりを探して、お試しで Google カスタム検索の検索ボックスを設置しました。
検索ボックスを設置した感想としては、手間要らず、動作も良好、これは便利です。色々なサイトで設置されているのも納得できます。少し使ってみた感想としては、Namazu と比べると Google の検索結果はやや少なく出ると思います。
Google 先生は、相手が有名サイトであれば、多少単語が間違っていようと、見たかった検索結果を返してくれます。ここのように無名なサイトだと、ドンピシャのキーワードを入れても、検索結果に出ないことがあります。おそらくこのサイトは Google にあまりクロールされていないのでしょう。
Google の検索結果はどうしようもないので、Namazu の UTF-8 文字化け問題を直した方が良いのかなあ。うーむ。
目次: Kindle - まとめリンク
Kindle の本は「ダブって買うことがない」利点があります。
が、例外もあって、今回ハマってしまいました。
Amazon の電子書籍には必ず ASIN(Amazon Standard Identification Number)というユニークな ID が振られています。Amazon ストアの URL の最後に付いている、謎の英数字、あれが ASIN です。
Kindle ストアで本を選択したとき、自動的に購入済みの ASIN かどうか(=その本を持っているかどうか)チェックされ、購入済みか否かで、ストアに表示されるボタンが変わります。例えば 500円の本なら、
このように 3パターンのうち適切なボタンが表示されます。また、ブラウザの戻る機能で購入ページに戻り、同じ購入ボタンを押しても「あなた、もう買ってるでしょ?」って言われます。Kindle のダブり防止機能はかなり強力です。
この素敵な機能のおかげで、同じ本を 2冊買うことはほぼありません。
Kindle のダブり防止は「同じ本なら、ずっと同じ ASIN」という前提に依存していますので、この前提が崩れてしまうと、チェックが効かず、同じ本を 2回買えてしまいます。例えば、下記のような場合です。
私が今回ハマったパターンは後者でした。オンライン The Comic という本の 9巻目で、同じ本のようですが、なぜか ASIN: B07CH794VZ(以降、旧版)と、ASIN: B07CSVJYL2(以降、新版)の 2つの ASID が存在しています。そのため、
このような経緯で 2冊買ってしまいました。ちなみに現在、旧版は買えず、評価ページだけが悲しく残っています。
Amazon のカスタマーサポートに連絡したところ、新版の購入を取り消して、返金してもらうことができました。またカスタマーサポートの方が言うには「ストア内で本の入れ替えはある」ようです。
今回のような ASIN の付け替えは良くあるのか?珍しいのか?ちょっと気になります。あまり気軽に ASIN の付け替えをやられますと、購入、未購入の管理が結構辛くなります。
しかしまあ、今まで 6,000冊ほど買ってきて、今回初めて ASIN の付け替えに当たったので、体感的にそんなに頻度は高くないように思います。普通に楽しむ程度なら、まず困らない頻度だとは思います。
Namazu の延命策として、検索文字列に UTF-8 文字列を投げられるようにしました。
といっても、オリジナルの CGI を namazu.cgi → namazu2.cgi にリネームして、下記のラッパー CGI を用意しただけです。
Sakura は Perl が 2種類(/usr/bin/perl = perl 5.8, /usr/bin/perl5 = perl 5.14)入っていて、perl 5.14 だけ Text::Iconv がインストールされています。しかしなぜか @INC にパスが通っていません。仕方ないので、かなりダサいですが、強引にパスを通しています。
#!/usr/bin/perl5
use lib '/usr/local/lib/perl5/site_perl/5.14/mach';
use CGI;
use Text::Iconv;
my $cv = Text::Iconv->new("UTF-8", "EUC-JP");
my $cgi = CGI->new;
my $q_cv = $cv->convert(scalar $cgi->param('query'));
$cgi->param('query', $q_cv);
$q_str = $cgi->query_string();
print "Location: namazu2.cgi?" . $q_str . "\n\n";
今回スクリプトを書いていて初めて知ったのですが CGI の param 関数を読んでスカラ値を受けたい場合 scalar $cgi->param('query') という書き方をした方が良いそうです。
理由の詳細はこのブログ(New Class of Vulnerability in Perl Web Applications)に載っていますが、ハッシュで受けると意図せず他の値を上書きしてしまう可能性があるので、明示的にスカラとして受け取るべき、ということらしいです。
Perl 初心者の私がなぜ気づいたかというと、動作テストをしたときに Apache の動作ログに、下記の Warning が記録されたからです。
AH01215: CGI::param called in list context from /home/katsuhiro/public_html/namazu/aaa.cgi line 8, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at /usr/share/perl5/CGI.pm line 412.
初心者にはエラーメッセージだけだと意味がわかりませんが、Warning メッセージに言われるがまま /usr/share/perl5/CGI.pm 412行目を見ると、
# list context can be dangerous so warn:
# http://blog.gerv.net/2014.10/new-class-of-vulnerability-in-perl-web-applications
if ( wantarray && $LIST_CONTEXT_WARN == 1 ) {
my ( $package, $filename, $line ) = caller;
if ( $package ne 'CGI' ) {
$LIST_CONTEXT_WARN++; # only warn once
warn "CGI::param called in list context from $filename line $line, this can lead to vulnerabilities. "
. 'See the warning in "Fetching the value or values of a single named parameter"';
}
}
危険な理由として、先ほど紹介したブログの URL を書いてくれていました。親切ですね。ブログを読んだので何となくわかりましたが、説明なしでは若干難解なコードかもしれません…。
Android 8 のチューナー周りについて、家でも少し調べていたので、わかったことのメモを貼っておきます。環境は下記の通りです。
チューナーの動作は大きく分けると、チャンネルスキャン、視聴の 2つです。
チャンネルスキャンは全てのチャンネルに対してチューニングを行って、受信できるかどうか試す動作を指します。Android 8 の場合、フレームワーク内部にチャンネルのリストを持っていて、リストの先頭から試す仕組みになっているようです。
コードを見た感じ、処理は下記のように進むようです。
// @ src/com/android/tv/tuner/setup/TunerSetupActivity.java TunerSetupActivity::executeAction(String category, int actionId, Bundle params) switch (category) case ConnectionTypeFragment.ACTION_CATEGORY: mLastScanFragment = new ScanFragment(); Bundle args1 = new Bundle(); // actionId は GUI 画面の選択肢(Antenna, Cable, Not sure)の // 上から何番目か?に相当する、一番上が actionId = 0 // ★★ CHANNEL_MAP_SCAN_FILE は後述 args1.putInt(ScanFragment.EXTRA_FOR_CHANNEL_SCAN_FILE, CHANNEL_MAP_SCAN_FILE[actionId]); // ...snip... // ScanFragment を実行、表示する showFragment(mLastScanFragment); ScanFragment::onCreateView() @ src/com/android/tv/tuner/setup/ScanFragment.java ScanFragment::startScan() new ChannelScanTask() ChannelScanTask::execute() ScanFragment::ChannelScanTask::doInBackground() @ src/com/android/tv/tuner/setup/ScanFragment.java //チャンネルリストを得る ChannelScanFileParser::parseScanFile() @ src/com/android/tv/tuner/setup/ScanFragment.java ScanFragment::ChannelScanTask::scanChannels() TunerTsStreamer::startStream(ChannelScanFileParser.ScanChannel) @ src/com/android/tv/tuner/source/TunerTsStreamer.java TunerHal::tune() @ src/com/android/tv/tuner/TunerHal.java Java_com_android_tv_tuner_TunerHal_nativeTune() @ jni/tunertvinput_jni.cpp DvbManager::tune() @ jni/DvbManager.cpp //DVB API v5 でのチューニング方法 ioctl(FE_SET_PROPERTY) // /dev/dvb0.fe0 などに対して実施
DvbManager::tune() は ATSC 決め打ちの場所があって、DVB や ISDB など他の放送規格には対応していないように見えます。
CHANNEL_MAP_SCAN_FILE はスキャンするチャンネルの一覧が書いてあるファイルのリソース ID が並んでいます。
private static final int CHANNEL_MAP_SCAN_FILE[] = { R.raw.ut_us_atsc_center_frequencies_8vsb, R.raw.ut_us_cable_standard_center_frequencies_qam256, R.raw.ut_us_all, R.raw.ut_kr_atsc_center_frequencies_8vsb, R.raw.ut_kr_cable_standard_center_frequencies_qam256, R.raw.ut_kr_all, R.raw.ut_kr_dev_cj_cable_center_frequencies_qam256, R.raw.ut_euro_dvbt_all, R.raw.ut_euro_dvbt_all, R.raw.ut_euro_dvbt_all };
ちなみにファイルは packages/apps/TV/usbtuner-res/raw の下にあります。もし新しいファイル file_name を追加したいときは、ディレクトリの下にファイルを追加し、CHANNEL_MAP_SCAN_FILE に R.raw.file_name のように、追加すれば良いみたいです。
TV 視聴の際は、チューニングと MPEG2-TS データを受け取って、セクション解析する処理が行われるようです。
チューニングについては、チャネルスキャンで紹介した TunerHal::tune() が使われますので割愛して、TS データを受け取るところを調べます。どうも下記のようになっているようです。
TunerTsStreamer::StreamingThread::run() @ src/com/android/tv/tuner/source/TunerTsStreamer.java TunerHal::readTsStream() @ src/com/android/tv/tuner/TunerHal.java TunerHal::nativeWriteInBuffer() Java_com_android_tv_tuner_TunerHal_nativeWriteInBuffer() @ jni/tunertvinput_jni.cpp DvbManager::readTsStream() @ jni/DvbManager.cpp read() // /dev/dvb0.dvr0 など EventDetector::feedTSStream() @ src/com/android/tv/tuner/tvinput/EventDetector.java TsParser::feedTSData() @ src/com/android/tv/tuner/ts/TsParser.java TsParser::feedTSPacket() Stream::feedData() SectionStream::handleData() SectionParser::parseSections() @ src/com/android/tv/tuner/ts/SectionParser.java
詳細に調べ切れていませんが、動画や音声データは com.android.tv.tuner ではあまり触らないようです。ExoPlayer に丸投げですかね?
管理者: Katsuhiro Suzuki(katsuhiro( a t )katsuster.net)
This is Simple Diary 1.0
Copyright(C) Katsuhiro Suzuki 2006-2021.
Powered by PHP 5.2.17.
using GD bundled (2.0.34 compatible)(png support.)