From owner-freebsd-multimedia Fri Jul 10 00:26:46 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id AAA02474 for freebsd-multimedia-outgoing; Fri, 10 Jul 1998 00:26:46 -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 AAA02469 for ; Fri, 10 Jul 1998 00:26:38 -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 AAA10706; Fri, 10 Jul 1998 00:26:19 -0700 (PDT) (envelope-from hasty@rah.star-gate.com) Message-Id: <199807100726.AAA10706@rah.star-gate.com> X-Mailer: exmh version 2.0.2 2/24/98 To: Kevin Day cc: multimedia@FreeBSD.ORG Subject: Re: bt848 driver will be checked in this Friday In-reply-to: Your message of "Fri, 10 Jul 1998 02:15:39 CDT." <199807100715.CAA16725@home.dragondata.com> Mime-Version: 1.0 Content-Type: multipart/mixed ; boundary="==_Exmh_-12741814920" Date: Fri, 10 Jul 1998 00:26:18 -0700 From: Amancio Hasty Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org This is a multipart MIME message. --==_Exmh_-12741814920 Content-Type: text/plain; charset=us-ascii Please mail me the output of ./eeprom 0 128 which is available from http://www.freebsd.org/~ahasty/Bt848.html The Bt878 is an upgrade to the Bt848. Please recompile fxtv-0.47 with this tvcapture.c the problem is that your model has one extra MUX which Hauppauge uses for video input. Tnks, Amancio > > Download the latest driver from my ftp and it looks like you have a Bt878. > > > > ftp://rah.star-gate.com/pub/bt848.tar.gz > > > > Have Fun, > > Amancio > > > > I've already got the latest from there.... Still no go. > > Yeah, looking now... the picture of the card on the box shows a bt848... the > box says it's a bt848, but the chip itself has writing too smudged to read > what it really is.... > > Are bt878's compatible? > > Kevin --==_Exmh_-12741814920 Content-Type: text/plain ; name="tvcapture.c"; charset=us-ascii Content-Description: tvcapture.c Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="tvcapture.c" LyoKICogdHZjYXB0dXJlLmMKICoKICogQVBJIGZvciBjb250cm9sbGluZyB0aGUgY2FwdHVy ZSBjYXJkIGF0dHJpYnV0ZXMgYW5kIHN0YXRlLgogKgogKiAoQykgMTk5NyBSYW5kYWxsIEhv cHBlcgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogKiBtZXQ6IDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0CiAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4gMi4KICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAogKiB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo ZSBkb2N1bWVudGF0aW9uCiAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUgZGlzdHJpYnV0aW9uLgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQogKiBFWFBS RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRSBJTVBMSUVECiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKICogRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IKICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTAogKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJW SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikgSE9XRVZFUgogKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WQogKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GCiAqIFNVQ0ggREFNQUdFLgogKgogKi8KCi8qICAgICAg KioqKioqKioqKioqKioqKioqKiogSW5jbHVkZSBGaWxlcyAgICAgICAgICAgICAgICAqKioq KioqKioqKioqKiAqLwoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4K I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPGVycm5v Lmg+CiNpbmNsdWRlIDxzeXMvbW1hbi5oPgojaW5jbHVkZSA8bWFjaGluZS9pb2N0bF9idDg0 OC5oPgojaW5jbHVkZSA8c2lnbmFsLmg+CiNpbmNsdWRlICJ0dmRlZmluZXMuaCIKI2luY2x1 ZGUgInR2dHlwZXMuaCIKI2luY2x1ZGUgInR2Y2FwdHVyZS5oIgojaW5jbHVkZSAiYXBwX3Jz cmMuaCIKI2luY2x1ZGUgImdsb2IuaCIKCi8qICAgICAgKioqKioqKioqKioqKioqKioqKiog TG9jYWwgZGVmaW5lcyAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKiAqLwoKLyogIEZv ciBGeHR2IDAuNDEvYmt0ciBkcml2ZXIgTGludXggcG9ydCAtLSByZW1vdmUgd2hlbiB0aGUg bGF0ZXN0IGlzIHBvcnRlZCAqLwojaWZkZWYgT0xEX1RVTkVSX0lGQUNFCiMgIGRlZmluZSBC VDg0OFNGTVQgTUVURU9SU0ZNVAojZW5kaWYKCiNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQoj ICBkZWZpbmUgREVWX0JUODQ4ICAgIi9kZXYvYmt0ciVkIgojICBkZWZpbmUgREVWX1RVTkVS ICAgIi9kZXYvdHVuZXIlZCIKI2VsaWYgZGVmaW5lZChsaW51eCkKIyAgd2FybmluZyBGSVhN RTogRG9lcy9ob3cgZG9lcyBMaW51eCBuYW1lIG11bHRpcGxlIGRldmljZXMgb2YgdGhlIHNh bWUgdHlwZQojICB3YXJuaW5nICAgICAgICBJcyB0aGVyZSBhIGNvbnNpc3RlbnQgcG9saWN5 IGFzIGluIEZyZWVCU0Q/CiMgIGRlZmluZSBERVZfQlQ4NDggICAiL2Rldi9idDg0OCIKIyAg ZGVmaW5lIERFVl9UVU5FUiAgICIvZGV2L2J0ODQ4dCIKI2VuZGlmCgovKiAgTWFjcm9zICAq LwojZGVmaW5lIERPX0lPQ1RMX0dFUlIoc3RyKSAgICAgZnByaW50ZihzdGRlcnIsICJpb2N0 bCglcykgZmFpbGVkOiAlc1xuIiwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHIsIHN0cmVycm9yKGVycm5vKSApCiNkZWZpbmUgRE9fSU9DVExfU0VSUihz dHIsYXJnKSBmcHJpbnRmKHN0ZGVyciwgImlvY3RsKCVzLCAlbGQpIGZhaWxlZDogJXNcbiIs XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIChsb25nKWFy Zywgc3RyZXJyb3IoZXJybm8pICkKCiNkZWZpbmUgSFVFX01JTiAgICAgICAgICAgIEJUODQ4 X0hVRU1JTgojZGVmaW5lIEhVRV9NQVggICAgICAgICAgICAoQlQ4NDhfSFVFTUlOICsgQlQ4 NDhfSFVFUkFOR0UpCiNkZWZpbmUgSFVFX1JBTkdFICAgICAgICAgIEJUODQ4X0hVRVJBTkdF CiNkZWZpbmUgSFVFX0RSVl9NSU4gICAgICAgIEJUODQ4X0hVRVJFR01JTgojZGVmaW5lIEhV RV9EUlZfUkFOR0UgICAgICAoQlQ4NDhfSFVFUkVHTUFYIC0gQlQ4NDhfSFVFUkVHTUlOICsg MSkKCiNkZWZpbmUgQlJJR0hUX01JTiAgICAgICAgIEJUODQ4X0JSSUdIVE1JTgojZGVmaW5l IEJSSUdIVF9NQVggICAgICAgICAoQlQ4NDhfQlJJR0hUTUlOICsgQlQ4NDhfQlJJR0hUUkFO R0UpCiNkZWZpbmUgQlJJR0hUX1JBTkdFICAgICAgIEJUODQ4X0JSSUdIVFJBTkdFCiNkZWZp bmUgQlJJR0hUX0RSVl9NSU4gICAgIEJUODQ4X0JSSUdIVFJFR01JTgojZGVmaW5lIEJSSUdI VF9EUlZfUkFOR0UgICAoQlQ4NDhfQlJJR0hUUkVHTUFYIC0gQlQ4NDhfQlJJR0hUUkVHTUlO ICsgMSkKIAojZGVmaW5lIENPTlRSX01JTiAgICAgICAgICBCVDg0OF9DT05UUkFTVE1JTgoj ZGVmaW5lIENPTlRSX01BWCAgICAgICAgICAoQlQ4NDhfQ09OVFJBU1RNSU4gKyBCVDg0OF9D T05UUkFTVFJBTkdFKQojZGVmaW5lIENPTlRSX1JBTkdFICAgICAgICBCVDg0OF9DT05UUkFT VFJBTkdFCiNkZWZpbmUgQ09OVFJfRFJWX01JTiAgICAgIEJUODQ4X0NPTlRSQVNUUkVHTUlO CiNkZWZpbmUgQ09OVFJfRFJWX1JBTkdFICAgIChCVDg0OF9DT05UUkFTVFJFR01BWCAtIEJU ODQ4X0NPTlRSQVNUUkVHTUlOICsgMSkKCiNkZWZpbmUgU0FUVV9NSU4gICAgICAgICAgICBC VDg0OF9TQVRVTUlOCiNkZWZpbmUgU0FUVV9NQVggICAgICAgICAgICAoQlQ4NDhfU0FUVU1J TiArIEJUODQ4X1NBVFVSQU5HRSkKI2RlZmluZSBTQVRVX1JBTkdFICAgICAgICAgIEJUODQ4 X1NBVFVSQU5HRQojZGVmaW5lIFNBVFVfRFJWX01JTiAgICAgICAgQlQ4NDhfU0FUVVJFR01J TgojZGVmaW5lIFNBVFVfRFJWX1JBTkdFICAgICAgKEJUODQ4X1NBVFVSRUdNQVggLSBCVDg0 OF9TQVRVUkVHTUlOICsgMSkKCiNkZWZpbmUgU0FUVl9NSU4gICAgICAgICAgICBCVDg0OF9T QVRWTUlOCiNkZWZpbmUgU0FUVl9NQVggICAgICAgICAgICAoQlQ4NDhfU0FUVk1JTiArIEJU ODQ4X1NBVFZSQU5HRSkKI2RlZmluZSBTQVRWX1JBTkdFICAgICAgICAgIEJUODQ4X1NBVFZS QU5HRQojZGVmaW5lIFNBVFZfRFJWX01JTiAgICAgICAgQlQ4NDhfU0FUVlJFR01JTgojZGVm aW5lIFNBVFZfRFJWX1JBTkdFICAgICAgKEJUODQ4X1NBVFZSRUdNQVggLSBCVDg0OF9TQVRW UkVHTUlOICsgMSkKCiNkZWZpbmUgTlRTQ19ESU1fWCAgICAgICAgICA2NDAKI2RlZmluZSBO VFNDX0RJTV9ZICAgICAgICAgIDQ4MAojZGVmaW5lIE5UU0NfRlBTICAgICAgICAgICAgMzAK I2RlZmluZSBQQUxfRElNX1ggICAgICAgICAgIDc2OAojZGVmaW5lIFBBTF9ESU1fWSAgICAg ICAgICAgNTc2CiNkZWZpbmUgUEFMX0ZQUyAgICAgICAgICAgICAyNQoKLyogIE1heCBTaW5n bGUgRnJhbWUgU2l6ZSAoaW4gYnl0ZXMpIGZvciBOVFNDICYgUEFMICg0QnBwIG1heCkgICov CiNkZWZpbmUgTUFYX01NQVBfQlVGX1NJWkUgICAoIE1BWCggTlRTQ19ESU1fWCxQQUxfRElN X1ggKSAqIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYKCBOVFNDX0RJTV9Z LFBBTF9ESU1fWSApICogNCApCgojZGVmaW5lIEZSQU1FX1RJTUVSX0RFTEFZX01TKGZwcykg KDEwMDAvKGZwcykpCgovKiAgICAgICoqKioqKioqKioqKioqKioqKioqIFByaXZhdGUgdmFy aWFibGVzICAgICAgICAgICAgKioqKioqKioqKioqKiogKi8KCnN0YXRpYyBUVl9JTlQzMiAg ICAgU19mcmFtZV9kb25lX2NvdW50ID0gMDsKCnN0YXRpYyBYdEludGVydmFsSWQgU19mcmFt ZV90aW1lcjsKc3RhdGljIFRWX0JPT0wgICAgICBTX2ZyYW1lX3RpbWVyX3NldCA9IEZhbHNl OwoKCi8qICAgICAgKioqKioqKioqKioqKioqKioqKiogRm9yd2FyZCBkZWNsYXJhdGlvbnMg ICAgICAgICAqKioqKioqKioqKioqKiAqLwovKiAgICAgICoqKioqKioqKioqKioqKioqKioq IEZ1bmN0aW9uIERlZmluaXRpb25zICAgICAgICAgKioqKioqKioqKioqKiogKi8KCi8qKkBC RUdJTkZVTkMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgoKICAgIFByb3RvdHlwZSAgOiBzdGF0aWMgdm9pZCBUVkNBUFRV UkVEZXN0cm95KCkKCiAgICBQdXJwb3NlICAgIDogQ2xlYW5zIHVwIGNhcHR1cmUgYXR0cmli dXRlcyAoc3RvcHMgY2FwdHVyZSwgY2xvc2VzIGZpbGVzLAogICAgICAgICAgICAgICAgIGZy ZWVzIG1lbSwgZXRjLgoKICAgIFByb2dyYW1tZXIgOiAwNy1NYXItOTcgIFJhbmRhbGwgSG9w cGVyCgogICAgUGFyYW1ldGVycyA6IE5vbmUuCgogICAgUmV0dXJucyAgICA6IE5vbmUuCgog ICAgR2xvYmFscyAgICA6IE5vbmUuCgogKipARU5ERlVOQyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKc3RhdGlj IHZvaWQgVFZDQVBUVVJFRGVzdHJveSgpCnsKICAgIFRWX0NBUFRVUkUgICAqYyA9ICZHX2ds b2IuY2FwdHVyZTsKCiAgICBpZiAoIGMtPmZkID49IDAgKSB7CiAgICAgICAgaWYgKCBjLT5j b250aW5fb24gKQogICAgICAgICAgICBUVkNBUFRVUkVTdG9wKCBjICk7CgogICAgICAgIGNs b3NlKCBjLT5mZCApOwogICAgfQogICAgaWYgKCBjLT50ZmQgPj0gMCApCiAgICAgICAgY2xv c2UoIGMtPnRmZCApOwp9CgoKLyoqQEJFR0lORlVOQyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgUHJvdG90eXBl ICA6IHN0YXRpYyB2b2lkIFRWQ0FQVFVSRUZyYW1lRG9uZVNpZ0hkbHIoKQoKICAgIFB1cnBv c2UgICAgOiBDYWxsZWQgd2hlbiB0aGUgZHJpdmVyIGZpbmlzaGVzIGNhcHR1cmluZyBhIGZy YW1lLgoKICAgIFByb2dyYW1tZXIgOiAwNy1NYXItOTcgIFJhbmRhbGwgSG9wcGVyCgogICAg UGFyYW1ldGVycyA6IE5vbmUuCgogICAgUmV0dXJucyAgICA6IE5vbmUuCgogICAgR2xvYmFs cyAgICA6IE5vbmUuCgogKipARU5ERlVOQyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKc3RhdGljIHZvaWQgVFZD QVBUVVJFRnJhbWVEb25lU2lnSGRscigpCnsKICAgIFNfZnJhbWVfZG9uZV9jb3VudCsrOwoj aWZkZWYgbGludXgKIyAgd2FybmluZyBIdWg/ICBEbyBzaWduYWwgaGFuZGxlcnMgZ2V0IHVu cmVnaXN0ZXJlZCBpbiBMaW51eCBhZnRlciBkZWxpdmVyeT8KICAgIHNpZ25hbCggU0lHVVNS MSwgVFZDQVBUVVJFRnJhbWVEb25lU2lnSGRsciApOwojZW5kaWYKfQoKLyoqQEJFR0lORlVO QyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCgogICAgUHJvdG90eXBlICA6IHZvaWQgVFZDQVBUVVJFV29ya1Byb2MoKQoK ICAgIFB1cnBvc2UgICAgOiBYdCB3b3JrIHByb2Mgc2xhdmUgcm91dGluZSBpbnZva2VkIHRv IGluaXRpYXRlIGJlaGF2aW9ycyAKICAgICAgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGgg Y2FwdHVyaW5nIGZyYW1lcy4KCiAgICBQcm9ncmFtbWVyIDogMDctTWFyLTk3ICBSYW5kYWxs IEhvcHBlcgoKICAgIFBhcmFtZXRlcnMgOiBOb25lLgoKICAgIFJldHVybnMgICAgOiBOb25l LgoKICAgIEdsb2JhbHMgICAgOiBOb25lLgoKICoqQEVOREZVTkMqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCnZv aWQgVFZDQVBUVVJFV29ya1Byb2MoKQp7CiAgICBzdGF0aWMgVFZfQ0FQVFVSRSAgICpjID0g JkdfZ2xvYi5jYXB0dXJlOwogICAgVFZfSU1BR0UgICAgICAgICAgICAgaW1nOwoKICAgIGlm ICgoIFNfZnJhbWVfZG9uZV9jb3VudCA9PSAwICkgfHwgKCBjLT5mcmFtZV9kb25lX2NiID09 IE5VTEwgKSkKICAgICAgICByZXR1cm47CgovKiAgaWYgKCBTX2ZyYW1lX2RvbmVfY291bnQg PiAwICkKICAgICAgICBEUlZQUklOVEYoKCAiJWQgZnJhbWVzIGJlaGluZFxuIiwgU19mcmFt ZV9kb25lX2NvdW50ICkpOwoqLwogICAgU19mcmFtZV9kb25lX2NvdW50LS07CgogICAgaW1n LmJ1ZiA9IGMtPmRydl9idWY7CiAgICBtZW1jcHkoICZpbWcuZ2VvbSwgJmMtPmdlb20sIHNp emVvZiggaW1nLmdlb20gKSApOwogICAgbWVtY3B5KCAmaW1nLnBpeF9nZW9tLCAmYy0+cGl4 X2dlb21fbGlzdFsgYy0+cGl4X2dlb21faWR4IF0sCiAgICAgICAgICAgIHNpemVvZiggaW1n LnBpeF9nZW9tICkgKTsKICAgIGMtPmZyYW1lX2RvbmVfY2IoICZpbWcgKTsKfQoKLyogIFRW Q0FQVFVSRUNsZWFyUGVuZGluZ0ZyYW1lczogIFJlc2V0L2lnbm9yZSBhbnkgb3V0c3RhbmRp bmcgZnJhbWVzLiAgKi8Kdm9pZCBUVkNBUFRVUkVDbGVhclBlbmRpbmdGcmFtZXMoKQp7CiAg ICBTX2ZyYW1lX2RvbmVfY291bnQgPSAwOwp9CgovKiAgVFZDQVBUVVJFR2V0UGVuZGluZ0Zy YW1lIC0gR2V0IHBlbmRpbmcgZnJhbWUgJiByZXQgVCAocmV0IEYgaWYgbm9uZSkgICovClRW X0JPT0wgVFZDQVBUVVJFR2V0UGVuZGluZ0ZyYW1lKCBUVl9JTUFHRSAqKmltZyApCnsKICAg IGlmICggU19mcmFtZV9kb25lX2NvdW50ID4gMCApIHsKICAgICAgICAvKiAgRklYTUU6ICBT aGFyZSB0aGlzIGdsb2IgLS0gaXQncyB0aGUgV29ya1Byb2MgYWJvdmUgdy9vIENCICAqLwog ICAgICAgIHN0YXRpYyBUVl9DQVBUVVJFICAgKmMgPSAmR19nbG9iLmNhcHR1cmU7CiAgICAg ICAgc3RhdGljIFRWX0lNQUdFICAgICAgaW1hZ2U7CgogICAgICAgIGlmICgoIFNfZnJhbWVf ZG9uZV9jb3VudCA9PSAwICkgfHwgKCBjLT5mcmFtZV9kb25lX2NiID09IE5VTEwgKSkKICAg ICAgICAgICAgcmV0dXJuOwoKICAgICAgICBpZiAoIFNfZnJhbWVfZG9uZV9jb3VudC0tID4g MCApCiAgICAgICAgICAgIERSVlBSSU5URigoICIlZCBmcmFtZXMgYmVoaW5kXG4iLCBTX2Zy YW1lX2RvbmVfY291bnQgKSk7CgogICAgICAgIGltYWdlLmJ1ZiA9IGMtPmRydl9idWY7CiAg ICAgICAgbWVtY3B5KCAmaW1hZ2UuZ2VvbSwgJmMtPmdlb20sIHNpemVvZiggaW1hZ2UuZ2Vv bSApICk7CiAgICAgICAgbWVtY3B5KCAmaW1hZ2UucGl4X2dlb20sICZjLT5waXhfZ2VvbV9s aXN0WyBjLT5waXhfZ2VvbV9pZHggXSwKICAgICAgICAgICAgICAgIHNpemVvZiggaW1hZ2Uu cGl4X2dlb20gKSApOwogICAgICAgICppbWcgPSAmaW1hZ2U7CiAgICAgICAgcmV0dXJuIFRS VUU7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAqaW1nID0gTlVMTDsKICAgICAgICByZXR1 cm4gRmFsc2U7CiAgICB9Cn0KCgojaWZkZWYgT0xEX0FMV0FZU19VU0VfU0lHTkFMU19OT1cK LyoqQEJFR0lORlVOQyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCgogICAgUHJvdG90eXBlICA6IHN0YXRpYyB2b2lkIFRW Q0FQVFVSRUZyYW1lVGltZW91dENCKAogICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVy ICAgICAgICAgIGNsX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICBYdEludGVydmFsSWQg ICAgICAqdGltZXIgKQoKICAgIFB1cnBvc2UgICAgOiBJbnZva2VkIGR1cmluZyBjb250aW51 b3VzIGNhcHR1cmUgdG8gbGV0IHVzIGtpY2sgaW4KICAgICAgICAgICAgICAgICBmcmFtZSBk b25lIGNhbGxiYWNrIHBlcmlvZGljYWxseSAoc2luY2Ugc2lnbmFscyBhcmVuJ3QKICAgICAg ICAgICAgICAgICBpc3N1ZWQgYnkgdGhlIGRyaXZlciBmb3IgZnJhbWUgY29tcGxldGVzIHdo ZW4gaW4gCiAgICAgICAgICAgICAgICAgY29udGludW91cyBtb2RlKS4KCiAgICBQcm9ncmFt bWVyIDogMDgtTWFyLTk3ICBSYW5kYWxsIEhvcHBlcgoKICAgIFBhcmFtZXRlcnMgOiBjbF9k YXRhIC0gSTogbm90IHVzZWQKICAgICAgICAgICAgICAgICB0aW1lciAgIC0gSTogbm90IHVz ZWQKCiAgICBSZXR1cm5zICAgIDoKCiAgICBHbG9iYWxzICAgIDogTm9uZS4KCiAqKkBFTkRG VU5DKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCgpzdGF0aWMgdm9pZCBUVkNBUFRVUkVGcmFtZVRpbWVvdXRDQigK ICAgICAgICAgWHRQb2ludGVyICAgICAgICAgIGNsX2RhdGEsCiAgICAgICAgIFh0SW50ZXJ2 YWxJZCAgICAgICp0aW1lciApCnsgICAgICAgIAogICAgVFZfQ0FQVFVSRSAgICpjID0gJkdf Z2xvYi5jYXB0dXJlOwogICAgVFZfSU1BR0UgICAgICBpbWc7CgogICAgLyogIEludm9rZSB1 c2VyLWRlZmluZWQgZnJhbWUgY29tcGxldGlvbiBjYWxsYmFjayAgKi8KICAgIGlmICggYy0+ ZnJhbWVfZG9uZV9jYiAhPSBOVUxMICkgewogICAgICAgIGltZy5idWYgPSBjLT5kcnZfYnVm OwogICAgICAgIG1lbWNweSggJmltZy5nZW9tLCAmYy0+Z2VvbSwgc2l6ZW9mKCBpbWcuZ2Vv bSApICk7CiAgICAgICAgbWVtY3B5KCAmaW1nLnBpeF9nZW9tLCAmYy0+cGl4X2dlb21fbGlz dFsgYy0+cGl4X2dlb21faWR4IF0sCiAgICAgICAgICAgICAgICBzaXplb2YoIGltZy5waXhf Z2VvbSApICk7CiAgICAgICAgYy0+ZnJhbWVfZG9uZV9jYiggJmltZyApOwogICAgfQoKICAg IC8qICBBbmQgcmVzdGFydCB0aW1lciBmb3IgYW5vdGhlciAiZnJhbWUiICAqLwogICAgU19m cmFtZV90aW1lciA9IFh0QXBwQWRkVGltZU91dCggVFZBUFBDVFgsIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRlJBTUVfVElNRVJfREVMQVlfTVMoYy0+ZnBzX21h eCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVkNBUFRVUkVGcmFt ZVRpbWVvdXRDQiwgTlVMTCApOwp9CiNlbmRpZgoKCnZvaWQgVFZDQVBUVVJFU2V0QnJpZ2h0 bmVzcyggVFZfQ0FQVFVSRSAqYywgZG91YmxlIGJyaWdodG5lc3MgKQp7CiAgICBUVl9JTlQz MiBsYXJnOwoKICAgIGJyaWdodG5lc3MgPSBNQVgoIEJSSUdIVF9NSU4sIE1JTiggQlJJR0hU X01BWCwgYnJpZ2h0bmVzcyApICk7CgogICAgbGFyZyA9IChicmlnaHRuZXNzIC0gQlJJR0hU X01JTikgLyAoQlJJR0hUX1JBTkdFICsgMC4wMSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICogQlJJR0hUX0RSVl9SQU5HRSArIEJSSUdIVF9EUlZfTUlOOwogICAg bGFyZyA9IE1BWCggQlJJR0hUX0RSVl9NSU4sIAogICAgICAgICAgICAgICAgTUlOKCBCUklH SFRfRFJWX01JTitCUklHSFRfRFJWX1JBTkdFLTEsIGxhcmcgKSk7CgogICAgaWYgKCBpb2N0 bCggYy0+dGZkLCBCVDg0OF9TQlJJRywgJmxhcmcgKSA8IDAgKSB7CiAgICAgICAgRE9fSU9D VExfU0VSUiggIkJUODQ4X1NCUklHIiwgbGFyZyApOwogICAgICAgIHJldHVybjsKICAgIH0K CiAgICAvKiAgRklYTUU6IERlYWQgY29kZSAgKi8KICAgIGMtPmJyaWdodG5lc3MgPSBicmln aHRuZXNzOwp9CgoKdm9pZCBUVkNBUFRVUkVTZXRDb250cmFzdCggVFZfQ0FQVFVSRSAqYywg ZG91YmxlIGNvbnRyYXN0ICkKewogICAgVFZfSU5UMzIgbGFyZzsKICAgIAogICAgY29udHJh c3QgID0gTUlOKCBDT05UUl9NQVgsIE1BWCggQ09OVFJfTUlOLCBjb250cmFzdCApICk7Cgog ICAgbGFyZyA9IChjb250cmFzdCAtIENPTlRSX01JTikgLyAoQ09OVFJfUkFOR0UgKyAwLjAx KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBDT05UUl9EUlZfUkFOR0Ug KyBDT05UUl9EUlZfTUlOOwogICAgbGFyZyA9IE1BWCggQ09OVFJfRFJWX01JTiwgCiAgICAg ICAgICAgICAgICBNSU4oIENPTlRSX0RSVl9NSU4rQ09OVFJfRFJWX1JBTkdFLTEsIGxhcmcg KSApOwoKICAgIGlmICggaW9jdGwoIGMtPnRmZCwgQlQ4NDhfU0NPTlQsICZsYXJnICkgPCAw ICkgewogICAgICAgIERPX0lPQ1RMX1NFUlIoICJCVDg0OF9TQ09OVCIsIGxhcmcgKTsKICAg ICAgICByZXR1cm47CiAgICB9CgogICAgLyogIEZJWE1FOiBEZWFkIGNvZGUgICovCiAgICBj LT5jb250cmFzdCA9IGNvbnRyYXN0Owp9CgoKdm9pZCBUVkNBUFRVUkVTZXRIdWUoIFRWX0NB UFRVUkUgKmMsIGRvdWJsZSBodWUgKQp7CiAgICBUVl9JTlQzMiBsYXJnOwoKICAgIGh1ZSAg PSBNSU4oIEhVRV9NQVgsIE1BWCggSFVFX01JTiwgaHVlICkgKTsKICAgIGxhcmcgPSAoaHVl IC0gSFVFX01JTikgLyAoSFVFX1JBTkdFICsgMC4wMSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgKiBIVUVfRFJWX1JBTkdFICsgSFVFX0RSVl9NSU47CiAgICBsYXJnID0gTUFYKCBI VUVfRFJWX01JTiwgCiAgICAgICAgICAgICAgICBNSU4oIEhVRV9EUlZfTUlOK0hVRV9EUlZf UkFOR0UtMSwgbGFyZyApKTsKCiAgICBpZiAoIGlvY3RsKCBjLT50ZmQsIEJUODQ4X1NIVUUs ICZsYXJnICkgPCAwICkgewogICAgICAgIERPX0lPQ1RMX1NFUlIoICJCVDg0OF9TSFVFIiwg bGFyZyApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvKiAgRklYTUU6IERlYWQgY29k ZSAgKi8KICAgIGMtPmh1ZSA9IGh1ZTsKfQoKCnZvaWQgVFZDQVBUVVJFU2V0U2F0VSggVFZf Q0FQVFVSRSAqYywgZG91YmxlIHNhdF91ICkKewogICAgVFZfSU5UMzIgbGFyZzsKICAgIAog ICAgc2F0X3UgID0gTUlOKCBTQVRVX01BWCwgTUFYKCBTQVRVX01JTiwgc2F0X3UgKSApOwog ICAgbGFyZyA9IChzYXRfdSAtIFNBVFVfTUlOKSAvIChTQVRVX1JBTkdFICsgMC4wMSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBTQVRVX0RSVl9SQU5HRSArIFNBVFVfRFJW X01JTjsKICAgIGxhcmcgPSBNQVgoIFNBVFVfRFJWX01JTiwgCiAgICAgICAgICAgICAgICBN SU4oIFNBVFVfRFJWX01JTitTQVRVX0RSVl9SQU5HRS0xLCBsYXJnICkgKTsKCiAgICBpZiAo IGlvY3RsKCBjLT50ZmQsIEJUODQ4X1NVU0FULCAmbGFyZyApIDwgMCApIHsKICAgICAgICBE T19JT0NUTF9TRVJSKCAiQlQ4NDhfU1VTQVQiLCBsYXJnICk7CiAgICAgICAgcmV0dXJuOwog ICAgfQoKICAgIC8qICBGSVhNRTogRGVhZCBjb2RlICAqLwogICAgYy0+c2F0X3UgPSBzYXRf dTsKfQoKCnZvaWQgVFZDQVBUVVJFU2V0U2F0ViggVFZfQ0FQVFVSRSAqYywgZG91YmxlIHNh dF92ICkKewogICAgVFZfSU5UMzIgbGFyZzsKICAgIAogICAgc2F0X3YgID0gTUlOKCBTQVRW X01BWCwgTUFYKCBTQVRWX01JTiwgc2F0X3YgKSApOwogICAgbGFyZyA9IChzYXRfdiAtIFNB VFZfTUlOKSAvIChTQVRWX1JBTkdFICsgMC4wMSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKiBTQVRWX0RSVl9SQU5HRSArIFNBVFZfRFJWX01JTjsKICAgIGxhcmcgPSBNQVgo IFNBVFZfRFJWX01JTiwgCiAgICAgICAgICAgICAgICBNSU4oIFNBVFZfRFJWX01JTitTQVRW X0RSVl9SQU5HRS0xLCBsYXJnICkgKTsKCiAgICBpZiAoIGlvY3RsKCBjLT50ZmQsIEJUODQ4 X1NWU0FULCAmbGFyZyApIDwgMCApIHsKICAgICAgICBET19JT0NUTF9TRVJSKCAiQlQ4NDhf U1ZTQVQiLCBsYXJnICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8qICBGSVhNRTog RGVhZCBjb2RlICAqLwogICAgYy0+c2F0X3YgPSBzYXRfdjsKfQoKdm9pZCBUVkNBUFRVUkVT ZXRBcHBlYXJhbmNlUGFyYW0oIFRWX0NBUFRVUkUgKmMsIFRWX0RSSVZFUl9QQVJBTSBwLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZhbCApCnsKICAgIHN3 aXRjaCAoIHAgKSB7CiAgICAgICAgY2FzZSBUVl9QQVJBTV9IVUUgICAgICA6ICBUVkNBUFRV UkVTZXRIdWUgICAgICAgKCBjLCB2YWwgKTsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfUEFS QU1fQlJJR0hUICAgOiAgVFZDQVBUVVJFU2V0QnJpZ2h0bmVzcyggYywgdmFsICk7ICBicmVh azsKICAgICAgICBjYXNlIFRWX1BBUkFNX0NPTlRSQVNUIDogIFRWQ0FQVFVSRVNldENvbnRy YXN0ICAoIGMsIHZhbCApOyAgYnJlYWs7CiAgICAgICAgY2FzZSBUVl9QQVJBTV9TQVRVICAg ICA6ICBUVkNBUFRVUkVTZXRTYXRVICAgICAgKCBjLCB2YWwgKTsgIGJyZWFrOwogICAgICAg IGNhc2UgVFZfUEFSQU1fU0FUViAgICAgOiAgVFZDQVBUVVJFU2V0U2F0ViAgICAgICggYywg dmFsICk7ICBicmVhazsKICAgICAgICBkZWZhdWx0IDoKICAgICAgICAgICAgZnByaW50Zigg c3RkZXJyLCAKICAgICAgICAgICAgICAgIlRWQ0FQVFVSRVNldEFwcGVhcmFuY2VQYXJhbTog VW5zdXBwb3J0ZWQgcGFyYW0gJWRcbiIsIHAgKTsKICAgICAgICAgICAgZXhpdCgxKTsKICAg IH0KfQoKdm9pZCBUVkNBUFRVUkVTZXRJbnB1dEZvcm1hdCggVFZfQ0FQVFVSRSAqYywgVFZf SU5QVVRfRk9STUFUIGZvcm1hdCApCnsKICAgIFRWX0lOVDMyIGxhcmc7CgogICAgc3dpdGNo ICggZm9ybWF0ICkgewogICAgICAgIGNhc2UgVFZfSU5QVVRfTlRTQ00gICAgOiBsYXJnID0g QlQ4NDhfSUZPUk1fRl9OVFNDTSAgIDsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfSU5QVVRf TlRTQ0ogICAgOiBsYXJnID0gQlQ4NDhfSUZPUk1fRl9OVFNDSiAgIDsgIGJyZWFrOwogICAg ICAgIGNhc2UgVFZfSU5QVVRfUEFMQkRHSEkgOiBsYXJnID0gQlQ4NDhfSUZPUk1fRl9QQUxC REdISTsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfSU5QVVRfUEFMTSAgICAgOiBsYXJnID0g QlQ4NDhfSUZPUk1fRl9QQUxNICAgIDsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfSU5QVVRf UEFMTiAgICAgOiBsYXJnID0gQlQ4NDhfSUZPUk1fRl9QQUxOICAgIDsgIGJyZWFrOwogICAg ICAgIGNhc2UgVFZfSU5QVVRfU0VDQU0gICAgOiBsYXJnID0gQlQ4NDhfSUZPUk1fRl9TRUNB TSAgIDsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfSU5QVVRfUEFMTkNPTUIgOiBsYXJnID0g QlQ4NDhfSUZPUk1fRl9SU1ZEICAgIDsgIGJyZWFrOwogICAgICAgIGRlZmF1bHQgICAgICAg ICAgICAgICAgOgogICAgICAgIGNhc2UgVFZfSU5QVVRfQVVUTyAgICAgOgogICAgICAgICAg ICBmcHJpbnRmKCBzdGRlcnIsIAogICAgICAgICAgICAgICAiVFZDQVBUVVJFU2V0SW5wdXRG b3JtYXQ6IFVuc3VwcG9ydGVkIGZvcm1hdCAlZFxuIiwgZm9ybWF0ICk7CiAgICAgICAgICAg IGV4aXQoMSk7CiAgICB9CiAgICBpZiAoIGlvY3RsKCBjLT5mZCwgQlQ4NDhTRk1ULCAmbGFy ZyApIDwgMCApIHsKICAgICAgICBET19JT0NUTF9TRVJSKCAiQlQ4NDhTRk1UIiwgbGFyZyAp OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvKiAgVXBkYXRlIG1heCBjYXB0dXJlIHNp emUgYmFzZWQgb24gZHJpdmVyIGZvcm1hdCAgKi8KICAgIC8qICBGSVhNRTogVGhlc2UgYmVs b25nIGluIHRoZSBkcml2ZXIvZHJpdmVyIGluY2x1ZGUgZmlsZSAgKi8KICAgIHN3aXRjaCAo IGZvcm1hdCApIHsKICAgICAgICBjYXNlIFRWX0lOUFVUX05UU0NNIDoKICAgICAgICBjYXNl IFRWX0lOUFVUX05UU0NKIDoKICAgICAgICBjYXNlIFRWX0lOUFVUX1BBTE0gIDoKICAgICAg ICAgICAgYy0+d2lkdGhfbWF4ICA9IE5UU0NfRElNX1g7CiAgICAgICAgICAgIGMtPmhlaWdo dF9tYXggPSBOVFNDX0RJTV9ZOwogICAgICAgICAgICBjLT5mcHNfbWF4ICAgID0gTlRTQ19G UFM7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfSU5QVVRfUEFMQkRHSEkg OgogICAgICAgIGNhc2UgVFZfSU5QVVRfUEFMTiAgICAgOgogICAgICAgIGNhc2UgVFZfSU5Q VVRfU0VDQU0gICAgOgogICAgICAgIGNhc2UgVFZfSU5QVVRfUEFMTkNPTUIgOgogICAgICAg ICAgICBjLT53aWR0aF9tYXggID0gUEFMX0RJTV9YOwogICAgICAgICAgICBjLT5oZWlnaHRf bWF4ID0gUEFMX0RJTV9ZOwogICAgICAgICAgICBjLT5mcHNfbWF4ICAgID0gUEFMX0ZQUzsK ICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICAvKiAgRklYTUU6IERlYWQgY29kZSAgKi8K ICAgIGMtPmlucHV0X2Zvcm1hdCA9IGZvcm1hdDsKfQoKCnZvaWQgVFZDQVBUVVJFU2V0SW5w dXREZXZpY2UoIFRWX0NBUFRVUkUgKmMsIFRWX0lOUFVUX0RFVklDRSBkZXYgKQp7CiAgICBp bnQgYXJnLAogICAgICAgIG9sZF9hdWRpbzsKCiAgICAvKiAgRklYTUU6ICBNb3ZlIGFsbCBk cml2ZXIgc2V0IGNhbGxzIG91dCBvZiBTdGFydCgpIGludG8gdGhlc2UgICovCiAgICAvKiAg ICBzZXQgY2FsbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICovCiAgICBpZiAoIGMtPmNvbnRpbl9vbiApIHsKICAgICAgICBmcHJpbnRmKCBz dGRlcnIsIAogICAgICAgICAgICAgICAgICJUVkNBUFRVUkVTZXRJbnB1dERldmljZSgpOiBD YWxsZWQgd2hlbiBjYXB0dXJlIGlzIG9uXG4iICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoK ICAgIC8qICBEcml2ZXIgRklYTUU6IEhhY2sgdG8gZ2V0IGFyb3VuZCBkcml2ZXIgdW5tdXRp bmcgYXVkaW8gYWNyb3NzICAqLwogICAgLyogICAgY2hhbm5lbCwgZnJlcSwgYW5kIGlucHV0 IGRldmljZSBjaGFuZ2VzLiAgICAgICAgICAgICAgICAgICAgICovCiAgICBpZiAoIGlvY3Rs KCBjLT50ZmQsIEJUODQ4X0dBVURJTywgJm9sZF9hdWRpbyApIDwgMCApIHsKICAgICAgICBE T19JT0NUTF9HRVJSKCAiQlQ4NDhfR0FVRElPIiApOwogICAgICAgIHJldHVybjsKICAgIH0K CiAgICBzd2l0Y2ggKCBkZXYgKSB7CiAgICAgICAgY2FzZSBUVl9ERVZJQ0VfVFVORVIgOiBh cmcgPSBNRVRFT1JfREVWMTsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfREVWSUNFX1ZJREVP ICA6IGFyZyA9IE1FVEVPUl9JTlBVVF9ERVYzOyAgYnJlYWs7CiAgICAgICAgY2FzZSBUVl9E RVZJQ0VfU1ZJREVPIDogYXJnID0gTUVURU9SX0RFVjI7ICBicmVhazsKICAgICAgICBkZWZh dWx0IDoKICAgICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlRWQ0FQVFVSRVNldElucHV0 RGV2aWNlKCk6IEJhZCB2YWx1ZSAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgIGRldiAp OwogICAgICAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCBpb2N0bCggYy0+ZmQsIE1F VEVPUlNJTlBVVCwgJmFyZyApIDwgMCApIHsKICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJp b2N0bChNRVRFT1JTSU5QVVQsICVkKSBmYWlsZWQ6ICVzXG4iLCAKICAgICAgICAgICAgICAg ICBhcmcsIHN0cmVycm9yKGVycm5vKSApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAv KiAgRklYTUU6IERlYWQgY29kZSAgKi8KICAgIGMtPmlucHV0X2RldiAgICAgICAgID0gYXJn OwoKICAgIC8qICBXaGVuIHdlIGRpZCB0aGF0IGxhc3QgU0lOUFVULCB0aGUgZHJpdmVyIGF1 dG8tc2VsZWN0ZWQgdGhlICAqLwogICAgLyogICAgYXVkaW8gaW5wdXQgY29ycmVjdCBmb3Ig dGhhdCB2aWRlbyBpbnB1dC4gIE92ZXJyaWRlIGl0ICAgICovCiAgICAvKiAgICBpZiB0aGUg dXNlciBoYXMgcmVxdWVzdGVkIHRoaXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8K ICAgIGlmICggYy0+YXVkaW9faW5wdXRfZGV2ICE9IFRWX0FVRElPX0lOUFVUX0FVVE8gKSB7 CiAgICAgICAgc3dpdGNoICggYy0+YXVkaW9faW5wdXRfZGV2ICkgewogICAgICAgICAgICBk ZWZhdWx0ICAgICAgICAgICAgICAgICAgICA6CiAgICAgICAgICAgIGNhc2UgVFZfQVVESU9f SU5QVVRfVFVORVIgIDogYXJnID0gQVVESU9fVFVORVI7ICAgYnJlYWs7CiAgICAgICAgICAg IGNhc2UgVFZfQVVESU9fSU5QVVRfRVhURVJOIDogYXJnID0gQVVESU9fRVhURVJOOyAgYnJl YWs7CiAgICAgICAgICAgIGNhc2UgVFZfQVVESU9fSU5QVVRfSU5URVJOIDogYXJnID0gQVVE SU9fSU5URVJOOyAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmICggaW9jdGwoIGMtPnRm ZCwgQlQ4NDhfU0FVRElPLCAmYXJnICkgPCAwICkgewogICAgICAgICAgICBmcHJpbnRmKCBz dGRlcnIsICJpb2N0bChCVDg0OF9TQVVESU8sICVkKSBmYWlsZWQ6ICVzXG4iLCAKICAgICAg ICAgICAgICAgICAgICAgYXJnLCBzdHJlcnJvcihlcnJubykgKTsKICAgICAgICAgICAgcmV0 dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAvKiAgUmVzdG9yZSB0aGUgb2xkIG11dGUgc2V0 dGluZyAgKi8KICAgIG9sZF9hdWRpbyAmPSBBVURJT19NVVRFOwogICAgaWYgKCBvbGRfYXVk aW8gKSAKICAgICAgICBUVkNBUFRVUkVTZXRBdWRpb011dGUoIGMsIFRSVUUgKTsKfQoKCnZv aWQgVFZDQVBUVVJFU2V0QXVkaW9JbnB1dERldmljZSggVFZfQ0FQVFVSRSAqYywgVFZfQVVE SU9fSU5QVVRfREVWSUNFIGRldiApCnsKICAgIGludCBhcmc7CgogICAgLyogIEZJWE1FOiAg TW92ZSBhbGwgZHJpdmVyIHNldCBjYWxscyBvdXQgb2YgU3RhcnQoKSBpbnRvIHRoZXNlICAq LwogICAgLyogICAgc2V0IGNhbGxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLwogICAgaWYgKCBjLT5jb250aW5fb24gKSB7CiAgICAgICAg ZnByaW50Ziggc3RkZXJyLCAKICAgICAgICAgICAgICAgICAiVFZDQVBUVVJFU2V0QXVkaW9J bnB1dERldmljZSgpOiAiCiAgICAgICAgICAgICAgICAgIkNhbGxlZCB3aGVuIGNhcHR1cmUg aXMgb25cbiIgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgc3dpdGNoICggZGV2ICkg ewogICAgICAgIGNhc2UgVFZfQVVESU9fSU5QVVRfQVVUTyAgIDogYnJlYWs7CiAgICAgICAg Y2FzZSBUVl9BVURJT19JTlBVVF9UVU5FUiAgOiBhcmcgPSBBVURJT19UVU5FUjsgICBicmVh azsKICAgICAgICBjYXNlIFRWX0FVRElPX0lOUFVUX0VYVEVSTiA6IGFyZyA9IEFVRElPX0VY VEVSTjsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfQVVESU9fSU5QVVRfSU5URVJOIDogYXJn ID0gQVVESU9fSU5URVJOOyAgYnJlYWs7CiAgICAgICAgZGVmYXVsdCA6CiAgICAgICAgICAg ICBmcHJpbnRmKCBzdGRlcnIsICJUVkNBUFRVUkVTZXRBdWRpb0lucHV0RGV2aWNlKCk6IEJh ZCB2YWx1ZSAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgIGRldiApOwogICAgICAgICAg ICAgcmV0dXJuOwogICAgfQoKICAgIC8qICBOT1RFOiAgQVVUTyBtZWFucyB3ZSBkb24ndCBt b25rZXkgd2l0aCB0aGUgZGVmYXVsdHMgc2VsZWN0ZWQgYnkgICovCiAgICAvKiAgICB0aGUg ZHJpdmVyLiAgT3RoZXIgdmFsdWVzIG1lYW4gd2UgYWx3YXlzIG92ZXJyaWRlIHRoZSBkcml2 ZXIgICAqLwogICAgLyogICAgdG8ga2VlcCB0aGF0IHNldHRpbmcgd2hlbmV2ZXIgaXQgd2Fu dHMgdG8gY2hhbmdlIHRoZSBzZXR0aW5nLiAgKi8KICAgIGlmICggZGV2ICE9IFRWX0FVRElP X0lOUFVUX0FVVE8gKSB7CiAgICAgICAgaWYgKCBpb2N0bCggYy0+dGZkLCBCVDg0OF9TQVVE SU8sICZhcmcgKSA8IDAgKSB7CiAgICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgImlvY3Rs KEJUODQ4X1NBVURJTywgJWQpIGZhaWxlZDogJXNcbiIsIAogICAgICAgICAgICAgICAgICAg ICBhcmcsIHN0cmVycm9yKGVycm5vKSApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAg fQogICAgICAgIGMtPmF1ZGlvX2lucHV0X2RldiA9IGRldjsKICAgIH0KICAgIGVsc2Ugewog ICAgICAgIFRWX0RSSVZFUl9TVEFURSAgczsKCiAgICAgICAgYy0+YXVkaW9faW5wdXRfZGV2 ID0gZGV2OwoKICAgICAgICAvKiAgRm9yY2UgZHJpdmVyIHRvIHJlc2V0IGF1ZGlvIGlucHV0 IGJhY2sgdG8gaXRzIGRlZmF1bHQgICovCiAgICAgICAgaWYgKCAhVFZDQVBUVVJFUXVlcnlE cml2ZXJTdGF0ZSggYywgJnMgKSApIHsKICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAi VFZDQVBUVVJFUXVlcnlEcml2ZXJTdGF0ZSgpIGZhaWxlZFxuIiApOwogICAgICAgICAgICBl eGl0KDEpOwogICAgICAgIH0KCiAgICAgICAgLyogIFRoaXMgZnVubnkgYnVzaW5lc3Mgc28g dGhlIGRyaXZlciB3aWxsIGFjdHVhbGx5IHJlc2V0IHRoZSBpbnB1dCAqLwogICAgICAgIFRW Q0FQVFVSRVNldElucHV0RGV2aWNlKCBjLCBUVl9ERVZJQ0VfVFVORVIgKTsKICAgICAgICBU VkNBUFRVUkVTZXRJbnB1dERldmljZSggYywgVFZfREVWSUNFX1ZJREVPICk7CiAgICAgICAg VFZDQVBUVVJFU2V0SW5wdXREZXZpY2UoIGMsIHMuaW5wdXRfZGV2ICk7CiAgICB9Cn0KCgp2 b2lkIFRWQ0FQVFVSRVNldFR1bmVyQ2hhbm5lbCggVFZfQ0FQVFVSRSAqYywgVFZfSU5UMzIg Y2hhbl9udW0gKQp7CiAgICBUVl9JTlQzMiBsYXJnID0gY2hhbl9udW07CiAgICBpbnQgICBv bGRfYXVkaW87CgogICAgLyogIERyaXZlciBGSVhNRTogSGFjayB0byBnZXQgYXJvdW5kIGRy aXZlciB1bm11dGluZyBhdWRpbyBhY3Jvc3MgICovCiAgICAvKiAgICBjaGFubmVsLCBmcmVx LCBhbmQgaW5wdXQgZGV2aWNlIGNoYW5nZXMuICAgICAgICAgICAgICAgICAgICAgKi8KICAg IGlmICggaW9jdGwoIGMtPnRmZCwgQlQ4NDhfR0FVRElPLCAmb2xkX2F1ZGlvICkgPCAwICkg ewogICAgICAgIERPX0lPQ1RMX0dFUlIoICJCVDg0OF9HQVVESU8iICk7CiAgICAgICAgcmV0 dXJuOwogICAgfQoKICAgIGlmICggaW9jdGwoIGMtPnRmZCwgVFZUVU5FUl9TRVRDSE5MLCAm bGFyZyApIDwgMCApIHsKICAgICAgICBET19JT0NUTF9TRVJSKCAiVFZUVU5FUl9TRVRDSE5M IiwgbGFyZyApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGMtPnR1bmVyX2NoYW5fYWN0 aXZlID0gVFJVRTsKCiAgICBvbGRfYXVkaW8gJj0gQVVESU9fTVVURTsKICAgIGlmICggb2xk X2F1ZGlvICkgCiAgICAgICAgVFZDQVBUVVJFU2V0QXVkaW9NdXRlKCBjLCBUUlVFICk7Cn0K Cgp2b2lkIFRWQ0FQVFVSRVNldFR1bmVyRnJlcSggVFZfQ0FQVFVSRSAqYywgZG91YmxlIGZy ZXEgKQp7CiAgICBUVl9JTlQzMiBsYXJnID0gZnJlcSAqIEZSRVFGQUNUT1I7CiAgICBpbnQg ICAgICBvbGRfYXVkaW87CgogICAgLyogIERyaXZlciBGSVhNRTogSGFjayB0byBnZXQgYXJv dW5kIGRyaXZlciB1bm11dGluZyBhdWRpbyBhY3Jvc3MgICovCiAgICAvKiAgICBjaGFubmVs LCBmcmVxLCBhbmQgaW5wdXQgZGV2aWNlIGNoYW5nZXMuICAgICAgICAgICAgICAgICAgICAg Ki8KICAgIGlmICggaW9jdGwoIGMtPnRmZCwgQlQ4NDhfR0FVRElPLCAmb2xkX2F1ZGlvICkg PCAwICkgewogICAgICAgIERPX0lPQ1RMX0dFUlIoICJCVDg0OF9HQVVESU8iICk7CiAgICAg ICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggaW9jdGwoIGMtPnRmZCwgVFZUVU5FUl9TRVRG UkVRLCAmbGFyZyApIDwgMCApIHsKICAgICAgICBET19JT0NUTF9TRVJSKCAiVFZUVU5FUl9T RVRGUkVRIiwgbGFyZyApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGMtPnR1bmVyX2No YW5fYWN0aXZlID0gRkFMU0U7CgogICAgb2xkX2F1ZGlvICY9IEFVRElPX01VVEU7CiAgICBp ZiAoIG9sZF9hdWRpbyApIAogICAgICAgIFRWQ0FQVFVSRVNldEF1ZGlvTXV0ZSggYywgVFJV RSApOwp9CgoKdm9pZCBUVkNBUFRVUkVTZXRUdW5lckZyZXFTZXQoIFRWX0NBUFRVUkUgKmMs IFRWX0ZSRVFfU0VUIHNldCApCnsKICAgIFRWX0lOVDMyIGxhcmc7CgogICAgc3dpdGNoICgg c2V0ICkgewogICAgICAgIGNhc2UgVFZfRlJFUV9TRVRfTkFCQ1NUICAgOiBsYXJnID0gQ0hO TFNFVF9OQUJDU1QgIDsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfRlJFUV9TRVRfQ0FCTEVJ UkMgOiBsYXJnID0gQ0hOTFNFVF9DQUJMRUlSQzsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZf RlJFUV9TRVRfQ0FCTEVIUkMgOiBsYXJnID0gQ0hOTFNFVF9DQUJMRUhSQzsgIGJyZWFrOwog ICAgICAgIGNhc2UgVFZfRlJFUV9TRVRfV0VVUk9QRSAgOiBsYXJnID0gQ0hOTFNFVF9XRVVS T1BFIDsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfRlJFUV9TRVRfSlBOQkNTVCAgOiBsYXJn ID0gQ0hOTFNFVF9KUE5CQ1NUIDsgIGJyZWFrOwogICAgICAgIGNhc2UgVFZfRlJFUV9TRVRf SlBOQ0FCTEUgOiBsYXJnID0gQ0hOTFNFVF9KUE5DQUJMRTsgIGJyZWFrOwogICAgICAgIGRl ZmF1bHQgOgogICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLAogICAgICAgICAgICAgICAg ICAgICAgIlRWQ0FQVFVSRVNldFR1bmVyRnJlcVNldCgpOiBCYWQgZnJlcSBzZXQgJWRcbiIs IHNldCApOyAKICAgICAgICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgaWYgKCBpb2N0 bCggYy0+dGZkLCBUVlRVTkVSX1NFVFRZUEUsICZsYXJnICkgPCAwICkgewogICAgICAgIERP X0lPQ1RMX1NFUlIoICJUVlRVTkVSX1NFVFRZUEUiLCBsYXJnICk7CiAgICAgICAgcmV0dXJu OwogICAgfQoKICAgIC8qICBGSVhNRTogIEhhY2sgdG8gZm9yY2UgYSBjaGFubmVsIGZyZXEg cmVjb21wdXRlIGluIHRoZSBkcml2ZXIgICovCiAgICAvKiAgICB3aGVuIHdlIGNoYW5nZSBt b2Rlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgewog ICAgICAgIFRWX0RSSVZFUl9TVEFURSAgczsKICAgICAgICBpZiAoICFUVkNBUFRVUkVRdWVy eURyaXZlclN0YXRlKCBjLCAmcyApICkgewogICAgICAgICAgICBmcHJpbnRmKCBzdGRlcnIs ICJUVkNBUFRVUkVRdWVyeURyaXZlclN0YXRlKCkgZmFpbGVkXG4iICk7CiAgICAgICAgICAg IGV4aXQoMSk7CiAgICAgICAgfQogICAgICAgIFRWQ0FQVFVSRVNldFR1bmVyQ2hhbm5lbCgg Yywgcy50dW5lcl9jaGFuICk7CiAgICB9Cn0KCnZvaWQgVFZDQVBUVVJFU2V0QWZjKCBUVl9D QVBUVVJFICpjLCBUVl9CT09MIGFmYyApCnsKICAgIGlmICggaW9jdGwoIGMtPnRmZCwgVFZU VU5FUl9TRVRBRkMsICZhZmMgKSA8IDAgKSB7CiAgICAgICAgRE9fSU9DVExfU0VSUiggIlRW VFVORVJfU0VUQUZDIiwgYWZjICk7CiAgICAgICAgcmV0dXJuOwogICAgfQp9Cgp2b2lkIFRW Q0FQVFVSRVNldEF1ZGlvTXV0ZSggVFZfQ0FQVFVSRSAqYywgVFZfQk9PTCBtdXRlICkKewog ICAgaW50IGFyZyA9ICggbXV0ZSA/IEFVRElPX01VVEUgOiBBVURJT19VTk1VVEUgKTsKCiAg ICAvKiAgSWYgYXVkaW8gaXMgZGlzYWJsZWQsIGRvbid0IGV2ZXIgdW5tdXRlICAqLwogICAg aWYgKCAhQXBwX3Jlcy5kb19hdWRpbyApCiAgICAgICAgYXJnID0gQVVESU9fTVVURTsKCiAg ICAvKiAgRG9uJ3QgY2hhbmdlIGF1ZGlvIHNvdXJjZTsganVzdCBtdXRlIGl0ICAqLwogICAg aWYgKCBpb2N0bCggYy0+dGZkLCBCVDg0OF9TQVVESU8sICZhcmcgKSA8IDAgKSB7CiAgICAg ICAgRE9fSU9DVExfU0VSUiggIkJUODQ4X1NBVURJTyIsIGFyZyApOwogICAgICAgIHJldHVy bjsKICAgIH0KfQoKdm9pZCBUVkNBUFRVUkVTZXRDb2xvcmJhcnMgICAoIFRWX0NBUFRVUkUg KmMsIFRWX0JPT0wgY29sb3JiYXJzICkKewogICAgaW50ICAgaW9jdGxfbnVtID0gKCBjb2xv cmJhcnMgPyAgQlQ4NDhfU0NCQVJTICA6ICBCVDg0OF9DQ0JBUlMgICk7CiAgICBjaGFyICpp b2N0bF9zdHIgPSAoIGNvbG9yYmFycyA/ICJCVDg0OF9TQ0JBUlMiIDogIkJUODQ4X0NDQkFS UyIgKTsKICAgIGludCAgIGR1bW15OwoKICAgIC8qICBEb24ndCBjaGFuZ2UgYXVkaW8gc291 cmNlOyBqdXN0IG11dGUgaXQgICovCiAgICBpZiAoIGlvY3RsKCBjLT50ZmQsIGlvY3RsX251 bSwgJmR1bW15ICkgPCAwICkgewogICAgICAgIERPX0lPQ1RMX1NFUlIoIGlvY3RsX3N0ciwg ZHVtbXkgKTsKICAgICAgICByZXR1cm47CiAgICB9Cn0KCnZvaWQgVFZDQVBUVVJFU2V0RlBT ICAgICAgICggVFZfQ0FQVFVSRSAqYywgVFZfVUlOVDMyIGZwcyApCnsKICAgIFRWX1VJTlQx NiB1c2FyZyA9IE1BWCggMCwgTUlOKCBjLT5mcHNfbWF4LCBmcHMgKSApOwoKICAgIGlmICgg aW9jdGwoIGMtPmZkLCBNRVRFT1JTRlBTLCAmdXNhcmcgKSA8IDAgKSB7CiAgICAgICAgRE9f SU9DVExfU0VSUiggIk1FVEVPUlNGUFMiLCB1c2FyZyApOwogICAgICAgIHJldHVybjsKICAg IH0KCiAgICAvKiAgRklYTUU6IERlYWQgY29kZSAgKi8KICAgIGMtPmZwcyA9IHVzYXJnOwp9 CgoKdm9pZCBUVkNBUFRVUkVTZXRGcmFtZURvbmVDQkVuYWJsZWQoIFRWX0NBUFRVUkUgKmMs IFRWX0JPT0wgZW5hYmxlICkKewogICAgYy0+ZnJhbWVfY2JfZW5hYmxlZCA9IGVuYWJsZTsK fQoKCnZvaWQgVFZDQVBUVVJFR2V0RlBTTWF4KCBUVl9DQVBUVVJFICpjLCBUVl9VSU5UMzIg KmZwc19tYXggKQp7CiAgICAqZnBzX21heCA9IGMtPmZwc19tYXg7Cn0KCgovKipAQkVHSU5G VU5DKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKCiAgICBQcm90b3R5cGUgIDogVFZfQk9PTCBUVkNBUFRVUkVRdWVyeURy aXZlclN0YXRlKAogICAgICAgICAgICAgICAgICAgICAgVFZfQ0FQVFVSRSAqYywKICAgICAg ICAgICAgICAgICAgICAgIFRWX0RSSVZFUl9TVEFURSAqcyApCgogICAgUHVycG9zZSAgICA6 IFF1ZXJpZXMgdGhlIGRyaXZlciBmb3IgYWxsIG9mIGl0cyBjdXJyZW50IHBhcmFtZXRlcnMu CgogICAgUHJvZ3JhbW1lciA6IDE2LU1hci05NyAgUmFuZGFsbCBIb3BwZXIKCiAgICBQYXJh bWV0ZXJzIDogYyAtIEk6IGNhcHR1cmUgZGV2aWNlIHN0cnVjdAogICAgICAgICAgICAgICAg IHMgLSBPOiBkcml2ZXIgc3RhdGUKCiAgICBSZXR1cm5zICAgIDogTm9uZS4KCiAgICBHbG9i YWxzICAgIDogTm9uZS4KCiAqKkBFTkRGVU5DKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpUVl9CT09MIFRWQ0FQ VFVSRVF1ZXJ5RHJpdmVyU3RhdGUoIFRWX0NBUFRVUkUgKmMsIFRWX0RSSVZFUl9TVEFURSAq cyApCnsKICAgIFRWX0lOVDMyICAgICBsYXJnOwogICAgVFZfVUlOVDE2ICAgIHVzYXJnOwoj aWZkZWYgTk9UX05FRURFRAogICAgc3RydWN0IG1ldGVvcl9jb3VudHMgY291bnRzOwogICAg c3RydWN0IG1ldGVvcl92aWRlbyAgdmlkZW87CiNlbmRpZgoKICAgIG1lbXNldCggcywgJ1ww Jywgc2l6ZW9mKCAqcyApICk7CgogICAgLyogIElOUFVUIERFVklDRSAgKi8KICAgIGlmICgg aW9jdGwoIGMtPmZkLCBNRVRFT1JHSU5QVVQsICZsYXJnICkgPCAwICkgewogICAgICAgIERP X0lPQ1RMX0dFUlIoICJNRVRFT1JHSU5QVVQiICk7CiAgICAgICAgcmV0dXJuIEZhbHNlOwog ICAgfQoKICAgIHN3aXRjaCAoIGxhcmcgKSB7CiAgICAgICAgY2FzZSBNRVRFT1JfREVWMDoK ICAgICAgICBjYXNlIE1FVEVPUl9JTlBVVF9ERVYzIDogcy0+aW5wdXRfZGV2ID0gVFZfREVW SUNFX1ZJREVPIDsgIGJyZWFrOwogICAgICAgIGNhc2UgTUVURU9SX0RFVjEgOiBzLT5pbnB1 dF9kZXYgPSBUVl9ERVZJQ0VfVFVORVIgOyAgYnJlYWs7CiAgICAgICAgY2FzZSBNRVRFT1Jf REVWMiA6IHMtPmlucHV0X2RldiA9IFRWX0RFVklDRV9TVklERU87ICBicmVhazsKICAgICAg ICBkZWZhdWx0IDoKICAgICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlRWQ0FQVFVSRVF1 ZXJ5RHJpdmVyU3RhdGUoKTogQmFkIElOUFVUICVkXG4iLAogICAgICAgICAgICAgICAgICAg ICAgbGFyZyApOwogICAgICAgICAgICAgcmV0dXJuIEZhbHNlOwogICAgfQoKICAgIC8qICBJ TlBVVCBGT1JNQVQgICovCiAgICBpZiAoIGlvY3RsKCBjLT5mZCwgQlQ4NDhHRk1ULCAmbGFy ZyApIDwgMCApIHsKICAgICAgICBET19JT0NUTF9HRVJSKCAiQlQ4NDhHRk1UIiApOwogICAg ICAgIHJldHVybiBGYWxzZTsKICAgIH0KICAgIHN3aXRjaCAoIGxhcmcgKSB7CiAgICAgICAg Y2FzZSBCVDg0OF9JRk9STV9GX0FVVE8gICAgOiBzLT5pbnB1dF9mbXQgPSBUVl9JTlBVVF9B VVRPICAgIDsgIGJyZWFrOwogICAgICAgIGNhc2UgQlQ4NDhfSUZPUk1fRl9OVFNDTSAgIDog cy0+aW5wdXRfZm10ID0gVFZfSU5QVVRfTlRTQ00gICA7ICBicmVhazsKICAgICAgICBjYXNl IEJUODQ4X0lGT1JNX0ZfTlRTQ0ogICA6IHMtPmlucHV0X2ZtdCA9IFRWX0lOUFVUX05UU0NK ICAgOyAgYnJlYWs7CiAgICAgICAgY2FzZSBCVDg0OF9JRk9STV9GX1BBTEJER0hJOiBzLT5p bnB1dF9mbXQgPSBUVl9JTlBVVF9QQUxCREdISTsgIGJyZWFrOwogICAgICAgIGNhc2UgQlQ4 NDhfSUZPUk1fRl9QQUxNICAgIDogcy0+aW5wdXRfZm10ID0gVFZfSU5QVVRfUEFMTSAgICA7 ICBicmVhazsKICAgICAgICBjYXNlIEJUODQ4X0lGT1JNX0ZfUEFMTiAgICA6IHMtPmlucHV0 X2ZtdCA9IFRWX0lOUFVUX1BBTE4gICAgOyAgYnJlYWs7CiAgICAgICAgY2FzZSBCVDg0OF9J Rk9STV9GX1NFQ0FNICAgOiBzLT5pbnB1dF9mbXQgPSBUVl9JTlBVVF9TRUNBTSAgIDsgIGJy ZWFrOwogICAgICAgIGNhc2UgQlQ4NDhfSUZPUk1fRl9SU1ZEICAgIDogcy0+aW5wdXRfZm10 ID0gVFZfSU5QVVRfUEFMTkNPTUI7ICBicmVhazsKICAgICAgICBkZWZhdWx0IDoKICAgICAg ICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlRWQ0FQVFVSRVF1ZXJ5RHJpdmVyU3RhdGUoKTog QmFkIEZNVCAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgIGxhcmcgKTsKICAgICAgICAg ICAgIHJldHVybiBGYWxzZTsKICAgIH0KCiAgICAvKiAgQ0FQVFVSRSBERVNUSU5BVElPTiAg Ki8KI2lmZGVmIE5PVF9ORUVERUQKICAgIGlmICggaW9jdGwoIGMtPmZkLCBNRVRFT1JfR1ZJ REVPLCAmdmlkZW8gKSA8IDAgKSB7CiAgICAgICAgRE9fSU9DVExfR0VSUiggIk1FVEVPUl9H VklERU8iICk7CiAgICAgICAgcmV0dXJuIEZhbHNlOwogICAgfQojZW5kaWYKCiAgICAvKiAg RlJBTUVTIFBFUiBTRUMgICovCiAgICBpZiAoIGlvY3RsKCBjLT5mZCwgTUVURU9SR0ZQUywg JnVzYXJnICkgPCAwICkgewogICAgICAgIERPX0lPQ1RMX0dFUlIoICJNRVRFT1JHRlBTIiAp OwogICAgICAgIHJldHVybiBGYWxzZTsKICAgIH0KICAgIHMtPmZwcyA9IHVzYXJnOwoKICAg IC8qICBTSUdOQUwgICovCiNpZmRlZiBOT1RfTkVFREVECiAgICBpZiAoIGlvY3RsKCBjLT5m ZCwgTUVURU9SX0dTSUdOQUwsICZsYXJnICkgPCAwICkgewogICAgICAgIERPX0lPQ1RMX0dF UlIoICJNRVRFT1JfR1NJR05BTCIgKTsKICAgICAgICByZXR1cm4gRmFsc2U7CiAgICB9CiAg ICBzLT5zaWduYWwgPSBsYXJnOwojZW5kaWYKCiAgICAvKiAgQ0FQVFVSRSBTVEFUSVNUSUNT ICAqLwojaWZkZWYgTk9UX05FRURFRAogICAgaWYgKCBpb2N0bCggYy0+ZmQsIE1FVEVPUl9H Q09VTlQsICZjb3VudHMgKSA8IDAgKSB7CiAgICAgICAgRE9fSU9DVExfR0VSUiggIk1FVEVP Ul9HQ09VTlQiICk7CiAgICAgICAgcmV0dXJuIEZhbHNlOwogICAgfQogICAgcy0+c3RhdHMu ZnJhbWVzX2NhcHR1cmVkID0gY291bnRzLmZyYW1lc19jYXB0dXJlZDsKI2VuZGlmCgogICAg LyogIEhVRSAgKi8KICAgIGlmICggaW9jdGwoIGMtPnRmZCwgQlQ4NDhfR0hVRSwgJmxhcmcg KSA8IDAgKSB7CiAgICAgICAgRE9fSU9DVExfR0VSUiggIkJUODQ4X0dIVUUiICk7CiAgICAg ICAgcmV0dXJuIEZhbHNlOwogICAgfQoKICAgIC8qICBEcml2ZXIgRklYTUU6IEhhY2sgbmVl ZGVkIHNpbmNlIDk3MDMyMiBkcml2ZXIgaXMgdXNpbmcgYW4gaW50LCBidXQgKi8KICAgIC8q ICAgIGlzbid0IHJldHVybmluZyAtMTI4LTEyNyByYW5nZSBhcyBpbiBTSFVFLCBidXQgcmF0 aGVyIDAuLjI1NS4gICAgKi8KICAgIGlmICggbGFyZyA+PSAxMjggKQogICAgICAgIGxhcmcg LT0gMjU2OwoKICAgIHMtPmh1ZSA9ICgoZG91YmxlKWxhcmcgLSBIVUVfRFJWX01JTikgLyBI VUVfRFJWX1JBTkdFIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqIEhVRV9SQU5HRSArIEhVRV9NSU47CgogICAgLyogIEJSSUdIVE5FU1MgICovCiAgICBp ZiAoIGlvY3RsKCBjLT50ZmQsIEJUODQ4X0dCUklHLCAmbGFyZyApIDwgMCApIHsKICAgICAg ICBET19JT0NUTF9HRVJSKCAiQlQ4NDhfR0JSSUciICk7CiAgICAgICAgcmV0dXJuIEZhbHNl OwogICAgfQoKICAgIC8qICBEcml2ZXIgRklYTUU6IEhhY2sgbmVlZGVkIHNpbmNlIDk3MDMy MiBkcml2ZXIgaXMgdXNpbmcgYW4gaW50LCBidXQgICovCiAgICAvKiAgICBpc24ndCByZXR1 cm5pbmcgLTEyOC0xMjcgcmFuZ2UgYXMgaW4gU0hVRSwgYnV0IHJhdGhlciAwLi4yNTUuICAg ICAqLwogICAgaWYgKCBsYXJnID49IDEyOCApCiAgICAgICAgbGFyZyAtPSAyNTY7CgogICAg cy0+YnJpZ2h0bmVzcyA9ICgoZG91YmxlKWxhcmcgLSBCUklHSFRfRFJWX01JTikgLyBCUklH SFRfRFJWX1JBTkdFIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKiBCUklHSFRfUkFOR0UgKyBCUklHSFRfTUlOOwoKICAgIC8qICBDT05UUkFT VCAgKi8KICAgIGlmICggaW9jdGwoIGMtPnRmZCwgQlQ4NDhfR0NPTlQsICZsYXJnICkgPCAw ICkgewogICAgICAgIERPX0lPQ1RMX0dFUlIoICJCVDg0OF9HQ09OVCIgKTsKICAgICAgICBy ZXR1cm4gRmFsc2U7CiAgICB9CiAgICBzLT5jb250cmFzdCA9ICgoZG91YmxlKWxhcmcgLSBD T05UUl9EUlZfTUlOKSAvIENPTlRSX0RSVl9SQU5HRSAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQ09OVFJfUkFOR0UgKyBDT05UUl9NSU47 CgogICAgLyogIENIUk9NQSBVIFNBVFVSQVRJT04gICovCiAgICBpZiAoIGlvY3RsKCBjLT50 ZmQsIEJUODQ4X0dVU0FULCAmbGFyZyApIDwgMCApIHsKICAgICAgICBET19JT0NUTF9HRVJS KCAiQlQ4NDhfR1VTQVQiICk7CiAgICAgICAgcmV0dXJuIEZhbHNlOwogICAgfQogICAgcy0+ c2F0X3UgPSAoKGRvdWJsZSlsYXJnIC0gU0FUVV9EUlZfTUlOKSAvIFNBVFVfRFJWX1JBTkdF IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBTQVRV X1JBTkdFICsgU0FUVV9NSU47CgogICAgLyogIENIUk9NQSBWIFNBVFVSQVRJT04gICovCiAg ICBpZiAoIGlvY3RsKCBjLT50ZmQsIEJUODQ4X0dWU0FULCAmbGFyZyApIDwgMCApIHsKICAg ICAgICBET19JT0NUTF9HRVJSKCAiQlQ4NDhfR1ZTQVQiICk7CiAgICAgICAgcmV0dXJuIEZh bHNlOwogICAgfQogICAgcy0+c2F0X3YgPSAoKGRvdWJsZSlsYXJnIC0gU0FUVl9EUlZfTUlO KSAvIFNBVFZfRFJWX1JBTkdFIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKiBTQVRWX1JBTkdFICsgU0FUVl9NSU47CgogICAgLyogIFRVTkVSIFRZ UEUgICovCiAgICBpZiAoIGlvY3RsKCBjLT50ZmQsIFRWVFVORVJfR0VUVFlQRSwgJmxhcmcg KSA8IDAgKSB7CiAgICAgICAgRE9fSU9DVExfR0VSUiggIlRWVFVORVJfR0VUVFlQRSIgKTsK ICAgICAgICByZXR1cm4gRmFsc2U7CiAgICB9CiAgICBzd2l0Y2ggKCBsYXJnICkgewogICAg ICAgIGNhc2UgQ0hOTFNFVF9OQUJDU1QgICA6IHMtPnR1bmVyX2ZyZXFfc2V0ID0gVFZfRlJF UV9TRVRfTkFCQ1NUICA7ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICBjYXNlIENITkxTRVRfQ0FCTEVJUkMgOiBzLT50dW5lcl9mcmVxX3NldCA9 IFRWX0ZSRVFfU0VUX0NBQkxFSVJDOyAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgY2FzZSBDSE5MU0VUX0NBQkxFSFJDIDogcy0+dHVuZXJfZnJl cV9zZXQgPSBUVl9GUkVRX1NFVF9DQUJMRUhSQzsgICAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIENITkxTRVRfV0VVUk9QRSAgOiBzLT50 dW5lcl9mcmVxX3NldCA9IFRWX0ZSRVFfU0VUX1dFVVJPUEUgOyAgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBDSE5MU0VUX0pQTkJDU1Qg IDogcy0+dHVuZXJfZnJlcV9zZXQgPSBUVl9GUkVRX1NFVF9KUE5CQ1NUIDsgIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQ0hOTFNFVF9K UE5DQUJMRSA6IHMtPnR1bmVyX2ZyZXFfc2V0ID0gVFZfRlJFUV9TRVRfSlBOQ0FCTEU7ICAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0 IDoKICAgICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAg ICJUVkNBUFRVUkVRdWVyeURyaXZlclN0YXRlKCk6IEJhZCBDSE5MU0VUICVkXG4iLCAKICAg ICAgICAgICAgICAgICAgICAgIGxhcmcgKTsKICAgICAgICAgICAgIHJldHVybiBGYWxzZTsK ICAgIH0KCiAgICAvKiAgRklYTUU6ICBUaGlzIGlzIGEgaGFjayBiZWNhdXNlIHdlIGNhbid0 IHF1ZXJ5IHRoaXMgaW5mbyAgKi8KICAgIC8qICAgIGZyb20gdGhlIGRyaXZlci4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgcy0+dHVuZXJfY2hhbl9h Y3RpdmUgPSBjLT50dW5lcl9jaGFuX2FjdGl2ZTsKCiAgICAvKiAgVFVORVIgQ0hBTk5FTCAg Ki8KICAgIGlmICggaW9jdGwoIGMtPnRmZCwgVFZUVU5FUl9HRVRDSE5MLCAmbGFyZyApIDwg MCApIHsKICAgICAgICBET19JT0NUTF9HRVJSKCAiVFZUVU5FUl9HRVRDSE5MIiApOwogICAg ICAgIHJldHVybiBGYWxzZTsKICAgIH0KICAgIHMtPnR1bmVyX2NoYW4gPSBsYXJnOwoKICAg IC8qICBUVU5FUiBGUkVRVUVOQ1kgICovCiAgICBpZiAoIGlvY3RsKCBjLT50ZmQsIFRWVFVO RVJfR0VURlJFUSwgJmxhcmcgKSA8IDAgKSB7CiAgICAgICAgRE9fSU9DVExfR0VSUiggIlRW VFVORVJfR0VURlJFUSIgKTsKICAgICAgICByZXR1cm4gRmFsc2U7CiAgICB9CiAgICBzLT50 dW5lcl9mcmVxID0gKGRvdWJsZSlsYXJnIC8gRlJFUUZBQ1RPUjsKCiAgICAvKiAgQVVESU8g TVVURSBBTkQgSU5QVVQgU1RBVEUgICovCiAgICBpZiAoIGlvY3RsKCBjLT50ZmQsIEJUODQ4 X0dBVURJTywgJmxhcmcgKSA8IDAgKSB7CiAgICAgICAgRE9fSU9DVExfR0VSUiggIkJUODQ4 X0dBVURJTyIgKTsKICAgICAgICByZXR1cm4gRmFsc2U7CiAgICB9CiAgICBzLT5hdWRpb19t dXRlID0gKGxhcmcgJiBBVURJT19NVVRFKSAhPSAwOwogICAgc3dpdGNoICggbGFyZyAmIH5B VURJT19NVVRFICkgewogICAgICAgIGRlZmF1bHQgICAgICAgICAgIDoKICAgICAgICBjYXNl IEFVRElPX1RVTkVSICA6IHMtPmF1ZGlvX2lucHV0X2RldiA9IFRWX0FVRElPX0lOUFVUX1RV TkVSIDsgIGJyZWFrOwogICAgICAgIGNhc2UgQVVESU9fRVhURVJOIDogcy0+YXVkaW9faW5w dXRfZGV2ID0gVFZfQVVESU9fSU5QVVRfRVhURVJOOyAgYnJlYWs7CiAgICAgICAgY2FzZSBB VURJT19JTlRFUk4gOiBzLT5hdWRpb19pbnB1dF9kZXYgPSBUVl9BVURJT19JTlBVVF9JTlRF Uk47ICBicmVhazsKICAgIH0KCiAgICByZXR1cm4gVHJ1ZTsKfQoKCnZvaWQgVFZDQVBUVVJF UXVlcnlQYXJhbUxpbWl0cyggVFZfQ0FQVFVSRSAqYywgVFZfRFJJVkVSX1BBUkFNIHAsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGxpbVsyXSApCnsKICAgIHN0 YXRpYyBzdHJ1Y3QgewogICAgICAgIFRWX0RSSVZFUl9QQVJBTSBwOwogICAgICAgIGRvdWJs ZSAgICAgICAgICBsaW1bMl07CiAgICB9IFNfcGFyYW1fbGltW10gPSB7CiAgICAgICAgeyBU Vl9QQVJBTV9IVUUgICAgICwgeyBIVUVfTUlOICAgLCBIVUVfTUFYICAgIH0gfSwKICAgICAg ICB7IFRWX1BBUkFNX0JSSUdIVCAgLCB7IEJSSUdIVF9NSU4sIEJSSUdIVF9NQVggfSB9LAog ICAgICAgIHsgVFZfUEFSQU1fQ09OVFJBU1QsIHsgQ09OVFJfTUlOICwgQ09OVFJfTUFYICB9 IH0sCiAgICAgICAgeyBUVl9QQVJBTV9TQVRVICAgICwgeyBTQVRVX01JTiAgLCBTQVRVX01B WCAgIH0gfSwKICAgICAgICB7IFRWX1BBUkFNX1NBVFYgICAgLCB7IFNBVFZfTUlOICAsIFNB VFZfTUFYICAgfSB9CiAgICB9OwoKICAgIFRWX0lOVDMyIGk7CgogICAgZm9yICggaSA9IDA7 IGkgPCBYdE51bWJlciggU19wYXJhbV9saW0gKTsgaSsrICkKICAgICAgICBpZiAoIFNfcGFy YW1fbGltW2ldLnAgPT0gcCApCiAgICAgICAgICAgIGJyZWFrOwoKICAgIGlmICggaSA+PSBY dE51bWJlciggU19wYXJhbV9saW0gKSApIHsKICAgICAgICBmcHJpbnRmKCBzdGRlcnIsIAog ICAgICAgICAgICAgICAiVFZDQVBUVVJFUXVlcnlQYXJhbUxpbWl0czogVW5zdXBwb3J0ZWQg ZHJpdmVyIHBhcmFtICglZCkiLCBwICk7CiAgICAgICAgZXhpdCgxKTsKICAgIH0KCiAgICBt ZW1jcHkoIGxpbSwgU19wYXJhbV9saW1baV0ubGltLCBzaXplb2YoIFNfcGFyYW1fbGltW2ld LmxpbSApICk7Cn0KCgovKipAQkVHSU5GVU5DKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBQcm90b3R5cGUgIDog dm9pZCBUVkNBUFRVUkVRdWVyeVBpeGVsRm9ybWF0cygKICAgICAgICAgICAgICAgICAgICAg IFRWX0NBUFRVUkUgICAgICpjLAogICAgICAgICAgICAgICAgICAgICAgVFZfUElYRUxfR0VP TSAqKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICBUVl9VSU5UMzIgICAgICAqbGlzdF9z aXplICkKCiAgICBQdXJwb3NlICAgIDogUXVlcnkgYWxsIHRoZSBzdXBwb3J0IFJHQiBwaXhl bCBmb3JtYXRzIGZyb20gdGhlIGNhcHR1cmUgCiAgICAgICAgICAgICAgICBkcml2ZXIgYW5k IHN0b3JlIHRoZW0gaW4gYSBsb2NhbCBsaXN0IGZvciBmYXN0IGFjY2Vzcy4KCiAgICBQcm9n cmFtbWVyIDogMjAtQXByLTk3ICBSYW5kYWxsIEhvcHBlcgoKICAgIFBhcmFtZXRlcnMgOiBj ICAgICAgICAgLSBJOiBjYXB0dXJlIGRlZmluaXRpb24gc3RydWN0dXJlCiAgICAgICAgICAg ICAgICAgbGlzdCAgICAgIC0gTzogYWxsb2NhdGVkL2ZpbGxlZCBpbiBsaXN0IG9mIHBpeGVs IGZvcm1hdHMKICAgICAgICAgICAgICAgICBsaXN0X3NpemUgLSBPOiByZXN1bHRpbmcgc2l6 ZSBvZiBsaXN0CgogICAgUmV0dXJucyAgICA6IE5vbmUuCgogICAgR2xvYmFscyAgICA6IE5v bmUuCgogKipARU5ERlVOQyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKdm9pZCBUVkNBUFRVUkVRdWVyeVBpeGVs Rm9ybWF0cyggVFZfQ0FQVFVSRSAgICAgKmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFRWX1BJWEVMX0dFT00gKipsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBUVl9VSU5UMzIgICAgICAqbGlzdF9zaXplICkKewogICAgLyogIEZJWE1FOiAg VGhpcyBiZWxvbmdzIGluIHRoZSBkcml2ZXIgd2hlcmUgd2UgY2FuIHF1ZXJ5IGl0IHVzaW5n ICAqLwogICAgLyogICAgdGhlIHBpeG1hcCBmb3JtYXRzIGludGVyZmFjZS4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgc3RhdGljIFRWX1BJWEVMX0dFT00gCiAg ICAgICAgWVVWX2g0MjJfdjExMSA9CiAgICAgICAgICAgICB7IC0xLFRWX1BJWEVMVFlQRV9Z VVYsMCx7fSwwLDAsCiAgICAgICAgICAgICAgIHs4LDgsOH0sezEsMiwyfSx7MSwxLDF9LFRW X0ZSQU1FX1BMQU5BUiwiWVVWIiwxLDEsMCB9LAogICAgICAgIFlVVl9oNDIyX3Y0MjIgPQog ICAgICAgICAgICAgeyAtMSxUVl9QSVhFTFRZUEVfWVVWLDAse30sMCwwLAogICAgICAgICAg ICAgICB7OCw4LDh9LHsxLDIsMn0sezEsMiwyfSxUVl9GUkFNRV9QTEFOQVIsIllVViIsMSwx LDAgfTsKCiAgICBzdHJ1Y3QgbWV0ZW9yX3BpeGZtdCBwZjsKICAgIFRWX1VJTlQzMiAgICAg ICAgICAgIGk7CiAgICBUVl9QSVhFTF9HRU9NICAgICAgICpwZzsKCiAgICAqbGlzdCAgICAg ID0gTlVMTDsKICAgICpsaXN0X3NpemUgPSAwOwoKICAgIGZvciAoIGkgPSAwOyA7IGkrKyAp IHsKICAgICAgICBwZi5pbmRleCA9IGk7CiAgICAgICAgaWYgKCBpb2N0bCggYy0+ZmQsIE1F VEVPUkdTVVBQSVhGTVQsICZwZiApIDwgMCApIHsKICAgICAgICAgICAgaWYgKCBlcnJubyA9 PSBFSU5WQUwgKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIERPX0lPQ1RM X0dFUlIoICJNRVRFT1JHU1VQUElYRk1UIiApOwogICAgICAgIH0KCiAgICAgICAgLyogIEV4 cGFuZCBsaXN0ICAqLwogICAgICAgICgqbGlzdF9zaXplKSsrOwogICAgICAgICpsaXN0ID0g cmVhbGxvYyggKmxpc3QsICpsaXN0X3NpemUgKiBzaXplb2YoICgqbGlzdClbMF0gKSApOwog ICAgICAgIGlmICggKmxpc3QgPT0gTlVMTCApCiAgICAgICAgICAgIFRWVVRJTE91dE9mTWVt b3J5KCk7CgogICAgICAgIC8qICBTdG9yZSBuZXcgcmVjb3JkICAqLwogICAgICAgIHBnID0g JigqbGlzdClbICpsaXN0X3NpemUgLSAxIF07CiAgICAgICAgbWVtc2V0KCBwZywgJ1wwJywg c2l6ZW9mKCAqcGcgKSApOwoKICAgICAgICBpZiAoIHBmLnR5cGUgPT0gTUVURU9SX1BJWFRZ UEVfUkdCICkgewogICAgICAgICAgICBwZy0+dHlwZSAgICAgICAgPSBUVl9QSVhFTFRZUEVf UkdCOwogICAgICAgICAgICBwZy0+QnBwICAgICAgICAgPSBwZi5CcHA7CiAgICAgICAgICAg IHBnLT5tYXNrWzBdICAgICA9IHBmLm1hc2tzWzBdOwogICAgICAgICAgICBwZy0+bWFza1sx XSAgICAgPSBwZi5tYXNrc1sxXTsKICAgICAgICAgICAgcGctPm1hc2tbMl0gICAgID0gcGYu bWFza3NbMl07CiAgICAgICAgICAgIHBnLT5zd2FwX2J5dGVzICA9IHBmLnN3YXBfYnl0ZXM7 CiAgICAgICAgICAgIHBnLT5zd2FwX3Nob3J0cyA9IHBmLnN3YXBfc2hvcnRzOwogICAgICAg IH0KCiAgICAgICAgLyogIEZJWE1FOiAgVGhlc2Ugc2hvdWxkIGJlIHBhcmFtZXRlcml6ZWQg c3VidHlwZXMgb2YgWVVWIGluICAqLwogICAgICAgIC8qICAgIHRoZSBkcml2ZXIsIG5vdCBz ZXBhcmF0ZSB0eXBlcy4gIFRoaXMgd291bGQgZWxpbWluYXRlICAgKi8KICAgICAgICAvKiAg ICBjb25mdXNpb24gZHVlIHRvIHRoZXNlIGxlZ2FjeSBuYW1lcywgYW5kIG1ha2UgdXMgICAg ICAgICovCiAgICAgICAgLyogICAgbW9yZSBpbmRlcGVuZGVudCBvZiB0aGUgY2FwYWJpbGl0 aWVzIG9mIHRoZSBkcml2ZXIuICAgICAqLwogICAgICAgIC8qICBGSVhNRTogIEV4dGVuZCB0 aGUgZHJpdmVyIGludGVyZmFjZSB0byBwYXNzIHVzIHRoZXNlIFlVViAgKi8KICAgICAgICAv KiAgICAgICAgICBwYXJtcyBmb3IgZWFjaCBZVVYgc3VidHlwZSAgICAgICAgICAgICAgICAg ICAgICAgICovCiAgICAgICAgZWxzZSBpZiAoKCBwZi50eXBlID09IE1FVEVPUl9QSVhUWVBF X1lVViAgICAgICAgKSB8fAogICAgICAgICAgICAgICAgICggcGYudHlwZSA9PSBNRVRFT1Jf UElYVFlQRV9ZVVZfUEFDS0VEICkgfHwKICAgICAgICAgICAgICAgICAoIHBmLnR5cGUgPT0g TUVURU9SX1BJWFRZUEVfWVVWXzEyICAgICApKSB7CgogICAgICAgICAgICBwZy0+dHlwZSA9 IFRWX1BJWEVMVFlQRV9ZVVY7CgogICAgICAgICAgICBzd2l0Y2ggKCBwZi50eXBlICkgewoK ICAgICAgICAgICAgICAgIGNhc2UgTUVURU9SX1BJWFRZUEVfWVVWICAgICAgICA6CiAgICAg ICAgICAgICAgICAgICAgbWVtY3B5KCBwZywgJllVVl9oNDIyX3YxMTEsIHNpemVvZigqcGcp ICk7CiAgICAgICAgICAgICAgICAgICAgcGctPmZyYW1lX3BhY2tpbmcgPSBUVl9GUkFNRV9Q TEFOQVI7CiAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCBwZy0+Y29tcF9vcmRlciwgIllV ViIgKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNl IE1FVEVPUl9QSVhUWVBFX1lVVl9QQUNLRUQgOiAgICAvKiAgNENDIENvZGU6IFlVWTIgICov CiAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCBwZywgJllVVl9oNDIyX3YxMTEsIHNpemVv ZigqcGcpICk7CiAgICAgICAgICAgICAgICAgICAgcGctPmZyYW1lX3BhY2tpbmcgPSBUVl9G UkFNRV9QQUNLRUQ7CiAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCBwZy0+Y29tcF9vcmRl ciwgIllVWVYiICk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgICAgIGNhc2UgTUVURU9SX1BJWFRZUEVfWVVWXzEyICAgICA6ICAg IC8qICA0Q0MgQ29kZTogSVlVVi9JNDIwICAqLwogICAgICAgICAgICAgICAgICAgIG1lbWNw eSggcGcsICZZVVZfaDQyMl92NDIyLCBzaXplb2YoKnBnKSApOwogICAgICAgICAgICAgICAg ICAgIHBnLT5mcmFtZV9wYWNraW5nID0gVFZfRlJBTUVfUExBTkFSOwogICAgICAgICAgICAg ICAgICAgIHN0cmNweSggcGctPmNvbXBfb3JkZXIsICJZVVYiICk7CiAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAg ICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlVuc3VwcG9ydGVkIHBpeGVsIHR5cGU6ICVk XG4iLCBwZy0+dHlwZSApOwogICAgICAgICAgICBleGl0KDEpOwogICAgICAgIH0KCiAgICAg ICAgcGctPmluZGV4ICAgICAgID0gcGYuaW5kZXg7CiAgICB9Cn0KCi8qKkBCRUdJTkZVTkMq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgoKICAgIFByb3RvdHlwZSAgOiB2b2lkIFRWQ0FQVFVSRUdldE51bVBpeEZtdHMo CiAgICAgICAgICAgICAgICAgICAgICBUVl9DQVBUVVJFICpjLAogICAgICAgICAgICAgICAg ICAgICAgVFZfVUlOVDMyICpudW0gKQoKICAgIFByb3RvdHlwZSAgOiB2b2lkIFRWQ0FQVFVS RUdldE50aFBpeEZtdCAoCiAgICAgICAgICAgICAgICAgICAgICBUVl9DQVBUVVJFICpjLAog ICAgICAgICAgICAgICAgICAgICAgVFZfVUlOVDMyIGluZGV4LAogICAgICAgICAgICAgICAg ICAgICAgVFZfUElYRUxfR0VPTSAqZ2VvbSApCiAgICAgICAgICAgICAgICAgICAgICAKICAg IFByb3RvdHlwZSAgOiB2b2lkIFRWQ0FQVFVSRUdldFBpeEZtdEJ5RHJpdmVySGFuZGxlKAog ICAgICAgICAgICAgICAgICAgICAgVFZfQ0FQVFVSRSAqYywKICAgICAgICAgICAgICAgICAg ICAgIFRWX1VJTlQzMiBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICBUVl9JTlQzMiAq aW5kZXggKQoKICAgIFByb3RvdHlwZSAgOiB2b2lkIFRWQ0FQVFVSRUdldFBpeEZtdEJ5UGl4 R2VvbSgKICAgICAgICAgICAgICAgICAgICAgIFRWX0NBUFRVUkUgKmMsCiAgICAgICAgICAg ICAgICAgICAgICBUVl9QSVhFTF9HRU9NICpnZW9tLAogICAgICAgICAgICAgICAgICAgICAg VFZfSU5UMzIgKmluZGV4ICkKCiAgICBQdXJwb3NlICAgIDogUXVlcnkgQVBJIGZvciB0aGUg cGl4ZWwgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgb3V0IGNhcHR1cmUKICAgICAgICAgICAgICAg ICBkZXZpY2UuCgogICAgUHJvZ3JhbW1lciA6IDIwLUFwci05NyAgUmFuZGFsbCBIb3BwZXIK CiAgICBQYXJhbWV0ZXJzIDogYyAgICAgIC0gSTogY2FwdHVyZSBzdHJ1Y3QKICAgICAgICAg ICAgICAgICBudW0gICAgLSBPOiBudW0gcGl4ZWwgZm9ybWF0cwogICAgICAgICAgICAgICAg IGluZGV4ICAtIEk6IGluZGV4IGludG8gcGl4ZWwgZm9ybWF0cyBsaXN0CiAgICAgICAgICAg ICAgICAgaGFuZGxlIC0gSTogZHJpdmVyIGhhbmRsZSBmb3IgcGl4ZWwgZm9ybWF0CiAgICAg ICAgICAgICAgICAgZ2VvbSAgIC0gTzogbnRoIHBpeGVsIGZvcm1hdCBkZWZpbml0aW9uCgog ICAgUmV0dXJucyAgICA6IE5vbmUuCgogICAgR2xvYmFscyAgICA6IE5vbmUuCgogKipARU5E RlVOQyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwoKdm9pZCBUVkNBUFRVUkVHZXROdW1QaXhGbXRzKCBUVl9DQVBU VVJFICpjLCBUVl9VSU5UMzIgKm51bSApCnsKICAgICpudW0gPSBjLT5waXhfZ2VvbV9saXN0 X2xlbjsKfQoKdm9pZCBUVkNBUFRVUkVHZXROdGhQaXhGbXQgKCBUVl9DQVBUVVJFICpjLCBU Vl9VSU5UMzIgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZfUElYRUxf R0VPTSAqZ2VvbSApCnsKICAgIGlmICggaW5kZXggPj0gYy0+cGl4X2dlb21fbGlzdF9sZW4g KSB7CiAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiVFZDQVBUVVJFR2V0TnRoUGl4Rm10OiBJ bmRleCBvdXQgb2YgcmFuZ2VcbiIgKTsKICAgICAgICBleGl0KDEpOwogICAgfQogICAgKmdl b20gPSBjLT5waXhfZ2VvbV9saXN0WyBpbmRleCBdOwp9Cgp2b2lkIFRWQ0FQVFVSRUdldFBp eEZtdEJ5RHJpdmVySGFuZGxlKCBUVl9DQVBUVVJFICpjLCBUVl9VSU5UMzIgaGFuZGxlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVl9JTlQzMiAqaW5kZXgg KQp7CiAgICBUVl9VSU5UMzIgaTsKCiAgICBmb3IgKCBpID0gMDsgaSA8IGMtPnBpeF9nZW9t X2xpc3RfbGVuOyBpKysgKQogICAgICAgIGlmICggaGFuZGxlID09IGMtPnBpeF9nZW9tX2xp c3RbaV0uaW5kZXggKQogICAgICAgICAgICBicmVhazsKICAgIAogICAgKmluZGV4ID0gKCBp ID49IGMtPnBpeF9nZW9tX2xpc3RfbGVuICkgPyAtMSA6IGk7Cn0KCnN0YXRpYyBUVl9CT09M IFRWQ0FQVFVSRU1hc2tJc2FCeXRlICggVFZfVUlOVDMyIG1hc2sgKQp7CiAgICBUVl9CT09M ICBpc2FfYnl0ZSA9IEZBTFNFOwogICAgVFZfSU5UMzIgaTsKCiAgICBmb3IgKCBpID0gMDsg aSA8IHNpemVvZiggbWFzayApOyBpKyssIG1hc2sgPj49IDggKQogICAgICAgIGlmICggbWFz ayAmIDB4ZmYgKSB7CiAgICAgICAgICAgIGlmICgoIChtYXNrICYgMHhmZikgPT0gMHhmZiAp ICYmICggKG1hc2sgPj4gOCkgPT0gMCApKQogICAgICAgICAgICAgICAgaXNhX2J5dGUgPSBU UlVFOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICByZXR1cm4gaXNhX2J5dGU7 Cn0KCgp2b2lkIFRWQ0FQVFVSRUdldFBpeEZtdEJ5UGl4R2VvbSggVFZfQ0FQVFVSRSAqYywg VFZfUElYRUxfR0VPTSAqZ2VvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFRWX0lOVDMyICppbmRleCApCnsKICAgIHN0YXRpYyAgICBUVl9CT09MIFNfcmVjdXJzaXZl X2xvY2sgPSBGQUxTRTsKICAgIFRWX1VJTlQzMiBpOwoKICAgIGZvciAoIGkgPSAwOyBpIDwg Yy0+cGl4X2dlb21fbGlzdF9sZW47IGkrKyApCiAgICAgICAgaWYgKCggZ2VvbS0+dHlwZSA9 PSBjLT5waXhfZ2VvbV9saXN0W2ldLnR5cGUgKSAmJgogICAgICAgICAgICAoIGdlb20tPkJw cCAgPT0gYy0+cGl4X2dlb21fbGlzdFtpXS5CcHAgICkgJiYKICAgICAgICAgICAgIW1lbWNt cCggZ2VvbS0+bWFzaywgYy0+cGl4X2dlb21fbGlzdFtpXS5tYXNrLAogICAgICAgICAgICAg ICAgICAgICBzaXplb2YoIGdlb20tPm1hc2sgKSApICYmCiAgICAgICAgICAgICggZ2VvbS0+ c3dhcF9ieXRlcyA9PSBjLT5waXhfZ2VvbV9saXN0W2ldLnN3YXBfYnl0ZXMgICApICYmCiAg ICAgICAgICAgICggZ2VvbS0+c3dhcF9zaG9ydHMgPT0gYy0+cGl4X2dlb21fbGlzdFtpXS5z d2FwX3Nob3J0cyApKQogICAgICAgICAgICBicmVhazsKCiAgICAvKiAgSGFuZGxlIGEgZmV3 IG9mIHRoZSBzdHJhbmdlIGJ5dGUtc3dhcHBlZCBjb21iaW5hdGlvbnMgZm9yICAqLwogICAg LyogICAgMyBhbmQgNCBicHAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKi8KICAgIC8qICAgIFRoaXMgbGV0cyB1cyBkZWFsIHdpdGggdmlzdWFscyB0 aGF0IHJldHVybiBtYXNrcyBsaWtlICAgICovCiAgICAvKiAgICB0aGUgTWFjaDY0IHdoaWNo IGlzIFJHQkEgZnJhbWUgYnVmZmVyICh3aXRoIHBpeG1hcCAgICAgICAqLwogICAgLyogICAg ZGVwdGggb2YgMzIgd2l0aCB2aXN1YWwgbWFza3Mgb2YgZmYsZmYwMCxmZjAwMDApICAgICAg ICAgKi8KICAgIGlmICggKCBpID49IGMtPnBpeF9nZW9tX2xpc3RfbGVuICkgJiYKICAgICAg ICAgKCggZ2VvbS0+QnBwID09IDMgKSB8fCAoIGdlb20tPkJwcCA9PSA0ICkpICYmCiAgICAg ICAgIFRWQ0FQVFVSRU1hc2tJc2FCeXRlKCBnZW9tLT5tYXNrWzBdICkgJiYKICAgICAgICAg VFZDQVBUVVJFTWFza0lzYUJ5dGUoIGdlb20tPm1hc2tbMV0gKSAmJgogICAgICAgICBUVkNB UFRVUkVNYXNrSXNhQnl0ZSggZ2VvbS0+bWFza1syXSApICkgewoKICAgICAgICBUVl9QSVhF TF9HRU9NIGcgPSAqZ2VvbTsKCiAgICAgICAgZy5tYXNrWzBdID0gZ2VvbS0+bWFza1syXSwK ICAgICAgICBnLm1hc2tbMl0gPSBnZW9tLT5tYXNrWzBdOwogICAgICAgIGcuc3dhcF9ieXRl cyA9ICFnLnN3YXBfYnl0ZXM7CiAgICAgICAgaWYgKCBnLkJwcCA9PSA0ICkKICAgICAgICAg ICAgZy5zd2FwX3Nob3J0cyA9ICFnLnN3YXBfc2hvcnRzOwogICAgfQogICAgCiAgICAqaW5k ZXggPSAoIGkgPj0gYy0+cGl4X2dlb21fbGlzdF9sZW4gKSA/IC0xIDogaTsKfQoKCnZvaWQg VFZDQVBUVVJFUHJpbnRQaXhlbEZvcm1hdHMoIFRWX0NBUFRVUkUgKmMgKQp7CiAgICBUVl9J TlQzMiAgICAgICBpLAogICAgICAgICAgICAgICAgICAgaiwKICAgICAgICAgICAgICAgICAg IGJwcCwKICAgICAgICAgICAgICAgICAgIHN3YXA7CiAgICBUVl9VSU5UMzIgICAgICBtYXNr OwogICAgVFZfUElYRUxfR0VPTSAqcGc7CgogICAgLyogIER1bXAgY2FwdHVyZSBwaXhlbCBm b3JtYXRzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgICovCgoKICAgIC8qICBQUklOVCBSR0Ig Rk9STUFUUyAgKi8KICAgIFNVUFJJTlRGKCggIlxuU3VwcG9ydGVkIFJHQiBDYXB0dXJlIFBp eGVsIEZvcm1hdHM6XG4iCiAgICAgICAiICAgYnBwICBCcHAgIFJHQiBNYXNrcyAgICAgICAg ICAgICAgICAgICAgIFN3YXBcbiIKICAgICAgICIgICAtLS0gIC0tLSAgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSAgLS0tLVxuIiApKTsKCiAgICBmb3IgKCBpID0gMDsgaSA8IGMt PnBpeF9nZW9tX2xpc3RfbGVuOyBpKysgKSB7CiAgICAgICAgY2hhciAgICAgICAgICBzd2Fw X2NoYXJzWzVdOwogICAgICAgIFRWX0lOVDMyICAgICAgajsKICAgICAgICBUVl9QSVhFTF9H RU9NIHNjcmF0Y2g7CiAgICAgICAgVFZfQk9PTCAgICAgICBwcmludGl0ID0gVFJVRTsKCiAg ICAgICAgcGcgPSAmYy0+cGl4X2dlb21fbGlzdFsgaSBdOwoKICAgICAgICBpZiAoIHBnLT50 eXBlICE9IFRWX1BJWEVMVFlQRV9SR0IgKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAg ICAKICAgICAgICAvKiAgQnJvd3NlIGxpc3QgYW5kIHNlZSBpZiB3ZSd2ZSBnb3Qgb3RoZXIg cGl4ZWwgZm9ybWF0cyAgICAgICAgICAgKi8KICAgICAgICAvKiAgICB3aXRoIHRoZSBzYW1l IHR5cGUvQnBwL21hc2sgYnV0IGRpZmZlcmVudCBzd2FwIHBlcm11dGF0aW9ucyAgKi8KICAg ICAgICBtZW1zZXQoIHN3YXBfY2hhcnMsICcgJywgc2l6ZW9mKCBzd2FwX2NoYXJzICkgKTsK ICAgICAgICBzd2FwX2NoYXJzWzRdID0gJ1wwJzsKCiAgICAgICAgZm9yICggc3dhcCA9IDA7 IHN3YXAgPCA0OyBzd2FwKysgKSB7CiAgICAgICAgICAgIHNjcmF0Y2ggICAgICAgICAgICAg PSAqcGc7CiAgICAgICAgICAgIHNjcmF0Y2guc3dhcF9ieXRlcyAgPSAoc3dhcCAmIDB4MDEp ICE9IDA7CiAgICAgICAgICAgIHNjcmF0Y2guc3dhcF9zaG9ydHMgPSAoc3dhcCAmIDB4MDIp ICE9IDA7CgogICAgICAgICAgICBUVkNBUFRVUkVHZXRQaXhGbXRCeVBpeEdlb20oIGMsICZz Y3JhdGNoLCAmaiApOwogICAgICAgICAgICBpZiAoIGogPCAwICkKICAgICAgICAgICAgICAg IGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoIGogPCBpICkgewogICAgICAgICAgICAgICAg cHJpbnRpdCA9IEZBTFNFOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0K ICAgICAgICAgICAgc3dhcF9jaGFyc1sgc3dhcCBdID0gIk5CV2IiWyBzd2FwIF07CiAgICAg ICAgfQogICAgICAgIGlmICggIXByaW50aXQgKQogICAgICAgICAgICBjb250aW51ZTsKCiAg ICAgICAgLyogIENhbGN1bGF0ZSBicHAgZnJvbSBtYXNrcyAgKi8KICAgICAgICBtYXNrID0g cGctPm1hc2tbMF0gfCBwZy0+bWFza1sxXSB8IHBnLT5tYXNrWzJdOwogICAgICAgIGJwcCAg PSAwOwogICAgICAgIHdoaWxlICggbWFzayAhPSAwICkgewogICAgICAgICAgICBpZiAoIG1h c2sgJiAweDAxICkKICAgICAgICAgICAgICAgIGJwcCsrOwogICAgICAgICAgICBtYXNrID4+ PSAxOwogICAgICAgIH0KCiAgICAgICAgU1VQUklOVEYoKCAKICAgICAgICAgICAgIiAgICAl MmQgICUyZCAgICUuOHgsICUuOHgsICUuOHggICVzXG4iLAogICAgICAgICAgICBicHAsIHBn LT5CcHAsIHBnLT5tYXNrWzBdLCBwZy0+bWFza1sxXSwgcGctPm1hc2tbMl0sIAogICAgICAg ICAgICBzd2FwX2NoYXJzICkpOwogICAgfQoKICAgIC8qICBQUklOVCBZVVYgRk9STUFUUyAg Ki8KICAgIFNVUFJJTlRGKCggIlxuU3VwcG9ydGVkIFlVViBDYXB0dXJlIFBpeGVsIEZvcm1h dHM6XG4iCiAgICAgICAiICAgWVVWU2l6ZSAgSFNhbXAgIFZTYW1wICBQYWNrICAgIENvbXBP cmRlciAgVC0+QiAgTC0+UiAgWVRyYW5zXG4iCiAgICAgICAiICAgLS0tLS0tLSAgLS0tLS0g IC0tLS0tICAtLS0tLS0gIC0tLS0tLS0tLSAgLS0tLSAgLS0tLSAgLS0tLS0tXG4iICkpOwoK ICAgIGZvciAoIGkgPSAwOyBpIDwgYy0+cGl4X2dlb21fbGlzdF9sZW47IGkrKyApIHsKICAg ICAgICBjaGFyICAgICAgICAgIHN3YXBfY2hhcnNbNV07CiAgICAgICAgVFZfSU5UMzIgICAg ICBqOwogICAgICAgIFRWX1BJWEVMX0dFT00gc2NyYXRjaDsKICAgICAgICBUVl9CT09MICAg ICAgIHByaW50aXQgPSBUUlVFOwoKICAgICAgICBwZyA9ICZjLT5waXhfZ2VvbV9saXN0WyBp IF07CgogICAgICAgIGlmICggcGctPnR5cGUgIT0gVFZfUElYRUxUWVBFX1lVViApCiAgICAg ICAgICAgIGNvbnRpbnVlOwogICAgICAgIAogICAgICAgIFNVUFJJTlRGKCggCiAgICAgICAg ICAiICAgICVkLCVkLCVkICAgJWQsJWQsJWQgICVkLCVkLCVkICAlLTdzICUtMTBzICAlLTVz ICUtNnMgJXNcbiIsCiAgICAgICAgICBwZy0+c2FtcF9zaXplIFswXSwgcGctPnNhbXBfc2l6 ZSBbMV0sIHBnLT5zYW1wX3NpemUgWzJdLAogICAgICAgICAgcGctPnNhbXBfaW50X2hbMF0s IHBnLT5zYW1wX2ludF9oWzFdLCBwZy0+c2FtcF9pbnRfaFsyXSwKICAgICAgICAgIHBnLT5z YW1wX2ludF92WzBdLCBwZy0+c2FtcF9pbnRfdlsxXSwgcGctPnNhbXBfaW50X3ZbMl0sCiAg ICAgICAgICAocGctPmZyYW1lX3BhY2tpbmcgPT0gVFZfRlJBTUVfUExBTkFSID8gIlBMQU5B UiIgOiAiUEFDS0VEIiksCiAgICAgICAgICBwZy0+Y29tcF9vcmRlciwgCiAgICAgICAgICAo cGctPm9yZGVyX3RfdG9fYiA/ICJZIiA6ICJOIiksIChwZy0+b3JkZXJfbF90b19yID8gIlki IDogIk4iKSwKICAgICAgICAgIChwZy0+eV90cmFucyA/ICJZIiA6ICJOIikgKSk7CiAgICB9 CgogICAgU1VQUklOVEYoKCAiXG4iICkpOwp9CgoKLyoqQEJFR0lORlVOQyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgog ICAgUHJvdG90eXBlICA6IHN0YXRpYyB2b2lkIFRWQ0FQVFVSRUR1bXBDYXB0dXJlQ2FyZElu Zm8oCiAgICAgICAgICAgICAgICAgICAgICBUVl9DQVBUVVJFICpjICkKCiAgICBQdXJwb3Nl ICAgIDogRHVtcCB1c2VmdWwgaW5mbyBhYm91dCB0aGUgY2FwdHVyZSBjYXJkIHRoYXQgY2Fu IGJlCiAgICAgICAgICAgICAgICAgdXNlZCBieSBkZXZlbG9wZXJzIGZvciBkZWJ1Z2dpbmcu CgogICAgUHJvZ3JhbW1lciA6IDA5LU1hci05OCAgUmFuZGFsbCBIb3BwZXIKCiAgICBQYXJh bWV0ZXJzIDogYyAtIEk6IGNhcHR1cmUgZGVmaW5pdGlvbiBzdHJ1Y3QgCiAgICAgICAgICAg ICAgICAgICAgICAgICh3aXRoIG9wZW4gaGFuZGxlcyB0byB0dW5lciBhbmQgY2FwdHVyZSBk ZXZpY2VzKQoKICAgIFJldHVybnMgICAgOiBOb25lLgoKICAgIEdsb2JhbHMgICAgOiBOb25l LgoKICoqQEVOREZVTkMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KCnN0YXRpYyB2b2lkIFRWQ0FQVFVSRUR1bXBD YXB0dXJlQ2FyZEluZm8oIFRWX0NBUFRVUkUgKmMgKQp7CiAgICBzdHJ1Y3QgZWVQcm9tICAg ZWVwcm9tOwogICAgdV9jaGFyICAgICAgICAgKnA7CiAgICBpbnQgICAgICAgICAgICAgeDsK ICAgIGludCAgICAgICAgICAgICBjbnQ7CiAgICBUVl9JTlQzMiAgICAgICAgZWVwcm9tX3Np emU7CiAgICBGSUxFICAgICAgICAgICAqZnA7CiAgICBjaGFyICAgICAgICAgICAgbGluZWJ1 ZlsxMjhdOwoKICAgIC8qICBHcmFiIHRoZSBwZXJ0aW5lbnQgZG1lc2cgb3V0cHV0ICAqLwog ICAgcHJpbnRmKCAiREVURUNURUQgQ0FQVFVSRSBDQVJEKFMpIFtEUklWRVIgUFJPQkVTXTpc biIgKTsKICAgIGlmICggKGZwID0gcG9wZW4oICJkbWVzZyIsICJyIiApKSA9PSBOVUxMICkK ICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICIgICAgRmFpbGVkIHRvIGR1bXAgZG1lc2cgb3V0 cHV0LlxuIiApOwogICAgZWxzZSB7CiAgICAgICAgLyogIEZJWE1FOiAgUGFyc2luZyBib290 LXVwcyBpcyBCQUQuICBNYWtlIHRoZSBkcml2ZXIgcmV0dXJuIHRoaXMgICovCiAgICAgICAg LyogICAgICAgICAgdmlhIGlvY3RsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovCiAgICAgICAgd2hpbGUgKCAhZmVvZihmcCkgKSB7CiAgICAgICAg ICAgIGlmICggZmdldHMoIGxpbmVidWYsIHNpemVvZihsaW5lYnVmKS0xLCBmcCApID09IE5V TEwgKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGlmICggc3RybmNtcCgg bGluZWJ1ZiwgImJrdHIiLCA0ICkgPT0gMCApIHsKICAgICAgICAgICAgICAgIHByaW50Zigg IiAgICAlcyIsIGxpbmVidWYgKTsKICAgICAgICAgICAgICAgIGlmICggZmdldHMoIGxpbmVi dWYsIHNpemVvZihsaW5lYnVmKS0xLCBmcCkgIT0gTlVMTCApCiAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKCAiICAgICVzIiwgbGluZWJ1ZiApOwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICAgIHBjbG9zZShmcCk7CiAgICB9CgogICAgLyogIER1bXAgdGhlIHJlbGV2ZW50 IGJrdHIgZHJpdmVyIHN5c2N0bCB2YWx1ZXMgKGlmIHByZXNlbnQpICAqLwogICAgcHJpbnRm KCAiXG5TWVNDVEwgTUlCIFZBTFVFUzpcbiIgKTsKICAgIGlmICggKGZwID0gcG9wZW4oICJz eXNjdGwga2Vybi52ZXJzaW9uIGh3LmJ0ODQ4IiwgInIiICkpID09IE5VTEwgKQogICAgICAg IGZwcmludGYoIHN0ZGVyciwgIiAgICBGYWlsZWQgdG8gZHVtcCBzeXNjdGwgb3V0cHV0Llxu IiApOwogICAgZWxzZSB7CiAgICAgICAgd2hpbGUgKCAhZmVvZihmcCkgKSB7CiAgICAgICAg ICAgIGlmICggZmdldHMoIGxpbmVidWYsIHNpemVvZihsaW5lYnVmKS0xLCBmcCApID09IE5V TEwgKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHByaW50ZiggIiAgICAl cyIsIGxpbmVidWYgKTsKICAgICAgICB9CiAgICAgICAgcGNsb3NlKGZwKTsKICAgIH0KICAg IAoKICAgIC8qICBSZWFkIHRoZSBjYXJkIHNpZ25hdHVyZSAgKi8KICAgIGVlcHJvbS5vZmZz ZXQgPSAweDAxOwogICAgZWVwcm9tLmNvdW50ICA9IDEyODsKCiAgICBpZiAoIGlvY3RsKCBj LT50ZmQsIEJUODQ4X1NJR05BVFVSRSwgJmVlcHJvbSApIDwgMCApCiAgICAgICAgRE9fSU9D VExfR0VSUiggIkJUODQ4X1NJR05BVFVSRSIgKTsKICAgIGVsc2UgewogICAgICAgIHByaW50 ZiggIlxuVFVORVIgU0lHTkFUVVJFICgweCUwMnggLSAweCUwMngpOlxuIiwKICAgICAgICAg ICAgICAgIGVlcHJvbS5vZmZzZXQsCiAgICAgICAgICAgICAgICAoMiAqICgoZWVwcm9tLm9m ZnNldCAtIDEpICsgZWVwcm9tLmNvdW50KSkgLSAxICk7CiAgICAgICAgZm9yICggcCA9ICZl ZXByb20uYnl0ZXNbIDAgXSwgeCA9IDA7IHggPCAxNjsgKyt4ICkgewogICAgICAgICAgICBp ZiAoICh4ICUgMTYpID09IDAgKQogICAgICAgICAgICAgICAgcHJpbnRmKCAiJXMgICAiLCAo KHggPiAwKSA/ICJcbiIgOiAiIikgKTsKICAgICAgICAgICAgcHJpbnRmKCAiICUwMngiLCBw WyB4IF0gKTsKICAgICAgICB9CiAgICAgICAgcHJpbnRmKCAiXG4iICk7CiAgICAKICAgICAg ICBwcmludGYoICJcblRVTkVSIEkyQyBERVZJQ0VTIEZPVU5EIEFUOlxuICAgIiApOwogICAg ICAgIGNudCA9IDA7CiAgICAgICAgZm9yICggcCA9ICZlZXByb20uYnl0ZXNbIDAgXSwgeCA9 IDA7IHggPCAxMjg7ICsreCApCiAgICAgICAgICAgIGlmICggcFsgeCAvIDggXSAmICgxIDw8 ICh4ICUgOCkpICkgewogICAgICAgICAgICAgICAgcHJpbnRmKCAiJXMgMHglMDJ4IiwgKChj bnQgPiAwKSA/ICIsIiA6ICIiKSwgeCAqIDIgKTsKICAgICAgICAgICAgICAgIGNudCsrOwog ICAgICAgICAgICB9CiAgICAgICAgcHJpbnRmKCAiXG4iICk7CiAgICB9CgogICAgLyogIFJl YWQgdGhlIEVFUFJPTSAgKi8KICAgIC8qICAgIEZJWE1FOiAgVGhlcmUncyBubyB3YXkgdG8g cXVlcnkgdGhlIHNpemUgb2YgdGhlIEVFUFJPTSBmcm9tIHRoZSAgICovCiAgICAvKiAgICBh cHAsIGFuZCB0aGUgZHJpdmVyIGJhaWxzIGlmIHRoZSByZXF1ZXN0IGlzIHRvbyBiaWcuICBN b2RpZnkgdGhlICAqLwogICAgLyogICAgZHJpdmVyIHRvIHJldHVybiB0aGUgRUVQUk9NIHNp emUuICBGb3Igbm93LCB1c2UgYSBoZXVyaXN0aWMuICAgICAgKi8KICAgIGVlcHJvbS5vZmZz ZXQgPSAwOwogICAgZWVwcm9tLmNvdW50ICA9IDI1NjsKICAgIGlmICggaW9jdGwoIGMtPnRm ZCwgQlQ4NDhfUkVFUFJPTSwgJmVlcHJvbSApIDwgMCApIHsKICAgICAgICBlZXByb20uY291 bnQgPSAxMjg7CiAgICAgICAgaWYgKCBpb2N0bCggYy0+dGZkLCBCVDg0OF9SRUVQUk9NLCAm ZWVwcm9tICkgPCAwICkgewogICAgICAgICAgICBlZXByb20uY291bnQgPSAwOwogICAgICAg ICAgICBET19JT0NUTF9HRVJSKCAiQlQ4NDhfUkVFUFJPTSIgKTsKICAgICAgICB9CiAgICB9 CiAgICBwcmludGYoICJcbkNBUFRVUkUgQ0FSRCBFRVBST00gQ09OVEVOVFM6XG4iCiAgICAg ICAgICAgICIgICBSZWFkICVkIEVFUFJPTSBieXRlcyAiLCBlZXByb20uY291bnQgKTsKICAg IGlmICggZWVwcm9tLmNvdW50ID09IDAgKQogICAgICAgIHByaW50ZiggIlxuIiApOwogICAg ZWxzZSB7CiAgICAgICAgcHJpbnRmKCAiKDB4MDAgLSAweCUuMngpXG4iLCBlZXByb20uY291 bnQtMSApOwoKICAgICAgICBmb3IgKCBwID0gJmVlcHJvbS5ieXRlc1sgMCBdLCB4ID0gMDsg eCA8IGVlcHJvbS5jb3VudDsgKyt4ICkgewogICAgICAgICAgICBpZiAoICh4ICUgMTYpID09 IDAgKQogICAgICAgICAgICAgICAgcHJpbnRmKCAiJXMgICAiLCAoKHggPiAwKSA/ICJcbiIg OiAiIikgKTsKICAgICAgICAgICAgcHJpbnRmKCAiICUwMngiLCBwWyB4IF0gKTsKICAgICAg ICB9CiAgICAgICAgcHJpbnRmKCAiXG4iICk7CiAgICB9CgogICAgLyogIEl0J2QgYWxzbyBi ZSBoZWxwZnVsIHRvIGJlIGFibGUgdG8gcHJpbnQgdGhlIGJrdHIgZHJpdmVyIHZlcnNpb24g ICovCn0KCiAgICAgICAgICAgIAoKCi8qKkBCRUdJTkZVTkMqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgIFByb3Rv dHlwZSAgOiB2b2lkIFRWQ0FQVFVSRUluaXQoCiAgICAgICAgICAgICAgICAgICAgICBUVl9D QVBUVVJFICpjICkKCiAgICBQdXJwb3NlICAgIDogSW5pdGlhbGl6ZSB0aGUgY2FwdHVyZSBh dHRyaWJ1dGVzLgoKICAgIFByb2dyYW1tZXIgOiAwMy1NYXItOTcgIFJhbmRhbGwgSG9wcGVy CgogICAgUGFyYW1ldGVycyA6IGMgICAgICAgLSBJL086IENhcHR1cmUgZGVmaW5pdGlvbiBz dHJ1Y3R1cmUgCgogICAgUmV0dXJucyAgICA6IE5vbmUuCgogICAgR2xvYmFscyAgICA6IEdf dHZjYXB0dXJlCgogKipARU5ERlVOQyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKdm9pZCBUVkNBUFRVUkVJbml0 KCBUVl9DQVBUVVJFICpjICkKewogICAgY2hhciBkZXZfY2FwdHVyZVs4MF0sCiAgICAgICAg IGRldl90dW5lciAgWzgwXTsKCiAgICAvKiAgQnVpbGQgbmFtZXMgb2YgY2FwdHVyZSBhbmQg dHVuZXIgZGV2aWNlcyAgKi8KICAgIHNwcmludGYoIGRldl9jYXB0dXJlLCBERVZfQlQ4NDgs IEFwcF9yZXMuZGV2aWNlX251bWJlciApOwogICAgc3ByaW50ZiggZGV2X3R1bmVyICAsIERF Vl9UVU5FUiwgQXBwX3Jlcy5kZXZpY2VfbnVtYmVyICk7CgogICAgYy0+ZmQgPSBvcGVuKCBk ZXZfY2FwdHVyZSwgT19SRE9OTFkgKTsKICAgIGlmICggYy0+ZmQgPCAwICkgewogICAgICAg IGZwcmludGYoIHN0ZGVyciwgIm9wZW4oXCIlc1wiKSBmYWlsZWQ6ICVzXG4iLCAKICAgICAg ICAgICAgICAgICBkZXZfY2FwdHVyZSwgc3RyZXJyb3IoZXJybm8pICk7CiAgICAgICAgZXhp dCgxKTsKICAgIH0KICAgIGMtPnRmZCA9IG9wZW4oIGRldl90dW5lciwgT19SRE9OTFkgKTsK ICAgIGlmICggYy0+dGZkIDwgMCApIHsKICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJvcGVu KFwiJXNcIikgZmFpbGVkOiAlc1xuIiwgCiAgICAgICAgICAgICAgICAgZGV2X3R1bmVyICAs IHN0cmVycm9yKGVycm5vKSApOwogICAgICAgIGV4aXQoMSk7CiAgICB9CgogICAgLyogIER1 bXAgZGVidWcgaW5mbyBvbiBjYXB0dXJlIGNhcmQgICovCiAgICBpZiAoIEdfZGVidWcgJiBE RUJVR19TVEFSVFVQICkKICAgICAgICBUVkNBUFRVUkVEdW1wQ2FwdHVyZUNhcmRJbmZvKCBj ICk7CgogICAgLyogIE11dGUgdGhlIGF1ZGlvIHVudGlsIHN1Y2ggdGltZSBhcyB3ZSdyZSBy ZWFkeSB0byBkaXNwbGF5ICAqLwogICAgVFZDQVBUVVJFU2V0QXVkaW9NdXRlKCBjLCBUUlVF ICk7CgogICAgLyogIEp1c3QgbW1hcCB0aGUgYmlnZ2VzdCBidWZmZXIgd2UnbGwgbmVlZCBh bmQgYmUgZG9uZSB3aXRoIGl0LiAgKi8KICAgIC8qICAgIChCdWZmZXIgdXNlZCBmb3Igbm9u LWRpcmVjdHZpZGVvIGNhcHR1cmVzKSAgICAgICAgICAgICAgICAgICovCiAgICBjLT5kcnZf YnVmID0gKFRWX1VJTlQ4ICopIG1tYXAoIChjYWRkcl90KTAsIE1BWF9NTUFQX0JVRl9TSVpF LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQsIE1BUF9T SEFSRUQsIGMtPmZkLCAob2ZmX3QpMCApOwogICAgaWYgKCBjLT5kcnZfYnVmID09IChUVl9V SU5UOCAqKSAtMSApIHsKICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJtbWFwIG9mIGRyaXZl ciBidWZmZXIgZmFpbGVkOiAlc1xuIiwgCiAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJy bm8pICk7CiAgICAgICAgZXhpdCgxKTsKICAgIH0KCiAgICBjLT5pbnB1dF9mb3JtYXQgICAg PSBUVl9JTlBVVF9OVFNDTTsKICAgIGMtPmlucHV0X2RldiAgICAgICA9IE1FVEVPUl9JTlBV VF9ERVYwOwogICAgYy0+YXVkaW9faW5wdXRfZGV2ID0gVFZfQVVESU9fSU5QVVRfQVVUTzsK CiAgICBjLT5icHBfZm9ybWF0ICAgICAgPSBNRVRFT1JfR0VPX1JHQjE2OwogICAgYy0+Y2Fw X21vZGUgICAgICAgID0gVFZfQ0FQVFVSRV9DT05USU5VT1VTOwogICAgYy0+eGZlcl9tb2Rl ICAgICAgID0gVFZfVFJBTlNGRVJfRElSRUNUOwoKICAgIFRWQ0FQVFVSRVF1ZXJ5UGl4ZWxG b3JtYXRzKCBjLCAmYy0+cGl4X2dlb21fbGlzdCwgJmMtPnBpeF9nZW9tX2xpc3RfbGVuKTsK ICAgIGlmICggYy0+cGl4X2dlb21fbGlzdF9sZW4gPT0gMCApIHsKICAgICAgICBmcHJpbnRm KCBzdGRlcnIsICJjYXB0dXJlIGRldmljZSBzdXBwb3J0cyAwIHBpeGVsIGZvcm1hdHNcbiIg KTsKICAgICAgICBleGl0KDEpOwogICAgfQogICAgYy0+cGl4X2dlb21faWR4ID0gMDsKCiAg ICAvKiAgRklYTUU6IFRoaXMgaXMgYSBoYWNrIC0tIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBx dWVyeSB3aGV0aGVyIHRoZSAgKi8KICAgIC8qICAgIHRoZSB0dW5lciBpcyBzZXQgdG8gYSBz cGVjaWZpYyBjaGFubmVsIG51bWJlciBvciB3aGV0aGVyIGFuICAgICAqLwogICAgLyogICAg b2ZmLWNoYW5uZWwgZnJlcXVlbmN5IG92ZXJyaWRlIGlzIGluLXBsYWNlLiAgICAgICAgICAg ICAgICAgICAgICovCiAgICBjLT50dW5lcl9jaGFuX2FjdGl2ZSA9IFRSVUU7CgogICAgVFZD QVBUVVJFUHJpbnRQaXhlbEZvcm1hdHMoIGMgKTsKCiAgICBjLT5maWVsZF90YXJnWzBdID0g VFZfRklFTERfRElTUExBWTsKICAgIGMtPmZpZWxkX3RhcmdbMV0gPSBUVl9GSUVMRF9ESVNQ TEFZOwogICAgYy0+aHVlICAgICAgICAgICA9ICAgMC4wOyAvKiAlICovCiAgICBjLT5icmln aHRuZXNzICAgID0gKzIwLjA7IC8qICUgKi8KICAgIGMtPmNvbnRyYXN0ICAgICAgPSAgNzAu MDsgLyogJSAqLwogICAgYy0+c2F0X3UgICAgICAgICA9ICAxMDAuMDsgLyogJSAqLwogICAg Yy0+c2F0X3YgICAgICAgICA9ICAxMDAuMDsgLyogJSAqLwogICAgYy0+YWRkciAgICAgICAg ICA9IE5VTEw7CiAgICAvKiAgZ2VvbSAtLSBzZWUgYmVsb3cgKi8KCiAgICBjLT5mcmFtZV9k b25lX2NiICAgID0gTlVMTDsKICAgIGMtPmZyYW1lX2NiX2VuYWJsZWQgPSBGQUxTRTsKCiAg ICAvKiAgRklYTUU6IFRoZXNlIGJlbG9uZyBpbiB0aGUgZHJpdmVyL2RyaXZlciBpbmNsdWRl IGZpbGUgICovCiAgICBjLT53aWR0aF9taW4gID0gMjsKICAgIGMtPndpZHRoX3JlcyAgPSAy OwogICAgYy0+aGVpZ2h0X21pbiA9IDI7CiAgICBjLT5oZWlnaHRfcmVzID0gMjsKICAgIHN3 aXRjaCAoIGMtPmlucHV0X2Zvcm1hdCApIHsKICAgICAgICBjYXNlIFRWX0lOUFVUX05UU0NN IDoKICAgICAgICBjYXNlIFRWX0lOUFVUX05UU0NKIDoKICAgICAgICBjYXNlIFRWX0lOUFVU X1BBTE0gIDoKICAgICAgICAgICAgYy0+d2lkdGhfbWF4ICA9IE5UU0NfRElNX1g7CiAgICAg ICAgICAgIGMtPmhlaWdodF9tYXggPSBOVFNDX0RJTV9ZOwogICAgICAgICAgICBjLT5mcHNf bWF4ICAgID0gTlRTQ19GUFM7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVFZf SU5QVVRfUEFMQkRHSEkgOgogICAgICAgIGNhc2UgVFZfSU5QVVRfUEFMTiAgICAgOgogICAg ICAgIGNhc2UgVFZfSU5QVVRfU0VDQU0gICAgOgogICAgICAgIGNhc2UgVFZfSU5QVVRfUEFM TkNPTUIgOgogICAgICAgICAgICBjLT53aWR0aF9tYXggID0gUEFMX0RJTV9YOwogICAgICAg ICAgICBjLT5oZWlnaHRfbWF4ID0gUEFMX0RJTV9ZOwogICAgICAgICAgICBjLT5mcHNfbWF4 ICAgID0gUEFMX0ZQUzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdCAgICAg ICAgICAgICAgICA6CiAgICAgICAgY2FzZSBUVl9JTlBVVF9BVVRPICAgICA6CiAgICAgICAg ICAgIGZwcmludGYoIHN0ZGVyciwgCiAgICAgICAgICAgICAiVFZDQVBUVVJFSW5pdDogVW5z dXBwb3J0ZWQgaW5wdXQgZm9ybWF0ICVkXG4iLCBjLT5pbnB1dF9mb3JtYXQgKTsKICAgICAg ICAgICAgZXhpdCgxKTsKICAgIH0KICAgIGMtPmZwcyAgICAgICAgICAgPSBjLT5mcHNfbWF4 OwogICAgCiAgICBjLT5nZW9tLnggPSBjLT5nZW9tLnkgPSAwOyAvKiAgVW51c2VkICAqLwog ICAgYy0+Z2VvbS53ID0gYy0+d2lkdGhfbWF4IDsKICAgIGMtPmdlb20uaCA9IGMtPmhlaWdo dF9tYXg7CgogICAgYy0+Y29udGluX29uICAgICA9IEZhbHNlOwoKICAgIHNpZ25hbCggU0lH VVNSMSwgVFZDQVBUVVJFRnJhbWVEb25lU2lnSGRsciApOwogICAgYXRleGl0KCBUVkNBUFRV UkVEZXN0cm95ICk7Cn0KCgovKipAQkVHSU5GVU5DKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICBQcm90b3R5cGUg IDogdm9pZCBUVkNBUFRVUkVTZXRDYXB0dXJlTW9kZSgKICAgIFByb3RvdHlwZSAgOiB2b2lk IFRWQ0FQVFVSRVNldFRyYW5zZmVyTW9kZSgKICAgIFByb3RvdHlwZSAgOiB2b2lkIFRWQ0FQ VFVSRVNldFJlZ2lvbkdlb20oCiAgICBQcm90b3R5cGUgIDogdm9pZCBUVkNBUFRVUkVTZXRQ aXhlbEdlb20oCgogICAgUHVycG9zZSAgICA6IFJvdXRpbmVzIHdoaWNoIHNldCB0aGUgY29y ZSBjYXB0dXJlIHBhcmFtZXRlcnMuCgogICAgICAgICAgICAgICAgIEl0IHdvdWxkIGJlIGdv b2QgcG9saWN5IHRvIHNldCBhbGwgdGhlc2UgYmVmb3JlIGV2ZXJ5CiAgICAgICAgICAgICAg ICAgY2FwdHVyZS4KCiAgICBQcm9ncmFtbWVyIDogMDYtSnVuLTk3ICBSYW5kYWxsIEhvcHBl cgoKICAgIFBhcmFtZXRlcnMgOiBjICAgICAgICAgLSBJOiBjYXB0dXJlIGRlZmluaXRpb24K ICAgICAgICAgICAgICAgICBjYXBfbW9kZSAgLSBJOiBuZXcgY2FwdHVyZS90cmFuc2ZlciBt b2RlcyAoc2luZ2xlL2NvbnRpbikKICAgICAgICAgICAgICAgICB4ZmVyX21vZGUgLSBJOiBp bWFnZXMgKGRyaXZlciBidWYpIG9yIGRpcmVjdCB2aWRlbwogICAgICAgICAgICAgICAgIHJl Z19nZW9tICAtIEk6IGltYWdlIHJlcyAoJiBvcmlnaW4sIGZvciBkaXJlY3QgdmlkZW8pCiAg ICAgICAgICAgICAgICAgcGl4X2dlb20gIC0gSTogY2FwdHVyZWQgcGl4ZWwgZ2VvbWV0cnkg CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltYWdlcyBvbmx5OyBpZ25vcmVk IGZvciB4ZmVyX21vZGUgPSBESVJFQ1QpCgogICAgUmV0dXJucyAgICA6IE5vbmUuCgogICAg R2xvYmFscyAgICA6IE5vbmUuCgogKipARU5ERlVOQyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKdm9pZCBUVkNB UFRVUkVTZXRDYXB0dXJlTW9kZSggCiAgICAgICAgIFRWX0NBUFRVUkUgICAgICAqYywKICAg ICAgICAgVFZfQ0FQVFVSRV9NT0RFICBjYXBfbW9kZSApCnsKICAgIGlmICggYy0+Y29udGlu X29uID09IFRSVUUgKSB7CiAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiU2V0Q2FwdHVyZU1v ZGUgY2FsbGVkIHdoZW4gY29udGluIHJ1bm5pbmdcbiIgKTsKICAgICAgICByZXR1cm47CiAg ICB9CiAgICBjLT5jYXBfbW9kZSA9IGNhcF9tb2RlOwp9CgoKdm9pZCBUVkNBUFRVUkVTZXRU cmFuc2Zlck1vZGUoIAogICAgICAgICBUVl9DQVBUVVJFICAgICAgICpjLAogICAgICAgICBU Vl9UUkFOU0ZFUl9NT0RFICB4ZmVyX21vZGUgKQp7CiAgICBpZiAoIGMtPmNvbnRpbl9vbiA9 PSBUUlVFICkgewogICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlNldFRyYW5zZmVyTW9kZSBj YWxsZWQgd2hlbiBjb250aW4gcnVubmluZ1xuIiApOwogICAgICAgIHJldHVybjsKICAgIH0K ICAgIGMtPnhmZXJfbW9kZSA9IHhmZXJfbW9kZTsKfQoKCnZvaWQgVFZDQVBUVVJFU2V0UmVn aW9uR2VvbSggCiAgICAgICAgIFRWX0NBUFRVUkUgICAgICAqYywKICAgICAgICAgVFZfR0VP TSAgICAgICAgICpyZWdfZ2VvbSApCnsKICAgIGlmICggYy0+Y29udGluX29uID09IFRSVUUg KSB7CiAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiU2V0UmVnaW9uR2VvbSBjYWxsZWQgd2hl biBjb250aW4gcnVubmluZ1xuIiApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGMtPmdl b20gPSAqcmVnX2dlb207Cn0KCgp2b2lkIFRWQ0FQVFVSRVNldFBpeGVsR2VvbSggCiAgICAg ICAgIFRWX0NBUFRVUkUgICAgICAqYywKICAgICAgICAgVFZfUElYRUxfR0VPTSAgICpwaXhf Z2VvbSApCnsKICAgIFRWX0lOVDMyIGlkeDsKCiAgICBpZiAoIGMtPmNvbnRpbl9vbiA9PSBU UlVFICkgewogICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlNldFBpeGVsR2VvbSBjYWxsZWQg d2hlbiBjb250aW4gcnVubmluZ1xuIiApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBU VkNBUFRVUkVHZXRQaXhGbXRCeURyaXZlckhhbmRsZSggYywgcGl4X2dlb20tPmluZGV4LCAm aWR4ICk7CiAgICBpZiAoKCBpZHggPCAwICkgfHwgKCBpZHggPj0gYy0+cGl4X2dlb21fbGlz dF9sZW4gKSkgewogICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlRWQ0FQVFVSRUNvbmZpZ3Vy ZTogQmFkIHBpeGVsIGZvcm1hdCBpbmRleFxuIiApOwogICAgICAgIGV4aXQoMSk7CiAgICB9 CiAgICBjLT5waXhfZ2VvbV9pZHggID0gaWR4Owp9CgovKiAgVFZDQVBUVVJFVmFsaWRSZWdp b25HZW9tICAtICBWYWxpZGF0ZXMgY2FwdHVyZSByZXNvbHV0aW9uICAqLwpUVl9CT09MIFRW Q0FQVFVSRVZhbGlkUmVnaW9uR2VvbSgKICAgICAgICAgICAgVFZfQ0FQVFVSRSAgICAgICpj LAogICAgICAgICAgICBUVl9HRU9NICAgICAgICAgKnJlZ19nZW9tICkKewogICAgVFZfSU5U MzIgdywgaDsKCiAgICB3ID0gcmVnX2dlb20tPncgLyBjLT53aWR0aF9yZXMgICogYy0+d2lk dGhfcmVzOwogICAgaCA9IHJlZ19nZW9tLT5oIC8gYy0+aGVpZ2h0X3JlcyAqIGMtPmhlaWdo dF9yZXM7CgogICAgdyA9IE1BWCggYy0+d2lkdGhfbWluICwgTUlOKCBjLT53aWR0aF9tYXgg LCB3ICkgKTsKICAgIGggPSBNQVgoIGMtPmhlaWdodF9taW4sIE1JTiggYy0+aGVpZ2h0X21h eCwgaCApICk7CgogICAgcmV0dXJuICgoIHcgPT0gcmVnX2dlb20tPncgKSB8fCAoIGggPT0g cmVnX2dlb20tPmggKSk7Cn0KCgoKLyoqQEJFR0lORlVOQyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgUHJvdG90 eXBlICA6IFRWX0JPT0wgVFZDQVBUVVJFQ29uZmlndXJlKAogICAgICAgICAgICAgICAgICAg ICAgVFZfQ0FQVFVSRSAgICAgICAqYywKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAg ICAgICAgICAqKmZhaWxfcmVhc29uICkKCiAgICBQdXJwb3NlICAgIDogTG9va3MgYXQgdGhl IHJlcXVlc3RlZCBjYXB0dXJlIHBhcmFtZXRlcnMgYW5kIGRldGVybWluZXMKICAgICAgICAg ICAgICAgICB3aGV0aGVyIGNhcHR1cmUgY2FuIGJlIHN0YXJ0ZWQgdXNpbmcgdGhlIGN1cnJl bnQgc2V0dGluZ3MuCiAgICAgICAgICAgICAgICAgCiAgICBQcm9ncmFtbWVyIDogMDMtTWFy LTk3ICBSYW5kYWxsIEhvcHBlcgoKICAgIFBhcmFtZXRlcnMgOiBjICAgICAgICAgICAtIEk6 IGNhcHR1cmUgZGVmaW5pdGlvbgogICAgICAgICAgICAgICAgIGZhaWxfcmVhc29uIC0gTzog aWYgY29uZmlndXJlIGZhaWxlZCwgcmVhc29uIHdoeSAoc3RyaW5nKQoKICAgIFJldHVybnMg ICAgOiBUID0gUGFyYW1zIE9LIC0gY2FwdHVyZSBhd2F5OyBGID0gTm9wZSwgdHdlYWsgc29t ZXRoaW4nCgogICAgR2xvYmFscyAgICA6IE5vbmUuCgogKipARU5ERlVOQyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwoKVFZfQk9PTCBUVkNBUFRVUkVDb25maWd1cmUoIFRWX0NBUFRVUkUgICAgICAgKmMsIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgICoqZmFpbF9yZWFz b24gKQp7CiAgICBzdGF0aWMgY2hhciBTX2Vycl9tc2dbIDEyOCBdOwoKICAgIFRWX0JPT0wg ICAgICAgICAgIG9rID0gRkFMU0U7CiAgICBUVl9YU0NSRUVOICAgICAgICp4ID0gJkdfZ2xv Yi54OwogICAgVFZfRElTUExBWSAgICAgICAqZCA9ICZHX2dsb2IuZGlzcGxheTsKICAgIFRW X0dFT00gICAgICAgICAgIGc7CiAgICBUVl9VSU5UMzIgICAgICAgICBhZGRyOwogICAgVFZf SU5UMzIgICAgICAgICAgQnBwLAogICAgICAgICAgICAgICAgICAgICAgaWR4OwoKICAgIGlm ICggYy0+Y29udGluX29uID09IFRSVUUgKSB7CiAgICAgICAgc3RyY3B5KCBTX2Vycl9tc2cs ICJDb250aW51b3VzIGlzIHJ1bm5pbmciICk7CiAgICAgICAgZ290byBSRVRVUk47CiAgICB9 CgogICAgaWYgKCBjLT5mcmFtZV9jYl9lbmFibGVkICYmICFjLT5mcmFtZV9kb25lX2NiICkg ewogICAgICAgIHN0cmNweSggU19lcnJfbXNnLCAiRnJhbWUgZG9uZSBjYWxsYmFjayBvbiwg YnV0IG5vIGZyYW1lIGhhbmRsZXIiICk7CiAgICAgICAgZ290byBSRVRVUk47CiAgICB9Cgog ICAgaWYgKCggYy0+eGZlcl9tb2RlID09IFRWX1RSQU5TRkVSX0RJUkVDVCApICYmICggZC0+ d2luID09IE5vbmUgKSkgewogICAgICAgIHN0cmNweSggU19lcnJfbXNnLCAiTm8gWCBXaW5k b3cgc2V0IGZvciB2aWRlbyIgKTsKICAgICAgICBnb3RvIFJFVFVSTjsKICAgIH0KCiAgICBp ZiAoIGMtPnhmZXJfbW9kZSA9PSBUVl9UUkFOU0ZFUl9ESVJFQ1QgKQogICAgICAgIGlmICgg ISggeC0+dmlzdWFsX21vZGVzWyB4LT5hY3RpdmVfdmlzdWFsIF0gJiBUVl9UUkFOU0ZFUl9E SVJFQ1QgKSkgewogICAgICAgICAgICBzdHJjcHkoIFNfZXJyX21zZywgIkFjdGl2ZSB2aXN1 YWwgZG9lcyBub3Qgc3VwcG9ydCBkaXJlY3QgdmlkZW8iKTsKICAgICAgICAgICAgZ290byBS RVRVUk47CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCAhZC0+ZW5hYmxlZCApIHsKICAg ICAgICAgICAgc3RyY3B5KCBTX2Vycl9tc2csICJEaXJlY3QgdHJhbnNmZXIgb25seSBzdXBw b3J0ZWQgZm9yIHZpZGVvIiApOwogICAgICAgICAgICBnb3RvIFJFVFVSTjsKICAgICAgICB9 CgogICAgLyogIEdldCBjYXB0dXJlIGdlb21ldHJ5ICAqLwogICAgaWYgKCBjLT54ZmVyX21v ZGUgPT0gVFZfVFJBTlNGRVJfRElSRUNUICkgewogICAgICAgIFRWU0NSRUVOVXBkYXRlV2lu R2VvbWV0cnkoKTsKICAgICAgICBUVlNDUkVFTkdldFZpZGVvV2luR2VvbSggJmcgKTsKICAg ICAgICBnLncgPSBnLncgLyBjLT53aWR0aF9yZXMgICogYy0+d2lkdGhfcmVzOwogICAgICAg IGcuaCA9IGcuaCAvIGMtPmhlaWdodF9yZXMgKiBjLT5oZWlnaHRfcmVzOwogICAgfQogICAg ZWxzZQogICAgICAgIGcgPSBjLT5nZW9tOwogICAgCiAgICAvKiAgVmVyaWZ5IHJlcyBsaW1p dHMgYW5kIHByZWNpc2lvbiAoYWxsIG1vZGVzKSAgKi8KICAgIGlmICgoIGcudyAhPSBnLncg LyBjLT53aWR0aF9yZXMgICogYy0+d2lkdGhfcmVzICApIHx8CiAgICAgICAgKCBnLmggIT0g Zy5oIC8gYy0+aGVpZ2h0X3JlcyAqIGMtPmhlaWdodF9yZXMgKSkgewogICAgICAgIHNwcmlu dGYoIFNfZXJyX21zZywgIkNhcHR1cmUgZ2VvbWV0cnkgbXVzdCBiZSBhIG11bHRpcGxlIG9m ICVkeCVkIiwKICAgICAgICAgICAgICAgICBjLT53aWR0aF9yZXMsIGMtPmhlaWdodF9yZXMg KTsKICAgICAgICBnb3RvIFJFVFVSTjsKICAgIH0KCiAgICBpZiAoKCBnLncgPCBjLT53aWR0 aF9taW4gICkgfHwgKCBnLncgPiBjLT53aWR0aF9tYXggICApIHx8CiAgICAgICAgKCBnLmgg PCBjLT5oZWlnaHRfbWluICkgfHwgKCBnLmggPiBjLT5oZWlnaHRfbWF4ICApKSB7CiAgICAg ICAgc3RyY3B5KCBTX2Vycl9tc2csIAogICAgICAgICAgICAgICAgIlJlc29sdXRpb24gYmV5 b25kIGhhcmR3YXJlIG9yIGRyaXZlciBjYXBhYmlsaXRpZXMiICk7CiAgICAgICAgZ290byBS RVRVUk47CiAgICB9CgogICAgLyogIERpcmVjdC12aWRlbyBtb2RlIHNwZWNpZmljIGNoZWNr cyAgKi8KICAgIGlmICggYy0+eGZlcl9tb2RlID09IFRWX1RSQU5TRkVSX0RJUkVDVCApIHsK CiAgICAgICAgaWYgKCAhKHgtPnZpc3VhbF9tb2Rlc1sgeC0+YWN0aXZlX3Zpc3VhbCBdICYg VFZfVFJBTlNGRVJfRElSRUNUKSApIHsKICAgICAgICAgICAgc3RyY3B5KCBTX2Vycl9tc2cs IAogICAgICAgICAgICAgICAgICAgICJBY3RpdmUgWCBWaXN1YWwgZG9lcyBub3Qgc3VwcG9y dCBkaXJlY3QgdmlkZW8iICk7CiAgICAgICAgICAgIGdvdG8gUkVUVVJOOwogICAgICAgIH0K ICAgICAgICBpZiAoIHgtPnZpc3VhbFsgeC0+YWN0aXZlX3Zpc3VhbCBdLnZpc3VhbGlkICE9 IAogICAgICAgICAgICAgICB4LT5mYl92aXN1YWwtPnZpc3VhbGlkICkgewogICAgICAgICAg ICBzdHJjcHkoIFNfZXJyX21zZywgCiAgICAgICAgICAgICAgICAgICAgIkFjdGl2ZSBYIFZp c3VhbCBpcyBub3QgdGhlIGRlZmF1bHQgdmlzdWFsIiApOwogICAgICAgICAgICBnb3RvIFJF VFVSTjsKICAgICAgICB9CiAgICAgICAgaWYgKCBkLT53aW4gPT0gTm9uZSApIHsKICAgICAg ICAgICAgc3RyY3B5KCBTX2Vycl9tc2csIAogICAgICAgICAgICAgICAgICAgICJEaXJlY3Qg dmlkZW8gYXR0ZW1wdGVkIHdpdGggbm8gd2luZG93IHNldCIgKTsKICAgICAgICAgICAgZ290 byBSRVRVUk47CiAgICAgICAgfQoKICAgICAgICAvKiAgTWFrZSBzdXJlIGNhcHR1cmUgcmVn aW9uIGxpZXMgZW50aXJlbHkgd2l0aGluIHZpZGVvIG1lbW9yeSAgKi8KICAgICAgICAvKiAg ICAod2UgZG9uJ3QgaGF2ZSBjb21wbGV4IGNhcHR1cmUgY2xpcHBpbmcgc3VwcG9ydCBpbiB0 aGUgICAgKi8KICAgICAgICAvKiAgICBkcml2ZXIgeWV0LCBidXQgd2hlbiB3ZSBkbywgdXBk YXRlIHRoaXMpLiAgICAgICAgICAgICAgICAgKi8KCiAgICAgICAgWFVUSUxHZXRWaXN1YWxC cHAoIFRWRElTUExBWSwgeC0+ZmJfdmlzdWFsLCBOVUxMLCAmQnBwICk7CiAgICAgICAgYWRk ciA9IHgtPmJhc2VfYWRkciArIChnLnkgKiB4LT5waXRjaCArIGcueCkgKiBCcHA7CgogICAg ICAgIGlmICgoIGcueCA8IDAgKSB8fCAoIGcueSA8IDAgKSB8fAogICAgICAgICAgICAoICgg Zy54K2cudy0xICkgPj0gRGlzcGxheVdpZHRoICggVFZESVNQTEFZLCBUVlNDUkVFTiApICkg fHwKICAgICAgICAgICAgKCAoIGcueStnLmgtMSApID49IERpc3BsYXlIZWlnaHQoIFRWRElT UExBWSwgVFZTQ1JFRU4gKSApKSB7CiAgICAgICAgICAgIHN0cmNweSggU19lcnJfbXNnLCAK ICAgICAgICAgICAgICAgICAgICAiRGlyZWN0IHZpZGVvIHJlZ2lvbiBvdXRzaWRlIGJvdW5k cyBvZiBkaXNwbGF5IiApOwogICAgICAgICAgICBnb3RvIFJFVFVSTjsKICAgICAgICB9CiAg ICAgICAgZWxzZSBpZiAoIGFkZHIgKyAoIChnLmgtMSkgKiB4LT5waXRjaCArIGcudyApICog QnBwCiAgICAgICAgICAgICAgICAgICAgICAgPj0geC0+YmFzZV9hZGRyICsgeC0+YmFua19z aXplICkgewogICAgICAgICAgICBzdHJjcHkoIFNfZXJyX21zZywgCiAgICAgICAgICAgICAg ICAgICAgIkRpcmVjdCB2aWRlbyByZWdpb24gb3V0c2lkZSBib3VuZHMgb2YgZGlzcGxheSIg KTsKICAgICAgICAgICAgZ290byBSRVRVUk47CiAgICAgICAgfQogICAgfQoKICAgIG9rID0g VFJVRTsKCiBSRVRVUk46CiAgICBpZiAoIGZhaWxfcmVhc29uICE9IE5VTEwgKQogICAgICAg ICpmYWlsX3JlYXNvbiA9IG9rID8gTlVMTCA6IFNfZXJyX21zZzsKICAgIHJldHVybiBvazsK fQoKLyoqQEJFR0lORlVOQyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCgogICAgUHJvdG90eXBlICA6IHZvaWQgVFZDQVBU VVJFU3RhcnQoCiAgICAgICAgICAgICAgICAgICAgICBUVl9DQVBUVVJFICpjICkKCiAgICBQ dXJwb3NlICAgIDogSW5pdGlhdGVzIGNhcHR1cmUgdXNpbmcgdGhlIG1vZGUvZ2VvbS9ldGMu IHBhcmFtZXRlcnMKICAgICAgICAgICAgICAgICBzZXQgdXAgcHJldmlvdXNseS4gIAogICAg ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE5vdGU6ICBBTFdBWVMgY2FsbCBUVkNB UFRVUkVTdGFydCBiZWZvcmUgY2FsbGluZyB0aGlzCiAgICAgICAgICAgICAgICAgZnVuY3Rp b24uCgogICAgUHJvZ3JhbW1lciA6IDA4LU1hci05NyAgUmFuZGFsbCBIb3BwZXIKCiAgICBQ YXJhbWV0ZXJzIDogYyAtIEk6IGNhcHR1cmUgc3RhdGUgc3RydWN0CgogICAgUmV0dXJucyAg ICA6IE5vbmUuCgogICAgR2xvYmFscyAgICA6IE5vbmUuCgogKipARU5ERlVOQyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwoKdm9pZCBUVkNBUFRVUkVTdGFydCggVFZfQ0FQVFVSRSAqYyApCnsKICAgIHN0YXRp YyBUVl9CT09MIFNfZG9uZV9hX3NpbmdsZSA9IEZhbHNlOwoKICAgIFRWX0RJU1BMQVkgICAg ICAgICAgKmQgPSAmR19nbG9iLmRpc3BsYXk7CiAgICBUVl9YU0NSRUVOICAgICAgICAgICp4 ID0gJkdfZ2xvYi54OwogICAgVFZfSU5UMzIgICAgICAgICAgICAgbGFyZzsKICAgIHN0cnVj dCBtZXRlb3JfdmlkZW8gIHZpZGVvOwogICAgc3RydWN0IG1ldGVvcl9nZW9tZXQgZ2VvbTsK ICAgIFRWX0dFT00gICAgICAgICAgICAgIGc7CiAgICBUVl9QSVhFTF9HRU9NICAgICAgICBw aXhfZ2VvbTsKICAgIFRWX0lOVDMyICAgICAgICAgICAgIEJwcCwKICAgICAgICAgICAgICAg ICAgICAgICAgIGlkeDsKICAgIGNoYXIgICAgICAgICAgICAgICAgKmNmZ19mYWlsX21zZzsK ICAgIFRWX0JPT0wgICAgICAgICAgICAgIGF1ZGlvX211dGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICBmbHVzaF9idWY7CgogICAgRFJWUFJJTlRGKCggIlx0Q0FQVFVSRSBTdGFydCAl c1xuIiwKICAgICAgICAgICAgICAgYy0+Y2FwX21vZGUgPT0gVFZfQ0FQVFVSRV9DT05USU5V T1VTID8gIkNvbnRpbnVvdXMiOiJTaW5nbGUiKSk7CgogICAgLyogIEZJWE1FOiAgQWxzbyBs b2NrIG91dCBzdGFydCB3aGVuIHNpbmdsZSBjYXB0dXJlcyBpbiBwcm9ncmVzcyAgKi8KICAg IGlmICggYy0+Y29udGluX29uICkgewogICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlRWQ0FQ VFVSRVN0YXJ0IHdoZW4gYWxyZWFkeSBydW5uaW5nLi4uaWdub3JlZFxuIiApOwogICAgICAg IHJldHVybjsKICAgIH0KICAgIAogICAgLyogIERvdWJsZS1jaGVjayBwYXJhbWV0ZXJzICh0 aGUgY2FsbGVyIHNob3VsZCBoYXZlIGFscmVhZHkgZG9uZSB0aGlzKSAgKi8KICAgIGlmICgg IVRWQ0FQVFVSRUNvbmZpZ3VyZSggYywgJmNmZ19mYWlsX21zZyApICkgewogICAgICAgIGZw cmludGYoIHN0ZGVyciwgCiAgICAgICAgICAgICAgICAgIlRWQ0FQVFVSRUNvbmZpZ3VyZSgp IGluIFRWQ0FQVFVSRVN0YXJ0KCkgZmFpbGVkOiAlc1xuIiwKICAgICAgICAgICAgICAgICBj ZmdfZmFpbF9tc2cgKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIC8qLS0gU2V0 IGRlc3RpbmF0aW9uIGF0dHJpYnV0ZXMgJiBnZW9tZXRyeSAtLSovCiAgICBnID0gYy0+Z2Vv bTsKCiAgICBnZW9tLmNvbHVtbnMgPSBnLnc7CiAgICBnZW9tLnJvd3MgICAgPSBnLmg7CiAg ICBnZW9tLmZyYW1lcyAgPSAxOwogICAgZmx1c2hfYnVmICAgID0gRkFMU0U7CgogICAgaWYg KCBjLT54ZmVyX21vZGUgPT0gVFZfVFJBTlNGRVJfRElSRUNUICkgewogICAgICAgIFRWX0JP T0wgIHN3YXBfYiwgCiAgICAgICAgICAgICAgICAgc3dhcF9zOwoKICAgICAgICBYVVRJTEdl dFZpc3VhbEJwcCggVFZESVNQTEFZLCB4LT5mYl92aXN1YWwsIE5VTEwsICZCcHAgKTsKCiAg ICAgICAgdmlkZW8uYWRkciAgICAgID0geC0+YmFzZV9hZGRyICsgKGcueSAqIHgtPnBpdGNo ICsgZy54KSAqIEJwcDsKICAgICAgICAvKnByaW50ZiggIlxuXHRiYXNlICsgKHkgKiBwaXRj aCArIHgpICogQnBwID0gIgogICAgICAgICAgICAgICAgICAiMHgleCArICglZCAqICVkICsg JWQpICogJWRcbiIsCiAgICAgICAgICAgICAgICAgIHgtPmJhc2VfYWRkciwgZy55LCB4LT5w aXRjaCwgZy54LCBCcHAgKTsqLwogICAgICAgIHZpZGVvLndpZHRoICAgICA9IHgtPnBpdGNo ICogQnBwOwogICAgICAgIHZpZGVvLmJhbmtzaXplICA9IHgtPmJhbmtfc2l6ZTsKICAgICAg ICB2aWRlby5yYW1zaXplICAgPSB4LT5yYW1fc2l6ZSAvIDEwMjQ7CgogICAgICAgIG1lbXNl dCggJnBpeF9nZW9tLCAnXDAnLCBzaXplb2YoIHBpeF9nZW9tICkgKTsKICAgICAgICBwaXhf Z2VvbS50eXBlICAgICA9IFRWX1BJWEVMVFlQRV9SR0I7CiAgICAgICAgcGl4X2dlb20uQnBw ICAgICAgPSBCcHA7CiAgICAgICAgcGl4X2dlb20ubWFza1swXSAgPSB4LT5mYl92aXN1YWwt PnJlZF9tYXNrOwogICAgICAgIHBpeF9nZW9tLm1hc2tbMV0gID0geC0+ZmJfdmlzdWFsLT5n cmVlbl9tYXNrOwogICAgICAgIHBpeF9nZW9tLm1hc2tbMl0gID0geC0+ZmJfdmlzdWFsLT5i bHVlX21hc2s7CgogICAgICAgIFhVVElMR2V0VmlzdWFsU3dhcHMoIFRWRElTUExBWSwgeC0+ ZmJfdmlzdWFsLCAmc3dhcF9iLCAmc3dhcF9zICk7CiAgICAgICAgcGl4X2dlb20uc3dhcF9i eXRlcyAgPSBzd2FwX2I7CiAgICAgICAgcGl4X2dlb20uc3dhcF9zaG9ydHMgPSBzd2FwX3M7 CgogICAgICAgIFRWQ0FQVFVSRUdldFBpeEZtdEJ5UGl4R2VvbSggYywgJnBpeF9nZW9tLCAm aWR4ICk7CiAgICAgICAgaWYgKCBpZHggPCAwICkgewogICAgICAgICAgICBmcHJpbnRmKCBz dGRlcnIsICJUVkNBUFRVUkVTdGFydDogVmlzdWFsIHBpeGVsIGZvcm1hdCBub3QgZGlyZWN0 ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmlkZW8gY2FwYWJsZVxuIiApOwog ICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGMtPnBpeF9nZW9tX2lkeCA9 IGlkeDsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHZpZGVvLmFkZHIgICAgID0gMCwKICAg ICAgICB2aWRlby53aWR0aCAgICA9IDAsCiAgICAgICAgdmlkZW8uYmFua3NpemUgPSAwLAog ICAgICAgIHZpZGVvLnJhbXNpemUgID0gMDsKCiAgICAgICAgLyogIElmIFRERUMgaXMgb24s IG1heSBiZSBhIHdoaWxlIGJlZm9yZSBvbGQgdHJhc2ggZ2V0cyB3cml0dGVuIG9uLiAgKi8K ICAgICAgICAvKiAgICBTbyB0ZWxsIHRoZSBkcml2ZXIgdG8gZmx1c2ggdGhlIGZyYW1lIGJ1 ZmZlciBiZWZvcmUgc3RhcnRpbmcgICAqLwogICAgICAgIC8qICAgIGNhcHR1cmUuICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAg ICAgICAgaWYgKCBjLT5mcHMgIT0gYy0+ZnBzX21heCApCiAgICAgICAgICAgIGZsdXNoX2J1 ZiA9IFRSVUU7CiAgICB9CiAgICBtZW1jcHkoICZwaXhfZ2VvbSwgJmMtPnBpeF9nZW9tX2xp c3RbIGMtPnBpeF9nZW9tX2lkeCBdLCAKICAgICAgICAgICAgc2l6ZW9mKCBwaXhfZ2VvbSAp ICk7CgogICAgZ2VvbS5vZm9ybWF0ID0gYy0+YnBwX2Zvcm1hdDsKICAgIGlmICggZ2VvbS5y b3dzIDw9IGMtPmhlaWdodF9tYXggLyAyICkKICAgICAgICBnZW9tLm9mb3JtYXQgfD0gTUVU RU9SX0dFT19PRERfT05MWTsKCiAgICBjLT5hZGRyID0gKFRWX1VJTlQzMikgdmlkZW8uYWRk cjsKCiAgICAvKnByaW50ZiggIlZJREVPICAgICAgPSB7IGFkZHIgMHglLjh4LCB3aWR0aCAl ZCwgYmFua3NpemUgJWQsIHJhbXNpemUgJWQgfVxuIiwKICAgICAgICAgICAgdmlkZW8uYWRk ciwgdmlkZW8ud2lkdGgsIHZpZGVvLmJhbmtzaXplLCB2aWRlby5yYW1zaXplICk7Ki8KICAg IGlmICggaW9jdGwoIGMtPmZkLCBNRVRFT1JTVklERU8sICZ2aWRlbyApIDwgMCApIHsKICAg ICAgICBET19JT0NUTF9TRVJSKCAiTUVURU9SU1ZJREVPIiwgJnZpZGVvICk7CiAgICAgICAg cmV0dXJuOwogICAgfQogICAgLypwcmludGYoICJHRU9NICAgICAgID0geyAlZHglZCwgZnJh bWVzICVkLCBvZm9ybWF0IDB4JS44eCB9XG4iLAogICAgICAgICAgICBnZW9tLmNvbHVtbnMs IGdlb20ucm93cywgZ2VvbS5mcmFtZXMsIGdlb20ub2Zvcm1hdCApOyovCiAgICBpZiAoIGlv Y3RsKCBjLT5mZCwgTUVURU9SU0VUR0VPLCAmZ2VvbSApIDwgMCApIHsKICAgICAgICBET19J T0NUTF9TRVJSKCAiTUVURU9SU0VUR0VPIiwgJmdlb20gKTsKICAgICAgICByZXR1cm47CiAg ICB9CiAgICAvKnByaW50ZiggIlNBQ1RQSVhGTVQgPSB7IGlkeCAlZCwgQnBwICVkLCBtYXNr cyB7ICV4LCV4LCV4IH0sICIKCQkJICAgInN3YXBiL3MgJWQsJWQgfVxuIiwKICAgICAgICAg ICAgcGl4X2dlb20uaW5kZXgsIHBpeF9nZW9tLkJwcCwgcGl4X2dlb20ubWFza1swXSwKCSAg ICBwaXhfZ2VvbS5tYXNrWzFdLCBwaXhfZ2VvbS5tYXNrWzJdLCBwaXhfZ2VvbS5zd2FwX2J5 dGVzLAoJICAgIHBpeF9nZW9tLnN3YXBfc2hvcnRzICk7Ki8KICAgIGlmICggaW9jdGwoIGMt PmZkLCBNRVRFT1JTQUNUUElYRk1ULCAmcGl4X2dlb20uaW5kZXggKSA8IDAgKSB7CiAgICAg ICAgRE9fSU9DVExfU0VSUiggIk1FVEVPUlNBQ1RQSVhGTVQiLCAmZ2VvbSApOwogICAgICAg IHJldHVybjsKICAgIH0KCiAgICBsYXJnID0gZmx1c2hfYnVmOwogICAgaWYgKCBpb2N0bCgg Yy0+ZmQsIEJUODQ4U0NCVUYsICZsYXJnICkgPCAwICkgewogICAgICAgIERPX0lPQ1RMX1NF UlIoICJCVDg0OFNDQlVGIiwgbGFyZyApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAv KiAgSWYgdXNlciB3YW50cyB0byBrbm93IHdoZW5ldmVyIGEvdGhlIGZyYW1lIGlzIGNvbXBs ZXRlLCAgICAgICAgICAgICovCiAgICAvKiAgICBhZGQgaW4gYSBzaWduYWwgaGFuZGxlciBm b3IgdGhpcyBmb3Igc2luZ2xlIGNhcHR1cmVzLCBvciBhbiBYdCAgICovCiAgICAvKiAgICB0 aW1lciBmb3IgY29udGludW91cyBjYXB0dXJlcy4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICovCiAgICAvKiAgICBOT1RFOiAgRG9uZSBjYWxsYmFjayBtYWtlcyBubyBz ZW5zZSBmb3IgZGlyZWN0IHZpZGVvIHRyYW5zZmVycy4gICovCiAgICBsYXJnID0gTUVURU9S X1NJR19NT0RFX01BU0s7CgojaWZkZWYgT0xEX19BTFdBWVNfVVNFX1NJR05BTFNfTk9XCiAg ICBpZiAoIGMtPmZyYW1lX2RvbmVfY2IgJiYgYy0+ZnJhbWVfY2JfZW5hYmxlZCApCiAgICAg ICAgaWYgKCBjLT5jYXBfbW9kZSA9PSBUVl9DQVBUVVJFX1NJTkdMRSApCiAgICAgICAgICAg IGxhcmcgPSBTSUdVU1IxOwogICAgICAgIGVsc2UgewogICAgICAgICAgICBTX2ZyYW1lX3Rp bWVyID0gWHRBcHBBZGRUaW1lT3V0KCBUVkFQUENUWCwgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZSQU1FX1RJTUVSX0RFTEFZX01TKGMtPmZwc19t YXgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVkNB UFRVUkVGcmFtZVRpbWVvdXRDQiwgTlVMTCApOwogICAgICAgICAgICBTX2ZyYW1lX3RpbWVy X3NldCA9IFRydWU7CiAgICAgICAgfQojZWxzZQogICAgaWYgKCBjLT5mcmFtZV9kb25lX2Ni ICYmIGMtPmZyYW1lX2NiX2VuYWJsZWQgKQogICAgICAgIGxhcmcgPSBTSUdVU1IxOwojZW5k aWYKCiAgICBpZiAoIGlvY3RsKCBjLT5mZCwgTUVURU9SU1NJR05BTCwgJmxhcmcgKSA8IDAg KSB7CiAgICAgICAgRE9fSU9DVExfU0VSUiggIk1FVEVPUlNTSUdOQUwiLCBsYXJnICk7CiAg ICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8qICBWZXJpZnkgYXVkaW8gbXV0ZSBzdGF0ZSBp cyBpbiBzeW5jIChpbiBjYXNlIGl0IGRpZG4ndCBnZXQgc3RhcnRlZCAgKi8KICAgIC8qICAg IG9uIHRoZSBpbml0aWFsIG1hcCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi8KICAgIFRWQVVESU9HZXRNdXRlU3RhdGUoICZhdWRpb19tdXRlICk7 CiAgICBUVkNBUFRVUkVTZXRBdWRpb011dGUoIGMsIGF1ZGlvX211dGUgKTsKCiAgICAvKiAg T0ssIE5PVyBGSVJFIElUIFVQICAqLwoKICAgIGlmICggYy0+Y2FwX21vZGUgPT0gVFZfQ0FQ VFVSRV9DT05USU5VT1VTICkgewoKICAgICAgICAvKiAgUXVldWUgdXAgYSBDQVBfU0lOR0xF IC0tIHR1cm5zIG9uIGF1ZGlvIG9uIFdpbmNhc3QgYm9hcmQgICovCiAgICAgICAgLyogIEZJ WE1FOiAgV2UgbWF5IG5vdCBuZWVkIHRvIGRvIHRoaXMgYW55bW9yZSAgKi8KICAgICAgICBp ZiAoICFTX2RvbmVfYV9zaW5nbGUgKSB7CiAgICAgICAgICAgIGxhcmcgPSBNRVRFT1JfQ0FQ X1NJTkdMRTsKICAgICAgICAgICAgaWYgKCBpb2N0bCggYy0+ZmQsIE1FVEVPUkNBUFRVUiwg JmxhcmcgKSA8IDAgKSB7CiAgICAgICAgICAgICAgICBET19JT0NUTF9TRVJSKCAiTUVURU9S X0NBUF9TSU5HTEUiLCAwICk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg IH0KICAgICAgICAgICAgU19kb25lX2Ffc2luZ2xlID0gVHJ1ZTsKICAgICAgICB9CgogICAg ICAgIC8qICBGSVhNRTogIEZpeCBzcGVsbGluZyBvZiAiY29udGludW91cyIgaW4gdGhlIGRy aXZlciBzb21ldGltZSAgKi8KICAgICAgICBsYXJnID0gTUVURU9SX0NBUF9DT05USU5PVVM7 CiAgICAgICAgaWYgKCBpb2N0bCggYy0+ZmQsIE1FVEVPUkNBUFRVUiwgJmxhcmcgKSA8IDAg KSB7CiAgICAgICAgICAgIERPX0lPQ1RMX1NFUlIoICJNRVRFT1JfQ0FQX0NPTlRJTlVPVVMi LCAwICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYy0+Y29udGlu X29uID0gVHJ1ZTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGxhcmcgPSBNRVRFT1JfQ0FQ X1NJTkdMRTsKICAgICAgICBpZiAoIGlvY3RsKCBjLT5mZCwgTUVURU9SQ0FQVFVSLCAmbGFy ZyApIDwgMCApIHsKICAgICAgICAgICAgRE9fSU9DVExfU0VSUiggIk1FVEVPUl9DQVBfU0lO R0xFIiwgMCApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIFNfZG9u ZV9hX3NpbmdsZSA9IFRydWU7CiAgICB9Cn0KCgovKipAQkVHSU5GVU5DKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAg ICBQcm90b3R5cGUgIDogdm9pZCBUVkNBUFRVUkVTdG9wKAogICAgICAgICAgICAgICAgICAg ICAgVFZfQ0FQVFVSRSAqYyApCgogICAgUHVycG9zZSAgICA6IFN0b3AgYSBjb250aW51b3Vz IGNhcHR1cmUsIGlmIG9uZSBpcyBydW5uaW5nLgoKICAgIFByb2dyYW1tZXIgOiAwOC1NYXIt OTcgIFJhbmRhbGwgSG9wcGVyCgogICAgUGFyYW1ldGVycyA6IGMgLSBJOiBjYXB0dXJlIHN0 YXRlIHN0cnVjdAoKICAgIFJldHVybnMgICAgOiBOb25lLgoKICAgIEdsb2JhbHMgICAgOiBO b25lLgoKICoqQEVOREZVTkMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCnZvaWQgVFZDQVBUVVJFU3RvcCggVFZf Q0FQVFVSRSAqYyApCnsKICAgIFRWX0lOVDMyIGxhcmc7CgogICAgRFJWUFJJTlRGKCggIlx0 Q0FQVFVSRSBTdG9wXG4iICkpOwoKICAgIGlmICggIWMtPmNvbnRpbl9vbiApIHsKICAgICAg ICBmcHJpbnRmKCBzdGRlcnIsICJUVkNBUFRVUkVTdG9wIGNhbGxlZCB3aGVuIG5vdCBydW5u aW5nLi4uaWdub3JlZFxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggU19m cmFtZV90aW1lcl9zZXQgKSB7CiAgICAgICAgWHRSZW1vdmVUaW1lT3V0KCBTX2ZyYW1lX3Rp bWVyICk7CiAgICAgICAgU19mcmFtZV90aW1lcl9zZXQgPSBGYWxzZTsKICAgIH0KCiAgICAv KiAgUmVzZXQgZHJpdmVyJ3Mgc2lnbmFsIHNvIHdlIGRvbid0IGtlZXAgZ2V0dGluZyBpbnRl cnJ1cHRlZCAgKi8KICAgIGxhcmcgPSBNRVRFT1JfU0lHX01PREVfTUFTSzsKICAgIGlmICgg aW9jdGwoIGMtPmZkLCBNRVRFT1JTU0lHTkFMLCAmbGFyZyApIDwgMCApIHsKICAgICAgICBE T19JT0NUTF9TRVJSKCAiTUVURU9SU1NJR05BTCIsIGxhcmcgKTsKICAgICAgICByZXR1cm47 CiAgICB9CgogICAgbGFyZyA9IE1FVEVPUl9DQVBfU1RPUF9DT05UOwogICAgaWYgKCBpb2N0 bCggYy0+ZmQsIE1FVEVPUkNBUFRVUiwgJmxhcmcgKSA8IDAgKSB7CiAgICAgICAgRE9fSU9D VExfU0VSUiggIk1FVEVPUl9DQVBfU1RPUF9DT05UIiwgMCApOwogICAgICAgIHJldHVybjsK ICAgIH0KICAgIGMtPmNvbnRpbl9vbiA9IEZhbHNlOwoKCiAgICBUVkNBUFRVUkVDbGVhclBl bmRpbmdGcmFtZXMoKTsKfQoK --==_Exmh_-12741814920-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message