From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 95438 invoked by alias); 3 Aug 2015 18:00:43 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 95422 invoked by uid 89); 3 Aug 2015 18:00:42 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.2 required=5.0 tests=AWL,BAYES_50,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-wi0-f175.google.com Received: from mail-wi0-f175.google.com (HELO mail-wi0-f175.google.com) (209.85.212.175) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Mon, 03 Aug 2015 18:00:35 +0000 Received: by wibxm9 with SMTP id xm9so132527305wib.0 for ; Mon, 03 Aug 2015 11:00:32 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.194.81.137 with SMTP id a9mr38810807wjy.155.1438624832742; Mon, 03 Aug 2015 11:00:32 -0700 (PDT) Received: by 10.27.11.33 with HTTP; Mon, 3 Aug 2015 11:00:32 -0700 (PDT) Date: Mon, 03 Aug 2015 18:00:00 -0000 Message-ID: Subject: [PATCH v3 1/2] D: Support looking up symbols in the current and imported modules From: Iain Buclaw To: GDB Patches , Doug Evans , Pierre-Marie de Rodat Content-Type: multipart/mixed; boundary=047d7beb9d8e1f0ccc051c6bf2a7 X-IsSubscribed: yes X-SW-Source: 2015-08/txt/msg00040.txt.bz2 --047d7beb9d8e1f0ccc051c6bf2a7 Content-Type: text/plain; charset=UTF-8 Content-length: 444 Third times a charm. Rebased this against master, in particular to make it compatible with the recent block_symbol additions. I don't have a GCC-4.1 compiler at hand, but I don't think I'm doing anything that may trigger build warnings. Pierre, maybe you want to confirm? I've also gotten round to completing the d-exp expression parser rewrite - or at least to a nice stable point. Will be submitting that in patch #2. Regards Iain --- --047d7beb9d8e1f0ccc051c6bf2a7 Content-Type: text/x-patch; charset=US-ASCII; name="dlang-namespace-3.patch" Content-Disposition: attachment; filename="dlang-namespace-3.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_icw80rzd0 Content-length: 27044 LS0tCjIwMTUtMDgtMDMgIElhaW4gQnVjbGF3ICA8aWJ1Y2xhd0BnZGNwcm9q ZWN0Lm9yZz4KCgkqIE1ha2VmaWxlLmluIChTRklMRVMpOiBBZGQgZC1uYW1l c3BhY2UuYy4KCShDT01NT05fT0JTKTogQWRkIGQtbmFtZXNwYWNlLm8uCgkq IGQtbGFuZy5jIChkX2xhbmd1YWdlX2RlZm4pOiBVc2UgZF9sb29rdXBfc3lt Ym9sX25vbmxvY2FsIGFzIHRoZQoJbGFfbG9va3VwX3N5bWJvbF9ub25sb2Nh bCBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyLgoJKiBkLWxhbmcuaCAoZF9s b29rdXBfc3ltYm9sX25vbmxvY2FsKTogTmV3IGRlY2xhcmF0aW9uLgoJKGRf bG9va3VwX25lc3RlZF9zeW1ib2wpOiBOZXcgZGVjbGFyYXRpb24uCgkqIGQt bmFtZXNwYWNlLmM6IE5ldyBmaWxlLgoKLS0tIGEvZ2RiL01ha2VmaWxlLmlu CisrKyBiL2dkYi9NYWtlZmlsZS5pbgpAQCAtODM1LDcgKzgzNSw3IEBAIFNG SUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5jIGFkYS10eXBlcHJpbnQuYyBh ZGEtdmFscHJpbnQuYyBhZGEtdGFza3MuYyBcCiAJY2hhcnNldC5jIGNvbW1v bi9jbGVhbnVwcy5jIGNsaS1vdXQuYyBjb2ZmcmVhZC5jIGNvZmYtcGUtcmVh ZC5jIFwKIAljb21wbGFpbnRzLmMgY29tcGxldGVyLmMgY29udGludWF0aW9u cy5jIGNvcmVmaWxlLmMgY29yZWxvdy5jIFwKIAljcC1hYmkuYyBjcC1zdXBw b3J0LmMgY3AtbmFtZXNwYWNlLmMgY3AtdmFscHJpbnQuYyBcCi0JZC1leHAu eSBkLWxhbmcuYyBkLXZhbHByaW50LmMgXAorCWQtZXhwLnkgZC1sYW5nLmMg ZC1uYW1lc3BhY2UuYyBkLXZhbHByaW50LmMgXAogCWNwLW5hbWUtcGFyc2Vy LnkgXAogCWRieHJlYWQuYyBkZW1hbmdsZS5jIGRpY3Rpb25hcnkuYyBkaXNh c20uYyBkb3VibGVzdC5jIFwKIAlkdHJhY2UtcHJvYmUuYyBkdW1teS1mcmFt ZS5jIFwKQEAgLTEwNjgsNyArMTA2OCw3IEBAIENPTU1PTl9PQlMgPSAkKERF UEZJTEVTKSAkKENPTkZJR19PQlMpICQoWVlPQkopIFwKIAlmcmFtZS1iYXNl Lm8gXAogCWlubGluZS1mcmFtZS5vIFwKIAlnbnUtdjItYWJpLm8gZ251LXYz LWFiaS5vIGNwLWFiaS5vIGNwLXN1cHBvcnQubyBcCi0JY3AtbmFtZXNwYWNl Lm8gXAorCWNwLW5hbWVzcGFjZS5vIGQtbmFtZXNwYWNlLm8gXAogCXJlZ2dy b3Vwcy5vIFwKIAl0cmFkLWZyYW1lLm8gXAogCXRyYW1wLWZyYW1lLm8gXAot LS0gYS9nZGIvZC1sYW5nLmMKKysrIGIvZ2RiL2QtbGFuZy5jCkBAIC0yMTQs NyArMjE0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBsYW5ndWFnZV9kZWZu IGRfbGFuZ3VhZ2VfZGVmbiA9CiAgIGRlZmF1bHRfcmVhZF92YXJfdmFsdWUs CS8qIGxhX3JlYWRfdmFyX3ZhbHVlICovCiAgIE5VTEwsCQkJCS8qIExhbmd1 YWdlIHNwZWNpZmljIHNraXBfdHJhbXBvbGluZS4gICovCiAgICJ0aGlzIiwK LSAgYmFzaWNfbG9va3VwX3N5bWJvbF9ub25sb2NhbCwgCisgIGRfbG9va3Vw X3N5bWJvbF9ub25sb2NhbCwKICAgYmFzaWNfbG9va3VwX3RyYW5zcGFyZW50 X3R5cGUsCiAgIGRfZGVtYW5nbGUsCQkJLyogTGFuZ3VhZ2Ugc3BlY2lmaWMg c3ltYm9sIGRlbWFuZ2xlci4gICovCiAgIE5VTEwsCQkJCS8qIExhbmd1YWdl IHNwZWNpZmljCi0tLSBhL2dkYi9kLWxhbmcuaAorKysgYi9nZGIvZC1sYW5n LmgKQEAgLTY4LDYgKzY4LDE2IEBAIGV4dGVybiBjaGFyICpkX2RlbWFuZ2xl IChjb25zdCBjaGFyICptYW5nbGVkLCBpbnQgb3B0aW9ucyk7CiAKIGV4dGVy biBjb25zdCBzdHJ1Y3QgYnVpbHRpbl9kX3R5cGUgKmJ1aWx0aW5fZF90eXBl IChzdHJ1Y3QgZ2RiYXJjaCAqKTsKIAorLyogRGVmaW5lZCBpbiBkLW5hbWVz cGFjZS5jICAqLworCitleHRlcm4gc3RydWN0IGJsb2NrX3N5bWJvbCBkX2xv b2t1cF9zeW1ib2xfbm9ubG9jYWwgKGNvbnN0IHN0cnVjdCBsYW5ndWFnZV9k ZWZuICosCisJCQkJCQkgICAgIGNvbnN0IGNoYXIgKiwKKwkJCQkJCSAgICAg Y29uc3Qgc3RydWN0IGJsb2NrICosCisJCQkJCQkgICAgIGNvbnN0IGRvbWFp bl9lbnVtKTsKKworZXh0ZXJuIHN0cnVjdCBibG9ja19zeW1ib2wgZF9sb29r dXBfbmVzdGVkX3N5bWJvbCAoc3RydWN0IHR5cGUgKiwgY29uc3QgY2hhciAq LAorCQkJCQkJICAgY29uc3Qgc3RydWN0IGJsb2NrICopOworCiAvKiBEZWZp bmVkIGluIGQtdmFscHJpbnQuYyAgKi8KIAogZXh0ZXJuIHZvaWQgZF92YWxf cHJpbnQgKHN0cnVjdCB0eXBlICp0eXBlLCBjb25zdCBnZGJfYnl0ZSAqdmFs YWRkciwKaW5kZXggMDAwMDAwMC4uMWRmOTAwOQotLS0gL2Rldi9udWxsCisr KyBiL2dkYi9kLW5hbWVzcGFjZS5jCkBAIC0wLDAgKzEsNTYwIEBACisvKiBI ZWxwZXIgcm91dGluZXMgZm9yIEQgc3VwcG9ydCBpbiBHREIuCisKKyAgIENv cHlyaWdodCAoQykgMjAxNC0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJkZWZzLmgi CisjaW5jbHVkZSAic3ltdGFiLmgiCisjaW5jbHVkZSAiYmxvY2suaCIKKyNp bmNsdWRlICJsYW5ndWFnZS5oIgorI2luY2x1ZGUgImQtbGFuZy5oIgorI2lu Y2x1ZGUgImNwLXN1cHBvcnQuaCIKKyNpbmNsdWRlICJnZGJfb2JzdGFjay5o IgorCisvKiBUaGlzIHJldHVybnMgdGhlIGxlbmd0aCBvZiBmaXJzdCBjb21w b25lbnQgb2YgTkFNRSwgd2hpY2ggc2hvdWxkIGJlCisgICB0aGUgZGVtYW5n bGVkIG5hbWUgb2YgYSBEIHZhcmlhYmxlL2Z1bmN0aW9uL21ldGhvZC9ldGMu CisgICBTcGVjaWZpY2FsbHksIGl0IHJldHVybnMgdGhlIGluZGV4IG9mIHRo ZSBmaXJzdCBkb3QgZm9ybWluZyB0aGUKKyAgIGJvdW5kYXJ5IG9mIHRoZSBm aXJzdCBjb21wb25lbnQ6IHNvLCBnaXZlbiAnQS5mb28nIG9yICdBLkIuZm9v JworICAgaXQgcmV0dXJucyB0aGUgMSwgYW5kIGdpdmVuICdmb28nLCBpdCBy ZXR1cm5zIDAuICAqLworCisvKiBUaGUgY2hhcmFjdGVyIGluIE5BTUUgaW5k ZXhlZCBieSB0aGUgcmV0dXJuIHZhbHVlIGlzIGd1YXJhbnRlZWQgdG8KKyAg IGFsd2F5cyBiZSBlaXRoZXIgJy4nIG9yICdcMCcuICAqLworCitzdGF0aWMg dW5zaWduZWQgaW50CitkX2ZpbmRfZmlyc3RfY29tcG9uZW50IChjb25zdCBj aGFyICpuYW1lKQoreworICB1bnNpZ25lZCBpbnQgaW5kZXggPSAwOworCisg IGZvciAoOzsgKytpbmRleCkKKyAgICB7CisgICAgICBpZiAobmFtZVtpbmRl eF0gPT0gJy4nIHx8IG5hbWVbaW5kZXhdID09ICdcMCcpCisJcmV0dXJuIGlu ZGV4OworICAgIH0KK30KKworLyogSWYgTkFNRSBpcyB0aGUgZnVsbHktcXVh bGlmaWVkIG5hbWUgb2YgYSBEIGZ1bmN0aW9uL3ZhcmlhYmxlL21ldGhvZCwK KyAgIHRoaXMgcmV0dXJucyB0aGUgbGVuZ3RoIG9mIGl0cyBlbnRpcmUgcHJl Zml4OiBhbGwgb2YgdGhlIG1vZHVsZXMgYW5kCisgICBjbGFzc2VzIHRoYXQg bWFrZSB1cCBpdHMgbmFtZS4gIEdpdmVuICdBLmZvbycsIGl0IHJldHVybnMg MSwgZ2l2ZW4KKyAgICdBLkIuZm9vJywgaXQgcmV0dXJucyA0LCBnaXZlbiAn Zm9vJywgaXQgcmV0dXJucyAwLiAgKi8KKworc3RhdGljIHVuc2lnbmVkIGlu dAorZF9lbnRpcmVfcHJlZml4X2xlbiAoY29uc3QgY2hhciAqbmFtZSkKK3sK KyAgdW5zaWduZWQgaW50IGN1cnJlbnRfbGVuID0gZF9maW5kX2ZpcnN0X2Nv bXBvbmVudCAobmFtZSk7CisgIHVuc2lnbmVkIGludCBwcmV2aW91c19sZW4g PSAwOworCisgIHdoaWxlIChuYW1lW2N1cnJlbnRfbGVuXSAhPSAnXDAnKQor ICAgIHsKKyAgICAgIGdkYl9hc3NlcnQgKG5hbWVbY3VycmVudF9sZW5dID09 ICcuJyk7CisgICAgICBwcmV2aW91c19sZW4gPSBjdXJyZW50X2xlbjsKKyAg ICAgIC8qIFNraXAgdGhlICcuJyAgKi8KKyAgICAgIGN1cnJlbnRfbGVuKys7 CisgICAgICBjdXJyZW50X2xlbiArPSBkX2ZpbmRfZmlyc3RfY29tcG9uZW50 IChuYW1lICsgY3VycmVudF9sZW4pOworICAgIH0KKworICByZXR1cm4gcHJl dmlvdXNfbGVuOworfQorCisvKiBMb29rIHVwIE5BTUUgaW4gQkxPQ0sncyBz dGF0aWMgYmxvY2sgYW5kIGluIGdsb2JhbCBibG9ja3MuCisgICBJZiBTRUFS Q0ggaXMgbm9uLXplcm8sIHNlYXJjaCB0aHJvdWdoIGJhc2UgY2xhc3NlcyBm b3IgYSBtYXRjaGluZworICAgc3ltYm9sLiAgT3RoZXIgYXJndW1lbnRzIGFy ZSBhcyBpbiBkX2xvb2t1cF9zeW1ib2xfbm9ubG9jYWwuICAqLworCitzdGF0 aWMgc3RydWN0IGJsb2NrX3N5bWJvbAorZF9sb29rdXBfc3ltYm9sIChjb25z dCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgYmxvY2sgKmJsb2NrLAorCQkg Y29uc3QgZG9tYWluX2VudW0gZG9tYWluLCBpbnQgc2VhcmNoKQoreworICBz dHJ1Y3QgYmxvY2tfc3ltYm9sIHN5bTsKKworICBzeW0gPSBsb29rdXBfc3lt Ym9sX2luX3N0YXRpY19ibG9jayAobmFtZSwgYmxvY2ssIGRvbWFpbik7Cisg IGlmIChzeW0uc3ltYm9sICE9IE5VTEwpCisgICAgcmV0dXJuIHN5bTsKKwor ICBzeW0gPSBsb29rdXBfZ2xvYmFsX3N5bWJvbCAobmFtZSwgYmxvY2ssIGRv bWFpbik7CisKKyAgaWYgKHN5bS5zeW1ib2wgIT0gTlVMTCkKKyAgICByZXR1 cm4gc3ltOworCisgIGlmIChzZWFyY2gpCisgICAgeworICAgICAgY2hhciAq Y2xhc3NuYW1lLCAqbmVzdGVkOworICAgICAgdW5zaWduZWQgaW50IHByZWZp eF9sZW47CisgICAgICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cDsKKyAgICAg IHN0cnVjdCBibG9ja19zeW1ib2wgY2xhc3Nfc3ltOworCisgICAgICAvKiBB IHNpbXBsZSBsb29rdXAgZmFpbGVkLiAgQ2hlY2sgaWYgdGhlIHN5bWJvbCB3 YXMgZGVmaW5lZCBpbgorCSBhIGJhc2UgY2xhc3MuICAqLworCisgICAgICBj bGVhbnVwID0gbWFrZV9jbGVhbnVwIChudWxsX2NsZWFudXAsIE5VTEwpOwor CisgICAgICAvKiBGaW5kIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBhbmQgdGhl IG5hbWUgb2YgdGhlIG1ldGhvZCwKKwkgdmFyaWFibGUsIGV0Yy4gICovCisg ICAgICBwcmVmaXhfbGVuID0gZF9lbnRpcmVfcHJlZml4X2xlbiAobmFtZSk7 CisKKyAgICAgIC8qIElmIG5vIHByZWZpeCB3YXMgZm91bmQsIHNlYXJjaCAi dGhpcyIuICAqLworICAgICAgaWYgKHByZWZpeF9sZW4gPT0gMCkKKwl7CisJ ICBzdHJ1Y3QgdHlwZSAqdHlwZTsKKwkgIHN0cnVjdCBibG9ja19zeW1ib2wg bGFuZ190aGlzOworCisJICBsYW5nX3RoaXMgPSBsb29rdXBfbGFuZ3VhZ2Vf dGhpcyAobGFuZ3VhZ2VfZGVmIChsYW5ndWFnZV9kKSwgYmxvY2spOworCSAg aWYgKGxhbmdfdGhpcy5zeW1ib2wgPT0gTlVMTCkKKwkgICAgeworCSAgICAg IGRvX2NsZWFudXBzIChjbGVhbnVwKTsKKwkgICAgICByZXR1cm4gKHN0cnVj dCBibG9ja19zeW1ib2wpIHtOVUxMLCBOVUxMfTsKKwkgICAgfQorCisJICB0 eXBlID0gY2hlY2tfdHlwZWRlZiAoVFlQRV9UQVJHRVRfVFlQRSAoU1lNQk9M X1RZUEUgKGxhbmdfdGhpcy5zeW1ib2wpKSk7CisJICBjbGFzc25hbWUgPSB4 c3RyZHVwIChUWVBFX05BTUUgKHR5cGUpKTsKKwkgIG5lc3RlZCA9IHhzdHJk dXAgKG5hbWUpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBUaGUgY2xh c3MgbmFtZSBpcyBldmVyeXRoaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcgUFJF RklYX0xFTi4gICovCisJICBjbGFzc25hbWUgPSBzYXZlc3RyaW5nIChuYW1l LCBwcmVmaXhfbGVuKTsKKworCSAgLyogVGhlIHJlc3Qgb2YgdGhlIG5hbWUg aXMgZXZlcnl0aGluZyBlbHNlIHBhc3QgdGhlIGluaXRpYWwgc2NvcGUKKwkg ICAgIG9wZXJhdG9yLiAgKi8KKwkgIG5lc3RlZCA9IHhzdHJkdXAgKG5hbWUg KyBwcmVmaXhfbGVuICsgMSk7CisJfQorCisgICAgICAvKiBBZGQgY2xlYW51 cHMgdG8gZnJlZSBtZW1vcnkgZm9yIHRoZXNlIHN0cmluZ3MuICAqLworICAg ICAgbWFrZV9jbGVhbnVwICh4ZnJlZSwgY2xhc3NuYW1lKTsKKyAgICAgIG1h a2VfY2xlYW51cCAoeGZyZWUsIG5lc3RlZCk7CisKKyAgICAgIC8qIExvb2t1 cCBhIGNsYXNzIG5hbWVkIENMQVNTTkFNRS4gIElmIG5vbmUgaXMgZm91bmQs IHRoZXJlIGlzIG5vdGhpbmcKKwkgbW9yZSB0aGF0IGNhbiBiZSBkb25lLiAg Ki8KKyAgICAgIGNsYXNzX3N5bSA9IGxvb2t1cF9nbG9iYWxfc3ltYm9sIChj bGFzc25hbWUsIGJsb2NrLCBkb21haW4pOworICAgICAgaWYgKGNsYXNzX3N5 bS5zeW1ib2wgPT0gTlVMTCkKKwl7CisJICBkb19jbGVhbnVwcyAoY2xlYW51 cCk7CisJICByZXR1cm4gKHN0cnVjdCBibG9ja19zeW1ib2wpIHtOVUxMLCBO VUxMfTsKKwl9CisKKyAgICAgIC8qIExvb2sgZm9yIGEgc3ltYm9sIG5hbWVk IE5FU1RFRCBpbiB0aGlzIGNsYXNzLiAgKi8KKyAgICAgIHN5bSA9IGRfbG9v a3VwX25lc3RlZF9zeW1ib2wgKFNZTUJPTF9UWVBFIChjbGFzc19zeW0uc3lt Ym9sKSwKKwkJCQkgICAgbmVzdGVkLCBibG9jayk7CisgICAgICBkb19jbGVh bnVwcyAoY2xlYW51cCk7CisgICAgfQorCisgIHJldHVybiBzeW07Cit9CisK Ky8qIExvb2sgdXAgTkFNRSBpbiB0aGUgRCBtb2R1bGUgTU9EVUxFLiAgT3Ro ZXIgYXJndW1lbnRzIGFyZSBhcyBpbgorICAgZF9sb29rdXBfc3ltYm9sX25v bmxvY2FsLiAgSWYgU0VBUkNIIGlzIG5vbi16ZXJvLCBzZWFyY2ggdGhyb3Vn aAorICAgYmFzZSBjbGFzc2VzIGZvciBhIG1hdGNoaW5nIHN5bWJvbC4gICov CisKK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfc3ltYm9sCitkX2xvb2t1cF9zeW1i b2xfaW5fbW9kdWxlIChjb25zdCBjaGFyICptb2R1bGUsIGNvbnN0IGNoYXIg Km5hbWUsCisJCQkgICBjb25zdCBzdHJ1Y3QgYmxvY2sgKmJsb2NrLAorCQkJ ICAgY29uc3QgZG9tYWluX2VudW0gZG9tYWluLCBpbnQgc2VhcmNoKQorewor ICBjaGFyICpjb25jYXRlbmF0ZWRfbmFtZSA9IE5VTEw7CisKKyAgaWYgKG1v ZHVsZVswXSAhPSAnXDAnKQorICAgIHsKKyAgICAgIGNvbmNhdGVuYXRlZF9u YW1lID0gYWxsb2NhIChzdHJsZW4gKG1vZHVsZSkKKwkJCQkgICsgc3RybGVu IChuYW1lKSArIDIpOworICAgICAgc3RyY3B5IChjb25jYXRlbmF0ZWRfbmFt ZSwgbW9kdWxlKTsKKyAgICAgIHN0cmNhdCAoY29uY2F0ZW5hdGVkX25hbWUs ICIuIik7CisgICAgICBzdHJjYXQgKGNvbmNhdGVuYXRlZF9uYW1lLCBuYW1l KTsKKyAgICAgIG5hbWUgPSBjb25jYXRlbmF0ZWRfbmFtZTsKKyAgICB9CisK KyAgcmV0dXJuIGRfbG9va3VwX3N5bWJvbCAobmFtZSwgYmxvY2ssIGRvbWFp biwgc2VhcmNoKTsKK30KKworLyogTG9va3VwIE5BTUUgYXQgbW9kdWxlIHNj b3BlLiAgU0NPUEUgaXMgdGhlIG1vZHVsZSB0aGF0IHRoZSBjdXJyZW50Cisg ICBmdW5jdGlvbiBpcyBkZWZpbmVkIHdpdGhpbjsgb25seSBjb25zaWRlciBt b2R1bGVzIHdob3NlIGxlbmd0aCBpcyBhdAorICAgbGVhc3QgU0NPUEVfTEVO LiAgT3RoZXIgYXJndW1lbnRzIGFyZSBhcyBpbiBkX2xvb2t1cF9zeW1ib2xf bm9ubG9jYWwuCisKKyAgIEZvciBleGFtcGxlLCBpZiB3ZSdyZSB3aXRoaW4g YSBmdW5jdGlvbiBBLkIuZiBhbmQgbG9va2luZyBmb3IgYQorICAgc3ltYm9s IHgsIHRoaXMgd2lsbCBnZXQgY2FsbGVkIHdpdGggTkFNRSA9ICJ4IiwgU0NP UEUgPSAiQS5CIiwgYW5kCisgICBTQ09QRV9MRU4gPSAwLiAgSXQgdGhlbiBj YWxscyBpdHNlbGYgd2l0aCBOQU1FIGFuZCBTQ09QRSB0aGUgc2FtZSwKKyAg IGJ1dCB3aXRoIFNDT1BFX0xFTiA9IDEuICBBbmQgdGhlbiBpdCBjYWxscyBp dHNlbGYgd2l0aCBOQU1FIGFuZAorICAgU0NPUEUgdGhlIHNhbWUsIGJ1dCB3 aXRoIFNDT1BFX0xFTiA9IDQuICBUaGlzIHRoaXJkIGNhbGwgbG9va3MgZm9y CisgICAiQS5CLngiOyBpZiBpdCBkb2Vzbid0IGZpbmQgaXQsIHRoZW4gdGhl IHNlY29uZCBjYWxsIGxvb2tzIGZvciAiQS54IiwKKyAgIGFuZCBpZiB0aGF0 IGNhbGwgZmFpbHMsIHRoZW4gdGhlIGZpcnN0IGNhbGwgbG9va3MgZm9yICJ4 Ii4gICovCisKK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfc3ltYm9sCitsb29rdXBf bW9kdWxlX3Njb3BlIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3Qg YmxvY2sgKmJsb2NrLAorCQkgICAgIGNvbnN0IGRvbWFpbl9lbnVtIGRvbWFp biwgY29uc3QgY2hhciAqc2NvcGUsCisJCSAgICAgaW50IHNjb3BlX2xlbikK K3sKKyAgY2hhciAqbW9kdWxlOworCisgIGlmIChzY29wZVtzY29wZV9sZW5d ICE9ICdcMCcpCisgICAgeworICAgICAgLyogUmVjdXJzaXZlbHkgc2VhcmNo IGZvciBuYW1lcyBpbiBjaGlsZCBtb2R1bGVzIGZpcnN0LiAgKi8KKworICAg ICAgc3RydWN0IGJsb2NrX3N5bWJvbCBzeW07CisgICAgICBpbnQgbmV3X3Nj b3BlX2xlbiA9IHNjb3BlX2xlbjsKKworICAgICAgLyogSWYgdGhlIGN1cnJl bnQgc2NvcGUgaXMgZm9sbG93ZWQgYnkgIi4iLCBza2lwIHBhc3QgdGhhdC4g ICovCisgICAgICBpZiAobmV3X3Njb3BlX2xlbiAhPSAwKQorCXsKKwkgIGdk Yl9hc3NlcnQgKHNjb3BlW25ld19zY29wZV9sZW5dID09ICcuJyk7CisJICBu ZXdfc2NvcGVfbGVuKys7CisJfQorICAgICAgbmV3X3Njb3BlX2xlbiArPSBk X2ZpbmRfZmlyc3RfY29tcG9uZW50IChzY29wZSArIG5ld19zY29wZV9sZW4p OworICAgICAgc3ltID0gbG9va3VwX21vZHVsZV9zY29wZSAobmFtZSwgYmxv Y2ssIGRvbWFpbiwKKwkJCQkgc2NvcGUsIG5ld19zY29wZV9sZW4pOworICAg ICAgaWYgKHN5bS5zeW1ib2wgIT0gTlVMTCkKKwlyZXR1cm4gc3ltOworICAg IH0KKworICAvKiBPa2F5LCB3ZSBkaWRuJ3QgZmluZCBhIG1hdGNoIGluIG91 ciBjaGlsZHJlbiwgc28gbG9vayBmb3IgdGhlCisgICAgIG5hbWUgaW4gdGhl IGN1cnJlbnQgbW9kdWxlLiAgKi8KKworICBtb2R1bGUgPSBhbGxvY2EgKHNj b3BlX2xlbiArIDEpOworICBzdHJuY3B5IChtb2R1bGUsIHNjb3BlLCBzY29w ZV9sZW4pOworICBtb2R1bGVbc2NvcGVfbGVuXSA9ICdcMCc7CisgIHJldHVy biBkX2xvb2t1cF9zeW1ib2xfaW5fbW9kdWxlIChtb2R1bGUsIG5hbWUsCisJ CQkJICAgIGJsb2NrLCBkb21haW4sIDEpOworfQorCisvKiBTZWFyY2ggdGhy b3VnaCB0aGUgYmFzZSBjbGFzc2VzIG9mIFBBUkVOVF9UWVBFIGZvciBhIHN5 bWJvbCBuYW1lZAorICAgTkFNRSBpbiBibG9jayBCTE9DSy4gICovCisKK3N0 YXRpYyBzdHJ1Y3QgYmxvY2tfc3ltYm9sCitmaW5kX3N5bWJvbF9pbl9iYXNl Y2xhc3MgKHN0cnVjdCB0eXBlICpwYXJlbnRfdHlwZSwgY29uc3QgY2hhciAq bmFtZSwKKwkJCSAgY29uc3Qgc3RydWN0IGJsb2NrICpibG9jaykKK3sKKyAg Y2hhciAqY29uY2F0ZW5hdGVkX25hbWUgPSBOVUxMOworICBzdHJ1Y3QgYmxv Y2tfc3ltYm9sIHN5bTsKKyAgc3RydWN0IGNsZWFudXAgKmNsZWFudXA7Cisg IGludCBpOworCisgIGNsZWFudXAgPSBtYWtlX2NsZWFudXAgKGZyZWVfY3Vy cmVudF9jb250ZW50cywgJmNvbmNhdGVuYXRlZF9uYW1lKTsKKworICBmb3Ig KGkgPSAwOyBpIDwgVFlQRV9OX0JBU0VDTEFTU0VTIChwYXJlbnRfdHlwZSk7 ICsraSkKKyAgICB7CisgICAgICBzaXplX3QgbGVuOworICAgICAgc3RydWN0 IHR5cGUgKmJhc2VfdHlwZSA9IFRZUEVfQkFTRUNMQVNTIChwYXJlbnRfdHlw ZSwgaSk7CisgICAgICBjb25zdCBjaGFyICpiYXNlX25hbWUgPSBUWVBFX0JB U0VDTEFTU19OQU1FIChwYXJlbnRfdHlwZSwgaSk7CisKKyAgICAgIGlmIChi YXNlX25hbWUgPT0gTlVMTCkKKwljb250aW51ZTsKKworICAgICAgLyogU2Vh cmNoIHRoaXMgcGFydGljdWxhciBiYXNlIGNsYXNzLiAgKi8KKyAgICAgIHN5 bSA9IGRfbG9va3VwX3N5bWJvbF9pbl9tb2R1bGUgKGJhc2VfbmFtZSwgbmFt ZSwgYmxvY2ssCisJCQkJICAgICAgIFZBUl9ET01BSU4sIDApOworICAgICAg aWYgKHN5bS5zeW1ib2wgIT0gTlVMTCkKKwlicmVhazsKKworICAgICAgLyog Tm93IHNlYXJjaCBhbGwgc3RhdGljIGZpbGUtbGV2ZWwgc3ltYm9scy4gIFdl IGhhdmUgdG8gZG8gdGhpcyBmb3IKKwkgdGhpbmdzIGxpa2UgdHlwZWRlZnMg aW4gdGhlIGNsYXNzLiAgRmlyc3Qgc2VhcmNoIGluIHRoaXMgc3ltdGFiLAor CSB3aGF0IHdlIHdhbnQgaXMgcG9zc2libHkgdGhlcmUuICAqLworICAgICAg bGVuID0gc3RybGVuIChiYXNlX25hbWUpICsgc3RybGVuIChuYW1lKSArIDI7 CisgICAgICBjb25jYXRlbmF0ZWRfbmFtZSA9IHhyZWFsbG9jIChjb25jYXRl bmF0ZWRfbmFtZSwgbGVuKTsKKyAgICAgIHhzbnByaW50ZiAoY29uY2F0ZW5h dGVkX25hbWUsIGxlbiwgIiVzLiVzIiwgYmFzZV9uYW1lLCBuYW1lKTsKKyAg ICAgIHN5bSA9IGxvb2t1cF9zeW1ib2xfaW5fc3RhdGljX2Jsb2NrIChjb25j YXRlbmF0ZWRfbmFtZSwgYmxvY2ssCisJCQkJCSAgIFZBUl9ET01BSU4pOwor ICAgICAgaWYgKHN5bS5zeW1ib2wgIT0gTlVMTCkKKwlicmVhazsKKworICAg ICAgLyogTm9wZS4gIFdlIG5vdyBoYXZlIHRvIHNlYXJjaCBhbGwgc3RhdGlj IGJsb2NrcyBpbiBhbGwgb2JqZmlsZXMsCisJIGV2ZW4gaWYgYmxvY2sgIT0g TlVMTCwgYmVjYXVzZSB0aGVyZSdzIG5vIGd1YXJhbnRlZXMgYXMgdG8gd2hp Y2gKKwkgc3ltdGFiIHRoZSBzeW1ib2wgd2Ugd2FudCBpcyBpbi4gICovCisg ICAgICBzeW0gPSBsb29rdXBfc3RhdGljX3N5bWJvbCAoY29uY2F0ZW5hdGVk X25hbWUsIFZBUl9ET01BSU4pOworICAgICAgaWYgKHN5bS5zeW1ib2wgIT0g TlVMTCkKKwlicmVhazsKKworICAgICAgLyogSWYgdGhpcyBjbGFzcyBoYXMg YmFzZSBjbGFzc2VzLCBzZWFyY2ggdGhlbSBuZXh0LiAgKi8KKyAgICAgIGJh c2VfdHlwZSA9IGNoZWNrX3R5cGVkZWYgKGJhc2VfdHlwZSk7CisgICAgICBp ZiAoVFlQRV9OX0JBU0VDTEFTU0VTIChiYXNlX3R5cGUpID4gMCkKKwl7CisJ ICBzeW0gPSBmaW5kX3N5bWJvbF9pbl9iYXNlY2xhc3MgKGJhc2VfdHlwZSwg bmFtZSwgYmxvY2spOworCSAgaWYgKHN5bS5zeW1ib2wgIT0gTlVMTCkKKwkg ICAgYnJlYWs7CisJfQorICAgIH0KKworICBkb19jbGVhbnVwcyAoY2xlYW51 cCk7CisgIHJldHVybiBzeW07Cit9CisKKy8qIExvb2sgdXAgYSBzeW1ib2wg bmFtZWQgTkVTVEVEX05BTUUgdGhhdCBpcyBuZXN0ZWQgaW5zaWRlIHRoZSBE CisgICBjbGFzcyBvciBtb2R1bGUgZ2l2ZW4gYnkgUEFSRU5UX1RZUEUsIGZy b20gd2l0aGluIHRoZSBjb250ZXh0CisgICBnaXZlbiBieSBCTE9DSy4gIFJl dHVybiBOVUxMIGlmIHRoZXJlIGlzIG5vIHN1Y2ggbmVzdGVkIHR5cGUuICAq LworCitzdHJ1Y3QgYmxvY2tfc3ltYm9sCitkX2xvb2t1cF9uZXN0ZWRfc3lt Ym9sIChzdHJ1Y3QgdHlwZSAqcGFyZW50X3R5cGUsCisJCQljb25zdCBjaGFy ICpuZXN0ZWRfbmFtZSwKKwkJCWNvbnN0IHN0cnVjdCBibG9jayAqYmxvY2sp Cit7CisgIC8qIHR5cGVfbmFtZV9ub190YWdfcmVxdWlyZWQgcHJvdmlkZXMg YmV0dGVyIGVycm9yIHJlcG9ydGluZyB1c2luZyB0aGUKKyAgICAgb3JpZ2lu YWwgdHlwZS4gICovCisgIHN0cnVjdCB0eXBlICpzYXZlZF9wYXJlbnRfdHlw ZSA9IHBhcmVudF90eXBlOworCisgIHBhcmVudF90eXBlID0gY2hlY2tfdHlw ZWRlZiAocGFyZW50X3R5cGUpOworCisgIHN3aXRjaCAoVFlQRV9DT0RFIChw YXJlbnRfdHlwZSkpCisgICAgeworICAgIGNhc2UgVFlQRV9DT0RFX1NUUlVD VDoKKyAgICBjYXNlIFRZUEVfQ09ERV9VTklPTjoKKyAgICBjYXNlIFRZUEVf Q09ERV9NT0RVTEU6CisJeworCSAgaW50IHNpemU7CisJICBjb25zdCBjaGFy ICpwYXJlbnRfbmFtZSA9IHR5cGVfbmFtZV9ub190YWdfb3JfZXJyb3IgKHNh dmVkX3BhcmVudF90eXBlKTsKKwkgIHN0cnVjdCBibG9ja19zeW1ib2wgc3lt CisJICAgID0gZF9sb29rdXBfc3ltYm9sX2luX21vZHVsZSAocGFyZW50X25h bWUsIG5lc3RlZF9uYW1lLAorCQkJCQkgYmxvY2ssIFZBUl9ET01BSU4sIDAp OworCSAgY2hhciAqY29uY2F0ZW5hdGVkX25hbWU7CisKKwkgIGlmIChzeW0u c3ltYm9sICE9IE5VTEwpCisJICAgIHJldHVybiBzeW07CisKKwkgIC8qIE5v dyBzZWFyY2ggYWxsIHN0YXRpYyBmaWxlLWxldmVsIHN5bWJvbHMuICBXZSBo YXZlIHRvIGRvIHRoaXMKKwkgICAgIGZvciB0aGluZ3MgbGlrZSB0eXBlZGVm cyBpbiB0aGUgY2xhc3MuICBXZSBkbyBub3QgdHJ5IHRvCisJICAgICBndWVz cyBhbnkgaW1wb3J0ZWQgbW9kdWxlIGFzIGV2ZW4gdGhlIGZ1bGx5IHNwZWNp ZmllZAorCSAgICAgbW9kdWxlIHNlYXJjaCBpcyBhbHJlYWR5IG5vdCBEIGNv bXBsaWFudCBhbmQgbW9yZSBhc3N1bXB0aW9ucworCSAgICAgY291bGQgbWFr ZSBpdCB0b28gbWFnaWMuICAqLworCSAgc2l6ZSA9IHN0cmxlbiAocGFyZW50 X25hbWUpICsgc3RybGVuIChuZXN0ZWRfbmFtZSkgKyAyOworCSAgY29uY2F0 ZW5hdGVkX25hbWUgPSBhbGxvY2EgKHNpemUpOworCisJICB4c25wcmludGYg KGNvbmNhdGVuYXRlZF9uYW1lLCBzaXplLCAiJXMuJXMiLAorCQkgICAgIHBh cmVudF9uYW1lLCBuZXN0ZWRfbmFtZSk7CisKKwkgIHN5bSA9IGxvb2t1cF9z dGF0aWNfc3ltYm9sIChjb25jYXRlbmF0ZWRfbmFtZSwgVkFSX0RPTUFJTik7 CisJICBpZiAoc3ltLnN5bWJvbCAhPSBOVUxMKQorCSAgICByZXR1cm4gc3lt OworCisJICAvKiBJZiBubyBtYXRjaGluZyBzeW1ib2xzIHdlcmUgZm91bmQs IHRyeSBzZWFyY2hpbmcgYW55CisJICAgICBiYXNlIGNsYXNzZXMuICAqLwor CSAgcmV0dXJuIGZpbmRfc3ltYm9sX2luX2Jhc2VjbGFzcyAocGFyZW50X3R5 cGUsIG5lc3RlZF9uYW1lLCBibG9jayk7CisJfQorCisgICAgY2FzZSBUWVBF X0NPREVfRlVOQzoKKyAgICBjYXNlIFRZUEVfQ09ERV9NRVRIT0Q6CisgICAg ICByZXR1cm4gKHN0cnVjdCBibG9ja19zeW1ib2wpIHtOVUxMLCBOVUxMfTsK KworICAgIGRlZmF1bHQ6CisgICAgICBnZGJfYXNzZXJ0X25vdF9yZWFjaGVk ICgiY2FsbGVkIHdpdGggbm9uLWFnZ3JlZ2F0ZSB0eXBlLiIpOworICAgIH0K K30KKworLyogVXNlZCBmb3IgY2xlYW51cHMgdG8gcmVzZXQgdGhlICJzZWFy Y2hlZCIgZmxhZyBpbmNhc2UKKyAgIG9mIGFuIGVycm9yLiAgKi8KKworc3Rh dGljIHZvaWQKK3Jlc2V0X2RpcmVjdGl2ZV9zZWFyY2hlZCAodm9pZCAqZGF0 YSkKK3sKKyAgc3RydWN0IHVzaW5nX2RpcmVjdCAqZGlyZWN0ID0gZGF0YTsK KyAgZGlyZWN0LT5zZWFyY2hlZCA9IDA7Cit9CisKKy8qIFNlYXJjaCBmb3Ig TkFNRSBieSBhcHBseWluZyBhbGwgaW1wb3J0IHN0YXRlbWVudHMgYmVsb25n aW5nIHRvCisgICBCTE9DSyB3aGljaCBhcmUgYXBwbGljYWJsZSBpbiBTQ09Q RS4KKworICAgSWYgU0VBUkNIX1BBUkVOVFMgdGhlIHNlYXJjaCB3aWxsIGlu Y2x1ZGUgaW1wb3J0cyB3aGljaCBhcmUKKyAgIGFwcGxpY2FibGUgaW4gcGFy ZW50cyBvZiBTQ09QRS4KKyAgIEV4YW1wbGU6CisKKyAgICAgbW9kdWxlIEE7 CisgICAgIGltcG9ydCBYOworICAgICB2b2lkIEIoKSB7CisgICAgICAgaW1w b3J0IFk7CisgICAgIH0KKworICAgSWYgU0NPUEUgaXMgIkEuQiIgYW5kIFNF QVJDSF9QQVJFTlRTIGlzIHRydWUsIHRoZSBpbXBvcnRzIG9mCisgICBtb2R1 bGVzIFggYW5kIFkgd2lsbCBiZSBjb25zaWRlcmVkLiAgSWYgU0VBUkNIX1BB UkVOVFMgaXMgZmFsc2UKKyAgIG9ubHkgdGhlIGltcG9ydCBvZiBZIGlzIGNv bnNpZGVyZWQuICAqLworCitzdGF0aWMgc3RydWN0IGJsb2NrX3N5bWJvbAor ZF9sb29rdXBfc3ltYm9sX2ltcG9ydHMgKGNvbnN0IGNoYXIgKnNjb3BlLCBj b25zdCBjaGFyICpuYW1lLAorCQkJIGNvbnN0IHN0cnVjdCBibG9jayAqYmxv Y2ssCisJCQkgY29uc3QgZG9tYWluX2VudW0gZG9tYWluLAorCQkJIGNvbnN0 IGludCBzZWFyY2hfcGFyZW50cykKK3sKKyAgc3RydWN0IHVzaW5nX2RpcmVj dCAqY3VycmVudDsKKyAgc3RydWN0IGJsb2NrX3N5bWJvbCBzeW07CisgIGlu dCBkaXJlY3RpdmVfbWF0Y2g7CisgIHN0cnVjdCBjbGVhbnVwICpzZWFyY2hl ZF9jbGVhbnVwOworCisgIC8qIEZpcnN0LCB0cnkgdG8gZmluZCB0aGUgc3lt Ym9sIGluIHRoZSBnaXZlbiBtb2R1bGUuICAqLworICBzeW0gPSBkX2xvb2t1 cF9zeW1ib2xfaW5fbW9kdWxlIChzY29wZSwgbmFtZSwgYmxvY2ssIGRvbWFp biwgMSk7CisKKyAgaWYgKHN5bS5zeW1ib2wgIT0gTlVMTCkKKyAgICByZXR1 cm4gc3ltOworCisgIC8qIEdvIHRocm91Z2ggdGhlIHVzaW5nIGRpcmVjdGl2 ZXMuICBJZiBhbnkgb2YgdGhlbSBhZGQgbmV3IG5hbWVzIHRvCisgICAgIHRo ZSBtb2R1bGUgd2UncmUgc2VhcmNoaW5nIGluLCBzZWUgaWYgd2UgY2FuIGZp bmQgYSBtYXRjaCBieQorICAgICBhcHBseWluZyB0aGVtLiAgKi8KKworICBm b3IgKGN1cnJlbnQgPSBibG9ja191c2luZyAoYmxvY2spOworICAgICAgIGN1 cnJlbnQgIT0gTlVMTDsKKyAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4 dCkKKyAgICB7CisgICAgICBjb25zdCBjaGFyICoqZXhjbHVkZXA7CisgICAg ICBpbnQgbGVuID0gc3RybGVuIChjdXJyZW50LT5pbXBvcnRfZGVzdCk7CisK KyAgICAgIGRpcmVjdGl2ZV9tYXRjaCA9IChzZWFyY2hfcGFyZW50cworCQkJ ID8gKHN0cm5jbXAgKHNjb3BlLCBjdXJyZW50LT5pbXBvcnRfZGVzdCwgbGVu KSA9PSAwCisJCQkgICAgJiYgKGxlbiA9PSAwCisJCQkJfHwgc2NvcGVbbGVu XSA9PSAnLicKKwkJCQl8fCBzY29wZVtsZW5dID09ICdcMCcpKQorCQkJIDog c3RyY21wIChzY29wZSwgY3VycmVudC0+aW1wb3J0X2Rlc3QpID09IDApOwor CisgICAgICAvKiBJZiB0aGUgaW1wb3J0IGRlc3RpbmF0aW9uIGlzIHRoZSBj dXJyZW50IHNjb3BlIG9yIG9uZSBvZiBpdHMKKwkgYW5jZXN0b3JzIHRoZW4g aXQgaXMgYXBwbGljYWJsZS4gICovCisgICAgICBpZiAoZGlyZWN0aXZlX21h dGNoICYmICFjdXJyZW50LT5zZWFyY2hlZCkKKwl7CisJICAvKiBNYXJrIHRo aXMgaW1wb3J0IGFzIHNlYXJjaGVkIHNvIHRoYXQgdGhlIHJlY3Vyc2l2ZSBj YWxsCisJICAgICBkb2VzIG5vdCBzZWFyY2ggaXQgYWdhaW4uICAqLworCSAg Y3VycmVudC0+c2VhcmNoZWQgPSAxOworCSAgc2VhcmNoZWRfY2xlYW51cCA9 IG1ha2VfY2xlYW51cCAocmVzZXRfZGlyZWN0aXZlX3NlYXJjaGVkLAorCQkJ CQkgICBjdXJyZW50KTsKKworCSAgLyogSWYgdGhlcmUgaXMgYW4gaW1wb3J0 IG9mIGEgc2luZ2xlIGRlY2xhcmF0aW9uLCBjb21wYXJlIHRoZQorCSAgICAg aW1wb3J0ZWQgZGVjbGFyYXRpb24gKGFmdGVyIG9wdGlvbmFsIHJlbmFtaW5n IGJ5IGl0cyBhbGlhcykKKwkgICAgIHdpdGggdGhlIHNvdWdodCBvdXQgbmFt ZS4gIElmIHRoZXJlIGlzIGEgbWF0Y2ggcGFzcworCSAgICAgY3VycmVudC0+ aW1wb3J0X3NyYyBhcyBNT0RVTEUgdG8gZGlyZWN0IHRoZSBzZWFyY2ggdG93 YXJkcworCSAgICAgdGhlIGltcG9ydGVkIG1vZHVsZS4gICovCisJICBpZiAo Y3VycmVudC0+ZGVjbGFyYXRpb24KKwkgICAgICAmJiBzdHJjbXAgKG5hbWUs IGN1cnJlbnQtPmFsaWFzCisJCQkgPyBjdXJyZW50LT5hbGlhcyA6IGN1cnJl bnQtPmRlY2xhcmF0aW9uKSA9PSAwKQorCSAgICBzeW0gPSBkX2xvb2t1cF9z eW1ib2xfaW5fbW9kdWxlIChjdXJyZW50LT5pbXBvcnRfc3JjLAorCQkJCQkg ICAgIGN1cnJlbnQtPmRlY2xhcmF0aW9uLAorCQkJCQkgICAgIGJsb2NrLCBk b21haW4sIDEpOworCisJICAvKiBJZiBhIHN5bWJvbCB3YXMgZm91bmQgb3Ig dGhpcyBpbXBvcnQgc3RhdGVtZW50IHdhcyBhbiBpbXBvcnQKKwkgICAgIGRl Y2xhcmF0aW9uLCB0aGUgc2VhcmNoIG9mIHRoaXMgaW1wb3J0IGlzIGNvbXBs ZXRlLiAgKi8KKwkgIGlmIChzeW0uc3ltYm9sICE9IE5VTEwgfHwgY3VycmVu dC0+ZGVjbGFyYXRpb24pCisJICAgIHsKKwkgICAgICBjdXJyZW50LT5zZWFy Y2hlZCA9IDA7CisJICAgICAgZGlzY2FyZF9jbGVhbnVwcyAoc2VhcmNoZWRf Y2xlYW51cCk7CisKKwkgICAgICBpZiAoc3ltLnN5bWJvbCAhPSBOVUxMKQor CQlyZXR1cm4gc3ltOworCisJICAgICAgY29udGludWU7CisJICAgIH0KKwor CSAgLyogRG8gbm90IGZvbGxvdyBDVVJSRU5UIGlmIE5BTUUgbWF0Y2hlcyBp dHMgRVhDTFVERVMuICAqLworCSAgZm9yIChleGNsdWRlcCA9IGN1cnJlbnQt PmV4Y2x1ZGVzOyAqZXhjbHVkZXA7IGV4Y2x1ZGVwKyspCisJICAgIGlmIChz dHJjbXAgKG5hbWUsICpleGNsdWRlcCkgPT0gMCkKKwkgICAgICBicmVhazsK KwkgIGlmICgqZXhjbHVkZXApCisJICAgIHsKKwkgICAgICBkaXNjYXJkX2Ns ZWFudXBzIChzZWFyY2hlZF9jbGVhbnVwKTsKKwkgICAgICBjb250aW51ZTsK KwkgICAgfQorCisJICAvKiBJZiB0aGUgaW1wb3J0IHN0YXRlbWVudCBpcyBj cmVhdGluZyBhbiBhbGlhcy4gICovCisJICBpZiAoY3VycmVudC0+YWxpYXMg IT0gTlVMTCkKKwkgICAgeworCSAgICAgIGlmIChzdHJjbXAgKG5hbWUsIGN1 cnJlbnQtPmFsaWFzKSA9PSAwKQorCQl7CisJCSAgLyogSWYgdGhlIGFsaWFz IG1hdGNoZXMgdGhlIHNvdWdodCBuYW1lLiAgUGFzcworCQkgICAgIGN1cnJl bnQtPmltcG9ydF9zcmMgYXMgdGhlIE5BTUUgdG8gZGlyZWN0IHRoZQorCQkg ICAgIHNlYXJjaCB0b3dhcmRzIHRoZSBhbGlhc2VkIG1vZHVsZS4gICovCisJ CSAgc3ltID0gbG9va3VwX21vZHVsZV9zY29wZSAoY3VycmVudC0+aW1wb3J0 X3NyYywgYmxvY2ssCisJCQkJCSAgICAgZG9tYWluLCBzY29wZSwgMCk7CisJ CX0KKwkgICAgICBlbHNlCisJCXsKKwkJICAvKiBJZiB0aGUgYWxpYXMgbWF0 Y2hlcyB0aGUgZmlyc3QgY29tcG9uZW50IG9mIHRoZQorCQkgICAgIHNvdWdo dCBuYW1lLCBwYXNzIGN1cnJlbnQtPmltcG9ydF9zcmMgYXMgTU9EVUxFCisJ CSAgICAgdG8gZGlyZWN0IHRoZSBzZWFyY2gsIHNraXBwaW5nIG92ZXIgdGhl IGFsaWFzZWQKKwkJICAgICBjb21wb25lbnQgaW4gTkFNRS4gICovCisJCSAg aW50IG5hbWVfc2NvcGUgPSBkX2ZpbmRfZmlyc3RfY29tcG9uZW50IChuYW1l KTsKKworCQkgIGlmIChuYW1lW25hbWVfc2NvcGVdICE9ICdcMCcKKwkJICAg ICAgJiYgc3RybmNtcCAobmFtZSwgY3VycmVudC0+YWxpYXMsIG5hbWVfc2Nv cGUpID09IDApCisJCSAgICB7CisJCSAgICAgIC8qIFNraXAgdGhlICcuJyAg Ki8KKwkJICAgICAgbmFtZV9zY29wZSsrOworCQkgICAgICBzeW0gPSBkX2xv b2t1cF9zeW1ib2xfaW1wb3J0cyAoY3VycmVudC0+aW1wb3J0X3NyYywKKwkJ CQkJCSAgICAgbmFtZSArIG5hbWVfc2NvcGUsCisJCQkJCQkgICAgIGJsb2Nr LCBkb21haW4sIDApOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgIGVsc2UK KwkgICAgeworCSAgICAgIC8qIElmIHRoaXMgaW1wb3J0IHN0YXRlbWVudCBj cmVhdGVzIG5vIGFsaWFzLCBwYXNzCisJCSBjdXJyZW50LT5pbXBvcnRfc3Jj IGFzIE1PRFVMRSB0byBkaXJlY3QgdGhlIHNlYXJjaAorCQkgdG93YXJkcyB0 aGUgaW1wb3J0ZWQgbW9kdWxlLiAgKi8KKwkgICAgICBzeW0gPSBkX2xvb2t1 cF9zeW1ib2xfaW1wb3J0cyAoY3VycmVudC0+aW1wb3J0X3NyYywKKwkJCQkJ ICAgICBuYW1lLCBibG9jaywgZG9tYWluLCAwKTsKKwkgICAgfQorCSAgY3Vy cmVudC0+c2VhcmNoZWQgPSAwOworCSAgZGlzY2FyZF9jbGVhbnVwcyAoc2Vh cmNoZWRfY2xlYW51cCk7CisKKwkgIGlmIChzeW0uc3ltYm9sICE9IE5VTEwp CisJICAgIHJldHVybiBzeW07CisJfQorICAgIH0KKworICByZXR1cm4gKHN0 cnVjdCBibG9ja19zeW1ib2wpIHtOVUxMLCBOVUxMfTsKK30KKworLyogU2Vh cmNoZXMgZm9yIE5BTUUgaW4gdGhlIGN1cnJlbnQgbW9kdWxlLCBhbmQgYnkg YXBwbHlpbmcgcmVsZXZhbnQKKyAgIGltcG9ydCBzdGF0ZW1lbnRzIGJlbG9u Z2luZyB0byBCTE9DSyBhbmQgaXRzIHBhcmVudHMuICBTQ09QRSBpcyB0aGUK KyAgIG1vZHVsZSBzY29wZSBvZiB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUg c2VhcmNoIGlzIGJlaW5nIGV2YWx1YXRlZC4gICovCisKK3N0YXRpYyBzdHJ1 Y3QgYmxvY2tfc3ltYm9sCitkX2xvb2t1cF9zeW1ib2xfbW9kdWxlIChjb25z dCBjaGFyICpzY29wZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCWNvbnN0IHN0 cnVjdCBibG9jayAqYmxvY2ssCisJCQljb25zdCBkb21haW5fZW51bSBkb21h aW4pCit7CisgIHN0cnVjdCBibG9ja19zeW1ib2wgc3ltOworCisgIC8qIEZp cnN0LCB0cnkgdG8gZmluZCB0aGUgc3ltYm9sIGluIHRoZSBnaXZlbiBtb2R1 bGUuICAqLworICBzeW0gPSBkX2xvb2t1cF9zeW1ib2xfaW5fbW9kdWxlIChz Y29wZSwgbmFtZSwKKwkJCQkgICBibG9jaywgZG9tYWluLCAxKTsKKyAgaWYg KHN5bS5zeW1ib2wgIT0gTlVMTCkKKyAgICByZXR1cm4gc3ltOworCisgIC8q IFNlYXJjaCBmb3IgbmFtZSBpbiBtb2R1bGVzIGltcG9ydGVkIHRvIHRoaXMg YW5kIHBhcmVudAorICAgICBibG9ja3MuICAqLworICB3aGlsZSAoYmxvY2sg IT0gTlVMTCkKKyAgICB7CisgICAgICBzeW0gPSBkX2xvb2t1cF9zeW1ib2xf aW1wb3J0cyAoc2NvcGUsIG5hbWUsIGJsb2NrLCBkb21haW4sIDEpOworCisg ICAgICBpZiAoc3ltLnN5bWJvbCAhPSBOVUxMKQorCXJldHVybiBzeW07CisK KyAgICAgIGJsb2NrID0gQkxPQ0tfU1VQRVJCTE9DSyAoYmxvY2spOworICAg IH0KKworICByZXR1cm4gKHN0cnVjdCBibG9ja19zeW1ib2wpIHtOVUxMLCBO VUxMfTsKK30KKworLyogVGhlIEQtc3BlY2lmaWMgdmVyc2lvbiBvZiBuYW1l IGxvb2t1cCBmb3Igc3RhdGljIGFuZCBnbG9iYWwgbmFtZXMKKyAgIFRoaXMg bWFrZXMgc3VyZSB0aGF0IG5hbWVzIGdldCBsb29rZWQgZm9yIGluIGFsbCBt b2R1bGVzIHRoYXQgYXJlCisgICBpbiBzY29wZS4gIE5BTUUgaXMgdGhlIG5h dHVyYWwgbmFtZSBvZiB0aGUgc3ltYm9sIHRoYXQgd2UncmUgbG9va2luZwor ICAgbG9va2luZyBmb3IsIEJMT0NLIGlzIHRoZSBibG9jayB0aGF0IHdlJ3Jl IHNlYXJjaGluZyB3aXRoaW4sIERPTUFJTgorICAgc2F5cyB3aGF0IGtpbmQg b2Ygc3ltYm9scyB3ZSdyZSBsb29raW5nIGZvciwgYW5kIGlmIFNZTVRBQiBp cyBub24tTlVMTCwKKyAgIHdlIHNob3VsZCBzdG9yZSB0aGUgc3ltdGFiIHdo ZXJlIHdlIGZvdW5kIHRoZSBzeW1ib2wgaW4gaXQuICAqLworCitzdHJ1Y3Qg YmxvY2tfc3ltYm9sCitkX2xvb2t1cF9zeW1ib2xfbm9ubG9jYWwgKGNvbnN0 IHN0cnVjdCBsYW5ndWFnZV9kZWZuICpsYW5nZGVmLAorCQkJICBjb25zdCBj aGFyICpuYW1lLAorCQkJICBjb25zdCBzdHJ1Y3QgYmxvY2sgKmJsb2NrLAor CQkJICBjb25zdCBkb21haW5fZW51bSBkb21haW4pCit7CisgIHN0cnVjdCBi bG9ja19zeW1ib2wgc3ltOworICBjb25zdCBjaGFyICpzY29wZSA9IGJsb2Nr X3Njb3BlIChibG9jayk7CisKKyAgc3ltID0gbG9va3VwX21vZHVsZV9zY29w ZSAobmFtZSwgYmxvY2ssIGRvbWFpbiwgc2NvcGUsIDApOworICBpZiAoc3lt LnN5bWJvbCA9PSBOVUxMKQorICAgIHJldHVybiBzeW07CisKKyAgcmV0dXJu IGRfbG9va3VwX3N5bWJvbF9tb2R1bGUgKHNjb3BlLCBuYW1lLCBibG9jaywg ZG9tYWluKTsKK30KKwo= --047d7beb9d8e1f0ccc051c6bf2a7--