Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p82nj-0003U6-I5 for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Dec 2022 17:22:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p82nh-0002Yj-NR for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Dec 2022 17:22:41 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p82ng-0002Ya-Rr for pgsql-hackers@lists.postgresql.org; Wed, 21 Dec 2022 17:22:41 +0000 Received: from mail-oi1-x230.google.com ([2607:f8b0:4864:20::230]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1p82nR-00027U-GA for pgsql-hackers@lists.postgresql.org; Wed, 21 Dec 2022 17:22:40 +0000 Received: by mail-oi1-x230.google.com with SMTP id r11so13862863oie.13 for ; Wed, 21 Dec 2022 09:22:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=SX+/6qUf2NKPkarJKf8Z0RO4zkLmFOn0CJ7ZlbG+44w=; b=Zqg7NGxvvLk9lgQ/MPoRClQZxXcVjT/P9/rhCsL4XoX73WkD5SiErI85+dzKu88lvL Xc4WkMKCR9duPGD4/LrXBxCEu/SN5AP0KBBVwQZKAUIHdCvnyukP3yotAiSEB8wEypIB /KmpFqhUJSRCB7Ke+3KMp9tUz1TAgmvRNL8GMaVHrA31qaEJPJuBPVrcSs2bOaICjhaK T4ykVsRm7wpZctKf6Yiu89gu5nkk6U5jvwXPMROxim4gkoRNrlEsJZy4KxGK0wPoz9/d U2bx8JqOfJpoKkr1disftd7pwrb0WDLPR/4eFFod9mvLnJwj8jVI865haYHyA1qgzO9C TJwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=SX+/6qUf2NKPkarJKf8Z0RO4zkLmFOn0CJ7ZlbG+44w=; b=z9g4Ub/tQPxD/BLOuC+fy3Y5OFeMpWvg+VqGrnpKZxA/aZeVm58/DLYBeG7rSAekQN QgxHIEiPQVM4O7Dy+McIHOi83d/O7iJU/wi4CpZzJ8ZUJjAXAiqz9QwrsDOR3KMqi1fR J7OQHLVaTmUBHaMqVSeIb7mwiuxo9JpOpqCeQUEY37aHGDZKQdT++gArUZPeZ1mvmODO 4zUfEHttlVpdC2TaTHMq/1K20pO4TkaVdjOn9DmibIabclqouQsV9PCWBodWyDie8ojk uWF1hTRKbCAB4v2zU62w9Km9qf42E2t3CPayby9LhXNuy6c7Py5xPvK/5EFYabRbskfO 2zYQ== X-Gm-Message-State: AFqh2kpju9fbfA+jyB6CvM27TvhIVgLvgbdJ/cHuOcGCAzCcZBMWVjX0 +wec0iM5vMv/SAgEgEASXh3mGZPsSiNhNJ9Aw/E= X-Google-Smtp-Source: AMrXdXtPFfuoy6h4zMxecm9k9Usup1osl5j+M6xHbmcVh7VmzZ0MOsWg+rJYezWiViVUWjkm/9cEb5UdCMA6+cYXj1Y= X-Received: by 2002:a05:6808:218e:b0:35e:4237:db2d with SMTP id be14-20020a056808218e00b0035e4237db2dmr621oib.160.1671643343242; Wed, 21 Dec 2022 09:22:23 -0800 (PST) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: vignesh C Date: Wed, 21 Dec 2022 22:51:51 +0530 Message-ID: Subject: Re: Support logical replication of DDLs To: Zheng Li Cc: li jie , Peter Smith , Ajin Cherian , Dilip Kumar , Alvaro Herrera , "houzj.fnst@fujitsu.com" , Amit Kapila , Masahiko Sawada , Japin Li , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000aabe2b05f059cb57" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000aabe2b05f059cb57 Content-Type: text/plain; charset="UTF-8" On Tue, 20 Dec 2022 at 02:56, Zheng Li wrote: > > Attaching v54 patch set which adds support for: > - CREATE/ALTER/DROP FOREIGN TABLE > - IMPORT FOREIGN SCHEMA, this is captured and replicated as individual > CREATE FOREIGN TABLE command for each FOREIGN TABLE in the SCHEMA. > > Note: > DROP FOREIGN TABLE ft1 also generates: > DROP type IF EXISTS ft1; > and > DROP type IF EXISTS ft1[]; > These two dropped objects are also captured and replicated to the > subscriber along with the DROP FOREIGN TABLE command which aren't > necessary. > > In addition, the patch fixed a bug in deparse_CreateSchemaStmt which > causes a quoted identifier to fail in replication, for example: > CREATE SCHEMA "S 2"; is replicated as CREATE SCHEMA S 2, which will > fail during apply. > Fix is to change %{name}s -> %{name}I in deparse_CreateSchemaStmt. > > On Mon, Dec 19, 2022 at 5:02 AM li jie wrote: > > > > I have presented some comments below: > > Thanks for the feedback. I'll look into these. > > > 1. AT_AddColumn > > > > > + tmpobj = new_objtree_VA("ADD %{objtype}s %{definition}s", 3, > > [ IF NOT EXISTS ] is missing here. > > > ...... > > > > 9. regress test > > > > The test patch is very useful. > > I see that the sql case in test_ddl_deparse_regress is similar to the > > one in test_ddl_deparse. > > Why don't we merge the test cases in test_ddl_deparse_regress into > > test_ddl_deparse, > > as the sql case can be completely reused with the sql files in test_ddl_deparse? > > I believe this will make the tests more comprehensive and reduce redundancy. > > We have set up test_ddl_deparse_regress as a new module initially to > not interfere with what's being tested by test_ddl_deparse. We could > merge the two test modules if it turns out that we can expand on > test_ddl_deparse to achieve our testing goals and to add more test > cases without breaking what's currently being tested by > test_ddl_deparse. I have handled most of the comments for [1] in the v55 version patch attached. I will handle the pending comments in the upcoming version and reply to it. [1] - https://www.postgresql.org/message-id/20221207122041.hbfj4hen3ibhdzgn%40alvherre.pgsql Regards, Vignesh --000000000000aabe2b05f059cb57 Content-Type: text/x-patch; charset="US-ASCII"; name="v55-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Disposition: attachment; filename="v55-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbxx7xub0 RnJvbSAzYWJmYTVhZWUwNjI2ZDJhMDliMWU1MWE2ZGViZDdmZGM3ZGZhMmIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFR1ZSwgMjAgRGVjIDIwMjIgMTc6NDU6MDcgKzA1MzAKU3ViamVjdDogW1BBVENIIHY1NSAxLzVd IEluZnJhc3RydWN0dXJlIHRvIHN1cHBvcnQgRERMIGRlcGFyc2luZy4KCkluZnJhc3RydWN0dXJl IHRvIHN1cHBvcnQgRERMIGRlcGFyc2luZy4KLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNo ay5jICAgICAgICAgICAgICAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3Rh ZGRyZXNzLmMgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlv bmNtZHMuYyAgICAgICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmln Z2VyLmMgICAgICAgICB8ICA0MCArLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xhYmVsLmMg ICAgICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMgICAg ICAgICAgICAgIHwgIDMzICsrKwogc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgICAgICAgICAg ICAgICAgICAgfCAgOTEgKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBl LmMgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMgICAg ICAgICAgICAgIHwgIDUzICsrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAg ICAgICAgICAgIHwgMjU4ICsrKysrKysrKysrKysrLS0tLS0KIHNyYy9pbmNsdWRlL2NvbW1hbmRz L2NvbGxhdGlvbmNtZHMuaCAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmggICAgICAgICB8ICAzOSArKysKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3Nl cXVlbmNlLmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5o ICAgICAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL2FjbC5oICAgICAg ICAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5h bC5oICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmggICAgICAg ICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oICAgICAgICAg ICAgICAgIHwgIDE3ICsrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNz Lm91dCB8ICAgMiArLQogMTkgZmlsZXMgY2hhbmdlZCwgNDUzIGluc2VydGlvbnMoKyksIDExOSBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYwppbmRleCBiNTAxOTA1OWU4Li4zYzAwZjE4OWI1 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCisrKyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvYWNsY2hrLmMKQEAgLTEyOSw3ICsxMjksNiBAQCBzdGF0aWMgdm9pZCBleHBh bmRfYWxsX2NvbF9wcml2aWxlZ2VzKE9pZCB0YWJsZV9vaWQsIEZvcm1fcGdfY2xhc3MgY2xhc3NG b3JtLAogCQkJCQkJCQkJICBBY2xNb2RlICpjb2xfcHJpdmlsZWdlcywKIAkJCQkJCQkJCSAgaW50 IG51bV9jb2xfcHJpdmlsZWdlcyk7CiBzdGF0aWMgQWNsTW9kZSBzdHJpbmdfdG9fcHJpdmlsZWdl KGNvbnN0IGNoYXIgKnByaXZuYW1lKTsKLXN0YXRpYyBjb25zdCBjaGFyICpwcml2aWxlZ2VfdG9f c3RyaW5nKEFjbE1vZGUgcHJpdmlsZWdlKTsKIHN0YXRpYyBBY2xNb2RlIHJlc3RyaWN0X2FuZF9j aGVja19ncmFudChib29sIGlzX2dyYW50LCBBY2xNb2RlIGF2YWlsX2dvcHRpb25zLAogCQkJCQkJ CQkJCWJvb2wgYWxsX3ByaXZzLCBBY2xNb2RlIHByaXZpbGVnZXMsCiAJCQkJCQkJCQkJT2lkIG9i amVjdElkLCBPaWQgZ3JhbnRvcklkLApAQCAtMzg1LDExICszODQsMTAgQEAgRXhlY3V0ZUdyYW50 U3RtdChHcmFudFN0bXQgKnN0bXQpCiAJTGlzdENlbGwgICAqY2VsbDsKIAljb25zdCBjaGFyICpl cnJvcm1zZzsKIAlBY2xNb2RlCQlhbGxfcHJpdmlsZWdlczsKKwlPaWQJCQlncmFudG9yID0gSW52 YWxpZE9pZDsKIAogCWlmIChzdG10LT5ncmFudG9yKQogCXsKLQkJT2lkCQkJZ3JhbnRvcjsKLQog CQlncmFudG9yID0gZ2V0X3JvbGVzcGVjX29pZChzdG10LT5ncmFudG9yLCBmYWxzZSk7CiAKIAkJ LyoKQEAgLTQwOCw2ICs0MDYsOSBAQCBFeGVjdXRlR3JhbnRTdG10KEdyYW50U3RtdCAqc3RtdCkK IAlpc3RtdC5pc19ncmFudCA9IHN0bXQtPmlzX2dyYW50OwogCWlzdG10Lm9ianR5cGUgPSBzdG10 LT5vYmp0eXBlOwogCisJLyogQ29weSB0aGUgZ3JhbnRvciBpZCBuZWVkZWQgZm9yIERETCBkZXBh cnNpbmcgb2YgR3JhbnQgKi8KKwlpc3RtdC5ncmFudG9yX3VpZCA9IGdyYW50b3I7CisKIAkvKiBD b2xsZWN0IHRoZSBPSURzIG9mIHRoZSB0YXJnZXQgb2JqZWN0cyAqLwogCXN3aXRjaCAoc3RtdC0+ dGFyZ3R5cGUpCiAJewpAQCAtMjYyOCw3ICsyNjI5LDcgQEAgc3RyaW5nX3RvX3ByaXZpbGVnZShj b25zdCBjaGFyICpwcml2bmFtZSkKIAlyZXR1cm4gMDsJCQkJCS8qIGFwcGVhc2UgY29tcGlsZXIg Ki8KIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBwcml2aWxlZ2VfdG9f c3RyaW5nKEFjbE1vZGUgcHJpdmlsZWdlKQogewogCXN3aXRjaCAocHJpdmlsZWdlKQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMgYi9zcmMvYmFja2VuZC9j YXRhbG9nL29iamVjdGFkZHJlc3MuYwppbmRleCAxMDliZGZiMzNmLi4xNDBjZmI2Y2NmIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYworKysgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYwpAQCAtNTkxMyw3ICs1OTEzLDcgQEAgZ2V0T2Jq ZWN0SWRlbnRpdHlQYXJ0cyhjb25zdCBPYmplY3RBZGRyZXNzICpvYmplY3QsCiAJCQkJdHJhbnNm b3JtVHlwZSA9IGZvcm1hdF90eXBlX2JlX3F1YWxpZmllZCh0cmFuc2Zvcm0tPnRyZnR5cGUpOwog CQkJCXRyYW5zZm9ybUxhbmcgPSBnZXRfbGFuZ3VhZ2VfbmFtZSh0cmFuc2Zvcm0tPnRyZmxhbmcs IGZhbHNlKTsKIAotCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZmZlciwgImZvciAlcyBvbiBsYW5n dWFnZSAlcyIsCisJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmZmVyLCAiZm9yICVzIGxhbmd1YWdl ICVzIiwKIAkJCQkJCQkJIHRyYW5zZm9ybVR5cGUsCiAJCQkJCQkJCSB0cmFuc2Zvcm1MYW5nKTsK IAkJCQlpZiAob2JqbmFtZSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxh dGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYwppbmRleCA4 MWU1NGUwY2U2Li4zY2ViN2IyNTJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9j b2xsYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5j CkBAIC01Miw3ICs1Miw4IEBAIHR5cGVkZWYgc3RydWN0CiAgKiBDUkVBVEUgQ09MTEFUSU9OCiAg Ki8KIE9iamVjdEFkZHJlc3MKLURlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExp c3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLCBib29sIGlmX25vdF9leGlzdHMpCitEZWZpbmVD b2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVy cywKKwkJCQkgYm9vbCBpZl9ub3RfZXhpc3RzLCBPYmplY3RBZGRyZXNzICpmcm9tX2V4aXN0aW5n X2NvbGxpZCkKIHsKIAljaGFyCSAgICpjb2xsTmFtZTsKIAlPaWQJCQljb2xsTmFtZXNwYWNlOwpA QCAtMTM5LDYgKzE0MCwxMyBAQCBEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBM aXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywgYm9vbCBpZl9ub3RfZQogCQlpZiAoIUhlYXBU dXBsZUlzVmFsaWQodHApKQogCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IGNvbGxhdGlvbiAldSIsIGNvbGxpZCk7CiAKKwkJLyoKKwkJICogTWFrZSBmcm9tIGV4aXN0aW5n IGNvbGxhdGlvbmlkIGF2YWlsYWJsZSB0byBjYWxsZXJzIGZvciBzdGF0ZW1lbnQgc3VjaCBhcwor CQkgKiBDUkVBVEUgQ09MTEFUSU9OIGFueV9uYW1lIEZST00gYW55X25hbWUKKwkJICovCisJCWlm IChmcm9tX2V4aXN0aW5nX2NvbGxpZCAmJiBPaWRJc1ZhbGlkKGNvbGxpZCkpCisJCQlPYmplY3RB ZGRyZXNzU2V0KCpmcm9tX2V4aXN0aW5nX2NvbGxpZCwgQ29sbGF0aW9uUmVsYXRpb25JZCwgY29s bGlkKTsKKwogCQljb2xscHJvdmlkZXIgPSAoKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1Qo dHApKS0+Y29sbHByb3ZpZGVyOwogCQljb2xsaXNkZXRlcm1pbmlzdGljID0gKChGb3JtX3BnX2Nv bGxhdGlvbikgR0VUU1RSVUNUKHRwKSktPmNvbGxpc2RldGVybWluaXN0aWM7CiAJCWNvbGxlbmNv ZGluZyA9ICgoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0cCkpLT5jb2xsZW5jb2Rpbmc7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKaW5kZXggYTNiZGM1ZGIwNy4uNjQwYzI1 ZmY3MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtNDgsNDUgKzQ4LDcg QEAKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgog Ci10eXBlZGVmIHN0cnVjdCBFdmVudFRyaWdnZXJRdWVyeVN0YXRlCi17Ci0JLyogbWVtb3J5IGNv bnRleHQgZm9yIHRoaXMgc3RhdGUncyBvYmplY3RzICovCi0JTWVtb3J5Q29udGV4dCBjeHQ7Ci0K LQkvKiBzcWxfZHJvcCAqLwotCXNsaXN0X2hlYWQJU1FMRHJvcExpc3Q7Ci0JYm9vbAkJaW5fc3Fs X2Ryb3A7Ci0KLQkvKiB0YWJsZV9yZXdyaXRlICovCi0JT2lkCQkJdGFibGVfcmV3cml0ZV9vaWQ7 CS8qIEludmFsaWRPaWQsIG9yIHNldCBmb3IgdGFibGVfcmV3cml0ZQotCQkJCQkJCQkJICogZXZl bnQgKi8KLQlpbnQJCQl0YWJsZV9yZXdyaXRlX3JlYXNvbjsJLyogQVRfUkVXUklURSByZWFzb24g Ki8KLQotCS8qIFN1cHBvcnQgZm9yIGNvbW1hbmQgY29sbGVjdGlvbiAqLwotCWJvb2wJCWNvbW1h bmRDb2xsZWN0aW9uSW5oaWJpdGVkOwotCUNvbGxlY3RlZENvbW1hbmQgKmN1cnJlbnRDb21tYW5k OwotCUxpc3QJICAgKmNvbW1hbmRMaXN0OwkvKiBsaXN0IG9mIENvbGxlY3RlZENvbW1hbmQ7IHNl ZQotCQkJCQkJCQkgKiBkZXBhcnNlX3V0aWxpdHkuaCAqLwotCXN0cnVjdCBFdmVudFRyaWdnZXJR dWVyeVN0YXRlICpwcmV2aW91czsKLX0gRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZTsKLQotc3RhdGlj IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUgKmN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSA9IE5VTEw7 Ci0KLS8qIFN1cHBvcnQgZm9yIGRyb3BwZWQgb2JqZWN0cyAqLwotdHlwZWRlZiBzdHJ1Y3QgU1FM RHJvcE9iamVjdAotewotCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKLQljb25zdCBjaGFyICpzY2hl bWFuYW1lOwotCWNvbnN0IGNoYXIgKm9iam5hbWU7Ci0JY29uc3QgY2hhciAqb2JqaWRlbnRpdHk7 Ci0JY29uc3QgY2hhciAqb2JqZWN0dHlwZTsKLQlMaXN0CSAgICphZGRybmFtZXM7Ci0JTGlzdAkg ICAqYWRkcmFyZ3M7Ci0JYm9vbAkJb3JpZ2luYWw7Ci0JYm9vbAkJbm9ybWFsOwotCWJvb2wJCWlz dGVtcDsKLQlzbGlzdF9ub2RlCW5leHQ7Ci19IFNRTERyb3BPYmplY3Q7CitFdmVudFRyaWdnZXJR dWVyeVN0YXRlICpjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgPSBOVUxMOwogCiBzdGF0aWMgdm9p ZCBBbHRlckV2ZW50VHJpZ2dlck93bmVyX2ludGVybmFsKFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJ CQkJSGVhcFR1cGxlIHR1cCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xh YmVsLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZWNsYWJlbC5jCmluZGV4IDdhZTE5Yjk4YmIu LjI3MTNjYWQ1NjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xhYmVsLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwuYwpAQCAtMTM0LDYgKzEzNCw5IEBA IEV4ZWNTZWNMYWJlbFN0bXQoU2VjTGFiZWxTdG10ICpzdG10KQogCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQkJIGVycm1zZygibXVzdCBzcGVjaWZ5 IHByb3ZpZGVyIHdoZW4gbXVsdGlwbGUgc2VjdXJpdHkgbGFiZWwgcHJvdmlkZXJzIGhhdmUgYmVl biBsb2FkZWQiKSkpOwogCQlwcm92aWRlciA9IChMYWJlbFByb3ZpZGVyICopIGxpbml0aWFsKGxh YmVsX3Byb3ZpZGVyX2xpc3QpOworCisJCS8qIENvcHkgdGhlIHByb3ZpZGVyIG5hbWUgdG8gdGhl IHBhcnNldHJlZSwgbmVlZGVkIGZvciBEREwgZGVwYXJzaW5nIG9mIFNlY0xhYmVsU3RtdCAqLwor CQlzdG10LT5wcm92aWRlciA9IHBzdHJkdXAocHJvdmlkZXItPnByb3ZpZGVyX25hbWUpOwogCX0K IAllbHNlCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKaW5kZXggYzMxYzliODkxYS4uODlmODU1 ZWRmNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCkBAIC0xNzA4LDYgKzE3MDgsMzkgQEAgcHJv Y2Vzc19vd25lZF9ieShSZWxhdGlvbiBzZXFyZWwsIExpc3QgKm93bmVkX2J5LCBib29sIGZvcl9p ZGVudGl0eSkKIAkJcmVsYXRpb25fY2xvc2UodGFibGVyZWwsIE5vTG9jayk7CiB9CiAKKy8qCisg KiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycywgZGV0YWlsZWQKKyAqLworRm9ybV9wZ19zZXF1 ZW5jZV9kYXRhCitnZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5jZUlkKQoreworCUJ1ZmZl ciAgICAgIGJ1ZjsKKwlTZXFUYWJsZSAgICBlbG07CisJUmVsYXRpb24gICAgc2VxcmVsOworCUhl YXBUdXBsZURhdGEgc2VxdHVwbGU7CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcTsKKwlGb3Jt X3BnX3NlcXVlbmNlX2RhdGEgcmV0U2VxOworCisJLyogT3BlbiBhbmQgQWNjZXNzU2hhcmVMb2Nr IHNlcXVlbmNlICovCisJaW5pdF9zZXF1ZW5jZShzZXF1ZW5jZUlkLCAmZWxtLCAmc2VxcmVsKTsK KworCWlmIChwZ19jbGFzc19hY2xjaGVjayhzZXF1ZW5jZUlkLCBHZXRVc2VySWQoKSwKKwkJCUFD TF9TRUxFQ1QgfCBBQ0xfVVBEQVRFIHwgQUNMX1VTQUdFKSAhPSBBQ0xDSEVDS19PSykKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdF KSwKKwkJCQkJIGVycm1zZygicGVybWlzc2lvbiBkZW5pZWQgZm9yIHNlcXVlbmNlICVzIiwKKwkJ CQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzZXFyZWwpKSkpOworCisJc2VxID0gcmVhZF9z ZXFfdHVwbGUoc2VxcmVsLCAmYnVmLCAmc2VxdHVwbGUpOworCXJldFNlcSA9IHBhbGxvYyhzaXpl b2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJbWVtY3B5KHJldFNlcSwgc2VxLCBz aXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJVW5sb2NrUmVsZWFzZUJ1ZmZl cihidWYpOworCXJlbGF0aW9uX2Nsb3NlKHNlcXJlbCwgTm9Mb2NrKTsKKworCXJldHVybiByZXRT ZXE7Cit9CiAKIC8qCiAgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycyBpbiBhIGxpc3Qgb2Yg dGhlIGZvcm0gY3JlYXRlZCBieSB0aGUgcGFyc2VyLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dGNvcC91dGlsaXR5LmMgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCAyNDdkMDgx NmFkLi5mMTIxNWM4ZTE4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwor KysgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwpAQCAtMTQ0Niw3ICsxNDQ2LDggQEAgUHJv Y2Vzc1V0aWxpdHlTbG93KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQlhZGRyZXNzID0gRGVm aW5lQ29sbGF0aW9uKHBzdGF0ZSwKIAkJCQkJCQkJCQkJCQkgIHN0bXQtPmRlZm5hbWVzLAogCQkJ CQkJCQkJCQkJCSAgc3RtdC0+ZGVmaW5pdGlvbiwKLQkJCQkJCQkJCQkJCQkgIHN0bXQtPmlmX25v dF9leGlzdHMpOworCQkJCQkJCQkJCQkJCSAgc3RtdC0+aWZfbm90X2V4aXN0cywKKwkJCQkJCQkJ CQkJCQkgICZzZWNvbmRhcnlPYmplY3QpOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJZGVmYXVsdDoK IAkJCQkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGRlZmluZSBzdG10IHR5cGU6ICVkIiwK QEAgLTIxOTYsNiArMjE5Nyw5NCBAQCBVdGlsaXR5Q29udGFpbnNRdWVyeShOb2RlICpwYXJzZXRy ZWUpCiAJfQogfQogCisvKgorICogUmV0dXJuIHRoZSBnaXZlbiBvYmplY3QgdHlwZSBhcyBhIHN0 cmluZy4KKyAqLworY29uc3QgY2hhciAqCitzdHJpbmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9i anR5cGUsIGJvb2wgaXNncmFudCkKK3sKKwlzd2l0Y2ggKG9ianR5cGUpCisJeworCQljYXNlIE9C SkVDVF9BR0dSRUdBVEU6CisJCQlyZXR1cm4gIkFHR1JFR0FURSI7CisJCWNhc2UgT0JKRUNUX0NB U1Q6CisJCQlyZXR1cm4gIkNBU1QiOworCQljYXNlIE9CSkVDVF9DT0xMQVRJT046CisJCQlyZXR1 cm4gIkNPTExBVElPTiI7CisJCWNhc2UgT0JKRUNUX0NPTFVNTjoKKwkJCXJldHVybiBpc2dyYW50 ID8gIlRBQkxFIiA6ICJDT0xVTU4iOworCQljYXNlIE9CSkVDVF9DT05WRVJTSU9OOgorCQkJcmV0 dXJuICJDT05WRVJTSU9OIjsKKwkJY2FzZSBPQkpFQ1RfREFUQUJBU0U6CisJCQlyZXR1cm4gIkRB VEFCQVNFIjsKKwkJY2FzZSBPQkpFQ1RfRE9NQUlOOgorCQkJcmV0dXJuICJET01BSU4iOworCQlj YXNlIE9CSkVDVF9FVkVOVF9UUklHR0VSOgorCQkJcmV0dXJuICJFVkVOVCBUUklHR0VSIjsKKwkJ Y2FzZSBPQkpFQ1RfRVhURU5TSU9OOgorCQkJcmV0dXJuICJFWFRFTlNJT04iOworCQljYXNlIE9C SkVDVF9GRFc6CisJCQlyZXR1cm4gIkZPUkVJR04gREFUQSBXUkFQUEVSIjsKKwkJY2FzZSBPQkpF Q1RfRk9SRUlHTl9TRVJWRVI6CisJCQlyZXR1cm4gaXNncmFudCA/ICJGT1JFSUdOIFNFUlZFUiIg OiAiU0VSVkVSIjsKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9UQUJMRToKKwkJCXJldHVybiAiRk9S RUlHTiBUQUJMRSI7CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgorCQkJcmV0dXJuICJGVU5DVElP TiI7CisJCWNhc2UgT0JKRUNUX0lOREVYOgorCQkJcmV0dXJuICJJTkRFWCI7CisJCWNhc2UgT0JK RUNUX0xBTkdVQUdFOgorCQkJcmV0dXJuICJMQU5HVUFHRSI7CisJCWNhc2UgT0JKRUNUX0xBUkdF T0JKRUNUOgorCQkJcmV0dXJuICJMQVJHRSBPQkpFQ1QiOworCQljYXNlIE9CSkVDVF9NQVRWSUVX OgorCQkJcmV0dXJuICJNQVRFUklBTElaRUQgVklFVyI7CisJCWNhc2UgT0JKRUNUX09QQ0xBU1M6 CisJCQlyZXR1cm4gIk9QRVJBVE9SIENMQVNTIjsKKwkJY2FzZSBPQkpFQ1RfT1BFUkFUT1I6CisJ CQlyZXR1cm4gIk9QRVJBVE9SIjsKKwkJY2FzZSBPQkpFQ1RfT1BGQU1JTFk6CisJCQlyZXR1cm4g Ik9QRVJBVE9SIEZBTUlMWSI7CisJCWNhc2UgT0JKRUNUX1BPTElDWToKKwkJCXJldHVybiAiUE9M SUNZIjsKKwkJY2FzZSBPQkpFQ1RfUFJPQ0VEVVJFOgorCQkJcmV0dXJuICJQUk9DRURVUkUiOwor CQljYXNlIE9CSkVDVF9ST0xFOgorCQkJcmV0dXJuICJST0xFIjsKKwkJY2FzZSBPQkpFQ1RfUk9V VElORToKKwkJCXJldHVybiAiUk9VVElORSI7CisJCWNhc2UgT0JKRUNUX1JVTEU6CisJCQlyZXR1 cm4gIlJVTEUiOworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlyZXR1cm4gIlNDSEVNQSI7CisJ CWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQkJcmV0dXJuICJTRVFVRU5DRSI7CisJCWNhc2UgT0JK RUNUX1NUQVRJU1RJQ19FWFQ6CisJCQlyZXR1cm4gIlNUQVRJU1RJQ1MiOworCQljYXNlIE9CSkVD VF9UQUJMRToKKwkJCXJldHVybiAiVEFCTEUiOworCQljYXNlIE9CSkVDVF9UQUJMRVNQQUNFOgor CQkJcmV0dXJuICJUQUJMRVNQQUNFIjsKKwkJY2FzZSBPQkpFQ1RfVFJJR0dFUjoKKwkJCXJldHVy biAiVFJJR0dFUiI7CisJCWNhc2UgT0JKRUNUX1RTQ09ORklHVVJBVElPTjoKKwkJCXJldHVybiAi VEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiI7CisJCWNhc2UgT0JKRUNUX1RTRElDVElPTkFSWToK KwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggRElDVElPTkFSWSI7CisJCWNhc2UgT0JKRUNUX1RTUEFS U0VSOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBQQVJTRVIiOworCQljYXNlIE9CSkVDVF9UU1RF TVBMQVRFOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBURU1QTEFURSI7CisJCWNhc2UgT0JKRUNU X1RZUEU6CisJCQlyZXR1cm4gIlRZUEUiOworCQljYXNlIE9CSkVDVF9VU0VSX01BUFBJTkc6CisJ CQlyZXR1cm4gIlVTRVIgTUFQUElORyI7CisJCWNhc2UgT0JKRUNUX1ZJRVc6CisJCQlyZXR1cm4g IlZJRVciOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCB0 eXBlICVkIiwgb2JqdHlwZSk7CisJfQorfQogCiAvKgogICogQWx0ZXJPYmplY3RUeXBlQ29tbWFu ZFRhZwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwppbmRleCAyOTE4ZmRiZmI2Li40OTFk YWZiYTc0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwpAQCAtMjcsOCArMjcsNiBA QAogI2luY2x1ZGUgInV0aWxzL251bWVyaWMuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5o IgogCi1zdGF0aWMgY2hhciAqcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIg dHlwbW9kLCBPaWQgdHlwbW9kb3V0KTsKLQogCiAvKgogICogU1FMIGZ1bmN0aW9uOiBmb3JtYXRf dHlwZSh0eXBlX29pZCwgdHlwZW1vZCkKQEAgLTM2Myw3ICszNjEsNyBAQCBmb3JtYXRfdHlwZV93 aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKQogLyoKICAqIEFkZCB0eXBt b2QgZGVjb3JhdGlvbiB0byB0aGUgYmFzaWMgdHlwZSBuYW1lCiAgKi8KLXN0YXRpYyBjaGFyICoK K2NoYXIgKgogcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBP aWQgdHlwbW9kb3V0KQogewogCWNoYXIJICAgKnJlczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9yZWdwcm9jLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCmlu ZGV4IDZkNGMxYzI3YTUuLjQ4NmEwOWUxN2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9yZWdwcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYwpAQCAt NDQsNiArNDQsOCBAQAogc3RhdGljIHZvaWQgcGFyc2VOYW1lQW5kQXJnVHlwZXMoY29uc3QgY2hh ciAqc3RyaW5nLCBib29sIGFsbG93Tm9uZSwKIAkJCQkJCQkJIExpc3QgKipuYW1lcywgaW50ICpu YXJncywgT2lkICphcmd0eXBlcyk7CiAKK3N0YXRpYyB2b2lkIGZvcm1hdF9wcm9jZWR1cmVfYXJn c19pbnRlcm5hbChGb3JtX3BnX3Byb2MgcHJvY2Zvcm0sCisJCQkJCQkJCQkJICAgU3RyaW5nSW5m byBidWYsIGJvb2wgZm9yY2VfcXVhbGlmeSk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJ IFVTRVIgSS9PIFJPVVRJTkVTCQkJCQkJCQkJCQkJCQkgKgpAQCAtMzMxLDYgKzMzMywyOSBAQCBm b3JtYXRfcHJvY2VkdXJlX3F1YWxpZmllZChPaWQgcHJvY2VkdXJlX29pZCkKIAlyZXR1cm4gZm9y bWF0X3Byb2NlZHVyZV9leHRlbmRlZChwcm9jZWR1cmVfb2lkLCBGT1JNQVRfUFJPQ19GT1JDRV9R VUFMSUZZKTsKIH0KIAorLyoKKyAqIGZvcm1hdF9wcm9jZWR1cmVfYXJncyAgIC0gY29udmVydHMg cHJvYyBPSUQgdG8gIihhcmdzKSIKKyAqLworY2hhciAqCitmb3JtYXRfcHJvY2VkdXJlX2FyZ3Mo T2lkIHByb2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSkKK3sKKwlTdHJpbmdJbmZvRGF0 YSBidWY7CisJSGVhcFR1cGxlICAgcHJvY3R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07CisK Kwlwcm9jdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJv Y2VkdXJlX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jdHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2NlZHVyZV9v aWQpOworCXByb2Nmb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCisJ aW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFsKHBy b2Nmb3JtLCAmYnVmLCBmb3JjZV9xdWFsaWZ5KTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVw KTsKKworCXJldHVybiBidWYuZGF0YTsKK30KKwogLyoKICAqIGZvcm1hdF9wcm9jZWR1cmVfZXh0 ZW5kZWQgLSBjb252ZXJ0cyBwcm9jZWR1cmUgT0lEIHRvICJwcm9fbmFtZShhcmdzKSIKICAqCkBA IC0yMDYwLDMgKzIwODUsMzEgQEAgcGFyc2VOYW1lQW5kQXJnVHlwZXMoY29uc3QgY2hhciAqc3Ry aW5nLCBib29sIGFsbG93Tm9uZSwgTGlzdCAqKm5hbWVzLAogCiAJcGZyZWUocmF3bmFtZSk7CiB9 CisKKy8qCisgKiBBcHBlbmQgdGhlIHBhcmVudGhlc2l6ZWQgYXJndW1lbnRzIG9mIHRoZSBnaXZl biBwZ19wcm9jIHJvdyBpbnRvIHRoZSBvdXRwdXQKKyAqIGJ1ZmZlci4gZm9yY2VfcXVhbGlmeSBp bmRpY2F0ZXMgd2hldGhlciB0byBzY2hlbWEtcXVhbGlmeSB0eXBlIG5hbWVzCisgKiByZWdhcmRs ZXNzIG9mIHZpc2liaWxpdHkuCisgKi8KK3N0YXRpYyB2b2lkCitmb3JtYXRfcHJvY2VkdXJlX2Fy Z3NfaW50ZXJuYWwoRm9ybV9wZ19wcm9jIHByb2Nmb3JtLCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJ CQkgICBib29sIGZvcmNlX3F1YWxpZnkpCit7CisJaW50CQkJaTsKKwljaGFyKgkJKCpmdW5jWzJd KShPaWQpID0ge2Zvcm1hdF90eXBlX2JlLCBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWR9OworCisJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKCcpOworCWZvciAoaSA9IDA7IGkgPCBwcm9jZm9y bS0+cHJvbmFyZ3M7IGkrKykKKwl7CisJCU9pZAkJCXRoaXNhcmd0eXBlID0gcHJvY2Zvcm0tPnBy b2FyZ3R5cGVzLnZhbHVlc1tpXTsKKwkJY2hhcgkgICAqYXJndHlwZSA9IE5VTEw7CisKKwkJaWYg KGkgPiAwKQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnLCcpOworCisJCWFyZ3R5cGUg PSBmdW5jW2ZvcmNlX3F1YWxpZnldKHRoaXNhcmd0eXBlKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsIGFyZ3R5cGUpOworCQlwZnJlZShhcmd0eXBlKTsKKwl9CisJYXBwZW5kU3RyaW5n SW5mb0NoYXIoYnVmLCAnKScpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IDY0 MWRmMWNhYmUuLmY5OWViYTFkNzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTM1 LDYgKzM1LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19wYXJ0aXRpb25lZF90YWJsZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJv Yy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcmV3cml0ZS5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfc3RhdGlzdGljX2V4dC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJpZ2dlci5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgpAQCAtMzU4LDcgKzM1OSw2IEBAIHN0YXRpYyBpbnQJ cHJpbnRfZnVuY3Rpb25fYXJndW1lbnRzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1 cCwKIAkJCQkJCQkJCSBib29sIHByaW50X3RhYmxlX2FyZ3MsIGJvb2wgcHJpbnRfZGVmYXVsdHMp Owogc3RhdGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fcmV0dHlwZShTdHJpbmdJbmZvIGJ1ZiwgSGVh cFR1cGxlIHByb2N0dXApOwogc3RhdGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fdHJmdHlwZXMoU3Ry aW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKLXN0YXRpYyB2b2lkIHByaW50X2Z1bmN0 aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2 b2lkIHNldF9ydGFibGVfbmFtZXMoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIExpc3QgKnBhcmVu dF9uYW1lc3BhY2VzLAogCQkJCQkJCSBCaXRtYXBzZXQgKnJlbHNfdXNlZCk7CiBzdGF0aWMgdm9p ZCBzZXRfZGVwYXJzZV9mb3JfcXVlcnkoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIFF1ZXJ5ICpx dWVyeSwKQEAgLTQ4MiwyMiArNDgyLDE1IEBAIHN0YXRpYyB2b2lkIGdldF9mcm9tX2NsYXVzZV9j b2xkZWZsaXN0KFJhbmdlVGJsRnVuY3Rpb24gKnJ0ZnVuYywKIAkJCQkJCQkJCSAgIGRlcGFyc2Vf Y29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBnZXRfdGFibGVzYW1wbGVfZGVmKFRhYmxl U2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwKIAkJCQkJCQkJZGVwYXJzZV9jb250ZXh0ICpjb250 ZXh0KTsKLXN0YXRpYyB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1 YWxfZGF0YXR5cGUsCi0JCQkJCQkJIFN0cmluZ0luZm8gYnVmKTsKIHN0YXRpYyBOb2RlICpwcm9j ZXNzSW5kaXJlY3Rpb24oTm9kZSAqbm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0 YXRpYyB2b2lkIHByaW50U3Vic2NyaXB0cyhTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiwgZGVwYXJz ZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyBjaGFyICpnZXRfcmVsYXRpb25fbmFtZShPaWQg cmVsaWQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkLCBM aXN0ICpuYW1lc3BhY2VzKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRp b25fbmFtZShPaWQgcmVsaWQpOwotc3RhdGljIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUo T2lkIGZ1bmNpZCwgaW50IG5hcmdzLAotCQkJCQkJCQkJTGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJn dHlwZXMsCi0JCQkJCQkJCQlib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3As Ci0JCQkJCQkJCQlQYXJzZUV4cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogc3RhdGljIGNoYXIg KmdlbmVyYXRlX29wZXJhdG9yX25hbWUoT2lkIG9wZXJpZCwgT2lkIGFyZzEsIE9pZCBhcmcyKTsK IHN0YXRpYyB2b2lkIGFkZF9jYXN0X3RvKFN0cmluZ0luZm8gYnVmLCBPaWQgdHlwaWQpOwogc3Rh dGljIGNoYXIgKmdlbmVyYXRlX3F1YWxpZmllZF90eXBlX25hbWUoT2lkIHR5cGlkKTsKIHN0YXRp YyB0ZXh0ICpzdHJpbmdfdG9fdGV4dChjaGFyICpzdHIpOwotc3RhdGljIGNoYXIgKmZsYXR0ZW5f cmVsb3B0aW9ucyhPaWQgcmVsaWQpOwogc3RhdGljIHZvaWQgZ2V0X3JlbG9wdGlvbnMoU3RyaW5n SW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpOwogCiAjZGVmaW5lIG9ubHlfbWFya2VyKHJ0ZSkg ICgocnRlKS0+aW5oID8gIiIgOiAiT05MWSAiKQpAQCAtNTQ1LDYgKzUzOCwxMDQgQEAgcGdfZ2V0 X3J1bGVkZWZfZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdf dG9fdGV4dChyZXMpKTsKIH0KIAorLyoKKyAqIEdpdmVuIGEgcGFpciBvZiBEYXR1bSBjb3JyZXNw b25kaW5nIHRvIGEgcnVsZSdzIHBnX3Jld3JpdGUuZXZfcXVhbCBhbmQKKyAqIGV2X2FjdGlvbiBj b2x1bW5zLCByZXR1cm4gdGhlaXIgdGV4dCByZXByZXNlbnRhdGlvbjsgZXZfcXVhbCBhcyBhIHNp bmdsZQorICogc3RyaW5nIGluIHdoZXJlQ2xhdXNlIGFuZCBldl9hY3Rpb24gYXMgYSBMaXN0IG9m IHN0cmluZ3MgKHdoaWNoIG1pZ2h0IGJlCisgKiBOSUwsIHNpZ25hbGxpbmcgTk9USElORykgaW4g YWN0aW9ucy4KKyAqLwordm9pZAorcGdfZ2V0X3J1bGVkZWZfZGV0YWlsZWQoRGF0dW0gZXZfcXVh bCwgRGF0dW0gZXZfYWN0aW9uLAorCQkJCQkJY2hhciAqKndoZXJlQ2xhdXNlLCBMaXN0ICoqYWN0 aW9ucykKK3sKKwlpbnQJCQlwcmV0dHlGbGFncyA9IDA7CisJY2hhcgkgICAqcXVhbHN0ciA9IFRl eHREYXR1bUdldENTdHJpbmcoZXZfcXVhbCk7CisJY2hhcgkgICAqYWN0aW9uc3RyID0gVGV4dERh dHVtR2V0Q1N0cmluZyhldl9hY3Rpb24pOworCUxpc3QJICAgKmFjdGlvbk5vZGVMaXN0ID0gKExp c3QgKikgc3RyaW5nVG9Ob2RlKGFjdGlvbnN0cik7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJ KndoZXJlQ2xhdXNlID0gTlVMTDsKKwkqYWN0aW9ucyA9IE5JTDsKKwlpbml0U3RyaW5nSW5mbygm YnVmKTsKKwlpZiAoc3RybGVuKHF1YWxzdHIpID4gMCAmJiBzdHJjbXAocXVhbHN0ciwgIjw+Iikg IT0gMCkKKwl7CisJCU5vZGUJICAgKnF1YWw7CisJCVF1ZXJ5CSAgICpxdWVyeTsKKwkJZGVwYXJz ZV9jb250ZXh0IGNvbnRleHQ7CisJCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7CisKKwkJcXVhbCA9 IHN0cmluZ1RvTm9kZShxdWFsc3RyKTsKKworCQlxdWVyeSA9IChRdWVyeSAqKSBsaW5pdGlhbChh Y3Rpb25Ob2RlTGlzdCk7CisJCXF1ZXJ5ID0gZ2V0SW5zZXJ0U2VsZWN0UXVlcnkocXVlcnksIE5V TEwpOworCisJCUFjcXVpcmVSZXdyaXRlTG9ja3MocXVlcnksIGZhbHNlLCBmYWxzZSk7CisKKwkJ Y29udGV4dC5idWYgPSAmYnVmOworCQljb250ZXh0Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZk cG5zKTsKKwkJY29udGV4dC53aW5kb3dDbGF1c2UgPSBOSUw7CisJCWNvbnRleHQud2luZG93VExp c3QgPSBOSUw7CisJCWNvbnRleHQudmFycHJlZml4ID0gKGxpc3RfbGVuZ3RoKHF1ZXJ5LT5ydGFi bGUpICE9IDEpOworCQljb250ZXh0LnByZXR0eUZsYWdzID0gcHJldHR5RmxhZ3M7CisJCWNvbnRl eHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7CisJCWNvbnRleHQuaW5kZW50TGV2 ZWwgPSBQUkVUVFlJTkRFTlRfU1REOworCisJCXNldF9kZXBhcnNlX2Zvcl9xdWVyeSgmZHBucywg cXVlcnksIE5JTCk7CisKKwkJZ2V0X3J1bGVfZXhwcihxdWFsLCAmY29udGV4dCwgZmFsc2UpOwor CisJCSp3aGVyZUNsYXVzZSA9IHBzdHJkdXAoYnVmLmRhdGEpOworCX0KKworCWlmIChsaXN0X2xl bmd0aChhY3Rpb25Ob2RlTGlzdCkgPiAwKQorCXsKKwkJTGlzdENlbGwgICAqY2VsbDsKKworCQlm b3JlYWNoKGNlbGwsIGFjdGlvbk5vZGVMaXN0KQorCQl7CisJCQlRdWVyeQkgICAqcXVlcnkgPSAo UXVlcnkgKikgbGZpcnN0KGNlbGwpOworCisJCQlpZiAocXVlcnktPmNvbW1hbmRUeXBlID09IENN RF9OT1RISU5HKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXNldFN0cmluZ0luZm8oJmJ1Zik7CisJ CQlnZXRfcXVlcnlfZGVmKHF1ZXJ5LCAmYnVmLCBOSUwsIE5VTEwsIHRydWUsCisJCQkJCQkgIHBy ZXR0eUZsYWdzLCBXUkFQX0NPTFVNTl9ERUZBVUxULCAwKTsKKwkJCSphY3Rpb25zID0gbGFwcGVu ZCgqYWN0aW9ucywgcHN0cmR1cChidWYuZGF0YSkpOworCQl9CisJfQorfQorCisvKgorICogVG8g Z2V0IHRoZSByZXdyaXRlIHJ1bGUgb2YgYSB2aWV3IHdoZW4gdGhlIENSRUFURSBWSUVXIGNvbW1h bmQgZXhlY3V0aW9uIGlzCisgKiBzdGlsbCBpbiBwcm9ncmVzczogd2Ugc2VhcmNoIHRoZSBzeXN0 ZW0gY2FjaGUgUlVMRVJFTE5BTUUgdG8gZ2V0IHRoZSByZXdyaXRlCisgKiBydWxlIG9mIHRoZSB2 aWV3IGFzIG9wcG9zZWQgdG8gcXVlcnlpbmcgcGdfcmV3cml0ZSBhcyBpbiBwZ19nZXRfdmlld2Rl Zl93b3JrZXIoKSwKKyAqIHdoaWNoIHdpbGwgcmV0dXJuIGVtcHR5IHJlc3VsdC4KKyAqLworY2hh ciAqCitwZ19nZXRfdmlld2RlZl9pbnRlcm5hbChPaWQgdmlld29pZCkKK3sKKwlTdHJpbmdJbmZv RGF0YSBidWY7CisJUmVsYXRpb24JcGdfcmV3cml0ZTsKKwlIZWFwVHVwbGUJcnVsZXR1cDsKKwlU dXBsZURlc2MJcnVsZXR0YzsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCXBnX3Jld3JpdGUg PSB0YWJsZV9vcGVuKFJld3JpdGVSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcnVs ZXR1cCA9IFNlYXJjaFN5c0NhY2hlMihSVUxFUkVMTkFNRSwKKwkJCQkJCQkgIE9iamVjdElkR2V0 RGF0dW0odmlld29pZCksCisJCQkJCQkJICBQb2ludGVyR2V0RGF0dW0oVmlld1NlbGVjdFJ1bGVO YW1lKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJ1bGV0dXApKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmV3cml0ZSBydWxlIGZvciB2aWV3IHdpdGggT0lEICV1 Iiwgdmlld29pZCk7CisKKwlydWxldHRjID0gcGdfcmV3cml0ZS0+cmRfYXR0OworCW1ha2Vfdmll d2RlZigmYnVmLCBydWxldHVwLCBydWxldHRjLCAwLCBXUkFQX0NPTFVNTl9ERUZBVUxUKTsKKwlS ZWxlYXNlU3lzQ2FjaGUocnVsZXR1cCk7CisJdGFibGVfY2xvc2UocGdfcmV3cml0ZSwgQWNjZXNz U2hhcmVMb2NrKTsKKworCXJldHVybiBidWYuZGF0YTsKK30KIAogc3RhdGljIGNoYXIgKgogcGdf Z2V0X3J1bGVkZWZfd29ya2VyKE9pZCBydWxlb2lkLCBpbnQgcHJldHR5RmxhZ3MpCkBAIC0xMDE1 LDY1ICsxMTA2LDEyIEBAIHBnX2dldF90cmlnZ2VyZGVmX3dvcmtlcihPaWQgdHJpZ2lkLCBib29s IHByZXR0eSkKIAlpZiAoIWlzbnVsbCkKIAl7CiAJCU5vZGUJICAgKnF1YWw7Ci0JCWNoYXIJCXJl bGtpbmQ7Ci0JCWRlcGFyc2VfY29udGV4dCBjb250ZXh0OwotCQlkZXBhcnNlX25hbWVzcGFjZSBk cG5zOwotCQlSYW5nZVRibEVudHJ5ICpvbGRydGU7Ci0JCVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsK LQotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICJXSEVOICgiKTsKKwkJY2hhcgkgICAq cXVhbHN0cjsKIAogCQlxdWFsID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcodmFs dWUpKTsKKwkJcXVhbHN0ciA9IHBnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UodHJpZ3JlYywgcXVh bCwgcHJldHR5KTsKIAotCQlyZWxraW5kID0gZ2V0X3JlbF9yZWxraW5kKHRyaWdyZWMtPnRncmVs aWQpOwotCi0JCS8qIEJ1aWxkIG1pbmltYWwgT0xEIGFuZCBORVcgUlRFcyBmb3IgdGhlIHJlbCAq LwotCQlvbGRydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKLQkJb2xkcnRlLT5ydGVraW5k ID0gUlRFX1JFTEFUSU9OOwotCQlvbGRydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKLQkJ b2xkcnRlLT5yZWxraW5kID0gcmVsa2luZDsKLQkJb2xkcnRlLT5yZWxsb2NrbW9kZSA9IEFjY2Vz c1NoYXJlTG9jazsKLQkJb2xkcnRlLT5hbGlhcyA9IG1ha2VBbGlhcygib2xkIiwgTklMKTsKLQkJ b2xkcnRlLT5lcmVmID0gb2xkcnRlLT5hbGlhczsKLQkJb2xkcnRlLT5sYXRlcmFsID0gZmFsc2U7 Ci0JCW9sZHJ0ZS0+aW5oID0gZmFsc2U7Ci0JCW9sZHJ0ZS0+aW5Gcm9tQ2wgPSB0cnVlOwotCi0J CW5ld3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOwotCQluZXdydGUtPnJ0ZWtpbmQgPSBS VEVfUkVMQVRJT047Ci0JCW5ld3J0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOwotCQluZXdy dGUtPnJlbGtpbmQgPSByZWxraW5kOwotCQluZXdydGUtPnJlbGxvY2ttb2RlID0gQWNjZXNzU2hh cmVMb2NrOwotCQluZXdydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJuZXciLCBOSUwpOwotCQluZXdy dGUtPmVyZWYgPSBuZXdydGUtPmFsaWFzOwotCQluZXdydGUtPmxhdGVyYWwgPSBmYWxzZTsKLQkJ bmV3cnRlLT5pbmggPSBmYWxzZTsKLQkJbmV3cnRlLT5pbkZyb21DbCA9IHRydWU7Ci0KLQkJLyog QnVpbGQgdHdvLWVsZW1lbnQgcnRhYmxlICovCi0JCW1lbXNldCgmZHBucywgMCwgc2l6ZW9mKGRw bnMpKTsKLQkJZHBucy5ydGFibGUgPSBsaXN0X21ha2UyKG9sZHJ0ZSwgbmV3cnRlKTsKLQkJZHBu cy5zdWJwbGFucyA9IE5JTDsKLQkJZHBucy5jdGVzID0gTklMOwotCQlkcG5zLmFwcGVuZHJlbHMg PSBOVUxMOwotCQlzZXRfcnRhYmxlX25hbWVzKCZkcG5zLCBOSUwsIE5VTEwpOwotCQlzZXRfc2lt cGxlX2NvbHVtbl9uYW1lcygmZHBucyk7Ci0KLQkJLyogU2V0IHVwIGNvbnRleHQgd2l0aCBvbmUt ZGVlcCBuYW1lc3BhY2Ugc3RhY2sgKi8KLQkJY29udGV4dC5idWYgPSAmYnVmOwotCQljb250ZXh0 Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5zKTsKLQkJY29udGV4dC53aW5kb3dDbGF1c2Ug PSBOSUw7Ci0JCWNvbnRleHQud2luZG93VExpc3QgPSBOSUw7Ci0JCWNvbnRleHQudmFycHJlZml4 ID0gdHJ1ZTsKLQkJY29udGV4dC5wcmV0dHlGbGFncyA9IEdFVF9QUkVUVFlfRkxBR1MocHJldHR5 KTsKLQkJY29udGV4dC53cmFwQ29sdW1uID0gV1JBUF9DT0xVTU5fREVGQVVMVDsKLQkJY29udGV4 dC5pbmRlbnRMZXZlbCA9IFBSRVRUWUlOREVOVF9TVEQ7Ci0JCWNvbnRleHQuc3BlY2lhbF9leHBy a2luZCA9IEVYUFJfS0lORF9OT05FOwotCQljb250ZXh0LmFwcGVuZHBhcmVudHMgPSBOVUxMOwot Ci0JCWdldF9ydWxlX2V4cHIocXVhbCwgJmNvbnRleHQsIGZhbHNlKTsKLQotCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZidWYsICIpICIpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJXSEVO ICglcykgIiwgcXVhbHN0cik7CiAJfQogCiAJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRVhFQ1VU RSBGVU5DVElPTiAlcygiLApAQCAtMTExNCw2ICsxMTUyLDY5IEBAIHBnX2dldF90cmlnZ2VyZGVm X3dvcmtlcihPaWQgdHJpZ2lkLCBib29sIHByZXR0eSkKIAlyZXR1cm4gYnVmLmRhdGE7CiB9CiAK Ky8qCisgKiBQYXJzZSBiYWNrIHRoZSBUcmlnZ2VyV2hlbiBjbGF1c2Ugb2YgYSB0cmlnZ2VyIGdp dmVuIHRoZSBwZ190cmlnZ2VyIHJlY29yZCBhbmQKKyAqIHRoZSBleHByZXNzaW9uIHRyZWUgKGlu IG5vZGVUb1N0cmluZygpIHJlcHJlc2VudGF0aW9uKSBmcm9tIHBnX3RyaWdnZXIudGdxdWFsCisg KiBmb3IgdGhlIHRyaWdnZXIncyBXSEVOIGNvbmRpdGlvbi4KKyAqLworY2hhciAqCitwZ19nZXRf dHJpZ2dlcl93aGVuY2xhdXNlKEZvcm1fcGdfdHJpZ2dlciB0cmlncmVjLCBOb2RlICp3aGVuQ2xh dXNlLCBib29sIHByZXR0eSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJY2hhcgkJcmVsa2lu ZDsKKwlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsKKwlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOwor CVJhbmdlVGJsRW50cnkgKm9sZHJ0ZTsKKwlSYW5nZVRibEVudHJ5ICpuZXdydGU7CisKKwlpbml0 U3RyaW5nSW5mbygmYnVmKTsKKworCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQodHJpZ3JlYy0+ dGdyZWxpZCk7CisKKwkvKiBCdWlsZCBtaW5pbWFsIE9MRCBhbmQgTkVXIFJURXMgZm9yIHRoZSBy ZWwgKi8KKwlvbGRydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKwlvbGRydGUtPnJ0ZWtp bmQgPSBSVEVfUkVMQVRJT047CisJb2xkcnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7CisJ b2xkcnRlLT5yZWxraW5kID0gcmVsa2luZDsKKwlvbGRydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJv bGQiLCBOSUwpOworCW9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7CisJb2xkcnRlLT5sYXRl cmFsID0gZmFsc2U7CisJb2xkcnRlLT5pbmggPSBmYWxzZTsKKwlvbGRydGUtPmluRnJvbUNsID0g dHJ1ZTsKKworCW5ld3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOworCW5ld3J0ZS0+cnRl a2luZCA9IFJURV9SRUxBVElPTjsKKwluZXdydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsK KwluZXdydGUtPnJlbGtpbmQgPSByZWxraW5kOworCW5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMo Im5ldyIsIE5JTCk7CisJbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsKKwluZXdydGUtPmxh dGVyYWwgPSBmYWxzZTsKKwluZXdydGUtPmluaCA9IGZhbHNlOworCW5ld3J0ZS0+aW5Gcm9tQ2wg PSB0cnVlOworCisJLyogQnVpbGQgdHdvLWVsZW1lbnQgcnRhYmxlICovCisJbWVtc2V0KCZkcG5z LCAwLCBzaXplb2YoZHBucykpOworCWRwbnMucnRhYmxlID0gbGlzdF9tYWtlMihvbGRydGUsIG5l d3J0ZSk7CisJZHBucy5jdGVzID0gTklMOworCXNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwg TlVMTCk7CisJc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRwbnMpOworCisJLyogU2V0IHVwIGNv bnRleHQgd2l0aCBvbmUtZGVlcCBuYW1lc3BhY2Ugc3RhY2sgKi8KKwljb250ZXh0LmJ1ZiA9ICZi dWY7CisJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7CisJY29udGV4dC53 aW5kb3dDbGF1c2UgPSBOSUw7CisJY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKKwljb250ZXh0 LnZhcnByZWZpeCA9IHRydWU7CisJY29udGV4dC5wcmV0dHlGbGFncyA9IHByZXR0eSA/IFBSRVRU WUZMQUdfUEFSRU4gfCBQUkVUVFlGTEFHX0lOREVOVCA6IFBSRVRUWUZMQUdfSU5ERU5UOworCWNv bnRleHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7CisJY29udGV4dC5pbmRlbnRM ZXZlbCA9IFBSRVRUWUlOREVOVF9TVEQ7CisJY29udGV4dC5zcGVjaWFsX2V4cHJraW5kID0gRVhQ Ul9LSU5EX05PTkU7CisKKwlnZXRfcnVsZV9leHByKHdoZW5DbGF1c2UsICZjb250ZXh0LCBmYWxz ZSk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKIC8qIC0tLS0tLS0tLS0KICAqIHBnX2dldF9p bmRleGRlZgkJCS0gR2V0IHRoZSBkZWZpbml0aW9uIG9mIGFuIGluZGV4CiAgKgpAQCAtMTg4MCw2 ICsxOTgxLDEzIEBAIHBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHBy ZXR0eSkKIAlyZXR1cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCBwcmV0dHlGbGFn cywgdHJ1ZSwgZmFsc2UpOwogfQogCisvKiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmVwb3J0cyB0 aGUgZnVsbCBwYXJ0aXRpb24ga2V5IGRlZmluaXRpb24gKi8KK2NoYXIgKgorcGdfZ2V0X3BhcnRr ZXlkZWZfc2ltcGxlKE9pZCByZWxpZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29y a2VyKHJlbGlkLCAwLCBmYWxzZSwgZmFsc2UpOworfQorCiAvKgogICogSW50ZXJuYWwgd29ya2hv cnNlIHRvIGRlY29tcGlsZSBhIHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlvbi4KICAqLwpAQCAtMjEz MSw2ICsyMjM5LDE1IEBAIHBnX2dldF9jb25zdHJhaW50ZGVmX2V4dChQR19GVU5DVElPTl9BUkdT KQogCVBHX1JFVFVSTl9URVhUX1Aoc3RyaW5nX3RvX3RleHQocmVzKSk7CiB9CiAKKy8qCisgKiBJ bnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmV0dXJucyB0aGUgZGVmaW5pdGlvbiBvZiBhIENPTlNUUkFJ TlQgY29tbWFuZAorICovCitjaGFyICoKK3BnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2lt cGxlKE9pZCBjb25zdHJhaW50SWQpCit7CisJcmV0dXJuIHBnX2dldF9jb25zdHJhaW50ZGVmX3dv cmtlcihjb25zdHJhaW50SWQsIGZhbHNlLCAwLCBmYWxzZSk7Cit9CisKIC8qCiAgKiBJbnRlcm5h bCB2ZXJzaW9uIHRoYXQgcmV0dXJucyBhIGZ1bGwgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJB SU5UIGNvbW1hbmQKICAqLwpAQCAtMzUwMSw3ICszNjE4LDEyIEBAIHBnX2dldF9mdW5jdGlvbl9h cmdfZGVmYXVsdChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9URVhUX1Aoc3RyaW5nX3Rv X3RleHQoc3RyKSk7CiB9CiAKLXN0YXRpYyB2b2lkCisvKgorICogUHJvZHVjZSB0aGUgZm9ybWF0 dGVkIFNRTCBib2R5IChub3QgdGhlIHdob2xlIGZ1bmN0aW9uIGRlZmluaXRpb24pCisgKiBvZiBh IGZ1bmN0aW9uIGdpdmVuIHRoZSBwZ19wcm9jIHR1cGxlLiBTYXZlIHRoZSBmb3JtYXR0ZWQgU1FM IGluIHRoZQorICogZ2l2ZW4gU3RyaW5nSW5mby4KKyAqLwordm9pZAogcHJpbnRfZnVuY3Rpb25f c3FsYm9keShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApCiB7CiAJaW50CQkJbnVt YXJnczsKQEAgLTExMzU3LDcgKzExNDc5LDcgQEAgZ2V0X3RhYmxlc2FtcGxlX2RlZihUYWJsZVNh bXBsZUNsYXVzZSAqdGFibGVzYW1wbGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCkKICAqIGFj dHVhbF9kYXRhdHlwZS4gIChJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzIGJlaGF2aW9yLCBqdXN0IHBh c3MKICAqIEludmFsaWRPaWQgZm9yIGFjdHVhbF9kYXRhdHlwZS4pCiAgKi8KLXN0YXRpYyB2b2lk Cit2b2lkCiBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBl LAogCQkJCSBTdHJpbmdJbmZvIGJ1ZikKIHsKQEAgLTExNzUxLDcgKzExODczLDcgQEAgZ2VuZXJh dGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKQogICoKICAqIFRoZSByZXN1bHQg aW5jbHVkZXMgYWxsIG5lY2Vzc2FyeSBxdW90aW5nIGFuZCBzY2hlbWEtcHJlZml4aW5nLgogICov Ci1zdGF0aWMgY2hhciAqCitjaGFyICoKIGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNp ZCwgaW50IG5hcmdzLCBMaXN0ICphcmduYW1lcywgT2lkICphcmd0eXBlcywKIAkJCQkJICAgYm9v bCBoYXNfdmFyaWFkaWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAogCQkJCQkgICBQYXJzZUV4cHJL aW5kIHNwZWNpYWxfZXhwcmtpbmQpCkBAIC0xMjEzNyw3ICsxMjI1OSw3IEBAIGdldF9yZWxvcHRp b25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKQogLyoKICAqIEdlbmVyYXRlIGEg QyBzdHJpbmcgcmVwcmVzZW50aW5nIGEgcmVsYXRpb24ncyByZWxvcHRpb25zLCBvciBOVUxMIGlm IG5vbmUuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZmxhdHRlbl9yZWxvcHRpb25zKE9p ZCByZWxpZCkKIHsKIAljaGFyCSAgICpyZXN1bHQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvY29sbGF0aW9uY21kcy5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29s bGF0aW9uY21kcy5oCmluZGV4IDIwMWIxOWY4YjcuLjQ2ZDE4Mzc2MGEgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaAorKysgYi9zcmMvaW5jbHVkZS9jb21t YW5kcy9jb2xsYXRpb25jbWRzLmgKQEAgLTE4LDcgKzE4LDggQEAKICNpbmNsdWRlICJjYXRhbG9n L29iamVjdGFkZHJlc3MuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2Vfbm9kZS5oIgogCi1leHRl cm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0 ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywgYm9vbCBpZl9ub3RfZXhpc3RzKTsKK2V4dGVybiBP YmplY3RBZGRyZXNzIERlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKm5h bWVzLCBMaXN0ICpwYXJhbWV0ZXJzLAorCQkJCQkJCQkJICBib29sIGlmX25vdF9leGlzdHMsIE9i amVjdEFkZHJlc3MgKmZyb21fY29sbGlkKTsKIGV4dGVybiB2b2lkIElzVGhlcmVDb2xsYXRpb25J bk5hbWVzcGFjZShjb25zdCBjaGFyICpjb2xsbmFtZSwgT2lkIG5zcE9pZCk7CiBleHRlcm4gT2Jq ZWN0QWRkcmVzcyBBbHRlckNvbGxhdGlvbihBbHRlckNvbGxhdGlvblN0bXQgKnN0bXQpOwogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggYi9zcmMvaW5j bHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKaW5kZXggMTAwOTFjM2FhZi4uNDcwOTQ3NTJl OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisrKyBi L3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaApAQCAtMTYsNiArMTYsNyBAQAog I2luY2x1ZGUgImNhdGFsb2cvZGVwZW5kZW5jeS5oIgogI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0 YWRkcmVzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZXZlbnRfdHJpZ2dlci5oIgorI2luY2x1 ZGUgImxpYi9pbGlzdC5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRl ICJ0Y29wL2NtZHRhZy5oIgogI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5LmgiCkBAIC0y OSw2ICszMCw0NCBAQCB0eXBlZGVmIHN0cnVjdCBFdmVudFRyaWdnZXJEYXRhCiAJQ29tbWFuZFRh Zwl0YWc7CiB9IEV2ZW50VHJpZ2dlckRhdGE7CiAKK3R5cGVkZWYgc3RydWN0IEV2ZW50VHJpZ2dl clF1ZXJ5U3RhdGUKK3sKKwkvKiBtZW1vcnkgY29udGV4dCBmb3IgdGhpcyBzdGF0ZSdzIG9iamVj dHMgKi8KKwlNZW1vcnlDb250ZXh0IGN4dDsKKworCS8qIHNxbF9kcm9wICovCisJc2xpc3RfaGVh ZAlTUUxEcm9wTGlzdDsKKwlib29sCQlpbl9zcWxfZHJvcDsKKworCS8qIHRhYmxlX3Jld3JpdGUg Ki8KKwlPaWQJCQl0YWJsZV9yZXdyaXRlX29pZDsJLyogSW52YWxpZE9pZCwgb3Igc2V0IGZvciB0 YWJsZV9yZXdyaXRlCisJCQkJCQkJCQkgKiBldmVudCAqLworCWludAkJCXRhYmxlX3Jld3JpdGVf cmVhc29uOwkvKiBBVF9SRVdSSVRFIHJlYXNvbiAqLworCisJLyogU3VwcG9ydCBmb3IgY29tbWFu ZCBjb2xsZWN0aW9uICovCisJYm9vbAkJY29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQ7CisJQ29s bGVjdGVkQ29tbWFuZCAqY3VycmVudENvbW1hbmQ7CisJTGlzdAkgICAqY29tbWFuZExpc3Q7CS8q IGxpc3Qgb2YgQ29sbGVjdGVkQ29tbWFuZDsgc2VlCisJCQkJCQkJCSAqIGRlcGFyc2VfdXRpbGl0 eS5oICovCisJc3RydWN0IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUgKnByZXZpb3VzOworfSBFdmVu dFRyaWdnZXJRdWVyeVN0YXRlOworCisvKiBTdXBwb3J0IGZvciBkcm9wcGVkIG9iamVjdHMgKi8K K3R5cGVkZWYgc3RydWN0IFNRTERyb3BPYmplY3QKK3sKKwlPYmplY3RBZGRyZXNzIGFkZHJlc3M7 CisJY29uc3QgY2hhciAqc2NoZW1hbmFtZTsKKwljb25zdCBjaGFyICpvYmpuYW1lOworCWNvbnN0 IGNoYXIgKm9iamlkZW50aXR5OworCWNvbnN0IGNoYXIgKm9iamVjdHR5cGU7CisJTGlzdAkgICAq YWRkcm5hbWVzOworCUxpc3QJICAgKmFkZHJhcmdzOworCWJvb2wJCW9yaWdpbmFsOworCWJvb2wJ CW5vcm1hbDsKKwlib29sCQlpc3RlbXA7CisJc2xpc3Rfbm9kZQluZXh0OworfSBTUUxEcm9wT2Jq ZWN0OworCiAjZGVmaW5lIEFUX1JFV1JJVEVfQUxURVJfUEVSU0lTVEVOQ0UJMHgwMQogI2RlZmlu ZSBBVF9SRVdSSVRFX0RFRkFVTFRfVkFMCQkJMHgwMgogI2RlZmluZSBBVF9SRVdSSVRFX0NPTFVN Tl9SRVdSSVRFCQkweDA0CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5j ZS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaAppbmRleCBiM2IwNGNjZmE5Li5j MmIxY2EzMmY2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCisr KyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKQEAgLTU0LDYgKzU0LDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgeGxfc2VxX3JlYwogZXh0ZXJuIGludDY0IG5leHR2YWxfaW50ZXJuYWwoT2lk IHJlbGlkLCBib29sIGNoZWNrX3Blcm1pc3Npb25zKTsKIGV4dGVybiBEYXR1bSBuZXh0dmFsKFBH X0ZVTkNUSU9OX0FSR1MpOwogZXh0ZXJuIExpc3QgKnNlcXVlbmNlX29wdGlvbnMoT2lkIHJlbGlk KTsKK2V4dGVybiBGb3JtX3BnX3NlcXVlbmNlX2RhdGEgZ2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQg c2VxdWVuY2VJZCk7CiAKIGV4dGVybiBPYmplY3RBZGRyZXNzIERlZmluZVNlcXVlbmNlKFBhcnNl U3RhdGUgKnBzdGF0ZSwgQ3JlYXRlU2VxU3RtdCAqc2VxKTsKIGV4dGVybiBPYmplY3RBZGRyZXNz IEFsdGVyU2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclNlcVN0bXQgKnN0bXQpOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC91dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29w L3V0aWxpdHkuaAppbmRleCBmOWRhZjViNzQ0Li5mOTJiYmY4ODQzIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS90Y29wL3V0aWxpdHkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL3V0aWxpdHkuaApA QCAtOTksNiArOTksOCBAQCBleHRlcm4gUXVlcnkgKlV0aWxpdHlDb250YWluc1F1ZXJ5KE5vZGUg KnBhcnNldHJlZSk7CiAKIGV4dGVybiBDb21tYW5kVGFnIENyZWF0ZUNvbW1hbmRUYWcoTm9kZSAq cGFyc2V0cmVlKTsKIAorZXh0ZXJuIGNvbnN0IGNoYXIgKnN0cmluZ2lmeV9vYmp0eXBlKE9iamVj dFR5cGUgb2JqdHlwZSwgYm9vbCBpc2dyYW50KTsKKwogc3RhdGljIGlubGluZSBjb25zdCBjaGFy ICoKIENyZWF0ZUNvbW1hbmROYW1lKE5vZGUgKnBhcnNldHJlZSkKIHsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3V0aWxzL2FjbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmgKaW5kZXggNjll YjQzNzM3Ni4uYzBlMjAyYjQ0ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmgK KysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmgKQEAgLTIwOSw2ICsyMDksOCBAQCBleHRlcm4g QWNsTW9kZSBhY2xtYXNrKGNvbnN0IEFjbCAqYWNsLCBPaWQgcm9sZWlkLCBPaWQgb3duZXJJZCwK IAkJCQkJICAgQWNsTW9kZSBtYXNrLCBBY2xNYXNrSG93IGhvdyk7CiBleHRlcm4gaW50CWFjbG1l bWJlcnMoY29uc3QgQWNsICphY2wsIE9pZCAqKnJvbGVpZHMpOwogCitleHRlcm4gY29uc3QgY2hh ciAqcHJpdmlsZWdlX3RvX3N0cmluZyhBY2xNb2RlIHByaXZpbGVnZSk7CisKIGV4dGVybiBib29s IGhhc19wcml2c19vZl9yb2xlKE9pZCBtZW1iZXIsIE9pZCByb2xlKTsKIGV4dGVybiBib29sIG1l bWJlcl9jYW5fc2V0X3JvbGUoT2lkIG1lbWJlciwgT2lkIHJvbGUpOwogZXh0ZXJuIHZvaWQgY2hl Y2tfY2FuX3NldF9yb2xlKE9pZCBtZW1iZXIsIE9pZCByb2xlKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYWNsY2hr X2ludGVybmFsLmgKaW5kZXggMzYxMjg0ZDhlYi4uNGUwMjBlZjRhZSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdXRpbHMvYWNsY2hrX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMv YWNsY2hrX2ludGVybmFsLmgKQEAgLTM5LDYgKzM5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlMaXN0 CSAgICpncmFudGVlczsKIAlib29sCQlncmFudF9vcHRpb247CiAJRHJvcEJlaGF2aW9yIGJlaGF2 aW9yOworCU9pZAkJCWdyYW50b3JfdWlkOwogfSBJbnRlcm5hbEdyYW50OwogCiAKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmggYi9zcmMvaW5jbHVkZS91dGlscy9idWls dGlucy5oCmluZGV4IDE1MzczYmE2OGYuLjZjZmE2Mzk3YzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3V0aWxzL2J1aWx0aW5zLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaApA QCAtMTE5LDEwICsxMTksMTIgQEAgZXh0ZXJuIERhdHVtIG51bWVyaWNfZmxvYXQ4X25vX292ZXJm bG93KFBHX0ZVTkNUSU9OX0FSR1MpOwogI2RlZmluZSBGT1JNQVRfVFlQRV9GT1JDRV9RVUFMSUZZ CTB4MDQJLyogZm9yY2UgcXVhbGlmaWNhdGlvbiBvZiB0eXBlICovCiAjZGVmaW5lIEZPUk1BVF9U WVBFX0lOVkFMSURfQVNfTlVMTAkweDA4CS8qIE5VTEwgaWYgdW5kZWZpbmVkICovCiBleHRlcm4g Y2hhciAqZm9ybWF0X3R5cGVfZXh0ZW5kZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLCBi aXRzMTYgZmxhZ3MpOworZXh0ZXJuIGNoYXIgKmZvcm1hdF9wcm9jZWR1cmVfYXJncyhPaWQgcHJv Y2VkdXJlX29pZCwgYm9vbCBmb3JjZV9xdWFsaWZ5KTsKIAogZXh0ZXJuIGNoYXIgKmZvcm1hdF90 eXBlX2JlKE9pZCB0eXBlX29pZCk7CiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfYmVfcXVhbGlm aWVkKE9pZCB0eXBlX29pZCk7CiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfd2l0aF90eXBlbW9k KE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCk7CitleHRlcm4gY2hhciAqcHJpbnRUeXBtb2Qo Y29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KTsKIAogZXh0 ZXJuIGludDMyIHR5cGVfbWF4aW11bV9zaXplKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCk7 CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oIGIvc3JjL2luY2x1 ZGUvdXRpbHMvcnVsZXV0aWxzLmgKaW5kZXggN2Q0ODk3MThhMy4uNmZiNjdmMGEwZSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvcnVsZXV0aWxzLmgKQEAgLTEzLDYgKzEzLDcgQEAKICNpZm5kZWYgUlVMRVVUSUxTX0gKICNk ZWZpbmUgUlVMRVVUSUxTX0gKIAorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJpZ2dlci5oIgogI2lu Y2x1ZGUgIm5vZGVzL25vZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgogI2lu Y2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKQEAgLTIzLDEyICsyNCwyMCBAQCBzdHJ1Y3QgUGxhbm5l ZFN0bXQ7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZfc3RyaW5nKE9pZCBpbmRleHJl bGlkKTsKIGV4dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZfY29sdW1ucyhPaWQgaW5kZXhyZWxp ZCwgYm9vbCBwcmV0dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dldF90cmlnZ2VyX3doZW5jbGF1c2Uo Rm9ybV9wZ190cmlnZ2VyIHRyaWdyZWMsCisJCQkJCQkJCQkgICBOb2RlICp3aGVuQ2xhdXNlLCBi b29sIHByZXR0eSk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3F1ZXJ5ZGVmKFF1ZXJ5ICpxdWVyeSwg Ym9vbCBwcmV0dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dldF92aWV3ZGVmX2ludGVybmFsKE9pZCB2 aWV3b2lkKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJl bGlkLCBib29sIHByZXR0eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxl KE9pZCByZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRjb25zdHJkZWZfc3RyaW5nKE9p ZCBwYXJ0aXRpb25JZCwgY2hhciAqYWxpYXNuYW1lKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9j b25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFpbnRJZCk7CitleHRlcm4gY2hhciAqcGdf Z2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoT2lkIGNvbnN0cmFpbnRJZCk7CitleHRl cm4gdm9pZCBwZ19nZXRfcnVsZWRlZl9kZXRhaWxlZChEYXR1bSBldl9xdWFsLCBEYXR1bSBldl9h Y3Rpb24sCisJCQkJCQkJCQljaGFyICoqd2hlcmVDbGF1c2UsIExpc3QgKiphY3Rpb25zKTsKKwog ZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZXhwcmVzc2lvbihOb2RlICpleHByLCBMaXN0ICpkcGNvbnRl eHQsCiAJCQkJCQkJCWJvb2wgZm9yY2VwcmVmaXgsIGJvb2wgc2hvd2ltcGxpY2l0KTsKIGV4dGVy biBMaXN0ICpkZXBhcnNlX2NvbnRleHRfZm9yKGNvbnN0IGNoYXIgKmFsaWFzbmFtZSwgT2lkIHJl bGlkKTsKQEAgLTQwLDggKzQ5LDE2IEBAIGV4dGVybiBMaXN0ICpzZWxlY3RfcnRhYmxlX25hbWVz X2Zvcl9leHBsYWluKExpc3QgKnJ0YWJsZSwKIAkJCQkJCQkJCQkJIEJpdG1hcHNldCAqcmVsc191 c2VkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9jb2xsYXRpb25fbmFtZShPaWQgY29sbGlkKTsK IGV4dGVybiBjaGFyICpnZW5lcmF0ZV9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MpOworZXh0ZXJu IGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwgaW50IG5hcmdzLCBMaXN0 ICphcmduYW1lcywKKwkJCQkJCQkJCU9pZCAqYXJndHlwZXMsIGJvb2wgaGFzX3ZhcmlhZGljLAor CQkJCQkJCQkJYm9vbCAqdXNlX3ZhcmlhZGljX3AsCisJCQkJCQkJCQlQYXJzZUV4cHJLaW5kIHNw ZWNpYWxfZXhwcmtpbmQpOwogZXh0ZXJuIGNoYXIgKmdldF9yYW5nZV9wYXJ0Ym91bmRfc3RyaW5n KExpc3QgKmJvdW5kX2RhdHVtcyk7CitleHRlcm4gdm9pZCBnZXRfb3BjbGFzc19uYW1lKE9pZCBv cGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAorCQkJCQkJCSBTdHJpbmdJbmZvIGJ1Zik7Citl eHRlcm4gY2hhciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7CiAKIGV4dGVybiBjaGFy ICpwZ19nZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmcoT2lkIHN0YXRleHRpZCk7CitleHRlcm4g dm9pZCBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJv Y3R1cCk7CiAKICNlbmRpZgkJCQkJCQkvKiBSVUxFVVRJTFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3RfYWRkcmVzcy5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dAppbmRleCAyNWMxNzRmMjc1Li5mYzQyZDQx OGJmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNz Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dApA QCAtNDk2LDcgKzQ5Niw3IEBAIG9wZXJhdG9yIGZhbWlseXxwZ19jYXRhbG9nfGludGVnZXJfb3Bz fHBnX2NhdGFsb2cuaW50ZWdlcl9vcHMgVVNJTkcgYnRyZWV8dAogcG9saWN5fE5VTEx8TlVMTHxn ZW5wb2wgb24gYWRkcl9uc3AuZ2VudGFibGV8dAogc3RhdGlzdGljcyBvYmplY3R8YWRkcl9uc3B8 Z2VudGFibGVfc3RhdHxhZGRyX25zcC5nZW50YWJsZV9zdGF0fHQKIGNvbGxhdGlvbnxwZ19jYXRh bG9nfCJkZWZhdWx0InxwZ19jYXRhbG9nLiJkZWZhdWx0Inx0Ci10cmFuc2Zvcm18TlVMTHxOVUxM fGZvciBpbnRlZ2VyIG9uIGxhbmd1YWdlIHNxbHx0Cit0cmFuc2Zvcm18TlVMTHxOVUxMfGZvciBp bnRlZ2VyIGxhbmd1YWdlIHNxbHx0CiB0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5fGFkZHJfbnNwfGFk ZHJfdHNfZGljdHxhZGRyX25zcC5hZGRyX3RzX2RpY3R8dAogdGV4dCBzZWFyY2ggcGFyc2VyfGFk ZHJfbnNwfGFkZHJfdHNfcHJzfGFkZHJfbnNwLmFkZHJfdHNfcHJzfHQKIHRleHQgc2VhcmNoIGNv bmZpZ3VyYXRpb258YWRkcl9uc3B8YWRkcl90c19jb25mfGFkZHJfbnNwLmFkZHJfdHNfY29uZnx0 Ci0tIAoyLjM0LjEKCg== --000000000000aabe2b05f059cb57 Content-Type: text/x-patch; charset="US-ASCII"; name="v55-0003-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Disposition: attachment; filename="v55-0003-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbxx7xwb2 RnJvbSBiOTk2MjEwOGRiZDAwZTljYTM4NWNiYWU3YTQxODc3MmM0MzNkMjY3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFdlZCwgMjEgRGVjIDIwMjIgMjI6MjA6MTQgKzA1MzAKU3ViamVjdDogW1BBVENIIHY1NSAzLzVd IERETCBtZXNzYWdpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIERETCByZXBsaWNhdGlvbi4KCkRETCBt ZXNzYWdpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIERETCByZXBsaWNhdGlvbi4KLS0tCiBzcmMvYmFj a2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUgICAgICAgICAgfCAgMSArCiAuLi4vYWNjZXNz L3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMgICAgICAgfCA1MiArKysrKysrKysrKysKIHNy Yy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5idWlsZCAgICAgICB8ICAxICsKIHNyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYyAgICAgICAgICAgICB8ICAxICsKIHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgICAgICB8ICAxICsKIHNyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jICB8IDg0ICsrKysrKysrKysrKysrKysr KysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQgICB8ICAxICsK IHNyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jICAgICAgICAgICAgICAgICB8ICAxICsKIHNy Yy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oICAgICAgICAgICAgICAgICB8ICAxICsKIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCAgICAgICAgICB8IDYwICsrKysrKysrKysr KysKIDEwIGZpbGVzIGNoYW5nZWQsIDIwMyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2Uu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2Uu aAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQppbmRleCBmODhkNzJmZDg2Li4yZmYw MWU2OWJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw3 IEBAIE9CSlMgPSBcCiAJZ2lzdGRlc2MubyBcCiAJaGFzaGRlc2MubyBcCiAJaGVhcGRlc2MubyBc CisJbG9naWNhbGRkbG1zZ2Rlc2MubyBcCiAJbG9naWNhbG1zZ2Rlc2MubyBcCiAJbXhhY3RkZXNj Lm8gXAogCW5idGRlc2MubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MvbG9naWNhbGRkbG1zZ2Rlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dp Y2FsZGRsbXNnZGVzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA1 ZTkzMGM5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mv bG9naWNhbGRkbG1zZ2Rlc2MuYwpAQCAtMCwwICsxLDUyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBsb2dpY2FsZGRsbXNnZGVzYy5jCisgKgkgIHJtZ3IgZGVzY3JpcHRvciByb3V0aW5l cyBmb3IgcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDIwMTUtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdl LmgiCisKK3ZvaWQKK2xvZ2ljYWxkZGxtc2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpCit7CisJY2hhcgkgICAqcmVjID0gWExvZ1JlY0dldERhdGEocmVjb3Jk KTsKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFT SzsKKworCWlmIChpbmZvID09IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwl7CisJCXhsX2xv Z2ljYWxfZGRsX21lc3NhZ2UgKnhscmVjID0gKHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKikgcmVj OworCQljaGFyCSAgICpwcmVmaXggPSB4bHJlYy0+bWVzc2FnZTsKKwkJY2hhcgkgICAqbWVzc2Fn ZSA9IHhscmVjLT5tZXNzYWdlICsgeGxyZWMtPnByZWZpeF9zaXplOworCQljaGFyCSAgICpzZXAg PSAiIjsKKworCQlBc3NlcnQocHJlZml4W3hscmVjLT5wcmVmaXhfc2l6ZV0gIT0gJ1wwJyk7CisK KwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJwcmVmaXggXCIlc1wiOyBwYXlsb2FkICglenUgYnl0 ZXMpOiAiLAorCQkJCQkJIHByZWZpeCwgeGxyZWMtPm1lc3NhZ2Vfc2l6ZSk7CisJCWFwcGVuZFN0 cmluZ0luZm8oYnVmLCAicmVsaWQgJXUgY21kdHlwZSAldSIsIHhscmVjLT5yZWxpZCwgeGxyZWMt PmNtZHR5cGUpOworCQkvKiBXcml0ZSBtZXNzYWdlIHBheWxvYWQgYXMgYSBzZXJpZXMgb2YgaGV4 IGJ5dGVzICovCisJCWZvciAoaW50IGNudCA9IDA7IGNudCA8IHhscmVjLT5tZXNzYWdlX3NpemU7 IGNudCsrKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJTAyWCIsIHNlcCwgKHVu c2lnbmVkIGNoYXIpIG1lc3NhZ2VbY250XSk7CisJCQlzZXAgPSAiICI7CisJCX0KKwl9Cit9CisK K2NvbnN0IGNoYXIgKgorbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBpbmZvKQoreworCWlm ICgoaW5mbyAmIH5YTFJfSU5GT19NQVNLKSA9PSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJ CXJldHVybiAiRERMIjsKKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL21lc29uLmJ1aWxkCmluZGV4IGE3YTdiYWVjZDEuLjMwNTIwYjA1ZTAgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3Mvcm1ncmRlc2MvbWVzb24uYnVpbGQKQEAgLTExLDYgKzExLDcgQEAgcm1ncl9kZXNj X3NvdXJjZXMgPSBmaWxlcygKICAgJ2dpc3RkZXNjLmMnLAogICAnaGFzaGRlc2MuYycsCiAgICdo ZWFwZGVzYy5jJywKKyAgJ2xvZ2ljYWxkZGxtc2dkZXNjLmMnLAogICAnbG9naWNhbG1zZ2Rlc2Mu YycsCiAgICdteGFjdGRlc2MuYycsCiAgICduYnRkZXNjLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vcm1nci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v cm1nci5jCmluZGV4IDdkNjdlZGE1ZjcuLjY3OGU4MWFlMDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9ybWdyLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAi ZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9u L2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgi CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQppbmRleCBjNGUyZmRlYjcx Li5kNGYyOWY4ZmZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUK QEAgLTE1LDYgKzE1LDcgQEAgaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmds b2JhbAogb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLUkkKHNyY2RpcikgJChDUFBGTEFHUykKIAogT0JK UyA9IFwKKwlkZGxtZXNzYWdlLm9cCiAJZGVjb2RlLm8gXAogCWxhdW5jaGVyLm8gXAogCWxvZ2lj YWwubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1l c3NhZ2UuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmUxMWU1NmU1YTMKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwpA QCAtMCwwICsxLDg0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxtZXNzYWdlLmMK KyAqCSAgTG9naWNhbCBEREwgbWVzc2FnZXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyLCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9O CisgKgkgIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgor ICogTk9URVMKKyAqCisgKiBMb2dpY2FsIERETCBtZXNzYWdlcyBhbGxvdyBYTE9HIGxvZ2dpbmcg b2YgRERMIGNvbW1hbmQgc3RyaW5ncyB0aGF0CisgKiBnZXQgcGFzc2VkIHRvIHRoZSBsb2dpY2Fs IGRlY29kaW5nIHBsdWdpbi4gSW4gbm9ybWFsIFhMT0cgcHJvY2Vzc2luZyB0aGV5CisgKiBhcmUg c2FtZSBhcyBOT09QLgorICoKKyAqIFVubGlrZSBnZW5lcmljIGxvZ2ljYWwgbWVzc2FnZXMsIHRo ZXNlIERETCBtZXNzYWdlcyBoYXZlIG9ubHkgdHJhbnNhY3Rpb25hbAorICogbW9kZS4gTm90ZSBi eSBkZWZhdWx0IERETHMgaW4gUG9zdGdyZVNRTCBhcmUgdHJhbnNhY3Rpb25hbC4KKyAqCisgKiBU aGVzZSBtZXNzYWdlcyBhcmUgcGFydCBvZiBjdXJyZW50IHRyYW5zYWN0aW9uIGFuZCB3aWxsIGJl IHNlbnQgdG8KKyAqIGRlY29kaW5nIHBsdWdpbiB1c2luZyBpbiBhIHNhbWUgd2F5IGFzIERNTCBv cGVyYXRpb25zLgorICoKKyAqIEV2ZXJ5IG1lc3NhZ2UgY2FycmllcyBwcmVmaXggdG8gYXZvaWQg Y29uZmxpY3RzIGJldHdlZW4gZGlmZmVyZW50IGRlY29kaW5nCisgKiBwbHVnaW5zLiBUaGUgcGx1 Z2luIGF1dGhvcnMgbXVzdCB0YWtlIGV4dHJhIGNhcmUgdG8gdXNlIHVuaXF1ZSBwcmVmaXgsCisg KiBnb29kIG9wdGlvbnMgc2VlbXMgdG8gYmUgZm9yIGV4YW1wbGUgdG8gdXNlIHRoZSBuYW1lIG9m IHRoZSBleHRlbnNpb24uCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1 ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImFj Y2Vzcy94bG9naW5zZXJ0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNs dWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKKyNpbmNsdWRl ICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2Fn ZS5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisKKy8qCisgKiBXcml0ZSBsb2dpY2Fs IGRlY29kaW5nIERETCBtZXNzYWdlIGludG8gWExvZy4KKyAqLworWExvZ1JlY1B0cgorTG9nTG9n aWNhbERETE1lc3NhZ2UoY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29t bWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHNpemVfdCBzaXpl KQoreworCXhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgeGxyZWM7CisKKwkgLyogRW5zdXJlIHdlIGhh dmUgYSB2YWxpZCB0cmFuc2FjdGlvbiBpZC4gKi8KKwlBc3NlcnQoSXNUcmFuc2FjdGlvblN0YXRl KCkpOworCUdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7CisKKwl4bHJlYy5kYklkID0gTXlEYXRh YmFzZUlkOworCS8qIFRyYWlsaW5nIHplcm8gaXMgY3JpdGljYWw7IHNlZSBsb2dpY2FsZGRsbXNn X2Rlc2MgKi8KKwl4bHJlYy5wcmVmaXhfc2l6ZSA9IHN0cmxlbihwcmVmaXgpICsgMTsKKwl4bHJl Yy5tZXNzYWdlX3NpemUgPSBzaXplOworCXhscmVjLnJlbGlkID0gcmVsaWQ7CisJeGxyZWMuY21k dHlwZSA9IGNtZHR5cGU7CisKKwlYTG9nQmVnaW5JbnNlcnQoKTsKKwlYTG9nUmVnaXN0ZXJEYXRh KChjaGFyICopICZ4bHJlYywgU2l6ZU9mTG9naWNhbERETE1lc3NhZ2UpOworCVhMb2dSZWdpc3Rl ckRhdGEodW5jb25zdGlmeShjaGFyICosIHByZWZpeCksIHhscmVjLnByZWZpeF9zaXplKTsKKwlY TG9nUmVnaXN0ZXJEYXRhKHVuY29uc3RpZnkoY2hhciAqLCBtZXNzYWdlKSwgc2l6ZSk7CisKKwkv KiBBbGxvdyBvcmlnaW4gZmlsdGVyaW5nICovCisJWExvZ1NldFJlY29yZEZsYWdzKFhMT0dfSU5D TFVERV9PUklHSU4pOworCisJcmV0dXJuIFhMb2dJbnNlcnQoUk1fTE9HSUNBTERETE1TR19JRCwg WExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKTsKK30KKworLyoKKyAqIFJlZG8gaXMgYmFzaWNhbGx5 IGp1c3Qgbm9vcCBmb3IgbG9naWNhbCBkZWNvZGluZyBkZGwgbWVzc2FnZXMuCisgKi8KK3ZvaWQK K2xvZ2ljYWxkZGxtc2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKK3sKKwl1aW50OAkJ aW5mbyA9IFhMb2dSZWNHZXRJbmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFTSzsKKworCWlmIChp bmZvICE9IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhQQU5JQywgImxvZ2ljYWxk ZGxtc2dfcmVkbzogdW5rbm93biBvcCBjb2RlICV1IiwgaW5mbyk7CisKKwkvKiBUaGlzIGlzIG9u bHkgaW50ZXJlc3RpbmcgZm9yIGxvZ2ljYWwgZGVjb2RpbmcsIHNlZSBkZWNvZGUuYy4gKi8KK30K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCmluZGV4IDFiOWYw NzJlZGMuLjA3NzU2ZTkwYWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9t ZXNvbi5idWlsZApAQCAtMSw2ICsxLDcgQEAKICMgQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogCiBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMo CisgICdkZGxtZXNzYWdlLmMnLAogICAnZGVjb2RlLmMnLAogICAnbGF1bmNoZXIuYycsCiAgICds b2dpY2FsLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMgYi9z cmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwppbmRleCA2YjhjMTdiYjRjLi5kYWYxNzMwMjUy IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYworKysgYi9zcmMvYmlu L3BnX3dhbGR1bXAvcm1ncmRlc2MuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbW1h bmRzL2RiY29tbWFuZHNfeGxvZy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNlLmgiCiAj aW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2Rk bG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vb3JpZ2luLmgiCiAjaW5jbHVkZSAicm1ncmRlc2MuaCIKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3Js aXN0LmgKaW5kZXggMDAwYmNiZmRhZi4uZWVmYzEzYTFlMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgK QEAgLTQ3LDMgKzQ3LDQgQEAgUEdfUk1HUihSTV9DT01NSVRfVFNfSUQsICJDb21taXRUcyIsIGNv bW1pdF90c19yZWRvLCBjb21taXRfdHNfZGVzYywgY29tbWl0X3RzX2kKIFBHX1JNR1IoUk1fUkVQ TE9SSUdJTl9JRCwgIlJlcGxpY2F0aW9uT3JpZ2luIiwgcmVwbG9yaWdpbl9yZWRvLCByZXBsb3Jp Z2luX2Rlc2MsIHJlcGxvcmlnaW5faWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCiBQ R19STUdSKFJNX0dFTkVSSUNfSUQsICJHZW5lcmljIiwgZ2VuZXJpY19yZWRvLCBnZW5lcmljX2Rl c2MsIGdlbmVyaWNfaWRlbnRpZnksIE5VTEwsIE5VTEwsIGdlbmVyaWNfbWFzaywgTlVMTCkKIFBH X1JNR1IoUk1fTE9HSUNBTE1TR19JRCwgIkxvZ2ljYWxNZXNzYWdlIiwgbG9naWNhbG1zZ19yZWRv LCBsb2dpY2FsbXNnX2Rlc2MsIGxvZ2ljYWxtc2dfaWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEws IGxvZ2ljYWxtc2dfZGVjb2RlKQorUEdfUk1HUihSTV9MT0dJQ0FMRERMTVNHX0lELCAiTG9naWNh bERETE1lc3NhZ2UiLCBsb2dpY2FsZGRsbXNnX3JlZG8sIGxvZ2ljYWxkZGxtc2dfZGVzYywgbG9n aWNhbGRkbG1zZ19pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCBiL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL2RkbG1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li43N2RmNmVhMTFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v ZGRsbWVzc2FnZS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogZGRs bWVzc2FnZS5oCisgKgkgICBFeHBvcnRzIGZyb20gcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNz YWdlLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5o CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19MT0dJQ0FMX0RETF9NRVNTQUdF X0gKKyNkZWZpbmUgUEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisKKyNpbmNsdWRlICJhY2Nlc3Mv eGxvZy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vzcy94 bG9ncmVhZGVyLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKworCisvKgorICogU3VwcG9y dCBmb3Iga2VlcGluZyB0cmFjayBvZiBkZXBhcnNlZCBjb21tYW5kcy4KKyAqLwordHlwZWRlZiBl bnVtIERlcGFyc2VkQ29tbWFuZFR5cGUKK3sKKwlEQ1RfU2ltcGxlQ21kLAorCURDVF9UYWJsZURy b3BTdGFydCwKKwlEQ1RfVGFibGVEcm9wRW5kLAorCURDVF9UYWJsZUFsdGVyLAorCURDVF9PYmpl Y3RDcmVhdGUsCisJRENUX09iamVjdERyb3AKK30gRGVwYXJzZWRDb21tYW5kVHlwZTsKKworLyoK KyAqIEdlbmVyaWMgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSB3YWwgcmVjb3JkLgorICov Cit0eXBlZGVmIHN0cnVjdCB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlCit7CisJT2lkCQkJZGJJZDsJ CQkvKiBkYXRhYmFzZSBPaWQgZW1pdHRlZCBmcm9tICovCisJU2l6ZQkJcHJlZml4X3NpemU7CS8q IGxlbmd0aCBvZiBwcmVmaXggaW5jbHVkaW5nIG51bGwgdGVybWluYXRvciAqLworCU9pZAkJCXJl bGlkOwkJCS8qIGlkIG9mIHRoZSB0YWJsZSAqLworCURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlw ZTsJLyogdHlwZSBvZiBzcWwgY29tbWFuZCAqLworCVNpemUJCW1lc3NhZ2Vfc2l6ZTsJLyogc2l6 ZSBvZiB0aGUgbWVzc2FnZSAqLworCisJLyoKKwkgKiBwYXlsb2FkLCBpbmNsdWRpbmcgbnVsbC10 ZXJtaW5hdGVkIHByZWZpeCBvZiBsZW5ndGggcHJlZml4X3NpemUKKwkgKi8KKwljaGFyCQltZXNz YWdlW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2U7CisK KyNkZWZpbmUgU2l6ZU9mTG9naWNhbERETE1lc3NhZ2UJKG9mZnNldG9mKHhsX2xvZ2ljYWxfZGRs X21lc3NhZ2UsIG1lc3NhZ2UpKQorCitleHRlcm4gWExvZ1JlY1B0ciBMb2dMb2dpY2FsRERMTWVz c2FnZShjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBj bWR0eXBlLAorCQkJCQkJCQkJICAgY29uc3QgY2hhciAqZGRsX21lc3NhZ2UsIHNpemVfdCBzaXpl KTsKKworLyogUk1HUiBBUEkqLworI2RlZmluZSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UJMHgw MAordm9pZAkJbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK3Zv aWQJCWxvZ2ljYWxkZGxtc2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpy ZWNvcmQpOworY29uc3QgY2hhciAqbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBpbmZvKTsK KworI2VuZGlmCi0tIAoyLjM0LjEKCg== --000000000000aabe2b05f059cb57 Content-Type: text/x-patch; charset="US-ASCII"; name="v55-0005-Introduce-the-test_ddl_deparse_regress-test-modu.patch" Content-Disposition: attachment; filename="v55-0005-Introduce-the-test_ddl_deparse_regress-test-modu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbxx7xwg4 RnJvbSA5Zjk5ZDMzOGNlYmYyNzcyN2Q5ZmM1NDFmNjgzMjc5MzA1NzNhYzZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTkgRGVjIDIwMjIgMDc6NTc6MjggLTA1MDAKU3ViamVjdDogW1BBVENI IHY1NSA1LzVdIEludHJvZHVjZSB0aGUgdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIHRlc3QgbW9k dWxlLgoKVGhpcyB0ZXN0aW5nIG1vZHVsZSBhaW1zIHRvIGFjaGlldmUgdGhlIGZvbGxvd2luZyBm b3VyIHRlc3RpbmcgZ29hbHMgZm9yIHRoZSBEREwgZGVwYXJzZXI6CjEuIFRlc3QgdGhhdCB0aGUg Z2VuZXJhdGVkIEpTT04gYmxvYiBpcyBleHBlY3RlZCB1c2luZyBTUUwgdGVzdHMuCjIuIFRlc3Qg dGhhdCB0aGUgcmUtZm9ybWVkIERETCBjb21tYW5kIGlzIGV4cGVjdGVkIHVzaW5nIFNRTCB0ZXN0 cy4KMy4gVGVzdCB0aGF0IHRoZSByZS1mb3JtZWQgRERMIGNvbW1hbmQgaGFzIHRoZSBzYW1lIGVm ZmVjdCBhcyB0aGUgb3JpZ2luYWwgY29tbWFuZCBieSBjb21wYXJpbmcKICAgdGhlIHJlc3VsdHMg b2YgcGdfZHVtcCwgdXNpbmcgdGhlIFNRTCB0ZXN0cyBpbiAxIGFuZCAyLgo0LiBUZXN0IHRoYXQg bmV3IERETCBzeW50YXggaXMgaGFuZGxlZCBieSB0aGUgRERMIGRlcGFyc2VyIGJ5IGNhcHR1cmlu ZyBhbmQgZGVwYXJpbmcgRERMIGNvbW1hbmRzCiAgIHJhbiBieSBwZ19yZWdyZXNzLgoKMSBhbmQg MiBpcyB0ZXN0ZWQgd2l0aCBTUUwgdGVzdHMsIGJ5IHByaW50aW5nIHRoZSBkZXBhcnNlZCBKU09O IGJsb2IgYW5kIHRoZSByZS1mb3JtZWQgY29tbWFuZC4KCkdvYWwgMyBpcyB0ZXN0ZWQgd2l0aCBU QVAgZnJhbWV3b3JrIGluIHQvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKCkdvYWwgNCBp cyB0ZXN0ZWQgd2l0aCBUQVAgZnJhbWV3b3JrIGFuZCBwZ19yZWdyZXNzIGluIDAwMl9yZWdyZXNz X3Rlc3RzLnBsLCB0aGUgZXhlY3V0aW9uIGlzIGN1cnJlbnRseSBjb21tZW50ZWQgb3V0IGJlY2F1 c2UgaXQgd2lsbCBmYWlsIGR1ZSB1bmltcGxlbWVudGVkIGNvbW1hbmRzIGluIHRoZSBEREwgZGVw YXJzZXIuCi0tLQogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvLmdpdGlnbm9yZSAgICAgICB8 ICAgNCArCiAuLi4vbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUgfCAg NDMgKysrKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQgICAgICAgIHwg IDIyICsrCiAuLi4vZXhwZWN0ZWQvY3JlYXRlX2V4dGVuc2lvbi5vdXQgICAgICAgICAgICAgfCAg IDYgKwogLi4uL2V4cGVjdGVkL2NyZWF0ZV9zY2hlbWEub3V0ICAgICAgICAgICAgICAgIHwgIDIy ICsrCiAuLi4vZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dCAgICAgICAgICAgICAgICAgfCAgMzkg KysrKwogLi4uL2V4cGVjdGVkL3Rlc3RfZGRsX2RlcGFyc2Uub3V0ICAgICAgICAgICAgIHwgIDE4 ICsrCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1aWxkICAgICAgfCAgNDIg KysrKwogLi4uL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbCAgICAgICAgICAgICAgICAgIHwgICA1 ICsKIC4uLi9zcWwvY3JlYXRlX3NjaGVtYS5zcWwgICAgICAgICAgICAgICAgICAgICB8ICAxNiAr KwogLi4uL3NxbC9jcmVhdGVfdGFibGUuc3FsICAgICAgICAgICAgICAgICAgICAgIHwgIDE1ICsr CiAuLi4vc3FsL3Rlc3RfZGRsX2RlcGFyc2Uuc3FsICAgICAgICAgICAgICAgICAgfCAgMjAgKysK IC4uLi90LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsICAgICAgICAgICB8IDE4MSArKysr KysrKysrKysrKysKIC4uLi90LzAwMl9yZWdyZXNzX3Rlc3RzLnBsICAgICAgICAgICAgICAgICAg ICB8IDIwNyArKysrKysrKysrKysrKysrKysKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mt LTEuMC5zcWwgICAgICAgICB8ICAgOSArCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMg ICAgICAgICAgICAgICAgfCAgNTkgKysrKysKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mu Y29udHJvbCAgICAgICAgICB8ICAgNCArCiAxOCBmaWxlcyBjaGFuZ2VkLCA3MTMgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzLy5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL1JFQURNRS5tZAogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4 cGVjdGVkL2NyZWF0ZV9leHRlbnNpb24ub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3NjaGVtYS5v dXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvdGVzdF9kZGxf ZGVwYXJzZS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNx bAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzL3NxbC9jcmVhdGVfc2NoZW1hLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3Mvc3FsL3Rlc3RfZGRsX2RlcGFyc2Uuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdC8wMDFfY29tcGFyZV9kdW1wZWRfcmVz dWx0cy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL3QvMDAyX3JlZ3Jlc3NfdGVzdHMucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jb250cm9sCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKaW5kZXggYzYyOWNiZTM4 My4uYzI3MmM2NGEyMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw3IEBAIFNVQkRJUlMgPSBc CiAJCSAgdGVzdF9jb3B5X2NhbGxiYWNrcyBcCiAJCSAgdGVzdF9jdXN0b21fcm1ncnMgXAogCQkg IHRlc3RfZGRsX2RlcGFyc2UgXAorCQkgIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyBcCiAJCSAg dGVzdF9leHRlbnNpb25zIFwKIAkJICB0ZXN0X2dpbnBvc3RpbmdsaXN0IFwKIAkJICB0ZXN0X2lu dGVnZXJzZXQgXApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MvLmdpdGlnbm9yZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u NWRjYjNmZjk3MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzLy5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBACisjIEdlbmVyYXRlZCBz dWJkaXJlY3RvcmllcworL2xvZy8KKy9yZXN1bHRzLworL3RtcF9jaGVjay8KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL01ha2VmaWxlIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMzhlMjA3YWI2MgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL01ha2VmaWxlCkBA IC0wLDAgKzEsNDMgQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIE1ha2VmaWxlIGZvciBzcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcworIworIyBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyMgUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5 IG9mIENhbGlmb3JuaWEKKyMKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MvTWFrZWZpbGUKKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworTU9EVUxFUyA9IHRlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcworUEdGSUxFREVTQyA9ICJ0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MgLSByZWdyZXNzaW9uIHRlc3RpbmcgZm9yIERETCBkZXBhcnNpbmciCisKK0VYVEVOU0lPTiA9 IHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcworREFUQSA9IHRlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy0tMS4wLnNxbAorCisjIHRlc3RfZGRsX2RlcGFyc2UgbXVzdCBiZSBmaXJzdAorUkVHUkVTUyA9 IHRlc3RfZGRsX2RlcGFyc2UgXAorCWNyZWF0ZV9leHRlbnNpb24gXAorCWNyZWF0ZV9zY2hlbWEg XAorCWNyZWF0ZV90YWJsZQorCitleHBvcnQgUkVHUkVTUworCitFWFRSQV9JTlNUQUxMID0gY29u dHJpYi9wZ19zdGF0X3N0YXRlbWVudHMKKworVEFQX1RFU1RTID0gMQorCitpZmRlZiBVU0VfUEdY UworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0t cGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNs dWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3Ny Y2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKKworUkVHUkVTU19TSExJQj0k KGFic190b3BfYnVpbGRkaXIpL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcyQoRExTVUZGSVgpCitl eHBvcnQgUkVHUkVTU19TSExJQgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MvUkVBRE1FLm1kIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3MvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLmNjMjUxOTg5NWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQKQEAgLTAsMCArMSwyMiBAQAorIyBUZXN0 aW5nIGhhcm5lc3MgZm9yIERETCBkZXBhcnNlcgorCisjIyBUZXN0aW5nIGdvYWxzCisKK0RETCBE ZXBhcnNlciBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBlbmNvZGUgdGhlIG9yaWdpbmFsIERETCBj b21tYW5kIHRvIGEgSlNPTiBzdHJpbmcsIHRoZW4gZGVjb2RlIGl0IHRvIGEgZnVsbHkgc2NoZW1h LXF1YWxpZmllZCBEREwgY29tbWFuZCB3aGljaCBpcyBzdXBwb3NlZCB0byBoYXZlIHRoZSBzYW1l IGVmZmVjdCBhcyB0aGUgb3JpZ2luYWwgY29tbWFuZC4gVGhpcyB0ZXN0aW5nIG1vZHVsZSBhaW1z IHRvIGFjaGlldmUgdGhlIGZvbGxvd2luZyBmb3VyIHRlc3RpbmcgZm9yIHRoZSBEREwgZGVwYXJz ZXI6CisKKzEuIFRlc3QgdGhhdCB0aGUgZ2VuZXJhdGVkIEpTT04gYmxvYiBpcyBleHBlY3RlZCB1 c2luZyBTUUwgdGVzdHMuCisyLiBUZXN0IHRoYXQgdGhlIHJlLWZvcm1lZCBEREwgY29tbWFuZCBp cyBleHBlY3RlZCB1c2luZyBTUUwgdGVzdHMuCiszLiBUZXN0CXRoYXQgdGhlIHJlLWZvcm1lZCBE REwgY29tbWFuZCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kCisg ICBieSBjb21wYXJpbmcJdGhlIHJlc3VsdHMgb2YgcGdfZHVtcCwJdXNpbmcgdGhlIFNRTCB0ZXN0 cyBpbiAxIGFuZCAyLgorNC4gVGVzdAl0aGF0IG5ldyBEREwgc3ludGF4IGlzIGhhbmRsZWQgYnkg dGhlIERETCBkZXBhcnNlciBieSBjYXB0dXJpbmcgYW5kIGRlcGFyaW5nCisgICBEREwgY29tbWFu ZHMJcmFuIGJ5IHBnX3JlZ3Jlc3MuCisKKzEgYW5kIDIgaXMgdGVzdGVkIHdpdGggU1FMIHRlc3Rz LCBieSBub3RpY2luZyB0aGUgZGVwYXJzZWQgSlNPTiBibG9iIGFuZCB0aGUgcmUtZm9ybWVkIGNv bW1hbmQuCisKK0dvYWwgMyBpcyB0ZXN0ZWQgd2l0aCBUQVAgZnJhbWV3b3JrIGluIHQvMDAxX2Nv bXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKKworR29hbCA0IGlzIHRlc3RlZCB3aXRoIFRBUCBmcmFt ZXdvcmsgYW5kIHBnX3JlZ3Jlc3MgaW4gMDAyX3JlZ3Jlc3NfdGVzdHMucGwKKworIyMgVXNhZ2UK KworUnVuIGBtYWtlIGNoZWNrYCwgaXQgd2lsbCBydW4gdGhlIFNRTCB0ZXN0cyBmaXJzdCwgdGhl biBpdCB3aWxsIHJ1biB0aGUgVEFQIHRlc3RzLiBUaGUgZXhlY3V0aW9uIG9mIDAwMl9yZWdyZXNz X3Rlc3RzLnBsIGlzIGN1cnJlbnRseSBjb21tZW50ZWQgb3V0IGJlY2F1c2UgaXQgd2lsbCBmYWls IGR1ZSB0byB1bmltcGxlbWVudGVkIGNvbW1hbmRzIGluIHRoZSBEREwgZGVwYXJzZXIuCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3Rl ZC9jcmVhdGVfZXh0ZW5zaW9uLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9leHRlbnNpb24ub3V0Cm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA2Y2NjNjJiYTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfZXh0 ZW5zaW9uLm91dApAQCAtMCwwICsxLDYgQEAKKy0tLQorLS0tIENSRUFURV9FWFRFTlNJT04KKy0t LQorQ1JFQVRFIEVYVEVOU0lPTiBwZ19zdGF0X3N0YXRlbWVudHM7CitOT1RJQ0U6ICBkZXBhcnNl ZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgRVhURU5TSU9OICV7aWZfbm90X2V4aXN0c31zICV7bmFt ZX1JICV7b3B0aW9uczogfXMiLCAibmFtZSI6ICJwZ19zdGF0X3N0YXRlbWVudHMiLCAib3B0aW9u cyI6IFt7ImZtdCI6ICJTQ0hFTUEgJXtzY2hlbWF9SSIsICJ0eXBlIjogInNjaGVtYSIsICJzY2hl bWEiOiAicHVibGljIn1dLCAiaWZfbm90X2V4aXN0cyI6ICIifQorTk9USUNFOiAgcmUtZm9ybWVk IGNvbW1hbmQ6IENSRUFURSBFWFRFTlNJT04gIHBnX3N0YXRfc3RhdGVtZW50cyBTQ0hFTUEgcHVi bGljCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy9leHBlY3RlZC9jcmVhdGVfc2NoZW1hLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9zY2hlbWEub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjFlMDlkYTUxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVf c2NoZW1hLm91dApAQCAtMCwwICsxLDIyIEBACistLQorLS0gQ1JFQVRFX1NDSEVNQQorLS0KK0NS RUFURSBTQ0hFTUEgZm9vOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRF IFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle2F1dGhvcml6YXRpb259cyIsICJu YW1lIjogImZvbyIsICJhdXRob3JpemF0aW9uIjogeyJmbXQiOiAiQVVUSE9SSVpBVElPTiAle2F1 dGhvcml6YXRpb25fcm9sZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgImF1dGhvcml6YXRpb25fcm9s ZSI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIifQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1h bmQ6IENSRUFURSBTQ0hFTUEgIGZvbyAKK0NSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyBiYXI7 CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90 X2V4aXN0c31zICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUiOiAiYmFyIiwgImF1 dGhvcml6YXRpb24iOiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xl fUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9u b3RfZXhpc3RzIjogIklGIE5PVCBFWElTVFMifQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6 IENSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyBiYXIgCitDUkVBVEUgU0NIRU1BIGJhejsKK05P VElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhp c3RzfXMgJXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMiLCAibmFtZSI6ICJiYXoiLCAiYXV0aG9y aXphdGlvbiI6IHsiZm10IjogIkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIs ICJwcmVzZW50IjogZmFsc2UsICJhdXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9l eGlzdHMiOiAiIn0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgU0NIRU1BICBi YXogCistLSBXaWxsIG5vdCBiZSBjcmVhdGVkLCBhbmQgd2lsbCBub3QgYmUgaGFuZGxlZCBieSB0 aGUKKy0tIGV2ZW50IHRyaWdnZXIKK0NSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyBiYXo7CitO T1RJQ0U6ICBzY2hlbWEgImJheiIgYWxyZWFkeSBleGlzdHMsIHNraXBwaW5nCitDUkVBVEUgU0NI RU1BIGVsZW1lbnRfdGVzdAorICBDUkVBVEUgVEFCTEUgZm9vIChpZCBpbnQpCitOT1RJQ0U6ICBk ZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7 bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUiOiAiZWxlbWVudF90ZXN0IiwgImF1dGhv cml6YXRpb24iOiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUki LCAicHJlc2VudCI6IGZhbHNlLCAiYXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3Rf ZXhpc3RzIjogIiJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFIFNDSEVNQSAg ZWxlbWVudF90ZXN0IAorTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7 cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFi bGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0 fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAi aWRlbnRpdHkiOiB7Im9iam5hbWUiOiAiZm9vIiwgInNjaGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0 In0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFy ZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04g Q09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0 X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxl c3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0 ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxz ZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMi LCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6 IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFj Y2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRz IjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMg JXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7 Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29s dHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50 NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZB VUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJm bXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIs ICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9k fUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5l cmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50Ijog ZmFsc2V9fV19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFICBUQUJMRSAgZWxl bWVudF90ZXN0LmZvbyAoaWQgcGdfY2F0YWxvZy5pbnQ0IFNUT1JBR0UgcGxhaW4gICAgICkgICAg ICAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0Cm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLmU1YjYyMmQwZDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFi bGUub3V0CkBAIC0wLDAgKzEsMzkgQEAKK0NSRUFURSBUQUJMRSBzaW1wbGVfdGFibGUoCisgICAg aWQgaW50LAorICAgIG5hbWUgdmFyY2hhcig1KQorKTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246 IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMg JXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxl c3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMg JXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogInNpbXBsZV90YWJsZSIs ICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAo JXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9u X2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNl bnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10 IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVz cGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAi V0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElU SU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBu dWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIs ICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3Rz IjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBT VE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90 X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImlkIiwg InR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBm YWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJk ZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwi OiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwg ImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lP TiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9u X21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBB TFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlw ZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMg JXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAi bmFtZSIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiKDUpIiwgInR5 cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ2YXJjaGFyIiwgInNjaGVtYW5hbWUiOiAicGdf Y2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNl fSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1E IiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFs b2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVuZGVkIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAi Q09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJj b21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJH RU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19XX0KK05PVElDRTogIHJlLWZv cm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBwdWJsaWMuc2ltcGxlX3RhYmxlIChpZCBwZ19j YXRhbG9nLmludDQgU1RPUkFHRSBwbGFpbiAgICAgLCBuYW1lIHBnX2NhdGFsb2cuInZhcmNoYXIi KDUpIFNUT1JBR0UgZXh0ZW5kZWQgIENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgICApICAg ICAgCistLSBUZXN0IFRhYmxlTGlrZUNsYXVzZSBpcyBoYW5kbGVkIHByb3Blcmx5CitDUkVBVEUg VEFCTEUgY3RsdDEgKGEgdGV4dCBDSEVDSyAobGVuZ3RoKGEpID4gMikgUFJJTUFSWSBLRVksIGIg dGV4dCk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXtwZXJzaXN0 ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9lbGVt ZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAle3Bh cnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVudGl0 eSI6IHsib2JqbmFtZSI6ICJjdGx0MSIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9LCAiaW5oZXJp dHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMiOiBudWxs LCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1JVCAle29u X2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6IG51 bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAi cHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2UiOiAiIiwg IndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAicGFydGl0 aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInByZXNlbnQi OiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6ICJV U0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0aG9k IjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZtdCI6 ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Np b259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9j b2x1bW59cyIsICJuYW1lIjogImEiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlw bW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAidGV4dCIsICJzY2hlbWFu YW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNl bnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFU RSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAic2NoZW1hbmFtZSI6 ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRlbmRlZCIsICJjb21wcmVzc2lvbiI6 IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6 IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjog eyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJmbXQi OiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNz aW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRf Y29sdW1ufXMiLCAibmFtZSI6ICJiIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5 cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogInRleHQiLCAic2NoZW1h bmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVz ZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExB VEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6ICJkZWZhdWx0IiwgInNjaGVtYW5hbWUi OiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAiZXh0ZW5kZWQiLCAiY29tcHJlc3Npb24i OiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQi OiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6 IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10 IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAibmFtZSI6ICJjdGx0MV9h X2NoZWNrIiwgInR5cGUiOiAiY29uc3RyYWludCIsICJjb250eXBlIjogImNoZWNrIiwgImRlZmlu aXRpb24iOiAiQ0hFQ0sgKChwZ19jYXRhbG9nLmxlbmd0aChhKSBPUEVSQVRPUihwZ19jYXRhbG9n Lj4pIDIpKSJ9LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwg Im5hbWUiOiAiY3RsdDFfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlwZSI6ICJw cmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChhKSJ9XX0KK05PVElDRTog IHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBwdWJsaWMuY3RsdDEgKGEgcGdfY2F0 YWxvZy50ZXh0IFNUT1JBR0UgZXh0ZW5kZWQgIENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIg ICAsIGIgcGdfY2F0YWxvZy50ZXh0IFNUT1JBR0UgZXh0ZW5kZWQgIENPTExBVEUgcGdfY2F0YWxv Zy4iZGVmYXVsdCIgICAsIENPTlNUUkFJTlQgY3RsdDFfYV9jaGVjayBDSEVDSyAoKHBnX2NhdGFs b2cubGVuZ3RoKGEpIE9QRVJBVE9SKHBnX2NhdGFsb2cuPikgMikpLCBDT05TVFJBSU5UIGN0bHQx X3BrZXkgUFJJTUFSWSBLRVkgKGEpKSAgICAgIAorTk9USUNFOiAgZGVwYXJzZWQganNvbjogPE5V TEw+CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogPE5VTEw+CitBTFRFUiBUQUJMRSBjdGx0 MSBBTFRFUiBDT0xVTU4gYSBTRVQgU1RPUkFHRSBNQUlOOworTk9USUNFOiAgZGVwYXJzZWQganNv bjogeyJmbXQiOiAiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1z IiwgIm9ianR5cGUiOiAiVEFCTEUiLCAic3ViY21kcyI6IFt7ImZtdCI6ICJBTFRFUiBDT0xVTU4g JXtjb2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsICJ0eXBlIjogInNldCBzdG9yYWdl IiwgImNvbHVtbiI6ICJhIiwgInN0b3JhZ2UiOiAibWFpbiJ9XSwgImlkZW50aXR5IjogeyJvYmpu YW1lIjogImN0bHQxIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn19CitOT1RJQ0U6ICByZS1mb3Jt ZWQgY29tbWFuZDogQUxURVIgVEFCTEUgcHVibGljLmN0bHQxIEFMVEVSIENPTFVNTiBhIFNFVCBT VE9SQUdFIG1haW4KK0FMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENPTFVNTiBiIFNFVCBTVE9SQUdF IEVYVEVSTkFMOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQUxURVIgJXtvYmp0 eXBlfXMgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zIiwgIm9ianR5cGUiOiAiVEFCTEUiLCAi c3ViY21kcyI6IFt7ImZtdCI6ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RPUkFHRSAl e3N0b3JhZ2V9cyIsICJ0eXBlIjogInNldCBzdG9yYWdlIiwgImNvbHVtbiI6ICJiIiwgInN0b3Jh Z2UiOiAiZXh0ZXJuYWwifV0sICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJjdGx0MSIsICJzY2hl bWFuYW1lIjogInB1YmxpYyJ9fQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IEFMVEVSIFRB QkxFIHB1YmxpYy5jdGx0MSBBTFRFUiBDT0xVTU4gYiBTRVQgU1RPUkFHRSBleHRlcm5hbAorQ1JF QVRFIFRBQkxFIGN0bHQxX2xpa2UgKExJS0UgY3RsdDEgSU5DTFVESU5HIEFMTCk7CitOT1RJQ0U6 ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7 aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2lu aGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7 YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6 ICJjdGx0MV9saWtlIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0sICJpbmhlcml0cyI6IHsiZm10 IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50 IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0X3Zh bHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJs ZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50Ijog ZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1 c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7 ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAi ZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNj ZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwg ImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1J ICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29s bGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwg Im5hbWUiOiAiYSIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwg InR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUiOiAicGdf Y2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNl fSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1E IiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFs b2cifX0sICJjb2xzdG9yYWdlIjogIm1haW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01Q UkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXBy ZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVS QVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1JICV7 Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0 aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5h bWUiOiAiYiIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5 cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0 YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwg Im5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwg Im5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2ci fX0sICJjb2xzdG9yYWdlIjogImV4dGVybmFsIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09N UFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21w cmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5F UkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICJDT05TVFJBSU5U ICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAiY3RsdDFfYV9jaGVjayIsICJ0eXBl IjogImNvbnN0cmFpbnQiLCAiY29udHlwZSI6ICJjaGVjayIsICJkZWZpbml0aW9uIjogIkNIRUNL ICgocGdfY2F0YWxvZy5sZW5ndGgoYSkgT1BFUkFUT1IocGdfY2F0YWxvZy4+KSAyKSkifSwgeyJm bXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjogImN0bHQx X2xpa2VfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlwZSI6ICJwcmltYXJ5IGtl eSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChhKSJ9XX0KK05PVElDRTogIHJlLWZvcm1l ZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBwdWJsaWMuY3RsdDFfbGlrZSAoYSBwZ19jYXRhbG9n LnRleHQgU1RPUkFHRSBtYWluICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgLCBiIHBn X2NhdGFsb2cudGV4dCBTVE9SQUdFIGV4dGVybmFsICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1 bHQiICAgLCBDT05TVFJBSU5UIGN0bHQxX2FfY2hlY2sgQ0hFQ0sgKChwZ19jYXRhbG9nLmxlbmd0 aChhKSBPUEVSQVRPUihwZ19jYXRhbG9nLj4pIDIpKSwgQ09OU1RSQUlOVCBjdGx0MV9saWtlX3Br ZXkgUFJJTUFSWSBLRVkgKGEpKSAgICAgIAorTk9USUNFOiAgZGVwYXJzZWQganNvbjogPE5VTEw+ CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogPE5VTEw+CitOT1RJQ0U6ICBkZXBhcnNlZCBq c29uOiA8TlVMTD4KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiA8TlVMTD4KKy0tIFRlc3Qg Zm9yZWlnbiBrZXkgY29uc3RyYWludCBpcyBoYW5kbGVkIGluIGEgZm9sbG93aW5nIEFMVEVSIFRB QkxFIEFERCBDT05TVFJBSU5UIEZPUkVJR04gS0VZIFJFRkVSRU5DRVMgc3ViY29tbWFuZAorQ1JF QVRFIFRBQkxFIHByb2R1Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsKK05PVElD RTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUg JXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7 aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9uX2J5fXMg JXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJvYmpuYW1l IjogInByb2R1Y3QiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifSwgImluaGVyaXRzIjogeyJmbXQi OiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQi OiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFs dWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxl c3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBm YWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVz ZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsi Zm10IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJk ZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nl c3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAi aWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkg JXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xs YXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAi bmFtZSI6ICJpZCIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwg InR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdf Y2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNl fSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNl bnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQi OiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2Us ICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6 ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICIle25h bWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAl e2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59 cyIsICJuYW1lIjogIm5hbWUiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9k IjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAidGV4dCIsICJzY2hlbWFuYW1l IjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQi OiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSAl e25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAic2NoZW1hbmFtZSI6ICJw Z19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRlbmRlZCIsICJjb21wcmVzc2lvbiI6IHsi Zm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZh bHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJm bXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJmbXQiOiAi Q09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjogInByb2R1Y3RfcGtl eSIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlwZSI6ICJwcmltYXJ5IGtleSIsICJkZWZp bml0aW9uIjogIlBSSU1BUlkgS0VZIChpZCkifV19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFu ZDogQ1JFQVRFICBUQUJMRSAgcHVibGljLnByb2R1Y3QgKGlkIHBnX2NhdGFsb2cuaW50NCBTVE9S QUdFIHBsYWluICAgICAsIG5hbWUgcGdfY2F0YWxvZy50ZXh0IFNUT1JBR0UgZXh0ZW5kZWQgIENP TExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgICAsIENPTlNUUkFJTlQgcHJvZHVjdF9wa2V5IFBS SU1BUlkgS0VZIChpZCkpICAgICAgCitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiA8TlVMTD4KK05P VElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiA8TlVMTD4KK0NSRUFURSBUQUJMRSBvcmRlcnMgKG9y ZGVyX2lkIGludCBQUklNQVJZIEtFWSwgcHJvZHVjdF9pZCBpbnQKK1JFRkVSRU5DRVMgcHJvZHVj dCAoaWQpKTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAle3BlcnNp c3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2Vs ZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7 cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50 aXR5IjogeyJvYmpuYW1lIjogIm9yZGVycyIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9LCAiaW5o ZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMiOiBu dWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1JVCAl e29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6 IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUki LCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2UiOiAi IiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAicGFy dGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInByZXNl bnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6 ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0 aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZt dCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJl c3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRl ZF9jb2x1bW59cyIsICJuYW1lIjogIm9yZGVyX2lkIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5 cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQi LCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVM VCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10 IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAi Y29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1J IiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJh dGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZh bHNlfX0sIHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdl fXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1z ICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAicHJvZHVjdF9pZCIsICJ0eXBlIjogImNv bHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBl bmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsi Zm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xs YXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdl IjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVz c2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBu dWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwg InByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5p dGlvbn1zIiwgIm5hbWUiOiAib3JkZXJzX3BrZXkiLCAidHlwZSI6ICJjb25zdHJhaW50IiwgImNv bnR5cGUiOiAicHJpbWFyeSBrZXkiLCAiZGVmaW5pdGlvbiI6ICJQUklNQVJZIEtFWSAob3JkZXJf aWQpIn1dfQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSAgVEFCTEUgIHB1Ymxp Yy5vcmRlcnMgKG9yZGVyX2lkIHBnX2NhdGFsb2cuaW50NCBTVE9SQUdFIHBsYWluICAgICAsIHBy b2R1Y3RfaWQgcGdfY2F0YWxvZy5pbnQ0IFNUT1JBR0UgcGxhaW4gICAgICwgQ09OU1RSQUlOVCBv cmRlcnNfcGtleSBQUklNQVJZIEtFWSAob3JkZXJfaWQpKSAgICAgIAorTk9USUNFOiAgZGVwYXJz ZWQganNvbjogPE5VTEw+CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogPE5VTEw+CitOT1RJ Q0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5 fUQgJXtzdWJjbWRzOiwgfXMiLCAib2JqdHlwZSI6ICJUQUJMRSIsICJzdWJjbWRzIjogW3siZm10 IjogIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAib3Jk ZXJzX3Byb2R1Y3RfaWRfZmtleSIsICJ0eXBlIjogImFkZCBjb25zdHJhaW50IiwgImRlZmluaXRp b24iOiAiRk9SRUlHTiBLRVkgKHByb2R1Y3RfaWQpIFJFRkVSRU5DRVMgcHVibGljLnByb2R1Y3Qo aWQpIn1dLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAib3JkZXJzIiwgInNjaGVtYW5hbWUiOiAi cHVibGljIn19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQUxURVIgVEFCTEUgcHVibGlj Lm9yZGVycyBBREQgQ09OU1RSQUlOVCBvcmRlcnNfcHJvZHVjdF9pZF9ma2V5IEZPUkVJR04gS0VZ IChwcm9kdWN0X2lkKSBSRUZFUkVOQ0VTIHB1YmxpYy5wcm9kdWN0KGlkKQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvdGVzdF9k ZGxfZGVwYXJzZS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy9leHBlY3RlZC90ZXN0X2RkbF9kZXBhcnNlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi5iMGUyYmYyNTFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5v dXQKQEAgLTAsMCArMSwxOCBAQAorQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3M7CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiB0ZXN0X2RkbF9kZXBhcnNlKCkKKyAg UkVUVVJOUyBldmVudF90cmlnZ2VyIExBTkdVQUdFIHBscGdzcWwgQVMKKyQkCitERUNMQVJFCisJ ciByZWNvcmQ7CisJZGVwYXJzZWRfanNvbiB0ZXh0OworQkVHSU4KKwlGT1IgciBJTiBTRUxFQ1Qg KiBGUk9NIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKCkKKwlMT09QCisJCWRlcGFyc2Vk X2pzb24gPSBwZ19jYXRhbG9nLmRkbF9kZXBhcnNlX3RvX2pzb24oci5jb21tYW5kKTsKKwkJUkFJ U0UgTk9USUNFICdkZXBhcnNlZCBqc29uOiAlJywgZGVwYXJzZWRfanNvbjsKKwkJUkFJU0UgTk9U SUNFICdyZS1mb3JtZWQgY29tbWFuZDogJScsIHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfZXhwYW5k X2NvbW1hbmQoZGVwYXJzZWRfanNvbik7CisJRU5EIExPT1A7CitFTkQ7CiskJDsKK0NSRUFURSBF VkVOVCBUUklHR0VSIHRlc3RfZGRsX2RlcGFyc2UKK09OIGRkbF9jb21tYW5kX2VuZCBFWEVDVVRF IFBST0NFRFVSRSB0ZXN0X2RkbF9kZXBhcnNlKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjdhMTUyYTIzZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9tZXNvbi5idWlsZApAQCAtMCww ICsxLDQyIEBACisjIEZJWE1FOiBwcmV2ZW50IGluc3RhbGwgZHVyaW5nIG1haW4gaW5zdGFsbCwg YnV0IG5vdCBkdXJpbmcgdGVzdCA6LworCit0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Nfc291cmNl cyA9IGZpbGVzKAorICAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMnLAorKQorCitpZiBob3N0 X3N5c3RlbSA9PSAnd2luZG93cycKKyAgdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzX3NvdXJjZXMg Kz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0t TkFNRScsICd0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MnLAorICAgICctLUZJTEVERVNDJywgJ3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcyAtIHJlZ3Jlc3Npb24gdGVzdGluZyBmb3IgRERMIGRlcGFy c2luZycsXSkKK2VuZGlmCisKK3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyA9IHNoYXJlZF9tb2R1 bGUoJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcycsCisgIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVz c19zb3VyY2VzLAorICBrd2FyZ3M6IHBnX21vZF9hcmdzLAorKQordGVzdHByZXBfdGFyZ2V0cyAr PSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MKKworaW5zdGFsbF9kYXRhKAorICAndGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzLmNvbnRyb2wnLAorICAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0x LjAuc3FsJywKKyAga3dhcmdzOiBjb250cmliX2RhdGFfYXJncywKKykKKwordGVzdHMgKz0gewor ICAnbmFtZSc6ICd0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MnLAorICAnc2QnOiBtZXNvbi5jdXJy ZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAg J3JlZ3Jlc3MnOiB7CisgICAgJ3NxbCc6IFsKKyAgICAgICd0ZXN0X2RkbF9kZXBhcnNlJywKKyAg ICAgICdjcmVhdGVfZXh0ZW5zaW9uJywKKyAgICAgICdjcmVhdGVfc2NoZW1hJywKKyAgICAgICdj cmVhdGVfdGFibGUnLAorICAgIF0sCisgIH0sCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWwor ICAgICAgJ3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwnLAorICAgIF0sCisgIH0sCit9 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9z cWwvY3JlYXRlX2V4dGVuc2lvbi5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy9zcWwvY3JlYXRlX2V4dGVuc2lvbi5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uZDIzZTdmZDljZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNx bApAQCAtMCwwICsxLDUgQEAKKy0tLQorLS0tIENSRUFURV9FWFRFTlNJT04KKy0tLQorCitDUkVB VEUgRVhURU5TSU9OIHBnX3N0YXRfc3RhdGVtZW50czsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfc2NoZW1hLnNxbCBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfc2NoZW1h LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4xMGIxM2YwYTU1Ci0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3Mvc3FsL2NyZWF0ZV9zY2hlbWEuc3FsCkBAIC0wLDAgKzEsMTYgQEAKKy0tCistLSBDUkVBVEVf U0NIRU1BCistLQorCitDUkVBVEUgU0NIRU1BIGZvbzsKKworQ1JFQVRFIFNDSEVNQSBJRiBOT1Qg RVhJU1RTIGJhcjsKKworQ1JFQVRFIFNDSEVNQSBiYXo7CisKKy0tIFdpbGwgbm90IGJlIGNyZWF0 ZWQsIGFuZCB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZQorLS0gZXZlbnQgdHJpZ2dlcgorQ1JF QVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTIGJhejsKKworQ1JFQVRFIFNDSEVNQSBlbGVtZW50X3Rl c3QKKyAgQ1JFQVRFIFRBQkxFIGZvbyAoaWQgaW50KQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5zcWwgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNx bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lODg2M2QwNzM4Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv c3FsL2NyZWF0ZV90YWJsZS5zcWwKQEAgLTAsMCArMSwxNSBAQAorQ1JFQVRFIFRBQkxFIHNpbXBs ZV90YWJsZSgKKyAgICBpZCBpbnQsCisgICAgbmFtZSB2YXJjaGFyKDUpCispOworCistLSBUZXN0 IFRhYmxlTGlrZUNsYXVzZSBpcyBoYW5kbGVkIHByb3Blcmx5CitDUkVBVEUgVEFCTEUgY3RsdDEg KGEgdGV4dCBDSEVDSyAobGVuZ3RoKGEpID4gMikgUFJJTUFSWSBLRVksIGIgdGV4dCk7CitBTFRF UiBUQUJMRSBjdGx0MSBBTFRFUiBDT0xVTU4gYSBTRVQgU1RPUkFHRSBNQUlOOworQUxURVIgVEFC TEUgY3RsdDEgQUxURVIgQ09MVU1OIGIgU0VUIFNUT1JBR0UgRVhURVJOQUw7CitDUkVBVEUgVEFC TEUgY3RsdDFfbGlrZSAoTElLRSBjdGx0MSBJTkNMVURJTkcgQUxMKTsKKworLS0gVGVzdCBmb3Jl aWduIGtleSBjb25zdHJhaW50IGlzIGhhbmRsZWQgaW4gYSBmb2xsb3dpbmcgQUxURVIgVEFCTEUg QUREIENPTlNUUkFJTlQgRk9SRUlHTiBLRVkgUkVGRVJFTkNFUyBzdWJjb21tYW5kCitDUkVBVEUg VEFCTEUgcHJvZHVjdCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOworQ1JFQVRFIFRB QkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBSSU1BUlkgS0VZLCBwcm9kdWN0X2lkIGludAorUkVG RVJFTkNFUyBwcm9kdWN0IChpZCkpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL3Rlc3RfZGRsX2RlcGFyc2Uuc3FsIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL3Rlc3RfZGRsX2RlcGFyc2Uuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA4ODlmYTAyZjkKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9z cWwvdGVzdF9kZGxfZGVwYXJzZS5zcWwKQEAgLTAsMCArMSwyMCBAQAorQ1JFQVRFIEVYVEVOU0lP TiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CisKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9O IHRlc3RfZGRsX2RlcGFyc2UoKQorICBSRVRVUk5TIGV2ZW50X3RyaWdnZXIgTEFOR1VBR0UgcGxw Z3NxbCBBUworJCQKK0RFQ0xBUkUKKwlyIHJlY29yZDsKKwlkZXBhcnNlZF9qc29uIHRleHQ7CitC RUdJTgorCUZPUiByIElOIFNFTEVDVCAqIEZST00gcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFu ZHMoKQorCUxPT1AKKwkJZGVwYXJzZWRfanNvbiA9IHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfdG9f anNvbihyLmNvbW1hbmQpOworCQlSQUlTRSBOT1RJQ0UgJ2RlcGFyc2VkIGpzb246ICUnLCBkZXBh cnNlZF9qc29uOworCQlSQUlTRSBOT1RJQ0UgJ3JlLWZvcm1lZCBjb21tYW5kOiAlJywgcGdfY2F0 YWxvZy5kZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZChkZXBhcnNlZF9qc29uKTsKKwlFTkQgTE9P UDsKK0VORDsKKyQkOworCitDUkVBVEUgRVZFTlQgVFJJR0dFUiB0ZXN0X2RkbF9kZXBhcnNlCitP TiBkZGxfY29tbWFuZF9lbmQgRVhFQ1VURSBQUk9DRURVUkUgdGVzdF9kZGxfZGVwYXJzZSgpOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdC8w MDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNjY0YWQzNDk4ZgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAxX2NvbXBh cmVfZHVtcGVkX3Jlc3VsdHMucGwKQEAgLTAsMCArMSwxODEgQEAKK3VzZSBzdHJpY3Q7Cit1c2Ug d2FybmluZ3M7Cit1c2UgRW52OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKK3VzZSBGaWxlOjpCYXNl bmFtZTsKKworc3ViIGV4ZWN1dGVfdGVzdF9jYXNlIHsKKyAgICBteSAkdGVzdF9uYW1lID0gJF9b MF07CisgICAgbXkgJHB1Yl9ub2RlID0gJF9bMV07CisgICAgbXkgJHN1Yl9ub2RlID0gJF9bMl07 CisgICAgbXkgJGRibmFtZSA9ICRfWzNdOworICAgIG15ICRvdXRwdXRkaXIgPSAkUG9zdGdyZVNR TDo6VGVzdDo6VXRpbHM6OnRtcF9jaGVjazsKKworICAgICMgc2V0IHVwIGRlcGFyc2UgdGVzdGlu ZyByZXNvdXJjZXMKKyAgICBjcmVhdGVfZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJf bm9kZSgkcHViX25vZGUsICRkYm5hbWUpOworCisgICAgbXkgJHRlc3RfZmlsZSA9ICIuL3NxbC8k e3Rlc3RfbmFtZX0uc3FsIjsKKyAgICBteSAkY29udGVudCA9IGRve2xvY2FsKEBBUkdWLCQvKT0k dGVzdF9maWxlOzw+fTsKKworICAgICRwdWJfbm9kZSAtPiBwc3FsKCRkYm5hbWUsICRjb250ZW50 KTsKKworICAgICMgcmV0cmlldmUgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCBmcm9tIGRlcGFyc2Vk IERETHMgb24gcHViIG5vZGUKKyAgICBteSAkZGRsX3NxbCA9ICcnOworICAgICRwdWJfbm9kZSAt PiBwc3FsKCRkYm5hbWUscSgKKyAgICAgICAgc2VsZWN0IGRkbF9kZXBhcnNlX2V4cGFuZF9jb21t YW5kKGRkbCkgfHwgJzsnIGZyb20gZGVwYXJzZWRfZGRscyBPUkRFUiBCWSBpZCBBU0MpLAorICAg ICAgICBzdGRvdXQgPT4gXCRkZGxfc3FsKTsKKworICAgIHByaW50ICJcbnN0YXJ0IHByaW50aW5n IHJlLWZvcm1lZCBzcWxcbiI7CisgICAgcHJpbnQgJGRkbF9zcWw7CisgICAgcHJpbnQgIlxuZW5k IHByaW50aW5nIHJlLWZvcm1lZCBzcWxcbiI7CisgICAgIyBleGVjdXRlIFNRTCBjb21tYW5kcyBv biBzdWIgbm9kZQorICAgICRzdWJfbm9kZSAtPiBwc3FsKCRkYm5hbWUsICRkZGxfc3FsKTsKKwor ICAgICMgY2xlYW4gdXAgZGVwYXJzZSB0ZXN0aW5nIHJlc291cmNlcworICAgIGNsZWFuX2RlcGFy c2VfdGVzdGluZ19yZXNvdXJjZXNfb25fcHViX25vZGUoJHB1Yl9ub2RlLCAkZGJuYW1lKTsKKwor ICAgICMgZHVtcCBmcm9tIHB1YiBub2RlIGFuZCBzdWIgbm9kZQorICAgIG1rZGlyICR7b3V0cHV0 ZGlyfS4iL2R1bXBzIiwgMDc1NTsKKyAgICBteSAkcHViX2R1bXAgPSAke291dHB1dGRpcn0uIi9k dW1wcy8ke3Rlc3RfbmFtZX1fcHViLmR1bXAiOworICAgIG15ICRzdWJfZHVtcCA9ICR7b3V0cHV0 ZGlyfS4iL2R1bXBzLyR7dGVzdF9uYW1lfV9zdWIuZHVtcCI7CisgICAgc3lzdGVtKCJwZ19kdW1w YWxsICIKKyAgICAgICAgLiAiLXMgIgorICAgICAgICAuICItZiAiCisgICAgICAgIC4gJHB1Yl9k dW1wIC4gIiAiCisgICAgICAgIC4gIi0tbm8tc3luYyAiCisgICAgICAgIC4gICctcCAnCisgICAg ICAgIC4gJHB1Yl9ub2RlLT5wb3J0KSAgPT0gMCBvciBkaWUgIkR1bXAgcHViIG5vZGUgZmFpbGVk IGluICR7dGVzdF9uYW1lfSI7CisgICAgc3lzdGVtKCJwZ19kdW1wYWxsICIKKyAgICAgICAgLiAi LXMgIgorICAgICAgICAuICItZiAiCisgICAgICAgIC4gJHN1Yl9kdW1wIC4gIiAiCisgICAgICAg IC4gIi0tbm8tc3luYyAiCisgICAgICAgIC4gICctcCAnCisgICAgICAgIC4gJHN1Yl9ub2RlLT5w b3J0KSAgPT0gMCBvciBkaWUgIkR1bXAgc3ViIG5vZGUgZmFpbGVkIGluICR7dGVzdF9uYW1lfSI7 CisKKyAgICAjIGNvbXBhcmUgZHVtcGVkIHJlc3VsdHMKKyAgICBpcyhzeXN0ZW0oImRpZmYgIgor ICAgIC4gJHB1Yl9kdW1wIC4gIiAiCisgICAgLiAkc3ViX2R1bXApLCAwLCAiRHVtcGVkIHJlc3Vs dHMgZGlmZiBpbiAke3Rlc3RfbmFtZX0iKTsKK30KKworc3ViIGluaXRfbm9kZSB7CisgICAgbXkg JG5vZGVfbmFtZSA9ICRfWzBdOworICAgIG15ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3Rlci0+bmV3KCRub2RlX25hbWUpOworICAgICRub2RlLT5pbml0OworICAgICMgaW5jcmVhc2Ug c29tZSBzZXR0aW5ncyB0aGF0IENsdXN0ZXItPm5ldyBtYWtlcyB0b28gbG93IGJ5IGRlZmF1bHQu CisgICAgJG5vZGUtPmFkanVzdF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnbWF4X2Nvbm5lY3Rp b25zJywgJzI1Jyk7CisgICAgJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAor CQkgICAnbWF4X3ByZXBhcmVkX3RyYW5zYWN0aW9ucyA9IDEwJyk7CisgICAgcmV0dXJuICRub2Rl OworfQorCitzdWIgaW5pdF9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9ICRfWzBdLiJf cHViIjsKKyAgICByZXR1cm4gaW5pdF9ub2RlKCRub2RlX25hbWUpCit9CisKK3N1YiBpbml0X3N1 Yl9ub2RlIHsKKyAgICBteSAkbm9kZV9uYW1lID0gJF9bMF0uIl9zdWIiOworICAgIHJldHVybiBp bml0X25vZGUoJG5vZGVfbmFtZSkKK30KKworc3ViIGNyZWF0ZV9kZXBhcnNlX3Rlc3RpbmdfcmVz b3VyY2VzX29uX3B1Yl9ub2RlIHsKKyAgICBteSAkbm9kZSA9ICRfWzBdOworICAgIG15ICRkYm5h bWUgPSAkX1sxXTsKKyAgICAkbm9kZSAtPiBwc3FsKCRkYm5hbWUsIHEoCisgICAgICAgIGJlZ2lu OworICAgICAgICBDUkVBVEUgRVhURU5TSU9OIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzczsKKyAg ICAgICAgY3JlYXRlIHRhYmxlIGRlcGFyc2VkX2RkbHMoaWQgU0VSSUFMIFBSSU1BUlkgS0VZLCB0 YWcgdGV4dCwgb2JqZWN0X2lkZW50aXR5IHRleHQsIGRkbCB0ZXh0KTsKKworICAgICAgICBjcmVh dGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBkZXBhcnNlX3RvX2pzb24oKQorICAgICAgICAgICAgcmV0 dXJucyBldmVudF90cmlnZ2VyIGxhbmd1YWdlIHBscGdzcWwgYXMKKyAgICAgICAgJCQKKyAgICAg ICAgZGVjbGFyZQorICAgICAgICAgICAgciByZWNvcmQ7CisgICAgICAgIGJlZ2luCisgICAgICAg ICAgICBmb3IgciBpbiBzZWxlY3QgKiBmcm9tIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRz KCkKKyAgICAgICAgICAgIGxvb3AKKyAgICAgICAgICAgICAgICBpbnNlcnQgaW50byBkZXBhcnNl ZF9kZGxzKHRhZywgb2JqZWN0X2lkZW50aXR5LCBkZGwpIHZhbHVlcyAoci5jb21tYW5kX3RhZywg ci5vYmplY3RfaWRlbnRpdHksIHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfdG9fanNvbihyLmNvbW1h bmQpKTsKKyAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICBFTkQ7CisgICAgICAgICQkOwor CisgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGRlcGFyc2VfZHJvcHNfdG9fanNv bigpCisgICAgICAgICAgICByZXR1cm5zIGV2ZW50X3RyaWdnZXIgbGFuZ3VhZ2UgcGxwZ3NxbCBh cworICAgICAgICAkJAorICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICByIHJlY29yZDsKKyAg ICAgICAgYmVnaW4KKyAgICAgICAgICAgIGZvciByIGluIHNlbGVjdCAqIGZyb20gcGdfZXZlbnRf dHJpZ2dlcl9kcm9wcGVkX29iamVjdHMoKQorICAgICAgICAgICAgbG9vcAorICAgICAgICAgICAg ICAgIGluc2VydCBpbnRvIGRlcGFyc2VkX2RkbHModGFnLCBvYmplY3RfaWRlbnRpdHksIGRkbCkg dmFsdWVzIChyLm9iamVjdF90eXBlLCByLm9iamVjdF9pZGVudGl0eSwgcHVibGljLmRlcGFyc2Vf ZHJvcF9kZGwoci5vYmplY3RfaWRlbnRpdHksIHIub2JqZWN0X3R5cGUpKTsKKyAgICAgICAgICAg IGVuZCBsb29wOworICAgICAgICBFTkQ7CisgICAgICAgICQkOworCisgICAgICAgIGNyZWF0ZSBl dmVudCB0cmlnZ2VyIGRkbF9kZXBhcnNlX3RyaWcKKyAgICAgICAgb24gZGRsX2NvbW1hbmRfZW5k IGV4ZWN1dGUgcHJvY2VkdXJlIGRlcGFyc2VfdG9fanNvbigpOworCisgICAgICAgIGNyZWF0ZSBl dmVudCB0cmlnZ2VyIGRkbF9kcm9wc19kZXBhcnNlX3RyaWcKKyAgICAgICAgb24gc3FsX2Ryb3Ag ZXhlY3V0ZSBwcm9jZWR1cmUgZGVwYXJzZV9kcm9wc190b19qc29uKCk7CisKKyAgICAgICAgY29t bWl0OworICAgICkpOworfQorCitzdWIgY2xlYW5fZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNlc19v bl9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGUgPSAkX1swXTsKKyAgICBteSAkZGJuYW1lID0gJF9b MV07CisgICAgIyBEcm9wIHRoZSBldmVudCB0cmlnZ2VyIGFuZCB0aGUgZnVuY3Rpb24gYmVmb3Jl IHRha2luZyBhIGxvZ2ljYWwgZHVtcC4KKyAgICAkbm9kZSAtPiBzYWZlX3BzcWwoJGRibmFtZSxx KAorICAgICAgICBkcm9wIGV2ZW50IHRyaWdnZXIgZGRsX2RlcGFyc2VfdHJpZzsKKyAgICAgICAg ZHJvcCBldmVudCB0cmlnZ2VyIGRkbF9kcm9wc19kZXBhcnNlX3RyaWc7CisgICAgICAgIGRyb3Ag ZnVuY3Rpb24gZGVwYXJzZV90b19qc29uKCk7CisgICAgICAgIGRyb3AgZnVuY3Rpb24gZGVwYXJz ZV9kcm9wc190b19qc29uKCk7CisgICAgICAgIGRyb3AgdGFibGUgZGVwYXJzZWRfZGRsczsKKyAg ICAgICAgRFJPUCBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzOworICAgICkpOwor fQorCitzdWIgdHJpbSB7CisgICAgbXkgQG91dCA9IEBfOworICAgIGZvciAoQG91dCkgeworICAg ICAgICBzL15ccysvLzsKKyAgICAgICAgcy9ccyskLy87CisgICAgfQorICAgIHJldHVybiB3YW50 YXJyYXkgPyBAb3V0IDogJG91dFswXTsKK30KKworIyBDcmVhdGUgYW5kIHN0YXJ0IHB1YiBzdWIg bm9kZXMKK215ICRwdWJfbm9kZSA9IGluaXRfcHViX25vZGUoInRlc3QiKTsKK215ICRzdWJfbm9k ZSA9IGluaXRfc3ViX25vZGUoInRlc3QiKTsKK215ICRkYm5hbWUgPSAicG9zdGdyZXMiOworJHB1 Yl9ub2RlIC0+IHN0YXJ0OworJHN1Yl9ub2RlIC0+IHN0YXJ0OworCisjIGxvYWQgdGVzdCBjYXNl cyBmcm9tIHRoZSByZWdyZXNzaW9uIHRlc3RzCitteSBAcmVncmVzc190ZXN0cyA9IHNwbGl0IC9c cysvLCAkRU5We1JFR1JFU1N9OworCitmb3JlYWNoKEByZWdyZXNzX3Rlc3RzKSB7CisgICAgbXkg JHRlc3RfbmFtZSA9IHRyaW0oJF8pOworICAgICMgc2tpcCBpZiBpdCdzIHJlZ3Jlc3Npb24gdGVz dCBwcmVwYXJhdGlvbiBvciBlbXB0eSBzdHJpbmcKKyAgICBpZiAoJHRlc3RfbmFtZSBlcSAiIiBv ciAkdGVzdF9uYW1lIGVxICJ0ZXN0X2RkbF9kZXBhcnNlIikKKyAgICB7CisgICAgICAgIG5leHQ7 CisgICAgfQorICAgIGV2YWwge2V4ZWN1dGVfdGVzdF9jYXNlKCR0ZXN0X25hbWUsICRwdWJfbm9k ZSwgJHN1Yl9ub2RlLCAkZGJuYW1lKTt9OworICAgIGlmICgkQCBuZSAiIikKKyAgICB7CisgICAg ICAgIGZhaWwoJEApOworICAgIH0KK30KK2Nsb3NlOworCisjIENsb3NlIG5vZGVzCiskcHViX25v ZGUtPnN0b3A7Ciskc3ViX25vZGUtPnN0b3A7CisKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdC8wMDJfcmVncmVz c190ZXN0cy5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Qv MDAyX3JlZ3Jlc3NfdGVzdHMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uM2E4NzVjMzNmYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAyX3JlZ3Jlc3NfdGVzdHMucGwKQEAgLTAsMCArMSwyMDcg QEAKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgRW52OwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6 TW9yZTsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKKworc3ViIGV4ZWN1dGVfcmVncmVzc190ZXN0IHsK KyAgICBteSAkcHViX25vZGUgPSAkX1swXTsKKyAgICBteSAkc3ViX25vZGUgPSAkX1sxXTsKKyAg ICBteSAkZGJuYW1lID0gInBvc3RncmVzIjsKKyAgICBteSAkZGxwYXRoICAgID0gZGlybmFtZSgk RU5We1JFR1JFU1NfU0hMSUJ9KTsKKyAgICBteSAkaW5wdXRkaXIgPSAiLi4vLi4vcmVncmVzcyI7 CisgICAgbXkgJG91dHB1dGRpciA9ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dG1wX2NoZWNr OworCisgICAgIyBzZXQgdXAgZGVwYXJzZSB0ZXN0aW5nIHJlc291cmNlcworICAgIGNyZWF0ZV9k ZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlKCRwdWJfbm9kZSwgJGRibmFtZSk7 CisKKyAgICAjIGV4ZWN1dGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIG9uIHB1YiBub2RlCisgICAg bXkgJHJlZ3Jlc3NfY21kID0gJEVOVntQR19SRUdSRVNTfQorICAgICAgICAuICIgIgorICAgICAg ICAuICItLWRscGF0aD1cIiRkbHBhdGhcIiAiCisgICAgICAgIC4gIi0tbWF4LWNvbmN1cnJlbnQt dGVzdHM9MjAgIgorICAgICAgICAuICItLWRibmFtZT0iCisgICAgICAgIC4gJGRibmFtZSAuICIg IgorICAgICAgICAuICItLXVzZS1leGlzdGluZyAiCisgICAgICAgIC4gIi0taG9zdD0iCisgICAg ICAgIC4gJHB1Yl9ub2RlLT5ob3N0IC4gIiAiCisgICAgICAgIC4gIi0tcG9ydD0iCisgICAgICAg IC4gJHB1Yl9ub2RlLT5wb3J0IC4gIiAiCisgICAgICAgIC4gIi0taW5wdXRkaXI9JGlucHV0ZGly ICIKKyAgICAgICAgLiAiLS1vdXRwdXRkaXI9XCIkb3V0cHV0ZGlyXCIgIgorICAgICAgICAuICIt LXNjaGVkdWxlPSRpbnB1dGRpci9wYXJhbGxlbF9zY2hlZHVsZSI7CisgICAgcHJpbnQgIlJlZ3Jl c3Npb24gdGVzdCBjb21tYW5kIGlzICRyZWdyZXNzX2NtZCI7CisgICAgbXkgJHJjID0gc3lzdGVt KCRyZWdyZXNzX2NtZCk7CisgICAgaWYgKCRyYyAhPSAwKQorICAgIHsKKyAgICAgICAgIyBJZiBy ZWdyZXNzaW9uIHRlc3QgZmFpbHMsIGR1bXAgb3V0IHRoZSByZWdyZXNzaW9uIGRpZmZzIGZpbGUK KyAgICAgICAgbXkgJGRpZmZzID0gIiR7b3V0cHV0ZGlyfS9yZWdyZXNzaW9uL3JlZ3Jlc3Npb24u ZGlmZnMiOworICAgICAgICBpZiAoLWUgJGRpZmZzKQorICAgICAgICB7CisgICAgICAgICAgICBw cmludCAiPT09IGR1bXBpbmcgJGRpZmZzID09PVxuIjsKKyAgICAgICAgICAgIHByaW50IHNsdXJw X2ZpbGUoJGRpZmZzKTsKKyAgICAgICAgICAgIHByaW50ICI9PT0gRU9GID09PVxuIjsKKyAgICAg ICAgfQorICAgICAgICBkaWUgIlJlZ3Jlc3Npb24gdGVzdCBmYWlsZWQiOworICAgIH0KKworICAg ICMgUmV0cmlldmUgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCBmcm9tIGRlcGFyc2VkIERETHMgb24g cHViIG5vZGUKKyAgICBteSAkZGRsX3NxbCA9ICcnOworICAgICRwdWJfbm9kZSAtPiBwc3FsKCRk Ym5hbWUscSgKKyAgICAgICAgc2VsZWN0IGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kKGRkbCkg fHwgJzsnIGZyb20gZGVwYXJzZWRfZGRscyBPUkRFUiBCWSBpZCBBU0MpLAorICAgICAgICBzdGRv dXQgPT4gXCRkZGxfc3FsKTsKKworICAgICMgRXhlY3V0ZSBTUUwgY29tbWFuZHMgb24gc3ViIG5v ZGUKKyAgICAkc3ViX25vZGUgLT4gcHNxbCgkZGJuYW1lLCAkZGRsX3NxbCk7CisKKyAgICAjIENs ZWFuIHVwIGRlcGFyc2UgdGVzdGluZyByZXNvdXJjZXMKKyAgICBjbGVhbl9kZXBhcnNlX3Rlc3Rp bmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlKCRwdWJfbm9kZSwgJGRibmFtZSk7CisKKyAgICAjIER1 bXAgZnJvbSBwdWIgbm9kZSBhbmQgc3ViIG5vZGUKKyAgICBta2RpciAke291dHB1dGRpcn0uIi9k dW1wcyIsIDA3NTU7CisgICAgbXkgJHB1Yl9kdW1wID0gJHtvdXRwdXRkaXJ9LiIvZHVtcHMvcmVn cmVzc19wdWIuZHVtcCI7CisgICAgbXkgJHN1Yl9kdW1wID0gJHtvdXRwdXRkaXJ9LiIvZHVtcHMv cmVncmVzc19zdWIuZHVtcCI7CisgICAgc3lzdGVtKCJwZ19kdW1wYWxsICIKKyAgICAgICAgLiAi LXMgIgorICAgICAgICAuICItZiAiCisgICAgICAgIC4gJHB1Yl9kdW1wIC4gIiAiCisgICAgICAg IC4gIi0tbm8tc3luYyAiCisgICAgICAgIC4gICctcCAnCisgICAgICAgIC4gJHB1Yl9ub2RlLT5w b3J0KSAgPT0gMCBvciBkaWUgIkR1bXAgcHViIG5vZGUgZmFpbGVkIjsKKyAgICBzeXN0ZW0oInBn X2R1bXBhbGwgIgorICAgICAgICAuICItcyAiCisgICAgICAgIC4gIi1mICIKKyAgICAgICAgLiAk c3ViX2R1bXAgLiAiICIKKyAgICAgICAgLiAiLS1uby1zeW5jICIKKyAgICAgICAgLiAgJy1wICcK KyAgICAgICAgLiAkc3ViX25vZGUtPnBvcnQpICA9PSAwIG9yIGRpZSAiRHVtcCBzdWIgbm9kZSBm YWlsZWQiOworCisgICAgIyBDb21wYXJlIGR1bXBlZCByZXN1bHRzCisgICAgaXMoc3lzdGVtKCJk aWZmICIKKyAgICAuICRwdWJfZHVtcCAuICIgIgorICAgIC4gJHN1Yl9kdW1wKSwgMCwgIkNvbXBh cmluZyBkdW1wZWQgb3V0cHV0Iik7CisKKyAgICAjIENsb3NlIG5vZGVzCisgICAgJHB1Yl9ub2Rl LT5zdG9wOworICAgICRzdWJfbm9kZS0+c3RvcDsKK30KKworc3ViIGluaXRfbm9kZSB7CisgICAg bXkgJG5vZGVfbmFtZSA9ICRfWzBdOworICAgIG15ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3Rlci0+bmV3KCRub2RlX25hbWUpOworICAgICRub2RlLT5pbml0OworICAgICMgaW5jcmVh c2Ugc29tZSBzZXR0aW5ncyB0aGF0IENsdXN0ZXItPm5ldyBtYWtlcyB0b28gbG93IGJ5IGRlZmF1 bHQuCisgICAgJG5vZGUtPmFkanVzdF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnbWF4X2Nvbm5l Y3Rpb25zJywgJzI1Jyk7CisgICAgJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYn LAorCQkgICAnbWF4X3ByZXBhcmVkX3RyYW5zYWN0aW9ucyA9IDEwJyk7CisgICAgcmV0dXJuICRu b2RlOworfQorCitzdWIgaW5pdF9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9ICRfWzBd LiJfcHViIjsKKyAgICByZXR1cm4gaW5pdF9ub2RlKCRub2RlX25hbWUpCit9CisKK3N1YiBpbml0 X3N1Yl9ub2RlIHsKKyAgICBteSAkbm9kZV9uYW1lID0gJF9bMF0uIl9zdWIiOworICAgIHJldHVy biBpbml0X25vZGUoJG5vZGVfbmFtZSkKK30KKworc3ViIGNyZWF0ZV9kZXBhcnNlX3Rlc3Rpbmdf cmVzb3VyY2VzX29uX3B1Yl9ub2RlIHsKKyAgICBteSAkbm9kZSA9ICRfWzBdOworICAgIG15ICRk Ym5hbWUgPSAkX1sxXTsKKyAgICAkbm9kZSAtPiBwc3FsKCRkYm5hbWUsIHEoCisgICAgICAgIGJl Z2luOworICAgICAgICBDUkVBVEUgRVhURU5TSU9OIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzczsK KyAgICAgICAgY3JlYXRlIHRhYmxlIGRlcGFyc2VkX2RkbHMoaWQgU0VSSUFMIFBSSU1BUlkgS0VZ LCB0YWcgdGV4dCwgb2JqZWN0X2lkZW50aXR5IHRleHQsIGRkbCB0ZXh0KTsKKyAgICAgICAgY3Jl YXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gZGVwYXJzZV90b19qc29uKCkKKyAgICAgICAgICAgIHJl dHVybnMgZXZlbnRfdHJpZ2dlciBsYW5ndWFnZSBwbHBnc3FsIGFzCisgICAgICAgICQkCisgICAg ICAgIGRlY2xhcmUKKyAgICAgICAgICAgIHIgcmVjb3JkOworICAgICAgICBiZWdpbgorICAgICAg ICAgICAgZm9yIHIgaW4gc2VsZWN0ICogZnJvbSBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5k cygpCisgICAgICAgICAgICBsb29wCisgICAgICAgICAgICAgICAgaW5zZXJ0IGludG8gZGVwYXJz ZWRfZGRscyh0YWcsIG9iamVjdF9pZGVudGl0eSwgZGRsKSB2YWx1ZXMgKHIuY29tbWFuZF90YWcs IHIub2JqZWN0X2lkZW50aXR5LCBwZ19jYXRhbG9nLmRkbF9kZXBhcnNlX3RvX2pzb24oci5jb21t YW5kKSk7CisgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgRU5EOworICAgICAgICAkJDsK KyAgICAgICAgY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gZGVwYXJzZV9kcm9wc190b19qc29u KCkKKyAgICAgICAgICAgIHJldHVybnMgZXZlbnRfdHJpZ2dlciBsYW5ndWFnZSBwbHBnc3FsIGFz CisgICAgICAgICQkCisgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIHIgcmVjb3JkOworICAg ICAgICBiZWdpbgorICAgICAgICAgICAgZm9yIHIgaW4gc2VsZWN0ICogZnJvbSBwZ19ldmVudF90 cmlnZ2VyX2Ryb3BwZWRfb2JqZWN0cygpCisgICAgICAgICAgICBsb29wCisgICAgICAgICAgICAg ICAgaW5zZXJ0IGludG8gZGVwYXJzZWRfZGRscyh0YWcsIG9iamVjdF9pZGVudGl0eSwgZGRsKSB2 YWx1ZXMgKHIub2JqZWN0X3R5cGUsIHIub2JqZWN0X2lkZW50aXR5LCBwdWJsaWMuZGVwYXJzZV9k cm9wX2RkbChyLm9iamVjdF9pZGVudGl0eSwgci5vYmplY3RfdHlwZSkpOworICAgICAgICAgICAg ZW5kIGxvb3A7CisgICAgICAgIEVORDsKKyAgICAgICAgJCQ7CisgICAgICAgIGNyZWF0ZSBldmVu dCB0cmlnZ2VyIGRkbF9kZXBhcnNlX3RyaWcKKyAgICAgICAgb24gZGRsX2NvbW1hbmRfZW5kIGV4 ZWN1dGUgcHJvY2VkdXJlIGRlcGFyc2VfdG9fanNvbigpOworICAgICAgICBjcmVhdGUgZXZlbnQg dHJpZ2dlciBkZGxfZHJvcHNfZGVwYXJzZV90cmlnCisgICAgICAgIG9uIHNxbF9kcm9wIGV4ZWN1 dGUgcHJvY2VkdXJlIGRlcGFyc2VfZHJvcHNfdG9fanNvbigpOworICAgICAgICBjb21taXQ7Cisg ICAgKSk7Cit9CisKK3N1YiBjbGVhbl9kZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9u b2RlIHsKKyAgICBteSAkbm9kZSA9ICRfWzBdOworICAgIG15ICRkYm5hbWUgPSAkX1sxXTsKKyAg ICAjIERyb3AgdGhlIGV2ZW50IHRyaWdnZXIgYW5kIHRoZSBmdW5jdGlvbiBiZWZvcmUgdGFraW5n IGEgbG9naWNhbCBkdW1wLgorICAgICRub2RlIC0+IHNhZmVfcHNxbCgkZGJuYW1lLHEoCisgICAg ICAgIGRyb3AgZXZlbnQgdHJpZ2dlciBkZGxfZGVwYXJzZV90cmlnOworICAgICAgICBkcm9wIGV2 ZW50IHRyaWdnZXIgZGRsX2Ryb3BzX2RlcGFyc2VfdHJpZzsKKyAgICAgICAgZHJvcCBmdW5jdGlv biBkZXBhcnNlX3RvX2pzb24oKTsKKyAgICAgICAgZHJvcCBmdW5jdGlvbiBkZXBhcnNlX2Ryb3Bz X3RvX2pzb24oKTsKKyAgICAgICAgZHJvcCB0YWJsZSBkZXBhcnNlZF9kZGxzOworICAgICAgICBE Uk9QIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CisgICAgKSk7Cit9CisKK3N1 YiB0cmltIHsKKyAgICBteSBAb3V0ID0gQF87CisgICAgZm9yIChAb3V0KSB7CisgICAgICAgIHMv XlxzKy8vOworICAgICAgICBzL1xzKyQvLzsKKyAgICB9CisgICAgcmV0dXJuIHdhbnRhcnJheSA/ IEBvdXQgOiAkb3V0WzBdOworfQorCisjIENyZWF0ZSBhbmQgc3RhcnQgcHViIHN1YiBub2Rlcwor bXkgJHB1Yl9ub2RlID0gaW5pdF9wdWJfbm9kZSgicmVncmVzcyIpOworbXkgJHN1Yl9ub2RlID0g aW5pdF9zdWJfbm9kZSgicmVncmVzcyIpOworJHB1Yl9ub2RlIC0+IHN0YXJ0OworJHN1Yl9ub2Rl IC0+IHN0YXJ0OworCisjIENvbW1lbnQgdGhlIGV4ZWN1dGlvbiB0ZW1wb3JhcmlseSwgYW4gZXJy b3IgaW4gZGRsX2RlcGFyc2UuYyB3aWxsIGNhdXNlIHRoZSBkYXRhYmFzZSBleGl0cyBhYm5vcm1h bGx5LCBlcnJvciBzaWduYXR1cmU6CisjCisjIDIwMjItMTItMDMgMjM6MDI6NDQuNzc4IFVUQyBb MTI5MTAyXSBwZ19yZWdyZXNzL3RhYmxlc3BhY2UgTE9HOiAgc3RhdGVtZW50OiBBTFRFUiBUQUJM RSBBTEwgSU4gVEFCTEVTUEFDRSByZWdyZXNzX3RibHNwYWNlX3JlbmFtZWQgU0VUIFRBQkxFU1BB Q0UgcGdfZGVmYXVsdDsKKyMgVFJBUDogZmFpbGVkIEFzc2VydCgiSXNBKHN0bXQsIEFsdGVyVGFi bGVTdG10KSIpLCBGaWxlOiAiZGRsX2RlcGFyc2UuYyIsIExpbmU6IDMzNzEsIFBJRDogMTI5MTAy CisjIHBvc3RncmVzOiByZWdyZXNzX3B1YjogcnVucWkgcG9zdGdyZXMgW2xvY2FsXSBBTFRFUiBU QUJMRShFeGNlcHRpb25hbENvbmRpdGlvbisweGJiKVsweDU2M2JkNmVhNWIwZF0KKyMgLi4uCisj IC9saWIveDg2XzY0LWxpbnV4LWdudS9saWJjLnNvLjYoKzB4MjlkOTApWzB4N2ZkNmE3NGE2ZDkw XQorIyAvbGliL3g4Nl82NC1saW51eC1nbnUvbGliYy5zby42KF9fbGliY19zdGFydF9tYWluKzB4 ODApWzB4N2ZkNmE3NGE2ZTQwXQorIyBwb3N0Z3JlczogcmVncmVzc19wdWI6IHJ1bnFpIHBvc3Rn cmVzIFtsb2NhbF0gQUxURVIgVEFCTEUoX3N0YXJ0KzB4MjUpWzB4NTYzYmQ2NzJmMWU1XQorIyAy MDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MCBVVEMgWzEyOTA1OF0gTE9HOiAgc2VydmVyIHByb2Nlc3Mg KFBJRCAxMjkxMDIpIHdhcyB0ZXJtaW5hdGVkIGJ5IHNpZ25hbCA2OiBBYm9ydGVkCisjIDIwMjIt MTItMDMgMjM6MDI6NDQuODUwIFVUQyBbMTI5MDU4XSBERVRBSUw6ICBGYWlsZWQgcHJvY2VzcyB3 YXMgcnVubmluZzogQUxURVIgVEFCTEUgQUxMIElOIFRBQkxFU1BBQ0UgcmVncmVzc190YmxzcGFj ZV9yZW5hbWVkIFNFVCBUQUJMRVNQQUNFIHBnX2RlZmF1bHQ7CisjIDIwMjItMTItMDMgMjM6MDI6 NDQuODUwIFVUQyBbMTI5MDU4XSBMT0c6ICB0ZXJtaW5hdGluZyBhbnkgb3RoZXIgYWN0aXZlIHNl cnZlciBwcm9jZXNzZXMKKyMgMjAyMi0xMi0wMyAyMzowMjo0NC44NTEgVVRDIFsxMjkwNThdIExP RzogIHNodXR0aW5nIGRvd24gYmVjYXVzZSByZXN0YXJ0X2FmdGVyX2NyYXNoIGlzIG9mZgorIyAy MDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MiBVVEMgWzEyOTA1OF0gTE9HOiAgZGF0YWJhc2Ugc3lzdGVt IGlzIHNodXQgZG93bgorCisjIGV2YWwge2V4ZWN1dGVfcmVncmVzc190ZXN0KCRwdWJfbm9kZSwg JHN1Yl9ub2RlKTt9OworIyBpZiAoJEAgbmUgIiIpCisjIHsKKyMgICAgIGZhaWwoJEApOworIyB9 CisKKyMgQ2xvc2Ugbm9kZXMKKyRwdWJfbm9kZS0+c3RvcDsKKyRzdWJfbm9kZS0+c3RvcDsKKwor cGFzcygicmVncmVzc3Npb24gdGVzdCBwYXNzZWQiKTsKKworZG9uZV90ZXN0aW5nKCk7ClwgTm8g bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3FsIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjE0MDcwY2Q1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwKQEAgLTAs MCArMSw5IEBACisvKiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2Ny aXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04K K1xlY2hvIFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MiIHRv IGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gZGVwYXJzZV9kcm9wX2Rk bChJTiBvYmppZGVudGl0eSB0ZXh0LAorICAgIElOIG9iamVjdHR5cGUgdGV4dCkKKyAgUkVUVVJO UyB0ZXh0IElNTVVUQUJMRSBTVFJJQ1QKKyAgQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0Ug QzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYyBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmJkNjk5 MmJkZmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYwpAQCAtMCwwICsxLDU5IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jCisgKgkJU3VwcG9y dCBmdW5jdGlvbnMgZm9yIHRoZSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgbW9kdWxlCisgKgor ICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMKKyAqLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImNhdGFsb2cv cGdfdHlwZS5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJub2Rlcy9leGVjbm9k ZXMuaCIKKyNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgorI2luY2x1ZGUgInRjb3Av dXRpbGl0eS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidGNvcC9k ZGxfZGVwYXJzZS5oIgorCitQR19NT0RVTEVfTUFHSUM7CisKK1BHX0ZVTkNUSU9OX0lORk9fVjEo ZGVwYXJzZV9kcm9wX2RkbCk7CisKKy8qCisgKiBHaXZlbiBvYmplY3RfaWRlbnRpdHkgYW5kIG9i amVjdF90eXBlIG9mIGRyb3BwZWQgb2JqZWN0LCByZXR1cm4gYSBKU09OIHJlcHJlc2VudGF0aW9u IG9mIERST1AgY29tbWFuZC4KKyAqLworRGF0dW0KK2RlcGFyc2VfZHJvcF9kZGwoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwl0ZXh0CSAgICpvYmppZGVudGl0eSA9IFBHX0dFVEFSR19URVhUX1AoMCk7 CisJY29uc3QgY2hhcgkgICAqb2JqaWRlbnRpdHlfc3RyID0gdGV4dF90b19jc3RyaW5nKG9iamlk ZW50aXR5KTsKKwl0ZXh0CSAgICpvYmplY3R0eXBlID0gUEdfR0VUQVJHX1RFWFRfUCgxKTsKKwlj b25zdCBjaGFyCSAgICpvYmplY3R0eXBlX3N0ciA9IHRleHRfdG9fY3N0cmluZyhvYmplY3R0eXBl KTsKKworCWNoYXIJCSAgICpjb21tYW5kOworCisJLy8gY29uc3RyYWludCBpcyBwYXJ0IG9mIGFs dGVyIHRhYmxlIGNvbW1hbmQsIG5vIG5lZWQgdG8gZHJvcCBpbiBEUk9QIGNvbW1hbmQKKwlpZiAo c3RyY21wKG9iamVjdHR5cGVfc3RyLCAidGFibGUgY29uc3RyYWludCIpID09IDApIHsKKwkJUEdf UkVUVVJOX05VTEwoKTsKKwl9IGVsc2UgaWYgKHN0cmNtcChvYmplY3R0eXBlX3N0ciwgInRvYXN0 IHRhYmxlIikgPT0gMCkgeworCQlvYmplY3R0eXBlX3N0ciA9ICJ0YWJsZSI7CisJfSAgZWxzZSBp ZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAiZGVmYXVsdCB2YWx1ZSIpID09IDApIHsKKwkJUEdf UkVUVVJOX05VTEwoKTsKKwl9IGVsc2UgaWYgKHN0cmNtcChvYmplY3R0eXBlX3N0ciwgIm9wZXJh dG9yIG9mIGFjY2VzcyBtZXRob2QiKSA9PSAwKSB7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfSBl bHNlIGlmIChzdHJjbXAob2JqZWN0dHlwZV9zdHIsICJmdW5jdGlvbiBvZiBhY2Nlc3MgbWV0aG9k IikgPT0gMCkgeworCQlQR19SRVRVUk5fTlVMTCgpOworCX0gZWxzZSBpZiAoc3RyY21wKG9iamVj dHR5cGVfc3RyLCAidGFibGUgY29sdW1uIikgPT0gMCkgeworCQlQR19SRVRVUk5fTlVMTCgpOwor CX0KKworCWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3BfY29tbWFuZChvYmppZGVudGl0eV9zdHIsIG9i amVjdHR5cGVfc3RyLCBEUk9QX0NBU0NBREUpOworCisJaWYgKGNvbW1hbmQpCisJCVBHX1JFVFVS Tl9URVhUX1AoY3N0cmluZ190b190ZXh0KGNvbW1hbmQpKTsKKworCVBHX1JFVFVSTl9OVUxMKCk7 Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmNv bnRyb2wgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi5hMWY5MzRlNjU4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmNvbnRyb2wK QEAgLTAsMCArMSw0IEBACitjb21tZW50ID0gJ1Rlc3QgY29kZSBmb3IgRERMIGRlcGFyc2UgcmVn cmVzcyBmZWF0dXJlJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9 ICckbGliZGlyL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcycKK3JlbG9jYXRhYmxlID0gdHJ1ZQot LSAKMi4zNC4xCgo= --000000000000aabe2b05f059cb57 Content-Type: text/x-patch; charset="US-ASCII"; name="v55-0004-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v55-0004-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbxx7xwd3 RnJvbSAzZTkwMTE0MGFhYTZlZTk5ZGY1NmYxODkzMmY0ZjE4OGYxOWU5ZDdkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFdlZCwgMjEgRGVjIDIwMjIgMjI6MjM6MDIgKzA1MzAKU3ViamVjdDogW1BBVENIIHY1NSA0LzVd IFN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLgoKVG8gc3VwcG9ydCBEREwgcmVwbGljYXRpb24sIHdl IHVzZSBldmVudCB0cmlnZ2VyIGFuZCBEREwgZGVwYXJzaW5nCmZhY2lsaXRpZXMuIER1cmluZyBD UkVBVEUgUFVCTElDQVRJT04gd2UgcmVnaXN0ZXIgYSBjb21tYW5kIGVuZCB0cmlnZ2VyIHRoYXQK ZGVwYXJzZXMgdGhlIERETCBhcyBhIEpTT04gYmxvYiwgYW5kIFdBTCBsb2dzIGl0LiBUaGUgZXZl bnQKdHJpZ2dlciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgYXQgdGhlIHRpbWUgb2YgRFJPUCBQ VUJMSUNBVElPTi4gVGhlCldBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwgYW5kIHNlbmRzIGl0IGRv d25zdHJlYW0gc2ltaWxhciB0byBvdGhlciBETUwKY29tbWFuZHMuIFRoZSBzdWJzY3JpYmVyIHRo ZW4gY29udmVydHMgSlNPTiBiYWNrIHRvIHRoZSBEREwgY29tbWFuZCBzdHJpbmcKYW5kIGV4ZWN1 dGVzIGl0LiBJbiB0aGUgc3Vic2NyaWJlciwgd2UgYWxzbyBhZGQgdGhlIG5ld2x5IGFkZGVkIHJl bCB0bwpwZ19zdWJzY3JpcHRpb25fcmVsIHNvIHRoYXQgdGhlIERNTCBjaGFuZ2VzIG9uIHRoZSBu ZXcgdGFibGUgY2FuIGJlCnJlcGxpY2F0ZWQgd2l0aG91dCBoYXZpbmcgdG8gbWFudWFsbHkgcnVu CiJBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggUFVCTElDQVRJT04iLgoKLSBGb3Igbm9u LXJld3JpdGUgQUxURVIgb2JqZWN0IGNvbW1hbmQgYW5kCi0gICAgIENSRUFURSBvYmplY3QgY29t bWFuZDoKd2UgZGVwYXJzZSB0aGUgY29tbWFuZCBhdCBkZGxfY29tbWFuZF9lbmQgZXZlbnQgdHJp Z2dlciBhbmQgV0FMIGxvZyB0aGUKZGVwYXJzZWQganNvbiBzdHJpbmcuIFRoZSBXQUxTZW5kZXIg ZGVjb2RlcyB0aGUgV0FMIGFuZCBzZW5kcyBpdCB0bwpzdWJzY3JpYmVyIGlmIHRoZSBjcmVhdGVk L2FsdGVyZWQgdGFibGUgaXMgcHVibGlzaGVkLiBJdCBzdXBwb3J0cyBtb3N0IG9mCkFMVEVSIFRB QkxFIGNvbW1hbmQgZXhjZXB0IHNvbWUgY29tbWFuZHMoRERMIHJlbGF0ZWQgdG8gUEFSVElUSU9O RUQgVEFCTEUKLi4uKSB0aGF0IGludHJvZHVjZWQgcmVjZW50bHkgd2hpY2ggaGF2ZW4ndCBiZWVu IHN1cHBvcnRlZCBieSB0aGUgY3VycmVudApkZGxfZGVwYXJzZXIsIHdlIHdpbGwgc3VwcG9ydCB0 aGF0IGxhdGVyLgoKLSBGb3IgRFJPUCBvYmplY3Q6ClRoZSAnY29tbWFuZCBzdGFydCcgZXZlbnQg aGFuZGxlciBsb2dzIGEgZGRsIG1lc3NhZ2Ugd2l0aCB0aGUgcmVsaWRzIG9mCnRoZSB0YWJsZXMg dGhhdCBhcmUgZHJvcHBlZCB3aGljaCB0aGUgb3V0cHV0IHBsdWdpbiAocGdvdXRwdXQpIHN0b3Jl cyBpbgppdHMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQgaXQg aXMgZm9yIGEgdGFibGUgdGhhdCBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbi4gTGF0ZXIgdGhl ICdjb21tYW5kIGVuZCcgZXZlbnQgaGFuZGxlciBzZW5kcyB0aGUKYWN0dWFsIGRyb3AgbWVzc2Fn ZS4gUGdvdXRwdXQgb24gcmVjZWl2aW5nIHRoZSBjb21tYW5kIGVuZCwgb25seSBzZW5kcyBvdXQK dGhlIGRyb3AgY29tbWFuZCBvbmx5IGlmIGl0IGlzIGZvciBvbmUgb2YgdGhlIHJlbGlkcyBtYXJr ZWQgZm9yIGRlbGV0aW5nLgpUaGUgcmVhc29uIHdlIGhhdmUgdG8gZG8gdGhpcyBpcyBiZWNhdXNl LCBvbmNlIHRoZSBsb2dpY2FsIGRlY29kZXIKcmVjZWl2ZXMgdGhlICdjb21tYW5kIGVuZCcgbWVz c2FnZSwgIHRoZSByZWxpZCBvZiB0aGUgdGFibGUgaXMgbm8gbG9uZ2VyCnZhbGlkIGFzIGl0IGhh cyBiZWVuIGRlbGV0ZWQgYXMgcGFydCBvZiBpbnZhbGlkYXRpb25zIHJlY2VpdmVkIGZvciB0aGUK ZHJvcCB0YWJsZSBjb21tYW5kLiBJdCBpcyBubyBsb25nZXIgcG9zc2libGUgdG8gdmVyaWZ5IGlm IHRoZSB0YWJsZSBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbiBsaXN0IG9yIG5vdC4gVG8gbWFr ZSB0aGlzIHBvc3NpYmxlLCBJIGhhdmUgYWRkZWQKdHdvIG1vcmUgZWxlbWVudHMgdG8gdGhlIGRk bCB4bG9nIGFuZCBkZGwgbWVzc2FnZSwgKHJlbGlkIGFuZCBjbWR0eXBlKS4KCldlIGNvdWxkIGhh dmUgYWxzbyBoYW5kbGVkIGFsbCB0aGlzIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUgYXMgd2VsbCwg YnV0CnRoYXQgd291bGQgbWVhbiBzZW5kaW5nIHNwdXJpb3VzIGRkbCBtZXNzYWdlcyBmb3IgdGFi bGVzIHRoYXQgYXJlIG5vdCBwYXJ0Cm9mIHRoZSBwdWJsaWNhdGlvbi4KCi0gRm9yIHRhYmxlX3Jl d3JpdGUgQUxURVIgVEFCTEUgY29tbWFuZDoKKEFMVEVSIENPTFVNTiBUWVBFLCBBREQgQ09MVU1O IERFRkFVTFQsIFNFVCBMT0dHRUQsIFNFVCBBQ0NFU1MgTUVUSE9EKQoKd2UgZGVwYXJzZSB0aGUg Y29tbWFuZCBhbmQgV0FMIGxvZyB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcgYXQKdGFibGVfcmV3 cml0ZSBldmVudCB0cmlnZ2VyLiBUaGUgV0FMU2VuZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQgc2Vu ZHMgaXQgdG8Kc3Vic2NyaWJlciBpZiB0aGUgYWx0ZXJlZCB0YWJsZSBpcyBwdWJsaXNoZWQuIFRo ZW4sIHRoZSBXQUxTZW5kZXIgd2lsbApjb252ZXJ0IHRoZSB1cGNvbWluZyByZXdyaXRlIElOU0VS VHMgdG8gVVBEQVRFcyBhbmQgc2VuZCB0aGVtIHRvCnN1YnNjcmliZXIgc28gdGhhdCB0aGUgZGF0 YSBiZXR3ZWVuIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBjYW4gYWx3YXlzIGJlCmNvbnNpc3Rl bnQuIE5vdGUgdGhhdCB0aGUgdGFibGVzIHRoYXQgcHVibGlzaCByZXdyaXRlIGRkbCBtdXN0IGhh dmUgYQpyZXBsaWNhIGlkZW50aXR5IGNvbmZpZ3VyZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBy ZXBsaWNhdGUgdGhlIHVwY29taW5nCnJld3JpdGUgVVBEQVRFcy4KCldlIGRvIHRoaXMgd2F5IGJl Y2F1c2Ugb2YgdHdvIHJlYXNvbjoKKDEpIFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBkZGwg Y291bGQgYWxyZWFkeSBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVy LiBUbyBtYWtlIHN1cmUgdGhlIGV4dHJhIGRhdGEgaW4gc3Vic2NyaWJlciB3aGljaApkb2Vzbid0 IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCByZXdyaXR0ZW4sIHdlIG5lZWQgdG8gbGV0IHRo ZQpzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRsIHRvIHJld3JpdGUg YWxsIHRoZSBkYXRhIGF0CmZpcnN0LgoKKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyByZXdy aXRlIGRkbCBjb3VsZCBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVy KGR1ZSB0byBkaWZmZXJlbnQgZnVuY3Rpb25zL29wZXJhdG9ycyB1c2VkIGR1cmluZwpyZXdyaXRl KSwgc28gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhlIHJld3JpdGUgVVBEQVRFcyB0byBrZWVwIHRo ZSBkYXRhCmNvbnNpc3RlbnQuCgpUTyBJTVBST1ZFOgpUaGlzIGFwcHJvYWNoIGNvdWxkIGJlIGlt cHJvdmVkIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmliZXIgdHJ5IHRvIHVwZGF0ZQp0aGUgZXh0cmEg ZGF0YSBpdHNlbGYgaW5zdGVhZCBvZiBkb2luZyBmdWxseSByZXdyaXRlIGRkbCBhbmQgdXNlIHRo ZQp1cGNvbWluZyByZXdyaXRlIFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRhLiBUbyBh Y2hpZXZlIHRoaXMsIHdlCmNvdWxkIG1vZGlmeSB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcgdG8g dGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSByZXdyaXRlCnBhcnQgYW5kIGFkZCBzb21lIGxvZ2ljIGlu IHN1YnNjcmliZXIgdG8gdXBkYXRlIHRoZSBleHRyYSBkYXRhLgpCZXNpZGVzLCB3ZSBtYXkgbm90 IG5lZWQgdG8gc2VuZCByZXdyaXRlIGNoYW5nZXMgZm9yIGFsbCB0eXBlIG9mIHJld3JpdGUKZGRs LCBmb3IgZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBza2lwIHNlbmRpbmcgcmV3cml0ZSBjaGFu Z2VzIGZvciBBTFRFUgpUQUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBkYXRhIGluIHRoZSB0YWJsZSBk b2Vzbid0IGFjdHVhbGx5IGJlIGNoYW5nZWQuIFdlCmNvdWxkIHVzZSB0aGUgZGVwYXJzZXIgYW5k IGV2ZW50IHRyaWdnZXIgdG8gZmlsdGVyIHRoZXNlIGRkbHMgYW5kIHNraXAKc2VuZGluZyByZXdy aXRlIGNoYW5nZXMgZm9yIHRoZW0uCi0tLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5jICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMg ICAgICAgICAgICAgICB8ICAxMCArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2Vy LmMgICAgICAgICAgfCAyODQgKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3B1Ymxp Y2F0aW9uY21kcy5jICAgICAgICB8IDE5MSArKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy90 YWJsZWNtZHMuYyAgICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV91dGlsY21kLmMgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL01ha2VmaWxlICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9kZGx0cmlnZ2VyLmMgIHwgMzU2ICsrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jICAgICAgfCAgNDEgKysKIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jICAgICB8ICA5MyArKysrCiBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9wcm90by5jICAgICAgIHwgIDQzICsrCiAuLi4vcmVwbGljYXRpb24vbG9n aWNhbC9yZW9yZGVyYnVmZmVyLmMgICAgICAgfCAxMzUgKysrKysKIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgICB8IDI0MCArKysrKysrKysKIHNyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgICB8IDE4OCArKysrKystCiBzcmMvYmFj a2VuZC90Y29wL3V0aWxpdHkuYyAgICAgICAgICAgICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYyAgICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5k L3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgICAgfCAgMjEgKy0KIHNyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmggICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BzcWwvZGVz Y3JpYmUuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMzMgKy0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9ybWdybGlzdC5oICAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAgIHwgIDEyICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHVibGljYXRpb24uaCAgICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmggICAgICAgICAgfCAgMTEgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2RlY29kZS5oICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9s b2dpY2FscHJvdG8uaCAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0 cHV0X3BsdWdpbi5oICAgICAgIHwgIDI3ICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0 cHV0LmggICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVy YnVmZmVyLmggICAgICAgfCAgMzkgKysKIHNyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggICAg ICAgICAgICAgICAgICB8ICAgMyArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91 dCAgICAgICAgICAgIHwgICA2ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0 aW9uLm91dCAgICAgfCA0MjAgKysrKysrKystLS0tLS0tLQogLi4uL3N1YnNjcmlwdGlvbi90LzAz Ml9kZGxfcmVwbGljYXRpb24ucGwgICAgIHwgNDY1ICsrKysrKysrKysrKysrKysrKwogc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICA1ICsKIDM1IGZpbGVz IGNoYW5nZWQsIDI0MTYgaW5zZXJ0aW9ucygrKSwgMjQwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNh dGlvbi5wbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24u YyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwppbmRleCA1OTk2NzA5OGIz Li43MjFkMDIzYWE1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0 aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0xMDA1 LDYgKzEwMDUsNyBAQCBHZXRQdWJsaWNhdGlvbihPaWQgcHViaWQpCiAJcHViLT5wdWJhY3Rpb25z LnB1YnVwZGF0ZSA9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAlwdWItPnB1YmFjdGlvbnMucHViZGVs ZXRlID0gcHViZm9ybS0+cHViZGVsZXRlOwogCXB1Yi0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9 IHB1YmZvcm0tPnB1YnRydW5jYXRlOworCXB1Yi0+cHViYWN0aW9ucy5wdWJkZGwgPSBwdWJmb3Jt LT5wdWJkZGw7CiAJcHViLT5wdWJ2aWFyb290ID0gcHViZm9ybS0+cHVidmlhcm9vdDsKIAogCVJl bGVhc2VTeXNDYWNoZSh0dXApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3Jl YXRlYXMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5kZXggMTUyYzI5YjU1 MS4uYjc3OTVkYTg3ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBAIC0zNCw2ICszNCw3IEBA CiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3RvYXN0 aW5nLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvY3JlYXRlYXMuaCIKKyNpbmNsdWRlICJjb21tYW5k cy9ldmVudF90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvbWF0dmlldy5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3ByZXBhcmUuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZWNtZHMuaCIK QEAgLTE0Myw2ICsxNDQsMTUgQEAgY3JlYXRlX2N0YXNfaW50ZXJuYWwoTGlzdCAqYXR0ckxpc3Qs IEludG9DbGF1c2UgKmludG8pCiAJCVN0b3JlVmlld1F1ZXJ5KGludG9SZWxhdGlvbkFkZHIub2Jq ZWN0SWQsIHF1ZXJ5LCBmYWxzZSk7CiAJCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CiAJfQor CWVsc2UKKwl7CisJCS8qCisJCSAqIEZpcmUgdGhlIHRyaWdnZXIgZm9yIHRhYmxlX2luaXRfd3Jp dGUgYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIHNvCisJCSAqIHRoYXQgd2UgY2FuIGFjY2VzcyB0 aGUgY2F0YWxvZyBpbmZvIGFib3V0IHRoZSBuZXdseSBjcmVhdGVkIHRhYmxlCisJCSAqIGluIHRo ZSB0cmlnZ2VyIGZ1bmN0aW9uLgorCQkgKi8KKwkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGUo KE5vZGUgKikgY3JlYXRlLCBpbnRvUmVsYXRpb25BZGRyKTsKKwl9CiAKIAlyZXR1cm4gaW50b1Jl bGF0aW9uQWRkcjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCA2NDBj MjVmZjcwLi5hZmI0YjdlODQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVu dF90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBA IC0zNyw4ICszNywxMSBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNl ci9wYXJzZV9mdW5jLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRp b24vZGRsbWVzc2FnZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNs dWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgogI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgor I2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2V2dGNhY2hlLmgiCkBA IC05Miw3ICs5NSw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpz dG10KQogCWlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfc3RhcnQiKSAh PSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9lbmQiKSAhPSAw ICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpICE9IDAgJiYKLQkJc3Ry Y21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAwKQorCQlzdHJjbXAoc3Rt dC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDAgJiYKKwkJc3RyY21wKHN0bXQtPmV2 ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSAhPSAwKQogCQllcmVwb3J0KEVSUk9SLAogCQkJ CShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNnKCJ1bnJlY29nbml6 ZWQgZXZlbnQgbmFtZSBcIiVzXCIiLApAQCAtMTE4LDcgKzEyMiw4IEBAIENyZWF0ZUV2ZW50VHJp Z2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCS8qIFZhbGlkYXRlIHRhZyBsaXN0LCBp ZiBhbnkuICovCiAJaWYgKChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfc3Rh cnQiKSA9PSAwIHx8CiAJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfZW5k IikgPT0gMCB8fAotCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgPT0gMCkK KwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpID09IDAgfHwKKwkJIHN0cmNt cChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKIAkJJiYgdGFncyAh PSBOVUxMKQogCQl2YWxpZGF0ZV9kZGxfdGFncygidGFnIiwgdGFncyk7CiAJZWxzZSBpZiAoc3Ry Y21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSA9PSAwCkBAIC01NDQsNyArNTQ5 LDggQEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAqcGFyc2V0cmVlLAogCQlkYmd0YWcg PSBDcmVhdGVDb21tYW5kVGFnKHBhcnNldHJlZSk7CiAJCWlmIChldmVudCA9PSBFVlRfRERMQ29t bWFuZFN0YXJ0IHx8CiAJCQlldmVudCA9PSBFVlRfRERMQ29tbWFuZEVuZCB8fAotCQkJZXZlbnQg PT0gRVZUX1NRTERyb3ApCisJCQlldmVudCA9PSBFVlRfU1FMRHJvcCB8fAorCQkJZXZlbnQgPT0g RVZUX1RhYmxlSW5pdFdyaXRlKQogCQl7CiAJCQlpZiAoIWNvbW1hbmRfdGFnX2V2ZW50X3RyaWdn ZXJfb2soZGJndGFnKSkKIAkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBjb21tYW5kIHRhZyBc IiVzXCIiLCBHZXRDb21tYW5kVGFnTmFtZShkYmd0YWcpKTsKQEAgLTgyNyw2ICs4MzMsMTQxIEBA IEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9pZCB0YWJsZU9pZCwg aW50IHJlYXNvbikKIAlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwogfQogCisKKy8qCisgKiBF dmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0CisgKiAgICAgUHJlcGFyZSB0byByZWNlaXZl IGRhdGEgb24gYW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVUIElOVE8gY29tbWFuZCBhYm91dAorICog ICAgIHRvIGJlIGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0 ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlDb2xs ZWN0ZWRDb21tYW5kICpjb21tYW5kOworCUNyZWF0ZVRhYmxlQXNTdG10ICpzdG10ID0gKENyZWF0 ZVRhYmxlQXNTdG10ICopcGFyc2V0cmVlOworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIg Y29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50 RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5k Q29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCWNvbW1hbmQgPSBw YWxsb2Moc2l6ZW9mKENvbGxlY3RlZENvbW1hbmQpKTsKKworCWNvbW1hbmQtPnR5cGUgPSAoc3Rt dC0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUpID8gU0NUX0NyZWF0ZVRhYmxlQXMgOiBTQ1RfU2lt cGxlOworCWNvbW1hbmQtPmluX2V4dGVuc2lvbiA9IGNyZWF0aW5nX2V4dGVuc2lvbjsKKwljb21t YW5kLT5kLmN0YXMuYWRkcmVzcyA9IEludmFsaWRPYmplY3RBZGRyZXNzOworCWNvbW1hbmQtPmQu Y3Rhcy5yZWFsX2NyZWF0ZSA9IE5VTEw7CisJY29tbWFuZC0+cGFyc2V0cmVlID0gY29weU9iamVj dChwYXJzZXRyZWUpOworCisJY29tbWFuZC0+cGFyZW50ID0gY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5jdXJyZW50Q29tbWFuZDsKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRD b21tYW5kID0gY29tbWFuZDsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQor CisvKgorICogRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQKKyAqCQlGaW5pc2ggdXAgc2F2 aW5nIGFuIENSRUFURSBUQUJMRSBBUy9TRUxFQ1QgSU5UTyBjb21tYW5kLgorICoKKyAqIEZJWE1F IHRoaXMgQVBJIGlzbid0IGNvbnNpZGVyaW5nIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGFuIHhhY3Qv c3VieGFjdCBpcworICogYWJvcnRlZCBwYXJ0d2F5IHRocm91Z2guICBQcm9iYWJseSBpdCdzIGJl c3QgdG8gYWRkIGFuCisgKiBBdEVPU3ViWGFjdF9FdmVudFRyaWdnZXJzKCkgdG8gZml4IHRoaXMu CisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKE9iamVjdEFkZHJlc3Mg YWRkcmVzcykKK3sKKwlDb2xsZWN0ZWRDb21tYW5kICpwYXJlbnQ7CisJQ3JlYXRlVGFibGVBc1N0 bXQgKnN0bXQ7CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQgdHJpZ2dlciBjb250ZXh0IG5vdCBzZXQs IG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0 ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRDb2xsZWN0aW9uSW5oaWJp dGVkKQorCQlyZXR1cm47CisKKwlzdG10ID0gIChDcmVhdGVUYWJsZUFzU3RtdCAqKWN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPnBhcnNldHJlZTsKKworCWlmIChzdG10 LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkKKwl7CisJCXBhcmVudCA9IGN1cnJlbnRFdmVudFRy aWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPnBhcmVudDsKKworCQlwZnJlZShjdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kKTsKKworCQljdXJyZW50RXZlbnRUcmlnZ2Vy U3RhdGUtPmN1cnJlbnRDb21tYW5kID0gcGFyZW50OworCX0KKwllbHNlCisJeworCQlNZW1vcnlD b250ZXh0IG9sZGN4dDsKKworCQlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3VycmVu dEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOworCisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+ Y3VycmVudENvbW1hbmQtPmQuc2ltcGxlLmFkZHJlc3MgPSBhZGRyZXNzOworCQljdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0ID0KKwkJCWxhcHBlbmQoY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jb21tYW5kTGlzdCwKKwkJCQkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5j dXJyZW50Q29tbWFuZCk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJfQor fQorCisvKgorICogRmlyZSB0YWJsZV9pbml0X3Jld3JpdGUgdHJpZ2dlcnMuCisgKi8KK3ZvaWQK K0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlKE5vZGUgKnJlYWxfY3JlYXRlLCBPYmplY3RBZGRy ZXNzIGFkZHJlc3MpCit7CisJTGlzdAkgICAqcnVubGlzdDsKKwlFdmVudFRyaWdnZXJEYXRhIHRy aWdkYXRhOworCUNvbGxlY3RlZENvbW1hbmQgKmNvbW1hbmQ7CisKKwkvKgorCSAqIFNlZSBFdmVu dFRyaWdnZXJERExDb21tYW5kU3RhcnQgZm9yIGEgZGlzY3Vzc2lvbiBhYm91dCB3aHkgZXZlbnQK KwkgKiB0cmlnZ2VycyBhcmUgZGlzYWJsZWQgaW4gc2luZ2xlIHVzZXIgbW9kZS4KKwkgKi8KKwlp ZiAoIUlzVW5kZXJQb3N0bWFzdGVyKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEFsc28gZG8gbm90 aGluZyBpZiBvdXIgc3RhdGUgaXNuJ3Qgc2V0IHVwLCB3aGljaCBpdCB3b24ndCBiZSBpZiB0aGVy ZQorCSAqIHdlcmVuJ3QgYW55IHJlbGV2YW50IGV2ZW50IHRyaWdnZXJzIGF0IHRoZSBzdGFydCBv ZiB0aGUgY3VycmVudCBEREwKKwkgKiBjb21tYW5kLiAgVGhpcyB0ZXN0IG1pZ2h0IHRoZXJlZm9y ZSBzZWVtIG9wdGlvbmFsLCBidXQgaXQncworCSAqICpuZWNlc3NhcnkqLCBiZWNhdXNlIEV2ZW50 VHJpZ2dlckNvbW1vblNldHVwIG1pZ2h0IGZpbmQgdHJpZ2dlcnMgdGhhdAorCSAqIGRpZG4ndCBl eGlzdCBhdCB0aGUgdGltZSB0aGUgY29tbWFuZCBzdGFydGVkLgorCSAqLworCWlmICghY3VycmVu dEV2ZW50VHJpZ2dlclN0YXRlKQorCQlyZXR1cm47CisKKwkvKiBEbyBub3RoaW5nIGlmIG5vIGNv bW1hbmQgd2FzIGNvbGxlY3RlZC4gKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+ Y3VycmVudENvbW1hbmQpCisJCXJldHVybjsKKworCWNvbW1hbmQgPSBjdXJyZW50RXZlbnRUcmln Z2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCisJcnVubGlzdCA9IEV2ZW50VHJpZ2dlckNvbW1v blNldHVwKGNvbW1hbmQtPnBhcnNldHJlZSwKKwkJCQkJCQkJCSAgRVZUX1RhYmxlSW5pdFdyaXRl LAorCQkJCQkJCQkJICAidGFibGVfaW5pdF93cml0ZSIsCisJCQkJCQkJCQkgICZ0cmlnZGF0YSk7 CisJaWYgKHJ1bmxpc3QgPT0gTklMKQorCQlyZXR1cm47CisKKwkvKiBTZXQgdGhlIHJlYWwgQ3Jl YXRlVGFibGUgc3RhdG1lbnQgYW5kIG9iamVjdCBhZGRyZXNzICovCisJY29tbWFuZC0+ZC5jdGFz LnJlYWxfY3JlYXRlID0gcmVhbF9jcmVhdGU7CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBh ZGRyZXNzOworCisJLyogUnVuIHRoZSB0cmlnZ2Vycy4gKi8KKwlFdmVudFRyaWdnZXJJbnZva2Uo cnVubGlzdCwgJnRyaWdkYXRhKTsKKworCS8qIENsZWFudXAuICovCisJbGlzdF9mcmVlKHJ1bmxp c3QpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgYW55dGhpbmcgdGhlIGV2ZW50IHRyaWdnZXJzIGRp ZCB3aWxsIGJlIHZpc2libGUgdG8gdGhlIG1haW4KKwkgKiBjb21tYW5kLgorCSAqLworCUNvbW1h bmRDb3VudGVySW5jcmVtZW50KCk7Cit9CisKIC8qCiAgKiBJbnZva2UgZWFjaCBldmVudCB0cmln Z2VyIGluIGEgbGlzdCBvZiBldmVudCB0cmlnZ2Vycy4KICAqLwpAQCAtMTEwOCw3ICsxMjQ5LDgg QEAgdHJhY2tEcm9wcGVkT2JqZWN0c05lZWRlZCh2b2lkKQogCSAqLwogCXJldHVybiAoRXZlbnRD YWNoZUxvb2t1cChFVlRfU1FMRHJvcCkgIT0gTklMKSB8fAogCQkoRXZlbnRDYWNoZUxvb2t1cChF VlRfVGFibGVSZXdyaXRlKSAhPSBOSUwpIHx8Ci0JCShFdmVudENhY2hlTG9va3VwKEVWVF9ERExD b21tYW5kRW5kKSAhPSBOSUwpOworCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERMQ29tbWFuZEVu ZCkgIT0gTklMKSB8fAorCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVJbml0V3JpdGUpICE9 IE5JTCk7CiB9CiAKIC8qCkBAIC0xNDk5LDYgKzE2NDEsNyBAQCBFdmVudFRyaWdnZXJBbHRlclRh YmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKQogCiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLmNsYXNz SWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLm9iamVjdElk ID0gSW52YWxpZE9pZDsKKwljb21tYW5kLT5kLmFsdGVyVGFibGUucmV3cml0ZSA9IGZhbHNlOwog CWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0gTklMOwogCWNvbW1hbmQtPnBhcnNldHJl ZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKIApAQCAtMTUzMiw3ICsxNjc1LDcgQEAgRXZlbnRU cmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJZCkKICAqIGludGVybmFsbHksIHNvIHRo YXQncyBhbGwgdGhhdCB0aGlzIGNvZGUgbmVlZHMgdG8gaGFuZGxlIGF0IHRoZSBtb21lbnQuCiAg Ki8KIHZvaWQKLUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNt ZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQorRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVT dWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MsIGJvb2wgcmV3cml0ZSkK IHsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlDb2xsZWN0ZWRBVFN1YmNtZCAqbmV3c3ViOwpA QCAtMTU1MiwxMiArMTY5NSwxNDAgQEAgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJj bWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCiAJbmV3c3ViLT5hZGRyZXNz ID0gYWRkcmVzczsKIAluZXdzdWItPnBhcnNldHJlZSA9IGNvcHlPYmplY3Qoc3ViY21kKTsKIAor CWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5y ZXdyaXRlIHw9IHJld3JpdGU7CiAJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29t bWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPQogCQlsYXBwZW5kKGN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzLCBuZXdzdWIpOwog CiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CiB9CiAKKy8qCisgKiBFdmVudFRyaWdn ZXJBbHRlclR5cGVTdGFydAorICoJCVNhdmUgZGF0YSBhYm91dCBhIHNpbmdsZSBwYXJ0IG9mIGFu IEFMVEVSIFRZUEUuCisgKgorICogQUxURVIgVEFCTEUgY2FuIGhhdmUgbXVsdGlwbGUgc3ViY29t bWFuZHMgd2hpY2ggbWlnaHQgaW5jbHVkZSBEUk9QIENPTFVNTgorICogY29tbWFuZCBhbmQgQUxU RVIgVFlQRSByZWZlcnJpbmcgdGhlIGRyb3AgY29sdW1uIGluIFVTSU5HIGV4cHJlc3Npb24uCisg KiBBcyB0aGUgZHJvcHBlZCBjb2x1bW4gY2Fubm90IGJlIGFjY2Vzc2VkIGFmdGVyIHRoZSBleGVj dXRpb24gb2YgRFJPUCBDT0xVTU4sCisgKiBhIHNwZWNpYWwgdHJpZ2dlciBpcyByZXF1aXJlZCB0 byBoYW5kbGUgdGhpcyBjYXNlIGJlZm9yZSB0aGUgZHJvcCBjb2x1bW4gaXMKKyAqIGV4ZWN1dGVk LgorICovCit2b2lkCitFdmVudFRyaWdnZXJBbHRlclR5cGVTdGFydChBbHRlclRhYmxlQ21kICpz dWJjbWQsIFJlbGF0aW9uIHJlbCkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlDb2xsZWN0 ZWRBVFN1YmNtZCAqbmV3c3ViOworCUNvbHVtbkRlZiAgKmRlZjsKKwlSZWxhdGlvbglhdHRyZWxh dGlvbjsKKwlIZWFwVHVwbGUJaGVhcFR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRUdXA7CisJ QXR0ck51bWJlcglhdHRudW07CisJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCisJLyogaWdub3Jl IGlmIGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVk ICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJQXNz ZXJ0KElzQShzdWJjbWQsIEFsdGVyVGFibGVDbWQpKTsKKwlBc3NlcnQoc3ViY21kLT5zdWJ0eXBl ID09IEFUX0FsdGVyQ29sdW1uVHlwZSk7CisJQXNzZXJ0KGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0 ZS0+Y3VycmVudENvbW1hbmQgIT0gTlVMTCk7CisJQXNzZXJ0KE9pZElzVmFsaWQoY3VycmVudEV2 ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKSk7 CisKKwlkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCUFzc2VydChJc0EoZGVmLCBD b2x1bW5EZWYpKTsKKworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmN4dCk7CisKKwluZXdzdWIgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3Rl ZEFUU3ViY21kKSk7CisJbmV3c3ViLT5wYXJzZXRyZWUgPSAoTm9kZSAqKWNvcHlPYmplY3Qoc3Vi Y21kKTsKKworCWF0dHJlbGF0aW9uID0gdGFibGVfb3BlbihBdHRyaWJ1dGVSZWxhdGlvbklkLCBS b3dFeGNsdXNpdmVMb2NrKTsKKworCS8qIExvb2sgdXAgdGhlIHRhcmdldCBjb2x1bW4gKi8KKwlo ZWFwVHVwID0gU2VhcmNoU3lzQ2FjaGVDb3B5QXR0TmFtZShSZWxhdGlvbkdldFJlbGlkKHJlbCks IHN1YmNtZC0+bmFtZSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGhlYXBUdXApKSAvKiBzaG91 bGRuJ3QgaGFwcGVuICovCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX1VO REVGSU5FRF9DT0xVTU4pLAorCQkJCWVycm1zZygiY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiBc IiVzXCIgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkgICBzdWJjbWQtPm5hbWUsIFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbCkpKTsKKwlhdHRUdXAgPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNU UlVDVChoZWFwVHVwKTsKKwlhdHRudW0gPSBhdHRUdXAtPmF0dG51bTsKKworCU9iamVjdEFkZHJl c3NTdWJTZXQoYWRkcmVzcywgUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJUmVsYXRpb25HZXRS ZWxpZChyZWwpLCBhdHRudW0pOworCWhlYXBfZnJlZXR1cGxlKGhlYXBUdXApOworCXRhYmxlX2Ns b3NlKGF0dHJlbGF0aW9uLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwluZXdzdWItPmFkZHJlc3MgPSBh ZGRyZXNzOworCisJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJeworCQljaGFyCSAgICpkZWZleHBy OworCisJCWRlZmV4cHIgPSBub2RlVG9TdHJpbmcoZGVmLT5jb29rZWRfZGVmYXVsdCk7CisJCW5l d3N1Yi0+dXNpbmdleHByID0gVGV4dERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwy KHBnX2dldF9leHByLAorCQkJCQkJCQkJCQkJCQkJCQlDU3RyaW5nR2V0VGV4dERhdHVtKGRlZmV4 cHIpLAorCQkJCQkJCQkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHJlbCkpKTsKKwl9CisJZWxz ZQorCQluZXdzdWItPnVzaW5nZXhwciA9IE5VTEw7CisKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3Rh dGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9CisJCWxhcHBlbmQoY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNt ZHMsIG5ld3N1Yik7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKworLyoK KyAqIEV2ZW50VHJpZ2dlckFsdGVyVHlwZUVuZAorICoJCUZpbmlzaCB1cCBzYXZpbmcgYW4gQUxU RVIgVFlQRSBjb21tYW5kLCBhbmQgYWRkIGl0IHRvIGNvbW1hbmQgbGlzdC4KKyAqLwordm9pZAor RXZlbnRUcmlnZ2VyQWx0ZXJUeXBlRW5kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRy ZXNzLCBib29sIHJld3JpdGUpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJQ29sbGVjdGVk QVRTdWJjbWQgKm5ld3N1YjsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUNvbGxlY3RlZENvbW1hbmQg KmNtZDsKKwlBbHRlclRhYmxlQ21kICphbHRzdWJjbWQgPSAoQWx0ZXJUYWJsZUNtZCAqKXN1YmNt ZDsKKworCS8qIGlnbm9yZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29s bGVjdGlvbiBkaXNhYmxlZCAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJ CWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJ CXJldHVybjsKKworCWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1h bmQ7CisKKwlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJUYWJsZUNtZCkpOworCUFzc2VydChjbWQg IT0gTlVMTCk7CisJQXNzZXJ0KE9pZElzVmFsaWQoY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQp KTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLmFsdGVyVGFibGUuc3ViY21kcykKKwl7CisJCUNv bGxlY3RlZEFUU3ViY21kICpzdWIgPSAoQ29sbGVjdGVkQVRTdWJjbWQgKikgbGZpcnN0KGNlbGwp OworCQlBbHRlclRhYmxlQ21kICpjb2xsY21kID0gKEFsdGVyVGFibGVDbWQgKikgc3ViLT5wYXJz ZXRyZWU7CisKKwkJaWYgKGNvbGxjbWQtPnN1YnR5cGUgPT0gYWx0c3ViY21kLT5zdWJ0eXBlICYm CisJCQlhZGRyZXNzLmNsYXNzSWQgPT0gc3ViLT5hZGRyZXNzLmNsYXNzSWQgJiYKKwkJCWFkZHJl c3Mub2JqZWN0SWQgPT0gc3ViLT5hZGRyZXNzLm9iamVjdElkICYmCisJCQlhZGRyZXNzLm9iamVj dFN1YklkID09IHN1Yi0+YWRkcmVzcy5vYmplY3RTdWJJZCkKKwkJeworCQkJY21kLT5kLmFsdGVy VGFibGUucmV3cml0ZSB8PSByZXdyaXRlOworCQkJcmV0dXJuOworCQl9CisJfQorCisJb2xkY3h0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsK KworCW5ld3N1YiA9IHBhbGxvYyhzaXplb2YoQ29sbGVjdGVkQVRTdWJjbWQpKTsKKwluZXdzdWIt PmFkZHJlc3MgPSBhZGRyZXNzOworCW5ld3N1Yi0+cGFyc2V0cmVlID0gY29weU9iamVjdChzdWJj bWQpOworCisJY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8PSByZXdyaXRlOworCWNtZC0+ZC5h bHRlclRhYmxlLnN1YmNtZHMgPSBsYXBwZW5kKGNtZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMsIG5l d3N1Yik7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKwogLyoKICAqIEV2 ZW50VHJpZ2dlckFsdGVyVGFibGVFbmQKICAqCQlGaW5pc2ggdXAgc2F2aW5nIGFuIEFMVEVSIFRB QkxFIGNvbW1hbmQsIGFuZCBhZGQgaXQgdG8gY29tbWFuZCBsaXN0LgpAQCAtMTgyNSw2ICsyMDk2 LDcgQEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJ CWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CiAJCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgogCQkJ Y2FzZSBTQ1RfQWx0ZXJUU0NvbmZpZzoKKwkJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CiAJCQkJ ewogCQkJCQljaGFyCSAgICppZGVudGl0eTsKIAkJCQkJY2hhcgkgICAqdHlwZTsKQEAgLTE4NDIs NiArMjExNCw4IEBAIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FS R1MpCiAJCQkJCQlhZGRyID0gY21kLT5kLmNyZWF0ZW9wYy5hZGRyZXNzOwogCQkJCQllbHNlIGlm IChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCiAJCQkJCQlhZGRyID0gY21kLT5kLmF0 c2NmZy5hZGRyZXNzOworCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25m aWcpCisJCQkJCQlhZGRyID0gY21kLT5kLmN0YXMuYWRkcmVzczsKIAogCQkJCQkvKgogCQkJCQkg KiBJZiBhbiBvYmplY3Qgd2FzIGRyb3BwZWQgaW4gdGhlIHNhbWUgY29tbWFuZCB3ZSBtYXkgZW5k CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IDIwZmE3MmM1YzguLjM1 ZTBlMDYxOGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21k cy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC0zOCwx MCArMzgsMTIgQEAKICNpbmNsdWRlICJjb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuaCIKICNpbmNs dWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMv bWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAicGFy c2VyL3BhcnNlX2NsYXVzZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jb2xsYXRlLmgiCiAj aW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNl ci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgog I2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCkBAIC05Nyw2ICs5OSw3IEBAIHBhcnNlX3B1YmxpY2F0 aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCXB1YmFjdGlvbnMtPnB1YnVwZGF0ZSA9 IHRydWU7CiAJcHViYWN0aW9ucy0+cHViZGVsZXRlID0gdHJ1ZTsKIAlwdWJhY3Rpb25zLT5wdWJ0 cnVuY2F0ZSA9IHRydWU7CisJcHViYWN0aW9ucy0+cHViZGRsID0gZmFsc2U7CiAJKnB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2U7CiAKIAkvKiBQYXJzZSBvcHRpb25zICovCkBAIC0x NDQsNiArMTQ3LDggQEAgcGFyc2VfcHVibGljYXRpb25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3Rh dGUsCiAJCQkJCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSA9IHRydWU7CiAJCQkJZWxzZSBpZiAoc3Ry Y21wKHB1Ymxpc2hfb3B0LCAidHJ1bmNhdGUiKSA9PSAwKQogCQkJCQlwdWJhY3Rpb25zLT5wdWJ0 cnVuY2F0ZSA9IHRydWU7CisJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAiZGRsIikg PT0gMCkKKwkJCQkJcHViYWN0aW9ucy0+cHViZGRsID0gdHJ1ZTsKIAkJCQllbHNlCiAJCQkJCWVy ZXBvcnQoRVJST1IsCiAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLApAQCAt NzI4LDYgKzczMyw1MyBAQCBDaGVja1B1YlJlbGF0aW9uQ29sdW1uTGlzdChjaGFyICpwdWJuYW1l LCBMaXN0ICp0YWJsZXMsCiAJfQogfQogCisvKgorICogQ3JlYXRlIGV2ZW50IHRyaWdnZXIgd2hp Y2ggaXMgdXNlZCBmb3IgRERMIHJlcGxpY2F0aW9uLgorICovCitzdGF0aWMgdm9pZAorQ3JlYXRl RERMUmVwbGljYUV2ZW50VHJpZ2dlcihjaGFyICpldmVudG5hbWUsIENvbW1hbmRUYWcgKmNvbW1h bmRzLAorCQkJCQkJCSBpbnQgbmNvbW1hbmRzLCBPYmplY3RBZGRyZXNzIHB1YmFkZHJlc3MsCisJ CQkJCQkJIE9pZCBwdWJvaWQpCit7CisJaW50CQkJaTsKKwlMaXN0CSAgICp0YWdzID0gTklMOwor CU9pZAkJCXRyaWdnZXJfaWQ7CisJT2JqZWN0QWRkcmVzcyByZWZlcmVuY2VkOworCUNyZWF0ZUV2 ZW50VHJpZ1N0bXQgKmRkbF90cmlnZ2VyOworCWNoYXIJCXRyaWdnZXJfbmFtZVtOQU1FREFUQUxF Tl07CisJY2hhcgkJdHJpZ2dlcl9mdW5jX25hbWVbTkFNRURBVEFMRU5dOworCXN0YXRpYyBjb25z dCBjaGFyICp0cmlnZ2VyX25hbWVfcHJlZml4ID0gInBnX2RlcGFyc2VfdHJpZ18lc18ldSI7CisJ c3RhdGljIGNvbnN0IGNoYXIgKnRyaWdnZXJfZnVuY19wcmVmaXggPSAicHVibGljYXRpb25fZGVw YXJzZV8lcyI7CisKKwlkZGxfdHJpZ2dlciA9IG1ha2VOb2RlKENyZWF0ZUV2ZW50VHJpZ1N0bXQp OworCisJc25wcmludGYodHJpZ2dlcl9uYW1lLCBzaXplb2YodHJpZ2dlcl9uYW1lKSwgdHJpZ2dl cl9uYW1lX3ByZWZpeCwKKwkJCSBldmVudG5hbWUsIHB1Ym9pZCk7CisJc25wcmludGYodHJpZ2dl cl9mdW5jX25hbWUsIHNpemVvZih0cmlnZ2VyX2Z1bmNfbmFtZSksIHRyaWdnZXJfZnVuY19wcmVm aXgsCisJCQkgZXZlbnRuYW1lKTsKKworCWRkbF90cmlnZ2VyLT50cmlnbmFtZSA9IHBzdHJkdXAo dHJpZ2dlcl9uYW1lKTsKKwlkZGxfdHJpZ2dlci0+ZXZlbnRuYW1lID0gZXZlbnRuYW1lOworCWRk bF90cmlnZ2VyLT5mdW5jbmFtZSA9IFN5c3RlbUZ1bmNOYW1lKHRyaWdnZXJfZnVuY19uYW1lKTsK KworCWZvciAoaSA9IDA7IGkgPCBuY29tbWFuZHM7IGkrKykKKwl7CisJCVN0cmluZwkgICAqdGFn ID0gbWFrZVN0cmluZyhwc3RyZHVwKEdldENvbW1hbmRUYWdOYW1lKGNvbW1hbmRzW2ldKSkpOwor CisJCXRhZ3MgPSBsYXBwZW5kKHRhZ3MsIHRhZyk7CisJfQorCisJZGRsX3RyaWdnZXItPndoZW5j bGF1c2UgPSBsaXN0X21ha2UxKG1ha2VEZWZFbGVtKCJ0YWciLCAoTm9kZSAqKSB0YWdzLCAtMSkp OworCisJdHJpZ2dlcl9pZCA9IENyZWF0ZUV2ZW50VHJpZ2dlcihkZGxfdHJpZ2dlcik7CisKKwkv KgorCSAqIFJlZ2lzdGVyIHRoZSBldmVudCB0cmlnZ2VycyBhcyBpbnRlcm5hbGx5IGRlcGVuZGVu dCBvbiB0aGUgcHVibGljYXRpb24uCisJICovCisJT2JqZWN0QWRkcmVzc1NldChyZWZlcmVuY2Vk LCBFdmVudFRyaWdnZXJSZWxhdGlvbklkLCB0cmlnZ2VyX2lkKTsKKwlyZWNvcmREZXBlbmRlbmN5 T24oJnJlZmVyZW5jZWQsICZwdWJhZGRyZXNzLCBERVBFTkRFTkNZX0lOVEVSTkFMKTsKK30KKwog LyoKICAqIENyZWF0ZSBuZXcgcHVibGljYXRpb24uCiAgKi8KQEAgLTc5OCw2ICs4NTAsOCBAQCBD cmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3Rt dCAqc3RtdCkKIAkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGVsZXRlKTsKIAl2YWx1ZXNb QW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0KIAkJQm9vbEdldERhdHVtKHB1 YmFjdGlvbnMucHVidHJ1bmNhdGUpOworCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRk bCAtIDFdID0KKwkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGRsKTsKIAl2YWx1ZXNbQW51 bV9wZ19wdWJsaWNhdGlvbl9wdWJ2aWFyb290IC0gMV0gPQogCQlCb29sR2V0RGF0dW0ocHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QpOwogCkBAIC04NTgsNiArOTEyLDE0MCBAQCBDcmVhdGVQdWJs aWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkK IAkJfQogCX0KIAorCS8qCisJICogQ3JlYXRlIGFuIGV2ZW50IHRyaWdnZXIgdG8gYWxsb3cgbG9n Z2luZyBvZiBEREwgc3RhdGVtZW50cy4KKwkgKgorCSAqLworCWlmIChwdWJhY3Rpb25zLnB1YmRk bCkKKwl7CisJCUNvbW1hbmRUYWcJc3RhcnRfY29tbWFuZHNbXSA9IHtDTURUQUdfRFJPUF9UQUJM RX07CisJCUNvbW1hbmRUYWcJcmV3cml0ZV9jb21tYW5kc1tdID0ge0NNRFRBR19BTFRFUl9UQUJM RX07CisKKwkJc3RhdGljIENvbW1hbmRUYWcJZW5kX2NvbW1hbmRzW10gPSB7CisJCQlDTURUQUdf QUxURVJfQ0FTVCwKKwkJCUNNRFRBR19BTFRFUl9DT0xMQVRJT04sCisJCQlDTURUQUdfQUxURVJf Q09OVkVSU0lPTiwKKwkJCUNNRFRBR19BTFRFUl9ERUZBVUxUX1BSSVZJTEVHRVMsCisJCQlDTURU QUdfQUxURVJfRE9NQUlOLAorCQkJQ01EVEFHX0FMVEVSX0VYVEVOU0lPTiwKKwkJCUNNRFRBR19B TFRFUl9GT1JFSUdOX0RBVEFfV1JBUFBFUiwKKwkJCUNNRFRBR19BTFRFUl9GT1JFSUdOX1RBQkxF LAorCQkJQ01EVEFHX0FMVEVSX0ZVTkNUSU9OLAorCQkJQ01EVEFHX0FMVEVSX0lOREVYLAorCQkJ Q01EVEFHX0FMVEVSX0lOREVYLAorCQkJQ01EVEFHX0FMVEVSX0xBTkdVQUdFLAorCQkJQ01EVEFH X0FMVEVSX01BVEVSSUFMSVpFRF9WSUVXLAorCQkJQ01EVEFHX0FMVEVSX09QRVJBVE9SLAorCQkJ Q01EVEFHX0FMVEVSX09QRVJBVE9SX0NMQVNTLAorCQkJQ01EVEFHX0FMVEVSX09QRVJBVE9SX0ZB TUlMWSwKKwkJCUNNRFRBR19BTFRFUl9QT0xJQ1ksCisJCQlDTURUQUdfQUxURVJfUFJPQ0VEVVJF LAorCQkJQ01EVEFHX0FMVEVSX1JPVVRJTkUsCisJCQlDTURUQUdfQUxURVJfUlVMRSwKKwkJCUNN RFRBR19BTFRFUl9TQ0hFTUEsCisJCQlDTURUQUdfQUxURVJfU0VRVUVOQ0UsCisJCQlDTURUQUdf QUxURVJfU0VSVkVSLAorCQkJQ01EVEFHX0FMVEVSX1NUQVRJU1RJQ1MsCisJCQlDTURUQUdfQUxU RVJfVEFCTEUsCisJCQlDTURUQUdfQUxURVJfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwKKwkJ CUNNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9ESUNUSU9OQVJZLAorCQkJQ01EVEFHX0FMVEVSX1RS SUdHRVIsCisJCQlDTURUQUdfQUxURVJfVFlQRSwKKwkJCUNNRFRBR19BTFRFUl9VU0VSX01BUFBJ TkcsCisJCQlDTURUQUdfQUxURVJfVklFVywKKwkJCUNNRFRBR19DT01NRU5ULAorCQkJQ01EVEFH X0NSRUFURV9BQ0NFU1NfTUVUSE9ELAorCQkJQ01EVEFHX0NSRUFURV9DQVNULAorCQkJQ01EVEFH X0NSRUFURV9DT0xMQVRJT04sCisJCQlDTURUQUdfQ1JFQVRFX0NPTlZFUlNJT04sCisJCQlDTURU QUdfQ1JFQVRFX0RPTUFJTiwKKwkJCUNNRFRBR19DUkVBVEVfRVhURU5TSU9OLAorCQkJQ01EVEFH X0NSRUFURV9GT1JFSUdOX0RBVEFfV1JBUFBFUiwKKwkJCUNNRFRBR19DUkVBVEVfRk9SRUlHTl9U QUJMRSwKKwkJCUNNRFRBR19DUkVBVEVfRlVOQ1RJT04sCisJCQlDTURUQUdfQ1JFQVRFX0lOREVY LAorCQkJQ01EVEFHX0NSRUFURV9MQU5HVUFHRSwKKwkJCUNNRFRBR19DUkVBVEVfTUFURVJJQUxJ WkVEX1ZJRVcsCisJCQlDTURUQUdfQ1JFQVRFX09QRVJBVE9SLAorCQkJQ01EVEFHX0NSRUFURV9P UEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19DUkVBVEVfT1BFUkFUT1JfRkFNSUxZLAorCQkJQ01E VEFHX0NSRUFURV9QT0xJQ1ksCisJCQlDTURUQUdfQ1JFQVRFX1BST0NFRFVSRSwKKwkJCUNNRFRB R19DUkVBVEVfUlVMRSwKKwkJCUNNRFRBR19DUkVBVEVfU0NIRU1BLAorCQkJQ01EVEFHX0NSRUFU RV9TRVFVRU5DRSwKKwkJCUNNRFRBR19DUkVBVEVfU0VSVkVSLAorCQkJQ01EVEFHX0NSRUFURV9T VEFUSVNUSUNTLAorCQkJQ01EVEFHX0NSRUFURV9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVfVEVY VF9TRUFSQ0hfQ09ORklHVVJBVElPTiwKKwkJCUNNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfRElD VElPTkFSWSwKKwkJCUNNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfUEFSU0VSLAorCQkJQ01EVEFH X0NSRUFURV9URVhUX1NFQVJDSF9URU1QTEFURSwKKwkJCUNNRFRBR19DUkVBVEVfVFJBTlNGT1JN LAorCQkJQ01EVEFHX0NSRUFURV9UUklHR0VSLAorCQkJQ01EVEFHX0NSRUFURV9UWVBFLAorCQkJ Q01EVEFHX0NSRUFURV9VU0VSX01BUFBJTkcsCisJCQlDTURUQUdfQ1JFQVRFX1ZJRVcsCisJCQlD TURUQUdfRFJPUF9BQ0NFU1NfTUVUSE9ELAorCQkJQ01EVEFHX0RST1BfQ0FTVCwKKwkJCUNNRFRB R19EUk9QX0NPTExBVElPTiwKKwkJCUNNRFRBR19EUk9QX0NPTlZFUlNJT04sCisJCQlDTURUQUdf RFJPUF9ET01BSU4sCisJCQlDTURUQUdfRFJPUF9FWFRFTlNJT04sCisJCQlDTURUQUdfRFJPUF9G T1JFSUdOX0RBVEFfV1JBUFBFUiwKKwkJCUNNRFRBR19EUk9QX0ZPUkVJR05fVEFCTEUsCisJCQlD TURUQUdfRFJPUF9GVU5DVElPTiwKKwkJCUNNRFRBR19EUk9QX0lOREVYLAorCQkJQ01EVEFHX0RS T1BfTEFOR1VBR0UsCisJCQlDTURUQUdfRFJPUF9NQVRFUklBTElaRURfVklFVywKKwkJCUNNRFRB R19EUk9QX09QRVJBVE9SLAorCQkJQ01EVEFHX0RST1BfT1BFUkFUT1JfQ0xBU1MsCisJCQlDTURU QUdfRFJPUF9PUEVSQVRPUl9GQU1JTFksCisJCQlDTURUQUdfRFJPUF9QT0xJQ1ksCisJCQlDTURU QUdfRFJPUF9QUk9DRURVUkUsCisJCQlDTURUQUdfRFJPUF9ST1VUSU5FLAorCQkJQ01EVEFHX0RS T1BfUlVMRSwKKwkJCUNNRFRBR19EUk9QX1NDSEVNQSwKKwkJCUNNRFRBR19EUk9QX1NFUVVFTkNF LAorCQkJQ01EVEFHX0RST1BfU0VSVkVSLAorCQkJQ01EVEFHX0RST1BfU1RBVElTVElDUywKKwkJ CUNNRFRBR19EUk9QX1RBQkxFLAorCQkJQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfQ09ORklHVVJB VElPTiwKKwkJCUNNRFRBR19EUk9QX1RFWFRfU0VBUkNIX0RJQ1RJT05BUlksCisJCQlDTURUQUdf RFJPUF9URVhUX1NFQVJDSF9QQVJTRVIsCisJCQlDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9URU1Q TEFURSwKKwkJCUNNRFRBR19EUk9QX1RSQU5TRk9STSwKKwkJCUNNRFRBR19EUk9QX1RZUEUsCisJ CQlDTURUQUdfRFJPUF9WSUVXLAorCQkJQ01EVEFHX0dSQU5ULAorCQkJQ01EVEFHX0lNUE9SVF9G T1JFSUdOX1NDSEVNQSwKKwkJCUNNRFRBR19SRUZSRVNIX01BVEVSSUFMSVpFRF9WSUVXLAorCQkJ Q01EVEFHX1JFVk9LRSwKKwkJCUNNRFRBR19TRUNVUklUWV9MQUJFTCwKKwl9OworCisJQ29tbWFu ZFRhZwlpbml0X2NvbW1hbmRzW10gPSB7CisJCUNNRFRBR19DUkVBVEVfVEFCTEVfQVMsCisJCUNN RFRBR19TRUxFQ1RfSU5UTworCX07CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9lbmQg ZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJkZGxfY29t bWFuZF9lbmQiLCBlbmRfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2YoZW5kX2NvbW1hbmRz KSwgbXlzZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfc3RhcnQg ZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJkZGxfY29t bWFuZF9zdGFydCIsIHN0YXJ0X2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKHN0YXJ0X2Nv bW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUgdGFibGVfcmV3cml0 ZSBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoInRhYmxl X3Jld3JpdGUiLCByZXdyaXRlX2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKHJld3JpdGVf Y29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRoZSB0YWJsZV9pbml0 X3dyaXRlIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigi dGFibGVfaW5pdF93cml0ZSIsIGluaXRfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2YoaW5p dF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKwl9CisKIAl0YWJsZV9jbG9zZShyZWwsIFJv d0V4Y2x1c2l2ZUxvY2spOwogCiAJSW52b2tlT2JqZWN0UG9zdENyZWF0ZUhvb2soUHVibGljYXRp b25SZWxhdGlvbklkLCBwdWJvaWQsIDApOwpAQCAtOTk2LDYgKzExODQsOSBAQCBBbHRlclB1Ymxp Y2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpz dG10LAogCiAJCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPSBC b29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CiAJCXJlcGxhY2VzW0FudW1fcGdf cHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IHRydWU7CisKKwkJdmFsdWVzW0FudW1fcGdf cHVibGljYXRpb25fcHViZGRsIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGwp OworCQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbCAtIDFdID0gdHJ1ZTsKIAl9 CiAKIAlpZiAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4pCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Rh YmxlY21kcy5jCmluZGV4IDU2ZGM5OTU3MTMuLjljNmVjYjg4ODYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Rh YmxlY21kcy5jCkBAIC00NjUxLDYgKzQ2NTEsOSBAQCBBVFByZXBDbWQoTGlzdCAqKndxdWV1ZSwg UmVsYXRpb24gcmVsLCBBbHRlclRhYmxlQ21kICpjbWQsCiAJCQljbWQgPSBBVFBhcnNlVHJhbnNm b3JtQ21kKHdxdWV1ZSwgdGFiLCByZWwsIGNtZCwgcmVjdXJzZSwgbG9ja21vZGUsCiAJCQkJCQkJ CQkgIEFUX1BBU1NfVU5TRVQsIGNvbnRleHQpOwogCQkJQXNzZXJ0KGNtZCAhPSBOVUxMKTsKKwor CQkJRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlU3RhcnQoY21kLCByZWwpOworCiAJCQkvKiBQZXJmb3Jt cyBvd24gcmVjdXJzaW9uICovCiAJCQlBVFByZXBBbHRlckNvbHVtblR5cGUod3F1ZXVlLCB0YWIs IHJlbCwgcmVjdXJzZSwgcmVjdXJzaW5nLCBjbWQsCiAJCQkJCQkJCSAgbG9ja21vZGUsIGNvbnRl eHQpOwpAQCAtNDkyMiw2ICs0OTI1LDcgQEAgQVRFeGVjQ21kKExpc3QgKip3cXVldWUsIEFsdGVy ZWRUYWJsZUluZm8gKnRhYiwKIHsKIAlPYmplY3RBZGRyZXNzIGFkZHJlc3MgPSBJbnZhbGlkT2Jq ZWN0QWRkcmVzczsKIAlSZWxhdGlvbglyZWwgPSB0YWItPnJlbDsKKwlib29sCQljb21tYW5kQ29s bGVjdGVkID0gZmFsc2U7CiAKIAlzd2l0Y2ggKGNtZC0+c3VidHlwZSkKIAl7CkBAIC01MDQ1LDYg KzUwNDksOCBAQCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFi LAogCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlwZToJLyogQUxURVIgQ09MVU1OIFRZUEUgKi8KIAkJ CS8qIHBhcnNlIHRyYW5zZm9ybWF0aW9uIHdhcyBkb25lIGVhcmxpZXIgKi8KIAkJCWFkZHJlc3Mg PSBBVEV4ZWNBbHRlckNvbHVtblR5cGUodGFiLCByZWwsIGNtZCwgbG9ja21vZGUpOworCQkJRXZl bnRUcmlnZ2VyQWx0ZXJUeXBlRW5kKChOb2RlICopIGNtZCwgYWRkcmVzcywgdGFiLT5yZXdyaXRl KTsKKwkJCWNvbW1hbmRDb2xsZWN0ZWQgPSB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRfQWx0 ZXJDb2x1bW5HZW5lcmljT3B0aW9uczoJLyogQUxURVIgQ09MVU1OIE9QVElPTlMgKi8KIAkJCWFk ZHJlc3MgPQpAQCAtNTIxNyw4ICs1MjIzLDggQEAgQVRFeGVjQ21kKExpc3QgKip3cXVldWUsIEFs dGVyZWRUYWJsZUluZm8gKnRhYiwKIAkvKgogCSAqIFJlcG9ydCB0aGUgc3ViY29tbWFuZCB0byBp bnRlcmVzdGVkIGV2ZW50IHRyaWdnZXJzLgogCSAqLwotCWlmIChjbWQpCi0JCUV2ZW50VHJpZ2dl ckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcyk7CisJaWYgKGNt ZCAmJiAhY29tbWFuZENvbGxlY3RlZCkKKwkJRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVT dWJjbWQoKE5vZGUgKikgY21kLCBhZGRyZXNzLCB0YWItPnJld3JpdGUpOwogCiAJLyoKIAkgKiBC dW1wIHRoZSBjb21tYW5kIGNvdW50ZXIgdG8gZW5zdXJlIHRoZSBuZXh0IHN1YmNvbW1hbmQgaW4g dGhlIHNlcXVlbmNlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNt ZC5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwppbmRleCBmNzQzY2Q1NDhj Li4xNjk2NzQ2OGI4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNt ZC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMKQEAgLTEzOTcsNiAr MTM5Nyw3IEBAIGV4cGFuZFRhYmxlTGlrZUNsYXVzZShSYW5nZVZhciAqaGVhcFJlbCwgVGFibGVM aWtlQ2xhdXNlICp0YWJsZV9saWtlX2NsYXVzZSkKIAkJYXRjbWQtPmNtZHMgPSBhdHN1YmNtZHM7 CiAJCWF0Y21kLT5vYmp0eXBlID0gT0JKRUNUX1RBQkxFOwogCQlhdGNtZC0+bWlzc2luZ19vayA9 IGZhbHNlOworCQlhdGNtZC0+dGFibGVfbGlrZSA9IHRydWU7CiAJCXJlc3VsdCA9IGxjb25zKGF0 Y21kLCByZXN1bHQpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZp bGUKaW5kZXggZDRmMjlmOGZmYy4uMjNhYmQ2ZmE3OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIG92ZXJyaWRlIENQUEZMQUdTIDo9 IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9CSlMgPSBcCiAJZGRsbWVzc2FnZS5vXAorCWRk bHRyaWdnZXIub1wKIAlkZWNvZGUubyBcCiAJbGF1bmNoZXIubyBcCiAJbG9naWNhbC5vIFwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5jIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYzgyNWZmNmQwOQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5jCkBAIC0wLDAgKzEs MzU2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGx0cmlnZ2VyLmMKKyAqCSAgTG9n aWNhbCBEREwgbWVzc2FnZXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5jCisgKgorICogTk9URVMK KyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgY29tbWFuZCBhbmQgbG9nIGl0LgorICoKKyAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAi YWNjZXNzL3RhYmxlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgorI2luY2x1ZGUg ImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVk ZSAibGliL2lsaXN0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorI2lu Y2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9zLmgi CisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKK2V4dGVybiBFdmVudFRyaWdnZXJRdWVy eVN0YXRlICpjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGU7CisKKy8qCisgKiBEZXBhcnNlIHRoZSBk ZGwgY29tbWFuZCBhbmQgbG9nIGl0IHByaW9yIHRvCisgKiBleGVjdXRpb24uIEN1cnJlbnRseSBv bmx5IHVzZWQgZm9yIERST1AgVEFCTEUgY29tbWFuZAorICogc28gdGhhdCBjYXRhbG9nIGNhbiBi ZSBhY2Nlc3NlZCBiZWZvcmUgYmVpbmcgZGVsZXRlZC4KKyAqIFRoaXMgaXMgdG8gY2hlY2sgaWYg dGhlIHRhYmxlIGlzIHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCisgKiBvciBub3QuCisgKi8KK0Rh dHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0KFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJRXZlbnRUcmlnZ2VyRGF0YSAqdHJpZ2RhdGE7CisJY2hhcgkgICAqY29tbWFuZCA9 IHBzcHJpbnRmKCJEcm9wIHRhYmxlIGNvbW1hbmQgc3RhcnQiKTsKKwlEcm9wU3RtdCAgICpzdG10 OworCUxpc3RDZWxsICAgKmNlbGwxOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihm Y2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdl ciIpOworCisJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAqKSBmY2luZm8tPmNvbnRleHQ7 CisJc3RtdCA9IChEcm9wU3RtdCAqKSB0cmlnZGF0YS0+cGFyc2V0cmVlOworCisJLyogRXh0cmFj dCB0aGUgcmVsaWQgZnJvbSB0aGUgcGFyc2UgdHJlZSAqLworCWZvcmVhY2goY2VsbDEsIHN0bXQt Pm9iamVjdHMpCisJeworCQljaGFyCQlyZWxwZXJzaXN0OworCQlOb2RlCSAgICpvYmplY3QgPSBs Zmlyc3QoY2VsbDEpOworCQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJCVJlbGF0aW9uCXJlbGF0 aW9uID0gTlVMTDsKKworCQlhZGRyZXNzID0gZ2V0X29iamVjdF9hZGRyZXNzKHN0bXQtPnJlbW92 ZVR5cGUsCisJCQkJCQkJCQkgb2JqZWN0LAorCQkJCQkJCQkJICZyZWxhdGlvbiwKKwkJCQkJCQkJ CSBBY2Nlc3NFeGNsdXNpdmVMb2NrLAorCQkJCQkJCQkJIHRydWUpOworCisJCS8qIE9iamVjdCBk b2VzIG5vdCBleGlzdCwgbm90aGluZyB0byBkbyAqLworCQlpZiAoIXJlbGF0aW9uKQorCQkJY29u dGludWU7CisKKwkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoYWRkcmVzcy5vYmpl Y3RJZCk7CisKKwkJLyoKKwkJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRz IHdob3NlIHRhcmdldCB0YWJsZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkJICoKKwkJ ICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQg dW5sb2dnZWQKKwkJICogdGFibGVzIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24g dGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcworCQkgKiBtYWtlcyBpdCBwb3NzaWJsZSB0byBkaXJl Y3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlCisJCSAqIGluY29taW5n IHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCQkgKi8KKwkJ aWYgKHJlbHBlcnNpc3QgIT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJCUxvZ0xvZ2ljYWxERExN ZXNzYWdlKCJkZXBhcnNlIiwgYWRkcmVzcy5vYmplY3RJZCwgRENUX1RhYmxlRHJvcFN0YXJ0LAor CQkJCQkJCQkgY29tbWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisKKwkJaWYgKHJlbGF0aW9u KQorCQkJdGFibGVfY2xvc2UocmVsYXRpb24sIE5vTG9jayk7CisJfQorCXJldHVybiBQb2ludGVy R2V0RGF0dW0oTlVMTCk7Cit9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jl d3JpdGUKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgdGFibGUgcmV3cml0ZSBjb21tYW5kIGFuZCBs b2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1hbmQg KmNtZDsKKwljaGFyCSAgICpqc29uX3N0cmluZzsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RS SUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2Vy IG1hbmFnZXIiKTsKKworCWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENv bW1hbmQ7CisKKwlBc3NlcnQoY21kICYmIGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUpOworCisJ cmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLmFsdGVyVGFibGUub2JqZWN0 SWQpOworCisJLyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hv c2UgdGFyZ2V0IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFibGUuCisJICoKKwkgKiBXZSB3 aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dl ZCB0YWJsZXMKKwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJz Y3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBs YXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJICogcmV3cml0ZSBt ZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJICovCisJaWYgKHJlbHBlcnNp c3QgIT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwl7CisJCS8qIERlcGFyc2UgdGhlIERETCBjb21t YW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAqLworCQlq c29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJCWlm IChqc29uX3N0cmluZyAhPSBOVUxMKQorCQkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2Ui LCBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwgRENUX1RhYmxlQWx0ZXIsCisJCQkJCQkJCSBq c29uX3N0cmluZywgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCX0KKworCXJldHVybiBQb2lu dGVyR2V0RGF0dW0oTlVMTCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBkZGwgY29tbWFuZCBh bmQgbG9nIGl0LiBUaGlzIGZ1bmN0aW9uCisgKiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGV4ZWN1dGlv biBvZiB0aGUgY29tbWFuZCBidXQgYmVmb3JlIHRoZQorICogdHJhbnNhY3Rpb24gY29tbWl0cy4K KyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJTGlzdENlbGwgICAqbGM7CisJc2xpc3RfaXRlcglpdGVyOworCURlcGFy c2VkQ29tbWFuZFR5cGUgdHlwZTsKKwlPaWQJCQlyZWxpZDsKKwljaGFyCQlyZWxraW5kOworCisJ aWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90 IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJZm9yZWFjaChsYywgY3VycmVu dEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kTGlzdCkKKwl7CisJCWNoYXIJCXJlbHBlcnNpc3Qg PSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ7CisJCUNvbGxlY3RlZENvbW1hbmQgKmNtZCA9IGxm aXJzdChsYyk7CisJCWNoYXIJICAgKmpzb25fc3RyaW5nOworCisJCS8qIFJld3JpdGUgRERMIGhh cyBiZWVuIGhhbmRsZWQgaW4gdGFibGVfcmV3cml0ZSB0cmlnZ2VyICovCisJCWlmIChjbWQtPmQu YWx0ZXJUYWJsZS5yZXdyaXRlKQorCQl7CisJCQlSZW5hbWVTdG10ICpyZW5hbWVTdG10ID0gKFJl bmFtZVN0bXQgKikgY21kLT5wYXJzZXRyZWU7CisKKwkJCWlmIChyZW5hbWVTdG10ICYmIHJlbmFt ZVN0bXQtPnJlbGF0aW9uVHlwZSAhPSBPQkpFQ1RfVFlQRSAmJgorCQkJCXJlbmFtZVN0bXQtPnJl bGF0aW9uVHlwZSAhPSBPQkpFQ1RfVEFCTEUpCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAo Y21kLT50eXBlID09IFNDVF9TaW1wbGUgJiYKKwkJCSFPaWRJc1ZhbGlkKGNtZC0+ZC5zaW1wbGUu YWRkcmVzcy5vYmplY3RJZCkpCisJCQljb250aW51ZTsKKworCQlpZiAoY21kLT50eXBlID09IFND VF9BbHRlclRhYmxlKQorCQl7CisJCQlyZWxpZCA9IGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElk OworCQkJdHlwZSA9IERDVF9UYWJsZUFsdGVyOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogT25s eSBTQ1RfU2ltcGxlIGZvciBub3cgKi8KKwkJCXJlbGlkID0gY21kLT5kLnNpbXBsZS5hZGRyZXNz Lm9iamVjdElkOworCQkJdHlwZSA9IERDVF9TaW1wbGVDbWQ7CisJCX0KKworCQlyZWxraW5kID0g Z2V0X3JlbF9yZWxraW5kKHJlbGlkKTsKKwkJaWYgKHJlbGtpbmQpCisJCQlyZWxwZXJzaXN0ID0g Z2V0X3JlbF9wZXJzaXN0ZW5jZShyZWxpZCk7CisKKwkJLyoKKwkJICogRG8gbm90IGdlbmVyYXRl IHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhCisJCSAqIHRlbXBv cmFyeSB0YWJsZS4KKwkJICoKKwkJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5s b2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQKKwkJICogdGFibGVzIGNhbiBhbHNvIGJlIGNy ZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcworCQkgKiBtYWtl cyBpdCBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBh bmQgdGhlCisJCSAqIGluY29taW5nIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEg bmV3IHRhYmxlLgorCQkgKi8KKwkJaWYgKHJlbHBlcnNpc3QgIT0gUkVMUEVSU0lTVEVOQ0VfVEVN UCkKKwkJeworCQkJLyoKKwkJCSAqIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9n IGl0IHRvIGFsbG93IGRlY29kaW5nIG9mIHRoZQorCQkJICogc2FtZS4KKwkJCSAqLworCQkJanNv bl9zdHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNlKTsKKworCQkJaWYg KGpzb25fc3RyaW5nICE9IE5VTEwpCisJCQkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2Ui LCByZWxpZCwgdHlwZSwganNvbl9zdHJpbmcsCisJCQkJCQkJCQkgc3RybGVuKGpzb25fc3RyaW5n KSArIDEpOworCQl9CisJfQorCisJc2xpc3RfZm9yZWFjaChpdGVyLCAmKGN1cnJlbnRFdmVudFRy aWdnZXJTdGF0ZS0+U1FMRHJvcExpc3QpKQorCXsKKwkJdm9sYXRpbGUgU1FMRHJvcE9iamVjdCAq b2JqOworCQlEcm9wU3RtdCAgICpzdG10OworCQlFdmVudFRyaWdnZXJEYXRhICp0cmlnZGF0YTsK KwkJY2hhcgkgICAqY29tbWFuZDsKKwkJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlOworCQlj b25zdCBjaGFyICp0bXB0eXBlOworCQlPYmplY3RDbGFzcwlvYmpjbGFzczsKKwkJT2JqZWN0QWRk cmVzcyBvYmphZGRyOworCisJCXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dlckRhdGEgKikgZmNpbmZv LT5jb250ZXh0OworCQlzdG10ID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7CisK KwkJb2JqID0gc2xpc3RfY29udGFpbmVyKFNRTERyb3BPYmplY3QsIG5leHQsIGl0ZXIuY3VyKTsK KwkJb2JqYWRkciA9IG9iai0+YWRkcmVzczsKKwkJb2JqY2xhc3MgPSBnZXRPYmplY3RDbGFzcygm b2JqYWRkcik7CisKKwkJaWYgKHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0YWJsZSIpID09IDAp CisJCQljbWR0eXBlID0gRENUX1RhYmxlRHJvcEVuZDsKKwkJZWxzZSBpZiAob2JqY2xhc3MgPT0g T0NMQVNTX1NDSEVNQSB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfT1BFUkFUT1IgfHwKKwkJ CQkgb2JqY2xhc3MgPT0gT0NMQVNTX09QQ0xBU1MgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNT X09QRkFNSUxZIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19DQVNUIHx8CisJCQkJIG9iamNs YXNzID09IE9DTEFTU19UWVBFIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19UUklHR0VSIHx8 CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19DT05WRVJTSU9OIHx8CisJCQkJIG9iamNsYXNzID09 IE9DTEFTU19QT0xJQ1kgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1JFV1JJVEUgfHwKKwkJ CQkgb2JqY2xhc3MgPT0gT0NMQVNTX0VYVEVOU0lPTiB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xB U1NfRkRXIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19UU0NPTkZJRyB8fAorCQkJCSBvYmpj bGFzcyA9PSBPQ0xBU1NfVFNESUNUIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19UU1RFTVBM QVRFIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19UU1BBUlNFUiB8fAorCQkJCSBvYmpjbGFz cyA9PSBPQ0xBU1NfVFJBTlNGT1JNIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19GT1JFSUdO X1NFUlZFUiB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfQ09MTEFUSU9OIHx8CisJCQkJIG9i amNsYXNzID09IE9DTEFTU19VU0VSX01BUFBJTkcgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNT X0xBTkdVQUdFIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19TVEFUSVNUSUNfRVhUIHx8CisJ CQkJIG9iamNsYXNzID09IE9DTEFTU19BTSB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBl LCAiZm9yZWlnbiB0YWJsZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwg ImluZGV4IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAic2VxdWVuY2Ui KSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ2aWV3IikgPT0gMCB8fAor CQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiZnVuY3Rpb24iKSA9PSAwIHx8CisJCQkJIHN0 cmNtcChvYmotPm9iamVjdHR5cGUsICJtYXRlcmlhbGl6ZWQgdmlldyIpID09IDAgfHwKKwkJCQkg c3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInByb2NlZHVyZSIpID09IDAgfHwKKwkJCQkgc3RyY21w KG9iai0+b2JqZWN0dHlwZSwgInJvdXRpbmUiKSA9PSAwKQorCQkJY21kdHlwZSA9IERDVF9PYmpl Y3REcm9wOworCQllbHNlCisJCQljb250aW51ZTsKKworCQkvKiBDaGFuZ2UgZm9yZWlnbi1kYXRh IHdyYXBwZXIgdG8gZm9yZWlnbiBkYXRhIHdyYXBwZXIgKi8KKwkJaWYgKHN0cm5jbXAob2JqLT5v YmplY3R0eXBlLCAiZm9yZWlnbi1kYXRhIHdyYXBwZXIiLCAyMCkgPT0gMCkKKwkJeworCQkJdG1w dHlwZSA9IHBzdHJkdXAoImZvcmVpZ24gZGF0YSB3cmFwcGVyIik7CisJCQljb21tYW5kID0gZGVw YXJzZV9kcm9wX2NvbW1hbmQob2JqLT5vYmppZGVudGl0eSwgdG1wdHlwZSwKKwkJCQkJCQkJCQkg ICBzdG10LT5iZWhhdmlvcik7CisJCX0KKworCQkvKiBDaGFuZ2Ugc3RhdGlzdGljcyBvYmplY3Qg dG8gc3RhdGlzdGljcyAqLworCQllbHNlIGlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgInN0 YXRpc3RpY3Mgb2JqZWN0IiwKKwkJCQkJCSBzdHJsZW4oInN0YXRpc3RpY3Mgb2JqZWN0IikpID09 IDApCisJCXsKKwkJCXRtcHR5cGUgPSBwc3RyZHVwKCJzdGF0aXN0aWNzIik7CisJCQljb21tYW5k ID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQob2JqLT5vYmppZGVudGl0eSwgdG1wdHlwZSwKKwkJCQkJ CQkJCQkgICBzdG10LT5iZWhhdmlvcik7CisJCX0KKworCQkvKgorCQkgKiBPYmplY3QgaWRlbnRp dHkgbmVlZHMgdG8gYmUgbW9kaWZpZWQgdG8gbWFrZSB0aGUgZHJvcCB3b3JrCisJCSAqCisJCSAq IEZST006IDxyb2xlPiBvbiBzZXJ2ZXIgPHNlcnZlcm5hbWU+IFRPICA6IGZvciA8cm9sZT4gc2Vy dmVyCisJCSAqIDxzZXJ2ZXJuYW1lPgorCQkgKgorCQkgKi8KKwkJZWxzZSBpZiAoc3RybmNtcChv YmotPm9iamVjdHR5cGUsICJ1c2VyIG1hcHBpbmciLCAxMikgPT0gMCkKKwkJeworCQkJY2hhcgkg ICAqb25fc2VydmVyOworCisJCQl0bXB0eXBlID0gcGFsbG9jKHN0cmxlbihvYmotPm9iamlkZW50 aXR5KSArIDIpOworCQkJb25fc2VydmVyID0gc3Ryc3RyKG9iai0+b2JqaWRlbnRpdHksICJvbiBz ZXJ2ZXIiKTsKKworCQkJc3ByaW50ZigoY2hhciAqKSB0bXB0eXBlLCAiZm9yICIpOworCQkJc3Ry bmNhdCgoY2hhciAqKSB0bXB0eXBlLCBvYmotPm9iamlkZW50aXR5LCBvbl9zZXJ2ZXIgLSBvYmot Pm9iamlkZW50aXR5KTsKKwkJCXN0cmNhdCgoY2hhciAqKSB0bXB0eXBlLCBvbl9zZXJ2ZXIgKyAz KTsKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3BfY29tbWFuZCh0bXB0eXBlLCBvYmotPm9iamVj dHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZpb3IpOworCQl9CisJCWVsc2UKKwkJCWNv bW1hbmQgPSBkZXBhcnNlX2Ryb3BfY29tbWFuZChvYmotPm9iamlkZW50aXR5LCBvYmotPm9iamVj dHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZpb3IpOworCisJCWlmIChjb21tYW5kKQor CQkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBvYmotPmFkZHJlc3Mub2JqZWN0SWQs IGNtZHR5cGUsCisJCQkJCQkJCSBjb21tYW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKwl9CisK KwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQorCisKKy8qCisgKiBwdWJsaWNhdGlv bl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgdGFibGUg Y3JlYXRlIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFy c2VfdGFibGVfaW5pdF93cml0ZShQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJCXJlbHBlcnNp c3Q7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kOworCWNoYXIJICAgKmpzb25fc3RyaW5nOworCisJ aWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90 IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJY21kID0gY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKwlBc3NlcnQoY21kKTsKKworCXJlbHBlcnNp c3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZCk7 CisKKwkvKgorCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0 YXJnZXQgdGFibGUgaXMgYSB0ZW1wb3JhcnkKKwkgKiB0YWJsZS4KKwkgKgorCSAqIFdlIHdpbGwg Z2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRh YmxlcworCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmli ZXIgc2lkZS4gVGhpcyBtYWtlcyBpdAorCSAqIHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0 aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkgKiByZXdyaXRlIG1lc3Nh Z2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkgKi8KKwlpZiAocmVscGVyc2lzdCA9 PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwor CisJLyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVj b2Rpbmcgb2YgdGhlIHNhbWUuICovCisJanNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlfY29t bWFuZChjbWQsIGZhbHNlKTsKKworCWlmIChqc29uX3N0cmluZyAhPSBOVUxMKQorCQlMb2dMb2dp Y2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZCwg RENUX1NpbXBsZUNtZCwKKwkJCQkJCQkganNvbl9zdHJpbmcsIHN0cmxlbihqc29uX3N0cmluZykg KyAxKTsKKworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwppbmRleCAyY2MwYWM5ZWIwLi5iNjI4MTI5OTNjIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAgLTM2LDYgKzM2LDcg QEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19j b250cm9sLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCisjaW5jbHVkZSAicmVw bGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIK ICNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24v b3JpZ2luLmgiCkBAIC02MDMsNiArNjA0LDQ2IEBAIGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQogCQkJCQkJCSAgbWVz c2FnZS0+bWVzc2FnZSArIG1lc3NhZ2UtPnByZWZpeF9zaXplKTsKIH0KIAorLyoKKyAqIEhhbmRs ZSBybWdyIExPR0lDQUxERExNU0dfSUQgcmVjb3JkcyBmb3IgRGVjb2RlUmVjb3JkSW50b1Jlb3Jk ZXJCdWZmZXIoKS4KKyAqLwordm9pZAorbG9naWNhbGRkbF9kZWNvZGUoTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpCit7CisJU25hcEJ1aWxkICAqYnVp bGRlciA9IGN0eC0+c25hcHNob3RfYnVpbGRlcjsKKwlYTG9nUmVhZGVyU3RhdGUgKnIgPSBidWYt PnJlY29yZDsKKwlUcmFuc2FjdGlvbklkIHhpZCA9IFhMb2dSZWNHZXRYaWQocik7CisJdWludDgJ CWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyKSAmIH5YTFJfSU5GT19NQVNLOworCVJlcE9yaWdpbklk IG9yaWdpbl9pZCA9IFhMb2dSZWNHZXRPcmlnaW4ocik7CisJeGxfbG9naWNhbF9kZGxfbWVzc2Fn ZSAqbWVzc2FnZTsKKworCWlmIChpbmZvICE9IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJ ZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgUk1fTE9HSUNBTERETE1TR19JRCByZWNvcmQgdHlwZTog JXUiLCBpbmZvKTsKKworCVJlb3JkZXJCdWZmZXJQcm9jZXNzWGlkKGN0eC0+cmVvcmRlciwgWExv Z1JlY0dldFhpZChyKSwgYnVmLT5vcmlncHRyKTsKKworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2 ZSBzbmFwc2hvdCBvciB3ZSBhcmUganVzdCBmYXN0LWZvcndhcmRpbmcsIHRoZXJlIGlzIG5vCisJ ICogcG9pbnQgaW4gZGVjb2RpbmcgZGRsIG1lc3NhZ2VzLgorCSAqLworCWlmIChTbmFwQnVpbGRD dXJyZW50U3RhdGUoYnVpbGRlcikgPCBTTkFQQlVJTERfRlVMTF9TTkFQU0hPVCB8fAorCQljdHgt PmZhc3RfZm9yd2FyZCkKKwkJcmV0dXJuOworCisJbWVzc2FnZSA9ICh4bF9sb2dpY2FsX2RkbF9t ZXNzYWdlICopIFhMb2dSZWNHZXREYXRhKHIpOworCisJaWYgKG1lc3NhZ2UtPmRiSWQgIT0gY3R4 LT5zbG90LT5kYXRhLmRhdGFiYXNlIHx8CisJCUZpbHRlckJ5T3JpZ2luKGN0eCwgb3JpZ2luX2lk KSkKKwkJcmV0dXJuOworCisJaWYgKFNuYXBCdWlsZFByb2Nlc3NDaGFuZ2UoYnVpbGRlciwgeGlk LCBidWYtPm9yaWdwdHIpKQorCQlSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKGN0eC0+cmVv cmRlciwgeGlkLCBidWYtPmVuZHB0ciwKKwkJCQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlLCAvKiBm aXJzdCBwYXJ0IG9mIG1lc3NhZ2UgaXMgcHJlZml4ICovCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVz c2FnZV9zaXplLAorCQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2UgKyBtZXNzYWdlLT5wcmVmaXhf c2l6ZSwKKwkJCQkJCQkJCSBtZXNzYWdlLT5yZWxpZCwgbWVzc2FnZS0+Y21kdHlwZSk7Cit9CisK IC8qCiAgKiBDb25zb2xpZGF0ZWQgY29tbWl0IHJlY29yZCBoYW5kbGluZyBiZXR3ZWVuIHRoZSBk aWZmZXJlbnQgZm9ybSBvZiBjb21taXQKICAqIHJlY29yZHMuCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvbG9naWNhbC5jCmluZGV4IDYyNWE3ZjQyNzMuLjIzYTg4OTVhYzcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCkBAIC0zMyw2ICszMyw3IEBA CiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBn c3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJy ZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC03Myw2ICs3NCwxMCBAQCBzdGF0aWMg dm9pZCB0cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiBzdGF0aWMgdm9pZCBtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZl ciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkgICBYTG9nUmVjUHRyIG1l c3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWwsCiAJCQkJCQkJICAgY29uc3QgY2hhciAqcHJl Zml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9p ZCBkZGxfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAq dHhuLAorCQkJCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGNvbnN0IGNoYXIgKnByZWZp eCwKKwkJCQkJCQkJICBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJ CQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIC8qIHN0 cmVhbWluZyBjYWxsYmFja3MgKi8KIHN0YXRpYyB2b2lkIHN0cmVhbV9zdGFydF9jYl93cmFwcGVy KFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCkBAIC05MCw2ICs5 NSwxMSBAQCBzdGF0aWMgdm9pZCBzdHJlYW1fY2hhbmdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZl ciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bgogc3RhdGljIHZvaWQgc3RyZWFtX21lc3Nh Z2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhu LAogCQkJCQkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWws CiAJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0 IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgc3RyZWFtX2RkbF9jYl93cmFwcGVyKFJlb3Jk ZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJIFhMb2dS ZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJ CQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJ IFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyB2b2lkIHN0 cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRp b25zW10sIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSk7CiAKQEAgLTIxOCw2ICsyMjgsNyBA QCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAlj dHgtPnJlb3JkZXItPmFwcGx5X3RydW5jYXRlID0gdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAljdHgt PnJlb3JkZXItPmNvbW1pdCA9IGNvbW1pdF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+bWVz c2FnZSA9IG1lc3NhZ2VfY2Jfd3JhcHBlcjsKKwljdHgtPnJlb3JkZXItPmRkbCA9IGRkbF9jYl93 cmFwcGVyOwogCiAJLyoKIAkgKiBUbyBzdXBwb3J0IHN0cmVhbWluZywgd2UgcmVxdWlyZSBzdGFy dC9zdG9wL2Fib3J0L2NvbW1pdC9jaGFuZ2UKQEAgLTIzNCw2ICsyNDUsNyBAQCBTdGFydHVwRGVj b2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAkJKGN0eC0+Y2FsbGJh Y2tzLnN0cmVhbV9jb21taXRfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVh bV9jaGFuZ2VfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9tZXNzYWdl X2NiICE9IE5VTEwpIHx8CisJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsX2NiICE9IE5VTEwp IHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fdHJ1bmNhdGVfY2IgIT0gTlVMTCk7CiAKIAkv KgpAQCAtMjUxLDYgKzI2Myw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0 X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+c3RyZWFtX2NvbW1pdCA9IHN0cmVhbV9j b21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9jaGFuZ2UgPSBzdHJlYW1f Y2hhbmdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fbWVzc2FnZSA9IHN0cmVh bV9tZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVyLT5zdHJlYW1fZGRsID0gc3RyZWFt X2RkbF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX3RydW5jYXRlID0gc3RyZWFt X3RydW5jYXRlX2NiX3dyYXBwZXI7CiAKIApAQCAtMTIyMCw2ICsxMjMzLDQ0IEBAIG1lc3NhZ2Vf Y2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog CWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKIH0KIAorc3RhdGlj IHZvaWQKK2RkbF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCisJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJICBjb25zdCBj aGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJ CQkgIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJ TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4ID0gY2FjaGUtPnByaXZhdGVfZGF0YTsKKwlMb2dp Y2FsRXJyb3JDYWxsYmFja1N0YXRlIHN0YXRlOworCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNh bGxiYWNrOworCisJQXNzZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7CisKKwlpZiAoY3R4LT5jYWxs YmFja3MuZGRsX2NiID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBp bmZvIG9uIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0 YXRlLmNhbGxiYWNrX25hbWUgPSAiZGRsIjsKKwlzdGF0ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNz YWdlX2xzbjsKKwllcnJjYWxsYmFjay5jYWxsYmFjayA9IG91dHB1dF9wbHVnaW5fZXJyb3JfY2Fs bGJhY2s7CisJZXJyY2FsbGJhY2suYXJnID0gKHZvaWQgKikgJnN0YXRlOworCWVycmNhbGxiYWNr LnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0g JmVycmNhbGxiYWNrOworCisJLyogc2V0IG91dHB1dCBzdGF0ZSAqLworCWN0eC0+YWNjZXB0X3dy aXRlcyA9IHRydWU7CisJY3R4LT53cml0ZV94aWQgPSB0eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDog SW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJY3R4LT53cml0ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNu OworCisJLyogZG8gdGhlIGFjdHVhbCB3b3JrOiBjYWxsIGNhbGxiYWNrICovCisJY3R4LT5jYWxs YmFja3MuZGRsX2NiKGN0eCwgdHhuLCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxpZCwgY21kdHlw ZSwKKwkJCQkJCQkJIG1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3AgdGhlIGVycm9y IGNvbnRleHQgc3RhY2sgKi8KKwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJl dmlvdXM7Cit9CisKIHN0YXRpYyB2b2lkCiBzdHJlYW1fc3RhcnRfY2Jfd3JhcHBlcihSZW9yZGVy QnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJWExvZ1JlY1B0ciBm aXJzdF9sc24pCkBAIC0xNTM1LDYgKzE1ODYsNDggQEAgc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBl cihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCWVycm9yX2Nv bnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKIH0KIAorc3RhdGljIHZvaWQKK3N0 cmVhbV9kZGxfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAorCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCSBjb25zdCBj aGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJ CQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sK KwlMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOworCUxv Z2ljYWxFcnJvckNhbGxiYWNrU3RhdGUgc3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJy Y2FsbGJhY2s7CisKKwlBc3NlcnQoIWN0eC0+ZmFzdF9mb3J3YXJkKTsKKworCS8qIFdlJ3JlIG9u bHkgc3VwcG9zZWQgdG8gY2FsbCB0aGlzIHdoZW4gc3RyZWFtaW5nIGlzIHN1cHBvcnRlZC4gKi8K KwlBc3NlcnQoY3R4LT5zdHJlYW1pbmcpOworCisJLyogdGhpcyBjYWxsYmFjayBpcyBvcHRpb25h bCAqLworCWlmIChjdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsX2NiID09IE5VTEwpCisJCXJldHVy bjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRoZSBlcnJvciBjb250ZXh0IHN0YWNr ICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNhbGxiYWNrX25hbWUgPSAic3RyZWFtX2Rk bCI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisJZXJyY2FsbGJhY2su Y2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxiYWNrOworCWVycmNhbGxiYWNrLmFy ZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRl eHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKworCS8qIHNl dCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0ZXMgPSB0cnVlOworCWN0eC0+d3Jp dGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IEludmFsaWRUcmFuc2FjdGlvbklkOwor CWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKworCS8qIGRvIHRoZSBhY3R1YWwg d29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxfY2IoY3R4 LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLAorCQkJCQkJCQkJCWNtZHR5cGUsIG1l c3NhZ2Vfc2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3RhY2sg Ki8KKwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7Cit9CisKIHN0 YXRpYyB2b2lkCiBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNo ZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJICAgaW50IG5yZWxhdGlvbnMsIFJlbGF0 aW9uIHJlbGF0aW9uc1tdLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24u YnVpbGQKaW5kZXggMDc3NTZlOTBhZS4uZGFiOWYzYWZlYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCkBAIC0yLDYgKzIsNyBAQAogCiBiYWNrZW5kX3Nv dXJjZXMgKz0gZmlsZXMoCiAgICdkZGxtZXNzYWdlLmMnLAorICAnZGRsdHJpZ2dlci5jJywKICAg J2RlY29kZS5jJywKICAgJ2xhdW5jaGVyLmMnLAogICAnbG9naWNhbC5jJywKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwppbmRleCBmNWYyYmMyNGQ4Li4zODE3NWRjMDMwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKKysrIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCkBAIC02NjMsNiArNjYzLDQ3 IEBAIGxvZ2ljYWxyZXBfd3JpdGVfbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25J ZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAogCXBxX3NlbmRieXRlcyhvdXQsIG1lc3NhZ2UsIHN6KTsK IH0KIAorLyoKKyAqIFJlYWQgRERMIE1FU1NBR0UgZnJvbSBzdHJlYW0KKyAqLworY2hhciAqCits b2dpY2FscmVwX3JlYWRfZGRsKFN0cmluZ0luZm8gaW4sIFhMb2dSZWNQdHIgKmxzbiwKKwkJCQkJ CSAgIGNvbnN0IGNoYXIgKipwcmVmaXgsCisJCQkJCQkgICBTaXplICpzeikKK3sKKwl1aW50OCBm bGFnczsKKwljaGFyICptc2c7CisKKwlmbGFncyA9IHBxX2dldG1zZ2ludChpbiwgMSk7CisJaWYg KGZsYWdzICE9IDApCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgZmxhZ3MgJXUgaW4gZGRs IG1lc3NhZ2UiLCBmbGFncyk7CisKKwkqbHNuID0gcHFfZ2V0bXNnaW50NjQoaW4pOworCSpwcmVm aXggPSBwcV9nZXRtc2dzdHJpbmcoaW4pOworCSpzeiA9IHBxX2dldG1zZ2ludChpbiwgNCk7CisJ bXNnID0gKGNoYXIgKikgcHFfZ2V0bXNnYnl0ZXMoaW4sICpzeik7CisKKwlyZXR1cm4gbXNnOwor fQorCisvKgorICogV3JpdGUgRERMIE1FU1NBR0UgdG8gc3RyZWFtCisgKi8KK3ZvaWQKK2xvZ2lj YWxyZXBfd3JpdGVfZGRsKFN0cmluZ0luZm8gb3V0LCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQlj b25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJdWlu dDgJCWZsYWdzID0gMDsKKworCXBxX3NlbmRieXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX0RETCk7 CisKKwlwcV9zZW5kaW50OChvdXQsIGZsYWdzKTsKKwlwcV9zZW5kaW50NjQob3V0LCBsc24pOwor CXBxX3NlbmRzdHJpbmcob3V0LCBwcmVmaXgpOworCXBxX3NlbmRpbnQzMihvdXQsIHN6KTsKKwlw cV9zZW5kYnl0ZXMob3V0LCBtZXNzYWdlLCBzeik7Cit9CisKIC8qCiAgKiBXcml0ZSByZWxhdGlv biBkZXNjcmlwdGlvbiB0byB0aGUgb3V0cHV0IHN0cmVhbS4KICAqLwpAQCAtMTIxOSw2ICsxMjYw LDggQEAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uKQog CQkJcmV0dXJuICJUWVBFIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfTUVTU0FHRToKIAkJCXJl dHVybiAiTUVTU0FHRSI7CisJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX0RETDoKKwkJCXJldHVybiAi RERMIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfQkVHSU5fUFJFUEFSRToKIAkJCXJldHVybiAi QkVHSU4gUFJFUEFSRSI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkU6CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4IGI1Njdi OGI1OWUuLjZkNDQxYTU5NjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSAibGliL2JpbmFy eWhlYXAuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNp bmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24v bG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKICNpbmNs dWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCkBAIC01MTMsNiArNTE0LDE0IEBAIFJlb3JkZXJCdWZm ZXJSZXR1cm5DaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNo YW5nZSwKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UpOwogCQkJY2hhbmdlLT5k YXRhLm1zZy5tZXNzYWdlID0gTlVMTDsKIAkJCWJyZWFrOworCQljYXNlIFJFT1JERVJfQlVGRkVS X0NIQU5HRV9EREw6CisJCQlpZiAoY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXggIT0gTlVMTCkKKwkJ CQlwZnJlZShjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCk7CisJCQljaGFuZ2UtPmRhdGEuZGRsLnBy ZWZpeCA9IE5VTEw7CisJCQlpZiAoY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlICE9IE5VTEwpCisJ CQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlKTsKKwkJCWNoYW5nZS0+ZGF0YS5kZGwu bWVzc2FnZSA9IE5VTEw7CisJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0Vf SU5WQUxJREFUSU9OOgogCQkJaWYgKGNoYW5nZS0+ZGF0YS5pbnZhbC5pbnZhbGlkYXRpb25zKQog CQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5pbnZhbC5pbnZhbGlkYXRpb25zKTsKQEAgLTg5MSw2ICs5 MDAsMzYgQEAgUmVvcmRlckJ1ZmZlclF1ZXVlTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgVHJh bnNhY3Rpb25JZCB4aWQsCiAJfQogfQogCisvKgorICogQSB0cmFuc2FjdGlvbmFsIERETCBtZXNz YWdlIGlzIHF1ZXVlZCB0byBiZSBwcm9jZXNzZWQgdXBvbiBjb21taXQuCisgKi8KK3ZvaWQKK1Jl b3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9u SWQgeGlkLAorCQkJCQkJCSBYTG9nUmVjUHRyIGxzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJ CQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSwKKwkJCQkJCQkgT2lk IHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUpCit7CisJTWVtb3J5Q29udGV4dCBv bGRjb250ZXh0OworCVJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZTsKKworCUFzc2VydChUcmFu c2FjdGlvbklkSXNWYWxpZCh4aWQpKTsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8ocmItPmNvbnRleHQpOworCisJY2hhbmdlID0gUmVvcmRlckJ1ZmZlckdldENoYW5nZShy Yik7CisJY2hhbmdlLT5hY3Rpb24gPSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOworCWNoYW5n ZS0+ZGF0YS5kZGwucHJlZml4ID0gcHN0cmR1cChwcmVmaXgpOworCWNoYW5nZS0+ZGF0YS5kZGwu cmVsaWQgPSByZWxpZDsKKwljaGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUgPSBjbWR0eXBlOworCWNo YW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplID0gbWVzc2FnZV9zaXplOworCWNoYW5nZS0+ZGF0 YS5kZGwubWVzc2FnZSA9IHBhbGxvYyhtZXNzYWdlX3NpemUpOworCW1lbWNweShjaGFuZ2UtPmRh dGEuZGRsLm1lc3NhZ2UsIG1lc3NhZ2UsIG1lc3NhZ2Vfc2l6ZSk7CisKKwlSZW9yZGVyQnVmZmVy UXVldWVDaGFuZ2UocmIsIHhpZCwgbHNuLCBjaGFuZ2UsIGZhbHNlKTsKKworCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKwogLyoKICAqIEFzc2VydFRYTkxzbk9yZGVyCiAg KgkJVmVyaWZ5IExTTiBvcmRlcmluZyBvZiB0cmFuc2FjdGlvbiBsaXN0cyBpbiB0aGUgcmVvcmRl cmJ1ZmZlcgpAQCAtMTk5OSw2ICsyMDM4LDI5IEBAIFJlb3JkZXJCdWZmZXJBcHBseU1lc3NhZ2Uo UmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJY2hhbmdlLT5k YXRhLm1zZy5tZXNzYWdlKTsKIH0KIAorLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgUmVvcmRl ckJ1ZmZlclByb2Nlc3NUWE4gZm9yIGFwcGx5aW5nIHRoZSBEREwgbWVzc2FnZS4KKyAqLworc3Rh dGljIGlubGluZSB2b2lkCitSZW9yZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKFJlb3JkZXJCdWZm ZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJIFJlb3JkZXJCdWZmZXJDaGFu Z2UgKmNoYW5nZSwgYm9vbCBzdHJlYW1pbmcpCit7CisJaWYgKHN0cmVhbWluZykKKwkJcmItPnN0 cmVhbV9kZGwocmIsIHR4biwgY2hhbmdlLT5sc24sCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRs LnByZWZpeCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGwucmVsaWQsCisJCQkJCQkJICBjaGFu Z2UtPmRhdGEuZGRsLmNtZHR5cGUsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vf c2l6ZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZSk7CisJZWxzZQorCQlyYi0+ ZGRsKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsLnByZWZp eCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCwKKwkJCQkJICAgY2hhbmdlLT5kYXRh LmRkbC5jbWR0eXBlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSwKKwkJ CQkJICAgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlKTsKK30KKwogLyoKICAqIEZ1bmN0aW9uIHRv IHN0b3JlIHRoZSBjb21tYW5kIGlkIGFuZCBzbmFwc2hvdCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJy ZW50CiAgKiBzdHJlYW0gc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgd2hpbGUgc2VuZGlu ZyB0aGUgbmV4dCBzdHJlYW0uCkBAIC0yMzc5LDYgKzI0NDEsMTAgQEAgUmVvcmRlckJ1ZmZlclBy b2Nlc3NUWE4oUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJ UmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UsIHN0cmVhbWluZyk7CiAJ CQkJCWJyZWFrOwogCisJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOgorCQkJCQlS ZW9yZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsK KwkJCQkJYnJlYWs7CisKIAkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJ T046CiAJCQkJCS8qIEV4ZWN1dGUgdGhlIGludmFsaWRhdGlvbiBtZXNzYWdlcyBsb2NhbGx5ICov CiAJCQkJCVJlb3JkZXJCdWZmZXJFeGVjdXRlSW52YWxpZGF0aW9ucyhjaGFuZ2UtPmRhdGEuaW52 YWwubmludmFsaWRhdGlvbnMsCkBAIC0zODAxLDYgKzM4NjcsMzkgQEAgUmVvcmRlckJ1ZmZlclNl cmlhbGl6ZUNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog CQkJCQkgICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSk7CiAJCQkJZGF0YSArPSBjaGFu Z2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZTsKIAorCQkJCWJyZWFrOworCQkJfQorCQljYXNlIFJF T1JERVJfQlVGRkVSX0NIQU5HRV9EREw6CisJCQl7CisJCQkJY2hhcgkgICAqZGF0YTsKKwkJCQlT aXplCQlwcmVmaXhfc2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCkgKyAxOwor CisJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSAr CisJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihPaWQpICsgc2l6ZW9mKGludCkgKyBzaXplb2Yo U2l6ZSk7CisJCQkJUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZVJlc2VydmUocmIsIHN6KTsKKworCQkJ CWRhdGEgPSAoKGNoYXIgKikgcmItPm91dGJ1ZikgKyBzaXplb2YoUmVvcmRlckJ1ZmZlckRpc2tD aGFuZ2UpOworCisJCQkJLyogbWlnaHQgaGF2ZSBiZWVuIHJlYWxsb2NhdGVkIGFib3ZlICovCisJ CQkJb25kaXNrID0gKFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlICopIHJiLT5vdXRidWY7CisKKwkJ CQkvKiB3cml0ZSB0aGUgcHJlZml4LCByZWxpZCBhbmQgY21kdHlwZSBpbmNsdWRpbmcgdGhlIHNp emUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJnByZWZpeF9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJ CWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCAmY2hhbmdlLT5kYXRhLmRk bC5yZWxpZCwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVt Y3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUsIHNpemVvZihEZXBhcnNlZENvbW1h bmRUeXBlKSk7CisJCQkJZGF0YSArPSBzaXplb2YoaW50KTsKKwkJCQltZW1jcHkoZGF0YSwgY2hh bmdlLT5kYXRhLmRkbC5wcmVmaXgsIHByZWZpeF9zaXplKTsKKwkJCQlkYXRhICs9IHByZWZpeF9z aXplOworCisJCQkJLyogd3JpdGUgdGhlIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSBzaXplICovCisJ CQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSwgc2l6ZW9mKFNp emUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJCQltZW1jcHkoZGF0YSwgY2hhbmdl LT5kYXRhLmRkbC5tZXNzYWdlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6 ZSk7CisJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZTsKKwogCQkJCWJy ZWFrOwogCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CkBA IC00MTE1LDYgKzQyMTQsMTUgQEAgUmVvcmRlckJ1ZmZlckNoYW5nZVNpemUoUmVvcmRlckJ1ZmZl ckNoYW5nZSAqY2hhbmdlKQogCQkJCXN6ICs9IHByZWZpeF9zaXplICsgY2hhbmdlLT5kYXRhLm1z Zy5tZXNzYWdlX3NpemUgKwogCQkJCQlzaXplb2YoU2l6ZSkgKyBzaXplb2YoU2l6ZSk7CiAKKwkJ CQlicmVhazsKKwkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOgorCQkJewor CQkJCVNpemUJCXByZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4KSAr IDE7CisKKwkJCQlzeiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9z aXplICsKKwkJCQkJc2l6ZW9mKFNpemUpICsgc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBz aXplb2YoRGVwYXJzZWRDb21tYW5kVHlwZSk7CisKIAkJCQlicmVhazsKIAkJCX0KIAkJY2FzZSBS RU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgpAQCAtNDM5Miw2ICs0NTAwLDMzIEBA IFJlb3JkZXJCdWZmZXJSZXN0b3JlQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKIAkJ CQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplOwogCisJCQkJYnJlYWs7CisJ CQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETDoKKwkJCXsKKwkJCQlTaXplCQlw cmVmaXhfc2l6ZTsKKworCQkJCS8qIHJlYWQgcHJlZml4ICovCisJCQkJbWVtY3B5KCZwcmVmaXhf c2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJ CQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5kZGwucmVsaWQsIGRhdGEsIHNpemVvZihPaWQpKTsKKwkJ CQlkYXRhICs9IHNpemVvZihPaWQpOworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLmRkbC5jbWR0 eXBlLCBkYXRhLCBzaXplb2YoRGVwYXJzZWRDb21tYW5kVHlwZSkpOworCQkJCWRhdGEgKz0gc2l6 ZW9mKGludCk7CisJCQkJY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXggPSBNZW1vcnlDb250ZXh0QWxs b2MocmItPmNvbnRleHQsIHByZWZpeF9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRhLmRk bC5wcmVmaXgsIGRhdGEsIHByZWZpeF9zaXplKTsKKwkJCQlBc3NlcnQoY2hhbmdlLT5kYXRhLmRk bC5wcmVmaXhbcHJlZml4X3NpemUgLSAxXSA9PSAnXDAnKTsKKwkJCQlkYXRhICs9IHByZWZpeF9z aXplOworCisJCQkJLyogcmVhZCB0aGUgbWVzc2FnZSAqLworCQkJCW1lbWNweSgmY2hhbmdlLT5k YXRhLm1zZy5tZXNzYWdlX3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBz aXplb2YoU2l6ZSk7CisJCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTWVtb3J5Q29udGV4 dEFsbG9jKHJiLT5jb250ZXh0LAorCQkJCQkJCQkJCQkJCQkJICBjaGFuZ2UtPmRhdGEubXNnLm1l c3NhZ2Vfc2l6ZSk7CisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSwgZGF0YSwK KwkJCQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCWRhdGEgKz0gY2hh bmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CisKIAkJCQlicmVhazsKIAkJCX0KIAkJY2FzZSBS RU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggOTY3NzJlNGQ3My4uY2E5MjU4MTEzYSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0xNTYsNiArMTU2LDcgQEAKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNs dWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAicGFyc2VyL2FuYWx5emUuaCIK ICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIK ICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgiCkBAIC0xODAsNyArMTgxLDEwIEBACiAj aW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgi CisjaW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisj aW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9jYXRjYWNoZS5oIgpAQCAtMjUw Nyw2ICsyNTExLDIzOCBAQCBhcHBseV9oYW5kbGVfdHJ1bmNhdGUoU3RyaW5nSW5mbyBzKQogCWVu ZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiB9CiAKKy8qCisgKiBTcGVjaWFsIGhhbmRsaW5nIGZvciBD UkVBVEUgVEFCTEUgQVMgYW5kIFNFTEVDVCBJTlRPCisgKiB0byBub3QgcG9wdWxhdGUgZGF0YSBm cm9tIHRoZSBzb3VyY2UgdGFibGUgb24gdGhlIHN1YnNjcmliZXIuCisgKiBBbGxvdyB0aGUgZGF0 YSB0byBiZSByZXBsaWNhdGVkIHRocm91Z2ggSU5TRVJUcyBvbiB0aGUgcHVibGlzaGVyLgorICov CitzdGF0aWMgdm9pZAorcHJlcHJvY2Vzc19jcmVhdGVfdGFibGUoUmF3U3RtdCAqY29tbWFuZCkK K3sKKwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisKKwljb21tYW5kVGFnID0gQ3JlYXRlQ29tbWFu ZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCXN3aXRjaCAoY29tbWFuZFRhZykKKwl7CisJCWNh c2UgQ01EVEFHX0NSRUFURV9UQUJMRV9BUzoKKwkJY2FzZSBDTURUQUdfU0VMRUNUX0lOVE86CisJ CQl7CisJCQkJQ3JlYXRlVGFibGVBc1N0bXQgKmNhc3RtdCA9IChDcmVhdGVUYWJsZUFzU3RtdCAq KSBjb21tYW5kLT5zdG10OworCisJCQkJaWYgKGNhc3RtdC0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFC TEUpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3JjZSBza2lwcGluZyBkYXRhIHBvcHVsYXRp b24gdG8gYXZvaWQgZGF0YQorCQkJCQkgKiBpbmNvbnNpc3RlbmN5LiBEYXRhIHNob3VsZCBiZSBy ZXBsaWNhdGVkIGZyb20gdGhlCisJCQkJCSAqIHB1Ymxpc2hlciBpbnN0ZWFkLgorCQkJCQkgKi8K KwkJCQkJY2FzdG10LT5pbnRvLT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJYnJl YWs7CisJCWNhc2UgQ01EVEFHX1NFTEVDVDoKKwkJCXsKKwkJCQlTZWxlY3RTdG10ICpzc3RtdCA9 IChTZWxlY3RTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisKKwkJCQlpZiAoc3N0bXQtPmludG9DbGF1 c2UgIT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZvcmNlIHNraXBwaW5nIGRhdGEg cG9wdWxhdGlvbiB0byBhdm9pZCBkYXRhCisJCQkJCSAqIGluY29uc2lzdGVuY3kuIERhdGEgc2hv dWxkIGJlIHJlcGxpY2F0ZWQgZnJvbSB0aGUKKwkJCQkJICogcHVibGlzaGVyIGluc3RlYWQuCisJ CQkJCSAqLworCQkJCQlzc3RtdC0+aW50b0NsYXVzZS0+c2tpcERhdGEgPSB0cnVlOworCQkJCX0K KwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorfQorCisvKgorICog SGFuZGxlIENSRUFURSBUQUJMRSBjb21tYW5kCisgKgorICogQ2FsbCBBZGRTdWJzY3JpcHRpb25S ZWxTdGF0ZSBmb3IgQ1JFQVRFIExBQkVMIGNvbW1hbmQgdG8gc2V0IHRoZSByZWxzdGF0ZSB0bwor ICogU1VCUkVMX1NUQVRFX1JFQURZIHNvIERNTCBjaGFuZ2VzIG9uIHRoaXMgbmV3IHRhYmxlIGNh biBiZSByZXBsaWNhdGVkIHdpdGhvdXQKKyAqIGhhdmluZyB0byBtYW51YWxseSBydW4gImFsdGVy IHN1YnNjcmlwdGlvbiAuLi4gcmVmcmVzaCBwdWJsaWNhdGlvbiIKKyAqLworc3RhdGljIHZvaWQK K2hhbmRsZV9jcmVhdGVfdGFibGUoUmF3U3RtdCAqY29tbWFuZCkKK3sKKwlDb21tYW5kVGFnCWNv bW1hbmRUYWc7CisJUmFuZ2VWYXIgICAqcnYgPSBOVUxMOworCU9pZAkJCXJlbGlkOworCU9pZAkJ CXJlbG5hbWVzcGFjZSA9IEludmFsaWRPaWQ7CisJQ3JlYXRlU3RtdCAqY3N0bXQ7CisJY2hhcgkg ICAqc2NoZW1hbmFtZSA9IE5VTEw7CisJY2hhcgkgICAqcmVsbmFtZSA9IE5VTEw7CisKKwljb21t YW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKwljc3RtdCA9IChD cmVhdGVTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisJcnYgPSBjc3RtdC0+cmVsYXRpb247CisKKwlp ZiAoY29tbWFuZFRhZyA9PSBDTURUQUdfQ1JFQVRFX1RBQkxFKQorCXsKKwkJY3N0bXQgPSAoQ3Jl YXRlU3RtdCAqKSBjb21tYW5kLT5zdG10OworCQlydiA9IGNzdG10LT5yZWxhdGlvbjsKKwl9CisJ ZWxzZQorCXsKKwkJcmV0dXJuOworCX0KKworCWlmICghcnYpCisJCXJldHVybjsKKworCXNjaGVt YW5hbWUgPSBydi0+c2NoZW1hbmFtZTsKKwlyZWxuYW1lID0gcnYtPnJlbG5hbWU7CisKKwlpZiAo c2NoZW1hbmFtZSAhPSBOVUxMKQorCQlyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX29pZChz Y2hlbWFuYW1lLCBmYWxzZSk7CisKKwlpZiAocmVsbmFtZXNwYWNlICE9IEludmFsaWRPaWQpCisJ CXJlbGlkID0gZ2V0X3JlbG5hbWVfcmVsaWQocmVsbmFtZSwgcmVsbmFtZXNwYWNlKTsKKwllbHNl CisJCXJlbGlkID0gUmVsbmFtZUdldFJlbGlkKHJlbG5hbWUpOworCisJaWYgKE9pZElzVmFsaWQo cmVsaWQpKQorCXsKKwkJQWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUoTXlTdWJzY3JpcHRpb24tPm9p ZCwgcmVsaWQsCisJCQkJCQkJCVNVQlJFTF9TVEFURV9SRUFEWSwKKwkJCQkJCQkJSW52YWxpZFhM b2dSZWNQdHIpOworCQllcmVwb3J0KERFQlVHMSwKKwkJCQkoZXJybXNnX2ludGVybmFsKCJ0YWJs ZSBcIiVzXCIgYWRkZWQgdG8gc3Vic2NyaXB0aW9uIFwiJXNcIiIsCisJCQkJCQkJCSByZWxuYW1l LCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwl9Cit9CisKKy8qCisgKiBIYW5kbGUgRERMIHJl cGxpY2F0aW9uIG1lc3NhZ2VzLgorICovCitzdGF0aWMgdm9pZAorYXBwbHlfaGFuZGxlX2RkbChT dHJpbmdJbmZvIHMpCit7CisJWExvZ1JlY1B0cglsc247CisJY29uc3QgY2hhciAqcHJlZml4ID0g TlVMTDsKKwljaGFyCSAgICptZXNzYWdlID0gTlVMTDsKKwljaGFyCSAgICpkZGxfY29tbWFuZDsK KwlTaXplCQlzejsKKwlMaXN0CSAgICpwYXJzZXRyZWVfbGlzdDsKKwlMaXN0Q2VsbCAgICpwYXJz ZXRyZWVfaXRlbTsKKwlEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyOworCU1lbW9yeUNvbnRleHQgb2xk Y29udGV4dDsKKwljb25zdCBjaGFyICpzYXZlX2RlYnVnX3F1ZXJ5X3N0cmluZyA9IGRlYnVnX3F1 ZXJ5X3N0cmluZzsKKworCW1lc3NhZ2UgPSBsb2dpY2FscmVwX3JlYWRfZGRsKHMsICZsc24sICZw cmVmaXgsICZzeik7CisKKwkvKiBNYWtlIHN1cmUgd2UgYXJlIGluIGEgdHJhbnNhY3Rpb24gY29t bWFuZCAqLworCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKworCWRkbF9jb21tYW5kID0gZGVw YXJzZV9kZGxfanNvbl90b19zdHJpbmcobWVzc2FnZSk7CisJZGVidWdfcXVlcnlfc3RyaW5nID0g ZGRsX2NvbW1hbmQ7CisKKwkvKiBEZXN0Tm9uZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiAqLwor CXJlY2VpdmVyID0gQ3JlYXRlRGVzdFJlY2VpdmVyKERlc3ROb25lKTsKKwlwYXJzZXRyZWVfbGlz dCA9IHBnX3BhcnNlX3F1ZXJ5KGRkbF9jb21tYW5kKTsKKworCWZvcmVhY2gocGFyc2V0cmVlX2l0 ZW0sIHBhcnNldHJlZV9saXN0KQorCXsKKwkJTGlzdAkgICAqcGxhbnRyZWVfbGlzdDsKKwkJTGlz dAkgICAqcXVlcnl0cmVlX2xpc3Q7CisJCVJhd1N0bXQgICAgKmNvbW1hbmQgPSAoUmF3U3RtdCAq KSBsZmlyc3QocGFyc2V0cmVlX2l0ZW0pOworCQlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisJCU1l bW9yeUNvbnRleHQgcGVyX3BhcnNldHJlZV9jb250ZXh0ID0gTlVMTDsKKwkJUG9ydGFsCQlwb3J0 YWw7CisJCWJvb2wJCXNuYXBzaG90X3NldCA9IGZhbHNlOworCisJCWNvbW1hbmRUYWcgPSBDcmVh dGVDb21tYW5kVGFnKChOb2RlICopIGNvbW1hbmQpOworCisJCS8qIElmIHdlIGdvdCBhIGNhbmNl bCBzaWduYWwgaW4gcGFyc2luZyBvciBwcmlvciBjb21tYW5kLCBxdWl0ICovCisJCUNIRUNLX0ZP Ul9JTlRFUlJVUFRTKCk7CisKKwkJLyogUmVtb3ZlIGRhdGEgcG9wdWxhdGlvbiBmcm9tIHRoZSBj b21tYW5kICovCisJCXByZXByb2Nlc3NfY3JlYXRlX3RhYmxlKGNvbW1hbmQpOworCisJCS8qCisJ CSAqIFNldCB1cCBhIHNuYXBzaG90IGlmIHBhcnNlIGFuYWx5c2lzL3BsYW5uaW5nIHdpbGwgbmVl ZCBvbmUuCisJCSAqLworCQlpZiAoYW5hbHl6ZV9yZXF1aXJlc19zbmFwc2hvdChjb21tYW5kKSkK KwkJeworCQkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJ CQlzbmFwc2hvdF9zZXQgPSB0cnVlOworCQl9CisKKwkJLyoKKwkJICogV2UgZG8gdGhlIHdvcmsg Zm9yIGVhY2ggcGFyc2V0cmVlIGluIGEgc2hvcnQtbGl2ZWQgY29udGV4dCwgdG8KKwkJICogbGlt aXQgdGhlIG1lbW9yeSB1c2VkIHdoZW4gdGhlcmUgYXJlIG1hbnkgY29tbWFuZHMgaW4gdGhlIHN0 cmluZy4KKwkJICovCisJCXBlcl9wYXJzZXRyZWVfY29udGV4dCA9CisJCQlBbGxvY1NldENvbnRl eHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgImV4ZWN1dGVfc3FsX3N0 cmluZyBwZXItc3RhdGVtZW50IGNvbnRleHQiLAorCQkJCQkJCQkgIEFMTE9DU0VUX0RFRkFVTFRf U0laRVMpOworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBlcl9wYXJzZXRy ZWVfY29udGV4dCk7CisKKwkJcXVlcnl0cmVlX2xpc3QgPSBwZ19hbmFseXplX2FuZF9yZXdyaXRl X2ZpeGVkcGFyYW1zKGNvbW1hbmQsCisJCQkJCQkJCQkJCQkJCQlkZGxfY29tbWFuZCwKKwkJCQkJ CQkJCQkJCQkJCU5VTEwsIDAsIE5VTEwpOworCisJCXBsYW50cmVlX2xpc3QgPSBwZ19wbGFuX3F1 ZXJpZXMocXVlcnl0cmVlX2xpc3QsIGRkbF9jb21tYW5kLCAwLCBOVUxMKTsKKworCQkvKiBEb25l IHdpdGggdGhlIHNuYXBzaG90IHVzZWQgZm9yIHBhcnNpbmcvcGxhbm5pbmcgKi8KKwkJaWYgKHNu YXBzaG90X3NldCkKKwkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwkJcG9ydGFsID0gQ3JlYXRl UG9ydGFsKCJsb2dpY2FsIHJlcGxpY2F0aW9uIiwgdHJ1ZSwgdHJ1ZSk7CisKKwkJLyoKKwkJICog V2UgZG9uJ3QgaGF2ZSB0byBjb3B5IGFueXRoaW5nIGludG8gdGhlIHBvcnRhbCwgYmVjYXVzZSBl dmVyeXRoaW5nCisJCSAqIHdlIGFyZSBwYXNzaW5nIGhlcmUgaXMgaW4gQXBwbHlNZXNzYWdlQ29u dGV4dCBvciB0aGUKKwkJICogcGVyX3BhcnNldHJlZV9jb250ZXh0LCBhbmQgc28gd2lsbCBvdXRs aXZlIHRoZSBwb3J0YWwgYW55d2F5LgorCQkgKi8KKwkJUG9ydGFsRGVmaW5lUXVlcnkocG9ydGFs LAorCQkJCQkJICBOVUxMLAorCQkJCQkJICBkZGxfY29tbWFuZCwKKwkJCQkJCSAgY29tbWFuZFRh ZywKKwkJCQkJCSAgcGxhbnRyZWVfbGlzdCwKKwkJCQkJCSAgTlVMTCk7CisKKwkJLyoKKwkJICog U3RhcnQgdGhlIHBvcnRhbC4gIE5vIHBhcmFtZXRlcnMgaGVyZS4KKwkJICovCisJCVBvcnRhbFN0 YXJ0KHBvcnRhbCwgTlVMTCwgMCwgSW52YWxpZFNuYXBzaG90KTsKKworCQkvKgorCQkgKiBTd2l0 Y2ggYmFjayB0byB0cmFuc2FjdGlvbiBjb250ZXh0IGZvciBleGVjdXRpb24uCisJCSAqLworCQlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkJKHZvaWQpIFBvcnRhbFJ1bihw b3J0YWwsCisJCQkJCQkgRkVUQ0hfQUxMLAorCQkJCQkJIHRydWUsCisJCQkJCQkgdHJ1ZSwKKwkJ CQkJCSByZWNlaXZlciwKKwkJCQkJCSByZWNlaXZlciwKKwkJCQkJCSBOVUxMKTsKKworCQlQb3J0 YWxEcm9wKHBvcnRhbCwgZmFsc2UpOworCisJCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CisK KwkJLyoKKwkJICogVGFibGUgY3JlYXRlZCBieSBEREwgcmVwbGljYXRpb24gKGRhdGFiYXNlIGxl dmVsKSBpcyBhdXRvbWF0aWNhbGx5CisJCSAqIGFkZGVkIHRvIHRoZSBzdWJzY3JpcHRpb24gaGVy ZS4KKwkJICovCisJCWhhbmRsZV9jcmVhdGVfdGFibGUoY29tbWFuZCk7CisKKwkJLyogTm93IHdl IG1heSBkcm9wIHRoZSBwZXItcGFyc2V0cmVlIGNvbnRleHQsIGlmIG9uZSB3YXMgY3JlYXRlZC4g Ki8KKwkJTWVtb3J5Q29udGV4dERlbGV0ZShwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCX0KKwor CWRlYnVnX3F1ZXJ5X3N0cmluZyA9IHNhdmVfZGVidWdfcXVlcnlfc3RyaW5nOworCWVuZF9yZXBs aWNhdGlvbl9zdGVwKCk7Cit9CiAKIC8qCiAgKiBMb2dpY2FsIHJlcGxpY2F0aW9uIHByb3RvY29s IG1lc3NhZ2UgZGlzcGF0Y2hlci4KQEAgLTI1NzIsNiArMjgwOCwxMCBAQCBhcHBseV9kaXNwYXRj aChTdHJpbmdJbmZvIHMpCiAJCQkgKi8KIAkJCWJyZWFrOwogCisJCWNhc2UgTE9HSUNBTF9SRVBf TVNHX0RETDoKKwkJCWFwcGx5X2hhbmRsZV9kZGwocyk7CisJCQlicmVhazsKKwogCQljYXNlIExP R0lDQUxfUkVQX01TR19TVFJFQU1fU1RBUlQ6CiAJCQlhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0 KHMpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291 dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRw dXQuYwppbmRleCBjYTQ2ZmJhM2FmLi5iZWQ2MzZmYzYxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTUzLDYgKzUzLDExIEBAIHN0YXRpYyB2b2lk IHBnb3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCSBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCiAJCQkJCQkJIGJv b2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCSBTaXplIHN6LCBj b25zdCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHBnb3V0cHV0X2RkbChMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCVJlb3JkZXJCdWZmZXJUWE4gKnR4biwgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQs CisJCQkJCQkJCURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJU2l6ZSBzeiwg Y29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgYm9vbCBwZ291dHB1dF9vcmlnaW5fZmlsdGVy KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJICAgUmVwT3JpZ2luSWQgb3Jp Z2luX2lkKTsKIHN0YXRpYyB2b2lkIHBnb3V0cHV0X2JlZ2luX3ByZXBhcmVfdHhuKExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwKQEAgLTI1Niw2ICsyNjEsNyBAQCBfUEdfb3V0cHV0X3BsdWdp bl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAqY2IpCiAJY2ItPmNoYW5nZV9jYiA9IHBnb3V0 cHV0X2NoYW5nZTsKIAljYi0+dHJ1bmNhdGVfY2IgPSBwZ291dHB1dF90cnVuY2F0ZTsKIAljYi0+ bWVzc2FnZV9jYiA9IHBnb3V0cHV0X21lc3NhZ2U7CisJY2ItPmRkbF9jYiA9IHBnb3V0cHV0X2Rk bDsKIAljYi0+Y29tbWl0X2NiID0gcGdvdXRwdXRfY29tbWl0X3R4bjsKIAogCWNiLT5iZWdpbl9w cmVwYXJlX2NiID0gcGdvdXRwdXRfYmVnaW5fcHJlcGFyZV90eG47CkBAIC0yNzIsNiArMjc4LDcg QEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQogCWNi LT5zdHJlYW1fY29tbWl0X2NiID0gcGdvdXRwdXRfc3RyZWFtX2NvbW1pdDsKIAljYi0+c3RyZWFt X2NoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAljYi0+c3RyZWFtX21lc3NhZ2VfY2IgPSBw Z291dHB1dF9tZXNzYWdlOworCWNiLT5zdHJlYW1fZGRsX2NiID0gcGdvdXRwdXRfZGRsOwogCWNi LT5zdHJlYW1fdHJ1bmNhdGVfY2IgPSBwZ291dHB1dF90cnVuY2F0ZTsKIAkvKiB0cmFuc2FjdGlv biBzdHJlYW1pbmcgLSB0d28tcGhhc2UgY29tbWl0ICovCiAJY2ItPnN0cmVhbV9wcmVwYXJlX2Ni ID0gcGdvdXRwdXRfc3RyZWFtX3ByZXBhcmVfdHhuOwpAQCAtNDI2LDYgKzQzMyw3IEBAIHBnb3V0 cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRp b25zICpvcHQsCiAKIAkvKiBUaGlzIHBsdWdpbiB1c2VzIGJpbmFyeSBwcm90b2NvbC4gKi8KIAlv cHQtPm91dHB1dF90eXBlID0gT1VUUFVUX1BMVUdJTl9CSU5BUllfT1VUUFVUOworCW9wdC0+cmVj ZWl2ZV9yZXdyaXRlcyA9IHRydWU7CiAKIAkvKgogCSAqIFRoaXMgaXMgcmVwbGljYXRpb24gc3Rh cnQgYW5kIG5vdCBzbG90IGluaXRpYWxpemF0aW9uLgpAQCAtNDk5LDYgKzUwNyw3IEBAIHBnb3V0 cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRp b25zICpvcHQsCiAKIAkJLyogSW5pdCBwdWJsaWNhdGlvbiBzdGF0ZS4gKi8KIAkJZGF0YS0+cHVi bGljYXRpb25zID0gTklMOworCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IE5JTDsKIAkJcHVibGlj YXRpb25zX3ZhbGlkID0gZmFsc2U7CiAJCUNhY2hlUmVnaXN0ZXJTeXNjYWNoZUNhbGxiYWNrKFBV QkxJQ0FUSU9OT0lELAogCQkJCQkJCQkJICBwdWJsaWNhdGlvbl9pbnZhbGlkYXRpb25fY2IsCkBA IC0xMzc3LDkgKzEzODYsMjIgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCVJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBl IGFjdGlvbiA9IGNoYW5nZS0+YWN0aW9uOwogCVR1cGxlVGFibGVTbG90ICpvbGRfc2xvdCA9IE5V TEw7CiAJVHVwbGVUYWJsZVNsb3QgKm5ld19zbG90ID0gTlVMTDsKKwlib29sCQl0YWJsZV9yZXdy aXRlID0gZmFsc2U7CiAKIAl1cGRhdGVfcmVwbGljYXRpb25fcHJvZ3Jlc3MoY3R4LCBmYWxzZSk7 CiAKKwkvKgorCSAqIEZvciBoZWFwIHJld3JpdGVzLCB3ZSBtaWdodCBuZWVkIHRvIHJlcGxpY2F0 ZSB0aGVtIGlmIHRoZSByZXdyaXR0ZW4KKwkgKiB0YWJsZSBwdWJsaXNoZXMgcmV3cml0ZSBkZGwg bWVzc2FnZS4gU28gZ2V0IHRoZSBhY3R1YWwgcmVsYXRpb24gaGVyZQorCSAqIGFuZCBjaGVjayB0 aGUgcHViYWN0aW9uIGxhdGVyLgorCSAqLworCWlmIChyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdy aXRlKQorCXsKKwkJdGFibGVfcmV3cml0ZSA9IHRydWU7CisJCXJlbGF0aW9uID0gUmVsYXRpb25J ZEdldFJlbGF0aW9uKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHJld3JpdGUpOworCQl0YXJnZXRyZWwg PSByZWxhdGlvbjsKKwl9CisKIAlpZiAoIWlzX3B1Ymxpc2hhYmxlX3JlbGF0aW9uKHJlbGF0aW9u KSkKIAkJcmV0dXJuOwogCkBAIC0xNDEzLDYgKzE0MzUsMTMgQEAgcGdvdXRwdXRfY2hhbmdlKExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJQXNz ZXJ0KGZhbHNlKTsKIAl9CiAKKwkvKgorCSAqIFdlIGRvbid0IHB1Ymxpc2ggdGFibGUgcmV3cml0 ZSBjaGFuZ2UgdW5sZXNzIHdlIHB1Ymxpc2ggdGhlIHJld3JpdGUgZGRsCisJICogbWVzc2FnZS4K KwkgKi8KKwlpZiAodGFibGVfcmV3cml0ZSAmJiAhcmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRs KQorCQlyZXR1cm47CisKIAkvKiBBdm9pZCBsZWFraW5nIG1lbW9yeSBieSB1c2luZyBhbmQgcmVz ZXR0aW5nIG91ciBvd24gY29udGV4dCAqLwogCW9sZCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhk YXRhLT5jb250ZXh0KTsKIApAQCAtMTQ0Miw4ICsxNDcxLDggQEAgcGdvdXRwdXRfY2hhbmdlKExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJfQog CiAJCQkvKiBDaGVjayByb3cgZmlsdGVyICovCi0JCQlpZiAoIXBnb3V0cHV0X3Jvd19maWx0ZXIo dGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Nsb3QsIHJlbGVudHJ5LAotCQkJCQkJCQkJICZhY3Rpb24p KQorCQkJaWYgKCF0YWJsZV9yZXdyaXRlICYmCisJCQkJIXBnb3V0cHV0X3Jvd19maWx0ZXIodGFy Z2V0cmVsLCBOVUxMLCAmbmV3X3Nsb3QsIHJlbGVudHJ5LCAmYWN0aW9uKSkKIAkJCQlicmVhazsK IAogCQkJLyoKQEAgLTE0NjMsOCArMTQ5MiwxOSBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQltYXliZV9zZW5k X3NjaGVtYShjdHgsIGNoYW5nZSwgcmVsYXRpb24sIHJlbGVudHJ5KTsKIAogCQkJT3V0cHV0UGx1 Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7Ci0JCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChj dHgtPm91dCwgeGlkLCB0YXJnZXRyZWwsIG5ld19zbG90LAotCQkJCQkJCQkJZGF0YS0+YmluYXJ5 LCByZWxlbnRyeS0+Y29sdW1ucyk7CisKKwkJCS8qCisJCQkgKiBDb252ZXJ0IHRoZSByZXdyaXRl IGluc2VydHMgdG8gdXBkYXRlcyBzbyB0aGF0IHRoZSBzdWJzY3JpYmVyCisJCQkgKiBjYW4gcmVw bGF5IGl0LiBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgYmV0d2VlbgorCQkJ ICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGlzIGNvbnNpc3RlbnQuCisJCQkgKi8KKwkJCWlm ICh0YWJsZV9yZXdyaXRlKQorCQkJCWxvZ2ljYWxyZXBfd3JpdGVfdXBkYXRlKGN0eC0+b3V0LCB4 aWQsIHRhcmdldHJlbCwKKwkJCQkJCQkJCQlOVUxMLCBuZXdfc2xvdCwgZGF0YS0+YmluYXJ5LAor CQkJCQkJCQkJCXJlbGVudHJ5LT5jb2x1bW5zKTsKKwkJCWVsc2UKKwkJCQlsb2dpY2FscmVwX3dy aXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWwsIG5ld19zbG90LAorCQkJCQkJCQkJ CWRhdGEtPmJpbmFyeSwgcmVsZW50cnktPmNvbHVtbnMpOwogCQkJT3V0cHV0UGx1Z2luV3JpdGUo Y3R4LCB0cnVlKTsKIAkJCWJyZWFrOwogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9VUERB VEU6CkBAIC0xNTk2LDYgKzE2MzYsOSBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCWFuY2VzdG9yID0gTlVMTDsK IAl9CiAKKwlpZiAodGFibGVfcmV3cml0ZSkKKwkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisK IAkvKiBDbGVhbnVwICovCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZCk7CiAJTWVtb3J5Q29u dGV4dFJlc2V0KGRhdGEtPmNvbnRleHQpOwpAQCAtMTcxNCw2ICsxNzU3LDEzOCBAQCBwZ291dHB1 dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAq dHhuLAogCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CiB9CiAKKy8qCisgKiBTZW5kIHRo ZSBkZWNvZGVkIERETCBvdmVyIHdpcmUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ291dHB1dF9kZGwo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJ CVhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJl bGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCVNpemUgc3osIGNvbnN0IGNo YXIgKm1lc3NhZ2UpCit7CisJUEdPdXRwdXREYXRhICpkYXRhID0gKFBHT3V0cHV0RGF0YSAqKSBj dHgtPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlQR091dHB1dFR4bkRhdGEgKnR4bmRhdGEgPSAo UEdPdXRwdXRUeG5EYXRhICopIHR4bi0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCVJlbGF0aW9u CXJlbGF0aW9uID0gTlVMTDsKKwlSZWxhdGlvblN5bmNFbnRyeSAqcmVsZW50cnk7CisKKwlzd2l0 Y2ggKGNtZHR5cGUpCisJeworCQljYXNlIERDVF9UYWJsZURyb3BTdGFydDoKKworCQkJLyoKKwkJ CSAqIE9uIERST1Agc3RhcnQsIGFkZCB0aGUgcmVsaWQgdG8gYSBkZWxldGVkX3JlbGlkIGxpc3Qg aWYgdGhlCisJCQkgKiByZWxpZCBpcyBwYXJ0IG9mIGEgcHVibGljYXRpb24gdGhhdCBzdXBwb3J0 cyBkZGwgcHVibGljYXRpb24uCisJCQkgKiBXZSBuZWVkIHRoaXMgYmVjYXVzZSBvbiBEUk9QIGVu ZCwgdGhlIHJlbGlkIHdpbGwgbm8gbG9uZ2VyIGJlCisJCQkgKiB2YWxpZC4gTGF0ZXIgb24gRHJv cCBlbmQsIHZlcmlmeSB0aGF0IHRoZSBkcm9wIGlzIGZvciBhIHJlbGlkCisJCQkgKiB0aGF0IGlz IG9uIHRoZSBkZWxldGVkX3JpZCBsaXN0LCBhbmQgb25seSB0aGVuIHNlbmQgdGhlIGRkbAorCQkJ ICogbWVzc2FnZS4KKwkJCSAqLworCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24o cmVsaWQpOworCisJCQlBc3NlcnQocmVsYXRpb24pOworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5 bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQlpZiAocmVsZW50cnktPnB1YmFjdGlvbnMu cHViZGRsKQorCQkJCWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0gbGFwcGVuZF9vaWQoZGF0YS0+ZGVs ZXRlZF9yZWxpZHMsIHJlbGlkKTsKKworCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQly ZXR1cm47CisKKwkJY2FzZSBEQ1RfVGFibGVEcm9wRW5kOgorCQkJaWYgKCFsaXN0X21lbWJlcl9v aWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKSkKKwkJCQlyZXR1cm47CisJCQllbHNlCisJ CQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsaXN0X2RlbGV0ZV9vaWQoZGF0YS0+ZGVsZXRlZF9y ZWxpZHMsIHJlbGlkKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRENUX1RhYmxlQWx0ZXI6CisKKwkJ CS8qCisJCQkgKiBGb3IgdGFibGUgcmV3cml0ZSBkZGwsIHdlIGZpcnN0IHNlbmQgdGhlIG9yaWdp bmFsIGRkbCBtZXNzYWdlCisJCQkgKiB0byBzdWJzY3JpYmVyLCB0aGVuIGNvbnZlcnQgdGhlIHVw Y29taW5nIHJld3JpdGUgSU5TRVJUIHRvCisJCQkgKiBVUERBVEUgYW5kIHNlbmQgdGhlbSB0byBz dWJzY3JpYmVyIHNvIHRoYXQgdGhlIGRhdGEgYmV0d2VlbgorCQkJICogcHVibGlzaGVyIGFuZCBz dWJzY3JpYmVyIGNhbiBhbHdheXMgYmUgY29uc2lzdGVudC4KKwkJCSAqCisJCQkgKiBXZSBkbyB0 aGlzIHdheSBiZWNhdXNlIG9mIHR3byByZWFzb246CisJCQkgKgorCQkJICogKDEpIFRoZSBkYXRh IGJlZm9yZSB0aGUgcmV3cml0ZSBkZGwgY291bGQgYWxyZWFkeSBiZSBkaWZmZXJlbnQKKwkJCSAq IGFtb25nIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlci4gVG8gbWFrZSBzdXJlIHRoZSBleHRyYSBk YXRhIGluCisJCQkgKiBzdWJzY3JpYmVyIHdoaWNoIGRvZXNuJ3QgZXhpc3QgaW4gcHVibGlzaGVy IGFsc28gZ2V0IHJld3JpdHRlbiwKKwkJCSAqIHdlIG5lZWQgdG8gbGV0IHRoZSBzdWJzY3JpYmVy IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRsCisJCQkgKiB0byByZXdyaXRlIGFsbCB0 aGUgZGF0YSBhdCBmaXJzdC4KKwkJCSAqCisJCQkgKiAoMikgdGhlIGRhdGEgYWZ0ZXIgZXhlY3V0 aW5nIHJld3JpdGUgZGRsIGNvdWxkIGJlIGRpZmZlcmVudAorCQkJICogYW1vbmcgcHVibGlzaGVy IGFuZCBzdWJzY3JpYmVyKGR1ZSB0byBkaWZmZXJlbnQKKwkJCSAqIGZ1bmN0aW9ucy9vcGVyYXRv cnMgdXNlZCBkdXJpbmcgcmV3cml0ZSksIHNvIHdlIG5lZWQgdG8KKwkJCSAqIHJlcGxpY2F0ZSB0 aGUgcmV3cml0ZSBVUERBVEVzIHRvIGtlZXAgdGhlIGRhdGEgY29uc2lzdGVudC4KKwkJCSAqCisJ CQkgKiBUTyBJTVBST1ZFOiBXZSBjb3VsZCBpbXByb3ZlIHRoaXMgYnkgbGV0dGluZyB0aGUgc3Vi c2NyaWJlcgorCQkJICogb25seSByZXdyaXRlIHRoZSBleHRyYSBkYXRhIGluc3RlYWQgb2YgZG9p bmcgZnVsbHkgcmV3cml0ZSBhbmQKKwkJCSAqIHVzZSB0aGUgdXBjb21pbmcgcmV3cml0ZSBVUERB VEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0YS4KKwkJCSAqIEJlc2lkZXMsIHdlIG1heSBub3Qg bmVlZCB0byBzZW5kIHJld3JpdGUgY2hhbmdlcyBmb3IgYWxsIHR5cGUKKwkJCSAqIG9mIHJld3Jp dGUgZGRsLCBmb3IgZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBza2lwIHNlbmRpbmcKKwkJCSAq IHJld3JpdGUgY2hhbmdlcyBmb3IgQUxURVIgVEFCTEUgU0VUIExPR0dFRCBhcyB0aGUgZGF0YSBp biB0aGUKKwkJCSAqIHRhYmxlIGRvZXNuJ3QgYWN0dWFsbHkgYmUgY2hhbmdlZC4KKwkJCSAqLwor CQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCQkJQXNzZXJ0KHJl bGF0aW9uKTsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRp b24pOworCisJCQkvKgorCQkJICogU2tpcCBzZW5kaW5nIHRoaXMgZGRsIGlmIHdlIGRvbid0IHB1 Ymxpc2ggZGRsIG1lc3NhZ2Ugb3IgdGhlCisJCQkgKiBkZGwgbmVlZCB0byBiZSBwdWJsaXNoZWQg dmlhIGl0cyByb290IHJlbGF0aW9uLgorCQkJICovCisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rp b25zLnB1YmRkbCB8fAorCQkJCXJlbGVudHJ5LT5wdWJsaXNoX2FzX3JlbGlkICE9IHJlbGlkKQor CQkJeworCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJCXJldHVybjsKKwkJCX0KKwor CQkJYnJlYWs7CisKKwkJY2FzZSBEQ1RfU2ltcGxlQ21kOgorCQkJcmVsYXRpb24gPSBSZWxhdGlv bklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlpZiAocmVsYXRpb24gPT0gTlVMTCkKKwkJCQli cmVhazsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24p OworCisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJCXsKKwkJCQlSZWxh dGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWJyZWFrOworCisJ CWNhc2UgRENUX09iamVjdERyb3A6CisJCQkvKiBkbyBub3RoaW5nICovCisJCQlicmVhazsKKwor CQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIHR5cGUgJWQiLCBjbWR0eXBl KTsKKwkJCWJyZWFrOworCX0KKworCS8qIFNlbmQgQkVHSU4gaWYgd2UgaGF2ZW4ndCB5ZXQgKi8K KwlpZiAodHhuZGF0YSAmJiAhdHhuZGF0YS0+c2VudF9iZWdpbl90eG4pCisJCXBnb3V0cHV0X3Nl bmRfYmVnaW4oY3R4LCB0eG4pOworCisJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1 ZSk7CisJbG9naWNhbHJlcF93cml0ZV9kZGwoY3R4LT5vdXQsCisJCQkJCQkJCW1lc3NhZ2VfbHNu LAorCQkJCQkJCQlwcmVmaXgsCisJCQkJCQkJCXN6LAorCQkJCQkJCQltZXNzYWdlKTsKKwlPdXRw dXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOworCisJaWYgKHJlbGF0aW9uKQorCQlSZWxhdGlvbkNs b3NlKHJlbGF0aW9uKTsKK30KKwogLyoKICAqIFJldHVybiB0cnVlIGlmIHRoZSBkYXRhIGlzIGFz c29jaWF0ZWQgd2l0aCBhbiBvcmlnaW4gYW5kIHRoZSB1c2VyIGhhcwogICogcmVxdWVzdGVkIHRo ZSBjaGFuZ2VzIHRoYXQgZG9uJ3QgaGF2ZSBhbiBvcmlnaW4sIGZhbHNlIG90aGVyd2lzZS4KQEAg LTE5OTUsNyArMjE3MCw4IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEs IFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbnRyeS0+c2NoZW1hX3NlbnQgPSBmYWxzZTsKIAkJZW50 cnktPnN0cmVhbWVkX3R4bnMgPSBOSUw7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1Ymluc2VydCA9 IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9Ci0JCQllbnRyeS0+cHViYWN0aW9ucy5wdWJk ZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IGZhbHNlOworCQkJZW50cnkt PnB1YmFjdGlvbnMucHViZGVsZXRlID0gZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPQor CQkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsID0gZmFsc2U7CiAJCWVudHJ5LT5uZXdfc2xvdCA9 IE5VTEw7CiAJCWVudHJ5LT5vbGRfc2xvdCA9IE5VTEw7CiAJCW1lbXNldChlbnRyeS0+ZXhwcnN0 YXRlLCAwLCBzaXplb2YoZW50cnktPmV4cHJzdGF0ZSkpOwpAQCAtMjA1Myw2ICsyMjI5LDcgQEAg Z2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24p CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9IGZhbHNlOwogCQllbnRyeS0+cHViYWN0 aW9ucy5wdWJkZWxldGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUg PSBmYWxzZTsKKwkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsID0gZmFsc2U7CiAKIAkJLyoKIAkJ ICogVHVwbGUgc2xvdHMgY2xlYW51cHMuIChXaWxsIGJlIHJlYnVpbHQgbGF0ZXIgaWYgbmVlZGVk KS4KQEAgLTIxNjYsNiArMjM0Myw3IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEg KmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0 ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1 YmRlbGV0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHViZGVsZXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rp b25zLnB1YnRydW5jYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZTsKKwkJCQllbnRy eS0+cHViYWN0aW9ucy5wdWJkZGwgfD0gcHViLT5wdWJhY3Rpb25zLnB1YmRkbDsKIAogCQkJCS8q CiAJCQkJICogV2Ugd2FudCB0byBwdWJsaXNoIHRoZSBjaGFuZ2VzIGFzIHRoZSB0b3AtbW9zdCBh bmNlc3RvcgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgYi9zcmMvYmFj a2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCBmMTIxNWM4ZTE4Li4yOWEzMTQ0OWNmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3V0 aWxpdHkuYwpAQCAtMTY2Niw4ICsxNjY2LDExIEBAIFByb2Nlc3NVdGlsaXR5U2xvdyhQYXJzZVN0 YXRlICpwc3RhdGUsCiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgVF9DcmVhdGVUYWJsZUFzU3RtdDoK KwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KHBhcnNldHJlZSk7CiAJCQkJYWRk cmVzcyA9IEV4ZWNDcmVhdGVUYWJsZUFzKHBzdGF0ZSwgKENyZWF0ZVRhYmxlQXNTdG10ICopIHBh cnNldHJlZSwKIAkJCQkJCQkJCQkJcGFyYW1zLCBxdWVyeUVudiwgcWMpOworCQkJCUV2ZW50VHJp Z2dlclRhYmxlSW5pdFdyaXRlRW5kKGFkZHJlc3MpOworCQkJCWNvbW1hbmRDb2xsZWN0ZWQgPSB0 cnVlOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL2V2dGNhY2hlLmMKaW5kZXggZjdmNzE2NWY3Zi4uN2ZiOGNiMjkxZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jCkBAIC0xNjcsNiArMTY3LDggQEAgQnVpbGRFdmVudFRy aWdnZXJDYWNoZSh2b2lkKQogCQkJZXZlbnQgPSBFVlRfU1FMRHJvcDsKIAkJZWxzZSBpZiAoc3Ry Y21wKGV2dGV2ZW50LCAidGFibGVfcmV3cml0ZSIpID09IDApCiAJCQlldmVudCA9IEVWVF9UYWJs ZVJld3JpdGU7CisJCWVsc2UgaWYgKHN0cmNtcChldnRldmVudCwgInRhYmxlX2luaXRfd3JpdGUi KSA9PSAwKQorCQkJZXZlbnQgPSBFVlRfVGFibGVJbml0V3JpdGU7CiAJCWVsc2UKIAkJCWNvbnRp bnVlOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRleCA0NTBlNTEyNGE1Li4yZjlk ZDE5Yzg1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTU2OTAsNiArNTY5MCw3 IEBAIFJlbGF0aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRpb24gcmVsYXRpb24sIFB1Ymxp Y2F0aW9uRGVzYyAqcHViZGVzYykKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgfD0g cHViZm9ybS0+cHVidXBkYXRlOwogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSB8PSBw dWJmb3JtLT5wdWJkZWxldGU7CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgfD0g cHViZm9ybS0+cHVidHJ1bmNhdGU7CisJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGRsIHw9IHB1 YmZvcm0tPnB1YmRkbDsKIAogCQkvKgogCQkgKiBDaGVjayBpZiBhbGwgY29sdW1ucyByZWZlcmVu Y2VkIGluIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbiBhcmUgcGFydApkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggNDRk OTU3YzAzOC4uZWRiNGExYmE4MiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu YworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0zOTQ5LDYgKzM5NDksNyBAQCBn ZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJaW50 CQkJaV9wdWJ1cGRhdGU7CiAJaW50CQkJaV9wdWJkZWxldGU7CiAJaW50CQkJaV9wdWJ0cnVuY2F0 ZTsKKwlpbnQJCQlpX3B1YmRkbDsKIAlpbnQJCQlpX3B1YnZpYXJvb3Q7CiAJaW50CQkJaSwKIAkJ CQludHVwczsKQEAgLTM5NjQsMjMgKzM5NjUsMjMgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUg KmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCXJlc2V0UFFFeHBCdWZmZXIocXVlcnkpOwog CiAJLyogR2V0IHRoZSBwdWJsaWNhdGlvbnMuICovCi0JaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24g Pj0gMTMwMDAwKQorCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE2MDAwMCkKIAkJYXBwZW5k UFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQs IHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJhbGx0 YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNh dGUsIHAucHVidmlhcm9vdCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQs IHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJkZGwsIHAucHVi dmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAllbHNlIGlmIChm b3V0LT5yZW1vdGVWZXJzaW9uID49IDExMDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVl cnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgogCQkJ CQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0 LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZp YXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0 ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRsLCBmYWxzZSBB UyBwdWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCWVsc2UK IAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9p ZCwgcC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAi cC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIGZh bHNlIEFTIHB1YnRydW5jYXRlLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKKwkJCQkJCQkgInAucHVi YWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBmYWxzZSBB UyBwdWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcC5wdWJkZGwsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgog CQkJCQkJCSAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAKIAlyZXMgPSBFeGVjdXRlU3FsUXVl cnkoZm91dCwgcXVlcnktPmRhdGEsIFBHUkVTX1RVUExFU19PSyk7CkBAIC0zOTk2LDYgKzM5OTcs NyBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMp CiAJaV9wdWJ1cGRhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidXBkYXRlIik7CiAJaV9wdWJkZWxl dGUgPSBQUWZudW1iZXIocmVzLCAicHViZGVsZXRlIik7CiAJaV9wdWJ0cnVuY2F0ZSA9IFBRZm51 bWJlcihyZXMsICJwdWJ0cnVuY2F0ZSIpOworCWlfcHViZGRsID0gUFFmbnVtYmVyKHJlcywgInB1 YmRkbCIpOwogCWlfcHVidmlhcm9vdCA9IFBRZm51bWJlcihyZXMsICJwdWJ2aWFyb290Iik7CiAK IAlwdWJpbmZvID0gcGdfbWFsbG9jKG50dXBzICogc2l6ZW9mKFB1YmxpY2F0aW9uSW5mbykpOwpA QCAtNDAxOSw2ICs0MDIxLDggQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAq bnVtUHVibGljYXRpb25zKQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJkZWxl dGUpLCAidCIpID09IDApOwogCQlwdWJpbmZvW2ldLnB1YnRydW5jYXRlID0KIAkJCShzdHJjbXAo UFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidHJ1bmNhdGUpLCAidCIpID09IDApOworCQlwdWJpbmZv W2ldLnB1YmRkbCA9CisJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YmRkbCksICJ0 IikgPT0gMCk7CiAJCXB1YmluZm9baV0ucHVidmlhcm9vdCA9CiAJCQkoc3RyY21wKFBRZ2V0dmFs dWUocmVzLCBpLCBpX3B1YnZpYXJvb3QpLCAidCIpID09IDApOwogCkBAIC00MDk4LDYgKzQxMDIs MTUgQEAgZHVtcFB1YmxpY2F0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFB1YmxpY2F0aW9uSW5m byAqcHViaW5mbykKIAkJZmlyc3QgPSBmYWxzZTsKIAl9CiAKKwlpZiAocHViaW5mby0+cHViZGRs KQorCXsKKwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCAi KTsKKworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgImRkbCIpOworCQlmaXJzdCA9IGZh bHNlOworCX0KKwogCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihxdWVyeSwgJ1wnJyk7CiAKIAlpZiAo cHViaW5mby0+cHVidmlhcm9vdCkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmggYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IDQzNmFjNWJiOTguLmNkNTBlYzhj ZjkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuaApAQCAtNjE5LDYgKzYxOSw3IEBAIHR5cGVkZWYgc3RydWN0IF9QdWJs aWNhdGlvbkluZm8KIAlib29sCQlwdWJ1cGRhdGU7CiAJYm9vbAkJcHViZGVsZXRlOwogCWJvb2wJ CXB1YnRydW5jYXRlOworCWJvb2wJCXB1YmRkbDsKIAlib29sCQlwdWJ2aWFyb290OwogfSBQdWJs aWNhdGlvbkluZm87CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3Jj L2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5kZXggZGYxNjYzNjVlOC4uMGY0YjFlYjhkYyAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJl LmMKQEAgLTYxNjQsNyArNjE2NCw3IEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0 dGVybikKIAlQUUV4cEJ1ZmZlckRhdGEgYnVmOwogCVBHcmVzdWx0ICAgKnJlczsKIAlwcmludFF1 ZXJ5T3B0IG15b3B0ID0gcHNldC5wb3B0OwotCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9j b2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlfTsKKwlzdGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1tdID0ge2Zh bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2V9OwogCiAJaWYgKHBzZXQuc3ZlcnNpb24gPCAxMDAwMDApCiAJewpAQCAtNjE4MSwxMyArNjE4 MSwxOCBAQCBsaXN0UHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJcHJpbnRmUFFF eHBCdWZmZXIoJmJ1ZiwKIAkJCQkJICAiU0VMRUNUIHB1Ym5hbWUgQVMgXCIlc1wiLFxuIgogCQkJ CQkgICIgIHBnX2NhdGFsb2cucGdfZ2V0X3VzZXJieWlkKHB1Ym93bmVyKSBBUyBcIiVzXCIsXG4i Ci0JCQkJCSAgIiAgcHViYWxsdGFibGVzIEFTIFwiJXNcIixcbiIKLQkJCQkJICAiICBwdWJpbnNl cnQgQVMgXCIlc1wiLFxuIgotCQkJCQkgICIgIHB1YnVwZGF0ZSBBUyBcIiVzXCIsXG4iCi0JCQkJ CSAgIiAgcHViZGVsZXRlIEFTIFwiJXNcIiIsCisJCQkJCSAgIiAgcHViYWxsdGFibGVzIEFTIFwi JXNcIiIsCiAJCQkJCSAgZ2V0dGV4dF9ub29wKCJOYW1lIiksCiAJCQkJCSAgZ2V0dGV4dF9ub29w KCJPd25lciIpLAotCQkJCQkgIGdldHRleHRfbm9vcCgiQWxsIHRhYmxlcyIpLAorCQkJCQkgIGdl dHRleHRfbm9vcCgiQWxsIHRhYmxlcyIpKTsKKwlpZiAocHNldC5zdmVyc2lvbiA+PSAxNjAwMDAp CisJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCQkgICIsXG4gIHB1YmRkbCBBUyBcIiVz XCIiLAorCQkJCQkJICBnZXR0ZXh0X25vb3AoIkRETCIpKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlcigm YnVmLAorCQkJCQkgICIsXG4gIHB1Ymluc2VydCBBUyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgcHVi dXBkYXRlIEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBwdWJkZWxldGUgQVMgXCIlc1wiIiwKIAkJ CQkJICBnZXR0ZXh0X25vb3AoIkluc2VydHMiKSwKIAkJCQkJICBnZXR0ZXh0X25vb3AoIlVwZGF0 ZXMiKSwKIAkJCQkJICBnZXR0ZXh0X25vb3AoIkRlbGV0ZXMiKSk7CkBAIC02MTk5LDcgKzYyMDQs NiBAQCBsaXN0UHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCWFwcGVuZFBRRXhw QnVmZmVyKCZidWYsCiAJCQkJCQkgICIsXG4gIHB1YnZpYXJvb3QgQVMgXCIlc1wiIiwKIAkJCQkJ CSAgZ2V0dGV4dF9ub29wKCJWaWEgcm9vdCIpKTsKLQogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZi dWYsCiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uXG4iKTsKIApAQCAt NjI4OSw2ICs2MjkzLDcgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVy bikKIAlQR3Jlc3VsdCAgICpyZXM7CiAJYm9vbAkJaGFzX3B1YnRydW5jYXRlOwogCWJvb2wJCWhh c19wdWJ2aWFyb290OworCWJvb2wJCWhhc19wdWJkZGw7CiAKIAlQUUV4cEJ1ZmZlckRhdGEgdGl0 bGU7CiAJcHJpbnRUYWJsZUNvbnRlbnQgY29udDsKQEAgLTYzMDUsMTMgKzYzMTAsMTkgQEAgZGVz Y3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAogCWhhc19wdWJ0cnVuY2F0 ZSA9IChwc2V0LnN2ZXJzaW9uID49IDExMDAwMCk7CiAJaGFzX3B1YnZpYXJvb3QgPSAocHNldC5z dmVyc2lvbiA+PSAxMzAwMDApOworCWhhc19wdWJkZGwgPSAgKHBzZXQuc3ZlcnNpb24gPj0gMTYw MDAwKTsKIAogCWluaXRQUUV4cEJ1ZmZlcigmYnVmKTsKIAogCXByaW50ZlBRRXhwQnVmZmVyKCZi dWYsCiAJCQkJCSAgIlNFTEVDVCBvaWQsIHB1Ym5hbWUsXG4iCiAJCQkJCSAgIiAgcGdfY2F0YWxv Zy5wZ19nZXRfdXNlcmJ5aWQocHVib3duZXIpIEFTIG93bmVyLFxuIgotCQkJCQkgICIgIHB1YmFs bHRhYmxlcywgcHViaW5zZXJ0LCBwdWJ1cGRhdGUsIHB1YmRlbGV0ZSIpOworCQkJCQkgICIgIHB1 YmFsbHRhYmxlcyIpOworCWlmIChoYXNfcHViZGRsKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm YnVmLAorCQkJCQkJCSAiLCBwdWJkZGwiKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAor CQkJCQkJICIsICBwdWJpbnNlcnQsIHB1YnVwZGF0ZSwgcHViZGVsZXRlIik7CiAJaWYgKGhhc19w dWJ0cnVuY2F0ZSkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCQkgIiwgcHVi dHJ1bmNhdGUiKTsKQEAgLTYzNjksNiArNjM4MCw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNv bnN0IGNoYXIgKnBhdHRlcm4pCiAJCQluY29scysrOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJ CQluY29scysrOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCW5jb2xzKys7CiAKIAkJaW5pdFBRRXhw QnVmZmVyKCZ0aXRsZSk7CiAJCXByaW50ZlBRRXhwQnVmZmVyKCZ0aXRsZSwgXygiUHVibGljYXRp b24gJXMiKSwgcHVibmFtZSk7CkBAIC02Mzc2LDYgKzYzODksOCBAQCBkZXNjcmliZVB1YmxpY2F0 aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCiAJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQs IGdldHRleHRfbm9vcCgiT3duZXIiKSwgdHJ1ZSwgYWxpZ24pOwogCQlwcmludFRhYmxlQWRkSGVh ZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIkFsbCB0YWJsZXMiKSwgdHJ1ZSwgYWxpZ24pOworCQlp ZiAoaGFzX3B1YmRkbCkKKwkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9v cCgiRERMIiksIHRydWUsIGFsaWduKTsKIAkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0 dGV4dF9ub29wKCJJbnNlcnRzIiksIHRydWUsIGFsaWduKTsKIAkJcHJpbnRUYWJsZUFkZEhlYWRl cigmY29udCwgZ2V0dGV4dF9ub29wKCJVcGRhdGVzIiksIHRydWUsIGFsaWduKTsKIAkJcHJpbnRU YWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJEZWxldGVzIiksIHRydWUsIGFsaWdu KTsKQEAgLTYzOTMsNiArNjQwOCw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIg KnBhdHRlcm4pCiAJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGks IDcpLCBmYWxzZSwgZmFsc2UpOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmludFRhYmxl QWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDgpLCBmYWxzZSwgZmFsc2UpOworCQlp ZiAoaGFzX3B1YmRkbCkKKwkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJl cywgaSwgOSksIGZhbHNlLCBmYWxzZSk7CiAKIAkJaWYgKCFwdWJhbGx0YWJsZXMpCiAJCXsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3JtZ3JsaXN0LmgKaW5kZXggZWVmYzEzYTFlMS4uMjJiYzA1YWY1MCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3Jt Z3JsaXN0LmgKQEAgLTQ3LDQgKzQ3LDQgQEAgUEdfUk1HUihSTV9DT01NSVRfVFNfSUQsICJDb21t aXRUcyIsIGNvbW1pdF90c19yZWRvLCBjb21taXRfdHNfZGVzYywgY29tbWl0X3RzX2kKIFBHX1JN R1IoUk1fUkVQTE9SSUdJTl9JRCwgIlJlcGxpY2F0aW9uT3JpZ2luIiwgcmVwbG9yaWdpbl9yZWRv LCByZXBsb3JpZ2luX2Rlc2MsIHJlcGxvcmlnaW5faWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwpCiBQR19STUdSKFJNX0dFTkVSSUNfSUQsICJHZW5lcmljIiwgZ2VuZXJpY19yZWRvLCBn ZW5lcmljX2Rlc2MsIGdlbmVyaWNfaWRlbnRpZnksIE5VTEwsIE5VTEwsIGdlbmVyaWNfbWFzaywg TlVMTCkKIFBHX1JNR1IoUk1fTE9HSUNBTE1TR19JRCwgIkxvZ2ljYWxNZXNzYWdlIiwgbG9naWNh bG1zZ19yZWRvLCBsb2dpY2FsbXNnX2Rlc2MsIGxvZ2ljYWxtc2dfaWRlbnRpZnksIE5VTEwsIE5V TEwsIE5VTEwsIGxvZ2ljYWxtc2dfZGVjb2RlKQotUEdfUk1HUihSTV9MT0dJQ0FMRERMTVNHX0lE LCAiTG9naWNhbERETE1lc3NhZ2UiLCBsb2dpY2FsZGRsbXNnX3JlZG8sIGxvZ2ljYWxkZGxtc2df ZGVzYywgbG9naWNhbGRkbG1zZ19pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKK1BH X1JNR1IoUk1fTE9HSUNBTERETE1TR19JRCwgIkxvZ2ljYWxERExNZXNzYWdlIiwgbG9naWNhbGRk bG1zZ19yZWRvLCBsb2dpY2FsZGRsbXNnX2Rlc2MsIGxvZ2ljYWxkZGxtc2dfaWRlbnRpZnksIE5V TEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxkZGxfZGVjb2RlKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK aW5kZXggNmNmNzZlMWY5OS4uNTcwMmM0YmM5YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBA IC0xMTg4Miw0ICsxMTg4MiwxNiBAQAogeyBvaWQgPT4gJzQ2NDMnLCBkZXNjciA9PiAnZXhwYW5k IEpTT04gZm9ybWF0IERETCB0byBhIHBsYWluIERETCBjb21tYW5kJywKICAgcHJvbmFtZSA9PiAn ZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKICAgcHJv YXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5k JyB9LAoreyBvaWQgPT4gJzQ2NDQnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQg ZGVwYXJzZSBlbmQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21t YW5kX2VuZCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9 PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZCcgfSwK K3sgb2lkID0+ICc0NjQ1JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFy c2Ugc3RhcnQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5k X3N0YXJ0JywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQnIH0s Cit7IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBh cnNlIHRhYmxlIHJld3JpdGUnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3Rh YmxlX3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlw ZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJyB9 LAoreyBvaWQgPT4gJzQ2NDcnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVw YXJzZSB0YWJsZSBpbml0JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJs ZV9pbml0X3dyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5 cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0 ZScgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24u aCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAppbmRleCBlY2Y1YTI4ZTAw Li5jYzk1MDQzNmEzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0 aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCkBAIC01NCw2 ICs1NCw5IEBAIENBVEFMT0cocGdfcHVibGljYXRpb24sNjEwNCxQdWJsaWNhdGlvblJlbGF0aW9u SWQpCiAKIAkvKiB0cnVlIGlmIHBhcnRpdGlvbiBjaGFuZ2VzIGFyZSBwdWJsaXNoZWQgdXNpbmcg cm9vdCBzY2hlbWEgKi8KIAlib29sCQlwdWJ2aWFyb290OworCisJLyogdHJ1ZSBpZiBkZGxzIGFy ZSBwdWJsaXNoZWQgKi8KKwlib29sCQlwdWJkZGw7CiB9IEZvcm1EYXRhX3BnX3B1YmxpY2F0aW9u OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC03Miw2ICs3NSw3IEBAIHR5cGVkZWYgc3RydWN0 IFB1YmxpY2F0aW9uQWN0aW9ucwogCWJvb2wJCXB1YnVwZGF0ZTsKIAlib29sCQlwdWJkZWxldGU7 CiAJYm9vbAkJcHVidHJ1bmNhdGU7CisJYm9vbAkJcHViZGRsOwogfSBQdWJsaWNhdGlvbkFjdGlv bnM7CiAKIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uRGVzYwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5oCmluZGV4IDQ3MDk0NzUyZTkuLjk0MjgxNmY2ZDYgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9jb21t YW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTk0LDYgKzk0LDEwIEBAIGV4dGVybiB2b2lkIEV2ZW50 VHJpZ2dlckRETENvbW1hbmRFbmQoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50 VHJpZ2dlclNRTERyb3AoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dl clRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9pZCB0YWJsZU9pZCwgaW50IHJlYXNvbik7 CiAKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQoTm9kZSAqcGFy c2V0cmVlKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlKE5vZGUgKnBh cnNldHJlZSwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dl clRhYmxlSW5pdFdyaXRlRW5kKE9iamVjdEFkZHJlc3MgYWRkcmVzcyk7CisKIGV4dGVybiBib29s IEV2ZW50VHJpZ2dlckJlZ2luQ29tcGxldGVRdWVyeSh2b2lkKTsKIGV4dGVybiB2b2lkIEV2ZW50 VHJpZ2dlckVuZENvbXBsZXRlUXVlcnkodm9pZCk7CiBleHRlcm4gYm9vbCB0cmFja0Ryb3BwZWRP YmplY3RzTmVlZGVkKHZvaWQpOwpAQCAtMTEwLDcgKzExNCwxMiBAQCBleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFuZChPYmplY3RBZGRyZXNzIGFkZHJlc3MsCiBleHRl cm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKTsKIGV4 dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQgb2JqZWN0SWQpOwogZXh0 ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21k LAotCQkJCQkJCQkJCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKKwkJCQkJCQkJCQkJCU9iamVj dEFkZHJlc3MgYWRkcmVzcywKKwkJCQkJCQkJCQkJCWJvb2wgcmV3cml0ZSk7CisKK2V4dGVybiB2 b2lkIEV2ZW50VHJpZ2dlckFsdGVyVHlwZVN0YXJ0KEFsdGVyVGFibGVDbWQgKnN1YmNtZCwgUmVs YXRpb24gcmVsKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVHlwZUVuZChOb2RlICpz dWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcywKKwkJCQkJCQkJCSBib29sIHJld3JpdGUpOwog ZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZUVuZCh2b2lkKTsKIAogZXh0ZXJuIHZv aWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEdyYW50KEludGVybmFsR3JhbnQgKmlzdG10KTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vZGVjb2RlLmgKaW5kZXggNzQxYmY2NWNmNy4uZjI3MWY0YjM2MSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vZGVjb2RlLmgKQEAgLTI3LDYgKzI3LDcgQEAgZXh0ZXJuIHZvaWQgaGVhcDJfZGVj b2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsK IGV4dGVybiB2b2lkIHhhY3RfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExv Z1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIHN0YW5kYnlfZGVjb2RlKExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lk IGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29y ZEJ1ZmZlciAqYnVmKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxkZGxfZGVjb2RlKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIAogZXh0ZXJuIHZvaWQg TG9naWNhbERlY29kaW5nUHJvY2Vzc1JlY29yZChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs CiAJCQkJCQkJCQkJIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vbG9naWNhbHByb3RvLmgKaW5kZXggMWViN2RkYTUyOS4uODU3MmNhNmMxZSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysrIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTYxLDYgKzYxLDcgQEAgdHlwZWRlZiBl bnVtIExvZ2ljYWxSZXBNc2dUeXBlCiAJTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OID0gJ1InLAog CUxPR0lDQUxfUkVQX01TR19UWVBFID0gJ1knLAogCUxPR0lDQUxfUkVQX01TR19NRVNTQUdFID0g J00nLAorCUxPR0lDQUxfUkVQX01TR19EREwgPSAnTCcsCiAJTE9HSUNBTF9SRVBfTVNHX0JFR0lO X1BSRVBBUkUgPSAnYicsCiAJTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkUgPSAnUCcsCiAJTE9HSUNB TF9SRVBfTVNHX0NPTU1JVF9QUkVQQVJFRCA9ICdLJywKQEAgLTIzMCw2ICsyMzEsOSBAQCBleHRl cm4gTGlzdCAqbG9naWNhbHJlcF9yZWFkX3RydW5jYXRlKFN0cmluZ0luZm8gaW4sCiAJCQkJCQkJ CQkgIGJvb2wgKmNhc2NhZGUsIGJvb2wgKnJlc3RhcnRfc2Vxcyk7CiBleHRlcm4gdm9pZCBsb2dp Y2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBY TG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIg KnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBsb2dp Y2FscmVwX3dyaXRlX2RkbChTdHJpbmdJbmZvIG91dCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJ CQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4 dGVybiBjaGFyICpsb2dpY2FscmVwX3JlYWRfZGRsKFN0cmluZ0luZm8gaW4sIFhMb2dSZWNQdHIg KmxzbiwgY29uc3QgY2hhciAqKnByZWZpeCwgU2l6ZSAqc3opOwogZXh0ZXJuIHZvaWQgbG9naWNh bHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJ CQkgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQgKmNvbHVtbnMpOwogZXh0ZXJuIExvZ2ljYWxSZXBS ZWxhdGlvbiAqbG9naWNhbHJlcF9yZWFkX3JlbChTdHJpbmdJbmZvIGluKTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaCBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaAppbmRleCBiN2QyOGQ3MDQ1Li5hZTFhZGRjZTdhIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKKysrIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCkBAIC05MCw2ICs5MCwxOCBA QCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCQlTaXplIG1lc3NhZ2Vfc2l6ZSwKIAkJCQkJ CQkJCQljb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyoKKyAqIENhbGxlZCBmb3IgdGhlIGxvZ2lj YWwgZGVjb2RpbmcgRERMIG1lc3NhZ2VzLgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVj b2RlRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJ CQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExvZ1JlY1B0 ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJ CQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlw ZSwKKwkJCQkJCQkJCQkgICBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkgICBjb25zdCBj aGFyICptZXNzYWdlKTsKKwogLyoKICAqIEZpbHRlciBjaGFuZ2VzIGJ5IG9yaWdpbi4KICAqLwpA QCAtMjAxLDYgKzIxMywxOSBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFtTWVz c2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eAogCQkJCQkJCQkJCQkg IFNpemUgbWVzc2FnZV9zaXplLAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwog CisvKgorICogQ2FsbGJhY2sgZm9yIHN0cmVhbWluZyBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNz YWdlcyBmcm9tIGluLXByb2dyZXNzCisgKiB0cmFuc2FjdGlvbnMuCisgKi8KK3R5cGVkZWYgdm9p ZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJ CQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNo YXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJCSBPaWQgcmVsaWQsCisJCQkJCQkJCQkJCQkgRGVwYXJz ZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLAor CQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCiAvKgogICogQ2FsbGJhY2sgZm9y IHN0cmVhbWluZyB0cnVuY2F0ZXMgZnJvbSBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuCiAgKi8K QEAgLTIyMSw2ICsyNDYsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQbHVnaW5DYWxsYmFja3MK IAlMb2dpY2FsRGVjb2RlVHJ1bmNhdGVDQiB0cnVuY2F0ZV9jYjsKIAlMb2dpY2FsRGVjb2RlQ29t bWl0Q0IgY29tbWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVNZXNzYWdlQ0IgbWVzc2FnZV9jYjsKKwlM b2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCIGRkbF9jYjsKIAlMb2dpY2FsRGVjb2RlRmlsdGVyQnlP cmlnaW5DQiBmaWx0ZXJfYnlfb3JpZ2luX2NiOwogCUxvZ2ljYWxEZWNvZGVTaHV0ZG93bkNCIHNo dXRkb3duX2NiOwogCkBAIC0yMzksNiArMjY1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3V0cHV0UGx1 Z2luQ2FsbGJhY2tzCiAJTG9naWNhbERlY29kZVN0cmVhbUNvbW1pdENCIHN0cmVhbV9jb21taXRf Y2I7CiAJTG9naWNhbERlY29kZVN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2VfY2I7CiAJTG9n aWNhbERlY29kZVN0cmVhbU1lc3NhZ2VDQiBzdHJlYW1fbWVzc2FnZV9jYjsKKwlMb2dpY2FsRGVj b2RlU3RyZWFtRERMTWVzc2FnZUNCIHN0cmVhbV9kZGxfY2I7CiAJTG9naWNhbERlY29kZVN0cmVh bVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlX2NiOwogfSBPdXRwdXRQbHVnaW5DYWxsYmFja3M7 CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmggYi9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCmluZGV4IDAyMDI3NTUwZTIuLjgzZTBiMWUy ZTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKKysrIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaApAQCAtMjUsNiArMjUsNyBAQCB0eXBl ZGVmIHN0cnVjdCBQR091dHB1dERhdGEKIAl1aW50MzIJCXByb3RvY29sX3ZlcnNpb247CiAJTGlz dAkgICAqcHVibGljYXRpb25fbmFtZXM7CiAJTGlzdAkgICAqcHVibGljYXRpb25zOworCUxpc3QJ ICAgKmRlbGV0ZWRfcmVsaWRzOwogCWJvb2wJCWJpbmFyeTsKIAlib29sCQlzdHJlYW1pbmc7CiAJ Ym9vbAkJbWVzc2FnZXM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9y ZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKaW5k ZXggYzcwMGI1NWIxYy4uZDI1NjViYjI1ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3Jk ZXJidWZmZXIuaApAQCAtMTEsNiArMTEsOCBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0 YWlscy5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgi CisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv c2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2luY2x1ZGUgInV0aWxzL3Jl bGNhY2hlLmgiCkBAIC01Niw2ICs1OCw3IEBAIHR5cGVkZWYgZW51bSBSZW9yZGVyQnVmZmVyQ2hh bmdlVHlwZQogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlNFUlQsCiAJUkVPUkRFUl9CVUZGRVJf Q0hBTkdFX1VQREFURSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfREVMRVRFLAorCVJFT1JERVJf QlVGRkVSX0NIQU5HRV9EREwsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX01FU1NBR0UsCiAJUkVP UkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTiwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0Vf SU5URVJOQUxfU05BUFNIT1QsCkBAIC0xMzAsNiArMTMzLDE2IEBAIHR5cGVkZWYgc3RydWN0IFJl b3JkZXJCdWZmZXJDaGFuZ2UKIAkJCWNoYXIJICAgKm1lc3NhZ2U7CiAJCX0JCQltc2c7CiAKKwkJ LyogRERMICovCisJCXN0cnVjdAorCQl7CisJCQljaGFyCSAgICpwcmVmaXg7CisJCQlTaXplCQlt ZXNzYWdlX3NpemU7CisJCQljaGFyCSAgICptZXNzYWdlOworCQkJT2lkCQkJcmVsaWQ7CisJCQlE ZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGU7CisJCX0JCQlkZGw7CisKIAkJLyogTmV3IHNuYXBz aG90LCBzZXQgd2hlbiBhY3Rpb24gPT0gKl9JTlRFUk5BTF9TTkFQU0hPVCAqLwogCQlTbmFwc2hv dAlzbmFwc2hvdDsKIApAQCAtNDQyLDYgKzQ1NSwxNiBAQCB0eXBlZGVmIHZvaWQgKCpSZW9yZGVy QnVmZmVyTWVzc2FnZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJCQkJCQkJCQkJY29uc3QgY2hh ciAqcHJlZml4LCBTaXplIHN6LAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisv KiBEREwgbWVzc2FnZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KK3R5cGVkZWYgdm9pZCAoKlJlb3Jk ZXJCdWZmZXJERExNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKKwkJCQkJCQkJCQkgICBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xz biwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJICAgT2lkIHJl bGlkLAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJ CQkgICBTaXplIHN6LAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCiAvKiBi ZWdpbiBwcmVwYXJlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRl ckJ1ZmZlckJlZ2luUHJlcGFyZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJCQkJCQkJCQkJCSBS ZW9yZGVyQnVmZmVyVFhOICp0eG4pOwpAQCAtNTA4LDYgKzUzMSwxNyBAQCB0eXBlZGVmIHZvaWQg KCpSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCKSAoCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hh ciAqcHJlZml4LCBTaXplIHN6LAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwog CisvKiBzdHJlYW0gRERMIG1lc3NhZ2UgY2FsbGJhY2sgc2lnbmF0dXJlICovCit0eXBlZGVmIHZv aWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNCKSAoCisJCQkJCQkJCQkJCQkgUmVv cmRlckJ1ZmZlciAqcmIsCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJ CQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJCQkgY29uc3QgY2hh ciAqcHJlZml4LAorCQkJCQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkJCSBEZXBhcnNl ZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6ZSBzeiwKKwkJCQkJCQkJCQkJ CSBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyogc3RyZWFtIHRydW5jYXRlIGNhbGxiYWNrIHNp Z25hdHVyZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0Ip ICgKIAkJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlciAqcmIsCkBAIC01NTgsNiArNTkyLDcgQEAg c3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyQXBwbHlUcnVuY2F0ZUNCIGFwcGx5 X3RydW5jYXRlOwogCVJlb3JkZXJCdWZmZXJDb21taXRDQiBjb21taXQ7CiAJUmVvcmRlckJ1ZmZl ck1lc3NhZ2VDQiBtZXNzYWdlOworCVJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IgZGRsOwogCiAJ LyoKIAkgKiBDYWxsYmFja3MgdG8gYmUgY2FsbGVkIHdoZW4gc3RyZWFtaW5nIGEgdHJhbnNhY3Rp b24gYXQgcHJlcGFyZSB0aW1lLgpAQCAtNTc3LDYgKzYxMiw3IEBAIHN0cnVjdCBSZW9yZGVyQnVm ZmVyCiAJUmVvcmRlckJ1ZmZlclN0cmVhbUNvbW1pdENCIHN0cmVhbV9jb21taXQ7CiAJUmVvcmRl ckJ1ZmZlclN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2U7CiAJUmVvcmRlckJ1ZmZlclN0cmVh bU1lc3NhZ2VDQiBzdHJlYW1fbWVzc2FnZTsKKwlSZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2Fn ZUNCIHN0cmVhbV9kZGw7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3Ry dW5jYXRlOwogCiAJLyoKQEAgLTY1Niw2ICs2OTIsOSBAQCBleHRlcm4gdm9pZCBSZW9yZGVyQnVm ZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJ CQkJCQkJCSAgU25hcHNob3Qgc25hcCwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJCQkgIGJvb2wg dHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCQkJICBTaXplIG1lc3Nh Z2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVy UXVldWVERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwgWExvZ1JlY1B0 ciBsc24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUs CisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21t YW5kVHlwZSBjbWR0eXBlKTsKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJDb21taXQoUmVvcmRl ckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQlYTG9nUmVjUHRyIGNvbW1p dF9sc24sIFhMb2dSZWNQdHIgZW5kX2xzbiwKIAkJCQkJCQkJVGltZXN0YW1wVHogY29tbWl0X3Rp bWUsIFJlcE9yaWdpbklkIG9yaWdpbl9pZCwgWExvZ1JlY1B0ciBvcmlnaW5fbHNuKTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggYi9zcmMvaW5jbHVkZS91dGlscy9l dnRjYWNoZS5oCmluZGV4IGRkYjY3YTY4ZmEuLjFlNjQ4MzE3YWUgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUu aApAQCAtMjIsNyArMjIsOCBAQCB0eXBlZGVmIGVudW0KIAlFVlRfRERMQ29tbWFuZFN0YXJ0LAog CUVWVF9ERExDb21tYW5kRW5kLAogCUVWVF9TUUxEcm9wLAotCUVWVF9UYWJsZVJld3JpdGUKKwlF VlRfVGFibGVSZXdyaXRlLAorCUVWVF9UYWJsZUluaXRXcml0ZQogfSBFdmVudFRyaWdnZXJFdmVu dDsKIAogdHlwZWRlZiBzdHJ1Y3QKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcHNxbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CmluZGV4IDhm YzYyY2ViZDIuLmViYmRmYTkwMjAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcHNxbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dApAQCAt NjE5NCw5ICs2MTk0LDkgQEAgTGlzdCBvZiBzY2hlbWFzCiAoMCByb3dzKQogCiBcZFJwICJuby5z dWNoLnB1YmxpY2F0aW9uIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBw dWJsaWNhdGlvbnMKLSBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0rLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlv bnMKKyBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0rLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQogKDAgcm93cykKIAogXGRScyAibm8uc3VjaC5zdWJzY3JpcHRpb24iCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CmluZGV4IDQyN2Y4N2VhMDcuLmUwNjRl OTM2ZTcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24u b3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CkBAIC0z MCwyMCArMzAsMjAgQEAgRVJST1I6ICBjb25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0aW9ucwog TElORSAxOiAuLi51Yl94eHggV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSAndHJ1 ZScsIHB1Ymxpc2hfdmkuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBeCiBcZFJwCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAgTmFtZSAg ICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwaWJfaW5z X3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZhdWx0ICAg IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgICBOYW1l ICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t CisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IGYgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYK KyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgZiAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgog KDIgcm93cykKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFNFVCAocHVibGlz aCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlJyk7CiBcZFJwCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAg TmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3Rw aWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZh dWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAg ICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBE REwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAg IHwgZgogKDIgcm93cykKIAogLS0tIGFkZGluZyB0YWJsZXMKQEAgLTg3LDEwICs4NywxMCBAQCBS RVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogLS0gc2hvdWxkIGJlIGFibGUgdG8gYWRkIHNjaGVt YSB0byAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9m b3J0YWJsZSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9y dGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CkBAIC05OSwyMCArOTksMjAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoK IC0tIHNob3VsZCBiZSBhYmxlIHRvIGRyb3Agc2NoZW1hIGZyb20gJ0ZPUiBUQUJMRScgcHVibGlj YXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgRFJPUCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg ZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVz OgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQg c2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViX2ZvcnRhYmxlIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1 Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERE TCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3Qi CiAKQEAgLTEyMywxMCArMTIzLDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNj aGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIENSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViX2Zvcl90Ymxfc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0LCBUQUJM RSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRS cCsgdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJw dWJfdGVzdC50ZXN0cHViX25vcGsiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtMTM1LDEwICsx MzUsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGFkZCBh IHRhYmxlIG9mIHRoZSBzYW1lIHNjaGVtYSB0byB0aGUgc2NoZW1hIHB1YmxpY2F0aW9uCiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBBREQgVEFCTEUgcHViX3Rlc3QudGVzdHB1 Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAi cHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogVGFibGVzIGZyb20gc2NoZW1hczoKQEAgLTE0NywxMCAr MTQ3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBzaG91bGQgYmUgYWJsZSB0byBkcm9w IHRoZSB0YWJsZQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgRFJPUCBUQUJM RSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QiCiAKQEAgLTE2MSwxMCArMTYx LDEwIEBAIEVSUk9SOiAgcmVsYXRpb24gInRlc3RwdWJfbm9wayIgaXMgbm90IHBhcnQgb2YgdGhl IHB1YmxpY2F0aW9uCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQgdGFibGUgdG8gc2NoZW1hIHB1 YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBTRVQgVEFCTEUg cHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK IFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogCkBAIC0xODYsMTAgKzE4Niwx MCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9yYWxsdGFibGVzIgogCiBcZFJwKyB0 ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlcworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKICgxIHJvdykKIAogRFJPUCBUQUJMRSB0 ZXN0cHViX3RibDI7CkBAIC0yMDEsMTkgKzIwMSwxOSBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVz dHB1YjMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHVi NCBGT1IgVEFCTEUgT05MWSB0ZXN0cHViX3RibDM7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2Vz OwogXGRScCsgdGVzdHB1YjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERM IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDMiCiAg ICAgInB1YmxpYy50ZXN0cHViX3RibDNhIgogCiBcZFJwKyB0ZXN0cHViNAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNAorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHVibGljLnRlc3RwdWJfdGJsMyIKIApAQCAtMjM0LDEwICsyMzQsMTAgQEAgVVBEQVRFIHRl c3RwdWJfcGFydGVkMSBTRVQgYSA9IDE7CiAtLSBvbmx5IHBhcmVudCBpcyBsaXN0ZWQgYXMgYmVp bmcgaW4gcHVibGljYXRpb24sIG5vdCB0aGUgcGFydGl0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcnBhcnRlZCBBREQgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBcZFJwKyB0ZXN0cHVi X2ZvcnBhcnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9ycGFydGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERE TCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQi CiAKQEAgLTI1MiwxMCArMjUyLDEwIEBAIEFMVEVSIFRBQkxFIHRlc3RwdWJfcGFydGVkIERFVEFD SCBQQVJUSVRJT04gdGVzdHB1Yl9wYXJ0ZWQxOwogVVBEQVRFIHRlc3RwdWJfcGFydGVkMSBTRVQg YSA9IDE7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCBTRVQgKHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CiBcZFJwKyB0ZXN0cHViX2ZvcnBhcnRlZAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVk Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgdAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgdAogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTI4NCwxMCAr Mjg0LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViNSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3Ri bDIgV0hFUkUgKGMgPD4gJ3Rlc3QnIEFORCBkIDwgNSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQn KTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYg ICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJs MiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkgQU5EIChkIDwgNSkpCkBAIC0zMDAsMTAgKzMw MCwxMCBAQCBUYWJsZXM6CiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEFERCBUQUJMRSB0 ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPiAxMDAwIEFORCBlIDwgMjAwMCk7CiBcZFJwKyB0ZXN0 cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGlj LnRlc3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkgQU5EIChkIDwgNSkp CkBAIC0zMTksMTAgKzMxOSwxMCBAQCBQdWJsaWNhdGlvbnM6CiAKIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWI1IERST1AgVEFCTEUgdGVzdHB1Yl9yZl90YmwyOwogXGRScCsgdGVzdHB1YjUKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCBmICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHVi X3JmX3RibDMiIFdIRVJFICgoZSA+IDEwMDApIEFORCAoZSA8IDIwMDApKQpAQCAtMzMwLDEwICsz MzAsMTAgQEAgVGFibGVzOgogLS0gcmVtb3ZlIHRlc3RwdWJfcmZfdGJsMSBhbmQgYWRkIHRlc3Rw dWJfcmZfdGJsMyBhZ2FpbiAoYW5vdGhlciBXSEVSRSBleHByZXNzaW9uKQogQUxURVIgUFVCTElD QVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA+IDMwMCBB TkQgZSA8IDUwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3Rw dWJfcmZfdGJsMyIgV0hFUkUgKChlID4gMzAwKSBBTkQgKGUgPCA1MDApKQogCkBAIC0zNjYsMTAg KzM2NiwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVC TElDQVRJT04gdGVzdHB1Yl9zeW50YXgxIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIE9OTFkg dGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlIDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcp OwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4MQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IGYgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRl c3RwdWJfcmZfdGJsMyIgV0hFUkUgKGUgPCA5OTkpCkBAIC0zNzksMTAgKzM3OSwxMCBAQCBTRVQg Y2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1 Yl9zeW50YXgyIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfc2NoZW1hMS50 ZXN0cHViX3JmX3RibDUgV0hFUkUgKGggPCA5OTkpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7 CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9zeW50YXgyCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4Mgot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgyCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgZiAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwg ZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJ0ZXN0cHViX3Jm X3NjaGVtYTEudGVzdHB1Yl9yZl90Ymw1IiBXSEVSRSAoaCA8IDk5OSkKQEAgLTQ5NywxMCArNDk3 LDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNiBGT1IgVEFCTEVTIElOIFNDSEVNQSB0 ZXN0cHViX3JmX3NjaGVtYTI7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEVT IElOIFNDSEVNQSB0ZXN0cHViX3JmX3NjaGVtYTIsIFRBQkxFIHRlc3RwdWJfcmZfc2NoZW1hMi50 ZXN0cHViX3JmX3RibDYgV0hFUkUgKGkgPCA5OSk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2Vz OwogXGRScCsgdGVzdHB1YjYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWI2Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjYKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERM IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInRlc3RwdWJfcmZfc2NoZW1hMi50ZXN0 cHViX3JmX3RibDYiIFdIRVJFIChpIDwgOTkpCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtNzE0 LDEwICs3MTQsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIFdJVEgg KHB1Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdl czsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIEFERCBUQUJMRSB0ZXN0cHVi X3RibDUgKGEpOwkJLS0gb2sKIFxkUnArIHRlc3RwdWJfdGFibGVfaW5zCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCBmICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJs ZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDUiIChhKQogCkBAIC04OTEsMTAgKzg5MSwxMCBA QCBDUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChhIGludCwgYiBpbnQsIGMg aW50LCBQUklNQVJZIEtFWSAoYSxjKSk7CiBBTFRFUiBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2Zp bHRlcnMgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibF9ib3RoX2ZpbHRl cnNfcGtleTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfYm90aF9maWx0ZXJzIEFERCBUQUJM RSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEsYykgV0hFUkUgKGMgIT0gMSk7CiBcZFJwKyB0 ZXN0cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRl c3RwdWJfdGJsX2JvdGhfZmlsdGVycyIgKGEsIGMpIFdIRVJFIChjIDw+IDEpCiAKQEAgLTEwOTks MTAgKzEwOTksMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1Yl90YmwxIiBpcyBhbHJlYWR5 IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwKIENSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViX2ZvcnRibCBGT1IgVEFCTEUgdGVzdHB1Yl90YmwxOwogRVJST1I6ICBwdWJsaWNh dGlvbiAidGVzdHB1Yl9mb3J0YmwiIGFscmVhZHkgZXhpc3RzCiBcZFJwKyB0ZXN0cHViX2ZvcnRi bAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3J0YmwKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRi bAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJs aWMudGVzdHB1Yl90YmwxIgpAQCAtMTE0MCwxMCArMTE0MCwxMCBAQCBQdWJsaWNhdGlvbnM6CiAg ICAgInRlc3RwdWJfZm9ydGJsIgogCiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCiBUYWJs ZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAgICAicHVibGljLnRlc3RwdWJfdGJs MSIKQEAgLTEyMjEsMTAgKzEyMjEsMTAgQEAgUkVWT0tFIENSRUFURSBPTiBEQVRBQkFTRSByZWdy ZXNzaW9uIEZST00gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIERST1AgVEFCTEUgdGVzdHB1 Yl9wYXJ0ZWQ7CiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMTsKIFxkUnArIHRlc3RwdWJfZGVmYXVs dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Rl ZmF1bHQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVs dAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgICB8IGYKICgxIHJvdykKIAogLS0gZmFpbCAtIG11c3QgYmUgb3duZXIgb2YgcHVibGljYXRp b24KQEAgLTEyMzQsMjAgKzEyMzQsMjAgQEAgRVJST1I6ICBtdXN0IGJlIG93bmVyIG9mIHB1Ymxp Y2F0aW9uIHRlc3RwdWJfZGVmYXVsdAogUkVTRVQgUk9MRTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZGVmYXVsdCBSRU5BTUUgVE8gdGVzdHB1Yl9mb287CiBcZFJwIHRlc3RwdWJfZm9vCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNh dGlvbnMKLSAgICBOYW1lICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0 cHViX2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICBOYW1l ICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyB0ZXN0cHVi X2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIHJl bmFtZSBiYWNrIHRvIGtlZXAgdGhlIHJlc3Qgc2ltcGxlCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViX2ZvbyBSRU5BTUUgVE8gdGVzdHB1Yl9kZWZhdWx0OwogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1Yl9kZWZhdWx0IE9XTkVSIFRPIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7CiBcZFJwIHRl c3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHB1Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyMiB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBm ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyB0ZXN0cHViX2RlZmF1bHQgfCBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gYWRkaW5nIHNj aGVtYXMgYW5kIHRhYmxlcwpAQCAtMTI2MywxOSArMTI2MywxOSBAQCBDUkVBVEUgVEFCTEUgIkNV UlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hFTUEiKGlkIGludCk7CiBTRVQgY2xpZW50X21pbl9t ZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1h IEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKIENS RUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMl9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEg cHViX3Rlc3QxLCBwdWJfdGVzdDIsIHB1Yl90ZXN0MzsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAg InB1Yl90ZXN0MiIKQEAgLTEyODksNDQgKzEyODksNDQgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWI2X2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSAiQ1VSUkVOVF9TQ0hFTUEiLCBD VVIKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEZPUiBUQUJMRSAiQ1VSUkVO VF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSI7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwog XGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjRfZm9yc2NoZW1hCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjRfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0X2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogCiBcZFJwKyB0ZXN0cHVi NV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjVfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVO VF9TQ0hFTUEiCiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjZfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogICAgICJw dWJsaWMiCiAKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAi Q1VSUkVOVF9TQ0hFTUEuQ1VSUkVOVF9TQ0hFTUEiCiAKQEAgLTEzNjAsMTAgKzEzNjAsMTAgQEAg RVJST1I6ICBzY2hlbWEgInRlc3RwdWJfdmlldyIgZG9lcyBub3QgZXhpc3QKIC0tIGRyb3BwaW5n IHRoZSBzY2hlbWEgc2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJsaWNhdGlvbgogRFJP UCBTQ0hFTUEgcHViX3Rlc3QzOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpA QCAtMTM3MSwyMCArMTM3MSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVuYW1pbmcg dGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9uCiBBTFRF UiBTQ0hFTUEgcHViX3Rlc3QxIFJFTkFNRSB0byBwdWJfdGVzdDFfcmVuYW1lZDsKIFxkUnArIHRl c3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJw dWJfdGVzdDFfcmVuYW1lZCIKICAgICAicHViX3Rlc3QyIgogCiBBTFRFUiBTQ0hFTUEgcHViX3Rl c3QxX3JlbmFtZWQgUkVOQU1FIHRvIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAg InB1Yl90ZXN0MiIKQEAgLTEzOTIsMTAgKzEzOTIsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoK IC0tIGFsdGVyIHB1YmxpY2F0aW9uIGFkZCBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWIxX2ZvcnNjaGVtYSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0 cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHVi X3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDA0LDEwICsxNDA0LDEwIEBAIFRhYmxlcyBm cm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIFRB QkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25f ZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1h Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9y c2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNj aGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAi cHViX3Rlc3QyIgpAQCAtMTQxNiwxMCArMTQxNiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgog QUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBUQUJMRVMgSU4gU0NIRU1B IHB1Yl90ZXN0MTsKIEVSUk9SOiAgc2NoZW1hICJwdWJfdGVzdDEiIGlzIGFscmVhZHkgbWVtYmVy IG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHViMV9mb3JzY2hlbWEiCiBcZFJwKyB0ZXN0cHViMV9mb3Jz Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgog ICAgICJwdWJfdGVzdDIiCkBAIC0xNDI3LDEwICsxNDI3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBkcm9wIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAg ICAicHViX3Rlc3QxIgogCkBAIC0xNDM4LDEwICsxNDM4LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MjsKIEVSUk9SOiAgdGFibGVzIGZyb20gc2NoZW1hICJwdWJfdGVzdDIi IGFyZSBub3QgcGFydCBvZiB0aGUgcHVibGljYXRpb24KIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAg LTE0NDksMjkgKzE0NDksMjkgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50 X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBl eGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogLS0gZHJvcCBhbGwgc2NoZW1hcwogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVz dDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBh bHRlciBwdWJsaWNhdGlvbiBzZXQgbXVsdGlwbGUgc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVz dDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDgwLDEwICsxNDgw LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9m b3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9S OiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1 Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQ5MiwxMCArMTQ5MiwxMCBAQCBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogLS0gcmVtb3ZpbmcgdGhlIGR1cGxpY2F0ZSBzY2hlbWFzCiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rl c3QxLCBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFi bGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTc0LDE4ICsxNTc0LDE4 IEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViM19mb3JzY2hlbWE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsg dGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKICgxIHJvdykKIAogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1YjNfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxk UnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgog ICAgICJwdWJfdGVzdDEiCiAKQEAgLTE1OTUsMjAgKzE1OTUsMjAgQEAgQ1JFQVRFIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90 ZXN0MSwgVEEKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYSBG T1IgVEFCTEUgcHViX3Rlc3QyLnRibDEsIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogUkVT RVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxl Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVt YV9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2No ZW1hX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERE TCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogXGRScCsgdGVzdHB1Yl9mb3J0YWJs ZV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9ydGFibGVfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0Mi50 YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlw dGlvbi90LzAzMl9kZGxfcmVwbGljYXRpb24ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8w MzJfZGRsX3JlcGxpY2F0aW9uLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLjY2ZGNiMDEyYTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCkBAIC0wLDAgKzEsNDY1IEBACisjIENvcHlyaWdodCAo YykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMgUmVncmVzc2lv biB0ZXN0cyBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBERExzCisjCit1c2Ugc3RyaWN0Owor dXNlIHdhcm5pbmdzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5vZGVfcHVibGlzaGVy ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKKyRub2RlX3B1 Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wdWJs aXNoZXItPnN0YXJ0OworCitteSAkbm9kZV9zdWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5pbml0KGFsbG93 c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCitt eSAkZGRsID0gIkNSRUFURSBUQUJMRSB0ZXN0X3JlcChpZCBpbnQgcHJpbWFyeSBrZXksIG5hbWUg dmFyY2hhciwgdmFsdWUgaW50ZWdlcik7IjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICRkZGwpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoMSwgJ2RhdGExJywgMSk7Iik7Ciskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRkbCk7CisKK215ICRwdWJsaXNoZXJf Y29ubnN0ciA9ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1lPXBvc3RncmVzJzsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNB VElPTiBteXB1YiBGT1IgQUxMIFRBQkxFUyB3aXRoIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRl LCBkZWxldGUsIGRkbCcpOyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gbXlzdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9j b25uc3RyJyBQVUJMSUNBVElPTiBteXB1YjsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKworIyBNYWtlIHN1cmUgd2UgaGF2ZSBmdWxseSBzeW5jaHJvbml6 ZWQgdGhlIHRhYmxlLgorIyBUaGlzIHByZXZlbnRzIEFMVEVSIFRBQkxFIGNvbW1hbmQgYmVsb3cg ZnJvbSBiZWluZyBleGVjdXRlZCBkdXJpbmcgdGFibGUgc3luY2hyb25pemF0aW9uLgorJG5vZGVf c3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorICAgIlNFTEVDVCBDT1VO VCgxKSA9IDAgRlJPTSBwZ19zdWJzY3JpcHRpb25fcmVsIHNyIFdIRVJFIHNyLnNyc3Vic3RhdGUg Tk9UIElOICgncycsICdyJykgQU5EIHNyLnNycmVsaWQgPSAndGVzdF9yZXAnOjpyZWdjbGFzcyIK Kyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBREQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBREQgYzQgaW50OyIpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZB TFVFUyAoMiwgJ2RhdGEyJywgMiwgMik7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJ215c3ViJyk7CitteSAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBjNCA9IDI7 Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIEFERCByZXBsaWNhdGVkJyk7 CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBEUk9QCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgRFJPUCBjNDsiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3JlcCB3aGVyZSBp ZCA9IDI7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y291bnQoKikgZnJvbSB0ZXN0X3JlcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVz dF9yZXAgRFJPUCByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBUWVBF Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVz dF9yZXAgQUxURVIgdmFsdWUgVFlQRSB2YXJjaGFyIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgzLCAnZGF0YTMn LCAnMycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgdmFsdWUgPSAnMyc7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIENPTFVNTiBUWVBFIHJlcGxpY2F0ZWQnKTsK KworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBERUZBVUxUCisjIENoZWNrIGlmIHdlIGhh dmUgdGhlIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgdGhlIGRpcmVjdCBpbnNlcnQgdG8gc3Vic2NyaWJl ciBub2RlLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRB QkxFIHRlc3RfcmVwIEFMVEVSIENPTFVNTiB2YWx1ZSBTRVQgREVGQVVMVCAnZm9vJyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDQs ICdkYXRhNCcpOyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIHZhbHVlIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA0OyIpOworaXMo JHJlc3VsdCwgJ2ZvbycsICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBTRVQgREVGQVVMVCByZXBsaWNh dGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBEUk9QIERFRkFVTFQKKyMgQ2hlY2sg aWYgd2UgZG9uJ3QgaGF2ZSB0aGUgZGVmYXVsdCB2YWx1ZSBwcmV2aW91c2x5IGRlZmluZWQuCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9y ZXAgQUxURVIgQ09MVU1OIHZhbHVlIERST1AgREVGQVVMVDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg1LCAnZGF0YTUnKTsiKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCB2YWx1ZSBJUyBOVUxMIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA1OyIpOworaXMoJHJlc3Vs dCwgcSh0KSwgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIERST1AgREVGQVVMVCByZXBsaWNhdGVkJyk7 CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwKKyMgUmVtb3ZlIHRoZSBl eGlzdGluZyByZWNvcmQgdGhhdCBjb250YWlucyBudWxsIHZhbHVlIGZpcnN0LgorbXkgKCRzdGRv dXQsICRzdGRlcnIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE RUxFVEUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgdmFsdWUgU0VU IE5PVCBOVUxMOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9y ZXAgVkFMVUVTICg2LCAnZGF0YTYnKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRlcnIgPX4gL0VSUk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gXCJ2YWx1ZVwiIG9mIHJl bGF0aW9uIFwidGVzdF9yZXBcIiB2aW9sYXRlcyBub3QtbnVsbCBjb25zdHJhaW50LworICBvciBk aWUgImZhaWxlZCB0byByZXBsaWNhdGUgQUxURVIgVEFCTEUgQUxURVIgU0VUIE5PVCBOVUxMIjsK KworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgTk9UIE5VTEwKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1 ZSBEUk9QIE5PVCBOVUxMOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworIyBJbnNlcnQgc2FtZSBkYXRhIHRoYXQgaGFzIE5VTEwgdmFsdWUuIFRoaXMgZmFp bGVkIGJlZm9yZSBidXQgbm93IHNob3VsZCBzdWNjZWVkLgorJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDYsICdkYXRh NicpOyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIHZhbHVlIElTIE5VTEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDY7Iik7Citp cygkcmVzdWx0LCBxKHQpLCAiQUxURVIgdGVzdF9yZXAgQUxURVIgRFJPUCBOT1QgTlVMTCByZXBs aWNhdGVkIik7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgVU5MT0dHRUQKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdBTFRFUiBUQUJMRSB0ZXN0X3JlcCBTRVQgVU5M T0dHRUQ7Jyk7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9y ZXAgVkFMVUVTICg3LCAnZGF0YTcnLCAnNycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA3 OyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdBTFRFUiB0ZXN0X3JlcCBTRVQgVU5MT0dHRUQgcmVw bGljYXRlZCcpOworCisjIFRlc3QgQUxURVIgVEFCTEUgU0VUIExPR0dFRAorJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBMT0dH RUQ7Jyk7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAg VkFMVUVTICg4LCAnZGF0YTgnLCAnOCcpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA4OyIp OworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBTRVQgTE9HR0VEIHJlcGxpY2F0 ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBhbmQgRE1MIGNoYW5nZXMKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChhIGludCwgYiB2 YXJjaGFyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBjb3VudCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lz KCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIHRtcCBpcyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIHZhbHVlcyAoMSwg J2EnKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCB2YWx1ZXMgKDIsICdiJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDIp LCAnRE1MIENoYW5nZXMgdG8gdG1wIGFyZSByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBDUkVBVEUg VEFCTEUgSU5IRVJJVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJD UkVBVEUgVEFCTEUgdG1wMiAoYzMgaW50KSBJTkhFUklUUyAodG1wKTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAyIFZBTFVFUyAoMSwg J2EnLCAxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBjb3VudCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wMic7Iik7Citp cygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJTkhFUklUUyBpcyByZXBsaWNhdGVkJyk7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgY291bnQoKikgZnJvbSB0bXAyOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnRpbmcg c29tZSBkYXRhIHRvIGluaGVyaXRlZCB0YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAyIik7CisKKyMgVGVzdCBD UkVBVEUgVEFCTEUgTElLRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBUQUJMRSB0bXAzIChjMyBpbnQsIExJS0UgdG1wKTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAzIFZBTFVFUyAoMSwgMSwg J2EnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wMyc7Iik7Citpcygk cmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHRtcDM7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydCBzb21lIGRhdGEgdG8g YSB0YWJsZSBkZWZpbmVkIHdpdGggTElLRSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAzIik7CisKKyMgVGVzdCBEUk9Q IFRBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXA7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y291bnQoKikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7Citpcygk cmVzdWx0LCBxcSgwKSwgJ1RBQkxFIHRtcCBpcyBkcm9wcGVkJyk7CisKKyMgVGVzdCBDUkVBVEUg VU5MT0dHRUQgVEFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJD UkVBVEUgVU5MT0dHRUQgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20g cGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoMSks ICdDUkVBVEUgVU5MT0dHRUQgVEFCTEUgaXMgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDApLCAnaW5zZXJ0aW5nIGRhdGEgdG8g dW5sb2dnZWQgdGFibGUgaXMgbm90IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0 IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChpZCBpbnQpOyIpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBW QUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvdW50KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOwor aXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVk Jyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGlu ZyBkYXRhIHRvIGEgdGFibGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUg SUYgTk9UIEVYSVNUUyAoY2hlY2sgaWYgd2Ugc2tpcCB0byBjcmVhdGUgYSB0YWJsZQorIyB3aGVu IHdlIGhhdmUgdGhlIHRhYmxlIG9uIHRoZSBzdWJzY3JpYmVyIGluIGFkdmFuY2UsIGFuZCBpZiB3 ZSBzdWNjZWVkCisjIGluIHJlcGxpY2F0aW5nIGNoYW5nZXMuKQorJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBJRiBOT1Qg RVhJU1RTIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRy ZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7 CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAoY2hlY2sgaWYgd2Ugc2tpcCB0 byBjcmVhdGUgYSB0YWJsZQorIyB3aGVuIHdlIGhhdmUgdGhlIHRhYmxlIG9uIHRoZSBwdWJsaXNo ZXIsIGJ1dCBub3Qgb24gdGhlIHN1YnNjcmliZXIuKQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMg dG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwg cXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBU ZXN0IENSRUFURSBUQUJMRSB3aXRoIGNvbGxhdGUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChuYW1lIHRleHQgQ09MTEFURSBcIkNcIik7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dG1wIFZBTFVFUyAoJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvbGxhdGlvbl9uYW1lIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVt bnMgV0hFUkUgdGFibGVfbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoQyksICdDUkVB VEUgVEFCTEUgd2l0aCBjb2xsYXRlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRB QkxFIHdpdGggbmFtZWQgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBDT05TVFJBSU5UIFwibXVzdCBiZSBi aWdnZXIgdGhhbiAxMFwiIENIRUNLIChpZCA+IDEwKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9w ID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwk c3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRtcCIg dmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAibXVzdCBiZSBiaWdnZXIgdGhhbiAxMCIvCisgIG9y IGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBuYW1lZCBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRh YmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxF IHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSB3aXRoIHZhcmlvdXMgdHlwZXMgb2YgY29u c3RyYWludHMuCisjIE5PVCBOVUxMIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBOT1Qg TlVMTCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk bm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVT ICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBc JHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gIm5hbWUiIG9mIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVz IG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBub24g bnVsbCBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBOVUxMIGNvbnN0cmFp bnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUg dG1wIChpZCBpbnQsIG5hbWUgdGV4dCBOVUxMKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgbmFtZSBJUyBOVUxMIEZST00g dG1wOyIpOworaXMoJHJlc3VsdCwgcXEodCksICJDUkVBVEUgVEFCTEUgd2l0aCBOVUxMIGNvbnN0 cmFpbnQgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgQ0hFQ0sgY29uc3RyYWludAorJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgcHJv ZHVjdF9hbWUgdGV4dCwgcHJpY2UgaW50IENIRUNLIChwcmljZSA+IDApKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nLCAtMTAwKTsi LAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVy ciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3 IHJvdyBmb3IgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX3By aWNlX2NoZWNrIi8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIENIRUNLIGNvbnN0cmFp bnQiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUg dG1wOyIpOworCisjIERFRkFVTFQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBERUZBVUxUICdmb28nKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgbmFtZSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKGZvbyksICJDUkVBVEUg VEFCTEUgd2l0aCBkZWZhdWx0IHZhbHVlIHJlcGxpY2F0ZWQiKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFVOSVFVRSBjb25z dHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIHRtcCAoaWQgaW50IFVOSVFVRSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJv cl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0 ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2 aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX2lkX2tleSIvCisgIG9yIGRpZSAiZmFpbGVk IHRvIHJlcGxpY2F0ZSBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBQUklN QVJZIEtFWQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAn Zm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk bm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVT ICgxLCAnYmFyJyk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRl cnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+ IC9FUlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQg InRtcF9wa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHByaW1hcnkga2V5IGF0 IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBFWENMVURFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIGNpcmNsZXMgKGMgY2lyY2xlLCBFWENMVURF IFVTSU5HIGdpc3QgKGMgV0lUSCAmJikpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGNpcmNsZXMgVkFMVUVTICgnPCgxLCAxKSwgMT4nOjpj aXJjbGUpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOwor JG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gY2lyY2xlcyBW QUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9 PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0 ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRl cyBleGNsdXNpb24gY29uc3RyYWludCAiY2lyY2xlc19jX2V4Y2wiLworICBvciBkaWUgImZhaWxl ZCB0byByZXBsaWNhdGUgRVhDTFVERSBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBjaXJjbGVzIik7CisKKyMgUkVG RVJFTkNFUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSBwcm9kdWN0IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gcHJvZHVjdCBWQUxV RVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBvcmRlcnMgKG9yZGVyX2lk IGludCBQUklNQVJZIEtFWSwgcHJvZHVjdF9pZCBpbnQgUkVGRVJFTkNFUyBwcm9kdWN0IChpZCkp Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBvcmRlcnMgVkFMVUVTICgx LCAxMCkiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBc JHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAib3JkZXJzIiB2aW9sYXRlcyBmb3JlaWduIGtl eSBjb25zdHJhaW50ICJvcmRlcnNfcHJvZHVjdF9pZF9ma2V5Ii8KKyAgb3IgZGllICJmYWlsZWQg dG8gcmVwbGljYXRlIFJFRkVSRU5DRVMgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgb3JkZXJzIik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBwcm9kdWN0Iik7CisK KyMgREVGRVJSQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNS RUFURSBUQUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSBERUZFUlJBQkxFLCBuYW1lIHRleHQp OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRP IHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNoZWNrIG9mIGRl ZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRlIGEgdGVzdCB0 aGF0IHNob3VsZCBmYWlsIGZvciBJTklUSUFMTFkgSU1NRURJQVRFKHRoZSBkZWZhdWx0KQorJG5v ZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRtcCBT RVQgaWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7CitE RUxFVEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSwgb25fZXJyb3Jfc3RvcCA9 PiAwLCBzdGRlcnIgPT4gXCRzdGRlcnIsIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+ IC9FUlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQg InRtcF9wa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIERFRkVSUkFCTEUgYXQg Y3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5PVCBERUZFUlJBQkxFCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IFBSSU1BUlkg S0VZIE5PVCBERUZFUlJBQkxFLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAg VkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJVUERBVEUgdG1w IFNFVCBpZCA9IGlkICsgMTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAg IHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRl cnIgPX4gL0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3Ry YWludCAidG1wX3BrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgTk9UIERFRkVS UkFCTEUgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIERFRkVSUkFCTEUgYW5kIElOSVRJQUxM WSBERUZFUlJFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFU RSBUQUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZF UlJFRCwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMiwgJ2Jh cicpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworIyBR dWljayBjaGVjayBvZiBkZWZlcnJhYmxlIGNsYXVzZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsgMTsiKTsKKyMgQWxzbywg ZXhlY3V0ZSBhIHRlc3QgdGhhdCBzaG91bGQgc3VjY2VlZCBmb3IgSU5JVElBTExZIERFRkVSUkVE Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCitCRUdJTjsKK1VQ REFURSB0bXAgU0VUIGlkID0gaWQgKyAxOworSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMywgJ2Zv b2JhcicpOworREVMRVRFIEZST00gdG1wIFdIRVJFIGlkID0gMzsKK0NPTU1JVDsKKykpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOwor CisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdGFibGUgY29uc3RyYWludAorIyBXZSB3aWxsIHNl dCB0d28gY2hlY2tzIGFuZCBjb25kdWN0IHR3byBpbnNlcnRzIHRoYXQgc2hvdWxkIGZhaWwgcmVz cGVjdGl2ZWx5LgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JF QVRFIFRBQkxFIHRtcCAocHJpY2UgaW50LCBkaXNjb3VudGVkX3ByaWNlIGludCwgQ0hFQ0sgKGRp c2NvdW50ZWRfcHJpY2UgPiAwIEFORCBwcmljZSA+IGRpc2NvdW50ZWRfcHJpY2UpKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEwMCwgMCk7IiwK KwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIs CisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyBy b3cgZm9yIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVj ayIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChmaXJz dCBjb25kaXRpb24pIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDUwLCAxMDApOyIsCisJCQkJCSAg IG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkg ICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciBy ZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfY2hlY2siLworICBv ciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgdGFibGUgY29uc3RyYWludCAoc2Vjb25kIGNvbmRp dGlvbikgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFdJVEgg c3Ryb3JhZ2VfcGFyYW1ldGVyCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KSBXSVRIIChmaWxsZmFjdG9yID0gODApOyIpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBW QUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHJlbG9wdGlvbnMg RlJPTSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lID0gJ3RtcCc7IiwKKwkJCQkJICAgb25fZXJyb3Jf c3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9 PiBcJHN0ZG91dCk7Ciskc3Rkb3V0ID1+IC97ZmlsbGZhY3Rvcj04MH0vCisgIG9yIGRpZSAiZmFp bGVkIHRvIHJlcGxpY2F0ZSBzdG9yYWdlIG9wdGlvbiI7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7 CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSB3aXRoIHN0b3JhZ2VfcGFyYW1ldGVy IHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBUQUJMRVNQQUNFIChjcmVh dGluZyBhIHRhYmxlc3BhY2UgaXMgbm90IHJlcGxpY2F0ZWQpCisjIFByZXBhcmUgdGhlIGRpcmVj dG9yaWVzIGZvciB0aGUgcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGZpcnN0LgorbXkgKCRiYXNl ZGlyLCAkdGFibGVzcGFjZV9kaXIpOworCiskYmFzZWRpciA9ICRub2RlX3B1Ymxpc2hlci0+YmFz ZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFzZWRpci90YmxzcGNfcHViIjsKK21rZGlyKCR0 YWJsZXNwYWNlX2Rpcik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi Q1JFQVRFIFRBQkxFU1BBQ0UgbXl0YmxzcGMgTE9DQVRJT04gJyR0YWJsZXNwYWNlX2Rpcic7Iik7 CiskYmFzZWRpciA9ICRub2RlX3N1YnNjcmliZXItPmJhc2VkaXI7CiskdGFibGVzcGFjZV9kaXIg PSAiJGJhc2VkaXIvdGJsc3BjX3N1YiI7Citta2RpciAoJHRhYmxlc3BhY2VfZGlyKTsKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFU1BBQ0UgbXl0 YmxzcGMgTE9DQVRJT04gJyR0YWJsZXNwYWNlX2Rpcic7Iik7CisKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpIFRBQkxFU1BB Q0UgbXl0YmxzcGM7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0NSRUFURSBUQUJMRSBUQUJMRVNQQUNFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0 IENSRUFURSBUWVBFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRZUEUgbXl0eXBlIEFTIChpZCBpbnQsIG5hbWUgdGV4dCwgYWdlIGludCk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCBPRiBteXR5cGU7Iik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZB TFVFUyAoMSwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVB VEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUWVBFIG15dHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIEVOVU0gVFlQ RQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUWVBFIG15 ZW51bXR5cGUgQVMgRU5VTSAoJ25ldycsICdvcGVuJywgJ2Nsb3NlZCcpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKHN0YXR1cyBteWVudW10eXBlKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0 bXAgVkFMVUVTICgnbmV3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgKiBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKG5ldyksICdDUkVBVEUg VEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiRFJPUCBUWVBFIG15ZW51bXR5cGUiKTsKKworIyBUZXN0IENSRUFURSBSQU5HRSBU WVBFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUg ZmxvYXQ4X3JhbmdlIEFTIFJBTkdFIChzdWJ0eXBlID0gZmxvYXQ4LCBzdWJ0eXBlX2RpZmYgPSBm bG9hdDhtaSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRt cCAodmFsIGZsb2F0OF9yYW5nZSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiaW5zZXJ0IGludG8gdG1wIHZhbHVlcyhmbG9hdDhfcmFuZ2UoLTEyLjM0LCAnMS4x MTExMTNlMycpKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCAqIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoWy0xMi4zNCwxMTExLjExM1wpKSwg J0NSRUFURSBUQUJMRSBPRiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRZUEUgZmxvYXQ4X3JhbmdlIik7CisKKyMgVGVzdCBDUkVB VEUgQkFTRSBEQVRBIFRZUEUgYW5kIHVzZSBpdCBpbiB0YWJsZSBkZWZpbml0aW9uCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiCitDUkVBVEUgVFlQRSBpbnQ0MjsKK0NS RUFURSBGVU5DVElPTiBpbnQ0Ml9pbihjc3RyaW5nKQorICAgUkVUVVJOUyBpbnQ0MgorICAgQVMg J2ludDRpbicKKyAgIExBTkdVQUdFIGludGVybmFsIFNUUklDVCBJTU1VVEFCTEU7CitDUkVBVEUg RlVOQ1RJT04gaW50NDJfb3V0KGludDQyKQorICAgUkVUVVJOUyBjc3RyaW5nCisgICBBUyAnaW50 NG91dCcKKyAgIExBTkdVQUdFIGludGVybmFsIFNUUklDVCBJTU1VVEFCTEU7CitDUkVBVEUgVFlQ RSBpbnQ0MiAoCisgICBpbnRlcm5hbGxlbmd0aCA9IDQsCisgICBpbnB1dCA9IGludDQyX2luLAor ICAgb3V0cHV0ID0gaW50NDJfb3V0LAorICAgYWxpZ25tZW50ID0gaW50NCwKKyAgIGRlZmF1bHQg PSA0MiwKKyAgIHBhc3NlZGJ5dmFsdWUKKyk7CitDUkVBVEUgVEFCTEUgdG1wIChmMSBpbnQ0Mik7 CitJTlNFUlQgSU5UTyB0bXAgREVGQVVMVCBWQUxVRVM7CisiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwg cXEoNDIpLCAnQ1JFQVRFIFRBQkxFIE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVFlQRSBpbnQ0MiBjYXNjYWRlIik7CisKK3Bh c3MgIkRETCByZXBsaWNhdGlvbiB0ZXN0cyBwYXNzZWQ6IjsKKworJG5vZGVfc3Vic2NyaWJlci0+ c3RvcDsKKyRub2RlX3B1Ymxpc2hlci0+c3RvcDsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1n aXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CmluZGV4IGZlMzMwYjQwODQuLjYzN2YxMmQzOTIgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC01NTksNiArNTU5LDcgQEAgRGVmRWxlbUFjdGlvbgogRGVmYXVs dEFDTEluZm8KIERlZmluZVN0bXQKIERlbGV0ZVN0bXQKK0RlcGFyc2VkQ29tbWFuZFR5cGUKIERl cGVuZGVuY3lHZW5lcmF0b3IKIERlcGVuZGVuY3lHZW5lcmF0b3JEYXRhCiBEZXBlbmRlbmN5VHlw ZQpAQCAtMTQzOSw2ICsxNDQwLDggQEAgTG9naWNhbERlY29kZUJlZ2luUHJlcGFyZUNCCiBMb2dp Y2FsRGVjb2RlQ2hhbmdlQ0IKIExvZ2ljYWxEZWNvZGVDb21taXRDQgogTG9naWNhbERlY29kZUNv bW1pdFByZXBhcmVkQ0IKK0xvZ2ljYWxEZWNvZGVERExNZXNzYWdlQ0IKK0xvZ2ljYWxEZWNvZGVT dHJlYW1ERExNZXNzYWdlQ0IKIExvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdpbkNCCiBMb2dpY2Fs RGVjb2RlRmlsdGVyUHJlcGFyZUNCCiBMb2dpY2FsRGVjb2RlTWVzc2FnZUNCCkBAIC0yMjg2LDYg KzIyODksOCBAQCBSZW9yZGVyQnVmZmVyQ2hhbmdlCiBSZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZQog UmVvcmRlckJ1ZmZlckNvbW1pdENCCiBSZW9yZGVyQnVmZmVyQ29tbWl0UHJlcGFyZWRDQgorUmVv cmRlckJ1ZmZlckRETE1lc3NhZ2VDQgorUmVvcmRlckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VDQgog UmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UKIFJlb3JkZXJCdWZmZXJJdGVyVFhORW50cnkKIFJlb3Jk ZXJCdWZmZXJJdGVyVFhOU3RhdGUKLS0gCjIuMzQuMQoK --000000000000aabe2b05f059cb57 Content-Type: text/x-patch; charset="US-ASCII"; name="v55-0002-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v55-0002-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbxx7xw91 RnJvbSA4MGNhN2QxYjQ2MTlmNWQzZWZmZTEzMGNmM2ZkODJkNGRlZTc4YjkwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFdlZCwgMjEgRGVjIDIwMjIgMTc6MTU6MDggKzA1MzAKU3ViamVjdDogW1BBVENIIHY1NSAyLzVd IEZ1bmN0aW9ucyB0byBkZXBhcnNlIERETCBjb21tYW5kcy4KClRoaXMgcGF0Y2ggcHJvdmlkZXMg SlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4KbGF0ZXIgYmUg cmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQgc3ByaW50Zi1s aWtlCmV4cGFuc2lvbi4gVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0byBhbGxvdyBm b3IgbWFjaGluZS1lZGl0aW5nIG9mCnRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5nIGNlcnRhaW4g bm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgoKTXVjaCBvZiB0aGUgaW5mb3JtYXRpb24gaW4gdGhl IG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCmNhdGFsb2dzLCBub3QgZnJv bSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRvIHJlbGlhYmx5 CmNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBub3QgZGVwZW5k ZW50IG9uIHNlYXJjaF9wYXRoCmV0YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJzZSBub2RlLgoK VGhpcyBwcm92aWRlcyBhIGJhc2UgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gb2YgRERMIHN0YXRl bWVudHMuIEN1cnJlbnRseSwKdGhlIHBhdGNoIGhhcyBzdXBwb3J0IGZvcjoKCkNSRUFURS9EUk9Q IEFDQ0VTUyBNRVRIT0QKQ1JFQVRFL0FMVEVSL0RST1AgQ0FTVApDUkVBVEUvQUxURVIvRFJPUCBD T0xMQVRJT04KQ09NTUVOVApDUkVBVEUvQUxURVIvRFJPUCBDT05WRVJTSU9OCkFMVEVSIERFRkFV TFQgUFJJVklMRUdFUwpDUkVBVEUvQUxURVIvRFJPUCBET01BSU4KQ1JFQVRFL0FMVEVSL0RST1Ag RVhURU5TSU9OCkNSRUFURS9BTFRFUi9EUk9QIEZPUkVJR04gREFUQSBXUkFQUEVSCkNSRUFURS9B TFRFUi9EUk9QIEZPUkVJR04gVEFCTEUKQ1JFQVRFL0FMVEVSIEZVTkNUSU9OL1BST0NFRFVSRQpH UkFOVApDUkVBVEUvRFJPUCBJTkRFWApDUkVBVEUvQUxURVIvRFJPUCBMQU5HVUFHRQpDUkVBVEUv QUxURVIvRFJPUCBNQVRFUklBTElaRUQgVklFVwpDUkVBVEUvRFJPUCBPUEVSQVRPUiBbQ0xBU1Mv RkFNSUxZXQpDUkVBVEUvQUxURVIvRFJPUCBQT0xJQ1kKUkVGUkVTSCBNQVRFUklBTElaRUQgVklF VwpSRVZPS0UKQUxURVIvRFJPUCBST1VUSU5FCkNSRUFURS9BTFRFUi9EUk9QIFJVTEUKQ1JFQVRF L0FMVEVSL0RST1AgU0NIRU1BCkNSRUFURS9BTFRFUi9EUk9QIFNFUVVFTkNFCkNSRUFURS9BTFRF Ui9EUk9QIFNFUlZFUgpDUkVBVEUvQUxURVIvRFJPUCBTVEFUSVNUSUNTCkNSRUFURS9BTFRFUi9E Uk9QIFRBQkxFIC0tIE5vdGUgIzEsIE5vdGUgIzIKQ1JFQVRFL0FMVEVSL0RST1AgVEVYVCBTRUFS Q0ggQ09ORklHVVJBVElPTi9QQVJTRVIvRElDVElPTkFSWS9URU1QTEFURQpDUkVBVEUvRFJPUCBU UkFOU0ZPUk0KQ1JFQVRFL0FMVEVSIFRSSUdHRVIKQ1JFQVRFL0FMVEVSL0RST1AgVFlQRQpDUkVB VEUvQUxURVIvRFJPUCBVU0VSIE1BUFBJTkcKQ1JFQVRFL0FMVEVSL0RST1AgVklFVyAtLSBOb3Rl ICM0ClNFQ1VSSVRZIExBQkVMCgooTm90ZSAjMSkgU29tZSByZWNlbnRseSBpbnRyb2R1Y2VkIERE THMoZS5nLiBERExzIHJlbGF0ZWQgdG8KUEFSVElUSU9ORUQgVEFCTEUpIGFyZSB1bnN1cHBvcnRl ZC4gV2UgY2FuIGV4dGVuZCBpdCBhcyB3ZSBuZWVkIG1vcmUKZnVuY3Rpb25hbGl0eSBmb3IgRERM IHJlcGxpY2F0aW9uLgoKKE5vdGUgIzIpIEZvciBBVFRBQ0gvREVUQUNIIFBBUlRJVElPTiwgd2Ug aGF2ZW4ndCBhZGRlZCBleHRyYSBsb2dpYyBvbgp0aGUgc3Vic2NyaWJlciB0byBoYW5kbGUgdGhl IGNhc2Ugd2hlcmUgdGhlIHRhYmxlIG9uIHRoZSBwdWJsaXNoZXIgaXMgYSBQQVJUSVRJT05FRApU QUJMRSB3aGlsZSB0aGUgdGFyZ2V0IHRhYmxlIG9uIHRoZSBzdWJjcmliZXIgc2lkZSBpcyBhIE5P Uk1BTCB0YWJsZS4gV2Ugd2lsbApyZXNlYXJjaCB0aGlzIG1vcmUgYW5kIGltcHJvdmUgaXQgbGF0 ZXIuCgooTm90ZSAjMykgUmVtb3ZlZCBhbiB1bmRlc2lyYWJsZSAnb24nIGZyb20gdGhlIGlkZW50 aXR5IHN0cmluZyBmb3IgVFJBTlNGT1JNCmluIGdldE9iamVjdElkZW50aXR5UGFydHMuIFRoaXMg aXMgbmVlZGVkIHRvIG1ha2UgZGVwYXJzZSBvZiBEUk9QClRSQU5TRk9STSBjb21tYW5kIHdvcmsg c2luY2UgJ29uJyBpcyBub3QgcHJlc2VudCBpbiB0aGUgY3VycmVudApEUk9QIFRSQU5TRk9STSBz eW50YXguIEZvciBleGFtcGxlLCB0aGUgY29ycmVjdCBzeW50YXggaXMKRFJPUCBUUkFOU0ZPUk0g dHJmIEZPUiBJTlQgTEFOR1VBR0UgU1FMOwppbnN0ZWFkIG9mCkRST1AgVFJBTlNGT1JNIHRyZiBG T1IgSU5UIE9OIExBTkdVQUdFIFNRTDsKCihOb3RlICM0KSBGb3IgVklFV1NUTVQsIHdlIGNyZWF0 ZWQgcGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwgdG8gZ2V0IHRoZQpTRUxFQ1QgcXVlcnkgb2YgdGhl IHBlbmRpbmcgVklFV1NUTVQuIEluIHRoZSBjYXNlIHRoYXQgdGhlIENSRUFURSBWSUVXIGNvbW1h bmQKaXMgc3RpbGwgaW4gcHJvZ3Jlc3MsIHdlIHdvdWxkIG5lZWQgdG8gc2VhcmNoIHRoZSBzeXN0 ZW0gY2FjaGUgUlVMRVJFTE5BTUUgdG8gZ2V0IHRoZQpyZXdyaXRlIHJ1bGUgb2YgdGhlIHZpZXcg YXMgb3Bwb3NlIHRvIHF1ZXJ5aW5nIHBnX3Jld3JpdGUgYXMgaW4gcGdfZ2V0X3ZpZXdkZWZfd29y a2VyKCksCnRoZSBsYXR0ZXIgd2lsbCByZXR1cm4gZW1wdHkgcmVzdWx0LgotLS0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL01ha2VmaWxlICAgICAgfCAgICAyICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9kZXBhcnNlLmMgfCA5Mjc4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9i YWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgICAgfCAgNzc2ICsrKwogc3JjL2JhY2tlbmQvY29t bWFuZHMvbWVzb24uYnVpbGQgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdCAgICB8ICAgIDYgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICB8ICAg IDEgKwogc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oICAgICB8ICAgMjMgKwogc3JjL2lu Y2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCB8ICAgMTEgKy0KIHNyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0ICAgfCAgICA0ICsKIDkgZmlsZXMgY2hhbmdlZCwgMTAxMDIgaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNzU1IHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbF9kZXBhcnNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfanNvbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvdGNvcC9kZGxf ZGVwYXJzZS5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQppbmRleCA0OGY3MzQ4ZjkxLi4xNzFkZmIyODAw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQorKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9NYWtlZmlsZQpAQCAtMjksNiArMjksOCBAQCBPQkpTID0gXAogCWNvcHl0 by5vIFwKIAljcmVhdGVhcy5vIFwKIAlkYmNvbW1hbmRzLm8gXAorCWRkbF9kZXBhcnNlLm8gXAor CWRkbF9qc29uLm8gXAogCWRlZmluZS5vIFwKIAlkaXNjYXJkLm8gXAogCWRyb3BjbWRzLm8gXApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw MDAwMDAwMC4uYzRhOTg2MDgzNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2RkbF9kZXBhcnNlLmMKQEAgLTAsMCArMSw5Mjc4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBkZGxfZGVwYXJzZS5jCisgKgkgIEZ1bmN0aW9ucyB0byBjb252ZXJ0IHV0aWxpdHkg Y29tbWFuZHMgdG8gbWFjaGluZS1wYXJzZWFibGUKKyAqCSAgcmVwcmVzZW50YXRpb24KKyAqCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBv ZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogTk9URVMKKyAqCisgKiBUaGlz IGlzIGludGVuZGVkIHRvIHByb3ZpZGUgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1h bmRzLCB3aGljaCBjYW4KKyAqIGxhdGVyIGJlIHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmlu Z3MgYnkgd2VsbC1kZWZpbmVkIHNwcmludGYtbGlrZQorICogZXhwYW5zaW9uLiAgVGhlc2UgSlNP TiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCisg KiB0aGUgY29tbWFuZHMsIGJ5IHJlcGxhY2luZyBjZXJ0YWluIG5vZGVzIHdpdGhpbiB0aGUgb2Jq ZWN0cy4KKyAqCisgKiBNdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgb3V0cHV0IGJsb2Ig YWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KKyAqIGNhdGFsb2dzLCBub3QgZnJvbSB0aGUgY29t bWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRvIHJlbGlhYmx5CisgKiBjb25z dHJ1Y3QgYSBmdWxseS1zcGVjaWZpZWQgY29tbWFuZCAoaS5lLiBvbmUgbm90IGRlcGVuZGVudCBv biBzZWFyY2hfcGF0aAorICogZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5vZGUuCisg KgorICogRGVwYXJzZSBvYmplY3QgdHJlZSBpcyBjcmVhdGVkIGJ5IHVzaW5nOgorICogCWEpIG5l d19vYmp0cmVlKCJrbm93IGNvbnRlbnRzIikgd2hlcmUgdGhlIGNvbXBsZXRlIHRyZWUgY29udGVu dCBpcyBrbm93biBvcgorICogICAgIHRoZSBpbml0aWFsIHRyZWUgY29udGVudCBpcyBrbm93bi4K KyAqIAliKSBuZXdfb2JqdHJlZSgiIikgZm9yIHRoZSBzeW50YXggd2hlcmUgdGhlIG9iamVjdCB0 cmVlIHdpbGwgYmUgZGVyaXZlZAorICogICAgIGJhc2VkIG9uIHNvbWUgY29uZGl0aW9uYWwgY2hl Y2tzLgorICogCWMpIG5ld19vYmp0cmVlX1ZBIHdoZXJlIHRoZSBjb21wbGV0ZSB0cmVlIGNhbiBi ZSBkZXJpdmVkIHVzaW5nIHNvbWUgZml4ZWQKKyAqICAgICBjb250ZW50IGFuZC9vciBzb21lIHZh cmlhYmxlIGFyZ3VtZW50cy4KKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNp bmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVk ZSAiYWNjZXNzL3JlbGF0aW9uLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2Nhc3QuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf Y29uc3RyYWludC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udmVyc2lvbi5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfZGVwZW5kLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19leHRlbnNpb24u aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19mb3JlaWduX3NlcnZlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5o ZXJpdHMuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19sYXJnZW9iamVjdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19v cGVyYXRvci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BmYW1pbHkuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3BvbGljeS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfcmFuZ2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Jld3JpdGUuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19z dGF0aXN0aWNfZXh0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190cmFuc2Zvcm0uaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX3RzX2NvbmZpZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfZGlj dC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfcGFyc2VyLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ190c190ZW1wbGF0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfdXNlcl9tYXBwaW5nLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVt LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy90 YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiZm9yZWlnbi9mb3JlaWduLmgiCisjaW5jbHVkZSAiZnVu Y2FwaS5oIgorI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZUZ1 bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUgIm9wdGltaXpl ci9vcHRpbWl6ZXIuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfdHlwZS5oIgorI2luY2x1ZGUg InJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgi CisjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIK KyNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2lu Y2x1ZGUgInV0aWxzL2pzb25iLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5j bHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMvcnVsZXV0aWxzLmgiCisjaW5jbHVk ZSAidXRpbHMvc3lzY2FjaGUuaCIKKworLyogRXN0aW1hdGVkIGxlbmd0aCBvZiB0aGUgZ2VuZXJh dGVkIGpzb25iIHN0cmluZyAqLworI2RlZmluZSBKU09OQl9FU1RJTUFURURfTEVOIDEyOAorCisv KgorICogQmVmb3JlIHRoZXkgYXJlIHR1cm5lZCBpbnRvIEpTT05CIHJlcHJlc2VudGF0aW9uLCBl YWNoIGNvbW1hbmQgaXMKKyAqIHJlcHJlc2VudGVkIGFzIGFuIG9iamVjdCB0cmVlLCB1c2luZyB0 aGUgc3RydWN0cyBiZWxvdy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJT2JqVHlwZU51bGwsCisJ T2JqVHlwZUJvb2wsCisJT2JqVHlwZVN0cmluZywKKwlPYmpUeXBlQXJyYXksCisJT2JqVHlwZUlu dGVnZXIsCisJT2JqVHlwZUZsb2F0LAorCU9ialR5cGVPYmplY3QKK30gT2JqVHlwZTsKKworLyoK KyAqIFJlcHJlc2VudCB0aGUgY29tbWFuZCBhcyBhbiBvYmplY3QgdHJlZS4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgT2JqVHJlZQoreworCXNsaXN0X2hlYWQJcGFyYW1zOwkJCS8qIE9iamVjdCB0cmVl IHBhcmFtZXRlcnMgKi8KKwlpbnQJCQludW1QYXJhbXM7CQkvKiBOdW1iZXIgb2YgcGFyYW1ldGVy cyBpbiB0aGUgb2JqZWN0IHRyZWUgKi8KKwlTdHJpbmdJbmZvCWZtdGluZm87CQkvKiBGb3JtYXQg c3RyaW5nIG9mIHRoZSBPYmpUcmVlICovCisJYm9vbAkJcHJlc2VudDsJCS8qIEluZGljYXRlcyBp ZiBib29sZWFuIHZhbHVlIHNob3VsZCBiZSBzdG9yZWQgKi8KK30gT2JqVHJlZTsKKworLyoKKyAq IEFuIGVsZW1lbnQgb2YgYW4gb2JqZWN0IHRyZWUgKE9ialRyZWUpLgorICovCit0eXBlZGVmIHN0 cnVjdCBPYmpFbGVtCit7CisJY2hhcgkgICAqbmFtZTsJCQkvKiBOYW1lIG9mIG9iamVjdCBlbGVt ZW50ICovCisJT2JqVHlwZQkJb2JqdHlwZTsJCS8qIE9iamVjdCB0eXBlICovCisKKwl1bmlvbgor CXsKKwkJYm9vbAkJYm9vbGVhbjsKKwkJY2hhcgkgICAqc3RyaW5nOworCQlpbnQ2NAkJaW50ZWdl cjsKKwkJZmxvYXQ4CQlmbHQ7CisJCU9ialRyZWUgICAgKm9iamVjdDsKKwkJTGlzdAkgICAqYXJy YXk7CisJfQkJCXZhbHVlOwkJCS8qIFN0b3JlIHRoZSBvYmplY3QgdmFsdWUgYmFzZWQgb24gdGhl IG9iamVjdAorCQkJCQkJCQkgKiB0eXBlICovCisJc2xpc3Rfbm9kZQlub2RlOwkJCS8qIFVzZWQg aW4gY29udmVydGluZyBiYWNrIHRvIE9iakVsZW0KKwkJCQkJCQkJICogc3RydWN0dXJlICovCit9 IE9iakVsZW07CisKKy8qCisgKiBSZWR1Y2Ugc29tZSB1bm5lY2Vzc2FyeSBzdHJpbmdzIGZyb20g dGhlIG91dHB1dCBqc29uIHdoZW4gdmVyYm9zZQorICogYW5kICJwcmVzZW50IiBtZW1iZXIgaXMg ZmFsc2UuIFRoaXMgbWVhbnMgdGhlc2Ugc3RyaW5ncyB3b24ndCBiZSBtZXJnZWQgaW50bworICog dGhlIGxhc3QgRERMIGNvbW1hbmQuCisgKi8KK2Jvb2wJCXZlcmJvc2UgPSB0cnVlOworCitzdGF0 aWMgdm9pZCBhcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQs IExpc3QgKmFycmF5KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0 cmVlLCBjaGFyICpzdWJfZm10LCBib29sIHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9mbG9h dF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgZmxvYXQ4IHZhbHVlKTsKK3N0 YXRpYyB2b2lkIGFwcGVuZF9udWxsX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10 KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIg KnN1Yl9mbXQsIE9ialRyZWUgKnZhbHVlKTsKK3N0YXRpYyBjaGFyICphcHBlbmRfb2JqZWN0X3Rv X2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCk7CitzdGF0aWMgdm9p ZCBhcHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxlbSAqZWxlbSk7Citz dGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJf Zm10LCBjaGFyICpuYW1lLAorCQkJCQkJCQkgY2hhciAqdmFsdWUpOworc3RhdGljIHZvaWQgZm9y bWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJCQkJCQkg T2lkICpuc3BpZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkJCQkg Ym9vbCAqdHlwYXJyYXkpOworc3RhdGljIExpc3QgKkZ1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAq cHJvYXJnZGVmYXVsdHMpOworc3RhdGljIE9iakVsZW0gKm5ld19vYmplY3QoT2JqVHlwZSB0eXBl LCBjaGFyICpuYW1lKTsKK3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoT2lkIGNsYXNzSWQsIE9pZCBvYmplY3RJZCk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRy ZWVfZm9yX3JvbGVzcGVjKFJvbGVTcGVjICpzcGVjKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfb2Jq ZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVf VkEoY2hhciAqZm10LCBpbnQgbnVtb2JqcywuLi4pOworc3RhdGljIE9iakVsZW0gKm5ld19zdHJp bmdfb2JqZWN0KGNoYXIgKnZhbHVlKTsKK3N0YXRpYyBKc29uYlZhbHVlICpvYmp0cmVlX3RvX2pz b25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKTsKK3N0YXRpYyB2 b2lkIHBnX2dldF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJCQkJCQkJCSBj aGFyICoqaW5kZXhfYW0sCisJCQkJCQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkJCQkg Y2hhciAqKnJlbG9wdGlvbnMsCisJCQkJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkJ CQkgY2hhciAqKndoZXJlQ2xhdXNlKTsKK3N0YXRpYyBjaGFyICpSZWxhdGlvbkdldENvbHVtbkRl ZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG5vLAorCQkJCQkJCQkJICBMaXN0ICpk cGNvbnRleHQsIExpc3QgKipleHBycyk7CisKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVt bkRlZihSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBib29sIGNvbXBvc2l0ZSwK KwkJCQkJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRlciwgTGlzdCAqKmV4cHJz KTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtbklkZW50aXR5KE9pZCBzZXFyZWxpZCwg Y2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJz ZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCk7CitzdGF0aWMgT2JqVHJl ZSAqZGVwYXJzZV9EZWZpbmVTdG10X0NvbGxhdGlvbihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQg KmRlZmluZSwKKwkJCQkJCQkJCQkJIE9iamVjdEFkZHJlc3MgZnJvbUNvbGxpZCk7CitzdGF0aWMg T2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5l U3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShP aWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJz ZV9EZWZpbmVTdG10X1RTQ29uZmlnKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lLCBP YmplY3RBZGRyZXNzIGNvcGllZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10 X1RTUGFyc2VyKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpU cmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNEaWN0aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVmaW5l U3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNUZW1w bGF0ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CisKK3N0YXRpYyBPYmpUcmVl ICpkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNldCk7CitzdGF0aWMg T2JqVHJlZSAqZGVwYXJzZV9GdW5jdGlvblNldChWYXJpYWJsZVNldEtpbmQga2luZCwgY2hhciAq bmFtZSwgY2hhciAqdmFsdWUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfT25Db21taXRDbGF1 c2UoT25Db21taXRBY3Rpb24gb3B0aW9uKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX1JlbFNl dE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKKworc3RhdGljIGlubGluZSBPYmpFbGVt ICpkZXBhcnNlX1NlcV9DYWNoZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJf dGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DeWNsZShGb3JtX3Bn X3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpF bGVtICpkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJv b2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9NaW52 YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGlj IGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9NYXh2YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNl cWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIE9iakVsZW0gKmRlcGFyc2VfU2VxX093 bmVkQnkoT2lkIHNlcXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBP YmpFbGVtICpkZXBhcnNlX1NlcV9SZXN0YXJ0KEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRh KTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfU3RhcnR3aXRoKEZvcm1fcGdf c2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKmRlcGFyc2VfU2VxX0FzKERlZkVsZW0gKmVsZW0pOworc3RhdGljIGlubGluZSBPYmpFbGVt ICpkZXBhcnNlX1R5cGVfU3RvcmFnZShGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9SZWNlaXZlKEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsK K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1NlbmQoRm9ybV9wZ190eXBlIHR5 cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfVHlwbW9kX0luKEZv cm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBl X1R5cG1vZF9PdXQoRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVt ICpkZXBhcnNlX1R5cGVfQW5hbHl6ZShGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9TdWJzY3JpcHQoRm9ybV9wZ190eXBlIHR5cEZvcm0p OworCitzdGF0aWMgTGlzdCAqZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKTsKK3N0 YXRpYyBMaXN0ICpkZXBhcnNlX1RhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3Qg KnRhYmxlRWxlbWVudHMsIExpc3QgKmRwY29udGV4dCwKKwkJCQkJCQkJICAgYm9vbCB0eXBlZCwg Ym9vbCBjb21wb3NpdGUpOworCitzdGF0aWMgY2hhciAqRG9tYWluR2V0RGVmYXVsdChIZWFwVHVw bGUgZG9tVHVwLCBib29sIG1pc3Npbmdfb2spOworCisvKgorICogQXBwZW5kIHByZXNlbnQgYXMg ZmFsc2UgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX25vdF9wcmVzZW50KE9i alRyZWUgKnRyZWUpCit7CisJYXBwZW5kX2Jvb2xfb2JqZWN0KHRyZWUsICJwcmVzZW50IiwgZmFs c2UpOworfQorCisvKgorICogQWRkIGNvbW1vbiBjbGF1c2VzIHRvIENyZWF0ZVBvbGljeSBvciBB bHRlclBvbGljeSBkZXBhcnNlIG9iamVjdHMuCisgKi8KK3N0YXRpYyB2b2lkCithZGRfcG9saWN5 X2NsYXVzZXMoT2JqVHJlZSAqcmV0LCBPaWQgcG9saWN5T2lkLCBMaXN0ICpyb2xlcywgYm9vbCBk b19xdWFsLAorCQkJCSAgIGJvb2wgZG9fd2l0aF9jaGVjaykKK3sKKwlSZWxhdGlvbglwb2xSZWwg PSB0YWJsZV9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJSGVhcFR1 cGxlCXBvbFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocG9sUmVsLCBBbnVtX3BnX3Bv bGljeV9vaWQsIHBvbGljeU9pZCk7CisJRm9ybV9wZ19wb2xpY3kgcG9sRm9ybTsKKworCWlmICgh SGVhcFR1cGxlSXNWYWxpZChwb2xUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgcG9saWN5IHdpdGggT0lEICV1IiwgcG9saWN5T2lkKTsKKworCXBvbEZvcm0gPSAo Rm9ybV9wZ19wb2xpY3kpIEdFVFNUUlVDVChwb2xUdXApOworCisJLyogQWRkIHRoZSAiT04gdGFi bGUiIGNsYXVzZSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIk9OICV7dGFibGV9RCIs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkgcG9sRm9ybS0+cG9scmVsaWQpKTsKKworCS8qCisJICogQWRkIHRoZSAi VE8gcm9sZSIgY2xhdXNlLCBpZiBhbnkuICBJbiB0aGUgQ1JFQVRFIGNhc2UsIGl0IGFsd2F5cwor CSAqIGNvbnRhaW5zIGF0IGxlYXN0IFBVQkxJQywgYnV0IGluIHRoZSBBTFRFUiBjYXNlIGl0IG1p Z2h0IGJlIGVtcHR5LgorCSAqLworCWlmIChyb2xlcykKKwl7CisJCUxpc3QJICAgKmxpc3QgPSBO SUw7CisJCUxpc3RDZWxsICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCByb2xlcykKKwkJewor CQkJUm9sZVNwZWMgICAqc3BlYyA9IChSb2xlU3BlYyAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWxp c3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCQkgICBuZXdfb2JqZWN0X29iamVjdChuZXdfb2JqdHJl ZV9mb3Jfcm9sZXNwZWMoc3BlYykpKTsKKwkJfQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwg IlRPICV7cm9sZTosIH1SIiwgbGlzdCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50 KHJldCk7CisKKwkvKiBBZGQgdGhlIFVTSU5HIGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRvX3F1 YWwpCisJeworCQlEYXR1bQkJZGVwYXJzZWQ7CisJCURhdHVtCQlzdG9yZWRleHByOworCQlib29s CQlpc251bGw7CisKKwkJc3RvcmVkZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1fcGdf cG9saWN5X3BvbHF1YWwsCisJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwb2xSZWwpLCAmaXNu dWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJudWxsIHBvbHF1YWwgZXhwcmVz c2lvbiBpbiBwb2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCQlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0 aW9uQ2FsbDIocGdfZ2V0X2V4cHIsIHN0b3JlZGV4cHIsIHBvbEZvcm0tPnBvbHJlbGlkKTsKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiVVNJTkcgKCV7ZXhwcmVzc2lvbn1zKSIsICJleHBy ZXNzaW9uIiwKKwkJCQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCX0KKwll bHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJLyogQWRkIHRoZSBXSVRIIENIRUNL IGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRvX3dpdGhfY2hlY2spCisJeworCQlEYXR1bQkJZGVw YXJzZWQ7CisJCURhdHVtCQlzdG9yZWRleHByOworCQlib29sCQlpc251bGw7CisKKwkJc3RvcmVk ZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1fcGdfcG9saWN5X3BvbHdpdGhjaGVjaywK KwkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBvbFJlbCksICZpc251bGwpOworCQlpZiAoaXNu dWxsKQorCQkJZWxvZyhFUlJPUiwgIm51bGwgcG9sd2l0aGNoZWNrIGV4cHJlc3Npb24gaW4gcG9s aWN5ICV1IiwgcG9saWN5T2lkKTsKKwkJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBn X2dldF9leHByLCBzdG9yZWRleHByLCBwb2xGb3JtLT5wb2xyZWxpZCk7CisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHJldCwgIldJVEggQ0hFQ0sgKCV7ZXhwcmVzc2lvbn1zKSIsCisJCQkJCQkJICJl eHByZXNzaW9uIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCX0KKwllbHNlCisJ CWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmVsYXRpb25fY2xvc2UocG9sUmVsLCBBY2Nl c3NTaGFyZUxvY2spOworfQorCisvKgorICogQXBwZW5kIGFuIGFycmF5IHBhcmFtZXRlciB0byBh IHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRy ZWUsIGNoYXIgKnN1Yl9mbXQsIExpc3QgKmFycmF5KQoreworCU9iakVsZW0gICAgKnBhcmFtOwor CWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKGxpc3Rf bGVuZ3RoKGFycmF5KSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoIXZlcmJvc2UpCisJeworCQlM aXN0Q2VsbCAgICpsYzsKKworCQkvKiBSZW1vdmUgZWxlbWVudHMgd2hlcmUgcHJlc2VudCBmbGFn IGlzIGZhbHNlICovCisJCWZvcmVhY2gobGMsIGFycmF5KQorCQl7CisJCQlPYmpFbGVtICAgICpl bGVtID0gKE9iakVsZW0gKikgbGZpcnN0KGxjKTsKKworCQkJQXNzZXJ0KGVsZW0tPm9ianR5cGUg PT0gT2JqVHlwZU9iamVjdCB8fAorCQkJCSAgIGVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZVN0cmlu Zyk7CisKKwkJCWlmICghZWxlbS0+dmFsdWUub2JqZWN0LT5wcmVzZW50ICYmCisJCQkJZWxlbS0+ b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0KQorCQkJCWFycmF5ID0gZm9yZWFjaF9kZWxldGVfY3Vy cmVudChhcnJheSwgbGMpOworCQl9CisKKwl9CisKKwkvKiBDaGVjayBmb3IgZW1wdHkgbGlzdCBh ZnRlciByZW1vdmluZyBlbGVtZW50cyAqLworCWlmIChsaXN0X2xlbmd0aChhcnJheSkgPT0gMCkK KwkJcmV0dXJuOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJp bmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZUFycmF5LCBv YmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmFycmF5ID0gYXJyYXk7CisJYXBwZW5kX3ByZW1h ZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVuZCBhIGJvb2xlYW4gcGFy YW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9ib29sX29iamVjdChP YmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBib29sIHZhbHVlKQoreworCU9iakVsZW0gICAg KnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lID0gc3ViX2ZtdDsKKwlib29sCQlpc19wcmVz ZW50X2ZsYWcgPSBmYWxzZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCS8qCisJICogQ2hlY2sg aWYgdGhlIGZvcm1hdCBzdHJpbmcgaXMgJ3ByZXNlbnQnIGFuZCBpZiB5ZXMsIHN0b3JlIHRoZSBi b29sZWFuCisJICogdmFsdWUKKwkgKi8KKwlpZiAoc3RyY21wKHN1Yl9mbXQsICJwcmVzZW50Iikg PT0gMCkKKwl7CisJCWlzX3ByZXNlbnRfZmxhZyA9IHRydWU7CisJCXRyZWUtPnByZXNlbnQgPSB2 YWx1ZTsKKwl9CisKKwlpZiAoIXZlcmJvc2UgJiYgIXRyZWUtPnByZXNlbnQpCisJCXJldHVybjsK KworCWlmICghaXNfcHJlc2VudF9mbGFnKQorCQlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3Rf dG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChP YmpUeXBlQm9vbCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5ib29sZWFuID0gdmFsdWU7 CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVu ZCBhIGZsb2F0OCBwYXJhbWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5k X2Zsb2F0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBmbG9hdDggdmFsdWUp Cit7CisJT2JqRWxlbSAgICAqcGFyYW07CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3Nl cnQoc3ViX2ZtdCk7CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0 cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlRmxvYXQs IG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuZmx0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1h ZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVuZCB0aGUgaW5wdXQgZm9y bWF0IHN0cmluZyB0byB0aGUgT2JqVHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9mb3Jt YXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJaW50CQkJbGVuOwor CWNoYXIJICAgKmZtdDsKKworCWlmICh0cmVlLT5mbXRpbmZvID09IE5VTEwpCisJCXJldHVybjsK KworCWZtdCA9IHRyZWUtPmZtdGluZm8tPmRhdGE7CisJbGVuID0gdHJlZS0+Zm10aW5mby0+bGVu OworCisJLyogQWRkIGEgc2VwYXJhdG9yIGlmIG5lY2Vzc2FyeSAqLworCWlmIChsZW4gPiAwICYm IGZtdFtsZW4gLSAxXSAhPSAnICcpCisJCWFwcGVuZFN0cmluZ0luZm9TcGFjZXModHJlZS0+Zm10 aW5mbywgMSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHRyZWUtPmZtdGluZm8sIHN1Yl9m bXQpOworfQorCisvKgorICogQXBwZW5kIGEgTlVMTCBvYmplY3QgdG8gYSB0cmVlLgorICovCitz dGF0aWMgdm9pZAorYXBwZW5kX251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9m bXQpCit7CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlp ZiAoIXZlcmJvc2UpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90 b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0 KHRyZWUsIG5ld19vYmplY3QoT2JqVHlwZU51bGwsIG9iamVjdF9uYW1lKSk7Cit9CisKKy8qCisg KiBBcHBlbmQgYW4gb2JqZWN0IHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lk CithcHBlbmRfb2JqZWN0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBPYmpU cmVlICp2YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFt ZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9zZSAmJiAhdmFsdWUtPnByZXNl bnQpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRf c3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVPYmpl Y3QsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUub2JqZWN0ID0gdmFsdWU7CisJYXBwZW5k X3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgb2Jq ZWN0IG5hbWUgd2hpY2ggaXMgZXh0cmFjdGVkIGZyb20gdGhlIGlucHV0ICIqJXtuYW1lWzouXX0q IgorICogc3R5bGUgc3RyaW5nLiBBbmQgYXBwZW5kIHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5nIHRv IHRoZSBPYmpUcmVlLgorICovCitzdGF0aWMgY2hhciAqCithcHBlbmRfb2JqZWN0X3RvX2Zvcm1h dF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwlTdHJpbmdJbmZvRGF0 YSBvYmplY3RfbmFtZTsKKwljb25zdCBjaGFyICplbmRfcHRyOworCWNvbnN0IGNoYXIgKmNwOwor CWJvb2wJCXN0YXJ0X2NvcHkgPSBmYWxzZTsKKworCWlmIChzdWJfZm10ID09IE5VTEwgfHwgdHJl ZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gc3ViX2ZtdDsKKworCWluaXRTdHJpbmdJbmZv KCZvYmplY3RfbmFtZSk7CisJZW5kX3B0ciA9IHN1Yl9mbXQgKyBzdHJsZW4oc3ViX2ZtdCk7CisK Kwlmb3IgKGNwID0gc3ViX2ZtdDsgY3AgPCBlbmRfcHRyOyBjcCsrKQorCXsKKwkJaWYgKCpjcCA9 PSAneycpCisJCXsKKwkJCXN0YXJ0X2NvcHkgPSB0cnVlOworCQkJY29udGludWU7CisJCX0KKwor CQlpZiAoIXN0YXJ0X2NvcHkpCisJCQljb250aW51ZTsKKworCQlpZiAoKmNwID09ICc6JyB8fCAq Y3AgPT0gJ30nKQorCQkJYnJlYWs7CisKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmb2Jq ZWN0X25hbWUsICpjcCk7CisJfQorCisJaWYgKG9iamVjdF9uYW1lLmxlbiA9PSAwKQorCQllbG9n KEVSUk9SLCAib2JqZWN0IG5hbWUgbm90IGZvdW5kIik7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmlu Zyh0cmVlLCBzdWJfZm10KTsKKworCXJldHVybiBvYmplY3RfbmFtZS5kYXRhOworfQorCisvKgor ICogQXBwZW5kIGEgcHJlYWxsb2NhdGVkIHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRp YyBpbmxpbmUgdm9pZAorYXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9iakVs ZW0gKmVsZW0pCit7CisJc2xpc3RfcHVzaF9oZWFkKCZ0cmVlLT5wYXJhbXMsICZlbGVtLT5ub2Rl KTsKKwl0cmVlLT5udW1QYXJhbXMrKzsKK30KKworLyoKKyAqIEFwcGVuZCBhIHN0cmluZyBwYXJh bWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX3N0cmluZ19vYmplY3Qo T2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgY2hhciAqIG9iamVjdF9uYW1lLAorCQkJCQkg Y2hhciAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisKKwlBc3NlcnQoc3ViX2ZtdCk7 CisKKwlpZiAoIXZlcmJvc2UgJiYgKHZhbHVlID09IE5VTEwgfHwgdmFsdWVbMF0gPT0gJ1wwJykp CisJCXJldHVybjsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCXBh cmFtID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5nLCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZh bHVlLnN0cmluZyA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7 Cit9CisKKy8qCisgKiBTaW1pbGFyIHRvIGZvcm1hdF90eXBlX2V4dGVuZGVkLCBleGNlcHQgd2Ug cmV0dXJuIGVhY2ggYml0IG9mIGluZm9ybWF0aW9uCisgKiBzZXBhcmF0ZWx5OgorICoKKyAqIC0g bnNwaWQgaXMgdGhlIHNjaGVtYSBPSUQuICBGb3IgY2VydGFpbiBTUUwtc3RhbmRhcmQgdHlwZXMg d2hpY2ggaGF2ZSB3ZWlyZAorICogICB0eXBtb2QgcnVsZXMsIHdlIHJldHVybiBJbnZhbGlkT2lk OyB0aGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIG5vdCBzY2hlbWEtCisgKiAgIHF1YWxpZnkgdGhl IG5hbWUgbm9yIGFkZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGlzIGNhc2UuCisgKgor ICogLSB0eXBuYW1lIGlzIHNldCB0byB0aGUgdHlwZSBuYW1lLCB3aXRob3V0IHF1b3RlcworICoK KyAqIC0gdHlwZW1vZHN0ciBpcyBzZXQgdG8gdGhlIHR5cGVtb2QsIGlmIGFueSwgYXMgYSBzdHJp bmcgd2l0aCBwYXJlbnRoZXNlcworICoKKyAqIC0gdHlwYXJyYXkgaW5kaWNhdGVzIHdoZXRoZXIg W11zIG11c3QgYmUgYWRkZWQKKyAqCisgKiBXZSBkb24ndCB0cnkgdG8gZGVjb2RlIHR5cGUgbmFt ZXMgdG8gdGhlaXIgc3RhbmRhcmQtbWFuZGF0ZWQgbmFtZXMsIGV4Y2VwdAorICogaW4gdGhlIGNh c2VzIG9mIHR5cGVzIHdpdGggdW51c3VhbCB0eXBtb2QgcnVsZXMuCisgKi8KK3N0YXRpYyB2b2lk Citmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCisJCQkJ CSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwZW5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkg Ym9vbCAqdHlwZWFycmF5KQoreworCUhlYXBUdXBsZQl0dXBsZTsKKwlGb3JtX3BnX3R5cGUgdHlw ZWZvcm07CisJT2lkCQkJYXJyYXlfYmFzZV90eXBlOworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNo ZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bSh0eXBlX29pZCkpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZCh0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0 eXBlIHdpdGggT0lEICV1IiwgdHlwZV9vaWQpOworCisJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBl KSBHRVRTVFJVQ1QodHVwbGUpOworCisJLyoKKwkgKiBDaGVjayBpZiBpdCdzIGEgcmVndWxhciAo dmFyaWFibGUgbGVuZ3RoKSBhcnJheSB0eXBlLiAgQXMgYWJvdmUsCisJICogZml4ZWQtbGVuZ3Ro IGFycmF5IHR5cGVzIHN1Y2ggYXMgIm5hbWUiIHNob3VsZG4ndCBnZXQgZGVjb25zdHJ1Y3RlZC4K KwkgKi8KKwlhcnJheV9iYXNlX3R5cGUgPSB0eXBlZm9ybS0+dHlwZWxlbTsKKworCSp0eXBlYXJy YXkgPSAoSXNUcnVlQXJyYXlUeXBlKHR5cGVmb3JtKSAmJiB0eXBlZm9ybS0+dHlwc3RvcmFnZSAh PSBUWVBTVE9SQUdFX1BMQUlOKTsKKworCWlmICgqdHlwZWFycmF5KQorCXsKKwkJLyogU3dpdGNo IG91ciBhdHRlbnRpb24gdG8gdGhlIGFycmF5IGVsZW1lbnQgdHlwZSAqLworCQlSZWxlYXNlU3lz Q2FjaGUodHVwbGUpOworCQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJ ZEdldERhdHVtKGFycmF5X2Jhc2VfdHlwZSkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVw bGUpKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBP SUQgJXUiLCB0eXBlX29pZCk7CisKKwkJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJV Q1QodHVwbGUpOworCQl0eXBlX29pZCA9IGFycmF5X2Jhc2VfdHlwZTsKKwl9CisKKwkvKgorCSAq IFNwZWNpYWwtY2FzZSBjcm9jayBmb3IgdHlwZXMgd2l0aCBzdHJhbmdlIHR5cG1vZCBydWxlcyB3 aGVyZSB3ZSBwdXQKKwkgKiB0eXBlbW9kIGF0IHRoZSBtaWRkbGUgb2YgbmFtZSAoZS5nLiBUSU1F KDYpIHdpdGggdGltZSB6b25lKS4gV2UgY2Fubm90CisJICogc2NoZW1hLXF1YWxpZnkgbm9yIGFk ZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGVzZSBjYXNlcy4KKwkgKi8KKwkqbnNwaWQg PSBJbnZhbGlkT2lkOworCisJc3dpdGNoICh0eXBlX29pZCkKKwl7CisJCWNhc2UgSU5URVJWQUxP SUQ6CisJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJJTlRFUlZBTCIpOworCQkJYnJlYWs7CisJCWNh c2UgVElNRVNUQU1QVFpPSUQ6CisJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJKnR5cGVuYW1lID0g cHN0cmR1cCgiVElNRVNUQU1QIFdJVEggVElNRSBaT05FIik7CisJCQllbHNlCisJCQkJLyogb3Ro ZXJ3aXNlLCBXSVRIIFRaIGlzIGFkZGVkIGJ5IHR5cG1vZC4gKi8KKwkJCQkqdHlwZW5hbWUgPSBw c3RyZHVwKCJUSU1FU1RBTVAiKTsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJ CSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFNUCIpOworCQkJYnJlYWs7CisJCWNhc2UgVElN RVRaT0lEOgorCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJ TUUgV0lUSCBUSU1FIFpPTkUiKTsKKwkJCWVsc2UKKwkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFog aXMgYWRkZWQgYnkgdHlwbW9kLiAqLworCQkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsK KwkJCWJyZWFrOworCQljYXNlIFRJTUVPSUQ6CisJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJUSU1F Iik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKworCQkJLyoKKwkJCSAqIE5vIGFkZGl0aW9uYWwg cHJvY2Vzc2luZyBpcyByZXF1aXJlZCBmb3Igb3RoZXIgdHlwZXMsIHNvIGdldAorCQkJICogdGhl IHR5cGUgbmFtZSBhbmQgc2NoZW1hIGRpcmVjdGx5IGZyb20gdGhlIGNhdGFsb2cuCisJCQkgKi8K KwkJCSpuc3BpZCA9IHR5cGVmb3JtLT50eXBuYW1lc3BhY2U7CisJCQkqdHlwZW5hbWUgPSBwc3Ry ZHVwKE5hbWVTdHIodHlwZWZvcm0tPnR5cG5hbWUpKTsKKwl9CisKKwlpZiAodHlwZW1vZCA+PSAw KQorCQkqdHlwZW1vZHN0ciA9IHByaW50VHlwbW9kKCIiLCB0eXBlbW9kLCB0eXBlZm9ybS0+dHlw bW9kb3V0KTsKKwllbHNlCisJCSp0eXBlbW9kc3RyID0gcHN0cmR1cCgiIik7CisKKwlSZWxlYXNl U3lzQ2FjaGUodHVwbGUpOworfQorCisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlcyBv ZiBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiwgYXMgYSBsaXN0IG9mCisgKiBkZXBhcnNlZCBleHBy ZXNzaW9ucy4KKyAqLworc3RhdGljIExpc3QgKgorRnVuY3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpw cm9hcmdkZWZhdWx0cykKK3sKKwlMaXN0CSAgICpub2RlZGVmczsKKwlMaXN0CSAgICpzdHJkZWZz ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlub2RlZGVmcyA9IChMaXN0ICopIHN0cmlu Z1RvTm9kZSh0ZXh0X3RvX2NzdHJpbmcocHJvYXJnZGVmYXVsdHMpKTsKKwlpZiAoIUlzQShub2Rl ZGVmcywgTGlzdCkpCisJCWVsb2coRVJST1IsICJwcm9hcmdkZWZhdWx0cyBpcyBub3QgYSBsaXN0 Iik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGVkZWZzKQorCXsKKwkJTm9kZQkgICAqb25lZGVmID0g bGZpcnN0KGNlbGwpOworCisJCXN0cmRlZnMgPSBsYXBwZW5kKHN0cmRlZnMsIGRlcGFyc2VfZXhw cmVzc2lvbihvbmVkZWYsIE5JTCwgZmFsc2UsIGZhbHNlKSk7CisJfQorCisJcmV0dXJuIHN0cmRl ZnM7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUg Z2l2ZW4gUkVMUEVSU0lTVEVOQ0UgdmFsdWUuCisgKi8KK3N0YXRpYyBjaGFyICoKK2dldF9wZXJz aXN0ZW5jZV9zdHIoY2hhciBwZXJzaXN0ZW5jZSkKK3sKKwlzd2l0Y2ggKHBlcnNpc3RlbmNlKQor CXsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9URU1QOgorCQkJcmV0dXJuICJURU1QT1JBUlkiOwor CQljYXNlIFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEOgorCQkJcmV0dXJuICJVTkxPR0dFRCI7CisJ CWNhc2UgUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOgorCQkJcmV0dXJuICIiOworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcGVyc2lzdGVuY2UgbWFya2luZyAlYyIsIHBl cnNpc3RlbmNlKTsKKwkJCXJldHVybiAiIjsJCQkvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisJ fQorfQorCisvKgorICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdp dmVuIHN0b3JhZ2V0eXBlIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGNoYXIgKgorZ2V0X3R5 cGVfc3RvcmFnZShjaGFyIHN0b3JhZ2V0eXBlKQoreworCXN3aXRjaCAoc3RvcmFnZXR5cGUpCisJ eworCQljYXNlICdwJzoKKwkJCXJldHVybiAicGxhaW4iOworCQljYXNlICdlJzoKKwkJCXJldHVy biAiZXh0ZXJuYWwiOworCQljYXNlICd4JzoKKwkJCXJldHVybiAiZXh0ZW5kZWQiOworCQljYXNl ICdtJzoKKwkJCXJldHVybiAibWFpbiI7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52 YWxpZCBzdG9yYWdlIHNwZWNpZmllciAlYyIsIHN0b3JhZ2V0eXBlKTsKKwl9Cit9CisKKy8qCisg KiBBbGxvY2F0ZSBhIG5ldyBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19v YmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKQoreworCU9iakVsZW0gICAgKnBhcmFtOwor CisJcGFyYW0gPSBwYWxsb2MwKHNpemVvZihPYmpFbGVtKSk7CisJcGFyYW0tPm5hbWUgPSBuYW1l OworCXBhcmFtLT5vYmp0eXBlID0gdHlwZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyoKKyAq IEFsbG9jYXRlIGEgbmV3IG9iamVjdCBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoK K25ld19vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFt OworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVPYmplY3QsIE5VTEwpOworCXBhcmFtLT52 YWx1ZS5vYmplY3QgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyoKKyAqIEFsbG9j YXRlIGEgbmV3IG9iamVjdCB0cmVlIHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlKGNoYXIgKmZtdCkKK3sKKwlPYmpUcmVlICAgICpw YXJhbXM7CisKKwlwYXJhbXMgPSBwYWxsb2MwKHNpemVvZihPYmpUcmVlKSk7CisJcGFyYW1zLT5w cmVzZW50ID0gdHJ1ZTsKKwlzbGlzdF9pbml0KCZwYXJhbXMtPnBhcmFtcyk7CisKKwlpZiAoZm10 KQorCXsKKwkJcGFyYW1zLT5mbXRpbmZvID0gbWFrZVN0cmluZ0luZm8oKTsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhwYXJhbXMtPmZtdGluZm8sIGZtdCk7CisJfQorCisJcmV0dXJuIHBhcmFt czsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0IHVwICV7fUQgYW5kICV7fU8g ZWxlbWVudHMuCisgKgorICogRWxlbWVudHMgInNjaGVtYV9uYW1lIiBhbmQgIm9ial9uYW1lIiBh cmUgc2V0LiAgSWYgdGhlIG5hbWVzcGFjZSBPSUQKKyAqIGNvcnJlc3BvbmRzIHRvIGEgdGVtcCBz Y2hlbWEsIHRoYXQncyBzZXQgdG8gInBnX3RlbXAiLgorICoKKyAqIFRoZSBkaWZmZXJlbmNlIGJl dHdlZW4gdGhvc2UgdHdvIGVsZW1lbnQgdHlwZXMgaXMgd2hldGhlciB0aGUgb2JqX25hbWUgd2ls bAorICogYmUgcXVvdGVkIGFzIGFuIGlkZW50aWZpZXIgb3Igbm90LCB3aGljaCBpcyBub3Qgc29t ZXRoaW5nIHRoYXQgdGhpcyByb3V0aW5lCisgKiBjb25jZXJucyBpdHNlbGYgd2l0aDsgdGhhdCB3 aWxsIGJlIHVwIHRvIHRoZSBleHBhbmQgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShPaWQgbnNwaWQsIGNoYXIgKm5hbWUpCit7CisJT2Jq VHJlZSAgICAqcXVhbGlmaWVkOworCWNoYXIJICAgKm5hbWVzcGFjZTsKKworCWlmIChpc0FueVRl bXBOYW1lc3BhY2UobnNwaWQpKQorCQluYW1lc3BhY2UgPSBwc3RyZHVwKCJwZ190ZW1wIik7CisJ ZWxzZQorCQluYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWUobnNwaWQpOworCisJcXVhbGlm aWVkID0gbmV3X29ianRyZWVfVkEoTlVMTCwgMiwKKwkJCQkJCQkgICAic2NoZW1hbmFtZSIsIE9i alR5cGVTdHJpbmcsIG5hbWVzcGFjZSwKKwkJCQkJCQkgICAib2JqbmFtZSIsIE9ialR5cGVTdHJp bmcsIHBzdHJkdXAobmFtZSkpOworCisJcmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIEEg aGVscGVyIHJvdXRpbmUgdG8gc2V0IHVwICV7fUQgYW5kICV7fU8gZWxlbWVudHMsIHdpdGggdGhl IG9iamVjdCBzcGVjaWZpZWQKKyAqIGJ5IGNsYXNzSWQvb2JqSWQuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPaWQgY2xhc3NJZCwgT2lkIG9iamVj dElkKQoreworCU9ialRyZWUgICAgKnF1YWxpZmllZDsKKwlSZWxhdGlvbgljYXRhbG9nOworCUhl YXBUdXBsZQljYXRvYmo7CisJRGF0dW0JCW9ial9uc3A7CisJRGF0dW0JCW9ial9uYW1lOworCUF0 dHJOdW1iZXIJQW51bV9uYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lc3BhY2U7CisJQXR0ck51 bWJlcglBbnVtX29pZCA9IGdldF9vYmplY3RfYXR0bnVtX29pZChjbGFzc0lkKTsKKwlib29sCQlp c251bGw7CisKKwljYXRhbG9nID0gdGFibGVfb3BlbihjbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJY2F0b2JqID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBBbnVtX29p ZCwgb2JqZWN0SWQpOworCWlmICghY2F0b2JqKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3Igb2JqZWN0IHdpdGggT0lEICV1IG9mIGNhdGFsb2cgXCIlc1wiIiwKKwkJCSBv YmplY3RJZCwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoY2F0YWxvZykpOworCUFudW1fbmFtZSA9 IGdldF9vYmplY3RfYXR0bnVtX25hbWUoY2xhc3NJZCk7CisJQW51bV9uYW1lc3BhY2UgPSBnZXRf b2JqZWN0X2F0dG51bV9uYW1lc3BhY2UoY2xhc3NJZCk7CisKKwlvYmpfbnNwID0gaGVhcF9nZXRh dHRyKGNhdG9iaiwgQW51bV9uYW1lc3BhY2UsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJ CQkJCQkgICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJudWxsIG5hbWVz cGFjZSBmb3Igb2JqZWN0ICV1Iiwgb2JqZWN0SWQpOworCisJb2JqX25hbWUgPSBoZWFwX2dldGF0 dHIoY2F0b2JqLCBBbnVtX25hbWUsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJCQkg ICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAibnVsbCBhdHRyaWJ1dGUg bmFtZSBmb3Igb2JqZWN0ICV1Iiwgb2JqZWN0SWQpOworCisJcXVhbGlmaWVkID0gbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKERhdHVtR2V0T2JqZWN0SWQob2JqX25zcCksCisJCQkJCQkJCQkJIE5h bWVTdHIoKkRhdHVtR2V0TmFtZShvYmpfbmFtZSkpKTsKKwl0YWJsZV9jbG9zZShjYXRhbG9nLCBB Y2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIEhlbHBl ciByb3V0aW5lIGZvciAle31SIG9iamVjdHMsIHdpdGggcm9sZSBzcGVjaWZpZWQgYnkgUm9sZVNw ZWMgbm9kZS4KKyAqIFNwZWNpYWwgdmFsdWVzIHN1Y2ggYXMgUk9MRVNQRUNfQ1VSUkVOVF9VU0VS IGFyZSBleHBhbmRlZCB0byB0aGVpciBmaW5hbAorICogbmFtZXMuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK25ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhSb2xlU3BlYyAqc3BlYykKK3sKKwljaGFy CSAgICpyb2xldHlwZTsKKworCWlmIChzcGVjLT5yb2xldHlwZSAhPSBST0xFU1BFQ19QVUJMSUMp CisJCXJvbGV0eXBlID0gZ2V0X3JvbGVzcGVjX25hbWUoc3BlYyk7CisJZWxzZQorCQlyb2xldHlw ZSA9IHBzdHJkdXAoIiIpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKE5VTEwsIDIsCisJCQkJ CQkgICJpc19wdWJsaWMiLCBPYmpUeXBlQm9vbCwgc3BlYy0+cm9sZXR5cGUgPT0gUk9MRVNQRUNf UFVCTElDLAorCQkJCQkJICAicm9sZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCByb2xldHlwZSk7Cit9 CisKKy8qCisgKiBIZWxwZXIgcm91dGluZSBmb3IgJXt9UiBvYmplY3RzLCB3aXRoIHJvbGUgc3Bl Y2lmaWVkIGJ5IE9JRC4gKEFDTF9JRF9QVUJMSUMKKyAqIG1lYW5zIHRvIHVzZSAicHVibGljIiku CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKE9pZCByb2xl b2lkKQoreworCU9ialRyZWUgICAgKnJvbGU7CisKKwlpZiAocm9sZW9pZCAhPSBBQ0xfSURfUFVC TElDKQorCXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAqcm9sZV9uYW1lOworCisJ CXJvbHR1cCA9IFNlYXJjaFN5c0NhY2hlMShBVVRIT0lELCBPYmplY3RJZEdldERhdHVtKHJvbGVv aWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJvbHR1cCkpCisJCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igcm9sZSB3aXRoIE9JRCAldSIsIHJvbGVvaWQpOworCisJ CXJvbGVfbmFtZSA9IE5hbWVTdHIoKChGb3JtX3BnX2F1dGhpZCkgR0VUU1RSVUNUKHJvbHR1cCkp LT5yb2xuYW1lKTsKKwkJcm9sZSA9IG5ld19vYmp0cmVlX1ZBKCIle3JvbGVuYW1lfUkiLCAxLAor CQkJCQkJCSAgInJvbGVuYW1lIiwgT2JqVHlwZVN0cmluZywgcHN0cmR1cChyb2xlX25hbWUpKTsK KworCQlSZWxlYXNlU3lzQ2FjaGUocm9sdHVwKTsKKwl9CisJZWxzZQorCQlyb2xlID0gbmV3X29i anRyZWVfVkEoIiV7cm9sZW5hbWV9SSIsIDEsCisJCQkJCQkJICAicm9sZW5hbWUiLCBPYmpUeXBl U3RyaW5nLCAicHVibGljIik7CisKKwlyZXR1cm4gcm9sZTsKK30KKworLyoKKyAqIEEgaGVscGVy IHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgor bmV3X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwgaW50MzIgdHlwbW9kKQoreworCU9pZAkJ CXR5cG5zcGlkOworCWNoYXIJICAgKnR5cGVfbnNwOworCWNoYXIJICAgKnR5cGVfbmFtZSA9IE5V TEw7CisJY2hhcgkgICAqdHlwbW9kc3RyOworCWJvb2wJCXR5cGVfYXJyYXk7CisKKwlmb3JtYXRf dHlwZV9kZXRhaWxlZCh0eXBlSWQsIHR5cG1vZCwKKwkJCQkJCSAmdHlwbnNwaWQsICZ0eXBlX25h bWUsICZ0eXBtb2RzdHIsICZ0eXBlX2FycmF5KTsKKworCWlmIChPaWRJc1ZhbGlkKHR5cG5zcGlk KSkKKwkJdHlwZV9uc3AgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcCh0eXBuc3BpZCk7CisJ ZWxzZQorCQl0eXBlX25zcCA9IHBzdHJkdXAoIiIpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZB KE5VTEwsIDQsCisJCQkJCQkgICJzY2hlbWFuYW1lIiwgT2JqVHlwZVN0cmluZywgdHlwZV9uc3As CisJCQkJCQkgICJ0eXBlbmFtZSIsIE9ialR5cGVTdHJpbmcsIHR5cGVfbmFtZSwKKwkJCQkJCSAg InR5cG1vZCIsIE9ialR5cGVTdHJpbmcsIHR5cG1vZHN0ciwKKwkJCQkJCSAgInR5cGFycmF5Iiwg T2JqVHlwZUJvb2wsIHR5cGVfYXJyYXkpOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2Jq ZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZlcnNpb24uCisg KgorICogVGhlICJmbXQiIGFyZ3VtZW50IGlzIHVzZWQgdG8gYXBwZW5kIGFzIGEgImZtdCIgZWxl bWVudCBpbiB0aGUgb3V0cHV0IGJsb2IuCisgKiBudW1vYmpzIGluZGljYXRlcyB0aGUgbnVtYmVy IG9mIGV4dHJhIGVsZW1lbnRzIHRvIGFwcGVuZDsgZm9yIGVhY2ggb25lLCBhCisgKiBuYW1lIChz dHJpbmcpLCB0eXBlIChmcm9tIHRoZSBPYmpUeXBlIGVudW0pIGFuZCB2YWx1ZSBtdXN0IGJlIHN1 cHBsaWVkLiAgVGhlCisgKiB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB0eXBlIGdpdmVuOyBmb3IgaW5z dGFuY2UsIE9ialR5cGVJbnRlZ2VyIHJlcXVpcmVzIGFuCisgKiBpbnQ2NCwgT2JqVHlwZVN0cmlu ZyByZXF1aXJlcyBhIGNoYXIgKiwgT2JqVHlwZUFycmF5IHJlcXVpcmVzIGEgbGlzdCAob2YKKyAq IE9iakVsZW0pLCBPYmpUeXBlT2JqZWN0IHJlcXVpcmVzIGFuIE9ialRyZWUsIGFuZCBzbyBvbi4g IEVhY2ggZWxlbWVudCB0eXBlICoKKyAqIG11c3QgbWF0Y2ggdGhlIGNvbnZlcnNpb24gc3BlY2lm aWVyIGdpdmVuIGluIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBkZXNjcmliZWQKKyAqIGluIGRkbF9k ZXBhcnNlX2V4cGFuZF9jb21tYW5kLCBxLnYuCisgKgorICogTm90ZSB3ZSBkb24ndCBoYXZlIHRo ZSBsdXh1cnkgb2Ygc3ByaW50Zi1saWtlIGNvbXBpbGVyIHdhcm5pbmdzIGZvcgorICogbWFsZm9y bWVkIGFyZ3VtZW50IGxpc3RzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9W QShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLikKK3sKKwlPYmpUcmVlICAgICp0cmVlOworCXZh X2xpc3QJCWFyZ3M7CisJaW50CQkJaTsKKworCS8qIFNldCB1cCB0aGUgdG9wbGV2ZWwgb2JqZWN0 IGFuZCBpdHMgImZtdCIgKi8KKwl0cmVlID0gbmV3X29ianRyZWUoZm10KTsKKworCS8qIEFuZCBw cm9jZXNzIHRoZSBnaXZlbiB2YXJhcmdzICovCisJdmFfc3RhcnQoYXJncywgbnVtb2Jqcyk7CisJ Zm9yIChpID0gMDsgaSA8IG51bW9ianM7IGkrKykKKwl7CisJCWNoYXIJICAgKm5hbWU7CisJCU9i alR5cGUJCXR5cGU7CisJCU9iakVsZW0gICAgKmVsZW07CisKKwkJbmFtZSA9IHZhX2FyZyhhcmdz LCBjaGFyICopOworCQl0eXBlID0gdmFfYXJnKGFyZ3MsIE9ialR5cGUpOworCQllbGVtID0gbmV3 X29iamVjdCh0eXBlLCBOVUxMKTsKKworCQkvKgorCQkgKiBGb3IgYWxsIHBhcmFtIHR5cGVzIG90 aGVyIHRoYW4gT2JqVHlwZU51bGwsIHRoZXJlIG11c3QgYmUgYSB2YWx1ZSBpbgorCQkgKiB0aGUg dmFyYXJncy4gRmV0Y2ggaXQgYW5kIGFkZCB0aGUgZnVsbHkgZm9ybWVkIHN1Ym9iamVjdCBpbnRv IHRoZQorCQkgKiBtYWluIG9iamVjdC4KKwkJICovCisJCXN3aXRjaCAodHlwZSkKKwkJeworCQkJ Y2FzZSBPYmpUeXBlTnVsbDoKKwkJCQkvKiBOdWxsIHBhcmFtcyBkb24ndCBoYXZlIGEgdmFsdWUg KG9idmlvdXNseSkgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUJvb2w6CisJCQkJZWxl bS0+dmFsdWUuYm9vbGVhbiA9IHZhX2FyZyhhcmdzLCBpbnQpOworCQkJCWJyZWFrOworCQkJY2Fz ZSBPYmpUeXBlU3RyaW5nOgorCQkJCWVsZW0tPnZhbHVlLnN0cmluZyA9IHZhX2FyZyhhcmdzLCBj aGFyICopOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlQXJyYXk6CisJCQkJZWxlbS0+dmFs dWUuYXJyYXkgPSB2YV9hcmcoYXJncywgTGlzdCAqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2Jq VHlwZUludGVnZXI6CisJCQkJZWxlbS0+dmFsdWUuaW50ZWdlciA9IHZhX2FyZyhhcmdzLCBpbnQp OworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlRmxvYXQ6CisJCQkJZWxlbS0+dmFsdWUuZmx0 ID0gdmFfYXJnKGFyZ3MsIGRvdWJsZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVPYmpl Y3Q6CisJCQkJZWxlbS0+dmFsdWUub2JqZWN0ID0gdmFfYXJnKGFyZ3MsIE9ialRyZWUgKik7CisJ CQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9ialRyZWUg ZWxlbWVudCB0eXBlICVkIiwgdHlwZSk7CisJCX0KKworCQllbGVtLT5uYW1lID0gbmFtZTsKKwkJ YXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIGVsZW0pOworCX0KKworCXZhX2VuZChhcmdzKTsK KwlyZXR1cm4gdHJlZTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IHN0cmluZyBvYmplY3Qu CisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19zdHJpbmdfb2JqZWN0KGNoYXIgKnZhbHVlKQor eworCU9iakVsZW0gICAgKnBhcmFtOworCisJQXNzZXJ0KHZhbHVlKTsKKworCXBhcmFtID0gbmV3 X29iamVjdChPYmpUeXBlU3RyaW5nLCBOVUxMKTsKKwlwYXJhbS0+dmFsdWUuc3RyaW5nID0gdmFs dWU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKKy8qCisgKiBQcm9jZXNzIHRoZSBwcmUtYnVpbHQg Zm9ybWF0IHN0cmluZyBmcm9tIHRoZSBPYmpUcmVlIGludG8gdGhlIG91dHB1dCBwYXJzZQorICog c3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KEpz b25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9ialRyZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7 CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlpZiAodHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1 cm47CisKKwkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwlrZXkudHlwZSA9IGpidlN0cmluZzsK KwlrZXkudmFsLnN0cmluZy52YWwgPSAiZm10IjsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJs ZW4oa2V5LnZhbC5zdHJpbmcudmFsKTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9LRVks ICZrZXkpOworCisJLyogVGhlbiBwcm9jZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyAq LworCXZhbC50eXBlID0gamJ2U3RyaW5nOworCXZhbC52YWwuc3RyaW5nLmxlbiA9IHRyZWUtPmZt dGluZm8tPmxlbjsKKwl2YWwudmFsLnN0cmluZy52YWwgPSB0cmVlLT5mbXRpbmZvLT5kYXRhOwor CXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX1ZBTFVFLCAmdmFsKTsKK30KKworLyoKKyAqIENy ZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9uIGZyb20gYW4gT2JqVHJlZS4KKyAqLworc3RhdGlj IEpzb25iICoKK29ianRyZWVfdG9fanNvbmIoT2JqVHJlZSAqdHJlZSkKK3sKKwlKc29uYlZhbHVl ICp2YWx1ZTsKKworCXZhbHVlID0gb2JqdHJlZV90b19qc29uYl9yZWModHJlZSwgTlVMTCk7CisJ cmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZhbHVlKTsKK30KKworLyoKKyAqIEhlbHBlciBmb3Ig b2JqdHJlZV90b19qc29uYjogcHJvY2VzcyBhbiBpbmRpdmlkdWFsIGVsZW1lbnQgZnJvbSBhbiBv YmplY3Qgb3IKKyAqIGFuIGFycmF5IGludG8gdGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4KKyAqLwor c3RhdGljIHZvaWQKK29ianRyZWVfdG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNlU3RhdGUgKnN0 YXRlLCBPYmpFbGVtICpvYmplY3QsCisJCQkJCQkgSnNvbmJJdGVyYXRvclRva2VuIGVsZW1fdG9r ZW4pCit7CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlzd2l0Y2ggKG9iamVjdC0+b2JqdHlwZSkKKwl7 CisJCWNhc2UgT2JqVHlwZU51bGw6CisJCQl2YWwudHlwZSA9IGpidk51bGw7CisJCQlwdXNoSnNv bmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBP YmpUeXBlU3RyaW5nOgorCQkJdmFsLnR5cGUgPSBqYnZTdHJpbmc7CisJCQl2YWwudmFsLnN0cmlu Zy5sZW4gPSBzdHJsZW4ob2JqZWN0LT52YWx1ZS5zdHJpbmcpOworCQkJdmFsLnZhbC5zdHJpbmcu dmFsID0gb2JqZWN0LT52YWx1ZS5zdHJpbmc7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVs ZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJ CXZhbC50eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQor CQkJCURhdHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGludDhfbnVtZXJpYywKKwkJ CQkJCQkJCQkJCQlvYmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVlKCZz dGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVGbG9h dDoKKwkJCXZhbC50eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1l cmljKQorCQkJCURhdHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGZsb2F0OF9udW1l cmljLAorCQkJCQkJCQkJCQkJCW9iamVjdC0+dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2Jq VHlwZUJvb2w6CisJCQl2YWwudHlwZSA9IGpidkJvb2w7CisJCQl2YWwudmFsLmJvb2xlYW4gPSBv YmplY3QtPnZhbHVlLmJvb2xlYW47CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9r ZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlT2JqZWN0OgorCQkJLyogUmVj dXJzaXZlbHkgYWRkIHRoZSBvYmplY3QgaW50byB0aGUgZXhpc3RpbmcgcGFyc2Ugc3RhdGUgKi8K KwkJCW9ianRyZWVfdG9fanNvbmJfcmVjKG9iamVjdC0+dmFsdWUub2JqZWN0LCBzdGF0ZSk7CisJ CQlicmVhazsKKworCQljYXNlIE9ialR5cGVBcnJheToKKwkJCXsKKwkJCQlMaXN0Q2VsbCAgICpj ZWxsOworCisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fQVJSQVksIE5VTEwp OworCQkJCWZvcmVhY2goY2VsbCwgb2JqZWN0LT52YWx1ZS5hcnJheSkKKwkJCQl7CisJCQkJCU9i akVsZW0gICAgKmVsZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJCQkJb2JqdHJlZV90b19qc29uYl9l bGVtZW50KHN0YXRlLCBlbGVtLCBXSkJfRUxFTSk7CisJCQkJfQorCQkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0VORF9BUlJBWSwgTlVMTCk7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZh dWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBvYmplY3QgdHlwZSAlZCIsIG9iamVj dC0+b2JqdHlwZSk7CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVy IGZvciBvYmp0cmVlX3RvX2pzb25iLgorICovCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitvYmp0cmVl X3RvX2pzb25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKQorewor CXNsaXN0X2l0ZXIJaXRlcjsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09C SkVDVCwgTlVMTCk7CisKKwlvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KHN0YXRlLCB0cmVl KTsKKworCXNsaXN0X2ZvcmVhY2goaXRlciwgJnRyZWUtPnBhcmFtcykKKwl7CisJCU9iakVsZW0g ICAgKm9iamVjdCA9IHNsaXN0X2NvbnRhaW5lcihPYmpFbGVtLCBub2RlLCBpdGVyLmN1cik7CisJ CUpzb25iVmFsdWUJa2V5OworCisJCS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCQlrZXkudHlw ZSA9IGpidlN0cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKG9iamVjdC0+bmFt ZSk7CisJCWtleS52YWwuc3RyaW5nLnZhbCA9IG9iamVjdC0+bmFtZTsKKwkJcHVzaEpzb25iVmFs dWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCQkvKiBUaGVuIHByb2Nlc3MgdGhlIHZhbHVl IGFjY29yZGluZyB0byBpdHMgdHlwZSAqLworCQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoc3Rh dGUsIG9iamVjdCwgV0pCX1ZBTFVFKTsKKwl9CisKKwlyZXR1cm4gcHVzaEpzb25iVmFsdWUoJnN0 YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBD UkVBVEUgVEFCTEUvQ1JFQVRFIERPTUFJTiBkZXBhcnNpbmcuCisgKgorICogR2l2ZW4gYSB0YWJs ZSBPSUQgb3IgZG9tYWluIE9JRCwgb2J0YWluIGl0cyBjb25zdHJhaW50cyBhbmQgYXBwZW5kIHRo ZW0gdG8KKyAqIHRoZSBnaXZlbiBlbGVtZW50cyBsaXN0LiAgVGhlIHVwZGF0ZWQgbGlzdCBpcyBy ZXR1cm5lZC4KKyAqCisgKiBUaGlzIHdvcmtzIGZvciB0eXBlZCB0YWJsZXMsIHJlZ3VsYXIgdGFi bGVzLCBhbmQgZG9tYWlucy4KKyAqCisgKiBOb3RlIHRoYXQgQ09OU1RSQUlOVF9GT1JFSUdOIGNv bnN0cmFpbnRzIGFyZSBhbHdheXMgaWdub3JlZC4KKyAqLworc3RhdGljIExpc3QgKgorb2J0YWlu Q29uc3RyYWludHMoTGlzdCAqZWxlbWVudHMsIE9pZCByZWxhdGlvbklkLCBPaWQgZG9tYWluSWQp Cit7CisJUmVsYXRpb24JY29uUmVsOworCVNjYW5LZXlEYXRhIGtleTsKKwlTeXNTY2FuRGVzYyBz Y2FuOworCUhlYXBUdXBsZQl0dXBsZTsKKwlPYmpUcmVlICAgICpjb25zdHI7CisKKwkvKiBPbmx5 IG9uZSBtYXkgYmUgdmFsaWQgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChyZWxhdGlvbklkKSBeIE9p ZElzVmFsaWQoZG9tYWluSWQpKTsKKworCS8qCisJICogU2NhbiBwZ19jb25zdHJhaW50IHRvIGZl dGNoIGFsbCBjb25zdHJhaW50cyBsaW5rZWQgdG8gdGhlIGdpdmVuCisJICogcmVsYXRpb24uCisJ ICovCisJY29uUmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwlpZiAoT2lkSXNWYWxpZChyZWxhdGlvbklkKSkKKwl7CisJCVNjYW5LZXlJbml0 KCZrZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQkJQlRFcXVhbFN0 cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKHJlbGF0aW9uSWQp KTsKKwkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5 cGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQorCWVs c2UKKwl7CisJCVNjYW5LZXlJbml0KCZrZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb250 eXBpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJ ZEdldERhdHVtKGRvbWFpbklkKSk7CisJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVs LCBDb25zdHJhaW50VHlwaWRJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkp OworCX0KKworCS8qCisJICogRm9yIGVhY2ggY29uc3RyYWludCwgYWRkIGEgbm9kZSB0byB0aGUg bGlzdCBvZiB0YWJsZSBlbGVtZW50cy4gIEluCisJICogdGhlc2Ugbm9kZXMgd2UgaW5jbHVkZSBu b3Qgb25seSB0aGUgcHJpbnRhYmxlIGluZm9ybWF0aW9uICgiZm10IiksIGJ1dAorCSAqIGFsc28g c2VwYXJhdGUgYXR0cmlidXRlcyB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBjb25zdHJhaW50LCBm b3IKKwkgKiBhdXRvbWF0aWMgcHJvY2Vzc2luZy4KKwkgKi8KKwl3aGlsZSAoSGVhcFR1cGxlSXNW YWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25z dHJhaW50IGNvbnN0ckZvcm07CisJCWNoYXIJICAgKmNvbnR5cGU7CisKKwkJY29uc3RyRm9ybSA9 IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJc3dpdGNoIChjb25z dHJGb3JtLT5jb250eXBlKQorCQl7CisJCQljYXNlIENPTlNUUkFJTlRfQ0hFQ0s6CisJCQkJY29u dHlwZSA9ICJjaGVjayI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfRk9SRUlHTjoK KwkJCQljb250aW51ZTsJCS8qIG5vdCBoZXJlICovCisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFS WToKKwkJCQljb250eXBlID0gInByaW1hcnkga2V5IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09O U1RSQUlOVF9VTklRVUU6CisJCQkJY29udHlwZSA9ICJ1bmlxdWUiOworCQkJCWJyZWFrOworCQkJ Y2FzZSBDT05TVFJBSU5UX1RSSUdHRVI6CisJCQkJY29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJCQli cmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9FWENMVVNJT046CisJCQkJY29udHlwZSA9ICJleGNs dXNpb24iOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNv Z25pemVkIGNvbnN0cmFpbnQgdHlwZSIpOworCQl9CisKKwkJLyoKKwkJICogInR5cGUiIGFuZCAi Y29udHlwZSIgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwcmludGFibGUgb3V0cHV0LCBidXQgYXJlCisJ CSAqIHVzZWZ1bCB0byBwcm9ncmFtbWF0aWNhbGx5IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gY29s dW1ucyBhbmQgYW1vbmcKKwkJICogZGlmZmVyZW50IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAqCisJ CSAqIFhYWCBpdCBtaWdodCBiZSB1c2VmdWwgdG8gYWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFtZXMg aW4gYSBQSywgZXRjLgorCQkgKi8KKwkJY29uc3RyID0gbmV3X29ianRyZWVfVkEoIkNPTlNUUkFJ TlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCA0LAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVT dHJpbmcsICJjb25zdHJhaW50IiwKKwkJCQkJCQkJImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBj b250eXBlLAorCQkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9y bS0+Y29ubmFtZSksCisJCQkJCQkJCSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkJcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyRm9ybS0+b2lkKSk7 CisJCWVsZW1lbnRzID0gbGFwcGVuZChlbGVtZW50cywgbmV3X29iamVjdF9vYmplY3QoY29uc3Ry KSk7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWws IEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBSZXR1 cm4gYW4gaW5kZXggZGVmaW5pdGlvbiwgc3BsaXQgaW50byBzZXZlcmFsIHBpZWNlcy4KKyAqCisg KiBBIGxhcmdlIGFtb3VudCBvZiBjb2RlIGlzIGR1cGxpY2F0ZWQgZnJvbSAgcGdfZ2V0X2luZGV4 ZGVmX3dvcmtlciwgYnV0CisgKiBjb250cm9sIGZsb3cgaXMgZGlmZmVyZW50IGVub3VnaCB0aGF0 IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCBrZWVwaW5nIHRoZW0KKyAqIHRvZ2V0aGVyLgorICovCitz dGF0aWMgdm9pZAorcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJlbGlkLAorCQkJ CQkJIGNoYXIgKippbmRleF9hbSwKKwkJCQkJCSBjaGFyICoqZGVmaW5pdGlvbiwKKwkJCQkJCSBj aGFyICoqcmVsb3B0aW9ucywKKwkJCQkJCSBjaGFyICoqdGFibGVzcGFjZSwKKwkJCQkJCSBjaGFy ICoqd2hlcmVDbGF1c2UpCit7CisJSGVhcFR1cGxlCWh0X2lkeDsKKwlIZWFwVHVwbGUJaHRfaWR4 cmVsOworCUhlYXBUdXBsZQlodF9hbTsKKwlGb3JtX3BnX2luZGV4IGlkeHJlYzsKKwlGb3JtX3Bn X2NsYXNzIGlkeHJlbHJlYzsKKwlGb3JtX3BnX2FtCWFtcmVjOworCUluZGV4QW1Sb3V0aW5lICph bXJvdXRpbmU7CisJTGlzdAkgICAqaW5kZXhwcnM7CisJTGlzdENlbGwgICAqaW5kZXhwcl9pdGVt OworCUxpc3QJICAgKmNvbnRleHQ7CisJT2lkCQkJaW5kcmVsaWQ7CisJaW50CQkJa2V5bm87CisJ RGF0dW0JCWluZGNvbGxEYXR1bTsKKwlEYXR1bQkJaW5kY2xhc3NEYXR1bTsKKwlEYXR1bQkJaW5k b3B0aW9uRGF0dW07CisJYm9vbAkJaXNudWxsOworCW9pZHZlY3RvciAgKmluZGNvbGxhdGlvbjsK KwlvaWR2ZWN0b3IgICppbmRjbGFzczsKKwlpbnQydmVjdG9yICppbmRvcHRpb247CisJU3RyaW5n SW5mb0RhdGEgZGVmaW5pdGlvbkJ1ZjsKKworCSp0YWJsZXNwYWNlID0gTlVMTDsKKwkqd2hlcmVD bGF1c2UgPSBOVUxMOworCisJLyogRmV0Y2ggdGhlIHBnX2luZGV4IHR1cGxlIGJ5IHRoZSBPaWQg b2YgdGhlIGluZGV4ICovCisJaHRfaWR4ID0gU2VhcmNoU3lzQ2FjaGUxKElOREVYUkVMSUQsIE9i amVjdElkR2V0RGF0dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9p ZHgpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgaW5kZXggd2l0aCBP SUQgJXUiLCBpbmRleHJlbGlkKTsKKwlpZHhyZWMgPSAoRm9ybV9wZ19pbmRleCkgR0VUU1RSVUNU KGh0X2lkeCk7CisKKwlpbmRyZWxpZCA9IGlkeHJlYy0+aW5kcmVsaWQ7CisJQXNzZXJ0KGluZGV4 cmVsaWQgPT0gaWR4cmVjLT5pbmRleHJlbGlkKTsKKworCS8qIE11c3QgZ2V0IGluZGNvbGxhdGlv biwgaW5kY2xhc3MsIGFuZCBpbmRvcHRpb24gdGhlIGhhcmQgd2F5ICovCisJaW5kY29sbERhdHVt ID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJICAgQW51bV9w Z19pbmRleF9pbmRjb2xsYXRpb24sICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRj b2xsYXRpb24gPSAob2lkdmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjb2xsRGF0dW0pOwor CisJaW5kY2xhc3NEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJ CQkJCQkJCQlBbnVtX3BnX2luZGV4X2luZGNsYXNzLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVs bCk7CisJaW5kY2xhc3MgPSAob2lkdmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjbGFzc0Rh dHVtKTsKKworCWluZG9wdGlvbkRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0 X2lkeCwKKwkJCQkJCQkJCSBBbnVtX3BnX2luZGV4X2luZG9wdGlvbiwgJmlzbnVsbCk7CisJQXNz ZXJ0KCFpc251bGwpOworCWluZG9wdGlvbiA9IChpbnQydmVjdG9yICopIERhdHVtR2V0UG9pbnRl cihpbmRvcHRpb25EYXR1bSk7CisKKwkvKiBGZXRjaCB0aGUgcGdfY2xhc3MgdHVwbGUgb2YgdGhl IGluZGV4IHJlbGF0aW9uICovCisJaHRfaWR4cmVsID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwg T2JqZWN0SWRHZXREYXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0 X2lkeHJlbCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlv biB3aXRoIE9JRCAldSIsIGluZGV4cmVsaWQpOworCWlkeHJlbHJlYyA9IChGb3JtX3BnX2NsYXNz KSBHRVRTVFJVQ1QoaHRfaWR4cmVsKTsKKworCS8qIEZldGNoIHRoZSBwZ19hbSB0dXBsZSBvZiB0 aGUgaW5kZXgnIGFjY2VzcyBtZXRob2QgKi8KKwlodF9hbSA9IFNlYXJjaFN5c0NhY2hlMShBTU9J RCwgT2JqZWN0SWRHZXREYXR1bShpZHhyZWxyZWMtPnJlbGFtKSk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKGh0X2FtKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFj Y2VzcyBtZXRob2Qgd2l0aCBPSUQgJXUiLAorCQkJIGlkeHJlbHJlYy0+cmVsYW0pOworCWFtcmVj ID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChodF9hbSk7CisKKwkvKgorCSAqIEdldCB0aGUgaW5k ZXggZXhwcmVzc2lvbnMsIGlmIGFueS4gIChOT1RFOiB3ZSBkbyBub3QgdXNlIHRoZSByZWxjYWNo ZQorCSAqIHZlcnNpb25zIG9mIHRoZSBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlLCBiZWNhdXNl IHdlIHdhbnQgdG8gZGlzcGxheQorCSAqIG5vbi1jb25zdC1mb2xkZWQgZXhwcmVzc2lvbnMuKQor CSAqLworCWlmICghaGVhcF9hdHRpc251bGwoaHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZGV4cHJz LCBOVUxMKSkKKwl7CisJCURhdHVtCQlleHByc0RhdHVtOworCQljaGFyCSAgICpleHByc1N0cmlu ZzsKKworCQlleHByc0RhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwK KwkJCQkJCQkJCSBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCAmaXNudWxsKTsKKwkJQXNzZXJ0KCFp c251bGwpOworCQlleHByc1N0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcoZXhwcnNEYXR1bSk7 CisJCWluZGV4cHJzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGV4cHJzU3RyaW5nKTsKKwkJcGZy ZWUoZXhwcnNTdHJpbmcpOworCX0KKwllbHNlCisJCWluZGV4cHJzID0gTklMOworCisJaW5kZXhw cl9pdGVtID0gbGlzdF9oZWFkKGluZGV4cHJzKTsKKworCWNvbnRleHQgPSBkZXBhcnNlX2NvbnRl eHRfZm9yKGdldF9yZWxfbmFtZShpbmRyZWxpZCksIGluZHJlbGlkKTsKKworCWluaXRTdHJpbmdJ bmZvKCZkZWZpbml0aW9uQnVmKTsKKworCS8qIE91dHB1dCBpbmRleCBBTSAqLworCSppbmRleF9h bSA9IHBzdHJkdXAocXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGFtcmVjLT5hbW5hbWUpKSk7CisK KwkvKiBGZXRjaCB0aGUgaW5kZXggQU0ncyBBUEkgc3RydWN0ICovCisJYW1yb3V0aW5lID0gR2V0 SW5kZXhBbVJvdXRpbmUoYW1yZWMtPmFtaGFuZGxlcik7CisKKwkvKgorCSAqIE91dHB1dCBpbmRl eCBkZWZpbml0aW9uLiAgTm90ZSB0aGUgb3V0ZXIgcGFyZW5zIG11c3QgYmUgc3VwcGxpZWQgYnkK KwkgKiBjYWxsZXIuCisJICovCisJZm9yIChrZXlubyA9IDA7IGtleW5vIDwgaWR4cmVjLT5pbmRu YXR0czsga2V5bm8rKykKKwl7CisJCUF0dHJOdW1iZXIJYXR0bnVtID0gaWR4cmVjLT5pbmRrZXku dmFsdWVzW2tleW5vXTsKKwkJaW50MTYJCW9wdCA9IGluZG9wdGlvbi0+dmFsdWVzW2tleW5vXTsK KwkJT2lkCQkJa2V5Y29sdHlwZTsKKwkJT2lkCQkJa2V5Y29sY29sbGF0aW9uOworCQlPaWQJCQlp bmRjb2xsOworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIGtleW5v ID09IDAgPyAiIiA6ICIsICIpOworCisJCWlmIChhdHRudW0gIT0gMCkKKwkJeworCQkJLyogU2lt cGxlIGluZGV4IGNvbHVtbiAqLworCQkJY2hhcgkgICAqYXR0bmFtZTsKKwkJCWludDMyCQlrZXlj b2x0eXBtb2Q7CisKKwkJCWF0dG5hbWUgPSBnZXRfYXR0bmFtZShpbmRyZWxpZCwgYXR0bnVtLCBm YWxzZSk7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCBxdW90ZV9p ZGVudGlmaWVyKGF0dG5hbWUpKTsKKwkJCWdldF9hdHR0eXBldHlwbW9kY29sbChpbmRyZWxpZCwg YXR0bnVtLAorCQkJCQkJCQkgICZrZXljb2x0eXBlLCAma2V5Y29sdHlwbW9kLAorCQkJCQkJCQkg ICZrZXljb2xjb2xsYXRpb24pOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogRXhwcmVzc2lvbmFs IGluZGV4ICovCisJCQlOb2RlCSAgICppbmRleGtleTsKKwkJCWNoYXIJICAgKnN0cjsKKworCQkJ aWYgKGluZGV4cHJfaXRlbSA9PSBOVUxMKQorCQkJCWVsb2coRVJST1IsICJ0b28gZmV3IGVudHJp ZXMgaW4gaW5kZXhwcnMgbGlzdCIpOworCQkJaW5kZXhrZXkgPSAoTm9kZSAqKSBsZmlyc3QoaW5k ZXhwcl9pdGVtKTsKKwkJCWluZGV4cHJfaXRlbSA9IGxuZXh0KGluZGV4cHJzLCBpbmRleHByX2l0 ZW0pOworCisJCQkvKiBEZXBhcnNlICovCisJCQlzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oaW5k ZXhrZXksIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkJCS8qIE5lZWQgcGFyZW5zIGlmIGl0 J3Mgbm90IGEgYmFyZSBmdW5jdGlvbiBjYWxsICovCisJCQlpZiAoaW5kZXhrZXkgJiYgSXNBKGlu ZGV4a2V5LCBGdW5jRXhwcikgJiYKKwkJCQkoKEZ1bmNFeHByICopIGluZGV4a2V5KS0+ZnVuY2Zv cm1hdCA9PSBDT0VSQ0VfRVhQTElDSVRfQ0FMTCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZkZWZpbml0aW9uQnVmLCBzdHIpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm8oJmRl ZmluaXRpb25CdWYsICIoJXMpIiwgc3RyKTsKKworCQkJa2V5Y29sdHlwZSA9IGV4cHJUeXBlKGlu ZGV4a2V5KTsKKwkJCWtleWNvbGNvbGxhdGlvbiA9IGV4cHJDb2xsYXRpb24oaW5kZXhrZXkpOwor CQl9CisKKwkJLyogQWRkIGNvbGxhdGlvbiwgZXZlbiBpZiBkZWZhdWx0ICovCisJCWluZGNvbGwg PSBpbmRjb2xsYXRpb24tPnZhbHVlc1trZXlub107CisJCWlmIChPaWRJc1ZhbGlkKGluZGNvbGwp KQorCQkJYXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIiBDT0xMQVRFICVzIiwKKwkJ CQkJCQkgZ2VuZXJhdGVfY29sbGF0aW9uX25hbWUoKGluZGNvbGwpKSk7CisKKwkJLyogQWRkIHRo ZSBvcGVyYXRvciBjbGFzcyBuYW1lLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJZ2V0X29wY2xhc3Nf bmFtZShpbmRjbGFzcy0+dmFsdWVzW2tleW5vXSwgSW52YWxpZE9pZCwgJmRlZmluaXRpb25CdWYp OworCisJCS8qIEFkZCBvcHRpb25zIGlmIHJlbGV2YW50ICovCisJCWlmIChhbXJvdXRpbmUtPmFt Y2Fub3JkZXIpCisJCXsKKwkJCS8qIElmIGl0IHN1cHBvcnRzIHNvcnQgb3JkZXJpbmcsIHJlcG9y dCBERVNDIGFuZCBOVUxMUyBvcHRzICovCisJCQlpZiAob3B0ICYgSU5ET1BUSU9OX0RFU0MpCisJ CQl7CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBERVNDIik7 CisJCQkJLyogTlVMTFMgRklSU1QgaXMgdGhlIGRlZmF1bHQgaW4gdGhpcyBjYXNlICovCisJCQkJ aWYgKCEob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKSkKKwkJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBMQVNUIik7CisJCQl9CisJCQllbHNlCisJ CQl7CisJCQkJaWYgKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkKKwkJCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBGSVJTVCIpOworCQkJfQorCQl9 CisKKwkJLyogWFhYIGV4Y2x1ZGVPcHMgdGhpbmd5IHdhcyBoZXJlOyBkbyB3ZSBuZWVkIGFueXRo aW5nPyAqLworCX0KKwkqZGVmaW5pdGlvbiA9IGRlZmluaXRpb25CdWYuZGF0YTsKKworCS8qIE91 dHB1dCByZWxvcHRpb25zICovCisJKnJlbG9wdGlvbnMgPSBmbGF0dGVuX3JlbG9wdGlvbnMoaW5k ZXhyZWxpZCk7CisKKwkvKiBPdXRwdXQgdGFibGVzcGFjZSAqLworCXsKKwkJT2lkCQkJdGJsc3Bj OworCisJCXRibHNwYyA9IGdldF9yZWxfdGFibGVzcGFjZShpbmRleHJlbGlkKTsKKwkJaWYgKE9p ZElzVmFsaWQodGJsc3BjKSkKKwkJCSp0YWJsZXNwYWNlID0gcHN0cmR1cChxdW90ZV9pZGVudGlm aWVyKGdldF90YWJsZXNwYWNlX25hbWUodGJsc3BjKSkpOworCX0KKworCS8qIFJlcG9ydCBpbmRl eCBwcmVkaWNhdGUsIGlmIGFueSAqLworCWlmICghaGVhcF9hdHRpc251bGwoaHRfaWR4LCBBbnVt X3BnX2luZGV4X2luZHByZWQsIE5VTEwpKQorCXsKKwkJTm9kZQkgICAqbm9kZTsKKwkJRGF0dW0J CXByZWREYXR1bTsKKwkJY2hhcgkgICAqcHJlZFN0cmluZzsKKworCQkvKiBDb252ZXJ0IHRleHQg c3RyaW5nIHRvIG5vZGUgdHJlZSAqLworCQlwcmVkRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5E RVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJQW51bV9wZ19pbmRleF9pbmRwcmVkLCAmaXNudWxs KTsKKwkJQXNzZXJ0KCFpc251bGwpOworCQlwcmVkU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmlu ZyhwcmVkRGF0dW0pOworCQlub2RlID0gKE5vZGUgKikgc3RyaW5nVG9Ob2RlKHByZWRTdHJpbmcp OworCQlwZnJlZShwcmVkU3RyaW5nKTsKKworCQkvKiBEZXBhcnNlICovCisJCSp3aGVyZUNsYXVz ZSA9IGRlcGFyc2VfZXhwcmVzc2lvbihub2RlLCBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCX0K KworCS8qIENsZWFuIHVwICovCisJUmVsZWFzZVN5c0NhY2hlKGh0X2lkeCk7CisJUmVsZWFzZVN5 c0NhY2hlKGh0X2lkeHJlbCk7CisJUmVsZWFzZVN5c0NhY2hlKGh0X2FtKTsKK30KKworLyoKKyAq IE9idGFpbiB0aGUgZGVwYXJzZWQgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGdpdmVuIGNvbHVtbiBv ZiB0aGUgZ2l2ZW4gdGFibGUuCisgKgorICogQ2FsbGVyIG11c3QgaGF2ZSBzZXQgYSBjb3JyZWN0 IGRlcGFyc2UgY29udGV4dC4KKyAqLworc3RhdGljIGNoYXIgKgorUmVsYXRpb25HZXRDb2x1bW5E ZWZhdWx0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRubywgTGlzdCAqZHBjb250ZXh0LAor CQkJCQkJIExpc3QgKipleHBycykKK3sKKwlOb2RlCSAgICpkZWZ2YWw7CisJY2hhcgkgICAqZGVm c3RyOworCisJZGVmdmFsID0gYnVpbGRfY29sdW1uX2RlZmF1bHQocmVsLCBhdHRubyk7CisJZGVm c3RyID0gZGVwYXJzZV9leHByZXNzaW9uKGRlZnZhbCwgZHBjb250ZXh0LCBmYWxzZSwgZmFsc2Up OworCisJLyogQ29sbGVjdCB0aGUgZXhwcmVzc2lvbiBmb3IgbGF0ZXIgcmVwbGljYXRpb24gc2Fm ZXR5IGNoZWNrcyAqLworCWlmIChleHBycykKKwkJKmV4cHJzID0gbGFwcGVuZCgqZXhwcnMsIGRl ZnZhbCk7CisKKwlyZXR1cm4gZGVmc3RyOworfQorCisvKgorICogT2J0YWluIHRoZSBkZXBhcnNl ZCBwYXJ0aXRpb24gYm91bmQgZXhwcmVzc2lvbiBmb3IgdGhlIGdpdmVuIHRhYmxlLgorICovCitz dGF0aWMgY2hhciAqCitSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKE9pZCByZWxpZCkKK3sKKwlE YXR1bQkJZGVwYXJzZWQ7CisJRGF0dW0JCWJvdW5kRGF0dW07CisJYm9vbAkJaXNudWxsOworCUhl YXBUdXBsZQl0dXBsZTsKKworCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgcmVsaWQp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiB3aXRoIE9JRCAldSIsIHJlbGlkKTsKKworCWJvdW5k RGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVMT0lELCB0dXBsZSwKKwkJCQkJCQkJIEFudW1fcGdf Y2xhc3NfcmVscGFydGJvdW5kLAorCQkJCQkJCQkgJmlzbnVsbCk7CisKKwlkZXBhcnNlZCA9IERp cmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsCisJCQkJCQkJCSAgIENTdHJpbmdHZXRUZXh0 RGF0dW0oVGV4dERhdHVtR2V0Q1N0cmluZyhib3VuZERhdHVtKSksCisJCQkJCQkJCSAgIHJlbGlk KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CisKKwlyZXR1cm4gVGV4dERhdHVtR2V0Q1N0 cmluZyhkZXBhcnNlZCk7Cit9CisKKy8qCisgKiBHaXZlbiBhIENvbGxlY3RlZENvbW1hbmQsIHJl dHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgaXQuCisgKgorICogVGhlIGNvbW1hbmQgaXMg ZXhwYW5kZWQgZnVsbHkgc28gdGhhdCB0aGVyZSBhcmUgbm8gYW1iaWd1aXRpZXMgZXZlbiBpbiB0 aGUKKyAqIGZhY2Ugb2Ygc2VhcmNoX3BhdGggY2hhbmdlcy4KKyAqLworRGF0dW0KK2RkbF9kZXBh cnNlX3RvX2pzb24oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQg PSAoQ29sbGVjdGVkQ29tbWFuZCAqKSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKwljaGFyCSAgICpj b21tYW5kOworCisJY29tbWFuZCA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgdHJ1ZSk7 CisKKwlpZiAoY29tbWFuZCkKKwkJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoY29t bWFuZCkpOworCisJUEdfUkVUVVJOX05VTEwoKTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0 ZXJDb2xsYXRpb25TdG10IChBTFRFUiBDT0xMQVRJT04pCisgKgorICogR2l2ZW4gYSBjb2xsYXRp b24gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBz eW50YXg6CisgKiBBTFRFUiBDT0xMQVRJT04gJXtpZGVudGl0eX1PIFJFRlJFU0ggVkVSU0lPTgor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyQ29sbGF0aW9uKE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVwbGUJY29s VHVwOworCUZvcm1fcGdfY29sbGF0aW9uIGNvbEZvcm07CisKKwljb2xUdXAgPSBTZWFyY2hTeXND YWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChjb2xUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgY29sbGF0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNvbEZvcm0gPSAoRm9ybV9w Z19jb2xsYXRpb24pIEdFVFNUUlVDVChjb2xUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEo IkFMVEVSIENPTExBVElPTiAle2lkZW50aXR5fU8gUkVGUkVTSCBWRVJTSU9OIiwgMSwKKwkJCQkJ CSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShjb2xGb3JtLT5jb2xsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKGNvbEZv cm0tPmNvbGxuYW1lKSkpOworCisJUmVsZWFzZVN5c0NhY2hlKGNvbFR1cCk7CisKKwlyZXR1cm4g cmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckZ1bmN0aW9uU3RtdCAoQUxURVIgRlVO Q1RJT04vUk9VVElORS9QUk9DRURVUkUpCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5k IHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJl cHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheDoKKyAq IEFMVEVSIEZVTkNUSU9OL1JPVVRJTkUvUFJPQ0VEVVJFICV7c2lnbmF0dXJlfXMgJXtkZWZpbml0 aW9uOiB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRnVuY3Rpb24oT2lk IG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJGdW5jdGlvblN0bXQgKm5vZGUg PSAoQWx0ZXJGdW5jdGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlP YmpUcmVlICAgICpzaWduOworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZvcm1fcGdfcHJvYyBwcm9j Rm9ybTsKKwlMaXN0CSAgICpwYXJhbXMgPSBOSUw7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJ TGlzdENlbGwgICAqY2VsbDsKKwlpbnQJCQlpOworCisJLyogR2V0IHRoZSBwZ19wcm9jIHR1cGxl ICovCisJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBvYmplY3RJZCk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJcHJvY0Zvcm0g PSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwlpZiAocHJvY0Zvcm0tPnBy b2tpbmQgPT0gUFJPS0lORF9QUk9DRURVUkUpCisJCXJldCA9IG5ld19vYmp0cmVlKCJBTFRFUiBQ Uk9DRURVUkUiKTsKKwllbHNlCisJCXJldCA9IG5ld19vYmp0cmVlKG5vZGUtPm9ianR5cGUgPT0g T0JKRUNUX1JPVVRJTkUgPworCQkJCQkJICAiQUxURVIgUk9VVElORSIgOiAiQUxURVIgRlVOQ1RJ T04iKTsKKworCS8qCisJICogQUxURVIgRlVOQ1RJT04gZG9lcyBub3QgY2hhbmdlIHNpZ25hdHVy ZSBzbyB3ZSBjYW4gdXNlIGNhdGFsb2cgdG8gZ2V0CisJICogaW5wdXQgdHlwZSBPaWRzLgorCSAq LworCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwl7CisJCU9ialRy ZWUgICAgKnRtcF9vYmo7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle3R5cGV9VCIs IDEsCisJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVf Zm9yX3R5cGUocHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXSwgLTEpKTsKKwkJcGFyYW1z ID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlz aWduID0gbmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHl9RCAoJXthcmd1bWVudHM6LCB9cykiLCAy LAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwgb2JqZWN0SWQpLAorCQkJCQkJ ICAiYXJndW1lbnRzIiwgT2JqVHlwZUFycmF5LCBwYXJhbXMpOworCisJYXBwZW5kX29iamVjdF9v YmplY3QocmV0LCAiJXtzaWduYXR1cmV9cyIsIHNpZ24pOworCisJZm9yZWFjaChjZWxsLCBub2Rl LT5hY3Rpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3Qo Y2VsbCk7CisJCU9ialRyZWUgICAgKnRtcF9vYmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZGVm ZWwtPmRlZm5hbWUsICJ2b2xhdGlsaXR5IikgPT0gMCkKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJl ZShzdHJWYWwoZGVmZWwtPmFyZykpOworCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUs ICJzdHJpY3QiKSA9PSAwKQorCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKGJvb2xWYWwoZGVmZWwt PmFyZykgPworCQkJCQkJCQkgIlJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUIiA6CisJCQkJCQkJ CSAiQ0FMTEVEIE9OIE5VTEwgSU5QVVQiKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZu YW1lLCAic2VjdXJpdHkiKSA9PSAwKQorCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKGJvb2xWYWwo ZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIlNFQ1VSSVRZIERFRklORVIiIDogIlNFQ1VSSVRZIElO Vk9LRVIiKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAibGVha3Byb29mIikg PT0gMCkKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZShib29sVmFsKGRlZmVsLT5hcmcpID8KKwkJ CQkJCQkJICJMRUFLUFJPT0YiIDogIk5PVCBMRUFLUFJPT0YiKTsKKwkJZWxzZSBpZiAoc3RyY21w KGRlZmVsLT5kZWZuYW1lLCAiY29zdCIpID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWVf VkEoIkNPU1QgJXtjb3N0fW4iLCAxLAorCQkJCQkJCQkJImNvc3QiLCBPYmpUeXBlRmxvYXQsCisJ CQkJCQkJCQlkZWZHZXROdW1lcmljKGRlZmVsKSk7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ ZGVmbmFtZSwgInJvd3MiKSA9PSAwKQorCQl7CisJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIlJP V1MiKTsKKwkJCWlmIChkZWZHZXROdW1lcmljKGRlZmVsKSA9PSAwKQorCQkJCWFwcGVuZF9ub3Rf cHJlc2VudCh0bXBfb2JqKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfZmxvYXRfb2JqZWN0KHRtcF9v YmosICIle3Jvd3N9biIsCisJCQkJCQkJCQlkZWZHZXROdW1lcmljKGRlZmVsKSk7CisJCX0KKwkJ ZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2V0IikgPT0gMCkKKwkJeworCQkJVmFy aWFibGVTZXRTdG10ICpzc3RtdCA9IChWYXJpYWJsZVNldFN0bXQgKikgZGVmZWwtPmFyZzsKKwkJ CWNoYXIJICAgKnZhbHVlID0gRXh0cmFjdFNldFZhcmlhYmxlQXJncyhzc3RtdCk7CisKKwkJCXRt cF9vYmogPSBkZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+bmFtZSwgdmFs dWUpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN1cHBvcnQiKSA9 PSAwKQorCQl7CisJCQlPaWQJCQlhcmd0eXBlc1sxXTsKKworCQkJdG1wX29iaiA9IG5ld19vYmp0 cmVlKCJTVVBQT1JUIik7CisKKwkJCUFzc2VydChwcm9jRm9ybS0+cHJvc3VwcG9ydCk7CisKKwkJ CS8qCisJCQkgKiBXZSBzaG91bGQgcXVhbGlmeSB0aGUgc3VwcG9ydCBmdW5jdGlvbidzIG5hbWUg aWYgaXQgd291bGRuJ3QgYmUKKwkJCSAqIHJlc29sdmVkIGJ5IGxvb2t1cCBpbiB0aGUgY3VycmVu dCBzZWFyY2ggcGF0aC4KKwkJCSAqLworCQkJYXJndHlwZXNbMF0gPSBJTlRFUk5BTE9JRDsKKwkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle25hbWV9cyIsICJuYW1lIiwKKwkJCQkJ CQkJIGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUocHJvY0Zvcm0tPnByb3N1cHBvcnQsIDEsCisJCQkJ CQkJCQkJCQkJCU5JTCwgYXJndHlwZXMsCisJCQkJCQkJCQkJCQkJCWZhbHNlLCBOVUxMLAorCQkJ CQkJCQkJCQkJCQlFWFBSX0tJTkRfTk9ORSkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZl bC0+ZGVmbmFtZSwgInBhcmFsbGVsIikgPT0gMCkKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9W QSgiUEFSQUxMRUwgJXt2YWx1ZX1zIiwgMSwKKwkJCQkJCQkJCSJ2YWx1ZSIsIE9ialR5cGVTdHJp bmcsIHN0clZhbChkZWZlbC0+YXJnKSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQs ICIle2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXAp OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJPYmplY3RTY2hl bWFTdG10IChBTFRFUiAuLi4gU0VUIFNDSEVNQSBjb21tYW5kKQorICoKKyAqIEdpdmVuIHRoZSBv YmplY3QgYWRkcmVzcyBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4g YW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBBTFRFUiAlcyAle2lkZW50aXR5fXMgU0VUIFNDSEVNQSAle25ld3Nj aGVtYX1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPYmplY3RTY2hlbWFT dG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJCSAgT2Jq ZWN0QWRkcmVzcyBvbGRfc2NoZW1hKQoreworCUFsdGVyT2JqZWN0U2NoZW1hU3RtdCAqbm9kZSA9 IChBbHRlck9iamVjdFNjaGVtYVN0bXQgKikgcGFyc2V0cmVlOworCWNoYXIJICAgKmlkZW50aXR5 OworCWNoYXIJICAgKm5ld19zY2hlbWEgPSBub2RlLT5uZXdzY2hlbWE7CisJY2hhcgkgICAqb2xk X3NjaG5hbWU7CisJY2hhcgkgICAqaWRlbnQ7CisKKwkvKgorCSAqIFNpbmNlIHRoZSBjb21tYW5k IGhhcyBhbHJlYWR5IHRha2VuIHBsYWNlIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YKKwkgKiBj YXRhbG9ncywgZ2V0T2JqZWN0SWRlbnRpdHkgcmV0dXJucyB0aGUgb2JqZWN0IG5hbWUgd2l0aCB0 aGUgYWxyZWFkeQorCSAqIGNoYW5nZWQgc2NoZW1hLiAgVGhlIG91dHB1dCBvZiBvdXIgZGVwYXJz aW5nIG11c3QgcmV0dXJuIHRoZSBvcmlnaW5hbAorCSAqIHNjaGVtYSBuYW1lLCBob3dldmVyLCBz byB3ZSBjaG9wIHRoZSBzY2hlbWEgbmFtZSBvZmYgdGhlIGlkZW50aXR5CisJICogc3RyaW5nIGFu ZCB0aGVuIHByZXBlbmQgdGhlIHF1b3RlZCBzY2hlbWEgbmFtZS4KKwkgKgorCSAqIFhYWCBUaGlz IGlzIHByZXR0eSBjbHVua3kuIENhbiB3ZSBkbyBiZXR0ZXI/CisJICovCisJaWRlbnRpdHkgPSBn ZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpOworCW9sZF9zY2huYW1lID0gZ2V0X25h bWVzcGFjZV9uYW1lKG9sZF9zY2hlbWEub2JqZWN0SWQpOworCWlmICghb2xkX3NjaG5hbWUpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzY2hlbWEgd2l0aCBPSUQgJXUi LAorCQkJIG9sZF9zY2hlbWEub2JqZWN0SWQpOworCisJaWRlbnQgPSBwc3ByaW50ZigiJXMlcyIs IHF1b3RlX2lkZW50aWZpZXIob2xkX3NjaG5hbWUpLAorCQkJCQkgaWRlbnRpdHkgKyBzdHJsZW4o cXVvdGVfaWRlbnRpZmllcihuZXdfc2NoZW1hKSkpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZB KCJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fXMgU0VUIFNDSEVNQSAle25ld3NjaGVtYX1J IiwgMywKKwkJCQkJCSAgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBzdHJpbmdp Znlfb2JqdHlwZShub2RlLT5vYmplY3RUeXBlLCBmYWxzZSksCisJCQkJCQkgICJpZGVudGl0eSIs IE9ialR5cGVTdHJpbmcsIGlkZW50LAorCQkJCQkJICAibmV3c2NoZW1hIiwgT2JqVHlwZVN0cmlu ZywgbmV3X3NjaGVtYSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgR1JBTlQvUkVWT0tFIGNvbW1h bmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEdSQU5UICV7cHJpdmlsZWdlczosIH1zIE9O IiAle29ianR5cGV9cyAle3ByaXZ0YXJnZXQ6LCB9cyBUTyAle2dyYW50ZWVzOiwgfXMKKyAqICV7 Z3JhbnRfb3B0aW9ufXMgR1JBTlRFRCBCWSAle3JvbGVuYW1lfXMKKyAqIAkJT1IKKyAqIFJFVk9L RSAle3ByaXZpbGVnZXM6LCB9cyBPTiIgJXtvYmp0eXBlfXMgJXtwcml2dGFyZ2V0OiwgfXMKKyAq IEZST00gJXtncmFudGVlczosIH1zICV7Z3JhbnRfb3B0aW9ufXMgJXtjYXNjYWRlfXMKKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9HcmFudFN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21k KQoreworCUludGVybmFsR3JhbnQgKmlzdG10OworCU9ialRyZWUgICAgKnJldDsKKwlMaXN0CSAg ICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJT2lkCQkJY2xhc3NJZDsKKwlPYmpU cmVlICAgICp0bXA7CisKKwkvKiBEb24ndCBkZXBhcnNlIFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQg d2hpbGUgY3JlYXRpbmcgZXh0ZW5zaW9uICovCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uKQorCQly ZXR1cm4gTlVMTDsKKworCWlzdG10ID0gY21kLT5kLmdyYW50LmlzdG10OworCisJLyoKKwkgKiBJ ZiB0aGVyZSBhcmUgbm8gb2JqZWN0cyBmcm9tICJBTEwgLi4uIElOIFNDSEVNQSIgdG8gYmUgZ3Jh bnRlZCwgdGhlbgorCSAqIG5vdGhpbmcgdG8gZG8uCisJICovCisJaWYgKGlzdG10LT5vYmplY3Rz ID09IE5JTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzd2l0Y2ggKGlzdG10LT5vYmp0eXBlKQorCXsK KwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJY2FzZSBPQkpF Q1RfU0VRVUVOQ0U6CisJCQljbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOworCQkJYnJlYWs7 CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCWNsYXNzSWQg PSBUeXBlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GRFc6CisJCQljbGFz c0lkID0gRm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9C SkVDVF9GT1JFSUdOX1NFUlZFUjoKKwkJCWNsYXNzSWQgPSBGb3JlaWduU2VydmVyUmVsYXRpb25J ZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJY2FzZSBPQkpFQ1RfUFJP Q0VEVVJFOgorCQljYXNlIE9CSkVDVF9ST1VUSU5FOgorCQkJY2xhc3NJZCA9IFByb2NlZHVyZVJl bGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQljbGFzc0lk ID0gTGFuZ3VhZ2VSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0xBUkdFT0JK RUNUOgorCQkJY2xhc3NJZCA9IExhcmdlT2JqZWN0UmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQlj YXNlIE9CSkVDVF9TQ0hFTUE6CisJCQljbGFzc0lkID0gTmFtZXNwYWNlUmVsYXRpb25JZDsKKwkJ CWJyZWFrOworCQljYXNlIE9CSkVDVF9EQVRBQkFTRToKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFD RToKKwkJCWNsYXNzSWQgPSBJbnZhbGlkT2lkOworCQkJZWxvZyhFUlJPUiwgImdsb2JhbCBvYmpl Y3RzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJP UiwgImludmFsaWQgT0JKRUNUIHZhbHVlICVkIiwgaXN0bXQtPm9ianR5cGUpOworCX0KKworCS8q IEdSQU5UIFRPIG9yIFJFVk9LRSBGUk9NICovCisJcmV0ID0gbmV3X29ianRyZWUoaXN0bXQtPmlz X2dyYW50ID8gIkdSQU5UIiA6ICJSRVZPS0UiKTsKKworCS8qIEJ1aWxkIGEgbGlzdCBvZiBwcml2 aWxlZ2VzIHRvIGdyYW50L3Jldm9rZSAqLworCWlmIChpc3RtdC0+YWxsX3ByaXZzKQorCXsKKwkJ dG1wID0gbmV3X29ianRyZWUoIkFMTCBQUklWSUxFR0VTIik7CisJCWxpc3QgPSBsaXN0X21ha2Ux KG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKwllbHNlCisJeworCQljaGFyICpwcml2Owor CQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfSU5TRVJUKQorCQl7CisJCQlwcml2ID0gKGNo YXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9JTlNFUlQpOworCQkJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmls ZWdlcyAmIEFDTF9TRUxFQ1QpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19z dHJpbmcoQUNMX1NFTEVDVCk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29i amVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1VQREFURSkK KwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVVBEQVRFKTsK KwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQor CQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfREVMRVRFKQorCQl7CisJCQlwcml2ID0gKGNo YXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9ERUxFVEUpOworCQkJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmls ZWdlcyAmIEFDTF9UUlVOQ0FURSkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3Rv X3N0cmluZyhBQ0xfVFJVTkNBVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmlu Z19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9SRUZF UkVOQ0VTKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9S RUZFUkVOQ0VTKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHBy aXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVFJJR0dFUikKKwkJewor CQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVFJJR0dFUik7CisJCQls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYg KGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0VYRUNVVEUpCisJCXsKKwkJCXByaXYgPSAoY2hhciAq KXByaXZpbGVnZV90b19zdHJpbmcoQUNMX0VYRUNVVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdl cyAmIEFDTF9VU0FHRSkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmlu ZyhBQ0xfVVNBR0UpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3Qo cHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9DUkVBVEUpCisJCXsK KwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX0NSRUFURSk7CisJCQls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYg KGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NSRUFURV9URU1QKQorCQl7CisJCQlwcml2ID0gKGNo YXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9DUkVBVEVfVEVNUCk7CisJCQlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5w cml2aWxlZ2VzICYgQUNMX0NPTk5FQ1QpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVn ZV90b19zdHJpbmcoQUNMX0NPTk5FQ1QpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0 cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9N QUlOVEFJTikKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xf TUFJTlRBSU4pOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJp dikpOworCQl9CisKKwkJaWYgKCFpc3RtdC0+aXNfZ3JhbnQgJiYgaXN0bXQtPmdyYW50X29wdGlv bikKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7Z3JhbnRfb3B0aW9ufXMiLCAiZ3Jh bnRfb3B0aW9uIiwKKwkJCQkJCQkJIGlzdG10LT5ncmFudF9vcHRpb24gPyAiR1JBTlQgT1BUSU9O IEZPUiIgOiAiIik7CisKKwkJaWYgKGlzdG10LT5jb2xfcHJpdnMgIT0gTklMKQorCQl7CisJCQlM aXN0Q2VsbCAgICpvY2VsbDsKKworCQkJZm9yZWFjaChvY2VsbCwgaXN0bXQtPmNvbF9wcml2cykK KwkJCXsKKwkJCQlBY2Nlc3NQcml2ICpwcml2ID0gbGZpcnN0KG9jZWxsKTsKKwkJCQlMaXN0CSAg ICpjb2xzID0gTklMOworCisJCQkJZm9yZWFjaChjZWxsLCBwcml2LT5jb2xzKQorCQkJCXsKKwkJ CQkJU3RyaW5nCSAgICpjb2xuYW1lID0gbGZpcnN0X25vZGUoU3RyaW5nLCBjZWxsKTsKKworCQkJ CQljb2xzID0gbGFwcGVuZChjb2xzLAorCQkJCQkJCQkgICBuZXdfc3RyaW5nX29iamVjdChzdHJW YWwoY29sbmFtZSkpKTsKKwkJCQl9CisKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiKCV7Y29s czosIH1zKSAle3ByaXZ9cyIsIDIsCisJCQkJCQkJCQkgImNvbHMiLCBPYmpUeXBlQXJyYXksIGNv bHMsCisJCQkJCQkJCQkgInByaXYiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJICBwcml2LT5w cml2X25hbWUgPyBwcml2LT5wcml2X25hbWUgOiAiQUxMIFBSSVZJTEVHRVMiKTsKKworCQkJCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJfQorCQl9CisJ fQorCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtwcml2aWxlZ2VzOiwgfXMgT04iLCBsaXN0 KTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7b2JqdHlwZX1zIiwgIm9ianR5cGUi LAorCQkJCQkJIChjaGFyICopc3RyaW5naWZ5X29ianR5cGUoaXN0bXQtPm9ianR5cGUsIHRydWUp KTsKKworCS8qIFRhcmdldCBvYmplY3RzLiAgV2UgdXNlIG9iamVjdCBpZGVudGl0aWVzIGhlcmUg Ki8KKwlsaXN0ID0gTklMOworCWZvcmVhY2goY2VsbCwgaXN0bXQtPm9iamVjdHMpCisJeworCQlP aWQJCQlvYmppZCA9IGxmaXJzdF9vaWQoY2VsbCk7CisJCU9iamVjdEFkZHJlc3MgYWRkcjsKKwor CQlhZGRyLmNsYXNzSWQgPSBjbGFzc0lkOworCQlhZGRyLm9iamVjdElkID0gb2JqaWQ7CisJCWFk ZHIub2JqZWN0U3ViSWQgPSAwOworCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5 fXMiLCAxLAorCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBnZXRP YmplY3RJZGVudGl0eSgmYWRkciwgZmFsc2UpKTsKKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIl e3ByaXZ0YXJnZXQ6LCB9cyIsIGxpc3QpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCBp c3RtdC0+aXNfZ3JhbnQgPyAiVE8iIDogIkZST00iKTsKKworCS8qIExpc3Qgb2YgZ3JhbnRlZXMg Ki8KKwlsaXN0ID0gTklMOworCWZvcmVhY2goY2VsbCwgaXN0bXQtPmdyYW50ZWVzKQorCXsKKwkJ T2lkCQkJZ3JhbnRlZSA9IGxmaXJzdF9vaWQoY2VsbCk7CisKKwkJdG1wID0gbmV3X29ianRyZWVf Zm9yX3JvbGVfaWQoZ3JhbnRlZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtncmFudGVl czosIH1zIiwgbGlzdCk7CisKKwkvKiBUaGUgd29yZGluZyBvZiB0aGUgZ3JhbnQgb3B0aW9uIGlz IHZhcmlhYmxlIC4uLiAqLworCWlmIChpc3RtdC0+aXNfZ3JhbnQpCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHJldCwgIiV7Z3JhbnRfb3B0aW9ufXMiLCAiZ3JhbnRfb3B0aW9uIiwKKwkJCQkJCQkg aXN0bXQtPmdyYW50X29wdGlvbiA/ICJXSVRIIEdSQU5UIE9QVElPTiIgOiAiIik7CisKKwlpZiAo aXN0bXQtPmdyYW50b3JfdWlkKQorCXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAq cm9sZW5hbWU7CisKKwkJcm9sdHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9iamVjdElk R2V0RGF0dW0oaXN0bXQtPmdyYW50b3JfdWlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChy b2x0dXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJvbGUgd2l0 aCBPSUQgJXUiLAorCQkJCSBpc3RtdC0+Z3JhbnRvcl91aWQpOworCisJCXJvbGVuYW1lID0gTmFt ZVN0cigoKEZvcm1fcGdfYXV0aGlkKSBHRVRTVFJVQ1Qocm9sdHVwKSktPnJvbG5hbWUpOworCQlh cHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJHUkFOVEVEIEJZICV7cm9sZW5hbWV9cyIsCisJCQkJ CQkJICJyb2xlbmFtZSIsIHJvbGVuYW1lKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHJvbHR1cCk7CisJ fQorCisJaWYgKCFpc3RtdC0+aXNfZ3JhbnQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwg IiV7Y2FzY2FkZX1zIiwgImNhc2NhZGUiLAorCQkJCQkJCSBpc3RtdC0+YmVoYXZpb3IgPT0gRFJP UF9DQVNDQURFID8gIkNBU0NBREUiIDogIiIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IERlcGFyc2UgYW4gQWx0ZXJPcGVyYXRvclN0bXQgKEFMVEVSIE9QRVJBVE9SIC4uLiBTRVQgLi4u KS4KKyAqCisgKiBHaXZlbiBhbiBvcGVyYXRvciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQg Y3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIg Y29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgT1BFUkFUT1IgJXtpZGVu dGl0eX1PICgle2xlZnRfdHlwZX1ULCAle3JpZ2h0X3R5cGV9VCkKKyAqIFNFVCAoJXtlbGVtczos IH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3BlcmF0b3JTdG10KE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZQlvcHJUdXA7CisJQWx0 ZXJPcGVyYXRvclN0bXQgKm5vZGUgPSAoQWx0ZXJPcGVyYXRvclN0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUgICAgKnJldDsKKwlGb3JtX3BnX29wZXJhdG9yIG9wckZvcm07CisJTGlzdENlbGwg ICAqY2VsbDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKE9QRVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQob3ByVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IG9wZXJhdG9yIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19v cGVyYXRvcikgR0VUU1RSVUNUKG9wclR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgT1BFUkFUT1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcHJGb3JtLT5vcHJuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8q IExFRlRBUkcgKi8KKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QocmV0LCAiKCV7bGVmdF90eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJsZWZ0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QocmV0LCAiKCV7bGVmdF90eXBlfXMiLCAibGVmdF90eXBlIiwgIk5PTkUiKTsKKwor CS8qIFJJR0hUQVJHICovCisJQXNzZXJ0KE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpOwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiwgJXtyaWdodF90eXBlfVQpIiwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsKKworCWZvcmVhY2go Y2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmVsZW0gPSAoRGVmRWxlbSAq KSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUgICAgKnRtcF9vYmogPSBOVUxMOworCisJCWlmIChz dHJjbXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RyaWN0IikgPT0gMCkKKwkJeworCQkJdG1wX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCJSRVNUUklDVD0iLCAxLAorCQkJCQkJCQkJImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJyZXN0cmljdCIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVz dCkpCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfUQiLAor CQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJCQllbHNlCisJCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfXMiLCAicHJvY2VkdXJlIiwK KwkJCQkJCQkJCSAiTk9ORSIpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1l LCAiam9pbiIpID09IDApCisJCXsKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiSk9JTj0i LCAxLAorCQkJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJCQlpZiAo T2lkSXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXBfb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9w cmpvaW4pKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtw cm9jZWR1cmV9cyIsICJwcm9jZWR1cmUiLAorCQkJCQkJCQkJICJOT05FIik7CisJCX0KKworCQlB c3NlcnQodG1wX29iaik7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIlNFVCAoJXtlbGVt czosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4g cmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBTFRFUiBPUEVSQVRPUiBGQU1JTFkgQUREL0RS T1AgY29tbWFuZC4KKyAqCisgKiBHaXZlbiB0aGUgQ29sbGVjdGVkQ29tbWFuZCwgcmV0dXJuIGFu IE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBBbHRlcgorICogT3BlcmF0b3IgY29tbWFuZC4KKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9 RCBVU0lORyAle2FtbmFtZX1JIEFERC9EUk9QICV7aXRlbXM6LH1zCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQWx0ZXJPcEZhbWlseShDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJ T2JqVHJlZSAgICAqcmV0OworCUFsdGVyT3BGYW1pbHlTdG10ICpzdG10ID0gKEFsdGVyT3BGYW1p bHlTdG10ICopIGNtZC0+cGFyc2V0cmVlOworCUhlYXBUdXBsZQlmdHA7CisJRm9ybV9wZ19vcGZh bWlseSBvcGZGb3JtOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsK KworCS8qIERvbid0IGRlcGFyc2UgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCB3aGlsZSBjcmVhdGlu ZyBleHRlbnNpb24gKi8KKwlpZiAoY21kLT5pbl9leHRlbnNpb24pCisJCXJldHVybiBOVUxMOwor CisJZnRwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELAorCQkJCQkJICBPYmplY3RJZEdl dERhdHVtKGNtZC0+ZC5vcGZhbS5hZGRyZXNzLm9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKGZ0cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVy YXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLAorCQkJIGNtZC0+ZC5vcGZhbS5hZGRyZXNzLm9iamVj dElkKTsKKwlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChmdHApOworCisJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQg VVNJTkcgJXthbW5hbWV9SSIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCSAiYW1uYW1l IiwgT2JqVHlwZVN0cmluZywgc3RtdC0+YW1uYW1lKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5k Lm9wZmFtLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpvcGVyID0gbGZpcnN0KGNl bGwpOworCQlPYmpUcmVlICAgICp0bXBfb2JqOworCisJCS8qCisJCSAqIFZlcmJvc2Ugc3ludGF4 CisJCSAqCisJCSAqIE9QRVJBVE9SICV7bnVtfW4gJXtvcGVyYXRvcn1PKCV7bHR5cGV9VCwgJXty dHlwZX1UKSAle3B1cnBvc2V9cworCQkgKi8KKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJP UEVSQVRPUiAle251bX1uIiwgMSwKKwkJCQkJCQkJIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVy LT5udW1iZXIpOworCisJCS8qIEFkZCB0aGUgb3BlcmF0b3IgbmFtZTsgdGhlIERST1AgY2FzZSBk b2Vzbid0IGhhdmUgdGhpcyAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRtcF9vYmosICIle29wZXJhdG9yfU8iLAorCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBvcGVy LT5vYmplY3QpKTsKKworCQkvKiBBZGQgdGhlIHR5cGVzICovCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcF9vYmosICIoJXtsdHlwZX1ULCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBl KG9wZXItPmxlZnR0eXBlLCAtMSkpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAi JXtydHlwZX1UKSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlw ZSwgLTEpKTsKKworCQkvKiBBZGQgdGhlIEZPUiBTRUFSQ0ggLyBGT1IgT1JERVIgQlkgY2xhdXNl OyBub3QgaW4gdGhlIERST1AgY2FzZSAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJ aWYgKG9wZXItPnNvcnRmYW1pbHkgPT0gSW52YWxpZE9pZCkKKwkJCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXBfb2JqLCAiJXtwdXJwb3NlfXMiLCAicHVycG9zZSIsCisJCQkJCQkJCQkgIkZPUiBT RUFSQ0giKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlPYmpUcmVlICAgICpvcmRlcmJ5X29iajsKKwor CQkJCW9yZGVyYnlfb2JqID0gbmV3X29ianRyZWVfVkEoIkZPUiBPUkRFUiBCWSAle29wZmFtaWx5 fUQiLCAxLAorCQkJCQkJCQkJCQkib3BmYW1pbHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJ CQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkJCQkJb3Blci0+c29ydGZhbWlseSkpOworCQkJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcF9vYmosICIle3B1cnBvc2V9cyIsIG9yZGVyYnlfb2JqKTsKKwkJCX0KKwkJfQor CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9 CisKKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5vcGZhbS5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1p bHlNZW1iZXIgKnByb2MgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUgICAgKnRtcF9vYmo7CisK KwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0eXBlfVQs ICV7cnR5cGV9VCkiLCAzLAorCQkJCQkJCQkibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51 bWJlciwKKwkJCQkJCQkJImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRy ZWVfZm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkJInJ0eXBlIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAt MSkpOworCisJCS8qCisJCSAqIEFkZCB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgYXJnIHR5cGVzOyB0 aGUgRFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZQorCQkgKiB0aGlzCisJCSAqLworCQlpZiAoIXN0bXQt PmlzRHJvcCkKKwkJeworCQkJSGVhcFR1cGxlCXByb2NUdXA7CisJCQlGb3JtX3BnX3Byb2MgcHJv Y0Zvcm07CisJCQlPaWQJCSAgICpwcm9hcmd0eXBlczsKKwkJCUxpc3QJICAgKmFyZ2xpc3QgPSBO SUw7CisJCQlpbnQJCQlpOworCisJCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQs IE9iamVjdElkR2V0RGF0dW0ocHJvYy0+b2JqZWN0KSk7CisJCQlpZiAoIUhlYXBUdXBsZUlzVmFs aWQocHJvY1R1cCkpCisJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHBy b2NlZHVyZSB3aXRoIE9JRCAldSIsCisJCQkJCSBwcm9jLT5vYmplY3QpOworCQkJcHJvY0Zvcm0g PSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJCXByb2FyZ3R5cGVzID0g cHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlczsKKwkJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9y bS0+cHJvbmFyZ3M7IGkrKykKKwkJCXsKKwkJCQlPYmpUcmVlICAgICphcmc7CisKKwkJCQlhcmcg PSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJCWFyZ2xpc3Qg PSBsYXBwZW5kKGFyZ2xpc3QsIG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOworCQkJfQorCisJCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtmdW5jdGlvbn1EIiwKKwkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJCQkgIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJCWFwcGVuZF9mb3JtYXRf c3RyaW5nKHRtcF9vYmosICIoIik7CisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIl e2FyZ3R5cGVzOiwgfVQiLCBhcmdsaXN0KTsKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9v YmosICIpIik7CisKKwkJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwkJfQorCisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlpZiAo c3RtdC0+aXNEcm9wKQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICJEUk9QIik7CisJZWxz ZQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICJBREQiKTsKKworCWFwcGVuZF9hcnJheV9v YmplY3QocmV0LCAiJXtpdGVtczosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZnRw KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT3duZXJTdG10 IChBTFRFUiAuLi4gT1dORVIgVE8gLi4uKS4KKyAqCisgKiBHaXZlbiB0aGUgb2JqZWN0IGFkZHJl c3MgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpU cmVlIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRh eAorICogQUxURVIgJXMgJXtpZGVudGl0eX1zIE9XTkVSIFRPICV7bmV3b3duZXJ9SQorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3duZXJTdG10KE9iamVjdEFkZHJlc3MgYWRk cmVzcywgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyT3duZXJTdG10ICpub2RlID0gKEFsdGVy T3duZXJTdG10ICopIHBhcnNldHJlZTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxURVIg JXtvYmp0eXBlfXMgJXtpZGVudGl0eX1zIE9XTkVSIFRPICV7bmV3b3duZXJ9SSIsIDMsCisJCQkJ CQkgICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgc3RyaW5naWZ5X29ianR5cGUo bm9kZS0+b2JqZWN0VHlwZSwgZmFsc2UpLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJICBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpLAorCQkJCQkJ ICAibmV3b3duZXIiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBnZXRfcm9sZXNwZWNfbmFtZShu b2RlLT5uZXdvd25lcikpOworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclNlcVN0bXQuCisg KgorICogR2l2ZW4gYSBzZXF1ZW5jZSBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1vZGlmaWVk IGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5k LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBTRVFVRU5DRSAle2lkZW50aXR5fUQg JXtkZWZpbml0aW9uOiB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyU2Vx U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7 CisJUmVsYXRpb24JcmVsYXRpb247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJ TGlzdAkgICAqZWxlbXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlGb3JtX3BnX3NlcXVl bmNlIHNlcWZvcm07CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlBbHRl clNlcVN0bXQgKmFsdGVyU2VxU3RtdCA9IChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlOworCisJ LyoKKwkgKiBTZXF1ZW5jZSBmb3IgSURFTlRJVFkgQ09MVU1OIG91dHB1dCBzZXBhcmF0ZWx5ICh2 aWEgQ1JFQVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4K KwkgKi8KKwlpZiAoYWx0ZXJTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOwor CisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVsYXRpb24g PSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9IHRhYmxl X29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9 IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2Ugd2l0aCBPSUQgICV1Iiwg b2JqZWN0SWQpOworCisJc2VxZm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2Vx dHVwbGUpOworCisJZm9yZWFjaChjZWxsLCAoKEFsdGVyU2VxU3RtdCAqKSBwYXJzZXRyZWUpLT5v cHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxs KTsKKwkJT2JqRWxlbSAgICAqbmV3ZWxtOworCisJCWlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwg ImNhY2hlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0NhY2hlKHNlcWZvcm0sIGZh bHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjeWNsZSIpID09IDApCisJ CQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DeWNsZShzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYg KHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiaW5jcmVtZW50IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRl cGFyc2VfU2VxX0luY3JlbWVudEJ5KHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21w KGVsZW0tPmRlZm5hbWUsICJtaW52YWx1ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1Nl cV9NaW52YWx1ZShzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZu YW1lLCAibWF4dmFsdWUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWF4dmFsdWUo c2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0YXJ0 IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChzZXFmb3JtLCBmYWxz ZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAicmVzdGFydCIpID09IDApCisJ CQluZXdlbG0gPSBkZXBhcnNlX1NlcV9SZXN0YXJ0KHNlcWRhdGEpOworCQllbHNlIGlmIChzdHJj bXAoZWxlbS0+ZGVmbmFtZSwgIm93bmVkX2J5IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2Vf U2VxX093bmVkQnkob2JqZWN0SWQsIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRl Zm5hbWUsICJhcyIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9BcyhlbGVtKTsKKwkJ ZWxzZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc2VxdWVuY2Ugb3B0aW9uICVzIiwgZWxlbS0+ ZGVmbmFtZSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTRVFVRU5DRSAle2lkZW50aXR5fUQgJXtkZWZpbml0 aW9uOiB9cyIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpLAorCQkJCQkJ ICJkZWZpbml0aW9uIiwgT2JqVHlwZUFycmF5LCBlbGVtcyk7CisKKwl0YWJsZV9jbG9zZShyZWws IFJvd0V4Y2x1c2l2ZUxvY2spOworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFy ZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJUeXBl U3RtdC4KKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCBhIHBhcnNlIHRyZWUgdGhhdCBtb2Rp ZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgdHlw ZS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgVFlQRSAle2lkZW50aXR5fUQgKCV7 ZGVmaW5pdGlvbjogfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJUeXBl U2V0U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKmNtZCkKK3sKKwlBbHRlclR5cGVTdG10ICphbHRl clR5cGVTZXRTdG10ID0gKEFsdGVyVHlwZVN0bXQgKikgY21kOworCUxpc3RDZWxsICAgKnBsOwor CUxpc3QJICAgKmVsZW1zID0gTklMOworCUhlYXBUdXBsZQl0eXBUdXA7CisJRm9ybV9wZ190eXBl IHR5cEZvcm07CisKKwl0eXBUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRH ZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXBUdXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIsIG9i amVjdElkKTsKKwl0eXBGb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cFR1cCk7CisK Kwlmb3JlYWNoKHBsLCBhbHRlclR5cGVTZXRTdG10LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAg ICAqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QocGwpOworCQlPYmpFbGVtICAgICpuZXdlbG07 CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN0b3JhZ2UiKSA9PSAwKQorCQkJbmV3 ZWxtID0gZGVwYXJzZV9UeXBlX1N0b3JhZ2UodHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwt PmRlZm5hbWUsICJyZWNlaXZlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9SZWNl aXZlKHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2VuZCIpID09IDAp CisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfU2VuZCh0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChk ZWZlbC0+ZGVmbmFtZSwgInR5cG1vZF9pbiIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5 cGVfVHlwbW9kX0luKHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHlw bW9kX291dCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfVHlwbW9kX091dCh0eXBG b3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImFuYWx5emUiKSA9PSAwKQorCQkJ bmV3ZWxtID0gZGVwYXJzZV9UeXBlX0FuYWx5emUodHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVm ZWwtPmRlZm5hbWUsICJzdWJzY3JpcHQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBl X1N1YnNjcmlwdCh0eXBGb3JtKTsKKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgdHlw ZSBvcHRpb24gJXMiLCBkZWZlbC0+ZGVmbmFtZSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1z LCBuZXdlbG0pOworCX0KKworCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCisJcmV0dXJuIG5l d19vYmp0cmVlX1ZBKCJBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCBTRVQgKCV7ZGVmaW5pdGlvbjog fXMpIiwgMiwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSAg b2JqZWN0SWQpLAorCQkJCQkJICAiZGVmaW5pdGlvbiIsIE9ialR5cGVBcnJheSwgZWxlbXMpOwor fQorCisvKgorICogRGVwYXJzZSBhIENvbXBvc2l0ZVR5cGVTdG10IChDUkVBVEUgVFlQRSBBUykK KyAqCisgKiBHaXZlbiBhIENvbXBvc2l0ZSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhh dCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBjcmVh dGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVFlQRSAle2lk ZW50aXR5fUQgQVMgKCV7Y29sdW1uczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0NvbXBvc2l0ZVR5cGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CUNvbXBvc2l0ZVR5cGVTdG10ICpub2RlID0gKENvbXBvc2l0ZVR5cGVTdG10ICopIHBhcnNldHJl ZTsKKwlIZWFwVHVwbGUJdHlwdHVwOworCUZvcm1fcGdfdHlwZSB0eXBmb3JtOworCVJlbGF0aW9u CXR5cGVyZWw7CisJTGlzdAkgICAqZHBjb250ZXh0OworCUxpc3QJICAgKnRhYmxlZWx0cyA9IE5J TDsKKworCS8qIEZpbmQgdGhlIHBnX3R5cGUgZW50cnkgYW5kIG9wZW4gdGhlIGNvcnJlc3BvbmRp bmcgcmVsYXRpb24gKi8KKwl0eXB0dXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0 SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXB0dXApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIs IG9iamVjdElkKTsKKwl0eXBmb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cHR1cCk7 CisJdHlwZXJlbCA9IHJlbGF0aW9uX29wZW4odHlwZm9ybS0+dHlwcmVsaWQsIEFjY2Vzc1NoYXJl TG9jayk7CisKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHR5cGVyZWwpLAorCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxpZCh0eXBlcmVsKSk7 CisKKwl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHModHlwZXJlbCwgbm9kZS0+Y29s ZGVmbGlzdCwgZHBjb250ZXh0LAorCQkJCQkJCQkJICBmYWxzZSwJLyogbm90IHR5cGVkICovCisJ CQkJCQkJCQkgIHRydWUpOwkvKiBjb21wb3NpdGUgdHlwZSAqLworCisJdGFibGVfY2xvc2UodHlw ZXJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHlwdHVwKTsKKworCXJl dHVybiBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFTICgle2NvbHVt bnM6LCB9cykiLCAyLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ ICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIG9iamVjdElkKSwK KwkJCQkJCSAgImNvbHVtbnMiLCBPYmpUeXBlQXJyYXksIHRhYmxlZWx0cyk7Cit9CisKKy8qCisg KiBEZXBhcnNlIGEgQ3JlYXRlQ29udmVyc2lvblN0bXQKKyAqCisgKiBHaXZlbiBhIGNvbnZlcnNp b24gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9z ZSBzeW50YXgKKyAqIENSRUFURSAle2RlZmF1bHR9cyBDT05WRVJTSU9OICV7aWRlbnRpdHl9RCBG T1IgJXtzb3VyY2V9TCBUTyAle2Rlc3R9TAorICogRlJPTSAle2Z1bmN0aW9ufUQKKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVDb252ZXJzaW9uKE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZQljb25UdXA7CisJUmVsYXRpb24JY29udnJlbDsK KwlGb3JtX3BnX2NvbnZlcnNpb24gY29uRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisKKwljb252 cmVsID0gdGFibGVfb3BlbihDb252ZXJzaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsK Kwljb25UdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNvbnZyZWwsIEFudW1fcGdfY29u dmVyc2lvbl9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29uVHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnZlcnNpb24gd2l0aCBP SUQgJXUiLCBvYmplY3RJZCk7CisJY29uRm9ybSA9IChGb3JtX3BnX2NvbnZlcnNpb24pIEdFVFNU UlVDVChjb25UdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSAle2RlZmF1bHR9 cyBDT05WRVJTSU9OICV7aWRlbnRpdHl9RCBGT1IgJXtzb3VyY2V9TCBUTyAle2Rlc3R9TCBGUk9N ICV7ZnVuY3Rpb259RCIsIDUsCisJCQkJCQkgICJkZWZhdWx0IiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCSAgY29uRm9ybS0+Y29uZGVmYXVsdCA/ICJERUZBVUxUIiA6ICIiLAorCQkJCQkJICAiaWRl bnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo Y29uRm9ybS0+Y29ubmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihjb25Gb3JtLT5j b25uYW1lKSksCisJCQkJCQkgICJzb3VyY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICAoY2hh ciAqKXBnX2VuY29kaW5nX3RvX2NoYXIoY29uRm9ybS0+Y29uZm9yZW5jb2RpbmcpLAorCQkJCQkJ ICAiZGVzdCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIChjaGFyICopcGdfZW5jb2RpbmdfdG9f Y2hhcihjb25Gb3JtLT5jb250b2VuY29kaW5nKSwKKwkJCQkJCSAgImZ1bmN0aW9uIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJICBjb25Gb3JtLT5jb25wcm9jKSk7CisKKwl0YWJsZV9j bG9zZShjb252cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoK KyAqIERlcGFyc2UgYSBDcmVhdGVFbnVtU3RtdCAoQ1JFQVRFIFRZUEUgQVMgRU5VTSkKKyAqCisg KiBHaXZlbiBhIEVudW0gdHlwZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFu ZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFT IEVOVU0gKCV7dmFsdWVzOiwgfUwpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3Jl YXRlRW51bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRW51 bVN0bXQgKm5vZGUgPSAoQ3JlYXRlRW51bVN0bXQgKikgcGFyc2V0cmVlOworCUxpc3QJICAgKnZh bHVlcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJZm9yZWFjaChjZWxsLCBub2RlLT52 YWxzKQorCQl2YWx1ZXMgPSBsYXBwZW5kKHZhbHVlcywgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFs KGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbCkpKSk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEo IkNSRUFURSBUWVBFICV7aWRlbnRpdHl9RCBBUyBFTlVNICgle3ZhbHVlczosIH1MKSIsIDIsCisJ CQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0SWQpLAorCQkJCQkJICAidmFsdWVz IiwgT2JqVHlwZUFycmF5LCB2YWx1ZXMpOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUV4 dGVuc2lvblN0bXQKKyAqCisgKiBHaXZlbiBhbiBleHRlbnNpb24gT0lEIGFuZCB0aGUgcGFyc2Ug dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBF WFRFTlNJT04gJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXtvcHRpb25zOiB9cworICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUV4dGVuc2lvblN0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRXh0ZW5zaW9uU3RtdCAqbm9kZSA9IChDcmVh dGVFeHRlbnNpb25TdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglwZ19leHRlbnNpb247CisJ SGVhcFR1cGxlCWV4dFR1cDsKKwlGb3JtX3BnX2V4dGVuc2lvbiBleHRGb3JtOworCU9ialRyZWUg ICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlw Z19leHRlbnNpb24gPSB0YWJsZV9vcGVuKEV4dGVuc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJZXh0VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ19leHRlbnNpb24s IEFudW1fcGdfZXh0ZW5zaW9uX29pZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChleHRUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZXh0ZW5z aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWV4dEZvcm0gPSAoRm9ybV9wZ19leHRlbnNp b24pIEdFVFNUUlVDVChleHRUdXApOworCisJLyogTGlzdCBvZiBvcHRpb25zICovCisJZm9yZWFj aChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0g KikgbGZpcnN0KGNlbGwpOworCisJCWlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAic2NoZW1hIikg PT0gMCkKKwkJeworCQkJLyogU2tpcCB0aGlzIG9uZTsgd2UgYWRkIG9uZSB1bmNvbmRpdGlvbmFs bHkgYmVsb3cgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRl Zm5hbWUsICJuZXdfdmVyc2lvbiIpID09IDApCisJCXsKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJWRVJTSU9OICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgInZlcnNpb24iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRT dHJpbmcob3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAib2xkX3ZlcnNpb24i KSA9PSAwKQorCQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRlJPTSAle3ZlcnNpb259TCIs IDIsCisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJmcm9tIiwKKwkJCQkJCQkJICJ2 ZXJzaW9uIiwgT2JqVHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZQorCQkJZWxv ZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9wdGlvbiAlcyIsIG9wdC0+ZGVmbmFtZSk7CisJfQorCisJ LyogQWRkIHRoZSBTQ0hFTUEgb3B0aW9uICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNDSEVN QSAle3NjaGVtYX1JIiwgMiwKKwkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzY2hlbWEi LAorCQkJCQkJICJzY2hlbWEiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9uYW1lc3BhY2Vf bmFtZShleHRGb3JtLT5leHRuYW1lc3BhY2UpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwl0YWJsZV9jbG9zZShwZ19leHRlbnNpb24sIEFjY2Vzc1No YXJlTG9jayk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkNSRUFURSBFWFRFTlNJT04gJXtp Zl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXtvcHRpb25zOiB9cyIsIDMsCisJCQkJCQkgICJpZl9u b3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgbm9kZS0+aWZfbm90X2V4aXN0cyA/ ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICAibmFtZSIsIE9ialR5cGVTdHJpbmcsIG5v ZGUtPmV4dG5hbWUsCisJCQkJCQkgICJvcHRpb25zIiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKK30K KworLyoKKyAqIElmIGEgY29sdW1uIG5hbWUgaXMgc3BlY2lmaWVkLCBhZGQgYW4gZWxlbWVudCBm b3IgaXQ7IG90aGVyd2lzZSBpdCdzIGEKKyAqIHRhYmxlLWxldmVsIG9wdGlvbi4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9GZHdPcHRpb25zKExpc3QgKm9wdGlvbnMsIGNoYXIgKmNv bG5hbWUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCisJaWYgKGNvbG5hbWUpCisJCXJldCA9IG5l d19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSIsIDEsCisJCQkJCQkJICJjb2x1 bW4iLCBPYmpUeXBlU3RyaW5nLCBjb2xuYW1lKTsKKwllbHNlCisJCXJldCA9IG5ld19vYmp0cmVl KCJPUFRJT05TIik7CisKKwlpZiAob3B0aW9ucyAhPSBOSUwpCisJeworCQlMaXN0CSAgICpvcHRv dXQgPSBOSUw7CisJCUxpc3RDZWxsICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCBvcHRpb25z KQorCQl7CisJCQlEZWZFbGVtICAgICplbGVtOworCQkJT2JqVHJlZSAgICAqb3B0OworCisJCQll bGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCQlzd2l0Y2ggKGVsZW0tPmRlZmFj dGlvbikKKwkJCXsKKwkJCQljYXNlIERFRkVMRU1fVU5TUEVDOgorCQkJCQlvcHQgPSBuZXdfb2Jq dHJlZV9WQSgiJXtsYWJlbH1JICV7dmFsdWV9TCIsIDIsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9i alR5cGVTdHJpbmcsIGVsZW0tPmRlZm5hbWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJ CQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKwkJCQkJYnJl YWs7CisJCQkJY2FzZSBERUZFTEVNX1NFVDoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIlNF VCAle2xhYmVsfUkgJXt2YWx1ZX1MIiwgMiwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0 cmluZywgZWxlbS0+ZGVmbmFtZSwKKwkJCQkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCQkJCQkgZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkJCQkg ZGVmR2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCQkJCQlicmVhazsKKwkJ CQljYXNlIERFRkVMRU1fQUREOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiQUREICV7bGFi ZWx9SSAle3ZhbHVlfUwiLCAyLAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBl bGVtLT5kZWZuYW1lLAorCQkJCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJ CQkJCSBlbGVtLT5hcmcgPyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRC b29sZWFuKGVsZW0pID8gIlRSVUUiIDogIkZBTFNFIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2Ug REVGRUxFTV9EUk9QOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCAle2xhYmVsfUki LCAxLAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lKTsK KwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgZGVm IGFjdGlvbiAlZCIsIGVsZW0tPmRlZmFjdGlvbik7CisJCQkJCW9wdCA9IE5VTEw7CisJCQl9CisK KwkJCW9wdG91dCA9IGxhcHBlbmQob3B0b3V0LCBuZXdfb2JqZWN0X29iamVjdChvcHQpKTsKKwkJ fQorCisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiKCV7b3B0aW9uOiAsfXMpIiwgb3B0b3V0 KTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCXJldHVybiByZXQ7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRmR3U3RtdCAoQ1JFQVRFIEZPUkVJR04gREFU QSBXUkFQUEVSKQorICoKKyAqIEdpdmVuIGFuIEZEVyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3Jl YXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIEZPUkVJR04g REFUQSBXUkFQUEVSICV7aWRlbnRpdHl9SSAle2hhbmRsZXJ9cyAle3ZhbGlkYXRvcn1zICV7Z2Vu ZXJpY19vcHRpb25zfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGZHdT dG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZkd1N0bXQgKm5v ZGUgPSAoQ3JlYXRlRmR3U3RtdCAqKSBwYXJzZXRyZWU7CisJSGVhcFR1cGxlCWZkd1R1cDsKKwlG b3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyIGZkd0Zvcm07CisJUmVsYXRpb24JcmVsOworCU9i alRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisKKwlyZWwgPSB0YWJsZV9vcGVuKEZv cmVpZ25EYXRhV3JhcHBlclJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJZmR3VHVw ID0gU2VhcmNoU3lzQ2FjaGUxKEZPUkVJR05EQVRBV1JBUFBFUk9JRCwKKwkJCQkJCQkgT2JqZWN0 SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChmZHdUdXApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZm9yZWlnbi1kYXRhIHdyYXBw ZXIgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCWZkd0Zvcm0gPSAoRm9ybV9wZ19m b3JlaWduX2RhdGFfd3JhcHBlcikgR0VUU1RSVUNUKGZkd1R1cCk7CisKKwlyZXQgPSBuZXdfb2Jq dHJlZV9WQSgiQ1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSICV7aWRlbnRpdHl9SSIsIDEsCisJ CQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihmZHdGb3JtLT5mZHduYW1l KSk7CisKKwkvKiBBZGQgSEFORExFUiBjbGF1c2UgKi8KKwlpZiAoIU9pZElzVmFsaWQoZmR3Rm9y bS0+ZmR3aGFuZGxlcikpCisJCXRtcCA9IG5ld19vYmp0cmVlKCJOTyBIQU5ETEVSIik7CisJZWxz ZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkhBTkRMRVIgJXtwcm9jZWR1cmV9RCIsIDEs CisJCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGZk d0Zvcm0tPmZkd2hhbmRsZXIpKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXto YW5kbGVyfXMiLCB0bXApOworCisJLyogQWRkIFZBTElEQVRPUiBjbGF1c2UgKi8KKwlpZiAoIU9p ZElzVmFsaWQoZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yKSkKKwkJdG1wID0gbmV3X29ianRyZWUoIk5P IFZBTElEQVRPUiIpOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFU T1IgJXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJIGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikpOworCX0KKwlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIle3ZhbGlkYXRvcn1zIiwgdG1wKTsKKworCS8qIEFkZCBhbiBP UFRJT05TIGNsYXVzZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtn ZW5lcmljX29wdGlvbnN9cyIsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlv bnMsIE5VTEwpKTsKKworCVJlbGVhc2VTeXNDYWNoZShmZHdUdXApOworCXRhYmxlX2Nsb3NlKHJl bCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJz ZSBhbiBBbHRlckZkd1N0bXQgKEFMVEVSIEZPUkVJR04gREFUQSBXUkFQUEVSKQorICoKKyAqIEdp dmVuIGFuIEZEVyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJu IGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1J ICV7ZmR3X29wdGlvbnM6IH1zICV7Z2VuZXJpY19vcHRpb25zfUQKKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9BbHRlckZkd1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJQWx0ZXJGZHdTdG10ICpub2RlID0gKEFsdGVyRmR3U3RtdCAqKSBwYXJzZXRyZWU7CisJ SGVhcFR1cGxlCWZkd1R1cDsKKwlGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyIGZkd0Zvcm07 CisJUmVsYXRpb24JcmVsOworCU9ialRyZWUgICAgKnJldDsKKwlMaXN0CSAgICpmZHdfb3B0aW9u cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJcmVsID0gdGFibGVfb3BlbihGb3JlaWdu RGF0YVdyYXBwZXJSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCWZkd1R1cCA9IFNl YXJjaFN5c0NhY2hlMShGT1JFSUdOREFUQVdSQVBQRVJPSUQsCisJCQkJCQkJIE9iamVjdElkR2V0 RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZmR3VHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZvcmVpZ24tZGF0YSB3cmFwcGVyIHdp dGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlmZHdGb3JtID0gKEZvcm1fcGdfZm9yZWln bl9kYXRhX3dyYXBwZXIpIEdFVFNUUlVDVChmZHdUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIEZPUkVJR04gREFUQSBXUkFQUEVSICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkg ImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihmZHdGb3JtLT5mZHduYW1lKSk7CisK KwkvKgorCSAqIEl0ZXJhdGUgdGhyb3VnaCBvcHRpb25zLCB0byBzZWUgd2hhdCBjaGFuZ2VkLCBi dXQgdXNlIGNhdGFsb2cgYXMgYQorCSAqIGJhc2lzIGZvciBuZXcgdmFsdWVzLgorCSAqLworCWZv cmVhY2goY2VsbCwgbm9kZS0+ZnVuY19vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbTsK KwkJT2JqVHJlZSAgICAqdG1wOworCisJCWVsZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKHBn X3N0cmNhc2VjbXAoZWxlbS0+ZGVmbmFtZSwgImhhbmRsZXIiKSA9PSAwKQorCQl7CisJCQkvKiBh ZGQgSEFORExFUiBjbGF1c2UgKi8KKwkJCWlmICghT2lkSXNWYWxpZChmZHdGb3JtLT5mZHdoYW5k bGVyKSkKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZSgiTk8gSEFORExFUiIpOworCQkJZWxzZQorCQkJ eworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIQU5ETEVSICV7cHJvY2VkdXJlfUQiLCAxLAor CQkJCQkJCQkJICJwcm9jZWR1cmUiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHdo YW5kbGVyKSk7CisJCQl9CisJCQlmZHdfb3B0aW9ucyA9IGxhcHBlbmQoZmR3X29wdGlvbnMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZWxl bS0+ZGVmbmFtZSwgInZhbGlkYXRvciIpID09IDApCisJCXsKKwkJCS8qIGFkZCBWQUxJREFUT1Ig Y2xhdXNlICovCisJCQlpZiAoIU9pZElzVmFsaWQoZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yKSkKKwkJ CQl0bXAgPSBuZXdfb2JqdHJlZSgiTk8gVkFMSURBVE9SIik7CisJCQllbHNlCisJCQl7CisJCQkJ dG1wID0gbmV3X29ianRyZWVfVkEoIlZBTElEQVRPUiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJ CQkJCSAicHJvY2VkdXJlIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3dmFsaWRh dG9yKSk7CisJCQl9CisJCQlmZHdfb3B0aW9ucyA9IGxhcHBlbmQoZmR3X29wdGlvbnMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJfQorCisJLyogQWRkIEhBTkRMRVIvVkFMSURBVE9S IGlmIHNwZWNpZmllZCAqLworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtmZHdfb3B0aW9u czogfXMiLCBmZHdfb3B0aW9ucyk7CisKKwkvKiBBZGQgYW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFu eSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Z2VuZXJpY19vcHRpb25zfUQiLAor CQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxl YXNlU3lzQ2FjaGUoZmR3VHVwKTsKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2sp OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVFlQRSBBUyBS QU5HRSBzdGF0ZW1lbnQKKyAqCisgKiBHaXZlbiBhIFJhbmdlIHR5cGUgT0lEIGFuZCB0aGUgcGFy c2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRp bmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFU RSBUWVBFICV7aWRlbnRpdHl9RCBBUyBSQU5HRSAoJXtkZWZpbml0aW9uOiwgfXMpCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlUmFuZ2VTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpkZWZpbml0aW9u ID0gTklMOworCVJlbGF0aW9uCXBnX3JhbmdlOworCUhlYXBUdXBsZQlyYW5nZVR1cDsKKwlGb3Jt X3BnX3JhbmdlIHJhbmdlRm9ybTsKKwlTY2FuS2V5RGF0YSBrZXlbMV07CisJU3lzU2NhbkRlc2Mg c2NhbjsKKworCXBnX3JhbmdlID0gdGFibGVfb3BlbihSYW5nZVJlbGF0aW9uSWQsIFJvd0V4Y2x1 c2l2ZUxvY2spOworCisJU2NhbktleUluaXQoJmtleVswXSwKKwkJCQlBbnVtX3BnX3JhbmdlX3Ju Z3R5cGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJ ZEdldERhdHVtKG9iamVjdElkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3Jh bmdlLCBSYW5nZVR5cGlkSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDEsIGtleSk7CisK KwlyYW5nZVR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHJhbmdlVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJh bmdlIHdpdGggdHlwZSBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXJhbmdlRm9ybSA9IChG b3JtX3BnX3JhbmdlKSBHRVRTVFJVQ1QocmFuZ2VUdXApOworCisJLyogU1VCVFlQRSAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFID0gJXt0eXBlfUQiLCAyLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAic3VidHlwZSIsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwg cmFuZ2VGb3JtLT5ybmdzdWJ0eXBlKSk7CisJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlv biwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTVUJUWVBFX09QQ0xBU1MgKi8KKwlp ZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ3N1Ym9wYykpCisJeworCQl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiU1VCVFlQRV9PUENMQVNTID0gJXtvcGNsYXNzfUQiLCAyLAorCQkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgIm9wY2xhc3MiLAorCQkJCQkJCSAib3BjbGFzcyIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvckNs YXNzUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHJhbmdlRm9ybS0+cm5nc3Vib3BjKSk7CisJ CWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCX0KKworCS8qIENPTExBVElPTiAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5n Y29sbGF0aW9uKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRJT04gPSAle2Nv bGxhdGlvbn1EIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xsYXRp b24iLAorCQkJCQkJCSAiY29sbGF0aW9uIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CSByYW5nZUZvcm0tPnJuZ2NvbGxhdGlvbikpOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZp bml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBDQU5PTklDQUwgKi8K KwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ2Nhbm9uaWNhbCkpCisJeworCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiQ0FOT05JQ0FMID0gJXtjYW5vbmljYWx9RCIsIDIsCisJCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY2Fub25pY2FsIiwKKwkJCQkJCQkgImNhbm9uaWNhbCIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9j ZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgcmFuZ2VGb3JtLT5ybmdjYW5vbmljYWwp KTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisJfQorCisJLyogU1VCVFlQRV9ESUZGICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VG b3JtLT5ybmdzdWJkaWZmKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFX0RJ RkYgPSAle3N1YnR5cGVfZGlmZn1EIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJzdWJ0eXBlX2RpZmYiLAorCQkJCQkJCSAic3VidHlwZV9kaWZmIiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCSByYW5nZUZvcm0tPnJuZ3N1YmRpZmYpKTsKKwkJZGVmaW5pdGlv biA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJ c3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShwZ19yYW5nZSwgUm93RXhjbHVz aXZlTG9jayk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFICV7aWRlbnRp dHl9RCBBUyBSQU5HRSAoJXtkZWZpbml0aW9uOiwgfXMpIiwgMiwKKwkJCQkJCSAgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5 cGVSZWxhdGlvbklkLCBvYmplY3RJZCksCisJCQkJCQkgICJkZWZpbml0aW9uIiwgT2JqVHlwZUFy cmF5LCBkZWZpbml0aW9uKTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJFbnVtU3RtdC4K KyAqCisgKiBHaXZlbiBhbiBlbnVtIE9JRCBhbmQgYSBwYXJzZSB0cmVlIHRoYXQgbW9kaWZpZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUuCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIEFERCBWQUxV RSAle2lmX25vdF9leGlzdHN9cyAle3ZhbHVlfUwKKyAqICV7YWZ0ZXJfb3JfYmVmb3JlfXMgJXtu ZWlnaGJvcn1MCisgKiAJT1IKKyAqIEFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIFJFTkFNRSBWQUxV RSAle3ZhbHVlfUwgVE8gJXtuZXd2YWx1ZX1MCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQWx0ZXJFbnVtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRl ckVudW1TdG10ICpub2RlID0gKEFsdGVyRW51bVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUg ICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBUWVBFICV7aWRlbnRpdHl9 RCIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVj dElkKSk7CisKKwlpZiAoIW5vZGUtPm9sZFZhbCkKKwl7CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5n KHJldCwgIkFERCBWQUxVRSIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2lmX25v dF9leGlzdHN9cyIsICJpZl9ub3RfZXhpc3RzIiwKKwkJCQkJCQkgbm9kZS0+c2tpcElmTmV3VmFs RXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHJldCwgIiV7dmFsdWV9TCIsICJ2YWx1ZSIsIG5vZGUtPm5ld1ZhbCk7CisKKwkJaWYgKG5vZGUt Pm5ld1ZhbE5laWdoYm9yKQorCQl7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2Fm dGVyX29yX2JlZm9yZX1zIiwKKwkJCQkJCQkJICJhZnRlcl9vcl9iZWZvcmUiLAorCQkJCQkJCQkg bm9kZS0+bmV3VmFsSXNBZnRlciA/ICJBRlRFUiIgOiAiQkVGT1JFIik7CisJCQlhcHBlbmRfc3Ry aW5nX29iamVjdChyZXQsICIle25laWdoYm9yfUwiLCAibmVpZ2hib3IiLAorCQkJCQkJCQkgbm9k ZS0+bmV3VmFsTmVpZ2hib3IpOworCQl9CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHJldCwgIlJFTkFNRSBWQUxVRSAle3ZhbHVlfUwgVE8iLCAidmFsdWUiLAorCQkJCQkJ CSBub2RlLT5vbGRWYWwpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle25ld3ZhbHVl fUwiLCAibmV3dmFsdWUiLCBub2RlLT5uZXdWYWwpOworCX0KKworCXJldHVybiByZXQ7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRXh0ZW5zaW9uU3RtdCAoQUxURVIgRVhURU5TSU9OIC4u IFVQREFURSBUTyBWRVJTSU9OKQorICoKKyAqIEdpdmVuIGFuIGV4dGVuc2lvbiBPSUQgYW5kIGEg cGFyc2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVz ZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBF WFRFTlNJT04gJXtpZGVudGl0eX1JIFVQREFURSAle29wdGlvbnM6IH1zCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJFeHRlbnNpb25TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUFsdGVyRXh0ZW5zaW9uU3RtdCAqbm9kZSA9IChBbHRlckV4dGVuc2lv blN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXBnX2V4dGVuc2lvbjsKKwlIZWFwVHVwbGUJ ZXh0VHVwOworCUZvcm1fcGdfZXh0ZW5zaW9uIGV4dEZvcm07CisJT2JqVHJlZSAgICAqcmV0Owor CUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlEZWZFbGVtICAgICpk X25ld192ZXJzaW9uID0gTlVMTDsKKworCXBnX2V4dGVuc2lvbiA9IHRhYmxlX29wZW4oRXh0ZW5z aW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlleHRUdXAgPSBnZXRfY2F0YWxvZ19v YmplY3RfYnlfb2lkKHBnX2V4dGVuc2lvbiwgQW51bV9wZ19leHRlbnNpb25fb2lkLCBvYmplY3RJ ZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGV4dFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBleHRlbnNpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElk KTsKKwlleHRGb3JtID0gKEZvcm1fcGdfZXh0ZW5zaW9uKSBHRVRTVFJVQ1QoZXh0VHVwKTsKKwor CWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKm9wdCA9IChE ZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm5l d192ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJT2JqVHJlZSAgICAqdG1wOworCisJCQlpZiAoZF9u ZXdfdmVyc2lvbikKKwkJCQllbG9nKEVSUk9SLCAiY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IG9w dGlvbnMgZm9yIGV4dGVuc2lvbiB3aXRoIE9JRCAldSIsCisJCQkJCSBvYmplY3RJZCk7CisKKwkJ CWRfbmV3X3ZlcnNpb24gPSBvcHQ7CisKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUTyAle3Zl cnNpb259TCIsIDIsCisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2ZXJzaW9uIiwK KwkJCQkJCQkJICJ2ZXJzaW9uIiwgT2JqVHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOwor CQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJ ZWxzZQorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9wdGlvbiAlcyIsIG9wdC0+ZGVmbmFt ZSk7CisJfQorCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIEVYVEVOU0lPTiAle2lkZW50 aXR5fUkgVVBEQVRFICV7b3B0aW9uczogfXMiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5 cGVTdHJpbmcsIE5hbWVTdHIoZXh0Rm9ybS0+ZXh0bmFtZSksCisJCQkJCQkgIm9wdGlvbnMiLCBP YmpUeXBlQXJyYXksIGxpc3QpOworCisJdGFibGVfY2xvc2UocGdfZXh0ZW5zaW9uLCBBY2Nlc3NT aGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJF eHRlbnNpb25Db250ZW50c1N0bXQgKEFMVEVSIEVYVEVOU0lPTiBleHQgQUREL0RST1Agb2JqZWN0 KQorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBFWFRFTlNJT04gJXtleHRpZGVudGl0 eX1JIEFERC9EUk9QICV7b2JqaWRlbnRpdHl9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0FsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0 cmVlLAorCQkJCQkJCQkgICBPYmplY3RBZGRyZXNzIG9iamVjdEFkZHJlc3MpCit7CisJQWx0ZXJF eHRlbnNpb25Db250ZW50c1N0bXQgKm5vZGUgPSAoQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQg KikgcGFyc2V0cmVlOworCisJQXNzZXJ0KG5vZGUtPmFjdGlvbiA9PSArMSB8fCBub2RlLT5hY3Rp b24gPT0gLTEpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBFWFRFTlNJT04gJXtl eHRpZGVudGl0eX1JICV7ZXh0b3B0aW9ufXMgJXtleHRvYmp0eXBlfXMgJXtvYmppZGVudGl0eX1z IiwgNCwKKwkJCQkJCSAgImV4dGlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ZXh0bmFt ZSwKKwkJCQkJCSAgImV4dG9wdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIG5vZGUtPmFj dGlvbiA9PSArMSA/ICJBREQiIDogIkRST1AiLAorCQkJCQkJICAiZXh0b2JqdHlwZSIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9ianR5cGUsIGZhbHNl KSwKKwkJCQkJCSAgIm9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgZ2V0T2Jq ZWN0SWRlbnRpdHkoJm9iamVjdEFkZHJlc3MsIGZhbHNlKSk7Cit9CisKKy8qCisgKiBEZXBhcnNl IGFuIENyZWF0ZUNhc3RTdG10LgorICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCBhIHBh cnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2Vu dGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JF QVRFIENBU1QgKCV7c291cmNldHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSAle21lY2hhbmlzbX1z ICV7Y29udGV4dH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlQ2FzdFN0 bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlQ2FzdFN0bXQgKm5v ZGUgPSAoQ3JlYXRlQ2FzdFN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCWNhc3RyZWw7CisJ SGVhcFR1cGxlCWNhc3RUdXA7CisJRm9ybV9wZ19jYXN0IGNhc3RGb3JtOworCU9ialRyZWUgICAg KnJldDsKKwljaGFyCSAgICpjb250ZXh0OworCisJY2FzdHJlbCA9IHRhYmxlX29wZW4oQ2FzdFJl bGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJY2FzdFR1cCA9IGdldF9jYXRhbG9nX29iamVj dF9ieV9vaWQoY2FzdHJlbCwgQW51bV9wZ19jYXN0X29pZCwgb2JqZWN0SWQpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChjYXN0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIGNhc3Qgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJY2FzdEZvcm0gPSAoRm9ybV9w Z19jYXN0KSBHRVRTVFJVQ1QoY2FzdFR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JF QVRFIENBU1QgKCV7c291cmNldHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSIsIDIsCisJCQkJCQkg InNvdXJjZXR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBl KGNhc3RGb3JtLT5jYXN0c291cmNlLCAtMSksCisJCQkJCQkgInRhcmdldHR5cGUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0dGFyZ2V0 LCAtMSkpOworCisJaWYgKG5vZGUtPmlub3V0KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQs ICIle21lY2hhbmlzbX1zIiwgIm1lY2hhbmlzbSIsCisJCQkJCQkJICJXSVRIIElOT1VUIik7CisJ ZWxzZSBpZiAobm9kZS0+ZnVuYyA9PSBOVUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQs ICIle21lY2hhbmlzbX1zIiwgIm1lY2hhbmlzbSIsCisJCQkJCQkJICJXSVRIT1VUIEZVTkNUSU9O Iik7CisJZWxzZQorCXsKKwkJT2JqVHJlZSAgICAqdG1wX29iajsKKwkJU3RyaW5nSW5mb0RhdGEg ZnVuYzsKKwkJSGVhcFR1cGxlCWZ1bmNUdXA7CisJCUZvcm1fcGdfcHJvYyBmdW5jRm9ybTsKKwkJ aW50CQkJaTsKKworCQlmdW5jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIGNhc3RGb3Jt LT5jYXN0ZnVuYyk7CisJCWZ1bmNGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKGZ1bmNU dXApOworCisJCWluaXRTdHJpbmdJbmZvKCZmdW5jKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmZnVu YywgIiVzKCIsCisJCQkJCQkgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFj ZV9uYW1lKGZ1bmNGb3JtLT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJCU5hbWVTdHIoZnVu Y0Zvcm0tPnByb25hbWUpKSk7CisJCWZvciAoaSA9IDA7IGkgPCBmdW5jRm9ybS0+cHJvbmFyZ3M7 IGkrKykKKwkJeworCQkJaWYgKGkgIT0gMCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZnVu YywgJywnKTsKKworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZnVuYywKKwkJCQkJCQkJICAg Zm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKGZ1bmNGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0p KTsKKwkJfQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZnVuYywgJyknKTsKKworCQl0bXBfb2Jq ID0gbmV3X29ianRyZWVfVkEoIldJVEggRlVOQ1RJT04gJXtjYXN0ZnVuY3Rpb259cyIsIDEsCisJ CQkJCQkJCSJjYXN0ZnVuY3Rpb24iLCBPYmpUeXBlU3RyaW5nLCBmdW5jLmRhdGEpOworCQlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle21lY2hhbmlzbX1zIiwgdG1wX29iaik7CisKKwkJUmVs ZWFzZVN5c0NhY2hlKGZ1bmNUdXApOworCX0KKworCXN3aXRjaCAobm9kZS0+Y29udGV4dCkKKwl7 CisJCWNhc2UgQ09FUkNJT05fSU1QTElDSVQ6CisJCQljb250ZXh0ID0gIkFTIElNUExJQ0lUIjsK KwkJCWJyZWFrOworCQljYXNlIENPRVJDSU9OX0FTU0lHTk1FTlQ6CisJCQljb250ZXh0ID0gIkFT IEFTU0lHTk1FTlQiOworCQkJYnJlYWs7CisJCWNhc2UgQ09FUkNJT05fRVhQTElDSVQ6CisJCQlj b250ZXh0ID0gIiI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZh bGlkIGNvZXJjaW9uIGNvZGUgJWMiLCBub2RlLT5jb250ZXh0KTsKKwkJCXJldHVybiBOVUxMOwkJ Lyoga2VlcCBjb21waWxlciBxdWlldCAqLworCX0KKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQs ICIle2NvbnRleHR9cyIsICJjb250ZXh0IiwgY29udGV4dCk7CisKKwl0YWJsZV9jbG9zZShjYXN0 cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFy c2UgYW4gQUxURVIgREVGQVVMVCBQUklWSUxFR0VTIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogQUxURVIgREVGQVVMVCBQUklWSUxFR0VTICV7aW5fc2NoZW1hfXMgJXtmb3Jf cm9sZXN9cyAle2dyYW50fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckRl ZmF1bHRQcml2aWxlZ2VzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZSAg ICAqcmV0OworCUFsdGVyRGVmYXVsdFByaXZpbGVnZXNTdG10ICpzdG10ID0gKEFsdGVyRGVmYXVs dFByaXZpbGVnZXNTdG10ICopIGNtZC0+cGFyc2V0cmVlOworCUxpc3QJICAgKnJvbGVzID0gTklM OworCUxpc3QJICAgKnNjaGVtYXMgPSBOSUw7CisJTGlzdAkgICAqZ3JhbnRlZXM7CisJTGlzdAkg ICAqcHJpdnM7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPYmpUcmVlICAgICp0bXA7CisJT2JqVHJl ZSAgICAqZ3JhbnQ7CisJY2hhcgkgICAqb2JqdHlwZTsKKworCXJldCA9IG5ld19vYmp0cmVlKCJB TFRFUiBERUZBVUxUIFBSSVZJTEVHRVMiKTsKKworCS8qIFNjYW4gdGhlIHBhcnNlIG5vZGUgdG8g ZGlnIG91dCB0aGUgRk9SIFJPTEUgYW5kIElOIFNDSEVNQSBjbGF1c2VzICovCisJZm9yZWFjaChj ZWxsLCBzdG10LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikg bGZpcnN0KGNlbGwpOworCQlMaXN0Q2VsbCAgICpjZWxsMjsKKworCQlBc3NlcnQoSXNBKG9wdCwg RGVmRWxlbSkpOworCQlBc3NlcnQoSXNBKG9wdC0+YXJnLCBMaXN0KSk7CisJCWlmIChzdHJjbXAo b3B0LT5kZWZuYW1lLCAicm9sZXMiKSA9PSAwKQorCQl7CisJCQlmb3JlYWNoKGNlbGwyLCAoTGlz dCAqKSBvcHQtPmFyZykKKwkJCXsKKwkJCQlSb2xlU3BlYyAgICpyb2xlc3BlYyA9IGxmaXJzdChj ZWxsMik7CisJCQkJT2JqVHJlZSAgICAqb2JqID0gbmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKHJv bGVzcGVjKTsKKworCQkJCXJvbGVzID0gbGFwcGVuZChyb2xlcywgbmV3X29iamVjdF9vYmplY3Qo b2JqKSk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgInNjaGVt YXMiKSA9PSAwKQorCQl7CisJCQlmb3JlYWNoKGNlbGwyLCAoTGlzdCAqKSBvcHQtPmFyZykKKwkJ CXsKKwkJCQlTdHJpbmcJICAgKnZhbCA9IGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbDIpOworCisJ CQkJc2NoZW1hcyA9IGxhcHBlbmQoc2NoZW1hcywgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKHZh bCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIEFkZCB0aGUgSU4gU0NIRU1BIGNsYXVzZSwgaWYg YW55ICovCisJdG1wID0gbmV3X29ianRyZWUoIklOIFNDSEVNQSIpOworCWFwcGVuZF9hcnJheV9v YmplY3QodG1wLCAiJXtzY2hlbWFzOiwgfUkiLCBzY2hlbWFzKTsKKwlpZiAoc2NoZW1hcyA9PSBO SUwpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7aW5fc2NoZW1hfXMiLCB0bXApOworCisJLyogQWRkIHRoZSBGT1IgUk9MRSBjbGF1c2Us IGlmIGFueSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJGT1IgUk9MRSIpOworCWFwcGVuZF9hcnJh eV9vYmplY3QodG1wLCAiJXtyb2xlczosIH1SIiwgcm9sZXMpOworCWlmIChyb2xlcyA9PSBOSUwp CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwg IiV7Zm9yX3JvbGVzfXMiLCB0bXApOworCisJLyoKKwkgKiBBZGQgdGhlIEdSQU5UIHN1YmNvbW1h bmQKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqIEdSQU5UICV7cHJpdmlsZWdlczosIH1zIE9OICV7 dGFyZ2V0fXMgVE8gJXtncmFudGVlczosIH1SICV7Z3JhbnRfb3B0aW9ufXMKKwkgKiBvcgorCSAq IFJFVk9LRSAle2dyYW50X29wdGlvbn1zICV7cHJpdmlsZWdlczosIH1zIE9OICV7dGFyZ2V0fXMg RlJPTSAle2dyYW50ZWVzOiwgfVIKKwkgKi8KKwlpZiAoc3RtdC0+YWN0aW9uLT5pc19ncmFudCkK KwkJZ3JhbnQgPSBuZXdfb2JqdHJlZSgiR1JBTlQiKTsKKwllbHNlCisJeworCQlncmFudCA9IG5l d19vYmp0cmVlKCJSRVZPS0UiKTsKKworCQkvKiBBZGQgdGhlIEdSQU5UIE9QVElPTiBjbGF1c2Ug Zm9yIFJFVk9LRSBzdWJjb21tYW5kICovCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJHUkFOVCBP UFRJT04gRk9SIiwgMSwKKwkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCQkg c3RtdC0+YWN0aW9uLT5ncmFudF9vcHRpb24pOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChncmFu dCwgIiV7Z3JhbnRfb3B0aW9ufXMiLCB0bXApOworCX0KKworCS8qCisJICogQWRkIHRoZSBwcml2 aWxlZ2VzIGxpc3QuICBUaGlzIHVzZXMgdGhlIHBhcnNlciBzdHJ1Y3QsIGFzIG9wcG9zZWQgdG8K KwkgKiB0aGUgSW50ZXJuYWxHcmFudCBmb3JtYXQgdXNlZCBieSBHUkFOVC4gIFRoZXJlIGFyZSBl bm91Z2ggb3RoZXIKKwkgKiBkaWZmZXJlbmNlcyB0aGF0IHRoaXMgZG9lc24ndCBzZWVtIHdvcnRo IGltcHJvdmluZy4KKwkgKi8KKwlpZiAoc3RtdC0+YWN0aW9uLT5wcml2aWxlZ2VzID09IE5JTCkK KwkJcHJpdnMgPSBsaXN0X21ha2UxKG5ld19zdHJpbmdfb2JqZWN0KCJBTEwgUFJJVklMRUdFUyIp KTsKKwllbHNlCisJeworCQlwcml2cyA9IE5JTDsKKworCQlmb3JlYWNoKGNlbGwsIHN0bXQtPmFj dGlvbi0+cHJpdmlsZWdlcykKKwkJeworCQkJQWNjZXNzUHJpdiAqcHJpdiA9IGxmaXJzdChjZWxs KTsKKworCQkJQXNzZXJ0KHByaXYtPmNvbHMgPT0gTklMKTsKKwkJCXByaXZzID0gbGFwcGVuZChw cml2cywgbmV3X3N0cmluZ19vYmplY3QocHJpdi0+cHJpdl9uYW1lKSk7CisJCX0KKwl9CisKKwlh cHBlbmRfYXJyYXlfb2JqZWN0KGdyYW50LCAiJXtwcml2aWxlZ2VzOiwgfXMiLCBwcml2cyk7CisK Kwlzd2l0Y2ggKGNtZC0+ZC5kZWZwcml2cy5vYmp0eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfVEFC TEU6CisJCQlvYmp0eXBlID0gIlRBQkxFUyI7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRlVO Q1RJT046CisJCQlvYmp0eXBlID0gIkZVTkNUSU9OUyI7CisJCQlicmVhazsKKwkJY2FzZSBPQkpF Q1RfUk9VVElORToKKwkJCW9ianR5cGUgPSAiUk9VVElORVMiOworCQkJYnJlYWs7CisJCWNhc2Ug T0JKRUNUX1NFUVVFTkNFOgorCQkJb2JqdHlwZSA9ICJTRVFVRU5DRVMiOworCQkJYnJlYWs7CisJ CWNhc2UgT0JKRUNUX1RZUEU6CisJCQlvYmp0eXBlID0gIlRZUEVTIjsKKwkJCWJyZWFrOworCQlj YXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlvYmp0eXBlID0gIlNDSEVNQVMiOworCQkJYnJlYWs7CisJ CWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBPQkpFQ1QgdmFsdWUgJWQgZm9yIGRl ZmF1bHQgcHJpdmlsZWdlcyIsIGNtZC0+ZC5kZWZwcml2cy5vYmp0eXBlKTsKKwl9CisKKwkvKiBB ZGQgdGhlIHRhcmdldCBvYmplY3QgdHlwZSAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50 LCAiT04gJXt0YXJnZXR9cyIsICJ0YXJnZXQiLCBvYmp0eXBlKTsKKworCS8qIEFkZCB0aGUgZ3Jh bnRlZSBsaXN0ICovCisJZ3JhbnRlZXMgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBzdG10LT5hY3Rp b24tPmdyYW50ZWVzKQorCXsKKwkJUm9sZVNwZWMgICAqc3BlYyA9IChSb2xlU3BlYyAqKSBsZmly c3QoY2VsbCk7CisJCU9ialRyZWUgICAgKm9iaiA9IG5ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhz cGVjKTsKKworCQlncmFudGVlcyA9IGxhcHBlbmQoZ3JhbnRlZXMsIG5ld19vYmplY3Rfb2JqZWN0 KG9iaikpOworCX0KKworCWlmIChzdG10LT5hY3Rpb24tPmlzX2dyYW50KQorCXsKKwkJYXBwZW5k X2FycmF5X29iamVjdChncmFudCwgIlRPICV7Z3JhbnRlZXM6LCB9UiIsIGdyYW50ZWVzKTsKKwor CQkvKiBBZGQgdGhlIFdJVEggR1JBTlQgT1BUSU9OIGNsYXVzZSBmb3IgR1JBTlQgc3ViY29tbWFu ZCAqLworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCBHUkFOVCBPUFRJT04iLCAxLAorCQkJ CQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJCQkJCSBzdG10LT5hY3Rpb24tPmdyYW50 X29wdGlvbik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGdyYW50LCAiJXtncmFudF9vcHRpb259 cyIsIHRtcCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2FycmF5X29iamVjdChncmFudCwgIkZST00g JXtncmFudGVlczosIH1SIiwgZ3JhbnRlZXMpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0 LCAiJXtncmFudH1zIiwgZ3JhbnQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFy c2UgYWxsIHRoZSBjb2xsZWN0ZWQgc3ViY29tbWFuZHMgYW5kIHJldHVybiBhbiBPYmpUcmVlIHJl cHJlc2VudGluZyB0aGUKKyAqIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIEFMVEVSIHJlbHR5cGUgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJSZWxhdGlvbihDb2xsZWN0ZWRDb21tYW5kICpjbWQp Cit7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJT2JqVHJlZSAg ICAqdG1wX29iajI7CisJTGlzdAkgICAqZHBjb250ZXh0OworCVJlbGF0aW9uCXJlbDsKKwlMaXN0 CSAgICpzdWJjbWRzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJY29uc3QgY2hhciAqcmVs dHlwZTsKKwlib29sCQlpc3R5cGUgPSBmYWxzZTsKKwlib29sCQlpc3RhYmxlID0gZmFsc2U7CisJ TGlzdAkgICAqZXhwcnMgPSBOSUw7CisJT2lkCQkJcmVsSWQgPSBjbWQtPmQuYWx0ZXJUYWJsZS5v YmplY3RJZDsKKwlBbHRlclRhYmxlU3RtdCAqc3RtdCA9IE5VTEw7CisKKwlBc3NlcnQoY21kLT50 eXBlID09IFNDVF9BbHRlclRhYmxlKTsKKwlzdG10ID0gKEFsdGVyVGFibGVTdG10ICopIGNtZC0+ cGFyc2V0cmVlOworCUFzc2VydChJc0Eoc3RtdCwgQWx0ZXJUYWJsZVN0bXQpKTsKKworCS8qCisJ ICogQUxURVIgVEFCTEUgc3ViY29tbWFuZHMgZ2VuZXJhdGVkIGZvciBUYWJsZUxpa2VDbGF1c2Ug aXMgcHJvY2Vzc2VkIGluCisJICogdGhlIHRvcCBsZXZlbCBDUkVBVEUgVEFCTEUgY29tbWFuZDsg cmV0dXJuIGVtcHR5IGhlcmUuCisJICovCisJaWYgKHN0bXQtPnRhYmxlX2xpa2UpCisJCXJldHVy biBOVUxMOworCisJcmVsID0gcmVsYXRpb25fb3BlbihyZWxJZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbCksCisJCQkJCQkJCQlyZWxJZCk7CisKKwlzd2l0Y2ggKHJlbC0+cmRfcmVsLT5yZWxraW5k KQorCXsKKwkJY2FzZSBSRUxLSU5EX1JFTEFUSU9OOgorCQljYXNlIFJFTEtJTkRfUEFSVElUSU9O RURfVEFCTEU6CisJCQlyZWx0eXBlID0gIlRBQkxFIjsKKwkJCWlzdGFibGUgPSB0cnVlOworCQkJ YnJlYWs7CisJCWNhc2UgUkVMS0lORF9JTkRFWDoKKwkJY2FzZSBSRUxLSU5EX1BBUlRJVElPTkVE X0lOREVYOgorCQkJcmVsdHlwZSA9ICJJTkRFWCI7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5E X1ZJRVc6CisJCQlyZWx0eXBlID0gIlZJRVciOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9D T01QT1NJVEVfVFlQRToKKwkJCXJlbHR5cGUgPSAiVFlQRSI7CisJCQlpc3R5cGUgPSB0cnVlOwor CQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9GT1JFSUdOX1RBQkxFOgorCQkJcmVsdHlwZSA9ICJG T1JFSUdOIFRBQkxFIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfTUFUVklFVzoKKwkJCXJl bHR5cGUgPSAiTUFURVJJQUxJWkVEIFZJRVciOworCQkJYnJlYWs7CisKKwkJCS8qIFRPRE8gc3Vw cG9ydCBmb3IgcGFydGl0aW9uZWQgdGFibGUgKi8KKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJP UiwgInVuZXhwZWN0ZWQgcmVsa2luZCAlZCIsIHJlbC0+cmRfcmVsLT5yZWxraW5kKTsKKwl9CisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EIiwg MiwKKwkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsIHJlbHR5cGUsCisJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo cmVsLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUocmVsKSkpOworCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuYWx0ZXJUYWJsZS5zdWJj bWRzKQorCXsKKwkJQ29sbGVjdGVkQVRTdWJjbWQgKnN1YiA9IChDb2xsZWN0ZWRBVFN1YmNtZCAq KSBsZmlyc3QoY2VsbCk7CisJCUFsdGVyVGFibGVDbWQgKnN1YmNtZCA9IChBbHRlclRhYmxlQ21k ICopIHN1Yi0+cGFyc2V0cmVlOworCQlPYmpUcmVlICAgICp0cmVlOworCisJCUFzc2VydChJc0Eo c3ViY21kLCBBbHRlclRhYmxlQ21kKSk7CisKKwkgICAvKgorCQkqIFNraXAgZGVwYXJzZSBvZiB0 aGUgc3ViY29tbWFuZCBpZiB0aGUgb2JqZWN0SWQgZG9lc24ndCBtYXRjaCB0aGUKKwkJKiB0YXJn ZXQgcmVsYXRpb24gSUQuIEl0IGNhbiBoYXBwZW4gZm9yIGluaGVyaXRlZCB0YWJsZXMgd2hlbgor CQkqIHN1YmNvbW1hbmRzIGZvciBpbmhlcml0ZWQgdGFibGVzIGFuZCB0aGUgcGFyZW50IHRhYmxl IGFyZSBib3RoCisJCSogY29sbGVjdGVkIGluIHRoZSBBTFRFUiBUQUxCRSBjb21tYW5kIGZvciB0 aGUgcGFyZW50IHRhYmxlLiBXaXRoIHRoZQorCQkqIGV4Y2VwdGlvbiBvZiB0aGUgaW50ZXJuYWxs eSBnZW5lcmF0ZWQgQWRkQ29uc3RyYWludCAoZm9yCisJCSogQUxURVIgVEFCTEUgQUREIENPTlNU UkFJTlQgRk9SRUlHTiBLRVkgUkVGRVJFTkNFUykgd2hlcmUgdGhlCisJCSogb2JqZWN0SWRzIGNv dWxkIG1pc21hdGNoIChmb3JlaW4gdGFibGUgaWQgYW5kIHRoZSByZWZlcmVuY2VkIHRhYmxlCisJ CSogaWQpLgorCQkqLworCQlpZiAoKHN1Yi0+YWRkcmVzcy5vYmplY3RJZCAhPSByZWxJZCAmJgor CQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCAhPSBJbnZhbGlkT2lkKSAmJgorCQkJIShzdWJjbWQt PnN1YnR5cGUgPT0gQVRfQWRkQ29uc3RyYWludCAmJgorCQkJICBzdWJjbWQtPnJlY3Vyc2UpICYm CisJCQlpc3RhYmxlKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChzdWJjbWQtPnN1YnR5cGUp CisJCXsKKwkJCWNhc2UgQVRfQWRkQ29sdW1uOgorCQkJCS8qIFhYWCBuZWVkIHRvIHNldCB0aGUg InJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICovCisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwg Q29sdW1uRGVmKSk7CisJCQkJdHJlZSA9IGRlcGFyc2VfQ29sdW1uRGVmKHJlbCwgZHBjb250ZXh0 LCBmYWxzZSwKKwkJCQkJCQkJCQkgKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZiwgdHJ1ZSwgJmV4 cHJzKTsKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCAle29ianR5cGV9cyAle2Rl ZmluaXRpb259cyIsIDMsCisJCQkJCQkJCQkJIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJCQkJCWlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIsCisJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbHVtbiIsCisJCQkJCQkJCQkJImRlZmluaXRpb24iLCBP YmpUeXBlT2JqZWN0LCB0cmVlKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5k ZXhDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJSW5kZXhTdG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0 aW9uCWlkeDsKKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOwor CisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9 IChJbmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJQXNzZXJ0KGlzdG10LT5pc2NvbnN0 cmFpbnQgJiYgaXN0bXQtPnVuaXF1ZSk7CisKKwkJCQkJaWR4ID0gcmVsYXRpb25fb3Blbihpc3Rt dC0+aW5kZXhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9z ZSBzeW50YXgKKwkJCQkJICoKKwkJCQkJICogQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtjb25z dHJhaW50X3R5cGV9cyBVU0lORyBJTkRFWAorCQkJCQkgKiAlaW5kZXhfbmFtZX1JICV7ZGVmZXJy YWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zCisJCQkJCSAqLworCQkJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7Y29uc3RyYWludF90eXBlfXMgVVNJ TkcgSU5ERVggJXtpbmRleF9uYW1lfUkgJXtkZWZlcnJhYmxlfXMgJXtpbml0X2RlZmVycmVkfXMi LCA2LAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCB1 c2luZyBpbmRleCIsCisJCQkJCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0 cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJCQkiY29uc3RyYWludF90eXBlIiwgT2Jq VHlwZVN0cmluZywKKwkJCQkJCQkJCQkJaXN0bXQtPmRlZmVycmFibGUgPyAiREVGRVJSQUJMRSIg OiAiTk9UIERFRkVSUkFCTEUiLAorCQkJCQkJCQkJCQkiaW5kZXhfbmFtZSIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeCksCisJCQkJCQkJCQkJ CSJkZWZlcnJhYmxlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJaXN0bXQtPmRlZmVycmFi bGUgPyAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJCQkJCQkJCQkiaW5pdF9k ZWZlcnJlZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWlzdG10LT5pbml0ZGVmZXJyZWQg PyAiSU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRFIik7CisKKwkJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOwor CisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlkeCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfUmVBZGRJbmRleDoKKwkJCWNhc2UgQVRfUmVBZGRDb25zdHJh aW50OgorCQkJY2FzZSBBVF9SZUFkZENvbW1lbnQ6CisJCQljYXNlIEFUX1JlcGxhY2VSZWxPcHRp b25zOgorCQkJY2FzZSBBVF9DaGVja05vdE51bGw6CisJCQljYXNlIEFUX1JlQWRkU3RhdGlzdGlj czoKKwkJCQkvKiBTdWJ0eXBlcyB1c2VkIGZvciBpbnRlcm5hbCBvcGVyYXRpb25zOyBub3RoaW5n IHRvIGRvIGhlcmUgKi8KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Db29rZWRDb2x1bW5EZWZh dWx0OgorCQkJCXsKKwkJCQkJUmVsYXRpb24JYXR0cnJlbDsKKwkJCQkJSGVhcFR1cGxlCWF0dHR1 cDsKKwkJCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0U3RydWN0OworCisJCQkJCWF0dHJyZWwgPSB0 YWJsZV9vcGVuKEF0dHJpYnV0ZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCQkJCQlh dHR0dXAgPSBTZWFyY2hTeXNDYWNoZUNvcHkyKEFUVE5VTSwKKwkJCQkJCQkJCQkJCSBPYmplY3RJ ZEdldERhdHVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSksCisJCQkJCQkJCQkJCQkgSW50MTZHZXRE YXR1bShzdWJjbWQtPm51bSkpOworCQkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0dHVwKSkK KwkJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhdHRyaWJ1dGUgJWQg b2YgcmVsYXRpb24gd2l0aCBPSUQgJXUiLAorCQkJCQkJCSBzdWJjbWQtPm51bSwgUmVsYXRpb25H ZXRSZWxpZChyZWwpKTsKKwkJCQkJYXR0U3RydWN0ID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRT VFJVQ1QoYXR0dHVwKTsKKworCQkJCQkvKgorCQkJCQkgKiBCb3RoIGRlZmF1bHQgYW5kIGdlbmVy YXRpb24gZXhwcmVzc2lvbiBub3Qgc3VwcG9ydGVkCisJCQkJCSAqIHRvZ2V0aGVyLgorCQkJCQkg Ki8KKwkJCQkJaWYgKCFhdHRTdHJ1Y3QtPmF0dGdlbmVyYXRlZCkKKwkJCQkJCWVsb2coV0FSTklO RywgInVuc3VwcG9ydGVkIGFsdGVyIHRhYmxlIHN1YnR5cGUgJWQiLAorCQkJCQkJCSBzdWJjbWQt PnN1YnR5cGUpOworCisJCQkJCWhlYXBfZnJlZXR1cGxlKGF0dHR1cCk7CisJCQkJCXRhYmxlX2Ns b3NlKGF0dHJyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJ CWNhc2UgQVRfQWRkQ29sdW1uVG9WaWV3OgorCQkJCS8qIENSRUFURSBPUiBSRVBMQUNFIFZJRVcg LS0gbm90aGluZyB0byBkbyBoZXJlICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ29sdW1u RGVmYXVsdDoKKwkJCQlpZiAoc3ViY21kLT5kZWYgPT0gTlVMTCkKKwkJCQkJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIERFRkFVTFQiLCAyLAor CQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGRlZmF1bHQiLAorCQkJCQkJ CQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQllbHNlCisJ CQkJeworCQkJCQlMaXN0CSAgICpkcGNvbnRleHRfcmVsOworCQkJCQlIZWFwVHVwbGUJYXR0cnR1 cDsKKwkJCQkJQXR0ck51bWJlcglhdHRubzsKKworCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBERUZBVUxUIiwgMiwKKwkJCQkJCQkJCQkJ InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGRlZmF1bHQiLAorCQkJCQkJCQkJCQkiY29sdW1u IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlkcGNvbnRleHRfcmVsID0g ZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJ CQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQlhdHRydHVwID0gU2VhcmNoU3lz Q2FjaGVBdHROYW1lKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJ YXR0bm8gPSAoKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0cnR1cCkpLT5hdHRudW07 CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2RlZmluaXRpb259cyIsICJk ZWZpbml0aW9uIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbCwgYXR0 bm8sCisJCQkJCQkJCQkJCQkJCQkJICBkcGNvbnRleHRfcmVsLAorCQkJCQkJCQkJCQkJCQkJCSAg TlVMTCkpOworCQkJCQlSZWxlYXNlU3lzQ2FjaGUoYXR0cnR1cCk7CisJCQkJfQorCisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BOb3ROdWxsOgorCQkJCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBOT1QgTlVMTCIsIDIsCisJCQkJ CQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBub3QgbnVsbCIsCisJCQkJCQkJCQkJ ImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0ZvcmNlUm93U2VjdXJpdHk6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVl KCJGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfTm9Gb3JjZVJvd1NlY3VyaXR5OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiTk8gRk9S Q0UgUk9XIExFVkVMIFNFQ1VSSVRZIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1Nl dE5vdE51bGw6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtj b2x1bW59SSBTRVQgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgInNldCBub3QgbnVsbCIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BFeHByZXNzaW9u OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkg RFJPUCBFWFBSRVNTSU9OICV7aWZfZXhpc3RzfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImRyb3AgZXhwcmVzc2lvbiIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5 cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkiaWZfZXhpc3RzIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCQkJCQlzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0U3RhdGlzdGljczoKKwkJCQl7CisJCQkJ CUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEludGVnZXIpKTsKKwkJCQkJaWYgKHN1YmNtZC0+bmFt ZSkKKwkJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkgU0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNzfW4iLCAzLAorCQkJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkJImNvbHVtbiIs IE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkJCSJzdGF0aXN0aWNzIiwg T2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJCQlpbnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5k ZWYpKTsKKwkJCQkJZWxzZQorCQkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBD T0xVTU4gJXtjb2x1bW59biBTRVQgU1RBVElTVElDUyAle3N0YXRpc3RpY3N9biIsIDMsCisJCQkJ CQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RhdGlzdGljcyIsCisJCQkJCQkJ CQkJCQkiY29sdW1uIiwgT2JqVHlwZUludGVnZXIsIHN1YmNtZC0+bnVtLAorCQkJCQkJCQkJCQkJ InN0YXRpc3RpY3MiLCBPYmpUeXBlSW50ZWdlciwKKwkJCQkJCQkJCQkJCWludFZhbCgoSW50ZWdl ciAqKSBzdWJjbWQtPmRlZikpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFU X1NldE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0T3B0aW9uczoKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJCQkJCQkJCSBkZXBhcnNl X0NvbHVtblNldE9wdGlvbnMoc3ViY21kKSkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1Nl dFN0b3JhZ2U6CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5nKSk7CisJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RPUkFH RSAle3N0b3JhZ2V9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0 IHN0b3JhZ2UiLAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5h bWUsCisJCQkJCQkJCQkJInN0b3JhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCXN0clZh bCgoU3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X1NldENvbXByZXNzaW9uOgorCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0cmluZykpOwor CQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VU IENPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBl IiwgT2JqVHlwZVN0cmluZywgInNldCBjb21wcmVzc2lvbiIsCisJCQkJCQkJCQkJImNvbHVtbiIs IE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkiY29tcHJlc3Npb25fbWV0 aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlzdHJWYWwoKFN0cmluZyAqKSBzdWJjbWQt PmRlZikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29sdW1uOgorCQkJCXRt cF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCAle29ianR5cGV9cyAle2NvbHVtbn1JIiwgMywK KwkJCQkJCQkJCQkib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJaXN0eXBlID8g IkFUVFJJQlVURSIgOiAiQ09MVU1OIiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJkcm9wIGNvbHVtbiIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNt ZC0+bmFtZSk7CisJCQkJdG1wX29iajIgPSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJ CQkJCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIHN1YmNtZC0+YmVoYXZpb3IpOworCQkJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle2Nhc2NhZGV9cyIsIHRtcF9vYmoyKTsK KworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9v YmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJbmRleDoKKwkJCQl7CisJCQkJCU9p ZAkJCWlkeE9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJSW5kZXhTdG10ICAqaXN0 bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJY29uc3QgY2hhciAqaWR4bmFtZTsKKwkJCQkJ T2lkCQkJY29uc3RyT2lkOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEluZGV4U3Rt dCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJaWYg KCFpc3RtdC0+aXNjb25zdHJhaW50KQorCQkJCQkJYnJlYWs7CisKKwkJCQkJaWR4ID0gcmVsYXRp b25fb3BlbihpZHhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJCWlkeG5hbWUgPSBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShpZHgpOworCisJCQkJCWNvbnN0ck9pZCA9IGdldF9yZWxhdGlvbl9j b25zdHJhaW50X29pZCgKKwkJCQkJCQkJCQkJCQkJCWNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElk LCBpZHhuYW1lLCBmYWxzZSk7CisKKwkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBREQg Q09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsIDMsCisJCQkJCQkJCQkJCSJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkJIm5hbWUiLCBP YmpUeXBlU3RyaW5nLCBpZHhuYW1lLAorCQkJCQkJCQkJCQkiZGVmaW5pdGlvbiIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkJCQkJCXBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNv bnN0ck9pZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBfb2JqKSk7CisKKwkJCQkJcmVsYXRpb25fY2xvc2UoaWR4LCBBY2Nlc3NTaGFyZUxv Y2spOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRDb25zdHJhaW50OgorCQkJ CXsKKwkJCQkJLyogWFhYIG5lZWQgdG8gc2V0IHRoZSAicmVjdXJzZSIgYml0IHNvbWV3aGVyZT8g Ki8KKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQli b29sCQlpc251bGw7CisJCQkJCUhlYXBUdXBsZQl0dXA7CisJCQkJCURhdHVtCQl2YWw7CisJCQkJ CUNvbnN0cmFpbnQgKmNvbnN0cjsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBDb25z dHJhaW50KSk7CisJCQkJCWNvbnN0ciA9IGNhc3ROb2RlKENvbnN0cmFpbnQsIHN1YmNtZC0+ZGVm KTsKKworCQkJCQlpZiAoIWNvbnN0ci0+c2tpcF92YWxpZGF0aW9uKQorCQkJCQl7CisJCQkJCQl0 dXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBPYmplY3RJZEdldERhdHVtKGNvbnN0ck9p ZCkpOworCisJCQkJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQkJCQkJeworCQkJCQkJ CWNoYXIJICAgKmNvbmJpbjsKKworCQkJCQkJCS8qIEZldGNoIGNvbnN0cmFpbnQgZXhwcmVzc2lv biBpbiBwYXJzZXRyZWUgZm9ybSAqLworCQkJCQkJCXZhbCA9IFN5c0NhY2hlR2V0QXR0cihDT05T VFJPSUQsIHR1cCwKKwkJCQkJCQkJCQkJCSAgQW51bV9wZ19jb25zdHJhaW50X2NvbmJpbiwgJmlz bnVsbCk7CisKKwkJCQkJCQlpZiAoIWlzbnVsbCkKKwkJCQkJCQl7CisJCQkJCQkJCWNvbmJpbiA9 IFRleHREYXR1bUdldENTdHJpbmcodmFsKTsKKwkJCQkJCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJz LCBzdHJpbmdUb05vZGUoY29uYmluKSk7CisJCQkJCQkJfQorCisJCQkJCQkJUmVsZWFzZVN5c0Nh Y2hlKHR1cCk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVf VkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgMywKKwkJCQkJCQkJ CQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCQki bmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwKKwkJ CQkJCQkJCQkJImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlwZ19nZXRf Y29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJPaWQpKTsKKwkJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCX0KKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9BbHRlckNvbnN0cmFpbnQ6CisJCQkJeworCQkJCQlPaWQJ CQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUNvbnN0cmFpbnQgKmMg PSAoQ29uc3RyYWludCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkvKiBJZiBubyBjb25zdHJhaW50 IHdhcyBhbHRlcmVkLCBzaWxlbnRseSBza2lwIGl0ICovCisJCQkJCWlmICghT2lkSXNWYWxpZChj b25zdHJPaWQpKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJQXNzZXJ0KElzQShjLCBDb25zdHJhaW50 KSk7CisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09OU1RSQUlOVCAle25h bWV9SSAle2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cyIsIDQsCisJCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCQkibmFt ZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJ CQkJCQkJImRlZmVycmFibGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQljLT5kZWZlcnJh YmxlID8gIkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIiwKKwkJCQkJCQkJCQkJImluaXRf ZGVmZXJyZWQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQljLT5pbml0ZGVmZXJyZWQgPyAi SU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRFIik7CisKKwkJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJ CX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9WYWxpZGF0ZUNvbnN0cmFpbnQ6CisJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFURSBDT05TVFJBSU5UICV7Y29uc3RyYWludH1J IiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2YWxpZGF0ZSBjb25zdHJh aW50IiwKKwkJCQkJCQkJCQkiY29uc3RyYWludCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFt ZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w X29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDb25zdHJhaW50OgorCQkJCXRt cF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCBDT05TVFJBSU5UICV7Y29uc3RyYWludH1JIiwg MiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbnN0cmFpbnQiLAor CQkJCQkJCQkJCSJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5UeXBlOgorCQkJCXsKKwkJCQkJ VHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJCQkJCUZvcm1fcGdf YXR0cmlidXRlIGF0dDsKKwkJCQkJQ29sdW1uRGVmICAqZGVmOworCisJCQkJCWF0dCA9ICYodHVw ZGVzYy0+YXR0cnNbc3ViLT5hZGRyZXNzLm9iamVjdFN1YklkIC0gMV0pOworCQkJCQlkZWYgPSAo Q29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCQkJCQlBc3NlcnQoSXNBKGRlZiwgQ29sdW1uRGVm KSk7CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCQkJICoKKwkJCQkJICog Q29tcG9zaXRlIHR5cGVzOiBBTFRFUiByZWx0eXBlICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRQor CQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xsYXRpb259cyBBVFRSSUJVVEUgJXtjYXNjYWRlfXMK KwkJCQkJICoKKwkJCQkJICogTm9ybWFsIHR5cGVzOiBBTFRFUiByZWx0eXBlICV7Y29sdW1ufUkg U0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xsYXRpb259cyBDT0xVTU4g JXt1c2luZ31zCisJCQkJCSAqLworCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVS ICV7b2JqdHlwZX1zICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRSAle2RhdGF0eXBlfVQiLCA0LAor CQkJCQkJCQkJCQkib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWlzdHlwZSA/ ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImFsdGVyIGNvbHVtbiB0eXBlIiwKKwkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkJImRhdGF0eXBlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUoYXR0LT5hdHR0eXBpZCwKKwkJCQkJCQkJ CQkJCQkJCQkgYXR0LT5hdHR0eXBtb2QpKTsKKworCQkJCQkvKiBBZGQgYSBDT0xMQVRFIGNsYXVz ZSwgaWYgbmVlZGVkICovCisJCQkJCXRtcF9vYmoyID0gbmV3X29ianRyZWUoIkNPTExBVEUiKTsK KwkJCQkJaWYgKE9pZElzVmFsaWQoYXR0LT5hdHRjb2xsYXRpb24pKQorCQkJCQl7CisJCQkJCQlP YmpUcmVlICAgICpjb2xsbmFtZTsKKworCQkJCQkJY29sbG5hbWUgPSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSAgIGF0dC0+ YXR0Y29sbGF0aW9uKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmoyLCAiJXtu YW1lfUQiLCBjb2xsbmFtZSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJYXBwZW5kX25vdF9w cmVzZW50KHRtcF9vYmoyKTsKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7 Y29sbGF0aW9ufXMiLCB0bXBfb2JqMik7CisKKwkJCQkJLyogSWYgbm90IGEgY29tcG9zaXRlIHR5 cGUsIGFkZCB0aGUgVVNJTkcgY2xhdXNlICovCisJCQkJCWlmICghaXN0eXBlKQorCQkJCQl7CisJ CQkJCQkvKgorCQkJCQkJICogSWYgdGhlcmUncyBhIFVTSU5HIGNsYXVzZSwgdHJhbnNmb3JtQWx0 ZXJUYWJsZVN0bXQKKwkJCQkJCSAqIHJhbiBpdCB0aHJvdWdoIHRyYW5zZm9ybUV4cHIgYW5kIHN0 b3JlZCB0aGUKKwkJCQkJCSAqIHJlc3VsdGluZyBub2RlIGluIGNvb2tlZF9kZWZhdWx0LCB3aGlj aCB3ZSBjYW4gdXNlCisJCQkJCQkgKiBoZXJlLgorCQkJCQkJICovCisJCQkJCQl0bXBfb2JqMiA9 IG5ld19vYmp0cmVlKCJVU0lORyIpOworCQkJCQkJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJCQkJ CQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iajIsICIle2V4cHJlc3Npb259cyIsCisJCQkJ CQkJCQkJCQkgImV4cHJlc3Npb24iLAorCQkJCQkJCQkJCQkJIHN1Yi0+dXNpbmdleHByKTsKKwkJ CQkJCWVsc2UKKwkJCQkJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iajIpOworCQkJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7dXNpbmd9cyIsIHRtcF9vYmoyKTsKKwkJCQkJ fQorCisJCQkJCS8qIElmIGl0J3MgYSBjb21wb3NpdGUgdHlwZSwgYWRkIHRoZSBDQVNDQURFIGNs YXVzZSAqLworCQkJCQlpZiAoaXN0eXBlKQorCQkJCQl7CisJCQkJCQl0bXBfb2JqMiA9IG5ld19v Ymp0cmVlKCJDQVNDQURFIik7CisJCQkJCQlpZiAoc3ViY21kLT5iZWhhdmlvciAhPSBEUk9QX0NB U0NBREUpCisJCQkJCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmoyKTsKKwkJCQkJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle2Nhc2NhZGV9cyIsIHRtcF9vYmoyKTsKKwkJCQkJ fQorCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKyNpZmRlZiBUT0RPTElTVAorCQkJY2FzZSBB VF9BbHRlckNvbHVtbkdlbmVyaWNPcHRpb25zOgorCQkJCXRtcF9vYmogPSBkZXBhcnNlX0Zkd09w dGlvbnMoKExpc3QgKikgc3ViY21kLT5kZWYsCisJCQkJCQkJCQkJCXN1YmNtZC0+bmFtZSk7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikp OworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNlIEFUX0NoYW5nZU93bmVyOgorCQkJCXRtcF9v YmogPSBuZXdfb2JqdHJlZV9WQSgiT1dORVIgVE8gJXtvd25lcn1JIiwgMiwKKwkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJjaGFuZ2Ugb3duZXIiLAorCQkJCQkJCQkJCSJvd25lciIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJZ2V0X3JvbGVzcGVjX25hbWUoc3ViY21kLT5uZXdv d25lcikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9DbHVzdGVyT246CisJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJDTFVTVEVSIE9OICV7aW5kZXh9SSIsIDIsCisJCQkJCQkJ CQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2x1c3RlciBvbiIsCisJCQkJCQkJCQkJImluZGV4 IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfRHJvcENsdXN0ZXI6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgV0lU SE9VVCBDTFVTVEVSIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQg d2l0aG91dCBjbHVzdGVyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldExvZ2dl ZDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBMT0dHRUQiLCAxLAorCQkJCQkJ CQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBsb2dnZWQiKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfU2V0VW5Mb2dnZWQ6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCJTRVQgVU5MT0dHRUQiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNl dCB1bmxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wT2lkczoKKwkJ CQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBXSVRIT1VUIE9JRFMiLCAxLAorCQkJCQkJ CQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB3aXRob3V0IG9pZHMiKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJ YnJlYWs7CisJCQljYXNlIEFUX1NldEFjY2Vzc01ldGhvZDoKKwkJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIlNFVCBBQ0NFU1MgTUVUSE9EICV7YWNjZXNzX21ldGhvZH1JIiwgMiwKKwkJCQkJ CQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgYWNjZXNzIG1ldGhvZCIsCisJCQkJCQkJ CQkJImFjY2Vzc19tZXRob2QiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJ CQlicmVhazsKKwkJCWNhc2UgQVRfU2V0VGFibGVTcGFjZToKKwkJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIlNFVCBUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgMiwKKwkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgdGFibGVzcGFjZSIsCisJCQkJCQkJCQkJInRhYmxl c3BhY2UiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9TZXRSZWxPcHRpb25zOgorCQkJY2FzZSBBVF9SZXNldFJlbE9wdGlvbnM6CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QoCisJCQkJCQkJ CQkJCQkJCQkgZGVwYXJzZV9SZWxTZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9FbmFibGVUcmlnOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5B QkxFIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImVuYWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJpZ2dlciIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZUFs d2F5c1RyaWc6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgQUxXQVlTIFRS SUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImVuYWJsZSBhbHdheXMgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdnZXIiLCBPYmpUeXBlU3Ry aW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVS ZXBsaWNhVHJpZzoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSRVBMSUNB IFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImVuYWJsZSByZXBsaWNhIHRyaWdnZXIiLAorCQkJCQkJCQkJCSJ0cmlnZ2VyIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlz YWJsZVRyaWc6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIg JXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2Fi bGUgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnQWxsOgorCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJ CQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciBhbGwiKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWdBbGw6CisJCQkJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIgYWxsIik7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0VuYWJsZVRyaWdVc2VyOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9W QSgiRU5BQkxFIFRSSUdHRVIgVVNFUiIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiZW5hYmxlIHRyaWdnZXIgdXNlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9EaXNhYmxlVHJpZ1VzZXI6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxF IFRSSUdHRVIgVVNFUiIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlz YWJsZSB0cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxl UnVsZToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSVUxFICV7cnVsZX1J IiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcnVsZSIsCisJ CQkJCQkJCQkJInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVBbHdheXNSdWxlOgorCQkJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiRU5BQkxFIEFMV0FZUyBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgYWx3YXlzIHJ1bGUiLAorCQkJCQkJCQkJCSJy dWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfRW5hYmxlUmVwbGljYVJ1bGU6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCJFTkFCTEUgUkVQTElDQSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9i alR5cGVTdHJpbmcsICJlbmFibGUgcmVwbGljYSBydWxlIiwKKwkJCQkJCQkJCQkicnVsZSIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0Rpc2FibGVSdWxlOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBSVUxF ICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxl IHJ1bGUiLAorCQkJCQkJCQkJCSJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5oZXJpdDoKKwkJCQl0bXBfb2JqID0g bmV3X29ianRyZWVfVkEoIklOSEVSSVQgJXtwYXJlbnR9RCIsIDIsCisJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiaW5oZXJpdCIsCisJCQkJCQkJCQkJInBhcmVudCIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BJbmhlcml0OgorCQkJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiTk8gSU5IRVJJVCAle3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJkcm9wIGluaGVyaXQiLAorCQkJCQkJCQkJCSJwYXJlbnQiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlv blJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmop KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRPZjoKKwkJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIk9GICV7dHlwZV9vZn1UIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVT dHJpbmcsICJhZGQgb2YiLAorCQkJCQkJCQkJCSJ0eXBlX29mIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShzdWItPmFkZHJlc3Mub2JqZWN0SWQsIC0xKSk7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29i aikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BPZjoKKwkJCQl0bXBfb2JqID0gbmV3 X29ianRyZWVfVkEoIk5PVCBPRiIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAibm90IG9mIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1JlcGxpY2FJZGVudGl0 eToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlJFUExJQ0EgSURFTlRJVFkiLCAxLAor CQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInJlcGxpY2EgaWRlbnRpdHkiKTsKKwkJ CQlzd2l0Y2ggKCgoUmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPmlkZW50aXR5 X3R5cGUpCisJCQkJeworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfREVGQVVMVDoKKwkJCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2lkZW50fXMiLCAiaWRlbnQiLAorCQkJ CQkJCQkJCQkgIkRFRkFVTFQiKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURF TlRJVFlfRlVMTDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2lkZW50 fXMiLCAiaWRlbnQiLAorCQkJCQkJCQkJCQkgIkZVTEwiKTsKKwkJCQkJCWJyZWFrOworCQkJCQlj YXNlIFJFUExJQ0FfSURFTlRJVFlfTk9USElORzoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcF9vYmosICIle2lkZW50fXMiLCAiaWRlbnQiLAorCQkJCQkJCQkJCQkgIk5PVEhJTkciKTsK KwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfSU5ERVg6CisJCQkJCQl0 bXBfb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJVU0lORyBJTkRFWCAle2luZGV4fUkiLCAxLAorCQkJ CQkJCQkJCQkJICJpbmRleCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCQkgKChSZXBsaWNh SWRlbnRpdHlTdG10ICopIHN1YmNtZC0+ZGVmKS0+bmFtZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXBfb2JqLCAiJXtpZGVudH1zIiwgdG1wX29iajIpOworCQkJCQkJYnJlYWs7CisJ CQkJfQorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSb3dTZWN1cml0eToKKwkJ CQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFkiLCAx LAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByb3cgc2VjdXJpdHki KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBf b2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJvd1NlY3VyaXR5OgorCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBST1cgTEVWRUwgU0VDVVJJVFkiLCAx LAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgcm93IHNlY3VyaXR5 Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w X29iaikpOworCQkJCWJyZWFrOworI2lmZGVmIFRPRE9MSVNUCisJCQljYXNlIEFUX0dlbmVyaWNP cHRpb25zOgorCQkJCXRtcF9vYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21k LT5kZWYsIE5VTEwpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJY2FzZSBBVF9BdHRhY2hQ YXJ0aXRpb246CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBVFRBQ0ggUEFSVElUSU9O ICV7cGFydGl0aW9uX2lkZW50aXR5fUQiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImF0dGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJCSJwYXJ0aXRpb25faWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChS ZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+YWRkcmVzcy5vYmplY3RJ ZCkpOworCisJCQkJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9O RURfVEFCTEUpCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle3BhcnRpdGlv bl9ib3VuZH1zIiwKKwkJCQkJCQkJCQkgInBhcnRpdGlvbl9ib3VuZCIsCisJCQkJCQkJCQkJIFJl bGF0aW9uR2V0UGFydGl0aW9uQm91bmQoc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJ CQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbjoKKwkJCQl0bXBfb2JqID0gbmV3 X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRlbnRpdHl9RCIsIDIs CisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSJkZXRhY2ggcGFy dGl0aW9uIiwKKwkJCQkJCQkJCQkicGFydGl0aW9uX2lkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkJCQlzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJl YWs7CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbkZpbmFsaXplOgorCQkJCXRtcF9vYmogPSBu ZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBBUlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIEZJ TkFMSVpFIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkZXRhY2ggcGFy dGl0aW9uIGZpbmFsaXplIiwKKwkJCQkJCQkJCQkicGFydGl0aW9uX2lkZW50aXR5IiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25S ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7 CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0FkZElkZW50aXR5OgorCQkJCXsKKwkJCQkJQXR0ck51 bWJlcglhdHRudW07CisJCQkJCU9pZAkJCXNlcV9yZWxpZDsKKwkJCQkJT2JqVHJlZSAgICAqc2Vx ZGVmOworCQkJCQlDb2x1bW5EZWYgICpjb2xkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVm OworCisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkiLCAyLAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgaWRlbnRpdHki LAorCQkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwor CQkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5u YW1lKTsKKwkJCQkJc2VxX3JlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShSZWxhdGlvbkdldFJl bGlkKHJlbCksIGF0dG51bSwgdHJ1ZSk7CisKKwkJCQkJaWYgKE9pZElzVmFsaWQoc2VxX3JlbGlk KSkKKwkJCQkJeworCQkJCQkJc2VxZGVmID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzZXFfcmVs aWQsIGNvbGRlZi0+aWRlbnRpdHksIGZhbHNlKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcF9vYmosICJBREQgJXtpZGVudGl0eV9jb2x1bW59cyIsIHNlcWRlZik7CisJCQkJCX0KKwor CQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBBVF9TZXRJZGVudGl0eToKKwkJCQl7CisJ CQkJCURlZkVsZW0gICAgKmRlZmVsOworCQkJCQljaGFyCQlpZGVudGl0eSA9IDA7CisJCQkJCU9i alRyZWUgICAgKnNlcWRlZjsKKwkJCQkJQXR0ck51bWJlcglhdHRudW07CisJCQkJCU9pZAkJCXNl cV9yZWxpZDsKKworCisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1O ICV7Y29sdW1ufUkiLCAyLAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQg aWRlbnRpdHkiLAorCQkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5u YW1lKTsKKworCQkJCQlpZiAoc3ViY21kLT5kZWYpCisJCQkJCXsKKwkJCQkJCUxpc3QJICAgKmRl ZiA9IChMaXN0ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVm LCBMaXN0KSk7CisKKwkJCQkJCWRlZmVsID0gbGluaXRpYWxfbm9kZShEZWZFbGVtLCBkZWYpOwor CQkJCQkJaWRlbnRpdHkgPSBkZWZHZXRJbnQzMihkZWZlbCk7CisJCQkJCX0KKworCQkJCQlhdHRu dW0gPSBnZXRfYXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJ CQkJc2VxX3JlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShSZWxhdGlvbkdldFJlbGlkKHJlbCks IGF0dG51bSwgdHJ1ZSk7CisKKwkJCQkJaWYgKE9pZElzVmFsaWQoc2VxX3JlbGlkKSkKKwkJCQkJ eworCQkJCQkJc2VxZGVmID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzZXFfcmVsaWQsIGlkZW50 aXR5LCB0cnVlKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle2RlZmlu aXRpb259cyIsIHNlcWRlZik7CisJCQkJCX0KKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ CWNhc2UgQVRfRHJvcElkZW50aXR5OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBJREVOVElUWSIsIDIsCisJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBpZGVudGl0eSIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0 bXBfb2JqLCAiJXtpZl9leGlzdHN9cyIsCisJCQkJCQkJCQkgImlmX2V4aXN0cyIsCisJCQkJCQkJ CQkgc3ViY21kLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7CisKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJl YWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coV0FSTklORywgInVuc3VwcG9ydGVkIGFsdGVyIHRh YmxlIHN1YnR5cGUgJWQiLAorCQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsKKwkJCQlicmVhazsKKwkJ fQorCisJCS8qCisJCSAqIFdlIGRvbid0IHN1cHBvcnQgcmVwbGljYXRpbmcgQUxURVIgVEFCTEUg d2hpY2ggY29udGFpbnMgdm9sYXRpbGUKKwkJICogZnVuY3Rpb25zIGJlY2F1c2UgSXQncyBwb3Nz aWJsZSB0aGUgZnVuY3Rpb25zIGNvbnRhaW4gRERML0RNTCBpbgorCQkgKiB3aGljaCBjYXNlIHRo ZXNlIG9wZXJhdGlvbnMgd2lsbCBiZSBleGVjdXRlZCB0d2ljZSBhbmQgY2F1c2UKKwkJICogZHVw bGljYXRlIGRhdGEuIEluIGFkZGl0aW9uLCB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIHRhYmxl cyBiZWluZworCQkgKiBhY2Nlc3NlZCBieSB0aGVzZSBEREwvRE1MIGFyZSBwdWJsaXNoZWQgb3Ig bm90LiBTbyBibGluZGx5IGFsbG93aW5nCisJCSAqIHN1Y2ggZnVuY3Rpb25zIGNhbiBhbGxvdyB1 bmludGVuZGVkIGNsYXVzZXMgbGlrZSB0aGUgdGFibGVzCisJCSAqIGFjY2Vzc2VkIGluIHRob3Nl IGZ1bmN0aW9ucyBtYXkgbm90IGV2ZW4gZXhpc3Qgb24gdGhlIHN1YnNjcmliZXIuCisJCSAqLwor CQlpZiAoY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnMoKE5vZGUgKikgZXhwcnMpKQorCQkJZWxv ZyhFUlJPUiwgIkFMVEVSIFRBQkxFIGNvbW1hbmQgdXNpbmcgdm9sYXRpbGUgZnVuY3Rpb24gY2Fu bm90IGJlIHJlcGxpY2F0ZWQiKTsKKworCQkvKgorCQkgKiBDbGVhbiB0aGUgbGlzdCBhcyB3ZSBh bHJlYWR5IGNvbmZpcm1lZCB0aGVyZSBpcyBubyB2b2xhdGlsZQorCQkgKiBmdW5jdGlvbi4KKwkJ ICovCisJCWxpc3RfZnJlZShleHBycyk7CisJCWV4cHJzID0gTklMOworCX0KKworCXRhYmxlX2Ns b3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWlmIChsaXN0X2xlbmd0aChzdWJjbWRzKSA9 PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtzdWJj bWRzOiwgfXMiLCBzdWJjbWRzKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQ29sdW1uRGVmIG5vZGUgd2l0aGluIGEgcmVndWxhciAobm9uLXR5cGVkKSB0YWJsZSBjcmVh dGlvbi4KKyAqCisgKiBOT1QgTlVMTCBjb25zdHJhaW50cyBpbiB0aGUgY29sdW1uIGRlZmluaXRp b24gYXJlIGVtaXR0ZWQgZGlyZWN0bHkgaW4gdGhlCisgKiBjb2x1bW4gZGVmaW5pdGlvbiBieSB0 aGlzIHJvdXRpbmU7IG90aGVyIGNvbnN0cmFpbnRzIG11c3QgYmUgZW1pdHRlZAorICogZWxzZXdo ZXJlICh0aGUgaW5mbyBpbiB0aGUgcGFyc2Ugbm9kZSBpcyBpbmNvbXBsZXRlIGFueXdheSkuCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqICV7bmFtZX1JICV7Y29sdHlwZX1UICV7Y29tcHJlc3Np b259cyAle2RlZmF1bHR9cyAle25vdF9udWxsfXMgJXtjb2xsYXRpb259cworICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtbkRlZihSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBj b250ZXh0LCBib29sIGNvbXBvc2l0ZSwKKwkJCQkgIENvbHVtbkRlZiAqY29sZGVmLCBib29sIGlz X2FsdGVyLCBMaXN0ICoqZXhwcnMpCit7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAg KnRtcF9vYmo7CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlI ZWFwVHVwbGUJYXR0clR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0 eXBpZDsKKwlpbnQzMgkJdHlwbW9kOworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdf bm90bnVsbDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkgKiBJbmhlcml0ZWQgY29sdW1u cyB3aXRob3V0IGxvY2FsIGRlZmluaXRpb25zIG11c3Qgbm90IGJlIGVtaXR0ZWQuCisJICoKKwkg KiBYWFggbWF5YmUgaXQgaXMgdXNlZnVsIHRvIGhhdmUgdGhlbSB3aXRoICJwcmVzZW50ID0gZmFs c2UiIG9yIHNvbWUKKwkgKiBzdWNoPworCSAqLworCWlmICghY29sZGVmLT5pc19sb2NhbCkKKwkJ cmV0dXJuIE5VTEw7CisKKwlhdHRyVHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBj b2xkZWYtPmNvbG5hbWUpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChhdHRyVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNvdWxkIG5vdCBmaW5kIGNhY2hlIGVudHJ5IGZvciBjb2x1bW4gXCIlc1wiIG9m IHJlbGF0aW9uICV1IiwKKwkJCSBjb2xkZWYtPmNvbG5hbWUsIHJlbGlkKTsKKwlhdHRyRm9ybSA9 IChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHJUdXApOworCisJZ2V0X2F0dHR5cGV0 eXBtb2Rjb2xsKHJlbGlkLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJICAmdHlwaWQsICZ0eXBt b2QsICZ0eXBjb2xsYXRpb24pOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1JICV7 Y29sdHlwZX1UIiwgMywKKwkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb2x1bW4iLAor CQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgY29sZGVmLT5jb2xuYW1lLAorCQkJCQkJICJj b2x0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBp ZCwgdHlwbW9kKSk7CisKKwlpZiAoIWNvbXBvc2l0ZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo cmV0LCAiU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyIsICJjb2xzdG9yYWdlIiwKKwkJCQkJCQkgZ2V0 X3R5cGVfc3RvcmFnZShhdHRyRm9ybS0+YXR0c3RvcmFnZSkpOworCisJLyogVVNJTkcgY2xhdXNl ICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJDT01QUkVTU0lPTiIpOworCWlmIChjb2xkZWYt PmNvbXByZXNzaW9uKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtjb21wcmVz c2lvbl9tZXRob2R9SSIsCisJCQkJCQkJICJjb21wcmVzc2lvbl9tZXRob2QiLCBjb2xkZWYtPmNv bXByZXNzaW9uKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wX29iaiwgIiV7 Y29tcHJlc3Npb25fbWV0aG9kfUkiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOwor CX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2NvbXByZXNzaW9ufXMiLCB0bXBfb2Jq KTsKKworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCWlmIChPaWRJc1ZhbGlk KHR5cGNvbGxhdGlvbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle25hbWV9 RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkgdHlwY29sbGF0aW9uKSk7CisJZWxzZQorCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wX29iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjb2xsYXRp b259cyIsIHRtcF9vYmopOworCisJaWYgKCFjb21wb3NpdGUpCisJeworCQlPaWQJCQlzZXFyZWxp ZCA9IEludmFsaWRPaWQ7CisKKwkJLyoKKwkJICogRW1pdCBhIE5PVCBOVUxMIGRlY2xhcmF0aW9u IGlmIG5lY2Vzc2FyeS4gIE5vdGUgdGhhdCB3ZSBjYW5ub3QKKwkJICogdHJ1c3QgcGdfYXR0cmli dXRlLmF0dG5vdG51bGwgaGVyZSwgYmVjYXVzZSB0aGF0IGJpdCBpcyBhbHNvIHNldAorCQkgKiB3 aGVuIHByaW1hcnkga2V5cyBhcmUgc3BlY2lmaWVkOyB3ZSBtdXN0IG5vdCBlbWl0IGEgTk9UIE5V TEwKKwkJICogY29uc3RyYWludCBpbiB0aGF0IGNhc2UsIHVubGVzcyBleHBsaWNpdGx5IHNwZWNp ZmllZC4gIFRoZXJlZm9yZSwKKwkJICogd2Ugc2NhbiB0aGUgbGlzdCBvZiBjb25zdHJhaW50cyBh dHRhY2hlZCB0byB0aGlzIGNvbHVtbiB0bworCQkgKiBkZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVk IHRvIGVtaXQgYW55dGhpbmcuIChGb3J0dW5hdGVseSwgTk9UIE5VTEwKKwkJICogY29uc3RyYWlu dHMgY2Fubm90IGJlIHRhYmxlIGNvbnN0cmFpbnRzLikKKwkJICoKKwkJICogSW4gdGhlIEFMVEVS IFRBQkxFIGNhc2VzLCB3ZSBhbHNvIGFkZCBhIE5PVCBOVUxMIGlmIHRoZSBjb2xEZWYgaXMKKwkJ ICogbWFya2VkIGlzX25vdF9udWxsLgorCQkgKi8KKwkJc2F3X25vdG51bGwgPSBmYWxzZTsKKwkJ Zm9yZWFjaChjZWxsLCBjb2xkZWYtPmNvbnN0cmFpbnRzKQorCQl7CisJCQlDb25zdHJhaW50ICpj b25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWlmIChjb25zdHItPmNv bnR5cGUgPT0gQ09OU1RSX05PVE5VTEwpCisJCQl7CisJCQkJc2F3X25vdG51bGwgPSB0cnVlOwor CQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGlzX2FsdGVyICYmIGNvbGRlZi0+aXNfbm90 X251bGwpCisJCQlzYXdfbm90bnVsbCA9IHRydWU7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo cmV0LCAiJXtub3RfbnVsbH1zIiwgIm5vdF9udWxsIiwKKwkJCQkJCQkgc2F3X25vdG51bGwgPyAi Tk9UIE5VTEwiIDogIiIpOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOwor CQlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZiAmJgorCQkJY29sZGVmLT5nZW5lcmF0ZWQgIT0gQVRU UklCVVRFX0dFTkVSQVRFRF9TVE9SRUQpCisJCXsKKwkJCWNoYXIJICAgKmRlZnN0cjsKKworCQkJ ZGVmc3RyID0gUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0 bnVtLAorCQkJCQkJCQkJCQkgIGRwY29udGV4dCwgZXhwcnMpOworCisJCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBfb2JqLCAiJXtkZWZhdWx0fXMiLCAiZGVmYXVsdCIsIGRlZnN0cik7CisJCX0K KwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCQlhcHBlbmRfb2JqZWN0 X29iamVjdChyZXQsICIle2RlZmF1bHR9cyIsIHRtcF9vYmopOworCisJCS8qIElERU5USVRZIENP TFVNTiAqLworCQlpZiAoY29sZGVmLT5pZGVudGl0eSkKKwkJeworCQkJT2lkCQkJYXR0bm8gPSBn ZXRfYXR0bnVtKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCisJCQlzZXFyZWxpZCA9IGdldElk ZW50aXR5U2VxdWVuY2UocmVsaWQsIGF0dG5vLCBmYWxzZSk7CisJCX0KKworCQlpZiAoT2lkSXNW YWxpZChzZXFyZWxpZCkpCisJCXsKKwkJCXRtcF9vYmogPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5 KHNlcXJlbGlkLCBjb2xkZWYtPmlkZW50aXR5LCBpc19hbHRlcik7CisJCQlhcHBlbmRfb2JqZWN0 X29iamVjdChyZXQsICIle2lkZW50aXR5X2NvbHVtbn1zIiwgdG1wX29iaik7CisJCX0KKworCQkv KiBHRU5FUkFURUQgQ09MVU1OIEVYUFJFU1NJT04gKi8KKwkJdG1wX29iaiA9IG5ld19vYmp0cmVl KCJHRU5FUkFURUQgQUxXQVlTIEFTIik7CisJCWlmIChjb2xkZWYtPmdlbmVyYXRlZCA9PSBBVFRS SUJVVEVfR0VORVJBVEVEX1NUT1JFRCkKKwkJeworCQkJY2hhcgkgICAqZGVmc3RyOworCisJCQlk ZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRu dW0sCisJCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBleHBycyk7CisJCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXBfb2JqLCAiJXtnZW5lcmF0aW9uX2V4cHJ9cyBTVE9SRUQiLAorCQkJCQkJCQkgImdl bmVyYXRpb25fZXhwciIsIGRlZnN0cik7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVz ZW50KHRtcF9vYmopOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Z2VuZXJhdGVk X2NvbHVtbn1zIiwgdG1wX29iaik7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOwor CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDb2x1bW5EZWYgbm9kZSB3aXRo aW4gYSB0eXBlZCB0YWJsZSBjcmVhdGlvbi4JVGhpcyBpcyBzaW1wbGVyCisgKiB0aGFuIHRoZSBy ZWd1bGFyIGNhc2UsIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0byBlbWl0IHRoZSB0eXBlIGRlY2xh cmF0aW9uLAorICogY29sbGF0aW9uLCBvciBkZWZhdWx0LiAgSGVyZSB3ZSBvbmx5IHJldHVybiBz b21ldGhpbmcgaWYgdGhlIGNvbHVtbiBpcyBiZWluZworICogZGVjbGFyZWQgTk9UIE5VTEwuCisg KgorICogQXMgaW4gZGVwYXJzZV9Db2x1bW5EZWYsIGFueSBvdGhlciBjb25zdHJhaW50IGlzIHBy b2Nlc3NlZCBlbHNld2hlcmUuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqICV7bmFtZX1JIFdJ VEggT1BUSU9OUyAle2RlZmF1bHR9cyAle25vdF9udWxsfXMuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQ29sdW1uRGVmX3R5cGVkKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNv bnRleHQsIENvbHVtbkRlZiAqY29sZGVmKQoreworCU9ialRyZWUgICAgKnJldCA9IE5VTEw7CisJ T2JqVHJlZSAgICAqdG1wX29iajsKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVs YXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVwOworCUZvcm1fcGdfYXR0cmlidXRlIGF0dHJGb3Jt OworCU9pZAkJCXR5cGlkOworCWludDMyCQl0eXBtb2Q7CisJT2lkCQkJdHlwY29sbGF0aW9uOwor CWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlhdHRyVHVwID0gU2Vh cmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChhdHRyVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBmaW5kIGNhY2hl IGVudHJ5IGZvciBjb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uICV1IiwKKwkJCSBjb2xkZWYtPmNv bG5hbWUsIHJlbGlkKTsKKwlhdHRyRm9ybSA9IChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNU KGF0dHJUdXApOworCisJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKHJlbGlkLCBhdHRyRm9ybS0+YXR0 bnVtLAorCQkJCQkJICAmdHlwaWQsICZ0eXBtb2QsICZ0eXBjb2xsYXRpb24pOworCisJLyoKKwkg KiBTZWFyY2ggZm9yIGEgTk9UIE5VTEwgZGVjbGFyYXRpb24uICBBcyBpbiBkZXBhcnNlX0NvbHVt bkRlZiwgd2UgcmVseSBvbgorCSAqIGZpbmRpbmcgYSBjb25zdHJhaW50IG9uIHRoZSBjb2x1bW4g cmF0aGVyIHRoYW4gY29sZGVmLT5pc19ub3RfbnVsbC4KKwkgKiAoVGhpcyByb3V0aW5lIGlzIG5l dmVyIHVzZWQgZm9yIEFMVEVSIGNhc2VzLikKKwkgKi8KKwlzYXdfbm90bnVsbCA9IGZhbHNlOwor CWZvcmVhY2goY2VsbCwgY29sZGVmLT5jb25zdHJhaW50cykKKwl7CisJCUNvbnN0cmFpbnQgKmNv bnN0ciA9IChDb25zdHJhaW50ICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoY29uc3RyLT5jb250 eXBlID09IENPTlNUUl9OT1ROVUxMKQorCQl7CisJCQlzYXdfbm90bnVsbCA9IHRydWU7CisJCQli cmVhazsKKwkJfQorCX0KKworCWlmICghc2F3X25vdG51bGwgJiYgIWF0dHJGb3JtLT5hdHRoYXNk ZWYpCisJeworCQlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisJCXJldHVybiBOVUxMOworCX0K KworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCWlmIChhdHRyRm9ybS0+YXR0 aGFzZGVmKQorCXsKKwkJY2hhcgkgICAqZGVmc3RyOworCisJCWRlZnN0ciA9IFJlbGF0aW9uR2V0 Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkgIGRw Y29udGV4dCwgTlVMTCk7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7ZGVm YXVsdH1zIiwgImRlZmF1bHQiLCBkZWZzdHIpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJl c2VudCh0bXBfb2JqKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSBXSVRIIE9Q VElPTlMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zIiwgNCwKKwkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJjb2x1bW4iLAorCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgY29sZGVm LT5jb2xuYW1lLAorCQkJCQkJICJub3RfbnVsbCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgc2F3 X25vdG51bGwgPyAiTk9UIE5VTEwiIDogIiIsCisJCQkJCQkgImRlZmF1bHQiLCBPYmpUeXBlT2Jq ZWN0LCB0bXBfb2JqKTsKKworCS8qIEdlbmVyYXRlZCBjb2x1bW5zIGFyZSBub3Qgc3VwcG9ydGVk IG9uIHR5cGVkIHRhYmxlcywgc28gd2UgYXJlIGRvbmUgKi8KKworCVJlbGVhc2VTeXNDYWNoZShh dHRyVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBkZWZpbml0 aW9uIG9mIGNvbHVtbiBpZGVudGl0eS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU0VUIEdF TkVSQVRFRCAle29wdGlvbn1zICV7aWRlbnRpdHlfdHlwZX1zICV7c2VxX2RlZmluaXRpb246IH1z CisgKiAJT1IKKyAqIEdFTkVSQVRFRCAle29wdGlvbn1zIEFTIElERU5USVRZICV7aWRlbnRpdHlf dHlwZX1zICggJXtzZXFfZGVmaW5pdGlvbjogfXMgKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0NvbHVtbklkZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBh bHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqaWRlbnRfb2Jq OworCUxpc3QJICAgKmVsZW1zID0gTklMOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2Vx dHVwbGU7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0 YSBzZXFkYXRhOworCWNoYXIJICAgKmlkZW50Zm10OworCWNoYXIJICAgKm9iamZtdDsKKworCWlm IChhbHRlcl90YWJsZSkKKwl7CisJCWlkZW50Zm10ID0gIlNFVCBHRU5FUkFURUQgIjsKKwkJb2Jq Zm10ID0gIiV7b3B0aW9ufXMiOworCX0KKwllbHNlCisJeworCQlpZGVudGZtdCA9ICJHRU5FUkFU RUQgIjsKKwkJb2JqZm10ID0gIiV7b3B0aW9ufXMgQVMgSURFTlRJVFkiOworCX0KKworCWlkZW50 X29iaiA9IG5ld19vYmp0cmVlKGlkZW50Zm10KTsKKworCWlmIChpZGVudGl0eSA9PSBBVFRSSUJV VEVfSURFTlRJVFlfQUxXQVlTKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChpZGVudF9vYmosIG9i amZtdCwgIm9wdGlvbiIsICJBTFdBWVMiKTsKKwllbHNlIGlmIChpZGVudGl0eSA9PSBBVFRSSUJV VEVfSURFTlRJVFlfQllfREVGQVVMVCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoaWRlbnRfb2Jq LCBvYmpmbXQsICJvcHRpb24iLCAiQlkgREVGQVVMVCIpOworCWVsc2UKKwkJYXBwZW5kX25vdF9w cmVzZW50KGlkZW50X29iaik7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eV90 eXBlfXMiLCAxLAorCQkJCQkJICJpZGVudGl0eV90eXBlIiwgT2JqVHlwZU9iamVjdCwgaWRlbnRf b2JqKTsKKworCXJlbCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNp dmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsIHNlcXJl bGlkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2Ugd2l0aCBPSUQgJXUiLAorCQkJIHNlcXJl bGlkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxl KTsKKwlzZXFkYXRhID0gZ2V0X3NlcXVlbmNlX3ZhbHVlcyhzZXFyZWxpZCk7CisKKwkvKiBEZWZp bml0aW9uIGVsZW1lbnRzICovCisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9D YWNoZShzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVw YXJzZV9TZXFfQ3ljbGUoc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQo ZWxlbXMsIGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJ ZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NaW52YWx1ZShzZXFmb3JtLCBhbHRl cl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUo c2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2Vf U2VxX1N0YXJ0d2l0aChzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChl bGVtcywgZGVwYXJzZV9TZXFfUmVzdGFydChzZXFkYXRhKSk7CisJLyogV2UgcHVycG9zZWZ1bGx5 IGRvIG5vdCBlbWl0IE9XTkVEIEJZIGhlcmUgKi8KKworCWlmIChhbHRlcl90YWJsZSkKKwkJYXBw ZW5kX2FycmF5X29iamVjdChyZXQsICIle3NlcV9kZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKwll bHNlCisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiKCAle3NlcV9kZWZpbml0aW9uOiB9cyAp IiwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJl dHVybiByZXQ7Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQgKC4u LikKKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgUkVT RVR8U0VUICgle29wdGlvbnM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9D b2x1bW5TZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0CSAgICpzZXRz ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJT2JqVHJlZSAgICAqcmV0OworCWJvb2wJCWlz X3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0T3B0aW9uczsKKworCXJldCA9IG5l d19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSAle29wdGlvbn1zIiwgMiwKKwkJ CQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJICJvcHRp b24iLCBPYmpUeXBlU3RyaW5nLCBpc19yZXNldCA/ICJSRVNFVCIgOiAiU0VUIik7CisKKwlmb3Jl YWNoKGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbTsK KwkJT2JqVHJlZSAgICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7 CisJCXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMgPSBsYXBw ZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChzZXRzKTsK KwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIigle29wdGlvbnM6LCB9cykiLCBzZXRzKTsKKwor CXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBDUkVBVEUgRE9NQUlOCisgKgor ICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFu ZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIERPTUFJTiAle2lkZW50aXR5fUQg QVMgJXt0eXBlfVQgJXtub3RfbnVsbH1zICV7Y29uc3RyYWludHN9cworICogJXtjb2xsYXRpb259 cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZURvbWFpbihPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAq dG1wX29iajsKKwlIZWFwVHVwbGUJdHlwVHVwOworCUZvcm1fcGdfdHlwZSB0eXBGb3JtOworCUxp c3QJICAgKmNvbnN0cmFpbnRzOworCWNoYXIJICAgKmRlZnZhbDsKKworCXR5cFR1cCA9IFNlYXJj aFN5c0NhY2hlMShUWVBFT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5 cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBkb21haW4gd2l0 aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVD VCh0eXBUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBET01BSU4gJXtpZGVu dGl0eX1EIEFTICV7dHlwZX1UICV7bm90X251bGx9cyIsIDMsCisJCQkJCQkgImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJl bGF0aW9uSWQsIG9iamVjdElkKSwKKwkJCQkJCSAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwYmFzZXR5cGUsCisJCQkJCQkJCQkJ CSAgdHlwRm9ybS0+dHlwdHlwbW9kKSwKKwkJCQkJCSAibm90X251bGwiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJIHR5cEZvcm0tPnR5cG5vdG51bGwgPyAiTk9UIE5VTEwiIDogIiIpOworCisJY29u c3RyYWludHMgPSBvYnRhaW5Db25zdHJhaW50cyhOSUwsIEludmFsaWRPaWQsIG9iamVjdElkKTsK KwlpZiAoY29uc3RyYWludHMgPT0gTklMKQorCXsKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCIi KTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCX0KKwllbHNlCisJCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9WQSgiJXtlbGVtZW50czosIH1zIiwgMSwKKwkJCQkJCQkJImVsZW1lbnRz IiwgT2JqVHlwZUFycmF5LCBjb25zdHJhaW50cyk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0 LCAiJXtjb25zdHJhaW50c31zIiwgdG1wX29iaik7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWUo IkNPTExBVEUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBjb2xsYXRpb24pKQorCXsK KwkJT2JqVHJlZSAgICAqY29sbG5hbWU7CisKKwkJY29sbG5hbWUgPSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJICAgdHlwRm9ybS0+ dHlwY29sbGF0aW9uKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7bmFtZX1E IiwgY29sbG5hbWUpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2NvbGxhdGlvbn1zIiwgdG1wX29iaik7CisK KwlkZWZ2YWwgPSBEb21haW5HZXREZWZhdWx0KHR5cFR1cCwgdHJ1ZSk7CisJaWYgKGRlZnZhbCkK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiREVGQVVMVCAle2RlZmF1bHR9cyIsICJkZWZh dWx0IiwgZGVmdmFsKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVGdW5jdGlvblN0bXQgKENSRUFURSBGVU5D VElPTikKKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhh dCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVh dGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKgorICogQ1JFQVRFICV7b3Jf cmVwbGFjZX1zIEZVTkNUSU9OICV7c2lnbmF0dXJlfXMgUkVUVVJOUyAle3JldHVybl90eXBlfXMK KyAqIExBTkdVQUdFICV7dHJhbnNmb3JtX3R5cGV9cyAle2xhbmd1YWdlfUkgJXt3aW5kb3d9cyAl e3ZvbGF0aWxpdHl9cworICogJXtwYXJhbGxlbF9zYWZldHl9cyAle2xlYWtwcm9vZn1zICV7c3Ry aWN0fXMgJXtzZWN1cml0eV9kZWZpbmVyfXMKKyAqICV7Y29zdH1zICV7cm93c31zICV7c3VwcG9y dH1zICV7c2V0X29wdGlvbnM6IH1zIEFTICV7b2JqZmlsZX1MLAorICogJXtzeW1ib2x9TAorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZ1bmN0aW9uKE9pZCBvYmplY3RJZCwg Tm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZ1bmN0aW9uU3RtdCAqbm9kZSA9IChDcmVhdGVG dW5jdGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAg ICp0bXBfb2JqOworCURhdHVtCQl0bXBkYXR1bTsKKwljaGFyCSAgICpzb3VyY2U7CisJY2hhcgkg ICAqcHJvYmluID0gTlVMTDsKKwlMaXN0CSAgICpwYXJhbXM7CisJTGlzdAkgICAqZGVmYXVsdHM7 CisJTGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0CSAgICp0eXBlcyA9IE5JTDsKKwlMaXN0Q2Vs bCAgICpjZWxsOworCUxpc3RDZWxsICAgKmN1cmRlZjsKKwlMaXN0Q2VsbCAgICp0YWJsZV9wYXJh bXMgPSBOVUxMOworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsK KwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlPaWQJCSAgICp0eXBhcnJheTsKKwlPaWQJCSAgICp0cmZ0 eXBlczsKKwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdGb3JtOworCWludAkJCWk7CisJaW50CQkJdHlw bnVtOworCWludAkJCW50eXBlczsKKwlpbnQJCQlwYXJhbWNvdW50ID0gbGlzdF9sZW5ndGgobm9k ZS0+cGFyYW1ldGVycyk7CisJYm9vbAkJaXNudWxsOworCWJvb2wJCWlzZnVuY3Rpb247CisKKwkv KiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgKi8KKwlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBS T0NPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIs CisJCQkgb2JqZWN0SWQpOworCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHBy b2NUdXApOworCisJLyogR2V0IHRoZSBjb3JyZXNwb25kaW5nIHBnX2xhbmd1YWdlIHR1cGxlICov CisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShMQU5HT0lELCBwcm9jRm9ybS0+cHJvbGFuZyk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxhbmdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgbGFuZ3VhZ2Ugd2l0aCBPSUQgJXUiLAorCQkJIHByb2NGb3JtLT5w cm9sYW5nKTsKKwlsYW5nRm9ybSA9IChGb3JtX3BnX2xhbmd1YWdlKSBHRVRTVFJVQ1QobGFuZ1R1 cCk7CisKKwkvKgorCSAqIERldGVybWluZSB1c2VmdWwgdmFsdWVzIGZvciBwcm9zcmMgYW5kIHBy b2Jpbi4gIFdlIGNvcGUgd2l0aCBwcm9iaW4KKwkgKiBiZWluZyBlaXRoZXIgTlVMTCBvciAiLSIs IGJ1dCBwcm9zcmMgbXVzdCBoYXZlIGEgdmFsaWQgdmFsdWUuCisJICovCisJdG1wZGF0dW0gPSBT eXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3Byb2Nf cHJvc3JjLCAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAibnVsbCBwcm9z cmMgaW4gZnVuY3Rpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJc291cmNlID0gVGV4dERh dHVtR2V0Q1N0cmluZyh0bXBkYXR1bSk7CisKKwkvKiBEZXRlcm1pbmUgYSB1c2VmdWwgdmFsdWUg Zm9yIHByb2JpbiAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NU dXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2JpbiwgJmlzbnVsbCk7CisJaWYgKCFpc251 bGwpCisJeworCQlwcm9iaW4gPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHRtcGRhdHVtKTsKKwkJaWYg KHByb2JpblswXSA9PSAnXDAnIHx8IHN0cmNtcChwcm9iaW4sICItIikgPT0gMCkKKwkJCXByb2Jp biA9IE5VTEw7CisJfQorCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSAle29yX3JlcGxh Y2V9cyIsIDEsCisJCQkJCQkgIm9yX3JlcGxhY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5v ZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIik7CisKKwkvKgorCSAqIFRvIGNvbnN0cnVj dCB0aGUgYXJndW1lbnRzIGFycmF5LCBleHRyYWN0IHRoZSB0eXBlIE9JRHMgZnJvbSB0aGUKKwkg KiBmdW5jdGlvbidzIHBnX3Byb2MgZW50cnkuICBJZiBwcm9uYXJncyBlcXVhbHMgdGhlIHBhcmFt ZXRlciBsaXN0CisJICogbGVuZ3RoLCB0aGVyZSBhcmUgbm8gT1VUIHBhcmFtZXRlcnMgYW5kIHRo dXMgd2UgY2FuIGV4dHJhY3QgdGhlIHR5cGUKKwkgKiBPSUQgZnJvbSBwcm9hcmd0eXBlczsgb3Ro ZXJ3aXNlIHdlIG5lZWQgdG8gZGVjb2RlIHByb2FsbGFyZ3R5cGVzLCB3aGljaAorCSAqIGlzIGEg Yml0IG1vcmUgaW52b2x2ZWQuCisJICovCisJdHlwYXJyYXkgPSBwYWxsb2MocGFyYW1jb3VudCAq IHNpemVvZihPaWQpKTsKKwlpZiAocGFyYW1jb3VudCA+IHByb2NGb3JtLT5wcm9uYXJncykKKwl7 CisJCURhdHVtCQlhbGx0eXBlczsKKwkJRGF0dW0JICAgKnZhbHVlczsKKwkJYm9vbAkgICAqbnVs bHM7CisJCWludAkJCW5lbGVtczsKKworCQlhbGx0eXBlcyA9IFN5c0NhY2hlR2V0QXR0cihQUk9D T0lELCBwcm9jVHVwLAorCQkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYWxsYXJndHlwZXMsICZp c251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgIm51bGwgcHJvYWxsYXJndHlw ZXMsIG1vcmUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgdGhhbiBhcmdzIGluIGZ1bmN0aW9uIHdpdGgg T0lEICV1IiwKKwkJCQkgb2JqZWN0SWQpOworCQlkZWNvbnN0cnVjdF9hcnJheShEYXR1bUdldEFy cmF5VHlwZVAoYWxsdHlwZXMpLAorCQkJCQkJICBPSURPSUQsIDQsICd0JywgJ2knLAorCQkJCQkJ ICAmdmFsdWVzLCAmbnVsbHMsICZuZWxlbXMpOworCQlpZiAobmVsZW1zICE9IHBhcmFtY291bnQp CisJCQllbG9nKEVSUk9SLCAibWlzbWF0Y2hlZCBwcm9hbGxhcmdhdHlwZXMiKTsKKwkJZm9yIChp ID0gMDsgaSA8IHBhcmFtY291bnQ7IGkrKykKKwkJCXR5cGFycmF5W2ldID0gdmFsdWVzW2ldOwor CX0KKwllbHNlCisJeworCQlmb3IgKGkgPSAwOyBpIDwgcGFyYW1jb3VudDsgaSsrKQorCQkJdHlw YXJyYXlbaV0gPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldOworCX0KKworCS8qCisJ ICogSWYgdGhlcmUgYXJlIGFueSBkZWZhdWx0IGV4cHJlc3Npb25zLCB3ZSByZWFkIHRoZSBkZXBh cnNlZCBleHByZXNzaW9uCisJICogYXMgYSBsaXN0IHNvIHRoYXQgd2UgY2FuIGF0dGFjaCB0aGVt IHRvIGVhY2ggYXJndW1lbnQuCisJICovCisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJP Q09JRCwgcHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYXJnZGVmYXVsdHMsICZp c251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJZGVmYXVsdHMgPSBGdW5jdGlvbkdldERlZmF1 bHRzKERhdHVtR2V0VGV4dFAodG1wZGF0dW0pKTsKKwkJY3VyZGVmID0gbGlzdF9oZWFkKGRlZmF1 bHRzKTsKKwl9CisJZWxzZQorCXsKKwkJZGVmYXVsdHMgPSBOSUw7CisJCWN1cmRlZiA9IE5VTEw7 CisJfQorCisJLyoKKwkgKiBOb3cgaXRlcmF0ZSBvdmVyIGVhY2ggcGFyYW1ldGVyIGluIHRoZSBw YXJzZSB0cmVlIHRvIGNyZWF0ZSB0aGUKKwkgKiBwYXJhbWV0ZXJzIGFycmF5LgorCSAqLworCXBh cmFtcyA9IE5JTDsKKwl0eXBudW0gPSAwOworCWZvcmVhY2goY2VsbCwgbm9kZS0+cGFyYW1ldGVy cykKKwl7CisJCUZ1bmN0aW9uUGFyYW1ldGVyICpwYXJhbSA9IChGdW5jdGlvblBhcmFtZXRlciAq KSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUgICAgKnBhcmFtX29iajsKKwkJT2JqVHJlZSAgICAq ZGVmYXVsdHZhbDsKKwkJT2JqVHJlZSAgICAqbmFtZTsKKworCQkvKgorCQkgKiBBIFBBUkFNX1RB QkxFIHBhcmFtZXRlciBpbmRpY2F0ZXMgdGhlIGVuZCBvZiBpbnB1dCBhcmd1bWVudHM7IHRoZQor CQkgKiBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgcGFydCBvZiB0aGUgcmV0dXJuIHR5cGUuICBX ZSBpZ25vcmUgdGhlbQorCQkgKiBoZXJlLCBidXQga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBw b3NpdGlvbiBpbiB0aGUgbGlzdCBzbyB0aGF0IHdlCisJCSAqIGNhbiBlYXNpbHkgcHJvZHVjZSB0 aGUgcmV0dXJuIHR5cGUgYmVsb3cuCisJCSAqLworCQlpZiAocGFyYW0tPm1vZGUgPT0gRlVOQ19Q QVJBTV9UQUJMRSkKKwkJeworCQkJdGFibGVfcGFyYW1zID0gY2VsbDsKKwkJCWJyZWFrOworCQl9 CisKKwkJLyoKKwkJICogVmVyYm9zZSBzeW50YXggZm9yIHBhcmFtYXRlcjogJXttb2RlfXMgJXtu YW1lfXMgJXt0eXBlfVQKKwkJICogJXtkZWZhdWx0fXMKKwkJICovCisJCXBhcmFtX29iaiA9IG5l d19vYmp0cmVlX1ZBKCIle21vZGV9cyIsIDEsCisJCQkJCQkJCSAgIm1vZGUiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCQkgIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fT1VUID8gIk9VVCIgOgor CQkJCQkJCQkgIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fSU5PVVQgPyAiSU5PVVQiIDoKKwkJ CQkJCQkJICBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX1ZBUklBRElDID8gIlZBUklBRElDIiA6 CisJCQkJCQkJCSAgIklOIik7CisKKwkJLyogT3B0aW9uYWwgd2hvbGVzYWxlIHN1cHByZXNzaW9u IG9mICJuYW1lIiBvY2N1cnMgaGVyZSAqLworCQluYW1lID0gbmV3X29ianRyZWUoIiIpOworCQlp ZiAocGFyYW0tPm5hbWUpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChuYW1lLCAiJXtuYW1lfUki LCAibmFtZSIsIHBhcmFtLT5uYW1lKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRfbnVsbF9vYmpl Y3QobmFtZSwgIiV7bmFtZX1JIik7CisJCQlhcHBlbmRfbm90X3ByZXNlbnQobmFtZSk7CisJCX0K KworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbV9vYmosICIle25hbWV9cyIsIG5hbWUpOwor CisJCWRlZmF1bHR2YWwgPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCQlpZiAoUG9pbnRlcklz VmFsaWQocGFyYW0tPmRlZmV4cHIpKQorCQl7CisJCQljaGFyCSAgICpleHByOworCisJCQlpZiAo Y3VyZGVmID09IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInByb2FyZ2RlZmF1bHRzIGxpc3QgdG9v IHNob3J0Iik7CisJCQlleHByID0gbGZpcnN0KGN1cmRlZik7CisKKwkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGRlZmF1bHR2YWwsICIle3ZhbHVlfXMiLCAidmFsdWUiLCBleHByKTsKKwkJCWN1cmRl ZiA9IGxuZXh0KGRlZmF1bHRzLCBjdXJkZWYpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ub3Rf cHJlc2VudChkZWZhdWx0dmFsKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbV9vYmos ICIle3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGFycmF5W3R5cG51 bSsrXSwgLTEpKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbV9vYmosICIle2RlZmF1 bHR9cyIsIGRlZmF1bHR2YWwpOworCisJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2Jq ZWN0X29iamVjdChwYXJhbV9vYmopKTsKKwl9CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IiV7aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJb2JqZWN0SWQpKTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmos ICIoIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiJXthcmd1bWVudHM6LCB9cyIs IHBhcmFtcyk7CisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIikiKTsKKworCWlzZnVu Y3Rpb24gPSAocHJvY0Zvcm0tPnByb2tpbmQgIT0gUFJPS0lORF9QUk9DRURVUkUpOworCisJaWYg KGlzZnVuY3Rpb24pCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIkZVTkNUSU9OICV7c2ln bmF0dXJlfXMiLCB0bXBfb2JqKTsKKwllbHNlCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwg IlBST0NFRFVSRSAle3NpZ25hdHVyZX1zIiwgdG1wX29iaik7CisKKwkvKgorCSAqIEEgcmV0dXJu IHR5cGUgY2FuIGFkb3B0IG9uZSBvZiB0d28gZm9ybXM6IGVpdGhlciBhIFtTRVRPRl0gc29tZV90 eXBlLAorCSAqIG9yIGEgVEFCTEUobGlzdC1vZi10eXBlcykuICBXZSBjYW4gdGVsbCB0aGUgc2Vj b25kIGZvcm0gYmVjYXVzZSB3ZSBzYXcKKwkgKiBhIHRhYmxlIHBhcmFtIGFib3ZlIHdoaWxlIHNj YW5uaW5nIHRoZSBhcmd1bWVudCBsaXN0LgorCSAqLworCWlmICh0YWJsZV9wYXJhbXMgPT0gTlVM TCkKKwl7CisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiIiwgMSwKKwkJCQkJCQkJInJldHVy bl9mb3JtIiwgT2JqVHlwZVN0cmluZywgInBsYWluIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcF9vYmosICIle3NldG9mfXMiLCAic2V0b2YiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcmV0 c2V0ID8gIlNFVE9GIiA6ICIiKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7 cmV0dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb3Jl dHR5cGUsIC0xKSk7CisJfQorCWVsc2UKKwl7CisJCUxpc3QJICAgKnJldHR5cGVzID0gTklMOwor CQlPYmpUcmVlICAgICpwYXJhbV9vYmo7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJU QUJMRSIsIDEsCisJCQkJCQkJCSJyZXR1cm5fZm9ybSIsIE9ialR5cGVTdHJpbmcsICJ0YWJsZSIp OworCQlmb3IgKDsgdGFibGVfcGFyYW1zICE9IE5VTEw7IHRhYmxlX3BhcmFtcyA9IGxuZXh0KG5v ZGUtPnBhcmFtZXRlcnMsIHRhYmxlX3BhcmFtcykpCisJCXsKKwkJCUZ1bmN0aW9uUGFyYW1ldGVy ICpwYXJhbSA9IGxmaXJzdCh0YWJsZV9wYXJhbXMpOworCisJCQlwYXJhbV9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiJXtuYW1lfUkgJXt0eXBlfVQiLCAyLAorCQkJCQkJCQkJICAibmFtZSIsIE9ialR5 cGVTdHJpbmcsIHBhcmFtLT5uYW1lLAorCQkJCQkJCQkJICAidHlwZSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGFycmF5W3R5cG51bSsrXSwgLTEp KTsKKwkJCXJldHR5cGVzID0gbGFwcGVuZChyZXR0eXBlcywgbmV3X29iamVjdF9vYmplY3QocGFy YW1fb2JqKSk7CisJCX0KKworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIoJXtyZXR0 eXBlczosIH1zKSIsIHJldHR5cGVzKTsKKwl9CisKKwlpZiAoaXNmdW5jdGlvbikKKwkJYXBwZW5k X29iamVjdF9vYmplY3QocmV0LCAiUkVUVVJOUyAle3JldHVybl90eXBlfXMiLCB0bXBfb2JqKTsK KworCS8qIFRSQU5TRk9STSBGT1IgVFlQRSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiVFJB TlNGT1JNIik7CisKKwludHlwZXMgPSBnZXRfZnVuY190cmZ0eXBlcyhwcm9jVHVwLCAmdHJmdHlw ZXMpOworCWZvciAoaSA9IDA7IGkgPCBudHlwZXM7IGkrKykKKwl7CisJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiRk9SIFRZUEUgJXt0eXBlfVQiLCAxLAorCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHRyZnR5cGVzW2ldLCAtMSkp OworCQl0eXBlcyA9IGxhcHBlbmQodHlwZXMsIHRtcF9vYmopOworCX0KKworCWlmICh0eXBlcykK KwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiJXtmb3JfdHlwZTosIH1zIiwgdHlwZXMp OworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJYXBwZW5kX29iamVj dF9vYmplY3QocmV0LCAiJXt0cmFuc2Zvcm1fdHlwZX1zIiwgdG1wX29iaik7CisKKwlhcHBlbmRf c3RyaW5nX29iamVjdChyZXQsICJMQU5HVUFHRSAle2xhbmd1YWdlfUkiLCAibGFuZ3VhZ2UiLAor CQkJCQkJIE5hbWVTdHIobGFuZ0Zvcm0tPmxhbm5hbWUpKTsKKworCWlmIChpc2Z1bmN0aW9uKQor CXsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXt3aW5kb3d9cyIsICJ3aW5kb3ciLAor CQkJCQkJCSBwcm9jRm9ybS0+cHJva2luZCA9PSBQUk9LSU5EX1dJTkRPVyA/ICJXSU5ET1ciIDog IiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3ZvbGF0aWxpdHl9cyIsICJ2b2xh dGlsaXR5IiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09IFBST1ZPTEFUSUxFX1ZP TEFUSUxFID8KKwkJCQkJCQkgIlZPTEFUSUxFIiA6CisJCQkJCQkJIHByb2NGb3JtLT5wcm92b2xh dGlsZSA9PSBQUk9WT0xBVElMRV9TVEFCTEUgPworCQkJCQkJCSAiU1RBQkxFIiA6ICJJTU1VVEFC TEUiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3BhcmFsbGVsX3NhZmV0eX1z IiwKKwkJCQkJCQkgInBhcmFsbGVsX3NhZmV0eSIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9wYXJh bGxlbCA9PSBQUk9QQVJBTExFTF9TQUZFID8KKwkJCQkJCQkgIlBBUkFMTEVMIFNBRkUiIDoKKwkJ CQkJCQkgcHJvY0Zvcm0tPnByb3BhcmFsbGVsID09IFBST1BBUkFMTEVMX1JFU1RSSUNURUQgPwor CQkJCQkJCSAiUEFSQUxMRUwgUkVTVFJJQ1RFRCIgOiAiUEFSQUxMRUwgVU5TQUZFIik7CisKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtsZWFrcHJvb2Z9cyIsICJsZWFrcHJvb2YiLAor CQkJCQkJCSBwcm9jRm9ybS0+cHJvbGVha3Byb29mID8gIkxFQUtQUk9PRiIgOiAiIik7CisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7c3RyaWN0fXMiLCAic3RyaWN0IiwKKwkJCQkJCQkg cHJvY0Zvcm0tPnByb2lzc3RyaWN0ID8KKwkJCQkJCQkgIlJFVFVSTlMgTlVMTCBPTiBOVUxMIElO UFVUIiA6CisJCQkJCQkJICJDQUxMRUQgT04gTlVMTCBJTlBVVCIpOworCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHJldCwgIiV7c2VjdXJpdHlfZGVmaW5lcn1zIiwKKwkJCQkJCQkgInNlY3VyaXR5 X2RlZmluZXIiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvc2VjZGVmID8KKwkJCQkJCQkgIlNFQ1VS SVRZIERFRklORVIiIDogIlNFQ1VSSVRZIElOVk9LRVIiKTsKKworCQlhcHBlbmRfb2JqZWN0X29i amVjdChyZXQsICIle2Nvc3R9cyIsCisJCQkJCQkJIG5ld19vYmp0cmVlX1ZBKCJDT1NUICV7Y29z dH1uIiwgMSwKKwkJCQkJCQkJCQkJImNvc3QiLCBPYmpUeXBlRmxvYXQsCisJCQkJCQkJCQkJCXBy b2NGb3JtLT5wcm9jb3N0KSk7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJST1dTIik7CisJ CWlmIChwcm9jRm9ybS0+cHJvcm93cyA9PSAwKQorCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9v YmopOworCQllbHNlCisJCQlhcHBlbmRfZmxvYXRfb2JqZWN0KHRtcF9vYmosICIle3Jvd3N9biIs IHByb2NGb3JtLT5wcm9yb3dzKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtyb3dz fXMiLCB0bXBfb2JqKTsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIlNVUFBPUlQgJXtuYW1l fXMiKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9zdXBwb3J0KQorCQl7CisJCQlPaWQJCQlhcmd0eXBl c1tdID0geyBJTlRFUk5BTE9JRCB9OworCisJCQkvKgorCQkJICogV2Ugc2hvdWxkIHF1YWxpZnkg dGhlIHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1lIGlmIGl0IHdvdWxkbid0IGJlCisJCQkgKiByZXNv bHZlZCBieSBsb29rdXAgaW4gdGhlIGN1cnJlbnQgc2VhcmNoIHBhdGguCisJCQkgKi8KKwkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle25hbWV9cyIsICJuYW1lIiwKKwkJCQkJCQkJ IGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUocHJvY0Zvcm0tPnByb3N1cHBvcnQsIDEsCisJCQkJCQkJ CQkJCQkJCU5JTCwgYXJndHlwZXMsCisJCQkJCQkJCQkJCQkJCWZhbHNlLCBOVUxMLAorCQkJCQkJ CQkJCQkJCQlFWFBSX0tJTkRfTk9ORSkpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ub3RfcHJl c2VudCh0bXBfb2JqKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3N1cHBvcnR9 cyIsIHRtcF9vYmopOworCX0KKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJ CURlZkVsZW0gICAgKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChz dHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZXQiKSA9PSAwKQorCQl7CisJCQlWYXJpYWJsZVNldFN0 bXQgKnNzdG10ID0gKFZhcmlhYmxlU2V0U3RtdCAqKSBkZWZlbC0+YXJnOworCQkJY2hhcgkgICAq dmFsdWUgPSBFeHRyYWN0U2V0VmFyaWFibGVBcmdzKHNzdG10KTsKKworCQkJdG1wX29iaiA9IGRl cGFyc2VfRnVuY3Rpb25TZXQoc3N0bXQtPmtpbmQsIHNzdG10LT5uYW1lLCB2YWx1ZSk7CisJCQlz ZXRzID0gbGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCX0KKwl9 CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle3NldF9vcHRpb25zOiB9cyIsIHNldHMpOwor CisJLyogQWRkIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uICovCisJKHZvaWQpIFN5c0NhY2hlR2V0 QXR0cihQUk9DT0lELCBwcm9jVHVwLCBBbnVtX3BnX3Byb2NfcHJvc3FsYm9keSwgJmlzbnVsbCk7 CisJaWYgKHByb2NGb3JtLT5wcm9sYW5nID09IFNRTGxhbmd1YWdlSWQgJiYgIWlzbnVsbCkKKwl7 CisJCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCQlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwkJcHJp bnRfZnVuY3Rpb25fc3FsYm9keSgmYnVmLCBwcm9jVHVwKTsKKworCQlhcHBlbmRfc3RyaW5nX29i amVjdChyZXQsICIle2RlZmluaXRpb259cyIsICJkZWZpbml0aW9uIiwKKwkJCQkJCQkgYnVmLmRh dGEpOworCX0KKwllbHNlIGlmIChwcm9iaW4gPT0gTlVMTCkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QocmV0LCAiQVMgJXtkZWZpbml0aW9ufUwiLCAiZGVmaW5pdGlvbiIsIHNvdXJjZSk7CisJZWxz ZQorCXsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiQVMgJXtvYmpmaWxlfUwiLCAib2Jq ZmlsZSIsIHByb2Jpbik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiwgJXtzeW1ib2x9 TCIsICJzeW1ib2wiLCBzb3VyY2UpOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShsYW5nVHVwKTsK KwlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog RGVwYXJzZSBhIENSRUFURSBPUEVSQVRPUiBDTEFTUyBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ug c3ludGF4CisgKiBDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgJXtpZGVudGl0eX1EICV7ZGVmYXVsdH1z IEZPUiBUWVBFICV7dHlwZX1UIFVTSU5HCisgKiAle2FtbmFtZX1JICV7b3BmYW1pbHl9cyBBUyAl e2l0ZW1zOiwgfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVPcENsYXNz U3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb3Bjb2lkID0gY21kLT5kLmNy ZWF0ZW9wYy5hZGRyZXNzLm9iamVjdElkOworCUhlYXBUdXBsZQlvcGNUdXA7CisJSGVhcFR1cGxl CW9wZlR1cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJRm9ybV9wZ19vcGNsYXNzIG9w Y0Zvcm07CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJTGlzdAkg ICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyogRG9uJ3QgZGVwYXJzZSBTUUwgY29t bWFuZHMgZ2VuZXJhdGVkIHdoaWxlIGNyZWF0aW5nIGV4dGVuc2lvbiAqLworCWlmIChjbWQtPmlu X2V4dGVuc2lvbikKKwkJcmV0dXJuIE5VTEw7CisKKwlvcGNUdXAgPSBTZWFyY2hTeXNDYWNoZTEo Q0xBT0lELCBPYmplY3RJZEdldERhdHVtKG9wY29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChvcGNUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BjbGFz cyB3aXRoIE9JRCAldSIsIG9wY29pZCk7CisJb3BjRm9ybSA9IChGb3JtX3BnX29wY2xhc3MpIEdF VFNUUlVDVChvcGNUdXApOworCisJb3BmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lE LCBvcGNGb3JtLT5vcGNmYW1pbHkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGZUdXApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdp dGggT0lEICV1Iiwgb3BjRm9ybS0+b3BjZmFtaWx5KTsKKwlvcGZGb3JtID0gKEZvcm1fcGdfb3Bm YW1pbHkpIEdFVFNUUlVDVChvcGZUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSBPUEVSQVRPUiBDTEFTUyAle2lkZW50aXR5fUQgJXtkZWZhdWx0fXMgRk9SIFRZUEUgJXt0eXBl fVQgVVNJTkcgJXthbW5hbWV9SSIsIDQsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BjRm9ybS0+b3BjbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wY0Zvcm0tPm9wY25hbWUpKSwKKwkJCQkJCSAiZGVm YXVsdCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgb3BjRm9ybS0+b3BjZGVmYXVsdCA/ICJERUZB VUxUIiA6ICIiLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfdHlwZShvcGNGb3JtLT5vcGNpbnR5cGUsIC0xKSwKKwkJCQkJCSAiYW1uYW1lIiwg T2JqVHlwZVN0cmluZywgZ2V0X2FtX25hbWUob3BjRm9ybS0+b3BjbWV0aG9kKSk7CisKKwkvKgor CSAqIEFkZCB0aGUgRkFNSUxZIGNsYXVzZSwgYnV0IGlmIGl0IGhhcyB0aGUgc2FtZSBuYW1lIGFu ZCBuYW1lc3BhY2UgYXMgdGhlCisJICogb3BjbGFzcywgdGhlbiBoYXZlIGl0IGV4cGFuZCB0byBl bXB0eSBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIGEgZmFpbHVyZQorCSAqIGlmIHRoZSBvcGZhbWls eSB3YXMgY3JlYXRlZCBpbnRlcm5hbGx5LgorCSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9W QSgiRkFNSUxZICV7b3BmYW1pbHl9RCIsIDEsCisJCQkJCQkJIm9wZmFtaWx5IiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJCSBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSk7CisKKwlpZiAo c3RyY21wKE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSksIE5hbWVTdHIob3BjRm9ybS0+b3BjbmFt ZSkpID09IDAgJiYKKwkJb3BmRm9ybS0+b3BmbmFtZXNwYWNlID09IG9wY0Zvcm0tPm9wY25hbWVz cGFjZSkKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJYXBwZW5kX29iamVjdF9v YmplY3QocmV0LCAiJXtvcGZhbWlseX1zIiwgdG1wX29iaik7CisKKwkvKgorCSAqIEFkZCB0aGUg aW5pdGlhbCBpdGVtIGxpc3QuICBOb3RlIHdlIGFsd2F5cyBhZGQgdGhlIFNUT1JBR0UgY2xhdXNl LCBldmVuCisJICogd2hlbiBpdCBpcyBpbXBsaWNpdCBpbiB0aGUgb3JpZ2luYWwgY29tbWFuZC4K KwkgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIlNUT1JBR0UiKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXBfb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBl KE9pZElzVmFsaWQob3BjRm9ybS0+b3Bja2V5dHlwZSkgPworCQkJCQkJCQkJCQkgIG9wY0Zvcm0t Pm9wY2tleXR5cGUgOiBvcGNGb3JtLT5vcGNpbnR5cGUsCisJCQkJCQkJCQkJCSAgLTEpKTsKKwls aXN0ID0gbGlzdF9tYWtlMShuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBBZGQg dGhlIGRlY2xhcmVkIG9wZXJhdG9ycyAqLworCWZvcmVhY2goY2VsbCwgY21kLT5kLmNyZWF0ZW9w Yy5vcGVyYXRvcnMpCisJeworCQlPcEZhbWlseU1lbWJlciAqb3BlciA9IGxmaXJzdChjZWxsKTsK KworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk9QRVJBVE9SICV7bnVtfW4gJXtvcGVyYXRv cn1PKCV7bHR5cGV9VCwgJXtydHlwZX1UKSIsIDQsCisJCQkJCQkJCSJudW0iLCBPYmpUeXBlSW50 ZWdlciwgb3Blci0+bnVtYmVyLAorCQkJCQkJCQkib3BlcmF0b3IiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkJb3Blci0+b2JqZWN0KSwKKwkJCQkJCQkJImx0eXBlIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+bGVmdHR5cGUsIC0xKSwK KwkJCQkJCQkJInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9y X3R5cGUob3Blci0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUgRk9SIFNFQVJDSCAv IEZPUiBPUkRFUiBCWSBjbGF1c2UgKi8KKwkJaWYgKG9wZXItPnNvcnRmYW1pbHkgPT0gSW52YWxp ZE9pZCkKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle3B1cnBvc2V9cyIsICJw dXJwb3NlIiwKKwkJCQkJCQkJICJGT1IgU0VBUkNIIik7CisJCWVsc2UKKwkJeworCQkJT2JqVHJl ZSAgICAqdG1wX29iajI7CisKKwkJCXRtcF9vYmoyID0gbmV3X29ianRyZWUoIkZPUiBPUkRFUiBC WSAle29wZmFtaWx5fUQiKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmoyLCAib3Bm YW1pbHkiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yRmFt aWx5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBvcGVyLT5zb3J0ZmFtaWx5KSk7CisJCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtwdXJwb3NlfXMiLCB0bXBfb2JqMik7CisJ CX0KKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7 CisJfQorCisJLyogQWRkIHRoZSBkZWNsYXJlZCBzdXBwb3J0IGZ1bmN0aW9ucyAqLworCWZvcmVh Y2goY2VsbCwgY21kLT5kLmNyZWF0ZW9wYy5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlNZW1i ZXIgKnByb2MgPSBsZmlyc3QoY2VsbCk7CisJCUhlYXBUdXBsZQlwcm9jVHVwOworCQlGb3JtX3Bn X3Byb2MgcHJvY0Zvcm07CisJCU9pZAkJICAgKnByb2FyZ3R5cGVzOworCQlMaXN0CSAgICphcmds aXN0ID0gTklMOworCQlpbnQJCQlpOworCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJP Q09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jLT5vYmplY3QpKTsKKwkJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IHByb2NlZHVyZSB3aXRoIE9JRCAldSIsCisJCQkJIHByb2MtPm9iamVjdCk7CisJCXByb2NGb3Jt ID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiRlVOQ1RJT04gJXtudW19biAoJXtsdHlwZX1ULCAle3J0eXBlfVQpICV7ZnVu Y3Rpb259RCIsIDQsCisJCQkJCQkJCSJudW0iLCBPYmpUeXBlSW50ZWdlciwgcHJvYy0+bnVtYmVy LAorCQkJCQkJCQkibHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9m b3JfdHlwZShwcm9jLT5sZWZ0dHlwZSwgLTEpLAorCQkJCQkJCQkicnR5cGUiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jLT5yaWdodHR5cGUsIC0xKSwK KwkJCQkJCQkJImZ1bmN0aW9uIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSBOYW1l U3RyKHByb2NGb3JtLT5wcm9uYW1lKSkpOworCisJCXByb2FyZ3R5cGVzID0gcHJvY0Zvcm0tPnBy b2FyZ3R5cGVzLnZhbHVlczsKKwkJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsg aSsrKQorCQl7CisJCQlPYmpUcmVlICAgICphcmc7CisKKwkJCWFyZyA9IG5ld19vYmp0cmVlX2Zv cl90eXBlKHByb2FyZ3R5cGVzW2ldLCAtMSk7CisJCQlhcmdsaXN0ID0gbGFwcGVuZChhcmdsaXN0 LCBuZXdfb2JqZWN0X29iamVjdChhcmcpKTsKKwkJfQorCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5n KHRtcF9vYmosICIoIik7CisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIiV7YXJndHlw ZXM6LCB9VCIsIGFyZ2xpc3QpOworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBfb2JqLCAiKSIp OworCisJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKworCQlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVj dChyZXQsICJBUyAle2l0ZW1zOiwgfXMiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShvcGZU dXApOworCVJlbGVhc2VTeXNDYWNoZShvcGNUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoK KyAqIERlcGFyc2UgYSBDcmVhdGVPcEZhbWlseVN0bXQgKENSRUFURSBPUEVSQVRPUiBGQU1JTFkp CisgKgorICogR2l2ZW4gYSBvcGVyYXRvciBmYW1pbHkgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0 aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIGNy ZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBPUEVSQVRP UiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1lfUkKKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9DcmVhdGVPcEZhbWlseShPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJl ZSkKK3sKKwlIZWFwVHVwbGUJb3BmVHVwOworCUhlYXBUdXBsZQlhbVR1cDsKKwlGb3JtX3BnX29w ZmFtaWx5IG9wZkZvcm07CisJRm9ybV9wZ19hbQlhbUZvcm07CisJT2JqVHJlZSAgICAqcmV0Owor CisJb3BmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELCBPYmplY3RJZEdldERhdHVt KG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUi LCBvYmplY3RJZCk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3Bm VHVwKTsKKworCWFtVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVt KG9wZkZvcm0tPm9wZm1ldGhvZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChhbVR1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kIHdpdGgg T0lEICV1IiwKKwkJCSBvcGZGb3JtLT5vcGZtZXRob2QpOworCWFtRm9ybSA9IChGb3JtX3BnX2Ft KSBHRVRTVFJVQ1QoYW1UdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBPUEVS QVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1lfUkiLCAyLAorCQkJCQkJICJp ZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihvcGZGb3JtLT5v cGZuYW1lKSksCisJCQkJCQkgImFtbmFtZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoYW1Gb3Jt LT5hbW5hbWUpKTsKKworCVJlbGVhc2VTeXNDYWNoZShhbVR1cCk7CisJUmVsZWFzZVN5c0NhY2hl KG9wZlR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVBv bGljeVN0bXQgKENSRUFURSBQT0xJQ1kpCisgKgorICogR2l2ZW4gYSBwb2xpY3kgT0lEIGFuZCB0 aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXBy ZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IENSRUFURSBQT0xJQ1kgJXtpZGVudGl0eX1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQ3JlYXRlUG9saWN5U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlD cmVhdGVQb2xpY3lTdG10ICpub2RlID0gKENyZWF0ZVBvbGljeVN0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgUE9MSUNZ ICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9k ZS0+cG9saWN5X25hbWUpOworCisJLyogQWRkIHRoZSByZXN0IG9mIHRoZSBzdHVmZiAqLworCWFk ZF9wb2xpY3lfY2xhdXNlcyhyZXQsIG9iamVjdElkLCBub2RlLT5yb2xlcywgbm9kZS0+cXVhbCAh PSBOVUxMLAorCQkJCQkgICBub2RlLT53aXRoX2NoZWNrICE9IE5VTEwpOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBBbHRlclBvbGljeVN0bXQgKEFMVEVSIFBPTElDWSkK KyAqCisgKiBHaXZlbiBhIHBvbGljeSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIG9mIHRoZSBBTFRF UiBQT0xJQ1kgY29tbWFuZCwgcmV0dXJuCisgKiBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUg YWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgUE9MSUNZICV7 aWRlbnRpdHl9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyUG9saWN5U3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlclBvbGljeVN0bXQgKm5v ZGUgPSAoQWx0ZXJQb2xpY3lTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgUE9MSUNZICV7aWRlbnRpdHl9SSIsIDEsCisJ CQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cG9saWN5X25hbWUpOworCisJ LyogQWRkIHRoZSByZXN0IG9mIHRoZSBzdHVmZiAqLworCWFkZF9wb2xpY3lfY2xhdXNlcyhyZXQs IG9iamVjdElkLCBub2RlLT5yb2xlcywgbm9kZS0+cXVhbCAhPSBOVUxMLAorCQkJCQkgICBub2Rl LT53aXRoX2NoZWNrICE9IE5VTEwpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFy c2UgYSBDcmVhdGVTY2hlbWFTdG10LgorICoKKyAqIEdpdmVuIGEgc2NoZW1hIE9JRCBhbmQgdGhl IHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVz ZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBD UkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1z CisqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVTY2hlbWFTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVNjaGVtYVN0bXQgKm5vZGUgPSAoQ3Jl YXRlU2NoZW1hU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUg ICAgKmF1dGg7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFNDSEVNQSAle2lmX25v dF9leGlzdHN9cyAle25hbWV9SSIsIDIsCisJCQkJCQkgImlmX25vdF9leGlzdHMiLCBPYmpUeXBl U3RyaW5nLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAi IiwKKwkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+c2NoZW1hbmFt ZSA/IG5vZGUtPnNjaGVtYW5hbWUgOiAiIik7CisKKwlhdXRoID0gbmV3X29ianRyZWUoIkFVVEhP UklaQVRJT04iKTsKKwlpZiAobm9kZS0+YXV0aHJvbGUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGF1dGgsICIle2F1dGhvcml6YXRpb25fcm9sZX1JIiwKKwkJCQkJCQkgImF1dGhvcml6YXRpb25f cm9sZSIsCisJCQkJCQkJIGdldF9yb2xlc3BlY19uYW1lKG5vZGUtPmF1dGhyb2xlKSk7CisJZWxz ZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KGF1dGgsICIle2F1dGhvcml6YXRpb25fcm9sZX1J Iik7CisJCWFwcGVuZF9ub3RfcHJlc2VudChhdXRoKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiJXthdXRob3JpemF0aW9ufXMiLCBhdXRoKTsKKworCXJldHVybiByZXQ7Cit9CisK Ky8qCisgKiBSZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUgb2YgYSBkb21haW4uCisgKi8KK3N0YXRp YyBjaGFyICoKK0RvbWFpbkdldERlZmF1bHQoSGVhcFR1cGxlIGRvbVR1cCwgYm9vbCBtaXNzaW5n X29rKQoreworCURhdHVtCQlkZWY7CisJTm9kZQkgICAqZGVmdmFsOworCWNoYXIJICAgKmRlZnN0 cjsKKwlib29sCQlpc251bGw7CisKKwlkZWYgPSBTeXNDYWNoZUdldEF0dHIoVFlQRU9JRCwgZG9t VHVwLCBBbnVtX3BnX3R5cGVfdHlwZGVmYXVsdGJpbiwKKwkJCQkJCSAgJmlzbnVsbCk7CisJaWYg KGlzbnVsbCkKKwl7CisJCWlmICghbWlzc2luZ19vaykKKwkJCWVsb2coRVJST1IsICJkb21haW4g XCIlc1wiIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlIiwKKwkJCQlOYW1lU3RyKCgoRm9y bV9wZ190eXBlKSBHRVRTVFJVQ1QoZG9tVHVwKSktPnR5cG5hbWUpKTsKKwkJZWxzZQorCQkJcmV0 dXJuIE5VTEw7CisJfQorCisJZGVmdmFsID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJp bmcoZGVmKSk7CisJZGVmc3RyID0gZGVwYXJzZV9leHByZXNzaW9uKGRlZnZhbCwgTlVMTCAvKiBk cGNvbnRleHQ/ICovICwKKwkJCQkJCQkJZmFsc2UsIGZhbHNlKTsKKworCXJldHVybiBkZWZzdHI7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJEb21haW5TdG10LgorICoKKyAqIFZlcmJvc2Ug c3ludGF4CisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIERST1AgREVGQVVMVAorICogT1IK KyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgU0VUIERFRkFVTFQgJXtkZWZhdWx0fXMKKyAq IE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIERST1AgTk9UIE5VTEwKKyAqIE9SCisg KiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFNFVCBOT1QgTlVMTAorICogT1IKKyAqIEFMVEVS IERPTUFJTiAle2lkZW50aXR5fUQgQUREIENPTlNUUkFJTlQgJXtjb25zdHJhaW50X25hbWV9cyAl e2RlZmluaXRpb259cworICogT1IKKyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgRFJPUCBD T05TVFJBSU5UIElGIEVYSVNUUyAle2NvbnN0cmFpbnRfbmFtZX1zICV7Y2FzY2FkZX1zCisgKiBP UgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBWQUxJREFURSBDT05TVFJBSU5UICV7Y29u c3RyYWludF9uYW1lfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckRvbWFp blN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQlPYmplY3RBZGRyZXNz IGNvbnN0cmFpbnRBZGRyKQoreworCUFsdGVyRG9tYWluU3RtdCAqbm9kZSA9IChBbHRlckRvbWFp blN0bXQgKikgcGFyc2V0cmVlOworCUhlYXBUdXBsZQlkb21UdXA7CisJRm9ybV9wZ190eXBlIGRv bUZvcm07CisJT2JqVHJlZSAgICAqcmV0OworCisJZG9tVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZ UEVPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZG9tVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGRvbWFpbiB3aXRoIE9JRCAldSIsIG9i amVjdElkKTsKKwlkb21Gb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKGRvbVR1cCk7CisK Kwlzd2l0Y2ggKG5vZGUtPnN1YnR5cGUpCisJeworCQljYXNlICdUJzoKKwkJCS8qIFNFVCBERUZB VUxUIC8gRFJPUCBERUZBVUxUICovCisJCQlpZiAobm9kZS0+ZGVmID09IE5VTEwpCisJCQkJcmV0 ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgRFJPUCBERUZBVUxU IiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGRlZmF1bHQiLAor CQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCSAg TmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJZWxzZQorCQkJCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFNFVCBERUZBVUxUICV7ZGVmYXVsdH1z IiwgMywKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgZGVmYXVsdCIsCisJ CQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICBO YW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSwKKwkJCQkJCQkJCSAiZGVmYXVsdCIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkJCQkgRG9tYWluR2V0RGVmYXVsdChkb21UdXAsIGZhbHNlKSk7CisJCQli cmVhazsKKwkJY2FzZSAnTic6CisJCQkvKiBEUk9QIE5PVCBOVUxMICovCisJCQlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIE5PVCBOVUxMIiwgMiwK KwkJCQkJCQkJCSAgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBub3QgbnVsbCIsCisJCQkJ CQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgICBO YW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQlicmVhazsKKwkJY2FzZSAnTyc6CisJCQkv KiBTRVQgTk9UIE5VTEwgKi8KKwkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4g JXtpZGVudGl0eX1EIFNFVCBOT1QgTlVMTCIsIDIsCisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVT dHJpbmcsICJzZXQgbm90IG51bGwiLAorCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJYnJl YWs7CisJCWNhc2UgJ0MnOgorCQkJLyoKKwkJCSAqIEFERCBDT05TVFJBSU5ULiAgT25seSBDSEVD SyBjb25zdHJhaW50cyBhcmUgc3VwcG9ydGVkIGJ5CisJCQkgKiBkb21haW5zCisJCQkgKi8KKwkJ CXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIEFERCBDT05T VFJBSU5UICV7Y29uc3RyYWludF9uYW1lfXMgJXtkZWZpbml0aW9ufXMiLCA0LAorCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkgImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShk b21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50 eXBuYW1lKSksCisJCQkJCQkJCSAiY29uc3RyYWludF9uYW1lIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkJIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyYWludEFkZHIub2JqZWN0SWQpLAorCQkJ CQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgcGdfZ2V0X2NvbnN0 cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyYWludEFkZHIub2JqZWN0SWQpKTsKKwkJCWJy ZWFrOworCQljYXNlICdWJzoKKwkJCS8qIFZBTElEQVRFIENPTlNUUkFJTlQgKi8KKwkJCS8qCisJ CQkgKiBQcm9jZXNzIHN1YnR5cGU9c3BlY2lmaWMgb3B0aW9ucy4gVmFsaWRhdGlvbiBhIGNvbnN0 cmFpbnQKKwkJCSAqIHJlcXVpcmVzIGl0cyBuYW1lLgorCQkJICovCisJCQlyZXQgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBWQUxJREFURSBDT05TVFJBSU5UICV7 Y29uc3RyYWludF9uYW1lfXMiLCAzLAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi dmFsaWRhdGUgY29uc3RyYWludCIsCisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSwKKwkJCQkJCQkJ ICJjb25zdHJhaW50X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uYW1lKTsKKwkJCWJyZWFr OworCQljYXNlICdYJzoKKwkJCXsKKwkJCQlPYmpUcmVlICAgICp0bXBfb2JqOworCisJCQkJLyog RFJPUCBDT05TVFJBSU5UICovCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJ TiAle2lkZW50aXR5fUQgRFJPUCBDT05TVFJBSU5UIElGIEVYSVNUUyAle2NvbnN0cmFpbnRfbmFt ZX1zIiwgMywKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbnN0cmFp bnQiLAorCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CQkJCQlOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSwKKwkJCQkJCQkJCQkiY29uc3RyYWludF9u YW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmFtZSk7CisKKwkJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJCQkJCSJwcmVzZW50IiwgT2JqVHlwZUJvb2ws IG5vZGUtPmJlaGF2aW9yID09IERST1BfQ0FTQ0FERSk7CisKKwkJCQlhcHBlbmRfb2JqZWN0X29i amVjdChyZXQsICIle2Nhc2NhZGV9cyIsIHRtcF9vYmopOworCQkJfQorCQkJYnJlYWs7CisJCWRl ZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzdWJ0eXBlICVjIiwgbm9kZS0+c3VidHlw ZSk7CisJfQorCisJLyogRG9uZSAqLworCVJlbGVhc2VTeXNDYWNoZShkb21UdXApOworCisJcmV0 dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTdGF0c1N0bXQuCisgKgorICog R2l2ZW4gYSBzdGF0aXN0aWNzIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0 LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5k LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgU1RBVElTVElDUyAle2lmX25vdF9l eGlzdHN9cyAle2lkZW50aXR5fUQgT04gJXtleHByOiwgfXMgRlJPTSAle3N0YXRfdGFibGVfaWRl bnRpdHl9RAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVN0YXRpc3RpY3NT dG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVN0YXRzU3RtdCAq bm9kZSA9IChDcmVhdGVTdGF0c1N0bXQgKikgcGFyc2V0cmVlOworCUZvcm1fcGdfc3RhdGlzdGlj X2V4dCBzdGF0Zm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisJSGVhcFR1cGxlCXR1cDsKKwlEYXR1 bQkJZGF0dW07CisJYm9vbAkJaXNudWxsOworCUxpc3QJICAgKnN0YXRleHBycyA9IE5JTDsKKwor CXR1cCA9IFNlYXJjaFN5c0NhY2hlMShTVEFURVhUT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVj dElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBzdGF0aXN0aWMgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisK KwlzdGF0Zm9ybSA9IChGb3JtX3BnX3N0YXRpc3RpY19leHQpIEdFVFNUUlVDVCh0dXApOworCisJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBTVEFUSVNUSUNTICV7aWZfbm90X2V4aXN0c31z ICV7aWRlbnRpdHl9RCIsIDIsCisJCQkJCQkgImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJ CQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShzdGF0Zm9ybS0+c3R4bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHN0 YXRmb3JtLT5zdHhuYW1lKSkpOworCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoU1RBVEVYVE9J RCwgdHVwLCBBbnVtX3BnX3N0YXRpc3RpY19leHRfc3R4ZXhwcnMsCisJCQkJCQkJJmlzbnVsbCk7 CisJaWYgKCFpc251bGwpCisJeworCQlMaXN0Q2VsbCAgICpsYzsKKwkJUmVsYXRpb24Jc3RhdHNy ZWw7CisJCUxpc3QJICAgKmNvbnRleHQ7CisJCUxpc3QJICAgKmV4cHJzID0gTklMOworCQljaGFy CSAgICpleHByc1N0cmluZzsKKworCQlzdGF0c3JlbCA9IHJlbGF0aW9uX29wZW4oc3RhdGZvcm0t PnN0eHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCQljb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0 X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzdGF0c3JlbCksCisJCQkJCQkJCQkgIFJlbGF0 aW9uR2V0UmVsaWQoc3RhdHNyZWwpKTsKKworCQlleHByc1N0cmluZyA9IFRleHREYXR1bUdldENT dHJpbmcoZGF0dW0pOworCQlleHBycyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShleHByc1N0cmlu Zyk7CisKKwkJZm9yZWFjaChsYywgZXhwcnMpCisJCXsKKwkJCU5vZGUJICAgKmV4cHIgPSAoTm9k ZSAqKSBsZmlyc3QobGMpOworCQkJY2hhcgkgICAqc3RhdGV4cHI7CisKKwkJCXN0YXRleHByID0g ZGVwYXJzZV9leHByZXNzaW9uKGV4cHIsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisJCQlzdGF0 ZXhwcnMgPSBsYXBwZW5kKHN0YXRleHBycywgbmV3X3N0cmluZ19vYmplY3Qoc3RhdGV4cHIpKTsK KwkJfQorCisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiT04gJXtleHByOiwgfXMiLCBzdGF0 ZXhwcnMpOworCQlwZnJlZShleHByc1N0cmluZyk7CisJCXJlbGF0aW9uX2Nsb3NlKHN0YXRzcmVs LCBBY2Nlc3NTaGFyZUxvY2spOworCX0KKworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFNUQVRF WFRPSUQsIHR1cCwgQW51bV9wZ19zdGF0aXN0aWNfZXh0X3N0eGtleXMsCisJCQkJCQkJJmlzbnVs bCk7CisJaWYgKCFpc251bGwpCisJeworCQlpbnQJCQlrZXlubzsKKwkJY2hhcgkgICAqYXR0bmFt ZTsKKwkJTGlzdAkgICAqc3RhdGNvbHMgPSBOSUw7CisJCWludDJ2ZWN0b3IgKmluZG9wdGlvbjsK KworCQlpbmRvcHRpb24gPSAoaW50MnZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoZGF0dW0pOwor CisJCWZvciAoa2V5bm8gPSAwOyBrZXlubyA8IGluZG9wdGlvbi0+ZGltMTsga2V5bm8rKykKKwkJ eworCQkJYXR0bmFtZSA9IGdldF9hdHRuYW1lKHN0YXRmb3JtLT5zdHhyZWxpZCwgaW5kb3B0aW9u LT52YWx1ZXNba2V5bm9dLAorCQkJCQkJCQkgIGZhbHNlKTsKKwkJCXN0YXRjb2xzID0gbGFwcGVu ZChzdGF0Y29scywgbmV3X3N0cmluZ19vYmplY3QoYXR0bmFtZSkpOworCQl9CisKKwkJaWYgKGlu ZG9wdGlvbi0+ZGltMSkKKwkJeworCQkJLyogQXBwZW5kIGEgJywnIGlmIHN0YXRleHBycyBpcyBw cmVzZW50IGVsc2UgYXBwZW5kICdPTicgKi8KKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwg IiV7Y29tbWF9cyIsICJjb21tYSIsCisJCQkJCQkJCSBzdGF0ZXhwcnMgPyAiLCIgOiAiT04iKTsK KwkJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtjb2xzOiwgfXMiLCBzdGF0Y29scyk7CisJ CX0KKwl9CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJGUk9NICV7c3RhdF90YWJsZV9p ZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZ2V0X3JlbF9uYW1l c3BhY2Uoc3RhdGZvcm0tPnN0eHJlbGlkKSwKKwkJCQkJCQkJCQkJCSAgZ2V0X3JlbF9uYW1lKHN0 YXRmb3JtLT5zdHhyZWxpZCkpKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCisJcmV0dXJu IHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQgKENS RUFURSBTRVJWRVIpCisgKgorICogR2l2ZW4gYSBzZXJ2ZXIgT0lEIGFuZCB0aGUgcGFyc2UgdHJl ZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhl IGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBTRVJWRVIg JXtpZGVudGl0eX1JICV7dHlwZX1zICV7dmVyc2lvbn1zIEZPUkVJR04gREFUQSBXUkFQUEVSICV7 ZmR3fUkKKyAqICV7Z2VuZXJpY19vcHRpb25zfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9DcmVhdGVGb3JlaWduU2VydmVyU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJl ZSkKK3sKKwlDcmVhdGVGb3JlaWduU2VydmVyU3RtdCAqbm9kZSA9IChDcmVhdGVGb3JlaWduU2Vy dmVyU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRt cDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgU0VSVkVSICV7aWRlbnRpdHl9SSIs IDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c2VydmVybmFtZSk7 CisKKwkvKiBBZGQgYSBUWVBFIGNsYXVzZSwgaWYgYW55ICovCisJdG1wID0gbmV3X29ianRyZWUo IlRZUEUiKTsKKwlpZiAobm9kZS0+c2VydmVydHlwZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wLCAiJXt0eXBlfUwiLCAidHlwZSIsIG5vZGUtPnNlcnZlcnR5cGUpOworCWVsc2UKKwkJYXBw ZW5kX25vdF9wcmVzZW50KHRtcCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt0eXBl fXMiLCB0bXApOworCisJLyogQWRkIGEgVkVSU0lPTiBjbGF1c2UsIGlmIGFueSAqLworCXRtcCA9 IG5ld19vYmp0cmVlKCJWRVJTSU9OIik7CisJaWYgKG5vZGUtPnZlcnNpb24pCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcCwgIiV7dmVyc2lvbn1MIiwgInZlcnNpb24iLCBub2RlLT52ZXJzaW9u KTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHJldCwgIiV7dmVyc2lvbn1zIiwgdG1wKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJl dCwgIkZPUkVJR04gREFUQSBXUkFQUEVSICV7ZmR3fUkiLCAiZmR3IiwKKwkJCQkJCSBub2RlLT5m ZHduYW1lKTsKKworCS8qIEFkZCBhbiBPUFRJT05TIGNsYXVzZSwgaWYgYW55ICovCisJYXBwZW5k X29iamVjdF9vYmplY3QocmV0LCAiJXtnZW5lcmljX29wdGlvbnN9cyIsCisJCQkJCQkgZGVwYXJz ZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsKKworCXJldHVybiByZXQ7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRm9yZWlnblNlcnZlclN0bXQgKEFMVEVSIFNFUlZFUikK KyAqCisgKiBHaXZlbiBhIHNlcnZlciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRl ZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFu ZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgU0VSVkVSICV7aWRlbnRpdHl9SSAl e3ZlcnNpb259cyAle2dlbmVyaWNfb3B0aW9uc31zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQWx0ZXJGb3JlaWduU2VydmVyU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJl ZSkKK3sKKwlBbHRlckZvcmVpZ25TZXJ2ZXJTdG10ICpub2RlID0gKEFsdGVyRm9yZWlnblNlcnZl clN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnRtcDsKKworCS8qIEFkZCBhIFZFUlNJ T04gY2xhdXNlLCBpZiBhbnkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiVkVSU0lPTiIpOworCWlm IChub2RlLT5oYXNfdmVyc2lvbiAmJiBub2RlLT52ZXJzaW9uKQorCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXAsICIle3ZlcnNpb259TCIsICJ2ZXJzaW9uIiwgbm9kZS0+dmVyc2lvbik7CisJZWxz ZSBpZiAobm9kZS0+aGFzX3ZlcnNpb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgInZl cnNpb24iLCAidmVyc2lvbiIsICJOVUxMIik7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQo dG1wKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxURVIgU0VSVkVSICV7aWRlbnRpdHl9 SSAle3ZlcnNpb259cyAle2dlbmVyaWNfb3B0aW9uc31zIiwgMywKKwkJCQkJCSAgImlkZW50aXR5 IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c2VydmVybmFtZSwKKwkJCQkJCSAgInZlcnNpb24iLCBP YmpUeXBlT2JqZWN0LCB0bXAsCisJCQkJCQkgICJnZW5lcmljX29wdGlvbnMiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJICBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOwor fQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVBMYW5nU3RtdC4KKyAqCisgKiBHaXZlbiBhIGxh bmd1YWdlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMgJXt0cnVzdGVkfXMgTEFOR1VB R0UgJXtpZGVudGl0eX1zIEhBTkRMRVIgJXtoYW5kbGVyfUQKKyAqICV7aW5saW5lfXMgJXt2YWxp ZGF0b3J9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUxhbmdTdG10KE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVBMYW5nU3RtdCAqbm9kZSA9 IChDcmVhdGVQTGFuZ1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpU cmVlICAgICp0bXA7CisJSGVhcFR1cGxlCWxhbmdUdXA7CisJRm9ybV9wZ19sYW5ndWFnZSBsYW5n Rm9ybTsKKworCWxhbmdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoTEFOR09JRCwKKwkJCQkJCQkgIE9i amVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQobGFuZ1R1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBsYW5ndWFnZSB3aXRo IE9JRCAldSIsIG9iamVjdElkKTsKKwlsYW5nRm9ybSA9IChGb3JtX3BnX2xhbmd1YWdlKSBHRVRT VFJVQ1QobGFuZ1R1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7b3JfcmVw bGFjZX1zICV7dHJ1c3RlZH1zIExBTkdVQUdFICV7aWRlbnRpdHl9cyIsIDMsCisJCQkJCQkgIm9y X3JlcGxhY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQ TEFDRSIgOiAiIiwKKwkJCQkJCSAidHJ1c3RlZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbGFu Z0Zvcm0tPmxhbnBsdHJ1c3RlZCA/ICJUUlVTVEVEIiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIs IE9ialR5cGVTdHJpbmcsIG5vZGUtPnBsbmFtZSk7CisKKwlpZiAobm9kZS0+cGxoYW5kbGVyICE9 IE5JTCkKKwl7CisJCS8qIEFkZCB0aGUgSEFORExFUiBjbGF1c2UgKi8KKwkJYXBwZW5kX29iamVj dF9vYmplY3QocmV0LCAiSEFORExFUiAle2hhbmRsZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgbGFu Z0Zvcm0tPmxhbnBsY2FsbGZvaWQpKTsKKworCQkvKiBBZGQgdGhlIElOTElORSBjbGF1c2UsIGlm IGFueSAqLworCQl0bXAgPSBuZXdfb2JqdHJlZSgiSU5MSU5FIik7CisJCWlmIChPaWRJc1ZhbGlk KGxhbmdGb3JtLT5sYW5pbmxpbmUpKQorCQl7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAs ICIle2hhbmRsZXJfbmFtZX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIGxhbmdGb3JtLT5sYW5pbmxp bmUpKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwkJYXBwZW5k X29iamVjdF9vYmplY3QocmV0LCAiJXtpbmxpbmV9cyIsIHRtcCk7CisKKwkJLyogQWRkIHRoZSBW QUxJREFUT1IgY2xhdXNlLCBpZiBhbnkgKi8KKwkJdG1wID0gbmV3X29ianRyZWUoIlZBTElEQVRP UiIpOworCQlpZiAoT2lkSXNWYWxpZChsYW5nRm9ybS0+bGFudmFsaWRhdG9yKSkKKwkJeworCQkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtoYW5kbGVyX25hbWV9RCIsCisJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJCSBsYW5nRm9ybS0+bGFudmFsaWRhdG9yKSk7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5k X25vdF9wcmVzZW50KHRtcCk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dmFsaWRh dG9yfXMiLCB0bXApOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShsYW5nVHVwKTsKKworCXJldHVy biByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU2VxU3RtdC4KKyAqCisgKiBHaXZl biBhIHNlcXVlbmNlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFNFUVVFTkNFICV7 aWRlbnRpdHl9RAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVNlcVN0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCVJl bGF0aW9uCXJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCUxpc3QJ ICAgKmVsZW1zID0gTklMOworCUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlSZWxhdGlvbgly ZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxlOworCUNyZWF0ZVNlcVN0bXQgKmNyZWF0ZVNlcVN0bXQg PSAoQ3JlYXRlU2VxU3RtdCAqKSBwYXJzZXRyZWU7CisKKwkvKgorCSAqIFNlcXVlbmNlIGZvciBJ REVOVElUWSBDT0xVTU4gb3V0cHV0IHNlcGFyYXRlbHkgKHZpYSBDUkVBVEUgVEFCTEUgb3IKKwkg KiBBTFRFUiBUQUJMRSk7IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLworCWlmIChjcmVhdGVTZXFT dG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOworCisJc2VxZGF0YSA9IGdldF9zZXF1 ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVj dElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlv bklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEo U0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3Igc2VxdWVuY2Ugd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXNl cWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxlKTsKKworCS8qIERl ZmluaXRpb24gZWxlbWVudHMgKi8KKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2Vx X0NhY2hlKHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNl X1NlcV9DeWNsZShzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVw YXJzZV9TZXFfSW5jcmVtZW50Qnkoc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQo ZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZhbHVlKHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBs YXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShzZXFmb3JtLCBmYWxzZSkpOworCWVs ZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKHNlcWZvcm0sIGZhbHNl KSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0YXJ0KHNlcWRhdGEp KTsKKworCS8qIFdlIHB1cnBvc2VmdWxseSBkbyBub3QgZW1pdCBPV05FRCBCWSBoZXJlICovCisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBTRVFVRU5DRSAl e2lkZW50aXR5fUQgJXtkZWZpbml0aW9uOiB9cyIsIDMsCisJCQkJCQkgInBlcnNpc3RlbmNlIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSks CisJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlQXJyYXksIGVsZW1zKTsKKworCXRhYmxlX2Ns b3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENy ZWF0ZVN0bXQgKENSRUFURSBUQUJMRSkuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQgYW5kIHRo ZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJl c2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICog Q1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5 fUQgW09GCisgKiAle29mX3R5cGV9VCB8IFBBUlRJVElPTiBPRiAle3BhcmVudF9pZGVudGl0eX1E XSAle3RhYmxlX2VsZW1lbnRzfXMKKyAqICV7aW5oZXJpdHN9cyAle3BhcnRpdGlvbl9ieX1zICV7 YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cworICogJXtvbl9jb21taXR9cyAle3RhYmxl c3BhY2V9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVN0bXQoT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU3RtdCAqbm9kZSA9IChDcmVhdGVT dG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2Jq ZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJTGlzdAkgICAqZHBjb250ZXh0OworCU9ialRyZWUg ICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJ TGlzdENlbGwgICAqY2VsbDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtwZXJz aXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCIsIDMsCisJCQkJ CQkgInBlcnNpc3RlbmNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vf c3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJCQkJCSAiaWZfbm90X2V4 aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBO T1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKSk7CisK KwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbGF0aW9uKSwKKwkJCQkJCQkJCW9iamVjdElkKTsKKworCS8qCisJICogVHlwZWQgdGFibGVz IGFuZCBwYXJ0aXRpb25zIHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCBmb3JtYXQgc3RyaW5nOiB3 ZQorCSAqIG11c3Qgbm90IHB1dCB0YWJsZV9lbGVtZW50cyB3aXRoIHBhcmVudHMgZGlyZWN0bHkg aW4gdGhlIGZtdCBzdHJpbmcsCisJICogYmVjYXVzZSBpZiB0aGVyZSBhcmUgbm8gb3B0aW9ucyB0 aGUgcGFyZW50aGVzZXMgbXVzdCBub3QgYmUgZW1pdHRlZDsKKwkgKiBhbmQgYWxzbywgdHlwZWQg dGFibGVzIGRvIG5vdCBhbGxvdyBmb3IgaW5oZXJpdGFuY2UuCisJICovCisJaWYgKG5vZGUtPm9m VHlwZW5hbWUgfHwgbm9kZS0+cGFydGJvdW5kKQorCXsKKwkJTGlzdAkgICAqdGFibGVlbHRzID0g TklMOworCisJCS8qCisJCSAqIFdlIGNhbid0IHB1dCB0YWJsZSBlbGVtZW50cyBkaXJlY3RseSBp biB0aGUgZm10IHN0cmluZyBhcyBhbiBhcnJheQorCQkgKiBzdXJyb3VuZGVkIGJ5IHBhcmVudGhl c2VzIGhlcmUsIGJlY2F1c2UgYW4gZW1wdHkgY2xhdXNlIHdvdWxkIGNhdXNlCisJCSAqIGEgc3lu dGF4IGVycm9yLiAgVGhlcmVmb3JlLCB3ZSB1c2UgYW4gaW5kaXJlY3Rpb24gZWxlbWVudCBhbmQg c2V0CisJCSAqIHByZXNlbnQ9ZmFsc2Ugd2hlbiB0aGVyZSBhcmUgbm8gZWxlbWVudHMuCisJCSAq LworCQlpZiAobm9kZS0+b2ZUeXBlbmFtZSkKKwkJeworCQkJdG1wX29iaiA9IG5ld19vYmp0cmVl X2Zvcl90eXBlKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG9mdHlwZSwgLTEpOworCQkJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiT0YgJXtvZl90eXBlfVQiLCB0bXBfb2JqKTsKKwkJfQorCQllbHNl CisJCXsKKwkJCUxpc3QJICAgKnBhcmVudHM7CisJCQlPYmpFbGVtICAgICplbGVtOworCisJCQlw YXJlbnRzID0gZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpOworCQkJZWxlbSA9IChPYmpF bGVtICopIGxpbml0aWFsKHBhcmVudHMpOworCisJCQlBc3NlcnQobGlzdF9sZW5ndGgocGFyZW50 cykgPT0gMSk7CisKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgIlBBUlRJVElPTiBPRiIp OworCisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3BhcmVudF9pZGVudGl0eX1EIiwK KwkJCQkJCQkJIGVsZW0tPnZhbHVlLm9iamVjdCk7CisJCX0KKworCQl0YWJsZWVsdHMgPSBkZXBh cnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24sIG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LAor CQkJCQkJCQkJCSAgdHJ1ZSwgLyogdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsJ Lyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJs ZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWUo IiIpOworCQlpZiAodGFibGVlbHRzKQorCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAi KCV7ZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCQllbHNlCisJCQlhcHBlbmRfbm90X3By ZXNlbnQodG1wX29iaik7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt0YWJsZV9l bGVtZW50c31zIiwgdG1wX29iaik7CisJfQorCWVsc2UKKwl7CisJCUxpc3QJICAgKnRhYmxlZWx0 cyA9IE5JTDsKKworCQkvKgorCQkgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgTElLRSBj bGF1c2VzIHNlcGFyYXRlbHk7IHRoZXkgaGF2ZQorCQkgKiBhbHJlYWR5IGJlZW4gdHJhbnNmb3Jt ZWQgaW50byBjb2x1bW5zIGFuZCBjb25zdHJhaW50cy4KKwkJICovCisKKwkJLyoKKwkJICogUHJv Y2VzcyB0YWJsZSBlbGVtZW50czogY29sdW1uIGRlZmluaXRpb25zIGFuZCBjb25zdHJhaW50cy4g IE9ubHkKKwkJICogdGhlIGNvbHVtbiBkZWZpbml0aW9ucyBhcmUgb2J0YWluZWQgZnJvbSB0aGUg cGFyc2Ugbm9kZSBpdHNlbGYuICBUbworCQkgKiBnZXQgY29uc3RyYWludHMgd2UgcmVseSBvbiBw Z19jb25zdHJhaW50LCBiZWNhdXNlIHRoZSBwYXJzZSBub2RlCisJCSAqIG1pZ2h0IGJlIG1pc3Np bmcgc29tZSB0aGluZ3Mgc3VjaCBhcyB0aGUgbmFtZSBvZiB0aGUgY29uc3RyYWludHMuCisJCSAq LworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24sIG5vZGUtPnRh YmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSAgZmFsc2UsCS8qIG5vdCB0eXBlZCB0YWJs ZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOwkvKiBub3QgY29tcG9zaXRlICovCisJCXRhYmxlZWx0 cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywgb2JqZWN0SWQsIEludmFsaWRPaWQpOwor CisJCWlmICh0YWJsZWVsdHMpCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIigle3RhYmxl X2VsZW1lbnRzOiwgfXMpIiwgdGFibGVlbHRzKTsKKwkJZWxzZQorCQkJYXBwZW5kX2Zvcm1hdF9z dHJpbmcocmV0LCAiKCkiKTsKKworCQkvKgorCQkgKiBBZGQgaW5oZXJpdGFuY2Ugc3BlY2lmaWNh dGlvbi4gIFdlIGNhbm5vdCBzaW1wbHkgc2NhbiB0aGUgbGlzdCBvZgorCQkgKiBwYXJlbnRzIGZy b20gdGhlIHBhcnNlciBub2RlLCBiZWNhdXNlIHRoYXQgbWF5IGxhY2sgdGhlIGFjdHVhbAorCQkg KiBxdWFsaWZpZWQgbmFtZXMgb2YgdGhlIHBhcmVudCByZWxhdGlvbnMuICBSYXRoZXIgdGhhbiB0 cnlpbmcgdG8KKwkJICogcmUtcmVzb2x2ZSB0aGVtIGZyb20gdGhlIGluZm9ybWF0aW9uIGluIHRo ZSBwYXJzZSBub2RlLCBpdCBzZWVtcworCQkgKiBtb3JlIGFjY3VyYXRlIGFuZCBjb252ZW5pZW50 IHRvIGdyYWIgaXQgZnJvbSBwZ19pbmhlcml0cy4KKwkJICovCisJCXRtcF9vYmogPSBuZXdfb2Jq dHJlZSgiSU5IRVJJVFMiKTsKKwkJaWYgKG5vZGUtPmluaFJlbGF0aW9ucyAhPSBOSUwpCisJCQlh cHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIoJXtwYXJlbnRzOiwgfUQpIiwgZGVwYXJzZV9J bmhSZWxhdGlvbnMob2JqZWN0SWQpKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRfbnVsbF9vYmpl Y3QodG1wX29iaiwgIigle3BhcmVudHM6LCB9RCkiKTsKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0 bXBfb2JqKTsKKwkJfQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2luaGVyaXRzfXMi LCB0bXBfb2JqKTsKKwl9CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIlRBQkxFU1BBQ0UiKTsK KwlpZiAobm9kZS0+dGFibGVzcGFjZW5hbWUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9v YmosICIle3RhYmxlc3BhY2V9SSIsICJ0YWJsZXNwYWNlIiwKKwkJCQkJCQkgbm9kZS0+dGFibGVz cGFjZW5hbWUpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBfb2JqLCAiJXt0 YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCX0KKwlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcF9vYmopOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7b25fY29tbWl0fXMiLAorCQkJCQkJIGRlcGFyc2VfT25D b21taXRDbGF1c2Uobm9kZS0+b25jb21taXQpKTsKKworCS8qIEZPUiBWQUxVRVMgY2xhdXNlICov CisJaWYgKG5vZGUtPnBhcnRib3VuZCkKKwl7CisJCS8qCisJCSAqIEdldCBwZ19jbGFzcy5yZWxw YXJ0Ym91bmQuIFdlIGNhbm5vdCB1c2UgcGFydGJvdW5kIGluIHRoZSBwYXJzZXRyZWUKKwkJICog ZGlyZWN0bHkgYXMgaXQncyB0aGUgb3JpZ2luYWwgcGFydGJvdW5kIGV4cHJlc3Npb24gd2hpY2gg aGF2ZW4ndAorCQkgKiBiZWVuIHRyYW5zZm9ybWVkLgorCQkgKi8KKwkJYXBwZW5kX3N0cmluZ19v YmplY3QocmV0LCAiJXtwYXJ0aXRpb25fYm91bmR9cyIsICJwYXJ0aXRpb25fYm91bmQiLAorCQkJ CQkJCSBSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKG9iamVjdElkKSk7CisJfQorCisJLyogUEFS VElUSU9OIEJZIGNsYXVzZSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiUEFSVElUSU9OIEJZ Iik7CisJaWYgKHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05F RF9UQUJMRSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7ZGVmaW5pdGlvbn1z IiwgImRlZmluaXRpb24iLAorCQkJCQkJCSBwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUob2JqZWN0 SWQpKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wX29iaiwgIiV7ZGVmaW5p dGlvbn1zIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwl9CisJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXtwYXJ0aXRpb25fYnl9cyIsIHRtcF9vYmopOworCisJLyogVVNJ TkcgY2xhdXNlICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJVU0lORyIpOworCWlmIChub2Rl LT5hY2Nlc3NNZXRob2QpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2FjY2Vz c19tZXRob2R9SSIsICJhY2Nlc3NfbWV0aG9kIiwKKwkJCQkJCQkgbm9kZS0+YWNjZXNzTWV0aG9k KTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wX29iaiwgIiV7YWNjZXNzX21l dGhvZH1JIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwl9CisJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXthY2Nlc3NfbWV0aG9kfXMiLCB0bXBfb2JqKTsKKworCS8qIFdJ VEggY2xhdXNlICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJXSVRIIik7CisKKwlmb3JlYWNo KGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlPYmpUcmVlICAgICp0bXBfb2JqMjsKKwkJRGVm RWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCXRtcF9vYmoyID0g ZGVwYXJzZV9EZWZFbGVtKG9wdCwgZmFsc2UpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqMikpOworCX0KKworCWlmIChsaXN0KQorCQlhcHBlbmRfYXJy YXlfb2JqZWN0KHRtcF9vYmosICIoJXt3aXRoOiwgfXMpIiwgbGlzdCk7CisJZWxzZQorCQlhcHBl bmRfbm90X3ByZXNlbnQodG1wX29iaik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIl e3dpdGhfY2xhdXNlfXMiLCB0bXBfb2JqKTsKKworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBB Y2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBD cmVhdGVGb3JlaWduVGFibGVTdG10IChDUkVBVEUgRk9SRUlHTiBUQUJMRSkuCisgKgorICogR2l2 ZW4gYSB0YWJsZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJu IGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisg KiBDUkVBVEUgRk9SRUlHTiBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQKKyAq IFsoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMKKyAqICB8IFBBUlRJVElPTiBP RiAle3BhcmVudF9pZGVudGl0eX1EICgle3R5cGVkX3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7cGFy dGl0aW9uX2JvdW5kfXNdCisgKiBTRVJWRVIgJXtzZXJ2ZXJ9SSAle2dlbmVyaWNfb3B0aW9uc31z CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRm9yZWlnblRhYmxlU3RtdChP aWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGb3JlaWduVGFibGVTdG10 ICpzdG10ID0gKENyZWF0ZUZvcmVpZ25UYWJsZVN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9u CXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlM aXN0CSAgICpkcGNvbnRleHQ7CisJT2JqVHJlZSAgICAqY3JlYXRlU3RtdDsKKwlPYmpUcmVlICAg ICp0bXBvYmo7CisJTGlzdAkgICAqdGFibGVlbHRzID0gTklMOworCisJY3JlYXRlU3RtdCA9IG5l d19vYmp0cmVlKCJDUkVBVEUgRk9SRUlHTiBUQUJMRSIpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY3JlYXRlU3RtdCwgIiV7aWZfbm90X2V4aXN0c31zIiwgImlmX25vdF9leGlzdHMiLAorCQkJ CQkJIHN0bXQtPmJhc2UuaWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKwor CXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxu YW1lc3BhY2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7 CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7aWRlbnRpdHl9RCIsIHRtcG9i aik7CisKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbGF0aW9uKSwKKwkJCQkJCQkJCW9iamVjdElkKTsKKwlpZiAoc3RtdC0+YmFzZS5w YXJ0Ym91bmQpCisJeworCQkvKiBQYXJ0aXRpb25lZCB0YWJsZSAqLworCQlMaXN0CSAgICpwYXJl bnRzOworCQlPYmpFbGVtICAgICplbGVtOworCisJCXBhcmVudHMgPSBkZXBhcnNlX0luaFJlbGF0 aW9ucyhvYmplY3RJZCk7CisJCWVsZW0gPSAoT2JqRWxlbSAqKSBsaW5pdGlhbChwYXJlbnRzKTsK KworCQlBc3NlcnQobGlzdF9sZW5ndGgocGFyZW50cykgPT0gMSk7CisKKwkJYXBwZW5kX2Zvcm1h dF9zdHJpbmcoY3JlYXRlU3RtdCwgIlBBUlRJVElPTiBPRiIpOworCisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcmVudF9pZGVudGl0eX1EIiwKKwkJCQkJCQkJCQkgZWxl bS0+dmFsdWUub2JqZWN0KTsKKworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMo cmVsYXRpb24sIHN0bXQtPmJhc2UudGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICB0 cnVlLCAvKiB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOwkvKiBub3QgY29tcG9z aXRlICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywgb2JqZWN0 SWQsIEludmFsaWRPaWQpOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJaWYgKHRh YmxlZWx0cykKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7ZWxlbWVudHM6LCB9 cykiLCB0YWJsZWVsdHMpOworCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wb2JqKTsK KworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXt0eXBlZF90YWJsZV9lbGVt ZW50c31zIiwgdG1wb2JqKTsKKworCQkvKgorCQkgKiBBZGQgdGhlIHBhcnRpdGlvbl9ib3VuZF9z cGVjLCBpLmUuIHRoZSBGT1IgVkFMVUVTIGNsYXVzZS4KKwkJICogR2V0IHBnX2NsYXNzLnJlbHBh cnRib3VuZC4gV2UgY2Fubm90IHVzZSBwYXJ0Ym91bmQgaW4gdGhlIHBhcnNldHJlZQorCQkgKiBk aXJlY3RseSBhcyBpdCdzIHRoZSBvcmlnaW5hbCBwYXJ0Ym91bmQgZXhwcmVzc2lvbiB3aGljaCBo YXZlbid0CisJCSAqIGJlZW4gdHJhbnNmb3JtZWQuCisJCSAqLworCQlhcHBlbmRfc3RyaW5nX29i amVjdChjcmVhdGVTdG10LCAiJXtwYXJ0aXRpb25fYm91bmR9cyIsICJwYXJ0aXRpb25fYm91bmQi LAorCQkJCQkJCSBSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKG9iamVjdElkKSk7CisKKwkJLyog Tm8gUEFSVElUSU9OIEJZIGNsYXVzZSBmb3IgQ1JFQVRFIEZPUkVJR04gVEFCTEUgKi8KKwl9CisJ ZWxzZQorCXsKKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBz dG10LT5iYXNlLnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSAgZmFsc2UsCQkvKiBu b3QgdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsJLyogbm90IGNvbXBvc2l0ZSAq LworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJsZWVsdHMsIG9iamVjdElkLCBJ bnZhbGlkT2lkKTsKKworCQlpZiAodGFibGVlbHRzKQorCQkJYXBwZW5kX2FycmF5X29iamVjdChj cmVhdGVTdG10LCAiKCV7dGFibGVfZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCQllbHNl CisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhjcmVhdGVTdG10LCAiKCkiKTsKKworCQkvKgorCQkq IEFkZCBpbmhlcml0YW5jZSBzcGVjaWZpY2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRo ZSBsaXN0IG9mCisJCSogcGFyZW50cyBmcm9tIHRoZSBwYXJzZXIgbm9kZSwgYmVjYXVzZSB0aGF0 IG1heSBsYWNrIHRoZSBhY3R1YWwKKwkJKiBxdWFsaWZpZWQgbmFtZXMgb2YgdGhlIHBhcmVudCBy ZWxhdGlvbnMuICBSYXRoZXIgdGhhbiB0cnlpbmcgdG8KKwkJKiByZS1yZXNvbHZlIHRoZW0gZnJv bSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSogbW9yZSBh Y2N1cmF0ZSBhbmQgY29udmVuaWVudCB0byBncmFiIGl0IGZyb20gcGdfaW5oZXJpdHMuCisJCSov CisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJJTkhFUklUUyIpOworCQlpZiAoc3RtdC0+YmFzZS5p bmhSZWxhdGlvbnMgIT0gTklMKQorCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIoJXtw YXJlbnRzOiwgfUQpIiwgZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpKTsKKwkJZWxzZQor CQl7CisJCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiKCV7cGFyZW50czosIH1EKSIpOwor CQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcG9iaik7CisJCX0KKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QoY3JlYXRlU3RtdCwgIiV7aW5oZXJpdHN9cyIsIHRtcG9iaik7CisJfQorCisJYXBwZW5kX3N0 cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgIlNFUlZFUiAle3NlcnZlcn1JIiwgInNlcnZlciIsIHN0 bXQtPnNlcnZlcm5hbWUpOworCisJLyogYWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8K KwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtnZW5lcmljX29wdGlvbnN9cyIs CisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKHN0bXQtPm9wdGlvbnMsIE5VTEwpKTsKKworCXJl bGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGNyZWF0 ZVN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdC4KKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVl LCBPYmplY3RBZGRyZXNzIHNlY29uZGFyeU9iaikKK3sKKwlEZWZpbmVTdG10ICpkZWZpbmUgPSAo RGVmaW5lU3RtdCAqKSBwYXJzZXRyZWU7CisKKwlzd2l0Y2ggKGRlZmluZS0+a2luZCkKKwl7CisJ CWNhc2UgT0JKRUNUX0NPTExBVElPTjoKKwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0bXRfQ29s bGF0aW9uKG9iamVjdElkLCBkZWZpbmUsIHNlY29uZGFyeU9iaik7CisKKwkJY2FzZSBPQkpFQ1Rf T1BFUkFUT1I6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKG9iamVjdElk LCBkZWZpbmUpOworCisJCWNhc2UgT0JKRUNUX1RTQ09ORklHVVJBVElPTjoKKwkJCXJldHVybiBk ZXBhcnNlX0RlZmluZVN0bXRfVFNDb25maWcob2JqZWN0SWQsIGRlZmluZSwgc2Vjb25kYXJ5T2Jq KTsKKworCQljYXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZp bmVTdG10X1RTRGljdGlvbmFyeShvYmplY3RJZCwgZGVmaW5lKTsKKworCQljYXNlIE9CSkVDVF9U U1BBUlNFUjoKKwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0bXRfVFNQYXJzZXIob2JqZWN0SWQs IGRlZmluZSk7CisKKwkJY2FzZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJCXJldHVybiBkZXBhcnNl X0RlZmluZVN0bXRfVFNUZW1wbGF0ZShvYmplY3RJZCwgZGVmaW5lKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgT0JKRUNUX1RZUEU6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUob2Jq ZWN0SWQsIGRlZmluZSk7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRl ZCBvYmplY3Qga2luZDogJWQiLCBkZWZpbmUtPmtpbmQpOworCX0KKworCXJldHVybiBOVUxMOwor fQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0bXQgKENSRUFURSBDT0xMQVRJT04pCisgKgor ICogR2l2ZW4gYSBjb2xsYXRpb24gT0lELCByZXR1cm4gYW4gT2JqVHJlZSByZXByZXNlbnRpbmcg dGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBDT0xM QVRJT04gJXtpZGVudGl0eX1EIEZST00gJXtmcm9tX2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykK KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X0NvbGxhdGlvbihPaWQg b2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJCQkgT2JqZWN0QWRkcmVzcyBmcm9t Q29sbGlkKQoreworCU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVwbGUJY29sVHVwOworCUZvcm1f cGdfY29sbGF0aW9uIGNvbEZvcm07CisJRGF0dW0JCWRhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlP YmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKworCWNvbFR1cCA9IFNlYXJj aFN5c0NhY2hlMShDT0xMT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKGNvbFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciBjb2xsYXRpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJY29sRm9ybSA9IChG b3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKGNvbFR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQ1JFQVRFIENPTExBVElPTiAle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJICJpZGVudGl0 eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGNvbEZv cm0tPmNvbGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIoY29sRm9ybS0+Y29sbG5h bWUpKSk7CisKKwlpZiAoT2lkSXNWYWxpZChmcm9tQ29sbGlkLm9iamVjdElkKSkKKwl7CisJCU9p ZAkJCWNvbGxpZCA9IGZyb21Db2xsaWQub2JqZWN0SWQ7CisJCUhlYXBUdXBsZQl0cDsKKwkJRm9y bV9wZ19jb2xsYXRpb24gZnJvbUNvbEZvcm07CisKKwkJLyoKKwkJICogQ1JFQVRFIENPTExBVElP TiAle2lkZW50aXR5fUQgRlJPTSBleGlzdGluZ19jb2xsYXRpb247CisJCSAqLworCQl0cCA9IFNl YXJjaFN5c0NhY2hlMShDT0xMT0lELCBPYmplY3RJZEdldERhdHVtKGNvbGxpZCkpOworCQlpZiAo IUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIGNvbGxhdGlvbiB3aXRoIE9JRCAldSIsIGNvbGxpZCk7CisKKwkJZnJvbUNvbEZvcm0g PSAoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0cCk7CisKKwkJYXBwZW5kX29iamVjdF9v YmplY3QocmV0LCAiRlJPTSAle2Zyb21faWRlbnRpdHl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShmcm9tQ29sRm9ybS0+Y29sbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkg IE5hbWVTdHIoZnJvbUNvbEZvcm0tPmNvbGxuYW1lKSkpOworCisJCVJlbGVhc2VTeXNDYWNoZSh0 cCk7CisJCVJlbGVhc2VTeXNDYWNoZShjb2xUdXApOworCQlyZXR1cm4gcmV0OworCX0KKworCS8q IExPQ0FMRSAqLworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIGNvbFR1cCwgQW51 bV9wZ19jb2xsYXRpb25fY29sbGljdWxvY2FsZSwgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJ eworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTE9DQUxFPSV7bG9jYWxlfUwiLCAyLAorCQkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxvY2FsZSIsCisJCQkJCQkJICJsb2NhbGUiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5n KGRhdHVtKSkpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKwl9CisKKwkvKiBMQ19DT0xMQVRFICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09M TE9JRCwgY29sVHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsY29sbGF0ZSwgJmlzbnVsbCk7CisJ aWYgKCFpc251bGwpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTENfQ09MTEFURT0le2Nv bGxhdGV9TCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29sbGF0ZSIs CisJCQkJCQkJICJjb2xsYXRlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVz IiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogTENfQ1RZUEUgKi8KKwlkYXR1bSA9 IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCBjb2xUdXAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGxj dHlwZSwgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiTENfQ1RZUEU9JXtjdHlwZX1MIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJjdHlwZSIsCisJCQkJCQkJICJjdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIHBz cHJpbnRmKCIlcyIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIFBST1ZJREVSICov CisJaWYgKGNvbEZvcm0tPmNvbGxwcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCXsKKwkJ dG1wID0gbmV3X29ianRyZWVfVkEoIlBST1ZJREVSPSV7cHJvdmlkZXJ9TCIsIDIsCisJCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvdmlkZXIiLAorCQkJCQkJCSAicHJvdmlkZXIi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCAiaWN1IikpOworCQlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisJZWxzZSBpZiAo Y29sRm9ybS0+Y29sbHByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKQorCXsKKwkJdG1wID0g bmV3X29ianRyZWVfVkEoIlBST1ZJREVSPSV7cHJvdmlkZXJ9TCIsIDIsCisJCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvdmlkZXIiLAorCQkJCQkJCSAicHJvdmlkZXIiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCAibGliYyIpKTsKKwkJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogREVURVJNSU5J U1RJQyAqLworCWlmIChjb2xGb3JtLT5jb2xsaXNkZXRlcm1pbmlzdGljKQorCXsKKwkJdG1wID0g bmV3X29ianRyZWVfVkEoIkRFVEVSTUlOSVNUSUM9JXtkZXRlcm1pbmlzdGljfUwiLCAyLAorCQkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImRldGVybWluaXN0aWMiLAorCQkJCQkJCSAi ZGV0ZXJtaW5pc3RpYyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsICJ0 cnVlIikpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK Kwl9CisKKwkvKiBWRVJTSU9OICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwg Y29sVHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsdmVyc2lvbiwgJmlzbnVsbCk7CisJaWYgKCFp c251bGwpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkVSU0lPTj0le3ZlcnNpb259TCIs IDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidmVyc2lvbiIsCisJCQkJCQkJ ICJ2ZXJzaW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgVGV4dERh dHVtR2V0Q1N0cmluZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIoJXtlbGVt czosIH1zKSIsIGxpc3QpOworCVJlbGVhc2VTeXNDYWNoZShjb2xUdXApOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBEZWZpbmVTdG10IChDUkVBVEUgT1BFUkFUT1IpCisg KgorICogR2l2ZW4gYSBvcGVyYXRvciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRl ZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29t bWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIE9QRVJBVE9SICV7aWRlbnRp dHl9TyAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmlu ZVN0bXRfT3BlcmF0b3IoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVh cFR1cGxlCW9wclR1cDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsK KwlMaXN0CSAgICpsaXN0ID0gTklMOworCUZvcm1fcGdfb3BlcmF0b3Igb3ByRm9ybTsKKworCW9w clR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVST0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wclR1cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlv cHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0b3IpIEdFVFNUUlVDVChvcHJUdXApOworCisJcmV0ID0g bmV3X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiAle2lkZW50aXR5fU8iLCAxLAorCQkJCQkJ ICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihvcHJGb3Jt LT5vcHJuYW1lKSkpOworCisJLyogUFJPQ0VEVVJFICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVl X1ZBKCJQUk9DRURVUkU9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJwcm9jZWR1cmUiLAorCQkJCQkJCSJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQlvcHJGb3JtLT5vcHJjb2RlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJLyogTEVGVEFSRyAqLworCXRtcF9v YmogPSBuZXdfb2JqdHJlZV9WQSgiTEVGVEFSRz0iLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAibGVmdGFyZyIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQp KQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJsZWZ0LCAtMSkpOworCWVsc2UKKwkJYXBw ZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIFJJR0hUQVJHICovCisJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJSSUdIVEFSRz0iLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAicmlnaHRhcmciKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyaWdodCkpCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX25v dF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcF9vYmopKTsKKworCS8qIENPTU1VVEFUT1IgKi8KKwl0bXBfb2JqID0gbmV3X29ianRy ZWVfVkEoIkNPTU1VVEFUT1I9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg ImNvbW11dGF0b3IiKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJjb20pKQorCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtvcGVyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3By Rm9ybS0+b3ByY29tKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJLyog TkVHQVRPUiAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiTkVHQVRPUj0iLCAxLAorCQkJ CQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibmVnYXRvciIpOworCWlmIChPaWRJc1ZhbGlk KG9wckZvcm0tPm9wcm5lZ2F0ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIl e29wZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJuZWdhdGUpKTsKKwllbHNlCisJ CWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBSRVNUUklDVCAqLworCXRtcF9vYmogPSBu ZXdfb2JqdHJlZV9WQSgiUkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInJlc3RyaWN0Iik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkpCisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJCSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQo dG1wX29iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29i aikpOworCisJLyogSk9JTiAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiSk9JTj0iLCAx LAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiam9pbiIpOworCWlmIChPaWRJc1Zh bGlkKG9wckZvcm0tPm9wcmpvaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAi JXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9j ZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3Byam9pbikpOworCWVs c2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIEhBU0hFUyAqLworCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9WQSgiSEFTSEVTIiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgImhhc2hlcyIpOworCWlmICghb3ByRm9ybS0+b3ByY2FuaGFzaCkKKwkJYXBwZW5kX25v dF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcF9vYmopKTsKKworCS8qIE1FUkdFUyAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9W QSgiTUVSR0VTIiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1lcmdlcyIp OworCWlmICghb3ByRm9ybS0+b3ByY2FubWVyZ2UpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBf b2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7 CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisK KwlSZWxlYXNlU3lzQ2FjaGUob3ByVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgQ1JFQVRFIFRZUEUgc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQgJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQg KmRlZmluZSkKK3sKKwlIZWFwVHVwbGUJdHlwVHVwOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpU cmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwljaGFyCSAgICpzdHI7CisJRGF0 dW0JCWRmbHQ7CisJYm9vbAkJaXNudWxsOworCUZvcm1fcGdfdHlwZSB0eXBGb3JtOworCisJdHlw VHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9y bSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkNSRUFURSBUWVBFICV7aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkgImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHlwRm9ybS0+ dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHR5cEZvcm0tPnR5cG5hbWUpKSk7 CisKKwkvKiBTaGVsbCB0eXBlcy4gKi8KKwlpZiAoIXR5cEZvcm0tPnR5cGlzZGVmaW5lZCkKKwl7 CisJCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEFk ZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwkvKiBJTlBVVCAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCIoSU5QVVQ9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJpbnB1dCIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGlucHV0KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBPVVRQVVQgKi8KKwl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiT1VUUFVUPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAib3V0cHV0IiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwb3V0cHV0KSk7CisJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBSRUNFSVZFICovCisJdG1wID0gbmV3 X29ianRyZWVfVkEoIlJFQ0VJVkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgInJlY2VpdmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXByZWNlaXZlKSkKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkgdHlwRm9ybS0+dHlwcmVjZWl2ZSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRt cCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkv KiBTRU5EICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNFTkQ9IiwgMSwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgInNlbmQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50 eXBzZW5kKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwc2VuZCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9w cmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisKKwkvKiBUWVBNT0RfSU4gKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX0lO PSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2RfaW4iKTsKKwlp ZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2RpbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZGlu KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFRZUE1PRF9PVVQgKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX09VVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAidHlwbW9kX291dCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1v ZG91dCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZG91dCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9w cmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisKKwkvKiBBTkFMWVpFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkFOQUxZWkU9Iiwg MSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImFuYWx5emUiKTsKKwlpZiAoT2lk SXNWYWxpZCh0eXBGb3JtLT50eXBhbmFseXplKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQ cm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwYW5hbHl6ZSkp OworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBJTlRFUk5BTExFTkdUSCAqLworCWlm ICh0eXBGb3JtLT50eXBsZW4gPT0gLTEpCisJCXRtcCA9IG5ld19vYmp0cmVlKCJJTlRFUk5BTExF TkdUSD1WQVJJQUJMRSIpOworCWVsc2UKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIklOVEVSTkFM TEVOR1RIPSV7dHlwbGVufW4iLCAxLAorCQkJCQkJCSAidHlwbGVuIiwgT2JqVHlwZUludGVnZXIs IHR5cEZvcm0tPnR5cGxlbik7CisKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIFBBU1NFREJZVkFMVUUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiUEFTU0VEQllWQUxVRSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJw YXNzZWRieXZhbHVlIik7CisJaWYgKCF0eXBGb3JtLT50eXBieXZhbCkKKwkJYXBwZW5kX25vdF9w cmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisKKwkvKiBYWFggaXQncyBvZGQgdG8gcmVwcmVzZW50IGFsaWdubWVudCB3aXRoIHNjaGVt YS1xdWFsaWZpZWQgdHlwZSBuYW1lcyAqLworCXN3aXRjaCAodHlwRm9ybS0+dHlwYWxpZ24pCisJ eworCQljYXNlICdkJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmZsb2F0OCI7CisJCQlicmVhazsK KwkJY2FzZSAnaSc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5pbnQ0IjsKKwkJCWJyZWFrOworCQlj YXNlICdzJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmludDIiOworCQkJYnJlYWs7CisJCWNhc2Ug J2MnOgorCQkJc3RyID0gInBnX2NhdGFsb2cuYnBjaGFyIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgYWxpZ25tZW50ICVjIiwgdHlwRm9ybS0+dHlwYWxp Z24pOworCX0KKworCS8qIEFMSUdOTUVOVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTElH Tk1FTlQ9JXthbGlnbn1zIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImFs aWdubWVudCIsCisJCQkJCQkgImFsaWduIiwgT2JqVHlwZVN0cmluZywgc3RyKTsKKwlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFNUT1JBR0UgKi8K Kwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1RPUkFHRT0le3N0b3JhZ2V9cyIsIDIsCisJCQkJCQkg ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdG9yYWdlIiwKKwkJCQkJCSAic3RvcmFnZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X3R5cGVfc3RvcmFnZSh0eXBGb3JtLT50eXBzdG9yYWdl KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkv KiBDQVRFR09SWSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDQVRFR09SWT0le2NhdGVnb3J5 fXMiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY2F0ZWdvcnkiLAorCQkJ CQkJICJjYXRlZ29yeSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgcHNwcmludGYoIiVjIiwgdHlw Rm9ybS0+dHlwY2F0ZWdvcnkpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIFBSRUZFUlJFRCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQ UkVGRVJSRUQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInByZWZlcnJl ZCIpOworCWlmICghdHlwRm9ybS0+dHlwaXNwcmVmZXJyZWQpCisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CisJLyogREVGQVVMVCAqLworCWRmbHQgPSBTeXNDYWNoZUdldEF0dHIoVFlQRU9JRCwgdHlwVHVw LAorCQkJCQkJICAgQW51bV9wZ190eXBlX3R5cGRlZmF1bHQsCisJCQkJCQkgICAmaXNudWxsKTsK Kwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiREVGQVVMVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiZGVmYXVsdCIpOworCWlmICghaXNudWxsKQorCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXAsICIle2RlZmF1bHR9cyIsICJkZWZhdWx0IiwKKwkJCQkJCQkgVGV4dERhdHVt R2V0Q1N0cmluZyhkZmx0KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEVMRU1F TlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRUxFTUVOVD0iLCAxLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAiZWxlbWVudCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0t PnR5cGVsZW0pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICJlbGVtIiwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwZWxlbSwgLTEpKTsKKwllbHNlCisJCWFw cGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJLyogREVMSU1JVEVSICovCisJdG1wID0gbmV3X29ianRyZWVfVkEo IkRFTElNSVRFUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZGVsaW1p dGVyIik7CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtkZWxpbX1MIiwgImRlbGltIiwK KwkJCQkJCSBwc3ByaW50ZigiJWMiLCB0eXBGb3JtLT50eXBkZWxpbSkpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ09MTEFUQUJMRSAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRBQkxFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJjb2xsYXRhYmxlIik7CisJaWYgKCFPaWRJc1ZhbGlkKHR5cEZvcm0t PnR5cGNvbGxhdGlvbikpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29iamVj dChyZXQsICIle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVw KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRFWFQgU0VB UkNIIENPTkZJR1VSQVRJT04gc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBD UkVBVEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9 cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKE9p ZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lLAorCQkJCQkJCU9iamVjdEFkZHJlc3MgY29w aWVkKQoreworCUhlYXBUdXBsZQl0c2NUdXA7CisJSGVhcFR1cGxlCXRzcFR1cDsKKwlPYmpUcmVl ICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUZvcm1fcGdfdHNfY29uZmlnIHRzY0Zvcm07 CisJRm9ybV9wZ190c19wYXJzZXIgdHNwRm9ybTsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCisJ dHNjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTQ09ORklHT0lELCBPYmplY3RJZEdldERhdHVtKG9i amVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzY1R1cCkpCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBjb25maWd1cmF0aW9uIHdpdGgg T0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHNjRm9ybSA9IChGb3JtX3BnX3RzX2NvbmZpZykg R0VUU1RSVUNUKHRzY1R1cCk7CisKKwl0c3BUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNQQVJTRVJP SUQsIE9iamVjdElkR2V0RGF0dW0odHNjRm9ybS0+Y2ZncGFyc2VyKSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHRzcFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciB0ZXh0IHNlYXJjaCBwYXJzZXIgJXUiLAorCQkJIHRzY0Zvcm0tPmNmZ3BhcnNlcik7CisJdHNw Rm9ybSA9IChGb3JtX3BnX3RzX3BhcnNlcikgR0VUU1RSVUNUKHRzcFR1cCk7CisKKwkvKgorCSAq IEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UuICBJZiB3ZSBoYXZlIENPUFknZWQgYW4gZXhpc3Rp bmcgY29uZmlnLCBhZGQKKwkgKiBhIENPUFkgY2xhdXNlOyBvdGhlcndpc2UgYWRkIGEgUEFSU0VS IGNsYXVzZS4KKwkgKi8KKwkvKiBDT1BZICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkNPUFk9 IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvcHkiKTsKKwlpZiAoT2lk SXNWYWxpZChjb3BpZWQub2JqZWN0SWQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIl e3RzY29uZmlnfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVFNDb25m aWdSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY29waWVkLm9iamVjdElkKSk7CisJZWxzZQor CQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIFBBUlNFUiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJQQVJTRVI9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInBhcnNlciIp OworCWlmIChjb3BpZWQub2JqZWN0SWQgPT0gSW52YWxpZE9pZCkKKwkJYXBwZW5kX29iamVjdF9v YmplY3QodG1wLCAiJXtwYXJzZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZSh0c3BGb3JtLT5wcnNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzcEZvcm0t PnByc25hbWUpKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJDUkVBVEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgKCV7 ZWxlbXM6LCB9cykiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzY0Zvcm0tPmNmZ25hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCSAgTmFtZVN0cih0c2NGb3JtLT5jZmduYW1lKSksCisJCQkJCQkgImVsZW1zIiwgT2Jq VHlwZUFycmF5LCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c3BUdXApOworCVJlbGVhc2VT eXNDYWNoZSh0c2NUdXApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JF QVRFIFRFWFQgU0VBUkNIIFBBUlNFUiBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIENSRUFURSBURVhUIFNFQVJDSCBQQVJTRVIgJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMp CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU1BhcnNlcihPaWQg b2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUJdHNwVHVwOworCU9i alRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsK KwlGb3JtX3BnX3RzX3BhcnNlciB0c3BGb3JtOworCisJdHNwVHVwID0gU2VhcmNoU3lzQ2FjaGUx KFRTUEFSU0VST0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHRzcFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciB0ZXh0IHNlYXJjaCBwYXJzZXIgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0c3BG b3JtID0gKEZvcm1fcGdfdHNfcGFyc2VyKSBHRVRTVFJVQ1QodHNwVHVwKTsKKworCS8qIEFkZCB0 aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwkvKiBTVEFSVCAqLworCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJTVEFSVD0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInN0YXJ0IiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkgdHNwRm9ybS0+cHJzc3RhcnQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEdFVFRPS0VOICovCisJdG1wID0gbmV3X29ianRy ZWVfVkEoIkdFVFRPS0VOPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAiZ2V0dG9rZW4iLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnN0b2tlbikpOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRU5EICovCisJdG1wID0gbmV3X29i anRyZWVfVkEoIkVORD0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImVuZCIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJIHRzcEZvcm0tPnByc2VuZCkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTEVYVFlQRVMgKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiTEVYVFlQRVM9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJsZXh0eXBlcyIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2xleHR5cGUpKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEhFQURMSU5FICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIkhFQURMSU5FPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJoZWFkbGluZSIpOworCWlmIChPaWRJc1ZhbGlkKHRzcEZvcm0tPnByc2hlYWRsaW5l KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkgdHNwRm9ybS0+cHJzaGVhZGxpbmUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJl c2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBURVhUIFNFQVJDSCBQQVJTRVIgJXtp ZGVudGl0eX1EICgle2VsZW1zOiwgfXMpIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3BGb3JtLT5wcnNuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNwRm9ybS0+cHJzbmFtZSkpLAorCQkJCQkJ ICJlbGVtcyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNwVHVw KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBURVhUIFNFQVJD SCBESUNUSU9OQVJZIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRF IFRFWFQgU0VBUkNIIERJQ1RJT05BUlkgJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25hcnkoT2lkIG9i amVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlCXRzZFR1cDsKKwlPYmpU cmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJ RGF0dW0JCW9wdGlvbnM7CisJYm9vbAkJaXNudWxsOworCUZvcm1fcGdfdHNfZGljdCB0c2RGb3Jt OworCisJdHNkVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTRElDVE9JRCwgT2JqZWN0SWRHZXREYXR1 bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c2RUdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggZGljdGlvbmFyeSB3aXRo IE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzZEZvcm0gPSAoRm9ybV9wZ190c19kaWN0KSBH RVRTVFJVQ1QodHNkVHVwKTsKKworCisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICov CisJLyogVEVNUExBVEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVEVNUExBVEU9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInRlbXBsYXRlIik7CisJYXBwZW5kX29i amVjdF9vYmplY3QodG1wLCAiJXt0ZW1wbGF0ZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoVFNUZW1wbGF0ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzZEZvcm0t PmRpY3R0ZW1wbGF0ZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJLyoKKwkgKiBvcHRpb25zLiAgWFhYIHRoaXMgaXMgYSBwcmV0dHkgdXNlbGVz cyByZXByZXNlbnRhdGlvbiwgYnV0IHdlIGNhbid0IGRvCisJICogYmV0dGVyIHdpdGhvdXQgbW9y ZSB0c19jYWNoZS5jIGNvb3BlcmF0aW9uIC4uLgorCSAqLworCW9wdGlvbnMgPSBTeXNDYWNoZUdl dEF0dHIoVFNESUNUT0lELCB0c2RUdXAsCisJCQkJCQkJICBBbnVtX3BnX3RzX2RpY3RfZGljdGlu aXRvcHRpb24sCisJCQkJCQkJICAmaXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZSgiIik7CisJ aWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7b3B0aW9uc31zIiwg Im9wdGlvbnMiLAorCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKG9wdGlvbnMpKTsKKwllbHNl CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBURVhU IFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKSIsIDIsCisJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWUodHNkRm9ybS0+ZGljdG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c2RG b3JtLT5kaWN0bmFtZSkpLAorCQkJCQkJICJlbGVtcyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisK KwlSZWxlYXNlU3lzQ2FjaGUodHNkVHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVw YXJzZSBhIENSRUFURSBURVhUIFNFQVJDSCBURU1QTEFURSBzdGF0ZW1lbnQuCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIENSRUFURSBURVhUIFNFQVJDSCBURU1QTEFURSAle2lkZW50aXR5fUQg KCV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10 X1RTVGVtcGxhdGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1 cGxlCXRzdFR1cDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJ ICAgKmxpc3QgPSBOSUw7CisJRm9ybV9wZ190c190ZW1wbGF0ZSB0c3RGb3JtOworCisJdHN0VHVw ID0gU2VhcmNoU3lzQ2FjaGUxKFRTVEVNUExBVEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0 SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHN0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIHRlbXBsYXRlIHdpdGggT0lEICV1IiwK KwkJCSBvYmplY3RJZCk7CisJdHN0Rm9ybSA9IChGb3JtX3BnX3RzX3RlbXBsYXRlKSBHRVRTVFJV Q1QodHN0VHVwKTsKKworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwkvKiBJTklU ICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIklOSVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgImluaXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0c3RGb3JtLT50bXBsaW5p dCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJIHRzdEZvcm0tPnRtcGxpbml0KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNl bnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KworCS8qIExFWElaRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJMRVhJWkU9JXtwcm9jZWR1 cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJsZXhpemUiLAorCQkJ CQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3RGb3JtLT50 bXBsbGV4aXplKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRFWFQgU0VBUkNIIFRFTVBMQVRF ICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKSIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHN0Rm9ybS0+dG1w bG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3RGb3JtLT50bXBsbmFtZSkpLAor CQkJCQkJICJlbGVtcyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUo dHN0VHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBTFRFUiBURVhU IFNFQVJDSCBDT05GSUdVUkFUSU9OIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUREIE1BUFBJ TkcKKyAqIEZPUiAle3Rva2VudHlwZTosIH1JIFdJVEggJXtkaWN0aW9uYXJpZXM6LCB9RAorICoJ T1IKKyAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIERST1Ag TUFQUElORyAle2lmX2V4aXN0c31zCisgKiBGT1IgJXt0b2tlbnR5cGV9SQorICoJT1IKKyAqIEFM VEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkcK KyAqIEZPUiAle3Rva2VudHlwZTosIH1JIFdJVEggJXtkaWN0aW9uYXJpZXM6LCB9RAorICoJT1IK KyAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFMVEVSIE1B UFBJTkcKKyAqIFJFUExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIFdJVEggJXtuZXdfZGljdGlvbmFy eX1ECisgKglPUgorICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5 fUQgQUxURVIgTUFQUElORworICogRk9SICV7dG9rZW50eXBlOiwgfUkgUkVQTEFDRSAle29sZF9k aWN0aW9uYXJ5fUQgV0lUSCAle25ld19kaWN0aW9uYXJ5fUQKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9BbHRlclRTQ29uZmlndXJhdGlvblN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21k KQoreworCUFsdGVyVFNDb25maWd1cmF0aW9uU3RtdCAqbm9kZSA9IChBbHRlclRTQ29uZmlndXJh dGlvblN0bXQgKikgY21kLT5wYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUg ICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJaW50 CQkJaTsKKworCXJldCA9IG5ld19vYmp0cmVlKCJBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFU SU9OIik7CisKKwkvKiBEZXRlcm1pbmUgdGhlIGZvcm1hdCBzdHJpbmcgYXBwcm9wcmlhdGUgdG8g ZWFjaCBzdWJjb21tYW5kICovCisJc3dpdGNoIChub2RlLT5raW5kKQorCXsKKwkJY2FzZSBBTFRF Ul9UU0NPTkZJR19BRERfTUFQUElORzoKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7 aWRlbnRpdHl9RCBBREQgTUFQUElORyIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJCQkJCQkJCQkJCQkJCQkgY21k LT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQlicmVhazsKKworCQljYXNlIEFMVEVS X1RTQ09ORklHX0RST1BfTUFQUElORzoKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7 aWRlbnRpdHl9RCBEUk9QIE1BUFBJTkciLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJCQkJCQkJCQkJCQkJIGNt ZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJdG1wID0gbmV3X29ianRyZWUoIklG IEVYSVNUUyIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBub2RlLT5t aXNzaW5nX29rKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aWZfZXhpc3RzfXMi LCB0bXApOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19BTFRFUl9NQVBQSU5H X0ZPUl9UT0tFTjoKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1Q6CisJCWNhc2Ug QUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTjoKKwkJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIiV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIiwKKwkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJ CQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCWJyZWFr OworCX0KKworCS8qIEFkZCB0aGUgYWZmZWN0ZWQgdG9rZW4gbGlzdCwgZm9yIHN1YmNvbW1hbmRz IHRoYXQgaGF2ZSBvbmUgKi8KKwlpZiAobm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19BRERf TUFQUElORyB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX0FMVEVSX01BUFBJTkdf Rk9SX1RPS0VOIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNU X0ZPUl9UT0tFTiB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX0RST1BfTUFQUElO RykKKwl7CisJCWZvcmVhY2goY2VsbCwgbm9kZS0+dG9rZW50eXBlKQorCQkJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKGxmaXJzdChjZWxsKSkpKTsKKwkJYXBw ZW5kX2FycmF5X29iamVjdChyZXQsICJGT1IgJXt0b2tlbnR5cGU6LCB9SSIsIGxpc3QpOworCX0K KworCS8qIEFkZCBmdXJ0aGVyIHN1YmNvbW1hbmQtc3BlY2lmaWMgZWxlbWVudHMgKi8KKwlpZiAo bm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORyB8fAorCQlub2RlLT5raW5k ID09IEFMVEVSX1RTQ09ORklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOKQorCXsKKwkJLyogQURE IE1BUFBJTkcgYW5kIEFMVEVSIE1BUFBJTkcgRk9SIG5lZWQgYSBsaXN0IG9mIGRpY3Rpb25hcmll cyAqLworCQlsaXN0ID0gTklMOworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5kLmF0c2NmZy5uZGlj dHM7IGkrKykKKwkJeworCQkJT2JqVHJlZSAgICAqZGljdF9vYmo7CisKKwkJCWRpY3Rfb2JqID0g bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFRTRGljdGlvbmFyeVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkgIGNtZC0+ZC5hdHNjZmcuZGljdElkc1tpXSk7CisJCQlsaXN0ID0gbGFwcGVuZChs aXN0LAorCQkJCQkJICAgbmV3X29iamVjdF9vYmplY3QoZGljdF9vYmopKTsKKwkJfQorCQlhcHBl bmRfYXJyYXlfb2JqZWN0KHJldCwgIldJVEggJXtkaWN0aW9uYXJpZXM6LCB9RCIsIGxpc3QpOwor CX0KKwllbHNlIGlmIChub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVCB8 fAorCQkJIG5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tF TikKKwl7CisJCS8qIFRoZSBSRVBMQUNFIGZvcm1zIHdhbnQgb2xkIGFuZCBuZXcgZGljdGlvbmFy aWVzICovCisJCUFzc2VydChjbWQtPmQuYXRzY2ZnLm5kaWN0cyA9PSAyKTsKKwkJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiUkVQTEFDRSAle29sZF9kaWN0aW9uYXJ5fUQiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuZGljdElkc1swXSkpOworCQlhcHBlbmRfb2JqZWN0X29i amVjdChyZXQsICJXSVRIICV7bmV3X2RpY3Rpb25hcnl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkg Y21kLT5kLmF0c2NmZy5kaWN0SWRzWzFdKSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoK KyAqIERlcGFyc2UgYW4gQUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSBzdGF0ZW1lbnQuCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkgJXtp ZGVudGl0eX1EICgle2RlZmluaXRpb246LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9BbHRlclRTRGljdGlvbmFyeVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlEYXR1bQkJb3B0aW9u czsKKwlMaXN0CSAgICpkZWZpbml0aW9uID0gTklMOworCWJvb2wJCWlzbnVsbDsKKwlIZWFwVHVw bGUJdHNkVHVwOworCUZvcm1fcGdfdHNfZGljdCB0c2RGb3JtOworCisJdHNkVHVwID0gU2VhcmNo U3lzQ2FjaGUxKFRTRElDVE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZCh0c2RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgdGV4dCBzZWFyY2ggZGljdGlvbmFyeSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0 SWQpOworCXRzZEZvcm0gPSAoRm9ybV9wZ190c19kaWN0KSBHRVRTVFJVQ1QodHNkVHVwKTsKKwor CS8qCisJICogQWRkIHRoZSBkZWZpbml0aW9uIGxpc3QgYWNjb3JkaW5nIHRvIHRoZSBwZ190c19k aWN0IGRpY3Rpbml0b3B0aW9uCisJICogY29sdW1uCisJICovCisJb3B0aW9ucyA9IFN5c0NhY2hl R2V0QXR0cihUU0RJQ1RPSUQsIHRzZFR1cCwKKwkJCQkJCQkgIEFudW1fcGdfdHNfZGljdF9kaWN0 aW5pdG9wdGlvbiwKKwkJCQkJCQkgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVlKCIiKTsK KwlpZiAoIWlzbnVsbCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtvcHRpb25zfXMi LCAib3B0aW9ucyIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcob3B0aW9ucykpOworCWVs c2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisKKwlkZWZpbml0aW9uID0gbGFwcGVuZChk ZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXJldCA9IG5ld19vYmp0cmVl X1ZBKCJBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRpdHl9RCAoJXtkZWZpbml0 aW9uOiwgfXMpIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2RGb3JtLT5kaWN0bmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJICBOYW1lU3RyKHRzZEZvcm0tPmRpY3RuYW1lKSksCisJCQkJCQkgImRlZmluaXRpb24i LCBPYmpUeXBlQXJyYXksIGRlZmluaXRpb24pOworCisJUmVsZWFzZVN5c0NhY2hlKHRzZFR1cCk7 CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNF VCAoLi4uKQorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRVNFVHxTRVQgKCV7b3B0aW9uczos IH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJU YWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAq Y2VsbDsKKwlib29sCQlpc19yZXNldCA9IHN1YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNldFJlbE9w dGlvbnM7CisKKwlmb3JlYWNoKGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVm RWxlbSAgICAqZWxlbTsKKwkJT2JqVHJlZSAgICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAq KSBsZmlyc3QoY2VsbCk7CisJCXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7 CisJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKwor CUFzc2VydChzZXRzKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiJXtzZXRfcmVzZXR9cyAo JXtvcHRpb25zOiwgfXMpIiwgMiwKKwkJCQkJCSAgInNldF9yZXNldCIsIE9ialR5cGVTdHJpbmcs IGlzX3Jlc2V0ID8gIlJFU0VUIiA6ICJTRVQiLAorCQkJCQkJICAib3B0aW9ucyIsIE9ialR5cGVB cnJheSwgc2V0cyk7Cit9CisKKy8qCisgKiBkZXBhcnNlX1ZpZXdTdG10CisgKgkJZGVwYXJzZSBh IFZpZXdTdG10CisgKgorICogR2l2ZW4gYSB2aWV3IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhh dCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVh dGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtvcl9yZXBs YWNlfXMgJXtwZXJzaXN0ZW5jZX1zIFZJRVcgJXtpZGVudGl0eX1EIEFTICV7cXVlcnl9cworICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1ZpZXdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCVZpZXdTdG10ICAgKm5vZGUgPSAoVmlld1N0bXQgKikgcGFyc2V0cmVl OworCU9ialRyZWUgICAgKnJldDsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKworCXJlbGF0aW9uID0g cmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJDUkVBVEUgJXtvcl9yZXBsYWNlfXMgJXtwZXJzaXN0ZW5jZX1zIFZJRVcgJXtp ZGVudGl0eX1EIEFTICV7cXVlcnl9cyIsIDQsCisJCQkJCQkgIm9yX3JlcGxhY2UiLCBPYmpUeXBl U3RyaW5nLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIiwKKwkJCQkJ CSAicGVyc2lzdGVuY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9wZXJzaXN0ZW5jZV9z dHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpLAorCQkJCQkJICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9u LT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUocmVsYXRpb24pKSwKKwkJCQkJCSAicXVlcnkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJ IHBnX2dldF92aWV3ZGVmX2ludGVybmFsKG9iamVjdElkKSk7CisKKwlyZWxhdGlvbl9jbG9zZShy ZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVw YXJzZSBDUkVBVEUgTWF0ZXJpYWxpemVkIFZpZXcgc3RhdGVtZW50LCBpdCBpcyBhIHZhcmlhbnQg b2YKKyAqIENyZWF0ZVRhYmxlQXNTdG10CisgKgorICogTm90ZSB0aGF0IENSRUFURSBUQUJMRSBB UyBTRUxFQ1QgSU5UTyBjYW4gYWxzbyBiZSBkZXBhcnNlZCBieQorICogZGVwYXJzZV9DcmVhdGVU YWJsZUFzU3RtdCB0byByZW1vdmUgdGhlIFNFTEVDVCBJTlRPIGNsYXVzZS4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBbTUFURVJJQUxJWkVEIFZJRVcg fCBUQUJMRV0gJXtpZl9ub3RfZXhpc3RzfXMKKyAqIAkJJXtpZGVudGl0eX1EICV7Y29sdW1uc31z IFsle29uX2NvbW1pdH1zXSAle3RhYmxlc3BhY2V9cworICogIAkJQVMgJXtxdWVyeX1zICV7d2l0 aF9ub19kYXRhfXMiCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlVGFibGVB c1N0bXRfdmFuaWxsYShPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVU YWJsZUFzU3RtdCAqbm9kZSA9IChDcmVhdGVUYWJsZUFzU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVs YXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2sp OworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJT2JqVHJlZSAgICAqdG1w MjsKKwljaGFyCSAgICpmbXQ7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpj ZWxsOworCisJLyogUmVqZWN0IHVuc3VwcG9ydGVkIGNhc2UgcmlnaHQgYXdheS4gKi8KKwlpZiAo KChRdWVyeSAqKSAobm9kZS0+cXVlcnkpKS0+Y29tbWFuZFR5cGUgPT0gQ01EX1VUSUxJVFkpCisJ CWVsb2coRVJST1IsICJ1bmltcGxlbWVudGVkIGRlcGFyc2Ugb2YgQ1JFQVRFIFRBQkxFIEFTIEVY RUNVVEUiKTsKKworCS8qCisJICogTm90ZSB0aGF0IElOU0VSVCBJTlRPIGlzIGRlcGFyc2VkIGFz IENSRUFURSBUQUJMRSBBUy4gIFRoZXkgYXJlCisJICogZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQg c3lub255bXMgc28gdGhlcmUgaXMgbm8gaGFybSBmcm9tIHRoaXMuCisJICovCisJaWYgKG5vZGUt Pm9ianR5cGUgPT0gT0JKRUNUX01BVFZJRVcpCisJCWZtdCA9ICJDUkVBVEUgJXtwZXJzaXN0ZW5j ZX1zIE1BVEVSSUFMSVpFRCBWSUVXICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCI7CisJ ZWxzZQorCQlmbXQgPSAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlz dHN9cyAle2lkZW50aXR5fUQiOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAzLAorCQkJ CQkJICJwZXJzaXN0ZW5jZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNl X3N0cihub2RlLT5pbnRvLT5yZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJCQkJCSAiaWZfbm90X2V4 aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBO T1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCS8qIENPTFVNTlMgY2xhdXNlICovCisJaWYgKG5vZGUt PmludG8tPmNvbE5hbWVzKQorCXsKKwkJZm9yZWFjaChjZWxsLCBub2RlLT5pbnRvLT5jb2xOYW1l cykKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbChsZmly c3QoY2VsbCkpKSk7CisKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIigle2NvbHVtbnM6LCB9SSki LCAxLAorCQkJCQkJCSAiY29sdW1ucyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisJfQorCWVsc2UK KwkJdG1wID0gbmV3X29ianRyZWVfVkEoIiIsIDEsCisJCQkJCQkJICJwcmVzZW50IiwgT2JqVHlw ZUJvb2wsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29sdW1uc31z IiwgdG1wKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJVU0lO RyIpOworCWlmIChub2RlLT5pbnRvLT5hY2Nlc3NNZXRob2QpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcCwgIiV7YWNjZXNzX21ldGhvZH1JIiwgImFjY2Vzc19tZXRob2QiLAorCQkJCQkJCSBu b2RlLT5pbnRvLT5hY2Nlc3NNZXRob2QpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVj dCh0bXAsICIle2FjY2Vzc19tZXRob2R9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsK Kwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXthY2Nlc3NfbWV0aG9kfXMiLCB0bXAp OworCisJLyogV0lUSCBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCWxp c3QgPSBOSUw7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPmludG8tPm9wdGlvbnMpCisJeworCQlE ZWZFbGVtICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJdG1wMiA9IGRl cGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wMikpOworCX0KKworCWlmIChsaXN0KQorCQlhcHBlbmRfYXJyYXlfb2Jq ZWN0KHRtcCwgIigle3dpdGg6LCB9cykiLCBsaXN0KTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJl c2VudCh0bXApOworCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aXRoX2NsYXVzZX1z IiwgdG1wKTsKKworCS8qIE9OIENPTU1JVCBjbGF1c2UuICBDUkVBVEUgTUFURVJJQUxJWkVEIFZJ RVcgZG9lc24ndCBoYXZlIG9uZSAqLworCWlmIChub2RlLT5vYmp0eXBlID09IE9CSkVDVF9UQUJM RSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtvbl9jb21taXR9cyIsCisJCQkJCQkJ IGRlcGFyc2VfT25Db21taXRDbGF1c2Uobm9kZS0+aW50by0+b25Db21taXQpKTsKKworCS8qIFRB QkxFU1BBQ0UgY2xhdXNlICovCisJdG1wID0gbmV3X29ianRyZWUoIlRBQkxFU1BBQ0UgJXt0YWJs ZXNwYWNlfUkiKTsKKwlpZiAobm9kZS0+aW50by0+dGFibGVTcGFjZU5hbWUpCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcCwgIiV7dGFibGVzcGFjZX1zIiwgInRhYmxlc3BhY2UiLAorCQkJCQkJ CSBub2RlLT5pbnRvLT50YWJsZVNwYWNlTmFtZSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxf b2JqZWN0KHRtcCwgIiV7dGFibGVzcGFjZX1JIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXAp OworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcCk7 CisKKwkvKiBBZGQgdGhlIHF1ZXJ5ICovCisJQXNzZXJ0KElzQShub2RlLT5xdWVyeSwgUXVlcnkp KTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJBUyAle3F1ZXJ5fXMiLCAicXVlcnkiLAor CQkJCQkJIHBnX2dldF9xdWVyeWRlZigoUXVlcnkgKikgbm9kZS0+cXVlcnksIGZhbHNlKSk7CisK KwkvKiBBZGQgYSBXSVRIIE5PIERBVEEgY2xhdXNlICovCisJdG1wID0gbmV3X29ianRyZWVfVkEo IldJVEggTk8gREFUQSIsIDEsCisJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJ CSBub2RlLT5pbnRvLT5za2lwRGF0YSA/IHRydWUgOiBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9v YmplY3QocmV0LCAiJXt3aXRoX25vX2RhdGF9cyIsIHRtcCk7CisKKwlyZWxhdGlvbl9jbG9zZShy ZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgQ3JlYXRlVHJpZ1N0bXQgKENSRUFURSBUUklHR0VSKQorICoKKyAqIEdpdmVuIGEg dHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFu IE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7Y29uc3RyYWludH1zIFRSSUdHRVIgJXtuYW1lfUkg JXt0aW1lfXMgJXtldmVudHM6IE9SIH1zIE9OCisgKiAle3JlbGF0aW9ufUQgJXtmcm9tX3RhYmxl fXMgJXtjb25zdHJhaW50X2F0dHJzOiB9cyBGT1IgRUFDSAorICogJXtmb3JfZWFjaH1zICV7d2hl bn1zIEVYRUNVVEUgUFJPQ0VEVVJFICV7ZnVuY3Rpb259cworICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0NyZWF0ZVRyaWdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQor eworCUNyZWF0ZVRyaWdTdG10ICpub2RlID0gKENyZWF0ZVRyaWdTdG10ICopIHBhcnNldHJlZTsK KwlSZWxhdGlvbglwZ190cmlnZ2VyOworCUhlYXBUdXBsZQl0cmlnVHVwOworCUZvcm1fcGdfdHJp Z2dlciB0cmlnRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsK KwlpbnQJCQl0Z25hcmdzOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdAkgICAqZXZlbnRz OworCWNoYXIJICAgKnRyaWd0aW1pbmc7CisKKwlwZ190cmlnZ2VyID0gdGFibGVfb3BlbihUcmln Z2VyUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXRyaWdUdXAgPSBnZXRfY2F0YWxv Z19vYmplY3RfYnlfb2lkKHBnX3RyaWdnZXIsIEFudW1fcGdfdHJpZ2dlcl9vaWQsIG9iamVjdElk KTsKKwl0cmlnRm9ybSA9IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKwor CXRyaWd0aW1pbmcgPSBub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0JFRk9SRSA/ICJCRUZP UkUiIDoKKwkJbm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9BRlRFUiA/ICJBRlRFUiIgOgor CQlub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0lOU1RFQUQgPyAiSU5TVEVBRCBPRiIgOgor CQlOVUxMOworCWlmICghdHJpZ3RpbWluZykKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCB0 cmlnZ2VyIHRpbWluZyB0eXBlICVkIiwgbm9kZS0+dGltaW5nKTsKKworCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJDUkVBVEUgJXtjb25zdHJhaW50fXMgVFJJR0dFUiAle25hbWV9SSAle3RpbWV9cyIs IDMsCisJCQkJCQkgImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5pc2NvbnN0cmFp bnQgPyAiQ09OU1RSQUlOVCIgOiAiIiwKKwkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIG5v ZGUtPnRyaWduYW1lLAorCQkJCQkJICJ0aW1lIiwgT2JqVHlwZVN0cmluZywgdHJpZ3RpbWluZyk7 CisKKwkvKgorCSAqIERlY29kZSB0aGUgZXZlbnRzIHRoYXQgdGhlIHRyaWdnZXIgZmlyZXMgZm9y LiAgVGhlIG91dHB1dCBpcyBhIGxpc3Q7IGluCisJICogbW9zdCBjYXNlcyBpdCB3aWxsIGp1c3Qg YmUgYSBzdHJpbmcgd2l0aCB0aGUgZXZlbnQgbmFtZSwgYnV0IHdoZW4KKwkgKiB0aGVyZSdzIGFu IFVQREFURSB3aXRoIGEgbGlzdCBvZiBjb2x1bW5zLCB3ZSByZXR1cm4gYSBKU09OIG9iamVjdC4K KwkgKi8KKwlldmVudHMgPSBOSUw7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9J TlNFUlQpCisJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiSU5T RVJUIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfREVMRVRFKQorCQlldmVu dHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIkRFTEVURSIpKTsKKwlpZiAo bm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX1RSVU5DQVRFKQorCQlldmVudHMgPSBsYXBwZW5k KGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlRSVU5DQVRFIikpOworCWlmIChub2RlLT5ldmVu dHMgJiBUUklHR0VSX1RZUEVfVVBEQVRFKQorCXsKKwkJaWYgKG5vZGUtPmNvbHVtbnMgPT0gTklM KQorCQl7CisJCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlVQ REFURSIpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCU9ialRyZWUgICAgKnVwZGF0ZTsKKwkJCUxp c3RDZWxsICAgKmNlbGw7CisJCQlMaXN0CSAgICpjb2xzID0gTklMOworCisJCQkvKgorCQkJICog Q3VycmVudGx5IG9ubHkgVVBEQVRFIE9GIGNhbiBiZSBvYmplY3RzIGluIHRoZSBvdXRwdXQgSlNP TiwgYnV0CisJCQkgKiB3ZSBhZGQgYSAia2luZCIgZWxlbWVudCBzbyB0aGF0IHVzZXIgY29kZSBj YW4gZGlzdGluZ3Vpc2gKKwkJCSAqIHBvc3NpYmxlIGZ1dHVyZSBuZXcgZXZlbnQgdHlwZXMuCisJ CQkgKi8KKwkJCXVwZGF0ZSA9IG5ld19vYmp0cmVlX1ZBKCJVUERBVEUgT0YiLCAxLAorCQkJCQkJ CQkJImtpbmQiLCBPYmpUeXBlU3RyaW5nLCAidXBkYXRlX29mIik7CisKKwkJCWZvcmVhY2goY2Vs bCwgbm9kZS0+Y29sdW1ucykKKwkJCXsKKwkJCQljaGFyCSAgICpjb2xuYW1lID0gc3RyVmFsKGxm aXJzdChjZWxsKSk7CisKKwkJCQljb2xzID0gbGFwcGVuZChjb2xzLCBuZXdfc3RyaW5nX29iamVj dChjb2xuYW1lKSk7CisJCQl9CisKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodXBkYXRlLCAiJXtj b2x1bW5zOiwgfUkiLCBjb2xzKTsKKworCQkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19v YmplY3Rfb2JqZWN0KHVwZGF0ZSkpOworCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QocmV0 LCAiJXtldmVudHM6IE9SIH1zIiwgZXZlbnRzKTsKKworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCSB0cmlnRm9ybS0+ dGdyZWxpZCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiT04gJXtyZWxhdGlvbn1EIiwg dG1wX29iaik7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIkZST00iKTsKKwlpZiAodHJpZ0Zv cm0tPnRnY29uc3RycmVsaWQpCisJeworCQlPYmpUcmVlICAgICpyZWw7CisKKwkJcmVsID0gbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkg IHRyaWdGb3JtLT50Z2NvbnN0cnJlbGlkKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29i aiwgIiV7cmVsYXRpb259RCIsIHJlbCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50 KHRtcF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7ZnJvbV90YWJsZX1zIiwg dG1wX29iaik7CisKKwlpZiAobm9kZS0+ZGVmZXJyYWJsZSkKKwkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X3N0cmluZ19vYmplY3QoIkRFRkVSUkFCTEUiKSk7CisJaWYgKG5vZGUtPmluaXRkZWZl cnJlZCkKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIklOSVRJQUxM WSBERUZFUlJFRCIpKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7Y29uc3RyYWludF9h dHRyczogfXMiLCBsaXN0KTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkZPUiBFQUNI ICV7Zm9yX2VhY2h9cyIsICJmb3JfZWFjaCIsCisJCQkJCQkgbm9kZS0+cm93ID8gIlJPVyIgOiAi U1RBVEVNRU5UIik7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIldIRU4iKTsKKwlpZiAobm9k ZS0+d2hlbkNsYXVzZSkKKwl7CisJCU5vZGUJICAgKndoZW5DbGF1c2U7CisJCURhdHVtCQl2YWx1 ZTsKKwkJYm9vbAkJaXNudWxsOworCisJCXZhbHVlID0gZmFzdGdldGF0dHIodHJpZ1R1cCwgQW51 bV9wZ190cmlnZ2VyX3RncXVhbCwKKwkJCQkJCQlSZWxhdGlvbkdldERlc2NyKHBnX3RyaWdnZXIp LCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJudWxsIHRncXVhbCBm b3IgdHJpZ2dlciBcIiVzXCIiLAorCQkJCSBOYW1lU3RyKHRyaWdGb3JtLT50Z25hbWUpKTsKKwor CQl3aGVuQ2xhdXNlID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcodmFsdWUpKTsK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIigle2NsYXVzZX1zKSIsICJjbGF1c2Ui LAorCQkJCQkJCSBwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKHRyaWdGb3JtLAorCQkJCQkJCQkJ CQkJCSAgIHdoZW5DbGF1c2UsCisJCQkJCQkJCQkJCQkJICAgZmFsc2UpKTsKKwl9CisJZWxzZQor CQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0 LCAiJXt3aGVufXMiLCB0bXBfb2JqKTsKKworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtm dW5jbmFtZX1EIiwgMSwKKwkJCQkJCQkiZnVuY25hbWUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ CW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQl0cmlnRm9ybS0+dGdmb2lkKSk7CisJbGlzdCA9IE5JTDsKKwl0Z25hcmdzID0gdHJp Z0Zvcm0tPnRnbmFyZ3M7CisJaWYgKHRnbmFyZ3MgPiAwKQorCXsKKwkJYnl0ZWEJICAgKnRnYXJn czsKKwkJY2hhcgkgICAqYXJnc3RyOworCQlib29sCQlpc251bGw7CisJCWludAkJCWZpbmR4Owor CQlpbnQJCQlsZW50Z2FyZ3M7CisJCWNoYXIJICAgKnA7CisKKwkJdGdhcmdzID0gRGF0dW1HZXRC eXRlYVAoZmFzdGdldGF0dHIodHJpZ1R1cCwKKwkJCQkJCQkJCQkJQW51bV9wZ190cmlnZ2VyX3Rn YXJncywKKwkJCQkJCQkJCQkJUmVsYXRpb25HZXREZXNjcihwZ190cmlnZ2VyKSwKKwkJCQkJCQkJ CQkJJmlzbnVsbCkpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgIm51bGwgdGdhcmdz IGZvciB0cmlnZ2VyIFwiJXNcIiIsCisJCQkJIE5hbWVTdHIodHJpZ0Zvcm0tPnRnbmFtZSkpOwor CQlhcmdzdHIgPSAoY2hhciAqKSBWQVJEQVRBKHRnYXJncyk7CisJCWxlbnRnYXJncyA9IFZBUlNJ WkVfQU5ZX0VYSERSKHRnYXJncyk7CisKKwkJcCA9IGFyZ3N0cjsKKwkJZm9yIChmaW5keCA9IDA7 IGZpbmR4IDwgdGduYXJnczsgZmluZHgrKykKKwkJeworCQkJc2l6ZV90CQl0bGVuOworCisJCQkv KiBWZXJpZnkgdGhhdCB0aGUgYXJndW1lbnQgZW5jb2RpbmcgaXMgY29ycmVjdCAqLworCQkJdGxl biA9IHN0cmxlbihwKTsKKwkJCWlmIChwICsgdGxlbiA+PSBhcmdzdHIgKyBsZW50Z2FyZ3MpCisJ CQkJZWxvZyhFUlJPUiwgImludmFsaWQgYXJndW1lbnQgc3RyaW5nICglcykgZm9yIHRyaWdnZXIg XCIlc1wiIiwKKwkJCQkJIGFyZ3N0ciwgTmFtZVN0cih0cmlnRm9ybS0+dGduYW1lKSk7CisKKwkJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHApKTsKKworCQkJcCArPSB0 bGVuICsgMTsKKwkJfQorCX0KKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmosICIoIik7 CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiJXthcmdzOiwgfUwiLCBsaXN0KTsJLyog bWlnaHQgYmUgTklMICovCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIikiKTsKKwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIkVYRUNVVEUgUFJPQ0VEVVJFICV7ZnVuY3Rpb259 cyIsIHRtcF9vYmopOworCisJdGFibGVfY2xvc2UocGdfdHJpZ2dlciwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlVXNlck1hcHBp bmdTdG10IChDUkVBVEUgVVNFUiBNQVBQSU5HKQorICoKKyAqIEdpdmVuIGEgVXNlciBNYXBwaW5n IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LAorICogcmV0dXJuIGFuIE9i alRyZWUgcmVwcmVzZW50aW5nIHRoZSBDUkVBVEUgVVNFUiBNQVBQSU5HIGNvbW1hbmQuCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBVU0VSIE1BUFBJTkcgRk9SICV7cm9sZX1SIFNF UlZFUiAle3NlcnZlcn1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlVXNl ck1hcHBpbmdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVVz ZXJNYXBwaW5nU3RtdCAqbm9kZSA9IChDcmVhdGVVc2VyTWFwcGluZ1N0bXQgKikgcGFyc2V0cmVl OworCU9ialRyZWUgICAgKnJldDsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXRwOworCUZv cm1fcGdfdXNlcl9tYXBwaW5nIGZvcm07CisJRm9yZWlnblNlcnZlciAqc2VydmVyOworCisJcmVs ID0gdGFibGVfb3BlbihVc2VyTWFwcGluZ1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwor CisJLyoKKwkgKiBMb29rdXAgb2JqZWN0IGluIHRoZSBjYXRhbG9nLCBzbyB3ZSBkb24ndCBoYXZl IHRvIGRlYWwgd2l0aAorCSAqIGN1cnJlbnRfdXNlciBhbmQgc3VjaC4KKwkgKi8KKwl0cCA9IFNl YXJjaFN5c0NhY2hlMShVU0VSTUFQUElOR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciB1c2VyIG1hcHBpbmcgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsK KworCWZvcm0gPSAoRm9ybV9wZ191c2VyX21hcHBpbmcpIEdFVFNUUlVDVCh0cCk7CisKKwlzZXJ2 ZXIgPSBHZXRGb3JlaWduU2VydmVyKGZvcm0tPnVtc2VydmVyKTsKKworCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJDUkVBVEUgVVNFUiBNQVBQSU5HIEZPUiAle3JvbGV9UiBTRVJWRVIgJXtzZXJ2ZXJ9 SSAle2dlbmVyaWNfb3B0aW9uc31zIiwgMywKKwkJCQkJCSAicm9sZSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3JvbGVfaWQoZm9ybS0+dW11c2VyKSwKKwkJCQkJCSAi c2VydmVyIiwgT2JqVHlwZVN0cmluZywgc2VydmVyLT5zZXJ2ZXJuYW1lLAorCQkJCQkJICJnZW5l cmljX29wdGlvbnMiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhu b2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHApOworCXRhYmxlX2Ns b3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGRl cGFyc2VfQWx0ZXJVc2VyTWFwcGluZworICoKKyAqIEdpdmVuIGEgVXNlciBNYXBwaW5nIE9JRCBh bmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUg cmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBBTFRFUiBVU0VSIE1BUFBJTkcgRk9SICV7cm9sZX1SIFNFUlZFUiAle3NlcnZlcn1JCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJVc2VyTWFwcGluZ1N0bXQoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJVc2VyTWFwcGluZ1N0bXQgKm5vZGUgPSAo QWx0ZXJVc2VyTWFwcGluZ1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlS ZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXRwOworCUZvcm1fcGdfdXNlcl9tYXBwaW5nIGZvcm07 CisJRm9yZWlnblNlcnZlciAqc2VydmVyOworCisJcmVsID0gdGFibGVfb3BlbihVc2VyTWFwcGlu Z1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJLyoKKwkgKiBMb29rdXAgb2JqZWN0 IGluIHRoZSBjYXRhbG9nLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlYWwgd2l0aAorCSAqIGN1cnJl bnRfdXNlciBhbmQgc3VjaC4KKwkgKi8KKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShVU0VSTUFQUElO R09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZCh0cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB1c2VyIG1hcHBp bmcgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCWZvcm0gPSAoRm9ybV9wZ191c2Vy X21hcHBpbmcpIEdFVFNUUlVDVCh0cCk7CisKKwlzZXJ2ZXIgPSBHZXRGb3JlaWduU2VydmVyKGZv cm0tPnVtc2VydmVyKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBVU0VSIE1BUFBJ TkcgRk9SICV7cm9sZX1SIFNFUlZFUiAle3NlcnZlcn1JICV7Z2VuZXJpY19vcHRpb25zfXMiLCAz LAorCQkJCQkJICJyb2xlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cm9sZV9pZChmb3JtLT51bXVzZXIpLAorCQkJCQkJICJzZXJ2ZXIiLCBPYmpUeXBlU3RyaW5nLCBz ZXJ2ZXItPnNlcnZlcm5hbWUsCisJCQkJCQkgImdlbmVyaWNfb3B0aW9ucyIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsKKwor CVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2Nr KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclN0YXRzU3RtdCAo QUxURVIgU1RBVElTVElDUykKKyAqCisgKiBHaXZlbiBhIGFsdGVyIHN0YXRpc3RpY3MgT0lEIGFu ZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSBy ZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IEFMVEVSIFNUQVRJU1RJQ1MgJXtpZGVudGl0eX1EIFNFVCBTVEFUSVNUSUNTICV7dGFyZ2V0fW4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclN0YXRzU3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlclN0YXRzU3RtdCAqbm9kZSA9IChBbHRlclN0 YXRzU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCUhlYXBUdXBsZQl0cDsK KwlGb3JtX3BnX3N0YXRpc3RpY19leHQgc3RhdGZvcm07CisKKwlpZiAoIW5vZGUtPnN0eHN0YXR0 YXJnZXQpCisJCXJldHVybiBOVUxMOworCisJLyogTG9va3VwIG9iamVjdCBpbiB0aGUgY2F0YWxv ZyAqLworCXRwID0gU2VhcmNoU3lzQ2FjaGUxKFNUQVRFWFRPSUQsIE9iamVjdElkR2V0RGF0dW0o b2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc3RhdGlzdGljIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQp OworCisJc3RhdGZvcm0gPSAoRm9ybV9wZ19zdGF0aXN0aWNfZXh0KSBHRVRTVFJVQ1QodHApOwor CXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTVEFUSVNUSUNTICV7aWRlbnRpdHl9RCBTRVQg U1RBVElTVElDUyAle3RhcmdldH1uIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzdGF0Zm9ybS0+c3R4bmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHN0YXRmb3JtLT5zdHhuYW1lKSksCisJCQkJCQkg InRhcmdldCIsIE9ialR5cGVJbnRlZ2VyLCBub2RlLT5zdHhzdGF0dGFyZ2V0KTsKKworCVJlbGVh c2VTeXNDYWNoZSh0cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBSZWZy ZXNoTWF0Vmlld1N0bXQgKFJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcpCisgKgorICogR2l2ZW4g YSBtYXRlcmlhbGl6ZWQgdmlldyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBp dCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgcmVmcmVzaCBjb21tYW5k LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXICV7 Y29uY3VycmVudGx5fXMgJXtpZGVudGl0eX1EICV7d2l0aF9ub19kYXRhfXMKKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9SZWZyZXNoTWF0Vmlld1N0bXQoT2lkIG9iamVjdElkLCBOb2Rl ICpwYXJzZXRyZWUpCit7CisJUmVmcmVzaE1hdFZpZXdTdG10ICpub2RlID0gKFJlZnJlc2hNYXRW aWV3U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRt cDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXICV7 Y29uY3VycmVudGx5fXMgJXtpZGVudGl0eX1EIiwgMiwKKwkJCQkJCSAiY29uY3VycmVudGx5Iiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5jb25jdXJyZW50ID8gIkNPTkNVUlJFTlRMWSIg OiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9i amVjdElkKSk7CisKKwkvKiBBZGQgYSBXSVRIIE5PIERBVEEgY2xhdXNlICovCisJdG1wID0gbmV3 X29ianRyZWVfVkEoIldJVEggTk8gREFUQSIsIDEsCisJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBl Qm9vbCwKKwkJCQkJCSBub2RlLT5za2lwRGF0YSA/IHRydWUgOiBmYWxzZSk7CisJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXt3aXRoX25vX2RhdGF9cyIsIHRtcCk7CisKKwlyZXR1cm4gcmV0 OworfQorCisvKgorICogRGVwYXJzZSBEZWZFbGVtcywgYXMgdXNlZCBlLmcuIGJ5IEFMVEVSIENP TFVNTiAuLi4gU0VULCBpbnRvIGEgbGlzdCBvZiBTRVQKKyAqICguLi4pICBvciBSRVNFVCAoLi4u KSBjb250ZW50cy4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogJXtsYWJlbH1zID0gJXt2YWx1 ZX1MCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmRWxlbShEZWZFbGVtICplbGVt LCBib29sIGlzX3Jlc2V0KQoreworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICpvcHRu YW1lID0gbmV3X29ianRyZWUoIiIpOworCisJaWYgKGVsZW0tPmRlZm5hbWVzcGFjZSAhPSBOVUxM KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChvcHRuYW1lLCAiJXtzY2hlbWF9SS4iLCAic2NoZW1h IiwKKwkJCQkJCQkgZWxlbS0+ZGVmbmFtZXNwYWNlKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KG9wdG5hbWUsICIle2xhYmVsfUkiLCAibGFiZWwiLCBlbGVtLT5kZWZuYW1lKTsKKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCIle2xhYmVsfXMiLCAxLAorCQkJCQkJICJsYWJlbCIsIE9ialR5cGVP YmplY3QsIG9wdG5hbWUpOworCisJaWYgKCFpc19yZXNldCkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QocmV0LCAiPSAle3ZhbHVlfUwiLCAidmFsdWUiLAorCQkJCQkJCSBlbGVtLT5hcmcgPyBkZWZH ZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRSVUUiIDog IkZBTFNFIik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2luZyBv ZiBEUk9QIGNvbW1hbmRzLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBEUk9QICVzIElGIEVY SVNUUyAlJXtvYmppZGVudGl0eX1zICV7Y2FzY2FkZX1zCisgKi8KK2NoYXIgKgorZGVwYXJzZV9k cm9wX2NvbW1hbmQoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5 cGUsCisJCQkJCSBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpCit7CisJU3RyaW5nSW5mb0RhdGEgc3Ry OworCWNoYXIJICAgKmNvbW1hbmQ7CisJY2hhcgkgICAqaWRlbnRpdHkgPSAoY2hhciAqKSBvYmpp ZGVudGl0eTsKKwlPYmpUcmVlICAgICpzdG10OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJSnNv bmIJICAgKmpzb25iOworCisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisKKwlzdG10ID0gbmV3X29i anRyZWVfVkEoIkRST1AgJXtvYmp0eXBlfXMgSUYgRVhJU1RTICV7b2JqaWRlbnRpdHl9cyIsIDIs CisJCQkJCQkgICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywgb2JqZWN0dHlwZSwKKwkJCQkJCSAg Im9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgaWRlbnRpdHkpOworCisJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkicHJlc2VudCIsIE9ialR5cGVCb29s LCBiZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQs ICIle2Nhc2NhZGV9cyIsIHRtcF9vYmopOworCisJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHN0 bXQpOworCWNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05C X0VTVElNQVRFRF9MRU4pOworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBIYW5kbGUg ZGVwYXJzaW5nIHNldHRpbmcgb2YgRnVuY3Rpb24KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICog UkVTRVQgQUxMCisgKiBPUgorICogU0VUICV7c2V0X25hbWV9SSBUTyAle3NldF92YWx1ZX1zCisg KiBPUgorICogUkVTRVQgJXtzZXRfbmFtZX1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfRnVuY3Rpb25TZXQoVmFyaWFibGVTZXRLaW5kIGtpbmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZh bHVlKQoreworCU9ialRyZWUgICAgKnJldDsKKworCWlmIChraW5kID09IFZBUl9SRVNFVF9BTEwp CisJCXJldCA9IG5ld19vYmp0cmVlKCJSRVNFVCBBTEwiKTsKKwllbHNlIGlmIChraW5kID09IFZB Ul9TRVRfVkFMVUUpCisJeworCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiU0VUICV7c2V0X25hbWV9 SSIsIDEsCisJCQkJCQkJICJzZXRfbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWUpOworCisJCS8q CisJCSAqIFNvbWUgR1VDIHZhcmlhYmxlIG5hbWVzIGFyZSAnTElTVCcgdHlwZSBhbmQgaGVuY2Ug bXVzdCBub3QgYmUKKwkJICogcXVvdGVkLgorCQkgKi8KKwkJaWYgKEdldENvbmZpZ09wdGlvbkZs YWdzKG5hbWUsIHRydWUpICYgR1VDX0xJU1RfUVVPVEUpCisJCQlhcHBlbmRfc3RyaW5nX29iamVj dChyZXQsICJUTyAle3NldF92YWx1ZX1zIiwgInNldF92YWx1ZSIsIHZhbHVlKTsKKwkJZWxzZQor CQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiVE8gJXtzZXRfdmFsdWV9TCIsICJzZXRfdmFs dWUiLCB2YWx1ZSk7CisJfQorCWVsc2UKKwkJcmV0ID0gbmV3X29ianRyZWVfVkEoIlJFU0VUICV7 c2V0X25hbWV9SSIsIDEsCisJCQkJCQkJICJzZXRfbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWUp OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gSW5kZXhTdG10LgorICoK KyAqIEdpdmVuIGFuIGluZGV4IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0 LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5k LgorICoKKyAqIElmIHRoZSBpbmRleCBjb3JyZXNwb25kcyB0byBhIGNvbnN0cmFpbnQsIE5VTEwg aXMgcmV0dXJuZWQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle3VuaXF1ZX1z IElOREVYICV7Y29uY3VycmVudGx5fXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgT04KKyAq ICV7dGFibGV9RCBVU0lORyAle2luZGV4X2FtfXMgKCV7ZGVmaW5pdGlvbn1zKSAle3dpdGh9cyAl e3RhYmxlc3BhY2V9cworICogJXt3aGVyZV9jbGF1c2V9cworICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0luZGV4U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlJ bmRleFN0bXQgICpub2RlID0gKEluZGV4U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAq cmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJUmVsYXRpb24JaWR4cmVsOworCVJlbGF0aW9u CWhlYXByZWw7CisJY2hhcgkgICAqaW5kZXhfYW07CisJY2hhcgkgICAqZGVmaW5pdGlvbjsKKwlj aGFyCSAgICpyZWxvcHRpb25zOworCWNoYXIJICAgKnRhYmxlc3BhY2U7CisJY2hhcgkgICAqd2hl cmVDbGF1c2U7CisKKwlpZiAobm9kZS0+cHJpbWFyeSB8fCBub2RlLT5pc2NvbnN0cmFpbnQpCisJ eworCQkvKgorCQkgKiBJbmRleGVzIGZvciBQUklNQVJZIEtFWSBhbmQgb3RoZXIgY29uc3RyYWlu dHMgYXJlIG91dHB1dAorCQkgKiBzZXBhcmF0ZWx5OyByZXR1cm4gZW1wdHkgaGVyZS4KKwkJICov CisJCXJldHVybiBOVUxMOworCX0KKworCWlkeHJlbCA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQs IEFjY2Vzc1NoYXJlTG9jayk7CisJaGVhcHJlbCA9IHJlbGF0aW9uX29wZW4oaWR4cmVsLT5yZF9p bmRleC0+aW5kcmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlwZ19nZXRfaW5kZXhkZWZfZGV0 YWlsZWQob2JqZWN0SWQsCisJCQkJCQkJICZpbmRleF9hbSwgJmRlZmluaXRpb24sICZyZWxvcHRp b25zLAorCQkJCQkJCSAmdGFibGVzcGFjZSwgJndoZXJlQ2xhdXNlKTsKKworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJDUkVBVEUgJXt1bmlxdWV9cyBJTkRFWCAle2NvbmN1cnJlbnRseX1zICV7aWZf bm90X2V4aXN0c31zICV7bmFtZX1JIE9OICV7dGFibGV9RCBVU0lORyAle2luZGV4X2FtfXMgKCV7 ZGVmaW5pdGlvbn1zKSIsIDcsCisJCQkJCQkgInVuaXF1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkgbm9kZS0+dW5pcXVlID8gIlVOSVFVRSIgOiAiIiwKKwkJCQkJCSAiY29uY3VycmVudGx5Iiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5jb25jdXJyZW50ID8gIkNPTkNVUlJFTlRMWSIg OiAiIiwKKwkJCQkJCSAiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9k ZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJuYW1lIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHhyZWwpLAor CQkJCQkJICJ0YWJsZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKGhlYXByZWwtPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBSZWxh dGlvbkdldFJlbGF0aW9uTmFtZShoZWFwcmVsKSksCisJCQkJCQkgImluZGV4X2FtIiwgT2JqVHlw ZVN0cmluZywgaW5kZXhfYW0sCisJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLCBk ZWZpbml0aW9uKTsKKworCS8qIHJlbG9wdGlvbnMgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUo IldJVEgiKTsKKwlpZiAocmVsb3B0aW9ucykKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29i aiwgIigle29wdHN9cykiLCAib3B0cyIsIHJlbG9wdGlvbnMpOworCWVsc2UKKwkJYXBwZW5kX25v dF9wcmVzZW50KHRtcF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7d2l0aH1z IiwgdG1wX29iaik7CisKKwkvKiB0YWJsZXNwYWNlICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVl KCJUQUJMRVNQQUNFIik7CisJaWYgKHRhYmxlc3BhY2UpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcF9vYmosICIle3RhYmxlc3BhY2V9cyIsICJ0YWJsZXNwYWNlIiwgdGFibGVzcGFjZSk7CisJ ZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXBfb2JqKTsKKworCS8qIFdIRVJFIGNsYXVzZSAq LworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiV0hFUkUiKTsKKwlpZiAod2hlcmVDbGF1c2UpCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle3doZXJlfXMiLCAid2hlcmUiLCB3aGVy ZUNsYXVzZSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJYXBwZW5k X29iamVjdF9vYmplY3QocmV0LCAiJXt3aGVyZV9jbGF1c2V9cyIsIHRtcF9vYmopOworCisJdGFi bGVfY2xvc2UoaWR4cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCXRhYmxlX2Nsb3NlKGhlYXByZWws IEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSB0 aGUgSU5IRVJJVFMgcmVsYXRpb25zLgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lELCByZXR1cm4g YSBzY2hlbWEtcXVhbGlmaWVkIHRhYmxlIGxpc3QgcmVwcmVzZW50aW5nCisgKiB0aGUgcGFyZW50 IHRhYmxlcy4KKyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9i amVjdElkKQoreworCUxpc3QJICAgKnBhcmVudHMgPSBOSUw7CisJUmVsYXRpb24JaW5oUmVsOwor CVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5OworCUhlYXBUdXBsZQl0dXBsZTsK KworCWluaFJlbCA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVM b2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXksCisJCQkJQW51bV9wZ19pbmhlcml0c19pbmhyZWxp ZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXRE YXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihpbmhSZWwsIElu aGVyaXRzUmVsaWRTZXFub0luZGV4SWQsCisJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsK KworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2Fu KSkpCisJeworCQlPYmpUcmVlICAgICpwYXJlbnQ7CisJCUZvcm1fcGdfaW5oZXJpdHMgZm9ybUlu aCA9IChGb3JtX3BnX2luaGVyaXRzKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCXBhcmVudCA9IG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CSBmb3JtSW5oLT5pbmhwYXJlbnQpOworCQlwYXJlbnRzID0gbGFwcGVuZChwYXJlbnRzLCBuZXdf b2JqZWN0X29iamVjdChwYXJlbnQpKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOwor CXRhYmxlX2Nsb3NlKGluaFJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gcGFyZW50 czsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIE9OIENPTU1JVCAuLi4gY2xhdXNlIGZvciBDUkVB VEUgLi4uIFRFTVBPUkFSWSAuLi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogT04gQ09NTUlU ICV7b25fY29tbWl0X3ZhbHVlfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9PbkNv bW1pdENsYXVzZShPbkNvbW1pdEFjdGlvbiBvcHRpb24pCit7CisJT2JqVHJlZSAgICAqcmV0ICA9 IG5ld19vYmp0cmVlKCJPTiBDT01NSVQiKTsKKwlzd2l0Y2ggKG9wdGlvbikKKwl7CisJCWNhc2Ug T05DT01NSVRfRFJPUDoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7b25fY29tbWl0 X3ZhbHVlfXMiLAorCQkJCQkJCQkgIm9uX2NvbW1pdF92YWx1ZSIsICJEUk9QIik7CisJCQlicmVh azsKKworCQljYXNlIE9OQ09NTUlUX0RFTEVURV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QocmV0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIsCisJCQkJCQkJCSAib25fY29tbWl0X3ZhbHVl IiwgIkRFTEVURSBST1dTIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX1BSRVNFUlZF X1JPV1M6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle29uX2NvbW1pdF92YWx1ZX1z IiwKKwkJCQkJCQkJICJvbl9jb21taXRfdmFsdWUiLCAiUFJFU0VSVkUgUk9XUyIpOworCQkJYnJl YWs7CisKKwkJY2FzZSBPTkNPTU1JVF9OT09QOgorCQkJYXBwZW5kX251bGxfb2JqZWN0KHJldCwg IiV7b25fY29tbWl0X3ZhbHVlfXMiKTsKKwkJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCQkJ YnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBSZW5hbWVT dG10LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiAlcyAle2lmX2V4aXN0c31zICV7 aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiBQT0xJQ1kg JXtpZl9leGlzdHN9cyAle3BvbGljeW5hbWV9SSBPTiAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7 bmV3bmFtZX1JCisgKiBPUgorICogQUxURVIgb2JqdHlwZSAle2lkZW50aXR5fUQgUkVOQU1FIEFU VFJJQlVURSAle2NvbG5hbWV9SSBUTyAle25ld25hbWV9SSAle2Nhc2NhZGV9cworICogT1IKKyAq IEFMVEVSIG9ianR5cGUgJXtpZl9leGlzdHN9cyAlJXtpZGVudGl0eX1EIFJFTkFNRSBDT0xVTU4g JXtjb2xuYW1lfUkgVE8gJXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiAlcyAlJXtpZGVudGl0 eX1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiAlcyAlJXtpZGVudGl0 eX1EIFVTSU5HICUle2luZGV4X21ldGhvZH1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkKKyAqIE9S CisgKiBBTFRFUiBTQ0hFTUEgJXtpZGVudGl0eX1JIFJFTkFNRSBUTyAle25ld25hbWV9SQorICog T1IKKyAqIEFMVEVSIFJVTEUgJXtydWxlbmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8g JXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiBUUklHR0VSICV7dHJpZ2dlcm5hbWV9SSBPTiAl e2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisgKiBPUgorICogQUxURVIgJXMgJSV7 aWRlbnRpdHl9RCBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfUmVuYW1lU3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJl ZSkKK3sKKwlSZW5hbWVTdG10ICpub2RlID0gKFJlbmFtZVN0bXQgKikgcGFyc2V0cmVlOworCU9i alRyZWUgICAgKnJldDsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlPaWQJCQlzY2hlbWFJZDsKKwor CS8qCisJICogSW4gYW4gQUxURVIgLi4gUkVOQU1FIGNvbW1hbmQsIHdlIGRvbid0IGhhdmUgdGhl IG9yaWdpbmFsIG5hbWUgb2YgdGhlCisJICogb2JqZWN0IGluIHN5c3RlbSBjYXRhbG9nczogc2lu Y2Ugd2UgaW5zcGVjdCB0aGVtIGFmdGVyIHRoZSBjb21tYW5kIGhhcworCSAqIGV4ZWN1dGVkLCB0 aGUgb2xkIG5hbWUgaXMgYWxyZWFkeSBnb25lLiAgVGhlcmVmb3JlLCB3ZSBleHRyYWN0IGl0IGZy b20KKwkgKiB0aGUgcGFyc2Ugbm9kZS4gIE5vdGUgd2Ugc3RpbGwgZXh0cmFjdCB0aGUgc2NoZW1h IG5hbWUgZnJvbSB0aGUgY2F0YWxvZworCSAqIChpdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiB0 aGUgcGFyc2Ugbm9kZSk7IGl0IGNhbm5vdCBwb3NzaWJseSBoYXZlCisJICogY2hhbmdlZCBhbnl3 YXkuCisJICovCisJc3dpdGNoIChub2RlLT5yZW5hbWVUeXBlKQorCXsKKwkJY2FzZSBPQkpFQ1Rf VEFCTEU6CisJCWNhc2UgT0JKRUNUX0lOREVYOgorCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKwkJ Y2FzZSBPQkpFQ1RfVklFVzoKKwkJY2FzZSBPQkpFQ1RfTUFUVklFVzoKKwkJCXJlbGF0aW9uID0g cmVsYXRpb25fb3BlbihhZGRyZXNzLm9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJc2No ZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWxhdGlvbik7CisJCQlyZXQgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZl9leGlzdHN9cyAle2lkZW50aXR5fUQgUkVO QU1FIFRPICV7bmV3bmFtZX1JIiwgNCwKKwkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNlKSwK KwkJCQkJCQkJICJpZl9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgbm9kZS0+bWlz c2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIsCisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJ CQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSwKKwkJCQkJCQkJICJuZXduYW1l IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIG5vZGUtPm5ld25hbWUpOworCQkJcmVsYXRpb25f Y2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlicmVhazsKKworCQljYXNlIE9C SkVDVF9QT0xJQ1k6CisJCQl7CisJCQkJSGVhcFR1cGxlCXBvbFR1cDsKKwkJCQlGb3JtX3BnX3Bv bGljeSBwb2xGb3JtOworCQkJCVJlbGF0aW9uCXBnX3BvbGljeTsKKwkJCQlTY2FuS2V5RGF0YSBr ZXk7CisJCQkJU3lzU2NhbkRlc2Mgc2NhbjsKKworCQkJCXBnX3BvbGljeSA9IHJlbGF0aW9uX29w ZW4oUG9saWN5UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlTY2FuS2V5SW5pdCgm a2V5LCBBbnVtX3BnX3BvbGljeV9vaWQsCisJCQkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBG X09JREVRLAorCQkJCQkJCU9iamVjdElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJ CXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfcG9saWN5LCBQb2xpY3lPaWRJbmRleElkLCB0 cnVlLAorCQkJCQkJCQkJCSAgTlVMTCwgMSwgJmtleSk7CisJCQkJcG9sVHVwID0gc3lzdGFibGVf Z2V0bmV4dChzY2FuKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocG9sVHVwKSkKKwkJCQkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHBvbGljeSB3aXRoIE9JRCAldSIs CisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcG9sRm9ybSA9IChGb3JtX3BnX3BvbGlj eSkgR0VUU1RSVUNUKHBvbFR1cCk7CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg UE9MSUNZICV7aWZfZXhpc3RzfXMgJXtwb2xpY3luYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFN RSBUTyAle25ld25hbWV9SSIsIDQsCisJCQkJCQkJCQkgImlmX2V4aXN0cyIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIsCisJCQkJ CQkJCQkgInBvbGljeW5hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIG5vZGUtPnN1Ym5h bWUsCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkJCSBwb2xGb3JtLT5wb2xyZWxpZCksCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCQkJIG5vZGUtPm5ld25hbWUpOworCQkJCXN5c3RhYmxlX2VuZHNjYW4oc2Nh bik7CisJCQkJcmVsYXRpb25fY2xvc2UocGdfcG9saWN5LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJ fQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfQVRUUklCVVRFOgorCQljYXNlIE9CSkVDVF9D T0xVTU46CisJCQlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5vYmplY3RJZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwkJCXNjaGVtYUlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRp b24pOworCisJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQorCQkJ CXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCBSRU5BTUUgQVRU UklCVVRFICV7Y29sbmFtZX1JIiwgMiwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJ CQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpLAorCQkJCQkJCQkJICJjb2xuYW1l IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSk7CisJCQllbHNlCisJCQl7CisJCQkJcmV0 ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zIiwgMSwKKwkJCQkJCQkJCSAib2Jq dHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+ cmVsYXRpb25UeXBlLCBmYWxzZSkpOworCisJCQkJLyogQ29tcG9zaXRlIHR5cGVzIGRvIG5vdCBz dXBwb3J0IElGIEVYSVNUUyAqLworCQkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9D T0xVTU4pCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7aWZfZXhpc3RzfXMiLAor CQkJCQkJCQkJCSAiaWZfZXhpc3RzIiwKKwkJCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJ RiBFWElTVFMiIDogIiIpOworCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpZGVu dGl0eX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJ CQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSk7CisJCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QocmV0LCAiUkVOQU1FIENPTFVNTiAle2NvbG5hbWV9SSIsCisJCQkJCQkJCQkg ImNvbG5hbWUiLCBub2RlLT5zdWJuYW1lKTsKKwkJCX0KKworCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QocmV0LCAiVE8gJXtuZXduYW1lfUkiLCAibmV3bmFtZSIsCisJCQkJCQkJCSBub2RlLT5uZXdu YW1lKTsKKworCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0FUVFJJQlVURSkKKwkJ CQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2Nhc2NhZGV9cyIsCisJCQkJCQkJCQkgbmV3 X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJCQkJCQkJCSJwcmVzZW50IiwgT2JqVHlw ZUJvb2wsCisJCQkJCQkJCQkJCQkJbm9kZS0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKSk7CisK KwkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJYnJlYWs7 CisKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJCWNhc2UgT0JKRUNUX1JPVVRJTkU6CisJCQl7 CisJCQkJY2hhcgkgICAqaWRlbnQ7CisJCQkJSGVhcFR1cGxlCXByb2N0dXA7CisJCQkJRm9ybV9w Z19wcm9jIHByb2Nmb3JtOworCQkJCUxpc3QJICAgKmlkZW50aXR5OworCisJCQkJQXNzZXJ0KElz QShub2RlLT5vYmplY3QsIE9iamVjdFdpdGhBcmdzKSk7CisJCQkJaWRlbnRpdHkgPSAoKE9iamVj dFdpdGhBcmdzICopIG5vZGUtPm9iamVjdCktPm9iam5hbWU7CisKKwkJCQlwcm9jdHVwID0gU2Vh cmNoU3lzQ2FjaGUxKFBST0NPSUQsCisJCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGFkZHJl c3Mub2JqZWN0SWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY3R1cCkpCisJCQkJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgd2l0aCBPSUQg JXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXByb2Nmb3JtID0gKEZvcm1fcGdf cHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCisJCQkJLyogWFhYIGRvZXMgdGhpcyB3b3JrIGZv ciBvcmRlcmVkLXNldCBhZ2dyZWdhdGVzPyAqLworCQkJCWlkZW50ID0gcHNwcmludGYoIiVzJXMi LAorCQkJCQkJCQkgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1l KHByb2Nmb3JtLT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJCQkJc3RyVmFsKGxsYXN0KGlk ZW50aXR5KSkpLAorCQkJCQkJCQkgZm9ybWF0X3Byb2NlZHVyZV9hcmdzKGFkZHJlc3Mub2JqZWN0 SWQsIHRydWUpKTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9 cyAle2lkZW50aXR5fXMgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJCSAib2Jq dHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+ cmVuYW1lVHlwZSwgZmFsc2UpLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcs IGlkZW50LAorCQkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFt ZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUocHJvY3R1cCk7CisJCQl9CisJCQlicmVhazsKKwor CQljYXNlIE9CSkVDVF9PUENMQVNTOgorCQkJeworCQkJCUhlYXBUdXBsZQlvcGNUdXA7CisJCQkJ Rm9ybV9wZ19vcGNsYXNzIG9wY0Zvcm07CisJCQkJTGlzdAkgICAqb2xkbmFtZXM7CisJCQkJY2hh cgkgICAqc2NoZW1hbmFtZTsKKwkJCQljaGFyCSAgICpvcGNuYW1lOworCisJCQkJb3BjVHVwID0g U2VhcmNoU3lzQ2FjaGUxKENMQU9JRCwgT2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElk KSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wY1R1cCkpCisJCQkJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGNsYXNzIHdpdGggT0lEICV1IiwKKwkJCQkJCSBh ZGRyZXNzLm9iamVjdElkKTsKKworCQkJCW9wY0Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRT VFJVQ1Qob3BjVHVwKTsKKworCQkJCW9sZG5hbWVzID0gbGlzdF9jb3B5X3RhaWwoKExpc3QgKikg bm9kZS0+b2JqZWN0LCAxKTsKKworCQkJCS8qIERlY29uc3RydWN0IHRoZSBuYW1lIGxpc3QgKi8K KwkJCQlEZWNvbnN0cnVjdFF1YWxpZmllZE5hbWUob2xkbmFtZXMsICZzY2hlbWFuYW1lLCAmb3Bj bmFtZSk7CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtp ZGVudGl0eX1EIFVTSU5HICV7aW5kZXhfbWV0aG9kfXMgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwg NCwKKwkJCQkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyaW5n aWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSwgZmFsc2UpLAorCQkJCQkJCQkJICJpZGVudGl0 eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9w Y0Zvcm0tPm9wY25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCSAgb3BjbmFtZSksCisJCQkJCQkJ CQkgImluZGV4X21ldGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgZ2V0X2FtX25hbWUo b3BjRm9ybS0+b3BjbWV0aG9kKSwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcs IG5vZGUtPm5ld25hbWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKG9wY1R1cCk7CisJCQl9CisJ CQlicmVhazsKKworCQljYXNlIE9CSkVDVF9PUEZBTUlMWToKKwkJCXsKKwkJCQlIZWFwVHVwbGUJ b3BmVHVwOworCQkJCUhlYXBUdXBsZQlhbVR1cDsKKwkJCQlGb3JtX3BnX29wZmFtaWx5IG9wZkZv cm07CisJCQkJRm9ybV9wZ19hbQlhbUZvcm07CisJCQkJTGlzdAkgICAqb2xkbmFtZXM7CisJCQkJ Y2hhcgkgICAqc2NoZW1hbmFtZTsKKwkJCQljaGFyCSAgICpvcGZuYW1lOworCisJCQkJb3BmVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRk cmVzcy5vYmplY3RJZCk7CisJCQkJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJV Q1Qob3BmVHVwKTsKKworCQkJCWFtVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJ ZEdldERhdHVtKG9wZkZvcm0tPm9wZm1ldGhvZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxp ZChhbVR1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nl c3MgbWV0aG9kIHdpdGggT0lEICV1IiwKKwkJCQkJCSBvcGZGb3JtLT5vcGZtZXRob2QpOworCisJ CQkJYW1Gb3JtID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwkJCQlvbGRuYW1l cyA9IGxpc3RfY29weV90YWlsKChMaXN0ICopIG5vZGUtPm9iamVjdCwgMSk7CisKKwkJCQkvKiBE ZWNvbnN0cnVjdCB0aGUgbmFtZSBsaXN0ICovCisJCQkJRGVjb25zdHJ1Y3RRdWFsaWZpZWROYW1l KG9sZG5hbWVzLCAmc2NoZW1hbmFtZSwgJm9wZm5hbWUpOworCisJCQkJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCBVU0lORyAle2luZGV4X21ldGhv ZH1zIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDQsCisJCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUs IGZhbHNlKSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkJCQkgIG9wZm5hbWUpLAorCQkJCQkJCQkJICJpbmRleF9tZXRob2QiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCQkJIE5hbWVTdHIoYW1Gb3JtLT5hbW5hbWUpLAorCQkJCQkJCQkJICJuZXdu YW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2Fj aGUoYW1UdXApOworCQkJCVJlbGVhc2VTeXNDYWNoZShvcGZUdXApOworCQkJfQorCQkJYnJlYWs7 CisKKwkJY2FzZSBPQkpFQ1RfU0NIRU1BOgorCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVS IFNDSEVNQSAle2lkZW50aXR5fUkgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMiwKKwkJCQkJCQkJ ICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJCSAibmV3 bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBPQkpFQ1RfRkRXOgorCQljYXNlIE9CSkVDVF9MQU5HVUFHRToKKwkJY2FzZSBPQkpFQ1RfRk9S RUlHTl9TRVJWRVI6CisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMg JXtpZGVudGl0eX1zIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDMsCisJCQkJCQkJCSAib2JqdHlw ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5h bWVUeXBlLCBmYWxzZSksCisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJCQkgc3RyVmFsKGNhc3ROb2RlKFN0cmluZywgbm9kZS0+b2JqZWN0KSksCisJCQkJCQkJCSAi bmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBPQkpFQ1RfUlVMRToKKwkJCXsKKwkJCQlIZWFwVHVwbGUJcmV3clR1cDsKKwkJCQlGb3Jt X3BnX3Jld3JpdGUgcmV3ckZvcm07CisJCQkJUmVsYXRpb24JcGdfcmV3cml0ZTsKKworCQkJCXBn X3Jld3JpdGUgPSByZWxhdGlvbl9vcGVuKFJld3JpdGVSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxv Y2spOworCQkJCXJld3JUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX3Jld3JpdGUs IEFudW1fcGdfcmV3cml0ZV9vaWQsIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXJld3JGb3JtID0g KEZvcm1fcGdfcmV3cml0ZSkgR0VUU1RSVUNUKHJld3JUdXApOworCisJCQkJcmV0ID0gbmV3X29i anRyZWVfVkEoIkFMVEVSIFJVTEUgJXtydWxlbmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUg VE8gJXtuZXduYW1lfUkiLCAzLAorCQkJCQkJCQkJICJydWxlbmFtZSIsIE9ialR5cGVTdHJpbmcs IG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkJCSByZXdyRm9ybS0+ZXZfY2xhc3MpLAorCQkJCQkJCQkJICJuZXduYW1l IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQkJcmVsYXRpb25fY2xvc2UocGdf cmV3cml0ZSwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JK RUNUX1RSSUdHRVI6CisJCQl7CisJCQkJSGVhcFR1cGxlCXRyaWdUdXA7CisJCQkJRm9ybV9wZ190 cmlnZ2VyIHRyaWdGb3JtOworCQkJCVJlbGF0aW9uCXBnX3RyaWdnZXI7CisKKwkJCQlwZ190cmln Z2VyID0gcmVsYXRpb25fb3BlbihUcmlnZ2VyUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwkJCQl0cmlnVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ190cmlnZ2VyLCBnZXRf b2JqZWN0X2F0dG51bV9vaWQoYWRkcmVzcy5jbGFzc0lkKSwgYWRkcmVzcy5vYmplY3RJZCk7CisJ CQkJdHJpZ0Zvcm0gPSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJpZ1R1cCk7CisKKwkJ CQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVFJJR0dFUiAle3RyaWdnZXJuYW1lfUkgT04g JXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDMsCisJCQkJCQkJCQkgInRyaWdn ZXJuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJCSAiaWRlbnRp dHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHRyaWdGb3JtLT50Z3JlbGlk KSwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOwor CisJCQkJcmVsYXRpb25fY2xvc2UocGdfdHJpZ2dlciwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0K KwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoKKwkJY2FzZSBPQkpFQ1RfU1RB VElTVElDX0VYVDoKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lP TjoKKwkJY2FzZSBPQkpFQ1RfRE9NQUlOOgorCQljYXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJ CWNhc2UgT0JKRUNUX1RTUEFSU0VSOgorCQljYXNlIE9CSkVDVF9UU1RFTVBMQVRFOgorCQljYXNl IE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQl7CisJCQkJSGVhcFR1cGxlCW9ialR1cDsKKwkJ CQlSZWxhdGlvbgljYXRhbG9nOworCQkJCURhdHVtCQlvYmpuc3A7CisJCQkJYm9vbAkJaXNudWxs OworCQkJCUF0dHJOdW1iZXIJQW51bV9uYW1lc3BhY2U7CisJCQkJTGlzdAkgICAqaWRlbnRpdHkg PSBjYXN0Tm9kZShMaXN0LCBub2RlLT5vYmplY3QpOworCisJCQkJLyogT2J0YWluIG9iamVjdCB0 dXBsZSAqLworCQkJCWNhdGFsb2cgPSByZWxhdGlvbl9vcGVuKGFkZHJlc3MuY2xhc3NJZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwkJCQlvYmpUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNh dGFsb2csIGdldF9vYmplY3RfYXR0bnVtX29pZChhZGRyZXNzLmNsYXNzSWQpLCBhZGRyZXNzLm9i amVjdElkKTsKKworCQkJCS8qIE9idGFpbiBuYW1lc3BhY2UgKi8KKwkJCQlBbnVtX25hbWVzcGFj ZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWVzcGFjZShhZGRyZXNzLmNsYXNzSWQpOworCQkJCW9i am5zcCA9IGhlYXBfZ2V0YXR0cihvYmpUdXAsIEFudW1fbmFtZXNwYWNlLAorCQkJCQkJCQkJICBS ZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLCAmaXNudWxsKTsKKwkJCQlpZiAoaXNudWxsKQorCQkJ CQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxMIG5hbWVzcGFjZSIpOworCisJCQkJcmV0ID0gbmV3 X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtu ZXduYW1lfUkiLCAzLAorCQkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUoRGF0dW1HZXRPYmplY3RJZChvYmpuc3ApLAorCQkJCQkJCQkJCQkJCQkJICBzdHJW YWwobGxhc3QoaWRlbnRpdHkpKSksCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5n LCBub2RlLT5uZXduYW1lKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFy ZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1 bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIsIG5vZGUtPnJlbmFtZVR5cGUpOworCX0KKworCXJl dHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAo QUxURVIgLi4uIERFUEVORFMgT04gLi4uKS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxU RVIgSU5ERVggJXtpZGVudGl0eX1EICV7bm99cyBERVBFTkRTIE9OIEVYVEVOU0lPTiAle25ld25h bWV9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRGVwZW5kU3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlck9iamVjdERlcGVuZHNTdG10ICpu b2RlID0gKEFsdGVyT2JqZWN0RGVwZW5kc1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAg KnJldCA9IE5VTEw7CisKKwlpZiAobm9kZS0+b2JqZWN0VHlwZSA9PSBPQkpFQ1RfSU5ERVgpCisJ eworCQlPYmpUcmVlICAgICpxdWFsaWZpZWQ7CisJCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVsYXRp b25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQlxdWFsaWZpZWQgPSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJ CQkJCQkJCQkgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpOworCQlyZWxhdGlvbl9jbG9zZShyZWxh dGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg SU5ERVggJXtpZGVudGl0eX1EICV7bm99cyBERVBFTkRTIE9OIEVYVEVOU0lPTiAle25ld25hbWV9 SSIsIDMsCisJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsIHF1YWxpZmllZCwKKwkJ CQkJCQkgIm5vIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgbm9kZS0+cmVtb3ZlID8gIk5PIiA6 ICIiLAorCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIHN0clZhbChub2RlLT5leHRu YW1lKSk7CisJfQorCWVsc2UKKwkJZWxvZyhMT0csICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGlu IGRlcGFyc2UgY29tbWFuZDogJWQiLAorCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQ0FDSEUgb3B0 aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgQ0FDSEUgJXt2YWx1ZX1zCisgKiBP UgorICogQ0FDSEUgJXt2YWx1ZX0KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFy c2VfU2VxX0NhY2hlKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkK K3sKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsK KworCWZtdCA9IGFsdGVyX3RhYmxlID8gIlNFVCBDQUNIRSAle3ZhbHVlfXMiIDogIkNBQ0hFICV7 dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNl cWNhY2hlKTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJjYWNoZSIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywg dG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICog RGVwYXJzZSB0aGUgc2VxdWVuY2UgQ1lDTEUgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 CisgKiBTRVQgJXtub31zIENZQ0xFCisgKiBPUgorICogJXtub31zIENZQ0xFCisgKi8KK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9DeWNsZShGb3JtX3BnX3NlcXVlbmNlIHNl cWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAg KmZtdDsKKworCWZtdCA9IGFsdGVyX3RhYmxlID8gIlNFVCAle25vfXMgQ1lDTEUiIDogIiV7bm99 cyBDWUNMRSI7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJjeWNsZSIsCisJCQkJCQkgIm5vIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCSBzZXFkYXRhLT5zZXFjeWNsZSA/ICIiIDogIk5PIik7CisKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIElOQ1JF TUVOVCBCWSBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBJTkNSRU1FTlQg QlkgJXt2YWx1ZX1zCisgKiBPUgorICogSU5DUkVNRU5UIEJZICV7dmFsdWV9cworICovCitzdGF0 aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoRm9ybV9wZ19zZXF1 ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKnJldDsKKwlj aGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJZm10ID0gYWx0ZXJfdGFibGUgPyAi U0VUIElOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiIDogIklOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiOwor CisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFpbmNyZW1lbnQp OworCXJldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgInNlcWluY3JlbWVudCIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywg dG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICog RGVwYXJzZSB0aGUgc2VxdWVuY2UgTUFYVkFMVUUgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBTRVQgTUFYVkFMVUUgJXt2YWx1ZX1zCisgKiBPUgorICogTUFYVkFMVUUgJXt2YWx1 ZX1zCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9NYXh2YWx1ZShG b3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAg ICAqcmV0OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRl cl90YWJsZSA/ICJTRVQgTUFYVkFMVUUgJXt2YWx1ZX1zIiA6ICJNQVhWQUxVRSAle3ZhbHVlfXMi OworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFtYXgpOwor CXJldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgIm1heHZhbHVlIiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIp OworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNl IHRoZSBzZXF1ZW5jZSBNSU5WQUxVRSBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IFNFVCBNSU5WQUxVRSAle3ZhbHVlfXMKKyAqIE9SCisgKiBNSU5WQUxVRSAle3ZhbHVlfXMKKyAq Lworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01pbnZhbHVlKEZvcm1fcGdf c2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7 CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVyX3RhYmxl ID8gIlNFVCBNSU5WQUxVRSAle3ZhbHVlfXMiIDogIk1JTlZBTFVFICV7dmFsdWV9cyI7CisKKwl0 bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1pbik7CisJcmV0ID0g bmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi bWludmFsdWUiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwly ZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNl cXVlbmNlIE9XTkVEIEJZIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIE9XTkVE IEJZICV7b3duZXJ9RAorICovCitzdGF0aWMgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9Pd25lZEJ5 KE9pZCBzZXF1ZW5jZUlkLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKnJldCA9 IE5VTEw7CisJUmVsYXRpb24JZGVwUmVsOworCVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURh dGEga2V5c1szXTsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwlkZXBSZWwgPSB0YWJsZV9vcGVuKERl cGVuZFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmtleXNbMF0s CisJCQkJQW51bV9wZ19kZXBlbmRfY2xhc3NpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIs IEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvblJlbGF0aW9uSWQpKTsKKwlT Y2FuS2V5SW5pdCgma2V5c1sxXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9vYmppZCwKKwkJCQlCVEVx dWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShzZXF1ZW5j ZUlkKSk7CisJU2NhbktleUluaXQoJmtleXNbMl0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2Jqc3Vi aWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX0lOVDRFUSwKKwkJCQlJbnQzMkdldERh dHVtKDApKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oZGVwUmVsLCBEZXBlbmREZXBl bmRlckluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAzLCBrZXlzKTsKKwl3aGlsZSAoSGVh cFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJT2lk CQkJb3duZXJJZDsKKwkJRm9ybV9wZ19kZXBlbmQgZGVwZm9ybTsKKwkJT2JqVHJlZSAgICAqdG1w X29iajsKKwkJY2hhcgkgICAqY29sbmFtZTsKKworCQlkZXBmb3JtID0gKEZvcm1fcGdfZGVwZW5k KSBHRVRTVFJVQ1QodHVwbGUpOworCisJCS8qIE9ubHkgY29uc2lkZXIgQVVUTyBkZXBlbmRlbmNp ZXMgb24gcGdfY2xhc3MgKi8KKwkJaWYgKGRlcGZvcm0tPmRlcHR5cGUgIT0gREVQRU5ERU5DWV9B VVRPKQorCQkJY29udGludWU7CisJCWlmIChkZXBmb3JtLT5yZWZjbGFzc2lkICE9IFJlbGF0aW9u UmVsYXRpb25JZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVwZm9ybS0+cmVmb2Jqc3ViaWQgPD0g MCkKKwkJCWNvbnRpbnVlOworCisJCW93bmVySWQgPSBkZXBmb3JtLT5yZWZvYmppZDsKKwkJY29s bmFtZSA9IGdldF9hdHRuYW1lKG93bmVySWQsIGRlcGZvcm0tPnJlZm9ianN1YmlkLCBmYWxzZSk7 CisJCWlmIChjb2xuYW1lID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQl0bXBfb2JqID0gbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwgb3duZXJJZCk7CisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICJhdHRybmFtZSIsICJhdHRybmFtZSIsIGNv bG5hbWUpOworCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiT1dORUQgQlkgJXtvd25lcn1EIiwgMiwK KwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJvd25lZCIsCisJCQkJCQkJICJvd25l ciIsIE9ialR5cGVPYmplY3QsIHRtcF9vYmopOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nh bik7CisJcmVsYXRpb25fY2xvc2UoZGVwUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyoKKwkg KiBJZiB0aGVyZSdzIG5vIG93bmVyIGNvbHVtbiwgZW1pdCBhbiBlbXB0eSBPV05FRCBCWSBlbGVt ZW50LCBzZXQgdXAgc28KKwkgKiB0aGF0IGl0IHdvbid0IHByaW50IGFueXRoaW5nLgorCSAqLwor CWlmICghcmV0KQorCQkvKiBYWFggdGhpcyBzaG91bGRuJ3QgaGFwcGVuIC4uLiAqLworCQlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiT1dORUQgQlkgJXtvd25lcn1EIiwgMywKKwkJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJvd25lZCIsCisJCQkJCQkJICJvd25lciIsIE9ialR5cGVOdWxs LAorCQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3 X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFJF U1RBUlQgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRVNUQVJUICV7dmFsdWV9 cworICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfUmVzdGFydChGb3Jt X3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkg ICAqdG1wc3RyOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5s YXN0X3ZhbHVlKTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiUkVTVEFSVCAle3ZhbHVlfXMiLCAy LAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVzdGFydCIsCisJCQkJCQkgInZh bHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVj dChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQVMgb3B0aW9uLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBUyAle2lkZW50aXR5fUQKKyAqLworc3RhdGljIGlubGlu ZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0FzKERlZkVsZW0gKmVsZW0pCit7CisJT2JqVHJlZSAg ICAqcmV0OworCVR5cGUJCWxpa2VUeXBlOworCUZvcm1fcGdfdHlwZSBsaWtlRm9ybTsKKworCWxp a2VUeXBlID0gdHlwZW5hbWVUeXBlKE5VTEwsIGRlZkdldFR5cGVOYW1lKGVsZW0pLCBOVUxMKTsK KwlsaWtlRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChsaWtlVHlwZSk7CisKKwlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQVMgJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShsaWtlRm9y bS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKGxpa2VGb3JtLT50eXBuYW1l KSkpOworCVJlbGVhc2VTeXNDYWNoZShsaWtlVHlwZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9v YmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFNUQVJUIFdJVEgg b3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgU1RBUlQgV0lUSCAle3ZhbHVl fXMKKyAqIE9SCisgKiBTVEFSVCBXSVRIICV7dmFsdWV9cworICovCitzdGF0aWMgaW5saW5lIE9i akVsZW0gKgorZGVwYXJzZV9TZXFfU3RhcnR3aXRoKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwg Ym9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAqdG1wc3Ry OworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVyX3RhYmxlID8gIlNFVCBTVEFSVCBXSVRI ICV7dmFsdWV9cyIgOiAiU1RBUlQgV0lUSCAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmlu dGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFzdGFydCk7CisJcmV0ID0gbmV3X29ianRyZWVf VkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RhcnQiLAorCQkJ CQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVj dF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgU1RPUkFHRSBvcHRp b24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNUT1JBR0U9JXt2YWx1ZX1zCisgKi8KK3N0 YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU3RvcmFnZShGb3JtX3BnX3R5cGUg dHlwRm9ybSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlNU T1JBR0UgPSAle3ZhbHVlfXMiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi c3RvcmFnZSIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgZ2V0X3R5cGVfc3RvcmFn ZSh0eXBGb3JtLT50eXBzdG9yYWdlKSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0 KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgUkVDRUlWRSBvcHRpb24uCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIFJFQ0VJVkU9JXtwcm9jZWR1cmV9RAorICovCitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1JlY2VpdmUoRm9ybV9wZ190eXBlIHR5cEZvcm0p Cit7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlJFQ0VJVkU9 IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlY2VpdmUiKTsKKwlpZiAo T2lkSXNWYWxpZCh0eXBGb3JtLT50eXByZWNlaXZlKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwcmVjZWl2 ZSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgU0VORCBvcHRp b24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFTkQ9JXtwcm9jZWR1cmV9RAorICovCitz dGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1NlbmQoRm9ybV9wZ190eXBlIHR5 cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlNF TkQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNlbmQiKTsKKwlpZiAo T2lkSXNWYWxpZCh0eXBGb3JtLT50eXBzZW5kKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0 LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQ cm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwc2VuZCkpOwor CWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9v YmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgdHlwbW9kX2luIG9wdGlv bi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogVFlQTU9EX0lOPSV7cHJvY2VkdXJlfUQKKyAq Lworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9UeXBtb2RfSW4oRm9ybV9w Z190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRy ZWVfVkEoIlRZUE1PRF9JTj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi dHlwbW9kX2luIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kaW4pKQorCQlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0 eXBGb3JtLT50eXBtb2RpbikpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisK KwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhl IHR5cGUgdHlwbW9kX291dCBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFRZUE1P RF9PVVQ9JXtwcm9jZWR1cmV9RAorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJz ZV9UeXBlX1R5cG1vZF9PdXQoRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAq cmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9PVVQ9IiwgMSwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9vdXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0 eXBGb3JtLT50eXBtb2RvdXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3Byb2Nl ZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RvdXQpKTsKKwllbHNlCisJ CWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJl dCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIENSRUFURSBUQUJMRSBBUyBjb21tYW5kLgorICoKKyAq IGRlcGFyc2VfQ3JlYXRlU3RtdCBkbyB0aGUgYWN0dWFsIHdvcmsgYXMgd2UgZGVwYXJzZSB0aGUg ZmluYWwgQ3JlYXRlU3RtdCBmb3IKKyAqIENSRUFURSBUQUJMRSBBUyBjb21tYW5kLgorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KENvbGxlY3RlZENvbW1h bmQgKmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpwYXJzZXRyZWU7CisKKwlB c3NlcnQoY21kLT50eXBlID09IFNDVF9DcmVhdGVUYWJsZUFzKTsKKworCXBhcnNldHJlZSA9IGNt ZC0+ZC5jdGFzLnJlYWxfY3JlYXRlOworCW9iamVjdElkID0gY21kLT5kLmN0YXMuYWRkcmVzcy5v YmplY3RJZDsKKworCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJl ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIGFuYWx5emUgb3B0aW9uLgorICoKKyAq IFZlcmJvc2Ugc3ludGF4CisgKiBBTkFMWVpFPSV7cHJvY2VkdXJlfUQKKyAqLworc3RhdGljIGlu bGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9BbmFseXplKEZvcm1fcGdfdHlwZSB0eXBGb3Jt KQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTkFMWVpF PSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbmFseXplIik7CisJaWYg KE9pZElzVmFsaWQodHlwRm9ybS0+dHlwYW5hbHl6ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGFuYWx5 emUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJuIG5ld19v YmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHN1YnNjcmlw dCBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNVQlNDUklQVD0le3Byb2NlZHVy ZX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU3Vic2NyaXB0 KEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5l d19vYmp0cmVlX1ZBKCJTVUJTQ1JJUFQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInN1YnNjcmlwdCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHN1YnNjcmlw dCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJIHR5cEZvcm0tPnR5cHN1YnNjcmlwdCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9w cmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoK KyAqIERlcGFyc2UgYSBSdWxlU3RtdCAoQ1JFQVRFIFJVTEUpLgorICoKKyAqIEdpdmVuIGEgcnVs ZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRy ZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgcnVsZSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBDUkVBVEUgUlVMRSAle29yX3JlcGxhY2V9cyAle2lkZW50aXR5fUkgQVMgT04gJXtl dmVudH1zIFRPICV7dGFibGV9RAorICogJXt3aGVyZV9jbGF1c2V9cyBETyAle2luc3RlYWR9cyAl e2FjdGlvbnM6LCB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1J1bGVTdG10KE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCVJ1bGVTdG10ICAgKm5vZGUgPSAoUnVs ZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7 CisJUmVsYXRpb24JcGdfcmV3cml0ZTsKKwlGb3JtX3BnX3Jld3JpdGUgcmV3ckZvcm07CisJSGVh cFR1cGxlCXJld3JUdXA7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXk7CisJ RGF0dW0JCWV2X3F1YWw7CisJRGF0dW0JCWV2X2FjdGlvbnM7CisJYm9vbAkJaXNudWxsOworCWNo YXIJICAgKnF1YWw7CisJTGlzdAkgICAqYWN0aW9uczsKKwlMaXN0CSAgICpsaXN0ID0gTklMOwor CUxpc3RDZWxsICAgKmNlbGw7CisJY2hhcgkgICAqZXZlbnRfc3RyOworCisJcGdfcmV3cml0ZSA9 IHRhYmxlX29wZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2Nhbktl eUluaXQoJmtleSwKKwkJCQlBbnVtX3BnX3Jld3JpdGVfb2lkLAorCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwKKwkJCQlGX09JREVRLCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisKKwlz Y2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3Jld3JpdGUsIFJld3JpdGVPaWRJbmRleElkLCB0 cnVlLAorCQkJCQkJCSAgTlVMTCwgMSwgJmtleSk7CisJcmV3clR1cCA9IHN5c3RhYmxlX2dldG5l eHQoc2Nhbik7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJld3JUdXApKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmV3cml0ZSBydWxlIHdpdGggT0lEICV1IiwKKwkJ CSBvYmplY3RJZCk7CisKKwlyZXdyRm9ybSA9IChGb3JtX3BnX3Jld3JpdGUpIEdFVFNUUlVDVChy ZXdyVHVwKTsKKworCWV2ZW50X3N0ciA9IG5vZGUtPmV2ZW50ID09IENNRF9TRUxFQ1QgPyAiU0VM RUNUIiA6CisJCW5vZGUtPmV2ZW50ID09IENNRF9VUERBVEUgPyAiVVBEQVRFIiA6CisJCW5vZGUt PmV2ZW50ID09IENNRF9ERUxFVEUgPyAiREVMRVRFIiA6CisJCW5vZGUtPmV2ZW50ID09IENNRF9J TlNFUlQgPyAiSU5TRVJUIiA6IE5VTEw7CisJQXNzZXJ0KGV2ZW50X3N0ciAhPSBOVUxMKTsKKwor CWV2X3F1YWwgPSBoZWFwX2dldGF0dHIocmV3clR1cCwgQW51bV9wZ19yZXdyaXRlX2V2X3F1YWws CisJCQkJCQkgICBSZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAmaXNudWxsKTsKKwlldl9h Y3Rpb25zID0gaGVhcF9nZXRhdHRyKHJld3JUdXAsIEFudW1fcGdfcmV3cml0ZV9ldl9hY3Rpb24s CisJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAmaXNudWxsKTsKKworCXBn X2dldF9ydWxlZGVmX2RldGFpbGVkKGV2X3F1YWwsIGV2X2FjdGlvbnMsICZxdWFsLCAmYWN0aW9u cyk7CisKKwl0bXAgPSBuZXdfb2JqdHJlZSgiIik7CisJaWYgKHF1YWwpCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcCwgIldIRVJFICV7Y2xhdXNlfXMiLCAiY2xhdXNlIiwgcXVhbCk7CisJZWxz ZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcCwgIldIRVJFICV7Y2xhdXNlfXMiKTsKKwkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJfQorCisJZm9yZWFjaChjZWxsLCBhY3Rpb25zKQor CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChsZmlyc3QoY2VsbCkpKTsK KworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgUlVMRSAle29yX3JlcGxhY2V9cyAle2lk ZW50aXR5fUkgQVMgT04gJXtldmVudH1zIFRPICV7dGFibGV9RCAle3doZXJlX2NsYXVzZX1zIERP ICV7aW5zdGVhZH1zICV7YWN0aW9uczosIH1zIiwgNywKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiLAor CQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnJ1bGVuYW1lLAorCQkJCQkJ ICJldmVudCIsIE9ialR5cGVTdHJpbmcsIGV2ZW50X3N0ciwKKwkJCQkJCSAidGFibGUiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHJld3JGb3JtLT5ldl9jbGFzcyksCisJCQkJCQkgIndo ZXJlX2NsYXVzZSIsIE9ialR5cGVPYmplY3QsIHRtcCwKKwkJCQkJCSAiaW5zdGVhZCIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aW5zdGVhZCA/ICJJTlNURUFEIiA6ICJBTFNPIiwKKwkJ CQkJCSAiYWN0aW9ucyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwlzeXN0YWJsZV9lbmRzY2Fu KHNjYW4pOworCXRhYmxlX2Nsb3NlKHBnX3Jld3JpdGUsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVRyYW5zZm9ybVN0bXQgKENS RUFURSBUUkFOU0ZPUk0pLgorICoKKyAqIEdpdmVuIGEgdHJhbnNmb3JtIE9JRCBhbmQgdGhlIHBh cnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50 aW5nIHRoZSBDUkVBVEUgVFJBTlNGT1JNIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIENSRUFURSAle29yX3JlcGxhY2V9cyBUUkFOU0ZPUk0gRk9SICV7dHlwZW5hbWV9RCBMQU5H VUFHRSAle2xhbmd1YWdlfUkKKyAqICggRlJPTSBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVy ZX1zLCBUTyBTUUwgV0lUSCBGVU5DVElPTgorICogJXtzaWduYXR1cmVfdG9mfXMgKQorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRyYW5zZm9ybVN0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVHJhbnNmb3JtU3RtdCAqbm9kZSA9IChDcmVh dGVUcmFuc2Zvcm1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJl ZSAgICAqc2lnbmF0dXJlOworCUhlYXBUdXBsZQl0cmZUdXA7CisJSGVhcFR1cGxlCWxhbmdUdXA7 CisJSGVhcFR1cGxlCXByb2NUdXA7CisJRm9ybV9wZ190cmFuc2Zvcm0gdHJmRm9ybTsKKwlGb3Jt X3BnX2xhbmd1YWdlIGxhbmdGb3JtOworCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlpbnQJCQlp OworCisJLyogR2V0IHRoZSBwZ190cmFuc2Zvcm0gdHVwbGUgKi8KKwl0cmZUdXAgPSBTZWFyY2hT eXNDYWNoZTEoVFJGT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHRyZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciB0cmFuc2Zvcm0gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0cmZGb3JtID0g KEZvcm1fcGdfdHJhbnNmb3JtKSBHRVRTVFJVQ1QodHJmVHVwKTsKKworCS8qIEdldCB0aGUgY29y cmVzcG9uZGluZyBwZ19sYW5ndWFnZSB0dXBsZSAqLworCWxhbmdUdXAgPSBTZWFyY2hTeXNDYWNo ZTEoTEFOR09JRCwgdHJmRm9ybS0+dHJmbGFuZyk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxh bmdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgbGFuZ3VhZ2Ug d2l0aCBPSUQgJXUiLAorCQkJIHRyZkZvcm0tPnRyZmxhbmcpOworCWxhbmdGb3JtID0gKEZvcm1f cGdfbGFuZ3VhZ2UpIEdFVFNUUlVDVChsYW5nVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJDUkVBVEUgJXtvcl9yZXBsYWNlfXMgVFJBTlNGT1JNIEZPUiAle3R5cGVuYW1lfUQgTEFOR1VB R0UgJXtsYW5ndWFnZX1JIiwgMywKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiLAorCQkJCQkJICJ0eXBl bmFtZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0cmZGb3JtLT50cmZ0eXBlKSwKKwkJCQkJ CSAibGFuZ3VhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIE5hbWVTdHIobGFuZ0Zvcm0tPmxh bm5hbWUpKTsKKworCS8qIERlcGFyc2UgdGhlIHRyYW5zZm9ybV9lbGVtZW50X2xpc3QgKi8KKwlp ZiAoT2lkSXNWYWxpZCh0cmZGb3JtLT50cmZmcm9tc3FsKSkKKwl7CisJCUxpc3QJICAgKnBhcmFt cyA9IE5JTDsKKworCQkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgZm9yIHRoZSBGUk9NIEZVTkNU SU9OICovCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgdHJmRm9ybS0+dHJm ZnJvbXNxbCk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkJ IHRyZkZvcm0tPnRyZmZyb21zcWwpOworCQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNU UlVDVChwcm9jVHVwKTsKKworCQkvKgorCQkgKiBDUkVBVEUgVFJBTlNGT1JNIGRvZXMgbm90IGNo YW5nZSBmdW5jdGlvbiBzaWduYXR1cmUgc28gd2UgY2FuIHVzZQorCQkgKiBjYXRhbG9nIHRvIGdl dCBpbnB1dCB0eXBlIE9pZHMuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnBy b25hcmdzOyBpKyspCisJCXsKKwkJCU9ialRyZWUgICAgKnBhcmFtX29iajsKKworCQkJcGFyYW1f b2JqID0gbmV3X29ianRyZWVfVkEoIiV7dHlwZX1UIiwgMSwKKwkJCQkJCQkJCSAgInR5cGUiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnBy b2FyZ3R5cGVzLnZhbHVlc1tpXSwgLTEpKTsKKwkJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBu ZXdfb2JqZWN0X29iamVjdChwYXJhbV9vYmopKTsKKwkJfQorCisJCXNpZ25hdHVyZSA9IG5ld19v Ymp0cmVlX1ZBKCIle2lkZW50aXR5fUQgKCV7YXJndW1lbnRzOiwgfXMpIiwgMiwKKwkJCQkJCQkJ ICAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJICAgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQlOYW1lU3Ry KHByb2NGb3JtLT5wcm9uYW1lKSksCisJCQkJCQkJCSAgICJhcmd1bWVudHMiLCBPYmpUeXBlQXJy YXksIHBhcmFtcyk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiKEZST00gU1FMIFdJ VEggRlVOQ1RJT04gJXtzaWduYXR1cmV9cyIsCisJCQkJCQkJIHNpZ25hdHVyZSk7CisJCVJlbGVh c2VTeXNDYWNoZShwcm9jVHVwKTsKKwl9CisJaWYgKE9pZElzVmFsaWQodHJmRm9ybS0+dHJmdG9z cWwpKQorCXsKKwkJTGlzdAkgICAqcGFyYW1zID0gTklMOworCisJCS8qIEFwcGVuZCBhICcsJyBp ZiB0cmZmcm9tc3FsIGlzIHByZXNlbnQsIGVsc2UgYXBwZW5kICcoJyAqLworCQlhcHBlbmRfZm9y bWF0X3N0cmluZyhyZXQsIE9pZElzVmFsaWQodHJmRm9ybS0+dHJmZnJvbXNxbCkgPyAiLCIgOiAi KCIpOworCisJCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSBmb3IgdGhlIFRPIEZVTkNUSU9OICov CisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgdHJmRm9ybS0+dHJmdG9zcWwp OworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJCSB0cmZGb3Jt LT50cmZ0b3NxbCk7CisJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NU dXApOworCisJCS8qCisJCSAqIENSRUFURSBUUkFOU0ZPUk0gZG9lcyBub3QgY2hhbmdlIGZ1bmN0 aW9uIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlCisJCSAqIGNhdGFsb2cgdG8gZ2V0IGlucHV0IHR5 cGUgT2lkcy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkr KykKKwkJeworCQkJT2JqVHJlZSAgICAqcGFyYW1fb2JqID0gbmV3X29ianRyZWUoIiIpOworCisJ CQlwYXJhbV9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXt0eXBlfVQiLCAxLAorCQkJCQkJCQkJICAi dHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl90eXBlKHBy b2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0sIC0xKSk7CisJCQlwYXJhbXMgPSBsYXBwZW5k KHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1fb2JqKSk7CisJCX0KKworCQlzaWduYXR1 cmUgPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EICgle2FyZ3VtZW50czosIH1zKSIsIDIs CisJCQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSAgIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJ CQkJTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpLAorCQkJCQkJCQkgICAiYXJndW1lbnRzIiwg T2JqVHlwZUFycmF5LCBwYXJhbXMpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIlRP IFNRTCBXSVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlX3RvZn1zIiwKKwkJCQkJCQkgc2lnbmF0dXJl KTsKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCX0KKworCWFwcGVuZF9mb3JtYXRfc3Ry aW5nKHJldCwgIikiKTsKKworCVJlbGVhc2VTeXNDYWNoZShsYW5nVHVwKTsKKwlSZWxlYXNlU3lz Q2FjaGUodHJmVHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQXBwZW5kIGEgTlVMTC1v ci1xdW90ZWQtbGl0ZXJhbCBjbGF1c2UuICBVc2VmdWwgZm9yIENPTU1FTlQgYW5kIFNFQ1VSSVRZ CisgKiBMQUJFTC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogJXtudWxsfXMgJXtsaXRlcmFs fXMKKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9saXRlcmFsX29yX251bGwoT2JqVHJlZSAqcGFy ZW50LCBjaGFyICplbGVtbmFtZSwgY2hhciAqdmFsdWUpCit7CisJT2JqVHJlZSAgICAqdG9wOwor CU9ialRyZWUgICAgKnBhcnQ7CisKKwl0b3AgPSBuZXdfb2JqdHJlZSgiIik7CisJcGFydCA9IG5l d19vYmp0cmVlX1ZBKCJOVUxMIiwgMSwKKwkJCQkJCSAgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwg IXZhbHVlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0b3AsICIle251bGx9cyIsIHBhcnQpOwor CisJcGFydCA9IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJICAicHJlc2VudCIsIE9ialR5 cGVCb29sLCB2YWx1ZSAhPSBOVUxMKTsKKworCWlmICh2YWx1ZSkKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QocGFydCwgIiV7dmFsdWV9TCIsICJ2YWx1ZSIsIHZhbHVlKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdCh0b3AsICIle2xpdGVyYWx9cyIsIHBhcnQpOworCisJYXBwZW5kX29iamVjdF9vYmpl Y3QocGFyZW50LCBlbGVtbmFtZSwgdG9wKTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDb21tZW50 U3RtdCB3aGVuIGl0IHBlcnRhaW5zIHRvIGEgY29uc3RyYWludC4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogQ09NTUVOVCBPTiBDT05TVFJBSU5UICV7aWRlbnRpdHl9cyBPTiBbRE9NQUlOXSAl e3BhcmVudG9ian1zIElTICV7Y29tbWVudH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQ29tbWVudE9uQ29uc3RyYWludFNtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlDb21tZW50U3RtdCAqbm9kZSA9IChDb21tZW50U3RtdCAqKSBwYXJzZXRyZWU7CisJT2Jq VHJlZSAgICAqcmV0OworCUhlYXBUdXBsZQljb25zdHJUdXA7CisJRm9ybV9wZ19jb25zdHJhaW50 IGNvbnN0ckZvcm07CisJT2JqZWN0QWRkcmVzcyBhZGRyOworCisJQXNzZXJ0KG5vZGUtPm9ianR5 cGUgPT0gT0JKRUNUX1RBQkNPTlNUUkFJTlQgfHwgbm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfRE9N Q09OU1RSQUlOVCk7CisKKwljb25zdHJUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBv YmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvbnN0clR1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb25zdHJhaW50IHdpdGggT0lEICV1Iiwgb2Jq ZWN0SWQpOworCWNvbnN0ckZvcm0gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QoY29u c3RyVHVwKTsKKworCWlmIChPaWRJc1ZhbGlkKGNvbnN0ckZvcm0tPmNvbnJlbGlkKSkKKwkJT2Jq ZWN0QWRkcmVzc1NldChhZGRyLCBSZWxhdGlvblJlbGF0aW9uSWQsIGNvbnN0ckZvcm0tPmNvbnJl bGlkKTsKKwllbHNlCisJCU9iamVjdEFkZHJlc3NTZXQoYWRkciwgVHlwZVJlbGF0aW9uSWQsIGNv bnN0ckZvcm0tPmNvbnR5cGlkKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDT01NRU5UIE9O IENPTlNUUkFJTlQgJXtpZGVudGl0eX1zIE9OICV7ZG9tYWlufXMgJXtwYXJlbnRvYmp9cyIsIDMs CisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgcHN0cmR1cChOYW1lU3RyKGNvbnN0 ckZvcm0tPmNvbm5hbWUpKSwKKwkJCQkJCSAiZG9tYWluIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CSAobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfRE9NQ09OU1RSQUlOVCkgPyAiRE9NQUlOIiA6ICIi LAorCQkJCQkJICJwYXJlbnRvYmoiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldE9iamVjdElk ZW50aXR5KCZhZGRyLCBmYWxzZSkpOworCisJLyogQWRkIHRoZSBjb21tZW50IGNsYXVzZSAqLwor CWFwcGVuZF9saXRlcmFsX29yX251bGwocmV0LCAiSVMgJXtjb21tZW50fXMiLCBub2RlLT5jb21t ZW50KTsKKworCVJlbGVhc2VTeXNDYWNoZShjb25zdHJUdXApOworCXJldHVybiByZXQ7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGFuIENvbW1lbnRTdG10IChDT01NRU5UIE9OIC4uLikuCisgKgorICog R2l2ZW4gdGhlIG9iamVjdCBhZGRyZXNzIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIGNvbW1lbnQgY29tbWFu ZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ09NTUVOVCBPTiAle29ianR5cGV9cyAle2lk ZW50aXR5fXMgSVMgJXtjb21tZW50fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9D b21tZW50U3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlD b21tZW50U3RtdCAqbm9kZSA9IChDb21tZW50U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAg ICAqcmV0OworCWNoYXIJICAgKmlkZW50aXR5OworCisJLyoKKwkgKiBDb25zdHJhaW50cyBhcmUg c3VmZmljaWVudGx5IGRpZmZlcmVudCB0aGF0IGl0IGlzIGVhc2llciB0byBoYW5kbGUgdGhlbQor CSAqIHNlcGFyYXRlbHkuCisJICovCisJaWYgKG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX0RPTUNP TlNUUkFJTlQgfHwKKwkJbm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCQ09OU1RSQUlOVCkKKwl7 CisJCUFzc2VydChhZGRyZXNzLmNsYXNzSWQgPT0gQ29uc3RyYWludFJlbGF0aW9uSWQpOworCQly ZXR1cm4gZGVwYXJzZV9Db21tZW50T25Db25zdHJhaW50U210KGFkZHJlc3Mub2JqZWN0SWQsIHBh cnNldHJlZSk7CisJfQorCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNPTU1FTlQgT04gJXtvYmp0 eXBlfXMiLCAxLAorCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAoY2hh ciAqKSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmp0eXBlLCBmYWxzZSkpOworCisJLyoKKwkg KiBBZGQgdGhlIG9iamVjdCBpZGVudGl0eSBjbGF1c2UuICBGb3IgemVybyBhcmd1bWVudCBhZ2dy ZWdhdGVzIHdlIG5lZWQKKwkgKiB0byBhZGQgdGhlICgqKSBiaXQ7IGluIGFsbCBvdGhlciBjYXNl cyB3ZSBjYW4ganVzdCB1c2UKKwkgKiBnZXRPYmplY3RJZGVudGl0eS4KKwkgKgorCSAqIFhYWCBz aG91bGRuJ3Qgd2UgaW5zdGVhZCBmaXggdGhlIG9iamVjdCBpZGVudGl0aWVzIGZvciB6ZXJvLWFy Z3VtZW50CisJICogYWdncmVnYXRlcz8KKwkgKi8KKwlpZiAobm9kZS0+b2JqdHlwZSA9PSBPQkpF Q1RfQUdHUkVHQVRFKQorCXsKKwkJSGVhcFR1cGxlCXByb2NUdXA7CisJCUZvcm1fcGdfcHJvYyBw cm9jRm9ybTsKKworCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElk R2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJv Y1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJl IHdpdGggT0lEICV1IiwKKwkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJCXByb2NGb3JtID0gKEZv cm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCQlpZiAocHJvY0Zvcm0tPnByb25hcmdz ID09IDApCisJCQlpZGVudGl0eSA9IHBzcHJpbnRmKCIlcygqKSIsCisJCQkJCQkJCXF1b3RlX3F1 YWxpZmllZF9pZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNw YWNlKSwKKwkJCQkJCQkJCQkJCQkJICAgTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKwkJ ZWxzZQorCQkJaWRlbnRpdHkgPSBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpOwor CQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJfQorCWVsc2UKKwkJaWRlbnRpdHkgPSBnZXRP YmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qo cmV0LCAiJXtpZGVudGl0eX1zIiwgImlkZW50aXR5IiwgaWRlbnRpdHkpOworCisJLyogQWRkIHRo ZSBjb21tZW50IGNsYXVzZTsgY2FuIGJlIGVpdGhlciBOVUxMIG9yIGEgcXVvdGVkIGxpdGVyYWwu ICovCisJYXBwZW5kX2xpdGVyYWxfb3JfbnVsbChyZXQsICJJUyAle2NvbW1lbnR9cyIsIG5vZGUt PmNvbW1lbnQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBTZWNMYWJl bFN0bXQgKFNFQ1VSSVRZIExBQkVMKQorICoKKyAqIEdpdmVuIHRoZSBPYmplY3RBZGRyZXNzIG9m IHRoZSB0YXJnZXQgb2JqZWN0IGFuZCB0aGUgcGFyc2UgdHJlZSBvZiB0aGUKKyAqIFNFQ1VSSVRZ IExBQkVMIGNvbW1hbmQsIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgU0VDVVJJ VFkgTEFCRUwKKyAqIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFQ1VSSVRZ IExBQkVMIEZPUiAle3Byb3ZpZGVyfXMgT04gJXtvYmplY3RfdHlwZV9uYW1lfXMgJXtpZGVudGl0 eX1zIElTICV7bGFiZWx9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1NlY0xhYmVs U3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlTZWNMYWJl bFN0bXQgKm5vZGUgPSAoU2VjTGFiZWxTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpy ZXQ7CisKKwlBc3NlcnQobm9kZS0+cHJvdmlkZXIpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEo IlNFQ1VSSVRZIExBQkVMIEZPUiAle3Byb3ZpZGVyfXMgT04gJXtvYmp0eXBlfXMgJXtpZGVudGl0 eX1zIiwgMywKKwkJCQkJCSAicHJvdmlkZXIiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5wcm92aWRl ciwKKwkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgc3RyaW5naWZ5X29i anR5cGUobm9kZS0+b2JqdHlwZSwgZmFsc2UpLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVT dHJpbmcsIGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSkpOworCisJLyogQWRkIHRo ZSBsYWJlbCBjbGF1c2U7IGNhbiBiZSBlaXRoZXIgTlVMTCBvciBhIHF1b3RlZCBsaXRlcmFsLiAq LworCWFwcGVuZF9saXRlcmFsX29yX251bGwocmV0LCAiSVMgJXtsYWJlbH1zIiwgbm9kZS0+bGFi ZWwpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVBbVN0bXQg KENSRUFURSBBQ0NFU1MgTUVUSE9EKS4KKyAqCisgKiBHaXZlbiBhbiBhY2Nlc3MgbWV0aG9kIE9J RCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRy ZWUgcmVwcmVzZW50aW5nIHRoZSBDUkVBVEUgQUNDRVNTIE1FVEhPRCBjb21tYW5kLgorICoKKyAq IFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgQUNDRVNTIE1FVEhPRCAle2lkZW50aXR5fUkgVFlQ RSAle2FtX3R5cGV9cyBIQU5ETEVSICV7aGFuZGxlcn1ECisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQ3JlYXRlQW1TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVwbGUJYW1UdXA7CisJRm9ybV9wZ19hbQlhbUZvcm07 CisJY2hhcgkgICAqYW10eXBlOworCisJYW1UdXAgPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9i amVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYW1UdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1ldGhvZCB3 aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCWFtRm9ybSA9IChGb3JtX3BnX2FtKSBHRVRT VFJVQ1QoYW1UdXApOworCisJc3dpdGNoIChhbUZvcm0tPmFtdHlwZSkKKwl7CisJCWNhc2UgJ2kn OgorCQkJYW10eXBlID0gIklOREVYIjsKKwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCWFtdHlw ZSA9ICJUQUJMRSI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZh bGlkIHR5cGUgJWMgZm9yIGFjY2VzcyBtZXRob2QiLCBhbUZvcm0tPmFtdHlwZSk7CisJfQorCisJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBBQ0NFU1MgTUVUSE9EICV7aWRlbnRpdHl9SSBU WVBFICV7YW1fdHlwZX1zIEhBTkRMRVIgJXtoYW5kbGVyfUQiLCAzLAorCQkJCQkJICJpZGVudGl0 eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgTmFtZVN0cihhbUZvcm0tPmFtbmFtZSksCisJCQkJ CQkgImFtX3R5cGUiLCBPYmpUeXBlU3RyaW5nLCBhbXR5cGUsCisJCQkJCQkgImhhbmRsZXIiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1 cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBhbUZvcm0tPmFtaGFuZGxlcikpOworCisJUmVs ZWFzZVN5c0NhY2hlKGFtVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBIYW5kbGUg ZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5kcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3Vs ZCBjb3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNsb3cuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAq Y21kKQoreworCU9pZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNldHJlZTsKKworCUFzc2Vy dChjbWQtPnR5cGUgPT0gU0NUX1NpbXBsZSk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPnBhcnNldHJl ZTsKKwlvYmplY3RJZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZDsKKworCWlmIChj bWQtPmluX2V4dGVuc2lvbiAmJiAobm9kZVRhZyhwYXJzZXRyZWUpICE9IFRfQ3JlYXRlRXh0ZW5z aW9uU3RtdCkpCisJCXJldHVybiBOVUxMOworCisJLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFu ZGxlIGV2ZXJ5dGhpbmcgdGhhdCBQcm9jZXNzVXRpbGl0eVNsb3cgZG9lcyAqLworCXN3aXRjaCAo bm9kZVRhZyhwYXJzZXRyZWUpKQorCXsKKwkJY2FzZSBUX0FsdGVyQ29sbGF0aW9uU3RtdDoKKwkJ CXJldHVybiBkZXBhcnNlX0FsdGVyQ29sbGF0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJ CWNhc2UgVF9BbHRlckRvbWFpblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckRvbWFpblN0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkgICBjbWQtPmQuc2ltcGxlLnNlY29u ZGFyeU9iamVjdCk7CisKKwkJY2FzZSBUX0FsdGVyRW51bVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9BbHRlckVudW1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlckV4 dGVuc2lvbkNvbnRlbnRzU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uQ29u dGVudHNTdG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJCQkJICBjbWQtPmQuc2lt cGxlLnNlY29uZGFyeU9iamVjdCk7CisKKwkJY2FzZSBUX0FsdGVyRXh0ZW5zaW9uU3RtdDoKKwkJ CXJldHVybiBkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KworCQljYXNlIFRfQWx0ZXJGZHdTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJGZHdTdG10 KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlckZvcmVpZ25TZXJ2ZXJTdG10 OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJGb3JlaWduU2VydmVyU3RtdChvYmplY3RJZCwgcGFy c2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJGdW5jdGlvblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9BbHRlckZ1bmN0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlck9i amVjdERlcGVuZHNTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJEZXBlbmRTdG10KG9iamVj dElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlck9iamVjdFNjaGVtYVN0bXQ6CisJCQly ZXR1cm4gZGVwYXJzZV9BbHRlck9iamVjdFNjaGVtYVN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNz LAorCQkJCQkJCQkJCQkJIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJCSBjbWQtPmQuc2ltcGxlLnNl Y29uZGFyeU9iamVjdCk7CisKKwkJY2FzZSBUX0FsdGVyT3BlcmF0b3JTdG10OgorCQkJcmV0dXJu IGRlcGFyc2VfQWx0ZXJPcGVyYXRvclN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2Fz ZSBUX0FsdGVyT3duZXJTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJPd25lclN0bXQoY21k LT5kLnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlclBvbGljeVN0 bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlclBvbGljeVN0bXQob2JqZWN0SWQsIHBhcnNldHJl ZSk7CisKKwkJY2FzZSBUX0FsdGVyU2VxU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyU2Vx U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJTdGF0c1N0bXQ6CisJ CQlyZXR1cm4gZGVwYXJzZV9BbHRlclN0YXRzU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwor CQljYXNlIFRfQWx0ZXJUU0RpY3Rpb25hcnlTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJU U0RpY3Rpb25hcnlTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlclR5 cGVTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJUeXBlU2V0U3RtdChvYmplY3RJZCwgcGFy c2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJVc2VyTWFwcGluZ1N0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9BbHRlclVzZXJNYXBwaW5nU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNl IFRfQ29tbWVudFN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9Db21tZW50U3RtdChjbWQtPmQuc2lt cGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NvbXBvc2l0ZVR5cGVTdG10Ogor CQkJcmV0dXJuIGRlcGFyc2VfQ29tcG9zaXRlVHlwZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisKKwkJY2FzZSBUX0NyZWF0ZUFtU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUFtU3Rt dChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlQ2FzdFN0bXQ6CisJCQly ZXR1cm4gZGVwYXJzZV9DcmVhdGVDYXN0U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQlj YXNlIFRfQ3JlYXRlQ29udmVyc2lvblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVDb252 ZXJzaW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVEb21haW5TdG10 OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRG9tYWluKG9iamVjdElkLCBwYXJzZXRyZWUpOwor CisJCWNhc2UgVF9DcmVhdGVFbnVtU3RtdDoJLyogQ1JFQVRFIFRZUEUgQVMgRU5VTSAqLworCQkJ cmV0dXJuIGRlcGFyc2VfQ3JlYXRlRW51bVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJ Y2FzZSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVFeHRl bnNpb25TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVGZHdTdG10 OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRmR3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KworCQljYXNlIFRfQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9D cmVhdGVGb3JlaWduU2VydmVyU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRf Q3JlYXRlRnVuY3Rpb25TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRnVuY3Rpb24ob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZU9wRmFtaWx5U3RtdDoKKwkJCXJl dHVybiBkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNh c2UgVF9DcmVhdGVQTGFuZ1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVMYW5nU3RtdChv YmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlUG9saWN5U3RtdDoKKwkJCXJl dHVybiBkZXBhcnNlX0NyZWF0ZVBvbGljeVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJ Y2FzZSBUX0NyZWF0ZVJhbmdlU3RtdDogLyogQ1JFQVRFIFRZUEUgQVMgUkFOR0UgKi8KKwkJCXJl dHVybiBkZXBhcnNlX0NyZWF0ZVJhbmdlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQlj YXNlIFRfQ3JlYXRlU2NoZW1hU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVNjaGVtYVN0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVNlcVN0bXQ6CisJCQly ZXR1cm4gZGVwYXJzZV9DcmVhdGVTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNh c2UgVF9DcmVhdGVTdGF0c1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdGF0aXN0aWNz U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlU3RtdDoKKwkJCXJl dHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBU X0NyZWF0ZUZvcmVpZ25UYWJsZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVGb3JlaWdu VGFibGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVUYWJsZUFz U3RtdDoJLyogQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXICovCisJCQlyZXR1cm4gZGVwYXJzZV9D cmVhdGVUYWJsZUFzU3RtdF92YW5pbGxhKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2Ug VF9DcmVhdGVUcmFuc2Zvcm1TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlVHJhbnNmb3Jt U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlVHJpZ1N0bXQ6CisJ CQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVUcmlnU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwor CQljYXNlIFRfQ3JlYXRlVXNlck1hcHBpbmdTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRl VXNlck1hcHBpbmdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9EZWZpbmVT dG10OgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlLAor CQkJCQkJCQkJICBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisKKwkJY2FzZSBUX0lu ZGV4U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0luZGV4U3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKworCQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfUmVm cmVzaE1hdFZpZXdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9SZW5hbWVT dG10OgorCQkJcmV0dXJuIGRlcGFyc2VfUmVuYW1lU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3Ms IHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX1J1bGVTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfUnVs ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX1ZpZXdTdG10OgkJLyogQ1JF QVRFIFZJRVcgKi8KKwkJCXJldHVybiBkZXBhcnNlX1ZpZXdTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUpOworCisJCWNhc2UgVF9TZWNMYWJlbFN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9TZWNMYWJl bFN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUpOworCisJCWRlZmF1bHQ6CisJ CQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5cGUgaW4gZGVwYXJzZSBjb21tYW5kOiAl ZCIsCisJCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisJfQorCisJcmV0dXJuIE5VTEw7 Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUgZGVwYXJzaW5nLgorICoK KyAqIERlYWwgd2l0aCBhbGwgdGhlIHRhYmxlIGVsZW1lbnRzIChjb2x1bW5zIGFuZCBjb25zdHJh aW50cykuCisgKgorICogTm90ZSB3ZSBpZ25vcmUgY29uc3RyYWludHMgaW4gdGhlIHBhcnNlIG5v ZGUgaGVyZTsgdGhleSBhcmUgZXh0cmFjdGVkIGZyb20KKyAqIHN5c3RlbSBjYXRhbG9ncyBpbnN0 ZWFkLgorICovCitzdGF0aWMgTGlzdCAqCitkZXBhcnNlX1RhYmxlRWxlbWVudHMoUmVsYXRpb24g cmVsYXRpb24sIExpc3QgKnRhYmxlRWxlbWVudHMsIExpc3QgKmRwY29udGV4dCwKKwkJCQkJICBi b29sIHR5cGVkLCBib29sIGNvbXBvc2l0ZSkKK3sKKwlMaXN0CSAgICplbGVtZW50cyA9IE5JTDsK KwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIHRhYmxlRWxlbWVudHMpCisJeworCQlO b2RlCSAgICplbHQgPSAoTm9kZSAqKSBsZmlyc3QobGMpOworCisJCXN3aXRjaCAobm9kZVRhZyhl bHQpKQorCQl7CisJCQljYXNlIFRfQ29sdW1uRGVmOgorCQkJCXsKKwkJCQkJT2JqVHJlZSAgICAq dHJlZTsKKworCQkJCQl0cmVlID0gdHlwZWQgPworCQkJCQkJZGVwYXJzZV9Db2x1bW5EZWZfdHlw ZWQocmVsYXRpb24sIGRwY29udGV4dCwKKwkJCQkJCQkJCQkJCShDb2x1bW5EZWYgKikgZWx0KSA6 CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZihyZWxhdGlvbiwgZHBjb250ZXh0LAorCQkJCQkJCQkJ CSAgY29tcG9zaXRlLCAoQ29sdW1uRGVmICopIGVsdCwKKwkJCQkJCQkJCQkgIGZhbHNlLCBOVUxM KTsKKwkJCQkJaWYgKHRyZWUgIT0gTlVMTCkKKwkJCQkJCWVsZW1lbnRzID0gbGFwcGVuZChlbGVt ZW50cywgbmV3X29iamVjdF9vYmplY3QodHJlZSkpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNh c2UgVF9Db25zdHJhaW50OgorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9S LCAiaW52YWxpZCBub2RlIHR5cGUgJWQiLCBub2RlVGFnKGVsdCkpOworCQl9CisJfQorCisJcmV0 dXJuIGVsZW1lbnRzOworfQorCisvKgorICogV29ya2hvcnNlIHRvIGRlcGFyc2UgYSBDb2xsZWN0 ZWRDb21tYW5kLgorICovCitjaGFyICoKK2RlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3Rl ZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpCit7CisJT3ZlcnJpZGVTZWFyY2hQYXRo ICpvdmVycmlkZVBhdGg7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJTWVtb3J5Q29udGV4dCB0 bXBjeHQ7CisJT2JqVHJlZSAgICAqdHJlZTsKKwljaGFyCSAgICpjb21tYW5kID0gTlVMTDsKKwlT dHJpbmdJbmZvRGF0YSBzdHI7CisKKwkvKgorCSAqIEFsbG9jYXRlIGV2ZXJ5dGhpbmcgZG9uZSBi eSB0aGUgZGVwYXJzaW5nIHJvdXRpbmVzIGludG8gYSB0ZW1wIGNvbnRleHQsCisJICogdG8gYXZv aWQgaGF2aW5nIHRvIHNwcmlua2xlIHRoZW0gd2l0aCBtZW1vcnkgaGFuZGxpbmcgY29kZSwgYnV0 CisJICogYWxsb2NhdGUgdGhlIG91dHB1dCBTdHJpbmdJbmZvIGJlZm9yZSBzd2l0Y2hpbmcuCisJ ICovCisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisJdG1wY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3Jl YXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkgICAiZGVwYXJzZSBjdHgiLAorCQkJ CQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01JTlNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RF RkFVTFRfSU5JVFNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUFYU0laRSk7CisJ b2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGN4dCk7CisKKwkvKgorCSAqIE1hbnkg cm91dGluZXMgdW5kZXJseWluZyB0aGlzIG9uZSB3aWxsIGludm9rZSBydWxldXRpbHMuYyBmdW5j dGlvbmFsaXR5CisJICogdG8gb2J0YWluIGRlcGFyc2VkIHZlcnNpb25zIG9mIGV4cHJlc3Npb25z LiAgSW4gc3VjaCByZXN1bHRzLCB3ZSB3YW50CisJICogYWxsIG9iamVjdCBuYW1lcyB0byBiZSBx dWFsaWZpZWQsIHNvIHRoYXQgcmVzdWx0cyBhcmUgInBvcnRhYmxlIiB0bworCSAqIGVudmlyb25t ZW50cyB3aXRoIGRpZmZlcmVudCBzZWFyY2hfcGF0aCBzZXR0aW5ncy4gIFJhdGhlciB0aGFuIGlu amVjdAorCSAqIHdoYXQgd291bGQgYmUgcmVwZXRpdGl2ZSBjYWxscyB0byBvdmVycmlkZSBzZWFy Y2ggcGF0aCBhbGwgb3ZlciB0aGUKKwkgKiBwbGFjZSwgd2UgZG8gaXQgY2VudHJhbGx5IGhlcmUu CisJICovCisJb3ZlcnJpZGVQYXRoID0gR2V0T3ZlcnJpZGVTZWFyY2hQYXRoKEN1cnJlbnRNZW1v cnlDb250ZXh0KTsKKwlvdmVycmlkZVBhdGgtPnNjaGVtYXMgPSBOSUw7CisJb3ZlcnJpZGVQYXRo LT5hZGRDYXRhbG9nID0gZmFsc2U7CisJb3ZlcnJpZGVQYXRoLT5hZGRUZW1wID0gdHJ1ZTsKKwlQ dXNoT3ZlcnJpZGVTZWFyY2hQYXRoKG92ZXJyaWRlUGF0aCk7CisKKwl2ZXJib3NlID0gdmVyYm9z ZV9tb2RlOworCisJc3dpdGNoIChjbWQtPnR5cGUpCisJeworCQljYXNlIFNDVF9TaW1wbGU6CisJ CQl0cmVlID0gZGVwYXJzZV9zaW1wbGVfY29tbWFuZChjbWQpOworCQkJYnJlYWs7CisJCWNhc2Ug U0NUX0FsdGVyVGFibGU6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlclJlbGF0aW9uKGNtZCk7CisJ CQlicmVhazsKKwkJY2FzZSBTQ1RfR3JhbnQ6CisJCQl0cmVlID0gZGVwYXJzZV9HcmFudFN0bXQo Y21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVhdGVUYWJsZUFzOgorCQkJdHJlZSA9IGRl cGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9BbHRl ck9wRmFtaWx5OgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJPcEZhbWlseShjbWQpOworCQkJYnJl YWs7CisJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xhc3M6CisJCQl0cmVlID0gZGVwYXJzZV9DcmVhdGVP cENsYXNzU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyRGVmYXVsdFByaXZp bGVnZXM6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlckRlZmF1bHRQcml2aWxlZ2VzU3RtdChjbWQp OworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyVFNDb25maWc6CisJCQl0cmVlID0gZGVwYXJz ZV9BbHRlclRTQ29uZmlndXJhdGlvblN0bXQoY21kKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQiLCBjbWQtPnR5 cGUpOworCX0KKworCVBvcE92ZXJyaWRlU2VhcmNoUGF0aCgpOworCisJaWYgKHRyZWUpCisJewor CQlKc29uYgkgICAqanNvbmI7CisKKwkJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHRyZWUpOwor CQljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09OQl9FU1RJ TUFURURfTEVOKTsKKwl9CisKKwkvKgorCSAqIENsZWFuIHVwLiAgTm90ZSB0aGF0IHNpbmNlIHdl IGNyZWF0ZWQgdGhlIFN0cmluZ0luZm8gaW4gdGhlIGNhbGxlcidzCisJICogY29udGV4dCwgdGhl IG91dHB1dCBzdHJpbmcgaXMgbm90IGRlbGV0ZWQgaGVyZS4KKwkgKi8KKwlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN4dCk7CisKKwlyZXR1 cm4gY29tbWFuZDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29u LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLmZiZDNiNTRlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCkBAIC0wLDAgKzEsNzc2IEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBkZGxfanNvbi5jCisgKgkgIEpTT04gY29kZSByZWxhdGVkIHRvIERETCBj b21tYW5kIGRlcGFyc2luZworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIy LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAq CisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5j CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisj aW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgor I2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisKKworLyoKKyAqIENvbnZlcnNpb24gc3BlY2lmaWVy IHdoaWNoIGRldGVybWluZXMgaG93IHdlIGV4cGFuZCB0aGUgSlNPTiBlbGVtZW50IGludG8KKyAq IHN0cmluZy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJU3BlY1R5cGVOYW1lLAorCVNwZWNPcGVy YXRvck5hbWUsCisJU3BlY0RvdHRlZE5hbWUsCisJU3BlY1N0cmluZywKKwlTcGVjTnVtYmVyLAor CVNwZWNTdHJpbmdMaXRlcmFsLAorCVNwZWNJZGVudGlmaWVyLAorCVNwZWNSb2xlCit9IGNvbnZT cGVjaWZpZXI7CisKKy8qCisgKiBBIHRlcm5hcnkgdmFsdWUgdGhhdCByZXByZXNlbnRzIGEgYm9v bGVhbiB0eXBlIEpzb25iVmFsdWUuCisgKi8KK3R5cGVkZWYgZW51bQoreworCXR2X2Fic2VudCwK Kwl0dl90cnVlLAorCXR2X2ZhbHNlCit9CQkJanNvbl90cml2YWx1ZTsKKworc3RhdGljIGJvb2wg ZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJ CQkJCQkJCSBKc29uYlZhbHVlICpqc29udmFsLCBjb252U3BlY2lmaWVyIHNwZWNpZmllciwKKwkJ CQkJCQkJCSBjb25zdCBjaGFyICpmbXQpOworc3RhdGljIHZvaWQgZXhwYW5kX2pzb25iX2FycmF5 KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkJCQkgICBKc29uYlZhbHVlICpqc29u YXJyLCBjaGFyICphcnJheXNlcCwKKwkJCQkJCQkgICBjb252U3BlY2lmaWVyIHNwZWNpZmllciwg Y29uc3QgY2hhciAqZm10KTsKK3N0YXRpYyB2b2lkIGZtdHN0cl9lcnJvcl9jYWxsYmFjayh2b2lk ICphcmcpOworY2hhciAqZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoY2hhciAqanNvbmIpOwor CisvKgorICogR2l2ZW4gYSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3aXRo IHRoZSBnaXZlbiBrZXkgbmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVyIHRo YW4gamJ2Qm9vbCwgYW4gZXJyb3IgaXMgcmFpc2VkLiBJZiBpdCBkb2Vzbid0CisgKiBleGlzdCwg dHZfYWJzZW50IGlzIHJldHVybmVkOyBvdGhlcndpc2UgcmV0dXJuIHRoZSBhY3R1YWwganNvbl90 cml2YWx1ZS4KKyAqLworc3RhdGljIGpzb25fdHJpdmFsdWUKK2ZpbmRfYm9vbF9pbl9qc29uYmNv bnRhaW5lcihKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBjaGFyICprZXluYW1lKQoreworCUpz b25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWpzb25fdHJpdmFsdWUgcmVzdWx0 OworCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5bmFt ZTsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBmaW5k SnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpFQ1Qs ICZrZXkpOworCWlmICh2YWx1ZSA9PSBOVUxMKQorCQlyZXR1cm4gdHZfYWJzZW50OworCWlmICh2 YWx1ZS0+dHlwZSAhPSBqYnZCb29sKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIl c1wiIGlzIG5vdCBvZiB0eXBlIGJvb2xlYW4iLAorCQkJCQkJa2V5bmFtZSkpKTsKKwlyZXN1bHQg PSB2YWx1ZS0+dmFsLmJvb2xlYW4gPyB0dl90cnVlIDogdHZfZmFsc2U7CisJcGZyZWUodmFsdWUp OworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWluZXIs IGZpbmQgdGhlIEpzb25iVmFsdWUgd2l0aCB0aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisgKiBJ ZiBpdCdzIG9mIGEgdHlwZSBvdGhlciB0aGFuIGpidlN0cmluZywgYW4gZXJyb3IgaXMgcmFpc2Vk LiAgSWYgaXQgZG9lc24ndAorICogZXhpc3QsIGFuIGVycm9yIGlzIHJhaXNlZCB1bmxlc3MgbWlz c2luZ19vazsgb3RoZXJ3aXNlIHJldHVybiBOVUxMLgorICoKKyAqIElmIGl0IGV4aXN0cyBhbmQg aXMgYSBzdHJpbmcsIGEgZnJlc2hseSBwYWxsb2MnZWQgY29weSBpcyByZXR1cm5lZC4KKyAqCisg KiBJZiAqbGVuZ3RoIGlzIG5vdCBOVUxMLCBpdCBpcyBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUg c3RyaW5nLgorICovCitzdGF0aWMgY2hhciAqCitmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5l cihKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBjaGFyICprZXluYW1lLAorCQkJCQkJCSAgYm9v bCBtaXNzaW5nX29rLCBpbnQgKmxlbmd0aCkKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZh bHVlICp2YWx1ZTsKKwljaGFyCSAgICpzdHI7CisKKwkvKiBYWFggdmVyaWZ5IHRoYXQgdGhpcyBp cyBhbiBvYmplY3QsIG5vdCBhbiBhcnJheSAqLworCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJ a2V5LnZhbC5zdHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJs ZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFp bmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2YWx1ZSA9PSBOVUxMKQor CXsKKwkJaWYgKG1pc3Npbmdfb2spCisJCQlyZXR1cm4gTlVMTDsKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJy bXNnKCJtaXNzaW5nIGVsZW1lbnQgXCIlc1wiIGluIEpTT04gb2JqZWN0Iiwga2V5bmFtZSkpKTsK Kwl9CisKKwlpZiAodmFsdWUtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJt c2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBvZiB0eXBlIHN0cmluZyIsIGtleW5hbWUpKSk7CisK KwlzdHIgPSBwbnN0cmR1cCh2YWx1ZS0+dmFsLnN0cmluZy52YWwsIHZhbHVlLT52YWwuc3RyaW5n Lmxlbik7CisJaWYgKGxlbmd0aCkKKwkJKmxlbmd0aCA9IHZhbHVlLT52YWwuc3RyaW5nLmxlbjsK KwlwZnJlZSh2YWx1ZSk7CisJcmV0dXJuIHN0cjsKK30KKworI2RlZmluZSBBRFZBTkNFX1BBUlNF X1BPSU5URVIocHRyLGVuZF9wdHIpIFwKKwlkbyB7IFwKKwkJaWYgKCsrKHB0cikgPj0gKGVuZF9w dHIpKSBcCisJCQllcmVwb3J0KEVSUk9SLCBcCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLCBcCisJCQkJCSBlcnJtc2coInVudGVybWluYXRlZCBmb3JtYXQg c3BlY2lmaWVyIikpKTsgXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVy IGZvciBkZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZy4KKyAqCisgKiBGaW5kIHRoZSAiZm10IiBl bGVtZW50IGluIHRoZSBnaXZlbiBjb250YWluZXIsIGFuZCBleHBhbmQgaXQgaW50byB0aGUKKyAq IHByb3ZpZGVkIFN0cmluZ0luZm8uCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfZm10X3JlY3Vy c2l2ZShKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBTdHJpbmdJbmZvIGJ1ZikKK3sKKwlKc29u YlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwljb25zdCBjaGFyICpjcDsKKwljb25z dCBjaGFyICpzdGFydF9wdHI7CisJY29uc3QgY2hhciAqZW5kX3B0cjsKKwlpbnQJCQlsZW47CisK KwlzdGFydF9wdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihjb250YWluZXIsICJm bXQiLCBmYWxzZSwgJmxlbik7CisJZW5kX3B0ciA9IHN0YXJ0X3B0ciArIGxlbjsKKworCWZvciAo Y3AgPSBzdGFydF9wdHI7IGNwIDwgZW5kX3B0cjsgY3ArKykKKwl7CisJCWNvbnZTcGVjaWZpZXIg c3BlY2lmaWVyOworCQlib29sCQlpc19hcnJheSA9IGZhbHNlOworCQljaGFyCSAgICpwYXJhbSA9 IE5VTEw7CisJCWNoYXIJICAgKmFycmF5c2VwID0gTlVMTDsKKworCQlpZiAoKmNwICE9ICclJykK KwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51 ZTsKKwkJfQorCisKKwkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKworCQkv KiBFYXN5IGNhc2U6ICUlIG91dHB1dHMgYSBzaW5nbGUgJSAqLworCQlpZiAoKmNwID09ICclJykK KwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51 ZTsKKwkJfQorCisJCS8qCisJCSAqIFNjYW4gdGhlIG1hbmRhdG9yeSBlbGVtZW50IG5hbWUuICBB bGxvdyBmb3IgYW4gYXJyYXkgc2VwYXJhdG9yCisJCSAqICh3aGljaCBtYXkgYmUgdGhlIGVtcHR5 IHN0cmluZykgdG8gYmUgc3BlY2lmaWVkIGFmdGVyIGEgY29sb24uCisJCSAqLworCQlpZiAoKmNw ID09ICd7JykKKwkJeworCQkJU3RyaW5nSW5mb0RhdGEgcGFyYnVmOworCQkJU3RyaW5nSW5mb0Rh dGEgYXJyYXlzZXBidWY7CisJCQlTdHJpbmdJbmZvCWFwcGVuZFRvOworCisJCQlpbml0U3RyaW5n SW5mbygmcGFyYnVmKTsKKwkJCWFwcGVuZFRvID0gJnBhcmJ1ZjsKKworCQkJQURWQU5DRV9QQVJT RV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCWZvciAoOyBjcCA8IGVuZF9wdHI7KQorCQkJewor CQkJCWlmICgqY3AgPT0gJzonKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm91bmQgYXJyYXkg c2VwYXJhdG9yIGRlbGltaXRlcjsgZWxlbWVudCBuYW1lIGlzIG5vdworCQkJCQkgKiBjb21wbGV0 ZSwgc3RhcnQgZmlsbGluZyB0aGUgc2VwYXJhdG9yLgorCQkJCQkgKi8KKwkJCQkJaW5pdFN0cmlu Z0luZm8oJmFycmF5c2VwYnVmKTsKKwkJCQkJYXBwZW5kVG8gPSAmYXJyYXlzZXBidWY7CisJCQkJ CWlzX2FycmF5ID0gdHJ1ZTsKKwkJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRy KTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJaWYgKCpjcCA9PSAnfScpCisJCQkJewor CQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJCQlicmVhazsKKwkJ CQl9CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhhcHBlbmRUbywgKmNwKTsKKwkJCQlB RFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJfQorCQkJcGFyYW0gPSBwYXJi dWYuZGF0YTsKKwkJCWlmIChpc19hcnJheSkKKwkJCQlhcnJheXNlcCA9IGFycmF5c2VwYnVmLmRh dGE7CisJCX0KKwkJaWYgKHBhcmFtID09IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygi bWlzc2luZyBjb252ZXJzaW9uIG5hbWUgaW4gY29udmVyc2lvbiBzcGVjaWZpZXIiKSkpOworCisJ CXN3aXRjaCAoKmNwKQorCQl7CisJCQljYXNlICdJJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjSWRl bnRpZmllcjsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0QnOgorCQkJCXNwZWNpZmllciA9IFNwZWNE b3R0ZWROYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAncyc6CisJCQkJc3BlY2lmaWVyID0gU3Bl Y1N0cmluZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0wnOgorCQkJCXNwZWNpZmllciA9IFNwZWNT dHJpbmdMaXRlcmFsOworCQkJCWJyZWFrOworCQkJY2FzZSAnVCc6CisJCQkJc3BlY2lmaWVyID0g U3BlY1R5cGVOYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAnTyc6CisJCQkJc3BlY2lmaWVyID0g U3BlY09wZXJhdG9yTmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ24nOgorCQkJCXNwZWNpZmll ciA9IFNwZWNOdW1iZXI7CisJCQkJYnJlYWs7CisJCQljYXNlICdSJzoKKwkJCQlzcGVjaWZpZXIg PSBTcGVjUm9sZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJ IGVycm1zZygiaW52YWxpZCBjb252ZXJzaW9uIHNwZWNpZmllciBcIiVjXCIiLCAqY3ApKSk7CisJ CX0KKworCQkvKgorCQkgKiBPYnRhaW4gdGhlIGVsZW1lbnQgdG8gYmUgZXhwYW5kZWQuCisJCSAq LworCQlrZXkudHlwZSA9IGpidlN0cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcudmFsID0gcGFyYW07 CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihwYXJhbSk7CisKKwkJdmFsdWUgPSBmaW5k SnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLCBKQl9GT0JKRUNULCAma2V5KTsKKwor CQkvKgorCQkgKiBFeHBhbmQgdGhlIGRhdGEgKHBvc3NpYmx5IGFuIGFycmF5KSBpbnRvIHRoZSBv dXRwdXQgU3RyaW5nSW5mby4KKwkJICovCisJCWlmIChpc19hcnJheSkKKwkJCWV4cGFuZF9qc29u Yl9hcnJheShidWYsIHBhcmFtLCB2YWx1ZSwgYXJyYXlzZXAsIHNwZWNpZmllciwgc3RhcnRfcHRy KTsKKwkJZWxzZQorCQkJZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KGJ1ZiwgcGFyYW0sIHZhbHVl LCBzcGVjaWZpZXIsIHN0YXJ0X3B0cik7CisJfQorfQorCisvKgorICogRXhwYW5kIGEganNvbiB2 YWx1ZSBhcyBhIHF1b3RlZCBpZGVudGlmaWVyLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZSBz dHJpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9pZGVudGlmaWVyKFN0cmlu Z0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKworCUFz c2VydChqc29udmFsLT50eXBlID09IGpidlN0cmluZyk7CisKKwlzdHIgPSBwbnN0cmR1cChqc29u dmFsLT52YWwuc3RyaW5nLnZhbCwganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7 Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgZG90LXNlcGFyYXRlZC1uYW1l LiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZQorICogYmluYXJ5IGFuZCBtYXkgY29udGFpbiBl bGVtZW50cyAic2NoZW1hbmFtZSIgKG9wdGlvbmFsKSwgIm9iam5hbWUiCisgKiAobWFuZGF0b3J5 KSwgImF0dHJuYW1lIiAob3B0aW9uYWwpLiAgRG91YmxlIHF1b3RlcyBhcmUgYWRkZWQgdG8gZWFj aCBlbGVtZW50CisgKiBhcyBuZWNlc3NhcnksIGFuZCBkb3Qgc2VwYXJhdG9ycyB3aGVyZSBuZWVk ZWQuCisgKgorICogT25lIGRheSB3ZSBtaWdodCBuZWVkIGEgImNhdGFsb2ciIGVsZW1lbnQgYXMg d2VsbCwgYnV0IG5vIGN1cnJlbnQgdXNlIGNhc2UKKyAqIG5lZWRzIHRoYXQuCisgKi8KK3N0YXRp YyB2b2lkCitleHBhbmRfanNvbnZhbF9kb3R0ZWRuYW1lKFN0cmluZ0luZm8gYnVmLCBKc29uYlZh bHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKworCUFzc2VydChqc29udmFsLT50eXBl ID09IGpidkJpbmFyeSk7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihq c29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJInNjaGVtYW5hbWUiLCB0cnVlLCBO VUxMKTsKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4iLCBxdW90 ZV9pZGVudGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0KKworCXN0ciA9IGZpbmRfc3Ry aW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJ CQkib2JqbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwg cXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwlwZnJlZShzdHIpOworCisJc3RyID0gZmluZF9zdHJp bmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJ CSJhdHRybmFtZSIsIHRydWUsIE5VTEwpOworCWlmIChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIi4lcyIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJ fQorfQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhIHR5cGUgbmFtZS4KKyAqLwor c3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3R5cGVuYW1lKFN0cmluZ0luZm8gYnVmLCBKc29u YlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnNjaGVtYSA9IE5VTEw7CisJY2hhcgkgICAq dHlwZW5hbWU7CisJY2hhcgkgICAqdHlwbW9kc3RyOworCWpzb25fdHJpdmFsdWUgaXNfYXJyYXk7 CisJY2hhcgkgICAqYXJyYXlfZGVjb3I7CisKKwkvKgorCSAqIFdlIG9taXQgc2NoZW1hLXF1YWxp ZnlpbmcgdGhlIG91dHB1dCBuYW1lIGlmIHRoZSBzY2hlbWEgZWxlbWVudCBpcworCSAqIGVpdGhl ciB0aGUgZW1wdHkgc3RyaW5nIG9yIE5VTEw7IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhvc2Ug dHdvIGNhc2VzCisJICogaXMgdGhhdCBpbiB0aGUgbGF0dGVyIHdlIHF1b3RlIHRoZSB0eXBlIG5h bWUsIGluIHRoZSBmb3JtZXIgd2UgZG9uJ3QuCisJICogVGhpcyBhbGxvd3MgZm9yIHR5cGVzIHdp dGggc3BlY2lhbCB0eXBtb2QgbmVlZHMsIHN1Y2ggYXMgaW50ZXJ2YWwgYW5kCisJICogdGltZXN0 YW1wIChzZWUgZm9ybWF0X3R5cGVfZGV0YWlsZWQpLCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIGFs bG93aW5nCisJICogZm9yIHRoZSBzY2hlbWEgbmFtZSB0byBiZSBvbWl0dGVkIGZyb20gdHlwZSBu YW1lcyB0aGF0IHJlcXVpcmUgcXVvdGVzCisJICogYnV0IGFyZSB0byBiZSBvYnRhaW5lZCBmcm9t IGEgdXNlciBzY2hlbWEuCisJICovCisKKwlzY2hlbWEgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNv bnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJICAgInNjaGVtYW5h bWUiLCB0cnVlLCBOVUxMKTsKKwl0eXBlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFp bmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICJ0eXBlbmFtZSIsIGZh bHNlLCBOVUxMKTsKKwl0eXBtb2RzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihq c29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSAgInR5cG1vZCIsIHRydWUsIE5V TEwpOworCWlzX2FycmF5ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZh bC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAidHlwYXJyYXkiKTsKKwlzd2l0Y2ggKGlzX2Fy cmF5KQorCXsKKwkJY2FzZSB0dl90cnVlOgorCQkJYXJyYXlfZGVjb3IgPSAiW10iOworCQkJYnJl YWs7CisKKwkJY2FzZSB0dl9mYWxzZToKKwkJCWFycmF5X2RlY29yID0gIiI7CisJCQlicmVhazsK KworCQljYXNlIHR2X2Fic2VudDoKKwkJZGVmYXVsdDoKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNn KCJtaXNzaW5nIHR5cGFycmF5IGVsZW1lbnQiKSkpOworCX0KKworCWlmIChzY2hlbWEgPT0gTlVM TCkKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHF1b3RlX2lkZW50aWZpZXIodHlwZW5h bWUpKTsKKwllbHNlIGlmIChzY2hlbWFbMF0gPT0gJ1wwJykKKwkJYXBwZW5kU3RyaW5nSW5mbyhi dWYsICIlcyIsIHR5cGVuYW1lKTsJLyogU3BlY2lhbCB0eXBtb2QgbmVlZHMgKi8KKwllbHNlCisJ CWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuJXMiLCBxdW90ZV9pZGVudGlmaWVyKHNjaGVtYSks CisJCQkJCQkgcXVvdGVfaWRlbnRpZmllcih0eXBlbmFtZSkpOworCisJYXBwZW5kU3RyaW5nSW5m byhidWYsICIlcyVzIiwgdHlwbW9kc3RyID8gdHlwbW9kc3RyIDogIiIsIGFycmF5X2RlY29yKTsK KwlwZnJlZShzY2hlbWEpOworCXBmcmVlKHR5cGVuYW1lKTsKKwlwZnJlZSh0eXBtb2RzdHIpOwor fQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhbiBvcGVyYXRvciBuYW1lLgorICov CitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfb3BlcmF0b3IoU3RyaW5nSW5mbyBidWYsIEpz b25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJc3RyID0gZmluZF9zdHJp bmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJ CSJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJLyogU2NoZW1hIG1pZ2h0IGJlIE5VTEwgb3Ig ZW1wdHkgKi8KKwlpZiAoc3RyICE9IE5VTEwgJiYgc3RyWzBdICE9ICdcMCcpCisJeworCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVl KHN0cik7CisJfQorCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZh bC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJvYmpuYW1lIiwgZmFsc2UsIE5VTEwpOwor CisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHIpOworCQlw ZnJlZShzdHIpOworCX0KK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMgYSBzdHJp bmcuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBvZgorICogdHlwZSBCaW5h cnkuICBJbiB0aGUgbGF0dGVyIGNhc2UsIGl0IG11c3QgY29udGFpbiBhICJmbXQiIGVsZW1lbnQg d2hpY2ggd2lsbAorICogYmUgcmVjdXJzaXZlbHkgZXhwYW5kZWQ7IGFsc28sIGlmIHRoZSBvYmpl Y3QgY29udGFpbnMgYW4gZWxlbWVudCAicHJlc2VudCIKKyAqIGFuZCBpdCBpcyBzZXQgdG8gZmFs c2UsIHRoZSBleHBhbnNpb24gaXMgdGhlIGVtcHR5IHN0cmluZy4KKyAqCisgKiBSZXR1cm5zIGZh bHNlIGlmIG5vIGFjdHVhbCBleHBhbnNpb24gd2FzIG1hZGUgZHVlIHRvIHRoZSAicHJlc2VudCIg ZmxhZworICogYmVpbmcgc2V0IHRvICJmYWxzZSIuCisgKgorICogVGhlIGNhbGxlciBpcyByZXNw b25zaWJsZSB0byBjaGVjayBqc29udmFsIGlzIG9mIHR5cGUgamJ2U3RyaW5nIG9yIGpidkJpbmFy eS4KKyAqLworc3RhdGljIGJvb2wKK2V4cGFuZF9qc29udmFsX3N0cmluZyhTdHJpbmdJbmZvIGJ1 ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlpZiAoanNvbnZhbC0+dHlwZSA9PSBqYnZTdHJp bmcpCisJeworCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwganNvbnZhbC0+dmFsLnN0cmlu Zy52YWwsCisJCQkJCQkJICAganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCX0KKwllbHNlIGlm IChqc29udmFsLT50eXBlID09IGpidkJpbmFyeSkKKwl7CisJCWpzb25fdHJpdmFsdWUgcHJlc2Vu dDsKKworCQlwcmVzZW50ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZh bC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAicHJlc2VudCIpOworCisJCS8qCisJCSAqIElm ICJwcmVzZW50IiBpcyBzZXQgdG8gZmFsc2UsIHRoaXMgZWxlbWVudCBleHBhbmRzIHRvIGVtcHR5 OworCQkgKiBvdGhlcndpc2UgKGVpdGhlciB0cnVlIG9yIGFic2VudCksIGZhbGwgdGhyb3VnaCB0 byBleHBhbmQgImZtdCIuCisJCSAqLworCQlpZiAocHJlc2VudCA9PSB0dl9mYWxzZSkKKwkJCXJl dHVybiBmYWxzZTsKKworCQlleHBhbmRfZm10X3JlY3Vyc2l2ZShqc29udmFsLT52YWwuYmluYXJ5 LmRhdGEsIGJ1Zik7CisJfQorCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7 Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGEgc3RyaW5nIGxpdGVyYWwuCisg Ki8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9zdHJsaXQoU3RyaW5nSW5mbyBidWYsIEpz b25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCVN0cmluZ0luZm9EYXRhIGRx ZGVsaW07CisJc3RhdGljIGNvbnN0IGNoYXIgZHFzdWZmaXhlc1tdID0gIl9YWVpaWVhfIjsKKwlp bnQJCQlkcW5leHRjaGFyID0gMDsKKworCXN0ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJp bmcudmFsLCBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7CisKKwkvKiBFYXN5IGNhc2U6IGlmIHRo ZXJlIGFyZSBubyAnIGFuZCBubyBcLCBqdXN0IHVzZSBhIHNpbmdsZSBxdW90ZSAqLworCWlmIChz dHJwYnJrKHN0ciwgIlwnXFwiKSA9PSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYs ICInJXMnIiwgc3RyKTsKKwkJcGZyZWUoc3RyKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE90aGVy d2lzZSBuZWVkIHRvIGZpbmQgYSB1c2VmdWwgZG9sbGFyLXF1b3RlIGRlbGltaXRlciAqLworCWlu aXRTdHJpbmdJbmZvKCZkcWRlbGltKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkcWRlbGlt LCAiJCIpOworCXdoaWxlIChzdHJzdHIoc3RyLCBkcWRlbGltLmRhdGEpICE9IE5VTEwpCisJewor CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZHFkZWxpbSwgZHFzdWZmaXhlc1tkcW5leHRjaGFyKytd KTsKKwkJZHFuZXh0Y2hhciA9IGRxbmV4dGNoYXIgJSAoc2l6ZW9mKGRxc3VmZml4ZXMpIC0gMSk7 CisJfQorCS8qIEFkZCB0cmFpbGluZyAkICovCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRxZGVs aW0sICckJyk7CisKKwkvKiBBbmQgZmluYWxseSBwcm9kdWNlIHRoZSBxdW90ZWQgbGl0ZXJhbCBp bnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyAqLworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMl cyVzIiwgZHFkZWxpbS5kYXRhLCBzdHIsIGRxZGVsaW0uZGF0YSk7CisJcGZyZWUoZHFkZWxpbS5k YXRhKTsKKwlwZnJlZShzdHIpOworfQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBh biBpbnRlZ2VyIHF1YW50aXR5LgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfbnVt YmVyKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0 cmRhdHVtOworCisJc3RyZGF0dW0gPSBEYXR1bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxs MShudW1lcmljX291dCwKKwkJCQkJCQkJCQkJCSAgIE51bWVyaWNHZXREYXR1bShqc29udmFsLT52 YWwubnVtZXJpYykpKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwgc3RyZGF0dW0pOwor CXBmcmVlKHN0cmRhdHVtKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMgYSBy b2xlIG5hbWUuICBJZiB0aGUgaXNfcHVibGljIGVsZW1lbnQgaXMgc2V0IHRvCisgKiB0cnVlLCBQ VUJMSUMgaXMgZXhwYW5kZWQgKG5vIHF1b3Rlcyk7IG90aGVyd2lzZSwgZXhwYW5kIHRoZSBnaXZl biByb2xlIG5hbWUsCisgKiBxdW90aW5nIGFzIGFuIGlkZW50aWZpZXIuCisgKi8KK3N0YXRpYyB2 b2lkCitleHBhbmRfanNvbnZhbF9yb2xlKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29u dmFsKQoreworCWpzb25fdHJpdmFsdWUgaXNfcHVibGljOworCisJaXNfcHVibGljID0gZmluZF9i b29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJ CQkJImlzX3B1YmxpYyIpOworCWlmIChpc19wdWJsaWMgPT0gdHZfdHJ1ZSkKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsICJQVUJMSUMiKTsKKwllbHNlCisJeworCQljaGFyCSAgICpyb2xl bmFtZTsKKworCQlyb2xlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252 YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJCSAicm9sZW5hbWUiLCBmYWxzZSwgTlVM TCk7CisJCWlmIChyb2xlbmFtZSkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYs IHF1b3RlX2lkZW50aWZpZXIocm9sZW5hbWUpKTsKKwkJCXBmcmVlKHJvbGVuYW1lKTsKKwkJfQor CX0KK30KKworLyoKKyAqIEV4cGFuZCBvbmUgSlNPTiBlbGVtZW50IGludG8gdGhlIG91dHB1dCBT dHJpbmdJbmZvIGFjY29yZGluZyB0byB0aGUKKyAqIGNvbnZlcnNpb24gc3BlY2lmaWVyLiAgVGhl IGVsZW1lbnQgdHlwZSBpcyB2YWxpZGF0ZWQsIGFuZCBhbiBlcnJvciBpcyByYWlzZWQKKyAqIGlm IGl0IGRvZXNuJ3QgbWF0Y2ggd2hhdCB3ZSBleHBlY3QgZm9yIHRoZSBjb252ZXJzaW9uIHNwZWNp Zmllci4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIGFjdHVhbCBleHBhbnNpb24gd2FzIG1h ZGUgKGR1ZSB0byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJlaW5nIHNldCB0byAiZmFsc2UiIGlu IGZvcm1hdHRlZCBzdHJpbmcgZXhwYW5zaW9uKS4KKyAqLworc3RhdGljIGJvb2wKK2V4cGFuZF9v bmVfanNvbmJfZWxlbWVudChTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sIEpzb25iVmFsdWUg Kmpzb252YWwsCisJCQkJCQkgY29udlNwZWNpZmllciBzcGVjaWZpZXIsIGNvbnN0IGNoYXIgKmZt dCkKK3sKKwlib29sCQlyZXN1bHQgPSB0cnVlOworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVy cmNvbnRleHQ7CisKKwkvKiBJZiB3ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywgc2V0dXAg YW4gZXJlcG9ydCgpIGNvbnRleHQgY2FsbGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJc3FsZXJy Y29udGV4dC5jYWxsYmFjayA9IGZtdHN0cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJyY29udGV4 dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJCXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9j b250ZXh0X3N0YWNrOworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7CisJ fQorCisJaWYgKCFqc29udmFsKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wi IG5vdCBmb3VuZCIsIHBhcmFtKSkpOworCisJc3dpdGNoIChzcGVjaWZpZXIpCisJeworCQljYXNl IFNwZWNJZGVudGlmaWVyOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUkgZWxl bWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOwor CQkJZXhwYW5kX2pzb252YWxfaWRlbnRpZmllcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisK KwkJY2FzZSBTcGVjRG90dGVkTmFtZToKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFy eSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cnVjdCBmb3Ig JSVEIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlw ZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX2RvdHRlZG5hbWUoYnVmLCBqc29udmFsKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgU3BlY1N0cmluZzoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0 cmluZyAmJgorCQkJCWpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIG9yIHN0cnVjdCBmb3IgJSVzIGVsZW1l bnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJ CXJlc3VsdCA9IGV4cGFuZF9qc29udmFsX3N0cmluZyhidWYsIGpzb252YWwpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBTcGVjU3RyaW5nTGl0ZXJhbDoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpi dlN0cmluZykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmlu ZyBmb3IgJSVMIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZh bC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3N0cmxpdChidWYsIGpzb252YWwpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBTcGVjVHlwZU5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBq YnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJ1 Y3QgZm9yICUlVCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252 YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF90eXBlbmFtZShidWYsIGpzb252YWwpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjT3BlcmF0b3JOYW1lOgorCQkJaWYgKGpzb252YWwtPnR5 cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpT T04gc3RydWN0IGZvciAlJU8gZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFt LCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfb3BlcmF0b3IoYnVmLCBqc29u dmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY051bWJlcjoKKwkJCWlmIChqc29udmFsLT50 eXBlICE9IGpidk51bWVyaWMpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQg SlNPTiBudW1lcmljIGZvciAlJW4gZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBh cmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfbnVtYmVyKGJ1ZiwganNv bnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNSb2xlOgorCQkJaWYgKGpzb252YWwtPnR5 cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpT T04gc3RydWN0IGZvciAlJVIgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFt LCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfcm9sZShidWYsIGpzb252YWwp OworCQkJYnJlYWs7CisJfQorCisJaWYgKGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNx bGVycmNvbnRleHQucHJldmlvdXM7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogSXRl cmF0ZSBvbiB0aGUgZWxlbWVudHMgb2YgYSBKU09OIGFycmF5LCBleHBhbmRpbmcgZWFjaCBvbmUg aW50byB0aGUgb3V0cHV0CisgKiBTdHJpbmdJbmZvIHBlciB0aGUgZ2l2ZW4gY29udmVyc2lvbiBz cGVjaWZpZXIsIHNlcGFyYXRlZCBieSB0aGUgZ2l2ZW4KKyAqIHNlcGFyYXRvci4KKyAqLworc3Rh dGljIHZvaWQKK2V4cGFuZF9qc29uYl9hcnJheShTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0s CisJCQkJICAgSnNvbmJWYWx1ZSAqanNvbmFyciwgY2hhciAqYXJyYXlzZXAsIGNvbnZTcGVjaWZp ZXIgc3BlY2lmaWVyLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlFcnJvckNvbnRleHRD YWxsYmFjayBzcWxlcnJjb250ZXh0OworCUpzb25iQ29udGFpbmVyICpjb250YWluZXI7CisJSnNv bmJJdGVyYXRvciAqaXQ7CisJSnNvbmJWYWx1ZQl2OworCWludAkJCXR5cGU7CisJYm9vbAkJZmly c3QgPSB0cnVlOworCVN0cmluZ0luZm9EYXRhIGFycmF5ZWxlbTsKKworCS8qIElmIHdlIHdlcmUg Z2l2ZW4gYSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxsYmFj ayAqLworCWlmIChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vy cm9yX2NhbGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJc3Fs ZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2NvbnRl eHRfc3RhY2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAoanNvbmFyci0+dHlwZSAhPSBq YnZCaW5hcnkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IGEg SlNPTiBhcnJheSIsIHBhcmFtKSkpOworCisJY29udGFpbmVyID0ganNvbmFyci0+dmFsLmJpbmFy eS5kYXRhOworCWlmICghSnNvbkNvbnRhaW5lcklzQXJyYXkoY29udGFpbmVyKSkKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0p KSk7CisKKwlpbml0U3RyaW5nSW5mbygmYXJyYXllbGVtKTsKKworCWl0ID0gSnNvbmJJdGVyYXRv ckluaXQoY29udGFpbmVyKTsKKwl3aGlsZSAoKHR5cGUgPSBKc29uYkl0ZXJhdG9yTmV4dCgmaXQs ICZ2LCB0cnVlKSkgIT0gV0pCX0RPTkUpCisJeworCQlpZiAodHlwZSA9PSBXSkJfRUxFTSkKKwkJ eworCQkJcmVzZXRTdHJpbmdJbmZvKCZhcnJheWVsZW0pOworCisJCQlpZiAoZXhwYW5kX29uZV9q c29uYl9lbGVtZW50KCZhcnJheWVsZW0sIHBhcmFtLCAmdiwgc3BlY2lmaWVyLCBOVUxMKSkKKwkJ CXsKKwkJCQlpZiAoIWZpcnN0KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgYXJy YXlzZXApOworCisJCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsIGFycmF5ZWxlbS5kYXRh LCBhcnJheWVsZW0ubGVuKTsKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJfQorCQl9CisJfQorCisJ aWYgKGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7 Cit9CisKKy8qCisgKiBXb3JraG9yc2UgZm9yIGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kLgor ICovCitjaGFyICoKK2RlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25fc3RyKQor eworCURhdHVtCQlkOworCUpzb25iCSAgICpqc29uYjsKKwlTdHJpbmdJbmZvCWJ1ZiA9IChTdHJp bmdJbmZvKSBwYWxsb2MwKHNpemVvZihTdHJpbmdJbmZvRGF0YSkpOworCisJaW5pdFN0cmluZ0lu Zm8oYnVmKTsKKworCWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKGpzb25iX2luLCBQb2ludGVyR2V0 RGF0dW0oanNvbl9zdHIpKTsKKwlqc29uYiA9IChKc29uYiAqKSBEYXR1bUdldFBvaW50ZXIoZCk7 CisKKwlleHBhbmRfZm10X3JlY3Vyc2l2ZSgmanNvbmItPnJvb3QsIGJ1Zik7CisKKwlyZXR1cm4g YnVmLT5kYXRhOworfQorCisvKi0tLS0tLQorICogUmV0dXJucyBhIGZvcm1hdHRlZCBzdHJpbmcg ZnJvbSBhIEpTT04gb2JqZWN0LgorICoKKyAqIFRoZSBzdGFydGluZyBwb2ludCBpcyB0aGUgZWxl bWVudCBuYW1lZCAiZm10IiAod2hpY2ggbXVzdCBiZSBhIHN0cmluZykuCisgKiBUaGlzIGZvcm1h dCBzdHJpbmcgbWF5IGNvbnRhaW4gemVybyBvciBtb3JlICUtZXNjYXBlcywgd2hpY2ggY29uc2lz dCBvZiBhbgorICogZWxlbWVudCBuYW1lIGVuY2xvc2VkIGluIHsgfSwgcG9zc2libHkgZm9sbG93 ZWQgYnkgYSBjb252ZXJzaW9uIG1vZGlmaWVyLAorICogZm9sbG93ZWQgYnkgYSBjb252ZXJzaW9u IHNwZWNpZmllci4gIFBvc3NpYmxlIGNvbnZlcnNpb24gc3BlY2lmaWVycyBhcmU6CisgKgorICog JQkJZXhwYW5kIHRvIGEgbGl0ZXJhbCAlCisgKiBJCQlleHBhbmQgYXMgYSBzaW5nbGUsIG5vbi1x dWFsaWZpZWQgaWRlbnRpZmllcgorICogRAkJZXhwYW5kIGFzIGEgcG9zc2libHktcXVhbGlmaWVk IGlkZW50aWZpZXIKKyAqIFQJCWV4cGFuZCBhcyBhIHR5cGUgbmFtZQorICogTwkJZXhwYW5kIGFz IGFuIG9wZXJhdG9yIG5hbWUKKyAqIEwJCWV4cGFuZCBhcyBhIHN0cmluZyBsaXRlcmFsIChxdW90 ZSB1c2luZyBzaW5nbGUgcXVvdGVzKQorICogcwkJZXhwYW5kIGFzIGEgc2ltcGxlIHN0cmluZyAo bm8gcXVvdGluZykKKyAqIG4JCWV4cGFuZCBhcyBhIHNpbXBsZSBudW1iZXIgKG5vIHF1b3Rpbmcp CisgKiBSCQlleHBhbmQgYXMgYSByb2xlIG5hbWUgKHBvc3NpYmx5IHF1b3RlZCBuYW1lLCBvciBQ VUJMSUMpCisgKgorICogVGhlIGVsZW1lbnQgbmFtZSBtYXkgaGF2ZSBhbiBvcHRpb25hbCBzZXBh cmF0b3Igc3BlY2lmaWNhdGlvbiBwcmVjZWRlZAorICogYnkgYSBjb2xvbi4gIEl0cyBwcmVzZW5j ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBleHBlY3RlZCB0byBiZQorICogYW4gYXJy YXk7IHRoZSBzcGVjaWZpZWQgc2VwYXJhdG9yIGlzIHVzZWQgdG8gam9pbiB0aGUgYXJyYXkgZWxl bWVudHMuCisgKi0tLS0tLQorICovCitEYXR1bQorZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwl0ZXh0CSAgICpqc29uID0gUEdfR0VUQVJHX1RFWFRfUCgw KTsKKwljaGFyCSAgICpqc29uX3N0cjsKKworCWpzb25fc3RyID0gdGV4dF90b19jc3RyaW5nKGpz b24pOworCisJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoZGVwYXJzZV9kZGxfanNv bl90b19zdHJpbmcoanNvbl9zdHIpKSk7Cit9CisKKy8qCisgKiBFcnJvciBjb250ZXh0IGNhbGxi YWNrIGZvciBKU09OIGZvcm1hdCBzdHJpbmcgZXhwYW5zaW9uLgorICoKKyAqIFhYWDogaW5kaWNh dGUgd2hpY2ggZWxlbWVudCB3ZSdyZSBleHBhbmRpbmcsIGlmIGFwcGxpY2FibGUuCisgKi8KK3N0 YXRpYyB2b2lkCitmbXRzdHJfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQoreworCWVycmNvbnRl eHQoIndoaWxlIGV4cGFuZGluZyBmb3JtYXQgc3RyaW5nIFwiJXNcIiIsIChjaGFyICopIGFyZyk7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZCBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCmluZGV4IDg2NzkxMWMwZDMuLmViNjY1MDFjNDUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCkBAIC0xNyw2ICsxNyw4IEBAIGJhY2tlbmRfc291 cmNlcyArPSBmaWxlcygKICAgJ2NvcHl0by5jJywKICAgJ2NyZWF0ZWFzLmMnLAogICAnZGJjb21t YW5kcy5jJywKKyAgJ2RkbF9kZXBhcnNlLmMnLAorICAnZGRsX2pzb24uYycsCiAgICdkZWZpbmUu YycsCiAgICdkaXNjYXJkLmMnLAogICAnZHJvcGNtZHMuYycsCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dAppbmRleCA5OGQ5MGQ5MzM4Li42Y2Y3NmUxZjk5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK QEAgLTExODc2LDQgKzExODc2LDEwIEBACiAgIHByb3JldHR5cGUgPT4gJ2J5dGVhJywgcHJvYXJn dHlwZXMgPT4gJ3BnX2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnknLAogICBwcm9zcmMgPT4gJ2Jy aW5fbWlubWF4X211bHRpX3N1bW1hcnlfc2VuZCcgfSwKIAoreyBvaWQgPT4gJzQ2NDInLCBkZXNj ciA9PiAnZGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgaW50byBKU09OIGZvcm1hdCBzdHJpbmcnLAor ICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV90b19qc29uJywgcHJvcmV0dHlwZSA9PiAndGV4dCcs CisgIHByb2FyZ3R5cGVzID0+ICdwZ19kZGxfY29tbWFuZCcsIHByb3NyYyA9PiAnZGRsX2RlcGFy c2VfdG9fanNvbicgfSwKK3sgb2lkID0+ICc0NjQzJywgZGVzY3IgPT4gJ2V4cGFuZCBKU09OIGZv cm1hdCBEREwgdG8gYSBwbGFpbiBEREwgY29tbWFuZCcsCisgIHByb25hbWUgPT4gJ2RkbF9kZXBh cnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5cGVz ID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcgfSwKIF0K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRl L25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCAzNGJjNjQwZmYyLi4yNjNjMGUyN2MyIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvcGFyc2Vub2Rlcy5oCkBAIC0xOTczLDYgKzE5NzMsNyBAQCB0eXBlZGVmIHN0cnVjdCBBbHRl clRhYmxlU3RtdAogCUxpc3QJICAgKmNtZHM7CQkJLyogbGlzdCBvZiBzdWJjb21tYW5kcyAqLwog CU9iamVjdFR5cGUJb2JqdHlwZTsJCS8qIHR5cGUgb2Ygb2JqZWN0ICovCiAJYm9vbAkJbWlzc2lu Z19vazsJCS8qIHNraXAgZXJyb3IgaWYgdGFibGUgbWlzc2luZyAqLworCWJvb2wgICAgICAgIHRh YmxlX2xpa2U7CQkvKiBpbnRlcm5hbGx5IGdlbmVyYXRlZCBmb3IgVGFibGVMaWtlQ2xhdXNlICov CiB9IEFsdGVyVGFibGVTdG10OwogCiB0eXBlZGVmIGVudW0gQWx0ZXJUYWJsZVR5cGUKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCBiL3NyYy9pbmNsdWRlL3Rjb3Av ZGRsX2RlcGFyc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45YzI1 NDljOTRjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5o CkBAIC0wLDAgKzEsMjMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9kZXBhcnNl LmgKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwg UmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1 ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5k ZWYgRERMX0RFUEFSU0VfSAorI2RlZmluZSBERExfREVQQVJTRV9ICisKKyNpbmNsdWRlICJ0Y29w L2RlcGFyc2VfdXRpbGl0eS5oIgorCitleHRlcm4gY2hhciAqZGVwYXJzZV91dGlsaXR5X2NvbW1h bmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSk7CitleHRlcm4gY2hh ciAqZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoY2hhciAqanNvbmIpOworZXh0ZXJuIGNoYXIg KmRlcGFyc2VfZHJvcF9jb21tYW5kKGNvbnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFy ICpvYmplY3R0eXBlLAorCQkJCQkJCQkgIERyb3BCZWhhdmlvciBiZWhhdmlvcik7CisKKworI2Vu ZGlmCQkJCQkJCS8qIERETF9ERVBBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rj b3AvZGVwYXJzZV91dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5o CmluZGV4IDk0ZGUxM2Q5OTAuLmExZGQyNDg4MWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rj b3AvZGVwYXJzZV91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxp dHkuaApAQCAtMjksNyArMjksOCBAQCB0eXBlZGVmIGVudW0gQ29sbGVjdGVkQ29tbWFuZFR5cGUK IAlTQ1RfQWx0ZXJPcEZhbWlseSwKIAlTQ1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlcywKIAlTQ1Rf Q3JlYXRlT3BDbGFzcywKLQlTQ1RfQWx0ZXJUU0NvbmZpZworCVNDVF9BbHRlclRTQ29uZmlnLAor CVNDVF9DcmVhdGVUYWJsZUFzCiB9IENvbGxlY3RlZENvbW1hbmRUeXBlOwogCiAvKgpAQCAtMzks NiArNDAsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRBVFN1YmNtZAogewogCU9iamVjdEFk ZHJlc3MgYWRkcmVzczsJCS8qIGFmZmVjdGVkIGNvbHVtbiwgY29uc3RyYWludCwgaW5kZXgsIC4u LiAqLwogCU5vZGUJICAgKnBhcnNldHJlZTsKKwljaGFyCSAgICp1c2luZ2V4cHI7CiB9IENvbGxl Y3RlZEFUU3ViY21kOwogCiB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCkBAIC02Miw2 ICs2NCw3IEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJT2lkCQkJ b2JqZWN0SWQ7CiAJCQlPaWQJCQljbGFzc0lkOworCQkJYm9vbAkJcmV3cml0ZTsKIAkJCUxpc3QJ ICAgKnN1YmNtZHM7CiAJCX0JCQlhbHRlclRhYmxlOwogCkBAIC0xMDAsNiArMTAzLDEyIEBAIHR5 cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJT2JqZWN0VHlwZQlvYmp0eXBl OwogCQl9CQkJZGVmcHJpdnM7CisKKwkJc3RydWN0CisJCXsKKwkJCU9iamVjdEFkZHJlc3MgYWRk cmVzczsKKwkJCU5vZGUJCSAqcmVhbF9jcmVhdGU7CisJCX0JCQljdGFzOwogCX0JCQlkOwogCiAJ c3RydWN0IENvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsJLyogd2hlbiBuZXN0ZWQgKi8KZGlmZiAt LWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNjBjNzFkMDVmZS4uZmUzMzBiNDA4NCAxMDA2NDQKLS0t IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2MTAsNiArMTYxMCw5IEBAIE9TSW5mbwogT1NTTENpcGhl cgogT1NTTERpZ2VzdAogT1ZFUkxBUFBFRAorT2JqRWxlbQorT2JqVHJlZQorT2JqVHlwZQogT2Jq ZWN0QWNjZXNzRHJvcAogT2JqZWN0QWNjZXNzTmFtZXNwYWNlU2VhcmNoCiBPYmplY3RBY2Nlc3NQ b3N0QWx0ZXIKQEAgLTMxNzcsNiArMzE4MCw3IEBAIGNvbXBhcmVfY29udGV4dAogY29uZmlnX3Zh cl92YWx1ZQogY29udGFpbl9hZ2dzX29mX2xldmVsX2NvbnRleHQKIGNvbnZlcnRfdGVzdGV4cHJf Y29udGV4dAorY29udlNwZWNpZmllcgogY29weV9kYXRhX2Rlc3RfY2IKIGNvcHlfZGF0YV9zb3Vy Y2VfY2IKIGNvcmVfWVlTVFlQRQotLSAKMi4zNC4xCgo= --000000000000aabe2b05f059cb57--