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 1p7NeM-0006tq-M1 for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Dec 2022 21:26:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p7NeL-0001Qc-30 for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Dec 2022 21:26:17 +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 1p7NeK-0001QN-5E for pgsql-hackers@lists.postgresql.org; Mon, 19 Dec 2022 21:26:16 +0000 Received: from mail-yb1-xb35.google.com ([2607:f8b0:4864:20::b35]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1p7NeG-0001rG-UM for pgsql-hackers@lists.postgresql.org; Mon, 19 Dec 2022 21:26:15 +0000 Received: by mail-yb1-xb35.google.com with SMTP id c140so10932294ybf.11 for ; Mon, 19 Dec 2022 13:26:12 -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=p+CmRHeTdX2dJAaYkWQvbUVMHDxp1xY9zA6fwj8EgWY=; b=itpXmLMjSR1gFs6EUwe8J6GwBLBRVUwvjPD/QwsE0FHmwA50EzT1OhvBkqPr23JQ6h vfFRWZXQsiTd8B8/VqalKEBuShC96l7/8hydcHmiKVmwNSfCA+C8HWxDYVJmWIADv1rf ZzDplwi47DI4+KkAYgrGoCxcI8PwrgfafmKaAFItMYfWI5q4yw4v8siMMAA8op3o9sj7 TpOAWYBuydcF8tOzgFdT1g6PDujxaQNJIzYESjvVQVdJinwswg4yRyMQmtzHIg8zbB11 skV//XfgyNlSekkCpps8dQT5SqjtZ6j4hncS04g0Gt8NwmS4F9a6KPvlTsPm+DOE45cJ xN/Q== 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=p+CmRHeTdX2dJAaYkWQvbUVMHDxp1xY9zA6fwj8EgWY=; b=WdEfGaDmewRIiKnPTRrwc2huc62SWOlgMlxH5B/KjsKQo7ePWj6Q6OKoUvO/oBIoy0 VkiFSQAURZcMAMQJGaH0PlUC1DeMD1xOsVK5U82UZXLAAMaxAVFYeHMs34npLQfzD7BS JeO+LWB7ctEGG28/hJ6O+eVzc5EhIx5lr/WGAPt1tSJzScjG6qK1C3N+CDUBXOtyedmJ S+53JDehqwHmOxmXAIcNAR5KSTYYvn4ybXsBvRl4ag12xS4wv/yv1dD0C2Msy++I9tj5 muDf82MUNylSs4ka1OeXGdMMjSdkt0iEbUglUeP5TylWYC3XRzxk/lb2wl8ZA5Zn2oGQ OSNA== X-Gm-Message-State: ANoB5pkQZ6SBMHKBYM7mRHA9YOQiAjHr1Ec1bg/0kPC8zh6yNGztsCih F7ZK80V8Eh/xlA15tzb/k9GYCeTwTpEGNf4JWLs= X-Google-Smtp-Source: AA0mqf5iMqyNGw6KWkYz3gU+fcTz0wjxtbeRdkp3VHkGrfHnjed+pIdcQuy9GLOJCLkwGo1IRKbJKfdLj22ALqHZEY0= X-Received: by 2002:a25:3545:0:b0:707:335a:3a6a with SMTP id c66-20020a253545000000b00707335a3a6amr11551580yba.286.1671485170891; Mon, 19 Dec 2022 13:26:10 -0800 (PST) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: Zheng Li Date: Mon, 19 Dec 2022 16:25:59 -0500 Message-ID: Subject: Re: Support logical replication of DDLs To: li jie Cc: vignesh C , 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="000000000000dc11ed05f034f7ed" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000dc11ed05f034f7ed Content-Type: text/plain; charset="UTF-8" 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. Regards, Zheng --000000000000dc11ed05f034f7ed Content-Type: application/octet-stream; name="v54-0005-Skip-ALTER-TABLE-subcommands-generated-for-TableLike.patch" Content-Disposition: attachment; filename="v54-0005-Skip-ALTER-TABLE-subcommands-generated-for-TableLike.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbvamj7y4 RnJvbSBkNjQyMjRhMzVjZGY2Y2IwOTdlN2RhZWY4MmI0MTJjMDNiYWFlNjZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTkgRGVjIDIwMjIgMDc6Mzc6NTUgLTA1MDAKU3ViamVjdDogW1BBVENI IDUvN10gU2tpcCBBTFRFUiBUQUJMRSBzdWJjb21tYW5kcyBnZW5lcmF0ZWQgZm9yCiBUYWJsZUxp a2VDbGF1c2UgaW4gdGhlIERETCBkZXBhcnNlciB0byBhdm9pZCBkdXBsaWNhdGVkIHN1YmNvbW1h bmRzLgoKLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIHwgMTAgKysrKysr KysrKwogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYyB8ICAxICsKIHNyYy9pbmNs dWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgfCAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDEyIGlu c2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJz ZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwppbmRleCA0OWI1YmU5NzBl Li5jMzkzOTg1MzgzIDEwMDc1NQotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJz ZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKQEAgLTMyODUsOCAr MzI4NSwxOCBAQCBkZXBhcnNlX0FsdGVyUmVsYXRpb24oQ29sbGVjdGVkQ29tbWFuZCAqY21kKQog CWJvb2wJCWlzdGFibGUgPSBmYWxzZTsKIAlMaXN0CSAgICpleHBycyA9IE5JTDsKIAlPaWQJCQly ZWxJZCA9IGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkOworCUFsdGVyVGFibGVTdG10ICpzdG10 ID0gTlVMTDsKIAogCUFzc2VydChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVGFibGUpOworCXN0bXQg PSAoQWx0ZXJUYWJsZVN0bXQgKikgY21kLT5wYXJzZXRyZWU7CisJQXNzZXJ0KElzQShzdG10LCBB bHRlclRhYmxlU3RtdCkpOworCisJLyoKKwkgKiBBTFRFUiBUQUJMRSBzdWJjb21tYW5kcyBnZW5l cmF0ZWQgZm9yIFRhYmxlTGlrZUNsYXVzZSBpcyBwcm9jZXNzZWQgaW4KKwkgKiB0aGUgdG9wIGxl dmVsIENSRUFURSBUQUJMRSBjb21tYW5kOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAo c3RtdC0+dGFibGVfbGlrZSkKKwkJcmV0dXJuIE5VTEw7CiAKIAlyZWwgPSByZWxhdGlvbl9vcGVu KHJlbElkLCBBY2Nlc3NTaGFyZUxvY2spOwogCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9m b3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV91dGlsY21kLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNt ZC5jCmluZGV4IGY3NDNjZDU0OGMuLjE2OTY3NDY4YjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV91dGlsY21kLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0 aWxjbWQuYwpAQCAtMTM5Nyw2ICsxMzk3LDcgQEAgZXhwYW5kVGFibGVMaWtlQ2xhdXNlKFJhbmdl VmFyICpoZWFwUmVsLCBUYWJsZUxpa2VDbGF1c2UgKnRhYmxlX2xpa2VfY2xhdXNlKQogCQlhdGNt ZC0+Y21kcyA9IGF0c3ViY21kczsKIAkJYXRjbWQtPm9ianR5cGUgPSBPQkpFQ1RfVEFCTEU7CiAJ CWF0Y21kLT5taXNzaW5nX29rID0gZmFsc2U7CisJCWF0Y21kLT50YWJsZV9saWtlID0gdHJ1ZTsK IAkJcmVzdWx0ID0gbGNvbnMoYXRjbWQsIHJlc3VsdCk7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVz LmgKaW5kZXggMzRiYzY0MGZmMi4uMjYzYzBlMjdjMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApA QCAtMTk3Myw2ICsxOTczLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQWx0ZXJUYWJsZVN0bXQKIAlMaXN0 CSAgICpjbWRzOwkJCS8qIGxpc3Qgb2Ygc3ViY29tbWFuZHMgKi8KIAlPYmplY3RUeXBlCW9ianR5 cGU7CQkvKiB0eXBlIG9mIG9iamVjdCAqLwogCWJvb2wJCW1pc3Npbmdfb2s7CQkvKiBza2lwIGVy cm9yIGlmIHRhYmxlIG1pc3NpbmcgKi8KKwlib29sICAgICAgICB0YWJsZV9saWtlOwkJLyogaW50 ZXJuYWxseSBnZW5lcmF0ZWQgZm9yIFRhYmxlTGlrZUNsYXVzZSAqLwogfSBBbHRlclRhYmxlU3Rt dDsKIAogdHlwZWRlZiBlbnVtIEFsdGVyVGFibGVUeXBlCi0tIAoyLjM4LjEKCg== --000000000000dc11ed05f034f7ed Content-Type: application/octet-stream; name="v54-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v54-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbvamj7x2 RnJvbSAxOWIzZGZlYzUxNzY3YTMwMThiMjljNWFjOGUyZjJmZWZlOGM5NTc3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTkgRGVjIDIwMjIgMDc6MDU6NDcgLTA1MDAKU3ViamVjdDogW1BBVENI IDMvN10gU3VwcG9ydCBDUkVBVEUgVEFCTEUgQVMgU0VMRUNUIElOVE8KClRoZSBtYWluIGlkZWEg b2YgcmVwbGljYXRpbmcgdGhlIENSRUFURSBUQUJMRSBBUyBpcyB0aGF0IHdlIGRlcHJhc2UgdGhl IENSRUFURQpUQUJMRSBBUyBpbnRvIGEgc2ltcGxlIENSRUFURSBUQUJMRSh3aXRob3V0IHN1YnF1 ZXJ5KSBjb21tYW5kIGFuZCBXQUwgbG9nIGl0CmFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBhbmQg YmVmb3JlIHdyaXRpbmcgZGF0YSBpbnRvIHRoZSB0YWJsZSBhbmQgcmVwbGljYXRlCnRoZSBpbmNv bWluZyB3cml0ZXMgbGF0ZXIgYXMgbm9ybWFsIElOU0VSVHMuIEluIHRoaXMgYXBwb3JhY2gsIHdl IGRvbid0IGV4ZWN1dGUKdGhlIHN1YnF1ZXJ5IG9uIHN1YnNjcmliZXIgc28gdGhhdCBkb24ndCBu ZWVkIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIG9iamVjdHMKcmVmZXJlbmNlZCBpbiB0aGUgc3VicXVl cnkgYWxzbyBleGlzdHMgaW4gc3Vic2NyaWJlci4gQW5kIFRoaXMgYXBwcm9hY2ggd29ya3MKZm9y IGFsbCBraW5kIG9mIGNvbW1hbmRzKGUuZy4gQ1JBRVRFIFRBQkxFIEFTIFtTRUxFQ1RdW0VYRUNV VEVdW1ZBTFVFU10pCgpJbnRyb2R1Y2luZyBhIG5ldyB0eXBlIG9mIGV2ZW50IHRyaWdnZXIgInRh YmxlX2luaXRfd3JpdGUiLiB3aGljaCB3b3VsZCBiZSBmaXJlZApmb3IgQ1JFQVRFIFRBQkxFIEFT L1NFTEVDVCBJTlRPIGFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBhbmQKYmVmb3JlIGFueSBvdGhl ciBtb2RpZmljYXRpb24uIHdlIGRlcGFyc2UgdGhlIGNvbW1hbmQgaW4gdGhlIHRhYmxlX2luaXRf d3JpdGUgZXZlbnQKdHJpZ2dlciBhbmQgV0FMIGxvZyB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcu IFRoZSB3YWxzZW5kZXIgd2lsbCBzZW5kIHRoZQpzdHJpbmcgdG8gc3Vic2NyaWJlci4gQW5kIGlu Y29taW5nIElOU0VSVHMgd2lsbCBhbHNvIGJlIHJlcGxpY2F0ZWQuCi0tLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvY3JlYXRlYXMuYyAgICAgICAgfCAgMTAgKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9kZXBhcnNlLmMgICAgIHwgIDIyICsrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5jICAgfCAxOTIgKysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgfCAgIDkgKysKIHNyYy9iYWNrZW5kL3Rjb3AvdXRp bGl0eS5jICAgICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNh Y2hlLmMgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAg IHwgICAzICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCAgIHwgICA0ICsK IHNyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggICAgIHwgICA5ICstCiBzcmMvaW5j bHVkZS91dGlscy9ldnRjYWNoZS5oICAgICAgICAgICB8ICAgMyArLQogMTAgZmlsZXMgY2hhbmdl ZCwgMjUxIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFz LmMKaW5kZXggMTUyYzI5YjU1MS4uYjc3OTVkYTg3ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY3JlYXRlYXMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5j CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNs dWRlICJjYXRhbG9nL3RvYXN0aW5nLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvY3JlYXRlYXMuaCIK KyNpbmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMv bWF0dmlldy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ByZXBhcmUuaCIKICNpbmNsdWRlICJjb21t YW5kcy90YWJsZWNtZHMuaCIKQEAgLTE0Myw2ICsxNDQsMTUgQEAgY3JlYXRlX2N0YXNfaW50ZXJu YWwoTGlzdCAqYXR0ckxpc3QsIEludG9DbGF1c2UgKmludG8pCiAJCVN0b3JlVmlld1F1ZXJ5KGlu dG9SZWxhdGlvbkFkZHIub2JqZWN0SWQsIHF1ZXJ5LCBmYWxzZSk7CiAJCUNvbW1hbmRDb3VudGVy SW5jcmVtZW50KCk7CiAJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIEZpcmUgdGhlIHRyaWdnZXIg Zm9yIHRhYmxlX2luaXRfd3JpdGUgYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIHNvCisJCSAqIHRo YXQgd2UgY2FuIGFjY2VzcyB0aGUgY2F0YWxvZyBpbmZvIGFib3V0IHRoZSBuZXdseSBjcmVhdGVk IHRhYmxlCisJCSAqIGluIHRoZSB0cmlnZ2VyIGZ1bmN0aW9uLgorCQkgKi8KKwkJRXZlbnRUcmln Z2VyVGFibGVJbml0V3JpdGUoKE5vZGUgKikgY3JlYXRlLCBpbnRvUmVsYXRpb25BZGRyKTsKKwl9 CiAKIAlyZXR1cm4gaW50b1JlbGF0aW9uQWRkcjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJz ZS5jCmluZGV4IDg1N2Y5NDkzM2UuLjQ5YjViZTk3MGUgMTAwNzU1Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2Rl cGFyc2UuYwpAQCAtODQ1OCw2ICs4NDU4LDI1IEBAIGRlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KEZv cm1fcGdfdHlwZSB0eXBGb3JtKQogCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOwogfQog CisvKgorICogRGVwYXJzZSBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqCisgKiBkZXBhcnNl X0NyZWF0ZVN0bXQgZG8gdGhlIGFjdHVhbCB3b3JrIGFzIHdlIGRlcGFyc2UgdGhlIGZpbmFsIENy ZWF0ZVN0bXQgZm9yCisgKiBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQp Cit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJQXNzZXJ0KGNt ZC0+dHlwZSA9PSBTQ1RfQ3JlYXRlVGFibGVBcyk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPmQuY3Rh cy5yZWFsX2NyZWF0ZTsKKwlvYmplY3RJZCA9IGNtZC0+ZC5jdGFzLmFkZHJlc3Mub2JqZWN0SWQ7 CisKKwlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworfQog CiAvKgogICogRGVwYXJzZSB0aGUgdHlwZSBhbmFseXplIG9wdGlvbi4KQEAgLTkyMTksNiArOTIz OCw5IEBAIGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9v bCB2ZXJib3NlX21vZGUpCiAJCWNhc2UgU0NUX0dyYW50OgogCQkJdHJlZSA9IGRlcGFyc2VfR3Jh bnRTdG10KGNtZCk7CiAJCQlicmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKKwkJCXRy ZWUgPSBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KGNtZCk7CisJCQlicmVhazsKIAkJY2FzZSBT Q1RfQWx0ZXJPcEZhbWlseToKIAkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyT3BGYW1pbHkoY21kKTsK IAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4IDU2MTgyOWMx MGMuLjVlOTU2ODBhNzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAgLTEz Myw3ICsxMzMsOCBAQCBDcmVhdGVFdmVudFRyaWdnZXIoQ3JlYXRlRXZlbnRUcmlnU3RtdCAqc3Rt dCkKIAlpZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX3N0YXJ0IikgIT0g MCAmJgogCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfZW5kIikgIT0gMCAm JgogCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ryb3AiKSAhPSAwICYmCi0JCXN0cmNt cChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9yZXdyaXRlIikgIT0gMCkKKwkJc3RyY21wKHN0bXQt PmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAwICYmCisJCXN0cmNtcChzdG10LT5ldmVu dG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikgIT0gMCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQko ZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAJCQkJIGVycm1zZygidW5yZWNvZ25pemVk IGV2ZW50IG5hbWUgXCIlc1wiIiwKQEAgLTE1OSw3ICsxNjAsOCBAQCBDcmVhdGVFdmVudFRyaWdn ZXIoQ3JlYXRlRXZlbnRUcmlnU3RtdCAqc3RtdCkKIAkvKiBWYWxpZGF0ZSB0YWcgbGlzdCwgaWYg YW55LiAqLwogCWlmICgoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX3N0YXJ0 IikgPT0gMCB8fAogCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX2VuZCIp ID09IDAgfHwKLQkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpID09IDApCisJ CSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ryb3AiKSA9PSAwIHx8CisJCSBzdHJjbXAo c3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfaW5pdF93cml0ZSIpID09IDApCiAJCSYmIHRhZ3MgIT0g TlVMTCkKIAkJdmFsaWRhdGVfZGRsX3RhZ3MoInRhZyIsIHRhZ3MpOwogCWVsc2UgaWYgKHN0cmNt cChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9yZXdyaXRlIikgPT0gMApAQCAtNTg1LDcgKzU4Nyw4 IEBAIEV2ZW50VHJpZ2dlckNvbW1vblNldHVwKE5vZGUgKnBhcnNldHJlZSwKIAkJZGJndGFnID0g Q3JlYXRlQ29tbWFuZFRhZyhwYXJzZXRyZWUpOwogCQlpZiAoZXZlbnQgPT0gRVZUX0RETENvbW1h bmRTdGFydCB8fAogCQkJZXZlbnQgPT0gRVZUX0RETENvbW1hbmRFbmQgfHwKLQkJCWV2ZW50ID09 IEVWVF9TUUxEcm9wKQorCQkJZXZlbnQgPT0gRVZUX1NRTERyb3AgfHwKKwkJCWV2ZW50ID09IEVW VF9UYWJsZUluaXRXcml0ZSkKIAkJewogCQkJaWYgKCFjb21tYW5kX3RhZ19ldmVudF90cmlnZ2Vy X29rKGRiZ3RhZykpCiAJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgY29tbWFuZCB0YWcgXCIl c1wiIiwgR2V0Q29tbWFuZFRhZ05hbWUoZGJndGFnKSk7CkBAIC04NjgsNiArODcxLDE4MyBAQCBF dmVudFRyaWdnZXJUYWJsZVJld3JpdGUoTm9kZSAqcGFyc2V0cmVlLCBPaWQgdGFibGVPaWQsIGlu dCByZWFzb24pCiAJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKIH0KIAorCisvKgorICogRXZl bnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydAorICogICAgIFByZXBhcmUgdG8gcmVjZWl2ZSBk YXRhIG9uIGFuIENSRUFURSBUQUJMRSBBUy9TRUxFVCBJTlRPIGNvbW1hbmQgYWJvdXQKKyAqICAg ICB0byBiZSBleGVjdXRlZC4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVT dGFydChOb2RlICpwYXJzZXRyZWUpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJQ29sbGVj dGVkQ29tbWFuZCAqY29tbWFuZDsKKwlDcmVhdGVUYWJsZUFzU3RtdCAqc3RtdCA9IChDcmVhdGVU YWJsZUFzU3RtdCAqKXBhcnNldHJlZTsKKworCS8qIGlnbm9yZSBpZiBldmVudCB0cmlnZ2VyIGNv bnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlmICghY3VycmVudEV2 ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENv bGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN4dCk7CisKKwljb21tYW5kID0gcGFs bG9jKHNpemVvZihDb2xsZWN0ZWRDb21tYW5kKSk7CisKKwljb21tYW5kLT50eXBlID0gKHN0bXQt Pm9ianR5cGUgPT0gT0JKRUNUX1RBQkxFKSA/IFNDVF9DcmVhdGVUYWJsZUFzIDogU0NUX1NpbXBs ZTsKKwljb21tYW5kLT5pbl9leHRlbnNpb24gPSBjcmVhdGluZ19leHRlbnNpb247CisJY29tbWFu ZC0+ZC5jdGFzLmFkZHJlc3MgPSBJbnZhbGlkT2JqZWN0QWRkcmVzczsKKwljb21tYW5kLT5kLmN0 YXMucmVhbF9jcmVhdGUgPSBOVUxMOworCWNvbW1hbmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3Qo cGFyc2V0cmVlKTsKKworCWNvbW1hbmQtPnBhcmVudCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0 ZS0+Y3VycmVudENvbW1hbmQ7CisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29t bWFuZCA9IGNvbW1hbmQ7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKwor LyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kCisgKgkJRmluaXNoIHVwIHNhdmlu ZyBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRUNUIElOVE8gY29tbWFuZC4KKyAqCisgKiBGSVhNRSB0 aGlzIEFQSSBpc24ndCBjb25zaWRlcmluZyB0aGUgcG9zc2liaWxpdHkgdGhhdCBhbiB4YWN0L3N1 YnhhY3QgaXMKKyAqIGFib3J0ZWQgcGFydHdheSB0aHJvdWdoLiAgUHJvYmFibHkgaXQncyBiZXN0 IHRvIGFkZCBhbgorICogQXRFT1N1YlhhY3RfRXZlbnRUcmlnZ2VycygpIHRvIGZpeCB0aGlzLgor ICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZChPYmplY3RBZGRyZXNzIGFk ZHJlc3MpCit7CisJQ29sbGVjdGVkQ29tbWFuZCAqcGFyZW50OworCUNyZWF0ZVRhYmxlQXNTdG10 ICpzdG10OworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBv ciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUg fHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRl ZCkKKwkJcmV0dXJuOworCisJc3RtdCA9ICAoQ3JlYXRlVGFibGVBc1N0bXQgKiljdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5wYXJzZXRyZWU7CisKKwlpZiAoc3RtdC0+ b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUpCisJeworCQlwYXJlbnQgPSBjdXJyZW50RXZlbnRUcmln Z2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5wYXJlbnQ7CisKKwkJcGZyZWUoY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCk7CisKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5jdXJyZW50Q29tbWFuZCA9IHBhcmVudDsKKwl9CisJZWxzZQorCXsKKwkJTWVtb3J5Q29u dGV4dCBvbGRjeHQ7CisKKwkJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1 cnJlbnRDb21tYW5kLT5kLnNpbXBsZS5hZGRyZXNzID0gYWRkcmVzczsKKwkJY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jb21tYW5kTGlzdCA9CisJCQlsYXBwZW5kKGN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y29tbWFuZExpc3QsCisJCQkJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3Vy cmVudENvbW1hbmQpOworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCX0KK30K KworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZQorICoKKyAqIERl cGFyc2UgdGhlIGRkbCB0YWJsZSBjcmVhdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1 bQorcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJY2hhcgkJcmVscGVyc2lzdDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQ7CisJY2hhcgkg ICAqanNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykp CisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisK KwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCUFzc2Vy dChjbWQpOworCisJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLnNpbXBs ZS5hZGRyZXNzLm9iamVjdElkKTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cg Zm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRhYmxl LgorCSAqCisJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVz IHNvIHRoYXQgdW5sb2dnZWQgdGFibGVzCisJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0 ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2libGUg dG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWlu ZworCSAqIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAq LworCWlmIChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQb2lu dGVyR2V0RGF0dW0oTlVMTCk7CisKKwkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FM IGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmluZyA9 IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3RyaW5n ICE9IE5VTEwpCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLnNpbXBs ZS5hZGRyZXNzLm9iamVjdElkLCBEQ1RfU2ltcGxlQ21kLAorCQkJCQkJCSBqc29uX3N0cmluZywg c3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxM KTsKK30KKworLyoKKyAqIEZpcmUgdGFibGVfaW5pdF9yZXdyaXRlIHRyaWdnZXJzLgorICovCit2 b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpyZWFsX2NyZWF0ZSwgT2JqZWN0 QWRkcmVzcyBhZGRyZXNzKQoreworCUxpc3QJICAgKnJ1bmxpc3Q7CisJRXZlbnRUcmlnZ2VyRGF0 YSB0cmlnZGF0YTsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyoKKwkgKiBTZWUg RXZlbnRUcmlnZ2VyRERMQ29tbWFuZFN0YXJ0IGZvciBhIGRpc2N1c3Npb24gYWJvdXQgd2h5IGV2 ZW50CisJICogdHJpZ2dlcnMgYXJlIGRpc2FibGVkIGluIHNpbmdsZSB1c2VyIG1vZGUuCisJICov CisJaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbHNvIGRv IG5vdGhpbmcgaWYgb3VyIHN0YXRlIGlzbid0IHNldCB1cCwgd2hpY2ggaXQgd29uJ3QgYmUgaWYg dGhlcmUKKwkgKiB3ZXJlbid0IGFueSByZWxldmFudCBldmVudCB0cmlnZ2VycyBhdCB0aGUgc3Rh cnQgb2YgdGhlIGN1cnJlbnQgRERMCisJICogY29tbWFuZC4gIFRoaXMgdGVzdCBtaWdodCB0aGVy ZWZvcmUgc2VlbSBvcHRpb25hbCwgYnV0IGl0J3MKKwkgKiAqbmVjZXNzYXJ5KiwgYmVjYXVzZSBF dmVudFRyaWdnZXJDb21tb25TZXR1cCBtaWdodCBmaW5kIHRyaWdnZXJzIHRoYXQKKwkgKiBkaWRu J3QgZXhpc3QgYXQgdGhlIHRpbWUgdGhlIGNvbW1hbmQgc3RhcnRlZC4KKwkgKi8KKwlpZiAoIWN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSkKKwkJcmV0dXJuOworCisJLyogRG8gbm90aGluZyBpZiBu byBjb21tYW5kIHdhcyBjb2xsZWN0ZWQuICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3Rh dGUtPmN1cnJlbnRDb21tYW5kKQorCQlyZXR1cm47CisKKwljb21tYW5kID0gY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCXJ1bmxpc3QgPSBFdmVudFRyaWdnZXJD b21tb25TZXR1cChjb21tYW5kLT5wYXJzZXRyZWUsCisJCQkJCQkJCQkgIEVWVF9UYWJsZUluaXRX cml0ZSwKKwkJCQkJCQkJCSAgInRhYmxlX2luaXRfd3JpdGUiLAorCQkJCQkJCQkJICAmdHJpZ2Rh dGEpOworCWlmIChydW5saXN0ID09IE5JTCkKKwkJcmV0dXJuOworCisJLyogU2V0IHRoZSByZWFs IENyZWF0ZVRhYmxlIHN0YXRtZW50IGFuZCBvYmplY3QgYWRkcmVzcyAqLworCWNvbW1hbmQtPmQu Y3Rhcy5yZWFsX2NyZWF0ZSA9IHJlYWxfY3JlYXRlOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRyZXNz ID0gYWRkcmVzczsKKworCS8qIFJ1biB0aGUgdHJpZ2dlcnMuICovCisJRXZlbnRUcmlnZ2VySW52 b2tlKHJ1bmxpc3QsICZ0cmlnZGF0YSk7CisKKwkvKiBDbGVhbnVwLiAqLworCWxpc3RfZnJlZShy dW5saXN0KTsKKworCS8qCisJICogTWFrZSBzdXJlIGFueXRoaW5nIHRoZSBldmVudCB0cmlnZ2Vy cyBkaWQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBtYWluCisJICogY29tbWFuZC4KKwkgKi8KKwlD b21tYW5kQ291bnRlckluY3JlbWVudCgpOworfQorCiAvKgogICogSW52b2tlIGVhY2ggZXZlbnQg dHJpZ2dlciBpbiBhIGxpc3Qgb2YgZXZlbnQgdHJpZ2dlcnMuCiAgKi8KQEAgLTExNDksNyArMTMy OSw4IEBAIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCkKIAkgKi8KIAlyZXR1cm4gKEV2 ZW50Q2FjaGVMb29rdXAoRVZUX1NRTERyb3ApICE9IE5JTCkgfHwKIAkJKEV2ZW50Q2FjaGVMb29r dXAoRVZUX1RhYmxlUmV3cml0ZSkgIT0gTklMKSB8fAotCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRf RERMQ29tbWFuZEVuZCkgIT0gTklMKTsKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RETENvbW1h bmRFbmQpICE9IE5JTCkgfHwKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1RhYmxlSW5pdFdyaXRl KSAhPSBOSUwpOwogfQogCiAvKgpAQCAtMTg2OCw2ICsyMDQ5LDcgQEAgcGdfZXZlbnRfdHJpZ2dl cl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCWNhc2UgU0NUX0FsdGVyT3BGYW1p bHk6CiAJCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgogCQkJY2FzZSBTQ1RfQWx0ZXJUU0NvbmZp ZzoKKwkJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CiAJCQkJewogCQkJCQljaGFyCSAgICppZGVu dGl0eTsKIAkJCQkJY2hhcgkgICAqdHlwZTsKQEAgLTE4ODUsNiArMjA2Nyw4IEBAIHBnX2V2ZW50 X3RyaWdnZXJfZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQlhZGRyID0gY21k LT5kLmNyZWF0ZW9wYy5hZGRyZXNzOwogCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0Fs dGVyVFNDb25maWcpCiAJCQkJCQlhZGRyID0gY21kLT5kLmF0c2NmZy5hZGRyZXNzOworCQkJCQll bHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCisJCQkJCQlhZGRyID0gY21k LT5kLmN0YXMuYWRkcmVzczsKIAogCQkJCQkvKgogCQkJCQkgKiBJZiBhbiBvYmplY3Qgd2FzIGRy b3BwZWQgaW4gdGhlIHNhbWUgY29tbWFuZCB3ZSBtYXkgZW5kCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1 YmxpY2F0aW9uY21kcy5jCmluZGV4IGU5ODkwNDZkNTQuLjM1ZTBlMDYxOGMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC0xMDI0LDYgKzEwMjQsMTEgQEAgQ3JlYXRl UHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0 bXQpCiAJCQlDTURUQUdfU0VDVVJJVFlfTEFCRUwsCiAJfTsKIAorCUNvbW1hbmRUYWcJaW5pdF9j b21tYW5kc1tdID0geworCQlDTURUQUdfQ1JFQVRFX1RBQkxFX0FTLAorCQlDTURUQUdfU0VMRUNU X0lOVE8KKwl9OworCiAJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdn ZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5kIiwg ZW5kX2NvbW1hbmRzLAogCQkJCQkJCQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2VsZiwg cHVib2lkKTsKQEAgLTEwMzUsNiArMTA0MCwxMCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0 YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJLyogQ3JlYXRlIHRo ZSB0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50 VHJpZ2dlcigidGFibGVfcmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMsCiAJCQkJCQkJCQkgbGVu Z3Rob2YocmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUg dGhlIHRhYmxlX2luaXRfd3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNh RXZlbnRUcmlnZ2VyKCJ0YWJsZV9pbml0X3dyaXRlIiwgaW5pdF9jb21tYW5kcywKKwkJCQkJCQkJ CSBsZW5ndGhvZihpbml0X2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOwogCX0KIAogCXRhYmxl X2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90 Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4IGYxMjE1Yzhl MTguLjI5YTMxNDQ5Y2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisr KyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCkBAIC0xNjY2LDggKzE2NjYsMTEgQEAgUHJv Y2Vzc1V0aWxpdHlTbG93KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQlicmVhazsKIAogCQkJY2Fz ZSBUX0NyZWF0ZVRhYmxlQXNTdG10OgorCQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3Rh cnQocGFyc2V0cmVlKTsKIAkJCQlhZGRyZXNzID0gRXhlY0NyZWF0ZVRhYmxlQXMocHN0YXRlLCAo Q3JlYXRlVGFibGVBc1N0bXQgKikgcGFyc2V0cmVlLAogCQkJCQkJCQkJCQlwYXJhbXMsIHF1ZXJ5 RW52LCBxYyk7CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQoYWRkcmVzcyk7CisJ CQkJY29tbWFuZENvbGxlY3RlZCA9IHRydWU7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgVF9SZWZy ZXNoTWF0Vmlld1N0bXQ6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRj YWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYwppbmRleCBmN2Y3MTY1 ZjdmLi43ZmI4Y2IyOTFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRj YWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMKQEAgLTE2Nyw2 ICsxNjcsOCBAQCBCdWlsZEV2ZW50VHJpZ2dlckNhY2hlKHZvaWQpCiAJCQlldmVudCA9IEVWVF9T UUxEcm9wOwogCQllbHNlIGlmIChzdHJjbXAoZXZ0ZXZlbnQsICJ0YWJsZV9yZXdyaXRlIikgPT0g MCkKIAkJCWV2ZW50ID0gRVZUX1RhYmxlUmV3cml0ZTsKKwkJZWxzZSBpZiAoc3RyY21wKGV2dGV2 ZW50LCAidGFibGVfaW5pdF93cml0ZSIpID09IDApCisJCQlldmVudCA9IEVWVF9UYWJsZUluaXRX cml0ZTsKIAkJZWxzZQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4 IDBhMjk5ZGYxNTIuLjcwZWY5NWM2M2IgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE4 ODQsNCArMTE4ODQsNyBAQAogeyBvaWQgPT4gJzQ2NDYnLCBkZXNjciA9PiAndHJpZ2dlciBmb3Ig ZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSByZXdyaXRlJywKICAgcHJvbmFtZSA9PiAncHVibGlj YXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dl cicsCiAgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2Vf dGFibGVfcmV3cml0ZScgfSwKK3sgb2lkID0+ICc0NjQ3JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9y IGRkbCBjb21tYW5kIGRlcGFyc2UgdGFibGUgaW5pdCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0 aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdn ZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNl X3RhYmxlX2luaXRfd3JpdGUnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgK aW5kZXggZmQyZWU3ZmZlNC4uYzI0MWRiMzAyMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29t bWFuZHMvZXZlbnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuaApAQCAtNTUsNiArNTUsMTAgQEAgZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRERMQ29t bWFuZEVuZChOb2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyU1FMRHJv cChOb2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVSZXdyaXRl KE5vZGUgKnBhcnNldHJlZSwgT2lkIHRhYmxlT2lkLCBpbnQgcmVhc29uKTsKIAorZXh0ZXJuIHZv aWQgRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChOb2RlICpwYXJzZXRyZWUpOworZXh0 ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGUoTm9kZSAqcGFyc2V0cmVlLCBPYmpl Y3RBZGRyZXNzIGFkZHJlc3MpOworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVJbml0V3Jp dGVFbmQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKKwogZXh0ZXJuIGJvb2wgRXZlbnRUcmlnZ2Vy QmVnaW5Db21wbGV0ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRW5kQ29t cGxldGVRdWVyeSh2b2lkKTsKIGV4dGVybiBib29sIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQo dm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIv c3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCBiNTMyOTRiZjU3Li4zZDI5 NGEwMzcxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisr KyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKQEAgLTI5LDcgKzI5LDggQEAg dHlwZWRlZiBlbnVtIENvbGxlY3RlZENvbW1hbmRUeXBlCiAJU0NUX0FsdGVyT3BGYW1pbHksCiAJ U0NUX0FsdGVyRGVmYXVsdFByaXZpbGVnZXMsCiAJU0NUX0NyZWF0ZU9wQ2xhc3MsCi0JU0NUX0Fs dGVyVFNDb25maWcKKwlTQ1RfQWx0ZXJUU0NvbmZpZywKKwlTQ1RfQ3JlYXRlVGFibGVBcwogfSBD b2xsZWN0ZWRDb21tYW5kVHlwZTsKIAogLyoKQEAgLTEwMSw2ICsxMDIsMTIgQEAgdHlwZWRlZiBz dHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZAogCQl7CiAJCQlPYmplY3RUeXBlCW9ianR5cGU7CiAJCX0J CQlkZWZwcml2czsKKworCQlzdHJ1Y3QKKwkJeworCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOwor CQkJTm9kZQkJICpyZWFsX2NyZWF0ZTsKKwkJfQkJCWN0YXM7CiAJfQkJCWQ7CiAKIAlzdHJ1Y3Qg Q29sbGVjdGVkQ29tbWFuZCAqcGFyZW50OwkvKiB3aGVuIG5lc3RlZCAqLwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hl LmgKaW5kZXggZGRiNjdhNjhmYS4uMWU2NDgzMTdhZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv dXRpbHMvZXZ0Y2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCkBAIC0y Miw3ICsyMiw4IEBAIHR5cGVkZWYgZW51bQogCUVWVF9ERExDb21tYW5kU3RhcnQsCiAJRVZUX0RE TENvbW1hbmRFbmQsCiAJRVZUX1NRTERyb3AsCi0JRVZUX1RhYmxlUmV3cml0ZQorCUVWVF9UYWJs ZVJld3JpdGUsCisJRVZUX1RhYmxlSW5pdFdyaXRlCiB9IEV2ZW50VHJpZ2dlckV2ZW50OwogCiB0 eXBlZGVmIHN0cnVjdAotLSAKMi4zOC4xCgo= --000000000000dc11ed05f034f7ed Content-Type: application/octet-stream; name="v54-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v54-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbvamj7w1 RnJvbSBlZmEzZjViYjEyZjdlNTE1YTJkYjc4NDZlMTVjMWI5ZDIxZjY1ZTI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTkgRGVjIDIwMjIgMDY6NTk6MTUgLTA1MDAKU3ViamVjdDogW1BBVENI IDIvN10gU3VwcG9ydCBEREwgcmVwbGljYXRpb24uCgpUbyBzdXBwb3J0IERETCByZXBsaWNhdGlv biwgd2UgdXNlIGV2ZW50IHRyaWdnZXIgYW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcy4gRHVy aW5nIENSRUFURSBQVUJMSUNBVElPTiB3ZSByZWdpc3RlciBhIGNvbW1hbmQgZW5kIHRyaWdnZXIg dGhhdApkZXBhcnNlcyB0aGUgRERMIGFzIGEgSlNPTiBibG9iLCBhbmQgV0FMIGxvZ3MgaXQuIFRo ZSBldmVudAp0cmlnZ2VyIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBhdCB0aGUgdGltZSBvZiBE Uk9QIFBVQkxJQ0FUSU9OLiBUaGUKV0FMU2VuZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQgc2VuZHMg aXQgZG93bnN0cmVhbSBzaW1pbGFyIHRvIG90aGVyIERNTApjb21tYW5kcy4gVGhlIHN1YnNjcmli ZXIgdGhlbiBjb252ZXJ0cyBKU09OIGJhY2sgdG8gdGhlIERETCBjb21tYW5kIHN0cmluZwphbmQg ZXhlY3V0ZXMgaXQuIEluIHRoZSBzdWJzY3JpYmVyLCB3ZSBhbHNvIGFkZCB0aGUgbmV3bHkgYWRk ZWQgcmVsIHRvCnBnX3N1YnNjcmlwdGlvbl9yZWwgc28gdGhhdCB0aGUgRE1MIGNoYW5nZXMgb24g dGhlIG5ldyB0YWJsZSBjYW4gYmUKcmVwbGljYXRlZCB3aXRob3V0IGhhdmluZyB0byBtYW51YWxs eSBydW4KIkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBQVUJMSUNBVElPTiIuCgotIEZv ciBub24tcmV3cml0ZSBBTFRFUiBvYmplY3QgY29tbWFuZCBhbmQKLSAgICAgQ1JFQVRFIG9iamVj dCBjb21tYW5kOgp3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGF0IGRkbF9jb21tYW5kX2VuZCBldmVu dCB0cmlnZ2VyIGFuZCBXQUwgbG9nIHRoZQpkZXBhcnNlZCBqc29uIHN0cmluZy4gVGhlIFdBTFNl bmRlciBkZWNvZGVzIHRoZSBXQUwgYW5kIHNlbmRzIGl0IHRvCnN1YnNjcmliZXIgaWYgdGhlIGNy ZWF0ZWQvYWx0ZXJlZCB0YWJsZSBpcyBwdWJsaXNoZWQuIEl0IHN1cHBvcnRzIG1vc3Qgb2YKQUxU RVIgVEFCTEUgY29tbWFuZCBleGNlcHQgc29tZSBjb21tYW5kcyhEREwgcmVsYXRlZCB0byBQQVJU SVRJT05FRCBUQUJMRQouLi4pIHRoYXQgaW50cm9kdWNlZCByZWNlbnRseSB3aGljaCBoYXZlbid0 IGJlZW4gc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50CmRkbF9kZXBhcnNlciwgd2Ugd2lsbCBzdXBw b3J0IHRoYXQgbGF0ZXIuCgotIEZvciBEUk9QIG9iamVjdDoKVGhlICdjb21tYW5kIHN0YXJ0JyBl dmVudCBoYW5kbGVyIGxvZ3MgYSBkZGwgbWVzc2FnZSB3aXRoIHRoZSByZWxpZHMgb2YKdGhlIHRh YmxlcyB0aGF0IGFyZSBkcm9wcGVkIHdoaWNoIHRoZSBvdXRwdXQgcGx1Z2luIChwZ291dHB1dCkg c3RvcmVzIGluCml0cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSBhZnRlciB2ZXJpZnlpbmcgdGhh dCBpdCBpcyBmb3IgYSB0YWJsZSB0aGF0IGlzCnBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uLiBMYXRl ciB0aGUgJ2NvbW1hbmQgZW5kJyBldmVudCBoYW5kbGVyIHNlbmRzIHRoZQphY3R1YWwgZHJvcCBt ZXNzYWdlLiBQZ291dHB1dCBvbiByZWNlaXZpbmcgdGhlIGNvbW1hbmQgZW5kLCBvbmx5IHNlbmRz IG91dAp0aGUgZHJvcCBjb21tYW5kIG9ubHkgaWYgaXQgaXMgZm9yIG9uZSBvZiB0aGUgcmVsaWRz IG1hcmtlZCBmb3IgZGVsZXRpbmcuClRoZSByZWFzb24gd2UgaGF2ZSB0byBkbyB0aGlzIGlzIGJl Y2F1c2UsIG9uY2UgdGhlIGxvZ2ljYWwgZGVjb2RlcgpyZWNlaXZlcyB0aGUgJ2NvbW1hbmQgZW5k JyBtZXNzYWdlLCAgdGhlIHJlbGlkIG9mIHRoZSB0YWJsZSBpcyBubyBsb25nZXIKdmFsaWQgYXMg aXQgaGFzIGJlZW4gZGVsZXRlZCBhcyBwYXJ0IG9mIGludmFsaWRhdGlvbnMgcmVjZWl2ZWQgZm9y IHRoZQpkcm9wIHRhYmxlIGNvbW1hbmQuIEl0IGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0byB2ZXJp ZnkgaWYgdGhlIHRhYmxlIGlzCnBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uIGxpc3Qgb3Igbm90LiBU byBtYWtlIHRoaXMgcG9zc2libGUsIEkgaGF2ZSBhZGRlZAp0d28gbW9yZSBlbGVtZW50cyB0byB0 aGUgZGRsIHhsb2cgYW5kIGRkbCBtZXNzYWdlLCAocmVsaWQgYW5kIGNtZHR5cGUpLgoKV2UgY291 bGQgaGF2ZSBhbHNvIGhhbmRsZWQgYWxsIHRoaXMgb24gdGhlIHN1YnNjcmliZXIgc2lkZSBhcyB3 ZWxsLCBidXQKdGhhdCB3b3VsZCBtZWFuIHNlbmRpbmcgc3B1cmlvdXMgZGRsIG1lc3NhZ2VzIGZv ciB0YWJsZXMgdGhhdCBhcmUgbm90IHBhcnQKb2YgdGhlIHB1YmxpY2F0aW9uLgoKLSBGb3IgdGFi bGVfcmV3cml0ZSBBTFRFUiBUQUJMRSBjb21tYW5kOgooQUxURVIgQ09MVU1OIFRZUEUsIEFERCBD T0xVTU4gREVGQVVMVCwgU0VUIExPR0dFRCwgU0VUIEFDQ0VTUyBNRVRIT0QpCgp3ZSBkZXBhcnNl IHRoZSBjb21tYW5kIGFuZCBXQUwgbG9nIHRoZSBkZXBhcnNlZCBqc29uIHN0cmluZyBhdAp0YWJs ZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIuIFRoZSBXQUxTZW5kZXIgZGVjb2RlcyB0aGUgV0FMIGFu ZCBzZW5kcyBpdCB0bwpzdWJzY3JpYmVyIGlmIHRoZSBhbHRlcmVkIHRhYmxlIGlzIHB1Ymxpc2hl ZC4gVGhlbiwgdGhlIFdBTFNlbmRlciB3aWxsCmNvbnZlcnQgdGhlIHVwY29taW5nIHJld3JpdGUg SU5TRVJUcyB0byBVUERBVEVzIGFuZCBzZW5kIHRoZW0gdG8Kc3Vic2NyaWJlciBzbyB0aGF0IHRo ZSBkYXRhIGJldHdlZW4gcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGNhbiBhbHdheXMgYmUKY29u c2lzdGVudC4gTm90ZSB0aGF0IHRoZSB0YWJsZXMgdGhhdCBwdWJsaXNoIHJld3JpdGUgZGRsIG11 c3QgaGF2ZSBhCnJlcGxpY2EgaWRlbnRpdHkgY29uZmlndXJlZCBpbiBvcmRlciB0byBiZSBhYmxl IHRvIHJlcGxpY2F0ZSB0aGUgdXBjb21pbmcKcmV3cml0ZSBVUERBVEVzLgoKV2UgZG8gdGhpcyB3 YXkgYmVjYXVzZSBvZiB0d28gcmVhc29uOgooMSkgVGhlIGRhdGEgYmVmb3JlIHRoZSByZXdyaXRl IGRkbCBjb3VsZCBhbHJlYWR5IGJlIGRpZmZlcmVudCBhbW9uZwpwdWJsaXNoZXIgYW5kIHN1YnNj cmliZXIuIFRvIG1ha2Ugc3VyZSB0aGUgZXh0cmEgZGF0YSBpbiBzdWJzY3JpYmVyIHdoaWNoCmRv ZXNuJ3QgZXhpc3QgaW4gcHVibGlzaGVyIGFsc28gZ2V0IHJld3JpdHRlbiwgd2UgbmVlZCB0byBs ZXQgdGhlCnN1YnNjcmliZXIgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgcmV3cml0ZSBkZGwgdG8gcmV3 cml0ZSBhbGwgdGhlIGRhdGEgYXQKZmlyc3QuCgooMikgdGhlIGRhdGEgYWZ0ZXIgZXhlY3V0aW5n IHJld3JpdGUgZGRsIGNvdWxkIGJlIGRpZmZlcmVudCBhbW9uZwpwdWJsaXNoZXIgYW5kIHN1YnNj cmliZXIoZHVlIHRvIGRpZmZlcmVudCBmdW5jdGlvbnMvb3BlcmF0b3JzIHVzZWQgZHVyaW5nCnJl d3JpdGUpLCBzbyB3ZSBuZWVkIHRvIHJlcGxpY2F0ZSB0aGUgcmV3cml0ZSBVUERBVEVzIHRvIGtl ZXAgdGhlIGRhdGEKY29uc2lzdGVudC4KClRPIElNUFJPVkU6ClRoaXMgYXBwcm9hY2ggY291bGQg YmUgaW1wcm92ZWQgYnkgbGV0dGluZyB0aGUgc3Vic2NyaWJlciB0cnkgdG8gdXBkYXRlCnRoZSBl eHRyYSBkYXRhIGl0c2VsZiBpbnN0ZWFkIG9mIGRvaW5nIGZ1bGx5IHJld3JpdGUgZGRsIGFuZCB1 c2UgdGhlCnVwY29taW5nIHJld3JpdGUgVVBEQVRFcyB0byByZXdyaXRlIHRoZSByZXN0IGRhdGEu IFRvIGFjaGlldmUgdGhpcywgd2UKY291bGQgbW9kaWZ5IHRoZSBkZXBhcnNlZCBqc29uIHN0cmlu ZyB0byB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIHJld3JpdGUKcGFydCBhbmQgYWRkIHNvbWUgbG9n aWMgaW4gc3Vic2NyaWJlciB0byB1cGRhdGUgdGhlIGV4dHJhIGRhdGEuCkJlc2lkZXMsIHdlIG1h eSBub3QgbmVlZCB0byBzZW5kIHJld3JpdGUgY2hhbmdlcyBmb3IgYWxsIHR5cGUgb2YgcmV3cml0 ZQpkZGwsIGZvciBleGFtcGxlLCBpdCBzZWVtcyBmaW5lIHRvIHNraXAgc2VuZGluZyByZXdyaXRl IGNoYW5nZXMgZm9yIEFMVEVSClRBQkxFIFNFVCBMT0dHRUQgYXMgdGhlIGRhdGEgaW4gdGhlIHRh YmxlIGRvZXNuJ3QgYWN0dWFsbHkgYmUgY2hhbmdlZC4gV2UKY291bGQgdXNlIHRoZSBkZXBhcnNl ciBhbmQgZXZlbnQgdHJpZ2dlciB0byBmaWx0ZXIgdGhlc2UgZGRscyBhbmQgc2tpcApzZW5kaW5n IHJld3JpdGUgY2hhbmdlcyBmb3IgdGhlbS4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MvTWFrZWZpbGUgICAgICAgICAgfCAgIDEgKwogLi4uL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2Fs ZGRsbXNnZGVzYy5jICAgICAgIHwgIDUyICsrKwogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L21lc29uLmJ1aWxkICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uYyAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmln Z2VyLmMgICAgICAgICAgfCAyODUgKysrKysrKysrKystCiBzcmMvYmFja2VuZC9jb21tYW5kcy9w dWJsaWNhdGlvbmNtZHMuYyAgICAgICAgfCAxODIgKysrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jICB8ICA4NCArKysrCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RlY29kZS5jICAgICAgfCAgNDEgKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvbG9naWNhbC5jICAgICB8ICA5MyArKysrCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9wcm90by5jICAgICAgIHwgIDQzICsrCiAuLi4vcmVwbGljYXRpb24vbG9naWNh bC9yZW9yZGVyYnVmZmVyLmMgICAgICAgfCAxMzUgKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3dvcmtlci5jICAgICAgfCAyNDEgKysrKysrKysrKwogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyAgIHwgMTg5ICsrKysrKystCiBzcmMvYmFj a2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICAgICAgIHwgIDIxICstCiBzcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ193 YWxkdW1wL3JtZ3JkZXNjLmMgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcHNxbC9k ZXNjcmliZS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAxNyArLQogc3JjL2luY2x1ZGUvYWNj ZXNzL3JtZ3JsaXN0LmggICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICB8ICAgOSArCiBzcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3B1YmxpY2F0aW9uLmggICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5oICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9kZGxtZXNzYWdlLmggICAgICAgICAgfCAgNjAgKysrCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9kZWNvZGUuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHByb3RvLmggICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291 dHB1dF9wbHVnaW4uaCAgICAgICB8ICAyNyArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdv dXRwdXQuaCAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3Jk ZXJidWZmZXIuaCAgICAgICB8ICAzOSArKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3Fs Lm91dCAgICAgICAgICAgIHwgICA2ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1Ymxp Y2F0aW9uLm91dCAgICAgfCA0MjAgKysrKysrKysrLS0tLS0tLS0tCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDUgKwogMzQgZmlsZXMgY2hhbmdlZCwg MTc0NyBpbnNlcnRpb25zKCspLCAyMjYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaAoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQppbmRleCBmODhkNzJmZDg2Li4yZmYwMWU2 OWJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw3IEBA IE9CSlMgPSBcCiAJZ2lzdGRlc2MubyBcCiAJaGFzaGRlc2MubyBcCiAJaGVhcGRlc2MubyBcCisJ bG9naWNhbGRkbG1zZ2Rlc2MubyBcCiAJbG9naWNhbG1zZ2Rlc2MubyBcCiAJbXhhY3RkZXNjLm8g XAogCW5idGRlc2MubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mv bG9naWNhbGRkbG1zZ2Rlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2Fs ZGRsbXNnZGVzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA1ZTkz MGM5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9n aWNhbGRkbG1zZ2Rlc2MuYwpAQCAtMCwwICsxLDUyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBsb2dpY2FsZGRsbXNnZGVzYy5jCisgKgkgIHJtZ3IgZGVzY3JpcHRvciByb3V0aW5lcyBm b3IgcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKKyAqCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDIwMTUtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lu Y2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgi CisKK3ZvaWQKK2xvZ2ljYWxkZGxtc2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0 YXRlICpyZWNvcmQpCit7CisJY2hhcgkgICAqcmVjID0gWExvZ1JlY0dldERhdGEocmVjb3JkKTsK Kwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFTSzsK KworCWlmIChpbmZvID09IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwl7CisJCXhsX2xvZ2lj YWxfZGRsX21lc3NhZ2UgKnhscmVjID0gKHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKikgcmVjOwor CQljaGFyCSAgICpwcmVmaXggPSB4bHJlYy0+bWVzc2FnZTsKKwkJY2hhcgkgICAqbWVzc2FnZSA9 IHhscmVjLT5tZXNzYWdlICsgeGxyZWMtPnByZWZpeF9zaXplOworCQljaGFyCSAgICpzZXAgPSAi IjsKKworCQlBc3NlcnQocHJlZml4W3hscmVjLT5wcmVmaXhfc2l6ZV0gIT0gJ1wwJyk7CisKKwkJ YXBwZW5kU3RyaW5nSW5mbyhidWYsICJwcmVmaXggXCIlc1wiOyBwYXlsb2FkICglenUgYnl0ZXMp OiAiLAorCQkJCQkJIHByZWZpeCwgeGxyZWMtPm1lc3NhZ2Vfc2l6ZSk7CisJCWFwcGVuZFN0cmlu Z0luZm8oYnVmLCAicmVsaWQgJXUgY21kdHlwZSAldSIsIHhscmVjLT5yZWxpZCwgeGxyZWMtPmNt ZHR5cGUpOworCQkvKiBXcml0ZSBtZXNzYWdlIHBheWxvYWQgYXMgYSBzZXJpZXMgb2YgaGV4IGJ5 dGVzICovCisJCWZvciAoaW50IGNudCA9IDA7IGNudCA8IHhscmVjLT5tZXNzYWdlX3NpemU7IGNu dCsrKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJTAyWCIsIHNlcCwgKHVuc2ln bmVkIGNoYXIpIG1lc3NhZ2VbY250XSk7CisJCQlzZXAgPSAiICI7CisJCX0KKwl9Cit9CisKK2Nv bnN0IGNoYXIgKgorbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBpbmZvKQoreworCWlmICgo aW5mbyAmIH5YTFJfSU5GT19NQVNLKSA9PSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJCXJl dHVybiAiRERMIjsKKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L21lc29uLmJ1aWxkCmluZGV4IGYzYTZlMGE1NzEuLjNhNzBjOTc0ZGUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3Mvcm1ncmRlc2MvbWVzb24uYnVpbGQKQEAgLTksNiArOSw3IEBAIHJtZ3JfZGVzY19zb3Vy Y2VzID0gZmlsZXMoCiAgICdnaXN0ZGVzYy5jJywKICAgJ2hhc2hkZXNjLmMnLAogICAnaGVhcGRl c2MuYycsCisgICdsb2dpY2FsZGRsbXNnZGVzYy5jJywKICAgJ2xvZ2ljYWxtc2dkZXNjLmMnLAog ICAnbXhhY3RkZXNjLmMnLAogICAnbmJ0ZGVzYy5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uYwppbmRleCA1OTk2NzA5OGIzLi43MjFkMDIzYWE1IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5jCkBAIC0xMDA1LDYgKzEwMDUsNyBAQCBHZXRQdWJsaWNhdGlvbihPaWQg cHViaWQpCiAJcHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9IHB1YmZvcm0tPnB1YnVwZGF0ZTsK IAlwdWItPnB1YmFjdGlvbnMucHViZGVsZXRlID0gcHViZm9ybS0+cHViZGVsZXRlOwogCXB1Yi0+ cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IHB1YmZvcm0tPnB1YnRydW5jYXRlOworCXB1Yi0+cHVi YWN0aW9ucy5wdWJkZGwgPSBwdWJmb3JtLT5wdWJkZGw7CiAJcHViLT5wdWJ2aWFyb290ID0gcHVi Zm9ybS0+cHVidmlhcm9vdDsKIAogCVJlbGVhc2VTeXNDYWNoZSh0dXApOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4IGEzYmRjNWRiMDcuLjU2MTgyOWMxMGMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAgLTM3LDggKzM3LDExIEBACiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2Z1bmMuaCIKICNpbmNsdWRlICJw Z3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCisjaW5jbHVkZSAi cmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5Lmgi CiAjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5o IgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAj aW5jbHVkZSAidXRpbHMvZXZ0Y2FjaGUuaCIKQEAgLTE1MzcsNiArMTU0MCw3IEBAIEV2ZW50VHJp Z2dlckFsdGVyVGFibGVTdGFydChOb2RlICpwYXJzZXRyZWUpCiAKIAljb21tYW5kLT5kLmFsdGVy VGFibGUuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKIAljb21tYW5kLT5kLmFsdGVyVGFi bGUub2JqZWN0SWQgPSBJbnZhbGlkT2lkOworCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRl ID0gZmFsc2U7CiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPSBOSUw7CiAJY29tbWFu ZC0+cGFyc2V0cmVlID0gY29weU9iamVjdChwYXJzZXRyZWUpOwogCkBAIC0xNTcwLDcgKzE1NzQs NyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVsaWQoT2lkIG9iamVjdElkKQogICogaW50ZXJu YWxseSwgc28gdGhhdCdzIGFsbCB0aGF0IHRoaXMgY29kZSBuZWVkcyB0byBoYW5kbGUgYXQgdGhl IG1vbWVudC4KICAqLwogdm9pZAotRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQo Tm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCitFdmVudFRyaWdnZXJDb2xsZWN0 QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcywgYm9v bCByZXdyaXRlKQogewogCU1lbW9yeUNvbnRleHQgb2xkY3h0OwogCUNvbGxlY3RlZEFUU3ViY21k ICpuZXdzdWI7CkBAIC0xNTkwLDYgKzE1OTQsNyBAQCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJU YWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcykKIAluZXdzdWIt PmFkZHJlc3MgPSBhZGRyZXNzOwogCW5ld3N1Yi0+cGFyc2V0cmVlID0gY29weU9iamVjdChzdWJj bWQpOwogCisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRl clRhYmxlLnJld3JpdGUgfD0gcmV3cml0ZTsKIAljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1 cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9CiAJCWxhcHBlbmQoY3VycmVudEV2 ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMsIG5l d3N1Yik7CiAKQEAgLTIxNzUsMyArMjE4MCwyODEgQEAgc3RyaW5naWZ5X2FkZWZwcml2c19vYmp0 eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKIAogCXJldHVybiAiPz8/IjsJCQkJLyoga2VlcCBjb21w aWxlciBxdWlldCAqLwogfQorCisvKgorICogRGVwYXJzZSB0aGUgZGRsIGNvbW1hbmQgYW5kIGxv ZyBpdCBwcmlvciB0bworICogZXhlY3V0aW9uLiBDdXJyZW50bHkgb25seSB1c2VkIGZvciBEUk9Q IFRBQkxFIGNvbW1hbmQKKyAqIHNvIHRoYXQgY2F0YWxvZyBjYW4gYmUgYWNjZXNzZWQgYmVmb3Jl IGJlaW5nIGRlbGV0ZWQuCisgKiBUaGlzIGlzIHRvIGNoZWNrIGlmIHRoZSB0YWJsZSBpcyBwYXJ0 IG9mIHRoZSBwdWJsaWNhdGlvbgorICogb3Igbm90LgorICovCitEYXR1bQorcHVibGljYXRpb25f ZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydChQR19GVU5DVElPTl9BUkdTKQoreworCUV2ZW50VHJp Z2dlckRhdGEgKnRyaWdkYXRhOworCWNoYXIJICAgKmNvbW1hbmQgPSBwc3ByaW50ZigiRHJvcCB0 YWJsZSBjb21tYW5kIHN0YXJ0Iik7CisJRHJvcFN0bXQgICAqc3RtdDsKKwlMaXN0Q2VsbCAgICpj ZWxsMTsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhF UlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKworCXRyaWdkYXRh ID0gKEV2ZW50VHJpZ2dlckRhdGEgKikgZmNpbmZvLT5jb250ZXh0OworCXN0bXQgPSAoRHJvcFN0 bXQgKikgdHJpZ2RhdGEtPnBhcnNldHJlZTsKKworCS8qIEV4dHJhY3QgdGhlIHJlbGlkIGZyb20g dGhlIHBhcnNlIHRyZWUgKi8KKwlmb3JlYWNoKGNlbGwxLCBzdG10LT5vYmplY3RzKQorCXsKKwkJ Y2hhcgkJcmVscGVyc2lzdDsKKwkJTm9kZQkgICAqb2JqZWN0ID0gbGZpcnN0KGNlbGwxKTsKKwkJ T2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQlSZWxhdGlvbglyZWxhdGlvbiA9IE5VTEw7CisKKwkJ YWRkcmVzcyA9IGdldF9vYmplY3RfYWRkcmVzcyhzdG10LT5yZW1vdmVUeXBlLAorCQkJCQkJCQkJ IG9iamVjdCwKKwkJCQkJCQkJCSAmcmVsYXRpb24sCisJCQkJCQkJCQkgQWNjZXNzRXhjbHVzaXZl TG9jaywKKwkJCQkJCQkJCSB0cnVlKTsKKworCQkvKiBPYmplY3QgZG9lcyBub3QgZXhpc3QsIG5v dGhpbmcgdG8gZG8gKi8KKwkJaWYgKCFyZWxhdGlvbikKKwkJCWNvbnRpbnVlOworCisJCXJlbHBl cnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKGFkZHJlc3Mub2JqZWN0SWQpOworCisJCS8qCisJ CSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFi bGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAqIFdlIHdpbGwgZ2VuZXJh dGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkCisJCSAqIHRh YmxlcyBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVyIHNp ZGUuIFRoaXMKKwkJICogbWFrZXMgaXQgcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBT RVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZQorCQkgKiBpbmNvbWluZyByZXdyaXRlIG1lc3NhZ2Ug d2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlmIChyZWxwZXJzaXN0ICE9 IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIs IGFkZHJlc3Mub2JqZWN0SWQsIERDVF9UYWJsZURyb3BTdGFydCwKKwkJCQkJCQkJIGNvbW1hbmQs IHN0cmxlbihjb21tYW5kKSArIDEpOworCisJCWlmIChyZWxhdGlvbikKKwkJCXRhYmxlX2Nsb3Nl KHJlbGF0aW9uLCBOb0xvY2spOworCX0KKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwor fQorCisvKgorICogcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlCisgKgorICogRGVw YXJzZSB0aGUgZGRsIHRhYmxlIHJld3JpdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1 bQorcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJY2hhcgkJcmVscGVyc2lzdDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQ7CisJY2hhcgkgICAq anNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJ CWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwlj bWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCisJQXNzZXJ0 KGNtZCAmJiBjbWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlKTsKKworCXJlbHBlcnNpc3QgPSBnZXRf cmVsX3BlcnNpc3RlbmNlKGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKTsKKworCS8qCisJICog RG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBp cyBhIHRlbXBvcmFyeQorCSAqIHRhYmxlLgorCSAqCisJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwg bG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQgdGFibGVzCisJICogY2Fu IGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlz IG1ha2VzIGl0CisJICogcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VE IGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCSAqIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNy ZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAqLworCWlmIChyZWxwZXJzaXN0ICE9IFJFTFBFUlNJU1RF TkNFX1RFTVApCisJeworCQkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBp dCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwkJanNvbl9zdHJpbmcgPSBkZXBh cnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNlKTsKKworCQlpZiAoanNvbl9zdHJpbmcgIT0g TlVMTCkKKwkJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLmFsdGVyVGFi bGUub2JqZWN0SWQsIERDVF9UYWJsZUFsdGVyLAorCQkJCQkJCQkganNvbl9zdHJpbmcsIHN0cmxl bihqc29uX3N0cmluZykgKyAxKTsKKwl9CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwp OworfQorCisvKgorICogRGVwYXJzZSB0aGUgZGRsIGNvbW1hbmQgYW5kIGxvZyBpdC4gVGhpcyBm dW5jdGlvbgorICogaXMgY2FsbGVkIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgdGhlIGNvbW1hbmQg YnV0IGJlZm9yZSB0aGUKKyAqIHRyYW5zYWN0aW9uIGNvbW1pdHMuCisgKi8KK0RhdHVtCitwdWJs aWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdTKQoreworCUxp c3RDZWxsICAgKmxjOworCXNsaXN0X2l0ZXIJaXRlcjsKKwlEZXBhcnNlZENvbW1hbmRUeXBlIHR5 cGU7CisJT2lkCQkJcmVsaWQ7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5m bykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7 CisKKwlmb3JlYWNoKGxjLCBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0KQor CXsKKwkJY2hhcgkJcmVscGVyc2lzdCA9IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVDsKKwkJQ29s bGVjdGVkQ29tbWFuZCAqY21kID0gbGZpcnN0KGxjKTsKKwkJY2hhcgkgICAqanNvbl9zdHJpbmc7 CisKKwkJLyogUmV3cml0ZSBEREwgaGFzIGJlZW4gaGFuZGxlZCBpbiB0YWJsZV9yZXdyaXRlIHRy aWdnZXIgKi8KKwkJaWYgKGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUpCisJCXsKKwkJCVJlbmFt ZVN0bXQgKnJlbmFtZVN0bXQgPSAoUmVuYW1lU3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKworCQkJ aWYgKHJlbmFtZVN0bXQgJiYgcmVuYW1lU3RtdC0+cmVsYXRpb25UeXBlICE9IE9CSkVDVF9UWVBF ICYmCisJCQkJcmVuYW1lU3RtdC0+cmVsYXRpb25UeXBlICE9IE9CSkVDVF9UQUJMRSkKKwkJCQlj b250aW51ZTsKKwkJfQorCisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX1NpbXBsZSAmJgorCQkJIU9p ZElzVmFsaWQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkKSkKKwkJCWNvbnRpbnVlOwor CisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVGFibGUpCisJCXsKKwkJCXJlbGlkID0gY21k LT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7CisJCQl0eXBlID0gRENUX1RhYmxlQWx0ZXI7CisJCX0K KwkJZWxzZQorCQl7CisJCQkvKiBPbmx5IFNDVF9TaW1wbGUgZm9yIG5vdyAqLworCQkJcmVsaWQg PSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisJCQl0eXBlID0gRENUX1NpbXBsZUNt ZDsKKwkJfQorCisJCWlmIChnZXRfcmVsX3JlbGtpbmQocmVsaWQpKQorCQkJcmVscGVyc2lzdCA9 IGdldF9yZWxfcGVyc2lzdGVuY2UocmVsaWQpOworCisJCS8qCisJCSAqIERvIG5vdCBnZW5lcmF0 ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFibGUgaXMgYQorCQkgKiB0ZW1w b3JhcnkgdGFibGUuCisJCSAqCisJCSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVu bG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkCisJCSAqIHRhYmxlcyBjYW4gYWxzbyBiZSBj cmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMKKwkJICogbWFr ZXMgaXQgcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQg YW5kIHRoZQorCQkgKiBpbmNvbWluZyByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBh IG5ldyB0YWJsZS4KKwkJICovCisJCWlmIChyZWxwZXJzaXN0ICE9IFJFTFBFUlNJU1RFTkNFX1RF TVApCisJCXsKKwkJCS8qCisJCQkgKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxv ZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUKKwkJCSAqIHNhbWUuCisJCQkgKi8KKwkJCWpz b25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwkJCWlm IChqc29uX3N0cmluZyAhPSBOVUxMKQorCQkJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNl IiwgcmVsaWQsIHR5cGUsIGpzb25fc3RyaW5nLAorCQkJCQkJCQkJIHN0cmxlbihqc29uX3N0cmlu ZykgKyAxKTsKKwkJfQorCX0KKworCXNsaXN0X2ZvcmVhY2goaXRlciwgJihjdXJyZW50RXZlbnRU cmlnZ2VyU3RhdGUtPlNRTERyb3BMaXN0KSkKKwl7CisJCXZvbGF0aWxlIFNRTERyb3BPYmplY3Qg Km9iajsKKwkJRHJvcFN0bXQgICAqc3RtdDsKKwkJRXZlbnRUcmlnZ2VyRGF0YSAqdHJpZ2RhdGE7 CisJCWNoYXIJICAgKmNvbW1hbmQ7CisJCURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZTsKKwkJ Y29uc3QgY2hhciAqdG1wdHlwZTsKKworCQl0cmlnZGF0YSA9IChFdmVudFRyaWdnZXJEYXRhICop IGZjaW5mby0+Y29udGV4dDsKKwkJc3RtdCA9IChEcm9wU3RtdCAqKSB0cmlnZGF0YS0+cGFyc2V0 cmVlOworCisJCW9iaiA9IHNsaXN0X2NvbnRhaW5lcihTUUxEcm9wT2JqZWN0LCBuZXh0LCBpdGVy LmN1cik7CisKKwkJaWYgKHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0YWJsZSIpID09IDApCisJ CQljbWR0eXBlID0gRENUX1RhYmxlRHJvcEVuZDsKKwkJZWxzZSBpZiAoc3RyY21wKG9iai0+b2Jq ZWN0dHlwZSwgInNlcXVlbmNlIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBl LCAic2NoZW1hIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiaW5kZXgi KSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJmdW5jdGlvbiIpID09IDAg fHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInByb2NlZHVyZSIpID09IDAgfHwKKwkJ CQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgIm9wZXJhdG9yIikgPT0gMCB8fAorCQkJCSBzdHJj bXAob2JqLT5vYmplY3R0eXBlLCAib3BlcmF0b3IgY2xhc3MiKSA9PSAwIHx8CisJCQkJIHN0cmNt cChvYmotPm9iamVjdHR5cGUsICJvcGVyYXRvciBmYW1pbHkiKSA9PSAwIHx8CisJCQkJIHN0cmNt cChvYmotPm9iamVjdHR5cGUsICJjYXN0IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmpl Y3R0eXBlLCAidHlwZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImRv bWFpbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRyaWdnZXIiKSA9 PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJjb252ZXJzaW9uIikgPT0gMCB8 fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAicG9saWN5IikgPT0gMCB8fAorCQkJCSBz dHJjbXAob2JqLT5vYmplY3R0eXBlLCAicnVsZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+ b2JqZWN0dHlwZSwgImV4dGVuc2lvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0 dHlwZSwgImZvcmVpZ24tZGF0YSB3cmFwcGVyIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5v YmplY3R0eXBlLCAiZm9yZWlnbiB0YWJsZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2Jq ZWN0dHlwZSwgInRleHQgc2VhcmNoIGNvbmZpZ3VyYXRpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNt cChvYmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5IikgPT0gMCB8fAorCQkJ CSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFyY2ggcGFyc2VyIikgPT0gMCB8fAor CQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFyY2ggdGVtcGxhdGUiKSA9PSAw IHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0cmFuc2Zvcm0iKSA9PSAwIHx8CisJ CQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJzZXJ2ZXIiKSA9PSAwIHx8CisJCQkJIHN0cmNt cChvYmotPm9iamVjdHR5cGUsICJjb2xsYXRpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmot Pm9iamVjdHR5cGUsICJ1c2VyIG1hcHBpbmciKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9i amVjdHR5cGUsICJsYW5ndWFnZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlw ZSwgInZpZXciKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJtYXRlcmlh bGl6ZWQgdmlldyIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInN0YXRp c3RpY3Mgb2JqZWN0IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiYWNj ZXNzIG1ldGhvZCIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInJvdXRp bmUiKSA9PSAwKQorCQkJY21kdHlwZSA9IERDVF9PYmplY3REcm9wOworCQllbHNlCisJCQljb250 aW51ZTsKKworCQkvKiBDaGFuZ2UgZm9yZWlnbi1kYXRhIHdyYXBwZXIgdG8gZm9yZWlnbiBkYXRh IHdyYXBwZXIgKi8KKwkJaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBlLCAiZm9yZWlnbi1kYXRh IHdyYXBwZXIiLCAyMCkgPT0gMCkKKwkJeworCQkJdG1wdHlwZSA9IHBzdHJkdXAoImZvcmVpZ24g ZGF0YSB3cmFwcGVyIik7CisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQob2JqLT5v YmppZGVudGl0eSwgdG1wdHlwZSwKKwkJCQkJCQkJCQkgICBzdG10LT5iZWhhdmlvcik7CisJCX0K KworCQkvKiBDaGFuZ2Ugc3RhdGlzdGljcyBvYmplY3QgdG8gc3RhdGlzdGljcyAqLworCQllbHNl IGlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgInN0YXRpc3RpY3Mgb2JqZWN0IiwKKwkJCQkJ CSBzdHJsZW4oInN0YXRpc3RpY3Mgb2JqZWN0IikpID09IDApCisJCXsKKwkJCXRtcHR5cGUgPSBw c3RyZHVwKCJzdGF0aXN0aWNzIik7CisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQo b2JqLT5vYmppZGVudGl0eSwgdG1wdHlwZSwKKwkJCQkJCQkJCQkgICBzdG10LT5iZWhhdmlvcik7 CisJCX0KKworCQkvKgorCQkgKiBPYmplY3QgaWRlbnRpdHkgbmVlZHMgdG8gYmUgbW9kaWZpZWQg dG8gbWFrZSB0aGUgZHJvcCB3b3JrCisJCSAqCisJCSAqIEZST006IDxyb2xlPiBvbiBzZXJ2ZXIg PHNlcnZlcm5hbWU+IFRPICA6IGZvciA8cm9sZT4gc2VydmVyCisJCSAqIDxzZXJ2ZXJuYW1lPgor CQkgKgorCQkgKi8KKwkJZWxzZSBpZiAoc3RybmNtcChvYmotPm9iamVjdHR5cGUsICJ1c2VyIG1h cHBpbmciLCAxMikgPT0gMCkKKwkJeworCQkJY2hhcgkgICAqb25fc2VydmVyOworCisJCQl0bXB0 eXBlID0gcGFsbG9jKHN0cmxlbihvYmotPm9iamlkZW50aXR5KSArIDIpOworCQkJb25fc2VydmVy ID0gc3Ryc3RyKG9iai0+b2JqaWRlbnRpdHksICJvbiBzZXJ2ZXIiKTsKKworCQkJc3ByaW50Zigo Y2hhciAqKSB0bXB0eXBlLCAiZm9yICIpOworCQkJc3RybmNhdCgoY2hhciAqKSB0bXB0eXBlLCBv YmotPm9iamlkZW50aXR5LCBvbl9zZXJ2ZXIgLSBvYmotPm9iamlkZW50aXR5KTsKKwkJCXN0cmNh dCgoY2hhciAqKSB0bXB0eXBlLCBvbl9zZXJ2ZXIgKyAzKTsKKwkJCWNvbW1hbmQgPSBkZXBhcnNl X2Ryb3BfY29tbWFuZCh0bXB0eXBlLCBvYmotPm9iamVjdHR5cGUsCisJCQkJCQkJCQkJICAgc3Rt dC0+YmVoYXZpb3IpOworCQl9CisJCWVsc2UKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3BfY29t bWFuZChvYmotPm9iamlkZW50aXR5LCBvYmotPm9iamVjdHR5cGUsCisJCQkJCQkJCQkJICAgc3Rt dC0+YmVoYXZpb3IpOworCisJCWlmIChjb21tYW5kKQorCQkJTG9nTG9naWNhbERETE1lc3NhZ2Uo ImRlcGFyc2UiLCBvYmotPmFkZHJlc3Mub2JqZWN0SWQsIGNtZHR5cGUsCisJCQkJCQkJCSBjb21t YW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKwl9CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVt KE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25j bWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCAyMGZh NzJjNWM4Li5lOTg5MDQ2ZDU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJs aWNhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMu YwpAQCAtMzgsMTAgKzM4LDEyIEBACiAjaW5jbHVkZSAiY29tbWFuZHMvcHVibGljYXRpb25jbWRz LmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1 ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2lu Y2x1ZGUgInBhcnNlci9wYXJzZV9jbGF1c2UuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY29s bGF0ZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgorI2luY2x1ZGUgInBh cnNlci9wYXJzZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJ1dGls cy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgpAQCAtOTcsNiArOTksNyBAQCBwYXJz ZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlwdWJhY3Rpb25zLT5w dWJ1cGRhdGUgPSB0cnVlOwogCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSA9IHRydWU7CiAJcHViYWN0 aW9ucy0+cHVidHJ1bmNhdGUgPSB0cnVlOworCXB1YmFjdGlvbnMtPnB1YmRkbCA9IGZhbHNlOwog CSpwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlOwogCiAJLyogUGFyc2Ugb3B0aW9u cyAqLwpAQCAtMTQ0LDYgKzE0Nyw4IEBAIHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VT dGF0ZSAqcHN0YXRlLAogCQkJCQlwdWJhY3Rpb25zLT5wdWJkZWxldGUgPSB0cnVlOwogCQkJCWVs c2UgaWYgKHN0cmNtcChwdWJsaXNoX29wdCwgInRydW5jYXRlIikgPT0gMCkKIAkJCQkJcHViYWN0 aW9ucy0+cHVidHJ1bmNhdGUgPSB0cnVlOworCQkJCWVsc2UgaWYgKHN0cmNtcChwdWJsaXNoX29w dCwgImRkbCIpID09IDApCisJCQkJCXB1YmFjdGlvbnMtPnB1YmRkbCA9IHRydWU7CiAJCQkJZWxz ZQogCQkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VS Uk9SKSwKQEAgLTcyOCw2ICs3MzMsNTMgQEAgQ2hlY2tQdWJSZWxhdGlvbkNvbHVtbkxpc3QoY2hh ciAqcHVibmFtZSwgTGlzdCAqdGFibGVzLAogCX0KIH0KIAorLyoKKyAqIENyZWF0ZSBldmVudCB0 cmlnZ2VyIHdoaWNoIGlzIHVzZWQgZm9yIERETCByZXBsaWNhdGlvbi4KKyAqLworc3RhdGljIHZv aWQKK0NyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoY2hhciAqZXZlbnRuYW1lLCBDb21tYW5k VGFnICpjb21tYW5kcywKKwkJCQkJCQkgaW50IG5jb21tYW5kcywgT2JqZWN0QWRkcmVzcyBwdWJh ZGRyZXNzLAorCQkJCQkJCSBPaWQgcHVib2lkKQoreworCWludAkJCWk7CisJTGlzdAkgICAqdGFn cyA9IE5JTDsKKwlPaWQJCQl0cmlnZ2VyX2lkOworCU9iamVjdEFkZHJlc3MgcmVmZXJlbmNlZDsK KwlDcmVhdGVFdmVudFRyaWdTdG10ICpkZGxfdHJpZ2dlcjsKKwljaGFyCQl0cmlnZ2VyX25hbWVb TkFNRURBVEFMRU5dOworCWNoYXIJCXRyaWdnZXJfZnVuY19uYW1lW05BTUVEQVRBTEVOXTsKKwlz dGF0aWMgY29uc3QgY2hhciAqdHJpZ2dlcl9uYW1lX3ByZWZpeCA9ICJwZ19kZXBhcnNlX3RyaWdf JXNfJXUiOworCXN0YXRpYyBjb25zdCBjaGFyICp0cmlnZ2VyX2Z1bmNfcHJlZml4ID0gInB1Ymxp Y2F0aW9uX2RlcGFyc2VfJXMiOworCisJZGRsX3RyaWdnZXIgPSBtYWtlTm9kZShDcmVhdGVFdmVu dFRyaWdTdG10KTsKKworCXNucHJpbnRmKHRyaWdnZXJfbmFtZSwgc2l6ZW9mKHRyaWdnZXJfbmFt ZSksIHRyaWdnZXJfbmFtZV9wcmVmaXgsCisJCQkgZXZlbnRuYW1lLCBwdWJvaWQpOworCXNucHJp bnRmKHRyaWdnZXJfZnVuY19uYW1lLCBzaXplb2YodHJpZ2dlcl9mdW5jX25hbWUpLCB0cmlnZ2Vy X2Z1bmNfcHJlZml4LAorCQkJIGV2ZW50bmFtZSk7CisKKwlkZGxfdHJpZ2dlci0+dHJpZ25hbWUg PSBwc3RyZHVwKHRyaWdnZXJfbmFtZSk7CisJZGRsX3RyaWdnZXItPmV2ZW50bmFtZSA9IGV2ZW50 bmFtZTsKKwlkZGxfdHJpZ2dlci0+ZnVuY25hbWUgPSBTeXN0ZW1GdW5jTmFtZSh0cmlnZ2VyX2Z1 bmNfbmFtZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmNvbW1hbmRzOyBpKyspCisJeworCQlTdHJp bmcJICAgKnRhZyA9IG1ha2VTdHJpbmcocHN0cmR1cChHZXRDb21tYW5kVGFnTmFtZShjb21tYW5k c1tpXSkpKTsKKworCQl0YWdzID0gbGFwcGVuZCh0YWdzLCB0YWcpOworCX0KKworCWRkbF90cmln Z2VyLT53aGVuY2xhdXNlID0gbGlzdF9tYWtlMShtYWtlRGVmRWxlbSgidGFnIiwgKE5vZGUgKikg dGFncywgLTEpKTsKKworCXRyaWdnZXJfaWQgPSBDcmVhdGVFdmVudFRyaWdnZXIoZGRsX3RyaWdn ZXIpOworCisJLyoKKwkgKiBSZWdpc3RlciB0aGUgZXZlbnQgdHJpZ2dlcnMgYXMgaW50ZXJuYWxs eSBkZXBlbmRlbnQgb24gdGhlIHB1YmxpY2F0aW9uLgorCSAqLworCU9iamVjdEFkZHJlc3NTZXQo cmVmZXJlbmNlZCwgRXZlbnRUcmlnZ2VyUmVsYXRpb25JZCwgdHJpZ2dlcl9pZCk7CisJcmVjb3Jk RGVwZW5kZW5jeU9uKCZyZWZlcmVuY2VkLCAmcHViYWRkcmVzcywgREVQRU5ERU5DWV9JTlRFUk5B TCk7Cit9CisKIC8qCiAgKiBDcmVhdGUgbmV3IHB1YmxpY2F0aW9uLgogICovCkBAIC03OTgsNiAr ODUwLDggQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJs aWNhdGlvblN0bXQgKnN0bXQpCiAJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRlbGV0ZSk7 CiAJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9CiAJCUJvb2xH ZXREYXR1bShwdWJhY3Rpb25zLnB1YnRydW5jYXRlKTsKKwl2YWx1ZXNbQW51bV9wZ19wdWJsaWNh dGlvbl9wdWJkZGwgLSAxXSA9CisJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRkbCk7CiAJ dmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVidmlhcm9vdCAtIDFdID0KIAkJQm9vbEdldERh dHVtKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKIApAQCAtODU4LDYgKzkxMiwxMzEgQEAg Q3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0 bXQgKnN0bXQpCiAJCX0KIAl9CiAKKwkvKgorCSAqIENyZWF0ZSBhbiBldmVudCB0cmlnZ2VyIHRv IGFsbG93IGxvZ2dpbmcgb2YgRERMIHN0YXRlbWVudHMuCisJICoKKwkgKi8KKwlpZiAocHViYWN0 aW9ucy5wdWJkZGwpCisJeworCQlDb21tYW5kVGFnCXN0YXJ0X2NvbW1hbmRzW10gPSB7Q01EVEFH X0RST1BfVEFCTEV9OworCQlDb21tYW5kVGFnCXJld3JpdGVfY29tbWFuZHNbXSA9IHtDTURUQUdf QUxURVJfVEFCTEV9OworCisJCXN0YXRpYyBDb21tYW5kVGFnCWVuZF9jb21tYW5kc1tdID0gewor CQkJQ01EVEFHX0FMVEVSX0NBU1QsCisJCQlDTURUQUdfQUxURVJfQ09MTEFUSU9OLAorCQkJQ01E VEFHX0FMVEVSX0NPTlZFUlNJT04sCisJCQlDTURUQUdfQUxURVJfREVGQVVMVF9QUklWSUxFR0VT LAorCQkJQ01EVEFHX0FMVEVSX0RPTUFJTiwKKwkJCUNNRFRBR19BTFRFUl9FWFRFTlNJT04sCisJ CQlDTURUQUdfQUxURVJfRk9SRUlHTl9EQVRBX1dSQVBQRVIsCisJCQlDTURUQUdfQUxURVJfRk9S RUlHTl9UQUJMRSwKKwkJCUNNRFRBR19BTFRFUl9GVU5DVElPTiwKKwkJCUNNRFRBR19BTFRFUl9J TkRFWCwKKwkJCUNNRFRBR19BTFRFUl9JTkRFWCwKKwkJCUNNRFRBR19BTFRFUl9MQU5HVUFHRSwK KwkJCUNNRFRBR19BTFRFUl9NQVRFUklBTElaRURfVklFVywKKwkJCUNNRFRBR19BTFRFUl9PUEVS QVRPUiwKKwkJCUNNRFRBR19BTFRFUl9PUEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19BTFRFUl9P UEVSQVRPUl9GQU1JTFksCisJCQlDTURUQUdfQUxURVJfUE9MSUNZLAorCQkJQ01EVEFHX0FMVEVS X1BST0NFRFVSRSwKKwkJCUNNRFRBR19BTFRFUl9ST1VUSU5FLAorCQkJQ01EVEFHX0FMVEVSX1JV TEUsCisJCQlDTURUQUdfQUxURVJfU0NIRU1BLAorCQkJQ01EVEFHX0FMVEVSX1NFUVVFTkNFLAor CQkJQ01EVEFHX0FMVEVSX1NFUlZFUiwKKwkJCUNNRFRBR19BTFRFUl9TVEFUSVNUSUNTLAorCQkJ Q01EVEFHX0FMVEVSX1RBQkxFLAorCQkJQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX0NPTkZJR1VS QVRJT04sCisJCQlDTURUQUdfQUxURVJfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwKKwkJCUNNRFRB R19BTFRFUl9UUklHR0VSLAorCQkJQ01EVEFHX0FMVEVSX1RZUEUsCisJCQlDTURUQUdfQUxURVJf VVNFUl9NQVBQSU5HLAorCQkJQ01EVEFHX0FMVEVSX1ZJRVcsCisJCQlDTURUQUdfQ09NTUVOVCwK KwkJCUNNRFRBR19DUkVBVEVfQUNDRVNTX01FVEhPRCwKKwkJCUNNRFRBR19DUkVBVEVfQ0FTVCwK KwkJCUNNRFRBR19DUkVBVEVfQ09MTEFUSU9OLAorCQkJQ01EVEFHX0NSRUFURV9DT05WRVJTSU9O LAorCQkJQ01EVEFHX0NSRUFURV9ET01BSU4sCisJCQlDTURUQUdfQ1JFQVRFX0VYVEVOU0lPTiwK KwkJCUNNRFRBR19DUkVBVEVfRk9SRUlHTl9EQVRBX1dSQVBQRVIsCisJCQlDTURUQUdfQ1JFQVRF X0ZPUkVJR05fVEFCTEUsCisJCQlDTURUQUdfQ1JFQVRFX0ZVTkNUSU9OLAorCQkJQ01EVEFHX0NS RUFURV9JTkRFWCwKKwkJCUNNRFRBR19DUkVBVEVfTEFOR1VBR0UsCisJCQlDTURUQUdfQ1JFQVRF X01BVEVSSUFMSVpFRF9WSUVXLAorCQkJQ01EVEFHX0NSRUFURV9PUEVSQVRPUiwKKwkJCUNNRFRB R19DUkVBVEVfT1BFUkFUT1JfQ0xBU1MsCisJCQlDTURUQUdfQ1JFQVRFX09QRVJBVE9SX0ZBTUlM WSwKKwkJCUNNRFRBR19DUkVBVEVfUE9MSUNZLAorCQkJQ01EVEFHX0NSRUFURV9QUk9DRURVUkUs CisJCQlDTURUQUdfQ1JFQVRFX1JVTEUsCisJCQlDTURUQUdfQ1JFQVRFX1NDSEVNQSwKKwkJCUNN RFRBR19DUkVBVEVfU0VRVUVOQ0UsCisJCQlDTURUQUdfQ1JFQVRFX1NFUlZFUiwKKwkJCUNNRFRB R19DUkVBVEVfU1RBVElTVElDUywKKwkJCUNNRFRBR19DUkVBVEVfVEFCTEUsCisJCQlDTURUQUdf Q1JFQVRFX1RFWFRfU0VBUkNIX0NPTkZJR1VSQVRJT04sCisJCQlDTURUQUdfQ1JFQVRFX1RFWFRf U0VBUkNIX0RJQ1RJT05BUlksCisJCQlDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX1BBUlNFUiwK KwkJCUNNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfVEVNUExBVEUsCisJCQlDTURUQUdfQ1JFQVRF X1RSQU5TRk9STSwKKwkJCUNNRFRBR19DUkVBVEVfVFJJR0dFUiwKKwkJCUNNRFRBR19DUkVBVEVf VFlQRSwKKwkJCUNNRFRBR19DUkVBVEVfVVNFUl9NQVBQSU5HLAorCQkJQ01EVEFHX0NSRUFURV9W SUVXLAorCQkJQ01EVEFHX0RST1BfQUNDRVNTX01FVEhPRCwKKwkJCUNNRFRBR19EUk9QX0NBU1Qs CisJCQlDTURUQUdfRFJPUF9DT0xMQVRJT04sCisJCQlDTURUQUdfRFJPUF9DT05WRVJTSU9OLAor CQkJQ01EVEFHX0RST1BfRE9NQUlOLAorCQkJQ01EVEFHX0RST1BfRVhURU5TSU9OLAorCQkJQ01E VEFHX0RST1BfRk9SRUlHTl9EQVRBX1dSQVBQRVIsCisJCQlDTURUQUdfRFJPUF9GT1JFSUdOX1RB QkxFLAorCQkJQ01EVEFHX0RST1BfRlVOQ1RJT04sCisJCQlDTURUQUdfRFJPUF9JTkRFWCwKKwkJ CUNNRFRBR19EUk9QX0xBTkdVQUdFLAorCQkJQ01EVEFHX0RST1BfTUFURVJJQUxJWkVEX1ZJRVcs CisJCQlDTURUQUdfRFJPUF9PUEVSQVRPUiwKKwkJCUNNRFRBR19EUk9QX09QRVJBVE9SX0NMQVNT LAorCQkJQ01EVEFHX0RST1BfT1BFUkFUT1JfRkFNSUxZLAorCQkJQ01EVEFHX0RST1BfUE9MSUNZ LAorCQkJQ01EVEFHX0RST1BfUFJPQ0VEVVJFLAorCQkJQ01EVEFHX0RST1BfUk9VVElORSwKKwkJ CUNNRFRBR19EUk9QX1JVTEUsCisJCQlDTURUQUdfRFJPUF9TQ0hFTUEsCisJCQlDTURUQUdfRFJP UF9TRVFVRU5DRSwKKwkJCUNNRFRBR19EUk9QX1NFUlZFUiwKKwkJCUNNRFRBR19EUk9QX1NUQVRJ U1RJQ1MsCisJCQlDTURUQUdfRFJPUF9UQUJMRSwKKwkJCUNNRFRBR19EUk9QX1RFWFRfU0VBUkNI X0NPTkZJR1VSQVRJT04sCisJCQlDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9ESUNUSU9OQVJZLAor CQkJQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfUEFSU0VSLAorCQkJQ01EVEFHX0RST1BfVEVYVF9T RUFSQ0hfVEVNUExBVEUsCisJCQlDTURUQUdfRFJPUF9UUkFOU0ZPUk0sCisJCQlDTURUQUdfRFJP UF9UWVBFLAorCQkJQ01EVEFHX0RST1BfVklFVywKKwkJCUNNRFRBR19HUkFOVCwKKwkJCUNNRFRB R19JTVBPUlRfRk9SRUlHTl9TQ0hFTUEsCisJCQlDTURUQUdfUkVGUkVTSF9NQVRFUklBTElaRURf VklFVywKKwkJCUNNRFRBR19SRVZPS0UsCisJCQlDTURUQUdfU0VDVVJJVFlfTEFCRUwsCisJfTsK KworCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2VyICovCisJCUNy ZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21tYW5kX2VuZCIsIGVuZF9jb21tYW5k cywKKwkJCQkJCQkJCSBsZW5ndGhvZihlbmRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisK KwkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9zdGFydCBldmVudCB0cmlnZ2VyICovCisJCUNy ZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21tYW5kX3N0YXJ0Iiwgc3RhcnRfY29t bWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2Yoc3RhcnRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9p ZCk7CisKKwkJLyogQ3JlYXRlIHRoZSB0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KKwkJ Q3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigidGFibGVfcmV3cml0ZSIsIHJld3JpdGVfY29t bWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2YocmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVi b2lkKTsKKwl9CisKIAl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOwogCiAJSW52 b2tlT2JqZWN0UG9zdENyZWF0ZUhvb2soUHVibGljYXRpb25SZWxhdGlvbklkLCBwdWJvaWQsIDAp OwpAQCAtOTk2LDYgKzExNzUsOSBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRl ICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCiAJCXZhbHVlc1tBbnVtX3Bn X3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5w dWJ0cnVuY2F0ZSk7CiAJCXJlcGxhY2VzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUg LSAxXSA9IHRydWU7CisKKwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0g PSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGwpOworCQlyZXBsYWNlc1tBbnVtX3BnX3B1 YmxpY2F0aW9uX3B1YmRkbCAtIDFdID0gdHJ1ZTsKIAl9CiAKIAlpZiAocHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3RfZ2l2ZW4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDU2ZGM5OTU3 MTMuLjViNDdkYzFmNDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21k cy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC01MjE4LDcgKzUy MTgsNyBAQCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAog CSAqIFJlcG9ydCB0aGUgc3ViY29tbWFuZCB0byBpbnRlcmVzdGVkIGV2ZW50IHRyaWdnZXJzLgog CSAqLwogCWlmIChjbWQpCi0JCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChO b2RlICopIGNtZCwgYWRkcmVzcyk7CisJCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3Vi Y21kKChOb2RlICopIGNtZCwgYWRkcmVzcywgdGFiLT5yZXdyaXRlKTsKIAogCS8qCiAJICogQnVt cCB0aGUgY29tbWFuZCBjb3VudGVyIHRvIGVuc3VyZSB0aGUgbmV4dCBzdWJjb21tYW5kIGluIHRo ZSBzZXF1ZW5jZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9N YWtlZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXgg YzRlMmZkZWI3MS4uZDRmMjlmOGZmYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L01ha2VmaWxlCkBAIC0xNSw2ICsxNSw3IEBAIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9N YWtlZmlsZS5nbG9iYWwKIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxB R1MpCiAKIE9CSlMgPSBcCisJZGRsbWVzc2FnZS5vXAogCWRlY29kZS5vIFwKIAlsYXVuY2hlci5v IFwKIAlsb2dpY2FsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9kZGxtZXNzYWdlLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1l c3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lMTFlNTZlNWEz Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxt ZXNzYWdlLmMKQEAgLTAsMCArMSw4NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRs bWVzc2FnZS5jCisgKgkgIExvZ2ljYWwgRERMIG1lc3NhZ2VzLgorICoKKyAqIENvcHlyaWdodCAo YykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVO VElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3Nh Z2UuYworICoKKyAqIE5PVEVTCisgKgorICogTG9naWNhbCBEREwgbWVzc2FnZXMgYWxsb3cgWExP RyBsb2dnaW5nIG9mIERETCBjb21tYW5kIHN0cmluZ3MgdGhhdAorICogZ2V0IHBhc3NlZCB0byB0 aGUgbG9naWNhbCBkZWNvZGluZyBwbHVnaW4uIEluIG5vcm1hbCBYTE9HIHByb2Nlc3NpbmcgdGhl eQorICogYXJlIHNhbWUgYXMgTk9PUC4KKyAqCisgKiBVbmxpa2UgZ2VuZXJpYyBsb2dpY2FsIG1l c3NhZ2VzLCB0aGVzZSBEREwgbWVzc2FnZXMgaGF2ZSBvbmx5IHRyYW5zYWN0aW9uYWwKKyAqIG1v ZGUuIE5vdGUgYnkgZGVmYXVsdCBERExzIGluIFBvc3RncmVTUUwgYXJlIHRyYW5zYWN0aW9uYWwu CisgKgorICogVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnQgb2YgY3VycmVudCB0cmFuc2FjdGlvbiBh bmQgd2lsbCBiZSBzZW50IHRvCisgKiBkZWNvZGluZyBwbHVnaW4gdXNpbmcgaW4gYSBzYW1lIHdh eSBhcyBETUwgb3BlcmF0aW9ucy4KKyAqCisgKiBFdmVyeSBtZXNzYWdlIGNhcnJpZXMgcHJlZml4 IHRvIGF2b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCBkZWNvZGluZworICogcGx1Z2lu cy4gVGhlIHBsdWdpbiBhdXRob3JzIG11c3QgdGFrZSBleHRyYSBjYXJlIHRvIHVzZSB1bmlxdWUg cHJlZml4LAorICogZ29vZCBvcHRpb25zIHNlZW1zIHRvIGJlIGZvciBleGFtcGxlIHRvIHVzZSB0 aGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNp bmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNl LmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgi CisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9u L2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCisvKgorICogV3Jp dGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFhMb2cuCisgKi8KK1hMb2dSZWNQ dHIKK0xvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBE ZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlLCBz aXplX3Qgc2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlIHhscmVjOworCisJIC8qIEVu c3VyZSB3ZSBoYXZlIGEgdmFsaWQgdHJhbnNhY3Rpb24gaWQuICovCisJQXNzZXJ0KElzVHJhbnNh Y3Rpb25TdGF0ZSgpKTsKKwlHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpOworCisJeGxyZWMuZGJJ ZCA9IE15RGF0YWJhc2VJZDsKKwkvKiBUcmFpbGluZyB6ZXJvIGlzIGNyaXRpY2FsOyBzZWUgbG9n aWNhbGRkbG1zZ19kZXNjICovCisJeGxyZWMucHJlZml4X3NpemUgPSBzdHJsZW4ocHJlZml4KSAr IDE7CisJeGxyZWMubWVzc2FnZV9zaXplID0gc2l6ZTsKKwl4bHJlYy5yZWxpZCA9IHJlbGlkOwor CXhscmVjLmNtZHR5cGUgPSBjbWR0eXBlOworCisJWExvZ0JlZ2luSW5zZXJ0KCk7CisJWExvZ1Jl Z2lzdGVyRGF0YSgoY2hhciAqKSAmeGxyZWMsIFNpemVPZkxvZ2ljYWxERExNZXNzYWdlKTsKKwlY TG9nUmVnaXN0ZXJEYXRhKHVuY29uc3RpZnkoY2hhciAqLCBwcmVmaXgpLCB4bHJlYy5wcmVmaXhf c2l6ZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgbWVzc2FnZSksIHNp emUpOworCisJLyogQWxsb3cgb3JpZ2luIGZpbHRlcmluZyAqLworCVhMb2dTZXRSZWNvcmRGbGFn cyhYTE9HX0lOQ0xVREVfT1JJR0lOKTsKKworCXJldHVybiBYTG9nSW5zZXJ0KFJNX0xPR0lDQUxE RExNU0dfSUQsIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSk7Cit9CisKKy8qCisgKiBSZWRvIGlz IGJhc2ljYWxseSBqdXN0IG5vb3AgZm9yIGxvZ2ljYWwgZGVjb2RpbmcgZGRsIG1lc3NhZ2VzLgor ICovCit2b2lkCitsb2dpY2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCit7 CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7 CisKKwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJCWVsb2coUEFOSUMs ICJsb2dpY2FsZGRsbXNnX3JlZG86IHVua25vd24gb3AgY29kZSAldSIsIGluZm8pOworCisJLyog VGhpcyBpcyBvbmx5IGludGVyZXN0aW5nIGZvciBsb2dpY2FsIGRlY29kaW5nLCBzZWUgZGVjb2Rl LmMuICovCit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2Rl Y29kZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwppbmRleCAy Y2MwYWM5ZWIwLi5iNjI4MTI5OTNjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2RlY29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv ZGVjb2RlLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24v ZGVjb2RlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC02MDMsNiArNjA0LDQ2IEBAIGxv Z2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1 ZmZlciAqYnVmKQogCQkJCQkJCSAgbWVzc2FnZS0+bWVzc2FnZSArIG1lc3NhZ2UtPnByZWZpeF9z aXplKTsKIH0KIAorLyoKKyAqIEhhbmRsZSBybWdyIExPR0lDQUxERExNU0dfSUQgcmVjb3JkcyBm b3IgRGVjb2RlUmVjb3JkSW50b1Jlb3JkZXJCdWZmZXIoKS4KKyAqLwordm9pZAorbG9naWNhbGRk bF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpi dWYpCit7CisJU25hcEJ1aWxkICAqYnVpbGRlciA9IGN0eC0+c25hcHNob3RfYnVpbGRlcjsKKwlY TG9nUmVhZGVyU3RhdGUgKnIgPSBidWYtPnJlY29yZDsKKwlUcmFuc2FjdGlvbklkIHhpZCA9IFhM b2dSZWNHZXRYaWQocik7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyKSAmIH5YTFJf SU5GT19NQVNLOworCVJlcE9yaWdpbklkIG9yaWdpbl9pZCA9IFhMb2dSZWNHZXRPcmlnaW4ocik7 CisJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqbWVzc2FnZTsKKworCWlmIChpbmZvICE9IFhMT0df TE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgUk1fTE9HSUNB TERETE1TR19JRCByZWNvcmQgdHlwZTogJXUiLCBpbmZvKTsKKworCVJlb3JkZXJCdWZmZXJQcm9j ZXNzWGlkKGN0eC0+cmVvcmRlciwgWExvZ1JlY0dldFhpZChyKSwgYnVmLT5vcmlncHRyKTsKKwor CS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBzbmFwc2hvdCBvciB3ZSBhcmUganVzdCBmYXN0LWZv cndhcmRpbmcsIHRoZXJlIGlzIG5vCisJICogcG9pbnQgaW4gZGVjb2RpbmcgZGRsIG1lc3NhZ2Vz LgorCSAqLworCWlmIChTbmFwQnVpbGRDdXJyZW50U3RhdGUoYnVpbGRlcikgPCBTTkFQQlVJTERf RlVMTF9TTkFQU0hPVCB8fAorCQljdHgtPmZhc3RfZm9yd2FyZCkKKwkJcmV0dXJuOworCisJbWVz c2FnZSA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIFhMb2dSZWNHZXREYXRhKHIpOworCisJ aWYgKG1lc3NhZ2UtPmRiSWQgIT0gY3R4LT5zbG90LT5kYXRhLmRhdGFiYXNlIHx8CisJCUZpbHRl ckJ5T3JpZ2luKGN0eCwgb3JpZ2luX2lkKSkKKwkJcmV0dXJuOworCisJaWYgKFNuYXBCdWlsZFBy b2Nlc3NDaGFuZ2UoYnVpbGRlciwgeGlkLCBidWYtPm9yaWdwdHIpKQorCQlSZW9yZGVyQnVmZmVy UXVldWVERExNZXNzYWdlKGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPmVuZHB0ciwKKwkJCQkJCQkJ CSBtZXNzYWdlLT5tZXNzYWdlLCAvKiBmaXJzdCBwYXJ0IG9mIG1lc3NhZ2UgaXMgcHJlZml4ICov CisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZV9zaXplLAorCQkJCQkJCQkJIG1lc3NhZ2UtPm1l c3NhZ2UgKyBtZXNzYWdlLT5wcmVmaXhfc2l6ZSwKKwkJCQkJCQkJCSBtZXNzYWdlLT5yZWxpZCwg bWVzc2FnZS0+Y21kdHlwZSk7Cit9CisKIC8qCiAgKiBDb25zb2xpZGF0ZWQgY29tbWl0IHJlY29y ZCBoYW5kbGluZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgZm9ybSBvZiBjb21taXQKICAqIHJlY29y ZHMuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCmluZGV4IDYyNWE3 ZjQyNzMuLjIzYTg4OTVhYzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvbG9naWNhbC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9n aWNhbC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2Rk bG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNsdWRlICJy ZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCkBA IC03Myw2ICs3NCwxMCBAQCBzdGF0aWMgdm9pZCB0cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJC dWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiBzdGF0aWMgdm9pZCBtZXNzYWdl X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK IAkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWwsCiAJ CQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hh ciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBkZGxfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpj YWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2Fn ZV9sc24sIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJICBPaWQgcmVsaWQsIERlcGFyc2Vk Q29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3Qg Y2hhciAqbWVzc2FnZSk7CiAKIC8qIHN0cmVhbWluZyBjYWxsYmFja3MgKi8KIHN0YXRpYyB2b2lk IHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCkBAIC05MCw2ICs5NSwxMSBAQCBzdGF0aWMgdm9pZCBzdHJlYW1fY2hhbmdl X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bgog c3RhdGljIHZvaWQgc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNo ZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLCBib29sIHRyYW5zYWN0aW9uYWwsCiAJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwg U2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgc3Ry ZWFtX2RkbF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhO ICp0eG4sCisJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJIGNv bnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRU eXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICpt ZXNzYWdlKTsKIHN0YXRpYyB2b2lkIHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJC dWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgICBpbnQgbnJl bGF0aW9ucywgUmVsYXRpb24gcmVsYXRpb25zW10sIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5n ZSk7CiAKQEAgLTIxOCw2ICsyMjgsNyBAQCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91 dHB1dF9wbHVnaW5fb3B0aW9ucywKIAljdHgtPnJlb3JkZXItPmFwcGx5X3RydW5jYXRlID0gdHJ1 bmNhdGVfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPmNvbW1pdCA9IGNvbW1pdF9jYl93cmFw cGVyOwogCWN0eC0+cmVvcmRlci0+bWVzc2FnZSA9IG1lc3NhZ2VfY2Jfd3JhcHBlcjsKKwljdHgt PnJlb3JkZXItPmRkbCA9IGRkbF9jYl93cmFwcGVyOwogCiAJLyoKIAkgKiBUbyBzdXBwb3J0IHN0 cmVhbWluZywgd2UgcmVxdWlyZSBzdGFydC9zdG9wL2Fib3J0L2NvbW1pdC9jaGFuZ2UKQEAgLTIz NCw2ICsyNDUsNyBAQCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5f b3B0aW9ucywKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9jb21taXRfY2IgIT0gTlVMTCkgfHwK IAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9jaGFuZ2VfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+ Y2FsbGJhY2tzLnN0cmVhbV9tZXNzYWdlX2NiICE9IE5VTEwpIHx8CisJCShjdHgtPmNhbGxiYWNr cy5zdHJlYW1fZGRsX2NiICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fdHJ1 bmNhdGVfY2IgIT0gTlVMTCk7CiAKIAkvKgpAQCAtMjUxLDYgKzI2Myw3IEBAIFN0YXJ0dXBEZWNv ZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+ c3RyZWFtX2NvbW1pdCA9IHN0cmVhbV9jb21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXIt PnN0cmVhbV9jaGFuZ2UgPSBzdHJlYW1fY2hhbmdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVy LT5zdHJlYW1fbWVzc2FnZSA9IHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9y ZGVyLT5zdHJlYW1fZGRsID0gc3RyZWFtX2RkbF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+ c3RyZWFtX3RydW5jYXRlID0gc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXI7CiAKIApAQCAtMTIy MCw2ICsxMjMzLDQ0IEBAIG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFj ay5wcmV2aW91czsKIH0KIAorc3RhdGljIHZvaWQKK2RkbF9jYl93cmFwcGVyKFJlb3JkZXJCdWZm ZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCSAgWExvZ1JlY1B0ciBtZXNz YWdlX2xzbiwKKwkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRD b21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkgIGNv bnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4ID0gY2Fj aGUtPnByaXZhdGVfZGF0YTsKKwlMb2dpY2FsRXJyb3JDYWxsYmFja1N0YXRlIHN0YXRlOworCUVy cm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNrOworCisJQXNzZXJ0KCFjdHgtPmZhc3RfZm9y d2FyZCk7CisKKwlpZiAoY3R4LT5jYWxsYmFja3MuZGRsX2NiID09IE5VTEwpCisJCXJldHVybjsK KworCS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICov CisJc3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNhbGxiYWNrX25hbWUgPSAiZGRsIjsKKwlzdGF0 ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwllcnJjYWxsYmFjay5jYWxsYmFjayA9 IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJhY2suYXJnID0gKHZvaWQg KikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsK KwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCisJLyogc2V0IG91dHB1dCBz dGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRydWU7CisJY3R4LT53cml0ZV94aWQgPSB0 eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJY3R4LT53cml0 ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCisJLyogZG8gdGhlIGFjdHVhbCB3b3JrOiBjYWxs IGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFja3MuZGRsX2NiKGN0eCwgdHhuLCBtZXNzYWdlX2xz biwgcHJlZml4LCByZWxpZCwgY21kdHlwZSwKKwkJCQkJCQkJIG1lc3NhZ2Vfc2l6ZSwgbWVzc2Fn ZSk7CisKKwkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwllcnJvcl9jb250ZXh0 X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7Cit9CisKIHN0YXRpYyB2b2lkCiBzdHJlYW1f c3RhcnRfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAq dHhuLAogCQkJCQkJWExvZ1JlY1B0ciBmaXJzdF9sc24pCkBAIC0xNTM1LDYgKzE1ODYsNDggQEAg c3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuLAogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91 czsKIH0KIAorc3RhdGljIHZvaWQKK3N0cmVhbV9kZGxfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVy ICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3Nh Z2VfbHNuLAorCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRD b21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkg Y29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHggPSBj YWNoZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJvckNhbGxiYWNrU3RhdGUgc3RhdGU7CisJ RXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisKKwlBc3NlcnQoIWN0eC0+ZmFzdF9m b3J3YXJkKTsKKworCS8qIFdlJ3JlIG9ubHkgc3VwcG9zZWQgdG8gY2FsbCB0aGlzIHdoZW4gc3Ry ZWFtaW5nIGlzIHN1cHBvcnRlZC4gKi8KKwlBc3NlcnQoY3R4LT5zdHJlYW1pbmcpOworCisJLyog dGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCAqLworCWlmIChjdHgtPmNhbGxiYWNrcy5zdHJlYW1f ZGRsX2NiID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9u IHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNh bGxiYWNrX25hbWUgPSAic3RyZWFtX2RkbCI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVz c2FnZV9sc247CisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2Nh bGxiYWNrOworCWVycmNhbGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFj ay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9 ICZlcnJjYWxsYmFjazsKKworCS8qIHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93 cml0ZXMgPSB0cnVlOworCWN0eC0+d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6 IEludmFsaWRUcmFuc2FjdGlvbklkOworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xz bjsKKworCS8qIGRvIHRoZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2Fs bGJhY2tzLnN0cmVhbV9kZGxfY2IoY3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlk LAorCQkJCQkJCQkJCWNtZHR5cGUsIG1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3Ag dGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2Fs bGJhY2sucHJldmlvdXM7Cit9CisKIHN0YXRpYyB2b2lkCiBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3Jh cHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJ ICAgaW50IG5yZWxhdGlvbnMsIFJlbGF0aW9uIHJlbGF0aW9uc1tdLApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKaW5kZXggNzczNTgzYTEyYi4uZTdjNzBhYTI2 MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWls ZAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCkBAIC0x LDQgKzEsNSBAQAogYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAorICAnZGRsbWVzc2FnZS5jJywK ICAgJ2RlY29kZS5jJywKICAgJ2xhdW5jaGVyLmMnLAogICAnbG9naWNhbC5jJywKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwppbmRleCBmNWYyYmMyNGQ4Li4zODE3NWRjMDMw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKKysr IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCkBAIC02NjMsNiArNjYz LDQ3IEBAIGxvZ2ljYWxyZXBfd3JpdGVfbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rp b25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAogCXBxX3NlbmRieXRlcyhvdXQsIG1lc3NhZ2UsIHN6 KTsKIH0KIAorLyoKKyAqIFJlYWQgRERMIE1FU1NBR0UgZnJvbSBzdHJlYW0KKyAqLworY2hhciAq Citsb2dpY2FscmVwX3JlYWRfZGRsKFN0cmluZ0luZm8gaW4sIFhMb2dSZWNQdHIgKmxzbiwKKwkJ CQkJCSAgIGNvbnN0IGNoYXIgKipwcmVmaXgsCisJCQkJCQkgICBTaXplICpzeikKK3sKKwl1aW50 OCBmbGFnczsKKwljaGFyICptc2c7CisKKwlmbGFncyA9IHBxX2dldG1zZ2ludChpbiwgMSk7CisJ aWYgKGZsYWdzICE9IDApCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgZmxhZ3MgJXUgaW4g ZGRsIG1lc3NhZ2UiLCBmbGFncyk7CisKKwkqbHNuID0gcHFfZ2V0bXNnaW50NjQoaW4pOworCSpw cmVmaXggPSBwcV9nZXRtc2dzdHJpbmcoaW4pOworCSpzeiA9IHBxX2dldG1zZ2ludChpbiwgNCk7 CisJbXNnID0gKGNoYXIgKikgcHFfZ2V0bXNnYnl0ZXMoaW4sICpzeik7CisKKwlyZXR1cm4gbXNn OworfQorCisvKgorICogV3JpdGUgRERMIE1FU1NBR0UgdG8gc3RyZWFtCisgKi8KK3ZvaWQKK2xv Z2ljYWxyZXBfd3JpdGVfZGRsKFN0cmluZ0luZm8gb3V0LCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJ CQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJ dWludDgJCWZsYWdzID0gMDsKKworCXBxX3NlbmRieXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX0RE TCk7CisKKwlwcV9zZW5kaW50OChvdXQsIGZsYWdzKTsKKwlwcV9zZW5kaW50NjQob3V0LCBsc24p OworCXBxX3NlbmRzdHJpbmcob3V0LCBwcmVmaXgpOworCXBxX3NlbmRpbnQzMihvdXQsIHN6KTsK KwlwcV9zZW5kYnl0ZXMob3V0LCBtZXNzYWdlLCBzeik7Cit9CisKIC8qCiAgKiBXcml0ZSByZWxh dGlvbiBkZXNjcmlwdGlvbiB0byB0aGUgb3V0cHV0IHN0cmVhbS4KICAqLwpAQCAtMTIxOSw2ICsx MjYwLDggQEAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9u KQogCQkJcmV0dXJuICJUWVBFIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfTUVTU0FHRToKIAkJ CXJldHVybiAiTUVTU0FHRSI7CisJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX0RETDoKKwkJCXJldHVy biAiRERMIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfQkVHSU5fUFJFUEFSRToKIAkJCXJldHVy biAiQkVHSU4gUFJFUEFSRSI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkU6CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4IGI1 NjdiOGI1OWUuLjZkNDQxYTU5NjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSAibGliL2Jp bmFyeWhlYXAuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIK KyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRp b24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKICNp bmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCkBAIC01MTMsNiArNTE0LDE0IEBAIFJlb3JkZXJC dWZmZXJSZXR1cm5DaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJDaGFuZ2Ug KmNoYW5nZSwKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UpOwogCQkJY2hhbmdl LT5kYXRhLm1zZy5tZXNzYWdlID0gTlVMTDsKIAkJCWJyZWFrOworCQljYXNlIFJFT1JERVJfQlVG RkVSX0NIQU5HRV9EREw6CisJCQlpZiAoY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXggIT0gTlVMTCkK KwkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCk7CisJCQljaGFuZ2UtPmRhdGEuZGRs LnByZWZpeCA9IE5VTEw7CisJCQlpZiAoY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlICE9IE5VTEwp CisJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlKTsKKwkJCWNoYW5nZS0+ZGF0YS5k ZGwubWVzc2FnZSA9IE5VTEw7CisJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFO R0VfSU5WQUxJREFUSU9OOgogCQkJaWYgKGNoYW5nZS0+ZGF0YS5pbnZhbC5pbnZhbGlkYXRpb25z KQogCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5pbnZhbC5pbnZhbGlkYXRpb25zKTsKQEAgLTg5MSw2 ICs5MDAsMzYgQEAgUmVvcmRlckJ1ZmZlclF1ZXVlTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwg VHJhbnNhY3Rpb25JZCB4aWQsCiAJfQogfQogCisvKgorICogQSB0cmFuc2FjdGlvbmFsIERETCBt ZXNzYWdlIGlzIHF1ZXVlZCB0byBiZSBwcm9jZXNzZWQgdXBvbiBjb21taXQuCisgKi8KK3ZvaWQK K1Jlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0 aW9uSWQgeGlkLAorCQkJCQkJCSBYTG9nUmVjUHRyIGxzbiwgY29uc3QgY2hhciAqcHJlZml4LAor CQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSwKKwkJCQkJCQkg T2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUpCit7CisJTWVtb3J5Q29udGV4 dCBvbGRjb250ZXh0OworCVJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZTsKKworCUFzc2VydChU cmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8ocmItPmNvbnRleHQpOworCisJY2hhbmdlID0gUmVvcmRlckJ1ZmZlckdldENoYW5n ZShyYik7CisJY2hhbmdlLT5hY3Rpb24gPSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOworCWNo YW5nZS0+ZGF0YS5kZGwucHJlZml4ID0gcHN0cmR1cChwcmVmaXgpOworCWNoYW5nZS0+ZGF0YS5k ZGwucmVsaWQgPSByZWxpZDsKKwljaGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUgPSBjbWR0eXBlOwor CWNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplID0gbWVzc2FnZV9zaXplOworCWNoYW5nZS0+ ZGF0YS5kZGwubWVzc2FnZSA9IHBhbGxvYyhtZXNzYWdlX3NpemUpOworCW1lbWNweShjaGFuZ2Ut PmRhdGEuZGRsLm1lc3NhZ2UsIG1lc3NhZ2UsIG1lc3NhZ2Vfc2l6ZSk7CisKKwlSZW9yZGVyQnVm ZmVyUXVldWVDaGFuZ2UocmIsIHhpZCwgbHNuLCBjaGFuZ2UsIGZhbHNlKTsKKworCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKwogLyoKICAqIEFzc2VydFRYTkxzbk9yZGVy CiAgKgkJVmVyaWZ5IExTTiBvcmRlcmluZyBvZiB0cmFuc2FjdGlvbiBsaXN0cyBpbiB0aGUgcmVv cmRlcmJ1ZmZlcgpAQCAtMTk5OSw2ICsyMDM4LDI5IEBAIFJlb3JkZXJCdWZmZXJBcHBseU1lc3Nh Z2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJY2hhbmdl LT5kYXRhLm1zZy5tZXNzYWdlKTsKIH0KIAorLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgUmVv cmRlckJ1ZmZlclByb2Nlc3NUWE4gZm9yIGFwcGx5aW5nIHRoZSBEREwgbWVzc2FnZS4KKyAqLwor c3RhdGljIGlubGluZSB2b2lkCitSZW9yZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKFJlb3JkZXJC dWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJIFJlb3JkZXJCdWZmZXJD aGFuZ2UgKmNoYW5nZSwgYm9vbCBzdHJlYW1pbmcpCit7CisJaWYgKHN0cmVhbWluZykKKwkJcmIt PnN0cmVhbV9kZGwocmIsIHR4biwgY2hhbmdlLT5sc24sCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEu ZGRsLnByZWZpeCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGwucmVsaWQsCisJCQkJCQkJICBj aGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsLm1lc3Nh Z2Vfc2l6ZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZSk7CisJZWxzZQorCQly Yi0+ZGRsKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsLnBy ZWZpeCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCwKKwkJCQkJICAgY2hhbmdlLT5k YXRhLmRkbC5jbWR0eXBlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSwK KwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlKTsKK30KKwogLyoKICAqIEZ1bmN0aW9u IHRvIHN0b3JlIHRoZSBjb21tYW5kIGlkIGFuZCBzbmFwc2hvdCBhdCB0aGUgZW5kIG9mIHRoZSBj dXJyZW50CiAgKiBzdHJlYW0gc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgd2hpbGUgc2Vu ZGluZyB0aGUgbmV4dCBzdHJlYW0uCkBAIC0yMzc5LDYgKzI0NDEsMTAgQEAgUmVvcmRlckJ1ZmZl clByb2Nlc3NUWE4oUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJ CQkJUmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UsIHN0cmVhbWluZyk7 CiAJCQkJCWJyZWFrOwogCisJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOgorCQkJ CQlSZW9yZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5n KTsKKwkJCQkJYnJlYWs7CisKIAkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElE QVRJT046CiAJCQkJCS8qIEV4ZWN1dGUgdGhlIGludmFsaWRhdGlvbiBtZXNzYWdlcyBsb2NhbGx5 ICovCiAJCQkJCVJlb3JkZXJCdWZmZXJFeGVjdXRlSW52YWxpZGF0aW9ucyhjaGFuZ2UtPmRhdGEu aW52YWwubmludmFsaWRhdGlvbnMsCkBAIC0zODAxLDYgKzM4NjcsMzkgQEAgUmVvcmRlckJ1ZmZl clNlcmlhbGl6ZUNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhu LAogCQkJCQkgICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSk7CiAJCQkJZGF0YSArPSBj aGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZTsKIAorCQkJCWJyZWFrOworCQkJfQorCQljYXNl IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw6CisJCQl7CisJCQkJY2hhcgkgICAqZGF0YTsKKwkJ CQlTaXplCQlwcmVmaXhfc2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCkgKyAx OworCisJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6 ZSArCisJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihPaWQpICsgc2l6ZW9mKGludCkgKyBzaXpl b2YoU2l6ZSk7CisJCQkJUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZVJlc2VydmUocmIsIHN6KTsKKwor CQkJCWRhdGEgPSAoKGNoYXIgKikgcmItPm91dGJ1ZikgKyBzaXplb2YoUmVvcmRlckJ1ZmZlckRp c2tDaGFuZ2UpOworCisJCQkJLyogbWlnaHQgaGF2ZSBiZWVuIHJlYWxsb2NhdGVkIGFib3ZlICov CisJCQkJb25kaXNrID0gKFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlICopIHJiLT5vdXRidWY7CisK KwkJCQkvKiB3cml0ZSB0aGUgcHJlZml4LCByZWxpZCBhbmQgY21kdHlwZSBpbmNsdWRpbmcgdGhl IHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJnByZWZpeF9zaXplLCBzaXplb2YoU2l6ZSkpOwor CQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCAmY2hhbmdlLT5kYXRh LmRkbC5yZWxpZCwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJ bWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUsIHNpemVvZihEZXBhcnNlZENv bW1hbmRUeXBlKSk7CisJCQkJZGF0YSArPSBzaXplb2YoaW50KTsKKwkJCQltZW1jcHkoZGF0YSwg Y2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgsIHByZWZpeF9zaXplKTsKKwkJCQlkYXRhICs9IHByZWZp eF9zaXplOworCisJCQkJLyogd3JpdGUgdGhlIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSBzaXplICov CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSwgc2l6ZW9m KFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJCQltZW1jcHkoZGF0YSwgY2hh bmdlLT5kYXRhLmRkbC5tZXNzYWdlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vf c2l6ZSk7CisJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZTsKKwogCQkJ CWJyZWFrOwogCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046 CkBAIC00MTE1LDYgKzQyMTQsMTUgQEAgUmVvcmRlckJ1ZmZlckNoYW5nZVNpemUoUmVvcmRlckJ1 ZmZlckNoYW5nZSAqY2hhbmdlKQogCQkJCXN6ICs9IHByZWZpeF9zaXplICsgY2hhbmdlLT5kYXRh Lm1zZy5tZXNzYWdlX3NpemUgKwogCQkJCQlzaXplb2YoU2l6ZSkgKyBzaXplb2YoU2l6ZSk7CiAK KwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOgorCQkJ eworCQkJCVNpemUJCXByZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4 KSArIDE7CisKKwkJCQlzeiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2Fn ZV9zaXplICsKKwkJCQkJc2l6ZW9mKFNpemUpICsgc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkg KyBzaXplb2YoRGVwYXJzZWRDb21tYW5kVHlwZSk7CisKIAkJCQlicmVhazsKIAkJCX0KIAkJY2Fz ZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgpAQCAtNDM5Miw2ICs0NTAwLDMz IEBAIFJlb3JkZXJCdWZmZXJSZXN0b3JlQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCiAJCQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsK IAkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplOwogCisJCQkJYnJlYWs7 CisJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETDoKKwkJCXsKKwkJCQlTaXpl CQlwcmVmaXhfc2l6ZTsKKworCQkJCS8qIHJlYWQgcHJlZml4ICovCisJCQkJbWVtY3B5KCZwcmVm aXhfc2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsK KwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5kZGwucmVsaWQsIGRhdGEsIHNpemVvZihPaWQpKTsK KwkJCQlkYXRhICs9IHNpemVvZihPaWQpOworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLmRkbC5j bWR0eXBlLCBkYXRhLCBzaXplb2YoRGVwYXJzZWRDb21tYW5kVHlwZSkpOworCQkJCWRhdGEgKz0g c2l6ZW9mKGludCk7CisJCQkJY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXggPSBNZW1vcnlDb250ZXh0 QWxsb2MocmItPmNvbnRleHQsIHByZWZpeF9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRh LmRkbC5wcmVmaXgsIGRhdGEsIHByZWZpeF9zaXplKTsKKwkJCQlBc3NlcnQoY2hhbmdlLT5kYXRh LmRkbC5wcmVmaXhbcHJlZml4X3NpemUgLSAxXSA9PSAnXDAnKTsKKwkJCQlkYXRhICs9IHByZWZp eF9zaXplOworCisJCQkJLyogcmVhZCB0aGUgbWVzc2FnZSAqLworCQkJCW1lbWNweSgmY2hhbmdl LT5kYXRhLm1zZy5tZXNzYWdlX3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSAr PSBzaXplb2YoU2l6ZSk7CisJCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTWVtb3J5Q29u dGV4dEFsbG9jKHJiLT5jb250ZXh0LAorCQkJCQkJCQkJCQkJCQkJICBjaGFuZ2UtPmRhdGEubXNn Lm1lc3NhZ2Vfc2l6ZSk7CisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSwgZGF0 YSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCWRhdGEgKz0g Y2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CisKIAkJCQlicmVhazsKIAkJCX0KIAkJY2Fz ZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggZTZkYzVjY2Q4Yy4uY2E5MjU4MTEzYSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0xNTYsNiArMTU2LDcgQEAK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNp bmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAicGFyc2VyL2FuYWx5emUu aCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKICNpbmNsdWRlICJwZ3N0YXQu aCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgiCkBAIC0xODAsNyArMTgxLDEwIEBA CiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNl LmgiCisjaW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90Lmgi CisjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9jYXRjYWNoZS5oIgpAQCAt MjUwNyw2ICsyNTExLDIzOSBAQCBhcHBseV9oYW5kbGVfdHJ1bmNhdGUoU3RyaW5nSW5mbyBzKQog CWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiB9CiAKKy8qCisgKiBTcGVjaWFsIGhhbmRsaW5nIGZv ciBDUkVBVEUgVEFCTEUgQVMgYW5kIFNFTEVDVCBJTlRPCisgKiB0byBub3QgcG9wdWxhdGUgZGF0 YSBmcm9tIHRoZSBzb3VyY2UgdGFibGUgb24gdGhlIHN1YnNjcmliZXIuCisgKiBBbGxvdyB0aGUg ZGF0YSB0byBiZSByZXBsaWNhdGVkIHRocm91Z2ggSU5TRVJUcyBvbiB0aGUgcHVibGlzaGVyLgor ICovCitzdGF0aWMgdm9pZAorcHJlcHJvY2Vzc19jcmVhdGVfdGFibGUoUmF3U3RtdCAqY29tbWFu ZCkKK3sKKwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisKKwljb21tYW5kVGFnID0gQ3JlYXRlQ29t bWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCXN3aXRjaCAoY29tbWFuZFRhZykKKwl7CisJ CWNhc2UgQ01EVEFHX0NSRUFURV9UQUJMRV9BUzoKKwkJY2FzZSBDTURUQUdfU0VMRUNUX0lOVE86 CisJCQl7CisJCQkJQ3JlYXRlVGFibGVBc1N0bXQgKmNhc3RtdCA9IChDcmVhdGVUYWJsZUFzU3Rt dCAqKSBjb21tYW5kLT5zdG10OworCisJCQkJaWYgKGNhc3RtdC0+b2JqdHlwZSA9PSBPQkpFQ1Rf VEFCTEUpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3JjZSBza2lwcGluZyBkYXRhIHBvcHVs YXRpb24gdG8gYXZvaWQgZGF0YQorCQkJCQkgKiBpbmNvbnNpc3RlbmN5LiBEYXRhIHNob3VsZCBi ZSByZXBsaWNhdGVkIGZyb20gdGhlCisJCQkJCSAqIHB1Ymxpc2hlciBpbnN0ZWFkLgorCQkJCQkg Ki8KKwkJCQkJY2FzdG10LT5pbnRvLT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJ YnJlYWs7CisJCWNhc2UgQ01EVEFHX1NFTEVDVDoKKwkJCXsKKwkJCQlTZWxlY3RTdG10ICpzc3Rt dCA9IChTZWxlY3RTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisKKwkJCQlpZiAoc3N0bXQtPmludG9D bGF1c2UgIT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZvcmNlIHNraXBwaW5nIGRh dGEgcG9wdWxhdGlvbiB0byBhdm9pZCBkYXRhCisJCQkJCSAqIGluY29uc2lzdGVuY3kuIERhdGEg c2hvdWxkIGJlIHJlcGxpY2F0ZWQgZnJvbSB0aGUKKwkJCQkJICogcHVibGlzaGVyIGluc3RlYWQu CisJCQkJCSAqLworCQkJCQlzc3RtdC0+aW50b0NsYXVzZS0+c2tpcERhdGEgPSB0cnVlOworCQkJ CX0KKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorfQorCisvKgor ICogSGFuZGxlIENSRUFURSBUQUJMRSBjb21tYW5kCisgKgorICogQ2FsbCBBZGRTdWJzY3JpcHRp b25SZWxTdGF0ZSBmb3IgQ1JFQVRFIExBQkVMIGNvbW1hbmQgdG8gc2V0IHRoZSByZWxzdGF0ZSB0 bworICogU1VCUkVMX1NUQVRFX1JFQURZIHNvIERNTCBjaGFuZ2VzIG9uIHRoaXMgbmV3IHRhYmxl IGNhbiBiZSByZXBsaWNhdGVkIHdpdGhvdXQKKyAqIGhhdmluZyB0byBtYW51YWxseSBydW4gImFs dGVyIHN1YnNjcmlwdGlvbiAuLi4gcmVmcmVzaCBwdWJsaWNhdGlvbiIKKyAqLworc3RhdGljIHZv aWQKK2hhbmRsZV9jcmVhdGVfdGFibGUoUmF3U3RtdCAqY29tbWFuZCkKK3sKKwlDb21tYW5kVGFn CWNvbW1hbmRUYWc7CisJUmFuZ2VWYXIgICAqcnYgPSBOVUxMOworCU9pZAkJCXJlbGlkOworCU9p ZAkJCXJlbG5hbWVzcGFjZSA9IEludmFsaWRPaWQ7CisJQ3JlYXRlU3RtdCAqY3N0bXQ7CisJY2hh cgkgICAqc2NoZW1hbmFtZSA9IE5VTEw7CisJY2hhcgkgICAqcmVsbmFtZSA9IE5VTEw7CisKKwlj b21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKwljc3RtdCA9 IChDcmVhdGVTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisJcnYgPSBjc3RtdC0+cmVsYXRpb247CisK KwlpZiAoY29tbWFuZFRhZyA9PSBDTURUQUdfQ1JFQVRFX1RBQkxFKQorCXsKKwkJY3N0bXQgPSAo Q3JlYXRlU3RtdCAqKSBjb21tYW5kLT5zdG10OworCQlydiA9IGNzdG10LT5yZWxhdGlvbjsKKwl9 CisJZWxzZQorCXsKKwkJcmV0dXJuOworCX0KKworCWlmICghcnYpCisJCXJldHVybjsKKworCXNj aGVtYW5hbWUgPSBydi0+c2NoZW1hbmFtZTsKKwlyZWxuYW1lID0gcnYtPnJlbG5hbWU7CisKKwlp ZiAoc2NoZW1hbmFtZSAhPSBOVUxMKQorCQlyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX29p ZChzY2hlbWFuYW1lLCBmYWxzZSk7CisKKwlpZiAocmVsbmFtZXNwYWNlICE9IEludmFsaWRPaWQp CisJCXJlbGlkID0gZ2V0X3JlbG5hbWVfcmVsaWQocmVsbmFtZSwgcmVsbmFtZXNwYWNlKTsKKwll bHNlCisJCXJlbGlkID0gUmVsbmFtZUdldFJlbGlkKHJlbG5hbWUpOworCisJaWYgKE9pZElzVmFs aWQocmVsaWQpKQorCXsKKwkJQWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUoTXlTdWJzY3JpcHRpb24t Pm9pZCwgcmVsaWQsCisJCQkJCQkJCVNVQlJFTF9TVEFURV9SRUFEWSwKKwkJCQkJCQkJSW52YWxp ZFhMb2dSZWNQdHIpOworCQllcmVwb3J0KERFQlVHMSwKKwkJCQkoZXJybXNnX2ludGVybmFsKCJ0 YWJsZSBcIiVzXCIgYWRkZWQgdG8gc3Vic2NyaXB0aW9uIFwiJXNcIiIsCisJCQkJCQkJCSByZWxu YW1lLCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwl9Cit9CisKKy8qCisgKiBIYW5kbGUgRERM IHJlcGxpY2F0aW9uIG1lc3NhZ2VzLgorICovCitzdGF0aWMgdm9pZAorYXBwbHlfaGFuZGxlX2Rk bChTdHJpbmdJbmZvIHMpCit7CisJWExvZ1JlY1B0cglsc247CisJY29uc3QgY2hhciAqcHJlZml4 ID0gTlVMTDsKKwljaGFyCSAgICptZXNzYWdlID0gTlVMTDsKKwljaGFyCSAgICpkZGxfY29tbWFu ZDsKKwlTaXplCQlzejsKKwlMaXN0CSAgICpwYXJzZXRyZWVfbGlzdDsKKwlMaXN0Q2VsbCAgICpw YXJzZXRyZWVfaXRlbTsKKwlEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyOworCU1lbW9yeUNvbnRleHQg b2xkY29udGV4dDsKKwljb25zdCBjaGFyICpzYXZlX2RlYnVnX3F1ZXJ5X3N0cmluZyA9IGRlYnVn X3F1ZXJ5X3N0cmluZzsKKworCW1lc3NhZ2UgPSBsb2dpY2FscmVwX3JlYWRfZGRsKHMsICZsc24s ICZwcmVmaXgsICZzeik7CisKKwkvKiBNYWtlIHN1cmUgd2UgYXJlIGluIGEgdHJhbnNhY3Rpb24g Y29tbWFuZCAqLworCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKworCWRkbF9jb21tYW5kID0g ZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcobWVzc2FnZSk7CisJZGVidWdfcXVlcnlfc3RyaW5n ID0gZGRsX2NvbW1hbmQ7CisKKwkvKiBEZXN0Tm9uZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiAq LworCXJlY2VpdmVyID0gQ3JlYXRlRGVzdFJlY2VpdmVyKERlc3ROb25lKTsKKwlwYXJzZXRyZWVf bGlzdCA9IHBnX3BhcnNlX3F1ZXJ5KGRkbF9jb21tYW5kKTsKKworCWZvcmVhY2gocGFyc2V0cmVl X2l0ZW0sIHBhcnNldHJlZV9saXN0KQorCXsKKwkJTGlzdAkgICAqcGxhbnRyZWVfbGlzdDsKKwkJ TGlzdAkgICAqcXVlcnl0cmVlX2xpc3Q7CisJCVJhd1N0bXQgICAgKmNvbW1hbmQgPSAoUmF3U3Rt dCAqKSBsZmlyc3QocGFyc2V0cmVlX2l0ZW0pOworCQlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisJ CU1lbW9yeUNvbnRleHQgcGVyX3BhcnNldHJlZV9jb250ZXh0ID0gTlVMTDsKKwkJUG9ydGFsCQlw b3J0YWw7CisJCWJvb2wJCXNuYXBzaG90X3NldCA9IGZhbHNlOworCisJCWNvbW1hbmRUYWcgPSBD cmVhdGVDb21tYW5kVGFnKChOb2RlICopIGNvbW1hbmQpOworCisJCS8qIElmIHdlIGdvdCBhIGNh bmNlbCBzaWduYWwgaW4gcGFyc2luZyBvciBwcmlvciBjb21tYW5kLCBxdWl0ICovCisJCUNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogUmVtb3ZlIGRhdGEgcG9wdWxhdGlvbiBmcm9tIHRo ZSBjb21tYW5kICovCisJCXByZXByb2Nlc3NfY3JlYXRlX3RhYmxlKGNvbW1hbmQpOworCisJCS8q CisJCSAqIFNldCB1cCBhIHNuYXBzaG90IGlmIHBhcnNlIGFuYWx5c2lzL3BsYW5uaW5nIHdpbGwg bmVlZCBvbmUuCisJCSAqLworCQlpZiAoYW5hbHl6ZV9yZXF1aXJlc19zbmFwc2hvdChjb21tYW5k KSkKKwkJeworCQkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7 CisJCQlzbmFwc2hvdF9zZXQgPSB0cnVlOworCQl9CisKKwkJLyoKKwkJICogV2UgZG8gdGhlIHdv cmsgZm9yIGVhY2ggcGFyc2V0cmVlIGluIGEgc2hvcnQtbGl2ZWQgY29udGV4dCwgdG8KKwkJICog bGltaXQgdGhlIG1lbW9yeSB1c2VkIHdoZW4gdGhlcmUgYXJlIG1hbnkgY29tbWFuZHMgaW4gdGhl IHN0cmluZy4KKwkJICovCisJCXBlcl9wYXJzZXRyZWVfY29udGV4dCA9CisJCQlBbGxvY1NldENv bnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgImV4ZWN1dGVfc3Fs X3N0cmluZyBwZXItc3RhdGVtZW50IGNvbnRleHQiLAorCQkJCQkJCQkgIEFMTE9DU0VUX0RFRkFV TFRfU0laRVMpOworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBlcl9wYXJz ZXRyZWVfY29udGV4dCk7CisKKwkJcXVlcnl0cmVlX2xpc3QgPSBwZ19hbmFseXplX2FuZF9yZXdy aXRlX2ZpeGVkcGFyYW1zKGNvbW1hbmQsCisJCQkJCQkJCQkJCQkJCQlkZGxfY29tbWFuZCwKKwkJ CQkJCQkJCQkJCQkJCU5VTEwsIDAsIE5VTEwpOworCisJCXBsYW50cmVlX2xpc3QgPSBwZ19wbGFu X3F1ZXJpZXMocXVlcnl0cmVlX2xpc3QsIGRkbF9jb21tYW5kLCAwLCBOVUxMKTsKKworCQkvKiBE b25lIHdpdGggdGhlIHNuYXBzaG90IHVzZWQgZm9yIHBhcnNpbmcvcGxhbm5pbmcgKi8KKwkJaWYg KHNuYXBzaG90X3NldCkKKwkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwkJcG9ydGFsID0gQ3Jl YXRlUG9ydGFsKCJsb2dpY2FsIHJlcGxpY2F0aW9uIiwgdHJ1ZSwgdHJ1ZSk7CisKKwkJLyoKKwkJ ICogV2UgZG9uJ3QgaGF2ZSB0byBjb3B5IGFueXRoaW5nIGludG8gdGhlIHBvcnRhbCwgYmVjYXVz ZSBldmVyeXRoaW5nCisJCSAqIHdlIGFyZSBwYXNzaW5nIGhlcmUgaXMgaW4gQXBwbHlNZXNzYWdl Q29udGV4dCBvciB0aGUKKwkJICogcGVyX3BhcnNldHJlZV9jb250ZXh0LCBhbmQgc28gd2lsbCBv dXRsaXZlIHRoZSBwb3J0YWwgYW55d2F5LgorCQkgKi8KKwkJUG9ydGFsRGVmaW5lUXVlcnkocG9y dGFsLAorCQkJCQkJICBOVUxMLAorCQkJCQkJICBkZGxfY29tbWFuZCwKKwkJCQkJCSAgY29tbWFu ZFRhZywKKwkJCQkJCSAgcGxhbnRyZWVfbGlzdCwKKwkJCQkJCSAgTlVMTCk7CisKKwkJLyoKKwkJ ICogU3RhcnQgdGhlIHBvcnRhbC4gIE5vIHBhcmFtZXRlcnMgaGVyZS4KKwkJICovCisJCVBvcnRh bFN0YXJ0KHBvcnRhbCwgTlVMTCwgMCwgSW52YWxpZFNuYXBzaG90KTsKKworCQkvKgorCQkgKiBT d2l0Y2ggYmFjayB0byB0cmFuc2FjdGlvbiBjb250ZXh0IGZvciBleGVjdXRpb24uCisJCSAqLwor CQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkJKHZvaWQpIFBvcnRhbFJ1 bihwb3J0YWwsCisJCQkJCQkgRkVUQ0hfQUxMLAorCQkJCQkJIHRydWUsCisJCQkJCQkgdHJ1ZSwK KwkJCQkJCSByZWNlaXZlciwKKwkJCQkJCSByZWNlaXZlciwKKwkJCQkJCSBOVUxMKTsKKworCQlQ b3J0YWxEcm9wKHBvcnRhbCwgZmFsc2UpOworCisJCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7 CisKKwkJLyoKKwkJICogVGFibGUgY3JlYXRlZCBieSBEREwgcmVwbGljYXRpb24gKGRhdGFiYXNl IGxldmVsKSBpcyBhdXRvbWF0aWNhbGx5CisJCSAqIGFkZGVkIHRvIHRoZSBzdWJzY3JpcHRpb24g aGVyZS4KKwkJICovCisJCWhhbmRsZV9jcmVhdGVfdGFibGUoY29tbWFuZCk7CisKKwkJLyogTm93 IHdlIG1heSBkcm9wIHRoZSBwZXItcGFyc2V0cmVlIGNvbnRleHQsIGlmIG9uZSB3YXMgY3JlYXRl ZC4gKi8KKwkJTWVtb3J5Q29udGV4dERlbGV0ZShwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCX0K KworCWRlYnVnX3F1ZXJ5X3N0cmluZyA9IHNhdmVfZGVidWdfcXVlcnlfc3RyaW5nOworCWVuZF9y ZXBsaWNhdGlvbl9zdGVwKCk7Cit9CisKIC8qCiAgKiBMb2dpY2FsIHJlcGxpY2F0aW9uIHByb3Rv Y29sIG1lc3NhZ2UgZGlzcGF0Y2hlci4KICAqLwpAQCAtMjU3MSw2ICsyODA4LDEwIEBAIGFwcGx5 X2Rpc3BhdGNoKFN0cmluZ0luZm8gcykKIAkJCSAqLwogCQkJYnJlYWs7CiAKKwkJY2FzZSBMT0dJ Q0FMX1JFUF9NU0dfRERMOgorCQkJYXBwbHlfaGFuZGxlX2RkbChzKTsKKwkJCWJyZWFrOworCiAJ CWNhc2UgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9TVEFSVDoKIAkJCWFwcGx5X2hhbmRsZV9zdHJl YW1fc3RhcnQocyk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1 dC9wZ291dHB1dC5jCmluZGV4IGNhNDZmYmEzYWYuLjhlOWRhMTFiNDAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpAQCAtNTMsNiArNTMsMTEgQEAgc3Rh dGljIHZvaWQgcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJ CQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKIAkJ CQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJIFNp emUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgcGdvdXRwdXRfZGRsKExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJUmVvcmRlckJ1ZmZlclRYTiAqdHhu LCBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIE9p ZCByZWxpZCwKKwkJCQkJCQkJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQlT aXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyBib29sIHBnb3V0cHV0X29yaWdp bl9maWx0ZXIoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCQkgICBSZXBPcmln aW5JZCBvcmlnaW5faWQpOwogc3RhdGljIHZvaWQgcGdvdXRwdXRfYmVnaW5fcHJlcGFyZV90eG4o TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LApAQCAtMjU2LDYgKzI2MSw3IEBAIF9QR19vdXRw dXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikKIAljYi0+Y2hhbmdlX2Ni ID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT50cnVuY2F0ZV9jYiA9IHBnb3V0cHV0X3RydW5jYXRl OwogCWNiLT5tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVzc2FnZTsKKwljYi0+ZGRsX2NiID0gcGdv dXRwdXRfZGRsOwogCWNiLT5jb21taXRfY2IgPSBwZ291dHB1dF9jb21taXRfdHhuOwogCiAJY2It PmJlZ2luX3ByZXBhcmVfY2IgPSBwZ291dHB1dF9iZWdpbl9wcmVwYXJlX3R4bjsKQEAgLTI3Miw2 ICsyNzgsNyBAQCBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAq Y2IpCiAJY2ItPnN0cmVhbV9jb21taXRfY2IgPSBwZ291dHB1dF9zdHJlYW1fY29tbWl0OwogCWNi LT5zdHJlYW1fY2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT5zdHJlYW1fbWVzc2Fn ZV9jYiA9IHBnb3V0cHV0X21lc3NhZ2U7CisJY2ItPnN0cmVhbV9kZGxfY2IgPSBwZ291dHB1dF9k ZGw7CiAJY2ItPnN0cmVhbV90cnVuY2F0ZV9jYiA9IHBnb3V0cHV0X3RydW5jYXRlOwogCS8qIHRy YW5zYWN0aW9uIHN0cmVhbWluZyAtIHR3by1waGFzZSBjb21taXQgKi8KIAljYi0+c3RyZWFtX3By ZXBhcmVfY2IgPSBwZ291dHB1dF9zdHJlYW1fcHJlcGFyZV90eG47CkBAIC00MjYsNiArNDMzLDcg QEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIE91dHB1dFBs dWdpbk9wdGlvbnMgKm9wdCwKIAogCS8qIFRoaXMgcGx1Z2luIHVzZXMgYmluYXJ5IHByb3RvY29s LiAqLwogCW9wdC0+b3V0cHV0X3R5cGUgPSBPVVRQVVRfUExVR0lOX0JJTkFSWV9PVVRQVVQ7CisJ b3B0LT5yZWNlaXZlX3Jld3JpdGVzID0gdHJ1ZTsKIAogCS8qCiAJICogVGhpcyBpcyByZXBsaWNh dGlvbiBzdGFydCBhbmQgbm90IHNsb3QgaW5pdGlhbGl6YXRpb24uCkBAIC00OTksNiArNTA3LDcg QEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIE91dHB1dFBs dWdpbk9wdGlvbnMgKm9wdCwKIAogCQkvKiBJbml0IHB1YmxpY2F0aW9uIHN0YXRlLiAqLwogCQlk YXRhLT5wdWJsaWNhdGlvbnMgPSBOSUw7CisJCWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0gTklMOwog CQlwdWJsaWNhdGlvbnNfdmFsaWQgPSBmYWxzZTsKIAkJQ2FjaGVSZWdpc3RlclN5c2NhY2hlQ2Fs bGJhY2soUFVCTElDQVRJT05PSUQsCiAJCQkJCQkJCQkgIHB1YmxpY2F0aW9uX2ludmFsaWRhdGlv bl9jYiwKQEAgLTEzNzcsOSArMTM4NiwyMiBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJUmVvcmRlckJ1ZmZlckNo YW5nZVR5cGUgYWN0aW9uID0gY2hhbmdlLT5hY3Rpb247CiAJVHVwbGVUYWJsZVNsb3QgKm9sZF9z bG90ID0gTlVMTDsKIAlUdXBsZVRhYmxlU2xvdCAqbmV3X3Nsb3QgPSBOVUxMOworCWJvb2wJCXRh YmxlX3Jld3JpdGUgPSBmYWxzZTsKIAogCXVwZGF0ZV9yZXBsaWNhdGlvbl9wcm9ncmVzcyhjdHgs IGZhbHNlKTsKIAorCS8qCisJICogRm9yIGhlYXAgcmV3cml0ZXMsIHdlIG1pZ2h0IG5lZWQgdG8g cmVwbGljYXRlIHRoZW0gaWYgdGhlIHJld3JpdHRlbgorCSAqIHRhYmxlIHB1Ymxpc2hlcyByZXdy aXRlIGRkbCBtZXNzYWdlLiBTbyBnZXQgdGhlIGFjdHVhbCByZWxhdGlvbiBoZXJlCisJICogYW5k IGNoZWNrIHRoZSBwdWJhY3Rpb24gbGF0ZXIuCisJICovCisJaWYgKHJlbGF0aW9uLT5yZF9yZWwt PnJlbHJld3JpdGUpCisJeworCQl0YWJsZV9yZXdyaXRlID0gdHJ1ZTsKKwkJcmVsYXRpb24gPSBS ZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsYXRpb24tPnJkX3JlbC0+cmVscmV3cml0ZSk7CisJCXRh cmdldHJlbCA9IHJlbGF0aW9uOworCX0KKwogCWlmICghaXNfcHVibGlzaGFibGVfcmVsYXRpb24o cmVsYXRpb24pKQogCQlyZXR1cm47CiAKQEAgLTE0MTMsNiArMTQzNSwxMyBAQCBwZ291dHB1dF9j aGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiAJCQlBc3NlcnQoZmFsc2UpOwogCX0KIAorCS8qCisJICogV2UgZG9uJ3QgcHVibGlzaCB0YWJs ZSByZXdyaXRlIGNoYW5nZSB1bmxlc3Mgd2UgcHVibGlzaCB0aGUgcmV3cml0ZSBkZGwKKwkgKiBt ZXNzYWdlLgorCSAqLworCWlmICh0YWJsZV9yZXdyaXRlICYmICFyZWxlbnRyeS0+cHViYWN0aW9u cy5wdWJkZGwpCisJCXJldHVybjsKKwogCS8qIEF2b2lkIGxlYWtpbmcgbWVtb3J5IGJ5IHVzaW5n IGFuZCByZXNldHRpbmcgb3VyIG93biBjb250ZXh0ICovCiAJb2xkID0gTWVtb3J5Q29udGV4dFN3 aXRjaFRvKGRhdGEtPmNvbnRleHQpOwogCkBAIC0xNDQyLDggKzE0NzEsOCBAQCBwZ291dHB1dF9j aGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiAJCQl9CiAKIAkJCS8qIENoZWNrIHJvdyBmaWx0ZXIgKi8KLQkJCWlmICghcGdvdXRwdXRfcm93 X2ZpbHRlcih0YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVsZW50cnksCi0JCQkJCQkJCQkg JmFjdGlvbikpCisJCQlpZiAoIXRhYmxlX3Jld3JpdGUgJiYKKwkJCQkhcGdvdXRwdXRfcm93X2Zp bHRlcih0YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVsZW50cnksICZhY3Rpb24pKQogCQkJ CWJyZWFrOwogCiAJCQkvKgpAQCAtMTQ2Myw4ICsxNDkyLDE5IEBAIHBnb3V0cHV0X2NoYW5nZShM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCW1h eWJlX3NlbmRfc2NoZW1hKGN0eCwgY2hhbmdlLCByZWxhdGlvbiwgcmVsZW50cnkpOwogCiAJCQlP dXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVlKTsKLQkJCWxvZ2ljYWxyZXBfd3JpdGVf aW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwgbmV3X3Nsb3QsCi0JCQkJCQkJCQlkYXRh LT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKKworCQkJLyoKKwkJCSAqIENvbnZlcnQgdGhl IHJld3JpdGUgaW5zZXJ0cyB0byB1cGRhdGVzIHNvIHRoYXQgdGhlIHN1YnNjcmliZXIKKwkJCSAq IGNhbiByZXBsYXkgaXQuIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBiZXR3 ZWVuCisJCQkgKiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgaXMgY29uc2lzdGVudC4KKwkJCSAq LworCQkJaWYgKHRhYmxlX3Jld3JpdGUpCisJCQkJbG9naWNhbHJlcF93cml0ZV91cGRhdGUoY3R4 LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLAorCQkJCQkJCQkJCU5VTEwsIG5ld19zbG90LCBkYXRhLT5i aW5hcnksCisJCQkJCQkJCQkJcmVsZW50cnktPmNvbHVtbnMpOworCQkJZWxzZQorCQkJCWxvZ2lj YWxyZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwgbmV3X3Nsb3QsCisJ CQkJCQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CiAJCQlPdXRwdXRQbHVn aW5Xcml0ZShjdHgsIHRydWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hB TkdFX1VQREFURToKQEAgLTE1OTYsNiArMTYzNiw5IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJYW5jZXN0b3Ig PSBOVUxMOwogCX0KIAorCWlmICh0YWJsZV9yZXdyaXRlKQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0 aW9uKTsKKwogCS8qIENsZWFudXAgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkKTsKIAlN ZW1vcnlDb250ZXh0UmVzZXQoZGF0YS0+Y29udGV4dCk7CkBAIC0xNzE0LDYgKzE3NTcsMTM4IEBA IHBnb3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIH0KIAorLyoKKyAq IFNlbmQgdGhlIGRlY29kZWQgRERMIG92ZXIgd2lyZS4KKyAqLworc3RhdGljIHZvaWQKK3Bnb3V0 cHV0X2RkbChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKKwkJCQkJWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJY29uc3QgY2hhciAqcHJlZml4 LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJU2l6ZSBzeiwg Y29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdPdXRwdXRE YXRhICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCVBHT3V0cHV0VHhuRGF0YSAqdHhu ZGF0YSA9IChQR091dHB1dFR4bkRhdGEgKikgdHhuLT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CisJ UmVsYXRpb24JcmVsYXRpb24gPSBOVUxMOworCVJlbGF0aW9uU3luY0VudHJ5ICpyZWxlbnRyeTsK KworCXN3aXRjaCAoY21kdHlwZSkKKwl7CisJCWNhc2UgRENUX1RhYmxlRHJvcFN0YXJ0OgorCisJ CQkvKgorCQkJICogT24gRFJPUCBzdGFydCwgYWRkIHRoZSByZWxpZCB0byBhIGRlbGV0ZWRfcmVs aWQgbGlzdCBpZiB0aGUKKwkJCSAqIHJlbGlkIGlzIHBhcnQgb2YgYSBwdWJsaWNhdGlvbiB0aGF0 IHN1cHBvcnRzIGRkbCBwdWJsaWNhdGlvbi4KKwkJCSAqIFdlIG5lZWQgdGhpcyBiZWNhdXNlIG9u IERST1AgZW5kLCB0aGUgcmVsaWQgd2lsbCBubyBsb25nZXIgYmUKKwkJCSAqIHZhbGlkLiBMYXRl ciBvbiBEcm9wIGVuZCwgdmVyaWZ5IHRoYXQgdGhlIGRyb3AgaXMgZm9yIGEgcmVsaWQKKwkJCSAq IHRoYXQgaXMgb24gdGhlIGRlbGV0ZWRfcmlkIGxpc3QsIGFuZCBvbmx5IHRoZW4gc2VuZCB0aGUg ZGRsCisJCQkgKiBtZXNzYWdlLgorCQkJICovCisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRS ZWxhdGlvbihyZWxpZCk7CisKKwkJCUFzc2VydChyZWxhdGlvbik7CisJCQlyZWxlbnRyeSA9IGdl dF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlmIChyZWxlbnRyeS0+cHVi YWN0aW9ucy5wdWJkZGwpCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsYXBwZW5kX29pZChk YXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpOworCisJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9u KTsKKwkJCXJldHVybjsKKworCQljYXNlIERDVF9UYWJsZURyb3BFbmQ6CisJCQlpZiAoIWxpc3Rf bWVtYmVyX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpKQorCQkJCXJldHVybjsKKwkJ CWVsc2UKKwkJCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IGxpc3RfZGVsZXRlX29pZChkYXRhLT5k ZWxldGVkX3JlbGlkcywgcmVsaWQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBEQ1RfVGFibGVBbHRl cjoKKworCQkJLyoKKwkJCSAqIEZvciB0YWJsZSByZXdyaXRlIGRkbCwgd2UgZmlyc3Qgc2VuZCB0 aGUgb3JpZ2luYWwgZGRsIG1lc3NhZ2UKKwkJCSAqIHRvIHN1YnNjcmliZXIsIHRoZW4gY29udmVy dCB0aGUgdXBjb21pbmcgcmV3cml0ZSBJTlNFUlQgdG8KKwkJCSAqIFVQREFURSBhbmQgc2VuZCB0 aGVtIHRvIHN1YnNjcmliZXIgc28gdGhhdCB0aGUgZGF0YSBiZXR3ZWVuCisJCQkgKiBwdWJsaXNo ZXIgYW5kIHN1YnNjcmliZXIgY2FuIGFsd2F5cyBiZSBjb25zaXN0ZW50LgorCQkJICoKKwkJCSAq IFdlIGRvIHRoaXMgd2F5IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKwkJCSAqCisJCQkgKiAoMSkg VGhlIGRhdGEgYmVmb3JlIHRoZSByZXdyaXRlIGRkbCBjb3VsZCBhbHJlYWR5IGJlIGRpZmZlcmVu dAorCQkJICogYW1vbmcgcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyLiBUbyBtYWtlIHN1cmUgdGhl IGV4dHJhIGRhdGEgaW4KKwkJCSAqIHN1YnNjcmliZXIgd2hpY2ggZG9lc24ndCBleGlzdCBpbiBw dWJsaXNoZXIgYWxzbyBnZXQgcmV3cml0dGVuLAorCQkJICogd2UgbmVlZCB0byBsZXQgdGhlIHN1 YnNjcmliZXIgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgcmV3cml0ZSBkZGwKKwkJCSAqIHRvIHJld3Jp dGUgYWxsIHRoZSBkYXRhIGF0IGZpcnN0LgorCQkJICoKKwkJCSAqICgyKSB0aGUgZGF0YSBhZnRl ciBleGVjdXRpbmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlmZmVyZW50CisJCQkgKiBhbW9uZyBw dWJsaXNoZXIgYW5kIHN1YnNjcmliZXIoZHVlIHRvIGRpZmZlcmVudAorCQkJICogZnVuY3Rpb25z L29wZXJhdG9ycyB1c2VkIGR1cmluZyByZXdyaXRlKSwgc28gd2UgbmVlZCB0bworCQkJICogcmVw bGljYXRlIHRoZSByZXdyaXRlIFVQREFURXMgdG8ga2VlcCB0aGUgZGF0YSBjb25zaXN0ZW50Lgor CQkJICoKKwkJCSAqIFRPIElNUFJPVkU6IFdlIGNvdWxkIGltcHJvdmUgdGhpcyBieSBsZXR0aW5n IHRoZSBzdWJzY3JpYmVyCisJCQkgKiBvbmx5IHJld3JpdGUgdGhlIGV4dHJhIGRhdGEgaW5zdGVh ZCBvZiBkb2luZyBmdWxseSByZXdyaXRlIGFuZAorCQkJICogdXNlIHRoZSB1cGNvbWluZyByZXdy aXRlIFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRhLgorCQkJICogQmVzaWRlcywgd2Ug bWF5IG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwgdHlwZQorCQkJICog b2YgcmV3cml0ZSBkZGwsIGZvciBleGFtcGxlLCBpdCBzZWVtcyBmaW5lIHRvIHNraXAgc2VuZGlu ZworCQkJICogcmV3cml0ZSBjaGFuZ2VzIGZvciBBTFRFUiBUQUJMRSBTRVQgTE9HR0VEIGFzIHRo ZSBkYXRhIGluIHRoZQorCQkJICogdGFibGUgZG9lc24ndCBhY3R1YWxseSBiZSBjaGFuZ2VkLgor CQkJICovCisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7CisJCQlB c3NlcnQocmVsYXRpb24pOworCisJCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRh LCByZWxhdGlvbik7CisKKwkJCS8qCisJCQkgKiBTa2lwIHNlbmRpbmcgdGhpcyBkZGwgaWYgd2Ug ZG9uJ3QgcHVibGlzaCBkZGwgbWVzc2FnZSBvciB0aGUKKwkJCSAqIGRkbCBuZWVkIHRvIGJlIHB1 Ymxpc2hlZCB2aWEgaXRzIHJvb3QgcmVsYXRpb24uCisJCQkgKi8KKwkJCWlmICghcmVsZW50cnkt PnB1YmFjdGlvbnMucHViZGRsIHx8CisJCQkJcmVsZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgIT0g cmVsaWQpCisJCQl7CisJCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0dXJuOwor CQkJfQorCisJCQlicmVhazsKKworCQljYXNlIERDVF9TaW1wbGVDbWQ6CisJCQlyZWxhdGlvbiA9 IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7CisKKwkJCWlmIChyZWxhdGlvbiA9PSBOVUxM KQorCQkJCWJyZWFrOworCisJCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCBy ZWxhdGlvbik7CisKKwkJCWlmICghcmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQkJewor CQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJYnJl YWs7CisKKwkJY2FzZSBEQ1RfT2JqZWN0RHJvcDoKKwkJCS8qIGRvIG5vdGhpbmcgKi8KKwkJCWJy ZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgdHlwZSAlZCIs IGNtZHR5cGUpOworCQkJYnJlYWs7CisJfQorCisJLyogU2VuZCBCRUdJTiBpZiB3ZSBoYXZlbid0 IHlldCAqLworCWlmICh0eG5kYXRhICYmICF0eG5kYXRhLT5zZW50X2JlZ2luX3R4bikKKwkJcGdv dXRwdXRfc2VuZF9iZWdpbihjdHgsIHR4bik7CisKKwlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUo Y3R4LCB0cnVlKTsKKwlsb2dpY2FscmVwX3dyaXRlX2RkbChjdHgtPm91dCwKKwkJCQkJCQkJbWVz c2FnZV9sc24sCisJCQkJCQkJCXByZWZpeCwKKwkJCQkJCQkJc3osCisJCQkJCQkJCW1lc3NhZ2Up OworCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CisKKwlpZiAocmVsYXRpb24pCisJCVJl bGF0aW9uQ2xvc2UocmVsYXRpb24pOworfQorCiAvKgogICogUmV0dXJuIHRydWUgaWYgdGhlIGRh dGEgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIG9yaWdpbiBhbmQgdGhlIHVzZXIgaGFzCiAgKiByZXF1 ZXN0ZWQgdGhlIGNoYW5nZXMgdGhhdCBkb24ndCBoYXZlIGFuIG9yaWdpbiwgZmFsc2Ugb3RoZXJ3 aXNlLgpAQCAtMTk5NSw3ICsyMTcwLDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0 YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5zY2hlbWFfc2VudCA9IGZhbHNl OwogCQllbnRyeS0+c3RyZWFtZWRfdHhucyA9IE5JTDsKIAkJZW50cnktPnB1YmFjdGlvbnMucHVi aW5zZXJ0ID0gZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlID0KLQkJCWVudHJ5LT5wdWJhY3Rp b25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gZmFsc2U7CisJ CQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVu Y2F0ZSA9CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgPSBmYWxzZTsKIAkJZW50cnktPm5l d19zbG90ID0gTlVMTDsKIAkJZW50cnktPm9sZF9zbG90ID0gTlVMTDsKIAkJbWVtc2V0KGVudHJ5 LT5leHByc3RhdGUsIDAsIHNpemVvZihlbnRyeS0+ZXhwcnN0YXRlKSk7CkBAIC0yMDUzLDYgKzIy MjksNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiBy ZWxhdGlvbikKIAkJZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlID0gZmFsc2U7CiAJCWVudHJ5 LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGZhbHNlOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ0 cnVuY2F0ZSA9IGZhbHNlOworCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgPSBmYWxzZTsKIAog CQkvKgogCQkgKiBUdXBsZSBzbG90cyBjbGVhbnVwcy4gKFdpbGwgYmUgcmVidWlsdCBsYXRlciBp ZiBuZWVkZWQpLgpAQCAtMjE2Niw2ICsyMzQzLDcgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0 cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQkJZW50cnktPnB1YmFjdGlvbnMu cHVidXBkYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGU7CiAJCQkJZW50cnktPnB1YmFj dGlvbnMucHViZGVsZXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGU7CiAJCQkJZW50cnkt PnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlOwor CQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCB8PSBwdWItPnB1YmFjdGlvbnMucHViZGRsOwog CiAJCQkJLyoKIAkJCQkgKiBXZSB3YW50IHRvIHB1Ymxpc2ggdGhlIGNoYW5nZXMgYXMgdGhlIHRv cC1tb3N0IGFuY2VzdG9yCkBAIC0yMzUxLDYgKzI1MjksNyBAQCByZWxfc3luY19jYWNoZV9wdWJs aWNhdGlvbl9jYihEYXR1bSBhcmcsIGludCBjYWNoZWlkLCB1aW50MzIgaGFzaHZhbHVlKQogCXsK IAkJZW50cnktPnJlcGxpY2F0ZV92YWxpZCA9IGZhbHNlOwogCX0KKwogfQogCiAvKiBTZW5kIFJl cGxpY2F0aW9uIG9yaWdpbiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv cmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggNDUw ZTUxMjRhNS4uMmY5ZGQxOWM4NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv cmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCkBAIC01 NjkwLDYgKzU2OTAsNyBAQCBSZWxhdGlvbkJ1aWxkUHVibGljYXRpb25EZXNjKFJlbGF0aW9uIHJl bGF0aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1YmRlc2MpCiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMu cHVidXBkYXRlIHw9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5w dWJkZWxldGUgfD0gcHViZm9ybS0+cHViZGVsZXRlOwogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1 YnRydW5jYXRlIHw9IHB1YmZvcm0tPnB1YnRydW5jYXRlOworCQlwdWJkZXNjLT5wdWJhY3Rpb25z LnB1YmRkbCB8PSBwdWJmb3JtLT5wdWJkZGw7CiAKIAkJLyoKIAkJICogQ2hlY2sgaWYgYWxsIGNv bHVtbnMgcmVmZXJlbmNlZCBpbiB0aGUgZmlsdGVyIGV4cHJlc3Npb24gYXJlIHBhcnQKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVt cC5jCmluZGV4IDQ0ZDk1N2MwMzguLmVkYjRhMWJhODIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtMzk0OSw2 ICszOTQ5LDcgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGlj YXRpb25zKQogCWludAkJCWlfcHVidXBkYXRlOwogCWludAkJCWlfcHViZGVsZXRlOwogCWludAkJ CWlfcHVidHJ1bmNhdGU7CisJaW50CQkJaV9wdWJkZGw7CiAJaW50CQkJaV9wdWJ2aWFyb290Owog CWludAkJCWksCiAJCQkJbnR1cHM7CkBAIC0zOTY0LDIzICszOTY1LDIzIEBAIGdldFB1YmxpY2F0 aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlyZXNldFBRRXhwQnVm ZmVyKHF1ZXJ5KTsKIAogCS8qIEdldCB0aGUgcHVibGljYXRpb25zLiAqLwotCWlmIChmb3V0LT5y ZW1vdGVWZXJzaW9uID49IDEzMDAwMCkKKwlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNjAw MDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNUIHAudGFi bGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkgInAucHVib3duZXIsICIKLQkJCQkJ CQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRl LCBwLnB1YnRydW5jYXRlLCBwLnB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMs IHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIHAu cHViZGRsLCBwLnB1YnZpYXJvb3QgIgogCQkJCQkJCSAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7 CiAJZWxzZSBpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxMTAwMDApCiAJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1 Ym5hbWUsICIKIAkJCQkJCQkgInAucHVib3duZXIsICIKLQkJCQkJCQkgInAucHViYWxsdGFibGVz LCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBm YWxzZSBBUyBwdWJ2aWFyb290ICIKKwkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2Vy dCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBmYWxzZSBhcyBwLnB1 YmRkbCwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1YmxpY2F0aW9u IHAiKTsKIAllbHNlCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VM RUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkgInAucHVib3duZXIs ICIKLQkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAu cHViZGVsZXRlLCBmYWxzZSBBUyBwdWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCisJ CQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRl bGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNhdGUsIGZhbHNlIEFTIHAucHViZGRsLCBmYWxzZSBBUyBw dWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCiAJcmVzID0g RXhlY3V0ZVNxbFF1ZXJ5KGZvdXQsIHF1ZXJ5LT5kYXRhLCBQR1JFU19UVVBMRVNfT0spOwpAQCAt Mzk5Niw2ICszOTk3LDcgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAqbnVt UHVibGljYXRpb25zKQogCWlfcHVidXBkYXRlID0gUFFmbnVtYmVyKHJlcywgInB1YnVwZGF0ZSIp OwogCWlfcHViZGVsZXRlID0gUFFmbnVtYmVyKHJlcywgInB1YmRlbGV0ZSIpOwogCWlfcHVidHJ1 bmNhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidHJ1bmNhdGUiKTsKKwlpX3B1YmRkbCA9IFBRZm51 bWJlcihyZXMsICJwdWJkZGwiKTsKIAlpX3B1YnZpYXJvb3QgPSBQUWZudW1iZXIocmVzLCAicHVi dmlhcm9vdCIpOwogCiAJcHViaW5mbyA9IHBnX21hbGxvYyhudHVwcyAqIHNpemVvZihQdWJsaWNh dGlvbkluZm8pKTsKQEAgLTQwMTksNiArNDAyMSw4IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZl ICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMs IGksIGlfcHViZGVsZXRlKSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ0cnVuY2F0ZSA9 CiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YnRydW5jYXRlKSwgInQiKSA9PSAw KTsKKwkJcHViaW5mb1tpXS5wdWJkZGwgPQorCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwg aV9wdWJkZGwpLCAidCIpID09IDApOwogCQlwdWJpbmZvW2ldLnB1YnZpYXJvb3QgPQogCQkJKHN0 cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJ2aWFyb290KSwgInQiKSA9PSAwKTsKIApAQCAt NDA5OCw2ICs0MTAyLDE1IEBAIGR1bXBQdWJsaWNhdGlvbihBcmNoaXZlICpmb3V0LCBjb25zdCBQ dWJsaWNhdGlvbkluZm8gKnB1YmluZm8pCiAJCWZpcnN0ID0gZmFsc2U7CiAJfQogCisJaWYgKHB1 YmluZm8tPnB1YmRkbCkKKwl7CisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cihxdWVyeSwgIiwgIik7CisKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJkZGwiKTsK KwkJZmlyc3QgPSBmYWxzZTsKKwl9CisKIAlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIocXVlcnksICdc JycpOwogCiAJaWYgKHB1YmluZm8tPnB1YnZpYXJvb3QpCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAppbmRleCA0MzZhYzVi Yjk4Li5jZDUwZWM4Y2Y5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKQEAgLTYxOSw2ICs2MTksNyBAQCB0eXBlZGVm IHN0cnVjdCBfUHVibGljYXRpb25JbmZvCiAJYm9vbAkJcHVidXBkYXRlOwogCWJvb2wJCXB1YmRl bGV0ZTsKIAlib29sCQlwdWJ0cnVuY2F0ZTsKKwlib29sCQlwdWJkZGw7CiAJYm9vbAkJcHVidmlh cm9vdDsKIH0gUHVibGljYXRpb25JbmZvOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1 bXAvcm1ncmRlc2MuYyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCmluZGV4IDZiOGMx N2JiNGMuLjc5MmY0Mzg5NTkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVz Yy5jCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCkBAIC0yNyw2ICsyNyw3IEBA CiAjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJs ZXNwYWNlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgorI2luY2x1ZGUgInJl cGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIK ICNpbmNsdWRlICJybWdyZGVzYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieWRlZnMuaCIK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3FsL2Rlc2Ny aWJlLmMKaW5kZXggZGYxNjYzNjVlOC4uMjRjZTFhNzlmZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTYxNjQsNyAr NjE2NCw3IEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlQUUV4cEJ1 ZmZlckRhdGEgYnVmOwogCVBHcmVzdWx0ICAgKnJlczsKIAlwcmludFF1ZXJ5T3B0IG15b3B0ID0g cHNldC5wb3B0OwotCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfTsKKwlz dGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1tdID0ge2ZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OwogCiAJaWYgKHBz ZXQuc3ZlcnNpb24gPCAxMDAwMDApCiAJewpAQCAtNjE5OSw2ICs2MTk5LDEwIEBAIGxpc3RQdWJs aWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwK IAkJCQkJCSAgIixcbiAgcHVidmlhcm9vdCBBUyBcIiVzXCIiLAogCQkJCQkJICBnZXR0ZXh0X25v b3AoIlZpYSByb290IikpOworCWlmIChwc2V0LnN2ZXJzaW9uID49IDE2MDAwMCkKKwkJYXBwZW5k UFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgIixcbiAgcHViZGRsIEFTIFwiJXNcIiIsCisJCQkJ CQkgIGdldHRleHRfbm9vcCgiRERMcyIpKTsKIAogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYs CiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uXG4iKTsKQEAgLTYyODks NiArNjI5Myw3IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJ UEdyZXN1bHQgICAqcmVzOwogCWJvb2wJCWhhc19wdWJ0cnVuY2F0ZTsKIAlib29sCQloYXNfcHVi dmlhcm9vdDsKKwlib29sCQloYXNfcHViZGRsOwogCiAJUFFFeHBCdWZmZXJEYXRhIHRpdGxlOwog CXByaW50VGFibGVDb250ZW50IGNvbnQ7CkBAIC02MzA1LDYgKzYzMTAsNyBAQCBkZXNjcmliZVB1 YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCiAJaGFzX3B1YnRydW5jYXRlID0gKHBz ZXQuc3ZlcnNpb24gPj0gMTEwMDAwKTsKIAloYXNfcHVidmlhcm9vdCA9IChwc2V0LnN2ZXJzaW9u ID49IDEzMDAwMCk7CisJaGFzX3B1YmRkbCA9ICAocHNldC5zdmVyc2lvbiA+PSAxNjAwMDApOwog CiAJaW5pdFBRRXhwQnVmZmVyKCZidWYpOwogCkBAIC02MzE4LDYgKzYzMjQsOSBAQCBkZXNjcmli ZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCWlmIChoYXNfcHVidmlhcm9vdCkK IAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCQkgIiwgcHVidmlhcm9vdCIpOwor CWlmIChoYXNfcHViZGRsKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAorCQkJCQkJCSAi LCBwdWJkZGwiKTsKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJICJcbkZST00g cGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvblxuIik7CiAKQEAgLTYzNjksNiArNjM3OCw4IEBAIGRl c2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQluY29scysrOwogCQlp ZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQluY29scysrOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCW5j b2xzKys7CiAKIAkJaW5pdFBRRXhwQnVmZmVyKCZ0aXRsZSk7CiAJCXByaW50ZlBRRXhwQnVmZmVy KCZ0aXRsZSwgXygiUHVibGljYXRpb24gJXMiKSwgcHVibmFtZSk7CkBAIC02MzgzLDYgKzYzOTQs OCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJcHJpbnRU YWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJUcnVuY2F0ZXMiKSwgdHJ1ZSwgYWxp Z24pOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250 LCBnZXR0ZXh0X25vb3AoIlZpYSByb290IiksIHRydWUsIGFsaWduKTsKKwkJaWYgKGhhc19wdWJk ZGwpCisJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIkRETHMiKSwg dHJ1ZSwgYWxpZ24pOwogCiAJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJl cywgaSwgMiksIGZhbHNlLCBmYWxzZSk7CiAJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdl dHZhbHVlKHJlcywgaSwgMyksIGZhbHNlLCBmYWxzZSk7CkBAIC02MzkzLDYgKzY0MDYsOCBAQCBk ZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJcHJpbnRUYWJsZUFk ZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA3KSwgZmFsc2UsIGZhbHNlKTsKIAkJaWYg KGhhc19wdWJ2aWFyb290KQogCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUo cmVzLCBpLCA4KSwgZmFsc2UsIGZhbHNlKTsKKwkJaWYgKGhhc19wdWJkZGwpCisJCQlwcmludFRh YmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDkpLCBmYWxzZSwgZmFsc2UpOwog CiAJCWlmICghcHViYWxsdGFibGVzKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3Mvcm1ncmxpc3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCmluZGV4IDAwMGJj YmZkYWYuLjIyYmMwNWFmNTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlz dC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCkBAIC00NywzICs0Nyw0IEBA IFBHX1JNR1IoUk1fQ09NTUlUX1RTX0lELCAiQ29tbWl0VHMiLCBjb21taXRfdHNfcmVkbywgY29t bWl0X3RzX2Rlc2MsIGNvbW1pdF90c19pCiBQR19STUdSKFJNX1JFUExPUklHSU5fSUQsICJSZXBs aWNhdGlvbk9yaWdpbiIsIHJlcGxvcmlnaW5fcmVkbywgcmVwbG9yaWdpbl9kZXNjLCByZXBsb3Jp Z2luX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQogUEdfUk1HUihSTV9HRU5FUklD X0lELCAiR2VuZXJpYyIsIGdlbmVyaWNfcmVkbywgZ2VuZXJpY19kZXNjLCBnZW5lcmljX2lkZW50 aWZ5LCBOVUxMLCBOVUxMLCBnZW5lcmljX21hc2ssIE5VTEwpCiBQR19STUdSKFJNX0xPR0lDQUxN U0dfSUQsICJMb2dpY2FsTWVzc2FnZSIsIGxvZ2ljYWxtc2dfcmVkbywgbG9naWNhbG1zZ19kZXNj LCBsb2dpY2FsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBsb2dpY2FsbXNnX2RlY29k ZSkKK1BHX1JNR1IoUk1fTE9HSUNBTERETE1TR19JRCwgIkxvZ2ljYWxERExNZXNzYWdlIiwgbG9n aWNhbGRkbG1zZ19yZWRvLCBsb2dpY2FsZGRsbXNnX2Rlc2MsIGxvZ2ljYWxkZGxtc2dfaWRlbnRp ZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxkZGxfZGVjb2RlKQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQKaW5kZXggYjM3ZDkzYzhjMC4uMGEyOTlkZjE1MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CkBAIC0xMTg3NSw0ICsxMTg3NSwxMyBAQAogeyBvaWQgPT4gJzQ2NDMnLCBkZXNjciA9PiAn ZXhwYW5kIEpTT04gZm9ybWF0IERETCB0byBhIHBsYWluIERETCBjb21tYW5kJywKICAgcHJvbmFt ZSA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywK ICAgcHJvYXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9j b21tYW5kJyB9LAoreyBvaWQgPT4gJzQ2NDQnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNv bW1hbmQgZGVwYXJzZSBlbmQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2Rk bF9jb21tYW5kX2VuZCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0 eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2Vu ZCcgfSwKK3sgb2lkID0+ICc0NjQ1JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5k IGRlcGFyc2Ugc3RhcnQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9j b21tYW5kX3N0YXJ0JywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5 cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3Rh cnQnIH0sCit7IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFu ZCBkZXBhcnNlIHRhYmxlIHJld3JpdGUnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBh cnNlX3RhYmxlX3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJv YXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdy aXRlJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlv bi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCmluZGV4IGVjZjVhMjhl MDAuLmNjOTUwNDM2YTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKQEAgLTU0 LDYgKzU0LDkgQEAgQ0FUQUxPRyhwZ19wdWJsaWNhdGlvbiw2MTA0LFB1YmxpY2F0aW9uUmVsYXRp b25JZCkKIAogCS8qIHRydWUgaWYgcGFydGl0aW9uIGNoYW5nZXMgYXJlIHB1Ymxpc2hlZCB1c2lu ZyByb290IHNjaGVtYSAqLwogCWJvb2wJCXB1YnZpYXJvb3Q7CisKKwkvKiB0cnVlIGlmIGRkbHMg YXJlIHB1Ymxpc2hlZCAqLworCWJvb2wJCXB1YmRkbDsKIH0gRm9ybURhdGFfcGdfcHVibGljYXRp b247CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTcyLDYgKzc1LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgUHVibGljYXRpb25BY3Rpb25zCiAJYm9vbAkJcHVidXBkYXRlOwogCWJvb2wJCXB1YmRlbGV0 ZTsKIAlib29sCQlwdWJ0cnVuY2F0ZTsKKwlib29sCQlwdWJkZGw7CiB9IFB1YmxpY2F0aW9uQWN0 aW9uczsKIAogdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25EZXNjCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmgKaW5kZXggMTAwOTFjM2FhZi4uZmQyZWU3ZmZlNCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL2V2ZW50X3RyaWdnZXIuaApAQCAtNzEsNyArNzEsOCBAQCBleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFuZChPYmplY3RBZGRyZXNzIGFkZHJlc3MsCiBleHRl cm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKTsKIGV4 dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQgb2JqZWN0SWQpOwogZXh0 ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21k LAotCQkJCQkJCQkJCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKKwkJCQkJCQkJCQkJCU9iamVj dEFkZHJlc3MgYWRkcmVzcywKKwkJCQkJCQkJCQkJCWJvb2wgcmV3cml0ZSk7CiBleHRlcm4gdm9p ZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlRW5kKHZvaWQpOwogCiBleHRlcm4gdm9pZCBFdmVudFRy aWdnZXJDb2xsZWN0R3JhbnQoSW50ZXJuYWxHcmFudCAqaXN0bXQpOwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vZGRsbWVzc2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjc3 ZGY2ZWExMWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxt ZXNzYWdlLmgKQEAgLTAsMCArMSw2MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBkZGxtZXNz YWdlLmgKKyAqCSAgIEV4cG9ydHMgZnJvbSByZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2Uu YworICoKKyAqIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqCisgKiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHX0xPR0lDQUxfRERMX01FU1NBR0VfSAor I2RlZmluZSBQR19MT0dJQ0FMX0RETF9NRVNTQUdFX0gKKworI2luY2x1ZGUgImFjY2Vzcy94bG9n LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dy ZWFkZXIuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgorCisKKy8qCisgKiBTdXBwb3J0IGZv ciBrZWVwaW5nIHRyYWNrIG9mIGRlcGFyc2VkIGNvbW1hbmRzLgorICovCit0eXBlZGVmIGVudW0g RGVwYXJzZWRDb21tYW5kVHlwZQoreworCURDVF9TaW1wbGVDbWQsCisJRENUX1RhYmxlRHJvcFN0 YXJ0LAorCURDVF9UYWJsZURyb3BFbmQsCisJRENUX1RhYmxlQWx0ZXIsCisJRENUX09iamVjdENy ZWF0ZSwKKwlEQ1RfT2JqZWN0RHJvcAorfSBEZXBhcnNlZENvbW1hbmRUeXBlOworCisvKgorICog R2VuZXJpYyBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlIHdhbCByZWNvcmQuCisgKi8KK3R5 cGVkZWYgc3RydWN0IHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UKK3sKKwlPaWQJCQlkYklkOwkJCS8q IGRhdGFiYXNlIE9pZCBlbWl0dGVkIGZyb20gKi8KKwlTaXplCQlwcmVmaXhfc2l6ZTsJLyogbGVu Z3RoIG9mIHByZWZpeCBpbmNsdWRpbmcgbnVsbCB0ZXJtaW5hdG9yICovCisJT2lkCQkJcmVsaWQ7 CQkJLyogaWQgb2YgdGhlIHRhYmxlICovCisJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlOwkv KiB0eXBlIG9mIHNxbCBjb21tYW5kICovCisJU2l6ZQkJbWVzc2FnZV9zaXplOwkvKiBzaXplIG9m IHRoZSBtZXNzYWdlICovCisKKwkvKgorCSAqIHBheWxvYWQsIGluY2x1ZGluZyBudWxsLXRlcm1p bmF0ZWQgcHJlZml4IG9mIGxlbmd0aCBwcmVmaXhfc2l6ZQorCSAqLworCWNoYXIJCW1lc3NhZ2Vb RkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30geGxfbG9naWNhbF9kZGxfbWVzc2FnZTsKKworI2Rl ZmluZSBTaXplT2ZMb2dpY2FsRERMTWVzc2FnZQkob2Zmc2V0b2YoeGxfbG9naWNhbF9kZGxfbWVz c2FnZSwgbWVzc2FnZSkpCisKK2V4dGVybiBYTG9nUmVjUHRyIExvZ0xvZ2ljYWxERExNZXNzYWdl KGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5 cGUsCisJCQkJCQkJCQkgICBjb25zdCBjaGFyICpkZGxfbWVzc2FnZSwgc2l6ZV90IHNpemUpOwor CisvKiBSTUdSIEFQSSovCisjZGVmaW5lIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRQkweDAwCit2 b2lkCQlsb2dpY2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwordm9pZAkJ bG9naWNhbGRkbG1zZ19kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29y ZCk7Citjb25zdCBjaGFyICpsb2dpY2FsZGRsbXNnX2lkZW50aWZ5KHVpbnQ4IGluZm8pOworCisj ZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKaW5kZXggNzQxYmY2NWNmNy4uZjI3MWY0YjM2 MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKKysrIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKQEAgLTI3LDYgKzI3LDcgQEAgZXh0ZXJuIHZv aWQgaGVhcDJfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1 ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIHhhY3RfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIHN0YW5kYnlfZGVj b2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsK IGV4dGVybiB2b2lkIGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxkZGxfZGVjb2Rl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIAog ZXh0ZXJuIHZvaWQgTG9naWNhbERlY29kaW5nUHJvY2Vzc1JlY29yZChMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsCiAJCQkJCQkJCQkJIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggMWViN2RkYTUyOS4uODU3MmNhNmMx ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysr IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTYxLDYgKzYxLDcg QEAgdHlwZWRlZiBlbnVtIExvZ2ljYWxSZXBNc2dUeXBlCiAJTE9HSUNBTF9SRVBfTVNHX1JFTEFU SU9OID0gJ1InLAogCUxPR0lDQUxfUkVQX01TR19UWVBFID0gJ1knLAogCUxPR0lDQUxfUkVQX01T R19NRVNTQUdFID0gJ00nLAorCUxPR0lDQUxfUkVQX01TR19EREwgPSAnTCcsCiAJTE9HSUNBTF9S RVBfTVNHX0JFR0lOX1BSRVBBUkUgPSAnYicsCiAJTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkUgPSAn UCcsCiAJTE9HSUNBTF9SRVBfTVNHX0NPTU1JVF9QUkVQQVJFRCA9ICdLJywKQEAgLTIzMCw2ICsy MzEsOSBAQCBleHRlcm4gTGlzdCAqbG9naWNhbHJlcF9yZWFkX3RydW5jYXRlKFN0cmluZ0luZm8g aW4sCiAJCQkJCQkJCQkgIGJvb2wgKmNhc2NhZGUsIGJvb2wgKnJlc3RhcnRfc2Vxcyk7CiBleHRl cm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0 aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWws IGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRl cm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX2RkbChTdHJpbmdJbmZvIG91dCwgWExvZ1JlY1B0ciBs c24sCisJCQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICpt ZXNzYWdlKTsKK2V4dGVybiBjaGFyICpsb2dpY2FscmVwX3JlYWRfZGRsKFN0cmluZ0luZm8gaW4s IFhMb2dSZWNQdHIgKmxzbiwgY29uc3QgY2hhciAqKnByZWZpeCwgU2l6ZSAqc3opOwogZXh0ZXJu IHZvaWQgbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQg eGlkLAogCQkJCQkJCQkgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQgKmNvbHVtbnMpOwogZXh0ZXJu IExvZ2ljYWxSZXBSZWxhdGlvbiAqbG9naWNhbHJlcF9yZWFkX3JlbChTdHJpbmdJbmZvIGluKTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaCBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaAppbmRleCBiN2QyOGQ3MDQ1Li5h ZTFhZGRjZTdhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1 Z2luLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCkBAIC05 MCw2ICs5MCwxOCBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlTWVzc2FnZUNCKSAoc3Ry dWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCQlTaXplIG1lc3NhZ2Vf c2l6ZSwKIAkJCQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyoKKyAqIENhbGxlZCBm b3IgdGhlIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2VzLgorICovCit0eXBlZGVmIHZvaWQg KCpMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJ ICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVm aXgsCisJCQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29tbWFu ZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJ CQkgICBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyoKICAqIEZpbHRlciBjaGFuZ2VzIGJ5IG9y aWdpbi4KICAqLwpAQCAtMjAxLDYgKzIxMywxOSBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVj b2RlU3RyZWFtTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eAog CQkJCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIg Km1lc3NhZ2UpOwogCisvKgorICogQ2FsbGJhY2sgZm9yIHN0cmVhbWluZyBsb2dpY2FsIGRlY29k aW5nIERETCBtZXNzYWdlcyBmcm9tIGluLXByb2dyZXNzCisgKiB0cmFuc2FjdGlvbnMuCisgKi8K K3R5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0IpIChzdHJ1Y3Qg TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJ CQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJCSBPaWQgcmVsaWQsCisJCQkJCQkJ CQkJCQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCQkJIFNpemUgbWVz c2FnZV9zaXplLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCiAvKgogICog Q2FsbGJhY2sgZm9yIHN0cmVhbWluZyB0cnVuY2F0ZXMgZnJvbSBpbi1wcm9ncmVzcyB0cmFuc2Fj dGlvbnMuCiAgKi8KQEAgLTIyMSw2ICsyNDYsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQbHVn aW5DYWxsYmFja3MKIAlMb2dpY2FsRGVjb2RlVHJ1bmNhdGVDQiB0cnVuY2F0ZV9jYjsKIAlMb2dp Y2FsRGVjb2RlQ29tbWl0Q0IgY29tbWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVNZXNzYWdlQ0IgbWVz c2FnZV9jYjsKKwlMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCIGRkbF9jYjsKIAlMb2dpY2FsRGVj b2RlRmlsdGVyQnlPcmlnaW5DQiBmaWx0ZXJfYnlfb3JpZ2luX2NiOwogCUxvZ2ljYWxEZWNvZGVT aHV0ZG93bkNCIHNodXRkb3duX2NiOwogCkBAIC0yMzksNiArMjY1LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgT3V0cHV0UGx1Z2luQ2FsbGJhY2tzCiAJTG9naWNhbERlY29kZVN0cmVhbUNvbW1pdENCIHN0 cmVhbV9jb21taXRfY2I7CiAJTG9naWNhbERlY29kZVN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFu Z2VfY2I7CiAJTG9naWNhbERlY29kZVN0cmVhbU1lc3NhZ2VDQiBzdHJlYW1fbWVzc2FnZV9jYjsK KwlMb2dpY2FsRGVjb2RlU3RyZWFtRERMTWVzc2FnZUNCIHN0cmVhbV9kZGxfY2I7CiAJTG9naWNh bERlY29kZVN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlX2NiOwogfSBPdXRwdXRQbHVn aW5DYWxsYmFja3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0 cHV0LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCmluZGV4IDAyMDI3NTUw ZTIuLjgzZTBiMWUyZTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0 cHV0LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaApAQCAtMjUsNiAr MjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQR091dHB1dERhdGEKIAl1aW50MzIJCXByb3RvY29sX3Zl cnNpb247CiAJTGlzdAkgICAqcHVibGljYXRpb25fbmFtZXM7CiAJTGlzdAkgICAqcHVibGljYXRp b25zOworCUxpc3QJICAgKmRlbGV0ZWRfcmVsaWRzOwogCWJvb2wJCWJpbmFyeTsKIAlib29sCQlz dHJlYW1pbmc7CiAJYm9vbAkJbWVzc2FnZXM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVy YnVmZmVyLmgKaW5kZXggYzcwMGI1NWIxYy4uZDI1NjViYjI1ZCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Jlb3JkZXJidWZmZXIuaApAQCAtMTEsNiArMTEsOCBAQAogCiAjaW5jbHVkZSAiYWNj ZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUgIm5v ZGVzL25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1 ZGUgInN0b3JhZ2Uvc2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2luY2x1 ZGUgInV0aWxzL3JlbGNhY2hlLmgiCkBAIC01Niw2ICs1OCw3IEBAIHR5cGVkZWYgZW51bSBSZW9y ZGVyQnVmZmVyQ2hhbmdlVHlwZQogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlNFUlQsCiAJUkVP UkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfREVMRVRF LAorCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREwsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX01F U1NBR0UsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTiwKIAlSRU9SREVSX0JV RkZFUl9DSEFOR0VfSU5URVJOQUxfU05BUFNIT1QsCkBAIC0xMzAsNiArMTMzLDE2IEBAIHR5cGVk ZWYgc3RydWN0IFJlb3JkZXJCdWZmZXJDaGFuZ2UKIAkJCWNoYXIJICAgKm1lc3NhZ2U7CiAJCX0J CQltc2c7CiAKKwkJLyogRERMICovCisJCXN0cnVjdAorCQl7CisJCQljaGFyCSAgICpwcmVmaXg7 CisJCQlTaXplCQltZXNzYWdlX3NpemU7CisJCQljaGFyCSAgICptZXNzYWdlOworCQkJT2lkCQkJ cmVsaWQ7CisJCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGU7CisJCX0JCQlkZGw7CisKIAkJ LyogTmV3IHNuYXBzaG90LCBzZXQgd2hlbiBhY3Rpb24gPT0gKl9JTlRFUk5BTF9TTkFQU0hPVCAq LwogCQlTbmFwc2hvdAlzbmFwc2hvdDsKIApAQCAtNDQyLDYgKzQ1NSwxNiBAQCB0eXBlZGVmIHZv aWQgKCpSZW9yZGVyQnVmZmVyTWVzc2FnZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJCQkJCQkJ CQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKm1l c3NhZ2UpOwogCisvKiBEREwgbWVzc2FnZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KK3R5cGVkZWYg dm9pZCAoKlJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKKwkJ CQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExvZ1JlY1B0 ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJ CQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlw ZSwKKwkJCQkJCQkJCQkgICBTaXplIHN6LAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKm1lc3Nh Z2UpOworCiAvKiBiZWdpbiBwcmVwYXJlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2 b2lkICgqUmVvcmRlckJ1ZmZlckJlZ2luUHJlcGFyZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJ CQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4pOwpAQCAtNTA4LDYgKzUzMSwxNyBAQCB0 eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCKSAoCiAJCQkJCQkJCQkJ CSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIg Km1lc3NhZ2UpOwogCisvKiBzdHJlYW0gRERMIG1lc3NhZ2UgY2FsbGJhY2sgc2lnbmF0dXJlICov Cit0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNCKSAoCisJCQkJ CQkJCQkJCQkgUmVvcmRlckJ1ZmZlciAqcmIsCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAorCQkJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJ CQkgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJCQkJCQkJ CQkJCSBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6ZSBzeiwK KwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyogc3RyZWFtIHRydW5jYXRl IGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVh bVRydW5jYXRlQ0IpICgKIAkJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlciAqcmIsCkBAIC01NTgs NiArNTkyLDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyQXBwbHlUcnVu Y2F0ZUNCIGFwcGx5X3RydW5jYXRlOwogCVJlb3JkZXJCdWZmZXJDb21taXRDQiBjb21taXQ7CiAJ UmVvcmRlckJ1ZmZlck1lc3NhZ2VDQiBtZXNzYWdlOworCVJlb3JkZXJCdWZmZXJERExNZXNzYWdl Q0IgZGRsOwogCiAJLyoKIAkgKiBDYWxsYmFja3MgdG8gYmUgY2FsbGVkIHdoZW4gc3RyZWFtaW5n IGEgdHJhbnNhY3Rpb24gYXQgcHJlcGFyZSB0aW1lLgpAQCAtNTc3LDYgKzYxMiw3IEBAIHN0cnVj dCBSZW9yZGVyQnVmZmVyCiAJUmVvcmRlckJ1ZmZlclN0cmVhbUNvbW1pdENCIHN0cmVhbV9jb21t aXQ7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2U7CiAJUmVvcmRl ckJ1ZmZlclN0cmVhbU1lc3NhZ2VDQiBzdHJlYW1fbWVzc2FnZTsKKwlSZW9yZGVyQnVmZmVyU3Ry ZWFtRERMTWVzc2FnZUNCIHN0cmVhbV9kZGw7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRl Q0Igc3RyZWFtX3RydW5jYXRlOwogCiAJLyoKQEAgLTY1Niw2ICs2OTIsOSBAQCBleHRlcm4gdm9p ZCBSZW9yZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlv bklkIHhpZCwKIAkJCQkJCQkJCSAgU25hcHNob3Qgc25hcCwgWExvZ1JlY1B0ciBsc24sCiAJCQkJ CQkJCQkgIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCQkJ ICBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBS ZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25J ZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBt ZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIE9pZCByZWxpZCwg RGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlKTsKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJD b21taXQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQlYTG9n UmVjUHRyIGNvbW1pdF9sc24sIFhMb2dSZWNQdHIgZW5kX2xzbiwKIAkJCQkJCQkJVGltZXN0YW1w VHogY29tbWl0X3RpbWUsIFJlcE9yaWdpbklkIG9yaWdpbl9pZCwgWExvZ1JlY1B0ciBvcmlnaW5f bHNuKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CmluZGV4IDhmYzYyY2ViZDIuLjBiMDM2 MzU2YmYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dApAQCAtNjE5NCw5ICs2MTk0LDkg QEAgTGlzdCBvZiBzY2hlbWFzCiAoMCByb3dzKQogCiBcZFJwICJuby5zdWNoLnB1YmxpY2F0aW9u IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSBO YW1lIHwgT3duZXIgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyBOYW1lIHwgT3du ZXIgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCiAoMCBy b3dzKQogCiBcZFJzICJuby5zdWNoLnN1YnNjcmlwdGlvbiIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5kZXggNDI3Zjg3ZWEwNy4uMmI3Y2QwZDU5NiAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKQEAgLTMwLDIwICszMCwyMCBA QCBFUlJPUjogIGNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBvcHRpb25zCiBMSU5FIDE6IC4uLnVi X3h4eCBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9ICd0cnVlJywgcHVibGlzaF92 aS4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF4KIFxkUnAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgICBOYW1lICAgICAgICB8ICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgICB8IGYKLSB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAg IHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgICBOYW1lICAgICAgICB8ICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cGli X2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCisgdGVz dHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IGYgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgog KDIgcm93cykKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFNFVCAocHVibGlz aCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlJyk7CiBcZFJwCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAg TmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3Rw aWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZh dWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAg ICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8 IGYgICAgICAgIHwgZgorIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAg ICAgfCBmICAgICAgICB8IGYKICgyIHJvd3MpCiAKIC0tLSBhZGRpbmcgdGFibGVzCkBAIC04Nywx MCArODcsMTAgQEAgUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIC0tIHNob3VsZCBiZSBhYmxl IHRvIGFkZCBzY2hlbWEgdG8gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJw KyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMu dGVzdHB1Yl90YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKQEAgLTk5LDIwICs5OSwyMCBAQCBU YWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUgdG8gZHJvcCBzY2hlbWEgZnJv bSAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0 YWJsZSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRh YmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf Zm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9y dGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgog CiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQgc2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0 aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIFNFVCBUQUJMRVMgSU4gU0NI RU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0IgogCkBAIC0xMjMsMTAgKzEyMywxMCBA QCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hF TUEgcHViX3Rlc3Q7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYSBG T1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdCwgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3Br OwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfZm9yX3RibF9zY2hl bWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3Jf dGJsX3NjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3Jf dGJsX3NjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJf bm9wayIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC0xMzUsMTAgKzEzNSwxMCBAQCBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUgdG8gYWRkIGEgdGFibGUgb2YgdGhlIHNh bWUgc2NoZW1hIHRvIHRoZSBzY2hlbWEgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9yc2NoZW1hIEFERCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBcZFJwKyB0 ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0 LnRlc3RwdWJfbm9wayIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC0xNDcsMTAgKzE0NywxMCBA QCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUgdG8gZHJvcCB0aGUgdGFi bGUKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIERST1AgVEFCTEUgcHViX3Rl c3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QiCiAKQEAgLTE2MSwxMCArMTYx LDEwIEBAIEVSUk9SOiAgcmVsYXRpb24gInRlc3RwdWJfbm9wayIgaXMgbm90IHBhcnQgb2YgdGhl IHB1YmxpY2F0aW9uCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQgdGFibGUgdG8gc2NoZW1hIHB1 YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBTRVQgVEFCTEUg cHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiAKQEAgLTE4Niwx MCArMTg2LDEwIEBAIFB1YmxpY2F0aW9uczoKICAgICAidGVzdHB1Yl9mb3JhbGx0YWJsZXMiCiAK IFxkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxsdGFibGVzCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykK IAogRFJPUCBUQUJMRSB0ZXN0cHViX3RibDI7CkBAIC0yMDEsMTkgKzIwMSwxOSBAQCBDUkVBVEUg UFVCTElDQVRJT04gdGVzdHB1YjMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMzsKIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViNCBGT1IgVEFCTEUgT05MWSB0ZXN0cHViX3RibDM7CiBSRVNFVCBjbGll bnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjMKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJw dWJsaWMudGVzdHB1Yl90YmwzIgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzYSIKIAogXGRScCsg dGVzdHB1YjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWI0Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgogCkBA IC0yMzQsMTAgKzIzNCwxMCBAQCBVUERBVEUgdGVzdHB1Yl9wYXJ0ZWQxIFNFVCBhID0gMTsKIC0t IG9ubHkgcGFyZW50IGlzIGxpc3RlZCBhcyBiZWluZyBpbiBwdWJsaWNhdGlvbiwgbm90IHRoZSBw YXJ0aXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ycGFydGVkIEFERCBUQUJMRSB0 ZXN0cHViX3BhcnRlZDsKIFxkUnArIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcGFydGVkIgogCkBAIC0yNTIsMTAgKzI1Miwx MCBAQCBBTFRFUiBUQUJMRSB0ZXN0cHViX3BhcnRlZCBERVRBQ0ggUEFSVElUSU9OIHRlc3RwdWJf cGFydGVkMTsKIFVQREFURSB0ZXN0cHViX3BhcnRlZDEgU0VUIGEgPSAxOwogQUxURVIgUFVCTElD QVRJT04gdGVzdHB1Yl9mb3JwYXJ0ZWQgU0VUIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9 IHRydWUpOwogXGRScCsgdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IHQgICAgICAgIHwgZgogVGFibGVz OgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTI4NCwxMCArMjg0LDEwIEBAIFNF VCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0 cHViNSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3RibDIgV0hFUkUgKGMg PD4gJ3Rlc3QnIEFORCBkIDwgNSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNs aWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAg InB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDIiIFdI RVJFICgoYyA8PiAndGVzdCc6OnRleHQpIEFORCAoZCA8IDUpKQpAQCAtMzAwLDEwICszMDAsMTAg QEAgVGFibGVzOgogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBBREQgVEFCTEUgdGVzdHB1 Yl9yZl90YmwzIFdIRVJFIChlID4gMTAwMCBBTkQgZSA8IDIwMDApOwogXGRScCsgdGVzdHB1YjUK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1 Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJs aWMudGVzdHB1Yl9yZl90YmwyIiBXSEVSRSAoKGMgPD4gJ3Rlc3QnOjp0ZXh0KSBBTkQgKGQgPCA1 KSkKQEAgLTMxOSwxMCArMzE5LDEwIEBAIFB1YmxpY2F0aW9uczoKIAogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1YjUgRFJPUCBUQUJMRSB0ZXN0cHViX3JmX3RibDI7CiBcZFJwKyB0ZXN0cHViNQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1Ymxp Yy50ZXN0cHViX3JmX3RibDMiIFdIRVJFICgoZSA+IDEwMDApIEFORCAoZSA8IDIwMDApKQpAQCAt MzMwLDEwICszMzAsMTAgQEAgVGFibGVzOgogLS0gcmVtb3ZlIHRlc3RwdWJfcmZfdGJsMSBhbmQg YWRkIHRlc3RwdWJfcmZfdGJsMyBhZ2FpbiAoYW5vdGhlciBXSEVSRSBleHByZXNzaW9uKQogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAo ZSA+IDMwMCBBTkQgZSA8IDUwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAg ICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFICgoZSA+IDMwMCkgQU5EIChlIDwgNTAw KSkKIApAQCAtMzY2LDEwICszNjYsMTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJS T1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfc3ludGF4MSBGT1IgVEFCTEUgdGVzdHB1 Yl9yZl90YmwxLCBPTkxZIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA8IDk5OSkgV0lUSCAocHVi bGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0 cHViX3N5bnRheDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9zeW50YXgxCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1Yl9zeW50YXgxCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg fCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJf cmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKGUgPCA5OTkpCkBA IC0zNzksMTAgKzM3OSwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9zeW50YXgyIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3Ri bDEsIHRlc3RwdWJfcmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUgV0hFUkUgKGggPCA5OTkpIFdJ VEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRS cCsgdGVzdHB1Yl9zeW50YXgyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfc3ludGF4MgotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfc3ludGF4MgorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50 ZXN0cHViX3JmX3RibDEiCiAgICAgInRlc3RwdWJfcmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUi IFdIRVJFIChoIDwgOTk5KQpAQCAtNDk3LDEwICs0OTcsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9O IHRlc3RwdWI2IEZPUiBUQUJMRVMgSU4gU0NIRU1BIHRlc3RwdWJfcmZfc2NoZW1hMjsKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRVMgSU4gU0NIRU1BIHRlc3RwdWJfcmZfc2No ZW1hMiwgVEFCTEUgdGVzdHB1Yl9yZl9zY2hlbWEyLnRlc3RwdWJfcmZfdGJsNiBXSEVSRSAoaSA8 IDk5KTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViNgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjYKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNgorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBm CiBUYWJsZXM6CiAgICAgInRlc3RwdWJfcmZfc2NoZW1hMi50ZXN0cHViX3JmX3RibDYiIFdIRVJF IChpIDwgOTkpCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtNzE0LDEwICs3MTQsMTAgQEAgQ1JF QVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0 LCB0cnVuY2F0ZScpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWJfdGFibGVfaW5zIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEpOwkJLS0gb2sK IFxkUnArIHRlc3RwdWJfdGFibGVfaW5zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfdGFibGVfaW5zCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAi cHVibGljLnRlc3RwdWJfdGJsNSIgKGEpCiAKQEAgLTg5MSwxMCArODkxLDEwIEBAIENSRUFURSBU QUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEgaW50LCBiIGludCwgYyBpbnQsIFBSSU1B UlkgS0VZIChhLGMpKTsKIEFMVEVSIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyBSRVBM SUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVyc19wa2V5Owog QUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMgQUREIFRBQkxFIHRlc3RwdWJf dGJsX2JvdGhfZmlsdGVycyAoYSxjKSBXSEVSRSAoYyAhPSAxKTsKIFxkUnArIHRlc3RwdWJfYm90 aF9maWx0ZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfYm90aF9maWx0ZXJzCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3Rw dWJfdGJsX2JvdGhfZmlsdGVycyIgKGEsIGMpIFdIRVJFIChjIDw+IDEpCiAKQEAgLTEwOTksMTAg KzEwOTksMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1Yl90YmwxIiBpcyBhbHJlYWR5IG1l bWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwKIENSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcnRibCBGT1IgVEFCTEUgdGVzdHB1Yl90YmwxOwogRVJST1I6ICBwdWJsaWNhdGlv biAidGVzdHB1Yl9mb3J0YmwiIGFscmVhZHkgZXhpc3RzCiBcZFJwKyB0ZXN0cHViX2ZvcnRibAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0 YmwKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRibAor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAgICAi cHVibGljLnRlc3RwdWJfdGJsMSIKQEAgLTExNDAsMTAgKzExNDAsMTAgQEAgUHVibGljYXRpb25z OgogICAgICJ0ZXN0cHViX2ZvcnRibCIKIAogXGRScCsgdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAgICAicHVibGlj LnRlc3RwdWJfdGJsMSIKQEAgLTEyMjEsMTAgKzEyMjEsMTAgQEAgUkVWT0tFIENSRUFURSBPTiBE QVRBQkFTRSByZWdyZXNzaW9uIEZST00gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIERST1Ag VEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMTsKIFxkUnArIHRl c3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2RlZmF1bHQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBmYWlsIC0gbXVzdCBi ZSBvd25lciBvZiBwdWJsaWNhdGlvbgpAQCAtMTIzNCwyMCArMTIzNCwyMCBAQCBFUlJPUjogIG11 c3QgYmUgb3duZXIgb2YgcHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CiBSRVNFVCBST0xFOwog QUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFJFTkFNRSBUTyB0ZXN0cHViX2ZvbzsK IFxkUnAgdGVzdHB1Yl9mb28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgIE5hbWUgICAgIHwgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHRlc3RwdWJfZm9vIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1 YmxpY2F0aW9ucworICAgIE5hbWUgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgdGVzdHB1Yl9mb28gfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAg ICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIHJlbmFtZSBiYWNrIHRvIGtlZXAgdGhlIHJlc3Qgc2lt cGxlCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvbyBSRU5BTUUgVE8gdGVzdHB1Yl9kZWZh dWx0OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IE9XTkVSIFRPIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlcjI7CiBcZFJwIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAg IE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHB1 Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMiB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAg ICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyB0ZXN0cHViX2RlZmF1bHQgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYg ICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBhZGRpbmcgc2NoZW1hcyBhbmQgdGFibGVzCkBAIC0x MjYzLDE5ICsxMjYzLDE5IEBAIENSRUFURSBUQUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJSRU5U X1NDSEVNQSIoaWQgaW50KTsKIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENS RUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEg cHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKIENSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViMl9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJf dGVzdDIsIHB1Yl90ZXN0MzsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVz dDIiCkBAIC0xMjg5LDQ0ICsxMjg5LDQ0IEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNl9m b3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgIkNVUlJFTlRfU0NIRU1BIiwgQ1VSCiBDUkVB VEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBGT1IgVEFCTEUgIkNVUlJFTlRfU0NIRU1B Ii4iQ1VSUkVOVF9TQ0hFTUEiOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRl c3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAicHVibGljIgogCiBcZFJwKyB0ZXN0cHViNF9mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNF9mb3JzY2hlbWEKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjRfZm9yc2NoZW1hCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8 IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogCiBcZFJwKyB0 ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjVfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWI2X2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWI2X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi Nl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VS UkVOVF9TQ0hFTUEiCiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxl Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEuQ1VSUkVOVF9TQ0hFTUEi CiAKQEAgLTEzNjAsMTAgKzEzNjAsMTAgQEAgRVJST1I6ICBzY2hlbWEgInRlc3RwdWJfdmlldyIg ZG9lcyBub3QgZXhpc3QKIC0tIGRyb3BwaW5nIHRoZSBzY2hlbWEgc2hvdWxkIHJlZmxlY3QgdGhl IGNoYW5nZSBpbiBwdWJsaWNhdGlvbgogRFJPUCBTQ0hFTUEgcHViX3Rlc3QzOwogXGRScCsgdGVz dHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgog ICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzNzEsMjAgKzEzNzEsMjAgQEAg VGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHJlbmFtaW5nIHRoZSBzY2hlbWEgc2hvdWxkIHJlZmxl Y3QgdGhlIGNoYW5nZSBpbiBwdWJsaWNhdGlvbgogQUxURVIgU0NIRU1BIHB1Yl90ZXN0MSBSRU5B TUUgdG8gcHViX3Rlc3QxX3JlbmFtZWQ7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MV9yZW5hbWVk IgogICAgICJwdWJfdGVzdDIiCiAKIEFMVEVSIFNDSEVNQSBwdWJfdGVzdDFfcmVuYW1lZCBSRU5B TUUgdG8gcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAg fCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0 MiIKQEAgLTEzOTIsMTAgKzEzOTIsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIGFsdGVy IHB1YmxpY2F0aW9uIGFkZCBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNj aGVtYSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3Jz Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90 ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQwNCwxMCArMTQwNCwxMCBAQCBUYWJsZXMgZnJv bSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBUQUJM RVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4 aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNj aGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hl bWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgog ICAgICJwdWJfdGVzdDIiCkBAIC0xNDE2LDEwICsxNDE2LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIFRBQkxFUyBJTiBT Q0hFTUEgcHViX3Rlc3QxOwogRVJST1I6ICBzY2hlbWEgInB1Yl90ZXN0MSIgaXMgYWxyZWFkeSBt ZW1iZXIgb2YgcHVibGljYXRpb24gInRlc3RwdWIxX2ZvcnNjaGVtYSIKIFxkUnArIHRlc3RwdWIx X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAi cHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDI3LDEwICsxNDI3LDEwIEBAIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBkcm9wIHNjaGVtYQogQUxURVIg UFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJf dGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTQzOCwxMCArMTQzOCwxMCBA QCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2No ZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBFUlJPUjogIHRhYmxlcyBmcm9t IHNjaGVtYSAicHViX3Rlc3QyIiBhcmUgbm90IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTQ0OSwyOSArMTQ0OSwyOSBAQCBUYWJsZXMgZnJv bSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFC TEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1hOwogRVJST1I6ICBzY2hlbWEgIm5vbl9l eGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3Jz Y2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2No ZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIK IAogLS0gZHJvcCBhbGwgc2NoZW1hcwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2No ZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3Jz Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gYWx0ZXIgcHVibGljYXRpb24g c2V0IG11bHRpcGxlIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1h IFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QyOwogXGRScCsgdGVzdHB1 YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAg ICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0ODAsMTAgKzE0ODAsMTAgQEAgVGFi bGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBT RVQgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1hOwogRVJST1I6ICBzY2hlbWEg Im5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBcZFJwKyB0ZXN0cHViMV9mb3Jz Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90 ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQ5MiwxMCArMTQ5MiwxMCBAQCBUYWJsZXMgZnJv bSBzY2hlbWFzOgogLS0gcmVtb3ZpbmcgdGhlIGR1cGxpY2F0ZSBzY2hlbWFzCiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Qx LCBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTU3NCwxOCArMTU3 NCwxOCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxk UnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHVi X3Rlc3QxOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE1OTUsMjAgKzE1OTUsMjAg QEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlIEZPUiBUQUJM RVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgVEEKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2Zv cnRhYmxlX2ZvcnNjaGVtYSBGT1IgVEFCTEUgcHViX3Rlc3QyLnRibDEsIFRBQkxFUyBJTiBTQ0hF TUEgcHViX3Rlc3QxOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJf Zm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHViX3Rlc3QyLnRibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEi CiAKIFxkUnArIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAg ICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QyLnRibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFz OgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBmZTMzMGI0MDg0Li42MzdmMTJkMzkyIDEw MDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNTU5LDYgKzU1OSw3IEBAIERlZkVsZW1BY3Rp b24KIERlZmF1bHRBQ0xJbmZvCiBEZWZpbmVTdG10CiBEZWxldGVTdG10CitEZXBhcnNlZENvbW1h bmRUeXBlCiBEZXBlbmRlbmN5R2VuZXJhdG9yCiBEZXBlbmRlbmN5R2VuZXJhdG9yRGF0YQogRGVw ZW5kZW5jeVR5cGUKQEAgLTE0MzksNiArMTQ0MCw4IEBAIExvZ2ljYWxEZWNvZGVCZWdpblByZXBh cmVDQgogTG9naWNhbERlY29kZUNoYW5nZUNCCiBMb2dpY2FsRGVjb2RlQ29tbWl0Q0IKIExvZ2lj YWxEZWNvZGVDb21taXRQcmVwYXJlZENCCitMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCCitMb2dp Y2FsRGVjb2RlU3RyZWFtRERMTWVzc2FnZUNCCiBMb2dpY2FsRGVjb2RlRmlsdGVyQnlPcmlnaW5D QgogTG9naWNhbERlY29kZUZpbHRlclByZXBhcmVDQgogTG9naWNhbERlY29kZU1lc3NhZ2VDQgpA QCAtMjI4Niw2ICsyMjg5LDggQEAgUmVvcmRlckJ1ZmZlckNoYW5nZQogUmVvcmRlckJ1ZmZlckNo YW5nZVR5cGUKIFJlb3JkZXJCdWZmZXJDb21taXRDQgogUmVvcmRlckJ1ZmZlckNvbW1pdFByZXBh cmVkQ0IKK1Jlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IKK1Jlb3JkZXJCdWZmZXJTdHJlYW1ERExN ZXNzYWdlQ0IKIFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlCiBSZW9yZGVyQnVmZmVySXRlclRYTkVu dHJ5CiBSZW9yZGVyQnVmZmVySXRlclRYTlN0YXRlCi0tIAoyLjM4LjEKCg== --000000000000dc11ed05f034f7ed Content-Type: application/octet-stream; name="v54-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v54-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbvamj7y3 RnJvbSAzYmMxOTI1NjI4ODg0ZGEzMTU0MmNiYzJmOWJiNDE5MjNiNTJjOWQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTkgRGVjIDIwMjIgMDc6MzY6NDcgLTA1MDAKU3ViamVjdDogW1BBVENI IDQvN10gVGVzdCBjYXNlcyBmb3IgRERMIHJlcGxpY2F0aW9uLgoKQXV0aG9yOiBUYWthbWljaGkg T3N1bWkKLS0tCiAuLi4vc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbCAgICAg fCA0NjUgKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDY1IGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3Jl cGxpY2F0aW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2Rk bF9yZXBsaWNhdGlvbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGlj YXRpb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNjZkY2IwMTJh NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVw bGljYXRpb24ucGwKQEAgLTAsMCArMSw0NjUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBSZWdyZXNzaW9uIHRlc3RzIGZvciBs b2dpY2FsIHJlcGxpY2F0aW9uIG9mIERETHMKKyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpV dGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVyLT5pbml0 KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7 CisKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9 PiAnbG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKK215ICRkZGwgPSAiQ1JF QVRFIFRBQkxFIHRlc3RfcmVwKGlkIGludCBwcmltYXJ5IGtleSwgbmFtZSB2YXJjaGFyLCB2YWx1 ZSBpbnRlZ2VyKTsiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRk bCk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dGVzdF9yZXAgVkFMVUVTICgxLCAnZGF0YTEnLCAxKTsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5v ZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIG15cHViIEZP UiBBTEwgVEFCTEVTIHdpdGggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZSwgZGRs Jyk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRF IFNVQlNDUklQVElPTiBteXN1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJ Q0FUSU9OIG15cHViOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1 YicpOworCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IHN5bmNocm9uaXplZCB0aGUgdGFibGUu CisjIFRoaXMgcHJldmVudHMgQUxURVIgVEFCTEUgY29tbWFuZCBiZWxvdyBmcm9tIGJlaW5nIGV4 ZWN1dGVkIGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24uCiskbm9kZV9zdWJzY3JpYmVyLT5w b2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAiU0VMRUNUIENPVU5UKDEpID0gMCBGUk9N IHBnX3N1YnNjcmlwdGlvbl9yZWwgc3IgV0hFUkUgc3Iuc3JzdWJzdGF0ZSBOT1QgSU4gKCdzJywg J3InKSBBTkQgc3Iuc3JyZWxpZCA9ICd0ZXN0X3JlcCc6OnJlZ2NsYXNzIgorKTsKKworIyBUZXN0 IEFMVEVSIFRBQkxFIEFERAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFERCBjNCBpbnQ7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgyLCAnZGF0 YTInLCAyLCAyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKK215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGM0ID0gMjsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgQUREIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFM VEVSIFRBQkxFIERST1AKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJB TFRFUiBUQUJMRSB0ZXN0X3JlcCBEUk9QIGM0OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVwIHdoZXJlIGlkID0gMjsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHRlc3RfcmVwOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBEUk9QIHJl cGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFRZUEUKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2 YWx1ZSBUWVBFIHZhcmNoYXIiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDMsICdkYXRhMycsICczJyk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJP TSB0ZXN0X3JlcCBXSEVSRSB2YWx1ZSA9ICczJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQUxU RVIgdGVzdF9yZXAgQUxURVIgQ09MVU1OIFRZUEUgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQUxU RVIgVEFCTEUgQUxURVIgU0VUIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgZGVmYXVs dCB2YWx1ZSBhZnRlciB0aGUgZGlyZWN0IGluc2VydCB0byBzdWJzY3JpYmVyIG5vZGUuCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAg QUxURVIgQ09MVU1OIHZhbHVlIFNFVCBERUZBVUxUICdmb28nIik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNCwgJ2RhdGE0Jyk7Iik7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgdmFsdWUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDQ7Iik7CitpcygkcmVzdWx0LCAnZm9v JywgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIFNFVCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBkb24ndCBo YXZlIHRoZSBkZWZhdWx0IHZhbHVlIHByZXZpb3VzbHkgZGVmaW5lZC4KKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiBDT0xV TU4gdmFsdWUgRFJPUCBERUZBVUxUOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDUsICdkYXRhNScpOyIpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVlIElTIE5V TEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7CitpcygkcmVzdWx0LCBxKHQpLCAnQUxU RVIgdGVzdF9yZXAgQUxURVIgRFJPUCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFM VEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTAorIyBSZW1vdmUgdGhlIGV4aXN0aW5nIHJlY29y ZCB0aGF0IGNvbnRhaW5zIG51bGwgdmFsdWUgZmlyc3QuCitteSAoJHN0ZG91dCwgJHN0ZGVycik7 Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRl c3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBTRVQgTk9UIE5VTEw7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDYs ICdkYXRhNicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJy ID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAv RVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiBcInZhbHVlXCIgb2YgcmVsYXRpb24gXCJ0ZXN0 X3JlcFwiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFpbGVkIHRv IHJlcGxpY2F0ZSBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwiOworCisjIFRlc3QgQUxU RVIgVEFCTEUgQUxURVIgRFJPUCBOT1QgTlVMTAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIERST1AgTk9UIE5V TEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIElu c2VydCBzYW1lIGRhdGEgdGhhdCBoYXMgTlVMTCB2YWx1ZS4gVGhpcyBmYWlsZWQgYmVmb3JlIGJ1 dCBub3cgc2hvdWxkIHN1Y2NlZWQuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNiwgJ2RhdGE2Jyk7Iik7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgdmFs dWUgSVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNjsiKTsKK2lzKCRyZXN1bHQsIHEo dCksICJBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIE5PVCBOVUxMIHJlcGxpY2F0ZWQiKTsKKwor IyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBVTkxPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBVTkxPR0dFRDsnKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDcs ICdkYXRhNycsICc3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDc7Iik7CitpcygkcmVz dWx0LCBxcSgwKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBVTkxPR0dFRCByZXBsaWNhdGVkJyk7CisK KyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIExPR0dFRDsnKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDgsICdk YXRhOCcsICc4Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3Vi Jyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDg7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBMT0dHRUQgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQ1JFQVRFIFRBQkxFIGFuZCBETUwgY2hhbmdlcworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGEgaW50LCBiIHZhcmNoYXIpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEo MSksICdDUkVBVEUgdG1wIGlzIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgdmFsdWVzICgxLCAnYScpIik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIHZhbHVl cyAoMiwgJ2InKSIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMiksICdETUwgQ2hhbmdl cyB0byB0bXAgYXJlIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJTkhFUklU UworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0 bXAyIChjMyBpbnQpIElOSEVSSVRTICh0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDIgVkFMVUVTICgxLCAnYScsIDEpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAyJzsiKTsKK2lzKCRyZXN1bHQsIHFx KDEpLCAnQ1JFQVRFIFRBQkxFIElOSEVSSVRTIGlzIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBm cm9tIHRtcDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBzb21lIGRhdGEgdG8g aW5oZXJpdGVkIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDIiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBM SUtFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IHRtcDMgKGMzIGludCwgTElLRSB0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDMgVkFMVUVTICgxLCAxLCAnYScpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20g cGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAzJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEp LCAnQ1JFQVRFIFRBQkxFIExJS0UgcmVwbGljYXRlZCcpOworJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wMzsi KTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0IHNvbWUgZGF0YSB0byBhIHRhYmxlIGRlZmlu ZWQgd2l0aCBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDMiKTsKKworIyBUZXN0IERST1AgVEFCTEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDAp LCAnVEFCTEUgdG1wIGlzIGRyb3BwZWQnKTsKKworIyBUZXN0IENSRUFURSBVTkxPR0dFRCBUQUJM RQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBVTkxPR0dF RCBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJsZXMgd2hl cmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBVTkxP R0dFRCBUQUJMRSBpcyByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1w OyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdpbnNlcnRpbmcgZGF0YSB0byB1bmxvZ2dlZCB0YWJs ZSBpcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxF IElGIE5PVCBFWElTVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJD UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIGRhdGEgdG8gYSB0 YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT IChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUg dGFibGUgb24gdGhlIHN1YnNjcmliZXIgaW4gYWR2YW5jZSwgYW5kIGlmIHdlIHN1Y2NlZWQKKyMg aW4gcmVwbGljYXRpbmcgY2hhbmdlcy4pCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChp ZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSks ICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENS RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRh YmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciwgYnV0IG5vdCBv biB0aGUgc3Vic2NyaWJlci4pCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFU RSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRB QkxFIHdpdGggY29sbGF0ZQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBUQUJMRSB0bXAgKG5hbWUgdGV4dCBDT0xMQVRFIFwiQ1wiKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgn Zm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y29sbGF0aW9uX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVSRSB0YWJs ZV9uYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcShDKSwgJ0NSRUFURSBUQUJMRSB3aXRo IGNvbGxhdGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0aCBuYW1l ZCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRBQkxFIHRtcCAoaWQgaW50IENPTlNUUkFJTlQgXCJtdXN0IGJlIGJpZ2dlciB0aGFuIDEw XCIgQ0hFQ0sgKGlkID4gMTApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJ ICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0 ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVj ayBjb25zdHJhaW50ICJtdXN0IGJlIGJpZ2dlciB0aGFuIDEwIi8KKyAgb3IgZGllICJmYWlsZWQg dG8gcmVwbGljYXRlIG5hbWVkIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisj IFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25zdHJhaW50cy4KKyMg Tk9UIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IE5PVCBOVUxMKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBudWxsIHZhbHVl IGluIGNvbHVtbiAibmFtZSIgb2YgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgbm90LW51bGwgY29u c3RyYWludC8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIG5vbiBudWxsIGNvbnN0cmFp bnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwg bmFtZSB0ZXh0IE5VTEwpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1lIElTIE5VTEwgRlJPTSB0bXA7Iik7Citpcygk cmVzdWx0LCBxcSh0KSwgIkNSRUFURSBUQUJMRSB3aXRoIE5VTEwgY29uc3RyYWludCByZXBsaWNh dGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXAiKTsKKworIyBDSEVDSyBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBwcm9kdWN0X2FtZSB0ZXh0 LCBwcmljZSBpbnQgQ0hFQ0sgKHByaWNlID4gMCkpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycsIC0xMDApOyIsCisJCQkJCSAgIG9u X2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBz dGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxh dGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfcHJpY2VfY2hlY2siLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgQ0hFQ0sgY29uc3RyYWludCI7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMg REVGQVVMVAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IERFRkFVTFQgJ2ZvbycpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1l IGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoZm9vKSwgIkNSRUFURSBUQUJMRSB3aXRoIGRl ZmF1bHQgdmFsdWUgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVU5JUVVFIGNvbnN0cmFpbnQKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBp bnQgVU5JUVVFKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwK KwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQp OworJHN0ZGVyciA9fiAvRVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1 ZSBjb25zdHJhaW50ICJ0bXBfaWRfa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRl IGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFBSSU1BUlkgS0VZCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQg aW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdiYXInKTsi LAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVy ciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVw bGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXkiLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgcHJpbWFyeSBrZXkgYXQgY3JlYXRpbmcgdGFi bGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUg dG1wOyIpOworCisjIEVYQ0xVREUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgY2lyY2xlcyAoYyBjaXJjbGUsIEVYQ0xVREUgVVNJTkcgZ2lzdCAo YyBXSVRIICYmKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3Jp YmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAoJzwoMSwg MSksIDE+Jzo6Y2lyY2xlKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAg IHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRl cnIgPX4gL0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1c2lvbiBj b25zdHJhaW50ICJjaXJjbGVzX2NfZXhjbCIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0 ZSBFWENMVURFIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIGNpcmNsZXMiKTsKKworIyBSRUZFUkVOQ0VTCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHByb2R1Y3Qg KGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMSwgJ2Zvbycp OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRP IHByb2R1Y3QgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBSSU1BUlkg S0VZLCBwcm9kdWN0X2lkIGludCBSRUZFUkVOQ0VTIHByb2R1Y3QgKGlkKSkiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIG9yZGVycyBWQUxVRVMgKDEsIDEwKSIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBpbnNlcnQgb3Ig dXBkYXRlIG9uIHRhYmxlICJvcmRlcnMiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQg Im9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUg UkVGRVJFTkNFUyBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBvcmRlcnMiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHByb2R1Y3QiKTsKKworIyBERUZFUlJBQkxF Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRt cCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hlY2sgb2YgZGVmZXJyYWJsZSBjbGF1 c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVVBEQVRFIHRtcCBT RVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUgYSB0ZXN0IHRoYXQgc2hvdWxkIGZh aWwgZm9yIElOSVRJQUxMWSBJTU1FRElBVEUodGhlIGRlZmF1bHQpCiskbm9kZV9zdWJzY3JpYmVy LT5wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsg MTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsKK0RFTEVURSBGUk9NIHRt cCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispLCBvbl9lcnJvcl9zdG9wID0+IDAsIHN0ZGVyciA9 PiBcJHN0ZGVyciwgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVw bGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXkiLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgREVGRVJSQUJMRSBhdCBjcmVhdGluZyB0YWJs ZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0 bXA7Iik7CisKKyMgTk9UIERFRkVSUkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgTk9UIERFRkVS UkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdi YXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRu b2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQg KyAxOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwk c3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6 ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfcGtl eSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBOT1QgREVGRVJSQUJMRSBhdCBjcmVh dGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXA7Iik7CisKKyMgREVGRVJSQUJMRSBhbmQgSU5JVElBTExZIERFRkVSUkVECisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAo aWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVELCBuYW1lIHRl eHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNoZWNrIG9m IGRlZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRlIGEgdGVz dCB0aGF0IHNob3VsZCBzdWNjZWVkIGZvciBJTklUSUFMTFkgREVGRVJSRUQKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRtcCBTRVQg aWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7CitERUxF VEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVB VEUgVEFCTEUgd2l0aCB0YWJsZSBjb25zdHJhaW50CisjIFdlIHdpbGwgc2V0IHR3byBjaGVja3Mg YW5kIGNvbmR1Y3QgdHdvIGluc2VydHMgdGhhdCBzaG91bGQgZmFpbCByZXNwZWN0aXZlbHkuCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdG1w IChwcmljZSBpbnQsIGRpc2NvdW50ZWRfcHJpY2UgaW50LCBDSEVDSyAoZGlzY291bnRlZF9wcmlj ZSA+IDAgQU5EIHByaWNlID4gZGlzY291bnRlZF9wcmljZSkpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMTAwLCAwKTsiLAorCQkJCQkgICBvbl9l cnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rk b3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRp b24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAgb3IgZGll ICJmYWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKGZpcnN0IGNvbmRpdGlvbikg YXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoNTAsIDEwMCk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3Rv cCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBc JHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0bXAi IHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAiZmFpbGVk IHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChzZWNvbmQgY29uZGl0aW9uKSBhdCBjcmVh dGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgV0lUSCBzdHJvcmFnZV9wYXJh bWV0ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEUgdG1wIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA4MCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBnX2NsYXNz IFdIRVJFIHJlbG5hbWUgPSAndG1wJzsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRvdXQgPX4gL3tmaWxsZmFjdG9yPTgwfS8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGlj YXRlIHN0b3JhZ2Ugb3B0aW9uIjsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQs IHFxKDEpLCAnQ1JFQVRFIFRBQkxFIHdpdGggc3RvcmFnZV9wYXJhbWV0ZXIgcmVwbGljYXRlZCcp OworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1w OyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgKGNyZWF0aW5nIGEgdGFibGVz cGFjZSBpcyBub3QgcmVwbGljYXRlZCkKKyMgUHJlcGFyZSB0aGUgZGlyZWN0b3JpZXMgZm9yIHRo ZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZmlyc3QuCitteSAoJGJhc2VkaXIsICR0YWJsZXNw YWNlX2Rpcik7CisKKyRiYXNlZGlyID0gJG5vZGVfcHVibGlzaGVyLT5iYXNlZGlyOworJHRhYmxl c3BhY2VfZGlyID0gIiRiYXNlZGlyL3RibHNwY19wdWIiOworbWtkaXIoJHRhYmxlc3BhY2VfZGly KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVT UEFDRSBteXRibHNwYyBMT0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKyRiYXNlZGlyID0g JG5vZGVfc3Vic2NyaWJlci0+YmFzZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFzZWRpci90 YmxzcGNfc3ViIjsKK21rZGlyICgkdGFibGVzcGFjZV9kaXIpOworJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVTUEFDRSBteXRibHNwYyBMT0NBVElP TiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCkgVEFCTEVTUEFDRSBteXRibHNwYzsi KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0 bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRF IFRBQkxFIFRBQkxFU1BBQ0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRZUEUK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBteXR5 cGUgQVMgKGlkIGludCwgbmFtZSB0ZXh0LCBhZ2UgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIE9GIG15dHlwZTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnYmFy Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBPRiBy ZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRZUEUgbXl0eXBlIik7CisKKyMgVGVzdCBDUkVBVEUgRU5VTSBUWVBFCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXllbnVtdHlwZSBBUyBF TlVNICgnbmV3JywgJ29wZW4nLCAnY2xvc2VkJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoc3RhdHVzIG15ZW51bXR5cGUpOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKCdu ZXcnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAq IGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEobmV3KSwgJ0NSRUFURSBUQUJMRSBPRiByZXBs aWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRZUEUgbXllbnVtdHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIFJBTkdFIFRZUEUKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBmbG9hdDhfcmFuZ2Ug QVMgUkFOR0UgKHN1YnR5cGUgPSBmbG9hdDgsIHN1YnR5cGVfZGlmZiA9IGZsb2F0OG1pKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wICh2YWwgZmxvYXQ4 X3JhbmdlKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJpbnNl cnQgaW50byB0bXAgdmFsdWVzKGZsb2F0OF9yYW5nZSgtMTIuMzQsICcxLjExMTExM2UzJykpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogZnJvbSB0 bXA7Iik7CitpcygkcmVzdWx0LCBxcShbLTEyLjM0LDExMTEuMTEzXCkpLCAnQ1JFQVRFIFRBQkxF IE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgVFlQRSBmbG9hdDhfcmFuZ2UiKTsKKworIyBUZXN0IENSRUFURSBCQVNFIERBVEEg VFlQRSBhbmQgdXNlIGl0IGluIHRhYmxlIGRlZmluaXRpb24KKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICIKK0NSRUFURSBUWVBFIGludDQyOworQ1JFQVRFIEZVTkNUSU9O IGludDQyX2luKGNzdHJpbmcpCisgICBSRVRVUk5TIGludDQyCisgICBBUyAnaW50NGluJworICAg TEFOR1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBGVU5DVElPTiBpbnQ0 Ml9vdXQoaW50NDIpCisgICBSRVRVUk5TIGNzdHJpbmcKKyAgIEFTICdpbnQ0b3V0JworICAgTEFO R1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBUWVBFIGludDQyICgKKyAg IGludGVybmFsbGVuZ3RoID0gNCwKKyAgIGlucHV0ID0gaW50NDJfaW4sCisgICBvdXRwdXQgPSBp bnQ0Ml9vdXQsCisgICBhbGlnbm1lbnQgPSBpbnQ0LAorICAgZGVmYXVsdCA9IDQyLAorICAgcGFz c2VkYnl2YWx1ZQorKTsKK0NSRUFURSBUQUJMRSB0bXAgKGYxIGludDQyKTsKK0lOU0VSVCBJTlRP IHRtcCBERUZBVUxUIFZBTFVFUzsKKyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUICogZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSg0MiksICdDUkVB VEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUWVBFIGludDQyIGNhc2NhZGUiKTsKKworcGFzcyAiRERMIHJlcGxp Y2F0aW9uIHRlc3RzIHBhc3NlZDoiOworCiskbm9kZV9zdWJzY3JpYmVyLT5zdG9wOworJG5vZGVf cHVibGlzaGVyLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuMzguMQoK --000000000000dc11ed05f034f7ed Content-Type: application/octet-stream; name="v54-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v54-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbvamj7t0 RnJvbSBmOWMzNjYwNmU4ZjM0MzJmN2QyMjdkZjc0NjA5Y2VmYmFhNGVmZmNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTkgRGVjIDIwMjIgMDY6NTQ6MDQgLTA1MDAKU3ViamVjdDogW1BBVENI IDEvN10gRnVuY3Rpb25zIHRvIGRlcGFyc2UgRERMIGNvbW1hbmRzLgoKVGhpcyBwYXRjaCBwcm92 aWRlcyBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdoaWNoIGNhbgpsYXRl ciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJp bnRmLWxpa2UKZXhwYW5zaW9uLiBUaGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVkIHRvIGFs bG93IGZvciBtYWNoaW5lLWVkaXRpbmcgb2YKdGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcgY2Vy dGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCgpNdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBp biB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KY2F0YWxvZ3MsIG5v dCBmcm9tIHRoZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVs aWFibHkKY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4gb25lIG5vdCBk ZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5v ZGUuCgpUaGlzIHByb3ZpZGVzIGEgYmFzZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBEREwg c3RhdGVtZW50cy4gQ3VycmVudGx5LAp0aGUgcGF0Y2ggaGFzIHN1cHBvcnQgZm9yOgoKQ1JFQVRF L0RST1AgQUNDRVNTIE1FVEhPRApDUkVBVEUvQUxURVIvRFJPUCBDQVNUCkNSRUFURS9BTFRFUi9E Uk9QIENPTExBVElPTgpDT01NRU5UCkNSRUFURS9BTFRFUi9EUk9QIENPTlZFUlNJT04KQUxURVIg REVGQVVMVCBQUklWSUxFR0VTCkNSRUFURS9BTFRFUi9EUk9QIERPTUFJTgpDUkVBVEUvQUxURVIv RFJPUCBFWFRFTlNJT04KQ1JFQVRFL0FMVEVSL0RST1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIKQ1JF QVRFL0FMVEVSL0RST1AgRk9SRUlHTiBUQUJMRQpDUkVBVEUvQUxURVIgRlVOQ1RJT04vUFJPQ0VE VVJFCkdSQU5UCkNSRUFURS9EUk9QIElOREVYCkNSRUFURS9BTFRFUi9EUk9QIExBTkdVQUdFCkNS RUFURS9BTFRFUi9EUk9QIE1BVEVSSUFMSVpFRCBWSUVXCkNSRUFURS9EUk9QIE9QRVJBVE9SIFtD TEFTUy9GQU1JTFldCkNSRUFURS9BTFRFUi9EUk9QIFBPTElDWQpSRUZSRVNIIE1BVEVSSUFMSVpF RCBWSUVXClJFVk9LRQpBTFRFUi9EUk9QIFJPVVRJTkUKQ1JFQVRFL0FMVEVSL0RST1AgUlVMRQpD UkVBVEUvQUxURVIvRFJPUCBTQ0hFTUEKQ1JFQVRFL0FMVEVSL0RST1AgU0VRVUVOQ0UKQ1JFQVRF L0FMVEVSL0RST1AgU0VSVkVSCkNSRUFURS9BTFRFUi9EUk9QIFNUQVRJU1RJQ1MKQ1JFQVRFL0FM VEVSL0RST1AgVEFCTEUgLS0gTm90ZSAjMSwgTm90ZSAjMgpDUkVBVEUvQUxURVIvRFJPUCBURVhU IFNFQVJDSCBDT05GSUdVUkFUSU9OL1BBUlNFUi9ESUNUSU9OQVJZL1RFTVBMQVRFCkNSRUFURS9E Uk9QIFRSQU5TRk9STQpDUkVBVEUvQUxURVIgVFJJR0dFUgpDUkVBVEUvQUxURVIvRFJPUCBUWVBF CkNSRUFURS9BTFRFUi9EUk9QIFVTRVIgTUFQUElORwpDUkVBVEUvQUxURVIvRFJPUCBWSUVXIC0t IE5vdGUgIzQKU0VDVVJJVFkgTEFCRUwKCihOb3RlICMxKSBTb21lIHJlY2VudGx5IGludHJvZHVj ZWQgRERMcyhlLmcuIERETHMgcmVsYXRlZCB0bwpQQVJUSVRJT05FRCBUQUJMRSkgYXJlIHVuc3Vw cG9ydGVkLiBXZSBjYW4gZXh0ZW5kIGl0IGFzIHdlIG5lZWQgbW9yZQpmdW5jdGlvbmFsaXR5IGZv ciBEREwgcmVwbGljYXRpb24uCgooTm90ZSAjMikgRm9yIEFUVEFDSC9ERVRBQ0ggUEFSVElUSU9O LCB3ZSBoYXZlbid0IGFkZGVkIGV4dHJhIGxvZ2ljIG9uCnRoZSBzdWJzY3JpYmVyIHRvIGhhbmRs ZSB0aGUgY2FzZSB3aGVyZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciBpcyBhIFBBUlRJVElP TkVEClRBQkxFIHdoaWxlIHRoZSB0YXJnZXQgdGFibGUgb24gdGhlIHN1YmNyaWJlciBzaWRlIGlz IGEgTk9STUFMIHRhYmxlLiBXZSB3aWxsCnJlc2VhcmNoIHRoaXMgbW9yZSBhbmQgaW1wcm92ZSBp dCBsYXRlci4KCihOb3RlICMzKSBSZW1vdmVkIGFuIHVuZGVzaXJhYmxlICdvbicgZnJvbSB0aGUg aWRlbnRpdHkgc3RyaW5nIGZvciBUUkFOU0ZPUk0KaW4gZ2V0T2JqZWN0SWRlbnRpdHlQYXJ0cy4g VGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBkZXBhcnNlIG9mIERST1AKVFJBTlNGT1JNIGNvbW1hbmQg d29yayBzaW5jZSAnb24nIGlzIG5vdCBwcmVzZW50IGluIHRoZSBjdXJyZW50CkRST1AgVFJBTlNG T1JNIHN5bnRheC4gRm9yIGV4YW1wbGUsIHRoZSBjb3JyZWN0IHN5bnRheCBpcwpEUk9QIFRSQU5T Rk9STSB0cmYgRk9SIElOVCBMQU5HVUFHRSBTUUw7Cmluc3RlYWQgb2YKRFJPUCBUUkFOU0ZPUk0g dHJmIEZPUiBJTlQgT04gTEFOR1VBR0UgU1FMOwoKKE5vdGUgIzQpIEZvciBWSUVXU1RNVCwgd2Ug Y3JlYXRlZCBwZ19nZXRfdmlld2RlZl9pbnRlcm5hbCB0byBnZXQgdGhlClNFTEVDVCBxdWVyeSBv ZiB0aGUgcGVuZGluZyBWSUVXU1RNVC4gSW4gdGhlIGNhc2UgdGhhdCB0aGUgQ1JFQVRFIFZJRVcg Y29tbWFuZAppcyBzdGlsbCBpbiBwcm9ncmVzcywgd2Ugd291bGQgbmVlZCB0byBzZWFyY2ggdGhl IHN5c3RlbSBjYWNoZSBSVUxFUkVMTkFNRSB0byBnZXQgdGhlCnJld3JpdGUgcnVsZSBvZiB0aGUg dmlldyBhcyBvcHBvc2UgdG8gcXVlcnlpbmcgcGdfcmV3cml0ZSBhcyBpbiBwZ19nZXRfdmlld2Rl Zl93b3JrZXIoKSwKdGhlIGxhdHRlciB3aWxsIHJldHVybiBlbXB0eSByZXN1bHQuCi0tLQogc3Jj L2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYyAgICAgICAgICAgICAgICAgfCAgICA3ICstCiBzcmMv YmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYyAgICAgICAgICB8ICAgIDIgKy0KIHNyYy9i YWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAgMiArCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMgICAgICAgICB8ICAgMTAgKy0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgICAgICAgICAgIHwgOTI1NiArKysrKysrKysrKysr KysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgICAgICAgICAgICAgIHwgIDc3 NiArKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQgICAgICAgICAgICAgfCAgICAy ICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xhYmVsLmMgICAgICAgICAgICAgIHwgICAgMiAr CiBzcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgICAgICAgICAgICB8ICAgMzMgKwog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgfCAgICAxIC0KIHNy Yy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jICAgICAgICAgICAgICAgICAgIHwgICA5MSArLQogc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgICAgICAgICAgfCAgICAzICstCiBzcmMv YmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jICAgICAgICAgICAgICB8ICAgNTMgKwogc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAgICAgICAgfCAgMjU4ICstCiBzcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICB8ICAgIDYgKwogc3JjL2luY2x1 ZGUvY29tbWFuZHMvY29sbGF0aW9uY21kcy5oICAgICAgICAgfCAgICAzICstCiBzcmMvaW5jbHVk ZS9jb21tYW5kcy9zZXF1ZW5jZS5oICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUv dGNvcC9kZGxfZGVwYXJzZS5oICAgICAgICAgICAgICAgfCAgIDIzICsKIHNyYy9pbmNsdWRlL3Rj b3AvZGVwYXJzZV91dGlsaXR5LmggICAgICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS90Y29w L3V0aWxpdHkuaCAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMv YWNsLmggICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL2Fj bGNoa19pbnRlcm5hbC5oICAgICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9idWls dGlucy5oICAgICAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0 aWxzLmggICAgICAgICAgICAgICAgfCAgIDE5ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv b2JqZWN0X2FkZHJlc3Mub3V0IHwgICAgMiArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgICAgICAgICAgfCAgICA0ICsKIDI2IGZpbGVzIGNoYW5nZWQsIDEwNDgyIGluc2Vy dGlvbnMoKyksIDgwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNzU1IHNyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9j b21tYW5kcy9kZGxfanNvbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvdGNvcC9k ZGxfZGVwYXJzZS5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMKaW5kZXggYjUwMTkwNTllOC4uYzRmOTY0NDQ1 ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYworKysgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL2FjbGNoay5jCkBAIC0xMjksNyArMTI5LDYgQEAgc3RhdGljIHZvaWQgZXhw YW5kX2FsbF9jb2xfcHJpdmlsZWdlcyhPaWQgdGFibGVfb2lkLCBGb3JtX3BnX2NsYXNzIGNsYXNz Rm9ybSwKIAkJCQkJCQkJCSAgQWNsTW9kZSAqY29sX3ByaXZpbGVnZXMsCiAJCQkJCQkJCQkgIGlu dCBudW1fY29sX3ByaXZpbGVnZXMpOwogc3RhdGljIEFjbE1vZGUgc3RyaW5nX3RvX3ByaXZpbGVn ZShjb25zdCBjaGFyICpwcml2bmFtZSk7Ci1zdGF0aWMgY29uc3QgY2hhciAqcHJpdmlsZWdlX3Rv X3N0cmluZyhBY2xNb2RlIHByaXZpbGVnZSk7CiBzdGF0aWMgQWNsTW9kZSByZXN0cmljdF9hbmRf Y2hlY2tfZ3JhbnQoYm9vbCBpc19ncmFudCwgQWNsTW9kZSBhdmFpbF9nb3B0aW9ucywKIAkJCQkJ CQkJCQlib29sIGFsbF9wcml2cywgQWNsTW9kZSBwcml2aWxlZ2VzLAogCQkJCQkJCQkJCU9pZCBv YmplY3RJZCwgT2lkIGdyYW50b3JJZCwKQEAgLTM4NSwxMSArMzg0LDEwIEBAIEV4ZWN1dGVHcmFu dFN0bXQoR3JhbnRTdG10ICpzdG10KQogCUxpc3RDZWxsICAgKmNlbGw7CiAJY29uc3QgY2hhciAq ZXJyb3Jtc2c7CiAJQWNsTW9kZQkJYWxsX3ByaXZpbGVnZXM7CisJT2lkCQkJZ3JhbnRvciA9IElu dmFsaWRPaWQ7CiAKIAlpZiAoc3RtdC0+Z3JhbnRvcikKIAl7Ci0JCU9pZAkJCWdyYW50b3I7Ci0K IAkJZ3JhbnRvciA9IGdldF9yb2xlc3BlY19vaWQoc3RtdC0+Z3JhbnRvciwgZmFsc2UpOwogCiAJ CS8qCkBAIC00MDUsNiArNDAzLDcgQEAgRXhlY3V0ZUdyYW50U3RtdChHcmFudFN0bXQgKnN0bXQp CiAJLyoKIAkgKiBUdXJuIHRoZSByZWd1bGFyIEdyYW50U3RtdCBpbnRvIHRoZSBJbnRlcm5hbEdy YW50IGZvcm0uCiAJICovCisJaXN0bXQuZ3JhbnRvcl91aWQgPSBncmFudG9yOwogCWlzdG10Lmlz X2dyYW50ID0gc3RtdC0+aXNfZ3JhbnQ7CiAJaXN0bXQub2JqdHlwZSA9IHN0bXQtPm9ianR5cGU7 CiAKQEAgLTI2MjgsNyArMjYyNyw3IEBAIHN0cmluZ190b19wcml2aWxlZ2UoY29uc3QgY2hhciAq cHJpdm5hbWUpCiAJcmV0dXJuIDA7CQkJCQkvKiBhcHBlYXNlIGNvbXBpbGVyICovCiB9CiAKLXN0 YXRpYyBjb25zdCBjaGFyICoKK2NvbnN0IGNoYXIgKgogcHJpdmlsZWdlX3RvX3N0cmluZyhBY2xN b2RlIHByaXZpbGVnZSkKIHsKIAlzd2l0Y2ggKHByaXZpbGVnZSkKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmpl Y3RhZGRyZXNzLmMKaW5kZXggZmU5N2ZiZjc5ZC4uMjljZDUwZjJlNyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9vYmplY3RhZGRyZXNzLmMKQEAgLTU5NDMsNyArNTk0Myw3IEBAIGdldE9iamVjdElkZW50aXR5 UGFydHMoY29uc3QgT2JqZWN0QWRkcmVzcyAqb2JqZWN0LAogCQkJCXRyYW5zZm9ybVR5cGUgPSBm b3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQodHJhbnNmb3JtLT50cmZ0eXBlKTsKIAkJCQl0cmFuc2Zv cm1MYW5nID0gZ2V0X2xhbmd1YWdlX25hbWUodHJhbnNmb3JtLT50cmZsYW5nLCBmYWxzZSk7CiAK LQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWZmZXIsICJmb3IgJXMgb24gbGFuZ3VhZ2UgJXMiLAor CQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZmZlciwgImZvciAlcyBsYW5ndWFnZSAlcyIsCiAJCQkJ CQkJCSB0cmFuc2Zvcm1UeXBlLAogCQkJCQkJCQkgdHJhbnNmb3JtTGFuZyk7CiAJCQkJaWYgKG9i am5hbWUpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZSBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IDQ4ZjczNDhmOTEuLjE3MWRmYjI4MDAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL01ha2VmaWxlCkBAIC0yOSw2ICsyOSw4IEBAIE9CSlMgPSBcCiAJY29weXRvLm8g XAogCWNyZWF0ZWFzLm8gXAogCWRiY29tbWFuZHMubyBcCisJZGRsX2RlcGFyc2UubyBcCisJZGRs X2pzb24ubyBcCiAJZGVmaW5lLm8gXAogCWRpc2NhcmQubyBcCiAJZHJvcGNtZHMubyBcCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKaW5kZXggODFlNTRlMGNlNi4uM2NlYjdiMjUyYSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYwpAQCAtNTIsNyArNTIsOCBAQCB0eXBl ZGVmIHN0cnVjdAogICogQ1JFQVRFIENPTExBVElPTgogICovCiBPYmplY3RBZGRyZXNzCi1EZWZp bmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1l dGVycywgYm9vbCBpZl9ub3RfZXhpc3RzKQorRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBz dGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsCisJCQkJIGJvb2wgaWZfbm90X2V4 aXN0cywgT2JqZWN0QWRkcmVzcyAqZnJvbV9leGlzdGluZ19jb2xsaWQpCiB7CiAJY2hhcgkgICAq Y29sbE5hbWU7CiAJT2lkCQkJY29sbE5hbWVzcGFjZTsKQEAgLTEzOSw2ICsxNDAsMTMgQEAgRGVm aW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFt ZXRlcnMsIGJvb2wgaWZfbm90X2UKIAkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKIAkJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb2xsYXRpb24gJXUiLCBjb2xsaWQp OwogCisJCS8qCisJCSAqIE1ha2UgZnJvbSBleGlzdGluZyBjb2xsYXRpb25pZCBhdmFpbGFibGUg dG8gY2FsbGVycyBmb3Igc3RhdGVtZW50IHN1Y2ggYXMKKwkJICogQ1JFQVRFIENPTExBVElPTiBh bnlfbmFtZSBGUk9NIGFueV9uYW1lCisJCSAqLworCQlpZiAoZnJvbV9leGlzdGluZ19jb2xsaWQg JiYgT2lkSXNWYWxpZChjb2xsaWQpKQorCQkJT2JqZWN0QWRkcmVzc1NldCgqZnJvbV9leGlzdGlu Z19jb2xsaWQsIENvbGxhdGlvblJlbGF0aW9uSWQsIGNvbGxpZCk7CisKIAkJY29sbHByb3ZpZGVy ID0gKChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKHRwKSktPmNvbGxwcm92aWRlcjsKIAkJ Y29sbGlzZGV0ZXJtaW5pc3RpYyA9ICgoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0cCkp LT5jb2xsaXNkZXRlcm1pbmlzdGljOwogCQljb2xsZW5jb2RpbmcgPSAoKEZvcm1fcGdfY29sbGF0 aW9uKSBHRVRTVFJVQ1QodHApKS0+Y29sbGVuY29kaW5nOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBh cnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMC4uODU3Zjk0OTMzZQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKQEAg LTAsMCArMSw5MjU2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJzZS5j CisgKgkgIEZ1bmN0aW9ucyB0byBjb252ZXJ0IHV0aWxpdHkgY29tbWFuZHMgdG8gbWFjaGluZS1w YXJzZWFibGUKKyAqCSAgcmVwcmVzZW50YXRpb24KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCisgKgorICogTk9URVMKKyAqCisgKiBUaGlzIGlzIGludGVuZGVkIHRvIHByb3Zp ZGUgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4KKyAqIGxh dGVyIGJlIHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmluZ3MgYnkgd2VsbC1kZWZpbmVkIHNw cmludGYtbGlrZQorICogZXhwYW5zaW9uLiAgVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRl ZCB0byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCisgKiB0aGUgY29tbWFuZHMsIGJ5IHJl cGxhY2luZyBjZXJ0YWluIG5vZGVzIHdpdGhpbiB0aGUgb2JqZWN0cy4KKyAqCisgKiBNdWNoIG9m IHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBz eXN0ZW0KKyAqIGNhdGFsb2dzLCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBp dCBpcyBpbXBvc3NpYmxlIHRvIHJlbGlhYmx5CisgKiBjb25zdHJ1Y3QgYSBmdWxseS1zcGVjaWZp ZWQgY29tbWFuZCAoaS5lLiBvbmUgbm90IGRlcGVuZGVudCBvbiBzZWFyY2hfcGF0aAorICogZXRj KSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5vZGUuCisgKgorICogRGVwYXJzZSBvYmplY3Qg dHJlZSBpcyBjcmVhdGVkIGJ5IHVzaW5nOgorICogCWEpIG5ld19vYmp0cmVlKCJrbm93IGNvbnRl bnRzIikgd2hlcmUgdGhlIGNvbXBsZXRlIHRyZWUgY29udGVudCBpcyBrbm93biBvcgorICogICAg IHRoZSBpbml0aWFsIHRyZWUgY29udGVudCBpcyBrbm93bi4KKyAqIAliKSBuZXdfb2JqdHJlZSgi IikgZm9yIHRoZSBzeW50YXggd2hlcmUgdGhlIG9iamVjdCB0cmVlIHdpbGwgYmUgZGVyaXZlZAor ICogICAgIGJhc2VkIG9uIHNvbWUgY29uZGl0aW9uYWwgY2hlY2tzLgorICogCWMpIG5ld19vYmp0 cmVlX1ZBIHdoZXJlIHRoZSBjb21wbGV0ZSB0cmVlIGNhbiBiZSBkZXJpdmVkIHVzaW5nIHNvbWUg Zml4ZWQKKyAqICAgICBjb250ZW50IGFuZC9vciBzb21lIHZhcmlhYmxlIGFyZ3VtZW50cy4KKyAq CisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJz ZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgor CisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgi CisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2Uu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRo aWQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2Nhc3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfY29udmVyc2lvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVwZW5k LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19leHRlbnNpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWdu X3NlcnZlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX2xhbmd1YWdlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYXJnZW9iamVjdC5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19vcGNsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgorI2luY2x1ZGUg ImNhdGFsb2cvcGdfb3BmYW1pbHkuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3BvbGljeS5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcmFuZ2Uu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Jld3JpdGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWNfZXh0LmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ190cmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX2Nv bmZpZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfZGljdC5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfdHNfcGFyc2VyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c190ZW1wbGF0ZS5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdXNlcl9t YXBwaW5nLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbWFu ZHMvc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCisjaW5jbHVk ZSAiZm9yZWlnbi9mb3JlaWduLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm1i L3BnX3djaGFyLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9k ZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKKyNpbmNs dWRlICJwYXJzZXIvcGFyc2VfdHlwZS5oIgorI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRs ZXIuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCisjaW5jbHVkZSAidGNvcC91dGls aXR5LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdy b2lkcy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25iLmgi CisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisj aW5jbHVkZSAidXRpbHMvcnVsZXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIK KworLyogRXN0aW1hdGVkIGxlbmd0aCBvZiB0aGUgZ2VuZXJhdGVkIGpzb25iIHN0cmluZyAqLwor I2RlZmluZSBKU09OQl9FU1RJTUFURURfTEVOIDEyOAorCisvKgorICogQmVmb3JlIHRoZXkgYXJl IHR1cm5lZCBpbnRvIEpTT05CIHJlcHJlc2VudGF0aW9uLCBlYWNoIGNvbW1hbmQgaXMKKyAqIHJl cHJlc2VudGVkIGFzIGFuIG9iamVjdCB0cmVlLCB1c2luZyB0aGUgc3RydWN0cyBiZWxvdy4KKyAq LwordHlwZWRlZiBlbnVtCit7CisJT2JqVHlwZU51bGwsCisJT2JqVHlwZUJvb2wsCisJT2JqVHlw ZVN0cmluZywKKwlPYmpUeXBlQXJyYXksCisJT2JqVHlwZUludGVnZXIsCisJT2JqVHlwZUZsb2F0 LAorCU9ialR5cGVPYmplY3QKK30gT2JqVHlwZTsKKworLyoKKyAqIFJlcHJlc2VudCB0aGUgY29t bWFuZCBhcyBhbiBvYmplY3QgdHJlZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgT2JqVHJlZQorewor CXNsaXN0X2hlYWQJcGFyYW1zOwkJCS8qIE9iamVjdCB0cmVlIHBhcmFtZXRlcnMgKi8KKwlpbnQJ CQludW1QYXJhbXM7CQkvKiBOdW1iZXIgb2YgcGFyYW1ldGVycyBpbiB0aGUgb2JqZWN0IHRyZWUg Ki8KKwlTdHJpbmdJbmZvCWZtdGluZm87CQkvKiBGb3JtYXQgc3RyaW5nIG9mIHRoZSBPYmpUcmVl ICovCisJYm9vbAkJcHJlc2VudDsJCS8qIEluZGljYXRlcyBpZiBib29sZWFuIHZhbHVlIHNob3Vs ZCBiZSBzdG9yZWQgKi8KK30gT2JqVHJlZTsKKworLyoKKyAqIEFuIGVsZW1lbnQgb2YgYW4gb2Jq ZWN0IHRyZWUgKE9ialRyZWUpLgorICovCit0eXBlZGVmIHN0cnVjdCBPYmpFbGVtCit7CisJY2hh cgkgICAqbmFtZTsJCQkvKiBOYW1lIG9mIG9iamVjdCBlbGVtZW50ICovCisJT2JqVHlwZQkJb2Jq dHlwZTsJCS8qIE9iamVjdCB0eXBlICovCisKKwl1bmlvbgorCXsKKwkJYm9vbAkJYm9vbGVhbjsK KwkJY2hhcgkgICAqc3RyaW5nOworCQlpbnQ2NAkJaW50ZWdlcjsKKwkJZmxvYXQ4CQlmbHQ7CisJ CU9ialRyZWUgICAgKm9iamVjdDsKKwkJTGlzdAkgICAqYXJyYXk7CisJfQkJCXZhbHVlOwkJCS8q IFN0b3JlIHRoZSBvYmplY3QgdmFsdWUgYmFzZWQgb24gdGhlIG9iamVjdAorCQkJCQkJCQkgKiB0 eXBlICovCisJc2xpc3Rfbm9kZQlub2RlOwkJCS8qIFVzZWQgaW4gY29udmVydGluZyBiYWNrIHRv IE9iakVsZW0KKwkJCQkJCQkJICogc3RydWN0dXJlICovCit9IE9iakVsZW07CisKKy8qCisgKiBS ZWR1Y2Ugc29tZSB1bm5lY2Vzc2FyeSBzdHJpbmdzIGZyb20gdGhlIG91dHB1dCBqc29uIHdoZW4g dmVyYm9zZQorICogYW5kICJwcmVzZW50IiBtZW1iZXIgaXMgZmFsc2UuIFRoaXMgbWVhbnMgdGhl c2Ugc3RyaW5ncyB3b24ndCBiZSBtZXJnZWQgaW50bworICogdGhlIGxhc3QgRERMIGNvbW1hbmQu CisgKi8KK2Jvb2wJCXZlcmJvc2UgPSB0cnVlOworCitzdGF0aWMgdm9pZCBhcHBlbmRfYXJyYXlf b2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIExpc3QgKmFycmF5KTsKK3N0YXRp YyB2b2lkIGFwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBi b29sIHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9mbG9hdF9vYmplY3QoT2JqVHJlZSAqdHJl ZSwgY2hhciAqc3ViX2ZtdCwgZmxvYXQ4IHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9udWxs X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KTsKK3N0YXRpYyB2b2lkIGFwcGVu ZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIE9ialRyZWUgKnZh bHVlKTsKK3N0YXRpYyBjaGFyICphcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJl ZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCk7CitzdGF0aWMgdm9pZCBhcHBlbmRfcHJlbWFkZV9vYmpl Y3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxlbSAqZWxlbSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfc3Ry aW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBjaGFyICpuYW1lLAorCQkJ CQkJCQkgY2hhciAqdmFsdWUpOworc3RhdGljIHZvaWQgZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lk IHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJCQkJCQkgT2lkICpuc3BpZCwgY2hhciAqKnR5 cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkJCQkgYm9vbCAqdHlwYXJyYXkpOworc3Rh dGljIExpc3QgKkZ1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAqcHJvYXJnZGVmYXVsdHMpOworc3Rh dGljIE9iakVsZW0gKm5ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKTsKK3N0YXRp YyBPYmpUcmVlICpuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT2lkIGNsYXNzSWQsIE9pZCBv YmplY3RJZCk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKFJvbGVT cGVjICpzcGVjKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfb2JqZWN0X29iamVjdChPYmpUcmVlICp2 YWx1ZSk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfVkEoY2hhciAqZm10LCBpbnQgbnVt b2JqcywuLi4pOworc3RhdGljIE9iakVsZW0gKm5ld19zdHJpbmdfb2JqZWN0KGNoYXIgKnZhbHVl KTsKK3N0YXRpYyBKc29uYlZhbHVlICpvYmp0cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVlICp0cmVl LCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKTsKK3N0YXRpYyB2b2lkIHBnX2dldF9pbmRleGRlZl9k ZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJCQkJCQkJCSBjaGFyICoqaW5kZXhfYW0sCisJCQkJ CQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkJCQkgY2hhciAqKnJlbG9wdGlvbnMsCisJ CQkJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkJCQkgY2hhciAqKndoZXJlQ2xhdXNl KTsKK3N0YXRpYyBjaGFyICpSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQoUmVsYXRpb24gcmVsLCBB dHRyTnVtYmVyIGF0dG5vLAorCQkJCQkJCQkJICBMaXN0ICpkcGNvbnRleHQsIExpc3QgKipleHBy cyk7CisKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtbkRlZihSZWxhdGlvbiByZWxhdGlv biwgTGlzdCAqZHBjb250ZXh0LCBib29sIGNvbXBvc2l0ZSwKKwkJCQkJCQkJICBDb2x1bW5EZWYg KmNvbGRlZiwgYm9vbCBpc19hbHRlciwgTGlzdCAqKmV4cHJzKTsKK3N0YXRpYyBPYmpUcmVlICpk ZXBhcnNlX0NvbHVtbklkZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBh bHRlcl90YWJsZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFs dGVyVGFibGVDbWQgKnN1YmNtZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10 X0NvbGxhdGlvbihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJCQkJCQkJ IE9iamVjdEFkZHJlc3MgZnJvbUNvbGxpZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZp bmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRp YyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQsIERlZmluZVN0 bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29uZmln KE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lLCBPYmplY3RBZGRyZXNzIGNvcGllZCk7 CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKE9pZCBvYmplY3RJ ZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0 bXRfVFNEaWN0aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRp YyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNUZW1wbGF0ZShPaWQgb2JqZWN0SWQsIERl ZmluZVN0bXQgKmRlZmluZSk7CisKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZkVsZW0oRGVm RWxlbSAqZWxlbSwgYm9vbCBpc19yZXNldCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9GdW5j dGlvblNldChWYXJpYWJsZVNldEtpbmQga2luZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOwor c3RhdGljIE9ialRyZWUgKmRlcGFyc2VfT25Db21taXRDbGF1c2UoT25Db21taXRBY3Rpb24gb3B0 aW9uKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJUYWJsZUNt ZCAqc3ViY21kKTsKKworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DYWNoZShG b3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGlu ZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DeWNsZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJv b2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9JbmNy ZW1lbnRCeShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3Rh dGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9NaW52YWx1ZShGb3JtX3BnX3NlcXVlbmNl IHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBh cnNlX1NlcV9NYXh2YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFi bGUpOworc3RhdGljIE9iakVsZW0gKmRlcGFyc2VfU2VxX093bmVkQnkoT2lkIHNlcXVlbmNlSWQs IGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9S ZXN0YXJ0KEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhKTsKK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9TZXFfU3RhcnR3aXRoKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9v bCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0FzKERl ZkVsZW0gKmVsZW0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfU3RvcmFn ZShGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2Vf VHlwZV9SZWNlaXZlKEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxl bSAqZGVwYXJzZV9UeXBlX1NlbmQoRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGlu ZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfVHlwbW9kX0luKEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsK K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQoRm9ybV9wZ190 eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfQW5hbHl6 ZShGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2Vf VHlwZV9TdWJzY3JpcHQoRm9ybV9wZ190eXBlIHR5cEZvcm0pOworCitzdGF0aWMgTGlzdCAqZGVw YXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKTsKK3N0YXRpYyBMaXN0ICpkZXBhcnNlX1Rh YmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWxlbWVudHMsIExpc3Qg KmRwY29udGV4dCwKKwkJCQkJCQkJICAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUpOworCitz dGF0aWMgY2hhciAqRG9tYWluR2V0RGVmYXVsdChIZWFwVHVwbGUgZG9tVHVwLCBib29sIG1pc3Np bmdfb2spOworCisvKgorICogQXBwZW5kIHByZXNlbnQgYXMgZmFsc2UgdG8gYSB0cmVlLgorICov CitzdGF0aWMgdm9pZAorYXBwZW5kX25vdF9wcmVzZW50KE9ialRyZWUgKnRyZWUpCit7CisJYXBw ZW5kX2Jvb2xfb2JqZWN0KHRyZWUsICJwcmVzZW50IiwgZmFsc2UpOworfQorCisvKgorICogQWRk IGNvbW1vbiBjbGF1c2VzIHRvIENyZWF0ZVBvbGljeSBvciBBbHRlclBvbGljeSBkZXBhcnNlIG9i amVjdHMuCisgKi8KK3N0YXRpYyB2b2lkCithZGRfcG9saWN5X2NsYXVzZXMoT2JqVHJlZSAqcmV0 LCBPaWQgcG9saWN5T2lkLCBMaXN0ICpyb2xlcywgYm9vbCBkb19xdWFsLAorCQkJCSAgIGJvb2wg ZG9fd2l0aF9jaGVjaykKK3sKKwlSZWxhdGlvbglwb2xSZWwgPSB0YWJsZV9vcGVuKFBvbGljeVJl bGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJSGVhcFR1cGxlCXBvbFR1cCA9IGdldF9jYXRh bG9nX29iamVjdF9ieV9vaWQocG9sUmVsLCBBbnVtX3BnX3BvbGljeV9vaWQsIHBvbGljeU9pZCk7 CisJRm9ybV9wZ19wb2xpY3kgcG9sRm9ybTsKKworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwb2xU dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcG9saWN5IHdpdGgg T0lEICV1IiwgcG9saWN5T2lkKTsKKworCXBvbEZvcm0gPSAoRm9ybV9wZ19wb2xpY3kpIEdFVFNU UlVDVChwb2xUdXApOworCisJLyogQWRkIHRoZSAiT04gdGFibGUiIGNsYXVzZSAqLworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJldCwgIk9OICV7dGFibGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgcG9sRm9y bS0+cG9scmVsaWQpKTsKKworCS8qCisJICogQWRkIHRoZSAiVE8gcm9sZSIgY2xhdXNlLCBpZiBh bnkuICBJbiB0aGUgQ1JFQVRFIGNhc2UsIGl0IGFsd2F5cworCSAqIGNvbnRhaW5zIGF0IGxlYXN0 IFBVQkxJQywgYnV0IGluIHRoZSBBTFRFUiBjYXNlIGl0IG1pZ2h0IGJlIGVtcHR5LgorCSAqLwor CWlmIChyb2xlcykKKwl7CisJCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJCUxpc3RDZWxsICAgKmNl bGw7CisKKwkJZm9yZWFjaChjZWxsLCByb2xlcykKKwkJeworCQkJUm9sZVNwZWMgICAqc3BlYyA9 IChSb2xlU3BlYyAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJ CQkJCQkgICBuZXdfb2JqZWN0X29iamVjdChuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoc3BlYykp KTsKKwkJfQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIlRPICV7cm9sZTosIH1SIiwgbGlz dCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwkvKiBBZGQgdGhl IFVTSU5HIGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRvX3F1YWwpCisJeworCQlEYXR1bQkJZGVw YXJzZWQ7CisJCURhdHVtCQlzdG9yZWRleHByOworCQlib29sCQlpc251bGw7CisKKwkJc3RvcmVk ZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1fcGdfcG9saWN5X3BvbHF1YWwsCisJCQkJ CQkJCSAgUmVsYXRpb25HZXREZXNjcihwb2xSZWwpLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkK KwkJCWVsb2coRVJST1IsICJudWxsIHBvbHF1YWwgZXhwcmVzc2lvbiBpbiBwb2xpY3kgJXUiLCBw b2xpY3lPaWQpOworCQlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIs IHN0b3JlZGV4cHIsIHBvbEZvcm0tPnBvbHJlbGlkKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo cmV0LCAiVVNJTkcgKCV7ZXhwcmVzc2lvbn1zKSIsICJleHByZXNzaW9uIiwKKwkJCQkJCQkgVGV4 dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJl c2VudChyZXQpOworCisJLyogQWRkIHRoZSBXSVRIIENIRUNLIGNsYXVzZSwgaWYgYW55ICovCisJ aWYgKGRvX3dpdGhfY2hlY2spCisJeworCQlEYXR1bQkJZGVwYXJzZWQ7CisJCURhdHVtCQlzdG9y ZWRleHByOworCQlib29sCQlpc251bGw7CisKKwkJc3RvcmVkZXhwciA9IGhlYXBfZ2V0YXR0cihw b2xUdXAsIEFudW1fcGdfcG9saWN5X3BvbHdpdGhjaGVjaywKKwkJCQkJCQkJICBSZWxhdGlvbkdl dERlc2NyKHBvbFJlbCksICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwg Im51bGwgcG9sd2l0aGNoZWNrIGV4cHJlc3Npb24gaW4gcG9saWN5ICV1IiwgcG9saWN5T2lkKTsK KwkJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLCBzdG9yZWRleHBy LCBwb2xGb3JtLT5wb2xyZWxpZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIldJVEgg Q0hFQ0sgKCV7ZXhwcmVzc2lvbn1zKSIsCisJCQkJCQkJICJleHByZXNzaW9uIiwgVGV4dERhdHVt R2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChy ZXQpOworCisJcmVsYXRpb25fY2xvc2UocG9sUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisv KgorICogQXBwZW5kIGFuIGFycmF5IHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2 b2lkCithcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIExp c3QgKmFycmF5KQoreworCU9iakVsZW0gICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1l OworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKGxpc3RfbGVuZ3RoKGFycmF5KSA9PSAwKQor CQlyZXR1cm47CisKKwlpZiAoIXZlcmJvc2UpCisJeworCQlMaXN0Q2VsbCAgICpsYzsKKworCQkv KiBSZW1vdmUgZWxlbWVudHMgd2hlcmUgcHJlc2VudCBmbGFnIGlzIGZhbHNlICovCisJCWZvcmVh Y2gobGMsIGFycmF5KQorCQl7CisJCQlPYmpFbGVtICAgICplbGVtID0gKE9iakVsZW0gKikgbGZp cnN0KGxjKTsKKworCQkJQXNzZXJ0KGVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCB8fAor CQkJCSAgIGVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZVN0cmluZyk7CisKKwkJCWlmICghZWxlbS0+ dmFsdWUub2JqZWN0LT5wcmVzZW50ICYmCisJCQkJZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlT2Jq ZWN0KQorCQkJCWFycmF5ID0gZm9yZWFjaF9kZWxldGVfY3VycmVudChhcnJheSwgbGMpOworCQl9 CisKKwl9CisKKwkvKiBDaGVjayBmb3IgZW1wdHkgbGlzdCBhZnRlciByZW1vdmluZyBlbGVtZW50 cyAqLworCWlmIChsaXN0X2xlbmd0aChhcnJheSkgPT0gMCkKKwkJcmV0dXJuOworCisJb2JqZWN0 X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisK KwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZUFycmF5LCBvYmplY3RfbmFtZSk7CisJcGFyYW0t PnZhbHVlLmFycmF5ID0gYXJyYXk7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFt KTsKK30KKworLyoKKyAqIEFwcGVuZCBhIGJvb2xlYW4gcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAq Lworc3RhdGljIHZvaWQKK2FwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpz dWJfZm10LCBib29sIHZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCWNoYXIJICAgKm9i amVjdF9uYW1lID0gc3ViX2ZtdDsKKwlib29sCQlpc19wcmVzZW50X2ZsYWcgPSBmYWxzZTsKKwor CUFzc2VydChzdWJfZm10KTsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIGZvcm1hdCBzdHJpbmcg aXMgJ3ByZXNlbnQnIGFuZCBpZiB5ZXMsIHN0b3JlIHRoZSBib29sZWFuCisJICogdmFsdWUKKwkg Ki8KKwlpZiAoc3RyY21wKHN1Yl9mbXQsICJwcmVzZW50IikgPT0gMCkKKwl7CisJCWlzX3ByZXNl bnRfZmxhZyA9IHRydWU7CisJCXRyZWUtPnByZXNlbnQgPSB2YWx1ZTsKKwl9CisKKwlpZiAoIXZl cmJvc2UgJiYgIXRyZWUtPnByZXNlbnQpCisJCXJldHVybjsKKworCWlmICghaXNfcHJlc2VudF9m bGFnKQorCQlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVl LCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlQm9vbCwgb2JqZWN0X25h bWUpOworCXBhcmFtLT52YWx1ZS5ib29sZWFuID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2Jq ZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVuZCBhIGZsb2F0OCBwYXJhbWV0ZXIg dG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2Zsb2F0X29iamVjdChPYmpUcmVl ICp0cmVlLCBjaGFyICpzdWJfZm10LCBmbG9hdDggdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFy YW07CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlvYmpl Y3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsK KworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlRmxvYXQsIG9iamVjdF9uYW1lKTsKKwlwYXJh bS0+dmFsdWUuZmx0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFt KTsKK30KKworLyoKKyAqIEFwcGVuZCB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUgT2Jq VHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRy ZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJaW50CQkJbGVuOworCWNoYXIJICAgKmZtdDsKKworCWlm ICh0cmVlLT5mbXRpbmZvID09IE5VTEwpCisJCXJldHVybjsKKworCWZtdCA9IHRyZWUtPmZtdGlu Zm8tPmRhdGE7CisJbGVuID0gdHJlZS0+Zm10aW5mby0+bGVuOworCisJLyogQWRkIGEgc2VwYXJh dG9yIGlmIG5lY2Vzc2FyeSAqLworCWlmIChsZW4gPiAwICYmIGZtdFtsZW4gLSAxXSAhPSAnICcp CisJCWFwcGVuZFN0cmluZ0luZm9TcGFjZXModHJlZS0+Zm10aW5mbywgMSk7CisKKwlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKHRyZWUtPmZtdGluZm8sIHN1Yl9mbXQpOworfQorCisvKgorICogQXBw ZW5kIGEgTlVMTCBvYmplY3QgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX251 bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJY2hhcgkgICAqb2Jq ZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UpCisJCXJldHVy bjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUs IHN1Yl9mbXQpOworCisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIG5ld19vYmplY3QoT2Jq VHlwZU51bGwsIG9iamVjdF9uYW1lKSk7Cit9CisKKy8qCisgKiBBcHBlbmQgYW4gb2JqZWN0IHBh cmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfb2JqZWN0X29iamVj dChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBPYmpUcmVlICp2YWx1ZSkKK3sKKwlPYmpF bGVtICAgICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10 KTsKKworCWlmICghdmVyYm9zZSAmJiAhdmFsdWUtPnByZXNlbnQpCisJCXJldHVybjsKKworCW9i amVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQp OworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVPYmplY3QsIG9iamVjdF9uYW1lKTsKKwlw YXJhbS0+dmFsdWUub2JqZWN0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUs IHBhcmFtKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgb2JqZWN0IG5hbWUgd2hpY2ggaXMgZXh0 cmFjdGVkIGZyb20gdGhlIGlucHV0ICIqJXtuYW1lWzouXX0qIgorICogc3R5bGUgc3RyaW5nLiBB bmQgYXBwZW5kIHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpUcmVlLgorICovCitz dGF0aWMgY2hhciAqCithcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJl ZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBvYmplY3RfbmFtZTsKKwljb25z dCBjaGFyICplbmRfcHRyOworCWNvbnN0IGNoYXIgKmNwOworCWJvb2wJCXN0YXJ0X2NvcHkgPSBm YWxzZTsKKworCWlmIChzdWJfZm10ID09IE5VTEwgfHwgdHJlZS0+Zm10aW5mbyA9PSBOVUxMKQor CQlyZXR1cm4gc3ViX2ZtdDsKKworCWluaXRTdHJpbmdJbmZvKCZvYmplY3RfbmFtZSk7CisJZW5k X3B0ciA9IHN1Yl9mbXQgKyBzdHJsZW4oc3ViX2ZtdCk7CisKKwlmb3IgKGNwID0gc3ViX2ZtdDsg Y3AgPCBlbmRfcHRyOyBjcCsrKQorCXsKKwkJaWYgKCpjcCA9PSAneycpCisJCXsKKwkJCXN0YXJ0 X2NvcHkgPSB0cnVlOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXN0YXJ0X2NvcHkpCisJ CQljb250aW51ZTsKKworCQlpZiAoKmNwID09ICc6JyB8fCAqY3AgPT0gJ30nKQorCQkJYnJlYWs7 CisKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmb2JqZWN0X25hbWUsICpjcCk7CisJfQor CisJaWYgKG9iamVjdF9uYW1lLmxlbiA9PSAwKQorCQllbG9nKEVSUk9SLCAib2JqZWN0IG5hbWUg bm90IGZvdW5kIik7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKwor CXJldHVybiBvYmplY3RfbmFtZS5kYXRhOworfQorCisvKgorICogQXBwZW5kIGEgcHJlYWxsb2Nh dGVkIHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYXBwZW5k X3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9iakVsZW0gKmVsZW0pCit7CisJc2xpc3Rf cHVzaF9oZWFkKCZ0cmVlLT5wYXJhbXMsICZlbGVtLT5ub2RlKTsKKwl0cmVlLT5udW1QYXJhbXMr KzsKK30KKworLyoKKyAqIEFwcGVuZCBhIHN0cmluZyBwYXJhbWV0ZXIgdG8gYSB0cmVlLgorICov CitzdGF0aWMgdm9pZAorYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAq c3ViX2ZtdCwgY2hhciAqIG9iamVjdF9uYW1lLAorCQkJCQkgY2hhciAqdmFsdWUpCit7CisJT2Jq RWxlbSAgICAqcGFyYW07CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UgJiYg KHZhbHVlID09IE5VTEwgfHwgdmFsdWVbMF0gPT0gJ1wwJykpCisJCXJldHVybjsKKworCWFwcGVu ZF9mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCXBhcmFtID0gbmV3X29iamVjdChPYmpU eXBlU3RyaW5nLCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLnN0cmluZyA9IHZhbHVlOwor CWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBTaW1pbGFy IHRvIGZvcm1hdF90eXBlX2V4dGVuZGVkLCBleGNlcHQgd2UgcmV0dXJuIGVhY2ggYml0IG9mIGlu Zm9ybWF0aW9uCisgKiBzZXBhcmF0ZWx5OgorICoKKyAqIC0gbnNwaWQgaXMgdGhlIHNjaGVtYSBP SUQuICBGb3IgY2VydGFpbiBTUUwtc3RhbmRhcmQgdHlwZXMgd2hpY2ggaGF2ZSB3ZWlyZAorICog ICB0eXBtb2QgcnVsZXMsIHdlIHJldHVybiBJbnZhbGlkT2lkOyB0aGUgY2FsbGVyIGlzIGV4cGVj dGVkIHRvIG5vdCBzY2hlbWEtCisgKiAgIHF1YWxpZnkgdGhlIG5hbWUgbm9yIGFkZCBxdW90ZXMg dG8gdGhlIHR5cGUgbmFtZSBpbiB0aGlzIGNhc2UuCisgKgorICogLSB0eXBuYW1lIGlzIHNldCB0 byB0aGUgdHlwZSBuYW1lLCB3aXRob3V0IHF1b3RlcworICoKKyAqIC0gdHlwZW1vZHN0ciBpcyBz ZXQgdG8gdGhlIHR5cGVtb2QsIGlmIGFueSwgYXMgYSBzdHJpbmcgd2l0aCBwYXJlbnRoZXNlcwor ICoKKyAqIC0gdHlwYXJyYXkgaW5kaWNhdGVzIHdoZXRoZXIgW11zIG11c3QgYmUgYWRkZWQKKyAq CisgKiBXZSBkb24ndCB0cnkgdG8gZGVjb2RlIHR5cGUgbmFtZXMgdG8gdGhlaXIgc3RhbmRhcmQt bWFuZGF0ZWQgbmFtZXMsIGV4Y2VwdAorICogaW4gdGhlIGNhc2VzIG9mIHR5cGVzIHdpdGggdW51 c3VhbCB0eXBtb2QgcnVsZXMuCisgKi8KK3N0YXRpYyB2b2lkCitmb3JtYXRfdHlwZV9kZXRhaWxl ZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCisJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoq dHlwZW5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkgYm9vbCAqdHlwZWFycmF5KQorewor CUhlYXBUdXBsZQl0dXBsZTsKKwlGb3JtX3BnX3R5cGUgdHlwZWZvcm07CisJT2lkCQkJYXJyYXlf YmFzZV90eXBlOworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRH ZXREYXR1bSh0eXBlX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1IiwgdHlw ZV9vaWQpOworCisJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOwor CisJLyoKKwkgKiBDaGVjayBpZiBpdCdzIGEgcmVndWxhciAodmFyaWFibGUgbGVuZ3RoKSBhcnJh eSB0eXBlLiAgQXMgYWJvdmUsCisJICogZml4ZWQtbGVuZ3RoIGFycmF5IHR5cGVzIHN1Y2ggYXMg Im5hbWUiIHNob3VsZG4ndCBnZXQgZGVjb25zdHJ1Y3RlZC4KKwkgKi8KKwlhcnJheV9iYXNlX3R5 cGUgPSB0eXBlZm9ybS0+dHlwZWxlbTsKKworCSp0eXBlYXJyYXkgPSAoSXNUcnVlQXJyYXlUeXBl KHR5cGVmb3JtKSAmJiB0eXBlZm9ybS0+dHlwc3RvcmFnZSAhPSBUWVBTVE9SQUdFX1BMQUlOKTsK KworCWlmICgqdHlwZWFycmF5KQorCXsKKwkJLyogU3dpdGNoIG91ciBhdHRlbnRpb24gdG8gdGhl IGFycmF5IGVsZW1lbnQgdHlwZSAqLworCQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCQl0dXBs ZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKGFycmF5X2Jhc2Vf dHlwZSkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCB0eXBlX29pZCk7CisK KwkJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCQl0eXBlX29p ZCA9IGFycmF5X2Jhc2VfdHlwZTsKKwl9CisKKwkvKgorCSAqIFNwZWNpYWwtY2FzZSBjcm9jayBm b3IgdHlwZXMgd2l0aCBzdHJhbmdlIHR5cG1vZCBydWxlcyB3aGVyZSB3ZSBwdXQKKwkgKiB0eXBl bW9kIGF0IHRoZSBtaWRkbGUgb2YgbmFtZSAoZS5nLiBUSU1FKDYpIHdpdGggdGltZSB6b25lKS4g V2UgY2Fubm90CisJICogc2NoZW1hLXF1YWxpZnkgbm9yIGFkZCBxdW90ZXMgdG8gdGhlIHR5cGUg bmFtZSBpbiB0aGVzZSBjYXNlcy4KKwkgKi8KKwkqbnNwaWQgPSBJbnZhbGlkT2lkOworCisJc3dp dGNoICh0eXBlX29pZCkKKwl7CisJCWNhc2UgSU5URVJWQUxPSUQ6CisJCQkqdHlwZW5hbWUgPSBw c3RyZHVwKCJJTlRFUlZBTCIpOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVNUQU1QVFpPSUQ6CisJ CQlpZiAodHlwZW1vZCA8IDApCisJCQkJKnR5cGVuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIFdJ VEggVElNRSBaT05FIik7CisJCQllbHNlCisJCQkJLyogb3RoZXJ3aXNlLCBXSVRIIFRaIGlzIGFk ZGVkIGJ5IHR5cG1vZC4gKi8KKwkJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAiKTsK KwkJCWJyZWFrOworCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJCSp0eXBlbmFtZSA9IHBzdHJkdXAo IlRJTUVTVEFNUCIpOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVRaT0lEOgorCQkJaWYgKHR5cGVt b2QgPCAwKQorCQkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUUgV0lUSCBUSU1FIFpPTkUiKTsK KwkJCWVsc2UKKwkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFogaXMgYWRkZWQgYnkgdHlwbW9kLiAq LworCQkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCWJyZWFrOworCQljYXNlIFRJ TUVPSUQ6CisJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQlicmVhazsKKwkJZGVm YXVsdDoKKworCQkJLyoKKwkJCSAqIE5vIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBpcyByZXF1aXJl ZCBmb3Igb3RoZXIgdHlwZXMsIHNvIGdldAorCQkJICogdGhlIHR5cGUgbmFtZSBhbmQgc2NoZW1h IGRpcmVjdGx5IGZyb20gdGhlIGNhdGFsb2cuCisJCQkgKi8KKwkJCSpuc3BpZCA9IHR5cGVmb3Jt LT50eXBuYW1lc3BhY2U7CisJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKE5hbWVTdHIodHlwZWZvcm0t PnR5cG5hbWUpKTsKKwl9CisKKwlpZiAodHlwZW1vZCA+PSAwKQorCQkqdHlwZW1vZHN0ciA9IHBy aW50VHlwbW9kKCIiLCB0eXBlbW9kLCB0eXBlZm9ybS0+dHlwbW9kb3V0KTsKKwllbHNlCisJCSp0 eXBlbW9kc3RyID0gcHN0cmR1cCgiIik7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworfQor CisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiBhcmd1bWVudHMgdG8gYSBmdW5j dGlvbiwgYXMgYSBsaXN0IG9mCisgKiBkZXBhcnNlZCBleHByZXNzaW9ucy4KKyAqLworc3RhdGlj IExpc3QgKgorRnVuY3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0cykKK3sKKwlM aXN0CSAgICpub2RlZGVmczsKKwlMaXN0CSAgICpzdHJkZWZzID0gTklMOworCUxpc3RDZWxsICAg KmNlbGw7CisKKwlub2RlZGVmcyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZSh0ZXh0X3RvX2NzdHJp bmcocHJvYXJnZGVmYXVsdHMpKTsKKwlpZiAoIUlzQShub2RlZGVmcywgTGlzdCkpCisJCWVsb2co RVJST1IsICJwcm9hcmdkZWZhdWx0cyBpcyBub3QgYSBsaXN0Iik7CisKKwlmb3JlYWNoKGNlbGws IG5vZGVkZWZzKQorCXsKKwkJTm9kZQkgICAqb25lZGVmID0gbGZpcnN0KGNlbGwpOworCisJCXN0 cmRlZnMgPSBsYXBwZW5kKHN0cmRlZnMsIGRlcGFyc2VfZXhwcmVzc2lvbihvbmVkZWYsIE5JTCwg ZmFsc2UsIGZhbHNlKSk7CisJfQorCisJcmV0dXJuIHN0cmRlZnM7Cit9CisKKy8qCisgKiBSZXR1 cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUkVMUEVSU0lTVEVOQ0Ug dmFsdWUuCisgKi8KK3N0YXRpYyBjaGFyICoKK2dldF9wZXJzaXN0ZW5jZV9zdHIoY2hhciBwZXJz aXN0ZW5jZSkKK3sKKwlzd2l0Y2ggKHBlcnNpc3RlbmNlKQorCXsKKwkJY2FzZSBSRUxQRVJTSVNU RU5DRV9URU1QOgorCQkJcmV0dXJuICJURU1QT1JBUlkiOworCQljYXNlIFJFTFBFUlNJU1RFTkNF X1VOTE9HR0VEOgorCQkJcmV0dXJuICJVTkxPR0dFRCI7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0Vf UEVSTUFORU5UOgorCQkJcmV0dXJuICIiOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVu ZXhwZWN0ZWQgcGVyc2lzdGVuY2UgbWFya2luZyAlYyIsIHBlcnNpc3RlbmNlKTsKKwkJCXJldHVy biAiIjsJCQkvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisJfQorfQorCisvKgorICogUmV0dXJu IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIHN0b3JhZ2V0eXBlIHZhbHVl LgorICovCitzdGF0aWMgaW5saW5lIGNoYXIgKgorZ2V0X3R5cGVfc3RvcmFnZShjaGFyIHN0b3Jh Z2V0eXBlKQoreworCXN3aXRjaCAoc3RvcmFnZXR5cGUpCisJeworCQljYXNlICdwJzoKKwkJCXJl dHVybiAicGxhaW4iOworCQljYXNlICdlJzoKKwkJCXJldHVybiAiZXh0ZXJuYWwiOworCQljYXNl ICd4JzoKKwkJCXJldHVybiAiZXh0ZW5kZWQiOworCQljYXNlICdtJzoKKwkJCXJldHVybiAibWFp biI7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzdG9yYWdlIHNwZWNpZmll ciAlYyIsIHN0b3JhZ2V0eXBlKTsKKwl9Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBwYXJh bWV0ZXIuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBj aGFyICpuYW1lKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCisJcGFyYW0gPSBwYWxsb2MwKHNp emVvZihPYmpFbGVtKSk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCXBhcmFtLT5vYmp0eXBlID0g dHlwZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9iamVj dCBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmplY3Rfb2JqZWN0KE9i alRyZWUgKnZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCisJcGFyYW0gPSBuZXdfb2Jq ZWN0KE9ialR5cGVPYmplY3QsIE5VTEwpOworCXBhcmFtLT52YWx1ZS5vYmplY3QgPSB2YWx1ZTsK KworCXJldHVybiBwYXJhbTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9iamVjdCB0cmVl IHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19v Ymp0cmVlKGNoYXIgKmZtdCkKK3sKKwlPYmpUcmVlICAgICpwYXJhbXM7CisKKwlwYXJhbXMgPSBw YWxsb2MwKHNpemVvZihPYmpUcmVlKSk7CisJcGFyYW1zLT5wcmVzZW50ID0gdHJ1ZTsKKwlzbGlz dF9pbml0KCZwYXJhbXMtPnBhcmFtcyk7CisKKwlpZiAoZm10KQorCXsKKwkJcGFyYW1zLT5mbXRp bmZvID0gbWFrZVN0cmluZ0luZm8oKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhwYXJhbXMt PmZtdGluZm8sIGZtdCk7CisJfQorCisJcmV0dXJuIHBhcmFtczsKK30KKworLyoKKyAqIEEgaGVs cGVyIHJvdXRpbmUgdG8gc2V0IHVwICV7fUQgYW5kICV7fU8gZWxlbWVudHMuCisgKgorICogRWxl bWVudHMgInNjaGVtYV9uYW1lIiBhbmQgIm9ial9uYW1lIiBhcmUgc2V0LiAgSWYgdGhlIG5hbWVz cGFjZSBPSUQKKyAqIGNvcnJlc3BvbmRzIHRvIGEgdGVtcCBzY2hlbWEsIHRoYXQncyBzZXQgdG8g InBnX3RlbXAiLgorICoKKyAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhvc2UgdHdvIGVsZW1l bnQgdHlwZXMgaXMgd2hldGhlciB0aGUgb2JqX25hbWUgd2lsbAorICogYmUgcXVvdGVkIGFzIGFu IGlkZW50aWZpZXIgb3Igbm90LCB3aGljaCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgdGhpcyByb3V0 aW5lCisgKiBjb25jZXJucyBpdHNlbGYgd2l0aDsgdGhhdCB3aWxsIGJlIHVwIHRvIHRoZSBleHBh bmQgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShPaWQgbnNwaWQsIGNoYXIgKm5hbWUpCit7CisJT2JqVHJlZSAgICAqcXVhbGlmaWVkOwor CWNoYXIJICAgKm5hbWVzcGFjZTsKKworCWlmIChpc0FueVRlbXBOYW1lc3BhY2UobnNwaWQpKQor CQluYW1lc3BhY2UgPSBwc3RyZHVwKCJwZ190ZW1wIik7CisJZWxzZQorCQluYW1lc3BhY2UgPSBn ZXRfbmFtZXNwYWNlX25hbWUobnNwaWQpOworCisJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfVkEo TlVMTCwgMiwKKwkJCQkJCQkgICAic2NoZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWVzcGFj ZSwKKwkJCQkJCQkgICAib2JqbmFtZSIsIE9ialR5cGVTdHJpbmcsIHBzdHJkdXAobmFtZSkpOwor CisJcmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0 IHVwICV7fUQgYW5kICV7fU8gZWxlbWVudHMsIHdpdGggdGhlIG9iamVjdCBzcGVjaWZpZWQKKyAq IGJ5IGNsYXNzSWQvb2JqSWQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChPaWQgY2xhc3NJZCwgT2lkIG9iamVjdElkKQoreworCU9ialRyZWUgICAg KnF1YWxpZmllZDsKKwlSZWxhdGlvbgljYXRhbG9nOworCUhlYXBUdXBsZQljYXRvYmo7CisJRGF0 dW0JCW9ial9uc3A7CisJRGF0dW0JCW9ial9uYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lOwor CUF0dHJOdW1iZXIJQW51bV9uYW1lc3BhY2U7CisJQXR0ck51bWJlcglBbnVtX29pZCA9IGdldF9v YmplY3RfYXR0bnVtX29pZChjbGFzc0lkKTsKKwlib29sCQlpc251bGw7CisKKwljYXRhbG9nID0g dGFibGVfb3BlbihjbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJY2F0b2JqID0gZ2V0X2Nh dGFsb2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBBbnVtX29pZCwgb2JqZWN0SWQpOworCWlmICgh Y2F0b2JqKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb2JqZWN0IHdp dGggT0lEICV1IG9mIGNhdGFsb2cgXCIlc1wiIiwKKwkJCSBvYmplY3RJZCwgUmVsYXRpb25HZXRS ZWxhdGlvbk5hbWUoY2F0YWxvZykpOworCUFudW1fbmFtZSA9IGdldF9vYmplY3RfYXR0bnVtX25h bWUoY2xhc3NJZCk7CisJQW51bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lc3Bh Y2UoY2xhc3NJZCk7CisKKwlvYmpfbnNwID0gaGVhcF9nZXRhdHRyKGNhdG9iaiwgQW51bV9uYW1l c3BhY2UsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJCQkgICZpc251bGwpOworCWlm IChpc251bGwpCisJCWVsb2coRVJST1IsICJudWxsIG5hbWVzcGFjZSBmb3Igb2JqZWN0ICV1Iiwg b2JqZWN0SWQpOworCisJb2JqX25hbWUgPSBoZWFwX2dldGF0dHIoY2F0b2JqLCBBbnVtX25hbWUs IFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJCQkgICAmaXNudWxsKTsKKwlpZiAoaXNu dWxsKQorCQllbG9nKEVSUk9SLCAibnVsbCBhdHRyaWJ1dGUgbmFtZSBmb3Igb2JqZWN0ICV1Iiwg b2JqZWN0SWQpOworCisJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKERhdHVt R2V0T2JqZWN0SWQob2JqX25zcCksCisJCQkJCQkJCQkJIE5hbWVTdHIoKkRhdHVtR2V0TmFtZShv YmpfbmFtZSkpKTsKKwl0YWJsZV9jbG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFyZUxvY2spOworCisJ cmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIEhlbHBlciByb3V0aW5lIGZvciAle31SIG9i amVjdHMsIHdpdGggcm9sZSBzcGVjaWZpZWQgYnkgUm9sZVNwZWMgbm9kZS4KKyAqIFNwZWNpYWwg dmFsdWVzIHN1Y2ggYXMgUk9MRVNQRUNfQ1VSUkVOVF9VU0VSIGFyZSBleHBhbmRlZCB0byB0aGVp ciBmaW5hbAorICogbmFtZXMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zv cl9yb2xlc3BlYyhSb2xlU3BlYyAqc3BlYykKK3sKKwljaGFyCSAgICpyb2xldHlwZTsKKworCWlm IChzcGVjLT5yb2xldHlwZSAhPSBST0xFU1BFQ19QVUJMSUMpCisJCXJvbGV0eXBlID0gZ2V0X3Jv bGVzcGVjX25hbWUoc3BlYyk7CisJZWxzZQorCQlyb2xldHlwZSA9IHBzdHJkdXAoIiIpOworCisJ cmV0dXJuIG5ld19vYmp0cmVlX1ZBKE5VTEwsIDIsCisJCQkJCQkgICJpc19wdWJsaWMiLCBPYmpU eXBlQm9vbCwgc3BlYy0+cm9sZXR5cGUgPT0gUk9MRVNQRUNfUFVCTElDLAorCQkJCQkJICAicm9s ZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCByb2xldHlwZSk7Cit9CisKKy8qCisgKiBIZWxwZXIgcm91 dGluZSBmb3IgJXt9UiBvYmplY3RzLCB3aXRoIHJvbGUgc3BlY2lmaWVkIGJ5IE9JRC4gKEFDTF9J RF9QVUJMSUMKKyAqIG1lYW5zIHRvIHVzZSAicHVibGljIikuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK25ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKE9pZCByb2xlb2lkKQoreworCU9ialRyZWUgICAg KnJvbGU7CisKKwlpZiAocm9sZW9pZCAhPSBBQ0xfSURfUFVCTElDKQorCXsKKwkJSGVhcFR1cGxl CXJvbHR1cDsKKwkJY2hhcgkgICAqcm9sZV9uYW1lOworCisJCXJvbHR1cCA9IFNlYXJjaFN5c0Nh Y2hlMShBVVRIT0lELCBPYmplY3RJZEdldERhdHVtKHJvbGVvaWQpKTsKKwkJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHJvbHR1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3Igcm9sZSB3aXRoIE9JRCAldSIsIHJvbGVvaWQpOworCisJCXJvbGVfbmFtZSA9IE5hbWVTdHIo KChGb3JtX3BnX2F1dGhpZCkgR0VUU1RSVUNUKHJvbHR1cCkpLT5yb2xuYW1lKTsKKwkJcm9sZSA9 IG5ld19vYmp0cmVlX1ZBKCIle3JvbGVuYW1lfUkiLCAxLAorCQkJCQkJCSAgInJvbGVuYW1lIiwg T2JqVHlwZVN0cmluZywgcHN0cmR1cChyb2xlX25hbWUpKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUo cm9sdHVwKTsKKwl9CisJZWxzZQorCQlyb2xlID0gbmV3X29ianRyZWVfVkEoIiV7cm9sZW5hbWV9 SSIsIDEsCisJCQkJCQkJICAicm9sZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCAicHVibGljIik7CisK KwlyZXR1cm4gcm9sZTsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9 VCBlbGVtZW50cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3R5cGUo T2lkIHR5cGVJZCwgaW50MzIgdHlwbW9kKQoreworCU9pZAkJCXR5cG5zcGlkOworCWNoYXIJICAg KnR5cGVfbnNwOworCWNoYXIJICAgKnR5cGVfbmFtZSA9IE5VTEw7CisJY2hhcgkgICAqdHlwbW9k c3RyOworCWJvb2wJCXR5cGVfYXJyYXk7CisKKwlmb3JtYXRfdHlwZV9kZXRhaWxlZCh0eXBlSWQs IHR5cG1vZCwKKwkJCQkJCSAmdHlwbnNwaWQsICZ0eXBlX25hbWUsICZ0eXBtb2RzdHIsICZ0eXBl X2FycmF5KTsKKworCWlmIChPaWRJc1ZhbGlkKHR5cG5zcGlkKSkKKwkJdHlwZV9uc3AgPSBnZXRf bmFtZXNwYWNlX25hbWVfb3JfdGVtcCh0eXBuc3BpZCk7CisJZWxzZQorCQl0eXBlX25zcCA9IHBz dHJkdXAoIiIpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKE5VTEwsIDQsCisJCQkJCQkgICJz Y2hlbWFuYW1lIiwgT2JqVHlwZVN0cmluZywgdHlwZV9uc3AsCisJCQkJCQkgICJ0eXBlbmFtZSIs IE9ialR5cGVTdHJpbmcsIHR5cGVfbmFtZSwKKwkJCQkJCSAgInR5cG1vZCIsIE9ialR5cGVTdHJp bmcsIHR5cG1vZHN0ciwKKwkJCQkJCSAgInR5cGFycmF5IiwgT2JqVHlwZUJvb2wsIHR5cGVfYXJy YXkpOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHRyZWUgdG8gc3RvcmUgcGFy YW1ldGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZlcnNpb24uCisgKgorICogVGhlICJmbXQiIGFyZ3Vt ZW50IGlzIHVzZWQgdG8gYXBwZW5kIGFzIGEgImZtdCIgZWxlbWVudCBpbiB0aGUgb3V0cHV0IGJs b2IuCisgKiBudW1vYmpzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGV4dHJhIGVsZW1lbnRzIHRv IGFwcGVuZDsgZm9yIGVhY2ggb25lLCBhCisgKiBuYW1lIChzdHJpbmcpLCB0eXBlIChmcm9tIHRo ZSBPYmpUeXBlIGVudW0pIGFuZCB2YWx1ZSBtdXN0IGJlIHN1cHBsaWVkLiAgVGhlCisgKiB2YWx1 ZSBtdXN0IG1hdGNoIHRoZSB0eXBlIGdpdmVuOyBmb3IgaW5zdGFuY2UsIE9ialR5cGVJbnRlZ2Vy IHJlcXVpcmVzIGFuCisgKiBpbnQ2NCwgT2JqVHlwZVN0cmluZyByZXF1aXJlcyBhIGNoYXIgKiwg T2JqVHlwZUFycmF5IHJlcXVpcmVzIGEgbGlzdCAob2YKKyAqIE9iakVsZW0pLCBPYmpUeXBlT2Jq ZWN0IHJlcXVpcmVzIGFuIE9ialRyZWUsIGFuZCBzbyBvbi4gIEVhY2ggZWxlbWVudCB0eXBlICoK KyAqIG11c3QgbWF0Y2ggdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVyIGdpdmVuIGluIHRoZSBmb3Jt YXQgc3RyaW5nLCBhcyBkZXNjcmliZWQKKyAqIGluIGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5k LCBxLnYuCisgKgorICogTm90ZSB3ZSBkb24ndCBoYXZlIHRoZSBsdXh1cnkgb2Ygc3ByaW50Zi1s aWtlIGNvbXBpbGVyIHdhcm5pbmdzIGZvcgorICogbWFsZm9ybWVkIGFyZ3VtZW50IGxpc3RzLgor ICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1v YmpzLC4uLikKK3sKKwlPYmpUcmVlICAgICp0cmVlOworCXZhX2xpc3QJCWFyZ3M7CisJaW50CQkJ aTsKKworCS8qIFNldCB1cCB0aGUgdG9wbGV2ZWwgb2JqZWN0IGFuZCBpdHMgImZtdCIgKi8KKwl0 cmVlID0gbmV3X29ianRyZWUoZm10KTsKKworCS8qIEFuZCBwcm9jZXNzIHRoZSBnaXZlbiB2YXJh cmdzICovCisJdmFfc3RhcnQoYXJncywgbnVtb2Jqcyk7CisJZm9yIChpID0gMDsgaSA8IG51bW9i anM7IGkrKykKKwl7CisJCWNoYXIJICAgKm5hbWU7CisJCU9ialR5cGUJCXR5cGU7CisJCU9iakVs ZW0gICAgKmVsZW07CisKKwkJbmFtZSA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQl0eXBlID0g dmFfYXJnKGFyZ3MsIE9ialR5cGUpOworCQllbGVtID0gbmV3X29iamVjdCh0eXBlLCBOVUxMKTsK KworCQkvKgorCQkgKiBGb3IgYWxsIHBhcmFtIHR5cGVzIG90aGVyIHRoYW4gT2JqVHlwZU51bGws IHRoZXJlIG11c3QgYmUgYSB2YWx1ZSBpbgorCQkgKiB0aGUgdmFyYXJncy4gRmV0Y2ggaXQgYW5k IGFkZCB0aGUgZnVsbHkgZm9ybWVkIHN1Ym9iamVjdCBpbnRvIHRoZQorCQkgKiBtYWluIG9iamVj dC4KKwkJICovCisJCXN3aXRjaCAodHlwZSkKKwkJeworCQkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJ CQkvKiBOdWxsIHBhcmFtcyBkb24ndCBoYXZlIGEgdmFsdWUgKG9idmlvdXNseSkgKi8KKwkJCQli cmVhazsKKwkJCWNhc2UgT2JqVHlwZUJvb2w6CisJCQkJZWxlbS0+dmFsdWUuYm9vbGVhbiA9IHZh X2FyZyhhcmdzLCBpbnQpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlU3RyaW5nOgorCQkJ CWVsZW0tPnZhbHVlLnN0cmluZyA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQkJCWJyZWFrOwor CQkJY2FzZSBPYmpUeXBlQXJyYXk6CisJCQkJZWxlbS0+dmFsdWUuYXJyYXkgPSB2YV9hcmcoYXJn cywgTGlzdCAqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQkJZWxl bS0+dmFsdWUuaW50ZWdlciA9IHZhX2FyZyhhcmdzLCBpbnQpOworCQkJCWJyZWFrOworCQkJY2Fz ZSBPYmpUeXBlRmxvYXQ6CisJCQkJZWxlbS0+dmFsdWUuZmx0ID0gdmFfYXJnKGFyZ3MsIGRvdWJs ZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkJZWxlbS0+dmFsdWUu b2JqZWN0ID0gdmFfYXJnKGFyZ3MsIE9ialRyZWUgKik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0 OgorCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9ialRyZWUgZWxlbWVudCB0eXBlICVkIiwgdHlw ZSk7CisJCX0KKworCQllbGVtLT5uYW1lID0gbmFtZTsKKwkJYXBwZW5kX3ByZW1hZGVfb2JqZWN0 KHRyZWUsIGVsZW0pOworCX0KKworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gdHJlZTsKK30KKwor LyoKKyAqIEFsbG9jYXRlIGEgbmV3IHN0cmluZyBvYmplY3QuCisgKi8KK3N0YXRpYyBPYmpFbGVt ICoKK25ld19zdHJpbmdfb2JqZWN0KGNoYXIgKnZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFt OworCisJQXNzZXJ0KHZhbHVlKTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5n LCBOVUxMKTsKKwlwYXJhbS0+dmFsdWUuc3RyaW5nID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07 Cit9CisKKy8qCisgKiBQcm9jZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyBmcm9tIHRo ZSBPYmpUcmVlIGludG8gdGhlIG91dHB1dCBwYXJzZQorICogc3RhdGUuCisgKi8KK3N0YXRpYyB2 b2lkCitvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUs IE9ialRyZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZQl2YWw7CisK KwlpZiAodHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBQdXNoIHRoZSBr ZXkgZmlyc3QgKi8KKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwg PSAiZm10IjsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5LnZhbC5zdHJpbmcudmFs KTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9LRVksICZrZXkpOworCisJLyogVGhlbiBw cm9jZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyAqLworCXZhbC50eXBlID0gamJ2U3Ry aW5nOworCXZhbC52YWwuc3RyaW5nLmxlbiA9IHRyZWUtPmZtdGluZm8tPmxlbjsKKwl2YWwudmFs LnN0cmluZy52YWwgPSB0cmVlLT5mbXRpbmZvLT5kYXRhOworCXB1c2hKc29uYlZhbHVlKCZzdGF0 ZSwgV0pCX1ZBTFVFLCAmdmFsKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIEpTT05CIHJlcHJlc2Vu dGF0aW9uIGZyb20gYW4gT2JqVHJlZS4KKyAqLworc3RhdGljIEpzb25iICoKK29ianRyZWVfdG9f anNvbmIoT2JqVHJlZSAqdHJlZSkKK3sKKwlKc29uYlZhbHVlICp2YWx1ZTsKKworCXZhbHVlID0g b2JqdHJlZV90b19qc29uYl9yZWModHJlZSwgTlVMTCk7CisJcmV0dXJuIEpzb25iVmFsdWVUb0pz b25iKHZhbHVlKTsKK30KKworLyoKKyAqIEhlbHBlciBmb3Igb2JqdHJlZV90b19qc29uYjogcHJv Y2VzcyBhbiBpbmRpdmlkdWFsIGVsZW1lbnQgZnJvbSBhbiBvYmplY3Qgb3IKKyAqIGFuIGFycmF5 IGludG8gdGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK29ianRyZWVf dG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBPYmpFbGVtICpvYmplY3Qs CisJCQkJCQkgSnNvbmJJdGVyYXRvclRva2VuIGVsZW1fdG9rZW4pCit7CisJSnNvbmJWYWx1ZQl2 YWw7CisKKwlzd2l0Y2ggKG9iamVjdC0+b2JqdHlwZSkKKwl7CisJCWNhc2UgT2JqVHlwZU51bGw6 CisJCQl2YWwudHlwZSA9IGpidk51bGw7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1f dG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlU3RyaW5nOgorCQkJdmFs LnR5cGUgPSBqYnZTdHJpbmc7CisJCQl2YWwudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ob2JqZWN0 LT52YWx1ZS5zdHJpbmcpOworCQkJdmFsLnZhbC5zdHJpbmcudmFsID0gb2JqZWN0LT52YWx1ZS5z dHJpbmc7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJCXZhbC50eXBlID0gamJ2TnVtZXJp YzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQorCQkJCURhdHVtR2V0TnVtZXJpYyhE aXJlY3RGdW5jdGlvbkNhbGwxKGludDhfbnVtZXJpYywKKwkJCQkJCQkJCQkJCQlvYmplY3QtPnZh bHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZh bCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVGbG9hdDoKKwkJCXZhbC50eXBlID0gamJ2 TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQorCQkJCURhdHVtR2V0TnVt ZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGZsb2F0OF9udW1lcmljLAorCQkJCQkJCQkJCQkJCW9i amVjdC0+dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rv a2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUJvb2w6CisJCQl2YWwudHlw ZSA9IGpidkJvb2w7CisJCQl2YWwudmFsLmJvb2xlYW4gPSBvYmplY3QtPnZhbHVlLmJvb2xlYW47 CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBPYmpUeXBlT2JqZWN0OgorCQkJLyogUmVjdXJzaXZlbHkgYWRkIHRoZSBvYmpl Y3QgaW50byB0aGUgZXhpc3RpbmcgcGFyc2Ugc3RhdGUgKi8KKwkJCW9ianRyZWVfdG9fanNvbmJf cmVjKG9iamVjdC0+dmFsdWUub2JqZWN0LCBzdGF0ZSk7CisJCQlicmVhazsKKworCQljYXNlIE9i alR5cGVBcnJheToKKwkJCXsKKwkJCQlMaXN0Q2VsbCAgICpjZWxsOworCisJCQkJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fQVJSQVksIE5VTEwpOworCQkJCWZvcmVhY2goY2VsbCwg b2JqZWN0LT52YWx1ZS5hcnJheSkKKwkJCQl7CisJCQkJCU9iakVsZW0gICAgKmVsZW0gPSBsZmly c3QoY2VsbCk7CisKKwkJCQkJb2JqdHJlZV90b19qc29uYl9lbGVtZW50KHN0YXRlLCBlbGVtLCBX SkJfRUxFTSk7CisJCQkJfQorCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9BUlJB WSwgTlVMTCk7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwg InVucmVjb2duaXplZCBvYmplY3QgdHlwZSAlZCIsIG9iamVjdC0+b2JqdHlwZSk7CisJCQlicmVh azsKKwl9Cit9CisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBvYmp0cmVlX3RvX2pzb25i LgorICovCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitvYmp0cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVl ICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKQoreworCXNsaXN0X2l0ZXIJaXRlcjsKKwor CXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisKKwlvYmp0 cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KHN0YXRlLCB0cmVlKTsKKworCXNsaXN0X2ZvcmVhY2go aXRlciwgJnRyZWUtPnBhcmFtcykKKwl7CisJCU9iakVsZW0gICAgKm9iamVjdCA9IHNsaXN0X2Nv bnRhaW5lcihPYmpFbGVtLCBub2RlLCBpdGVyLmN1cik7CisJCUpzb25iVmFsdWUJa2V5OworCisJ CS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCQlrZXkudHlwZSA9IGpidlN0cmluZzsKKwkJa2V5 LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKG9iamVjdC0+bmFtZSk7CisJCWtleS52YWwuc3RyaW5n LnZhbCA9IG9iamVjdC0+bmFtZTsKKwkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAm a2V5KTsKKworCQkvKiBUaGVuIHByb2Nlc3MgdGhlIHZhbHVlIGFjY29yZGluZyB0byBpdHMgdHlw ZSAqLworCQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIG9iamVjdCwgV0pCX1ZBTFVF KTsKKwl9CisKKwlyZXR1cm4gcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwg TlVMTCk7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUvQ1JFQVRFIERP TUFJTiBkZXBhcnNpbmcuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQgb3IgZG9tYWluIE9JRCwg b2J0YWluIGl0cyBjb25zdHJhaW50cyBhbmQgYXBwZW5kIHRoZW0gdG8KKyAqIHRoZSBnaXZlbiBl bGVtZW50cyBsaXN0LiAgVGhlIHVwZGF0ZWQgbGlzdCBpcyByZXR1cm5lZC4KKyAqCisgKiBUaGlz IHdvcmtzIGZvciB0eXBlZCB0YWJsZXMsIHJlZ3VsYXIgdGFibGVzLCBhbmQgZG9tYWlucy4KKyAq CisgKiBOb3RlIHRoYXQgQ09OU1RSQUlOVF9GT1JFSUdOIGNvbnN0cmFpbnRzIGFyZSBhbHdheXMg aWdub3JlZC4KKyAqLworc3RhdGljIExpc3QgKgorb2J0YWluQ29uc3RyYWludHMoTGlzdCAqZWxl bWVudHMsIE9pZCByZWxhdGlvbklkLCBPaWQgZG9tYWluSWQpCit7CisJUmVsYXRpb24JY29uUmVs OworCVNjYW5LZXlEYXRhIGtleTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXBs ZTsKKwlPYmpUcmVlICAgICpjb25zdHI7CisKKwkvKiBPbmx5IG9uZSBtYXkgYmUgdmFsaWQgKi8K KwlBc3NlcnQoT2lkSXNWYWxpZChyZWxhdGlvbklkKSBeIE9pZElzVmFsaWQoZG9tYWluSWQpKTsK KworCS8qCisJICogU2NhbiBwZ19jb25zdHJhaW50IHRvIGZldGNoIGFsbCBjb25zdHJhaW50cyBs aW5rZWQgdG8gdGhlIGdpdmVuCisJICogcmVsYXRpb24uCisJICovCisJY29uUmVsID0gdGFibGVf b3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlpZiAoT2lkSXNW YWxpZChyZWxhdGlvbklkKSkKKwl7CisJCVNjYW5LZXlJbml0KCZrZXksCisJCQkJCUFudW1fcGdf Y29uc3RyYWludF9jb25yZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVR LAorCQkJCQlPYmplY3RJZEdldERhdHVtKHJlbGF0aW9uSWQpKTsKKwkJc2NhbiA9IHN5c3RhYmxl X2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFtZUluZGV4SWQsCisJCQkJ CQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQorCWVsc2UKKwl7CisJCVNjYW5LZXlJbml0 KCZrZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb250eXBpZCwKKwkJCQkJQlRFcXVhbFN0 cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKGRvbWFpbklkKSk7 CisJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50VHlwaWRJbmRl eElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKworCS8qCisJICogRm9y IGVhY2ggY29uc3RyYWludCwgYWRkIGEgbm9kZSB0byB0aGUgbGlzdCBvZiB0YWJsZSBlbGVtZW50 cy4gIEluCisJICogdGhlc2Ugbm9kZXMgd2UgaW5jbHVkZSBub3Qgb25seSB0aGUgcHJpbnRhYmxl IGluZm9ybWF0aW9uICgiZm10IiksIGJ1dAorCSAqIGFsc28gc2VwYXJhdGUgYXR0cmlidXRlcyB0 byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBjb25zdHJhaW50LCBmb3IKKwkgKiBhdXRvbWF0aWMgcHJv Y2Vzc2luZy4KKwkgKi8KKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxl X2dldG5leHQoc2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbnN0ckZvcm07CisJ CWNoYXIJICAgKmNvbnR5cGU7CisKKwkJY29uc3RyRm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQp IEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJc3dpdGNoIChjb25zdHJGb3JtLT5jb250eXBlKQorCQl7 CisJCQljYXNlIENPTlNUUkFJTlRfQ0hFQ0s6CisJCQkJY29udHlwZSA9ICJjaGVjayI7CisJCQkJ YnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfRk9SRUlHTjoKKwkJCQljb250aW51ZTsJCS8qIG5v dCBoZXJlICovCisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQljb250eXBlID0gInBy aW1hcnkga2V5IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9VTklRVUU6CisJCQkJ Y29udHlwZSA9ICJ1bmlxdWUiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1RSSUdH RVI6CisJCQkJY29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RS QUlOVF9FWENMVVNJT046CisJCQkJY29udHlwZSA9ICJleGNsdXNpb24iOworCQkJCWJyZWFrOwor CQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0cmFpbnQgdHlw ZSIpOworCQl9CisKKwkJLyoKKwkJICogInR5cGUiIGFuZCAiY29udHlwZSIgYXJlIG5vdCBwYXJ0 IG9mIHRoZSBwcmludGFibGUgb3V0cHV0LCBidXQgYXJlCisJCSAqIHVzZWZ1bCB0byBwcm9ncmFt bWF0aWNhbGx5IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gY29sdW1ucyBhbmQgYW1vbmcKKwkJICog ZGlmZmVyZW50IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAqCisJCSAqIFhYWCBpdCBtaWdodCBiZSB1 c2VmdWwgdG8gYWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQSywgZXRjLgorCQkgKi8K KwkJY29uc3RyID0gbmV3X29ianRyZWVfVkEoIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0 aW9ufXMiLCA0LAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb25zdHJhaW50IiwK KwkJCQkJCQkJImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250eXBlLAorCQkJCQkJCQkibmFt ZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9ybS0+Y29ubmFtZSksCisJCQkJCQkJ CSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJcGdfZ2V0X2NvbnN0cmFpbnRk ZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyRm9ybS0+b2lkKSk7CisJCWVsZW1lbnRzID0gbGFwcGVu ZChlbGVtZW50cywgbmV3X29iamVjdF9vYmplY3QoY29uc3RyKSk7CisJfQorCisJc3lzdGFibGVf ZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwlyZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBSZXR1cm4gYW4gaW5kZXggZGVmaW5pdGlv biwgc3BsaXQgaW50byBzZXZlcmFsIHBpZWNlcy4KKyAqCisgKiBBIGxhcmdlIGFtb3VudCBvZiBj b2RlIGlzIGR1cGxpY2F0ZWQgZnJvbSAgcGdfZ2V0X2luZGV4ZGVmX3dvcmtlciwgYnV0CisgKiBj b250cm9sIGZsb3cgaXMgZGlmZmVyZW50IGVub3VnaCB0aGF0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0 aCBrZWVwaW5nIHRoZW0KKyAqIHRvZ2V0aGVyLgorICovCitzdGF0aWMgdm9pZAorcGdfZ2V0X2lu ZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJlbGlkLAorCQkJCQkJIGNoYXIgKippbmRleF9hbSwK KwkJCQkJCSBjaGFyICoqZGVmaW5pdGlvbiwKKwkJCQkJCSBjaGFyICoqcmVsb3B0aW9ucywKKwkJ CQkJCSBjaGFyICoqdGFibGVzcGFjZSwKKwkJCQkJCSBjaGFyICoqd2hlcmVDbGF1c2UpCit7CisJ SGVhcFR1cGxlCWh0X2lkeDsKKwlIZWFwVHVwbGUJaHRfaWR4cmVsOworCUhlYXBUdXBsZQlodF9h bTsKKwlGb3JtX3BnX2luZGV4IGlkeHJlYzsKKwlGb3JtX3BnX2NsYXNzIGlkeHJlbHJlYzsKKwlG b3JtX3BnX2FtCWFtcmVjOworCUluZGV4QW1Sb3V0aW5lICphbXJvdXRpbmU7CisJTGlzdAkgICAq aW5kZXhwcnM7CisJTGlzdENlbGwgICAqaW5kZXhwcl9pdGVtOworCUxpc3QJICAgKmNvbnRleHQ7 CisJT2lkCQkJaW5kcmVsaWQ7CisJaW50CQkJa2V5bm87CisJRGF0dW0JCWluZGNvbGxEYXR1bTsK KwlEYXR1bQkJaW5kY2xhc3NEYXR1bTsKKwlEYXR1bQkJaW5kb3B0aW9uRGF0dW07CisJYm9vbAkJ aXNudWxsOworCW9pZHZlY3RvciAgKmluZGNvbGxhdGlvbjsKKwlvaWR2ZWN0b3IgICppbmRjbGFz czsKKwlpbnQydmVjdG9yICppbmRvcHRpb247CisJU3RyaW5nSW5mb0RhdGEgZGVmaW5pdGlvbkJ1 ZjsKKworCSp0YWJsZXNwYWNlID0gTlVMTDsKKwkqd2hlcmVDbGF1c2UgPSBOVUxMOworCisJLyog RmV0Y2ggdGhlIHBnX2luZGV4IHR1cGxlIGJ5IHRoZSBPaWQgb2YgdGhlIGluZGV4ICovCisJaHRf aWR4ID0gU2VhcmNoU3lzQ2FjaGUxKElOREVYUkVMSUQsIE9iamVjdElkR2V0RGF0dW0oaW5kZXhy ZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9pZHgpKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgaW5kZXggd2l0aCBPSUQgJXUiLCBpbmRleHJlbGlkKTsK KwlpZHhyZWMgPSAoRm9ybV9wZ19pbmRleCkgR0VUU1RSVUNUKGh0X2lkeCk7CisKKwlpbmRyZWxp ZCA9IGlkeHJlYy0+aW5kcmVsaWQ7CisJQXNzZXJ0KGluZGV4cmVsaWQgPT0gaWR4cmVjLT5pbmRl eHJlbGlkKTsKKworCS8qIE11c3QgZ2V0IGluZGNvbGxhdGlvbiwgaW5kY2xhc3MsIGFuZCBpbmRv cHRpb24gdGhlIGhhcmQgd2F5ICovCisJaW5kY29sbERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElO REVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJICAgQW51bV9wZ19pbmRleF9pbmRjb2xsYXRpb24s ICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRjb2xsYXRpb24gPSAob2lkdmVjdG9y ICopIERhdHVtR2V0UG9pbnRlcihpbmRjb2xsRGF0dW0pOworCisJaW5kY2xhc3NEYXR1bSA9IFN5 c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQlBbnVtX3BnX2luZGV4 X2luZGNsYXNzLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY2xhc3MgPSAob2lk dmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjbGFzc0RhdHVtKTsKKworCWluZG9wdGlvbkRh dHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCSBBbnVt X3BnX2luZGV4X2luZG9wdGlvbiwgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZG9w dGlvbiA9IChpbnQydmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRvcHRpb25EYXR1bSk7CisK KwkvKiBGZXRjaCB0aGUgcGdfY2xhc3MgdHVwbGUgb2YgdGhlIGluZGV4IHJlbGF0aW9uICovCisJ aHRfaWR4cmVsID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bShpbmRl eHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2lkeHJlbCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiB3aXRoIE9JRCAldSIsIGluZGV4 cmVsaWQpOworCWlkeHJlbHJlYyA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1QoaHRfaWR4cmVs KTsKKworCS8qIEZldGNoIHRoZSBwZ19hbSB0dXBsZSBvZiB0aGUgaW5kZXgnIGFjY2VzcyBtZXRo b2QgKi8KKwlodF9hbSA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRHZXREYXR1bShp ZHhyZWxyZWMtPnJlbGFtKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2FtKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBtZXRob2Qgd2l0aCBPSUQg JXUiLAorCQkJIGlkeHJlbHJlYy0+cmVsYW0pOworCWFtcmVjID0gKEZvcm1fcGdfYW0pIEdFVFNU UlVDVChodF9hbSk7CisKKwkvKgorCSAqIEdldCB0aGUgaW5kZXggZXhwcmVzc2lvbnMsIGlmIGFu eS4gIChOT1RFOiB3ZSBkbyBub3QgdXNlIHRoZSByZWxjYWNoZQorCSAqIHZlcnNpb25zIG9mIHRo ZSBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlLCBiZWNhdXNlIHdlIHdhbnQgdG8gZGlzcGxheQor CSAqIG5vbi1jb25zdC1mb2xkZWQgZXhwcmVzc2lvbnMuKQorCSAqLworCWlmICghaGVhcF9hdHRp c251bGwoaHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCBOVUxMKSkKKwl7CisJCURhdHVt CQlleHByc0RhdHVtOworCQljaGFyCSAgICpleHByc1N0cmluZzsKKworCQlleHByc0RhdHVtID0g U3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCSBBbnVtX3BnX2lu ZGV4X2luZGV4cHJzLCAmaXNudWxsKTsKKwkJQXNzZXJ0KCFpc251bGwpOworCQlleHByc1N0cmlu ZyA9IFRleHREYXR1bUdldENTdHJpbmcoZXhwcnNEYXR1bSk7CisJCWluZGV4cHJzID0gKExpc3Qg Kikgc3RyaW5nVG9Ob2RlKGV4cHJzU3RyaW5nKTsKKwkJcGZyZWUoZXhwcnNTdHJpbmcpOworCX0K KwllbHNlCisJCWluZGV4cHJzID0gTklMOworCisJaW5kZXhwcl9pdGVtID0gbGlzdF9oZWFkKGlu ZGV4cHJzKTsKKworCWNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKGdldF9yZWxfbmFtZShp bmRyZWxpZCksIGluZHJlbGlkKTsKKworCWluaXRTdHJpbmdJbmZvKCZkZWZpbml0aW9uQnVmKTsK KworCS8qIE91dHB1dCBpbmRleCBBTSAqLworCSppbmRleF9hbSA9IHBzdHJkdXAocXVvdGVfaWRl bnRpZmllcihOYW1lU3RyKGFtcmVjLT5hbW5hbWUpKSk7CisKKwkvKiBGZXRjaCB0aGUgaW5kZXgg QU0ncyBBUEkgc3RydWN0ICovCisJYW1yb3V0aW5lID0gR2V0SW5kZXhBbVJvdXRpbmUoYW1yZWMt PmFtaGFuZGxlcik7CisKKwkvKgorCSAqIE91dHB1dCBpbmRleCBkZWZpbml0aW9uLiAgTm90ZSB0 aGUgb3V0ZXIgcGFyZW5zIG11c3QgYmUgc3VwcGxpZWQgYnkKKwkgKiBjYWxsZXIuCisJICovCisJ Zm9yIChrZXlubyA9IDA7IGtleW5vIDwgaWR4cmVjLT5pbmRuYXR0czsga2V5bm8rKykKKwl7CisJ CUF0dHJOdW1iZXIJYXR0bnVtID0gaWR4cmVjLT5pbmRrZXkudmFsdWVzW2tleW5vXTsKKwkJaW50 MTYJCW9wdCA9IGluZG9wdGlvbi0+dmFsdWVzW2tleW5vXTsKKwkJT2lkCQkJa2V5Y29sdHlwZTsK KwkJT2lkCQkJa2V5Y29sY29sbGF0aW9uOworCQlPaWQJCQlpbmRjb2xsOworCisJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIGtleW5vID09IDAgPyAiIiA6ICIsICIpOwor CisJCWlmIChhdHRudW0gIT0gMCkKKwkJeworCQkJLyogU2ltcGxlIGluZGV4IGNvbHVtbiAqLwor CQkJY2hhcgkgICAqYXR0bmFtZTsKKwkJCWludDMyCQlrZXljb2x0eXBtb2Q7CisKKwkJCWF0dG5h bWUgPSBnZXRfYXR0bmFtZShpbmRyZWxpZCwgYXR0bnVtLCBmYWxzZSk7CisJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCBxdW90ZV9pZGVudGlmaWVyKGF0dG5hbWUpKTsK KwkJCWdldF9hdHR0eXBldHlwbW9kY29sbChpbmRyZWxpZCwgYXR0bnVtLAorCQkJCQkJCQkgICZr ZXljb2x0eXBlLCAma2V5Y29sdHlwbW9kLAorCQkJCQkJCQkgICZrZXljb2xjb2xsYXRpb24pOwor CQl9CisJCWVsc2UKKwkJeworCQkJLyogRXhwcmVzc2lvbmFsIGluZGV4ICovCisJCQlOb2RlCSAg ICppbmRleGtleTsKKwkJCWNoYXIJICAgKnN0cjsKKworCQkJaWYgKGluZGV4cHJfaXRlbSA9PSBO VUxMKQorCQkJCWVsb2coRVJST1IsICJ0b28gZmV3IGVudHJpZXMgaW4gaW5kZXhwcnMgbGlzdCIp OworCQkJaW5kZXhrZXkgPSAoTm9kZSAqKSBsZmlyc3QoaW5kZXhwcl9pdGVtKTsKKwkJCWluZGV4 cHJfaXRlbSA9IGxuZXh0KGluZGV4cHJzLCBpbmRleHByX2l0ZW0pOworCisJCQkvKiBEZXBhcnNl ICovCisJCQlzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oaW5kZXhrZXksIGNvbnRleHQsIGZhbHNl LCBmYWxzZSk7CisKKwkJCS8qIE5lZWQgcGFyZW5zIGlmIGl0J3Mgbm90IGEgYmFyZSBmdW5jdGlv biBjYWxsICovCisJCQlpZiAoaW5kZXhrZXkgJiYgSXNBKGluZGV4a2V5LCBGdW5jRXhwcikgJiYK KwkJCQkoKEZ1bmNFeHByICopIGluZGV4a2V5KS0+ZnVuY2Zvcm1hdCA9PSBDT0VSQ0VfRVhQTElD SVRfQ0FMTCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCBzdHIp OworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm8oJmRlZmluaXRpb25CdWYsICIoJXMpIiwg c3RyKTsKKworCQkJa2V5Y29sdHlwZSA9IGV4cHJUeXBlKGluZGV4a2V5KTsKKwkJCWtleWNvbGNv bGxhdGlvbiA9IGV4cHJDb2xsYXRpb24oaW5kZXhrZXkpOworCQl9CisKKwkJLyogQWRkIGNvbGxh dGlvbiwgZXZlbiBpZiBkZWZhdWx0ICovCisJCWluZGNvbGwgPSBpbmRjb2xsYXRpb24tPnZhbHVl c1trZXlub107CisJCWlmIChPaWRJc1ZhbGlkKGluZGNvbGwpKQorCQkJYXBwZW5kU3RyaW5nSW5m bygmZGVmaW5pdGlvbkJ1ZiwgIiBDT0xMQVRFICVzIiwKKwkJCQkJCQkgZ2VuZXJhdGVfY29sbGF0 aW9uX25hbWUoKGluZGNvbGwpKSk7CisKKwkJLyogQWRkIHRoZSBvcGVyYXRvciBjbGFzcyBuYW1l LCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJZ2V0X29wY2xhc3NfbmFtZShpbmRjbGFzcy0+dmFsdWVz W2tleW5vXSwgSW52YWxpZE9pZCwgJmRlZmluaXRpb25CdWYpOworCisJCS8qIEFkZCBvcHRpb25z IGlmIHJlbGV2YW50ICovCisJCWlmIChhbXJvdXRpbmUtPmFtY2Fub3JkZXIpCisJCXsKKwkJCS8q IElmIGl0IHN1cHBvcnRzIHNvcnQgb3JkZXJpbmcsIHJlcG9ydCBERVNDIGFuZCBOVUxMUyBvcHRz ICovCisJCQlpZiAob3B0ICYgSU5ET1BUSU9OX0RFU0MpCisJCQl7CisJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBERVNDIik7CisJCQkJLyogTlVMTFMgRklSU1Qg aXMgdGhlIGRlZmF1bHQgaW4gdGhpcyBjYXNlICovCisJCQkJaWYgKCEob3B0ICYgSU5ET1BUSU9O X05VTExTX0ZJUlNUKSkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1 ZiwgIiBOVUxMUyBMQVNUIik7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKG9wdCAmIElO RE9QVElPTl9OVUxMU19GSVJTVCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5p dGlvbkJ1ZiwgIiBOVUxMUyBGSVJTVCIpOworCQkJfQorCQl9CisKKwkJLyogWFhYIGV4Y2x1ZGVP cHMgdGhpbmd5IHdhcyBoZXJlOyBkbyB3ZSBuZWVkIGFueXRoaW5nPyAqLworCX0KKwkqZGVmaW5p dGlvbiA9IGRlZmluaXRpb25CdWYuZGF0YTsKKworCS8qIE91dHB1dCByZWxvcHRpb25zICovCisJ KnJlbG9wdGlvbnMgPSBmbGF0dGVuX3JlbG9wdGlvbnMoaW5kZXhyZWxpZCk7CisKKwkvKiBPdXRw dXQgdGFibGVzcGFjZSAqLworCXsKKwkJT2lkCQkJdGJsc3BjOworCisJCXRibHNwYyA9IGdldF9y ZWxfdGFibGVzcGFjZShpbmRleHJlbGlkKTsKKwkJaWYgKE9pZElzVmFsaWQodGJsc3BjKSkKKwkJ CSp0YWJsZXNwYWNlID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVyKGdldF90YWJsZXNwYWNlX25h bWUodGJsc3BjKSkpOworCX0KKworCS8qIFJlcG9ydCBpbmRleCBwcmVkaWNhdGUsIGlmIGFueSAq LworCWlmICghaGVhcF9hdHRpc251bGwoaHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZHByZWQsIE5V TEwpKQorCXsKKwkJTm9kZQkgICAqbm9kZTsKKwkJRGF0dW0JCXByZWREYXR1bTsKKwkJY2hhcgkg ICAqcHJlZFN0cmluZzsKKworCQkvKiBDb252ZXJ0IHRleHQgc3RyaW5nIHRvIG5vZGUgdHJlZSAq LworCQlwcmVkRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJ CQkJCQkJQW51bV9wZ19pbmRleF9pbmRwcmVkLCAmaXNudWxsKTsKKwkJQXNzZXJ0KCFpc251bGwp OworCQlwcmVkU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmluZyhwcmVkRGF0dW0pOworCQlub2Rl ID0gKE5vZGUgKikgc3RyaW5nVG9Ob2RlKHByZWRTdHJpbmcpOworCQlwZnJlZShwcmVkU3RyaW5n KTsKKworCQkvKiBEZXBhcnNlICovCisJCSp3aGVyZUNsYXVzZSA9IGRlcGFyc2VfZXhwcmVzc2lv bihub2RlLCBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCX0KKworCS8qIENsZWFuIHVwICovCisJ UmVsZWFzZVN5c0NhY2hlKGh0X2lkeCk7CisJUmVsZWFzZVN5c0NhY2hlKGh0X2lkeHJlbCk7CisJ UmVsZWFzZVN5c0NhY2hlKGh0X2FtKTsKK30KKworLyoKKyAqIE9idGFpbiB0aGUgZGVwYXJzZWQg ZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGdpdmVuIGNvbHVtbiBvZiB0aGUgZ2l2ZW4gdGFibGUuCisg KgorICogQ2FsbGVyIG11c3QgaGF2ZSBzZXQgYSBjb3JyZWN0IGRlcGFyc2UgY29udGV4dC4KKyAq Lworc3RhdGljIGNoYXIgKgorUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwg QXR0ck51bWJlciBhdHRubywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkJIExpc3QgKipleHBycykK K3sKKwlOb2RlCSAgICpkZWZ2YWw7CisJY2hhcgkgICAqZGVmc3RyOworCisJZGVmdmFsID0gYnVp bGRfY29sdW1uX2RlZmF1bHQocmVsLCBhdHRubyk7CisJZGVmc3RyID0gZGVwYXJzZV9leHByZXNz aW9uKGRlZnZhbCwgZHBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCisJLyogQ29sbGVjdCB0aGUg ZXhwcmVzc2lvbiBmb3IgbGF0ZXIgcmVwbGljYXRpb24gc2FmZXR5IGNoZWNrcyAqLworCWlmIChl eHBycykKKwkJKmV4cHJzID0gbGFwcGVuZCgqZXhwcnMsIGRlZnZhbCk7CisKKwlyZXR1cm4gZGVm c3RyOworfQorCisvKgorICogT2J0YWluIHRoZSBkZXBhcnNlZCBwYXJ0aXRpb24gYm91bmQgZXhw cmVzc2lvbiBmb3IgdGhlIGdpdmVuIHRhYmxlLgorICovCitzdGF0aWMgY2hhciAqCitSZWxhdGlv bkdldFBhcnRpdGlvbkJvdW5kKE9pZCByZWxpZCkKK3sKKwlEYXR1bQkJZGVwYXJzZWQ7CisJRGF0 dW0JCWJvdW5kRGF0dW07CisJYm9vbAkJaXNudWxsOworCUhlYXBUdXBsZQl0dXBsZTsKKworCXR1 cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgcmVsaWQpOworCWlmICghSGVhcFR1cGxlSXNW YWxpZCh0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxh dGlvbiB3aXRoIE9JRCAldSIsIHJlbGlkKTsKKworCWJvdW5kRGF0dW0gPSBTeXNDYWNoZUdldEF0 dHIoUkVMT0lELCB0dXBsZSwKKwkJCQkJCQkJIEFudW1fcGdfY2xhc3NfcmVscGFydGJvdW5kLAor CQkJCQkJCQkgJmlzbnVsbCk7CisKKwlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdf Z2V0X2V4cHIsCisJCQkJCQkJCSAgIENTdHJpbmdHZXRUZXh0RGF0dW0oVGV4dERhdHVtR2V0Q1N0 cmluZyhib3VuZERhdHVtKSksCisJCQkJCQkJCSAgIHJlbGlkKTsKKworCVJlbGVhc2VTeXNDYWNo ZSh0dXBsZSk7CisKKwlyZXR1cm4gVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCk7Cit9CisK Ky8qCisgKiBHaXZlbiBhIENvbGxlY3RlZENvbW1hbmQsIHJldHVybiBhIEpTT04gcmVwcmVzZW50 YXRpb24gb2YgaXQuCisgKgorICogVGhlIGNvbW1hbmQgaXMgZXhwYW5kZWQgZnVsbHkgc28gdGhh dCB0aGVyZSBhcmUgbm8gYW1iaWd1aXRpZXMgZXZlbiBpbiB0aGUKKyAqIGZhY2Ugb2Ygc2VhcmNo X3BhdGggY2hhbmdlcy4KKyAqLworRGF0dW0KK2RkbF9kZXBhcnNlX3RvX2pzb24oUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQgPSAoQ29sbGVjdGVkQ29tbWFuZCAq KSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKwljaGFyCSAgICpjb21tYW5kOworCisJY29tbWFuZCA9 IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgdHJ1ZSk7CisKKwlpZiAoY29tbWFuZCkKKwkJ UEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoY29tbWFuZCkpOworCisJUEdfUkVUVVJO X05VTEwoKTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJDb2xsYXRpb25TdG10IChBTFRF UiBDT0xMQVRJT04pCisgKgorICogR2l2ZW4gYSBjb2xsYXRpb24gT0lEIGFuZCB0aGUgcGFyc2Ug dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXg6CisgKiBBTFRFUiBDT0xM QVRJT04gJXtpZGVudGl0eX1PIFJFRlJFU0ggVkVSU0lPTgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0FsdGVyQ29sbGF0aW9uKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQor eworCU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVwbGUJY29sVHVwOworCUZvcm1fcGdfY29sbGF0 aW9uIGNvbEZvcm07CisKKwljb2xUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09MTE9JRCwgT2JqZWN0 SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjb2xUdXApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29sbGF0aW9uIHdpdGggT0lE ICV1Iiwgb2JqZWN0SWQpOworCWNvbEZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVD VChjb2xUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTExBVElPTiAle2lk ZW50aXR5fU8gUkVGUkVTSCBWRVJTSU9OIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShjb2xGb3JtLT5jb2xsbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKGNvbEZvcm0tPmNvbGxuYW1lKSkpOworCisJ UmVsZWFzZVN5c0NhY2hlKGNvbFR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVw YXJzZSBhbiBBbHRlckZ1bmN0aW9uU3RtdCAoQUxURVIgRlVOQ1RJT04vUk9VVElORS9QUk9DRURV UkUpCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQg Y3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIg Y29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheDoKKyAqIEFMVEVSIEZVTkNUSU9OL1JPVVRJ TkUvUFJPQ0VEVVJFICV7c2lnbmF0dXJlfXMgJXtkZWZpbml0aW9uOiB9cworICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRnVuY3Rpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJQWx0ZXJGdW5jdGlvblN0bXQgKm5vZGUgPSAoQWx0ZXJGdW5jdGlvblN0bXQg KikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICpzaWduOworCUhl YXBUdXBsZQlwcm9jVHVwOworCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlMaXN0CSAgICpwYXJh bXMgPSBOSUw7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlp bnQJCQlpOworCisJLyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlICovCisJcHJvY1R1cCA9IFNlYXJj aFN5c0NhY2hlMShQUk9DT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBy b2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZnVuY3Rpb24g d2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRT VFJVQ1QocHJvY1R1cCk7CisKKwlpZiAocHJvY0Zvcm0tPnByb2tpbmQgPT0gUFJPS0lORF9QUk9D RURVUkUpCisJCXJldCA9IG5ld19vYmp0cmVlKCJBTFRFUiBQUk9DRURVUkUiKTsKKwllbHNlCisJ CXJldCA9IG5ld19vYmp0cmVlKG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX1JPVVRJTkUgPworCQkJ CQkJICAiQUxURVIgUk9VVElORSIgOiAiQUxURVIgRlVOQ1RJT04iKTsKKworCS8qCisJICogQUxU RVIgRlVOQ1RJT04gZG9lcyBub3QgY2hhbmdlIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlIGNhdGFs b2cgdG8gZ2V0CisJICogaW5wdXQgdHlwZSBPaWRzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBw cm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwl7CisJCU9ialRyZWUgICAgKnRtcF9vYmo7CisKKwkJ dG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle3R5cGV9VCIsIDEsCisJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnBy b2FyZ3R5cGVzLnZhbHVlc1tpXSwgLTEpKTsKKwkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlzaWduID0gbmV3X29ianRyZWVfVkEo IiV7aWRlbnRpdHl9RCAoJXthcmd1bWVudHM6LCB9cykiLCAyLAorCQkJCQkJICAiaWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJv Y2VkdXJlUmVsYXRpb25JZCwgb2JqZWN0SWQpLAorCQkJCQkJICAiYXJndW1lbnRzIiwgT2JqVHlw ZUFycmF5LCBwYXJhbXMpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtzaWduYXR1 cmV9cyIsIHNpZ24pOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5hY3Rpb25zKQorCXsKKwkJRGVm RWxlbSAgICAqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUgICAg KnRtcF9vYmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ2b2xhdGls aXR5IikgPT0gMCkKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZShzdHJWYWwoZGVmZWwtPmFyZykp OworCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdHJpY3QiKSA9PSAwKQorCQkJ dG1wX29iaiA9IG5ld19vYmp0cmVlKGJvb2xWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIlJF VFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUIiA6CisJCQkJCQkJCSAiQ0FMTEVEIE9OIE5VTEwgSU5Q VVQiKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2VjdXJpdHkiKSA9PSAw KQorCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKGJvb2xWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJ CQkgIlNFQ1VSSVRZIERFRklORVIiIDogIlNFQ1VSSVRZIElOVk9LRVIiKTsKKwkJZWxzZSBpZiAo c3RyY21wKGRlZmVsLT5kZWZuYW1lLCAibGVha3Byb29mIikgPT0gMCkKKwkJCXRtcF9vYmogPSBu ZXdfb2JqdHJlZShib29sVmFsKGRlZmVsLT5hcmcpID8KKwkJCQkJCQkJICJMRUFLUFJPT0YiIDog Ik5PVCBMRUFLUFJPT0YiKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiY29z dCIpID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkNPU1QgJXtjb3N0fW4iLCAx LAorCQkJCQkJCQkJImNvc3QiLCBPYmpUeXBlRmxvYXQsCisJCQkJCQkJCQlkZWZHZXROdW1lcmlj KGRlZmVsKSk7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJvd3MiKSA9PSAw KQorCQl7CisJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIlJPV1MiKTsKKwkJCWlmIChkZWZHZXRO dW1lcmljKGRlZmVsKSA9PSAwKQorCQkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwkJ CWVsc2UKKwkJCQlhcHBlbmRfZmxvYXRfb2JqZWN0KHRtcF9vYmosICIle3Jvd3N9biIsCisJCQkJ CQkJCQlkZWZHZXROdW1lcmljKGRlZmVsKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVs LT5kZWZuYW1lLCAic2V0IikgPT0gMCkKKwkJeworCQkJVmFyaWFibGVTZXRTdG10ICpzc3RtdCA9 IChWYXJpYWJsZVNldFN0bXQgKikgZGVmZWwtPmFyZzsKKwkJCWNoYXIJICAgKnZhbHVlID0gRXh0 cmFjdFNldFZhcmlhYmxlQXJncyhzc3RtdCk7CisKKwkJCXRtcF9vYmogPSBkZXBhcnNlX0Z1bmN0 aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+bmFtZSwgdmFsdWUpOworCQl9CisJCWVsc2UgaWYg KHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN1cHBvcnQiKSA9PSAwKQorCQl7CisJCQlPaWQJCQlh cmd0eXBlc1sxXTsKKworCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJTVVBQT1JUIik7CisKKwkJ CUFzc2VydChwcm9jRm9ybS0+cHJvc3VwcG9ydCk7CisKKwkJCS8qCisJCQkgKiBXZSBzaG91bGQg cXVhbGlmeSB0aGUgc3VwcG9ydCBmdW5jdGlvbidzIG5hbWUgaWYgaXQgd291bGRuJ3QgYmUKKwkJ CSAqIHJlc29sdmVkIGJ5IGxvb2t1cCBpbiB0aGUgY3VycmVudCBzZWFyY2ggcGF0aC4KKwkJCSAq LworCQkJYXJndHlwZXNbMF0gPSBJTlRFUk5BTE9JRDsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcF9vYmosICIle25hbWV9cyIsICJuYW1lIiwKKwkJCQkJCQkJIGdlbmVyYXRlX2Z1bmN0aW9u X25hbWUocHJvY0Zvcm0tPnByb3N1cHBvcnQsIDEsCisJCQkJCQkJCQkJCQkJCU5JTCwgYXJndHlw ZXMsCisJCQkJCQkJCQkJCQkJCWZhbHNlLCBOVUxMLAorCQkJCQkJCQkJCQkJCQlFWFBSX0tJTkRf Tk9ORSkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInBhcmFsbGVs IikgPT0gMCkKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiUEFSQUxMRUwgJXt2YWx1ZX1z IiwgMSwKKwkJCQkJCQkJCSJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHN0clZhbChkZWZlbC0+YXJn KSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle2RlZmluaXRpb246IH1zIiwg ZWxlbXMpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJuIHJldDsKK30K KworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJPYmplY3RTY2hlbWFTdG10IChBTFRFUiAuLi4gU0VU IFNDSEVNQSBjb21tYW5kKQorICoKKyAqIEdpdmVuIHRoZSBvYmplY3QgYWRkcmVzcyBhbmQgdGhl IHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVz ZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRF UiAlcyAle2lkZW50aXR5fXMgU0VUIFNDSEVNQSAle25ld3NjaGVtYX1JCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPYmplY3RTY2hlbWFTdG10KE9iamVjdEFkZHJlc3MgYWRk cmVzcywgTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJCSAgT2JqZWN0QWRkcmVzcyBvbGRfc2NoZW1h KQoreworCUFsdGVyT2JqZWN0U2NoZW1hU3RtdCAqbm9kZSA9IChBbHRlck9iamVjdFNjaGVtYVN0 bXQgKikgcGFyc2V0cmVlOworCWNoYXIJICAgKmlkZW50aXR5OworCWNoYXIJICAgKm5ld19zY2hl bWEgPSBub2RlLT5uZXdzY2hlbWE7CisJY2hhcgkgICAqb2xkX3NjaG5hbWU7CisJY2hhcgkgICAq aWRlbnQ7CisKKwkvKgorCSAqIFNpbmNlIHRoZSBjb21tYW5kIGhhcyBhbHJlYWR5IHRha2VuIHBs YWNlIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YKKwkgKiBjYXRhbG9ncywgZ2V0T2JqZWN0SWRl bnRpdHkgcmV0dXJucyB0aGUgb2JqZWN0IG5hbWUgd2l0aCB0aGUgYWxyZWFkeQorCSAqIGNoYW5n ZWQgc2NoZW1hLiAgVGhlIG91dHB1dCBvZiBvdXIgZGVwYXJzaW5nIG11c3QgcmV0dXJuIHRoZSBv cmlnaW5hbAorCSAqIHNjaGVtYSBuYW1lLCBob3dldmVyLCBzbyB3ZSBjaG9wIHRoZSBzY2hlbWEg bmFtZSBvZmYgdGhlIGlkZW50aXR5CisJICogc3RyaW5nIGFuZCB0aGVuIHByZXBlbmQgdGhlIHF1 b3RlZCBzY2hlbWEgbmFtZS4KKwkgKgorCSAqIFhYWCBUaGlzIGlzIHByZXR0eSBjbHVua3kuIENh biB3ZSBkbyBiZXR0ZXI/CisJICovCisJaWRlbnRpdHkgPSBnZXRPYmplY3RJZGVudGl0eSgmYWRk cmVzcywgZmFsc2UpOworCW9sZF9zY2huYW1lID0gZ2V0X25hbWVzcGFjZV9uYW1lKG9sZF9zY2hl bWEub2JqZWN0SWQpOworCWlmICghb2xkX3NjaG5hbWUpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBzY2hlbWEgd2l0aCBPSUQgJXUiLAorCQkJIG9sZF9zY2hlbWEub2Jq ZWN0SWQpOworCisJaWRlbnQgPSBwc3ByaW50ZigiJXMlcyIsIHF1b3RlX2lkZW50aWZpZXIob2xk X3NjaG5hbWUpLAorCQkJCQkgaWRlbnRpdHkgKyBzdHJsZW4ocXVvdGVfaWRlbnRpZmllcihuZXdf c2NoZW1hKSkpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAl e2lkZW50aXR5fXMgU0VUIFNDSEVNQSAle25ld3NjaGVtYX1JIiwgMywKKwkJCQkJCSAgIm9ianR5 cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmpl Y3RUeXBlLCBmYWxzZSksCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50 LAorCQkJCQkJICAibmV3c2NoZW1hIiwgT2JqVHlwZVN0cmluZywgbmV3X3NjaGVtYSk7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGEgR1JBTlQvUkVWT0tFIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBz eW50YXgKKyAqIEdSQU5UICV7cHJpdmlsZWdlczosIH1zIE9OIiAle29ianR5cGV9cyAle3ByaXZ0 YXJnZXQ6LCB9cyBUTyAle2dyYW50ZWVzOiwgfXMKKyAqICV7Z3JhbnRfb3B0aW9ufXMgR1JBTlRF RCBCWSAle3JvbGVuYW1lfXMKKyAqIAkJT1IKKyAqIFJFVk9LRSAle3ByaXZpbGVnZXM6LCB9cyBP TiIgJXtvYmp0eXBlfXMgJXtwcml2dGFyZ2V0OiwgfXMKKyAqIEZST00gJXtncmFudGVlczosIH1z ICV7Z3JhbnRfb3B0aW9ufXMgJXtjYXNjYWRlfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9HcmFudFN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCUludGVybmFsR3JhbnQg KmlzdG10OworCU9ialRyZWUgICAgKnJldDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RD ZWxsICAgKmNlbGw7CisJT2lkCQkJY2xhc3NJZDsKKwlPYmpUcmVlICAgICp0bXA7CisKKwkvKiBE b24ndCBkZXBhcnNlIFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQgd2hpbGUgY3JlYXRpbmcgZXh0ZW5z aW9uICovCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uKQorCQlyZXR1cm4gTlVMTDsKKworCWlzdG10 ID0gY21kLT5kLmdyYW50LmlzdG10OworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gb2JqZWN0 cyBmcm9tICJBTEwgLi4uIElOIFNDSEVNQSIgdG8gYmUgZ3JhbnRlZCwgdGhlbgorCSAqIG5vdGhp bmcgdG8gZG8uCisJICovCisJaWYgKGlzdG10LT5vYmplY3RzID09IE5JTCkKKwkJcmV0dXJuIE5V TEw7CisKKwlzd2l0Y2ggKGlzdG10LT5vYmp0eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfQ09MVU1O OgorCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQljbGFz c0lkID0gUmVsYXRpb25SZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0RPTUFJ TjoKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCWNsYXNzSWQgPSBUeXBlUmVsYXRpb25JZDsKKwkJ CWJyZWFrOworCQljYXNlIE9CSkVDVF9GRFc6CisJCQljbGFzc0lkID0gRm9yZWlnbkRhdGFXcmFw cGVyUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1NFUlZFUjoK KwkJCWNsYXNzSWQgPSBGb3JlaWduU2VydmVyUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNl IE9CSkVDVF9GVU5DVElPTjoKKwkJY2FzZSBPQkpFQ1RfUFJPQ0VEVVJFOgorCQljYXNlIE9CSkVD VF9ST1VUSU5FOgorCQkJY2xhc3NJZCA9IFByb2NlZHVyZVJlbGF0aW9uSWQ7CisJCQlicmVhazsK KwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQljbGFzc0lkID0gTGFuZ3VhZ2VSZWxhdGlvbklk OworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNUOgorCQkJY2xhc3NJZCA9IExh cmdlT2JqZWN0UmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJ CQljbGFzc0lkID0gTmFtZXNwYWNlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVD VF9EQVRBQkFTRToKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJCWNsYXNzSWQgPSBJbnZh bGlkT2lkOworCQkJZWxvZyhFUlJPUiwgImdsb2JhbCBvYmplY3RzIG5vdCBzdXBwb3J0ZWQiKTsK KwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgT0JKRUNUIHZh bHVlICVkIiwgaXN0bXQtPm9ianR5cGUpOworCX0KKworCS8qIEdSQU5UIFRPIG9yIFJFVk9LRSBG Uk9NICovCisJcmV0ID0gbmV3X29ianRyZWUoaXN0bXQtPmlzX2dyYW50ID8gIkdSQU5UIiA6ICJS RVZPS0UiKTsKKworCS8qIEJ1aWxkIGEgbGlzdCBvZiBwcml2aWxlZ2VzIHRvIGdyYW50L3Jldm9r ZSAqLworCWlmIChpc3RtdC0+YWxsX3ByaXZzKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUoIkFM TCBQUklWSUxFR0VTIik7CisJCWxpc3QgPSBsaXN0X21ha2UxKG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCX0KKwllbHNlCisJeworCQljaGFyICpwcml2OworCQlpZiAoaXN0bXQtPnByaXZpbGVn ZXMgJiBBQ0xfSU5TRVJUKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3Ry aW5nKEFDTF9JTlNFUlQpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmpl Y3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9TRUxFQ1QpCisJ CXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX1NFTEVDVCk7CisJ CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJ aWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1VQREFURSkKKwkJeworCQkJcHJpdiA9IChjaGFy ICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVVBEQVRFKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVn ZXMgJiBBQ0xfREVMRVRFKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3Ry aW5nKEFDTF9ERUxFVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmpl Y3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9UUlVOQ0FURSkK KwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVFJVTkNBVEUp OworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9 CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9SRUZFUkVOQ0VTKQorCQl7CisJCQlwcml2 ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9SRUZFUkVOQ0VTKTsKKwkJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0 bXQtPnByaXZpbGVnZXMgJiBBQ0xfVFJJR0dFUikKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJp dmlsZWdlX3RvX3N0cmluZyhBQ0xfVFJJR0dFUik7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYg QUNMX0VYRUNVVEUpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmco QUNMX0VYRUNVVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3Qo cHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9VU0FHRSkKKwkJewor CQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVVNBR0UpOworCQkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChp c3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9DUkVBVEUpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXBy aXZpbGVnZV90b19zdHJpbmcoQUNMX0NSRUFURSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYg QUNMX0NSRUFURV9URU1QKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3Ry aW5nKEFDTF9DUkVBVEVfVEVNUCk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5n X29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NPTk5F Q1QpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX0NPTk5F Q1QpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOwor CQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9NQUlOVEFJTikKKwkJeworCQkJcHJp diA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfTUFJTlRBSU4pOworCQkJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisKKwkJaWYgKCFp c3RtdC0+aXNfZ3JhbnQgJiYgaXN0bXQtPmdyYW50X29wdGlvbikKKwkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHJldCwgIiV7Z3JhbnRfb3B0aW9ufXMiLCAiZ3JhbnRfb3B0aW9uIiwKKwkJCQkJCQkJ IGlzdG10LT5ncmFudF9vcHRpb24gPyAiR1JBTlQgT1BUSU9OIEZPUiIgOiAiIik7CisKKwkJaWYg KGlzdG10LT5jb2xfcHJpdnMgIT0gTklMKQorCQl7CisJCQlMaXN0Q2VsbCAgICpvY2VsbDsKKwor CQkJZm9yZWFjaChvY2VsbCwgaXN0bXQtPmNvbF9wcml2cykKKwkJCXsKKwkJCQlBY2Nlc3NQcml2 ICpwcml2ID0gbGZpcnN0KG9jZWxsKTsKKwkJCQlMaXN0CSAgICpjb2xzID0gTklMOworCisJCQkJ Zm9yZWFjaChjZWxsLCBwcml2LT5jb2xzKQorCQkJCXsKKwkJCQkJU3RyaW5nCSAgICpjb2xuYW1l ID0gbGZpcnN0X25vZGUoU3RyaW5nLCBjZWxsKTsKKworCQkJCQljb2xzID0gbGFwcGVuZChjb2xz LAorCQkJCQkJCQkgICBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwoY29sbmFtZSkpKTsKKwkJCQl9 CisKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiKCV7Y29sczosIH1zKSAle3ByaXZ9cyIsIDIs CisJCQkJCQkJCQkgImNvbHMiLCBPYmpUeXBlQXJyYXksIGNvbHMsCisJCQkJCQkJCQkgInByaXYi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJICBwcml2LT5wcml2X25hbWUgPyBwcml2LT5wcml2 X25hbWUgOiAiQUxMIFBSSVZJTEVHRVMiKTsKKworCQkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJfQorCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmpl Y3QocmV0LCAiJXtwcml2aWxlZ2VzOiwgfXMgT04iLCBsaXN0KTsKKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHJldCwgIiV7b2JqdHlwZX1zIiwgIm9ianR5cGUiLAorCQkJCQkJIChjaGFyICopc3Ry aW5naWZ5X29ianR5cGUoaXN0bXQtPm9ianR5cGUsIHRydWUpKTsKKworCS8qIFRhcmdldCBvYmpl Y3RzLiAgV2UgdXNlIG9iamVjdCBpZGVudGl0aWVzIGhlcmUgKi8KKwlsaXN0ID0gTklMOworCWZv cmVhY2goY2VsbCwgaXN0bXQtPm9iamVjdHMpCisJeworCQlPaWQJCQlvYmppZCA9IGxmaXJzdF9v aWQoY2VsbCk7CisJCU9iamVjdEFkZHJlc3MgYWRkcjsKKworCQlhZGRyLmNsYXNzSWQgPSBjbGFz c0lkOworCQlhZGRyLm9iamVjdElkID0gb2JqaWQ7CisJCWFkZHIub2JqZWN0U3ViSWQgPSAwOwor CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fXMiLCAxLAorCQkJCQkJCSAiaWRl bnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBnZXRPYmplY3RJZGVudGl0eSgmYWRkciwg ZmFsc2UpKTsKKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle3ByaXZ0YXJnZXQ6LCB9cyIsIGxp c3QpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCBpc3RtdC0+aXNfZ3JhbnQgPyAiVE8i IDogIkZST00iKTsKKworCS8qIExpc3Qgb2YgZ3JhbnRlZXMgKi8KKwlsaXN0ID0gTklMOworCWZv cmVhY2goY2VsbCwgaXN0bXQtPmdyYW50ZWVzKQorCXsKKwkJT2lkCQkJZ3JhbnRlZSA9IGxmaXJz dF9vaWQoY2VsbCk7CisKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3JvbGVfaWQoZ3JhbnRlZSk7 CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKwor CWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtncmFudGVlczosIH1zIiwgbGlzdCk7CisKKwkv KiBUaGUgd29yZGluZyBvZiB0aGUgZ3JhbnQgb3B0aW9uIGlzIHZhcmlhYmxlIC4uLiAqLworCWlm IChpc3RtdC0+aXNfZ3JhbnQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7Z3JhbnRf b3B0aW9ufXMiLCAiZ3JhbnRfb3B0aW9uIiwKKwkJCQkJCQkgaXN0bXQtPmdyYW50X29wdGlvbiA/ ICJXSVRIIEdSQU5UIE9QVElPTiIgOiAiIik7CisKKwlpZiAoaXN0bXQtPmdyYW50b3JfdWlkKQor CXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAqcm9sZW5hbWU7CisKKwkJcm9sdHVw ID0gU2VhcmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9iamVjdElkR2V0RGF0dW0oaXN0bXQtPmdyYW50 b3JfdWlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChyb2x0dXApKQorCQkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJvbGUgd2l0aCBPSUQgJXUiLAorCQkJCSBpc3Rt dC0+Z3JhbnRvcl91aWQpOworCisJCXJvbGVuYW1lID0gTmFtZVN0cigoKEZvcm1fcGdfYXV0aGlk KSBHRVRTVFJVQ1Qocm9sdHVwKSktPnJvbG5hbWUpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChy ZXQsICJHUkFOVEVEIEJZICV7cm9sZW5hbWV9cyIsCisJCQkJCQkJICJyb2xlbmFtZSIsIHJvbGVu YW1lKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHJvbHR1cCk7CisJfQorCisJaWYgKCFpc3RtdC0+aXNf Z3JhbnQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7Y2FzY2FkZX1zIiwgImNhc2Nh ZGUiLAorCQkJCQkJCSBpc3RtdC0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFID8gIkNBU0NBREUi IDogIiIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJPcGVy YXRvclN0bXQgKEFMVEVSIE9QRVJBVE9SIC4uLiBTRVQgLi4uKS4KKyAqCisgKiBHaXZlbiBhbiBv cGVyYXRvciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFu IE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogQUxURVIgT1BFUkFUT1IgJXtpZGVudGl0eX1PICgle2xlZnRfdHlwZX1U LCAle3JpZ2h0X3R5cGV9VCkKKyAqIFNFVCAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0FsdGVyT3BlcmF0b3JTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCUhlYXBUdXBsZQlvcHJUdXA7CisJQWx0ZXJPcGVyYXRvclN0bXQgKm5vZGUg PSAoQWx0ZXJPcGVyYXRvclN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlG b3JtX3BnX29wZXJhdG9yIG9wckZvcm07CisJTGlzdENlbGwgICAqY2VsbDsKKwlMaXN0CSAgICps aXN0ID0gTklMOworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQsIE9iamVjdElk R2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3ByVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdpdGggT0lEICV1 Iiwgb2JqZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKG9w clR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgT1BFUkFUT1IgJXtpZGVudGl0 eX1PIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShvcHJGb3JtLT5vcHJuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkg IE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIExFRlRBUkcgKi8KKwlpZiAoT2lk SXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAi KCV7bGVmdF90eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5v cHJsZWZ0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiKCV7bGVm dF90eXBlfXMiLCAibGVmdF90eXBlIiwgIk5PTkUiKTsKKworCS8qIFJJR0hUQVJHICovCisJQXNz ZXJ0KE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiwgJXtyaWdodF90eXBlfVQpIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShv cHJGb3JtLT5vcHJyaWdodCwgLTEpKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykK Kwl7CisJCURlZkVsZW0gICAgKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9i alRyZWUgICAgKnRtcF9vYmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwg InJlc3RyaWN0IikgPT0gMCkKKwkJeworCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJSRVNU UklDVD0iLCAxLAorCQkJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0cmljdCIp OworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkpCisJCQkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBv cHJGb3JtLT5vcHJyZXN0KSk7CisJCQllbHNlCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w X29iaiwgIiV7cHJvY2VkdXJlfXMiLCAicHJvY2VkdXJlIiwKKwkJCQkJCQkJCSAiTk9ORSIpOwor CQl9CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiam9pbiIpID09IDApCisJCXsK KwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiSk9JTj0iLCAxLAorCQkJCQkJCQkJImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJCQlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5v cHJqb2luKSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtwcm9jZWR1cmV9 RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwkJCWVsc2UKKwkJ CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtwcm9jZWR1cmV9cyIsICJwcm9jZWR1 cmUiLAorCQkJCQkJCQkJICJOT05FIik7CisJCX0KKworCQlBc3NlcnQodG1wX29iaik7CisJCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlh cHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIlNFVCAoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJ UmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVw YXJzZSBhbiBBTFRFUiBPUEVSQVRPUiBGQU1JTFkgQUREL0RST1AgY29tbWFuZC4KKyAqCisgKiBH aXZlbiB0aGUgQ29sbGVjdGVkQ29tbWFuZCwgcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5n IHRoZSBBbHRlcgorICogT3BlcmF0b3IgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogQUxURVIgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFtZX1JIEFE RC9EUk9QICV7aXRlbXM6LH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJP cEZhbWlseShDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZSAgICAqcmV0OworCUFs dGVyT3BGYW1pbHlTdG10ICpzdG10ID0gKEFsdGVyT3BGYW1pbHlTdG10ICopIGNtZC0+cGFyc2V0 cmVlOworCUhlYXBUdXBsZQlmdHA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUxpc3QJ ICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qIERvbid0IGRlcGFyc2Ug U1FMIGNvbW1hbmRzIGdlbmVyYXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNpb24gKi8KKwlpZiAo Y21kLT5pbl9leHRlbnNpb24pCisJCXJldHVybiBOVUxMOworCisJZnRwID0gU2VhcmNoU3lzQ2Fj aGUxKE9QRkFNSUxZT0lELAorCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGNtZC0+ZC5vcGZhbS5h ZGRyZXNzLm9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZ0cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQg JXUiLAorCQkJIGNtZC0+ZC5vcGZhbS5hZGRyZXNzLm9iamVjdElkKTsKKwlvcGZGb3JtID0gKEZv cm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChmdHApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEo IkFMVEVSIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXthbW5hbWV9SSIsIDIs CisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3Ry KG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCSAiYW1uYW1lIiwgT2JqVHlwZVN0cmluZywgc3Rt dC0+YW1uYW1lKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLm9wZmFtLm9wZXJhdG9ycykKKwl7 CisJCU9wRmFtaWx5TWVtYmVyICpvcGVyID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlICAgICp0 bXBfb2JqOworCisJCS8qCisJCSAqIFZlcmJvc2Ugc3ludGF4CisJCSAqCisJCSAqIE9QRVJBVE9S ICV7bnVtfW4gJXtvcGVyYXRvcn1PKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle3B1cnBvc2V9cwor CQkgKi8KKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJPUEVSQVRPUiAle251bX1uIiwgMSwK KwkJCQkJCQkJIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVyLT5udW1iZXIpOworCisJCS8qIEFk ZCB0aGUgb3BlcmF0b3IgbmFtZTsgdGhlIERST1AgY2FzZSBkb2Vzbid0IGhhdmUgdGhpcyAqLwor CQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIl e29wZXJhdG9yfU8iLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJh dG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBvcGVyLT5vYmplY3QpKTsKKworCQkvKiBB ZGQgdGhlIHR5cGVzICovCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIoJXtsdHlw ZX1ULCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPmxlZnR0eXBlLCAtMSkp OworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtydHlwZX1UKSIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQg dGhlIEZPUiBTRUFSQ0ggLyBGT1IgT1JERVIgQlkgY2xhdXNlOyBub3QgaW4gdGhlIERST1AgY2Fz ZSAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJaWYgKG9wZXItPnNvcnRmYW1pbHkg PT0gSW52YWxpZE9pZCkKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtwdXJw b3NlfXMiLCAicHVycG9zZSIsCisJCQkJCQkJCQkgIkZPUiBTRUFSQ0giKTsKKwkJCWVsc2UKKwkJ CXsKKwkJCQlPYmpUcmVlICAgICpvcmRlcmJ5X29iajsKKworCQkJCW9yZGVyYnlfb2JqID0gbmV3 X29ianRyZWVfVkEoIkZPUiBPUkRFUiBCWSAle29wZmFtaWx5fUQiLCAxLAorCQkJCQkJCQkJCQki b3BmYW1pbHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQkJb3Bl ci0+c29ydGZhbWlseSkpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3B1 cnBvc2V9cyIsIG9yZGVyYnlfb2JqKTsKKwkJCX0KKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlmb3JlYWNoKGNlbGwsIGNt ZC0+ZC5vcGZhbS5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKnByb2MgPSBsZmly c3QoY2VsbCk7CisJCU9ialRyZWUgICAgKnRtcF9vYmo7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0 cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9VCkiLCAzLAorCQkJ CQkJCQkibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJlciwKKwkJCQkJCQkJImx0eXBl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+bGVm dHR5cGUsIC0xKSwKKwkJCQkJCQkJInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3 X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qCisJCSAqIEFk ZCB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgYXJnIHR5cGVzOyB0aGUgRFJPUCBjYXNlIGRvZXNuJ3Qg aGF2ZQorCQkgKiB0aGlzCisJCSAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJSGVh cFR1cGxlCXByb2NUdXA7CisJCQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJCQlPaWQJCSAgICpw cm9hcmd0eXBlczsKKwkJCUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7CisJCQlpbnQJCQlpOworCisJ CQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJv Yy0+b2JqZWN0KSk7CisJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSB3aXRoIE9JRCAldSIs CisJCQkJCSBwcm9jLT5vYmplY3QpOworCQkJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRT VFJVQ1QocHJvY1R1cCk7CisKKwkJCXByb2FyZ3R5cGVzID0gcHJvY0Zvcm0tPnByb2FyZ3R5cGVz LnZhbHVlczsKKwkJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJ CXsKKwkJCQlPYmpUcmVlICAgICphcmc7CisKKwkJCQlhcmcgPSBuZXdfb2JqdHJlZV9mb3JfdHlw ZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJCWFyZ2xpc3QgPSBsYXBwZW5kKGFyZ2xpc3QsIG5l d19vYmplY3Rfb2JqZWN0KGFyZykpOworCQkJfQorCisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXBfb2JqLCAiJXtmdW5jdGlvbn1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIocHJvY0Zv cm0tPnByb25hbWUpKSk7CisKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmosICIoIik7 CisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIle2FyZ3R5cGVzOiwgfVQiLCBhcmds aXN0KTsKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmosICIpIik7CisKKwkJCVJlbGVh c2VTeXNDYWNoZShwcm9jVHVwKTsKKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlpZiAoc3RtdC0+aXNEcm9wKQorCQlhcHBl bmRfZm9ybWF0X3N0cmluZyhyZXQsICJEUk9QIik7CisJZWxzZQorCQlhcHBlbmRfZm9ybWF0X3N0 cmluZyhyZXQsICJBREQiKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtpdGVtczos IH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZnRwKTsKKworCXJldHVybiByZXQ7Cit9 CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT3duZXJTdG10IChBTFRFUiAuLi4gT1dORVIgVE8g Li4uKS4KKyAqCisgKiBHaXZlbiB0aGUgb2JqZWN0IGFkZHJlc3MgYW5kIHRoZSBwYXJzZSB0cmVl IHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUg YWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgJXMgJXtpZGVu dGl0eX1zIE9XTkVSIFRPICV7bmV3b3duZXJ9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0FsdGVyT3duZXJTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVl KQoreworCUFsdGVyT3duZXJTdG10ICpub2RlID0gKEFsdGVyT3duZXJTdG10ICopIHBhcnNldHJl ZTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0 eX1zIE9XTkVSIFRPICV7bmV3b3duZXJ9SSIsIDMsCisJCQkJCQkgICJvYmp0eXBlIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCSAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2JqZWN0VHlwZSwgZmFs c2UpLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBnZXRPYmpl Y3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpLAorCQkJCQkJICAibmV3b3duZXIiLCBPYmpUeXBl U3RyaW5nLAorCQkJCQkJICBnZXRfcm9sZXNwZWNfbmFtZShub2RlLT5uZXdvd25lcikpOworfQor CisvKgorICogRGVwYXJzZSBhbiBBbHRlclNlcVN0bXQuCisgKgorICogR2l2ZW4gYSBzZXF1ZW5j ZSBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJl ZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBBTFRFUiBTRVFVRU5DRSAle2lkZW50aXR5fUQgJXtkZWZpbml0aW9uOiB9cworICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyU2VxU3RtdChPaWQgb2JqZWN0SWQsIE5v ZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJUmVsYXRpb24JcmVsYXRpb247 CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7 CisJTGlzdENlbGwgICAqY2VsbDsKKwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07CisJUmVsYXRp b24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlBbHRlclNlcVN0bXQgKmFsdGVyU2VxU3Rt dCA9IChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlOworCisJLyoKKwkgKiBTZXF1ZW5jZSBmb3Ig SURFTlRJVFkgQ09MVU1OIG91dHB1dCBzZXBhcmF0ZWx5ICh2aWEgQ1JFQVRFIFRBQkxFIG9yCisJ ICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoYWx0ZXJTZXFT dG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOworCisJc2VxZGF0YSA9IGdldF9zZXF1 ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVj dElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlv bklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEo U0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3Igc2VxdWVuY2Ugd2l0aCBPSUQgICV1Iiwgb2JqZWN0SWQpOworCisJc2VxZm9y bSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCisJZm9yZWFjaChj ZWxsLCAoKEFsdGVyU2VxU3RtdCAqKSBwYXJzZXRyZWUpLT5vcHRpb25zKQorCXsKKwkJRGVmRWxl bSAgICAqZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqRWxlbSAgICAqbmV3 ZWxtOworCisJCWlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImNhY2hlIikgPT0gMCkKKwkJCW5l d2VsbSA9IGRlcGFyc2VfU2VxX0NhY2hlKHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3Ry Y21wKGVsZW0tPmRlZm5hbWUsICJjeWNsZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1Nl cV9DeWNsZShzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1l LCAiaW5jcmVtZW50IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5 KHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJtaW52 YWx1ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9NaW52YWx1ZShzZXFmb3JtLCBm YWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWF4dmFsdWUiKSA9PSAw KQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWF4dmFsdWUoc2VxZm9ybSwgZmFsc2UpOworCQll bHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0YXJ0IikgPT0gMCkKKwkJCW5ld2VsbSA9 IGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNt cChlbGVtLT5kZWZuYW1lLCAicmVzdGFydCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1Nl cV9SZXN0YXJ0KHNlcWRhdGEpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm93 bmVkX2J5IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX093bmVkQnkob2JqZWN0SWQs IGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJhcyIpID09IDApCisJ CQluZXdlbG0gPSBkZXBhcnNlX1NlcV9BcyhlbGVtKTsKKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwg ImludmFsaWQgc2VxdWVuY2Ugb3B0aW9uICVzIiwgZWxlbS0+ZGVmbmFtZSk7CisKKwkJZWxlbXMg PSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBTRVFVRU5DRSAle2lkZW50aXR5fUQgJXtkZWZpbml0aW9uOiB9cyIsIDIsCisJCQkJCQkg ImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpLAorCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlw ZUFycmF5LCBlbGVtcyk7CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOwor CXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJUeXBlU3RtdC4KKyAqCisgKiBHaXZlbiBh IHR5cGUgT0lEIGFuZCBhIHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9i alRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgdHlwZS4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogQUxURVIgVFlQRSAle2lkZW50aXR5fUQgKCV7ZGVmaW5pdGlvbjogfXMpCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJUeXBlU2V0U3RtdChPaWQgb2JqZWN0SWQs IE5vZGUgKmNtZCkKK3sKKwlBbHRlclR5cGVTdG10ICphbHRlclR5cGVTZXRTdG10ID0gKEFsdGVy VHlwZVN0bXQgKikgY21kOworCUxpc3RDZWxsICAgKnBsOworCUxpc3QJICAgKmVsZW1zID0gTklM OworCUhlYXBUdXBsZQl0eXBUdXA7CisJRm9ybV9wZ190eXBlIHR5cEZvcm07CisKKwl0eXBUdXAg PSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXBUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0eXBGb3JtID0g KEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cFR1cCk7CisKKwlmb3JlYWNoKHBsLCBhbHRlclR5 cGVTZXRTdG10LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZGVmZWwgPSAoRGVmRWxlbSAq KSBsZmlyc3QocGwpOworCQlPYmpFbGVtICAgICpuZXdlbG07CisKKwkJaWYgKHN0cmNtcChkZWZl bC0+ZGVmbmFtZSwgInN0b3JhZ2UiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N0 b3JhZ2UodHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJyZWNlaXZlIikg PT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9SZWNlaXZlKHR5cEZvcm0pOworCQlpZiAo c3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2VuZCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNl X1R5cGVfU2VuZCh0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInR5cG1v ZF9pbiIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfVHlwbW9kX0luKHR5cEZvcm0p OworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHlwbW9kX291dCIpID09IDApCisJCQlu ZXdlbG0gPSBkZXBhcnNlX1R5cGVfVHlwbW9kX091dCh0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChk ZWZlbC0+ZGVmbmFtZSwgImFuYWx5emUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBl X0FuYWx5emUodHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdWJzY3Jp cHQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N1YnNjcmlwdCh0eXBGb3JtKTsK KwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgdHlwZSBvcHRpb24gJXMiLCBkZWZlbC0+ ZGVmbmFtZSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKworCVJl bGVhc2VTeXNDYWNoZSh0eXBUdXApOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBU WVBFICV7aWRlbnRpdHl9RCBTRVQgKCV7ZGVmaW5pdGlvbjogfXMpIiwgMiwKKwkJCQkJCSAgImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSAgb2JqZWN0SWQpLAorCQkJCQkJICAi ZGVmaW5pdGlvbiIsIE9ialR5cGVBcnJheSwgZWxlbXMpOworfQorCisvKgorICogRGVwYXJzZSBh IENvbXBvc2l0ZVR5cGVTdG10IChDUkVBVEUgVFlQRSBBUykKKyAqCisgKiBHaXZlbiBhIENvbXBv c2l0ZSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4g YW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAq IFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQgQVMgKCV7Y29sdW1u czosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbXBvc2l0ZVR5cGVTdG10 KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNvbXBvc2l0ZVR5cGVTdG10ICpu b2RlID0gKENvbXBvc2l0ZVR5cGVTdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJdHlwdHVw OworCUZvcm1fcGdfdHlwZSB0eXBmb3JtOworCVJlbGF0aW9uCXR5cGVyZWw7CisJTGlzdAkgICAq ZHBjb250ZXh0OworCUxpc3QJICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCS8qIEZpbmQgdGhlIHBn X3R5cGUgZW50cnkgYW5kIG9wZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVsYXRpb24gKi8KKwl0eXB0 dXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXB0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0eXBmb3Jt ID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cHR1cCk7CisJdHlwZXJlbCA9IHJlbGF0aW9u X29wZW4odHlwZm9ybS0+dHlwcmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlkcGNvbnRleHQg PSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHR5cGVyZWwpLAor CQkJCQkJCQkJUmVsYXRpb25HZXRSZWxpZCh0eXBlcmVsKSk7CisKKwl0YWJsZWVsdHMgPSBkZXBh cnNlX1RhYmxlRWxlbWVudHModHlwZXJlbCwgbm9kZS0+Y29sZGVmbGlzdCwgZHBjb250ZXh0LAor CQkJCQkJCQkJICBmYWxzZSwJLyogbm90IHR5cGVkICovCisJCQkJCQkJCQkgIHRydWUpOwkvKiBj b21wb3NpdGUgdHlwZSAqLworCisJdGFibGVfY2xvc2UodHlwZXJlbCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwlSZWxlYXNlU3lzQ2FjaGUodHlwdHVwKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgi Q1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFTICgle2NvbHVtbnM6LCB9cykiLCAyLAorCQkJCQkJ ICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIG9iamVjdElkKSwKKwkJCQkJCSAgImNvbHVtbnMiLCBP YmpUeXBlQXJyYXksIHRhYmxlZWx0cyk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlQ29u dmVyc2lvblN0bXQKKyAqCisgKiBHaXZlbiBhIGNvbnZlcnNpb24gT0lEIGFuZCB0aGUgcGFyc2Ug dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAl e2RlZmF1bHR9cyBDT05WRVJTSU9OICV7aWRlbnRpdHl9RCBGT1IgJXtzb3VyY2V9TCBUTyAle2Rl c3R9TAorICogRlJPTSAle2Z1bmN0aW9ufUQKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9DcmVhdGVDb252ZXJzaW9uKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhl YXBUdXBsZQljb25UdXA7CisJUmVsYXRpb24JY29udnJlbDsKKwlGb3JtX3BnX2NvbnZlcnNpb24g Y29uRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisKKwljb252cmVsID0gdGFibGVfb3BlbihDb252 ZXJzaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwljb25UdXAgPSBnZXRfY2F0YWxv Z19vYmplY3RfYnlfb2lkKGNvbnZyZWwsIEFudW1fcGdfY29udmVyc2lvbl9vaWQsIG9iamVjdElk KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29uVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIGNvbnZlcnNpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJ Y29uRm9ybSA9IChGb3JtX3BnX2NvbnZlcnNpb24pIEdFVFNUUlVDVChjb25UdXApOworCisJcmV0 ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSAle2RlZmF1bHR9cyBDT05WRVJTSU9OICV7aWRlbnRp dHl9RCBGT1IgJXtzb3VyY2V9TCBUTyAle2Rlc3R9TCBGUk9NICV7ZnVuY3Rpb259RCIsIDUsCisJ CQkJCQkgICJkZWZhdWx0IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgY29uRm9ybS0+Y29uZGVm YXVsdCA/ICJERUZBVUxUIiA6ICIiLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoY29uRm9ybS0+Y29ubmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihjb25Gb3JtLT5jb25uYW1lKSksCisJCQkJCQkgICJz b3VyY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICAoY2hhciAqKXBnX2VuY29kaW5nX3RvX2No YXIoY29uRm9ybS0+Y29uZm9yZW5jb2RpbmcpLAorCQkJCQkJICAiZGVzdCIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkgIChjaGFyICopcGdfZW5jb2RpbmdfdG9fY2hhcihjb25Gb3JtLT5jb250b2Vu Y29kaW5nKSwKKwkJCQkJCSAgImZ1bmN0aW9uIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJICBjb25Gb3JtLT5jb25wcm9jKSk7CisKKwl0YWJsZV9jbG9zZShjb252cmVsLCBBY2Nlc3NT aGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVF bnVtU3RtdCAoQ1JFQVRFIFRZUEUgQVMgRU5VTSkKKyAqCisgKiBHaXZlbiBhIEVudW0gdHlwZSBP SUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUK KyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFTIEVOVU0gKCV7dmFsdWVzOiwgfUwp CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRW51bVN0bXQoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRW51bVN0bXQgKm5vZGUgPSAoQ3JlYXRl RW51bVN0bXQgKikgcGFyc2V0cmVlOworCUxpc3QJICAgKnZhbHVlcyA9IE5JTDsKKwlMaXN0Q2Vs bCAgICpjZWxsOworCisJZm9yZWFjaChjZWxsLCBub2RlLT52YWxzKQorCQl2YWx1ZXMgPSBsYXBw ZW5kKHZhbHVlcywgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKGxmaXJzdF9ub2RlKFN0cmluZywg Y2VsbCkpKSk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFICV7aWRlbnRp dHl9RCBBUyBFTlVNICgle3ZhbHVlczosIH1MKSIsIDIsCisJCQkJCQkgICJpZGVudGl0eSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVs YXRpb25JZCwgb2JqZWN0SWQpLAorCQkJCQkJICAidmFsdWVzIiwgT2JqVHlwZUFycmF5LCB2YWx1 ZXMpOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUV4dGVuc2lvblN0bXQKKyAqCisgKiBH aXZlbiBhbiBleHRlbnNpb24gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQu CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBFWFRFTlNJT04gJXtpZl9ub3RfZXhp c3RzfXMgJXtuYW1lfUkgJXtvcHRpb25zOiB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0NyZWF0ZUV4dGVuc2lvblN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJQ3JlYXRlRXh0ZW5zaW9uU3RtdCAqbm9kZSA9IChDcmVhdGVFeHRlbnNpb25TdG10ICopIHBh cnNldHJlZTsKKwlSZWxhdGlvbglwZ19leHRlbnNpb247CisJSGVhcFR1cGxlCWV4dFR1cDsKKwlG b3JtX3BnX2V4dGVuc2lvbiBleHRGb3JtOworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICps aXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlwZ19leHRlbnNpb24gPSB0YWJsZV9v cGVuKEV4dGVuc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZXh0VHVwID0gZ2V0 X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ19leHRlbnNpb24sIEFudW1fcGdfZXh0ZW5zaW9uX29p ZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChleHRUdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZXh0ZW5zaW9uIHdpdGggT0lEICV1Iiwgb2Jq ZWN0SWQpOworCWV4dEZvcm0gPSAoRm9ybV9wZ19leHRlbnNpb24pIEdFVFNUUlVDVChleHRUdXAp OworCisJLyogTGlzdCBvZiBvcHRpb25zICovCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25z KQorCXsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJ CWlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAic2NoZW1hIikgPT0gMCkKKwkJeworCQkJLyogU2tp cCB0aGlzIG9uZTsgd2UgYWRkIG9uZSB1bmNvbmRpdGlvbmFsbHkgYmVsb3cgKi8KKwkJCWNvbnRp bnVlOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJuZXdfdmVyc2lvbiIp ID09IDApCisJCXsKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWRVJTSU9OICV7dmVyc2lvbn1M IiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZlcnNpb24iLAorCQkJCQkJ CQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmcob3B0KSk7CisJCQlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQllbHNlIGlm IChzdHJjbXAob3B0LT5kZWZuYW1lLCAib2xkX3ZlcnNpb24iKSA9PSAwKQorCQl7CisJCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiRlJPTSAle3ZlcnNpb259TCIsIDIsCisJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJmcm9tIiwKKwkJCQkJCQkJICJ2ZXJzaW9uIiwgT2JqVHlwZVN0cmlu ZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVk IG9wdGlvbiAlcyIsIG9wdC0+ZGVmbmFtZSk7CisJfQorCisJLyogQWRkIHRoZSBTQ0hFTUEgb3B0 aW9uICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNDSEVNQSAle3NjaGVtYX1JIiwgMiwKKwkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzY2hlbWEiLAorCQkJCQkJICJzY2hlbWEiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9uYW1lc3BhY2VfbmFtZShleHRGb3JtLT5leHRuYW1l c3BhY2UpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK Kwl0YWJsZV9jbG9zZShwZ19leHRlbnNpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4g bmV3X29ianRyZWVfVkEoIkNSRUFURSBFWFRFTlNJT04gJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1l fUkgJXtvcHRpb25zOiB9cyIsIDMsCisJCQkJCQkgICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCSAgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIi LAorCQkJCQkJICAibmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPmV4dG5hbWUsCisJCQkJCQkg ICJvcHRpb25zIiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKK30KKworLyoKKyAqIElmIGEgY29sdW1u IG5hbWUgaXMgc3BlY2lmaWVkLCBhZGQgYW4gZWxlbWVudCBmb3IgaXQ7IG90aGVyd2lzZSBpdCdz IGEKKyAqIHRhYmxlLWxldmVsIG9wdGlvbi4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9GZHdPcHRpb25zKExpc3QgKm9wdGlvbnMsIGNoYXIgKmNvbG5hbWUpCit7CisJT2JqVHJlZSAg ICAqcmV0OworCisJaWYgKGNvbG5hbWUpCisJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBD T0xVTU4gJXtjb2x1bW59SSIsIDEsCisJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBj b2xuYW1lKTsKKwllbHNlCisJCXJldCA9IG5ld19vYmp0cmVlKCJPUFRJT05TIik7CisKKwlpZiAo b3B0aW9ucyAhPSBOSUwpCisJeworCQlMaXN0CSAgICpvcHRvdXQgPSBOSUw7CisJCUxpc3RDZWxs ICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCBvcHRpb25zKQorCQl7CisJCQlEZWZFbGVtICAg ICplbGVtOworCQkJT2JqVHJlZSAgICAqb3B0OworCisJCQllbGVtID0gKERlZkVsZW0gKikgbGZp cnN0KGNlbGwpOworCisJCQlzd2l0Y2ggKGVsZW0tPmRlZmFjdGlvbikKKwkJCXsKKwkJCQljYXNl IERFRkVMRU1fVU5TUEVDOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiJXtsYWJlbH1JICV7 dmFsdWV9TCIsIDIsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcsIGVsZW0tPmRl Zm5hbWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGVs ZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJCQkJIGRlZkdldEJvb2xlYW4o ZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBERUZFTEVN X1NFVDoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIlNFVCAle2xhYmVsfUkgJXt2YWx1ZX1M IiwgMiwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ZGVmbmFtZSwK KwkJCQkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgZWxlbS0+YXJn ID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVtKSA/ ICJUUlVFIiA6ICJGQUxTRSIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIERFRkVMRU1fQUREOgor CQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiQUREICV7bGFiZWx9SSAle3ZhbHVlfUwiLCAyLAor CQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lLAorCQkJCQkJ CQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBlbGVtLT5hcmcgPyBkZWZH ZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRSVUUi IDogIkZBTFNFIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgREVGRUxFTV9EUk9QOgorCQkJCQlv cHQgPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCAle2xhYmVsfUkiLCAxLAorCQkJCQkJCQkJCSAibGFi ZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVm YXVsdDoKKwkJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgZGVmIGFjdGlvbiAlZCIsIGVsZW0tPmRl ZmFjdGlvbik7CisJCQkJCW9wdCA9IE5VTEw7CisJCQl9CisKKwkJCW9wdG91dCA9IGxhcHBlbmQo b3B0b3V0LCBuZXdfb2JqZWN0X29iamVjdChvcHQpKTsKKwkJfQorCisJCWFwcGVuZF9hcnJheV9v YmplY3QocmV0LCAiKCV7b3B0aW9uOiAsfXMpIiwgb3B0b3V0KTsKKwl9CisJZWxzZQorCQlhcHBl bmRfbm90X3ByZXNlbnQocmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQ3JlYXRlRmR3U3RtdCAoQ1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSKQorICoKKyAqIEdp dmVuIGFuIEZEVyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJu IGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSICV7aWRlbnRp dHl9SSAle2hhbmRsZXJ9cyAle3ZhbGlkYXRvcn1zICV7Z2VuZXJpY19vcHRpb25zfXMKKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGZHdTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZkd1N0bXQgKm5vZGUgPSAoQ3JlYXRlRmR3U3RtdCAq KSBwYXJzZXRyZWU7CisJSGVhcFR1cGxlCWZkd1R1cDsKKwlGb3JtX3BnX2ZvcmVpZ25fZGF0YV93 cmFwcGVyIGZkd0Zvcm07CisJUmVsYXRpb24JcmVsOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpU cmVlICAgICp0bXA7CisKKwlyZWwgPSB0YWJsZV9vcGVuKEZvcmVpZ25EYXRhV3JhcHBlclJlbGF0 aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJZmR3VHVwID0gU2VhcmNoU3lzQ2FjaGUxKEZP UkVJR05EQVRBV1JBUFBFUk9JRCwKKwkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChmZHdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgZm9yZWlnbi1kYXRhIHdyYXBwZXIgd2l0aCBPSUQgJXUiLAorCQkJ IG9iamVjdElkKTsKKworCWZkd0Zvcm0gPSAoRm9ybV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlcikg R0VUU1RSVUNUKGZkd1R1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIEZPUkVJ R04gREFUQSBXUkFQUEVSICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2Jq VHlwZVN0cmluZywgTmFtZVN0cihmZHdGb3JtLT5mZHduYW1lKSk7CisKKwkvKiBBZGQgSEFORExF UiBjbGF1c2UgKi8KKwlpZiAoIU9pZElzVmFsaWQoZmR3Rm9ybS0+ZmR3aGFuZGxlcikpCisJCXRt cCA9IG5ld19vYmp0cmVlKCJOTyBIQU5ETEVSIik7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29i anRyZWVfVkEoIkhBTkRMRVIgJXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJICJwcm9jZWR1cmUi LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJv Y2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGZkd0Zvcm0tPmZkd2hhbmRsZXIpKTsK Kwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtoYW5kbGVyfXMiLCB0bXApOworCisJ LyogQWRkIFZBTElEQVRPUiBjbGF1c2UgKi8KKwlpZiAoIU9pZElzVmFsaWQoZmR3Rm9ybS0+ZmR3 dmFsaWRhdG9yKSkKKwkJdG1wID0gbmV3X29ianRyZWUoIk5PIFZBTElEQVRPUiIpOworCWVsc2UK Kwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFUT1IgJXtwcm9jZWR1cmV9RCIsIDEs CisJCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGZk d0Zvcm0tPmZkd3ZhbGlkYXRvcikpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIl e3ZhbGlkYXRvcn1zIiwgdG1wKTsKKworCS8qIEFkZCBhbiBPUFRJT05TIGNsYXVzZSwgaWYgYW55 ICovCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtnZW5lcmljX29wdGlvbnN9cyIsCisJ CQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsKKworCVJlbGVh c2VTeXNDYWNoZShmZHdUdXApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7 CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckZkd1N0bXQgKEFM VEVSIEZPUkVJR04gREFUQSBXUkFQUEVSKQorICoKKyAqIEdpdmVuIGFuIEZEVyBPSUQgYW5kIHRo ZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJl c2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxU RVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JICV7ZmR3X29wdGlvbnM6IH1zICV7 Z2VuZXJpY19vcHRpb25zfUQKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckZk d1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJGZHdTdG10ICpu b2RlID0gKEFsdGVyRmR3U3RtdCAqKSBwYXJzZXRyZWU7CisJSGVhcFR1cGxlCWZkd1R1cDsKKwlG b3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyIGZkd0Zvcm07CisJUmVsYXRpb24JcmVsOworCU9i alRyZWUgICAgKnJldDsKKwlMaXN0CSAgICpmZHdfb3B0aW9ucyA9IE5JTDsKKwlMaXN0Q2VsbCAg ICpjZWxsOworCisJcmVsID0gdGFibGVfb3BlbihGb3JlaWduRGF0YVdyYXBwZXJSZWxhdGlvbklk LCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCWZkd1R1cCA9IFNlYXJjaFN5c0NhY2hlMShGT1JFSUdO REFUQVdSQVBQRVJPSUQsCisJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQoZmR3VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIGZvcmVpZ24tZGF0YSB3cmFwcGVyIHdpdGggT0lEICV1IiwKKwkJCSBvYmpl Y3RJZCk7CisKKwlmZHdGb3JtID0gKEZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIpIEdFVFNU UlVDVChmZHdUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIEZPUkVJR04gREFU QSBXUkFQUEVSICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0 cmluZywgTmFtZVN0cihmZHdGb3JtLT5mZHduYW1lKSk7CisKKwkvKgorCSAqIEl0ZXJhdGUgdGhy b3VnaCBvcHRpb25zLCB0byBzZWUgd2hhdCBjaGFuZ2VkLCBidXQgdXNlIGNhdGFsb2cgYXMgYQor CSAqIGJhc2lzIGZvciBuZXcgdmFsdWVzLgorCSAqLworCWZvcmVhY2goY2VsbCwgbm9kZS0+ZnVu Y19vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbTsKKwkJT2JqVHJlZSAgICAqdG1wOwor CisJCWVsZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKHBnX3N0cmNhc2VjbXAoZWxlbS0+ZGVm bmFtZSwgImhhbmRsZXIiKSA9PSAwKQorCQl7CisJCQkvKiBhZGQgSEFORExFUiBjbGF1c2UgKi8K KwkJCWlmICghT2lkSXNWYWxpZChmZHdGb3JtLT5mZHdoYW5kbGVyKSkKKwkJCQl0bXAgPSBuZXdf b2JqdHJlZSgiTk8gSEFORExFUiIpOworCQkJZWxzZQorCQkJeworCQkJCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJIQU5ETEVSICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCQkJICJwcm9jZWR1cmUi LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHdoYW5kbGVyKSk7CisJCQl9CisJCQlm ZHdfb3B0aW9ucyA9IGxhcHBlbmQoZmR3X29wdGlvbnMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCQl9CisJCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZWxlbS0+ZGVmbmFtZSwgInZhbGlkYXRv ciIpID09IDApCisJCXsKKwkJCS8qIGFkZCBWQUxJREFUT1IgY2xhdXNlICovCisJCQlpZiAoIU9p ZElzVmFsaWQoZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yKSkKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZSgi Tk8gVkFMSURBVE9SIik7CisJCQllbHNlCisJCQl7CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEo IlZBTElEQVRPUiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkJCSAicHJvY2VkdXJlIiwKKwkJ CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yKSk7CisJCQl9CisJCQlmZHdf b3B0aW9ucyA9IGxhcHBlbmQoZmR3X29wdGlvbnMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CQl9CisJfQorCisJLyogQWRkIEhBTkRMRVIvVkFMSURBVE9SIGlmIHNwZWNpZmllZCAqLworCWFw cGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtmZHdfb3B0aW9uczogfXMiLCBmZHdfb3B0aW9ucyk7 CisKKwkvKiBBZGQgYW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIiV7Z2VuZXJpY19vcHRpb25zfUQiLAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0 aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZmR3VHVwKTsK Kwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHJldDsKK30K KworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVFlQRSBBUyBSQU5HRSBzdGF0ZW1lbnQKKyAqCisg KiBHaXZlbiBhIFJhbmdlIHR5cGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1h bmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBUWVBFICV7aWRlbnRpdHl9RCBB UyBSQU5HRSAoJXtkZWZpbml0aW9uOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQ3JlYXRlUmFuZ2VTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9i alRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpkZWZpbml0aW9uID0gTklMOworCVJlbGF0aW9uCXBn X3JhbmdlOworCUhlYXBUdXBsZQlyYW5nZVR1cDsKKwlGb3JtX3BnX3JhbmdlIHJhbmdlRm9ybTsK KwlTY2FuS2V5RGF0YSBrZXlbMV07CisJU3lzU2NhbkRlc2Mgc2NhbjsKKworCXBnX3JhbmdlID0g dGFibGVfb3BlbihSYW5nZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJU2Nhbktl eUluaXQoJmtleVswXSwKKwkJCQlBbnVtX3BnX3JhbmdlX3JuZ3R5cGlkLAorCQkJCUJURXF1YWxT dHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7 CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3JhbmdlLCBSYW5nZVR5cGlkSW5kZXhJ ZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDEsIGtleSk7CisKKwlyYW5nZVR1cCA9IHN5c3RhYmxl X2dldG5leHQoc2Nhbik7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJhbmdlVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJhbmdlIHdpdGggdHlwZSBPSUQgJXUi LAorCQkJIG9iamVjdElkKTsKKworCXJhbmdlRm9ybSA9IChGb3JtX3BnX3JhbmdlKSBHRVRTVFJV Q1QocmFuZ2VUdXApOworCisJLyogU1VCVFlQRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJT VUJUWVBFID0gJXt0eXBlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi c3VidHlwZSIsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwgcmFuZ2VGb3JtLT5ybmdzdWJ0eXBl KSk7CisJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisKKwkvKiBTVUJUWVBFX09QQ0xBU1MgKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZv cm0tPnJuZ3N1Ym9wYykpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRV9PUENM QVNTID0gJXtvcGNsYXNzfUQiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg Im9wY2xhc3MiLAorCQkJCQkJCSAib3BjbGFzcyIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvckNsYXNzUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJIHJhbmdlRm9ybS0+cm5nc3Vib3BjKSk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5k KGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIENPTExBVElP TiAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nY29sbGF0aW9uKSkKKwl7CisJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRJT04gPSAle2NvbGxhdGlvbn1EIiwgMiwKKwkJCQkJ CQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xsYXRpb24iLAorCQkJCQkJCSAiY29sbGF0 aW9uIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSByYW5nZUZvcm0tPnJuZ2NvbGxh dGlvbikpOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKwl9CisKKwkvKiBDQU5PTklDQUwgKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5n ZUZvcm0tPnJuZ2Nhbm9uaWNhbCkpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FOT05J Q0FMID0gJXtjYW5vbmljYWx9RCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAiY2Fub25pY2FsIiwKKwkJCQkJCQkgImNhbm9uaWNhbCIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkgcmFuZ2VGb3JtLT5ybmdjYW5vbmljYWwpKTsKKwkJZGVmaW5pdGlvbiA9IGxh cHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogU1VC VFlQRV9ESUZGICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdzdWJkaWZmKSkKKwl7 CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFX0RJRkYgPSAle3N1YnR5cGVfZGlmZn1E IiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdWJ0eXBlX2RpZmYiLAor CQkJCQkJCSAic3VidHlwZV9kaWZmIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBy YW5nZUZvcm0tPnJuZ3N1YmRpZmYpKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlv biwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2Fu KTsKKwl0YWJsZV9jbG9zZShwZ19yYW5nZSwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4g bmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFICV7aWRlbnRpdHl9RCBBUyBSQU5HRSAoJXtkZWZp bml0aW9uOiwgfXMpIiwgMiwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLCBvYmplY3RJ ZCksCisJCQkJCQkgICJkZWZpbml0aW9uIiwgT2JqVHlwZUFycmF5LCBkZWZpbml0aW9uKTsKK30K KworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJFbnVtU3RtdC4KKyAqCisgKiBHaXZlbiBhbiBlbnVt IE9JRCBhbmQgYSBwYXJzZSB0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVl CisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIEFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIEFERCBWQUxVRSAle2lmX25vdF9leGlzdHN9cyAl e3ZhbHVlfUwKKyAqICV7YWZ0ZXJfb3JfYmVmb3JlfXMgJXtuZWlnaGJvcn1MCisgKiAJT1IKKyAq IEFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIFJFTkFNRSBWQUxVRSAle3ZhbHVlfUwgVE8gJXtuZXd2 YWx1ZX1MCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJFbnVtU3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckVudW1TdG10ICpub2RlID0gKEFs dGVyRW51bVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5l d19vYmp0cmVlX1ZBKCJBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkgImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo VHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwlpZiAoIW5vZGUt Pm9sZFZhbCkKKwl7CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgIkFERCBWQUxVRSIpOwor CQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2lmX25vdF9leGlzdHN9cyIsICJpZl9ub3Rf ZXhpc3RzIiwKKwkJCQkJCQkgbm9kZS0+c2tpcElmTmV3VmFsRXhpc3RzID8gIklGIE5PVCBFWElT VFMiIDogIiIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7dmFsdWV9TCIsICJ2 YWx1ZSIsIG5vZGUtPm5ld1ZhbCk7CisKKwkJaWYgKG5vZGUtPm5ld1ZhbE5laWdoYm9yKQorCQl7 CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2FmdGVyX29yX2JlZm9yZX1zIiwKKwkJ CQkJCQkJICJhZnRlcl9vcl9iZWZvcmUiLAorCQkJCQkJCQkgbm9kZS0+bmV3VmFsSXNBZnRlciA/ ICJBRlRFUiIgOiAiQkVGT1JFIik7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle25l aWdoYm9yfUwiLCAibmVpZ2hib3IiLAorCQkJCQkJCQkgbm9kZS0+bmV3VmFsTmVpZ2hib3IpOwor CQl9CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlJFTkFNRSBW QUxVRSAle3ZhbHVlfUwgVE8iLCAidmFsdWUiLAorCQkJCQkJCSBub2RlLT5vbGRWYWwpOworCQlh cHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle25ld3ZhbHVlfUwiLCAibmV3dmFsdWUiLCBub2Rl LT5uZXdWYWwpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFs dGVyRXh0ZW5zaW9uU3RtdCAoQUxURVIgRVhURU5TSU9OIC4uIFVQREFURSBUTyBWRVJTSU9OKQor ICoKKyAqIEdpdmVuIGFuIGV4dGVuc2lvbiBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1vZGlm aWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0eXBl LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBFWFRFTlNJT04gJXtpZGVudGl0eX1J IFVQREFURSAle29wdGlvbnM6IH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0 ZXJFeHRlbnNpb25TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVy RXh0ZW5zaW9uU3RtdCAqbm9kZSA9IChBbHRlckV4dGVuc2lvblN0bXQgKikgcGFyc2V0cmVlOwor CVJlbGF0aW9uCXBnX2V4dGVuc2lvbjsKKwlIZWFwVHVwbGUJZXh0VHVwOworCUZvcm1fcGdfZXh0 ZW5zaW9uIGV4dEZvcm07CisJT2JqVHJlZSAgICAqcmV0OworCUxpc3QJICAgKmxpc3QgPSBOSUw7 CisJTGlzdENlbGwgICAqY2VsbDsKKwlEZWZFbGVtICAgICpkX25ld192ZXJzaW9uID0gTlVMTDsK KworCXBnX2V4dGVuc2lvbiA9IHRhYmxlX29wZW4oRXh0ZW5zaW9uUmVsYXRpb25JZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwlleHRUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX2V4dGVu c2lvbiwgQW51bV9wZ19leHRlbnNpb25fb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKGV4dFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBl eHRlbnNpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlleHRGb3JtID0gKEZvcm1f cGdfZXh0ZW5zaW9uKSBHRVRTVFJVQ1QoZXh0VHVwKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+ b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxs KTsKKworCQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm5ld192ZXJzaW9uIikgPT0gMCkKKwkJ eworCQkJT2JqVHJlZSAgICAqdG1wOworCisJCQlpZiAoZF9uZXdfdmVyc2lvbikKKwkJCQllbG9n KEVSUk9SLCAiY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IG9wdGlvbnMgZm9yIGV4dGVuc2lvbiB3 aXRoIE9JRCAldSIsCisJCQkJCSBvYmplY3RJZCk7CisKKwkJCWRfbmV3X3ZlcnNpb24gPSBvcHQ7 CisKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUTyAle3ZlcnNpb259TCIsIDIsCisJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2ZXJzaW9uIiwKKwkJCQkJCQkJICJ2ZXJzaW9uIiwg T2JqVHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwg InVuc3VwcG9ydGVkIG9wdGlvbiAlcyIsIG9wdC0+ZGVmbmFtZSk7CisJfQorCisJcmV0ID0gbmV3 X29ianRyZWVfVkEoIkFMVEVSIEVYVEVOU0lPTiAle2lkZW50aXR5fUkgVVBEQVRFICV7b3B0aW9u czogfXMiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoZXh0 Rm9ybS0+ZXh0bmFtZSksCisJCQkJCQkgIm9wdGlvbnMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOwor CisJdGFibGVfY2xvc2UocGdfZXh0ZW5zaW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJu IHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQg KEFMVEVSIEVYVEVOU0lPTiBleHQgQUREL0RST1Agb2JqZWN0KQorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBBTFRFUiBFWFRFTlNJT04gJXtleHRpZGVudGl0eX1JIEFERC9EUk9QICV7b2JqaWRl bnRpdHl9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uQ29u dGVudHNTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJCQkgICBPYmpl Y3RBZGRyZXNzIG9iamVjdEFkZHJlc3MpCit7CisJQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQg Km5vZGUgPSAoQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQgKikgcGFyc2V0cmVlOworCisJQXNz ZXJ0KG5vZGUtPmFjdGlvbiA9PSArMSB8fCBub2RlLT5hY3Rpb24gPT0gLTEpOworCisJcmV0dXJu IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBFWFRFTlNJT04gJXtleHRpZGVudGl0eX1JICV7ZXh0b3B0 aW9ufXMgJXtleHRvYmp0eXBlfXMgJXtvYmppZGVudGl0eX1zIiwgNCwKKwkJCQkJCSAgImV4dGlk ZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ZXh0bmFtZSwKKwkJCQkJCSAgImV4dG9wdGlv biIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIG5vZGUtPmFjdGlvbiA9PSArMSA/ICJBREQiIDog IkRST1AiLAorCQkJCQkJICAiZXh0b2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIHN0 cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9ianR5cGUsIGZhbHNlKSwKKwkJCQkJCSAgIm9iamlkZW50 aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgZ2V0T2JqZWN0SWRlbnRpdHkoJm9iamVjdEFk ZHJlc3MsIGZhbHNlKSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIENyZWF0ZUNhc3RTdG10Lgor ICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCBhIHBhcnNlIHRyZWUgdGhhdCBtb2RpZmll ZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29t bWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIENBU1QgKCV7c291cmNldHlw ZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSAle21lY2hhbmlzbX1zICV7Y29udGV4dH1zCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlQ2FzdFN0bXQoT2lkIG9iamVjdElkLCBOb2Rl ICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlQ2FzdFN0bXQgKm5vZGUgPSAoQ3JlYXRlQ2FzdFN0bXQg KikgcGFyc2V0cmVlOworCVJlbGF0aW9uCWNhc3RyZWw7CisJSGVhcFR1cGxlCWNhc3RUdXA7CisJ Rm9ybV9wZ19jYXN0IGNhc3RGb3JtOworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICpjb250 ZXh0OworCisJY2FzdHJlbCA9IHRhYmxlX29wZW4oQ2FzdFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJY2FzdFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY2FzdHJlbCwgQW51 bV9wZ19jYXN0X29pZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjYXN0VHVw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNhc3Qgd2l0aCBPSUQg JXUiLCBvYmplY3RJZCk7CisJY2FzdEZvcm0gPSAoRm9ybV9wZ19jYXN0KSBHRVRTVFJVQ1QoY2Fz dFR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIENBU1QgKCV7c291cmNldHlw ZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSIsIDIsCisJCQkJCQkgInNvdXJjZXR5cGUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0c291cmNl LCAtMSksCisJCQkJCQkgInRhcmdldHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0dGFyZ2V0LCAtMSkpOworCisJaWYgKG5vZGUt Pmlub3V0KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle21lY2hhbmlzbX1zIiwgIm1l Y2hhbmlzbSIsCisJCQkJCQkJICJXSVRIIElOT1VUIik7CisJZWxzZSBpZiAobm9kZS0+ZnVuYyA9 PSBOVUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle21lY2hhbmlzbX1zIiwgIm1l Y2hhbmlzbSIsCisJCQkJCQkJICJXSVRIT1VUIEZVTkNUSU9OIik7CisJZWxzZQorCXsKKwkJT2Jq VHJlZSAgICAqdG1wX29iajsKKwkJU3RyaW5nSW5mb0RhdGEgZnVuYzsKKwkJSGVhcFR1cGxlCWZ1 bmNUdXA7CisJCUZvcm1fcGdfcHJvYyBmdW5jRm9ybTsKKwkJaW50CQkJaTsKKworCQlmdW5jVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIGNhc3RGb3JtLT5jYXN0ZnVuYyk7CisJCWZ1bmNG b3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKGZ1bmNUdXApOworCisJCWluaXRTdHJpbmdJ bmZvKCZmdW5jKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmZnVuYywgIiVzKCIsCisJCQkJCQkgcXVv dGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKGZ1bmNGb3JtLT5wcm9u YW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJCU5hbWVTdHIoZnVuY0Zvcm0tPnByb25hbWUpKSk7CisJ CWZvciAoaSA9IDA7IGkgPCBmdW5jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJaWYgKGkg IT0gMCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZnVuYywgJywnKTsKKworCQkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmZnVuYywKKwkJCQkJCQkJICAgZm9ybWF0X3R5cGVfYmVfcXVhbGlm aWVkKGZ1bmNGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0pKTsKKwkJfQorCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcigmZnVuYywgJyknKTsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIldJ VEggRlVOQ1RJT04gJXtjYXN0ZnVuY3Rpb259cyIsIDEsCisJCQkJCQkJCSJjYXN0ZnVuY3Rpb24i LCBPYmpUeXBlU3RyaW5nLCBmdW5jLmRhdGEpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQs ICIle21lY2hhbmlzbX1zIiwgdG1wX29iaik7CisKKwkJUmVsZWFzZVN5c0NhY2hlKGZ1bmNUdXAp OworCX0KKworCXN3aXRjaCAobm9kZS0+Y29udGV4dCkKKwl7CisJCWNhc2UgQ09FUkNJT05fSU1Q TElDSVQ6CisJCQljb250ZXh0ID0gIkFTIElNUExJQ0lUIjsKKwkJCWJyZWFrOworCQljYXNlIENP RVJDSU9OX0FTU0lHTk1FTlQ6CisJCQljb250ZXh0ID0gIkFTIEFTU0lHTk1FTlQiOworCQkJYnJl YWs7CisJCWNhc2UgQ09FUkNJT05fRVhQTElDSVQ6CisJCQljb250ZXh0ID0gIiI7CisJCQlicmVh azsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIGNvZXJjaW9uIGNvZGUgJWMi LCBub2RlLT5jb250ZXh0KTsKKwkJCXJldHVybiBOVUxMOwkJLyoga2VlcCBjb21waWxlciBxdWll dCAqLworCX0KKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2NvbnRleHR9cyIsICJjb250 ZXh0IiwgY29udGV4dCk7CisKKwl0YWJsZV9jbG9zZShjYXN0cmVsLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgREVGQVVMVCBQ UklWSUxFR0VTIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgREVG QVVMVCBQUklWSUxFR0VTICV7aW5fc2NoZW1hfXMgJXtmb3Jfcm9sZXN9cyAle2dyYW50fXMKKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckRlZmF1bHRQcml2aWxlZ2VzU3RtdChD b2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZSAgICAqcmV0OworCUFsdGVyRGVmYXVs dFByaXZpbGVnZXNTdG10ICpzdG10ID0gKEFsdGVyRGVmYXVsdFByaXZpbGVnZXNTdG10ICopIGNt ZC0+cGFyc2V0cmVlOworCUxpc3QJICAgKnJvbGVzID0gTklMOworCUxpc3QJICAgKnNjaGVtYXMg PSBOSUw7CisJTGlzdAkgICAqZ3JhbnRlZXM7CisJTGlzdAkgICAqcHJpdnM7CisJTGlzdENlbGwg ICAqY2VsbDsKKwlPYmpUcmVlICAgICp0bXA7CisJT2JqVHJlZSAgICAqZ3JhbnQ7CisJY2hhcgkg ICAqb2JqdHlwZTsKKworCXJldCA9IG5ld19vYmp0cmVlKCJBTFRFUiBERUZBVUxUIFBSSVZJTEVH RVMiKTsKKworCS8qIFNjYW4gdGhlIHBhcnNlIG5vZGUgdG8gZGlnIG91dCB0aGUgRk9SIFJPTEUg YW5kIElOIFNDSEVNQSBjbGF1c2VzICovCisJZm9yZWFjaChjZWxsLCBzdG10LT5vcHRpb25zKQor CXsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlMaXN0 Q2VsbCAgICpjZWxsMjsKKworCQlBc3NlcnQoSXNBKG9wdCwgRGVmRWxlbSkpOworCQlBc3NlcnQo SXNBKG9wdC0+YXJnLCBMaXN0KSk7CisJCWlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAicm9sZXMi KSA9PSAwKQorCQl7CisJCQlmb3JlYWNoKGNlbGwyLCAoTGlzdCAqKSBvcHQtPmFyZykKKwkJCXsK KwkJCQlSb2xlU3BlYyAgICpyb2xlc3BlYyA9IGxmaXJzdChjZWxsMik7CisJCQkJT2JqVHJlZSAg ICAqb2JqID0gbmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKHJvbGVzcGVjKTsKKworCQkJCXJvbGVz ID0gbGFwcGVuZChyb2xlcywgbmV3X29iamVjdF9vYmplY3Qob2JqKSk7CisJCQl9CisJCX0KKwkJ ZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgInNjaGVtYXMiKSA9PSAwKQorCQl7CisJCQlm b3JlYWNoKGNlbGwyLCAoTGlzdCAqKSBvcHQtPmFyZykKKwkJCXsKKwkJCQlTdHJpbmcJICAgKnZh bCA9IGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbDIpOworCisJCQkJc2NoZW1hcyA9IGxhcHBlbmQo c2NoZW1hcywgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKHZhbCkpKTsKKwkJCX0KKwkJfQorCX0K KworCS8qIEFkZCB0aGUgSU4gU0NIRU1BIGNsYXVzZSwgaWYgYW55ICovCisJdG1wID0gbmV3X29i anRyZWUoIklOIFNDSEVNQSIpOworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wLCAiJXtzY2hlbWFz OiwgfUkiLCBzY2hlbWFzKTsKKwlpZiAoc2NoZW1hcyA9PSBOSUwpCisJCWFwcGVuZF9ub3RfcHJl c2VudCh0bXApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aW5fc2NoZW1hfXMiLCB0 bXApOworCisJLyogQWRkIHRoZSBGT1IgUk9MRSBjbGF1c2UsIGlmIGFueSAqLworCXRtcCA9IG5l d19vYmp0cmVlKCJGT1IgUk9MRSIpOworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wLCAiJXtyb2xl czosIH1SIiwgcm9sZXMpOworCWlmIChyb2xlcyA9PSBOSUwpCisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Zm9yX3JvbGVzfXMiLCB0bXAp OworCisJLyoKKwkgKiBBZGQgdGhlIEdSQU5UIHN1YmNvbW1hbmQKKwkgKiBWZXJib3NlIHN5bnRh eAorCSAqIEdSQU5UICV7cHJpdmlsZWdlczosIH1zIE9OICV7dGFyZ2V0fXMgVE8gJXtncmFudGVl czosIH1SICV7Z3JhbnRfb3B0aW9ufXMKKwkgKiBvcgorCSAqIFJFVk9LRSAle2dyYW50X29wdGlv bn1zICV7cHJpdmlsZWdlczosIH1zIE9OICV7dGFyZ2V0fXMgRlJPTSAle2dyYW50ZWVzOiwgfVIK KwkgKi8KKwlpZiAoc3RtdC0+YWN0aW9uLT5pc19ncmFudCkKKwkJZ3JhbnQgPSBuZXdfb2JqdHJl ZSgiR1JBTlQiKTsKKwllbHNlCisJeworCQlncmFudCA9IG5ld19vYmp0cmVlKCJSRVZPS0UiKTsK KworCQkvKiBBZGQgdGhlIEdSQU5UIE9QVElPTiBjbGF1c2UgZm9yIFJFVk9LRSBzdWJjb21tYW5k ICovCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJHUkFOVCBPUFRJT04gRk9SIiwgMSwKKwkJCQkJ CQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCQkgc3RtdC0+YWN0aW9uLT5ncmFudF9v cHRpb24pOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChncmFudCwgIiV7Z3JhbnRfb3B0aW9ufXMi LCB0bXApOworCX0KKworCS8qCisJICogQWRkIHRoZSBwcml2aWxlZ2VzIGxpc3QuICBUaGlzIHVz ZXMgdGhlIHBhcnNlciBzdHJ1Y3QsIGFzIG9wcG9zZWQgdG8KKwkgKiB0aGUgSW50ZXJuYWxHcmFu dCBmb3JtYXQgdXNlZCBieSBHUkFOVC4gIFRoZXJlIGFyZSBlbm91Z2ggb3RoZXIKKwkgKiBkaWZm ZXJlbmNlcyB0aGF0IHRoaXMgZG9lc24ndCBzZWVtIHdvcnRoIGltcHJvdmluZy4KKwkgKi8KKwlp ZiAoc3RtdC0+YWN0aW9uLT5wcml2aWxlZ2VzID09IE5JTCkKKwkJcHJpdnMgPSBsaXN0X21ha2Ux KG5ld19zdHJpbmdfb2JqZWN0KCJBTEwgUFJJVklMRUdFUyIpKTsKKwllbHNlCisJeworCQlwcml2 cyA9IE5JTDsKKworCQlmb3JlYWNoKGNlbGwsIHN0bXQtPmFjdGlvbi0+cHJpdmlsZWdlcykKKwkJ eworCQkJQWNjZXNzUHJpdiAqcHJpdiA9IGxmaXJzdChjZWxsKTsKKworCQkJQXNzZXJ0KHByaXYt PmNvbHMgPT0gTklMKTsKKwkJCXByaXZzID0gbGFwcGVuZChwcml2cywgbmV3X3N0cmluZ19vYmpl Y3QocHJpdi0+cHJpdl9uYW1lKSk7CisJCX0KKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGdy YW50LCAiJXtwcml2aWxlZ2VzOiwgfXMiLCBwcml2cyk7CisKKwlzd2l0Y2ggKGNtZC0+ZC5kZWZw cml2cy5vYmp0eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCQlvYmp0eXBlID0gIlRB QkxFUyI7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJCQlvYmp0eXBlID0g IkZVTkNUSU9OUyI7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfUk9VVElORToKKwkJCW9ianR5 cGUgPSAiUk9VVElORVMiOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQkJ b2JqdHlwZSA9ICJTRVFVRU5DRVMiOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1RZUEU6CisJ CQlvYmp0eXBlID0gIlRZUEVTIjsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJ CQlvYmp0eXBlID0gIlNDSEVNQVMiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVS Uk9SLCAiaW52YWxpZCBPQkpFQ1QgdmFsdWUgJWQgZm9yIGRlZmF1bHQgcHJpdmlsZWdlcyIsIGNt ZC0+ZC5kZWZwcml2cy5vYmp0eXBlKTsKKwl9CisKKwkvKiBBZGQgdGhlIHRhcmdldCBvYmplY3Qg dHlwZSAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50LCAiT04gJXt0YXJnZXR9cyIsICJ0 YXJnZXQiLCBvYmp0eXBlKTsKKworCS8qIEFkZCB0aGUgZ3JhbnRlZSBsaXN0ICovCisJZ3JhbnRl ZXMgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBzdG10LT5hY3Rpb24tPmdyYW50ZWVzKQorCXsKKwkJ Um9sZVNwZWMgICAqc3BlYyA9IChSb2xlU3BlYyAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUg ICAgKm9iaiA9IG5ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhzcGVjKTsKKworCQlncmFudGVlcyA9 IGxhcHBlbmQoZ3JhbnRlZXMsIG5ld19vYmplY3Rfb2JqZWN0KG9iaikpOworCX0KKworCWlmIChz dG10LT5hY3Rpb24tPmlzX2dyYW50KQorCXsKKwkJYXBwZW5kX2FycmF5X29iamVjdChncmFudCwg IlRPICV7Z3JhbnRlZXM6LCB9UiIsIGdyYW50ZWVzKTsKKworCQkvKiBBZGQgdGhlIFdJVEggR1JB TlQgT1BUSU9OIGNsYXVzZSBmb3IgR1JBTlQgc3ViY29tbWFuZCAqLworCQl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiV0lUSCBHUkFOVCBPUFRJT04iLCAxLAorCQkJCQkJCSAicHJlc2VudCIsIE9ialR5 cGVCb29sLAorCQkJCQkJCSBzdG10LT5hY3Rpb24tPmdyYW50X29wdGlvbik7CisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGdyYW50LCAiJXtncmFudF9vcHRpb259cyIsIHRtcCk7CisJfQorCWVsc2UK KwkJYXBwZW5kX2FycmF5X29iamVjdChncmFudCwgIkZST00gJXtncmFudGVlczosIH1SIiwgZ3Jh bnRlZXMpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtncmFudH1zIiwgZ3JhbnQp OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYWxsIHRoZSBjb2xsZWN0ZWQg c3ViY29tbWFuZHMgYW5kIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUKKyAqIGFs dGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIHJlbHR5cGUgJXtp ZGVudGl0eX1EICV7c3ViY21kczosIH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJSZWxhdGlvbihDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZSAgICAqcmV0 OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJT2JqVHJlZSAgICAqdG1wX29iajI7CisJTGlzdAkg ICAqZHBjb250ZXh0OworCVJlbGF0aW9uCXJlbDsKKwlMaXN0CSAgICpzdWJjbWRzID0gTklMOwor CUxpc3RDZWxsICAgKmNlbGw7CisJY29uc3QgY2hhciAqcmVsdHlwZTsKKwlib29sCQlpc3R5cGUg PSBmYWxzZTsKKwlib29sCQlpc3RhYmxlID0gZmFsc2U7CisJTGlzdAkgICAqZXhwcnMgPSBOSUw7 CisJT2lkCQkJcmVsSWQgPSBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZDsKKworCUFzc2VydChj bWQtPnR5cGUgPT0gU0NUX0FsdGVyVGFibGUpOworCisJcmVsID0gcmVsYXRpb25fb3BlbihyZWxJ ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQlyZWxJZCk7CisKKwlzd2l0Y2gg KHJlbC0+cmRfcmVsLT5yZWxraW5kKQorCXsKKwkJY2FzZSBSRUxLSU5EX1JFTEFUSU9OOgorCQlj YXNlIFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEU6CisJCQlyZWx0eXBlID0gIlRBQkxFIjsKKwkJ CWlzdGFibGUgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9JTkRFWDoKKwkJY2Fz ZSBSRUxLSU5EX1BBUlRJVElPTkVEX0lOREVYOgorCQkJcmVsdHlwZSA9ICJJTkRFWCI7CisJCQli cmVhazsKKwkJY2FzZSBSRUxLSU5EX1ZJRVc6CisJCQlyZWx0eXBlID0gIlZJRVciOworCQkJYnJl YWs7CisJCWNhc2UgUkVMS0lORF9DT01QT1NJVEVfVFlQRToKKwkJCXJlbHR5cGUgPSAiVFlQRSI7 CisJCQlpc3R5cGUgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9GT1JFSUdOX1RB QkxFOgorCQkJcmVsdHlwZSA9ICJGT1JFSUdOIFRBQkxFIjsKKwkJCWJyZWFrOworCQljYXNlIFJF TEtJTkRfTUFUVklFVzoKKwkJCXJlbHR5cGUgPSAiTUFURVJJQUxJWkVEIFZJRVciOworCQkJYnJl YWs7CisKKwkJCS8qIFRPRE8gc3VwcG9ydCBmb3IgcGFydGl0aW9uZWQgdGFibGUgKi8KKworCQlk ZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcmVsa2luZCAlZCIsIHJlbC0+cmRf cmVsLT5yZWxraW5kKTsKKwl9CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0 eXBlfXMgJXtpZGVudGl0eX1EIiwgMiwKKwkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcs IHJlbHR5cGUsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkpOworCisJZm9yZWFjaChjZWxsLCBj bWQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzKQorCXsKKwkJQ29sbGVjdGVkQVRTdWJjbWQgKnN1YiA9 IChDb2xsZWN0ZWRBVFN1YmNtZCAqKSBsZmlyc3QoY2VsbCk7CisJCUFsdGVyVGFibGVDbWQgKnN1 YmNtZCA9IChBbHRlclRhYmxlQ21kICopIHN1Yi0+cGFyc2V0cmVlOworCQlPYmpUcmVlICAgICp0 cmVlOworCisJCUFzc2VydChJc0Eoc3ViY21kLCBBbHRlclRhYmxlQ21kKSk7CisKKwkgICAvKgor CQkqIFNraXAgZGVwYXJzZSBvZiB0aGUgc3ViY29tbWFuZCBpZiB0aGUgb2JqZWN0SWQgZG9lc24n dCBtYXRjaCB0aGUKKwkJKiB0YXJnZXQgcmVsYXRpb24gSUQuIEl0IGNhbiBoYXBwZW4gZm9yIGlu aGVyaXRlZCB0YWJsZXMgd2hlbgorCQkqIHN1YmNvbW1hbmRzIGZvciBpbmhlcml0ZWQgdGFibGVz IGFuZCB0aGUgcGFyZW50IHRhYmxlIGFyZSBib3RoCisJCSogY29sbGVjdGVkIGluIHRoZSBBTFRF UiBUQUxCRSBjb21tYW5kIGZvciB0aGUgcGFyZW50IHRhYmxlLiBXaXRoIHRoZQorCQkqIGV4Y2Vw dGlvbiBvZiB0aGUgaW50ZXJuYWxseSBnZW5lcmF0ZWQgQWRkQ29uc3RyYWludCAoZm9yCisJCSog QUxURVIgVEFCTEUgQUREIENPTlNUUkFJTlQgRk9SRUlHTiBLRVkgUkVGRVJFTkNFUykgd2hlcmUg dGhlCisJCSogb2JqZWN0SWRzIGNvdWxkIG1pc21hdGNoIChmb3JlaW4gdGFibGUgaWQgYW5kIHRo ZSByZWZlcmVuY2VkIHRhYmxlCisJCSogaWQpLgorCQkqLworCQlpZiAoKHN1Yi0+YWRkcmVzcy5v YmplY3RJZCAhPSByZWxJZCAmJgorCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCAhPSBJbnZhbGlk T2lkKSAmJgorCQkJIShzdWJjbWQtPnN1YnR5cGUgPT0gQVRfQWRkQ29uc3RyYWludCAmJgorCQkJ ICBzdWJjbWQtPnJlY3Vyc2UpICYmCisJCQlpc3RhYmxlKQorCQkJY29udGludWU7CisKKwkJc3dp dGNoIChzdWJjbWQtPnN1YnR5cGUpCisJCXsKKwkJCWNhc2UgQVRfQWRkQ29sdW1uOgorCQkJCS8q IFhYWCBuZWVkIHRvIHNldCB0aGUgInJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICovCisJCQkJQXNz ZXJ0KElzQShzdWJjbWQtPmRlZiwgQ29sdW1uRGVmKSk7CisJCQkJdHJlZSA9IGRlcGFyc2VfQ29s dW1uRGVmKHJlbCwgZHBjb250ZXh0LCBmYWxzZSwKKwkJCQkJCQkJCQkgKENvbHVtbkRlZiAqKSBz dWJjbWQtPmRlZiwgdHJ1ZSwgJmV4cHJzKTsKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IkFERCAle29ianR5cGV9cyAle2RlZmluaXRpb259cyIsIDMsCisJCQkJCQkJCQkJIm9ianR5cGUi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCWlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVN TiIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbHVtbiIsCisJCQkJ CQkJCQkJImRlZmluaXRpb24iLCBPYmpUeXBlT2JqZWN0LCB0cmVlKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfQWRkSW5kZXhDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJSW5kZXhTdG10 ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3Vi LT5hZGRyZXNzLm9iamVjdElkOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEluZGV4 U3RtdCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJ QXNzZXJ0KGlzdG10LT5pc2NvbnN0cmFpbnQgJiYgaXN0bXQtPnVuaXF1ZSk7CisKKwkJCQkJaWR4 ID0gcmVsYXRpb25fb3Blbihpc3RtdC0+aW5kZXhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJ CQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCQkJICoKKwkJCQkJICogQUREIENPTlNU UkFJTlQgJXtuYW1lfUkgJXtjb25zdHJhaW50X3R5cGV9cyBVU0lORyBJTkRFWAorCQkJCQkgKiAl aW5kZXhfbmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zCisJCQkJCSAqLwor CQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7 Y29uc3RyYWludF90eXBlfXMgVVNJTkcgSU5ERVggJXtpbmRleF9uYW1lfUkgJXtkZWZlcnJhYmxl fXMgJXtpbml0X2RlZmVycmVkfXMiLCA2LAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJp bmcsICJhZGQgY29uc3RyYWludCB1c2luZyBpbmRleCIsCisJCQkJCQkJCQkJCSJuYW1lIiwgT2Jq VHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJCQki Y29uc3RyYWludF90eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJaXN0bXQtPmRlZmVy cmFibGUgPyAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJCQkJCQkJCQkiaW5k ZXhfbmFtZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKGlkeCksCisJCQkJCQkJCQkJCSJkZWZlcnJhYmxlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkJCQkJaXN0bXQtPmRlZmVycmFibGUgPyAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUi LAorCQkJCQkJCQkJCQkiaW5pdF9kZWZlcnJlZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJ CWlzdG10LT5pbml0ZGVmZXJyZWQgPyAiSU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkg SU1NRURJQVRFIik7CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlkeCwgQWNjZXNzU2hh cmVMb2NrKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfUmVBZGRJbmRleDoKKwkJ CWNhc2UgQVRfUmVBZGRDb25zdHJhaW50OgorCQkJY2FzZSBBVF9SZUFkZENvbW1lbnQ6CisJCQlj YXNlIEFUX1JlcGxhY2VSZWxPcHRpb25zOgorCQkJY2FzZSBBVF9DaGVja05vdE51bGw6CisJCQlj YXNlIEFUX1JlQWRkU3RhdGlzdGljczoKKwkJCQkvKiBTdWJ0eXBlcyB1c2VkIGZvciBpbnRlcm5h bCBvcGVyYXRpb25zOyBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9Db29rZWRDb2x1bW5EZWZhdWx0OgorCQkJCXsKKwkJCQkJUmVsYXRpb24JYXR0cnJlbDsK KwkJCQkJSGVhcFR1cGxlCWF0dHR1cDsKKwkJCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0U3RydWN0 OworCisJCQkJCWF0dHJyZWwgPSB0YWJsZV9vcGVuKEF0dHJpYnV0ZVJlbGF0aW9uSWQsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCQkJCQlhdHR0dXAgPSBTZWFyY2hTeXNDYWNoZUNvcHkyKEFUVE5VTSwK KwkJCQkJCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSksCisJ CQkJCQkJCQkJCQkgSW50MTZHZXREYXR1bShzdWJjbWQtPm51bSkpOworCQkJCQlpZiAoIUhlYXBU dXBsZUlzVmFsaWQoYXR0dHVwKSkKKwkJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciBhdHRyaWJ1dGUgJWQgb2YgcmVsYXRpb24gd2l0aCBPSUQgJXUiLAorCQkJCQkJCSBz dWJjbWQtPm51bSwgUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwkJCQkJYXR0U3RydWN0ID0gKEZv cm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0dHVwKTsKKworCQkJCQkvKgorCQkJCQkgKiBC b3RoIGRlZmF1bHQgYW5kIGdlbmVyYXRpb24gZXhwcmVzc2lvbiBub3Qgc3VwcG9ydGVkCisJCQkJ CSAqIHRvZ2V0aGVyLgorCQkJCQkgKi8KKwkJCQkJaWYgKCFhdHRTdHJ1Y3QtPmF0dGdlbmVyYXRl ZCkKKwkJCQkJCWVsb2coV0FSTklORywgInVuc3VwcG9ydGVkIGFsdGVyIHRhYmxlIHN1YnR5cGUg JWQiLAorCQkJCQkJCSBzdWJjbWQtPnN1YnR5cGUpOworCisJCQkJCWhlYXBfZnJlZXR1cGxlKGF0 dHR1cCk7CisJCQkJCXRhYmxlX2Nsb3NlKGF0dHJyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCQkJ CQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgQVRfQWRkQ29sdW1uVG9WaWV3OgorCQkJCS8qIENS RUFURSBPUiBSRVBMQUNFIFZJRVcgLS0gbm90aGluZyB0byBkbyBoZXJlICovCisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfQ29sdW1uRGVmYXVsdDoKKwkJCQlpZiAoc3ViY21kLT5kZWYgPT0gTlVM TCkKKwkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59 SSBEUk9QIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJk cm9wIGRlZmF1bHQiLAorCQkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21k LT5uYW1lKTsKKwkJCQllbHNlCisJCQkJeworCQkJCQlMaXN0CSAgICpkcGNvbnRleHRfcmVsOwor CQkJCQlIZWFwVHVwbGUJYXR0cnR1cDsKKwkJCQkJQXR0ck51bWJlcglhdHRubzsKKworCQkJCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBERUZB VUxUIiwgMiwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGRlZmF1bHQi LAorCQkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwor CQkJCQlkcGNvbnRleHRfcmVsID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJ CQlhdHRydHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwg c3ViY21kLT5uYW1lKTsKKwkJCQkJYXR0bm8gPSAoKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJV Q1QoYXR0cnR1cCkpLT5hdHRudW07CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmos ICIle2RlZmluaXRpb259cyIsICJkZWZpbml0aW9uIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRD b2x1bW5EZWZhdWx0KHJlbCwgYXR0bm8sCisJCQkJCQkJCQkJCQkJCQkJICBkcGNvbnRleHRfcmVs LAorCQkJCQkJCQkJCQkJCQkJCSAgTlVMTCkpOworCQkJCQlSZWxlYXNlU3lzQ2FjaGUoYXR0cnR1 cCk7CisJCQkJfQorCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BOb3ROdWxsOgor CQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJP UCBOT1QgTlVMTCIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBu b3QgbnVsbCIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFt ZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w X29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0ZvcmNlUm93U2VjdXJpdHk6CisJCQkJ dG1wX29iaiA9IG5ld19vYmp0cmVlKCJGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkiKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfTm9Gb3JjZVJvd1NlY3VyaXR5OgorCQkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZSgiTk8gRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZIik7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX1NldE5vdE51bGw6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVl X1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkJ CSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBub3QgbnVsbCIsCisJCQkJCQkJCQkJImNvbHVt biIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX0Ryb3BFeHByZXNzaW9uOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBFWFBSRVNTSU9OICV7aWZfZXhpc3RzfXMiLCAzLAor CQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgZXhwcmVzc2lvbiIsCisJCQkJ CQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQki aWZfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlzdWJjbWQtPm1pc3Npbmdfb2sg PyAiSUYgRVhJU1RTIiA6ICIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0U3Rh dGlzdGljczoKKwkJCQl7CisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEludGVnZXIpKTsK KwkJCQkJaWYgKHN1YmNtZC0+bmFtZSkKKwkJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNzfW4iLCAz LAorCQkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3RpY3MiLAor CQkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJ CQkJCQkJCSJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJCQlpbnRWYWwo KEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJZWxzZQorCQkJCQkJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59biBTRVQgU1RBVElTVElDUyAle3N0 YXRpc3RpY3N9biIsIDMsCisJCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQg c3RhdGlzdGljcyIsCisJCQkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZUludGVnZXIsIHN1YmNt ZC0+bnVtLAorCQkJCQkJCQkJCQkJInN0YXRpc3RpY3MiLCBPYmpUeXBlSW50ZWdlciwKKwkJCQkJ CQkJCQkJCWludFZhbCgoSW50ZWdlciAqKSBzdWJjbWQtPmRlZikpOworCQkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJfQorCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX1NldE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0T3B0aW9u czoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJ CQkJCQkJCQkJCQkJCSBkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoc3ViY21kKSkpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX1NldFN0b3JhZ2U6CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRl ZiwgU3RyaW5nKSk7CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4g JXtjb2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0b3JhZ2UiLAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJInN0b3JhZ2UiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCQkJCXN0clZhbCgoU3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX1NldENvbXByZXNzaW9uOgorCQkJCUFzc2VydChJc0Eoc3Vi Y21kLT5kZWYsIFN0cmluZykpOworCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg Q09MVU1OICV7Y29sdW1ufUkgU0VUIENPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfXMi LCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBjb21wcmVzc2lvbiIs CisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJ CQkJCQkiY29tcHJlc3Npb25fbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlzdHJW YWwoKFN0cmluZyAqKSBzdWJjbWQtPmRlZikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9Ecm9wQ29sdW1uOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCAle29ianR5 cGV9cyAle2NvbHVtbn1JIiwgMywKKwkJCQkJCQkJCQkib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkJCQkJaXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09MVU1OIiwKKwkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbHVtbiIsCisJCQkJCQkJCQkJImNvbHVtbiIs IE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJdG1wX29iajIgPSBuZXdfb2JqdHJl ZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIHN1 YmNtZC0+YmVoYXZpb3IpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle2Nh c2NhZGV9cyIsIHRtcF9vYmoyKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJ bmRleDoKKwkJCQl7CisJCQkJCU9pZAkJCWlkeE9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsK KwkJCQkJSW5kZXhTdG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJY29uc3Qg Y2hhciAqaWR4bmFtZTsKKwkJCQkJT2lkCQkJY29uc3RyT2lkOworCisJCQkJCUFzc2VydChJc0Eo c3ViY21kLT5kZWYsIEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQgKikgc3Vi Y21kLT5kZWY7CisKKwkJCQkJaWYgKCFpc3RtdC0+aXNjb25zdHJhaW50KQorCQkJCQkJYnJlYWs7 CisKKwkJCQkJaWR4ID0gcmVsYXRpb25fb3BlbihpZHhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJ CQkJCWlkeG5hbWUgPSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgpOworCisJCQkJCWNvbnN0 ck9pZCA9IGdldF9yZWxhdGlvbl9jb25zdHJhaW50X29pZCgKKwkJCQkJCQkJCQkJCQkJCWNtZC0+ ZC5hbHRlclRhYmxlLm9iamVjdElkLCBpZHhuYW1lLCBmYWxzZSk7CisKKwkJCQkJdG1wX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIs IDMsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IiwK KwkJCQkJCQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBpZHhuYW1lLAorCQkJCQkJCQkJCQki ZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCXBnX2dldF9jb25zdHJhaW50 ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ck9pZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkJCQkJcmVsYXRpb25fY2xv c2UoaWR4LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9BZGRDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJLyogWFhYIG5lZWQgdG8gc2V0IHRoZSAicmVj dXJzZSIgYml0IHNvbWV3aGVyZT8gKi8KKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRy ZXNzLm9iamVjdElkOworCQkJCQlib29sCQlpc251bGw7CisJCQkJCUhlYXBUdXBsZQl0dXA7CisJ CQkJCURhdHVtCQl2YWw7CisJCQkJCUNvbnN0cmFpbnQgKmNvbnN0cjsKKworCQkJCQlBc3NlcnQo SXNBKHN1YmNtZC0+ZGVmLCBDb25zdHJhaW50KSk7CisJCQkJCWNvbnN0ciA9IGNhc3ROb2RlKENv bnN0cmFpbnQsIHN1YmNtZC0+ZGVmKTsKKworCQkJCQlpZiAoIWNvbnN0ci0+c2tpcF92YWxpZGF0 aW9uKQorCQkJCQl7CisJCQkJCQl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBPYmpl Y3RJZEdldERhdHVtKGNvbnN0ck9pZCkpOworCisJCQkJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0 dXApKQorCQkJCQkJeworCQkJCQkJCWNoYXIJICAgKmNvbmJpbjsKKworCQkJCQkJCS8qIEZldGNo IGNvbnN0cmFpbnQgZXhwcmVzc2lvbiBpbiBwYXJzZXRyZWUgZm9ybSAqLworCQkJCQkJCXZhbCA9 IFN5c0NhY2hlR2V0QXR0cihDT05TVFJPSUQsIHR1cCwKKwkJCQkJCQkJCQkJCSAgQW51bV9wZ19j b25zdHJhaW50X2NvbmJpbiwgJmlzbnVsbCk7CisKKwkJCQkJCQlpZiAoIWlzbnVsbCkKKwkJCQkJ CQl7CisJCQkJCQkJCWNvbmJpbiA9IFRleHREYXR1bUdldENTdHJpbmcodmFsKTsKKwkJCQkJCQkJ ZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBzdHJpbmdUb05vZGUoY29uYmluKSk7CisJCQkJCQkJfQor CisJCQkJCQkJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5p dGlvbn1zIiwgMywKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0 cmFpbnQiLAorCQkJCQkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50 X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkJImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCQkJCQlwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJP aWQpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BbHRlckNvbnN0cmFp bnQ6CisJCQkJeworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7 CisJCQkJCUNvbnN0cmFpbnQgKmMgPSAoQ29uc3RyYWludCAqKSBzdWJjbWQtPmRlZjsKKworCQkJ CQkvKiBJZiBubyBjb25zdHJhaW50IHdhcyBhbHRlcmVkLCBzaWxlbnRseSBza2lwIGl0ICovCisJ CQkJCWlmICghT2lkSXNWYWxpZChjb25zdHJPaWQpKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJQXNz ZXJ0KElzQShjLCBDb25zdHJhaW50KSk7CisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9 cyIsIDQsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbnN0cmFp bnQiLAorCQkJCQkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25h bWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkJImRlZmVycmFibGUiLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJCQkJCQljLT5kZWZlcnJhYmxlID8gIkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxF IiwKKwkJCQkJCQkJCQkJImluaXRfZGVmZXJyZWQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ CQljLT5pbml0ZGVmZXJyZWQgPyAiSU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1N RURJQVRFIik7CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9WYWxpZGF0 ZUNvbnN0cmFpbnQ6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFURSBDT05T VFJBSU5UICV7Y29uc3RyYWludH1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJp bmcsICJ2YWxpZGF0ZSBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkiY29uc3RyYWludCIsIE9ialR5 cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ry b3BDb25zdHJhaW50OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCBDT05TVFJB SU5UICV7Y29uc3RyYWludH1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJkcm9wIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1 bW5UeXBlOgorCQkJCXsKKwkJCQkJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2Ny KHJlbCk7CisJCQkJCUZvcm1fcGdfYXR0cmlidXRlIGF0dDsKKwkJCQkJQ29sdW1uRGVmICAqZGVm OworCisJCQkJCWF0dCA9ICYodHVwZGVzYy0+YXR0cnNbc3ViLT5hZGRyZXNzLm9iamVjdFN1Yklk IC0gMV0pOworCQkJCQlkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCQkJCQlBc3Nl cnQoSXNBKGRlZiwgQ29sdW1uRGVmKSk7CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50 YXgKKwkJCQkJICoKKwkJCQkJICogQ29tcG9zaXRlIHR5cGVzOiBBTFRFUiByZWx0eXBlICV7Y29s dW1ufUkgU0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xsYXRpb259cyBB VFRSSUJVVEUgJXtjYXNjYWRlfXMKKwkJCQkJICoKKwkJCQkJICogTm9ybWFsIHR5cGVzOiBBTFRF UiByZWx0eXBlICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQg JXtjb2xsYXRpb259cyBDT0xVTU4gJXt1c2luZ31zCisJCQkJCSAqLworCQkJCQl0bXBfb2JqID0g bmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQ RSAle2RhdGF0eXBlfVQiLCA0LAorCQkJCQkJCQkJCQkib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkJCQkJCWlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIsCisJCQkJCQkJCQkJ CSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbHVtbiB0eXBlIiwKKwkJCQkJCQkJCQkJ ImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkJImRhdGF0 eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUoYXR0 LT5hdHR0eXBpZCwKKwkJCQkJCQkJCQkJCQkJCQkgYXR0LT5hdHR0eXBtb2QpKTsKKworCQkJCQkv KiBBZGQgYSBDT0xMQVRFIGNsYXVzZSwgaWYgbmVlZGVkICovCisJCQkJCXRtcF9vYmoyID0gbmV3 X29ianRyZWUoIkNPTExBVEUiKTsKKwkJCQkJaWYgKE9pZElzVmFsaWQoYXR0LT5hdHRjb2xsYXRp b24pKQorCQkJCQl7CisJCQkJCQlPYmpUcmVlICAgICpjb2xsbmFtZTsKKworCQkJCQkJY29sbG5h bWUgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJCSAgIGF0dC0+YXR0Y29sbGF0aW9uKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcF9vYmoyLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJCQkJCX0KKwkJCQkJZWxz ZQorCQkJCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmoyKTsKKwkJCQkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wX29iaiwgIiV7Y29sbGF0aW9ufXMiLCB0bXBfb2JqMik7CisKKwkJCQkJLyog SWYgbm90IGEgY29tcG9zaXRlIHR5cGUsIGFkZCB0aGUgVVNJTkcgY2xhdXNlICovCisJCQkJCWlm ICghaXN0eXBlKQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICogSWYgdGhlcmUncyBhIFVTSU5H IGNsYXVzZSwgdHJhbnNmb3JtQWx0ZXJUYWJsZVN0bXQKKwkJCQkJCSAqIHJhbiBpdCB0aHJvdWdo IHRyYW5zZm9ybUV4cHIgYW5kIHN0b3JlZCB0aGUKKwkJCQkJCSAqIHJlc3VsdGluZyBub2RlIGlu IGNvb2tlZF9kZWZhdWx0LCB3aGljaCB3ZSBjYW4gdXNlCisJCQkJCQkgKiBoZXJlLgorCQkJCQkJ ICovCisJCQkJCQl0bXBfb2JqMiA9IG5ld19vYmp0cmVlKCJVU0lORyIpOworCQkJCQkJaWYgKGRl Zi0+cmF3X2RlZmF1bHQpCisJCQkJCQl7CisJCQkJCQkJRGF0dW0JCWRlcGFyc2VkOworCQkJCQkJ CWNoYXIJICAgKmRlZmV4cHI7CisKKwkJCQkJCQlleHBycyA9IGxhcHBlbmQoZXhwcnMsIGRlZi0+ Y29va2VkX2RlZmF1bHQpOworCQkJCQkJCWRlZmV4cHIgPSBub2RlVG9TdHJpbmcoZGVmLT5jb29r ZWRfZGVmYXVsdCk7CisJCQkJCQkJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dl dF9leHByLAorCQkJCQkJCQkJCQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVtKGRlZmV4cHIpLAor CQkJCQkJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcF9vYmoyLCAiJXtleHByZXNzaW9ufXMiLAorCQkJCQkJCQkJCQkJICJl eHByZXNzaW9uIiwKKwkJCQkJCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7 CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmoy KTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3VzaW5nfXMiLCB0bXBf b2JqMik7CisJCQkJCX0KKworCQkJCQkvKiBJZiBpdCdzIGEgY29tcG9zaXRlIHR5cGUsIGFkZCB0 aGUgQ0FTQ0FERSBjbGF1c2UgKi8KKwkJCQkJaWYgKGlzdHlwZSkKKwkJCQkJeworCQkJCQkJdG1w X29iajIgPSBuZXdfb2JqdHJlZSgiQ0FTQ0FERSIpOworCQkJCQkJaWYgKHN1YmNtZC0+YmVoYXZp b3IgIT0gRFJPUF9DQVNDQURFKQorCQkJCQkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqMik7 CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtjYXNjYWRlfXMiLCB0bXBf b2JqMik7CisJCQkJCX0KKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisjaWZkZWYgVE9ET0xJ U1QKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5HZW5lcmljT3B0aW9uczoKKwkJCQl0bXBfb2JqID0g ZGVwYXJzZV9GZHdPcHRpb25zKChMaXN0ICopIHN1YmNtZC0+ZGVmLAorCQkJCQkJCQkJCQlzdWJj bWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJY2FzZSBBVF9DaGFuZ2VPd25l cjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk9XTkVSIFRPICV7b3duZXJ9SSIsIDIs CisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2hhbmdlIG93bmVyIiwKKwkJCQkJ CQkJCQkib3duZXIiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCWdldF9yb2xlc3BlY19uYW1l KHN1YmNtZC0+bmV3b3duZXIpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ2x1c3Rl ck9uOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQ0xVU1RFUiBPTiAle2luZGV4fUki LCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNsdXN0ZXIgb24iLAorCQkJ CQkJCQkJCSJpbmRleCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0Ryb3BDbHVzdGVyOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJl ZV9WQSgiU0VUIFdJVEhPVVQgQ0xVU1RFUiIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAic2V0IHdpdGhvdXQgY2x1c3RlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9TZXRMb2dnZWQ6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgTE9HR0VE IiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbG9nZ2VkIik7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFVuTG9nZ2VkOgorCQkJCXRtcF9vYmogPSBu ZXdfb2JqdHJlZV9WQSgiU0VUIFVOTE9HR0VEIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJzZXQgdW5sb2dnZWQiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RHJvcE9pZHM6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgV0lUSE9VVCBPSURT IiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgd2l0aG91dCBvaWRz Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w X29iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9TZXRBY2Nlc3NNZXRob2Q6CisJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgQUNDRVNTIE1FVEhPRCAle2FjY2Vzc19tZXRob2R9 SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGFjY2VzcyBtZXRo b2QiLAorCQkJCQkJCQkJCSJhY2Nlc3NfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5u YW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBfb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldFRhYmxlU3BhY2U6CisJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsIDIs CisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHRhYmxlc3BhY2UiLAorCQkJ CQkJCQkJCSJ0YWJsZXNwYWNlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0UmVsT3B0aW9uczoKKwkJCWNhc2UgQVRfUmVzZXRS ZWxPcHRpb25zOgorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KAorCQkJCQkJCQkJCQkJCQkJIGRlcGFyc2VfUmVsU2V0T3B0aW9ucyhzdWJjbWQpKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZzoKKwkJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIkVOQUJMRSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCQkidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdnZXIi LCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9FbmFibGVBbHdheXNUcmlnOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5B QkxFIEFMV0FZUyBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9i alR5cGVTdHJpbmcsICJlbmFibGUgYWx3YXlzIHRyaWdnZXIiLAorCQkJCQkJCQkJCSJ0cmlnZ2Vy IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfRW5hYmxlUmVwbGljYVRyaWc6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJF TkFCTEUgUkVQTElDQSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJlbmFibGUgcmVwbGljYSB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJp Z2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0Rpc2FibGVUcmlnOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRElT QUJMRSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVT dHJpbmcsICJkaXNhYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJCSJ0cmlnZ2VyIiwgT2JqVHlwZVN0 cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxl VHJpZ0FsbDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBUUklHR0VSIEFM TCIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIg YWxsIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVUcmlnQWxsOgorCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklHR0VSIEFMTCIsIDEsCisJCQkJ CQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnVXNlcjoKKwkJCQl0bXBfb2JqID0g bmV3X29ianRyZWVfVkEoIkVOQUJMRSBUUklHR0VSIFVTRVIiLCAxLAorCQkJCQkJCQkJCSJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWdVc2VyOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJl ZV9WQSgiRElTQUJMRSBUUklHR0VSIFVTRVIiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX0VuYWJsZVJ1bGU6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUg UlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5h YmxlIHJ1bGUiLAorCQkJCQkJCQkJCSJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1l KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBf b2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlQWx3YXlzUnVsZToKKwkJCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBBTFdBWVMgUlVMRSAle3J1bGV9SSIsIDIs CisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIGFsd2F5cyBydWxlIiwK KwkJCQkJCQkJCQkicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJlcGxpY2FSdWxlOgorCQkJCXRtcF9vYmogPSBu ZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJFUExJQ0EgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJ CQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJlcGxpY2EgcnVsZSIsCisJCQkJCQkJ CQkJInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9EaXNhYmxlUnVsZToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IkRJU0FCTEUgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiZGlzYWJsZSBydWxlIiwKKwkJCQkJCQkJCQkicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluaGVyaXQ6CisJ CQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJJTkhFUklUICV7cGFyZW50fUQiLCAyLAorCQkJ CQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImluaGVyaXQiLAorCQkJCQkJCQkJCSJwYXJl bnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+YWRkcmVzcy5vYmpl Y3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wSW5oZXJpdDoKKwkJCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk5PIElOSEVSSVQgJXtwYXJlbnR9RCIsIDIsCisJCQkJ CQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBpbmhlcml0IiwKKwkJCQkJCQkJCQki cGFyZW50IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlzdWItPmFkZHJlc3Mu b2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkT2Y6CisJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJPRiAle3R5cGVfb2Z9VCIsIDIsCisJCQkJCQkJCQkJInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIG9mIiwKKwkJCQkJCQkJCQkidHlwZV9vZiIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUoc3ViLT5hZGRyZXNzLm9i amVjdElkLCAtMSkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wT2Y6CisJCQkJ dG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJOT1QgT0YiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgIm5vdCBvZiIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9S ZXBsaWNhSWRlbnRpdHk6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJSRVBMSUNBIElE RU5USVRZIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJyZXBsaWNhIGlk ZW50aXR5Iik7CisJCQkJc3dpdGNoICgoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5k ZWYpLT5pZGVudGl0eV90eXBlKQorCQkJCXsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0RF RkFVTFQ6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtpZGVudH1zIiwg ImlkZW50IiwKKwkJCQkJCQkJCQkJICJERUZBVUxUIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2Fz ZSBSRVBMSUNBX0lERU5USVRZX0ZVTEw6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBf b2JqLCAiJXtpZGVudH1zIiwgImlkZW50IiwKKwkJCQkJCQkJCQkJICJGVUxMIik7CisJCQkJCQli cmVhazsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZX05PVEhJTkc6CisJCQkJCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtpZGVudH1zIiwgImlkZW50IiwKKwkJCQkJCQkJCQkJ ICJOT1RISU5HIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0lO REVYOgorCQkJCQkJdG1wX29iajIgPSBuZXdfb2JqdHJlZV9WQSgiVVNJTkcgSU5ERVggJXtpbmRl eH1JIiwgMSwKKwkJCQkJCQkJCQkJCSAiaW5kZXgiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ CQkJICgoUmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPm5hbWUpOworCQkJCQkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7aWRlbnR9cyIsIHRtcF9vYmoyKTsKKwkJ CQkJCWJyZWFrOworCQkJCX0KKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUm93 U2VjdXJpdHk6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUk9XIExFVkVM IFNFQ1VSSVRZIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUg cm93IHNlY3VyaXR5Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVSb3dT ZWN1cml0eToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUk9XIExFVkVM IFNFQ1VSSVRZIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxl IHJvdyBzZWN1cml0eSIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKyNpZmRlZiBUT0RPTElTVAorCQkJY2Fz ZSBBVF9HZW5lcmljT3B0aW9uczoKKwkJCQl0bXBfb2JqID0gZGVwYXJzZV9GZHdPcHRpb25zKChM aXN0ICopIHN1YmNtZC0+ZGVmLCBOVUxMKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNh c2UgQVRfQXR0YWNoUGFydGl0aW9uOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQVRU QUNIIFBBUlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCQkidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJhdHRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCQkicGFydGl0 aW9uX2lkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlzdWItPmFk ZHJlc3Mub2JqZWN0SWQpKTsKKworCQkJCWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxL SU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2Jq LCAiJXtwYXJ0aXRpb25fYm91bmR9cyIsCisJCQkJCQkJCQkJICJwYXJ0aXRpb25fYm91bmQiLAor CQkJCQkJCQkJCSBSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKHN1Yi0+YWRkcmVzcy5vYmplY3RJ ZCkpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9EZXRhY2hQYXJ0aXRpb246CisJCQkJ dG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJERVRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lk ZW50aXR5fUQiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJ CQkiZGV0YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkJInBhcnRpdGlvbl9pZGVudGl0eSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0 aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29i aikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9EZXRhY2hQYXJ0aXRpb25GaW5hbGl6ZToKKwkJ CQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25f aWRlbnRpdHl9RCBGSU5BTElaRSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiZGV0YWNoIHBhcnRpdGlvbiBmaW5hbGl6ZSIsCisJCQkJCQkJCQkJInBhcnRpdGlvbl9pZGVu dGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJc3ViLT5hZGRyZXNzLm9i amVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9BZGRJZGVudGl0eToKKwkJCQl7 CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisJCQkJCU9i alRyZWUgICAgKnNlcWRlZjsKKwkJCQkJQ29sdW1uRGVmICAqY29sZGVmID0gKENvbHVtbkRlZiAq KSBzdWJjbWQtPmRlZjsKKworCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENP TFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi YWRkIGlkZW50aXR5IiwKKwkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNt ZC0+bmFtZSk7CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlkKHJl bCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2Uo UmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCisJCQkJCWlmIChPaWRJc1Zh bGlkKHNlcV9yZWxpZCkpCisJCQkJCXsKKwkJCQkJCXNlcWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRl bnRpdHkoc2VxX3JlbGlkLCBjb2xkZWYtPmlkZW50aXR5LCBmYWxzZSk7CisJCQkJCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBfb2JqLCAiQUREICV7aWRlbnRpdHlfY29sdW1ufXMiLCBzZXFkZWYp OworCQkJCQl9CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0SWRlbnRp dHk6CisJCQkJeworCQkJCQlEZWZFbGVtICAgICpkZWZlbDsKKwkJCQkJY2hhcgkJaWRlbnRpdHkg PSAwOworCQkJCQlPYmpUcmVlICAgICpzZXFkZWY7CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVtOwor CQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisKKworCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo IkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAic2V0IGlkZW50aXR5IiwKKwkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNtZC0+ZGVmKQorCQkJCQl7CisJCQkJ CQlMaXN0CSAgICpkZWYgPSAoTGlzdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkJQXNzZXJ0KElz QShzdWJjbWQtPmRlZiwgTGlzdCkpOworCisJCQkJCQlkZWZlbCA9IGxpbml0aWFsX25vZGUoRGVm RWxlbSwgZGVmKTsKKwkJCQkJCWlkZW50aXR5ID0gZGVmR2V0SW50MzIoZGVmZWwpOworCQkJCQl9 CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNt ZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2UoUmVsYXRpb25H ZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCisJCQkJCWlmIChPaWRJc1ZhbGlkKHNlcV9y ZWxpZCkpCisJCQkJCXsKKwkJCQkJCXNlcWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2Vx X3JlbGlkLCBpZGVudGl0eSwgdHJ1ZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBf b2JqLCAiJXtkZWZpbml0aW9ufXMiLCBzZXFkZWYpOworCQkJCQl9CisKKwkJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCQlicmVh azsKKwkJCQl9CisJCQljYXNlIEFUX0Ryb3BJZGVudGl0eToKKwkJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgSURFTlRJVFkiLCAyLAorCQkJ CQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgaWRlbnRpdHkiLAorCQkJCQkJCQkJ CSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wX29iaiwgIiV7aWZfZXhpc3RzfXMiLAorCQkJCQkJCQkJICJpZl9leGlz dHMiLAorCQkJCQkJCQkJIHN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOwor CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29i aikpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKFdBUk5JTkcsICJ1bnN1cHBv cnRlZCBhbHRlciB0YWJsZSBzdWJ0eXBlICVkIiwKKwkJCQkJIHN1YmNtZC0+c3VidHlwZSk7CisJ CQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBXZSBkb24ndCBzdXBwb3J0IHJlcGxpY2F0aW5n IEFMVEVSIFRBQkxFIHdoaWNoIGNvbnRhaW5zIHZvbGF0aWxlCisJCSAqIGZ1bmN0aW9ucyBiZWNh dXNlIEl0J3MgcG9zc2libGUgdGhlIGZ1bmN0aW9ucyBjb250YWluIERETC9ETUwgaW4KKwkJICog d2hpY2ggY2FzZSB0aGVzZSBvcGVyYXRpb25zIHdpbGwgYmUgZXhlY3V0ZWQgdHdpY2UgYW5kIGNh dXNlCisJCSAqIGR1cGxpY2F0ZSBkYXRhLiBJbiBhZGRpdGlvbiwgd2UgZG9uJ3Qga25vdyB3aGV0 aGVyIHRoZSB0YWJsZXMgYmVpbmcKKwkJICogYWNjZXNzZWQgYnkgdGhlc2UgRERML0RNTCBhcmUg cHVibGlzaGVkIG9yIG5vdC4gU28gYmxpbmRseSBhbGxvd2luZworCQkgKiBzdWNoIGZ1bmN0aW9u cyBjYW4gYWxsb3cgdW5pbnRlbmRlZCBjbGF1c2VzIGxpa2UgdGhlIHRhYmxlcworCQkgKiBhY2Nl c3NlZCBpbiB0aG9zZSBmdW5jdGlvbnMgbWF5IG5vdCBldmVuIGV4aXN0IG9uIHRoZSBzdWJzY3Jp YmVyLgorCQkgKi8KKwkJaWYgKGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKChOb2RlICopIGV4 cHJzKSkKKwkJCWVsb2coRVJST1IsICJBTFRFUiBUQUJMRSBjb21tYW5kIHVzaW5nIHZvbGF0aWxl IGZ1bmN0aW9uIGNhbm5vdCBiZSByZXBsaWNhdGVkIik7CisKKwkJLyoKKwkJICogQ2xlYW4gdGhl IGxpc3QgYXMgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhlcmUgaXMgbm8gdm9sYXRpbGUKKwkJICog ZnVuY3Rpb24uCisJCSAqLworCQlsaXN0X2ZyZWUoZXhwcnMpOworCQlleHBycyA9IE5JTDsKKwl9 CisKKwl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlpZiAobGlzdF9sZW5n dGgoc3ViY21kcykgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KHJldCwgIiV7c3ViY21kczosIH1zIiwgc3ViY21kcyk7CisKKwlyZXR1cm4gcmV0OworfQorCisv KgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHJlZ3VsYXIgKG5vbi10eXBl ZCkgdGFibGUgY3JlYXRpb24uCisgKgorICogTk9UIE5VTEwgY29uc3RyYWludHMgaW4gdGhlIGNv bHVtbiBkZWZpbml0aW9uIGFyZSBlbWl0dGVkIGRpcmVjdGx5IGluIHRoZQorICogY29sdW1uIGRl ZmluaXRpb24gYnkgdGhpcyByb3V0aW5lOyBvdGhlciBjb25zdHJhaW50cyBtdXN0IGJlIGVtaXR0 ZWQKKyAqIGVsc2V3aGVyZSAodGhlIGluZm8gaW4gdGhlIHBhcnNlIG5vZGUgaXMgaW5jb21wbGV0 ZSBhbnl3YXkpLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiAle25hbWV9SSAle2NvbHR5cGV9 VCAle2NvbXByZXNzaW9ufXMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1zICV7Y29sbGF0aW9ufXMK KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWYoUmVsYXRpb24gcmVsYXRp b24sIExpc3QgKmRwY29udGV4dCwgYm9vbCBjb21wb3NpdGUsCisJCQkJICBDb2x1bW5EZWYgKmNv bGRlZiwgYm9vbCBpc19hbHRlciwgTGlzdCAqKmV4cHJzKQoreworCU9ialRyZWUgICAgKnJldDsK KwlPYmpUcmVlICAgICp0bXBfb2JqOworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChy ZWxhdGlvbik7CisJSGVhcFR1cGxlCWF0dHJUdXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ckZv cm07CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xsYXRpb247 CisJYm9vbAkJc2F3X25vdG51bGw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qCisJICogSW5o ZXJpdGVkIGNvbHVtbnMgd2l0aG91dCBsb2NhbCBkZWZpbml0aW9ucyBtdXN0IG5vdCBiZSBlbWl0 dGVkLgorCSAqCisJICogWFhYIG1heWJlIGl0IGlzIHVzZWZ1bCB0byBoYXZlIHRoZW0gd2l0aCAi cHJlc2VudCA9IGZhbHNlIiBvciBzb21lCisJICogc3VjaD8KKwkgKi8KKwlpZiAoIWNvbGRlZi0+ aXNfbG9jYWwpCisJCXJldHVybiBOVUxMOworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0 TmFtZShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0 clR1cCkpCisJCWVsb2coRVJST1IsICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29s dW1uIFwiJXNcIiBvZiByZWxhdGlvbiAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7 CisJYXR0ckZvcm0gPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKwor CWdldF9hdHR0eXBldHlwbW9kY29sbChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAg JnR5cGlkLCAmdHlwbW9kLCAmdHlwY29sbGF0aW9uKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCIle25hbWV9SSAle2NvbHR5cGV9VCIsIDMsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiY29sdW1uIiwKKwkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFt ZSwKKwkJCQkJCSAiY29sdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3R5cGUodHlwaWQsIHR5cG1vZCkpOworCisJaWYgKCFjb21wb3NpdGUpCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJldCwgIlNUT1JBR0UgJXtjb2xzdG9yYWdlfXMiLCAiY29sc3RvcmFnZSIs CisJCQkJCQkJIGdldF90eXBlX3N0b3JhZ2UoYXR0ckZvcm0tPmF0dHN0b3JhZ2UpKTsKKworCS8q IFVTSU5HIGNsYXVzZSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiQ09NUFJFU1NJT04iKTsK KwlpZiAoY29sZGVmLT5jb21wcmVzc2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29i aiwgIiV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLAorCQkJCQkJCSAiY29tcHJlc3Npb25fbWV0aG9k IiwgY29sZGVmLT5jb21wcmVzc2lvbik7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0 KHRtcF9vYmosICIle2NvbXByZXNzaW9uX21ldGhvZH1JIik7CisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXBfb2JqKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjb21wcmVzc2lv bn1zIiwgdG1wX29iaik7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIkNPTExBVEUiKTsKKwlp ZiAoT2lkSXNWYWxpZCh0eXBjb2xsYXRpb24pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBf b2JqLCAiJXtuYW1lfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29s bGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cGNvbGxhdGlvbikpOworCWVsc2UK KwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7Y29sbGF0aW9ufXMiLCB0bXBfb2JqKTsKKworCWlmICghY29tcG9zaXRlKQorCXsKKwkJ T2lkCQkJc2VxcmVsaWQgPSBJbnZhbGlkT2lkOworCisJCS8qCisJCSAqIEVtaXQgYSBOT1QgTlVM TCBkZWNsYXJhdGlvbiBpZiBuZWNlc3NhcnkuICBOb3RlIHRoYXQgd2UgY2Fubm90CisJCSAqIHRy dXN0IHBnX2F0dHJpYnV0ZS5hdHRub3RudWxsIGhlcmUsIGJlY2F1c2UgdGhhdCBiaXQgaXMgYWxz byBzZXQKKwkJICogd2hlbiBwcmltYXJ5IGtleXMgYXJlIHNwZWNpZmllZDsgd2UgbXVzdCBub3Qg ZW1pdCBhIE5PVCBOVUxMCisJCSAqIGNvbnN0cmFpbnQgaW4gdGhhdCBjYXNlLCB1bmxlc3MgZXhw bGljaXRseSBzcGVjaWZpZWQuICBUaGVyZWZvcmUsCisJCSAqIHdlIHNjYW4gdGhlIGxpc3Qgb2Yg Y29uc3RyYWludHMgYXR0YWNoZWQgdG8gdGhpcyBjb2x1bW4gdG8KKwkJICogZGV0ZXJtaW5lIHdo ZXRoZXIgd2UgbmVlZCB0byBlbWl0IGFueXRoaW5nLiAoRm9ydHVuYXRlbHksIE5PVCBOVUxMCisJ CSAqIGNvbnN0cmFpbnRzIGNhbm5vdCBiZSB0YWJsZSBjb25zdHJhaW50cy4pCisJCSAqCisJCSAq IEluIHRoZSBBTFRFUiBUQUJMRSBjYXNlcywgd2UgYWxzbyBhZGQgYSBOT1QgTlVMTCBpZiB0aGUg Y29sRGVmIGlzCisJCSAqIG1hcmtlZCBpc19ub3RfbnVsbC4KKwkJICovCisJCXNhd19ub3RudWxs ID0gZmFsc2U7CisJCWZvcmVhY2goY2VsbCwgY29sZGVmLT5jb25zdHJhaW50cykKKwkJeworCQkJ Q29uc3RyYWludCAqY29uc3RyID0gKENvbnN0cmFpbnQgKikgbGZpcnN0KGNlbGwpOworCisJCQlp ZiAoY29uc3RyLT5jb250eXBlID09IENPTlNUUl9OT1ROVUxMKQorCQkJeworCQkJCXNhd19ub3Ru dWxsID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChpc19hbHRlciAmJiBj b2xkZWYtPmlzX25vdF9udWxsKQorCQkJc2F3X25vdG51bGwgPSB0cnVlOworCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJldCwgIiV7bm90X251bGx9cyIsICJub3RfbnVsbCIsCisJCQkJCQkJIHNh d19ub3RudWxsID8gIk5PVCBOVUxMIiA6ICIiKTsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWUo IkRFRkFVTFQiKTsKKwkJaWYgKGF0dHJGb3JtLT5hdHRoYXNkZWYgJiYKKwkJCWNvbGRlZi0+Z2Vu ZXJhdGVkICE9IEFUVFJJQlVURV9HRU5FUkFURURfU1RPUkVEKQorCQl7CisJCQljaGFyCSAgICpk ZWZzdHI7CisKKwkJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwg YXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsKKworCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7ZGVmYXVsdH1zIiwgImRlZmF1bHQiLCBk ZWZzdHIpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtkZWZhdWx0fXMiLCB0bXBfb2JqKTsKKworCQkv KiBJREVOVElUWSBDT0xVTU4gKi8KKwkJaWYgKGNvbGRlZi0+aWRlbnRpdHkpCisJCXsKKwkJCU9p ZAkJCWF0dG5vID0gZ2V0X2F0dG51bShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKworCQkJc2Vx cmVsaWQgPSBnZXRJZGVudGl0eVNlcXVlbmNlKHJlbGlkLCBhdHRubywgZmFsc2UpOworCQl9CisK KwkJaWYgKE9pZElzVmFsaWQoc2VxcmVsaWQpKQorCQl7CisJCQl0bXBfb2JqID0gZGVwYXJzZV9D b2x1bW5JZGVudGl0eShzZXFyZWxpZCwgY29sZGVmLT5pZGVudGl0eSwgaXNfYWx0ZXIpOworCQkJ YXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpZGVudGl0eV9jb2x1bW59cyIsIHRtcF9vYmop OworCQl9CisKKwkJLyogR0VORVJBVEVEIENPTFVNTiBFWFBSRVNTSU9OICovCisJCXRtcF9vYmog PSBuZXdfb2JqdHJlZSgiR0VORVJBVEVEIEFMV0FZUyBBUyIpOworCQlpZiAoY29sZGVmLT5nZW5l cmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9TVE9SRUQpCisJCXsKKwkJCWNoYXIJICAgKmRl ZnN0cjsKKworCQkJZGVmc3RyID0gUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBh dHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCQkgIGRwY29udGV4dCwgZXhwcnMpOworCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7Z2VuZXJhdGlvbl9leHByfXMgU1RPUkVEIiwK KwkJCQkJCQkJICJnZW5lcmF0aW9uX2V4cHIiLCBkZWZzdHIpOworCQl9CisJCWVsc2UKKwkJCWFw cGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQs ICIle2dlbmVyYXRlZF9jb2x1bW59cyIsIHRtcF9vYmopOworCX0KKworCVJlbGVhc2VTeXNDYWNo ZShhdHRyVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ29sdW1u RGVmIG5vZGUgd2l0aGluIGEgdHlwZWQgdGFibGUgY3JlYXRpb24uCVRoaXMgaXMgc2ltcGxlcgor ICogdGhhbiB0aGUgcmVndWxhciBjYXNlLCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gZW1pdCB0 aGUgdHlwZSBkZWNsYXJhdGlvbiwKKyAqIGNvbGxhdGlvbiwgb3IgZGVmYXVsdC4gIEhlcmUgd2Ug b25seSByZXR1cm4gc29tZXRoaW5nIGlmIHRoZSBjb2x1bW4gaXMgYmVpbmcKKyAqIGRlY2xhcmVk IE5PVCBOVUxMLgorICoKKyAqIEFzIGluIGRlcGFyc2VfQ29sdW1uRGVmLCBhbnkgb3RoZXIgY29u c3RyYWludCBpcyBwcm9jZXNzZWQgZWxzZXdoZXJlLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiAle25hbWV9SSBXSVRIIE9QVElPTlMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1zLgorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChSZWxhdGlvbiByZWxhdGlv biwgTGlzdCAqZHBjb250ZXh0LCBDb2x1bW5EZWYgKmNvbGRlZikKK3sKKwlPYmpUcmVlICAgICpy ZXQgPSBOVUxMOworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlv bkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsKKwlGb3JtX3BnX2F0dHJp YnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlwbW9kOworCU9pZAkJCXR5 cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJ YXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsK KwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1IsICJjb3VsZCBu b3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiAldSIsCisJ CQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9wZ19hdHRyaWJ1 dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29sbChyZWxpZCwg YXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlwY29sbGF0aW9u KTsKKworCS8qCisJICogU2VhcmNoIGZvciBhIE5PVCBOVUxMIGRlY2xhcmF0aW9uLiAgQXMgaW4g ZGVwYXJzZV9Db2x1bW5EZWYsIHdlIHJlbHkgb24KKwkgKiBmaW5kaW5nIGEgY29uc3RyYWludCBv biB0aGUgY29sdW1uIHJhdGhlciB0aGFuIGNvbGRlZi0+aXNfbm90X251bGwuCisJICogKFRoaXMg cm91dGluZSBpcyBuZXZlciB1c2VkIGZvciBBTFRFUiBjYXNlcy4pCisJICovCisJc2F3X25vdG51 bGwgPSBmYWxzZTsKKwlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJeworCQlD b25zdHJhaW50ICpjb25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYg KGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJeworCQkJc2F3X25vdG51bGwg PSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXNhd19ub3RudWxsICYmICFhdHRy Rm9ybS0+YXR0aGFzZGVmKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCQlyZXR1 cm4gTlVMTDsKKwl9CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwlpZiAo YXR0ckZvcm0tPmF0dGhhc2RlZikKKwl7CisJCWNoYXIJICAgKmRlZnN0cjsKKworCQlkZWZzdHIg PSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJ CQkJCQkJCQkJICBkcGNvbnRleHQsIE5VTEwpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cF9vYmosICIle2RlZmF1bHR9cyIsICJkZWZhdWx0IiwgZGVmc3RyKTsKKwl9CisJZWxzZQorCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiJXtu YW1lfUkgV0lUSCBPUFRJT05TICV7bm90X251bGx9cyAle2RlZmF1bHR9cyIsIDQsCisJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwKKwkJCQkJCSAibmFtZSIsIE9ialR5cGVT dHJpbmcsIGNvbGRlZi0+Y29sbmFtZSwKKwkJCQkJCSAibm90X251bGwiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJIHNhd19ub3RudWxsID8gIk5PVCBOVUxMIiA6ICIiLAorCQkJCQkJICJkZWZhdWx0 IiwgT2JqVHlwZU9iamVjdCwgdG1wX29iaik7CisKKwkvKiBHZW5lcmF0ZWQgY29sdW1ucyBhcmUg bm90IHN1cHBvcnRlZCBvbiB0eXBlZCB0YWJsZXMsIHNvIHdlIGFyZSBkb25lICovCisKKwlSZWxl YXNlU3lzQ2FjaGUoYXR0clR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJz ZSB0aGUgZGVmaW5pdGlvbiBvZiBjb2x1bW4gaWRlbnRpdHkuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIFNFVCBHRU5FUkFURUQgJXtvcHRpb259cyAle2lkZW50aXR5X3R5cGV9cyAle3NlcV9k ZWZpbml0aW9uOiB9cworICogCU9SCisgKiBHRU5FUkFURUQgJXtvcHRpb259cyBBUyBJREVOVElU WSAle2lkZW50aXR5X3R5cGV9cyAoICV7c2VxX2RlZmluaXRpb246IH1zICkKKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5JZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRl bnRpdHksIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUg ICAgKmlkZW50X29iajsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlSZWxhdGlvbglyZWw7CisJ SGVhcFR1cGxlCXNlcXR1cGxlOworCUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlGb3JtX3Bn X3NlcXVlbmNlX2RhdGEgc2VxZGF0YTsKKwljaGFyCSAgICppZGVudGZtdDsKKwljaGFyCSAgICpv YmpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJeworCQlpZGVudGZtdCA9ICJTRVQgR0VORVJB VEVEICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1zIjsKKwl9CisJZWxzZQorCXsKKwkJaWRlbnRm bXQgPSAiR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1zIEFTIElERU5USVRZIjsK Kwl9CisKKwlpZGVudF9vYmogPSBuZXdfb2JqdHJlZShpZGVudGZtdCk7CisKKwlpZiAoaWRlbnRp dHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0FMV0FZUykKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo aWRlbnRfb2JqLCBvYmpmbXQsICJvcHRpb24iLCAiQUxXQVlTIik7CisJZWxzZSBpZiAoaWRlbnRp dHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0JZX0RFRkFVTFQpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGlkZW50X29iaiwgb2JqZm10LCAib3B0aW9uIiwgIkJZIERFRkFVTFQiKTsKKwllbHNlCisJ CWFwcGVuZF9ub3RfcHJlc2VudChpZGVudF9vYmopOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEo IiV7aWRlbnRpdHlfdHlwZX1zIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHlfdHlwZSIsIE9ialR5cGVP YmplY3QsIGlkZW50X29iaik7CisKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25J ZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNF UVJFTElELCBzZXFyZWxpZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlIHdpdGggT0lEICV1 IiwKKwkJCSBzZXFyZWxpZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNU UlVDVChzZXF0dXBsZSk7CisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMoc2VxcmVsaWQp OworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWVsZW1zID0gbGFwcGVuZChlbGVtcywg ZGVwYXJzZV9TZXFfQ2FjaGUoc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBl bmQoZWxlbXMsIGRlcGFyc2VfU2VxX0N5Y2xlKHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxl bXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShzZXFmb3JtLCBhbHRl cl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWludmFsdWUo c2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2Vf U2VxX01heHZhbHVlKHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVs ZW1zLCBkZXBhcnNlX1NlcV9TdGFydHdpdGgoc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVt cyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQoc2VxZGF0YSkpOworCS8qIFdl IHB1cnBvc2VmdWxseSBkbyBub3QgZW1pdCBPV05FRCBCWSBoZXJlICovCisKKwlpZiAoYWx0ZXJf dGFibGUpCisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtzZXFfZGVmaW5pdGlvbjogfXMi LCBlbGVtcyk7CisJZWxzZQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiggJXtzZXFfZGVm aW5pdGlvbjogfXMgKSIsIGVsZW1zKTsKKworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZl TG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogLi4uIEFMVEVSIENPTFVNTiAuLi4g U0VUL1JFU0VUICguLi4pCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIENPTFVNTiAl e2NvbHVtbn1JIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpCit7CisJ TGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9ialRyZWUgICAgKnJl dDsKKwlib29sCQlpc19yZXNldCA9IHN1YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNldE9wdGlvbnM7 CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgJXtvcHRp b259cyIsIDIsCisJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwK KwkJCQkJCSAib3B0aW9uIiwgT2JqVHlwZVN0cmluZywgaXNfcmVzZXQgPyAiUkVTRVQiIDogIlNF VCIpOworCisJZm9yZWFjaChjZWxsLCAoTGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7CisJCURlZkVs ZW0gICAgKmVsZW07CisJCU9ialRyZWUgICAgKnNldDsKKworCQllbGVtID0gKERlZkVsZW0gKikg bGZpcnN0KGNlbGwpOworCQlzZXQgPSBkZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNfcmVzZXQpOwor CQlzZXRzID0gbGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdChzZXQpKTsKKwl9CisKKwlB c3NlcnQoc2V0cyk7CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIoJXtvcHRpb25zOiwgfXMp Iiwgc2V0cyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSB0aGUgQ1JFQVRF IERPTUFJTgorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0 aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNy ZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBET01BSU4g JXtpZGVudGl0eX1EIEFTICV7dHlwZX1UICV7bm90X251bGx9cyAle2NvbnN0cmFpbnRzfXMKKyAq ICV7Y29sbGF0aW9ufXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVEb21h aW4oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAqcmV0Owor CU9ialRyZWUgICAgKnRtcF9vYmo7CisJSGVhcFR1cGxlCXR5cFR1cDsKKwlGb3JtX3BnX3R5cGUg dHlwRm9ybTsKKwlMaXN0CSAgICpjb25zdHJhaW50czsKKwljaGFyCSAgICpkZWZ2YWw7CisKKwl0 eXBUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZCh0eXBUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgZG9tYWluIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190 eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUg RE9NQUlOICV7aWRlbnRpdHl9RCBBUyAle3R5cGV9VCAle25vdF9udWxsfXMiLCAzLAorCQkJCQkJ ICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFR5cGVSZWxhdGlvbklkLCBvYmplY3RJZCksCisJCQkJCQkgInR5cGUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cEZvcm0tPnR5cGJhc2V0eXBl LAorCQkJCQkJCQkJCQkgIHR5cEZvcm0tPnR5cHR5cG1vZCksCisJCQkJCQkgIm5vdF9udWxsIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSB0eXBGb3JtLT50eXBub3RudWxsID8gIk5PVCBOVUxMIiA6 ICIiKTsKKworCWNvbnN0cmFpbnRzID0gb2J0YWluQ29uc3RyYWludHMoTklMLCBJbnZhbGlkT2lk LCBvYmplY3RJZCk7CisJaWYgKGNvbnN0cmFpbnRzID09IE5JTCkKKwl7CisJCXRtcF9vYmogPSBu ZXdfb2JqdHJlZSgiIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwl9CisJZWxz ZQorCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIiV7ZWxlbWVudHM6LCB9cyIsIDEsCisJCQkJ CQkJCSJlbGVtZW50cyIsIE9ialR5cGVBcnJheSwgY29uc3RyYWludHMpOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIiV7Y29uc3RyYWludHN9cyIsIHRtcF9vYmopOworCisJdG1wX29iaiA9 IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwY29s bGF0aW9uKSkKKwl7CisJCU9ialRyZWUgICAgKmNvbGxuYW1lOworCisJCWNvbGxuYW1lID0gbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CSAgIHR5cEZvcm0tPnR5cGNvbGxhdGlvbik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9v YmosICIle25hbWV9RCIsIGNvbGxuYW1lKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNl bnQodG1wX29iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjb2xsYXRpb259cyIs IHRtcF9vYmopOworCisJZGVmdmFsID0gRG9tYWluR2V0RGVmYXVsdCh0eXBUdXAsIHRydWUpOwor CWlmIChkZWZ2YWwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkRFRkFVTFQgJXtkZWZh dWx0fXMiLCAiZGVmYXVsdCIsIGRlZnZhbCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRnVuY3Rpb25TdG10 IChDUkVBVEUgRlVOQ1RJT04pCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBw YXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2Vu dGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICoKKyAq IENSRUFURSAle29yX3JlcGxhY2V9cyBGVU5DVElPTiAle3NpZ25hdHVyZX1zIFJFVFVSTlMgJXty ZXR1cm5fdHlwZX1zCisgKiBMQU5HVUFHRSAle3RyYW5zZm9ybV90eXBlfXMgJXtsYW5ndWFnZX1J ICV7d2luZG93fXMgJXt2b2xhdGlsaXR5fXMKKyAqICV7cGFyYWxsZWxfc2FmZXR5fXMgJXtsZWFr cHJvb2Z9cyAle3N0cmljdH1zICV7c2VjdXJpdHlfZGVmaW5lcn1zCisgKiAle2Nvc3R9cyAle3Jv d3N9cyAle3N1cHBvcnR9cyAle3NldF9vcHRpb25zOiB9cyBBUyAle29iamZpbGV9TCwKKyAqICV7 c3ltYm9sfUwKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGdW5jdGlvbihP aWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGdW5jdGlvblN0bXQgKm5v ZGUgPSAoQ3JlYXRlRnVuY3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7 CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlEYXR1bQkJdG1wZGF0dW07CisJY2hhcgkgICAqc291 cmNlOworCWNoYXIJICAgKnByb2JpbiA9IE5VTEw7CisJTGlzdAkgICAqcGFyYW1zOworCUxpc3QJ ICAgKmRlZmF1bHRzOworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdAkgICAqdHlwZXMgPSBO SUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlMaXN0Q2VsbCAgICpjdXJkZWY7CisJTGlzdENlbGwg ICAqdGFibGVfcGFyYW1zID0gTlVMTDsKKwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlGb3JtX3BnX3By b2MgcHJvY0Zvcm07CisJSGVhcFR1cGxlCWxhbmdUdXA7CisJT2lkCQkgICAqdHlwYXJyYXk7CisJ T2lkCQkgICAqdHJmdHlwZXM7CisJRm9ybV9wZ19sYW5ndWFnZSBsYW5nRm9ybTsKKwlpbnQJCQlp OworCWludAkJCXR5cG51bTsKKwlpbnQJCQludHlwZXM7CisJaW50CQkJcGFyYW1jb3VudCA9IGxp c3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpOworCWJvb2wJCWlzbnVsbDsKKwlib29sCQlpc2Z1 bmN0aW9uOworCisJLyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlICovCisJcHJvY1R1cCA9IFNlYXJj aFN5c0NhY2hlMShQUk9DT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBy b2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZnVuY3Rpb24g d2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2Mp IEdFVFNUUlVDVChwcm9jVHVwKTsKKworCS8qIEdldCB0aGUgY29ycmVzcG9uZGluZyBwZ19sYW5n dWFnZSB0dXBsZSAqLworCWxhbmdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoTEFOR09JRCwgcHJvY0Zv cm0tPnByb2xhbmcpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGxhbmd1YWdlIHdpdGggT0lEICV1IiwKKwkJ CSBwcm9jRm9ybS0+cHJvbGFuZyk7CisJbGFuZ0Zvcm0gPSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VU U1RSVUNUKGxhbmdUdXApOworCisJLyoKKwkgKiBEZXRlcm1pbmUgdXNlZnVsIHZhbHVlcyBmb3Ig cHJvc3JjIGFuZCBwcm9iaW4uICBXZSBjb3BlIHdpdGggcHJvYmluCisJICogYmVpbmcgZWl0aGVy IE5VTEwgb3IgIi0iLCBidXQgcHJvc3JjIG11c3QgaGF2ZSBhIHZhbGlkIHZhbHVlLgorCSAqLwor CXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAg QW51bV9wZ19wcm9jX3Byb3NyYywgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJP UiwgIm51bGwgcHJvc3JjIGluIGZ1bmN0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXNv dXJjZSA9IFRleHREYXR1bUdldENTdHJpbmcodG1wZGF0dW0pOworCisJLyogRGV0ZXJtaW5lIGEg dXNlZnVsIHZhbHVlIGZvciBwcm9iaW4gKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQ Uk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9iaW4sICZpc251bGwp OworCWlmICghaXNudWxsKQorCXsKKwkJcHJvYmluID0gVGV4dERhdHVtR2V0Q1N0cmluZyh0bXBk YXR1bSk7CisJCWlmIChwcm9iaW5bMF0gPT0gJ1wwJyB8fCBzdHJjbXAocHJvYmluLCAiLSIpID09 IDApCisJCQlwcm9iaW4gPSBOVUxMOworCX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVB VEUgJXtvcl9yZXBsYWNlfXMiLCAxLAorCQkJCQkJICJvcl9yZXBsYWNlIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0UiIDogIiIpOworCisJLyoKKwkg KiBUbyBjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyBhcnJheSwgZXh0cmFjdCB0aGUgdHlwZSBPSURz IGZyb20gdGhlCisJICogZnVuY3Rpb24ncyBwZ19wcm9jIGVudHJ5LiAgSWYgcHJvbmFyZ3MgZXF1 YWxzIHRoZSBwYXJhbWV0ZXIgbGlzdAorCSAqIGxlbmd0aCwgdGhlcmUgYXJlIG5vIE9VVCBwYXJh bWV0ZXJzIGFuZCB0aHVzIHdlIGNhbiBleHRyYWN0IHRoZSB0eXBlCisJICogT0lEIGZyb20gcHJv YXJndHlwZXM7IG90aGVyd2lzZSB3ZSBuZWVkIHRvIGRlY29kZSBwcm9hbGxhcmd0eXBlcywgd2hp Y2gKKwkgKiBpcyBhIGJpdCBtb3JlIGludm9sdmVkLgorCSAqLworCXR5cGFycmF5ID0gcGFsbG9j KHBhcmFtY291bnQgKiBzaXplb2YoT2lkKSk7CisJaWYgKHBhcmFtY291bnQgPiBwcm9jRm9ybS0+ cHJvbmFyZ3MpCisJeworCQlEYXR1bQkJYWxsdHlwZXM7CisJCURhdHVtCSAgICp2YWx1ZXM7CisJ CWJvb2wJICAgKm51bGxzOworCQlpbnQJCQluZWxlbXM7CisKKwkJYWxsdHlwZXMgPSBTeXNDYWNo ZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2Fs bGFyZ3R5cGVzLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJudWxs IHByb2FsbGFyZ3R5cGVzLCBtb3JlIG51bWJlciBvZiBwYXJhbWV0ZXJzIHRoYW4gYXJncyBpbiBm dW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkJIG9iamVjdElkKTsKKwkJZGVjb25zdHJ1Y3RfYXJy YXkoRGF0dW1HZXRBcnJheVR5cGVQKGFsbHR5cGVzKSwKKwkJCQkJCSAgT0lET0lELCA0LCAndCcs ICdpJywKKwkJCQkJCSAgJnZhbHVlcywgJm51bGxzLCAmbmVsZW1zKTsKKwkJaWYgKG5lbGVtcyAh PSBwYXJhbWNvdW50KQorCQkJZWxvZyhFUlJPUiwgIm1pc21hdGNoZWQgcHJvYWxsYXJnYXR5cGVz Iik7CisJCWZvciAoaSA9IDA7IGkgPCBwYXJhbWNvdW50OyBpKyspCisJCQl0eXBhcnJheVtpXSA9 IHZhbHVlc1tpXTsKKwl9CisJZWxzZQorCXsKKwkJZm9yIChpID0gMDsgaSA8IHBhcmFtY291bnQ7 IGkrKykKKwkJCXR5cGFycmF5W2ldID0gcHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXTsK Kwl9CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBhbnkgZGVmYXVsdCBleHByZXNzaW9ucywgd2Ug cmVhZCB0aGUgZGVwYXJzZWQgZXhwcmVzc2lvbgorCSAqIGFzIGEgbGlzdCBzbyB0aGF0IHdlIGNh biBhdHRhY2ggdGhlbSB0byBlYWNoIGFyZ3VtZW50LgorCSAqLworCXRtcGRhdHVtID0gU3lzQ2Fj aGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2Fy Z2RlZmF1bHRzLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCWRlZmF1bHRzID0gRnVu Y3Rpb25HZXREZWZhdWx0cyhEYXR1bUdldFRleHRQKHRtcGRhdHVtKSk7CisJCWN1cmRlZiA9IGxp c3RfaGVhZChkZWZhdWx0cyk7CisJfQorCWVsc2UKKwl7CisJCWRlZmF1bHRzID0gTklMOworCQlj dXJkZWYgPSBOVUxMOworCX0KKworCS8qCisJICogTm93IGl0ZXJhdGUgb3ZlciBlYWNoIHBhcmFt ZXRlciBpbiB0aGUgcGFyc2UgdHJlZSB0byBjcmVhdGUgdGhlCisJICogcGFyYW1ldGVycyBhcnJh eS4KKwkgKi8KKwlwYXJhbXMgPSBOSUw7CisJdHlwbnVtID0gMDsKKwlmb3JlYWNoKGNlbGwsIG5v ZGUtPnBhcmFtZXRlcnMpCisJeworCQlGdW5jdGlvblBhcmFtZXRlciAqcGFyYW0gPSAoRnVuY3Rp b25QYXJhbWV0ZXIgKikgbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlICAgICpwYXJhbV9vYmo7CisJ CU9ialRyZWUgICAgKmRlZmF1bHR2YWw7CisJCU9ialRyZWUgICAgKm5hbWU7CisKKwkJLyoKKwkJ ICogQSBQQVJBTV9UQUJMRSBwYXJhbWV0ZXIgaW5kaWNhdGVzIHRoZSBlbmQgb2YgaW5wdXQgYXJn dW1lbnRzOyB0aGUKKwkJICogZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHBhcnQgb2YgdGhlIHJl dHVybiB0eXBlLiAgV2UgaWdub3JlIHRoZW0KKwkJICogaGVyZSwgYnV0IGtlZXAgdHJhY2sgb2Yg dGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGxpc3Qgc28gdGhhdCB3ZQorCQkgKiBjYW4gZWFz aWx5IHByb2R1Y2UgdGhlIHJldHVybiB0eXBlIGJlbG93LgorCQkgKi8KKwkJaWYgKHBhcmFtLT5t b2RlID09IEZVTkNfUEFSQU1fVEFCTEUpCisJCXsKKwkJCXRhYmxlX3BhcmFtcyA9IGNlbGw7CisJ CQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFZlcmJvc2Ugc3ludGF4IGZvciBwYXJhbWF0ZXI6 ICV7bW9kZX1zICV7bmFtZX1zICV7dHlwZX1UCisJCSAqICV7ZGVmYXVsdH1zCisJCSAqLworCQlw YXJhbV9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXttb2RlfXMiLCAxLAorCQkJCQkJCQkgICJtb2Rl IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJICBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX09V VCA/ICJPVVQiIDoKKwkJCQkJCQkJICBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX0lOT1VUID8g IklOT1VUIiA6CisJCQkJCQkJCSAgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9WQVJJQURJQyA/ ICJWQVJJQURJQyIgOgorCQkJCQkJCQkgICJJTiIpOworCisJCS8qIE9wdGlvbmFsIHdob2xlc2Fs ZSBzdXBwcmVzc2lvbiBvZiAibmFtZSIgb2NjdXJzIGhlcmUgKi8KKwkJbmFtZSA9IG5ld19vYmp0 cmVlKCIiKTsKKwkJaWYgKHBhcmFtLT5uYW1lKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QobmFt ZSwgIiV7bmFtZX1JIiwgIm5hbWUiLCBwYXJhbS0+bmFtZSk7CisJCWVsc2UKKwkJeworCQkJYXBw ZW5kX251bGxfb2JqZWN0KG5hbWUsICIle25hbWV9SSIpOworCQkJYXBwZW5kX25vdF9wcmVzZW50 KG5hbWUpOworCQl9CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1fb2JqLCAiJXtuYW1l fXMiLCBuYW1lKTsKKworCQlkZWZhdWx0dmFsID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwkJ aWYgKFBvaW50ZXJJc1ZhbGlkKHBhcmFtLT5kZWZleHByKSkKKwkJeworCQkJY2hhcgkgICAqZXhw cjsKKworCQkJaWYgKGN1cmRlZiA9PSBOVUxMKQorCQkJCWVsb2coRVJST1IsICJwcm9hcmdkZWZh dWx0cyBsaXN0IHRvbyBzaG9ydCIpOworCQkJZXhwciA9IGxmaXJzdChjdXJkZWYpOworCisJCQlh cHBlbmRfc3RyaW5nX29iamVjdChkZWZhdWx0dmFsLCAiJXt2YWx1ZX1zIiwgInZhbHVlIiwgZXhw cik7CisJCQljdXJkZWYgPSBsbmV4dChkZWZhdWx0cywgY3VyZGVmKTsKKwkJfQorCQllbHNlCisJ CQlhcHBlbmRfbm90X3ByZXNlbnQoZGVmYXVsdHZhbCk7CisKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QocGFyYW1fb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0 eXBhcnJheVt0eXBudW0rK10sIC0xKSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1f b2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZhdWx0dmFsKTsKKworCQlwYXJhbXMgPSBsYXBwZW5kKHBh cmFtcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1fb2JqKSk7CisJfQorCisJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCW9iamVjdElkKSk7CisKKwlhcHBlbmRfZm9ybWF0X3N0 cmluZyh0bXBfb2JqLCAiKCIpOworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIiV7YXJn dW1lbnRzOiwgfXMiLCBwYXJhbXMpOworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmosICIp Iik7CisKKwlpc2Z1bmN0aW9uID0gKHByb2NGb3JtLT5wcm9raW5kICE9IFBST0tJTkRfUFJPQ0VE VVJFKTsKKworCWlmIChpc2Z1bmN0aW9uKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJG VU5DVElPTiAle3NpZ25hdHVyZX1zIiwgdG1wX29iaik7CisJZWxzZQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdChyZXQsICJQUk9DRURVUkUgJXtzaWduYXR1cmV9cyIsIHRtcF9vYmopOworCisJLyoK KwkgKiBBIHJldHVybiB0eXBlIGNhbiBhZG9wdCBvbmUgb2YgdHdvIGZvcm1zOiBlaXRoZXIgYSBb U0VUT0ZdIHNvbWVfdHlwZSwKKwkgKiBvciBhIFRBQkxFKGxpc3Qtb2YtdHlwZXMpLiAgV2UgY2Fu IHRlbGwgdGhlIHNlY29uZCBmb3JtIGJlY2F1c2Ugd2Ugc2F3CisJICogYSB0YWJsZSBwYXJhbSBh Ym92ZSB3aGlsZSBzY2FubmluZyB0aGUgYXJndW1lbnQgbGlzdC4KKwkgKi8KKwlpZiAodGFibGVf cGFyYW1zID09IE5VTEwpCisJeworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIiIsIDEsCisJ CQkJCQkJCSJyZXR1cm5fZm9ybSIsIE9ialR5cGVTdHJpbmcsICJwbGFpbiIpOworCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtzZXRvZn1zIiwgInNldG9mIiwKKwkJCQkJCQkgcHJv Y0Zvcm0tPnByb3JldHNldCA/ICJTRVRPRiIgOiAiIik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcF9vYmosICIle3JldHR5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHBy b2NGb3JtLT5wcm9yZXR0eXBlLCAtMSkpOworCX0KKwllbHNlCisJeworCQlMaXN0CSAgICpyZXR0 eXBlcyA9IE5JTDsKKwkJT2JqVHJlZSAgICAqcGFyYW1fb2JqOworCisJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiVEFCTEUiLCAxLAorCQkJCQkJCQkicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3Ry aW5nLCAidGFibGUiKTsKKwkJZm9yICg7IHRhYmxlX3BhcmFtcyAhPSBOVUxMOyB0YWJsZV9wYXJh bXMgPSBsbmV4dChub2RlLT5wYXJhbWV0ZXJzLCB0YWJsZV9wYXJhbXMpKQorCQl7CisJCQlGdW5j dGlvblBhcmFtZXRlciAqcGFyYW0gPSBsZmlyc3QodGFibGVfcGFyYW1zKTsKKworCQkJcGFyYW1f b2JqID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1JICV7dHlwZX1UIiwgMiwKKwkJCQkJCQkJCSAg Im5hbWUiLCBPYmpUeXBlU3RyaW5nLCBwYXJhbS0+bmFtZSwKKwkJCQkJCQkJCSAgInR5cGUiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBhcnJheVt0 eXBudW0rK10sIC0xKSk7CisJCQlyZXR0eXBlcyA9IGxhcHBlbmQocmV0dHlwZXMsIG5ld19vYmpl Y3Rfb2JqZWN0KHBhcmFtX29iaikpOworCQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBf b2JqLCAiKCV7cmV0dHlwZXM6LCB9cykiLCByZXR0eXBlcyk7CisJfQorCisJaWYgKGlzZnVuY3Rp b24pCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIlJFVFVSTlMgJXtyZXR1cm5fdHlwZX1z IiwgdG1wX29iaik7CisKKwkvKiBUUkFOU0ZPUk0gRk9SIFRZUEUgKi8KKwl0bXBfb2JqID0gbmV3 X29ianRyZWUoIlRSQU5TRk9STSIpOworCisJbnR5cGVzID0gZ2V0X2Z1bmNfdHJmdHlwZXMocHJv Y1R1cCwgJnRyZnR5cGVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnR5cGVzOyBpKyspCisJeworCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkZPUiBUWVBFICV7dHlwZX1UIiwgMSwKKwkJCQkJCQkJ InR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZSh0cmZ0 eXBlc1tpXSwgLTEpKTsKKwkJdHlwZXMgPSBsYXBwZW5kKHR5cGVzLCB0bXBfb2JqKTsKKwl9CisK KwlpZiAodHlwZXMpCisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIiV7Zm9yX3R5cGU6 LCB9cyIsIHR5cGVzKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dHJhbnNmb3JtX3R5cGV9cyIsIHRtcF9vYmop OworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiTEFOR1VBR0UgJXtsYW5ndWFnZX1JIiwg Imxhbmd1YWdlIiwKKwkJCQkJCSBOYW1lU3RyKGxhbmdGb3JtLT5sYW5uYW1lKSk7CisKKwlpZiAo aXNmdW5jdGlvbikKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7d2luZG93fXMi LCAid2luZG93IiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2tpbmQgPT0gUFJPS0lORF9XSU5ET1cg PyAiV0lORE9XIiA6ICIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXt2b2xhdGls aXR5fXMiLCAidm9sYXRpbGl0eSIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm92b2xhdGlsZSA9PSBQ Uk9WT0xBVElMRV9WT0xBVElMRSA/CisJCQkJCQkJICJWT0xBVElMRSIgOgorCQkJCQkJCSBwcm9j Rm9ybS0+cHJvdm9sYXRpbGUgPT0gUFJPVk9MQVRJTEVfU1RBQkxFID8KKwkJCQkJCQkgIlNUQUJM RSIgOiAiSU1NVVRBQkxFIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtwYXJh bGxlbF9zYWZldHl9cyIsCisJCQkJCQkJICJwYXJhbGxlbF9zYWZldHkiLAorCQkJCQkJCSBwcm9j Rm9ybS0+cHJvcGFyYWxsZWwgPT0gUFJPUEFSQUxMRUxfU0FGRSA/CisJCQkJCQkJICJQQVJBTExF TCBTQUZFIiA6CisJCQkJCQkJIHByb2NGb3JtLT5wcm9wYXJhbGxlbCA9PSBQUk9QQVJBTExFTF9S RVNUUklDVEVEID8KKwkJCQkJCQkgIlBBUkFMTEVMIFJFU1RSSUNURUQiIDogIlBBUkFMTEVMIFVO U0FGRSIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7bGVha3Byb29mfXMiLCAi bGVha3Byb29mIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2xlYWtwcm9vZiA/ICJMRUFLUFJPT0Yi IDogIiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3N0cmljdH1zIiwgInN0cmlj dCIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9pc3N0cmljdCA/CisJCQkJCQkJICJSRVRVUk5TIE5V TEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCSAiQ0FMTEVEIE9OIE5VTEwgSU5QVVQiKTsKKwor CQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3NlY3VyaXR5X2RlZmluZXJ9cyIsCisJCQkJ CQkJICJzZWN1cml0eV9kZWZpbmVyIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3NlY2RlZiA/CisJ CQkJCQkJICJTRUNVUklUWSBERUZJTkVSIiA6ICJTRUNVUklUWSBJTlZPS0VSIik7CisKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjb3N0fXMiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9W QSgiQ09TVCAle2Nvc3R9biIsIDEsCisJCQkJCQkJCQkJCSJjb3N0IiwgT2JqVHlwZUZsb2F0LAor CQkJCQkJCQkJCQlwcm9jRm9ybS0+cHJvY29zdCkpOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJl ZSgiUk9XUyIpOworCQlpZiAocHJvY0Zvcm0tPnByb3Jvd3MgPT0gMCkKKwkJCWFwcGVuZF9ub3Rf cHJlc2VudCh0bXBfb2JqKTsKKwkJZWxzZQorCQkJYXBwZW5kX2Zsb2F0X29iamVjdCh0bXBfb2Jq LCAiJXtyb3dzfW4iLCBwcm9jRm9ybS0+cHJvcm93cyk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7cm93c31zIiwgdG1wX29iaik7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJT VVBQT1JUICV7bmFtZX1zIik7CisJCWlmIChwcm9jRm9ybS0+cHJvc3VwcG9ydCkKKwkJeworCQkJ T2lkCQkJYXJndHlwZXNbXSA9IHsgSU5URVJOQUxPSUQgfTsKKworCQkJLyoKKwkJCSAqIFdlIHNo b3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3MgbmFtZSBpZiBpdCB3b3VsZG4ndCBi ZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGluIHRoZSBjdXJyZW50IHNlYXJjaCBwYXRoLgor CQkJICovCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtuYW1lfXMiLCAibmFt ZSIsCisJCQkJCQkJCSBnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0 LCAxLAorCQkJCQkJCQkJCQkJCQlOSUwsIGFyZ3R5cGVzLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwg TlVMTCwKKwkJCQkJCQkJCQkJCQkJRVhQUl9LSU5EX05PTkUpKTsKKwkJfQorCQllbHNlCisJCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0 LCAiJXtzdXBwb3J0fXMiLCB0bXBfb2JqKTsKKwl9CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9w dGlvbnMpCisJeworCQlEZWZFbGVtICAgICpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxs KTsKKworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2V0IikgPT0gMCkKKwkJeworCQkJ VmFyaWFibGVTZXRTdG10ICpzc3RtdCA9IChWYXJpYWJsZVNldFN0bXQgKikgZGVmZWwtPmFyZzsK KwkJCWNoYXIJICAgKnZhbHVlID0gRXh0cmFjdFNldFZhcmlhYmxlQXJncyhzc3RtdCk7CisKKwkJ CXRtcF9vYmogPSBkZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+bmFtZSwg dmFsdWUpOworCQkJc2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3QodG1wX29i aikpOworCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtzZXRfb3B0aW9uczog fXMiLCBzZXRzKTsKKworCS8qIEFkZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLworCSh2b2lk KSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwgQW51bV9wZ19wcm9jX3Byb3NxbGJv ZHksICZpc251bGwpOworCWlmIChwcm9jRm9ybS0+cHJvbGFuZyA9PSBTUUxsYW5ndWFnZUlkICYm ICFpc251bGwpCisJeworCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJaW5pdFN0cmluZ0luZm8o JmJ1Zik7CisJCXByaW50X2Z1bmN0aW9uX3NxbGJvZHkoJmJ1ZiwgcHJvY1R1cCk7CisKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtkZWZpbml0aW9ufXMiLCAiZGVmaW5pdGlvbiIsCisJ CQkJCQkJIGJ1Zi5kYXRhKTsKKwl9CisJZWxzZSBpZiAocHJvYmluID09IE5VTEwpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHJldCwgIkFTICV7ZGVmaW5pdGlvbn1MIiwgImRlZmluaXRpb24iLCBz b3VyY2UpOworCWVsc2UKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkFTICV7b2Jq ZmlsZX1MIiwgIm9iamZpbGUiLCBwcm9iaW4pOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQs ICIsICV7c3ltYm9sfUwiLCAic3ltYm9sIiwgc291cmNlKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2Fj aGUobGFuZ1R1cCk7CisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgY29tbWFuZC4KKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIE9QRVJBVE9SIENMQVNTICV7aWRlbnRpdHl9 RCAle2RlZmF1bHR9cyBGT1IgVFlQRSAle3R5cGV9VCBVU0lORworICogJXthbW5hbWV9SSAle29w ZmFtaWx5fXMgQVMgJXtpdGVtczosIH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q3JlYXRlT3BDbGFzc1N0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9wY29p ZCA9IGNtZC0+ZC5jcmVhdGVvcGMuYWRkcmVzcy5vYmplY3RJZDsKKwlIZWFwVHVwbGUJb3BjVHVw OworCUhlYXBUdXBsZQlvcGZUdXA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUZvcm1f cGdfb3BjbGFzcyBvcGNGb3JtOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBf b2JqOworCUxpc3QJICAgKmxpc3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qIERvbid0IGRl cGFyc2UgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNpb24gKi8K KwlpZiAoY21kLT5pbl9leHRlbnNpb24pCisJCXJldHVybiBOVUxMOworCisJb3BjVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKENMQU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGNvaWQpKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQob3BjVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIG9wY2xhc3Mgd2l0aCBPSUQgJXUiLCBvcGNvaWQpOworCW9wY0Zvcm0gPSAoRm9ybV9w Z19vcGNsYXNzKSBHRVRTVFJVQ1Qob3BjVHVwKTsKKworCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hl MShPUEZBTUlMWU9JRCwgb3BjRm9ybS0+b3BjZmFtaWx5KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQob3BmVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJh dG9yIGZhbWlseSB3aXRoIE9JRCAldSIsIG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJb3BmRm9ybSA9 IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgJXtpZGVudGl0eX1EICV7ZGVmYXVsdH1zIEZP UiBUWVBFICV7dHlwZX1UIFVTSU5HICV7YW1uYW1lfUkiLCA0LAorCQkJCQkJICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wY0Zvcm0t Pm9wY25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihvcGNGb3JtLT5vcGNuYW1lKSks CisJCQkJCQkgImRlZmF1bHQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG9wY0Zvcm0tPm9wY2Rl ZmF1bHQgPyAiREVGQVVMVCIgOiAiIiwKKwkJCQkJCSAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3BjRm9ybS0+b3BjaW50eXBlLCAtMSksCisJCQkJ CQkgImFtbmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9hbV9uYW1lKG9wY0Zvcm0tPm9wY21ldGhv ZCkpOworCisJLyoKKwkgKiBBZGQgdGhlIEZBTUlMWSBjbGF1c2UsIGJ1dCBpZiBpdCBoYXMgdGhl IHNhbWUgbmFtZSBhbmQgbmFtZXNwYWNlIGFzIHRoZQorCSAqIG9wY2xhc3MsIHRoZW4gaGF2ZSBp dCBleHBhbmQgdG8gZW1wdHkgYmVjYXVzZSBpdCB3b3VsZCBjYXVzZSBhIGZhaWx1cmUKKwkgKiBp ZiB0aGUgb3BmYW1pbHkgd2FzIGNyZWF0ZWQgaW50ZXJuYWxseS4KKwkgKi8KKwl0bXBfb2JqID0g bmV3X29ianRyZWVfVkEoIkZBTUlMWSAle29wZmFtaWx5fUQiLCAxLAorCQkJCQkJCSJvcGZhbWls eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZv cm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1l KSkpOworCisJaWYgKHN0cmNtcChOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpLCBOYW1lU3RyKG9w Y0Zvcm0tPm9wY25hbWUpKSA9PSAwICYmCisJCW9wZkZvcm0tPm9wZm5hbWVzcGFjZSA9PSBvcGNG b3JtLT5vcGNuYW1lc3BhY2UpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7b3BmYW1pbHl9cyIsIHRtcF9vYmopOworCisJLyoK KwkgKiBBZGQgdGhlIGluaXRpYWwgaXRlbSBsaXN0LiAgTm90ZSB3ZSBhbHdheXMgYWRkIHRoZSBT VE9SQUdFIGNsYXVzZSwgZXZlbgorCSAqIHdoZW4gaXQgaXMgaW1wbGljaXQgaW4gdGhlIG9yaWdp bmFsIGNvbW1hbmQuCisJICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJTVE9SQUdFIik7CisJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfdHlwZShPaWRJc1ZhbGlkKG9wY0Zvcm0tPm9wY2tleXR5cGUpID8KKwkJCQkJCQkJ CQkJICBvcGNGb3JtLT5vcGNrZXl0eXBlIDogb3BjRm9ybS0+b3BjaW50eXBlLAorCQkJCQkJCQkJ CQkgIC0xKSk7CisJbGlzdCA9IGxpc3RfbWFrZTEobmV3X29iamVjdF9vYmplY3QodG1wX29iaikp OworCisJLyogQWRkIHRoZSBkZWNsYXJlZCBvcGVyYXRvcnMgKi8KKwlmb3JlYWNoKGNlbGwsIGNt ZC0+ZC5jcmVhdGVvcGMub3BlcmF0b3JzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKm9wZXIgPSBs Zmlyc3QoY2VsbCk7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJPUEVSQVRPUiAle251 bX1uICV7b3BlcmF0b3J9Tygle2x0eXBlfVQsICV7cnR5cGV9VCkiLCA0LAorCQkJCQkJCQkibnVt IiwgT2JqVHlwZUludGVnZXIsIG9wZXItPm51bWJlciwKKwkJCQkJCQkJIm9wZXJhdG9yIiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9y UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCW9wZXItPm9iamVjdCksCisJCQkJCQkJCSJsdHlw ZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPmxl ZnR0eXBlLCAtMSksCisJCQkJCQkJCSJydHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5l d19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQgdGhl IEZPUiBTRUFSQ0ggLyBGT1IgT1JERVIgQlkgY2xhdXNlICovCisJCWlmIChvcGVyLT5zb3J0ZmFt aWx5ID09IEludmFsaWRPaWQpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtw dXJwb3NlfXMiLCAicHVycG9zZSIsCisJCQkJCQkJCSAiRk9SIFNFQVJDSCIpOworCQllbHNlCisJ CXsKKwkJCU9ialRyZWUgICAgKnRtcF9vYmoyOworCisJCQl0bXBfb2JqMiA9IG5ld19vYmp0cmVl KCJGT1IgT1JERVIgQlkgJXtvcGZhbWlseX1EIik7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXBfb2JqMiwgIm9wZmFtaWx5IiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChPcGVyYXRvckZhbWlseVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgb3Blci0+c29ydGZh bWlseSkpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7cHVycG9zZX1zIiwg dG1wX29iajIpOworCQl9CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCX0KKworCS8qIEFkZCB0aGUgZGVjbGFyZWQgc3VwcG9ydCBmdW5jdGlv bnMgKi8KKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5jcmVhdGVvcGMucHJvY2VkdXJlcykKKwl7CisJ CU9wRmFtaWx5TWVtYmVyICpwcm9jID0gbGZpcnN0KGNlbGwpOworCQlIZWFwVHVwbGUJcHJvY1R1 cDsKKwkJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCQlPaWQJCSAgICpwcm9hcmd0eXBlczsKKwkJ TGlzdAkgICAqYXJnbGlzdCA9IE5JTDsKKwkJaW50CQkJaTsKKworCQlwcm9jVHVwID0gU2VhcmNo U3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvYy0+b2JqZWN0KSk7CisJCWlm ICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgd2l0aCBPSUQgJXUiLAorCQkJCSBwcm9jLT5vYmplY3Qp OworCQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkZVTkNUSU9OICV7bnVtfW4gKCV7bHR5cGV9VCwgJXty dHlwZX1UKSAle2Z1bmN0aW9ufUQiLCA0LAorCQkJCQkJCQkibnVtIiwgT2JqVHlwZUludGVnZXIs IHByb2MtPm51bWJlciwKKwkJCQkJCQkJImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJ bmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkJInJ0eXBl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmln aHR0eXBlLCAtMSksCisJCQkJCQkJCSJmdW5jdGlvbiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ CW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJCQkgTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKworCQlwcm9hcmd0eXBlcyA9 IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9y bS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJlZSAgICAqYXJnOworCisJCQlhcmcgPSBu ZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJYXJnbGlzdCA9IGxh cHBlbmQoYXJnbGlzdCwgbmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJCX0KKworCQlhcHBlbmRf Zm9ybWF0X3N0cmluZyh0bXBfb2JqLCAiKCIpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9v YmosICIle2FyZ3R5cGVzOiwgfVQiLCBhcmdsaXN0KTsKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmco dG1wX29iaiwgIikiKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwkJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCX0KKworCWFwcGVu ZF9hcnJheV9vYmplY3QocmV0LCAiQVMgJXtpdGVtczosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNl U3lzQ2FjaGUob3BmVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlT3BGYW1pbHlTdG10IChDUkVBVEUgT1BF UkFUT1IgRkFNSUxZKQorICoKKyAqIEdpdmVuIGEgb3BlcmF0b3IgZmFtaWx5IE9JRCBhbmQgdGhl IHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVz ZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBD UkVBVEUgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFtZX1JCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlT3BGYW1pbHkoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJSGVhcFR1cGxlCW9wZlR1cDsKKwlIZWFwVHVwbGUJYW1UdXA7 CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUZvcm1fcGdfYW0JYW1Gb3JtOworCU9ialRy ZWUgICAgKnJldDsKKworCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgT2Jq ZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGZUdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5 IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkg R0VUU1RSVUNUKG9wZlR1cCk7CisKKwlhbVR1cCA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2Jq ZWN0SWRHZXREYXR1bShvcGZGb3JtLT5vcGZtZXRob2QpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQoYW1UdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNz IG1ldGhvZCB3aXRoIE9JRCAldSIsCisJCQkgb3BmRm9ybS0+b3BmbWV0aG9kKTsKKwlhbUZvcm0g PSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFtVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJDUkVBVEUgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFtZX1JIiwg MiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVT dHIob3BmRm9ybS0+b3BmbmFtZSkpLAorCQkJCQkJICJhbW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBO YW1lU3RyKGFtRm9ybS0+YW1uYW1lKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoYW1UdXApOworCVJl bGVhc2VTeXNDYWNoZShvcGZUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFy c2UgYSBDcmVhdGVQb2xpY3lTdG10IChDUkVBVEUgUE9MSUNZKQorICoKKyAqIEdpdmVuIGEgcG9s aWN5IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2Jq VHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBDUkVBVEUgUE9MSUNZICV7aWRlbnRpdHl9SQorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0NyZWF0ZVBvbGljeVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJQ3JlYXRlUG9saWN5U3RtdCAqbm9kZSA9IChDcmVhdGVQb2xpY3lTdG10ICop IHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi Q1JFQVRFIFBPTElDWSAle2lkZW50aXR5fUkiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5 cGVTdHJpbmcsIG5vZGUtPnBvbGljeV9uYW1lKTsKKworCS8qIEFkZCB0aGUgcmVzdCBvZiB0aGUg c3R1ZmYgKi8KKwlhZGRfcG9saWN5X2NsYXVzZXMocmV0LCBvYmplY3RJZCwgbm9kZS0+cm9sZXMs IG5vZGUtPnF1YWwgIT0gTlVMTCwKKwkJCQkJICAgbm9kZS0+d2l0aF9jaGVjayAhPSBOVUxMKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJQb2xpY3lTdG10IChB TFRFUiBQT0xJQ1kpCisgKgorICogR2l2ZW4gYSBwb2xpY3kgT0lEIGFuZCB0aGUgcGFyc2UgdHJl ZSBvZiB0aGUgQUxURVIgUE9MSUNZIGNvbW1hbmQsIHJldHVybgorICogYW4gT2JqVHJlZSByZXBy ZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFM VEVSIFBPTElDWSAle2lkZW50aXR5fUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9B bHRlclBvbGljeVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJQ b2xpY3lTdG10ICpub2RlID0gKEFsdGVyUG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJl ZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFBPTElDWSAle2lkZW50 aXR5fUkiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnBvbGlj eV9uYW1lKTsKKworCS8qIEFkZCB0aGUgcmVzdCBvZiB0aGUgc3R1ZmYgKi8KKwlhZGRfcG9saWN5 X2NsYXVzZXMocmV0LCBvYmplY3RJZCwgbm9kZS0+cm9sZXMsIG5vZGUtPnF1YWwgIT0gTlVMTCwK KwkJCQkJICAgbm9kZS0+d2l0aF9jaGVjayAhPSBOVUxMKTsKKworCXJldHVybiByZXQ7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU2NoZW1hU3RtdC4KKyAqCisgKiBHaXZlbiBhIHNjaGVt YSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRy ZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle2F1 dGhvcml6YXRpb259cworKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU2NoZW1h U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTY2hlbWFTdG10 ICpub2RlID0gKENyZWF0ZVNjaGVtYVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJl dDsKKwlPYmpUcmVlICAgICphdXRoOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBT Q0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkiLCAyLAorCQkJCQkJICJpZl9ub3RfZXhp c3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5P VCBFWElTVFMiIDogIiIsCisJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5v ZGUtPnNjaGVtYW5hbWUgPyBub2RlLT5zY2hlbWFuYW1lIDogIiIpOworCisJYXV0aCA9IG5ld19v Ymp0cmVlKCJBVVRIT1JJWkFUSU9OIik7CisJaWYgKG5vZGUtPmF1dGhyb2xlKQorCQlhcHBlbmRf c3RyaW5nX29iamVjdChhdXRoLCAiJXthdXRob3JpemF0aW9uX3JvbGV9SSIsCisJCQkJCQkJICJh dXRob3JpemF0aW9uX3JvbGUiLAorCQkJCQkJCSBnZXRfcm9sZXNwZWNfbmFtZShub2RlLT5hdXRo cm9sZSkpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdChhdXRoLCAiJXthdXRob3Jp emF0aW9uX3JvbGV9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQoYXV0aCk7CisJfQorCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7YXV0aG9yaXphdGlvbn1zIiwgYXV0aCk7CisKKwlyZXR1 cm4gcmV0OworfQorCisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgZG9tYWlu LgorICovCitzdGF0aWMgY2hhciAqCitEb21haW5HZXREZWZhdWx0KEhlYXBUdXBsZSBkb21UdXAs IGJvb2wgbWlzc2luZ19vaykKK3sKKwlEYXR1bQkJZGVmOworCU5vZGUJICAgKmRlZnZhbDsKKwlj aGFyCSAgICpkZWZzdHI7CisJYm9vbAkJaXNudWxsOworCisJZGVmID0gU3lzQ2FjaGVHZXRBdHRy KFRZUEVPSUQsIGRvbVR1cCwgQW51bV9wZ190eXBlX3R5cGRlZmF1bHRiaW4sCisJCQkJCQkgICZp c251bGwpOworCWlmIChpc251bGwpCisJeworCQlpZiAoIW1pc3Npbmdfb2spCisJCQllbG9nKEVS Uk9SLCAiZG9tYWluIFwiJXNcIiBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSIsCisJCQkJ TmFtZVN0cigoKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKGRvbVR1cCkpLT50eXBuYW1lKSk7CisJ CWVsc2UKKwkJCXJldHVybiBOVUxMOworCX0KKworCWRlZnZhbCA9IHN0cmluZ1RvTm9kZShUZXh0 RGF0dW1HZXRDU3RyaW5nKGRlZikpOworCWRlZnN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihkZWZ2 YWwsIE5VTEwgLyogZHBjb250ZXh0PyAqLyAsCisJCQkJCQkJCWZhbHNlLCBmYWxzZSk7CisKKwly ZXR1cm4gZGVmc3RyOworfQorCisvKgorICogRGVwYXJzZSBhIEFsdGVyRG9tYWluU3RtdC4KKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIERF RkFVTFQKKyAqIE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFNFVCBERUZBVUxUICV7 ZGVmYXVsdH1zCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIE5PVCBO VUxMCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBTRVQgTk9UIE5VTEwKKyAq IE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIEFERCBDT05TVFJBSU5UICV7Y29uc3Ry YWludF9uYW1lfXMgJXtkZWZpbml0aW9ufXMKKyAqIE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVu dGl0eX1EIERST1AgQ09OU1RSQUlOVCBJRiBFWElTVFMgJXtjb25zdHJhaW50X25hbWV9cyAle2Nh c2NhZGV9cworICogT1IKKyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgVkFMSURBVEUgQ09O U1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQWx0ZXJEb21haW5TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJ T2JqZWN0QWRkcmVzcyBjb25zdHJhaW50QWRkcikKK3sKKwlBbHRlckRvbWFpblN0bXQgKm5vZGUg PSAoQWx0ZXJEb21haW5TdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZG9tVHVwOworCUZv cm1fcGdfdHlwZSBkb21Gb3JtOworCU9ialRyZWUgICAgKnJldDsKKworCWRvbVR1cCA9IFNlYXJj aFN5c0NhY2hlMShUWVBFT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGRv bVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBkb21haW4gd2l0 aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJZG9tRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVD VChkb21UdXApOworCisJc3dpdGNoIChub2RlLT5zdWJ0eXBlKQorCXsKKwkJY2FzZSAnVCc6CisJ CQkvKiBTRVQgREVGQVVMVCAvIERST1AgREVGQVVMVCAqLworCQkJaWYgKG5vZGUtPmRlZiA9PSBO VUxMKQorCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1E IERST1AgREVGQVVMVCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJv cCBkZWZhdWx0IiwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJ CQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCWVsc2UKKwkJCQly ZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBTRVQgREVGQVVM VCAle2RlZmF1bHR9cyIsIDMsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0 IGRlZmF1bHQiLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSksCisJCQkJCQkJCQkgImRlZmF1 bHQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIERvbWFpbkdldERlZmF1bHQoZG9tVHVwLCBm YWxzZSkpOworCQkJYnJlYWs7CisJCWNhc2UgJ04nOgorCQkJLyogRFJPUCBOT1QgTlVMTCAqLwor CQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgRFJPUCBO T1QgTlVMTCIsIDIsCisJCQkJCQkJCQkgICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Agbm90 IG51bGwiLAorCQkJCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJ ICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJCQkJICAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJYnJlYWs7CisJCWNh c2UgJ08nOgorCQkJLyogU0VUIE5PVCBOVUxMICovCisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBTRVQgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IG5vdCBudWxsIiwKKwkJCQkJCQkJICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9y bS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFt ZSkpKTsKKwkJCWJyZWFrOworCQljYXNlICdDJzoKKwkJCS8qCisJCQkgKiBBREQgQ09OU1RSQUlO VC4gIE9ubHkgQ0hFQ0sgY29uc3RyYWludHMgYXJlIHN1cHBvcnRlZCBieQorCQkJICogZG9tYWlu cworCQkJICovCisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRp dHl9RCBBREQgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zICV7ZGVmaW5pdGlvbn1zIiwg NCwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IiwKKwkJ CQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVT dHIoZG9tRm9ybS0+dHlwbmFtZSkpLAorCQkJCQkJCQkgImNvbnN0cmFpbnRfbmFtZSIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkJCSBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0cmFpbnRBZGRyLm9i amVjdElkKSwKKwkJCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJ IHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0cmFpbnRBZGRyLm9iamVj dElkKSk7CisJCQlicmVhazsKKwkJY2FzZSAnVic6CisJCQkvKiBWQUxJREFURSBDT05TVFJBSU5U ICovCisJCQkvKgorCQkJICogUHJvY2VzcyBzdWJ0eXBlPXNwZWNpZmljIG9wdGlvbnMuIFZhbGlk YXRpb24gYSBjb25zdHJhaW50CisJCQkgKiByZXF1aXJlcyBpdHMgbmFtZS4KKwkJCSAqLworCQkJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgVkFMSURBVEUg Q09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zIiwgMywKKwkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgInZhbGlkYXRlIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkgImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3Jt LT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1l KSksCisJCQkJCQkJCSAiY29uc3RyYWludF9uYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmFt ZSk7CisJCQlicmVhazsKKwkJY2FzZSAnWCc6CisJCQl7CisJCQkJT2JqVHJlZSAgICAqdG1wX29i ajsKKworCQkJCS8qIERST1AgQ09OU1RSQUlOVCAqLworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIERST1AgQ09OU1RSQUlOVCBJRiBFWElTVFMgJXtj b25zdHJhaW50X25hbWV9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZHJvcCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2Us CisJCQkJCQkJCQkJCQkJCQkJTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSksCisJCQkJCQkJCQkJ ImNvbnN0cmFpbnRfbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5hbWUpOworCisJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkJCQkicHJlc2VudCIs IE9ialR5cGVCb29sLCBub2RlLT5iZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpOworCisJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjYXNjYWRlfXMiLCB0bXBfb2JqKTsKKwkJCX0KKwkJ CWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3VidHlwZSAlYyIs IG5vZGUtPnN1YnR5cGUpOworCX0KKworCS8qIERvbmUgKi8KKwlSZWxlYXNlU3lzQ2FjaGUoZG9t VHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU3RhdHNT dG10LgorICoKKyAqIEdpdmVuIGEgc3RhdGlzdGljcyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3Jl YXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFNUQVRJU1RJ Q1MgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIE9OICV7ZXhwcjosIH1zIEZST00gJXtz dGF0X3RhYmxlX2lkZW50aXR5fUQKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVh dGVTdGF0aXN0aWNzU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVh dGVTdGF0c1N0bXQgKm5vZGUgPSAoQ3JlYXRlU3RhdHNTdG10ICopIHBhcnNldHJlZTsKKwlGb3Jt X3BnX3N0YXRpc3RpY19leHQgc3RhdGZvcm07CisJT2JqVHJlZSAgICAqcmV0OworCUhlYXBUdXBs ZQl0dXA7CisJRGF0dW0JCWRhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlMaXN0CSAgICpzdGF0ZXhw cnMgPSBOSUw7CisKKwl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoU1RBVEVYVE9JRCwgT2JqZWN0SWRH ZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc3RhdGlzdGljIHdpdGggT0lEICV1Iiwg b2JqZWN0SWQpOworCisJc3RhdGZvcm0gPSAoRm9ybV9wZ19zdGF0aXN0aWNfZXh0KSBHRVRTVFJV Q1QodHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgU1RBVElTVElDUyAle2lm X25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQiLCAyLAorCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElT VFMiIDogIiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUoc3RhdGZvcm0tPnN0eG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CSAgTmFtZVN0cihzdGF0Zm9ybS0+c3R4bmFtZSkpKTsKKworCWRhdHVtID0gU3lzQ2FjaGVHZXRB dHRyKFNUQVRFWFRPSUQsIHR1cCwgQW51bV9wZ19zdGF0aXN0aWNfZXh0X3N0eGV4cHJzLAorCQkJ CQkJCSZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisJCVJl bGF0aW9uCXN0YXRzcmVsOworCQlMaXN0CSAgICpjb250ZXh0OworCQlMaXN0CSAgICpleHBycyA9 IE5JTDsKKwkJY2hhcgkgICAqZXhwcnNTdHJpbmc7CisKKwkJc3RhdHNyZWwgPSByZWxhdGlvbl9v cGVuKHN0YXRmb3JtLT5zdHhyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJY29udGV4dCA9IGRl cGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc3RhdHNyZWwpLAorCQkJ CQkJCQkJICBSZWxhdGlvbkdldFJlbGlkKHN0YXRzcmVsKSk7CisKKwkJZXhwcnNTdHJpbmcgPSBU ZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKKwkJZXhwcnMgPSAoTGlzdCAqKSBzdHJpbmdUb05v ZGUoZXhwcnNTdHJpbmcpOworCisJCWZvcmVhY2gobGMsIGV4cHJzKQorCQl7CisJCQlOb2RlCSAg ICpleHByID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKKwkJCWNoYXIJICAgKnN0YXRleHByOworCisJ CQlzdGF0ZXhwciA9IGRlcGFyc2VfZXhwcmVzc2lvbihleHByLCBjb250ZXh0LCBmYWxzZSwgZmFs c2UpOworCQkJc3RhdGV4cHJzID0gbGFwcGVuZChzdGF0ZXhwcnMsIG5ld19zdHJpbmdfb2JqZWN0 KHN0YXRleHByKSk7CisJCX0KKworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIk9OICV7ZXhw cjosIH1zIiwgc3RhdGV4cHJzKTsKKwkJcGZyZWUoZXhwcnNTdHJpbmcpOworCQlyZWxhdGlvbl9j bG9zZShzdGF0c3JlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl9CisKKwlkYXR1bSA9IFN5c0NhY2hl R2V0QXR0cihTVEFURVhUT0lELCB0dXAsIEFudW1fcGdfc3RhdGlzdGljX2V4dF9zdHhrZXlzLAor CQkJCQkJCSZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJaW50CQkJa2V5bm87CisJCWNo YXIJICAgKmF0dG5hbWU7CisJCUxpc3QJICAgKnN0YXRjb2xzID0gTklMOworCQlpbnQydmVjdG9y ICppbmRvcHRpb247CisKKwkJaW5kb3B0aW9uID0gKGludDJ2ZWN0b3IgKikgRGF0dW1HZXRQb2lu dGVyKGRhdHVtKTsKKworCQlmb3IgKGtleW5vID0gMDsga2V5bm8gPCBpbmRvcHRpb24tPmRpbTE7 IGtleW5vKyspCisJCXsKKwkJCWF0dG5hbWUgPSBnZXRfYXR0bmFtZShzdGF0Zm9ybS0+c3R4cmVs aWQsIGluZG9wdGlvbi0+dmFsdWVzW2tleW5vXSwKKwkJCQkJCQkJICBmYWxzZSk7CisJCQlzdGF0 Y29scyA9IGxhcHBlbmQoc3RhdGNvbHMsIG5ld19zdHJpbmdfb2JqZWN0KGF0dG5hbWUpKTsKKwkJ fQorCisJCWlmIChpbmRvcHRpb24tPmRpbTEpCisJCXsKKwkJCS8qIEFwcGVuZCBhICcsJyBpZiBz dGF0ZXhwcnMgaXMgcHJlc2VudCBlbHNlIGFwcGVuZCAnT04nICovCisJCQlhcHBlbmRfc3RyaW5n X29iamVjdChyZXQsICIle2NvbW1hfXMiLCAiY29tbWEiLAorCQkJCQkJCQkgc3RhdGV4cHJzID8g IiwiIDogIk9OIik7CisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7Y29sczosIH1zIiwg c3RhdGNvbHMpOworCQl9CisJfQorCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiRlJPTSAl e3N0YXRfdGFibGVfaWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KGdldF9yZWxfbmFtZXNwYWNlKHN0YXRmb3JtLT5zdHhyZWxpZCksCisJCQkJCQkJCQkJCQkgIGdl dF9yZWxfbmFtZShzdGF0Zm9ybS0+c3R4cmVsaWQpKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVw KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIENyZWF0ZUZvcmVpZ25T ZXJ2ZXJTdG10IChDUkVBVEUgU0VSVkVSKQorICoKKyAqIEdpdmVuIGEgc2VydmVyIE9JRCBhbmQg dGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVw cmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBD UkVBVEUgU0VSVkVSICV7aWRlbnRpdHl9SSAle3R5cGV9cyAle3ZlcnNpb259cyBGT1JFSUdOIERB VEEgV1JBUFBFUiAle2Zkd31JCisgKiAle2dlbmVyaWNfb3B0aW9uc31zCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQgKm5vZGUgPSAoQ3Jl YXRlRm9yZWlnblNlcnZlclN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlP YmpUcmVlICAgICp0bXA7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFNFUlZFUiAl e2lkZW50aXR5fUkiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUt PnNlcnZlcm5hbWUpOworCisJLyogQWRkIGEgVFlQRSBjbGF1c2UsIGlmIGFueSAqLworCXRtcCA9 IG5ld19vYmp0cmVlKCJUWVBFIik7CisJaWYgKG5vZGUtPnNlcnZlcnR5cGUpCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcCwgIiV7dHlwZX1MIiwgInR5cGUiLCBub2RlLT5zZXJ2ZXJ0eXBlKTsK KwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7dHlwZX1zIiwgdG1wKTsKKworCS8qIEFkZCBhIFZFUlNJT04gY2xhdXNlLCBpZiBh bnkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiVkVSU0lPTiIpOworCWlmIChub2RlLT52ZXJzaW9u KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle3ZlcnNpb259TCIsICJ2ZXJzaW9uIiwg bm9kZS0+dmVyc2lvbik7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle3ZlcnNpb259cyIsIHRtcCk7CisKKwlhcHBlbmRfc3Ry aW5nX29iamVjdChyZXQsICJGT1JFSUdOIERBVEEgV1JBUFBFUiAle2Zkd31JIiwgImZkdyIsCisJ CQkJCQkgbm9kZS0+ZmR3bmFtZSk7CisKKwkvKiBBZGQgYW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFu eSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Z2VuZXJpY19vcHRpb25zfXMiLAor CQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlyZXR1 cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckZvcmVpZ25TZXJ2ZXJTdG10IChB TFRFUiBTRVJWRVIpCisgKgorICogR2l2ZW4gYSBzZXJ2ZXIgT0lEIGFuZCB0aGUgcGFyc2UgdHJl ZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhl IGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFNFUlZFUiAl e2lkZW50aXR5fUkgJXt2ZXJzaW9ufXMgJXtnZW5lcmljX29wdGlvbnN9cworICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRm9yZWlnblNlcnZlclN0bXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJGb3JlaWduU2VydmVyU3RtdCAqbm9kZSA9IChBbHRl ckZvcmVpZ25TZXJ2ZXJTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICp0bXA7CisKKwkv KiBBZGQgYSBWRVJTSU9OIGNsYXVzZSwgaWYgYW55ICovCisJdG1wID0gbmV3X29ianRyZWUoIlZF UlNJT04iKTsKKwlpZiAobm9kZS0+aGFzX3ZlcnNpb24gJiYgbm9kZS0+dmVyc2lvbikKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt2ZXJzaW9ufUwiLCAidmVyc2lvbiIsIG5vZGUtPnZl cnNpb24pOworCWVsc2UgaWYgKG5vZGUtPmhhc192ZXJzaW9uKQorCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXAsICJ2ZXJzaW9uIiwgInZlcnNpb24iLCAiTlVMTCIpOworCWVsc2UKKwkJYXBwZW5k X25vdF9wcmVzZW50KHRtcCk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkFMVEVSIFNFUlZF UiAle2lkZW50aXR5fUkgJXt2ZXJzaW9ufXMgJXtnZW5lcmljX29wdGlvbnN9cyIsIDMsCisJCQkJ CQkgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnNlcnZlcm5hbWUsCisJCQkJCQkg ICJ2ZXJzaW9uIiwgT2JqVHlwZU9iamVjdCwgdG1wLAorCQkJCQkJICAiZ2VuZXJpY19vcHRpb25z IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlv bnMsIE5VTEwpKTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVQTGFuZ1N0bXQuCisgKgor ICogR2l2ZW4gYSBsYW5ndWFnZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFu ZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zICV7dHJ1 c3RlZH1zIExBTkdVQUdFICV7aWRlbnRpdHl9cyBIQU5ETEVSICV7aGFuZGxlcn1ECisgKiAle2lu bGluZX1zICV7dmFsaWRhdG9yfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVh dGVMYW5nU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVQTGFu Z1N0bXQgKm5vZGUgPSAoQ3JlYXRlUExhbmdTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAg ICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUhlYXBUdXBsZQlsYW5nVHVwOworCUZvcm1fcGdf bGFuZ3VhZ2UgbGFuZ0Zvcm07CisKKwlsYW5nVHVwID0gU2VhcmNoU3lzQ2FjaGUxKExBTkdPSUQs CisJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKGxhbmdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig bGFuZ3VhZ2Ugd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJbGFuZ0Zvcm0gPSAoRm9ybV9wZ19s YW5ndWFnZSkgR0VUU1RSVUNUKGxhbmdUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNS RUFURSAle29yX3JlcGxhY2V9cyAle3RydXN0ZWR9cyBMQU5HVUFHRSAle2lkZW50aXR5fXMiLCAz LAorCQkJCQkJICJvcl9yZXBsYWNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5yZXBs YWNlID8gIk9SIFJFUExBQ0UiIDogIiIsCisJCQkJCQkgInRydXN0ZWQiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJIGxhbmdGb3JtLT5sYW5wbHRydXN0ZWQgPyAiVFJVU1RFRCIgOiAiIiwKKwkJCQkJ CSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5wbG5hbWUpOworCisJaWYgKG5vZGUt PnBsaGFuZGxlciAhPSBOSUwpCisJeworCQkvKiBBZGQgdGhlIEhBTkRMRVIgY2xhdXNlICovCisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIkhBTkRMRVIgJXtoYW5kbGVyfUQiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJIGxhbmdGb3JtLT5sYW5wbGNhbGxmb2lkKSk7CisKKwkJLyogQWRkIHRoZSBJTkxJ TkUgY2xhdXNlLCBpZiBhbnkgKi8KKwkJdG1wID0gbmV3X29ianRyZWUoIklOTElORSIpOworCQlp ZiAoT2lkSXNWYWxpZChsYW5nRm9ybS0+bGFuaW5saW5lKSkKKwkJeworCQkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wLCAiJXtoYW5kbGVyX25hbWV9RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBsYW5n Rm9ybS0+bGFuaW5saW5lKSk7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KHRt cCk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aW5saW5lfXMiLCB0bXApOworCisJ CS8qIEFkZCB0aGUgVkFMSURBVE9SIGNsYXVzZSwgaWYgYW55ICovCisJCXRtcCA9IG5ld19vYmp0 cmVlKCJWQUxJREFUT1IiKTsKKwkJaWYgKE9pZElzVmFsaWQobGFuZ0Zvcm0tPmxhbnZhbGlkYXRv cikpCisJCXsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7aGFuZGxlcl9uYW1lfUQi LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCQkgbGFuZ0Zvcm0tPmxhbnZhbGlkYXRvcikpOworCQl9CisJCWVs c2UKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChy ZXQsICIle3ZhbGlkYXRvcn1zIiwgdG1wKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUobGFuZ1R1 cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVNlcVN0bXQu CisgKgorICogR2l2ZW4gYSBzZXF1ZW5jZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24g Y29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9 cyBTRVFVRU5DRSAle2lkZW50aXR5fUQKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9D cmVhdGVTZXFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUg ICAgKnJldDsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2Vx ZGF0YTsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07 CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlDcmVhdGVTZXFTdG10ICpj cmVhdGVTZXFTdG10ID0gKENyZWF0ZVNlcVN0bXQgKikgcGFyc2V0cmVlOworCisJLyoKKwkgKiBT ZXF1ZW5jZSBmb3IgSURFTlRJVFkgQ09MVU1OIG91dHB1dCBzZXBhcmF0ZWx5ICh2aWEgQ1JFQVRF IFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlp ZiAoY3JlYXRlU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCXNlcWRh dGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElkKTsKKworCXJlbGF0aW9uID0gcmVsYXRp b25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZWwgPSB0YWJsZV9vcGVuKFNl cXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hT eXNDYWNoZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKG9iamVj dElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlIHdpdGggT0lEICV1IiwKKwkJCSBvYmpl Y3RJZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBs ZSk7CisKKwkvKiBEZWZpbml0aW9uIGVsZW1lbnRzICovCisJZWxlbXMgPSBsYXBwZW5kKGVsZW1z LCBkZXBhcnNlX1NlcV9DYWNoZShzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChl bGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUoc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBl bmQoZWxlbXMsIGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KHNlcWZvcm0sIGZhbHNlKSk7CisJZWxl bXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NaW52YWx1ZShzZXFmb3JtLCBmYWxzZSkp OworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoc2VxZm9ybSwg ZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChz ZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfUmVz dGFydChzZXFkYXRhKSk7CisKKwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQg QlkgaGVyZSAqLworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSAle3BlcnNpc3RlbmNl fXMgU0VRVUVOQ0UgJXtpZGVudGl0eX1EICV7ZGVmaW5pdGlvbjogfXMiLCAzLAorCQkJCQkJICJw ZXJzaXN0ZW5jZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0cihy ZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSksCisJCQkJCQkgImlkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJk X3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShyZWxhdGlvbikpLAorCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZUFycmF5LCBlbGVtcyk7 CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXJlbGF0aW9uX2Nsb3Nl KHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IERlcGFyc2UgYSBDcmVhdGVTdG10IChDUkVBVEUgVEFCTEUpLgorICoKKyAqIEdpdmVuIGEgdGFi bGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9z ZSBzeW50YXgKKyAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3Rz fXMgJXtpZGVudGl0eX1EIFtPRgorICogJXtvZl90eXBlfVQgfCBQQVJUSVRJT04gT0YgJXtwYXJl bnRfaWRlbnRpdHl9RF0gJXt0YWJsZV9lbGVtZW50c31zCisgKiAle2luaGVyaXRzfXMgJXtwYXJ0 aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMKKyAqICV7b25fY29t bWl0fXMgJXt0YWJsZXNwYWNlfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVh dGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVN0bXQgKm5v ZGUgPSAoQ3JlYXRlU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcmVsYXRpb24gPSByZWxh dGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCUxpc3QJICAgKmRwY29udGV4 dDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlMaXN0CSAgICps aXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi Q1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5 fUQiLCAzLAorCQkJCQkJICJwZXJzaXN0ZW5jZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0 X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSksCisJCQkJ CQkgImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmlmX25vdF9l eGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVs LT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJl bGF0aW9uKSkpOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJCQlvYmplY3RJZCk7CisKKwkvKgorCSAq IFR5cGVkIHRhYmxlcyBhbmQgcGFydGl0aW9ucyB1c2UgYSBzbGlnaHRseSBkaWZmZXJlbnQgZm9y bWF0IHN0cmluZzogd2UKKwkgKiBtdXN0IG5vdCBwdXQgdGFibGVfZWxlbWVudHMgd2l0aCBwYXJl bnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nLAorCSAqIGJlY2F1c2UgaWYgdGhlcmUgYXJl IG5vIG9wdGlvbnMgdGhlIHBhcmVudGhlc2VzIG11c3Qgbm90IGJlIGVtaXR0ZWQ7CisJICogYW5k IGFsc28sIHR5cGVkIHRhYmxlcyBkbyBub3QgYWxsb3cgZm9yIGluaGVyaXRhbmNlLgorCSAqLwor CWlmIChub2RlLT5vZlR5cGVuYW1lIHx8IG5vZGUtPnBhcnRib3VuZCkKKwl7CisJCUxpc3QJICAg KnRhYmxlZWx0cyA9IE5JTDsKKworCQkvKgorCQkgKiBXZSBjYW4ndCBwdXQgdGFibGUgZWxlbWVu dHMgZGlyZWN0bHkgaW4gdGhlIGZtdCBzdHJpbmcgYXMgYW4gYXJyYXkKKwkJICogc3Vycm91bmRl ZCBieSBwYXJlbnRoZXNlcyBoZXJlLCBiZWNhdXNlIGFuIGVtcHR5IGNsYXVzZSB3b3VsZCBjYXVz ZQorCQkgKiBhIHN5bnRheCBlcnJvci4gIFRoZXJlZm9yZSwgd2UgdXNlIGFuIGluZGlyZWN0aW9u IGVsZW1lbnQgYW5kIHNldAorCQkgKiBwcmVzZW50PWZhbHNlIHdoZW4gdGhlcmUgYXJlIG5vIGVs ZW1lbnRzLgorCQkgKi8KKwkJaWYgKG5vZGUtPm9mVHlwZW5hbWUpCisJCXsKKwkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9mb3JfdHlwZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxvZnR5cGUsIC0xKTsK KwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIk9GICV7b2ZfdHlwZX1UIiwgdG1wX29iaik7 CisJCX0KKwkJZWxzZQorCQl7CisJCQlMaXN0CSAgICpwYXJlbnRzOworCQkJT2JqRWxlbSAgICAq ZWxlbTsKKworCQkJcGFyZW50cyA9IGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKTsKKwkJ CWVsZW0gPSAoT2JqRWxlbSAqKSBsaW5pdGlhbChwYXJlbnRzKTsKKworCQkJQXNzZXJ0KGxpc3Rf bGVuZ3RoKHBhcmVudHMpID09IDEpOworCisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICJQ QVJUSVRJT04gT0YiKTsKKworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtwYXJlbnRf aWRlbnRpdHl9RCIsCisJCQkJCQkJCSBlbGVtLT52YWx1ZS5vYmplY3QpOworCQl9CisKKwkJdGFi bGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBub2RlLT50YWJsZUVsdHMs IGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIHRydWUsIC8qIHR5cGVkIHRhYmxlICovCisJCQkJCQkJ CQkJICBmYWxzZSk7CS8qIG5vdCBjb21wb3NpdGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29u c3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxpZE9pZCk7CisKKwkJdG1wX29iaiA9 IG5ld19vYmp0cmVlKCIiKTsKKwkJaWYgKHRhYmxlZWx0cykKKwkJCWFwcGVuZF9hcnJheV9vYmpl Y3QodG1wX29iaiwgIigle2VsZW1lbnRzOiwgfXMpIiwgdGFibGVlbHRzKTsKKwkJZWxzZQorCQkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7dGFibGVfZWxlbWVudHN9cyIsIHRtcF9vYmopOworCX0KKwllbHNlCisJeworCQlMaXN0 CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgbm8gbmVlZCB0byBw cm9jZXNzIExJS0UgY2xhdXNlcyBzZXBhcmF0ZWx5OyB0aGV5IGhhdmUKKwkJICogYWxyZWFkeSBi ZWVuIHRyYW5zZm9ybWVkIGludG8gY29sdW1ucyBhbmQgY29uc3RyYWludHMuCisJCSAqLworCisJ CS8qCisJCSAqIFByb2Nlc3MgdGFibGUgZWxlbWVudHM6IGNvbHVtbiBkZWZpbml0aW9ucyBhbmQg Y29uc3RyYWludHMuICBPbmx5CisJCSAqIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgYXJlIG9idGFp bmVkIGZyb20gdGhlIHBhcnNlIG5vZGUgaXRzZWxmLiAgVG8KKwkJICogZ2V0IGNvbnN0cmFpbnRz IHdlIHJlbHkgb24gcGdfY29uc3RyYWludCwgYmVjYXVzZSB0aGUgcGFyc2Ugbm9kZQorCQkgKiBt aWdodCBiZSBtaXNzaW5nIHNvbWUgdGhpbmdzIHN1Y2ggYXMgdGhlIG5hbWUgb2YgdGhlIGNvbnN0 cmFpbnRzLgorCQkgKi8KKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0 aW9uLCBub2RlLT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIGZhbHNlLAkvKiBu b3QgdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsJLyogbm90IGNvbXBvc2l0ZSAq LworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJsZWVsdHMsIG9iamVjdElkLCBJ bnZhbGlkT2lkKTsKKworCQlpZiAodGFibGVlbHRzKQorCQkJYXBwZW5kX2FycmF5X29iamVjdChy ZXQsICIoJXt0YWJsZV9lbGVtZW50czosIH1zKSIsIHRhYmxlZWx0cyk7CisJCWVsc2UKKwkJCWFw cGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgIigpIik7CisKKwkJLyoKKwkJICogQWRkIGluaGVyaXRh bmNlIHNwZWNpZmljYXRpb24uICBXZSBjYW5ub3Qgc2ltcGx5IHNjYW4gdGhlIGxpc3Qgb2YKKwkJ ICogcGFyZW50cyBmcm9tIHRoZSBwYXJzZXIgbm9kZSwgYmVjYXVzZSB0aGF0IG1heSBsYWNrIHRo ZSBhY3R1YWwKKwkJICogcXVhbGlmaWVkIG5hbWVzIG9mIHRoZSBwYXJlbnQgcmVsYXRpb25zLiAg UmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisJCSAqIHJlLXJlc29sdmUgdGhlbSBmcm9tIHRoZSBpbmZv cm1hdGlvbiBpbiB0aGUgcGFyc2Ugbm9kZSwgaXQgc2VlbXMKKwkJICogbW9yZSBhY2N1cmF0ZSBh bmQgY29udmVuaWVudCB0byBncmFiIGl0IGZyb20gcGdfaW5oZXJpdHMuCisJCSAqLworCQl0bXBf b2JqID0gbmV3X29ianRyZWUoIklOSEVSSVRTIik7CisJCWlmIChub2RlLT5pbmhSZWxhdGlvbnMg IT0gTklMKQorCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiKCV7cGFyZW50czosIH1E KSIsIGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKSk7CisJCWVsc2UKKwkJeworCQkJYXBw ZW5kX251bGxfb2JqZWN0KHRtcF9vYmosICIoJXtwYXJlbnRzOiwgfUQpIik7CisJCQlhcHBlbmRf bm90X3ByZXNlbnQodG1wX29iaik7CisJCX0KKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAi JXtpbmhlcml0c31zIiwgdG1wX29iaik7CisJfQorCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJU QUJMRVNQQUNFIik7CisJaWYgKG5vZGUtPnRhYmxlc3BhY2VuYW1lKQorCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBfb2JqLCAiJXt0YWJsZXNwYWNlfUkiLCAidGFibGVzcGFjZSIsCisJCQkJCQkJ IG5vZGUtPnRhYmxlc3BhY2VuYW1lKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3Qo dG1wX29iaiwgIiV7dGFibGVzcGFjZX1JIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2Jq KTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXBf b2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle29uX2NvbW1pdH1zIiwKKwkJCQkJ CSBkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKG5vZGUtPm9uY29tbWl0KSk7CisKKwkvKiBGT1IgVkFM VUVTIGNsYXVzZSAqLworCWlmIChub2RlLT5wYXJ0Ym91bmQpCisJeworCQkvKgorCQkgKiBHZXQg cGdfY2xhc3MucmVscGFydGJvdW5kLiBXZSBjYW5ub3QgdXNlIHBhcnRib3VuZCBpbiB0aGUgcGFy c2V0cmVlCisJCSAqIGRpcmVjdGx5IGFzIGl0J3MgdGhlIG9yaWdpbmFsIHBhcnRib3VuZCBleHBy ZXNzaW9uIHdoaWNoIGhhdmVuJ3QKKwkJICogYmVlbiB0cmFuc2Zvcm1lZC4KKwkJICovCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7cGFydGl0aW9uX2JvdW5kfXMiLCAicGFydGl0aW9u X2JvdW5kIiwKKwkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChvYmplY3RJZCkpOwor CX0KKworCS8qIFBBUlRJVElPTiBCWSBjbGF1c2UgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUo IlBBUlRJVElPTiBCWSIpOworCWlmIChyZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJ TkRfUEFSVElUSU9ORURfVEFCTEUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIl e2RlZmluaXRpb259cyIsICJkZWZpbml0aW9uIiwKKwkJCQkJCQkgcGdfZ2V0X3BhcnRrZXlkZWZf c2ltcGxlKG9iamVjdElkKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcF9v YmosICIle2RlZmluaXRpb259cyIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJ fQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cGFydGl0aW9uX2J5fXMiLCB0bXBfb2Jq KTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiVVNJTkci KTsKKwlpZiAobm9kZS0+YWNjZXNzTWV0aG9kKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBf b2JqLCAiJXthY2Nlc3NfbWV0aG9kfUkiLCAiYWNjZXNzX21ldGhvZCIsCisJCQkJCQkJIG5vZGUt PmFjY2Vzc01ldGhvZCk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcF9vYmos ICIle2FjY2Vzc19tZXRob2R9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJ fQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7YWNjZXNzX21ldGhvZH1zIiwgdG1wX29i aik7CisKKwkvKiBXSVRIIGNsYXVzZSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiV0lUSCIp OworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJT2JqVHJlZSAgICAqdG1w X29iajI7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwor CQl0bXBfb2JqMiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iajIpKTsKKwl9CisKKwlpZiAobGlzdCkK KwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiKCV7d2l0aDosIH1zKSIsIGxpc3QpOwor CWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJYXBwZW5kX29iamVjdF9v YmplY3QocmV0LCAiJXt3aXRoX2NsYXVzZX1zIiwgdG1wX29iaik7CisKKwlyZWxhdGlvbl9jbG9z ZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisg KiBEZXBhcnNlIGEgQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCAoQ1JFQVRFIEZPUkVJR04gVEFCTEUp LgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0 ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNv bW1hbmQuCisgKgorICogQ1JFQVRFIEZPUkVJR04gVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtp ZGVudGl0eX1ECisgKiBbKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zCisgKiAg fCBQQVJUSVRJT04gT0YgJXtwYXJlbnRfaWRlbnRpdHl9RCAoJXt0eXBlZF90YWJsZV9lbGVtZW50 czosIH1zKSAle3BhcnRpdGlvbl9ib3VuZH1zXQorICogU0VSVkVSICV7c2VydmVyfUkgJXtnZW5l cmljX29wdGlvbnN9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZvcmVp Z25UYWJsZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRm9y ZWlnblRhYmxlU3RtdCAqc3RtdCA9IChDcmVhdGVGb3JlaWduVGFibGVTdG10ICopIHBhcnNldHJl ZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1No YXJlTG9jayk7CisJTGlzdAkgICAqZHBjb250ZXh0OworCU9ialRyZWUgICAgKmNyZWF0ZVN0bXQ7 CisJT2JqVHJlZSAgICAqdG1wb2JqOworCUxpc3QJICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCWNy ZWF0ZVN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIEZPUkVJR04gVEFCTEUiKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2lmX25vdF9leGlzdHN9cyIsICJpZl9ub3Rf ZXhpc3RzIiwKKwkJCQkJCSBzdG10LT5iYXNlLmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNU UyIgOiAiIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24t PnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShyZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2lkZW50 aXR5fUQiLCB0bXBvYmopOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxh dGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJCQlvYmplY3RJZCk7CisJaWYg KHN0bXQtPmJhc2UucGFydGJvdW5kKQorCXsKKwkJLyogUGFydGl0aW9uZWQgdGFibGUgKi8KKwkJ TGlzdAkgICAqcGFyZW50czsKKwkJT2JqRWxlbSAgICAqZWxlbTsKKworCQlwYXJlbnRzID0gZGVw YXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpOworCQllbGVtID0gKE9iakVsZW0gKikgbGluaXRp YWwocGFyZW50cyk7CisKKwkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHBhcmVudHMpID09IDEpOworCisJ CWFwcGVuZF9mb3JtYXRfc3RyaW5nKGNyZWF0ZVN0bXQsICJQQVJUSVRJT04gT0YiKTsKKworCQlh cHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtwYXJlbnRfaWRlbnRpdHl9RCIsCisJ CQkJCQkJCQkJIGVsZW0tPnZhbHVlLm9iamVjdCk7CisKKwkJdGFibGVlbHRzID0gZGVwYXJzZV9U YWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBzdG10LT5iYXNlLnRhYmxlRWx0cywgZHBjb250ZXh0LAor CQkJCQkJCQkJCSAgdHJ1ZSwgLyogdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsJ Lyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJs ZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgi Iik7CisJCWlmICh0YWJsZWVsdHMpCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigl e2VsZW1lbnRzOiwgfXMpIiwgdGFibGVlbHRzKTsKKwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVz ZW50KHRtcG9iaik7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7dHlw ZWRfdGFibGVfZWxlbWVudHN9cyIsIHRtcG9iaik7CisKKwkJLyoKKwkJICogQWRkIHRoZSBwYXJ0 aXRpb25fYm91bmRfc3BlYywgaS5lLiB0aGUgRk9SIFZBTFVFUyBjbGF1c2UuCisJCSAqIEdldCBw Z19jbGFzcy5yZWxwYXJ0Ym91bmQuIFdlIGNhbm5vdCB1c2UgcGFydGJvdW5kIGluIHRoZSBwYXJz ZXRyZWUKKwkJICogZGlyZWN0bHkgYXMgaXQncyB0aGUgb3JpZ2luYWwgcGFydGJvdW5kIGV4cHJl c3Npb24gd2hpY2ggaGF2ZW4ndAorCQkgKiBiZWVuIHRyYW5zZm9ybWVkLgorCQkgKi8KKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgIiV7cGFydGl0aW9uX2JvdW5kfXMiLCAicGFy dGl0aW9uX2JvdW5kIiwKKwkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChvYmplY3RJ ZCkpOworCisJCS8qIE5vIFBBUlRJVElPTiBCWSBjbGF1c2UgZm9yIENSRUFURSBGT1JFSUdOIFRB QkxFICovCisJfQorCWVsc2UKKwl7CisJCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50 cyhyZWxhdGlvbiwgc3RtdC0+YmFzZS50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkg IGZhbHNlLAkJLyogbm90IHR5cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7CS8qIG5v dCBjb21wb3NpdGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRz LCBvYmplY3RJZCwgSW52YWxpZE9pZCk7CisKKwkJaWYgKHRhYmxlZWx0cykKKwkJCWFwcGVuZF9h cnJheV9vYmplY3QoY3JlYXRlU3RtdCwgIigle3RhYmxlX2VsZW1lbnRzOiwgfXMpIiwgdGFibGVl bHRzKTsKKwkJZWxzZQorCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoY3JlYXRlU3RtdCwgIigpIik7 CisKKwkJLyoKKwkJKiBBZGQgaW5oZXJpdGFuY2Ugc3BlY2lmaWNhdGlvbi4gIFdlIGNhbm5vdCBz aW1wbHkgc2NhbiB0aGUgbGlzdCBvZgorCQkqIHBhcmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUs IGJlY2F1c2UgdGhhdCBtYXkgbGFjayB0aGUgYWN0dWFsCisJCSogcXVhbGlmaWVkIG5hbWVzIG9m IHRoZSBwYXJlbnQgcmVsYXRpb25zLiAgUmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisJCSogcmUtcmVz b2x2ZSB0aGVtIGZyb20gdGhlIGluZm9ybWF0aW9uIGluIHRoZSBwYXJzZSBub2RlLCBpdCBzZWVt cworCQkqIG1vcmUgYWNjdXJhdGUgYW5kIGNvbnZlbmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2lu aGVyaXRzLgorCQkqLworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiSU5IRVJJVFMiKTsKKwkJaWYg KHN0bXQtPmJhc2UuaW5oUmVsYXRpb25zICE9IE5JTCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3Qo dG1wb2JqLCAiKCV7cGFyZW50czosIH1EKSIsIGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElk KSk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIigle3BhcmVu dHM6LCB9RCkiKTsKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBvYmopOworCQl9CisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2luaGVyaXRzfXMiLCB0bXBvYmopOworCX0K KworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVN0bXQsICJTRVJWRVIgJXtzZXJ2ZXJ9SSIs ICJzZXJ2ZXIiLCBzdG10LT5zZXJ2ZXJuYW1lKTsKKworCS8qIGFkZCBhbiBPUFRJT05TIGNsYXVz ZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7Z2VuZXJp Y19vcHRpb25zfXMiLAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhzdG10LT5vcHRpb25zLCBO VUxMKSk7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CXJldHVybiBjcmVhdGVTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0bXQuCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdChPaWQgb2JqZWN0SWQsIE5v ZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBzZWNvbmRhcnlPYmopCit7CisJRGVmaW5lU3Rt dCAqZGVmaW5lID0gKERlZmluZVN0bXQgKikgcGFyc2V0cmVlOworCisJc3dpdGNoIChkZWZpbmUt PmtpbmQpCisJeworCQljYXNlIE9CSkVDVF9DT0xMQVRJT046CisJCQlyZXR1cm4gZGVwYXJzZV9E ZWZpbmVTdG10X0NvbGxhdGlvbihvYmplY3RJZCwgZGVmaW5lLCBzZWNvbmRhcnlPYmopOworCisJ CWNhc2UgT0JKRUNUX09QRVJBVE9SOgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9PcGVy YXRvcihvYmplY3RJZCwgZGVmaW5lKTsKKworCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046 CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKG9iamVjdElkLCBkZWZpbmUs IHNlY29uZGFyeU9iaik7CisKKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQkJcmV0dXJu IGRlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25hcnkob2JqZWN0SWQsIGRlZmluZSk7CisKKwkJ Y2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFy c2VyKG9iamVjdElkLCBkZWZpbmUpOworCisJCWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCQly ZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X1RTVGVtcGxhdGUob2JqZWN0SWQsIGRlZmluZSk7CisJ CQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5l U3RtdF9UeXBlKG9iamVjdElkLCBkZWZpbmUpOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9S LCAidW5zdXBwb3J0ZWQgb2JqZWN0IGtpbmQ6ICVkIiwgZGVmaW5lLT5raW5kKTsKKwl9CisKKwly ZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBEZWZpbmVTdG10IChDUkVBVEUgQ09M TEFUSU9OKQorICoKKyAqIEdpdmVuIGEgY29sbGF0aW9uIE9JRCwgcmV0dXJuIGFuIE9ialRyZWUg cmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBDUkVBVEUgQ09MTEFUSU9OICV7aWRlbnRpdHl9RCBGUk9NICV7ZnJvbV9pZGVudGl0eX1EICgl e2VsZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9D b2xsYXRpb24oT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUsCisJCQkJCQkJIE9iamVj dEFkZHJlc3MgZnJvbUNvbGxpZCkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJSGVhcFR1cGxlCWNv bFR1cDsKKwlGb3JtX3BnX2NvbGxhdGlvbiBjb2xGb3JtOworCURhdHVtCQlkYXR1bTsKKwlib29s CQlpc251bGw7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisKKwlj b2xUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJ ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjb2xUdXApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgY29sbGF0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOwor CWNvbEZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVChjb2xUdXApOworCisJcmV0 ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBDT0xMQVRJT04gJXtpZGVudGl0eX1EIiwgMSwKKwkJ CQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShjb2xGb3JtLT5jb2xsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKGNv bEZvcm0tPmNvbGxuYW1lKSkpOworCisJaWYgKE9pZElzVmFsaWQoZnJvbUNvbGxpZC5vYmplY3RJ ZCkpCisJeworCQlPaWQJCQljb2xsaWQgPSBmcm9tQ29sbGlkLm9iamVjdElkOworCQlIZWFwVHVw bGUJdHA7CisJCUZvcm1fcGdfY29sbGF0aW9uIGZyb21Db2xGb3JtOworCisJCS8qCisJCSAqIENS RUFURSBDT0xMQVRJT04gJXtpZGVudGl0eX1EIEZST00gZXhpc3RpbmdfY29sbGF0aW9uOworCQkg Ki8KKwkJdHAgPSBTZWFyY2hTeXNDYWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1bShjb2xs aWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBjb2xsYXRpb24gd2l0aCBPSUQgJXUiLCBjb2xsaWQpOworCisJ CWZyb21Db2xGb3JtID0gKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1QodHApOworCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIkZST00gJXtmcm9tX2lkZW50aXR5fUQiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZnJvbUNvbEZvcm0tPmNvbGxuYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkJICBOYW1lU3RyKGZyb21Db2xGb3JtLT5jb2xsbmFtZSkpKTsKKworCQlSZWxl YXNlU3lzQ2FjaGUodHApOworCQlSZWxlYXNlU3lzQ2FjaGUoY29sVHVwKTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwkvKiBMT0NBTEUgKi8KKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lE LCBjb2xUdXAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGxpY3Vsb2NhbGUsICZpc251bGwpOworCWlm ICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkxPQ0FMRT0le2xvY2FsZX1M IiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJsb2NhbGUiLAorCQkJCQkJ CSAibG9jYWxlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgVGV4dERh dHVtR2V0Q1N0cmluZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisJfQorCisJLyogTENfQ09MTEFURSAqLworCWRhdHVtID0gU3lzQ2Fj aGVHZXRBdHRyKENPTExPSUQsIGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGNvbGxhdGUs ICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkxD X0NPTExBVEU9JXtjb2xsYXRlfUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgImNvbGxhdGUiLAorCQkJCQkJCSAiY29sbGF0ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ IHBzcHJpbnRmKCIlcyIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIExDX0NUWVBF ICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgY29sVHVwLCBBbnVtX3BnX2Nv bGxhdGlvbl9jb2xsY3R5cGUsICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJdG1wID0g bmV3X29ianRyZWVfVkEoIkxDX0NUWVBFPSV7Y3R5cGV9TCIsIDIsCisJCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiY3R5cGUiLAorCQkJCQkJCSAiY3R5cGUiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKSkpOwor CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkv KiBQUk9WSURFUiAqLworCWlmIChjb2xGb3JtLT5jb2xscHJvdmlkZXIgPT0gQ09MTFBST1ZJREVS X0lDVSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQUk9WSURFUj0le3Byb3ZpZGVyfUwi LCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInByb3ZpZGVyIiwKKwkJCQkJ CQkgInByb3ZpZGVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgImlj dSIpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJ fQorCWVsc2UgaWYgKGNvbEZvcm0tPmNvbGxwcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQykK Kwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQUk9WSURFUj0le3Byb3ZpZGVyfUwiLCAyLAor CQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInByb3ZpZGVyIiwKKwkJCQkJCQkgInBy b3ZpZGVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgImxpYmMiKSk7 CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKwor CS8qIERFVEVSTUlOSVNUSUMgKi8KKwlpZiAoY29sRm9ybS0+Y29sbGlzZGV0ZXJtaW5pc3RpYykK Kwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERVRFUk1JTklTVElDPSV7ZGV0ZXJtaW5pc3Rp Y31MIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJkZXRlcm1pbmlzdGlj IiwKKwkJCQkJCQkgImRldGVybWluaXN0aWMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3By aW50ZigiJXMiLCAidHJ1ZSIpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisJfQorCisJLyogVkVSU0lPTiAqLworCWRhdHVtID0gU3lzQ2FjaGVHZXRB dHRyKENPTExPSUQsIGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbHZlcnNpb24sICZpc251 bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlZFUlNJT049 JXt2ZXJzaW9ufUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInZlcnNp b24iLAorCQkJCQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIHBzcHJpbnRm KCIlcyIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3Qo cmV0LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKwlSZWxlYXNlU3lzQ2FjaGUoY29sVHVwKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRF IE9QRVJBVE9SKQorICoKKyAqIEdpdmVuIGEgb3BlcmF0b3IgT0lEIGFuZCB0aGUgcGFyc2UgdHJl ZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhl IGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBPUEVS QVRPUiAle2lkZW50aXR5fU8gKCV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVm aW5lKQoreworCUhlYXBUdXBsZQlvcHJUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUg ICAgKnRtcF9vYmo7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlGb3JtX3BnX29wZXJhdG9yIG9w ckZvcm07CisKKwlvcHJUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BFUk9JRCwgT2JqZWN0SWRHZXRE YXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcHJUdXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3Igd2l0aCBPSUQgJXUiLCBv YmplY3RJZCk7CisJb3ByRm9ybSA9IChGb3JtX3BnX29wZXJhdG9yKSBHRVRTVFJVQ1Qob3ByVHVw KTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgJXtpZGVudGl0eX1P IiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShvcHJGb3JtLT5vcHJuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5h bWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIFBST0NFRFVSRSAqLworCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9WQSgiUFJPQ0VEVVJFPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJCSJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvY2VkdXJlIiwKKwkJCQkJCQkicHJvY2VkdXJlIiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJb3ByRm9ybS0+b3ByY29kZSkpOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIExFRlRB UkcgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkxFRlRBUkc9IiwgMSwKKwkJCQkJCQki Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxlZnRhcmciKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJG b3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7dHlwZX1U IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsK KwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBSSUdIVEFSRyAqLworCXRt cF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiUklHSFRBUkc9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgInJpZ2h0YXJnIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3By cmlnaHQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXt0eXBlfVQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsKKwllbHNl CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBDT01NVVRBVE9SICovCisJdG1wX29i aiA9IG5ld19vYmp0cmVlX1ZBKCJDT01NVVRBVE9SPSIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJjb21tdXRhdG9yIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3By Y29tKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7b3Blcn1EIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJIG9wckZvcm0tPm9wcmNvbSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50 KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9v YmopKTsKKworCS8qIE5FR0FUT1IgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk5FR0FU T1I9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm5lZ2F0b3IiKTsKKwlp ZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJuZWdhdGUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBfb2JqLCAiJXtvcGVyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3BybmVnYXRl KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJLyogUkVTVFJJQ1QgKi8K Kwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlJFU1RSSUNUPSIsIDEsCisJCQkJCQkJImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0cmljdCIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0t Pm9wcnJlc3QpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtwcm9jZWR1cmV9 RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3BycmVzdCkpOworCWVsc2UKKwkJYXBwZW5k X25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKworCS8qIEpPSU4gKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVf VkEoIkpPSU49IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImpvaW4iKTsK KwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9w cmpvaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBIQVNIRVMg Ki8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkhBU0hFUyIsIDEsCisJCQkJCQkJImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJoYXNoZXMiKTsKKwlpZiAoIW9wckZvcm0tPm9wcmNhbmhhc2gp CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBNRVJHRVMgKi8KKwl0bXBfb2JqID0g bmV3X29ianRyZWVfVkEoIk1FUkdFUyIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJtZXJnZXMiKTsKKwlpZiAoIW9wckZvcm0tPm9wcmNhbm1lcmdlKQorCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wX29iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIoJXtlbGVtczosIH1z KSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gcmV0Owor fQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBUWVBFIHN0YXRlbWVudC4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EICV7ZWxlbXM6LCB9cykKKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUoT2lkIG9iamVjdElk LCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlCXR5cFR1cDsKKwlPYmpUcmVlICAg ICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJY2hhcgkg ICAqc3RyOworCURhdHVtCQlkZmx0OworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3BnX3R5cGUgdHlw Rm9ybTsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERh dHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0 SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJ ICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0eXBGb3Jt LT50eXBuYW1lKSkpOworCisJLyogU2hlbGwgdHlwZXMuICovCisJaWYgKCF0eXBGb3JtLT50eXBp c2RlZmluZWQpCisJeworCQlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJLyogSU5QVVQgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiKElOUFVUPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaW5wdXQiLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVS ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBpbnB1dCkpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogT1VUUFVUICovCisJ dG1wID0gbmV3X29ianRyZWVfVkEoIk9VVFBVVD0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm91dHB1dCIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG91dHB1dCkpOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogUkVDRUlWRSAq LworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJSRUNFSVZFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJyZWNlaXZlIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlw cmVjZWl2ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHJlY2VpdmUpKTsKKwllbHNlCisJCWFwcGVuZF9u b3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJLyogU0VORCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTRU5EPSIsIDEs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzZW5kIik7CisJaWYgKE9pZElzVmFs aWQodHlwRm9ybS0+dHlwc2VuZCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJv Y2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHNlbmQpKTsKKwllbHNlCisJ CWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCisJLyogVFlQTU9EX0lOICovCisJdG1wID0gbmV3X29ianRyZWVf VkEoIlRZUE1PRF9JTj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlw bW9kX2luIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kaW4pKQorCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBG b3JtLT50eXBtb2RpbikpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBUWVBNT0Rf T1VUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9PVVQ9IiwgMSwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9vdXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0 eXBGb3JtLT50eXBtb2RvdXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2Nl ZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RvdXQpKTsKKwllbHNlCisJ CWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCisJLyogQU5BTFlaRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJBTkFMWVpFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbmFseXpl Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwYW5hbHl6ZSkpCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0t PnR5cGFuYWx5emUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogSU5URVJOQUxM RU5HVEggKi8KKwlpZiAodHlwRm9ybS0+dHlwbGVuID09IC0xKQorCQl0bXAgPSBuZXdfb2JqdHJl ZSgiSU5URVJOQUxMRU5HVEg9VkFSSUFCTEUiKTsKKwllbHNlCisJCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJJTlRFUk5BTExFTkdUSD0le3R5cGxlbn1uIiwgMSwKKwkJCQkJCQkgInR5cGxlbiIsIE9i alR5cGVJbnRlZ2VyLCB0eXBGb3JtLT50eXBsZW4pOworCisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBQQVNTRURCWVZBTFVFICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIlBBU1NFREJZVkFMVUUiLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAicGFzc2VkYnl2YWx1ZSIpOworCWlmICghdHlwRm9ybS0+dHlwYnl2YWwpCisJ CWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCisJLyogWFhYIGl0J3Mgb2RkIHRvIHJlcHJlc2VudCBhbGlnbm1l bnQgd2l0aCBzY2hlbWEtcXVhbGlmaWVkIHR5cGUgbmFtZXMgKi8KKwlzd2l0Y2ggKHR5cEZvcm0t PnR5cGFsaWduKQorCXsKKwkJY2FzZSAnZCc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5mbG9hdDgi OworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJc3RyID0gInBnX2NhdGFsb2cuaW50NCI7CisJ CQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5pbnQyIjsKKwkJCWJy ZWFrOworCQljYXNlICdjJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmJwY2hhciI7CisJCQlicmVh azsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIGFsaWdubWVudCAlYyIsIHR5 cEZvcm0tPnR5cGFsaWduKTsKKwl9CisKKwkvKiBBTElHTk1FTlQgKi8KKwl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiQUxJR05NRU5UPSV7YWxpZ259cyIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJhbGlnbm1lbnQiLAorCQkJCQkJICJhbGlnbiIsIE9ialR5cGVTdHJpbmcsIHN0 cik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkv KiBTVE9SQUdFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNUT1JBR0U9JXtzdG9yYWdlfXMi LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RvcmFnZSIsCisJCQkJCQkg InN0b3JhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF90eXBlX3N0b3JhZ2UodHlwRm9y bS0+dHlwc3RvcmFnZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJLyogQ0FURUdPUlkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FURUdP Ulk9JXtjYXRlZ29yeX1zIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNh dGVnb3J5IiwKKwkJCQkJCSAiY2F0ZWdvcnkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIHBzcHJp bnRmKCIlYyIsIHR5cEZvcm0tPnR5cGNhdGVnb3J5KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBQUkVGRVJSRUQgKi8KKwl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiUFJFRkVSUkVEPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJwcmVmZXJyZWQiKTsKKwlpZiAoIXR5cEZvcm0tPnR5cGlzcHJlZmVycmVkKQorCQlhcHBl bmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIERFRkFVTFQgKi8KKwlkZmx0ID0gU3lzQ2FjaGVHZXRBdHRyKFRZ UEVPSUQsIHR5cFR1cCwKKwkJCQkJCSAgIEFudW1fcGdfdHlwZV90eXBkZWZhdWx0LAorCQkJCQkJ ICAgJmlzbnVsbCk7CisJdG1wID0gbmV3X29ianRyZWVfVkEoIkRFRkFVTFQ9IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImRlZmF1bHQiKTsKKwlpZiAoIWlzbnVsbCkKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtkZWZhdWx0fXMiLCAiZGVmYXVsdCIsCisJCQkJ CQkJIFRleHREYXR1bUdldENTdHJpbmcoZGZsdCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVz ZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwkvKiBFTEVNRU5UICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkVMRU1FTlQ9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImVsZW1lbnQiKTsKKwlpZiAoT2lkSXNW YWxpZCh0eXBGb3JtLT50eXBlbGVtKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiZWxl bSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cEZvcm0tPnR5cGVsZW0sIC0xKSk7 CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIERFTElNSVRFUiAqLworCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJERUxJTUlURVI9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgImRlbGltaXRlciIpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVsaW19 TCIsICJkZWxpbSIsCisJCQkJCQkgcHNwcmludGYoIiVjIiwgdHlwRm9ybS0+dHlwZGVsaW0pKTsK KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIENP TExBVEFCTEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ09MTEFUQUJMRT0iLCAxLAorCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29sbGF0YWJsZSIpOworCWlmICghT2lkSXNW YWxpZCh0eXBGb3JtLT50eXBjb2xsYXRpb24pKQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsK KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVu ZF9hcnJheV9vYmplY3QocmV0LCAiJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5 c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENS RUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1E ICgle2VsZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3Rt dF9UU0NvbmZpZyhPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJCQlPYmpl Y3RBZGRyZXNzIGNvcGllZCkKK3sKKwlIZWFwVHVwbGUJdHNjVHVwOworCUhlYXBUdXBsZQl0c3BU dXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlGb3JtX3BnX3RzX2Nv bmZpZyB0c2NGb3JtOworCUZvcm1fcGdfdHNfcGFyc2VyIHRzcEZvcm07CisJTGlzdAkgICAqbGlz dCA9IE5JTDsKKworCXRzY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShUU0NPTkZJR09JRCwgT2JqZWN0 SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c2NUdXApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggY29uZmln dXJhdGlvbiB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzY0Zvcm0gPSAoRm9ybV9w Z190c19jb25maWcpIEdFVFNUUlVDVCh0c2NUdXApOworCisJdHNwVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKFRTUEFSU0VST0lELCBPYmplY3RJZEdldERhdHVtKHRzY0Zvcm0tPmNmZ3BhcnNlcikpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c3BUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggcGFyc2VyICV1IiwKKwkJCSB0c2NGb3JtLT5jZmdw YXJzZXIpOworCXRzcEZvcm0gPSAoRm9ybV9wZ190c19wYXJzZXIpIEdFVFNUUlVDVCh0c3BUdXAp OworCisJLyoKKwkgKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlLiAgSWYgd2UgaGF2ZSBDT1BZ J2VkIGFuIGV4aXN0aW5nIGNvbmZpZywgYWRkCisJICogYSBDT1BZIGNsYXVzZTsgb3RoZXJ3aXNl IGFkZCBhIFBBUlNFUiBjbGF1c2UuCisJICovCisJLyogQ09QWSAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJDT1BZPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb3B5 Iik7CisJaWYgKE9pZElzVmFsaWQoY29waWVkLm9iamVjdElkKSkKKwkJYXBwZW5kX29iamVjdF9v YmplY3QodG1wLCAiJXt0c2NvbmZpZ31EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFRTQ29uZmlnUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNvcGllZC5vYmplY3RJ ZCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBQQVJTRVIgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiUEFSU0VSPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJwYXJzZXIiKTsKKwlpZiAoY29waWVkLm9iamVjdElkID09IEludmFsaWRPaWQpCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cGFyc2VyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWUodHNwRm9ybS0+cHJzbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFt ZVN0cih0c3BGb3JtLT5wcnNuYW1lKSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRt cCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwly ZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtp ZGVudGl0eX1EICgle2VsZW1zOiwgfXMpIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2NGb3JtLT5jZmduYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNjRm9ybS0+Y2ZnbmFtZSkpLAorCQkJCQkJ ICJlbGVtcyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNwVHVw KTsKKwlSZWxlYXNlU3lzQ2FjaGUodHNjVHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog RGVwYXJzZSBhIENSRUFURSBURVhUIFNFQVJDSCBQQVJTRVIgc3RhdGVtZW50LgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSICV7aWRlbnRpdHl9RCAo JXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRf VFNQYXJzZXIoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxl CXRzcFR1cDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAg Kmxpc3QgPSBOSUw7CisJRm9ybV9wZ190c19wYXJzZXIgdHNwRm9ybTsKKworCXRzcFR1cCA9IFNl YXJjaFN5c0NhY2hlMShUU1BBUlNFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c3BUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggcGFyc2VyIHdpdGggT0lEICV1IiwKKwkJCSBvYmpl Y3RJZCk7CisJdHNwRm9ybSA9IChGb3JtX3BnX3RzX3BhcnNlcikgR0VUU1RSVUNUKHRzcFR1cCk7 CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJLyogU1RBUlQgKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiU1RBUlQ9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJzdGFydCIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc3N0YXJ0KSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBHRVRUT0tFTiAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJHRVRUT0tFTj0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImdldHRva2VuIiwKKwkJCQkJCSAicHJvY2VkdXJlIiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzdG9rZW4pKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEVORCAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTkQ9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJlbmQiLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNlbmQpKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIExFWFRZUEVTICovCisJdG1w ID0gbmV3X29ianRyZWVfVkEoIkxFWFRZUEVTPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibGV4dHlwZXMiLAorCQkJCQkJICJwcm9jZWR1cmUiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1 cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNsZXh0eXBlKSk7CisJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBIRUFETElO RSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIRUFETElORT0iLCAxLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAiaGVhZGxpbmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0c3BGb3Jt LT5wcnNoZWFkbGluZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJl fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2hlYWRsaW5lKSk7CisJZWxzZQorCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0 X29iamVjdCh0bXApKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVEVYVCBTRUFS Q0ggUEFSU0VSICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKSIsIDIsCisJCQkJCQkgImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNw Rm9ybS0+cHJzbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzcEZvcm0tPnByc25h bWUpKSwKKwkJCQkJCSAiZWxlbXMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCisJUmVsZWFzZVN5 c0NhY2hlKHRzcFR1cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVB VEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIENSRUFURSBURVhUIFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRpdHl9RCAoJXtlbGVt czosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNEaWN0 aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZQl0 c2RUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICps aXN0ID0gTklMOworCURhdHVtCQlvcHRpb25zOworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3BnX3Rz X2RpY3QgdHNkRm9ybTsKKworCXRzZFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU0RJQ1RPSUQsIE9i amVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNkVHVw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIGRp Y3Rpb25hcnkgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0c2RGb3JtID0gKEZvcm1f cGdfdHNfZGljdCkgR0VUU1RSVUNUKHRzZFR1cCk7CisKKworCisJLyogQWRkIHRoZSBkZWZpbml0 aW9uIGNsYXVzZSAqLworCS8qIFRFTVBMQVRFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRF TVBMQVRFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0ZW1wbGF0ZSIp OworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7dGVtcGxhdGV9RCIsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFRTVGVtcGxhdGVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCSB0c2RGb3JtLT5kaWN0dGVtcGxhdGUpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qCisJICogb3B0aW9ucy4gIFhYWCB0aGlzIGlzIGEg cHJldHR5IHVzZWxlc3MgcmVwcmVzZW50YXRpb24sIGJ1dCB3ZSBjYW4ndCBkbworCSAqIGJldHRl ciB3aXRob3V0IG1vcmUgdHNfY2FjaGUuYyBjb29wZXJhdGlvbiAuLi4KKwkgKi8KKwlvcHRpb25z ID0gU3lzQ2FjaGVHZXRBdHRyKFRTRElDVE9JRCwgdHNkVHVwLAorCQkJCQkJCSAgQW51bV9wZ190 c19kaWN0X2RpY3Rpbml0b3B0aW9uLAorCQkJCQkJCSAgJmlzbnVsbCk7CisJdG1wID0gbmV3X29i anRyZWUoIiIpOworCWlmICghaXNudWxsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIl e29wdGlvbnN9cyIsICJvcHRpb25zIiwKKwkJCQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhvcHRp b25zKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJDUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9 cykiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKHRzZEZvcm0tPmRpY3RuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkg IE5hbWVTdHIodHNkRm9ybS0+ZGljdG5hbWUpKSwKKwkJCQkJCSAiZWxlbXMiLCBPYmpUeXBlQXJy YXksIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzZFR1cCk7CisJcmV0dXJuIHJldDsKK30K KworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVEVYVCBTRUFSQ0ggVEVNUExBVEUgc3RhdGVtZW50 LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggVEVNUExBVEUg JXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfRGVmaW5lU3RtdF9UU1RlbXBsYXRlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5l KQoreworCUhlYXBUdXBsZQl0c3RUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAg KnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUZvcm1fcGdfdHNfdGVtcGxhdGUgdHN0Rm9y bTsKKworCXRzdFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU1RFTVBMQVRFT0lELCBPYmplY3RJZEdl dERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzdFR1cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCB0ZW1wbGF0ZSB3 aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzdEZvcm0gPSAoRm9ybV9wZ190c190ZW1w bGF0ZSkgR0VUU1RSVUNUKHRzdFR1cCk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNl ICovCisJLyogSU5JVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTklUPSIsIDEsCisJCQkJ CQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJpbml0Iik7CisJaWYgKE9pZElzVmFsaWQodHN0 Rm9ybS0+dG1wbGluaXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVy ZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0c3RGb3JtLT50bXBsaW5pdCkpOworCWVsc2UKKwkJYXBw ZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwkvKiBMRVhJWkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTEVY SVpFPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi bGV4aXplIiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkgdHN0Rm9ybS0+dG1wbGxleGl6ZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBURVhUIFNF QVJDSCBURU1QTEFURSAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykiLCAyLAorCQkJCQkJICJp ZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KHRzdEZvcm0tPnRtcGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHN0Rm9ybS0+ dG1wbG5hbWUpKSwKKwkJCQkJCSAiZWxlbXMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCisJUmVs ZWFzZVN5c0NhY2hlKHRzdFR1cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2Ug YW4gQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiBzdGF0ZW1lbnQuCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0 eX1EIEFERCBNQVBQSU5HCisgKiBGT1IgJXt0b2tlbnR5cGU6LCB9SSBXSVRIICV7ZGljdGlvbmFy aWVzOiwgfUQKKyAqCU9SCisgKiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRl bnRpdHl9RCBEUk9QIE1BUFBJTkcgJXtpZl9leGlzdHN9cworICogRk9SICV7dG9rZW50eXBlfUkK KyAqCU9SCisgKiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBB TFRFUiBNQVBQSU5HCisgKiBGT1IgJXt0b2tlbnR5cGU6LCB9SSBXSVRIICV7ZGljdGlvbmFyaWVz OiwgfUQKKyAqCU9SCisgKiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRp dHl9RCBBTFRFUiBNQVBQSU5HCisgKiBSRVBMQUNFICV7b2xkX2RpY3Rpb25hcnl9RCBXSVRIICV7 bmV3X2RpY3Rpb25hcnl9RAorICoJT1IKKyAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJ T04gJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkcKKyAqIEZPUiAle3Rva2VudHlwZTosIH1JIFJF UExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIFdJVEggJXtuZXdfZGljdGlvbmFyeX1ECisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10KENvbGxlY3Rl ZENvbW1hbmQgKmNtZCkKK3sKKwlBbHRlclRTQ29uZmlndXJhdGlvblN0bXQgKm5vZGUgPSAoQWx0 ZXJUU0NvbmZpZ3VyYXRpb25TdG10ICopIGNtZC0+cGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJl dDsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAg ICpjZWxsOworCWludAkJCWk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgVEVYVCBTRUFS Q0ggQ09ORklHVVJBVElPTiIpOworCisJLyogRGV0ZXJtaW5lIHRoZSBmb3JtYXQgc3RyaW5nIGFw cHJvcHJpYXRlIHRvIGVhY2ggc3ViY29tbWFuZCAqLworCXN3aXRjaCAobm9kZS0+a2luZCkKKwl7 CisJCWNhc2UgQUxURVJfVFNDT05GSUdfQUREX01BUFBJTkc6CisJCQlhcHBlbmRfb2JqZWN0X29i amVjdChyZXQsICIle2lkZW50aXR5fUQgQUREIE1BUFBJTkciLAorCQkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJCQkJ CQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJYnJlYWs7CisK KwkJY2FzZSBBTFRFUl9UU0NPTkZJR19EUk9QX01BUFBJTkc6CisJCQlhcHBlbmRfb2JqZWN0X29i amVjdChyZXQsICIle2lkZW50aXR5fUQgRFJPUCBNQVBQSU5HIiwKKwkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJ CQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCXRtcCA9IG5l d19vYmp0cmVlKCJJRiBFWElTVFMiKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVz ZW50Iiwgbm9kZS0+bWlzc2luZ19vayk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIl e2lmX2V4aXN0c31zIiwgdG1wKTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUxURVJfVFNDT05GSUdf QUxURVJfTUFQUElOR19GT1JfVE9LRU46CisJCWNhc2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9E SUNUOgorCQljYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU46CisJCQlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lkZW50aXR5fUQgQUxURVIgTUFQUElORyIsCisJ CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNz LmNsYXNzSWQsCisJCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElk KSk7CisJCQlicmVhazsKKwl9CisKKwkvKiBBZGQgdGhlIGFmZmVjdGVkIHRva2VuIGxpc3QsIGZv ciBzdWJjb21tYW5kcyB0aGF0IGhhdmUgb25lICovCisJaWYgKG5vZGUtPmtpbmQgPT0gQUxURVJf VFNDT05GSUdfQUREX01BUFBJTkcgfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19B TFRFUl9NQVBQSU5HX0ZPUl9UT0tFTiB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklH X1JFUExBQ0VfRElDVF9GT1JfVE9LRU4gfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJ R19EUk9QX01BUFBJTkcpCisJeworCQlmb3JlYWNoKGNlbGwsIG5vZGUtPnRva2VudHlwZSkKKwkJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbChsZmlyc3QoY2Vs bCkpKSk7CisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiRk9SICV7dG9rZW50eXBlOiwgfUki LCBsaXN0KTsKKwl9CisKKwkvKiBBZGQgZnVydGhlciBzdWJjb21tYW5kLXNwZWNpZmljIGVsZW1l bnRzICovCisJaWYgKG5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfQUREX01BUFBJTkcgfHwK KwkJbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19BTFRFUl9NQVBQSU5HX0ZPUl9UT0tFTikK Kwl7CisJCS8qIEFERCBNQVBQSU5HIGFuZCBBTFRFUiBNQVBQSU5HIEZPUiBuZWVkIGEgbGlzdCBv ZiBkaWN0aW9uYXJpZXMgKi8KKwkJbGlzdCA9IE5JTDsKKwkJZm9yIChpID0gMDsgaSA8IGNtZC0+ ZC5hdHNjZmcubmRpY3RzOyBpKyspCisJCXsKKwkJCU9ialRyZWUgICAgKmRpY3Rfb2JqOworCisJ CQlkaWN0X29iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUU0RpY3Rpb25hcnlSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJICBjbWQtPmQuYXRzY2ZnLmRpY3RJZHNbaV0pOworCQkJbGlz dCA9IGxhcHBlbmQobGlzdCwKKwkJCQkJCSAgIG5ld19vYmplY3Rfb2JqZWN0KGRpY3Rfb2JqKSk7 CisJCX0KKwkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICJXSVRIICV7ZGljdGlvbmFyaWVzOiwg fUQiLCBsaXN0KTsKKwl9CisJZWxzZSBpZiAobm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19S RVBMQUNFX0RJQ1QgfHwKKwkJCSBub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX1JFUExBQ0Vf RElDVF9GT1JfVE9LRU4pCisJeworCQkvKiBUaGUgUkVQTEFDRSBmb3JtcyB3YW50IG9sZCBhbmQg bmV3IGRpY3Rpb25hcmllcyAqLworCQlBc3NlcnQoY21kLT5kLmF0c2NmZy5uZGljdHMgPT0gMik7 CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIlJFUExBQ0UgJXtvbGRfZGljdGlvbmFyeX1E IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFRTRGljdGlvbmFyeVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmRpY3RJZHNbMF0pKTsKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiV0lUSCAle25ld19kaWN0aW9uYXJ5fUQiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuZGljdElkc1sxXSkpOworCX0KKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkg c3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBURVhUIFNFQVJDSCBE SUNUSU9OQVJZICV7aWRlbnRpdHl9RCAoJXtkZWZpbml0aW9uOiwgfXMpCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJUU0RpY3Rpb25hcnlTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJ RGF0dW0JCW9wdGlvbnM7CisJTGlzdAkgICAqZGVmaW5pdGlvbiA9IE5JTDsKKwlib29sCQlpc251 bGw7CisJSGVhcFR1cGxlCXRzZFR1cDsKKwlGb3JtX3BnX3RzX2RpY3QgdHNkRm9ybTsKKworCXRz ZFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU0RJQ1RPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0 SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNkVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIGRpY3Rpb25hcnkgd2l0aCBPSUQgJXUi LAorCQkJIG9iamVjdElkKTsKKwl0c2RGb3JtID0gKEZvcm1fcGdfdHNfZGljdCkgR0VUU1RSVUNU KHRzZFR1cCk7CisKKwkvKgorCSAqIEFkZCB0aGUgZGVmaW5pdGlvbiBsaXN0IGFjY29yZGluZyB0 byB0aGUgcGdfdHNfZGljdCBkaWN0aW5pdG9wdGlvbgorCSAqIGNvbHVtbgorCSAqLworCW9wdGlv bnMgPSBTeXNDYWNoZUdldEF0dHIoVFNESUNUT0lELCB0c2RUdXAsCisJCQkJCQkJICBBbnVtX3Bn X3RzX2RpY3RfZGljdGluaXRvcHRpb24sCisJCQkJCQkJICAmaXNudWxsKTsKKwl0bXAgPSBuZXdf b2JqdHJlZSgiIik7CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwg IiV7b3B0aW9uc31zIiwgIm9wdGlvbnMiLAorCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKG9w dGlvbnMpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCisJZGVmaW5pdGlv biA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lkZW50aXR5 fUQgKCV7ZGVmaW5pdGlvbjosIH1zKSIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNkRm9ybS0+ZGljdG5hbWVz cGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c2RGb3JtLT5kaWN0bmFtZSkpLAorCQkJCQkJ ICJkZWZpbml0aW9uIiwgT2JqVHlwZUFycmF5LCBkZWZpbml0aW9uKTsKKworCVJlbGVhc2VTeXND YWNoZSh0c2RUdXApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1O IC4uLiBTRVQvUkVTRVQgKC4uLikKKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogUkVTRVR8U0VU ICgle29wdGlvbnM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZWxTZXRP cHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0CSAgICpzZXRzID0gTklMOwor CUxpc3RDZWxsICAgKmNlbGw7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5cGUgPT0g QVRfUmVzZXRSZWxPcHRpb25zOworCisJZm9yZWFjaChjZWxsLCAoTGlzdCAqKSBzdWJjbWQtPmRl ZikKKwl7CisJCURlZkVsZW0gICAgKmVsZW07CisJCU9ialRyZWUgICAgKnNldDsKKworCQllbGVt ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlzZXQgPSBkZXBhcnNlX0RlZkVsZW0oZWxl bSwgaXNfcmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdChz ZXQpKTsKKwl9CisKKwlBc3NlcnQoc2V0cyk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIiV7 c2V0X3Jlc2V0fXMgKCV7b3B0aW9uczosIH1zKSIsIDIsCisJCQkJCQkgICJzZXRfcmVzZXQiLCBP YmpUeXBlU3RyaW5nLCBpc19yZXNldCA/ICJSRVNFVCIgOiAiU0VUIiwKKwkJCQkJCSAgIm9wdGlv bnMiLCBPYmpUeXBlQXJyYXksIHNldHMpOworfQorCisvKgorICogZGVwYXJzZV9WaWV3U3RtdAor ICoJCWRlcGFyc2UgYSBWaWV3U3RtdAorICoKKyAqIEdpdmVuIGEgdmlldyBPSUQgYW5kIHRoZSBw YXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2Vu dGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JF QVRFICV7b3JfcmVwbGFjZX1zICV7cGVyc2lzdGVuY2V9cyBWSUVXICV7aWRlbnRpdHl9RCBBUyAl e3F1ZXJ5fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9WaWV3U3RtdChPaWQgb2Jq ZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlWaWV3U3RtdCAgICpub2RlID0gKFZpZXdTdG10 ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJUmVsYXRpb24JcmVsYXRpb247CisK KwlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7b3JfcmVwbGFjZX1zICV7cGVyc2lzdGVu Y2V9cyBWSUVXICV7aWRlbnRpdHl9RCBBUyAle3F1ZXJ5fXMiLCA0LAorCQkJCQkJICJvcl9yZXBs YWNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0Ui IDogIiIsCisJCQkJCQkgInBlcnNpc3RlbmNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRf cGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJCQkJ CSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIFJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSksCisJCQkJCQkgInF1ZXJ5IiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCSBwZ19nZXRfdmlld2RlZl9pbnRlcm5hbChvYmplY3RJZCkpOworCisJcmVs YXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisJcmV0dXJuIHJldDsKK30K KworLyoKKyAqIERlcGFyc2UgQ1JFQVRFIE1hdGVyaWFsaXplZCBWaWV3IHN0YXRlbWVudCwgaXQg aXMgYSB2YXJpYW50IG9mCisgKiBDcmVhdGVUYWJsZUFzU3RtdAorICoKKyAqIE5vdGUgdGhhdCBD UkVBVEUgVEFCTEUgQVMgU0VMRUNUIElOVE8gY2FuIGFsc28gYmUgZGVwYXJzZWQgYnkKKyAqIGRl cGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQgdG8gcmVtb3ZlIHRoZSBTRUxFQ1QgSU5UTyBjbGF1c2Uu CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMgW01BVEVS SUFMSVpFRCBWSUVXIHwgVEFCTEVdICV7aWZfbm90X2V4aXN0c31zCisgKiAJCSV7aWRlbnRpdHl9 RCAle2NvbHVtbnN9cyBbJXtvbl9jb21taXR9c10gJXt0YWJsZXNwYWNlfXMKKyAqICAJCUFTICV7 cXVlcnl9cyAle3dpdGhfbm9fZGF0YX1zIgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0NyZWF0ZVRhYmxlQXNTdG10X3ZhbmlsbGEoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJQ3JlYXRlVGFibGVBc1N0bXQgKm5vZGUgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKikgcGFy c2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCU9i alRyZWUgICAgKnRtcDI7CisJY2hhcgkgICAqZm10OworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJ TGlzdENlbGwgICAqY2VsbDsKKworCS8qIFJlamVjdCB1bnN1cHBvcnRlZCBjYXNlIHJpZ2h0IGF3 YXkuICovCisJaWYgKCgoUXVlcnkgKikgKG5vZGUtPnF1ZXJ5KSktPmNvbW1hbmRUeXBlID09IENN RF9VVElMSVRZKQorCQllbG9nKEVSUk9SLCAidW5pbXBsZW1lbnRlZCBkZXBhcnNlIG9mIENSRUFU RSBUQUJMRSBBUyBFWEVDVVRFIik7CisKKwkvKgorCSAqIE5vdGUgdGhhdCBJTlNFUlQgSU5UTyBp cyBkZXBhcnNlZCBhcyBDUkVBVEUgVEFCTEUgQVMuICBUaGV5IGFyZQorCSAqIGZ1bmN0aW9uYWxs eSBlcXVpdmFsZW50IHN5bm9ueW1zIHNvIHRoZXJlIGlzIG5vIGhhcm0gZnJvbSB0aGlzLgorCSAq LworCWlmIChub2RlLT5vYmp0eXBlID09IE9CSkVDVF9NQVRWSUVXKQorCQlmbXQgPSAiQ1JFQVRF ICV7cGVyc2lzdGVuY2V9cyBNQVRFUklBTElaRUQgVklFVyAle2lmX25vdF9leGlzdHN9cyAle2lk ZW50aXR5fUQiOworCWVsc2UKKwkJZm10ID0gIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUg JXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIjsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KGZtdCwgMywKKwkJCQkJCSAicGVyc2lzdGVuY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdl dF9wZXJzaXN0ZW5jZV9zdHIobm9kZS0+aW50by0+cmVsLT5yZWxwZXJzaXN0ZW5jZSksCisJCQkJ CQkgImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmlmX25vdF9l eGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwkvKiBDT0xVTU5TIGNsYXVzZSAq LworCWlmIChub2RlLT5pbnRvLT5jb2xOYW1lcykKKwl7CisJCWZvcmVhY2goY2VsbCwgbm9kZS0+ aW50by0+Y29sTmFtZXMpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVj dChzdHJWYWwobGZpcnN0KGNlbGwpKSkpOworCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIoJXtj b2x1bW5zOiwgfUkpIiwgMSwKKwkJCQkJCQkgImNvbHVtbnMiLCBPYmpUeXBlQXJyYXksIGxpc3Qp OworCX0KKwllbHNlCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJCSAicHJl c2VudCIsIE9ialR5cGVCb29sLCBmYWxzZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQs ICIle2NvbHVtbnN9cyIsIHRtcCk7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXAgPSBuZXdf b2JqdHJlZSgiVVNJTkciKTsKKwlpZiAobm9kZS0+aW50by0+YWNjZXNzTWV0aG9kKQorCQlhcHBl bmRfc3RyaW5nX29iamVjdCh0bXAsICIle2FjY2Vzc19tZXRob2R9SSIsICJhY2Nlc3NfbWV0aG9k IiwKKwkJCQkJCQkgbm9kZS0+aW50by0+YWNjZXNzTWV0aG9kKTsKKwllbHNlCisJeworCQlhcHBl bmRfbnVsbF9vYmplY3QodG1wLCAiJXthY2Nlc3NfbWV0aG9kfUkiKTsKKwkJYXBwZW5kX25vdF9w cmVzZW50KHRtcCk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7YWNjZXNzX21l dGhvZH1zIiwgdG1wKTsKKworCS8qIFdJVEggY2xhdXNlICovCisJdG1wID0gbmV3X29ianRyZWUo IldJVEgiKTsKKwlsaXN0ID0gTklMOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5pbnRvLT5vcHRp b25zKQorCXsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOwor CisJCXRtcDIgPSBkZXBhcnNlX0RlZkVsZW0ob3B0LCBmYWxzZSk7CisJCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcDIpKTsKKwl9CisKKwlpZiAobGlzdCkKKwkJYXBw ZW5kX2FycmF5X29iamVjdCh0bXAsICIoJXt3aXRoOiwgfXMpIiwgbGlzdCk7CisJZWxzZQorCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7 d2l0aF9jbGF1c2V9cyIsIHRtcCk7CisKKwkvKiBPTiBDT01NSVQgY2xhdXNlLiAgQ1JFQVRFIE1B VEVSSUFMSVpFRCBWSUVXIGRvZXNuJ3QgaGF2ZSBvbmUgKi8KKwlpZiAobm9kZS0+b2JqdHlwZSA9 PSBPQkpFQ1RfVEFCTEUpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7b25fY29tbWl0 fXMiLAorCQkJCQkJCSBkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKG5vZGUtPmludG8tPm9uQ29tbWl0 KSk7CisKKwkvKiBUQUJMRVNQQUNFIGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJUQUJM RVNQQUNFICV7dGFibGVzcGFjZX1JIik7CisJaWYgKG5vZGUtPmludG8tPnRhYmxlU3BhY2VOYW1l KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle3RhYmxlc3BhY2V9cyIsICJ0YWJsZXNw YWNlIiwKKwkJCQkJCQkgbm9kZS0+aW50by0+dGFibGVTcGFjZU5hbWUpOworCWVsc2UKKwl7CisJ CWFwcGVuZF9udWxsX29iamVjdCh0bXAsICIle3RhYmxlc3BhY2V9SSIpOworCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt0YWJsZXNw YWNlfXMiLCB0bXApOworCisJLyogQWRkIHRoZSBxdWVyeSAqLworCUFzc2VydChJc0Eobm9kZS0+ cXVlcnksIFF1ZXJ5KSk7CisJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiQVMgJXtxdWVyeX1z IiwgInF1ZXJ5IiwKKwkJCQkJCSBwZ19nZXRfcXVlcnlkZWYoKFF1ZXJ5ICopIG5vZGUtPnF1ZXJ5 LCBmYWxzZSkpOworCisJLyogQWRkIGEgV0lUSCBOTyBEQVRBIGNsYXVzZSAqLworCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJXSVRIIE5PIERBVEEiLCAxLAorCQkJCQkJICJwcmVzZW50IiwgT2JqVHlw ZUJvb2wsCisJCQkJCQkgbm9kZS0+aW50by0+c2tpcERhdGEgPyB0cnVlIDogZmFsc2UpOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7d2l0aF9ub19kYXRhfXMiLCB0bXApOworCisJcmVs YXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0Owor fQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVRyaWdTdG10IChDUkVBVEUgVFJJR0dFUikKKyAq CisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1h bmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle2NvbnN0cmFpbnR9cyBUUklH R0VSICV7bmFtZX1JICV7dGltZX1zICV7ZXZlbnRzOiBPUiB9cyBPTgorICogJXtyZWxhdGlvbn1E ICV7ZnJvbV90YWJsZX1zICV7Y29uc3RyYWludF9hdHRyczogfXMgRk9SIEVBQ0gKKyAqICV7Zm9y X2VhY2h9cyAle3doZW59cyBFWEVDVVRFIFBST0NFRFVSRSAle2Z1bmN0aW9ufXMKKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUcmlnU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlDcmVhdGVUcmlnU3RtdCAqbm9kZSA9IChDcmVhdGVUcmlnU3RtdCAq KSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcGdfdHJpZ2dlcjsKKwlIZWFwVHVwbGUJdHJpZ1R1cDsK KwlGb3JtX3BnX3RyaWdnZXIgdHJpZ0Zvcm07CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUg ICAgKnRtcF9vYmo7CisJaW50CQkJdGduYXJnczsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxp c3QJICAgKmV2ZW50czsKKwljaGFyCSAgICp0cmlndGltaW5nOworCisJcGdfdHJpZ2dlciA9IHRh YmxlX29wZW4oVHJpZ2dlclJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwl0cmlnVHVw ID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ190cmlnZ2VyLCBBbnVtX3BnX3RyaWdnZXJf b2lkLCBvYmplY3RJZCk7CisJdHJpZ0Zvcm0gPSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1Qo dHJpZ1R1cCk7CisKKwl0cmlndGltaW5nID0gbm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9C RUZPUkUgPyAiQkVGT1JFIiA6CisJCW5vZGUtPnRpbWluZyA9PSBUUklHR0VSX1RZUEVfQUZURVIg PyAiQUZURVIiIDoKKwkJbm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9JTlNURUFEID8gIklO U1RFQUQgT0YiIDoKKwkJTlVMTDsKKwlpZiAoIXRyaWd0aW1pbmcpCisJCWVsb2coRVJST1IsICJ1 bnJlY29nbml6ZWQgdHJpZ2dlciB0aW1pbmcgdHlwZSAlZCIsIG5vZGUtPnRpbWluZyk7CisKKwly ZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7Y29uc3RyYWludH1zIFRSSUdHRVIgJXtuYW1l fUkgJXt0aW1lfXMiLCAzLAorCQkJCQkJICJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgbm9k ZS0+aXNjb25zdHJhaW50ID8gIkNPTlNUUkFJTlQiIDogIiIsCisJCQkJCQkgIm5hbWUiLCBPYmpU eXBlU3RyaW5nLCBub2RlLT50cmlnbmFtZSwKKwkJCQkJCSAidGltZSIsIE9ialR5cGVTdHJpbmcs IHRyaWd0aW1pbmcpOworCisJLyoKKwkgKiBEZWNvZGUgdGhlIGV2ZW50cyB0aGF0IHRoZSB0cmln Z2VyIGZpcmVzIGZvci4gIFRoZSBvdXRwdXQgaXMgYSBsaXN0OyBpbgorCSAqIG1vc3QgY2FzZXMg aXQgd2lsbCBqdXN0IGJlIGEgc3RyaW5nIHdpdGggdGhlIGV2ZW50IG5hbWUsIGJ1dCB3aGVuCisJ ICogdGhlcmUncyBhbiBVUERBVEUgd2l0aCBhIGxpc3Qgb2YgY29sdW1ucywgd2UgcmV0dXJuIGEg SlNPTiBvYmplY3QuCisJICovCisJZXZlbnRzID0gTklMOworCWlmIChub2RlLT5ldmVudHMgJiBU UklHR0VSX1RZUEVfSU5TRVJUKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmlu Z19vYmplY3QoIklOU0VSVCIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX0RF TEVURSkKKwkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJERUxF VEUiKSk7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9UUlVOQ0FURSkKKwkJZXZl bnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJUUlVOQ0FURSIpKTsKKwlp ZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX1VQREFURSkKKwl7CisJCWlmIChub2RlLT5j b2x1bW5zID09IE5JTCkKKwkJeworCQkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJp bmdfb2JqZWN0KCJVUERBVEUiKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlPYmpUcmVlICAgICp1 cGRhdGU7CisJCQlMaXN0Q2VsbCAgICpjZWxsOworCQkJTGlzdAkgICAqY29scyA9IE5JTDsKKwor CQkJLyoKKwkJCSAqIEN1cnJlbnRseSBvbmx5IFVQREFURSBPRiBjYW4gYmUgb2JqZWN0cyBpbiB0 aGUgb3V0cHV0IEpTT04sIGJ1dAorCQkJICogd2UgYWRkIGEgImtpbmQiIGVsZW1lbnQgc28gdGhh dCB1c2VyIGNvZGUgY2FuIGRpc3Rpbmd1aXNoCisJCQkgKiBwb3NzaWJsZSBmdXR1cmUgbmV3IGV2 ZW50IHR5cGVzLgorCQkJICovCisJCQl1cGRhdGUgPSBuZXdfb2JqdHJlZV9WQSgiVVBEQVRFIE9G IiwgMSwKKwkJCQkJCQkJCSJraW5kIiwgT2JqVHlwZVN0cmluZywgInVwZGF0ZV9vZiIpOworCisJ CQlmb3JlYWNoKGNlbGwsIG5vZGUtPmNvbHVtbnMpCisJCQl7CisJCQkJY2hhcgkgICAqY29sbmFt ZSA9IHN0clZhbChsZmlyc3QoY2VsbCkpOworCisJCQkJY29scyA9IGxhcHBlbmQoY29scywgbmV3 X3N0cmluZ19vYmplY3QoY29sbmFtZSkpOworCQkJfQorCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0 KHVwZGF0ZSwgIiV7Y29sdW1uczosIH1JIiwgY29scyk7CisKKwkJCWV2ZW50cyA9IGxhcHBlbmQo ZXZlbnRzLCBuZXdfb2JqZWN0X29iamVjdCh1cGRhdGUpKTsKKwkJfQorCX0KKwlhcHBlbmRfYXJy YXlfb2JqZWN0KHJldCwgIiV7ZXZlbnRzOiBPUiB9cyIsIGV2ZW50cyk7CisKKwl0bXBfb2JqID0g bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkgdHJpZ0Zvcm0tPnRncmVsaWQpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIk9OICV7 cmVsYXRpb259RCIsIHRtcF9vYmopOworCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJGUk9NIik7 CisJaWYgKHRyaWdGb3JtLT50Z2NvbnN0cnJlbGlkKQorCXsKKwkJT2JqVHJlZSAgICAqcmVsOwor CisJCXJlbCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQs CisJCQkJCQkJCQkJICB0cmlnRm9ybS0+dGdjb25zdHJyZWxpZCk7CisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcF9vYmosICIle3JlbGF0aW9ufUQiLCByZWwpOworCX0KKwllbHNlCisJCWFwcGVu ZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2Zy b21fdGFibGV9cyIsIHRtcF9vYmopOworCisJaWYgKG5vZGUtPmRlZmVycmFibGUpCisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJERUZFUlJBQkxFIikpOworCWlmIChu b2RlLT5pbml0ZGVmZXJyZWQpCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2Jq ZWN0KCJJTklUSUFMTFkgREVGRVJSRUQiKSk7CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIl e2NvbnN0cmFpbnRfYXR0cnM6IH1zIiwgbGlzdCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChy ZXQsICJGT1IgRUFDSCAle2Zvcl9lYWNofXMiLCAiZm9yX2VhY2giLAorCQkJCQkJIG5vZGUtPnJv dyA/ICJST1ciIDogIlNUQVRFTUVOVCIpOworCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJXSEVO Iik7CisJaWYgKG5vZGUtPndoZW5DbGF1c2UpCisJeworCQlOb2RlCSAgICp3aGVuQ2xhdXNlOwor CQlEYXR1bQkJdmFsdWU7CisJCWJvb2wJCWlzbnVsbDsKKworCQl2YWx1ZSA9IGZhc3RnZXRhdHRy KHRyaWdUdXAsIEFudW1fcGdfdHJpZ2dlcl90Z3F1YWwsCisJCQkJCQkJUmVsYXRpb25HZXREZXNj cihwZ190cmlnZ2VyKSwgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAi bnVsbCB0Z3F1YWwgZm9yIHRyaWdnZXIgXCIlc1wiIiwKKwkJCQkgTmFtZVN0cih0cmlnRm9ybS0+ dGduYW1lKSk7CisKKwkJd2hlbkNsYXVzZSA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3Ry aW5nKHZhbHVlKSk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIoJXtjbGF1c2V9 cykiLCAiY2xhdXNlIiwKKwkJCQkJCQkgcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZSh0cmlnRm9y bSwKKwkJCQkJCQkJCQkJCQkgICB3aGVuQ2xhdXNlLAorCQkJCQkJCQkJCQkJCSAgIGZhbHNlKSk7 CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIiV7d2hlbn1zIiwgdG1wX29iaik7CisKKwl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIiV7ZnVuY25hbWV9RCIsIDEsCisJCQkJCQkJImZ1bmNuYW1lIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJdHJpZ0Zvcm0tPnRnZm9pZCkpOworCWxpc3QgPSBOSUw7CisJ dGduYXJncyA9IHRyaWdGb3JtLT50Z25hcmdzOworCWlmICh0Z25hcmdzID4gMCkKKwl7CisJCWJ5 dGVhCSAgICp0Z2FyZ3M7CisJCWNoYXIJICAgKmFyZ3N0cjsKKwkJYm9vbAkJaXNudWxsOworCQlp bnQJCQlmaW5keDsKKwkJaW50CQkJbGVudGdhcmdzOworCQljaGFyCSAgICpwOworCisJCXRnYXJn cyA9IERhdHVtR2V0Qnl0ZWFQKGZhc3RnZXRhdHRyKHRyaWdUdXAsCisJCQkJCQkJCQkJCUFudW1f cGdfdHJpZ2dlcl90Z2FyZ3MsCisJCQkJCQkJCQkJCVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dl ciksCisJCQkJCQkJCQkJCSZpc251bGwpKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1Is ICJudWxsIHRnYXJncyBmb3IgdHJpZ2dlciBcIiVzXCIiLAorCQkJCSBOYW1lU3RyKHRyaWdGb3Jt LT50Z25hbWUpKTsKKwkJYXJnc3RyID0gKGNoYXIgKikgVkFSREFUQSh0Z2FyZ3MpOworCQlsZW50 Z2FyZ3MgPSBWQVJTSVpFX0FOWV9FWEhEUih0Z2FyZ3MpOworCisJCXAgPSBhcmdzdHI7CisJCWZv ciAoZmluZHggPSAwOyBmaW5keCA8IHRnbmFyZ3M7IGZpbmR4KyspCisJCXsKKwkJCXNpemVfdAkJ dGxlbjsKKworCQkJLyogVmVyaWZ5IHRoYXQgdGhlIGFyZ3VtZW50IGVuY29kaW5nIGlzIGNvcnJl Y3QgKi8KKwkJCXRsZW4gPSBzdHJsZW4ocCk7CisJCQlpZiAocCArIHRsZW4gPj0gYXJnc3RyICsg bGVudGdhcmdzKQorCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIGFyZ3VtZW50IHN0cmluZyAoJXMp IGZvciB0cmlnZ2VyIFwiJXNcIiIsCisJCQkJCSBhcmdzdHIsIE5hbWVTdHIodHJpZ0Zvcm0tPnRn bmFtZSkpOworCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwKSk7 CisKKwkJCXAgKz0gdGxlbiArIDE7CisJCX0KKwl9CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0 bXBfb2JqLCAiKCIpOworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIiV7YXJnczosIH1M IiwgbGlzdCk7CS8qIG1pZ2h0IGJlIE5JTCAqLworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9v YmosICIpIik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJFWEVDVVRFIFBST0NFRFVS RSAle2Z1bmN0aW9ufXMiLCB0bXBfb2JqKTsKKworCXRhYmxlX2Nsb3NlKHBnX3RyaWdnZXIsIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENy ZWF0ZVVzZXJNYXBwaW5nU3RtdCAoQ1JFQVRFIFVTRVIgTUFQUElORykKKyAqCisgKiBHaXZlbiBh IFVzZXIgTWFwcGluZyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwKKyAq IHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgQ1JFQVRFIFVTRVIgTUFQUElORyBj b21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVVNFUiBNQVBQSU5HIEZP UiAle3JvbGV9UiBTRVJWRVIgJXtzZXJ2ZXJ9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0NyZWF0ZVVzZXJNYXBwaW5nU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlDcmVhdGVVc2VyTWFwcGluZ1N0bXQgKm5vZGUgPSAoQ3JlYXRlVXNlck1hcHBpbmdTdG10 ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJUmVsYXRpb24JcmVsOworCUhlYXBU dXBsZQl0cDsKKwlGb3JtX3BnX3VzZXJfbWFwcGluZyBmb3JtOworCUZvcmVpZ25TZXJ2ZXIgKnNl cnZlcjsKKworCXJlbCA9IHRhYmxlX29wZW4oVXNlck1hcHBpbmdSZWxhdGlvbklkLCBSb3dFeGNs dXNpdmVMb2NrKTsKKworCS8qCisJICogTG9va3VwIG9iamVjdCBpbiB0aGUgY2F0YWxvZywgc28g d2UgZG9uJ3QgaGF2ZSB0byBkZWFsIHdpdGgKKwkgKiBjdXJyZW50X3VzZXIgYW5kIHN1Y2guCisJ ICovCisJdHAgPSBTZWFyY2hTeXNDYWNoZTEoVVNFUk1BUFBJTkdPSUQsIE9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdXNlciBtYXBwaW5nIHdpdGggT0lEICV1IiwKKwkJ CSBvYmplY3RJZCk7CisKKwlmb3JtID0gKEZvcm1fcGdfdXNlcl9tYXBwaW5nKSBHRVRTVFJVQ1Qo dHApOworCisJc2VydmVyID0gR2V0Rm9yZWlnblNlcnZlcihmb3JtLT51bXNlcnZlcik7CisKKwly ZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFVTRVIgTUFQUElORyBGT1IgJXtyb2xlfVIgU0VS VkVSICV7c2VydmVyfUkgJXtnZW5lcmljX29wdGlvbnN9cyIsIDMsCisJCQkJCQkgInJvbGUiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKGZvcm0tPnVtdXNl ciksCisJCQkJCQkgInNlcnZlciIsIE9ialR5cGVTdHJpbmcsIHNlcnZlci0+c2VydmVybmFtZSwK KwkJCQkJCSAiZ2VuZXJpY19vcHRpb25zIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBkZXBhcnNl X0Zkd09wdGlvbnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOworCisJUmVsZWFzZVN5c0NhY2hlKHRw KTsKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXJldHVybiByZXQ7Cit9 CisKKy8qCisgKiBkZXBhcnNlX0FsdGVyVXNlck1hcHBpbmcKKyAqCisgKiBHaXZlbiBhIFVzZXIg TWFwcGluZyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFu CisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogQUxURVIgVVNFUiBNQVBQSU5HIEZPUiAle3JvbGV9UiBTRVJWRVIgJXtz ZXJ2ZXJ9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVXNlck1hcHBpbmdT dG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyVXNlck1hcHBpbmdT dG10ICpub2RlID0gKEFsdGVyVXNlck1hcHBpbmdTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVl ICAgICpyZXQ7CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQl0cDsKKwlGb3JtX3BnX3VzZXJf bWFwcGluZyBmb3JtOworCUZvcmVpZ25TZXJ2ZXIgKnNlcnZlcjsKKworCXJlbCA9IHRhYmxlX29w ZW4oVXNlck1hcHBpbmdSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCS8qCisJICog TG9va3VwIG9iamVjdCBpbiB0aGUgY2F0YWxvZywgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZWFsIHdp dGgKKwkgKiBjdXJyZW50X3VzZXIgYW5kIHN1Y2guCisJICovCisJdHAgPSBTZWFyY2hTeXNDYWNo ZTEoVVNFUk1BUFBJTkdPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQodHApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgdXNlciBtYXBwaW5nIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlmb3JtID0g KEZvcm1fcGdfdXNlcl9tYXBwaW5nKSBHRVRTVFJVQ1QodHApOworCisJc2VydmVyID0gR2V0Rm9y ZWlnblNlcnZlcihmb3JtLT51bXNlcnZlcik7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgVVNFUiBNQVBQSU5HIEZPUiAle3JvbGV9UiBTRVJWRVIgJXtzZXJ2ZXJ9SSAle2dlbmVyaWNf b3B0aW9uc31zIiwgMywKKwkJCQkJCSAicm9sZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3JvbGVfaWQoZm9ybS0+dW11c2VyKSwKKwkJCQkJCSAic2VydmVyIiwgT2Jq VHlwZVN0cmluZywgc2VydmVyLT5zZXJ2ZXJuYW1lLAorCQkJCQkJICJnZW5lcmljX29wdGlvbnMi LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25z LCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93 RXhjbHVzaXZlTG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0 ZXJTdGF0c1N0bXQgKEFMVEVSIFNUQVRJU1RJQ1MpCisgKgorICogR2l2ZW4gYSBhbHRlciBzdGF0 aXN0aWNzIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4K KyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBBTFRFUiBTVEFUSVNUSUNTICV7aWRlbnRpdHl9RCBTRVQgU1RBVElTVElD UyAle3RhcmdldH1uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJTdGF0c1N0 bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJTdGF0c1N0bXQgKm5v ZGUgPSAoQWx0ZXJTdGF0c1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlI ZWFwVHVwbGUJdHA7CisJRm9ybV9wZ19zdGF0aXN0aWNfZXh0IHN0YXRmb3JtOworCisJaWYgKCFu b2RlLT5zdHhzdGF0dGFyZ2V0KQorCQlyZXR1cm4gTlVMTDsKKworCS8qIExvb2t1cCBvYmplY3Qg aW4gdGhlIGNhdGFsb2cgKi8KKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShTVEFURVhUT0lELCBPYmpl Y3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHN0YXRpc3RpYyB3aXRoIE9JRCAl dSIsIG9iamVjdElkKTsKKworCXN0YXRmb3JtID0gKEZvcm1fcGdfc3RhdGlzdGljX2V4dCkgR0VU U1RSVUNUKHRwKTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgU1RBVElTVElDUyAle2lk ZW50aXR5fUQgU0VUIFNUQVRJU1RJQ1MgJXt0YXJnZXR9biIsIDIsCisJCQkJCQkgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc3RhdGZv cm0tPnN0eG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihzdGF0Zm9ybS0+c3R4bmFt ZSkpLAorCQkJCQkJICJ0YXJnZXQiLCBPYmpUeXBlSW50ZWdlciwgbm9kZS0+c3R4c3RhdHRhcmdl dCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgUmVmcmVzaE1hdFZpZXdTdG10IChSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXKQor ICoKKyAqIEdpdmVuIGEgbWF0ZXJpYWxpemVkIHZpZXcgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0 aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIHJl ZnJlc2ggY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogUkVGUkVTSCBNQVRFUklB TElaRUQgVklFVyAle2NvbmN1cnJlbnRseX1zICV7aWRlbnRpdHl9RCAle3dpdGhfbm9fZGF0YX1z CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUmVmcmVzaE1hdFZpZXdTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCVJlZnJlc2hNYXRWaWV3U3RtdCAqbm9kZSA9 IChSZWZyZXNoTWF0Vmlld1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlP YmpUcmVlICAgICp0bXA7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiUkVGUkVTSCBNQVRFUklB TElaRUQgVklFVyAle2NvbmN1cnJlbnRseX1zICV7aWRlbnRpdHl9RCIsIDIsCisJCQkJCQkgImNv bmN1cnJlbnRseSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+Y29uY3VycmVudCA/ICJD T05DVVJSRU5UTFkiIDogIiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJLyogQWRkIGEgV0lUSCBOTyBEQVRBIGNsYXVzZSAq LworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJXSVRIIE5PIERBVEEiLCAxLAorCQkJCQkJICJwcmVz ZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkgbm9kZS0+c2tpcERhdGEgPyB0cnVlIDogZmFsc2Up OworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7d2l0aF9ub19kYXRhfXMiLCB0bXApOwor CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgRGVmRWxlbXMsIGFzIHVzZWQgZS5n LiBieSBBTFRFUiBDT0xVTU4gLi4uIFNFVCwgaW50byBhIGxpc3Qgb2YgU0VUCisgKiAoLi4uKSAg b3IgUkVTRVQgKC4uLikgY29udGVudHMuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqICV7bGFi ZWx9cyA9ICV7dmFsdWV9TAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZkVsZW0o RGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNldCkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2Jq VHJlZSAgICAqb3B0bmFtZSA9IG5ld19vYmp0cmVlKCIiKTsKKworCWlmIChlbGVtLT5kZWZuYW1l c3BhY2UgIT0gTlVMTCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qob3B0bmFtZSwgIiV7c2NoZW1h fUkuIiwgInNjaGVtYSIsCisJCQkJCQkJIGVsZW0tPmRlZm5hbWVzcGFjZSk7CisKKwlhcHBlbmRf c3RyaW5nX29iamVjdChvcHRuYW1lLCAiJXtsYWJlbH1JIiwgImxhYmVsIiwgZWxlbS0+ZGVmbmFt ZSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiJXtsYWJlbH1zIiwgMSwKKwkJCQkJCSAibGFi ZWwiLCBPYmpUeXBlT2JqZWN0LCBvcHRuYW1lKTsKKworCWlmICghaXNfcmVzZXQpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHJldCwgIj0gJXt2YWx1ZX1MIiwgInZhbHVlIiwKKwkJCQkJCQkgZWxl bS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVt KSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEhhbmRs ZSBkZXBhcnNpbmcgb2YgRFJPUCBjb21tYW5kcy4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICog RFJPUCAlcyBJRiBFWElTVFMgJSV7b2JqaWRlbnRpdHl9cyAle2Nhc2NhZGV9cworICovCitjaGFy ICoKK2RlcGFyc2VfZHJvcF9jb21tYW5kKGNvbnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBj aGFyICpvYmplY3R0eXBlLAorCQkJCQkgRHJvcEJlaGF2aW9yIGJlaGF2aW9yKQoreworCVN0cmlu Z0luZm9EYXRhIHN0cjsKKwljaGFyCSAgICpjb21tYW5kOworCWNoYXIJICAgKmlkZW50aXR5ID0g KGNoYXIgKikgb2JqaWRlbnRpdHk7CisJT2JqVHJlZSAgICAqc3RtdDsKKwlPYmpUcmVlICAgICp0 bXBfb2JqOworCUpzb25iCSAgICpqc29uYjsKKworCWluaXRTdHJpbmdJbmZvKCZzdHIpOworCisJ c3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QICV7b2JqdHlwZX1zIElGIEVYSVNUUyAle29iamlk ZW50aXR5fXMiLCAyLAorCQkJCQkJICAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsIG9iamVjdHR5 cGUsCisJCQkJCQkgICJvYmppZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50aXR5KTsKKwor CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJInByZXNlbnQi LCBPYmpUeXBlQm9vbCwgYmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChzdG10LCAiJXtjYXNjYWRlfXMiLCB0bXBfb2JqKTsKKworCWpzb25iID0gb2JqdHJl ZV90b19qc29uYihzdG10KTsKKwljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25i LT5yb290LCBKU09OQl9FU1RJTUFURURfTEVOKTsKKworCXJldHVybiBjb21tYW5kOworfQorCisv KgorICogSGFuZGxlIGRlcGFyc2luZyBzZXR0aW5nIG9mIEZ1bmN0aW9uCisgKgorICogVmVyYm9z ZSBzeW50YXgKKyAqIFJFU0VUIEFMTAorICogT1IKKyAqIFNFVCAle3NldF9uYW1lfUkgVE8gJXtz ZXRfdmFsdWV9cworICogT1IKKyAqIFJFU0VUICV7c2V0X25hbWV9SQorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0Z1bmN0aW9uU2V0KFZhcmlhYmxlU2V0S2luZCBraW5kLCBjaGFyICpu YW1lLCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlpZiAoa2luZCA9PSBW QVJfUkVTRVRfQUxMKQorCQlyZXQgPSBuZXdfb2JqdHJlZSgiUkVTRVQgQUxMIik7CisJZWxzZSBp ZiAoa2luZCA9PSBWQVJfU0VUX1ZBTFVFKQorCXsKKwkJcmV0ID0gbmV3X29ianRyZWVfVkEoIlNF VCAle3NldF9uYW1lfUkiLCAxLAorCQkJCQkJCSAic2V0X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBu YW1lKTsKKworCQkvKgorCQkgKiBTb21lIEdVQyB2YXJpYWJsZSBuYW1lcyBhcmUgJ0xJU1QnIHR5 cGUgYW5kIGhlbmNlIG11c3Qgbm90IGJlCisJCSAqIHF1b3RlZC4KKwkJICovCisJCWlmIChHZXRD b25maWdPcHRpb25GbGFncyhuYW1lLCB0cnVlKSAmIEdVQ19MSVNUX1FVT1RFKQorCQkJYXBwZW5k X3N0cmluZ19vYmplY3QocmV0LCAiVE8gJXtzZXRfdmFsdWV9cyIsICJzZXRfdmFsdWUiLCB2YWx1 ZSk7CisJCWVsc2UKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlRPICV7c2V0X3ZhbHVl fUwiLCAic2V0X3ZhbHVlIiwgdmFsdWUpOworCX0KKwllbHNlCisJCXJldCA9IG5ld19vYmp0cmVl X1ZBKCJSRVNFVCAle3NldF9uYW1lfUkiLCAxLAorCQkJCQkJCSAic2V0X25hbWUiLCBPYmpUeXBl U3RyaW5nLCBuYW1lKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIElu ZGV4U3RtdC4KKyAqCisgKiBHaXZlbiBhbiBpbmRleCBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3Jl YXRpb24gY29tbWFuZC4KKyAqCisgKiBJZiB0aGUgaW5kZXggY29ycmVzcG9uZHMgdG8gYSBjb25z dHJhaW50LCBOVUxMIGlzIHJldHVybmVkLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVB VEUgJXt1bmlxdWV9cyBJTkRFWCAle2NvbmN1cnJlbnRseX1zICV7aWZfbm90X2V4aXN0c31zICV7 bmFtZX1JIE9OCisgKiAle3RhYmxlfUQgVVNJTkcgJXtpbmRleF9hbX1zICgle2RlZmluaXRpb259 cykgJXt3aXRofXMgJXt0YWJsZXNwYWNlfXMKKyAqICV7d2hlcmVfY2xhdXNlfXMKKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9JbmRleFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJSW5kZXhTdG10ICAqbm9kZSA9IChJbmRleFN0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCVJlbGF0aW9uCWlkeHJl bDsKKwlSZWxhdGlvbgloZWFwcmVsOworCWNoYXIJICAgKmluZGV4X2FtOworCWNoYXIJICAgKmRl ZmluaXRpb247CisJY2hhcgkgICAqcmVsb3B0aW9uczsKKwljaGFyCSAgICp0YWJsZXNwYWNlOwor CWNoYXIJICAgKndoZXJlQ2xhdXNlOworCisJaWYgKG5vZGUtPnByaW1hcnkgfHwgbm9kZS0+aXNj b25zdHJhaW50KQorCXsKKwkJLyoKKwkJICogSW5kZXhlcyBmb3IgUFJJTUFSWSBLRVkgYW5kIG90 aGVyIGNvbnN0cmFpbnRzIGFyZSBvdXRwdXQKKwkJICogc2VwYXJhdGVseTsgcmV0dXJuIGVtcHR5 IGhlcmUuCisJCSAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZHhyZWwgPSByZWxhdGlvbl9v cGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCWhlYXByZWwgPSByZWxhdGlvbl9vcGVu KGlkeHJlbC0+cmRfaW5kZXgtPmluZHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcGdfZ2V0 X2luZGV4ZGVmX2RldGFpbGVkKG9iamVjdElkLAorCQkJCQkJCSAmaW5kZXhfYW0sICZkZWZpbml0 aW9uLCAmcmVsb3B0aW9ucywKKwkJCQkJCQkgJnRhYmxlc3BhY2UsICZ3aGVyZUNsYXVzZSk7CisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7dW5pcXVlfXMgSU5ERVggJXtjb25jdXJy ZW50bHl9cyAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSBPTiAle3RhYmxlfUQgVVNJTkcgJXtp bmRleF9hbX1zICgle2RlZmluaXRpb259cykiLCA3LAorCQkJCQkJICJ1bmlxdWUiLCBPYmpUeXBl U3RyaW5nLAorCQkJCQkJIG5vZGUtPnVuaXF1ZSA/ICJVTklRVUUiIDogIiIsCisJCQkJCQkgImNv bmN1cnJlbnRseSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+Y29uY3VycmVudCA/ICJD T05DVVJSRU5UTFkiIDogIiIsCisJCQkJCQkgImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJ CQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUoaWR4cmVsKSwKKwkJCQkJCSAidGFibGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShoZWFwcmVsLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcHJlbCkpLAorCQkJCQkJICJpbmRl eF9hbSIsIE9ialR5cGVTdHJpbmcsIGluZGV4X2FtLAorCQkJCQkJICJkZWZpbml0aW9uIiwgT2Jq VHlwZVN0cmluZywgZGVmaW5pdGlvbik7CisKKwkvKiByZWxvcHRpb25zICovCisJdG1wX29iaiA9 IG5ld19vYmp0cmVlKCJXSVRIIik7CisJaWYgKHJlbG9wdGlvbnMpCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcF9vYmosICIoJXtvcHRzfXMpIiwgIm9wdHMiLCByZWxvcHRpb25zKTsKKwllbHNl CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChy ZXQsICIle3dpdGh9cyIsIHRtcF9vYmopOworCisJLyogdGFibGVzcGFjZSAqLworCXRtcF9vYmog PSBuZXdfb2JqdHJlZSgiVEFCTEVTUEFDRSIpOworCWlmICh0YWJsZXNwYWNlKQorCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXt0YWJsZXNwYWNlfXMiLCAidGFibGVzcGFjZSIsIHRh Ymxlc3BhY2UpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dGFibGVzcGFjZX1zIiwgdG1wX29iaik7CisKKwkvKiBX SEVSRSBjbGF1c2UgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIldIRVJFIik7CisJaWYgKHdo ZXJlQ2xhdXNlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXt3aGVyZX1zIiwg IndoZXJlIiwgd2hlcmVDbGF1c2UpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9v YmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7d2hlcmVfY2xhdXNlfXMiLCB0bXBf b2JqKTsKKworCXRhYmxlX2Nsb3NlKGlkeHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl0YWJsZV9j bG9zZShoZWFwcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoK KyAqIERlcGFyc2UgdGhlIElOSEVSSVRTIHJlbGF0aW9ucy4KKyAqCisgKiBHaXZlbiBhIHRhYmxl IE9JRCwgcmV0dXJuIGEgc2NoZW1hLXF1YWxpZmllZCB0YWJsZSBsaXN0IHJlcHJlc2VudGluZwor ICogdGhlIHBhcmVudCB0YWJsZXMuCisgKi8KK3N0YXRpYyBMaXN0ICoKK2RlcGFyc2VfSW5oUmVs YXRpb25zKE9pZCBvYmplY3RJZCkKK3sKKwlMaXN0CSAgICpwYXJlbnRzID0gTklMOworCVJlbGF0 aW9uCWluaFJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleTsKKwlIZWFw VHVwbGUJdHVwbGU7CisKKwlpbmhSZWwgPSB0YWJsZV9vcGVuKEluaGVyaXRzUmVsYXRpb25JZCwg Um93RXhjbHVzaXZlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgma2V5LAorCQkJCUFudW1fcGdfaW5o ZXJpdHNfaW5ocmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJ CU9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNj YW4oaW5oUmVsLCBJbmhlcml0c1JlbGlkU2Vxbm9JbmRleElkLAorCQkJCQkJCSAgdHJ1ZSwgTlVM TCwgMSwgJmtleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxl X2dldG5leHQoc2NhbikpKQorCXsKKwkJT2JqVHJlZSAgICAqcGFyZW50OworCQlGb3JtX3BnX2lu aGVyaXRzIGZvcm1JbmggPSAoRm9ybV9wZ19pbmhlcml0cykgR0VUU1RSVUNUKHR1cGxlKTsKKwor CQlwYXJlbnQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklk LAorCQkJCQkJCQkJCQkgZm9ybUluaC0+aW5ocGFyZW50KTsKKwkJcGFyZW50cyA9IGxhcHBlbmQo cGFyZW50cywgbmV3X29iamVjdF9vYmplY3QocGFyZW50KSk7CisJfQorCisJc3lzdGFibGVfZW5k c2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShpbmhSZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJ cmV0dXJuIHBhcmVudHM7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBPTiBDT01NSVQgLi4uIGNs YXVzZSBmb3IgQ1JFQVRFIC4uLiBURU1QT1JBUlkgLi4uCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIE9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfT25Db21taXRDbGF1c2UoT25Db21taXRBY3Rpb24gb3B0aW9uKQoreworCU9ialRy ZWUgICAgKnJldCAgPSBuZXdfb2JqdHJlZSgiT04gQ09NTUlUIik7CisJc3dpdGNoIChvcHRpb24p CisJeworCQljYXNlIE9OQ09NTUlUX0RST1A6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQs ICIle29uX2NvbW1pdF92YWx1ZX1zIiwKKwkJCQkJCQkJICJvbl9jb21taXRfdmFsdWUiLCAiRFJP UCIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPTkNPTU1JVF9ERUxFVEVfUk9XUzoKKwkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiLAorCQkJCQkJCQkgIm9u X2NvbW1pdF92YWx1ZSIsICJERUxFVEUgUk9XUyIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPTkNP TU1JVF9QUkVTRVJWRV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtvbl9j b21taXRfdmFsdWV9cyIsCisJCQkJCQkJCSAib25fY29tbWl0X3ZhbHVlIiwgIlBSRVNFUlZFIFJP V1MiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfTk9PUDoKKwkJCWFwcGVuZF9udWxs X29iamVjdChyZXQsICIle29uX2NvbW1pdF92YWx1ZX1zIik7CisJCQlhcHBlbmRfbm90X3ByZXNl bnQocmV0KTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIGEgUmVuYW1lU3RtdC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgJXMgJXtp Zl9leGlzdHN9cyAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisgKiBPUgorICog QUxURVIgUE9MSUNZICV7aWZfZXhpc3RzfXMgJXtwb2xpY3luYW1lfUkgT04gJXtpZGVudGl0eX1E IFJFTkFNRSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSIG9ianR5cGUgJXtpZGVudGl0 eX1EIFJFTkFNRSBBVFRSSUJVVEUgJXtjb2xuYW1lfUkgVE8gJXtuZXduYW1lfUkgJXtjYXNjYWRl fXMKKyAqIE9SCisgKiBBTFRFUiBvYmp0eXBlICV7aWZfZXhpc3RzfXMgJSV7aWRlbnRpdHl9RCBS RU5BTUUgQ09MVU1OICV7Y29sbmFtZX1JIFRPICV7bmV3bmFtZX1JCisgKiBPUgorICogQUxURVIg JXMgJSV7aWRlbnRpdHl9cyBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JCisgKiBPUgorICogQUxURVIg JXMgJSV7aWRlbnRpdHl9RCBVU0lORyAlJXtpbmRleF9tZXRob2R9cyBSRU5BTUUgVE8gJSV7bmV3 bmFtZX1JCisgKiBPUgorICogQUxURVIgU0NIRU1BICV7aWRlbnRpdHl9SSBSRU5BTUUgVE8gJXtu ZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiBSVUxFICV7cnVsZW5hbWV9SSBPTiAle2lkZW50aXR5 fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisgKiBPUgorICogQUxURVIgVFJJR0dFUiAle3RyaWdn ZXJuYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SQorICogT1IKKyAq IEFMVEVSICVzICUle2lkZW50aXR5fUQgUkVOQU1FIFRPICUle25ld25hbWV9SQorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbmFtZVN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBO b2RlICpwYXJzZXRyZWUpCit7CisJUmVuYW1lU3RtdCAqbm9kZSA9IChSZW5hbWVTdG10ICopIHBh cnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJUmVsYXRpb24JcmVsYXRpb247CisJT2lkCQkJ c2NoZW1hSWQ7CisKKwkvKgorCSAqIEluIGFuIEFMVEVSIC4uIFJFTkFNRSBjb21tYW5kLCB3ZSBk b24ndCBoYXZlIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZQorCSAqIG9iamVjdCBpbiBzeXN0ZW0g Y2F0YWxvZ3M6IHNpbmNlIHdlIGluc3BlY3QgdGhlbSBhZnRlciB0aGUgY29tbWFuZCBoYXMKKwkg KiBleGVjdXRlZCwgdGhlIG9sZCBuYW1lIGlzIGFscmVhZHkgZ29uZS4gIFRoZXJlZm9yZSwgd2Ug ZXh0cmFjdCBpdCBmcm9tCisJICogdGhlIHBhcnNlIG5vZGUuICBOb3RlIHdlIHN0aWxsIGV4dHJh Y3QgdGhlIHNjaGVtYSBuYW1lIGZyb20gdGhlIGNhdGFsb2cKKwkgKiAoaXQgbWlnaHQgbm90IGJl IHByZXNlbnQgaW4gdGhlIHBhcnNlIG5vZGUpOyBpdCBjYW5ub3QgcG9zc2libHkgaGF2ZQorCSAq IGNoYW5nZWQgYW55d2F5LgorCSAqLworCXN3aXRjaCAobm9kZS0+cmVuYW1lVHlwZSkKKwl7CisJ CWNhc2UgT0JKRUNUX1RBQkxFOgorCQljYXNlIE9CSkVDVF9JTkRFWDoKKwkJY2FzZSBPQkpFQ1Rf U0VRVUVOQ0U6CisJCWNhc2UgT0JKRUNUX1ZJRVc6CisJCWNhc2UgT0JKRUNUX01BVFZJRVc6CisJ CQlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5vYmplY3RJZCwgQWNjZXNzU2hhcmVM b2NrKTsKKwkJCXNjaGVtYUlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRpb24pOworCQkJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWZfZXhpc3RzfXMgJXtp ZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDQsCisJCQkJCQkJCSAib2JqdHlwZSIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVU eXBlLCBmYWxzZSksCisJCQkJCQkJCSAiaWZfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiLAorCQkJCQkJCQkgImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShz Y2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSksCisJCQkJ CQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBub2RlLT5uZXduYW1lKTsK KwkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJYnJlYWs7 CisKKwkJY2FzZSBPQkpFQ1RfUE9MSUNZOgorCQkJeworCQkJCUhlYXBUdXBsZQlwb2xUdXA7CisJ CQkJRm9ybV9wZ19wb2xpY3kgcG9sRm9ybTsKKwkJCQlSZWxhdGlvbglwZ19wb2xpY3k7CisJCQkJ U2NhbktleURhdGEga2V5OworCQkJCVN5c1NjYW5EZXNjIHNjYW47CisKKwkJCQlwZ19wb2xpY3kg PSByZWxhdGlvbl9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJ U2NhbktleUluaXQoJmtleSwgQW51bV9wZ19wb2xpY3lfb2lkLAorCQkJCQkJCUJURXF1YWxTdHJh dGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJCQlPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2Jq ZWN0SWQpKTsKKwkJCQlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3BvbGljeSwgUG9saWN5 T2lkSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkJCQkgIE5VTEwsIDEsICZrZXkpOworCQkJCXBvbFR1 cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBv bFR1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwb2xpY3kg d2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXBvbEZvcm0gPSAo Rm9ybV9wZ19wb2xpY3kpIEdFVFNUUlVDVChwb2xUdXApOworCisJCQkJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIFBPTElDWSAle2lmX2V4aXN0c31zICV7cG9saWN5bmFtZX1JIE9OICV7aWRl bnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCA0LAorCQkJCQkJCQkJICJpZl9leGlzdHMi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RT IiA6ICIiLAorCQkJCQkJCQkJICJwb2xpY3luYW1lIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJ CSBub2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJCQkgcG9sRm9ybS0+cG9scmVsaWQpLAorCQkJCQkJCQkJICJuZXduYW1l IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBub2RlLT5uZXduYW1lKTsKKwkJCQlzeXN0YWJs ZV9lbmRzY2FuKHNjYW4pOworCQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3BvbGljeSwgQWNjZXNzU2hh cmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX0FUVFJJQlVURToKKwkJ Y2FzZSBPQkpFQ1RfQ09MVU1OOgorCQkJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKGFkZHJlc3Mu b2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlzY2hlbWFJZCA9IFJlbGF0aW9uR2V0TmFt ZXNwYWNlKHJlbGF0aW9uKTsKKworCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0FU VFJJQlVURSkKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVFlQRSAle2lkZW50aXR5 fUQgUkVOQU1FIEFUVFJJQlVURSAle2NvbG5hbWV9SSIsIDIsCisJCQkJCQkJCQkgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc2No ZW1hSWQsCisJCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSwKKwkJCQkJ CQkJCSAiY29sbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUpOworCQkJZWxzZQor CQkJeworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyIsIDEsCisJ CQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0cmluZ2lmeV9v Ymp0eXBlKG5vZGUtPnJlbGF0aW9uVHlwZSwgZmFsc2UpKTsKKworCQkJCS8qIENvbXBvc2l0ZSB0 eXBlcyBkbyBub3Qgc3VwcG9ydCBJRiBFWElTVFMgKi8KKwkJCQlpZiAobm9kZS0+cmVuYW1lVHlw ZSA9PSBPQkpFQ1RfQ09MVU1OKQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2lm X2V4aXN0c31zIiwKKwkJCQkJCQkJCQkgImlmX2V4aXN0cyIsCisJCQkJCQkJCQkJIG5vZGUtPm1p c3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSkpOwor CQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlJFTkFNRSBDT0xVTU4gJXtjb2xuYW1lfUki LAorCQkJCQkJCQkJICJjb2xuYW1lIiwgbm9kZS0+c3VibmFtZSk7CisJCQl9CisKKwkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHJldCwgIlRPICV7bmV3bmFtZX1JIiwgIm5ld25hbWUiLAorCQkJCQkJ CQkgbm9kZS0+bmV3bmFtZSk7CisKKwkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9B VFRSSUJVVEUpCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjYXNjYWRlfXMiLAor CQkJCQkJCQkJIG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkJCQkJCQkicHJl c2VudCIsIE9ialR5cGVCb29sLAorCQkJCQkJCQkJCQkJCW5vZGUtPmJlaGF2aW9yID09IERST1Bf Q0FTQ0FERSkpOworCisJCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2Nr KTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgorCQljYXNlIE9CSkVDVF9S T1VUSU5FOgorCQkJeworCQkJCWNoYXIJICAgKmlkZW50OworCQkJCUhlYXBUdXBsZQlwcm9jdHVw OworCQkJCUZvcm1fcGdfcHJvYyBwcm9jZm9ybTsKKwkJCQlMaXN0CSAgICppZGVudGl0eTsKKwor CQkJCUFzc2VydChJc0Eobm9kZS0+b2JqZWN0LCBPYmplY3RXaXRoQXJncykpOworCQkJCWlkZW50 aXR5ID0gKChPYmplY3RXaXRoQXJncyAqKSBub2RlLT5vYmplY3QpLT5vYmpuYW1lOworCisJCQkJ cHJvY3R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELAorCQkJCQkJCQkJCSAgT2JqZWN0SWRH ZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBy b2N0dXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2Vk dXJlIHdpdGggT0lEICV1IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlwcm9jZm9y bSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jdHVwKTsKKworCQkJCS8qIFhYWCBkb2Vz IHRoaXMgd29yayBmb3Igb3JkZXJlZC1zZXQgYWdncmVnYXRlcz8gKi8KKwkJCQlpZGVudCA9IHBz cHJpbnRmKCIlcyVzIiwKKwkJCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9u YW1lc3BhY2VfbmFtZShwcm9jZm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJCQkJCQkJCQkJCQkJCXN0 clZhbChsbGFzdChpZGVudGl0eSkpKSwKKwkJCQkJCQkJIGZvcm1hdF9wcm9jZWR1cmVfYXJncyhh ZGRyZXNzLm9iamVjdElkLCB0cnVlKSk7CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1zIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDMsCisJ CQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0cmluZ2lmeV9v Ymp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNlKSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlU3RyaW5nLCBpZGVudCwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcs IG5vZGUtPm5ld25hbWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKHByb2N0dXApOworCQkJfQor CQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJ b3BjVHVwOworCQkJCUZvcm1fcGdfb3BjbGFzcyBvcGNGb3JtOworCQkJCUxpc3QJICAgKm9sZG5h bWVzOworCQkJCWNoYXIJICAgKnNjaGVtYW5hbWU7CisJCQkJY2hhcgkgICAqb3BjbmFtZTsKKwor CQkJCW9wY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0oYWRk cmVzcy5vYmplY3RJZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGNUdXApKQorCQkJ CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BjbGFzcyB3aXRoIE9JRCAl dSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisKKwkJCQlvcGNGb3JtID0gKEZvcm1fcGdf b3BjbGFzcykgR0VUU1RSVUNUKG9wY1R1cCk7CisKKwkJCQlvbGRuYW1lcyA9IGxpc3RfY29weV90 YWlsKChMaXN0ICopIG5vZGUtPm9iamVjdCwgMSk7CisKKwkJCQkvKiBEZWNvbnN0cnVjdCB0aGUg bmFtZSBsaXN0ICovCisJCQkJRGVjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKG9sZG5hbWVzLCAmc2No ZW1hbmFtZSwgJm9wY25hbWUpOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7 b2JqdHlwZX1zICV7aWRlbnRpdHl9RCBVU0lORyAle2luZGV4X21ldGhvZH1zIFJFTkFNRSBUTyAl e25ld25hbWV9SSIsIDQsCisJCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNlKSwKKwkJCQkJ CQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShvcGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIG9wY25h bWUpLAorCQkJCQkJCQkJICJpbmRleF9tZXRob2QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ IGdldF9hbV9uYW1lKG9wY0Zvcm0tPm9wY21ldGhvZCksCisJCQkJCQkJCQkgIm5ld25hbWUiLCBP YmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShvcGNU dXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfT1BGQU1JTFk6CisJCQl7CisJ CQkJSGVhcFR1cGxlCW9wZlR1cDsKKwkJCQlIZWFwVHVwbGUJYW1UdXA7CisJCQkJRm9ybV9wZ19v cGZhbWlseSBvcGZGb3JtOworCQkJCUZvcm1fcGdfYW0JYW1Gb3JtOworCQkJCUxpc3QJICAgKm9s ZG5hbWVzOworCQkJCWNoYXIJICAgKnNjaGVtYW5hbWU7CisJCQkJY2hhcgkgICAqb3BmbmFtZTsK KworCQkJCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgYWRkcmVzcy5vYmpl Y3RJZCk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCQkJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUi LAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZh bWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisKKwkJCQlhbVR1cCA9IFNlYXJjaFN5c0NhY2hlMShB TU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGZGb3JtLT5vcGZtZXRob2QpKTsKKwkJCQlpZiAoIUhl YXBUdXBsZUlzVmFsaWQoYW1UdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgYWNjZXNzIG1ldGhvZCB3aXRoIE9JRCAldSIsCisJCQkJCQkgb3BmRm9ybS0+b3Bm bWV0aG9kKTsKKworCQkJCWFtRm9ybSA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOwor CisJCQkJb2xkbmFtZXMgPSBsaXN0X2NvcHlfdGFpbCgoTGlzdCAqKSBub2RlLT5vYmplY3QsIDEp OworCisJCQkJLyogRGVjb25zdHJ1Y3QgdGhlIG5hbWUgbGlzdCAqLworCQkJCURlY29uc3RydWN0 UXVhbGlmaWVkTmFtZShvbGRuYW1lcywgJnNjaGVtYW5hbWUsICZvcGZuYW1lKTsKKworCQkJCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fUQgVVNJTkcg JXtpbmRleF9tZXRob2R9cyBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCA0LAorCQkJCQkJCQkJICJv Ymp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2Rl LT5yZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJCQkJICBvcGZuYW1lKSwKKwkJCQkJCQkJCSAiaW5kZXhfbWV0aG9k IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBOYW1lU3RyKGFtRm9ybS0+YW1uYW1lKSwKKwkJ CQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJ UmVsZWFzZVN5c0NhY2hlKGFtVHVwKTsKKwkJCQlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKwkJ CX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBTQ0hFTUEgJXtpZGVudGl0eX1JIFJFTkFNRSBUTyAle25ld25hbWV9SSIs IDIsCisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAor CQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgT0JKRUNUX0ZEVzoKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCWNh c2UgT0JKRUNUX0ZPUkVJR05fU0VSVkVSOgorCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVS ICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9cyBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCAzLAorCQkJ CQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5 cGUobm9kZS0+cmVuYW1lVHlwZSwgZmFsc2UpLAorCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCQkJIHN0clZhbChjYXN0Tm9kZShTdHJpbmcsIG5vZGUtPm9iamVjdCkp LAorCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1JVTEU6CisJCQl7CisJCQkJSGVhcFR1cGxlCXJld3JU dXA7CisJCQkJRm9ybV9wZ19yZXdyaXRlIHJld3JGb3JtOworCQkJCVJlbGF0aW9uCXBnX3Jld3Jp dGU7CisKKwkJCQlwZ19yZXdyaXRlID0gcmVsYXRpb25fb3BlbihSZXdyaXRlUmVsYXRpb25JZCwg QWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlyZXdyVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29p ZChwZ19yZXdyaXRlLCBBbnVtX3BnX3Jld3JpdGVfb2lkLCBhZGRyZXNzLm9iamVjdElkKTsKKwkJ CQlyZXdyRm9ybSA9IChGb3JtX3BnX3Jld3JpdGUpIEdFVFNUUlVDVChyZXdyVHVwKTsKKworCQkJ CXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBSVUxFICV7cnVsZW5hbWV9SSBPTiAle2lkZW50 aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJCSAicnVsZW5hbWUiLCBP YmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9u UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgcmV3ckZvcm0tPmV2X2NsYXNzKSwKKwkJCQkJ CQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCQkJCXJlbGF0 aW9uX2Nsb3NlKHBnX3Jld3JpdGUsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9CisJCQlicmVhazsK KworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJeworCQkJCUhlYXBUdXBsZQl0cmlnVHVwOwor CQkJCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsKKwkJCQlSZWxhdGlvbglwZ190cmlnZ2VyOwor CisJCQkJcGdfdHJpZ2dlciA9IHJlbGF0aW9uX29wZW4oVHJpZ2dlclJlbGF0aW9uSWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJCQkJdHJpZ1R1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdf dHJpZ2dlciwgZ2V0X29iamVjdF9hdHRudW1fb2lkKGFkZHJlc3MuY2xhc3NJZCksIGFkZHJlc3Mu b2JqZWN0SWQpOworCQkJCXRyaWdGb3JtID0gKEZvcm1fcGdfdHJpZ2dlcikgR0VUU1RSVUNUKHRy aWdUdXApOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFRSSUdHRVIgJXt0cmln Z2VybmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCAzLAorCQkJ CQkJCQkJICJ0cmlnZ2VybmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJCQkJ CQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSB0cmln Rm9ybS0+dGdyZWxpZCksCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2Rl LT5uZXduYW1lKTsKKworCQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3RyaWdnZXIsIEFjY2Vzc1NoYXJl TG9jayk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9DT0xMQVRJT046CisJCWNh c2UgT0JKRUNUX1NUQVRJU1RJQ19FWFQ6CisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCWNhc2UgT0JK RUNUX0NPTlZFUlNJT046CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJY2FzZSBPQkpFQ1RfVFNE SUNUSU9OQVJZOgorCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJY2FzZSBPQkpFQ1RfVFNURU1Q TEFURToKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJeworCQkJCUhlYXBUdXBs ZQlvYmpUdXA7CisJCQkJUmVsYXRpb24JY2F0YWxvZzsKKwkJCQlEYXR1bQkJb2JqbnNwOworCQkJ CWJvb2wJCWlzbnVsbDsKKwkJCQlBdHRyTnVtYmVyCUFudW1fbmFtZXNwYWNlOworCQkJCUxpc3QJ ICAgKmlkZW50aXR5ID0gY2FzdE5vZGUoTGlzdCwgbm9kZS0+b2JqZWN0KTsKKworCQkJCS8qIE9i dGFpbiBvYmplY3QgdHVwbGUgKi8KKwkJCQljYXRhbG9nID0gcmVsYXRpb25fb3BlbihhZGRyZXNz LmNsYXNzSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJb2JqVHVwID0gZ2V0X2NhdGFsb2dfb2Jq ZWN0X2J5X29pZChjYXRhbG9nLCBnZXRfb2JqZWN0X2F0dG51bV9vaWQoYWRkcmVzcy5jbGFzc0lk KSwgYWRkcmVzcy5vYmplY3RJZCk7CisKKwkJCQkvKiBPYnRhaW4gbmFtZXNwYWNlICovCisJCQkJ QW51bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lc3BhY2UoYWRkcmVzcy5jbGFz c0lkKTsKKwkJCQlvYmpuc3AgPSBoZWFwX2dldGF0dHIob2JqVHVwLCBBbnVtX25hbWVzcGFjZSwK KwkJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwgJmlzbnVsbCk7CisJCQkJaWYg KGlzbnVsbCkKKwkJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTlVMTCBuYW1lc3BhY2UiKTsKKwor CQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fUQg UkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSwgZmFs c2UpLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKERhdHVtR2V0T2JqZWN0SWQob2JqbnNwKSwKKwkJCQkJCQkJ CQkJCQkJCSAgc3RyVmFsKGxsYXN0KGlkZW50aXR5KSkpLAorCQkJCQkJCQkJICJuZXduYW1lIiwg T2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQkJcmVsYXRpb25fY2xvc2UoY2F0YWxv ZywgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQll bG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgJWQiLCBub2RlLT5yZW5hbWVUeXBl KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIEFsdGVyT2JqZWN0 RGVwZW5kc1N0bXQgKEFMVEVSIC4uLiBERVBFTkRTIE9OIC4uLikuCisgKgorICogVmVyYm9zZSBz eW50YXgKKyAqIEFMVEVSIElOREVYICV7aWRlbnRpdHl9RCAle25vfXMgREVQRU5EUyBPTiBFWFRF TlNJT04gJXtuZXduYW1lfUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckRl cGVuZFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJPYmplY3RE ZXBlbmRzU3RtdCAqbm9kZSA9IChBbHRlck9iamVjdERlcGVuZHNTdG10ICopIHBhcnNldHJlZTsK KwlPYmpUcmVlICAgICpyZXQgPSBOVUxMOworCisJaWYgKG5vZGUtPm9iamVjdFR5cGUgPT0gT0JK RUNUX0lOREVYKQorCXsKKwkJT2JqVHJlZSAgICAqcXVhbGlmaWVkOworCQlSZWxhdGlvbglyZWxh dGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJcXVh bGlmaWVkID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5h bWVzcGFjZSwKKwkJCQkJCQkJCQkJIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKTsKKwkJcmVsYXRp b25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIElOREVYICV7aWRlbnRpdHl9RCAle25vfXMgREVQRU5EUyBPTiBFWFRFTlNJ T04gJXtuZXduYW1lfUkiLCAzLAorCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LCBx dWFsaWZpZWQsCisJCQkJCQkJICJubyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIG5vZGUtPnJl bW92ZSA/ICJOTyIgOiAiIiwKKwkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBzdHJW YWwobm9kZS0+ZXh0bmFtZSkpOworCX0KKwllbHNlCisJCWVsb2coTE9HLCAidW5yZWNvZ25pemVk IG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJCSAoaW50KSBub2RlVGFnKHBh cnNldHJlZSkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVl bmNlIENBQ0hFIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU0VUIENBQ0hFICV7 dmFsdWV9cworICogT1IKKyAqIENBQ0hFICV7dmFsdWV9CisgKi8KK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqCitkZXBhcnNlX1NlcV9DYWNoZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wg YWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAgKnRtcHN0cjsKKwlj aGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJTRVQgQ0FDSEUgJXt2YWx1ZX1z IiA6ICJDQUNIRSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFU LCBzZXFkYXRhLT5zZXFjYWNoZSk7CisJcmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY2FjaGUiLAorCQkJCQkJICJ2YWx1ZSIsIE9i alR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsK K30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIENZQ0xFIG9wdGlvbi4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogU0VUICV7bm99cyBDWUNMRQorICogT1IKKyAqICV7bm99cyBDWUNM RQorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfQ3ljbGUoRm9ybV9w Z19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKnJl dDsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJTRVQgJXtub31zIENZ Q0xFIiA6ICIle25vfXMgQ1lDTEUiOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY3ljbGUiLAorCQkJCQkJICJubyIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkgc2VxZGF0YS0+c2VxY3ljbGUgPyAiIiA6ICJOTyIpOworCisJ cmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBz ZXF1ZW5jZSBJTkNSRU1FTlQgQlkgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBT RVQgSU5DUkVNRU5UIEJZICV7dmFsdWV9cworICogT1IKKyAqIElOQ1JFTUVOVCBCWSAle3ZhbHVl fXMKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0luY3JlbWVudEJ5 KEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVl ICAgICpyZXQ7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFs dGVyX3RhYmxlID8gIlNFVCBJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zIiA6ICJJTkNSRU1FTlQgQlkg JXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+ c2VxaW5jcmVtZW50KTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJzZXFpbmNyZW1lbnQiLAorCQkJCQkJICJ2YWx1ZSIsIE9i alR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsK K30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE1BWFZBTFVFIG9wdGlvbi4KKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogU0VUIE1BWFZBTFVFICV7dmFsdWV9cworICogT1IKKyAqIE1B WFZBTFVFICV7dmFsdWV9cworICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9T ZXFfTWF4dmFsdWUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQor eworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10Owor CisJZm10ID0gYWx0ZXJfdGFibGUgPyAiU0VUIE1BWFZBTFVFICV7dmFsdWV9cyIgOiAiTUFYVkFM VUUgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0 YS0+c2VxbWF4KTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJtYXh2YWx1ZSIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0 cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisv KgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgTUlOVkFMVUUgb3B0aW9uLgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBTRVQgTUlOVkFMVUUgJXt2YWx1ZX1zCisgKiBPUgorICogTUlOVkFMVUUg JXt2YWx1ZX1zCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9NaW52 YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2Jq VHJlZSAgICAqcmV0OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQg PSBhbHRlcl90YWJsZSA/ICJTRVQgTUlOVkFMVUUgJXt2YWx1ZX1zIiA6ICJNSU5WQUxVRSAle3Zh bHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFt aW4pOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgIm1pbnZhbHVlIiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0 bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBE ZXBhcnNlIHRoZSBzZXF1ZW5jZSBPV05FRCBCWSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBPV05FRCBCWSAle293bmVyfUQKKyAqLworc3RhdGljIE9iakVsZW0gKgorZGVwYXJz ZV9TZXFfT3duZWRCeShPaWQgc2VxdWVuY2VJZCwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpU cmVlICAgICpyZXQgPSBOVUxMOworCVJlbGF0aW9uCWRlcFJlbDsKKwlTeXNTY2FuRGVzYyBzY2Fu OworCVNjYW5LZXlEYXRhIGtleXNbM107CisJSGVhcFR1cGxlCXR1cGxlOworCisJZGVwUmVsID0g dGFibGVfb3BlbihEZXBlbmRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJ bml0KCZrZXlzWzBdLAorCQkJCUFudW1fcGdfZGVwZW5kX2NsYXNzaWQsCisJCQkJQlRFcXVhbFN0 cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25SZWxh dGlvbklkKSk7CisJU2NhbktleUluaXQoJmtleXNbMV0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2Jq aWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0 RGF0dW0oc2VxdWVuY2VJZCkpOworCVNjYW5LZXlJbml0KCZrZXlzWzJdLAorCQkJCUFudW1fcGdf ZGVwZW5kX29ianN1YmlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9JTlQ0RVEsCisJ CQkJSW50MzJHZXREYXR1bSgwKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGRlcFJl bCwgRGVwZW5kRGVwZW5kZXJJbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMywga2V5cyk7 CisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4p KSkKKwl7CisJCU9pZAkJCW93bmVySWQ7CisJCUZvcm1fcGdfZGVwZW5kIGRlcGZvcm07CisJCU9i alRyZWUgICAgKnRtcF9vYmo7CisJCWNoYXIJICAgKmNvbG5hbWU7CisKKwkJZGVwZm9ybSA9IChG b3JtX3BnX2RlcGVuZCkgR0VUU1RSVUNUKHR1cGxlKTsKKworCQkvKiBPbmx5IGNvbnNpZGVyIEFV VE8gZGVwZW5kZW5jaWVzIG9uIHBnX2NsYXNzICovCisJCWlmIChkZXBmb3JtLT5kZXB0eXBlICE9 IERFUEVOREVOQ1lfQVVUTykKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVwZm9ybS0+cmVmY2xhc3Np ZCAhPSBSZWxhdGlvblJlbGF0aW9uSWQpCisJCQljb250aW51ZTsKKwkJaWYgKGRlcGZvcm0tPnJl Zm9ianN1YmlkIDw9IDApCisJCQljb250aW51ZTsKKworCQlvd25lcklkID0gZGVwZm9ybS0+cmVm b2JqaWQ7CisJCWNvbG5hbWUgPSBnZXRfYXR0bmFtZShvd25lcklkLCBkZXBmb3JtLT5yZWZvYmpz dWJpZCwgZmFsc2UpOworCQlpZiAoY29sbmFtZSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJ dG1wX29iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQs IG93bmVySWQpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiYXR0cm5hbWUiLCAi YXR0cm5hbWUiLCBjb2xuYW1lKTsKKwkJcmV0ID0gbmV3X29ianRyZWVfVkEoIk9XTkVEIEJZICV7 b3duZXJ9RCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3duZWQiLAor CQkJCQkJCSAib3duZXIiLCBPYmpUeXBlT2JqZWN0LCB0bXBfb2JqKTsKKwl9CisKKwlzeXN0YWJs ZV9lbmRzY2FuKHNjYW4pOworCXJlbGF0aW9uX2Nsb3NlKGRlcFJlbCwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCS8qCisJICogSWYgdGhlcmUncyBubyBvd25lciBjb2x1bW4sIGVtaXQgYW4gZW1wdHkg T1dORUQgQlkgZWxlbWVudCwgc2V0IHVwIHNvCisJICogdGhhdCBpdCB3b24ndCBwcmludCBhbnl0 aGluZy4KKwkgKi8KKwlpZiAoIXJldCkKKwkJLyogWFhYIHRoaXMgc2hvdWxkbid0IGhhcHBlbiAu Li4gKi8KKwkJcmV0ID0gbmV3X29ianRyZWVfVkEoIk9XTkVEIEJZICV7b3duZXJ9RCIsIDMsCisJ CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3duZWQiLAorCQkJCQkJCSAib3duZXIi LCBPYmpUeXBlTnVsbCwKKwkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgZmFsc2UpOwor CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRo ZSBzZXF1ZW5jZSBSRVNUQVJUIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogUkVT VEFSVCAle3ZhbHVlfXMKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2Vx X1Jlc3RhcnQoRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEpCit7CisJT2JqVHJlZSAgICAq cmV0OworCWNoYXIJICAgKnRtcHN0cjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1B VCwgc2VxZGF0YS0+bGFzdF92YWx1ZSk7CisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlJFU1RBUlQg JXt2YWx1ZX1zIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RhcnQi LAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3 X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIEFT IG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQVMgJXtpZGVudGl0eX1ECisgKi8K K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9BcyhEZWZFbGVtICplbGVtKQor eworCU9ialRyZWUgICAgKnJldDsKKwlUeXBlCQlsaWtlVHlwZTsKKwlGb3JtX3BnX3R5cGUgbGlr ZUZvcm07CisKKwlsaWtlVHlwZSA9IHR5cGVuYW1lVHlwZShOVUxMLCBkZWZHZXRUeXBlTmFtZShl bGVtKSwgTlVMTCk7CisJbGlrZUZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QobGlrZVR5 cGUpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFTICV7aWRlbnRpdHl9RCIsIDEsCisJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWUobGlrZUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihsaWtl Rm9ybS0+dHlwbmFtZSkpKTsKKwlSZWxlYXNlU3lzQ2FjaGUobGlrZVR5cGUpOworCisJcmV0dXJu IG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5j ZSBTVEFSVCBXSVRIIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU0VUIFNUQVJU IFdJVEggJXt2YWx1ZX1zCisgKiBPUgorICogU1RBUlQgV0lUSCAle3ZhbHVlfXMKKyAqLworc3Rh dGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX1N0YXJ0d2l0aChGb3JtX3BnX3NlcXVl bmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNo YXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJT RVQgU1RBUlQgV0lUSCAle3ZhbHVlfXMiIDogIlNUQVJUIFdJVEggJXt2YWx1ZX1zIjsKKworCXRt cHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2Vxc3RhcnQpOworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg InN0YXJ0IiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCisJcmV0 dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBl IFNUT1JBR0Ugb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTVE9SQUdFPSV7dmFs dWV9cworICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1N0b3JhZ2Uo Rm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJTVE9SQUdFID0gJXt2YWx1ZX1zIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInN0b3JhZ2UiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIGdl dF90eXBlX3N0b3JhZ2UodHlwRm9ybS0+dHlwc3RvcmFnZSkpOworCisJcmV0dXJuIG5ld19vYmpl Y3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIFJFQ0VJVkUgb3B0 aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRUNFSVZFPSV7cHJvY2VkdXJlfUQKKyAq Lworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9SZWNlaXZlKEZvcm1fcGdf dHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVl X1ZBKCJSRUNFSVZFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZWNl aXZlIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwcmVjZWl2ZSkpCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZv cm0tPnR5cHJlY2VpdmUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJ cmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0 eXBlIFNFTkQgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRU5EPSV7cHJvY2Vk dXJlfUQKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9TZW5kKEZv cm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJTRU5EPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJz ZW5kIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc2VuZCkpCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0t PnR5cHNlbmQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJu IG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHR5 cG1vZF9pbiBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFRZUE1PRF9JTj0le3By b2NlZHVyZX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfVHlw bW9kX0luKEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfSU49IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInR5cG1vZF9pbiIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1v ZGluKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJl c2VudChyZXQpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisg KiBEZXBhcnNlIHRoZSB0eXBlIHR5cG1vZF9vdXQgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBUWVBNT0RfT1VUPSV7cHJvY2VkdXJlfUQKKyAqLworc3RhdGljIGlubGluZSBPYmpF bGVtICoKK2RlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KEZvcm1fcGdfdHlwZSB0eXBGb3JtKQorewor CU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfT1VUPSIs IDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2Rfb3V0Iik7CisJaWYg KE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kb3V0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kb3V0 KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCXJldHVybiBuZXdfb2Jq ZWN0X29iamVjdChyZXQpOworfQorCisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIGFuYWx5emUg b3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTkFMWVpFPSV7cHJvY2VkdXJlfUQK KyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9BbmFseXplKEZvcm1f cGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJBTkFMWVpFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJh bmFseXplIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwYW5hbHl6ZSkpCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5 cEZvcm0tPnR5cGFuYWx5emUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOwor CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRo ZSB0eXBlIHN1YnNjcmlwdCBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNVQlND UklQVD0le3Byb2NlZHVyZX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNl X1R5cGVfU3Vic2NyaXB0KEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJl dDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJTQ1JJUFQ9IiwgMSwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgInN1YnNjcmlwdCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZv cm0tPnR5cHN1YnNjcmlwdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cHJvY2Vk dXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHN1YnNjcmlwdCkpOworCWVsc2UK KwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qo cmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBSdWxlU3RtdCAoQ1JFQVRFIFJVTEUpLgorICoK KyAqIEdpdmVuIGEgcnVsZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwg cmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgcnVsZSBjb21tYW5kLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgUlVMRSAle29yX3JlcGxhY2V9cyAle2lkZW50 aXR5fUkgQVMgT04gJXtldmVudH1zIFRPICV7dGFibGV9RAorICogJXt3aGVyZV9jbGF1c2V9cyBE TyAle2luc3RlYWR9cyAle2FjdGlvbnM6LCB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX1J1bGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCVJ1bGVTdG10 ICAgKm5vZGUgPSAoUnVsZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlP YmpUcmVlICAgICp0bXA7CisJUmVsYXRpb24JcGdfcmV3cml0ZTsKKwlGb3JtX3BnX3Jld3JpdGUg cmV3ckZvcm07CisJSGVhcFR1cGxlCXJld3JUdXA7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2Fu S2V5RGF0YSBrZXk7CisJRGF0dW0JCWV2X3F1YWw7CisJRGF0dW0JCWV2X2FjdGlvbnM7CisJYm9v bAkJaXNudWxsOworCWNoYXIJICAgKnF1YWw7CisJTGlzdAkgICAqYWN0aW9uczsKKwlMaXN0CSAg ICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJY2hhcgkgICAqZXZlbnRfc3RyOwor CisJcGdfcmV3cml0ZSA9IHRhYmxlX29wZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJU2NhbktleUluaXQoJmtleSwKKwkJCQlBbnVtX3BnX3Jld3JpdGVfb2lkLAorCQkJ CUJURXF1YWxTdHJhdGVneU51bWJlciwKKwkJCQlGX09JREVRLCBPYmplY3RJZEdldERhdHVtKG9i amVjdElkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3Jld3JpdGUsIFJld3Jp dGVPaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMSwgJmtleSk7CisJcmV3clR1cCA9 IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJld3JUdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmV3cml0ZSBydWxlIHdp dGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlyZXdyRm9ybSA9IChGb3JtX3BnX3Jld3Jp dGUpIEdFVFNUUlVDVChyZXdyVHVwKTsKKworCWV2ZW50X3N0ciA9IG5vZGUtPmV2ZW50ID09IENN RF9TRUxFQ1QgPyAiU0VMRUNUIiA6CisJCW5vZGUtPmV2ZW50ID09IENNRF9VUERBVEUgPyAiVVBE QVRFIiA6CisJCW5vZGUtPmV2ZW50ID09IENNRF9ERUxFVEUgPyAiREVMRVRFIiA6CisJCW5vZGUt PmV2ZW50ID09IENNRF9JTlNFUlQgPyAiSU5TRVJUIiA6IE5VTEw7CisJQXNzZXJ0KGV2ZW50X3N0 ciAhPSBOVUxMKTsKKworCWV2X3F1YWwgPSBoZWFwX2dldGF0dHIocmV3clR1cCwgQW51bV9wZ19y ZXdyaXRlX2V2X3F1YWwsCisJCQkJCQkgICBSZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAm aXNudWxsKTsKKwlldl9hY3Rpb25zID0gaGVhcF9nZXRhdHRyKHJld3JUdXAsIEFudW1fcGdfcmV3 cml0ZV9ldl9hY3Rpb24sCisJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAm aXNudWxsKTsKKworCXBnX2dldF9ydWxlZGVmX2RldGFpbGVkKGV2X3F1YWwsIGV2X2FjdGlvbnMs ICZxdWFsLCAmYWN0aW9ucyk7CisKKwl0bXAgPSBuZXdfb2JqdHJlZSgiIik7CisJaWYgKHF1YWwp CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIldIRVJFICV7Y2xhdXNlfXMiLCAiY2xhdXNl IiwgcXVhbCk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcCwgIldIRVJFICV7 Y2xhdXNlfXMiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJfQorCisJZm9yZWFjaChj ZWxsLCBhY3Rpb25zKQorCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChs Zmlyc3QoY2VsbCkpKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgUlVMRSAle29y X3JlcGxhY2V9cyAle2lkZW50aXR5fUkgQVMgT04gJXtldmVudH1zIFRPICV7dGFibGV9RCAle3do ZXJlX2NsYXVzZX1zIERPICV7aW5zdGVhZH1zICV7YWN0aW9uczosIH1zIiwgNywKKwkJCQkJCSAi b3JfcmVwbGFjZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBS RVBMQUNFIiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnJ1 bGVuYW1lLAorCQkJCQkJICJldmVudCIsIE9ialR5cGVTdHJpbmcsIGV2ZW50X3N0ciwKKwkJCQkJ CSAidGFibGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHJld3JGb3JtLT5ldl9jbGFz cyksCisJCQkJCQkgIndoZXJlX2NsYXVzZSIsIE9ialR5cGVPYmplY3QsIHRtcCwKKwkJCQkJCSAi aW5zdGVhZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aW5zdGVhZCA/ICJJTlNURUFE IiA6ICJBTFNPIiwKKwkJCQkJCSAiYWN0aW9ucyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwlz eXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKHBnX3Jld3JpdGUsIEFjY2Vzc1No YXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVRy YW5zZm9ybVN0bXQgKENSRUFURSBUUkFOU0ZPUk0pLgorICoKKyAqIEdpdmVuIGEgdHJhbnNmb3Jt IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJl ZQorICogcmVwcmVzZW50aW5nIHRoZSBDUkVBVEUgVFJBTlNGT1JNIGNvbW1hbmQuCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle29yX3JlcGxhY2V9cyBUUkFOU0ZPUk0gRk9SICV7 dHlwZW5hbWV9RCBMQU5HVUFHRSAle2xhbmd1YWdlfUkKKyAqICggRlJPTSBTUUwgV0lUSCBGVU5D VElPTiAle3NpZ25hdHVyZX1zLCBUTyBTUUwgV0lUSCBGVU5DVElPTgorICogJXtzaWduYXR1cmVf dG9mfXMgKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRyYW5zZm9ybVN0 bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVHJhbnNmb3JtU3Rt dCAqbm9kZSA9IChDcmVhdGVUcmFuc2Zvcm1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAg ICpyZXQ7CisJT2JqVHJlZSAgICAqc2lnbmF0dXJlOworCUhlYXBUdXBsZQl0cmZUdXA7CisJSGVh cFR1cGxlCWxhbmdUdXA7CisJSGVhcFR1cGxlCXByb2NUdXA7CisJRm9ybV9wZ190cmFuc2Zvcm0g dHJmRm9ybTsKKwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdGb3JtOworCUZvcm1fcGdfcHJvYyBwcm9j Rm9ybTsKKwlpbnQJCQlpOworCisJLyogR2V0IHRoZSBwZ190cmFuc2Zvcm0gdHVwbGUgKi8KKwl0 cmZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFJGT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRyZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciB0cmFuc2Zvcm0gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElk KTsKKwl0cmZGb3JtID0gKEZvcm1fcGdfdHJhbnNmb3JtKSBHRVRTVFJVQ1QodHJmVHVwKTsKKwor CS8qIEdldCB0aGUgY29ycmVzcG9uZGluZyBwZ19sYW5ndWFnZSB0dXBsZSAqLworCWxhbmdUdXAg PSBTZWFyY2hTeXNDYWNoZTEoTEFOR09JRCwgdHJmRm9ybS0+dHJmbGFuZyk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKGxhbmdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgbGFuZ3VhZ2Ugd2l0aCBPSUQgJXUiLAorCQkJIHRyZkZvcm0tPnRyZmxhbmcpOworCWxh bmdGb3JtID0gKEZvcm1fcGdfbGFuZ3VhZ2UpIEdFVFNUUlVDVChsYW5nVHVwKTsKKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtvcl9yZXBsYWNlfXMgVFJBTlNGT1JNIEZPUiAle3R5 cGVuYW1lfUQgTEFOR1VBR0UgJXtsYW5ndWFnZX1JIiwgMywKKwkJCQkJCSAib3JfcmVwbGFjZSIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIi LAorCQkJCQkJICJ0eXBlbmFtZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0cmZGb3JtLT50 cmZ0eXBlKSwKKwkJCQkJCSAibGFuZ3VhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIE5hbWVT dHIobGFuZ0Zvcm0tPmxhbm5hbWUpKTsKKworCS8qIERlcGFyc2UgdGhlIHRyYW5zZm9ybV9lbGVt ZW50X2xpc3QgKi8KKwlpZiAoT2lkSXNWYWxpZCh0cmZGb3JtLT50cmZmcm9tc3FsKSkKKwl7CisJ CUxpc3QJICAgKnBhcmFtcyA9IE5JTDsKKworCQkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgZm9y IHRoZSBGUk9NIEZVTkNUSU9OICovCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09J RCwgdHJmRm9ybS0+dHJmZnJvbXNxbCk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVw KSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmdW5jdGlvbiB3aXRo IE9JRCAldSIsCisJCQkJIHRyZkZvcm0tPnRyZmZyb21zcWwpOworCQlwcm9jRm9ybSA9IChGb3Jt X3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCQkvKgorCQkgKiBDUkVBVEUgVFJBTlNG T1JNIGRvZXMgbm90IGNoYW5nZSBmdW5jdGlvbiBzaWduYXR1cmUgc28gd2UgY2FuIHVzZQorCQkg KiBjYXRhbG9nIHRvIGdldCBpbnB1dCB0eXBlIE9pZHMuCisJCSAqLworCQlmb3IgKGkgPSAwOyBp IDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCXsKKwkJCU9ialRyZWUgICAgKnBhcmFtX29i ajsKKworCQkJcGFyYW1fb2JqID0gbmV3X29ianRyZWVfVkEoIiV7dHlwZX1UIiwgMSwKKwkJCQkJ CQkJCSAgInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5 cGUocHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXSwgLTEpKTsKKwkJCXBhcmFtcyA9IGxh cHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVjdChwYXJhbV9vYmopKTsKKwkJfQorCisJCXNp Z25hdHVyZSA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fUQgKCV7YXJndW1lbnRzOiwgfXMp IiwgMiwKKwkJCQkJCQkJICAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJICAg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkJCQlOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSksCisJCQkJCQkJCSAgICJhcmd1bWVu dHMiLCBPYmpUeXBlQXJyYXksIHBhcmFtcyk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0 LCAiKEZST00gU1FMIFdJVEggRlVOQ1RJT04gJXtzaWduYXR1cmV9cyIsCisJCQkJCQkJIHNpZ25h dHVyZSk7CisJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwl9CisJaWYgKE9pZElzVmFsaWQo dHJmRm9ybS0+dHJmdG9zcWwpKQorCXsKKwkJTGlzdAkgICAqcGFyYW1zID0gTklMOworCisJCS8q IEFwcGVuZCBhICcsJyBpZiB0cmZmcm9tc3FsIGlzIHByZXNlbnQsIGVsc2UgYXBwZW5kICcoJyAq LworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsIE9pZElzVmFsaWQodHJmRm9ybS0+dHJmZnJv bXNxbCkgPyAiLCIgOiAiKCIpOworCisJCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSBmb3IgdGhl IFRPIEZVTkNUSU9OICovCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgdHJm Rm9ybS0+dHJmdG9zcWwpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUi LAorCQkJCSB0cmZGb3JtLT50cmZ0b3NxbCk7CisJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykg R0VUU1RSVUNUKHByb2NUdXApOworCisJCS8qCisJCSAqIENSRUFURSBUUkFOU0ZPUk0gZG9lcyBu b3QgY2hhbmdlIGZ1bmN0aW9uIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlCisJCSAqIGNhdGFsb2cg dG8gZ2V0IGlucHV0IHR5cGUgT2lkcy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9y bS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJlZSAgICAqcGFyYW1fb2JqID0gbmV3X29i anRyZWUoIiIpOworCisJCQlwYXJhbV9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXt0eXBlfVQiLCAx LAorCQkJCQkJCQkJICAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgIG5ld19vYmp0 cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0sIC0xKSk7CisJCQlw YXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1fb2JqKSk7CisJ CX0KKworCQlzaWduYXR1cmUgPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EICgle2FyZ3Vt ZW50czosIH1zKSIsIDIsCisJCQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJCSAgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJCQkJTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpLAorCQkJCQkJCQkg ICAiYXJndW1lbnRzIiwgT2JqVHlwZUFycmF5LCBwYXJhbXMpOworCisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIlRPIFNRTCBXSVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlX3RvZn1zIiwKKwkJ CQkJCQkgc2lnbmF0dXJlKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCX0KKworCWFw cGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgIikiKTsKKworCVJlbGVhc2VTeXNDYWNoZShsYW5nVHVw KTsKKwlSZWxlYXNlU3lzQ2FjaGUodHJmVHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog QXBwZW5kIGEgTlVMTC1vci1xdW90ZWQtbGl0ZXJhbCBjbGF1c2UuICBVc2VmdWwgZm9yIENPTU1F TlQgYW5kIFNFQ1VSSVRZCisgKiBMQUJFTC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogJXtu dWxsfXMgJXtsaXRlcmFsfXMKKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9saXRlcmFsX29yX251 bGwoT2JqVHJlZSAqcGFyZW50LCBjaGFyICplbGVtbmFtZSwgY2hhciAqdmFsdWUpCit7CisJT2Jq VHJlZSAgICAqdG9wOworCU9ialRyZWUgICAgKnBhcnQ7CisKKwl0b3AgPSBuZXdfb2JqdHJlZSgi Iik7CisJcGFydCA9IG5ld19vYmp0cmVlX1ZBKCJOVUxMIiwgMSwKKwkJCQkJCSAgInByZXNlbnQi LCBPYmpUeXBlQm9vbCwgIXZhbHVlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0b3AsICIle251 bGx9cyIsIHBhcnQpOworCisJcGFydCA9IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJICAi cHJlc2VudCIsIE9ialR5cGVCb29sLCB2YWx1ZSAhPSBOVUxMKTsKKworCWlmICh2YWx1ZSkKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QocGFydCwgIiV7dmFsdWV9TCIsICJ2YWx1ZSIsIHZhbHVlKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdCh0b3AsICIle2xpdGVyYWx9cyIsIHBhcnQpOworCisJYXBw ZW5kX29iamVjdF9vYmplY3QocGFyZW50LCBlbGVtbmFtZSwgdG9wKTsKK30KKworLyoKKyAqIERl cGFyc2UgYSBDb21tZW50U3RtdCB3aGVuIGl0IHBlcnRhaW5zIHRvIGEgY29uc3RyYWludC4KKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogQ09NTUVOVCBPTiBDT05TVFJBSU5UICV7aWRlbnRpdHl9 cyBPTiBbRE9NQUlOXSAle3BhcmVudG9ian1zIElTICV7Y29tbWVudH1zCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQ29tbWVudE9uQ29uc3RyYWludFNtdChPaWQgb2JqZWN0SWQsIE5v ZGUgKnBhcnNldHJlZSkKK3sKKwlDb21tZW50U3RtdCAqbm9kZSA9IChDb21tZW50U3RtdCAqKSBw YXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCUhlYXBUdXBsZQljb25zdHJUdXA7CisJRm9y bV9wZ19jb25zdHJhaW50IGNvbnN0ckZvcm07CisJT2JqZWN0QWRkcmVzcyBhZGRyOworCisJQXNz ZXJ0KG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX1RBQkNPTlNUUkFJTlQgfHwgbm9kZS0+b2JqdHlw ZSA9PSBPQkpFQ1RfRE9NQ09OU1RSQUlOVCk7CisKKwljb25zdHJUdXAgPSBTZWFyY2hTeXNDYWNo ZTEoQ09OU1RST0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvbnN0clR1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb25zdHJhaW50IHdp dGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNvbnN0ckZvcm0gPSAoRm9ybV9wZ19jb25zdHJhaW50 KSBHRVRTVFJVQ1QoY29uc3RyVHVwKTsKKworCWlmIChPaWRJc1ZhbGlkKGNvbnN0ckZvcm0tPmNv bnJlbGlkKSkKKwkJT2JqZWN0QWRkcmVzc1NldChhZGRyLCBSZWxhdGlvblJlbGF0aW9uSWQsIGNv bnN0ckZvcm0tPmNvbnJlbGlkKTsKKwllbHNlCisJCU9iamVjdEFkZHJlc3NTZXQoYWRkciwgVHlw ZVJlbGF0aW9uSWQsIGNvbnN0ckZvcm0tPmNvbnR5cGlkKTsKKworCXJldCA9IG5ld19vYmp0cmVl X1ZBKCJDT01NRU5UIE9OIENPTlNUUkFJTlQgJXtpZGVudGl0eX1zIE9OICV7ZG9tYWlufXMgJXtw YXJlbnRvYmp9cyIsIDMsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgcHN0cmR1 cChOYW1lU3RyKGNvbnN0ckZvcm0tPmNvbm5hbWUpKSwKKwkJCQkJCSAiZG9tYWluIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCSAobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfRE9NQ09OU1RSQUlOVCkg PyAiRE9NQUlOIiA6ICIiLAorCQkJCQkJICJwYXJlbnRvYmoiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJIGdldE9iamVjdElkZW50aXR5KCZhZGRyLCBmYWxzZSkpOworCisJLyogQWRkIHRoZSBjb21t ZW50IGNsYXVzZSAqLworCWFwcGVuZF9saXRlcmFsX29yX251bGwocmV0LCAiSVMgJXtjb21tZW50 fXMiLCBub2RlLT5jb21tZW50KTsKKworCVJlbGVhc2VTeXNDYWNoZShjb25zdHJUdXApOworCXJl dHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIENvbW1lbnRTdG10IChDT01NRU5UIE9O IC4uLikuCisgKgorICogR2l2ZW4gdGhlIG9iamVjdCBhZGRyZXNzIGFuZCB0aGUgcGFyc2UgdHJl ZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhl IGNvbW1lbnQgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ09NTUVOVCBPTiAl e29ianR5cGV9cyAle2lkZW50aXR5fXMgSVMgJXtjb21tZW50fXMKKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9Db21tZW50U3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBh cnNldHJlZSkKK3sKKwlDb21tZW50U3RtdCAqbm9kZSA9IChDb21tZW50U3RtdCAqKSBwYXJzZXRy ZWU7CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAgKmlkZW50aXR5OworCisJLyoKKwkgKiBD b25zdHJhaW50cyBhcmUgc3VmZmljaWVudGx5IGRpZmZlcmVudCB0aGF0IGl0IGlzIGVhc2llciB0 byBoYW5kbGUgdGhlbQorCSAqIHNlcGFyYXRlbHkuCisJICovCisJaWYgKG5vZGUtPm9ianR5cGUg PT0gT0JKRUNUX0RPTUNPTlNUUkFJTlQgfHwKKwkJbm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFC Q09OU1RSQUlOVCkKKwl7CisJCUFzc2VydChhZGRyZXNzLmNsYXNzSWQgPT0gQ29uc3RyYWludFJl bGF0aW9uSWQpOworCQlyZXR1cm4gZGVwYXJzZV9Db21tZW50T25Db25zdHJhaW50U210KGFkZHJl c3Mub2JqZWN0SWQsIHBhcnNldHJlZSk7CisJfQorCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNP TU1FTlQgT04gJXtvYmp0eXBlfXMiLCAxLAorCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCSAoY2hhciAqKSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmp0eXBlLCBmYWxz ZSkpOworCisJLyoKKwkgKiBBZGQgdGhlIG9iamVjdCBpZGVudGl0eSBjbGF1c2UuICBGb3IgemVy byBhcmd1bWVudCBhZ2dyZWdhdGVzIHdlIG5lZWQKKwkgKiB0byBhZGQgdGhlICgqKSBiaXQ7IGlu IGFsbCBvdGhlciBjYXNlcyB3ZSBjYW4ganVzdCB1c2UKKwkgKiBnZXRPYmplY3RJZGVudGl0eS4K KwkgKgorCSAqIFhYWCBzaG91bGRuJ3Qgd2UgaW5zdGVhZCBmaXggdGhlIG9iamVjdCBpZGVudGl0 aWVzIGZvciB6ZXJvLWFyZ3VtZW50CisJICogYWdncmVnYXRlcz8KKwkgKi8KKwlpZiAobm9kZS0+ b2JqdHlwZSA9PSBPQkpFQ1RfQUdHUkVHQVRFKQorCXsKKwkJSGVhcFR1cGxlCXByb2NUdXA7CisJ CUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKworCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBS T0NPSUQsIE9iamVjdElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQlpZiAoIUhlYXBU dXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgcHJvY2VkdXJlIHdpdGggT0lEICV1IiwKKwkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJ CXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCQlpZiAocHJv Y0Zvcm0tPnByb25hcmdzID09IDApCisJCQlpZGVudGl0eSA9IHBzcHJpbnRmKCIlcygqKSIsCisJ CQkJCQkJCXF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShwcm9j Rm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJCQkJCQkJCQkJCQkJICAgTmFtZVN0cihwcm9jRm9ybS0+ cHJvbmFtZSkpKTsKKwkJZWxzZQorCQkJaWRlbnRpdHkgPSBnZXRPYmplY3RJZGVudGl0eSgmYWRk cmVzcywgZmFsc2UpOworCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJfQorCWVsc2UKKwkJ aWRlbnRpdHkgPSBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpOworCisJYXBwZW5k X3N0cmluZ19vYmplY3QocmV0LCAiJXtpZGVudGl0eX1zIiwgImlkZW50aXR5IiwgaWRlbnRpdHkp OworCisJLyogQWRkIHRoZSBjb21tZW50IGNsYXVzZTsgY2FuIGJlIGVpdGhlciBOVUxMIG9yIGEg cXVvdGVkIGxpdGVyYWwuICovCisJYXBwZW5kX2xpdGVyYWxfb3JfbnVsbChyZXQsICJJUyAle2Nv bW1lbnR9cyIsIG5vZGUtPmNvbW1lbnQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERl cGFyc2UgYSBTZWNMYWJlbFN0bXQgKFNFQ1VSSVRZIExBQkVMKQorICoKKyAqIEdpdmVuIHRoZSBP YmplY3RBZGRyZXNzIG9mIHRoZSB0YXJnZXQgb2JqZWN0IGFuZCB0aGUgcGFyc2UgdHJlZSBvZiB0 aGUKKyAqIFNFQ1VSSVRZIExBQkVMIGNvbW1hbmQsIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2Vu dGluZyB0aGUgU0VDVVJJVFkgTEFCRUwKKyAqIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIFNFQ1VSSVRZIExBQkVMIEZPUiAle3Byb3ZpZGVyfXMgT04gJXtvYmplY3RfdHlwZV9u YW1lfXMgJXtpZGVudGl0eX1zIElTICV7bGFiZWx9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX1NlY0xhYmVsU3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJl ZSkKK3sKKwlTZWNMYWJlbFN0bXQgKm5vZGUgPSAoU2VjTGFiZWxTdG10ICopIHBhcnNldHJlZTsK KwlPYmpUcmVlCSAgICpyZXQ7CisKKwlBc3NlcnQobm9kZS0+cHJvdmlkZXIpOworCisJcmV0ID0g bmV3X29ianRyZWVfVkEoIlNFQ1VSSVRZIExBQkVMIEZPUiAle3Byb3ZpZGVyfXMgT04gJXtvYmp0 eXBlfXMgJXtpZGVudGl0eX1zIiwgMywKKwkJCQkJCSAicHJvdmlkZXIiLCBPYmpUeXBlU3RyaW5n LCBub2RlLT5wcm92aWRlciwKKwkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2JqdHlwZSwgZmFsc2UpLAorCQkJCQkJICJpZGVu dGl0eSIsIE9ialR5cGVTdHJpbmcsIGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSkp OworCisJLyogQWRkIHRoZSBsYWJlbCBjbGF1c2U7IGNhbiBiZSBlaXRoZXIgTlVMTCBvciBhIHF1 b3RlZCBsaXRlcmFsLiAqLworCWFwcGVuZF9saXRlcmFsX29yX251bGwocmV0LCAiSVMgJXtsYWJl bH1zIiwgbm9kZS0+bGFiZWwpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2Ug YSBDcmVhdGVBbVN0bXQgKENSRUFURSBBQ0NFU1MgTUVUSE9EKS4KKyAqCisgKiBHaXZlbiBhbiBh Y2Nlc3MgbWV0aG9kIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBDUkVBVEUgQUNDRVNTIE1FVEhPRCBj b21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgQUNDRVNTIE1FVEhPRCAl e2lkZW50aXR5fUkgVFlQRSAle2FtX3R5cGV9cyBIQU5ETEVSICV7aGFuZGxlcn1ECisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlQW1TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVwbGUJYW1UdXA7CisJRm9y bV9wZ19hbQlhbUZvcm07CisJY2hhcgkgICAqYW10eXBlOworCisJYW1UdXAgPSBTZWFyY2hTeXND YWNoZTEoQU1PSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQoYW1UdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig YWNjZXNzIG1ldGhvZCB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCWFtRm9ybSA9IChG b3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOworCisJc3dpdGNoIChhbUZvcm0tPmFtdHlwZSkK Kwl7CisJCWNhc2UgJ2knOgorCQkJYW10eXBlID0gIklOREVYIjsKKwkJCWJyZWFrOworCQljYXNl ICd0JzoKKwkJCWFtdHlwZSA9ICJUQUJMRSI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVs b2coRVJST1IsICJpbnZhbGlkIHR5cGUgJWMgZm9yIGFjY2VzcyBtZXRob2QiLCBhbUZvcm0tPmFt dHlwZSk7CisJfQorCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBBQ0NFU1MgTUVUSE9E ICV7aWRlbnRpdHl9SSBUWVBFICV7YW1fdHlwZX1zIEhBTkRMRVIgJXtoYW5kbGVyfUQiLCAzLAor CQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgTmFtZVN0cihhbUZvcm0t PmFtbmFtZSksCisJCQkJCQkgImFtX3R5cGUiLCBPYmpUeXBlU3RyaW5nLCBhbXR5cGUsCisJCQkJ CQkgImhhbmRsZXIiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBhbUZvcm0tPmFtaGFu ZGxlcikpOworCisJUmVsZWFzZVN5c0NhY2hlKGFtVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisK Ky8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5kcy4KKyAqCisgKiBUaGlz IGZ1bmN0aW9uIHNob3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0 eVNsb3cuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29s bGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNl dHJlZTsKKworCUFzc2VydChjbWQtPnR5cGUgPT0gU0NUX1NpbXBsZSk7CisKKwlwYXJzZXRyZWUg PSBjbWQtPnBhcnNldHJlZTsKKwlvYmplY3RJZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmpl Y3RJZDsKKworCWlmIChjbWQtPmluX2V4dGVuc2lvbiAmJiAobm9kZVRhZyhwYXJzZXRyZWUpICE9 IFRfQ3JlYXRlRXh0ZW5zaW9uU3RtdCkpCisJCXJldHVybiBOVUxMOworCisJLyogVGhpcyBzd2l0 Y2ggbmVlZHMgdG8gaGFuZGxlIGV2ZXJ5dGhpbmcgdGhhdCBQcm9jZXNzVXRpbGl0eVNsb3cgZG9l cyAqLworCXN3aXRjaCAobm9kZVRhZyhwYXJzZXRyZWUpKQorCXsKKwkJY2FzZSBUX0FsdGVyQ29s bGF0aW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyQ29sbGF0aW9uKG9iamVjdElkLCBw YXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlckRvbWFpblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9BbHRlckRvbWFpblN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkgICBjbWQt PmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisKKwkJY2FzZSBUX0FsdGVyRW51bVN0bXQ6CisJ CQlyZXR1cm4gZGVwYXJzZV9BbHRlckVudW1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJ CWNhc2UgVF9BbHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0Fs dGVyRXh0ZW5zaW9uQ29udGVudHNTdG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJ CQkJICBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisKKwkJY2FzZSBUX0FsdGVyRXh0 ZW5zaW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJGZHdTdG10OgorCQkJcmV0dXJuIGRlcGFy c2VfQWx0ZXJGZHdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlckZv cmVpZ25TZXJ2ZXJTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJGb3JlaWduU2VydmVyU3Rt dChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJGdW5jdGlvblN0bXQ6CisJ CQlyZXR1cm4gZGVwYXJzZV9BbHRlckZ1bmN0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJ CWNhc2UgVF9BbHRlck9iamVjdERlcGVuZHNTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJE ZXBlbmRTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlck9iamVjdFNj aGVtYVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlck9iamVjdFNjaGVtYVN0bXQoY21kLT5k LnNpbXBsZS5hZGRyZXNzLAorCQkJCQkJCQkJCQkJIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJCSBj bWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisKKwkJY2FzZSBUX0FsdGVyT3BlcmF0b3JT dG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJPcGVyYXRvclN0bXQob2JqZWN0SWQsIHBhcnNl dHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyT3duZXJTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0 ZXJPd25lclN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUpOworCisJCWNhc2Ug VF9BbHRlclBvbGljeVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlclBvbGljeVN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyU2VxU3RtdDoKKwkJCXJldHVybiBk ZXBhcnNlX0FsdGVyU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0 ZXJTdGF0c1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlclN0YXRzU3RtdChvYmplY3RJZCwg cGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJUU0RpY3Rpb25hcnlTdG10OgorCQkJcmV0dXJu IGRlcGFyc2VfQWx0ZXJUU0RpY3Rpb25hcnlTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJ CWNhc2UgVF9BbHRlclR5cGVTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJUeXBlU2V0U3Rt dChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJVc2VyTWFwcGluZ1N0bXQ6 CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlclVzZXJNYXBwaW5nU3RtdChvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKworCQljYXNlIFRfQ29tbWVudFN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9Db21tZW50 U3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NvbXBv c2l0ZVR5cGVTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ29tcG9zaXRlVHlwZVN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUFtU3RtdDoKKwkJCXJldHVybiBkZXBh cnNlX0NyZWF0ZUFtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRl Q2FzdFN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVDYXN0U3RtdChvYmplY3RJZCwgcGFy c2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlQ29udmVyc2lvblN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9DcmVhdGVDb252ZXJzaW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9D cmVhdGVEb21haW5TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRG9tYWluKG9iamVjdElk LCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVFbnVtU3RtdDoJLyogQ1JFQVRFIFRZUEUg QVMgRU5VTSAqLworCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRW51bVN0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9DcmVhdGVFeHRlbnNpb25TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2Ug VF9DcmVhdGVGZHdTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRmR3U3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQ6CisJCQly ZXR1cm4gZGVwYXJzZV9DcmVhdGVGb3JlaWduU2VydmVyU3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKworCQljYXNlIFRfQ3JlYXRlRnVuY3Rpb25TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3Jl YXRlRnVuY3Rpb24ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZU9wRmFt aWx5U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVQTGFuZ1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9D cmVhdGVMYW5nU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlUG9s aWN5U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVBvbGljeVN0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVJhbmdlU3RtdDogLyogQ1JFQVRFIFRZUEUgQVMg UkFOR0UgKi8KKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVJhbmdlU3RtdChvYmplY3RJZCwgcGFy c2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlU2NoZW1hU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0NyZWF0ZVNjaGVtYVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0 ZVNlcVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTZXFTdG10KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVTdGF0c1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9D cmVhdGVTdGF0aXN0aWNzU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3Jl YXRlU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJl ZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUZvcmVpZ25UYWJsZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9DcmVhdGVGb3JlaWduVGFibGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2Ug VF9DcmVhdGVUYWJsZUFzU3RtdDoJLyogQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXICovCisJCQly ZXR1cm4gZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdF92YW5pbGxhKG9iamVjdElkLCBwYXJzZXRy ZWUpOworCisJCWNhc2UgVF9DcmVhdGVUcmFuc2Zvcm1TdG10OgorCQkJcmV0dXJuIGRlcGFyc2Vf Q3JlYXRlVHJhbnNmb3JtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3Jl YXRlVHJpZ1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVUcmlnU3RtdChvYmplY3RJZCwg cGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlVXNlck1hcHBpbmdTdG10OgorCQkJcmV0dXJu IGRlcGFyc2VfQ3JlYXRlVXNlck1hcHBpbmdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJ CWNhc2UgVF9EZWZpbmVTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJICBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7 CisKKwkJY2FzZSBUX0luZGV4U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0luZGV4U3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgorCQkJcmV0 dXJuIGRlcGFyc2VfUmVmcmVzaE1hdFZpZXdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJ CWNhc2UgVF9SZW5hbWVTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfUmVuYW1lU3RtdChjbWQtPmQu c2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX1J1bGVTdG10OgorCQkJcmV0 dXJuIGRlcGFyc2VfUnVsZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX1Zp ZXdTdG10OgkJLyogQ1JFQVRFIFZJRVcgKi8KKwkJCXJldHVybiBkZXBhcnNlX1ZpZXdTdG10KG9i amVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9TZWNMYWJlbFN0bXQ6CisJCQlyZXR1cm4g ZGVwYXJzZV9TZWNMYWJlbFN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUpOwor CisJCWRlZmF1bHQ6CisJCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5cGUgaW4gZGVw YXJzZSBjb21tYW5kOiAlZCIsCisJCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisJfQor CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUg ZGVwYXJzaW5nLgorICoKKyAqIERlYWwgd2l0aCBhbGwgdGhlIHRhYmxlIGVsZW1lbnRzIChjb2x1 bW5zIGFuZCBjb25zdHJhaW50cykuCisgKgorICogTm90ZSB3ZSBpZ25vcmUgY29uc3RyYWludHMg aW4gdGhlIHBhcnNlIG5vZGUgaGVyZTsgdGhleSBhcmUgZXh0cmFjdGVkIGZyb20KKyAqIHN5c3Rl bSBjYXRhbG9ncyBpbnN0ZWFkLgorICovCitzdGF0aWMgTGlzdCAqCitkZXBhcnNlX1RhYmxlRWxl bWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWxlbWVudHMsIExpc3QgKmRwY29u dGV4dCwKKwkJCQkJICBib29sIHR5cGVkLCBib29sIGNvbXBvc2l0ZSkKK3sKKwlMaXN0CSAgICpl bGVtZW50cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIHRhYmxlRWxl bWVudHMpCisJeworCQlOb2RlCSAgICplbHQgPSAoTm9kZSAqKSBsZmlyc3QobGMpOworCisJCXN3 aXRjaCAobm9kZVRhZyhlbHQpKQorCQl7CisJCQljYXNlIFRfQ29sdW1uRGVmOgorCQkJCXsKKwkJ CQkJT2JqVHJlZSAgICAqdHJlZTsKKworCQkJCQl0cmVlID0gdHlwZWQgPworCQkJCQkJZGVwYXJz ZV9Db2x1bW5EZWZfdHlwZWQocmVsYXRpb24sIGRwY29udGV4dCwKKwkJCQkJCQkJCQkJCShDb2x1 bW5EZWYgKikgZWx0KSA6CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZihyZWxhdGlvbiwgZHBjb250 ZXh0LAorCQkJCQkJCQkJCSAgY29tcG9zaXRlLCAoQ29sdW1uRGVmICopIGVsdCwKKwkJCQkJCQkJ CQkgIGZhbHNlLCBOVUxMKTsKKwkJCQkJaWYgKHRyZWUgIT0gTlVMTCkKKwkJCQkJCWVsZW1lbnRz ID0gbGFwcGVuZChlbGVtZW50cywgbmV3X29iamVjdF9vYmplY3QodHJlZSkpOworCQkJCX0KKwkJ CQlicmVhazsKKwkJCWNhc2UgVF9Db25zdHJhaW50OgorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoK KwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBub2RlIHR5cGUgJWQiLCBub2RlVGFnKGVsdCkpOwor CQl9CisJfQorCisJcmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICogV29ya2hvcnNlIHRvIGRl cGFyc2UgYSBDb2xsZWN0ZWRDb21tYW5kLgorICovCitjaGFyICoKK2RlcGFyc2VfdXRpbGl0eV9j b21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpCit7CisJT3Zl cnJpZGVTZWFyY2hQYXRoICpvdmVycmlkZVBhdGg7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJ TWVtb3J5Q29udGV4dCB0bXBjeHQ7CisJT2JqVHJlZSAgICAqdHJlZTsKKwljaGFyCSAgICpjb21t YW5kID0gTlVMTDsKKwlTdHJpbmdJbmZvRGF0YSBzdHI7CisKKwkvKgorCSAqIEFsbG9jYXRlIGV2 ZXJ5dGhpbmcgZG9uZSBieSB0aGUgZGVwYXJzaW5nIHJvdXRpbmVzIGludG8gYSB0ZW1wIGNvbnRl eHQsCisJICogdG8gYXZvaWQgaGF2aW5nIHRvIHNwcmlua2xlIHRoZW0gd2l0aCBtZW1vcnkgaGFu ZGxpbmcgY29kZSwgYnV0CisJICogYWxsb2NhdGUgdGhlIG91dHB1dCBTdHJpbmdJbmZvIGJlZm9y ZSBzd2l0Y2hpbmcuCisJICovCisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisJdG1wY3h0ID0gQWxs b2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkgICAiZGVw YXJzZSBjdHgiLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01JTlNJWkUsCisJCQkJCQkJ CSAgIEFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFV TFRfTUFYU0laRSk7CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGN4dCk7CisK KwkvKgorCSAqIE1hbnkgcm91dGluZXMgdW5kZXJseWluZyB0aGlzIG9uZSB3aWxsIGludm9rZSBy dWxldXRpbHMuYyBmdW5jdGlvbmFsaXR5CisJICogdG8gb2J0YWluIGRlcGFyc2VkIHZlcnNpb25z IG9mIGV4cHJlc3Npb25zLiAgSW4gc3VjaCByZXN1bHRzLCB3ZSB3YW50CisJICogYWxsIG9iamVj dCBuYW1lcyB0byBiZSBxdWFsaWZpZWQsIHNvIHRoYXQgcmVzdWx0cyBhcmUgInBvcnRhYmxlIiB0 bworCSAqIGVudmlyb25tZW50cyB3aXRoIGRpZmZlcmVudCBzZWFyY2hfcGF0aCBzZXR0aW5ncy4g IFJhdGhlciB0aGFuIGluamVjdAorCSAqIHdoYXQgd291bGQgYmUgcmVwZXRpdGl2ZSBjYWxscyB0 byBvdmVycmlkZSBzZWFyY2ggcGF0aCBhbGwgb3ZlciB0aGUKKwkgKiBwbGFjZSwgd2UgZG8gaXQg Y2VudHJhbGx5IGhlcmUuCisJICovCisJb3ZlcnJpZGVQYXRoID0gR2V0T3ZlcnJpZGVTZWFyY2hQ YXRoKEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKKwlvdmVycmlkZVBhdGgtPnNjaGVtYXMgPSBOSUw7 CisJb3ZlcnJpZGVQYXRoLT5hZGRDYXRhbG9nID0gZmFsc2U7CisJb3ZlcnJpZGVQYXRoLT5hZGRU ZW1wID0gdHJ1ZTsKKwlQdXNoT3ZlcnJpZGVTZWFyY2hQYXRoKG92ZXJyaWRlUGF0aCk7CisKKwl2 ZXJib3NlID0gdmVyYm9zZV9tb2RlOworCisJc3dpdGNoIChjbWQtPnR5cGUpCisJeworCQljYXNl IFNDVF9TaW1wbGU6CisJCQl0cmVlID0gZGVwYXJzZV9zaW1wbGVfY29tbWFuZChjbWQpOworCQkJ YnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyVGFibGU6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlclJl bGF0aW9uKGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfR3JhbnQ6CisJCQl0cmVlID0gZGVw YXJzZV9HcmFudFN0bXQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9BbHRlck9wRmFtaWx5 OgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJPcEZhbWlseShjbWQpOworCQkJYnJlYWs7CisJCWNh c2UgU0NUX0NyZWF0ZU9wQ2xhc3M6CisJCQl0cmVlID0gZGVwYXJzZV9DcmVhdGVPcENsYXNzU3Rt dChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyRGVmYXVsdFByaXZpbGVnZXM6CisJ CQl0cmVlID0gZGVwYXJzZV9BbHRlckRlZmF1bHRQcml2aWxlZ2VzU3RtdChjbWQpOworCQkJYnJl YWs7CisJCWNhc2UgU0NUX0FsdGVyVFNDb25maWc6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlclRT Q29uZmlndXJhdGlvblN0bXQoY21kKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhF UlJPUiwgInVuZXhwZWN0ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQiLCBjbWQtPnR5cGUpOworCX0K KworCVBvcE92ZXJyaWRlU2VhcmNoUGF0aCgpOworCisJaWYgKHRyZWUpCisJeworCQlKc29uYgkg ICAqanNvbmI7CisKKwkJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHRyZWUpOworCQljb21tYW5k ID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09OQl9FU1RJTUFURURfTEVO KTsKKwl9CisKKwkvKgorCSAqIENsZWFuIHVwLiAgTm90ZSB0aGF0IHNpbmNlIHdlIGNyZWF0ZWQg dGhlIFN0cmluZ0luZm8gaW4gdGhlIGNhbGxlcidzCisJICogY29udGV4dCwgdGhlIG91dHB1dCBz dHJpbmcgaXMgbm90IGRlbGV0ZWQgaGVyZS4KKwkgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN4dCk7CisKKwlyZXR1cm4gY29tbWFu ZDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLmZiZDNiNTRlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfanNvbi5jCkBAIC0wLDAgKzEsNzc2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBkZGxfanNvbi5jCisgKgkgIEpTT04gY29kZSByZWxhdGVkIHRvIERETCBjb21tYW5kIGRl cGFyc2luZworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVO VElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCisgKgorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAi bGliL3N0cmluZ2luZm8uaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUg InV0aWxzL2pzb25iLmgiCisKKworLyoKKyAqIENvbnZlcnNpb24gc3BlY2lmaWVyIHdoaWNoIGRl dGVybWluZXMgaG93IHdlIGV4cGFuZCB0aGUgSlNPTiBlbGVtZW50IGludG8KKyAqIHN0cmluZy4K KyAqLwordHlwZWRlZiBlbnVtCit7CisJU3BlY1R5cGVOYW1lLAorCVNwZWNPcGVyYXRvck5hbWUs CisJU3BlY0RvdHRlZE5hbWUsCisJU3BlY1N0cmluZywKKwlTcGVjTnVtYmVyLAorCVNwZWNTdHJp bmdMaXRlcmFsLAorCVNwZWNJZGVudGlmaWVyLAorCVNwZWNSb2xlCit9IGNvbnZTcGVjaWZpZXI7 CisKKy8qCisgKiBBIHRlcm5hcnkgdmFsdWUgdGhhdCByZXByZXNlbnRzIGEgYm9vbGVhbiB0eXBl IEpzb25iVmFsdWUuCisgKi8KK3R5cGVkZWYgZW51bQoreworCXR2X2Fic2VudCwKKwl0dl90cnVl LAorCXR2X2ZhbHNlCit9CQkJanNvbl90cml2YWx1ZTsKKworc3RhdGljIGJvb2wgZXhwYW5kX29u ZV9qc29uYl9lbGVtZW50KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkJCQkJCSBK c29uYlZhbHVlICpqc29udmFsLCBjb252U3BlY2lmaWVyIHNwZWNpZmllciwKKwkJCQkJCQkJCSBj b25zdCBjaGFyICpmbXQpOworc3RhdGljIHZvaWQgZXhwYW5kX2pzb25iX2FycmF5KFN0cmluZ0lu Zm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkJCQkgICBKc29uYlZhbHVlICpqc29uYXJyLCBjaGFy ICphcnJheXNlcCwKKwkJCQkJCQkgICBjb252U3BlY2lmaWVyIHNwZWNpZmllciwgY29uc3QgY2hh ciAqZm10KTsKK3N0YXRpYyB2b2lkIGZtdHN0cl9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpOwor Y2hhciAqZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoY2hhciAqanNvbmIpOworCisvKgorICog R2l2ZW4gYSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZl biBrZXkgbmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVyIHRoYW4gamJ2Qm9v bCwgYW4gZXJyb3IgaXMgcmFpc2VkLiBJZiBpdCBkb2Vzbid0CisgKiBleGlzdCwgdHZfYWJzZW50 IGlzIHJldHVybmVkOyBvdGhlcndpc2UgcmV0dXJuIHRoZSBhY3R1YWwganNvbl90cml2YWx1ZS4K KyAqLworc3RhdGljIGpzb25fdHJpdmFsdWUKK2ZpbmRfYm9vbF9pbl9qc29uYmNvbnRhaW5lcihK c29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBjaGFyICprZXluYW1lKQoreworCUpzb25iVmFsdWUJ a2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWpzb25fdHJpdmFsdWUgcmVzdWx0OworCisJa2V5 LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXku dmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1 ZUZyb21Db250YWluZXIoY29udGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOwor CWlmICh2YWx1ZSA9PSBOVUxMKQorCQlyZXR1cm4gdHZfYWJzZW50OworCWlmICh2YWx1ZS0+dHlw ZSAhPSBqYnZCb29sKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5v dCBvZiB0eXBlIGJvb2xlYW4iLAorCQkJCQkJa2V5bmFtZSkpKTsKKwlyZXN1bHQgPSB2YWx1ZS0+ dmFsLmJvb2xlYW4gPyB0dl90cnVlIDogdHZfZmFsc2U7CisJcGZyZWUodmFsdWUpOworCisJcmV0 dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWluZXIsIGZpbmQgdGhl IEpzb25iVmFsdWUgd2l0aCB0aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisgKiBJZiBpdCdzIG9m IGEgdHlwZSBvdGhlciB0aGFuIGpidlN0cmluZywgYW4gZXJyb3IgaXMgcmFpc2VkLiAgSWYgaXQg ZG9lc24ndAorICogZXhpc3QsIGFuIGVycm9yIGlzIHJhaXNlZCB1bmxlc3MgbWlzc2luZ19vazsg b3RoZXJ3aXNlIHJldHVybiBOVUxMLgorICoKKyAqIElmIGl0IGV4aXN0cyBhbmQgaXMgYSBzdHJp bmcsIGEgZnJlc2hseSBwYWxsb2MnZWQgY29weSBpcyByZXR1cm5lZC4KKyAqCisgKiBJZiAqbGVu Z3RoIGlzIG5vdCBOVUxMLCBpdCBpcyBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgor ICovCitzdGF0aWMgY2hhciAqCitmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihKc29uYkNv bnRhaW5lciAqY29udGFpbmVyLCBjaGFyICprZXluYW1lLAorCQkJCQkJCSAgYm9vbCBtaXNzaW5n X29rLCBpbnQgKmxlbmd0aCkKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1 ZTsKKwljaGFyCSAgICpzdHI7CisKKwkvKiBYWFggdmVyaWZ5IHRoYXQgdGhpcyBpcyBhbiBvYmpl Y3QsIG5vdCBhbiBhcnJheSAqLworCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5z dHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFt ZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLAorCQkJ CQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2YWx1ZSA9PSBOVUxMKQorCXsKKwkJaWYg KG1pc3Npbmdfb2spCisJCQlyZXR1cm4gTlVMTDsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJtaXNz aW5nIGVsZW1lbnQgXCIlc1wiIGluIEpTT04gb2JqZWN0Iiwga2V5bmFtZSkpKTsKKwl9CisKKwlp ZiAodmFsdWUtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1l bnQgXCIlc1wiIGlzIG5vdCBvZiB0eXBlIHN0cmluZyIsIGtleW5hbWUpKSk7CisKKwlzdHIgPSBw bnN0cmR1cCh2YWx1ZS0+dmFsLnN0cmluZy52YWwsIHZhbHVlLT52YWwuc3RyaW5nLmxlbik7CisJ aWYgKGxlbmd0aCkKKwkJKmxlbmd0aCA9IHZhbHVlLT52YWwuc3RyaW5nLmxlbjsKKwlwZnJlZSh2 YWx1ZSk7CisJcmV0dXJuIHN0cjsKK30KKworI2RlZmluZSBBRFZBTkNFX1BBUlNFX1BPSU5URVIo cHRyLGVuZF9wdHIpIFwKKwlkbyB7IFwKKwkJaWYgKCsrKHB0cikgPj0gKGVuZF9wdHIpKSBcCisJ CQllcmVwb3J0KEVSUk9SLCBcCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLCBcCisJCQkJCSBlcnJtc2coInVudGVybWluYXRlZCBmb3JtYXQgc3BlY2lmaWVy IikpKTsgXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBkZXBh cnNlX2RkbF9qc29uX3RvX3N0cmluZy4KKyAqCisgKiBGaW5kIHRoZSAiZm10IiBlbGVtZW50IGlu IHRoZSBnaXZlbiBjb250YWluZXIsIGFuZCBleHBhbmQgaXQgaW50byB0aGUKKyAqIHByb3ZpZGVk IFN0cmluZ0luZm8uCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfZm10X3JlY3Vyc2l2ZShKc29u YkNvbnRhaW5lciAqY29udGFpbmVyLCBTdHJpbmdJbmZvIGJ1ZikKK3sKKwlKc29uYlZhbHVlCWtl eTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwljb25zdCBjaGFyICpjcDsKKwljb25zdCBjaGFyICpz dGFydF9wdHI7CisJY29uc3QgY2hhciAqZW5kX3B0cjsKKwlpbnQJCQlsZW47CisKKwlzdGFydF9w dHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihjb250YWluZXIsICJmbXQiLCBmYWxz ZSwgJmxlbik7CisJZW5kX3B0ciA9IHN0YXJ0X3B0ciArIGxlbjsKKworCWZvciAoY3AgPSBzdGFy dF9wdHI7IGNwIDwgZW5kX3B0cjsgY3ArKykKKwl7CisJCWNvbnZTcGVjaWZpZXIgc3BlY2lmaWVy OworCQlib29sCQlpc19hcnJheSA9IGZhbHNlOworCQljaGFyCSAgICpwYXJhbSA9IE5VTEw7CisJ CWNoYXIJICAgKmFycmF5c2VwID0gTlVMTDsKKworCQlpZiAoKmNwICE9ICclJykKKwkJeworCQkJ YXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQor CisKKwkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKworCQkvKiBFYXN5IGNh c2U6ICUlIG91dHB1dHMgYSBzaW5nbGUgJSAqLworCQlpZiAoKmNwID09ICclJykKKwkJeworCQkJ YXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQor CisJCS8qCisJCSAqIFNjYW4gdGhlIG1hbmRhdG9yeSBlbGVtZW50IG5hbWUuICBBbGxvdyBmb3Ig YW4gYXJyYXkgc2VwYXJhdG9yCisJCSAqICh3aGljaCBtYXkgYmUgdGhlIGVtcHR5IHN0cmluZykg dG8gYmUgc3BlY2lmaWVkIGFmdGVyIGEgY29sb24uCisJCSAqLworCQlpZiAoKmNwID09ICd7JykK KwkJeworCQkJU3RyaW5nSW5mb0RhdGEgcGFyYnVmOworCQkJU3RyaW5nSW5mb0RhdGEgYXJyYXlz ZXBidWY7CisJCQlTdHJpbmdJbmZvCWFwcGVuZFRvOworCisJCQlpbml0U3RyaW5nSW5mbygmcGFy YnVmKTsKKwkJCWFwcGVuZFRvID0gJnBhcmJ1ZjsKKworCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVS KGNwLCBlbmRfcHRyKTsKKwkJCWZvciAoOyBjcCA8IGVuZF9wdHI7KQorCQkJeworCQkJCWlmICgq Y3AgPT0gJzonKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm91bmQgYXJyYXkgc2VwYXJhdG9y IGRlbGltaXRlcjsgZWxlbWVudCBuYW1lIGlzIG5vdworCQkJCQkgKiBjb21wbGV0ZSwgc3RhcnQg ZmlsbGluZyB0aGUgc2VwYXJhdG9yLgorCQkJCQkgKi8KKwkJCQkJaW5pdFN0cmluZ0luZm8oJmFy cmF5c2VwYnVmKTsKKwkJCQkJYXBwZW5kVG8gPSAmYXJyYXlzZXBidWY7CisJCQkJCWlzX2FycmF5 ID0gdHJ1ZTsKKwkJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCQkJ Y29udGludWU7CisJCQkJfQorCisJCQkJaWYgKCpjcCA9PSAnfScpCisJCQkJeworCQkJCQlBRFZB TkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJ YXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhhcHBlbmRUbywgKmNwKTsKKwkJCQlBRFZBTkNFX1BB UlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJfQorCQkJcGFyYW0gPSBwYXJidWYuZGF0YTsK KwkJCWlmIChpc19hcnJheSkKKwkJCQlhcnJheXNlcCA9IGFycmF5c2VwYnVmLmRhdGE7CisJCX0K KwkJaWYgKHBhcmFtID09IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygibWlzc2luZyBj b252ZXJzaW9uIG5hbWUgaW4gY29udmVyc2lvbiBzcGVjaWZpZXIiKSkpOworCisJCXN3aXRjaCAo KmNwKQorCQl7CisJCQljYXNlICdJJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjSWRlbnRpZmllcjsK KwkJCQlicmVhazsKKwkJCWNhc2UgJ0QnOgorCQkJCXNwZWNpZmllciA9IFNwZWNEb3R0ZWROYW1l OworCQkJCWJyZWFrOworCQkJY2FzZSAncyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1N0cmluZzsK KwkJCQlicmVhazsKKwkJCWNhc2UgJ0wnOgorCQkJCXNwZWNpZmllciA9IFNwZWNTdHJpbmdMaXRl cmFsOworCQkJCWJyZWFrOworCQkJY2FzZSAnVCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1R5cGVO YW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAnTyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY09wZXJh dG9yTmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ24nOgorCQkJCXNwZWNpZmllciA9IFNwZWNO dW1iZXI7CisJCQkJYnJlYWs7CisJCQljYXNlICdSJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjUm9s ZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygi aW52YWxpZCBjb252ZXJzaW9uIHNwZWNpZmllciBcIiVjXCIiLCAqY3ApKSk7CisJCX0KKworCQkv KgorCQkgKiBPYnRhaW4gdGhlIGVsZW1lbnQgdG8gYmUgZXhwYW5kZWQuCisJCSAqLworCQlrZXku dHlwZSA9IGpidlN0cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcudmFsID0gcGFyYW07CisJCWtleS52 YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihwYXJhbSk7CisKKwkJdmFsdWUgPSBmaW5kSnNvbmJWYWx1 ZUZyb21Db250YWluZXIoY29udGFpbmVyLCBKQl9GT0JKRUNULCAma2V5KTsKKworCQkvKgorCQkg KiBFeHBhbmQgdGhlIGRhdGEgKHBvc3NpYmx5IGFuIGFycmF5KSBpbnRvIHRoZSBvdXRwdXQgU3Ry aW5nSW5mby4KKwkJICovCisJCWlmIChpc19hcnJheSkKKwkJCWV4cGFuZF9qc29uYl9hcnJheShi dWYsIHBhcmFtLCB2YWx1ZSwgYXJyYXlzZXAsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwkJZWxz ZQorCQkJZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KGJ1ZiwgcGFyYW0sIHZhbHVlLCBzcGVjaWZp ZXIsIHN0YXJ0X3B0cik7CisJfQorfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBh IHF1b3RlZCBpZGVudGlmaWVyLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuCisg Ki8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9pZGVudGlmaWVyKFN0cmluZ0luZm8gYnVm LCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKworCUFzc2VydChqc29u dmFsLT50eXBlID09IGpidlN0cmluZyk7CisKKwlzdHIgPSBwbnN0cmR1cChqc29udmFsLT52YWwu c3RyaW5nLnZhbCwganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7Cit9CisKKy8q CisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgZG90LXNlcGFyYXRlZC1uYW1lLiAgVGhlIHZh bHVlIG11c3QgYmUgb2YgdHlwZQorICogYmluYXJ5IGFuZCBtYXkgY29udGFpbiBlbGVtZW50cyAi c2NoZW1hbmFtZSIgKG9wdGlvbmFsKSwgIm9iam5hbWUiCisgKiAobWFuZGF0b3J5KSwgImF0dHJu YW1lIiAob3B0aW9uYWwpLiAgRG91YmxlIHF1b3RlcyBhcmUgYWRkZWQgdG8gZWFjaCBlbGVtZW50 CisgKiBhcyBuZWNlc3NhcnksIGFuZCBkb3Qgc2VwYXJhdG9ycyB3aGVyZSBuZWVkZWQuCisgKgor ICogT25lIGRheSB3ZSBtaWdodCBuZWVkIGEgImNhdGFsb2ciIGVsZW1lbnQgYXMgd2VsbCwgYnV0 IG5vIGN1cnJlbnQgdXNlIGNhc2UKKyAqIG5lZWRzIHRoYXQuCisgKi8KK3N0YXRpYyB2b2lkCitl eHBhbmRfanNvbnZhbF9kb3R0ZWRuYW1lKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29u dmFsKQoreworCWNoYXIJICAgKnN0cjsKKworCUFzc2VydChqc29udmFsLT50eXBlID09IGpidkJp bmFyeSk7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52 YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJInNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwlp ZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4iLCBxdW90ZV9pZGVudGlm aWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0KKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pz b25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkib2JqbmFt ZSIsIGZhbHNlLCBOVUxMKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRl bnRpZmllcihzdHIpKTsKKwlwZnJlZShzdHIpOworCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNv bmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJhdHRybmFt ZSIsIHRydWUsIE5VTEwpOworCWlmIChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1Ziwg Ii4lcyIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorfQorCisv KgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhIHR5cGUgbmFtZS4KKyAqLworc3RhdGljIHZv aWQKK2V4cGFuZF9qc29udmFsX3R5cGVuYW1lKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpq c29udmFsKQoreworCWNoYXIJICAgKnNjaGVtYSA9IE5VTEw7CisJY2hhcgkgICAqdHlwZW5hbWU7 CisJY2hhcgkgICAqdHlwbW9kc3RyOworCWpzb25fdHJpdmFsdWUgaXNfYXJyYXk7CisJY2hhcgkg ICAqYXJyYXlfZGVjb3I7CisKKwkvKgorCSAqIFdlIG9taXQgc2NoZW1hLXF1YWxpZnlpbmcgdGhl IG91dHB1dCBuYW1lIGlmIHRoZSBzY2hlbWEgZWxlbWVudCBpcworCSAqIGVpdGhlciB0aGUgZW1w dHkgc3RyaW5nIG9yIE5VTEw7IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhvc2UgdHdvIGNhc2Vz CisJICogaXMgdGhhdCBpbiB0aGUgbGF0dGVyIHdlIHF1b3RlIHRoZSB0eXBlIG5hbWUsIGluIHRo ZSBmb3JtZXIgd2UgZG9uJ3QuCisJICogVGhpcyBhbGxvd3MgZm9yIHR5cGVzIHdpdGggc3BlY2lh bCB0eXBtb2QgbmVlZHMsIHN1Y2ggYXMgaW50ZXJ2YWwgYW5kCisJICogdGltZXN0YW1wIChzZWUg Zm9ybWF0X3R5cGVfZGV0YWlsZWQpLCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIGFsbG93aW5nCisJ ICogZm9yIHRoZSBzY2hlbWEgbmFtZSB0byBiZSBvbWl0dGVkIGZyb20gdHlwZSBuYW1lcyB0aGF0 IHJlcXVpcmUgcXVvdGVzCisJICogYnV0IGFyZSB0byBiZSBvYnRhaW5lZCBmcm9tIGEgdXNlciBz Y2hlbWEuCisJICovCisKKwlzY2hlbWEgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihq c29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJICAgInNjaGVtYW5hbWUiLCB0cnVl LCBOVUxMKTsKKwl0eXBlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252 YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICJ0eXBlbmFtZSIsIGZhbHNlLCBOVUxM KTsKKwl0eXBtb2RzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52 YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSAgInR5cG1vZCIsIHRydWUsIE5VTEwpOworCWlz X2FycmF5ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnku ZGF0YSwKKwkJCQkJCQkJCQkgICAidHlwYXJyYXkiKTsKKwlzd2l0Y2ggKGlzX2FycmF5KQorCXsK KwkJY2FzZSB0dl90cnVlOgorCQkJYXJyYXlfZGVjb3IgPSAiW10iOworCQkJYnJlYWs7CisKKwkJ Y2FzZSB0dl9mYWxzZToKKwkJCWFycmF5X2RlY29yID0gIiI7CisJCQlicmVhazsKKworCQljYXNl IHR2X2Fic2VudDoKKwkJZGVmYXVsdDoKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJtaXNzaW5n IHR5cGFycmF5IGVsZW1lbnQiKSkpOworCX0KKworCWlmIChzY2hlbWEgPT0gTlVMTCkKKwkJYXBw ZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHF1b3RlX2lkZW50aWZpZXIodHlwZW5hbWUpKTsKKwll bHNlIGlmIChzY2hlbWFbMF0gPT0gJ1wwJykKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIs IHR5cGVuYW1lKTsJLyogU3BlY2lhbCB0eXBtb2QgbmVlZHMgKi8KKwllbHNlCisJCWFwcGVuZFN0 cmluZ0luZm8oYnVmLCAiJXMuJXMiLCBxdW90ZV9pZGVudGlmaWVyKHNjaGVtYSksCisJCQkJCQkg cXVvdGVfaWRlbnRpZmllcih0eXBlbmFtZSkpOworCisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIl cyVzIiwgdHlwbW9kc3RyID8gdHlwbW9kc3RyIDogIiIsIGFycmF5X2RlY29yKTsKKwlwZnJlZShz Y2hlbWEpOworCXBmcmVlKHR5cGVuYW1lKTsKKwlwZnJlZSh0eXBtb2RzdHIpOworfQorCisvKgor ICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhbiBvcGVyYXRvciBuYW1lLgorICovCitzdGF0aWMg dm9pZAorZXhwYW5kX2pzb252YWxfb3BlcmF0b3IoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUg Kmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNv bmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJzY2hlbWFu YW1lIiwgdHJ1ZSwgTlVMTCk7CisJLyogU2NoZW1hIG1pZ2h0IGJlIE5VTEwgb3IgZW1wdHkgKi8K KwlpZiAoc3RyICE9IE5VTEwgJiYgc3RyWzBdICE9ICdcMCcpCisJeworCQlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJ fQorCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJp bmFyeS5kYXRhLAorCQkJCQkJCQkJCSJvYmpuYW1lIiwgZmFsc2UsIE5VTEwpOworCisJaWYgKHN0 cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHIpOworCQlwZnJlZShzdHIp OworCX0KK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMgYSBzdHJpbmcuICBUaGUg dmFsdWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBvZgorICogdHlwZSBCaW5hcnkuICBJbiB0 aGUgbGF0dGVyIGNhc2UsIGl0IG11c3QgY29udGFpbiBhICJmbXQiIGVsZW1lbnQgd2hpY2ggd2ls bAorICogYmUgcmVjdXJzaXZlbHkgZXhwYW5kZWQ7IGFsc28sIGlmIHRoZSBvYmplY3QgY29udGFp bnMgYW4gZWxlbWVudCAicHJlc2VudCIKKyAqIGFuZCBpdCBpcyBzZXQgdG8gZmFsc2UsIHRoZSBl eHBhbnNpb24gaXMgdGhlIGVtcHR5IHN0cmluZy4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIG5v IGFjdHVhbCBleHBhbnNpb24gd2FzIG1hZGUgZHVlIHRvIHRoZSAicHJlc2VudCIgZmxhZworICog YmVpbmcgc2V0IHRvICJmYWxzZSIuCisgKgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSB0 byBjaGVjayBqc29udmFsIGlzIG9mIHR5cGUgamJ2U3RyaW5nIG9yIGpidkJpbmFyeS4KKyAqLwor c3RhdGljIGJvb2wKK2V4cGFuZF9qc29udmFsX3N0cmluZyhTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJW YWx1ZSAqanNvbnZhbCkKK3sKKwlpZiAoanNvbnZhbC0+dHlwZSA9PSBqYnZTdHJpbmcpCisJewor CQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwganNvbnZhbC0+dmFsLnN0cmluZy52YWwsCisJ CQkJCQkJICAganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCX0KKwllbHNlIGlmIChqc29udmFs LT50eXBlID09IGpidkJpbmFyeSkKKwl7CisJCWpzb25fdHJpdmFsdWUgcHJlc2VudDsKKworCQlw cmVzZW50ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnku ZGF0YSwKKwkJCQkJCQkJCQkJICAicHJlc2VudCIpOworCisJCS8qCisJCSAqIElmICJwcmVzZW50 IiBpcyBzZXQgdG8gZmFsc2UsIHRoaXMgZWxlbWVudCBleHBhbmRzIHRvIGVtcHR5OworCQkgKiBv dGhlcndpc2UgKGVpdGhlciB0cnVlIG9yIGFic2VudCksIGZhbGwgdGhyb3VnaCB0byBleHBhbmQg ImZtdCIuCisJCSAqLworCQlpZiAocHJlc2VudCA9PSB0dl9mYWxzZSkKKwkJCXJldHVybiBmYWxz ZTsKKworCQlleHBhbmRfZm10X3JlY3Vyc2l2ZShqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsIGJ1 Zik7CisJfQorCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8q CisgKiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGEgc3RyaW5nIGxpdGVyYWwuCisgKi8KK3N0YXRp YyB2b2lkCitleHBhbmRfanNvbnZhbF9zdHJsaXQoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUg Kmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCVN0cmluZ0luZm9EYXRhIGRxZGVsaW07CisJ c3RhdGljIGNvbnN0IGNoYXIgZHFzdWZmaXhlc1tdID0gIl9YWVpaWVhfIjsKKwlpbnQJCQlkcW5l eHRjaGFyID0gMDsKKworCXN0ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBq c29udmFsLT52YWwuc3RyaW5nLmxlbik7CisKKwkvKiBFYXN5IGNhc2U6IGlmIHRoZXJlIGFyZSBu byAnIGFuZCBubyBcLCBqdXN0IHVzZSBhIHNpbmdsZSBxdW90ZSAqLworCWlmIChzdHJwYnJrKHN0 ciwgIlwnXFwiKSA9PSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICInJXMnIiwg c3RyKTsKKwkJcGZyZWUoc3RyKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE90aGVyd2lzZSBuZWVk IHRvIGZpbmQgYSB1c2VmdWwgZG9sbGFyLXF1b3RlIGRlbGltaXRlciAqLworCWluaXRTdHJpbmdJ bmZvKCZkcWRlbGltKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkcWRlbGltLCAiJCIpOwor CXdoaWxlIChzdHJzdHIoc3RyLCBkcWRlbGltLmRhdGEpICE9IE5VTEwpCisJeworCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcigmZHFkZWxpbSwgZHFzdWZmaXhlc1tkcW5leHRjaGFyKytdKTsKKwkJZHFu ZXh0Y2hhciA9IGRxbmV4dGNoYXIgJSAoc2l6ZW9mKGRxc3VmZml4ZXMpIC0gMSk7CisJfQorCS8q IEFkZCB0cmFpbGluZyAkICovCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRxZGVsaW0sICckJyk7 CisKKwkvKiBBbmQgZmluYWxseSBwcm9kdWNlIHRoZSBxdW90ZWQgbGl0ZXJhbCBpbnRvIHRoZSBv dXRwdXQgU3RyaW5nSW5mbyAqLworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyVzIiwgZHFk ZWxpbS5kYXRhLCBzdHIsIGRxZGVsaW0uZGF0YSk7CisJcGZyZWUoZHFkZWxpbS5kYXRhKTsKKwlw ZnJlZShzdHIpOworfQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhbiBpbnRlZ2Vy IHF1YW50aXR5LgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfbnVtYmVyKFN0cmlu Z0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cmRhdHVtOwor CisJc3RyZGF0dW0gPSBEYXR1bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxsMShudW1lcmlj X291dCwKKwkJCQkJCQkJCQkJCSAgIE51bWVyaWNHZXREYXR1bShqc29udmFsLT52YWwubnVtZXJp YykpKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwgc3RyZGF0dW0pOworCXBmcmVlKHN0 cmRhdHVtKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMgYSByb2xlIG5hbWUu ICBJZiB0aGUgaXNfcHVibGljIGVsZW1lbnQgaXMgc2V0IHRvCisgKiB0cnVlLCBQVUJMSUMgaXMg ZXhwYW5kZWQgKG5vIHF1b3Rlcyk7IG90aGVyd2lzZSwgZXhwYW5kIHRoZSBnaXZlbiByb2xlIG5h bWUsCisgKiBxdW90aW5nIGFzIGFuIGlkZW50aWZpZXIuCisgKi8KK3N0YXRpYyB2b2lkCitleHBh bmRfanNvbnZhbF9yb2xlKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQorewor CWpzb25fdHJpdmFsdWUgaXNfcHVibGljOworCisJaXNfcHVibGljID0gZmluZF9ib29sX2luX2pz b25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJImlzX3B1 YmxpYyIpOworCWlmIChpc19wdWJsaWMgPT0gdHZfdHJ1ZSkKKwkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsICJQVUJMSUMiKTsKKwllbHNlCisJeworCQljaGFyCSAgICpyb2xlbmFtZTsKKwor CQlyb2xlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5i aW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJCSAicm9sZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJCWlm IChyb2xlbmFtZSkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lk ZW50aWZpZXIocm9sZW5hbWUpKTsKKwkJCXBmcmVlKHJvbGVuYW1lKTsKKwkJfQorCX0KK30KKwor LyoKKyAqIEV4cGFuZCBvbmUgSlNPTiBlbGVtZW50IGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZv IGFjY29yZGluZyB0byB0aGUKKyAqIGNvbnZlcnNpb24gc3BlY2lmaWVyLiAgVGhlIGVsZW1lbnQg dHlwZSBpcyB2YWxpZGF0ZWQsIGFuZCBhbiBlcnJvciBpcyByYWlzZWQKKyAqIGlmIGl0IGRvZXNu J3QgbWF0Y2ggd2hhdCB3ZSBleHBlY3QgZm9yIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllci4KKyAq CisgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIGFjdHVhbCBleHBhbnNpb24gd2FzIG1hZGUgKGR1ZSB0 byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJlaW5nIHNldCB0byAiZmFsc2UiIGluIGZvcm1hdHRl ZCBzdHJpbmcgZXhwYW5zaW9uKS4KKyAqLworc3RhdGljIGJvb2wKK2V4cGFuZF9vbmVfanNvbmJf ZWxlbWVudChTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sIEpzb25iVmFsdWUgKmpzb252YWws CisJCQkJCQkgY29udlNwZWNpZmllciBzcGVjaWZpZXIsIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwli b29sCQlyZXN1bHQgPSB0cnVlOworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7 CisKKwkvKiBJZiB3ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywgc2V0dXAgYW4gZXJlcG9y dCgpIGNvbnRleHQgY2FsbGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJc3FsZXJyY29udGV4dC5j YWxsYmFjayA9IGZtdHN0cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJyY29udGV4dC5hcmcgPSAo dm9pZCAqKSBmbXQ7CisJCXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0 YWNrOworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7CisJfQorCisJaWYg KCFqc29udmFsKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIG5vdCBmb3Vu ZCIsIHBhcmFtKSkpOworCisJc3dpdGNoIChzcGVjaWZpZXIpCisJeworCQljYXNlIFNwZWNJZGVu dGlmaWVyOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBvcnQo RVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUkgZWxlbWVudCBcIiVz XCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5k X2pzb252YWxfaWRlbnRpZmllcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBT cGVjRG90dGVkTmFtZToKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cnVjdCBmb3IgJSVEIGVsZW1l bnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJ CWV4cGFuZF9qc29udmFsX2RvdHRlZG5hbWUoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgU3BlY1N0cmluZzoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZyAmJgor CQkJCWpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJt c2coImV4cGVjdGVkIEpTT04gc3RyaW5nIG9yIHN0cnVjdCBmb3IgJSVzIGVsZW1lbnQgXCIlc1wi LCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCXJlc3VsdCA9 IGV4cGFuZF9qc29udmFsX3N0cmluZyhidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBTcGVjU3RyaW5nTGl0ZXJhbDoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZykK KwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBmb3IgJSVM IGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkp KTsKKwkJCWV4cGFuZF9qc29udmFsX3N0cmxpdChidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisK KwkJY2FzZSBTcGVjVHlwZU5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkp CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJ1Y3QgZm9yICUl VCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUp KSk7CisJCQlleHBhbmRfanNvbnZhbF90eXBlbmFtZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBTcGVjT3BlcmF0b3JOYW1lOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2 QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RydWN0 IGZvciAlJU8gZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFs LT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfb3BlcmF0b3IoYnVmLCBqc29udmFsKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgU3BlY051bWJlcjoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpi dk51bWVyaWMpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBudW1l cmljIGZvciAlJW4gZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29u dmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfbnVtYmVyKGJ1ZiwganNvbnZhbCk7CisJ CQlicmVhazsKKworCQljYXNlIFNwZWNSb2xlOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2 QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RydWN0 IGZvciAlJVIgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFs LT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfcm9sZShidWYsIGpzb252YWwpOworCQkJYnJl YWs7CisJfQorCisJaWYgKGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNvbnRl eHQucHJldmlvdXM7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogSXRlcmF0ZSBvbiB0 aGUgZWxlbWVudHMgb2YgYSBKU09OIGFycmF5LCBleHBhbmRpbmcgZWFjaCBvbmUgaW50byB0aGUg b3V0cHV0CisgKiBTdHJpbmdJbmZvIHBlciB0aGUgZ2l2ZW4gY29udmVyc2lvbiBzcGVjaWZpZXIs IHNlcGFyYXRlZCBieSB0aGUgZ2l2ZW4KKyAqIHNlcGFyYXRvci4KKyAqLworc3RhdGljIHZvaWQK K2V4cGFuZF9qc29uYl9hcnJheShTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJICAg SnNvbmJWYWx1ZSAqanNvbmFyciwgY2hhciAqYXJyYXlzZXAsIGNvbnZTcGVjaWZpZXIgc3BlY2lm aWVyLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlFcnJvckNvbnRleHRDYWxsYmFjayBz cWxlcnJjb250ZXh0OworCUpzb25iQ29udGFpbmVyICpjb250YWluZXI7CisJSnNvbmJJdGVyYXRv ciAqaXQ7CisJSnNvbmJWYWx1ZQl2OworCWludAkJCXR5cGU7CisJYm9vbAkJZmlyc3QgPSB0cnVl OworCVN0cmluZ0luZm9EYXRhIGFycmF5ZWxlbTsKKworCS8qIElmIHdlIHdlcmUgZ2l2ZW4gYSBm b3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxsYmFjayAqLworCWlm IChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vycm9yX2NhbGxi YWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJc3FsZXJyY29udGV4 dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3RhY2sg PSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAoanNvbmFyci0+dHlwZSAhPSBqYnZCaW5hcnkp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IGEgSlNPTiBhcnJh eSIsIHBhcmFtKSkpOworCisJY29udGFpbmVyID0ganNvbmFyci0+dmFsLmJpbmFyeS5kYXRhOwor CWlmICghSnNvbkNvbnRhaW5lcklzQXJyYXkoY29udGFpbmVyKSkKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJy bXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwlp bml0U3RyaW5nSW5mbygmYXJyYXllbGVtKTsKKworCWl0ID0gSnNvbmJJdGVyYXRvckluaXQoY29u dGFpbmVyKTsKKwl3aGlsZSAoKHR5cGUgPSBKc29uYkl0ZXJhdG9yTmV4dCgmaXQsICZ2LCB0cnVl KSkgIT0gV0pCX0RPTkUpCisJeworCQlpZiAodHlwZSA9PSBXSkJfRUxFTSkKKwkJeworCQkJcmVz ZXRTdHJpbmdJbmZvKCZhcnJheWVsZW0pOworCisJCQlpZiAoZXhwYW5kX29uZV9qc29uYl9lbGVt ZW50KCZhcnJheWVsZW0sIHBhcmFtLCAmdiwgc3BlY2lmaWVyLCBOVUxMKSkKKwkJCXsKKwkJCQlp ZiAoIWZpcnN0KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgYXJyYXlzZXApOwor CisJCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsIGFycmF5ZWxlbS5kYXRhLCBhcnJheWVs ZW0ubGVuKTsKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJfQorCQl9CisJfQorCisJaWYgKGZtdCkK KwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7Cit9CisKKy8q CisgKiBXb3JraG9yc2UgZm9yIGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kLgorICovCitjaGFy ICoKK2RlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25fc3RyKQoreworCURhdHVt CQlkOworCUpzb25iCSAgICpqc29uYjsKKwlTdHJpbmdJbmZvCWJ1ZiA9IChTdHJpbmdJbmZvKSBw YWxsb2MwKHNpemVvZihTdHJpbmdJbmZvRGF0YSkpOworCisJaW5pdFN0cmluZ0luZm8oYnVmKTsK KworCWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKGpzb25iX2luLCBQb2ludGVyR2V0RGF0dW0oanNv bl9zdHIpKTsKKwlqc29uYiA9IChKc29uYiAqKSBEYXR1bUdldFBvaW50ZXIoZCk7CisKKwlleHBh bmRfZm10X3JlY3Vyc2l2ZSgmanNvbmItPnJvb3QsIGJ1Zik7CisKKwlyZXR1cm4gYnVmLT5kYXRh OworfQorCisvKi0tLS0tLQorICogUmV0dXJucyBhIGZvcm1hdHRlZCBzdHJpbmcgZnJvbSBhIEpT T04gb2JqZWN0LgorICoKKyAqIFRoZSBzdGFydGluZyBwb2ludCBpcyB0aGUgZWxlbWVudCBuYW1l ZCAiZm10IiAod2hpY2ggbXVzdCBiZSBhIHN0cmluZykuCisgKiBUaGlzIGZvcm1hdCBzdHJpbmcg bWF5IGNvbnRhaW4gemVybyBvciBtb3JlICUtZXNjYXBlcywgd2hpY2ggY29uc2lzdCBvZiBhbgor ICogZWxlbWVudCBuYW1lIGVuY2xvc2VkIGluIHsgfSwgcG9zc2libHkgZm9sbG93ZWQgYnkgYSBj b252ZXJzaW9uIG1vZGlmaWVyLAorICogZm9sbG93ZWQgYnkgYSBjb252ZXJzaW9uIHNwZWNpZmll ci4gIFBvc3NpYmxlIGNvbnZlcnNpb24gc3BlY2lmaWVycyBhcmU6CisgKgorICogJQkJZXhwYW5k IHRvIGEgbGl0ZXJhbCAlCisgKiBJCQlleHBhbmQgYXMgYSBzaW5nbGUsIG5vbi1xdWFsaWZpZWQg aWRlbnRpZmllcgorICogRAkJZXhwYW5kIGFzIGEgcG9zc2libHktcXVhbGlmaWVkIGlkZW50aWZp ZXIKKyAqIFQJCWV4cGFuZCBhcyBhIHR5cGUgbmFtZQorICogTwkJZXhwYW5kIGFzIGFuIG9wZXJh dG9yIG5hbWUKKyAqIEwJCWV4cGFuZCBhcyBhIHN0cmluZyBsaXRlcmFsIChxdW90ZSB1c2luZyBz aW5nbGUgcXVvdGVzKQorICogcwkJZXhwYW5kIGFzIGEgc2ltcGxlIHN0cmluZyAobm8gcXVvdGlu ZykKKyAqIG4JCWV4cGFuZCBhcyBhIHNpbXBsZSBudW1iZXIgKG5vIHF1b3RpbmcpCisgKiBSCQll eHBhbmQgYXMgYSByb2xlIG5hbWUgKHBvc3NpYmx5IHF1b3RlZCBuYW1lLCBvciBQVUJMSUMpCisg KgorICogVGhlIGVsZW1lbnQgbmFtZSBtYXkgaGF2ZSBhbiBvcHRpb25hbCBzZXBhcmF0b3Igc3Bl Y2lmaWNhdGlvbiBwcmVjZWRlZAorICogYnkgYSBjb2xvbi4gIEl0cyBwcmVzZW5jZSBpbmRpY2F0 ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBleHBlY3RlZCB0byBiZQorICogYW4gYXJyYXk7IHRoZSBz cGVjaWZpZWQgc2VwYXJhdG9yIGlzIHVzZWQgdG8gam9pbiB0aGUgYXJyYXkgZWxlbWVudHMuCisg Ki0tLS0tLQorICovCitEYXR1bQorZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwl0ZXh0CSAgICpqc29uID0gUEdfR0VUQVJHX1RFWFRfUCgwKTsKKwljaGFy CSAgICpqc29uX3N0cjsKKworCWpzb25fc3RyID0gdGV4dF90b19jc3RyaW5nKGpzb24pOworCisJ UEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoZGVwYXJzZV9kZGxfanNvbl90b19zdHJp bmcoanNvbl9zdHIpKSk7Cit9CisKKy8qCisgKiBFcnJvciBjb250ZXh0IGNhbGxiYWNrIGZvciBK U09OIGZvcm1hdCBzdHJpbmcgZXhwYW5zaW9uLgorICoKKyAqIFhYWDogaW5kaWNhdGUgd2hpY2gg ZWxlbWVudCB3ZSdyZSBleHBhbmRpbmcsIGlmIGFwcGxpY2FibGUuCisgKi8KK3N0YXRpYyB2b2lk CitmbXRzdHJfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQoreworCWVycmNvbnRleHQoIndoaWxl IGV4cGFuZGluZyBmb3JtYXQgc3RyaW5nIFwiJXNcIiIsIChjaGFyICopIGFyZyk7Cit9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL21lc29uLmJ1aWxkCmluZGV4IDliMzUwZDAyNWYuLmMxZTFhMmMxOGUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL21lc29uLmJ1aWxkCkBAIC0xNSw2ICsxNSw4IEBAIGJhY2tlbmRfc291cmNlcyArPSBm aWxlcygKICAgJ2NvcHl0by5jJywKICAgJ2NyZWF0ZWFzLmMnLAogICAnZGJjb21tYW5kcy5jJywK KyAgJ2RkbF9kZXBhcnNlLmMnLAorICAnZGRsX2pzb24uYycsCiAgICdkZWZpbmUuYycsCiAgICdk aXNjYXJkLmMnLAogICAnZHJvcGNtZHMuYycsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9zZWNsYWJlbC5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwuYwppbmRleCA3 YWUxOWI5OGJiLi44MWNlZGVjMmU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9z ZWNsYWJlbC5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xhYmVsLmMKQEAgLTEzNCw2 ICsxMzQsOCBAQCBFeGVjU2VjTGFiZWxTdG10KFNlY0xhYmVsU3RtdCAqc3RtdCkKIAkJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCiAJCQkJCSBlcnJtc2coIm11 c3Qgc3BlY2lmeSBwcm92aWRlciB3aGVuIG11bHRpcGxlIHNlY3VyaXR5IGxhYmVsIHByb3ZpZGVy cyBoYXZlIGJlZW4gbG9hZGVkIikpKTsKIAkJcHJvdmlkZXIgPSAoTGFiZWxQcm92aWRlciAqKSBs aW5pdGlhbChsYWJlbF9wcm92aWRlcl9saXN0KTsKKwkJLyogQ29weSB0aGUgcHJvdmlkZXIgbmFt ZSB0byB0aGUgcGFyc2V0cmVlLCBuZWVkZWQgZm9yIERETCBkZXBhcnNpbmcgb2YgU2VjTGFiZWxT dG10ICovCisJCXN0bXQtPnByb3ZpZGVyID0gcHN0cmR1cChwcm92aWRlci0+cHJvdmlkZXJfbmFt ZSk7CiAJfQogCWVsc2UKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1 ZW5jZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwppbmRleCA5OWM5ZjkxY2Jh Li40MjA1ZGRhMjIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKQEAgLTE3MDgsNiArMTcwOCwz OSBAQCBwcm9jZXNzX293bmVkX2J5KFJlbGF0aW9uIHNlcXJlbCwgTGlzdCAqb3duZWRfYnksIGJv b2wgZm9yX2lkZW50aXR5KQogCQlyZWxhdGlvbl9jbG9zZSh0YWJsZXJlbCwgTm9Mb2NrKTsKIH0K IAorLyoKKyAqIFJldHVybiBzZXF1ZW5jZSBwYXJhbWV0ZXJzLCBkZXRhaWxlZAorICovCitGb3Jt X3BnX3NlcXVlbmNlX2RhdGEKK2dldF9zZXF1ZW5jZV92YWx1ZXMoT2lkIHNlcXVlbmNlSWQpCit7 CisJQnVmZmVyICAgICAgYnVmOworCVNlcVRhYmxlICAgIGVsbTsKKwlSZWxhdGlvbiAgICBzZXFy ZWw7CisJSGVhcFR1cGxlRGF0YSBzZXF0dXBsZTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2Vx OworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSByZXRTZXE7CisKKwkvKiBPcGVuIGFuZCBBY2Nlc3NT aGFyZUxvY2sgc2VxdWVuY2UgKi8KKwlpbml0X3NlcXVlbmNlKHNlcXVlbmNlSWQsICZlbG0sICZz ZXFyZWwpOworCisJaWYgKHBnX2NsYXNzX2FjbGNoZWNrKHNlcXVlbmNlSWQsIEdldFVzZXJJZCgp LAorCQkJQUNMX1NFTEVDVCB8IEFDTF9VUERBVEUgfCBBQ0xfVVNBR0UpICE9IEFDTENIRUNLX09L KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOU1VGRklDSUVOVF9Q UklWSUxFR0UpLAorCQkJCQkgZXJybXNnKCJwZXJtaXNzaW9uIGRlbmllZCBmb3Igc2VxdWVuY2Ug JXMiLAorCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHNlcXJlbCkpKSk7CisKKwlzZXEg PSByZWFkX3NlcV90dXBsZShzZXFyZWwsICZidWYsICZzZXF0dXBsZSk7CisJcmV0U2VxID0gcGFs bG9jKHNpemVvZihGb3JtRGF0YV9wZ19zZXF1ZW5jZV9kYXRhKSk7CisKKwltZW1jcHkocmV0U2Vx LCBzZXEsIHNpemVvZihGb3JtRGF0YV9wZ19zZXF1ZW5jZV9kYXRhKSk7CisKKwlVbmxvY2tSZWxl YXNlQnVmZmVyKGJ1Zik7CisJcmVsYXRpb25fY2xvc2Uoc2VxcmVsLCBOb0xvY2spOworCisJcmV0 dXJuIHJldFNlcTsKK30KIAogLyoKICAqIFJldHVybiBzZXF1ZW5jZSBwYXJhbWV0ZXJzIGluIGEg bGlzdCBvZiB0aGUgZm9ybSBjcmVhdGVkIGJ5IHRoZSBwYXJzZXIuCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCA5Njc3MmU0ZDczLi5lNmRjNWNjZDhjIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKQEAgLTI1MDcsNyArMjUwNyw2 IEBAIGFwcGx5X2hhbmRsZV90cnVuY2F0ZShTdHJpbmdJbmZvIHMpCiAJZW5kX3JlcGxpY2F0aW9u X3N0ZXAoKTsKIH0KIAotCiAvKgogICogTG9naWNhbCByZXBsaWNhdGlvbiBwcm90b2NvbCBtZXNz YWdlIGRpc3BhdGNoZXIuCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0 eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5kZXggMjQ3ZDA4MTZhZC4uZjEyMTVj OGUxOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKKysrIGIvc3JjL2Jh Y2tlbmQvdGNvcC91dGlsaXR5LmMKQEAgLTE0NDYsNyArMTQ0Niw4IEBAIFByb2Nlc3NVdGlsaXR5 U2xvdyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJYWRkcmVzcyA9IERlZmluZUNvbGxhdGlv bihwc3RhdGUsCiAJCQkJCQkJCQkJCQkJICBzdG10LT5kZWZuYW1lcywKIAkJCQkJCQkJCQkJCQkg IHN0bXQtPmRlZmluaXRpb24sCi0JCQkJCQkJCQkJCQkJICBzdG10LT5pZl9ub3RfZXhpc3RzKTsK KwkJCQkJCQkJCQkJCQkgIHN0bXQtPmlmX25vdF9leGlzdHMsCisJCQkJCQkJCQkJCQkJICAmc2Vj b25kYXJ5T2JqZWN0KTsKIAkJCQkJCQlicmVhazsKIAkJCQkJCWRlZmF1bHQ6CiAJCQkJCQkJZWxv ZyhFUlJPUiwgInVucmVjb2duaXplZCBkZWZpbmUgc3RtdCB0eXBlOiAlZCIsCkBAIC0yMTk2LDYg KzIxOTcsOTQgQEAgVXRpbGl0eUNvbnRhaW5zUXVlcnkoTm9kZSAqcGFyc2V0cmVlKQogCX0KIH0K IAorLyoKKyAqIFJldHVybiB0aGUgZ2l2ZW4gb2JqZWN0IHR5cGUgYXMgYSBzdHJpbmcuCisgKi8K K2NvbnN0IGNoYXIgKgorc3RyaW5naWZ5X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlLCBib29s IGlzZ3JhbnQpCit7CisJc3dpdGNoIChvYmp0eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfQUdHUkVH QVRFOgorCQkJcmV0dXJuICJBR0dSRUdBVEUiOworCQljYXNlIE9CSkVDVF9DQVNUOgorCQkJcmV0 dXJuICJDQVNUIjsKKwkJY2FzZSBPQkpFQ1RfQ09MTEFUSU9OOgorCQkJcmV0dXJuICJDT0xMQVRJ T04iOworCQljYXNlIE9CSkVDVF9DT0xVTU46CisJCQlyZXR1cm4gaXNncmFudCA/ICJUQUJMRSIg OiAiQ09MVU1OIjsKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJCXJldHVybiAiQ09OVkVS U0lPTiI7CisJCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgorCQkJcmV0dXJuICJEQVRBQkFTRSI7CisJ CWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJCXJldHVybiAiRE9NQUlOIjsKKwkJY2FzZSBPQkpFQ1Rf RVZFTlRfVFJJR0dFUjoKKwkJCXJldHVybiAiRVZFTlQgVFJJR0dFUiI7CisJCWNhc2UgT0JKRUNU X0VYVEVOU0lPTjoKKwkJCXJldHVybiAiRVhURU5TSU9OIjsKKwkJY2FzZSBPQkpFQ1RfRkRXOgor CQkJcmV0dXJuICJGT1JFSUdOIERBVEEgV1JBUFBFUiI7CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05f U0VSVkVSOgorCQkJcmV0dXJuIGlzZ3JhbnQgPyAiRk9SRUlHTiBTRVJWRVIiIDogIlNFUlZFUiI7 CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05fVEFCTEU6CisJCQlyZXR1cm4gIkZPUkVJR04gVEFCTEUi OworCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJCXJldHVybiAiRlVOQ1RJT04iOworCQljYXNl IE9CSkVDVF9JTkRFWDoKKwkJCXJldHVybiAiSU5ERVgiOworCQljYXNlIE9CSkVDVF9MQU5HVUFH RToKKwkJCXJldHVybiAiTEFOR1VBR0UiOworCQljYXNlIE9CSkVDVF9MQVJHRU9CSkVDVDoKKwkJ CXJldHVybiAiTEFSR0UgT0JKRUNUIjsKKwkJY2FzZSBPQkpFQ1RfTUFUVklFVzoKKwkJCXJldHVy biAiTUFURVJJQUxJWkVEIFZJRVciOworCQljYXNlIE9CSkVDVF9PUENMQVNTOgorCQkJcmV0dXJu ICJPUEVSQVRPUiBDTEFTUyI7CisJCWNhc2UgT0JKRUNUX09QRVJBVE9SOgorCQkJcmV0dXJuICJP UEVSQVRPUiI7CisJCWNhc2UgT0JKRUNUX09QRkFNSUxZOgorCQkJcmV0dXJuICJPUEVSQVRPUiBG QU1JTFkiOworCQljYXNlIE9CSkVDVF9QT0xJQ1k6CisJCQlyZXR1cm4gIlBPTElDWSI7CisJCWNh c2UgT0JKRUNUX1BST0NFRFVSRToKKwkJCXJldHVybiAiUFJPQ0VEVVJFIjsKKwkJY2FzZSBPQkpF Q1RfUk9MRToKKwkJCXJldHVybiAiUk9MRSI7CisJCWNhc2UgT0JKRUNUX1JPVVRJTkU6CisJCQly ZXR1cm4gIlJPVVRJTkUiOworCQljYXNlIE9CSkVDVF9SVUxFOgorCQkJcmV0dXJuICJSVUxFIjsK KwkJY2FzZSBPQkpFQ1RfU0NIRU1BOgorCQkJcmV0dXJuICJTQ0hFTUEiOworCQljYXNlIE9CSkVD VF9TRVFVRU5DRToKKwkJCXJldHVybiAiU0VRVUVOQ0UiOworCQljYXNlIE9CSkVDVF9TVEFUSVNU SUNfRVhUOgorCQkJcmV0dXJuICJTVEFUSVNUSUNTIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJ CQlyZXR1cm4gIlRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJCXJldHVybiAi VEFCTEVTUEFDRSI7CisJCWNhc2UgT0JKRUNUX1RSSUdHRVI6CisJCQlyZXR1cm4gIlRSSUdHRVIi OworCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNI IENPTkZJR1VSQVRJT04iOworCQljYXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCQlyZXR1cm4g IlRFWFQgU0VBUkNIIERJQ1RJT05BUlkiOworCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJCXJl dHVybiAiVEVYVCBTRUFSQ0ggUEFSU0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJ CXJldHVybiAiVEVYVCBTRUFSQ0ggVEVNUExBVEUiOworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJ cmV0dXJuICJUWVBFIjsKKwkJY2FzZSBPQkpFQ1RfVVNFUl9NQVBQSU5HOgorCQkJcmV0dXJuICJV U0VSIE1BUFBJTkciOworCQljYXNlIE9CSkVDVF9WSUVXOgorCQkJcmV0dXJuICJWSUVXIjsKKwkJ ZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIsIG9i anR5cGUpOworCX0KK30KIAogLyoKICAqIEFsdGVyT2JqZWN0VHlwZUNvbW1hbmRUYWcKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMKaW5kZXggMjkxOGZkYmZiNi4uZjY0YTcyMTNiNyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRl ICJ1dGlscy9udW1lcmljLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAotc3RhdGlj IGNoYXIgKnByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lk IHR5cG1vZG91dCk7CiAKIAogLyoKQEAgLTM2Myw3ICszNjIsNyBAQCBmb3JtYXRfdHlwZV93aXRo X3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKQogLyoKICAqIEFkZCB0eXBtb2Qg ZGVjb3JhdGlvbiB0byB0aGUgYmFzaWMgdHlwZSBuYW1lCiAgKi8KLXN0YXRpYyBjaGFyICoKK2No YXIgKgogcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQg dHlwbW9kb3V0KQogewogCWNoYXIJICAgKnJlczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9yZWdwcm9jLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCmluZGV4 IDZkNGMxYzI3YTUuLjQ4NmEwOWUxN2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9yZWdwcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYwpAQCAtNDQs NiArNDQsOCBAQAogc3RhdGljIHZvaWQgcGFyc2VOYW1lQW5kQXJnVHlwZXMoY29uc3QgY2hhciAq c3RyaW5nLCBib29sIGFsbG93Tm9uZSwKIAkJCQkJCQkJIExpc3QgKipuYW1lcywgaW50ICpuYXJn cywgT2lkICphcmd0eXBlcyk7CiAKK3N0YXRpYyB2b2lkIGZvcm1hdF9wcm9jZWR1cmVfYXJnc19p bnRlcm5hbChGb3JtX3BnX3Byb2MgcHJvY2Zvcm0sCisJCQkJCQkJCQkJICAgU3RyaW5nSW5mbyBi dWYsIGJvb2wgZm9yY2VfcXVhbGlmeSk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJIFVT RVIgSS9PIFJPVVRJTkVTCQkJCQkJCQkJCQkJCQkgKgpAQCAtMzMxLDYgKzMzMywyOSBAQCBmb3Jt YXRfcHJvY2VkdXJlX3F1YWxpZmllZChPaWQgcHJvY2VkdXJlX29pZCkKIAlyZXR1cm4gZm9ybWF0 X3Byb2NlZHVyZV9leHRlbmRlZChwcm9jZWR1cmVfb2lkLCBGT1JNQVRfUFJPQ19GT1JDRV9RVUFM SUZZKTsKIH0KIAorLyoKKyAqIGZvcm1hdF9wcm9jZWR1cmVfYXJncyAgIC0gY29udmVydHMgcHJv YyBPSUQgdG8gIihhcmdzKSIKKyAqLworY2hhciAqCitmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lk IHByb2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBi dWY7CisJSGVhcFR1cGxlICAgcHJvY3R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07CisKKwlw cm9jdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvY2Vk dXJlX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jdHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2NlZHVyZV9vaWQp OworCXByb2Nmb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCisJaW5p dFN0cmluZ0luZm8oJmJ1Zik7CisJZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFsKHByb2Nm b3JtLCAmYnVmLCBmb3JjZV9xdWFsaWZ5KTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsK KworCXJldHVybiBidWYuZGF0YTsKK30KKwogLyoKICAqIGZvcm1hdF9wcm9jZWR1cmVfZXh0ZW5k ZWQgLSBjb252ZXJ0cyBwcm9jZWR1cmUgT0lEIHRvICJwcm9fbmFtZShhcmdzKSIKICAqCkBAIC0y MDYwLDMgKzIwODUsMzEgQEAgcGFyc2VOYW1lQW5kQXJnVHlwZXMoY29uc3QgY2hhciAqc3RyaW5n LCBib29sIGFsbG93Tm9uZSwgTGlzdCAqKm5hbWVzLAogCiAJcGZyZWUocmF3bmFtZSk7CiB9CisK Ky8qCisgKiBBcHBlbmQgdGhlIHBhcmVudGhlc2l6ZWQgYXJndW1lbnRzIG9mIHRoZSBnaXZlbiBw Z19wcm9jIHJvdyBpbnRvIHRoZSBvdXRwdXQKKyAqIGJ1ZmZlci4gZm9yY2VfcXVhbGlmeSBpbmRp Y2F0ZXMgd2hldGhlciB0byBzY2hlbWEtcXVhbGlmeSB0eXBlIG5hbWVzCisgKiByZWdhcmRsZXNz IG9mIHZpc2liaWxpdHkuCisgKi8KK3N0YXRpYyB2b2lkCitmb3JtYXRfcHJvY2VkdXJlX2FyZ3Nf aW50ZXJuYWwoRm9ybV9wZ19wcm9jIHByb2Nmb3JtLCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCQkg ICBib29sIGZvcmNlX3F1YWxpZnkpCit7CisJaW50CQkJaTsKKwljaGFyKgkJKCpmdW5jWzJdKShP aWQpID0ge2Zvcm1hdF90eXBlX2JlLCBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWR9OworCisJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKCcpOworCWZvciAoaSA9IDA7IGkgPCBwcm9jZm9ybS0+ cHJvbmFyZ3M7IGkrKykKKwl7CisJCU9pZAkJCXRoaXNhcmd0eXBlID0gcHJvY2Zvcm0tPnByb2Fy Z3R5cGVzLnZhbHVlc1tpXTsKKwkJY2hhcgkgICAqYXJndHlwZSA9IE5VTEw7CisKKwkJaWYgKGkg PiAwKQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnLCcpOworCisJCWFyZ3R5cGUgPSBm dW5jW2ZvcmNlX3F1YWxpZnldKHRoaXNhcmd0eXBlKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsIGFyZ3R5cGUpOworCQlwZnJlZShhcmd0eXBlKTsKKwl9CisJYXBwZW5kU3RyaW5nSW5m b0NoYXIoYnVmLCAnKScpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1 bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IDY0MWRm MWNhYmUuLmY5OWViYTFkNzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxl dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTM1LDYg KzM1LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19wYXJ0aXRpb25lZF90YWJsZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcmV3cml0ZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf c3RhdGlzdGljX2V4dC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJpZ2dlci5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgpAQCAtMzU4LDcgKzM1OSw2IEBAIHN0YXRpYyBpbnQJcHJp bnRfZnVuY3Rpb25fYXJndW1lbnRzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCwK IAkJCQkJCQkJCSBib29sIHByaW50X3RhYmxlX2FyZ3MsIGJvb2wgcHJpbnRfZGVmYXVsdHMpOwog c3RhdGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fcmV0dHlwZShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1 cGxlIHByb2N0dXApOwogc3RhdGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fdHJmdHlwZXMoU3RyaW5n SW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKLXN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9u X3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lk IHNldF9ydGFibGVfbmFtZXMoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIExpc3QgKnBhcmVudF9u YW1lc3BhY2VzLAogCQkJCQkJCSBCaXRtYXBzZXQgKnJlbHNfdXNlZCk7CiBzdGF0aWMgdm9pZCBz ZXRfZGVwYXJzZV9mb3JfcXVlcnkoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIFF1ZXJ5ICpxdWVy eSwKQEAgLTQ4MiwyMiArNDgyLDE1IEBAIHN0YXRpYyB2b2lkIGdldF9mcm9tX2NsYXVzZV9jb2xk ZWZsaXN0KFJhbmdlVGJsRnVuY3Rpb24gKnJ0ZnVuYywKIAkJCQkJCQkJCSAgIGRlcGFyc2VfY29u dGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBnZXRfdGFibGVzYW1wbGVfZGVmKFRhYmxlU2Ft cGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwKIAkJCQkJCQkJZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0 KTsKLXN0YXRpYyB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxf ZGF0YXR5cGUsCi0JCQkJCQkJIFN0cmluZ0luZm8gYnVmKTsKIHN0YXRpYyBOb2RlICpwcm9jZXNz SW5kaXJlY3Rpb24oTm9kZSAqbm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRp YyB2b2lkIHByaW50U3Vic2NyaXB0cyhTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiwgZGVwYXJzZV9j b250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyBjaGFyICpnZXRfcmVsYXRpb25fbmFtZShPaWQgcmVs aWQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkLCBMaXN0 ICpuYW1lc3BhY2VzKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25f bmFtZShPaWQgcmVsaWQpOwotc3RhdGljIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lk IGZ1bmNpZCwgaW50IG5hcmdzLAotCQkJCQkJCQkJTGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJndHlw ZXMsCi0JCQkJCQkJCQlib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCi0J CQkJCQkJCQlQYXJzZUV4cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogc3RhdGljIGNoYXIgKmdl bmVyYXRlX29wZXJhdG9yX25hbWUoT2lkIG9wZXJpZCwgT2lkIGFyZzEsIE9pZCBhcmcyKTsKIHN0 YXRpYyB2b2lkIGFkZF9jYXN0X3RvKFN0cmluZ0luZm8gYnVmLCBPaWQgdHlwaWQpOwogc3RhdGlj IGNoYXIgKmdlbmVyYXRlX3F1YWxpZmllZF90eXBlX25hbWUoT2lkIHR5cGlkKTsKIHN0YXRpYyB0 ZXh0ICpzdHJpbmdfdG9fdGV4dChjaGFyICpzdHIpOwotc3RhdGljIGNoYXIgKmZsYXR0ZW5fcmVs b3B0aW9ucyhPaWQgcmVsaWQpOwogc3RhdGljIHZvaWQgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5m byBidWYsIERhdHVtIHJlbG9wdGlvbnMpOwogCiAjZGVmaW5lIG9ubHlfbWFya2VyKHJ0ZSkgICgo cnRlKS0+aW5oID8gIiIgOiAiT05MWSAiKQpAQCAtNTQ1LDYgKzUzOCwxMDQgQEAgcGdfZ2V0X3J1 bGVkZWZfZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9f dGV4dChyZXMpKTsKIH0KIAorLyoKKyAqIEdpdmVuIGEgcGFpciBvZiBEYXR1bSBjb3JyZXNwb25k aW5nIHRvIGEgcnVsZSdzIHBnX3Jld3JpdGUuZXZfcXVhbCBhbmQKKyAqIGV2X2FjdGlvbiBjb2x1 bW5zLCByZXR1cm4gdGhlaXIgdGV4dCByZXByZXNlbnRhdGlvbjsgZXZfcXVhbCBhcyBhIHNpbmds ZQorICogc3RyaW5nIGluIHdoZXJlQ2xhdXNlIGFuZCBldl9hY3Rpb24gYXMgYSBMaXN0IG9mIHN0 cmluZ3MgKHdoaWNoIG1pZ2h0IGJlCisgKiBOSUwsIHNpZ25hbGxpbmcgTk9USElORykgaW4gYWN0 aW9ucy4KKyAqLwordm9pZAorcGdfZ2V0X3J1bGVkZWZfZGV0YWlsZWQoRGF0dW0gZXZfcXVhbCwg RGF0dW0gZXZfYWN0aW9uLAorCQkJCQkJY2hhciAqKndoZXJlQ2xhdXNlLCBMaXN0ICoqYWN0aW9u cykKK3sKKwlpbnQJCQlwcmV0dHlGbGFncyA9IDA7CisJY2hhcgkgICAqcXVhbHN0ciA9IFRleHRE YXR1bUdldENTdHJpbmcoZXZfcXVhbCk7CisJY2hhcgkgICAqYWN0aW9uc3RyID0gVGV4dERhdHVt R2V0Q1N0cmluZyhldl9hY3Rpb24pOworCUxpc3QJICAgKmFjdGlvbk5vZGVMaXN0ID0gKExpc3Qg Kikgc3RyaW5nVG9Ob2RlKGFjdGlvbnN0cik7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJKndo ZXJlQ2xhdXNlID0gTlVMTDsKKwkqYWN0aW9ucyA9IE5JTDsKKwlpbml0U3RyaW5nSW5mbygmYnVm KTsKKwlpZiAoc3RybGVuKHF1YWxzdHIpID4gMCAmJiBzdHJjbXAocXVhbHN0ciwgIjw+IikgIT0g MCkKKwl7CisJCU5vZGUJICAgKnF1YWw7CisJCVF1ZXJ5CSAgICpxdWVyeTsKKwkJZGVwYXJzZV9j b250ZXh0IGNvbnRleHQ7CisJCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7CisKKwkJcXVhbCA9IHN0 cmluZ1RvTm9kZShxdWFsc3RyKTsKKworCQlxdWVyeSA9IChRdWVyeSAqKSBsaW5pdGlhbChhY3Rp b25Ob2RlTGlzdCk7CisJCXF1ZXJ5ID0gZ2V0SW5zZXJ0U2VsZWN0UXVlcnkocXVlcnksIE5VTEwp OworCisJCUFjcXVpcmVSZXdyaXRlTG9ja3MocXVlcnksIGZhbHNlLCBmYWxzZSk7CisKKwkJY29u dGV4dC5idWYgPSAmYnVmOworCQljb250ZXh0Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5z KTsKKwkJY29udGV4dC53aW5kb3dDbGF1c2UgPSBOSUw7CisJCWNvbnRleHQud2luZG93VExpc3Qg PSBOSUw7CisJCWNvbnRleHQudmFycHJlZml4ID0gKGxpc3RfbGVuZ3RoKHF1ZXJ5LT5ydGFibGUp ICE9IDEpOworCQljb250ZXh0LnByZXR0eUZsYWdzID0gcHJldHR5RmxhZ3M7CisJCWNvbnRleHQu d3JhcENvbHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7CisJCWNvbnRleHQuaW5kZW50TGV2ZWwg PSBQUkVUVFlJTkRFTlRfU1REOworCisJCXNldF9kZXBhcnNlX2Zvcl9xdWVyeSgmZHBucywgcXVl cnksIE5JTCk7CisKKwkJZ2V0X3J1bGVfZXhwcihxdWFsLCAmY29udGV4dCwgZmFsc2UpOworCisJ CSp3aGVyZUNsYXVzZSA9IHBzdHJkdXAoYnVmLmRhdGEpOworCX0KKworCWlmIChsaXN0X2xlbmd0 aChhY3Rpb25Ob2RlTGlzdCkgPiAwKQorCXsKKwkJTGlzdENlbGwgICAqY2VsbDsKKworCQlmb3Jl YWNoKGNlbGwsIGFjdGlvbk5vZGVMaXN0KQorCQl7CisJCQlRdWVyeQkgICAqcXVlcnkgPSAoUXVl cnkgKikgbGZpcnN0KGNlbGwpOworCisJCQlpZiAocXVlcnktPmNvbW1hbmRUeXBlID09IENNRF9O T1RISU5HKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXNldFN0cmluZ0luZm8oJmJ1Zik7CisJCQln ZXRfcXVlcnlfZGVmKHF1ZXJ5LCAmYnVmLCBOSUwsIE5VTEwsIHRydWUsCisJCQkJCQkgIHByZXR0 eUZsYWdzLCBXUkFQX0NPTFVNTl9ERUZBVUxULCAwKTsKKwkJCSphY3Rpb25zID0gbGFwcGVuZCgq YWN0aW9ucywgcHN0cmR1cChidWYuZGF0YSkpOworCQl9CisJfQorfQorCisvKgorICogVG8gZ2V0 IHRoZSByZXdyaXRlIHJ1bGUgb2YgYSB2aWV3IHdoZW4gdGhlIENSRUFURSBWSUVXIGNvbW1hbmQg ZXhlY3V0aW9uIGlzCisgKiBzdGlsbCBpbiBwcm9ncmVzczogd2Ugc2VhcmNoIHRoZSBzeXN0ZW0g Y2FjaGUgUlVMRVJFTE5BTUUgdG8gZ2V0IHRoZSByZXdyaXRlCisgKiBydWxlIG9mIHRoZSB2aWV3 IGFzIG9wcG9zZWQgdG8gcXVlcnlpbmcgcGdfcmV3cml0ZSBhcyBpbiBwZ19nZXRfdmlld2RlZl93 b3JrZXIoKSwKKyAqIHdoaWNoIHdpbGwgcmV0dXJuIGVtcHR5IHJlc3VsdC4KKyAqLworY2hhciAq CitwZ19nZXRfdmlld2RlZl9pbnRlcm5hbChPaWQgdmlld29pZCkKK3sKKwlTdHJpbmdJbmZvRGF0 YSBidWY7CisJUmVsYXRpb24JcGdfcmV3cml0ZTsKKwlIZWFwVHVwbGUJcnVsZXR1cDsKKwlUdXBs ZURlc2MJcnVsZXR0YzsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCXBnX3Jld3JpdGUgPSB0 YWJsZV9vcGVuKFJld3JpdGVSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcnVsZXR1 cCA9IFNlYXJjaFN5c0NhY2hlMihSVUxFUkVMTkFNRSwKKwkJCQkJCQkgIE9iamVjdElkR2V0RGF0 dW0odmlld29pZCksCisJCQkJCQkJICBQb2ludGVyR2V0RGF0dW0oVmlld1NlbGVjdFJ1bGVOYW1l KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJ1bGV0dXApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgcmV3cml0ZSBydWxlIGZvciB2aWV3IHdpdGggT0lEICV1Iiwg dmlld29pZCk7CisKKwlydWxldHRjID0gcGdfcmV3cml0ZS0+cmRfYXR0OworCW1ha2Vfdmlld2Rl ZigmYnVmLCBydWxldHVwLCBydWxldHRjLCAwLCBXUkFQX0NPTFVNTl9ERUZBVUxUKTsKKwlSZWxl YXNlU3lzQ2FjaGUocnVsZXR1cCk7CisJdGFibGVfY2xvc2UocGdfcmV3cml0ZSwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXJldHVybiBidWYuZGF0YTsKK30KIAogc3RhdGljIGNoYXIgKgogcGdfZ2V0 X3J1bGVkZWZfd29ya2VyKE9pZCBydWxlb2lkLCBpbnQgcHJldHR5RmxhZ3MpCkBAIC0xMDE1LDY1 ICsxMTA2LDEyIEBAIHBnX2dldF90cmlnZ2VyZGVmX3dvcmtlcihPaWQgdHJpZ2lkLCBib29sIHBy ZXR0eSkKIAlpZiAoIWlzbnVsbCkKIAl7CiAJCU5vZGUJICAgKnF1YWw7Ci0JCWNoYXIJCXJlbGtp bmQ7Ci0JCWRlcGFyc2VfY29udGV4dCBjb250ZXh0OwotCQlkZXBhcnNlX25hbWVzcGFjZSBkcG5z OwotCQlSYW5nZVRibEVudHJ5ICpvbGRydGU7Ci0JCVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsKLQot CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICJXSEVOICgiKTsKKwkJY2hhcgkgICAqcXVh bHN0cjsKIAogCQlxdWFsID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcodmFsdWUp KTsKKwkJcXVhbHN0ciA9IHBnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UodHJpZ3JlYywgcXVhbCwg cHJldHR5KTsKIAotCQlyZWxraW5kID0gZ2V0X3JlbF9yZWxraW5kKHRyaWdyZWMtPnRncmVsaWQp OwotCi0JCS8qIEJ1aWxkIG1pbmltYWwgT0xEIGFuZCBORVcgUlRFcyBmb3IgdGhlIHJlbCAqLwot CQlvbGRydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKLQkJb2xkcnRlLT5ydGVraW5kID0g UlRFX1JFTEFUSU9OOwotCQlvbGRydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKLQkJb2xk cnRlLT5yZWxraW5kID0gcmVsa2luZDsKLQkJb2xkcnRlLT5yZWxsb2NrbW9kZSA9IEFjY2Vzc1No YXJlTG9jazsKLQkJb2xkcnRlLT5hbGlhcyA9IG1ha2VBbGlhcygib2xkIiwgTklMKTsKLQkJb2xk cnRlLT5lcmVmID0gb2xkcnRlLT5hbGlhczsKLQkJb2xkcnRlLT5sYXRlcmFsID0gZmFsc2U7Ci0J CW9sZHJ0ZS0+aW5oID0gZmFsc2U7Ci0JCW9sZHJ0ZS0+aW5Gcm9tQ2wgPSB0cnVlOwotCi0JCW5l d3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOwotCQluZXdydGUtPnJ0ZWtpbmQgPSBSVEVf UkVMQVRJT047Ci0JCW5ld3J0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOwotCQluZXdydGUt PnJlbGtpbmQgPSByZWxraW5kOwotCQluZXdydGUtPnJlbGxvY2ttb2RlID0gQWNjZXNzU2hhcmVM b2NrOwotCQluZXdydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJuZXciLCBOSUwpOwotCQluZXdydGUt PmVyZWYgPSBuZXdydGUtPmFsaWFzOwotCQluZXdydGUtPmxhdGVyYWwgPSBmYWxzZTsKLQkJbmV3 cnRlLT5pbmggPSBmYWxzZTsKLQkJbmV3cnRlLT5pbkZyb21DbCA9IHRydWU7Ci0KLQkJLyogQnVp bGQgdHdvLWVsZW1lbnQgcnRhYmxlICovCi0JCW1lbXNldCgmZHBucywgMCwgc2l6ZW9mKGRwbnMp KTsKLQkJZHBucy5ydGFibGUgPSBsaXN0X21ha2UyKG9sZHJ0ZSwgbmV3cnRlKTsKLQkJZHBucy5z dWJwbGFucyA9IE5JTDsKLQkJZHBucy5jdGVzID0gTklMOwotCQlkcG5zLmFwcGVuZHJlbHMgPSBO VUxMOwotCQlzZXRfcnRhYmxlX25hbWVzKCZkcG5zLCBOSUwsIE5VTEwpOwotCQlzZXRfc2ltcGxl X2NvbHVtbl9uYW1lcygmZHBucyk7Ci0KLQkJLyogU2V0IHVwIGNvbnRleHQgd2l0aCBvbmUtZGVl cCBuYW1lc3BhY2Ugc3RhY2sgKi8KLQkJY29udGV4dC5idWYgPSAmYnVmOwotCQljb250ZXh0Lm5h bWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5zKTsKLQkJY29udGV4dC53aW5kb3dDbGF1c2UgPSBO SUw7Ci0JCWNvbnRleHQud2luZG93VExpc3QgPSBOSUw7Ci0JCWNvbnRleHQudmFycHJlZml4ID0g dHJ1ZTsKLQkJY29udGV4dC5wcmV0dHlGbGFncyA9IEdFVF9QUkVUVFlfRkxBR1MocHJldHR5KTsK LQkJY29udGV4dC53cmFwQ29sdW1uID0gV1JBUF9DT0xVTU5fREVGQVVMVDsKLQkJY29udGV4dC5p bmRlbnRMZXZlbCA9IFBSRVRUWUlOREVOVF9TVEQ7Ci0JCWNvbnRleHQuc3BlY2lhbF9leHBya2lu ZCA9IEVYUFJfS0lORF9OT05FOwotCQljb250ZXh0LmFwcGVuZHBhcmVudHMgPSBOVUxMOwotCi0J CWdldF9ydWxlX2V4cHIocXVhbCwgJmNvbnRleHQsIGZhbHNlKTsKLQotCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKCZidWYsICIpICIpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJXSEVOICgl cykgIiwgcXVhbHN0cik7CiAJfQogCiAJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRVhFQ1VURSBG VU5DVElPTiAlcygiLApAQCAtMTExNCw2ICsxMTUyLDY5IEBAIHBnX2dldF90cmlnZ2VyZGVmX3dv cmtlcihPaWQgdHJpZ2lkLCBib29sIHByZXR0eSkKIAlyZXR1cm4gYnVmLmRhdGE7CiB9CiAKKy8q CisgKiBQYXJzZSBiYWNrIHRoZSBUcmlnZ2VyV2hlbiBjbGF1c2Ugb2YgYSB0cmlnZ2VyIGdpdmVu IHRoZSBwZ190cmlnZ2VyIHJlY29yZCBhbmQKKyAqIHRoZSBleHByZXNzaW9uIHRyZWUgKGluIG5v ZGVUb1N0cmluZygpIHJlcHJlc2VudGF0aW9uKSBmcm9tIHBnX3RyaWdnZXIudGdxdWFsCisgKiBm b3IgdGhlIHRyaWdnZXIncyBXSEVOIGNvbmRpdGlvbi4KKyAqLworY2hhciAqCitwZ19nZXRfdHJp Z2dlcl93aGVuY2xhdXNlKEZvcm1fcGdfdHJpZ2dlciB0cmlncmVjLCBOb2RlICp3aGVuQ2xhdXNl LCBib29sIHByZXR0eSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJY2hhcgkJcmVsa2luZDsK KwlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsKKwlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOworCVJh bmdlVGJsRW50cnkgKm9sZHJ0ZTsKKwlSYW5nZVRibEVudHJ5ICpuZXdydGU7CisKKwlpbml0U3Ry aW5nSW5mbygmYnVmKTsKKworCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQodHJpZ3JlYy0+dGdy ZWxpZCk7CisKKwkvKiBCdWlsZCBtaW5pbWFsIE9MRCBhbmQgTkVXIFJURXMgZm9yIHRoZSByZWwg Ki8KKwlvbGRydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKwlvbGRydGUtPnJ0ZWtpbmQg PSBSVEVfUkVMQVRJT047CisJb2xkcnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7CisJb2xk cnRlLT5yZWxraW5kID0gcmVsa2luZDsKKwlvbGRydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJvbGQi LCBOSUwpOworCW9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7CisJb2xkcnRlLT5sYXRlcmFs ID0gZmFsc2U7CisJb2xkcnRlLT5pbmggPSBmYWxzZTsKKwlvbGRydGUtPmluRnJvbUNsID0gdHJ1 ZTsKKworCW5ld3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOworCW5ld3J0ZS0+cnRla2lu ZCA9IFJURV9SRUxBVElPTjsKKwluZXdydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKKwlu ZXdydGUtPnJlbGtpbmQgPSByZWxraW5kOworCW5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm5l dyIsIE5JTCk7CisJbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsKKwluZXdydGUtPmxhdGVy YWwgPSBmYWxzZTsKKwluZXdydGUtPmluaCA9IGZhbHNlOworCW5ld3J0ZS0+aW5Gcm9tQ2wgPSB0 cnVlOworCisJLyogQnVpbGQgdHdvLWVsZW1lbnQgcnRhYmxlICovCisJbWVtc2V0KCZkcG5zLCAw LCBzaXplb2YoZHBucykpOworCWRwbnMucnRhYmxlID0gbGlzdF9tYWtlMihvbGRydGUsIG5ld3J0 ZSk7CisJZHBucy5jdGVzID0gTklMOworCXNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwgTlVM TCk7CisJc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRwbnMpOworCisJLyogU2V0IHVwIGNvbnRl eHQgd2l0aCBvbmUtZGVlcCBuYW1lc3BhY2Ugc3RhY2sgKi8KKwljb250ZXh0LmJ1ZiA9ICZidWY7 CisJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7CisJY29udGV4dC53aW5k b3dDbGF1c2UgPSBOSUw7CisJY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKKwljb250ZXh0LnZh cnByZWZpeCA9IHRydWU7CisJY29udGV4dC5wcmV0dHlGbGFncyA9IHByZXR0eSA/IFBSRVRUWUZM QUdfUEFSRU4gfCBQUkVUVFlGTEFHX0lOREVOVCA6IFBSRVRUWUZMQUdfSU5ERU5UOworCWNvbnRl eHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7CisJY29udGV4dC5pbmRlbnRMZXZl bCA9IFBSRVRUWUlOREVOVF9TVEQ7CisJY29udGV4dC5zcGVjaWFsX2V4cHJraW5kID0gRVhQUl9L SU5EX05PTkU7CisKKwlnZXRfcnVsZV9leHByKHdoZW5DbGF1c2UsICZjb250ZXh0LCBmYWxzZSk7 CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKIC8qIC0tLS0tLS0tLS0KICAqIHBnX2dldF9pbmRl eGRlZgkJCS0gR2V0IHRoZSBkZWZpbml0aW9uIG9mIGFuIGluZGV4CiAgKgpAQCAtMTg4MCw2ICsx OTgxLDEzIEBAIHBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0 eSkKIAlyZXR1cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCBwcmV0dHlGbGFncywg dHJ1ZSwgZmFsc2UpOwogfQogCisvKiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmVwb3J0cyB0aGUg ZnVsbCBwYXJ0aXRpb24ga2V5IGRlZmluaXRpb24gKi8KK2NoYXIgKgorcGdfZ2V0X3BhcnRrZXlk ZWZfc2ltcGxlKE9pZCByZWxpZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2Vy KHJlbGlkLCAwLCBmYWxzZSwgZmFsc2UpOworfQorCiAvKgogICogSW50ZXJuYWwgd29ya2hvcnNl IHRvIGRlY29tcGlsZSBhIHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlvbi4KICAqLwpAQCAtMjEzMSw2 ICsyMjM5LDE1IEBAIHBnX2dldF9jb25zdHJhaW50ZGVmX2V4dChQR19GVU5DVElPTl9BUkdTKQog CVBHX1JFVFVSTl9URVhUX1Aoc3RyaW5nX3RvX3RleHQocmVzKSk7CiB9CiAKKy8qCisgKiBJbnRl cm5hbCB2ZXJzaW9uIHRoYXQgcmV0dXJucyB0aGUgZGVmaW5pdGlvbiBvZiBhIENPTlNUUkFJTlQg Y29tbWFuZAorICovCitjaGFyICoKK3BnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxl KE9pZCBjb25zdHJhaW50SWQpCit7CisJcmV0dXJuIHBnX2dldF9jb25zdHJhaW50ZGVmX3dvcmtl cihjb25zdHJhaW50SWQsIGZhbHNlLCAwLCBmYWxzZSk7Cit9CisKIC8qCiAgKiBJbnRlcm5hbCB2 ZXJzaW9uIHRoYXQgcmV0dXJucyBhIGZ1bGwgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5U IGNvbW1hbmQKICAqLwpAQCAtMzUwMSw3ICszNjE4LDEyIEBAIHBnX2dldF9mdW5jdGlvbl9hcmdf ZGVmYXVsdChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9URVhUX1Aoc3RyaW5nX3RvX3Rl eHQoc3RyKSk7CiB9CiAKLXN0YXRpYyB2b2lkCisvKgorICogUHJvZHVjZSB0aGUgZm9ybWF0dGVk IFNRTCBib2R5IChub3QgdGhlIHdob2xlIGZ1bmN0aW9uIGRlZmluaXRpb24pCisgKiBvZiBhIGZ1 bmN0aW9uIGdpdmVuIHRoZSBwZ19wcm9jIHR1cGxlLiBTYXZlIHRoZSBmb3JtYXR0ZWQgU1FMIGlu IHRoZQorICogZ2l2ZW4gU3RyaW5nSW5mby4KKyAqLwordm9pZAogcHJpbnRfZnVuY3Rpb25fc3Fs Ym9keShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApCiB7CiAJaW50CQkJbnVtYXJn czsKQEAgLTExMzU3LDcgKzExNDc5LDcgQEAgZ2V0X3RhYmxlc2FtcGxlX2RlZihUYWJsZVNhbXBs ZUNsYXVzZSAqdGFibGVzYW1wbGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCkKICAqIGFjdHVh bF9kYXRhdHlwZS4gIChJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzIGJlaGF2aW9yLCBqdXN0IHBhc3MK ICAqIEludmFsaWRPaWQgZm9yIGFjdHVhbF9kYXRhdHlwZS4pCiAgKi8KLXN0YXRpYyB2b2lkCit2 b2lkCiBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAog CQkJCSBTdHJpbmdJbmZvIGJ1ZikKIHsKQEAgLTExNzUxLDcgKzExODczLDcgQEAgZ2VuZXJhdGVf cXVhbGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKQogICoKICAqIFRoZSByZXN1bHQgaW5j bHVkZXMgYWxsIG5lY2Vzc2FyeSBxdW90aW5nIGFuZCBzY2hlbWEtcHJlZml4aW5nLgogICovCi1z dGF0aWMgY2hhciAqCitjaGFyICoKIGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwg aW50IG5hcmdzLCBMaXN0ICphcmduYW1lcywgT2lkICphcmd0eXBlcywKIAkJCQkJICAgYm9vbCBo YXNfdmFyaWFkaWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAogCQkJCQkgICBQYXJzZUV4cHJLaW5k IHNwZWNpYWxfZXhwcmtpbmQpCkBAIC0xMjEzNyw3ICsxMjI1OSw3IEBAIGdldF9yZWxvcHRpb25z KFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKQogLyoKICAqIEdlbmVyYXRlIGEgQyBz dHJpbmcgcmVwcmVzZW50aW5nIGEgcmVsYXRpb24ncyByZWxvcHRpb25zLCBvciBOVUxMIGlmIG5v bmUuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZmxhdHRlbl9yZWxvcHRpb25zKE9pZCBy ZWxpZCkKIHsKIAljaGFyCSAgICpyZXN1bHQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK aW5kZXggZDc2MzQxOWMwZC4uYjM3ZDkzYzhjMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBA IC0xMTg2OSw0ICsxMTg2OSwxMCBAQAogICBwcm9yZXR0eXBlID0+ICdieXRlYScsIHByb2FyZ3R5 cGVzID0+ICdwZ19icmluX21pbm1heF9tdWx0aV9zdW1tYXJ5JywKICAgcHJvc3JjID0+ICdicmlu X21pbm1heF9tdWx0aV9zdW1tYXJ5X3NlbmQnIH0sCiAKK3sgb2lkID0+ICc0NjQyJywgZGVzY3Ig PT4gJ2RlcGFyc2UgdGhlIERETCBjb21tYW5kIGludG8gSlNPTiBmb3JtYXQgc3RyaW5nJywKKyAg cHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicsIHByb3JldHR5cGUgPT4gJ3RleHQnLAor ICBwcm9hcmd0eXBlcyA9PiAncGdfZGRsX2NvbW1hbmQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNl X3RvX2pzb24nIH0sCit7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdleHBhbmQgSlNPTiBmb3Jt YXQgRERMIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQnLAorICBwcm9uYW1lID0+ICdkZGxfZGVwYXJz ZV9leHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9 PiAndGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnIH0sCiBdCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmggYi9zcmMvaW5j bHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmgKaW5kZXggMjAxYjE5ZjhiNy4uNDZkMTgzNzYw YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29sbGF0aW9uY21kcy5oCisrKyBi L3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaApAQCAtMTgsNyArMTgsOCBAQAog I2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0YWRkcmVzcy5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJz ZV9ub2RlLmgiCiAKLWV4dGVybiBPYmplY3RBZGRyZXNzIERlZmluZUNvbGxhdGlvbihQYXJzZVN0 YXRlICpwc3RhdGUsIExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLCBib29sIGlmX25vdF9l eGlzdHMpOworZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUg KnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsCisJCQkJCQkJCQkgIGJvb2wg aWZfbm90X2V4aXN0cywgT2JqZWN0QWRkcmVzcyAqZnJvbV9jb2xsaWQpOwogZXh0ZXJuIHZvaWQg SXNUaGVyZUNvbGxhdGlvbkluTmFtZXNwYWNlKGNvbnN0IGNoYXIgKmNvbGxuYW1lLCBPaWQgbnNw T2lkKTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIEFsdGVyQ29sbGF0aW9uKEFsdGVyQ29sbGF0aW9u U3RtdCAqc3RtdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNl LmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCmluZGV4IGIzYjA0Y2NmYTkuLmMy YjFjYTMyZjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKKysr IGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaApAQCAtNTQsNiArNTQsNyBAQCB0eXBl ZGVmIHN0cnVjdCB4bF9zZXFfcmVjCiBleHRlcm4gaW50NjQgbmV4dHZhbF9pbnRlcm5hbChPaWQg cmVsaWQsIGJvb2wgY2hlY2tfcGVybWlzc2lvbnMpOwogZXh0ZXJuIERhdHVtIG5leHR2YWwoUEdf RlVOQ1RJT05fQVJHUyk7CiBleHRlcm4gTGlzdCAqc2VxdWVuY2Vfb3B0aW9ucyhPaWQgcmVsaWQp OworZXh0ZXJuIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBnZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBz ZXF1ZW5jZUlkKTsKIAogZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lU2VxdWVuY2UoUGFyc2VT dGF0ZSAqcHN0YXRlLCBDcmVhdGVTZXFTdG10ICpzZXEpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3Mg QWx0ZXJTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2VxU3RtdCAqc3RtdCk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVkZS90 Y29wL2RkbF9kZXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u OWMyNTQ5Yzk0YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFy c2UuaApAQCAtMCwwICsxLDIzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVw YXJzZS5oCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5 OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9p bmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisj aWZuZGVmIERETF9ERVBBUlNFX0gKKyNkZWZpbmUgRERMX0RFUEFSU0VfSAorCisjaW5jbHVkZSAi dGNvcC9kZXBhcnNlX3V0aWxpdHkuaCIKKworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9j b21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOworZXh0ZXJu IGNoYXIgKmRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKK2V4dGVybiBj aGFyICpkZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3Qg Y2hhciAqb2JqZWN0dHlwZSwKKwkJCQkJCQkJICBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOworCisK KyNlbmRpZgkJCQkJCQkvKiBERExfREVQQVJTRV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxp dHkuaAppbmRleCA5NGRlMTNkOTkwLi5iNTMyOTRiZjU3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91 dGlsaXR5LmgKQEAgLTYyLDYgKzYyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFu ZAogCQl7CiAJCQlPaWQJCQlvYmplY3RJZDsKIAkJCU9pZAkJCWNsYXNzSWQ7CisJCQlib29sCQly ZXdyaXRlOwogCQkJTGlzdAkgICAqc3ViY21kczsKIAkJfQkJCWFsdGVyVGFibGU7CiAKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNvcC91dGls aXR5LmgKaW5kZXggZjlkYWY1Yjc0NC4uZjkyYmJmODg0MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdGNvcC91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC91dGlsaXR5LmgKQEAgLTk5 LDYgKzk5LDggQEAgZXh0ZXJuIFF1ZXJ5ICpVdGlsaXR5Q29udGFpbnNRdWVyeShOb2RlICpwYXJz ZXRyZWUpOwogCiBleHRlcm4gQ29tbWFuZFRhZyBDcmVhdGVDb21tYW5kVGFnKE5vZGUgKnBhcnNl dHJlZSk7CiAKK2V4dGVybiBjb25zdCBjaGFyICpzdHJpbmdpZnlfb2JqdHlwZShPYmplY3RUeXBl IG9ianR5cGUsIGJvb2wgaXNncmFudCk7CisKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCiBD cmVhdGVDb21tYW5kTmFtZShOb2RlICpwYXJzZXRyZWUpCiB7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS91dGlscy9hY2wuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbC5oCmluZGV4IDY5ZWI0Mzcz NzYuLmMwZTIwMmI0NGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2FjbC5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL2FjbC5oCkBAIC0yMDksNiArMjA5LDggQEAgZXh0ZXJuIEFjbE1v ZGUgYWNsbWFzayhjb25zdCBBY2wgKmFjbCwgT2lkIHJvbGVpZCwgT2lkIG93bmVySWQsCiAJCQkJ CSAgIEFjbE1vZGUgbWFzaywgQWNsTWFza0hvdyBob3cpOwogZXh0ZXJuIGludAlhY2xtZW1iZXJz KGNvbnN0IEFjbCAqYWNsLCBPaWQgKipyb2xlaWRzKTsKIAorZXh0ZXJuIGNvbnN0IGNoYXIgKnBy aXZpbGVnZV90b19zdHJpbmcoQWNsTW9kZSBwcml2aWxlZ2UpOworCiBleHRlcm4gYm9vbCBoYXNf cHJpdnNfb2Zfcm9sZShPaWQgbWVtYmVyLCBPaWQgcm9sZSk7CiBleHRlcm4gYm9vbCBtZW1iZXJf Y2FuX3NldF9yb2xlKE9pZCBtZW1iZXIsIE9pZCByb2xlKTsKIGV4dGVybiB2b2lkIGNoZWNrX2Nh bl9zZXRfcm9sZShPaWQgbWVtYmVyLCBPaWQgcm9sZSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRl cm5hbC5oCmluZGV4IDM2MTI4NGQ4ZWIuLjRlMDIwZWY0YWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNo a19pbnRlcm5hbC5oCkBAIC0zOSw2ICszOSw3IEBAIHR5cGVkZWYgc3RydWN0CiAJTGlzdAkgICAq Z3JhbnRlZXM7CiAJYm9vbAkJZ3JhbnRfb3B0aW9uOwogCURyb3BCZWhhdmlvciBiZWhhdmlvcjsK KwlPaWQJCQlncmFudG9yX3VpZDsKIH0gSW50ZXJuYWxHcmFudDsKIAogCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMu aAppbmRleCAxNTM3M2JhNjhmLi42Y2ZhNjM5N2M4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9idWlsdGlucy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKQEAgLTEx OSwxMCArMTE5LDEyIEBAIGV4dGVybiBEYXR1bSBudW1lcmljX2Zsb2F0OF9ub19vdmVyZmxvdyhQ R19GVU5DVElPTl9BUkdTKTsKICNkZWZpbmUgRk9STUFUX1RZUEVfRk9SQ0VfUVVBTElGWQkweDA0 CS8qIGZvcmNlIHF1YWxpZmljYXRpb24gb2YgdHlwZSAqLwogI2RlZmluZSBGT1JNQVRfVFlQRV9J TlZBTElEX0FTX05VTEwJMHgwOAkvKiBOVUxMIGlmIHVuZGVmaW5lZCAqLwogZXh0ZXJuIGNoYXIg KmZvcm1hdF90eXBlX2V4dGVuZGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwgYml0czE2 IGZsYWdzKTsKK2V4dGVybiBjaGFyICpmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lkIHByb2NlZHVy ZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSk7CiAKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9i ZShPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2JlX3F1YWxpZmllZChP aWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX3dpdGhfdHlwZW1vZChPaWQg dHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOworZXh0ZXJuIGNoYXIgKnByaW50VHlwbW9kKGNvbnN0 IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCk7CiAKIGV4dGVybiBp bnQzMiB0eXBlX21heGltdW1fc2l6ZShPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOwogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0 aWxzL3J1bGV1dGlscy5oCmluZGV4IDdkNDg5NzE4YTMuLmVjNmVmODAxNjQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1 bGV1dGlscy5oCkBAIC0xMyw5ICsxMywxMiBAQAogI2lmbmRlZiBSVUxFVVRJTFNfSAogI2RlZmlu ZSBSVUxFVVRJTFNfSAogCisjaW5jbHVkZSAiYWNjZXNzL2h0dXAuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgogI2luY2x1ZGUgIm5v ZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCisjaW5jbHVkZSAi cGFyc2VyL3BhcnNlX25vZGUuaCIKIAogc3RydWN0IFBsYW47CQkJCQkvKiBhdm9pZCBpbmNsdWRp bmcgcGxhbm5vZGVzLmggaGVyZSAqLwogc3RydWN0IFBsYW5uZWRTdG10OwpAQCAtMjMsMTIgKzI2 LDIwIEBAIHN0cnVjdCBQbGFubmVkU3RtdDsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRl Zl9zdHJpbmcoT2lkIGluZGV4cmVsaWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9j b2x1bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHByZXR0eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0 X3RyaWdnZXJfd2hlbmNsYXVzZShGb3JtX3BnX3RyaWdnZXIgdHJpZ3JlYywKKwkJCQkJCQkJCSAg IE5vZGUgKndoZW5DbGF1c2UsIGJvb2wgcHJldHR5KTsKIGV4dGVybiBjaGFyICpwZ19nZXRfcXVl cnlkZWYoUXVlcnkgKnF1ZXJ5LCBib29sIHByZXR0eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3Zp ZXdkZWZfaW50ZXJuYWwoT2lkIHZpZXdvaWQpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRr ZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJldHR5KTsKK2V4dGVybiBjaGFyICpwZ19n ZXRfcGFydGtleWRlZl9zaW1wbGUoT2lkIHJlbGlkKTsKIGV4dGVybiBjaGFyICpwZ19nZXRfcGFy dGNvbnN0cmRlZl9zdHJpbmcoT2lkIHBhcnRpdGlvbklkLCBjaGFyICphbGlhc25hbWUpOwogCiBl eHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZChPaWQgY29uc3RyYWludElk KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShPaWQg Y29uc3RyYWludElkKTsKK2V4dGVybiB2b2lkIHBnX2dldF9ydWxlZGVmX2RldGFpbGVkKERhdHVt IGV2X3F1YWwsIERhdHVtIGV2X2FjdGlvbiwKKwkJCQkJCQkJCWNoYXIgKip3aGVyZUNsYXVzZSwg TGlzdCAqKmFjdGlvbnMpOworCiBleHRlcm4gY2hhciAqZGVwYXJzZV9leHByZXNzaW9uKE5vZGUg KmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJYm9vbCBmb3JjZXByZWZpeCwgYm9vbCBz aG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFyc2VfY29udGV4dF9mb3IoY29uc3QgY2hh ciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNDAsOCArNTEsMTYgQEAgZXh0ZXJuIExpc3Qg KnNlbGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4cGxhaW4oTGlzdCAqcnRhYmxlLAogCQkJCQkJCQkJ CQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX2NvbGxhdGlv bl9uYW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX29wY2xhc3NfbmFtZShP aWQgb3BjbGFzcyk7CitleHRlcm4gY2hhciAqZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShPaWQgZnVu Y2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLAorCQkJCQkJCQkJT2lkICphcmd0eXBlcywg Ym9vbCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJCQlib29sICp1c2VfdmFyaWFkaWNfcCwKKwkJCQkJ CQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCk7CiBleHRlcm4gY2hhciAqZ2V0X3Jh bmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91bmRfZGF0dW1zKTsKK2V4dGVybiB2b2lkIGdl dF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCisJCQkJCQkJ IFN0cmluZ0luZm8gYnVmKTsKK2V4dGVybiBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJl bGlkKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX3N0cmluZyhPaWQg c3RhdGV4dGlkKTsKK2V4dGVybiB2b2lkIHByaW50X2Z1bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5m byBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIAogI2VuZGlmCQkJCQkJCS8qIFJVTEVVVElMU19I ICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNz Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CmluZGV4 IDI1YzE3NGYyNzUuLmZjNDJkNDE4YmYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv b2JqZWN0X2FkZHJlc3Mub3V0CkBAIC00OTYsNyArNDk2LDcgQEAgb3BlcmF0b3IgZmFtaWx5fHBn X2NhdGFsb2d8aW50ZWdlcl9vcHN8cGdfY2F0YWxvZy5pbnRlZ2VyX29wcyBVU0lORyBidHJlZXx0 CiBwb2xpY3l8TlVMTHxOVUxMfGdlbnBvbCBvbiBhZGRyX25zcC5nZW50YWJsZXx0CiBzdGF0aXN0 aWNzIG9iamVjdHxhZGRyX25zcHxnZW50YWJsZV9zdGF0fGFkZHJfbnNwLmdlbnRhYmxlX3N0YXR8 dAogY29sbGF0aW9ufHBnX2NhdGFsb2d8ImRlZmF1bHQifHBnX2NhdGFsb2cuImRlZmF1bHQifHQK LXRyYW5zZm9ybXxOVUxMfE5VTEx8Zm9yIGludGVnZXIgb24gbGFuZ3VhZ2Ugc3FsfHQKK3RyYW5z Zm9ybXxOVUxMfE5VTEx8Zm9yIGludGVnZXIgbGFuZ3VhZ2Ugc3FsfHQKIHRleHQgc2VhcmNoIGRp Y3Rpb25hcnl8YWRkcl9uc3B8YWRkcl90c19kaWN0fGFkZHJfbnNwLmFkZHJfdHNfZGljdHx0CiB0 ZXh0IHNlYXJjaCBwYXJzZXJ8YWRkcl9uc3B8YWRkcl90c19wcnN8YWRkcl9uc3AuYWRkcl90c19w cnN8dAogdGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbnxhZGRyX25zcHxhZGRyX3RzX2NvbmZ8YWRk cl9uc3AuYWRkcl90c19jb25mfHQKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNjBjNzFk MDVmZS4uZmUzMzBiNDA4NCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2MTAsNiAr MTYxMCw5IEBAIE9TSW5mbwogT1NTTENpcGhlcgogT1NTTERpZ2VzdAogT1ZFUkxBUFBFRAorT2Jq RWxlbQorT2JqVHJlZQorT2JqVHlwZQogT2JqZWN0QWNjZXNzRHJvcAogT2JqZWN0QWNjZXNzTmFt ZXNwYWNlU2VhcmNoCiBPYmplY3RBY2Nlc3NQb3N0QWx0ZXIKQEAgLTMxNzcsNiArMzE4MCw3IEBA IGNvbXBhcmVfY29udGV4dAogY29uZmlnX3Zhcl92YWx1ZQogY29udGFpbl9hZ2dzX29mX2xldmVs X2NvbnRleHQKIGNvbnZlcnRfdGVzdGV4cHJfY29udGV4dAorY29udlNwZWNpZmllcgogY29weV9k YXRhX2Rlc3RfY2IKIGNvcHlfZGF0YV9zb3VyY2VfY2IKIGNvcmVfWVlTVFlQRQotLSAKMi4zOC4x Cgo= --000000000000dc11ed05f034f7ed Content-Type: application/octet-stream; name="v54-0007-Introduce-the-test_ddl_deparse_regress-test-module.patch" Content-Disposition: attachment; filename="v54-0007-Introduce-the-test_ddl_deparse_regress-test-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbvamj7z6 RnJvbSA5MmE4ZGFmYjkwNWE0N2QzOGRkNzMwMDNmMTRkMTIwNzJjMjlhMjM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTkgRGVjIDIwMjIgMDc6NTc6MjggLTA1MDAKU3ViamVjdDogW1BBVENI IDcvN10gSW50cm9kdWNlIHRoZSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgdGVzdCBtb2R1bGUu CgpUaGlzIHRlc3RpbmcgbW9kdWxlIGFpbXMgdG8gYWNoaWV2ZSB0aGUgZm9sbG93aW5nIGZvdXIg dGVzdGluZyBnb2FscyBmb3IgdGhlIERETCBkZXBhcnNlcjoKMS4gVGVzdCB0aGF0IHRoZSBnZW5l cmF0ZWQgSlNPTiBibG9iIGlzIGV4cGVjdGVkIHVzaW5nIFNRTCB0ZXN0cy4KMi4gVGVzdCB0aGF0 IHRoZSByZS1mb3JtZWQgRERMIGNvbW1hbmQgaXMgZXhwZWN0ZWQgdXNpbmcgU1FMIHRlc3RzLgoz LiBUZXN0IHRoYXQgdGhlIHJlLWZvcm1lZCBEREwgY29tbWFuZCBoYXMgdGhlIHNhbWUgZWZmZWN0 IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kIGJ5IGNvbXBhcmluZwogICB0aGUgcmVzdWx0cyBvZiBw Z19kdW1wLCB1c2luZyB0aGUgU1FMIHRlc3RzIGluIDEgYW5kIDIuCjQuIFRlc3QgdGhhdCBuZXcg RERMIHN5bnRheCBpcyBoYW5kbGVkIGJ5IHRoZSBEREwgZGVwYXJzZXIgYnkgY2FwdHVyaW5nIGFu ZCBkZXBhcmluZyBEREwgY29tbWFuZHMKICAgcmFuIGJ5IHBnX3JlZ3Jlc3MuCgoxIGFuZCAyIGlz IHRlc3RlZCB3aXRoIFNRTCB0ZXN0cywgYnkgcHJpbnRpbmcgdGhlIGRlcGFyc2VkIEpTT04gYmxv YiBhbmQgdGhlIHJlLWZvcm1lZCBjb21tYW5kLgoKR29hbCAzIGlzIHRlc3RlZCB3aXRoIFRBUCBm cmFtZXdvcmsgaW4gdC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbAoKR29hbCA0IGlzIHRl c3RlZCB3aXRoIFRBUCBmcmFtZXdvcmsgYW5kIHBnX3JlZ3Jlc3MgaW4gMDAyX3JlZ3Jlc3NfdGVz dHMucGwsIHRoZSBleGVjdXRpb24gaXMgY3VycmVudGx5IGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBp dCB3aWxsIGZhaWwgZHVlIHVuaW1wbGVtZW50ZWQgY29tbWFuZHMgaW4gdGhlIERETCBkZXBhcnNl ci4KLS0tCiBzcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy8uZ2l0aWdub3JlICAgICAgIHwgICA0 ICsKIC4uLi9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZSB8ICA0MyAr KysrCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL1JFQURNRS5tZCAgICAgICAgfCAgMjIg KysKIC4uLi9leHBlY3RlZC9jcmVhdGVfZXh0ZW5zaW9uLm91dCAgICAgICAgICAgICB8ICAgNiAr CiAuLi4vZXhwZWN0ZWQvY3JlYXRlX3NjaGVtYS5vdXQgICAgICAgICAgICAgICAgfCAgMjIgKysK IC4uLi9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0ICAgICAgICAgICAgICAgICB8ICAzOSArKysr CiAuLi4vZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQgICAgICAgICAgICAgfCAgMTggKysK IC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQgICAgICB8ICA0MiArKysr CiAuLi4vc3FsL2NyZWF0ZV9leHRlbnNpb24uc3FsICAgICAgICAgICAgICAgICAgfCAgIDUgKwog Li4uL3NxbC9jcmVhdGVfc2NoZW1hLnNxbCAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsrCiAu Li4vc3FsL2NyZWF0ZV90YWJsZS5zcWwgICAgICAgICAgICAgICAgICAgICAgfCAgMTUgKysKIC4u Li9zcWwvdGVzdF9kZGxfZGVwYXJzZS5zcWwgICAgICAgICAgICAgICAgICB8ICAyMCArKwogLi4u L3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwgICAgICAgICAgIHwgMTgxICsrKysrKysr KysrKysrKwogLi4uL3QvMDAyX3JlZ3Jlc3NfdGVzdHMucGwgICAgICAgICAgICAgICAgICAgIHwg MjA3ICsrKysrKysrKysrKysrKysrKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4w LnNxbCAgICAgICAgIHwgICA5ICsKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYyAgICAg ICAgICAgICAgICB8ICA1OSArKysrKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jb250 cm9sICAgICAgICAgIHwgICA0ICsKIDE4IGZpbGVzIGNoYW5nZWQsIDcxMyBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvUkVBRE1FLm1kCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0 ZWQvY3JlYXRlX2V4dGVuc2lvbi5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfc2NoZW1hLm91dAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC90ZXN0X2RkbF9kZXBh cnNlLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9leHRlbnNpb24uc3FsCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3Mvc3FsL2NyZWF0ZV9zY2hlbWEuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5zcWwKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9z cWwvdGVzdF9kZGxfZGVwYXJzZS5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRz LnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MvdC8wMDJfcmVncmVzc190ZXN0cy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90 ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzLmNvbnRyb2wKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQppbmRleCBjNjI5Y2JlMzgzLi5j MjcyYzY0YTIwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKQEAgLTE4LDYgKzE4LDcgQEAgU1VCRElSUyA9IFwKIAkJ ICB0ZXN0X2NvcHlfY2FsbGJhY2tzIFwKIAkJICB0ZXN0X2N1c3RvbV9ybWdycyBcCiAJCSAgdGVz dF9kZGxfZGVwYXJzZSBcCisJCSAgdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIFwKIAkJICB0ZXN0 X2V4dGVuc2lvbnMgXAogCQkgIHRlc3RfZ2lucG9zdGluZ2xpc3QgXAogCQkgIHRlc3RfaW50ZWdl cnNldCBcCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy8uZ2l0aWdub3JlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi41ZGNi M2ZmOTcyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDQgQEAKKyMgR2VuZXJhdGVkIHN1YmRp cmVjdG9yaWVzCisvbG9nLworL3Jlc3VsdHMvCisvdG1wX2NoZWNrLwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zOGUyMDdhYjYyCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUKQEAgLTAs MCArMSw0MyBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgTWFrZWZpbGUgZm9yIHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzCisjCisjIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2Yg Q2FsaWZvcm5pYQorIworIyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy9NYWtlZmlsZQorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitNT0RVTEVTID0gdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzCitQR0ZJTEVERVNDID0gInRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyAt IHJlZ3Jlc3Npb24gdGVzdGluZyBmb3IgRERMIGRlcGFyc2luZyIKKworRVhURU5TSU9OID0gdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzCitEQVRBID0gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0x LjAuc3FsCisKKyMgdGVzdF9kZGxfZGVwYXJzZSBtdXN0IGJlIGZpcnN0CitSRUdSRVNTID0gdGVz dF9kZGxfZGVwYXJzZSBcCisJY3JlYXRlX2V4dGVuc2lvbiBcCisJY3JlYXRlX3NjaGVtYSBcCisJ Y3JlYXRlX3RhYmxlCisKK2V4cG9ydCBSRUdSRVNTCisKK0VYVFJBX0lOU1RBTEwgPSBjb250cmli L3BnX3N0YXRfc3RhdGVtZW50cworCitUQVBfVEVTVFMgPSAxCisKK2lmZGVmIFVTRV9QR1hTCitQ R19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hz KQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcwordG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KK2luY2x1ZGUg JCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGly KS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgorCitSRUdSRVNTX1NITElCPSQoYWJz X3RvcF9idWlsZGRpcikvc3JjL3Rlc3QvcmVncmVzcy9yZWdyZXNzJChETFNVRkZJWCkKK2V4cG9y dCBSRUdSRVNTX1NITElCCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy9SRUFETUUubWQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uY2MyNTE5ODk1YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL1JFQURNRS5tZApAQCAtMCwwICsxLDIyIEBACisjIFRlc3Rpbmcg aGFybmVzcyBmb3IgRERMIGRlcGFyc2VyCisKKyMjIFRlc3RpbmcgZ29hbHMKKworRERMIERlcGFy c2VyIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGVuY29kZSB0aGUgb3JpZ2luYWwgRERMIGNvbW1h bmQgdG8gYSBKU09OIHN0cmluZywgdGhlbiBkZWNvZGUgaXQgdG8gYSBmdWxseSBzY2hlbWEtcXVh bGlmaWVkIERETCBjb21tYW5kIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGhhdmUgdGhlIHNhbWUgZWZm ZWN0IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kLiBUaGlzIHRlc3RpbmcgbW9kdWxlIGFpbXMgdG8g YWNoaWV2ZSB0aGUgZm9sbG93aW5nIGZvdXIgdGVzdGluZyBmb3IgdGhlIERETCBkZXBhcnNlcjoK KworMS4gVGVzdCB0aGF0IHRoZSBnZW5lcmF0ZWQgSlNPTiBibG9iIGlzIGV4cGVjdGVkIHVzaW5n IFNRTCB0ZXN0cy4KKzIuIFRlc3QgdGhhdCB0aGUgcmUtZm9ybWVkIERETCBjb21tYW5kIGlzIGV4 cGVjdGVkIHVzaW5nIFNRTCB0ZXN0cy4KKzMuIFRlc3QJdGhhdCB0aGUgcmUtZm9ybWVkIERETCBj b21tYW5kIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIG9yaWdpbmFsIGNvbW1hbmQKKyAgIGJ5 IGNvbXBhcmluZwl0aGUgcmVzdWx0cyBvZiBwZ19kdW1wLAl1c2luZyB0aGUgU1FMIHRlc3RzIGlu IDEgYW5kIDIuCis0LiBUZXN0CXRoYXQgbmV3IERETCBzeW50YXggaXMgaGFuZGxlZCBieSB0aGUg RERMIGRlcGFyc2VyIGJ5IGNhcHR1cmluZyBhbmQgZGVwYXJpbmcKKyAgIERETCBjb21tYW5kcwly YW4gYnkgcGdfcmVncmVzcy4KKworMSBhbmQgMiBpcyB0ZXN0ZWQgd2l0aCBTUUwgdGVzdHMsIGJ5 IG5vdGljaW5nIHRoZSBkZXBhcnNlZCBKU09OIGJsb2IgYW5kIHRoZSByZS1mb3JtZWQgY29tbWFu ZC4KKworR29hbCAzIGlzIHRlc3RlZCB3aXRoIFRBUCBmcmFtZXdvcmsgaW4gdC8wMDFfY29tcGFy ZV9kdW1wZWRfcmVzdWx0cy5wbAorCitHb2FsIDQgaXMgdGVzdGVkIHdpdGggVEFQIGZyYW1ld29y ayBhbmQgcGdfcmVncmVzcyBpbiAwMDJfcmVncmVzc190ZXN0cy5wbAorCisjIyBVc2FnZQorCitS dW4gYG1ha2UgY2hlY2tgLCBpdCB3aWxsIHJ1biB0aGUgU1FMIHRlc3RzIGZpcnN0LCB0aGVuIGl0 IHdpbGwgcnVuIHRoZSBUQVAgdGVzdHMuIFRoZSBleGVjdXRpb24gb2YgMDAyX3JlZ3Jlc3NfdGVz dHMucGwgaXMgY3VycmVudGx5IGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBpdCB3aWxsIGZhaWwgZHVl IHRvIHVuaW1wbGVtZW50ZWQgY29tbWFuZHMgaW4gdGhlIERETCBkZXBhcnNlci4KZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2Ny ZWF0ZV9leHRlbnNpb24ub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2V4dGVuc2lvbi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uMDZjY2M2MmJhOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9leHRlbnNp b24ub3V0CkBAIC0wLDAgKzEsNiBAQAorLS0tCistLS0gQ1JFQVRFX0VYVEVOU0lPTgorLS0tCitD UkVBVEUgRVhURU5TSU9OIHBnX3N0YXRfc3RhdGVtZW50czsKK05PVElDRTogIGRlcGFyc2VkIGpz b246IHsiZm10IjogIkNSRUFURSBFWFRFTlNJT04gJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkg JXtvcHRpb25zOiB9cyIsICJuYW1lIjogInBnX3N0YXRfc3RhdGVtZW50cyIsICJvcHRpb25zIjog W3siZm10IjogIlNDSEVNQSAle3NjaGVtYX1JIiwgInR5cGUiOiAic2NoZW1hIiwgInNjaGVtYSI6 ICJwdWJsaWMifV0sICJpZl9ub3RfZXhpc3RzIjogIiJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29t bWFuZDogQ1JFQVRFIEVYVEVOU0lPTiAgcGdfc3RhdF9zdGF0ZW1lbnRzIFNDSEVNQSBwdWJsaWMK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4 cGVjdGVkL2NyZWF0ZV9zY2hlbWEub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3NjaGVtYS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uMWUwOWRhNTE3MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9zY2hl bWEub3V0CkBAIC0wLDAgKzEsMjIgQEAKKy0tCistLSBDUkVBVEVfU0NIRU1BCistLQorQ1JFQVRF IFNDSEVNQSBmb287CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgU0NI RU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUi OiAiZm9vIiwgImF1dGhvcml6YXRpb24iOiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9OICV7YXV0aG9y aXphdGlvbl9yb2xlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYXV0aG9yaXphdGlvbl9yb2xlIjog bnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDog Q1JFQVRFIFNDSEVNQSAgZm9vIAorQ1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTIGJhcjsKK05P VElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhp c3RzfXMgJXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMiLCAibmFtZSI6ICJiYXIiLCAiYXV0aG9y aXphdGlvbiI6IHsiZm10IjogIkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIs ICJwcmVzZW50IjogZmFsc2UsICJhdXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9l eGlzdHMiOiAiSUYgTk9UIEVYSVNUUyJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JF QVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTIGJhciAKK0NSRUFURSBTQ0hFTUEgYmF6OworTk9USUNF OiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9 cyAle25hbWV9SSAle2F1dGhvcml6YXRpb259cyIsICJuYW1lIjogImJheiIsICJhdXRob3JpemF0 aW9uIjogeyJmbXQiOiAiQVVUSE9SSVpBVElPTiAle2F1dGhvcml6YXRpb25fcm9sZX1JIiwgInBy ZXNlbnQiOiBmYWxzZSwgImF1dGhvcml6YXRpb25fcm9sZSI6IG51bGx9LCAiaWZfbm90X2V4aXN0 cyI6ICIifQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBTQ0hFTUEgIGJheiAK Ky0tIFdpbGwgbm90IGJlIGNyZWF0ZWQsIGFuZCB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZQor LS0gZXZlbnQgdHJpZ2dlcgorQ1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTIGJhejsKK05PVElD RTogIHNjaGVtYSAiYmF6IiBhbHJlYWR5IGV4aXN0cywgc2tpcHBpbmcKK0NSRUFURSBTQ0hFTUEg ZWxlbWVudF90ZXN0CisgIENSRUFURSBUQUJMRSBmb28gKGlkIGludCkKK05PVElDRTogIGRlcGFy c2VkIGpzb246IHsiZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1l fUkgJXthdXRob3JpemF0aW9ufXMiLCAibmFtZSI6ICJlbGVtZW50X3Rlc3QiLCAiYXV0aG9yaXph dGlvbiI6IHsiZm10IjogIkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJw cmVzZW50IjogZmFsc2UsICJhdXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlz dHMiOiAiIn0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgU0NIRU1BICBlbGVt ZW50X3Rlc3QgCitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXtwZXJz aXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9l bGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAl e3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVu dGl0eSI6IHsib2JqbmFtZSI6ICJmb28iLCAic2NoZW1hbmFtZSI6ICJlbGVtZW50X3Rlc3QifSwg ImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIsICJwYXJlbnRz IjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6ICJPTiBDT01N SVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9jb21taXRfdmFs dWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFibGVzcGFj ZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBlcnNpc3RlbmNl IjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNlfSwg InBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259cyIsICJw cmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0aG9kIjogeyJm bXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYWNjZXNz X21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxlbWVudHMiOiBb eyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2Nv bXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5l cmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBl IjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0Iiwg InNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQi LCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6 ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwgImNv bXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIs ICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRl ZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxz ZX19XX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBlbGVtZW50 X3Rlc3QuZm9vIChpZCBwZ19jYXRhbG9nLmludDQgU1RPUkFHRSBwbGFpbiAgICAgKSAgICAgIApk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhw ZWN0ZWQvY3JlYXRlX3RhYmxlLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uZTViNjIyZDBkMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5v dXQKQEAgLTAsMCArMSwzOSBAQAorQ1JFQVRFIFRBQkxFIHNpbXBsZV90YWJsZSgKKyAgICBpZCBp bnQsCisgICAgbmFtZSB2YXJjaGFyKDUpCispOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJm bXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lk ZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFj ZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dp dGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAic2ltcGxlX3RhYmxlIiwgInNj aGVtYW5hbWUiOiAicHVibGljIn0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3Bh cmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29t bWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6 IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAi VEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNl IjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRI IiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04g QlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9 LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInBy ZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAi IiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JB R0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVs bH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiaWQiLCAidHlw ZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNl LCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1 bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIi LCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29s c3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7 Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0 aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZ UyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQg U1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25v dF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJuYW1l IiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIoNSkiLCAidHlwYXJy YXkiOiBmYWxzZSwgInR5cGVuYW1lIjogInZhcmNoYXIiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRh bG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAi bm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAi bmFtZSI6IHsib2JqbmFtZSI6ICJkZWZhdWx0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9 fSwgImNvbHN0b3JhZ2UiOiAiZXh0ZW5kZWQiLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01Q UkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXBy ZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVS QVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX1dfQorTk9USUNFOiAgcmUtZm9ybWVk IGNvbW1hbmQ6IENSRUFURSAgVEFCTEUgIHB1YmxpYy5zaW1wbGVfdGFibGUgKGlkIHBnX2NhdGFs b2cuaW50NCBTVE9SQUdFIHBsYWluICAgICAsIG5hbWUgcGdfY2F0YWxvZy4idmFyY2hhciIoNSkg U1RPUkFHRSBleHRlbmRlZCAgQ09MTEFURSBwZ19jYXRhbG9nLiJkZWZhdWx0IiAgICkgICAgICAK Ky0tIFRlc3QgVGFibGVMaWtlQ2xhdXNlIGlzIGhhbmRsZWQgcHJvcGVybHkKK0NSRUFURSBUQUJM RSBjdGx0MSAoYSB0ZXh0IENIRUNLIChsZW5ndGgoYSkgPiAyKSBQUklNQVJZIEtFWSwgYiB0ZXh0 KTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNl fXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRz OiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0 aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5Ijog eyJvYmpuYW1lIjogImN0bHQxIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0sICJpbmhlcml0cyI6 IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJw cmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29t bWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0s ICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVz ZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0 aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25f YnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZh bHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5H ICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBu dWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7 bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1z ICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVt bn1zIiwgIm5hbWUiOiAiYSIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2Qi OiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUi OiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6 IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7 bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBn X2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVuZGVkIiwgImNvbXByZXNzaW9uIjogeyJm bXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFs c2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZt dCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICIl e25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259 cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1 bW59cyIsICJuYW1lIjogImIiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9k IjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAidGV4dCIsICJzY2hlbWFuYW1l IjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQi OiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSAl e25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAic2NoZW1hbmFtZSI6ICJw Z19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRlbmRlZCIsICJjb21wcmVzc2lvbiI6IHsi Zm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZh bHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJm bXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJmbXQiOiAi Q09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjogImN0bHQxX2FfY2hl Y2siLCAidHlwZSI6ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAiY2hlY2siLCAiZGVmaW5pdGlv biI6ICJDSEVDSyAoKHBnX2NhdGFsb2cubGVuZ3RoKGEpIE9QRVJBVE9SKHBnX2NhdGFsb2cuPikg MikpIn0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAibmFt ZSI6ICJjdGx0MV9wa2V5IiwgInR5cGUiOiAiY29uc3RyYWludCIsICJjb250eXBlIjogInByaW1h cnkga2V5IiwgImRlZmluaXRpb24iOiAiUFJJTUFSWSBLRVkgKGEpIn1dfQorTk9USUNFOiAgcmUt Zm9ybWVkIGNvbW1hbmQ6IENSRUFURSAgVEFCTEUgIHB1YmxpYy5jdGx0MSAoYSBwZ19jYXRhbG9n LnRleHQgU1RPUkFHRSBleHRlbmRlZCAgQ09MTEFURSBwZ19jYXRhbG9nLiJkZWZhdWx0IiAgICwg YiBwZ19jYXRhbG9nLnRleHQgU1RPUkFHRSBleHRlbmRlZCAgQ09MTEFURSBwZ19jYXRhbG9nLiJk ZWZhdWx0IiAgICwgQ09OU1RSQUlOVCBjdGx0MV9hX2NoZWNrIENIRUNLICgocGdfY2F0YWxvZy5s ZW5ndGgoYSkgT1BFUkFUT1IocGdfY2F0YWxvZy4+KSAyKSksIENPTlNUUkFJTlQgY3RsdDFfcGtl eSBQUklNQVJZIEtFWSAoYSkpICAgICAgCitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiA8TlVMTD4K K05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiA8TlVMTD4KK0FMVEVSIFRBQkxFIGN0bHQxIEFM VEVSIENPTFVNTiBhIFNFVCBTVE9SQUdFIE1BSU47CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7 ImZtdCI6ICJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMiLCAi b2JqdHlwZSI6ICJUQUJMRSIsICJzdWJjbWRzIjogW3siZm10IjogIkFMVEVSIENPTFVNTiAle2Nv bHVtbn1JIFNFVCBTVE9SQUdFICV7c3RvcmFnZX1zIiwgInR5cGUiOiAic2V0IHN0b3JhZ2UiLCAi Y29sdW1uIjogImEiLCAic3RvcmFnZSI6ICJtYWluIn1dLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUi OiAiY3RsdDEiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifX0KK05PVElDRTogIHJlLWZvcm1lZCBj b21tYW5kOiBBTFRFUiBUQUJMRSBwdWJsaWMuY3RsdDEgQUxURVIgQ09MVU1OIGEgU0VUIFNUT1JB R0UgbWFpbgorQUxURVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1OIGIgU0VUIFNUT1JBR0UgRVhU RVJOQUw7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJBTFRFUiAle29ianR5cGV9 cyAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMiLCAib2JqdHlwZSI6ICJUQUJMRSIsICJzdWJj bWRzIjogW3siZm10IjogIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVE9SQUdFICV7c3Rv cmFnZX1zIiwgInR5cGUiOiAic2V0IHN0b3JhZ2UiLCAiY29sdW1uIjogImIiLCAic3RvcmFnZSI6 ICJleHRlcm5hbCJ9XSwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogImN0bHQxIiwgInNjaGVtYW5h bWUiOiAicHVibGljIn19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQUxURVIgVEFCTEUg cHVibGljLmN0bHQxIEFMVEVSIENPTFVNTiBiIFNFVCBTVE9SQUdFIGV4dGVybmFsCitDUkVBVEUg VEFCTEUgY3RsdDFfbGlrZSAoTElLRSBjdGx0MSBJTkNMVURJTkcgQUxMKTsKK05PVElDRTogIGRl cGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9u b3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJp dHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nl c3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogImN0 bHQxX2xpa2UiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifSwgImluaGVyaXRzIjogeyJmbXQiOiAi SU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBm YWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9 cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3Bh Y2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxz ZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6 IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10 IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZp bml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3Nf bWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZf bm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtj b2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRp b259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFt ZSI6ICJhIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlw YXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogInRleHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRh bG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAi bm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAi bmFtZSI6IHsib2JqbmFtZSI6ICJkZWZhdWx0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9 fSwgImNvbHN0b3JhZ2UiOiAibWFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNT SU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Np b25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVE IEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0 eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259 cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6 ICJiIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJy YXkiOiBmYWxzZSwgInR5cGVuYW1lIjogInRleHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9n In0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90 X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFt ZSI6IHsib2JqbmFtZSI6ICJkZWZhdWx0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwg ImNvbHN0b3JhZ2UiOiAiZXh0ZXJuYWwiLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVT U0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNz aW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRF RCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtu YW1lfUkgJXtkZWZpbml0aW9ufXMiLCAibmFtZSI6ICJjdGx0MV9hX2NoZWNrIiwgInR5cGUiOiAi Y29uc3RyYWludCIsICJjb250eXBlIjogImNoZWNrIiwgImRlZmluaXRpb24iOiAiQ0hFQ0sgKChw Z19jYXRhbG9nLmxlbmd0aChhKSBPUEVSQVRPUihwZ19jYXRhbG9nLj4pIDIpKSJ9LCB7ImZtdCI6 ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAiY3RsdDFfbGlr ZV9wa2V5IiwgInR5cGUiOiAiY29uc3RyYWludCIsICJjb250eXBlIjogInByaW1hcnkga2V5Iiwg ImRlZmluaXRpb24iOiAiUFJJTUFSWSBLRVkgKGEpIn1dfQorTk9USUNFOiAgcmUtZm9ybWVkIGNv bW1hbmQ6IENSRUFURSAgVEFCTEUgIHB1YmxpYy5jdGx0MV9saWtlIChhIHBnX2NhdGFsb2cudGV4 dCBTVE9SQUdFIG1haW4gIENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgICAsIGIgcGdfY2F0 YWxvZy50ZXh0IFNUT1JBR0UgZXh0ZXJuYWwgIENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIg ICAsIENPTlNUUkFJTlQgY3RsdDFfYV9jaGVjayBDSEVDSyAoKHBnX2NhdGFsb2cubGVuZ3RoKGEp IE9QRVJBVE9SKHBnX2NhdGFsb2cuPikgMikpLCBDT05TVFJBSU5UIGN0bHQxX2xpa2VfcGtleSBQ UklNQVJZIEtFWSAoYSkpICAgICAgCitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiA8TlVMTD4KK05P VElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiA8TlVMTD4KK05PVElDRTogIGRlcGFyc2VkIGpzb246 IDxOVUxMPgorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IDxOVUxMPgorLS0gVGVzdCBmb3Jl aWduIGtleSBjb25zdHJhaW50IGlzIGhhbmRsZWQgaW4gYSBmb2xsb3dpbmcgQUxURVIgVEFCTEUg QUREIENPTlNUUkFJTlQgRk9SRUlHTiBLRVkgUkVGRVJFTkNFUyBzdWJjb21tYW5kCitDUkVBVEUg VEFCTEUgcHJvZHVjdCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOworTk9USUNFOiAg ZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lm X25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhl cml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2Fj Y2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAi cHJvZHVjdCIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJ TkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZh bHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1z IiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFj ZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNl LCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjog eyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQi OiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmlu aXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19t ZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9u b3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2Nv bHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlv bn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1l IjogImlkIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlw YXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRh bG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAi bm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6 IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJD T01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNv bXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdF TkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1J ICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29s bGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwg Im5hbWUiOiAibmFtZSIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAi IiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUiOiAi cGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZh bHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFt ZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2Nh dGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVuZGVkIiwgImNvbXByZXNzaW9uIjogeyJmbXQi OiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2Us ICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6 ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICJDT05T VFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAicHJvZHVjdF9wa2V5Iiwg InR5cGUiOiAiY29uc3RyYWludCIsICJjb250eXBlIjogInByaW1hcnkga2V5IiwgImRlZmluaXRp b24iOiAiUFJJTUFSWSBLRVkgKGlkKSJ9XX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBD UkVBVEUgIFRBQkxFICBwdWJsaWMucHJvZHVjdCAoaWQgcGdfY2F0YWxvZy5pbnQ0IFNUT1JBR0Ug cGxhaW4gICAgICwgbmFtZSBwZ19jYXRhbG9nLnRleHQgU1RPUkFHRSBleHRlbmRlZCAgQ09MTEFU RSBwZ19jYXRhbG9nLiJkZWZhdWx0IiAgICwgQ09OU1RSQUlOVCBwcm9kdWN0X3BrZXkgUFJJTUFS WSBLRVkgKGlkKSkgICAgICAKK05PVElDRTogIGRlcGFyc2VkIGpzb246IDxOVUxMPgorTk9USUNF OiAgcmUtZm9ybWVkIGNvbW1hbmQ6IDxOVUxMPgorQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJf aWQgaW50IFBSSU1BUlkgS0VZLCBwcm9kdWN0X2lkIGludAorUkVGRVJFTkNFUyBwcm9kdWN0IChp ZCkpOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVu Y2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVu dHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0 aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHki OiB7Im9iam5hbWUiOiAib3JkZXJzIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0sICJpbmhlcml0 cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGws ICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25f Y29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVs bH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJw cmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAi d2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRp b25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6 IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVT SU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2Qi OiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10Ijog IiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lv bn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2Nv bHVtbn1zIiwgIm5hbWUiOiAib3JkZXJfaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6 IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJz Y2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwg InByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAi Q09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21w cmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAi cHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRf Y29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9 fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAl e2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtn ZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJwcm9kdWN0X2lkIiwgInR5cGUiOiAiY29sdW1u IiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1l IjogImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQi OiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlv biI6IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAi cGxhaW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9u X21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9 LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJl c2VudCI6IGZhbHNlfX0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9u fXMiLCAibmFtZSI6ICJvcmRlcnNfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlw ZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChvcmRlcl9pZCki fV19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFICBUQUJMRSAgcHVibGljLm9y ZGVycyAob3JkZXJfaWQgcGdfY2F0YWxvZy5pbnQ0IFNUT1JBR0UgcGxhaW4gICAgICwgcHJvZHVj dF9pZCBwZ19jYXRhbG9nLmludDQgU1RPUkFHRSBwbGFpbiAgICAgLCBDT05TVFJBSU5UIG9yZGVy c19wa2V5IFBSSU1BUlkgS0VZIChvcmRlcl9pZCkpICAgICAgCitOT1RJQ0U6ICBkZXBhcnNlZCBq c29uOiA8TlVMTD4KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiA8TlVMTD4KK05PVElDRTog IGRlcGFyc2VkIGpzb246IHsiZm10IjogIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCAl e3N1YmNtZHM6LCB9cyIsICJvYmp0eXBlIjogIlRBQkxFIiwgInN1YmNtZHMiOiBbeyJmbXQiOiAi QUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAibmFtZSI6ICJvcmRlcnNf cHJvZHVjdF9pZF9ma2V5IiwgInR5cGUiOiAiYWRkIGNvbnN0cmFpbnQiLCAiZGVmaW5pdGlvbiI6 ICJGT1JFSUdOIEtFWSAocHJvZHVjdF9pZCkgUkVGRVJFTkNFUyBwdWJsaWMucHJvZHVjdChpZCki fV0sICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJvcmRlcnMiLCAic2NoZW1hbmFtZSI6ICJwdWJs aWMifX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBBTFRFUiBUQUJMRSBwdWJsaWMub3Jk ZXJzIEFERCBDT05TVFJBSU5UIG9yZGVyc19wcm9kdWN0X2lkX2ZrZXkgRk9SRUlHTiBLRVkgKHBy b2R1Y3RfaWQpIFJFRkVSRU5DRVMgcHVibGljLnByb2R1Y3QoaWQpCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC90ZXN0X2RkbF9k ZXBhcnNlLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4 cGVjdGVkL3Rlc3RfZGRsX2RlcGFyc2Uub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLmIwZTJiZjI1MWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC90ZXN0X2RkbF9kZXBhcnNlLm91dApA QCAtMCwwICsxLDE4IEBACitDUkVBVEUgRVhURU5TSU9OIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVz czsKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHRlc3RfZGRsX2RlcGFyc2UoKQorICBSRVRV Uk5TIGV2ZW50X3RyaWdnZXIgTEFOR1VBR0UgcGxwZ3NxbCBBUworJCQKK0RFQ0xBUkUKKwlyIHJl Y29yZDsKKwlkZXBhcnNlZF9qc29uIHRleHQ7CitCRUdJTgorCUZPUiByIElOIFNFTEVDVCAqIEZS T00gcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoKQorCUxPT1AKKwkJZGVwYXJzZWRfanNv biA9IHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfdG9fanNvbihyLmNvbW1hbmQpOworCQlSQUlTRSBO T1RJQ0UgJ2RlcGFyc2VkIGpzb246ICUnLCBkZXBhcnNlZF9qc29uOworCQlSQUlTRSBOT1RJQ0Ug J3JlLWZvcm1lZCBjb21tYW5kOiAlJywgcGdfY2F0YWxvZy5kZGxfZGVwYXJzZV9leHBhbmRfY29t bWFuZChkZXBhcnNlZF9qc29uKTsKKwlFTkQgTE9PUDsKK0VORDsKKyQkOworQ1JFQVRFIEVWRU5U IFRSSUdHRVIgdGVzdF9kZGxfZGVwYXJzZQorT04gZGRsX2NvbW1hbmRfZW5kIEVYRUNVVEUgUFJP Q0VEVVJFIHRlc3RfZGRsX2RlcGFyc2UoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uN2ExNTJhMjNlMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEs NDIgQEAKKyMgRklYTUU6IHByZXZlbnQgaW5zdGFsbCBkdXJpbmcgbWFpbiBpbnN0YWxsLCBidXQg bm90IGR1cmluZyB0ZXN0IDovCisKK3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzc19zb3VyY2VzID0g ZmlsZXMoCisgICd0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYycsCispCisKK2lmIGhvc3Rfc3lz dGVtID09ICd3aW5kb3dzJworICB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Nfc291cmNlcyArPSBy Y19saWJfZ2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1F JywgJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcycsCisgICAgJy0tRklMRURFU0MnLCAndGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzIC0gcmVncmVzc2lvbiB0ZXN0aW5nIGZvciBEREwgZGVwYXJzaW5n JyxdKQorZW5kaWYKKwordGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzID0gc2hhcmVkX21vZHVsZSgn dGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzJywKKyAgdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzX3Nv dXJjZXMsCisgIGt3YXJnczogcGdfbW9kX2FyZ3MsCispCit0ZXN0cHJlcF90YXJnZXRzICs9IHRl c3RfZGRsX2RlcGFyc2VfcmVncmVzcworCitpbnN0YWxsX2RhdGEoCisgICd0ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MuY29udHJvbCcsCisgICd0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5z cWwnLAorICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdzLAorKQorCit0ZXN0cyArPSB7CisgICdu YW1lJzogJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcycsCisgICdzZCc6IG1lc29uLmN1cnJlbnRf c291cmNlX2RpcigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAncmVn cmVzcyc6IHsKKyAgICAnc3FsJzogWworICAgICAgJ3Rlc3RfZGRsX2RlcGFyc2UnLAorICAgICAg J2NyZWF0ZV9leHRlbnNpb24nLAorICAgICAgJ2NyZWF0ZV9zY2hlbWEnLAorICAgICAgJ2NyZWF0 ZV90YWJsZScsCisgICAgXSwKKyAgfSwKKyAgJ3RhcCc6IHsKKyAgICAndGVzdHMnOiBbCisgICAg ICAndC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbCcsCisgICAgXSwKKyAgfSwKK30KZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9j cmVhdGVfZXh0ZW5zaW9uLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi5kMjNlN2ZkOWNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9leHRlbnNpb24uc3FsCkBA IC0wLDAgKzEsNSBAQAorLS0tCistLS0gQ1JFQVRFX0VYVEVOU0lPTgorLS0tCisKK0NSRUFURSBF WFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRzOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9zY2hlbWEuc3FsIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9zY2hlbWEuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjEwYjEzZjBhNTUKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9z cWwvY3JlYXRlX3NjaGVtYS5zcWwKQEAgLTAsMCArMSwxNiBAQAorLS0KKy0tIENSRUFURV9TQ0hF TUEKKy0tCisKK0NSRUFURSBTQ0hFTUEgZm9vOworCitDUkVBVEUgU0NIRU1BIElGIE5PVCBFWElT VFMgYmFyOworCitDUkVBVEUgU0NIRU1BIGJhejsKKworLS0gV2lsbCBub3QgYmUgY3JlYXRlZCwg YW5kIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkgdGhlCistLSBldmVudCB0cmlnZ2VyCitDUkVBVEUg U0NIRU1BIElGIE5PVCBFWElTVFMgYmF6OworCitDUkVBVEUgU0NIRU1BIGVsZW1lbnRfdGVzdAor ICBDUkVBVEUgVEFCTEUgZm9vIChpZCBpbnQpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbCBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmU4ODYzZDA3MzgKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwv Y3JlYXRlX3RhYmxlLnNxbApAQCAtMCwwICsxLDE1IEBACitDUkVBVEUgVEFCTEUgc2ltcGxlX3Rh YmxlKAorICAgIGlkIGludCwKKyAgICBuYW1lIHZhcmNoYXIoNSkKKyk7CisKKy0tIFRlc3QgVGFi bGVMaWtlQ2xhdXNlIGlzIGhhbmRsZWQgcHJvcGVybHkKK0NSRUFURSBUQUJMRSBjdGx0MSAoYSB0 ZXh0IENIRUNLIChsZW5ndGgoYSkgPiAyKSBQUklNQVJZIEtFWSwgYiB0ZXh0KTsKK0FMVEVSIFRB QkxFIGN0bHQxIEFMVEVSIENPTFVNTiBhIFNFVCBTVE9SQUdFIE1BSU47CitBTFRFUiBUQUJMRSBj dGx0MSBBTFRFUiBDT0xVTU4gYiBTRVQgU1RPUkFHRSBFWFRFUk5BTDsKK0NSRUFURSBUQUJMRSBj dGx0MV9saWtlIChMSUtFIGN0bHQxIElOQ0xVRElORyBBTEwpOworCistLSBUZXN0IGZvcmVpZ24g a2V5IGNvbnN0cmFpbnQgaXMgaGFuZGxlZCBpbiBhIGZvbGxvd2luZyBBTFRFUiBUQUJMRSBBREQg Q09OU1RSQUlOVCBGT1JFSUdOIEtFWSBSRUZFUkVOQ0VTIHN1YmNvbW1hbmQKK0NSRUFURSBUQUJM RSBwcm9kdWN0IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7CitDUkVBVEUgVEFCTEUg b3JkZXJzIChvcmRlcl9pZCBpbnQgUFJJTUFSWSBLRVksIHByb2R1Y3RfaWQgaW50CitSRUZFUkVO Q0VTIHByb2R1Y3QgKGlkKSk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9zcWwvdGVzdF9kZGxfZGVwYXJzZS5zcWwgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvdGVzdF9kZGxfZGVwYXJzZS5zcWwKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMDg4OWZhMDJmOQotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC90 ZXN0X2RkbF9kZXBhcnNlLnNxbApAQCAtMCwwICsxLDIwIEBACitDUkVBVEUgRVhURU5TSU9OIHRl c3RfZGRsX2RlcGFyc2VfcmVncmVzczsKKworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gdGVz dF9kZGxfZGVwYXJzZSgpCisgIFJFVFVSTlMgZXZlbnRfdHJpZ2dlciBMQU5HVUFHRSBwbHBnc3Fs IEFTCiskJAorREVDTEFSRQorCXIgcmVjb3JkOworCWRlcGFyc2VkX2pzb24gdGV4dDsKK0JFR0lO CisJRk9SIHIgSU4gU0VMRUNUICogRlJPTSBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcygp CisJTE9PUAorCQlkZXBhcnNlZF9qc29uID0gcGdfY2F0YWxvZy5kZGxfZGVwYXJzZV90b19qc29u KHIuY29tbWFuZCk7CisJCVJBSVNFIE5PVElDRSAnZGVwYXJzZWQganNvbjogJScsIGRlcGFyc2Vk X2pzb247CisJCVJBSVNFIE5PVElDRSAncmUtZm9ybWVkIGNvbW1hbmQ6ICUnLCBwZ19jYXRhbG9n LmRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kKGRlcGFyc2VkX2pzb24pOworCUVORCBMT09QOwor RU5EOworJCQ7CisKK0NSRUFURSBFVkVOVCBUUklHR0VSIHRlc3RfZGRsX2RlcGFyc2UKK09OIGRk bF9jb21tYW5kX2VuZCBFWEVDVVRFIFBST0NFRFVSRSB0ZXN0X2RkbF9kZXBhcnNlKCk7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMV9j b21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MvdC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi42NjRhZDM0OThmCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdC8wMDFfY29tcGFyZV9k dW1wZWRfcmVzdWx0cy5wbApAQCAtMCwwICsxLDE4MSBAQAordXNlIHN0cmljdDsKK3VzZSB3YXJu aW5nczsKK3VzZSBFbnY7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0 Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOwordXNlIEZpbGU6OkJhc2VuYW1l OworCitzdWIgZXhlY3V0ZV90ZXN0X2Nhc2UgeworICAgIG15ICR0ZXN0X25hbWUgPSAkX1swXTsK KyAgICBteSAkcHViX25vZGUgPSAkX1sxXTsKKyAgICBteSAkc3ViX25vZGUgPSAkX1syXTsKKyAg ICBteSAkZGJuYW1lID0gJF9bM107CisgICAgbXkgJG91dHB1dGRpciA9ICRQb3N0Z3JlU1FMOjpU ZXN0OjpVdGlsczo6dG1wX2NoZWNrOworCisgICAgIyBzZXQgdXAgZGVwYXJzZSB0ZXN0aW5nIHJl c291cmNlcworICAgIGNyZWF0ZV9kZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2Rl KCRwdWJfbm9kZSwgJGRibmFtZSk7CisKKyAgICBteSAkdGVzdF9maWxlID0gIi4vc3FsLyR7dGVz dF9uYW1lfS5zcWwiOworICAgIG15ICRjb250ZW50ID0gZG97bG9jYWwoQEFSR1YsJC8pPSR0ZXN0 X2ZpbGU7PD59OworCisgICAgJHB1Yl9ub2RlIC0+IHBzcWwoJGRibmFtZSwgJGNvbnRlbnQpOwor CisgICAgIyByZXRyaWV2ZSBTUUwgY29tbWFuZHMgZ2VuZXJhdGVkIGZyb20gZGVwYXJzZWQgRERM cyBvbiBwdWIgbm9kZQorICAgIG15ICRkZGxfc3FsID0gJyc7CisgICAgJHB1Yl9ub2RlIC0+IHBz cWwoJGRibmFtZSxxKAorICAgICAgICBzZWxlY3QgZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQo ZGRsKSB8fCAnOycgZnJvbSBkZXBhcnNlZF9kZGxzIE9SREVSIEJZIGlkIEFTQyksCisgICAgICAg IHN0ZG91dCA9PiBcJGRkbF9zcWwpOworCisgICAgcHJpbnQgIlxuc3RhcnQgcHJpbnRpbmcgcmUt Zm9ybWVkIHNxbFxuIjsKKyAgICBwcmludCAkZGRsX3NxbDsKKyAgICBwcmludCAiXG5lbmQgcHJp bnRpbmcgcmUtZm9ybWVkIHNxbFxuIjsKKyAgICAjIGV4ZWN1dGUgU1FMIGNvbW1hbmRzIG9uIHN1 YiBub2RlCisgICAgJHN1Yl9ub2RlIC0+IHBzcWwoJGRibmFtZSwgJGRkbF9zcWwpOworCisgICAg IyBjbGVhbiB1cCBkZXBhcnNlIHRlc3RpbmcgcmVzb3VyY2VzCisgICAgY2xlYW5fZGVwYXJzZV90 ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSgkcHViX25vZGUsICRkYm5hbWUpOworCisgICAg IyBkdW1wIGZyb20gcHViIG5vZGUgYW5kIHN1YiBub2RlCisgICAgbWtkaXIgJHtvdXRwdXRkaXJ9 LiIvZHVtcHMiLCAwNzU1OworICAgIG15ICRwdWJfZHVtcCA9ICR7b3V0cHV0ZGlyfS4iL2R1bXBz LyR7dGVzdF9uYW1lfV9wdWIuZHVtcCI7CisgICAgbXkgJHN1Yl9kdW1wID0gJHtvdXRwdXRkaXJ9 LiIvZHVtcHMvJHt0ZXN0X25hbWV9X3N1Yi5kdW1wIjsKKyAgICBzeXN0ZW0oInBnX2R1bXBhbGwg IgorICAgICAgICAuICItcyAiCisgICAgICAgIC4gIi1mICIKKyAgICAgICAgLiAkcHViX2R1bXAg LiAiICIKKyAgICAgICAgLiAiLS1uby1zeW5jICIKKyAgICAgICAgLiAgJy1wICcKKyAgICAgICAg LiAkcHViX25vZGUtPnBvcnQpICA9PSAwIG9yIGRpZSAiRHVtcCBwdWIgbm9kZSBmYWlsZWQgaW4g JHt0ZXN0X25hbWV9IjsKKyAgICBzeXN0ZW0oInBnX2R1bXBhbGwgIgorICAgICAgICAuICItcyAi CisgICAgICAgIC4gIi1mICIKKyAgICAgICAgLiAkc3ViX2R1bXAgLiAiICIKKyAgICAgICAgLiAi LS1uby1zeW5jICIKKyAgICAgICAgLiAgJy1wICcKKyAgICAgICAgLiAkc3ViX25vZGUtPnBvcnQp ICA9PSAwIG9yIGRpZSAiRHVtcCBzdWIgbm9kZSBmYWlsZWQgaW4gJHt0ZXN0X25hbWV9IjsKKwor ICAgICMgY29tcGFyZSBkdW1wZWQgcmVzdWx0cworICAgIGlzKHN5c3RlbSgiZGlmZiAiCisgICAg LiAkcHViX2R1bXAgLiAiICIKKyAgICAuICRzdWJfZHVtcCksIDAsICJEdW1wZWQgcmVzdWx0cyBk aWZmIGluICR7dGVzdF9uYW1lfSIpOworfQorCitzdWIgaW5pdF9ub2RlIHsKKyAgICBteSAkbm9k ZV9uYW1lID0gJF9bMF07CisgICAgbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoJG5vZGVfbmFtZSk7CisgICAgJG5vZGUtPmluaXQ7CisgICAgIyBpbmNyZWFzZSBzb21l IHNldHRpbmdzIHRoYXQgQ2x1c3Rlci0+bmV3IG1ha2VzIHRvbyBsb3cgYnkgZGVmYXVsdC4KKyAg ICAkbm9kZS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdtYXhfY29ubmVjdGlvbnMn LCAnMjUnKTsKKyAgICAkbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCSAg ICdtYXhfcHJlcGFyZWRfdHJhbnNhY3Rpb25zID0gMTAnKTsKKyAgICByZXR1cm4gJG5vZGU7Cit9 CisKK3N1YiBpbml0X3B1Yl9ub2RlIHsKKyAgICBteSAkbm9kZV9uYW1lID0gJF9bMF0uIl9wdWIi OworICAgIHJldHVybiBpbml0X25vZGUoJG5vZGVfbmFtZSkKK30KKworc3ViIGluaXRfc3ViX25v ZGUgeworICAgIG15ICRub2RlX25hbWUgPSAkX1swXS4iX3N1YiI7CisgICAgcmV0dXJuIGluaXRf bm9kZSgkbm9kZV9uYW1lKQorfQorCitzdWIgY3JlYXRlX2RlcGFyc2VfdGVzdGluZ19yZXNvdXJj ZXNfb25fcHViX25vZGUgeworICAgIG15ICRub2RlID0gJF9bMF07CisgICAgbXkgJGRibmFtZSA9 ICRfWzFdOworICAgICRub2RlIC0+IHBzcWwoJGRibmFtZSwgcSgKKyAgICAgICAgYmVnaW47Cisg ICAgICAgIENSRUFURSBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzOworICAgICAg ICBjcmVhdGUgdGFibGUgZGVwYXJzZWRfZGRscyhpZCBTRVJJQUwgUFJJTUFSWSBLRVksIHRhZyB0 ZXh0LCBvYmplY3RfaWRlbnRpdHkgdGV4dCwgZGRsIHRleHQpOworCisgICAgICAgIGNyZWF0ZSBv ciByZXBsYWNlIGZ1bmN0aW9uIGRlcGFyc2VfdG9fanNvbigpCisgICAgICAgICAgICByZXR1cm5z IGV2ZW50X3RyaWdnZXIgbGFuZ3VhZ2UgcGxwZ3NxbCBhcworICAgICAgICAkJAorICAgICAgICBk ZWNsYXJlCisgICAgICAgICAgICByIHJlY29yZDsKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAg IGZvciByIGluIHNlbGVjdCAqIGZyb20gcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoKQor ICAgICAgICAgICAgbG9vcAorICAgICAgICAgICAgICAgIGluc2VydCBpbnRvIGRlcGFyc2VkX2Rk bHModGFnLCBvYmplY3RfaWRlbnRpdHksIGRkbCkgdmFsdWVzIChyLmNvbW1hbmRfdGFnLCByLm9i amVjdF9pZGVudGl0eSwgcGdfY2F0YWxvZy5kZGxfZGVwYXJzZV90b19qc29uKHIuY29tbWFuZCkp OworICAgICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgIEVORDsKKyAgICAgICAgJCQ7CisKKyAg ICAgICAgY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gZGVwYXJzZV9kcm9wc190b19qc29uKCkK KyAgICAgICAgICAgIHJldHVybnMgZXZlbnRfdHJpZ2dlciBsYW5ndWFnZSBwbHBnc3FsIGFzCisg ICAgICAgICQkCisgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIHIgcmVjb3JkOworICAgICAg ICBiZWdpbgorICAgICAgICAgICAgZm9yIHIgaW4gc2VsZWN0ICogZnJvbSBwZ19ldmVudF90cmln Z2VyX2Ryb3BwZWRfb2JqZWN0cygpCisgICAgICAgICAgICBsb29wCisgICAgICAgICAgICAgICAg aW5zZXJ0IGludG8gZGVwYXJzZWRfZGRscyh0YWcsIG9iamVjdF9pZGVudGl0eSwgZGRsKSB2YWx1 ZXMgKHIub2JqZWN0X3R5cGUsIHIub2JqZWN0X2lkZW50aXR5LCBwdWJsaWMuZGVwYXJzZV9kcm9w X2RkbChyLm9iamVjdF9pZGVudGl0eSwgci5vYmplY3RfdHlwZSkpOworICAgICAgICAgICAgZW5k IGxvb3A7CisgICAgICAgIEVORDsKKyAgICAgICAgJCQ7CisKKyAgICAgICAgY3JlYXRlIGV2ZW50 IHRyaWdnZXIgZGRsX2RlcGFyc2VfdHJpZworICAgICAgICBvbiBkZGxfY29tbWFuZF9lbmQgZXhl Y3V0ZSBwcm9jZWR1cmUgZGVwYXJzZV90b19qc29uKCk7CisKKyAgICAgICAgY3JlYXRlIGV2ZW50 IHRyaWdnZXIgZGRsX2Ryb3BzX2RlcGFyc2VfdHJpZworICAgICAgICBvbiBzcWxfZHJvcCBleGVj dXRlIHByb2NlZHVyZSBkZXBhcnNlX2Ryb3BzX3RvX2pzb24oKTsKKworICAgICAgICBjb21taXQ7 CisgICAgKSk7Cit9CisKK3N1YiBjbGVhbl9kZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1 Yl9ub2RlIHsKKyAgICBteSAkbm9kZSA9ICRfWzBdOworICAgIG15ICRkYm5hbWUgPSAkX1sxXTsK KyAgICAjIERyb3AgdGhlIGV2ZW50IHRyaWdnZXIgYW5kIHRoZSBmdW5jdGlvbiBiZWZvcmUgdGFr aW5nIGEgbG9naWNhbCBkdW1wLgorICAgICRub2RlIC0+IHNhZmVfcHNxbCgkZGJuYW1lLHEoCisg ICAgICAgIGRyb3AgZXZlbnQgdHJpZ2dlciBkZGxfZGVwYXJzZV90cmlnOworICAgICAgICBkcm9w IGV2ZW50IHRyaWdnZXIgZGRsX2Ryb3BzX2RlcGFyc2VfdHJpZzsKKyAgICAgICAgZHJvcCBmdW5j dGlvbiBkZXBhcnNlX3RvX2pzb24oKTsKKyAgICAgICAgZHJvcCBmdW5jdGlvbiBkZXBhcnNlX2Ry b3BzX3RvX2pzb24oKTsKKyAgICAgICAgZHJvcCB0YWJsZSBkZXBhcnNlZF9kZGxzOworICAgICAg ICBEUk9QIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CisgICAgKSk7Cit9CisK K3N1YiB0cmltIHsKKyAgICBteSBAb3V0ID0gQF87CisgICAgZm9yIChAb3V0KSB7CisgICAgICAg IHMvXlxzKy8vOworICAgICAgICBzL1xzKyQvLzsKKyAgICB9CisgICAgcmV0dXJuIHdhbnRhcnJh eSA/IEBvdXQgOiAkb3V0WzBdOworfQorCisjIENyZWF0ZSBhbmQgc3RhcnQgcHViIHN1YiBub2Rl cworbXkgJHB1Yl9ub2RlID0gaW5pdF9wdWJfbm9kZSgidGVzdCIpOworbXkgJHN1Yl9ub2RlID0g aW5pdF9zdWJfbm9kZSgidGVzdCIpOworbXkgJGRibmFtZSA9ICJwb3N0Z3JlcyI7CiskcHViX25v ZGUgLT4gc3RhcnQ7Ciskc3ViX25vZGUgLT4gc3RhcnQ7CisKKyMgbG9hZCB0ZXN0IGNhc2VzIGZy b20gdGhlIHJlZ3Jlc3Npb24gdGVzdHMKK215IEByZWdyZXNzX3Rlc3RzID0gc3BsaXQgL1xzKy8s ICRFTlZ7UkVHUkVTU307CisKK2ZvcmVhY2goQHJlZ3Jlc3NfdGVzdHMpIHsKKyAgICBteSAkdGVz dF9uYW1lID0gdHJpbSgkXyk7CisgICAgIyBza2lwIGlmIGl0J3MgcmVncmVzc2lvbiB0ZXN0IHBy ZXBhcmF0aW9uIG9yIGVtcHR5IHN0cmluZworICAgIGlmICgkdGVzdF9uYW1lIGVxICIiIG9yICR0 ZXN0X25hbWUgZXEgInRlc3RfZGRsX2RlcGFyc2UiKQorICAgIHsKKyAgICAgICAgbmV4dDsKKyAg ICB9CisgICAgZXZhbCB7ZXhlY3V0ZV90ZXN0X2Nhc2UoJHRlc3RfbmFtZSwgJHB1Yl9ub2RlLCAk c3ViX25vZGUsICRkYm5hbWUpO307CisgICAgaWYgKCRAIG5lICIiKQorICAgIHsKKyAgICAgICAg ZmFpbCgkQCk7CisgICAgfQorfQorY2xvc2U7CisKKyMgQ2xvc2Ugbm9kZXMKKyRwdWJfbm9kZS0+ c3RvcDsKKyRzdWJfbm9kZS0+c3RvcDsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMl9yZWdyZXNzX3Rl c3RzLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdC8wMDJf cmVncmVzc190ZXN0cy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4z YTg3NWMzM2ZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3MvdC8wMDJfcmVncmVzc190ZXN0cy5wbApAQCAtMCwwICsxLDIwNyBAQAor dXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBFbnY7Cit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3Jl OwordXNlIEZpbGU6OkJhc2VuYW1lOworCitzdWIgZXhlY3V0ZV9yZWdyZXNzX3Rlc3QgeworICAg IG15ICRwdWJfbm9kZSA9ICRfWzBdOworICAgIG15ICRzdWJfbm9kZSA9ICRfWzFdOworICAgIG15 ICRkYm5hbWUgPSAicG9zdGdyZXMiOworICAgIG15ICRkbHBhdGggICAgPSBkaXJuYW1lKCRFTlZ7 UkVHUkVTU19TSExJQn0pOworICAgIG15ICRpbnB1dGRpciA9ICIuLi8uLi9yZWdyZXNzIjsKKyAg ICBteSAkb3V0cHV0ZGlyID0gJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0bXBfY2hlY2s7CisK KyAgICAjIHNldCB1cCBkZXBhcnNlIHRlc3RpbmcgcmVzb3VyY2VzCisgICAgY3JlYXRlX2RlcGFy c2VfdGVzdGluZ19yZXNvdXJjZXNfb25fcHViX25vZGUoJHB1Yl9ub2RlLCAkZGJuYW1lKTsKKwor ICAgICMgZXhlY3V0ZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdHMgb24gcHViIG5vZGUKKyAgICBteSAk cmVncmVzc19jbWQgPSAkRU5We1BHX1JFR1JFU1N9CisgICAgICAgIC4gIiAiCisgICAgICAgIC4g Ii0tZGxwYXRoPVwiJGRscGF0aFwiICIKKyAgICAgICAgLiAiLS1tYXgtY29uY3VycmVudC10ZXN0 cz0yMCAiCisgICAgICAgIC4gIi0tZGJuYW1lPSIKKyAgICAgICAgLiAkZGJuYW1lIC4gIiAiCisg ICAgICAgIC4gIi0tdXNlLWV4aXN0aW5nICIKKyAgICAgICAgLiAiLS1ob3N0PSIKKyAgICAgICAg LiAkcHViX25vZGUtPmhvc3QgLiAiICIKKyAgICAgICAgLiAiLS1wb3J0PSIKKyAgICAgICAgLiAk cHViX25vZGUtPnBvcnQgLiAiICIKKyAgICAgICAgLiAiLS1pbnB1dGRpcj0kaW5wdXRkaXIgIgor ICAgICAgICAuICItLW91dHB1dGRpcj1cIiRvdXRwdXRkaXJcIiAiCisgICAgICAgIC4gIi0tc2No ZWR1bGU9JGlucHV0ZGlyL3BhcmFsbGVsX3NjaGVkdWxlIjsKKyAgICBwcmludCAiUmVncmVzc2lv biB0ZXN0IGNvbW1hbmQgaXMgJHJlZ3Jlc3NfY21kIjsKKyAgICBteSAkcmMgPSBzeXN0ZW0oJHJl Z3Jlc3NfY21kKTsKKyAgICBpZiAoJHJjICE9IDApCisgICAgeworICAgICAgICAjIElmIHJlZ3Jl c3Npb24gdGVzdCBmYWlscywgZHVtcCBvdXQgdGhlIHJlZ3Jlc3Npb24gZGlmZnMgZmlsZQorICAg ICAgICBteSAkZGlmZnMgPSAiJHtvdXRwdXRkaXJ9L3JlZ3Jlc3Npb24vcmVncmVzc2lvbi5kaWZm cyI7CisgICAgICAgIGlmICgtZSAkZGlmZnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50 ICI9PT0gZHVtcGluZyAkZGlmZnMgPT09XG4iOworICAgICAgICAgICAgcHJpbnQgc2x1cnBfZmls ZSgkZGlmZnMpOworICAgICAgICAgICAgcHJpbnQgIj09PSBFT0YgPT09XG4iOworICAgICAgICB9 CisgICAgICAgIGRpZSAiUmVncmVzc2lvbiB0ZXN0IGZhaWxlZCI7CisgICAgfQorCisgICAgIyBS ZXRyaWV2ZSBTUUwgY29tbWFuZHMgZ2VuZXJhdGVkIGZyb20gZGVwYXJzZWQgRERMcyBvbiBwdWIg bm9kZQorICAgIG15ICRkZGxfc3FsID0gJyc7CisgICAgJHB1Yl9ub2RlIC0+IHBzcWwoJGRibmFt ZSxxKAorICAgICAgICBzZWxlY3QgZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQoZGRsKSB8fCAn OycgZnJvbSBkZXBhcnNlZF9kZGxzIE9SREVSIEJZIGlkIEFTQyksCisgICAgICAgIHN0ZG91dCA9 PiBcJGRkbF9zcWwpOworCisgICAgIyBFeGVjdXRlIFNRTCBjb21tYW5kcyBvbiBzdWIgbm9kZQor ICAgICRzdWJfbm9kZSAtPiBwc3FsKCRkYm5hbWUsICRkZGxfc3FsKTsKKworICAgICMgQ2xlYW4g dXAgZGVwYXJzZSB0ZXN0aW5nIHJlc291cmNlcworICAgIGNsZWFuX2RlcGFyc2VfdGVzdGluZ19y ZXNvdXJjZXNfb25fcHViX25vZGUoJHB1Yl9ub2RlLCAkZGJuYW1lKTsKKworICAgICMgRHVtcCBm cm9tIHB1YiBub2RlIGFuZCBzdWIgbm9kZQorICAgIG1rZGlyICR7b3V0cHV0ZGlyfS4iL2R1bXBz IiwgMDc1NTsKKyAgICBteSAkcHViX2R1bXAgPSAke291dHB1dGRpcn0uIi9kdW1wcy9yZWdyZXNz X3B1Yi5kdW1wIjsKKyAgICBteSAkc3ViX2R1bXAgPSAke291dHB1dGRpcn0uIi9kdW1wcy9yZWdy ZXNzX3N1Yi5kdW1wIjsKKyAgICBzeXN0ZW0oInBnX2R1bXBhbGwgIgorICAgICAgICAuICItcyAi CisgICAgICAgIC4gIi1mICIKKyAgICAgICAgLiAkcHViX2R1bXAgLiAiICIKKyAgICAgICAgLiAi LS1uby1zeW5jICIKKyAgICAgICAgLiAgJy1wICcKKyAgICAgICAgLiAkcHViX25vZGUtPnBvcnQp ICA9PSAwIG9yIGRpZSAiRHVtcCBwdWIgbm9kZSBmYWlsZWQiOworICAgIHN5c3RlbSgicGdfZHVt cGFsbCAiCisgICAgICAgIC4gIi1zICIKKyAgICAgICAgLiAiLWYgIgorICAgICAgICAuICRzdWJf ZHVtcCAuICIgIgorICAgICAgICAuICItLW5vLXN5bmMgIgorICAgICAgICAuICAnLXAgJworICAg ICAgICAuICRzdWJfbm9kZS0+cG9ydCkgID09IDAgb3IgZGllICJEdW1wIHN1YiBub2RlIGZhaWxl ZCI7CisKKyAgICAjIENvbXBhcmUgZHVtcGVkIHJlc3VsdHMKKyAgICBpcyhzeXN0ZW0oImRpZmYg IgorICAgIC4gJHB1Yl9kdW1wIC4gIiAiCisgICAgLiAkc3ViX2R1bXApLCAwLCAiQ29tcGFyaW5n IGR1bXBlZCBvdXRwdXQiKTsKKworICAgICMgQ2xvc2Ugbm9kZXMKKyAgICAkcHViX25vZGUtPnN0 b3A7CisgICAgJHN1Yl9ub2RlLT5zdG9wOworfQorCitzdWIgaW5pdF9ub2RlIHsKKyAgICBteSAk bm9kZV9uYW1lID0gJF9bMF07CisgICAgbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyLT5uZXcoJG5vZGVfbmFtZSk7CisgICAgJG5vZGUtPmluaXQ7CisgICAgIyBpbmNyZWFzZSBz b21lIHNldHRpbmdzIHRoYXQgQ2x1c3Rlci0+bmV3IG1ha2VzIHRvbyBsb3cgYnkgZGVmYXVsdC4K KyAgICAkbm9kZS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdtYXhfY29ubmVjdGlv bnMnLCAnMjUnKTsKKyAgICAkbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJ CSAgICdtYXhfcHJlcGFyZWRfdHJhbnNhY3Rpb25zID0gMTAnKTsKKyAgICByZXR1cm4gJG5vZGU7 Cit9CisKK3N1YiBpbml0X3B1Yl9ub2RlIHsKKyAgICBteSAkbm9kZV9uYW1lID0gJF9bMF0uIl9w dWIiOworICAgIHJldHVybiBpbml0X25vZGUoJG5vZGVfbmFtZSkKK30KKworc3ViIGluaXRfc3Vi X25vZGUgeworICAgIG15ICRub2RlX25hbWUgPSAkX1swXS4iX3N1YiI7CisgICAgcmV0dXJuIGlu aXRfbm9kZSgkbm9kZV9uYW1lKQorfQorCitzdWIgY3JlYXRlX2RlcGFyc2VfdGVzdGluZ19yZXNv dXJjZXNfb25fcHViX25vZGUgeworICAgIG15ICRub2RlID0gJF9bMF07CisgICAgbXkgJGRibmFt ZSA9ICRfWzFdOworICAgICRub2RlIC0+IHBzcWwoJGRibmFtZSwgcSgKKyAgICAgICAgYmVnaW47 CisgICAgICAgIENSRUFURSBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzOworICAg ICAgICBjcmVhdGUgdGFibGUgZGVwYXJzZWRfZGRscyhpZCBTRVJJQUwgUFJJTUFSWSBLRVksIHRh ZyB0ZXh0LCBvYmplY3RfaWRlbnRpdHkgdGV4dCwgZGRsIHRleHQpOworICAgICAgICBjcmVhdGUg b3IgcmVwbGFjZSBmdW5jdGlvbiBkZXBhcnNlX3RvX2pzb24oKQorICAgICAgICAgICAgcmV0dXJu cyBldmVudF90cmlnZ2VyIGxhbmd1YWdlIHBscGdzcWwgYXMKKyAgICAgICAgJCQKKyAgICAgICAg ZGVjbGFyZQorICAgICAgICAgICAgciByZWNvcmQ7CisgICAgICAgIGJlZ2luCisgICAgICAgICAg ICBmb3IgciBpbiBzZWxlY3QgKiBmcm9tIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKCkK KyAgICAgICAgICAgIGxvb3AKKyAgICAgICAgICAgICAgICBpbnNlcnQgaW50byBkZXBhcnNlZF9k ZGxzKHRhZywgb2JqZWN0X2lkZW50aXR5LCBkZGwpIHZhbHVlcyAoci5jb21tYW5kX3RhZywgci5v YmplY3RfaWRlbnRpdHksIHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfdG9fanNvbihyLmNvbW1hbmQp KTsKKyAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICBFTkQ7CisgICAgICAgICQkOworICAg ICAgICBjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBkZXBhcnNlX2Ryb3BzX3RvX2pzb24oKQor ICAgICAgICAgICAgcmV0dXJucyBldmVudF90cmlnZ2VyIGxhbmd1YWdlIHBscGdzcWwgYXMKKyAg ICAgICAgJCQKKyAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgciByZWNvcmQ7CisgICAgICAg IGJlZ2luCisgICAgICAgICAgICBmb3IgciBpbiBzZWxlY3QgKiBmcm9tIHBnX2V2ZW50X3RyaWdn ZXJfZHJvcHBlZF9vYmplY3RzKCkKKyAgICAgICAgICAgIGxvb3AKKyAgICAgICAgICAgICAgICBp bnNlcnQgaW50byBkZXBhcnNlZF9kZGxzKHRhZywgb2JqZWN0X2lkZW50aXR5LCBkZGwpIHZhbHVl cyAoci5vYmplY3RfdHlwZSwgci5vYmplY3RfaWRlbnRpdHksIHB1YmxpYy5kZXBhcnNlX2Ryb3Bf ZGRsKHIub2JqZWN0X2lkZW50aXR5LCByLm9iamVjdF90eXBlKSk7CisgICAgICAgICAgICBlbmQg bG9vcDsKKyAgICAgICAgRU5EOworICAgICAgICAkJDsKKyAgICAgICAgY3JlYXRlIGV2ZW50IHRy aWdnZXIgZGRsX2RlcGFyc2VfdHJpZworICAgICAgICBvbiBkZGxfY29tbWFuZF9lbmQgZXhlY3V0 ZSBwcm9jZWR1cmUgZGVwYXJzZV90b19qc29uKCk7CisgICAgICAgIGNyZWF0ZSBldmVudCB0cmln Z2VyIGRkbF9kcm9wc19kZXBhcnNlX3RyaWcKKyAgICAgICAgb24gc3FsX2Ryb3AgZXhlY3V0ZSBw cm9jZWR1cmUgZGVwYXJzZV9kcm9wc190b19qc29uKCk7CisgICAgICAgIGNvbW1pdDsKKyAgICAp KTsKK30KKworc3ViIGNsZWFuX2RlcGFyc2VfdGVzdGluZ19yZXNvdXJjZXNfb25fcHViX25vZGUg eworICAgIG15ICRub2RlID0gJF9bMF07CisgICAgbXkgJGRibmFtZSA9ICRfWzFdOworICAgICMg RHJvcCB0aGUgZXZlbnQgdHJpZ2dlciBhbmQgdGhlIGZ1bmN0aW9uIGJlZm9yZSB0YWtpbmcgYSBs b2dpY2FsIGR1bXAuCisgICAgJG5vZGUgLT4gc2FmZV9wc3FsKCRkYm5hbWUscSgKKyAgICAgICAg ZHJvcCBldmVudCB0cmlnZ2VyIGRkbF9kZXBhcnNlX3RyaWc7CisgICAgICAgIGRyb3AgZXZlbnQg dHJpZ2dlciBkZGxfZHJvcHNfZGVwYXJzZV90cmlnOworICAgICAgICBkcm9wIGZ1bmN0aW9uIGRl cGFyc2VfdG9fanNvbigpOworICAgICAgICBkcm9wIGZ1bmN0aW9uIGRlcGFyc2VfZHJvcHNfdG9f anNvbigpOworICAgICAgICBkcm9wIHRhYmxlIGRlcGFyc2VkX2RkbHM7CisgICAgICAgIERST1Ag RVhURU5TSU9OIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzczsKKyAgICApKTsKK30KKworc3ViIHRy aW0geworICAgIG15IEBvdXQgPSBAXzsKKyAgICBmb3IgKEBvdXQpIHsKKyAgICAgICAgcy9eXHMr Ly87CisgICAgICAgIHMvXHMrJC8vOworICAgIH0KKyAgICByZXR1cm4gd2FudGFycmF5ID8gQG91 dCA6ICRvdXRbMF07Cit9CisKKyMgQ3JlYXRlIGFuZCBzdGFydCBwdWIgc3ViIG5vZGVzCitteSAk cHViX25vZGUgPSBpbml0X3B1Yl9ub2RlKCJyZWdyZXNzIik7CitteSAkc3ViX25vZGUgPSBpbml0 X3N1Yl9ub2RlKCJyZWdyZXNzIik7CiskcHViX25vZGUgLT4gc3RhcnQ7Ciskc3ViX25vZGUgLT4g c3RhcnQ7CisKKyMgQ29tbWVudCB0aGUgZXhlY3V0aW9uIHRlbXBvcmFyaWx5LCBhbiBlcnJvciBp biBkZGxfZGVwYXJzZS5jIHdpbGwgY2F1c2UgdGhlIGRhdGFiYXNlIGV4aXRzIGFibm9ybWFsbHks IGVycm9yIHNpZ25hdHVyZToKKyMKKyMgMjAyMi0xMi0wMyAyMzowMjo0NC43NzggVVRDIFsxMjkx MDJdIHBnX3JlZ3Jlc3MvdGFibGVzcGFjZSBMT0c6ICBzdGF0ZW1lbnQ6IEFMVEVSIFRBQkxFIEFM TCBJTiBUQUJMRVNQQUNFIHJlZ3Jlc3NfdGJsc3BhY2VfcmVuYW1lZCBTRVQgVEFCTEVTUEFDRSBw Z19kZWZhdWx0OworIyBUUkFQOiBmYWlsZWQgQXNzZXJ0KCJJc0Eoc3RtdCwgQWx0ZXJUYWJsZVN0 bXQpIiksIEZpbGU6ICJkZGxfZGVwYXJzZS5jIiwgTGluZTogMzM3MSwgUElEOiAxMjkxMDIKKyMg cG9zdGdyZXM6IHJlZ3Jlc3NfcHViOiBydW5xaSBwb3N0Z3JlcyBbbG9jYWxdIEFMVEVSIFRBQkxF KEV4Y2VwdGlvbmFsQ29uZGl0aW9uKzB4YmIpWzB4NTYzYmQ2ZWE1YjBkXQorIyAuLi4KKyMgL2xp Yi94ODZfNjQtbGludXgtZ251L2xpYmMuc28uNigrMHgyOWQ5MClbMHg3ZmQ2YTc0YTZkOTBdCisj IC9saWIveDg2XzY0LWxpbnV4LWdudS9saWJjLnNvLjYoX19saWJjX3N0YXJ0X21haW4rMHg4MClb MHg3ZmQ2YTc0YTZlNDBdCisjIHBvc3RncmVzOiByZWdyZXNzX3B1YjogcnVucWkgcG9zdGdyZXMg W2xvY2FsXSBBTFRFUiBUQUJMRShfc3RhcnQrMHgyNSlbMHg1NjNiZDY3MmYxZTVdCisjIDIwMjIt MTItMDMgMjM6MDI6NDQuODUwIFVUQyBbMTI5MDU4XSBMT0c6ICBzZXJ2ZXIgcHJvY2VzcyAoUElE IDEyOTEwMikgd2FzIHRlcm1pbmF0ZWQgYnkgc2lnbmFsIDY6IEFib3J0ZWQKKyMgMjAyMi0xMi0w MyAyMzowMjo0NC44NTAgVVRDIFsxMjkwNThdIERFVEFJTDogIEZhaWxlZCBwcm9jZXNzIHdhcyBy dW5uaW5nOiBBTFRFUiBUQUJMRSBBTEwgSU4gVEFCTEVTUEFDRSByZWdyZXNzX3RibHNwYWNlX3Jl bmFtZWQgU0VUIFRBQkxFU1BBQ0UgcGdfZGVmYXVsdDsKKyMgMjAyMi0xMi0wMyAyMzowMjo0NC44 NTAgVVRDIFsxMjkwNThdIExPRzogIHRlcm1pbmF0aW5nIGFueSBvdGhlciBhY3RpdmUgc2VydmVy IHByb2Nlc3NlcworIyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MSBVVEMgWzEyOTA1OF0gTE9HOiAg c2h1dHRpbmcgZG93biBiZWNhdXNlIHJlc3RhcnRfYWZ0ZXJfY3Jhc2ggaXMgb2ZmCisjIDIwMjIt MTItMDMgMjM6MDI6NDQuODUyIFVUQyBbMTI5MDU4XSBMT0c6ICBkYXRhYmFzZSBzeXN0ZW0gaXMg c2h1dCBkb3duCisKKyMgZXZhbCB7ZXhlY3V0ZV9yZWdyZXNzX3Rlc3QoJHB1Yl9ub2RlLCAkc3Vi X25vZGUpO307CisjIGlmICgkQCBuZSAiIikKKyMgeworIyAgICAgZmFpbCgkQCk7CisjIH0KKwor IyBDbG9zZSBub2RlcworJHB1Yl9ub2RlLT5zdG9wOworJHN1Yl9ub2RlLT5zdG9wOworCitwYXNz KCJyZWdyZXNzc2lvbiB0ZXN0IHBhc3NlZCIpOworCitkb25lX3Rlc3RpbmcoKTsKXCBObyBuZXds aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MtLTEuMC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTQw NzBjZDUxZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4wLnNxbApAQCAtMCwwICsx LDkgQEAKKy8qIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQg aXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVj aG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyIgdG8gbG9h ZCB0aGlzIGZpbGUuIFxxdWl0CisKK0NSRUFURSBGVU5DVElPTiBkZXBhcnNlX2Ryb3BfZGRsKElO IG9iamlkZW50aXR5IHRleHQsCisgICAgSU4gb2JqZWN0dHlwZSB0ZXh0KQorICBSRVRVUk5TIHRl eHQgSU1NVVRBQkxFIFNUUklDVAorICBBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwpc IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYmQ2OTkyYmRm ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICogdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMKKyAqCQlTdXBwb3J0IGZ1 bmN0aW9ucyBmb3IgdGhlIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyBtb2R1bGUKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMTQtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYworICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190 eXBlLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm5vZGVzL2V4ZWNub2Rlcy5o IgorI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5LmgiCisjaW5jbHVkZSAidGNvcC91dGls aXR5LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9k ZXBhcnNlLmgiCisKK1BHX01PRFVMRV9NQUdJQzsKKworUEdfRlVOQ1RJT05fSU5GT19WMShkZXBh cnNlX2Ryb3BfZGRsKTsKKworLyoKKyAqIEdpdmVuIG9iamVjdF9pZGVudGl0eSBhbmQgb2JqZWN0 X3R5cGUgb2YgZHJvcHBlZCBvYmplY3QsIHJldHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2Yg RFJPUCBjb21tYW5kLgorICovCitEYXR1bQorZGVwYXJzZV9kcm9wX2RkbChQR19GVU5DVElPTl9B UkdTKQoreworCXRleHQJICAgKm9iamlkZW50aXR5ID0gUEdfR0VUQVJHX1RFWFRfUCgwKTsKKwlj b25zdCBjaGFyCSAgICpvYmppZGVudGl0eV9zdHIgPSB0ZXh0X3RvX2NzdHJpbmcob2JqaWRlbnRp dHkpOworCXRleHQJICAgKm9iamVjdHR5cGUgPSBQR19HRVRBUkdfVEVYVF9QKDEpOworCWNvbnN0 IGNoYXIJICAgKm9iamVjdHR5cGVfc3RyID0gdGV4dF90b19jc3RyaW5nKG9iamVjdHR5cGUpOwor CisJY2hhcgkJICAgKmNvbW1hbmQ7CisKKwkvLyBjb25zdHJhaW50IGlzIHBhcnQgb2YgYWx0ZXIg dGFibGUgY29tbWFuZCwgbm8gbmVlZCB0byBkcm9wIGluIERST1AgY29tbWFuZAorCWlmIChzdHJj bXAob2JqZWN0dHlwZV9zdHIsICJ0YWJsZSBjb25zdHJhaW50IikgPT0gMCkgeworCQlQR19SRVRV Uk5fTlVMTCgpOworCX0gZWxzZSBpZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAidG9hc3QgdGFi bGUiKSA9PSAwKSB7CisJCW9iamVjdHR5cGVfc3RyID0gInRhYmxlIjsKKwl9ICBlbHNlIGlmIChz dHJjbXAob2JqZWN0dHlwZV9zdHIsICJkZWZhdWx0IHZhbHVlIikgPT0gMCkgeworCQlQR19SRVRV Uk5fTlVMTCgpOworCX0gZWxzZSBpZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAib3BlcmF0b3Ig b2YgYWNjZXNzIG1ldGhvZCIpID09IDApIHsKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwl9IGVsc2Ug aWYgKHN0cmNtcChvYmplY3R0eXBlX3N0ciwgImZ1bmN0aW9uIG9mIGFjY2VzcyBtZXRob2QiKSA9 PSAwKSB7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfSBlbHNlIGlmIChzdHJjbXAob2JqZWN0dHlw ZV9zdHIsICJ0YWJsZSBjb2x1bW4iKSA9PSAwKSB7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfQor CisJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9iamlkZW50aXR5X3N0ciwgb2JqZWN0 dHlwZV9zdHIsIERST1BfQ0FTQ0FERSk7CisKKwlpZiAoY29tbWFuZCkKKwkJUEdfUkVUVVJOX1RF WFRfUChjc3RyaW5nX3RvX3RleHQoY29tbWFuZCkpOworCisJUEdfUkVUVVJOX05VTEwoKTsKK30K XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJv bCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLmExZjkzNGU2NTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbApAQCAt MCwwICsxLDQgQEAKK2NvbW1lbnQgPSAnVGVzdCBjb2RlIGZvciBEREwgZGVwYXJzZSByZWdyZXNz IGZlYXR1cmUnCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRs aWJkaXIvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzJworcmVsb2NhdGFibGUgPSB0cnVlCi0tIAoy LjM4LjEKCg== --000000000000dc11ed05f034f7ed Content-Type: application/octet-stream; name="v54-0006-Support-DDL-replication-of-alter-type-having-USING-e.patch" Content-Disposition: attachment; filename="v54-0006-Support-DDL-replication-of-alter-type-having-USING-e.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbvamj7z5 RnJvbSBmZTU1ZWM1OWJhM2JmMmU5N2MwMjQ3YjBjMmZkOGUzODBkNDE0ODVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTkgRGVjIDIwMjIgMDc6NDM6MzQgLTA1MDAKU3ViamVjdDogW1BBVENI IDYvN10gU3VwcG9ydCBEREwgcmVwbGljYXRpb24gb2YgYWx0ZXIgdHlwZSBoYXZpbmcgVVNJTkcK IGV4cHJlc3Npb24gb24gZHJvcHBlZCBjb2x1bW4uCgpTdXBwb3J0IERETCByZXBsaWNhdGlvbiBv ZiBhbHRlciB0YWJsZSBoYXZpbmcgc3ViY29tbWFuZHMgd2hpY2ggaW5jbHVkZQpkcm9wIGNvbHVt biBhbmQgYWx0ZXIgdHlwZSB3aGljaCB1c2VzIGRyb3BwZWQgY29sdW1uIGV4cHJlc3Npb24gbGlr ZToKQ1JFQVRFIFRBQkxFIGFub3RoZXIgKGYxIGludCwgZjIgdGV4dCwgZjMgdGV4dCk7CkFMVEVS IFRBQkxFIGFub3RoZXIKICBEUk9QIENPTFVNTiBmMywKICBBTFRFUiBmMSBUWVBFIHRleHQgdXNp bmcgZjIgfHwgJyBhbmQgJyB8fCBmMyB8fCAnIG1vcmUnLAogIEFMVEVSIGYyIFRZUEUgYmlnaW50 IHVzaW5nIGYxICogMTA7CgpDdXJyZW50bHkgZXZlbnQgdHJpZ2dlciBpcyBjYWxsZWQgYWZ0ZXIg dGhlIGV4ZWN1dGlvbiBvZiB0aGUgY29tbWFuZCwgaS5lLgphZnRlciB0aGUgZHJvcCBjb2x1bW4s IHNpbmNlIHRoZSBjb2x1bW4gaXMgZHJvcHBlZCB3ZSBjYW5ub3QgZXZhbHVhdGUKdGhlIGV4cHJl c3Npb24gdXNpbmcgcGdfZ2V0X2V4cHIgZm9yIGEgZHJvcHBlZCBjb2x1bW4uIEZpeGVkIHRoaXMg aXNzdWUKYnkgYWRkaW5nIGV2ZW50IHRyaWdnZXIgYmVmb3JlIHByZXBhcmF0aW9uIG9mIEFMVEVS IFRZUEUgc3ViIGNvbW1hbmQuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2Uu YyAgIHwgIDEzICstLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIHwgMTI3 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVj bWRzLmMgICAgIHwgICA4ICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgg fCAgIDQgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgIHwgICAxICsKIDUg ZmlsZXMgY2hhbmdlZCwgMTQxIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9kZGxfZGVwYXJzZS5jCmluZGV4IGMzOTM5ODUzODMuLjIzYWZiNTA0NGQgMTAwNzU1 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpAQCAtMzc0MSwxNyArMzc0MSw4IEBAIGRlcGFyc2Vf QWx0ZXJSZWxhdGlvbihDb2xsZWN0ZWRDb21tYW5kICpjbWQpCiAJCQkJCQl0bXBfb2JqMiA9IG5l d19vYmp0cmVlKCJVU0lORyIpOwogCQkJCQkJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCiAJCQkJCQl7 Ci0JCQkJCQkJRGF0dW0JCWRlcGFyc2VkOwotCQkJCQkJCWNoYXIJICAgKmRlZmV4cHI7Ci0KLQkJ CQkJCQlleHBycyA9IGxhcHBlbmQoZXhwcnMsIGRlZi0+Y29va2VkX2RlZmF1bHQpOwotCQkJCQkJ CWRlZmV4cHIgPSBub2RlVG9TdHJpbmcoZGVmLT5jb29rZWRfZGVmYXVsdCk7Ci0JCQkJCQkJZGVw YXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAotCQkJCQkJCQkJCQkJCQkg ICBDU3RyaW5nR2V0VGV4dERhdHVtKGRlZmV4cHIpLAotCQkJCQkJCQkJCQkJCQkgICBSZWxhdGlv bkdldFJlbGlkKHJlbCkpOwotCQkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmoyLCAi JXtleHByZXNzaW9ufXMiLAotCQkJCQkJCQkJCQkJICJleHByZXNzaW9uIiwKLQkJCQkJCQkJCQkJ CSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJCQkJCQkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wX29iajIsICIle2V4cHJlc3Npb259cyIsICJleHByZXNzaW9uIiwKKwkJCQkJCQkJ ICAgCQkJCSBzdWItPnVzaW5nZXhwcik7CiAJCQkJCQl9CiAJCQkJCQllbHNlCiAJCQkJCQkJYXBw ZW5kX25vdF9wcmVzZW50KHRtcF9vYmoyKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu YwppbmRleCA1ZTk1NjgwYTczLi5jOGNiNzcwOWJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5jCkBAIC0xNzgyLDYgKzE3ODIsMTMzIEBAIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRl clRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBib29sIHJl 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 QkxFIGNvbW1hbmQsIGFuZCBhZGQgaXQgdG8gY29tbWFuZCBsaXN0LgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYwppbmRleCA1YjQ3ZGMxZjQ4Li45YzZlY2I4ODg2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYwpAQCAtNDY1MSw2ICs0NjUxLDkgQEAgQVRQcmVwQ21kKExpc3QgKip3cXVldWUsIFJl bGF0aW9uIHJlbCwgQWx0ZXJUYWJsZUNtZCAqY21kLAogCQkJY21kID0gQVRQYXJzZVRyYW5zZm9y bUNtZCh3cXVldWUsIHRhYiwgcmVsLCBjbWQsIHJlY3Vyc2UsIGxvY2ttb2RlLAogCQkJCQkJCQkJ ICBBVF9QQVNTX1VOU0VULCBjb250ZXh0KTsKIAkJCUFzc2VydChjbWQgIT0gTlVMTCk7CisKKwkJ CUV2ZW50VHJpZ2dlckFsdGVyVHlwZVN0YXJ0KGNtZCwgcmVsKTsKKwogCQkJLyogUGVyZm9ybXMg b3duIHJlY3Vyc2lvbiAqLwogCQkJQVRQcmVwQWx0ZXJDb2x1bW5UeXBlKHdxdWV1ZSwgdGFiLCBy ZWwsIHJlY3Vyc2UsIHJlY3Vyc2luZywgY21kLAogCQkJCQkJCQkgIGxvY2ttb2RlLCBjb250ZXh0 KTsKQEAgLTQ5MjIsNiArNDkyNSw3IEBAIEFURXhlY0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVk VGFibGVJbmZvICp0YWIsCiB7CiAJT2JqZWN0QWRkcmVzcyBhZGRyZXNzID0gSW52YWxpZE9iamVj dEFkZHJlc3M7CiAJUmVsYXRpb24JcmVsID0gdGFiLT5yZWw7CisJYm9vbAkJY29tbWFuZENvbGxl Y3RlZCA9IGZhbHNlOwogCiAJc3dpdGNoIChjbWQtPnN1YnR5cGUpCiAJewpAQCAtNTA0NSw2ICs1 MDQ5LDggQEAgQVRFeGVjQ21kKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwK IAkJY2FzZSBBVF9BbHRlckNvbHVtblR5cGU6CS8qIEFMVEVSIENPTFVNTiBUWVBFICovCiAJCQkv KiBwYXJzZSB0cmFuc2Zvcm1hdGlvbiB3YXMgZG9uZSBlYXJsaWVyICovCiAJCQlhZGRyZXNzID0g QVRFeGVjQWx0ZXJDb2x1bW5UeXBlKHRhYiwgcmVsLCBjbWQsIGxvY2ttb2RlKTsKKwkJCUV2ZW50 VHJpZ2dlckFsdGVyVHlwZUVuZCgoTm9kZSAqKSBjbWQsIGFkZHJlc3MsIHRhYi0+cmV3cml0ZSk7 CisJCQljb21tYW5kQ29sbGVjdGVkID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQljYXNlIEFUX0FsdGVy Q29sdW1uR2VuZXJpY09wdGlvbnM6CS8qIEFMVEVSIENPTFVNTiBPUFRJT05TICovCiAJCQlhZGRy ZXNzID0KQEAgLTUyMTcsNyArNTIyMyw3IEBAIEFURXhlY0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRl cmVkVGFibGVJbmZvICp0YWIsCiAJLyoKIAkgKiBSZXBvcnQgdGhlIHN1YmNvbW1hbmQgdG8gaW50 ZXJlc3RlZCBldmVudCB0cmlnZ2Vycy4KIAkgKi8KLQlpZiAoY21kKQorCWlmIChjbWQgJiYgIWNv bW1hbmRDb2xsZWN0ZWQpCiAJCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChO b2RlICopIGNtZCwgYWRkcmVzcywgdGFiLT5yZXdyaXRlKTsKIAogCS8qCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmgKaW5kZXggYzI0MWRiMzAyMS4uZTdhYThmNjRjNSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaApAQCAtNzcsNiArNzcsMTAgQEAgZXh0ZXJuIHZvaWQg RXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJZCk7CiBleHRlcm4gdm9pZCBF dmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsCiAJCQkJCQkJ CQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3MsCiAJCQkJCQkJCQkJCQlib29sIHJld3JpdGUpOwor CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclR5cGVTdGFydChBbHRlclRhYmxlQ21kICpz dWJjbWQsIFJlbGF0aW9uIHJlbCk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclR5cGVF bmQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MsCisJCQkJCQkJCQkgYm9vbCBy ZXdyaXRlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVFbmQodm9pZCk7CiAK IGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RHcmFudChJbnRlcm5hbEdyYW50ICppc3Rt dCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3Jj L2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCAzZDI5NGEwMzcxLi5hMWRkMjQ4 ODFjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBi L3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKQEAgLTQwLDYgKzQwLDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQVRTdWJjbWQKIHsKIAlPYmplY3RBZGRyZXNzIGFkZHJlc3M7 CQkvKiBhZmZlY3RlZCBjb2x1bW4sIGNvbnN0cmFpbnQsIGluZGV4LCAuLi4gKi8KIAlOb2RlCSAg ICpwYXJzZXRyZWU7CisJY2hhcgkgICAqdXNpbmdleHByOwogfSBDb2xsZWN0ZWRBVFN1YmNtZDsK IAogdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZAotLSAKMi4zOC4xCgo= --000000000000dc11ed05f034f7ed--