Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rnF3F-00CIGI-AF for pgsql-hackers@arkaria.postgresql.org; Thu, 21 Mar 2024 09:49:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rnF3D-00BqRt-Vo for pgsql-hackers@arkaria.postgresql.org; Thu, 21 Mar 2024 09:49:32 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rnF3D-00BqRg-FN for pgsql-hackers@lists.postgresql.org; Thu, 21 Mar 2024 09:49:32 +0000 Received: from mail-yb1-xb2b.google.com ([2607:f8b0:4864:20::b2b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rnF3B-005hZJ-39 for pgsql-hackers@lists.postgresql.org; Thu, 21 Mar 2024 09:49:31 +0000 Received: by mail-yb1-xb2b.google.com with SMTP id 3f1490d57ef6-dd14d8e7026so614628276.2 for ; Thu, 21 Mar 2024 02:49:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711014567; x=1711619367; 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=+Ll6fNyo6aLVKMrDCNk/OQLkloAuKNV4AEcQMvAI5qY=; b=cCkDS6clDjRU3bNJTOie2YG5+XtDaUHh0gOrp56Yn0hxiXib8fXc3LEhGoswTXEqJn +4AjaIxS/XMqRu8a3CQknv4rKpmrL10OT5A9p67FG4NvF23b+/xvb5bZatiP9Xawg2VQ OPpaJ9XRmSAc/pO9grE8U8MFa69rySGRhLcRrcuv15Ynt7GbTSbEh1SljiJVQOPqYQRu Ed/mLFydV6/gx3ylXrst5DNqHTpoJ/YcK69pWb7GXMGfbB6JxJPxLv3Xc6/EwNhOcVai nX3LuP8tXAgdMIOKtf7kHmX5zeMC+ReWXh0QEH1c6V6yMoXZ641z5dS1zwWtjFllgTxg a9hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711014567; x=1711619367; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=+Ll6fNyo6aLVKMrDCNk/OQLkloAuKNV4AEcQMvAI5qY=; b=mc+d5q2/ZjvdDHrJPAvAjMLH7K2MaRHiqWmdPLjleESMaNgiOPNRsP0FbhGZzonOjB JqQV/QbowKFex0AfjU6rui5D3G4JtaXon+2sjP1AWPEnyX4k81mePHKsVsoh22i5J0YT OxgCnVT8LqUqcjFpfXoRpmLnSIpJd0oZWHdVizm30DI6LrBEXAnQRtkrXoztXYGr4gBy TW4uKd0WH2fGgy6y72h9HkiS8ZU4JqH4J/UcChH3a1TpMmZV2iAYpcJrpYp7ngsZPW2e RlP9DprTnf6CzKR2Vg/Mvj4Hf++rSLaCyWa++Ndln0q3Xjtn83quXXhuyF/QX9FHu0L0 8rPQ== X-Forwarded-Encrypted: i=1; AJvYcCXF38i7cwZ8xCka01W/AYnbqVBVniGNd72WxDOrOTVaNC38sM6jVMIqxY7NPZvKC/KJY0VReaJfaYlbiC/5gdU23SVlAl7kJ2v/GIWILlcIlwjr X-Gm-Message-State: AOJu0YxzopPvsLIxiecGf7CwKzOs5O+1JtLqjAEdpy+BUpEUVg4EXahf gqQlxa0jdrxR6j56u23blAR69wQGv62IBpB92ANQB9eD7rpYD25PezRVK9SqH9BQ5jeVFmrcS+U ZmLDeOMeSp1ellgHVxdbBsIRI9PQ= X-Google-Smtp-Source: AGHT+IH8mhmzRMZWcP7+rlP7q0v3pWQLkcU4Wh8Y8m7dRaHNoEjMG7pnAzvOA2GfWY5ZQwNo+qSKGbYCLQspy1KDlo4= X-Received: by 2002:a25:6b11:0:b0:dcc:45c0:f3ab with SMTP id g17-20020a256b11000000b00dcc45c0f3abmr18036538ybc.29.1711014567566; Thu, 21 Mar 2024 02:49:27 -0700 (PDT) MIME-Version: 1.0 References: <9a9c7e65-c47b-4400-a63e-ac6169c0860e@app.fastmail.com> <40595e73-c7e1-463a-b8be-49792e870007@app.fastmail.com> <6423dfeb-a729-45d3-b71e-7bf1b3adb0c9@enterprisedb.com> <2f0b73f3-e7c0-4e95-9712-1993442a6b64@app.fastmail.com> <34637e7f-0330-420d-8f45-1d022962d2fe@app.fastmail.com> <7a970912-0b77-4942-84f7-2c9ca0bc05a5@eisentraut.org> In-Reply-To: From: Shlok Kyal Date: Thu, 21 Mar 2024 15:19:16 +0530 Message-ID: Subject: Re: speed up a logical replica setup To: Euler Taveira Cc: Peter Eisentraut , Amit Kapila , "kuroda.hayato@fujitsu.com" , Tomas Vondra , "pgsql-hackers@lists.postgresql.org" , Michael Paquier , Andres Freund , Ashutosh Bapat , =?UTF-8?Q?Fabr=C3=ADzio_de_Royes_Mello?= , vignesh C Content-Type: multipart/mixed; boundary="00000000000081e2450614289f62" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000081e2450614289f62 Content-Type: text/plain; charset="UTF-8" Hi, There is a compilation error while building postgres with the patch due to a recent commit. I have attached a top-up patch v32-0003 to resolve this compilation error. I have not updated the version of the patch as I have not made any change in v32-0001 and v32-0002 patch. Thanks and regards, Shlok Kyal --00000000000081e2450614289f62 Content-Type: application/x-patch; name="v32-0003-Fix-compilation-error.patch" Content-Disposition: attachment; filename="v32-0003-Fix-compilation-error.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lu11siw80 RnJvbSAxNjRiOTU2NTI0Y2UyYjQ2OGVhYjhjN2JiYjVkMDc0ODI4OGMwMjhjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IFRodSwgMjEgTWFyIDIwMjQgMTU6MDQ6NTggKzA1MzAKU3ViamVjdDogW1BBVENIIHYz MiAzLzNdIEZpeCBjb21waWxhdGlvbiBlcnJvcgoKRml4IGNvbXBpbGF0aW9uIGVycm9yIGR1ZSB0 byBhIHJlY2VudCBjb21taXQKLS0tCiBzcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfY3JlYXRlc3Vi c2NyaWJlci5jIHwgMiArLQogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0 aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2NyZWF0ZXN1YnNj cmliZXIuYyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19jcmVhdGVzdWJzY3JpYmVyLmMKaW5k ZXggZjE0NmZjYjVlZC4uM2E4MjQwZWE3OCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFj a3VwL3BnX2NyZWF0ZXN1YnNjcmliZXIuYworKysgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdf Y3JlYXRlc3Vic2NyaWJlci5jCkBAIC0xMTA5LDcgKzExMDksNyBAQCBzZXR1cF9yZWNvdmVyeShj b25zdCBzdHJ1Y3QgTG9naWNhbFJlcEluZm8gKmRiaW5mbywgY29uc3QgY2hhciAqZGF0YWRpciwg Y29uc3QgYwogCSAqIHN0YXRlIGlzIHJlYWNoZWQgKHJlY292ZXJ5X3RhcmdldCkgYW5kIGZhaWx1 cmUgZHVlIHRvIG11bHRpcGxlIHJlY292ZXJ5CiAJICogdGFyZ2V0cyAobmFtZSwgdGltZSwgeGlk LCBMU04pLgogCSAqLwotCXJlY292ZXJ5Y29uZmNvbnRlbnRzID0gR2VuZXJhdGVSZWNvdmVyeUNv bmZpZyhjb25uLCBOVUxMKTsKKwlyZWNvdmVyeWNvbmZjb250ZW50cyA9IEdlbmVyYXRlUmVjb3Zl cnlDb25maWcoY29ubiwgTlVMTCwgTlVMTCk7CiAJYXBwZW5kUFFFeHBCdWZmZXIocmVjb3Zlcnlj b25mY29udGVudHMsICJyZWNvdmVyeV90YXJnZXQgPSAnJ1xuIik7CiAJYXBwZW5kUFFFeHBCdWZm ZXIocmVjb3Zlcnljb25mY29udGVudHMsCiAJCQkJCSAgInJlY292ZXJ5X3RhcmdldF90aW1lbGlu ZSA9ICdsYXRlc3QnXG4iKTsKLS0gCjIuMzQuMQoK --00000000000081e2450614289f62 Content-Type: application/x-patch; name="v32-0002-Remove-How-it-Works-section.patch" Content-Disposition: attachment; filename="v32-0002-Remove-How-it-Works-section.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lu11siwi1 RnJvbSAyMmI1YTA2NWY3MTE2YmIzZjliYTQ0NTAwZWIxYTE5NDhlNTIzNDEwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBFdWxlciBUYXZlaXJhIDxldWxlci50YXZlaXJhQGVudGVycHJp c2VkYi5jb20+CkRhdGU6IFRodSwgMjEgTWFyIDIwMjQgMDA6MTY6MjEgLTAzMDAKU3ViamVjdDog W1BBVENIIHYzMiAyLzNdIFJlbW92ZSBIb3cgaXQgV29ya3Mgc2VjdGlvbgoKLS0tCiBkb2Mvc3Jj L3NnbWwvcmVmL3BnX2NyZWF0ZXN1YnNjcmliZXIuc2dtbCB8IDEyOCAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTI4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC9yZWYvcGdfY3JlYXRlc3Vic2NyaWJlci5zZ21sIGIvZG9jL3NyYy9zZ21sL3Jl Zi9wZ19jcmVhdGVzdWJzY3JpYmVyLnNnbWwKaW5kZXggZjBjZmVkOGM0Ny4uZmM4OTA0OTJhOCAx MDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19jcmVhdGVzdWJzY3JpYmVyLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19jcmVhdGVzdWJzY3JpYmVyLnNnbWwKQEAgLTM3MywxMzQg KzM3Myw2IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAgPC9yZWZzZWN0MT4KIAotIDxy ZWZzZWN0MT4KLSAgPHRpdGxlPkhvdyBJdCBXb3JrczwvdGl0bGU+Ci0KLSAgPHBhcmE+Ci0gICAg VGhlIGJhc2ljIGlkZWEgaXMgdG8gaGF2ZSBhIHJlcGxpY2F0aW9uIHN0YXJ0IHBvaW50IGZyb20g dGhlIHNvdXJjZSBzZXJ2ZXIKLSAgICBhbmQgc2V0IHVwIGEgbG9naWNhbCByZXBsaWNhdGlvbiB0 byBzdGFydCBmcm9tIHRoaXMgcG9pbnQ6Ci0gIDwvcGFyYT4KLQotICA8cHJvY2VkdXJlPgotICAg PHN0ZXA+Ci0gICAgPHBhcmE+Ci0gICAgIFN0YXJ0IHRoZSB0YXJnZXQgc2VydmVyIHdpdGggdGhl IHNwZWNpZmllZCBjb21tYW5kLWxpbmUgb3B0aW9ucy4gSWYgdGhlCi0gICAgIHRhcmdldCBzZXJ2 ZXIgaXMgcnVubmluZywgPGFwcGxpY2F0aW9uPnBnX2NyZWF0ZXN1YnNjcmliZXI8L2FwcGxpY2F0 aW9uPgotICAgICB3aWxsIHRlcm1pbmF0ZSB3aXRoIGFuIGVycm9yLgotICAgIDwvcGFyYT4KLSAg IDwvc3RlcD4KLQotICAgPHN0ZXA+Ci0gICAgPHBhcmE+Ci0gICAgIENoZWNrIGlmIHRoZSB0YXJn ZXQgc2VydmVyIGNhbiBiZSBjb252ZXJ0ZWQuIFRoZXJlIGFyZSBhbHNvIGEgZmV3IGNoZWNrcwot ICAgICBvbiB0aGUgc291cmNlIHNlcnZlci4gSWYgYW55IG9mIHRoZSBwcmVyZXF1aXNpdGVzIGFy ZSBub3QgbWV0LAotICAgICA8YXBwbGljYXRpb24+cGdfY3JlYXRlc3Vic2NyaWJlcjwvYXBwbGlj YXRpb24+IHdpbGwgdGVybWluYXRlIHdpdGggYW4KLSAgICAgZXJyb3IuCi0gICAgPC9wYXJhPgot ICAgPC9zdGVwPgotCi0gICA8c3RlcD4KLSAgICA8cGFyYT4KLSAgICAgQ3JlYXRlIGEgcHVibGlj YXRpb24gYW5kIHJlcGxpY2F0aW9uIHNsb3QgZm9yIGVhY2ggc3BlY2lmaWVkIGRhdGFiYXNlIG9u Ci0gICAgIHRoZSBzb3VyY2Ugc2VydmVyLiBFYWNoIHB1YmxpY2F0aW9uIGlzIGNyZWF0ZWQgdXNp bmcKLSAgICAgPGxpbmsgbGlua2VuZD0ic3FsLWNyZWF0ZXB1YmxpY2F0aW9uLXBhcmFtcy1mb3It YWxsLXRhYmxlcyI+PGxpdGVyYWw+Rk9SIEFMTCBUQUJMRVM8L2xpdGVyYWw+PC9saW5rPi4KLSAg ICAgSWYgPG9wdGlvbj5wdWJsaWNhdGlvbi1uYW1lPC9vcHRpb24+IG9wdGlvbiBpcyBub3Qgc3Bl Y2lmaWVkLCBpdCBoYXMgdGhlCi0gICAgIGZvbGxvd2luZyBuYW1lIHBhdHRlcm46Ci0gICAgIDxx dW90ZT48bGl0ZXJhbD5wZ19jcmVhdGVzdWJzY3JpYmVyXyV1XyV4PC9saXRlcmFsPjwvcXVvdGU+ IChwYXJhbWV0ZXI6Ci0gICAgIGRhdGFiYXNlIDxwYXJhbWV0ZXI+b2lkPC9wYXJhbWV0ZXI+LCBy YW5kb20gPHBhcmFtZXRlcj5pbnQ8L3BhcmFtZXRlcj4pLgotICAgICBJZiA8b3B0aW9uPnJlcGxp Y2F0aW9uLXNsb3QtbmFtZTwvb3B0aW9uPiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUKLSAgICAgcmVw bGljYXRpb24gc2xvdCBoYXMgdGhlIGZvbGxvd2luZyBuYW1lIHBhdHRlcm46Ci0gICAgIDxxdW90 ZT48bGl0ZXJhbD5wZ19jcmVhdGVzdWJzY3JpYmVyXyV1XyV4PC9saXRlcmFsPjwvcXVvdGU+IChw YXJhbWV0ZXJzOgotICAgICBkYXRhYmFzZSA8cGFyYW1ldGVyPm9pZDwvcGFyYW1ldGVyPiwgcmFu ZG9tIDxwYXJhbWV0ZXI+aW50PC9wYXJhbWV0ZXI+KS4KLSAgICAgVGhlc2UgcmVwbGljYXRpb24g c2xvdHMgd2lsbCBiZSB1c2VkIGJ5IHRoZSBzdWJzY3JpcHRpb25zIGluIGEgZnV0dXJlIHN0ZXAu Ci0gICAgIFRoZSBsYXN0IHJlcGxpY2F0aW9uIHNsb3QgTFNOIGlzIHVzZWQgYXMgYSBzdG9wcGlu ZyBwb2ludCBpbiB0aGUKLSAgICAgPHhyZWYgbGlua2VuZD0iZ3VjLXJlY292ZXJ5LXRhcmdldC1s c24iLz4gcGFyYW1ldGVyIGFuZCBieSB0aGUKLSAgICAgc3Vic2NyaXB0aW9ucyBhcyBhIHJlcGxp Y2F0aW9uIHN0YXJ0IHBvaW50LiBJdCBndWFyYW50ZWVzIHRoYXQgbm8KLSAgICAgdHJhbnNhY3Rp b24gd2lsbCBiZSBsb3N0LgotICAgIDwvcGFyYT4KLSAgIDwvc3RlcD4KLQotICAgPHN0ZXA+Ci0g ICAgPHBhcmE+Ci0gICAgIFdyaXRlIHJlY292ZXJ5IHBhcmFtZXRlcnMgaW50byB0aGUgdGFyZ2V0 IGRhdGEgZGlyZWN0b3J5IGFuZCByZXN0YXJ0IHRoZQotICAgICB0YXJnZXQgc2VydmVyLiBJdCBz cGVjaWZpZXMgYW4gTFNOICg8eHJlZiBsaW5rZW5kPSJndWMtcmVjb3ZlcnktdGFyZ2V0LWxzbiIv PikKLSAgICAgb2YgdGhlIHdyaXRlLWFoZWFkIGxvZyBsb2NhdGlvbiB1cCB0byB3aGljaCByZWNv dmVyeSB3aWxsIHByb2NlZWQuIEl0IGFsc28KLSAgICAgc3BlY2lmaWVzIDxsaXRlcmFsPnByb21v dGU8L2xpdGVyYWw+IGFzIHRoZSBhY3Rpb24gdGhhdCB0aGUgc2VydmVyIHNob3VsZAotICAgICB0 YWtlIG9uY2UgdGhlIHJlY292ZXJ5IHRhcmdldCBpcyByZWFjaGVkLiBBZGRpdGlvbmFsCi0gICAg IDxsaW5rIGxpbmtlbmQ9InJ1bnRpbWUtY29uZmlnLXdhbC1yZWNvdmVyeS10YXJnZXQiPnJlY292 ZXJ5IHBhcmFtZXRlcnM8L2xpbms+Ci0gICAgIGFyZSBhZGRlZCB0byBhdm9pZCB1bmV4cGVjdGVk IGJlaGF2aW9yIGR1cmluZyB0aGUgcmVjb3ZlcnkgcHJvY2VzcyBzdWNoIGFzCi0gICAgIGVuZCBv ZiB0aGUgcmVjb3ZlcnkgYXMgc29vbiBhcyBhIGNvbnNpc3RlbnQgc3RhdGUgaXMgcmVhY2hlZCAo V0FMIHNob3VsZAotICAgICBiZSBhcHBsaWVkIHVudGlsIHRoZSByZXBsaWNhdGlvbiBzdGFydCBs b2NhdGlvbikgYW5kIG11bHRpcGxlIHJlY292ZXJ5Ci0gICAgIHRhcmdldHMgdGhhdCBjYW4gY2F1 c2UgYSBmYWlsdXJlLiBUaGlzIHN0ZXAgZmluaXNoZXMgb25jZSB0aGUgc2VydmVyIGVuZHMKLSAg ICAgc3RhbmRieSBtb2RlIGFuZCBpcyBhY2NlcHRpbmcgcmVhZC13cml0ZSB0cmFuc2FjdGlvbnMu Ci0gICAgIElmIDxvcHRpb24+LS1yZWNvdmVyeS10aW1lb3V0PC9vcHRpb24+IG9wdGlvbiBpcyBz ZXQsCi0gICAgIDxhcHBsaWNhdGlvbj5wZ19jcmVhdGVzdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4g dGVybWluYXRlcyBpZiByZWNvdmVyeSBkb2VzCi0gICAgIG5vdCBlbmQgdW50aWwgdGhlIGdpdmVu IG51bWJlciBvZiBzZWNvbmRzLgotICAgIDwvcGFyYT4KLSAgIDwvc3RlcD4KLQotICAgPHN0ZXA+ Ci0gICAgPHBhcmE+Ci0gICAgIENyZWF0ZSBhIHN1YnNjcmlwdGlvbiBmb3IgZWFjaCBzcGVjaWZp ZWQgZGF0YWJhc2Ugb24gdGhlIHRhcmdldCBzZXJ2ZXIuCi0gICAgIElmIDxvcHRpb24+c3Vic2Ny aXB0aW9uLW5hbWU8L29wdGlvbj4gaXMgbm90IHNwZWNpZmllZCwgdGhlIHN1YnNjcmlwdGlvbgot ICAgICBoYXMgdGhlIGZvbGxvd2luZyBuYW1lIHBhdHRlcm46Ci0gICAgIDxxdW90ZT48bGl0ZXJh bD5wZ19jcmVhdGVzdWJzY3JpYmVyXyV1XyV4PC9saXRlcmFsPjwvcXVvdGU+IChwYXJhbWV0ZXJz OgotICAgICBkYXRhYmFzZSA8cGFyYW1ldGVyPm9pZDwvcGFyYW1ldGVyPiwgcmFuZG9tIDxwYXJh bWV0ZXI+aW50PC9wYXJhbWV0ZXI+KS4KLSAgICAgSXQgZG9lcyBub3QgY29weSBleGlzdGluZyBk YXRhIGZyb20gdGhlIHNvdXJjZSBzZXJ2ZXIuIEl0IGRvZXMgbm90IGNyZWF0ZQotICAgICBhIHJl cGxpY2F0aW9uIHNsb3QuIEluc3RlYWQsIGl0IHVzZXMgdGhlIHJlcGxpY2F0aW9uIHNsb3QgdGhh dCB3YXMgY3JlYXRlZAotICAgICBpbiBhIHByZXZpb3VzIHN0ZXAuIFRoZSBzdWJzY3JpcHRpb24g aXMgY3JlYXRlZCBidXQgaXQgaXMgbm90IGVuYWJsZWQgeWV0LgotICAgICBUaGUgcmVhc29uIGlz IHRoZSByZXBsaWNhdGlvbiBwcm9ncmVzcyBtdXN0IGJlIHNldCB0byB0aGUgcmVwbGljYXRpb24K LSAgICAgc3RhcnQgcG9pbnQgYmVmb3JlIHN0YXJ0aW5nIHRoZSByZXBsaWNhdGlvbi4KLSAgICA8 L3BhcmE+Ci0gICA8L3N0ZXA+Ci0KLSAgIDxzdGVwPgotICAgIDxwYXJhPgotICAgICBEcm9wIHB1 YmxpY2F0aW9ucyBvbiB0aGUgdGFyZ2V0IHNlcnZlciB0aGF0IHdlcmUgcmVwbGljYXRlZCBiZWNh dXNlIHRoZXkKLSAgICAgd2VyZSBjcmVhdGVkIGJlZm9yZSB0aGUgcmVwbGljYXRpb24gc3RhcnQg bG9jYXRpb24uIEl0IGhhcyBubyB1c2Ugb24gdGhlCi0gICAgIHN1YnNjcmliZXIuCi0gICAgPC9w YXJhPgotICAgPC9zdGVwPgotCi0gICA8c3RlcD4KLSAgICA8cGFyYT4KLSAgICAgU2V0IHRoZSBy ZXBsaWNhdGlvbiBwcm9ncmVzcyB0byB0aGUgcmVwbGljYXRpb24gc3RhcnQgcG9pbnQgZm9yIGVh Y2gKLSAgICAgc3Vic2NyaXB0aW9uLiBXaGVuIHRoZSB0YXJnZXQgc2VydmVyIHN0YXJ0cyB0aGUg cmVjb3ZlcnkgcHJvY2VzcywgaXQKLSAgICAgY2F0Y2hlcyB1cCB0byB0aGUgcmVwbGljYXRpb24g c3RhcnQgcG9pbnQuIFRoaXMgaXMgdGhlIGV4YWN0IExTTiB0byBiZSB1c2VkCi0gICAgIGFzIGEg aW5pdGlhbCByZXBsaWNhdGlvbiBsb2NhdGlvbiBmb3IgZWFjaCBzdWJzY3JpcHRpb24uIFRoZSBy ZXBsaWNhdGlvbgotICAgICBvcmlnaW4gbmFtZSBpcyBvYnRhaW5lZCBzaW5jZSB0aGUgc3Vic2Ny aXB0aW9uIHdhcyBjcmVhdGVkLiBUaGUgcmVwbGljYXRpb24KLSAgICAgb3JpZ2luIG5hbWUgYW5k IHRoZSByZXBsaWNhdGlvbiBzdGFydCBwb2ludCBhcmUgdXNlZCBpbgotICAgICA8bGluayBsaW5r ZW5kPSJwZy1yZXBsaWNhdGlvbi1vcmlnaW4tYWR2YW5jZSI+PGZ1bmN0aW9uPnBnX3JlcGxpY2F0 aW9uX29yaWdpbl9hZHZhbmNlKCk8L2Z1bmN0aW9uPjwvbGluaz4KLSAgICAgdG8gc2V0IHVwIHRo ZSBpbml0aWFsIHJlcGxpY2F0aW9uIGxvY2F0aW9uLgotICAgIDwvcGFyYT4KLSAgIDwvc3RlcD4K LQotICAgPHN0ZXA+Ci0gICAgPHBhcmE+Ci0gICAgIEVuYWJsZSB0aGUgc3Vic2NyaXB0aW9uIGZv ciBlYWNoIHNwZWNpZmllZCBkYXRhYmFzZSBvbiB0aGUgdGFyZ2V0IHNlcnZlci4KLSAgICAgVGhl IHN1YnNjcmlwdGlvbiBzdGFydHMgYXBwbHlpbmcgdHJhbnNhY3Rpb25zIGZyb20gdGhlIHJlcGxp Y2F0aW9uIHN0YXJ0Ci0gICAgIHBvaW50LgotICAgIDwvcGFyYT4KLSAgIDwvc3RlcD4KLQotICAg PHN0ZXA+Ci0gICAgPHBhcmE+Ci0gICAgIElmIHRoZSBzdGFuZGJ5IHNlcnZlciB3YXMgdXNpbmcK LSAgICAgPGxpbmsgbGlua2VuZD0iZ3VjLXByaW1hcnktc2xvdC1uYW1lIj48dmFybmFtZT5wcmlt YXJ5X3Nsb3RfbmFtZTwvdmFybmFtZT48L2xpbms+LAotICAgICBpdCBoYXMgbm8gdXNlIGZyb20g bm93IG9uIHNvIGRyb3AgaXQuCi0gICAgPC9wYXJhPgotICAgPC9zdGVwPgotCi0gICA8c3RlcD4K LSAgICA8cGFyYT4KLSAgICAgVXBkYXRlIHRoZSBzeXN0ZW0gaWRlbnRpZmllciBvbiB0aGUgdGFy Z2V0IHNlcnZlci4gVGhlCi0gICAgIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ3Jlc2V0d2FsIi8+IGlz IHJ1biB0byBtb2RpZnkgdGhlIHN5c3RlbSBpZGVudGlmaWVyLgotICAgICBUaGUgdGFyZ2V0IHNl cnZlciBpcyBzdG9wcGVkIGFzIGEgPGNvbW1hbmQ+cGdfcmVzZXR3YWw8L2NvbW1hbmQ+IHJlcXVp cmVtZW50LgotICAgIDwvcGFyYT4KLSAgIDwvc3RlcD4KLSAgPC9wcm9jZWR1cmU+Ci0gPC9yZWZz ZWN0MT4KLQogIDxyZWZzZWN0MT4KICAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KIAotLSAKMi4z NC4xCgo= --00000000000081e2450614289f62 Content-Type: application/x-patch; name="v32-0001-pg_createsubscriber-creates-a-new-logical-replic.patch" Content-Disposition: attachment; filename="v32-0001-pg_createsubscriber-creates-a-new-logical-replic.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lu11siwm2 RnJvbSA2ZGY3NzY2YzY0MGNkYWUzNGJiMDUyNGU4YjhhNDNlMmFlZjk0YjM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBFdWxlciBUYXZlaXJhIDxldWxlci50YXZlaXJhQGVudGVycHJp c2VkYi5jb20+CkRhdGU6IE1vbiwgNSBKdW4gMjAyMyAxNDozOTo0MCAtMDQwMApTdWJqZWN0OiBb UEFUQ0ggdjMyIDEvM10gcGdfY3JlYXRlc3Vic2NyaWJlcjogY3JlYXRlcyBhIG5ldyBsb2dpY2Fs IHJlcGxpY2EKIGZyb20gYSBzdGFuZGJ5IHNlcnZlcgoKSXQgbXVzdCBiZSBydW4gb24gdGhlIHRh cmdldCBzZXJ2ZXIgYW5kIHNob3VsZCBiZSBhYmxlIHRvIGNvbm5lY3QgdG8gdGhlCnNvdXJjZSBz ZXJ2ZXIgKHB1Ymxpc2hlcikgYW5kIHRoZSB0YXJnZXQgc2VydmVyIChzdWJzY3JpYmVyKS4gQWxs IHRhYmxlcwppbiB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlKHMpIGFyZSBpbmNsdWRlZCBpbiB0aGUg bG9naWNhbCByZXBsaWNhdGlvbgpzZXR1cC4gQSBwYWlyIG9mIHB1YmxpY2F0aW9uIGFuZCBzdWJz Y3JpcHRpb24gb2JqZWN0cyBhcmUgY3JlYXRlZCBmb3IKZWFjaCBkYXRhYmFzZS4KClRoZSBtYWlu IGFkdmFudGFnZSBvZiBwZ19jcmVhdGVzdWJzY3JpYmVyIG92ZXIgdGhlIGNvbW1vbiBsb2dpY2Fs CnJlcGxpY2F0aW9uIHNldHVwIGlzIHRoZSBpbml0aWFsIGRhdGEgY29weS4gSXQgYWxzbyByZWR1 Y2VzIHRoZSBjYXRjaHVwCnBoYXNlLgoKU29tZSBwcmVyZXF1aXNpdGVzIG11c3QgYmUgbWV0IHRv IHN1Y2Nlc3NmdWxseSBydW4gaXQuIEl0IGlzIGJhc2ljYWxseQp0aGUgbG9naWNhbCByZXBsaWNh dGlvbiByZXF1aXJlbWVudHMuIEl0IHN0YXJ0cyBjcmVhdGluZyBhIHB1YmxpY2F0aW9uCnVzaW5n IEZPUiBBTEwgVEFCTEVTIGFuZCBhIHJlcGxpY2F0aW9uIHNsb3QgZm9yIGVhY2ggc3BlY2lmaWVk IGRhdGFiYXNlLgpXcml0ZSByZWNvdmVyeSBwYXJhbWV0ZXJzIGludG8gdGhlIHRhcmdldCBkYXRh IGRpcmVjdG9yeSBhbmQgc3RhcnQgdGhlCnRhcmdldCBzZXJ2ZXIuIEl0IHNwZWNpZmllcyB0aGUg TFNOIG9mIHRoZSBsYXN0IHJlcGxpY2F0aW9uIHNsb3QKKHJlcGxpY2F0aW9uIHN0YXJ0IHBvaW50 KSB1cCB0byB3aGljaCB0aGUgcmVjb3Zlcnkgd2lsbCBwcm9jZWVkLiBXYWl0CnVudGlsIHRoZSB0 YXJnZXQgc2VydmVyIGlzIHByb21vdGVkLiBDcmVhdGUgb25lIHN1YnNjcmlwdGlvbiBwZXIKc3Bl Y2lmaWVkIGRhdGFiYXNlICh1c2luZyBwdWJsaWNhdGlvbiBhbmQgcmVwbGljYXRpb24gc2xvdCBj cmVhdGVkIGluIGEKcHJldmlvdXMgc3RlcCkgb24gdGhlIHRhcmdldCBzZXJ2ZXIuIFNldCB0aGUg cmVwbGljYXRpb24gcHJvZ3Jlc3MgdG8gdGhlCnJlcGxpY2F0aW9uIHN0YXJ0IHBvaW50IGZvciBl YWNoIHN1YnNjcmlwdGlvbi4gRW5hYmxlIHRoZSBzdWJzY3JpcHRpb24KZm9yIGVhY2ggc3BlY2lm aWVkIGRhdGFiYXNlIG9uIHRoZSB0YXJnZXQgc2VydmVyLiBBbmQgZmluYWxseSwgY2hhbmdlCnRo ZSBzeXN0ZW0gaWRlbnRpZmllciBvbiB0aGUgdGFyZ2V0IHNlcnZlci4KLS0tCiBkb2Mvc3JjL3Nn bWwvcmVmL2FsbGZpbGVzLnNnbWwgICAgICAgICAgICAgICAgfCAgICAxICsKIGRvYy9zcmMvc2dt bC9yZWYvcGdfY3JlYXRlc3Vic2NyaWJlci5zZ21sICAgICB8ICA1MjUgKysrKwogZG9jL3NyYy9z Z21sL3JlZmVyZW5jZS5zZ21sICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmluL3Bn X2Jhc2ViYWNrdXAvLmdpdGlnbm9yZSAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iaW4vcGdf YmFzZWJhY2t1cC9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMTEgKy0KIHNyYy9iaW4vcGdf YmFzZWJhY2t1cC9tZXNvbi5idWlsZCAgICAgICAgICAgICB8ICAgMTkgKwogc3JjL2Jpbi9wZ19i YXNlYmFja3VwL25scy5tayAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmluL3BnX2Jh c2ViYWNrdXAvcGdfY3JlYXRlc3Vic2NyaWJlci5jICAgfCAyMTE4ICsrKysrKysrKysrKysrKysr CiAuLi4vdC8wNDBfcGdfY3JlYXRlc3Vic2NyaWJlci5wbCAgICAgICAgICAgICAgfCAgMzI3ICsr KwogOSBmaWxlcyBjaGFuZ2VkLCAzMDAxIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgZG9jL3NyYy9zZ21sL3JlZi9wZ19jcmVhdGVzdWJzY3JpYmVyLnNn bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2Jhc2ViYWNrdXAvcGdfY3JlYXRlc3Vi c2NyaWJlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQw X3BnX2NyZWF0ZXN1YnNjcmliZXIucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2Fs bGZpbGVzLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsbGZpbGVzLnNnbWwKaW5kZXggNGE0Mjk5 OWIxOC4uZjViZTYzODg2NyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbApAQCAtMjA1LDYgKzIwNSw3 IEBAIENvbXBsZXRlIGxpc3Qgb2YgdXNhYmxlIHNnbWwgc291cmNlIGZpbGVzIGluIHRoaXMgZGly ZWN0b3J5LgogPCFFTlRJVFkgcGdDb21iaW5lYmFja3VwICAgIFNZU1RFTSAicGdfY29tYmluZWJh Y2t1cC5zZ21sIj4KIDwhRU5USVRZIHBnQ29uZmlnICAgICAgICAgICBTWVNURU0gInBnX2NvbmZp Zy1yZWYuc2dtbCI+CiA8IUVOVElUWSBwZ0NvbnRyb2xkYXRhICAgICAgU1lTVEVNICJwZ19jb250 cm9sZGF0YS5zZ21sIj4KKzwhRU5USVRZIHBnQ3JlYXRlU3Vic2NyaWJlciBTWVNURU0gInBnX2Ny ZWF0ZXN1YnNjcmliZXIuc2dtbCI+CiA8IUVOVElUWSBwZ0N0bCAgICAgICAgICAgICAgU1lTVEVN ICJwZ19jdGwtcmVmLnNnbWwiPgogPCFFTlRJVFkgcGdEdW1wICAgICAgICAgICAgIFNZU1RFTSAi cGdfZHVtcC5zZ21sIj4KIDwhRU5USVRZIHBnRHVtcGFsbCAgICAgICAgICBTWVNURU0gInBnX2R1 bXBhbGwuc2dtbCI+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2NyZWF0ZXN1YnNj cmliZXIuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfY3JlYXRlc3Vic2NyaWJlci5zZ21sCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmYwY2ZlZDhjNDcKLS0tIC9kZXYv bnVsbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2NyZWF0ZXN1YnNjcmliZXIuc2dtbApAQCAt MCwwICsxLDUyNSBAQAorPCEtLQorZG9jL3NyYy9zZ21sL3JlZi9wZ19jcmVhdGVzdWJzY3JpYmVy LnNnbWwKK1Bvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgorLS0+CisKKzxyZWZlbnRyeSBpZD0iYXBw LXBnY3JlYXRlc3Vic2NyaWJlciI+CisgPGluZGV4dGVybSB6b25lPSJhcHAtcGdjcmVhdGVzdWJz Y3JpYmVyIj4KKyAgPHByaW1hcnk+cGdfY3JlYXRlc3Vic2NyaWJlcjwvcHJpbWFyeT4KKyA8L2lu ZGV4dGVybT4KKworIDxyZWZtZXRhPgorICA8cmVmZW50cnl0aXRsZT48YXBwbGljYXRpb24+cGdf Y3JlYXRlc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+PC9yZWZlbnRyeXRpdGxlPgorICA8bWFudm9s bnVtPjE8L21hbnZvbG51bT4KKyAgPHJlZm1pc2NpbmZvPkFwcGxpY2F0aW9uPC9yZWZtaXNjaW5m bz4KKyA8L3JlZm1ldGE+CisKKyA8cmVmbmFtZWRpdj4KKyAgPHJlZm5hbWU+cGdfY3JlYXRlc3Vi c2NyaWJlcjwvcmVmbmFtZT4KKyAgPHJlZnB1cnBvc2U+Y29udmVydCBhIHBoeXNpY2FsIHJlcGxp Y2EgaW50byBhIG5ldyBsb2dpY2FsIHJlcGxpY2E8L3JlZnB1cnBvc2U+CisgPC9yZWZuYW1lZGl2 PgorCisgPHJlZnN5bm9wc2lzZGl2PgorICA8Y21kc3lub3BzaXM+CisgICA8Y29tbWFuZD5wZ19j cmVhdGVzdWJzY3JpYmVyPC9jb21tYW5kPgorICAgPGFyZyByZXA9InJlcGVhdCI+PHJlcGxhY2Vh YmxlPm9wdGlvbjwvcmVwbGFjZWFibGU+PC9hcmc+CisgICA8Z3JvdXAgY2hvaWNlPSJwbGFpbiI+ CisgICAgPGdyb3VwIGNob2ljZT0icmVxIj4KKyAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0 aW9uPi1kPC9vcHRpb24+PC9hcmc+CisgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4t LWRhdGFiYXNlPC9vcHRpb24+PC9hcmc+CisgICAgPC9ncm91cD4KKyAgICA8cmVwbGFjZWFibGU+ ZGJuYW1lPC9yZXBsYWNlYWJsZT4KKyAgICA8Z3JvdXAgY2hvaWNlPSJyZXEiPgorICAgICA8YXJn IGNob2ljZT0icGxhaW4iPjxvcHRpb24+LUQ8L29wdGlvbj4gPC9hcmc+CisgICAgIDxhcmcgY2hv aWNlPSJwbGFpbiI+PG9wdGlvbj4tLXBnZGF0YTwvb3B0aW9uPjwvYXJnPgorICAgIDwvZ3JvdXA+ CisgICAgPHJlcGxhY2VhYmxlPmRhdGFkaXI8L3JlcGxhY2VhYmxlPgorICAgIDxncm91cCBjaG9p Y2U9InJlcSI+CisgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tUDwvb3B0aW9uPjwv YXJnPgorICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1wdWJsaXNoZXItc2VydmVy PC9vcHRpb24+PC9hcmc+CisgICAgPC9ncm91cD4KKyAgICA8cmVwbGFjZWFibGU+Y29ubnN0cjwv cmVwbGFjZWFibGU+CisgICA8L2dyb3VwPgorICA8L2NtZHN5bm9wc2lzPgorIDwvcmVmc3lub3Bz aXNkaXY+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisgIDxw YXJhPgorICAgIDxhcHBsaWNhdGlvbj5wZ19jcmVhdGVzdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4g Y3JlYXRlcyBhIG5ldyBsb2dpY2FsCisgICAgcmVwbGljYSBmcm9tIGEgcGh5c2ljYWwgc3RhbmRi eSBzZXJ2ZXIuIEFsbCB0YWJsZXMgaW4gdGhlIHNwZWNpZmllZAorICAgIGRhdGFiYXNlIGFyZSBp bmNsdWRlZCBpbiB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiBzZXR1cC4gQSBwYWlyIG9mCisgICAg cHVibGljYXRpb24gYW5kIHN1YnNjcmlwdGlvbiBvYmplY3RzIGFyZSBjcmVhdGVkIGZvciBlYWNo IGRhdGFiYXNlLiBJdAorICAgIG11c3QgYmUgcnVuIGF0IHRoZSB0YXJnZXQgc2VydmVyLgorICA8 L3BhcmE+CisKKyAgPHBhcmE+CisgICAgQWZ0ZXIgYSBzdWNjZXNzZnVsIHJ1biwgdGhlIHN0YXRl IG9mIHRoZSB0YXJnZXQgc2VydmVyIGlzIGFuYWxvZ291cyB0byBhCisgICAgZnJlc2ggbG9naWNh bCByZXBsaWNhdGlvbiBzZXR1cC4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBsb2dp Y2FsCisgICAgcmVwbGljYXRpb24gc2V0dXAgYW5kIDxhcHBsaWNhdGlvbj5wZ19jcmVhdGVzdWJz Y3JpYmVyPC9hcHBsaWNhdGlvbj4KKyAgICBpcyB0aGUgaW5pdGlhbCBkYXRhIGNvcHkuIEl0IGRv ZXMgb25seSB0aGUgc3luY2hyb25pemF0aW9uIHBoYXNlLCB3aGljaAorICAgIGVuc3VyZXMgZWFj aCB0YWJsZSBpcyBicm91Z2h0IHVwIHRvIGEgc3luY2hyb25pemVkIHN0YXRlLgorICA8L3BhcmE+ CisKKyAgPHBhcmE+CisgICBUaGUgPGFwcGxpY2F0aW9uPnBnX2NyZWF0ZXN1YnNjcmliZXI8L2Fw cGxpY2F0aW9uPiB0YXJnZXRzIGxhcmdlIGRhdGFiYXNlCisgICBzeXN0ZW1zIGJlY2F1c2UgaW4g bG9naWNhbCByZXBsaWNhdGlvbiBzZXR1cCwgbW9zdCBvZiB0aGUgdGltZSBpcyBzcGVudAorICAg ZG9pbmcgdGhlIGluaXRpYWwgZGF0YSBjb3B5LiBGdXJ0aGVybW9yZSwgYSBzaWRlIGVmZmVjdCBv ZiB0aGlzIGxvbmcgdGltZQorICAgc3BlbnQgc3luY2hyb25pemluZyBkYXRhIGlzIHVzdWFsbHkg YSBsYXJnZSBhbW91bnQgb2YgY2hhbmdlcyB0byBiZSBhcHBsaWVkCisgICAodGhhdCB3ZXJlIHBy b2R1Y2VkIGR1cmluZyB0aGUgaW5pdGlhbCBkYXRhIGNvcHkpIHdoaWNoIGluY3JlYXNlcyBldmVu IG1vcmUKKyAgIHRoZSB0aW1lIHdoZW4gdGhlIGxvZ2ljYWwgcmVwbGljYSB3aWxsIGJlIGF2YWls YWJsZS4gRm9yIHNtYWxsZXIgZGF0YWJhc2VzLAorICAgPGxpbmsgbGlua2VuZD0ibG9naWNhbC1y ZXBsaWNhdGlvbiI+aW5pdGlhbCBkYXRhIHN5bmNocm9uaXphdGlvbjwvbGluaz4gaXMKKyAgIHJl Y29tbWVuZGVkLgorICA8L3BhcmE+CisKKyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8 dGl0bGU+T3B0aW9uczwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIDxhcHBsaWNhdGlvbj5wZ19j cmVhdGVzdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gYWNjZXB0cyB0aGUgZm9sbG93aW5nCisgICAg Y29tbWFuZC1saW5lIGFyZ3VtZW50czoKKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgIDx2YXJs aXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1kIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5kYm5hbWU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJt PjxvcHRpb24+LS1kYXRhYmFzZT08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZGJuYW1l PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAg PHBhcmE+CisgICAgICAgIFRoZSBkYXRhYmFzZSBuYW1lIHRvIGNyZWF0ZSB0aGUgc3Vic2NyaXB0 aW9uLiBNdWx0aXBsZSBkYXRhYmFzZXMgY2FuIGJlCisgICAgICAgIHNlbGVjdGVkIGJ5IHdyaXRp bmcgbXVsdGlwbGUgPG9wdGlvbj4tZDwvb3B0aW9uPiBzd2l0Y2hlcy4KKyAgICAgICA8L3BhcmE+ CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlz dGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tRCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+ZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVy bT48b3B0aW9uPi0tcGdkYXRhPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5kaXJlY3Rv cnk8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAg ICA8cGFyYT4KKyAgICAgICAgVGhlIHRhcmdldCBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBhIGNs dXN0ZXIgZGlyZWN0b3J5IGZyb20gYSBwaHlzaWNhbAorICAgICAgICByZXBsaWNhLgorICAgICAg IDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAg IDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1uPC9vcHRpb24+PC90ZXJtPgor ICAgICAgPHRlcm0+PG9wdGlvbj4tLWRyeS1ydW48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlz dGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIERvIGV2ZXJ5dGhpbmcgZXhjZXB0IGFjdHVh bGx5IG1vZGlmeWluZyB0aGUgdGFyZ2V0IGRpcmVjdG9yeS4KKyAgICAgICA8L3BhcmE+CisgICAg ICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgPHRlcm0+PG9wdGlvbj4tcCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ cG9ydDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4t LXN1YnNjcmliZXItcG9ydD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cG9ydDwvcmVw bGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICBUaGUgcG9ydCBudW1iZXIgb24gd2hpY2ggdGhlIHRhcmdldCBzZXJ2ZXIgaXMg bGlzdGVuaW5nIGZvciBjb25uZWN0aW9ucy4KKyAgICAgICAgRGVmYXVsdHMgdG8gcnVubmluZyB0 aGUgdGFyZ2V0IHNlcnZlciBvbiBwb3J0IDUwNDMyIHRvIGF2b2lkIHVuaW50ZW5kZWQKKyAgICAg ICAgY2xpZW50IGNvbm5lY3Rpb25zLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+ CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVy bT48b3B0aW9uPi1QIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb25uc3RyPC9yZXBs YWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tcHVibGlzaGVy LXNlcnZlcj08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29ubnN0cjwvcmVwbGFjZWFi bGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAg ICAgICBUaGUgY29ubmVjdGlvbiBzdHJpbmcgdG8gdGhlIHB1Ymxpc2hlci4gRm9yIGRldGFpbHMg c2VlIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLWNvbm5zdHJpbmciLz4uCisgICAgICAgPC9wYXJhPgor ICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3Rl bnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LXMgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPmRpcjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlv bj4tLXNvY2tldC1kaXJlY3Rvcnk9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmRpcjwv cmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxw YXJhPgorICAgICAgICBUaGUgZGlyZWN0b3J5IHRvIHVzZSBmb3IgcG9zdG1hc3RlciBzb2NrZXRz IG9uIHRhcmdldCBzZXJ2ZXIuIFRoZQorICAgICAgICBkZWZhdWx0IGlzIGN1cnJlbnQgZGlyZWN0 b3J5LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVu dHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgPHRlcm0+PG9wdGlvbj4tdCA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c2Vjb25kczwvcmVwbGFjZWFibGU+PC9vcHRpb24+ PC90ZXJtPgorICAgICAgIDx0ZXJtPjxvcHRpb24+LS1yZWNvdmVyeS10aW1lb3V0PTxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zZWNvbmRzPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rl cm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgbWF4aW11 bSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGZvciByZWNvdmVyeSB0byBlbmQuIFNldHRpbmcg dG8gMAorICAgICAgICBkaXNhYmxlcy4gVGhlIGRlZmF1bHQgaXMgMC4KKyAgICAgICA8L3BhcmE+ CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxp c3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LVUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPnVzZXJuYW1lPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVy bT48b3B0aW9uPi0tc3Vic2NyaWJlci11c2VybmFtZT08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+dXNlcm5hbWU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0 aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHVzZXJuYW1lIHRvIGNvbm5lY3QgYXMg b24gdGFyZ2V0IHNlcnZlci4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQKKyAgICAgICAgb3BlcmF0 aW5nIHN5c3RlbSB1c2VyIG5hbWUuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4K KyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJt PjxvcHRpb24+LXY8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tdmVyYm9z ZTwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAg ICAgRW5hYmxlcyB2ZXJib3NlIG1vZGUuIFRoaXMgd2lsbCBjYXVzZQorICAgICAgICA8YXBwbGlj YXRpb24+cGdfY3JlYXRlc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IHRvIG91dHB1dCBwcm9ncmVz cyBtZXNzYWdlcworICAgICAgICBhbmQgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBz dGVwIHRvIHN0YW5kYXJkIGVycm9yLgorICAgICAgICBSZXBlYXRpbmcgdGhlIG9wdGlvbiBjYXVz ZXMgYWRkaXRpb25hbCBkZWJ1Zy1sZXZlbCBtZXNzYWdlcyB0byBhcHBlYXIgb24KKyAgICAgICAg c3RhbmRhcmQgZXJyb3IuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAg PC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRp b24+LS1jb25maWctZmlsZT08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZmlsZW5hbWU8 L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8 cGFyYT4KKyAgICAgICAgVXNlIHRoZSBzcGVjaWZpZWQgbWFpbiBzZXJ2ZXIgY29uZmlndXJhdGlv biBmaWxlIGZvciB0aGUgdGFyZ2V0CisgICAgICAgIGRhdGEgZGlyZWN0b3J5LiBUaGUgPGFwcGxp Y2F0aW9uPnBnX2NyZWF0ZXN1YnNjcmliZXI8L2FwcGxpY2F0aW9uPgorICAgICAgICB1c2VzIGlu dGVybmFsbHkgdGhlIDxhcHBsaWNhdGlvbj5wZ19jdGw8L2FwcGxpY2F0aW9uPiBjb21tYW5kIHRv IHN0YXJ0CisgICAgICAgIGFuZCBzdG9wIHRoZSB0YXJnZXQgc2VydmVyLiBJdCBhbGxvd3MgeW91 IHRvIHNwZWNpZnkgdGhlIGFjdHVhbAorICAgICAgICA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25m PC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlIGlmIGl0IGlzIHN0b3JlZAorICAgICAgICBv dXRzaWRlIHRoZSBkYXRhIGRpcmVjdG9yeS4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3Rp dGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5PgorICAgICAg PHRlcm0+PG9wdGlvbj4tLXB1YmxpY2F0aW9uPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij5uYW1lPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBwdWJsaWNhdGlvbiBuYW1lIHRvIHNldCB1cCB0aGUg bG9naWNhbCByZXBsaWNhdGlvbi4gTXVsdGlwbGUKKyAgICAgICAgcHVibGljYXRpb25zIGNhbiBi ZSBzcGVjaWZpZWQgYnkgd3JpdGluZyBtdWx0aXBsZQorICAgICAgICA8b3B0aW9uPi0tcHVibGlj YXRpb248L29wdGlvbj4gc3dpdGNoZXMuIFRoZSBudW1iZXIgb2YgcHVibGljYXRpb24KKyAgICAg ICAgbmFtZXMgbXVzdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHNwZWNpZmllZCBkYXRhYmFzZXMsIG90 aGVyd2lzZSBhbiBlcnJvcgorICAgICAgICBpcyByZXBvcnRlZC4gVGhlIG9yZGVyIG9mIHRoZSBt dWx0aXBsZSBwdWJsaWNhdGlvbiBuYW1lIHN3aXRjaGVzIG11c3QKKyAgICAgICAgbWF0Y2ggdGhl IG9yZGVyIG9mIGRhdGFiYXNlIHN3aXRjaGVzLiBJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc3BlY2lm aWVkLAorICAgICAgICBhIGdlbmVyYXRlZCBuYW1lIGlzIGFzc2lnbmVkIHRvIHRoZSBwdWJsaWNh dGlvbiBuYW1lLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFy bGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0t c3Vic2NyaXB0aW9uPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNl YWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+Cisg ICAgICAgIFRoZSBzdWJzY3JpcHRpb24gbmFtZSB0byBzZXQgdXAgdGhlIGxvZ2ljYWwgcmVwbGlj YXRpb24uIE11bHRpcGxlCisgICAgICAgIHN1YnNjcmlwdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBi eSB3cml0aW5nIG11bHRpcGxlCisgICAgICAgIDxvcHRpb24+LS1zdWJzY3JpcHRpb248L29wdGlv bj4gc3dpdGNoZXMuIFRoZSBudW1iZXIgb2Ygc3Vic2NyaXB0aW9uCisgICAgICAgIG5hbWVzIG11 c3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzcGVjaWZpZWQgZGF0YWJhc2VzLCBvdGhlcndpc2UgYW4g ZXJyb3IKKyAgICAgICAgaXMgcmVwb3J0ZWQuIFRoZSBvcmRlciBvZiB0aGUgbXVsdGlwbGUgc3Vi c2NyaXB0aW9uIG5hbWUgc3dpdGNoZXMgbXVzdAorICAgICAgICBtYXRjaCB0aGUgb3JkZXIgb2Yg ZGF0YWJhc2Ugc3dpdGNoZXMuIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsCisgICAg ICAgIGEgZ2VuZXJhdGVkIG5hbWUgaXMgYXNzaWduZWQgdG8gdGhlIHN1YnNjcmlwdGlvbiBuYW1l LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5 PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0tcmVwbGljYXRp b24tc2xvdD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+ PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAg ICBUaGUgcmVwbGljYXRpb24gc2xvdCBuYW1lIHRvIHNldCB1cCB0aGUgbG9naWNhbCByZXBsaWNh dGlvbi4gTXVsdGlwbGUKKyAgICAgICAgcmVwbGljYXRpb24gc2xvdHMgY2FuIGJlIHNwZWNpZmll ZCBieSB3cml0aW5nIG11bHRpcGxlCisgICAgICAgIDxvcHRpb24+LS1yZXBsaWNhdGlvbi1zbG90 PC9vcHRpb24+IHN3aXRjaGVzLiBUaGUgbnVtYmVyIG9mIHJlcGxpY2F0aW9uCisgICAgICAgIHNs b3QgbmFtZXMgbXVzdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHNwZWNpZmllZCBkYXRhYmFzZXMsIG90 aGVyd2lzZSBhbgorICAgICAgICBlcnJvciBpcyByZXBvcnRlZC4gVGhlIG9yZGVyIG9mIHRoZSBt dWx0aXBsZSByZXBsaWNhdGlvbiBzbG90IG5hbWUKKyAgICAgICAgc3dpdGNoZXMgbXVzdCBtYXRj aCB0aGUgb3JkZXIgb2YgZGF0YWJhc2Ugc3dpdGNoZXMuIElmIHRoaXMgb3B0aW9uIGlzCisgICAg ICAgIG5vdCBzcGVjaWZpZWQsIHRoZSBzdWJzY3JpcHRpb24gbmFtZSBpcyBhc3NpZ25lZCB0byB0 aGUgcmVwbGljYXRpb24KKyAgICAgICAgc2xvdCBuYW1lLgorICAgICAgIDwvcGFyYT4KKyAgICAg IDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICAgPHRlcm0+PG9wdGlvbj4tPzwvb3B0aW9uPjwvdGVybT4KKyAgICAgICA8dGVybT48 b3B0aW9uPi0taGVscDwvb3B0aW9uPjwvdGVybT4KKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAg PHBhcmE+CisgICAgICAgU2hvdyBoZWxwIGFib3V0IDxhcHBsaWNhdGlvbj5wZ19jcmVhdGVzdWJz Y3JpYmVyPC9hcHBsaWNhdGlvbj4gY29tbWFuZAorICAgICAgIGxpbmUgYXJndW1lbnRzLCBhbmQg ZXhpdC4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0 ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT48b3B0aW9uPi1WPC9v cHRpb24+PC90ZXJtPgorICAgICAgIDx0ZXJtPjxvcHRpb24+LS12ZXJzaW9uPC9vcHRpb24+PC90 ZXJtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICBQcmludCB0aGUg PGFwcGxpY2F0aW9uPnBnX2NyZWF0ZXN1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiB2ZXJzaW9uIGFu ZCBleGl0LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxp c3RlbnRyeT4KKworICAgIDwvdmFyaWFibGVsaXN0PgorICAgPC9wYXJhPgorCisgPC9yZWZzZWN0 MT4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPk5vdGVzPC90aXRsZT4KKworICA8cGFyYT4KKyAg IFRoZXJlIGFyZSBzb21lIHByZXJlcXVpc2l0ZXMgZm9yCisgICA8YXBwbGljYXRpb24+cGdfY3Jl YXRlc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IHRvIGNvbnZlcnQgdGhlIHRhcmdldCBzZXJ2ZXIK KyAgIGludG8gYSBsb2dpY2FsIHJlcGxpY2EuIElmIHRoZXNlIGFyZSBub3QgbWV0LCBhbiBlcnJv ciB3aWxsIGJlIHJlcG9ydGVkLiBUaGUKKyAgIHNvdXJjZSBhbmQgdGFyZ2V0IHNlcnZlcnMgbXVz dCBoYXZlIHRoZSBzYW1lIG1ham9yIHZlcnNpb24gYXMgdGhlCisgICA8YXBwbGljYXRpb24+cGdf Y3JlYXRlc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+LiBUaGUgZ2l2ZW4gdGFyZ2V0IGRhdGEKKyAg IGRpcmVjdG9yeSBtdXN0IGhhdmUgdGhlIHNhbWUgc3lzdGVtIGlkZW50aWZpZXIgYXMgdGhlIHNv dXJjZSBkYXRhIGRpcmVjdG9yeS4KKyAgIFRoZSBnaXZlbiBkYXRhYmFzZSB1c2VyIGZvciB0aGUg dGFyZ2V0IGRhdGEgZGlyZWN0b3J5IG11c3QgaGF2ZSBwcml2aWxlZ2VzCisgICBmb3IgY3JlYXRp bmcgPGxpbmsgbGlua2VuZD0ic3FsLWNyZWF0ZXN1YnNjcmlwdGlvbiI+c3Vic2NyaXB0aW9uczwv bGluaz4gYW5kCisgICB1c2luZworICAgPGxpbmsgbGlua2VuZD0icGctcmVwbGljYXRpb24tb3Jp Z2luLWFkdmFuY2UiPjxmdW5jdGlvbj5wZ19yZXBsaWNhdGlvbl9vcmlnaW5fYWR2YW5jZSgpPC9m dW5jdGlvbj48L2xpbms+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgdGFyZ2V0IHNl cnZlciBtdXN0IGJlIHVzZWQgYXMgYSBwaHlzaWNhbCBzdGFuZGJ5LiBUaGUgdGFyZ2V0IHNlcnZl cgorICAgbXVzdCBoYXZlCisgICA8bGluayBsaW5rZW5kPSJndWMtbWF4LXJlcGxpY2F0aW9uLXNs b3RzIj48dmFybmFtZT5tYXhfcmVwbGljYXRpb25fc2xvdHM8L3Zhcm5hbWU+PC9saW5rPgorICAg YW5kCisgICA8bGluayBsaW5rZW5kPSJndWMtbWF4LWxvZ2ljYWwtcmVwbGljYXRpb24td29ya2Vy cyI+PHZhcm5hbWU+bWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VyczwvdmFybmFtZT48L2xp bms+CisgICBjb25maWd1cmVkIHRvIGEgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRo ZSBudW1iZXIgb2Ygc3BlY2lmaWVkCisgICBkYXRhYmFzZXMuIFRoZSB0YXJnZXQgc2VydmVyIG11 c3QgaGF2ZQorICAgPGxpbmsgbGlua2VuZD0iZ3VjLW1heC13b3JrZXItcHJvY2Vzc2VzIj48dmFy bmFtZT5tYXhfd29ya2VyX3Byb2Nlc3NlczwvdmFybmFtZT48L2xpbms+CisgICBjb25maWd1cmVk IHRvIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2Ygc3BlY2lmaWVkIGRhdGFiYXNl cy4gVGhlCisgICB0YXJnZXQgc2VydmVyIG11c3QgYWNjZXB0IGxvY2FsIGNvbm5lY3Rpb25zLgor ICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgc291cmNlIHNlcnZlciBtdXN0IGFjY2VwdCBj b25uZWN0aW9ucyBmcm9tIHRoZSB0YXJnZXQgc2VydmVyLiBUaGUKKyAgIHNvdXJjZSBzZXJ2ZXIg bXVzdCBub3QgYmUgaW4gcmVjb3ZlcnkuIFRoZSBzb3VyY2Ugc2VydmVyIG11c3QgaGF2ZQorICAg PGxpbmsgbGlua2VuZD0iZ3VjLXdhbC1sZXZlbCI+PHZhcm5hbWU+d2FsX2xldmVsPC92YXJuYW1l PjwvbGluaz4gYXMKKyAgIDxsaXRlcmFsPmxvZ2ljYWw8L2xpdGVyYWw+LgorICAgVGhlIHNvdXJj ZSBzZXJ2ZXIgbXVzdCBoYXZlCisgICA8bGluayBsaW5rZW5kPSJndWMtbWF4LXJlcGxpY2F0aW9u LXNsb3RzIj48dmFybmFtZT5tYXhfcmVwbGljYXRpb25fc2xvdHM8L3Zhcm5hbWU+PC9saW5rPgor ICAgY29uZmlndXJlZCB0byBhIHZhbHVlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbnVt YmVyIG9mIHNwZWNpZmllZAorICAgZGF0YWJhc2VzIHBsdXMgZXhpc3RpbmcgcmVwbGljYXRpb24g c2xvdHMuIFRoZSBzb3VyY2Ugc2VydmVyIG11c3QgaGF2ZQorICAgPGxpbmsgbGlua2VuZD0iZ3Vj LW1heC13YWwtc2VuZGVycyI+PHZhcm5hbWU+bWF4X3dhbF9zZW5kZXJzPC92YXJuYW1lPjwvbGlu az4KKyAgIGNvbmZpZ3VyZWQgdG8gYSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhl IG51bWJlciBvZiBzcGVjaWZpZWQKKyAgIGRhdGFiYXNlcyBhbmQgZXhpc3RpbmcgPGxpdGVyYWw+ d2Fsc2VuZGVyPC9saXRlcmFsPiBwcm9jZXNzZXMuCisgIDwvcGFyYT4KKworICA8d2FybmluZz4K KyAgIDx0aXRsZT5XYXJuaW5nPC90aXRsZT4KKyAgIDxwYXJhPgorICAgIElmIDxhcHBsaWNhdGlv bj5wZ19jcmVhdGVzdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gZmFpbHMgYWZ0ZXIgdGhlIHRhcmdl dAorICAgIHNlcnZlciB3YXMgcHJvbW90ZWQsIHRoZW4gdGhlIGRhdGEgZGlyZWN0b3J5IGlzIGxp a2VseSBub3QgaW4gYSBzdGF0ZSB0aGF0CisgICAgY2FuIGJlIHJlY292ZXJlZC4gSW4gc3VjaCBj YXNlLCBjcmVhdGluZyBhIG5ldyBzdGFuZGJ5IHNlcnZlciBpcworICAgIHJlY29tbWVuZGVkLgor ICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICA8YXBwbGljYXRpb24+cGdfY3JlYXRlc3Vic2Ny aWJlcjwvYXBwbGljYXRpb24+IHVzdWFsbHkgc3RhcnRzIHRoZSB0YXJnZXQKKyAgICBzZXJ2ZXIg d2l0aCBkaWZmZXJlbnQgY29ubmVjdGlvbiBzZXR0aW5ncyBkdXJpbmcgdHJhbnNmb3JtYXRpb24u IEhlbmNlLAorICAgIGNvbm5lY3Rpb25zIHRvIHRoZSB0YXJnZXQgc2VydmVyIHNob3VsZCBmYWls LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBEdXJpbmcgdGhlIHJlY292ZXJ5IHByb2Nl c3MsIGlmIHRoZSB0YXJnZXQgc2VydmVyIGRpc2Nvbm5lY3RzIGZyb20gdGhlCisgICAgc291cmNl IHNlcnZlciwgPGFwcGxpY2F0aW9uPnBnX2NyZWF0ZXN1YnNjcmliZXI8L2FwcGxpY2F0aW9uPiB3 aWxsIGNoZWNrCisgICAgYSBmZXcgdGltZXMgaWYgdGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gcmVl c3RhYmxpc2hlZCB0byBzdHJlYW0gdGhlIHJlcXVpcmVkCisgICAgV0FMLiBBZnRlciBhIGZldyBh dHRlbXB0cywgaXQgdGVybWluYXRlcyB3aXRoIGFuIGVycm9yLgorICAgPC9wYXJhPgorCisgICA8 cGFyYT4KKyAgICBTaW5jZSBEREwgY29tbWFuZHMgYXJlIG5vdCByZXBsaWNhdGVkIGJ5IGxvZ2lj YWwgcmVwbGljYXRpb24sIGF2b2lkCisgICAgZXhlY3V0aW5nIERETCBjb21tYW5kcyB0aGF0IGNo YW5nZSB0aGUgZGF0YWJhc2Ugc2NoZW1hIHdoaWxlIHJ1bm5pbmcKKyAgICA8YXBwbGljYXRpb24+ cGdfY3JlYXRlc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+LiBJZiB0aGUgdGFyZ2V0IHNlcnZlciBo YXMKKyAgICBhbHJlYWR5IGJlZW4gY29udmVydGVkIHRvIGxvZ2ljYWwgcmVwbGljYSwgdGhlIERE TCBjb21tYW5kcyBtdXN0IG5vdCBiZQorICAgIHJlcGxpY2F0ZWQgd2hpY2ggbWlnaHQgY2F1c2Ug YW4gZXJyb3IuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIElmIDxhcHBsaWNhdGlvbj5w Z19jcmVhdGVzdWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gZmFpbHMgd2hpbGUgcHJvY2Vzc2luZywK KyAgICBvYmplY3RzIChwdWJsaWNhdGlvbnMsIHJlcGxpY2F0aW9uIHNsb3RzKSBjcmVhdGVkIG9u IHRoZSBzb3VyY2Ugc2VydmVyCisgICAgYXJlIHJlbW92ZWQuIFRoZSByZW1vdmFsIG1pZ2h0IGZh aWwgaWYgdGhlIHRhcmdldCBzZXJ2ZXIgY2Fubm90IGNvbm5lY3QgdG8KKyAgICB0aGUgc291cmNl IHNlcnZlci4gSW4gc3VjaCBhIGNhc2UsIGEgd2FybmluZyBtZXNzYWdlIHdpbGwgaW5mb3JtIHRo ZQorICAgIG9iamVjdHMgbGVmdC4gSWYgdGhlIHRhcmdldCBzZXJ2ZXIgaXMgcnVubmluZywgaXQg d2lsbCBiZSBzdG9wcGVkLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBJZiB0aGUgcmVw bGljYXRpb24gaXMgdXNpbmcgYQorICAgIDxsaW5rIGxpbmtlbmQ9Imd1Yy1wcmltYXJ5LXNsb3Qt bmFtZSI+PHZhcm5hbWU+cHJpbWFyeV9zbG90X25hbWU8L3Zhcm5hbWU+PC9saW5rPiwKKyAgICBp dCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgc291cmNlIHNlcnZlciBhZnRlciB0aGUgbG9naWNh bCByZXBsaWNhdGlvbiBzZXR1cC4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgSWYgdGhl IHRhcmdldCBzZXJ2ZXIgaXMgYSBzeW5jaHJvbm91cyByZXBsaWNhLCB0cmFuc2FjdGlvbiBjb21t aXRzIG9uIHRoZQorICAgIHByaW1hcnkgbWlnaHQgd2FpdCBmb3IgcmVwbGljYXRpb24gd2hpbGUg cnVubmluZworICAgIDxhcHBsaWNhdGlvbj5wZ19jcmVhdGVzdWJzY3JpYmVyPC9hcHBsaWNhdGlv bj4uCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIDxhcHBsaWNhdGlvbj5wZ19jcmVhdGVz dWJzY3JpYmVyPC9hcHBsaWNhdGlvbj4gY2hhbmdlcyB0aGUgc3lzdGVtIGlkZW50aWZpZXIKKyAg ICB1c2luZyA8YXBwbGljYXRpb24+cGdfcmVzZXR3YWw8L2FwcGxpY2F0aW9uPi4gSXQgd291bGQg YXZvaWQgc2l0dWF0aW9ucyBpbgorICAgIHdoaWNoIHRoZSB0YXJnZXQgc2VydmVyIG1pZ2h0IHVz ZSBXQUwgZmlsZXMgZnJvbSB0aGUgc291cmNlIHNlcnZlci4gSWYgdGhlCisgICAgdGFyZ2V0IHNl cnZlciBoYXMgYSBzdGFuZGJ5LCByZXBsaWNhdGlvbiB3aWxsIGJyZWFrIGFuZCBhIGZyZXNoIHN0 YW5kYnkKKyAgICBzaG91bGQgYmUgY3JlYXRlZC4KKyAgIDwvcGFyYT4KKyAgPC93YXJuaW5nPgor CisgPC9yZWZzZWN0MT4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPkhvdyBJdCBXb3JrczwvdGl0 bGU+CisKKyAgPHBhcmE+CisgICAgVGhlIGJhc2ljIGlkZWEgaXMgdG8gaGF2ZSBhIHJlcGxpY2F0 aW9uIHN0YXJ0IHBvaW50IGZyb20gdGhlIHNvdXJjZSBzZXJ2ZXIKKyAgICBhbmQgc2V0IHVwIGEg bG9naWNhbCByZXBsaWNhdGlvbiB0byBzdGFydCBmcm9tIHRoaXMgcG9pbnQ6CisgIDwvcGFyYT4K KworICA8cHJvY2VkdXJlPgorICAgPHN0ZXA+CisgICAgPHBhcmE+CisgICAgIFN0YXJ0IHRoZSB0 YXJnZXQgc2VydmVyIHdpdGggdGhlIHNwZWNpZmllZCBjb21tYW5kLWxpbmUgb3B0aW9ucy4gSWYg dGhlCisgICAgIHRhcmdldCBzZXJ2ZXIgaXMgcnVubmluZywgPGFwcGxpY2F0aW9uPnBnX2NyZWF0 ZXN1YnNjcmliZXI8L2FwcGxpY2F0aW9uPgorICAgICB3aWxsIHRlcm1pbmF0ZSB3aXRoIGFuIGVy cm9yLgorICAgIDwvcGFyYT4KKyAgIDwvc3RlcD4KKworICAgPHN0ZXA+CisgICAgPHBhcmE+Cisg ICAgIENoZWNrIGlmIHRoZSB0YXJnZXQgc2VydmVyIGNhbiBiZSBjb252ZXJ0ZWQuIFRoZXJlIGFy ZSBhbHNvIGEgZmV3IGNoZWNrcworICAgICBvbiB0aGUgc291cmNlIHNlcnZlci4gSWYgYW55IG9m IHRoZSBwcmVyZXF1aXNpdGVzIGFyZSBub3QgbWV0LAorICAgICA8YXBwbGljYXRpb24+cGdfY3Jl YXRlc3Vic2NyaWJlcjwvYXBwbGljYXRpb24+IHdpbGwgdGVybWluYXRlIHdpdGggYW4KKyAgICAg ZXJyb3IuCisgICAgPC9wYXJhPgorICAgPC9zdGVwPgorCisgICA8c3RlcD4KKyAgICA8cGFyYT4K KyAgICAgQ3JlYXRlIGEgcHVibGljYXRpb24gYW5kIHJlcGxpY2F0aW9uIHNsb3QgZm9yIGVhY2gg c3BlY2lmaWVkIGRhdGFiYXNlIG9uCisgICAgIHRoZSBzb3VyY2Ugc2VydmVyLiBFYWNoIHB1Ymxp Y2F0aW9uIGlzIGNyZWF0ZWQgdXNpbmcKKyAgICAgPGxpbmsgbGlua2VuZD0ic3FsLWNyZWF0ZXB1 YmxpY2F0aW9uLXBhcmFtcy1mb3ItYWxsLXRhYmxlcyI+PGxpdGVyYWw+Rk9SIEFMTCBUQUJMRVM8 L2xpdGVyYWw+PC9saW5rPi4KKyAgICAgSWYgPG9wdGlvbj5wdWJsaWNhdGlvbi1uYW1lPC9vcHRp b24+IG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCBpdCBoYXMgdGhlCisgICAgIGZvbGxvd2luZyBu YW1lIHBhdHRlcm46CisgICAgIDxxdW90ZT48bGl0ZXJhbD5wZ19jcmVhdGVzdWJzY3JpYmVyXyV1 XyV4PC9saXRlcmFsPjwvcXVvdGU+IChwYXJhbWV0ZXI6CisgICAgIGRhdGFiYXNlIDxwYXJhbWV0 ZXI+b2lkPC9wYXJhbWV0ZXI+LCByYW5kb20gPHBhcmFtZXRlcj5pbnQ8L3BhcmFtZXRlcj4pLgor ICAgICBJZiA8b3B0aW9uPnJlcGxpY2F0aW9uLXNsb3QtbmFtZTwvb3B0aW9uPiBpcyBub3Qgc3Bl Y2lmaWVkLCB0aGUKKyAgICAgcmVwbGljYXRpb24gc2xvdCBoYXMgdGhlIGZvbGxvd2luZyBuYW1l IHBhdHRlcm46CisgICAgIDxxdW90ZT48bGl0ZXJhbD5wZ19jcmVhdGVzdWJzY3JpYmVyXyV1XyV4 PC9saXRlcmFsPjwvcXVvdGU+IChwYXJhbWV0ZXJzOgorICAgICBkYXRhYmFzZSA8cGFyYW1ldGVy Pm9pZDwvcGFyYW1ldGVyPiwgcmFuZG9tIDxwYXJhbWV0ZXI+aW50PC9wYXJhbWV0ZXI+KS4KKyAg ICAgVGhlc2UgcmVwbGljYXRpb24gc2xvdHMgd2lsbCBiZSB1c2VkIGJ5IHRoZSBzdWJzY3JpcHRp b25zIGluIGEgZnV0dXJlIHN0ZXAuCisgICAgIFRoZSBsYXN0IHJlcGxpY2F0aW9uIHNsb3QgTFNO IGlzIHVzZWQgYXMgYSBzdG9wcGluZyBwb2ludCBpbiB0aGUKKyAgICAgPHhyZWYgbGlua2VuZD0i Z3VjLXJlY292ZXJ5LXRhcmdldC1sc24iLz4gcGFyYW1ldGVyIGFuZCBieSB0aGUKKyAgICAgc3Vi c2NyaXB0aW9ucyBhcyBhIHJlcGxpY2F0aW9uIHN0YXJ0IHBvaW50LiBJdCBndWFyYW50ZWVzIHRo YXQgbm8KKyAgICAgdHJhbnNhY3Rpb24gd2lsbCBiZSBsb3N0LgorICAgIDwvcGFyYT4KKyAgIDwv c3RlcD4KKworICAgPHN0ZXA+CisgICAgPHBhcmE+CisgICAgIFdyaXRlIHJlY292ZXJ5IHBhcmFt ZXRlcnMgaW50byB0aGUgdGFyZ2V0IGRhdGEgZGlyZWN0b3J5IGFuZCByZXN0YXJ0IHRoZQorICAg ICB0YXJnZXQgc2VydmVyLiBJdCBzcGVjaWZpZXMgYW4gTFNOICg8eHJlZiBsaW5rZW5kPSJndWMt cmVjb3ZlcnktdGFyZ2V0LWxzbiIvPikKKyAgICAgb2YgdGhlIHdyaXRlLWFoZWFkIGxvZyBsb2Nh dGlvbiB1cCB0byB3aGljaCByZWNvdmVyeSB3aWxsIHByb2NlZWQuIEl0IGFsc28KKyAgICAgc3Bl Y2lmaWVzIDxsaXRlcmFsPnByb21vdGU8L2xpdGVyYWw+IGFzIHRoZSBhY3Rpb24gdGhhdCB0aGUg c2VydmVyIHNob3VsZAorICAgICB0YWtlIG9uY2UgdGhlIHJlY292ZXJ5IHRhcmdldCBpcyByZWFj aGVkLiBBZGRpdGlvbmFsCisgICAgIDxsaW5rIGxpbmtlbmQ9InJ1bnRpbWUtY29uZmlnLXdhbC1y ZWNvdmVyeS10YXJnZXQiPnJlY292ZXJ5IHBhcmFtZXRlcnM8L2xpbms+CisgICAgIGFyZSBhZGRl ZCB0byBhdm9pZCB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyB0aGUgcmVjb3ZlcnkgcHJvY2Vz cyBzdWNoIGFzCisgICAgIGVuZCBvZiB0aGUgcmVjb3ZlcnkgYXMgc29vbiBhcyBhIGNvbnNpc3Rl bnQgc3RhdGUgaXMgcmVhY2hlZCAoV0FMIHNob3VsZAorICAgICBiZSBhcHBsaWVkIHVudGlsIHRo ZSByZXBsaWNhdGlvbiBzdGFydCBsb2NhdGlvbikgYW5kIG11bHRpcGxlIHJlY292ZXJ5CisgICAg IHRhcmdldHMgdGhhdCBjYW4gY2F1c2UgYSBmYWlsdXJlLiBUaGlzIHN0ZXAgZmluaXNoZXMgb25j ZSB0aGUgc2VydmVyIGVuZHMKKyAgICAgc3RhbmRieSBtb2RlIGFuZCBpcyBhY2NlcHRpbmcgcmVh ZC13cml0ZSB0cmFuc2FjdGlvbnMuCisgICAgIElmIDxvcHRpb24+LS1yZWNvdmVyeS10aW1lb3V0 PC9vcHRpb24+IG9wdGlvbiBpcyBzZXQsCisgICAgIDxhcHBsaWNhdGlvbj5wZ19jcmVhdGVzdWJz Y3JpYmVyPC9hcHBsaWNhdGlvbj4gdGVybWluYXRlcyBpZiByZWNvdmVyeSBkb2VzCisgICAgIG5v dCBlbmQgdW50aWwgdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzLgorICAgIDwvcGFyYT4KKyAg IDwvc3RlcD4KKworICAgPHN0ZXA+CisgICAgPHBhcmE+CisgICAgIENyZWF0ZSBhIHN1YnNjcmlw dGlvbiBmb3IgZWFjaCBzcGVjaWZpZWQgZGF0YWJhc2Ugb24gdGhlIHRhcmdldCBzZXJ2ZXIuCisg ICAgIElmIDxvcHRpb24+c3Vic2NyaXB0aW9uLW5hbWU8L29wdGlvbj4gaXMgbm90IHNwZWNpZmll ZCwgdGhlIHN1YnNjcmlwdGlvbgorICAgICBoYXMgdGhlIGZvbGxvd2luZyBuYW1lIHBhdHRlcm46 CisgICAgIDxxdW90ZT48bGl0ZXJhbD5wZ19jcmVhdGVzdWJzY3JpYmVyXyV1XyV4PC9saXRlcmFs PjwvcXVvdGU+IChwYXJhbWV0ZXJzOgorICAgICBkYXRhYmFzZSA8cGFyYW1ldGVyPm9pZDwvcGFy YW1ldGVyPiwgcmFuZG9tIDxwYXJhbWV0ZXI+aW50PC9wYXJhbWV0ZXI+KS4KKyAgICAgSXQgZG9l cyBub3QgY29weSBleGlzdGluZyBkYXRhIGZyb20gdGhlIHNvdXJjZSBzZXJ2ZXIuIEl0IGRvZXMg bm90IGNyZWF0ZQorICAgICBhIHJlcGxpY2F0aW9uIHNsb3QuIEluc3RlYWQsIGl0IHVzZXMgdGhl IHJlcGxpY2F0aW9uIHNsb3QgdGhhdCB3YXMgY3JlYXRlZAorICAgICBpbiBhIHByZXZpb3VzIHN0 ZXAuIFRoZSBzdWJzY3JpcHRpb24gaXMgY3JlYXRlZCBidXQgaXQgaXMgbm90IGVuYWJsZWQgeWV0 LgorICAgICBUaGUgcmVhc29uIGlzIHRoZSByZXBsaWNhdGlvbiBwcm9ncmVzcyBtdXN0IGJlIHNl dCB0byB0aGUgcmVwbGljYXRpb24KKyAgICAgc3RhcnQgcG9pbnQgYmVmb3JlIHN0YXJ0aW5nIHRo ZSByZXBsaWNhdGlvbi4KKyAgICA8L3BhcmE+CisgICA8L3N0ZXA+CisKKyAgIDxzdGVwPgorICAg IDxwYXJhPgorICAgICBEcm9wIHB1YmxpY2F0aW9ucyBvbiB0aGUgdGFyZ2V0IHNlcnZlciB0aGF0 IHdlcmUgcmVwbGljYXRlZCBiZWNhdXNlIHRoZXkKKyAgICAgd2VyZSBjcmVhdGVkIGJlZm9yZSB0 aGUgcmVwbGljYXRpb24gc3RhcnQgbG9jYXRpb24uIEl0IGhhcyBubyB1c2Ugb24gdGhlCisgICAg IHN1YnNjcmliZXIuCisgICAgPC9wYXJhPgorICAgPC9zdGVwPgorCisgICA8c3RlcD4KKyAgICA8 cGFyYT4KKyAgICAgU2V0IHRoZSByZXBsaWNhdGlvbiBwcm9ncmVzcyB0byB0aGUgcmVwbGljYXRp b24gc3RhcnQgcG9pbnQgZm9yIGVhY2gKKyAgICAgc3Vic2NyaXB0aW9uLiBXaGVuIHRoZSB0YXJn ZXQgc2VydmVyIHN0YXJ0cyB0aGUgcmVjb3ZlcnkgcHJvY2VzcywgaXQKKyAgICAgY2F0Y2hlcyB1 cCB0byB0aGUgcmVwbGljYXRpb24gc3RhcnQgcG9pbnQuIFRoaXMgaXMgdGhlIGV4YWN0IExTTiB0 byBiZSB1c2VkCisgICAgIGFzIGEgaW5pdGlhbCByZXBsaWNhdGlvbiBsb2NhdGlvbiBmb3IgZWFj aCBzdWJzY3JpcHRpb24uIFRoZSByZXBsaWNhdGlvbgorICAgICBvcmlnaW4gbmFtZSBpcyBvYnRh aW5lZCBzaW5jZSB0aGUgc3Vic2NyaXB0aW9uIHdhcyBjcmVhdGVkLiBUaGUgcmVwbGljYXRpb24K KyAgICAgb3JpZ2luIG5hbWUgYW5kIHRoZSByZXBsaWNhdGlvbiBzdGFydCBwb2ludCBhcmUgdXNl ZCBpbgorICAgICA8bGluayBsaW5rZW5kPSJwZy1yZXBsaWNhdGlvbi1vcmlnaW4tYWR2YW5jZSI+ PGZ1bmN0aW9uPnBnX3JlcGxpY2F0aW9uX29yaWdpbl9hZHZhbmNlKCk8L2Z1bmN0aW9uPjwvbGlu az4KKyAgICAgdG8gc2V0IHVwIHRoZSBpbml0aWFsIHJlcGxpY2F0aW9uIGxvY2F0aW9uLgorICAg IDwvcGFyYT4KKyAgIDwvc3RlcD4KKworICAgPHN0ZXA+CisgICAgPHBhcmE+CisgICAgIEVuYWJs ZSB0aGUgc3Vic2NyaXB0aW9uIGZvciBlYWNoIHNwZWNpZmllZCBkYXRhYmFzZSBvbiB0aGUgdGFy Z2V0IHNlcnZlci4KKyAgICAgVGhlIHN1YnNjcmlwdGlvbiBzdGFydHMgYXBwbHlpbmcgdHJhbnNh Y3Rpb25zIGZyb20gdGhlIHJlcGxpY2F0aW9uIHN0YXJ0CisgICAgIHBvaW50LgorICAgIDwvcGFy YT4KKyAgIDwvc3RlcD4KKworICAgPHN0ZXA+CisgICAgPHBhcmE+CisgICAgIElmIHRoZSBzdGFu ZGJ5IHNlcnZlciB3YXMgdXNpbmcKKyAgICAgPGxpbmsgbGlua2VuZD0iZ3VjLXByaW1hcnktc2xv dC1uYW1lIj48dmFybmFtZT5wcmltYXJ5X3Nsb3RfbmFtZTwvdmFybmFtZT48L2xpbms+LAorICAg ICBpdCBoYXMgbm8gdXNlIGZyb20gbm93IG9uIHNvIGRyb3AgaXQuCisgICAgPC9wYXJhPgorICAg PC9zdGVwPgorCisgICA8c3RlcD4KKyAgICA8cGFyYT4KKyAgICAgVXBkYXRlIHRoZSBzeXN0ZW0g aWRlbnRpZmllciBvbiB0aGUgdGFyZ2V0IHNlcnZlci4gVGhlCisgICAgIDx4cmVmIGxpbmtlbmQ9 ImFwcC1wZ3Jlc2V0d2FsIi8+IGlzIHJ1biB0byBtb2RpZnkgdGhlIHN5c3RlbSBpZGVudGlmaWVy LgorICAgICBUaGUgdGFyZ2V0IHNlcnZlciBpcyBzdG9wcGVkIGFzIGEgPGNvbW1hbmQ+cGdfcmVz ZXR3YWw8L2NvbW1hbmQ+IHJlcXVpcmVtZW50LgorICAgIDwvcGFyYT4KKyAgIDwvc3RlcD4KKyAg PC9wcm9jZWR1cmU+CisgPC9yZWZzZWN0MT4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPkV4YW1w bGVzPC90aXRsZT4KKworICA8cGFyYT4KKyAgIFRvIGNyZWF0ZSBhIGxvZ2ljYWwgcmVwbGljYSBm b3IgZGF0YWJhc2VzIDxsaXRlcmFsPmhyPC9saXRlcmFsPiBhbmQKKyAgIDxsaXRlcmFsPmZpbmFu Y2U8L2xpdGVyYWw+IGZyb20gYSBwaHlzaWNhbCByZXBsaWNhIGF0IDxsaXRlcmFsPmZvbzwvbGl0 ZXJhbD46Cis8c2NyZWVuPgorPHByb21wdD4kPC9wcm9tcHQ+IDx1c2VyaW5wdXQ+cGdfY3JlYXRl c3Vic2NyaWJlciAtRCAvdXNyL2xvY2FsL3Bnc3FsL2RhdGEgLVAgImhvc3Q9Zm9vIiAtZCBociAt ZCBmaW5hbmNlPC91c2VyaW5wdXQ+Cis8L3NjcmVlbj4KKyAgPC9wYXJhPgorCisgPC9yZWZzZWN0 MT4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPlNlZSBBbHNvPC90aXRsZT4KKworICA8c2ltcGxl bGlzdCB0eXBlPSJpbmxpbmUiPgorICAgPG1lbWJlcj48eHJlZiBsaW5rZW5kPSJhcHAtcGdiYXNl YmFja3VwIi8+PC9tZW1iZXI+CisgIDwvc2ltcGxlbGlzdD4KKyA8L3JlZnNlY3QxPgorCis8L3Jl ZmVudHJ5PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sIGIvZG9jL3Ny Yy9zZ21sL3JlZmVyZW5jZS5zZ21sCmluZGV4IGFhOTRmNmFkZjYuLmZmODVhY2U4M2YgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVm ZXJlbmNlLnNnbWwKQEAgLTI4Miw2ICsyODIsNyBAQAogICAgJnBnYXJjaGl2ZWNsZWFudXA7CiAg ICAmcGdDaGVja3N1bXM7CiAgICAmcGdDb250cm9sZGF0YTsKKyAgICZwZ0NyZWF0ZVN1YnNjcmli ZXI7CiAgICAmcGdDdGw7CiAgICAmcGdSZXNldHdhbDsKICAgICZwZ1Jld2luZDsKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC8uZ2l0aWdub3JlIGIvc3JjL2Jpbi9wZ19iYXNlYmFj a3VwLy5naXRpZ25vcmUKaW5kZXggMjYwNDhiZGJkOC4uMTRkNWRlNmMwMSAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19iYXNlYmFja3VwLy5naXRpZ25vcmUKKysrIGIvc3JjL2Jpbi9wZ19iYXNlYmFj a3VwLy5naXRpZ25vcmUKQEAgLTEsNCArMSw1IEBACiAvcGdfYmFzZWJhY2t1cAorL3BnX2NyZWF0 ZXN1YnNjcmliZXIKIC9wZ19yZWNlaXZld2FsCiAvcGdfcmVjdmxvZ2ljYWwKIApkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL01ha2VmaWxlIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3Vw L01ha2VmaWxlCmluZGV4IGFiZmI2NDQwZWMuLjI2YzUzZTQ3M2YgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfYmFzZWJhY2t1cC9NYWtlZmlsZQorKysgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvTWFr ZWZpbGUKQEAgLTQ0LDExICs0NCwxNCBAQCBCQk9CSlMgPSBcCiAJYmJzdHJlYW1lcl90YXIubyBc CiAJYmJzdHJlYW1lcl96c3RkLm8KIAotYWxsOiBwZ19iYXNlYmFja3VwIHBnX3JlY2VpdmV3YWwg cGdfcmVjdmxvZ2ljYWwKK2FsbDogcGdfYmFzZWJhY2t1cCBwZ19jcmVhdGVzdWJzY3JpYmVyIHBn X3JlY2VpdmV3YWwgcGdfcmVjdmxvZ2ljYWwKIAogcGdfYmFzZWJhY2t1cDogJChCQk9CSlMpICQo T0JKUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0 aWxzCiAJJChDQykgJChDRkxBR1MpICQoQkJPQkpTKSAkKE9CSlMpICQoTERGTEFHUykgJChMREZM QUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQogCitwZ19jcmVhdGVzdWJzY3JpYmVyOiBwZ19jcmVh dGVzdWJzY3JpYmVyLm8gJChXSU4zMlJFUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdw b3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCisJJChDQykgJChDRkxBR1MpICReICQoTERGTEFHUykg JChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQorCiBwZ19yZWNlaXZld2FsOiBwZ19yZWNl aXZld2FsLm8gJChPQkpTKSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFr ZS1saWJwZ2ZldXRpbHMKIAkkKENDKSAkKENGTEFHUykgcGdfcmVjZWl2ZXdhbC5vICQoT0JKUykg JChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCiAKQEAgLTU3LDYgKzYw LDcgQEAgcGdfcmVjdmxvZ2ljYWw6IHBnX3JlY3Zsb2dpY2FsLm8gJChPQkpTKSB8IHN1Ym1ha2Ut bGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWEKIAogaW5zdGFsbDogYWxsIGluc3RhbGxkaXJz CiAJJChJTlNUQUxMX1BST0dSQU0pIHBnX2Jhc2ViYWNrdXAkKFgpICckKERFU1RESVIpJChiaW5k aXIpL3BnX2Jhc2ViYWNrdXAkKFgpJworCSQoSU5TVEFMTF9QUk9HUkFNKSBwZ19jcmVhdGVzdWJz Y3JpYmVyJChYKSAnJChERVNURElSKSQoYmluZGlyKS9wZ19jcmVhdGVzdWJzY3JpYmVyJChYKScK IAkkKElOU1RBTExfUFJPR1JBTSkgcGdfcmVjZWl2ZXdhbCQoWCkgJyQoREVTVERJUikkKGJpbmRp cikvcGdfcmVjZWl2ZXdhbCQoWCknCiAJJChJTlNUQUxMX1BST0dSQU0pIHBnX3JlY3Zsb2dpY2Fs JChYKSAnJChERVNURElSKSQoYmluZGlyKS9wZ19yZWN2bG9naWNhbCQoWCknCiAKQEAgLTY1LDEy ICs2OSwxMyBAQCBpbnN0YWxsZGlyczoKIAogdW5pbnN0YWxsOgogCXJtIC1mICckKERFU1RESVIp JChiaW5kaXIpL3BnX2Jhc2ViYWNrdXAkKFgpJworCXJtIC1mICckKERFU1RESVIpJChiaW5kaXIp L3BnX2NyZWF0ZXN1YnNjcmliZXIkKFgpJwogCXJtIC1mICckKERFU1RESVIpJChiaW5kaXIpL3Bn X3JlY2VpdmV3YWwkKFgpJwogCXJtIC1mICckKERFU1RESVIpJChiaW5kaXIpL3BnX3JlY3Zsb2dp Y2FsJChYKScKIAogY2xlYW4gZGlzdGNsZWFuOgotCXJtIC1mIHBnX2Jhc2ViYWNrdXAkKFgpIHBn X3JlY2VpdmV3YWwkKFgpIHBnX3JlY3Zsb2dpY2FsJChYKSBcCi0JCSQoQkJPQkpTKSBwZ19yZWNl aXZld2FsLm8gcGdfcmVjdmxvZ2ljYWwubyBcCisJcm0gLWYgcGdfYmFzZWJhY2t1cCQoWCkgcGdf Y3JlYXRlc3Vic2NyaWJlciQoWCkgcGdfcmVjZWl2ZXdhbCQoWCkgcGdfcmVjdmxvZ2ljYWwkKFgp IFwKKwkJJChCQk9CSlMpIHBnX2NyZWF0ZXN1YnNjcmliZXIubyBwZ19yZWNlaXZld2FsLm8gcGdf cmVjdmxvZ2ljYWwubyBcCiAJCSQoT0JKUykKIAlybSAtcmYgdG1wX2NoZWNrCiAKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfYmFzZWJh Y2t1cC9tZXNvbi5idWlsZAppbmRleCBmN2U2MGU2NjcwLi5jMDBhY2Q1ZTExIDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19iYXNl YmFja3VwL21lc29uLmJ1aWxkCkBAIC0zOCw2ICszOCwyNCBAQCBwZ19iYXNlYmFja3VwID0gZXhl Y3V0YWJsZSgncGdfYmFzZWJhY2t1cCcsCiBiaW5fdGFyZ2V0cyArPSBwZ19iYXNlYmFja3VwCiAK IAorcGdfY3JlYXRlc3Vic2NyaWJlcl9zb3VyY2VzID0gZmlsZXMoCisgICdwZ19jcmVhdGVzdWJz Y3JpYmVyLmMnCispCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICBwZ19jcmVhdGVz dWJzY3JpYmVyX3NvdXJjZXMgKz0gcmNfYmluX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRy YV9hcmdzOiBbCisJJy0tTkFNRScsICdwZ19jcmVhdGVzdWJzY3JpYmVyJywKKwknLS1GSUxFREVT QycsICdwZ19jcmVhdGVzdWJzY3JpYmVyIC0gY3JlYXRlIGEgbmV3IGxvZ2ljYWwgcmVwbGljYSBm cm9tIGEgc3RhbmRieSBzZXJ2ZXInLF0pCitlbmRpZgorCitwZ19jcmVhdGVzdWJzY3JpYmVyID0g ZXhlY3V0YWJsZSgncGdfY3JlYXRlc3Vic2NyaWJlcicsCisgIHBnX2NyZWF0ZXN1YnNjcmliZXJf c291cmNlcywKKyAgZGVwZW5kZW5jaWVzOiBbZnJvbnRlbmRfY29kZSwgbGlicHFdLAorICBrd2Fy Z3M6IGRlZmF1bHRfYmluX2FyZ3MsCispCitiaW5fdGFyZ2V0cyArPSBwZ19jcmVhdGVzdWJzY3Jp YmVyCisKKwogcGdfcmVjZWl2ZXdhbF9zb3VyY2VzID0gZmlsZXMoCiAgICdwZ19yZWNlaXZld2Fs LmMnLAogKQpAQCAtODksNiArMTA3LDcgQEAgdGVzdHMgKz0gewogICAgICAgJ3QvMDExX2luX3Bs YWNlX3RhYmxlc3BhY2UucGwnLAogICAgICAgJ3QvMDIwX3BnX3JlY2VpdmV3YWwucGwnLAogICAg ICAgJ3QvMDMwX3BnX3JlY3Zsb2dpY2FsLnBsJywKKyAgICAgICd0LzA0MF9wZ19jcmVhdGVzdWJz Y3JpYmVyLnBsJywKICAgICBdLAogICB9LAogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNl YmFja3VwL25scy5tayBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC9ubHMubWsKaW5kZXggZmM0NzUw MDNlOC4uNzg3MGNlYTcxYyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL25scy5t aworKysgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvbmxzLm1rCkBAIC04LDYgKzgsNyBAQCBHRVRU RVhUX0ZJTEVTICAgID0gJChGUk9OVEVORF9DT01NT05fR0VUVEVYVF9GSUxFUykgXAogICAgICAg ICAgICAgICAgICAgIGJic3RyZWFtZXJfdGFyLmMgXAogICAgICAgICAgICAgICAgICAgIGJic3Ry ZWFtZXJfenN0ZC5jIFwKICAgICAgICAgICAgICAgICAgICBwZ19iYXNlYmFja3VwLmMgXAorICAg ICAgICAgICAgICAgICAgIHBnX2NyZWF0ZXN1YnNjcmliZXIuYyBcCiAgICAgICAgICAgICAgICAg ICAgcGdfcmVjZWl2ZXdhbC5jIFwKICAgICAgICAgICAgICAgICAgICBwZ19yZWN2bG9naWNhbC5j IFwKICAgICAgICAgICAgICAgICAgICByZWNlaXZlbG9nLmMgXApkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19iYXNlYmFja3VwL3BnX2NyZWF0ZXN1YnNjcmliZXIuYyBiL3NyYy9iaW4vcGdfYmFzZWJh Y2t1cC9wZ19jcmVhdGVzdWJzY3JpYmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uZjE0NmZjYjVlZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJh Y2t1cC9wZ19jcmVhdGVzdWJzY3JpYmVyLmMKQEAgLTAsMCArMSwyMTE4IEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBwZ19jcmVhdGVzdWJzY3JpYmVyLmMKKyAqCSAgQ3JlYXRlIGEgbmV3 IGxvZ2ljYWwgcmVwbGljYSBmcm9tIGEgc3RhbmRieSBzZXJ2ZXIKKyAqCisgKiBDb3B5cmlnaHQg KEMpIDIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURF TlRJRklDQVRJT04KKyAqCSAgc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2NyZWF0ZXN1YnNjcmli ZXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlc19m ZS5oIgorCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2lu Y2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgImNhdGFsb2cvcGdfYXV0aGlkX2QuaCIKKyNpbmNs dWRlICJjb21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUgImNvbW1vbi9jb250cm9sZGF0YV91dGls cy5oIgorI2luY2x1ZGUgImNvbW1vbi9maWxlX3Blcm0uaCIKKyNpbmNsdWRlICJjb21tb24vbG9n Z2luZy5oIgorI2luY2x1ZGUgImNvbW1vbi9wZ19wcm5nLmgiCisjaW5jbHVkZSAiY29tbW9uL3Jl c3RyaWN0ZWRfdG9rZW4uaCIKKyNpbmNsdWRlICJmZV91dGlscy9yZWNvdmVyeV9nZW4uaCIKKyNp bmNsdWRlICJmZV91dGlscy9zaW1wbGVfbGlzdC5oIgorI2luY2x1ZGUgImdldG9wdF9sb25nLmgi CisKKyNkZWZpbmUJREVGQVVMVF9TVUJfUE9SVAkiNTA0MzIiCisKKy8qIENvbW1hbmQtbGluZSBv cHRpb25zICovCitzdHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9wdGlvbnMKK3sKKwljaGFyCSAgICpj b25maWdfZmlsZTsJLyogY29uZmlndXJhdGlvbiBmaWxlICovCisJY2hhcgkgICAqcHViX2Nvbm5p bmZvX3N0cjsJLyogcHVibGlzaGVyIGNvbm5lY3Rpb24gc3RyaW5nICovCisJY2hhcgkgICAqc29j a2V0X2RpcjsJCS8qIGRpcmVjdG9yeSBmb3IgVW5peC1kb21haW4gc29ja2V0LCBpZiBhbnkgKi8K KwljaGFyCSAgICpzdWJfcG9ydDsJCS8qIHN1YnNjcmliZXIgcG9ydCBudW1iZXIgKi8KKwljb25z dCBjaGFyICpzdWJfdXNlcm5hbWU7CS8qIHN1YnNjcmliZXIgdXNlcm5hbWUgKi8KKwlTaW1wbGVT dHJpbmdMaXN0IGRhdGFiYXNlX25hbWVzOwkvKiBsaXN0IG9mIGRhdGFiYXNlIG5hbWVzICovCisJ U2ltcGxlU3RyaW5nTGlzdCBwdWJfbmFtZXM7IC8qIGxpc3Qgb2YgcHVibGljYXRpb24gbmFtZXMg Ki8KKwlTaW1wbGVTdHJpbmdMaXN0IHN1Yl9uYW1lczsgLyogbGlzdCBvZiBzdWJzY3JpcHRpb24g bmFtZXMgKi8KKwlTaW1wbGVTdHJpbmdMaXN0IHJlcGxzbG90X25hbWVzOwkvKiBsaXN0IG9mIHJl cGxpY2F0aW9uIHNsb3QgbmFtZXMgKi8KKwlpbnQJCQlyZWNvdmVyeV90aW1lb3V0OwkvKiBzdG9w IHJlY292ZXJ5IGFmdGVyIHRoaXMgdGltZSAqLworfTsKKworc3RydWN0IExvZ2ljYWxSZXBJbmZv Cit7CisJT2lkCQkJb2lkOwkJCS8qIGRhdGFiYXNlIE9JRCAqLworCWNoYXIJICAgKmRibmFtZTsJ CQkvKiBkYXRhYmFzZSBuYW1lICovCisJY2hhcgkgICAqcHViY29ubmluZm87CS8qIHB1Ymxpc2hl ciBjb25uZWN0aW9uIHN0cmluZyAqLworCWNoYXIJICAgKnN1YmNvbm5pbmZvOwkvKiBzdWJzY3Jp YmVyIGNvbm5lY3Rpb24gc3RyaW5nICovCisJY2hhcgkgICAqcHVibmFtZTsJCS8qIHB1YmxpY2F0 aW9uIG5hbWUgKi8KKwljaGFyCSAgICpzdWJuYW1lOwkJLyogc3Vic2NyaXB0aW9uIG5hbWUgKi8K KwljaGFyCSAgICpyZXBsc2xvdG5hbWU7CS8qIHJlcGxpY2F0aW9uIHNsb3QgbmFtZSAqLworCisJ Ym9vbAkJbWFkZV9yZXBsc2xvdDsJLyogcmVwbGljYXRpb24gc2xvdCB3YXMgY3JlYXRlZCAqLwor CWJvb2wJCW1hZGVfcHVibGljYXRpb247CS8qIHB1YmxpY2F0aW9uIHdhcyBjcmVhdGVkICovCit9 OworCitzdGF0aWMgdm9pZCBjbGVhbnVwX29iamVjdHNfYXRleGl0KHZvaWQpOworc3RhdGljIHZv aWQgdXNhZ2UoKTsKK3N0YXRpYyBjaGFyICpnZXRfYmFzZV9jb25uaW5mbyhjb25zdCBjaGFyICpj b25uaW5mbywgY2hhciAqKmRibmFtZSk7CitzdGF0aWMgY2hhciAqZ2V0X3N1Yl9jb25uaW5mbyhj b25zdCBzdHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9wdGlvbnMgKm9wdCk7CitzdGF0aWMgY2hhciAq Z2V0X2V4ZWNfcGF0aChjb25zdCBjaGFyICphcmd2MCwgY29uc3QgY2hhciAqcHJvZ25hbWUpOwor c3RhdGljIHZvaWQgY2hlY2tfZGF0YV9kaXJlY3RvcnkoY29uc3QgY2hhciAqZGF0YWRpcik7Citz dGF0aWMgY2hhciAqY29uY2F0X2Nvbm5pbmZvX2RibmFtZShjb25zdCBjaGFyICpjb25uaW5mbywg Y29uc3QgY2hhciAqZGJuYW1lKTsKK3N0YXRpYyBzdHJ1Y3QgTG9naWNhbFJlcEluZm8gKnN0b3Jl X3B1Yl9zdWJfaW5mbyhjb25zdCBzdHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9wdGlvbnMgKm9wdCwK KwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwdWJfYmFzZV9jb25uaW5mbywKKwkJCQkJCQkJCQkJ CSBjb25zdCBjaGFyICpzdWJfYmFzZV9jb25uaW5mbyk7CitzdGF0aWMgUEdjb25uICpjb25uZWN0 X2RhdGFiYXNlKGNvbnN0IGNoYXIgKmNvbm5pbmZvLCBib29sIGV4aXRfb25fZXJyb3IpOworc3Rh dGljIHZvaWQgZGlzY29ubmVjdF9kYXRhYmFzZShQR2Nvbm4gKmNvbm4sIGJvb2wgZXhpdF9vbl9l cnJvcik7CitzdGF0aWMgdWludDY0IGdldF9wcmltYXJ5X3N5c2lkKGNvbnN0IGNoYXIgKmNvbm5p bmZvKTsKK3N0YXRpYyB1aW50NjQgZ2V0X3N0YW5kYnlfc3lzaWQoY29uc3QgY2hhciAqZGF0YWRp cik7CitzdGF0aWMgdm9pZCBtb2RpZnlfc3Vic2NyaWJlcl9zeXNpZChjb25zdCBzdHJ1Y3QgQ3Jl YXRlU3Vic2NyaWJlck9wdGlvbnMgKm9wdCk7CitzdGF0aWMgYm9vbCBzZXJ2ZXJfaXNfaW5fcmVj b3ZlcnkoUEdjb25uICpjb25uKTsKK3N0YXRpYyBjaGFyICpnZW5lcmF0ZV9vYmplY3RfbmFtZShQ R2Nvbm4gKmNvbm4pOworc3RhdGljIHZvaWQgY2hlY2tfcHVibGlzaGVyKGNvbnN0IHN0cnVjdCBM b2dpY2FsUmVwSW5mbyAqZGJpbmZvKTsKK3N0YXRpYyBjaGFyICpzZXR1cF9wdWJsaXNoZXIoc3Ry dWN0IExvZ2ljYWxSZXBJbmZvICpkYmluZm8pOworc3RhdGljIHZvaWQgY2hlY2tfc3Vic2NyaWJl cihjb25zdCBzdHJ1Y3QgTG9naWNhbFJlcEluZm8gKmRiaW5mbyk7CitzdGF0aWMgdm9pZCBzZXR1 cF9zdWJzY3JpYmVyKHN0cnVjdCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvLAorCQkJCQkJCSBjb25z dCBjaGFyICpjb25zaXN0ZW50X2xzbik7CitzdGF0aWMgdm9pZCBzZXR1cF9yZWNvdmVyeShjb25z dCBzdHJ1Y3QgTG9naWNhbFJlcEluZm8gKmRiaW5mbywgY29uc3QgY2hhciAqZGF0YWRpciwKKwkJ CQkJCSAgIGNvbnN0IGNoYXIgKmxzbik7CitzdGF0aWMgdm9pZCBkcm9wX3ByaW1hcnlfcmVwbGlj YXRpb25fc2xvdChzdHJ1Y3QgTG9naWNhbFJlcEluZm8gKmRiaW5mbywKKwkJCQkJCQkJCQkgIGNv bnN0IGNoYXIgKnNsb3RuYW1lKTsKK3N0YXRpYyBjaGFyICpjcmVhdGVfbG9naWNhbF9yZXBsaWNh dGlvbl9zbG90KFBHY29ubiAqY29ubiwKKwkJCQkJCQkJCQkJIHN0cnVjdCBMb2dpY2FsUmVwSW5m byAqZGJpbmZvKTsKK3N0YXRpYyB2b2lkIGRyb3BfcmVwbGljYXRpb25fc2xvdChQR2Nvbm4gKmNv bm4sIHN0cnVjdCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvLAorCQkJCQkJCQkgIGNvbnN0IGNoYXIg KnNsb3RfbmFtZSk7CitzdGF0aWMgdm9pZCBwZ19jdGxfc3RhdHVzKGNvbnN0IGNoYXIgKnBnX2N0 bF9jbWQsIGludCByYyk7CitzdGF0aWMgdm9pZCBzdGFydF9zdGFuZGJ5X3NlcnZlcihjb25zdCBz dHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9wdGlvbnMgKm9wdCwKKwkJCQkJCQkJIGJvb2wgcmVzdHJp Y3RlZF9hY2Nlc3MpOworc3RhdGljIHZvaWQgc3RvcF9zdGFuZGJ5X3NlcnZlcihjb25zdCBjaGFy ICpkYXRhZGlyKTsKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX2VuZF9yZWNvdmVyeShjb25zdCBjaGFy ICpjb25uaW5mbywKKwkJCQkJCQkJICBjb25zdCBzdHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9wdGlv bnMgKm9wdCk7CitzdGF0aWMgdm9pZCBjcmVhdGVfcHVibGljYXRpb24oUEdjb25uICpjb25uLCBz dHJ1Y3QgTG9naWNhbFJlcEluZm8gKmRiaW5mbyk7CitzdGF0aWMgdm9pZCBkcm9wX3B1YmxpY2F0 aW9uKFBHY29ubiAqY29ubiwgc3RydWN0IExvZ2ljYWxSZXBJbmZvICpkYmluZm8pOworc3RhdGlj IHZvaWQgY3JlYXRlX3N1YnNjcmlwdGlvbihQR2Nvbm4gKmNvbm4sIGNvbnN0IHN0cnVjdCBMb2dp Y2FsUmVwSW5mbyAqZGJpbmZvKTsKK3N0YXRpYyB2b2lkIHNldF9yZXBsaWNhdGlvbl9wcm9ncmVz cyhQR2Nvbm4gKmNvbm4sIGNvbnN0IHN0cnVjdCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvLAorCQkJ CQkJCQkJIGNvbnN0IGNoYXIgKmxzbik7CitzdGF0aWMgdm9pZCBlbmFibGVfc3Vic2NyaXB0aW9u KFBHY29ubiAqY29ubiwgY29uc3Qgc3RydWN0IExvZ2ljYWxSZXBJbmZvICpkYmluZm8pOworCisj ZGVmaW5lCVVTRUNfUEVSX1NFQwkxMDAwMDAwCisjZGVmaW5lCVdBSVRfSU5URVJWQUwJMQkJLyog MSBzZWNvbmQgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lOworCitzdGF0aWMgY2hh ciAqcHJpbWFyeV9zbG90X25hbWUgPSBOVUxMOworc3RhdGljIGJvb2wgZHJ5X3J1biA9IGZhbHNl OworCitzdGF0aWMgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisKK3N0YXRpYyBzdHJ1Y3QgTG9naWNh bFJlcEluZm8gKmRiaW5mbzsKK3N0YXRpYyBpbnQJbnVtX2RicyA9IDA7CQkvKiBudW1iZXIgb2Yg c3BlY2lmaWVkIGRhdGFiYXNlcyAqLworc3RhdGljIGludAludW1fcHVicyA9IDA7CQkvKiBudW1i ZXIgb2Ygc3BlY2lmaWVkIHB1YmxpY2F0aW9ucyAqLworc3RhdGljIGludAludW1fc3VicyA9IDA7 CQkvKiBudW1iZXIgb2Ygc3BlY2lmaWVkIHN1YnNjcmlwdGlvbnMgKi8KK3N0YXRpYyBpbnQJbnVt X3JlcGxzbG90cyA9IDA7CS8qIG51bWJlciBvZiBzcGVjaWZpZWQgcmVwbGljYXRpb24gc2xvdHMg Ki8KKworc3RhdGljIHBnX3Bybmdfc3RhdGUgcHJuZ19zdGF0ZTsKKworc3RhdGljIGNoYXIgKnBn X2N0bF9wYXRoID0gTlVMTDsKK3N0YXRpYyBjaGFyICpwZ19yZXNldHdhbF9wYXRoID0gTlVMTDsK KworLyogc3RhbmRieSAvIHN1YnNjcmliZXIgZGF0YSBkaXJlY3RvcnkgKi8KK3N0YXRpYyBjaGFy ICpzdWJzY3JpYmVyX2RpciA9IE5VTEw7CisKK3N0YXRpYyBib29sIHJlY292ZXJ5X2VuZGVkID0g ZmFsc2U7CitzdGF0aWMgYm9vbCBzdGFuZGJ5X3J1bm5pbmcgPSBmYWxzZTsKKworZW51bSBXYWl0 UE1SZXN1bHQKK3sKKwlQT1NUTUFTVEVSX1JFQURZLAorCVBPU1RNQVNURVJfU1RJTExfU1RBUlRJ TkcKK307CisKKworLyoKKyAqIENsZWFudXAgb2JqZWN0cyB0aGF0IHdlcmUgY3JlYXRlZCBieSBw Z19jcmVhdGVzdWJzY3JpYmVyIGlmIHRoZXJlIGlzIGFuCisgKiBlcnJvci4KKyAqCisgKiBQdWJs aWNhdGlvbnMgYW5kIHJlcGxpY2F0aW9uIHNsb3RzIGFyZSBjcmVhdGVkIG9uIHByaW1hcnkuIERl cGVuZGluZyBvbiB0aGUKKyAqIHN0ZXAgaXQgZmFpbGVkLCBpdCBzaG91bGQgcmVtb3ZlIHRoZSBh bHJlYWR5IGNyZWF0ZWQgb2JqZWN0cyBpZiBpdCBpcworICogcG9zc2libGUgKHNvbWV0aW1lcyBp dCB3b24ndCB3b3JrIGR1ZSB0byBhIGNvbm5lY3Rpb24gaXNzdWUpLgorICogVGhlcmUgaXMgbm8g Y2xlYW51cCBvbiB0aGUgdGFyZ2V0IHNlcnZlci4gVGhlIHN0ZXBzIG9uIHRoZSB0YXJnZXQgc2Vy dmVyIGFyZQorICogZXhlY3V0ZWQgKmFmdGVyKiBwcm9tb3Rpb24sIGhlbmNlLCBhdCB0aGlzIHBv aW50LCBhIGZhaWx1cmUgbWVhbnMgcmVjcmVhdGUKKyAqIHRoZSBwaHlzaWNhbCByZXBsaWNhIGFu ZCBzdGFydCBhZ2Fpbi4KKyAqLworc3RhdGljIHZvaWQKK2NsZWFudXBfb2JqZWN0c19hdGV4aXQo dm9pZCkKK3sKKwlpZiAoc3VjY2VzcykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiB0aGUgc2Vy dmVyIGlzIHByb21vdGVkLCB0aGVyZSBpcyBubyB3YXkgdG8gdXNlIHRoZSBjdXJyZW50IHNldHVw CisJICogYWdhaW4uIFdhcm4gdGhlIHVzZXIgdGhhdCBhIG5ldyByZXBsaWNhdGlvbiBzZXR1cCBz aG91bGQgYmUgZG9uZSBiZWZvcmUKKwkgKiB0cnlpbmcgYWdhaW4uCisJICovCisJaWYgKHJlY292 ZXJ5X2VuZGVkKQorCXsKKwkJcGdfbG9nX3dhcm5pbmcoImZhaWxlZCBhZnRlciB0aGUgZW5kIG9m IHJlY292ZXJ5Iik7CisJCXBnX2xvZ193YXJuaW5nX2hpbnQoIlRoZSB0YXJnZXQgc2VydmVyIGNh bm5vdCBiZSB1c2VkIGFzIGEgcGh5c2ljYWwgcmVwbGljYSBhbnltb3JlLiAgIgorCQkJCQkJCSJZ b3UgbXVzdCByZWNyZWF0ZSB0aGUgcGh5c2ljYWwgcmVwbGljYSBiZWZvcmUgY29udGludWluZy4i KTsKKwl9CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9kYnM7IGkrKykKKwl7CisJCWlmIChk YmluZm9baV0ubWFkZV9wdWJsaWNhdGlvbiB8fCBkYmluZm9baV0ubWFkZV9yZXBsc2xvdCkKKwkJ eworCQkJUEdjb25uCSAgICpjb25uOworCisJCQljb25uID0gY29ubmVjdF9kYXRhYmFzZShkYmlu Zm9baV0ucHViY29ubmluZm8sIGZhbHNlKTsKKwkJCWlmIChjb25uICE9IE5VTEwpCisJCQl7CisJ CQkJaWYgKGRiaW5mb1tpXS5tYWRlX3B1YmxpY2F0aW9uKQorCQkJCQlkcm9wX3B1YmxpY2F0aW9u KGNvbm4sICZkYmluZm9baV0pOworCQkJCWlmIChkYmluZm9baV0ubWFkZV9yZXBsc2xvdCkKKwkJ CQkJZHJvcF9yZXBsaWNhdGlvbl9zbG90KGNvbm4sICZkYmluZm9baV0sIGRiaW5mb1tpXS5yZXBs c2xvdG5hbWUpOworCQkJCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubiwgZmFsc2UpOworCQkJfQor CQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogSWYgYSBjb25uZWN0aW9uIGNvdWxkIG5vdCBi ZSBlc3RhYmxpc2hlZCwgaW5mb3JtIHRoZSB1c2VyCisJCQkJICogdGhhdCBzb21lIG9iamVjdHMg d2VyZSBsZWZ0IG9uIHByaW1hcnkgYW5kIHNob3VsZCBiZQorCQkJCSAqIHJlbW92ZWQgYmVmb3Jl IHRyeWluZyBhZ2Fpbi4KKwkJCQkgKi8KKwkJCQlpZiAoZGJpbmZvW2ldLm1hZGVfcHVibGljYXRp b24pCisJCQkJeworCQkJCQlwZ19sb2dfd2FybmluZygicHVibGljYXRpb24gXCIlc1wiIGluIGRh dGFiYXNlIFwiJXNcIiBvbiBwcmltYXJ5IG1pZ2h0IGJlIGxlZnQgYmVoaW5kIiwKKwkJCQkJCQkJ ICAgZGJpbmZvW2ldLnB1Ym5hbWUsIGRiaW5mb1tpXS5kYm5hbWUpOworCQkJCQlwZ19sb2dfd2Fy bmluZ19oaW50KCJDb25zaWRlciBkcm9wcGluZyB0aGlzIHB1YmxpY2F0aW9uIGJlZm9yZSB0cnlp bmcgYWdhaW4uIik7CisJCQkJfQorCQkJCWlmIChkYmluZm9baV0ubWFkZV9yZXBsc2xvdCkKKwkJ CQl7CisJCQkJCXBnX2xvZ193YXJuaW5nKCJyZXBsaWNhdGlvbiBzbG90IFwiJXNcIiBpbiBkYXRh YmFzZSBcIiVzXCIgb24gcHJpbWFyeSBtaWdodCBiZSBsZWZ0IGJlaGluZCIsCisJCQkJCQkJCSAg IGRiaW5mb1tpXS5yZXBsc2xvdG5hbWUsIGRiaW5mb1tpXS5kYm5hbWUpOworCQkJCQlwZ19sb2df d2FybmluZ19oaW50KCJEcm9wIHRoaXMgcmVwbGljYXRpb24gc2xvdCBzb29uIHRvIGF2b2lkIHJl dGVudGlvbiBvZiBXQUwgZmlsZXMuIik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJaWYgKHN0 YW5kYnlfcnVubmluZykKKwkJc3RvcF9zdGFuZGJ5X3NlcnZlcihzdWJzY3JpYmVyX2Rpcik7Cit9 CisKK3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworCXByaW50ZihfKCIlcyBjcmVhdGVzIGEg bmV3IGxvZ2ljYWwgcmVwbGljYSBmcm9tIGEgc3RhbmRieSBzZXJ2ZXIuXG5cbiIpLAorCQkgICBw cm9nbmFtZSk7CisJcHJpbnRmKF8oIlVzYWdlOlxuIikpOworCXByaW50ZihfKCIgICVzIFtPUFRJ T05dLi4uXG4iKSwgcHJvZ25hbWUpOworCXByaW50ZihfKCJcbk9wdGlvbnM6XG4iKSk7CisJcHJp bnRmKF8oIiAtZCwgLS1kYXRhYmFzZT1EQk5BTUUgICAgICAgICAgICAgICBkYXRhYmFzZSB0byBj cmVhdGUgYSBzdWJzY3JpcHRpb25cbiIpKTsKKwlwcmludGYoXygiIC1ELCAtLXBnZGF0YT1EQVRB RElSICAgICAgICAgICAgICAgIGxvY2F0aW9uIGZvciB0aGUgc3Vic2NyaWJlciBkYXRhIGRpcmVj dG9yeVxuIikpOworCXByaW50ZihfKCIgLW4sIC0tZHJ5LXJ1biAgICAgICAgICAgICAgICAgICAg ICAgZHJ5IHJ1biwganVzdCBzaG93IHdoYXQgd291bGQgYmUgZG9uZVxuIikpOworCXByaW50Zihf KCIgLXAsIC0tc3Vic2NyaWJlci1wb3J0PVBPUlQgICAgICAgICAgc3Vic2NyaWJlciBwb3J0IG51 bWJlciAoZGVmYXVsdCAlcylcbiIpLCBERUZBVUxUX1NVQl9QT1JUKTsKKwlwcmludGYoXygiIC1Q LCAtLXB1Ymxpc2hlci1zZXJ2ZXI9Q09OTlNUUiAgICAgIHB1Ymxpc2hlciBjb25uZWN0aW9uIHN0 cmluZ1xuIikpOworCXByaW50ZihfKCIgLXMsIC0tc29ja2V0LWRpcmVjdG9yeT1ESVIgICAgICAg ICAgc29ja2V0IGRpcmVjdG9yeSB0byB1c2UgKGRlZmF1bHQgY3VycmVudCBkaXJlY3RvcnkpXG4i KSk7CisJcHJpbnRmKF8oIiAtdCwgLS1yZWNvdmVyeS10aW1lb3V0PVNFQ1MgICAgICAgICBzZWNv bmRzIHRvIHdhaXQgZm9yIHJlY292ZXJ5IHRvIGVuZFxuIikpOworCXByaW50ZihfKCIgLVUsIC0t c3Vic2NyaWJlci11c2VybmFtZT1OQU1FICAgICAgc3Vic2NyaWJlciB1c2VybmFtZVxuIikpOwor CXByaW50ZihfKCIgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHZl cmJvc2UgbWVzc2FnZXNcbiIpKTsKKwlwcmludGYoXygiICAgICAtLWNvbmZpZy1maWxlPUZJTEVO QU1FICAgICAgICAgIHVzZSBzcGVjaWZpZWQgbWFpbiBzZXJ2ZXIgY29uZmlndXJhdGlvblxuIgor CQkJICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSB3aGVuIHJ1bm5p bmcgdGFyZ2V0IGNsdXN0ZXJcbiIpKTsKKwlwcmludGYoXygiICAgICAtLXB1YmxpY2F0aW9uPU5B TUUgICAgICAgICAgICAgIHB1YmxpY2F0aW9uIG5hbWVcbiIpKTsKKwlwcmludGYoXygiICAgICAt LXJlcGxpY2F0aW9uLXNsb3Q9TkFNRSAgICAgICAgIHJlcGxpY2F0aW9uIHNsb3QgbmFtZVxuIikp OworCXByaW50ZihfKCIgICAgIC0tc3Vic2NyaXB0aW9uPU5BTUUgICAgICAgICAgICAgc3Vic2Ny aXB0aW9uIG5hbWVcbiIpKTsKKwlwcmludGYoXygiIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAg ICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVuIGV4aXRcbiIpKTsKKwlw cmludGYoXygiIC0/LCAtLWhlbHAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3cgdGhpcyBo ZWxwLCB0aGVuIGV4aXRcbiIpKTsKKwlwcmludGYoXygiXG5SZXBvcnQgYnVncyB0byA8JXM+Llxu IiksIFBBQ0tBR0VfQlVHUkVQT1JUKTsKKwlwcmludGYoXygiJXMgaG9tZSBwYWdlOiA8JXM+XG4i KSwgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VSTCk7Cit9CisKKy8qCisgKiBWYWxpZGF0ZSBhIGNv bm5lY3Rpb24gc3RyaW5nLiBSZXR1cm5zIGEgYmFzZSBjb25uZWN0aW9uIHN0cmluZyB0aGF0IGlz IGEKKyAqIGNvbm5lY3Rpb24gc3RyaW5nIHdpdGhvdXQgYSBkYXRhYmFzZSBuYW1lLgorICoKKyAq IFNpbmNlIHdlIG1pZ2h0IHByb2Nlc3MgbXVsdGlwbGUgZGF0YWJhc2VzLCBlYWNoIGRhdGFiYXNl IG5hbWUgd2lsbCBiZQorICogYXBwZW5kZWQgdG8gdGhpcyBiYXNlIGNvbm5lY3Rpb24gc3RyaW5n IHRvIHByb3ZpZGUgYSBmaW5hbCBjb25uZWN0aW9uCisgKiBzdHJpbmcuIElmIHRoZSBzZWNvbmQg YXJndW1lbnQgKGRibmFtZSkgaXMgbm90IG51bGwsIHJldHVybnMgZGJuYW1lIGlmIHRoZQorICog cHJvdmlkZWQgY29ubmVjdGlvbiBzdHJpbmcgY29udGFpbnMgaXQuIElmIG9wdGlvbiAtLWRhdGFi YXNlIGlzIG5vdAorICogcHJvdmlkZWQsIHVzZXMgZGJuYW1lIGFzIHRoZSBvbmx5IGRhdGFiYXNl IHRvIHNldHVwIHRoZSBsb2dpY2FsIHJlcGxpY2EuCisgKgorICogSXQgaXMgdGhlIGNhbGxlcidz IHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgdGhlIHJldHVybmVkIGNvbm5lY3Rpb24gc3RyaW5nIGFu ZAorICogZGJuYW1lLgorICovCitzdGF0aWMgY2hhciAqCitnZXRfYmFzZV9jb25uaW5mbyhjb25z dCBjaGFyICpjb25uaW5mbywgY2hhciAqKmRibmFtZSkKK3sKKwlQUUV4cEJ1ZmZlciBidWYgPSBj cmVhdGVQUUV4cEJ1ZmZlcigpOworCVBRY29ubmluZm9PcHRpb24gKmNvbm5fb3B0cyA9IE5VTEw7 CisJUFFjb25uaW5mb09wdGlvbiAqY29ubl9vcHQ7CisJY2hhcgkgICAqZXJybXNnID0gTlVMTDsK KwljaGFyCSAgICpyZXQ7CisJaW50CQkJaTsKKworCWNvbm5fb3B0cyA9IFBRY29ubmluZm9QYXJz ZShjb25uaW5mbywgJmVycm1zZyk7CisJaWYgKGNvbm5fb3B0cyA9PSBOVUxMKQorCXsKKwkJcGdf bG9nX2Vycm9yKCJjb3VsZCBub3QgcGFyc2UgY29ubmVjdGlvbiBzdHJpbmc6ICVzIiwgZXJybXNn KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaSA9IDA7CisJZm9yIChjb25uX29wdCA9IGNvbm5f b3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsgY29ubl9vcHQrKykKKwl7CisJCWlmIChz dHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJkYm5hbWUiKSA9PSAwICYmIGNvbm5fb3B0LT52YWwg IT0gTlVMTCkKKwkJeworCQkJaWYgKGRibmFtZSkKKwkJCQkqZGJuYW1lID0gcGdfc3RyZHVwKGNv bm5fb3B0LT52YWwpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoY29ubl9vcHQtPnZhbCAh PSBOVUxMICYmIGNvbm5fb3B0LT52YWxbMF0gIT0gJ1wwJykKKwkJeworCQkJaWYgKGkgPiAwKQor CQkJCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihidWYsICcgJyk7CisJCQlhcHBlbmRQUUV4cEJ1ZmZl cihidWYsICIlcz0lcyIsIGNvbm5fb3B0LT5rZXl3b3JkLCBjb25uX29wdC0+dmFsKTsKKwkJCWkr KzsKKwkJfQorCX0KKworCXJldCA9IHBnX3N0cmR1cChidWYtPmRhdGEpOworCisJZGVzdHJveVBR RXhwQnVmZmVyKGJ1Zik7CisJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBCdWlsZCBhIHN1YnNjcmliZXIgY29ubmVjdGlvbiBzdHJpbmcuIE9u bHkgYSBmZXcgcGFyYW1ldGVycyBhcmUgc3VwcG9ydGVkCisgKiBzaW5jZSBpdCBzdGFydHMgYSBz ZXJ2ZXIgd2l0aCByZXN0cmljdGVkIGFjY2Vzcy4KKyAqLworc3RhdGljIGNoYXIgKgorZ2V0X3N1 Yl9jb25uaW5mbyhjb25zdCBzdHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9wdGlvbnMgKm9wdCkKK3sK KwlQUUV4cEJ1ZmZlciBidWYgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCWNoYXIJICAgKnJldDsK KworCWFwcGVuZFBRRXhwQnVmZmVyKGJ1ZiwgInBvcnQ9JXMiLCBvcHQtPnN1Yl9wb3J0KTsKKyNp ZiAhZGVmaW5lZChXSU4zMikKKwlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICIgaG9zdD0lcyIsIG9w dC0+c29ja2V0X2Rpcik7CisjZW5kaWYKKwlpZiAob3B0LT5zdWJfdXNlcm5hbWUgIT0gTlVMTCkK KwkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiIHVzZXI9JXMiLCBvcHQtPnN1Yl91c2VybmFtZSk7 CisJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiIGZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWU9JXMi LCBwcm9nbmFtZSk7CisKKwlyZXQgPSBwZ19zdHJkdXAoYnVmLT5kYXRhKTsKKworCWRlc3Ryb3lQ UUV4cEJ1ZmZlcihidWYpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFZlcmlmeSBpZiBh IFBvc3RncmVTUUwgYmluYXJ5IChwcm9nbmFtZSkgaXMgYXZhaWxhYmxlIGluIHRoZSBzYW1lIGRp cmVjdG9yeSBhcworICogcGdfY3JlYXRlc3Vic2NyaWJlciBhbmQgaXQgaGFzIHRoZSBzYW1lIHZl cnNpb24uICBJdCByZXR1cm5zIHRoZSBhYnNvbHV0ZQorICogcGF0aCBvZiB0aGUgcHJvZ25hbWUu CisgKi8KK3N0YXRpYyBjaGFyICoKK2dldF9leGVjX3BhdGgoY29uc3QgY2hhciAqYXJndjAsIGNv bnN0IGNoYXIgKnByb2duYW1lKQoreworCWNoYXIJICAgKnZlcnNpb25zdHI7CisJY2hhcgkgICAq ZXhlY19wYXRoOworCWludAkJCXJldDsKKworCXZlcnNpb25zdHIgPSBwc3ByaW50ZigiJXMgKFBv c3RncmVTUUwpICVzXG4iLCBwcm9nbmFtZSwgUEdfVkVSU0lPTik7CisJZXhlY19wYXRoID0gcGdf bWFsbG9jKE1BWFBHUEFUSCk7CisJcmV0ID0gZmluZF9vdGhlcl9leGVjKGFyZ3YwLCBwcm9nbmFt ZSwgdmVyc2lvbnN0ciwgZXhlY19wYXRoKTsKKworCWlmIChyZXQgPCAwKQorCXsKKwkJY2hhcgkJ ZnVsbF9wYXRoW01BWFBHUEFUSF07CisKKwkJaWYgKGZpbmRfbXlfZXhlYyhhcmd2MCwgZnVsbF9w YXRoKSA8IDApCisJCQlzdHJsY3B5KGZ1bGxfcGF0aCwgcHJvZ25hbWUsIHNpemVvZihmdWxsX3Bh dGgpKTsKKworCQlpZiAocmV0ID09IC0xKQorCQkJcGdfZmF0YWwoInByb2dyYW0gXCIlc1wiIGlz IG5lZWRlZCBieSAlcyBidXQgd2FzIG5vdCBmb3VuZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMg XCIlc1wiIiwKKwkJCQkJIHByb2duYW1lLCAicGdfY3JlYXRlc3Vic2NyaWJlciIsIGZ1bGxfcGF0 aCk7CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJwcm9ncmFtIFwiJXNcIiB3YXMgZm91bmQgYnkgXCIl c1wiIGJ1dCB3YXMgbm90IHRoZSBzYW1lIHZlcnNpb24gYXMgJXMiLAorCQkJCQkgcHJvZ25hbWUs IGZ1bGxfcGF0aCwgInBnX2NyZWF0ZXN1YnNjcmliZXIiKTsKKwl9CisKKwlwZ19sb2dfZGVidWco IiVzIHBhdGggaXM6ICAlcyIsIHByb2duYW1lLCBleGVjX3BhdGgpOworCisJcmV0dXJuIGV4ZWNf cGF0aDsKK30KKworLyoKKyAqIElzIGl0IGEgY2x1c3RlciBkaXJlY3Rvcnk/IFRoZXNlIGFyZSBw cmVsaW1pbmFyeSBjaGVja3MuIEl0IGlzIGZhciBmcm9tCisgKiBtYWtpbmcgYW4gYWNjdXJhdGUg Y2hlY2suIElmIGl0IGlzIG5vdCBhIGNsb25lIGZyb20gdGhlIHB1Ymxpc2hlciwgaXQgd2lsbAor ICogZXZlbnR1YWxseSBmYWlsIGluIGEgZnV0dXJlIHN0ZXAuCisgKi8KK3N0YXRpYyB2b2lkCitj aGVja19kYXRhX2RpcmVjdG9yeShjb25zdCBjaGFyICpkYXRhZGlyKQoreworCXN0cnVjdCBzdGF0 IHN0YXRidWY7CisJY2hhcgkJdmVyc2lvbmZpbGVbTUFYUEdQQVRIXTsKKworCXBnX2xvZ19pbmZv KCJjaGVja2luZyBpZiBkaXJlY3RvcnkgXCIlc1wiIGlzIGEgY2x1c3RlciBkYXRhIGRpcmVjdG9y eSIsCisJCQkJZGF0YWRpcik7CisKKwlpZiAoc3RhdChkYXRhZGlyLCAmc3RhdGJ1ZikgIT0gMCkK Kwl7CisJCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCQlwZ19mYXRhbCgiZGF0YSBkaXJlY3Rvcnkg XCIlc1wiIGRvZXMgbm90IGV4aXN0IiwgZGF0YWRpcik7CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJj b3VsZCBub3QgYWNjZXNzIGRpcmVjdG9yeSBcIiVzXCI6ICVzIiwgZGF0YWRpciwKKwkJCQkJIHN0 cmVycm9yKGVycm5vKSk7CisJfQorCisJc25wcmludGYodmVyc2lvbmZpbGUsIE1BWFBHUEFUSCwg IiVzL1BHX1ZFUlNJT04iLCBkYXRhZGlyKTsKKwlpZiAoc3RhdCh2ZXJzaW9uZmlsZSwgJnN0YXRi dWYpICE9IDAgJiYgZXJybm8gPT0gRU5PRU5UKQorCXsKKwkJcGdfZmF0YWwoImRpcmVjdG9yeSBc IiVzXCIgaXMgbm90IGEgZGF0YWJhc2UgY2x1c3RlciBkaXJlY3RvcnkiLAorCQkJCSBkYXRhZGly KTsKKwl9Cit9CisKKy8qCisgKiBBcHBlbmQgZGF0YWJhc2UgbmFtZSBpbnRvIGEgYmFzZSBjb25u ZWN0aW9uIHN0cmluZy4KKyAqCisgKiBkYm5hbWUgaXMgdGhlIG9ubHkgcGFyYW1ldGVyIHRoYXQg Y2hhbmdlcyBzbyBpdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGJhc2UKKyAqIGNvbm5lY3Rpb24g c3RyaW5nLiBUaGlzIGZ1bmN0aW9uIGNvbmNhdGVuYXRlcyBkYm5hbWUgdG8gYnVpbGQgYSAicmVh bCIKKyAqIGNvbm5lY3Rpb24gc3RyaW5nLgorICovCitzdGF0aWMgY2hhciAqCitjb25jYXRfY29u bmluZm9fZGJuYW1lKGNvbnN0IGNoYXIgKmNvbm5pbmZvLCBjb25zdCBjaGFyICpkYm5hbWUpCit7 CisJUFFFeHBCdWZmZXIgYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwljaGFyCSAgICpyZXQ7 CisKKwlBc3NlcnQoY29ubmluZm8gIT0gTlVMTCk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cihi dWYsIGNvbm5pbmZvKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICIgZGJuYW1lPSVzIiwgZGJu YW1lKTsKKworCXJldCA9IHBnX3N0cmR1cChidWYtPmRhdGEpOworCWRlc3Ryb3lQUUV4cEJ1ZmZl cihidWYpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFN0b3JlIHB1YmxpY2F0aW9uIGFu ZCBzdWJzY3JpcHRpb24gaW5mb3JtYXRpb24uCisgKgorICogSWYgcHVibGljYXRpb24sIHJlcGxp Y2F0aW9uIHNsb3QgYW5kIHN1YnNjcmlwdGlvbiBuYW1lcyB3ZXJlIHNwZWNpZmllZCwKKyAqIHN0 b3JlIGl0IGhlcmUuIE90aGVyd2lzZSwgYSBnZW5lcmF0ZWQgbmFtZSB3aWxsIGJlIGFzc2lnbmVk IHRvIHRoZSBvYmplY3QgaW4KKyAqIHNldHVwX3B1Ymxpc2hlcigpLgorICovCitzdGF0aWMgc3Ry dWN0IExvZ2ljYWxSZXBJbmZvICoKK3N0b3JlX3B1Yl9zdWJfaW5mbyhjb25zdCBzdHJ1Y3QgQ3Jl YXRlU3Vic2NyaWJlck9wdGlvbnMgKm9wdCwKKwkJCQkgICBjb25zdCBjaGFyICpwdWJfYmFzZV9j b25uaW5mbywKKwkJCQkgICBjb25zdCBjaGFyICpzdWJfYmFzZV9jb25uaW5mbykKK3sKKwlzdHJ1 Y3QgTG9naWNhbFJlcEluZm8gKmRiaW5mbzsKKwlTaW1wbGVTdHJpbmdMaXN0Q2VsbCAqcHViY2Vs bCA9IE5VTEw7CisJU2ltcGxlU3RyaW5nTGlzdENlbGwgKnN1YmNlbGwgPSBOVUxMOworCVNpbXBs ZVN0cmluZ0xpc3RDZWxsICpyZXBsc2xvdGNlbGwgPSBOVUxMOworCWludAkJCWkgPSAwOworCisJ ZGJpbmZvID0gcGdfbWFsbG9jX2FycmF5KHN0cnVjdCBMb2dpY2FsUmVwSW5mbywgbnVtX2Ricyk7 CisKKwlpZiAobnVtX3B1YnMgPiAwKQorCQlwdWJjZWxsID0gb3B0LT5wdWJfbmFtZXMuaGVhZDsK KwlpZiAobnVtX3N1YnMgPiAwKQorCQlzdWJjZWxsID0gb3B0LT5zdWJfbmFtZXMuaGVhZDsKKwlp ZiAobnVtX3JlcGxzbG90cyA+IDApCisJCXJlcGxzbG90Y2VsbCA9IG9wdC0+cmVwbHNsb3RfbmFt ZXMuaGVhZDsKKworCWZvciAoU2ltcGxlU3RyaW5nTGlzdENlbGwgKmNlbGwgPSBvcHQtPmRhdGFi YXNlX25hbWVzLmhlYWQ7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0KQorCXsKKwkJY2hhcgkgICAq Y29ubmluZm87CisKKwkJLyogRmlsbCBwdWJsaXNoZXIgYXR0cmlidXRlcyAqLworCQljb25uaW5m byA9IGNvbmNhdF9jb25uaW5mb19kYm5hbWUocHViX2Jhc2VfY29ubmluZm8sIGNlbGwtPnZhbCk7 CisJCWRiaW5mb1tpXS5wdWJjb25uaW5mbyA9IGNvbm5pbmZvOworCQlkYmluZm9baV0uZGJuYW1l ID0gY2VsbC0+dmFsOworCQlpZiAobnVtX3B1YnMgPiAwKQorCQkJZGJpbmZvW2ldLnB1Ym5hbWUg PSBwdWJjZWxsLT52YWw7CisJCWVsc2UKKwkJCWRiaW5mb1tpXS5wdWJuYW1lID0gTlVMTDsKKwkJ aWYgKG51bV9yZXBsc2xvdHMgPiAwKQorCQkJZGJpbmZvW2ldLnJlcGxzbG90bmFtZSA9IHJlcGxz bG90Y2VsbC0+dmFsOworCQllbHNlCisJCQlkYmluZm9baV0ucmVwbHNsb3RuYW1lID0gTlVMTDsK KwkJZGJpbmZvW2ldLm1hZGVfcmVwbHNsb3QgPSBmYWxzZTsKKwkJZGJpbmZvW2ldLm1hZGVfcHVi bGljYXRpb24gPSBmYWxzZTsKKwkJLyogRmlsbCBzdWJzY3JpYmVyIGF0dHJpYnV0ZXMgKi8KKwkJ Y29ubmluZm8gPSBjb25jYXRfY29ubmluZm9fZGJuYW1lKHN1Yl9iYXNlX2Nvbm5pbmZvLCBjZWxs LT52YWwpOworCQlkYmluZm9baV0uc3ViY29ubmluZm8gPSBjb25uaW5mbzsKKwkJaWYgKG51bV9z dWJzID4gMCkKKwkJCWRiaW5mb1tpXS5zdWJuYW1lID0gc3ViY2VsbC0+dmFsOworCQllbHNlCisJ CQlkYmluZm9baV0uc3VibmFtZSA9IE5VTEw7CisJCS8qIE90aGVyIGZpZWxkcyB3aWxsIGJlIGZp bGxlZCBsYXRlciAqLworCisJCXBnX2xvZ19kZWJ1ZygicHVibGlzaGVyKCVkKTogcHVibGljYXRp b246ICVzIDsgcmVwbGljYXRpb24gc2xvdDogJXMgOyBjb25uZWN0aW9uIHN0cmluZzogJXMiLCBp LAorCQkJCQkgZGJpbmZvW2ldLnB1Ym5hbWUgPyBkYmluZm9baV0ucHVibmFtZSA6ICIoYXV0byki LAorCQkJCQkgZGJpbmZvW2ldLnJlcGxzbG90bmFtZSA/IGRiaW5mb1tpXS5yZXBsc2xvdG5hbWUg OiAiKGF1dG8pIiwKKwkJCQkJIGRiaW5mb1tpXS5wdWJjb25uaW5mbyk7CisJCXBnX2xvZ19kZWJ1 Zygic3Vic2NyaWJlciglZCk6IHN1YnNjcmlwdGlvbjogJXMgOyBjb25uZWN0aW9uIHN0cmluZzog JXMiLCBpLAorCQkJCQkgZGJpbmZvW2ldLnN1Ym5hbWUgPyBkYmluZm9baV0uc3VibmFtZSA6ICIo YXV0bykiLAorCQkJCQkgZGJpbmZvW2ldLnN1YmNvbm5pbmZvKTsKKworCQlpZiAobnVtX3B1YnMg PiAwKQorCQkJcHViY2VsbCA9IHB1YmNlbGwtPm5leHQ7CisJCWlmIChudW1fc3VicyA+IDApCisJ CQlzdWJjZWxsID0gc3ViY2VsbC0+bmV4dDsKKwkJaWYgKG51bV9yZXBsc2xvdHMgPiAwKQorCQkJ cmVwbHNsb3RjZWxsID0gcmVwbHNsb3RjZWxsLT5uZXh0OworCisJCWkrKzsKKwl9CisKKwlyZXR1 cm4gZGJpbmZvOworfQorCisvKgorICogT3BlbiBhIG5ldyBjb25uZWN0aW9uLiBJZiBleGl0X29u X2Vycm9yIGlzIHRydWUsIGl0IGhhcyBhbiB1bmRlc2lyZWQKKyAqIGNvbmRpdGlvbiBhbmQgaXQg c2hvdWxkIGV4aXQgaW1tZWRpYXRlbHkuCisgKi8KK3N0YXRpYyBQR2Nvbm4gKgorY29ubmVjdF9k YXRhYmFzZShjb25zdCBjaGFyICpjb25uaW5mbywgYm9vbCBleGl0X29uX2Vycm9yKQoreworCVBH Y29ubgkgICAqY29ubjsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwljb25uID0gUFFjb25uZWN0ZGIo Y29ubmluZm8pOworCWlmIChQUXN0YXR1cyhjb25uKSAhPSBDT05ORUNUSU9OX09LKQorCXsKKwkJ cGdfbG9nX2Vycm9yKCJjb25uZWN0aW9uIHRvIGRhdGFiYXNlIGZhaWxlZDogJXMiLAorCQkJCQkg UFFlcnJvck1lc3NhZ2UoY29ubikpOworCQlpZiAoZXhpdF9vbl9lcnJvcikKKwkJCWV4aXQoMSk7 CisKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogU2VjdXJlIHNlYXJjaF9wYXRoICovCisJcmVz ID0gUFFleGVjKGNvbm4sIEFMV0FZU19TRUNVUkVfU0VBUkNIX1BBVEhfU1FMKTsKKwlpZiAoUFFy ZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJeworCQlwZ19sb2dfZXJyb3Io ImNvdWxkIG5vdCBjbGVhciBzZWFyY2hfcGF0aDogJXMiLAorCQkJCQkgUFFyZXN1bHRFcnJvck1l c3NhZ2UocmVzKSk7CisJCWlmIChleGl0X29uX2Vycm9yKQorCQkJZXhpdCgxKTsKKworCQlyZXR1 cm4gTlVMTDsKKwl9CisJUFFjbGVhcihyZXMpOworCisJcmV0dXJuIGNvbm47Cit9CisKKy8qCisg KiBDbG9zZSB0aGUgY29ubmVjdGlvbi4gSWYgZXhpdF9vbl9lcnJvciBpcyB0cnVlLCBpdCBoYXMg YW4gdW5kZXNpcmVkCisgKiBjb25kaXRpb24gYW5kIGl0IHNob3VsZCBleGl0IGltbWVkaWF0ZWx5 LgorICovCitzdGF0aWMgdm9pZAorZGlzY29ubmVjdF9kYXRhYmFzZShQR2Nvbm4gKmNvbm4sIGJv b2wgZXhpdF9vbl9lcnJvcikKK3sKKwlBc3NlcnQoY29ubiAhPSBOVUxMKTsKKworCVBRZmluaXNo KGNvbm4pOworCisJaWYgKGV4aXRfb25fZXJyb3IpCisJCWV4aXQoMSk7Cit9CisKKy8qCisgKiBP YnRhaW4gdGhlIHN5c3RlbSBpZGVudGlmaWVyIHVzaW5nIHRoZSBwcm92aWRlZCBjb25uZWN0aW9u LiBJdCB3aWxsIGJlIHVzZWQKKyAqIHRvIGNvbXBhcmUgaWYgYSBkYXRhIGRpcmVjdG9yeSBpcyBh IGNsb25lIG9mIGFub3RoZXIgb25lLgorICovCitzdGF0aWMgdWludDY0CitnZXRfcHJpbWFyeV9z eXNpZChjb25zdCBjaGFyICpjb25uaW5mbykKK3sKKwlQR2Nvbm4JICAgKmNvbm47CisJUEdyZXN1 bHQgICAqcmVzOworCXVpbnQ2NAkJc3lzaWQ7CisKKwlwZ19sb2dfaW5mbygiZ2V0dGluZyBzeXN0 ZW0gaWRlbnRpZmllciBmcm9tIHB1Ymxpc2hlciIpOworCisJY29ubiA9IGNvbm5lY3RfZGF0YWJh c2UoY29ubmluZm8sIHRydWUpOworCisJcmVzID0gUFFleGVjKGNvbm4sICJTRUxFQ1Qgc3lzdGVt X2lkZW50aWZpZXIgRlJPTSBwZ19jYXRhbG9nLnBnX2NvbnRyb2xfc3lzdGVtKCkiKTsKKwlpZiAo UFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJeworCQlwZ19sb2dfZXJy b3IoImNvdWxkIG5vdCBnZXQgc3lzdGVtIGlkZW50aWZpZXI6ICVzIiwKKwkJCQkJIFBRcmVzdWx0 RXJyb3JNZXNzYWdlKHJlcykpOworCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4sIHRydWUpOwor CX0KKwlpZiAoUFFudHVwbGVzKHJlcykgIT0gMSkKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQg bm90IGdldCBzeXN0ZW0gaWRlbnRpZmllcjogZ290ICVkIHJvd3MsIGV4cGVjdGVkICVkIHJvdyIs CisJCQkJCSBQUW50dXBsZXMocmVzKSwgMSk7CisJCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubiwg dHJ1ZSk7CisJfQorCisJc3lzaWQgPSBzdHJ0b3U2NChQUWdldHZhbHVlKHJlcywgMCwgMCksIE5V TEwsIDEwKTsKKworCXBnX2xvZ19pbmZvKCJzeXN0ZW0gaWRlbnRpZmllciBpcyAlbGx1IG9uIHB1 Ymxpc2hlciIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgc3lzaWQpOworCisJUFFjbGVhcihy ZXMpOworCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubiwgZmFsc2UpOworCisJcmV0dXJuIHN5c2lk OworfQorCisvKgorICogT2J0YWluIHRoZSBzeXN0ZW0gaWRlbnRpZmllciBmcm9tIGNvbnRyb2wg ZmlsZS4gSXQgd2lsbCBiZSB1c2VkIHRvIGNvbXBhcmUKKyAqIGlmIGEgZGF0YSBkaXJlY3Rvcnkg aXMgYSBjbG9uZSBvZiBhbm90aGVyIG9uZS4gVGhpcyByb3V0aW5lIGlzIHVzZWQgbG9jYWxseQor ICogYW5kIGF2b2lkcyBhIGNvbm5lY3Rpb24uCisgKi8KK3N0YXRpYyB1aW50NjQKK2dldF9zdGFu ZGJ5X3N5c2lkKGNvbnN0IGNoYXIgKmRhdGFkaXIpCit7CisJQ29udHJvbEZpbGVEYXRhICpjZjsK Kwlib29sCQljcmNfb2s7CisJdWludDY0CQlzeXNpZDsKKworCXBnX2xvZ19pbmZvKCJnZXR0aW5n IHN5c3RlbSBpZGVudGlmaWVyIGZyb20gc3Vic2NyaWJlciIpOworCisJY2YgPSBnZXRfY29udHJv bGZpbGUoZGF0YWRpciwgJmNyY19vayk7CisJaWYgKCFjcmNfb2spCisJCXBnX2ZhdGFsKCJjb250 cm9sIGZpbGUgYXBwZWFycyB0byBiZSBjb3JydXB0Iik7CisKKwlzeXNpZCA9IGNmLT5zeXN0ZW1f aWRlbnRpZmllcjsKKworCXBnX2xvZ19pbmZvKCJzeXN0ZW0gaWRlbnRpZmllciBpcyAlbGx1IG9u IHN1YnNjcmliZXIiLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHN5c2lkKTsKKworCXBnX2Zy ZWUoY2YpOworCisJcmV0dXJuIHN5c2lkOworfQorCisvKgorICogTW9kaWZ5IHRoZSBzeXN0ZW0g aWRlbnRpZmllci4gU2luY2UgYSBzdGFuZGJ5IHNlcnZlciBwcmVzZXJ2ZXMgdGhlIHN5c3RlbQor ICogaWRlbnRpZmllciwgaXQgbWFrZXMgc2Vuc2UgdG8gY2hhbmdlIGl0IHRvIGF2b2lkIHNpdHVh dGlvbnMgaW4gd2hpY2ggV0FMCisgKiBmaWxlcyBmcm9tIG9uZSBvZiB0aGUgc3lzdGVtcyBtaWdo dCBiZSB1c2VkIGluIHRoZSBvdGhlciBvbmUuCisgKi8KK3N0YXRpYyB2b2lkCittb2RpZnlfc3Vi c2NyaWJlcl9zeXNpZChjb25zdCBzdHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9wdGlvbnMgKm9wdCkK K3sKKwlDb250cm9sRmlsZURhdGEgKmNmOworCWJvb2wJCWNyY19vazsKKwlzdHJ1Y3QgdGltZXZh bCB0djsKKworCWNoYXIJICAgKmNtZF9zdHI7CisKKwlwZ19sb2dfaW5mbygibW9kaWZ5aW5nIHN5 c3RlbSBpZGVudGlmaWVyIG9mIHN1YnNjcmliZXIiKTsKKworCWNmID0gZ2V0X2NvbnRyb2xmaWxl KHN1YnNjcmliZXJfZGlyLCAmY3JjX29rKTsKKwlpZiAoIWNyY19vaykKKwkJcGdfZmF0YWwoImNv bnRyb2wgZmlsZSBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiKTsKKworCS8qCisJICogU2VsZWN0IGEg bmV3IHN5c3RlbSBpZGVudGlmaWVyLgorCSAqCisJICogWFhYIHRoaXMgY29kZSB3YXMgZXh0cmFj dGVkIGZyb20gQm9vdFN0cmFwWExPRygpLgorCSAqLworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwp OworCWNmLT5zeXN0ZW1faWRlbnRpZmllciA9ICgodWludDY0KSB0di50dl9zZWMpIDw8IDMyOwor CWNmLT5zeXN0ZW1faWRlbnRpZmllciB8PSAoKHVpbnQ2NCkgdHYudHZfdXNlYykgPDwgMTI7CisJ Y2YtPnN5c3RlbV9pZGVudGlmaWVyIHw9IGdldHBpZCgpICYgMHhGRkY7CisKKwlpZiAoIWRyeV9y dW4pCisJCXVwZGF0ZV9jb250cm9sZmlsZShzdWJzY3JpYmVyX2RpciwgY2YsIHRydWUpOworCisJ cGdfbG9nX2luZm8oInN5c3RlbSBpZGVudGlmaWVyIGlzICVsbHUgb24gc3Vic2NyaWJlciIsCisJ CQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgY2YtPnN5c3RlbV9pZGVudGlmaWVyKTsKKworCXBnX2xv Z19pbmZvKCJydW5uaW5nIHBnX3Jlc2V0d2FsIG9uIHRoZSBzdWJzY3JpYmVyIik7CisKKwljbWRf c3RyID0gcHNwcmludGYoIlwiJXNcIiAtRCBcIiVzXCIgPiBcIiVzXCIiLCBwZ19yZXNldHdhbF9w YXRoLAorCQkJCQkgICBzdWJzY3JpYmVyX2RpciwgREVWTlVMTCk7CisKKwlwZ19sb2dfZGVidWco InBnX3Jlc2V0d2FsIGNvbW1hbmQgaXM6ICVzIiwgY21kX3N0cik7CisKKwlpZiAoIWRyeV9ydW4p CisJeworCQlpbnQJCQlyYyA9IHN5c3RlbShjbWRfc3RyKTsKKworCQlpZiAocmMgPT0gMCkKKwkJ CXBnX2xvZ19pbmZvKCJzdWJzY3JpYmVyIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIHRoZSBzeXN0ZW0g aWRlbnRpZmllciIpOworCQllbHNlCisJCQlwZ19mYXRhbCgic3Vic2NyaWJlciBmYWlsZWQgdG8g Y2hhbmdlIHN5c3RlbSBpZGVudGlmaWVyOiBleGl0IGNvZGU6ICVkIiwgcmMpOworCX0KKworCXBn X2ZyZWUoY2YpOworfQorCisvKgorICogR2VuZXJhdGUgYW4gb2JqZWN0IG5hbWUgdXNpbmcgYSBw cmVmaXgsIGRhdGFiYXNlIG9pZCBhbmQgYSByYW5kb20gaW50ZWdlci4KKyAqIEl0IGlzIHVzZWQg aW4gY2FzZSB0aGUgdXNlciBkb2VzIG5vdCBzcGVjaWZ5IGFuIG9iamVjdCBuYW1lIChwdWJsaWNh dGlvbiwKKyAqIHN1YnNjcmlwdGlvbiwgcmVwbGljYXRpb24gc2xvdCkuCisgKi8KK3N0YXRpYyBj aGFyICoKK2dlbmVyYXRlX29iamVjdF9uYW1lKFBHY29ubiAqY29ubikKK3sKKwlQR3Jlc3VsdCAg ICpyZXM7CisJT2lkCQkJb2lkOworCXVpbnQzMgkJcmFuZDsKKwljaGFyCSAgICpvYmpuYW1lOwor CisJcmVzID0gUFFleGVjKGNvbm4sCisJCQkJICJTRUxFQ1Qgb2lkIEZST00gcGdfY2F0YWxvZy5w Z19kYXRhYmFzZSAiCisJCQkJICJXSEVSRSBkYXRuYW1lID0gcGdfY2F0YWxvZy5jdXJyZW50X2Rh dGFiYXNlKCkiKTsKKwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0sp CisJeworCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBvYnRhaW4gZGF0YWJhc2UgT0lEOiAlcyIs CisJCQkJCSBQUXJlc3VsdEVycm9yTWVzc2FnZShyZXMpKTsKKwkJZGlzY29ubmVjdF9kYXRhYmFz ZShjb25uLCB0cnVlKTsKKwl9CisKKwlpZiAoUFFudHVwbGVzKHJlcykgIT0gMSkKKwl7CisJCXBn X2xvZ19lcnJvcigiY291bGQgbm90IG9idGFpbiBkYXRhYmFzZSBPSUQ6IGdvdCAlZCByb3dzLCBl eHBlY3RlZCAlZCByb3dzIiwKKwkJCQkJIFBRbnR1cGxlcyhyZXMpLCAxKTsKKwkJZGlzY29ubmVj dF9kYXRhYmFzZShjb25uLCB0cnVlKTsKKwl9CisKKwkvKiBEYXRhYmFzZSBPSUQgKi8KKwlvaWQg PSBzdHJ0b3VsKFBRZ2V0dmFsdWUocmVzLCAwLCAwKSwgTlVMTCwgMTApOworCisJUFFjbGVhcihy ZXMpOworCisJLyogUmFuZG9tIHVuc2lnbmVkIGludGVnZXIgKi8KKwlyYW5kID0gcGdfcHJuZ191 aW50MzIoJnBybmdfc3RhdGUpOworCisJLyoKKwkgKiBCdWlsZCB0aGUgb2JqZWN0IG5hbWUuIFRo ZSBuYW1lIG11c3Qgbm90IGV4Y2VlZCBOQU1FREFUQUxFTiAtIDEuIFRoaXMKKwkgKiBjdXJyZW50 IHNjaGVtYSB1c2VzIGEgbWF4aW11bSBvZiA0MCBjaGFyYWN0ZXJzICgyMCArIDEwICsgMSArIDgg KworCSAqICdcMCcpLgorCSAqLworCW9iam5hbWUgPSBwc3ByaW50ZigicGdfY3JlYXRlc3Vic2Ny aWJlcl8ldV8leCIsIG9pZCwgcmFuZCk7CisKKwlyZXR1cm4gb2JqbmFtZTsKK30KKworLyoKKyAq IENyZWF0ZSB0aGUgcHVibGljYXRpb25zIGFuZCByZXBsaWNhdGlvbiBzbG90cyBpbiBwcmVwYXJh dGlvbiBmb3IgbG9naWNhbAorICogcmVwbGljYXRpb24uIFJldHVybnMgdGhlIExTTiBmcm9tIGxh dGVzdCByZXBsaWNhdGlvbiBzbG90LiBJdCB3aWxsIGJlIHRoZQorICogcmVwbGljYXRpb24gc3Rh cnQgcG9pbnQgdGhhdCBpcyB1c2VkIHRvIGFkanVzdCB0aGUgc3Vic2NyaXB0aW9ucyAoc2VlCisg KiBzZXRfcmVwbGljYXRpb25fcHJvZ3Jlc3MpLgorICovCitzdGF0aWMgY2hhciAqCitzZXR1cF9w dWJsaXNoZXIoc3RydWN0IExvZ2ljYWxSZXBJbmZvICpkYmluZm8pCit7CisJY2hhcgkgICAqbHNu ID0gTlVMTDsKKworCXBnX3Bybmdfc2VlZCgmcHJuZ19zdGF0ZSwgKHVpbnQ2NCkgKGdldHBpZCgp IF4gdGltZShOVUxMKSkpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fZGJzOyBpKyspCisJ eworCQlQR2Nvbm4JICAgKmNvbm47CisJCWNoYXIJICAgKmdlbm5hbWUgPSBOVUxMOworCisJCWNv bm4gPSBjb25uZWN0X2RhdGFiYXNlKGRiaW5mb1tpXS5wdWJjb25uaW5mbywgdHJ1ZSk7CisKKwkJ LyoKKwkJICogSWYgYW4gb2JqZWN0IG5hbWUgd2FzIG5vdCBzcGVjaWZpZWQgYXMgY29tbWFuZC1s aW5lIG9wdGlvbnMsIGFzc2lnbgorCQkgKiBhIGdlbmVyYXRlZCBvYmplY3QgbmFtZS4gVGhlIHJl cGxpY2F0aW9uIHNsb3QgaGFzIGEgZGlmZmVyZW50IHJ1bGUuCisJCSAqIFRoZSBzdWJzY3JpcHRp b24gbmFtZSBpcyBhc3NpZ25lZCB0byB0aGUgcmVwbGljYXRpb24gc2xvdCBuYW1lIGlmIG5vCisJ CSAqIHJlcGxpY2F0aW9uIHNsb3QgaXMgc3BlY2lmaWVkLiBJdCBmb2xsb3dzIHRoZSBzYW1lIHJ1 bGUgYXMgQ1JFQVRFCisJCSAqIFNVQlNDUklQVElPTi4KKwkJICovCisJCWlmIChudW1fcHVicyA9 PSAwIHx8IG51bV9zdWJzID09IDAgfHwgbnVtX3JlcGxzbG90cyA9PSAwKQorCQkJZ2VubmFtZSA9 IGdlbmVyYXRlX29iamVjdF9uYW1lKGNvbm4pOworCQlpZiAobnVtX3B1YnMgPT0gMCkKKwkJCWRi aW5mb1tpXS5wdWJuYW1lID0gcGdfc3RyZHVwKGdlbm5hbWUpOworCQlpZiAobnVtX3N1YnMgPT0g MCkKKwkJCWRiaW5mb1tpXS5zdWJuYW1lID0gcGdfc3RyZHVwKGdlbm5hbWUpOworCQlpZiAobnVt X3JlcGxzbG90cyA9PSAwKQorCQkJZGJpbmZvW2ldLnJlcGxzbG90bmFtZSA9IHBnX3N0cmR1cChk YmluZm9baV0uc3VibmFtZSk7CisKKwkJLyoKKwkJICogQ3JlYXRlIHB1YmxpY2F0aW9uIG9uIHB1 Ymxpc2hlci4gVGhpcyBzdGVwIHNob3VsZCBiZSBleGVjdXRlZAorCQkgKiAqYmVmb3JlKiBwcm9t b3RpbmcgdGhlIHN1YnNjcmliZXIgdG8gYXZvaWQgYW55IHRyYW5zYWN0aW9ucyBiZXR3ZWVuCisJ CSAqIGNvbnNpc3RlbnQgTFNOIGFuZCB0aGUgbmV3IHB1YmxpY2F0aW9uIHJvd3MgKHN1Y2ggdHJh bnNhY3Rpb25zCisJCSAqIHdvdWxkbid0IHNlZSB0aGUgbmV3IHB1YmxpY2F0aW9uIHJvd3MgcmVz dWx0aW5nIGluIGFuIGVycm9yKS4KKwkJICovCisJCWNyZWF0ZV9wdWJsaWNhdGlvbihjb25uLCAm ZGJpbmZvW2ldKTsKKworCQkvKiBDcmVhdGUgcmVwbGljYXRpb24gc2xvdCBvbiBwdWJsaXNoZXIg Ki8KKwkJaWYgKGxzbikKKwkJCXBnX2ZyZWUobHNuKTsKKwkJbHNuID0gY3JlYXRlX2xvZ2ljYWxf cmVwbGljYXRpb25fc2xvdChjb25uLCAmZGJpbmZvW2ldKTsKKwkJaWYgKGxzbiAhPSBOVUxMIHx8 IGRyeV9ydW4pCisJCQlwZ19sb2dfaW5mbygiY3JlYXRlIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wi IG9uIHB1Ymxpc2hlciIsCisJCQkJCQlkYmluZm9baV0ucmVwbHNsb3RuYW1lKTsKKwkJZWxzZQor CQkJZXhpdCgxKTsKKworCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4sIGZhbHNlKTsKKwl9CisK KwlyZXR1cm4gbHNuOworfQorCisvKgorICogSXMgcmVjb3Zlcnkgc3RpbGwgaW4gcHJvZ3Jlc3M/ CisgKi8KK3N0YXRpYyBib29sCitzZXJ2ZXJfaXNfaW5fcmVjb3ZlcnkoUEdjb25uICpjb25uKQor eworCVBHcmVzdWx0ICAgKnJlczsKKwlpbnQJCQlyZXQ7CisKKwlyZXMgPSBQUWV4ZWMoY29ubiwg IlNFTEVDVCBwZ19jYXRhbG9nLnBnX2lzX2luX3JlY292ZXJ5KCkiKTsKKworCWlmIChQUXJlc3Vs dFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwl7CisJCXBnX2xvZ19lcnJvcigiY291 bGQgbm90IG9idGFpbiByZWNvdmVyeSBwcm9ncmVzczogJXMiLAorCQkJCQkgUFFyZXN1bHRFcnJv ck1lc3NhZ2UocmVzKSk7CisJCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubiwgdHJ1ZSk7CisJfQor CisKKwlyZXQgPSBzdHJjbXAoInQiLCBQUWdldHZhbHVlKHJlcywgMCwgMCkpOworCisJUFFjbGVh cihyZXMpOworCisJcmV0dXJuIHJldCA9PSAwOworfQorCisvKgorICogSXMgdGhlIHByaW1hcnkg c2VydmVyIHJlYWR5IGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uPworICoKKyAqIFhYWCBEb2VzIGl0 IG5vdCBhbGxvdyBhIHN5bmNocm9ub3VzIHJlcGxpY2E/CisgKi8KK3N0YXRpYyB2b2lkCitjaGVj a19wdWJsaXNoZXIoY29uc3Qgc3RydWN0IExvZ2ljYWxSZXBJbmZvICpkYmluZm8pCit7CisJUEdj b25uCSAgICpjb25uOworCVBHcmVzdWx0ICAgKnJlczsKKwlib29sCQlmYWlsZWQgPSBmYWxzZTsK KworCWNoYXIJICAgKndhbF9sZXZlbDsKKwlpbnQJCQltYXhfcmVwc2xvdHM7CisJaW50CQkJY3Vy X3JlcHNsb3RzOworCWludAkJCW1heF93YWxzZW5kZXJzOworCWludAkJCWN1cl93YWxzZW5kZXJz OworCisJcGdfbG9nX2luZm8oImNoZWNraW5nIHNldHRpbmdzIG9uIHB1Ymxpc2hlciIpOworCisJ Y29ubiA9IGNvbm5lY3RfZGF0YWJhc2UoZGJpbmZvWzBdLnB1YmNvbm5pbmZvLCB0cnVlKTsKKwor CS8qCisJICogSWYgdGhlIHByaW1hcnkgc2VydmVyIGlzIGluIHJlY292ZXJ5IChpLmUuIGNhc2Nh ZGluZyByZXBsaWNhdGlvbiksCisJICogb2JqZWN0cyAocHVibGljYXRpb24pIGNhbm5vdCBiZSBj cmVhdGVkIGJlY2F1c2UgaXQgaXMgcmVhZCBvbmx5LgorCSAqLworCWlmIChzZXJ2ZXJfaXNfaW5f cmVjb3ZlcnkoY29ubikpCisJeworCQlwZ19sb2dfZXJyb3IoInByaW1hcnkgc2VydmVyIGNhbm5v dCBiZSBpbiByZWNvdmVyeSIpOworCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4sIHRydWUpOwor CX0KKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogTG9naWNhbCByZXBsaWNhdGlvbiByZXF1aXJl cyBhIGZldyBwYXJhbWV0ZXJzIHRvIGJlIHNldCBvbiBwdWJsaXNoZXIuCisJICogU2luY2UgdGhl c2UgcGFyYW1ldGVycyBhcmUgbm90IGEgcmVxdWlyZW1lbnQgZm9yIHBoeXNpY2FsIHJlcGxpY2F0 aW9uLAorCSAqIHdlIHNob3VsZCBjaGVjayBpdCB0byBtYWtlIHN1cmUgaXQgd29uJ3QgZmFpbC4K KwkgKgorCSAqIC0gd2FsX2xldmVsID0gbG9naWNhbAorCSAqIC0gbWF4X3JlcGxpY2F0aW9uX3Ns b3RzID49IGN1cnJlbnQgKyBudW1iZXIgb2YgZGJzIHRvIGJlIGNvbnZlcnRlZAorCSAqIC0gbWF4 X3dhbF9zZW5kZXJzID49IGN1cnJlbnQgKyBudW1iZXIgb2YgZGJzIHRvIGJlIGNvbnZlcnRlZAor CSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisJICovCisJcmVzID0gUFFleGVjKGNvbm4sCisJCQkJICJXSVRI IHdsIEFTICIKKwkJCQkgIihTRUxFQ1Qgc2V0dGluZyBBUyB3YWxsZXZlbCBGUk9NIHBnX2NhdGFs b2cucGdfc2V0dGluZ3MgIgorCQkJCSAiV0hFUkUgbmFtZSA9ICd3YWxfbGV2ZWwnKSwgIgorCQkJ CSAidG90YWxfbXJzIEFTICIKKwkJCQkgIihTRUxFQ1Qgc2V0dGluZyBBUyB0bXJzIEZST00gcGdf Y2F0YWxvZy5wZ19zZXR0aW5ncyAiCisJCQkJICJXSEVSRSBuYW1lID0gJ21heF9yZXBsaWNhdGlv bl9zbG90cycpLCAiCisJCQkJICJjdXJfbXJzIEFTICIKKwkJCQkgIihTRUxFQ1QgY291bnQoKikg QVMgY21ycyAiCisJCQkJICJGUk9NIHBnX2NhdGFsb2cucGdfcmVwbGljYXRpb25fc2xvdHMpLCAi CisJCQkJICJ0b3RhbF9td3MgQVMgIgorCQkJCSAiKFNFTEVDVCBzZXR0aW5nIEFTIHRtd3MgRlJP TSBwZ19jYXRhbG9nLnBnX3NldHRpbmdzICIKKwkJCQkgIldIRVJFIG5hbWUgPSAnbWF4X3dhbF9z ZW5kZXJzJyksICIKKwkJCQkgImN1cl9td3MgQVMgIgorCQkJCSAiKFNFTEVDVCBjb3VudCgqKSBB UyBjbXdzIEZST00gcGdfY2F0YWxvZy5wZ19zdGF0X2FjdGl2aXR5ICIKKwkJCQkgIldIRVJFIGJh Y2tlbmRfdHlwZSA9ICd3YWxzZW5kZXInKSAiCisJCQkJICJTRUxFQ1Qgd2FsbGV2ZWwsIHRtcnMs IGNtcnMsIHRtd3MsIGNtd3MgIgorCQkJCSAiRlJPTSB3bCwgdG90YWxfbXJzLCBjdXJfbXJzLCB0 b3RhbF9td3MsIGN1cl9td3MiKTsKKworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVT X1RVUExFU19PSykKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9idGFpbiBwdWJsaXNo ZXIgc2V0dGluZ3M6ICVzIiwKKwkJCQkJIFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJlcykpOworCQlk aXNjb25uZWN0X2RhdGFiYXNlKGNvbm4sIHRydWUpOworCX0KKworCXdhbF9sZXZlbCA9IHBnX3N0 cmR1cChQUWdldHZhbHVlKHJlcywgMCwgMCkpOworCW1heF9yZXBzbG90cyA9IGF0b2koUFFnZXR2 YWx1ZShyZXMsIDAsIDEpKTsKKwljdXJfcmVwc2xvdHMgPSBhdG9pKFBRZ2V0dmFsdWUocmVzLCAw LCAyKSk7CisJbWF4X3dhbHNlbmRlcnMgPSBhdG9pKFBRZ2V0dmFsdWUocmVzLCAwLCAzKSk7CisJ Y3VyX3dhbHNlbmRlcnMgPSBhdG9pKFBRZ2V0dmFsdWUocmVzLCAwLCA0KSk7CisKKwlQUWNsZWFy KHJlcyk7CisKKwlwZ19sb2dfZGVidWcoInB1Ymxpc2hlcjogd2FsX2xldmVsOiAlcyIsIHdhbF9s ZXZlbCk7CisJcGdfbG9nX2RlYnVnKCJwdWJsaXNoZXI6IG1heF9yZXBsaWNhdGlvbl9zbG90czog JWQiLCBtYXhfcmVwc2xvdHMpOworCXBnX2xvZ19kZWJ1ZygicHVibGlzaGVyOiBjdXJyZW50IHJl cGxpY2F0aW9uIHNsb3RzOiAlZCIsIGN1cl9yZXBzbG90cyk7CisJcGdfbG9nX2RlYnVnKCJwdWJs aXNoZXI6IG1heF93YWxfc2VuZGVyczogJWQiLCBtYXhfd2Fsc2VuZGVycyk7CisJcGdfbG9nX2Rl YnVnKCJwdWJsaXNoZXI6IGN1cnJlbnQgd2FsIHNlbmRlcnM6ICVkIiwgY3VyX3dhbHNlbmRlcnMp OworCisJLyoKKwkgKiBJZiBzdGFuZGJ5IHNldHMgcHJpbWFyeV9zbG90X25hbWUsIGNoZWNrIGlm IHRoaXMgcmVwbGljYXRpb24gc2xvdCBpcyBpbgorCSAqIHVzZSBvbiBwcmltYXJ5IGZvciBXQUwg cmV0ZW50aW9uIHB1cnBvc2VzLiBUaGlzIHJlcGxpY2F0aW9uIHNsb3QgaGFzIG5vCisJICogdXNl IGFmdGVyIHRoZSB0cmFuc2Zvcm1hdGlvbiwgaGVuY2UsIGl0IHdpbGwgYmUgcmVtb3ZlZCBhdCB0 aGUgZW5kIG9mCisJICogdGhpcyBwcm9jZXNzLgorCSAqLworCWlmIChwcmltYXJ5X3Nsb3RfbmFt ZSkKKwl7CisJCVBRRXhwQnVmZmVyIHN0ciA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJYXBw ZW5kUFFFeHBCdWZmZXIoc3RyLAorCQkJCQkJICAiU0VMRUNUIDEgRlJPTSBwZ19jYXRhbG9nLnBn X3JlcGxpY2F0aW9uX3Nsb3RzICIKKwkJCQkJCSAgIldIRVJFIGFjdGl2ZSBBTkQgc2xvdF9uYW1l ID0gJyVzJyIsCisJCQkJCQkgIHByaW1hcnlfc2xvdF9uYW1lKTsKKworCQlwZ19sb2dfZGVidWco ImNvbW1hbmQgaXM6ICVzIiwgc3RyLT5kYXRhKTsKKworCQlyZXMgPSBQUWV4ZWMoY29ubiwgc3Ry LT5kYXRhKTsKKwkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQor CQl7CisJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBvYnRhaW4gcmVwbGljYXRpb24gc2xvdCBp bmZvcm1hdGlvbjogJXMiLAorCQkJCQkJIFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJlcykpOworCQkJ ZGlzY29ubmVjdF9kYXRhYmFzZShjb25uLCB0cnVlKTsKKwkJfQorCisJCWlmIChQUW50dXBsZXMo cmVzKSAhPSAxKQorCQl7CisJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBvYnRhaW4gcmVwbGlj YXRpb24gc2xvdCBpbmZvcm1hdGlvbjogZ290ICVkIHJvd3MsIGV4cGVjdGVkICVkIHJvdyIsCisJ CQkJCQkgUFFudHVwbGVzKHJlcyksIDEpOworCQkJZGlzY29ubmVjdF9kYXRhYmFzZShjb25uLCB0 cnVlKTsKKwkJfQorCQllbHNlCisJCQlwZ19sb2dfaW5mbygicHJpbWFyeSBoYXMgcmVwbGljYXRp b24gc2xvdCBcIiVzXCIiLAorCQkJCQkJcHJpbWFyeV9zbG90X25hbWUpOworCisJCVBRY2xlYXIo cmVzKTsKKwl9CisKKwlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4sIGZhbHNlKTsKKworCWlmIChz dHJjbXAod2FsX2xldmVsLCAibG9naWNhbCIpICE9IDApCisJeworCQlwZ19sb2dfZXJyb3IoInB1 Ymxpc2hlciByZXF1aXJlcyB3YWxfbGV2ZWwgPj0gbG9naWNhbCIpOworCQlmYWlsZWQgPSB0cnVl OworCX0KKworCWlmIChtYXhfcmVwc2xvdHMgLSBjdXJfcmVwc2xvdHMgPCBudW1fZGJzKQorCXsK KwkJcGdfbG9nX2Vycm9yKCJwdWJsaXNoZXIgcmVxdWlyZXMgJWQgcmVwbGljYXRpb24gc2xvdHMs IGJ1dCBvbmx5ICVkIHJlbWFpbiIsCisJCQkJCSBudW1fZGJzLCBtYXhfcmVwc2xvdHMgLSBjdXJf cmVwc2xvdHMpOworCQlwZ19sb2dfZXJyb3JfaGludCgiQ29uc2lkZXIgaW5jcmVhc2luZyBtYXhf cmVwbGljYXRpb25fc2xvdHMgdG8gYXQgbGVhc3QgJWQuIiwKKwkJCQkJCSAgY3VyX3JlcHNsb3Rz ICsgbnVtX2Ricyk7CisJCWZhaWxlZCA9IHRydWU7CisJfQorCisJaWYgKG1heF93YWxzZW5kZXJz IC0gY3VyX3dhbHNlbmRlcnMgPCBudW1fZGJzKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJwdWJsaXNo ZXIgcmVxdWlyZXMgJWQgd2FsIHNlbmRlciBwcm9jZXNzZXMsIGJ1dCBvbmx5ICVkIHJlbWFpbiIs CisJCQkJCSBudW1fZGJzLCBtYXhfd2Fsc2VuZGVycyAtIGN1cl93YWxzZW5kZXJzKTsKKwkJcGdf bG9nX2Vycm9yX2hpbnQoIkNvbnNpZGVyIGluY3JlYXNpbmcgbWF4X3dhbF9zZW5kZXJzIHRvIGF0 IGxlYXN0ICVkLiIsCisJCQkJCQkgIGN1cl93YWxzZW5kZXJzICsgbnVtX2Ricyk7CisJCWZhaWxl ZCA9IHRydWU7CisJfQorCisJaWYgKGZhaWxlZCkKKwkJZXhpdCgxKTsKK30KKworLyoKKyAqIElz IHRoZSBzdGFuZGJ5IHNlcnZlciByZWFkeSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbj8KKyAqCisg KiBYWFggRG9lcyBpdCBub3QgYWxsb3cgYSB0aW1lLWRlbGF5ZWQgcmVwbGljYT8KKyAqCisgKiBY WFggSW4gYSBjYXNjYWRlZCByZXBsaWNhdGlvbiBzY2VuYXJpbyAoUCAtPiBTIC0+IEMpLCBpZiB0 aGUgdGFyZ2V0IHNlcnZlcgorICogaXMgUywgaXQgY2Fubm90IGRldGVjdCB0aGVyZSBpcyBhIHJl cGxpY2EgKHNlcnZlciBDKSBiZWNhdXNlIHNlcnZlciBTIHN0YXJ0cworICogYWNjZXB0aW5nIG9u bHkgbG9jYWwgY29ubmVjdGlvbnMgYW5kIHNlcnZlciBDIGNhbm5vdCBjb25uZWN0IHRvIGl0LiBI ZW5jZSwKKyAqIHRoZXJlIGlzIG5vdCBhIHJlbGlhYmxlIHdheSB0byBwcm92aWRlIGEgc3VpdGFi bGUgZXJyb3Igc2F5aW5nIHRoZSBzZXJ2ZXIgQworICogd2lsbCBiZSBicm9rZW4gYXQgdGhlIGVu ZCBvZiB0aGlzIHByb2Nlc3MgKGR1ZSB0byBwZ19yZXNldHdhbCkuCisgKi8KK3N0YXRpYyB2b2lk CitjaGVja19zdWJzY3JpYmVyKGNvbnN0IHN0cnVjdCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvKQor eworCVBHY29ubgkgICAqY29ubjsKKwlQR3Jlc3VsdCAgICpyZXM7CisJYm9vbAkJZmFpbGVkID0g ZmFsc2U7CisKKwlpbnQJCQltYXhfbHJ3b3JrZXJzOworCWludAkJCW1heF9yZXBzbG90czsKKwlp bnQJCQltYXhfd3Byb2NzOworCisJcGdfbG9nX2luZm8oImNoZWNraW5nIHNldHRpbmdzIG9uIHN1 YnNjcmliZXIiKTsKKworCWNvbm4gPSBjb25uZWN0X2RhdGFiYXNlKGRiaW5mb1swXS5zdWJjb25u aW5mbywgdHJ1ZSk7CisKKwkvKiBUaGUgdGFyZ2V0IHNlcnZlciBtdXN0IGJlIGEgc3RhbmRieSAq LworCWlmICghc2VydmVyX2lzX2luX3JlY292ZXJ5KGNvbm4pKQorCXsKKwkJcGdfbG9nX2Vycm9y KCJ0YXJnZXQgc2VydmVyIG11c3QgYmUgYSBzdGFuZGJ5Iik7CisJCWRpc2Nvbm5lY3RfZGF0YWJh c2UoY29ubiwgdHJ1ZSk7CisJfQorCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBMb2dpY2FsIHJl cGxpY2F0aW9uIHJlcXVpcmVzIGEgZmV3IHBhcmFtZXRlcnMgdG8gYmUgc2V0IG9uIHN1YnNjcmli ZXIuCisJICogU2luY2UgdGhlc2UgcGFyYW1ldGVycyBhcmUgbm90IGEgcmVxdWlyZW1lbnQgZm9y IHBoeXNpY2FsIHJlcGxpY2F0aW9uLAorCSAqIHdlIHNob3VsZCBjaGVjayBpdCB0byBtYWtlIHN1 cmUgaXQgd29uJ3QgZmFpbC4KKwkgKgorCSAqIC0gbWF4X3JlcGxpY2F0aW9uX3Nsb3RzID49IG51 bWJlciBvZiBkYnMgdG8gYmUgY29udmVydGVkCisJICogLSBtYXhfbG9naWNhbF9yZXBsaWNhdGlv bl93b3JrZXJzID49IG51bWJlciBvZiBkYnMgdG8gYmUgY29udmVydGVkCisJICogLSBtYXhfd29y a2VyX3Byb2Nlc3NlcyA+PSAxICsgbnVtYmVyIG9mIGRicyB0byBiZSBjb252ZXJ0ZWQKKwkgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorCSAqLworCXJlcyA9IFBRZXhlYyhjb25uLAorCQkJCSAiU0VMRUNUIHNl dHRpbmcgRlJPTSBwZ19jYXRhbG9nLnBnX3NldHRpbmdzIFdIRVJFIG5hbWUgSU4gKCIKKwkJCQkg IidtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzJywgIgorCQkJCSAiJ21heF9yZXBsaWNh dGlvbl9zbG90cycsICIKKwkJCQkgIidtYXhfd29ya2VyX3Byb2Nlc3NlcycsICIKKwkJCQkgIidw cmltYXJ5X3Nsb3RfbmFtZScpICIKKwkJCQkgIk9SREVSIEJZIG5hbWUiKTsKKworCWlmIChQUXJl c3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwl7CisJCXBnX2xvZ19lcnJvcigi Y291bGQgbm90IG9idGFpbiBzdWJzY3JpYmVyIHNldHRpbmdzOiAlcyIsCisJCQkJCSBQUXJlc3Vs dEVycm9yTWVzc2FnZShyZXMpKTsKKwkJZGlzY29ubmVjdF9kYXRhYmFzZShjb25uLCB0cnVlKTsK Kwl9CisKKwltYXhfbHJ3b3JrZXJzID0gYXRvaShQUWdldHZhbHVlKHJlcywgMCwgMCkpOworCW1h eF9yZXBzbG90cyA9IGF0b2koUFFnZXR2YWx1ZShyZXMsIDEsIDApKTsKKwltYXhfd3Byb2NzID0g YXRvaShQUWdldHZhbHVlKHJlcywgMiwgMCkpOworCWlmIChzdHJjbXAoUFFnZXR2YWx1ZShyZXMs IDMsIDApLCAiIikgIT0gMCkKKwkJcHJpbWFyeV9zbG90X25hbWUgPSBwZ19zdHJkdXAoUFFnZXR2 YWx1ZShyZXMsIDMsIDApKTsKKworCXBnX2xvZ19kZWJ1Zygic3Vic2NyaWJlcjogbWF4X2xvZ2lj YWxfcmVwbGljYXRpb25fd29ya2VyczogJWQiLAorCQkJCSBtYXhfbHJ3b3JrZXJzKTsKKwlwZ19s b2dfZGVidWcoInN1YnNjcmliZXI6IG1heF9yZXBsaWNhdGlvbl9zbG90czogJWQiLCBtYXhfcmVw c2xvdHMpOworCXBnX2xvZ19kZWJ1Zygic3Vic2NyaWJlcjogbWF4X3dvcmtlcl9wcm9jZXNzZXM6 ICVkIiwgbWF4X3dwcm9jcyk7CisJaWYgKHByaW1hcnlfc2xvdF9uYW1lKQorCQlwZ19sb2dfZGVi dWcoInN1YnNjcmliZXI6IHByaW1hcnlfc2xvdF9uYW1lOiAlcyIsIHByaW1hcnlfc2xvdF9uYW1l KTsKKworCVBRY2xlYXIocmVzKTsKKworCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubiwgZmFsc2Up OworCisJaWYgKG1heF9yZXBzbG90cyA8IG51bV9kYnMpCisJeworCQlwZ19sb2dfZXJyb3IoInN1 YnNjcmliZXIgcmVxdWlyZXMgJWQgcmVwbGljYXRpb24gc2xvdHMsIGJ1dCBvbmx5ICVkIHJlbWFp biIsCisJCQkJCSBudW1fZGJzLCBtYXhfcmVwc2xvdHMpOworCQlwZ19sb2dfZXJyb3JfaGludCgi Q29uc2lkZXIgaW5jcmVhc2luZyBtYXhfcmVwbGljYXRpb25fc2xvdHMgdG8gYXQgbGVhc3QgJWQu IiwKKwkJCQkJCSAgbnVtX2Ricyk7CisJCWZhaWxlZCA9IHRydWU7CisJfQorCisJaWYgKG1heF9s cndvcmtlcnMgPCBudW1fZGJzKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJzdWJzY3JpYmVyIHJlcXVp cmVzICVkIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VycywgYnV0IG9ubHkgJWQgcmVtYWluIiwK KwkJCQkJIG51bV9kYnMsIG1heF9scndvcmtlcnMpOworCQlwZ19sb2dfZXJyb3JfaGludCgiQ29u c2lkZXIgaW5jcmVhc2luZyBtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzIHRvIGF0IGxl YXN0ICVkLiIsCisJCQkJCQkgIG51bV9kYnMpOworCQlmYWlsZWQgPSB0cnVlOworCX0KKworCWlm IChtYXhfd3Byb2NzIDwgbnVtX2RicyArIDEpCisJeworCQlwZ19sb2dfZXJyb3IoInN1YnNjcmli ZXIgcmVxdWlyZXMgJWQgd29ya2VyIHByb2Nlc3NlcywgYnV0IG9ubHkgJWQgcmVtYWluIiwKKwkJ CQkJIG51bV9kYnMgKyAxLCBtYXhfd3Byb2NzKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIkNvbnNp ZGVyIGluY3JlYXNpbmcgbWF4X3dvcmtlcl9wcm9jZXNzZXMgdG8gYXQgbGVhc3QgJWQuIiwKKwkJ CQkJCSAgbnVtX2RicyArIDEpOworCQlmYWlsZWQgPSB0cnVlOworCX0KKworCWlmIChmYWlsZWQp CisJCWV4aXQoMSk7Cit9CisKKy8qCisgKiBDcmVhdGUgdGhlIHN1YnNjcmlwdGlvbnMsIGFkanVz dCB0aGUgaW5pdGlhbCBsb2NhdGlvbiBmb3IgbG9naWNhbAorICogcmVwbGljYXRpb24gYW5kIGVu YWJsZSB0aGUgc3Vic2NyaXB0aW9ucy4gVGhhdCdzIHRoZSBsYXN0IHN0ZXAgZm9yIGxvZ2ljYWwK KyAqIHJlcGxpY2F0aW9uIHNldHVwLgorICovCitzdGF0aWMgdm9pZAorc2V0dXBfc3Vic2NyaWJl cihzdHJ1Y3QgTG9naWNhbFJlcEluZm8gKmRiaW5mbywgY29uc3QgY2hhciAqY29uc2lzdGVudF9s c24pCit7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fZGJzOyBpKyspCisJeworCQlQR2Nvbm4J ICAgKmNvbm47CisKKwkJLyogQ29ubmVjdCB0byBzdWJzY3JpYmVyLiAqLworCQljb25uID0gY29u bmVjdF9kYXRhYmFzZShkYmluZm9baV0uc3ViY29ubmluZm8sIHRydWUpOworCisJCS8qCisJCSAq IFNpbmNlIHRoZSBwdWJsaWNhdGlvbiB3YXMgY3JlYXRlZCBiZWZvcmUgdGhlIGNvbnNpc3RlbnQg TFNOLCBpdCBpcworCQkgKiBhdmFpbGFibGUgb24gdGhlIHN1YnNjcmliZXIgd2hlbiB0aGUgcGh5 c2ljYWwgcmVwbGljYSBpcyBwcm9tb3RlZC4KKwkJICogUmVtb3ZlIHB1YmxpY2F0aW9ucyBmcm9t IHRoZSBzdWJzY3JpYmVyIGJlY2F1c2UgaXQgaGFzIG5vIHVzZS4KKwkJICovCisJCWRyb3BfcHVi bGljYXRpb24oY29ubiwgJmRiaW5mb1tpXSk7CisKKwkJY3JlYXRlX3N1YnNjcmlwdGlvbihjb25u LCAmZGJpbmZvW2ldKTsKKworCQkvKiBTZXQgdGhlIHJlcGxpY2F0aW9uIHByb2dyZXNzIHRvIHRo ZSBjb3JyZWN0IExTTiAqLworCQlzZXRfcmVwbGljYXRpb25fcHJvZ3Jlc3MoY29ubiwgJmRiaW5m b1tpXSwgY29uc2lzdGVudF9sc24pOworCisJCS8qIEVuYWJsZSBzdWJzY3JpcHRpb24gKi8KKwkJ ZW5hYmxlX3N1YnNjcmlwdGlvbihjb25uLCAmZGJpbmZvW2ldKTsKKworCQlkaXNjb25uZWN0X2Rh dGFiYXNlKGNvbm4sIGZhbHNlKTsKKwl9Cit9CisKKy8qCisgKiBXcml0ZSB0aGUgcmVxdWlyZWQg cmVjb3ZlcnkgcGFyYW1ldGVycy4KKyAqLworc3RhdGljIHZvaWQKK3NldHVwX3JlY292ZXJ5KGNv bnN0IHN0cnVjdCBMb2dpY2FsUmVwSW5mbyAqZGJpbmZvLCBjb25zdCBjaGFyICpkYXRhZGlyLCBj b25zdCBjaGFyICpsc24pCit7CisJUEdjb25uCSAgICpjb25uOworCVBRRXhwQnVmZmVyIHJlY292 ZXJ5Y29uZmNvbnRlbnRzOworCisJLyoKKwkgKiBEZXNwaXRlIG9mIHRoZSByZWNvdmVyeSBwYXJh bWV0ZXJzIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgc3Vic2NyaWJlciwKKwkgKiB1c2UgYSBwdWJs aXNoZXIgY29ubmVjdGlvbi4gVGhlIHByaW1hcnlfY29ubmluZm8gaXMgZ2VuZXJhdGVkIHVzaW5n IHRoZQorCSAqIGNvbm5lY3Rpb24gc2V0dGluZ3MuCisJICovCisJY29ubiA9IGNvbm5lY3RfZGF0 YWJhc2UoZGJpbmZvWzBdLnB1YmNvbm5pbmZvLCB0cnVlKTsKKworCS8qCisJICogV3JpdGUgcmVj b3ZlcnkgcGFyYW1ldGVycy4KKwkgKgorCSAqIFRoZSBzdWJzY3JpYmVyIGlzIG5vdCBydW5uaW5n IHlldC4gSW4gZHJ5IHJ1biBtb2RlLCB0aGUgcmVjb3ZlcnkKKwkgKiBwYXJhbWV0ZXJzICp3b24n dCogYmUgd3JpdHRlbi4gQW4gaW52YWxpZCBMU04gaXMgdXNlZCBmb3IgcHJpbnRpbmcKKwkgKiBw dXJwb3Nlcy4gQWRkaXRpb25hbCByZWNvdmVyeSBwYXJhbWV0ZXJzIGFyZSBhZGRlZCBoZXJlLiBJ dCBhdm9pZHMKKwkgKiB1bmV4cGVjdGVkIGJlaGF2aW9yIHN1Y2ggYXMgZW5kIG9mIHJlY292ZXJ5 IGFzIHNvb24gYXMgYSBjb25zaXN0ZW50CisJICogc3RhdGUgaXMgcmVhY2hlZCAocmVjb3Zlcnlf dGFyZ2V0KSBhbmQgZmFpbHVyZSBkdWUgdG8gbXVsdGlwbGUgcmVjb3ZlcnkKKwkgKiB0YXJnZXRz IChuYW1lLCB0aW1lLCB4aWQsIExTTikuCisJICovCisJcmVjb3Zlcnljb25mY29udGVudHMgPSBH ZW5lcmF0ZVJlY292ZXJ5Q29uZmlnKGNvbm4sIE5VTEwpOworCWFwcGVuZFBRRXhwQnVmZmVyKHJl Y292ZXJ5Y29uZmNvbnRlbnRzLCAicmVjb3ZlcnlfdGFyZ2V0ID0gJydcbiIpOworCWFwcGVuZFBR RXhwQnVmZmVyKHJlY292ZXJ5Y29uZmNvbnRlbnRzLAorCQkJCQkgICJyZWNvdmVyeV90YXJnZXRf dGltZWxpbmUgPSAnbGF0ZXN0J1xuIik7CisJYXBwZW5kUFFFeHBCdWZmZXIocmVjb3Zlcnljb25m Y29udGVudHMsCisJCQkJCSAgInJlY292ZXJ5X3RhcmdldF9pbmNsdXNpdmUgPSB0cnVlXG4iKTsK KwlhcHBlbmRQUUV4cEJ1ZmZlcihyZWNvdmVyeWNvbmZjb250ZW50cywKKwkJCQkJICAicmVjb3Zl cnlfdGFyZ2V0X2FjdGlvbiA9IHByb21vdGVcbiIpOworCWFwcGVuZFBRRXhwQnVmZmVyKHJlY292 ZXJ5Y29uZmNvbnRlbnRzLCAicmVjb3ZlcnlfdGFyZ2V0X25hbWUgPSAnJ1xuIik7CisJYXBwZW5k UFFFeHBCdWZmZXIocmVjb3Zlcnljb25mY29udGVudHMsICJyZWNvdmVyeV90YXJnZXRfdGltZSA9 ICcnXG4iKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlcihyZWNvdmVyeWNvbmZjb250ZW50cywgInJlY292 ZXJ5X3RhcmdldF94aWQgPSAnJ1xuIik7CisKKwlpZiAoZHJ5X3J1bikKKwl7CisJCWFwcGVuZFBR RXhwQnVmZmVyKHJlY292ZXJ5Y29uZmNvbnRlbnRzLCAiIyBkcnkgcnVuIG1vZGUiKTsKKwkJYXBw ZW5kUFFFeHBCdWZmZXIocmVjb3Zlcnljb25mY29udGVudHMsCisJCQkJCQkgICJyZWNvdmVyeV90 YXJnZXRfbHNuID0gJyVYLyVYJ1xuIiwKKwkJCQkJCSAgTFNOX0ZPUk1BVF9BUkdTKChYTG9nUmVj UHRyKSBJbnZhbGlkWExvZ1JlY1B0cikpOworCX0KKwllbHNlCisJeworCQlhcHBlbmRQUUV4cEJ1 ZmZlcihyZWNvdmVyeWNvbmZjb250ZW50cywgInJlY292ZXJ5X3RhcmdldF9sc24gPSAnJXMnXG4i LAorCQkJCQkJICBsc24pOworCQlXcml0ZVJlY292ZXJ5Q29uZmlnKGNvbm4sIGRhdGFkaXIsIHJl Y292ZXJ5Y29uZmNvbnRlbnRzKTsKKwl9CisJZGlzY29ubmVjdF9kYXRhYmFzZShjb25uLCBmYWxz ZSk7CisKKwlwZ19sb2dfZGVidWcoInJlY292ZXJ5IHBhcmFtZXRlcnM6XG4lcyIsIHJlY292ZXJ5 Y29uZmNvbnRlbnRzLT5kYXRhKTsKK30KKworLyoKKyAqIERyb3AgcGh5c2ljYWwgcmVwbGljYXRp b24gc2xvdCBvbiBwcmltYXJ5IGlmIHRoZSBzdGFuZGJ5IHdhcyB1c2luZyBpdC4gQWZ0ZXIKKyAq IHRoZSB0cmFuc2Zvcm1hdGlvbiwgaXQgaGFzIG5vIHVzZS4KKyAqCisgKiBYWFggd2UgbWlnaHQg bm90IGZhaWwgaGVyZS4gSW5zdGVhZCwgd2UgcHJvdmlkZSBhIHdhcm5pbmcgc28gdGhlIHVzZXIK KyAqIGV2ZW50dWFsbHkgZHJvcHMgdGhpcyByZXBsaWNhdGlvbiBzbG90IGxhdGVyLgorICovCitz dGF0aWMgdm9pZAorZHJvcF9wcmltYXJ5X3JlcGxpY2F0aW9uX3Nsb3Qoc3RydWN0IExvZ2ljYWxS ZXBJbmZvICpkYmluZm8sIGNvbnN0IGNoYXIgKnNsb3RuYW1lKQoreworCVBHY29ubgkgICAqY29u bjsKKworCS8qIFJlcGxpY2F0aW9uIHNsb3QgZG9lcyBub3QgZXhpc3QsIGRvIG5vdGhpbmcgKi8K KwlpZiAoIXByaW1hcnlfc2xvdF9uYW1lKQorCQlyZXR1cm47CisKKwljb25uID0gY29ubmVjdF9k YXRhYmFzZShkYmluZm9bMF0ucHViY29ubmluZm8sIGZhbHNlKTsKKwlpZiAoY29ubiAhPSBOVUxM KQorCXsKKwkJZHJvcF9yZXBsaWNhdGlvbl9zbG90KGNvbm4sICZkYmluZm9bMF0sIHNsb3RuYW1l KTsKKwkJZGlzY29ubmVjdF9kYXRhYmFzZShjb25uLCBmYWxzZSk7CisJfQorCWVsc2UKKwl7CisJ CXBnX2xvZ193YXJuaW5nKCJjb3VsZCBub3QgZHJvcCByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiBv biBwcmltYXJ5IiwKKwkJCQkJICAgc2xvdG5hbWUpOworCQlwZ19sb2dfd2FybmluZ19oaW50KCJE cm9wIHRoaXMgcmVwbGljYXRpb24gc2xvdCBzb29uIHRvIGF2b2lkIHJldGVudGlvbiBvZiBXQUwg ZmlsZXMuIik7CisJfQorfQorCisvKgorICogQ3JlYXRlIGEgbG9naWNhbCByZXBsaWNhdGlvbiBz bG90IGFuZCByZXR1cm5zIGEgTFNOLgorICoKKyAqIENyZWF0ZVJlcGxpY2F0aW9uU2xvdCgpIGlz IG5vdCB1c2VkIGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvdmlkZSB0aGUgb25lLXJvdworICogcmVz dWx0IHNldCB0aGF0IGNvbnRhaW5zIHRoZSBMU04uCisgKi8KK3N0YXRpYyBjaGFyICoKK2NyZWF0 ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoUEdjb25uICpjb25uLCBzdHJ1Y3QgTG9naWNhbFJl cEluZm8gKmRiaW5mbykKK3sKKwlQUUV4cEJ1ZmZlciBzdHIgPSBjcmVhdGVQUUV4cEJ1ZmZlcigp OworCVBHcmVzdWx0ICAgKnJlcyA9IE5VTEw7CisJY29uc3QgY2hhciAqc2xvdF9uYW1lID0gZGJp bmZvLT5yZXBsc2xvdG5hbWU7CisJY2hhcgkgICAqbHNuID0gTlVMTDsKKworCUFzc2VydChjb25u ICE9IE5VTEwpOworCisJcGdfbG9nX2luZm8oImNyZWF0aW5nIHRoZSByZXBsaWNhdGlvbiBzbG90 IFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCIiLAorCQkJCXNsb3RfbmFtZSwgZGJpbmZvLT5kYm5h bWUpOworCisJYXBwZW5kUFFFeHBCdWZmZXIoc3RyLAorCQkJCQkgICJTRUxFQ1QgbHNuIEZST00g cGdfY2F0YWxvZy5wZ19jcmVhdGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KCclcycsICclcycs ICVzLCBmYWxzZSwgZmFsc2UpIiwKKwkJCQkJICBzbG90X25hbWUsICJwZ291dHB1dCIsICJmYWxz ZSIpOworCisJcGdfbG9nX2RlYnVnKCJjb21tYW5kIGlzOiAlcyIsIHN0ci0+ZGF0YSk7CisKKwlp ZiAoIWRyeV9ydW4pCisJeworCQlyZXMgPSBQUWV4ZWMoY29ubiwgc3RyLT5kYXRhKTsKKwkJaWYg KFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCQl7CisJCQlwZ19sb2df ZXJyb3IoImNvdWxkIG5vdCBjcmVhdGUgcmVwbGljYXRpb24gc2xvdCBcIiVzXCIgb24gZGF0YWJh c2UgXCIlc1wiOiAlcyIsCisJCQkJCQkgc2xvdF9uYW1lLCBkYmluZm8tPmRibmFtZSwKKwkJCQkJ CSBQUXJlc3VsdEVycm9yTWVzc2FnZShyZXMpKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJ bHNuID0gcGdfc3RyZHVwKFBRZ2V0dmFsdWUocmVzLCAwLCAwKSk7CisJCVBRY2xlYXIocmVzKTsK Kwl9CisKKwkvKiBGb3IgY2xlYW51cCBwdXJwb3NlcyAqLworCWRiaW5mby0+bWFkZV9yZXBsc2xv dCA9IHRydWU7CisKKwlkZXN0cm95UFFFeHBCdWZmZXIoc3RyKTsKKworCXJldHVybiBsc247Cit9 CisKK3N0YXRpYyB2b2lkCitkcm9wX3JlcGxpY2F0aW9uX3Nsb3QoUEdjb25uICpjb25uLCBzdHJ1 Y3QgTG9naWNhbFJlcEluZm8gKmRiaW5mbywKKwkJCQkJICBjb25zdCBjaGFyICpzbG90X25hbWUp Cit7CisJUFFFeHBCdWZmZXIgc3RyID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQR3Jlc3VsdCAg ICpyZXM7CisKKwlBc3NlcnQoY29ubiAhPSBOVUxMKTsKKworCXBnX2xvZ19pbmZvKCJkcm9wcGlu ZyB0aGUgcmVwbGljYXRpb24gc2xvdCBcIiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiIiwKKwkJCQlz bG90X25hbWUsIGRiaW5mby0+ZGJuYW1lKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwgIlNF TEVDVCBwZ19jYXRhbG9nLnBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgnJXMnKSIsIHNsb3RfbmFt ZSk7CisKKwlwZ19sb2dfZGVidWcoImNvbW1hbmQgaXM6ICVzIiwgc3RyLT5kYXRhKTsKKworCWlm ICghZHJ5X3J1bikKKwl7CisJCXJlcyA9IFBRZXhlYyhjb25uLCBzdHItPmRhdGEpOworCQlpZiAo UFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJCXsKKwkJCXBnX2xvZ19l cnJvcigiY291bGQgbm90IGRyb3AgcmVwbGljYXRpb24gc2xvdCBcIiVzXCIgb24gZGF0YWJhc2Ug XCIlc1wiOiAlcyIsCisJCQkJCQkgc2xvdF9uYW1lLCBkYmluZm8tPmRibmFtZSwgUFFyZXN1bHRF cnJvck1lc3NhZ2UocmVzKSk7CisJCQlkYmluZm8tPm1hZGVfcmVwbHNsb3QgPSBmYWxzZTsJLyog ZG9uJ3QgdHJ5IGFnYWluLiAqLworCQl9CisKKwkJUFFjbGVhcihyZXMpOworCX0KKworCWRlc3Ry b3lQUUV4cEJ1ZmZlcihzdHIpOworfQorCisvKgorICogUmVwb3J0cyBhIHN1aXRhYmxlIG1lc3Nh Z2UgaWYgcGdfY3RsIGZhaWxzLgorICovCitzdGF0aWMgdm9pZAorcGdfY3RsX3N0YXR1cyhjb25z dCBjaGFyICpwZ19jdGxfY21kLCBpbnQgcmMpCit7CisJaWYgKHJjICE9IDApCisJeworCQlpZiAo V0lGRVhJVEVEKHJjKSkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJwZ19jdGwgZmFpbGVkIHdpdGgg ZXhpdCBjb2RlICVkIiwgV0VYSVRTVEFUVVMocmMpKTsKKwkJfQorCQllbHNlIGlmIChXSUZTSUdO QUxFRChyYykpCisJCXsKKyNpZiBkZWZpbmVkKFdJTjMyKQorCQkJcGdfbG9nX2Vycm9yKCJwZ19j dGwgd2FzIHRlcm1pbmF0ZWQgYnkgZXhjZXB0aW9uIDB4JVgiLAorCQkJCQkJIFdURVJNU0lHKHJj KSk7CisJCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJTZWUgQyBpbmNsdWRlIGZpbGUgXCJudHN0YXR1 cy5oXCIgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGhleGFkZWNpbWFsIHZhbHVlLiIpOworI2Vs c2UKKwkJCXBnX2xvZ19lcnJvcigicGdfY3RsIHdhcyB0ZXJtaW5hdGVkIGJ5IHNpZ25hbCAlZDog JXMiLAorCQkJCQkJIFdURVJNU0lHKHJjKSwgcGdfc3Ryc2lnbmFsKFdURVJNU0lHKHJjKSkpOwor I2VuZGlmCisJCX0KKwkJZWxzZQorCQl7CisJCQlwZ19sb2dfZXJyb3IoInBnX2N0bCBleGl0ZWQg d2l0aCB1bnJlY29nbml6ZWQgc3RhdHVzICVkIiwgcmMpOworCQl9CisKKwkJcGdfbG9nX2Vycm9y X2RldGFpbCgiVGhlIGZhaWxlZCBjb21tYW5kIHdhczogJXMiLCBwZ19jdGxfY21kKTsKKwkJZXhp dCgxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzdGFydF9zdGFuZGJ5X3NlcnZlcihjb25zdCBz dHJ1Y3QgQ3JlYXRlU3Vic2NyaWJlck9wdGlvbnMgKm9wdCwgYm9vbCByZXN0cmljdGVkX2FjY2Vz cykKK3sKKwlQUUV4cEJ1ZmZlciBwZ19jdGxfY21kID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlp bnQJCQlyYzsKKworCWFwcGVuZFBRRXhwQnVmZmVyKHBnX2N0bF9jbWQsICJcIiVzXCIgc3RhcnQg LUQgXCIlc1wiIC1zIiwKKwkJCQkJICBwZ19jdGxfcGF0aCwgc3Vic2NyaWJlcl9kaXIpOworCWlm IChyZXN0cmljdGVkX2FjY2VzcykKKwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyKHBnX2N0bF9jbWQs ICIgLW8gXCItcCAlc1wiIiwgb3B0LT5zdWJfcG9ydCk7CisjaWYgIWRlZmluZWQoV0lOMzIpCisK KwkJLyoKKwkJICogQW4gZW1wdHkgbGlzdGVuX2FkZHJlc3NlcyBsaXN0IG1lYW5zIHRoZSBzZXJ2 ZXIgZG9lcyBub3QgbGlzdGVuIG9uCisJCSAqIGFueSBJUCBpbnRlcmZhY2VzOyBvbmx5IFVuaXgt ZG9tYWluIHNvY2tldHMgY2FuIGJlIHVzZWQgdG8gY29ubmVjdAorCQkgKiB0byB0aGUgc2VydmVy LiBQcmV2ZW50IGV4dGVybmFsIGNvbm5lY3Rpb25zIHRvIG1pbmltaXplIHRoZSBjaGFuY2UKKwkJ ICogb2YgZmFpbHVyZS4KKwkJICovCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBnX2N0bF9jbWQs ICIgLW8gXCItYyBsaXN0ZW5fYWRkcmVzc2VzPScnIC1jIHVuaXhfc29ja2V0X3Blcm1pc3Npb25z PTA3MDAiKTsKKwkJaWYgKG9wdC0+c29ja2V0X2RpcikKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHBn X2N0bF9jbWQsICIgLWMgdW5peF9zb2NrZXRfZGlyZWN0b3JpZXM9JyVzJyIsCisJCQkJCQkJICBv cHQtPnNvY2tldF9kaXIpOworCQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIocGdfY3RsX2NtZCwgJyIn KTsKKyNlbmRpZgorCX0KKwlpZiAob3B0LT5jb25maWdfZmlsZSAhPSBOVUxMKQorCQlhcHBlbmRQ UUV4cEJ1ZmZlcihwZ19jdGxfY21kLCAiIC1vIFwiLWMgY29uZmlnX2ZpbGU9JXNcIiIsCisJCQkJ CQkgIG9wdC0+Y29uZmlnX2ZpbGUpOworCXBnX2xvZ19kZWJ1ZygicGdfY3RsIGNvbW1hbmQgaXM6 ICVzIiwgcGdfY3RsX2NtZC0+ZGF0YSk7CisJcmMgPSBzeXN0ZW0ocGdfY3RsX2NtZC0+ZGF0YSk7 CisJcGdfY3RsX3N0YXR1cyhwZ19jdGxfY21kLT5kYXRhLCByYyk7CisJc3RhbmRieV9ydW5uaW5n ID0gdHJ1ZTsKKwlkZXN0cm95UFFFeHBCdWZmZXIocGdfY3RsX2NtZCk7CisJcGdfbG9nX2luZm8o InNlcnZlciB3YXMgc3RhcnRlZCIpOworfQorCitzdGF0aWMgdm9pZAorc3RvcF9zdGFuZGJ5X3Nl cnZlcihjb25zdCBjaGFyICpkYXRhZGlyKQoreworCWNoYXIJICAgKnBnX2N0bF9jbWQ7CisJaW50 CQkJcmM7CisKKwlwZ19jdGxfY21kID0gcHNwcmludGYoIlwiJXNcIiBzdG9wIC1EIFwiJXNcIiAt cyIsIHBnX2N0bF9wYXRoLAorCQkJCQkJICBkYXRhZGlyKTsKKwlwZ19sb2dfZGVidWcoInBnX2N0 bCBjb21tYW5kIGlzOiAlcyIsIHBnX2N0bF9jbWQpOworCXJjID0gc3lzdGVtKHBnX2N0bF9jbWQp OworCXBnX2N0bF9zdGF0dXMocGdfY3RsX2NtZCwgcmMpOworCXN0YW5kYnlfcnVubmluZyA9IGZh bHNlOworCXBnX2xvZ19pbmZvKCJzZXJ2ZXIgd2FzIHN0b3BwZWQiKTsKK30KKworLyoKKyAqIFJl dHVybnMgYWZ0ZXIgdGhlIHNlcnZlciBmaW5pc2hlcyB0aGUgcmVjb3ZlcnkgcHJvY2Vzcy4KKyAq CisgKiBJZiByZWNvdmVyeV90aW1lb3V0IG9wdGlvbiBpcyBzZXQsIHRlcm1pbmF0ZSBhYm5vcm1h bGx5IHdpdGhvdXQgZmluaXNoaW5nCisgKiB0aGUgcmVjb3ZlcnkgcHJvY2Vzcy4gQnkgZGVmYXVs dCwgaXQgd2FpdHMgZm9yZXZlci4KKyAqLworc3RhdGljIHZvaWQKK3dhaXRfZm9yX2VuZF9yZWNv dmVyeShjb25zdCBjaGFyICpjb25uaW5mbywgY29uc3Qgc3RydWN0IENyZWF0ZVN1YnNjcmliZXJP cHRpb25zICpvcHQpCit7CisJUEdjb25uCSAgICpjb25uOworCWludAkJCXN0YXR1cyA9IFBPU1RN QVNURVJfU1RJTExfU1RBUlRJTkc7CisJaW50CQkJdGltZXIgPSAwOworCWludAkJCWNvdW50ID0g MDsJCS8qIG51bWJlciBvZiBjb25zZWN1dGl2ZSBjb25uZWN0aW9uIGF0dGVtcHRzICovCisKKyNk ZWZpbmUgTlVNX0NPTk5fQVRURU1QVFMJMTAKKworCXBnX2xvZ19pbmZvKCJ3YWl0aW5nIGZvciB0 aGUgdGFyZ2V0IHNlcnZlciB0byByZWFjaCB0aGUgY29uc2lzdGVudCBzdGF0ZSIpOworCisJY29u biA9IGNvbm5lY3RfZGF0YWJhc2UoY29ubmluZm8sIHRydWUpOworCisJZm9yICg7OykKKwl7CisJ CVBHcmVzdWx0ICAgKnJlczsKKwkJYm9vbAkJaW5fcmVjb3ZlcnkgPSBzZXJ2ZXJfaXNfaW5fcmVj b3ZlcnkoY29ubik7CisKKwkJLyoKKwkJICogRG9lcyB0aGUgcmVjb3ZlcnkgcHJvY2VzcyBmaW5p c2g/IEluIGRyeSBydW4gbW9kZSwgdGhlcmUgaXMgbm8KKwkJICogcmVjb3ZlcnkgbW9kZS4gQmFp bCBvdXQgYXMgdGhlIHJlY292ZXJ5IHByb2Nlc3MgaGFzIGVuZGVkLgorCQkgKi8KKwkJaWYgKCFp bl9yZWNvdmVyeSB8fCBkcnlfcnVuKQorCQl7CisJCQlzdGF0dXMgPSBQT1NUTUFTVEVSX1JFQURZ OworCQkJcmVjb3ZlcnlfZW5kZWQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkg KiBJZiBpdCBpcyBzdGlsbCBpbiByZWNvdmVyeSwgbWFrZSBzdXJlIHRoZSB0YXJnZXQgc2VydmVy IGlzCisJCSAqIGNvbm5lY3RlZCB0byB0aGUgcHJpbWFyeSBzbyBpdCBjYW4gcmVjZWl2ZSB0aGUg cmVxdWlyZWQgV0FMIHRvCisJCSAqIGZpbmlzaCB0aGUgcmVjb3ZlcnkgcHJvY2Vzcy4gSWYgaXQg aXMgZGlzY29ubmVjdGVkIHRyeQorCQkgKiBOVU1fQ09OTl9BVFRFTVBUUyBpbiBhIHJvdyBhbmQg YmFpbCBvdXQgaWYgbm90IHN1Y2NlZWQuCisJCSAqLworCQlyZXMgPSBQUWV4ZWMoY29ubiwKKwkJ CQkJICJTRUxFQ1QgMSBGUk9NIHBnX2NhdGFsb2cucGdfc3RhdF93YWxfcmVjZWl2ZXIiKTsKKwkJ aWYgKFBRbnR1cGxlcyhyZXMpID09IDApCisJCXsKKwkJCWlmICgrK2NvdW50ID4gTlVNX0NPTk5f QVRURU1QVFMpCisJCQl7CisJCQkJc3RvcF9zdGFuZGJ5X3NlcnZlcihzdWJzY3JpYmVyX2Rpcik7 CisJCQkJcGdfbG9nX2Vycm9yKCJzdGFuZGJ5IHNlcnZlciBkaXNjb25uZWN0ZWQgZnJvbSB0aGUg cHJpbWFyeSIpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWVsc2UKKwkJCWNvdW50ID0gMDsJ CQkvKiByZXNldCBjb3VudGVyIGlmIGl0IGNvbm5lY3RzIGFnYWluICovCisKKwkJUFFjbGVhcihy ZXMpOworCisJCS8qIEJhaWwgb3V0IGFmdGVyIHJlY292ZXJ5X3RpbWVvdXQgc2Vjb25kcyBpZiB0 aGlzIG9wdGlvbiBpcyBzZXQgKi8KKwkJaWYgKG9wdC0+cmVjb3ZlcnlfdGltZW91dCA+IDAgJiYg dGltZXIgPj0gb3B0LT5yZWNvdmVyeV90aW1lb3V0KQorCQl7CisJCQlzdG9wX3N0YW5kYnlfc2Vy dmVyKHN1YnNjcmliZXJfZGlyKTsKKwkJCXBnX2xvZ19lcnJvcigicmVjb3ZlcnkgdGltZWQgb3V0 Iik7CisJCQlkaXNjb25uZWN0X2RhdGFiYXNlKGNvbm4sIHRydWUpOworCQl9CisKKwkJLyogS2Vl cCB3YWl0aW5nICovCisJCXBnX3VzbGVlcChXQUlUX0lOVEVSVkFMICogVVNFQ19QRVJfU0VDKTsK KworCQl0aW1lciArPSBXQUlUX0lOVEVSVkFMOworCX0KKworCWRpc2Nvbm5lY3RfZGF0YWJhc2Uo Y29ubiwgZmFsc2UpOworCisJaWYgKHN0YXR1cyA9PSBQT1NUTUFTVEVSX1NUSUxMX1NUQVJUSU5H KQorCQlwZ19mYXRhbCgic2VydmVyIGRpZCBub3QgZW5kIHJlY292ZXJ5Iik7CisKKwlwZ19sb2df aW5mbygidGFyZ2V0IHNlcnZlciByZWFjaGVkIHRoZSBjb25zaXN0ZW50IHN0YXRlIik7CisJcGdf bG9nX2luZm9faGludCgiSWYgcGdfY3JlYXRlc3Vic2NyaWJlciBmYWlscyBhZnRlciB0aGlzIHBv aW50LCB5b3UgbXVzdCByZWNyZWF0ZSB0aGUgcGh5c2ljYWwgcmVwbGljYSBiZWZvcmUgY29udGlu dWluZy4iKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIHB1YmxpY2F0aW9uIHRoYXQgaW5jbHVkZXMg YWxsIHRhYmxlcyBpbiB0aGUgZGF0YWJhc2UuCisgKi8KK3N0YXRpYyB2b2lkCitjcmVhdGVfcHVi bGljYXRpb24oUEdjb25uICpjb25uLCBzdHJ1Y3QgTG9naWNhbFJlcEluZm8gKmRiaW5mbykKK3sK KwlQUUV4cEJ1ZmZlciBzdHIgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCVBHcmVzdWx0ICAgKnJl czsKKwljaGFyCSAgICppcHVibmFtZTsKKwljaGFyCSAgICpzcHVibmFtZTsKKworCUFzc2VydChj b25uICE9IE5VTEwpOworCisJaXB1Ym5hbWUgPSBQUWVzY2FwZUlkZW50aWZpZXIoY29ubiwgZGJp bmZvLT5wdWJuYW1lLCBzdHJsZW4oZGJpbmZvLT5wdWJuYW1lKSk7CisJc3B1Ym5hbWUgPSBQUWVz Y2FwZUxpdGVyYWwoY29ubiwgZGJpbmZvLT5wdWJuYW1lLCBzdHJsZW4oZGJpbmZvLT5wdWJuYW1l KSk7CisKKwkvKiBDaGVjayBpZiB0aGUgcHVibGljYXRpb24gYWxyZWFkeSBleGlzdHMgKi8KKwlh cHBlbmRQUUV4cEJ1ZmZlcihzdHIsCisJCQkJCSAgIlNFTEVDVCAxIEZST00gcGdfY2F0YWxvZy5w Z19wdWJsaWNhdGlvbiAiCisJCQkJCSAgIldIRVJFIHB1Ym5hbWUgPSAlcyIsCisJCQkJCSAgc3B1 Ym5hbWUpOworCXJlcyA9IFBRZXhlYyhjb25uLCBzdHItPmRhdGEpOworCWlmIChQUXJlc3VsdFN0 YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQg bm90IG9idGFpbiBwdWJsaWNhdGlvbiBpbmZvcm1hdGlvbjogJXMiLAorCQkJCQkgUFFyZXN1bHRF cnJvck1lc3NhZ2UocmVzKSk7CisJCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubiwgdHJ1ZSk7CisJ fQorCisJaWYgKFBRbnR1cGxlcyhyZXMpID09IDEpCisJeworCQkvKgorCQkgKiBVbmZvcnR1bmF0 ZWx5LCBpZiBpdCByZWFjaGVzIHRoaXMgY29kZSBwYXRoLCBpdCB3aWxsIGFsd2F5cyBmYWlsCisJ CSAqICh1bmxlc3MgeW91IGRlY2lkZSB0byBjaGFuZ2UgdGhlIGV4aXN0aW5nIHB1YmxpY2F0aW9u IG5hbWUpLiBUaGF0J3MKKwkJICogYmFkIGJ1dCBpdCBpcyB2ZXJ5IHVubGlrZWx5IHRoYXQgdGhl IHVzZXIgd2lsbCBjaG9vc2UgYSBuYW1lIHdpdGgKKwkJICogcGdfY3JlYXRlc3Vic2NyaWJlcl8g cHJlZml4IGZvbGxvd2VkIGJ5IHRoZSBleGFjdCBkYXRhYmFzZSBvaWQgYW5kCisJCSAqIGEgcmFu ZG9tIG51bWJlci4KKwkJICovCisJCXBnX2xvZ19lcnJvcigicHVibGljYXRpb24gXCIlc1wiIGFs cmVhZHkgZXhpc3RzIiwgZGJpbmZvLT5wdWJuYW1lKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIkNv bnNpZGVyIHJlbmFtaW5nIHRoaXMgcHVibGljYXRpb24gYmVmb3JlIGNvbnRpbnVpbmcuIik7CisJ CWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubiwgdHJ1ZSk7CisJfQorCisJUFFjbGVhcihyZXMpOwor CXJlc2V0UFFFeHBCdWZmZXIoc3RyKTsKKworCXBnX2xvZ19pbmZvKCJjcmVhdGluZyBwdWJsaWNh dGlvbiBcIiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiIiwKKwkJCQlkYmluZm8tPnB1Ym5hbWUsIGRi aW5mby0+ZGJuYW1lKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwgIkNSRUFURSBQVUJMSUNB VElPTiAlcyBGT1IgQUxMIFRBQkxFUyIsCisJCQkJCSAgaXB1Ym5hbWUpOworCisJcGdfbG9nX2Rl YnVnKCJjb21tYW5kIGlzOiAlcyIsIHN0ci0+ZGF0YSk7CisKKwlpZiAoIWRyeV9ydW4pCisJewor CQlyZXMgPSBQUWV4ZWMoY29ubiwgc3RyLT5kYXRhKTsKKwkJaWYgKFBRcmVzdWx0U3RhdHVzKHJl cykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3Qg Y3JlYXRlIHB1YmxpY2F0aW9uIFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVzXCI6ICVzIiwKKwkJCQkJ CSBkYmluZm8tPnB1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lLCBQUXJlc3VsdEVycm9yTWVzc2FnZShy ZXMpKTsKKwkJCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubiwgdHJ1ZSk7CisJCX0KKwkJUFFjbGVh cihyZXMpOworCX0KKworCS8qIEZvciBjbGVhbnVwIHB1cnBvc2VzICovCisJZGJpbmZvLT5tYWRl X3B1YmxpY2F0aW9uID0gdHJ1ZTsKKworCXBnX2ZyZWUoaXB1Ym5hbWUpOworCXBnX2ZyZWUoc3B1 Ym5hbWUpOworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihzdHIpOworfQorCisvKgorICogUmVtb3ZlIHB1 YmxpY2F0aW9uIGlmIGl0IGNvdWxkbid0IGZpbmlzaCBhbGwgc3RlcHMuCisgKi8KK3N0YXRpYyB2 b2lkCitkcm9wX3B1YmxpY2F0aW9uKFBHY29ubiAqY29ubiwgc3RydWN0IExvZ2ljYWxSZXBJbmZv ICpkYmluZm8pCit7CisJUFFFeHBCdWZmZXIgc3RyID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlQ R3Jlc3VsdCAgICpyZXM7CisJY2hhcgkgICAqcHVibmFtZTsKKworCUFzc2VydChjb25uICE9IE5V TEwpOworCisJcHVibmFtZSA9IFBRZXNjYXBlSWRlbnRpZmllcihjb25uLCBkYmluZm8tPnB1Ym5h bWUsIHN0cmxlbihkYmluZm8tPnB1Ym5hbWUpKTsKKworCXBnX2xvZ19pbmZvKCJkcm9wcGluZyBw dWJsaWNhdGlvbiBcIiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiIiwKKwkJCQlkYmluZm8tPnB1Ym5h bWUsIGRiaW5mby0+ZGJuYW1lKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwgIkRST1AgUFVC TElDQVRJT04gJXMiLCBwdWJuYW1lKTsKKworCXBnX2xvZ19kZWJ1ZygiY29tbWFuZCBpczogJXMi LCBzdHItPmRhdGEpOworCisJaWYgKCFkcnlfcnVuKQorCXsKKwkJcmVzID0gUFFleGVjKGNvbm4s IHN0ci0+ZGF0YSk7CisJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRf T0spCisJCXsKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGRyb3AgcHVibGljYXRpb24gXCIl c1wiIG9uIGRhdGFiYXNlIFwiJXNcIjogJXMiLAorCQkJCQkJIGRiaW5mby0+cHVibmFtZSwgZGJp bmZvLT5kYm5hbWUsIFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJlcykpOworCQkJZGJpbmZvLT5tYWRl X3B1YmxpY2F0aW9uID0gZmFsc2U7CS8qIGRvbid0IHRyeSBhZ2Fpbi4gKi8KKworCQkJLyoKKwkJ CSAqIERvbid0IGRpc2Nvbm5lY3QgYW5kIGV4aXQgaGVyZS4gVGhpcyByb3V0aW5lIGlzIHVzZWQg YnkgcHJpbWFyeQorCQkJICogKGNsZWFudXAgcHVibGljYXRpb24gLyByZXBsaWNhdGlvbiBzbG90 IGR1ZSB0byBhbiBlcnJvcikgYW5kCisJCQkgKiBzdWJzY3JpYmVyIChyZW1vdmUgdGhlIHJlcGxp Y2F0ZWQgcHVibGljYXRpb25zKS4gSW4gYm90aCBjYXNlcywKKwkJCSAqIGl0IGNhbiBjb250aW51 ZSBhbmQgcHJvdmlkZSBpbnN0cnVjdGlvbnMgZm9yIHRoZSB1c2VyIHRvIHJlbW92ZQorCQkJICog aXQgbGF0ZXIgaWYgY2xlYW51cCBmYWlscy4KKwkJCSAqLworCQl9CisJCVBRY2xlYXIocmVzKTsK Kwl9CisKKwlwZ19mcmVlKHB1Ym5hbWUpOworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihzdHIpOworfQor CisvKgorICogQ3JlYXRlIGEgc3Vic2NyaXB0aW9uIHdpdGggc29tZSBwcmVkZWZpbmVkIG9wdGlv bnMuCisgKgorICogQSByZXBsaWNhdGlvbiBzbG90IHdhcyBhbHJlYWR5IGNyZWF0ZWQgaW4gYSBw cmV2aW91cyBzdGVwLiBMZXQncyB1c2UgaXQuICBJdAorICogaXMgbm90IHJlcXVpcmVkIHRvIGNv cHkgZGF0YS4gVGhlIHN1YnNjcmlwdGlvbiB3aWxsIGJlIGNyZWF0ZWQgYnV0IGl0IHdpbGwKKyAq IG5vdCBiZSBlbmFibGVkIG5vdy4gVGhhdCdzIGJlY2F1c2UgdGhlIHJlcGxpY2F0aW9uIHByb2dy ZXNzIG11c3QgYmUgc2V0IGFuZAorICogdGhlIHJlcGxpY2F0aW9uIG9yaWdpbiBuYW1lIChvbmUg b2YgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cykgY29udGFpbnMgdGhlCisgKiBzdWJzY3JpcHRpb24g T0lEIGluIGl0cyBuYW1lLiBPbmNlIHRoZSBzdWJzY3JpcHRpb24gaXMgY3JlYXRlZCwKKyAqIHNl dF9yZXBsaWNhdGlvbl9wcm9ncmVzcygpIGNhbiBvYnRhaW4gdGhlIGNob3NlbiBvcmlnaW4gbmFt ZSBhbmQgc2V0IHVwIGl0cworICogaW5pdGlhbCBsb2NhdGlvbi4KKyAqLworc3RhdGljIHZvaWQK K2NyZWF0ZV9zdWJzY3JpcHRpb24oUEdjb25uICpjb25uLCBjb25zdCBzdHJ1Y3QgTG9naWNhbFJl cEluZm8gKmRiaW5mbykKK3sKKwlQUUV4cEJ1ZmZlciBzdHIgPSBjcmVhdGVQUUV4cEJ1ZmZlcigp OworCVBHcmVzdWx0ICAgKnJlczsKKwljaGFyCSAgICpwdWJuYW1lOworCWNoYXIJICAgKnN1Ym5h bWU7CisKKwlBc3NlcnQoY29ubiAhPSBOVUxMKTsKKworCXB1Ym5hbWUgPSBQUWVzY2FwZUlkZW50 aWZpZXIoY29ubiwgZGJpbmZvLT5wdWJuYW1lLCBzdHJsZW4oZGJpbmZvLT5wdWJuYW1lKSk7CisJ c3VibmFtZSA9IFBRZXNjYXBlSWRlbnRpZmllcihjb25uLCBkYmluZm8tPnN1Ym5hbWUsIHN0cmxl bihkYmluZm8tPnN1Ym5hbWUpKTsKKworCXBnX2xvZ19pbmZvKCJjcmVhdGluZyBzdWJzY3JpcHRp b24gXCIlc1wiIG9uIGRhdGFiYXNlIFwiJXNcIiIsCisJCQkJZGJpbmZvLT5zdWJuYW1lLCBkYmlu Zm8tPmRibmFtZSk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlcihzdHIsCisJCQkJCSAgIkNSRUFURSBT VUJTQ1JJUFRJT04gJXMgQ09OTkVDVElPTiAnJXMnIFBVQkxJQ0FUSU9OICVzICIKKwkJCQkJICAi V0lUSCAoY3JlYXRlX3Nsb3QgPSBmYWxzZSwgZW5hYmxlZCA9IGZhbHNlLCAiCisJCQkJCSAgInNs b3RfbmFtZSA9ICclcycsIGNvcHlfZGF0YSA9IGZhbHNlKSIsCisJCQkJCSAgc3VibmFtZSwgZGJp bmZvLT5wdWJjb25uaW5mbywgcHVibmFtZSwKKwkJCQkJICBkYmluZm8tPnJlcGxzbG90bmFtZSk7 CisKKwlwZ19sb2dfZGVidWcoImNvbW1hbmQgaXM6ICVzIiwgc3RyLT5kYXRhKTsKKworCWlmICgh ZHJ5X3J1bikKKwl7CisJCXJlcyA9IFBRZXhlYyhjb25uLCBzdHItPmRhdGEpOworCQlpZiAoUFFy ZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19DT01NQU5EX09LKQorCQl7CisJCQlwZ19sb2dfZXJy b3IoImNvdWxkIG5vdCBjcmVhdGUgc3Vic2NyaXB0aW9uIFwiJXNcIiBvbiBkYXRhYmFzZSBcIiVz XCI6ICVzIiwKKwkJCQkJCSBkYmluZm8tPnN1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lLCBQUXJlc3Vs dEVycm9yTWVzc2FnZShyZXMpKTsKKwkJCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubiwgdHJ1ZSk7 CisJCX0KKwkJUFFjbGVhcihyZXMpOworCX0KKworCXBnX2ZyZWUocHVibmFtZSk7CisJcGdfZnJl ZShzdWJuYW1lKTsKKwlkZXN0cm95UFFFeHBCdWZmZXIoc3RyKTsKK30KKworLyoKKyAqIFNldHMg dGhlIHJlcGxpY2F0aW9uIHByb2dyZXNzIHRvIHRoZSBjb25zaXN0ZW50IExTTi4KKyAqCisgKiBU aGUgc3Vic2NyaWJlciBjYXVnaHQgdXAgdG8gdGhlIGNvbnNpc3RlbnQgTFNOIHByb3ZpZGVkIGJ5 IHRoZSBsYXN0CisgKiByZXBsaWNhdGlvbiBzbG90IHRoYXQgd2FzIGNyZWF0ZWQuIFRoZSBnb2Fs IGlzIHRvIHNldCB1cCB0aGUgaW5pdGlhbAorICogbG9jYXRpb24gZm9yIHRoZSBsb2dpY2FsIHJl cGxpY2F0aW9uIHRoYXQgaXMgdGhlIGV4YWN0IExTTiB0aGF0IHRoZQorICogc3Vic2NyaWJlciB3 YXMgcHJvbW90ZWQuIE9uY2UgdGhlIHN1YnNjcmlwdGlvbiBpcyBlbmFibGVkIGl0IHdpbGwgc3Rh cnQKKyAqIHN0cmVhbWluZyBmcm9tIHRoYXQgbG9jYXRpb24gb253YXJkcy4gIEluIGRyeSBydW4g bW9kZSwgdGhlIHN1YnNjcmlwdGlvbiBPSUQKKyAqIGFuZCBMU04gYXJlIHNldCB0byBpbnZhbGlk IHZhbHVlcyBmb3IgcHJpbnRpbmcgcHVycG9zZXMuCisgKi8KK3N0YXRpYyB2b2lkCitzZXRfcmVw bGljYXRpb25fcHJvZ3Jlc3MoUEdjb25uICpjb25uLCBjb25zdCBzdHJ1Y3QgTG9naWNhbFJlcElu Zm8gKmRiaW5mbywgY29uc3QgY2hhciAqbHNuKQoreworCVBRRXhwQnVmZmVyIHN0ciA9IGNyZWF0 ZVBRRXhwQnVmZmVyKCk7CisJUEdyZXN1bHQgICAqcmVzOworCU9pZAkJCXN1Ym9pZDsKKwljaGFy CSAgICpzdWJuYW1lOworCWNoYXIJICAgKmRibmFtZTsKKwljaGFyCSAgICpvcmlnaW5uYW1lOwor CWNoYXIJICAgKmxzbnN0cjsKKworCUFzc2VydChjb25uICE9IE5VTEwpOworCisJc3VibmFtZSA9 IFBRZXNjYXBlTGl0ZXJhbChjb25uLCBkYmluZm8tPnN1Ym5hbWUsIHN0cmxlbihkYmluZm8tPnN1 Ym5hbWUpKTsKKwlkYm5hbWUgPSBQUWVzY2FwZUxpdGVyYWwoY29ubiwgZGJpbmZvLT5kYm5hbWUs IHN0cmxlbihkYmluZm8tPmRibmFtZSkpOworCisJYXBwZW5kUFFFeHBCdWZmZXIoc3RyLAorCQkJ CQkgICJTRUxFQ1Qgcy5vaWQgRlJPTSBwZ19jYXRhbG9nLnBnX3N1YnNjcmlwdGlvbiBzICIKKwkJ CQkJICAiSU5ORVIgSk9JTiBwZ19jYXRhbG9nLnBnX2RhdGFiYXNlIGQgT04gKHMuc3ViZGJpZCA9 IGQub2lkKSAiCisJCQkJCSAgIldIRVJFIHMuc3VibmFtZSA9ICVzIEFORCBkLmRhdG5hbWUgPSAl cyIsCisJCQkJCSAgc3VibmFtZSwgZGJuYW1lKTsKKworCXJlcyA9IFBRZXhlYyhjb25uLCBzdHIt PmRhdGEpOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwl7 CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9idGFpbiBzdWJzY3JpcHRpb24gT0lEOiAlcyIs CisJCQkJCSBQUXJlc3VsdEVycm9yTWVzc2FnZShyZXMpKTsKKwkJZGlzY29ubmVjdF9kYXRhYmFz ZShjb25uLCB0cnVlKTsKKwl9CisKKwlpZiAoUFFudHVwbGVzKHJlcykgIT0gMSAmJiAhZHJ5X3J1 bikKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9idGFpbiBzdWJzY3JpcHRpb24gT0lE OiBnb3QgJWQgcm93cywgZXhwZWN0ZWQgJWQgcm93cyIsCisJCQkJCSBQUW50dXBsZXMocmVzKSwg MSk7CisJCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubiwgdHJ1ZSk7CisJfQorCisJaWYgKGRyeV9y dW4pCisJeworCQlzdWJvaWQgPSBJbnZhbGlkT2lkOworCQlsc25zdHIgPSBwc3ByaW50ZigiJVgv JVgiLCBMU05fRk9STUFUX0FSR1MoKFhMb2dSZWNQdHIpIEludmFsaWRYTG9nUmVjUHRyKSk7CisJ fQorCWVsc2UKKwl7CisJCXN1Ym9pZCA9IHN0cnRvdWwoUFFnZXR2YWx1ZShyZXMsIDAsIDApLCBO VUxMLCAxMCk7CisJCWxzbnN0ciA9IHBzcHJpbnRmKCIlcyIsIGxzbik7CisJfQorCisJUFFjbGVh cihyZXMpOworCisJLyoKKwkgKiBUaGUgb3JpZ2luIG5hbWUgaXMgZGVmaW5lZCBhcyBwZ18ldS4g JXUgaXMgdGhlIHN1YnNjcmlwdGlvbiBPSUQuIFNlZQorCSAqIEFwcGx5V29ya2VyTWFpbigpLgor CSAqLworCW9yaWdpbm5hbWUgPSBwc3ByaW50ZigicGdfJXUiLCBzdWJvaWQpOworCisJcGdfbG9n X2luZm8oInNldHRpbmcgdGhlIHJlcGxpY2F0aW9uIHByb2dyZXNzIChub2RlIG5hbWUgXCIlc1wi IDsgTFNOICVzKSBvbiBkYXRhYmFzZSBcIiVzXCIiLAorCQkJCW9yaWdpbm5hbWUsIGxzbnN0ciwg ZGJpbmZvLT5kYm5hbWUpOworCisJcmVzZXRQUUV4cEJ1ZmZlcihzdHIpOworCWFwcGVuZFBRRXhw QnVmZmVyKHN0ciwKKwkJCQkJICAiU0VMRUNUIHBnX2NhdGFsb2cucGdfcmVwbGljYXRpb25fb3Jp Z2luX2FkdmFuY2UoJyVzJywgJyVzJykiLAorCQkJCQkgIG9yaWdpbm5hbWUsIGxzbnN0cik7CisK KwlwZ19sb2dfZGVidWcoImNvbW1hbmQgaXM6ICVzIiwgc3RyLT5kYXRhKTsKKworCWlmICghZHJ5 X3J1bikKKwl7CisJCXJlcyA9IFBRZXhlYyhjb25uLCBzdHItPmRhdGEpOworCQlpZiAoUFFyZXN1 bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJCXsKKwkJCXBnX2xvZ19lcnJvcigi Y291bGQgbm90IHNldCByZXBsaWNhdGlvbiBwcm9ncmVzcyBmb3IgdGhlIHN1YnNjcmlwdGlvbiBc IiVzXCI6ICVzIiwKKwkJCQkJCSBkYmluZm8tPnN1Ym5hbWUsIFBRcmVzdWx0RXJyb3JNZXNzYWdl KHJlcykpOworCQkJZGlzY29ubmVjdF9kYXRhYmFzZShjb25uLCB0cnVlKTsKKwkJfQorCQlQUWNs ZWFyKHJlcyk7CisJfQorCisJcGdfZnJlZShzdWJuYW1lKTsKKwlwZ19mcmVlKGRibmFtZSk7CisJ cGdfZnJlZShvcmlnaW5uYW1lKTsKKwlwZ19mcmVlKGxzbnN0cik7CisJZGVzdHJveVBRRXhwQnVm ZmVyKHN0cik7Cit9CisKKy8qCisgKiBFbmFibGVzIHRoZSBzdWJzY3JpcHRpb24uCisgKgorICog VGhlIHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRlZCBpbiBhIHByZXZpb3VzIHN0ZXAgYnV0IGl0IHdh cyBkaXNhYmxlZC4gQWZ0ZXIKKyAqIGFkanVzdGluZyB0aGUgaW5pdGlhbCBsb2dpY2FsIHJlcGxp Y2F0aW9uIGxvY2F0aW9uLCBlbmFibGUgdGhlIHN1YnNjcmlwdGlvbi4KKyAqLworc3RhdGljIHZv aWQKK2VuYWJsZV9zdWJzY3JpcHRpb24oUEdjb25uICpjb25uLCBjb25zdCBzdHJ1Y3QgTG9naWNh bFJlcEluZm8gKmRiaW5mbykKK3sKKwlQUUV4cEJ1ZmZlciBzdHIgPSBjcmVhdGVQUUV4cEJ1ZmZl cigpOworCVBHcmVzdWx0ICAgKnJlczsKKwljaGFyCSAgICpzdWJuYW1lOworCisJQXNzZXJ0KGNv bm4gIT0gTlVMTCk7CisKKwlzdWJuYW1lID0gUFFlc2NhcGVJZGVudGlmaWVyKGNvbm4sIGRiaW5m by0+c3VibmFtZSwgc3RybGVuKGRiaW5mby0+c3VibmFtZSkpOworCisJcGdfbG9nX2luZm8oImVu YWJsaW5nIHN1YnNjcmlwdGlvbiBcIiVzXCIgb24gZGF0YWJhc2UgXCIlc1wiIiwKKwkJCQlkYmlu Zm8tPnN1Ym5hbWUsIGRiaW5mby0+ZGJuYW1lKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyKHN0ciwg IkFMVEVSIFNVQlNDUklQVElPTiAlcyBFTkFCTEUiLCBzdWJuYW1lKTsKKworCXBnX2xvZ19kZWJ1 ZygiY29tbWFuZCBpczogJXMiLCBzdHItPmRhdGEpOworCisJaWYgKCFkcnlfcnVuKQorCXsKKwkJ cmVzID0gUFFleGVjKGNvbm4sIHN0ci0+ZGF0YSk7CisJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMp ICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCXsKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGVu YWJsZSBzdWJzY3JpcHRpb24gXCIlc1wiOiAlcyIsCisJCQkJCQkgZGJpbmZvLT5zdWJuYW1lLCBQ UXJlc3VsdEVycm9yTWVzc2FnZShyZXMpKTsKKwkJCWRpc2Nvbm5lY3RfZGF0YWJhc2UoY29ubiwg dHJ1ZSk7CisJCX0KKworCQlQUWNsZWFyKHJlcyk7CisJfQorCisJcGdfZnJlZShzdWJuYW1lKTsK KwlkZXN0cm95UFFFeHBCdWZmZXIoc3RyKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKK3sKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9CisJewor CQl7ImRhdGFiYXNlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdkJ30sCisJCXsicGdkYXRh IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdEJ30sCisJCXsiZHJ5LXJ1biIsIG5vX2FyZ3Vt ZW50LCBOVUxMLCAnbid9LAorCQl7InN1YnNjcmliZXItcG9ydCIsIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCAncCd9LAorCQl7InB1Ymxpc2hlci1zZXJ2ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwg TlVMTCwgJ1AnfSwKKwkJeyJzb2NrZXQtZGlyZWN0b3J5IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5V TEwsICdzJ30sCisJCXsicmVjb3ZlcnktdGltZW91dCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxM LCAndCd9LAorCQl7InN1YnNjcmliZXItdXNlcm5hbWUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVM TCwgJ1UnfSwKKwkJeyJ2ZXJib3NlIiwgbm9fYXJndW1lbnQsIE5VTEwsICd2J30sCisJCXsidmVy c2lvbiIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnVid9LAorCQl7ImhlbHAiLCBub19hcmd1bWVudCwg TlVMTCwgJz8nfSwKKwkJeyJjb25maWctZmlsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAx fSwKKwkJeyJwdWJsaWNhdGlvbiIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAyfSwKKwkJeyJy ZXBsaWNhdGlvbi1zbG90IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDN9LAorCQl7InN1YnNj cmlwdGlvbiIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0fSwKKwkJe05VTEwsIDAsIE5VTEws IDB9CisJfTsKKworCXN0cnVjdCBDcmVhdGVTdWJzY3JpYmVyT3B0aW9ucyBvcHQgPSB7MH07CisK KwlpbnQJCQljOworCWludAkJCW9wdGlvbl9pbmRleDsKKworCWNoYXIJICAgKnB1Yl9iYXNlX2Nv bm5pbmZvOworCWNoYXIJICAgKnN1Yl9iYXNlX2Nvbm5pbmZvOworCWNoYXIJICAgKmRibmFtZV9j b25uaW5mbyA9IE5VTEw7CisKKwl1aW50NjQJCXB1Yl9zeXNpZDsKKwl1aW50NjQJCXN1Yl9zeXNp ZDsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCisJY2hhcgkgICAqY29uc2lzdGVudF9sc247CisK KwljaGFyCQlwaWRmaWxlW01BWFBHUEFUSF07CisKKwlwZ19sb2dnaW5nX2luaXQoYXJndlswXSk7 CisJcGdfbG9nZ2luZ19zZXRfbGV2ZWwoUEdfTE9HX1dBUk5JTkcpOworCXByb2duYW1lID0gZ2V0 X3Byb2duYW1lKGFyZ3ZbMF0pOworCXNldF9wZ2xvY2FsZV9wZ3NlcnZpY2UoYXJndlswXSwgUEdf VEVYVERPTUFJTigicGdfY3JlYXRlc3Vic2NyaWJlciIpKTsKKworCWlmIChhcmdjID4gMSkKKwl7 CisJCWlmIChzdHJjbXAoYXJndlsxXSwgIi0taGVscCIpID09IDAgfHwgc3RyY21wKGFyZ3ZbMV0s ICItPyIpID09IDApCisJCXsKKwkJCXVzYWdlKCk7CisJCQlleGl0KDApOworCQl9CisJCWVsc2Ug aWYgKHN0cmNtcChhcmd2WzFdLCAiLVYiKSA9PSAwCisJCQkJIHx8IHN0cmNtcChhcmd2WzFdLCAi LS12ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJcHV0cygicGdfY3JlYXRlc3Vic2NyaWJlciAoUG9z dGdyZVNRTCkgIiBQR19WRVJTSU9OKTsKKwkJCWV4aXQoMCk7CisJCX0KKwl9CisKKwkvKiBEZWZh dWx0IHNldHRpbmdzICovCisJc3Vic2NyaWJlcl9kaXIgPSBOVUxMOworCW9wdC5jb25maWdfZmls ZSA9IE5VTEw7CisJb3B0LnB1Yl9jb25uaW5mb19zdHIgPSBOVUxMOworCW9wdC5zb2NrZXRfZGly ID0gTlVMTDsKKwlvcHQuc3ViX3BvcnQgPSBERUZBVUxUX1NVQl9QT1JUOworCW9wdC5zdWJfdXNl cm5hbWUgPSBOVUxMOworCW9wdC5kYXRhYmFzZV9uYW1lcyA9IChTaW1wbGVTdHJpbmdMaXN0KXsw fTsKKwlvcHQucmVjb3ZlcnlfdGltZW91dCA9IDA7CisKKwkvKgorCSAqIERvbid0IGFsbG93IGl0 IHRvIGJlIHJ1biBhcyByb290LiBJdCB1c2VzIHBnX2N0bCB3aGljaCBkb2VzIG5vdCBhbGxvdwor CSAqIGl0IGVpdGhlci4KKwkgKi8KKyNpZm5kZWYgV0lOMzIKKwlpZiAoZ2V0ZXVpZCgpID09IDAp CisJeworCQlwZ19sb2dfZXJyb3IoImNhbm5vdCBiZSBleGVjdXRlZCBieSBcInJvb3RcIiIpOwor CQlwZ19sb2dfZXJyb3JfaGludCgiWW91IG11c3QgcnVuICVzIGFzIHRoZSBQb3N0Z3JlU1FMIHN1 cGVydXNlci4iLAorCQkJCQkJICBwcm9nbmFtZSk7CisJCWV4aXQoMSk7CisJfQorI2VuZGlmCisK KwlnZXRfcmVzdHJpY3RlZF90b2tlbigpOworCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJn YywgYXJndiwgImQ6RDpucDpQOnM6dDpVOnYiLAorCQkJCQkJCWxvbmdfb3B0aW9ucywgJm9wdGlv bl9pbmRleCkpICE9IC0xKQorCXsKKwkJc3dpdGNoIChjKQorCQl7CisJCQljYXNlICdkJzoKKwkJ CQlpZiAoIXNpbXBsZV9zdHJpbmdfbGlzdF9tZW1iZXIoJm9wdC5kYXRhYmFzZV9uYW1lcywgb3B0 YXJnKSkKKwkJCQl7CisJCQkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJm9wdC5kYXRhYmFz ZV9uYW1lcywgb3B0YXJnKTsKKwkJCQkJbnVtX2RicysrOworCQkJCX0KKwkJCQllbHNlCisJCQkJ eworCQkJCQlwZ19sb2dfZXJyb3IoImR1cGxpY2F0ZSBkYXRhYmFzZSBcIiVzXCIiLCBvcHRhcmcp OworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgJ0QnOgorCQkJCXN1 YnNjcmliZXJfZGlyID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJY2Fub25pY2FsaXplX3BhdGgo c3Vic2NyaWJlcl9kaXIpOworCQkJCWJyZWFrOworCQkJY2FzZSAnbic6CisJCQkJZHJ5X3J1biA9 IHRydWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdwJzoKKwkJCQlvcHQuc3ViX3BvcnQgPSBwZ19z dHJkdXAob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1AnOgorCQkJCW9wdC5wdWJfY29u bmluZm9fc3RyID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdzJzoK KwkJCQlvcHQuc29ja2V0X2RpciA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWNhbm9uaWNhbGl6 ZV9wYXRoKG9wdC5zb2NrZXRfZGlyKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3QnOgorCQkJCW9w dC5yZWNvdmVyeV90aW1lb3V0ID0gYXRvaShvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAn VSc6CisJCQkJb3B0LnN1Yl91c2VybmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFr OworCQkJY2FzZSAndic6CisJCQkJcGdfbG9nZ2luZ19pbmNyZWFzZV92ZXJib3NpdHkoKTsKKwkJ CQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQlvcHQuY29uZmlnX2ZpbGUgPSBwZ19zdHJkdXAob3B0 YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlpZiAoIXNpbXBsZV9zdHJpbmdfbGlz dF9tZW1iZXIoJm9wdC5wdWJfbmFtZXMsIG9wdGFyZykpCisJCQkJeworCQkJCQlzaW1wbGVfc3Ry aW5nX2xpc3RfYXBwZW5kKCZvcHQucHViX25hbWVzLCBvcHRhcmcpOworCQkJCQludW1fcHVicysr OworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlwZ19sb2dfZXJyb3IoImR1cGxpY2F0ZSBw dWJsaWNhdGlvbiBcIiVzXCIiLCBvcHRhcmcpOworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCQli cmVhazsKKwkJCWNhc2UgMzoKKwkJCQlpZiAoIXNpbXBsZV9zdHJpbmdfbGlzdF9tZW1iZXIoJm9w dC5yZXBsc2xvdF9uYW1lcywgb3B0YXJnKSkKKwkJCQl7CisJCQkJCXNpbXBsZV9zdHJpbmdfbGlz dF9hcHBlbmQoJm9wdC5yZXBsc2xvdF9uYW1lcywgb3B0YXJnKTsKKwkJCQkJbnVtX3JlcGxzbG90 cysrOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlwZ19sb2dfZXJyb3IoImR1cGxpY2F0 ZSByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiIsIG9wdGFyZyk7CisJCQkJCWV4aXQoMSk7CisJCQkJ fQorCQkJCWJyZWFrOworCQkJY2FzZSA0OgorCQkJCWlmICghc2ltcGxlX3N0cmluZ19saXN0X21l bWJlcigmb3B0LnN1Yl9uYW1lcywgb3B0YXJnKSkKKwkJCQl7CisJCQkJCXNpbXBsZV9zdHJpbmdf bGlzdF9hcHBlbmQoJm9wdC5zdWJfbmFtZXMsIG9wdGFyZyk7CisJCQkJCW51bV9zdWJzKys7CisJ CQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCXBnX2xvZ19lcnJvcigiZHVwbGljYXRlIHN1YnNj cmlwdGlvbiBcIiVzXCIiLCBvcHRhcmcpOworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCQlicmVh azsKKwkJCWRlZmF1bHQ6CisJCQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEgY29t cGxhaW50ICovCisJCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBt b3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJCQlleGl0KDEpOworCQl9CisJfQorCisJ LyogQW55IG5vbi1vcHRpb24gYXJndW1lbnRzPyAqLworCWlmIChvcHRpbmQgPCBhcmdjKQorCXsK KwkJcGdfbG9nX2Vycm9yKCJ0b28gbWFueSBjb21tYW5kLWxpbmUgYXJndW1lbnRzIChmaXJzdCBp cyBcIiVzXCIpIiwKKwkJCQkJIGFyZ3Zbb3B0aW5kXSk7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJU cnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4 aXQoMSk7CisJfQorCisJLyogUmVxdWlyZWQgYXJndW1lbnRzICovCisJaWYgKHN1YnNjcmliZXJf ZGlyID09IE5VTEwpCisJeworCQlwZ19sb2dfZXJyb3IoIm5vIHN1YnNjcmliZXIgZGF0YSBkaXJl Y3Rvcnkgc3BlY2lmaWVkIik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBc IiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCisJ LyogSWYgc29ja2V0IGRpcmVjdG9yeSBpcyBub3QgcHJvdmlkZWQsIHVzZSB0aGUgY3VycmVudCBk aXJlY3RvcnkgKi8KKwlpZiAob3B0LnNvY2tldF9kaXIgPT0gTlVMTCkKKwl7CisJCWNoYXIJCWN3 ZFtNQVhQR1BBVEhdOworCisJCWlmICghZ2V0Y3dkKGN3ZCwgTUFYUEdQQVRIKSkKKwkJCXBnX2Zh dGFsKCJjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgZGlyZWN0b3J5Iik7CisJCW9wdC5zb2Nr ZXRfZGlyID0gcGdfc3RyZHVwKGN3ZCk7CisJCWNhbm9uaWNhbGl6ZV9wYXRoKG9wdC5zb2NrZXRf ZGlyKTsKKwl9CisKKwkvKgorCSAqIFBhcnNlIGNvbm5lY3Rpb24gc3RyaW5nLiBCdWlsZCBhIGJh c2UgY29ubmVjdGlvbiBzdHJpbmcgdGhhdCBtaWdodCBiZQorCSAqIHJldXNlZCBieSBtdWx0aXBs ZSBkYXRhYmFzZXMuCisJICovCisJaWYgKG9wdC5wdWJfY29ubmluZm9fc3RyID09IE5VTEwpCisJ eworCQkvKgorCQkgKiBUT0RPIHVzZSBwcmltYXJ5X2Nvbm5pbmZvIChpZiBhdmFpbGFibGUpIGZy b20gc3Vic2NyaWJlciBhbmQKKwkJICogZXh0cmFjdCBwdWJsaXNoZXIgY29ubmVjdGlvbiBzdHJp bmcuIEFzc3VtZSB0aGF0IHRoZXJlIGFyZQorCQkgKiBpZGVudGljYWwgZW50cmllcyBmb3IgcGh5 c2ljYWwgYW5kIGxvZ2ljYWwgcmVwbGljYXRpb24uIElmIHRoZXJlIGlzCisJCSAqIG5vdCwgd2Ug d291bGQgZmFpbCBhbnl3YXkuCisJCSAqLworCQlwZ19sb2dfZXJyb3IoIm5vIHB1Ymxpc2hlciBj b25uZWN0aW9uIHN0cmluZyBzcGVjaWZpZWQiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBc IiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdCgx KTsKKwl9CisJcGdfbG9nX2luZm8oInZhbGlkYXRpbmcgY29ubmVjdGlvbiBzdHJpbmcgb24gcHVi bGlzaGVyIik7CisJcHViX2Jhc2VfY29ubmluZm8gPSBnZXRfYmFzZV9jb25uaW5mbyhvcHQucHVi X2Nvbm5pbmZvX3N0ciwKKwkJCQkJCQkJCQkgICZkYm5hbWVfY29ubmluZm8pOworCWlmIChwdWJf YmFzZV9jb25uaW5mbyA9PSBOVUxMKQorCQlleGl0KDEpOworCisJcGdfbG9nX2luZm8oInZhbGlk YXRpbmcgY29ubmVjdGlvbiBzdHJpbmcgb24gc3Vic2NyaWJlciIpOworCXN1Yl9iYXNlX2Nvbm5p bmZvID0gZ2V0X3N1Yl9jb25uaW5mbygmb3B0KTsKKworCWlmIChvcHQuZGF0YWJhc2VfbmFtZXMu aGVhZCA9PSBOVUxMKQorCXsKKwkJcGdfbG9nX2luZm8oIm5vIGRhdGFiYXNlIHdhcyBzcGVjaWZp ZWQiKTsKKworCQkvKgorCQkgKiBJZiAtLWRhdGFiYXNlIG9wdGlvbiBpcyBub3QgcHJvdmlkZWQs IHRyeSB0byBvYnRhaW4gdGhlIGRibmFtZSBmcm9tCisJCSAqIHRoZSBwdWJsaXNoZXIgY29ubmlu Zm8uIElmIGRibmFtZSBwYXJhbWV0ZXIgaXMgbm90IGF2YWlsYWJsZSwgZXJyb3IKKwkJICogb3V0 LgorCQkgKi8KKwkJaWYgKGRibmFtZV9jb25uaW5mbykKKwkJeworCQkJc2ltcGxlX3N0cmluZ19s aXN0X2FwcGVuZCgmb3B0LmRhdGFiYXNlX25hbWVzLCBkYm5hbWVfY29ubmluZm8pOworCQkJbnVt X2RicysrOworCisJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgXCIlc1wiIHdhcyBleHRyYWN0ZWQg ZnJvbSB0aGUgcHVibGlzaGVyIGNvbm5lY3Rpb24gc3RyaW5nIiwKKwkJCQkJCWRibmFtZV9jb25u aW5mbyk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwZ19sb2dfZXJyb3IoIm5vIGRhdGFiYXNlIG5h bWUgc3BlY2lmaWVkIik7CisJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIg Zm9yIG1vcmUgaW5mb3JtYXRpb24uIiwKKwkJCQkJCQkgIHByb2duYW1lKTsKKwkJCWV4aXQoMSk7 CisJCX0KKwl9CisKKwkvKiBOdW1iZXIgb2Ygb2JqZWN0IG5hbWVzIG11c3QgbWF0Y2ggbnVtYmVy IG9mIGRhdGFiYXNlcyAqLworCWlmIChudW1fcHVicyA+IDAgJiYgbnVtX3B1YnMgIT0gbnVtX2Ri cykKKwl7CisJCXBnX2xvZ19lcnJvcigid3JvbmcgbnVtYmVyIG9mIHB1YmxpY2F0aW9uIG5hbWVz Iik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJOdW1iZXIgb2YgcHVibGljYXRpb24gbmFtZXMgKCVk KSBtdXN0IG1hdGNoIG51bWJlciBvZiBkYXRhYmFzZSBuYW1lcyAoJWQpLiIsCisJCQkJCQkgIG51 bV9wdWJzLCBudW1fZGJzKTsKKwkJZXhpdCgxKTsKKwl9CisJaWYgKG51bV9zdWJzID4gMCAmJiBu dW1fc3VicyAhPSBudW1fZGJzKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJ3cm9uZyBudW1iZXIgb2Yg c3Vic2NyaXB0aW9uIG5hbWVzIik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJOdW1iZXIgb2Ygc3Vi c2NyaXB0aW9uIG5hbWVzICglZCkgbXVzdCBtYXRjaCBudW1iZXIgb2YgZGF0YWJhc2UgbmFtZXMg KCVkKS4iLAorCQkJCQkJICBudW1fc3VicywgbnVtX2Ricyk7CisJCWV4aXQoMSk7CisJfQorCWlm IChudW1fcmVwbHNsb3RzID4gMCAmJiBudW1fcmVwbHNsb3RzICE9IG51bV9kYnMpCisJeworCQlw Z19sb2dfZXJyb3IoIndyb25nIG51bWJlciBvZiByZXBsaWNhdGlvbiBzbG90IG5hbWVzIik7CisJ CXBnX2xvZ19lcnJvcl9oaW50KCJOdW1iZXIgb2YgcmVwbGljYXRpb24gc2xvdCBuYW1lcyAoJWQp IG11c3QgbWF0Y2ggbnVtYmVyIG9mIGRhdGFiYXNlIG5hbWVzICglZCkuIiwKKwkJCQkJCSAgbnVt X3JlcGxzbG90cywgbnVtX2Ricyk7CisJCWV4aXQoMSk7CisJfQorCisJLyogR2V0IHRoZSBhYnNv bHV0ZSBwYXRoIG9mIHBnX2N0bCBhbmQgcGdfcmVzZXR3YWwgb24gdGhlIHN1YnNjcmliZXIgKi8K KwlwZ19jdGxfcGF0aCA9IGdldF9leGVjX3BhdGgoYXJndlswXSwgInBnX2N0bCIpOworCXBnX3Jl c2V0d2FsX3BhdGggPSBnZXRfZXhlY19wYXRoKGFyZ3ZbMF0sICJwZ19yZXNldHdhbCIpOworCisJ LyogUnVkaW1lbnRhcnkgY2hlY2sgZm9yIGEgZGF0YSBkaXJlY3RvcnkgKi8KKwljaGVja19kYXRh X2RpcmVjdG9yeShzdWJzY3JpYmVyX2Rpcik7CisKKwkvKgorCSAqIFN0b3JlIGRhdGFiYXNlIGlu Zm9ybWF0aW9uIGZvciBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIuIEl0IHNob3VsZCBiZQorCSAq IGNhbGxlZCBiZWZvcmUgYXRleGl0KCkgYmVjYXVzZSBpdHMgcmV0dXJuIGlzIHVzZWQgaW4gdGhl CisJICogY2xlYW51cF9vYmplY3RzX2F0ZXhpdCgpLgorCSAqLworCWRiaW5mbyA9IHN0b3JlX3B1 Yl9zdWJfaW5mbygmb3B0LCBwdWJfYmFzZV9jb25uaW5mbywgc3ViX2Jhc2VfY29ubmluZm8pOwor CisJLyogUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBjbGVhbiB1cCBvYmplY3RzIGluIGNhc2Ugb2Yg ZmFpbHVyZSAqLworCWF0ZXhpdChjbGVhbnVwX29iamVjdHNfYXRleGl0KTsKKworCS8qCisJICog Q2hlY2sgaWYgdGhlIHN1YnNjcmliZXIgZGF0YSBkaXJlY3RvcnkgaGFzIHRoZSBzYW1lIHN5c3Rl bSBpZGVudGlmaWVyCisJICogdGhhbiB0aGUgcHVibGlzaGVyIGRhdGEgZGlyZWN0b3J5LgorCSAq LworCXB1Yl9zeXNpZCA9IGdldF9wcmltYXJ5X3N5c2lkKGRiaW5mb1swXS5wdWJjb25uaW5mbyk7 CisJc3ViX3N5c2lkID0gZ2V0X3N0YW5kYnlfc3lzaWQoc3Vic2NyaWJlcl9kaXIpOworCWlmIChw dWJfc3lzaWQgIT0gc3ViX3N5c2lkKQorCQlwZ19mYXRhbCgic3Vic2NyaWJlciBkYXRhIGRpcmVj dG9yeSBpcyBub3QgYSBjb3B5IG9mIHRoZSBzb3VyY2UgZGF0YWJhc2UgY2x1c3RlciIpOworCisJ LyogU3Vic2NyaWJlciBQSUQgZmlsZSAqLworCXNucHJpbnRmKHBpZGZpbGUsIE1BWFBHUEFUSCwg IiVzL3Bvc3RtYXN0ZXIucGlkIiwgc3Vic2NyaWJlcl9kaXIpOworCisJLyoKKwkgKiBUaGUgc3Rh bmRieSBzZXJ2ZXIgbXVzdCBub3QgYmUgcnVubmluZy4gSWYgdGhlIHNlcnZlciBpcyBzdGFydGVk IHVuZGVyCisJICogc2VydmljZSBtYW5hZ2VyIGFuZCBwZ19jcmVhdGVzdWJzY3JpYmVyIHN0b3Bz IGl0LCB0aGUgc2VydmljZSBtYW5hZ2VyCisJICogbWlnaHQgcmVhY3QgdG8gdGhpcyBhY3Rpb24g YW5kIHN0YXJ0IHRoZSBzZXJ2ZXIgYWdhaW4uIFRoZXJlZm9yZSwgcmVmdXNlCisJICogdG8gcHJv Y2VlZCBpZiB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgdG8gYXZvaWQgcG9zc2libGUgZmFpbHVyZXMu CisJICovCisJaWYgKHN0YXQocGlkZmlsZSwgJnN0YXRidWYpID09IDApCisJeworCQlwZ19sb2df ZXJyb3IoInN0YW5kYnkgaXMgdXAgYW5kIHJ1bm5pbmciKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQo IlN0b3AgdGhlIHN0YW5kYnkgYW5kIHRyeSBhZ2Fpbi4iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwkv KgorCSAqIFN0YXJ0IGEgc2hvcnQtbGl2ZWQgc3RhbmRieSBzZXJ2ZXIgd2l0aCB0ZW1wb3Jhcnkg cGFyYW1ldGVycyAocHJvdmlkZWQKKwkgKiBieSBjb21tYW5kLWxpbmUgb3B0aW9ucykuIFRoZSBn b2FsIGlzIHRvIGF2b2lkIGNvbm5lY3Rpb25zIGR1cmluZyB0aGUKKwkgKiB0cmFuc2Zvcm1hdGlv biBzdGVwcy4KKwkgKi8KKwlwZ19sb2dfaW5mbygic3RhcnRpbmcgdGhlIHN0YW5kYnkgd2l0aCBj b21tYW5kLWxpbmUgb3B0aW9ucyIpOworCXN0YXJ0X3N0YW5kYnlfc2VydmVyKCZvcHQsIHRydWUp OworCisJLyogQ2hlY2sgaWYgdGhlIHN0YW5kYnkgc2VydmVyIGlzIHJlYWR5IGZvciBsb2dpY2Fs IHJlcGxpY2F0aW9uICovCisJY2hlY2tfc3Vic2NyaWJlcihkYmluZm8pOworCisJLyoKKwkgKiBD aGVjayBpZiB0aGUgcHJpbWFyeSBzZXJ2ZXIgaXMgcmVhZHkgZm9yIGxvZ2ljYWwgcmVwbGljYXRp b24uIFRoaXMKKwkgKiByb3V0aW5lIGNoZWNrcyBpZiBhIHJlcGxpY2F0aW9uIHNsb3QgaXMgaW4g dXNlIG9uIHByaW1hcnkgc28gaXQgcmVsaWVzCisJICogb24gY2hlY2tfc3Vic2NyaWJlcigpIHRv IG9idGFpbiB0aGUgcHJpbWFyeV9zbG90X25hbWUuIFRoYXQncyB3aHkgaXQgaXMKKwkgKiBjYWxs ZWQgYWZ0ZXIgaXQuCisJICovCisJY2hlY2tfcHVibGlzaGVyKGRiaW5mbyk7CisKKwkvKgorCSAq IFN0b3AgdGhlIHRhcmdldCBzZXJ2ZXIuIFRoZSByZWNvdmVyeSBwcm9jZXNzIHJlcXVpcmVzIHRo YXQgdGhlIHNlcnZlcgorCSAqIHJlYWNoZXMgYSBjb25zaXN0ZW50IHN0YXRlIGJlZm9yZSB0YXJn ZXRpbmcgdGhlIHJlY292ZXJ5IHN0b3AgcG9pbnQuCisJICogTWFrZSBzdXJlIGEgY29uc2lzdGVu dCBzdGF0ZSBpcyByZWFjaGVkIChzdG9wIHRoZSB0YXJnZXQgc2VydmVyCisJICogZ3VhcmFudGVl cyBpdCkgKmJlZm9yZSogY3JlYXRpbmcgdGhlIHJlcGxpY2F0aW9uIHNsb3RzIGluCisJICogc2V0 dXBfcHVibGlzaGVyKCkuCisJICovCisJcGdfbG9nX2luZm8oInN0b3BwaW5nIHRoZSBzdWJzY3Jp YmVyIik7CisJc3RvcF9zdGFuZGJ5X3NlcnZlcihzdWJzY3JpYmVyX2Rpcik7CisKKwkvKgorCSAq IENyZWF0ZSB0aGUgcmVxdWlyZWQgb2JqZWN0cyBmb3IgZWFjaCBkYXRhYmFzZSBvbiBwdWJsaXNo ZXIuIFRoaXMgc3RlcAorCSAqIGlzIGhlcmUgbWFpbmx5IGJlY2F1c2UgaWYgd2Ugc3RvcCB0aGUg c3RhbmRieSB3ZSBjYW5ub3QgdmVyaWZ5IGlmIHRoZQorCSAqIHByaW1hcnkgc2xvdCBpcyBpbiB1 c2UuIFdlIGNvdWxkIHVzZSBhbiBleHRyYSBjb25uZWN0aW9uIGZvciBpdCBidXQgaXQKKwkgKiBk b2Vzbid0IHNlZW0gd29ydGguCisJICovCisJY29uc2lzdGVudF9sc24gPSBzZXR1cF9wdWJsaXNo ZXIoZGJpbmZvKTsKKworCS8qIFdyaXRlIHRoZSByZXF1aXJlZCByZWNvdmVyeSBwYXJhbWV0ZXJz ICovCisJc2V0dXBfcmVjb3ZlcnkoZGJpbmZvLCBzdWJzY3JpYmVyX2RpciwgY29uc2lzdGVudF9s c24pOworCisJLyoKKwkgKiBTdGFydCBzdWJzY3JpYmVyIHNvIHRoZSByZWNvdmVyeSBwYXJhbWV0 ZXJzIHdpbGwgdGFrZSBlZmZlY3QuIFdhaXQKKwkgKiB1bnRpbCBhY2NlcHRpbmcgY29ubmVjdGlv bnMuCisJICovCisJcGdfbG9nX2luZm8oInN0YXJ0aW5nIHRoZSBzdWJzY3JpYmVyIik7CisJc3Rh cnRfc3RhbmRieV9zZXJ2ZXIoJm9wdCwgdHJ1ZSk7CisKKwkvKiBXYWl0aW5nIHRoZSBzdWJzY3Jp YmVyIHRvIGJlIHByb21vdGVkICovCisJd2FpdF9mb3JfZW5kX3JlY292ZXJ5KGRiaW5mb1swXS5z dWJjb25uaW5mbywgJm9wdCk7CisKKwkvKgorCSAqIENyZWF0ZSB0aGUgc3Vic2NyaXB0aW9uIGZv ciBlYWNoIGRhdGFiYXNlIG9uIHN1YnNjcmliZXIuIEl0IGRvZXMgbm90CisJICogZW5hYmxlIGl0 IGltbWVkaWF0ZWx5IGJlY2F1c2UgaXQgbmVlZHMgdG8gYWRqdXN0IHRoZSByZXBsaWNhdGlvbiBz dGFydAorCSAqIHBvaW50IHRvIHRoZSBMU04gcmVwb3J0ZWQgYnkgc2V0dXBfcHVibGlzaGVyKCku ICBJdCBhbHNvIGNsZWFucyB1cAorCSAqIHB1YmxpY2F0aW9ucyBjcmVhdGVkIGJ5IHRoaXMgdG9v bCBhbmQgcmVwbGljYXRpb24gdG8gdGhlIHN0YW5kYnkuCisJICovCisJc2V0dXBfc3Vic2NyaWJl cihkYmluZm8sIGNvbnNpc3RlbnRfbHNuKTsKKworCS8qIFJlbW92ZSBwcmltYXJ5X3Nsb3RfbmFt ZSBpZiBpdCBleGlzdHMgb24gcHJpbWFyeSAqLworCWRyb3BfcHJpbWFyeV9yZXBsaWNhdGlvbl9z bG90KGRiaW5mbywgcHJpbWFyeV9zbG90X25hbWUpOworCisJLyogU3RvcCB0aGUgc3Vic2NyaWJl ciAqLworCXBnX2xvZ19pbmZvKCJzdG9wcGluZyB0aGUgc3Vic2NyaWJlciIpOworCXN0b3Bfc3Rh bmRieV9zZXJ2ZXIoc3Vic2NyaWJlcl9kaXIpOworCisJLyogQ2hhbmdlIHN5c3RlbSBpZGVudGlm aWVyIGZyb20gc3Vic2NyaWJlciAqLworCW1vZGlmeV9zdWJzY3JpYmVyX3N5c2lkKCZvcHQpOwor CisJc3VjY2VzcyA9IHRydWU7CisKKwlwZ19sb2dfaW5mbygiRG9uZSEiKTsKKworCXJldHVybiAw OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQwX3BnX2NyZWF0ZXN1 YnNjcmliZXIucGwgYi9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wNDBfcGdfY3JlYXRlc3Vic2Ny aWJlci5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4yNDMxNTM2NDVh Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDQwX3BnX2NyZWF0 ZXN1YnNjcmliZXIucGwKQEAgLTAsMCArMSwzMjcgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI0LCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjCisjIFRlc3QgdXNpbmcgYSBz dGFuZGJ5IHNlcnZlciBhcyB0aGUgc3Vic2NyaWJlci4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJu aW5ncyBGQVRBTCA9PiAnYWxsJzsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNl IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK3Byb2dyYW1faGVs cF9vaygncGdfY3JlYXRlc3Vic2NyaWJlcicpOworcHJvZ3JhbV92ZXJzaW9uX29rKCdwZ19jcmVh dGVzdWJzY3JpYmVyJyk7Citwcm9ncmFtX29wdGlvbnNfaGFuZGxpbmdfb2soJ3BnX2NyZWF0ZXN1 YnNjcmliZXInKTsKKworbXkgJGRhdGFkaXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGVt cGRpcjsKKworIworIyBUZXN0IG1hbmRhdG9yeSBvcHRpb25zCitjb21tYW5kX2ZhaWxzKFsncGdf Y3JlYXRlc3Vic2NyaWJlciddLAorCSdubyBzdWJzY3JpYmVyIGRhdGEgZGlyZWN0b3J5IHNwZWNp ZmllZCcpOworY29tbWFuZF9mYWlscygKKwlbICdwZ19jcmVhdGVzdWJzY3JpYmVyJywgJy0tcGdk YXRhJywgJGRhdGFkaXIgXSwKKwknbm8gcHVibGlzaGVyIGNvbm5lY3Rpb24gc3RyaW5nIHNwZWNp ZmllZCcpOworY29tbWFuZF9mYWlscygKKwlbCisJCSdwZ19jcmVhdGVzdWJzY3JpYmVyJywgJy0t dmVyYm9zZScsCisJCSctLXBnZGF0YScsICRkYXRhZGlyLAorCQknLS1wdWJsaXNoZXItc2VydmVy JywgJ3BvcnQ9NTQzMicKKwldLAorCSdubyBkYXRhYmFzZSBuYW1lIHNwZWNpZmllZCcpOworY29t bWFuZF9mYWlscygKKwlbCisJCSdwZ19jcmVhdGVzdWJzY3JpYmVyJywgJy0tdmVyYm9zZScsCisJ CSctLXBnZGF0YScsICRkYXRhZGlyLAorCQknLS1wdWJsaXNoZXItc2VydmVyJywgJ3BvcnQ9NTQz MicsCisJCSctLWRhdGFiYXNlJywgJ3BnMScsCisJCSctLWRhdGFiYXNlJywgJ3BnMScKKwldLAor CSdkdXBsaWNhdGUgZGF0YWJhc2UgbmFtZScpOworY29tbWFuZF9mYWlscygKKwlbCisJCSdwZ19j cmVhdGVzdWJzY3JpYmVyJywgJy0tdmVyYm9zZScsCisJCSctLXBnZGF0YScsICRkYXRhZGlyLAor CQknLS1wdWJsaXNoZXItc2VydmVyJywgJ3BvcnQ9NTQzMicsCisJCSctLXB1YmxpY2F0aW9uJywg J2ZvbzEnLAorCQknLS1wdWJsaWNhdGlvbicsICdmb28xJywKKwkJJy0tZGF0YWJhc2UnLCAncGcx JywKKwkJJy0tZGF0YWJhc2UnLCAncGcyJworCV0sCisJJ2R1cGxpY2F0ZSBwdWJsaWNhdGlvbiBu YW1lJyk7Citjb21tYW5kX2ZhaWxzKAorCVsKKwkJJ3BnX2NyZWF0ZXN1YnNjcmliZXInLCAnLS12 ZXJib3NlJywKKwkJJy0tcGdkYXRhJywgJGRhdGFkaXIsCisJCSctLXB1Ymxpc2hlci1zZXJ2ZXIn LCAncG9ydD01NDMyJywKKwkJJy0tcHVibGljYXRpb24nLCAnZm9vMScsCisJCSctLWRhdGFiYXNl JywgJ3BnMScsCisJCSctLWRhdGFiYXNlJywgJ3BnMicKKwldLAorCSd3cm9uZyBudW1iZXIgb2Yg cHVibGljYXRpb24gbmFtZXMnKTsKK2NvbW1hbmRfZmFpbHMoCisJWworCQkncGdfY3JlYXRlc3Vi c2NyaWJlcicsICctLXZlcmJvc2UnLAorCQknLS1wZ2RhdGEnLCAkZGF0YWRpciwKKwkJJy0tcHVi bGlzaGVyLXNlcnZlcicsICdwb3J0PTU0MzInLAorCQknLS1wdWJsaWNhdGlvbicsICdmb28xJywK KwkJJy0tcHVibGljYXRpb24nLCAnZm9vMicsCisJCSctLXN1YnNjcmlwdGlvbicsICdiYXIxJywK KwkJJy0tZGF0YWJhc2UnLCAncGcxJywKKwkJJy0tZGF0YWJhc2UnLCAncGcyJworCV0sCisJJ3dy b25nIG51bWJlciBvZiBzdWJzY3JpcHRpb24gbmFtZXMnKTsKK2NvbW1hbmRfZmFpbHMoCisJWwor CQkncGdfY3JlYXRlc3Vic2NyaWJlcicsICctLXZlcmJvc2UnLAorCQknLS1wZ2RhdGEnLCAkZGF0 YWRpciwKKwkJJy0tcHVibGlzaGVyLXNlcnZlcicsICdwb3J0PTU0MzInLAorCQknLS1wdWJsaWNh dGlvbicsICdmb28xJywKKwkJJy0tcHVibGljYXRpb24nLCAnZm9vMicsCisJCSctLXN1YnNjcmlw dGlvbicsICdiYXIxJywKKwkJJy0tc3Vic2NyaXB0aW9uJywgJ2JhcjInLAorCQknLS1yZXBsaWNh dGlvbi1zbG90JywgJ2JhejEnLAorCQknLS1kYXRhYmFzZScsICdwZzEnLAorCQknLS1kYXRhYmFz ZScsICdwZzInCisJXSwKKwknd3JvbmcgbnVtYmVyIG9mIHJlcGxpY2F0aW9uIHNsb3QgbmFtZXMn KTsKKworIyBTZXQgdXAgbm9kZSBQIGFzIHByaW1hcnkKK215ICRub2RlX3AgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGVfcCcpOworJG5vZGVfcC0+aW5pdChhbGxvd3Nfc3Ry ZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wLT5zdGFydDsKKworIyBTZXQgdXAgbm9kZSBG IGFzIGFib3V0LXRvLWZhaWwgbm9kZQorIyBGb3JjZSBpdCB0byBpbml0aWFsaXplIGEgbmV3IGNs dXN0ZXIgaW5zdGVhZCBvZiBjb3B5aW5nIGEKKyMgcHJldmlvdXNseSBpbml0ZGInZCBjbHVzdGVy LiBOZXcgY2x1c3RlciBoYXMgYSBkaWZmZXJlbnQgc3lzdGVtIGlkZW50aWZpZXIgc28KKyMgd2Ug Y2FuIHRlc3QgaWYgdGhlIHRhcmdldCBjbHVzdGVyIGlzIGEgY29weSBvZiB0aGUgc291cmNlIGNs dXN0ZXIuCitteSAkbm9kZV9mID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2Rl X2YnKTsKKyRub2RlX2YtPmluaXQoZm9yY2VfaW5pdGRiID0+IDEsIGFsbG93c19zdHJlYW1pbmcg PT4gJ2xvZ2ljYWwnKTsKKworIyBPbiBub2RlIFAKKyMgLSBjcmVhdGUgZGF0YWJhc2VzCisjIC0g Y3JlYXRlIHRlc3QgdGFibGVzCisjIC0gaW5zZXJ0IGEgcm93CisjIC0gY3JlYXRlIGEgcGh5c2lj YWwgcmVwbGljYXRpb24gc2xvdAorJG5vZGVfcC0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHEo CisJQ1JFQVRFIERBVEFCQVNFIHBnMTsKKwlDUkVBVEUgREFUQUJBU0UgcGcyOworKSk7Ciskbm9k ZV9wLT5zYWZlX3BzcWwoJ3BnMScsICdDUkVBVEUgVEFCTEUgdGJsMSAoYSB0ZXh0KScpOworJG5v ZGVfcC0+c2FmZV9wc3FsKCdwZzEnLCAiSU5TRVJUIElOVE8gdGJsMSBWQUxVRVMoJ2ZpcnN0IHJv dycpIik7Ciskbm9kZV9wLT5zYWZlX3BzcWwoJ3BnMicsICdDUkVBVEUgVEFCTEUgdGJsMiAoYSB0 ZXh0KScpOworbXkgJHNsb3RuYW1lID0gJ3BoeXNpY2FsX3Nsb3QnOworJG5vZGVfcC0+c2FmZV9w c3FsKCdwZzInLAorCSJTRUxFQ1QgcGdfY3JlYXRlX3BoeXNpY2FsX3JlcGxpY2F0aW9uX3Nsb3Qo JyRzbG90bmFtZScpIik7CisKKyMgU2V0IHVwIG5vZGUgUyBhcyBzdGFuZGJ5IGxpbmtpbmcgdG8g bm9kZSBQCiskbm9kZV9wLT5iYWNrdXAoJ2JhY2t1cF8xJyk7CitteSAkbm9kZV9zID0gUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2RlX3MnKTsKKyRub2RlX3MtPmluaXRfZnJvbV9i YWNrdXAoJG5vZGVfcCwgJ2JhY2t1cF8xJywgaGFzX3N0cmVhbWluZyA9PiAxKTsKKyRub2RlX3Mt PmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcVsKK3ByaW1hcnlfc2xvdF9uYW1l ID0gJyRzbG90bmFtZScKK10pOworJG5vZGVfcy0+c2V0X3N0YW5kYnlfbW9kZSgpOworJG5vZGVf cy0+c3RhcnQ7CisKKyMgUnVuIHBnX2NyZWF0ZXN1YnNjcmliZXIgb24gYWJvdXQtdG8tZmFpbCBu b2RlIEYKK2NvbW1hbmRfZmFpbHMoCisJWworCQkncGdfY3JlYXRlc3Vic2NyaWJlcicsICctLXZl cmJvc2UnLAorCQknLS1wZ2RhdGEnLCAkbm9kZV9mLT5kYXRhX2RpciwKKwkJJy0tcHVibGlzaGVy LXNlcnZlcicsICRub2RlX3AtPmNvbm5zdHIoJ3BnMScpLAorCQknLS1zb2NrZXQtZGlyZWN0b3J5 JywgJG5vZGVfZi0+aG9zdCwKKwkJJy0tc3Vic2NyaWJlci1wb3J0JywgJG5vZGVfZi0+cG9ydCwK KwkJJy0tZGF0YWJhc2UnLCAncGcxJywKKwkJJy0tZGF0YWJhc2UnLCAncGcyJworCV0sCisJJ3N1 YnNjcmliZXIgZGF0YSBkaXJlY3RvcnkgaXMgbm90IGEgY29weSBvZiB0aGUgc291cmNlIGRhdGFi YXNlIGNsdXN0ZXInKTsKKworIyBTZXQgdXAgbm9kZSBDIGFzIHN0YW5kYnkgbGlua2luZyB0byBu b2RlIFMKKyRub2RlX3MtPmJhY2t1cCgnYmFja3VwXzInKTsKK215ICRub2RlX2MgPSBQb3N0Z3Jl U1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGVfYycpOworJG5vZGVfYy0+aW5pdF9mcm9tX2Jh Y2t1cCgkbm9kZV9zLCAnYmFja3VwXzInLCBoYXNfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfYy0+ YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdwcmltYXJ5X3Nsb3RfbmFtZScsIHVuZGVm KTsKKyRub2RlX2MtPnNldF9zdGFuZGJ5X21vZGUoKTsKKworIyBSdW4gcGdfY3JlYXRlc3Vic2Ny aWJlciBvbiBub2RlIEMgKFAgLT4gUyAtPiBDKQorY29tbWFuZF9mYWlscygKKwlbCisJCSdwZ19j cmVhdGVzdWJzY3JpYmVyJywgJy0tdmVyYm9zZScsCisJCSctLWRyeS1ydW4nLCAnLS1wZ2RhdGEn LAorCQkkbm9kZV9jLT5kYXRhX2RpciwgJy0tcHVibGlzaGVyLXNlcnZlcicsCisJCSRub2RlX3Mt PmNvbm5zdHIoJ3BnMScpLAorCQknLS1zb2NrZXQtZGlyZWN0b3J5JywgJG5vZGVfYy0+aG9zdCwK KwkJJy0tc3Vic2NyaWJlci1wb3J0JywgJG5vZGVfYy0+cG9ydCwKKwkJJy0tZGF0YWJhc2UnLCAn cGcxJywKKwkJJy0tZGF0YWJhc2UnLCAncGcyJworCV0sCisJJ3ByaW1hcnkgc2VydmVyIGlzIGlu IHJlY292ZXJ5Jyk7CisKKyMgSW5zZXJ0IGFub3RoZXIgcm93IG9uIG5vZGUgUCBhbmQgd2FpdCBu b2RlIFMgdG8gY2F0Y2ggdXAKKyRub2RlX3AtPnNhZmVfcHNxbCgncGcxJywgIklOU0VSVCBJTlRP IHRibDEgVkFMVUVTKCdzZWNvbmQgcm93JykiKTsKKyRub2RlX3AtPndhaXRfZm9yX3JlcGxheV9j YXRjaHVwKCRub2RlX3MpOworCisjIENoZWNrIHNvbWUgdW5tZXQgY29uZGl0aW9ucyBvbiBub2Rl IFAKKyRub2RlX3AtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCBxeword2FsX2xldmVs ID0gcmVwbGljYQorbWF4X3JlcGxpY2F0aW9uX3Nsb3RzID0gMQorbWF4X3dhbF9zZW5kZXJzID0g MQorbWF4X3dvcmtlcl9wcm9jZXNzZXMgPSAyCit9KTsKKyRub2RlX3AtPnJlc3RhcnQ7Ciskbm9k ZV9zLT5zdG9wOworY29tbWFuZF9mYWlscygKKwlbCisJCSdwZ19jcmVhdGVzdWJzY3JpYmVyJywg Jy0tdmVyYm9zZScsCisJCSctLWRyeS1ydW4nLCAnLS1wZ2RhdGEnLAorCQkkbm9kZV9zLT5kYXRh X2RpciwgJy0tcHVibGlzaGVyLXNlcnZlcicsCisJCSRub2RlX3AtPmNvbm5zdHIoJ3BnMScpLAor CQknLS1zb2NrZXQtZGlyZWN0b3J5JywgJG5vZGVfcy0+aG9zdCwKKwkJJy0tc3Vic2NyaWJlci1w b3J0JywgJG5vZGVfcy0+cG9ydCwKKwkJJy0tZGF0YWJhc2UnLCAncGcxJywKKwkJJy0tZGF0YWJh c2UnLCAncGcyJworCV0sCisJJ3ByaW1hcnkgY29udGFpbnMgdW5tZXQgY29uZGl0aW9ucyBvbiBu b2RlIFAnKTsKKyMgUmVzdG9yZSBkZWZhdWx0IHNldHRpbmdzIGhlcmUgYnV0IG9ubHkgYXBwbHkg aXQgYWZ0ZXIgdGVzdGluZyBzdGFuZGJ5LiBTb21lCisjIHN0YW5kYnkgc2V0dGluZ3Mgc2hvdWxk IG5vdCBiZSBhIGxvd2VyIHNldHRpbmcgdGhhbiBvbiB0aGUgcHJpbWFyeS4KKyRub2RlX3AtPmFw cGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCBxeword2FsX2xldmVsID0gbG9naWNhbAorbWF4 X3JlcGxpY2F0aW9uX3Nsb3RzID0gMTAKK21heF93YWxfc2VuZGVycyA9IDEwCittYXhfd29ya2Vy X3Byb2Nlc3NlcyA9IDgKK30pOworCisjIENoZWNrIHNvbWUgdW5tZXQgY29uZGl0aW9ucyBvbiBu b2RlIFMKKyRub2RlX3MtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCBxeworbWF4X3Jl cGxpY2F0aW9uX3Nsb3RzID0gMQorbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VycyA9IDEK K21heF93b3JrZXJfcHJvY2Vzc2VzID0gMgorfSk7Citjb21tYW5kX2ZhaWxzKAorCVsKKwkJJ3Bn X2NyZWF0ZXN1YnNjcmliZXInLCAnLS12ZXJib3NlJywKKwkJJy0tZHJ5LXJ1bicsICctLXBnZGF0 YScsCisJCSRub2RlX3MtPmRhdGFfZGlyLCAnLS1wdWJsaXNoZXItc2VydmVyJywKKwkJJG5vZGVf cC0+Y29ubnN0cigncGcxJyksCisJCSctLXNvY2tldC1kaXJlY3RvcnknLCAkbm9kZV9zLT5ob3N0 LAorCQknLS1zdWJzY3JpYmVyLXBvcnQnLCAkbm9kZV9zLT5wb3J0LAorCQknLS1kYXRhYmFzZScs ICdwZzEnLAorCQknLS1kYXRhYmFzZScsICdwZzInCisJXSwKKwknc3RhbmRieSBjb250YWlucyB1 bm1ldCBjb25kaXRpb25zIG9uIG5vZGUgUycpOworJG5vZGVfcy0+YXBwZW5kX2NvbmYoJ3Bvc3Rn cmVzcWwuY29uZicsIHF7CittYXhfcmVwbGljYXRpb25fc2xvdHMgPSAxMAorbWF4X2xvZ2ljYWxf cmVwbGljYXRpb25fd29ya2VycyA9IDQKK21heF93b3JrZXJfcHJvY2Vzc2VzID0gOAorfSk7Cisj IFJlc3RvcmUgZGVmYXVsdCBzZXR0aW5ncyBvbiBib3RoIHNlcnZlcnMKKyRub2RlX3AtPnJlc3Rh cnQ7CisKKyMgZHJ5IHJ1biBtb2RlIG9uIG5vZGUgUworY29tbWFuZF9vaygKKwlbCisJCSdwZ19j cmVhdGVzdWJzY3JpYmVyJywgJy0tdmVyYm9zZScsCisJCSctLWRyeS1ydW4nLCAnLS1wZ2RhdGEn LAorCQkkbm9kZV9zLT5kYXRhX2RpciwgJy0tcHVibGlzaGVyLXNlcnZlcicsCisJCSRub2RlX3At PmNvbm5zdHIoJ3BnMScpLAorCQknLS1zb2NrZXQtZGlyZWN0b3J5JywgJG5vZGVfcy0+aG9zdCwK KwkJJy0tc3Vic2NyaWJlci1wb3J0JywgJG5vZGVfcy0+cG9ydCwKKwkJJy0tcHVibGljYXRpb24n LCAncHViMScsCisJCSctLXB1YmxpY2F0aW9uJywgJ3B1YjInLAorCQknLS1zdWJzY3JpcHRpb24n LCAnc3ViMScsCisJCSctLXN1YnNjcmlwdGlvbicsICdzdWIyJywKKwkJJy0tZGF0YWJhc2UnLCAn cGcxJywKKwkJJy0tZGF0YWJhc2UnLCAncGcyJworCV0sCisJJ3J1biBwZ19jcmVhdGVzdWJzY3Jp YmVyIC0tZHJ5LXJ1biBvbiBub2RlIFMnKTsKKworIyBDaGVjayBpZiBub2RlIFMgaXMgc3RpbGwg YSBzdGFuZGJ5Ciskbm9kZV9zLT5zdGFydDsKK2lzKCRub2RlX3MtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAnU0VMRUNUIHBnX2NhdGFsb2cucGdfaXNfaW5fcmVjb3ZlcnkoKScpLAorCSd0JywgJ3N0 YW5kYnkgaXMgaW4gcmVjb3ZlcnknKTsKKyRub2RlX3MtPnN0b3A7CisKKyMgcGdfY3JlYXRlc3Vi c2NyaWJlciBjYW4gcnVuIHdpdGhvdXQgLS1kYXRhYmFzZXMgb3B0aW9uCitjb21tYW5kX29rKAor CVsKKwkJJ3BnX2NyZWF0ZXN1YnNjcmliZXInLCAnLS12ZXJib3NlJywKKwkJJy0tZHJ5LXJ1bics ICctLXBnZGF0YScsCisJCSRub2RlX3MtPmRhdGFfZGlyLCAnLS1wdWJsaXNoZXItc2VydmVyJywK KwkJJG5vZGVfcC0+Y29ubnN0cigncGcxJyksCisJCSctLXNvY2tldC1kaXJlY3RvcnknLCAkbm9k ZV9zLT5ob3N0LAorCQknLS1zdWJzY3JpYmVyLXBvcnQnLCAkbm9kZV9zLT5wb3J0LAorCQknLS1y ZXBsaWNhdGlvbi1zbG90JywgJ3JlcGxzbG90MScKKwldLAorCSdydW4gcGdfY3JlYXRlc3Vic2Ny aWJlciB3aXRob3V0IC0tZGF0YWJhc2VzJyk7CisKKyMgUnVuIHBnX2NyZWF0ZXN1YnNjcmliZXIg b24gbm9kZSBTCitjb21tYW5kX29rKAorCVsKKwkJJ3BnX2NyZWF0ZXN1YnNjcmliZXInLCAnLS12 ZXJib3NlJywKKwkJJy0tdmVyYm9zZScsICctLXBnZGF0YScsCisJCSRub2RlX3MtPmRhdGFfZGly LCAnLS1wdWJsaXNoZXItc2VydmVyJywKKwkJJG5vZGVfcC0+Y29ubnN0cigncGcxJyksCisJCSct LXNvY2tldC1kaXJlY3RvcnknLCAkbm9kZV9zLT5ob3N0LAorCQknLS1zdWJzY3JpYmVyLXBvcnQn LCAkbm9kZV9zLT5wb3J0LAorCQknLS1wdWJsaWNhdGlvbicsICdwdWIxJywKKwkJJy0tcHVibGlj YXRpb24nLCAnUHViMicsCisJCSctLXJlcGxpY2F0aW9uLXNsb3QnLCAncmVwbHNsb3QxJywKKwkJ Jy0tcmVwbGljYXRpb24tc2xvdCcsICdyZXBsc2xvdDInLAorCQknLS1kYXRhYmFzZScsICdwZzEn LAorCQknLS1kYXRhYmFzZScsICdwZzInCisJXSwKKwkncnVuIHBnX2NyZWF0ZXN1YnNjcmliZXIg b24gbm9kZSBTJyk7CisKKyMgQ29uZmlybSB0aGUgcGh5c2ljYWwgcmVwbGljYXRpb24gc2xvdCBo YXMgYmVlbiByZW1vdmVkCitteSAkcmVzdWx0ID0gJG5vZGVfcC0+c2FmZV9wc3FsKCdwZzEnLAor CSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90cyBXSEVSRSBzbG90X25h bWUgPSAnJHNsb3RuYW1lJyIKKyk7CitpcygkcmVzdWx0LCBxcSgwKSwKKwkndGhlIHBoeXNpY2Fs IHJlcGxpY2F0aW9uIHNsb3QgdXNlZCBhcyBwcmltYXJ5X3Nsb3RfbmFtZSBoYXMgYmVlbiByZW1v dmVkJworKTsKKworIyBJbnNlcnQgcm93cyBvbiBQCiskbm9kZV9wLT5zYWZlX3BzcWwoJ3BnMScs ICJJTlNFUlQgSU5UTyB0YmwxIFZBTFVFUygndGhpcmQgcm93JykiKTsKKyRub2RlX3AtPnNhZmVf cHNxbCgncGcyJywgIklOU0VSVCBJTlRPIHRibDIgVkFMVUVTKCdyb3cgMScpIik7CisKKyMgU3Rh cnQgc3Vic2NyaWJlcgorJG5vZGVfcy0+c3RhcnQ7CisKKyMgR2V0IHN1YnNjcmlwdGlvbiBuYW1l cworJHJlc3VsdCA9ICRub2RlX3MtPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlTRUxF Q1Qgc3VibmFtZSBGUk9NIHBnX3N1YnNjcmlwdGlvbiBXSEVSRSBzdWJuYW1lIH4gJ15wZ19jcmVh dGVzdWJzY3JpYmVyXycKKykpOworbXkgQHN1Ym5hbWVzID0gc3BsaXQoIlxuIiwgJHJlc3VsdCk7 CisKKyMgV2FpdCBzdWJzY3JpYmVyIHRvIGNhdGNoIHVwCiskbm9kZV9zLT53YWl0X2Zvcl9zdWJz Y3JpcHRpb25fc3luYygkbm9kZV9wLCAkc3VibmFtZXNbMF0pOworJG5vZGVfcy0+d2FpdF9mb3Jf c3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfcCwgJHN1Ym5hbWVzWzFdKTsKKworIyBDaGVjayByZXN1 bHQgb24gZGF0YWJhc2UgcGcxCiskcmVzdWx0ID0gJG5vZGVfcy0+c2FmZV9wc3FsKCdwZzEnLCAn U0VMRUNUICogRlJPTSB0YmwxJyk7CitpcyggJHJlc3VsdCwgcXEoZmlyc3Qgcm93CitzZWNvbmQg cm93Cit0aGlyZCByb3cpLAorCSdsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtzIG9uIGRhdGFiYXNl IHBnMScpOworCisjIENoZWNrIHJlc3VsdCBvbiBkYXRhYmFzZSBwZzIKKyRyZXN1bHQgPSAkbm9k ZV9zLT5zYWZlX3BzcWwoJ3BnMicsICdTRUxFQ1QgKiBGUk9NIHRibDInKTsKK2lzKCRyZXN1bHQs IHFxKHJvdyAxKSwgJ2xvZ2ljYWwgcmVwbGljYXRpb24gd29ya3Mgb24gZGF0YWJhc2UgcGcyJyk7 CisKKyMgRGlmZmVyZW50IHN5c3RlbSBpZGVudGlmaWVyPworbXkgJHN5c2lkX3AgPSAkbm9kZV9w LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwknU0VMRUNUIHN5c3RlbV9pZGVudGlmaWVyIEZST00g cGdfY29udHJvbF9zeXN0ZW0oKScpOworbXkgJHN5c2lkX3MgPSAkbm9kZV9zLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwknU0VMRUNUIHN5c3RlbV9pZGVudGlmaWVyIEZST00gcGdfY29udHJvbF9z eXN0ZW0oKScpOworb2soJHN5c2lkX3AgIT0gJHN5c2lkX3MsICdzeXN0ZW0gaWRlbnRpZmllciB3 YXMgY2hhbmdlZCcpOworCisjIGNsZWFuIHVwCiskbm9kZV9wLT50ZWFyZG93bl9ub2RlOworJG5v ZGVfcy0+dGVhcmRvd25fbm9kZTsKKyRub2RlX2YtPnRlYXJkb3duX25vZGU7CisKK2RvbmVfdGVz dGluZygpOwotLSAKMi4zNC4xCgo= --00000000000081e2450614289f62--