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.96) (envelope-from ) id 1vklCn-001ngz-2V for pgsql-hackers@arkaria.postgresql.org; Tue, 27 Jan 2026 15:42:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vklBm-00ELib-2F for pgsql-hackers@arkaria.postgresql.org; Tue, 27 Jan 2026 15:41:11 +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.96) (envelope-from ) id 1vklBl-00ELiT-35 for pgsql-hackers@lists.postgresql.org; Tue, 27 Jan 2026 15:41:10 +0000 Received: from mail-qt1-x831.google.com ([2607:f8b0:4864:20::831]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vklBf-002aLy-2R for pgsql-hackers@lists.postgresql.org; Tue, 27 Jan 2026 15:41:09 +0000 Received: by mail-qt1-x831.google.com with SMTP id d75a77b69052e-501488a12cbso77154051cf.3 for ; Tue, 27 Jan 2026 07:41:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769528463; cv=none; d=google.com; s=arc-20240605; b=Byzr8yzfhgiKAqc90Bq9yav588smblFNMlzCT4OR2d8RJqDPdsq5u4hUYIaF4bKy3+ gZEz30/EYv6pqLuU0itizPgKzCbTEMh6l9Gy+MKQ6gL/QsaeJQHsqeFW4ZhpnE9qM5fe mQkvqW5wGE/jWuWstCedLH2JcJLpNonNVL7/dJsoz+4wq9t7m0C0fHZuREp4XnqoDyGg hvn3/JTsJn84BLDao0RcIxfVPdOXVaAHIvtNAroJ1hNSRACfyTy8kk2DAeGx7wEfWchZ 8G+3GTErNH6yMCk3ln7nshgjypl5WF4ufVtN8Yc/EGwKcPlOlyoN0/hD88TnTCSSFQlL frOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=5oUhM2flR+GovFLc1dzuOBYCuN1E6IV4xjWW+M8g+Eo=; fh=tN8RmqDc3f569elNxkGizKLPJCKkwtqnM8yARZaRYpQ=; b=NIDJmvq7Q9HXFASsNgYUn7ekzLdwGfIm0EUBkPw7+KE4iSL1/D3zsmIBbFYdevM3GW 9NnSqDRkQSwG1Th4SIxwjeZWxQEa1GP1bmIMOZeTTdeX55HqlJWOJbe1BtDDtZXWn+6I cMsDTuuxL5NuhH+dDqsiaIKtAgJI3lcdfvwZAOIxOULX05l4xP7NQU2/m8QdwAubXO9/ jgkyBXy0eWurJuF++4FG+nisKG7S5Flx07iUtIuDhKXjXAW533+8X44pLhl0fzK/td4P d6zRoQNYcIkzSgo6Vi7ZRuj96pUsVYYvXYaQl33x9SV18vd9xE9H5Zq9I+Pu6jwNAh4f AolQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769528463; x=1770133263; 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=5oUhM2flR+GovFLc1dzuOBYCuN1E6IV4xjWW+M8g+Eo=; b=Kl8961p0Wf+aSwagw8qfQQ2jvFJCJtBANb4ZQUrc48YhbEcgAcMzI08q4NVAU3c5bN VAw3S/f1Mbc7/mScGE+Cs//AANh6d19wZ9Sqdq32z/psCd0hQMtxh79CsEx+cdt206R0 fX8A9ms49D7JeVTEQSPCvZjE6uXIqxqhjeN0VjJRkC2D0JIR5g6Gjf4uYeewNbwTXoBF O5eW+rl2sT96UuQHcTZt4P61rCiYWyDiXffY/GWe2ulLaptiu0gDrVTgSxdaAKwFMppJ wx3rBUMKg1JN22fnP++iPqcTU6rw/PWdYO3IMseUdaLb3GLCnnEq/pDxtNvA1Sly7Eb1 75wA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769528463; x=1770133263; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=5oUhM2flR+GovFLc1dzuOBYCuN1E6IV4xjWW+M8g+Eo=; b=FmH2KxcMu7o7Ii89kSRqXBzA5VuB+R5xMt+buMU8ZToL0VyQeo0LmuXM2MoV6D0lwz 8KDOBjH3nyfcKewy8Ok6Qfx5VUZkWgd8otY8cbjPiNNDyD1VCmON8fo2NplB1kM4e7sD +HCaM/cVi3nUrIn1unI1WPf58rYth9B4An1KZKGAD1ujI4J4ebxCCtuSz9Dk+6zgaZv3 Qa+g2jfUzjCUek6J5vmxrxQ1+3W73mhyZEegTCkbThMHRhGtsEMUusEqBv3pzFzww4/n ldznxs8cdE16+B1d5guvM114F67jVooKpFUryHT2aI/TWlBhpOaSw/UniMtCnQneGMCV SIoA== X-Forwarded-Encrypted: i=1; AJvYcCUxykqSboSwGEEVt8vOQZKN5O9L2AXdXJrM4v5HPw3RNxtLVR31O03DyqoYsvlAm18SZXI7lWpO3ID5ScbG@lists.postgresql.org X-Gm-Message-State: AOJu0YzxGxrZKMYHpnvRapKeK1W5WTwO74NfANxDipfe2LH6F2Fd/RG4 J3CDawVTcSTtAhl8joG8sSrMBS4K73KTtgmVEK9FuFMxCTo3FuhRgq1mY/HWE4MKFBfncohVlxk eUvJYVquKn2XoCpdBFBiWB5JwNQCuAO0= X-Gm-Gg: AZuq6aLQ5hxZLbsDPUV3BKnU++TERYsS6f9MoEJUHF8r/vpwdfBLFBOv4DEGGOHwBpx TRnhd39GGDc8XlRaxmX45sVwpbYGZxie4HhXiK6UX2zKqYlh5oOzaFy4Y7wpv//ka3ZLa+umC57 wz6SFaplVemmhIf+h9s/dPHB5LUz/2Uq6YRuLxX8oGoimMqC4q5BZhXk2OqskkpTiKwL4yC/2Oz xIm7MBm69bFN+ZJ2r+mQ0TR8sNgCGML5Ej0hTQjBo79R04C+6v5wP7lWqgCo29h0T3PZnEB X-Received: by 2002:ac8:7f8c:0:b0:4ee:2721:9ebe with SMTP id d75a77b69052e-5032fa034f1mr27473511cf.53.1769528462930; Tue, 27 Jan 2026 07:41:02 -0800 (PST) MIME-Version: 1.0 References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <2bed001a-462c-42da-9a6b-3c7884502932@dunslane.net> <20250824010811.4d.nmisch@google.com> <82eb35b8-7f07-493b-b689-0934919e1dc3@dunslane.net> <17555e46-4fb2-4265-90e0-95cb8ed584a6@dunslane.net> In-Reply-To: From: Mahendra Singh Thalor Date: Tue, 27 Jan 2026 21:10:50 +0530 X-Gm-Features: AZwV_QgShfiWG8axhKfblGOGrf5_gCCBUmhDq2MRdH41TlwXjkkKka_Udq-Ga5M Message-ID: Subject: Re: Non-text mode for pg_dumpall To: tushar Cc: jian he , Vaibhav Dalvi , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000074a7860649607389" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000074a7860649607389 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, 23 Jan 2026 at 19:07, tushar wrote: > > > > On Fri, Jan 23, 2026 at 12:21=E2=80=AFPM tushar wrote: >> >> >> Thanks Mahendra, a minor observation - The pg_restore output shows a d= ouble slash in the map.dat path (e.g., abc.tar//map.dat). >> While it doesn't break the restore, we may want to clean up the path joi= ning logic. >> >> [edb@1a1c15437e7c bin]$ ./pg_restore -Ft -C abc.tar/ -d postgres -p 9011= -U ed -v >> pg_restore: found database "template1 >> " (OID: 1) in file "abc.tar//map.dat" >> pg_restore: found database "postgres >> " (OID: 5) in file "abc.tar//map.dat" >> >> > > Please refer to this scenario where - Objects created under template1 an= d the postgres database by a specific user are failing during a cross-clust= er restore. > When restoring to a new cluster as a different superuser, pg_restore thro= ws the error: ERROR: role "edb" does not exist. > It appears the restore is attempting to preserve the original ownership o= f template1 objects even when the target environment lacks those specific r= oles. > > Steps to reproduce: > initdb ( ./initdb -U edb -D data) , start the server , connect to postgre= s and template1 database one by one and create > this table ( create table test(n int); ) > perform pg_dumpall operation ( ./pg_dumpall -Ft -f abc.tar) > initdb (./initdb -U xyz) , start the server , create a database ( create = database abc;) > perform pg_restore operation ( ./pg_restore -Ft -C abc.tar/ -d postgres -= p 9033 -U xyz) > --getting an error, table 'test' will be created on 'template1' database= but failed to create on an another database ( in this case - 'abc' databas= e) > > regards, Hi, Here I am attaching an updated patch for the review and testing. Thanks Jian for the reporting rebase issue. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --00000000000074a7860649607389 Content-Type: application/octet-stream; name="v15_27012026-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename="v15_27012026-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkwrjn9i0 RnJvbSBlMzM4ZGNiMjEwZjc0NDUzYThjZDMxYTU2YzhiOWEzMTJmM2JlMmEwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVHVlLCAyNyBKYW4gMjAyNiAyMDo1Mzo1NiArMDUzMApTdWJqZWN0OiBbUEFU Q0hdIE5vbiB0ZXh0IG1vZGVzIGZvciBwZ19kdW1wYWxsLCBjb3JyZXNwb25kaW5nbHkgY2hhbmdl IAogcGdfcmVzdG9yZQoKICAgIHBnX2R1bXBhbGwgYWNxdWlyZXMgYSBuZXcgLUYvLS1mb3JtYXQg b3B0aW9uLCB3aXRoIHRoZSBzYW1lIG1lYW5pbmdzIGFzCiAgICBwZ19kdW1wLiBUaGUgZGVmYXVs dCBpcyBwLCBtZWFuaW5nIHBsYWluIHRleHQuIEZvciBhbnkgb3RoZXIgdmFsdWUsIGEKICAgIGRp cmVjdG9yeSBpcyBjcmVhdGVkIGNvbnRhaW5pbmcgdHdvIGZpbGVzLCB0b2MuZ2xvIGFuZCBtYXAu ZGF0LiBUaGUKICAgIGZpcnN0IGNvbnRhaW5zIGNvbW1hbmRzIHJlc3RvcmluZyB0aGUgZ2xvYmFs IGRhdGEgaW4gY3VzdG9tIGZvcm1hdCwgYW5kIHRoZSBzZWNvbmQKICAgIGNvbnRhaW5zIGEgbWFw IGZyb20gb2lkcyB0byBkYXRhYmFzZSBuYW1lcyBpbiB0ZXh0IGZvcm1hdC4gSXQgd2lsbCBhbHNv IGNvbnRhaW4gYQogICAgc3ViZGlyZWN0b3J5IGNhbGxlZCBkYXRhYmFzZXMsIGluc2lkZSB3aGlj aCBpdCB3aWxsIGNyZWF0ZSBhcmNoaXZlcyBpbgogICAgdGhlIHNwZWNpZmllZCBmb3JtYXQsIG5h bWVkIHVzaW5nIHRoZSBkYXRhYmFzZSBvaWRzLgoKICAgIEluIHRoZXNlIGNhc2VzcyB0aGUgLWYg YXJndW1lbnQgaXMgcmVxdWlyZWQuCgogICAgSWYgcGdfcmVzdG9yZSBlbmNvdW50ZXJzIGEgZGly ZWN0b3J5IGNvbnRhaW5pbmcgbWFwLmRhdCBhbmQgdG9jLmdsbywKICAgIGl0IHJlc3RvcmVzIHRo ZSBnbG9iYWwgc2V0dGluZ3MgZnJvbSB0b2MuZ2xvIGlmIGV4aXN0LCBhbmQgdGhlbgogICAgcmVz dG9yZXMgZWFjaCBkYXRhYmFzZS4KCiAgICBwZ19yZXN0b3JlIGFjcXVpcmVzIHR3byBuZXcgb3B0 aW9uczogLWcvLS1nbG9iYWxzLW9ubHkgd2hpY2ggc3VwcHJlc3NlcwogICAgcmVzdG9yYXRpb24g b2YgYW55IGRhdGFiYXNlcywgYW5kIC0tZXhjbHVkZS1kYXRhYmFzZSB3aGljaCBpbmhpYml0cwog ICAgcmVzdG9yYXRpb24gb2YgcGFydGljdWFsciBkYXRhYmFzZShzKSBpbiB0aGUgc2FtZSB3YXkg dGhlIHNhbWUgb3B0aW9uCiAgICB3b3JrcyBpbiBwZ19kdW1wYWxsLgoKdjE1Ci0tLQogZG9jL3Ny Yy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgICAgIHwgMTA3ICsrKystCiBkb2Mvc3JjL3NnbWwv cmVmL3BnX3Jlc3RvcmUuc2dtbCAgICAgfCAgNjYgKystCiBzcmMvYmluL3BnX2R1bXAvY29ubmVj dGRiLmMgICAgICAgICAgfCAgMTMgKy0KIHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaCAgICAg ICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkICAgICAgICAgIHwgICAx ICsKIHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jICAgICAgICAgICB8ICAxMCArCiBzcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwLmggICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuYyB8ICAzNSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5oIHwgICAxICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgICAgICB8 ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgIHwgICAyICstCiBz cmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jICAgICAgICAgfCA2MTMgKysrKysrKysrKysrKysr KysrKystLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgICAgICAgICB8IDYyNSAr KysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5w bCAgICAgICB8ICAyNyArKwogc3JjL2Jpbi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwgIHwg Mzk2ICsrKysrKysrKysrKysrKysrCiAxNSBmaWxlcyBjaGFuZ2VkLCAxNzMwIGluc2VydGlvbnMo KyksIDE3MiBkZWxldGlvbnMoLSkKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgc3JjL2Jp bi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3JjL2Jpbi9wZ19k dW1wL3QvMDA3X3BnX2R1bXBhbGwucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3Bn X2R1bXBhbGwuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCmluZGV4IDg4 MzRiN2VjMTQxLi41MWVjNGY3MzBlMCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19k dW1wYWxsLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKQEAgLTE2 LDcgKzE2LDEwIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAgPHJlZm5hbWVkaXY+CiAg IDxyZWZuYW1lPnBnX2R1bXBhbGw8L3JlZm5hbWU+Ci0gIDxyZWZwdXJwb3NlPmV4dHJhY3QgYSA8 cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIgaW50 byBhIHNjcmlwdCBmaWxlPC9yZWZwdXJwb3NlPgorCisgIDxyZWZwdXJwb3NlPgorICAgZXhwb3J0 IGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVy IGFzIGFuIFNRTCBzY3JpcHQgb3IgdG8gb3RoZXIgZm9ybWF0cworICA8L3JlZnB1cnBvc2U+CiAg PC9yZWZuYW1lZGl2PgogCiAgPHJlZnN5bm9wc2lzZGl2PgpAQCAtMzMsNyArMzYsNyBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHBhcmE+CiAgICA8YXBwbGljYXRpb24+cGdfZHVtcGFs bDwvYXBwbGljYXRpb24+IGlzIGEgdXRpbGl0eSBmb3Igd3JpdGluZyBvdXQKICAgICg8cXVvdGU+ ZHVtcGluZzwvcXVvdGU+KSBhbGwgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1l PiBkYXRhYmFzZXMKLSAgIG9mIGEgY2x1c3RlciBpbnRvIG9uZSBzY3JpcHQgZmlsZS4gIFRoZSBz Y3JpcHQgZmlsZSBjb250YWlucworICAgb2YgYSBjbHVzdGVyIGludG8gYW4gU1FMIHNjcmlwdCBm aWxlIG9yIGFuIGFyY2hpdmUuICBUaGUgb3V0cHV0IGNvbnRhaW5zCiAgICA8YWNyb255bT5TUUw8 L2Fjcm9ueW0+IGNvbW1hbmRzIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5wdXQgdG8gPHhyZWYKICAg IGxpbmtlbmQ9ImFwcC1wc3FsIi8+IHRvIHJlc3RvcmUgdGhlIGRhdGFiYXNlcy4gIEl0IGRvZXMg dGhpcyBieQogICAgY2FsbGluZyA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGZvciBlYWNo IGRhdGFiYXNlIGluIHRoZSBjbHVzdGVyLgpAQCAtNTIsMTEgKzU1LDE2IEBAIFBvc3RncmVTUUwg ZG9jdW1lbnRhdGlvbgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgU1FMIHNjcmlwdCB3 aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gIFVzZSB0aGUKKyAgIFBsYWlu IHRleHQgU1FMIHNjcmlwdHMgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQu ICBVc2UgdGhlCiAgICA8b3B0aW9uPi1mPC9vcHRpb24+LzxvcHRpb24+LS1maWxlPC9vcHRpb24+ IG9wdGlvbiBvciBzaGVsbCBvcGVyYXRvcnMgdG8KICAgIHJlZGlyZWN0IGl0IGludG8gYSBmaWxl LgogICA8L3BhcmE+CiAKKyAgPHBhcmE+CisgICBBcmNoaXZlcyBpbiBvdGhlciBmb3JtYXRzIHdp bGwgYmUgcGxhY2VkIGluIGEgZGlyZWN0b3J5IG5hbWVkIHVzaW5nIHRoZQorICAgPG9wdGlvbj4t Zjwvb3B0aW9uPi88b3B0aW9uPi0tZmlsZTwvb3B0aW9uPiwgd2hpY2ggaXMgcmVxdWlyZWQgaW4g dGhpcyBjYXNlLgorICA8L3BhcmE+CisKICAgPHBhcmE+CiAgIDxhcHBsaWNhdGlvbj5wZ19kdW1w YWxsPC9hcHBsaWNhdGlvbj4gbmVlZHMgdG8gY29ubmVjdCBzZXZlcmFsCiAgIHRpbWVzIHRvIHRo ZSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHNlcnZlciAob25jZSBwZXIK QEAgLTEzMSwxMCArMTM5LDg1IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgIDxw YXJhPgogICAgICAgICBTZW5kIG91dHB1dCB0byB0aGUgc3BlY2lmaWVkIGZpbGUuICBJZiB0aGlz IGlzIG9taXR0ZWQsIHRoZQogICAgICAgICBzdGFuZGFyZCBvdXRwdXQgaXMgdXNlZC4KKyAgICAg ICAgTm90ZTogVGhpcyBvcHRpb24gY2FuIG9ubHkgYmUgb21pdHRlZCB3aGVuIDxvcHRpb24+LS1m b3JtYXQ8L29wdGlvbj4gaXMgcGxhaW4KICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVt PgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRl cm0+PG9wdGlvbj4tRiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBs YWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZm9ybWF0PTxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9u PjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU3BlY2lm eSB0aGUgZm9ybWF0IG9mIGR1bXAgZmlsZXMuICBJbiBwbGFpbiBmb3JtYXQsIGFsbCB0aGUgZHVt cCBkYXRhIGlzCisgICAgICAgIHNlbnQgaW4gYSBzaW5nbGUgdGV4dCBzdHJlYW0uIFRoaXMgaXMg dGhlIGRlZmF1bHQuCisKKyAgICAgICAgSW4gYWxsIG90aGVyIG1vZGVzLCA8YXBwbGljYXRpb24+ cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+IGZpcnN0IGNyZWF0ZXMgdHdvIGZpbGVzOgorICAgICAg ICA8ZmlsZW5hbWU+dG9jLmdsbzwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+bWFwLmRhdDwvZmls ZW5hbWU+LCBpbiB0aGUgZGlyZWN0b3J5CisgICAgICAgIHNwZWNpZmllZCBieSA8b3B0aW9uPi0t ZmlsZTwvb3B0aW9uPi4KKyAgICAgICAgVGhlIGZpcnN0IGZpbGUgY29udGFpbnMgZ2xvYmFsIGRh dGEsIHN1Y2ggYXMgcm9sZXMgYW5kIHRhYmxlc3BhY2VzIGluIGN1c3RvbSBmb3JtYXQuIFRoZSBz ZWNvbmQKKyAgICAgICAgY29udGFpbnMgYSBtYXBwaW5nIGJldHdlZW4gZGF0YWJhc2Ugb2lkcyBh bmQgbmFtZXMuIFRoZXNlIGZpbGVzIGFyZSB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5w Z19yZXN0b3JlPC9hcHBsaWNhdGlvbj4uIERhdGEgZm9yIGluZGl2aWR1YWwgZGF0YWJhc2VzIGlz IHBsYWNlZCBpbgorICAgICAgICA8ZmlsZW5hbWU+ZGF0YWJhc2VzPC9maWxlbmFtZT4gc3ViZGly ZWN0b3J5LCBuYW1lZCB1c2luZyB0aGUgZGF0YWJhc2UncyA8dHlwZT5vaWQ8L3R5cGU+LgorCisg ICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0 ZXJtPjxsaXRlcmFsPmQ8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ ZGlyZWN0b3J5PC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAg ICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZXMgZm9y IGVhY2ggZGF0YWJhc2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jl c3RvcmUuIFRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgd2lsbCBoYXZlIGRhdGFiYXNlIDx0eXBl Pm9pZDwvdHlwZT4gYXMgaXRzIG5hbWUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9s aXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRy eT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnA8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAg PHRlcm0+PGxpdGVyYWw+cGxhaW48L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVt PgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBwbGFpbi10ZXh0IFNRTCBz Y3JpcHQgZmlsZSAodGhlIGRlZmF1bHQpLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwv bGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50 cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5jPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAg IDx0ZXJtPjxsaXRlcmFsPmN1c3RvbTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0 ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIGN1c3RvbS1mb3JtYXQg YXJjaGl2ZSBmb3IgZWFjaCBkYXRhYmFzZSwKKyAgICAgICAgICAgc3VpdGFibGUgZm9yIGlucHV0 IGludG8gcGdfcmVzdG9yZS4gVGhlIGFyY2hpdmUKKyAgICAgICAgICAgd2lsbCBiZSBuYW1lZCA8 ZmlsZW5hbWU+ZGJvaWQuZG1wPC9maWxlbmFtZT4gd2hlcmUgPHR5cGU+ZGJvaWQ8L3R5cGU+IGlz IHRoZQorICAgICAgICAgICA8dHlwZT5vaWQ8L3R5cGU+IG9mIHRoZSBkYXRhYmFzZS4KKyAgICAg ICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnQ8 L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dGFyPC9saXRlcmFsPjwv dGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAg T3V0cHV0IGEgdGFyLWZvcm1hdCBhcmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAorICAgICAgICAg ICBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQorICAgICAg ICAgICB3aWxsIGJlIG5hbWVkIDxmaWxlbmFtZT5kYm9pZC50YXI8L2ZpbGVuYW1lPiB3aGVyZSA8 dHlwZT5kYm9pZDwvdHlwZT4gaXMgdGhlCisgICAgICAgICAgIDx0eXBlPm9pZDwvdHlwZT4gb2Yg dGhlIGRhdGFiYXNlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDwvdmFyaWFibGVsaXN0PgorCisgICAg ICAgTm90ZTogc2VlIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGRldGFpbHMKKyAg ICAgICBvZiBob3cgdGhlIHZhcmlvdXMgbm9uIHBsYWluIHRleHQgYXJjaGl2ZXMgd29yay4KKwor ICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4K KwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0aW9uPjwv dGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+ CkBAIC05MzcsOSArMTAyMCwxNiBAQCBleGNsdWRlIGRhdGFiYXNlIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5QQVRURVJOPC9yZXBsYWNlYWJsZT4KICAgPHRpdGxlPkV4YW1wbGVzPC90 aXRsZT4KICAgPHBhcmE+CiAgICBUbyBkdW1wIGFsbCBkYXRhYmFzZXM6Ci0KKyAgIElmIGZvcm1h dCBpcyBnaXZlbiwgdGhlbiBkdW1wIHdpbGwgYmUgYmFzZWQgb24gZm9ybWF0LCBkZWZhdWx0IHBs YWluLgogPHNjcmVlbj4KIDxwcm9tcHQ+JDwvcHJvbXB0PiA8dXNlcmlucHV0PnBnX2R1bXBhbGwg Jmd0OyBkYi5vdXQ8L3VzZXJpbnB1dD4KKzwvc2NyZWVuPgorCis8c2NyZWVuPgorPHByb21wdD4k PC9wcm9tcHQ+IDx1c2VyaW5wdXQ+cGdfZHVtcGFsbCAtLWZvcm1hdD1kaXJlY3RvcnkgLWYgZGIu b3V0PC91c2VyaW5wdXQ+Cis8cHJvbXB0PiQ8L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19kdW1wYWxs IC0tZm9ybWF0PWN1c3RvbSAtZiBkYi5vdXQ8L3VzZXJpbnB1dD4KKzxwcm9tcHQ+JDwvcHJvbXB0 PiA8dXNlcmlucHV0PnBnX2R1bXBhbGwgLS1mb3JtYXQ9dGFyIC1mIGRiLm91dDwvdXNlcmlucHV0 PgorPHByb21wdD4kPC9wcm9tcHQ+IDx1c2VyaW5wdXQ+cGdfZHVtcGFsbCAtLWZvcm1hdD1wbGFp biAtZiBkYi5vdXQ8L3VzZXJpbnB1dD4KIDwvc2NyZWVuPgogICA8L3BhcmE+CiAKQEAgLTk1Niw2 ICsxMDQ2LDE1IEBAIGV4Y2x1ZGUgZGF0YWJhc2UgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPlBBVFRFUk48L3JlcGxhY2VhYmxlPgogICAgdGhlIHNjcmlwdCB3aWxsIGF0dGVtcHQgdG8g ZHJvcCBvdGhlciBkYXRhYmFzZXMgaW1tZWRpYXRlbHksIGFuZCB0aGF0CiAgICB3aWxsIGZhaWwg Zm9yIHRoZSBkYXRhYmFzZSB5b3UgYXJlIGNvbm5lY3RlZCB0by4KICAgPC9wYXJhPgorCisgIDxw YXJhPgorICAgIElmIGR1bXAgd2FzIHRha2VuIGluIG5vbi10ZXh0IGZvcm1hdCwgdGhlbiB1c2Ug cGdfcmVzdG9yZSB0byByZXN0b3JlIGFsbCBkYXRhYmFzZXMuCis8c2NyZWVuPgorPHByb21wdD4k PC9wcm9tcHQ+IDx1c2VyaW5wdXQ+cGdfcmVzdG9yZSBkYi5vdXQgLWQgcG9zdGdyZXMgLUM8L3Vz ZXJpbnB1dD4KKzwvc2NyZWVuPgorICAgVGhpcyB3aWxsIHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFz ZXMuIElmIHVzZXIgZG9uJ3Qgd2FudCB0byByZXN0b3JlIHNvbWUgZGF0YWJhc2VzLCB0aGVuIHVz ZQorICAgLS1leGNsdWRlLXBhdHRlcm4gdG8gc2tpcCB0aG9zZS4KKzwvcGFyYT4KICA8L3JlZnNl Y3QxPgogCiAgPHJlZnNlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0 b3JlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAppbmRleCAyYzI5NWJi ZjhkYy4uZTRmZTM1ZTAyZDkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9y ZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCkBAIC0xOCw4ICsx OCw5IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICA8cmVmbmFtZT5wZ19yZXN0b3JlPC9y ZWZuYW1lPgogCiAgIDxyZWZwdXJwb3NlPgotICAgcmVzdG9yZSBhIDxwcm9kdWN0bmFtZT5Qb3N0 Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBhbgotICAgYXJjaGl2ZSBmaWxlIGNy ZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPgorICAgcmVzdG9yZSA8 cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlcyBmcm9tIGFyY2hp dmVzCisgICBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3IK KyAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4KICAgPC9yZWZwdXJwb3Nl PgogIDwvcmVmbmFtZWRpdj4KIApAQCAtMzgsMTMgKzM5LDE0IEBAIFBvc3RncmVTUUwgZG9jdW1l bnRhdGlvbgogCiAgIDxwYXJhPgogICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0 aW9uPiBpcyBhIHV0aWxpdHkgZm9yIHJlc3RvcmluZyBhCi0gICA8cHJvZHVjdG5hbWU+UG9zdGdy ZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4gYXJjaGl2ZQotICAgY3JlYXRlZCBi eSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGluIG9uZSBvZiB0aGUgbm9uLXBsYWluLXRl eHQKKyAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2Ugb3Ig Y2x1c3RlciBmcm9tIGFuIGFyY2hpdmUKKyAgIGNyZWF0ZWQgYnkgPHhyZWYgbGlua2VuZD0iYXBw LXBnZHVtcCIvPiBvcgorICAgPHhyZWYgbGlua2VuZD0iYXBwLXBnLWR1bXBhbGwiLz4gaW4gb25l IG9mIHRoZSBub24tcGxhaW4tdGV4dAogICAgZm9ybWF0cy4gIEl0IHdpbGwgaXNzdWUgdGhlIGNv bW1hbmRzIG5lY2Vzc2FyeSB0byByZWNvbnN0cnVjdCB0aGUKLSAgIGRhdGFiYXNlIHRvIHRoZSBz dGF0ZSBpdCB3YXMgaW4gYXQgdGhlIHRpbWUgaXQgd2FzIHNhdmVkLiAgVGhlCi0gICBhcmNoaXZl IGZpbGVzIGFsc28gYWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiB0 bworICAgZGF0YWJhc2Ugb3IgY2x1c3RlciB0byB0aGUgc3RhdGUgaXQgd2FzIGluIGF0IHRoZSB0 aW1lIGl0IHdhcyBzYXZlZC4gVGhlCisgICBhcmNoaXZlcyBhbHNvIGFsbG93IDxhcHBsaWNhdGlv bj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gdG8KICAgIGJlIHNlbGVjdGl2ZSBhYm91dCB3aGF0 IGlzIHJlc3RvcmVkLCBvciBldmVuIHRvIHJlb3JkZXIgdGhlIGl0ZW1zCi0gICBwcmlvciB0byBi ZWluZyByZXN0b3JlZC4gVGhlIGFyY2hpdmUgZmlsZXMgYXJlIGRlc2lnbmVkIHRvIGJlCisgICBw cmlvciB0byBiZWluZyByZXN0b3JlZC4gVGhlIGFyY2hpdmUgZm9ybWF0cyBhcmUgZGVzaWduZWQg dG8gYmUKICAgIHBvcnRhYmxlIGFjcm9zcyBhcmNoaXRlY3R1cmVzLgogICA8L3BhcmE+CiAKQEAg LTUyLDEwICs1NCwxNyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgIDxhcHBsaWNhdGlv bj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gY2FuIG9wZXJhdGUgaW4gdHdvIG1vZGVzLgogICAg SWYgYSBkYXRhYmFzZSBuYW1lIGlzIHNwZWNpZmllZCwgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8 L2FwcGxpY2F0aW9uPgogICAgY29ubmVjdHMgdG8gdGhhdCBkYXRhYmFzZSBhbmQgcmVzdG9yZXMg YXJjaGl2ZSBjb250ZW50cyBkaXJlY3RseSBpbnRvCi0gICB0aGUgZGF0YWJhc2UuICBPdGhlcndp c2UsIGEgc2NyaXB0IGNvbnRhaW5pbmcgdGhlIFNRTAotICAgY29tbWFuZHMgbmVjZXNzYXJ5IHRv IHJlYnVpbGQgdGhlIGRhdGFiYXNlIGlzIGNyZWF0ZWQgYW5kIHdyaXR0ZW4KKyAgIHRoZSBkYXRh YmFzZS4KKyAgIFdoZW4gcmVzdG9yaW5nIGZyb20gYSBkdW1wIG1hZGUgYnkgPGFwcGxpY2F0aW9u PnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPiwKKyAgIGVhY2ggZGF0YWJhc2Ugd2lsbCBiZSBjcmVh dGVkIGFuZCB0aGVuIHRoZSByZXN0b3JhdGlvbiB3aWxsIGJlIHJ1biBpbiB0aGF0CisgICBkYXRh YmFzZS4KKworICAgT3RoZXJ3aXNlLCB3aGVuIGEgZGF0YWJhc2UgbmFtZSBpcyBub3Qgc3BlY2lm aWVkLCBhIHNjcmlwdCBjb250YWluaW5nIHRoZSBTUUwKKyAgIGNvbW1hbmRzIG5lY2Vzc2FyeSB0 byByZWJ1aWxkIHRoZSBkYXRhYmFzZSBvciBjbHVzdGVyIGlzIGNyZWF0ZWQgYW5kIHdyaXR0ZW4K ICAgIHRvIGEgZmlsZSBvciBzdGFuZGFyZCBvdXRwdXQuICBUaGlzIHNjcmlwdCBvdXRwdXQgaXMg ZXF1aXZhbGVudCB0bwotICAgdGhlIHBsYWluIHRleHQgb3V0cHV0IGZvcm1hdCBvZiA8YXBwbGlj YXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+LgorICAgdGhlIHBsYWluIHRleHQgb3V0cHV0IGZv cm1hdCBvZiA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+IG9yCisgICA8YXBwbGlj YXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgorCiAgICBTb21lIG9mIHRoZSBvcHRpb25z IGNvbnRyb2xsaW5nIHRoZSBvdXRwdXQgYXJlIHRoZXJlZm9yZSBhbmFsb2dvdXMgdG8KICAgIDxh cHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3B0aW9ucy4KICAgPC9wYXJhPgpAQCAt MTUyLDYgKzE2MSw4IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgICBjb21tYW5k cyB0aGF0IG1lbnRpb24gdGhpcyBkYXRhYmFzZS4KICAgICAgICAgQWNjZXNzIHByaXZpbGVnZXMg Zm9yIHRoZSBkYXRhYmFzZSBpdHNlbGYgYXJlIGFsc28gcmVzdG9yZWQsCiAgICAgICAgIHVubGVz cyA8b3B0aW9uPi0tbm8tYWNsPC9vcHRpb24+IGlzIHNwZWNpZmllZC4KKyAgICAgICAgPG9wdGlv bj4tLWNyZWF0ZTwvb3B0aW9uPiBpcyByZXF1aXJlZCB3aGVuIHJlc3RvcmluZyBtdWx0aXBsZSBk YXRhYmFzZXMKKyAgICAgICAgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9u PnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KICAgICAgICA8L3BhcmE+CiAKICAgICAgICA8cGFy YT4KQEAgLTI0Nyw2ICsyNTgsMTkgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICA8 L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5Pgor ICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRp b24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAg ICAgPHBhcmE+CisgICAgICAgIFJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cyAocm9sZXMgYW5k IHRhYmxlc3BhY2VzKSwgbm8gZGF0YWJhc2VzLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCB3aGVuIHJlc3RvcmluZyBm cm9tIGFuIGFyY2hpdmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGlj YXRpb24+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1JIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+ PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWluZGV4PTxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgpAQCAtNTkxLDYg KzYxNSwyOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48 b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZT08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ cGF0dGVybjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBEbyBub3QgcmVzdG9yZSBkYXRhYmFzZXMgd2hvc2UgbmFt ZSBtYXRjaGVzCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJu PC9yZXBsYWNlYWJsZT4uCisgICAgICAgIE11bHRpcGxlIHBhdHRlcm5zIGNhbiBiZSBleGNsdWRl ZCBieSB3cml0aW5nIG11bHRpcGxlCisgICAgICAgIDxvcHRpb24+LS1leGNsdWRlLWRhdGFiYXNl PC9vcHRpb24+IHN3aXRjaGVzLiAgVGhlCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4gcGFyYW1ldGVyIGlzCisgICAgICAgIGludGVy cHJldGVkIGFzIGEgcGF0dGVybiBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMgdXNlZCBieQor ICAgICAgICA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3MgPGxpdGVyYWw+XGQ8L2xp dGVyYWw+CisgICAgICAgIGNvbW1hbmRzIChzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXBzcWwtcGF0 dGVybnMiLz4pLAorICAgICAgICBzbyBtdWx0aXBsZSBkYXRhYmFzZXMgY2FuIGFsc28gYmUgZXhj bHVkZWQgYnkgd3JpdGluZyB3aWxkY2FyZAorICAgICAgICBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0 ZXJuLiAgV2hlbiB1c2luZyB3aWxkY2FyZHMsIGJlIGNhcmVmdWwgdG8KKyAgICAgICAgcXVvdGUg dGhlIHBhdHRlcm4gaWYgbmVlZGVkIHRvIHByZXZlbnQgc2hlbGwgd2lsZGNhcmQgZXhwYW5zaW9u LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBvcHRpb24gaXMg b25seSByZWxldmFudCB3aGVuIHJlc3RvcmluZyBmcm9tIGFuIGFyY2hpdmUgbWFkZSB1c2luZyA8 YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgorICAgICAgIDwvcGFyYT4KKyAg ICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50 cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi0tZmlsdGVyPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5maWxlbmFtZTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPGxp c3RpdGVtPgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jIGIvc3JjL2Jp bi9wZ19kdW1wL2Nvbm5lY3RkYi5jCmluZGV4IDM4OGQyOWQwYWViLi5iMTJhNzBmZjYwYiAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9jb25uZWN0ZGIuYwpAQCAtMjI1LDcgKzIyNSw3IEBAIENvbm5lY3REYXRhYmFzZShjb25zdCBj aGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLAogCQlleGl0X25pY2Vs eSgxKTsKIAl9CiAKLQlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VDVVJFX1NF QVJDSF9QQVRIX1NRTCkpOworCVBRY2xlYXIoZXhlY3V0ZVF1ZXJ5KGNvbm4sIEFMV0FZU19TRUNV UkVfU0VBUkNIX1BBVEhfU1FMLCBmYWxzZSkpOwogCiAJcmV0dXJuIGNvbm47CiB9CkBAIC0yNzUs NyArMjc1LDcgQEAgY29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNvbnN0 IGNoYXIgKip2YWx1ZXMpCiAgKiBSdW4gYSBxdWVyeSwgcmV0dXJuIHRoZSByZXN1bHRzLCBleGl0 IHByb2dyYW0gb24gZmFpbHVyZS4KICAqLwogUEdyZXN1bHQgKgotZXhlY3V0ZVF1ZXJ5KFBHY29u biAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCitleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBj b25zdCBjaGFyICpxdWVyeSwgYm9vbCBpc19hcmNoaXZlKQogewogCVBHcmVzdWx0ICAgKnJlczsK IApAQCAtMjg3LDcgKzI4NywxNCBAQCBleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBj aGFyICpxdWVyeSkKIAl7CiAJCXBnX2xvZ19lcnJvcigicXVlcnkgZmFpbGVkOiAlcyIsIFBRZXJy b3JNZXNzYWdlKGNvbm4pKTsKIAkJcGdfbG9nX2Vycm9yX2RldGFpbCgiUXVlcnkgd2FzOiAlcyIs IHF1ZXJ5KTsKLQkJUFFmaW5pc2goY29ubik7CisKKwkJLyoKKwkJICogV2hlbiBpc19hcmNoaXZl IGlzIHNldCB0aGVuIHdlIGFyZSBzdXJlIHRoYXQgY29ubmVjdGlvbiBpcyByZWdpc3RlcmVkIGlu dG8gb25fZXhpdCBob29rCisJCSAqIHNvIGV4aXRfbmljZWx5IHdpbGwgY2xvc2UgdGhlIGNvbm5l Y3Rpb24gaW4gdGhlIGVuZC4gIElmIHdlIHRyeSB0byBjbG9zZSBpbiAyIHBsYWNlcywgd2UKKwkJ ICogd2lsbCBnZXQgY3Jhc2guCisJCSAqLworCQlpZiAoIWlzX2FyY2hpdmUpCisJCQlQUWZpbmlz aChjb25uKTsKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvY29ubmVjdGRiLmggYi9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmgKaW5kZXggNjc4 MTM4NTNlNjUuLjlkMjdiOTMxNjkyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29ubmVj dGRiLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5oCkBAIC0yMiw1ICsyMiw1IEBA IGV4dGVybiBQR2Nvbm4gKkNvbm5lY3REYXRhYmFzZShjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0 IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nCiAJCQkJCQkJICAgdHJpdmFsdWUgcHJvbXB0X3Bhc3N3 b3JkLCBib29sIGZhaWxfb25fZXJyb3IsCiAJCQkJCQkJICAgY29uc3QgY2hhciAqcHJvZ25hbWUs IGNvbnN0IGNoYXIgKipjb25uc3RyLCBpbnQgKnNlcnZlcl92ZXJzaW9uLAogCQkJCQkJCSAgIGNo YXIgKnBhc3N3b3JkLCBjaGFyICpvdmVycmlkZV9kYm5hbWUpOwotZXh0ZXJuIFBHcmVzdWx0ICpl eGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSk7CitleHRlcm4gUEdy ZXN1bHQgKmV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5LCBib29s IGlzX2FyY2hpdmUpOwogI2VuZGlmCQkJCQkJCS8qIENPTk5FQ1REQl9IICovCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVp bGQKaW5kZXggNzliZDUwMzY4NDEuLjdjOWE0NzU5NjNiIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCkBAIC0x MDMsNiArMTAzLDcgQEAgdGVzdHMgKz0gewogICAgICAgJ3QvMDA0X3BnX2R1bXBfcGFyYWxsZWwu cGwnLAogICAgICAgJ3QvMDA1X3BnX2R1bXBfZmlsdGVyZmlsZS5wbCcsCiAgICAgICAndC8wMDZf cGdfZHVtcF9jb21wcmVzcy5wbCcsCisJICAndC8wMDdfcGdfZHVtcGFsbC5wbCcsCiAgICAgICAn dC8wMTBfZHVtcF9jb25uc3RyLnBsJywKICAgICBdLAogICB9LApkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3BhcmFsbGVsLmMgYi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwppbmRleCBk ZGFmMDhmYWEzMC4uMjJmNTczNjA0NDQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wYXJh bGxlbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCkBAIC0zMzMsNiArMzMzLDE2 IEBAIG9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJb25fZXhpdF9uaWNlbHko YXJjaGl2ZV9jbG9zZV9jb25uZWN0aW9uLCAmc2h1dGRvd25faW5mbyk7CiB9CiAKKy8qCisgKiBX aGVuIHBnX3Jlc3RvcmUgcmVzdG9yZXMgbXVsdGlwbGUgZGF0YWJhc2VzLCB0aGVuIHVwZGF0ZSBh bHJlYWR5IGFkZGVkIGVudHJ5CisgKiBpbnRvIGFycmF5IGZvciBjbGVhbnVwLgorICovCit2b2lk CityZXBsYWNlX29uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpCit7CisJc2h1dGRv d25faW5mby5BSFggPSBBSFg7Cit9CisKIC8qCiAgKiBvbl9leGl0X25pY2VseSBoYW5kbGVyIGZv ciBzaHV0dGluZyBkb3duIGRhdGFiYXNlIGNvbm5lY3Rpb25zIGFuZAogICogd29ya2VyIHByb2Nl c3NlcyBjbGVhbmx5LgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCmluZGV4IDJmOGQ5Nzk5YzMwLi4zZDhkMzk3YWQ4 ZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXAuaApAQCAtMzEzLDcgKzMxMyw3IEBAIGV4dGVybiB2b2lkIFNldEFy Y2hpdmVPcHRpb25zKEFyY2hpdmUgKkFILCBEdW1wT3B0aW9ucyAqZG9wdCwgUmVzdG9yZU9wdGlv bnMgKnJvCiAKIGV4dGVybiB2b2lkIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2 ZSAqQUhYKTsKIAotZXh0ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4 dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSwg Ym9vbCBnbG9iYWxzX29ubHkpOwogCiAvKiBPcGVuIGFuIGV4aXN0aW5nIGFyY2hpdmUgKi8KIGV4 dGVybiBBcmNoaXZlICpPcGVuQXJjaGl2ZShjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJj aGl2ZUZvcm1hdCBmbXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IDM1 ZDNhMDc5MTVkLi5hYWJjNTdiY2VjMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu YwpAQCAtODYsNyArODYsNyBAQCBzdGF0aWMgaW50CVJlc3RvcmluZ1RvREIoQXJjaGl2ZUhhbmRs ZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3Rh dGljIHZvaWQgZHVtcFRpbWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNn LCB0aW1lX3QgdGltKTsKIHN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwg Y29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKKwkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZp Y2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsIGJvb2wgYXBwZW5kX2RhdGEpOwogc3RhdGljIENvbXBy ZXNzRmlsZUhhbmRsZSAqU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9p ZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc0ZpbGVIYW5kbGUgKnNh dmVkT3V0cHV0KTsKIApAQCAtMzM5LDkgKzMzOSwxNCBAQCBQcm9jZXNzQXJjaGl2ZVJlc3RvcmVP cHRpb25zKEFyY2hpdmUgKkFIWCkKIAkJU3RyaWN0TmFtZXNDaGVjayhyb3B0KTsKIH0KIAotLyog UHVibGljICovCisvKgorICogUmVzdG9yZUFyY2hpdmUKKyAqCisgKiBJZiBhcHBlbmRfZGF0YSBp cyBzZXQsIHRoZW4gYXBwZW5kIGRhdGEgaW50byBmaWxlIGFzIHdlIGFyZSByZXN0b3JpbmcgZHVt cAorICogb2YgbXVsdGlwbGUgZGF0YWJhc2VzIHdoaWNoIHdhcyB0YWtlbiBieSBwZ19kdW1wYWxs LgorICovCiB2b2lkCi1SZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCitSZXN0b3JlQXJjaGl2 ZShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEsIGJvb2wgZ2xvYmFsc19vbmx5KQogewog CUFyY2hpdmVIYW5kbGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRp b25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwpAQCAtNDU4LDcgKzQ2Myw3IEBAIFJlc3RvcmVB cmNoaXZlKEFyY2hpdmUgKkFIWCkKIAkgKi8KIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAo cm9wdC0+ZmlsZW5hbWUgfHwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdf Q09NUFJFU1NJT05fTk9ORSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+ Y29tcHJlc3Npb25fc3BlYyk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQt PmNvbXByZXNzaW9uX3NwZWMsIGFwcGVuZF9kYXRhKTsKIAogCWFocHJpbnRmKEFILCAiLS1cbi0t IFBvc3RncmVTUUwgZGF0YWJhc2UgZHVtcFxuLS1cblxuIik7CiAKQEAgLTc2MSw2ICs3NjYsMjEg QEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCQkJaWYgKCh0ZS0+cmVxcyAmIChSRVFf U0NIRU1BIHwgUkVRX0RBVEEgfCBSRVFfU1RBVFMpKSA9PSAwKQogCQkJCWNvbnRpbnVlOwkJLyog aWdub3JlIGlmIG5vdCB0byBiZSBkdW1wZWQgYXQgYWxsICovCiAKKwkJCS8qIFNraXAgRFJPUCBE QVRBQkFTRSBpZiBnbG9iYWxzX29ubHkuICovCisJCQlpZiAoZ2xvYmFsc19vbmx5ICYmIHRlICYm IHRlLT50YWcgJiYgKHN0cmNtcCh0ZS0+dGFnLCAiRFJPUF9EQVRBQkFTRSIpID09IDApKQorCQkJ CWNvbnRpbnVlOworCisJCQkvKiBTa2lwIGlmIG5vLXRhYmxlc3BhY2UgaXMgZ2l2ZW4uICovCisJ CQlpZiAocm9wdC0+bm9UYWJsZXNwYWNlICYmIHRlICYmIHRlLT50YWcgJiYKKwkJCQkoKHN0cmNt cCh0ZS0+dGFnLCAiZHVtcFRhYmxlc3BhY2VzIikgPT0gMCkgfHwKKwkJCQkgKHN0cmNtcCh0ZS0+ dGFnLCAiZHJvcFRhYmxlc3BhY2VzIikgPT0gMCkpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBT a2lwIGNyZWF0ZSBhbmQgYWx0ZXIgY29tbWFuZCBmb3IgY3VycmVudCByb2xlLiAqLworCQkJaWYg KCFyb3B0LT5maWxlbmFtZSAmJiB0ZSAmJiB0ZS0+dGFnICYmCisJCQkJCShzdHJjbXAodGUtPnRh ZywgIkRVTVBfQ1VSUkVOVF9ST0xFIikgPT0gMCkpCisJCQkJY29udGludWU7CisKIAkJCXN3aXRj aCAoX3RvY0VudHJ5UmVzdG9yZVBhc3ModGUpKQogCQkJewogCQkJCWNhc2UgUkVTVE9SRV9QQVNT X01BSU46CkBAIC0xMzE2LDcgKzEzMzYsNyBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhY KQogCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lKQotCQlTZXRP dXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Npb25fc3BlYyk7CisJCVNldE91 dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjLCBmYWxzZSk7CiAK IAlpZiAoc3RyZnRpbWUoc3RhbXBfc3RyLCBzaXplb2Yoc3RhbXBfc3RyKSwgUEdEVU1QX1NUUkZU SU1FX0ZNVCwKIAkJCQkgbG9jYWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSkpID09IDApCkBAIC0xNjk1 LDcgKzE3MTUsOCBAQCBhcmNocHJpbnRmKEFyY2hpdmUgKkFILCBjb25zdCBjaGFyICpmbXQsLi4u KQogCiBzdGF0aWMgdm9pZAogU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFy ICpmaWxlbmFtZSwKLQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz aW9uX3NwZWMpCisJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lv bl9zcGVjLAorCQkgIGJvb2wgYXBwZW5kX2RhdGEpCiB7CiAJQ29tcHJlc3NGaWxlSGFuZGxlICpD Rkg7CiAJY29uc3QgY2hhciAqbW9kZTsKQEAgLTE3MTUsNyArMTczNiw3IEBAIFNldE91dHB1dChB cmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJZWxzZQogCQlmbiA9IGZp bGVubyhzdGRvdXQpOwogCi0JaWYgKEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQorCWlmIChh cHBlbmRfZGF0YSB8fCBBSC0+bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkKIAkJbW9kZSA9IFBHX0JJ TkFSWV9BOwogCWVsc2UKIAkJbW9kZSA9IFBHX0JJTkFSWV9XOwpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9hcmNoaXZlci5oCmluZGV4IDMyNWI1M2ZjOWJkLi4zNjUwNzNiM2VhZSAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfYXJjaGl2ZXIuaApAQCAtMzk0LDYgKzM5NCw3IEBAIHN0cnVjdCBfdG9jRW50 cnkKIAogZXh0ZXJuIGludAlwYXJhbGxlbF9yZXN0b3JlKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NF bnRyeSAqdGUpOwogZXh0ZXJuIHZvaWQgb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFI WCk7CitleHRlcm4gdm9pZCByZXBsYWNlX29uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZlICpB SFgpOwogCiBleHRlcm4gdm9pZCB3YXJuX29yX2V4aXRfaG9ycmlibHkoQXJjaGl2ZUhhbmRsZSAq QUgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pIHBnX2F0dHJpYnV0ZV9wcmludGYoMiwgMyk7CiAKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX3Rhci5jCmluZGV4IGI1YmEzYjQ2ZGQ5Li44MThiODBhOTM2OSAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYworKysgYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX3Rhci5jCkBAIC04MjYsNyArODI2LDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNo aXZlSGFuZGxlICpBSCkKIAkJc2F2VmVyYm9zZSA9IEFILT5wdWJsaWMudmVyYm9zZTsKIAkJQUgt PnB1YmxpYy52ZXJib3NlID0gMDsKIAotCQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBBSCk7 CisJCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFILCBmYWxzZSwgZmFsc2UpOwogCiAJCVNl dEFyY2hpdmVPcHRpb25zKChBcmNoaXZlICopIEFILCBzYXZEb3B0LCBzYXZSb3B0KTsKIApkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmMKaW5kZXggMDc4ZWU4NTAwYWQuLmY0ODhiZGZiNjc0IDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTEz MDksNyArMTMwOSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIHJpZ2h0IG5v dy4KIAkgKi8KIAlpZiAocGxhaW5UZXh0KQotCQlSZXN0b3JlQXJjaGl2ZShmb3V0KTsKKwkJUmVz dG9yZUFyY2hpdmUoZm91dCwgZmFsc2UsIGZhbHNlKTsKIAogCUNsb3NlQXJjaGl2ZShmb3V0KTsK IApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wYWxsLmMKaW5kZXggMzBmZWNkMGMyNTIuLjhkZjY1OWVlYWMxIDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9w Z19kdW1wYWxsLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdf dXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgor I2luY2x1ZGUgInBnX2JhY2t1cF9hcmNoaXZlci5oIgogCiAvKiB2ZXJzaW9uIHN0cmluZyB3ZSBl eHBlY3QgYmFjayBmcm9tIHBnX2R1bXAgKi8KICNkZWZpbmUgUEdEVU1QX1ZFUlNJT05TVFIgInBn X2R1bXAgKFBvc3RncmVTUUwpICIgUEdfVkVSU0lPTiAiXG4iCkBAIC02NSw5ICs2Niw5IEBAIHN0 YXRpYyB2b2lkIGRyb3BUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHVt cFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkcm9wREJzKFBHY29ubiAq Y29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNo YXIgKnVzZXJuYW1lKTsKLXN0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKTsK K3N0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uLCBib29sIG91dHB1dF9jbGVh bik7CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0YW1wKGNvbnN0IGNoYXIgKm1zZyk7Ci1zdGF0aWMg aW50CXJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRz KTsKK3N0YXRpYyBpbnQJcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAq Y3JlYXRlX29wdHMsIGNoYXIgKmRiZmlsZSk7CiBzdGF0aWMgdm9pZCBidWlsZFNoU2VjTGFiZWxz KFBHY29ubiAqY29ubiwKIAkJCQkJCQkgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1lLCBPaWQgb2Jq ZWN0SWQsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNoYXIgKm9iam5hbWUs CkBAIC03NiwxMSArNzcsMTMgQEAgc3RhdGljIHZvaWQgZXhlY3V0ZUNvbW1hbmQoUEdjb25uICpj b25uLCBjb25zdCBjaGFyICpxdWVyeSk7CiBzdGF0aWMgdm9pZCBleHBhbmRfZGJuYW1lX3BhdHRl cm5zKFBHY29ubiAqY29ubiwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybnMsCiAJCQkJCQkJCSAg IFNpbXBsZVN0cmluZ0xpc3QgKm5hbWVzKTsKIHN0YXRpYyB2b2lkIHJlYWRfZHVtcGFsbF9maWx0 ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuKTsKK3N0 YXRpYyBBcmNoaXZlRm9ybWF0IHBhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpOwor c3RhdGljIGludAljcmVhdGVEdW1wSWQodm9pZCk7CitzdGF0aWMgdm9pZCBjcmVhdGVPbmVBcmNo aXZlRW50cnkoY29uc3QgY2hhciAqcXVlcnksIGNvbnN0IGNoYXIgKnRhZyk7CiAKIHN0YXRpYyBj aGFyIHBnX2R1bXBfYmluW01BWFBHUEFUSF07CiBzdGF0aWMgUFFFeHBCdWZmZXIgcGdkdW1wb3B0 czsKIHN0YXRpYyBjb25zdCBjaGFyICpjb25uc3RyID0gIiI7Ci1zdGF0aWMgYm9vbCBvdXRwdXRf Y2xlYW4gPSBmYWxzZTsKIHN0YXRpYyBib29sIHNraXBfYWNscyA9IGZhbHNlOwogc3RhdGljIGJv b2wgdmVyYm9zZSA9IGZhbHNlOwogc3RhdGljIGJvb2wgZG9zeW5jID0gdHJ1ZTsKQEAgLTEyMyw2 ICsxMjYsMTAgQEAgc3RhdGljIFNpbXBsZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhjbHVkZV9wYXR0 ZXJucyA9IHtOVUxMLCBOVUxMfTsKIHN0YXRpYyBTaW1wbGVTdHJpbmdMaXN0IGRhdGFiYXNlX2V4 Y2x1ZGVfbmFtZXMgPSB7TlVMTCwgTlVMTH07CiAKIHN0YXRpYyBjaGFyICpyZXN0cmljdF9rZXk7 CitzdGF0aWMgQXJjaGl2ZSAqZm91dCA9IE5VTEw7CitzdGF0aWMgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjID0gezB9Oworc3RhdGljIGludAlkdW1wSWRWYWwgPSAw Oworc3RhdGljIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKIAogaW50 CiBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCkBAIC0xNDgsNiArMTU1LDcgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCQl7InBhc3N3b3JkIiwgbm9fYXJndW1lbnQsIE5VTEws ICdXJ30sCiAJCXsibm8tcHJpdmlsZWdlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAneCd9LAogCQl7 Im5vLWFjbCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAneCd9LAorCQl7ImZvcm1hdCIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCAnRid9LAogCiAJCS8qCiAJCSAqIHRoZSBmb2xsb3dpbmcgb3B0aW9u cyBkb24ndCBoYXZlIGFuIGVxdWl2YWxlbnQgc2hvcnQgb3B0aW9uIGxldHRlcgpAQCAtMTk3LDYg KzIwNSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAljaGFyCSAgICpwZ2RiID0g TlVMTDsKIAljaGFyCSAgICp1c2Vfcm9sZSA9IE5VTEw7CiAJY29uc3QgY2hhciAqZHVtcGVuY29k aW5nID0gTlVMTDsKKwljb25zdCBjaGFyICpmb3JtYXRfbmFtZSA9ICJwIjsKIAl0cml2YWx1ZQlw cm9tcHRfcGFzc3dvcmQgPSBUUklfREVGQVVMVDsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxzZTsK IAlib29sCQlnbG9iYWxzX29ubHkgPSBmYWxzZTsKQEAgLTIwNyw2ICsyMTYsNyBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiAJaW50CQkJYywKIAkJCQlyZXQ7CiAJaW50CQkJb3B0aW5k ZXg7CisJRHVtcE9wdGlvbnMgZG9wdDsKIAogCXBnX2xvZ2dpbmdfaW5pdChhcmd2WzBdKTsKIAlw Z19sb2dnaW5nX3NldF9sZXZlbChQR19MT0dfV0FSTklORyk7CkBAIC0yNDQsOCArMjU0LDkgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCX0KIAogCXBnZHVtcG9wdHMgPSBjcmVhdGVQ UUV4cEJ1ZmZlcigpOworCUluaXREdW1wT3B0aW9ucygmZG9wdCk7CiAKLQl3aGlsZSAoKGMgPSBn ZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNkOkU6ZjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9u Z19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhh cmdjLCBhcmd2LCAiYWNkOkU6ZjpGOmdoOmw6T3A6cnNTOnRVOnZ3V3giLCBsb25nX29wdGlvbnMs ICZvcHRpbmRleCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQogCQl7CkBAIC0yNTUsNyArMjY2 LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCWJyZWFrOwogCiAJCQljYXNl ICdjJzoKLQkJCQlvdXRwdXRfY2xlYW4gPSB0cnVlOworCQkJCWRvcHQub3V0cHV0Q2xlYW4gPSB0 cnVlOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICdkJzoKQEAgLTI3Myw3ICsyODQsOSBAQCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1w b3B0cywgIiAtZiAiKTsKIAkJCQlhcHBlbmRTaGVsbFN0cmluZyhwZ2R1bXBvcHRzLCBmaWxlbmFt ZSk7CiAJCQkJYnJlYWs7Ci0KKwkJCWNhc2UgJ0YnOgorCQkJCWZvcm1hdF9uYW1lID0gcGdfc3Ry ZHVwKG9wdGFyZyk7CisJCQkJYnJlYWs7CiAJCQljYXNlICdnJzoKIAkJCQlnbG9iYWxzX29ubHkg PSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtMzEzLDYgKzMyNiw3IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIAogCQkJY2FzZSAnVSc6CiAJCQkJcGd1c2VyID0gcGdfc3RyZHVwKG9wdGFy Zyk7CisJCQkJZG9wdC5jcGFyYW1zLnVzZXJuYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJ YnJlYWs7CiAKIAkJCWNhc2UgJ3YnOgpAQCAtNDIyLDcgKzQzNiw3IEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQogCi0JaWYgKGlmX2V4aXN0cyAm JiAhb3V0cHV0X2NsZWFuKQorCWlmIChpZl9leGlzdHMgJiYgIWRvcHQub3V0cHV0Q2xlYW4pCiAJ CXBnX2ZhdGFsKCJvcHRpb24gJXMgcmVxdWlyZXMgb3B0aW9uICVzIiwKIAkJCQkgIi0taWYtZXhp c3RzIiwgIi1jLy0tY2xlYW4iKTsKIApAQCAtNDM0LDYgKzQ0OCwyNyBAQCBtYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCiAJCWV4aXRfbmljZWx5KDEpOwogCX0KIAorCS8qIEdldCBmb3JtYXQg Zm9yIGR1bXAuICovCisJYXJjaER1bXBGb3JtYXQgPSBwYXJzZUR1bXBGb3JtYXQoZm9ybWF0X25h bWUpOworCisJLyoKKwkgKiBJZiBhIG5vbi1wbGFpbiBmb3JtYXQgaXMgc3BlY2lmaWVkLCBhIGZp bGUgbmFtZSBpcyBhbHNvIHJlcXVpcmVkIGFzIHRoZQorCSAqIHBhdGggdG8gdGhlIG1haW4gZGly ZWN0b3J5LgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCAmJgorCQkoIWZp bGVuYW1lIHx8IHN0cmNtcChmaWxlbmFtZSwgIiIpID09IDApKQorCXsKKwkJcGdfbG9nX2Vycm9y KCJvcHRpb24gJXM9ZHxjfHQgcmVxdWlyZXMgb3B0aW9uICVzIiwKKwkJCQkJICItRi8tLWZvcm1h dCIsICItZi8tLWZpbGUiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwi IGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJ fQorCisJLyogcmVzdHJpY3Qta2V5IGlzIG9ubHkgc3VwcG9ydGVkIHdpdGggLS1mb3JtYXQ9cGxh aW4gKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwgJiYgcmVzdHJpY3Rfa2V5KQor CQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAlcz1wbGFpbiIsCisJ CQkJICItLXJlc3RyaWN0LWtleSIsICItLWZvcm1hdCIpOworCiAJLyoKIAkgKiBJZiBwYXNzd29y ZCB2YWx1ZXMgYXJlIG5vdCByZXF1aXJlZCBpbiB0aGUgZHVtcCwgc3dpdGNoIHRvIHVzaW5nCiAJ ICogcGdfcm9sZXMgd2hpY2ggaXMgZXF1YWxseSB1c2VmdWwsIGp1c3QgbW9yZSBsaWtlbHkgdG8g aGF2ZSB1bnJlc3RyaWN0ZWQKQEAgLTQ5NCw2ICs1MjksMjcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCWlmIChzZXF1ZW5jZV9kYXRhKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihw Z2R1bXBvcHRzLCAiIC0tc2VxdWVuY2UtZGF0YSIpOwogCisJLyoKKwkgKiBPcGVuIHRoZSBvdXRw dXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQuICBJZiByZXF1aXJlZCwK KwkgKiB0aGVuIGNyZWF0ZSBuZXcgZGlyZWN0b3J5LgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1h dCAhPSBhcmNoTnVsbCkKKwl7CisJCUFzc2VydChmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRlIG5l dyBkaXJlY3Rvcnkgb3IgYWNjZXB0IHRoZSBlbXB0eSBleGlzdGluZyBkaXJlY3RvcnkuICovCisJ CWNyZWF0ZV9vcl9vcGVuX2RpcihmaWxlbmFtZSk7CisJfQorCWVsc2UgaWYgKGZpbGVuYW1lKQor CXsKKwkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFPUEYpCisJ CQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJ CSBmaWxlbmFtZSk7CisJfQorCWVsc2UKKwkJT1BGID0gc3Rkb3V0OworCiAJLyoKIAkgKiBJZiB5 b3UgZG9uJ3QgcHJvdmlkZSBhIHJlc3RyaWN0IGtleSwgb25lIHdpbGwgYmUgYXBwb2ludGVkIGZv ciB5b3UuCiAJICovCkBAIC01NDMsMTkgKzU5OSw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKIAlleHBhbmRfZGJuYW1lX3BhdHRlcm5zKGNvbm4sICZkYXRhYmFzZV9leGNsdWRlX3Bh dHRlcm5zLAogCQkJCQkJICAgJmRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMpOwogCi0JLyoKLQkgKiBP cGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQKLQkg Ki8KLQlpZiAoZmlsZW5hbWUpCi0JewotCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZ X1cpOwotCQlpZiAoIU9QRikKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmls ZSBcIiVzXCI6ICVtIiwKLQkJCQkJIGZpbGVuYW1lKTsKLQl9Ci0JZWxzZQotCQlPUEYgPSBzdGRv dXQ7Ci0KIAkvKgogCSAqIFNldCB0aGUgY2xpZW50IGVuY29kaW5nIGlmIHJlcXVlc3RlZC4KIAkg Ki8KQEAgLTU5MywzNSArNjM2LDkwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlp ZiAocXVvdGVfYWxsX2lkZW50aWZpZXJzKQogCQlleGVjdXRlQ29tbWFuZChjb25uLCAiU0VUIHF1 b3RlX2FsbF9pZGVudGlmaWVycyA9IHRydWUiKTsKIAotCWZwcmludGYoT1BGLCAiLS1cbi0tIFBv c3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxuXG4iKTsKLQlpZiAodmVyYm9zZSkK KwlpZiAodmVyYm9zZSAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJZHVtcFRpbWVz dGFtcCgiU3RhcnRlZCBvbiIpOwogCi0JLyoKLQkgKiBFbnRlciByZXN0cmljdGVkIG1vZGUgdG8g YmxvY2sgYW55IHVuZXhwZWN0ZWQgcHNxbCBtZXRhLWNvbW1hbmRzLiAgQQotCSAqIG1hbGljaW91 cyBzb3VyY2UgbWlnaHQgdHJ5IHRvIGluamVjdCBhIHZhcmlldHkgb2YgdGhpbmdzIHZpYSBib2d1 cwotCSAqIHJlc3BvbnNlcyB0byBxdWVyaWVzLiAgV2hpbGUgd2UgY2Fubm90IHByZXZlbnQgc3Vj aCBzb3VyY2VzIGZyb20KLQkgKiBhZmZlY3RpbmcgdGhlIGRlc3RpbmF0aW9uIGF0IHJlc3RvcmUg dGltZSwgd2UgY2FuIGJsb2NrIHBzcWwKLQkgKiBtZXRhLWNvbW1hbmRzIHNvIHRoYXQgdGhlIGNs aWVudCBtYWNoaW5lIHRoYXQgcnVucyBwc3FsIHdpdGggdGhlIGR1bXAKLQkgKiBvdXRwdXQgcmVt YWlucyB1bmFmZmVjdGVkLgotCSAqLwotCWZwcmludGYoT1BGLCAiXFxyZXN0cmljdCAlc1xuXG4i LCByZXN0cmljdF9rZXkpOworCS8qIGNyZWF0ZSBhIGFyY2hpdmUgZmlsZSBmb3IgZ2xvYmFsIGNv bW1hbmRzLiAqLworCWlmIChmaWxlbmFtZSAmJiBhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkK Kwl7CisJCWNoYXIgICAgICAgICAgICBnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOwogCi0JLyoKLQkg KiBXZSB1c2VkIHRvIGVtaXQgXGNvbm5lY3QgcG9zdGdyZXMgaGVyZSwgYnV0IHRoYXQgc2VydmVk IG5vIHB1cnBvc2UKLQkgKiBvdGhlciB0aGFuIHRvIGJyZWFrIHRoaW5ncyBmb3IgaW5zdGFsbGF0 aW9ucyB3aXRob3V0IGEgcG9zdGdyZXMKLQkgKiBkYXRhYmFzZS4gIEV2ZXJ5dGhpbmcgd2UncmUg cmVzdG9yaW5nIGhlcmUgaXMgYSBnbG9iYWwsIHNvIHdoaWNoZXZlcgotCSAqIGRhdGFiYXNlIHdl J3JlIGNvbm5lY3RlZCB0byBhdCB0aGUgbW9tZW50IGlzIGZpbmUuCi0JICovCisJCS8qIFNldCBm aWxlIHBhdGggZm9yIGdsb2JhbCBzcWwgY29tbWFuZHMuICovCisJCXNucHJpbnRmKGdsb2JhbF9w YXRoLCBNQVhQR1BBVEgsICIlcy90b2MuZ2xvIiwgZmlsZW5hbWUpOworCisJCS8qIE9wZW4gdGhl IG91dHB1dCBmaWxlICovCisJCWZvdXQgPSBDcmVhdGVBcmNoaXZlKGdsb2JhbF9wYXRoLCBhcmNo Q3VzdG9tLCBjb21wcmVzc2lvbl9zcGVjLAorCQkJCWRvc3luYywgYXJjaE1vZGVXcml0ZSwgTlVM TCwgREFUQV9ESVJfU1lOQ19NRVRIT0RfRlNZTkMpOwogCi0JLyogUmVzdG9yZSB3aWxsIG5lZWQg dG8gd3JpdGUgdG8gdGhlIHRhcmdldCBjbHVzdGVyICovCi0JZnByaW50ZihPUEYsICJTRVQgZGVm YXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG5cbiIpOworCQkvKiBNYWtlIGR1bXAg b3B0aW9ucyBhY2Nlc3NpYmxlIHJpZ2h0IGF3YXkgKi8KKwkJU2V0QXJjaGl2ZU9wdGlvbnMoZm91 dCwgJmRvcHQsIE5VTEwpOworCisJCSgoQXJjaGl2ZUhhbmRsZSAqKSBmb3V0KS0+Y29ubmVjdGlv biA9IGNvbm47CisJCSgoQXJjaGl2ZUhhbmRsZSAqKSBmb3V0KS0+cHVibGljLm51bVdvcmtlcnMg PSAxOworCisJCS8qIFJlZ2lzdGVyIHRoZSBjbGVhbnVwIGhvb2sgKi8KKwkJb25fZXhpdF9jbG9z ZV9hcmNoaXZlKGZvdXQpOworCisJCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBob3cgbm9pc3kg dG8gYmUgKi8KKwkJZm91dC0+dmVyYm9zZSA9IHZlcmJvc2U7CisKKwkJLyoKKwkJICogV2UgYWxs b3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDkuMiwgYW5kIHVwIHRvIGFueSBtaW5vciByZWxl YXNlCisJCSAqIG9mIG91ciBvd24gbWFqb3IgdmVyc2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9uIGNo ZWNrIGluCisJCSAqIHBnX2R1bXBhbGwuYy4pCisJCSAqLworCQlmb3V0LT5taW5SZW1vdGVWZXJz aW9uID0gOTAyMDA7CisJCWZvdXQtPm1heFJlbW90ZVZlcnNpb24gPSAoUEdfVkVSU0lPTl9OVU0g LyAxMDApICogMTAwICsgOTk7CisJCWZvdXQtPm51bVdvcmtlcnMgPSAxOwogCi0JLyogUmVwbGlj YXRlIGVuY29kaW5nIGFuZCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgaW4gb3V0cHV0ICov Ci0JZnByaW50ZihPUEYsICJTRVQgY2xpZW50X2VuY29kaW5nID0gJyVzJztcbiIsCisJCWNyZWF0 ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1w XG4tLVxuXG4iLCAiQ09NTUVOVCIpOworCisJCS8qIER1bXAgZGVmYXVsdF90cmFuc2FjdGlvbl9y ZWFkX29ubHksIGVuY29kaW5nIGFuZCBlc2NhcGUgc3RyaW5nLiAqLworCQl7CisJCQlQUUV4cEJ1 ZmZlciBxcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCQkJY29uc3QgY2hhciAqZW5jbmFtZSA9 IHBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2RpbmcpOworCisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihx cnksICJTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG5cbiIpOworCisJ CQkvKiBQdXQgdGhlIGNvcnJlY3QgZW5jb2RpbmcgaW50byB0aGUgYXJjaGl2ZSAqLworCQkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocXJ5LCAiU0VUIGNsaWVudF9lbmNvZGluZyA9ICIpOworCQkJYXBw ZW5kU3RyaW5nTGl0ZXJhbEFIKHFyeSwgZW5jbmFtZSwgZm91dCk7CisJCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihxcnksICI7XG4iKTsKKworCQkJLyogUHV0IHRoZSBjb3JyZWN0IGVzY2FwZSBzdHJp bmcgYmVoYXZpb3IgaW50byB0aGUgYXJjaGl2ZS4gKi8KKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHFy eSwgIlNFVCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgPSBvbjtcbiIpOworCQkJY3JlYXRl T25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkRVTVBTRVRDT01NQU5EUyIpOworCQkJZGVzdHJv eVBRRXhwQnVmZmVyKHFyeSk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRW50ZXIg cmVzdHJpY3RlZCBtb2RlIHRvIGJsb2NrIGFueSB1bmV4cGVjdGVkIHBzcWwgbWV0YS1jb21tYW5k cy4gIEEKKwkJICogbWFsaWNpb3VzIHNvdXJjZSBtaWdodCB0cnkgdG8gaW5qZWN0IGEgdmFyaWV0 eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCisJCSAqIHJlc3BvbnNlcyB0byBxdWVyaWVzLiAgV2hpbGUg d2UgY2Fubm90IHByZXZlbnQgc3VjaCBzb3VyY2VzIGZyb20KKwkJICogYWZmZWN0aW5nIHRoZSBk ZXN0aW5hdGlvbiBhdCByZXN0b3JlIHRpbWUsIHdlIGNhbiBibG9jayBwc3FsCisJCSAqIG1ldGEt Y29tbWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1hY2hpbmUgdGhhdCBydW5zIHBzcWwgd2l0aCB0 aGUgZHVtcAorCQkgKiBvdXRwdXQgcmVtYWlucyB1bmFmZmVjdGVkLgorCQkgKi8KKwkJZnByaW50 ZihPUEYsICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisKKwkJLyoKKwkJICog V2UgdXNlZCB0byBlbWl0IFxjb25uZWN0IHBvc3RncmVzIGhlcmUsIGJ1dCB0aGF0IHNlcnZlZCBu byBwdXJwb3NlCisJCSAqIG90aGVyIHRoYW4gdG8gYnJlYWsgdGhpbmdzIGZvciBpbnN0YWxsYXRp b25zIHdpdGhvdXQgYSBwb3N0Z3JlcworCQkgKiBkYXRhYmFzZS4gIEV2ZXJ5dGhpbmcgd2UncmUg cmVzdG9yaW5nIGhlcmUgaXMgYSBnbG9iYWwsIHNvIHdoaWNoZXZlcgorCQkgKiBkYXRhYmFzZSB3 ZSdyZSBjb25uZWN0ZWQgdG8gYXQgdGhlIG1vbWVudCBpcyBmaW5lLgorCQkgKi8KKworCQkvKiBS ZXN0b3JlIHdpbGwgbmVlZCB0byB3cml0ZSB0byB0aGUgdGFyZ2V0IGNsdXN0ZXIgKi8KKwkJZnBy aW50ZihPUEYsICJTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG5cbiIp OworCisJCS8qIFJlcGxpY2F0ZSBlbmNvZGluZyBhbmQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJp bmdzIGluIG91dHB1dCAqLworCQlmcHJpbnRmKE9QRiwgIlNFVCBjbGllbnRfZW5jb2RpbmcgPSAn JXMnO1xuIiwKIAkJCXBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2RpbmcpKTsKLQlmcHJpbnRmKE9Q RiwgIlNFVCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgPSBvbjtcbiIpOwotCWZwcmludGYo T1BGLCAiXG4iKTsKKwkJZnByaW50ZihPUEYsICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJp bmdzID0gb247XG4iKTsKKwkJZnByaW50ZihPUEYsICJcbiIpOworCX0KIAogCWlmICghZGF0YV9v bmx5ICYmICFzdGF0aXN0aWNzX29ubHkgJiYgIW5vX3NjaGVtYSkKIAl7CkBAIC02MzEsNyArNzI5 LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkgKiBhbmQgdGFibGVzcGFjZXMg bmV2ZXIgZGVwZW5kIG9uIGVhY2ggb3RoZXIuICBSb2xlcyBjb3VsZCBoYXZlCiAJCSAqIGdyYW50 cyB0byBlYWNoIG90aGVyLCBidXQgRFJPUCBST0xFIHdpbGwgY2xlYW4gdGhvc2UgdXAgc2lsZW50 bHkuCiAJCSAqLwotCQlpZiAob3V0cHV0X2NsZWFuKQorCQlpZiAoZG9wdC5vdXRwdXRDbGVhbikK IAkJewogCQkJaWYgKCFnbG9iYWxzX29ubHkgJiYgIXJvbGVzX29ubHkgJiYgIXRhYmxlc3BhY2Vz X29ubHkpCiAJCQkJZHJvcERCcyhjb25uKTsKQEAgLTY2NSwyNyArNzYzLDQyIEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCWR1bXBUYWJsZXNwYWNlcyhjb25uKTsKIAl9CiAKLQkv KgotCSAqIEV4aXQgcmVzdHJpY3RlZCBtb2RlIGp1c3QgYmVmb3JlIGR1bXBpbmcgdGhlIGRhdGFi YXNlcy4gIHBnX2R1bXAgd2lsbAotCSAqIGhhbmRsZSBlbnRlcmluZyByZXN0cmljdGVkIG1vZGUg YWdhaW4gYXMgYXBwcm9wcmlhdGUuCi0JICovCi0JZnByaW50ZihPUEYsICJcXHVucmVzdHJpY3Qg JXNcblxuIiwgcmVzdHJpY3Rfa2V5KTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwp CisJeworCQkvKgorCQkgKiBFeGl0IHJlc3RyaWN0ZWQgbW9kZSBqdXN0IGJlZm9yZSBkdW1waW5n IHRoZSBkYXRhYmFzZXMuICBwZ19kdW1wCisJCSAqIHdpbGwgaGFuZGxlIGVudGVyaW5nIHJlc3Ry aWN0ZWQgbW9kZSBhZ2FpbiBhcyBhcHByb3ByaWF0ZS4KKwkJICovCisJCWZwcmludGYoT1BGLCAi XFx1bnJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisJfQogCiAJaWYgKCFnbG9iYWxz X29ubHkgJiYgIXJvbGVzX29ubHkgJiYgIXRhYmxlc3BhY2VzX29ubHkpCi0JCWR1bXBEYXRhYmFz ZXMoY29ubik7Ci0KLQlQUWZpbmlzaChjb25uKTsKKwkJZHVtcERhdGFiYXNlcyhjb25uLCBkb3B0 Lm91dHB1dENsZWFuKTsKIAotCWlmICh2ZXJib3NlKQorCWlmICh2ZXJib3NlICYmIGFyY2hEdW1w Rm9ybWF0ID09IGFyY2hOdWxsKQogCQlkdW1wVGltZXN0YW1wKCJDb21wbGV0ZWQgb24iKTsKLQlm cHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21w bGV0ZVxuLS1cblxuIik7CiAKLQlpZiAoZmlsZW5hbWUpCisJaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNs dXN0ZXIgZHVtcCBjb21wbGV0ZVxuLS1cblxuIik7CisKKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0g YXJjaE51bGwpCisJeworCQlSZXN0b3JlT3B0aW9ucyAqcm9wdDsKKworCQljcmVhdGVPbmVBcmNo aXZlRW50cnkoIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0 ZVxuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwkJcm9wdCA9IE5ld1Jlc3RvcmVPcHRpb25zKCk7CisJ CVNldEFyY2hpdmVPcHRpb25zKGZvdXQsICZkb3B0LCByb3B0KTsKKworCQkvKiBNYXJrIHdoaWNo IGVudHJpZXMgc2hvdWxkIGJlIG91dHB1dCAqLworCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRp b25zKGZvdXQpOworCQlDbG9zZUFyY2hpdmUoZm91dCk7CisJfQorCWVsc2UgaWYgKGZpbGVuYW1l KQogCXsKIAkJZmNsb3NlKE9QRik7CiAKIAkJLyogc3luYyB0aGUgcmVzdWx0aW5nIGZpbGUsIGVy cm9ycyBhcmUgbm90IGZhdGFsICovCi0JCWlmIChkb3N5bmMpCisJCWlmIChkb3N5bmMgJiYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkKIAkJCSh2b2lkKSBmc3luY19mbmFtZShmaWxlbmFt ZSwgZmFsc2UpOwogCX0KIApAQCAtNjk2LDEyICs4MDksMTQgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogc3RhdGljIHZvaWQKIGhlbHAodm9pZCkKIHsKLQlwcmludGYoXygiJXMgZXhw b3J0cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwgc2NyaXB0LlxuXG4i KSwgcHJvZ25hbWUpOworCXByaW50ZihfKCIlcyBleHBvcnRzIGEgUG9zdGdyZVNRTCBkYXRhYmFz ZSBjbHVzdGVyIGFzIGFuIFNRTCBzY3JpcHQgb3IgdG8gb3RoZXIgZm9ybWF0cy5cblxuIiksIHBy b2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7CiAJcHJpbnRmKF8oIiAgJXMgW09QVElP Tl0uLi5cbiIpLCBwcm9nbmFtZSk7CiAKIAlwcmludGYoXygiXG5HZW5lcmFsIG9wdGlvbnM6XG4i KSk7CiAJcHJpbnRmKF8oIiAgLWYsIC0tZmlsZT1GSUxFTkFNRSAgICAgICAgICBvdXRwdXQgZmls ZSBuYW1lXG4iKSk7CisJcHJpbnRmKF8oIiAgLUYsIC0tZm9ybWF0PWN8ZHx0fHAgICAgICAgICBv dXRwdXQgZmlsZSBmb3JtYXQgKGN1c3RvbSwgZGlyZWN0b3J5LCB0YXIsXG4iCisJCQkgIiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbiB0ZXh0IChkZWZhdWx0KSlcbiIpKTsKIAlw cmludGYoXygiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICAgIHZlcmJvc2UgbW9kZVxuIikp OwogCXByaW50ZihfKCIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgICAgb3V0cHV0IHZlcnNp b24gaW5mb3JtYXRpb24sIHRoZW4gZXhpdFxuIikpOwogCXByaW50ZihfKCIgIC0tbG9jay13YWl0 LXRpbWVvdXQ9VElNRU9VVCAgZmFpbCBhZnRlciB3YWl0aW5nIFRJTUVPVVQgZm9yIGEgdGFibGUg bG9ja1xuIikpOwpAQCAtNzc2LDYgKzg5MSw3IEBAIHN0YXRpYyB2b2lkCiBkcm9wUm9sZXMoUEdj b25uICpjb25uKQogewogCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJ UFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlQR3Jlc3VsdCAgICpy ZXM7CiAJaW50CQkJaV9yb2xuYW1lOwogCWludAkJCWk7CkBAIC03OTIsMTIgKzkwOCwxNyBAQCBk cm9wUm9sZXMoUEdjb25uICpjb25uKQogCQkJCQkJICAiRlJPTSAlcyAiCiAJCQkJCQkgICJPUkRF UiBCWSAxIiwgcm9sZV9jYXRhbG9nKTsKIAotCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYt PmRhdGEpOworCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEsIGZvdXQgPyB0cnVl IDogZmFsc2UpOwogCiAJaV9yb2xuYW1lID0gUFFmbnVtYmVyKHJlcywgInJvbG5hbWUiKTsKIAog CWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3Agcm9s ZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJ ZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCByb2xlc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNy ZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIERyb3Agcm9sZXNcbi0tXG5cbiIsICJDT01NRU5U Iik7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewpAQCAt ODA1LDE1ICs5MjYsMjEgQEAgZHJvcFJvbGVzKFBHY29ubiAqY29ubikKIAogCQlyb2xlbmFtZSA9 IFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbG5hbWUpOwogCi0JCWZwcmludGYoT1BGLCAiRFJPUCBS T0xFICVzJXM7XG4iLAotCQkJCWlmX2V4aXN0cyA/ICJJRiBFWElTVFMgIiA6ICIiLAotCQkJCWZt dElkKHJvbGVuYW1lKSk7CisJCWFwcGVuZFBRRXhwQnVmZmVyKGRlbFFyeSwgIkRST1AgUk9MRSAl cyVzO1xuIiwKKwkJCQkJCSAgaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDogIiIsCisJCQkJCQkg IGZtdElkKHJvbGVuYW1lKSk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQor CQkJZnByaW50ZihPUEYsICIlcyIsIGRlbFFyeS0+ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9u ZUFyY2hpdmVFbnRyeShkZWxRcnktPmRhdGEsICJkcm9wUm9sZXMiKTsKIAl9CiAKIAlQUWNsZWFy KHJlcyk7CiAJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAKLQlmcHJpbnRmKE9QRiwgIlxuXG4i KTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5c biIpOwogfQogCiAvKgpAQCAtODc3LDcgKzEwMDQsNyBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25u KQogCQkJCQkJICAiRlJPTSAlcyAiCiAJCQkJCQkgICJPUkRFUiBCWSAyIiwgcm9sZV9jYXRhbG9n KTsKIAotCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEpOworCXJlcyA9IGV4ZWN1 dGVRdWVyeShjb25uLCBidWYtPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaV9vaWQg PSBQUWZudW1iZXIocmVzLCAib2lkIik7CiAJaV9yb2xuYW1lID0gUFFmbnVtYmVyKHJlcywgInJv bG5hbWUiKTsKQEAgLTg5NSwxMSArMTAyMiwxNyBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQog CWlfaXNfY3VycmVudF91c2VyID0gUFFmbnVtYmVyKHJlcywgImlzX2N1cnJlbnRfdXNlciIpOwog CiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZXNc bi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnBy aW50ZihPUEYsICItLVxuLS0gUm9sZXNcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVB cmNoaXZlRW50cnkoIi0tXG4tLSBSb2xlc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9CiAKIAlm b3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CiAJCWNvbnN0IGNoYXIgKnJv bGVuYW1lOworCQlib29sCWN1cnJlbnRfcm9sZSA9IGZhbHNlOwogCQlPaWQJCQlhdXRoX29pZDsK IAogCQlhdXRoX29pZCA9IGF0b29pZChQUWdldHZhbHVlKHJlcywgaSwgaV9vaWQpKTsKQEAgLTkz NSw2ICsxMDY4LDkgQEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIAkJCWFwcGVuZFBRRXhwQnVm ZmVyKGJ1ZiwgIkNSRUFURSBST0xFICVzO1xuIiwgZm10SWQocm9sZW5hbWUpKTsKIAkJYXBwZW5k UFFFeHBCdWZmZXIoYnVmLCAiQUxURVIgUk9MRSAlcyBXSVRIIiwgZm10SWQocm9sZW5hbWUpKTsK IAorCQlpZiAoc3RyY21wKGZtdElkKHJvbGVuYW1lKSwgUFF1c2VyKGNvbm4pKSA9PSAwKQorCQkJ Y3VycmVudF9yb2xlID0gdHJ1ZTsKKwogCQlpZiAoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBp X3JvbHN1cGVyKSwgInQiKSA9PSAwKQogCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoYnVmLCAiIFNV UEVSVVNFUiIpOwogCQllbHNlCkBAIC05OTksNyArMTEzNSwxMCBAQCBkdW1wUm9sZXMoUEdjb25u ICpjb25uKQogCQkJCQkJCSAiUk9MRSIsIHJvbGVuYW1lLAogCQkJCQkJCSBidWYpOwogCi0JCWZw cmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJj aE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJZWxzZQorCQkJY3Jl YXRlT25lQXJjaGl2ZUVudHJ5KGJ1Zi0+ZGF0YSwgY3VycmVudF9yb2xlID8gIkRVTVBfQ1VSUkVO VF9ST0xFIiA6ICJEVU1QX1JPTEUiKTsKIAl9CiAKIAkvKgpAQCAtMTAwNywxNSArMTE0NiwxMyBA QCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQogCSAqIFdlIGRvIGl0IHRoaXMgd2F5IGJlY2F1c2Ug Y29uZmlnIHNldHRpbmdzIGZvciByb2xlcyBjb3VsZCBtZW50aW9uIHRoZQogCSAqIG5hbWVzIG9m IG90aGVyIHJvbGVzLgogCSAqLwotCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYo T1BGLCAiXG4tLVxuLS0gVXNlciBDb25maWd1cmF0aW9uc1xuLS1cbiIpOwotCiAJZm9yIChpID0g MDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJCWR1bXBVc2VyQ29uZmlnKGNvbm4sIFBRZ2V0 dmFsdWUocmVzLCBpLCBpX3JvbG5hbWUpKTsKIAogCVBRY2xlYXIocmVzKTsKIAotCWZwcmludGYo T1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50 ZihPUEYsICJcblxuIik7CiAKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIH0KQEAgLTEwODIs NyArMTIxOSw3IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgIkxF RlQgSk9JTiAlcyB1ZyBvbiB1Zy5vaWQgPSBhLmdyYW50b3IgIgogCQkJCQkgICJXSEVSRSBOT1Qg KHVyLnJvbG5hbWUgfiAnXnBnXycgQU5EIHVtLnJvbG5hbWUgfiAnXnBnXycpIgogCQkJCQkgICJP UkRFUiBCWSAxLDIsMyIsIHJvbGVfY2F0YWxvZywgcm9sZV9jYXRhbG9nLCByb2xlX2NhdGFsb2cp OwotCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEpOworCXJlcyA9IGV4ZWN1dGVR dWVyeShjb25uLCBidWYtPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCWlfcm9sZSA9IFBR Zm51bWJlcihyZXMsICJyb2xlIik7CiAJaV9tZW1iZXIgPSBQUWZudW1iZXIocmVzLCAibWVtYmVy Iik7CiAJaV9ncmFudG9yID0gUFFmbnVtYmVyKHJlcywgImdyYW50b3IiKTsKQEAgLTEwOTQsNyAr MTIzMSwxMiBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCWlfc2V0X29wdGlv biA9IFBRZm51bWJlcihyZXMsICJzZXRfb3B0aW9uIik7CiAKIAlpZiAoUFFudHVwbGVzKHJlcykg PiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBSb2xlIG1lbWJlcnNoaXBzXG4tLVxuXG4iKTsK Kwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAi LS1cbi0tIFJvbGUgbWVtYmVyc2hpcHNcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVB cmNoaXZlRW50cnkoIi0tXG4tLSBSb2xlIG1lbWJlcnNoaXBzXG4tLVxuXG4iLCAiQ09NTUVOVCIp OworCX0KIAogCS8qCiAJICogV2UgY2FuJ3QgZHVtcCB0aGVzZSBHUkFOVCBjb21tYW5kcyBpbiBh cmJpdHJhcnkgb3JkZXIsIGJlY2F1c2UgYSByb2xlCkBAIC0xMTczLDYgKzEzMTUsNyBAQCBkdW1w Um9sZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCQkJCWNoYXIJICAgKmdyYW50b3I7CiAJCQkJ Y2hhcgkgICAqc2V0X29wdGlvbiA9ICJ0cnVlIjsKIAkJCQlib29sCQlmb3VuZDsKKwkJCQlQUUV4 cEJ1ZmZlciBjcmVhUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAogCQkJCS8qIElmIHdlIGFs cmVhZHkgZGlkIHRoaXMgZ3JhbnQsIGRvbid0IGRvIGl0IGFnYWluLiAqLwogCQkJCWlmIChkb25l W2kgLSBzdGFydF0pCkBAIC0xMjI5LDggKzEzNzIsOCBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdj b25uICpjb25uKQogCiAJCQkJLyogR2VuZXJhdGUgdGhlIGFjdHVhbCBHUkFOVCBzdGF0ZW1lbnQu ICovCiAJCQkJcmVzZXRQUUV4cEJ1ZmZlcihvcHRidWYpOwotCQkJCWZwcmludGYoT1BGLCAiR1JB TlQgJXMiLCBmbXRJZChyb2xlKSk7Ci0JCQkJZnByaW50ZihPUEYsICIgVE8gJXMiLCBmbXRJZCht ZW1iZXIpKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjcmVhUXJ5LCAiR1JBTlQgJXMiLCBmbXRJ ZChyb2xlKSk7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoY3JlYVFyeSwgIiBUTyAlcyIsIGZtdElk KG1lbWJlcikpOwogCQkJCWlmICgqYWRtaW5fb3B0aW9uID09ICd0JykKIAkJCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIob3B0YnVmLCAiQURNSU4gT1BUSU9OIik7CiAJCQkJaWYgKGR1bXBfZ3JhbnRf b3B0aW9ucykKQEAgLTEyNTEsMTAgKzEzOTQsMTUgQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29u biAqY29ubikKIAkJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIob3B0YnVmLCAiU0VUIEZBTFNFIik7 CiAJCQkJfQogCQkJCWlmIChvcHRidWYtPmRhdGFbMF0gIT0gJ1wwJykKLQkJCQkJZnByaW50ZihP UEYsICIgV0lUSCAlcyIsIG9wdGJ1Zi0+ZGF0YSk7CisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGNy ZWFRcnksICIgV0lUSCAlcyIsIG9wdGJ1Zi0+ZGF0YSk7CiAJCQkJaWYgKGR1bXBfZ3JhbnRvcnMp Ci0JCQkJCWZwcmludGYoT1BGLCAiIEdSQU5URUQgQlkgJXMiLCBmbXRJZChncmFudG9yKSk7Ci0J CQkJZnByaW50ZihPUEYsICI7XG4iKTsKKwkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoY3JlYVFyeSwg IiBHUkFOVEVEIEJZICVzIiwgZm10SWQoZ3JhbnRvcikpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVy KGNyZWFRcnksICI7XG4iKTsKKworCQkJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkK KwkJCQkJZnByaW50ZihPUEYsICIlcyIsIGNyZWFRcnktPmRhdGEpOworCQkJCWVsc2UKKwkJCQkJ Y3JlYXRlT25lQXJjaGl2ZUVudHJ5KGNyZWFRcnktPmRhdGEsICJkdW1wUm9sZU1lbWJlcnNoaXAi KTsKIAkJCX0KIAkJfQogCkBAIC0xMjY2LDcgKzE0MTQsOCBAQCBkdW1wUm9sZU1lbWJlcnNoaXAo UEdjb25uICpjb25uKQogCVBRY2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsK IAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAtMTI5MSwxMCArMTQ0MCwxNSBA QCBkdW1wUm9sZUdVQ1ByaXZzKFBHY29ubiAqY29ubikKIAkJCQkJICAgInBhcmFjbCwgIgogCQkJ CQkgICAicGdfY2F0YWxvZy5hY2xkZWZhdWx0KCdwJywgIiBDcHBBc1N0cmluZzIoQk9PVFNUUkFQ X1NVUEVSVVNFUklEKSAiKSBBUyBhY2xkZWZhdWx0ICIKIAkJCQkJICAgIkZST00gcGdfY2F0YWxv Zy5wZ19wYXJhbWV0ZXJfYWNsICIKLQkJCQkJICAgIk9SREVSIEJZIDEiKTsKKwkJCQkJICAgIk9S REVSIEJZIDEiLCBmb3V0ID8gdHJ1ZSA6IGZhbHNlKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+ IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGUgcHJpdmlsZWdlcyBvbiBjb25maWd1cmF0 aW9uIHBhcmFtZXRlcnNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZSBwcml2aWxlZ2VzIG9uIGNvbmZp Z3VyYXRpb24gcGFyYW1ldGVyc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hp dmVFbnRyeSgiLS1cbi0tIFJvbGUgcHJpdmlsZWdlcyBvbiBjb25maWd1cmF0aW9uIHBhcmFtZXRl cnNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxl cyhyZXMpOyBpKyspCiAJewpAQCAtMTMxOCwxNCArMTQ3MiwxOSBAQCBkdW1wUm9sZUdVQ1ByaXZz KFBHY29ubiAqY29ubikKIAkJCWV4aXRfbmljZWx5KDEpOwogCQl9CiAKLQkJZnByaW50ZihPUEYs ICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJ CWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNo aXZlRW50cnkoYnVmLT5kYXRhLCAiZHVtcFJvbGVHVUNQcml2cyIpOwogCiAJCWZyZWUoZnBhcm5h bWUpOwogCQlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAl9CiAKIAlQUWNsZWFyKHJlcyk7Ci0J ZnByaW50ZihPUEYsICJcblxuIik7CisKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwp CisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAKQEAgLTEzMzcsNiArMTQ5Niw3IEBAIGRy b3BUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiB7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJ CWk7CisJUFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAogCS8qCiAJ ICogR2V0IGFsbCB0YWJsZXNwYWNlcyBleGNlcHQgYnVpbHQtaW4gb25lcyAod2hpY2ggd2UgYXNz dW1lIGFyZSBuYW1lZApAQCAtMTM0NSwyMyArMTUwNSwzNCBAQCBkcm9wVGFibGVzcGFjZXMoUEdj b25uICpjb25uKQogCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCAiU0VMRUNUIHNwY25hbWUgIgog CQkJCQkgICAiRlJPTSBwZ19jYXRhbG9nLnBnX3RhYmxlc3BhY2UgIgogCQkJCQkgICAiV0hFUkUg c3BjbmFtZSAhfiAnXnBnXycgIgotCQkJCQkgICAiT1JERVIgQlkgMSIpOworCQkJCQkgICAiT1JE RVIgQlkgMSIsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4g MCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCB0YWJsZXNwYWNlc1xuLS1cblxuIik7CisJ eworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0t XG4tLSBEcm9wIHRhYmxlc3BhY2VzXG4tLVxuXG4iKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJj aGl2ZUVudHJ5KCItLVxuLS0gRHJvcCB0YWJsZXNwYWNlc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsK Kwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CiAJCWNoYXIJ ICAgKnNwY25hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwgMCk7CiAKLQkJZnByaW50ZihPUEYsICJE Uk9QIFRBQkxFU1BBQ0UgJXMlcztcbiIsCi0JCQkJaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDog IiIsCi0JCQkJZm10SWQoc3BjbmFtZSkpOworCQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxRcnksICJE Uk9QIFRBQkxFU1BBQ0UgJXMlcztcbiIsCisJCQkJCQkgIGlmX2V4aXN0cyA/ICJJRiBFWElTVFMg IiA6ICIiLAorCQkJCQkJICBmbXRJZChzcGNuYW1lKSk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGRlbFFyeS0+ZGF0YSk7CisJCWVs c2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShkZWxRcnktPmRhdGEsICJkcm9wVGFibGVzcGFj ZXMiKTsKIAl9CiAKIAlQUWNsZWFyKHJlcyk7CiAKLQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKKwlp ZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwog fQogCiAvKgpAQCAtMTM4NSwxMCArMTU1NiwxNSBAQCBkdW1wVGFibGVzcGFjZXMoUEdjb25uICpj b25uKQogCQkJCQkgICAicGdfY2F0YWxvZy5zaG9ial9kZXNjcmlwdGlvbihvaWQsICdwZ190YWJs ZXNwYWNlJykgIgogCQkJCQkgICAiRlJPTSBwZ19jYXRhbG9nLnBnX3RhYmxlc3BhY2UgIgogCQkJ CQkgICAiV0hFUkUgc3BjbmFtZSAhfiAnXnBnXycgIgotCQkJCQkgICAiT1JERVIgQlkgMSIpOwor CQkJCQkgICAiT1JERVIgQlkgMSIsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaWYgKFBRbnR1 cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gVGFibGVzcGFjZXNcbi0tXG5c biIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihP UEYsICItLVxuLS0gVGFibGVzcGFjZXNcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVB cmNoaXZlRW50cnkoIi0tXG4tLSBUYWJsZXNwYWNlc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9 CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CkBAIC0xNDU3LDE0 ICsxNjMzLDE5IEBAIGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCQkJICJUQUJM RVNQQUNFIiwgc3BjbmFtZSwKIAkJCQkJCQkgYnVmKTsKIAotCQlmcHJpbnRmKE9QRiwgIiVzIiwg YnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50 ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRy eShidWYtPmRhdGEsICJkdW1wVGFibGVzcGFjZXMiKTsKIAogCQlmcmVlKGZzcGNuYW1lKTsKIAkJ ZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwotCWZwcmludGYo T1BGLCAiXG5cbiIpOworCisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJp bnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xNDg1LDEwICsxNjY2LDE1IEBAIGRyb3BEQnMo UEdjb25uICpjb25uKQogCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUgIgogCQkJCQkgICAiRlJPTSBw Z19kYXRhYmFzZSBkICIKIAkJCQkJICAgIldIRVJFIGRhdGFsbG93Y29ubiBBTkQgZGF0Y29ubmxp bWl0ICE9IC0yICIKLQkJCQkJICAgIk9SREVSIEJZIGRhdG5hbWUiKTsKKwkJCQkJICAgIk9SREVS IEJZIGRhdG5hbWUiLCBmb3V0ID8gdHJ1ZSA6IGZhbHNlKTsKIAogCWlmIChQUW50dXBsZXMocmVz KSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3AgZGF0YWJhc2VzIChleGNlcHQgcG9z dGdyZXMgYW5kIHRlbXBsYXRlMSlcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCBkYXRhYmFzZXMgKGV4 Y2VwdCBwb3N0Z3JlcyBhbmQgdGVtcGxhdGUxKVxuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0 ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIERyb3AgZGF0YWJhc2VzIChleGNlcHQgcG9zdGdyZXMg YW5kIHRlbXBsYXRlMSlcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChpID0gMDsg aSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJewpAQCAtMTUwMywxNSArMTY4OSwyMyBAQCBkcm9w REJzKFBHY29ubiAqY29ubikKIAkJCXN0cmNtcChkYm5hbWUsICJ0ZW1wbGF0ZTAiKSAhPSAwICYm CiAJCQlzdHJjbXAoZGJuYW1lLCAicG9zdGdyZXMiKSAhPSAwKQogCQl7Ci0JCQlmcHJpbnRmKE9Q RiwgIkRST1AgREFUQUJBU0UgJXMlcztcbiIsCi0JCQkJCWlmX2V4aXN0cyA/ICJJRiBFWElTVFMg IiA6ICIiLAotCQkJCQlmbXRJZChkYm5hbWUpKTsKKwkJCVBRRXhwQnVmZmVyIGRlbFFyeSA9IGNy ZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKGRlbFFyeSwgIkRST1Ag REFUQUJBU0UgJXMlcztcbiIsCisJCQkJCQkJICBpZl9leGlzdHMgPyAiSUYgRVhJU1RTICIgOiAi IiwKKwkJCQkJCQkgIGZtdElkKGRibmFtZSkpOworCisJCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0g YXJjaE51bGwpCisJCQkJZnByaW50ZihPUEYsICIlcyIsIGRlbFFyeS0+ZGF0YSk7CisJCQllbHNl CisJCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGRlbFFyeS0+ZGF0YSwgIkRST1BfREFUQUJBU0Ui KTsKIAkJfQogCX0KIAogCVBRY2xlYXIocmVzKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOwor CWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7 CiB9CiAKIApAQCAtMTUzMSwxNCArMTcyNSwyNSBAQCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNv bm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKQogCWFwcGVuZFN0cmluZ0xpdGVyYWxDb25uKGJ1Ziwg dXNlcm5hbWUsIGNvbm4pOwogCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihidWYsICcpJyk7CiAKLQly ZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgYnVmLT5kYXRhKTsKKwlyZXMgPSBleGVjdXRlUXVlcnko Y29ubiwgYnVmLT5kYXRhLCBmb3V0ID8gdHJ1ZSA6IGZhbHNlKTsKIAogCWlmIChQUW50dXBsZXMo cmVzKSA+IDApCiAJewogCQljaGFyCSAgICpzYW5pdGl6ZWQ7CiAKIAkJc2FuaXRpemVkID0gc2Fu aXRpemVfbGluZSh1c2VybmFtZSwgdHJ1ZSk7Ci0JCWZwcmludGYoT1BGLCAiXG4tLVxuLS0gVXNl ciBDb25maWcgXCIlc1wiXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCisJCWlmIChhcmNoRHVtcEZv cm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiXG4tLVxuLS0gVXNlciBDb25maWcg XCIlc1wiXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCQllbHNlCisJCXsKKwkJCVBRRXhwQnVmZmVy IHFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHFyeSwg IlxuLS1cbi0tIFVzZXIgQ29uZmlnIFwiJXNcIlxuLS1cblxuIiwgc2FuaXRpemVkKTsKKwkJCWNy ZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRhdGEsICJDT01NRU5UIik7CisJCQlkZXN0cm95UFFF eHBCdWZmZXIocXJ5KTsKKwkJfQorCiAJCWZyZWUoc2FuaXRpemVkKTsKIAl9CiAKQEAgLTE1NDgs NyArMTc1MywxMSBAQCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVz ZXJuYW1lKQogCQltYWtlQWx0ZXJDb25maWdDb21tYW5kKGNvbm4sIFBRZ2V0dmFsdWUocmVzLCBp LCAwKSwKIAkJCQkJCQkgICAiUk9MRSIsIHVzZXJuYW1lLCBOVUxMLCBOVUxMLAogCQkJCQkJCSAg IGJ1Zik7Ci0JCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCisJCWlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOwor CQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoYnVmLT5kYXRhLCAiZHVtcFVzZXJDb25m aWciKTsKIAl9CiAKIAlQUWNsZWFyKHJlcyk7CkBAIC0xNTk3LDcgKzE4MDYsNyBAQCBleHBhbmRf ZGJuYW1lX3BhdHRlcm5zKFBHY29ubiAqY29ubiwKIAkJCWV4aXRfbmljZWx5KDEpOwogCQl9CiAK LQkJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIHF1ZXJ5LT5kYXRhKTsKKwkJcmVzID0gZXhlY3V0 ZVF1ZXJ5KGNvbm4sIHF1ZXJ5LT5kYXRhLCBmb3V0ID8gdHJ1ZSA6IGZhbHNlKTsKIAkJZm9yIChp bnQgaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCQl7CiAJCQlzaW1wbGVfc3RyaW5n X2xpc3RfYXBwZW5kKG5hbWVzLCBQUWdldHZhbHVlKHJlcywgaSwgMCkpOwpAQCAtMTYxNCwxMCAr MTgyMywxMyBAQCBleHBhbmRfZGJuYW1lX3BhdHRlcm5zKFBHY29ubiAqY29ubiwKICAqIER1bXAg Y29udGVudHMgb2YgZGF0YWJhc2VzLgogICovCiBzdGF0aWMgdm9pZAotZHVtcERhdGFiYXNlcyhQ R2Nvbm4gKmNvbm4pCitkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgYm9vbCBvdXRwdXRfY2xl YW4pCiB7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJCWk7CisJY2hhcgkJZGJfc3ViZGlyW01B WFBHUEFUSF07CisJY2hhcgkJZGJmaWxlcGF0aFtNQVhQR1BBVEhdOworCUZJTEUJICAgKm1hcF9m aWxlID0gTlVMTDsKIAogCS8qCiAJICogU2tpcCBkYXRhYmFzZXMgbWFya2VkIG5vdCBkYXRhbGxv d2Nvbm4sIHNpbmNlIHdlJ2QgYmUgdW5hYmxlIHRvIGNvbm5lY3QKQEAgLTE2MzEsMTkgKzE4NDMs NDkgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJICogZG9lc24ndCBoYXZlIHNvbWUg ZmFpbHVyZSBtb2RlIHdpdGggLS1jbGVhbi4KIAkgKi8KIAlyZXMgPSBleGVjdXRlUXVlcnkoY29u biwKLQkJCQkJICAgIlNFTEVDVCBkYXRuYW1lICIKKwkJCQkJICAgIlNFTEVDVCBkYXRuYW1lLCBv aWQgIgogCQkJCQkgICAiRlJPTSBwZ19kYXRhYmFzZSBkICIKIAkJCQkJICAgIldIRVJFIGRhdGFs bG93Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9IC0yICIKLQkJCQkJICAgIk9SREVSIEJZIChkYXRu YW1lIDw+ICd0ZW1wbGF0ZTEnKSwgZGF0bmFtZSIpOworCQkJCQkgICAiT1JERVIgQlkgKGRhdG5h bWUgPD4gJ3RlbXBsYXRlMScpLCBkYXRuYW1lIiwKKwkJCQkJICAgZm91dCA/IHRydWUgOiBmYWxz ZSk7CiAKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBE YXRhYmFzZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsKKwkJZWxzZQor CQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iLCAiQ09N TUVOVCIpOworCX0KKworCS8qCisJICogSWYgZGlyZWN0b3J5L3Rhci9jdXN0b20gZm9ybWF0IGlz IHNwZWNpZmllZCwgY3JlYXRlIGEgc3ViZGlyZWN0b3J5CisJICogdW5kZXIgdGhlIG1haW4gZGly ZWN0b3J5IGFuZCBlYWNoIGRhdGFiYXNlIGR1bXAgZmlsZSBvciBzdWJkaXJlY3RvcnkKKwkgKiB3 aWxsIGJlIGNyZWF0ZWQgaW4gdGhhdCBzdWJkaXJlY3RvcnkgYnkgcGdfZHVtcC4KKwkgKi8KKwlp ZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQljaGFyCQltYXBfZmlsZV9wYXRo W01BWFBHUEFUSF07CisKKwkJc25wcmludGYoZGJfc3ViZGlyLCBNQVhQR1BBVEgsICIlcy9kYXRh YmFzZXMiLCBmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRlIGEgc3ViZGlyZWN0b3J5IHdpdGggJ2Rh dGFiYXNlcycgbmFtZSB1bmRlciBtYWluIGRpcmVjdG9yeS4gKi8KKwkJaWYgKG1rZGlyKGRiX3N1 YmRpciwgcGdfZGlyX2NyZWF0ZV9tb2RlKSAhPSAwKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBj cmVhdGUgZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBkYl9zdWJkaXIpOworCisJCXNucHJpbnRmKG1h cF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBmaWxlbmFtZSk7CisKKwkJLyog Q3JlYXRlIGEgbWFwIGZpbGUgKHRvIHN0b3JlIGRib2lkIGFuZCBkYm5hbWUpICovCisJCW1hcF9m aWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwgUEdfQklOQVJZX1cpOworCQlpZiAoIW1hcF9maWxl KQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIG1hcF9maWxl X3BhdGgpOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsK IAkJY2hhcgkgICAqZGJuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOwogCQljaGFyCSAgICpz YW5pdGl6ZWQ7Ci0JCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzOworCQljaGFyCSAgICpvaWQgPSBQ UWdldHZhbHVlKHJlcywgaSwgMSk7CisJCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzID0gIiI7CiAJ CWludAkJCXJldDsKIAogCQkvKiBTa2lwIHRlbXBsYXRlMCwgZXZlbiBpZiBpdCdzIG5vdCBtYXJr ZWQgIWRhdGFsbG93Y29ubi4gKi8KQEAgLTE2NjAsNyArMTkwMiwxOCBAQCBkdW1wRGF0YWJhc2Vz KFBHY29ubiAqY29ubikKIAkJcGdfbG9nX2luZm8oImR1bXBpbmcgZGF0YWJhc2UgXCIlc1wiIiwg ZGJuYW1lKTsKIAogCQlzYW5pdGl6ZWQgPSBzYW5pdGl6ZV9saW5lKGRibmFtZSwgdHJ1ZSk7Ci0J CWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBzYW5p dGl6ZWQpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYo T1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOwor CQllbHNlCisJCXsKKwkJCVBRRXhwQnVmZmVyIHFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisK KwkJCWFwcGVuZFBRRXhwQnVmZmVyKHFyeSwgIi0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxu LS1cblxuIiwgc2FuaXRpemVkKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRhdGEs ICJDT01NRU5UIik7CisJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsKKwkJfQorCiAJCWZyZWUo c2FuaXRpemVkKTsKIAogCQkvKgpAQCAtMTY3NSwyNCArMTkyOCwzOCBAQCBkdW1wRGF0YWJhc2Vz KFBHY29ubiAqY29ubikKIAkJewogCQkJaWYgKG91dHB1dF9jbGVhbikKIAkJCQljcmVhdGVfb3B0 cyA9ICItLWNsZWFuIC0tY3JlYXRlIjsKLQkJCWVsc2UKLQkJCXsKLQkJCQljcmVhdGVfb3B0cyA9 ICIiOwotCQkJCS8qIFNpbmNlIHBnX2R1bXAgd29uJ3QgZW1pdCBhIFxjb25uZWN0IGNvbW1hbmQs IHdlIG11c3QgKi8KKwkJCS8qIFNpbmNlIHBnX2R1bXAgd29uJ3QgZW1pdCBhIFxjb25uZWN0IGNv bW1hbmQsIHdlIG11c3QgKi8KKwkJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KQogCQkJCWZwcmludGYoT1BGLCAiXFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7Ci0JCQl9CiAJ CX0KIAkJZWxzZQogCQkJY3JlYXRlX29wdHMgPSAiLS1jcmVhdGUiOwogCi0JCWlmIChmaWxlbmFt ZSkKKwkJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQogCQkJZmNs b3NlKE9QRik7CiAKLQkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMpOworCQkv KgorCQkgKiBJZiB0aGlzIGlzIG5vdCBhIHBsYWluIGZvcm1hdCBkdW1wLCB0aGVuIGFwcGVuZCBk Ym9pZCBhbmQgZGJuYW1lIHRvCisJCSAqIHRoZSBtYXAuZGF0IGZpbGUuCisJCSAqLworCQlpZiAo YXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJCXsKKwkJCWlmIChhcmNoRHVtcEZvcm1hdCA9 PSBhcmNoQ3VzdG9tKQorCQkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNc Ii9cIiVzXCIuZG1wIiwgZGJfc3ViZGlyLCBvaWQpOworCQkJZWxzZSBpZiAoYXJjaER1bXBGb3Jt YXQgPT0gYXJjaFRhcikKKwkJCQlzbnByaW50ZihkYmZpbGVwYXRoLCBNQVhQR1BBVEgsICJcIiVz XCIvXCIlc1wiLnRhciIsIGRiX3N1YmRpciwgb2lkKTsKKwkJCWVsc2UKKwkJCQlzbnByaW50Zihk YmZpbGVwYXRoLCBNQVhQR1BBVEgsICJcIiVzXCIvXCIlc1wiIiwgZGJfc3ViZGlyLCBvaWQpOwor CisJCQkvKiBQdXQgb25lIGxpbmUgZW50cnkgZm9yIGRib2lkIGFuZCBkYm5hbWUgaW4gbWFwIGZp bGUuICovCisJCQlmcHJpbnRmKG1hcF9maWxlLCAiJXMgJXNcbiIsIG9pZCwgZGJuYW1lKTsKKwkJ fQorCisJCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9vcHRzLCBkYmZpbGVwYXRoKTsK IAkJaWYgKHJldCAhPSAwKQogCQkJcGdfZmF0YWwoInBnX2R1bXAgZmFpbGVkIG9uIGRhdGFiYXNl IFwiJXNcIiwgZXhpdGluZyIsIGRibmFtZSk7CiAKLQkJaWYgKGZpbGVuYW1lKQorCQlpZiAoZmls ZW5hbWUgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCXsKIAkJCU9QRiA9IGZvcGVu KGZpbGVuYW1lLCBQR19CSU5BUllfQSk7CiAJCQlpZiAoIU9QRikKQEAgLTE3MDEsNiArMTk2OCwx MCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJfQogCX0KIAorCS8qIENsb3NlIG1h cCBmaWxlICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQlmY2xvc2UobWFw X2ZpbGUpOworCiAJUFFjbGVhcihyZXMpOwogfQogCkBAIC0xNzEwLDcgKzE5ODEsNyBAQCBkdW1w RGF0YWJhc2VzKFBHY29ubiAqY29ubikKICAqIFJ1biBwZ19kdW1wIG9uIGRibmFtZSwgd2l0aCBz cGVjaWZpZWQgb3B0aW9ucy4KICAqLwogc3RhdGljIGludAotcnVuUGdEdW1wKGNvbnN0IGNoYXIg KmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpCitydW5QZ0R1bXAoY29uc3QgY2hhciAq ZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywgY2hhciAqZGJmaWxlKQogewogCVBRRXhw QnVmZmVyRGF0YSBjb25uc3RyYnVmOwogCVBRRXhwQnVmZmVyRGF0YSBjbWQ7CkBAIC0xNzE5LDE3 ICsxOTkwLDM2IEBAIHJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNy ZWF0ZV9vcHRzKQogCWluaXRQUUV4cEJ1ZmZlcigmY29ubnN0cmJ1Zik7CiAJaW5pdFBRRXhwQnVm ZmVyKCZjbWQpOwogCi0JcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAlcyAlcyIsIHBn X2R1bXBfYmluLAotCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsKLQogCS8q Ci0JICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhlIHVuZG9jdW1lbnRlZCBwbGFpbi1h cHBlbmQgcGdfZHVtcAotCSAqIGZvcm1hdC4KKwkgKiBJZiB0aGlzIGlzIG5vdCBhIHBsYWluIGZv cm1hdCBkdW1wLCB0aGVuIGFwcGVuZCBmaWxlIG5hbWUgYW5kIGR1bXAKKwkgKiBmb3JtYXQgdG8g dGhlIHBnX2R1bXAgY29tbWFuZCB0byBnZXQgYXJjaGl2ZSBkdW1wLgogCSAqLwotCWlmIChmaWxl bmFtZSkKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJaWYgKGFyY2hE dW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwi JXNcIiAlcyAtZiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBwZ2R1bXBvcHRzLT5kYXRh LCBkYmZpbGUsIGNyZWF0ZV9vcHRzKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaERp cmVjdG9yeSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWRpcmVj dG9yeSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWN1c3RvbSAiKTsKKwkJZWxzZSBp ZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaFRhcikKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZj bWQsICIgIC0tZm9ybWF0PXRhciAiKTsKKwl9CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmY21kLCAiIC1GcCAiKTsKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIg JXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRlX29w dHMpOworCisJCS8qCisJCSAqIElmIHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3Vt ZW50ZWQgcGxhaW4tYXBwZW5kIHBnX2R1bXAKKwkJICogZm9ybWF0LgorCQkgKi8KKwkJaWYgKGZp bGVuYW1lKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRmEgIik7CisJCWVsc2UK KwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCX0KIAogCS8qCiAJICog QXBwZW5kIHRoZSBkYXRhYmFzZSBuYW1lIHRvIHRoZSBhbHJlYWR5LWNvbnN0cnVjdGVkIHN0ZW0g b2YgY29ubmVjdGlvbgpAQCAtMTc3Miw3ICsyMDYyLDcgQEAgYnVpbGRTaFNlY0xhYmVscyhQR2Nv bm4gKmNvbm4sIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCVBHcmVz dWx0ICAgKnJlczsKIAogCWJ1aWxkU2hTZWNMYWJlbFF1ZXJ5KGNhdGFsb2dfbmFtZSwgb2JqZWN0 SWQsIHNxbCk7Ci0JcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIHNxbC0+ZGF0YSk7CisJcmVzID0g ZXhlY3V0ZVF1ZXJ5KGNvbm4sIHNxbC0+ZGF0YSwgZm91dCA/IHRydWUgOiBmYWxzZSk7CiAJZW1p dFNoU2VjTGFiZWxzKGNvbm4sIHJlcywgYnVmZmVyLCBvYmp0eXBlLCBvYmpuYW1lKTsKIAogCVBR Y2xlYXIocmVzKTsKQEAgLTE4NzQsMyArMjE2NCw3NCBAQCByZWFkX2R1bXBhbGxfZmlsdGVycyhj b25zdCBjaGFyICpmaWxlbmFtZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybikKIAogCWZpbHRl cl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgorICogcGFyc2VEdW1wRm9ybWF0CisgKgorICogVGhp cyB3aWxsIHZhbGlkYXRlIGR1bXAgZm9ybWF0cy4KKyAqLworc3RhdGljIEFyY2hpdmVGb3JtYXQK K3BhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpCit7CisJQXJjaGl2ZUZvcm1hdCBh cmNoRHVtcEZvcm1hdDsKKworCWlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImMiKSA9PSAwKQor CQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChm b3JtYXQsICJjdXN0b20iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJ ZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkIikgPT0gMCkKKwkJYXJjaER1bXBGb3Jt YXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiZGly ZWN0b3J5IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2Ug aWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0g YXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJwbGFpbiIpID09IDAp CisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChm b3JtYXQsICJ0IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoVGFyOworCWVsc2UgaWYg KHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAidGFyIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBh cmNoVGFyOworCWVsc2UKKwkJcGdfZmF0YWwoInVucmVjb2duaXplZCBvdXRwdXQgZm9ybWF0IFwi JXNcIjsgcGxlYXNlIHNwZWNpZnkgXCJjXCIsIFwiZFwiLCBcInBcIiwgb3IgXCJ0XCIiLAorCQkJ CSBmb3JtYXQpOworCisJcmV0dXJuIGFyY2hEdW1wRm9ybWF0OworfQorCisvKgorICogY3JlYXRl RHVtcElkCisgKgorICogVGhpcyB3aWxsIHJldHVybiBuZXh0IGxhc3QgdXNlZCBvaWQuCisgKi8K K3N0YXRpYyBpbnQKK2NyZWF0ZUR1bXBJZCh2b2lkKQoreworCXJldHVybiArK2R1bXBJZFZhbDsK K30KKworLyoKKyAqIGNyZWF0ZU9uZUFyY2hpdmVFbnRyeQorICoKKyAqIFRoaXMgY3JlYXRlcyBv bmUgYXJjaGl2ZSBlbnRyeSBmb3Igbm9uLXRleHQgZHVtcCBmb3JtYXQuCisgKi8KK3N0YXRpYyB2 b2lkCitjcmVhdGVPbmVBcmNoaXZlRW50cnkoY29uc3QgY2hhciAqcXVlcnksIGNvbnN0IGNoYXIg KnRhZykKK3sKKwlDYXRhbG9nSWQJbmlsQ2F0YWxvZ0lkID0gezAsIDB9OworCWludCB0eXBlOwor CisJQXNzZXJ0KGZvdXQgIT0gTlVMTCk7CisKKwlpZihzdHJjbXAodGFnLCAiQ09NTUVOVCIpID09 IDApCisJCXR5cGUgPSBTRUNUSU9OX05PTkU7CisJZWxzZQorCQl0eXBlID0gU0VDVElPTl9QUkVf REFUQTsKKworCUFyY2hpdmVFbnRyeShmb3V0LAorCQkJCSBuaWxDYXRhbG9nSWQsCS8qIGNhdGFs b2cgSUQgKi8KKwkJCQkgY3JlYXRlRHVtcElkKCksCS8qIGR1bXAgSUQgKi8KKwkJCQkgQVJDSElW RV9PUFRTKC50YWcgPSB0YWcsCisJCQkJCQkJICAuZGVzY3JpcHRpb24gPSB0YWcsCisJCQkJCQkJ ICAuc2VjdGlvbiA9IHR5cGUsCisJCQkJCQkJICAuY3JlYXRlU3RtdCA9IHF1ZXJ5KSk7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX3Jlc3RvcmUuYwppbmRleCA4NGI4ZDQxMGM5ZS4uMTY5ZmE4ZWQzMGQgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jl c3RvcmUuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBwZ19yZXN0b3JlLmMKICAqCXBnX3Jlc3Rv cmUgaXMgYW4gdXRpbGl0eSBleHRyYWN0aW5nIHBvc3RncmVzIGRhdGFiYXNlIGRlZmluaXRpb25z Ci0gKglmcm9tIGEgYmFja3VwIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wIHVzaW5nIHRoZSBh cmNoaXZlcgorICoJZnJvbSBhIGJhY2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC9wZ19k dW1wYWxsIHVzaW5nIHRoZSBhcmNoaXZlcgogICoJaW50ZXJmYWNlLgogICoKICAqCXBnX3Jlc3Rv cmUgd2lsbCByZWFkIHRoZSBiYWNrdXAgYXJjaGl2ZSBhbmQKQEAgLTQxLDEyICs0MSwxNiBAQAog I2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKICNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUg PHN5cy9zdGF0Lmg+CiAjaWZkZWYgSEFWRV9URVJNSU9TX0gKICNpbmNsdWRlIDx0ZXJtaW9zLmg+ CiAjZW5kaWYKIAorI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb25uZWN0 ZGIuaCIKICNpbmNsdWRlICJkdW1wdXRpbHMuaCIKICNpbmNsdWRlICJmZV91dGlscy9vcHRpb25f dXRpbHMuaCIKKyNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJm aWx0ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgogI2luY2x1ZGUgInBhcmFsbGVsLmgi CkBAIC01NCwxOCArNTgsNDQgQEAKIAogc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJv Z25hbWUpOwogc3RhdGljIHZvaWQgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmls ZW5hbWUsIFJlc3RvcmVPcHRpb25zICpvcHRzKTsKK3N0YXRpYyBib29sIGZpbGVfZXhpc3RzX2lu X2RpcmVjdG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK3N0YXRp YyBpbnQJcmVzdG9yZV9vbmVfZGF0YWJhc2UoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVz dG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCQkJCSBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRf ZGF0YSwKKwkJCQkJCQkJIGJvb2wgZ2xvYmFsc19vbmx5LCBib29sIG5vVG9jQ29tbWVudHMpOwor c3RhdGljIGludAlyZXN0b3JlX2dsb2JhbF9vYmplY3RzKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNw ZWMsCisJCQkJCQkJCSAgIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2VycywKKwkJ CQkJCQkJICAgYm9vbCBnbG9iYWxzX29ubHkpOworc3RhdGljIGludAlyZXN0b3JlX2FsbF9kYXRh YmFzZXMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJCQkJCQkJICBTaW1wbGVTdHJpbmdM aXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29y a2Vycyk7CitzdGF0aWMgaW50CWdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNv bm4sCisJCQkJCQkJCQkJU2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCQkJ CVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucyk7CitzdGF0aWMgaW50CWdldF9k Ym5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJCQkJ CQkJCQkgICBTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QpOworCitzdGF0aWMgYm9vbCBk YXRhX29ubHkgPSBmYWxzZTsKKworLyoKKyAqIFN0b3JlcyBhIGRhdGFiYXNlIE9JRCBhbmQgdGhl IGNvcnJlc3BvbmRpbmcgbmFtZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgRGJPaWROYW1lCit7CisJ T2lkCQkJb2lkOworCWNoYXIJCXN0cltGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOyAvKiBudWxsLXRl cm1pbmF0ZWQgc3RyaW5nIGhlcmUgKi8KK30JCQlEYk9pZE5hbWU7CisKIAogaW50CiBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlSZXN0b3JlT3B0aW9ucyAqb3B0czsKIAlpbnQJCQlj OwotCWludAkJCWV4aXRfY29kZTsKIAlpbnQJCQludW1Xb3JrZXJzID0gMTsKLQlBcmNoaXZlICAg ICpBSDsKIAljaGFyCSAgICppbnB1dEZpbGVTcGVjOwotCWJvb2wJCWRhdGFfb25seSA9IGZhbHNl OwogCWJvb2wJCXNjaGVtYV9vbmx5ID0gZmFsc2U7CisJaW50CQkJbl9lcnJvcnMgPSAwOworCWJv b2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOworCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9w YXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIAlzdGF0aWMgaW50CWRpc2FibGVfdHJpZ2dlcnMgPSAw OwogCXN0YXRpYyBpbnQJZW5hYmxlX3Jvd19zZWN1cml0eSA9IDA7CiAJc3RhdGljIGludAlpZl9l eGlzdHMgPSAwOwpAQCAtODksNiArMTE5LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJCXsiY2xlYW4iLCAwLCBOVUxMLCAnYyd9LAogCQl7ImNyZWF0ZSIsIDAsIE5VTEwsICdDJ30s CiAJCXsiZGF0YS1vbmx5IiwgMCwgTlVMTCwgJ2EnfSwKKwkJeyJnbG9iYWxzLW9ubHkiLCAwLCBO VUxMLCAnZyd9LAogCQl7ImRibmFtZSIsIDEsIE5VTEwsICdkJ30sCiAJCXsiZXhpdC1vbi1lcnJv ciIsIDAsIE5VTEwsICdlJ30sCiAJCXsiZXhjbHVkZS1zY2hlbWEiLCAxLCBOVUxMLCAnTid9LApA QCAtMTQyLDYgKzE3Myw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7InN0YXRp c3RpY3Mtb25seSIsIG5vX2FyZ3VtZW50LCAmc3RhdGlzdGljc19vbmx5LCAxfSwKIAkJeyJmaWx0 ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNH0sCiAJCXsicmVzdHJpY3Qta2V5IiwgcmVx dWlyZWRfYXJndW1lbnQsIE5VTEwsIDZ9LAorCQl7ImV4Y2x1ZGUtZGF0YWJhc2UiLCByZXF1aXJl ZF9hcmd1bWVudCwgTlVMTCwgN30sCiAKIAkJe05VTEwsIDAsIE5VTEwsIDB9CiAJfTsKQEAgLTE3 MCw3ICsyMDIsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJfQogCX0KIAotCXdo aWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6aDpJOmo6bEw6bjpO Ok9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBh cmd2LCAiYWNDZDplZjpGOmdoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAogCQkJ CQkJCWNtZG9wdHMsIE5VTEwpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKQEAgLTE5NywxMSAr MjI5LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWlmIChzdHJsZW4ob3B0 YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5mb3JtYXROYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJ CQkJYnJlYWs7CisJCQljYXNlICdnJzoKKwkJCQkvKiByZXN0b3JlIG9ubHkgZ2xvYmFsIHNxbCBj b21tYW5kcy4gKi8KKwkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOworCQkJCWJyZWFrOwogCQkJY2Fz ZSAnaCc6CiAJCQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJCQkJCW9wdHMtPmNwYXJhbXMu cGdob3N0ID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7Ci0KIAkJCWNhc2UgJ2onOgkJ CS8qIG51bWJlciBvZiByZXN0b3JlIGpvYnMgKi8KIAkJCQlpZiAoIW9wdGlvbl9wYXJzZV9pbnQo b3B0YXJnLCAiLWovLS1qb2JzIiwgMSwKIAkJCQkJCQkJCSAgUEdfTUFYX0pPQlMsCkBAIC0zMjEs NiArMzU2LDEwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCW9wdHMtPnJlc3Ry aWN0X2tleSA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwogCisJCQljYXNlIDc6CQkJ CS8qIGRhdGFiYXNlIHBhdHRlcm5zIHRvIHNraXAgKi8KKwkJCQlzaW1wbGVfc3RyaW5nX2xpc3Rf YXBwZW5kKCZkYl9leGNsdWRlX3BhdHRlcm5zLCBvcHRhcmcpOworCQkJCWJyZWFrOworCiAJCQlk ZWZhdWx0OgogCQkJCS8qIGdldG9wdF9sb25nIGFscmVhZHkgZW1pdHRlZCBhIGNvbXBsYWludCAq LwogCQkJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZv cm1hdGlvbi4iLCBwcm9nbmFtZSk7CkBAIC0zNDcsNiArMzg2LDE0IEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogCWlmICghb3B0cy0+Y3BhcmFtcy5kYm5hbWUgJiYgIW9wdHMtPmZpbGVu YW1lICYmICFvcHRzLT50b2NTdW1tYXJ5KQogCQlwZ19mYXRhbCgib25lIG9mIC1kLy0tZGJuYW1l IGFuZCAtZi8tLWZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiKTsKIAorCWlmIChkYl9leGNsdWRlX3Bh dHRlcm5zLmhlYWQgIT0gTlVMTCAmJiBnbG9iYWxzX29ubHkpCisJeworCQlwZ19sb2dfZXJyb3Io Im9wdGlvbiAlcyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoICVzIiwKKwkJCQkJICItLWV4 Y2x1ZGUtZGF0YWJhc2UiLCAiLWcvLS1nbG9iYWxzLW9ubHkiKTsKKwkJcGdfbG9nX2Vycm9yX2hp bnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsK KwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCiAJLyogU2hvdWxkIGdldCBhdCBtb3N0IG9uZSBvZiAt ZCBhbmQgLWYsIGVsc2UgdXNlciBpcyBjb25mdXNlZCAqLwogCWlmIChvcHRzLT5jcGFyYW1zLmRi bmFtZSkKIAl7CkBAIC00MjAsNiArNDY3LDEwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIi LAogCQkJCSAiLTEvLS1zaW5nbGUtdHJhbnNhY3Rpb24iLCAiLS10cmFuc2FjdGlvbi1zaXplIik7 CiAKKwlpZiAoZGF0YV9vbmx5ICYmIGdsb2JhbHNfb25seSkKKwkJcGdfZmF0YWwoIm9wdGlvbnMg JXMgYW5kICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIiwKKwkJCQkgIi1hLy0tZGF0YS1vbmx5 IiwgIi1nLy0tZ2xvYmFscy1vbmx5Iik7CisKIAkvKgogCSAqIC1DIGlzIG5vdCBjb21wYXRpYmxl IHdpdGggLTEsIGJlY2F1c2Ugd2UgY2FuJ3QgY3JlYXRlIGEgZGF0YWJhc2UgaW5zaWRlCiAJICog YSB0cmFuc2FjdGlvbiBibG9jay4KQEAgLTQ4NSw2ICs1MzYsMTI5IEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogCQkJCQkgb3B0cy0+Zm9ybWF0TmFtZSk7CiAJfQogCisJLyoKKwkgKiBJ ZiB0b2MuZ2xvIGZpbGUgaXMgcHJlc2VudCwgdGhlbiByZXN0b3JlIGFsbCB0aGUgZGF0YWJhc2Vz IGZyb20KKwkgKiBtYXAuZGF0LCBidXQgc2tpcCByZXN0b3JpbmcgdGhvc2UgbWF0Y2hpbmcgLS1l eGNsdWRlLWRhdGFiYXNlIHBhdHRlcm5zLgorCSAqLworCWlmIChpbnB1dEZpbGVTcGVjICE9IE5V TEwgJiYKKwkJKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShpbnB1dEZpbGVTcGVjLCAidG9jLmds byIpKSkKKwl7CisJCS8qCisJCSAqIENhbiBvbmx5IHVzZSAtLWxpc3Qgb3IgLS11c2UtbGlzdCBv cHRpb25zIHdpdGggYSBzaW5nbGUgZGF0YWJhc2UKKwkJICogZHVtcC4KKwkJICovCisJCWlmIChv cHRzLT50b2NTdW1tYXJ5KQorCQkJcGdfZmF0YWwoIm9wdGlvbiAlcyBjYW5ub3QgYmUgdXNlZCB3 aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIsCisJCQkJCSAi LWwvLS1saXN0Iik7CisJCWVsc2UgaWYgKG9wdHMtPnRvY0ZpbGUpCisJCQlwZ19mYXRhbCgib3B0 aW9uICVzIGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBi eSBwZ19kdW1wYWxsIiwKKwkJCQkJICItTC8tLXVzZS1saXN0Iik7CisKKwkJLyoKKwkJICogVG8g cmVzdG9yZSBmcm9tIGEgcGdfZHVtcGFsbCBhcmNoaXZlLCAtQyAoY3JlYXRlIGRhdGFiYXNlKSBv cHRpb24KKwkJICogbXVzdCBiZSBzcGVjaWZpZWQgdW5sZXNzIHdlIGFyZSBvbmx5IHJlc3Rvcmlu ZyBnbG9iYWxzLgorCQkgKi8KKwkJaWYgKCFnbG9iYWxzX29ubHkgJiYgb3B0cy0+Y3JlYXRlREIg IT0gMSkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJvcHRpb24gJXMgbXVzdCBiZSBzcGVjaWZpZWQg d2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkJ ICItQy8tLWNyZWF0ZSIpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwi IGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJCXBnX2xvZ19lcnJvcl9oaW50 KCJJbmRpdmlkdWFsIGRhdGFiYXNlcyBjYW4gYmUgcmVzdG9yZWQgdXNpbmcgdGhlaXIgc3BlY2lm aWMgYXJjaGl2ZXMuIik7CisJCQlleGl0X25pY2VseSgxKTsKKwkJfQorCisJCS8qIElmIGdsb2Jh bHMtb25seSwgdGhlbiByZXR1cm4gZnJvbSBoZXJlLiAqLworCQlpZiAoZ2xvYmFsc19vbmx5KQor CQl7CisJCQljaGFyCQlnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOworCisJCQkvKiBTZXQgcGF0aCBm b3IgdG9jLmdsbyBmaWxlLiAqLworCQkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwg IiVzL3RvYy5nbG8iLCBpbnB1dEZpbGVTcGVjKTsKKwkJCW5fZXJyb3JzID0gcmVzdG9yZV9nbG9i YWxfb2JqZWN0cyhnbG9iYWxfcGF0aCwgb3B0cywgbnVtV29ya2VycywgZ2xvYmFsc19vbmx5KTsK KworCQkJcGdfbG9nX2luZm8oImRhdGFiYXNlIHJlc3RvcmluZyBza2lwcGVkIGJlY2F1c2Ugb3B0 aW9uICVzIHdhcyBzcGVjaWZpZWQiLAorCQkJCQkJIi1nLy0tZ2xvYmFscy1vbmx5Iik7CisJCX0K KwkJZWxzZQorCQl7CisJCQkvKiBOb3cgcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9tIG1h cC5kYXQgKi8KKwkJCW5fZXJyb3JzID0gcmVzdG9yZV9hbGxfZGF0YWJhc2VzKGlucHV0RmlsZVNw ZWMsIGRiX2V4Y2x1ZGVfcGF0dGVybnMsCisJCQkJCQkJCQkJCSBvcHRzLCBudW1Xb3JrZXJzKTsK KwkJfQorCisJCS8qIEZyZWUgZGIgcGF0dGVybiBsaXN0LiAqLworCQlzaW1wbGVfc3RyaW5nX2xp c3RfZGVzdHJveSgmZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisJfQorCWVsc2UKKwl7CisJCWlmIChk Yl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCkKKwkJeworCQkJc2ltcGxlX3N0cmluZ19s aXN0X2Rlc3Ryb3koJmRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCQkJcGdfZmF0YWwoIm9wdGlvbiAl cyBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBw Z19kdW1wYWxsIiwKKwkJCQkJICItLWV4Y2x1ZGUtZGF0YWJhc2UiKTsKKwkJfQorCisJCWlmIChn bG9iYWxzX29ubHkpCisJCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbiBiZSB1c2VkIG9ubHkgd2hl biByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkgIi1n Ly0tZ2xvYmFscy1vbmx5Iik7CisKKwkJLyogUHJvY2VzcyBpZiB0b2MuZ2xvIGZpbGUgZG9lcyBu b3QgZXhpc3QuICovCisJCW5fZXJyb3JzID0gcmVzdG9yZV9vbmVfZGF0YWJhc2UoaW5wdXRGaWxl U3BlYywgb3B0cywKKwkJCQkJCQkJCQludW1Xb3JrZXJzLCBmYWxzZSwgZ2xvYmFsc19vbmx5LCBm YWxzZSk7CisJfQorCisJLyogRG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3Jz IGR1cmluZyByZXN0b3JlLiAqLworCWlmIChuX2Vycm9ycykKKwl7CisJCXBnX2xvZ193YXJuaW5n KCJlcnJvcnMgaWdub3JlZCBvbiByZXN0b3JlOiAlZCIsIG5fZXJyb3JzKTsKKwkJcmV0dXJuIDE7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZXN0b3JlX2dsb2JhbF9vYmplY3RzCisg KgorICogVGhpcyByZXN0b3JlIGFsbCBnbG9iYWwgb2JqZWN0cy4KKyAqCisgKiBJZiBnbG9iYWxz X29ubHkgaXMgc2V0LCB0aGVuIHNraXAgRFJPUCBEQVRBQkFTRSBjb21tYW5kcyBmcm9tIHJlc3Rv cmUuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVfZ2xvYmFsX29iamVjdHMoY29uc3QgY2hhciAq aW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCSAgIGludCBudW1Xb3Jr ZXJzLCBib29sIGdsb2JhbHNfb25seSkKK3sKKwlpbnQJCQluZXJyb3IgPSAwOworCWludAkJCWZv cm1hdCA9IG9wdHMtPmZvcm1hdDsKKworCS8qIFNldCBmb3JtYXQgYXMgY3VzdG9tIHNvIHRoYXQg dG9jLmdsbyBmaWxlIGNhbiBiZSByZWFkLiAqLworCW9wdHMtPmZvcm1hdCA9IGFyY2hDdXN0b207 CisKKwlpZiAoIWRhdGFfb25seSkKKwkJbmVycm9yID0gcmVzdG9yZV9vbmVfZGF0YWJhc2UoaW5w dXRGaWxlU3BlYywgb3B0cywgbnVtV29ya2VycywKKwkJCQkJCQkJCSAgZmFsc2UsIGdsb2JhbHNf b25seSwgdHJ1ZSk7CisKKwkvKiBSZXNldCBmb3JtYXQgdmFsdWUuICovCisJb3B0cy0+Zm9ybWF0 ID0gZm9ybWF0OworCisJcmV0dXJuIG5lcnJvcjsKK30KKworLyoKKyAqIHJlc3RvcmVfb25lX2Rh dGFiYXNlCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUgb25lIGRhdGFiYXNlIHVzaW5nIHRvYy5k YXQgZmlsZS4KKyAqCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZXJyb3JzIHdoaWxlIGRvaW5n IHJlc3RvcmUuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVfb25lX2RhdGFiYXNlKGNvbnN0IGNo YXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQkJCQkgaW50IG51bVdv cmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEsIGJvb2wgZ2xvYmFsc19vbmx5LAorCQkJCQkgYm9vbCBu b1RvY0NvbW1lbnRzKQoreworCUFyY2hpdmUgICAgKkFIOworCWludAkJCW5fZXJyb3JzOworCiAJ QUggPSBPcGVuQXJjaGl2ZShpbnB1dEZpbGVTcGVjLCBvcHRzLT5mb3JtYXQpOwogCiAJU2V0QXJj aGl2ZU9wdGlvbnMoQUgsIE5VTEwsIG9wdHMpOwpAQCAtNDkyLDEzICs2NjYsMjYgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJLyoKIAkgKiBXZSBkb24ndCBoYXZlIGEgY29ubmVjdGlv biB5ZXQgYnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIuIFRoZSBjb25uZWN0aW9uCiAJICogaXMgaW5p dGlhbGl6ZWQgdG8gTlVMTCBhbmQgaWYgd2UgdGVybWluYXRlIHRocm91Z2ggZXhpdF9uaWNlbHko KSB3aGlsZQotCSAqIGl0J3Mgc3RpbGwgTlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBq dXN0IGJlIGEgbm8tb3AuCisJICogaXQncyBzdGlsbCBOVUxMLCB0aGUgY2xlYW51cCBmdW5jdGlv biB3aWxsIGp1c3QgYmUgYSBuby1vcC4gSWYgd2UgYXJlCisJICogcmVzdG9yaW5nIG11bHRpcGxl IGRhdGFiYXNlcywgdGhlbiBvbmx5IHVwZGF0ZSBBWCBoYW5kbGUgZm9yIGNsZWFudXAgYXMKKwkg KiB0aGUgcHJldmlvdXMgZW50cnkgd2FzIGFscmVhZHkgaW4gdGhlIGFycmF5IGFuZCB3ZSBoYWQg Y2xvc2VkIHByZXZpb3VzCisJICogY29ubmVjdGlvbiwgc28gd2UgY2FuIHVzZSB0aGUgc2FtZSBh cnJheSBzbG90LgogCSAqLwotCW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CisJaWYgKCFhcHBl bmRfZGF0YSkKKwkJb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKwllbHNlCisJCXJlcGxhY2Vf b25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKIAogCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBo b3cgbm9pc3kgdG8gYmUgKi8KIAlBSC0+dmVyYm9zZSA9IG9wdHMtPnZlcmJvc2U7CiAKKwkvKgor CSAqIElmIHdlJ3JlIHRhbGtpbmcgdG8gdGhlIERCIGRpcmVjdGx5LCBkb24ndCBzZW5kIGNvbW1l bnRzIHNpbmNlIHRoZXkKKwkgKiBvYnNjdXJlIFNRTCB3aGVuIGRpc3BsYXlpbmcgZXJyb3JzCisJ ICovCisJaWYgKG5vVG9jQ29tbWVudHMpCisJCSgoQXJjaGl2ZUhhbmRsZSAqKUFIKS0+bm9Ub2ND b21tZW50cyA9IDE7CisKIAkvKgogCSAqIFdoZXRoZXIgdG8ga2VlcCBzdWJtaXR0aW5nIHNxbCBj b21tYW5kcyBhcyAicGdfcmVzdG9yZSAuLi4gfCBwc3FsIC4uLiAiCiAJICovCkBAIC01MTQsMjUg KzcwMSwyMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAllbHNlCiAJewogCQlQcm9j ZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFIKTsKLQkJUmVzdG9yZUFyY2hpdmUoQUgpOworCQlS ZXN0b3JlQXJjaGl2ZShBSCwgYXBwZW5kX2RhdGEsIGdsb2JhbHNfb25seSk7CiAJfQogCi0JLyog ZG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzICovCi0JaWYgKEFILT5uX2Vy cm9ycykKLQkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIHJlc3RvcmU6ICVkIiwg QUgtPm5fZXJyb3JzKTsKKwluX2Vycm9ycyA9IEFILT5uX2Vycm9yczsKIAogCS8qIEFIIG1heSBi ZSBmcmVlZCBpbiBDbG9zZUFyY2hpdmU/ICovCi0JZXhpdF9jb2RlID0gQUgtPm5fZXJyb3JzID8g MSA6IDA7Ci0KIAlDbG9zZUFyY2hpdmUoQUgpOwogCi0JcmV0dXJuIGV4aXRfY29kZTsKKwlyZXR1 cm4gbl9lcnJvcnM7CiB9CiAKIHN0YXRpYyB2b2lkCiB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFt ZSkKIHsKLQlwcmludGYoXygiJXMgcmVzdG9yZXMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGZyb20g YW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAuXG5cbiIpLCBwcm9nbmFtZSk7CisJcHJpbnRm KF8oIiVzIHJlc3RvcmVzIFBvc3RncmVTUUwgZGF0YWJhc2VzIGZyb20gYXJjaGl2ZXMgY3JlYXRl ZCBieSBwZ19kdW1wIG9yIHBnX2R1bXBhbGwuXG5cbiIpLCBwcm9nbmFtZSk7CiAJcHJpbnRmKF8o IlVzYWdlOlxuIikpOwogCXByaW50ZihfKCIgICVzIFtPUFRJT05dLi4uIFtGSUxFXVxuIiksIHBy b2duYW1lKTsKIApAQCAtNTUwLDYgKzczMyw3IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1l KQogCXByaW50ZihfKCIgIC1jLCAtLWNsZWFuICAgICAgICAgICAgICAgICAgY2xlYW4gKGRyb3Ap IGRhdGFiYXNlIG9iamVjdHMgYmVmb3JlIHJlY3JlYXRpbmdcbiIpKTsKIAlwcmludGYoXygiICAt QywgLS1jcmVhdGUgICAgICAgICAgICAgICAgIGNyZWF0ZSB0aGUgdGFyZ2V0IGRhdGFiYXNlXG4i KSk7CiAJcHJpbnRmKF8oIiAgLWUsIC0tZXhpdC1vbi1lcnJvciAgICAgICAgICBleGl0IG9uIGVy cm9yLCBkZWZhdWx0IGlzIHRvIGNvbnRpbnVlXG4iKSk7CisJcHJpbnRmKF8oIiAgLWcsIC0tZ2xv YmFscy1vbmx5ICAgICAgICAgICByZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMsIG5vIGRhdGFi YXNlc1xuIikpOwogCXByaW50ZihfKCIgIC1JLCAtLWluZGV4PU5BTUUgICAgICAgICAgICAgcmVz dG9yZSBuYW1lZCBpbmRleFxuIikpOwogCXByaW50ZihfKCIgIC1qLCAtLWpvYnM9TlVNICAgICAg ICAgICAgICAgdXNlIHRoaXMgbWFueSBwYXJhbGxlbCBqb2JzIHRvIHJlc3RvcmVcbiIpKTsKIAlw cmludGYoXygiICAtTCwgLS11c2UtbGlzdD1GSUxFTkFNRSAgICAgIHVzZSB0YWJsZSBvZiBjb250 ZW50cyBmcm9tIHRoaXMgZmlsZSBmb3JcbiIKQEAgLTU2Niw2ICs3NTAsNyBAQCB1c2FnZShjb25z dCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtMSwgLS1zaW5nbGUtdHJhbnNhY3Rpb24g ICAgIHJlc3RvcmUgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiIpKTsKIAlwcmludGYoXygiICAt LWRpc2FibGUtdHJpZ2dlcnMgICAgICAgICAgIGRpc2FibGUgdHJpZ2dlcnMgZHVyaW5nIGRhdGEt b25seSByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1lbmFibGUtcm93LXNlY3VyaXR5ICAg ICAgICBlbmFibGUgcm93IHNlY3VyaXR5XG4iKSk7CisJcHJpbnRmKF8oIiAgLS1leGNsdWRlLWRh dGFiYXNlPVBBVFRFUk4gICBkbyBub3QgcmVzdG9yZSB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlKHMp XG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1maWx0ZXI9RklMRU5BTUUgICAgICAgICAgICByZXN0b3Jl IG9yIHNraXAgb2JqZWN0cyBiYXNlZCBvbiBleHByZXNzaW9uc1xuIgogCQkJICIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW4gRklMRU5BTUVcbiIpKTsKIAlwcmludGYoXygiICAtLWlm LWV4aXN0cyAgICAgICAgICAgICAgICAgIHVzZSBJRiBFWElTVFMgd2hlbiBkcm9wcGluZyBvYmpl Y3RzXG4iKSk7CkBAIC02MDEsOCArNzg2LDggQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUp CiAJcHJpbnRmKF8oIiAgLS1yb2xlPVJPTEVOQU1FICAgICAgICAgIGRvIFNFVCBST0xFIGJlZm9y ZSByZXN0b3JlXG4iKSk7CiAKIAlwcmludGYoXygiXG4iCi0JCQkgIlRoZSBvcHRpb25zIC1JLCAt biwgLU4sIC1QLCAtdCwgLVQsIGFuZCAtLXNlY3Rpb24gY2FuIGJlIGNvbWJpbmVkIGFuZCBzcGVj aWZpZWRcbiIKLQkJCSAibXVsdGlwbGUgdGltZXMgdG8gc2VsZWN0IG11bHRpcGxlIG9iamVjdHMu XG4iKSk7CisJCQkgIlRoZSBvcHRpb25zIC1JLCAtbiwgLU4sIC1QLCAtdCwgLVQsIC0tc2VjdGlv biwgYW5kIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4gYmVcbiIKKwkJCSAiY29tYmluZWQgYW5kIHNw ZWNpZmllZCBtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsK IAlwcmludGYoXygiXG5JZiBubyBpbnB1dCBmaWxlIG5hbWUgaXMgc3VwcGxpZWQsIHRoZW4gc3Rh bmRhcmQgaW5wdXQgaXMgdXNlZC5cblxuIikpOwogCXByaW50ZihfKCJSZXBvcnQgYnVncyB0byA8 JXM+LlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JUKTsKIAlwcmludGYoXygiJXMgaG9tZSBwYWdlOiA8 JXM+XG4iKSwgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VSTCk7CkBAIC03MDcsMyArODkyLDQwNyBA QCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlv bnMgKm9wdHMpCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIGZpbGVfZXhp c3RzX2luX2RpcmVjdG9yeQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmlsZSBleGlzdHMg aW4gdGhlIGdpdmVuIGRpcmVjdG9yeS4KKyAqLworc3RhdGljIGJvb2wKK2ZpbGVfZXhpc3RzX2lu X2RpcmVjdG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0 cnVjdCBzdGF0IHN0OworCWNoYXIJCWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNucHJpbnRmKGJ1 ZiwgTUFYUEdQQVRILCAiJXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BBVEgpCisJCXBn X2ZhdGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsKKworCXJldHVy biAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsKK30KKworLyoK KyAqIGdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZQorICoKKyAqIFRoaXMgd2lsbCBtYXJrIGZv ciBza2lwcGluZyBhbnkgZW50cmllcyBmcm9tIGRibmFtZV9vaWRfbGlzdCB0aGF0IHBhdHRlcm4g bWF0Y2ggYW4KKyAqIGVudHJ5IGluIHRoZSBkYl9leGNsdWRlX3BhdHRlcm5zIGxpc3QuCisgKgor ICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRhdGFiYXNlIHRvIGJlIHJlc3RvcmVkLgorICoKKyAq Lworc3RhdGljIGludAorZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKFBHY29ubiAqY29ubiwK KwkJCQkJCQlTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJU2ltcGxlU3Ry aW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKQoreworCWludAkJCWNvdW50X2RiID0gMDsKKwlQ UUV4cEJ1ZmZlciBxdWVyeTsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlxdWVyeSA9IGNyZWF0ZVBR RXhwQnVmZmVyKCk7CisKKwlpZiAoIWNvbm4gJiYgZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9 IE5VTEwpCisJCXBnX2xvZ19pbmZvKCJjb25zaWRlcmluZyBQQVRURVJOIGFzIE5BTUUgZm9yIC0t ZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24gYXMgbm8gZGF0YWJhc2UgY29ubmVjdGlvbiB3aGlsZSBk b2luZyBwZ19yZXN0b3JlIik7CisKKwkvKgorCSAqIFByb2Nlc3Mgb25lIGJ5IG9uZSBhbGwgZGJu YW1lcyBhbmQgaWYgc3BlY2lmaWVkIHRvIHNraXAgcmVzdG9yaW5nLCB0aGVuCisJICogcmVtb3Zl IGRibmFtZSBmcm9tIGxpc3QuCisJICovCisJZm9yIChTaW1wbGVQdHJMaXN0Q2VsbCAqZGJfY2Vs bCA9IGRibmFtZV9vaWRfbGlzdC0+aGVhZDsKKwkJIGRiX2NlbGw7IGRiX2NlbGwgPSBkYl9jZWxs LT5uZXh0KQorCXsKKwkJRGJPaWROYW1lICAqZGJpZG5hbWUgPSAoRGJPaWROYW1lICopIGRiX2Nl bGwtPnB0cjsKKwkJYm9vbAkJc2tpcF9kYl9yZXN0b3JlID0gZmFsc2U7CisJCVBRRXhwQnVmZmVy IGRiX2xpdCA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJYXBwZW5kU3RyaW5nTGl0ZXJhbENv bm4oZGJfbGl0LCBkYmlkbmFtZS0+c3RyLCBjb25uKTsKKworCQlmb3IgKFNpbXBsZVN0cmluZ0xp c3RDZWxsICpwYXRfY2VsbCA9IGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZDsgcGF0X2NlbGw7IHBh dF9jZWxsID0gcGF0X2NlbGwtPm5leHQpCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBpcyBh biBleGFjdCBtYXRjaCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gdHJ5IGEgcGF0dGVybgorCQkJICog bWF0Y2gKKwkJCSAqLworCQkJaWYgKHBnX3N0cmNhc2VjbXAoZGJpZG5hbWUtPnN0ciwgcGF0X2Nl bGwtPnZhbCkgPT0gMCkKKwkJCQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVlOworCQkJLyogT3RoZXJ3 aXNlLCB0cnkgYSBwYXR0ZXJuIG1hdGNoIGlmIHRoZXJlIGlzIGEgY29ubmVjdGlvbiAqLworCQkJ ZWxzZSBpZiAoY29ubikKKwkJCXsKKwkJCQlpbnQJCQlkb3RjbnQ7CisKKwkJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cihxdWVyeSwgIlNFTEVDVCAxICIpOworCQkJCXByb2Nlc3NTUUxOYW1lUGF0dGVy bihjb25uLCBxdWVyeSwgcGF0X2NlbGwtPnZhbCwgZmFsc2UsCisJCQkJCQkJCQkgIGZhbHNlLCBO VUxMLCBkYl9saXQtPmRhdGEsCisJCQkJCQkJCQkgIE5VTEwsIE5VTEwsIE5VTEwsICZkb3RjbnQp OworCisJCQkJaWYgKGRvdGNudCA+IDApCisJCQkJeworCQkJCQlwZ19sb2dfZXJyb3IoImltcHJv cGVyIHF1YWxpZmllZCBuYW1lICh0b28gbWFueSBkb3R0ZWQgbmFtZXMpOiAlcyIsCisJCQkJCQkJ CSBkYmlkbmFtZS0+c3RyKTsKKwkJCQkJUFFmaW5pc2goY29ubik7CisJCQkJCWV4aXRfbmljZWx5 KDEpOworCQkJCX0KKworCQkJCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVyeS0+ZGF0YSwg ZmFsc2UpOworCisJCQkJaWYgKChQUXJlc3VsdFN0YXR1cyhyZXMpID09IFBHUkVTX1RVUExFU19P SykgJiYgUFFudHVwbGVzKHJlcykpCisJCQkJeworCQkJCQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVl OworCQkJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgbmFtZSBcIiVzXCIgbWF0Y2hlcyBleGNsdWRl IHBhdHRlcm4gXCIlc1wiIiwgZGJpZG5hbWUtPnN0ciwgcGF0X2NlbGwtPnZhbCk7CisJCQkJfQor CisJCQkJUFFjbGVhcihyZXMpOworCQkJCXJlc2V0UFFFeHBCdWZmZXIocXVlcnkpOworCQkJfQor CisJCQlpZiAoc2tpcF9kYl9yZXN0b3JlKQorCQkJCWJyZWFrOworCQl9CisKKwkJZGVzdHJveVBR RXhwQnVmZmVyKGRiX2xpdCk7CisKKwkJLyoKKwkJICogTWFyayBkYiB0byBiZSBza2lwcGVkIG9y IGluY3JlbWVudCB0aGUgY291bnRlciBvZiBkYnMgdG8gYmUKKwkJICogcmVzdG9yZWQKKwkJICov CisJCWlmIChza2lwX2RiX3Jlc3RvcmUpCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJleGNsdWRpbmcg ZGF0YWJhc2UgXCIlc1wiIiwgZGJpZG5hbWUtPnN0cik7CisJCQlkYmlkbmFtZS0+b2lkID0gSW52 YWxpZE9pZDsKKwkJfQorCQllbHNlCisJCXsKKwkJCWNvdW50X2RiKys7CisJCX0KKwl9CisKKwlk ZXN0cm95UFFFeHBCdWZmZXIocXVlcnkpOworCisJcmV0dXJuIGNvdW50X2RiOworfQorCisvKgor ICogZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlCisgKgorICogT3BlbiBtYXAuZGF0IGZp bGUgYW5kIHJlYWQgbGluZSBieSBsaW5lIGFuZCB0aGVuIHByZXBhcmUgYSBsaXN0IG9mIGRhdGFi YXNlCisgKiBuYW1lcyBhbmQgY29ycmVzcG9uZGluZyBkYl9vaWQuCisgKgorICogUmV0dXJucywg dG90YWwgbnVtYmVyIG9mIGRhdGFiYXNlIG5hbWVzIGluIG1hcC5kYXQgZmlsZS4KKyAqLworc3Rh dGljIGludAorZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNoYXIgKmR1bXBk aXJwYXRoLCBTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QpCit7CisJU3RyaW5nSW5mb0Rh dGEgbGluZWJ1ZjsKKwlGSUxFCSAgICpwZmlsZTsKKwljaGFyCQltYXBfZmlsZV9wYXRoW01BWFBH UEFUSF07CisJaW50CQkJY291bnQgPSAwOworCisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIG1h cC5kYXQgZmlsZSBpbiBkdW1wLCB0aGVuIHJldHVybiBmcm9tIGhlcmUgYXMgdGhlcmUgaXMKKwkg KiBubyBkYXRhYmFzZSB0byByZXN0b3JlLgorCSAqLworCWlmICghZmlsZV9leGlzdHNfaW5fZGly ZWN0b3J5KGR1bXBkaXJwYXRoLCAibWFwLmRhdCIpKQorCXsKKwkJcGdfbG9nX2luZm8oImRhdGFi YXNlIHJlc3RvcmluZyBpcyBza2lwcGVkIGJlY2F1c2UgZmlsZSBcIiVzXCIgZG9lcyBub3QgZXhp c3QgaW4gZGlyZWN0b3J5IFwiJXNcIiIsICJtYXAuZGF0IiwgZHVtcGRpcnBhdGgpOworCQlyZXR1 cm4gMDsKKwl9CisKKwlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAu ZGF0IiwgZHVtcGRpcnBhdGgpOworCisJLyogT3BlbiBtYXAuZGF0IGZpbGUuICovCisJcGZpbGUg PSBmb3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfUik7CisKKwlpZiAocGZpbGUgPT0gTlVM TCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIG1hcF9maWxl X3BhdGgpOworCisJaW5pdFN0cmluZ0luZm8oJmxpbmVidWYpOworCisJLyogQXBwZW5kIGFsbCB0 aGUgZGJuYW1lL2RiX29pZCBjb21iaW5hdGlvbnMgdG8gdGhlIGxpc3QuICovCisJd2hpbGUgKHBn X2dldF9saW5lX2J1ZihwZmlsZSwgJmxpbmVidWYpKQorCXsKKwkJT2lkCQkJZGJfb2lkID0gSW52 YWxpZE9pZDsKKwkJY2hhcgkgICAqZGJuYW1lOworCQlEYk9pZE5hbWUgICpkYmlkbmFtZTsKKwkJ aW50CQkJbmFtZWxlbjsKKwkJY2hhcgkgICAqcCA9IGxpbmVidWYuZGF0YTsKKworCQkvKiBFeHRy YWN0IGRib2lkLiAqLworCQl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikgKnApKQorCQkJ cCsrOworCQlpZiAocCA+IGxpbmVidWYuZGF0YSAmJiAqcCA9PSAnICcpCisJCXsKKwkJCXNzY2Fu ZihsaW5lYnVmLmRhdGEsICIldSIsICZkYl9vaWQpOworCQkJcCsrOworCQl9CisKKwkJLyogZGJu YW1lIGlzIHRoZSByZXN0IG9mIHRoZSBsaW5lICovCisJCWRibmFtZSA9IHA7CisJCW5hbWVsZW4g PSBzdHJsZW4oZGJuYW1lKTsKKworCQkvKiBSZXBvcnQgZXJyb3IgYW5kIGV4aXQgaWYgdGhlIGZp bGUgaGFzIGFueSBjb3JydXB0ZWQgZGF0YS4gKi8KKwkJaWYgKCFPaWRJc1ZhbGlkKGRiX29pZCkg fHwgbmFtZWxlbiA8PSAxKQorCQkJcGdfZmF0YWwoImludmFsaWQgZW50cnkgaW4gZmlsZSBcIiVz XCIgb24gbGluZSAlZCIsIG1hcF9maWxlX3BhdGgsCisJCQkJCSBjb3VudCArIDEpOworCisJCXBn X2xvZ19pbmZvKCJmb3VuZCBkYXRhYmFzZSBcIiVzXCIgKE9JRDogJXUpIGluIGZpbGUgXCIlc1wi IiwKKwkJCQkJZGJuYW1lLCBkYl9vaWQsIG1hcF9maWxlX3BhdGgpOworCisJCWRiaWRuYW1lID0g cGdfbWFsbG9jKG9mZnNldG9mKERiT2lkTmFtZSwgc3RyKSArIG5hbWVsZW4gKyAxKTsKKwkJZGJp ZG5hbWUtPm9pZCA9IGRiX29pZDsKKwkJc3RybGNweShkYmlkbmFtZS0+c3RyLCBkYm5hbWUsIG5h bWVsZW4pOworCisJCXNpbXBsZV9wdHJfbGlzdF9hcHBlbmQoZGJuYW1lX29pZF9saXN0LCBkYmlk bmFtZSk7CisJCWNvdW50Kys7CisJfQorCisJLyogQ2xvc2UgbWFwLmRhdCBmaWxlLiAqLworCWZj bG9zZShwZmlsZSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiByZXN0b3JlX2FsbF9k YXRhYmFzZXMKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBkYXRhYmFzZXMgdGhvc2UgZHVtcHMg YXJlIHByZXNlbnQgaW4KKyAqIGRpcmVjdG9yeSBiYXNlZCBvbiBtYXAuZGF0IGZpbGUgbWFwcGlu Zy4KKyAqCisgKiBUaGlzIHdpbGwgc2tpcCByZXN0b3JpbmcgZm9yIGRhdGFiYXNlcyB0aGF0IGFy ZSBzcGVjaWZpZWQgd2l0aAorICogZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24uCisgKgorICogcmV0 dXJucywgbnVtYmVyIG9mIGVycm9ycyB3aGlsZSBkb2luZyByZXN0b3JlLgorICovCitzdGF0aWMg aW50CityZXN0b3JlX2FsbF9kYXRhYmFzZXMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJ CQkJICBTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25z ICpvcHRzLAorCQkJCQkgIGludCBudW1Xb3JrZXJzKQoreworCVNpbXBsZVB0ckxpc3QgZGJuYW1l X29pZF9saXN0ID0ge05VTEwsIE5VTEx9OworCWludAkJCW51bV9kYl9yZXN0b3JlID0gMDsKKwlp bnQJCQludW1fdG90YWxfZGI7CisJaW50CQkJbl9lcnJvcnNfdG90YWw7CisJY2hhcgkgICAqY29u bmVjdGVkX2RiID0gTlVMTDsKKwlib29sCQlkdW1wRGF0YSA9IG9wdHMtPmR1bXBEYXRhOworCWJv b2wJCWR1bXBTY2hlbWEgPSBvcHRzLT5kdW1wU2NoZW1hOworCWJvb2wJCWR1bXBTdGF0aXN0aWNz ID0gb3B0cy0+ZHVtcFNjaGVtYTsKKwlQR2Nvbm4JICAgKmNvbm4gPSBOVUxMOworCWNoYXIJCWds b2JhbF9wYXRoW01BWFBHUEFUSF07CisKKwkvKiBTZXQgcGF0aCBmb3IgdG9jLmdsbyBmaWxlLiAq LworCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcy90b2MuZ2xvIiwgaW5wdXRG aWxlU3BlYyk7CisKKwkvKiBTYXZlIGRiIG5hbWUgdG8gcmV1c2UgaXQgZm9yIGFsbCB0aGUgZGF0 YWJhc2UuICovCisJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQorCQljb25uZWN0ZWRfZGIgPSBv cHRzLT5jcGFyYW1zLmRibmFtZTsKKworCW51bV90b3RhbF9kYiA9IGdldF9kYm5hbWVfb2lkX2xp c3RfZnJvbV9tZmlsZShpbnB1dEZpbGVTcGVjLCAmZGJuYW1lX29pZF9saXN0KTsKKworCS8qIElm IG1hcC5kYXQgaGFzIG5vIGVudHJpZXMsIHJldHVybiBhZnRlciBwcm9jZXNzaW5nIGdsb2JhbCBj b21tYW5kcy4gKi8KKwlpZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0gTlVMTCkKKwkJcmV0dXJu IHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoZ2xvYmFsX3BhdGgsIG9wdHMsIG51bVdvcmtlcnMsIGZh bHNlKTsKKworCXBnX2xvZ19pbmZvKG5nZXR0ZXh0KCJmb3VuZCAlZCBkYXRhYmFzZSBuYW1lIGlu IFwiJXNcIiIsCisJCQkJCQkgImZvdW5kICVkIGRhdGFiYXNlIG5hbWVzIGluIFwiJXNcIiIsCisJ CQkJCQkgbnVtX3RvdGFsX2RiKSwKKwkJCQludW1fdG90YWxfZGIsICJtYXAuZGF0Iik7CisKKwkv KgorCSAqIElmIGV4Y2x1ZGUtcGF0dGVybnMgaXMgZ2l2ZW4sIHRoZW4gY29ubmVjdCB0byB0aGUg ZGF0YWJhc2UgdG8gcHJvY2VzcworCSAqIGl0LgorCSAqLworCWlmIChkYl9leGNsdWRlX3BhdHRl cm5zLmhlYWQgIT0gTlVMTCkKKwl7CisJCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKKwkJewor CQkJY29ubiA9IENvbm5lY3REYXRhYmFzZShvcHRzLT5jcGFyYW1zLmRibmFtZSwgTlVMTCwgb3B0 cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCSAgIG9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRz LT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJCQkJICAgZmFsc2UsIHByb2du YW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCQkJaWYgKCFjb25uKQorCQkJCXBnX2Zh dGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCBvcHRzLT5jcGFyYW1z LmRibmFtZSk7CisJCX0KKworCQlpZiAoIWNvbm4pCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJ0cnlp bmcgdG8gY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCAicG9zdGdyZXMiKTsKKworCQkJY29u biA9IENvbm5lY3REYXRhYmFzZSgicG9zdGdyZXMiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9z dCwKKwkJCQkJCQkJICAgb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5h bWUsIFRSSV9ERUZBVUxULAorCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwpOworCisJCQkvKiBUcnkgd2l0aCB0ZW1wbGF0ZTEuICovCisJCQlpZiAoIWNv bm4pCisJCQl7CisJCQkJcGdfbG9nX2luZm8oInRyeWluZyB0byBjb25uZWN0IHRvIGRhdGFiYXNl IFwiJXNcIiIsICJ0ZW1wbGF0ZTEiKTsKKworCQkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2UoInRl bXBsYXRlMSIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCQkJICAgb3B0cy0+ Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJ CQkJCQkJICAgZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJCX0K KwkJfQorCX0KKworCS8qCisJICogZmlsdGVyIHRoZSBkYiBsaXN0IGFjY29yZGluZyB0byB0aGUg ZXhjbHVkZSBwYXR0ZXJucworCSAqLworCW51bV9kYl9yZXN0b3JlID0gZ2V0X2RibmFtZXNfbGlz dF90b19yZXN0b3JlKGNvbm4sICZkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJCQkJCQkgZGJfZXhj bHVkZV9wYXR0ZXJucyk7CisKKwkvKiBDbG9zZSB0aGUgZGIgY29ubmVjdGlvbiBhcyB3ZSBhcmUg ZG9uZSB3aXRoIGdsb2JhbHMgYW5kIHBhdHRlcm5zLiAqLworCWlmIChjb25uKQorCQlQUWZpbmlz aChjb25uKTsKKworCS8qIE9wZW4gdG9jLmRhdCBmaWxlIGFuZCBleGVjdXRlL2FwcGVuZCBhbGwg dGhlIGdsb2JhbCBzcWwgY29tbWFuZHMuICovCisJbl9lcnJvcnNfdG90YWwgPSByZXN0b3JlX2ds b2JhbF9vYmplY3RzKGdsb2JhbF9wYXRoLCBvcHRzLCBudW1Xb3JrZXJzLCBmYWxzZSk7CisKKwkv KiBFeGl0IGlmIG5vIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCWlmIChkYm5hbWVfb2lk X2xpc3QuaGVhZCA9PSBOVUxMIHx8IG51bV9kYl9yZXN0b3JlID09IDApCisJeworCQlwZ19sb2df aW5mbyhuZ2V0dGV4dCgibm8gZGF0YWJhc2UgbmVlZHMgcmVzdG9yaW5nIG91dCBvZiAlZCBkYXRh YmFzZSIsCisJCQkJCQkJICJubyBkYXRhYmFzZSBuZWVkcyByZXN0b3Jpbmcgb3V0IG9mICVkIGRh dGFiYXNlcyIsIG51bV90b3RhbF9kYiksCisJCQkJCW51bV90b3RhbF9kYik7CisJCXJldHVybiBu X2Vycm9yc190b3RhbDsKKwl9CisKKwlwZ19sb2dfaW5mbygibmVlZCB0byByZXN0b3JlICVkIGRh dGFiYXNlcyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX2RiX3Jlc3RvcmUsIG51bV90b3RhbF9k Yik7CisKKwkvKgorCSAqIFdlIGhhdmUgYSBsaXN0IG9mIGRhdGFiYXNlcyB0byByZXN0b3JlIGFm dGVyIHByb2Nlc3NpbmcgdGhlCisJICogZXhjbHVkZS1kYXRhYmFzZSBzd2l0Y2goZXMpLiAgTm93 IHdlIGNhbiByZXN0b3JlIHRoZW0gb25lIGJ5IG9uZS4KKwkgKi8KKwlmb3IgKFNpbXBsZVB0ckxp c3RDZWxsICpkYl9jZWxsID0gZGJuYW1lX29pZF9saXN0LmhlYWQ7CisJCSBkYl9jZWxsOyBkYl9j ZWxsID0gZGJfY2VsbC0+bmV4dCkKKwl7CisJCURiT2lkTmFtZSAgKmRiaWRuYW1lID0gKERiT2lk TmFtZSAqKSBkYl9jZWxsLT5wdHI7CisJCWNoYXIJCXN1YmRpcnBhdGhbTUFYUEdQQVRIXTsKKwkJ Y2hhcgkJc3ViZGlyZGJwYXRoW01BWFBHUEFUSF07CisJCWNoYXIJCWRiZmlsZW5hbWVbTUFYUEdQ QVRIXTsKKwkJaW50CQkJbl9lcnJvcnM7CisKKwkJLyogaWdub3JlIGRicyBtYXJrZWQgZm9yIHNr aXBwaW5nICovCisJCWlmIChkYmlkbmFtZS0+b2lkID09IEludmFsaWRPaWQpCisJCQljb250aW51 ZTsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHJlc2V0IG92ZXJyaWRlX2RibmFtZSBzbyB0aGF0 IG9iamVjdHMgY2FuIGJlIHJlc3RvcmVkCisJCSAqIGludG8gYW4gYWxyZWFkeSBjcmVhdGVkIGRh dGFiYXNlLiAodXNlZCB3aXRoIC1kLy0tZGJuYW1lIG9wdGlvbikKKwkJICovCisJCWlmIChvcHRz LT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSkKKwkJeworCQkJcGZyZWUob3B0cy0+Y3BhcmFtcy5v dmVycmlkZV9kYm5hbWUpOworCQkJb3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUgPSBOVUxM OworCQl9CisKKwkJc25wcmludGYoc3ViZGlyZGJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFz ZXMiLCBpbnB1dEZpbGVTcGVjKTsKKworCQkvKgorCQkgKiBMb29rIGZvciB0aGUgZGF0YWJhc2Ug ZHVtcCBmaWxlL2Rpci4gSWYgdGhlcmUgaXMgYW4ge29pZH0udGFyIG9yCisJCSAqIHtvaWR9LmRt cCBmaWxlLCB1c2UgaXQuIE90aGVyd2lzZSB0cnkgdG8gdXNlIGEgZGlyZWN0b3J5IGNhbGxlZAor CQkgKiB7b2lkfQorCQkgKi8KKwkJc25wcmludGYoZGJmaWxlbmFtZSwgTUFYUEdQQVRILCAiJXUu dGFyIiwgZGJpZG5hbWUtPm9pZCk7CisJCWlmIChmaWxlX2V4aXN0c19pbl9kaXJlY3Rvcnkoc3Vi ZGlyZGJwYXRoLCBkYmZpbGVuYW1lKSkKKwkJCXNucHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBHUEFU SCwgIiVzL2RhdGFiYXNlcy8ldS50YXIiLCBpbnB1dEZpbGVTcGVjLCBkYmlkbmFtZS0+b2lkKTsK KwkJZWxzZQorCQl7CisJCQlzbnByaW50ZihkYmZpbGVuYW1lLCBNQVhQR1BBVEgsICIldS5kbXAi LCBkYmlkbmFtZS0+b2lkKTsKKworCQkJaWYgKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShzdWJk aXJkYnBhdGgsIGRiZmlsZW5hbWUpKQorCQkJCXNucHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBHUEFU SCwgIiVzL2RhdGFiYXNlcy8ldS5kbXAiLCBpbnB1dEZpbGVTcGVjLCBkYmlkbmFtZS0+b2lkKTsK KwkJCWVsc2UKKwkJCQlzbnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFz ZXMvJXUiLCBpbnB1dEZpbGVTcGVjLCBkYmlkbmFtZS0+b2lkKTsKKwkJfQorCisJCXBnX2xvZ19p bmZvKCJyZXN0b3JpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJpZG5hbWUtPnN0cik7CisKKwkJLyog SWYgZGF0YWJhc2UgaXMgYWxyZWFkeSBjcmVhdGVkLCB0aGVuIGRvbid0IHNldCBjcmVhdGVEQiBm bGFnLiAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsKKwkJCVBHY29ubgkgICAq dGVzdF9jb25uOworCisJCQl0ZXN0X2Nvbm4gPSBDb25uZWN0RGF0YWJhc2UoZGJpZG5hbWUtPnN0 ciwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCQkJb3B0cy0+Y3BhcmFtcy5w Z3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQkJCQkJCWZh bHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCQlpZiAodGVzdF9jb25u KQorCQkJeworCQkJCVBRZmluaXNoKHRlc3RfY29ubik7CisKKwkJCQkvKiBVc2UgYWxyZWFkeSBj cmVhdGVkIGRhdGFiYXNlIGZvciBjb25uZWN0aW9uLiAqLworCQkJCW9wdHMtPmNyZWF0ZURCID0g MDsKKwkJCQlvcHRzLT5jcGFyYW1zLmRibmFtZSA9IGRiaWRuYW1lLT5zdHI7CisJCQl9CisJCQll bHNlCisJCQl7CisJCQkJLyogd2UnbGwgaGF2ZSB0byBjcmVhdGUgaXQgKi8KKwkJCQlvcHRzLT5j cmVhdGVEQiA9IDE7CisJCQkJb3B0cy0+Y3BhcmFtcy5kYm5hbWUgPSBjb25uZWN0ZWRfZGI7CisJ CQl9CisJCX0KKworCQkvKgorCQkgKiBSZXNldCBmbGFncyAtIG1pZ2h0IGhhdmUgYmVlbiByZXNl dCBpbiBwZ19iYWNrdXBfYXJjaGl2ZXIuYyBieSB0aGUKKwkJICogcHJldmlvdXMgcmVzdG9yZS4K KwkJICovCisJCW9wdHMtPmR1bXBEYXRhID0gZHVtcERhdGE7CisJCW9wdHMtPmR1bXBTY2hlbWEg PSBkdW1wU2NoZW1hOworCQlvcHRzLT5kdW1wU3RhdGlzdGljcyA9IGR1bXBTdGF0aXN0aWNzOwor CisJCS8qIFJlc3RvcmUgdGhlIHNpbmdsZSBkYXRhYmFzZS4gKi8KKwkJbl9lcnJvcnMgPSByZXN0 b3JlX29uZV9kYXRhYmFzZShzdWJkaXJwYXRoLCBvcHRzLCBudW1Xb3JrZXJzLCB0cnVlLCBmYWxz ZSwgZmFsc2UpOworCisJCS8qIFByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJp bmcgc2luZ2xlIGRhdGFiYXNlIHJlc3RvcmUuICovCisJCWlmIChuX2Vycm9ycykKKwkJeworCQkJ bl9lcnJvcnNfdG90YWwgKz0gbl9lcnJvcnM7CisJCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGln bm9yZWQgb24gZGF0YWJhc2UgXCIlc1wiIHJlc3RvcmU6ICVkIiwgZGJpZG5hbWUtPnN0ciwgbl9l cnJvcnMpOworCQl9CisJfQorCisJLyogTG9nIG51bWJlciBvZiBwcm9jZXNzZWQgZGF0YWJhc2Vz LiAqLworCXBnX2xvZ19pbmZvKCJudW1iZXIgb2YgcmVzdG9yZWQgZGF0YWJhc2VzIGlzICVkIiwg bnVtX2RiX3Jlc3RvcmUpOworCisJLyogRnJlZSBkYm5hbWUgYW5kIGRib2lkIGxpc3QuICovCisJ c2ltcGxlX3B0cl9saXN0X2Rlc3Ryb3koJmRibmFtZV9vaWRfbGlzdCk7CisKKwlyZXR1cm4gbl9l cnJvcnNfdG90YWw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMu cGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBt b2RlIDEwMDc1NQppbmRleCBhYjkzMTBlYjQyYi4uOTIyMWQzYzlmNWMKLS0tIGEvc3JjL2Jpbi9w Z19kdW1wL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5w bApAQCAtMjQ0LDQgKzI0NCwzMSBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX2R1bXBhbGw6 IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAt Zy8tLWdsb2JhbHMtb25seScKICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19kdW1w YWxsJywgJy0tZm9ybWF0JywgJ3gnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogdW5yZWNv Z25pemVkIG91dHB1dCBmb3JtYXQgIngiO1xFLywKKwkncGdfZHVtcGFsbDogdW5yZWNvZ25pemVk IG91dHB1dCBmb3JtYXQnKTsKKworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2R1bXBhbGwn LCAnLS1mb3JtYXQnLCAnZCcsICctLXJlc3RyaWN0LWtleT11dScsICctZiBkdW1wZmlsZScgXSwK Kwlxci9cUXBnX2R1bXBhbGw6IGVycm9yOiBvcHRpb24gLS1yZXN0cmljdC1rZXkgY2FuIG9ubHkg YmUgdXNlZCB3aXRoIC0tZm9ybWF0PXBsYWluXEUvLAorCSdwZ19kdW1wYWxsOiAtLXJlc3RyaWN0 LWtleSBjYW4gb25seSBiZSB1c2VkIHdpdGggcGxhaW4gZHVtcCBmb3JtYXQnKTsKKworY29tbWFu ZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycs ICctLWdsb2JhbHMtb25seScsICctZCcsICd4eHgnIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJv cjogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRo IC1nXC8tLWdsb2JhbHMtb25seVxFLywKKwkncGdfcmVzdG9yZTogb3B0aW9uIC0tZXhjbHVkZS1k YXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5Jwor KTsKKworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1leGNsdWRlLWRh dGFiYXNlPWZvbycsICctZCcsICd4eHgnLCAnZHVtcGRpcicgXSwKKwlxci9cUXBnX3Jlc3RvcmU6 IGVycm9yOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbiBiZSB1c2VkIG9ubHkgd2hlbiBy ZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gb3B0 aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBpcyB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9m IHBnX2R1bXAnCispOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfcmVzdG9yZScsICct LWdsb2JhbHMtb25seScsICctZCcsICd4eHgnLCAnZHVtcGRpcicgXSwKKwlxci9cUXBnX3Jlc3Rv cmU6IGVycm9yOiBvcHRpb24gLWdcLy0tZ2xvYmFscy1vbmx5IGNhbiBiZSB1c2VkIG9ubHkgd2hl biByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4g b3B0aW9uIC0tZ2xvYmFscy1vbmx5IGlzIG5vdCB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1w IG9mIHBnX2R1bXAnCispOwogZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwN19wZ19kdW1w YWxsLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwLi4zYzdkMmFkN2M1 MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwN19wZ19kdW1wYWxsLnBs CkBAIC0wLDAgKzEsMzk2IEBACisjIENvcHlyaWdodCAoYykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZB VEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0 Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkdGVtcGRpciA9IFBv c3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOworbXkgJHJ1bl9kYiA9ICdwb3N0Z3Jlcyc7 CitteSAkc2VwID0gJHdpbmRvd3Nfb3MgPyAiXFwiIDogIi8iOworCisjIFRhYmxlc3BhY2UgbG9j YXRpb25zIHVzZWQgYnkgInJlc3RvcmVfdGFibGVzcGFjZSIgdGVzdCBjYXNlLgorbXkgJHRhYmxl c3BhY2UxID0gIiR7dGVtcGRpcn0ke3NlcH10YmwxIjsKK215ICR0YWJsZXNwYWNlMiA9ICIke3Rl bXBkaXJ9JHtzZXB9dGJsMiI7Citta2RpcigkdGFibGVzcGFjZTEpIHx8IGRpZSAibWtkaXIgJHRh Ymxlc3BhY2UxICQhIjsKK21rZGlyKCR0YWJsZXNwYWNlMikgfHwgZGllICJta2RpciAkdGFibGVz cGFjZTIgJCEiOworCisjIFNjYXBlIHRhYmxlc3BhY2UgbG9jYXRpb25zIG9uIFdpbmRvd3MuCisk dGFibGVzcGFjZTEgPSAkd2luZG93c19vcyA/ICgkdGFibGVzcGFjZTEgPX4gcy9cXC9cXFxcL2dy KSA6ICR0YWJsZXNwYWNlMTsKKyR0YWJsZXNwYWNlMiA9ICR3aW5kb3dzX29zID8gKCR0YWJsZXNw YWNlMiA9fiBzL1xcL1xcXFwvZ3IpIDogJHRhYmxlc3BhY2UyOworCisjIFdoZXJlIHBnX2R1bXBh bGwgd2lsbCBiZSBleGVjdXRlZC4KK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rl ci0+bmV3KCdub2RlJyk7Ciskbm9kZS0+aW5pdDsKKyRub2RlLT5zdGFydDsKKworCisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK KyMgRGVmaW5pdGlvbiBvZiB0aGUgcGdfZHVtcGFsbCB0ZXN0IGNhc2VzIHRvIHJ1bi4KKyMKKyMg RWFjaCBvZiB0aGVzZSB0ZXN0IGNhc2VzIGFyZSBuYW1lZCBhbmQgdGhvc2UgbmFtZXMgYXJlIHVz ZWQgZm9yIGZhaWwKKyMgcmVwb3J0aW5nIGFuZCBhbHNvIHRvIHNhdmUgdGhlIGR1bXAgYW5kIHJl c3RvcmUgaW5mb3JtYXRpb24gbmVlZGVkIGZvciB0aGUKKyMgdGVzdCB0byBhc3NlcnQuCisjCisj IFRoZSAic2V0dXBfc3FsIiBpcyBhIHBzcWwgdmFsaWQgc2NyaXB0IHRoYXQgY29udGFpbnMgU1FM IGNvbW1hbmRzIHRvIGV4ZWN1dGUKKyMgYmVmb3JlIG9mIGFjdHVhbGx5IGV4ZWN1dGUgdGhlIHRl c3RzLiBUaGUgc2V0dXBzIGFyZSBhbGwgZXhlY3V0ZWQgYmVmb3JlIG9mCisjIGFueSB0ZXN0IGV4 ZWN1dGlvbi4KKyMKKyMgVGhlICJkdW1wX2NtZCIgYW5kICJyZXN0b3JlX2NtZCIgYXJlIHRoZSBj b21tYW5kcyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuIFRoZQorIyAicmVzdG9yZV9jbWQiIG11c3Qg aGF2ZSB0aGUgLS1maWxlIGZsYWcgdG8gc2F2ZSB0aGUgcmVzdG9yZSBvdXRwdXQgc28gdGhhdCB3 ZQorIyBjYW4gYXNzZXJ0IG9uIGl0LgorIworIyBUaGUgImxpa2UiIGFuZCAidW5saWtlIiBpcyBh IHJlZ2V4cCB0aGF0IGlzIHVzZWQgdG8gbWF0Y2ggdGhlIHBnX3Jlc3RvcmUKKyMgb3V0cHV0LiBJ dCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZW4gZmlsbGVkIHBlciB0ZXN0IGNhc2VzIGJ1 dCBpdCBhbHNvCisjIGNhbiBoYXZlIGJvdGguIFNlZSAiZXhjbHVkaW5nX2RhdGFiYXNlcyIgdGVz dCBjYXNlIGZvciBleGFtcGxlLgorbXkgJXBnZHVtcGFsbF9ydW5zID0gKAorCXJlc3RvcmVfcm9s ZXMgPT4geworCQlzZXR1cF9zcWwgPT4gJworCQlDUkVBVEUgUk9MRSBkdW1wYWxsIFdJVEggRU5D UllQVEVEIFBBU1NXT1JEIFwnYWRtaW5cJyBTVVBFUlVTRVI7CisJCUNSRUFURSBST0xFIGR1bXBh bGwyIFdJVEggUkVQTElDQVRJT04gQ09OTkVDVElPTiBMSU1JVCAxMDsnLAorCQlkdW1wX2NtZCA9 PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJ Jy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfcm9sZXMiLAorCQldLAorCQlyZXN0b3JlX2Nt ZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3Rv cnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfcm9sZXMuc3FsIiwKKwkJCSIk dGVtcGRpci9yZXN0b3JlX3JvbGVzIiwKKwkJXSwKKwkJbGlrZSA9PiBxci8KKwkJCVxzKlxRQ1JF QVRFIFJPTEUgZHVtcGFsbDI7XEUKKwkJCVxzKlxRQUxURVIgUk9MRSBkdW1wYWxsMiBXSVRIIE5P U1VQRVJVU0VSIElOSEVSSVQgTk9DUkVBVEVST0xFIE5PQ1JFQVRFREIgTk9MT0dJTiBSRVBMSUNB VElPTiBOT0JZUEFTU1JMUyBDT05ORUNUSU9OIExJTUlUIDEwO1xFCisJCS94bQorCX0sCisKKwly ZXN0b3JlX3RhYmxlc3BhY2UgPT4geworCQlzZXR1cF9zcWwgPT4gIgorCQlDUkVBVEUgUk9MRSB0 YXA7CisJCUNSRUFURSBUQUJMRVNQQUNFIHRibDEgT1dORVIgdGFwIExPQ0FUSU9OICckdGFibGVz cGFjZTEnOworCQlDUkVBVEUgVEFCTEVTUEFDRSB0YmwyIE9XTkVSIHRhcCBMT0NBVElPTiAnJHRh Ymxlc3BhY2UyJyBXSVRIIChzZXFfcGFnZV9jb3N0PTEuMCk7IiwKKwkJZHVtcF9jbWQgPT4gWwor CQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZp bGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2UiLAorCQldLAorCQlyZXN0b3JlX2Nt ZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3Rv cnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfdGFibGVzcGFjZS5zcWwiLAor CQkJIiR0ZW1wZGlyL3Jlc3RvcmVfdGFibGVzcGFjZSIsCisJCV0sCisJCSMgTWF0Y2ggIkUiIGFz IG9wdGlvbmFsIHNpbmNlIGl0IGlzIGFkZGVkIG9uIExPQ0FUSU9OIHdoZW4gcnVubmluZyBvbgor CQkjIFdpbmRvd3MuCisJCWxpa2UgPT4gcXIvXgorCQkJXG5cUUNSRUFURSBUQUJMRVNQQUNFIHRi bDIgT1dORVIgdGFwIExPQ0FUSU9OIFxFKD86RSk/XFEnJHRhYmxlc3BhY2UyJztcRQorCQkJXG5c UUFMVEVSIFRBQkxFU1BBQ0UgdGJsMiBTRVQgKHNlcV9wYWdlX2Nvc3Q9MS4wKTtcRQorCQkveG0s CisJfSwKKworCXJlc3RvcmVfZ3JhbnRzID0+IHsKKwkJc2V0dXBfc3FsID0+ICIKKwkJQ1JFQVRF IERBVEFCQVNFIHRhcGdyYW50c2RiOworCQlDUkVBVEUgU0NIRU1BIHByaXZhdGU7CisJCUNSRUFU RSBTRVFVRU5DRSBzZXJpYWwgU1RBUlQgMTAxOworCQlDUkVBVEUgRlVOQ1RJT04gZm4oKSBSRVRV Uk5TIHZvaWQgQVMgXCRcJAorCQlCRUdJTgorCQlFTkQ7CisJCVwkXCQgTEFOR1VBR0UgcGxwZ3Nx bDsKKwkJQ1JFQVRFIFJPTEUgc3VwZXI7CisJCUNSRUFURSBST0xFIGdyYW50MTsKKwkJQ1JFQVRF IFJPTEUgZ3JhbnQyOworCQlDUkVBVEUgUk9MRSBncmFudDM7CisJCUNSRUFURSBST0xFIGdyYW50 NDsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ1OworCQlDUkVBVEUgUk9MRSBncmFudDY7CisJCUNSRUFU RSBST0xFIGdyYW50NzsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ4OworCisJCUNSRUFURSBUQUJMRSB0 IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisK KwkJR1JBTlQgU0VMRUNUIE9OIFRBQkxFIHQgVE8gZ3JhbnQxOworCQlHUkFOVCBJTlNFUlQgT04g VEFCTEUgdCBUTyBncmFudDI7CisJCUdSQU5UIEFMTCBQUklWSUxFR0VTIE9OIFRBQkxFIHQgdG8g Z3JhbnQzOworCQlHUkFOVCBDT05ORUNULCBDUkVBVEUgT04gREFUQUJBU0UgdGFwZ3JhbnRzZGIg VE8gZ3JhbnQ0OworCQlHUkFOVCBVU0FHRSwgQ1JFQVRFIE9OIFNDSEVNQSBwcml2YXRlIFRPIGdy YW50NTsKKwkJR1JBTlQgVVNBR0UsIFNFTEVDVCwgVVBEQVRFIE9OIFNFUVVFTkNFIHNlcmlhbCBU TyBncmFudDY7CisJCUdSQU5UIHN1cGVyIFRPIGdyYW50NzsKKwkJR1JBTlQgRVhFQ1VURSBPTiBG VU5DVElPTiBmbigpIFRPIGdyYW50ODsKKwkJIiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1 bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIk dGVtcGRpci9yZXN0b3JlX2dyYW50cyIsCisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdw Z19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1m aWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMuc3FsIiwKKwkJCSIkdGVtcGRpci9yZXN0 b3JlX2dyYW50cyIsCisJCV0sCisJCWxpa2UgPT4gcXIvXgorCQkJXG5cUUdSQU5UIHN1cGVyIFRP IGdyYW50NyBXSVRIIElOSEVSSVQgVFJVRSBHUkFOVEVEIEJZXEUKKwkJCSguKlxuKSoKKwkJCVxu XFFHUkFOVCBBTEwgT04gU0NIRU1BIHByaXZhdGUgVE8gZ3JhbnQ1O1xFCisJCQkoLipcbikqCisJ CQlcblxRR1JBTlQgQUxMIE9OIEZVTkNUSU9OIHB1YmxpYy5mbigpIFRPIGdyYW50ODtcRQorCQkJ KC4qXG4pKgorCQkJXG5cUUdSQU5UIEFMTCBPTiBTRVFVRU5DRSBwdWJsaWMuc2VyaWFsIFRPIGdy YW50NjtcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIFNFTEVDVCBPTiBUQUJMRSBwdWJsaWMu dCBUTyBncmFudDE7XEUKKwkJCVxuXFFHUkFOVCBJTlNFUlQgT04gVEFCTEUgcHVibGljLnQgVE8g Z3JhbnQyO1xFCisJCQlcblxRR1JBTlQgQUxMIE9OIFRBQkxFIHB1YmxpYy50IFRPIGdyYW50Mztc RQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIENSRUFURSxDT05ORUNUIE9OIERBVEFCQVNFIHRh cGdyYW50c2RiIFRPIGdyYW50NDtcRQorCQkveG0sCisJfSwKKworCWV4Y2x1ZGluZ19kYXRhYmFz ZXMgPT4geworCQlzZXR1cF9zcWwgPT4gJ0NSRUFURSBEQVRBQkFTRSBkYjE7CisJCVxjIGRiMQor CQlDUkVBVEUgVEFCTEUgdDEgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQxIFZBTFVFUyAoMSks ICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0MiAoaWQgaW50KTsKKwkJSU5TRVJUIElO VE8gdDIgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0UgZGIy OworCQlcYyBkYjIKKwkJQ1JFQVRFIFRBQkxFIHQzIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0 MyBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDQgKGlkIGludCk7 CisJCUlOU0VSVCBJTlRPIHQ0IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRF IERBVEFCQVNFIGRiZXgzOworCQlcYyBkYmV4MworCQlDUkVBVEUgVEFCTEUgdDUgKGlkIGludCk7 CisJCUlOU0VSVCBJTlRPIHQ1IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBU QUJMRSB0NiAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDYgVkFMVUVTICgxKSwgKDIpLCAoMyks ICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0UgZGJleDQ7CisJCVxjIGRiZXg0CisJCUNSRUFURSBU QUJMRSB0NyAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDcgVkFMVUVTICgxKSwgKDIpLCAoMyks ICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQ4IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0OCBWQUxV RVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJCUNSRUFURSBEQVRBQkFTRSBkYjU7CisJCVxjIGRi NQorCQlDUkVBVEUgVEFCTEUgdDkgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ5IFZBTFVFUyAo MSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0MTAgKGlkIGludCk7CisJCUlOU0VS VCBJTlRPIHQxMCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQknLAorCQlkdW1wX2NtZCA9 PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJ Jy0tZmlsZScgPT4gIiR0ZW1wZGlyL2V4Y2x1ZGluZ19kYXRhYmFzZXMiLAorCQkJJy0tZXhjbHVk ZS1kYXRhYmFzZScgPT4gJ2RiZXgqJywKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3Bn X3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZp bGUnID0+ICIkdGVtcGRpci9leGNsdWRpbmdfZGF0YWJhc2VzLnNxbCIsCisJCQknLS1leGNsdWRl LWRhdGFiYXNlJyA9PiAnZGI1JywKKwkJCSIkdGVtcGRpci9leGNsdWRpbmdfZGF0YWJhc2VzIiwK KwkJXSwKKwkJbGlrZSA9PiBxci9eCisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiMVxFCisJCQko LipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MSAoXEUKKwkJCSguKlxuKSoKKwkJ CVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQyIChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFU RSBEQVRBQkFTRSBkYjJcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMu dDMgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NCAoL3htLAor CQl1bmxpa2UgPT4gcXIvXgorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjNcRQorCQkJKC4qXG4p KgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDUgKFxFCisJCQkoLipcbikqCisJCQlcblxR Q1JFQVRFIFRBQkxFIHB1YmxpYy50NiAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgREFU QUJBU0UgZGI0XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ3IChc RQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDggKFxFCisJCQlcblxR Q1JFQVRFIERBVEFCQVNFIGRiNVxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1 YmxpYy50OSAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQxMCAo XEUKKwkJL3htLAorCX0sCisKKwlmb3JtYXRfZGlyZWN0b3J5ID0+IHsKKwkJc2V0dXBfc3FsID0+ ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2RpcmVjdG9yeShhIGludCwgYiBib29sZWFuLCBjIHRleHQp OworCQlJTlNFUlQgSU5UTyBmb3JtYXRfZGlyZWN0b3J5IFZBTFVFUyAoMSwgdHJ1ZSwgJ25hbWUx JyksICgyLCBmYWxzZSwgJ25hbWUyJyk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBh bGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVt cGRpci9mb3JtYXRfZGlyZWN0b3J5IiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3Bn X3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZp bGUnID0+ICIkdGVtcGRpci9mb3JtYXRfZGlyZWN0b3J5LnNxbCIsCisJCQkiJHRlbXBkaXIvZm9y bWF0X2RpcmVjdG9yeSIsCisJCV0sCisJCWxpa2UgPT4gcXIvXlxuXFFDT1BZIHB1YmxpYy5mb3Jt YXRfZGlyZWN0b3J5IChhLCBiLCBjKSBGUk9NIHN0ZGluOy94bQorCX0sCisKKwlmb3JtYXRfdGFy ID0+IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X3RhcihhIGludCwgYiBi b29sZWFuLCBjIHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfdGFyIFZBTFVFUyAoMSwgZmFs c2UsICduYW1lMycpLCAoMiwgdHJ1ZSwgJ25hbWU0Jyk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJ J3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAndGFyJywKKwkJCSctLWZpbGUnID0+ICIk dGVtcGRpci9mb3JtYXRfdGFyIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jl c3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAndGFyJywKKwkJCSctLWZpbGUnID0+ICIk dGVtcGRpci9mb3JtYXRfdGFyLnNxbCIsCisJCQkiJHRlbXBkaXIvZm9ybWF0X3RhciIsCisJCV0s CisJCWxpa2UgPT4gcXIvXlxuXFFDT1BZIHB1YmxpYy5mb3JtYXRfdGFyIChhLCBiLCBjKSBGUk9N IHN0ZGluOy94bQorCX0sCisKKwlmb3JtYXRfY3VzdG9tID0+IHsKKwkJc2V0dXBfc3FsID0+ICJD UkVBVEUgVEFCTEUgZm9ybWF0X2N1c3RvbShhIGludCwgYiBib29sZWFuLCBjIHRleHQpOworCQlJ TlNFUlQgSU5UTyBmb3JtYXRfY3VzdG9tIFZBTFVFUyAoMSwgZmFsc2UsICduYW1lNScpLCAoMiwg dHJ1ZSwgJ25hbWU2Jyk7IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJ Jy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRf Y3VzdG9tIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMn LAorCQkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9m b3JtYXRfY3VzdG9tLnNxbCIsCisJCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsCisJCV0sCisJ CWxpa2UgPT4gcXIvXiBcblxRQ09QWSBwdWJsaWMuZm9ybWF0X2N1c3RvbSAoYSwgYiwgYykgRlJP TSBzdGRpbjsveG0KKwl9LAorCisJZHVtcF9nbG9iYWxzX29ubHkgPT4geworCQlzZXR1cF9zcWwg PT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfZGlyKGEgaW50LCBiIGJvb2xlYW4sIGMgdGV4dCk7CisJ CUlOU0VSVCBJTlRPIGZvcm1hdF9kaXIgVkFMVUVTICgxLCBmYWxzZSwgJ25hbWU1JyksICgyLCB0 cnVlLCAnbmFtZTYnKTsiLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQkn LS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZ2xvYmFscy1vbmx5JywKKwkJCSctLWZp bGUnID0+ICIkdGVtcGRpci9kdW1wX2dsb2JhbHNfb25seSIsCisJCV0sCisJCXJlc3RvcmVfY21k ID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywgJy0tZ2xvYmFscy1vbmx5JywKKwkJCSctLWZv cm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZHVtcF9nbG9i YWxzX29ubHkuc3FsIiwKKwkJCSIkdGVtcGRpci9kdW1wX2dsb2JhbHNfb25seSIsCisJCV0sCisJ CWxpa2UgPT4gcXIvCisgICAgICAgICAgICBeXHMqXFFDUkVBVEUgUk9MRSBkdW1wYWxsO1xFXHMq XG4KKwkJCS94bQorCX0sKTsKKworIyBGaXJzdCBleGVjdXRlIHRoZSBzZXR1cF9zcWwKK2ZvcmVh Y2ggbXkgJHJ1biAoc29ydCBrZXlzICVwZ2R1bXBhbGxfcnVucykKK3sKKwlpZiAoJHBnZHVtcGFs bF9ydW5zeyRydW59LT57c2V0dXBfc3FsfSkKKwl7CisJCSRub2RlLT5zYWZlX3BzcWwoJHJ1bl9k YiwgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57c2V0dXBfc3FsfSk7CisJfQorfQorCisjIEV4ZWN1 dGUgdGhlIHRlc3RzCitmb3JlYWNoIG15ICRydW4gKHNvcnQga2V5cyAlcGdkdW1wYWxsX3J1bnMp Cit7CisJIyBDcmVhdGUgYSBuZXcgdGFyZ2V0IGNsdXN0ZXIgdG8gcGdfcmVzdG9yZSBlYWNoIHRl c3QgY2FzZSBydW4gc28gdGhhdCB3ZQorCSMgZG9uJ3QgbmVlZCB0byB0YWtlIGNhcmUgb2YgdGhl IGNsZWFudXAgZnJvbSB0aGUgdGFyZ2V0IGNsdXN0ZXIgYWZ0ZXIgZWFjaAorCSMgcnVuLgorCW15 ICR0YXJnZXRfbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygidGFyZ2V0XyRy dW4iKTsKKwkkdGFyZ2V0X25vZGUtPmluaXQ7CisJJHRhcmdldF9ub2RlLT5zdGFydDsKKworCSMg RHVtcGFsbCBmcm9tIG5vZGUgY2x1c3Rlci4KKwkkbm9kZS0+Y29tbWFuZF9vayhcQHsgJHBnZHVt cGFsbF9ydW5zeyRydW59LT57ZHVtcF9jbWR9IH0sCisJCSIkcnVuOiBwZ19kdW1wYWxsIHJ1bnMi KTsKKworCSMgUmVzdG9yZSB0aGUgZHVtcCBvbiAidGFyZ2V0X25vZGUiIGNsdXN0ZXIuCisJbXkg QHJlc3RvcmVfY21kID0gKAorCQlAeyAkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntyZXN0b3JlX2Nt ZH0gfSwKKwkJJy0taG9zdCcsICR0YXJnZXRfbm9kZS0+aG9zdCwgJy0tcG9ydCcsICR0YXJnZXRf bm9kZS0+cG9ydCk7CisKKwlteSAoJHN0ZG91dCwgJHN0ZGVycikgPSBydW5fY29tbWFuZChcQHJl c3RvcmVfY21kKTsKKworCSMgcGdfcmVzdG9yZSAtLWZpbGUgb3V0cHV0IGZpbGUuCisJbXkgJG91 dHB1dF9maWxlID0gc2x1cnBfZmlsZSgiJHRlbXBkaXIvJHtydW59LnNxbCIpOworCisJaWYgKCAg ICEoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57bGlrZX0pCisJCSYmICEoJHBnZHVtcGFsbF9ydW5z eyRydW59LT57dW5saWtlfSkpCisJeworCQlkaWUgIm1pc3NpbmcgXCJsaWtlXCIgb3IgXCJ1bmxp a2VcIiBpbiB0ZXN0IFwiJHJ1blwiIjsKKwl9CisKKwlpZiAoJHBnZHVtcGFsbF9ydW5zeyRydW59 LT57bGlrZX0pCisJeworCQlsaWtlKCRvdXRwdXRfZmlsZSwgJHBnZHVtcGFsbF9ydW5zeyRydW59 LT57bGlrZX0sICJzaG91bGQgZHVtcCAkcnVuIik7CisJfQorCisJaWYgKCRwZ2R1bXBhbGxfcnVu c3skcnVufS0+e3VubGlrZX0pCisJeworCQl1bmxpa2UoCisJCQkkb3V0cHV0X2ZpbGUsCisJCQkk cGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnt1bmxpa2V9LAorCQkJInNob3VsZCBub3QgZHVtcCAkcnVu Iik7CisJfQorfQorCisjIFNvbWUgbmVnYXRpdmUgdGVzdCBjYXNlIHdpdGggZHVtcCBvZiBwZ19k dW1wYWxsIGFuZCByZXN0b3JlIHVzaW5nIHBnX3Jlc3RvcmUKKyMgdGVzdCBjYXNlIDE6IHdoZW4g LUMgaXMgbm90IHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5v ZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGly L2Zvcm1hdF9jdXN0b20iLAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1maWxlJyA9 PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJv cjogb3B0aW9uIC1DXC8tLWNyZWF0ZSBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIHJlc3RvcmluZyBh biBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxFLywKKwknV2hlbiAtQyBpcyBub3QgdXNl ZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJyk7CisKKyMgdGVzdCBjYXNl IDI6IFdoZW4gLS1saXN0IG9wdGlvbiBpcyB1c2VkIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsCisk bm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJJ3BnX3Jlc3RvcmUnLAorCQkiJHRlbXBk aXIvZm9ybWF0X2N1c3RvbSIsICctQycsCisJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCSct LWxpc3QnLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJ cXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC1sXC8tLWxpc3QgY2Fubm90IGJlIHVzZWQg d2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGxcRS8sCisJJ1do ZW4gLS1saXN0IGlzIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCcp OworCisjIHRlc3QgY2FzZSAzOiBXaGVuIG5vbi1leGlzdCBkYXRhYmFzZSBpcyBnaXZlbiB3aXRo IC1kIG9wdGlvbgorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19yZXN0b3Jl JywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAorCQknLS1mb3JtYXQnID0+ICdj dXN0b20nLAorCQknLWQnID0+ICdkYnBxJywKKwldLAorCXFyL1xRRkFUQUw6ICBkYXRhYmFzZSAi ZGJwcSIgZG9lcyBub3QgZXhpc3RcRS8sCisJJ1doZW4gbm9uLWV4aXN0ZW50IGRhdGFiYXNlIGlz IGdpdmVuIHdpdGggLWQgb3B0aW9uIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBh bGwnCispOworCiskbm9kZS0+c3RvcCgnZmFzdCcpOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIu NDcuMwoK --00000000000074a7860649607389--