Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 Apr 2008 23:26:10 -0700 (PDT)
From:      Martin Voros <martin_voros@yahoo.com>
To:        Poul-Henning Kamp <phk@FreeBSD.org>
Cc:        cvs-src@FreeBSD.org, src-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/dev/speaker spkr.c
Message-ID:  <68457.62765.qm@web55511.mail.re4.yahoo.com>

next in thread | raw e-mail | index | archive | help
--0-708927677-1209104770=:62765
Content-Type: text/plain; charset=us-ascii

Hi Poul,


----- Original Message ----
From: Poul-Henning Kamp <phk@FreeBSD.org>
To: src-committers@FreeBSD.org; cvs-src@FreeBSD.org; cvs-all@FreeBSD.org
Sent: Thursday, March 27, 2008 8:33:41 AM
Subject: cvs commit: src/sys/dev/speaker spkr.c

phk         2008-03-26 21:33:41 UTC

  FreeBSD src repository

  Modified files:
    sys/dev/speaker      spkr.c 
  Log:
  Make speaker a pseudo device driver instead of attaching to a PnP id.
  
  If somebody cleaned this code up to proper style(9), it could become
  a great educational starting point for aspiring kernel hackers.

I have cleaned up file spkr.c to proper style. See attached patch. Probably I have not fixed all style issues but definitely there is some improvment. 

Martin


      ____________________________________________________________________________________
Be a better friend, newshound, and 
know-it-all with Yahoo! Mobile.  Try it now.  http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
--0-708927677-1209104770=:62765
Content-Type: application/octet-stream; name="spkr-style.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="spkr-style.patch"

LS0tIHN5cy9kZXYvc3BlYWtlci9zcGtyLmMJMjAwOC0wMy0yNyAwNzoxMTow
MS4wMDAwMDAwMDAgKzAxMDAKKysrIC9ob21lL3Jvb3QvZGV2ZWwvc3Brci5j
CTIwMDgtMDQtMjUgMTM6MTc6NTUuMDAwMDAwMDAwICswMjAwCkBAIC0zNyw4
ICszNyw4IEBACiAKIHN0YXRpYyBNQUxMT0NfREVGSU5FKE1fU1BLUiwgInNw
a3IiLCAiU3BlYWtlciBidWZmZXIiKTsKIAotLyoqKioqKioqKioqKioqKiog
TUFDSElORSBERVBFTkRFTlQgUEFSVCBTVEFSVFMgSEVSRSAqKioqKioqKioq
KioqKioqKioqKioqKioqCi0gKgorLyoKKyAqKioqKioqKioqKioqKioqIE1B
Q0hJTkUgREVQRU5ERU5UIFBBUlQgU1RBUlRTIEhFUkUgKioqKioqKioqKioq
KioqKioqKioqKioqKgogICogVGhpcyBzZWN0aW9uIGRlZmluZXMgYSBmdW5j
dGlvbiB0b25lKCkgd2hpY2ggY2F1c2VzIGEgdG9uZSBvZiBnaXZlbgogICog
ZnJlcXVlbmN5IGFuZCBkdXJhdGlvbiBmcm9tIHRoZSBJU0EgY29uc29sZSBz
cGVha2VyLgogICogQW5vdGhlciBmdW5jdGlvbiBlbmR0b25lKCkgaXMgZGVm
aW5lZCB0byBmb3JjZSBzb3VuZCBvZmYsIGFuZCB0aGVyZSBpcwpAQCAtNTks
NjggKzU5LDcwIEBACiBzdGF0aWMgdm9pZCBwbGF5dG9uZShpbnQgcGl0Y2gs
IGludCB2YWx1ZSwgaW50IHN1c3RhaW4pOwogc3RhdGljIHZvaWQgcGxheXN0
cmluZyhjaGFyICpjcCwgc2l6ZV90IHNsZW4pOwogCi0vKiBlbWl0IHRvbmUg
b2YgZnJlcXVlbmN5IHRoeiBmb3IgZ2l2ZW4gbnVtYmVyIG9mIGNlbnRpc2Vj
cyAqLworLyogCisgKiBFbWl0IHRvbmUgb2YgZnJlcXVlbmN5IHRoeiBmb3Ig
Z2l2ZW4gbnVtYmVyIG9mIGNlbnRpc2VjcyAKKyAqLwogc3RhdGljIHZvaWQK
LXRvbmUodGh6LCBjZW50aXNlY3MpCi0JdW5zaWduZWQgaW50IHRoeiwgY2Vu
dGlzZWNzOwordG9uZSh1bnNpZ25lZCBpbnQgdGh6LCB1bnNpZ25lZCBpbnQg
Y2VudGlzZWNzKQogewotICAgIGludCBzcHMsIHRpbW87CisJaW50IHNwcywg
dGltbzsKIAotICAgIGlmICh0aHogPD0gMCkKLQlyZXR1cm47CisJaWYgKHRo
eiA8PSAwKQorCQlyZXR1cm47CiAKICNpZmRlZiBERUJVRwotICAgICh2b2lk
KSBwcmludGYoInRvbmU6IHRoej0lZCBjZW50aXNlY3M9JWRcbiIsIHRoeiwg
Y2VudGlzZWNzKTsKKwkodm9pZCkgcHJpbnRmKCJ0b25lOiB0aHo9JWQgY2Vu
dGlzZWNzPSVkXG4iLCB0aHosIGNlbnRpc2Vjcyk7CiAjZW5kaWYgLyogREVC
VUcgKi8KIAotICAgIC8qIHNldCB0aW1lciB0byBnZW5lcmF0ZSBjbGlja3Mg
YXQgZ2l2ZW4gZnJlcXVlbmN5IGluIEhlcnR6ICovCi0gICAgc3BzID0gc3Bs
Y2xvY2soKTsKKwkvKiBzZXQgdGltZXIgdG8gZ2VuZXJhdGUgY2xpY2tzIGF0
IGdpdmVuIGZyZXF1ZW5jeSBpbiBIZXJ0eiAqLworCXNwcyA9IHNwbGNsb2Nr
KCk7CiAKLSAgICBpZiAodGltZXJfc3Brcl9hY3F1aXJlKCkpIHsKLQkvKiBl
bnRlciBsaXN0IG9mIHdhaXRpbmcgcHJvY3MgPz8/ICovCisJaWYgKHRpbWVy
X3Nwa3JfYWNxdWlyZSgpKSB7CisJCS8qIGVudGVyIGxpc3Qgb2Ygd2FpdGlu
ZyBwcm9jcyA/Pz8gKi8KKwkJc3BseChzcHMpOworCQlyZXR1cm47CisJfQor
CXNwbHgoc3BzKTsKKwlkaXNhYmxlX2ludHIoKTsKKwl0aW1lcl9zcGtyX3Nl
dGZyZXEodGh6KTsKKwllbmFibGVfaW50cigpOworCisJLyoKKwkgKiBTZXQg
dGltZW91dCB0byBlbmR0b25lIGZ1bmN0aW9uLCB0aGVuIGdpdmUgdXAgdGhl
IHRpbWVzbGljZS4KKwkgKiBUaGlzIGlzIHNvIG90aGVyIHByb2Nlc3NlcyBj
YW4gZXhlY3V0ZSB3aGlsZSB0aGUgdG9uZSBpcyBiZWluZworCSAqIGVtaXR0
ZWQuCisJICovCisJdGltbyA9IGNlbnRpc2VjcyAqIGh6IC8gMTAwOworCWlm
ICh0aW1vID4gMCkKKwkJdHNsZWVwKCZlbmR0b25lLCBTUEtSUFJJIHwgUENB
VENILCAic3BrcnRuIiwgdGltbyk7CisJc3BzID0gc3BsY2xvY2soKTsKKwl0
aW1lcl9zcGtyX3JlbGVhc2UoKTsKIAlzcGx4KHNwcyk7Ci0JcmV0dXJuOwot
ICAgIH0KLSAgICBzcGx4KHNwcyk7Ci0gICAgZGlzYWJsZV9pbnRyKCk7Ci0g
ICAgdGltZXJfc3Brcl9zZXRmcmVxKHRoeik7Ci0gICAgZW5hYmxlX2ludHIo
KTsKLQotICAgIC8qCi0gICAgICogU2V0IHRpbWVvdXQgdG8gZW5kdG9uZSBm
dW5jdGlvbiwgdGhlbiBnaXZlIHVwIHRoZSB0aW1lc2xpY2UuCi0gICAgICog
VGhpcyBpcyBzbyBvdGhlciBwcm9jZXNzZXMgY2FuIGV4ZWN1dGUgd2hpbGUg
dGhlIHRvbmUgaXMgYmVpbmcKLSAgICAgKiBlbWl0dGVkLgotICAgICAqLwot
ICAgIHRpbW8gPSBjZW50aXNlY3MgKiBoeiAvIDEwMDsKLSAgICBpZiAodGlt
byA+IDApCi0JdHNsZWVwKCZlbmR0b25lLCBTUEtSUFJJIHwgUENBVENILCAi
c3BrcnRuIiwgdGltbyk7Ci0gICAgc3BzID0gc3BsY2xvY2soKTsKLSAgICB0
aW1lcl9zcGtyX3JlbGVhc2UoKTsKLSAgICBzcGx4KHNwcyk7CiB9CiAKLS8q
IHJlc3QgZm9yIGdpdmVuIG51bWJlciBvZiBjZW50aXNlY3MgKi8KKy8qCisg
KiBSZXN0IGZvciBnaXZlbiBudW1iZXIgb2YgY2VudGlzZWNzIAorICovCiBz
dGF0aWMgdm9pZAotcmVzdChjZW50aXNlY3MpCi0JaW50CWNlbnRpc2VjczsK
K3Jlc3QoaW50IGNlbnRpc2VjcykKIHsKLSAgICBpbnQgdGltbzsKKwlpbnQg
dGltbzsKIAotICAgIC8qCi0gICAgICogU2V0IHRpbWVvdXQgdG8gZW5kcmVz
dCBmdW5jdGlvbiwgdGhlbiBnaXZlIHVwIHRoZSB0aW1lc2xpY2UuCi0gICAg
ICogVGhpcyBpcyBzbyBvdGhlciBwcm9jZXNzZXMgY2FuIGV4ZWN1dGUgd2hp
bGUgdGhlIHJlc3QgaXMgYmVpbmcKLSAgICAgKiB3YWl0ZWQgb3V0LgotICAg
ICAqLworCS8qCisJICogU2V0IHRpbWVvdXQgdG8gZW5kcmVzdCBmdW5jdGlv
biwgdGhlbiBnaXZlIHVwIHRoZSB0aW1lc2xpY2UuCisJICogVGhpcyBpcyBz
byBvdGhlciBwcm9jZXNzZXMgY2FuIGV4ZWN1dGUgd2hpbGUgdGhlIHJlc3Qg
aXMgYmVpbmcKKwkgKiB3YWl0ZWQgb3V0LgorCSAqLwogI2lmZGVmIERFQlVH
Ci0gICAgKHZvaWQpIHByaW50ZigicmVzdDogJWRcbiIsIGNlbnRpc2Vjcyk7
CisJKHZvaWQpIHByaW50ZigicmVzdDogJWRcbiIsIGNlbnRpc2Vjcyk7CiAj
ZW5kaWYgLyogREVCVUcgKi8KLSAgICB0aW1vID0gY2VudGlzZWNzICogaHog
LyAxMDA7Ci0gICAgaWYgKHRpbW8gPiAwKQotCXRzbGVlcCgmZW5kcmVzdCwg
U1BLUlBSSSB8IFBDQVRDSCwgInNwa3JycyIsIHRpbW8pOworCXRpbW8gPSBj
ZW50aXNlY3MgKiBoeiAvIDEwMDsKKwlpZiAodGltbyA+IDApCisJCXRzbGVl
cCgmZW5kcmVzdCwgU1BLUlBSSSB8IFBDQVRDSCwgInNwa3JycyIsIHRpbW8p
OwogfQogCi0vKioqKioqKioqKioqKioqKiBQTEFZIFNUUklORyBJTlRFUlBS
RVRFUiBCRUdJTlMgSEVSRSAqKioqKioqKioqKioqKioqKioqKioqCi0gKgor
LyoKKyAqKioqKioqKioqKioqKioqIFBMQVkgU1RSSU5HIElOVEVSUFJFVEVS
IEJFR0lOUyBIRVJFICoqKioqKioqKioqKioqKioqKioqKioKICAqIFBsYXkg
c3RyaW5nIGludGVycHJldGF0aW9uIGlzIG1vZGVsbGVkIG9uIElCTSBCQVNJ
QyAyLjAncyBQTEFZIHN0YXRlbWVudDsKICAqIE1bTE5TXSBhcmUgbWlzc2lu
ZzsgdGhlIH4gc3lub255bSBhbmQgdGhlIF8gc2x1ciBtYXJrIGFuZCB0aGUg
b2N0YXZlLQogICogdHJhY2tpbmcgZmFjaWxpdHkgYXJlIGFkZGVkLgpAQCAt
MTkxLDIzNyArMTkzLDIxNCBAQAogICAgIG9jdHByZWZpeCA9IFRSVUU7CS8q
IGFjdCBhcyB0aG91Z2ggdGhlcmUgd2FzIGFuIGluaXRpYWwgTyhuKSAqLwog
fQogCi0vKiBwbGF5IHRvbmUgb2YgcHJvcGVyIGR1cmF0aW9uIGZvciBjdXJy
ZW50IHJoeXRobSBzaWduYXR1cmUgKi8KKy8qIAorICogUGxheSB0b25lIG9m
IHByb3BlciBkdXJhdGlvbiBmb3IgY3VycmVudCByaHl0aG0gc2lnbmF0dXJl
IAorICovCiBzdGF0aWMgdm9pZAotcGxheXRvbmUocGl0Y2gsIHZhbHVlLCBz
dXN0YWluKQotCWludAlwaXRjaCwgdmFsdWUsIHN1c3RhaW47CitwbGF5dG9u
ZShpbnQgcGl0Y2gsIGludCB2YWx1ZSwgaW50IHN1c3RhaW4pCiB7Ci0gICAg
cmVnaXN0ZXIgaW50CXNvdW5kLCBzaWxlbmNlLCBzbnVtID0gMSwgc2Rlbm9t
ID0gMTsKKwlyZWdpc3RlciBpbnQgc291bmQsIHNpbGVuY2UsIHNudW0gPSAx
LCBzZGVub20gPSAxOwogCi0gICAgLyogdGhpcyB3ZWlyZG5lc3MgYXZvaWRz
IGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgKi8KLSAgICBmb3IgKDsgc3Vz
dGFpbjsgc3VzdGFpbi0tKQotICAgIHsKLQkvKiBTZWUgdGhlIEJVR1Mgc2Vj
dGlvbiBpbiB0aGUgbWFuIHBhZ2UgZm9yIGRpc2N1c3Npb24gKi8KLQlzbnVt
ICo9IE5VTV9NVUxUOwotCXNkZW5vbSAqPSBERU5PTV9NVUxUOwotICAgIH0K
LQotICAgIGlmICh2YWx1ZSA9PSAwIHx8IHNkZW5vbSA9PSAwKQotCXJldHVy
bjsKLQotICAgIGlmIChwaXRjaCA9PSAtMSkKLQlyZXN0KHdob2xlICogc251
bSAvICh2YWx1ZSAqIHNkZW5vbSkpOwotICAgIGVsc2UKLSAgICB7Ci0Jc291
bmQgPSAod2hvbGUgKiBzbnVtKSAvICh2YWx1ZSAqIHNkZW5vbSkKLQkJLSAo
d2hvbGUgKiAoRklMTFRJTUUgLSBmaWxsKSkgLyAodmFsdWUgKiBGSUxMVElN
RSk7Ci0Jc2lsZW5jZSA9IHdob2xlICogKEZJTExUSU1FLWZpbGwpICogc251
bSAvIChGSUxMVElNRSAqIHZhbHVlICogc2Rlbm9tKTsKKwkvKiB0aGlzIHdl
aXJkbmVzcyBhdm9pZHMgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyAqLwor
CWZvciAoOyBzdXN0YWluOyBzdXN0YWluLS0pIHsKKwkJLyogU2VlIHRoZSBC
VUdTIHNlY3Rpb24gaW4gdGhlIG1hbiBwYWdlIGZvciBkaXNjdXNzaW9uICov
CisJCXNudW0gKj0gTlVNX01VTFQ7CisJCXNkZW5vbSAqPSBERU5PTV9NVUxU
OworCX0KKworCWlmICh2YWx1ZSA9PSAwIHx8IHNkZW5vbSA9PSAwKQorCQly
ZXR1cm47CisKKwlpZiAocGl0Y2ggPT0gLTEpCisJCXJlc3Qod2hvbGUgKiBz
bnVtIC8gKHZhbHVlICogc2Rlbm9tKSk7CisJZWxzZSB7CisJCXNvdW5kID0g
KHdob2xlICogc251bSkgLyAodmFsdWUgKiBzZGVub20pCisJCQktICh3aG9s
ZSAqIChGSUxMVElNRSAtIGZpbGwpKSAvICh2YWx1ZSAqIEZJTExUSU1FKTsK
KwkJc2lsZW5jZSA9IHdob2xlICogKEZJTExUSU1FLWZpbGwpICogc251bSAv
IChGSUxMVElNRSAqIHZhbHVlICogc2Rlbm9tKTsKIAogI2lmZGVmIERFQlVH
Ci0JKHZvaWQpIHByaW50ZigicGxheXRvbmU6IHBpdGNoICVkIGZvciAlZCB0
aWNrcywgcmVzdCBmb3IgJWQgdGlja3NcbiIsCisJCSh2b2lkKSBwcmludGYo
InBsYXl0b25lOiBwaXRjaCAlZCBmb3IgJWQgdGlja3MsIHJlc3QgZm9yICVk
IHRpY2tzXG4iLAogCQkJcGl0Y2gsIHNvdW5kLCBzaWxlbmNlKTsKICNlbmRp
ZiAvKiBERUJVRyAqLwogCi0JdG9uZShwaXRjaHRhYltwaXRjaF0sIHNvdW5k
KTsKLQlpZiAoZmlsbCAhPSBMRUdBVE8pCi0JICAgIHJlc3Qoc2lsZW5jZSk7
Ci0gICAgfQorCQl0b25lKHBpdGNodGFiW3BpdGNoXSwgc291bmQpOworCQlp
ZiAoZmlsbCAhPSBMRUdBVE8pCisJCQlyZXN0KHNpbGVuY2UpOworCX0KIH0K
IAotLyogaW50ZXJwcmV0IGFuZCBwbGF5IGFuIGl0ZW0gZnJvbSBhIG5vdGF0
aW9uIHN0cmluZyAqLworLyoKKyAqIEludGVycHJldCBhbmQgcGxheSBhbiBp
dGVtIGZyb20gYSBub3RhdGlvbiBzdHJpbmcgCisgKi8KIHN0YXRpYyB2b2lk
Ci1wbGF5c3RyaW5nKGNwLCBzbGVuKQotCWNoYXIJKmNwOwotCXNpemVfdAlz
bGVuOworcGxheXN0cmluZyhjaGFyICpjcCwgc2l6ZV90IHNsZW4pCiB7Ci0g
ICAgaW50CQlwaXRjaCwgb2xkZmlsbCwgbGFzdHBpdGNoID0gT0NUQVZFX05P
VEVTICogREZMVF9PQ1RBVkU7CisJaW50IHBpdGNoLCBvbGRmaWxsLCBsYXN0
cGl0Y2ggPSBPQ1RBVkVfTk9URVMgKiBERkxUX09DVEFWRTsKIAogI2RlZmlu
ZSBHRVROVU0oY3AsIHYpCWZvcih2PTA7IGlzZGlnaXQoY3BbMV0pICYmIHNs
ZW4gPiAwOyApIFwKIAkJCQl7diA9IHYgKiAxMCArICgqKytjcCAtICcwJyk7
IHNsZW4tLTt9Ci0gICAgZm9yICg7IHNsZW4tLTsgY3ArKykKLSAgICB7Ci0J
aW50CQlzdXN0YWluLCB0aW1ldmFsLCB0ZW1wbzsKLQlyZWdpc3RlciBjaGFy
CWMgPSB0b3VwcGVyKCpjcCk7CisJZm9yICg7IHNsZW4tLTsgY3ArKykgewor
CQlpbnQgc3VzdGFpbiwgdGltZXZhbCwgdGVtcG87CisJCXJlZ2lzdGVyIGNo
YXIgYyA9IHRvdXBwZXIoKmNwKTsKIAogI2lmZGVmIERFQlVHCi0JKHZvaWQp
IHByaW50ZigicGxheXN0cmluZzogJWMgKCV4KVxuIiwgYywgYyk7CisJCSh2
b2lkKSBwcmludGYoInBsYXlzdHJpbmc6ICVjICgleClcbiIsIGMsIGMpOwog
I2VuZGlmIC8qIERFQlVHICovCiAKLQlzd2l0Y2ggKGMpCi0JewotCWNhc2Ug
J0EnOiAgY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6
IGNhc2UgJ0YnOiBjYXNlICdHJzoKLQotCSAgICAvKiBjb21wdXRlIHBpdGNo
ICovCi0JICAgIHBpdGNoID0gbm90ZXRhYltjIC0gJ0EnXSArIG9jdGF2ZSAq
IE9DVEFWRV9OT1RFUzsKLQotCSAgICAvKiB0aGlzIG1heSBiZSBmb2xsb3dl
ZCBieSBhbiBhY2NpZGVudGFsIHNpZ24gKi8KLQkgICAgaWYgKGNwWzFdID09
ICcjJyB8fCBjcFsxXSA9PSAnKycpCi0JICAgIHsKLQkJKytwaXRjaDsKLQkJ
KytjcDsKLQkJc2xlbi0tOwotCSAgICB9Ci0JICAgIGVsc2UgaWYgKGNwWzFd
ID09ICctJykKLQkgICAgewotCQktLXBpdGNoOwotCQkrK2NwOwotCQlzbGVu
LS07Ci0JICAgIH0KLQotCSAgICAvKgotCSAgICAgKiBJZiBvY3RhdmUtdHJh
Y2tpbmcgbW9kZSBpcyBvbiwgYW5kIHRoZXJlIGhhcyBiZWVuIG5vIG9jdGF2
ZS0KLQkgICAgICogc2V0dGluZyBwcmVmaXgsIGZpbmQgdGhlIHZlcnNpb24g
b2YgdGhlIGN1cnJlbnQgbGV0dGVyIG5vdGUKLQkgICAgICogY2xvc2VzdCB0
byB0aGUgbGFzdCByZWdhcmRsZXNzIG9mIG9jdGF2ZS4KLQkgICAgICovCi0J
ICAgIGlmIChvY3R0cmFjayAmJiAhb2N0cHJlZml4KQotCSAgICB7Ci0JCWlm
IChhYnMocGl0Y2gtbGFzdHBpdGNoKSA+IGFicyhwaXRjaCtPQ1RBVkVfTk9U
RVMtbGFzdHBpdGNoKSkKLQkJewotCQkgICAgKytvY3RhdmU7Ci0JCSAgICBw
aXRjaCArPSBPQ1RBVkVfTk9URVM7Ci0JCX0KLQotCQlpZiAoYWJzKHBpdGNo
LWxhc3RwaXRjaCkgPiBhYnMoKHBpdGNoLU9DVEFWRV9OT1RFUyktbGFzdHBp
dGNoKSkKLQkJewotCQkgICAgLS1vY3RhdmU7Ci0JCSAgICBwaXRjaCAtPSBP
Q1RBVkVfTk9URVM7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdBJzogIAor
CQljYXNlICdCJzogCisJCWNhc2UgJ0MnOiAKKwkJY2FzZSAnRCc6IAorCQlj
YXNlICdFJzogCisJCWNhc2UgJ0YnOiAKKwkJY2FzZSAnRyc6CisJCQkvKiBj
b21wdXRlIHBpdGNoICovCisJCQlwaXRjaCA9IG5vdGV0YWJbYyAtICdBJ10g
KyBvY3RhdmUgKiBPQ1RBVkVfTk9URVM7CisKKwkJCS8qIHRoaXMgbWF5IGJl
IGZvbGxvd2VkIGJ5IGFuIGFjY2lkZW50YWwgc2lnbiAqLworCQkJaWYgKGNw
WzFdID09ICcjJyB8fCBjcFsxXSA9PSAnKycpIHsKKwkJCQkrK3BpdGNoOwor
CQkJCSsrY3A7CisJCQkJc2xlbi0tOworCQkJfSBlbHNlIGlmIChjcFsxXSA9
PSAnLScpIHsKKwkJCQktLXBpdGNoOworCQkJCSsrY3A7CisJCQkJc2xlbi0t
OworCQkJfQorCisJCQkvKgorCQkJICogSWYgb2N0YXZlLXRyYWNraW5nIG1v
ZGUgaXMgb24sIGFuZCB0aGVyZSBoYXMgYmVlbiBubyBvY3RhdmUtCisJCQkg
KiBzZXR0aW5nIHByZWZpeCwgZmluZCB0aGUgdmVyc2lvbiBvZiB0aGUgY3Vy
cmVudCBsZXR0ZXIgbm90ZQorCQkJICogY2xvc2VzdCB0byB0aGUgbGFzdCBy
ZWdhcmRsZXNzIG9mIG9jdGF2ZS4KKwkJCSAqLworCQkJaWYgKG9jdHRyYWNr
ICYmICFvY3RwcmVmaXgpIHsKKwkJCQlpZiAoYWJzKHBpdGNoLWxhc3RwaXRj
aCkgPiBhYnMocGl0Y2grT0NUQVZFX05PVEVTIC0gCisJCQkJCWxhc3RwaXRj
aCkpIHsKKwkJCQkJKytvY3RhdmU7CisJCQkJCXBpdGNoICs9IE9DVEFWRV9O
T1RFUzsKKwkJCQl9CisKKwkJCQlpZiAoYWJzKHBpdGNoLWxhc3RwaXRjaCkg
PiBhYnMoKHBpdGNoLU9DVEFWRV9OT1RFUykgLSAKKwkJCQkJbGFzdHBpdGNo
KSkgeworCQkJCQktLW9jdGF2ZTsKKwkJCQkJcGl0Y2ggLT0gT0NUQVZFX05P
VEVTOworCQkJCX0KKwkJCX0KKwkJCW9jdHByZWZpeCA9IEZBTFNFOworCQkJ
bGFzdHBpdGNoID0gcGl0Y2g7CisKKwkJCS8qIC4uLndoaWNoIG1heSBpbiB0
dXJuIGJlIGZvbGxvd2VkIGJ5IGFuIG92ZXJyaWRlIHRpbWUgdmFsdWUgKi8K
KwkJCUdFVE5VTShjcCwgdGltZXZhbCk7CisJCQlpZiAodGltZXZhbCA8PSAw
IHx8IHRpbWV2YWwgPiBNSU5fVkFMVUUpCisJCQkJdGltZXZhbCA9IHZhbHVl
OworCisJCQkvKiAuLi5hbmQvb3Igc3VzdGFpbiBkb3RzICovCisJCQlmb3Ig
KHN1c3RhaW4gPSAwOyBjcFsxXSA9PSAnLic7IGNwKyspIHsgCisJCQkJc2xl
bi0tOworCQkJCXN1c3RhaW4rKzsKKwkJCX0KKworCQkJLyogLi4uYW5kL29y
IGEgc2x1ciBtYXJrICovCisJCQlvbGRmaWxsID0gZmlsbDsKKwkJCWlmIChj
cFsxXSA9PSAnXycpIHsKKwkJCQlmaWxsID0gTEVHQVRPOworCQkJCSsrY3A7
CisJCQkJc2xlbi0tOworCQkJfQorCisJCQkvKiB0aW1lIHRvIGVtaXQgdGhl
IGFjdHVhbCB0b25lICovCisJCQlwbGF5dG9uZShwaXRjaCwgdGltZXZhbCwg
c3VzdGFpbik7CisKKwkJCWZpbGwgPSBvbGRmaWxsOworCQkJYnJlYWs7CisJ
CWNhc2UgJ08nOgorCQkJaWYgKGNwWzFdID09ICdOJyB8fCBjcFsxXSA9PSAn
bicpIHsKKwkJCQlvY3RwcmVmaXggPSBvY3R0cmFjayA9IEZBTFNFOworCQkJ
CSsrY3A7CisJCQkJc2xlbi0tOworCQkJfSBlbHNlIGlmIChjcFsxXSA9PSAn
TCcgfHwgY3BbMV0gPT0gJ2wnKSB7CisJCQkJb2N0dHJhY2sgPSBUUlVFOwor
CQkJCSsrY3A7CisJCQkJc2xlbi0tOworCQkJfSBlbHNlIHsKKwkJCQlHRVRO
VU0oY3AsIG9jdGF2ZSk7CisJCQkJaWYgKG9jdGF2ZSA+PSBzaXplb2YocGl0
Y2h0YWIpIC8gc2l6ZW9mKHBpdGNodGFiWzBdKSAvCisJCQkJCU9DVEFWRV9O
T1RFUykKKwkJCQkJb2N0YXZlID0gREZMVF9PQ1RBVkU7CisJCQkJb2N0cHJl
Zml4ID0gVFJVRTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICc+JzoKKwkJ
CWlmIChvY3RhdmUgPCBzaXplb2YocGl0Y2h0YWIpIC8gc2l6ZW9mKHBpdGNo
dGFiWzBdKSAvIAorCQkJCU9DVEFWRV9OT1RFUyAtIDEpCisJCQkJb2N0YXZl
Kys7CisJCQlvY3RwcmVmaXggPSBUUlVFOworCQkJYnJlYWs7CisJCWNhc2Ug
JzwnOgorCQkJaWYgKG9jdGF2ZSA+IDApCisJCQkJb2N0YXZlLS07CisJCQlv
Y3RwcmVmaXggPSBUUlVFOworCQkJYnJlYWs7CisJCWNhc2UgJ04nOgorCQkJ
R0VUTlVNKGNwLCBwaXRjaCk7CisJCQlmb3IgKHN1c3RhaW4gPSAwOyBjcFsx
XSA9PSAnLic7IGNwKyspIHsKKwkJCQlzbGVuLS07CisJCQkJc3VzdGFpbisr
OworCQkJfQorCQkJb2xkZmlsbCA9IGZpbGw7CisJCQlpZiAoY3BbMV0gPT0g
J18nKSB7CisJCQkJZmlsbCA9IExFR0FUTzsKKwkJCQkrK2NwOworCQkJCXNs
ZW4tLTsKKwkJCX0KKwkJCXBsYXl0b25lKHBpdGNoIC0gMSwgdmFsdWUsIHN1
c3RhaW4pOworCQkJZmlsbCA9IG9sZGZpbGw7CisJCQlicmVhazsKKwkJY2Fz
ZSAnTCc6CisJCQlHRVROVU0oY3AsIHZhbHVlKTsKKwkJCWlmICh2YWx1ZSA8
PSAwIHx8IHZhbHVlID4gTUlOX1ZBTFVFKQorCQkJCXZhbHVlID0gREZMVF9W
QUxVRTsKKwkJCWJyZWFrOworCQljYXNlICdQJzoKKwkJY2FzZSAnfic6CisJ
CQkvKiB0aGlzIG1heSBiZSBmb2xsb3dlZCBieSBhbiBvdmVycmlkZSB0aW1l
IHZhbHVlICovCisJCQlHRVROVU0oY3AsIHRpbWV2YWwpOworCQkJaWYgKHRp
bWV2YWwgPD0gMCB8fCB0aW1ldmFsID4gTUlOX1ZBTFVFKQorCQkJCXRpbWV2
YWwgPSB2YWx1ZTsKKwkJCWZvciAoc3VzdGFpbiA9IDA7IGNwWzFdID09ICcu
JzsgY3ArKykgeworCQkJCXNsZW4tLTsKKwkJCQlzdXN0YWluKys7CisJCQl9
CisJCQlwbGF5dG9uZSgtMSwgdGltZXZhbCwgc3VzdGFpbik7CisJCQlicmVh
azsKKwkJY2FzZSAnVCc6CisJCQlHRVROVU0oY3AsIHRlbXBvKTsKKwkJCWlm
ICh0ZW1wbyA8IE1JTl9URU1QTyB8fCB0ZW1wbyA+IE1BWF9URU1QTykKKwkJ
CQl0ZW1wbyA9IERGTFRfVEVNUE87CisJCQl3aG9sZSA9ICgxMDAgKiBTRUNT
X1BFUl9NSU4gKiBXSE9MRV9OT1RFKSAvIHRlbXBvOworCQkJYnJlYWs7CisJ
CWNhc2UgJ00nOgorCQkJaWYgKGNwWzFdID09ICdOJyB8fCBjcFsxXSA9PSAn
bicpIHsKKwkJCQlmaWxsID0gTk9STUFMOworCQkJCSsrY3A7CisJCQkJc2xl
bi0tOworCQkJfSBlbHNlIGlmIChjcFsxXSA9PSAnTCcgfHwgY3BbMV0gPT0g
J2wnKSB7CisJCQkJZmlsbCA9IExFR0FUTzsKKwkJCQkrK2NwOworCQkJCXNs
ZW4tLTsKKwkJCX0gZWxzZSBpZiAoY3BbMV0gPT0gJ1MnIHx8IGNwWzFdID09
ICdzJykgeworCQkJCWZpbGwgPSBTVEFDQ0FUTzsKKwkJCQkrK2NwOworCQkJ
CXNsZW4tLTsKKwkJCX0KKwkJCWJyZWFrOwogCQl9Ci0JICAgIH0KLQkgICAg
b2N0cHJlZml4ID0gRkFMU0U7Ci0JICAgIGxhc3RwaXRjaCA9IHBpdGNoOwot
Ci0JICAgIC8qIC4uLndoaWNoIG1heSBpbiB0dXJuIGJlIGZvbGxvd2VkIGJ5
IGFuIG92ZXJyaWRlIHRpbWUgdmFsdWUgKi8KLQkgICAgR0VUTlVNKGNwLCB0
aW1ldmFsKTsKLQkgICAgaWYgKHRpbWV2YWwgPD0gMCB8fCB0aW1ldmFsID4g
TUlOX1ZBTFVFKQotCQl0aW1ldmFsID0gdmFsdWU7Ci0KLQkgICAgLyogLi4u
YW5kL29yIHN1c3RhaW4gZG90cyAqLwotCSAgICBmb3IgKHN1c3RhaW4gPSAw
OyBjcFsxXSA9PSAnLic7IGNwKyspCi0JICAgIHsKLQkJc2xlbi0tOwotCQlz
dXN0YWluKys7Ci0JICAgIH0KLQotCSAgICAvKiAuLi5hbmQvb3IgYSBzbHVy
IG1hcmsgKi8KLQkgICAgb2xkZmlsbCA9IGZpbGw7Ci0JICAgIGlmIChjcFsx
XSA9PSAnXycpCi0JICAgIHsKLQkJZmlsbCA9IExFR0FUTzsKLQkJKytjcDsK
LQkJc2xlbi0tOwotCSAgICB9Ci0KLQkgICAgLyogdGltZSB0byBlbWl0IHRo
ZSBhY3R1YWwgdG9uZSAqLwotCSAgICBwbGF5dG9uZShwaXRjaCwgdGltZXZh
bCwgc3VzdGFpbik7Ci0KLQkgICAgZmlsbCA9IG9sZGZpbGw7Ci0JICAgIGJy
ZWFrOwotCi0JY2FzZSAnTyc6Ci0JICAgIGlmIChjcFsxXSA9PSAnTicgfHwg
Y3BbMV0gPT0gJ24nKQotCSAgICB7Ci0JCW9jdHByZWZpeCA9IG9jdHRyYWNr
ID0gRkFMU0U7Ci0JCSsrY3A7Ci0JCXNsZW4tLTsKLQkgICAgfQotCSAgICBl
bHNlIGlmIChjcFsxXSA9PSAnTCcgfHwgY3BbMV0gPT0gJ2wnKQotCSAgICB7
Ci0JCW9jdHRyYWNrID0gVFJVRTsKLQkJKytjcDsKLQkJc2xlbi0tOwotCSAg
ICB9Ci0JICAgIGVsc2UKLQkgICAgewotCQlHRVROVU0oY3AsIG9jdGF2ZSk7
Ci0JCWlmIChvY3RhdmUgPj0gc2l6ZW9mKHBpdGNodGFiKSAvIHNpemVvZihw
aXRjaHRhYlswXSkgLyBPQ1RBVkVfTk9URVMpCi0JCSAgICBvY3RhdmUgPSBE
RkxUX09DVEFWRTsKLQkJb2N0cHJlZml4ID0gVFJVRTsKLQkgICAgfQotCSAg
ICBicmVhazsKLQotCWNhc2UgJz4nOgotCSAgICBpZiAob2N0YXZlIDwgc2l6
ZW9mKHBpdGNodGFiKSAvIHNpemVvZihwaXRjaHRhYlswXSkgLyBPQ1RBVkVf
Tk9URVMgLSAxKQotCQlvY3RhdmUrKzsKLQkgICAgb2N0cHJlZml4ID0gVFJV
RTsKLQkgICAgYnJlYWs7Ci0KLQljYXNlICc8JzoKLQkgICAgaWYgKG9jdGF2
ZSA+IDApCi0JCW9jdGF2ZS0tOwotCSAgICBvY3RwcmVmaXggPSBUUlVFOwot
CSAgICBicmVhazsKLQotCWNhc2UgJ04nOgotCSAgICBHRVROVU0oY3AsIHBp
dGNoKTsKLQkgICAgZm9yIChzdXN0YWluID0gMDsgY3BbMV0gPT0gJy4nOyBj
cCsrKQotCSAgICB7Ci0JCXNsZW4tLTsKLQkJc3VzdGFpbisrOwotCSAgICB9
Ci0JICAgIG9sZGZpbGwgPSBmaWxsOwotCSAgICBpZiAoY3BbMV0gPT0gJ18n
KQotCSAgICB7Ci0JCWZpbGwgPSBMRUdBVE87Ci0JCSsrY3A7Ci0JCXNsZW4t
LTsKLQkgICAgfQotCSAgICBwbGF5dG9uZShwaXRjaCAtIDEsIHZhbHVlLCBz
dXN0YWluKTsKLQkgICAgZmlsbCA9IG9sZGZpbGw7Ci0JICAgIGJyZWFrOwot
Ci0JY2FzZSAnTCc6Ci0JICAgIEdFVE5VTShjcCwgdmFsdWUpOwotCSAgICBp
ZiAodmFsdWUgPD0gMCB8fCB2YWx1ZSA+IE1JTl9WQUxVRSkKLQkJdmFsdWUg
PSBERkxUX1ZBTFVFOwotCSAgICBicmVhazsKLQotCWNhc2UgJ1AnOgotCWNh
c2UgJ34nOgotCSAgICAvKiB0aGlzIG1heSBiZSBmb2xsb3dlZCBieSBhbiBv
dmVycmlkZSB0aW1lIHZhbHVlICovCi0JICAgIEdFVE5VTShjcCwgdGltZXZh
bCk7Ci0JICAgIGlmICh0aW1ldmFsIDw9IDAgfHwgdGltZXZhbCA+IE1JTl9W
QUxVRSkKLQkJdGltZXZhbCA9IHZhbHVlOwotCSAgICBmb3IgKHN1c3RhaW4g
PSAwOyBjcFsxXSA9PSAnLic7IGNwKyspCi0JICAgIHsKLQkJc2xlbi0tOwot
CQlzdXN0YWluKys7Ci0JICAgIH0KLQkgICAgcGxheXRvbmUoLTEsIHRpbWV2
YWwsIHN1c3RhaW4pOwotCSAgICBicmVhazsKLQotCWNhc2UgJ1QnOgotCSAg
ICBHRVROVU0oY3AsIHRlbXBvKTsKLQkgICAgaWYgKHRlbXBvIDwgTUlOX1RF
TVBPIHx8IHRlbXBvID4gTUFYX1RFTVBPKQotCQl0ZW1wbyA9IERGTFRfVEVN
UE87Ci0JICAgIHdob2xlID0gKDEwMCAqIFNFQ1NfUEVSX01JTiAqIFdIT0xF
X05PVEUpIC8gdGVtcG87Ci0JICAgIGJyZWFrOwotCi0JY2FzZSAnTSc6Ci0J
ICAgIGlmIChjcFsxXSA9PSAnTicgfHwgY3BbMV0gPT0gJ24nKQotCSAgICB7
Ci0JCWZpbGwgPSBOT1JNQUw7Ci0JCSsrY3A7Ci0JCXNsZW4tLTsKLQkgICAg
fQotCSAgICBlbHNlIGlmIChjcFsxXSA9PSAnTCcgfHwgY3BbMV0gPT0gJ2wn
KQotCSAgICB7Ci0JCWZpbGwgPSBMRUdBVE87Ci0JCSsrY3A7Ci0JCXNsZW4t
LTsKLQkgICAgfQotCSAgICBlbHNlIGlmIChjcFsxXSA9PSAnUycgfHwgY3Bb
MV0gPT0gJ3MnKQotCSAgICB7Ci0JCWZpbGwgPSBTVEFDQ0FUTzsKLQkJKytj
cDsKLQkJc2xlbi0tOwotCSAgICB9Ci0JICAgIGJyZWFrOwogCX0KLSAgICB9
CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqIFVOSVggRFJJVkVSIEhPT0tT
IEJFR0lOIEhFUkUgKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCisv
KgorICogKioqKioqKioqKioqKioqKioqIFVOSVggRFJJVkVSIEhPT0tTIEJF
R0lOIEhFUkUgKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMg
c2VjdGlvbiBpbXBsZW1lbnRzIGRyaXZlciBob29rcyB0byBydW4gcGxheXN0
cmluZygpIGFuZCB0aGUgdG9uZSgpLAogICogZW5kdG9uZSgpLCBhbmQgcmVz
dCgpIGZ1bmN0aW9ucyBkZWZpbmVkIGFib3ZlLgogICovCkBAIC00MzIsMTMw
ICs0MTEsMTI1IEBACiBzdGF0aWMgaW50CiBzcGtyb3BlbihkZXYsIGZsYWdz
LCBmbXQsIHRkKQogCXN0cnVjdCBjZGV2ICpkZXY7Ci0JaW50CQlmbGFnczsK
LQlpbnQJCWZtdDsKKwlpbnQgZmxhZ3M7CisJaW50IGZtdDsKIAlzdHJ1Y3Qg
dGhyZWFkCSp0ZDsKIHsKICNpZmRlZiBERUJVRwotICAgICh2b2lkKSBwcmlu
dGYoInNwa3JvcGVuOiBlbnRlcmluZyB3aXRoIGRldiA9ICVzXG4iLCBkZXZ0
b25hbWUoZGV2KSk7CisJKHZvaWQpIHByaW50Zigic3Brcm9wZW46IGVudGVy
aW5nIHdpdGggZGV2ID0gJXNcbiIsIGRldnRvbmFtZShkZXYpKTsKICNlbmRp
ZiAvKiBERUJVRyAqLwogCi0gICAgaWYgKG1pbm9yKGRldikgIT0gMCkKLQly
ZXR1cm4oRU5YSU8pOwotICAgIGVsc2UgaWYgKHNwa3JfYWN0aXZlKQotCXJl
dHVybihFQlVTWSk7Ci0gICAgZWxzZQotICAgIHsKKwlpZiAobWlub3IoZGV2
KSAhPSAwKQorCQlyZXR1cm4oRU5YSU8pOworCWVsc2UgaWYgKHNwa3JfYWN0
aXZlKQorCQlyZXR1cm4oRUJVU1kpOworCWVsc2UgewogI2lmZGVmIERFQlVH
Ci0JKHZvaWQpIHByaW50Zigic3Brcm9wZW46IGFib3V0IHRvIHBlcmZvcm0g
cGxheSBpbml0aWFsaXphdGlvblxuIik7CisJCSh2b2lkKSBwcmludGYoInNw
a3JvcGVuOiBhYm91dCB0byBwZXJmb3JtIHBsYXkgaW5pdGlhbGl6YXRpb25c
biIpOwogI2VuZGlmIC8qIERFQlVHICovCi0JcGxheWluaXQoKTsKLQlzcGty
X2luYnVmID0gbWFsbG9jKERFVl9CU0laRSwgTV9TUEtSLCBNX1dBSVRPSyk7
Ci0Jc3Brcl9hY3RpdmUgPSBUUlVFOwotCXJldHVybigwKTsKLSAgICB9CisJ
CXBsYXlpbml0KCk7CisJCXNwa3JfaW5idWYgPSBtYWxsb2MoREVWX0JTSVpF
LCBNX1NQS1IsIE1fV0FJVE9LKTsKKwkJc3Brcl9hY3RpdmUgPSBUUlVFOwor
CQlyZXR1cm4oMCk7CisgICAgCX0KIH0KIAogc3RhdGljIGludAogc3Brcndy
aXRlKGRldiwgdWlvLCBpb2ZsYWcpCiAJc3RydWN0IGNkZXYgKmRldjsKLQlz
dHJ1Y3QgdWlvCSp1aW87Ci0JaW50CQlpb2ZsYWc7CisJc3RydWN0IHVpbyAq
dWlvOworCWludCBpb2ZsYWc7CiB7CiAjaWZkZWYgREVCVUcKLSAgICBwcmlu
dGYoInNwa3J3cml0ZTogZW50ZXJpbmcgd2l0aCBkZXYgPSAlcywgY291bnQg
PSAlZFxuIiwKKwlwcmludGYoInNwa3J3cml0ZTogZW50ZXJpbmcgd2l0aCBk
ZXYgPSAlcywgY291bnQgPSAlZFxuIiwKIAkJZGV2dG9uYW1lKGRldiksIHVp
by0+dWlvX3Jlc2lkKTsKICNlbmRpZiAvKiBERUJVRyAqLwotCi0gICAgaWYg
KG1pbm9yKGRldikgIT0gMCkKLQlyZXR1cm4oRU5YSU8pOwotICAgIGVsc2Ug
aWYgKHVpby0+dWlvX3Jlc2lkID4gKERFVl9CU0laRSAtIDEpKSAgICAgLyog
cHJldmVudCBzeXN0ZW0gY3Jhc2hlcyAqLwotCXJldHVybihFMkJJRyk7Ci0g
ICAgZWxzZQotICAgIHsKLQl1bnNpZ25lZCBuOwotCWNoYXIgKmNwOwotCWlu
dCBlcnJvcjsKLQotCW4gPSB1aW8tPnVpb19yZXNpZDsKLQljcCA9IHNwa3Jf
aW5idWY7Ci0JZXJyb3IgPSB1aW9tb3ZlKGNwLCBuLCB1aW8pOwotCWlmICgh
ZXJyb3IpIHsKLQkJY3Bbbl0gPSAnXDAnOwotCQlwbGF5c3RyaW5nKGNwLCBu
KTsKLQl9CisJaWYgKG1pbm9yKGRldikgIT0gMCkKKwkJcmV0dXJuKEVOWElP
KTsKKwllbHNlIGlmICh1aW8tPnVpb19yZXNpZCA+IChERVZfQlNJWkUgLSAx
KSkgICAgIC8qIHByZXZlbnQgc3lzdGVtIGNyYXNoZXMgKi8KKwkJcmV0dXJu
KEUyQklHKTsJCisJZWxzZSB7CisJCXVuc2lnbmVkIG47CisJCWNoYXIgKmNw
OworCQlpbnQgZXJyb3I7CisKKwkJbiA9IHVpby0+dWlvX3Jlc2lkOworCQlj
cCA9IHNwa3JfaW5idWY7CisJCWVycm9yID0gdWlvbW92ZShjcCwgbiwgdWlv
KTsKKwkJaWYgKCFlcnJvcikgeworCQkJY3Bbbl0gPSAnXDAnOworCQkJcGxh
eXN0cmluZyhjcCwgbik7CisJCX0KIAlyZXR1cm4oZXJyb3IpOwotICAgIH0K
Kwl9CiB9CiAKIHN0YXRpYyBpbnQKIHNwa3JjbG9zZShkZXYsIGZsYWdzLCBm
bXQsIHRkKQogCXN0cnVjdCBjZGV2ICpkZXY7Ci0JaW50CQlmbGFnczsKLQlp
bnQJCWZtdDsKLQlzdHJ1Y3QgdGhyZWFkCSp0ZDsKKwlpbnQgZmxhZ3M7CisJ
aW50IGZtdDsKKwlzdHJ1Y3QgdGhyZWFkICp0ZDsKIHsKICNpZmRlZiBERUJV
RwotICAgICh2b2lkKSBwcmludGYoInNwa3JjbG9zZTogZW50ZXJpbmcgd2l0
aCBkZXYgPSAlc1xuIiwgZGV2dG9uYW1lKGRldikpOworCSh2b2lkKSBwcmlu
dGYoInNwa3JjbG9zZTogZW50ZXJpbmcgd2l0aCBkZXYgPSAlc1xuIiwgZGV2
dG9uYW1lKGRldikpOwogI2VuZGlmIC8qIERFQlVHICovCiAKLSAgICBpZiAo
bWlub3IoZGV2KSAhPSAwKQotCXJldHVybihFTlhJTyk7Ci0gICAgZWxzZQot
ICAgIHsKLQl3YWtldXAoJmVuZHRvbmUpOwotCXdha2V1cCgmZW5kcmVzdCk7
Ci0JZnJlZShzcGtyX2luYnVmLCBNX1NQS1IpOwotCXNwa3JfYWN0aXZlID0g
RkFMU0U7Ci0JcmV0dXJuKDApOwotICAgIH0KKwlpZiAobWlub3IoZGV2KSAh
PSAwKQorCQlyZXR1cm4oRU5YSU8pOworCWVsc2UgeworCQl3YWtldXAoJmVu
ZHRvbmUpOworCQl3YWtldXAoJmVuZHJlc3QpOworCQlmcmVlKHNwa3JfaW5i
dWYsIE1fU1BLUik7CisJCXNwa3JfYWN0aXZlID0gRkFMU0U7CisJCXJldHVy
bigwKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQKIHNwa3Jpb2N0bChkZXYsIGNt
ZCwgY21kYXJnLCBmbGFncywgdGQpCiAJc3RydWN0IGNkZXYgKmRldjsKLQl1
bnNpZ25lZCBsb25nCWNtZDsKLQljYWRkcl90CQljbWRhcmc7Ci0JaW50CQlm
bGFnczsKLQlzdHJ1Y3QgdGhyZWFkCSp0ZDsKKwl1bnNpZ25lZCBsb25nIGNt
ZDsKKwljYWRkcl90IGNtZGFyZzsKKwlpbnQgZmxhZ3M7CisJc3RydWN0IHRo
cmVhZCAqdGQ7CiB7CiAjaWZkZWYgREVCVUcKLSAgICAodm9pZCkgcHJpbnRm
KCJzcGtyaW9jdGw6IGVudGVyaW5nIHdpdGggZGV2ID0gJXMsIGNtZCA9ICVs
eFxuIiwKLSAgICAJZGV2dG9uYW1lKGRldiksIGNtZCk7CisJKHZvaWQpIHBy
aW50Zigic3BrcmlvY3RsOiBlbnRlcmluZyB3aXRoIGRldiA9ICVzLCBjbWQg
PSAlbHhcbiIsCisgICAgCQlkZXZ0b25hbWUoZGV2KSwgY21kKTsKICNlbmRp
ZiAvKiBERUJVRyAqLwogCi0gICAgaWYgKG1pbm9yKGRldikgIT0gMCkKLQly
ZXR1cm4oRU5YSU8pOwotICAgIGVsc2UgaWYgKGNtZCA9PSBTUEtSVE9ORSkK
LSAgICB7Ci0JdG9uZV90CSp0cCA9ICh0b25lX3QgKiljbWRhcmc7Ci0KLQlp
ZiAodHAtPmZyZXF1ZW5jeSA9PSAwKQotCSAgICByZXN0KHRwLT5kdXJhdGlv
bik7Ci0JZWxzZQotCSAgICB0b25lKHRwLT5mcmVxdWVuY3ksIHRwLT5kdXJh
dGlvbik7Ci0JcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNtZCA9
PSBTUEtSVFVORSkKLSAgICB7Ci0JdG9uZV90ICAqdHAgPSAodG9uZV90ICop
KCooY2FkZHJfdCAqKWNtZGFyZyk7Ci0JdG9uZV90IHR0cDsKLQlpbnQgZXJy
b3I7Ci0KLQlmb3IgKDsgOyB0cCsrKSB7Ci0JICAgIGVycm9yID0gY29weWlu
KHRwLCAmdHRwLCBzaXplb2YodG9uZV90KSk7Ci0JICAgIGlmIChlcnJvcikK
LQkJICAgIHJldHVybihlcnJvcik7Ci0JICAgIGlmICh0dHAuZHVyYXRpb24g
PT0gMCkKLQkJICAgIGJyZWFrOwotCSAgICBpZiAodHRwLmZyZXF1ZW5jeSA9
PSAwKQotCQkgcmVzdCh0dHAuZHVyYXRpb24pOwotCSAgICBlbHNlCi0JCSB0
b25lKHR0cC5mcmVxdWVuY3ksIHR0cC5kdXJhdGlvbik7CisJaWYgKG1pbm9y
KGRldikgIT0gMCkKKwkJcmV0dXJuKEVOWElPKTsKKwllbHNlIGlmIChjbWQg
PT0gU1BLUlRPTkUpIHsKKwkJdG9uZV90CSp0cCA9ICh0b25lX3QgKiljbWRh
cmc7CisKKwkJaWYgKHRwLT5mcmVxdWVuY3kgPT0gMCkKKwkJCXJlc3QodHAt
PmR1cmF0aW9uKTsKKwkJZWxzZQorCQkJdG9uZSh0cC0+ZnJlcXVlbmN5LCB0
cC0+ZHVyYXRpb24pOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGNtZCA9
PSBTUEtSVFVORSkgeworCQl0b25lX3QgICp0cCA9ICh0b25lX3QgKikoKihj
YWRkcl90ICopY21kYXJnKTsKKwkJdG9uZV90IHR0cDsKKwkJaW50IGVycm9y
OworCisJCWZvciAoOyA7IHRwKyspIHsKKwkJCWVycm9yID0gY29weWluKHRw
LCAmdHRwLCBzaXplb2YodG9uZV90KSk7CisJCQlpZiAoZXJyb3IpCisJCQkJ
cmV0dXJuKGVycm9yKTsKKworCQkJaWYgKHR0cC5kdXJhdGlvbiA9PSAwKQor
CQkJCWJyZWFrOworCisJCQlpZiAodHRwLmZyZXF1ZW5jeSA9PSAwKQorCQkJ
CXJlc3QodHRwLmR1cmF0aW9uKTsKKwkJCWVsc2UKKwkJCQl0b25lKHR0cC5m
cmVxdWVuY3ksIHR0cC5kdXJhdGlvbik7CisJCX0KKwkJcmV0dXJuKDApOwog
CX0KLQlyZXR1cm4oMCk7Ci0gICAgfQotICAgIHJldHVybihFSU5WQUwpOwor
CXJldHVybihFSU5WQUwpOwogfQogCiBzdGF0aWMgc3RydWN0IGNkZXYgKnNw
ZWFrZXJfZGV2Owo=

--0-708927677-1209104770=:62765--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?68457.62765.qm>