From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2508 invoked by alias); 4 Jun 2014 23:43:19 -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 2496 invoked by uid 89); 4 Jun 2014 23:43:18 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.0 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-qa0-f54.google.com Received: from mail-qa0-f54.google.com (HELO mail-qa0-f54.google.com) (209.85.216.54) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Wed, 04 Jun 2014 23:43:14 +0000 Received: by mail-qa0-f54.google.com with SMTP id j15so318669qaq.41 for ; Wed, 04 Jun 2014 16:43:11 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.224.28.135 with SMTP id m7mr11946539qac.44.1401925391791; Wed, 04 Jun 2014 16:43:11 -0700 (PDT) Received: by 10.229.215.197 with HTTP; Wed, 4 Jun 2014 16:43:11 -0700 (PDT) Date: Wed, 04 Jun 2014 23:43:00 -0000 Message-ID: Subject: [PATCH v2] Initial pass at D language expression parser support. From: Iain Buclaw To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=001a11c1fca2fad40404fb0b305d X-IsSubscribed: yes X-SW-Source: 2014-06/txt/msg00226.txt.bz2 --001a11c1fca2fad40404fb0b305d Content-Type: text/plain; charset=UTF-8 Content-length: 1162 Hi, This is a second revision at adding support for evaluation D expressions from gdb. Grammar is pretty much in the same state as the previous patch. Just a couple of parser fixes and correct handling of dollar variables. Turns out that I can't really think of much good to go into the testsuite. So I ended up just adding in tests where behaviour in d-exp.y is meant to differ from c-exp.y. Regards Iain. Initial pass at D language expression parser support. 2014-06-05 Iain Buclaw * Makefile.in (SFILES): Add d-exp.y. (YYFILES): Add d-exp.c. (YYOBJ): Add d-exp.o. (local-maintainer-clean): Delete d-exp.c. * d-exp.y: New file. * d-lang.h (d_parse): New declaration. (d_error): New declaration. * d-lang.c (d_op_print_tab): Add entry for BINOP_CONCAT and BINOP_EXP. Set BINOP_EQUAL and BINOP_NOTEQUAL to same precedence as other PREC_ORDER operators. (d_language_defn): Use d_parse, d_error instead of c_parse, c_error. 2014-06-05 Iain Buclaw * gdb.dlang/expression.exp: New file. --- --001a11c1fca2fad40404fb0b305d Content-Type: text/x-diff; charset=US-ASCII; name="d-exp-y.patch" Content-Disposition: attachment; filename="d-exp-y.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hw1a41oy0 Content-length: 71082 LS0tIGEvZ2RiL01ha2VmaWxlLmluCisrKyBiL2dkYi9NYWtlZmlsZS5pbgpA QCAtNzg3LDcgKzc4Nyw3IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFu Zy5jIGFkYS10eXBlcHJpbnQuYyBhZGEtdmFscHJpbnQuYyBhZGEtdGFza3Mu YyBcCiAJY2hhcnNldC5jIGNsZWFudXBzLmMgY2xpLW91dC5jIGNvZmZyZWFk LmMgY29mZi1wZS1yZWFkLmMgXAogCWNvbXBsYWludHMuYyBjb21wbGV0ZXIu YyBjb250aW51YXRpb25zLmMgY29yZWZpbGUuYyBjb3JlbG93LmMgXAogCWNw LWFiaS5jIGNwLXN1cHBvcnQuYyBjcC1uYW1lc3BhY2UuYyBjcC12YWxwcmlu dC5jIFwKLQlkLWxhbmcuYyBkLXN1cHBvcnQuYyBkLXZhbHByaW50LmMgXAor CWQtZXhwLnkgZC1sYW5nLmMgZC1zdXBwb3J0LmMgZC12YWxwcmludC5jIFwK IAljcC1uYW1lLXBhcnNlci55IFwKIAlkYnhyZWFkLmMgZGVtYW5nbGUuYyBk aWN0aW9uYXJ5LmMgZGlzYXNtLmMgZG91Ymxlc3QuYyBkdW1teS1mcmFtZS5j IFwKIAlkd2FyZjJleHByLmMgZHdhcmYybG9jLmMgZHdhcmYycmVhZC5jIGR3 YXJmMi1mcmFtZS5jIFwKQEAgLTEwNDEsMTIgKzEwNDEsMTIgQEAgWVlGSUxF UyA9IGMtZXhwLmMgXAogCWFkYS1sZXguYyBcCiAJYWRhLWV4cC5jIFwKIAlq di1leHAuYyBcCi0JZi1leHAuYyBnby1leHAuYyBtMi1leHAuYyBwLWV4cC5j CisJZC1leHAuYyBmLWV4cC5jIGdvLWV4cC5jIG0yLWV4cC5jIHAtZXhwLmMK IFlZT0JKID0gYy1leHAubyBcCiAJY3AtbmFtZS1wYXJzZXIubyBcCiAJYWRh LWV4cC5vIFwKIAlqdi1leHAubyBcCi0JZi1leHAubyBnby1leHAubyBtMi1l eHAubyBwLWV4cC5vCisJZC1leHAubyBmLWV4cC5vIGdvLWV4cC5vIG0yLWV4 cC5vIHAtZXhwLm8KIAogIyBUaGluZ3Mgd2hpY2ggbmVlZCB0byBiZSBidWls dCB3aGVuIG1ha2luZyBhIGRpc3RyaWJ1dGlvbi4KIApAQCAtMTQwMSw3ICsx NDAxLDcgQEAgbG9jYWwtbWFpbnRhaW5lci1jbGVhbjoKIAkJY3AtbmFtZS1w YXJzZXIuYyBcCiAJCWFkYS1sZXguYyBhZGEtZXhwLmMgXAogCQlqdi1leHAu dGFiIFwKLQkJZi1leHAuYyBnby1leHAuYyBtMi1leHAuYyBwLWV4cC5jCisJ CWQtZXhwLmMgZi1leHAuYyBnby1leHAuYyBtMi1leHAuYyBwLWV4cC5jCiAJ cm0gLWYgVEFHUyAkKElORk9GSUxFUykKIAlybSAtZiAkKFlZRklMRVMpCiAJ cm0gLWYgbm0uaCBjb25maWcuc3RhdHVzCi0tLSAvZGV2L251bGwKKysrIGIv Z2RiL2QtZXhwLnkKQEAgLTAsMCArMSwxNjM3IEBACisvKiBZQUNDIHBhcnNl ciBmb3IgRCBleHByZXNzaW9ucywgZm9yIEdEQi4KKworICAgQ29weXJpZ2h0 IChDKSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisg ICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCisKKy8qIFRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20g Yy1leHAueSwganYtZXhwLnkuICAqLworCisvKiBQYXJzZSBhIEQgZXhwcmVz c2lvbiBmcm9tIHRleHQgaW4gYSBzdHJpbmcsCisgICBhbmQgcmV0dXJuIHRo ZSByZXN1bHQgYXMgYSBzdHJ1Y3QgZXhwcmVzc2lvbiBwb2ludGVyLgorICAg VGhhdCBzdHJ1Y3R1cmUgY29udGFpbnMgYXJpdGhtZXRpYyBvcGVyYXRpb25z IGluIHJldmVyc2UgcG9saXNoLAorICAgd2l0aCBjb25zdGFudHMgcmVwcmVz ZW50ZWQgYnkgb3BlcmF0aW9ucyB0aGF0IGFyZSBmb2xsb3dlZCBieSBzcGVj aWFsIGRhdGEuCisgICBTZWUgZXhwcmVzc2lvbi5oIGZvciB0aGUgZGV0YWls cyBvZiB0aGUgZm9ybWF0LgorICAgV2hhdCBpcyBpbXBvcnRhbnQgaGVyZSBp cyB0aGF0IGl0IGNhbiBiZSBidWlsdCB1cCBzZXF1ZW50aWFsbHkKKyAgIGR1 cmluZyB0aGUgcHJvY2VzcyBvZiBwYXJzaW5nOyB0aGUgbG93ZXIgbGV2ZWxz IG9mIHRoZSB0cmVlIGFsd2F5cworICAgY29tZSBmaXJzdCBpbiB0aGUgcmVz dWx0LgorCisgICBOb3RlIHRoYXQgbWFsbG9jJ3MgYW5kIHJlYWxsb2MncyBp biB0aGlzIGZpbGUgYXJlIHRyYW5zZm9ybWVkIHRvCisgICB4bWFsbG9jIGFu ZCB4cmVhbGxvYyByZXNwZWN0aXZlbHkgYnkgdGhlIHNhbWUgc2VkIGNvbW1h bmQgaW4gdGhlCisgICBtYWtlZmlsZSB0aGF0IHJlbWFwcyBhbnkgb3RoZXIg bWFsbG9jL3JlYWxsb2MgaW5zZXJ0ZWQgYnkgdGhlIHBhcnNlcgorICAgZ2Vu ZXJhdG9yLiAgRG9pbmcgdGhpcyB3aXRoICNkZWZpbmVzIGFuZCB0cnlpbmcg dG8gY29udHJvbCB0aGUgaW50ZXJhY3Rpb24KKyAgIHdpdGggaW5jbHVkZSBm aWxlcyAoPG1hbGxvYy5oPiBhbmQgPHN0ZGxpYi5oPiBmb3IgZXhhbXBsZSkg anVzdCBiZWNhbWUKKyAgIHRvbyBtZXNzeSwgcGFydGljdWxhcmx5IHdoZW4g c3VjaCBpbmNsdWRlcyBjYW4gYmUgaW5zZXJ0ZWQgYXQgcmFuZG9tCisgICB0 aW1lcyBieSB0aGUgcGFyc2VyIGdlbmVyYXRvci4gICovCisKKyV7CisKKyNp bmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVk ZSA8Y3R5cGUuaD4KKyNpbmNsdWRlICJleHByZXNzaW9uLmgiCisjaW5jbHVk ZSAidmFsdWUuaCIKKyNpbmNsdWRlICJwYXJzZXItZGVmcy5oIgorI2luY2x1 ZGUgImxhbmd1YWdlLmgiCisjaW5jbHVkZSAiYy1sYW5nLmgiCisjaW5jbHVk ZSAiZC1sYW5nLmgiCisjaW5jbHVkZSAiYmZkLmgiIC8qIFJlcXVpcmVkIGJ5 IG9iamZpbGVzLmguICAqLworI2luY2x1ZGUgInN5bWZpbGUuaCIgLyogUmVx dWlyZWQgYnkgb2JqZmlsZXMuaC4gICovCisjaW5jbHVkZSAib2JqZmlsZXMu aCIgLyogRm9yIGhhdmVfZnVsbF9zeW1ib2xzIGFuZCBoYXZlX3BhcnRpYWxf c3ltYm9scyAqLworI2luY2x1ZGUgImNoYXJzZXQuaCIKKyNpbmNsdWRlICJi bG9jay5oIgorCisjZGVmaW5lIHBhcnNlX3R5cGUocHMpIGJ1aWx0aW5fdHlw ZSAocGFyc2VfZ2RiYXJjaCAocHMpKQorI2RlZmluZSBwYXJzZV9kX3R5cGUo cHMpIGJ1aWx0aW5fZF90eXBlIChwYXJzZV9nZGJhcmNoIChwcykpCisKKy8q IFJlbWFwIG5vcm1hbCB5YWNjIHBhcnNlciBpbnRlcmZhY2UgbmFtZXMgKHl5 cGFyc2UsIHl5bGV4LCB5eWVycm9yLCBldGMpLAorICAgYXMgd2VsbCBhcyBn cmF0dWl0aW91c2x5IGdsb2JhbCBzeW1ib2wgbmFtZXMsIHNvIHdlIGNhbiBo YXZlIG11bHRpcGxlCisgICB5YWNjIGdlbmVyYXRlZCBwYXJzZXJzIGluIGdk Yi4gIE5vdGUgdGhhdCB0aGVzZSBhcmUgb25seSB0aGUgdmFyaWFibGVzCisg ICBwcm9kdWNlZCBieSB5YWNjLiAgSWYgb3RoZXIgcGFyc2VyIGdlbmVyYXRv cnMgKGJpc29uLCBieWFjYywgZXRjKSBwcm9kdWNlCisgICBhZGRpdGlvbmFs IGdsb2JhbCBuYW1lcyB0aGF0IGNvbmZsaWN0IGF0IGxpbmsgdGltZSwgdGhl biB0aG9zZSBwYXJzZXIKKyAgIGdlbmVyYXRvcnMgbmVlZCB0byBiZSBmaXhl ZCBpbnN0ZWFkIG9mIGFkZGluZyB0aG9zZSBuYW1lcyB0byB0aGlzIGxpc3Qu ICAqLworCisjZGVmaW5lCXl5bWF4ZGVwdGggZF9tYXhkZXB0aAorI2RlZmlu ZQl5eXBhcnNlCWRfcGFyc2VfaW50ZXJuYWwKKyNkZWZpbmUJeXlsZXgJZF9s ZXgKKyNkZWZpbmUJeXllcnJvcglkX2Vycm9yCisjZGVmaW5lCXl5bHZhbAlk X2x2YWwKKyNkZWZpbmUJeXljaGFyCWRfY2hhcgorI2RlZmluZQl5eWRlYnVn CWRfZGVidWcKKyNkZWZpbmUJeXlwYWN0CWRfcGFjdAorI2RlZmluZQl5eXIx CWRfcjEKKyNkZWZpbmUJeXlyMglkX3IyCisjZGVmaW5lCXl5ZGVmCWRfZGVm CisjZGVmaW5lCXl5Y2hrCWRfY2hrCisjZGVmaW5lCXl5cGdvCWRfcGdvCisj ZGVmaW5lCXl5YWN0CWRfYWN0CisjZGVmaW5lCXl5ZXhjYQlkX2V4Y2EKKyNk ZWZpbmUJeXllcnJmbGFnIGRfZXJyZmxhZworI2RlZmluZQl5eW5lcnJzCWRf bmVycnMKKyNkZWZpbmUJeXlwcwlkX3BzCisjZGVmaW5lCXl5cHYJZF9wdgor I2RlZmluZQl5eXMJZF9zCisjZGVmaW5lCXl5X3l5cwlkX3l5cworI2RlZmlu ZQl5eXN0YXRlCWRfc3RhdGUKKyNkZWZpbmUJeXl0bXAJZF90bXAKKyNkZWZp bmUJeXl2CWRfdgorI2RlZmluZQl5eV95eXYJZF95eXYKKyNkZWZpbmUJeXl2 YWwJZF92YWwKKyNkZWZpbmUJeXlsbG9jCWRfbGxvYworI2RlZmluZQl5eXJl ZHMJZF9yZWRzCS8qIFdpdGggWVlERUJVRyBkZWZpbmVkICovCisjZGVmaW5l CXl5dG9rcwlkX3Rva3MJLyogV2l0aCBZWURFQlVHIGRlZmluZWQgKi8KKyNk ZWZpbmUJeXluYW1lCWRfbmFtZQkvKiBXaXRoIFlZREVCVUcgZGVmaW5lZCAq LworI2RlZmluZQl5eXJ1bGUJZF9ydWxlCS8qIFdpdGggWVlERUJVRyBkZWZp bmVkICovCisjZGVmaW5lCXl5bGhzCWRfeXlsaHMKKyNkZWZpbmUJeXlsZW4J ZF95eWxlbgorI2RlZmluZQl5eWRlZnJlCWRfeXlkZWZyZWQKKyNkZWZpbmUJ eXlkZ290bwlkX3l5ZGdvdG8KKyNkZWZpbmUJeXlzaW5kZXggZF95eXNpbmRl eAorI2RlZmluZQl5eXJpbmRleCBkX3l5cmluZGV4CisjZGVmaW5lCXl5Z2lu ZGV4IGRfeXlnaW5kZXgKKyNkZWZpbmUJeXl0YWJsZQlkX3l5dGFibGUKKyNk ZWZpbmUJeXljaGVjawlkX3l5Y2hlY2sKKyNkZWZpbmUJeXlzcwlkX3l5c3MK KyNkZWZpbmUJeXlzc2xpbQlkX3l5c3NsaW0KKyNkZWZpbmUJeXlzc3AJZF95 eXNzcAorI2RlZmluZQl5eXN0YWNrc2l6ZSBkX3l5c3RhY2tzaXplCisjZGVm aW5lCXl5dnMJZF95eXZzCisjZGVmaW5lCXl5dnNwCWRfeXl2c3AKKworI2lm bmRlZiBZWURFQlVHCisjZGVmaW5lIFlZREVCVUcgMQkvKiBEZWZhdWx0IHRv IHl5ZGVidWcgc3VwcG9ydCAqLworI2VuZGlmCisKKyNkZWZpbmUgWVlGUFJJ TlRGIHBhcnNlcl9mcHJpbnRmCisKKy8qIFRoZSBzdGF0ZSBvZiB0aGUgcGFy c2VyLCB1c2VkIGludGVybmFsbHkgd2hlbiB3ZSBhcmUgcGFyc2luZyB0aGUK KyAgIGV4cHJlc3Npb24uICAqLworCitzdGF0aWMgc3RydWN0IHBhcnNlcl9z dGF0ZSAqcHN0YXRlID0gTlVMTDsKKworaW50IHl5cGFyc2UgKHZvaWQpOwor CitzdGF0aWMgaW50IHl5bGV4ICh2b2lkKTsKKwordm9pZCB5eWVycm9yIChj aGFyICopOworCislfQorCisvKiBBbHRob3VnaCB0aGUgeWFjYyAidmFsdWUi IG9mIGFuIGV4cHJlc3Npb24gaXMgbm90IHVzZWQsCisgICBzaW5jZSB0aGUg cmVzdWx0IGlzIHN0b3JlZCBpbiB0aGUgc3RydWN0dXJlIGJlaW5nIGNyZWF0 ZWQsCisgICBvdGhlciBub2RlIHR5cGVzIGRvIGhhdmUgdmFsdWVzLiAgKi8K KworJXVuaW9uCisgIHsKKyAgICBzdHJ1Y3QgeworICAgICAgTE9OR0VTVCB2 YWw7CisgICAgICBzdHJ1Y3QgdHlwZSAqdHlwZTsKKyAgICB9IHR5cGVkX3Zh bF9pbnQ7CisgICAgc3RydWN0IHsKKyAgICAgIERPVUJMRVNUIGR2YWw7Cisg ICAgICBzdHJ1Y3QgdHlwZSAqdHlwZTsKKyAgICB9IHR5cGVkX3ZhbF9mbG9h dDsKKyAgICBzdHJ1Y3Qgc3ltYm9sICpzeW07CisgICAgc3RydWN0IHR5cGUg KnR2YWw7CisgICAgc3RydWN0IHR5cGVkX3N0b2tlbiB0c3ZhbDsKKyAgICBz dHJ1Y3Qgc3Rva2VuIHN2YWw7CisgICAgc3RydWN0IHR0eXBlIHRzeW07Cisg ICAgc3RydWN0IHN5bXRva2VuIHNzeW07CisgICAgaW50IGl2YWw7CisgICAg c3RydWN0IGJsb2NrICpidmFsOworICAgIGVudW0gZXhwX29wY29kZSBvcGNv ZGU7CisgICAgc3RydWN0IHN0b2tlbl92ZWN0b3Igc3ZlYzsKKyAgfQorCisl eworLyogWVlTVFlQRSBnZXRzIGRlZmluZWQgYnkgJXVuaW9uICovCitzdGF0 aWMgaW50IHBhcnNlX251bWJlciAoc3RydWN0IHBhcnNlcl9zdGF0ZSAqLCBj b25zdCBjaGFyICosCisJCQkgaW50LCBpbnQsIFlZU1RZUEUgKik7CisKK3N0 YXRpYyB2b2lkIHB1c2hfZXhwcmVzc2lvbl9uYW1lIChzdHJ1Y3QgcGFyc2Vy X3N0YXRlICosIHN0cnVjdCBzdG9rZW4pOworJX0KKworJXRva2VuIDxzdmFs PiBJREVOVElGSUVSCisldG9rZW4gPHRzeW0+IFRZUEVOQU1FCisldG9rZW4g PHZvaWR2YWw+IENPTVBMRVRFCisKKy8qIEEgTkFNRV9PUl9JTlQgaXMgYSBz eW1ib2wgd2hpY2ggaXMgbm90IGtub3duIGluIHRoZSBzeW1ib2wgdGFibGUs CisgICBidXQgd2hpY2ggd291bGQgcGFyc2UgYXMgYSB2YWxpZCBudW1iZXIg aW4gdGhlIGN1cnJlbnQgaW5wdXQgcmFkaXguCisgICBFLmcuICJjIiB3aGVu IGlucHV0X3JhZGl4PT0xNi4gIERlcGVuZGluZyBvbiB0aGUgcGFyc2UsIGl0 IHdpbGwgYmUKKyAgIHR1cm5lZCBpbnRvIGEgbmFtZSBvciBpbnRvIGEgbnVt YmVyLiAgKi8KKworJXRva2VuIDxzdmFsPiBOQU1FX09SX0lOVAorCisldG9r ZW4gPHR5cGVkX3ZhbF9pbnQ+IElOVEVHRVJfTElURVJBTAorJXRva2VuIDx0 eXBlZF92YWxfZmxvYXQ+IEZMT0FUX0xJVEVSQUwKKyV0b2tlbiA8dHN2YWw+ IENIQVJBQ1RFUl9MSVRFUkFMCisldG9rZW4gPHRzdmFsPiBTVFJJTkdfTElU RVJBTAorCisldHlwZSA8c3ZlYz4gU3RyaW5nRXhwCisldHlwZSA8dHZhbD4g QmFzaWNUeXBlIFR5cGVFeHAKKyV0eXBlIDxzdmFsPiBJZGVudGlmaWVyRXhw CisldHlwZSA8aXZhbD4gQXJyYXlMaXRlcmFsCisKKyV0b2tlbiBFTlRSWQor JXRva2VuIEVSUk9SCisKKy8qIEtleXdvcmRzIHRoYXQgaGF2ZSBhIGNvbnN0 YW50IHZhbHVlLiAgKi8KKyV0b2tlbiBUUlVFX0tFWVdPUkQgRkFMU0VfS0VZ V09SRCBOVUxMX0tFWVdPUkQKKy8qIENsYXNzICdzdXBlcicgYWNjZXNzb3Iu ICAqLworJXRva2VuIFNVUEVSX0tFWVdPUkQKKy8qIFByb3BlcnRpZXMuICAq LworJXRva2VuIENBU1RfS0VZV09SRCBTSVpFT0ZfS0VZV09SRAorJXRva2Vu IFRZUEVPRl9LRVlXT1JEIFRZUEVJRF9LRVlXT1JECisldG9rZW4gSU5JVF9L RVlXT1JECisvKiBDb21wYXJpc29uIGtleXdvcmRzLiAgKi8KKy8qIFR5cGUg c3RvcmFnZSBjbGFzc2VzLiAgKi8KKyV0b2tlbiBJTU1VVEFCTEVfS0VZV09S RCBDT05TVF9LRVlXT1JEIFNIQVJFRF9LRVlXT1JECisvKiBOb24tc2NhbGFy IHR5cGUga2V5d29yZHMuICAqLworJXRva2VuIFNUUlVDVF9LRVlXT1JEIFVO SU9OX0tFWVdPUkQKKyV0b2tlbiBDTEFTU19LRVlXT1JEIElOVEVSRkFDRV9L RVlXT1JECisldG9rZW4gRU5VTV9LRVlXT1JEIFRFTVBMQVRFX0tFWVdPUkQK KyV0b2tlbiBERUxFR0FURV9LRVlXT1JEIEZVTkNUSU9OX0tFWVdPUkQKKwor JXRva2VuIDxzdmFsPiBET0xMQVJfVkFSSUFCTEUKKworJXRva2VuIDxvcGNv ZGU+IEFTU0lHTl9NT0RJRlkKKworJWxlZnQgJywnCislcmlnaHQgJz0nIEFT U0lHTl9NT0RJRlkKKyVyaWdodCAnPycKKyVsZWZ0IE9ST1IKKyVsZWZ0IEFO REFORAorJWxlZnQgJ3wnCislbGVmdCAnXicKKyVsZWZ0ICcmJworJWxlZnQg RVFVQUwgTk9URVFVQUwgJzwnICc+JyBMRVEgR0VRCislcmlnaHQgTFNIIFJT SAorJWxlZnQgJysnICctJworJWxlZnQgJyonICcvJyAnJScKKyVyaWdodCBI QVRIQVQKKyVsZWZ0IElERU5USVRZIE5PVElERU5USVRZCislcmlnaHQgSU5D UkVNRU5UIERFQ1JFTUVOVAorJXJpZ2h0ICcuJyAnWycgJygnCisldG9rZW4g RE9URE9UCisKKwwKKyUlCisKK3N0YXJ0ICAgOgorCUV4cHJlc3Npb24KK3wJ VHlwZUV4cAorOworCisvKiBFeHByZXNzaW9ucywgaW5jbHVkaW5nIHRoZSBj b21tYSBvcGVyYXRvci4gICovCisKK0V4cHJlc3Npb246CisJQ29tbWFFeHBy ZXNzaW9uCis7CisKK0NvbW1hRXhwcmVzc2lvbjoKKwlBc3NpZ25FeHByZXNz aW9uCit8CUFzc2lnbkV4cHJlc3Npb24gJywnIENvbW1hRXhwcmVzc2lvbgor CQl7IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChwc3RhdGUsIEJJTk9QX0NPTU1B KTsgfQorOworCitBc3NpZ25FeHByZXNzaW9uOgorCUNvbmRpdGlvbmFsRXhw cmVzc2lvbgorfAlDb25kaXRpb25hbEV4cHJlc3Npb24gJz0nIEFzc2lnbkV4 cHJlc3Npb24KKwkJeyB3cml0ZV9leHBfZWx0X29wY29kZSAocHN0YXRlLCBC SU5PUF9BU1NJR04pOyB9Cit8CUNvbmRpdGlvbmFsRXhwcmVzc2lvbiBBU1NJ R05fTU9ESUZZIEFzc2lnbkV4cHJlc3Npb24KKwkJeyB3cml0ZV9leHBfZWx0 X29wY29kZSAocHN0YXRlLCBCSU5PUF9BU1NJR05fTU9ESUZZKTsKKwkJICB3 cml0ZV9leHBfZWx0X29wY29kZSAocHN0YXRlLCAkMik7CisJCSAgd3JpdGVf ZXhwX2VsdF9vcGNvZGUgKHBzdGF0ZSwgQklOT1BfQVNTSUdOX01PRElGWSk7 IH0KKzsKKworQ29uZGl0aW9uYWxFeHByZXNzaW9uOgorCU9yT3JFeHByZXNz aW9uCit8CU9yT3JFeHByZXNzaW9uICc/JyBFeHByZXNzaW9uICc6JyBDb25k aXRpb25hbEV4cHJlc3Npb24KKwkJeyB3cml0ZV9leHBfZWx0X29wY29kZSAo cHN0YXRlLCBURVJOT1BfQ09ORCk7IH0KKzsKKworT3JPckV4cHJlc3Npb246 CisJQW5kQW5kRXhwcmVzc2lvbgorfAlPck9yRXhwcmVzc2lvbiBPUk9SIEFu ZEFuZEV4cHJlc3Npb24KKwkJeyB3cml0ZV9leHBfZWx0X29wY29kZSAocHN0 YXRlLCBCSU5PUF9MT0dJQ0FMX09SKTsgfQorOworCitBbmRBbmRFeHByZXNz aW9uOgorCU9yRXhwcmVzc2lvbgorfAlBbmRBbmRFeHByZXNzaW9uIEFOREFO RCBPckV4cHJlc3Npb24KKwkJeyB3cml0ZV9leHBfZWx0X29wY29kZSAocHN0 YXRlLCBCSU5PUF9MT0dJQ0FMX0FORCk7IH0KKzsKKworT3JFeHByZXNzaW9u OgorCVhvckV4cHJlc3Npb24KK3wJT3JFeHByZXNzaW9uICd8JyBYb3JFeHBy ZXNzaW9uCisJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBzdGF0ZSwgQklO T1BfQklUV0lTRV9JT1IpOyB9Cis7CisKK1hvckV4cHJlc3Npb246CisJQW5k RXhwcmVzc2lvbgorfAlYb3JFeHByZXNzaW9uICdeJyBBbmRFeHByZXNzaW9u CisJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBzdGF0ZSwgQklOT1BfQklU V0lTRV9YT1IpOyB9Cis7CisKK0FuZEV4cHJlc3Npb246CisJQ21wRXhwcmVz c2lvbgorfAlBbmRFeHByZXNzaW9uICcmJyBDbXBFeHByZXNzaW9uCisJCXsg d3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBzdGF0ZSwgQklOT1BfQklUV0lTRV9B TkQpOyB9Cis7CisKK0NtcEV4cHJlc3Npb246CisJU2hpZnRFeHByZXNzaW9u Cit8CUVxdWFsRXhwcmVzc2lvbgorfAlJZGVudGl0eUV4cHJlc3Npb24KK3wJ UmVsRXhwcmVzc2lvbgorOworCitFcXVhbEV4cHJlc3Npb246CisJU2hpZnRF eHByZXNzaW9uIEVRVUFMIFNoaWZ0RXhwcmVzc2lvbgorCQl7IHdyaXRlX2V4 cF9lbHRfb3Bjb2RlIChwc3RhdGUsIEJJTk9QX0VRVUFMKTsgfQorfAlTaGlm dEV4cHJlc3Npb24gTk9URVFVQUwgU2hpZnRFeHByZXNzaW9uCisJCXsgd3Jp dGVfZXhwX2VsdF9vcGNvZGUgKHBzdGF0ZSwgQklOT1BfTk9URVFVQUwpOyB9 Cis7CisKK0lkZW50aXR5RXhwcmVzc2lvbjoKKwlTaGlmdEV4cHJlc3Npb24g SURFTlRJVFkgU2hpZnRFeHByZXNzaW9uCisJCXsgd3JpdGVfZXhwX2VsdF9v cGNvZGUgKHBzdGF0ZSwgQklOT1BfRVFVQUwpOyB9Cit8CVNoaWZ0RXhwcmVz c2lvbiBOT1RJREVOVElUWSBTaGlmdEV4cHJlc3Npb24KKwkJeyB3cml0ZV9l eHBfZWx0X29wY29kZSAocHN0YXRlLCBCSU5PUF9OT1RFUVVBTCk7IH0KKzsK KworUmVsRXhwcmVzc2lvbjoKKwlTaGlmdEV4cHJlc3Npb24gJzwnIFNoaWZ0 RXhwcmVzc2lvbgorCQl7IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChwc3RhdGUs IEJJTk9QX0xFU1MpOyB9Cit8CVNoaWZ0RXhwcmVzc2lvbiBMRVEgU2hpZnRF eHByZXNzaW9uCisJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBzdGF0ZSwg QklOT1BfTEVRKTsgfQorfAlTaGlmdEV4cHJlc3Npb24gJz4nIFNoaWZ0RXhw cmVzc2lvbgorCQl7IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChwc3RhdGUsIEJJ Tk9QX0dUUik7IH0KK3wJU2hpZnRFeHByZXNzaW9uIEdFUSBTaGlmdEV4cHJl c3Npb24KKwkJeyB3cml0ZV9leHBfZWx0X29wY29kZSAocHN0YXRlLCBCSU5P UF9HRVEpOyB9Cis7CisKK1NoaWZ0RXhwcmVzc2lvbjoKKwlBZGRFeHByZXNz aW9uCit8CVNoaWZ0RXhwcmVzc2lvbiBMU0ggQWRkRXhwcmVzc2lvbgorCQl7 IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChwc3RhdGUsIEJJTk9QX0xTSCk7IH0K K3wJU2hpZnRFeHByZXNzaW9uIFJTSCBBZGRFeHByZXNzaW9uCisJCXsgd3Jp dGVfZXhwX2VsdF9vcGNvZGUgKHBzdGF0ZSwgQklOT1BfUlNIKTsgfQorOwor CitBZGRFeHByZXNzaW9uOgorCU11bEV4cHJlc3Npb24KK3wJQWRkRXhwcmVz c2lvbiAnKycgTXVsRXhwcmVzc2lvbgorCQl7IHdyaXRlX2V4cF9lbHRfb3Bj b2RlIChwc3RhdGUsIEJJTk9QX0FERCk7IH0KK3wJQWRkRXhwcmVzc2lvbiAn LScgTXVsRXhwcmVzc2lvbgorCQl7IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChw c3RhdGUsIEJJTk9QX1NVQik7IH0KK3wJQWRkRXhwcmVzc2lvbiAnficgTXVs RXhwcmVzc2lvbgorCQl7IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChwc3RhdGUs IEJJTk9QX0NPTkNBVCk7IH0KKzsKKworTXVsRXhwcmVzc2lvbjoKKwlVbmFy eUV4cHJlc3Npb24KK3wJTXVsRXhwcmVzc2lvbiAnKicgVW5hcnlFeHByZXNz aW9uCisJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBzdGF0ZSwgQklOT1Bf TVVMKTsgfQorfAlNdWxFeHByZXNzaW9uICcvJyBVbmFyeUV4cHJlc3Npb24K KwkJeyB3cml0ZV9leHBfZWx0X29wY29kZSAocHN0YXRlLCBCSU5PUF9ESVYp OyB9Cit8CU11bEV4cHJlc3Npb24gJyUnIFVuYXJ5RXhwcmVzc2lvbgorCQl7 IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChwc3RhdGUsIEJJTk9QX1JFTSk7IH0K KworVW5hcnlFeHByZXNzaW9uOgorCScmJyBVbmFyeUV4cHJlc3Npb24KKwkJ eyB3cml0ZV9leHBfZWx0X29wY29kZSAocHN0YXRlLCBVTk9QX0FERFIpOyB9 Cit8CUlOQ1JFTUVOVCBVbmFyeUV4cHJlc3Npb24KKwkJeyB3cml0ZV9leHBf ZWx0X29wY29kZSAocHN0YXRlLCBVTk9QX1BSRUlOQ1JFTUVOVCk7IH0KK3wJ REVDUkVNRU5UIFVuYXJ5RXhwcmVzc2lvbgorCQl7IHdyaXRlX2V4cF9lbHRf b3Bjb2RlIChwc3RhdGUsIFVOT1BfUFJFREVDUkVNRU5UKTsgfQorfAknKicg VW5hcnlFeHByZXNzaW9uCisJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBz dGF0ZSwgVU5PUF9JTkQpOyB9Cit8CSctJyBVbmFyeUV4cHJlc3Npb24KKwkJ eyB3cml0ZV9leHBfZWx0X29wY29kZSAocHN0YXRlLCBVTk9QX05FRyk7IH0K K3wJJysnIFVuYXJ5RXhwcmVzc2lvbgorCQl7IHdyaXRlX2V4cF9lbHRfb3Bj b2RlIChwc3RhdGUsIFVOT1BfUExVUyk7IH0KK3wJJyEnIFVuYXJ5RXhwcmVz c2lvbgorCQl7IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChwc3RhdGUsIFVOT1Bf TE9HSUNBTF9OT1QpOyB9Cit8CSd+JyBVbmFyeUV4cHJlc3Npb24KKwkJeyB3 cml0ZV9leHBfZWx0X29wY29kZSAocHN0YXRlLCBVTk9QX0NPTVBMRU1FTlQp OyB9Cit8CUNhc3RFeHByZXNzaW9uCit8CVBvd0V4cHJlc3Npb24KKzsKKwor Q2FzdEV4cHJlc3Npb246CisJQ0FTVF9LRVlXT1JEICcoJyBUeXBlRXhwICcp JyBVbmFyeUV4cHJlc3Npb24KKwkJeyB3cml0ZV9leHBfZWx0X29wY29kZSAo cHN0YXRlLCBVTk9QX0NBU1QpOworCQkgIHdyaXRlX2V4cF9lbHRfdHlwZSAo cHN0YXRlLCAkMyk7CisJCSAgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBzdGF0 ZSwgVU5PUF9DQVNUKTsgfQorCS8qIEMgc3R5bGUgY2FzdCBpcyBpbGxlZ2Fs IEQsIGJ1dCBpcyBzdGlsbCByZWNvZ25pc2VkIGluCisJICAgdGhlIGdyYW1t YXIsIHNvIHdlIGtlZXAgdGhpcyBhcm91bmQgZm9yIGNvbnZlbmllbmNlLiAg Ki8KK3wJJygnIFR5cGVFeHAgJyknIFVuYXJ5RXhwcmVzc2lvbgorCQl7IHdy aXRlX2V4cF9lbHRfb3Bjb2RlIChwc3RhdGUsIFVOT1BfQ0FTVCk7CisJCSAg d3JpdGVfZXhwX2VsdF90eXBlIChwc3RhdGUsICQyKTsKKwkJICB3cml0ZV9l eHBfZWx0X29wY29kZSAocHN0YXRlLCBVTk9QX0NBU1QpOyB9Cis7CisKK1Bv d0V4cHJlc3Npb246CisJUG9zdGZpeEV4cHJlc3Npb24KK3wJUG9zdGZpeEV4 cHJlc3Npb24gSEFUSEFUIFVuYXJ5RXhwcmVzc2lvbgorCQl7IHdyaXRlX2V4 cF9lbHRfb3Bjb2RlIChwc3RhdGUsIEJJTk9QX0VYUCk7IH0KKzsKKworUG9z dGZpeEV4cHJlc3Npb246CisJUHJpbWFyeUV4cHJlc3Npb24KK3wJUG9zdGZp eEV4cHJlc3Npb24gSU5DUkVNRU5UCisJCXsgd3JpdGVfZXhwX2VsdF9vcGNv ZGUgKHBzdGF0ZSwgVU5PUF9QT1NUSU5DUkVNRU5UKTsgfQorfAlQb3N0Zml4 RXhwcmVzc2lvbiBERUNSRU1FTlQKKwkJeyB3cml0ZV9leHBfZWx0X29wY29k ZSAocHN0YXRlLCBVTk9QX1BPU1RERUNSRU1FTlQpOyB9Cit8CUNhbGxFeHBy ZXNzaW9uCit8CUluZGV4RXhwcmVzc2lvbgorfAlTbGljZUV4cHJlc3Npb24K KzsKKworQXJndW1lbnRMaXN0OgorCUFzc2lnbkV4cHJlc3Npb24KKwkJeyBh cmdsaXN0X2xlbiA9IDE7IH0KK3wJQXJndW1lbnRMaXN0ICcsJyBBc3NpZ25F eHByZXNzaW9uCisJCXsgYXJnbGlzdF9sZW4rKzsgfQorOworCitBcmd1bWVu dExpc3Rfb3B0OgorCS8qIEVNUFRZICovCisJCXsgYXJnbGlzdF9sZW4gPSAw OyB9Cit8CUFyZ3VtZW50TGlzdAorOworCitDYWxsRXhwcmVzc2lvbjoKKwlQ b3N0Zml4RXhwcmVzc2lvbiAnKCcKKwkJeyBzdGFydF9hcmdsaXN0ICgpOyB9 CisJQXJndW1lbnRMaXN0X29wdCAnKScKKwkJeyB3cml0ZV9leHBfZWx0X29w Y29kZSAocHN0YXRlLCBPUF9GVU5DQUxMKTsKKwkJICB3cml0ZV9leHBfZWx0 X2xvbmdjc3QgKHBzdGF0ZSwgKExPTkdFU1QpIGVuZF9hcmdsaXN0ICgpKTsK KwkJICB3cml0ZV9leHBfZWx0X29wY29kZSAocHN0YXRlLCBPUF9GVU5DQUxM KTsgfQorOworCitJbmRleEV4cHJlc3Npb246CisJUG9zdGZpeEV4cHJlc3Np b24gJ1snIEFyZ3VtZW50TGlzdCAnXScKKwkJeyBpZiAoYXJnbGlzdF9sZW4g PiAwKQorCQkgICAgeworCQkgICAgICB3cml0ZV9leHBfZWx0X29wY29kZSAo cHN0YXRlLCBNVUxUSV9TVUJTQ1JJUFQpOworCQkgICAgICB3cml0ZV9leHBf ZWx0X2xvbmdjc3QgKHBzdGF0ZSwgKExPTkdFU1QpIGFyZ2xpc3RfbGVuKTsK KwkJICAgICAgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBzdGF0ZSwgTVVMVElf U1VCU0NSSVBUKTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB3cml0ZV9l eHBfZWx0X29wY29kZSAocHN0YXRlLCBCSU5PUF9TVUJTQ1JJUFQpOworCQl9 Cis7CisKK1NsaWNlRXhwcmVzc2lvbjoKKwlQb3N0Zml4RXhwcmVzc2lvbiAn WycgJ10nCisJCXsgLyogRG8gbm90aGluZy4gICovIH0KK3wJUG9zdGZpeEV4 cHJlc3Npb24gJ1snIEFzc2lnbkV4cHJlc3Npb24gRE9URE9UIEFzc2lnbkV4 cHJlc3Npb24gJ10nCisJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBzdGF0 ZSwgVEVSTk9QX1NMSUNFKTsgfQorOworCitQcmltYXJ5RXhwcmVzc2lvbjoK KwknKCcgRXhwcmVzc2lvbiAnKScKKwkJeyAvKiBEbyBub3RoaW5nLiAgKi8g fQorfAlJZGVudGlmaWVyRXhwCisJCXsgcHVzaF9leHByZXNzaW9uX25hbWUg KHBzdGF0ZSwgJDEpOyB9Cit8CUlkZW50aWZpZXJFeHAgJy4nIENPTVBMRVRF CisJCXsgc3RydWN0IHN0b2tlbiBzOworCQkgIHMucHRyID0gIiI7CisJCSAg cy5sZW5ndGggPSAwOworCQkgIHB1c2hfZXhwcmVzc2lvbl9uYW1lIChwc3Rh dGUsICQxKTsKKwkJICBtYXJrX3N0cnVjdF9leHByZXNzaW9uIChwc3RhdGUp OworCQkgIHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChwc3RhdGUsIFNUUlVDVE9Q X1NUUlVDVCk7CisJCSAgd3JpdGVfZXhwX3N0cmluZyAocHN0YXRlLCBzKTsK KwkJICB3cml0ZV9leHBfZWx0X29wY29kZSAocHN0YXRlLCBTVFJVQ1RPUF9T VFJVQ1QpOyB9Cit8CUlkZW50aWZpZXJFeHAgJy4nIElERU5USUZJRVIgQ09N UExFVEUKKwkJeyBwdXNoX2V4cHJlc3Npb25fbmFtZSAocHN0YXRlLCAkMSk7 CisJCSAgbWFya19zdHJ1Y3RfZXhwcmVzc2lvbiAocHN0YXRlKTsKKwkJICB3 cml0ZV9leHBfZWx0X29wY29kZSAocHN0YXRlLCBTVFJVQ1RPUF9TVFJVQ1Qp OworCQkgIHdyaXRlX2V4cF9zdHJpbmcgKHBzdGF0ZSwgJDMpOworCQkgIHdy aXRlX2V4cF9lbHRfb3Bjb2RlIChwc3RhdGUsIFNUUlVDVE9QX1NUUlVDVCk7 IH0KK3wJRE9MTEFSX1ZBUklBQkxFCisJCXsgd3JpdGVfZG9sbGFyX3Zhcmlh YmxlIChwc3RhdGUsICQxKTsgfQorfAlOQU1FX09SX0lOVAorCQl7IFlZU1RZ UEUgdmFsOworICAgICAgICAgICAgICAgICAgcGFyc2VfbnVtYmVyIChwc3Rh dGUsICQxLnB0ciwgJDEubGVuZ3RoLCAwLCAmdmFsKTsKKwkJICB3cml0ZV9l eHBfZWx0X29wY29kZSAocHN0YXRlLCBPUF9MT05HKTsKKwkJICB3cml0ZV9l eHBfZWx0X3R5cGUgKHBzdGF0ZSwgdmFsLnR5cGVkX3ZhbF9pbnQudHlwZSk7 CisJCSAgd3JpdGVfZXhwX2VsdF9sb25nY3N0IChwc3RhdGUsCisJCQkJCSAo TE9OR0VTVCkgdmFsLnR5cGVkX3ZhbF9pbnQudmFsKTsKKwkJICB3cml0ZV9l eHBfZWx0X29wY29kZSAocHN0YXRlLCBPUF9MT05HKTsgfQorfAlOVUxMX0tF WVdPUkQKKwkJeyBzdHJ1Y3QgdHlwZSAqdHlwZSA9IHBhcnNlX2RfdHlwZSAo cHN0YXRlKS0+YnVpbHRpbl92b2lkOworCQkgIHR5cGUgPSBsb29rdXBfcG9p bnRlcl90eXBlICh0eXBlKTsKKwkJICB3cml0ZV9leHBfZWx0X29wY29kZSAo cHN0YXRlLCBPUF9MT05HKTsKKwkJICB3cml0ZV9leHBfZWx0X3R5cGUgKHBz dGF0ZSwgdHlwZSk7CisJCSAgd3JpdGVfZXhwX2VsdF9sb25nY3N0IChwc3Rh dGUsIChMT05HRVNUKSAwKTsKKwkJICB3cml0ZV9leHBfZWx0X29wY29kZSAo cHN0YXRlLCBPUF9MT05HKTsgfQorfAlUUlVFX0tFWVdPUkQKKwkJeyB3cml0 ZV9leHBfZWx0X29wY29kZSAocHN0YXRlLCBPUF9CT09MKTsKKwkJICB3cml0 ZV9leHBfZWx0X2xvbmdjc3QgKHBzdGF0ZSwgKExPTkdFU1QpIDEpOworCQkg IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChwc3RhdGUsIE9QX0JPT0wpOyB9Cit8 CUZBTFNFX0tFWVdPUkQKKwkJeyB3cml0ZV9leHBfZWx0X29wY29kZSAocHN0 YXRlLCBPUF9CT09MKTsKKwkJICB3cml0ZV9leHBfZWx0X2xvbmdjc3QgKHBz dGF0ZSwgKExPTkdFU1QpIDApOworCQkgIHdyaXRlX2V4cF9lbHRfb3Bjb2Rl IChwc3RhdGUsIE9QX0JPT0wpOyB9Cit8CUlOVEVHRVJfTElURVJBTAorCQl7 IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChwc3RhdGUsIE9QX0xPTkcpOworCQkg IHdyaXRlX2V4cF9lbHRfdHlwZSAocHN0YXRlLCAkMS50eXBlKTsKKwkJICB3 cml0ZV9leHBfZWx0X2xvbmdjc3QgKHBzdGF0ZSwgKExPTkdFU1QpKCQxLnZh bCkpOworCQkgIHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChwc3RhdGUsIE9QX0xP TkcpOyB9Cit8CUZMT0FUX0xJVEVSQUwKKwkJeyB3cml0ZV9leHBfZWx0X29w Y29kZSAocHN0YXRlLCBPUF9ET1VCTEUpOworCQkgIHdyaXRlX2V4cF9lbHRf dHlwZSAocHN0YXRlLCAkMS50eXBlKTsKKwkJICB3cml0ZV9leHBfZWx0X2Ri bGNzdCAocHN0YXRlLCAkMS5kdmFsKTsKKwkJICB3cml0ZV9leHBfZWx0X29w Y29kZSAocHN0YXRlLCBPUF9ET1VCTEUpOyB9Cit8CUNIQVJBQ1RFUl9MSVRF UkFMCisJCXsgc3RydWN0IHN0b2tlbl92ZWN0b3IgdmVjOworCQkgIHZlYy5s ZW4gPSAxOworCQkgIHZlYy50b2tlbnMgPSAmJDE7CisJCSAgd3JpdGVfZXhw X3N0cmluZ192ZWN0b3IgKHBzdGF0ZSwgJDEudHlwZSwgJnZlYyk7IH0KK3wJ U3RyaW5nRXhwCisJCXsgaW50IGk7CisJCSAgd3JpdGVfZXhwX3N0cmluZ192 ZWN0b3IgKHBzdGF0ZSwgMCwgJiQxKTsKKwkJICBmb3IgKGkgPSAwOyBpIDwg JDEubGVuOyArK2kpCisJCSAgICBmcmVlICgkMS50b2tlbnNbaV0ucHRyKTsK KwkJICBmcmVlICgkMS50b2tlbnMpOyB9Cit8CUFycmF5TGl0ZXJhbAorCQl7 IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChwc3RhdGUsIE9QX0FSUkFZKTsKKwkJ ICB3cml0ZV9leHBfZWx0X2xvbmdjc3QgKHBzdGF0ZSwgKExPTkdFU1QpIDAp OworCQkgIHdyaXRlX2V4cF9lbHRfbG9uZ2NzdCAocHN0YXRlLCAoTE9OR0VT VCkgJDEgLSAxKTsKKwkJICB3cml0ZV9leHBfZWx0X29wY29kZSAocHN0YXRl LCBPUF9BUlJBWSk7IH0KKzsKKworQXJyYXlMaXRlcmFsOgorCSdbJyBBcmd1 bWVudExpc3Rfb3B0ICddJworCQl7ICQkID0gYXJnbGlzdF9sZW47IH0KKzsK KworSWRlbnRpZmllckV4cDoKKwlJREVOVElGSUVSCit8CUlkZW50aWZpZXJF eHAgJy4nIElERU5USUZJRVIKKwkJeyAkJC5sZW5ndGggPSAkMS5sZW5ndGgg KyAkMy5sZW5ndGggKyAxOworCQkgIGlmICgkMS5wdHIgKyAkMS5sZW5ndGgg KyAxID09ICQzLnB0cgorCQkgICAgICAmJiAkMS5wdHJbJDEubGVuZ3RoXSA9 PSAnLicpCisJCSAgICAkJC5wdHIgPSAkMS5wdHI7ICAvKiBPcHRpbWl6YXRp b24uICAqLworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgY2hhciAqYnVm ID0gbWFsbG9jICgkJC5sZW5ndGggKyAxKTsKKwkJICAgICAgbWFrZV9jbGVh bnVwIChmcmVlLCBidWYpOworCQkgICAgICBzcHJpbnRmIChidWYsICIlLipz LiUuKnMiLAorCQkgICAgICAgICAgICAgICAkMS5sZW5ndGgsICQxLnB0ciwg JDMubGVuZ3RoLCAkMy5wdHIpOworCQkgICAgICAkJC5wdHIgPSBidWY7CisJ CSAgICB9CisJCX0KKzsKKworU3RyaW5nRXhwOgorCVNUUklOR19MSVRFUkFM CisJCXsgLyogV2UgY29weSB0aGUgc3RyaW5nIGhlcmUsIGFuZCBub3QgaW4g dGhlCisJCSAgICAgbGV4ZXIsIHRvIGd1YXJhbnRlZSB0aGF0IHdlIGRvIG5v dCBsZWFrIGEKKwkJICAgICBzdHJpbmcuICBOb3RlIHRoYXQgd2UgZm9sbG93 IHRoZQorCQkgICAgIE5VTC10ZXJtaW5hdGlvbiBjb252ZW50aW9uIG9mIHRo ZQorCQkgICAgIGxleGVyLiAgKi8KKwkJICBzdHJ1Y3QgdHlwZWRfc3Rva2Vu ICp2ZWMgPSBYTkVXIChzdHJ1Y3QgdHlwZWRfc3Rva2VuKTsKKwkJICAkJC5s ZW4gPSAxOworCQkgICQkLnRva2VucyA9IHZlYzsKKworCQkgIHZlYy0+dHlw ZSA9ICQxLnR5cGU7CisJCSAgdmVjLT5sZW5ndGggPSAkMS5sZW5ndGg7CisJ CSAgdmVjLT5wdHIgPSBtYWxsb2MgKCQxLmxlbmd0aCArIDEpOworCQkgIG1l bWNweSAodmVjLT5wdHIsICQxLnB0ciwgJDEubGVuZ3RoICsgMSk7CisJCX0K K3wJU3RyaW5nRXhwIFNUUklOR19MSVRFUkFMCisJCXsgLyogTm90ZSB0aGF0 IHdlIE5VTC10ZXJtaW5hdGUgaGVyZSwgYnV0IGp1c3QKKwkJICAgICBmb3Ig Y29udmVuaWVuY2UuICAqLworCQkgIGNoYXIgKnA7CisJCSAgKyskJC5sZW47 CisJCSAgJCQudG9rZW5zID0gcmVhbGxvYyAoJCQudG9rZW5zLAorCQkJCSAg ICAgICAkJC5sZW4gKiBzaXplb2YgKHN0cnVjdCB0eXBlZF9zdG9rZW4pKTsK KworCQkgIHAgPSBtYWxsb2MgKCQyLmxlbmd0aCArIDEpOworCQkgIG1lbWNw eSAocCwgJDIucHRyLCAkMi5sZW5ndGggKyAxKTsKKworCQkgICQkLnRva2Vu c1skJC5sZW4gLSAxXS50eXBlID0gJDIudHlwZTsKKwkJICAkJC50b2tlbnNb JCQubGVuIC0gMV0ubGVuZ3RoID0gJDIubGVuZ3RoOworCQkgICQkLnRva2Vu c1skJC5sZW4gLSAxXS5wdHIgPSBwOworCQl9Cis7CisKK1R5cGVFeHA6CisJ QmFzaWNUeXBlCisJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBzdGF0ZSwg T1BfVFlQRSk7CisJCSAgd3JpdGVfZXhwX2VsdF90eXBlIChwc3RhdGUsICQx KTsKKwkJICB3cml0ZV9leHBfZWx0X29wY29kZSAocHN0YXRlLCBPUF9UWVBF KTsgfQorfAlCYXNpY1R5cGUgQmFzaWNUeXBlMgorCQl7ICQkID0gZm9sbG93 X3R5cGVzICgkMSk7CisJCSAgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBzdGF0 ZSwgT1BfVFlQRSk7CisJCSAgd3JpdGVfZXhwX2VsdF90eXBlIChwc3RhdGUs ICQkKTsKKwkJICB3cml0ZV9leHBfZWx0X29wY29kZSAocHN0YXRlLCBPUF9U WVBFKTsKKwkJfQorOworCitCYXNpY1R5cGUyOgorCScqJworCQl7IHB1c2hf dHlwZSAodHBfcG9pbnRlcik7IH0KK3wJJyonIEJhc2ljVHlwZTIKKwkJeyBw dXNoX3R5cGUgKHRwX3BvaW50ZXIpOyB9Cit8CSdbJyBJTlRFR0VSX0xJVEVS QUwgJ10nCisJCXsgcHVzaF90eXBlX2ludCAoJDIudmFsKTsKKwkJICBwdXNo X3R5cGUgKHRwX2FycmF5KTsgfQorfAknWycgSU5URUdFUl9MSVRFUkFMICdd JyBCYXNpY1R5cGUyCisJCXsgcHVzaF90eXBlX2ludCAoJDIudmFsKTsKKwkJ ICBwdXNoX3R5cGUgKHRwX2FycmF5KTsgfQorOworCitCYXNpY1R5cGU6CisJ VFlQRU5BTUUKKwkJeyAkJCA9ICQxLnR5cGU7IH0KK3wJQ0xBU1NfS0VZV09S RCBJZGVudGlmaWVyRXhwCisJCXsgJCQgPSBsb29rdXBfc3RydWN0IChjb3B5 X25hbWUgKCQyKSwKKwkJCQkgICAgICBleHByZXNzaW9uX2NvbnRleHRfYmxv Y2spOyB9Cit8CUNMQVNTX0tFWVdPUkQgQ09NUExFVEUKKwkJeyBtYXJrX2Nv bXBsZXRpb25fdGFnIChUWVBFX0NPREVfQ0xBU1MsICIiLCAwKTsKKwkJICAk JCA9IE5VTEw7IH0KK3wJQ0xBU1NfS0VZV09SRCBJZGVudGlmaWVyRXhwIENP TVBMRVRFCisJCXsgbWFya19jb21wbGV0aW9uX3RhZyAoVFlQRV9DT0RFX0NM QVNTLCAkMi5wdHIsICQyLmxlbmd0aCk7CisJCSAgJCQgPSBOVUxMOyB9Cit8 CVNUUlVDVF9LRVlXT1JEIElkZW50aWZpZXJFeHAKKwkJeyAkJCA9IGxvb2t1 cF9zdHJ1Y3QgKGNvcHlfbmFtZSAoJDIpLAorCQkJCSAgICAgIGV4cHJlc3Np b25fY29udGV4dF9ibG9jayk7IH0KK3wJU1RSVUNUX0tFWVdPUkQgQ09NUExF VEUKKwkJeyBtYXJrX2NvbXBsZXRpb25fdGFnIChUWVBFX0NPREVfU1RSVUNU LCAiIiwgMCk7CisJCSAgJCQgPSBOVUxMOyB9Cit8CVNUUlVDVF9LRVlXT1JE IElkZW50aWZpZXJFeHAgQ09NUExFVEUKKwkJeyBtYXJrX2NvbXBsZXRpb25f dGFnIChUWVBFX0NPREVfU1RSVUNULCAkMi5wdHIsICQyLmxlbmd0aCk7CisJ CSAgJCQgPSBOVUxMOyB9Cit8CVVOSU9OX0tFWVdPUkQgSWRlbnRpZmllckV4 cAorCQl7ICQkID0gbG9va3VwX3VuaW9uIChjb3B5X25hbWUgKCQyKSwKKwkJ CQkgICAgIGV4cHJlc3Npb25fY29udGV4dF9ibG9jayk7IH0KK3wJVU5JT05f S0VZV09SRCBDT01QTEVURQorCQl7IG1hcmtfY29tcGxldGlvbl90YWcgKFRZ UEVfQ09ERV9VTklPTiwgIiIsIDApOworCQkgICQkID0gTlVMTDsgfQorfAlV TklPTl9LRVlXT1JEIElkZW50aWZpZXJFeHAgQ09NUExFVEUKKwkJeyBtYXJr X2NvbXBsZXRpb25fdGFnIChUWVBFX0NPREVfVU5JT04sICQyLnB0ciwgJDIu bGVuZ3RoKTsKKwkJICAkJCA9IE5VTEw7IH0KK3wJRU5VTV9LRVlXT1JEIElk ZW50aWZpZXJFeHAKKwkJeyAkJCA9IGxvb2t1cF9lbnVtIChjb3B5X25hbWUg KCQyKSwKKwkJCQkgICAgZXhwcmVzc2lvbl9jb250ZXh0X2Jsb2NrKTsgfQor fAlFTlVNX0tFWVdPUkQgQ09NUExFVEUKKwkJeyBtYXJrX2NvbXBsZXRpb25f dGFnIChUWVBFX0NPREVfRU5VTSwgIiIsIDApOworCQkgICQkID0gTlVMTDsg fQorfAlFTlVNX0tFWVdPUkQgSWRlbnRpZmllckV4cCBDT01QTEVURQorCQl7 IG1hcmtfY29tcGxldGlvbl90YWcgKFRZUEVfQ09ERV9FTlVNLCAkMi5wdHIs ICQyLmxlbmd0aCk7CisJCSAgJCQgPSBOVUxMOyB9Cis7CisKKyUlCisKKy8q IFRha2UgY2FyZSBvZiBwYXJzaW5nIGEgbnVtYmVyIChhbnl0aGluZyB0aGF0 IHN0YXJ0cyB3aXRoIGEgZGlnaXQpLgorICAgU2V0IHl5bHZhbCBhbmQgcmV0 dXJuIHRoZSB0b2tlbiB0eXBlOyB1cGRhdGUgbGV4cHRyLgorICAgTEVOIGlz IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBpdC4gICovCisKKy8qKiog TmVlZHMgc29tZSBlcnJvciBjaGVja2luZyBmb3IgdGhlIGZsb2F0IGNhc2Ug KioqLworCitzdGF0aWMgaW50CitwYXJzZV9udW1iZXIgKHN0cnVjdCBwYXJz ZXJfc3RhdGUgKnBzLCBjb25zdCBjaGFyICpwLAorCSAgICAgIGludCBsZW4s IGludCBwYXJzZWRfZmxvYXQsIFlZU1RZUEUgKnB1dGl0aGVyZSkKK3sKKyAg VUxPTkdFU1QgbiA9IDA7CisgIFVMT05HRVNUIHByZXZuID0gMDsKKyAgVUxP TkdFU1QgdW47CisKKyAgaW50IGkgPSAwOworICBpbnQgYzsKKyAgaW50IGJh c2UgPSBpbnB1dF9yYWRpeDsKKyAgaW50IHVuc2lnbmVkX3AgPSAwOworICBp bnQgbG9uZ19wID0gMDsKKworICAvKiBXZSBoYXZlIGZvdW5kIGEgIkwiIG9y ICJVIiBzdWZmaXguICAqLworICBpbnQgZm91bmRfc3VmZml4ID0gMDsKKwor ICBVTE9OR0VTVCBoaWdoX2JpdDsKKyAgc3RydWN0IHR5cGUgKnNpZ25lZF90 eXBlOworICBzdHJ1Y3QgdHlwZSAqdW5zaWduZWRfdHlwZTsKKworICBpZiAo cGFyc2VkX2Zsb2F0KQorICAgIHsKKyAgICAgIGNvbnN0IHN0cnVjdCBidWls dGluX2RfdHlwZSAqYnVpbHRpbl9kX3R5cGVzOworICAgICAgY29uc3QgY2hh ciAqc3VmZml4OworICAgICAgaW50IHN1ZmZpeF9sZW47CisgICAgICBjaGFy ICpzLCAqc3A7CisKKyAgICAgIC8qIFN0cmlwIG91dCBhbGwgZW1iZWRkZWQg J18nIGJlZm9yZSBwYXNzaW5nIHRvIHBhcnNlX2Zsb2F0LiAgKi8KKyAgICAg IHMgPSAoY2hhciAqKSBhbGxvY2EgKGxlbiArIDEpOworICAgICAgc3AgPSBz OworICAgICAgd2hpbGUgKGxlbi0tID4gMCkKKwl7CisJICBpZiAoKnAgIT0g J18nKQorCSAgICAqc3ArKyA9ICpwOworCSAgcCsrOworCX0KKyAgICAgICpz cCA9ICdcMCc7CisgICAgICBsZW4gPSBzdHJsZW4gKHMpOworCisgICAgICBp ZiAoISBwYXJzZV9mbG9hdCAocywgbGVuLCAmcHV0aXRoZXJlLT50eXBlZF92 YWxfZmxvYXQuZHZhbCwgJnN1ZmZpeCkpCisJcmV0dXJuIEVSUk9SOworCisg ICAgICBzdWZmaXhfbGVuID0gcyArIGxlbiAtIHN1ZmZpeDsKKworICAgICAg aWYgKHN1ZmZpeF9sZW4gPT0gMCkKKwl7CisJICBwdXRpdGhlcmUtPnR5cGVk X3ZhbF9mbG9hdC50eXBlCisJICAgID0gcGFyc2VfZF90eXBlIChwcyktPmJ1 aWx0aW5fZG91YmxlOworCX0KKyAgICAgIGVsc2UgaWYgKHN1ZmZpeF9sZW4g PT0gMSkKKwl7CisJICAvKiBDaGVjayBzdWZmaXggZm9yIGBmJywgYGwnLCBv ciBgaScgKGZsb2F0LCByZWFsLCBvciBpZG91YmxlKS4gICovCisJICBpZiAo dG9sb3dlciAoKnN1ZmZpeCkgPT0gJ2YnKQorCSAgICB7CisJICAgICAgcHV0 aXRoZXJlLT50eXBlZF92YWxfZmxvYXQudHlwZQorCQk9IHBhcnNlX2RfdHlw ZSAocHMpLT5idWlsdGluX2Zsb2F0OworCSAgICB9CisJICBlbHNlIGlmICh0 b2xvd2VyICgqc3VmZml4KSA9PSAnbCcpCisJICAgIHsKKwkgICAgICBwdXRp dGhlcmUtPnR5cGVkX3ZhbF9mbG9hdC50eXBlCisJCT0gcGFyc2VfZF90eXBl IChwcyktPmJ1aWx0aW5fcmVhbDsKKwkgICAgfQorCSAgZWxzZSBpZiAodG9s b3dlciAoKnN1ZmZpeCkgPT0gJ2knKQorCSAgICB7CisJICAgICAgcHV0aXRo ZXJlLT50eXBlZF92YWxfZmxvYXQudHlwZQorCQk9IHBhcnNlX2RfdHlwZSAo cHMpLT5idWlsdGluX2lkb3VibGU7CisJICAgIH0KKwkgIGVsc2UKKwkgICAg cmV0dXJuIEVSUk9SOworCX0KKyAgICAgIGVsc2UgaWYgKHN1ZmZpeF9sZW4g PT0gMikKKwl7CisJICAvKiBDaGVjayBzdWZmaXggZm9yIGBmaScgb3IgYGxp JyAoaWZsb2F0IG9yIGlyZWFsKS4gICovCisJICBpZiAodG9sb3dlciAoc3Vm Zml4WzBdKSA9PSAnZicgJiYgdG9sb3dlciAoc3VmZml4WzFdID09ICdpJykp CisJICAgIHsKKwkgICAgICBwdXRpdGhlcmUtPnR5cGVkX3ZhbF9mbG9hdC50 eXBlCisJCT0gcGFyc2VfZF90eXBlIChwcyktPmJ1aWx0aW5faWZsb2F0Owor CSAgICB9CisJICBlbHNlIGlmICh0b2xvd2VyIChzdWZmaXhbMF0pID09ICds JyAmJiB0b2xvd2VyIChzdWZmaXhbMV0gPT0gJ2knKSkKKwkgICAgeworCSAg ICAgIHB1dGl0aGVyZS0+dHlwZWRfdmFsX2Zsb2F0LnR5cGUKKwkJPSBwYXJz ZV9kX3R5cGUgKHBzKS0+YnVpbHRpbl9pcmVhbDsKKwkgICAgfQorCSAgZWxz ZQorCSAgICByZXR1cm4gRVJST1I7CisJfQorICAgICAgZWxzZQorCXJldHVy biBFUlJPUjsKKworICAgICAgcmV0dXJuIEZMT0FUX0xJVEVSQUw7CisgICAg fQorCisgIC8qIEhhbmRsZSBiYXNlLXN3aXRjaGluZyBwcmVmaXhlcyAweCwg MGIsIDAgKi8KKyAgaWYgKHBbMF0gPT0gJzAnKQorICAgIHN3aXRjaCAocFsx XSkKKyAgICAgIHsKKyAgICAgIGNhc2UgJ3gnOgorICAgICAgY2FzZSAnWCc6 CisJaWYgKGxlbiA+PSAzKQorCSAgeworCSAgICBwICs9IDI7CisJICAgIGJh c2UgPSAxNjsKKwkgICAgbGVuIC09IDI7CisJICB9CisJYnJlYWs7CisKKyAg ICAgIGNhc2UgJ2InOgorICAgICAgY2FzZSAnQic6CisJaWYgKGxlbiA+PSAz KQorCSAgeworCSAgICBwICs9IDI7CisJICAgIGJhc2UgPSAyOworCSAgICBs ZW4gLT0gMjsKKwkgIH0KKwlicmVhazsKKworICAgICAgZGVmYXVsdDoKKwli YXNlID0gODsKKwlicmVhazsKKyAgICAgIH0KKworICB3aGlsZSAobGVuLS0g PiAwKQorICAgIHsKKyAgICAgIGMgPSAqcCsrOworICAgICAgaWYgKGMgPT0g J18nKQorCWNvbnRpbnVlOwkvKiBJZ25vcmUgZW1iZWRkZWQgJ18nLiAgKi8K KyAgICAgIGlmIChjID49ICdBJyAmJiBjIDw9ICdaJykKKwljICs9ICdhJyAt ICdBJzsKKyAgICAgIGlmIChjICE9ICdsJyAmJiBjICE9ICd1JykKKwluICo9 IGJhc2U7CisgICAgICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCisJewor CSAgaWYgKGZvdW5kX3N1ZmZpeCkKKwkgICAgcmV0dXJuIEVSUk9SOworCSAg biArPSBpID0gYyAtICcwJzsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYg KGJhc2UgPiAxMCAmJiBjID49ICdhJyAmJiBjIDw9ICdmJykKKwkgICAgewor CSAgICAgIGlmIChmb3VuZF9zdWZmaXgpCisJICAgICAgICByZXR1cm4gRVJS T1I7CisJICAgICAgbiArPSBpID0gYyAtICdhJyArIDEwOworCSAgICB9CisJ ICBlbHNlIGlmIChjID09ICdsJyAmJiBsb25nX3AgPT0gMCkKKwkgICAgewor CSAgICAgIGxvbmdfcCA9IDE7CisJICAgICAgZm91bmRfc3VmZml4ID0gMTsK KwkgICAgfQorCSAgZWxzZSBpZiAoYyA9PSAndScgJiYgdW5zaWduZWRfcCA9 PSAwKQorCSAgICB7CisJICAgICAgdW5zaWduZWRfcCA9IDE7CisJICAgICAg Zm91bmRfc3VmZml4ID0gMTsKKwkgICAgfQorCSAgZWxzZQorCSAgICByZXR1 cm4gRVJST1I7CS8qIENoYXIgbm90IGEgZGlnaXQgKi8KKwl9CisgICAgICBp ZiAoaSA+PSBiYXNlKQorCXJldHVybiBFUlJPUjsJCS8qIEludmFsaWQgZGln aXQgaW4gdGhpcyBiYXNlLiAgKi8KKyAgICAgIC8qIFBvcnRhYmx5IHRlc3Qg Zm9yIGludGVnZXIgb3ZlcmZsb3cuICAqLworICAgICAgaWYgKGMgIT0gJ2wn ICYmIGMgIT0gJ3UnKQorCXsKKwkgIFVMT05HRVNUIG4yID0gcHJldm4gKiBi YXNlOworCSAgaWYgKChuMiAvIGJhc2UgIT0gcHJldm4pIHx8IChuMiArIGkg PCBwcmV2bikpCisJICAgIGVycm9yIChfKCJOdW1lcmljIGNvbnN0YW50IHRv byBsYXJnZS4iKSk7CisJfQorICAgICAgcHJldm4gPSBuOworICAgIH0KKwor ICAvKiBBbiBpbnRlZ2VyIGNvbnN0YW50IGlzIGFuIGludCBvciBhIGxvbmcu ICBBbiBMIHN1ZmZpeCBmb3JjZXMgaXQgdG8KKyAgICAgYmUgbG9uZywgYW5k IGEgVSBzdWZmaXggZm9yY2VzIGl0IHRvIGJlIHVuc2lnbmVkLiAgVG8gZmln dXJlIG91dAorICAgICB3aGV0aGVyIGl0IGZpdHMsIHdlIHNoaWZ0IGl0IHJp Z2h0IGFuZCBzZWUgd2hldGhlciBhbnl0aGluZyByZW1haW5zLgorICAgICBO b3RlIHRoYXQgd2UgY2FuJ3Qgc2hpZnQgc2l6ZW9mIChMT05HRVNUKSAqIEhP U1RfQ0hBUl9CSVQgYml0cyBvcgorICAgICBtb3JlIGluIG9uZSBvcGVyYXRp b24sIGJlY2F1c2UgbWFueSBjb21waWxlcnMgd2lsbCB3YXJuIGFib3V0IHN1 Y2ggYQorICAgICBzaGlmdCAod2hpY2ggYWx3YXlzIHByb2R1Y2VzIGEgemVy byByZXN1bHQpLiAgVG8gZGVhbCB3aXRoIHRoZSBjYXNlCisgICAgIHdoZXJl IGl0IGlzIHdlIGp1c3QgYWx3YXlzIHNoaWZ0IHRoZSB2YWx1ZSBtb3JlIHRo YW4gb25jZSwgd2l0aCBmZXdlcgorICAgICBiaXRzIGVhY2ggdGltZS4gICov CisgIHVuID0gKFVMT05HRVNUKSBuID4+IDI7CisgIGlmIChsb25nX3AgPT0g MCAmJiAodW4gPj4gMzApID09IDApCisgICAgeworICAgICAgaGlnaF9iaXQg PSAoKFVMT05HRVNUKSAxKSA8PCAzMTsKKyAgICAgIHNpZ25lZF90eXBlID0g cGFyc2VfZF90eXBlIChwcyktPmJ1aWx0aW5faW50OworICAgICAgLyogRm9y IGRlY2ltYWwgbm90YXRpb24sIGtlZXAgdGhlIHNpZ24gb2YgdGhlIHdvcmtl ZCBvdXQgdHlwZS4gICovCisgICAgICBpZiAoYmFzZSA9PSAxMCAmJiAhdW5z aWduZWRfcCkKKwl1bnNpZ25lZF90eXBlID0gcGFyc2VfZF90eXBlIChwcykt PmJ1aWx0aW5fbG9uZzsKKyAgICAgIGVsc2UKKwl1bnNpZ25lZF90eXBlID0g cGFyc2VfZF90eXBlIChwcyktPmJ1aWx0aW5fdWludDsKKyAgICB9CisgIGVs c2UKKyAgICB7CisgICAgICBpbnQgc2hpZnQ7CisgICAgICBpZiAoc2l6ZW9m IChVTE9OR0VTVCkgKiBIT1NUX0NIQVJfQklUIDwgNjQpCisJLyogQSBsb25n IGxvbmcgZG9lcyBub3QgZml0IGluIGEgTE9OR0VTVC4gICovCisJc2hpZnQg PSAoc2l6ZW9mIChVTE9OR0VTVCkgKiBIT1NUX0NIQVJfQklUIC0gMSk7Cisg ICAgICBlbHNlCisJc2hpZnQgPSA2MzsKKyAgICAgIGhpZ2hfYml0ID0gKFVM T05HRVNUKSAxIDw8IHNoaWZ0OworICAgICAgc2lnbmVkX3R5cGUgPSBwYXJz ZV9kX3R5cGUgKHBzKS0+YnVpbHRpbl9sb25nOworICAgICAgdW5zaWduZWRf dHlwZSA9IHBhcnNlX2RfdHlwZSAocHMpLT5idWlsdGluX3Vsb25nOworICAg IH0KKworICBwdXRpdGhlcmUtPnR5cGVkX3ZhbF9pbnQudmFsID0gbjsKKwor ICAvKiBJZiB0aGUgaGlnaCBiaXQgb2YgdGhlIHdvcmtlZCBvdXQgdHlwZSBp cyBzZXQgdGhlbiB0aGlzIG51bWJlcgorICAgICBoYXMgdG8gYmUgdW5zaWdu ZWRfdHlwZS4gICovCisgIGlmICh1bnNpZ25lZF9wIHx8IChuICYgaGlnaF9i aXQpKQorICAgIHB1dGl0aGVyZS0+dHlwZWRfdmFsX2ludC50eXBlID0gdW5z aWduZWRfdHlwZTsKKyAgZWxzZQorICAgIHB1dGl0aGVyZS0+dHlwZWRfdmFs X2ludC50eXBlID0gc2lnbmVkX3R5cGU7CisKKyAgcmV0dXJuIElOVEVHRVJf TElURVJBTDsKK30KKworLyogVGVtcG9yYXJ5IG9ic3RhY2sgdXNlZCBmb3Ig aG9sZGluZyBzdHJpbmdzLiAgKi8KK3N0YXRpYyBzdHJ1Y3Qgb2JzdGFjayB0 ZW1wYnVmOworc3RhdGljIGludCB0ZW1wYnVmX2luaXQ7CisKKy8qIFBhcnNl IGEgc3RyaW5nIG9yIGNoYXJhY3RlciBsaXRlcmFsIGZyb20gVE9LUFRSLiAg VGhlIHN0cmluZyBvcgorICAgY2hhcmFjdGVyIG1heSBiZSB3aWRlIG9yIHVu aWNvZGUuICAqT1VUUFRSIGlzIHNldCB0byBqdXN0IGFmdGVyIHRoZQorICAg ZW5kIG9mIHRoZSBsaXRlcmFsIGluIHRoZSBpbnB1dCBzdHJpbmcuICBUaGUg cmVzdWx0aW5nIHRva2VuIGlzCisgICBzdG9yZWQgaW4gVkFMVUUuICBUaGlz IHJldHVybnMgYSB0b2tlbiB2YWx1ZSwgZWl0aGVyIFNUUklORyBvcgorICAg Q0hBUiwgZGVwZW5kaW5nIG9uIHdoYXQgd2FzIHBhcnNlZC4gICpIT1NUX0NI QVJTIGlzIHNldCB0byB0aGUKKyAgIG51bWJlciBvZiBob3N0IGNoYXJhY3Rl cnMgaW4gdGhlIGxpdGVyYWwuICAqLworCitzdGF0aWMgaW50CitwYXJzZV9z dHJpbmdfb3JfY2hhciAoY29uc3QgY2hhciAqdG9rcHRyLCBjb25zdCBjaGFy ICoqb3V0cHRyLAorCQkgICAgICBzdHJ1Y3QgdHlwZWRfc3Rva2VuICp2YWx1 ZSwgaW50ICpob3N0X2NoYXJzKQoreworICBpbnQgcXVvdGU7CisKKyAgLyog QnVpbGQgdGhlIGdkYiBpbnRlcm5hbCBmb3JtIG9mIHRoZSBpbnB1dCBzdHJp bmcgaW4gdGVtcGJ1Zi4gIE5vdGUKKyAgICAgdGhhdCB0aGUgYnVmZmVyIGlz IG51bGwgYnl0ZSB0ZXJtaW5hdGVkICpvbmx5KiBmb3IgdGhlCisgICAgIGNv bnZlbmllbmNlIG9mIGRlYnVnZ2luZyBnZGIgaXRzZWxmIGFuZCBwcmludGlu ZyB0aGUgYnVmZmVyCisgICAgIGNvbnRlbnRzIHdoZW4gdGhlIGJ1ZmZlciBj b250YWlucyBubyBlbWJlZGRlZCBudWxscy4gIEdkYiBkb2VzCisgICAgIG5v dCBkZXBlbmQgdXBvbiB0aGUgYnVmZmVyIGJlaW5nIG51bGwgYnl0ZSB0ZXJt aW5hdGVkLCBpdCB1c2VzCisgICAgIHRoZSBsZW5ndGggc3RyaW5nIGluc3Rl YWQuICBUaGlzIGFsbG93cyBnZGIgdG8gaGFuZGxlIEMgc3RyaW5ncworICAg ICAoYXMgd2VsbCBhcyBzdHJpbmdzIGluIG90aGVyIGxhbmd1YWdlcykgd2l0 aCBlbWJlZGRlZCBudWxsCisgICAgIGJ5dGVzICovCisKKyAgaWYgKCF0ZW1w YnVmX2luaXQpCisgICAgdGVtcGJ1Zl9pbml0ID0gMTsKKyAgZWxzZQorICAg IG9ic3RhY2tfZnJlZSAoJnRlbXBidWYsIE5VTEwpOworICBvYnN0YWNrX2lu aXQgKCZ0ZW1wYnVmKTsKKworICAvKiBTa2lwIHRoZSBxdW90ZS4gICovCisg IHF1b3RlID0gKnRva3B0cjsKKyAgKyt0b2twdHI7CisKKyAgKmhvc3RfY2hh cnMgPSAwOworCisgIHdoaWxlICgqdG9rcHRyKQorICAgIHsKKyAgICAgIGNo YXIgYyA9ICp0b2twdHI7CisgICAgICBpZiAoYyA9PSAnXFwnKQorCXsKKwkg ICArK3Rva3B0cjsKKwkgICAqaG9zdF9jaGFycyArPSBjX3BhcnNlX2VzY2Fw ZSAoJnRva3B0ciwgJnRlbXBidWYpOworCX0KKyAgICAgIGVsc2UgaWYgKGMg PT0gcXVvdGUpCisJYnJlYWs7CisgICAgICBlbHNlCisJeworCSAgb2JzdGFj a18xZ3JvdyAoJnRlbXBidWYsIGMpOworCSAgKyt0b2twdHI7CisJICAvKiBG SVhNRTogdGhpcyBkb2VzIHRoZSB3cm9uZyB0aGluZyB3aXRoIG11bHRpLWJ5 dGUgaG9zdAorCSAgICAgY2hhcmFjdGVycy4gIFdlIGNvdWxkIHVzZSBtYnJs ZW4gaGVyZSwgYnV0IHRoYXQgd291bGQKKwkgICAgIG1ha2UgInNldCBob3N0 LWNoYXJzZXQiIGEgYml0IGxlc3MgdXNlZnVsLiAgKi8KKwkgICsrKmhvc3Rf Y2hhcnM7CisJfQorICAgIH0KKworICBpZiAoKnRva3B0ciAhPSBxdW90ZSkK KyAgICB7CisgICAgICBpZiAocXVvdGUgPT0gJyInIHx8IHF1b3RlID09ICdg JykKKwllcnJvciAoXygiVW50ZXJtaW5hdGVkIHN0cmluZyBpbiBleHByZXNz aW9uLiIpKTsKKyAgICAgIGVsc2UKKwllcnJvciAoXygiVW5tYXRjaGVkIHNp bmdsZSBxdW90ZS4iKSk7CisgICAgfQorICArK3Rva3B0cjsKKworICAvKiBG SVhNRTogc2hvdWxkIGluc3RlYWQgdXNlIG93biBsYW5ndWFnZSBzdHJpbmdf dHlwZSBlbnVtCisgICAgIGFuZCBoYW5kbGUgRC1zcGVjaWZpYyBzdHJpbmcg c3VmZml4ZXMgaGVyZS4gKi8KKyAgaWYgKHF1b3RlID09ICdcJycpCisgICAg dmFsdWUtPnR5cGUgPSBDX0NIQVI7CisgIGVsc2UKKyAgICB2YWx1ZS0+dHlw ZSA9IENfU1RSSU5HOworCisgIHZhbHVlLT5wdHIgPSBvYnN0YWNrX2Jhc2Ug KCZ0ZW1wYnVmKTsKKyAgdmFsdWUtPmxlbmd0aCA9IG9ic3RhY2tfb2JqZWN0 X3NpemUgKCZ0ZW1wYnVmKTsKKworICAqb3V0cHRyID0gdG9rcHRyOworCisg IHJldHVybiBxdW90ZSA9PSAnXCcnID8gQ0hBUkFDVEVSX0xJVEVSQUwgOiBT VFJJTkdfTElURVJBTDsKK30KKworc3RydWN0IHRva2VuCit7CisgIGNoYXIg Km9wZXJhdG9yOworICBpbnQgdG9rZW47CisgIGVudW0gZXhwX29wY29kZSBv cGNvZGU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRva2VuIHRva2Vu dGFiM1tdID0KKyAgeworICAgIHsiXl49IiwgQVNTSUdOX01PRElGWSwgQklO T1BfRVhQfSwKKyAgICB7Ijw8PSIsIEFTU0lHTl9NT0RJRlksIEJJTk9QX0xT SH0sCisgICAgeyI+Pj0iLCBBU1NJR05fTU9ESUZZLCBCSU5PUF9SU0h9LAor ICB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRva2VuIHRva2VudGFiMltd ID0KKyAgeworICAgIHsiKz0iLCBBU1NJR05fTU9ESUZZLCBCSU5PUF9BRER9 LAorICAgIHsiLT0iLCBBU1NJR05fTU9ESUZZLCBCSU5PUF9TVUJ9LAorICAg IHsiKj0iLCBBU1NJR05fTU9ESUZZLCBCSU5PUF9NVUx9LAorICAgIHsiLz0i LCBBU1NJR05fTU9ESUZZLCBCSU5PUF9ESVZ9LAorICAgIHsiJT0iLCBBU1NJ R05fTU9ESUZZLCBCSU5PUF9SRU19LAorICAgIHsifD0iLCBBU1NJR05fTU9E SUZZLCBCSU5PUF9CSVRXSVNFX0lPUn0sCisgICAgeyImPSIsIEFTU0lHTl9N T0RJRlksIEJJTk9QX0JJVFdJU0VfQU5EfSwKKyAgICB7Il49IiwgQVNTSUdO X01PRElGWSwgQklOT1BfQklUV0lTRV9YT1J9LAorICAgIHsiKysiLCBJTkNS RU1FTlQsIEJJTk9QX0VORH0sCisgICAgeyItLSIsIERFQ1JFTUVOVCwgQklO T1BfRU5EfSwKKyAgICB7IiYmIiwgQU5EQU5ELCBCSU5PUF9FTkR9LAorICAg IHsifHwiLCBPUk9SLCBCSU5PUF9FTkR9LAorICAgIHsiXl4iLCBIQVRIQVQs IEJJTk9QX0VORH0sCisgICAgeyI8PCIsIExTSCwgQklOT1BfRU5EfSwKKyAg ICB7Ij4+IiwgUlNILCBCSU5PUF9FTkR9LAorICAgIHsiPT0iLCBFUVVBTCwg QklOT1BfRU5EfSwKKyAgICB7IiE9IiwgTk9URVFVQUwsIEJJTk9QX0VORH0s CisgICAgeyI8PSIsIExFUSwgQklOT1BfRU5EfSwKKyAgICB7Ij49IiwgR0VR LCBCSU5PUF9FTkR9LAorICAgIHsiLi4iLCBET1RET1QsIEJJTk9QX0VORH0s CisgIH07CisKKy8qIElkZW50aWZpZXItbGlrZSB0b2tlbnMuICAqLworc3Rh dGljIGNvbnN0IHN0cnVjdCB0b2tlbiBpZGVudF90b2tlbnNbXSA9CisgIHsK KyAgICB7ImlzIiwgSURFTlRJVFksIEJJTk9QX0VORH0sCisgICAgeyIhaXMi LCBOT1RJREVOVElUWSwgQklOT1BfRU5EfSwKKworICAgIHsiY2FzdCIsIENB U1RfS0VZV09SRCwgT1BfTlVMTH0sCisgICAgeyJjb25zdCIsIENPTlNUX0tF WVdPUkQsIE9QX05VTEx9LAorICAgIHsiaW1tdXRhYmxlIiwgSU1NVVRBQkxF X0tFWVdPUkQsIE9QX05VTEx9LAorICAgIHsic2hhcmVkIiwgU0hBUkVEX0tF WVdPUkQsIE9QX05VTEx9LAorICAgIHsic3VwZXIiLCBTVVBFUl9LRVlXT1JE LCBPUF9OVUxMfSwKKworICAgIHsibnVsbCIsIE5VTExfS0VZV09SRCwgT1Bf TlVMTH0sCisgICAgeyJ0cnVlIiwgVFJVRV9LRVlXT1JELCBPUF9OVUxMfSwK KyAgICB7ImZhbHNlIiwgRkFMU0VfS0VZV09SRCwgT1BfTlVMTH0sCisKKyAg ICB7ImluaXQiLCBJTklUX0tFWVdPUkQsIE9QX05VTEx9LAorICAgIHsic2l6 ZW9mIiwgU0laRU9GX0tFWVdPUkQsIE9QX05VTEx9LAorICAgIHsidHlwZW9m IiwgVFlQRU9GX0tFWVdPUkQsIE9QX05VTEx9LAorICAgIHsidHlwZWlkIiwg VFlQRUlEX0tFWVdPUkQsIE9QX05VTEx9LAorCisgICAgeyJkZWxlZ2F0ZSIs IERFTEVHQVRFX0tFWVdPUkQsIE9QX05VTEx9LAorICAgIHsiZnVuY3Rpb24i LCBGVU5DVElPTl9LRVlXT1JELCBPUF9OVUxMfSwKKyAgICB7InN0cnVjdCIs IFNUUlVDVF9LRVlXT1JELCBPUF9OVUxMfSwKKyAgICB7InVuaW9uIiwgVU5J T05fS0VZV09SRCwgT1BfTlVMTH0sCisgICAgeyJjbGFzcyIsIENMQVNTX0tF WVdPUkQsIE9QX05VTEx9LAorICAgIHsiaW50ZXJmYWNlIiwgSU5URVJGQUNF X0tFWVdPUkQsIE9QX05VTEx9LAorICAgIHsiZW51bSIsIEVOVU1fS0VZV09S RCwgT1BfTlVMTH0sCisgICAgeyJ0ZW1wbGF0ZSIsIFRFTVBMQVRFX0tFWVdP UkQsIE9QX05VTEx9LAorICB9OworCisvKiBJZiBOQU1FIGlzIGEgdHlwZSBu YW1lIGluIHRoaXMgc2NvcGUsIHJldHVybiBpdC4gICovCisKK3N0YXRpYyBz dHJ1Y3QgdHlwZSAqCitkX3R5cGVfZnJvbV9uYW1lIChzdHJ1Y3Qgc3Rva2Vu IG5hbWUpCit7CisgIHN0cnVjdCBzeW1ib2wgKnN5bTsKKyAgY2hhciAqY29w eSA9IGNvcHlfbmFtZSAobmFtZSk7CisKKyAgc3ltID0gbG9va3VwX3N5bWJv bCAoY29weSwgZXhwcmVzc2lvbl9jb250ZXh0X2Jsb2NrLAorCQkgICAgICAg U1RSVUNUX0RPTUFJTiwgTlVMTCk7CisgIGlmIChzeW0gIT0gTlVMTCkKKyAg ICByZXR1cm4gU1lNQk9MX1RZUEUgKHN5bSk7CisKKyAgcmV0dXJuIE5VTEw7 Cit9CisKKy8qIElmIE5BTUUgaXMgYSBtb2R1bGUgbmFtZSBpbiB0aGlzIHNj b3BlLCByZXR1cm4gaXQuICAqLworCitzdGF0aWMgc3RydWN0IHR5cGUgKgor ZF9tb2R1bGVfZnJvbV9uYW1lIChzdHJ1Y3Qgc3Rva2VuIG5hbWUpCit7Cisg IHN0cnVjdCBzeW1ib2wgKnN5bTsKKyAgY2hhciAqY29weSA9IGNvcHlfbmFt ZSAobmFtZSk7CisKKyAgc3ltID0gbG9va3VwX3N5bWJvbCAoY29weSwgZXhw cmVzc2lvbl9jb250ZXh0X2Jsb2NrLAorCQkgICAgICAgTU9EVUxFX0RPTUFJ TiwgTlVMTCk7CisgIGlmIChzeW0gIT0gTlVMTCkKKyAgICByZXR1cm4gU1lN Qk9MX1RZUEUgKHN5bSk7CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIElm IE5BTUUgaXMgYSB2YWxpZCB2YXJpYWJsZSBuYW1lIGluIHRoaXMgc2NvcGUs IHB1c2ggaXQgYW5kIHJldHVybiAxLgorICAgT3RoZXJ3aXNlLCByZXR1cm4g MC4gICovCisKK3N0YXRpYyBpbnQKK3B1c2hfdmFyaWFibGUgKHN0cnVjdCBw YXJzZXJfc3RhdGUgKnBzLCBzdHJ1Y3Qgc3Rva2VuIG5hbWUpCit7CisgIGNo YXIgKmNvcHkgPSBjb3B5X25hbWUgKG5hbWUpOworICBzdHJ1Y3QgZmllbGRf b2ZfdGhpc19yZXN1bHQgaXNfYV9maWVsZF9vZl90aGlzOworICBzdHJ1Y3Qg c3ltYm9sICpzeW07CisgIHN5bSA9IGxvb2t1cF9zeW1ib2wgKGNvcHksIGV4 cHJlc3Npb25fY29udGV4dF9ibG9jaywgVkFSX0RPTUFJTiwKKyAgICAgICAg ICAgICAgICAgICAgICAgJmlzX2FfZmllbGRfb2ZfdGhpcyk7CisgIGlmIChz eW0gJiYgU1lNQk9MX0NMQVNTIChzeW0pICE9IExPQ19UWVBFREVGKQorICAg IHsKKyAgICAgIGlmIChzeW1ib2xfcmVhZF9uZWVkc19mcmFtZSAoc3ltKSkK KyAgICAgICAgeworICAgICAgICAgIGlmIChpbm5lcm1vc3RfYmxvY2sgPT0g MCB8fAorICAgICAgICAgICAgICBjb250YWluZWRfaW4gKGJsb2NrX2ZvdW5k LCBpbm5lcm1vc3RfYmxvY2spKQorICAgICAgICAgICAgaW5uZXJtb3N0X2Js b2NrID0gYmxvY2tfZm91bmQ7CisgICAgICAgIH0KKworICAgICAgd3JpdGVf ZXhwX2VsdF9vcGNvZGUgKHBzLCBPUF9WQVJfVkFMVUUpOworICAgICAgLyog V2Ugd2FudCB0byB1c2UgdGhlIHNlbGVjdGVkIGZyYW1lLCBub3QgYW5vdGhl ciBtb3JlIGlubmVyIGZyYW1lCisgICAgICAgICB3aGljaCBoYXBwZW5zIHRv IGJlIGluIHRoZSBzYW1lIGJsb2NrLiAgKi8KKyAgICAgIHdyaXRlX2V4cF9l bHRfYmxvY2sgKHBzLCBOVUxMKTsKKyAgICAgIHdyaXRlX2V4cF9lbHRfc3lt IChwcywgc3ltKTsKKyAgICAgIHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChwcywg T1BfVkFSX1ZBTFVFKTsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgaWYg KGlzX2FfZmllbGRfb2ZfdGhpcy50eXBlICE9IE5VTEwpCisgICAgeworICAg ICAgLyogSXQgaGFuZ3Mgb2ZmIG9mIGB0aGlzJy4gIE11c3Qgbm90IGluYWR2 ZXJ0ZW50bHkgY29udmVydCBmcm9tIGEKKyAgICAgICAgIG1ldGhvZCBjYWxs IHRvIGRhdGEgcmVmLiAgKi8KKyAgICAgIGlmIChpbm5lcm1vc3RfYmxvY2sg PT0gMCB8fAorICAgICAgICAgIGNvbnRhaW5lZF9pbiAoYmxvY2tfZm91bmQs IGlubmVybW9zdF9ibG9jaykpCisgICAgICAgIGlubmVybW9zdF9ibG9jayA9 IGJsb2NrX2ZvdW5kOworICAgICAgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBz LCBPUF9USElTKTsKKyAgICAgIHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChwcywg T1BfVEhJUyk7CisgICAgICB3cml0ZV9leHBfZWx0X29wY29kZSAocHMsIFNU UlVDVE9QX1BUUik7CisgICAgICB3cml0ZV9leHBfc3RyaW5nIChwcywgbmFt ZSk7CisgICAgICB3cml0ZV9leHBfZWx0X29wY29kZSAocHMsIFNUUlVDVE9Q X1BUUik7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOwor fQorCisvKiBBc3N1bWluZyBhIHJlZmVyZW5jZSBleHByZXNzaW9uIGhhcyBi ZWVuIHB1c2hlZCwgZW1pdCB0aGUKKyAgIFNUUlVDVE9QX1BUUiBvcHMgdG8g YWNjZXNzIHRoZSBmaWVsZCBuYW1lZCBOQU1FLiAgSWYgTkFNRSBpcyBhCisg ICBxdWFsaWZpZWQgbmFtZSAoaGFzICcuJyksIGdlbmVyYXRlIGEgZmllbGQg YWNjZXNzIGZvciBlYWNoIHBhcnQuICAqLworCitzdGF0aWMgdm9pZAorcHVz aF9maWVsZG5hbWVzIChzdHJ1Y3QgcGFyc2VyX3N0YXRlICpwcywgc3RydWN0 IHN0b2tlbiBuYW1lKQoreworICBpbnQgaTsKKyAgc3RydWN0IHN0b2tlbiB0 b2tlbjsKKyAgdG9rZW4ucHRyID0gbmFtZS5wdHI7CisgIGZvciAoaSA9IDA7 ICA7ICBpKyspCisgICAgeworICAgICAgaWYgKGkgPT0gbmFtZS5sZW5ndGgg fHwgbmFtZS5wdHJbaV0gPT0gJy4nKQorICAgICAgICB7CisgICAgICAgICAg LyogdG9rZW4ucHRyIGlzIHN0YXJ0IG9mIGN1cnJlbnQgZmllbGQgbmFtZS4g ICovCisgICAgICAgICAgdG9rZW4ubGVuZ3RoID0gJm5hbWUucHRyW2ldIC0g dG9rZW4ucHRyOworICAgICAgICAgIHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChw cywgU1RSVUNUT1BfUFRSKTsKKyAgICAgICAgICB3cml0ZV9leHBfc3RyaW5n IChwcywgdG9rZW4pOworICAgICAgICAgIHdyaXRlX2V4cF9lbHRfb3Bjb2Rl IChwcywgU1RSVUNUT1BfUFRSKTsKKyAgICAgICAgICB0b2tlbi5wdHIgKz0g dG9rZW4ubGVuZ3RoICsgMTsKKyAgICAgICAgfQorICAgICAgaWYgKGkgPj0g bmFtZS5sZW5ndGgpCisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworLyog SGVscGVyIHJvdXRpbmUgZm9yIHB1c2hfZXhwcmVzc2lvbl9uYW1lLiAgSGFu ZGxlIGEgVFlQRSBzeW1ib2wsCisgICB3aGVyZSBET1RfSU5ERVggaXMgdGhl IGluZGV4IG9mIHRoZSBmaXJzdCAnLicgaWYgTkFNRSBpcyBwYXJ0IG9mCisg ICBhIHF1YWxpZmllZCB0eXBlLiAgKi8KKworc3RhdGljIHZvaWQKK3B1c2hf dHlwZV9uYW1lIChzdHJ1Y3QgcGFyc2VyX3N0YXRlICpwcywgc3RydWN0IHR5 cGUgKnR5cGUsCisJCXN0cnVjdCBzdG9rZW4gbmFtZSwgaW50IGRvdF9pbmRl eCkKK3sKKyAgaWYgKGRvdF9pbmRleCA9PSBuYW1lLmxlbmd0aCkKKyAgICB7 CisgICAgICB3cml0ZV9leHBfZWx0X29wY29kZSAocHMsIE9QX1RZUEUpOwor ICAgICAgd3JpdGVfZXhwX2VsdF90eXBlIChwcywgdHlwZSk7CisgICAgICB3 cml0ZV9leHBfZWx0X29wY29kZSAocHMsIE9QX1RZUEUpOworICAgIH0KKyAg ZWxzZQorICAgIHsKKyAgICAgIHN0cnVjdCBzdG9rZW4gdG9rZW47CisKKyAg ICAgIHRva2VuLnB0ciA9IG5hbWUucHRyOworICAgICAgdG9rZW4ubGVuZ3Ro ID0gZG90X2luZGV4OworCisgICAgICBkb3RfaW5kZXggPSAwOworCisgICAg ICB3aGlsZSAoZG90X2luZGV4IDwgbmFtZS5sZW5ndGggJiYgbmFtZS5wdHJb ZG90X2luZGV4XSAhPSAnLicpCisJZG90X2luZGV4Kys7CisgICAgICB0b2tl bi5wdHIgPSBuYW1lLnB0cjsKKyAgICAgIHRva2VuLmxlbmd0aCA9IGRvdF9p bmRleDsKKworICAgICAgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBzLCBPUF9T Q09QRSk7CisgICAgICB3cml0ZV9leHBfZWx0X3R5cGUgKHBzLCB0eXBlKTsK KyAgICAgIHdyaXRlX2V4cF9zdHJpbmcgKHBzLCB0b2tlbik7CisgICAgICB3 cml0ZV9leHBfZWx0X29wY29kZSAocHMsIE9QX1NDT1BFKTsKKworICAgICAg aWYgKGRvdF9pbmRleCA8IG5hbWUubGVuZ3RoKQorCXsKKwkgIGRvdF9pbmRl eCsrOworCSAgbmFtZS5wdHIgKz0gZG90X2luZGV4OworCSAgbmFtZS5sZW5n dGggLT0gZG90X2luZGV4OworCSAgcHVzaF9maWVsZG5hbWVzIChwcywgbmFt ZSk7CisJfQorICAgIH0KK30KKworLyogSGVscGVyIHJvdXRpbmUgZm9yIHB1 c2hfZXhwcmVzc2lvbl9uYW1lLiAgTGlrZSBwdXNoX3R5cGVfbmFtZSwKKyAg IGJ1dCB1c2VkIHdoZW4gVFlQRSBpcyBhIG1vZHVsZS4gIFJldHVybnMgMSBv biBwdXNoaW5nIHRoZSBzeW1ib2wuICAqLworCitzdGF0aWMgaW50CitwdXNo X21vZHVsZV9uYW1lIChzdHJ1Y3QgcGFyc2VyX3N0YXRlICpwcywgc3RydWN0 IHR5cGUgKm1vZHVsZSwKKwkJICBzdHJ1Y3Qgc3Rva2VuIG5hbWUsIGludCBk b3RfaW5kZXgpCit7CisgIGlmIChkb3RfaW5kZXggPT0gbmFtZS5sZW5ndGgp CisgICAgeworICAgICAgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKHBzLCBPUF9U WVBFKTsKKyAgICAgIHdyaXRlX2V4cF9lbHRfdHlwZSAocHMsIG1vZHVsZSk7 CisgICAgICB3cml0ZV9leHBfZWx0X29wY29kZSAocHMsIE9QX1RZUEUpOwor ICAgICAgcmV0dXJuIDE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAg c3RydWN0IHN5bWJvbCAqc3ltOworICAgICAgY2hhciAqY29weTsKKworICAg ICAgY29weSA9IGNvcHlfbmFtZSAobmFtZSk7CisgICAgICBzeW0gPSBsb29r dXBfc3ltYm9sX3N0YXRpYyAoY29weSwgZXhwcmVzc2lvbl9jb250ZXh0X2Js b2NrLAorCQkJCSAgVkFSX0RPTUFJTik7CisgICAgICBpZiAoc3ltICE9IE5V TEwpCisJc3ltID0gbG9va3VwX3N5bWJvbF9nbG9iYWwgKGNvcHksIGV4cHJl c3Npb25fY29udGV4dF9ibG9jaywKKwkJCQkgICAgVkFSX0RPTUFJTik7CisK KyAgICAgIGlmIChzeW0gIT0gTlVMTCkKKwl7CisJICBpZiAoU1lNQk9MX0NM QVNTIChzeW0pICE9IExPQ19UWVBFREVGKQorCSAgICB7CisJICAgICAgd3Jp dGVfZXhwX2VsdF9vcGNvZGUgKHBzLCBPUF9WQVJfVkFMVUUpOworCSAgICAg IHdyaXRlX2V4cF9lbHRfYmxvY2sgKHBzLCBOVUxMKTsKKwkgICAgICB3cml0 ZV9leHBfZWx0X3N5bSAocHMsIHN5bSk7CisJICAgICAgd3JpdGVfZXhwX2Vs dF9vcGNvZGUgKHBzLCBPUF9WQVJfVkFMVUUpOworCSAgICB9CisJICBlbHNl CisJICAgIHsKKwkgICAgICB3cml0ZV9leHBfZWx0X29wY29kZSAocHMsIE9Q X1RZUEUpOworCSAgICAgIHdyaXRlX2V4cF9lbHRfdHlwZSAocHMsIFNZTUJP TF9UWVBFIChzeW0pKTsKKwkgICAgICB3cml0ZV9leHBfZWx0X29wY29kZSAo cHMsIE9QX1RZUEUpOworCSAgICB9CisJICByZXR1cm4gMTsKKwl9CisgICAg fQorCisgIHJldHVybiAwOworfQorCisvKiBIYW5kbGUgTkFNRSBpbiBhbiBl eHByZXNzaW9uIChvciBMSFMpLCB3aGljaCBjb3VsZCBiZSBhCisgICB2YXJp YWJsZSwgdHlwZSwgb3IgbW9kdWxlLiAgKi8KKworc3RhdGljIHZvaWQKK3B1 c2hfZXhwcmVzc2lvbl9uYW1lIChzdHJ1Y3QgcGFyc2VyX3N0YXRlICpwcywg c3RydWN0IHN0b2tlbiBuYW1lKQoreworICBzdHJ1Y3Qgc3Rva2VuIHRva2Vu OworICBzdHJ1Y3QgdHlwZSAqdHlwOworICBzdHJ1Y3QgYm91bmRfbWluaW1h bF9zeW1ib2wgbXN5bWJvbDsKKyAgY2hhciAqY29weTsKKyAgaW50IGRvdGk7 CisKKyAgLyogSGFuZGxlIFZBUiwgd2hpY2ggY291bGQgYmUgbG9jYWwgb3Ig Z2xvYmFsLiAgKi8KKyAgaWYgKHB1c2hfdmFyaWFibGUgKHBzLCBuYW1lKSAh PSAwKQorICAgIHJldHVybjsKKworICAvKiBIYW5kbGUgTU9EVUxFLiAgKi8K KyAgdHlwID0gZF9tb2R1bGVfZnJvbV9uYW1lIChuYW1lKTsKKyAgaWYgKHR5 cCAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChwdXNoX21vZHVsZV9uYW1l IChwcywgdHlwLCBuYW1lLCBuYW1lLmxlbmd0aCkgIT0gMCkKKwlyZXR1cm47 CisgICAgfQorCisgIC8qIEhhbmRsZSBUWVBFLiAgKi8KKyAgdHlwID0gZF90 eXBlX2Zyb21fbmFtZSAobmFtZSk7CisgIGlmICh0eXAgIT0gTlVMTCkKKyAg ICB7CisgICAgICBwdXNoX3R5cGVfbmFtZSAocHMsIHR5cCwgbmFtZSwgbmFt ZS5sZW5ndGgpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAvKiBIYW5k bGUgVkFSLkZJRUxEMS4uRklFTEROLiAgKi8KKyAgZm9yIChkb3RpID0gMDsg IGRvdGkgPCBuYW1lLmxlbmd0aDsgIGRvdGkrKykKKyAgICB7CisgICAgICBp ZiAobmFtZS5wdHJbZG90aV0gPT0gJy4nKQorCXsKKwkgIHRva2VuLnB0ciA9 IG5hbWUucHRyOworCSAgdG9rZW4ubGVuZ3RoID0gZG90aTsKKworCSAgaWYg KHB1c2hfdmFyaWFibGUgKHBzLCB0b2tlbikgIT0gMCkKKwkgICAgeworCSAg ICAgIHRva2VuLnB0ciA9IG5hbWUucHRyICsgZG90aSArIDE7CisJICAgICAg dG9rZW4ubGVuZ3RoID0gbmFtZS5sZW5ndGggLSBkb3RpIC0gMTsKKwkgICAg ICBwdXNoX2ZpZWxkbmFtZXMgKHBzLCB0b2tlbik7CisJICAgICAgcmV0dXJu OworCSAgICB9CisJICBicmVhazsKKwl9CisgICAgfQorCisgIC8qIENvbnRp bnVlIGxvb2tpbmcgaWYgd2UgZm91bmQgYSAnLicgaW4gdGhlIG5hbWUuICAq LworICBpZiAoZG90aSA8IG5hbWUubGVuZ3RoKQorICAgIHsKKyAgICAgIHRv a2VuLnB0ciA9IG5hbWUucHRyOworICAgICAgZm9yICg7OykKKwl7CisJICB0 b2tlbi5sZW5ndGggPSBkb3RpOworCisJICAvKiBIYW5kbGUgUEFDS0FHRS5N T0RVTEUuICAqLworCSAgdHlwID0gZF9tb2R1bGVfZnJvbV9uYW1lICh0b2tl bik7CisJICBpZiAodHlwICE9IE5VTEwpCisJICAgIHsKKwkgICAgICBpZiAo cHVzaF9tb2R1bGVfbmFtZSAocHMsIHR5cCwgbmFtZSwgZG90aSkgIT0gMCkK KwkJcmV0dXJuOworCSAgICB9CisJICAvKiBIYW5kbGUgVFlQRS5GSUVMRDEu LkZJRUxETi4gICovCisJICB0eXAgPSBkX3R5cGVfZnJvbV9uYW1lICh0b2tl bik7CisJICBpZiAodHlwICE9IE5VTEwpCisJICAgIHsKKwkgICAgICBwdXNo X3R5cGVfbmFtZSAocHMsIHR5cCwgbmFtZSwgZG90aSk7CisJICAgICAgcmV0 dXJuOworCSAgICB9CisKKwkgIGlmIChkb3RpID49IG5hbWUubGVuZ3RoKQor CSAgICBicmVhazsKKwkgIGRvdGkrKzsgICAvKiBTa2lwICcuJyAgKi8KKwkg IHdoaWxlIChkb3RpIDwgbmFtZS5sZW5ndGggJiYgbmFtZS5wdHJbZG90aV0g IT0gJy4nKQorCSAgICBkb3RpKys7CisJfQorICAgIH0KKworICAvKiBMb29r dXAgZm9yZWlnbiBuYW1lIGluIGdsb2JhbCBzdGF0aWMgc3ltYm9scy4gICov CisgIGNvcHkgID0gY29weV9uYW1lIChuYW1lKTsKKyAgbXN5bWJvbCA9IGxv b2t1cF9ib3VuZF9taW5pbWFsX3N5bWJvbCAoY29weSk7CisgIGlmIChtc3lt Ym9sLm1pbnN5bSAhPSBOVUxMKQorICAgIHdyaXRlX2V4cF9tc3ltYm9sIChw cywgbXN5bWJvbCk7CisgIGVsc2UgaWYgKCFoYXZlX2Z1bGxfc3ltYm9scyAo KSAmJiAhaGF2ZV9wYXJ0aWFsX3N5bWJvbHMgKCkpCisgICAgZXJyb3IgKF8o Ik5vIHN5bWJvbCB0YWJsZSBpcyBsb2FkZWQuICBVc2UgdGhlIFwiZmlsZVwi IGNvbW1hbmQiKSk7CisgIGVsc2UKKyAgICBlcnJvciAoXygiTm8gc3ltYm9s IFwiJXNcIiBpbiBjdXJyZW50IGNvbnRleHQuIiksIGNvcHkpOworfQorCisv KiBUaGlzIGlzIHNldCBpZiBhIE5BTUUgdG9rZW4gYXBwZWFyZWQgYXQgdGhl IHZlcnkgZW5kIG9mIHRoZSBpbnB1dAorICAgc3RyaW5nLCB3aXRoIG5vIHdo aXRlc3BhY2Ugc2VwYXJhdGluZyB0aGUgbmFtZSBmcm9tIHRoZSBFT0YuICBU aGlzCisgICBpcyB1c2VkIG9ubHkgd2hlbiBwYXJzaW5nIHRvIGRvIGZpZWxk IG5hbWUgY29tcGxldGlvbi4gICovCitzdGF0aWMgaW50IHNhd19uYW1lX2F0 X2VvZjsKKworLyogVGhpcyBpcyBzZXQgaWYgdGhlIHByZXZpb3VzbHktcmV0 dXJuZWQgdG9rZW4gd2FzIGEgc3RydWN0dXJlIG9wZXJhdG9yLgorICAgVGhp cyBpcyB1c2VkIG9ubHkgd2hlbiBwYXJzaW5nIHRvIGRvIGZpZWxkIG5hbWUg Y29tcGxldGlvbi4gICovCitzdGF0aWMgaW50IGxhc3Rfd2FzX3N0cnVjdG9w OworCisvKiBSZWFkIG9uZSB0b2tlbiwgZ2V0dGluZyBjaGFyYWN0ZXJzIHRo cm91Z2ggbGV4cHRyLiAgKi8KKworc3RhdGljIGludAoreXlsZXggKHZvaWQp Cit7CisgIGludCBjOworICBpbnQgbmFtZWxlbjsKKyAgdW5zaWduZWQgaW50 IGk7CisgIGNvbnN0IGNoYXIgKnRva3N0YXJ0OworICBpbnQgc2F3X3N0cnVj dG9wID0gbGFzdF93YXNfc3RydWN0b3A7CisgIGNoYXIgKmNvcHk7CisKKyAg bGFzdF93YXNfc3RydWN0b3AgPSAwOworCisgcmV0cnk6CisKKyAgcHJldl9s ZXhwdHIgPSBsZXhwdHI7CisKKyAgdG9rc3RhcnQgPSBsZXhwdHI7CisgIC8q IFNlZSBpZiBpdCBpcyBhIHNwZWNpYWwgdG9rZW4gb2YgbGVuZ3RoIDMuICAq LworICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIHRva2VudGFiMyAvIHNpemVv ZiB0b2tlbnRhYjNbMF07IGkrKykKKyAgICBpZiAoc3RybmNtcCAodG9rc3Rh cnQsIHRva2VudGFiM1tpXS5vcGVyYXRvciwgMykgPT0gMCkKKyAgICAgIHsK KwlsZXhwdHIgKz0gMzsKKwl5eWx2YWwub3Bjb2RlID0gdG9rZW50YWIzW2ld Lm9wY29kZTsKKwlyZXR1cm4gdG9rZW50YWIzW2ldLnRva2VuOworICAgICAg fQorCisgIC8qIFNlZSBpZiBpdCBpcyBhIHNwZWNpYWwgdG9rZW4gb2YgbGVu Z3RoIDIuICAqLworICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIHRva2VudGFi MiAvIHNpemVvZiB0b2tlbnRhYjJbMF07IGkrKykKKyAgICBpZiAoc3RybmNt cCAodG9rc3RhcnQsIHRva2VudGFiMltpXS5vcGVyYXRvciwgMikgPT0gMCkK KyAgICAgIHsKKwlsZXhwdHIgKz0gMjsKKwl5eWx2YWwub3Bjb2RlID0gdG9r ZW50YWIyW2ldLm9wY29kZTsKKwlyZXR1cm4gdG9rZW50YWIyW2ldLnRva2Vu OworICAgICAgfQorCisgIHN3aXRjaCAoYyA9ICp0b2tzdGFydCkKKyAgICB7 CisgICAgY2FzZSAwOgorICAgICAgLyogSWYgd2UncmUgcGFyc2luZyBmb3Ig ZmllbGQgbmFtZSBjb21wbGV0aW9uLCBhbmQgdGhlIHByZXZpb3VzCisJIHRv a2VuIGFsbG93cyBzdWNoIGNvbXBsZXRpb24sIHJldHVybiBhIENPTVBMRVRF IHRva2VuLgorCSBPdGhlcndpc2UsIHdlIHdlcmUgYWxyZWFkeSBzY2Fubmlu ZyB0aGUgb3JpZ2luYWwgdGV4dCwgYW5kCisJIHdlJ3JlIHJlYWxseSBkb25l LiAgKi8KKyAgICAgIGlmIChzYXdfbmFtZV9hdF9lb2YpCisJeworCSAgc2F3 X25hbWVfYXRfZW9mID0gMDsKKwkgIHJldHVybiBDT01QTEVURTsKKwl9Cisg ICAgICBlbHNlIGlmIChzYXdfc3RydWN0b3ApCisJcmV0dXJuIENPTVBMRVRF OworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNhc2Ug JyAnOgorICAgIGNhc2UgJ1x0JzoKKyAgICBjYXNlICdcbic6CisgICAgICBs ZXhwdHIrKzsKKyAgICAgIGdvdG8gcmV0cnk7CisKKyAgICBjYXNlICdbJzoK KyAgICBjYXNlICcoJzoKKyAgICAgIHBhcmVuX2RlcHRoKys7CisgICAgICBs ZXhwdHIrKzsKKyAgICAgIHJldHVybiBjOworCisgICAgY2FzZSAnXSc6Cisg ICAgY2FzZSAnKSc6CisgICAgICBpZiAocGFyZW5fZGVwdGggPT0gMCkKKwly ZXR1cm4gMDsKKyAgICAgIHBhcmVuX2RlcHRoLS07CisgICAgICBsZXhwdHIr KzsKKyAgICAgIHJldHVybiBjOworCisgICAgY2FzZSAnLCc6CisgICAgICBp ZiAoY29tbWFfdGVybWluYXRlcyAmJiBwYXJlbl9kZXB0aCA9PSAwKQorCXJl dHVybiAwOworICAgICAgbGV4cHRyKys7CisgICAgICByZXR1cm4gYzsKKwor ICAgIGNhc2UgJy4nOgorICAgICAgLyogTWlnaHQgYmUgYSBmbG9hdGluZyBw b2ludCBudW1iZXIuICAqLworICAgICAgaWYgKGxleHB0clsxXSA8ICcwJyB8 fCBsZXhwdHJbMV0gPiAnOScpCisJeworCSAgaWYgKHBhcnNlX2NvbXBsZXRp b24pCisJICAgIGxhc3Rfd2FzX3N0cnVjdG9wID0gMTsKKwkgIGdvdG8gc3lt Ym9sOwkJLyogTm9wZSwgbXVzdCBiZSBhIHN5bWJvbC4gICovCisJfQorICAg ICAgLyogRkFMTCBUSFJVIGludG8gbnVtYmVyIGNhc2UuICAqLworCisgICAg Y2FzZSAnMCc6CisgICAgY2FzZSAnMSc6CisgICAgY2FzZSAnMic6CisgICAg Y2FzZSAnMyc6CisgICAgY2FzZSAnNCc6CisgICAgY2FzZSAnNSc6CisgICAg Y2FzZSAnNic6CisgICAgY2FzZSAnNyc6CisgICAgY2FzZSAnOCc6CisgICAg Y2FzZSAnOSc6CisgICAgICB7CisJLyogSXQncyBhIG51bWJlci4gICovCisJ aW50IGdvdF9kb3QgPSAwLCBnb3RfZSA9IDAsIHRva3R5cGU7CisJY29uc3Qg Y2hhciAqcCA9IHRva3N0YXJ0OworCWludCBoZXggPSBpbnB1dF9yYWRpeCA+ IDEwOworCisJaWYgKGMgPT0gJzAnICYmIChwWzFdID09ICd4JyB8fCBwWzFd ID09ICdYJykpCisJICB7CisJICAgIHAgKz0gMjsKKwkgICAgaGV4ID0gMTsK KwkgIH0KKworCWZvciAoOzsgKytwKQorCSAgeworCSAgICAvKiBIZXggZXhw b25lbnRzIHN0YXJ0IHdpdGggJ3AnLCBiZWNhdXNlICdlJyBpcyBhIHZhbGlk IGhleAorCSAgICAgICBkaWdpdCBhbmQgdGh1cyBkb2VzIG5vdCBpbmRpY2F0 ZSBhIGZsb2F0aW5nIHBvaW50IG51bWJlcgorCSAgICAgICB3aGVuIHRoZSBy YWRpeCBpcyBoZXguICAqLworCSAgICBpZiAoKCFoZXggJiYgIWdvdF9lICYm IHRvbG93ZXIgKHBbMF0pID09ICdlJykKKwkJfHwgKGhleCAmJiAhZ290X2Ug JiYgdG9sb3dlciAocFswXSA9PSAncCcpKSkKKwkgICAgICBnb3RfZG90ID0g Z290X2UgPSAxOworCSAgICAvKiBBICcuJyBhbHdheXMgaW5kaWNhdGVzIGEg ZGVjaW1hbCBmbG9hdGluZyBwb2ludCBudW1iZXIKKwkgICAgICAgcmVnYXJk bGVzcyBvZiB0aGUgcmFkaXguICBJZiB3ZSBoYXZlIGEgJy4uJyB0aGVuIGl0 cyB0aGUKKwkgICAgICAgZW5kIG9mIHRoZSBudW1iZXIgYW5kIHRoZSBiZWdp bm5pbmcgb2YgYSBzbGljZS4gICovCisJICAgIGVsc2UgaWYgKCFnb3RfZG90 ICYmIChwWzBdID09ICcuJyAmJiBwWzFdICE9ICcuJykpCisJCWdvdF9kb3Qg PSAxOworCSAgICAvKiBUaGlzIGlzIHRoZSBzaWduIG9mIHRoZSBleHBvbmVu dCwgbm90IHRoZSBlbmQgb2YgdGhlIG51bWJlci4gICovCisJICAgIGVsc2Ug aWYgKGdvdF9lICYmICh0b2xvd2VyIChwWy0xXSkgPT0gJ2UnIHx8IHRvbG93 ZXIgKHBbLTFdKSA9PSAncCcpCisJCSAgICAgJiYgKCpwID09ICctJyB8fCAq cCA9PSAnKycpKQorCSAgICAgIGNvbnRpbnVlOworCSAgICAvKiBXZSB3aWxs IHRha2UgYW55IGxldHRlcnMgb3IgZGlnaXRzLCBpZ25vcmluZyBhbnkgZW1i ZWRkZWQgJ18nLgorCSAgICAgICBwYXJzZV9udW1iZXIgd2lsbCBjb21wbGFp biBpZiBwYXN0IHRoZSByYWRpeCwgb3IgaWYgTCBvciBVIGFyZQorCSAgICAg ICBub3QgZmluYWwuICAqLworCSAgICBlbHNlIGlmICgoKnAgPCAnMCcgfHwg KnAgPiAnOScpICYmICgqcCAhPSAnXycpICYmCisJCSAgICAgKCgqcCA8ICdh JyB8fCAqcCA+ICd6JykgJiYgKCpwIDwgJ0EnIHx8ICpwID4gJ1onKSkpCisJ ICAgICAgYnJlYWs7CisJICB9CisKKwl0b2t0eXBlID0gcGFyc2VfbnVtYmVy IChwc3RhdGUsIHRva3N0YXJ0LCBwIC0gdG9rc3RhcnQsCisJCQkJZ290X2Rv dHxnb3RfZSwgJnl5bHZhbCk7CisJaWYgKHRva3R5cGUgPT0gRVJST1IpCisJ ICB7CisJICAgIGNoYXIgKmVycl9jb3B5ID0gKGNoYXIgKikgYWxsb2NhIChw IC0gdG9rc3RhcnQgKyAxKTsKKworCSAgICBtZW1jcHkgKGVycl9jb3B5LCB0 b2tzdGFydCwgcCAtIHRva3N0YXJ0KTsKKwkgICAgZXJyX2NvcHlbcCAtIHRv a3N0YXJ0XSA9IDA7CisJICAgIGVycm9yIChfKCJJbnZhbGlkIG51bWJlciBc IiVzXCIuIiksIGVycl9jb3B5KTsKKwkgIH0KKwlsZXhwdHIgPSBwOworCXJl dHVybiB0b2t0eXBlOworICAgICAgfQorCisgICAgY2FzZSAnQCc6CisgICAg ICB7CisJY29uc3QgY2hhciAqcCA9ICZ0b2tzdGFydFsxXTsKKwlzaXplX3Qg bGVuID0gc3RybGVuICgiZW50cnkiKTsKKworCXdoaWxlIChpc3NwYWNlICgq cCkpCisJICBwKys7CisJaWYgKHN0cm5jbXAgKHAsICJlbnRyeSIsIGxlbikg PT0gMCAmJiAhaXNhbG51bSAocFtsZW5dKQorCSAgICAmJiBwW2xlbl0gIT0g J18nKQorCSAgeworCSAgICBsZXhwdHIgPSAmcFtsZW5dOworCSAgICByZXR1 cm4gRU5UUlk7CisJICB9CisgICAgICB9CisgICAgICAvKiBGQUxMVEhSVSAq LworICAgIGNhc2UgJysnOgorICAgIGNhc2UgJy0nOgorICAgIGNhc2UgJyon OgorICAgIGNhc2UgJy8nOgorICAgIGNhc2UgJyUnOgorICAgIGNhc2UgJ3wn OgorICAgIGNhc2UgJyYnOgorICAgIGNhc2UgJ14nOgorICAgIGNhc2UgJ34n OgorICAgIGNhc2UgJyEnOgorICAgIGNhc2UgJzwnOgorICAgIGNhc2UgJz4n OgorICAgIGNhc2UgJz8nOgorICAgIGNhc2UgJzonOgorICAgIGNhc2UgJz0n OgorICAgIGNhc2UgJ3snOgorICAgIGNhc2UgJ30nOgorICAgIHN5bWJvbDoK KyAgICAgIGxleHB0cisrOworICAgICAgcmV0dXJuIGM7CisKKyAgICBjYXNl ICdcJyc6CisgICAgY2FzZSAnIic6CisgICAgY2FzZSAnYCc6CisgICAgICB7 CisJaW50IGhvc3RfbGVuOworCWludCByZXN1bHQgPSBwYXJzZV9zdHJpbmdf b3JfY2hhciAodG9rc3RhcnQsICZsZXhwdHIsICZ5eWx2YWwudHN2YWwsCisJ CQkJCSAgICZob3N0X2xlbik7CisJaWYgKHJlc3VsdCA9PSBDSEFSQUNURVJf TElURVJBTCkKKwkgIHsKKwkgICAgaWYgKGhvc3RfbGVuID09IDApCisJICAg ICAgZXJyb3IgKF8oIkVtcHR5IGNoYXJhY3RlciBjb25zdGFudC4iKSk7CisJ ICAgIGVsc2UgaWYgKGhvc3RfbGVuID4gMiAmJiBjID09ICdcJycpCisJICAg ICAgeworCQkrK3Rva3N0YXJ0OworCQluYW1lbGVuID0gbGV4cHRyIC0gdG9r c3RhcnQgLSAxOworCQlnb3RvIHRyeW5hbWU7CisJICAgICAgfQorCSAgICBl bHNlIGlmIChob3N0X2xlbiA+IDEpCisJICAgICAgZXJyb3IgKF8oIkludmFs aWQgY2hhcmFjdGVyIGNvbnN0YW50LiIpKTsKKwkgIH0KKwlyZXR1cm4gcmVz dWx0OworICAgICAgfQorICAgIH0KKworICBpZiAoIShjID09ICdfJyB8fCBj ID09ICckJworCXx8IChjID49ICdhJyAmJiBjIDw9ICd6JykgfHwgKGMgPj0g J0EnICYmIGMgPD0gJ1onKSkpCisgICAgLyogV2UgbXVzdCBoYXZlIGNvbWUg YWNyb3NzIGEgYmFkIGNoYXJhY3RlciAoZS5nLiAnOycpLiAgKi8KKyAgICBl cnJvciAoXygiSW52YWxpZCBjaGFyYWN0ZXIgJyVjJyBpbiBleHByZXNzaW9u IiksIGMpOworCisgIC8qIEl0J3MgYSBuYW1lLiAgU2VlIGhvdyBsb25nIGl0 IGlzLiAgKi8KKyAgbmFtZWxlbiA9IDA7CisgIGZvciAoYyA9IHRva3N0YXJ0 W25hbWVsZW5dOworICAgICAgIChjID09ICdfJyB8fCBjID09ICckJyB8fCAo YyA+PSAnMCcgJiYgYyA8PSAnOScpCisJfHwgKGMgPj0gJ2EnICYmIGMgPD0g J3onKSB8fCAoYyA+PSAnQScgJiYgYyA8PSAnWicpKTspCisgICAgYyA9IHRv a3N0YXJ0WysrbmFtZWxlbl07CisKKyAgLyogVGhlIHRva2VuICJpZiIgdGVy bWluYXRlcyB0aGUgZXhwcmVzc2lvbiBhbmQgaXMgTk9UCisgICAgIHJlbW92 ZWQgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLiAgKi8KKyAgaWYgKG5hbWVsZW4g PT0gMiAmJiB0b2tzdGFydFswXSA9PSAnaScgJiYgdG9rc3RhcnRbMV0gPT0g J2YnKQorICAgIHJldHVybiAwOworCisgIC8qIEZvciB0aGUgc2FtZSByZWFz b24gKGJyZWFrcG9pbnQgY29uZGl0aW9ucyksICJ0aHJlYWQgTiIKKyAgICAg dGVybWluYXRlcyB0aGUgZXhwcmVzc2lvbi4gICJ0aHJlYWQiIGNvdWxkIGJl IGFuIGlkZW50aWZpZXIsIGJ1dAorICAgICBhbiBpZGVudGlmaWVyIGlzIG5l dmVyIGZvbGxvd2VkIGJ5IGEgbnVtYmVyIHdpdGhvdXQgaW50ZXJ2ZW5pbmcK KyAgICAgcHVuY3R1YXRpb24uICAidGFzayIgaXMgc2ltaWxhci4gIEhhbmRs ZSBhYmJyZXZpYXRpb25zIG9mIHRoZXNlLAorICAgICBzaW1pbGFybHkgdG8g YnJlYWtwb2ludC5jOmZpbmRfY29uZGl0aW9uX2FuZF90aHJlYWQuICAqLwor ICBpZiAobmFtZWxlbiA+PSAxCisgICAgICAmJiAoc3RybmNtcCAodG9rc3Rh cnQsICJ0aHJlYWQiLCBuYW1lbGVuKSA9PSAwCisJICB8fCBzdHJuY21wICh0 b2tzdGFydCwgInRhc2siLCBuYW1lbGVuKSA9PSAwKQorICAgICAgJiYgKHRv a3N0YXJ0W25hbWVsZW5dID09ICcgJyB8fCB0b2tzdGFydFtuYW1lbGVuXSA9 PSAnXHQnKSkKKyAgICB7CisgICAgICBjb25zdCBjaGFyICpwID0gdG9rc3Rh cnQgKyBuYW1lbGVuICsgMTsKKworICAgICAgd2hpbGUgKCpwID09ICcgJyB8 fCAqcCA9PSAnXHQnKQorICAgICAgICBwKys7CisgICAgICBpZiAoKnAgPj0g JzAnICYmICpwIDw9ICc5JykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor CisgIGxleHB0ciArPSBuYW1lbGVuOworCisgdHJ5bmFtZToKKworICB5eWx2 YWwuc3ZhbC5wdHIgPSB0b2tzdGFydDsKKyAgeXlsdmFsLnN2YWwubGVuZ3Ro ID0gbmFtZWxlbjsKKworICAvKiBDYXRjaCBzcGVjaWZpYyBrZXl3b3Jkcy4g ICovCisgIGNvcHkgPSBjb3B5X25hbWUgKHl5bHZhbC5zdmFsKTsKKyAgZm9y IChpID0gMDsgaSA8IHNpemVvZiBpZGVudF90b2tlbnMgLyBzaXplb2YgaWRl bnRfdG9rZW5zWzBdOyBpKyspCisgICAgaWYgKHN0cmNtcCAoY29weSwgaWRl bnRfdG9rZW5zW2ldLm9wZXJhdG9yKSA9PSAwKQorICAgICAgeworCS8qIEl0 IGlzIG9rIHRvIGFsd2F5cyBzZXQgdGhpcywgZXZlbiB0aG91Z2ggd2UgZG9u J3QgYWx3YXlzCisJICAgc3RyaWN0bHkgbmVlZCB0by4gICovCisJeXlsdmFs Lm9wY29kZSA9IGlkZW50X3Rva2Vuc1tpXS5vcGNvZGU7CisJcmV0dXJuIGlk ZW50X3Rva2Vuc1tpXS50b2tlbjsKKyAgICAgIH0KKworICBpZiAoKnRva3N0 YXJ0ID09ICckJykKKyAgICByZXR1cm4gRE9MTEFSX1ZBUklBQkxFOworCisg IHl5bHZhbC50c3ltLnR5cGUKKyAgICA9IGxhbmd1YWdlX2xvb2t1cF9wcmlt aXRpdmVfdHlwZV9ieV9uYW1lIChwYXJzZV9sYW5ndWFnZSAocHN0YXRlKSwK KwkJCQkJICAgICAgcGFyc2VfZ2RiYXJjaCAocHN0YXRlKSwgY29weSk7Cisg IGlmICh5eWx2YWwudHN5bS50eXBlICE9IE5VTEwpCisgICAgcmV0dXJuIFRZ UEVOQU1FOworCisgIC8qIElucHV0IG5hbWVzIHRoYXQgYXJlbid0IHN5bWJv bHMgYnV0IEFSRSB2YWxpZCBoZXggbnVtYmVycywKKyAgICAgd2hlbiB0aGUg aW5wdXQgcmFkaXggcGVybWl0cyB0aGVtLCBjYW4gYmUgbmFtZXMgb3IgbnVt YmVycworICAgICBkZXBlbmRpbmcgb24gdGhlIHBhcnNlLiAgTm90ZSB3ZSBz dXBwb3J0IHJhZGl4ZXMgPiAxNiBoZXJlLiAgKi8KKyAgaWYgKCh0b2tzdGFy dFswXSA+PSAnYScgJiYgdG9rc3RhcnRbMF0gPCAnYScgKyBpbnB1dF9yYWRp eCAtIDEwKQorICAgICAgfHwgKHRva3N0YXJ0WzBdID49ICdBJyAmJiB0b2tz dGFydFswXSA8ICdBJyArIGlucHV0X3JhZGl4IC0gMTApKQorICAgIHsKKyAg ICAgIFlZU1RZUEUgbmV3bHZhbDsJLyogSXRzIHZhbHVlIGlzIGlnbm9yZWQu ICAqLworICAgICAgaW50IGhleHR5cGUgPSBwYXJzZV9udW1iZXIgKHBzdGF0 ZSwgdG9rc3RhcnQsIG5hbWVsZW4sIDAsICZuZXdsdmFsKTsKKyAgICAgIGlm IChoZXh0eXBlID09IElOVEVHRVJfTElURVJBTCkKKwlyZXR1cm4gTkFNRV9P Ul9JTlQ7CisgICAgfQorCisgIGlmIChwYXJzZV9jb21wbGV0aW9uICYmICps ZXhwdHIgPT0gJ1wwJykKKyAgICBzYXdfbmFtZV9hdF9lb2YgPSAxOworCisg IHJldHVybiBJREVOVElGSUVSOworfQorCitpbnQKK2RfcGFyc2UgKHN0cnVj dCBwYXJzZXJfc3RhdGUgKnBhcl9zdGF0ZSkKK3sKKyAgaW50IHJlc3VsdDsK KyAgc3RydWN0IGNsZWFudXAgKmJhY2tfdG87CisKKyAgLyogU2V0dGluZyB1 cCB0aGUgcGFyc2VyIHN0YXRlLiAgKi8KKyAgZ2RiX2Fzc2VydCAocGFyX3N0 YXRlICE9IE5VTEwpOworICBwc3RhdGUgPSBwYXJfc3RhdGU7CisKKyAgYmFj a190byA9IG1ha2VfY2xlYW51cCAobnVsbF9jbGVhbnVwLCBOVUxMKTsKKwor ICBtYWtlX2NsZWFudXBfcmVzdG9yZV9pbnRlZ2VyICgmeXlkZWJ1Zyk7Cisg IG1ha2VfY2xlYW51cF9jbGVhcl9wYXJzZXJfc3RhdGUgKCZwc3RhdGUpOwor ICB5eWRlYnVnID0gcGFyc2VyX2RlYnVnOworCisgIC8qIEluaXRpYWxpemUg c29tZSBzdGF0ZSB1c2VkIGJ5IHRoZSBsZXhlci4gICovCisgIGxhc3Rfd2Fz X3N0cnVjdG9wID0gMDsKKyAgc2F3X25hbWVfYXRfZW9mID0gMDsKKworICBy ZXN1bHQgPSB5eXBhcnNlICgpOworICBkb19jbGVhbnVwcyAoYmFja190byk7 CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQKK3l5ZXJyb3IgKGNoYXIg Km1zZykKK3sKKyAgaWYgKHByZXZfbGV4cHRyKQorICAgIGxleHB0ciA9IHBy ZXZfbGV4cHRyOworCisgIGVycm9yIChfKCJBICVzIGluIGV4cHJlc3Npb24s IG5lYXIgYCVzJy4iKSwgKG1zZyA/IG1zZyA6ICJlcnJvciIpLCBsZXhwdHIp OworfQorCi0tLSBhL2dkYi9kLWxhbmcuYworKysgYi9nZGIvZC1sYW5nLmMK QEAgLTk2LDggKzk2LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvcF9wcmlu dCBkX29wX3ByaW50X3RhYltdID0KICAgeyJ8IiwgQklOT1BfQklUV0lTRV9J T1IsIFBSRUNfQklUV0lTRV9JT1IsIDB9LAogICB7Il4iLCBCSU5PUF9CSVRX SVNFX1hPUiwgUFJFQ19CSVRXSVNFX1hPUiwgMH0sCiAgIHsiJiIsIEJJTk9Q X0JJVFdJU0VfQU5ELCBQUkVDX0JJVFdJU0VfQU5ELCAwfSwKLSAgeyI9PSIs IEJJTk9QX0VRVUFMLCBQUkVDX0VRVUFMLCAwfSwKLSAgeyIhPSIsIEJJTk9Q X05PVEVRVUFMLCBQUkVDX0VRVUFMLCAwfSwKKyAgeyI9PSIsIEJJTk9QX0VR VUFMLCBQUkVDX09SREVSLCAwfSwKKyAgeyIhPSIsIEJJTk9QX05PVEVRVUFM LCBQUkVDX09SREVSLCAwfSwKICAgeyI8PSIsIEJJTk9QX0xFUSwgUFJFQ19P UkRFUiwgMH0sCiAgIHsiPj0iLCBCSU5PUF9HRVEsIFBSRUNfT1JERVIsIDB9 LAogICB7Ij4iLCBCSU5PUF9HVFIsIFBSRUNfT1JERVIsIDB9LApAQCAtMTA2 LDkgKzEwNiwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9wX3ByaW50IGRf b3BfcHJpbnRfdGFiW10gPQogICB7Ijw8IiwgQklOT1BfTFNILCBQUkVDX1NI SUZULCAwfSwKICAgeyIrIiwgQklOT1BfQURELCBQUkVDX0FERCwgMH0sCiAg IHsiLSIsIEJJTk9QX1NVQiwgUFJFQ19BREQsIDB9LAorICB7In4iLCBCSU5P UF9DT05DQVQsIFBSRUNfQURELCAwfSwKICAgeyIqIiwgQklOT1BfTVVMLCBQ UkVDX01VTCwgMH0sCiAgIHsiLyIsIEJJTk9QX0RJViwgUFJFQ19NVUwsIDB9 LAogICB7IiUiLCBCSU5PUF9SRU0sIFBSRUNfTVVMLCAwfSwKKyAgeyJeXiIs IEJJTk9QX0VYUCwgUFJFQ19SRVBFQVQsIDB9LAogICB7IkAiLCBCSU5PUF9S RVBFQVQsIFBSRUNfUkVQRUFULCAwfSwKICAgeyItIiwgVU5PUF9ORUcsIFBS RUNfUFJFRklYLCAwfSwKICAgeyIhIiwgVU5PUF9MT0dJQ0FMX05PVCwgUFJF Q19QUkVGSVgsIDB9LApAQCAtMjI4LDggKzIzMCw4IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgbGFuZ3VhZ2VfZGVmbiBkX2xhbmd1YWdlX2RlZm4gPQogICBh cnJheV9yb3dfbWFqb3IsCiAgIG1hY3JvX2V4cGFuc2lvbl9ubywKICAgJmV4 cF9kZXNjcmlwdG9yX2MsCi0gIGNfcGFyc2UsCi0gIGNfZXJyb3IsCisgIGRf cGFyc2UsCisgIGRfZXJyb3IsCiAgIG51bGxfcG9zdF9wYXJzZXIsCiAgIGNf cHJpbnRjaGFyLAkJCS8qIFByaW50IGEgY2hhcmFjdGVyIGNvbnN0YW50LiAg Ki8KICAgY19wcmludHN0ciwJCQkvKiBGdW5jdGlvbiB0byBwcmludCBzdHJp bmcgY29uc3RhbnQuICAqLwotLS0gYS9nZGIvZC1sYW5nLmgKKysrIGIvZ2Ri L2QtbGFuZy5oCkBAIC01NCw2ICs1NCwxMiBAQCBzdHJ1Y3QgYnVpbHRpbl9k X3R5cGUKICAgc3RydWN0IHR5cGUgKmJ1aWx0aW5fZGNoYXI7CiB9OwogCisv KiBEZWZpbmVkIGluIGQtZXhwLnkuICAqLworCitleHRlcm4gaW50IGRfcGFy c2UgKHN0cnVjdCBwYXJzZXJfc3RhdGUgKik7CisKK2V4dGVybiB2b2lkIGRf ZXJyb3IgKGNoYXIgKik7CisKIC8qIERlZmluZWQgaW4gZC1sYW5nLmMgICov CiAKIGV4dGVybiBjb25zdCBjaGFyICpkX21haW5fbmFtZSAodm9pZCk7Ci0t LSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuZGxhbmcvZXhw cmVzc2lvbi5leHAKQEAgLTAsMCArMSwxMzUgQEAKKyMgQ29weXJpZ2h0IChD KSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisj IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LgorCisjIFRlc3QgYmFzaWMgYnVpbHRpbiB0eXBlcy4KKyMg Tk9URTogVGhlIHRlc3RzIGhlcmUgaW50ZW50aW9uYWxseSBkbyBub3QgcmVx dWlyZSBhIEQgY29tcGlsZXIuCisKK2xvYWRfbGliICJkLXN1cHBvcnQuZXhw IgorCitpZiB7IFtza2lwX2RfdGVzdHNdIH0geyBjb250aW51ZSB9CisKK3By b2MgdGVzdF9kX2ludGVnZXJfbGl0ZXJhbHMge30geworICAgICMgVGVzdCB2 YWxpZCBEIGludGVnZXIgbGl0ZXJhbHMgYXJlIGFjY2VwdGVkLgorCisgICAg Z2RiX3Rlc3QgInByaW50IDEyMzQ1NiIgIiA9IDEyMzQ1NiIKKyAgICBnZGJf dGVzdCAicHJpbnQgMTIzXzQ1NiIgIiA9IDEyMzQ1NiIKKyAgICBnZGJfdGVz dCAicHJpbnQgMV8yXzNfNF81XzZfIiAiID0gMTIzNDU2IgorCisgICAgZ2Ri X3Rlc3QgInByaW50IDB4MTIzNDU2IiAiID0gMTE5MzA0NiIKKyAgICBnZGJf dGVzdCAicHJpbnQgMHgxMjNfNDU2IiAiID0gMTE5MzA0NiIKKyAgICBnZGJf dGVzdCAicHJpbnQgMHgxXzJfM180XzVfNl8iICIgPSAxMTkzMDQ2IgorCisg ICAgZ2RiX3Rlc3QgInByaW50IDAxMjM0NTYiICIgPSA0Mjc5OCIKKyAgICBn ZGJfdGVzdCAicHJpbnQgMDEyM180NTYiICIgPSA0Mjc5OCIKKyAgICBnZGJf dGVzdCAicHJpbnQgMDFfMl8zXzRfNV82XyIgIiA9IDQyNzk4IgorCisgICAg Z2RiX3Rlc3QgInByaW50IDBiMTAxMDEwIiAiID0gNDIiCisgICAgZ2RiX3Rl c3QgInByaW50IDBiMTAxXzAxMCIgIiA9IDQyIgorICAgIGdkYl90ZXN0ICJw cmludCAwYjFfMF8xXzBfMV8wXyIgIiA9IDQyIgorCisgICAgIyBVc3VhbCBk ZWNpbWFsIG5vdGF0aW9uCisgICAgZ2RiX3Rlc3QgInB0eXBlIDAiICJ0eXBl ID0gaW50IgorICAgIGdkYl90ZXN0ICJwdHlwZSAyXzE0N180ODNfNjQ3IiAi dHlwZSA9IGludCIKKyAgICBnZGJfdGVzdCAicHR5cGUgMl8xNDdfNDgzXzY0 OCIgInR5cGUgPSBsb25nIgorICAgIGdkYl90ZXN0ICJwdHlwZSA0XzI5NF85 NjdfMjk2IiAidHlwZSA9IGxvbmciCisKKyAgICAjIEV4cGxpY2l0IHN1ZmZp eGVzCisgICAgZ2RiX3Rlc3QgInB0eXBlIDBMIiAidHlwZSA9IGxvbmciCisg ICAgZ2RiX3Rlc3QgInB0eXBlIDJfMTQ3XzQ4M182NDhVIiAidHlwZSA9IHVp bnQiCisgICAgZ2RiX3Rlc3QgInB0eXBlIDRfMjk0Xzk2N18yOTZVIiAidHlw ZSA9IHVsb25nIgorICAgIGdkYl90ZXN0ICJwdHlwZSAwVUwiICJ0eXBlID0g dWxvbmciCisgICAgZ2RiX3Rlc3QgInB0eXBlIDBMVSIgInR5cGUgPSB1bG9u ZyIKKworICAgICMgSGV4YWRlY2ltYWwgbm90YXRpb24KKyAgICBnZGJfdGVz dCAicHR5cGUgMHgwIiAidHlwZSA9IGludCIKKyAgICBnZGJfdGVzdCAicHR5 cGUgMHg3RkZGX0ZGRkYiICJ0eXBlID0gaW50IgorICAgIGdkYl90ZXN0ICJw dHlwZSAweDgwMDBfMDAwMCIgInR5cGUgPSB1aW50IgorICAgIGdkYl90ZXN0 ICJwdHlwZSAweDFfMDAwMF8wMDAwIiAidHlwZSA9IGxvbmciCisKKyAgICAj IEhleGFkZWNpbWFsIG5vdGF0aW9uIHdpdGggZXhwbGljaXQgc3VmZml4ZXMK KyAgICBnZGJfdGVzdCAicHR5cGUgMHgwTCIgInR5cGUgPSBsb25nIgorICAg IGdkYl90ZXN0ICJwdHlwZSAweDdGRkZfRkZGRlUiICJ0eXBlID0gdWludCIK KyAgICBnZGJfdGVzdCAicHR5cGUgMHgxXzAwMDBfMDAwMFUiICJ0eXBlID0g dWxvbmciCisgICAgZ2RiX3Rlc3QgInB0eXBlIDB4MFVMIiAidHlwZSA9IHVs b25nIgorICAgIGdkYl90ZXN0ICJwdHlwZSAweDBMVSIgInR5cGUgPSB1bG9u ZyIKKworICAgICMgT2N0YWwgbm90YXRpb24KKyAgICBnZGJfdGVzdCAicHR5 cGUgMDAiICJ0eXBlID0gaW50IgorICAgIGdkYl90ZXN0ICJwdHlwZSAwMTdf Nzc3Xzc3N183NzciICJ0eXBlID0gaW50IgorICAgIGdkYl90ZXN0ICJwdHlw ZSAwMjBfMDAwXzAwMF8wMDAiICJ0eXBlID0gdWludCIKKyAgICBnZGJfdGVz dCAicHR5cGUgMDQwXzAwMF8wMDBfMDAwIiAidHlwZSA9IGxvbmciCisKKyAg ICAjIE9jdGFsIG5vdGF0aW9uIHdpdGggZXhwbGljaXQgc3VmZml4ZXMKKyAg ICBnZGJfdGVzdCAicHR5cGUgMDBMIiAidHlwZSA9IGxvbmciCisgICAgZ2Ri X3Rlc3QgInB0eXBlIDAxN183NzdfNzc3Xzc3N1UiICJ0eXBlID0gdWludCIK KyAgICBnZGJfdGVzdCAicHR5cGUgMDQwXzAwMF8wMDBfMDAwVSIgInR5cGUg PSB1bG9uZyIKKyAgICBnZGJfdGVzdCAicHR5cGUgMDBVTCIgInR5cGUgPSB1 bG9uZyIKKyAgICBnZGJfdGVzdCAicHR5cGUgMDBMVSIgInR5cGUgPSB1bG9u ZyIKKworICAgICMgQmluYXJ5IG5vdGF0aW9uCisgICAgZ2RiX3Rlc3QgInB0 eXBlIDBiMCIgInR5cGUgPSBpbnQiCisgICAgZ2RiX3Rlc3QgInB0eXBlIDBi MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSIgInR5cGUgPSBpbnQi CisgICAgZ2RiX3Rlc3QgInB0eXBlIDBiMTAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAiICJ0eXBlID0gdWludCIKKyAgICBnZGJfdGVzdCAicHR5 cGUgMGIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiICJ0eXBl ID0gbG9uZyIKKworICAgICMgQmluYXJ5IG5vdGF0aW9uIHdpdGggZXhwbGlj aXQgc3VmZml4ZXMKKyAgICBnZGJfdGVzdCAicHR5cGUgMGIwTCIgInR5cGUg PSBsb25nIgorICAgIGdkYl90ZXN0ICJwdHlwZSAwYjExMTExMTExMTExMTEx MTExMTExMTExMTExMTExMTFVIiAidHlwZSA9IHVpbnQiCisgICAgZ2RiX3Rl c3QgInB0eXBlIDBiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw VSIgInR5cGUgPSB1bG9uZyIKKyAgICBnZGJfdGVzdCAicHR5cGUgMGIwVUwi ICJ0eXBlID0gdWxvbmciCisgICAgZ2RiX3Rlc3QgInB0eXBlIDBiMExVIiAi dHlwZSA9IHVsb25nIgorfQorCitwcm9jIHRlc3RfZF9mbG9hdF9saXRlcmFs cyB7fSB7CisgICAgIyBUZXN0IHZhbGlkIEQgZmxvYXQgbGl0ZXJhbHMgYXJl IGFjY2VwdGVkLgorCisgICAgZ2RiX3Rlc3QgInB0eXBlIDEyM180NTYuNTY3 XzgiICJ0eXBlID0gZG91YmxlIgorICAgIGdkYl90ZXN0ICJwdHlwZSAxXzJf M180XzVfNl8uXzVfNl83XzgiICJ0eXBlID0gZG91YmxlIgorICAgIGdkYl90 ZXN0ICJwdHlwZSAxXzJfM180XzVfNl8uXzVlLTZfIiAidHlwZSA9IGRvdWJs ZSIKKyAgICBnZGJfdGVzdCAicHR5cGUgMHgxLkZGRkZGRkZGRkZGRkZwMTAy MyIgInR5cGUgPSBkb3VibGUiCisgICAgZ2RiX3Rlc3QgInB0eXBlIDB4MXAt NTJMIiAidHlwZSA9IHJlYWwiCisgICAgZ2RiX3Rlc3QgInB0eXBlIDEuMTc1 NDk0MzUxZS0zOEYiICJ0eXBlID0gZmxvYXQiCisgICAgZ2RiX3Rlc3QgInB0 eXBlIDYuM2kiICJ0eXBlID0gaWRvdWJsZSIKKyAgICBnZGJfdGVzdCAicHR5 cGUgNi4zZmkiICJ0eXBlID0gaWZsb2F0IgorICAgIGdkYl90ZXN0ICJwdHlw ZSA2LjRMaSIgInR5cGUgPSBpcmVhbCIKK30KKworcHJvYyB0ZXN0X2RfZXhw cmVzc2lvbnMge30geworICAgICMgVGVzdCBleHByZXNzaW9uIGJlaGF2aW91 ciBzcGVjaWZpYyB0byBELgorCisgICAgIyBDb21wYXJpc29uIGFuZCBvcmRl ciBleHByZXNzaW9ucyBoYXZlIHNhbWUgcHJlY2VkZW5jZS4KKyAgICBnZGJf dGVzdCAicHJpbnQgMSA9PSAyID4gMCIgIkEgc3ludGF4IGVycm9yIGluIGV4 cHJlc3Npb24sIG5lYXIgYD4gMCdcLiIKKyAgICBnZGJfdGVzdCAicHJpbnQg KDEgPT0gMikgPiAwIiAiID0gMCIKKworICAgICMgRXhwb25lbnQgZXhwcmVz c2lvbnMKKyAgICBnZGJfdGVzdCAiNSBeXiA1IiAiMzEyNSIKKyAgICBnZGJf dGVzdCAiMTQ0IF5eIDAuNSIgIjEyIgorCisgICAgZ2RiX3Rlc3Rfbm9fb3V0 cHV0ICJzZXQgXCR2YXIgPSAxNDQgXl4gMC41IiAiIgorICAgIGdkYl90ZXN0 ICJwcmludCBcJHZhciBeXj0gMiIgIjE0NCIKK30KKworIyBTdGFydCB3aXRo IGEgZnJlc2ggZ2RiLgorCitnZGJfZXhpdAorZ2RiX3N0YXJ0CisKK2lmIFtz ZXRfbGFuZ19kXSB7CisgICAgdGVzdF9kX2ludGVnZXJfbGl0ZXJhbHMKKyAg ICB0ZXN0X2RfZmxvYXRfbGl0ZXJhbHMKKyAgICB0ZXN0X2RfZXhwcmVzc2lv bnMKK30gZWxzZSB7CisgICAgd2FybmluZyAiRCB0eXBlIHRlc3RzIHN1cHBy ZXNzZWQuIgorfQo= --001a11c1fca2fad40404fb0b305d--