From owner-freebsd-multimedia Wed Apr 15 20:05:59 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id UAA12691 for freebsd-multimedia-outgoing; Wed, 15 Apr 1998 20:05:59 -0700 (PDT) (envelope-from owner-freebsd-multimedia@FreeBSD.ORG) Received: from rah.star-gate.com (rah.star-gate.com [209.133.7.234]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id UAA12673 for ; Wed, 15 Apr 1998 20:05:48 -0700 (PDT) (envelope-from hasty@rah.star-gate.com) Received: from rah.star-gate.com (localhost.star-gate.com [127.0.0.1]) by rah.star-gate.com (8.8.8/8.8.8) with ESMTP id UAA16569; Wed, 15 Apr 1998 20:05:14 -0700 (PDT) (envelope-from hasty@rah.star-gate.com) Message-Id: <199804160305.UAA16569@rah.star-gate.com> X-Mailer: exmh version 2.0.2 2/24/98 To: Mark Handley cc: freebsd-multimedia@FreeBSD.ORG Subject: Re: vic, image corruption with Wincast/TV card In-reply-to: Your message of "Mon, 13 Apr 1998 12:26:39 EDT." <14875.892484799@north.lcs.mit.edu> Mime-Version: 1.0 Content-Type: multipart/mixed ; boundary="==_Exmh_10382221920" Date: Wed, 15 Apr 1998 20:05:14 -0700 From: Amancio Hasty Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org This is a multipart MIME message. --==_Exmh_10382221920 Content-Type: text/plain; charset=us-ascii > > I'm running vic 2.8 built with a grabber-meteor.cc I obtained from UCL > using a Wincast/TV card and FreeBSD 2.2.6-RELEASE. Only problem is > that I'm getting corruption of the captured image. This only seems to > happen when the frame rate is limited by the frame rate limiter and > not the bandwidth limiter. Given that I can control it on the > bandwidth slider alone, this isn't a big deal, but I'm still puzzled. > > Three questions: > > - has anyone seen this before? > > - can someone point me at a version of grabber-meteor.cc that they > think works OK with BT848 cards? > > - is there a later version of the BT848 driver than the one in > 2.2.6-RELEASE and 3.0-CURRENT? > > Thanks, > Mark > > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-multimedia" in the body of the message Hi Mark, The latest version of the bt848 driver can always be found at: http://www.freebsd.org/~ahasty/Bt848.html ftp://rah.star-gate.com/pub/bt848.tar.gz We typically don't have multiple versions of the bt848 driver floating around and this used to be a problem last year. Here is a version of grabber-meteor.cc which I am using and it is also available thru the Bt848 web page. Amancio --==_Exmh_10382221920 Content-Type: text/plain ; name="grabber-meteor.cc"; charset=us-ascii Content-Description: grabber-meteor.cc Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="grabber-meteor.cc" LyoKICogQ29weXJpZ2h0IChjKSBKaW0gTG93ZSwgMTk5NSwgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCiAq ICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKICogICAg ICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IEppbSBMb3dl CiAqIDQuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwogKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5Z IEVYUFJFU1MgT1IKICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFIElNUExJRUQKICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQogKiBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsCiAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUwogKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKICogU0VSVklDRVM7IExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CiAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCiAqIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQog KiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICovCgovKgogKiAxLjAJMTEvMDkvOTUK ICoJSW5pdGlhbCBSZWxlYXNlLgogKiAxLjEJMTIvMjAvOTUKICoJQ2hhbmdlZCB0byB1c2Ug bmV3IG1vZGUgaW4gbWV0ZW9yIGRyaXZlciAoTUVURU9SX0dFT19ZVVZfNDIyKSBhbmQKICoJ YWxsb3cgZXZlbiBvbmx5IGZpZWxkcyB0byBiZSBjYXB0dXJlZCB1bmRlciBjZXJ0YWluIGNv bmRpdGlvbnMuCiAqCUFkZGVkIEZSQU1FX0NOVFMgZGVidWdnaW5nIG9wdGlvbi4KICogMS4y CTMvMjUvOTYKICoJQ2hhbmdlZCB0aGUgY29uZGl0aW9ucyBFVkVOX09OTFkgbW9kZSB3YXMg c3BlY2lmaWVkLiAgV2Ugbm93IGNoZWNrCiAqCXRoZSBzdGF0dXMgdG8gZGV0ZXJtaW5lIGlm IHdlIGNhbiBydW4gaW4gRVZFTl9PTkxZIG1vZGUuCiAqIDEuMwk1LzEzLzk2CiAqCUFkZGVk IHRoZSBmcHMgY29kZSB0byB0aGUgZ3JhYmJlciBzbyB3ZSBvbmx5IHRyYW5zZmVyIHdoYXQg d2UgbmVlZC4KICoJCiAqLwoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIu aD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPHN5 cy90eXBlcy5oPgojaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiNpbmNsdWRlIDxzeXMvbW1hbi5o PgoKI2luY2x1ZGUgImdyYWJiZXIuaCIKI2luY2x1ZGUgImNyZGVmLmgiCiNpbmNsdWRlICJU Y2wuaCIKI2luY2x1ZGUgImRldmljZS1pbnB1dC5oIgojaW5jbHVkZSAibW9kdWxlLmgiCiNp bmNsdWRlICJic2QtZW5kaWFuLmgiCgojaW5jbHVkZSA8bWFjaGluZS9pb2N0bF9tZXRlb3Iu aD4KCi8qWFhYKi8KI2RlZmluZSBOVFNDX1dJRFRIIDMyMAojZGVmaW5lIE5UU0NfSEVJR0hU IDI0MAojZGVmaW5lIFBBTF9XSURUSCAzODQKI2RlZmluZSBQQUxfSEVJR0hUIDI4OAojZGVm aW5lIENJRl9XSURUSCAzNTIKI2RlZmluZSBDSUZfSEVJR0hUIDI4OAoKCmNsYXNzIE1ldGVv ckdyYWJiZXIgOiBwdWJsaWMgR3JhYmJlciB7CiAgICBwdWJsaWM6CglNZXRlb3JHcmFiYmVy KGNvbnN0IGNoYXIqIG5hbWUpOwoJdmlydHVhbCB+TWV0ZW9yR3JhYmJlcigpOwoJdmlydHVh bCBpbnQgY29tbWFuZChpbnQgYXJnYywgY29uc3QgY2hhcipjb25zdCogYXJndik7Cgl2aXJ0 dWFsIHZvaWQgZnBzKGludCk7Cgl2aXJ0dWFsIHZvaWQgc3RhcnQoKTsKCXZpcnR1YWwgdm9p ZCBzdG9wKCk7Cgl2aXJ0dWFsIGludCBncmFiKCk7CiAgICBwcm90ZWN0ZWQ6Cgl2b2lkIGZv cm1hdCgpOwoJdmlydHVhbCB2b2lkIHNldHNpemUoKSA9IDA7Cgl2b2lkIHN1cHByZXNzKGNv bnN0IHVfY2hhciogaW4sIGludCBpc3RyaWRlKTsKCXZpcnR1YWwgdm9pZCBzYXZlYmxrcyhj b25zdCB1X2NoYXIqIGluLCBpbnQgaXN0cmlkZSkgPSAwOwoJdm9pZCBzZXRfc2l6ZV9tZXRl b3IoaW50IHcsIGludCBoKTsKCglpbnQgdmlkZW9fZm9ybWF0XzsJLyogdmlkZW8gaW5wdXQg Zm9ybWF0OiBOVFNDIG9yIFBBTCAqLwoJaW50IGRldl87CQkvKiBkZXZpY2UgZmQgKi8KCWlu dCBwb3J0XzsJCS8qIHZpZGVvIGlucHV0IHBvcnQgKi8KCXVfaW50IGJhc2V3aWR0aF87CS8q IEhlaWdodCBvZiBmcmFtZSB0byBiZSBjYXB0dXJlZCAqLwoJdV9pbnQgYmFzZWhlaWdodF87 CS8qIFdpZHRoIG9mIGZyYW1lIHRvIGJlIGNhcHR1cmVkICovCgl1X2ludCBkZWNpbWF0ZV87 CS8qIGRpdmlzaW9uIG9mIGJhc2Ugc2l6ZXMgKi8KCXZvbGF0aWxlIHVfaW50KiBweXV2XzsJ LyogcG9pbnRlciB0byB5dXYgZGF0YSAqLwp9OwoKY2xhc3MgTWV0ZW9yNDIyR3JhYmJlciA6 IHB1YmxpYyBNZXRlb3JHcmFiYmVyIHsKICAgIHB1YmxpYzoKCU1ldGVvcjQyMkdyYWJiZXIo Y29uc3QgY2hhciogbmFtZSk7CiAgICBwcm90ZWN0ZWQ6Cgl2b2lkIHNldHNpemUoKTsKCXZv aWQgc2F2ZWJsayhjb25zdCB1X2NoYXIqIGluLCB1X2NoYXIqIHlwLCB1X2NoYXIqIHVwLCB1 X2NoYXIqIHZwLAoJCSAgICAgaW50IHN0cmlkZSwgaW50IGlzdHJpZGUpOwoJdm9pZCBzYXZl Ymxrcyhjb25zdCB1X2NoYXIqIGluLCBpbnQgaXN0cmlkZSk7Cn07CgpjbGFzcyBNZXRlb3JD SUZHcmFiYmVyIDogcHVibGljIE1ldGVvckdyYWJiZXIgewogICAgcHVibGljOgoJTWV0ZW9y Q0lGR3JhYmJlcihjb25zdCBjaGFyKiBuYW1lKTsKICAgIHByb3RlY3RlZDoKCXZvaWQgc2V0 c2l6ZSgpOwoJdm9pZCBzYXZlYmxrKGNvbnN0IHVfY2hhciogaW4sIHVfY2hhciogeXAsIHVf Y2hhciogdXAsIHVfY2hhciogdnAsCgkJICAgICBpbnQgc3RyaWRlLCBpbnQgaXN0cmlkZSk7 Cgl2b2lkIHNhdmVibGtzKGNvbnN0IHVfY2hhciogaW4sIGludCBpc3RyaWRlKTsKfTsKCmNs YXNzIE1ldGVvckRldmljZSA6IHB1YmxpYyBJbnB1dERldmljZSB7CiAgICBwdWJsaWM6CglN ZXRlb3JEZXZpY2UoY29uc3QgY2hhciogbmlja25hbWUsIGNvbnN0IGNoYXIqIGRldm5hbWUs IGludCBmcmVlKTsKCXZpcnR1YWwgaW50IGNvbW1hbmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIq Y29uc3QqIGFyZ3YpOwogICAgcHJvdGVjdGVkOgoJY29uc3QgY2hhciogbmFtZV87Cn07Cgpj bGFzcyBNZXRlb3JTY2FubmVyIHsKICAgIHB1YmxpYzoKCU1ldGVvclNjYW5uZXIoY29uc3Qg aW50IG4pOwp9OwoKc3RhdGljIE1ldGVvclNjYW5uZXIgZmluZF9tZXRlb3JfZGV2aWNlcyg0 KTsKCk1ldGVvclNjYW5uZXI6Ok1ldGVvclNjYW5uZXIoY29uc3QgaW50IG4pCnsKCWNoYXIq CWRldm5hbWVfdGVtcGxhdGUgID0gIi9kZXYvbWV0ZW9yJWQiOwoJY2hhcioJbmlja25hbWVf dGVtcGxhdGUgPSAiTWF0cm94IE1ldGVvciAlZCI7CgljaGFyKglkZXZuYW1lX3RlbXBsYXRl MSAgPSAiL2Rldi9ia3RyJWQiOwoJY2hhcioJbmlja25hbWVfdGVtcGxhdGUxID0gIkJyb29r VHJlZTg0OCAlZCI7CgoKCglmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CgkJY2hhcgkq ZGV2bmFtZSAgPSBuZXcgY2hhcltzdHJsZW4oZGV2bmFtZV90ZW1wbGF0ZSkgICsgM107CgkJ Y2hhcgkqbmlja25hbWUgPSBuZXcgY2hhcltzdHJsZW4obmlja25hbWVfdGVtcGxhdGUpICsg M107CgkJY2hhcgkqZGV2bmFtZTEgID0gbmV3IGNoYXJbc3RybGVuKGRldm5hbWVfdGVtcGxh dGUxKSAgKyAzXTsKCQljaGFyCSpuaWNrbmFtZTEgPSBuZXcgY2hhcltzdHJsZW4obmlja25h bWVfdGVtcGxhdGUxKSArIDNdOwoKCQlzcHJpbnRmKG5pY2tuYW1lLCBuaWNrbmFtZV90ZW1w bGF0ZSwgaSArIDEpOwoJCXNwcmludGYoZGV2bmFtZSwgZGV2bmFtZV90ZW1wbGF0ZSwgaSk7 CgoJCXNwcmludGYobmlja25hbWUxLCBuaWNrbmFtZV90ZW1wbGF0ZTEsIGkgKyAxKTsKCQlz cHJpbnRmKGRldm5hbWUxLCBkZXZuYW1lX3RlbXBsYXRlMSwgaSk7CgkJaWYoYWNjZXNzKGRl dm5hbWUsIFJfT0spID09IDApIHsKCQkJaW50IGZkID0gb3BlbihkZXZuYW1lLCBPX1JET05M WSk7CgkJCWlmKGZkIDwgMCkgewoJCQkJbmV3IE1ldGVvckRldmljZShuaWNrbmFtZSwgZGV2 bmFtZSwgMCk7CgkJCX0gZWxzZSB7CgkJCQkodm9pZCljbG9zZShmZCk7CgkJCQluZXcgTWV0 ZW9yRGV2aWNlKG5pY2tuYW1lLCBkZXZuYW1lLCAxKTsKCQkJfQoJCX0gZWxzZSB7CgkJCWRl bGV0ZSBuaWNrbmFtZTsKCQkJZGVsZXRlIGRldm5hbWU7CgkJfQoKCQlpZihhY2Nlc3MoZGV2 bmFtZTEsIFJfT0spID09IDApIHsKCQkJaW50IGZkID0gb3BlbihkZXZuYW1lMSwgT19SRE9O TFkpOwoJCQlpZihmZCA8IDApIHsKCQkJCW5ldyBNZXRlb3JEZXZpY2Uobmlja25hbWUxLCBk ZXZuYW1lMSwgMCk7CgkJCX0gZWxzZSB7CgkJCQkodm9pZCljbG9zZShmZCk7CgkJCQluZXcg TWV0ZW9yRGV2aWNlKG5pY2tuYW1lMSwgZGV2bmFtZTEsIDEpOwoJCQl9CgkJfSBlbHNlIHsK CQkJZGVsZXRlIG5pY2tuYW1lMTsKCQkJZGVsZXRlIGRldm5hbWUxOwoJCX0KCX0KCn0KCk1l dGVvckRldmljZTo6TWV0ZW9yRGV2aWNlKGNvbnN0IGNoYXIqIG5pY2tuYW1lLCBjb25zdCBj aGFyICpkZXZuYW1lLCBpbnQgZnJlZSk6CgkJCQkJSW5wdXREZXZpY2Uobmlja25hbWUpLCBu YW1lXyhkZXZuYW1lKQp7CglpZihmcmVlKQoJCWF0dHJpYnV0ZXNfID0gIlwKZm9ybWF0IHs0 MjIgNDExfSBcCnNpemUge2xhcmdlIG5vcm1hbCBzbWFsbCBjaWZ9IFwKcG9ydCB7UkNBIFBv cnQtMSBQb3J0LTIgUG9ydC0zIFMtVmlkZW8gUkdCfSI7CgllbHNlCgkJYXR0cmlidXRlc18g PSAiZGlzYWJsZWQiOwp9CgppbnQgTWV0ZW9yRGV2aWNlOjpjb21tYW5kKGludCBhcmdjLCBj b25zdCBjaGFyKmNvbnN0KiBhcmd2KQp7CglUY2wmIHRjbCA9IFRjbDo6aW5zdGFuY2UoKTsK CWlmICgoYXJnYyA9PSAzKSAmJiAoc3RyY21wKGFyZ3ZbMV0sICJvcGVuIikgPT0gMCkpIHsK CQlUY2xPYmplY3QqIG8gPSAwOwoJCWlmIChzdHJjbXAoYXJndlsyXSwgIjQyMiIpID09IDAp CgkJCW8gPSBuZXcgTWV0ZW9yNDIyR3JhYmJlcihuYW1lXyk7CgkJZWxzZSBpZiAoc3RyY21w KGFyZ3ZbMl0sICJjaWYiKSA9PSAwKQoJCQlvID0gbmV3IE1ldGVvckNJRkdyYWJiZXIobmFt ZV8pOwoJCWlmIChvICE9IDApCgkJCXRjbC5yZXN1bHQoby0+bmFtZSgpKTsKCQlyZXR1cm4g KFRDTF9PSyk7Cgl9CglyZXR1cm4gKElucHV0RGV2aWNlOjpjb21tYW5kKGFyZ2MsIGFyZ3Yp KTsKfQoKTWV0ZW9yR3JhYmJlcjo6TWV0ZW9yR3JhYmJlcihjb25zdCBjaGFyKiBuYW1lKQp7 CglkZXZfID0gb3BlbihuYW1lLCBPX1JET05MWSk7CglpZiAoZGV2XyA9PSAtMSkgewoJCXN0 YXR1c18gPSAtMTsKCQlyZXR1cm47Cgl9Cglwb3J0XyA9IE1FVEVPUl9JTlBVVF9ERVYwOwoJ dmlkZW9fZm9ybWF0XyA9IE1FVEVPUl9GTVRfQVVUT01PREU7CglkZWNpbWF0ZV8gPSAyOwoJ YmFzZXdpZHRoXyA9IFBBTF9XSURUSCAqIDI7CgliYXNlaGVpZ2h0XyA9IFBBTF9IRUlHSFQg KiAyOwoJCglpbnQgdGVtcCA9ICgoYmFzZXdpZHRoXyAqIGJhc2VoZWlnaHRfICogMiArIDQw OTUpLzQwOTYpKjQwOTY7CglweXV2XyA9ICh1X2ludCopIG1tYXAoKGNhZGRyX3QpMCwgdGVt cCwgUFJPVF9SRUFELCAwLCBkZXZfLCAob2ZmX3QpMCk7CglpZihweXV2XyA9PSAodV9pbnQq KS0xKQoJCXB5dXZfID0gMDsKfQoKTWV0ZW9yR3JhYmJlcjo6fk1ldGVvckdyYWJiZXIoKQp7 CglpZiAoZGV2XyAhPSAtMSkgewoJCWNsb3NlKGRldl8pOwoJfQp9Cgp2b2lkIE1ldGVvckdy YWJiZXI6OnNldF9zaXplX21ldGVvcihpbnQgdywgaW50IGgpCnsKCXN0cnVjdCBtZXRlb3Jf Z2VvbWV0IGdlb207CgoJZ2VvbS5yb3dzID0gaCAmfjB4ZjsJLyogMHhmLCB1Z2ghICovCgln ZW9tLmNvbHVtbnMgPSB3ICAmfjB4ZjsKCWdlb20uZnJhbWVzID0gMTsKCWdlb20ub2Zvcm1h dCA9IE1FVEVPUl9HRU9fVU5TSUdORUQgfCBNRVRFT1JfR0VPX1lVVl9QQUNLRUQ7CgkvKgoJ ICogSWYgd2UgY2FuIGdldCBieSB3aXRoIG9ubHkgcmVhZGluZyBldmVuIGZpZWxkcywgdGhl biBieSBhbGwKCSAqIG1lYW5zIGRvIHNvLgoJICovCgl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7 Cglpb2N0bChkZXZfLCBNRVRFT1JTVEFUVVMsICZzdGF0dXMpOwoJaWYoc3RhdHVzICYgTUVU RU9SX1NUQVRVU19IQ0xLKSB7CgkJLyogTm8gc291cmNlLCBhc3N1bWUgbnRzYyAqLwoJCWlm KGdlb20ucm93cyA8PSBOVFNDX0hFSUdIVCAmJiBnZW9tLmNvbHVtbnMgPD0gTlRTQ19XSURU SCkKCQkJZ2VvbS5vZm9ybWF0IHw9IE1FVEVPUl9HRU9fRVZFTl9PTkxZOwoJfSBlbHNlIHsK CQkvKiBpcyBpdCBwYWwgb3IgbnRzYz8gKi8KCQlpZihzdGF0dXMgJiBNRVRFT1JfU1RBVFVT X0ZJRFQpIHsKCQkJCQkJLyogNjAgaHogKi8KCQkJaWYoZ2VvbS5yb3dzPD1OVFNDX0hFSUdI VCAmJiBnZW9tLmNvbHVtbnM8PU5UU0NfV0lEVEgpCgkJCQlnZW9tLm9mb3JtYXQgfD0gTUVU RU9SX0dFT19FVkVOX09OTFk7CgkJfSBlbHNlIHsJCQkvKiA1MCBoeiAqLwoJCQlpZihnZW9t LnJvd3M8PVBBTF9IRUlHSFQgJiYgZ2VvbS5jb2x1bW5zPD1QQUxfV0lEVEgpCgkJCQlnZW9t Lm9mb3JtYXQgfD0gTUVURU9SX0dFT19FVkVOX09OTFk7CgkJfQoJfQoKCWlmKGlvY3RsKGRl dl8sIE1FVEVPUlNFVEdFTywgJmdlb20pIDwgMCkgCgkJcGVycm9yKCJ2aWM6IE1FVEVSU0VU R0VPOiAiKTsKfQoKdm9pZCBNZXRlb3JHcmFiYmVyOjpmb3JtYXQoKQp7Cgl1bnNpZ25lZCBz aG9ydCBzdGF0dXM7CglpbnQJZm10OwoKCWlvY3RsKGRldl8sIE1FVEVPUlNJTlBVVCwgJnBv cnRfKTsKCWlvY3RsKGRldl8sIE1FVEVPUlNGTVQsICZ2aWRlb19mb3JtYXRfKTsKCXNsZWVw KDEpOwkvKiB3YWl0IGZvciBzaWduYWwgbG9jay4uLiAqLwoJaW9jdGwoZGV2XywgTUVURU9S U1RBVFVTLCAmc3RhdHVzKTsKCglpZih2aWRlb19mb3JtYXRfID09IE1FVEVPUl9GTVRfQVVU T01PREUpIHsKCQlzd2l0Y2ggKHN0YXR1cyAmIChNRVRFT1JfU1RBVFVTX0hDTEt8TUVURU9S X1NUQVRVU19GSURUKSkgewoJCWRlZmF1bHQ6CgkJCWZwcmludGYoc3RkZXJyLAoJCQkJInZp YzogbWV0ZW9yIHNlZXMgbm8gc2lnbmFsKCVkKS11c2luZyBudHNjLlxuIiwKCQkJCShzdGF0 dXMmTUVURU9SX1NUQVRVU19IQ0xLKSA+IDAgKTsKCQkJLyogZmFsbCB0aHJvdWdoICovCgkJ Y2FzZSBNRVRFT1JfU1RBVFVTX0ZJRFQ6CgkJCWZtdCA9IE1FVEVPUl9GTVRfTlRTQzsKCQkJ YnJlYWs7CgkJY2FzZSAwOgoJCQlmbXQ9IE1FVEVPUl9GTVRfUEFMOwoJCQlicmVhazsKCQl9 Cgl9IGVsc2UKCQlmbXQgPSB2aWRlb19mb3JtYXRfOwoKCWlmKGZtdCA9PSBNRVRFT1JfRk1U X05UU0MpIHsKCQliYXNlaGVpZ2h0XyA9IE5UU0NfSEVJR0hUICogMjsKCQliYXNld2lkdGhf ID0gTlRTQ19XSURUSCAqIDI7Cgl9IGVsc2UgeyAJLyogUEFMIGFuZCBTRUNBTSAqLwoJCWJh c2VoZWlnaHRfID0gUEFMX0hFSUdIVCAqIDI7CgkJYmFzZXdpZHRoXyA9IFBBTF9XSURUSCAq IDI7Cgl9CglzZXRzaXplKCk7Cn0KCgp2b2lkIE1ldGVvckdyYWJiZXI6OnN0YXJ0KCkKewoJ Zm9ybWF0KCk7CglpbnQgY21kID0gTUVURU9SX0NBUF9TSU5HTEU7Cglpb2N0bChkZXZfLCBN RVRFT1JDQVBUVVIsIChjaGFyKikmY21kKTsKCgljbWQgPSBNRVRFT1JfQ0FQX0NPTlRJTk9V UzsKCWlvY3RsKGRldl8sIE1FVEVPUkNBUFRVUiwgKGNoYXIqKSZjbWQpOwoJR3JhYmJlcjo6 c3RhcnQoKTsKfQoKdm9pZCBNZXRlb3JHcmFiYmVyOjpzdG9wKCkKewoKCWludCBjbWQgPSBN RVRFT1JfQ0FQX1NUT1BfQ09OVDsKCWlvY3RsKGRldl8sIE1FVEVPUkNBUFRVUiwgKGNoYXIq KSZjbWQpOwoJR3JhYmJlcjo6c3RvcCgpOwp9Cgp2b2lkIE1ldGVvckdyYWJiZXI6OmZwcyhp bnQgZikKewoJdV9zaG9ydCBtZXRfZnBzID0gKHVfc2hvcnQpZjsKCSh2b2lkKWlvY3RsKGRl dl8sIE1FVEVPUlNGUFMsICZtZXRfZnBzKTsKCglHcmFiYmVyOjpmcHMoZik7Cn0KCmludCBN ZXRlb3JHcmFiYmVyOjpjb21tYW5kKGludCBhcmdjLCBjb25zdCBjaGFyKmNvbnN0KiBhcmd2 KQp7CglUY2wmIHRjbCA9IFRjbDo6aW5zdGFuY2UoKTsKCWlmIChhcmdjID09IDMpIHsKCQlp ZiAoc3RyY21wKGFyZ3ZbMV0sICJkZWNpbWF0ZSIpID09IDApIHsKCQkJaW50IGRlYyA9IGF0 b2koYXJndlsyXSk7CgkJCWlmIChkZWMgPD0gMCkgewoJCQkJdGNsLnJlc3VsdGYoIiVzOiBk aXZpZGUgYnkgemVybyIsIGFyZ3ZbMF0pOwoJCQkJcmV0dXJuIChUQ0xfRVJST1IpOwoJCQl9 CgkJCWlmICgodV9pbnQpZGVjICE9IGRlY2ltYXRlXykgewoJCQkJZGVjaW1hdGVfID0gZGVj OwoJCQkJaWYocnVubmluZ18pIHsKCQkJCQlzdG9wKCk7CgkJCQkJc2V0c2l6ZSgpOwoJCQkJ CXN0YXJ0KCk7CgkJCQl9CgkJCX0KCQkJcmV0dXJuIChUQ0xfT0spOwkKCQl9CgkJaWYgKHN0 cmNtcChhcmd2WzFdLCAicG9ydCIpID09IDApIHsKCQkJaW50IHAgPSBwb3J0XzsKICAgICAg ICAgICAgICAgICAgICAgICAgaWYoIXN0cmNtcChhcmd2WzJdLCAiUkNBIikpIHAgPSBNRVRF T1JfSU5QVVRfREVWMDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXN0cmNtcChhcmd2 WzJdLCAiUG9ydC0xIikpIHAgPSBNRVRFT1JfSU5QVVRfREVWMTsKICAgICAgICAgICAgICAg ICAgICAgICAgaWYoIXN0cmNtcChhcmd2WzJdLCAiUG9ydC0yIikpIHAgPSBNRVRFT1JfSU5Q VVRfREVWMjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXN0cmNtcChhcmd2WzJdLCAi UG9ydC0zIikpIHAgPSBNRVRFT1JfSU5QVVRfREVWMzsKICAgICAgICAgICAgICAgICAgICAg ICAgaWYoIXN0cmNtcChhcmd2WzJdLCAiUy1WaWRlbyIpKQoJCQkJcCA9IE1FVEVPUl9JTlBV VF9ERVZfU1ZJREVPOwogICAgICAgICAgICAgICAgICAgICAgICBpZighc3RyY21wKGFyZ3Zb Ml0sICJSR0IiKSkgcCA9IE1FVEVPUl9JTlBVVF9ERVZfUkdCOwoKCQkJaWYgKHAgIT0gcG9y dF8pIHsKCQkJCXBvcnRfID0gcDsKCQkJCWlvY3RsKGRldl8sIE1FVEVPUlNJTlBVVCwgJnBv cnRfKTsKCQkJfQoJCQlyZXR1cm4gKFRDTF9PSyk7CQoJCX0KCQlpZiAoc3RyY21wKGFyZ3Zb MV0sICJmb3JtYXQiKSA9PSAwIHx8CgkJCSAgIHN0cmNtcChhcmd2WzFdLCAidHlwZSIpID09 IDApIHsKCQkJaWYgKHN0cmNtcChhcmd2WzJdLCAiYXV0byIpID09IDApCgkJCQl2aWRlb19m b3JtYXRfID0gTUVURU9SX0ZNVF9BVVRPTU9ERTsKCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3Zb Ml0sICJwYWwiKSA9PSAwKQoJCQkJdmlkZW9fZm9ybWF0XyA9IE1FVEVPUl9GTVRfUEFMOwoJ CQllbHNlIGlmIChzdHJjbXAoYXJndlsyXSwgInNlY2FtIikgPT0gMCkKCQkJCXZpZGVvX2Zv cm1hdF8gPSBNRVRFT1JfRk1UX1NFQ0FNOwoJCQllbHNlCgkJCQl2aWRlb19mb3JtYXRfID0g TUVURU9SX0ZNVF9OVFNDOwoJCQlpZiAocnVubmluZ18pCgkJCQlmb3JtYXQoKTsKCQkJcmV0 dXJuIChUQ0xfT0spOwkKCQl9CgkJaWYgKHN0cmNtcChhcmd2WzFdLCAiYnJpZ2h0bmVzcyIp ID09IDApIHsKCQkJdV9jaGFyIHZhbCA9IGF0b2koYXJndlsyXSk7CgkJCWlvY3RsKGRldl8s IE1FVEVPUlNCUklHLCAmdmFsKTsKCQkJcmV0dXJuIChUQ0xfT0spOwoJCX0KCQlpZiAoc3Ry Y21wKGFyZ3ZbMV0sICJjb250cmFzdCIpID09IDApIHsKCQkJdV9jaGFyIHZhbCA9IGF0b2ko YXJndlsyXSk7CgkJCWlvY3RsKGRldl8sIE1FVEVPUlNDT05ULCAmdmFsKTsKCQkJcmV0dXJu IChUQ0xfT0spOwoJCX0KCQlpZiAoc3RyY21wKGFyZ3ZbMV0sICJodWUiKSA9PSAwKSB7CgkJ CWNoYXIgdmFsID0gYXRvaShhcmd2WzJdKTsKCQkJaW9jdGwoZGV2XywgTUVURU9SU0hVRSwg JnZhbCk7CgkJCXJldHVybiAoVENMX09LKTsKCQl9CgkJaWYgKHN0cmNtcChhcmd2WzFdLCAi c2F0dXJhdGlvbiIpID09IDApIHsKCQkJdV9jaGFyIHZhbCA9IGF0b2koYXJndlsyXSk7CgkJ CWlvY3RsKGRldl8sIE1FVEVPUlNDU0FULCAmdmFsKTsKCQkJcmV0dXJuIChUQ0xfT0spOwoJ CX0KCQlpZiAoc3RyY21wKGFyZ3ZbMV0sICJ1dmdhaW4iKSA9PSAwKSB7CgkJCXVfY2hhciB2 YWwgPSBhdG9pKGFyZ3ZbMl0pOwoJCQlpb2N0bChkZXZfLCBNRVRFT1JTQ0hDViwgJnZhbCk7 CgkJCXJldHVybiAoVENMX09LKTsKCQl9Cgl9IGVsc2UgaWYgKGFyZ2MgPT0gMikgewoJCWlm IChzdHJjbXAoYXJndlsxXSwgImZvcm1hdCIpID09IDAgfHwKCQkJICAgc3RyY21wKGFyZ3Zb MV0sICJ0eXBlIikgPT0gMCkgewoJCQlzd2l0Y2ggKHZpZGVvX2Zvcm1hdF8pIHsKCgkJCWNh c2UgTUVURU9SX0ZNVF9BVVRPTU9ERToKCQkJCXRjbC5yZXN1bHQoImF1dG8iKTsKCQkJCWJy ZWFrOwoKCQkJY2FzZSBNRVRFT1JfRk1UX05UU0M6CgkJCQl0Y2wucmVzdWx0KCJudHNjIik7 CgkJCQlicmVhazsKCgkJCWNhc2UgTUVURU9SX0ZNVF9QQUw6CgkJCQl0Y2wucmVzdWx0KCJw YWwiKTsKCQkJCWJyZWFrOwoKCQkJY2FzZSBNRVRFT1JfRk1UX1NFQ0FNOgoJCQkJdGNsLnJl c3VsdCgic2VjYW0iKTsKCQkJCWJyZWFrOwoKCQkJZGVmYXVsdDoKCQkJCXRjbC5yZXN1bHQo IiIpOwoJCQkJYnJlYWs7CgkJCX0KCQkJcmV0dXJuIChUQ0xfT0spOwoJCQkKCQl9CgkJaWYg KHN0cmNtcChhcmd2WzFdLCAiYnJpZ2h0bmVzcyIpID09IDApIHsKCQkJdV9jaGFyIHZhbDsK CQkJaW9jdGwoZGV2XywgTUVURU9SR0JSSUcsICZ2YWwpOwoJCQl0Y2wucmVzdWx0ZigiJWQi LCAoaW50KXZhbCk7CgkJCXJldHVybiAoVENMX09LKTsKCQl9CgkJaWYgKHN0cmNtcChhcmd2 WzFdLCAiY29udHJhc3QiKSA9PSAwKSB7CgkJCXVfY2hhciB2YWw7CgkJCWlvY3RsKGRldl8s IE1FVEVPUkdDT05ULCAmdmFsKTsKCQkJdGNsLnJlc3VsdGYoIiVkIiwgKGludCl2YWwpOwoJ CQlyZXR1cm4gKFRDTF9PSyk7CgkJfQoJCWlmIChzdHJjbXAoYXJndlsxXSwgImh1ZSIpID09 IDApIHsKCQkJY2hhciB2YWw7CgkJCWlvY3RsKGRldl8sIE1FVEVPUkdIVUUsICZ2YWwpOwoJ CQl0Y2wucmVzdWx0ZigiJWQiLCAoaW50KXZhbCk7CgkJCXJldHVybiAoVENMX09LKTsKCQl9 CgkJaWYgKHN0cmNtcChhcmd2WzFdLCAic2F0dXJhdGlvbiIpID09IDApIHsKCQkJdV9jaGFy IHZhbDsKCQkJaW9jdGwoZGV2XywgTUVURU9SR0NTQVQsICZ2YWwpOwoJCQl0Y2wucmVzdWx0 ZigiJWQiLCAoaW50KXZhbCk7CgkJCXJldHVybiAoVENMX09LKTsKCQl9CgkJaWYgKHN0cmNt cChhcmd2WzFdLCAidXZnYWluIikgPT0gMCkgewoJCQl1X2NoYXIgdmFsOwoJCQlpb2N0bChk ZXZfLCBNRVRFT1JHQ0hDViwgJnZhbCk7CgkJCXRjbC5yZXN1bHRmKCIlZCIsIChpbnQpdmFs KTsKCQkJcmV0dXJuIChUQ0xfT0spOwoJCX0KCX0KCXJldHVybiAoR3JhYmJlcjo6Y29tbWFu ZChhcmdjLCBhcmd2KSk7Cn0KCiNkZWZpbmUgVSAwCiNkZWZpbmUgWTAgMQojZGVmaW5lIFYg MgojZGVmaW5lIFkxIDMKCi8qCiAqIGRlZmluZSB0aGVzZSBmb3IgUkVQTEVOSVNIIG1hY3Jv IHVzZWQgYmVsb3cKICovCiNkZWZpbmUgRElGRjQoaW4sIGZybSwgdikgXAoJdiArPSAoaW4p W1kwXSAtIChmcm0pWzBdOyBcCgl2ICs9IChpbilbWTFdIC0gKGZybSlbMV07IFwKCXYgKz0g KGluKVtZMCs0XSAtIChmcm0pWzJdOyBcCgl2ICs9IChpbilbWTErNF0gLSAoZnJtKVszXTsK CiNkZWZpbmUgRElGRkxJTkUoaW4sIGZybSwgbGVmdCwgY2VudGVyLCByaWdodCkgXAoJRElG RjQoaW4gKyAwKjgsIGZybSArIDAqNCwgbGVmdCk7IFwKCURJRkY0KGluICsgMSo4LCBmcm0g KyAxKjQsIGNlbnRlcik7IFwKCURJRkY0KGluICsgMio4LCBmcm0gKyAyKjQsIGNlbnRlcik7 IFwKCURJRkY0KGluICsgMyo4LCBmcm0gKyAzKjQsIHJpZ2h0KTsgXAoJaWYgKHJpZ2h0IDwg MCkgXAoJCXJpZ2h0ID0gLXJpZ2h0OyBcCglpZiAobGVmdCA8IDApIFwKCQlsZWZ0ID0gLWxl ZnQ7IFwKCWlmIChjZW50ZXIgPCAwKSBcCgkJY2VudGVyID0gLWNlbnRlcjsKCnZvaWQgTWV0 ZW9yR3JhYmJlcjo6c3VwcHJlc3MoY29uc3QgdV9jaGFyKiBkZXZidWYsIGludCBpcykKewoJ Y29uc3QgdV9jaGFyKiBzdGFydCA9IGZyYW1lXyArIDE2ICogdnN0YXJ0XyAqIG91dHdfICsg MTYgKiBoc3RhcnRfOwoJUkVQTEVOSVNIKGRldmJ1Ziwgc3RhcnQsIGlzLCAyLAoJCSAgaHN0 YXJ0XywgaHN0b3BfLCB2c3RhcnRfLCB2c3RvcF8pOwp9CgppbnQgTWV0ZW9yR3JhYmJlcjo6 Z3JhYigpCnsKCWlmIChweXV2XyA9PSAwKQoJCXJldHVybiAwOwoKCWludCBpc3RyaWRlID0g aW53XyAqIDI7CglzdXBwcmVzcygodV9jaGFyKilweXV2XywgaXN0cmlkZSk7CglzYXZlYmxr cygodV9jaGFyKilweXV2XywgaXN0cmlkZSk7Cgl1X2ludDMyX3QgdHMgPSBtZWRpYV90cygp OwoJWXV2RnJhbWUgZih0cywgZnJhbWVfLCBjcnZlY18sIG91dHdfLCBvdXRoXyk7CglyZXR1 cm4gKHRhcmdldF8tPmNvbnN1bWUoJmYpKTsKfQoKTWV0ZW9yNDIyR3JhYmJlcjo6TWV0ZW9y NDIyR3JhYmJlcihjb25zdCBjaGFyKiBuYW1lKQoJOiBNZXRlb3JHcmFiYmVyKG5hbWUpCnsK fQoKTWV0ZW9yQ0lGR3JhYmJlcjo6TWV0ZW9yQ0lGR3JhYmJlcihjb25zdCBjaGFyKiBuYW1l KQoJOiBNZXRlb3JHcmFiYmVyKG5hbWUpCnsKfQoKdm9pZCBNZXRlb3I0MjJHcmFiYmVyOjpz ZXRzaXplKCkKewoJaW50IHcgPSBiYXNld2lkdGhfIC8gZGVjaW1hdGVfOwoJaW50IGggPSBi YXNlaGVpZ2h0XyAvIGRlY2ltYXRlXzsKCXNldF9zaXplX21ldGVvcih3LCBoKTsKCXNldF9z aXplXzQyMih3LCBoKTsKfQoKaW5saW5lIHZvaWQgCk1ldGVvcjQyMkdyYWJiZXI6OnNhdmVi bGsoY29uc3QgdV9jaGFyKiBpbiwKCXVfY2hhciogeXAsIHVfY2hhciogdXAsIHVfY2hhciog dnAsIGludCBzdHJpZGUsIGludCBpc3RyaWRlKQp7Cglmb3IgKGludCBpID0gMTY7IC0taSA+ PSAwOyApIHsKCQkvKgoJCSAqIEVhY2ggaXRlcmF0aW9uIG9mIHRoaXMgbG9vcCBncmFicyAx NiBZcyAmIDggVS9Wcy4KCQkgKi8KCQlyZWdpc3RlciB1X2ludCB5MCwgeTEsIHUsIHY7CgoJ CXUgID0gaW5bVSArIDAqNF0gPDwgU0hJRlQoMjQpIHwKCQkgICAgIGluW1UgKyAxKjRdIDw8 IFNISUZUKDE2KSB8CgkJICAgICBpbltVICsgMio0XSA8PCBTSElGVCg4KSB8CgkJICAgICBp bltVICsgMyo0XSA8PCBTSElGVCgwKTsKCQl2ICA9IGluW1YgKyAwKjRdIDw8IFNISUZUKDI0 KSB8CgkJICAgICBpbltWICsgMSo0XSA8PCBTSElGVCgxNikgfAoJCSAgICAgaW5bViArIDIq NF0gPDwgU0hJRlQoOCkgfAoJCSAgICAgaW5bViArIDMqNF0gPDwgU0hJRlQoMCk7CgkJeTAg PSBpbltZMCArIDAqNF0gPDwgU0hJRlQoMjQpIHwKCQkgICAgIGluW1kxICsgMCo0XSA8PCBT SElGVCgxNikgfAoJCSAgICAgaW5bWTAgKyAxKjRdIDw8IFNISUZUKDgpIHwKCQkgICAgIGlu W1kxICsgMSo0XSA8PCBTSElGVCgwKTsKCQl5MSA9IGluW1kwICsgMio0XSA8PCBTSElGVCgy NCkgfAoJCSAgICAgaW5bWTEgKyAyKjRdIDw8IFNISUZUKDE2KSB8CgkJICAgICBpbltZMCAr IDMqNF0gPDwgU0hJRlQoOCkgfAoJCSAgICAgaW5bWTEgKyAzKjRdIDw8IFNISUZUKDApOwoK CQkoKHVfaW50Kil5cClbMF0gPSB5MDsKCQkoKHVfaW50Kil5cClbMV0gPSB5MTsKCQkoKHVf aW50Kil1cClbMF0gPSB1OwoJCSgodV9pbnQqKXZwKVswXSA9IHY7CgoJCXUgID0gaW5bVSAr IDQqNF0gPDwgU0hJRlQoMjQpIHwKCQkgICAgIGluW1UgKyA1KjRdIDw8IFNISUZUKDE2KSB8 CgkJICAgICBpbltVICsgNio0XSA8PCBTSElGVCg4KSB8CgkJICAgICBpbltVICsgNyo0XSA8 PCBTSElGVCgwKTsKCQl2ICA9IGluW1YgKyA0KjRdIDw8IFNISUZUKDI0KSB8CgkJICAgICBp bltWICsgNSo0XSA8PCBTSElGVCgxNikgfAoJCSAgICAgaW5bViArIDYqNF0gPDwgU0hJRlQo OCkgfAoJCSAgICAgaW5bViArIDcqNF0gPDwgU0hJRlQoMCk7CgkJeTAgPSBpbltZMCArIDQq NF0gPDwgU0hJRlQoMjQpIHwKCQkgICAgIGluW1kxICsgNCo0XSA8PCBTSElGVCgxNikgfAoJ CSAgICAgaW5bWTAgKyA1KjRdIDw8IFNISUZUKDgpIHwKCQkgICAgIGluW1kxICsgNSo0XSA8 PCBTSElGVCgwKTsKCQl5MSA9IGluW1kwICsgNio0XSA8PCBTSElGVCgyNCkgfAoJCSAgICAg aW5bWTEgKyA2KjRdIDw8IFNISUZUKDE2KSB8CgkJICAgICBpbltZMCArIDcqNF0gPDwgU0hJ RlQoOCkgfAoJCSAgICAgaW5bWTEgKyA3KjRdIDw8IFNISUZUKDApOwoKCQkoKHVfaW50Kil5 cClbMl0gPSB5MDsKCQkoKHVfaW50Kil5cClbM10gPSB5MTsKCQkoKHVfaW50Kil1cClbMV0g PSB1OwoJCSgodV9pbnQqKXZwKVsxXSA9IHY7CgoJCWluICs9IGlzdHJpZGU7CgkJeXAgKz0g c3RyaWRlOwoJCXVwICs9IHN0cmlkZSA+PiAxOwoJCXZwICs9IHN0cmlkZSA+PiAxOwoJfQp9 Cgp2b2lkIE1ldGVvcjQyMkdyYWJiZXI6OnNhdmVibGtzKGNvbnN0IHVfY2hhciogZGV2YnVm LCBpbnQgaXMpCnsKCXVfY2hhciogY3J2ID0gY3J2ZWNfOwoJaW50IG9mZiA9IGZyYW1lc2l6 ZV87Cgl1X2NoYXIqIGx1bSA9IGZyYW1lXzsKCXVfY2hhciogY2htID0gbHVtICsgb2ZmOwoJ b2ZmID4+PSAxOwoJaW50IHN0cmlkZSA9IDE1ICogb3V0d187CglpbnQgaXN0cmlkZSA9IGlz ICogMTU7Cglmb3IgKGludCB5ID0gMDsgeSA8IGJsa2hfOyArK3kpIHsKCQlmb3IgKGludCB4 ID0gMDsgeCA8IGJsa3dfOyArK3gpIHsKCQkJaW50IHMgPSAqY3J2Kys7CgkJCWlmICgocyAm IENSX1NFTkQpICE9IDApCgkJCQlzYXZlYmxrKGRldmJ1ZiwgbHVtLCBjaG0sIGNobSArIG9m Ziwgb3V0d18sIGlzKTsKCgkJCWRldmJ1ZiArPSAzMjsKCQkJbHVtICs9IDE2OwoJCQljaG0g Kz0gODsKCQl9CgkJbHVtICs9IHN0cmlkZTsKCQljaG0gKz0gc3RyaWRlID4+IDE7CgkJZGV2 YnVmICs9IGlzdHJpZGU7Cgl9Cn0KCnZvaWQgTWV0ZW9yQ0lGR3JhYmJlcjo6c2V0c2l6ZSgp CnsKCWludCB3ID0gYmFzZXdpZHRoXyAvIGRlY2ltYXRlXzsKCWludCBoID0gYmFzZWhlaWdo dF8gLyBkZWNpbWF0ZV87CglzZXRfc2l6ZV9tZXRlb3IodywgaCk7CglzZXRfc2l6ZV9jaWYo dywgaCk7Cn0KCmlubGluZSB2b2lkIApNZXRlb3JDSUZHcmFiYmVyOjpzYXZlYmxrKGNvbnN0 IHVfY2hhciogaW4sCgl1X2NoYXIqIHlwLCB1X2NoYXIqIHVwLCB1X2NoYXIqIHZwLCBpbnQg c3RyaWRlLCBpbnQgaXN0cmlkZSkKewoJZm9yIChpbnQgaSA9IDg7IC0taSA+PSAwOyApIHsK CQkvKgoJCSAqIEVhY2ggaXRlcmF0aW9uIG9mIHRoaXMgbG9vcCBncmFicyAzMiBZcyAmIDE2 IFUvVnMuCgkJICovCgkJcmVnaXN0ZXIgdV9pbnQgeTAsIHkxLCB1LCB2OwoKCQl1ICA9IGlu W1UgKyAwKjRdIDw8IFNISUZUKDI0KSB8CgkJICAgICBpbltVICsgMSo0XSA8PCBTSElGVCgx NikgfAoJCSAgICAgaW5bVSArIDIqNF0gPDwgU0hJRlQoOCkgfAoJCSAgICAgaW5bVSArIDMq NF0gPDwgU0hJRlQoMCk7CgkJdiAgPSBpbltWICsgMCo0XSA8PCBTSElGVCgyNCkgfAoJCSAg ICAgaW5bViArIDEqNF0gPDwgU0hJRlQoMTYpIHwKCQkgICAgIGluW1YgKyAyKjRdIDw8IFNI SUZUKDgpIHwKCQkgICAgIGluW1YgKyAzKjRdIDw8IFNISUZUKDApOwoJCXkwID0gaW5bWTAg KyAwKjRdIDw8IFNISUZUKDI0KSB8CgkJICAgICBpbltZMSArIDAqNF0gPDwgU0hJRlQoMTYp IHwKCQkgICAgIGluW1kwICsgMSo0XSA8PCBTSElGVCg4KSB8CgkJICAgICBpbltZMSArIDEq NF0gPDwgU0hJRlQoMCk7CgkJeTEgPSBpbltZMCArIDIqNF0gPDwgU0hJRlQoMjQpIHwKCQkg ICAgIGluW1kxICsgMio0XSA8PCBTSElGVCgxNikgfAoJCSAgICAgaW5bWTAgKyAzKjRdIDw8 IFNISUZUKDgpIHwKCQkgICAgIGluW1kxICsgMyo0XSA8PCBTSElGVCgwKTsKCgkJKCh1X2lu dCopeXApWzBdID0geTA7CgkJKCh1X2ludCopeXApWzFdID0geTE7CgkJKCh1X2ludCopdXAp WzBdID0gdTsKCQkoKHVfaW50Kil2cClbMF0gPSB2OwoKCQl1ICA9IGluW1UgKyA0KjRdIDw8 IFNISUZUKDI0KSB8CgkJICAgICBpbltVICsgNSo0XSA8PCBTSElGVCgxNikgfAoJCSAgICAg aW5bVSArIDYqNF0gPDwgU0hJRlQoOCkgfAoJCSAgICAgaW5bVSArIDcqNF0gPDwgU0hJRlQo MCk7CgkJdiAgPSBpbltWICsgNCo0XSA8PCBTSElGVCgyNCkgfAoJCSAgICAgaW5bViArIDUq NF0gPDwgU0hJRlQoMTYpIHwKCQkgICAgIGluW1YgKyA2KjRdIDw8IFNISUZUKDgpIHwKCQkg ICAgIGluW1YgKyA3KjRdIDw8IFNISUZUKDApOwoJCXkwID0gaW5bWTAgKyA0KjRdIDw8IFNI SUZUKDI0KSB8CgkJICAgICBpbltZMSArIDQqNF0gPDwgU0hJRlQoMTYpIHwKCQkgICAgIGlu W1kwICsgNSo0XSA8PCBTSElGVCg4KSB8CgkJICAgICBpbltZMSArIDUqNF0gPDwgU0hJRlQo MCk7CgkJeTEgPSBpbltZMCArIDYqNF0gPDwgU0hJRlQoMjQpIHwKCQkgICAgIGluW1kxICsg Nio0XSA8PCBTSElGVCgxNikgfAoJCSAgICAgaW5bWTAgKyA3KjRdIDw8IFNISUZUKDgpIHwK CQkgICAgIGluW1kxICsgNyo0XSA8PCBTSElGVCgwKTsKCgkJKCh1X2ludCopeXApWzJdID0g eTA7CgkJKCh1X2ludCopeXApWzNdID0geTE7CgkJKCh1X2ludCopdXApWzFdID0gdTsKCQko KHVfaW50Kil2cClbMV0gPSB2OwoKCQlpbiArPSBpc3RyaWRlOwoJCXlwICs9IHN0cmlkZTsK CQl1cCArPSBzdHJpZGUgPj4gMTsKCQl2cCArPSBzdHJpZGUgPj4gMTsKCgkJLyogZG8gdGhl IDJuZCAoeSBvbmx5IGluc3RlYWQgb2YgeXV2KSBsaW5lICovCgoJCXkwID0gaW5bWTAgKyAw KjRdIDw8IFNISUZUKDI0KSB8CgkJICAgICBpbltZMSArIDAqNF0gPDwgU0hJRlQoMTYpIHwK CQkgICAgIGluW1kwICsgMSo0XSA8PCBTSElGVCg4KSB8CgkJICAgICBpbltZMSArIDEqNF0g PDwgU0hJRlQoMCk7CgkJeTEgPSBpbltZMCArIDIqNF0gPDwgU0hJRlQoMjQpIHwKCQkgICAg IGluW1kxICsgMio0XSA8PCBTSElGVCgxNikgfAoJCSAgICAgaW5bWTAgKyAzKjRdIDw8IFNI SUZUKDgpIHwKCQkgICAgIGluW1kxICsgMyo0XSA8PCBTSElGVCgwKTsKCgkJKCh1X2ludCop eXApWzBdID0geTA7CgkJKCh1X2ludCopeXApWzFdID0geTE7CgoJCXkwID0gaW5bWTAgKyA0 KjRdIDw8IFNISUZUKDI0KSB8CgkJICAgICBpbltZMSArIDQqNF0gPDwgU0hJRlQoMTYpIHwK CQkgICAgIGluW1kwICsgNSo0XSA8PCBTSElGVCg4KSB8CgkJICAgICBpbltZMSArIDUqNF0g PDwgU0hJRlQoMCk7CgkJeTEgPSBpbltZMCArIDYqNF0gPDwgU0hJRlQoMjQpIHwKCQkgICAg IGluW1kxICsgNio0XSA8PCBTSElGVCgxNikgfAoJCSAgICAgaW5bWTAgKyA3KjRdIDw8IFNI SUZUKDgpIHwKCQkgICAgIGluW1kxICsgNyo0XSA8PCBTSElGVCgwKTsKCgkJKCh1X2ludCop eXApWzJdID0geTA7CgkJKCh1X2ludCopeXApWzNdID0geTE7CgoJCWluICs9IGlzdHJpZGU7 CgkJeXAgKz0gc3RyaWRlOwoJfQp9Cgp2b2lkIE1ldGVvckNJRkdyYWJiZXI6OnNhdmVibGtz KGNvbnN0IHVfY2hhciogaW4sIGludCBpcykKewoJdV9jaGFyKiBjcnYgPSBjcnZlY187Cglp bnQgb2ZmID0gZnJhbWVzaXplXzsKCXVfY2hhciogbHVtID0gZnJhbWVfOwoJdV9jaGFyKiBj aG0gPSBsdW0gKyBvZmY7CglvZmYgPj49IDI7CgoJY3J2ICs9IHZzdGFydF8gKiBibGt3XyAr IGhzdGFydF87CglsdW0gKz0gdnN0YXJ0XyAqIG91dHdfICogMTYgKyBoc3RhcnRfICogMTY7 CgljaG0gKz0gdnN0YXJ0XyAqIChvdXR3XyA+PiAxKSAqIDggKyBoc3RhcnRfICogODsKCglp bnQgc2tpcCA9IGhzdGFydF8gKyAoYmxrd18gLSBoc3RvcF8pOwoKCWZvciAoaW50IHkgPSB2 c3RhcnRfOyB5IDwgdnN0b3BfOyArK3kpIHsKCQljb25zdCB1X2NoYXIqIG5pbiA9IGluOwoJ CWZvciAoaW50IHggPSBoc3RhcnRfOyB4IDwgaHN0b3BfOyArK3gpIHsKCQkJaW50IHMgPSAq Y3J2Kys7CgkJCWlmICgocyAmIENSX1NFTkQpICE9IDApCgkJCQlzYXZlYmxrKGluLCBsdW0s IGNobSwgY2htICsgb2ZmLCBvdXR3XywgaXMpOwoKCQkJaW4gKz0gMzI7CgkJCWx1bSArPSAx NjsKCQkJY2htICs9IDg7CgkJfQoJCWNydiArPSBza2lwOwoJCWx1bSArPSAxNSAqIG91dHdf ICsgc2tpcCAqIDE2OwoJCWNobSArPSA3ICogKG91dHdfID4+IDEpICsgc2tpcCAqIDg7CgkJ aW4gPSBuaW4gKyAxNiAqIGlzOwoJfQp9Cg== --==_Exmh_10382221920-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message