Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v95QC-009kEi-2L for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Oct 2025 17:36:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1v95QA-007UfL-Ht for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Oct 2025 17:36:17 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v95Q9-007UfD-NO for pgsql-hackers@lists.postgresql.org; Wed, 15 Oct 2025 17:36:17 +0000 Received: from mail-qv1-xf34.google.com ([2607:f8b0:4864:20::f34]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1v95Q6-001wKc-1D for pgsql-hackers@lists.postgresql.org; Wed, 15 Oct 2025 17:36:15 +0000 Received: by mail-qv1-xf34.google.com with SMTP id 6a1803df08f44-78e9f48da30so86379666d6.1 for ; Wed, 15 Oct 2025 10:36:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760549773; x=1761154573; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=J3+cc7azLksgGeJOyu4gcqqWBhDulIODD11uHcp9t/I=; b=YIsewouvqUoktOMiYpuBBwtR6K8xtRsKyjy0PBrkQ9K74GdPwz2xqNdAkFcgfYpGc+ uWFmQJOWJYKu3f35jwK/w+uhd1ynXM58L/lLwmmF1Nql/oLfs2JEAcCri2zihzSG8j65 HOxmblz7LR2+wZW4bY/zv+Qi99H9SGkP7wAU7Jyb5cHrC3wf0awN400WiRJJU/jnRH// DPoPyMsGHOhsWaQT68VGHqxUxDKzqlJrCmuEHVvEUGypWy0VhDKfKayR0o2hmlZSwBAG kvNdGxaGHN5cWGxLixL3CauQACFUitkTkXF26YBag1FhvJ7SCKaUXLOgUNm/NnM+eiC5 iHFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760549773; x=1761154573; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=J3+cc7azLksgGeJOyu4gcqqWBhDulIODD11uHcp9t/I=; b=s/JM8sDxDYWJYQZRE1wDUn60lruEWK2/0xn9/sHV/zSzllHH0r37xxrDJ+Dsn2Ochv almzdXhRx0rEKEAhoQxeev/M0N5NR4dO0tosUZFG2pFBkUhLO8+JhD5xKKofybh7WbGG sogVruaR6H+lXTws7E3zW+ilQOt6RK7No7z4wzUD+XqiSUkPMDb/MzNu/6qmwl0B9VHK ZMNODobx7oIQ6rKmQYAQY+iViPGt07i4YnCR5In5+yHQ1TZESPNyuhY6c6ZLHmIEpxB2 X/RdgBG7fhjpBhMaDgF+fybu3VRDO5iESEX3R0r1ICqaDNCToeJnNgxHxyflKEYPIlo6 R7tg== X-Forwarded-Encrypted: i=1; AJvYcCViLQ6aeWHUIjIuvkU2mh4gpC7e5XeyxRgJ9rhsfhc06tadsBP6juOMEtskPw+odB4bQDGS4pjroroENY7v@lists.postgresql.org X-Gm-Message-State: AOJu0Yyx5gqoeZOcobpiyYFumxMoRiCW09DWkTeiPUVxLPWJKeo0KK/l NdM3VQYj2M4kuAPG2Hg7PsyKgOH65bY+qQZcAOib83pI6rbV42DzbgTNiFoVTsZwvlBPmObBIli TaVXPGLqQUE2K1FwAgWnDL7C7K6APoCM= X-Gm-Gg: ASbGnctLj9FuLvOqd1uxSQakkZb5dhceqin+M3HxqLhlzSM8Dd+UoTNYCfLJMRdP4rz aQW87GeHEfGkLt7m2AUCnZFTj87e9eAkvFCgRjHnqpt1S7cludoH/LnBqXU4ltELtyC7RokESMu GUE4krZPe55Q7ZhLJOdcHKyMwVoJo9zWVn38/Qw5OONpTABTrJvPmbfXS9jeZez1C6bsytmY/8Q JUgOW2p1kEScqDqwbRGYhexB9Q= X-Google-Smtp-Source: AGHT+IEJ04sH4nq8z0ysRNbQ7rpND1ycAi0jGzvR/QeG+dEa2nEDxMfnbFZUaPWHwatRA/IE5hxnQ+XMZq+bbEJ25Os= X-Received: by 2002:ac8:5751:0:b0:4e7:2d88:9ca with SMTP id d75a77b69052e-4e72d880f32mr147701141cf.56.1760549772401; Wed, 15 Oct 2025 10:36:12 -0700 (PDT) MIME-Version: 1.0 References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <20250722005339.ca.nmisch@google.com> <20250725162141.6f.nmisch@google.com> <2225040.1753477169@sss.pgh.pa.us> <20250727235628.e2.nmisch@google.com> <8f2ad50b-ebb7-4adc-997e-25e0ad96ff34@dunslane.net> <2bed001a-462c-42da-9a6b-3c7884502932@dunslane.net> <20250824010811.4d.nmisch@google.com> <82eb35b8-7f07-493b-b689-0934919e1dc3@dunslane.net> In-Reply-To: <82eb35b8-7f07-493b-b689-0934919e1dc3@dunslane.net> From: Mahendra Singh Thalor Date: Wed, 15 Oct 2025 23:05:58 +0530 X-Gm-Features: AS18NWBkixeCPATA6CvXrVJXnQjrfEs72TgpkpSSL3eRFycR2uoX6MM5rpuwbDA Message-ID: Subject: Re: Non-text mode for pg_dumpall To: Andrew Dunstan , tushar Cc: Noah Misch , Tom Lane , =?UTF-8?Q?=C3=81lvaro_Herrera?= , jian he , Srinath Reddy , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000cb4b33064135ef1b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cb4b33064135ef1b Content-Type: text/plain; charset="UTF-8" On Sun, 24 Aug 2025 at 22:12, Andrew Dunstan wrote: > > > On 2025-08-23 Sa 9:08 PM, Noah Misch wrote: > > On Wed, Jul 30, 2025 at 02:51:59PM -0400, Andrew Dunstan wrote: > > OK, now that's reverted we should discuss how to proceed. I had two thoughts > - we could use invent a JSON format for the globals, or we could just use > the existing archive format. I think the archive format is pretty flexible, > and should be able to accommodate this. The downside is it's not humanly > readable. The upside is that we don't need to do anything special either to > write it or parse it. > > I would first try to use the existing archiver API, because that makes it > harder to miss bugs. Any tension between that API and pg_dumpall is likely to > have corresponding tension on the pg_restore side. Resolving that tension > will reveal much of the project's scope that remained hidden during the v18 > attempt. Perhaps more important than that, using the archiver API means > future pg_dump and pg_restore options are more likely to cooperate properly > with $SUBJECT. In other words, I want it to be hard to add pg_dump/pg_restore > features that malfunction only for $SUBJECT archives. The strength of the > archiver architecture shows in how rarely new features need format-specific > logic and how rarely format-specific bugs get reported. We've had little or > no trouble with e.g. bugs that appear in -Fd but not in -Fc. > > > Yeah, that's what we're going to try. > > > cheers > > > andrew > > -- > Andrew Dunstan > EDB: https://www.enterprisedb.com Thanks Andrew, Noah and all others for feedback. Based on the above suggestions and discussions, I removed sql commands from the global.dat file. For global commands, now we are making toc.dat/toc.dmp/toc.tar file based on format specified and based on format specified, we are making archive entries for these global commands. By this approach, we removed the hard-coded parsing part of the global.dat file and we are able to skip DROP DATABASE with the globals-only option. Here, I am attaching a patch for review, testing and feedback. This is a WIP patch. I will do some more code cleanup and will add some more comments also. Please review this and let me know design level feedback. Thanks Tushar Ahuja for some internal testing and feedback. -- Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --000000000000cb4b33064135ef1b Content-Type: application/octet-stream; name="v01-15102025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename="v01-15102025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mgs9u15l0 RnJvbSAwOWNjMmUxMWE0Yjg2MzllZTgxNTI4MzYzYTlmMTM0Y2I3ZmM3OGM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaGFsb3JNYWhlbmRyYSA8bWFoaTZydW5AZ21haWwuY29tPgpE YXRlOiBXZWQsIDE1IE9jdCAyMDI1IDIyOjM4OjE0ICswNTMwClN1YmplY3Q6IFtQQVRDSF0gTm9u IHRleHQgbW9kZXMgZm9yIHBnX2R1bXBhbGwsIGNvcnJlc3BvbmRpbmdseSBjaGFuZ2UKIHBnX3Jl c3RvcmUKCiAgICBwZ19kdW1wYWxsIGFjcXVpcmVzIGEgbmV3IC1GLy0tZm9ybWF0IG9wdGlvbiwg d2l0aCB0aGUgc2FtZSBtZWFuaW5ncyBhcwogICAgcGdfZHVtcC4gVGhlIGRlZmF1bHQgaXMgcCwg bWVhbmluZyBwbGFpbiB0ZXh0LiBGb3IgYW55IG90aGVyIHZhbHVlLCBhCiAgICBkaXJlY3Rvcnkg aXMgY3JlYXRlZCBjb250YWluaW5nIHR3byBmaWxlcywgdG9jLmRhdC8uZG1wLy50YXIgYW5kIG1h cC5kYXQuIFRoZQogICAgZmlyc3QgY29udGFpbnMgY29tbWFuZHMgcmVzdG9yaW5nIHRoZSBnbG9i YWwgZGF0YSBiYXNlZCBvbiAtRiwgYW5kIHRoZSBzZWNvbmQKICAgIGNvbnRhaW5zIGEgbWFwIGZy b20gb2lkcyB0byBkYXRhYmFzZSBuYW1lcy4gSXQgd2lsbCBhbHNvIGNvbnRhaW4gYQogICAgc3Vi ZGlyZWN0b3J5IGNhbGxlZCBkYXRhYmFzZXMsIGluc2lkZSB3aGljaCBpdCB3aWxsIGNyZWF0ZSBh cmNoaXZlcyBpbgogICAgdGhlIHNwZWNpZmllZCBmb3JtYXQsIG5hbWVkIHVzaW5nIHRoZSBkYXRh YmFzZSBvaWRzLgoKICAgIEluIHRoZXNlIGNhc2VzcyB0aGUgLWYgYXJndW1lbnQgaXMgcmVxdWly ZWQuCgogICAgSWYgcGdfcmVzdG9yZSBlbmNvdW50ZXJzIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcg bWFwLmRhdCwKICAgIGl0IHJlc3RvcmVzIHRoZSBnbG9iYWwgc2V0dGluZ3MgZnJvbSB0b2MuZGF0 Ly5kbXAvLnRhciBpZiBleGlzdCwgYW5kIHRoZW4KICAgIHJlc3RvcmVzIGVhY2ggZGF0YWJhc2Uu CgogICAgcGdfcmVzdG9yZSBhY3F1aXJlcyB0d28gbmV3IG9wdGlvbnM6IC1nLy0tZ2xvYmFscy1v bmx5IHdoaWNoIHN1cHByZXNzZXMKICAgIHJlc3RvcmF0aW9uIG9mIGFueSBkYXRhYmFzZXMsIGFu ZCAtLWV4Y2x1ZGUtZGF0YWJhc2Ugd2hpY2ggaW5oaWJpdHMKICAgIHJlc3RvcmF0aW9uIG9mIHBh cnRpY3VhbHIgZGF0YWJhc2UocykgaW4gdGhlIHNhbWUgd2F5IHRoZSBzYW1lIG9wdGlvbgogICAg d29ya3MgaW4gcGdfZHVtcGFsbC4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dt bCAgICAgfCAgODkgKysrLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgICAgIHwg IDY2ICsrLQogc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jICAgICAgICAgIHwgICAxIC0KIHNy Yy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1 bXAvcGFyYWxsZWwuYyAgICAgICAgICAgfCAgMTAgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cC5oICAgICAgICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMgfCAgMjMgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCB8ICAgMSAr CiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jICAgICAgfCAgIDIgKy0KIHNyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3Bn X2R1bXBhbGwuYyAgICAgICAgIHwgNTk5ICsrKysrKysrKysrKysrKysrKysrKystLS0tLQogc3Jj L2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyAgICAgICAgIHwgNTk5ICsrKysrKysrKysrKysrKysr KysrKysrKysrLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsICAgICAgIHwgIDIyICsK IHNyYy9iaW4vcGdfZHVtcC90LzAwNl9wZ19kdW1wYWxsLnBsICB8IDQwMCArKysrKysrKysrKysr KysrKysKIDE0IGZpbGVzIGNoYW5nZWQsIDE2NzEgaW5zZXJ0aW9ucygrKSwgMTQ2IGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC90LzAwNl9wZ19kdW1wYWxs LnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgYi9kb2Mv c3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAppbmRleCA5ZjYzOWY2MWRiMC4uNzNlMTY2MDYy YjkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCkBAIC0xNiw3ICsxNiwxMCBAQCBQb3N0Z3Jl U1FMIGRvY3VtZW50YXRpb24KIAogIDxyZWZuYW1lZGl2PgogICA8cmVmbmFtZT5wZ19kdW1wYWxs PC9yZWZuYW1lPgotICA8cmVmcHVycG9zZT5leHRyYWN0IGEgPHByb2R1Y3RuYW1lPlBvc3RncmVT UUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGludG8gYSBzY3JpcHQgZmlsZTwvcmVm cHVycG9zZT4KKworICA8cmVmcHVycG9zZT4KKyAgIGV4cG9ydCBhIDxwcm9kdWN0bmFtZT5Qb3N0 Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwgc2NyaXB0IG9y IHRvIG90aGVyIGZvcm1hdHMKKyAgPC9yZWZwdXJwb3NlPgogIDwvcmVmbmFtZWRpdj4KIAogIDxy ZWZzeW5vcHNpc2Rpdj4KQEAgLTMzLDcgKzM2LDcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9u CiAgIDxwYXJhPgogICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPiBpcyBh IHV0aWxpdHkgZm9yIHdyaXRpbmcgb3V0CiAgICAoPHF1b3RlPmR1bXBpbmc8L3F1b3RlPikgYWxs IDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2VzCi0gICBvZiBh IGNsdXN0ZXIgaW50byBvbmUgc2NyaXB0IGZpbGUuICBUaGUgc2NyaXB0IGZpbGUgY29udGFpbnMK KyAgIG9mIGEgY2x1c3RlciBpbnRvIGFuIFNRTCBzY3JpcHQgZmlsZSBvciBhbiBhcmNoaXZlLiAg VGhlIG91dHB1dCBjb250YWlucwogICAgPGFjcm9ueW0+U1FMPC9hY3JvbnltPiBjb21tYW5kcyB0 aGF0IGNhbiBiZSB1c2VkIGFzIGlucHV0IHRvIDx4cmVmCiAgICBsaW5rZW5kPSJhcHAtcHNxbCIv PiB0byByZXN0b3JlIHRoZSBkYXRhYmFzZXMuICBJdCBkb2VzIHRoaXMgYnkKICAgIGNhbGxpbmcg PHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBmb3IgZWFjaCBkYXRhYmFzZSBpbiB0aGUgY2x1 c3Rlci4KQEAgLTUyLDExICs1NSwxNiBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPC9w YXJhPgogCiAgIDxwYXJhPgotICAgVGhlIFNRTCBzY3JpcHQgd2lsbCBiZSB3cml0dGVuIHRvIHRo ZSBzdGFuZGFyZCBvdXRwdXQuICBVc2UgdGhlCisgICBQbGFpbiB0ZXh0IFNRTCBzY3JpcHRzIHdp bGwgYmUgd3JpdHRlbiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgVXNlIHRoZQogICAgPG9wdGlv bj4tZjwvb3B0aW9uPi88b3B0aW9uPi0tZmlsZTwvb3B0aW9uPiBvcHRpb24gb3Igc2hlbGwgb3Bl cmF0b3JzIHRvCiAgICByZWRpcmVjdCBpdCBpbnRvIGEgZmlsZS4KICAgPC9wYXJhPgogCisgIDxw YXJhPgorICAgQXJjaGl2ZXMgaW4gb3RoZXIgZm9ybWF0cyB3aWxsIGJlIHBsYWNlZCBpbiBhIGRp cmVjdG9yeSBuYW1lZCB1c2luZyB0aGUKKyAgIDxvcHRpb24+LWY8L29wdGlvbj4vPG9wdGlvbj4t LWZpbGU8L29wdGlvbj4sIHdoaWNoIGlzIHJlcXVpcmVkIGluIHRoaXMgY2FzZS4KKyAgPC9wYXJh PgorCiAgIDxwYXJhPgogICA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+IG5l ZWRzIHRvIGNvbm5lY3Qgc2V2ZXJhbAogICB0aW1lcyB0byB0aGUgPHByb2R1Y3RuYW1lPlBvc3Rn cmVTUUw8L3Byb2R1Y3RuYW1lPiBzZXJ2ZXIgKG9uY2UgcGVyCkBAIC0xMzEsMTAgKzEzOSw4NSBA QCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICA8cGFyYT4KICAgICAgICAgU2VuZCBv dXRwdXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlLiAgSWYgdGhpcyBpcyBvbWl0dGVkLCB0aGUKICAg ICAgICAgc3RhbmRhcmQgb3V0cHV0IGlzIHVzZWQuCisgICAgICAgIE5vdGU6IFRoaXMgb3B0aW9u IGNhbiBvbmx5IGJlIG9taXR0ZWQgd2hlbiA8b3B0aW9uPi0tZm9ybWF0PC9vcHRpb24+IGlzIHBs YWluCiAgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50 cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LUYgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90 ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWZvcm1hdD08cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlz dGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFNwZWNpZnkgdGhlIGZvcm1hdCBvZiBkdW1w IGZpbGVzLiAgSW4gcGxhaW4gZm9ybWF0LCBhbGwgdGhlIGR1bXAgZGF0YSBpcworICAgICAgICBz ZW50IGluIGEgc2luZ2xlIHRleHQgc3RyZWFtLiBUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAg ICAgIEluIGFsbCBvdGhlciBtb2RlcywgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0 aW9uPiBmaXJzdCBjcmVhdGVzIHR3byBmaWxlczoKKyAgICAgICAgPGZpbGVuYW1lPmdsb2JhbC5k YXQ8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPm1hcC5kYXQ8L2ZpbGVuYW1lPiwgaW4gdGhlIGRp cmVjdG9yeQorICAgICAgICBzcGVjaWZpZWQgYnkgPG9wdGlvbj4tLWZpbGU8L29wdGlvbj4uCisg ICAgICAgIFRoZSBmaXJzdCBmaWxlIGNvbnRhaW5zIGdsb2JhbCBkYXRhLCBzdWNoIGFzIHJvbGVz IGFuZCB0YWJsZXNwYWNlcy4gVGhlIHNlY29uZAorICAgICAgICBjb250YWlucyBhIG1hcHBpbmcg YmV0d2VlbiBkYXRhYmFzZSBvaWRzIGFuZCBuYW1lcy4gVGhlc2UgZmlsZXMgYXJlIHVzZWQgYnkK KyAgICAgICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPi4gRGF0YSBmb3Ig aW5kaXZpZHVhbCBkYXRhYmFzZXMgaXMgcGxhY2VkIGluCisgICAgICAgIDxmaWxlbmFtZT5kYXRh YmFzZXM8L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnksIG5hbWVkIHVzaW5nIHRoZSBkYXRhYmFzZSdz IDx0eXBlPm9pZDwvdHlwZT4uCisKKyAgICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ZDwvbGl0ZXJhbD48L3Rlcm0+Cisg ICAgICAgICA8dGVybT48bGl0ZXJhbD5kaXJlY3Rvcnk8L2xpdGVyYWw+PC90ZXJtPgorICAgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgZGlyZWN0 b3J5LWZvcm1hdCBhcmNoaXZlcyBmb3IgZWFjaCBkYXRhYmFzZSwKKyAgICAgICAgICAgc3VpdGFi bGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVGhlIGRpcmVjdG9yeQorICAgICAgICAgICB3 aWxsIGhhdmUgZGF0YWJhc2UgPHR5cGU+b2lkPC90eXBlPiBhcyBpdHMgbmFtZS4KKyAgICAgICAg ICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4K KworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+cDwvbGl0 ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5wbGFpbjwvbGl0ZXJhbD48L3Rl cm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91 dHB1dCBhIHBsYWluLXRleHQgU1FMIHNjcmlwdCBmaWxlICh0aGUgZGVmYXVsdCkuCisgICAgICAg ICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+ CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmM8L2xp dGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+Y3VzdG9tPC9saXRlcmFsPjwv dGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAg T3V0cHV0IGEgY3VzdG9tLWZvcm1hdCBhcmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAorICAgICAg ICAgICBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQorICAg ICAgICAgICB3aWxsIGJlIG5hbWVkIDxmaWxlbmFtZT5kYm9pZC5kbXA8L2ZpbGVuYW1lPiB3aGVy ZSA8dHlwZT5kYm9pZDwvdHlwZT4gaXMgdGhlCisgICAgICAgICAgIDx0eXBlPm9pZDwvdHlwZT4g b2YgdGhlIGRhdGFiYXNlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+ CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAg ICAgICAgPHRlcm0+PGxpdGVyYWw+dDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48 bGl0ZXJhbD50YXI8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAg ICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSB0YXItZm9ybWF0IGFyY2hpdmUgZm9yIGVh Y2ggZGF0YWJhc2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3Rv cmUuIFRoZSBhcmNoaXZlCisgICAgICAgICAgIHdpbGwgYmUgbmFtZWQgPGZpbGVuYW1lPmRib2lk LnRhcjwvZmlsZW5hbWU+IHdoZXJlIDx0eXBlPmRib2lkPC90eXBlPiBpcyB0aGUKKyAgICAgICAg ICAgPHR5cGU+b2lkPC90eXBlPiBvZiB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgPC9wYXJhPgor ICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAg PC92YXJpYWJsZWxpc3Q+CisKKyAgICAgICBOb3RlOiBzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXBn ZHVtcCIvPiBmb3IgZGV0YWlscworICAgICAgIG9mIGhvdyB0aGUgdmFyaW91cyBub24gcGxhaW4g dGV4dCBhcmNoaXZlcyB3b3JrLgorCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+ CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVy bT48b3B0aW9uPi1nPC9vcHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2Jh bHMtb25seTwvb3B0aW9uPjwvdGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdf cmVzdG9yZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKaW5kZXggYTQ2 OGEzODM2MWEuLjc0OTdiNTI3YWU2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jl c3RvcmUuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbApAQCAtMTgs OCArMTgsOSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHJlZm5hbWU+cGdfcmVzdG9y ZTwvcmVmbmFtZT4KIAogICA8cmVmcHVycG9zZT4KLSAgIHJlc3RvcmUgYSA8cHJvZHVjdG5hbWU+ UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4KLSAgIGFyY2hpdmUgZmls ZSBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4KKyAgIHJlc3Rv cmUgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZXMgZnJvbSBh cmNoaXZlcworICAgY3JlYXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+ IG9yCisgICA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+CiAgIDwvcmVmcHVy cG9zZT4KICA8L3JlZm5hbWVkaXY+CiAKQEAgLTM4LDEzICszOSwxNCBAQCBQb3N0Z3JlU1FMIGRv Y3VtZW50YXRpb24KIAogICA8cGFyYT4KICAgIDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBs aWNhdGlvbj4gaXMgYSB1dGlsaXR5IGZvciByZXN0b3JpbmcgYQotICAgPHByb2R1Y3RuYW1lPlBv c3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFuIGFyY2hpdmUKLSAgIGNyZWF0 ZWQgYnkgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBpbiBvbmUgb2YgdGhlIG5vbi1wbGFp bi10ZXh0CisgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNl IG9yIGNsdXN0ZXIgZnJvbSBhbiBhcmNoaXZlCisgICBjcmVhdGVkIGJ5IDx4cmVmIGxpbmtlbmQ9 ImFwcC1wZ2R1bXAiLz4gb3IKKyAgIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZy1kdW1wYWxsIi8+IGlu IG9uZSBvZiB0aGUgbm9uLXBsYWluLXRleHQKICAgIGZvcm1hdHMuICBJdCB3aWxsIGlzc3VlIHRo ZSBjb21tYW5kcyBuZWNlc3NhcnkgdG8gcmVjb25zdHJ1Y3QgdGhlCi0gICBkYXRhYmFzZSB0byB0 aGUgc3RhdGUgaXQgd2FzIGluIGF0IHRoZSB0aW1lIGl0IHdhcyBzYXZlZC4gIFRoZQotICAgYXJj aGl2ZSBmaWxlcyBhbHNvIGFsbG93IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlv bj4gdG8KKyAgIGRhdGFiYXNlIG9yIGNsdXN0ZXIgdG8gdGhlIHN0YXRlIGl0IHdhcyBpbiBhdCB0 aGUgdGltZSBpdCB3YXMgc2F2ZWQuIFRoZQorICAgYXJjaGl2ZXMgYWxzbyBhbGxvdyA8YXBwbGlj YXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IHRvCiAgICBiZSBzZWxlY3RpdmUgYWJvdXQg d2hhdCBpcyByZXN0b3JlZCwgb3IgZXZlbiB0byByZW9yZGVyIHRoZSBpdGVtcwotICAgcHJpb3Ig dG8gYmVpbmcgcmVzdG9yZWQuIFRoZSBhcmNoaXZlIGZpbGVzIGFyZSBkZXNpZ25lZCB0byBiZQor ICAgcHJpb3IgdG8gYmVpbmcgcmVzdG9yZWQuIFRoZSBhcmNoaXZlIGZvcm1hdHMgYXJlIGRlc2ln bmVkIHRvIGJlCiAgICBwb3J0YWJsZSBhY3Jvc3MgYXJjaGl0ZWN0dXJlcy4KICAgPC9wYXJhPgog CkBAIC01MiwxMCArNTQsMTcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICA8YXBwbGlj YXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IGNhbiBvcGVyYXRlIGluIHR3byBtb2Rlcy4K ICAgIElmIGEgZGF0YWJhc2UgbmFtZSBpcyBzcGVjaWZpZWQsIDxhcHBsaWNhdGlvbj5wZ19yZXN0 b3JlPC9hcHBsaWNhdGlvbj4KICAgIGNvbm5lY3RzIHRvIHRoYXQgZGF0YWJhc2UgYW5kIHJlc3Rv cmVzIGFyY2hpdmUgY29udGVudHMgZGlyZWN0bHkgaW50bwotICAgdGhlIGRhdGFiYXNlLiAgT3Ro ZXJ3aXNlLCBhIHNjcmlwdCBjb250YWluaW5nIHRoZSBTUUwKLSAgIGNvbW1hbmRzIG5lY2Vzc2Fy eSB0byByZWJ1aWxkIHRoZSBkYXRhYmFzZSBpcyBjcmVhdGVkIGFuZCB3cml0dGVuCisgICB0aGUg ZGF0YWJhc2UuCisgICBXaGVuIHJlc3RvcmluZyBmcm9tIGEgZHVtcCBtYWRlIGJ5IDxhcHBsaWNh dGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4sCisgICBlYWNoIGRhdGFiYXNlIHdpbGwgYmUg Y3JlYXRlZCBhbmQgdGhlbiB0aGUgcmVzdG9yYXRpb24gd2lsbCBiZSBydW4gaW4gdGhhdAorICAg ZGF0YWJhc2UuCisKKyAgIE90aGVyd2lzZSwgd2hlbiBhIGRhdGFiYXNlIG5hbWUgaXMgbm90IHNw ZWNpZmllZCwgYSBzY3JpcHQgY29udGFpbmluZyB0aGUgU1FMCisgICBjb21tYW5kcyBuZWNlc3Nh cnkgdG8gcmVidWlsZCB0aGUgZGF0YWJhc2Ugb3IgY2x1c3RlciBpcyBjcmVhdGVkIGFuZCB3cml0 dGVuCiAgICB0byBhIGZpbGUgb3Igc3RhbmRhcmQgb3V0cHV0LiAgVGhpcyBzY3JpcHQgb3V0cHV0 IGlzIGVxdWl2YWxlbnQgdG8KLSAgIHRoZSBwbGFpbiB0ZXh0IG91dHB1dCBmb3JtYXQgb2YgPGFw cGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPi4KKyAgIHRoZSBwbGFpbiB0ZXh0IG91dHB1 dCBmb3JtYXQgb2YgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPiBvcgorICAgPGFw cGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KKwogICAgU29tZSBvZiB0aGUgb3B0 aW9ucyBjb250cm9sbGluZyB0aGUgb3V0cHV0IGFyZSB0aGVyZWZvcmUgYW5hbG9nb3VzIHRvCiAg ICA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+IG9wdGlvbnMuCiAgIDwvcGFyYT4K QEAgLTE1Miw2ICsxNjEsOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICAgY29t bWFuZHMgdGhhdCBtZW50aW9uIHRoaXMgZGF0YWJhc2UuCiAgICAgICAgIEFjY2VzcyBwcml2aWxl Z2VzIGZvciB0aGUgZGF0YWJhc2UgaXRzZWxmIGFyZSBhbHNvIHJlc3RvcmVkLAogICAgICAgICB1 bmxlc3MgPG9wdGlvbj4tLW5vLWFjbDwvb3B0aW9uPiBpcyBzcGVjaWZpZWQuCisgICAgICAgIDxv cHRpb24+LS1jcmVhdGU8L29wdGlvbj4gaXMgcmVxdWlyZWQgd2hlbiByZXN0b3JpbmcgbXVsdGlw bGUgZGF0YWJhc2VzCisgICAgICAgIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IDxhcHBsaWNh dGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCiAgICAgICAgPC9wYXJhPgogCiAgICAgICAg PHBhcmE+CkBAIC0yNDcsNiArMjU4LDE5IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAg ICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRy eT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LWc8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48 b3B0aW9uPi0tZ2xvYmFscy1vbmx5PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBSZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMgKHJvbGVz IGFuZCB0YWJsZXNwYWNlcyksIG5vIGRhdGFiYXNlcy4KKyAgICAgICA8L3BhcmE+CisgICAgICAg PHBhcmE+CisgICAgICAgIFRoaXMgb3B0aW9uIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiByZXN0b3Jp bmcgZnJvbSBhbiBhcmNoaXZlIG1hZGUgdXNpbmcgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2Fw cGxpY2F0aW9uPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zh cmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4t SSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0 aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1pbmRleD08cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KQEAgLTU5 MSw2ICs2MTUsMjggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICA8L2xpc3RpdGVt PgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRl cm0+PG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRl bT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRG8gbm90IHJlc3RvcmUgZGF0YWJhc2VzIHdob3Nl IG5hbWUgbWF0Y2hlcworICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0 dGVybjwvcmVwbGFjZWFibGU+LgorICAgICAgICBNdWx0aXBsZSBwYXR0ZXJucyBjYW4gYmUgZXhj bHVkZWQgYnkgd3JpdGluZyBtdWx0aXBsZQorICAgICAgICA8b3B0aW9uPi0tZXhjbHVkZS1kYXRh YmFzZTwvb3B0aW9uPiBzd2l0Y2hlcy4gIFRoZQorICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+IHBhcmFtZXRlciBpcworICAgICAgICBp bnRlcnByZXRlZCBhcyBhIHBhdHRlcm4gYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIHVzZWQg YnkKKyAgICAgICAgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPidzIDxsaXRlcmFsPlxk PC9saXRlcmFsPgorICAgICAgICBjb21tYW5kcyAoc2VlIDx4cmVmIGxpbmtlbmQ9ImFwcC1wc3Fs LXBhdHRlcm5zIi8+KSwKKyAgICAgICAgc28gbXVsdGlwbGUgZGF0YWJhc2VzIGNhbiBhbHNvIGJl IGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgd2lsZGNhcmQKKyAgICAgICAgY2hhcmFjdGVycyBpbiB0aGUg cGF0dGVybi4gIFdoZW4gdXNpbmcgd2lsZGNhcmRzLCBiZSBjYXJlZnVsIHRvCisgICAgICAgIHF1 b3RlIHRoZSBwYXR0ZXJuIGlmIG5lZWRlZCB0byBwcmV2ZW50IHNoZWxsIHdpbGRjYXJkIGV4cGFu c2lvbi4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgb3B0aW9u IGlzIG9ubHkgcmVsZXZhbnQgd2hlbiByZXN0b3JpbmcgZnJvbSBhbiBhcmNoaXZlIG1hZGUgdXNp bmcgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KKyAgICAgICA8L3BhcmE+ CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlz dGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWZpbHRlcj08cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+ZmlsZW5hbWU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KICAgICAg IDxsaXN0aXRlbT4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYyBiL3Ny Yy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYwppbmRleCBkNTVkNTNkYmVlYS4uZjQ0YThhNDVmY2Eg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYworKysgYi9zcmMvYmluL3Bn X2R1bXAvY29ubmVjdGRiLmMKQEAgLTI4Nyw3ICsyODcsNiBAQCBleGVjdXRlUXVlcnkoUEdjb25u ICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSkKIAl7CiAJCXBnX2xvZ19lcnJvcigicXVlcnkgZmFp bGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKIAkJcGdfbG9nX2Vycm9yX2RldGFpbCgi UXVlcnkgd2FzOiAlcyIsIHF1ZXJ5KTsKLQkJUFFmaW5pc2goY29ubik7CiAJCWV4aXRfbmljZWx5 KDEpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkIGIvc3Jj L2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCmluZGV4IGEyMjMzYjBhMWI0Li40YTRlYmJkOGVjOSAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9tZXNvbi5idWlsZApAQCAtMTAyLDYgKzEwMiw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0 LzAwM19wZ19kdW1wX3dpdGhfc2VydmVyLnBsJywKICAgICAgICd0LzAwNF9wZ19kdW1wX3BhcmFs bGVsLnBsJywKICAgICAgICd0LzAwNV9wZ19kdW1wX2ZpbHRlcmZpbGUucGwnLAorICAgICAgJ3Qv MDA2X3BnX2R1bXBhbGwucGwnLAogICAgICAgJ3QvMDEwX2R1bXBfY29ubnN0ci5wbCcsCiAgICAg XSwKICAgfSwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jIGIvc3JjL2Jp bi9wZ19kdW1wL3BhcmFsbGVsLmMKaW5kZXggMDg2YWRjZGM1MDIuLjU5NzRkNjcwNmZkIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYworKysgYi9zcmMvYmluL3BnX2R1bXAv cGFyYWxsZWwuYwpAQCAtMzMzLDYgKzMzMywxNiBAQCBvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQXJj aGl2ZSAqQUhYKQogCW9uX2V4aXRfbmljZWx5KGFyY2hpdmVfY2xvc2VfY29ubmVjdGlvbiwgJnNo dXRkb3duX2luZm8pOwogfQogCisvKgorICogV2hlbiBwZ19yZXN0b3JlIHJlc3RvcmVzIG11bHRp cGxlIGRhdGFiYXNlcywgdGhlbiB1cGRhdGUgYWxyZWFkeSBhZGRlZCBlbnRyeQorICogaW50byBh cnJheSBmb3IgY2xlYW51cC4KKyAqLwordm9pZAorcmVwbGFjZV9vbl9leGl0X2Nsb3NlX2FyY2hp dmUoQXJjaGl2ZSAqQUhYKQoreworCXNodXRkb3duX2luZm8uQUhYID0gQUhYOworfQorCiAvKgog ICogb25fZXhpdF9uaWNlbHkgaGFuZGxlciBmb3Igc2h1dHRpbmcgZG93biBkYXRhYmFzZSBjb25u ZWN0aW9ucyBhbmQKICAqIHdvcmtlciBwcm9jZXNzZXMgY2xlYW5seS4KZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaApp bmRleCBkOTA0MWRhZDcyMC4uZjYzMWQ5NDU0NzIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKQEAgLTMxMiw3 ICszMTIsNyBAQCBleHRlcm4gdm9pZCBTZXRBcmNoaXZlT3B0aW9ucyhBcmNoaXZlICpBSCwgRHVt cE9wdGlvbnMgKmRvcHQsIFJlc3RvcmVPcHRpb25zICpybwogCiBleHRlcm4gdm9pZCBQcm9jZXNz QXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFyY2hpdmUgKkFIWCk7CiAKLWV4dGVybiB2b2lkIFJlc3Rv cmVBcmNoaXZlKEFyY2hpdmUgKkFIWCk7CitleHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2ZShBcmNo aXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEsIGJvb2wgZ2xvYmFsc19vbmx5KTsKIAogLyogT3Bl biBhbiBleGlzdGluZyBhcmNoaXZlICovCiBleHRlcm4gQXJjaGl2ZSAqT3BlbkFyY2hpdmUoY29u c3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10KTsKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCA1OWVhZWNiNGVkNy4uZDM3OGM3YjYwMWUgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9zcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTg2LDcgKzg2LDcgQEAgc3RhdGljIGlu dAlSZXN0b3JpbmdUb0RCKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1bXBfbG9f YnVmKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoQXJjaGl2 ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKm1zZywgdGltZV90IHRpbSk7CiBzdGF0aWMgdm9pZCBT ZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkJCQkg IGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyk7CisJCQkJ CSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLCBib29s IGFwcGVuZF9kYXRhKTsKIHN0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUgKlNhdmVPdXRwdXQoQXJj aGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxl ICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxlICpzYXZlZE91dHB1dCk7CiAKQEAgLTMzOSw5ICszMzks MTQgQEAgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgpCiAJCVN0cmlj dE5hbWVzQ2hlY2socm9wdCk7CiB9CiAKLS8qIFB1YmxpYyAqLworLyoKKyAqIFJlc3RvcmVBcmNo aXZlCisgKgorICogSWYgYXBwZW5kX2RhdGEgaXMgc2V0LCB0aGVuIGFwcGVuZCBkYXRhIGludG8g ZmlsZSBhcyB3ZSBhcmUgcmVzdG9yaW5nIGR1bXAKKyAqIG9mIG11bHRpcGxlIGRhdGFiYXNlcyB3 aGljaCB3YXMgdGFrZW4gYnkgcGdfZHVtcGFsbC4KKyAqLwogdm9pZAotUmVzdG9yZUFyY2hpdmUo QXJjaGl2ZSAqQUhYKQorUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9k YXRhLCBib29sIGdsb2JhbHNfb25seSkKIHsKIAlBcmNoaXZlSGFuZGxlICpBSCA9IChBcmNoaXZl SGFuZGxlICopIEFIWDsKIAlSZXN0b3JlT3B0aW9ucyAqcm9wdCA9IEFILT5wdWJsaWMucm9wdDsK QEAgLTQ1OCw3ICs0NjMsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJICovCiAJ c2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lIHx8IHJvcHQtPmNvbXBy ZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0JCVNldE91dHB1 dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3NwZWMpOworCQlTZXRPdXRw dXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9zcGVjLCBhcHBlbmRfZGF0 YSk7CiAKIAlhaHByaW50ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1bXBcbi0t XG5cbiIpOwogCkBAIC03NjEsNiArNzY2LDkgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhY KQogCQkJaWYgKCh0ZS0+cmVxcyAmIChSRVFfU0NIRU1BIHwgUkVRX0RBVEEgfCBSRVFfU1RBVFMp KSA9PSAwKQogCQkJCWNvbnRpbnVlOwkJLyogaWdub3JlIGlmIG5vdCB0byBiZSBkdW1wZWQgYXQg YWxsICovCiAKKwkJCWlmIChnbG9iYWxzX29ubHkgJiYgdGUgJiYgdGUtPnRhZyAmJiAoc3RyY21w KHRlLT50YWcsICJEUk9QX0RBVEFCQVNFIikgPT0gMCkpCisJCQkJY29udGludWU7CisKIAkJCXN3 aXRjaCAoX3RvY0VudHJ5UmVzdG9yZVBhc3ModGUpKQogCQkJewogCQkJCWNhc2UgUkVTVE9SRV9Q QVNTX01BSU46CkBAIC0xMzE2LDcgKzEzMjQsNyBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAq QUhYKQogCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lKQotCQlT ZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Npb25fc3BlYyk7CisJCVNl dE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjLCBmYWxzZSk7 CiAKIAlpZiAoc3RyZnRpbWUoc3RhbXBfc3RyLCBzaXplb2Yoc3RhbXBfc3RyKSwgUEdEVU1QX1NU UkZUSU1FX0ZNVCwKIAkJCQkgbG9jYWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSkpID09IDApCkBAIC0x Njk1LDcgKzE3MDMsOCBAQCBhcmNocHJpbnRmKEFyY2hpdmUgKkFILCBjb25zdCBjaGFyICpmbXQs Li4uKQogCiBzdGF0aWMgdm9pZAogU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBj aGFyICpmaWxlbmFtZSwKLQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWMpCisJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVz c2lvbl9zcGVjLAorCQkgIGJvb2wgYXBwZW5kX2RhdGEpCiB7CiAJQ29tcHJlc3NGaWxlSGFuZGxl ICpDRkg7CiAJY29uc3QgY2hhciAqbW9kZTsKQEAgLTE3MTUsNyArMTcyNCw3IEBAIFNldE91dHB1 dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJZWxzZQogCQlmbiA9 IGZpbGVubyhzdGRvdXQpOwogCi0JaWYgKEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQorCWlm IChhcHBlbmRfZGF0YSB8fCBBSC0+bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkKIAkJbW9kZSA9IFBH X0JJTkFSWV9BOwogCWVsc2UKIAkJbW9kZSA9IFBHX0JJTkFSWV9XOwpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9hcmNoaXZlci5oCmluZGV4IDMyNWI1M2ZjOWJkLi4zNjUwNzNiM2VhZSAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaApAQCAtMzk0LDYgKzM5NCw3IEBAIHN0cnVjdCBfdG9j RW50cnkKIAogZXh0ZXJuIGludAlwYXJhbGxlbF9yZXN0b3JlKEFyY2hpdmVIYW5kbGUgKkFILCBU b2NFbnRyeSAqdGUpOwogZXh0ZXJuIHZvaWQgb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUg KkFIWCk7CitleHRlcm4gdm9pZCByZXBsYWNlX29uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZl ICpBSFgpOwogCiBleHRlcm4gdm9pZCB3YXJuX29yX2V4aXRfaG9ycmlibHkoQXJjaGl2ZUhhbmRs ZSAqQUgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pIHBnX2F0dHJpYnV0ZV9wcmludGYoMiwgMyk7CiAK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgYi9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX3Rhci5jCmluZGV4IGI1YmEzYjQ2ZGQ5Li44MThiODBhOTM2OSAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYworKysgYi9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX3Rhci5jCkBAIC04MjYsNyArODI2LDcgQEAgX0Nsb3NlQXJjaGl2ZShB cmNoaXZlSGFuZGxlICpBSCkKIAkJc2F2VmVyYm9zZSA9IEFILT5wdWJsaWMudmVyYm9zZTsKIAkJ QUgtPnB1YmxpYy52ZXJib3NlID0gMDsKIAotCQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBB SCk7CisJCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFILCBmYWxzZSwgZmFsc2UpOwogCiAJ CVNldEFyY2hpdmVPcHRpb25zKChBcmNoaXZlICopIEFILCBzYXZEb3B0LCBzYXZSb3B0KTsKIApk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9w Z19kdW1wLmMKaW5kZXggNjQxYmVjZTEyYzcuLjg1N2YxY2M3OTQ4IDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAg LTEyOTIsNyArMTI5Miw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIHJpZ2h0 IG5vdy4KIAkgKi8KIAlpZiAocGxhaW5UZXh0KQotCQlSZXN0b3JlQXJjaGl2ZShmb3V0KTsKKwkJ UmVzdG9yZUFyY2hpdmUoZm91dCwgZmFsc2UsIGZhbHNlKTsKIAogCUNsb3NlQXJjaGl2ZShmb3V0 KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19kdW1wYWxsLmMKaW5kZXggYmI0NTFjMWJhZTEuLmM5ZThjMTViNzIxIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wYWxsLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJmZV91dGlscy9zdHJp bmdfdXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5o IgorI2luY2x1ZGUgInBnX2JhY2t1cF9hcmNoaXZlci5oIgogCiAvKiB2ZXJzaW9uIHN0cmluZyB3 ZSBleHBlY3QgYmFjayBmcm9tIHBnX2R1bXAgKi8KICNkZWZpbmUgUEdEVU1QX1ZFUlNJT05TVFIg InBnX2R1bXAgKFBvc3RncmVTUUwpICIgUEdfVkVSU0lPTiAiXG4iCkBAIC02NSw5ICs2NiwxMCBA QCBzdGF0aWMgdm9pZCBkcm9wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lk IGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHJvcERCcyhQR2Nv bm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFVzZXJDb25maWcoUEdjb25uICpjb25uLCBjb25z dCBjaGFyICp1c2VybmFtZSk7Ci1zdGF0aWMgdm9pZCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29u bik7CitzdGF0aWMgdm9pZCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgQXJjaGl2ZUZvcm1h dCBhcmNoRHVtcEZvcm1hdCk7CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0YW1wKGNvbnN0IGNoYXIg Km1zZyk7Ci1zdGF0aWMgaW50CXJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNo YXIgKmNyZWF0ZV9vcHRzKTsKK3N0YXRpYyBpbnQJcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFt ZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMsCisJCQkJCSAgY2hhciAqZGJmaWxlLCBBcmNoaXZl Rm9ybWF0IGFyY2hEdW1wRm9ybWF0KTsKIHN0YXRpYyB2b2lkIGJ1aWxkU2hTZWNMYWJlbHMoUEdj b25uICpjb25uLAogCQkJCQkJCSBjb25zdCBjaGFyICpjYXRhbG9nX25hbWUsIE9pZCBvYmplY3RJ ZCwKIAkJCQkJCQkgY29uc3QgY2hhciAqb2JqdHlwZSwgY29uc3QgY2hhciAqb2JqbmFtZSwKQEAg LTc2LDYgKzc4LDggQEAgc3RhdGljIHZvaWQgZXhlY3V0ZUNvbW1hbmQoUEdjb25uICpjb25uLCBj b25zdCBjaGFyICpxdWVyeSk7CiBzdGF0aWMgdm9pZCBleHBhbmRfZGJuYW1lX3BhdHRlcm5zKFBH Y29ubiAqY29ubiwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybnMsCiAJCQkJCQkJCSAgIFNpbXBs ZVN0cmluZ0xpc3QgKm5hbWVzKTsKIHN0YXRpYyB2b2lkIHJlYWRfZHVtcGFsbF9maWx0ZXJzKGNv bnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuKTsKK3N0YXRpYyBB cmNoaXZlRm9ybWF0IHBhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpOworc3RhdGlj IGludCBjcmVhdGVEdW1wSWRMb2NhbCh2b2lkKTsKIAogc3RhdGljIGNoYXIgcGdfZHVtcF9iaW5b TUFYUEdQQVRIXTsKIHN0YXRpYyBQUUV4cEJ1ZmZlciBwZ2R1bXBvcHRzOwpAQCAtMTIzLDYgKzEy NywxMyBAQCBzdGF0aWMgU2ltcGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9leGNsdWRlX3BhdHRlcm5z ID0ge05VTEwsIE5VTEx9Owogc3RhdGljIFNpbXBsZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhjbHVk ZV9uYW1lcyA9IHtOVUxMLCBOVUxMfTsKIAogc3RhdGljIGNoYXIgKnJlc3RyaWN0X2tleTsKK3N0 YXRpYyBBcmNoaXZlICpmb3V0ID0gTlVMTDsKK3N0YXRpYyBwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzaW9uX3NwZWMgPSB7MH07CitzdGF0aWMgaW50IGR1bXBJZFZhbCA9IDA7Citz dGF0aWMgY29uc3QgQ2F0YWxvZ0lkIG5pbENhdGFsb2dJZCA9IHswLCAwfTsKK3N0YXRpYyBBcmNo aXZlTW9kZSBhcmNoaXZlTW9kZSA9IGFyY2hNb2RlV3JpdGU7CitzdGF0aWMgRGF0YURpclN5bmNN ZXRob2Qgc3luY19tZXRob2QgPSBEQVRBX0RJUl9TWU5DX01FVEhPRF9GU1lOQzsKK3N0YXRpYyBB cmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CiAKIGludAogbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQpAQCAtMTQ4LDYgKzE1OSw3IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIAkJeyJwYXNzd29yZCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnVyd9LAogCQl7 Im5vLXByaXZpbGVnZXMiLCBub19hcmd1bWVudCwgTlVMTCwgJ3gnfSwKIAkJeyJuby1hY2wiLCBu b19hcmd1bWVudCwgTlVMTCwgJ3gnfSwKKwkJeyJmb3JtYXQiLCByZXF1aXJlZF9hcmd1bWVudCwg TlVMTCwgJ0YnfSwKIAogCQkvKgogCQkgKiB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZG9uJ3QgaGF2 ZSBhbiBlcXVpdmFsZW50IHNob3J0IG9wdGlvbiBsZXR0ZXIKQEAgLTE5Nyw2ICsyMDksNyBAQCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJY2hhcgkgICAqcGdkYiA9IE5VTEw7CiAJY2hh cgkgICAqdXNlX3JvbGUgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmR1bXBlbmNvZGluZyA9IE5VTEw7 CisJY29uc3QgY2hhciAqZm9ybWF0TmFtZSA9ICJwIjsKIAl0cml2YWx1ZQlwcm9tcHRfcGFzc3dv cmQgPSBUUklfREVGQVVMVDsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxzZTsKIAlib29sCQlnbG9i YWxzX29ubHkgPSBmYWxzZTsKQEAgLTIwOCw2ICsyMjEsOCBAQCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAJaW50CQkJYywKIAkJCQlyZXQ7CiAJaW50CQkJb3B0aW5kZXg7CisJRHVtcE9w dGlvbnMgZG9wdDsKKwljaGFyICAgICAgICBnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOwogCiAJcGdf bG9nZ2luZ19pbml0KGFyZ3ZbMF0pOwogCXBnX2xvZ2dpbmdfc2V0X2xldmVsKFBHX0xPR19XQVJO SU5HKTsKQEAgLTI0Niw3ICsyNjEsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAK IAlwZ2R1bXBvcHRzID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAotCXdoaWxlICgoYyA9IGdldG9w dF9sb25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpmOmdoOmw6T3A6cnNTOnRVOnZ3V3giLCBsb25nX29w dGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQorCUluaXREdW1wT3B0aW9ucygmZG9wdCk7CisKKwl3 aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNkOkU6ZjpGOmdoOmw6T3A6cnNT OnRVOnZ3V3giLCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQogCXsKIAkJc3dpdGNo IChjKQogCQl7CkBAIC0yNTcsNiArMjc0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQogCiAJCQljYXNlICdjJzoKIAkJCQlvdXRwdXRfY2xlYW4gPSB0cnVlOworCQkJCWRvcHQub3V0 cHV0Q2xlYW4gPSAxOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICdkJzoKQEAgLTI3NCw3ICsyOTIs OSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJYXBwZW5kUFFFeHBCdWZmZXJT dHIocGdkdW1wb3B0cywgIiAtZiAiKTsKIAkJCQlhcHBlbmRTaGVsbFN0cmluZyhwZ2R1bXBvcHRz LCBmaWxlbmFtZSk7CiAJCQkJYnJlYWs7Ci0KKwkJCWNhc2UgJ0YnOgorCQkJCWZvcm1hdE5hbWUg PSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQlicmVhazsKIAkJCWNhc2UgJ2cnOgogCQkJCWdsb2Jh bHNfb25seSA9IHRydWU7CiAJCQkJYnJlYWs7CkBAIC0zMTQsNiArMzM0LDcgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQogCiAJCQljYXNlICdVJzoKIAkJCQlwZ3VzZXIgPSBwZ19zdHJk dXAob3B0YXJnKTsKKwkJCQlkb3B0LmNwYXJhbXMudXNlcm5hbWUgPSBwZ19zdHJkdXAob3B0YXJn KTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAndic6CkBAIC00MjksNiArNDUwLDIxIEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQogCisJLyogR2V0 IGZvcm1hdCBmb3IgZHVtcC4gKi8KKwlhcmNoRHVtcEZvcm1hdCA9IHBhcnNlRHVtcEZvcm1hdChm b3JtYXROYW1lKTsKKworCS8qCisJICogSWYgYSBub24tcGxhaW4gZm9ybWF0IGlzIHNwZWNpZmll ZCwgYSBmaWxlIG5hbWUgaXMgYWxzbyByZXF1aXJlZCBhcyB0aGUKKwkgKiBwYXRoIHRvIHRoZSBt YWluIGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwgJiYK KwkJKCFmaWxlbmFtZSB8fCBzdHJjbXAoZmlsZW5hbWUsICIiKSA9PSAwKSkKKwl7CisJCXBnX2xv Z19lcnJvcigib3B0aW9uIC1GLy0tZm9ybWF0PWR8Y3x0IHJlcXVpcmVzIG9wdGlvbiAtZi8tLWZp bGUiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGlu Zm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCiAJLyoKIAkg KiBJZiBwYXNzd29yZCB2YWx1ZXMgYXJlIG5vdCByZXF1aXJlZCBpbiB0aGUgZHVtcCwgc3dpdGNo IHRvIHVzaW5nCiAJICogcGdfcm9sZXMgd2hpY2ggaXMgZXF1YWxseSB1c2VmdWwsIGp1c3QgbW9y ZSBsaWtlbHkgdG8gaGF2ZSB1bnJlc3RyaWN0ZWQKQEAgLTQ4OSw2ICs1MjUsMzMgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCWlmIChzZXF1ZW5jZV9kYXRhKQogCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC0tc2VxdWVuY2UtZGF0YSIpOwogCisJLyoKKwkgKiBP cGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQuICBJ ZiByZXF1aXJlZCwKKwkgKiB0aGVuIGNyZWF0ZSBuZXcgZGlyZWN0b3J5LgorCSAqLworCWlmIChm aWxlbmFtZSAmJiBhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCS8qIENyZWF0ZSBu ZXcgZGlyZWN0b3J5IG9yIGFjY2VwdCB0aGUgZW1wdHkgZXhpc3RpbmcgZGlyZWN0b3J5LiAqLwor CQljcmVhdGVfb3Jfb3Blbl9kaXIoZmlsZW5hbWUpOworCisJCS8qIHNldCBmaWxlIHBhdGggZm9y IGdsb2JhbCBzcWwgY29tbWFuZHMuICovCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoQ3Vz dG9tKQorCQkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVzL3RvYy5kbXAiLCBm aWxlbmFtZSk7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQlzbnBy aW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMvdG9jLnRhciIsIGZpbGVuYW1lKTsKKwkJ ZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaERpcmVjdG9yeSkKKwkJCXNucHJpbnRmKGds b2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcyIsIGZpbGVuYW1lKTsKKwl9CisJZWxzZSBpZiAoZmls ZW5hbWUpCisJeworCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOworCQlpZiAo IU9QRikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVt IiwKKwkJCQkJIGZpbGVuYW1lKTsKKwl9CisJZWxzZQorCQlPUEYgPSBzdGRvdXQ7CisKIAkvKgog CSAqIElmIHlvdSBkb24ndCBwcm92aWRlIGEgcmVzdHJpY3Qga2V5LCBvbmUgd2lsbCBiZSBhcHBv aW50ZWQgZm9yIHlvdS4KIAkgKi8KQEAgLTUzOCwxOSArNjAxLDYgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogCWV4cGFuZF9kYm5hbWVfcGF0dGVybnMoY29ubiwgJmRhdGFiYXNlX2V4 Y2x1ZGVfcGF0dGVybnMsCiAJCQkJCQkgICAmZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyk7CiAKLQkv KgotCSAqIE9wZW4gdGhlIG91dHB1dCBmaWxlIGlmIHJlcXVpcmVkLCBvdGhlcndpc2UgdXNlIHN0 ZG91dAotCSAqLwotCWlmIChmaWxlbmFtZSkKLQl7Ci0JCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQ R19CSU5BUllfVyk7Ci0JCWlmICghT1BGKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91 dHB1dCBmaWxlIFwiJXNcIjogJW0iLAotCQkJCQkgZmlsZW5hbWUpOwotCX0KLQllbHNlCi0JCU9Q RiA9IHN0ZG91dDsKLQogCS8qCiAJICogU2V0IHRoZSBjbGllbnQgZW5jb2RpbmcgaWYgcmVxdWVz dGVkLgogCSAqLwpAQCAtNTg1LDM3ICs2MzUsMTIzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKIAlpZiAocXVvdGVfYWxsX2lkZW50aWZpZXJzKQogCQlleGVjdXRlQ29tbWFuZChjb25u LCAiU0VUIHF1b3RlX2FsbF9pZGVudGlmaWVycyA9IHRydWUiKTsKIAotCWZwcmludGYoT1BGLCAi LS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxuXG4iKTsKIAlpZiAo dmVyYm9zZSkKIAkJZHVtcFRpbWVzdGFtcCgiU3RhcnRlZCBvbiIpOwogCi0JLyoKLQkgKiBFbnRl ciByZXN0cmljdGVkIG1vZGUgdG8gYmxvY2sgYW55IHVuZXhwZWN0ZWQgcHNxbCBtZXRhLWNvbW1h bmRzLiAgQQotCSAqIG1hbGljaW91cyBzb3VyY2UgbWlnaHQgdHJ5IHRvIGluamVjdCBhIHZhcmll dHkgb2YgdGhpbmdzIHZpYSBib2d1cwotCSAqIHJlc3BvbnNlcyB0byBxdWVyaWVzLiAgV2hpbGUg d2UgY2Fubm90IHByZXZlbnQgc3VjaCBzb3VyY2VzIGZyb20KLQkgKiBhZmZlY3RpbmcgdGhlIGRl c3RpbmF0aW9uIGF0IHJlc3RvcmUgdGltZSwgd2UgY2FuIGJsb2NrIHBzcWwKLQkgKiBtZXRhLWNv bW1hbmRzIHNvIHRoYXQgdGhlIGNsaWVudCBtYWNoaW5lIHRoYXQgcnVucyBwc3FsIHdpdGggdGhl IGR1bXAKLQkgKiBvdXRwdXQgcmVtYWlucyB1bmFmZmVjdGVkLgotCSAqLwotCWZwcmludGYoT1BG LCAiXFxyZXN0cmljdCAlc1xuXG4iLCByZXN0cmljdF9rZXkpOworCS8qIGNyZWF0ZSBhIGFyY2hp dmUgZmlsZSBmb3IgZ2xvYmFsIGNvbW1hbmRzLiAqLworCWlmIChmaWxlbmFtZSAmJiBhcmNoRHVt cEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCS8qIE9wZW4gdGhlIG91dHB1dCBmaWxlICovCisJ CWZvdXQgPSBDcmVhdGVBcmNoaXZlKGdsb2JhbF9wYXRoLCBhcmNoRHVtcEZvcm1hdCwgY29tcHJl c3Npb25fc3BlYywKKwkJCQlkb3N5bmMsIGFyY2hpdmVNb2RlLCBOVUxMLCBzeW5jX21ldGhvZCk7 CiAKLQkvKgotCSAqIFdlIHVzZWQgdG8gZW1pdCBcY29ubmVjdCBwb3N0Z3JlcyBoZXJlLCBidXQg dGhhdCBzZXJ2ZWQgbm8gcHVycG9zZQotCSAqIG90aGVyIHRoYW4gdG8gYnJlYWsgdGhpbmdzIGZv ciBpbnN0YWxsYXRpb25zIHdpdGhvdXQgYSBwb3N0Z3JlcwotCSAqIGRhdGFiYXNlLiAgRXZlcnl0 aGluZyB3ZSdyZSByZXN0b3JpbmcgaGVyZSBpcyBhIGdsb2JhbCwgc28gd2hpY2hldmVyCi0JICog ZGF0YWJhc2Ugd2UncmUgY29ubmVjdGVkIHRvIGF0IHRoZSBtb21lbnQgaXMgZmluZS4KLQkgKi8K KwkJLyogTWFrZSBkdW1wIG9wdGlvbnMgYWNjZXNzaWJsZSByaWdodCBhd2F5ICovCisJCVNldEFy Y2hpdmVPcHRpb25zKGZvdXQsICZkb3B0LCBOVUxMKTsKIAotCS8qIFJlc3RvcmUgd2lsbCBuZWVk IHRvIHdyaXRlIHRvIHRoZSB0YXJnZXQgY2x1c3RlciAqLwotCWZwcmludGYoT1BGLCAiU0VUIGRl ZmF1bHRfdHJhbnNhY3Rpb25fcmVhZF9vbmx5ID0gb2ZmO1xuXG4iKTsKKwkJKChBcmNoaXZlSGFu ZGxlICogKWZvdXQpIC0+Y29ubmVjdGlvbiA9IGNvbm47CisJCSgoQXJjaGl2ZUhhbmRsZSAqICkg Zm91dCkgLT4gcHVibGljLm51bVdvcmtlcnMgPSAxOwogCi0JLyogUmVwbGljYXRlIGVuY29kaW5n IGFuZCBzdGRfc3RyaW5ncyBpbiBvdXRwdXQgKi8KLQlmcHJpbnRmKE9QRiwgIlNFVCBjbGllbnRf ZW5jb2RpbmcgPSAnJXMnO1xuIiwKLQkJCXBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2RpbmcpKTsK LQlmcHJpbnRmKE9QRiwgIlNFVCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgPSAlcztcbiIs IHN0ZF9zdHJpbmdzKTsKLQlpZiAoc3RyY21wKHN0ZF9zdHJpbmdzLCAib2ZmIikgPT0gMCkKLQkJ ZnByaW50ZihPUEYsICJTRVQgZXNjYXBlX3N0cmluZ193YXJuaW5nID0gb2ZmO1xuIik7Ci0JZnBy aW50ZihPUEYsICJcbiIpOworCQkvKiBSZWdpc3RlciB0aGUgY2xlYW51cCBob29rICovCisJCW9u X2V4aXRfY2xvc2VfYXJjaGl2ZShmb3V0KTsKKworCQkvKiBMZXQgdGhlIGFyY2hpdmVyIGtub3cg aG93IG5vaXN5IHRvIGJlICovCisJCWZvdXQtPnZlcmJvc2UgPSB2ZXJib3NlOworCisJCS8qCisJ CSAqIFdlIGFsbG93IHRoZSBzZXJ2ZXIgdG8gYmUgYmFjayB0byA5LjIsIGFuZCB1cCB0byBhbnkg bWlub3IgcmVsZWFzZSBvZgorCQkgKiBvdXIgb3duIG1ham9yIHZlcnNpb24uICAoU2VlIGFsc28g dmVyc2lvbiBjaGVjayBpbiBwZ19kdW1wYWxsLmMuKQorCQkgKi8KKwkJZm91dC0+bWluUmVtb3Rl VmVyc2lvbiA9IDkwMjAwOworCQlmb3V0LT5tYXhSZW1vdGVWZXJzaW9uID0gKFBHX1ZFUlNJT05f TlVNIC8gMTAwKSAqIDEwMCArIDk5OworCQlmb3V0LT5udW1Xb3JrZXJzID0gMTsKKworCQkvKiBk dW1wRW5jb2Rpbmc6IHB1dCB0aGUgY29ycmVjdCBlbmNvZGluZyBpbnRvIHRoZSBhcmNoaXZlICov CisJCXsKKwkJCVBRRXhwQnVmZmVyIHFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJCQljb25z dCBjaGFyICplbmNuYW1lID0gcGdfZW5jb2RpbmdfdG9fY2hhcihlbmNvZGluZyk7CisKKwkJCXBn X2xvZ19pbmZvKCJzYXZpbmcgZW5jb2RpbmcgPSAlcyIsIGVuY25hbWUpOworCisJCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cihxcnksICJTRVQgY2xpZW50X2VuY29kaW5nID0gIik7CisJCQlhcHBlbmRT dHJpbmdMaXRlcmFsQUgocXJ5LCBlbmNuYW1lLCBmb3V0KTsKKworCQkJQXJjaGl2ZUVudHJ5KGZv dXQsIG5pbENhdGFsb2dJZCwgY3JlYXRlRHVtcElkTG9jYWwoKSwKKwkJCQkJQVJDSElWRV9PUFRT KC50YWcgPSAiRU5DT0RJTkciLAorCQkJCQkJLmRlc2NyaXB0aW9uID0gIkVOQ09ESU5HIiwKKwkJ CQkJCS5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCS5jcmVhdGVTdG10ID0gcXJ5 LT5kYXRhKSk7CisKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCQl9CisKKwkJLyogZHVt cFN0ZFN0cmluZ3M6IHB1dCB0aGUgY29ycmVjdCBlc2NhcGUgc3RyaW5nIGJlaGF2aW9yIGludG8g dGhlIGFyY2hpdmUgKi8KKwkJeworCQkJY29uc3QgY2hhciAqc3Rkc3RyaW5ncyA9IHN0ZF9zdHJp bmdzID8gIm9uIiA6ICJvZmYiOworCQkJUFFFeHBCdWZmZXIgcXJ5ID0gY3JlYXRlUFFFeHBCdWZm ZXIoKTsKKworCQkJcGdfbG9nX2luZm8oInNhdmluZyBcInN0YW5kYXJkX2NvbmZvcm1pbmdfc3Ry aW5ncyA9ICVzXCIiLCBzdGRzdHJpbmdzKTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAi U0VUIHN0YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyA9ICclcyc7XG4iLAorCQkJCQlzdGRzdHJp bmdzKTsKKworCQkJQXJjaGl2ZUVudHJ5KGZvdXQsIG5pbENhdGFsb2dJZCwgY3JlYXRlRHVtcElk TG9jYWwoKSwKKwkJCQkJQVJDSElWRV9PUFRTKC50YWcgPSAiU1REU1RSSU5HUyIsCisJCQkJCQku ZGVzY3JpcHRpb24gPSAiU1REU1RSSU5HUyIsCisJCQkJCQkuc2VjdGlvbiA9IFNFQ1RJT05fUFJF X0RBVEEsCisJCQkJCQkuY3JlYXRlU3RtdCA9IHFyeS0+ZGF0YSkpOworCisJCQlkZXN0cm95UFFF eHBCdWZmZXIocXJ5KTsKKwkJfQorCisJCS8qIGRlZmF1bHRfdHJhbnNhY3Rpb25fcmVhZF9vbmx5 ID0gb2ZmICovCisJCXsKKwkJCVBRRXhwQnVmZmVyIHFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7 CisKKwkJCXBnX2xvZ19pbmZvKCJzYXZpbmcgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkg PSBvZmYiKTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiU0VUIGRlZmF1bHRfdHJhbnNh Y3Rpb25fcmVhZF9vbmx5ID0gb2ZmO1xuIik7CisKKwkJCUFyY2hpdmVFbnRyeShmb3V0LCBuaWxD YXRhbG9nSWQsIGNyZWF0ZUR1bXBJZExvY2FsKCksCisJCQkJCUFSQ0hJVkVfT1BUUygudGFnID0g IkRFRkFVTFRfVFJBTlNBQ1RJT05fUkVBRF9PTkxZIiwKKwkJCQkJCS5kZXNjcmlwdGlvbiA9ICJE RUZBVUxUX1RSQU5TQUNUSU9OX1JFQURfT05MWSIsCisJCQkJCQkuc2VjdGlvbiA9IFNFQ1RJT05f UFJFX0RBVEEsCisJCQkJCQkuY3JlYXRlU3RtdCA9IHFyeS0+ZGF0YSkpOworCisJCQlkZXN0cm95 UFFFeHBCdWZmZXIocXJ5KTsKKwkJfQorCX0KKwllbHNlCisJeworCQlmcHJpbnRmKE9QRiwgIi0t XG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcFxuLS1cblxuIik7CisKKwkJLyoK KwkJICogRW50ZXIgcmVzdHJpY3RlZCBtb2RlIHRvIGJsb2NrIGFueSB1bmV4cGVjdGVkIHBzcWwg bWV0YS1jb21tYW5kcy4gIEEKKwkJICogbWFsaWNpb3VzIHNvdXJjZSBtaWdodCB0cnkgdG8gaW5q ZWN0IGEgdmFyaWV0eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCisJCSAqIHJlc3BvbnNlcyB0byBxdWVy aWVzLiAgV2hpbGUgd2UgY2Fubm90IHByZXZlbnQgc3VjaCBzb3VyY2VzIGZyb20KKwkJICogYWZm ZWN0aW5nIHRoZSBkZXN0aW5hdGlvbiBhdCByZXN0b3JlIHRpbWUsIHdlIGNhbiBibG9jayBwc3Fs CisJCSAqIG1ldGEtY29tbWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1hY2hpbmUgdGhhdCBydW5z IHBzcWwgd2l0aCB0aGUgZHVtcAorCQkgKiBvdXRwdXQgcmVtYWlucyB1bmFmZmVjdGVkLgorCQkg Ki8KKwkJZnByaW50ZihPUEYsICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisK KwkJLyoKKwkJICogV2UgdXNlZCB0byBlbWl0IFxjb25uZWN0IHBvc3RncmVzIGhlcmUsIGJ1dCB0 aGF0IHNlcnZlZCBubyBwdXJwb3NlCisJCSAqIG90aGVyIHRoYW4gdG8gYnJlYWsgdGhpbmdzIGZv ciBpbnN0YWxsYXRpb25zIHdpdGhvdXQgYSBwb3N0Z3JlcworCQkgKiBkYXRhYmFzZS4gIEV2ZXJ5 dGhpbmcgd2UncmUgcmVzdG9yaW5nIGhlcmUgaXMgYSBnbG9iYWwsIHNvIHdoaWNoZXZlcgorCQkg KiBkYXRhYmFzZSB3ZSdyZSBjb25uZWN0ZWQgdG8gYXQgdGhlIG1vbWVudCBpcyBmaW5lLgorCQkg Ki8KKworCQkvKiBSZXN0b3JlIHdpbGwgbmVlZCB0byB3cml0ZSB0byB0aGUgdGFyZ2V0IGNsdXN0 ZXIgKi8KKwkJZnByaW50ZihPUEYsICJTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkg PSBvZmY7XG5cbiIpOworCisJCS8qIFJlcGxpY2F0ZSBlbmNvZGluZyBhbmQgc3RkX3N0cmluZ3Mg aW4gb3V0cHV0ICovCisJCWZwcmludGYoT1BGLCAiU0VUIGNsaWVudF9lbmNvZGluZyA9ICclcyc7 XG4iLAorCQkJCXBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2RpbmcpKTsKKwkJZnByaW50ZihPUEYs ICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzID0gJXM7XG4iLCBzdGRfc3RyaW5ncyk7 CisJCWlmIChzdHJjbXAoc3RkX3N0cmluZ3MsICJvZmYiKSA9PSAwKQorCQkJZnByaW50ZihPUEYs ICJTRVQgZXNjYXBlX3N0cmluZ193YXJuaW5nID0gb2ZmO1xuIik7CisJCWZwcmludGYoT1BGLCAi XG4iKTsKKwl9CiAKIAlpZiAoIWRhdGFfb25seSAmJiAhc3RhdGlzdGljc19vbmx5ICYmICFub19z Y2hlbWEpCiAJewpAQCAtNjU5LDI3ICs3OTUsNDEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCQkJZHVtcFRhYmxlc3BhY2VzKGNvbm4pOwogCX0KIAotCS8qCi0JICogRXhpdCByZXN0 cmljdGVkIG1vZGUganVzdCBiZWZvcmUgZHVtcGluZyB0aGUgZGF0YWJhc2VzLiAgcGdfZHVtcCB3 aWxsCi0JICogaGFuZGxlIGVudGVyaW5nIHJlc3RyaWN0ZWQgbW9kZSBhZ2FpbiBhcyBhcHByb3By aWF0ZS4KLQkgKi8KLQlmcHJpbnRmKE9QRiwgIlxcdW5yZXN0cmljdCAlc1xuXG4iLCByZXN0cmlj dF9rZXkpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwl7CisJCS8qCisJCSAq IEV4aXQgcmVzdHJpY3RlZCBtb2RlIGp1c3QgYmVmb3JlIGR1bXBpbmcgdGhlIGRhdGFiYXNlcy4g IHBnX2R1bXAgd2lsbAorCQkgKiBoYW5kbGUgZW50ZXJpbmcgcmVzdHJpY3RlZCBtb2RlIGFnYWlu IGFzIGFwcHJvcHJpYXRlLgorCQkgKi8KKwkJZnByaW50ZihPUEYsICJcXHVucmVzdHJpY3QgJXNc blxuIiwgcmVzdHJpY3Rfa2V5KTsKKwl9CiAKIAlpZiAoIWdsb2JhbHNfb25seSAmJiAhcm9sZXNf b25seSAmJiAhdGFibGVzcGFjZXNfb25seSkKLQkJZHVtcERhdGFiYXNlcyhjb25uKTsKLQotCVBR ZmluaXNoKGNvbm4pOworCQlkdW1wRGF0YWJhc2VzKGNvbm4sIGFyY2hEdW1wRm9ybWF0KTsKIAog CWlmICh2ZXJib3NlKQogCQlkdW1wVGltZXN0YW1wKCJDb21wbGV0ZWQgb24iKTsKLQlmcHJpbnRm KE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxu LS1cblxuIik7CiAKLQlpZiAoZmlsZW5hbWUpCisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hO dWxsKQorCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIg ZHVtcCBjb21wbGV0ZVxuLS1cblxuIik7CisKKwlpZiAoZmlsZW5hbWUgJiYgYXJjaER1bXBGb3Jt YXQgIT0gYXJjaE51bGwpCisJeworCQlSZXN0b3JlT3B0aW9ucyAqcm9wdDsKKworCQlyb3B0ID0g TmV3UmVzdG9yZU9wdGlvbnMoKTsKKwkJU2V0QXJjaGl2ZU9wdGlvbnMoZm91dCwgJmRvcHQsIHJv cHQpOworCisJCS8qIE1hcmsgd2hpY2ggZW50cmllcyBzaG91bGQgYmUgb3V0cHV0ICovCisJCVBy b2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoZm91dCk7CisJCUNsb3NlQXJjaGl2ZShmb3V0KTsK Kwl9CisJZWxzZSBpZiAoZmlsZW5hbWUpCiAJewogCQlmY2xvc2UoT1BGKTsKIAogCQkvKiBzeW5j IHRoZSByZXN1bHRpbmcgZmlsZSwgZXJyb3JzIGFyZSBub3QgZmF0YWwgKi8KLQkJaWYgKGRvc3lu YykKKwkJaWYgKGRvc3luYyAmJiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpKQogCQkJKHZv aWQpIGZzeW5jX2ZuYW1lKGZpbGVuYW1lLCBmYWxzZSk7CiAJfQogCkBAIC02OTAsMTIgKzg0MCwx NCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiBzdGF0aWMgdm9pZAogaGVscCh2b2lk KQogewotCXByaW50ZihfKCIlcyBleHBvcnRzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVy IGFzIGFuIFNRTCBzY3JpcHQuXG5cbiIpLCBwcm9nbmFtZSk7CisJcHJpbnRmKF8oIiVzIGV4cG9y dHMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgYXMgYW4gU1FMIHNjcmlwdCBvciB0byBv dGhlciBmb3JtYXRzLlxuXG4iKSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJVc2FnZTpcbiIpKTsK IAlwcmludGYoXygiICAlcyBbT1BUSU9OXS4uLlxuIiksIHByb2duYW1lKTsKIAogCXByaW50Zihf KCJcbkdlbmVyYWwgb3B0aW9uczpcbiIpKTsKIAlwcmludGYoXygiICAtZiwgLS1maWxlPUZJTEVO QU1FICAgICAgICAgIG91dHB1dCBmaWxlIG5hbWVcbiIpKTsKKwlwcmludGYoXygiICAtRiwgLS1m b3JtYXQ9Y3xkfHR8cCAgICAgICAgIG91dHB1dCBmaWxlIGZvcm1hdCAoY3VzdG9tLCBkaXJlY3Rv cnksIHRhcixcbiIKKwkJCSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRl eHQgKGRlZmF1bHQpKVxuIikpOwogCXByaW50ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAgICAg ICAgICAgdmVyYm9zZSBtb2RlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAg ICAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CiAJ cHJpbnRmKF8oIiAgLS1sb2NrLXdhaXQtdGltZW91dD1USU1FT1VUICBmYWlsIGFmdGVyIHdhaXRp bmcgVElNRU9VVCBmb3IgYSB0YWJsZSBsb2NrXG4iKSk7CkBAIC03NzAsNiArOTIyLDcgQEAgc3Rh dGljIHZvaWQKIGRyb3BSb2xlcyhQR2Nvbm4gKmNvbm4pCiB7CiAJUFFFeHBCdWZmZXIgYnVmID0g Y3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQUUV4cEJ1ZmZlciBkZWxRcnkgPSBjcmVhdGVQUUV4cEJ1 ZmZlcigpOwogCVBHcmVzdWx0ICAgKnJlczsKIAlpbnQJCQlpX3JvbG5hbWU7CiAJaW50CQkJaTsK QEAgLTc5MCw3ICs5NDMsNyBAQCBkcm9wUm9sZXMoUEdjb25uICpjb25uKQogCiAJaV9yb2xuYW1l ID0gUFFmbnVtYmVyKHJlcywgInJvbG5hbWUiKTsKIAotCWlmIChQUW50dXBsZXMocmVzKSA+IDAp CisJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCAmJiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwp KQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIHJvbGVzXG4tLVxuXG4iKTsKIAogCWZvciAo aSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQpAQCAtNzk5LDE1ICs5NTIsMzEgQEAgZHJv cFJvbGVzKFBHY29ubiAqY29ubikKIAogCQlyb2xlbmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCBp X3JvbG5hbWUpOwogCi0JCWZwcmludGYoT1BGLCAiRFJPUCBST0xFICVzJXM7XG4iLAorCQlhcHBl bmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIFJPTEUgJXMlcztcbiIsCiAJCQkJaWZfZXhpc3Rz ID8gIklGIEVYSVNUUyAiIDogIiIsCiAJCQkJZm10SWQocm9sZW5hbWUpKTsKKworCQlpZiAoYXJj aER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5LT5k YXRhKTsKKwkJZWxzZQorCQl7CisJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJbmlsQ2F0YWxv Z0lkLCAvKiBjYXRhbG9nIElEICovCisJCQkJCWNyZWF0ZUR1bXBJZExvY2FsKCksIC8qIGR1bXAg SUQgKi8KKwkJCQkJQVJDSElWRV9PUFRTKC50YWcgPSAiZHJvcFJvbGVzIiwKKwkJCQkJCS8vLm93 bmVyID0gZGJhLAorCQkJCQkJLmRlc2NyaXB0aW9uID0gImRyb3BSb2xlc19kZXMiLAorCQkJCQkJ LnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJLmNyZWF0ZVN0bXQgPSBkZWxRcnkt PmRhdGEpKTsKKwkJCS8vLmRyb3BTdG10ID0gZGVsUXJ5LT5kYXRhKSk7CisJCX0KIAl9CiAKIAlQ UWNsZWFyKHJlcyk7CiAJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAKLQlmcHJpbnRmKE9QRiwg IlxuXG4iKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BG LCAiXG5cbiIpOwogfQogCiAvKgpAQCAtODg4LDcgKzEwNTcsNyBAQCBkdW1wUm9sZXMoUEdjb25u ICpjb25uKQogCWlfcm9sY29tbWVudCA9IFBRZm51bWJlcihyZXMsICJyb2xjb21tZW50Iik7CiAJ aV9pc19jdXJyZW50X3VzZXIgPSBQUWZudW1iZXIocmVzLCAiaXNfY3VycmVudF91c2VyIik7CiAK LQlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBsZXMocmVzKSA+IDAgJiYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkKIAkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZXNc bi0tXG5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCkBAIC05 OTMsNyArMTE2MiwyNSBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQogCQkJCQkJCSAiUk9MRSIs IHJvbGVuYW1lLAogCQkJCQkJCSBidWYpOwogCi0JCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRh dGEpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwg IiVzIiwgYnVmLT5kYXRhKTsKKwkJZWxzZQorCQl7CisJCQlQUUV4cEJ1ZmZlciBkZWxRcnkgPSBj cmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9Q IFJPTEUgJXMlcztcbiIsCisJCQkJCWlmX2V4aXN0cyA/ICJJRiBFWElTVFMgIiA6ICIiLCBmbXRJ ZChyb2xlbmFtZSkpOworCisJCQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJbmlsQ2F0YWxvZ0lk LCAvKiBjYXRhbG9nIElEICovCisJCQkJCWNyZWF0ZUR1bXBJZExvY2FsKCksIC8qIGR1bXAgSUQg Ki8KKwkJCQkJQVJDSElWRV9PUFRTKC50YWcgPSAiZHVtcFJvbGVzIiwKKwkJCQkJCS8vLm93bmVy ID0gZGJhLAorCQkJCQkJLmRlc2NyaXB0aW9uID0gImR1bXBSb2xlc19kZXMiLAorCQkJCQkJLnNl Y3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJLmNyZWF0ZVN0bXQgPSBidWYtPmRhdGEp KTsKKwkJCS8vLmRyb3BTdG10ID0gZGVsUXJ5LT5kYXRhKSk7CisJCX0KIAl9CiAKIAkvKgpAQCAt MTAwMSwxNSArMTE4OCwxMyBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQogCSAqIFdlIGRvIGl0 IHRoaXMgd2F5IGJlY2F1c2UgY29uZmlnIHNldHRpbmdzIGZvciByb2xlcyBjb3VsZCBtZW50aW9u IHRoZQogCSAqIG5hbWVzIG9mIG90aGVyIHJvbGVzLgogCSAqLwotCWlmIChQUW50dXBsZXMocmVz KSA+IDApCi0JCWZwcmludGYoT1BGLCAiXG4tLVxuLS0gVXNlciBDb25maWd1cmF0aW9uc1xuLS1c biIpOwotCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJCWR1bXBVc2Vy Q29uZmlnKGNvbm4sIFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbG5hbWUpKTsKIAogCVBRY2xlYXIo cmVzKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBh cmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiAKIAlkZXN0cm95UFFFeHBCdWZmZXIo YnVmKTsKIH0KQEAgLTEwODcsNyArMTI3Miw3IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4g KmNvbm4pCiAJaV9pbmhlcml0X29wdGlvbiA9IFBRZm51bWJlcihyZXMsICJpbmhlcml0X29wdGlv biIpOwogCWlfc2V0X29wdGlvbiA9IFBRZm51bWJlcihyZXMsICJzZXRfb3B0aW9uIik7CiAKLQlp ZiAoUFFudHVwbGVzKHJlcykgPiAwKQorCWlmIChQUW50dXBsZXMocmVzKSA+IDAgJiYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hOdWxsKSkKIAkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZSBtZW1i ZXJzaGlwc1xuLS1cblxuIik7CiAKIAkvKgpAQCAtMTE2Nyw2ICsxMzUyLDcgQEAgZHVtcFJvbGVN ZW1iZXJzaGlwKFBHY29ubiAqY29ubikKIAkJCQljaGFyCSAgICpncmFudG9yOwogCQkJCWNoYXIJ ICAgKnNldF9vcHRpb24gPSAidHJ1ZSI7CiAJCQkJYm9vbAkJZm91bmQ7CisJCQkJUFFFeHBCdWZm ZXIgY3JlYVFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CiAKIAkJCQkvKiBJZiB3ZSBhbHJlYWR5 IGRpZCB0aGlzIGdyYW50LCBkb24ndCBkbyBpdCBhZ2Fpbi4gKi8KIAkJCQlpZiAoZG9uZVtpIC0g c3RhcnRdKQpAQCAtMTIyMyw4ICsxNDA5LDggQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29ubiAq Y29ubikKIAogCQkJCS8qIEdlbmVyYXRlIHRoZSBhY3R1YWwgR1JBTlQgc3RhdGVtZW50LiAqLwog CQkJCXJlc2V0UFFFeHBCdWZmZXIob3B0YnVmKTsKLQkJCQlmcHJpbnRmKE9QRiwgIkdSQU5UICVz IiwgZm10SWQocm9sZSkpOwotCQkJCWZwcmludGYoT1BGLCAiIFRPICVzIiwgZm10SWQobWVtYmVy KSk7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoY3JlYVFyeSwgIkdSQU5UICVzIiwgZm10SWQocm9s ZSkpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGNyZWFRcnksICIgVE8gJXMiLCBmbXRJZChtZW1i ZXIpKTsKIAkJCQlpZiAoKmFkbWluX29wdGlvbiA9PSAndCcpCiAJCQkJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKG9wdGJ1ZiwgIkFETUlOIE9QVElPTiIpOwogCQkJCWlmIChkdW1wX2dyYW50X29wdGlv bnMpCkBAIC0xMjQ1LDEwICsxNDMxLDI0IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNv bm4pCiAJCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKG9wdGJ1ZiwgIlNFVCBGQUxTRSIpOwogCQkJ CX0KIAkJCQlpZiAob3B0YnVmLT5kYXRhWzBdICE9ICdcMCcpCi0JCQkJCWZwcmludGYoT1BGLCAi IFdJVEggJXMiLCBvcHRidWYtPmRhdGEpOworCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjcmVhUXJ5 LCAiIFdJVEggJXMiLCBvcHRidWYtPmRhdGEpOwogCQkJCWlmIChkdW1wX2dyYW50b3JzKQotCQkJ CQlmcHJpbnRmKE9QRiwgIiBHUkFOVEVEIEJZICVzIiwgZm10SWQoZ3JhbnRvcikpOwotCQkJCWZw cmludGYoT1BGLCAiO1xuIik7CisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGNyZWFRcnksICIgR1JB TlRFRCBCWSAlcyIsIGZtdElkKGdyYW50b3IpKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjcmVh UXJ5LCAiO1xuIik7CisKKwkJCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQkJ CWZwcmludGYoT1BGLCAiJXMiLCBjcmVhUXJ5LT5kYXRhKTsKKwkJCQllbHNlCisJCQkJeworCQkJ CQlBcmNoaXZlRW50cnkoZm91dCwKKwkJCQkJCQluaWxDYXRhbG9nSWQsIC8qIGNhdGFsb2cgSUQg Ki8KKwkJCQkJCQljcmVhdGVEdW1wSWRMb2NhbCgpLCAvKiBkdW1wIElEICovCisJCQkJCQkJQVJD SElWRV9PUFRTKC50YWcgPSAiZHVtcFJvbGVNZW1iZXJzaGlwIiwKKwkJCQkJCQkJLy8ub3duZXIg PSBkYmEsCisJCQkJCQkJCS5kZXNjcmlwdGlvbiA9ICJkdW1wUm9sZU1lbWJlcnNoaXBfZGVzIiwK KwkJCQkJCQkJLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJCQkuY3JlYXRlU3Rt dCA9IGNyZWFRcnktPmRhdGEpKTsKKwkJCQl9CiAJCQl9CiAJCX0KIApAQCAtMTI2MCw3ICsxNDYw LDggQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29ubiAqY29ubikKIAlQUWNsZWFyKHJlcyk7CiAJ ZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAKLQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKKwlpZiAo YXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQog CiAKQEAgLTEyODcsNyArMTQ4OCw3IEBAIGR1bXBSb2xlR1VDUHJpdnMoUEdjb25uICpjb25uKQog CQkJCQkgICAiRlJPTSBwZ19jYXRhbG9nLnBnX3BhcmFtZXRlcl9hY2wgIgogCQkJCQkgICAiT1JE RVIgQlkgMSIpOwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKKwlpZiAoUFFudHVwbGVzKHJl cykgPiAwICYmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkpCiAJCWZwcmludGYoT1BGLCAi LS1cbi0tIFJvbGUgcHJpdmlsZWdlcyBvbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbi0tXG5c biIpOwogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCkBAIC0xMzEyLDE0 ICsxNTEzLDI4IEBAIGR1bXBSb2xlR1VDUHJpdnMoUEdjb25uICpjb25uKQogCQkJZXhpdF9uaWNl bHkoMSk7CiAJCX0KIAotCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJaWYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0 YSk7CisJCWVsc2UKKwkJeworCQkJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJCW5pbENhdGFsb2dJ ZCwgLyogY2F0YWxvZyBJRCAqLworCQkJCQljcmVhdGVEdW1wSWRMb2NhbCgpLCAvKiBkdW1wIElE ICovCisJCQkJCUFSQ0hJVkVfT1BUUygudGFnID0gImR1bXBSb2xlR1VDUHJpdnMiLAorCQkJCQkJ Ly8ub3duZXIgPSBkYmEsCisJCQkJCQkuZGVzY3JpcHRpb24gPSAiZHVtcFJvbGVHVUNQcml2c19k ZXMiLAorCQkJCQkJLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJLmNyZWF0ZVN0 bXQgPSBidWYtPmRhdGEpKTsKKwkJfQogCiAJCWZyZWUoZnBhcm5hbWUpOwogCQlkZXN0cm95UFFF eHBCdWZmZXIoYnVmKTsKIAl9CiAKIAlQUWNsZWFyKHJlcyk7Ci0JZnByaW50ZihPUEYsICJcblxu Iik7CisKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAi XG5cbiIpOwogfQogCiAKQEAgLTEzMzEsNiArMTU0Niw3IEBAIGRyb3BUYWJsZXNwYWNlcyhQR2Nv bm4gKmNvbm4pCiB7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJCWk7CisJUFFFeHBCdWZmZXIg ZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAogCS8qCiAJICogR2V0IGFsbCB0YWJsZXNw YWNlcyBleGNlcHQgYnVpbHQtaW4gb25lcyAod2hpY2ggd2UgYXNzdW1lIGFyZSBuYW1lZApAQCAt MTM0MSwyMSArMTU1NywzNyBAQCBkcm9wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogCQkJCQkg ICAiV0hFUkUgc3BjbmFtZSAhfiAnXnBnXycgIgogCQkJCQkgICAiT1JERVIgQlkgMSIpOwogCi0J aWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKKwlpZiAoUFFudHVwbGVzKHJlcykgPiAwICYmIChhcmNo RHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkpCiAJCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3AgdGFi bGVzcGFjZXNcbi0tXG5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBp KyspCiAJewogCQljaGFyCSAgICpzcGNuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOwogCi0J CWZwcmludGYoT1BGLCAiRFJPUCBUQUJMRVNQQUNFICVzJXM7XG4iLAorCQlhcHBlbmRQUUV4cEJ1 ZmZlcihkZWxRcnksICJEUk9QIFRBQkxFU1BBQ0UgJXMlcztcbiIsCiAJCQkJaWZfZXhpc3RzID8g IklGIEVYSVNUUyAiIDogIiIsCiAJCQkJZm10SWQoc3BjbmFtZSkpOworCisJCWlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBkZWxRcnktPmRhdGEp OworCQllbHNlCisJCXsKKwkJCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCQluaWxDYXRhbG9nSWQs IC8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJY3JlYXRlRHVtcElkTG9jYWwoKSwgLyogZHVtcCBJRCAq LworCQkJCQlBUkNISVZFX09QVFMoLnRhZyA9ICJkcm9wVGFibGVzcGFjZXMiLAorCQkJCQkJLy8u b3duZXIgPSBkYmEsCisJCQkJCQkuZGVzY3JpcHRpb24gPSAiZHJvcFRhYmxlc3BhY2VzX2RlcyIs CisJCQkJCQkuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEsCisJCQkJCQkuY3JlYXRlU3RtdCA9 IGRlbFFyeS0+ZGF0YSkpOworCQkJLy8gLmRyb3BTdG10ID0gZGVsUXJ5LT5kYXRhKSk7CisJCX0K IAl9CiAKIAlQUWNsZWFyKHJlcyk7CiAKLQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKKwlpZiAoYXJj aER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAv KgpAQCAtMTM4MSw3ICsxNjEzLDcgQEAgZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubikKIAkJ CQkJICAgIldIRVJFIHNwY25hbWUgIX4gJ15wZ18nICIKIAkJCQkJICAgIk9SREVSIEJZIDEiKTsK IAotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCisJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCAmJiAo YXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBUYWJs ZXNwYWNlc1xuLS1cblxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkr KykKQEAgLTE0NTEsNyArMTY4MywyNSBAQCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQog CQkJCQkJCSAiVEFCTEVTUEFDRSIsIHNwY25hbWUsCiAJCQkJCQkJIGJ1Zik7CiAKLQkJZnByaW50 ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQllbHNlCisJCXsKKwkJCVBR RXhwQnVmZmVyIGRlbFFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJCWFwcGVuZFBRRXhw QnVmZmVyKGRlbFFyeSwgIkRST1AgVEFCTEVTUEFDRSAlcyVzO1xuIiwKKwkJCQkJaWZfZXhpc3Rz ID8gIklGIEVYSVNUUyAiIDogIiIsIGZtdElkKGZzcGNuYW1lKSk7CisKKwkJCUFyY2hpdmVFbnRy eShmb3V0LAorCQkJCQluaWxDYXRhbG9nSWQsIC8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJY3JlYXRl RHVtcElkTG9jYWwoKSwgLyogZHVtcCBJRCAqLworCQkJCQlBUkNISVZFX09QVFMoLnRhZyA9ICJk dW1wVGFibGVzcGFjZXMiLAorCQkJCQkJLy8ub3duZXIgPSBkYmEsCisJCQkJCQkuZGVzY3JpcHRp b24gPSAiZHVtcFRhYmxlc3BhY2VzX2RlcyIsCisJCQkJCQkuc2VjdGlvbiA9IFNFQ1RJT05fUFJF X0RBVEEsCisJCQkJCQkuY3JlYXRlU3RtdCA9IGJ1Zi0+ZGF0YSkpOworCQkJCQkvLy5kcm9wU3Rt dCA9IGRlbFFyeS0+ZGF0YSkpOworCQl9CiAKIAkJZnJlZShmc3BjbmFtZSk7CiAJCWRlc3Ryb3lQ UUV4cEJ1ZmZlcihidWYpOwpAQCAtMTQ4MSw3ICsxNzMxLDcgQEAgZHJvcERCcyhQR2Nvbm4gKmNv bm4pCiAJCQkJCSAgICJXSEVSRSBkYXRhbGxvd2Nvbm4gQU5EIGRhdGNvbm5saW1pdCAhPSAtMiAi CiAJCQkJCSAgICJPUkRFUiBCWSBkYXRuYW1lIik7CiAKLQlpZiAoUFFudHVwbGVzKHJlcykgPiAw KQorCWlmIChQUW50dXBsZXMocmVzKSA+IDAgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwp CiAJCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3AgZGF0YWJhc2VzIChleGNlcHQgcG9zdGdyZXMg YW5kIHRlbXBsYXRlMSlcbi0tXG5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhy ZXMpOyBpKyspCkBAIC0xNDk3LDkgKzE3NDcsMjYgQEAgZHJvcERCcyhQR2Nvbm4gKmNvbm4pCiAJ CQlzdHJjbXAoZGJuYW1lLCAidGVtcGxhdGUwIikgIT0gMCAmJgogCQkJc3RyY21wKGRibmFtZSwg InBvc3RncmVzIikgIT0gMCkKIAkJewotCQkJZnByaW50ZihPUEYsICJEUk9QIERBVEFCQVNFICVz JXM7XG4iLAorCQkJUFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwor CQkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAiRFJPUCBEQVRBQkFTRSAlcyVzO1xuIiwKIAkJ CQkJaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDogIiIsCiAJCQkJCWZtdElkKGRibmFtZSkpOwor CisJCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQkJZnByaW50ZihPUEYsICIl cyIsIGRlbFFyeS0+ZGF0YSk7CisJCQllbHNlCisJCQl7CisJCQkJQXJjaGl2ZUVudHJ5KGZvdXQs CisJCQkJCQluaWxDYXRhbG9nSWQsIC8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJCWNyZWF0ZUR1bXBJ ZExvY2FsKCksCisJCQkJCQlBUkNISVZFX09QVFMoLnRhZyA9ICJEUk9QX0RBVEFCQVNFIiwKKwkJ CQkJCQkvLy5vd25lciA9IGRiYSwKKwkJCQkJCQkuZGVzY3JpcHRpb24gPSAiRFJPUF9EQVRBQkFT RV9DT01NQU5EUyIsCisJCQkJCQkJLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRBLAorCQkJCQkJ CS5jcmVhdGVTdG10ID0gZGVsUXJ5LT5kYXRhKSk7CisJCQkJLy8uZHJvcFN0bXQgPSBkZWxRcnkt PmRhdGEpKTsKKwkJCX0KIAkJfQogCX0KIApAQCAtMTUxNyw2ICsxNzg0LDcgQEAgZHVtcFVzZXJD b25maWcoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICp1c2VybmFtZSkKIHsKIAlQUUV4cEJ1ZmZl ciBidWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCVBHcmVzdWx0ICAgKnJlczsKKwlzdGF0aWMg Ym9vbCBoZWFkZXJfZG9uZSA9IGZhbHNlOwogCiAJcHJpbnRmUFFFeHBCdWZmZXIoYnVmLCAiU0VM RUNUIHVubmVzdChzZXRjb25maWcpIEZST00gcGdfZGJfcm9sZV9zZXR0aW5nICIKIAkJCQkJICAi V0hFUkUgc2V0ZGF0YWJhc2UgPSAwIEFORCBzZXRyb2xlID0gIgpAQCAtMTUzMiw3ICsxODAwLDkg QEAgZHVtcFVzZXJDb25maWcoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICp1c2VybmFtZSkKIAkJ Y2hhcgkgICAqc2FuaXRpemVkOwogCiAJCXNhbml0aXplZCA9IHNhbml0aXplX2xpbmUodXNlcm5h bWUsIHRydWUpOwotCQlmcHJpbnRmKE9QRiwgIlxuLS1cbi0tIFVzZXIgQ29uZmlnIFwiJXNcIlxu LS1cblxuIiwgc2FuaXRpemVkKTsKKwkJaWYgKCFoZWFkZXJfZG9uZSAmJiAoYXJjaER1bXBGb3Jt YXQgPT0gYXJjaE51bGwpKQorCQkJZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZpZyBc IiVzXCJcbi0tXG5cbiIsIHNhbml0aXplZCk7CisJCWhlYWRlcl9kb25lID0gdHJ1ZTsKIAkJZnJl ZShzYW5pdGl6ZWQpOwogCX0KIApAQCAtMTU0Miw3ICsxODEyLDE5IEBAIGR1bXBVc2VyQ29uZmln KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCW1ha2VBbHRlckNvbmZpZ0Nv bW1hbmQoY29ubiwgUFFnZXR2YWx1ZShyZXMsIGksIDApLAogCQkJCQkJCSAgICJST0xFIiwgdXNl cm5hbWUsIE5VTEwsIE5VTEwsCiAJCQkJCQkJICAgYnVmKTsKLQkJZnByaW50ZihPUEYsICIlcyIs IGJ1Zi0+ZGF0YSk7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmlu dGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQllbHNlCisJCXsKKwkJCUFyY2hpdmVFbnRyeShm b3V0LAorCQkJCQluaWxDYXRhbG9nSWQsIC8qIGNhdGFsb2cgSUQgKi8KKwkJCQkJY3JlYXRlRHVt cElkTG9jYWwoKSwgLyogZHVtcCBJRCAqLworCQkJCQlBUkNISVZFX09QVFMoLnRhZyA9ICJkdW1w VXNlckNvbmZpZyIsCisJCQkJCQkvLy5vd25lciA9IGRiYSwKKwkJCQkJCS5kZXNjcmlwdGlvbiA9 ICJkdW1wVXNlckNvbmZpZ19kZXMiLAorCQkJCQkJLnNlY3Rpb24gPSBTRUNUSU9OX1BSRV9EQVRB LAorCQkJCQkJLmNyZWF0ZVN0bXQgPSBidWYtPmRhdGEpKTsKKwkJfQogCX0KIAogCVBRY2xlYXIo cmVzKTsKQEAgLTE2MDgsMTAgKzE4OTAsMTMgQEAgZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhQR2Nv bm4gKmNvbm4sCiAgKiBEdW1wIGNvbnRlbnRzIG9mIGRhdGFiYXNlcy4KICAqLwogc3RhdGljIHZv aWQKLWR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQorZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNv bm4sIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpCiB7CiAJUEdyZXN1bHQgICAqcmVzOwog CWludAkJCWk7CisJY2hhcgkJZGJfc3ViZGlyW01BWFBHUEFUSF07CisJY2hhcgkJZGJmaWxlcGF0 aFtNQVhQR1BBVEhdOworCUZJTEUJICAgKm1hcF9maWxlID0gTlVMTDsKIAogCS8qCiAJICogU2tp cCBkYXRhYmFzZXMgbWFya2VkIG5vdCBkYXRhbGxvd2Nvbm4sIHNpbmNlIHdlJ2QgYmUgdW5hYmxl IHRvIGNvbm5lY3QKQEAgLTE2MjUsMTkgKzE5MTAsNDMgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4g KmNvbm4pCiAJICogZG9lc24ndCBoYXZlIHNvbWUgZmFpbHVyZSBtb2RlIHdpdGggLS1jbGVhbi4K IAkgKi8KIAlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwKLQkJCQkJICAgIlNFTEVDVCBkYXRuYW1l ICIKKwkJCQkJICAgIlNFTEVDVCBkYXRuYW1lLCBvaWQgIgogCQkJCQkgICAiRlJPTSBwZ19kYXRh YmFzZSBkICIKIAkJCQkJICAgIldIRVJFIGRhdGFsbG93Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9 IC0yICIKIAkJCQkJICAgIk9SREVSIEJZIChkYXRuYW1lIDw+ICd0ZW1wbGF0ZTEnKSwgZGF0bmFt ZSIpOwogCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0g YXJjaE51bGwgJiYgUFFudHVwbGVzKHJlcykgPiAwKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBE YXRhYmFzZXNcbi0tXG5cbiIpOwogCisJLyoKKwkgKiBJZiBkaXJlY3RvcnkvdGFyL2N1c3RvbSBm b3JtYXQgaXMgc3BlY2lmaWVkLCBjcmVhdGUgYSBzdWJkaXJlY3RvcnkKKwkgKiB1bmRlciB0aGUg bWFpbiBkaXJlY3RvcnkgYW5kIGVhY2ggZGF0YWJhc2UgZHVtcCBmaWxlIG9yIHN1YmRpcmVjdG9y eQorCSAqIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGF0IHN1YmRpcmVjdG9yeSBieSBwZ19kdW1wLgor CSAqLworICAgaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorICAgeworCSAgIGNoYXIg ICAgICAgIG1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKworCSAgIHNucHJpbnRmKGRiX3N1YmRp ciwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzIiwgZmlsZW5hbWUpOworCisJICAgLyogQ3JlYXRl IGEgc3ViZGlyZWN0b3J5IHdpdGggJ2RhdGFiYXNlcycgbmFtZSB1bmRlciBtYWluIGRpcmVjdG9y eS4gKi8KKwkgICBpZiAobWtkaXIoZGJfc3ViZGlyLCBwZ19kaXJfY3JlYXRlX21vZGUpICE9IDAp CisJCSAgIHBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwg ZGJfc3ViZGlyKTsKKworCSAgIHNucHJpbnRmKG1hcF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVz L21hcC5kYXQiLCBmaWxlbmFtZSk7CisKKwkgICAvKiBDcmVhdGUgYSBtYXAgZmlsZSAodG8gc3Rv cmUgZGJvaWQgYW5kIGRibmFtZSkgKi8KKwkgICBtYXBfZmlsZSA9IGZvcGVuKG1hcF9maWxlX3Bh dGgsIFBHX0JJTkFSWV9XKTsKKwkgICBpZiAoIW1hcF9maWxlKQorCQkgICBwZ19mYXRhbCgiY291 bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgbWFwX2ZpbGVfcGF0aCk7CisgICB9CisKIAlm b3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CiAJCWNoYXIJICAgKmRibmFt ZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAwKTsKIAkJY2hhcgkgICAqc2FuaXRpemVkOwotCQljb25z dCBjaGFyICpjcmVhdGVfb3B0czsKKwkJY2hhciAgICAgICAqb2lkID0gUFFnZXR2YWx1ZShyZXMs IGksIDEpOworCQljb25zdCBjaGFyICpjcmVhdGVfb3B0cyA9ICIiOwogCQlpbnQJCQlyZXQ7CiAK IAkJLyogU2tpcCB0ZW1wbGF0ZTAsIGV2ZW4gaWYgaXQncyBub3QgbWFya2VkICFkYXRhbGxvd2Nv bm4uICovCkBAIC0xNjUxLDEyICsxOTYwLDE1IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25u KQogCQkJY29udGludWU7CiAJCX0KIAotCQlwZ19sb2dfaW5mbygiZHVtcGluZyBkYXRhYmFzZSBc IiVzXCIiLCBkYm5hbWUpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlw Z19sb2dfaW5mbygiZHVtcGluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOwogCiAJCXNhbml0 aXplZCA9IHNhbml0aXplX2xpbmUoZGJuYW1lLCB0cnVlKTsKLQkJZnByaW50ZihPUEYsICItLVxu LS0gRGF0YWJhc2UgXCIlc1wiIGR1bXBcbi0tXG5cbiIsIHNhbml0aXplZCk7CiAJCWZyZWUoc2Fu aXRpemVkKTsKIAorCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRm KE9QRiwgIi0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxuLS1cblxuIiwgc2FuaXRpemVkKTsK KwogCQkvKgogCQkgKiBXZSBhc3N1bWUgdGhhdCAidGVtcGxhdGUxIiBhbmQgInBvc3RncmVzIiBh bHJlYWR5IGV4aXN0IGluIHRoZQogCQkgKiB0YXJnZXQgaW5zdGFsbGF0aW9uLiAgZHJvcERCcygp IHdvbid0IGhhdmUgcmVtb3ZlZCB0aGVtLCBmb3IgZmVhcgpAQCAtMTY2OSwyNCArMTk4MSwzOCBA QCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJewogCQkJaWYgKG91dHB1dF9jbGVhbikK IAkJCQljcmVhdGVfb3B0cyA9ICItLWNsZWFuIC0tY3JlYXRlIjsKLQkJCWVsc2UKLQkJCXsKLQkJ CQljcmVhdGVfb3B0cyA9ICIiOwotCQkJCS8qIFNpbmNlIHBnX2R1bXAgd29uJ3QgZW1pdCBhIFxj b25uZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8KKwkJCS8qIFNpbmNlIHBnX2R1bXAgd29uJ3QgZW1p dCBhIFxjb25uZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8KKwkJCWVsc2UgaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQogCQkJCWZwcmludGYoT1BGLCAiXFxjb25uZWN0ICVzXG5cbiIsIGRi bmFtZSk7Ci0JCQl9CiAJCX0KIAkJZWxzZQogCQkJY3JlYXRlX29wdHMgPSAiLS1jcmVhdGUiOwog Ci0JCWlmIChmaWxlbmFtZSkKKwkJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKQogCQkJZmNsb3NlKE9QRik7CiAKLQkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3Jl YXRlX29wdHMpOworCQkvKgorCQkgKiBJZiB0aGlzIGlzIG5vdCBhIHBsYWluIGZvcm1hdCBkdW1w LCB0aGVuIGFwcGVuZCBkYm9pZCBhbmQgZGJuYW1lIHRvCisJCSAqIHRoZSBtYXAuZGF0IGZpbGUu CisJCSAqLworCQlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJCXsKKwkJCWlmIChh cmNoRHVtcEZvcm1hdCA9PSBhcmNoQ3VzdG9tKQorCQkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1B WFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIuZG1wIiwgZGJfc3ViZGlyLCBvaWQpOworCQkJZWxzZSBp ZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaFRhcikKKwkJCQlzbnByaW50ZihkYmZpbGVwYXRoLCBN QVhQR1BBVEgsICJcIiVzXCIvXCIlc1wiLnRhciIsIGRiX3N1YmRpciwgb2lkKTsKKwkJCWVsc2UK KwkJCQlzbnByaW50ZihkYmZpbGVwYXRoLCBNQVhQR1BBVEgsICJcIiVzXCIvXCIlc1wiIiwgZGJf c3ViZGlyLCBvaWQpOworCisJCQkvKiBQdXQgb25lIGxpbmUgZW50cnkgZm9yIGRib2lkIGFuZCBk Ym5hbWUgaW4gbWFwIGZpbGUuICovCisJCQlmcHJpbnRmKG1hcF9maWxlLCAiJXMgJXNcbiIsIG9p ZCwgZGJuYW1lKTsKKwkJfQorCisJCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9vcHRz LCBkYmZpbGVwYXRoLCBhcmNoRHVtcEZvcm1hdCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBnX2Zh dGFsKCJwZ19kdW1wIGZhaWxlZCBvbiBkYXRhYmFzZSBcIiVzXCIsIGV4aXRpbmciLCBkYm5hbWUp OwogCi0JCWlmIChmaWxlbmFtZSkKKwkJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hOdWxsKQogCQl7CiAJCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX0EpOwog CQkJaWYgKCFPUEYpCkBAIC0xNjk1LDYgKzIwMjEsMTAgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4g KmNvbm4pCiAJCX0KIAl9CiAKKwkvKiBDbG9zZSBtYXAgZmlsZSAqLworCWlmIChhcmNoRHVtcEZv cm1hdCAhPSBhcmNoTnVsbCkKKwkJZmNsb3NlKG1hcF9maWxlKTsKKwogCVBRY2xlYXIocmVzKTsK IH0KIApAQCAtMTcwNCw3ICsyMDM0LDggQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAg KiBSdW4gcGdfZHVtcCBvbiBkYm5hbWUsIHdpdGggc3BlY2lmaWVkIG9wdGlvbnMuCiAgKi8KIHN0 YXRpYyBpbnQKLXJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0 ZV9vcHRzKQorcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRl X29wdHMsIGNoYXIgKmRiZmlsZSwKKwkJICBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQog ewogCVBRRXhwQnVmZmVyRGF0YSBjb25uc3RyYnVmOwogCVBRRXhwQnVmZmVyRGF0YSBjbWQ7CkBA IC0xNzEzLDE3ICsyMDQ0LDM2IEBAIHJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0 IGNoYXIgKmNyZWF0ZV9vcHRzKQogCWluaXRQUUV4cEJ1ZmZlcigmY29ubnN0cmJ1Zik7CiAJaW5p dFBRRXhwQnVmZmVyKCZjbWQpOwogCi0JcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAl cyAlcyIsIHBnX2R1bXBfYmluLAotCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRz KTsKLQogCS8qCi0JICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhlIHVuZG9jdW1lbnRl ZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAotCSAqIGZvcm1hdC4KKwkgKiBJZiB0aGlzIGlzIG5vdCBh IHBsYWluIGZvcm1hdCBkdW1wLCB0aGVuIGFwcGVuZCBmaWxlIG5hbWUgYW5kIGR1bXAKKwkgKiBm b3JtYXQgdG8gdGhlIHBnX2R1bXAgY29tbWFuZCB0byBnZXQgYXJjaGl2ZSBkdW1wLgogCSAqLwot CWlmIChmaWxlbmFtZSkKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJ aWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIo JmNtZCwgIlwiJXNcIiAtZiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBkYmZpbGUsIGNy ZWF0ZV9vcHRzKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaERpcmVjdG9yeSkKKwkJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWRpcmVjdG9yeSAiKTsKKwkJ ZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWN1c3RvbSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaFRhcikKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9y bWF0PXRhciAiKTsKKwl9CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1G cCAiKTsKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19k dW1wX2JpbiwKKwkJCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRlX29wdHMpOworCisJCS8q CisJCSAqIElmIHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4t YXBwZW5kIHBnX2R1bXAKKwkJICogZm9ybWF0LgorCQkgKi8KKwkJaWYgKGZpbGVuYW1lKQorCQkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJCWVsc2UKKwkJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCX0KIAogCS8qCiAJICogQXBwZW5kIHRoZSBk YXRhYmFzZSBuYW1lIHRvIHRoZSBhbHJlYWR5LWNvbnN0cnVjdGVkIHN0ZW0gb2YgY29ubmVjdGlv bgpAQCAtMTg2OCwzICsyMjE4LDQyIEBAIHJlYWRfZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNoYXIg KmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuKQogCiAJZmlsdGVyX2ZyZWUoJmZz dGF0ZSk7CiB9CisKKy8qCisgKiBwYXJzZUR1bXBGb3JtYXQKKyAqCisgKiBUaGlzIHdpbGwgdmFs aWRhdGUgZHVtcCBmb3JtYXRzLgorICovCitzdGF0aWMgQXJjaGl2ZUZvcm1hdAorcGFyc2VEdW1w Rm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCkKK3sKKwlBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9y bWF0OworCisJaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiYyIpID09IDApCisJCWFyY2hEdW1w Rm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImN1 c3RvbSIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChw Z19zdHJjYXNlY21wKGZvcm1hdCwgImQiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hE aXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkaXJlY3RvcnkiKSA9 PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3Ry Y2FzZWNtcChmb3JtYXQsICJwIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsK KwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInBsYWluIikgPT0gMCkKKwkJYXJjaER1 bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInQi KSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZSBpZiAocGdfc3RyY2Fz ZWNtcChmb3JtYXQsICJ0YXIiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJ ZWxzZQorCQlwZ19mYXRhbCgidW5yZWNvZ25pemVkIG91dHB1dCBmb3JtYXQgXCIlc1wiOyBwbGVh c2Ugc3BlY2lmeSBcImNcIiwgXCJkXCIsIFwicFwiLCBvciBcInRcIiIsCisJCQkJIGZvcm1hdCk7 CisKKwlyZXR1cm4gYXJjaER1bXBGb3JtYXQ7Cit9CisKK3N0YXRpYyBpbnQKK2NyZWF0ZUR1bXBJ ZExvY2FsKHZvaWQpCit7CisJcmV0dXJuICsrZHVtcElkVmFsOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMK aW5kZXggYzk3NzYzMDZjNWMuLjEzMzRkNGZkYzFlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfcmVzdG9yZS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKQEAgLTIs NyArMiw3IEBACiAgKgogICogcGdfcmVzdG9yZS5jCiAgKglwZ19yZXN0b3JlIGlzIGFuIHV0aWxp dHkgZXh0cmFjdGluZyBwb3N0Z3JlcyBkYXRhYmFzZSBkZWZpbml0aW9ucwotICoJZnJvbSBhIGJh Y2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcCB1c2luZyB0aGUgYXJjaGl2ZXIKKyAqCWZy b20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAvcGdfZHVtcGFsbCB1c2luZyB0 aGUgYXJjaGl2ZXIKICAqCWludGVyZmFjZS4KICAqCiAgKglwZ19yZXN0b3JlIHdpbGwgcmVhZCB0 aGUgYmFja3VwIGFyY2hpdmUgYW5kCkBAIC00MSwzMSArNDEsNjAgQEAKICNpbmNsdWRlICJwb3N0 Z3Jlc19mZS5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgog I2lmZGVmIEhBVkVfVEVSTUlPU19ICiAjaW5jbHVkZSA8dGVybWlvcy5oPgogI2VuZGlmCiAKKyNp bmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29ubmVjdGRiLmgiCiAjaW5jbHVk ZSAiZHVtcHV0aWxzLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmgiCisjaW5j bHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAjaW5j bHVkZSAiZ2V0b3B0X2xvbmcuaCIKICNpbmNsdWRlICJwYXJhbGxlbC5oIgogI2luY2x1ZGUgInBn X2JhY2t1cF91dGlscy5oIgogCisKIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2du YW1lKTsKIHN0YXRpYyB2b2lkIHJlYWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVu YW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0cyk7CitzdGF0aWMgYm9vbCBmaWxlX2V4aXN0c19pbl9k aXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CitzdGF0aWMg aW50CXJlc3RvcmVfb25lX2RhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3Rv cmVPcHRpb25zICpvcHRzLAorCQkJCQkJCQkgaW50IG51bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2Rh dGEsIGludCBudW0sCisJCQkJCQkJCSBib29sIGdsb2JhbHNfb25seSk7CitzdGF0aWMgaW50IHJl c3RvcmVfZ2xvYmFsX29iamVjdHMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9w dGlvbnMgKm9wdHMsCisJCWludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBpbnQgbnVt LCBib29sIGdsb2JhbHNfb25seSk7CitzdGF0aWMgaW50CXJlc3RvcmVfYWxsX2RhdGFiYXNlcyhj b25zdCBjaGFyICppbnB1dEZpbGVTcGVjLAorCQkJCQkJCQkgIFNpbXBsZVN0cmluZ0xpc3QgZGJf ZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsIGludCBudW1Xb3JrZXJzKTsK K3N0YXRpYyBpbnQJZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJ CQkJCQkJCQlTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJCQkJU2ltcGxl U3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKTsKK3N0YXRpYyBpbnQJZ2V0X2RibmFtZV9v aWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCQkJCSAg IFNpbXBsZVB0ckxpc3QgKmRibmFtZV9vaWRfbGlzdCk7CisKKy8qCisgKiBTdG9yZXMgYSBkYXRh YmFzZSBPSUQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG5hbWUuCisgKi8KK3R5cGVkZWYgc3RydWN0 IERiT2lkTmFtZQoreworCU9pZAkJCW9pZDsKKwljaGFyCQlzdHJbRkxFWElCTEVfQVJSQVlfTUVN QkVSXTsgLyogbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBoZXJlICovCit9IERiT2lkTmFtZTsKKwog CiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCVJlc3RvcmVPcHRpb25zICpv cHRzOwogCWludAkJCWM7Ci0JaW50CQkJZXhpdF9jb2RlOwogCWludAkJCW51bVdvcmtlcnMgPSAx OwotCUFyY2hpdmUgICAgKkFIOwogCWNoYXIJICAgKmlucHV0RmlsZVNwZWM7CiAJYm9vbAkJZGF0 YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJc2NoZW1hX29ubHkgPSBmYWxzZTsKKwlpbnQJCQluX2Vy cm9ycyA9IDA7CisJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CisJU2ltcGxlU3RyaW5nTGlz dCBkYl9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9OwogCXN0YXRpYyBpbnQJZGlzYWJs ZV90cmlnZ2VycyA9IDA7CiAJc3RhdGljIGludAllbmFibGVfcm93X3NlY3VyaXR5ID0gMDsKIAlz dGF0aWMgaW50CWlmX2V4aXN0cyA9IDA7CkBAIC04OSw2ICsxMTgsNyBAQCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKIAkJeyJjbGVhbiIsIDAsIE5VTEwsICdjJ30sCiAJCXsiY3JlYXRlIiwg MCwgTlVMTCwgJ0MnfSwKIAkJeyJkYXRhLW9ubHkiLCAwLCBOVUxMLCAnYSd9LAorCQl7Imdsb2Jh bHMtb25seSIsIDAsIE5VTEwsICdnJ30sCiAJCXsiZGJuYW1lIiwgMSwgTlVMTCwgJ2QnfSwKIAkJ eyJleGl0LW9uLWVycm9yIiwgMCwgTlVMTCwgJ2UnfSwKIAkJeyJleGNsdWRlLXNjaGVtYSIsIDEs IE5VTEwsICdOJ30sCkBAIC0xNDIsNiArMTcyLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCiAJCXsic3RhdGlzdGljcy1vbmx5Iiwgbm9fYXJndW1lbnQsICZzdGF0aXN0aWNzX29ubHks IDF9LAogCQl7ImZpbHRlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0fSwKIAkJeyJyZXN0 cmljdC1rZXkiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNn0sCisJCXsiZXhjbHVkZS1kYXRh YmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA3fSwKIAogCQl7TlVMTCwgMCwgTlVMTCwg MH0KIAl9OwpAQCAtMTcwLDcgKzIwMSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog CQl9CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6 RjpoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAorCXdoaWxlICgoYyA9IGdldG9w dF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6Z2g6STpqOmxMOm46TjpPcDpQOlJzUzp0OlQ6 VTp2d1d4MSIsCiAJCQkJCQkJY21kb3B0cywgTlVMTCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChj KQpAQCAtMTk3LDExICsyMjgsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJ aWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJCQkJCW9wdHMtPmZvcm1hdE5hbWUgPSBwZ19zdHJk dXAob3B0YXJnKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCS8qIHJlc3RvcmUgb25s eSBnbG9iYWwuZGF0IGZpbGUgZnJvbSBkaXJlY3RvcnkgKi8KKwkJCQlnbG9iYWxzX29ubHkgPSB0 cnVlOworCQkJCWJyZWFrOwogCQkJY2FzZSAnaCc6CiAJCQkJaWYgKHN0cmxlbihvcHRhcmcpICE9 IDApCiAJCQkJCW9wdHMtPmNwYXJhbXMucGdob3N0ID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJ YnJlYWs7Ci0KIAkJCWNhc2UgJ2onOgkJCS8qIG51bWJlciBvZiByZXN0b3JlIGpvYnMgKi8KIAkJ CQlpZiAoIW9wdGlvbl9wYXJzZV9pbnQob3B0YXJnLCAiLWovLS1qb2JzIiwgMSwKIAkJCQkJCQkJ CSAgUEdfTUFYX0pPQlMsCkBAIC0zMTYsNiArMzUwLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJCQkJCWV4aXQoMSk7CiAJCQkJb3B0cy0+ZXhpdF9vbl9lcnJvciA9IHRydWU7CiAJ CQkJYnJlYWs7CisJCQljYXNlIDc6CQkJCS8qIGRhdGFiYXNlIHBhdHRlcm5zIHRvIHNraXAgKi8K KwkJCQlzaW1wbGVfc3RyaW5nX2xpc3RfYXBwZW5kKCZkYl9leGNsdWRlX3BhdHRlcm5zLCBvcHRh cmcpOworCQkJCWJyZWFrOwogCiAJCQljYXNlIDY6CiAJCQkJb3B0cy0+cmVzdHJpY3Rfa2V5ID0g cGdfc3RyZHVwKG9wdGFyZyk7CkBAIC0zNDcsNiArMzg0LDEzIEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCWlmICghb3B0cy0+Y3BhcmFtcy5kYm5hbWUgJiYgIW9wdHMtPmZpbGVuYW1l ICYmICFvcHRzLT50b2NTdW1tYXJ5KQogCQlwZ19mYXRhbCgib25lIG9mIC1kLy0tZGJuYW1lIGFu ZCAtZi8tLWZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiKTsKIAorCWlmIChkYl9leGNsdWRlX3BhdHRl cm5zLmhlYWQgIT0gTlVMTCAmJiBnbG9iYWxzX29ubHkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9w dGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8t LWdsb2JhbHMtb25seSIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIg Zm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9 CisKIAkvKiBTaG91bGQgZ2V0IGF0IG1vc3Qgb25lIG9mIC1kIGFuZCAtZiwgZWxzZSB1c2VyIGlz IGNvbmZ1c2VkICovCiAJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQogCXsKQEAgLTQ3Miw2ICs1 MTYsMTExIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkgb3B0cy0+Zm9ybWF0 TmFtZSk7CiAJfQogCisJLyoKKwkgKiBJZiBtYXAuZGF0IGZpbGUgaXMgcHJlc2VudCwgdGhlbiBy ZXN0b3JlIGFsbCB0aGUKKwkgKiBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0ICwgYnV0IHNraXAgcmVz dG9yaW5nIHRob3NlIG1hdGNoaW5nCisJICogLS1leGNsdWRlLWRhdGFiYXNlIHBhdHRlcm5zLgor CSAqLworCWlmIChpbnB1dEZpbGVTcGVjICE9IE5VTEwgJiYKKwkJCShmaWxlX2V4aXN0c19pbl9k aXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgIm1hcC5kYXQiKSB8fAorCQkJIGZpbGVfZXhpc3RzX2lu X2RpcmVjdG9yeShpbnB1dEZpbGVTcGVjLCAidG9jLnRhciIpIHx8CisJCQkgZmlsZV9leGlzdHNf aW5fZGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MuZG1wIikpKQorCXsKKwkJY2hhciAgICAg ICAgZ2xvYmFsX3BhdGhbTUFYUEdQQVRIXTsKKworCQlpZiAoZmlsZV9leGlzdHNfaW5fZGlyZWN0 b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MudGFyIikpCisJCQlzbnByaW50ZihnbG9iYWxfcGF0aCwg TUFYUEdQQVRILCAiJXMvdG9jLnRhciIsIGlucHV0RmlsZVNwZWMpOworCQllbHNlIGlmIChmaWxl X2V4aXN0c19pbl9kaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgInRvYy5kbXAiKSkKKwkJCXNucHJp bnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcy90b2MuZG1wIiwgaW5wdXRGaWxlU3BlYyk7 CisJCWVsc2UKKwkJCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcyIsIGlucHV0 RmlsZVNwZWMpOworCisJCS8qCisJCSAqIENhbiBvbmx5IHVzZSAtLWxpc3Qgb3IgLS11c2UtbGlz dCBvcHRpb25zIHdpdGggYSBzaW5nbGUgZGF0YWJhc2UKKwkJICogZHVtcC4KKwkJICovCisJCWlm IChvcHRzLT50b2NTdW1tYXJ5KQorCQkJcGdfZmF0YWwoIm9wdGlvbiAtbC8tLWxpc3QgY2Fubm90 IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwi KTsKKwkJZWxzZSBpZiAob3B0cy0+dG9jRmlsZSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gLUwvLS11 c2UtbGlzdCBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQg YnkgcGdfZHVtcGFsbCIpOworCisJCS8qCisJCSAqIFRvIHJlc3RvcmUgZnJvbSBhIHBnX2R1bXBh bGwgYXJjaGl2ZSwgLUMgKGNyZWF0ZSBkYXRhYmFzZSkgb3B0aW9uCisJCSAqIG11c3QgYmUgc3Bl Y2lmaWVkIHVubGVzcyB3ZSBhcmUgb25seSByZXN0b3JpbmcgZ2xvYmFscy4KKwkJICovCisJCWlm ICghZ2xvYmFsc19vbmx5ICYmIG9wdHMtPmNyZWF0ZURCICE9IDEpCisJCXsKKwkJCXBnX2xvZ19l cnJvcigib3B0aW9uIC1DLy0tY3JlYXRlIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gcmVzdG9yaW5n IGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIik7CisJCQlwZ19sb2dfZXJyb3JfaGlu dCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOwor CQkJcGdfbG9nX2Vycm9yX2hpbnQoIkluZGl2aWR1YWwgZGF0YWJhc2VzIGNhbiBiZSByZXN0b3Jl ZCB1c2luZyB0aGVpciBzcGVjaWZpYyBhcmNoaXZlcy4iKTsKKwkJCWV4aXRfbmljZWx5KDEpOwor CQl9CisKKwkJLyogSWYgZ2xvYmFscy1vbmx5LCB0aGVuIHJldHVybiBmcm9tIGhlcmUuICovCisJ CWlmIChnbG9iYWxzX29ubHkpCisJCXsKKwkJCW5fZXJyb3JzID0gcmVzdG9yZV9nbG9iYWxfb2Jq ZWN0cyhnbG9iYWxfcGF0aCwgb3B0cywgbnVtV29ya2VycywgZmFsc2UsIDAsIGdsb2JhbHNfb25s eSk7CisKKwkJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZSByZXN0b3Jpbmcgc2tpcHBlZCBiZWNhdXNl IG9wdGlvbiAtZy8tLWdsb2JhbHMtb25seSB3YXMgc3BlY2lmaWVkIik7CisJCX0KKwkJZWxzZQor CQl7CisJCQkvKiBOb3cgcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9tIG1hcC5kYXQgKi8K KwkJCW5fZXJyb3JzID0gcmVzdG9yZV9hbGxfZGF0YWJhc2VzKGlucHV0RmlsZVNwZWMsIGRiX2V4 Y2x1ZGVfcGF0dGVybnMsCisJCQkJCQkJCQkJCSBvcHRzLCBudW1Xb3JrZXJzKTsKKwkJfQorCisJ CS8qIEZyZWUgZGIgcGF0dGVybiBsaXN0LiAqLworCQlzaW1wbGVfc3RyaW5nX2xpc3RfZGVzdHJv eSgmZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisJfQorCWVsc2UJCQkJCQkvKiBwcm9jZXNzIGlmIG1h cC5kYXQgZmlsZSBkb2VzIG5vdCBleGlzdC4gKi8KKwl7CisJCWlmIChkYl9leGNsdWRlX3BhdHRl cm5zLmhlYWQgIT0gTlVMTCkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNl IGNhbiBiZSB1c2VkIG9ubHkgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBn X2R1bXBhbGwiKTsKKworCQlpZiAoZ2xvYmFsc19vbmx5KQorCQkJcGdfZmF0YWwoIm9wdGlvbiAt Zy8tLWdsb2JhbHMtb25seSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hp dmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIik7CisKKwkJbl9lcnJvcnMgPSByZXN0b3JlX29uZV9k YXRhYmFzZShpbnB1dEZpbGVTcGVjLCBvcHRzLCBudW1Xb3JrZXJzLCBmYWxzZSwgMCwgZ2xvYmFs c19vbmx5KTsKKwl9CisKKwkvKiBEb25lLCBwcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJv cnMgZHVyaW5nIHJlc3RvcmUuICovCisJaWYgKG5fZXJyb3JzKQorCXsKKwkJcGdfbG9nX3dhcm5p bmcoImVycm9ycyBpZ25vcmVkIG9uIHJlc3RvcmU6ICVkIiwgbl9lcnJvcnMpOworCQlyZXR1cm4g MTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJlc3RvcmVfZ2xvYmFsX29iamVjdHMK KyAqCisgKiBUaGlzIHJlc3RvcmUgYWxsIGdsb2JhbCBvYmplY3RzLgorICoKKyAqIElmIGdsb2Jh bHNfb25seSBpcyBzZXQsIHRoZW4gc2tpcCBEUk9QIERBVEFCQVNFIGNvbW1hbmRzIGZyb20gcmVz dG9yZS4KKyAqLworc3RhdGljIGludCByZXN0b3JlX2dsb2JhbF9vYmplY3RzKGNvbnN0IGNoYXIg KmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQlpbnQgbnVtV29ya2Vycywg Ym9vbCBhcHBlbmRfZGF0YSwgaW50IG51bSwgYm9vbCBnbG9iYWxzX29ubHkpCit7CisJcmV0dXJu IHJlc3RvcmVfb25lX2RhdGFiYXNlKGlucHV0RmlsZVNwZWMsIG9wdHMsIG51bVdvcmtlcnMsIGFw cGVuZF9kYXRhLCBudW0sIGdsb2JhbHNfb25seSk7Cit9CisKKy8qCisgKiByZXN0b3JlX29uZV9k YXRhYmFzZQorICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIG9uZSBkYXRhYmFzZSB1c2luZyB0b2Mu ZGF0IGZpbGUuCisgKgorICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVycm9ycyB3aGlsZSBkb2lu ZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50CityZXN0b3JlX29uZV9kYXRhYmFzZShjb25zdCBj aGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJCQkJIGludCBudW1X b3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBpbnQgbnVtLCBib29sIGdsb2JhbHNfb25seSkKK3sK KwlBcmNoaXZlICAgICpBSDsKKwlpbnQJCQluX2Vycm9yczsKKwogCUFIID0gT3BlbkFyY2hpdmUo aW5wdXRGaWxlU3BlYywgb3B0cy0+Zm9ybWF0KTsKIAogCVNldEFyY2hpdmVPcHRpb25zKEFILCBO VUxMLCBvcHRzKTsKQEAgLTQ3OSw5ICs2MjgsMTUgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCiAJLyoKIAkgKiBXZSBkb24ndCBoYXZlIGEgY29ubmVjdGlvbiB5ZXQgYnV0IHRoYXQgZG9l c24ndCBtYXR0ZXIuIFRoZSBjb25uZWN0aW9uCiAJICogaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCBh bmQgaWYgd2UgdGVybWluYXRlIHRocm91Z2ggZXhpdF9uaWNlbHkoKSB3aGlsZQotCSAqIGl0J3Mg c3RpbGwgTlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBqdXN0IGJlIGEgbm8tb3AuCisJ ICogaXQncyBzdGlsbCBOVUxMLCB0aGUgY2xlYW51cCBmdW5jdGlvbiB3aWxsIGp1c3QgYmUgYSBu by1vcC4gSWYgd2UgYXJlCisJICogcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcywgdGhlbiBv bmx5IHVwZGF0ZSBBWCBoYW5kbGUgZm9yIGNsZWFudXAgYXMKKwkgKiB0aGUgcHJldmlvdXMgZW50 cnkgd2FzIGFscmVhZHkgaW4gdGhlIGFycmF5IGFuZCB3ZSBoYWQgY2xvc2VkIHByZXZpb3VzCisJ ICogY29ubmVjdGlvbiwgc28gd2UgY2FuIHVzZSB0aGUgc2FtZSBhcnJheSBzbG90LgogCSAqLwot CW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CisJaWYgKCFhcHBlbmRfZGF0YSB8fCBudW0gPT0g MCkKKwkJb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKwllbHNlCisJCXJlcGxhY2Vfb25fZXhp dF9jbG9zZV9hcmNoaXZlKEFIKTsKIAogCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBob3cgbm9p c3kgdG8gYmUgKi8KIAlBSC0+dmVyYm9zZSA9IG9wdHMtPnZlcmJvc2U7CkBAIC01MDEsMjUgKzY1 NiwyMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAllbHNlCiAJewogCQlQcm9jZXNz QXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFIKTsKLQkJUmVzdG9yZUFyY2hpdmUoQUgpOworCQlSZXN0 b3JlQXJjaGl2ZShBSCwgYXBwZW5kX2RhdGEsIGdsb2JhbHNfb25seSk7CiAJfQogCi0JLyogZG9u ZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzICovCi0JaWYgKEFILT5uX2Vycm9y cykKLQkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIHJlc3RvcmU6ICVkIiwgQUgt Pm5fZXJyb3JzKTsKKwluX2Vycm9ycyA9IEFILT5uX2Vycm9yczsKIAogCS8qIEFIIG1heSBiZSBm cmVlZCBpbiBDbG9zZUFyY2hpdmU/ICovCi0JZXhpdF9jb2RlID0gQUgtPm5fZXJyb3JzID8gMSA6 IDA7Ci0KIAlDbG9zZUFyY2hpdmUoQUgpOwogCi0JcmV0dXJuIGV4aXRfY29kZTsKKwlyZXR1cm4g bl9lcnJvcnM7CiB9CiAKIHN0YXRpYyB2b2lkCiB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkK IHsKLQlwcmludGYoXygiJXMgcmVzdG9yZXMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGZyb20gYW4g YXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAuXG5cbiIpLCBwcm9nbmFtZSk7CisJcHJpbnRmKF8o IiVzIHJlc3RvcmVzIFBvc3RncmVTUUwgZGF0YWJhc2VzIGZyb20gYXJjaGl2ZXMgY3JlYXRlZCBi eSBwZ19kdW1wIG9yIHBnX2R1bXBhbGwuXG5cbiIpLCBwcm9nbmFtZSk7CiAJcHJpbnRmKF8oIlVz YWdlOlxuIikpOwogCXByaW50ZihfKCIgICVzIFtPUFRJT05dLi4uIFtGSUxFXVxuIiksIHByb2du YW1lKTsKIApAQCAtNTM3LDYgKzY4OCw3IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQog CXByaW50ZihfKCIgIC1jLCAtLWNsZWFuICAgICAgICAgICAgICAgICAgY2xlYW4gKGRyb3ApIGRh dGFiYXNlIG9iamVjdHMgYmVmb3JlIHJlY3JlYXRpbmdcbiIpKTsKIAlwcmludGYoXygiICAtQywg LS1jcmVhdGUgICAgICAgICAgICAgICAgIGNyZWF0ZSB0aGUgdGFyZ2V0IGRhdGFiYXNlXG4iKSk7 CiAJcHJpbnRmKF8oIiAgLWUsIC0tZXhpdC1vbi1lcnJvciAgICAgICAgICBleGl0IG9uIGVycm9y LCBkZWZhdWx0IGlzIHRvIGNvbnRpbnVlXG4iKSk7CisJcHJpbnRmKF8oIiAgLWcsIC0tZ2xvYmFs cy1vbmx5ICAgICAgICAgICByZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMsIG5vIGRhdGFiYXNl c1xuIikpOwogCXByaW50ZihfKCIgIC1JLCAtLWluZGV4PU5BTUUgICAgICAgICAgICAgcmVzdG9y ZSBuYW1lZCBpbmRleFxuIikpOwogCXByaW50ZihfKCIgIC1qLCAtLWpvYnM9TlVNICAgICAgICAg ICAgICAgdXNlIHRoaXMgbWFueSBwYXJhbGxlbCBqb2JzIHRvIHJlc3RvcmVcbiIpKTsKIAlwcmlu dGYoXygiICAtTCwgLS11c2UtbGlzdD1GSUxFTkFNRSAgICAgIHVzZSB0YWJsZSBvZiBjb250ZW50 cyBmcm9tIHRoaXMgZmlsZSBmb3JcbiIKQEAgLTU1Myw2ICs3MDUsNyBAQCB1c2FnZShjb25zdCBj aGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtMSwgLS1zaW5nbGUtdHJhbnNhY3Rpb24gICAg IHJlc3RvcmUgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiIpKTsKIAlwcmludGYoXygiICAtLWRp c2FibGUtdHJpZ2dlcnMgICAgICAgICAgIGRpc2FibGUgdHJpZ2dlcnMgZHVyaW5nIGRhdGEtb25s eSByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1lbmFibGUtcm93LXNlY3VyaXR5ICAgICAg ICBlbmFibGUgcm93IHNlY3VyaXR5XG4iKSk7CisJcHJpbnRmKF8oIiAgLS1leGNsdWRlLWRhdGFi YXNlPVBBVFRFUk4gICBkbyBub3QgcmVzdG9yZSB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlKHMpXG4i KSk7CiAJcHJpbnRmKF8oIiAgLS1maWx0ZXI9RklMRU5BTUUgICAgICAgICAgICByZXN0b3JlIG9y IHNraXAgb2JqZWN0cyBiYXNlZCBvbiBleHByZXNzaW9uc1xuIgogCQkJICIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW4gRklMRU5BTUVcbiIpKTsKIAlwcmludGYoXygiICAtLWlmLWV4 aXN0cyAgICAgICAgICAgICAgICAgIHVzZSBJRiBFWElTVFMgd2hlbiBkcm9wcGluZyBvYmplY3Rz XG4iKSk7CkBAIC01ODgsOCArNzQxLDggQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJ cHJpbnRmKF8oIiAgLS1yb2xlPVJPTEVOQU1FICAgICAgICAgIGRvIFNFVCBST0xFIGJlZm9yZSBy ZXN0b3JlXG4iKSk7CiAKIAlwcmludGYoXygiXG4iCi0JCQkgIlRoZSBvcHRpb25zIC1JLCAtbiwg LU4sIC1QLCAtdCwgLVQsIGFuZCAtLXNlY3Rpb24gY2FuIGJlIGNvbWJpbmVkIGFuZCBzcGVjaWZp ZWRcbiIKLQkJCSAibXVsdGlwbGUgdGltZXMgdG8gc2VsZWN0IG11bHRpcGxlIG9iamVjdHMuXG4i KSk7CisJCQkgIlRoZSBvcHRpb25zIC1JLCAtbiwgLU4sIC1QLCAtdCwgLVQsIC0tc2VjdGlvbiwg YW5kIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4gYmVcbiIKKwkJCSAiY29tYmluZWQgYW5kIHNwZWNp ZmllZCBtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsKIAlw cmludGYoXygiXG5JZiBubyBpbnB1dCBmaWxlIG5hbWUgaXMgc3VwcGxpZWQsIHRoZW4gc3RhbmRh cmQgaW5wdXQgaXMgdXNlZC5cblxuIikpOwogCXByaW50ZihfKCJSZXBvcnQgYnVncyB0byA8JXM+ LlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JUKTsKIAlwcmludGYoXygiJXMgaG9tZSBwYWdlOiA8JXM+ XG4iKSwgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VSTCk7CkBAIC02OTQsMyArODQ3LDQxNSBAQCBy ZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMg Km9wdHMpCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIGZpbGVfZXhpc3Rz X2luX2RpcmVjdG9yeQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmlsZSBleGlzdHMgaW4g dGhlIGdpdmVuIGRpcmVjdG9yeS4KKyAqLworc3RhdGljIGJvb2wKK2ZpbGVfZXhpc3RzX2luX2Rp cmVjdG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVj dCBzdGF0IHN0OworCWNoYXIJCWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNucHJpbnRmKGJ1Ziwg TUFYUEdQQVRILCAiJXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BBVEgpCisJCXBnX2Zh dGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsKKworCXJldHVybiAo c3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsKK30KKworLyoKKyAq IGdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZQorICoKKyAqIFRoaXMgd2lsbCBtYXJrIGZvciBz a2lwcGluZyBhbnkgZW50cmllcyBmcm9tIGRibmFtZV9vaWRfbGlzdCB0aGF0IHBhdHRlcm4gbWF0 Y2ggYW4KKyAqIGVudHJ5IGluIHRoZSBkYl9leGNsdWRlX3BhdHRlcm5zIGxpc3QuCisgKgorICog UmV0dXJucyB0aGUgbnVtYmVyIG9mIGRhdGFiYXNlIHRvIGJlIHJlc3RvcmVkLgorICoKKyAqLwor c3RhdGljIGludAorZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJ CQkJCQlTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJU2ltcGxlU3RyaW5n TGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKQoreworCWludAkJCWNvdW50X2RiID0gMDsKKwlQUUV4 cEJ1ZmZlciBxdWVyeTsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlxdWVyeSA9IGNyZWF0ZVBRRXhw QnVmZmVyKCk7CisKKwlpZiAoIWNvbm4gJiYgZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9IE5V TEwpCisJCXBnX2xvZ19pbmZvKCJjb25zaWRlcmluZyBQQVRURVJOIGFzIE5BTUUgZm9yIC0tZXhj bHVkZS1kYXRhYmFzZSBvcHRpb24gYXMgbm8gZGF0YWJhc2UgY29ubmVjdGlvbiB3aGlsZSBkb2lu ZyBwZ19yZXN0b3JlIik7CisKKwkvKgorCSAqIFByb2Nlc3Mgb25lIGJ5IG9uZSBhbGwgZGJuYW1l cyBhbmQgaWYgc3BlY2lmaWVkIHRvIHNraXAgcmVzdG9yaW5nLCB0aGVuCisJICogcmVtb3ZlIGRi bmFtZSBmcm9tIGxpc3QuCisJICovCisJZm9yIChTaW1wbGVQdHJMaXN0Q2VsbCAqZGJfY2VsbCA9 IGRibmFtZV9vaWRfbGlzdC0+aGVhZDsKKwkJIGRiX2NlbGw7IGRiX2NlbGwgPSBkYl9jZWxsLT5u ZXh0KQorCXsKKwkJRGJPaWROYW1lICAqZGJpZG5hbWUgPSAoRGJPaWROYW1lICopIGRiX2NlbGwt PnB0cjsKKwkJYm9vbAkJc2tpcF9kYl9yZXN0b3JlID0gZmFsc2U7CisJCVBRRXhwQnVmZmVyIGRi X2xpdCA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJYXBwZW5kU3RyaW5nTGl0ZXJhbENvbm4o ZGJfbGl0LCBkYmlkbmFtZS0+c3RyLCBjb25uKTsKKworCQlmb3IgKFNpbXBsZVN0cmluZ0xpc3RD ZWxsICpwYXRfY2VsbCA9IGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZDsgcGF0X2NlbGw7IHBhdF9j ZWxsID0gcGF0X2NlbGwtPm5leHQpCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBpcyBhbiBl eGFjdCBtYXRjaCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gdHJ5IGEgcGF0dGVybgorCQkJICogbWF0 Y2gKKwkJCSAqLworCQkJaWYgKHBnX3N0cmNhc2VjbXAoZGJpZG5hbWUtPnN0ciwgcGF0X2NlbGwt PnZhbCkgPT0gMCkKKwkJCQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVlOworCQkJLyogT3RoZXJ3aXNl LCB0cnkgYSBwYXR0ZXJuIG1hdGNoIGlmIHRoZXJlIGlzIGEgY29ubmVjdGlvbiAqLworCQkJZWxz ZSBpZiAoY29ubikKKwkJCXsKKwkJCQlpbnQJCQlkb3RjbnQ7CisKKwkJCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihxdWVyeSwgIlNFTEVDVCAxICIpOworCQkJCXByb2Nlc3NTUUxOYW1lUGF0dGVybihj b25uLCBxdWVyeSwgcGF0X2NlbGwtPnZhbCwgZmFsc2UsCisJCQkJCQkJCQkgIGZhbHNlLCBOVUxM LCBkYl9saXQtPmRhdGEsCisJCQkJCQkJCQkgIE5VTEwsIE5VTEwsIE5VTEwsICZkb3RjbnQpOwor CisJCQkJaWYgKGRvdGNudCA+IDApCisJCQkJeworCQkJCQlwZ19sb2dfZXJyb3IoImltcHJvcGVy IHF1YWxpZmllZCBuYW1lICh0b28gbWFueSBkb3R0ZWQgbmFtZXMpOiAlcyIsCisJCQkJCQkJCSBk YmlkbmFtZS0+c3RyKTsKKwkJCQkJUFFmaW5pc2goY29ubik7CisJCQkJCWV4aXRfbmljZWx5KDEp OworCQkJCX0KKworCQkJCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVyeS0+ZGF0YSk7CisK KwkJCQlpZiAoKFBRcmVzdWx0U3RhdHVzKHJlcykgPT0gUEdSRVNfVFVQTEVTX09LKSAmJiBQUW50 dXBsZXMocmVzKSkKKwkJCQl7CisJCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQkJCXBn X2xvZ19pbmZvKCJkYXRhYmFzZSBuYW1lIFwiJXNcIiBtYXRjaGVzIGV4Y2x1ZGUgcGF0dGVybiBc IiVzXCIiLCBkYmlkbmFtZS0+c3RyLCBwYXRfY2VsbC0+dmFsKTsKKwkJCQl9CisKKwkJCQlQUWNs ZWFyKHJlcyk7CisJCQkJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CisJCQl9CisKKwkJCWlmIChz a2lwX2RiX3Jlc3RvcmUpCisJCQkJYnJlYWs7CisJCX0KKworCQlkZXN0cm95UFFFeHBCdWZmZXIo ZGJfbGl0KTsKKworCQkvKgorCQkgKiBNYXJrIGRiIHRvIGJlIHNraXBwZWQgb3IgaW5jcmVtZW50 IHRoZSBjb3VudGVyIG9mIGRicyB0byBiZQorCQkgKiByZXN0b3JlZAorCQkgKi8KKwkJaWYgKHNr aXBfZGJfcmVzdG9yZSkKKwkJeworCQkJcGdfbG9nX2luZm8oImV4Y2x1ZGluZyBkYXRhYmFzZSBc IiVzXCIiLCBkYmlkbmFtZS0+c3RyKTsKKwkJCWRiaWRuYW1lLT5vaWQgPSBJbnZhbGlkT2lkOwor CQl9CisJCWVsc2UKKwkJeworCQkJY291bnRfZGIrKzsKKwkJfQorCX0KKworCWRlc3Ryb3lQUUV4 cEJ1ZmZlcihxdWVyeSk7CisKKwlyZXR1cm4gY291bnRfZGI7Cit9CisKKy8qCisgKiBnZXRfZGJu YW1lX29pZF9saXN0X2Zyb21fbWZpbGUKKyAqCisgKiBPcGVuIG1hcC5kYXQgZmlsZSBhbmQgcmVh ZCBsaW5lIGJ5IGxpbmUgYW5kIHRoZW4gcHJlcGFyZSBhIGxpc3Qgb2YgZGF0YWJhc2UKKyAqIG5h bWVzIGFuZCBjb3JyZXNwb25kaW5nIGRiX29pZC4KKyAqCisgKiBSZXR1cm5zLCB0b3RhbCBudW1i ZXIgb2YgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxlLgorICovCitzdGF0aWMgaW50Citn ZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsIFNp bXBsZVB0ckxpc3QgKmRibmFtZV9vaWRfbGlzdCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBsaW5lYnVm OworCUZJTEUJICAgKnBmaWxlOworCWNoYXIJCW1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwlp bnQJCQljb3VudCA9IDA7CisKKworCS8qCisJICogSWYgdGhlcmUgaXMgb25seSBnbG9iYWwuZGF0 IGZpbGUgaW4gZHVtcCwgdGhlbiByZXR1cm4gZnJvbSBoZXJlIGFzCisJICogdGhlcmUgaXMgbm8g ZGF0YWJhc2UgdG8gcmVzdG9yZS4KKwkgKi8KKwlpZiAoIWZpbGVfZXhpc3RzX2luX2RpcmVjdG9y eShkdW1wZGlycGF0aCwgIm1hcC5kYXQiKSkKKwl7CisJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZSBy ZXN0b3JpbmcgaXMgc2tpcHBlZCBiZWNhdXNlIGZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IGlu IGRpcmVjdG9yeSBcIiVzXCIiLCAibWFwLmRhdCIsIGR1bXBkaXJwYXRoKTsKKwkJcmV0dXJuIDA7 CisJfQorCisJc25wcmludGYobWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIs IGR1bXBkaXJwYXRoKTsKKworCS8qIE9wZW4gbWFwLmRhdCBmaWxlLiAqLworCXBmaWxlID0gZm9w ZW4obWFwX2ZpbGVfcGF0aCwgUEdfQklOQVJZX1IpOworCisJaWYgKHBmaWxlID09IE5VTEwpCisJ CXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBtYXBfZmlsZV9wYXRo KTsKKworCWluaXRTdHJpbmdJbmZvKCZsaW5lYnVmKTsKKworCS8qIEFwcGVuZCBhbGwgdGhlIGRi bmFtZS9kYl9vaWQgY29tYmluYXRpb25zIHRvIHRoZSBsaXN0LiAqLworCXdoaWxlIChwZ19nZXRf bGluZV9idWYocGZpbGUsICZsaW5lYnVmKSkKKwl7CisJCU9pZAkJCWRiX29pZCA9IEludmFsaWRP aWQ7CisJCWNoYXIJICAgKmRibmFtZTsKKwkJRGJPaWROYW1lICAqZGJpZG5hbWU7CisJCWludAkJ CW5hbWVsZW47CisJCWNoYXIJICAgKnAgPSBsaW5lYnVmLmRhdGE7CisKKwkJLyogRXh0cmFjdCBk Ym9pZC4gKi8KKwkJd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpICpwKSkKKwkJCXArKzsK KwkJaWYgKHAgPiBsaW5lYnVmLmRhdGEgJiYgKnAgPT0gJyAnKQorCQl7CisJCQlzc2NhbmYobGlu ZWJ1Zi5kYXRhLCAiJXUiLCAmZGJfb2lkKTsKKwkJCXArKzsKKwkJfQorCisJCS8qIGRibmFtZSBp cyB0aGUgcmVzdCBvZiB0aGUgbGluZSAqLworCQlkYm5hbWUgPSBwOworCQluYW1lbGVuID0gc3Ry bGVuKGRibmFtZSk7CisKKwkJLyogUmVwb3J0IGVycm9yIGFuZCBleGl0IGlmIHRoZSBmaWxlIGhh cyBhbnkgY29ycnVwdGVkIGRhdGEuICovCisJCWlmICghT2lkSXNWYWxpZChkYl9vaWQpIHx8IG5h bWVsZW4gPD0gMSkKKwkJCXBnX2ZhdGFsKCJpbnZhbGlkIGVudHJ5IGluIGZpbGUgXCIlc1wiIG9u IGxpbmUgJWQiLCBtYXBfZmlsZV9wYXRoLAorCQkJCQkgY291bnQgKyAxKTsKKworCQlwZ19sb2df aW5mbygiZm91bmQgZGF0YWJhc2UgXCIlc1wiIChPSUQ6ICV1KSBpbiBmaWxlIFwiJXNcIiIsCisJ CQkJCWRibmFtZSwgZGJfb2lkLCBtYXBfZmlsZV9wYXRoKTsKKworCQlkYmlkbmFtZSA9IHBnX21h bGxvYyhvZmZzZXRvZihEYk9pZE5hbWUsIHN0cikgKyBuYW1lbGVuICsgMSk7CisJCWRiaWRuYW1l LT5vaWQgPSBkYl9vaWQ7CisJCXN0cmxjcHkoZGJpZG5hbWUtPnN0ciwgZGJuYW1lLCBuYW1lbGVu KTsKKworCQlzaW1wbGVfcHRyX2xpc3RfYXBwZW5kKGRibmFtZV9vaWRfbGlzdCwgZGJpZG5hbWUp OworCQljb3VudCsrOworCX0KKworCS8qIENsb3NlIG1hcC5kYXQgZmlsZS4gKi8KKwlmY2xvc2Uo cGZpbGUpOworCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogcmVzdG9yZV9hbGxfZGF0YWJh c2VzCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUgZGF0YWJhc2VzIHRob3NlIGR1bXBzIGFyZSBw cmVzZW50IGluCisgKiBkaXJlY3RvcnkgYmFzZWQgb24gbWFwLmRhdCBmaWxlIG1hcHBpbmcuCisg KgorICogVGhpcyB3aWxsIHNraXAgcmVzdG9yaW5nIGZvciBkYXRhYmFzZXMgdGhhdCBhcmUgc3Bl Y2lmaWVkIHdpdGgKKyAqIGV4Y2x1ZGUtZGF0YWJhc2Ugb3B0aW9uLgorICoKKyAqIHJldHVybnMs IG51bWJlciBvZiBlcnJvcnMgd2hpbGUgZG9pbmcgcmVzdG9yZS4KKyAqLworc3RhdGljIGludAor cmVzdG9yZV9hbGxfZGF0YWJhc2VzKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsCisJCQkJCSAg U2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zLCBSZXN0b3JlT3B0aW9ucyAqb3B0 cywKKwkJCQkJICBpbnQgbnVtV29ya2VycykKK3sKKwlTaW1wbGVQdHJMaXN0IGRibmFtZV9vaWRf bGlzdCA9IHtOVUxMLCBOVUxMfTsKKwlpbnQJCQludW1fZGJfcmVzdG9yZSA9IDA7CisJaW50CQkJ bnVtX3RvdGFsX2RiOworCWludAkJCW5fZXJyb3JzX3RvdGFsOworCWludAkJCWNvdW50ID0gMDsK KwljaGFyCSAgICpjb25uZWN0ZWRfZGIgPSBOVUxMOworCWJvb2wJCWR1bXBEYXRhID0gb3B0cy0+ ZHVtcERhdGE7CisJYm9vbAkJZHVtcFNjaGVtYSA9IG9wdHMtPmR1bXBTY2hlbWE7CisJYm9vbAkJ ZHVtcFN0YXRpc3RpY3MgPSBvcHRzLT5kdW1wU2NoZW1hOworCVBHY29ubiAqY29ubiA9IE5VTEw7 CisJY2hhcgkJZ2xvYmFsX3BhdGhbTUFYUEdQQVRIXTsKKworCS8qIEJhc2VkIG9uIGZpbGUsIHNl dCBwYXRoLiAqLworCWlmIChmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywg InRvYy50YXIiKSkKKwkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVzL3RvYy50 YXIiLCBpbnB1dEZpbGVTcGVjKTsKKwllbHNlIGlmIChmaWxlX2V4aXN0c19pbl9kaXJlY3Rvcnko aW5wdXRGaWxlU3BlYywgInRvYy5kbXAiKSkKKwkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBH UEFUSCwgIiVzL3RvYy5kbXAiLCBpbnB1dEZpbGVTcGVjKTsKKwllbHNlCisJCXNucHJpbnRmKGds b2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcyIsIGlucHV0RmlsZVNwZWMpOworCisJLyogU2F2ZSBk YiBuYW1lIHRvIHJldXNlIGl0IGZvciBhbGwgdGhlIGRhdGFiYXNlLiAqLworCWlmIChvcHRzLT5j cGFyYW1zLmRibmFtZSkKKwkJY29ubmVjdGVkX2RiID0gb3B0cy0+Y3BhcmFtcy5kYm5hbWU7CisK KwludW1fdG90YWxfZGIgPSBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoaW5wdXRGaWxl U3BlYywgJmRibmFtZV9vaWRfbGlzdCk7CisKKwkvKiBJZiBtYXAuZGF0IGhhcyBubyBlbnRyaWVz LCByZXR1cm4gYWZ0ZXIgcHJvY2Vzc2luZyBnbG9iYWwgY29tbWFuZHMuICovCisJaWYgKGRibmFt ZV9vaWRfbGlzdC5oZWFkID09IE5VTEwpCisJCXJldHVybiByZXN0b3JlX2dsb2JhbF9vYmplY3Rz KGdsb2JhbF9wYXRoLCBvcHRzLCBudW1Xb3JrZXJzLCBmYWxzZSwgMCwgZmFsc2UpOworCisJcGdf bG9nX2luZm8obmdldHRleHQoImZvdW5kICVkIGRhdGFiYXNlIG5hbWUgaW4gXCIlc1wiIiwKKwkJ CQkJCSAiZm91bmQgJWQgZGF0YWJhc2UgbmFtZXMgaW4gXCIlc1wiIiwKKwkJCQkJCSBudW1fdG90 YWxfZGIpLAorCQkJCW51bV90b3RhbF9kYiwgIm1hcC5kYXQiKTsKKworCS8qCisJICogSWYgZXhj bHVkZS1wYXR0ZXJucyBpcyBnaXZlbiwgdGhlbiBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZSB0byBw cm9jZXNzCisJICogaXQuCisJICovCisJaWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBO VUxMKQorCXsKKwkJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQorCQl7CisJCQljb25uID0gQ29u bmVjdERhdGFiYXNlKG9wdHMtPmNwYXJhbXMuZGJuYW1lLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBn aG9zdCwKKwkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUs IFRSSV9ERUZBVUxULAorCQkJCQlmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwpOworCisJCQlpZiAoIWNvbm4pCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRv IGRhdGFiYXNlIFwiJXNcIiIsIG9wdHMtPmNwYXJhbXMuZGJuYW1lKTsKKwkJfQorCisJCWlmICgh Y29ubikKKwkJeworCQkJcGdfbG9nX2luZm8oInRyeWluZyB0byBjb25uZWN0IHRvIGRhdGFiYXNl IFwiJXNcIiIsICJwb3N0Z3JlcyIpOworCisJCQljb25uID0gQ29ubmVjdERhdGFiYXNlKCJwb3N0 Z3JlcyIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQlvcHRzLT5jcGFyYW1zLnBn cG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCWZhbHNlLCBw cm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwkJCS8qIFRyeSB3aXRoIHRlbXBs YXRlMS4gKi8KKwkJCWlmICghY29ubikKKwkJCXsKKwkJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRv IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgInRlbXBsYXRlMSIpOworCisJCQkJY29ubiA9 IENvbm5lY3REYXRhYmFzZSgidGVtcGxhdGUxIiwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3Qs CisJCQkJCQlvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJ X0RFRkFVTFQsCisJCQkJCQlmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwp OworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBmaWx0ZXIgdGhlIGRiIGxpc3QgYWNjb3JkaW5n IHRvIHRoZSBleGNsdWRlIHBhdHRlcm5zCisJICovCisJbnVtX2RiX3Jlc3RvcmUgPSBnZXRfZGJu YW1lc19saXN0X3RvX3Jlc3RvcmUoY29ubiwgJmRibmFtZV9vaWRfbGlzdCwKKwkJCQkJCQkJCQkJ CSBkYl9leGNsdWRlX3BhdHRlcm5zKTsKKworCS8qIENsb3NlIHRoZSBkYiBjb25uZWN0aW9uIGFz IHdlIGFyZSBkb25lIHdpdGggZ2xvYmFscyBhbmQgcGF0dGVybnMuICovCisJaWYgKGNvbm4pCisJ CVBRZmluaXNoKGNvbm4pOworCisJLyogT3BlbiB0b2MuZGF0IGZpbGUgYW5kIGV4ZWN1dGUvYXBw ZW5kIGFsbCB0aGUgZ2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KKwluX2Vycm9yc190b3RhbCA9ICBy ZXN0b3JlX2dsb2JhbF9vYmplY3RzKGdsb2JhbF9wYXRoLCBvcHRzLCBudW1Xb3JrZXJzLCBmYWxz ZSwgMCwgZmFsc2UpOworCisJLyogRXhpdCBpZiBubyBkYiBuZWVkcyB0byBiZSByZXN0b3JlZC4g Ki8KKwlpZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0gTlVMTCB8fCBudW1fZGJfcmVzdG9yZSA9 PSAwKQorCXsKKwkJcGdfbG9nX2luZm8obmdldHRleHQoIm5vIGRhdGFiYXNlIG5lZWRzIHJlc3Rv cmluZyBvdXQgb2YgJWQgZGF0YWJhc2UiLAorCQkJCQkJCSAibm8gZGF0YWJhc2UgbmVlZHMgcmVz dG9yaW5nIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fdG90YWxfZGIpLAorCQkJCQludW1fdG90 YWxfZGIpOworCQlyZXR1cm4gbl9lcnJvcnNfdG90YWw7CisJfQorCisJcGdfbG9nX2luZm8oIm5l ZWQgdG8gcmVzdG9yZSAlZCBkYXRhYmFzZXMgb3V0IG9mICVkIGRhdGFiYXNlcyIsIG51bV9kYl9y ZXN0b3JlLCBudW1fdG90YWxfZGIpOworCisJLyoKKwkgKiBXZSBoYXZlIGEgbGlzdCBvZiBkYXRh YmFzZXMgdG8gcmVzdG9yZSBhZnRlciBwcm9jZXNzaW5nIHRoZQorCSAqIGV4Y2x1ZGUtZGF0YWJh c2Ugc3dpdGNoKGVzKS4gIE5vdyB3ZSBjYW4gcmVzdG9yZSB0aGVtIG9uZSBieSBvbmUuCisJICov CisJZm9yIChTaW1wbGVQdHJMaXN0Q2VsbCAqZGJfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC5oZWFk OworCQkgZGJfY2VsbDsgZGJfY2VsbCA9IGRiX2NlbGwtPm5leHQpCisJeworCQlEYk9pZE5hbWUg ICpkYmlkbmFtZSA9IChEYk9pZE5hbWUgKikgZGJfY2VsbC0+cHRyOworCQljaGFyCQlzdWJkaXJw YXRoW01BWFBHUEFUSF07CisJCWNoYXIJCXN1YmRpcmRicGF0aFtNQVhQR1BBVEhdOworCQljaGFy CQlkYmZpbGVuYW1lW01BWFBHUEFUSF07CisJCWludAkJCW5fZXJyb3JzOworCisJCS8qIGlnbm9y ZSBkYnMgbWFya2VkIGZvciBza2lwcGluZyAqLworCQlpZiAoZGJpZG5hbWUtPm9pZCA9PSBJbnZh bGlkT2lkKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byByZXNldCBvdmVy cmlkZV9kYm5hbWUgc28gdGhhdCBvYmplY3RzIGNhbiBiZSByZXN0b3JlZAorCQkgKiBpbnRvIGFu IGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZS4gKHVzZWQgd2l0aCAtZC8tLWRibmFtZSBvcHRpb24p CisJCSAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpCisJCXsKKwkJCXBm cmVlKG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lKTsKKwkJCW9wdHMtPmNwYXJhbXMub3Zl cnJpZGVfZGJuYW1lID0gTlVMTDsKKwkJfQorCisJCXNucHJpbnRmKHN1YmRpcmRicGF0aCwgTUFY UEdQQVRILCAiJXMvZGF0YWJhc2VzIiwgaW5wdXRGaWxlU3BlYyk7CisKKwkJLyoKKwkJICogTG9v ayBmb3IgdGhlIGRhdGFiYXNlIGR1bXAgZmlsZS9kaXIuIElmIHRoZXJlIGlzIGFuIHtvaWR9LnRh ciBvcgorCQkgKiB7b2lkfS5kbXAgZmlsZSwgdXNlIGl0LiBPdGhlcndpc2UgdHJ5IHRvIHVzZSBh IGRpcmVjdG9yeSBjYWxsZWQKKwkJICoge29pZH0KKwkJICovCisJCXNucHJpbnRmKGRiZmlsZW5h bWUsIE1BWFBHUEFUSCwgIiV1LnRhciIsIGRiaWRuYW1lLT5vaWQpOworCQlpZiAoZmlsZV9leGlz dHNfaW5fZGlyZWN0b3J5KHN1YmRpcmRicGF0aCwgZGJmaWxlbmFtZSkpCisJCQlzbnByaW50Zihz dWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUudGFyIiwgaW5wdXRGaWxlU3Bl YywgZGJpZG5hbWUtPm9pZCk7CisJCWVsc2UKKwkJeworCQkJc25wcmludGYoZGJmaWxlbmFtZSwg TUFYUEdQQVRILCAiJXUuZG1wIiwgZGJpZG5hbWUtPm9pZCk7CisKKwkJCWlmIChmaWxlX2V4aXN0 c19pbl9kaXJlY3Rvcnkoc3ViZGlyZGJwYXRoLCBkYmZpbGVuYW1lKSkKKwkJCQlzbnByaW50Zihz dWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUuZG1wIiwgaW5wdXRGaWxlU3Bl YywgZGJpZG5hbWUtPm9pZCk7CisJCQllbHNlCisJCQkJc25wcmludGYoc3ViZGlycGF0aCwgTUFY UEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1IiwgaW5wdXRGaWxlU3BlYywgZGJpZG5hbWUtPm9pZCk7 CisJCX0KKworCQlwZ19sb2dfaW5mbygicmVzdG9yaW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRiaWRu YW1lLT5zdHIpOworCisJCS8qIElmIGRhdGFiYXNlIGlzIGFscmVhZHkgY3JlYXRlZCwgdGhlbiBk b24ndCBzZXQgY3JlYXRlREIgZmxhZy4gKi8KKwkJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQor CQl7CisJCQlQR2Nvbm4JICAgKnRlc3RfY29ubjsKKworCQkJdGVzdF9jb25uID0gQ29ubmVjdERh dGFiYXNlKGRiaWRuYW1lLT5zdHIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJ CQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVG QVVMVCwKKwkJCQkJCQkJCQlmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwp OworCQkJaWYgKHRlc3RfY29ubikKKwkJCXsKKwkJCQlQUWZpbmlzaCh0ZXN0X2Nvbm4pOworCisJ CQkJLyogVXNlIGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZSBmb3IgY29ubmVjdGlvbi4gKi8KKwkJ CQlvcHRzLT5jcmVhdGVEQiA9IDA7CisJCQkJb3B0cy0+Y3BhcmFtcy5kYm5hbWUgPSBkYmlkbmFt ZS0+c3RyOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIHdlJ2xsIGhhdmUgdG8gY3JlYXRl IGl0ICovCisJCQkJb3B0cy0+Y3JlYXRlREIgPSAxOworCQkJCW9wdHMtPmNwYXJhbXMuZGJuYW1l ID0gY29ubmVjdGVkX2RiOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogUmVzZXQgZmxhZ3MgLSBt aWdodCBoYXZlIGJlZW4gcmVzZXQgaW4gcGdfYmFja3VwX2FyY2hpdmVyLmMgYnkgdGhlCisJCSAq IHByZXZpb3VzIHJlc3RvcmUuCisJCSAqLworCQlvcHRzLT5kdW1wRGF0YSA9IGR1bXBEYXRhOwor CQlvcHRzLT5kdW1wU2NoZW1hID0gZHVtcFNjaGVtYTsKKwkJb3B0cy0+ZHVtcFN0YXRpc3RpY3Mg PSBkdW1wU3RhdGlzdGljczsKKworCQkvKiBSZXN0b3JlIHRoZSBzaW5nbGUgZGF0YWJhc2UuICov CisJCW5fZXJyb3JzID0gcmVzdG9yZV9vbmVfZGF0YWJhc2Uoc3ViZGlycGF0aCwgb3B0cywgbnVt V29ya2VycywgdHJ1ZSwgMSwgZmFsc2UpOworCisJCS8qIFByaW50IGEgc3VtbWFyeSBvZiBpZ25v cmVkIGVycm9ycyBkdXJpbmcgc2luZ2xlIGRhdGFiYXNlIHJlc3RvcmUuICovCisJCWlmIChuX2Vy cm9ycykKKwkJeworCQkJbl9lcnJvcnNfdG90YWwgKz0gbl9lcnJvcnM7CisJCQlwZ19sb2dfd2Fy bmluZygiZXJyb3JzIGlnbm9yZWQgb24gZGF0YWJhc2UgXCIlc1wiIHJlc3RvcmU6ICVkIiwgZGJp ZG5hbWUtPnN0ciwgbl9lcnJvcnMpOworCQl9CisKKwkJY291bnQrKzsKKwl9CisKKwkvKiBMb2cg bnVtYmVyIG9mIHByb2Nlc3NlZCBkYXRhYmFzZXMuICovCisJcGdfbG9nX2luZm8oIm51bWJlciBv ZiByZXN0b3JlZCBkYXRhYmFzZXMgaXMgJWQiLCBudW1fZGJfcmVzdG9yZSk7CisKKwkvKiBGcmVl IGRibmFtZSBhbmQgZGJvaWQgbGlzdC4gKi8KKwlzaW1wbGVfcHRyX2xpc3RfZGVzdHJveSgmZGJu YW1lX29pZF9saXN0KTsKKworCXJldHVybiBuX2Vycm9yc190b3RhbDsKK30KZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9i YXNpYy5wbAppbmRleCAzN2Q4OTNkNWU2YS4uYzNjNWZhZTExZWEgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFz aWMucGwKQEAgLTIzNyw2ICsyMzcsMjQgQEAgY29tbWFuZF9mYWlsc19saWtlKAogCSdwZ19yZXN0 b3JlOiBvcHRpb25zIC1DXC8tLWNyZWF0ZSBhbmQgLTFcLy0tc2luZ2xlLXRyYW5zYWN0aW9uIGNh bm5vdCBiZSB1c2VkIHRvZ2V0aGVyJwogKTsKIAorY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3Bn X3Jlc3RvcmUnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScsICct ZCcsICd4eHgnIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tZXhjbHVkZS1k YXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nXC8tLWdsb2JhbHMtb25seVxF LywKKwkncGdfcmVzdG9yZTogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNl ZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5JworKTsKKworY29tbWFuZF9mYWlsc19s aWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctZCcsICd4 eHgnLCAnZHVtcGRpcicgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLS1leGNs dWRlLWRhdGFiYXNlIGNhbiBiZSB1c2VkIG9ubHkgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBj cmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFz ZSBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXAnCispOworCitjb21t YW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfcmVzdG9yZScsICctLWdsb2JhbHMtb25seScsICctZCcs ICd4eHgnLCAnZHVtcGRpcicgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLWdc Ly0tZ2xvYmFscy1vbmx5IGNhbiBiZSB1c2VkIG9ubHkgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2 ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gb3B0aW9uIC0tZ2xvYmFscy1vbmx5 IGlzIG5vdCB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXAnCispOworCiAj IGFsc28gZmFpbHMgZm9yIC1yIGFuZCAtdCwgYnV0IGl0IHNlZW1zIHBvaW50bGVzcyB0byBhZGQg bW9yZSB0ZXN0cyBmb3IgdGhvc2UuCiBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJWyAncGdfZHVtcGFs bCcsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy0tZ2xvYmFscy1vbmx5JyBdLApAQCAtMjQ0 LDQgKzI2Miw4IEBAIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAkncGdfZHVtcGFsbDogb3B0aW9uIC0t ZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFs cy1vbmx5JwogKTsKIAorY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2R1bXBhbGwnLCAnLS1m b3JtYXQnLCAneCcgXSwKKwlxci9cUXBnX2R1bXBhbGw6IGVycm9yOiB1bnJlY29nbml6ZWQgb3V0 cHV0IGZvcm1hdCAieCI7XEUvLAorCSdwZ19kdW1wYWxsOiB1bnJlY29nbml6ZWQgb3V0cHV0IGZv cm1hdCcpOwogZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8w MDZfcGdfZHVtcGFsbC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwNl9wZ19kdW1wYWxsLnBsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMjc0Yjc3NzU4NgotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwNl9wZ19kdW1wYWxsLnBsCkBAIC0wLDAg KzEsNDAwIEBACisjIENvcHlyaWdodCAoYykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdh bGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkdGVtcGRpciA9IFBvc3RncmVTUUw6 OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOworbXkgJHJ1bl9kYiA9ICdwb3N0Z3Jlcyc7CitteSAkc2Vw ID0gJHdpbmRvd3Nfb3MgPyAiXFwiIDogIi8iOworCisjIFRhYmxlc3BhY2UgbG9jYXRpb25zIHVz ZWQgYnkgInJlc3RvcmVfdGFibGVzcGFjZSIgdGVzdCBjYXNlLgorbXkgJHRhYmxlc3BhY2UxID0g IiR7dGVtcGRpcn0ke3NlcH10YmwxIjsKK215ICR0YWJsZXNwYWNlMiA9ICIke3RlbXBkaXJ9JHtz ZXB9dGJsMiI7Citta2RpcigkdGFibGVzcGFjZTEpIHx8IGRpZSAibWtkaXIgJHRhYmxlc3BhY2Ux ICQhIjsKK21rZGlyKCR0YWJsZXNwYWNlMikgfHwgZGllICJta2RpciAkdGFibGVzcGFjZTIgJCEi OworCisjIFNjYXBlIHRhYmxlc3BhY2UgbG9jYXRpb25zIG9uIFdpbmRvd3MuCiskdGFibGVzcGFj ZTEgPSAkd2luZG93c19vcyA/ICgkdGFibGVzcGFjZTEgPX4gcy9cXC9cXFxcL2dyKSA6ICR0YWJs ZXNwYWNlMTsKKyR0YWJsZXNwYWNlMiA9ICR3aW5kb3dzX29zID8gKCR0YWJsZXNwYWNlMiA9fiBz L1xcL1xcXFwvZ3IpIDogJHRhYmxlc3BhY2UyOworCisjIFdoZXJlIHBnX2R1bXBhbGwgd2lsbCBi ZSBleGVjdXRlZC4KK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdu b2RlJyk7Ciskbm9kZS0+aW5pdDsKKyRub2RlLT5zdGFydDsKKworCisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVmaW5p dGlvbiBvZiB0aGUgcGdfZHVtcGFsbCB0ZXN0IGNhc2VzIHRvIHJ1bi4KKyMKKyMgRWFjaCBvZiB0 aGVzZSB0ZXN0IGNhc2VzIGFyZSBuYW1lZCBhbmQgdGhvc2UgbmFtZXMgYXJlIHVzZWQgZm9yIGZh aWwKKyMgcmVwb3J0aW5nIGFuZCBhbHNvIHRvIHNhdmUgdGhlIGR1bXAgYW5kIHJlc3RvcmUgaW5m b3JtYXRpb24gbmVlZGVkIGZvciB0aGUKKyMgdGVzdCB0byBhc3NlcnQuCisjCisjIFRoZSAic2V0 dXBfc3FsIiBpcyBhIHBzcWwgdmFsaWQgc2NyaXB0IHRoYXQgY29udGFpbnMgU1FMIGNvbW1hbmRz IHRvIGV4ZWN1dGUKKyMgYmVmb3JlIG9mIGFjdHVhbGx5IGV4ZWN1dGUgdGhlIHRlc3RzLiBUaGUg c2V0dXBzIGFyZSBhbGwgZXhlY3V0ZWQgYmVmb3JlIG9mCisjIGFueSB0ZXN0IGV4ZWN1dGlvbi4K KyMKKyMgVGhlICJkdW1wX2NtZCIgYW5kICJyZXN0b3JlX2NtZCIgYXJlIHRoZSBjb21tYW5kcyB0 aGF0IHdpbGwgYmUgZXhlY3V0ZWQuIFRoZQorIyAicmVzdG9yZV9jbWQiIG11c3QgaGF2ZSB0aGUg LS1maWxlIGZsYWcgdG8gc2F2ZSB0aGUgcmVzdG9yZSBvdXRwdXQgc28gdGhhdCB3ZQorIyBjYW4g YXNzZXJ0IG9uIGl0LgorIworIyBUaGUgImxpa2UiIGFuZCAidW5saWtlIiBpcyBhIHJlZ2V4cCB0 aGF0IGlzIHVzZWQgdG8gbWF0Y2ggdGhlIHBnX3Jlc3RvcmUKKyMgb3V0cHV0LiBJdCBtdXN0IGhh dmUgYXQgbGVhc3Qgb25lIG9mIHRoZW4gZmlsbGVkIHBlciB0ZXN0IGNhc2VzIGJ1dCBpdCBhbHNv CisjIGNhbiBoYXZlIGJvdGguIFNlZSAiZXhjbHVkaW5nX2RhdGFiYXNlcyIgdGVzdCBjYXNlIGZv ciBleGFtcGxlLgorbXkgJXBnZHVtcGFsbF9ydW5zID0gKAorCXJlc3RvcmVfcm9sZXMgPT4gewor CQlzZXR1cF9zcWwgPT4gJworCQlDUkVBVEUgUk9MRSBkdW1wYWxsIFdJVEggRU5DUllQVEVEIFBB U1NXT1JEIFwnYWRtaW5cJyBTVVBFUlVTRVI7CisJCUNSRUFURSBST0xFIGR1bXBhbGwyIFdJVEgg UkVQTElDQVRJT04gQ09OTkVDVElPTiBMSU1JVCAxMDsnLAorCQlkdW1wX2NtZCA9PiBbCisJCQkn cGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScg PT4gIiR0ZW1wZGlyL3Jlc3RvcmVfcm9sZXMiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJ CQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJ Jy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfcm9sZXMuc3FsIiwKKwkJCSIkdGVtcGRpci9y ZXN0b3JlX3JvbGVzIiwKKwkJXSwKKwkJbGlrZSA9PiBxci8KKwkJCV5ccypcUUNSRUFURSBST0xF IGR1bXBhbGw7XEVccypcbgorCQkJXHMqXFFBTFRFUiBST0xFIGR1bXBhbGwgV0lUSCBTVVBFUlVT RVIgSU5IRVJJVCBOT0NSRUFURVJPTEUgTk9DUkVBVEVEQiBOT0xPR0lOIE5PUkVQTElDQVRJT04g Tk9CWVBBU1NSTFMgUEFTU1dPUkQgJ1NDUkFNLVNIQS0yNTZcRQorCQkJW14nXSsnO1xzKlxuCisJ CQlccypcUUNSRUFURSBST0xFIGR1bXBhbGwyO1xFCisJCQlccypcUUFMVEVSIFJPTEUgZHVtcGFs bDIgV0lUSCBOT1NVUEVSVVNFUiBJTkhFUklUIE5PQ1JFQVRFUk9MRSBOT0NSRUFURURCIE5PTE9H SU4gUkVQTElDQVRJT04gTk9CWVBBU1NSTFMgQ09OTkVDVElPTiBMSU1JVCAxMDtcRQorCQkveG0K Kwl9LAorCisJcmVzdG9yZV90YWJsZXNwYWNlID0+IHsKKwkJc2V0dXBfc3FsID0+ICIKKwkJQ1JF QVRFIFJPTEUgdGFwOworCQlDUkVBVEUgVEFCTEVTUEFDRSB0YmwxIE9XTkVSIHRhcCBMT0NBVElP TiAnJHRhYmxlc3BhY2UxJzsKKwkJQ1JFQVRFIFRBQkxFU1BBQ0UgdGJsMiBPV05FUiB0YXAgTE9D QVRJT04gJyR0YWJsZXNwYWNlMicgV0lUSCAoc2VxX3BhZ2VfY29zdD0xLjApOyIsCisJCWR1bXBf Y21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScs CisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV90YWJsZXNwYWNlIiwKKwkJXSwKKwkJ cmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9 PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3Bh Y2Uuc3FsIiwKKwkJCSIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2UiLAorCQldLAorCQkjIE1h dGNoICJFIiBhcyBvcHRpb25hbCBzaW5jZSBpdCBpcyBhZGRlZCBvbiBMT0NBVElPTiB3aGVuIHJ1 bm5pbmcgb24KKwkJIyBXaW5kb3dzLgorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgVEFC TEVTUEFDRSB0YmwxIE9XTkVSIHRhcCBMT0NBVElPTiBcRSg/OkUpP1xRJyR0YWJsZXNwYWNlMSc7 XEUKKwkJCVxuXFFDUkVBVEUgVEFCTEVTUEFDRSB0YmwyIE9XTkVSIHRhcCBMT0NBVElPTiBcRSg/ OkUpP1xRJyR0YWJsZXNwYWNlMic7XEUKKwkJCVxuXFFBTFRFUiBUQUJMRVNQQUNFIHRibDIgU0VU IChzZXFfcGFnZV9jb3N0PTEuMCk7XEUKKwkJL3htLAorCX0sCisKKwlyZXN0b3JlX2dyYW50cyA9 PiB7CisJCXNldHVwX3NxbCA9PiAiCisJCUNSRUFURSBEQVRBQkFTRSB0YXBncmFudHNkYjsKKwkJ Q1JFQVRFIFNDSEVNQSBwcml2YXRlOworCQlDUkVBVEUgU0VRVUVOQ0Ugc2VyaWFsIFNUQVJUIDEw MTsKKwkJQ1JFQVRFIEZVTkNUSU9OIGZuKCkgUkVUVVJOUyB2b2lkIEFTIFwkXCQKKwkJQkVHSU4K KwkJRU5EOworCQlcJFwkIExBTkdVQUdFIHBscGdzcWw7CisJCUNSRUFURSBST0xFIHN1cGVyOwor CQlDUkVBVEUgUk9MRSBncmFudDE7CisJCUNSRUFURSBST0xFIGdyYW50MjsKKwkJQ1JFQVRFIFJP TEUgZ3JhbnQzOworCQlDUkVBVEUgUk9MRSBncmFudDQ7CisJCUNSRUFURSBST0xFIGdyYW50NTsK KwkJQ1JFQVRFIFJPTEUgZ3JhbnQ2OworCQlDUkVBVEUgUk9MRSBncmFudDc7CisJCUNSRUFURSBS T0xFIGdyYW50ODsKKworCQlDUkVBVEUgVEFCTEUgdCAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8g dCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJCUdSQU5UIFNFTEVDVCBPTiBUQUJMRSB0 IFRPIGdyYW50MTsKKwkJR1JBTlQgSU5TRVJUIE9OIFRBQkxFIHQgVE8gZ3JhbnQyOworCQlHUkFO VCBBTEwgUFJJVklMRUdFUyBPTiBUQUJMRSB0IHRvIGdyYW50MzsKKwkJR1JBTlQgQ09OTkVDVCwg Q1JFQVRFIE9OIERBVEFCQVNFIHRhcGdyYW50c2RiIFRPIGdyYW50NDsKKwkJR1JBTlQgVVNBR0Us IENSRUFURSBPTiBTQ0hFTUEgcHJpdmF0ZSBUTyBncmFudDU7CisJCUdSQU5UIFVTQUdFLCBTRUxF Q1QsIFVQREFURSBPTiBTRVFVRU5DRSBzZXJpYWwgVE8gZ3JhbnQ2OworCQlHUkFOVCBzdXBlciBU TyBncmFudDc7CisJCUdSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gZm4oKSBUTyBncmFudDg7CisJ CSIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4g J2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMiLAor CQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1m b3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVf Z3JhbnRzLnNxbCIsCisJCQkiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMiLAorCQldLAorCQlsaWtl ID0+IHFyL14KKwkJCVxuXFFHUkFOVCBzdXBlciBUTyBncmFudDcgV0lUSCBJTkhFUklUIFRSVUUg R1JBTlRFRCBCWVxFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgQUxMIE9OIFNDSEVNQSBwcml2 YXRlIFRPIGdyYW50NTtcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIEFMTCBPTiBGVU5DVElP TiBwdWJsaWMuZm4oKSBUTyBncmFudDg7XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBBTEwg T04gU0VRVUVOQ0UgcHVibGljLnNlcmlhbCBUTyBncmFudDY7XEUKKwkJCSguKlxuKSoKKwkJCVxu XFFHUkFOVCBTRUxFQ1QgT04gVEFCTEUgcHVibGljLnQgVE8gZ3JhbnQxO1xFCisJCQlcblxRR1JB TlQgSU5TRVJUIE9OIFRBQkxFIHB1YmxpYy50IFRPIGdyYW50MjtcRQorCQkJXG5cUUdSQU5UIEFM TCBPTiBUQUJMRSBwdWJsaWMudCBUTyBncmFudDM7XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFO VCBDUkVBVEUsQ09OTkVDVCBPTiBEQVRBQkFTRSB0YXBncmFudHNkYiBUTyBncmFudDQ7XEUKKwkJ L3htLAorCX0sCisKKwlleGNsdWRpbmdfZGF0YWJhc2VzID0+IHsKKwkJc2V0dXBfc3FsID0+ICdD UkVBVEUgREFUQUJBU0UgZGIxOworCQlcYyBkYjEKKwkJQ1JFQVRFIFRBQkxFIHQxIChpZCBpbnQp OworCQlJTlNFUlQgSU5UTyB0MSBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUg VEFCTEUgdDIgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQyIFZBTFVFUyAoMSksICgyKSwgKDMp LCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRiMjsKKwkJXGMgZGIyCisJCUNSRUFURSBUQUJM RSB0MyAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDMgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0 KTsKKwkJQ1JFQVRFIFRBQkxFIHQ0IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0NCBWQUxVRVMg KDEpLCAoMiksICgzKSwgKDQpOworCisJCUNSRUFURSBEQVRBQkFTRSBkYmV4MzsKKwkJXGMgZGJl eDMKKwkJQ1JFQVRFIFRBQkxFIHQ1IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0NSBWQUxVRVMg KDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDYgKGlkIGludCk7CisJCUlOU0VS VCBJTlRPIHQ2IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNF IGRiZXg0OworCQlcYyBkYmV4NAorCQlDUkVBVEUgVEFCTEUgdDcgKGlkIGludCk7CisJCUlOU0VS VCBJTlRPIHQ3IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0OCAo aWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDggVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwor CQlDUkVBVEUgREFUQUJBU0UgZGI1OworCQlcYyBkYjUKKwkJQ1JFQVRFIFRBQkxFIHQ5IChpZCBp bnQpOworCQlJTlNFUlQgSU5UTyB0OSBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVB VEUgVEFCTEUgdDEwIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0MTAgVkFMVUVTICgxKSwgKDIp LCAoMyksICg0KTsKKwkJJywKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJ Jy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9leGNs dWRpbmdfZGF0YWJhc2VzIiwKKwkJCSctLWV4Y2x1ZGUtZGF0YWJhc2UnID0+ICdkYmV4KicsCisJ CV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZv cm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXhjbHVkaW5n X2RhdGFiYXNlcy5zcWwiLAorCQkJJy0tZXhjbHVkZS1kYXRhYmFzZScgPT4gJ2RiNScsCisJCQki JHRlbXBkaXIvZXhjbHVkaW5nX2RhdGFiYXNlcyIsCisJCV0sCisJCWxpa2UgPT4gcXIvXgorCQkJ XG5cUUNSRUFURSBEQVRBQkFTRSBkYjFcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJM RSBwdWJsaWMudDEgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50 MiAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGIyXEUKKwkJCSguKlxu KSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQzIChcRQorCQkJKC4qXG4pKgorCQkJXG5c UUNSRUFURSBUQUJMRSBwdWJsaWMudDQgKC94bSwKKwkJdW5saWtlID0+IHFyL14KKwkJCVxuXFFD UkVBVEUgREFUQUJBU0UgZGIzXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVi bGljLnQ1IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDYgKFxF CisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiNFxFCisJCQkoLipcbikqCisJ CQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NyAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVB VEUgVEFCTEUgcHVibGljLnQ4IChcRQorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjVcRQorCQkJ KC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDkgKFxFCisJCQkoLipcbikqCisJ CQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MTAgKFxFCisJCS94bSwKKwl9LAorCisJZm9ybWF0 X2RpcmVjdG9yeSA9PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF9kaXJl Y3RvcnkoYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9ybWF0X2Rp cmVjdG9yeSBWQUxVRVMgKDEsIHRydWUsICduYW1lMScpLCAoMiwgZmFsc2UsICduYW1lMicpOyIs CisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2Rp cmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9yeSIsCisJ CV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZv cm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2Rp cmVjdG9yeS5zcWwiLAorCQkJIiR0ZW1wZGlyL2Zvcm1hdF9kaXJlY3RvcnkiLAorCQldLAorCQls aWtlID0+IHFyL15cblxRQ09QWSBwdWJsaWMuZm9ybWF0X2RpcmVjdG9yeSAoYSwgYiwgYykgRlJP TSBzdGRpbjsveG0KKwl9LAorCisJZm9ybWF0X3RhciA9PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JF QVRFIFRBQkxFIGZvcm1hdF90YXIoYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJU IElOVE8gZm9ybWF0X3RhciBWQUxVRVMgKDEsIGZhbHNlLCAnbmFtZTMnKSwgKDIsIHRydWUsICdu YW1lNCcpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1h dCcgPT4gJ3RhcicsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X3RhciIsCisJCV0s CisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1h dCcgPT4gJ3RhcicsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X3Rhci5zcWwiLAor CQkJIiR0ZW1wZGlyL2Zvcm1hdF90YXIiLAorCQldLAorCQlsaWtlID0+IHFyL15cblxRQ09QWSBw dWJsaWMuZm9ybWF0X3RhciAoYSwgYiwgYykgRlJPTSBzdGRpbjsveG0KKwl9LAorCisJZm9ybWF0 X2N1c3RvbSA9PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF9jdXN0b20o YSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9ybWF0X2N1c3RvbSBW QUxVRVMgKDEsIGZhbHNlLCAnbmFtZTUnKSwgKDIsIHRydWUsICduYW1lNicpOyIsCisJCWR1bXBf Y21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJ CQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsCisJCV0sCisJCXJlc3RvcmVf Y21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2N1c3Rv bScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbS5zcWwiLAorCQkJIiR0 ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAorCQldLAorCQlsaWtlID0+IHFyL14gXG5cUUNPUFkgcHVi bGljLmZvcm1hdF9jdXN0b20gKGEsIGIsIGMpIEZST00gc3RkaW47L3htCisJfSwKKworCWR1bXBf Z2xvYmFsc19vbmx5ID0+IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2Rp cihhIGludCwgYiBib29sZWFuLCBjIHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfZGlyIFZB TFVFUyAoMSwgZmFsc2UsICduYW1lNScpLCAoMiwgdHJ1ZSwgJ25hbWU2Jyk7IiwKKwkJZHVtcF9j bWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywK KwkJCSctLWdsb2JhbHMtb25seScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZHVtcF9nbG9i YWxzX29ubHkiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICct QycsICctLWdsb2JhbHMtb25seScsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJ Jy0tZmlsZScgPT4gIiR0ZW1wZGlyL2R1bXBfZ2xvYmFsc19vbmx5LnNxbCIsCisJCQkiJHRlbXBk aXIvZHVtcF9nbG9iYWxzX29ubHkiLAorCQldLAorCQlsaWtlID0+IHFyLworICAgICAgICAgICAg XlxzKlxRQ1JFQVRFIFJPTEUgZHVtcGFsbDtcRVxzKlxuCisJCQkveG0KKwl9LCk7CisKKyMgRmly c3QgZXhlY3V0ZSB0aGUgc2V0dXBfc3FsCitmb3JlYWNoIG15ICRydW4gKHNvcnQga2V5cyAlcGdk dW1wYWxsX3J1bnMpCit7CisJaWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3NldHVwX3NxbH0p CisJeworCQkkbm9kZS0+c2FmZV9wc3FsKCRydW5fZGIsICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+ e3NldHVwX3NxbH0pOworCX0KK30KKworIyBFeGVjdXRlIHRoZSB0ZXN0cworZm9yZWFjaCBteSAk cnVuIChzb3J0IGtleXMgJXBnZHVtcGFsbF9ydW5zKQoreworCSMgQ3JlYXRlIGEgbmV3IHRhcmdl dCBjbHVzdGVyIHRvIHBnX3Jlc3RvcmUgZWFjaCB0ZXN0IGNhc2UgcnVuIHNvIHRoYXQgd2UKKwkj IGRvbid0IG5lZWQgdG8gdGFrZSBjYXJlIG9mIHRoZSBjbGVhbnVwIGZyb20gdGhlIHRhcmdldCBj bHVzdGVyIGFmdGVyIGVhY2gKKwkjIHJ1bi4KKwlteSAkdGFyZ2V0X25vZGUgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoInRhcmdldF8kcnVuIik7CisJJHRhcmdldF9ub2RlLT5pbml0 OworCSR0YXJnZXRfbm9kZS0+c3RhcnQ7CisKKwkjIER1bXBhbGwgZnJvbSBub2RlIGNsdXN0ZXIu CisJJG5vZGUtPmNvbW1hbmRfb2soXEB7ICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2R1bXBfY21k fSB9LAorCQkiJHJ1bjogcGdfZHVtcGFsbCBydW5zIik7CisKKwkjIFJlc3RvcmUgdGhlIGR1bXAg b24gInRhcmdldF9ub2RlIiBjbHVzdGVyLgorCW15IEByZXN0b3JlX2NtZCA9ICgKKwkJQHsgJHBn ZHVtcGFsbF9ydW5zeyRydW59LT57cmVzdG9yZV9jbWR9IH0sCisJCSctLWhvc3QnLCAkdGFyZ2V0 X25vZGUtPmhvc3QsICctLXBvcnQnLCAkdGFyZ2V0X25vZGUtPnBvcnQpOworCisJbXkgKCRzdGRv dXQsICRzdGRlcnIpID0gcnVuX2NvbW1hbmQoXEByZXN0b3JlX2NtZCk7CisKKwkjIHBnX3Jlc3Rv cmUgLS1maWxlIG91dHB1dCBmaWxlLgorCW15ICRvdXRwdXRfZmlsZSA9IHNsdXJwX2ZpbGUoIiR0 ZW1wZGlyLyR7cnVufS5zcWwiKTsKKworCWlmICggICAhKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+ e2xpa2V9KQorCQkmJiAhKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3VubGlrZX0pKQorCXsKKwkJ ZGllICJtaXNzaW5nIFwibGlrZVwiIG9yIFwidW5saWtlXCIgaW4gdGVzdCBcIiRydW5cIiI7CisJ fQorCisJaWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9KQorCXsKKwkJbGlrZSgkb3V0 cHV0X2ZpbGUsICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9LCAic2hvdWxkIGR1bXAgJHJ1 biIpOworCX0KKworCWlmICgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnt1bmxpa2V9KQorCXsKKwkJ dW5saWtlKAorCQkJJG91dHB1dF9maWxlLAorCQkJJHBnZHVtcGFsbF9ydW5zeyRydW59LT57dW5s aWtlfSwKKwkJCSJzaG91bGQgbm90IGR1bXAgJHJ1biIpOworCX0KK30KKworIyBTb21lIG5lZ2F0 aXZlIHRlc3QgY2FzZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCBhbmQgcmVzdG9yZSB1c2luZyBw Z19yZXN0b3JlCisjIHRlc3QgY2FzZSAxOiB3aGVuIC1DIGlzIG5vdCB1c2VkIGluIHBnX3Jlc3Rv cmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJ WworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwKKwkJJy0tZm9y bWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3Fs IiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtQ1wvLS1jcmVhdGUgbXVz dCBiZSBzcGVjaWZpZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1 bXBhbGxcRS8sCisJJ1doZW4gLUMgaXMgbm90IHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAg b2YgcGdfZHVtcGFsbCcpOworCisjIHRlc3QgY2FzZSAyOiBXaGVuIC0tbGlzdCBvcHRpb24gaXMg dXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgK KwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAor CQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1saXN0JywKKwkJJy0tZmlsZScgPT4gIiR0 ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9w dGlvbiAtbFwvLS1saXN0IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUg Y3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIC0tbGlzdCBpcyB1c2VkIGluIHBnX3Jl c3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsKKworIyB0ZXN0IGNhc2UgMzogV2hlbiBu b24tZXhpc3QgZGF0YWJhc2UgaXMgZ2l2ZW4gd2l0aCAtZCBvcHRpb24KKyRub2RlLT5jb21tYW5k X2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3Vz dG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy1kJyA9PiAnZGJwcScs CisJXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBjb3VsZCBub3QgY29ubmVjdCB0byBkYXRh YmFzZSAiZGJwcSJcRS8sCisJJ1doZW4gbm9uLWV4aXN0ZW50IGRhdGFiYXNlIGlzIGdpdmVuIHdp dGggLWQgb3B0aW9uIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnCispOwor Ciskbm9kZS0+c3RvcCgnZmFzdCcpOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuMzkuMwoK --000000000000cb4b33064135ef1b--