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 1oaehH-0005JG-Ax for pgsql-hackers@arkaria.postgresql.org; Tue, 20 Sep 2022 14:58:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oaehG-00022b-1F for pgsql-hackers@arkaria.postgresql.org; Tue, 20 Sep 2022 14:58:02 +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 1oaehF-00022I-6R for pgsql-hackers@lists.postgresql.org; Tue, 20 Sep 2022 14:58:01 +0000 Received: from mail-lf1-x12a.google.com ([2a00:1450:4864:20::12a]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oaehC-0001mc-Qh for pgsql-hackers@lists.postgresql.org; Tue, 20 Sep 2022 14:58:00 +0000 Received: by mail-lf1-x12a.google.com with SMTP id a3so4214914lfk.9 for ; Tue, 20 Sep 2022 07:57:58 -0700 (PDT) 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; bh=EZWVpwMTQc/tDJ8hvO0kJlhk8brUFOe3SlIXABMuavg=; b=jYHsjCP3nhUmvjYDkhG9b+KyBM61uYfPjEFneOmpsfsBOiPvdueSy6yCkFHmt+VjL6 nm0AHm8iKgJLk78ACr25Jx/DHH/FSotmxOAQOIhhriBMwBN/JDKo7aphh3kF/qae8YmX avjhWl//eO/vxhWQ8lGXujkXpfkUZHffu8sR/a/960Zm4Lvf78Yiv5l4Aq7Ito+nLfw7 gNeaM/6zwmaCIX/kjzHLdwMX/ctzItip9T488oGvQ9wQzNONcLN0cufBdoq1mGmqJG0d aRXW0Nt8teBGCp56rA8c60to2PNiEC7ptLLTBJ6JYsKVCqZNOhUcIughL+FFbwty0RLk JcWw== 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; bh=EZWVpwMTQc/tDJ8hvO0kJlhk8brUFOe3SlIXABMuavg=; b=MSjgB3YAYv+NMGA8B7TC/jeejxuv1IiPT3qD1ypAYXI0ffzK+LP3Oh0VSSRephyQWG yz+E1k2IeH2L1IWqL9w2AhNWTzyPLknGWu2wYRkA3pYY9CW3NnE2i5sM3GnJ64eEXvzA BQaQa46gRRpToK7uSaXoopWTs21F6zJBKXEzSYbBl/B//0l7OipUvmA1jqiYe+puVYIH lP5go+e53ATPUypZl1QC9AlV+NnOyJ7QIPSVFoQIgG3LV0C1zJQ02s3crnXPkWlsQCrZ tx9emcSvJU1hPjd6iThdjrcjUyRI3d5bQBO8Ox4UPM4g6FErZYNDOVvYinxLdzzVUTDP fyFg== X-Gm-Message-State: ACrzQf02b4a4eEA6M7IbDEHW1/E4fUeuUYkM2WNJq+ot5KiDWISioI0C lXhEUzxe2G71ZkqZyvhhXHDcTITFxZCi+2zQ6lg= X-Google-Smtp-Source: AMsMyM7HsaiwYBYaAYonZdmtFy/tiTICVb3tcD5MOHPo6zygCtdHh4M7kikJ5MEcqPqWwVT/9rIqq6LCyFfLNfUpnv8= X-Received: by 2002:a05:6512:1591:b0:499:fa2c:3c4f with SMTP id bp17-20020a056512159100b00499fa2c3c4fmr8518911lfb.672.1663685876886; Tue, 20 Sep 2022 07:57:56 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Ajin Cherian Date: Wed, 21 Sep 2022 00:57:44 +1000 Message-ID: Subject: Re: Support logical replication of DDLs To: "houzj.fnst@fujitsu.com" Cc: Peter Smith , Amit Kapila , Masahiko Sawada , Japin Li , Alvaro Herrera , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers , Zheng Li Content-Type: multipart/mixed; boundary="000000000000b6224b05e91d0dbf" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b6224b05e91d0dbf Content-Type: text/plain; charset="UTF-8" On Thu, Sep 15, 2022 at 10:38 PM Ajin Cherian wrote: > > On Tue, Sep 6, 2022 at 12:18 AM Ajin Cherian wrote: > > > > On Mon, Aug 29, 2022 at 4:14 PM Ajin Cherian wrote: > > > > > > Attaching support for CREATE/ALTER/DROP EXTENSION ddl deparsing and replication. One of the issues faced during replication of "CREATE EXTENSION.." was that it internally results in internally generated commands to create functions, operators etc. If these sql commands are replicated, then the actual "create extension" command when replicated will error out because of duplication. To avoid this, I used the "in_extension" variable in the "collected command" which is set when an extension is being created. If this variable is set, then avoid sql commands other than "CREATE EXTENSION" from being replicated. This patch-set also adds a 5th patch from Vignesh C for supporting the "GRANT" command. However the following global objects are not supported: 1) Foreign data wrapper 2) parameter - ex: grant all on parameter wal_buffers TO test; 3) tablespace - ex: grant create on tablespace tbs1 to test; 4) database - ex: grant all on database postgres to test; 5) role - ex: grant test to test1; -- no event trigger for global objects Thanks Vignesh! regards, Ajin Cherian Fujitsu Australia --000000000000b6224b05e91d0dbf Content-Type: application/octet-stream; name="v22-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v22-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8abifna2 RnJvbSAwMWE0ZGM0NmEzZmJjNmYwMzdkMWNkYzEyM2RkZDliMjdmMjg2MDEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMjIgMDk6NTM6NDQgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyMiAzLzVdIFN1cHBvcnQgQ1JFQVRFIFRBQkxFIEFTIFNFTEVDVCBJTlRPCgpUaGUgbWFpbiBp ZGVhIG9mIHJlcGxpY2F0aW5nIHRoZSBDUkVBVEUgVEFCTEUgQVMgaXMgdGhhdCB3ZSBkZXByYXNl IHRoZSBDUkVBVEUKVEFCTEUgQVMgaW50byBhIHNpbXBsZSBDUkVBVEUgVEFCTEUod2l0aG91dCBz dWJxdWVyeSkgY29tbWFuZCBhbmQgV0FMIGxvZyBpdAphZnRlciBjcmVhdGluZyB0aGUgdGFibGUg YW5kIGJlZm9yZSB3cml0aW5nIGRhdGEgaW50byB0aGUgdGFibGUgYW5kIHJlcGxpY2F0ZQp0aGUg aW5jb21pbmcgd3JpdGVzIGxhdGVyIGFzIG5vcm1hbCBJTlNFUlRzLiBJbiB0aGlzIGFwcG9yYWNo LCB3ZSBkb24ndCBleGVjdXRlCnRoZSBzdWJxdWVyeSBvbiBzdWJzY3JpYmVyIHNvIHRoYXQgZG9u J3QgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBvYmplY3RzCnJlZmVyZW5jZWQgaW4gdGhlIHN1 YnF1ZXJ5IGFsc28gZXhpc3RzIGluIHN1YnNjcmliZXIuIEFuZCBUaGlzIGFwcHJvYWNoIHdvcmtz CmZvciBhbGwga2luZCBvZiBjb21tYW5kcyhlLmcuIENSQUVURSBUQUJMRSBBUyBbU0VMRUNUXVtF WEVDVVRFXVtWQUxVRVNdKQoKSW50cm9kdWNpbmcgYSBuZXcgdHlwZSBvZiBldmVudCB0cmlnZ2Vy ICJ0YWJsZV9pbml0X3dyaXRlIi4gd2hpY2ggd291bGQgYmUgZmlyZWQKZm9yIENSRUFURSBUQUJM RSBBUy9TRUxFQ1QgSU5UTyBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgYW5kCmJlZm9yZSBhbnkg b3RoZXIgbW9kaWZpY2F0aW9uLiB3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGluIHRoZSB0YWJsZV9p bml0X3dyaXRlIGV2ZW50CnRyaWdnZXIgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3Ry aW5nLiBUaGUgd2Fsc2VuZGVyIHdpbGwgc2VuZCB0aGUKc3RyaW5nIHRvIHN1YnNjcmliZXIuIEFu ZCBpbmNvbWluZyBJTlNFUlRzIHdpbGwgYWxzbyBiZSByZXBsaWNhdGVkLgotLS0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgICAgICAgIHwgIDEwICsrCiBzcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jICAgICB8ICAyNCArKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jICAgfCAxNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst CiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAgOSArKwogc3JjL2Jh Y2tlbmQvdGNvcC91dGlsaXR5LmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvZXZ0Y2FjaGUuYyAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdCAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5oICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgICAgfCAg IDkgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggICAgICAgICAgIHwgICAzICstCiAx MCBmaWxlcyBjaGFuZ2VkLCAyMzIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY3JlYXRlYXMuYwppbmRleCAxNTJjMjliLi4wZDgwYzZjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ny ZWF0ZWFzLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5o IgogI2luY2x1ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9jcmVh dGVhcy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKICNpbmNsdWRlICJj b21tYW5kcy9tYXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBjcmVhdGVfY3Rh c19pbnRlcm5hbChMaXN0ICphdHRyTGlzdCwgSW50b0NsYXVzZSAqaW50bykKIAkJU3RvcmVWaWV3 UXVlcnkoaW50b1JlbGF0aW9uQWRkci5vYmplY3RJZCwgcXVlcnksIGZhbHNlKTsKIAkJQ29tbWFu ZENvdW50ZXJJbmNyZW1lbnQoKTsKIAl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRmlyZSB0aGUg dHJpZ2dlciBmb3IgdGFibGVfaW5pdF93cml0ZSBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgc28K KwkJICogdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZSBjYXRhbG9nIGluZm8gYWJvdXQgdGhlIG5ld2x5 IGNyZWF0ZWQgdGFibGUgaW4KKwkJICogdGhlIHRyaWdnZXIgZnVuY3Rpb24uCisJCSAqLworCQlF dmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZSgoTm9kZSAqKSBjcmVhdGUsIGludG9SZWxhdGlvbkFk ZHIpOworCX0KIAogCXJldHVybiBpbnRvUmVsYXRpb25BZGRyOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9kZXBhcnNlLmMKaW5kZXggMTQ4NDU1ZS4uZjBkMzkwOSAxMDA3NTUKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxf ZGVwYXJzZS5jCkBAIC02NTczLDYgKzY1NzMsMjcgQEAgZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChP YmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQogfQogCiAvKgorICogRGVwYXJz ZSBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqCisgKiBkZXBhcnNlX0NyZWF0ZVN0bXQgZG8g dGhlIGFjdHVhbCB3b3JrIGFzIHdlIGRlcGFyc2UgdGhlIGZpbmFsIENyZWF0ZVN0bXQgZm9yCisg KiBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9DcmVhdGVUYWJsZUFzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb2Jq ZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1Rf Q3JlYXRlVGFibGVBcyk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPmQuY3Rhcy5yZWFsX2NyZWF0ZTsK KwlvYmplY3RJZCA9IGNtZC0+ZC5jdGFzLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlyZXR1cm4gZGVw YXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworfQorCisKKy8qCiAgKiBIYW5k bGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5kcy4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNo b3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNsb3cuCkBAIC02 ODI2LDYgKzY4NDcsOSBAQCBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5k ICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKQogCQljYXNlIFNDVF9BbHRlclRhYmxlOgogCQkJdHJl ZSA9IGRlcGFyc2VfQWx0ZXJUYWJsZVN0bXQoY21kKTsKIAkJCWJyZWFrOworCQljYXNlIFNDVF9D cmVhdGVUYWJsZUFzOgorCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoY21kKTsK KwkJCWJyZWFrOwogCQljYXNlIFNDVF9BbHRlck9wRmFtaWx5OgogCQkJdHJlZSA9IGRlcGFyc2Vf QWx0ZXJPcEZhbWlseShjbWQpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmln Z2VyLmMKaW5kZXggNzZmNzE5ZC4uMzdmMjdkYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuYwpAQCAtMTMzLDcgKzEzMyw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVu dFRyaWdTdG10ICpzdG10KQogCWlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1h bmRfc3RhcnQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFu ZF9lbmQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpICE9 IDAgJiYKLQkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAwKQor CQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDAgJiYKKwkJc3Ry Y21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSAhPSAwKQogCQllcmVwb3J0 KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNn KCJ1bnJlY29nbml6ZWQgZXZlbnQgbmFtZSBcIiVzXCIiLApAQCAtMTU5LDcgKzE2MCw4IEBAIENy ZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCS8qIFZhbGlkYXRl IHRhZyBsaXN0LCBpZiBhbnkuICovCiAJaWYgKChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRs X2NvbW1hbmRfc3RhcnQiKSA9PSAwIHx8CiAJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRs X2NvbW1hbmRfZW5kIikgPT0gMCB8fAotCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9k cm9wIikgPT0gMCkKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpID09IDAg fHwKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkK IAkJJiYgdGFncyAhPSBOVUxMKQogCQl2YWxpZGF0ZV9kZGxfdGFncygidGFnIiwgdGFncyk7CiAJ ZWxzZSBpZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSA9PSAwCkBA IC01ODUsNyArNTg3LDggQEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAqcGFyc2V0cmVl LAogCQlkYmd0YWcgPSBDcmVhdGVDb21tYW5kVGFnKHBhcnNldHJlZSk7CiAJCWlmIChldmVudCA9 PSBFVlRfRERMQ29tbWFuZFN0YXJ0IHx8CiAJCQlldmVudCA9PSBFVlRfRERMQ29tbWFuZEVuZCB8 fAotCQkJZXZlbnQgPT0gRVZUX1NRTERyb3ApCisJCQlldmVudCA9PSBFVlRfU1FMRHJvcCB8fAor CQkJZXZlbnQgPT0gRVZUX1RhYmxlSW5pdFdyaXRlKQogCQl7CiAJCQlpZiAoIWNvbW1hbmRfdGFn X2V2ZW50X3RyaWdnZXJfb2soZGJndGFnKSkKIAkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBj b21tYW5kIHRhZyBcIiVzXCIiLCBHZXRDb21tYW5kVGFnTmFtZShkYmd0YWcpKTsKQEAgLTg2OCw2 ICs4NzEsMTYzIEBAIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9p ZCB0YWJsZU9pZCwgaW50IHJlYXNvbikKIAlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwogfQog CisKKy8qCisgKiBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0CisgKiAgICAgUHJlcGFy ZSB0byByZWNlaXZlIGRhdGEgb24gYW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVUIElOVE8gY29tbWFu ZCBhYm91dAorICogICAgIHRvIGJlIGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVudFRyaWdnZXJU YWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9s ZGN4dDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyogaWdub3JlIGlmIGV2ZW50 IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYg KCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl LT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJb2xkY3h0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCWNv bW1hbmQgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZENvbW1hbmQpKTsKKworCWNvbW1hbmQtPnR5 cGUgPSBTQ1RfQ3JlYXRlVGFibGVBczsKKwljb21tYW5kLT5pbl9leHRlbnNpb24gPSBjcmVhdGlu Z19leHRlbnNpb247CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBJbnZhbGlkT2JqZWN0QWRk cmVzczsKKwljb21tYW5kLT5kLmN0YXMucmVhbF9jcmVhdGUgPSBOVUxMOworCWNvbW1hbmQtPnBh cnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKKworCWNvbW1hbmQtPnBhcmVudCA9IGN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IGNvbW1hbmQ7CisKKwlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY3h0KTsKK30KKworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5k CisgKgkJRmluaXNoIHVwIHNhdmluZyBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRUNUIElOVE8gY29t bWFuZC4KKyAqCisgKiBGSVhNRSB0aGlzIEFQSSBpc24ndCBjb25zaWRlcmluZyB0aGUgcG9zc2li aWxpdHkgdGhhdCBhbiB4YWN0L3N1YnhhY3QgaXMKKyAqIGFib3J0ZWQgcGFydHdheSB0aHJvdWdo LiAgUHJvYmFibHkgaXQncyBiZXN0IHRvIGFkZCBhbgorICogQXRFT1N1YlhhY3RfRXZlbnRUcmln Z2VycygpIHRvIGZpeCB0aGlzLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0 ZUVuZCh2b2lkKQoreworCUNvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsKKworCS8qIGlnbm9yZSBp ZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAq LworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCXBhcmVu dCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPnBhcmVudDsKKwor CXBmcmVlKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpOworCisJY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IHBhcmVudDsKK30KKworLyoK KyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZQorICoKKyAqIERlcGFyc2Ug dGhlIGRkbCB0YWJsZSBjcmVhdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVi bGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ Y2hhcgkJCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1hbmQgICAqY21kOworCWNoYXIgICAJ CQkgICAqanNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5m bykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7 CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCUFz c2VydChjbWQpOworCisJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLnNp bXBsZS5hZGRyZXNzLm9iamVjdElkKTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBs b2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRh YmxlLgorCSAqCisJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFi bGVzIHNvIHRoYXQgdW5sb2dnZWQgdGFibGVzCisJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQg YWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2li bGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNv bWluZworCSAqIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgor CSAqLworCWlmIChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQ b2ludGVyR2V0RGF0dW0oTlVMTCk7CisKKwkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQg V0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmlu ZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3Ry aW5nICE9IE5VTEwpCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLnNp bXBsZS5hZGRyZXNzLm9iamVjdElkLCBEQ1RfU2ltcGxlQ21kLAorCQkJCQkJCSBqc29uX3N0cmlu Zywgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShO VUxMKTsKK30KKworLyoKKyAqIEZpcmUgdGFibGVfaW5pdF9yZXdyaXRlIHRyaWdnZXJzLgorICov Cit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpyZWFsX2NyZWF0ZSwgT2Jq ZWN0QWRkcmVzcyBhZGRyZXNzKQoreworCUxpc3QJICAgKnJ1bmxpc3Q7CisJRXZlbnRUcmlnZ2Vy RGF0YSB0cmlnZGF0YTsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyoKKwkgKiBT ZWUgRXZlbnRUcmlnZ2VyRERMQ29tbWFuZFN0YXJ0IGZvciBhIGRpc2N1c3Npb24gYWJvdXQgd2h5 IGV2ZW50CisJICogdHJpZ2dlcnMgYXJlIGRpc2FibGVkIGluIHNpbmdsZSB1c2VyIG1vZGUuCisJ ICovCisJaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbHNv IGRvIG5vdGhpbmcgaWYgb3VyIHN0YXRlIGlzbid0IHNldCB1cCwgd2hpY2ggaXQgd29uJ3QgYmUg aWYgdGhlcmUKKwkgKiB3ZXJlbid0IGFueSByZWxldmFudCBldmVudCB0cmlnZ2VycyBhdCB0aGUg c3RhcnQgb2YgdGhlIGN1cnJlbnQgRERMCisJICogY29tbWFuZC4gIFRoaXMgdGVzdCBtaWdodCB0 aGVyZWZvcmUgc2VlbSBvcHRpb25hbCwgYnV0IGl0J3MKKwkgKiAqbmVjZXNzYXJ5KiwgYmVjYXVz ZSBFdmVudFRyaWdnZXJDb21tb25TZXR1cCBtaWdodCBmaW5kIHRyaWdnZXJzIHRoYXQKKwkgKiBk aWRuJ3QgZXhpc3QgYXQgdGhlIHRpbWUgdGhlIGNvbW1hbmQgc3RhcnRlZC4KKwkgKi8KKwlpZiAo IWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSkKKwkJcmV0dXJuOworCisJLyogRG8gbm90aGluZyBp ZiBubyBjb21tYW5kIHdhcyBjb2xsZWN0ZWQuICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2Vy U3RhdGUtPmN1cnJlbnRDb21tYW5kKQorCQlyZXR1cm47CisKKwljb21tYW5kID0gY3VycmVudEV2 ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCXJ1bmxpc3QgPSBFdmVudFRyaWdn ZXJDb21tb25TZXR1cChjb21tYW5kLT5wYXJzZXRyZWUsCisJCQkJCQkJCQkgIEVWVF9UYWJsZUlu aXRXcml0ZSwKKwkJCQkJCQkJCSAgInRhYmxlX2luaXRfd3JpdGUiLAorCQkJCQkJCQkJICAmdHJp Z2RhdGEpOworCWlmIChydW5saXN0ID09IE5JTCkKKwkJcmV0dXJuOworCisJLyogU2V0IHRoZSBy ZWFsIENyZWF0ZVRhYmxlIHN0YXRtZW50IGFuZCBvYmplY3QgYWRkcmVzcyAqLworCWNvbW1hbmQt PmQuY3Rhcy5yZWFsX2NyZWF0ZSA9IHJlYWxfY3JlYXRlOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRy ZXNzID0gYWRkcmVzczsKKworCS8qIFJ1biB0aGUgdHJpZ2dlcnMuICovCisJRXZlbnRUcmlnZ2Vy SW52b2tlKHJ1bmxpc3QsICZ0cmlnZGF0YSk7CisKKwkvKiBDbGVhbnVwLiAqLworCWxpc3RfZnJl ZShydW5saXN0KTsKKworCS8qCisJICogTWFrZSBzdXJlIGFueXRoaW5nIHRoZSBldmVudCB0cmln Z2VycyBkaWQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBtYWluCisJICogY29tbWFuZC4KKwkgKi8K KwlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworfQorCiAvKgogICogSW52b2tlIGVhY2ggZXZl bnQgdHJpZ2dlciBpbiBhIGxpc3Qgb2YgZXZlbnQgdHJpZ2dlcnMuCiAgKi8KQEAgLTExNDksNyAr MTMwOSw4IEBAIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCkKIAkgKi8KIAlyZXR1cm4g KEV2ZW50Q2FjaGVMb29rdXAoRVZUX1NRTERyb3ApICE9IE5JTCkgfHwKIAkJKEV2ZW50Q2FjaGVM b29rdXAoRVZUX1RhYmxlUmV3cml0ZSkgIT0gTklMKSB8fAotCQkoRXZlbnRDYWNoZUxvb2t1cChF VlRfRERMQ29tbWFuZEVuZCkgIT0gTklMKTsKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RETENv bW1hbmRFbmQpICE9IE5JTCkgfHwKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1RhYmxlSW5pdFdy aXRlKSAhPSBOSUwpOwogfQogCiAvKgpAQCAtMTg2OCw2ICsyMDI5LDcgQEAgcGdfZXZlbnRfdHJp Z2dlcl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCWNhc2UgU0NUX0FsdGVyT3BG YW1pbHk6CiAJCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgogCQkJY2FzZSBTQ1RfQWx0ZXJUU0Nv bmZpZzoKKwkJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CiAJCQkJewogCQkJCQljaGFyCSAgICpp ZGVudGl0eTsKIAkJCQkJY2hhcgkgICAqdHlwZTsKQEAgLTE4ODUsNiArMjA0Nyw4IEBAIHBnX2V2 ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQlhZGRyID0g Y21kLT5kLmNyZWF0ZW9wYy5hZGRyZXNzOwogCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NU X0FsdGVyVFNDb25maWcpCiAJCQkJCQlhZGRyID0gY21kLT5kLmF0c2NmZy5hZGRyZXNzOworCQkJ CQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCisJCQkJCQlhZGRyID0g Y21kLT5kLmN0YXMuYWRkcmVzczsKIAogCQkJCQkvKgogCQkJCQkgKiBJZiBhbiBvYmplY3Qgd2Fz IGRyb3BwZWQgaW4gdGhlIHNhbWUgY29tbWFuZCB3ZSBtYXkgZW5kCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IGZmZjA1YzkuLjIxNWU1MjYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC0xMDAyLDYgKzEwMDIsMTEgQEAgQ3JlYXRlUHVi bGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQp CiAJCQlDTURUQUdfQUxURVJfSU5ERVgKIAkJfTsKIAorCQlDb21tYW5kVGFnCWluaXRfY29tbWFu ZHNbXSA9IHsKKwkJCUNNRFRBR19DUkVBVEVfVEFCTEVfQVMsCisJCQlDTURUQUdfU0VMRUNUX0lO VE8KKwkJfTsKKwogCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2Vy ICovCiAJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21tYW5kX2VuZCIsIGVu ZF9jb21tYW5kcywKIAkJCQkJCQkJCSBsZW5ndGhvZihlbmRfY29tbWFuZHMpLCBteXNlbGYsIHB1 Ym9pZCk7CkBAIC0xMDEzLDYgKzEwMTgsMTAgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0 ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCS8qIENyZWF0ZSB0aGUg dGFibGVfcmV3cml0ZSBldmVudCB0cmlnZ2VyICovCiAJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRy aWdnZXIoInRhYmxlX3Jld3JpdGUiLCByZXdyaXRlX2NvbW1hbmRzLAogCQkJCQkJCQkJIGxlbmd0 aG9mKHJld3JpdGVfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRo ZSB0YWJsZV9pbml0X3dyaXRlIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2 ZW50VHJpZ2dlcigidGFibGVfaW5pdF93cml0ZSIsIGluaXRfY29tbWFuZHMsCisJCQkJCQkJCQkg bGVuZ3Rob2YoaW5pdF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKIAl9CiAKIAl0YWJsZV9j bG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNv cC91dGlsaXR5LmMgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCBhYTAwODE1Li5m YjVlNjc5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9zcmMv YmFja2VuZC90Y29wL3V0aWxpdHkuYwpAQCAtMTY2NSw4ICsxNjY1LDEwIEBAIFByb2Nlc3NVdGls aXR5U2xvdyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgVF9DcmVh dGVUYWJsZUFzU3RtdDoKKwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KHBhcnNl dHJlZSk7CiAJCQkJYWRkcmVzcyA9IEV4ZWNDcmVhdGVUYWJsZUFzKHBzdGF0ZSwgKENyZWF0ZVRh YmxlQXNTdG10ICopIHBhcnNldHJlZSwKIAkJCQkJCQkJCQkJcGFyYW1zLCBxdWVyeUVudiwgcWMp OworCQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKCk7CiAJCQkJYnJlYWs7CiAKIAkJ CWNhc2UgVF9SZWZyZXNoTWF0Vmlld1N0bXQ6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9jYWNoZS9ldnRjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYwpp bmRleCBmN2Y3MTY1Li43ZmI4Y2IyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNo ZS9ldnRjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMKQEAg LTE2Nyw2ICsxNjcsOCBAQCBCdWlsZEV2ZW50VHJpZ2dlckNhY2hlKHZvaWQpCiAJCQlldmVudCA9 IEVWVF9TUUxEcm9wOwogCQllbHNlIGlmIChzdHJjbXAoZXZ0ZXZlbnQsICJ0YWJsZV9yZXdyaXRl IikgPT0gMCkKIAkJCWV2ZW50ID0gRVZUX1RhYmxlUmV3cml0ZTsKKwkJZWxzZSBpZiAoc3RyY21w KGV2dGV2ZW50LCAidGFibGVfaW5pdF93cml0ZSIpID09IDApCisJCQlldmVudCA9IEVWVF9UYWJs ZUluaXRXcml0ZTsKIAkJZWxzZQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CmluZGV4IDJmYjM2NTQuLjQ3YTM5M2EgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE4 MzUsNCArMTE4MzUsNyBAQAogeyBvaWQgPT4gJzQ2NDYnLCBkZXNjciA9PiAndHJpZ2dlciBmb3Ig ZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSByZXdyaXRlJywKICAgcHJvbmFtZSA9PiAncHVibGlj YXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dl cicsCiAgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2Vf dGFibGVfcmV3cml0ZScgfSwKK3sgb2lkID0+ICc0NjQ3JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9y IGRkbCBjb21tYW5kIGRlcGFyc2UgdGFibGUgaW5pdCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0 aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdn ZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNl X3RhYmxlX2luaXRfd3JpdGUnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgK aW5kZXggZmQyZWU3Zi4uYTllMGY3MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu aApAQCAtNTUsNiArNTUsMTAgQEAgZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRERMQ29tbWFuZEVu ZChOb2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyU1FMRHJvcChOb2Rl ICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVSZXdyaXRlKE5vZGUg KnBhcnNldHJlZSwgT2lkIHRhYmxlT2lkLCBpbnQgcmVhc29uKTsKIAorZXh0ZXJuIHZvaWQgRXZl bnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChOb2RlICpwYXJzZXRyZWUpOworZXh0ZXJuIHZv aWQgRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGUoTm9kZSAqcGFyc2V0cmVlLCBPYmplY3RBZGRy ZXNzIGFkZHJlc3MpOworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQo dm9pZCk7CisKIGV4dGVybiBib29sIEV2ZW50VHJpZ2dlckJlZ2luQ29tcGxldGVRdWVyeSh2b2lk KTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckVuZENvbXBsZXRlUXVlcnkodm9pZCk7CiBleHRl cm4gYm9vbCB0cmFja0Ryb3BwZWRPYmplY3RzTmVlZGVkKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJz ZV91dGlsaXR5LmgKaW5kZXggYjUzMjk0Yi4uM2QyOTRhMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2Vf dXRpbGl0eS5oCkBAIC0yOSw3ICsyOSw4IEBAIHR5cGVkZWYgZW51bSBDb2xsZWN0ZWRDb21tYW5k VHlwZQogCVNDVF9BbHRlck9wRmFtaWx5LAogCVNDVF9BbHRlckRlZmF1bHRQcml2aWxlZ2VzLAog CVNDVF9DcmVhdGVPcENsYXNzLAotCVNDVF9BbHRlclRTQ29uZmlnCisJU0NUX0FsdGVyVFNDb25m aWcsCisJU0NUX0NyZWF0ZVRhYmxlQXMKIH0gQ29sbGVjdGVkQ29tbWFuZFR5cGU7CiAKIC8qCkBA IC0xMDEsNiArMTAyLDEyIEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewog CQkJT2JqZWN0VHlwZQlvYmp0eXBlOwogCQl9CQkJZGVmcHJpdnM7CisKKwkJc3RydWN0CisJCXsK KwkJCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwkJCU5vZGUJCSAqcmVhbF9jcmVhdGU7CisJCX0J CQljdGFzOwogCX0JCQlkOwogCiAJc3RydWN0IENvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsJLyog d2hlbiBuZXN0ZWQgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgg Yi9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCmluZGV4IGRkYjY3YTYuLjFlNjQ4MzEgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKKysrIGIvc3JjL2luY2x1ZGUv dXRpbHMvZXZ0Y2FjaGUuaApAQCAtMjIsNyArMjIsOCBAQCB0eXBlZGVmIGVudW0KIAlFVlRfRERM Q29tbWFuZFN0YXJ0LAogCUVWVF9ERExDb21tYW5kRW5kLAogCUVWVF9TUUxEcm9wLAotCUVWVF9U YWJsZVJld3JpdGUKKwlFVlRfVGFibGVSZXdyaXRlLAorCUVWVF9UYWJsZUluaXRXcml0ZQogfSBF dmVudFRyaWdnZXJFdmVudDsKIAogdHlwZWRlZiBzdHJ1Y3QKLS0gCjEuOC4zLjEKCg== --000000000000b6224b05e91d0dbf Content-Type: application/octet-stream; name="v22-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v22-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8abifnd3 RnJvbSBkMzFkNDEzNmZkNWU1YzUzN2JhYTAzMWU4ODhkNjZlZTMyNTFmYmExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMjIgMTA6MjY6MDkgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyMiA0LzVdIFRlc3QgY2FzZXMgZm9yIERETCByZXBsaWNhdGlvbi4KCkF1dGhvcjogVGFrYW1p Y2hpIE9zdW1pCi0tLQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlv bi5wbCB8IDQ2NSArKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDY1 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAz Ml9kZGxfcmVwbGljYXRpb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NjZkY2IwMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9k ZGxfcmVwbGljYXRpb24ucGwKQEAgLTAsMCArMSw0NjUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIy LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBSZWdyZXNzaW9uIHRlc3Rz IGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uIG9mIERETHMKKyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2Fy bmluZ3M7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVy LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c3RhcnQ7CisKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoJ3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVh bWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKK215ICRkZGwg PSAiQ1JFQVRFIFRBQkxFIHRlc3RfcmVwKGlkIGludCBwcmltYXJ5IGtleSwgbmFtZSB2YXJjaGFy LCB2YWx1ZSBpbnRlZ2VyKTsiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgJGRkbCk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdGVzdF9yZXAgVkFMVUVTICgxLCAnZGF0YTEnLCAxKTsiKTsKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3Ry ID0gJG5vZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIG15 cHViIEZPUiBBTEwgVEFCTEVTIHdpdGggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0 ZSwgZGRsJyk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki Q1JFQVRFIFNVQlNDUklQVElPTiBteXN1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIn IFBVQkxJQ0FUSU9OIG15cHViOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IHN5bmNocm9uaXplZCB0aGUg dGFibGUuCisjIFRoaXMgcHJldmVudHMgQUxURVIgVEFCTEUgY29tbWFuZCBiZWxvdyBmcm9tIGJl aW5nIGV4ZWN1dGVkIGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24uCiskbm9kZV9zdWJzY3Jp YmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAiU0VMRUNUIENPVU5UKDEpID0g MCBGUk9NIHBnX3N1YnNjcmlwdGlvbl9yZWwgc3IgV0hFUkUgc3Iuc3JzdWJzdGF0ZSBOT1QgSU4g KCdzJywgJ3InKSBBTkQgc3Iuc3JyZWxpZCA9ICd0ZXN0X3JlcCc6OnJlZ2NsYXNzIgorKTsKKwor IyBUZXN0IEFMVEVSIFRBQkxFIEFERAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFERCBjNCBpbnQ7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgy LCAnZGF0YTInLCAyLCAyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKK215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGM0ID0gMjsiKTsKK2lz KCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgQUREIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIERST1AKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBEUk9QIGM0OyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVwIHdoZXJlIGlkID0gMjsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHRlc3RfcmVwOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBE Uk9QIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFRZUEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBB TFRFUiB2YWx1ZSBUWVBFIHZhcmNoYXIiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDMsICdkYXRhMycsICczJyk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgRlJPTSB0ZXN0X3JlcCBXSEVSRSB2YWx1ZSA9ICczJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEp LCAnQUxURVIgdGVzdF9yZXAgQUxURVIgQ09MVU1OIFRZUEUgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQUxURVIgVEFCTEUgQUxURVIgU0VUIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUg ZGVmYXVsdCB2YWx1ZSBhZnRlciB0aGUgZGlyZWN0IGluc2VydCB0byBzdWJzY3JpYmVyIG5vZGUu Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVz dF9yZXAgQUxURVIgQ09MVU1OIHZhbHVlIFNFVCBERUZBVUxUICdmb28nIik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNCwgJ2RhdGE0 Jyk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgdmFsdWUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDQ7Iik7CitpcygkcmVzdWx0 LCAnZm9vJywgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIFNFVCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsK KworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBk b24ndCBoYXZlIHRoZSBkZWZhdWx0IHZhbHVlIHByZXZpb3VzbHkgZGVmaW5lZC4KKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRF UiBDT0xVTU4gdmFsdWUgRFJPUCBERUZBVUxUOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDUsICdkYXRhNScpOyIpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVl IElTIE5VTEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7CitpcygkcmVzdWx0LCBxKHQp LCAnQUxURVIgdGVzdF9yZXAgQUxURVIgRFJPUCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTAorIyBSZW1vdmUgdGhlIGV4aXN0aW5n IHJlY29yZCB0aGF0IGNvbnRhaW5zIG51bGwgdmFsdWUgZmlyc3QuCitteSAoJHN0ZG91dCwgJHN0 ZGVycik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBG Uk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBTRVQgTk9UIE5V TEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxV RVMgKDYsICdkYXRhNicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAg c3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVy ciA9fiAvRVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiBcInZhbHVlXCIgb2YgcmVsYXRpb24g XCJ0ZXN0X3JlcFwiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFp bGVkIHRvIHJlcGxpY2F0ZSBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwiOworCisjIFRl c3QgQUxURVIgVEFCTEUgQUxURVIgRFJPUCBOT1QgTlVMTAorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIERST1Ag Tk9UIE5VTEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 CisjIEluc2VydCBzYW1lIGRhdGEgdGhhdCBoYXMgTlVMTCB2YWx1ZS4gVGhpcyBmYWlsZWQgYmVm b3JlIGJ1dCBub3cgc2hvdWxkIHN1Y2NlZWQuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNiwgJ2RhdGE2Jyk7Iik7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgdmFsdWUgSVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNjsiKTsKK2lzKCRyZXN1 bHQsIHEodCksICJBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIE5PVCBOVUxMIHJlcGxpY2F0ZWQi KTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBVTkxPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBVTkxPR0dFRDsn KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxV RVMgKDcsICdkYXRhNycsICc3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDc7Iik7Citp cygkcmVzdWx0LCBxcSgwKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBVTkxPR0dFRCByZXBsaWNhdGVk Jyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIExPR0dFRDsnKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMg KDgsICdkYXRhOCcsICc4Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDg7Iik7Citpcygk cmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBMT0dHRUQgcmVwbGljYXRlZCcpOwor CisjIFRlc3QgQ1JFQVRFIFRBQkxFIGFuZCBETUwgY2hhbmdlcworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGEgaW50LCBiIHZhcmNoYXIp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3Vs dCwgcXEoMSksICdDUkVBVEUgdG1wIGlzIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgdmFsdWVzICgxLCAnYScpIik7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1w IHZhbHVlcyAoMiwgJ2InKSIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMiksICdETUwg Q2hhbmdlcyB0byB0bXAgYXJlIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJ TkhFUklUUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAyIChjMyBpbnQpIElOSEVSSVRTICh0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDIgVkFMVUVTICgxLCAnYScsIDEp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAyJzsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElOSEVSSVRTIGlzIHJlcGxpY2F0ZWQnKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBmcm9tIHRtcDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBzb21lIGRh dGEgdG8gaW5oZXJpdGVkIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDIiKTsKKworIyBUZXN0IENSRUFURSBU QUJMRSBMSUtFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRF IFRBQkxFIHRtcDMgKGMzIGludCwgTElLRSB0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDMgVkFMVUVTICgxLCAxLCAnYScpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAzJzsiKTsKK2lzKCRyZXN1bHQs IHFxKDEpLCAnQ1JFQVRFIFRBQkxFIExJS0UgcmVwbGljYXRlZCcpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20g dG1wMzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0IHNvbWUgZGF0YSB0byBhIHRhYmxl IGRlZmluZWQgd2l0aCBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDMiKTsKKworIyBUZXN0IERST1AgVEFCTEUK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQs IHFxKDApLCAnVEFCTEUgdG1wIGlzIGRyb3BwZWQnKTsKKworIyBUZXN0IENSRUFURSBVTkxPR0dF RCBUQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBV TkxPR0dFRCBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJs ZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFU RSBVTkxPR0dFRCBUQUJMRSBpcyByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdpbnNlcnRpbmcgZGF0YSB0byB1bmxvZ2dl ZCB0YWJsZSBpcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRF IFRBQkxFIElGIE5PVCBFWElTVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVz dWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIGRhdGEg dG8gYSB0YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1Qg RVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2 ZSB0aGUgdGFibGUgb24gdGhlIHN1YnNjcmliZXIgaW4gYWR2YW5jZSwgYW5kIGlmIHdlIHN1Y2Nl ZWQKKyMgaW4gcmVwbGljYXRpbmcgY2hhbmdlcy4pCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMg dG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwg cXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBU ZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0 ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciwgYnV0 IG5vdCBvbiB0aGUgc3Vic2NyaWJlci4pCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlk IGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwg J0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JF QVRFIFRBQkxFIHdpdGggY29sbGF0ZQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKG5hbWUgdGV4dCBDT0xMQVRFIFwiQ1wiKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFM VUVTICgnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3Vi Jyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY29sbGF0aW9uX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVS RSB0YWJsZV9uYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcShDKSwgJ0NSRUFURSBUQUJM RSB3aXRoIGNvbGxhdGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0 aCBuYW1lZCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IENPTlNUUkFJTlQgXCJtdXN0IGJlIGJpZ2dlciB0 aGFuIDEwXCIgQ0hFQ0sgKGlkID4gMTApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwK KwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQp OworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRl cyBjaGVjayBjb25zdHJhaW50ICJtdXN0IGJlIGJpZ2dlciB0aGFuIDEwIi8KKyAgb3IgZGllICJm YWlsZWQgdG8gcmVwbGljYXRlIG5hbWVkIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIp OworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25zdHJhaW50 cy4KKyMgTk9UIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IE5PVCBOVUxMKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIs CisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJy LAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBudWxs IHZhbHVlIGluIGNvbHVtbiAibmFtZSIgb2YgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgbm90LW51 bGwgY29uc3RyYWludC8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIG5vbiBudWxsIGNv bnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5VTEwgY29uc3RyYWludAorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlk IGludCwgbmFtZSB0ZXh0IE5VTEwpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1lIElTIE5VTEwgRlJPTSB0bXA7Iik7 CitpcygkcmVzdWx0LCBxcSh0KSwgIkNSRUFURSBUQUJMRSB3aXRoIE5VTEwgY29uc3RyYWludCBy ZXBsaWNhdGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXAiKTsKKworIyBDSEVDSyBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBwcm9kdWN0X2Ft ZSB0ZXh0LCBwcmljZSBpbnQgQ0hFQ0sgKHByaWNlID4gMCkpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycsIC0xMDApOyIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZv ciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfcHJpY2VfY2hl Y2siLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgQ0hFQ0sgY29uc3RyYWludCI7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7 CisKKyMgREVGQVVMVAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNS RUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IERFRkFVTFQgJ2ZvbycpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBuYW1lIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoZm9vKSwgIkNSRUFURSBUQUJMRSB3 aXRoIGRlZmF1bHQgdmFsdWUgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVU5JUVVFIGNvbnN0cmFpbnQK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1w IChpZCBpbnQgVU5JUVVFKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3Ag PT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRz dGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVz IHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfaWRfa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVw bGljYXRlIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFBSSU1BUlkgS0VZ Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRt cCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdi YXInKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBc JHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3Br ZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgcHJpbWFyeSBrZXkgYXQgY3JlYXRp bmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag VEFCTEUgdG1wOyIpOworCisjIEVYQ0xVREUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgY2lyY2xlcyAoYyBjaXJjbGUsIEVYQ0xVREUgVVNJTkcg Z2lzdCAoYyBXSVRIICYmKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAo JzwoMSwgMSksIDE+Jzo6Y2lyY2xlKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRlcnIgPX4gL0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1 c2lvbiBjb25zdHJhaW50ICJjaXJjbGVzX2NfZXhjbCIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJl cGxpY2F0ZSBFWENMVURFIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIGNpcmNsZXMiKTsKKworIyBSRUZFUkVOQ0VT Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHBy b2R1Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMSwg J2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHByb2R1Y3QgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBS SU1BUlkgS0VZLCBwcm9kdWN0X2lkIGludCBSRUZFUkVOQ0VTIHByb2R1Y3QgKGlkKSkiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIG9yZGVycyBWQUxVRVMgKDEsIDEwKSIs CisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJy LAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBpbnNl cnQgb3IgdXBkYXRlIG9uIHRhYmxlICJvcmRlcnMiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0 cmFpbnQgIm9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBs aWNhdGUgUkVGRVJFTkNFUyBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBvcmRlcnMiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHByb2R1Y3QiKTsKKworIyBERUZF UlJBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZB TFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hlY2sgb2YgZGVmZXJyYWJs ZSBjbGF1c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVVBEQVRF IHRtcCBTRVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUgYSB0ZXN0IHRoYXQgc2hv dWxkIGZhaWwgZm9yIElOSVRJQUxMWSBJTU1FRElBVEUodGhlIGRlZmF1bHQpCiskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1wIFNFVCBpZCA9 IGlkICsgMTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsKK0RFTEVURSBG Uk9NIHRtcCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispLCBvbl9lcnJvcl9zdG9wID0+IDAsIHN0 ZGVyciA9PiBcJHN0ZGVyciwgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3Br ZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgREVGRVJSQUJMRSBhdCBjcmVhdGlu ZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXA7Iik7CisKKyMgTk9UIERFRkVSUkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgTk9U IERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMg KDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlk ID0gaWQgKyAxOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJy ID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAv RVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0 bXBfcGtleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBOT1QgREVGRVJSQUJMRSBh dCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgREVGRVJSQUJMRSBhbmQgSU5JVElBTExZIERFRkVS UkVECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVELCBu YW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNo ZWNrIG9mIGRlZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRl IGEgdGVzdCB0aGF0IHNob3VsZCBzdWNjZWVkIGZvciBJTklUSUFMTFkgREVGRVJSRUQKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRt cCBTRVQgaWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7 CitERUxFVEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVz dCBDUkVBVEUgVEFCTEUgd2l0aCB0YWJsZSBjb25zdHJhaW50CisjIFdlIHdpbGwgc2V0IHR3byBj aGVja3MgYW5kIGNvbmR1Y3QgdHdvIGluc2VydHMgdGhhdCBzaG91bGQgZmFpbCByZXNwZWN0aXZl bHkuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFC TEUgdG1wIChwcmljZSBpbnQsIGRpc2NvdW50ZWRfcHJpY2UgaW50LCBDSEVDSyAoZGlzY291bnRl ZF9wcmljZSA+IDAgQU5EIHByaWNlID4gZGlzY291bnRlZF9wcmljZSkpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMTAwLCAwKTsiLAorCQkJCQkg ICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJ ICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3Ig cmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAg b3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKGZpcnN0IGNvbmRp dGlvbikgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoNTAsIDEwMCk7IiwKKwkJCQkJICAgb25fZXJy b3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91 dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9u ICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAi ZmFpbGVkIHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChzZWNvbmQgY29uZGl0aW9uKSBh dCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgV0lUSCBzdHJvcmFn ZV9wYXJhbWV0ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVEFCTEUgdG1wIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA4MCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBn X2NsYXNzIFdIRVJFIHJlbG5hbWUgPSAndG1wJzsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+ IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rk b3V0KTsKKyRzdGRvdXQgPX4gL3tmaWxsZmFjdG9yPTgwfS8KKyAgb3IgZGllICJmYWlsZWQgdG8g cmVwbGljYXRlIHN0b3JhZ2Ugb3B0aW9uIjsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRy ZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIHdpdGggc3RvcmFnZV9wYXJhbWV0ZXIgcmVwbGlj YXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFC TEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgKGNyZWF0aW5nIGEg dGFibGVzcGFjZSBpcyBub3QgcmVwbGljYXRlZCkKKyMgUHJlcGFyZSB0aGUgZGlyZWN0b3JpZXMg Zm9yIHRoZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZmlyc3QuCitteSAoJGJhc2VkaXIsICR0 YWJsZXNwYWNlX2Rpcik7CisKKyRiYXNlZGlyID0gJG5vZGVfcHVibGlzaGVyLT5iYXNlZGlyOwor JHRhYmxlc3BhY2VfZGlyID0gIiRiYXNlZGlyL3RibHNwY19wdWIiOworbWtkaXIoJHRhYmxlc3Bh Y2VfZGlyKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUg VEFCTEVTUEFDRSBteXRibHNwYyBMT0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKyRiYXNl ZGlyID0gJG5vZGVfc3Vic2NyaWJlci0+YmFzZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFz ZWRpci90YmxzcGNfc3ViIjsKK21rZGlyICgkdGFibGVzcGFjZV9kaXIpOworJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVTUEFDRSBteXRibHNwYyBM T0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCkgVEFCTEVTUEFDRSBteXRi bHNwYzsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAn Q1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRF IFRZUEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQ RSBteXR5cGUgQVMgKGlkIGludCwgbmFtZSB0ZXh0LCBhZ2UgaW50KTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIE9GIG15dHlwZTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgx LCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJM RSBPRiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJEUk9QIFRZUEUgbXl0eXBlIik7CisKKyMgVGVzdCBDUkVBVEUgRU5VTSBUWVBFCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXllbnVtdHlw ZSBBUyBFTlVNICgnbmV3JywgJ29wZW4nLCAnY2xvc2VkJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoc3RhdHVzIG15ZW51bXR5cGUpOyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxV RVMgKCduZXcnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCAqIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEobmV3KSwgJ0NSRUFURSBUQUJMRSBP RiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi RFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRZUEUgbXllbnVtdHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIFJBTkdFIFRZUEUKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBmbG9hdDhf cmFuZ2UgQVMgUkFOR0UgKHN1YnR5cGUgPSBmbG9hdDgsIHN1YnR5cGVfZGlmZiA9IGZsb2F0OG1p KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wICh2YWwg ZmxvYXQ4X3JhbmdlKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJpbnNlcnQgaW50byB0bXAgdmFsdWVzKGZsb2F0OF9yYW5nZSgtMTIuMzQsICcxLjExMTExM2Uz JykpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICog ZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcShbLTEyLjM0LDExMTEuMTEzXCkpLCAnQ1JFQVRF IFRBQkxFIE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVFlQRSBmbG9hdDhfcmFuZ2UiKTsKKworIyBUZXN0IENSRUFURSBCQVNF IERBVEEgVFlQRSBhbmQgdXNlIGl0IGluIHRhYmxlIGRlZmluaXRpb24KKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICIKK0NSRUFURSBUWVBFIGludDQyOworQ1JFQVRFIEZV TkNUSU9OIGludDQyX2luKGNzdHJpbmcpCisgICBSRVRVUk5TIGludDQyCisgICBBUyAnaW50NGlu JworICAgTEFOR1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBGVU5DVElP TiBpbnQ0Ml9vdXQoaW50NDIpCisgICBSRVRVUk5TIGNzdHJpbmcKKyAgIEFTICdpbnQ0b3V0Jwor ICAgTEFOR1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBUWVBFIGludDQy ICgKKyAgIGludGVybmFsbGVuZ3RoID0gNCwKKyAgIGlucHV0ID0gaW50NDJfaW4sCisgICBvdXRw dXQgPSBpbnQ0Ml9vdXQsCisgICBhbGlnbm1lbnQgPSBpbnQ0LAorICAgZGVmYXVsdCA9IDQyLAor ICAgcGFzc2VkYnl2YWx1ZQorKTsKK0NSRUFURSBUQUJMRSB0bXAgKGYxIGludDQyKTsKK0lOU0VS VCBJTlRPIHRtcCBERUZBVUxUIFZBTFVFUzsKKyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUICogZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSg0Miks ICdDUkVBVEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUWVBFIGludDQyIGNhc2NhZGUiKTsKKworcGFzcyAiRERM IHJlcGxpY2F0aW9uIHRlc3RzIHBhc3NlZDoiOworCiskbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwor JG5vZGVfcHVibGlzaGVyLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjEuOC4zLjEKCg== --000000000000b6224b05e91d0dbf Content-Type: application/octet-stream; name="v22-0005-Support-DDL-of-GRANT-Command.patch" Content-Disposition: attachment; filename="v22-0005-Support-DDL-of-GRANT-Command.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8abifng4 RnJvbSA4OGRjY2Y5OTMwNTdmN2Q3OTcxNmMxNWMxOTA1OTE2MTRmZDNhZjQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMjIgMTA6Mzc6MjEgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyMiA1LzVdIFN1cHBvcnQgRERMIG9mIEdSQU5UIENvbW1hbmQuCgpHcmFudGluZyB0aGUgZm9s bG93aW5nIGdsb2JhbCBvYmplY3RzIGFyZSBub3Qgc3VwcG9ydGVkOgoxKSBGb3JlaWduIGRhdGEg d3JhcHBlcgoyKSBwYXJhbWV0ZXIgLSBleDogZ3JhbnQgYWxsIG9uIHBhcmFtZXRlciB3YWxfYnVm ZmVycyBUTyB0ZXN0OwozKSB0YWJsZXNwYWNlIC0gIGV4OiBncmFudCBjcmVhdGUgb24gdGFibGVz cGFjZSB0YnMxIHRvIHRlc3Q7CjQpIGRhdGFiYXNlIC0gIGV4OiBncmFudCBhbGwgb24gZGF0YWJh c2UgcG9zdGdyZXMgdG8gdGVzdDsKNSkgcm9sZSAtICBleDogZ3JhbnQgdGVzdCB0byB0ZXN0MTsg LS0gbm8gZXZlbnQgdHJpZ2dlciBmb3IgZ2xvYmFsIG9iamVjdHMKLS0tCiBzcmMvYmFja2VuZC9j YXRhbG9nL2FjbGNoay5jICAgICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9k ZGxfZGVwYXJzZS5jICAgICB8IDI1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyAgIHwgICAzICstCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAgMyArLQogc3JjL2luY2x1ZGUvdXRp bHMvYWNsY2hrX2ludGVybmFsLmggICAgfCAgIDEgKwogNSBmaWxlcyBjaGFuZ2VkLCAyNTkgaW5z ZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRh bG9nL2FjbGNoay5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYwppbmRleCBhYTVhMmVk Li43ZGMxOTBkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCisrKyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMKQEAgLTM4NSw3ICszODUsMTEgQEAgRXhlY3V0 ZUdyYW50U3RtdChHcmFudFN0bXQgKnN0bXQpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJCSBlcnJtc2coImdyYW50 b3IgbXVzdCBiZSBjdXJyZW50IHVzZXIiKSkpOworCisJCWlzdG10LmdyYW50b3JfdWlkID0gZ3Jh bnRvcjsKIAl9CisJZWxzZQorCQlpc3RtdC5ncmFudG9yX3VpZCA9IEludmFsaWRPaWQ7CiAKIAkv KgogCSAqIFR1cm4gdGhlIHJlZ3VsYXIgR3JhbnRTdG10IGludG8gdGhlIEludGVybmFsR3JhbnQg Zm9ybS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCmluZGV4IGYwZDM5MDkuLjI3MjdkZWMg MTAwNzU1Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpAQCAtMzIsMTUgKzMyLDE5IEBACiAjaW5j bHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19hdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2F1 dGhpZC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY2FzdC5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfY2xhc3MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udmVyc2lv bi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVwZW5kLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19mb3JlaWduX2RhdGFfd3JhcHBlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9yZWlnbl9z ZXJ2ZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2V4dGVuc2lvbi5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfaW5oZXJpdHMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19sYXJnZW9iamVjdC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf bmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNsYXNzLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19vcGVyYXRvci5oIgpAQCAtNzY2LDYgKzc3MCwzOSBAQCBuZXdfb2JqdHJlZV9m b3Jfcm9sZXNwZWMoUm9sZVNwZWMgKnNwZWMpCiB9CiAKIC8qCisgKiBIZWxwZXIgcm91dGluZSBm b3IgJXt9UiBvYmplY3RzLCB3aXRoIHJvbGUgc3BlY2lmaWVkIGJ5IE9JRC4gIChBQ0xfSURfUFVC TElDCisgKiBtZWFucyB0byB1c2UgInB1YmxpYyIpLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitu ZXdfb2JqdHJlZV9mb3Jfcm9sZV9pZChPaWQgcm9sZW9pZCkKK3sKKwlPYmpUcmVlICAgICpyb2xl OworCisJcm9sZSA9IG5ld19vYmp0cmVlKCIiKTsKKworCWlmIChyb2xlb2lkICE9IEFDTF9JRF9Q VUJMSUMpCisJeworCQlIZWFwVHVwbGUJcm9sdHVwOworCQljaGFyCSAgICpyb2xlbmFtZTsKKwor CQlyb2x0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQVVUSE9JRCwgT2JqZWN0SWRHZXREYXR1bShyb2xl b2lkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChyb2x0dXApKQorCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkJIGVycm1z Zygicm9sZSB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsIHJvbGVvaWQpKSk7CisKKwkJcm9s ZW5hbWUgPSBOYW1lU3RyKCgoRm9ybV9wZ19hdXRoaWQpIEdFVFNUUlVDVChyb2x0dXApKS0+cm9s bmFtZSk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJvbGUsICIle3JvbGVuYW1lfUkiLCBwc3Ry ZHVwKHJvbGVuYW1lKSk7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHJvbHR1cCk7CisJfQorCWVsc2UK KwkJYXBwZW5kX3N0cmluZ19vYmplY3Qocm9sZSwgIiV7cm9sZW5hbWV9SSIsICJwdWJsaWMiKTsK KworCXJldHVybiByb2xlOworfQorCisvKgogICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAl e31UIGVsZW1lbnRzLgogICovCiBzdGF0aWMgT2JqVHJlZSAqCkBAIC0xNzExLDYgKzE3NDgsMjE2 IEBAIGRlcGFyc2VfQWx0ZXJPYmplY3RTY2hlbWFTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywg Tm9kZSAqcGFyc2V0cmVlLAogfQogCiAvKgorICogZGVwYXJzZSBhbiBHUkFOVCBjb21tYW5kLgor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0dyYW50U3RtdChDb2xsZWN0ZWRDb21tYW5k ICpjbWQpCit7CisJSW50ZXJuYWxHcmFudCAqaXN0bXQ7CisJT2JqVHJlZQkgICAqZ3JhbnRTdG10 OworCWNoYXIJICAgKmZtdDsKKwljaGFyCSAgICpvYmp0eXBlOworCUxpc3QJICAgKmxpc3Q7CisJ TGlzdENlbGwgICAqY2VsbDsKKwlPaWQJCQljbGFzc0lkOworCU9ialRyZWUJICAgKnRtcDsKKwor CWlzdG10ID0gY21kLT5kLmdyYW50LmlzdG10OworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8g b2JqZWN0cyBmcm9tICJBTEwgLi4uIElOIFNDSEVNQSIgdG8gYmUgZ3JhbnRlZCwgdGhlbgorCSAq IHdlIG5lZWQgbm90IGRvIGFueXRoaW5nLgorCSAqLworCWlmIChpc3RtdC0+b2JqZWN0cyA9PSBO SUwpCisJCXJldHVybiBOVUxMOworCisJc3dpdGNoIChpc3RtdC0+b2JqdHlwZSkKKwl7CisJCWNh c2UgT0JKRUNUX0NPTFVNTjoKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCQlvYmp0eXBlID0gIlRB QkxFIjsKKwkJCWNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2Fz ZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlvYmp0eXBlID0gIlNFUVVFTkNFIjsKKwkJCWNsYXNzSWQg PSBSZWxhdGlvblJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRE9NQUlOOgor CQkJb2JqdHlwZSA9ICJET01BSU4iOworCQkJY2xhc3NJZCA9IFR5cGVSZWxhdGlvbklkOworCQkJ YnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZEVzoKKwkJCW9ianR5cGUgPSAiRk9SRUlHTiBEQVRBIFdS QVBQRVIiOworCQkJY2xhc3NJZCA9IEZvcmVpZ25EYXRhV3JhcHBlclJlbGF0aW9uSWQ7CisJCQli cmVhazsKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9TRVJWRVI6CisJCQlvYmp0eXBlID0gIkZPUkVJ R04gU0VSVkVSIjsKKwkJCWNsYXNzSWQgPSBGb3JlaWduU2VydmVyUmVsYXRpb25JZDsKKwkJCWJy ZWFrOworCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJCW9ianR5cGUgPSAiRlVOQ1RJT04iOwor CQkJY2xhc3NJZCA9IFByb2NlZHVyZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpF Q1RfUFJPQ0VEVVJFOgorCQkJb2JqdHlwZSA9ICJQUk9DRURVUkUiOworCQkJY2xhc3NJZCA9IFBy b2NlZHVyZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfUk9VVElORToKKwkJ CW9ianR5cGUgPSAiUk9VVElORSI7CisJCQljbGFzc0lkID0gUHJvY2VkdXJlUmVsYXRpb25JZDsK KwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9MQU5HVUFHRToKKwkJCW9ianR5cGUgPSAiTEFOR1VB R0UiOworCQkJY2xhc3NJZCA9IExhbmd1YWdlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNl IE9CSkVDVF9MQVJHRU9CSkVDVDoKKwkJCW9ianR5cGUgPSAiTEFSR0UgT0JKRUNUIjsKKwkJCWNs YXNzSWQgPSBMYXJnZU9iamVjdFJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1Rf U0NIRU1BOgorCQkJb2JqdHlwZSA9ICJTQ0hFTUEiOworCQkJY2xhc3NJZCA9IE5hbWVzcGFjZVJl bGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCW9ianR5cGUgPSAi VFlQRSI7CisJCQljbGFzc0lkID0gVHlwZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBP QkpFQ1RfREFUQUJBU0U6CisJCWNhc2UgT0JKRUNUX1RBQkxFU1BBQ0U6CisJCQlvYmp0eXBlID0g IiI7CisJCQljbGFzc0lkID0gSW52YWxpZE9pZDsKKwkJCWVsb2coRVJST1IsICJnbG9iYWwgb2Jq ZWN0cyBub3Qgc3VwcG9ydGVkIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJS T1IsICJpbnZhbGlkIE9CSkVDVCB2YWx1ZSAlZCIsIGlzdG10LT5vYmp0eXBlKTsKKwl9CisKKwlm bXQgPSBwc3ByaW50ZigiR1JBTlQiKTsKKworCWdyYW50U3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZt dCwgMCk7CisKKwkvKiBidWlsZCBsaXN0IG9mIHByaXZpbGVnZXMgdG8gZ3JhbnQgKi8KKwlpZiAo aXN0bXQtPmFsbF9wcml2cykKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTEwgUFJJVklM RUdFUyIsIDApOworCQlsaXN0ID0gbGlzdF9tYWtlMShuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK Kwl9CisJZWxzZQorCXsKKwkJbGlzdCA9IE5JTDsKKworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMg JiBBQ0xfSU5TRVJUKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3Qo IklOU0VSVCIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1NFTEVDVCkKKwkJCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJTRUxFQ1QiKSk7CisJCWlmIChp c3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9VUERBVEUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfc3RyaW5nX29iamVjdCgiVVBEQVRFIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBB Q0xfREVMRVRFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIkRF TEVURSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1RSVU5DQVRFKQorCQkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlRSVU5DQVRFIikpOworCQlpZiAo aXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfUkVGRVJFTkNFUykKKwkJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19zdHJpbmdfb2JqZWN0KCJSRUZFUkVOQ0VTIikpOworCQlpZiAoaXN0bXQtPnByaXZp bGVnZXMgJiBBQ0xfVFJJR0dFUikKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdf b2JqZWN0KCJUUklHR0VSIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfRVhFQ1VU RSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJFWEVDVVRFIikp OworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVVNBR0UpCisJCQlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiVVNBR0UiKSk7CisJCWlmIChpc3RtdC0+cHJpdmls ZWdlcyAmIEFDTF9DUkVBVEUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29i amVjdCgiQ1JFQVRFIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfQ1JFQVRFX1RF TVApCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiVEVNUE9SQVJZ IikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfQ09OTkVDVCkKKwkJCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJDT05ORUNUIikpOworCisJCWlmIChpc3Rt dC0+Y29sX3ByaXZzICE9IE5JTCkKKwkJeworCQkJTGlzdENlbGwgICAqb2NlbGw7CisKKwkJCWZv cmVhY2gob2NlbGwsIGlzdG10LT5jb2xfcHJpdnMpCisJCQl7CisJCQkJQWNjZXNzUHJpdiAqcHJp diA9IGxmaXJzdChvY2VsbCk7CisJCQkJTGlzdCAgICpjb2xzID0gTklMOworCisJCQkJdG1wID0g bmV3X29ianRyZWUoIiIpOworCQkJCWZvcmVhY2goY2VsbCwgcHJpdi0+Y29scykKKwkJCQl7CisJ CQkJCVN0cmluZyAqY29sbmFtZSA9IGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbCk7CisKKwkJCQkJ Y29scyA9IGxhcHBlbmQoY29scywKKwkJCQkJCQkJICAgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFs KGNvbG5hbWUpKSk7CisJCQkJfQorCQkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wLCAiKCV7Y29s czosIH1zKSIsIGNvbHMpOworCisJCQkJaWYgKHByaXYtPnByaXZfbmFtZSA9PSBOVUxMKQorCQkJ CQlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0bXQsICIle3ByaXZ9cyIsICJBTEwgUFJJVklM RUdFUyIpOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3JhbnRTdG10LCAi JXtwcml2fXMiLCBwcml2LT5wcml2X25hbWUpOworCisJCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQl9CisJCX0KKwl9CisJYXBwZW5kX2FycmF5X29i amVjdChncmFudFN0bXQsICIle3ByaXZpbGVnZXM6LCB9cyBPTiIsIGxpc3QpOworCisJYXBwZW5k X3N0cmluZ19vYmplY3QoZ3JhbnRTdG10LCAiJXtvYmp0eXBlfXMiLCBvYmp0eXBlKTsKKworCS8q IHRhcmdldCBvYmplY3RzLiAgV2UgdXNlIG9iamVjdCBpZGVudGl0aWVzIGhlcmUgKi8KKwlsaXN0 ID0gTklMOworCWZvcmVhY2goY2VsbCwgaXN0bXQtPm9iamVjdHMpCisJeworCQlPaWQJCW9iamlk ID0gbGZpcnN0X29pZChjZWxsKTsKKwkJT2JqZWN0QWRkcmVzcyBhZGRyOworCisJCWFkZHIuY2xh c3NJZCA9IGNsYXNzSWQ7CisJCWFkZHIub2JqZWN0SWQgPSBvYmppZDsKKwkJYWRkci5vYmplY3RT dWJJZCA9IDA7CisKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHl9cyIsIDEsCisJ CQkJCQkJICAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgICBnZXRPYmplY3RJ ZGVudGl0eSgmYWRkciwgZmFsc2UpKTsKKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChncmFudFN0bXQsICIl e3ByaXZ0YXJnZXQ6LCB9cyBUTyIsIGxpc3QpOworCisJLyogbGlzdCBvZiBncmFudGVlcyAqLwor CWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBpc3RtdC0+Z3JhbnRlZXMpCisJeworCQlPaWQJ CWdyYW50ZWUgPSBsZmlyc3Rfb2lkKGNlbGwpOworCisJCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9y b2xlX2lkKGdyYW50ZWUpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGdyYW50U3RtdCwgIiV7Z3JhbnRl ZXM6LCB9cyIsIGxpc3QpOworCisJLyogdGhlIHdvcmRpbmcgb2YgdGhlIGdyYW50IG9wdGlvbiBp cyB2YXJpYWJsZSAuLi4gKi8KKwlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0bXQsICIle2dy YW50X29wdGlvbn1zIiwKKwkJCQkJCSBpc3RtdC0+Z3JhbnRfb3B0aW9uID8gICJXSVRIIEdSQU5U IE9QVElPTiIgOiAiIik7CisKKwlpZiAoaXN0bXQtPmdyYW50b3JfdWlkKQorCXsKKwkJSGVhcFR1 cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAqcm9sZW5hbWU7CisKKwkJcm9sdHVwID0gU2VhcmNoU3lz Q2FjaGUxKEFVVEhPSUQsIE9iamVjdElkR2V0RGF0dW0oaXN0bXQtPmdyYW50b3JfdWlkKSk7CisJ CWlmICghSGVhcFR1cGxlSXNWYWxpZChyb2x0dXApKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ KGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkJIGVycm1zZygicm9sZSB3 aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsIGlzdG10LT5ncmFudG9yX3VpZCkpKTsKKworCQly b2xlbmFtZSA9IE5hbWVTdHIoKChGb3JtX3BnX2F1dGhpZCkgR0VUU1RSVUNUKHJvbHR1cCkpLT5y b2xuYW1lKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3JhbnRTdG10LCAiR1JBTlRFRCBCWSAl e3JvbGVuYW1lfXMiLCByb2xlbmFtZSk7CisJCVJlbGVhc2VTeXNDYWNoZShyb2x0dXApOworCX0K KworCXJldHVybiBncmFudFN0bXQ7Cit9CisKKy8qCiAgKiBEZXBhcnNlIGFuIEFsdGVyT3BlcmF0 b3JTdG10IChBTFRFUiBPUEVSQVRPUiAuLi4gU0VUIC4uLikuCiAgKi8KIHN0YXRpYyBPYmpUcmVl ICoKQEAgLTY4NDcsNiArNzA5NCw5IEBAIGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3Rl ZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpCiAJCWNhc2UgU0NUX0FsdGVyVGFibGU6 CiAJCQl0cmVlID0gZGVwYXJzZV9BbHRlclRhYmxlU3RtdChjbWQpOwogCQkJYnJlYWs7CisJCWNh c2UgU0NUX0dyYW50OgorCQkJdHJlZSA9IGRlcGFyc2VfR3JhbnRTdG10KGNtZCk7CisJCQlicmVh azsKIAkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKIAkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZVRh YmxlQXNTdG10KGNtZCk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu YwppbmRleCAzN2YyN2RjLi44NjE1ODRjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5jCkBAIC0yNDc0LDcgKzI0NzQsOCBAQCBwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5k X2VuZChQR19GVU5DVElPTl9BUkdTKQogCQl7CiAJCQlSZW5hbWVTdG10ICpyZW5hbWVTdG10ID0g KFJlbmFtZVN0bXQgKiljbWQtPnBhcnNldHJlZTsKIAotCQkJaWYgKHJlbmFtZVN0bXQtPnJlbGF0 aW9uVHlwZSAhPSBPQkpFQ1RfVFlQRSAmJgorCQkJaWYgKHJlbmFtZVN0bXQgJiYKKwkJCQlyZW5h bWVTdG10LT5yZWxhdGlvblR5cGUgIT0gT0JKRUNUX1RZUEUgJiYKIAkJCQlyZW5hbWVTdG10LT5y ZWxhdGlvblR5cGUgIT0gT0JKRUNUX1RBQkxFKQogCQkJCWNvbnRpbnVlOwogCQl9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IDIxNWU1MjYuLjljNzk0OTYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC05OTksNyArOTk5LDggQEAgQ3Jl YXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQg KnN0bXQpCiAJCQlDTURUQUdfRFJPUF9TQ0hFTUEsCiAJCQlDTURUQUdfQ1JFQVRFX0lOREVYLAog CQkJQ01EVEFHX0RST1BfSU5ERVgsCi0JCQlDTURUQUdfQUxURVJfSU5ERVgKKwkJCUNNRFRBR19B TFRFUl9JTkRFWCwKKwkJCUNNRFRBR19HUkFOVAogCQl9OwogCiAJCUNvbW1hbmRUYWcJaW5pdF9j b21tYW5kc1tdID0gewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvYWNsY2hrX2ludGVy bmFsLmggYi9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaAppbmRleCAzNjEyODRk Li40ZTAyMGVmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwu aAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaApAQCAtMzksNiArMzks NyBAQCB0eXBlZGVmIHN0cnVjdAogCUxpc3QJICAgKmdyYW50ZWVzOwogCWJvb2wJCWdyYW50X29w dGlvbjsKIAlEcm9wQmVoYXZpb3IgYmVoYXZpb3I7CisJT2lkCQkJZ3JhbnRvcl91aWQ7CiB9IElu dGVybmFsR3JhbnQ7CiAKIAotLSAKMS44LjMuMQoK --000000000000b6224b05e91d0dbf Content-Type: application/octet-stream; name="v22-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v22-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8abifn61 RnJvbSA1NGRhYWJkMzM4MmQyMTY4NDNhMzQ0M2VlZmI5NDUxNDM3YmFhNDhhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMjIgMDk6NDM6MzIgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyMiAyLzVdIFN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLgoKVG8gc3VwcG9ydCBEREwgcmVwbGlj YXRpb24sIHdlIHVzZSBldmVudCB0cmlnZ2VyIGFuZCBEREwgZGVwYXJzaW5nCmZhY2lsaXRpZXMu IFdoaWxlIGNyZWF0aW5nIGEgcHVibGljYXRpb24sIHdlIHJlZ2lzdGVyIGEgY29tbWFuZCBlbmQK dHJpZ2dlciB0aGF0IGRlcGFyc2VzIHRoZSBEREwgYXMgYSBKU09OIGJsb2IsIGFuZCBXQUwgbG9n cyBpdC4gVGhlIGV2ZW50CnRyaWdnZXIgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIGF0IHRoZSB0 aW1lIG9mIGRyb3AgcHVibGljYXRpb24uIFRoZQpXQUxTZW5kZXIgZGVjb2RlcyB0aGUgV0FMIGFu ZCBzZW5kcyBpdCBkb3duc3RyZWFtIHNpbWlsYXIgdG8gb3RoZXIgRE1MCmNvbW1hbmRzLiBUaGUg c3Vic2NyaWJlciB0aGVuIGNvbnZlcnRzIEpTT04gYmFjayB0byB0aGUgRERMIGNvbW1hbmQgc3Ry aW5nCmFuZCBleGVjdXRlcyBpdC4gSW4gdGhlIHN1YnNjcmliZXIsIHdlIGFsc28gYWRkIHRoZSBu ZXdseSBhZGRlZCByZWwgdG8KcGdfc3Vic2NyaXB0aW9uX3JlbCBzbyB0aGF0IHRoZSBETUwgY2hh bmdlcyBvbiB0aGUgbmV3IHRhYmxlIGNhbiBiZQpyZXBsaWNhdGVkIHdpdGhvdXQgaGF2aW5nIHRv IG1hbnVhbGx5IHJ1bgoiQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFBVQkxJQ0FUSU9O Ii4KClRoaXMgaXMgYSBQT0MgcGF0Y2ggdG8gc2hvdyBob3cgdXNpbmcgZXZlbnQgdHJpZ2dlcnMg YW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcyB3ZSBjYW4gaW1wbGVtZW50IERETCByZXBsaWNh dGlvbi4gU28sIHRoZSBpbXBsZW1lbnRhdGlvbiBpcwpyZXN0cmljdGVkIHRvIENSRUFURSBUQUJM RS9BTFRFUiBUQUJMRS9EUk9QIFRBQkxFIGNvbW1hbmRzLgoKLSBGb3Igbm9uLXJld3JpdGUgQUxU RVIgb2JqZWN0IGNvbW1hbmQgYW5kCi0gICAgIENSRUFURSBvYmplY3QgY29tbWFuZDoKd2UgZGVw YXJzZSB0aGUgY29tbWFuZCBhdCBkZGxfY29tbWFuZF9lbmQgZXZlbnQgdHJpZ2dlciBhbmQgV0FM IGxvZyB0aGUKZGVwYXJzZWQganNvbiBzdHJpbmcuIFRoZSBXQUxTZW5kZXIgZGVjb2RlcyB0aGUg V0FMIGFuZCBzZW5kcyBpdCB0bwpzdWJzY3JpYmVyIGlmIHRoZSBjcmVhdGVkL2FsdGVyZWQgdGFi bGUgaXMgcHVibGlzaGVkLiBJdCBzdXBwb3J0cyBtb3N0IG9mCkFMVEVSIFRBQkxFIGNvbW1hbmQg ZXhjZXB0IHNvbWUgY29tbWFuZHMoRERMIHJlbGF0ZWQgdG8gUEFSVElUSU9ORUQgVEFCTEUKLi4u KSB0aGF0IGludHJvZHVjZWQgcmVjZW50bHkgd2hpY2ggaGF2ZW4ndCBiZWVuIHN1cHBvcnRlZCBi eSB0aGUgY3VycmVudApkZGxfZGVwYXJzZXIsIHdlIHdpbGwgc3VwcG9ydCB0aGF0IGxhdGVyLgoK Tm90ZSB0aGF0IHRoZSByZXBsaWNhdGlvbiBmb3IgQUxURVIgSU5ERVggY29tbWFuZCBpcyBzdGls bCB1bmRlcgpwcm9ncmVzcy4KCi0gRm9yIERST1Agb2JqZWN0OgpUaGUgJ2NvbW1hbmQgc3RhcnQn IGV2ZW50IGhhbmRsZXIgbG9ncyBhIGRkbCBtZXNzYWdlIHdpdGggdGhlIHJlbGlkcyBvZgp0aGUg dGFibGVzIHRoYXQgYXJlIGRyb3BwZWQgd2hpY2ggdGhlIG91dHB1dCBwbHVnaW4gKHBnb3V0cHV0 KSBzdG9yZXMgaW4KaXRzIGludGVybmFsIGRhdGEgc3RydWN0dXJlIGFmdGVyIHZlcmlmeWluZyB0 aGF0IGl0IGlzIGZvciBhIHRhYmxlIHRoYXQgaXMKcGFydCBvZiB0aGUgcHVibGljYXRpb24uIExh dGVyIHRoZSAnY29tbWFuZCBlbmQnIGV2ZW50IGhhbmRsZXIgc2VuZHMgdGhlCmFjdHVhbCBkcm9w IG1lc3NhZ2UuIFBnb3V0cHV0IG9uIHJlY2VpdmluZyB0aGUgY29tbWFuZCBlbmQsIG9ubHkgc2Vu ZHMgb3V0CnRoZSBkcm9wIGNvbW1hbmQgb25seSBpZiBpdCBpcyBmb3Igb25lIG9mIHRoZSByZWxp ZHMgbWFya2VkIGZvciBkZWxldGluZy4KVGhlIHJlYXNvbiB3ZSBoYXZlIHRvIGRvIHRoaXMgaXMg YmVjYXVzZSwgb25jZSB0aGUgbG9naWNhbCBkZWNvZGVyCnJlY2VpdmVzIHRoZSAnY29tbWFuZCBl bmQnIG1lc3NhZ2UsICB0aGUgcmVsaWQgb2YgdGhlIHRhYmxlIGlzIG5vIGxvbmdlcgp2YWxpZCBh cyBpdCBoYXMgYmVlbiBkZWxldGVkIGFzIHBhcnQgb2YgaW52YWxpZGF0aW9ucyByZWNlaXZlZCBm b3IgdGhlCmRyb3AgdGFibGUgY29tbWFuZC4gSXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHZl cmlmeSBpZiB0aGUgdGFibGUgaXMKcGFydCBvZiB0aGUgcHVibGljYXRpb24gbGlzdCBvciBub3Qu IFRvIG1ha2UgdGhpcyBwb3NzaWJsZSwgSSBoYXZlIGFkZGVkCnR3byBtb3JlIGVsZW1lbnRzIHRv IHRoZSBkZGwgeGxvZyBhbmQgZGRsIG1lc3NhZ2UsIChyZWxpZCBhbmQgY21kdHlwZSkuCgpXZSBj b3VsZCBoYXZlIGFsc28gaGFuZGxlZCBhbGwgdGhpcyBvbiB0aGUgc3Vic2NyaWJlciBzaWRlIGFz IHdlbGwsIGJ1dAp0aGF0IHdvdWxkIG1lYW4gc2VuZGluZyBzcHVyaW91cyBkZGwgbWVzc2FnZXMg Zm9yIHRhYmxlcyB0aGF0IGFyZSBub3QgcGFydApvZiB0aGUgcHVibGljYXRpb24uCgotIEZvciB0 YWJsZV9yZXdyaXRlIEFMVEVSIFRBQkxFIGNvbW1hbmQ6CihBTFRFUiBDT0xVTU4gVFlQRSwgQURE IENPTFVNTiBERUZBVUxULCBTRVQgTE9HR0VELCBTRVQgQUNDRVNTIE1FVEhPRCkKCndlIGRlcGFy c2UgdGhlIGNvbW1hbmQgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3RyaW5nIGF0CnRh YmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlci4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwg YW5kIHNlbmRzIGl0IHRvCnN1YnNjcmliZXIgaWYgdGhlIGFsdGVyZWQgdGFibGUgaXMgcHVibGlz aGVkLiBUaGVuLCB0aGUgV0FMU2VuZGVyIHdpbGwKY29udmVydCB0aGUgdXBjb21pbmcgcmV3cml0 ZSBJTlNFUlRzIHRvIFVQREFURXMgYW5kIHNlbmQgdGhlbSB0bwpzdWJzY3JpYmVyIHNvIHRoYXQg dGhlIGRhdGEgYmV0d2VlbiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgY2FuIGFsd2F5cyBiZQpj b25zaXN0ZW50LiBOb3RlIHRoYXQgdGhlIHRhYmxlcyB0aGF0IHB1Ymxpc2ggcmV3cml0ZSBkZGwg bXVzdCBoYXZlIGEKcmVwbGljYSBpZGVudGl0eSBjb25maWd1cmVkIGluIG9yZGVyIHRvIGJlIGFi bGUgdG8gcmVwbGljYXRlIHRoZSB1cGNvbWluZwpyZXdyaXRlIFVQREFURXMuCgpXZSBkbyB0aGlz IHdheSBiZWNhdXNlIG9mIHR3byByZWFzb246CigxKSBUaGUgZGF0YSBiZWZvcmUgdGhlIHJld3Jp dGUgZGRsIGNvdWxkIGFscmVhZHkgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxpc2hlciBhbmQgc3Vi c2NyaWJlci4gVG8gbWFrZSBzdXJlIHRoZSBleHRyYSBkYXRhIGluIHN1YnNjcmliZXIgd2hpY2gK ZG9lc24ndCBleGlzdCBpbiBwdWJsaXNoZXIgYWxzbyBnZXQgcmV3cml0dGVuLCB3ZSBuZWVkIHRv IGxldCB0aGUKc3Vic2NyaWJlciBleGVjdXRlIHRoZSBvcmlnaW5hbCByZXdyaXRlIGRkbCB0byBy ZXdyaXRlIGFsbCB0aGUgZGF0YSBhdApmaXJzdC4KCigyKSB0aGUgZGF0YSBhZnRlciBleGVjdXRp bmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxpc2hlciBhbmQgc3Vi c2NyaWJlcihkdWUgdG8gZGlmZmVyZW50IGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNlZCBkdXJpbmcK cmV3cml0ZSksIHNvIHdlIG5lZWQgdG8gcmVwbGljYXRlIHRoZSByZXdyaXRlIFVQREFURXMgdG8g a2VlcCB0aGUgZGF0YQpjb25zaXN0ZW50LgoKVE8gSU1QUk9WRToKVGhpcyBhcHByb2FjaCBjb3Vs ZCBiZSBpbXByb3ZlZCBieSBsZXR0aW5nIHRoZSBzdWJzY3JpYmVyIHRyeSB0byB1cGRhdGUKdGhl IGV4dHJhIGRhdGEgaXRzZWxmIGluc3RlYWQgb2YgZG9pbmcgZnVsbHkgcmV3cml0ZSBkZGwgYW5k IHVzZSB0aGUKdXBjb21pbmcgcmV3cml0ZSBVUERBVEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0 YS4gVG8gYWNoaWV2ZSB0aGlzLCB3ZQpjb3VsZCBtb2RpZnkgdGhlIGRlcGFyc2VkIGpzb24gc3Ry aW5nIHRvIHRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgcmV3cml0ZQpwYXJ0IGFuZCBhZGQgc29tZSBs b2dpYyBpbiBzdWJzY3JpYmVyIHRvIHVwZGF0ZSB0aGUgZXh0cmEgZGF0YS4KQmVzaWRlcywgd2Ug bWF5IG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwgdHlwZSBvZiByZXdy aXRlCmRkbCwgZm9yIGV4YW1wbGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nIHJld3Jp dGUgY2hhbmdlcyBmb3IgQUxURVIKVEFCTEUgU0VUIExPR0dFRCBhcyB0aGUgZGF0YSBpbiB0aGUg dGFibGUgZG9lc24ndCBhY3R1YWxseSBiZSBjaGFuZ2VkLiBXZQpjb3VsZCB1c2UgdGhlIGRlcGFy c2VyIGFuZCBldmVudCB0cmlnZ2VyIHRvIGZpbHRlciB0aGVzZSBkZGxzIGFuZCBza2lwCnNlbmRp bmcgcmV3cml0ZSBjaGFuZ2VzIGZvciB0aGVtLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9NYWtlZmlsZSAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jIHwgIDUyICsrKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cv cGdfcHVibGljYXRpb24uYyAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRz L2V2ZW50X3RyaWdnZXIuYyAgICAgICAgICAgIHwgMjMyICsrKysrKysrKysrKystCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAgICAgICAgICB8IDEzNiArKysrKysrKysK IHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICAgIHwgICAyICst CiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlICAgICAgICB8ICAgMSAr CiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYyAgICB8ICA4NiAr KysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgICAgICAgIHwg IDQxICsrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgICAgICAg fCAgOTMgKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgICAg ICAgICB8ICA0OCArKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1 ZmZlci5jIHwgMTM2ICsrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93 b3JrZXIuYyAgICAgICAgfCAyMzIgKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgICAgIHwgMTkyICsrKysrKysrKysrLQogc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMjEgKy0KIHNyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmggICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4v cGdfd2FsZHVtcC9ybWdyZGVzYy5jICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4v cHNxbC9kZXNjcmliZS5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE3ICstCiBzcmMvaW5j bHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaCAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgICB8ICAgOSArCiBzcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggICAgICAgICAgICB8ICAgNCArCiBzcmMvaW5j bHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggICAgICAgICAgICB8ICAgMyArLQogc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oICAgICAgICAgICAgfCAgNjAgKysrKwogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmggICAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggICAgICAgICAgfCAgIDcgKy0KIHNy Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaCAgICAgICAgIHwgIDI3ICsrCiBz cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oICAgICAgICAgICAgICB8ICAgMSArCiBz cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggICAgICAgICB8ICAzOSArKysK IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgICAgICAgICAgICAgIHwgICA2ICst CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCAgICAgICB8IDM4OCAr KysrKysrKysrKystLS0tLS0tLS0tLS0KIDMxIGZpbGVzIGNoYW5nZWQsIDE2MjcgaW5zZXJ0aW9u cygrKSwgMjEzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2Fj Y2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv cm1ncmRlc2MvTWFrZWZpbGUKaW5kZXggZjg4ZDcyZi4uYjhlMjllOCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9ybWdyZGVzYy9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBAQCBPQkpTID0gXAogCWhhc2hkZXNj Lm8gXAogCWhlYXBkZXNjLm8gXAogCWxvZ2ljYWxtc2dkZXNjLm8gXAorCWxvZ2ljYWxkZGxtc2dk ZXNjLm8gXAogCW14YWN0ZGVzYy5vIFwKIAluYnRkZXNjLm8gXAogCXJlbG1hcGRlc2MubyBcCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2Mu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZGVlNTIKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwpAQCAtMCww ICsxLDUyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBsb2dpY2FsZGRsbXNnZGVzYy5j CisgKgkgIHJtZ3IgZGVzY3JpcHRvciByb3V0aW5lcyBmb3IgcmVwbGljYXRpb24vbG9naWNhbC9k ZGxtZXNzYWdlLmMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTUtMjAyMiwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgorICogSURFTlRJRklDQVRJ T04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNp bmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCisKK3ZvaWQKK2xvZ2ljYWxkZGxtc2df ZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCit7CisJY2hhcgkg ICAqcmVjID0gWExvZ1JlY0dldERhdGEocmVjb3JkKTsKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNH ZXRJbmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFTSzsKKworCWlmIChpbmZvID09IFhMT0dfTE9H SUNBTF9ERExfTUVTU0FHRSkKKwl7CisJCXhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKnhscmVjID0g KHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKikgcmVjOworCQljaGFyCSAgICpwcmVmaXggPSB4bHJl Yy0+bWVzc2FnZTsKKwkJY2hhcgkgICAqbWVzc2FnZSA9IHhscmVjLT5tZXNzYWdlICsgeGxyZWMt PnByZWZpeF9zaXplOworCQljaGFyCSAgICpzZXAgPSAiIjsKKworCQlBc3NlcnQocHJlZml4W3hs cmVjLT5wcmVmaXhfc2l6ZV0gIT0gJ1wwJyk7CisKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJw cmVmaXggXCIlc1wiOyBwYXlsb2FkICglenUgYnl0ZXMpOiAiLAorCQkJCQkJIHByZWZpeCwgeGxy ZWMtPm1lc3NhZ2Vfc2l6ZSk7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAicmVsaWQgJXUgY21k dHlwZSAldSIsIHhscmVjLT5yZWxpZCwgeGxyZWMtPmNtZHR5cGUpOworCQkvKiBXcml0ZSBtZXNz YWdlIHBheWxvYWQgYXMgYSBzZXJpZXMgb2YgaGV4IGJ5dGVzICovCisJCWZvciAoaW50IGNudCA9 IDA7IGNudCA8IHhscmVjLT5tZXNzYWdlX3NpemU7IGNudCsrKQorCQl7CisJCQlhcHBlbmRTdHJp bmdJbmZvKGJ1ZiwgIiVzJTAyWCIsIHNlcCwgKHVuc2lnbmVkIGNoYXIpIG1lc3NhZ2VbY250XSk7 CisJCQlzZXAgPSAiICI7CisJCX0KKwl9Cit9CisKK2NvbnN0IGNoYXIgKgorbG9naWNhbGRkbG1z Z19pZGVudGlmeSh1aW50OCBpbmZvKQoreworCWlmICgoaW5mbyAmIH5YTFJfSU5GT19NQVNLKSA9 PSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJCXJldHVybiAiRERMIE1FU1NBR0UiOworCisJ cmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggNmFm MzU3MC4uYmRmNDJhNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwpAQCAtMTAw NSw2ICsxMDA1LDcgQEAgR2V0UHVibGljYXRpb24oT2lkIHB1YmlkKQogCXB1Yi0+cHViYWN0aW9u cy5wdWJ1cGRhdGUgPSBwdWJmb3JtLT5wdWJ1cGRhdGU7CiAJcHViLT5wdWJhY3Rpb25zLnB1YmRl bGV0ZSA9IHB1YmZvcm0tPnB1YmRlbGV0ZTsKIAlwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUg PSBwdWJmb3JtLT5wdWJ0cnVuY2F0ZTsKKwlwdWItPnB1YmFjdGlvbnMucHViZGRsID0gcHViZm9y bS0+cHViZGRsOwogCXB1Yi0+cHVidmlhcm9vdCA9IHB1YmZvcm0tPnB1YnZpYXJvb3Q7CiAKIAlS ZWxlYXNlU3lzQ2FjaGUodHVwKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRl eCA2MzVkMDU0Li43NmY3MTlkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVu dF90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBA IC0zNyw4ICszNywxMSBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNl ci9wYXJzZV9mdW5jLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRp b24vZGRsbWVzc2FnZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNs dWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgogI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgor I2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2V2dGNhY2hlLmgiCkBA IC0xNTM3LDYgKzE1NDAsNyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFy c2V0cmVlKQogCiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0 aW9uSWQ7CiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkID0gSW52YWxpZE9pZDsKKwlj b21tYW5kLT5kLmFsdGVyVGFibGUucmV3cml0ZSA9IGZhbHNlOwogCWNvbW1hbmQtPmQuYWx0ZXJU YWJsZS5zdWJjbWRzID0gTklMOwogCWNvbW1hbmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFy c2V0cmVlKTsKIApAQCAtMTU3MCw3ICsxNTc0LDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJl bGlkKE9pZCBvYmplY3RJZCkKICAqIGludGVybmFsbHksIHNvIHRoYXQncyBhbGwgdGhhdCB0aGlz IGNvZGUgbmVlZHMgdG8gaGFuZGxlIGF0IHRoZSBtb21lbnQuCiAgKi8KIHZvaWQKLUV2ZW50VHJp Z2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBh ZGRyZXNzKQorRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21k LCBPYmplY3RBZGRyZXNzIGFkZHJlc3MsIGJvb2wgcmV3cml0ZSkKIHsKIAlNZW1vcnlDb250ZXh0 IG9sZGN4dDsKIAlDb2xsZWN0ZWRBVFN1YmNtZCAqbmV3c3ViOwpAQCAtMTU5MCw2ICsxNTk0LDcg QEAgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmpl Y3RBZGRyZXNzIGFkZHJlc3MpCiAJbmV3c3ViLT5hZGRyZXNzID0gYWRkcmVzczsKIAluZXdzdWIt PnBhcnNldHJlZSA9IGNvcHlPYmplY3Qoc3ViY21kKTsKIAorCWN1cnJlbnRFdmVudFRyaWdnZXJT dGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9IHJld3JpdGU7CiAJ Y3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1 YmNtZHMgPQogCQlsYXBwZW5kKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1h bmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzLCBuZXdzdWIpOwogCkBAIC0yMTc1LDMgKzIxODAsMjI4 IEBAIHN0cmluZ2lmeV9hZGVmcHJpdnNfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpCiAKIAly ZXR1cm4gIj8/PyI7CQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIH0KKworLyoKKyAqIHB1 YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQKKyAqCisgKiBEZXBhcnNlIHRoZSBk ZGwgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV9k ZGxfY29tbWFuZF9zdGFydChQR19GVU5DVElPTl9BUkdTKQoreworCUV2ZW50VHJpZ2dlckRhdGEg KnRyaWdkYXRhOworCWNoYXIJCSpjb21tYW5kID0gcHNwcmludGYoIkRyb3AgdGFibGUgY29tbWFu ZCBzdGFydCIpOworCURyb3BTdG10CSpzdG10OworCUxpc3RDZWxsCSpjZWxsMTsKKworCWlmICgh Q0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJl ZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKworCXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dl ckRhdGEgKikgZmNpbmZvLT5jb250ZXh0OworCXN0bXQJID0gKERyb3BTdG10ICopIHRyaWdkYXRh LT5wYXJzZXRyZWU7CisKKwkvKiBleHRyYWN0IHRoZSByZWxpZCBmcm9tIHRoZSBwYXJzZSB0cmVl ICovCisJZm9yZWFjaChjZWxsMSwgc3RtdC0+b2JqZWN0cykKKwl7CisJCWNoYXIJcmVscGVyc2lz dDsKKwkJTm9kZQkqb2JqZWN0ID0gbGZpcnN0KGNlbGwxKTsKKwkJT2JqZWN0QWRkcmVzcyBhZGRy ZXNzOworCQlSZWxhdGlvbiByZWxhdGlvbiA9IE5VTEw7CisKKwkJYWRkcmVzcyA9IGdldF9vYmpl Y3RfYWRkcmVzcyhzdG10LT5yZW1vdmVUeXBlLAorCQkJCQkJCQkJIG9iamVjdCwKKwkJCQkJCQkJ CSAmcmVsYXRpb24sCisJCQkJCQkJCQkgQWNjZXNzRXhjbHVzaXZlTG9jaywKKwkJCQkJCQkJCSB0 cnVlKTsKKworCQlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShhZGRyZXNzLm9iamVj dElkKTsKKworCQkvKgorCQkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMg d2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkg KiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1 bmxvZ2dlZAorCQkgKiB0YWJsZXMgY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0 aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzCisJCSAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRpcmVj dGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUKKwkJICogaW5jb21pbmcg cmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlp ZiAocmVscGVyc2lzdCA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQl7CisJCQl0YWJsZV9jbG9z ZShyZWxhdGlvbiwgTm9Mb2NrKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJTG9nTG9naWNhbERE TE1lc3NhZ2UoImRlcGFyc2UiLCBhZGRyZXNzLm9iamVjdElkLCBEQ1RfVGFibGVEcm9wU3RhcnQs CisJCQkJCQkJIGNvbW1hbmQsIHN0cmxlbihjb21tYW5kKSArIDEpOworCisJCWlmIChyZWxhdGlv bikKKwkJCXRhYmxlX2Nsb3NlKHJlbGF0aW9uLCBOb0xvY2spOworCX0KKwlyZXR1cm4gUG9pbnRl ckdldERhdHVtKE5VTEwpOworfQorCisvKgorICogcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9y ZXdyaXRlCisgKgorICogRGVwYXJzZSB0aGUgZGRsIHRhYmxlIHJld3JpdGUgY29tbWFuZCBhbmQg bG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlKFBH X0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkJCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1h bmQgICAqY21kOworCWNoYXIJCQkgICAqanNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19F VkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQg dHJpZ2dlciBtYW5hZ2VyIik7CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1 cnJlbnRDb21tYW5kOworCisJQXNzZXJ0KGNtZCAmJiBjbWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRl KTsKKworCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKGNtZC0+ZC5hbHRlclRhYmxl Lm9iamVjdElkKTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1h bmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRhYmxlLgorCSAqCisJ ICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQg dW5sb2dnZWQgdGFibGVzCisJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0 aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2libGUgdG8gZGlyZWN0 bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCSAqIHJl d3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAqLworCWlmIChy ZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQb2ludGVyR2V0RGF0 dW0oTlVMTCk7CisKKwkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0 byBhbGxvdyBkZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmluZyA9IGRlcGFyc2Vf dXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3RyaW5nICE9IE5VTEwp CisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLmFsdGVyVGFibGUub2Jq ZWN0SWQsIERDVF9UYWJsZUFsdGVyLAorCQkJCQkJCSBqc29uX3N0cmluZywgc3RybGVuKGpzb25f c3RyaW5nKSArIDEpOworCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoK KyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kCisgKgorICogRGVwYXJzZSB0 aGUgZGRsIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFy c2VfZGRsX2NvbW1hbmRfZW5kKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTGlzdENlbGwgICAqbGM7 CisJc2xpc3RfaXRlciAgaXRlcjsKKwlEZXBhcnNlZENvbW1hbmRUeXBlIHR5cGU7CisJT2lkIHJl bGlkOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVS Uk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJZm9yZWFjaChs YywgY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kTGlzdCkKKwl7CisJCWNoYXIJCQkJ cmVscGVyc2lzdCA9IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVDsKKwkJQ29sbGVjdGVkQ29tbWFu ZCAgICpjbWQgPSBsZmlyc3QobGMpOworCQljaGFyCQkJICAgKmpzb25fc3RyaW5nOworCisJCS8q IFJld3JpdGUgRERMIGhhcyBiZWVuIGhhbmRsZWQgaW4gdGFibGVfcmV3cml0ZSB0cmlnZ2VyICov CisJCWlmIChjbWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlKQorCQl7CisJCQlSZW5hbWVTdG10ICpy ZW5hbWVTdG10ID0gKFJlbmFtZVN0bXQgKiljbWQtPnBhcnNldHJlZTsKKworCQkJaWYgKHJlbmFt ZVN0bXQtPnJlbGF0aW9uVHlwZSAhPSBPQkpFQ1RfVFlQRSAmJgorCQkJCXJlbmFtZVN0bXQtPnJl bGF0aW9uVHlwZSAhPSBPQkpFQ1RfVEFCTEUpCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAo Y21kLT50eXBlID09IFNDVF9TaW1wbGUgJiYKKwkJCSFPaWRJc1ZhbGlkKGNtZC0+ZC5zaW1wbGUu YWRkcmVzcy5vYmplY3RJZCkpCisJCQljb250aW51ZTsKKworCQlpZiAoY21kLT50eXBlID09IFND VF9BbHRlclRhYmxlKQorCQl7CisJCQlyZWxpZCA9IGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElk OworCQkJdHlwZSA9IERDVF9UYWJsZUFsdGVyOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogT25s eSBTQ1RfU2ltcGxlIGZvciBub3cgKi8KKwkJCXJlbGlkID0gY21kLT5kLnNpbXBsZS5hZGRyZXNz Lm9iamVjdElkOworCQkJdHlwZSA9IERDVF9TaW1wbGVDbWQ7CisJCX0KKworCQlpZiAoZ2V0X3Jl bF9yZWxraW5kKHJlbGlkKSkKKwkJCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKHJl bGlkKTsKKworCQkvKgorCQkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMg d2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkg KiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1 bmxvZ2dlZCB0YWJsZXMKKwkJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0 aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJCSAqIHBvc3NpYmxlIHRvIGRpcmVj dGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkJICog cmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlp ZiAocmVscGVyc2lzdCA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQkJY29udGludWU7CisKKwkJ LyoKKwkJICogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cg ZGVjb2Rpbmcgb2YgdGhlCisJCSAqIHNhbWUuCisJCSAqLworCQlqc29uX3N0cmluZyA9IGRlcGFy c2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJCWlmIChqc29uX3N0cmluZyA9PSBO VUxMKQorCQkJY29udGludWU7CisKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBy ZWxpZCwgdHlwZSwganNvbl9zdHJpbmcsCisJCQkJCQkJIHN0cmxlbihqc29uX3N0cmluZykgKyAx KTsKKwl9CisKKwlzbGlzdF9mb3JlYWNoKGl0ZXIsICYoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl LT5TUUxEcm9wTGlzdCkpCisJeworCQl2b2xhdGlsZSBTUUxEcm9wT2JqZWN0ICpvYmo7CisJCURy b3BTdG10CQkJICAgKnN0bXQ7CisJCUV2ZW50VHJpZ2dlckRhdGEgCSAgICp0cmlnZGF0YTsKKwkJ Y2hhcgkJCQkgICAqY29tbWFuZDsKKwkJRGVwYXJzZWRDb21tYW5kVHlwZQkJY21kdHlwZTsKKwor CQl0cmlnZGF0YSA9IChFdmVudFRyaWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4dDsKKwkJc3Rt dAkgPSAoRHJvcFN0bXQgKikgdHJpZ2RhdGEtPnBhcnNldHJlZTsKKworCQlvYmogPSBzbGlzdF9j b250YWluZXIoU1FMRHJvcE9iamVjdCwgbmV4dCwgaXRlci5jdXIpOworCisJCWlmIChzdHJjbXAo b2JqLT5vYmplY3R0eXBlLCAidGFibGUiKSA9PSAwKQorCQkJY21kdHlwZSA9IERDVF9UYWJsZURy b3BFbmQ7CisJCWVsc2UgaWYgKHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJzZXF1ZW5jZSIpID09 IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInNjaGVtYSIpID09IDAgfHwKKwkJ CQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImluZGV4IikgPT0gMCB8fAorCQkJCSBzdHJjbXAo b2JqLT5vYmplY3R0eXBlLCAiZnVuY3Rpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9i amVjdHR5cGUsICJwcm9jZWR1cmUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5 cGUsICJvcGVyYXRvciIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgIm9w ZXJhdG9yIGNsYXNzIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAib3Bl cmF0b3IgZmFtaWx5IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiY2Fz dCIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInR5cGUiKSA9PSAwIHx8 CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJkb21haW4iKSA9PSAwIHx8CisJCQkJIHN0 cmNtcChvYmotPm9iamVjdHR5cGUsICJ0cmlnZ2VyIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2Jq LT5vYmplY3R0eXBlLCAiY29udmVyc2lvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2Jq ZWN0dHlwZSwgInBvbGljeSIpID09IDAJfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwg ImV4dGVuc2lvbiIpID09IDApCisJCQljbWR0eXBlID0gRENUX09iamVjdERyb3A7CisJCWVsc2UK KwkJCWNvbnRpbnVlOworCisJCWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3BfY29tbWFuZChvYmotPm9i amlkZW50aXR5LCBvYmotPm9iamVjdHR5cGUsCisJCQkJCQkJCQkgICBzdG10LT5iZWhhdmlvcik7 CisKKwkJaWYgKGNvbW1hbmQgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCUxvZ0xvZ2ljYWxE RExNZXNzYWdlKCJkZXBhcnNlIiwgb2JqLT5hZGRyZXNzLm9iamVjdElkLCBjbWR0eXBlLAorCQkJ CQkJCSBjb21tYW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKwl9CisKKwlyZXR1cm4gUG9pbnRl ckdldERhdHVtKE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVi bGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpp bmRleCA4YjU3NGI4Li5mZmYwNWM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9w dWJsaWNhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNt ZHMuYwpAQCAtMzcsMTAgKzM3LDEyIEBACiAjaW5jbHVkZSAiY29tbWFuZHMvcHVibGljYXRpb25j bWRzLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2lu Y2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgog I2luY2x1ZGUgInBhcnNlci9wYXJzZV9jbGF1c2UuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2Vf Y29sbGF0ZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgorI2luY2x1ZGUg InBhcnNlci9wYXJzZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJ1 dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgpAQCAtOTUsNiArOTcsNyBAQCBw YXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlwdWJhY3Rpb25z LT5wdWJ1cGRhdGUgPSB0cnVlOwogCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSA9IHRydWU7CiAJcHVi YWN0aW9ucy0+cHVidHJ1bmNhdGUgPSB0cnVlOworCXB1YmFjdGlvbnMtPnB1YmRkbCA9IGZhbHNl OwogCSpwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlOwogCiAJLyogUGFyc2Ugb3B0 aW9ucyAqLwpAQCAtMTQxLDYgKzE0NCw4IEBAIHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFy c2VTdGF0ZSAqcHN0YXRlLAogCQkJCQlwdWJhY3Rpb25zLT5wdWJkZWxldGUgPSB0cnVlOwogCQkJ CWVsc2UgaWYgKHN0cmNtcChwdWJsaXNoX29wdCwgInRydW5jYXRlIikgPT0gMCkKIAkJCQkJcHVi YWN0aW9ucy0+cHVidHJ1bmNhdGUgPSB0cnVlOworCQkJCWVsc2UgaWYgKHN0cmNtcChwdWJsaXNo X29wdCwgImRkbCIpID09IDApCisJCQkJCXB1YmFjdGlvbnMtPnB1YmRkbCA9IHRydWU7CiAJCQkJ ZWxzZQogCQkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFY X0VSUk9SKSwKQEAgLTc0OSw2ICs3NTQsNTMgQEAgQ2hlY2tQdWJSZWxhdGlvbkNvbHVtbkxpc3Qo TGlzdCAqdGFibGVzLCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKIH0KIAogLyoKKyAqIENyZWF0 ZSBldmVudCB0cmlnZ2VyIHdoaWNoIGlzIHVzZWQgZm9yIERETCByZXBsaWNhdGlvbi4KKyAqLwor c3RhdGljIHZvaWQKK0NyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoY2hhciAqZXZlbnRuYW1l LCBDb21tYW5kVGFnICpjb21tYW5kcywKKwkJCQkJCQkgaW50IG5jb21tYW5kcywgT2JqZWN0QWRk cmVzcyBwdWJhZGRyZXNzLAorCQkJCQkJCSBPaWQgcHVib2lkKQoreworCWludAkJCQkJaTsKKwlM aXN0CQkJICAgKnRhZ3MgPSBOSUw7CisJT2lkCQkJCQl0cmlnZ2VyX2lkOworCU9iamVjdEFkZHJl c3MJCXJlZmVyZW5jZWQ7CisJQ3JlYXRlRXZlbnRUcmlnU3RtdCAqZGRsX3RyaWdnZXI7CisJY2hh cgkJCQl0cmlnZ2VyX25hbWVbTkFNRURBVEFMRU5dOworCWNoYXIJCQkJdHJpZ2dlcl9mdW5jX25h bWVbTkFNRURBVEFMRU5dOworCXN0YXRpYyBjb25zdCBjaGFyICAgKnRyaWdnZXJfbmFtZV9wcmVm aXggPSAicGdfZGVwYXJzZV90cmlnXyVzXyV1IjsKKwlzdGF0aWMgY29uc3QgY2hhciAgICp0cmln Z2VyX2Z1bmNfcHJlZml4ID0gInB1YmxpY2F0aW9uX2RlcGFyc2VfJXMiOworCisJZGRsX3RyaWdn ZXIgPSBtYWtlTm9kZShDcmVhdGVFdmVudFRyaWdTdG10KTsKKworCXNucHJpbnRmKHRyaWdnZXJf bmFtZSwgc2l6ZW9mKHRyaWdnZXJfbmFtZSksIHRyaWdnZXJfbmFtZV9wcmVmaXgsCisJCQkgZXZl bnRuYW1lLCBwdWJvaWQpOworCXNucHJpbnRmKHRyaWdnZXJfZnVuY19uYW1lLCBzaXplb2YodHJp Z2dlcl9mdW5jX25hbWUpLCB0cmlnZ2VyX2Z1bmNfcHJlZml4LAorCQkJIGV2ZW50bmFtZSk7CisK KwlkZGxfdHJpZ2dlci0+dHJpZ25hbWUgPSBwc3RyZHVwKHRyaWdnZXJfbmFtZSk7CisJZGRsX3Ry aWdnZXItPmV2ZW50bmFtZSA9IGV2ZW50bmFtZTsKKwlkZGxfdHJpZ2dlci0+ZnVuY25hbWUgPSBT eXN0ZW1GdW5jTmFtZSh0cmlnZ2VyX2Z1bmNfbmFtZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmNv bW1hbmRzOyBpKyspCisJeworCQlTdHJpbmcgKnRhZyA9IG1ha2VTdHJpbmcocHN0cmR1cChHZXRD b21tYW5kVGFnTmFtZShjb21tYW5kc1tpXSkpKTsKKwkJdGFncyA9IGxhcHBlbmQodGFncywgdGFn KTsKKwl9CisKKwlkZGxfdHJpZ2dlci0+d2hlbmNsYXVzZSA9IGxpc3RfbWFrZTEobWFrZURlZkVs ZW0oInRhZyIsIChOb2RlICopIHRhZ3MsIC0xKSk7CisKKwl0cmlnZ2VyX2lkID0gQ3JlYXRlRXZl bnRUcmlnZ2VyKGRkbF90cmlnZ2VyKTsKKworCS8qCisJICogUmVnaXN0ZXIgdGhlIGV2ZW50IHRy aWdnZXJzIGFzIGludGVybmFsbHkgZGVwZW5kZW50IG9uIHRoZQorCSAqIHB1YmxpY2F0aW9uLgor CSAqLworCU9iamVjdEFkZHJlc3NTZXQocmVmZXJlbmNlZCwgRXZlbnRUcmlnZ2VyUmVsYXRpb25J ZCwgdHJpZ2dlcl9pZCk7CisJcmVjb3JkRGVwZW5kZW5jeU9uKCZyZWZlcmVuY2VkLCAmcHViYWRk cmVzcywgREVQRU5ERU5DWV9JTlRFUk5BTCk7Cit9CisKKy8qCiAgKiBDcmVhdGUgbmV3IHB1Ymxp Y2F0aW9uLgogICovCiBPYmplY3RBZGRyZXNzCkBAIC04MjAsNiArODcyLDggQEAgQ3JlYXRlUHVi bGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQp CiAJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRlbGV0ZSk7CiAJdmFsdWVzW0FudW1fcGdf cHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9CiAJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25z LnB1YnRydW5jYXRlKTsKKwl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGwgLSAxXSA9 CisJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRkbCk7CiAJdmFsdWVzW0FudW1fcGdfcHVi bGljYXRpb25fcHVidmlhcm9vdCAtIDFdID0KIAkJQm9vbEdldERhdHVtKHB1Ymxpc2hfdmlhX3Bh cnRpdGlvbl9yb290KTsKIApAQCAtODgyLDYgKzkzNiw4NSBAQCBDcmVhdGVQdWJsaWNhdGlvbihQ YXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJfQogCX0K IAorCS8qCisJICogQ3JlYXRlIGFuIGV2ZW50IHRyaWdnZXIgdG8gYWxsb3cgbG9nZ2luZyBvZiBE REwgc3RhdGVtZW50cy4KKwkgKgorCSAqIFRPRE86IFdlIG5lZWQgdG8gZmluZCBhIGJldHRlciBz eW50YXggdG8gYWxsb3cgcmVwbGljYXRpb24gb2YgRERMCisJICogc3RhdGVtZW50cy4KKwkgKgor CSAqIFhYWDogVGhpcyBjb2RlIGlzIGp1c3QgdG8gc2hvdyB0aGUgcmVwbGljYXRpb24gb2YgQ1JF QVRFL0FMVEVSL0RST1AKKwkgKiBUQUJMRSB3b3Jrcy4gV2UgbmVlZCB0byBlbmhhbmNlIHRoaXMg b25jZSB0aGUgYXBwcm9hY2ggZm9yIERETAorCSAqIHJlcGxpY2F0aW9uIGlzIGZpbmFsaXplZC4K KwkgKi8KKwlpZiAocHViYWN0aW9ucy5wdWJkZGwpCisJeworCQlDb21tYW5kVGFnCXN0YXJ0X2Nv bW1hbmRzW10gPSB7Q01EVEFHX0RST1BfVEFCTEV9OworCQlDb21tYW5kVGFnCXJld3JpdGVfY29t bWFuZHNbXSA9IHtDTURUQUdfQUxURVJfVEFCTEV9OworCisJCUNvbW1hbmRUYWcJZW5kX2NvbW1h bmRzW10gPSB7CisJCQlDTURUQUdfQ1JFQVRFX0VYVEVOU0lPTiwKKwkJCUNNRFRBR19BTFRFUl9F WFRFTlNJT04sCisJCQlDTURUQUdfRFJPUF9FWFRFTlNJT04sCisJCQlDTURUQUdfQ1JFQVRFX1BP TElDWSwKKwkJCUNNRFRBR19BTFRFUl9QT0xJQ1ksCisJCQlDTURUQUdfRFJPUF9QT0xJQ1ksCisJ CQlDTURUQUdfQ1JFQVRFX0NPTlZFUlNJT04sCisJCQlDTURUQUdfQUxURVJfQ09OVkVSU0lPTiwK KwkJCUNNRFRBR19EUk9QX0NPTlZFUlNJT04sCisJCQlDTURUQUdfQ1JFQVRFX0RPTUFJTiwKKwkJ CUNNRFRBR19BTFRFUl9ET01BSU4sCisJCQlDTURUQUdfRFJPUF9ET01BSU4sCisJCQlDTURUQUdf QUxURVJfSU5ERVgsCisJCQlDTURUQUdfQ1JFQVRFX1RZUEUsCisJCQlDTURUQUdfRFJPUF9UWVBF LAorCQkJQ01EVEFHX0FMVEVSX1RZUEUsCisJCQlDTURUQUdfQ1JFQVRFX0NBU1QsCisJCQlDTURU QUdfQUxURVJfQ0FTVCwKKwkJCUNNRFRBR19EUk9QX0NBU1QsCisJCQlDTURUQUdfQ1JFQVRFX09Q RVJBVE9SLAorCQkJQ01EVEFHX0NSRUFURV9PUEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19DUkVB VEVfT1BFUkFUT1JfRkFNSUxZLAorCQkJQ01EVEFHX0FMVEVSX09QRVJBVE9SX0ZBTUlMWSwKKwkJ CUNNRFRBR19BTFRFUl9PUEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19BTFRFUl9PUEVSQVRPUiwK KwkJCUNNRFRBR19EUk9QX09QRVJBVE9SLAorCQkJQ01EVEFHX0RST1BfT1BFUkFUT1JfQ0xBU1Ms CisJCQlDTURUQUdfRFJPUF9PUEVSQVRPUl9GQU1JTFksCisJCQlDTURUQUdfQ1JFQVRFX1BST0NF RFVSRSwKKwkJCUNNRFRBR19BTFRFUl9QUk9DRURVUkUsCisJCQlDTURUQUdfRFJPUF9QUk9DRURV UkUsCisJCQlDTURUQUdfQ1JFQVRFX0ZVTkNUSU9OLAorCQkJQ01EVEFHX0FMVEVSX0ZVTkNUSU9O LAorCQkJQ01EVEFHX0RST1BfRlVOQ1RJT04sCisJCQlDTURUQUdfQ1JFQVRFX1RSSUdHRVIsCisJ CQlDTURUQUdfQUxURVJfVFJJR0dFUiwKKwkJCUNNRFRBR19EUk9QX1RBQkxFLAorCQkJQ01EVEFH X0NSRUFURV9UQUJMRSwKKwkJCUNNRFRBR19BTFRFUl9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVf U0VRVUVOQ0UsCisJCQlDTURUQUdfQUxURVJfU0VRVUVOQ0UsCisJCQlDTURUQUdfRFJPUF9TRVFV RU5DRSwKKwkJCUNNRFRBR19DUkVBVEVfU0NIRU1BLAorCQkJQ01EVEFHX0FMVEVSX1NDSEVNQSwK KwkJCUNNRFRBR19EUk9QX1NDSEVNQSwKKwkJCUNNRFRBR19DUkVBVEVfSU5ERVgsCisJCQlDTURU QUdfRFJPUF9JTkRFWCwKKwkJCUNNRFRBR19BTFRFUl9JTkRFWAorCQl9OworCisJCS8qIENyZWF0 ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGlj YUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5kIiwgZW5kX2NvbW1hbmRzLAorCQkJCQkJCQkJ IGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUg dGhlIGRkbF9jb21tYW5kX3N0YXJ0IGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGlj YUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfc3RhcnQiLCBzdGFydF9jb21tYW5kcywKKwkJCQkJ CQkJCSBsZW5ndGhvZihzdGFydF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBD cmVhdGUgdGhlIHRhYmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBs aWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0ZV9jb21tYW5kcywKKwkJCQkJ CQkJCSBsZW5ndGhvZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCX0KKwog CXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAlJbnZva2VPYmplY3RQb3N0 Q3JlYXRlSG9vayhQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1Ym9pZCwgMCk7CkBAIC0xMDIyLDYg KzExNTUsOSBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFs dGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCiAJCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9u X3B1YnRydW5jYXRlIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7 CiAJCXJlcGxhY2VzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IHRydWU7 CisKKwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPSBCb29sR2V0RGF0 dW0ocHViYWN0aW9ucy5wdWJkZGwpOworCQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1 YmRkbCAtIDFdID0gdHJ1ZTsKIAl9CiAKIAlpZiAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Rf Z2l2ZW4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IGUzMjMzYTguLmE2YzczOGIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC01MjUzLDcgKzUyNTMsNyBAQCBBVEV4ZWNDbWQo TGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCSAqIFJlcG9ydCB0aGUgc3Vi Y29tbWFuZCB0byBpbnRlcmVzdGVkIGV2ZW50IHRyaWdnZXJzLgogCSAqLwogCWlmIChjbWQpCi0J CUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVz cyk7CisJCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwg YWRkcmVzcywgdGFiLT5yZXdyaXRlKTsKIAogCS8qCiAJICogQnVtcCB0aGUgY29tbWFuZCBjb3Vu dGVyIHRvIGVuc3VyZSB0aGUgbmV4dCBzdWJjb21tYW5kIGluIHRoZSBzZXF1ZW5jZQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggYzRlMmZkZS4uZjNlZWI2NyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQorKysg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3 IEBAIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9CSlMg PSBcCiAJZGVjb2RlLm8gXAorCWRkbG1lc3NhZ2Uub1wKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2Fs Lm8gXAogCWxvZ2ljYWxmdW5jcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9kZGxtZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5MzUy MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRs bWVzc2FnZS5jCkBAIC0wLDAgKzEsODYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRk bG1lc3NhZ2UuYworICoJICBMb2dpY2FsIERETCBtZXNzYWdlcy4KKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURF TlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNz YWdlLmMKKyAqCisgKiBOT1RFUworICoKKyAqIExvZ2ljYWwgRERMIG1lc3NhZ2VzIGFsbG93IFhM T0cgbG9nZ2luZyBvZiBEREwgY29tbWFuZCBzdHJpbmdzIHRoYXQKKyAqIGdldCBwYXNzZWQgdG8g dGhlIGxvZ2ljYWwgZGVjb2RpbmcgcGx1Z2luLiBJbiBub3JtYWwgWExPRyBwcm9jZXNzaW5nIHRo ZXkKKyAqIGFyZSBzYW1lIGFzIE5PT1AuCisgKgorICogVW5saWtlIGdlbmVyaWMgbG9naWNhbCBt ZXNzYWdlcywgdGhlc2UgRERMIG1lc3NhZ2VzIGhhdmUgb25seSB0cmFuc2FjdGlvbmFsCisgKiBt b2RlLk5vdGUgYnkgZGVmYXVsdCBERExzIGluIFBvc3RncmVTUUwgYXJlIHRyYW5zYWN0aW9uYWwu CisgKgorICogVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnQgb2YgY3VycmVudCB0cmFuc2FjdGlvbiBh bmQgd2lsbCBiZSBzZW50IHRvCisgKiBkZWNvZGluZyBwbHVnaW4gdXNpbmcgaW4gYSBzYW1lIHdh eSBhcyBETUwgb3BlcmF0aW9ucy4KKyAqCisgKiBFdmVyeSBtZXNzYWdlIGNhcnJpZXMgcHJlZml4 IHRvIGF2b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCBkZWNvZGluZworICogcGx1Z2lu cy4gVGhlIHBsdWdpbiBhdXRob3JzIG11c3QgdGFrZSBleHRyYSBjYXJlIHRvIHVzZSB1bmlxdWUg cHJlZml4LAorICogZ29vZCBvcHRpb25zIHNlZW1zIHRvIGJlIGZvciBleGFtcGxlIHRvIHVzZSB0 aGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNp bmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNl LmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgi CisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9u L2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCisvKgorICogV3Jp dGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFhMb2cuCisgKi8KK1hMb2dSZWNQ dHIKK0xvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBE ZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlLCBz aXplX3Qgc2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlIHhscmVjOworCisJLyoKKwkg KiBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHRyYW5zYWN0aW9uIGlkLgorCSAqLworCUFzc2VydChJ c1RyYW5zYWN0aW9uU3RhdGUoKSk7CisJR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsKKworCXhs cmVjLmRiSWQgPSBNeURhdGFiYXNlSWQ7CisJLyogdHJhaWxpbmcgemVybyBpcyBjcml0aWNhbDsg c2VlIGxvZ2ljYWxkZGxtc2dfZGVzYyAqLworCXhscmVjLnByZWZpeF9zaXplID0gc3RybGVuKHBy ZWZpeCkgKyAxOworCXhscmVjLm1lc3NhZ2Vfc2l6ZSA9IHNpemU7CisJeGxyZWMucmVsaWQgPSBy ZWxpZDsKKwl4bHJlYy5jbWR0eXBlID0gY21kdHlwZTsKKworCVhMb2dCZWdpbkluc2VydCgpOwor CVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgJnhscmVjLCBTaXplT2ZMb2dpY2FsRERMTWVzc2Fn ZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgcHJlZml4KSwgeGxyZWMu cHJlZml4X3NpemUpOworCVhMb2dSZWdpc3RlckRhdGEodW5jb25zdGlmeShjaGFyICosIG1lc3Nh Z2UpLCBzaXplKTsKKworCS8qIGFsbG93IG9yaWdpbiBmaWx0ZXJpbmcgKi8KKwlYTG9nU2V0UmVj b3JkRmxhZ3MoWExPR19JTkNMVURFX09SSUdJTik7CisKKwlyZXR1cm4gWExvZ0luc2VydChSTV9M T0dJQ0FMRERMTVNHX0lELCBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpOworfQorCisvKgorICog UmVkbyBpcyBiYXNpY2FsbHkganVzdCBub29wIGZvciBsb2dpY2FsIGRlY29kaW5nIGRkbCBtZXNz YWdlcy4KKyAqLwordm9pZAorbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVj b3JkKQoreworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocmVjb3JkKSAmIH5YTFJfSU5G T19NQVNLOworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQllbG9n KFBBTklDLCAibG9naWNhbGRkbG1zZ19yZWRvOiB1bmtub3duIG9wIGNvZGUgJXUiLCBpbmZvKTsK KworCS8qIFRoaXMgaXMgb25seSBpbnRlcmVzdGluZyBmb3IgbG9naWNhbCBkZWNvZGluZywgc2Vl IGRlY29kZS5jLiAqLworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9kZWNvZGUuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMK aW5kZXggNGQwYmYxOS4uODhhZGJjYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9kZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2RlY29kZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L2RlY29kZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5o IgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpAQCAtNjA0LDYgKzYwNSw0NiBAQCBs b2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRC dWZmZXIgKmJ1ZikKIH0KIAogLyoKKyAqIEhhbmRsZSBybWdyIExPR0lDQUxERExNU0dfSUQgcmVj b3JkcyBmb3IgRGVjb2RlUmVjb3JkSW50b1Jlb3JkZXJCdWZmZXIoKS4KKyAqLwordm9pZAorbG9n aWNhbGRkbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3Jk QnVmZmVyICpidWYpCit7CisJU25hcEJ1aWxkICAqYnVpbGRlciA9IGN0eC0+c25hcHNob3RfYnVp bGRlcjsKKwlYTG9nUmVhZGVyU3RhdGUgKnIgPSBidWYtPnJlY29yZDsKKwlUcmFuc2FjdGlvbklk IHhpZCA9IFhMb2dSZWNHZXRYaWQocik7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhy KSAmIH5YTFJfSU5GT19NQVNLOworCVJlcE9yaWdpbklkIG9yaWdpbl9pZCA9IFhMb2dSZWNHZXRP cmlnaW4ocik7CisJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqbWVzc2FnZTsKKworCWlmIChpbmZv ICE9IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQg Uk1fTE9HSUNBTERETE1TR19JRCByZWNvcmQgdHlwZTogJXUiLCBpbmZvKTsKKworCVJlb3JkZXJC dWZmZXJQcm9jZXNzWGlkKGN0eC0+cmVvcmRlciwgWExvZ1JlY0dldFhpZChyKSwgYnVmLT5vcmln cHRyKTsKKworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBzbmFwc2hvdCBvciB3ZSBhcmUganVz dCBmYXN0LWZvcndhcmRpbmcsIHRoZXJlIGlzIG5vCisJICogcG9pbnQgaW4gZGVjb2RpbmcgZGRs IG1lc3NhZ2VzLgorCSAqLworCWlmIChTbmFwQnVpbGRDdXJyZW50U3RhdGUoYnVpbGRlcikgPCBT TkFQQlVJTERfRlVMTF9TTkFQU0hPVCB8fAorCQljdHgtPmZhc3RfZm9yd2FyZCkKKwkJcmV0dXJu OworCisJbWVzc2FnZSA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIFhMb2dSZWNHZXREYXRh KHIpOworCisJaWYgKG1lc3NhZ2UtPmRiSWQgIT0gY3R4LT5zbG90LT5kYXRhLmRhdGFiYXNlIHx8 CisJCUZpbHRlckJ5T3JpZ2luKGN0eCwgb3JpZ2luX2lkKSkKKwkJcmV0dXJuOworCisJaWYgKFNu YXBCdWlsZFByb2Nlc3NDaGFuZ2UoYnVpbGRlciwgeGlkLCBidWYtPm9yaWdwdHIpKQorCQlSZW9y ZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPmVuZHB0ciwK KwkJCQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlLCAvKiBmaXJzdCBwYXJ0IG9mIG1lc3NhZ2UgaXMg cHJlZml4ICovCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZV9zaXplLAorCQkJCQkJCQkJIG1l c3NhZ2UtPm1lc3NhZ2UgKyBtZXNzYWdlLT5wcmVmaXhfc2l6ZSwKKwkJCQkJCQkJCSBtZXNzYWdl LT5yZWxpZCwgbWVzc2FnZS0+Y21kdHlwZSk7Cit9CisKKy8qCiAgKiBDb25zb2xpZGF0ZWQgY29t bWl0IHJlY29yZCBoYW5kbGluZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgZm9ybSBvZiBjb21taXQK ICAqIHJlY29yZHMuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9sb2dpY2FsLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwu YwppbmRleCA2MjVhN2Y0Li45ODk2OWM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2xvZ2ljYWwuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2xvZ2ljYWwuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNh dGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdp bi5oIgpAQCAtNzMsNiArNzQsMTAgQEAgc3RhdGljIHZvaWQgdHJ1bmNhdGVfY2Jfd3JhcHBlcihS ZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogc3RhdGljIHZvaWQg bWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhO ICp0eG4sCiAJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlv bmFsLAogCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsIGNv bnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJl b3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCSAgWExv Z1JlY1B0ciBtZXNzYWdlX2xzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkgIE9pZCBy ZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkgIFNpemUgbWVzc2Fn ZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyogc3RyZWFtaW5nIGNhbGxiYWNrcyAq Lwogc3RhdGljIHZvaWQgc3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2Fj aGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKQEAgLTkwLDYgKzk1LDExIEBAIHN0YXRpYyB2b2lk IHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuCiBzdGF0aWMgdm9pZCBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyKFJlb3Jk ZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgIFhMb2dS ZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJCQkJCSAgY29uc3Qg Y2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7Citz dGF0aWMgdm9pZCBzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNh Y2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2Fn ZV9sc24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgT2lkIHJl bGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJIFNpemUgbWVzc2Fn ZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyB2b2lkIHN0cmVhbV90cnVuY2F0 ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiAJCQkJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRpb25zW10sIFJlb3Jk ZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSk7CiAKQEAgLTIxOCw2ICsyMjgsNyBAQCBTdGFydHVwRGVj b2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAljdHgtPnJlb3JkZXIt PmFwcGx5X3RydW5jYXRlID0gdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPmNv bW1pdCA9IGNvbW1pdF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+bWVzc2FnZSA9IG1lc3Nh Z2VfY2Jfd3JhcHBlcjsKKwljdHgtPnJlb3JkZXItPmRkbG1lc3NhZ2UgPSBkZGxtZXNzYWdlX2Ni X3dyYXBwZXI7CiAKIAkvKgogCSAqIFRvIHN1cHBvcnQgc3RyZWFtaW5nLCB3ZSByZXF1aXJlIHN0 YXJ0L3N0b3AvYWJvcnQvY29tbWl0L2NoYW5nZQpAQCAtMjM0LDYgKzI0NSw3IEBAIFN0YXJ0dXBE ZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCQkoY3R4LT5jYWxs YmFja3Muc3RyZWFtX2NvbW1pdF9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3Ry ZWFtX2NoYW5nZV9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX21lc3Nh Z2VfY2IgIT0gTlVMTCkgfHwKKwkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxtZXNzYWdlX2Ni ICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fdHJ1bmNhdGVfY2IgIT0gTlVM TCk7CiAKIAkvKgpAQCAtMjUxLDYgKzI2Myw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlz dCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+c3RyZWFtX2NvbW1pdCA9 IHN0cmVhbV9jb21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9jaGFuZ2Ug PSBzdHJlYW1fY2hhbmdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fbWVzc2Fn ZSA9IHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVyLT5zdHJlYW1fZGRs bWVzc2FnZSA9IHN0cmVhbV9kZGxtZXNzYWdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5z dHJlYW1fdHJ1bmNhdGUgPSBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAogCkBAIC0xMjIx LDYgKzEyMzQsNDQgQEAgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sCiB9CiAKIHN0YXRpYyB2b2lkCitkZGxtZXNzYWdlX2NiX3dy YXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJ ICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lk IHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSAgU2l6ZSBtZXNzYWdl X3NpemUsCisJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJvckNhbGxiYWNr U3RhdGUgc3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisKKwlBc3Nl cnQoIWN0eC0+ZmFzdF9mb3J3YXJkKTsKKworCWlmIChjdHgtPmNhbGxiYWNrcy5kZGxtZXNzYWdl X2NiID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRo ZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNhbGxi YWNrX25hbWUgPSAiZGRsbWVzc2FnZSI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2Fn ZV9sc247CisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxi YWNrOworCWVycmNhbGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5w cmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZl cnJjYWxsYmFjazsKKworCS8qIHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0 ZXMgPSB0cnVlOworCWN0eC0+d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IElu dmFsaWRUcmFuc2FjdGlvbklkOworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsK KworCS8qIGRvIHRoZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJh Y2tzLmRkbG1lc3NhZ2VfY2IoY3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLCBj bWR0eXBlLAorCQkJCQkJCQkgbWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUg ZXJyb3IgY29udGV4dCBzdGFjayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFj ay5wcmV2aW91czsKK30KKworc3RhdGljIHZvaWQKIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJl b3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQlYTG9nUmVj UHRyIGZpcnN0X2xzbikKIHsKQEAgLTE1MzYsNiArMTU4Nyw0OCBAQCBzdHJlYW1fbWVzc2FnZV9j Yl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiB9 CiAKIHN0YXRpYyB2b2lkCitzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZm ZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJIFhMb2dSZWNQdHIgbWVz c2FnZV9sc24sCisJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNl ZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJ CSBjb25zdCBjaGFyICptZXNzYWdlKQoreworCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCA9 IGNhY2hlLT5wcml2YXRlX2RhdGE7CisJTG9naWNhbEVycm9yQ2FsbGJhY2tTdGF0ZSBzdGF0ZTsK KwlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKKworCUFzc2VydCghY3R4LT5mYXN0 X2ZvcndhcmQpOworCisJLyogV2UncmUgb25seSBzdXBwb3NlZCB0byBjYWxsIHRoaXMgd2hlbiBz dHJlYW1pbmcgaXMgc3VwcG9ydGVkLiAqLworCUFzc2VydChjdHgtPnN0cmVhbWluZyk7CisKKwkv KiB0aGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsICovCisJaWYgKGN0eC0+Y2FsbGJhY2tzLnN0cmVh bV9kZGxtZXNzYWdlX2NiID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sg KyBpbmZvIG9uIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4Owor CXN0YXRlLmNhbGxiYWNrX25hbWUgPSAic3RyZWFtX2RkbG1lc3NhZ2UiOworCXN0YXRlLnJlcG9y dF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gb3V0cHV0 X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsKKwllcnJjYWxsYmFjay5hcmcgPSAodm9pZCAqKSAmc3Rh dGU7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9y X2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwkvKiBzZXQgb3V0cHV0IHN0YXRlICov CisJY3R4LT5hY2NlcHRfd3JpdGVzID0gdHJ1ZTsKKwljdHgtPndyaXRlX3hpZCA9IHR4biAhPSBO VUxMID8gdHhuLT54aWQgOiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwljdHgtPndyaXRlX2xvY2F0 aW9uID0gbWVzc2FnZV9sc247CisKKwkvKiBkbyB0aGUgYWN0dWFsIHdvcms6IGNhbGwgY2FsbGJh Y2sgKi8KKwljdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsbWVzc2FnZV9jYihjdHgsIHR4biwgbWVz c2FnZV9sc24sIHByZWZpeCwgcmVsaWQsCisJCQkJCQkJCQkJY21kdHlwZSwgbWVzc2FnZV9zaXpl LCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCWVycm9y X2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKK30KKworc3RhdGljIHZvaWQK IHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCiAJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRp b25zW10sCiAJCQkJCQkgICBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXggZmY4NTEzZS4uZjM1NDA2MiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCisrKyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtNjYzLDYgKzY2Myw1MiBAQCBs b2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlk LCBYTG9nUmVjUHRyIGxzbiwKIH0KIAogLyoKKyAqIFJlYWQgRERMIE1FU1NBR0UgZnJvbSBzdHJl YW0KKyAqLworY2hhciAqCitsb2dpY2FscmVwX3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZvIGlu LCBYTG9nUmVjUHRyICpsc24sCisJCQkJCQkgICBjb25zdCBjaGFyICoqcHJlZml4LAorCQkJCQkJ ICAgU2l6ZSAqc3opCit7CisJdWludDggZmxhZ3M7CisJY2hhciAqbXNnOworCisJLy9UT0RPIGRv dWJsZSBjaGVjayB3aGVuIGRvIHdlIG5lZWQgdG8gZ2V0IFRyYW5zYWN0aW9uSWQuCisKKwlmbGFn cyA9IHBxX2dldG1zZ2ludChpbiwgMSk7CisJaWYgKGZsYWdzICE9IDApCisJCWVsb2coRVJST1Is ICJ1bnJlY29nbml6ZWQgZmxhZ3MgJXUgaW4gZGRsIG1lc3NhZ2UiLCBmbGFncyk7CisJKmxzbiA9 IHBxX2dldG1zZ2ludDY0KGluKTsKKwkqcHJlZml4ID0gcHFfZ2V0bXNnc3RyaW5nKGluKTsKKwkq c3ogPSBwcV9nZXRtc2dpbnQoaW4sIDQpOworCW1zZyA9IChjaGFyICopIHBxX2dldG1zZ2J5dGVz KGluLCAqc3opOworCisJcmV0dXJuIG1zZzsKK30KKworLyoKKyAqIFdyaXRlIERETCBNRVNTQUdF IHRvIHN0cmVhbQorICovCit2b2lkCitsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoU3RyaW5n SW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQljb25z dCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJdWludDgJ CWZsYWdzID0gMDsKKworCXBxX3NlbmRieXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NB R0UpOworCisJLyogdHJhbnNhY3Rpb24gSUQgKGlmIG5vdCB2YWxpZCwgd2UncmUgbm90IHN0cmVh bWluZykgKi8KKwlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKKwkJcHFfc2VuZGludDMy KG91dCwgeGlkKTsKKworCXBxX3NlbmRpbnQ4KG91dCwgZmxhZ3MpOworCXBxX3NlbmRpbnQ2NChv dXQsIGxzbik7CisJcHFfc2VuZHN0cmluZyhvdXQsIHByZWZpeCk7CisJcHFfc2VuZGludDMyKG91 dCwgc3opOworCXBxX3NlbmRieXRlcyhvdXQsIG1lc3NhZ2UsIHN6KTsKK30KKworLyoKICAqIFdy aXRlIHJlbGF0aW9uIGRlc2NyaXB0aW9uIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCiB2b2lk CkBAIC0xMjE4LDYgKzEyNjQsOCBAQCBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShMb2dpY2FsUmVw TXNnVHlwZSBhY3Rpb24pCiAJCQlyZXR1cm4gIlRZUEUiOwogCQljYXNlIExPR0lDQUxfUkVQX01T R19NRVNTQUdFOgogCQkJcmV0dXJuICJNRVNTQUdFIjsKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0df RERMTUVTU0FHRToKKwkJCXJldHVybiAiRERMIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfQkVH SU5fUFJFUEFSRToKIAkJCXJldHVybiAiQkVHSU4gUFJFUEFSRSI7CiAJCWNhc2UgTE9HSUNBTF9S RVBfTVNHX1BSRVBBUkU6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVv cmRlcmJ1ZmZlci5jCmluZGV4IDAzZDljOWMuLjA3M2U0MjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC05NCw2ICs5NCw3IEBACiAj aW5jbHVkZSAibGliL2JpbmFyeWhlYXAuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3Jk ZXJidWZmZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCkBAIC01MTUsNiArNTE2 LDE0IEBAIFJlb3JkZXJCdWZmZXJSZXR1cm5DaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3Jk ZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEubXNnLm1lc3Nh Z2UpOwogCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTlVMTDsKIAkJCWJyZWFrOworCQlj YXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJaWYgKGNoYW5nZS0+ZGF0 YS5kZGxtc2cucHJlZml4ICE9IE5VTEwpCisJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbG1zZy5w cmVmaXgpOworCQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBOVUxMOworCQkJaWYgKGNo YW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSAhPSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0 YS5kZGxtc2cubWVzc2FnZSk7CisJCQljaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UgPSBOVUxM OworCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoK IAkJCWlmIChjaGFuZ2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9ucykKIAkJCQlwZnJlZShjaGFu Z2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9ucyk7CkBAIC04NzAsNiArODc5LDM2IEBAIFJlb3Jk ZXJCdWZmZXJRdWV1ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlk LAogfQogCiAvKgorICogQSB0cmFuc2FjdGlvbmFsIERETCBtZXNzYWdlIGlzIHF1ZXVlZCB0byBi ZSBwcm9jZXNzZWQgdXBvbiBjb21taXQuCisgKi8KK3ZvaWQKK1Jlb3JkZXJCdWZmZXJRdWV1ZURE TE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCSBY TG9nUmVjUHRyIGxzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCSBTaXplIG1lc3NhZ2Vf c2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSwKKwkJCQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENv bW1hbmRUeXBlIGNtZHR5cGUpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVJlb3Jk ZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZTsKKworCUFzc2VydCh4aWQgIT0gSW52YWxpZFRyYW5zYWN0 aW9uSWQpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhyYi0+Y29udGV4 dCk7CisKKwljaGFuZ2UgPSBSZW9yZGVyQnVmZmVyR2V0Q2hhbmdlKHJiKTsKKwljaGFuZ2UtPmFj dGlvbiA9IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOworCWNoYW5nZS0+ZGF0YS5k ZGxtc2cucHJlZml4ID0gcHN0cmR1cChwcmVmaXgpOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cucmVs aWQgPSByZWxpZDsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUgPSBjbWR0eXBlOworCWNo YW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplID0gbWVzc2FnZV9zaXplOworCWNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZSA9IHBhbGxvYyhtZXNzYWdlX3NpemUpOworCW1lbWNweShjaGFu Z2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UsIG1lc3NhZ2UsIG1lc3NhZ2Vfc2l6ZSk7CisKKwlSZW9y ZGVyQnVmZmVyUXVldWVDaGFuZ2UocmIsIHhpZCwgbHNuLCBjaGFuZ2UsIGZhbHNlKTsKKworCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKworLyoKICAqIEFzc2VydFRYTkxz bk9yZGVyCiAgKgkJVmVyaWZ5IExTTiBvcmRlcmluZyBvZiB0cmFuc2FjdGlvbiBsaXN0cyBpbiB0 aGUgcmVvcmRlcmJ1ZmZlcgogICoKQEAgLTE5NjksNiArMjAwOCwyOSBAQCBSZW9yZGVyQnVmZmVy QXBwbHlNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiB9 CiAKIC8qCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIFJlb3JkZXJCdWZmZXJQcm9jZXNzVFhOIGZv ciBhcHBseWluZyB0aGUgRERMIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorUmVv cmRlckJ1ZmZlckFwcGx5RERMTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLAorCQkJCQkJCSBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UsIGJvb2wgc3Ry ZWFtaW5nKQoreworCWlmIChzdHJlYW1pbmcpCisJCXJiLT5zdHJlYW1fZGRsbWVzc2FnZShyYiwg dHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4LAor CQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0 YS5kZGxtc2cuY21kdHlwZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9z aXplLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsKKwllbHNlCisJCXJi LT5kZGxtZXNzYWdlKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEu ZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwKKwkJCQkJ ICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRs bXNnLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsK K30KKworLyoKICAqIEZ1bmN0aW9uIHRvIHN0b3JlIHRoZSBjb21tYW5kIGlkIGFuZCBzbmFwc2hv dCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CiAgKiBzdHJlYW0gc28gdGhhdCB3ZSBjYW4gcmV1 c2UgdGhlIHNhbWUgd2hpbGUgc2VuZGluZyB0aGUgbmV4dCBzdHJlYW0uCiAgKi8KQEAgLTIzNDgs NiArMjQxMCwxMCBAQCBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTihSZW9yZGVyQnVmZmVyICpyYiwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKHJi LCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKIAkJCQkJYnJlYWs7CiAKKwkJCQljYXNlIFJFT1JE RVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlERExN ZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKKwkJCQkJYnJlYWs7CisKIAkJCQlj YXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQkJCS8qIEV4ZWN1dGUg dGhlIGludmFsaWRhdGlvbiBtZXNzYWdlcyBsb2NhbGx5ICovCiAJCQkJCVJlb3JkZXJCdWZmZXJF eGVjdXRlSW52YWxpZGF0aW9ucyhjaGFuZ2UtPmRhdGEuaW52YWwubmludmFsaWRhdGlvbnMsCkBA IC0zNzczLDYgKzM4MzksNDAgQEAgUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZUNoYW5nZShSZW9yZGVy QnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCiAJCQkJYnJlYWs7CiAJCQl9CisJ CWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7CisJCQkJY2hhcgkg ICAqZGF0YTsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRs bXNnLnByZWZpeCkgKyAxOworCisJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEu ZGRsbXNnLm1lc3NhZ2Vfc2l6ZSArCisJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihPaWQpICsg c2l6ZW9mKGludCkgKyBzaXplb2YoU2l6ZSk7CisJCQkJUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZVJl c2VydmUocmIsIHN6KTsKKworCQkJCWRhdGEgPSAoKGNoYXIgKikgcmItPm91dGJ1ZikgKyBzaXpl b2YoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UpOworCisJCQkJLyogbWlnaHQgaGF2ZSBiZWVuIHJl YWxsb2NhdGVkIGFib3ZlICovCisJCQkJb25kaXNrID0gKFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdl ICopIHJiLT5vdXRidWY7CisKKwkJCQkvKiB3cml0ZSB0aGUgcHJlZml4LCByZWxpZCBhbmQgY21k dHlwZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJnByZWZpeF9zaXpl LCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShk YXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEg Kz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsbXNnLmNt ZHR5cGUsIHNpemVvZihpbnQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCW1lbWNw eShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgcHJlZml4X3NpemUp OworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisKKwkJCQkvKiB3cml0ZSB0aGUgbWVzc2FnZSBp bmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxt c2cubWVzc2FnZV9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUp OworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UsCisJCQkJCSAg IGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplKTsKKwkJCQlkYXRhICs9IGNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplOworCisJCQkJYnJlYWs7CisJCQl9CiAJCWNhc2UgUkVP UkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCXsKIAkJCQljaGFyCSAgICpkYXRh OwpAQCAtNDA4Nyw2ICs0MTg3LDE1IEBAIFJlb3JkZXJCdWZmZXJDaGFuZ2VTaXplKFJlb3JkZXJC dWZmZXJDaGFuZ2UgKmNoYW5nZSkKIAogCQkJCWJyZWFrOwogCQkJfQorCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJeworCQkJCVNpemUJCXByZWZpeF9zaXplID0g c3RybGVuKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KSArIDE7CisKKwkJCQlzeiArPSBwcmVm aXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplICsKKwkJCQkJc2l6ZW9m KFNpemUpICsgc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KTsKKworCQkJ CWJyZWFrOworCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046 CiAJCQl7CiAJCQkJc3ogKz0gc2l6ZW9mKFNoYXJlZEludmFsaWRhdGlvbk1lc3NhZ2UpICoKQEAg LTQzNjIsNiArNDQ3MSwzMyBAQCBSZW9yZGVyQnVmZmVyUmVzdG9yZUNoYW5nZShSZW9yZGVyQnVm ZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCiAJCQkJYnJlYWs7CiAJCQl9CisJCWNh c2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7CisJCQkJU2l6ZQkJcHJl Zml4X3NpemU7CisKKwkJCQkvKiByZWFkIHByZWZpeCAqLworCQkJCW1lbWNweSgmcHJlZml4X3Np emUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJ bWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkLCBkYXRhLCBzaXplb2YoT2lkKSk7CisJ CQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5kZGxtc2cu Y21kdHlwZSwgZGF0YSwgc2l6ZW9mKGludCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKGludCk7CisJ CQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBNZW1vcnlDb250ZXh0QWxsb2MocmItPmNv bnRleHQsIHByZWZpeF9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVm aXgsIGRhdGEsIHByZWZpeF9zaXplKTsKKwkJCQlBc3NlcnQoY2hhbmdlLT5kYXRhLmRkbG1zZy5w cmVmaXhbcHJlZml4X3NpemUgLSAxXSA9PSAnXDAnKTsKKwkJCQlkYXRhICs9IHByZWZpeF9zaXpl OworCisJCQkJLyogcmVhZCB0aGUgbWVzc2FnZSAqLworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRh Lm1zZy5tZXNzYWdlX3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXpl b2YoU2l6ZSk7CisJCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTWVtb3J5Q29udGV4dEFs bG9jKHJiLT5jb250ZXh0LAorCQkJCQkJCQkJCQkJCQkJICBjaGFuZ2UtPmRhdGEubXNnLm1lc3Nh Z2Vfc2l6ZSk7CisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSwgZGF0YSwKKwkJ CQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCWRhdGEgKz0gY2hhbmdl LT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CisKKwkJCQlicmVhazsKKwkJCX0KIAkJY2FzZSBSRU9S REVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJewogCQkJCVNpemUJCWludmFsX3Np emUgPSBzaXplb2YoU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSkgKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggNTZmNzUzZC4uZjg4MjVjYiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0xNTYsNiArMTU2LDcgQEAKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNs dWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAicGFyc2VyL2FuYWx5emUuaCIK ICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgiCiAj aW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKQEAgLTE3OSw3ICsxODAsMTAgQEAKICNp bmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNs dWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIK KyNpbmNsdWRlICJ0Y29wL3BxdWVyeS5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNp bmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2NhdGNhY2hlLmgiCkBAIC0yNDY0 LDYgKzI0NjgsMjMwIEBAIGFwcGx5X2hhbmRsZV90cnVuY2F0ZShTdHJpbmdJbmZvIHMpCiAJZW5k X3JlcGxpY2F0aW9uX3N0ZXAoKTsKIH0KIAorLyogUmVtb3ZlIHRoZSBkYXRhIHBvcHVsYXRpb24g ZnJvbSB0aGUgY29tbWFuZCAqLworc3RhdGljIHZvaWQKK3ByZXByb2Nlc3NfY3JlYXRlX3RhYmxl KFJhd1N0bXQgKmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21tYW5kVGFnOworCisJY29tbWFu ZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKiljb21tYW5kKTsKKworCXN3aXRjaCAoY29t bWFuZFRhZykKKwl7CisJCWNhc2UgQ01EVEFHX0NSRUFURV9UQUJMRV9BUzoKKwkJY2FzZSBDTURU QUdfU0VMRUNUX0lOVE86CisJCQl7CisJCQkJQ3JlYXRlVGFibGVBc1N0bXQgKmNhc3RtdCA9IChD cmVhdGVUYWJsZUFzU3RtdCAqKSBjb21tYW5kLT5zdG10OworCQkJCWlmIChjYXN0bXQtPm9ianR5 cGUgPT0gT0JKRUNUX1RBQkxFKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm9yY2Ugc2tpcHBp bmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2b2lkIGRhdGEKKwkJCQkJICogaW5jb25zaXN0ZW5jeS4g RGF0YSBzaG91bGQgYmUgcmVwbGljYXRlZCBmcm9tIHRoZQorCQkJCQkgKiBwdWJsaXNoZXIgaW5z dGVhZC4KKwkJCQkJICovCisJCQkJCWNhc3RtdC0+aW50by0+c2tpcERhdGEgPSB0cnVlOworCQkJ CX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENNRFRBR19TRUxFQ1Q6CisJCQl7CisJCQkJU2Vs ZWN0U3RtdCAqc3N0bXQgPSAoU2VsZWN0U3RtdCAqKSBjb21tYW5kLT5zdG10OworCisJCQkJaWYg KHNzdG10LT5pbnRvQ2xhdXNlICE9IE5VTEwpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3Jj ZSBza2lwcGluZyBkYXRhIHBvcHVsYXRpb24gdG8gYXZvaWQgZGF0YQorCQkJCQkgKiBpbmNvbnNp c3RlbmN5LiBEYXRhIHNob3VsZCBiZSByZXBsaWNhdGVkIGZyb20gdGhlCisJCQkJCSAqIHB1Ymxp c2hlciBpbnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJc3N0bXQtPmludG9DbGF1c2UtPnNraXBEYXRh ID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9 Cit9CisKKy8qCisgKiBIYW5kbGUgQ1JFQVRFIFRBQkxFIGNvbW1hbmQKKyAqCisgKiBDYWxsIEFk ZFN1YnNjcmlwdGlvblJlbFN0YXRlIGZvciBDUkVBVEUgVEFCRUwgY29tbWFuZCB0byBzZXQgdGhl IHJlbHN0YXRlIHRvCisgKiBTVUJSRUxfU1RBVEVfUkVBRFkgc28gRE1MIGNoYW5nZXMgb24gdGhp cyBuZXcgdGFibGUgY2FuIGJlIHJlcGxpY2F0ZWQgd2l0aG91dAorICogaGF2aW5nIHRvIG1hbnVh bGx5IHJ1biAiYWx0ZXIgc3Vic2NyaXB0aW9uIC4uLiByZWZyZXNoIHB1YmxpY2F0aW9uIgorICov CitzdGF0aWMgdm9pZAoraGFuZGxlX2NyZWF0ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQorewor CUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwlSYW5nZVZhcgkgKnJ2ID0gTlVMTDsKKwlPaWQJCQly ZWxpZDsKKwlPaWQJCQlyZWxuYW1lc3BhY2UgPSBJbnZhbGlkT2lkOworCWNoYXIgCQkgKnNjaGVt YW5hbWUgPSBOVUxMOworCWNoYXIJCSAqcmVsbmFtZSA9IE5VTEw7CisKKwljb21tYW5kVGFnID0g Q3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCXN3aXRjaCAoY29tbWFuZFRh ZykKKwl7CisJCWNhc2UgQ01EVEFHX0NSRUFURV9UQUJMRToKKwkJCXsKKwkJCQlDcmVhdGVTdG10 ICpjc3RtdCA9IChDcmVhdGVTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisJCQkJcnYgPSBjc3RtdC0+ cmVsYXRpb247CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKwor CWlmICghcnYpCisJCXJldHVybjsKKworCXNjaGVtYW5hbWUgPSBydi0+c2NoZW1hbmFtZTsKKwly ZWxuYW1lID0gcnYtPnJlbG5hbWU7CisKKwlpZiAoc2NoZW1hbmFtZSAhPSBOVUxMKQorCQlyZWxu YW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX29pZChzY2hlbWFuYW1lLCBmYWxzZSk7CisKKwlpZiAo cmVsbmFtZXNwYWNlICE9IEludmFsaWRPaWQpCisJCXJlbGlkID0gZ2V0X3JlbG5hbWVfcmVsaWQo cmVsbmFtZSwgcmVsbmFtZXNwYWNlKTsKKwllbHNlCisJCXJlbGlkID0gUmVsbmFtZUdldFJlbGlk KHJlbG5hbWUpOworCisJaWYgKHJlbGlkICE9IEludmFsaWRPaWQpCisJeworCQlBZGRTdWJzY3Jp cHRpb25SZWxTdGF0ZShNeVN1YnNjcmlwdGlvbi0+b2lkLCByZWxpZCwKKwkJCQkJCQkJU1VCUkVM X1NUQVRFX1JFQURZLAorCQkJCQkJCQlJbnZhbGlkWExvZ1JlY1B0cik7CisJCWVyZXBvcnQoREVC VUcxLAorCQkJCShlcnJtc2dfaW50ZXJuYWwoInRhYmxlIFwiJXNcIiBhZGRlZCB0byBzdWJzY3Jp cHRpb24gXCIlc1wiIiwKKwkJCQkJCQkJIHJlbG5hbWUsIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkp OworCX0KK30KKworc3RhdGljIHZvaWQKK2FwcGx5X2hhbmRsZV9kZGwoU3RyaW5nSW5mbyBzKQor eworCVhMb2dSZWNQdHIgbHNuOworCWNvbnN0IGNoYXIgKnByZWZpeCA9IE5VTEw7CisJY2hhciAq bWVzc2FnZSA9IE5VTEw7CisJY2hhcgkgICAqZGRsX2NvbW1hbmQ7CisJU2l6ZQkJc3o7CisJTGlz dAkgICAqcGFyc2V0cmVlX2xpc3Q7CisJTGlzdENlbGwgICAqcGFyc2V0cmVlX2l0ZW07CisJRGVz dFJlY2VpdmVyICpyZWNlaXZlcjsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJY29uc3Qg Y2hhciAqc2F2ZV9kZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZWJ1Z19xdWVyeV9zdHJpbmc7CisKKwlt ZXNzYWdlID0gbG9naWNhbHJlcF9yZWFkX2RkbG1lc3NhZ2UocywgJmxzbiwgJnByZWZpeCwgJnN6 KTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb21tYW5kICovCisJ YmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJZGRsX2NvbW1hbmQgPSBkZGxfZGVwYXJzZV9q c29uX3RvX3N0cmluZyhtZXNzYWdlKTsKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZGxfY29tbWFu ZDsKKworCS8qIERlc3ROb25lIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uICovCisJcmVjZWl2ZXIg PSBDcmVhdGVEZXN0UmVjZWl2ZXIoRGVzdE5vbmUpOworCXBhcnNldHJlZV9saXN0ID0gcGdfcGFy c2VfcXVlcnkoZGRsX2NvbW1hbmQpOworCisJZm9yZWFjaChwYXJzZXRyZWVfaXRlbSwgcGFyc2V0 cmVlX2xpc3QpCisJeworCQlMaXN0CSAgICpwbGFudHJlZV9saXN0OworCQlMaXN0CSAgICpxdWVy eXRyZWVfbGlzdDsKKwkJUmF3U3RtdAkgICAqY29tbWFuZCA9IChSYXdTdG10ICopIGxmaXJzdChw YXJzZXRyZWVfaXRlbSk7CisJCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwkJTWVtb3J5Q29udGV4 dCBwZXJfcGFyc2V0cmVlX2NvbnRleHQgPSBOVUxMOworCQlQb3J0YWwJCXBvcnRhbDsKKwkJYm9v bAkJIHNuYXBzaG90X3NldCA9IGZhbHNlOworCisJCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5k VGFnKChOb2RlICopIGNvbW1hbmQpOworCisJCS8qIElmIHdlIGdvdCBhIGNhbmNlbCBzaWduYWwg aW4gcGFyc2luZyBvciBwcmlvciBjb21tYW5kLCBxdWl0ICovCisJCUNIRUNLX0ZPUl9JTlRFUlJV UFRTKCk7CisKKwkJLyogUmVtb3ZlIGRhdGEgcG9wdWxhdGlvbiBmcm9tIHRoZSBjb21tYW5kICov CisJCXByZXByb2Nlc3NfY3JlYXRlX3RhYmxlKGNvbW1hbmQpOworCisJCS8qCisJCSAqIFNldCB1 cCBhIHNuYXBzaG90IGlmIHBhcnNlIGFuYWx5c2lzL3BsYW5uaW5nIHdpbGwgbmVlZCBvbmUuCisJ CSAqLworCQlpZiAoYW5hbHl6ZV9yZXF1aXJlc19zbmFwc2hvdChjb21tYW5kKSkKKwkJeworCQkJ UHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJCQlzbmFwc2hv dF9zZXQgPSB0cnVlOworCQl9CisKKwkJLyoKKwkJICogV2UgZG8gdGhlIHdvcmsgZm9yIGVhY2gg cGFyc2V0cmVlIGluIGEgc2hvcnQtbGl2ZWQgY29udGV4dCwgdG8KKwkJICogbGltaXQgdGhlIG1l bW9yeSB1c2VkIHdoZW4gdGhlcmUgYXJlIG1hbnkgY29tbWFuZHMgaW4gdGhlIHN0cmluZy4KKwkJ ICovCisJCXBlcl9wYXJzZXRyZWVfY29udGV4dCA9CisJCQlBbGxvY1NldENvbnRleHRDcmVhdGUo Q3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgImV4ZWN1dGVfc3FsX3N0cmluZyBwZXIt c3RhdGVtZW50IGNvbnRleHQiLAorCQkJCQkJCQkgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOwor CQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBlcl9wYXJzZXRyZWVfY29udGV4 dCk7CisKKwkJcXVlcnl0cmVlX2xpc3QgPSBwZ19hbmFseXplX2FuZF9yZXdyaXRlX2ZpeGVkcGFy YW1zKGNvbW1hbmQsCisJCQkJCQkJCQkJCQkJCQlkZGxfY29tbWFuZCwKKwkJCQkJCQkJCQkJCQkJ CU5VTEwsIDAsIE5VTEwpOworCisJCXBsYW50cmVlX2xpc3QgPSBwZ19wbGFuX3F1ZXJpZXMocXVl cnl0cmVlX2xpc3QsIGRkbF9jb21tYW5kLCAwLCBOVUxMKTsKKworCQkvKiBEb25lIHdpdGggdGhl IHNuYXBzaG90IHVzZWQgZm9yIHBhcnNpbmcvcGxhbm5pbmcgKi8KKwkJaWYgKHNuYXBzaG90X3Nl dCkKKwkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwkJcG9ydGFsID0gQ3JlYXRlUG9ydGFsKCJs b2dpY2FsIHJlcGxpY2F0aW9uIiwgdHJ1ZSwgdHJ1ZSk7CisKKwkJLyoKKwkJICogV2UgZG9uJ3Qg aGF2ZSB0byBjb3B5IGFueXRoaW5nIGludG8gdGhlIHBvcnRhbCwgYmVjYXVzZSBldmVyeXRoaW5n CisJCSAqIHdlIGFyZSBwYXNzaW5nIGhlcmUgaXMgaW4gQXBwbHlNZXNzYWdlQ29udGV4dCBvciB0 aGUKKwkJICogcGVyX3BhcnNldHJlZV9jb250ZXh0LCBhbmQgc28gd2lsbCBvdXRsaXZlIHRoZSBw b3J0YWwgYW55d2F5LgorCQkgKi8KKwkJUG9ydGFsRGVmaW5lUXVlcnkocG9ydGFsLAorCQkJCQkJ ICBOVUxMLAorCQkJCQkJICBkZGxfY29tbWFuZCwKKwkJCQkJCSAgY29tbWFuZFRhZywKKwkJCQkJ CSAgcGxhbnRyZWVfbGlzdCwKKwkJCQkJCSAgTlVMTCk7CisKKwkJLyoKKwkJICogU3RhcnQgdGhl IHBvcnRhbC4gIE5vIHBhcmFtZXRlcnMgaGVyZS4KKwkJICovCisJCVBvcnRhbFN0YXJ0KHBvcnRh bCwgTlVMTCwgMCwgSW52YWxpZFNuYXBzaG90KTsKKworCQkvKgorCQkgKiBTd2l0Y2ggYmFjayB0 byB0cmFuc2FjdGlvbiBjb250ZXh0IGZvciBleGVjdXRpb24uCisJCSAqLworCQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkJKHZvaWQpIFBvcnRhbFJ1bihwb3J0YWwsCisJ CQkJCQkgRkVUQ0hfQUxMLAorCQkJCQkJIHRydWUsCisJCQkJCQkgdHJ1ZSwKKwkJCQkJCSByZWNl aXZlciwKKwkJCQkJCSByZWNlaXZlciwKKwkJCQkJCSBOVUxMKTsKKworCQlQb3J0YWxEcm9wKHBv cnRhbCwgZmFsc2UpOworCisJCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CisKKwkJLyoKKwkJ ICogVGFibGUgY3JlYXRlZCBieSBEREwgcmVwbGljYXRpb24gKGRhdGFiYXNlIGxldmVsKSBpcyBh dXRvbWF0aWNhbGx5CisJCSAqIGFkZGVkIHRvIHRoZSBzdWJzY3JpcHRpb24gaGVyZS4KKwkJICov CisJCWhhbmRsZV9jcmVhdGVfdGFibGUoY29tbWFuZCk7CisKKwkJLyogTm93IHdlIG1heSBkcm9w IHRoZSBwZXItcGFyc2V0cmVlIGNvbnRleHQsIGlmIG9uZSB3YXMgY3JlYXRlZC4gKi8KKwkJTWVt b3J5Q29udGV4dERlbGV0ZShwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCX0KKworCWRlYnVnX3F1 ZXJ5X3N0cmluZyA9IHNhdmVfZGVidWdfcXVlcnlfc3RyaW5nOworCWVuZF9yZXBsaWNhdGlvbl9z dGVwKCk7Cit9CisKIAogLyoKICAqIExvZ2ljYWwgcmVwbGljYXRpb24gcHJvdG9jb2wgbWVzc2Fn ZSBkaXNwYXRjaGVyLgpAQCAtMjUyOSw2ICsyNzU3LDEwIEBAIGFwcGx5X2Rpc3BhdGNoKFN0cmlu Z0luZm8gcykKIAkJCSAqLwogCQkJYnJlYWs7CiAKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERM TUVTU0FHRToKKwkJCWFwcGx5X2hhbmRsZV9kZGwocyk7CisJCQlicmVhazsKKwogCQljYXNlIExP R0lDQUxfUkVQX01TR19TVFJFQU1fU1RBUlQ6CiAJCQlhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0 KHMpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291 dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRw dXQuYwppbmRleCAwM2IxM2FlLi4zOGJmMDc4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTUzLDYgKzUzLDExIEBAIHN0YXRpYyB2b2lkIHBnb3V0 cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCSBSZW9yZGVy QnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCiAJCQkJCQkJIGJvb2wgdHJh bnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCSBTaXplIHN6LCBjb25zdCBj aGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHBnb3V0cHV0X2RkbG1lc3NhZ2UoTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQlSZW9yZGVyQnVmZmVyVFhOICp0eG4sIFhMb2dS ZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlk LAorCQkJCQkJCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCVNpemUgc3os IGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIGJvb2wgcGdvdXRwdXRfb3JpZ2luX2ZpbHRl cihMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCSAgIFJlcE9yaWdpbklkIG9y aWdpbl9pZCk7CiBzdGF0aWMgdm9pZCBwZ291dHB1dF9iZWdpbl9wcmVwYXJlX3R4bihMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsCkBAIC0yNTYsNiArMjYxLDcgQEAgX1BHX291dHB1dF9wbHVn aW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQogCWNiLT5jaGFuZ2VfY2IgPSBwZ291 dHB1dF9jaGFuZ2U7CiAJY2ItPnRydW5jYXRlX2NiID0gcGdvdXRwdXRfdHJ1bmNhdGU7CiAJY2It Pm1lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5kZGxtZXNzYWdlX2NiID0gcGdv dXRwdXRfZGRsbWVzc2FnZTsKIAljYi0+Y29tbWl0X2NiID0gcGdvdXRwdXRfY29tbWl0X3R4bjsK IAogCWNiLT5iZWdpbl9wcmVwYXJlX2NiID0gcGdvdXRwdXRfYmVnaW5fcHJlcGFyZV90eG47CkBA IC0yNzIsNiArMjc4LDcgQEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxs YmFja3MgKmNiKQogCWNiLT5zdHJlYW1fY29tbWl0X2NiID0gcGdvdXRwdXRfc3RyZWFtX2NvbW1p dDsKIAljYi0+c3RyZWFtX2NoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAljYi0+c3RyZWFt X21lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5zdHJlYW1fZGRsbWVzc2FnZV9j YiA9IHBnb3V0cHV0X2RkbG1lc3NhZ2U7CiAJY2ItPnN0cmVhbV90cnVuY2F0ZV9jYiA9IHBnb3V0 cHV0X3RydW5jYXRlOwogCS8qIHRyYW5zYWN0aW9uIHN0cmVhbWluZyAtIHR3by1waGFzZSBjb21t aXQgKi8KIAljYi0+c3RyZWFtX3ByZXBhcmVfY2IgPSBwZ291dHB1dF9zdHJlYW1fcHJlcGFyZV90 eG47CkBAIC00MjYsNiArNDMzLDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCS8qIFRoaXMgcGx1Z2lu IHVzZXMgYmluYXJ5IHByb3RvY29sLiAqLwogCW9wdC0+b3V0cHV0X3R5cGUgPSBPVVRQVVRfUExV R0lOX0JJTkFSWV9PVVRQVVQ7CisJb3B0LT5yZWNlaXZlX3Jld3JpdGVzID0gdHJ1ZTsKIAogCS8q CiAJICogVGhpcyBpcyByZXBsaWNhdGlvbiBzdGFydCBhbmQgbm90IHNsb3QgaW5pdGlhbGl6YXRp b24uCkBAIC00OTksNiArNTA3LDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCQkvKiBJbml0IHB1Ymxp Y2F0aW9uIHN0YXRlLiAqLwogCQlkYXRhLT5wdWJsaWNhdGlvbnMgPSBOSUw7CisJCWRhdGEtPmRl bGV0ZWRfcmVsaWRzID0gTklMOwogCQlwdWJsaWNhdGlvbnNfdmFsaWQgPSBmYWxzZTsKIAkJQ2Fj aGVSZWdpc3RlclN5c2NhY2hlQ2FsbGJhY2soUFVCTElDQVRJT05PSUQsCiAJCQkJCQkJCQkgIHB1 YmxpY2F0aW9uX2ludmFsaWRhdGlvbl9jYiwKQEAgLTEzODEsOSArMTM5MCwyMiBAQCBwZ291dHB1 dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiAJUmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUgYWN0aW9uID0gY2hhbmdlLT5hY3Rpb247CiAJ VHVwbGVUYWJsZVNsb3QgKm9sZF9zbG90ID0gTlVMTDsKIAlUdXBsZVRhYmxlU2xvdCAqbmV3X3Ns b3QgPSBOVUxMOworCWJvb2wJCQl0YWJsZV9yZXdyaXRlID0gZmFsc2U7CiAKIAl1cGRhdGVfcmVw bGljYXRpb25fcHJvZ3Jlc3MoY3R4LCBmYWxzZSk7CiAKKwkvKgorCSAqIEZvciBoZWFwIHJld3Jp dGVzLCB3ZSBtaWdodCBuZWVkIHRvIHJlcGxpY2F0ZSB0aGVtIGlmIHRoZSByZXdyaXR0ZW4KKwkg KiB0YWJsZSBwdWJsaXNoZXMgcmV3cml0ZSBkZGwgbWVzc2FnZS4gU28gZ2V0IHRoZSBhY3R1YWwg cmVsYXRpb24gaGVyZSBhbmQKKwkgKiBjaGVjayB0aGUgcHViYWN0aW9uIGxhdGVyLgorCSAqLwor CWlmIChyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKQorCXsKKwkJdGFibGVfcmV3cml0ZSA9 IHRydWU7CisJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbHJld3JpdGUpOworCQl0YXJnZXRyZWwgPSByZWxhdGlvbjsKKwl9CisKIAlpZiAoIWlz X3B1Ymxpc2hhYmxlX3JlbGF0aW9uKHJlbGF0aW9uKSkKIAkJcmV0dXJuOwogCkBAIC0xNDE3LDYg KzE0MzksMTMgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJQXNzZXJ0KGZhbHNlKTsKIAl9CiAKKwkvKgorCSAq IFdlIGRvbid0IHB1Ymxpc2ggdGFibGUgcmV3cml0ZSBjaGFuZ2UgdW5sZXNzIHdlIHB1Ymxpc2gg dGhlIHJld3JpdGUgZGRsCisJICogbWVzc2FnZS4KKwkgKi8KKwlpZiAodGFibGVfcmV3cml0ZSAm JiAhcmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQlyZXR1cm47CisKIAkvKiBBdm9pZCBs ZWFraW5nIG1lbW9yeSBieSB1c2luZyBhbmQgcmVzZXR0aW5nIG91ciBvd24gY29udGV4dCAqLwog CW9sZCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhkYXRhLT5jb250ZXh0KTsKIApAQCAtMTQ0Niw4 ICsxNDc1LDggQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJfQogCiAJCQkvKiBDaGVjayByb3cgZmlsdGVyICov Ci0JCQlpZiAoIXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Nsb3Qs IHJlbGVudHJ5LAotCQkJCQkJCQkJICZhY3Rpb24pKQorCQkJaWYgKCF0YWJsZV9yZXdyaXRlICYm CisJCQkJIXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Nsb3QsIHJl bGVudHJ5LCAmYWN0aW9uKSkKIAkJCQlicmVhazsKIAogCQkJLyoKQEAgLTE0NjcsOCArMTQ5Niwx OSBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCiAJCQltYXliZV9zZW5kX3NjaGVtYShjdHgsIGNoYW5nZSwgcmVsYXRp b24sIHJlbGVudHJ5KTsKIAogCQkJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7 Ci0JCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWwsIG5l d19zbG90LAotCQkJCQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CisKKwkJ CS8qCisJCQkgKiBDb252ZXJ0IHRoZSByZXdyaXRlIGluc2VydHMgdG8gdXBkYXRlcyBzbyB0aGF0 IHRoZSBzdWJzY3JpYmVyCisJCQkgKiBjYW4gcmVwbGF5IGl0LiBUaGlzIGlzIG5lZWRlZCB0byBt YWtlIHN1cmUgdGhlIGRhdGEgYmV0d2VlbgorCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVy IGlzIGNvbnNpc3RlbnQuCisJCQkgKi8KKwkJCWlmICh0YWJsZV9yZXdyaXRlKQorCQkJCWxvZ2lj YWxyZXBfd3JpdGVfdXBkYXRlKGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwKKwkJCQkJCQkJCQlO VUxMLCBuZXdfc2xvdCwgZGF0YS0+YmluYXJ5LAorCQkJCQkJCQkJCXJlbGVudHJ5LT5jb2x1bW5z KTsKKwkJCWVsc2UKKwkJCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0 YXJnZXRyZWwsIG5ld19zbG90LAorCQkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVsZW50cnktPmNv bHVtbnMpOwogCQkJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIAkJCWJyZWFrOwogCQlj YXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9VUERBVEU6CkBAIC0xNTk4LDYgKzE2MzgsOSBAQCBw Z291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiAJCWFuY2VzdG9yID0gTlVMTDsKIAl9CiAKKwlpZiAodGFibGVfcmV3cml0ZSkK KwkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisKIAkvKiBDbGVhbnVwICovCiAJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZCk7CiAJTWVtb3J5Q29udGV4dFJlc2V0KGRhdGEtPmNvbnRleHQpOwpA QCAtMTY3NSw4ICsxNzE4LDggQEAgcGdvdXRwdXRfdHJ1bmNhdGUoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAKIHN0YXRpYyB2b2lkCiBwZ291dHB1 dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAq dHhuLAotCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWwsIGNv bnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKLQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSkKKwkJ CQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLAorCQkJCSBjb25z dCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAJUEdPdXRw dXREYXRhICpkYXRhID0gKFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91dHB1dF9wbHVnaW5fcHJpdmF0 ZTsKIAlUcmFuc2FjdGlvbklkIHhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwpAQCAtMTcxNiw2 ICsxNzU5LDEzNyBAQCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7 CiB9CiAKK3N0YXRpYyB2b2lkCitwZ291dHB1dF9kZGxtZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQlYTG9nUmVjUHRyIG1lc3Nh Z2VfbHNuLAorCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21t YW5kVHlwZSBjbWR0eXBlLAorCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKQorewor CVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERhdGEgKikgY3R4LT5vdXRwdXRfcGx1Z2lu X3ByaXZhdGU7CisJUEdPdXRwdXRUeG5EYXRhICp0eG5kYXRhID0gKFBHT3V0cHV0VHhuRGF0YSAq KSB0eG4tPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IE5VTEw7 CisJVHJhbnNhY3Rpb25JZCB4aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlSZWxhdGlvblN5 bmNFbnRyeSAqcmVsZW50cnk7CisKKwkvKgorCSAqIFJlbWVtYmVyIHRoZSB4aWQgZm9yIHRoZSBt ZXNzYWdlIGluIHN0cmVhbWluZyBtb2RlLiBTZWUKKwkgKiBwZ291dHB1dF9jaGFuZ2UuCisJICov CisJaWYgKGluX3N0cmVhbWluZykKKwkJeGlkID0gdHhuLT54aWQ7CisKKwlzd2l0Y2ggKGNtZHR5 cGUpCisJeworCQljYXNlIERDVF9UYWJsZURyb3BTdGFydDoKKwkJCS8qCisJCQkgKiBPbiBEUk9Q IHN0YXJ0LCBhZGQgdGhlIHJlbGlkIHRvIGEgZGVsZXRlZF9yZWxpZCBsaXN0IGlmIHRoZQorCQkJ ICogcmVsaWQgaXMgcGFydCBvZiBhIHB1YmxpY2F0aW9uIHRoYXQgc3VwcG9ydHMgZGRsIHB1Ymxp Y2F0aW9uLiBXZQorCQkJICogbmVlZCB0aGlzIGJlY2F1c2Ugb24gRFJPUCBlbmQsIHRoZSByZWxp ZCB3aWxsIG5vIGxvbmdlciBiZQorCQkJICogdmFsaWQuIExhdGVyIG9uIERyb3AgZW5kLCB2ZXJp ZnkgdGhhdCB0aGUgZHJvcCBpcyBmb3IgYSByZWxpZAorCQkJICogdGhhdCBpcyBvbiB0aGUgZGVs ZXRlZF9yaWQgbGlzdCwgYW5kIG9ubHkgdGhlbiBzZW5kIHRoZSBkZGwKKwkJCSAqIG1lc3NhZ2Uu CisJCQkgKi8KKwkJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKwor CQkJQXNzZXJ0KHJlbGF0aW9uKTsKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRh dGEsIHJlbGF0aW9uKTsKKworCQkJaWYgKHJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJ CQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IGxhcHBlbmRfb2lkKGRhdGEtPmRlbGV0ZWRfcmVsaWRz LCByZWxpZCk7CisKKwkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJcmV0dXJuOworCQlj YXNlIERDVF9UYWJsZURyb3BFbmQ6CisJCQlpZiAoIWxpc3RfbWVtYmVyX29pZChkYXRhLT5kZWxl dGVkX3JlbGlkcywgcmVsaWQpKQorCQkJCXJldHVybjsKKwkJCWVsc2UKKwkJCQlkYXRhLT5kZWxl dGVkX3JlbGlkcyA9IGxpc3RfZGVsZXRlX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQp OworCQkJYnJlYWs7CisJCWNhc2UgRENUX1RhYmxlQWx0ZXI6CisJCQkvKgorCQkJICogRm9yIHRh YmxlIHJld3JpdGUgZGRsLCB3ZSBmaXJzdCBzZW5kIHRoZSBvcmlnaW5hbCBkZGwgbWVzc2FnZSB0 bworCQkJICogc3Vic2NyaWJlciwgdGhlbiBjb252ZXJ0IHRoZSB1cGNvbWluZyByZXdyaXRlIElO U0VSVCB0byBVUERBVEUgYW5kCisJCQkgKiBzZW5kIHRoZW0gdG8gc3Vic2NyaWJlciBzbyB0aGF0 IHRoZSBkYXRhIGJldHdlZW4gcHVibGlzaGVyIGFuZAorCQkJICogc3Vic2NyaWJlciBjYW4gYWx3 YXlzIGJlIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICogV2UgZG8gdGhpcyB3YXkgYmVjYXVzZSBv ZiB0d28gcmVhc29uOgorCQkJICoKKwkJCSAqICgxKSBUaGUgZGF0YSBiZWZvcmUgdGhlIHJld3Jp dGUgZGRsIGNvdWxkIGFscmVhZHkgYmUgZGlmZmVyZW50IGFtb25nCisJCQkgKiBwdWJsaXNoZXIg YW5kIHN1YnNjcmliZXIuIFRvIG1ha2Ugc3VyZSB0aGUgZXh0cmEgZGF0YSBpbiBzdWJzY3JpYmVy CisJCQkgKiB3aGljaCBkb2Vzbid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCByZXdyaXR0 ZW4sIHdlIG5lZWQgdG8gbGV0CisJCQkgKiB0aGUgc3Vic2NyaWJlciBleGVjdXRlIHRoZSBvcmln aW5hbCByZXdyaXRlIGRkbCB0byByZXdyaXRlIGFsbCB0aGUKKwkJCSAqIGRhdGEgYXQgZmlyc3Qu CisJCQkgKgorCQkJICogKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyByZXdyaXRlIGRkbCBj b3VsZCBiZSBkaWZmZXJlbnQgYW1vbmcKKwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlcihk dWUgdG8gZGlmZmVyZW50IGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNlZAorCQkJICogZHVyaW5nIHJl d3JpdGUpLCBzbyB3ZSBuZWVkIHRvIHJlcGxpY2F0ZSB0aGUgcmV3cml0ZSBVUERBVEVzIHRvIGtl ZXAKKwkJCSAqIHRoZSBkYXRhIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICogVE8gSU1QUk9WRTog V2UgY291bGQgaW1wcm92ZSB0aGlzIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmliZXIgb25seQorCQkJ ICogcmV3cml0ZSB0aGUgZXh0cmEgZGF0YSBpbnN0ZWFkIG9mIGRvaW5nIGZ1bGx5IHJld3JpdGUg YW5kIHVzZSB0aGUKKwkJCSAqIHVwY29taW5nIHJld3JpdGUgVVBEQVRFcyB0byByZXdyaXRlIHRo ZSByZXN0IGRhdGEuIEJlc2lkZXMsIHdlIG1heQorCQkJICogbm90IG5lZWQgdG8gc2VuZCByZXdy aXRlIGNoYW5nZXMgZm9yIGFsbCB0eXBlIG9mIHJld3JpdGUgZGRsLCBmb3IKKwkJCSAqIGV4YW1w bGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nIHJld3JpdGUgY2hhbmdlcyBmb3IgQUxU RVIKKwkJCSAqIFRBQkxFIFNFVCBMT0dHRUQgYXMgdGhlIGRhdGEgaW4gdGhlIHRhYmxlIGRvZXNu J3QgYWN0dWFsbHkgYmUKKwkJCSAqIGNoYW5nZWQuCisJCQkgKi8KKwkJCXJlbGF0aW9uID0gUmVs YXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKwkJCUFzc2VydChyZWxhdGlvbik7CisKKwkJCXJl bGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJLyoKKwkJ CSAqIFNraXAgc2VuZGluZyB0aGlzIGRkbCBpZiB3ZSBkb24ndCBwdWJsaXNoIGRkbCBtZXNzYWdl IG9yIHRoZSBkZGwKKwkJCSAqIG5lZWQgdG8gYmUgcHVibGlzaGVkIHZpYSBpdHMgcm9vdCByZWxh dGlvbi4KKwkJCSAqLworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgfHwKKwkJ CQlyZWxlbnRyeS0+cHVibGlzaF9hc19yZWxpZCAhPSByZWxpZCkKKwkJCXsKKwkJCQlSZWxhdGlv bkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWJyZWFrOworCQljYXNl IERDVF9TaW1wbGVDbWQ6CisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxp ZCk7CisKKwkJCWlmIChyZWxhdGlvbiA9PSBOVUxMKQorCQkJCWJyZWFrOworCisJCQlyZWxlbnRy eSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlmICghcmVsZW50 cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQkJeworCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24p OworCQkJCXJldHVybjsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgRENUX09iamVjdERyb3A6 CisJCQkvKiBkbyBub3RoaW5nICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJS T1IsICJ1bnN1cHBvcnRlZCB0eXBlICVkIiwgY21kdHlwZSk7CisJCQlicmVhazsKKwl9CisKKwkv KiBTZW5kIEJFR0lOIGlmIHdlIGhhdmVuJ3QgeWV0ICovCisJaWYgKHR4bmRhdGEgJiYgIXR4bmRh dGEtPnNlbnRfYmVnaW5fdHhuKQorCQlwZ291dHB1dF9zZW5kX2JlZ2luKGN0eCwgdHhuKTsKKwor CU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOworCWxvZ2ljYWxyZXBfd3JpdGVf ZGRsbWVzc2FnZShjdHgtPm91dCwKKwkJCQkJCQkJeGlkLAorCQkJCQkJCQltZXNzYWdlX2xzbiwK KwkJCQkJCQkJcHJlZml4LAorCQkJCQkJCQlzeiwKKwkJCQkJCQkJbWVzc2FnZSk7CisJT3V0cHV0 UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKKworCWlmIChyZWxhdGlvbikKKwkJUmVsYXRpb25DbG9z ZShyZWxhdGlvbik7Cit9CisKIC8qCiAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZGF0YSBpcyBhc3Nv Y2lhdGVkIHdpdGggYW4gb3JpZ2luIGFuZCB0aGUgdXNlciBoYXMKICAqIHJlcXVlc3RlZCB0aGUg Y2hhbmdlcyB0aGF0IGRvbid0IGhhdmUgYW4gb3JpZ2luLCBmYWxzZSBvdGhlcndpc2UuCkBAIC0x OTk3LDcgKzIxNzEsOCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBS ZWxhdGlvbiByZWxhdGlvbikKIAkJZW50cnktPnNjaGVtYV9zZW50ID0gZmFsc2U7CiAJCWVudHJ5 LT5zdHJlYW1lZF90eG5zID0gTklMOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJpbnNlcnQgPSBl bnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPQotCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVs ZXRlID0gZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsKKwkJCWVudHJ5LT5w dWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0KKwkJ CWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9IGZhbHNlOwogCQllbnRyeS0+bmV3X3Nsb3QgPSBO VUxMOwogCQllbnRyeS0+b2xkX3Nsb3QgPSBOVUxMOwogCQltZW1zZXQoZW50cnktPmV4cHJzdGF0 ZSwgMCwgc2l6ZW9mKGVudHJ5LT5leHByc3RhdGUpKTsKQEAgLTIwNTUsNiArMjIzMCw3IEBAIGdl dF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQog CQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFjdGlv bnMucHViZGVsZXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0g ZmFsc2U7CisJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9IGZhbHNlOwogCiAJCS8qCiAJCSAq IFR1cGxlIHNsb3RzIGNsZWFudXBzLiAoV2lsbCBiZSByZWJ1aWx0IGxhdGVyIGlmIG5lZWRlZCku CkBAIC0yMTY4LDYgKzIzNDQsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpk YXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUg fD0gcHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZTsKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJk ZWxldGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZTsKIAkJCQllbnRyeS0+cHViYWN0aW9u cy5wdWJ0cnVuY2F0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGU7CisJCQkJZW50cnkt PnB1YmFjdGlvbnMucHViZGRsIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZGw7CiAKIAkJCQkvKgog CQkJCSAqIFdlIHdhbnQgdG8gcHVibGlzaCB0aGUgY2hhbmdlcyBhcyB0aGUgdG9wLW1vc3QgYW5j ZXN0b3IKQEAgLTIzNTMsNiArMjUzMCw3IEBAIHJlbF9zeW5jX2NhY2hlX3B1YmxpY2F0aW9uX2Ni KERhdHVtIGFyZywgaW50IGNhY2hlaWQsIHVpbnQzMiBoYXNodmFsdWUpCiAJewogCQllbnRyeS0+ cmVwbGljYXRlX3ZhbGlkID0gZmFsc2U7CiAJfQorCiB9CiAKIC8qIFNlbmQgUmVwbGljYXRpb24g b3JpZ2luICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRleCAwMGRjMGYyLi5mMWI0 ZDA5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTU2ODMsNiArNTY4Myw3IEBA IFJlbGF0aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRpb24gcmVsYXRpb24sIFB1YmxpY2F0 aW9uRGVzYyAqcHViZGVzYykKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgfD0gcHVi Zm9ybS0+cHVidXBkYXRlOwogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSB8PSBwdWJm b3JtLT5wdWJkZWxldGU7CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgfD0gcHVi Zm9ybS0+cHVidHJ1bmNhdGU7CisJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGRsIHw9IHB1YmZv cm0tPnB1YmRkbDsKIAogCQkvKgogCQkgKiBDaGVjayBpZiBhbGwgY29sdW1ucyByZWZlcmVuY2Vk IGluIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbiBhcmUgcGFydApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggNjdiNmQ5 MC4uOWIzOGE3YyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0zODk2LDYgKzM4OTYsNyBAQCBnZXRQdWJsaWNh dGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJaW50CQkJaV9wdWJ1 cGRhdGU7CiAJaW50CQkJaV9wdWJkZWxldGU7CiAJaW50CQkJaV9wdWJ0cnVuY2F0ZTsKKwlpbnQJ CQlpX3B1YmRkbDsKIAlpbnQJCQlpX3B1YnZpYXJvb3Q7CiAJaW50CQkJaSwKIAkJCQludHVwczsK QEAgLTM5MTEsMjMgKzM5MTIsMjMgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGlu dCAqbnVtUHVibGljYXRpb25zKQogCXJlc2V0UFFFeHBCdWZmZXIocXVlcnkpOwogCiAJLyogR2V0 IHRoZSBwdWJsaWNhdGlvbnMuICovCi0JaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTMwMDAw KQorCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE1MDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFt ZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAu cHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIHAucHVi dmlhcm9vdCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBk YXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJkZGwsIHAucHVidmlhcm9vdCAi CiAJCQkJCQkJICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAllbHNlIGlmIChmb3V0LT5yZW1v dGVWZXJzaW9uID49IDExMDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJ CQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5w dWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVw ZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgor CQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJk ZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRsLCBmYWxzZSBBUyBwdWJ2aWFy b290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCWVsc2UKIAkJYXBwZW5k UFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQs IHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJhbGx0 YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1 YnRydW5jYXRlLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKKwkJCQkJCQkgInAucHViYWxsdGFibGVz LCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBmYWxzZSBBUyBwdWJ0cnVu Y2F0ZSwgZmFsc2UgYXMgcC5wdWJkZGwsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgogCQkJCQkJCSAi RlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAKIAlyZXMgPSBFeGVjdXRlU3FsUXVlcnkoZm91dCwg cXVlcnktPmRhdGEsIFBHUkVTX1RVUExFU19PSyk7CkBAIC0zOTQzLDYgKzM5NDQsNyBAQCBnZXRQ dWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJaV9wdWJ1 cGRhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidXBkYXRlIik7CiAJaV9wdWJkZWxldGUgPSBQUWZu dW1iZXIocmVzLCAicHViZGVsZXRlIik7CiAJaV9wdWJ0cnVuY2F0ZSA9IFBRZm51bWJlcihyZXMs ICJwdWJ0cnVuY2F0ZSIpOworCWlfcHViZGRsID0gUFFmbnVtYmVyKHJlcywgInB1YmRkbCIpOwog CWlfcHVidmlhcm9vdCA9IFBRZm51bWJlcihyZXMsICJwdWJ2aWFyb290Iik7CiAKIAlwdWJpbmZv ID0gcGdfbWFsbG9jKG50dXBzICogc2l6ZW9mKFB1YmxpY2F0aW9uSW5mbykpOwpAQCAtMzk2Niw2 ICszOTY4LDggQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGlj YXRpb25zKQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJkZWxldGUpLCAidCIp ID09IDApOwogCQlwdWJpbmZvW2ldLnB1YnRydW5jYXRlID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1 ZShyZXMsIGksIGlfcHVidHJ1bmNhdGUpLCAidCIpID09IDApOworCQlwdWJpbmZvW2ldLnB1YmRk bCA9CisJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YmRkbCksICJ0IikgPT0gMCk7 CiAJCXB1YmluZm9baV0ucHVidmlhcm9vdCA9CiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBp LCBpX3B1YnZpYXJvb3QpLCAidCIpID09IDApOwogCkBAIC00MDQ1LDYgKzQwNDksMTUgQEAgZHVt cFB1YmxpY2F0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFB1YmxpY2F0aW9uSW5mbyAqcHViaW5m bykKIAkJZmlyc3QgPSBmYWxzZTsKIAl9CiAKKwlpZiAocHViaW5mby0+cHViZGRsKQorCXsKKwkJ aWYgKCFmaXJzdCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCAiKTsKKworCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgImRkbCIpOworCQlmaXJzdCA9IGZhbHNlOworCX0K KwogCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihxdWVyeSwgJ1wnJyk7CiAKIAlpZiAocHViaW5mby0+ cHVidmlhcm9vdCkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmggYi9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IDY5ZWU5MzkuLjZjNTVkZTMgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu aApAQCAtNjIwLDYgKzYyMCw3IEBAIHR5cGVkZWYgc3RydWN0IF9QdWJsaWNhdGlvbkluZm8KIAli b29sCQlwdWJkZWxldGU7CiAJYm9vbAkJcHVidHJ1bmNhdGU7CiAJYm9vbAkJcHVidmlhcm9vdDsK Kwlib29sCQlwdWJkZGw7CiB9IFB1YmxpY2F0aW9uSW5mbzsKIAogLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNj LmMKaW5kZXggNmI4YzE3Yi4uNzkyZjQzOCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ193YWxkdW1w L3JtZ3JkZXNjLmMKKysrIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKQEAgLTI3LDYg KzI3LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgogI2luY2x1ZGUgImNvbW1h bmRzL3RhYmxlc3BhY2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCisjaW5j bHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29y aWdpbi5oIgogI2luY2x1ZGUgInJtZ3JkZXNjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zdGFuZGJ5 ZGVmcy5oIgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3Bz cWwvZGVzY3JpYmUuYwppbmRleCBjNjQ1ZDY2Li4yZTk0ZmNhIDEwMDY0NAotLS0gYS9zcmMvYmlu L3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpAQCAtNjE1OSw3 ICs2MTU5LDcgQEAgbGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCVBRRXhw QnVmZmVyRGF0YSBidWY7CiAJUEdyZXN1bHQgICAqcmVzOwogCXByaW50UXVlcnlPcHQgbXlvcHQg PSBwc2V0LnBvcHQ7Ci0Jc3RhdGljIGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9Owor CXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CiAKIAlpZiAo cHNldC5zdmVyc2lvbiA8IDEwMDAwMCkKIAl7CkBAIC02MTk0LDYgKzYxOTQsMTAgQEAgbGlzdFB1 YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVm LAogCQkJCQkJICAiLFxuICBwdWJ2aWFyb290IEFTIFwiJXNcIiIsCiAJCQkJCQkgIGdldHRleHRf bm9vcCgiVmlhIHJvb3QiKSk7CisJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTQwMDAwKQorCQlhcHBl bmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJICAiLFxuICBwdWJkZGwgQVMgXCIlc1wiIiwKKwkJ CQkJCSAgZ2V0dGV4dF9ub29wKCJERExzIikpOwogCiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1 ZiwKIAkJCQkJCSAiXG5GUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25cbiIpOwpAQCAtNjI4 NCw2ICs2Mjg4LDcgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikK IAlQR3Jlc3VsdCAgICpyZXM7CiAJYm9vbAkJaGFzX3B1YnRydW5jYXRlOwogCWJvb2wJCWhhc19w dWJ2aWFyb290OworCWJvb2wJCWhhc19wdWJkZGw7CiAKIAlQUUV4cEJ1ZmZlckRhdGEgdGl0bGU7 CiAJcHJpbnRUYWJsZUNvbnRlbnQgY29udDsKQEAgLTYzMDAsNiArNjMwNSw3IEBAIGRlc2NyaWJl UHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAKIAloYXNfcHVidHJ1bmNhdGUgPSAo cHNldC5zdmVyc2lvbiA+PSAxMTAwMDApOwogCWhhc19wdWJ2aWFyb290ID0gKHBzZXQuc3ZlcnNp b24gPj0gMTMwMDAwKTsKKwloYXNfcHViZGRsID0gIChwc2V0LnN2ZXJzaW9uID49IDE1MDAwMCk7 CiAKIAlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CiAKQEAgLTYzMTMsNiArNjMxOSw5IEBAIGRlc2Ny aWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJaWYgKGhhc19wdWJ2aWFyb290 KQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJCSAiLCBwdWJ2aWFyb290Iik7 CisJaWYgKGhhc19wdWJkZGwpCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJCQkJCQkJ ICIsIHB1YmRkbCIpOwogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkgIlxuRlJP TSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uXG4iKTsKIApAQCAtNjM2NCw2ICs2MzczLDggQEAg ZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCW5jb2xzKys7CiAJ CWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCW5jb2xzKys7CisJCWlmIChoYXNfcHViZGRsKQorCQkJ bmNvbHMrKzsKIAogCQlpbml0UFFFeHBCdWZmZXIoJnRpdGxlKTsKIAkJcHJpbnRmUFFFeHBCdWZm ZXIoJnRpdGxlLCBfKCJQdWJsaWNhdGlvbiAlcyIpLCBwdWJuYW1lKTsKQEAgLTYzNzgsNiArNjM4 OSw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQlwcmlu dFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIlRydW5jYXRlcyIpLCB0cnVlLCBh bGlnbik7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNv bnQsIGdldHRleHRfbm9vcCgiVmlhIHJvb3QiKSwgdHJ1ZSwgYWxpZ24pOworCQlpZiAoaGFzX3B1 YmRkbCkKKwkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiRERMcyIp LCB0cnVlLCBhbGlnbik7CiAKIAkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUo cmVzLCBpLCAyKSwgZmFsc2UsIGZhbHNlKTsKIAkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBR Z2V0dmFsdWUocmVzLCBpLCAzKSwgZmFsc2UsIGZhbHNlKTsKQEAgLTYzODgsNiArNjQwMSw4IEBA IGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQlwcmludFRhYmxl QWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDcpLCBmYWxzZSwgZmFsc2UpOwogCQlp ZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1 ZShyZXMsIGksIDgpLCBmYWxzZSwgZmFsc2UpOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCXByaW50 VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgOSksIGZhbHNlLCBmYWxzZSk7 CiAKIAkJaWYgKCFwdWJhbGx0YWJsZXMpCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9ybWdybGlzdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKaW5kZXggMDAw YmNiZi4uMzdkZmQ0NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKQEAgLTQ3LDMgKzQ3LDQgQEAgUEdf Uk1HUihSTV9DT01NSVRfVFNfSUQsICJDb21taXRUcyIsIGNvbW1pdF90c19yZWRvLCBjb21taXRf dHNfZGVzYywgY29tbWl0X3RzX2kKIFBHX1JNR1IoUk1fUkVQTE9SSUdJTl9JRCwgIlJlcGxpY2F0 aW9uT3JpZ2luIiwgcmVwbG9yaWdpbl9yZWRvLCByZXBsb3JpZ2luX2Rlc2MsIHJlcGxvcmlnaW5f aWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCiBQR19STUdSKFJNX0dFTkVSSUNfSUQs ICJHZW5lcmljIiwgZ2VuZXJpY19yZWRvLCBnZW5lcmljX2Rlc2MsIGdlbmVyaWNfaWRlbnRpZnks IE5VTEwsIE5VTEwsIGdlbmVyaWNfbWFzaywgTlVMTCkKIFBHX1JNR1IoUk1fTE9HSUNBTE1TR19J RCwgIkxvZ2ljYWxNZXNzYWdlIiwgbG9naWNhbG1zZ19yZWRvLCBsb2dpY2FsbXNnX2Rlc2MsIGxv Z2ljYWxtc2dfaWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxtc2dfZGVjb2RlKQor UEdfUk1HUihSTV9MT0dJQ0FMRERMTVNHX0lELCAiTG9naWNhbERETE1lc3NhZ2UiLCBsb2dpY2Fs ZGRsbXNnX3JlZG8sIGxvZ2ljYWxkZGxtc2dfZGVzYywgbG9naWNhbGRkbG1zZ19pZGVudGlmeSwg TlVMTCwgTlVMTCwgTlVMTCwgbG9naWNhbGRkbG1zZ19kZWNvZGUpCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdAppbmRleCAwYmZhZWI5Li4yZmIzNjU0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAg LTExODI2LDQgKzExODI2LDEzIEBACiB7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdleHBhbmQg anNvbiBmb3JtYXQgRERMIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQnLAogICBwcm9uYW1lID0+ICdk ZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAogICBwcm9h cmd0eXBlcyA9PiAndGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQn IH0sCit7IG9pZCA9PiAnNDY0NCcsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBk ZXBhcnNlJywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9l bmQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycs IHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQnIH0sCit7IG9p ZCA9PiAnNDY0NScsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHN0 YXJ0JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFy dCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywg cHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0JyB9LAoreyBv aWQgPT4gJzQ2NDYnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSB0 YWJsZSByZXdyaXRlJywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9y ZXdyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZScgfSwKIF0K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAppbmRleCBlY2Y1YTI4Li5kYWZkNDgzIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKKysrIGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCkBAIC01NCw2ICs1NCw5IEBAIENBVEFM T0cocGdfcHVibGljYXRpb24sNjEwNCxQdWJsaWNhdGlvblJlbGF0aW9uSWQpCiAKIAkvKiB0cnVl IGlmIHBhcnRpdGlvbiBjaGFuZ2VzIGFyZSBwdWJsaXNoZWQgdXNpbmcgcm9vdCBzY2hlbWEgKi8K IAlib29sCQlwdWJ2aWFyb290OworCisJLyogdHJ1ZSBpZiB0YWJsZSBjcmVhdGlvbnMgYXJlIHB1 Ymxpc2hlZCAqLworCWJvb2wJCXB1YmRkbDsKIH0gRm9ybURhdGFfcGdfcHVibGljYXRpb247CiAK IC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTcyLDYgKzc1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUHVi bGljYXRpb25BY3Rpb25zCiAJYm9vbAkJcHVidXBkYXRlOwogCWJvb2wJCXB1YmRlbGV0ZTsKIAli b29sCQlwdWJ0cnVuY2F0ZTsKKwlib29sCQlwdWJkZGw7CiB9IFB1YmxpY2F0aW9uQWN0aW9uczsK IAogdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25EZXNjCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90 cmlnZ2VyLmgKaW5kZXggMTAwOTFjMy4uZmQyZWU3ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuaApAQCAtNzEsNyArNzEsOCBAQCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xs ZWN0U2ltcGxlQ29tbWFuZChPYmplY3RBZGRyZXNzIGFkZHJlc3MsCiBleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2 ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQgb2JqZWN0SWQpOwogZXh0ZXJuIHZvaWQgRXZl bnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLAotCQkJCQkJCQkJ CQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKKwkJCQkJCQkJCQkJCU9iamVjdEFkZHJlc3MgYWRk cmVzcywKKwkJCQkJCQkJCQkJCWJvb2wgcmV3cml0ZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdn ZXJBbHRlclRhYmxlRW5kKHZvaWQpOwogCiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0 R3JhbnQoSW50ZXJuYWxHcmFudCAqaXN0bXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vZGRsbWVzc2FnZS5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2Fn ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZGNhODYKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKQEAgLTAsMCAr MSw2MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBkZGxtZXNzYWdlLmgKKyAqCSAgIEV4cG9y dHMgZnJvbSByZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIENvcHlyaWdo dCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBz cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaWZuZGVmIFBHX0xPR0lDQUxfRERMX01FU1NBR0VfSAorI2RlZmluZSBQR19MT0dJQ0FM X0RETF9NRVNTQUdFX0gKKworI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCisjaW5jbHVkZSAiYWNj ZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dyZWFkZXIuaCIKKyNpbmNsdWRl ICJub2Rlcy9ub2Rlcy5oIgorCisKKy8qCisgKiBTdXBwb3J0IGZvciBrZWVwaW5nIHRyYWNrIG9m IGRlcGFyc2VkIGNvbW1hbmRzLgorICovCit0eXBlZGVmIGVudW0gRGVwYXJzZWRDb21tYW5kVHlw ZQoreworCURDVF9TaW1wbGVDbWQsCisJRENUX1RhYmxlRHJvcFN0YXJ0LAorCURDVF9UYWJsZURy b3BFbmQsCisJRENUX1RhYmxlQWx0ZXIsCisJRENUX09iamVjdENyZWF0ZSwKKwlEQ1RfT2JqZWN0 RHJvcAorfSBEZXBhcnNlZENvbW1hbmRUeXBlOworCisvKgorICogR2VuZXJpYyBsb2dpY2FsIGRl Y29kaW5nIERETCBtZXNzYWdlIHdhbCByZWNvcmQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHhsX2xv Z2ljYWxfZGRsX21lc3NhZ2UKK3sKKwlPaWQJCQkJCQlkYklkOwkJCS8qIGRhdGFiYXNlIE9pZCBl bWl0dGVkIGZyb20gKi8KKwlTaXplCQkJCQlwcmVmaXhfc2l6ZTsJLyogbGVuZ3RoIG9mIHByZWZp eCAqLworCU9pZAkJCQkJCXJlbGlkOwkJCS8qIGlkIG9mIHRoZSB0YWJsZSAqLworCURlcGFyc2Vk Q29tbWFuZFR5cGUJCWNtZHR5cGU7CQkvKiB0eXBlIG9mIHNxbCBjb21tYW5kICovCisJU2l6ZQkJ CQkJbWVzc2FnZV9zaXplOwkgIC8qIHNpemUgb2YgdGhlIG1lc3NhZ2UgKi8KKworCS8qCisJICog cGF5bG9hZCwgaW5jbHVkaW5nIG51bGwtdGVybWluYXRlZCBwcmVmaXggb2YgbGVuZ3RoIHByZWZp eF9zaXplCisJICovCisJY2hhcgkJbWVzc2FnZVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSB4 bF9sb2dpY2FsX2RkbF9tZXNzYWdlOworCisjZGVmaW5lIFNpemVPZkxvZ2ljYWxERExNZXNzYWdl CShvZmZzZXRvZih4bF9sb2dpY2FsX2RkbF9tZXNzYWdlLCBtZXNzYWdlKSkKKworZXh0ZXJuIFhM b2dSZWNQdHIgTG9nTG9naWNhbERETE1lc3NhZ2UoY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVs aWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCSAgIGNvbnN0IGNoYXIg KmRkbF9tZXNzYWdlLCBzaXplX3Qgc2l6ZSk7CisKKy8qIFJNR1IgQVBJKi8KKyNkZWZpbmUgWExP R19MT0dJQ0FMX0RETF9NRVNTQUdFCTB4MDAKK3ZvaWQJCWxvZ2ljYWxkZGxtc2dfcmVkbyhYTG9n UmVhZGVyU3RhdGUgKnJlY29yZCk7Cit2b2lkCQlsb2dpY2FsZGRsbXNnX2Rlc2MoU3RyaW5nSW5m byBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK2NvbnN0IGNoYXIgKmxvZ2ljYWxkZGxt c2dfaWRlbnRpZnkodWludDggaW5mbyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vZGVjb2RlLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUu aAppbmRleCA3NDFiZjY1Li40MjdhN2I5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9kZWNvZGUuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaApAQCAt MjcsNiArMjcsNyBAQCBleHRlcm4gdm9pZCBoZWFwMl9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgeGFjdF9kZWNv ZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwog ZXh0ZXJuIHZvaWQgc3RhbmRieV9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBY TG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgbG9naWNhbG1zZ19kZWNvZGUoTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOworZXh0ZXJu IHZvaWQgbG9naWNhbGRkbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBY TG9nUmVjb3JkQnVmZmVyICpidWYpOwogCiBleHRlcm4gdm9pZCBMb2dpY2FsRGVjb2RpbmdQcm9j ZXNzUmVjb3JkKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCQkgWExvZ1Jl YWRlclN0YXRlICpyZWNvcmQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHByb3RvLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaApp bmRleCA3ZWFhNGM5Li41ZDYxNzQ4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9sb2dpY2FscHJvdG8uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJv dG8uaApAQCAtNjEsNiArNjEsNyBAQCB0eXBlZGVmIGVudW0gTG9naWNhbFJlcE1zZ1R5cGUKIAlM T0dJQ0FMX1JFUF9NU0dfUkVMQVRJT04gPSAnUicsCiAJTE9HSUNBTF9SRVBfTVNHX1RZUEUgPSAn WScsCiAJTE9HSUNBTF9SRVBfTVNHX01FU1NBR0UgPSAnTScsCisJTE9HSUNBTF9SRVBfTVNHX0RE TE1FU1NBR0UgPSAnTCcsCiAJTE9HSUNBTF9SRVBfTVNHX0JFR0lOX1BSRVBBUkUgPSAnYicsCiAJ TE9HSUNBTF9SRVBfTVNHX1BSRVBBUkUgPSAnUCcsCiAJTE9HSUNBTF9SRVBfTVNHX0NPTU1JVF9Q UkVQQVJFRCA9ICdLJywKQEAgLTIyOSw3ICsyMzAsMTEgQEAgZXh0ZXJuIHZvaWQgbG9naWNhbHJl cF93cml0ZV90cnVuY2F0ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCiBleHRl cm4gTGlzdCAqbG9naWNhbHJlcF9yZWFkX3RydW5jYXRlKFN0cmluZ0luZm8gaW4sCiAJCQkJCQkJ CQkgIGJvb2wgKmNhc2NhZGUsIGJvb2wgKnJlc3RhcnRfc2Vxcyk7CiBleHRlcm4gdm9pZCBsb2dp Y2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBY TG9nUmVjUHRyIGxzbiwKLQkJCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIg KnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CisJCQkJCQkJCQkgYm9vbCB0 cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkgU2l6ZSBzeiwgY29u c3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3Nh Z2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJ CQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2Up OworZXh0ZXJuIGNoYXIgKmxvZ2ljYWxyZXBfcmVhZF9kZGxtZXNzYWdlKFN0cmluZ0luZm8gaW4s IFhMb2dSZWNQdHIgKmxzbiwgY29uc3QgY2hhciAqKnByZWZpeCwgU2l6ZSAqc3opOwogZXh0ZXJu IHZvaWQgbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQg eGlkLAogCQkJCQkJCQkgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQgKmNvbHVtbnMpOwogZXh0ZXJu IExvZ2ljYWxSZXBSZWxhdGlvbiAqbG9naWNhbHJlcF9yZWFkX3JlbChTdHJpbmdJbmZvIGluKTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaCBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaAppbmRleCBiN2QyOGQ3Li43NjNl NDNmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgK KysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCkBAIC05MSw2ICs5 MSwxOCBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlTWVzc2FnZUNCKSAoc3RydWN0IExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdl KTsKIAogLyoKKyAqIENhbGxlZCBmb3IgdGhlIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2Vz LgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCKSAoc3RydWN0 IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJ CQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJ CQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIG1l c3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICptZXNzYWdlKTsKKworLyoKICAq IEZpbHRlciBjaGFuZ2VzIGJ5IG9yaWdpbi4KICAqLwogdHlwZWRlZiBib29sICgqTG9naWNhbERl Y29kZUZpbHRlckJ5T3JpZ2luQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 LApAQCAtMjAyLDYgKzIxNCwxOSBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFt TWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eAogCQkJCQkJCQkJ CQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCiAvKgorICogQ2FsbGJhY2sgZm9yIHN0cmVhbWlu ZyBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlcyBmcm9tIGluLXByb2dyZXNzCisgKiB0cmFu c2FjdGlvbnMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1ERExNZXNz YWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQkJCQkJ IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJCSBPaWQg cmVsaWQsCisJCQkJCQkJCQkJCQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJ CQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3Nh Z2UpOworCisvKgogICogQ2FsbGJhY2sgZm9yIHN0cmVhbWluZyB0cnVuY2F0ZXMgZnJvbSBpbi1w cm9ncmVzcyB0cmFuc2FjdGlvbnMuCiAgKi8KIHR5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVT dHJlYW1UcnVuY2F0ZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKQEAg LTIyMSw2ICsyNDYsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQbHVnaW5DYWxsYmFja3MKIAlM b2dpY2FsRGVjb2RlVHJ1bmNhdGVDQiB0cnVuY2F0ZV9jYjsKIAlMb2dpY2FsRGVjb2RlQ29tbWl0 Q0IgY29tbWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVNZXNzYWdlQ0IgbWVzc2FnZV9jYjsKKwlMb2dp Y2FsRGVjb2RlRERMTWVzc2FnZUNCIGRkbG1lc3NhZ2VfY2I7CiAJTG9naWNhbERlY29kZUZpbHRl ckJ5T3JpZ2luQ0IgZmlsdGVyX2J5X29yaWdpbl9jYjsKIAlMb2dpY2FsRGVjb2RlU2h1dGRvd25D QiBzaHV0ZG93bl9jYjsKIApAQCAtMjM5LDYgKzI2NSw3IEBAIHR5cGVkZWYgc3RydWN0IE91dHB1 dFBsdWdpbkNhbGxiYWNrcwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1Db21taXRDQiBzdHJlYW1fY29t bWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1DaGFuZ2VDQiBzdHJlYW1fY2hhbmdlX2NiOwog CUxvZ2ljYWxEZWNvZGVTdHJlYW1NZXNzYWdlQ0Igc3RyZWFtX21lc3NhZ2VfY2I7CisJTG9naWNh bERlY29kZVN0cmVhbURETE1lc3NhZ2VDQiBzdHJlYW1fZGRsbWVzc2FnZV9jYjsKIAlMb2dpY2Fs RGVjb2RlU3RyZWFtVHJ1bmNhdGVDQiBzdHJlYW1fdHJ1bmNhdGVfY2I7CiB9IE91dHB1dFBsdWdp bkNhbGxiYWNrczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRw dXQuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKaW5kZXggMDIwMjc1NS4u ODNlMGIxZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAor KysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCkBAIC0yNSw2ICsyNSw3IEBA IHR5cGVkZWYgc3RydWN0IFBHT3V0cHV0RGF0YQogCXVpbnQzMgkJcHJvdG9jb2xfdmVyc2lvbjsK IAlMaXN0CSAgICpwdWJsaWNhdGlvbl9uYW1lczsKIAlMaXN0CSAgICpwdWJsaWNhdGlvbnM7CisJ TGlzdAkgICAqZGVsZXRlZF9yZWxpZHM7CiAJYm9vbAkJYmluYXJ5OwogCWJvb2wJCXN0cmVhbWlu ZzsKIAlib29sCQltZXNzYWdlczsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3Jlb3JkZXJidWZmZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIu aAppbmRleCAwMmI1OWExLi4wYjFhOTE2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9yZW9yZGVyYnVmZmVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRl cmJ1ZmZlci5oCkBAIC0xMSw2ICsxMSw4IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRh aWxzLmgiCiAjaW5jbHVkZSAibGliL2lsaXN0LmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIK KyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9z aW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVs Y2FjaGUuaCIKQEAgLTU2LDYgKzU4LDcgQEAgdHlwZWRlZiBlbnVtIFJlb3JkZXJCdWZmZXJDaGFu Z2VUeXBlCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOU0VSVCwKIAlSRU9SREVSX0JVRkZFUl9D SEFOR0VfVVBEQVRFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERUxFVEUsCisJUkVPUkRFUl9C VUZGRVJfQ0hBTkdFX0RETE1FU1NBR0UsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX01FU1NBR0Us CiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTiwKIAlSRU9SREVSX0JVRkZFUl9D SEFOR0VfSU5URVJOQUxfU05BUFNIT1QsCkBAIC0xMzAsNiArMTMzLDE2IEBAIHR5cGVkZWYgc3Ry dWN0IFJlb3JkZXJCdWZmZXJDaGFuZ2UKIAkJCWNoYXIJICAgKm1lc3NhZ2U7CiAJCX0JCQltc2c7 CiAKKwkJLyogRERMIE1lc3NhZ2UuICovCisJCXN0cnVjdAorCQl7CisJCQljaGFyCSAgICpwcmVm aXg7CisJCQlTaXplCQltZXNzYWdlX3NpemU7CisJCQljaGFyCSAgICptZXNzYWdlOworCQkJT2lk CQkJcmVsaWQ7CisJCQlEZXBhcnNlZENvbW1hbmRUeXBlCWNtZHR5cGU7CisJCX0JCQlkZGxtc2c7 CisKIAkJLyogTmV3IHNuYXBzaG90LCBzZXQgd2hlbiBhY3Rpb24gPT0gKl9JTlRFUk5BTF9TTkFQ U0hPVCAqLwogCQlTbmFwc2hvdAlzbmFwc2hvdDsKIApAQCAtNDM1LDYgKzQ0OCwxNiBAQCB0eXBl ZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyTWVzc2FnZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJ CQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAogCQkJCQkJCQkJCWNvbnN0IGNo YXIgKm1lc3NhZ2UpOwogCisvKiBEREwgbWVzc2FnZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KK3R5 cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpy YiwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExv Z1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJ CQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUg Y21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIHN6LAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIg Km1lc3NhZ2UpOworCiAvKiBiZWdpbiBwcmVwYXJlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlw ZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlckJlZ2luUHJlcGFyZUNCKSAoUmVvcmRlckJ1ZmZlciAq cmIsCiAJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4pOwpAQCAtNTAxLDYgKzUyNCwx NyBAQCB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCKSAoCiAJCQkJ CQkJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAogCQkJCQkJCQkJCQkgIGNvbnN0 IGNoYXIgKm1lc3NhZ2UpOwogCisvKiBzdHJlYW0gRERMIG1lc3NhZ2UgY2FsbGJhY2sgc2lnbmF0 dXJlICovCit0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNCKSAo CisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlciAqcmIsCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJ CQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJ CQkJCQkJCQkJCSBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6 ZSBzeiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyogc3RyZWFtIHRy dW5jYXRlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZl clN0cmVhbVRydW5jYXRlQ0IpICgKIAkJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlciAqcmIsCkBA IC01NTIsNiArNTg2LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyQXBw bHlUcnVuY2F0ZUNCIGFwcGx5X3RydW5jYXRlOwogCVJlb3JkZXJCdWZmZXJDb21taXRDQiBjb21t aXQ7CiAJUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQiBtZXNzYWdlOworCVJlb3JkZXJCdWZmZXJERExN ZXNzYWdlQ0IgZGRsbWVzc2FnZTsKIAogCS8qCiAJICogQ2FsbGJhY2tzIHRvIGJlIGNhbGxlZCB3 aGVuIHN0cmVhbWluZyBhIHRyYW5zYWN0aW9uIGF0IHByZXBhcmUgdGltZS4KQEAgLTU3MSw2ICs2 MDYsNyBAQCBzdHJ1Y3QgUmVvcmRlckJ1ZmZlcgogCVJlb3JkZXJCdWZmZXJTdHJlYW1Db21taXRD QiBzdHJlYW1fY29tbWl0OwogCVJlb3JkZXJCdWZmZXJTdHJlYW1DaGFuZ2VDQiBzdHJlYW1fY2hh bmdlOwogCVJlb3JkZXJCdWZmZXJTdHJlYW1NZXNzYWdlQ0Igc3RyZWFtX21lc3NhZ2U7CisJUmVv cmRlckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VDQiBzdHJlYW1fZGRsbWVzc2FnZTsKIAlSZW9yZGVy QnVmZmVyU3RyZWFtVHJ1bmNhdGVDQiBzdHJlYW1fdHJ1bmNhdGU7CiAKIAkvKgpAQCAtNjUwLDYg KzY4Niw5IEBAIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZU1lc3NhZ2UoUmVvcmRlckJ1 ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkJICBTbmFwc2hvdCBzbmFwLCBY TG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSAgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFy ICpwcmVmaXgsCiAJCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNz YWdlKTsKK2V4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1 ZmZlciAqLCBUcmFuc2FjdGlvbklkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQkJCQkgIGNvbnN0 IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJICBjb25zdCBjaGFy ICptZXNzYWdlLCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSk7CiBleHRl cm4gdm9pZCBSZW9yZGVyQnVmZmVyQ29tbWl0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlv bklkIHhpZCwKIAkJCQkJCQkJWExvZ1JlY1B0ciBjb21taXRfbHNuLCBYTG9nUmVjUHRyIGVuZF9s c24sCiAJCQkJCQkJCVRpbWVzdGFtcFR6IGNvbW1pdF90aW1lLCBSZXBPcmlnaW5JZCBvcmlnaW5f aWQsIFhMb2dSZWNQdHIgb3JpZ2luX2xzbik7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3BzcWwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dApp bmRleCBhN2Y1NzAwLi5iZmM3M2MyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3BzcWwub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKQEAg LTU5NzAsOSArNTk3MCw5IEBAIExpc3Qgb2Ygc2NoZW1hcwogKDAgcm93cykKIAogXGRScCAibm8u c3VjaC5wdWJsaWNhdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Yg cHVibGljYXRpb25zCi0gTmFtZSB8IE93bmVyIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tKy0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRp b25zCisgTmFtZSB8IE93bmVyIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLSstLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQogKDAgcm93cykKIAogXGRScyAibm8uc3VjaC5zdWJzY3JpcHRpb24iCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CmluZGV4IGU2ZTA4MmQuLjZkMWI3 NDMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0 CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CkBAIC0zMCwy MCArMzAsMjAgQEAgRVJST1I6ICBjb25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0aW9ucwogTElO RSAxOiAuLi51Yl94eHggV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSAndHJ1ZScs IHB1Ymxpc2hfdmkuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeCiBcZFJwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAgTmFtZSAgICAg ICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwaWJfaW5zX3Ry dW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZhdWx0ICAgIHwg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgICAgTmFtZSAg ICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAg IHwgZgorIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCBmICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAg ICAgICB8IGYKICgyIHJvd3MpCiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVmYXVsdCBT RVQgKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZScpOwogXGRScAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25z Ci0gICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgotIHRl c3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRp b25zCisgICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBm ICAgICAgICAgfCBmICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMiByb3dzKQogCiAtLS0gYWRkaW5nIHRhYmxl cwpAQCAtODcsMTAgKzg3LDEwIEBAIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiAtLSBzaG91 bGQgYmUgYWJsZSB0byBhZGQgc2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBw dWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6 CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtOTks MjAgKzk5LDIwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBzaG91bGQgYmUgYWJsZSB0byBk cm9wIHNjaGVtYSBmcm9tICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViX2ZvcnRhYmxlIERST1AgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBc ZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJs aWMudGVzdHB1Yl90YmwxIgogCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQgc2NoZW1hIHRvICdG T1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxl IFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFi bGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0 YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdCIK IApAQCAtMTM0LDEwICsxMzQsMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1Yl9ub3BrIiBp cyBub3QgcGFydCBvZiB0aGUgcHVibGljYXRpb24KIC0tIHNob3VsZCBiZSBhYmxlIHRvIHNldCB0 YWJsZSB0byBzY2hlbWEgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y c2NoZW1hIFNFVCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBcZFJwKyB0ZXN0cHViX2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJf bm9wayIKIApAQCAtMTU5LDEwICsxNTksMTAgQEAgUHVibGljYXRpb25zOgogICAgICJ0ZXN0cHVi X2ZvcmFsbHRhYmxlcyIKIAogXGRScCsgdGVzdHB1Yl9mb3JhbGx0YWJsZXMKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxsdGFibGVzCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXMKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAg ICAgIHwgZgogKDEgcm93KQogCiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMjsKQEAgLTE3NCwxOSAr MTc0LDE5IEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMyBGT1IgVEFCTEUgdGVzdHB1Yl90 YmwzOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI0IEZPUiBUQUJMRSBPTkxZIHRlc3RwdWJf dGJsMzsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViMwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjMKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMworICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBm CiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDMiCiAgICAgInB1YmxpYy50ZXN0cHVi X3RibDNhIgogCiBcZFJwKyB0ZXN0cHViNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViNAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50 ZXN0cHViX3RibDMiCiAKQEAgLTIwNywxMCArMjA3LDEwIEBAIFVQREFURSB0ZXN0cHViX3BhcnRl ZDEgU0VUIGEgPSAxOwogLS0gb25seSBwYXJlbnQgaXMgbGlzdGVkIGFzIGJlaW5nIGluIHB1Ymxp Y2F0aW9uLCBub3QgdGhlIHBhcnRpdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3Jw YXJ0ZWQgQUREIFRBQkxFIHRlc3RwdWJfcGFydGVkOwogXGRScCsgdGVzdHB1Yl9mb3JwYXJ0ZWQK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBh cnRlZAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0 ZWQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQiCiAK QEAgLTIyNSwxMCArMjI1LDEwIEBAIEFMVEVSIFRBQkxFIHRlc3RwdWJfcGFydGVkIERFVEFDSCBQ QVJUSVRJT04gdGVzdHB1Yl9wYXJ0ZWQxOwogVVBEQVRFIHRlc3RwdWJfcGFydGVkMSBTRVQgYSA9 IDE7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCBTRVQgKHB1Ymxpc2hfdmlh X3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CiBcZFJwKyB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgdAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgdCAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3BhcnRlZCIKIApAQCAtMjU3 LDEwICsyNTcsMTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRF IFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJf cmZfdGJsMiBXSEVSRSAoYyA8PiAndGVzdCcgQU5EIGQgPCA1KSBXSVRIIChwdWJsaXNoID0gJ2lu c2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWI1Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRl c3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkgQU5EIChkIDwgNSkpCkBA IC0yNzMsMTAgKzI3MywxMCBAQCBUYWJsZXM6CiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1 IEFERCBUQUJMRSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPiAxMDAwIEFORCBlIDwgMjAwMCk7 CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3Jm X3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDIiIFdIRVJFICgoYyA8PiAndGVzdCc6 OnRleHQpIEFORCAoZCA8IDUpKQpAQCAtMjkyLDEwICsyOTIsMTAgQEAgUHVibGljYXRpb25zOgog CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBEUk9QIFRBQkxFIHRlc3RwdWJfcmZfdGJsMjsK IFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBm ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZf dGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKChlID4gMTAwMCkgQU5E IChlIDwgMjAwMCkpCkBAIC0zMDMsMTAgKzMwMywxMCBAQCBUYWJsZXM6CiAtLSByZW1vdmUgdGVz dHB1Yl9yZl90YmwxIGFuZCBhZGQgdGVzdHB1Yl9yZl90YmwzIGFnYWluIChhbm90aGVyIFdIRVJF IGV4cHJlc3Npb24pCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBTRVQgVEFCTEUgdGVzdHB1 Yl9yZl90YmwzIFdIRVJFIChlID4gMzAwIEFORCBlIDwgNTAwKTsKIFxkUnArIHRlc3RwdWI1Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAg ICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKChlID4g MzAwKSBBTkQgKGUgPCA1MDApKQogCkBAIC0zMzksMTAgKzMzOSwxMCBAQCBTRVQgY2xpZW50X21p bl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9zeW50YXgx IEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIE9OTFkgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChl IDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNz YWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4MQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwzIiBX SEVSRSAoZSA8IDk5OSkKQEAgLTM1MiwxMCArMzUyLDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3Nh Z2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3N5bnRheDIgRk9SIFRB QkxFIHRlc3RwdWJfcmZfdGJsMSwgdGVzdHB1Yl9yZl9zY2hlbWExLnRlc3RwdWJfcmZfdGJsNSBX SEVSRSAoaCA8IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9t aW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX3N5bnRheDIKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgyCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgyCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl czoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAidGVzdHB1Yl9yZl9zY2hlbWEx LnRlc3RwdWJfcmZfdGJsNSIgV0hFUkUgKGggPCA5OTkpCkBAIC02NzgsMTAgKzY3OCwxMCBAQCBD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl90YWJsZV9pbnMgV0lUSCAocHVibGlzaCA9ICdpbnNl cnQsIHRydW5jYXRlJyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogQUxURVIgUFVCTElD QVRJT04gdGVzdHB1Yl90YWJsZV9pbnMgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSk7CQktLSBv awogXGRScCsgdGVzdHB1Yl90YWJsZV9pbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX3RhYmxlX2lucwotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJsaWMudGVzdHB1Yl90Ymw1IiAoYSkKIApAQCAtODIzLDEwICs4MjMsMTAgQEAgQ1JFQVRF IFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyAoYSBpbnQsIGIgaW50LCBjIGludCwgUFJJ TUFSWSBLRVkgKGEsYykpOwogQUxURVIgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIFJF UExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzX3BrZXk7 CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2JvdGhfZmlsdGVycyBBREQgVEFCTEUgdGVzdHB1 Yl90YmxfYm90aF9maWx0ZXJzIChhLGMpIFdIRVJFIChjICE9IDEpOwogXGRScCsgdGVzdHB1Yl9i b3RoX2ZpbHRlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfYm90aF9maWx0ZXJzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1Yl9ib3RoX2ZpbHRlcnMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVz dHB1Yl90YmxfYm90aF9maWx0ZXJzIiAoYSwgYykgV0hFUkUgKGMgPD4gMSkKIApAQCAtMTAzMSwx MCArMTAzMSwxMCBAQCBFUlJPUjogIHJlbGF0aW9uICJ0ZXN0cHViX3RibDEiIGlzIGFscmVhZHkg bWVtYmVyIG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHViX2ZvcnRibAogQ1JFQVRFIFBVQkxJQ0FUSU9O IHRlc3RwdWJfZm9ydGJsIEZPUiBUQUJMRSB0ZXN0cHViX3RibDE7CiBFUlJPUjogIHB1YmxpY2F0 aW9uICJ0ZXN0cHViX2ZvcnRibCIgYWxyZWFkeSBleGlzdHMKIFxkUnArIHRlc3RwdWJfZm9ydGJs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zv cnRibAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGJs CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogICAg ICJwdWJsaWMudGVzdHB1Yl90YmwxIgpAQCAtMTA3MiwxMCArMTA3MiwxMCBAQCBQdWJsaWNhdGlv bnM6CiAgICAgInRlc3RwdWJfZm9ydGJsIgogCiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0Ci0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAg ICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJs aWMudGVzdHB1Yl90YmwxIgpAQCAtMTE1MywxMCArMTE1MywxMCBAQCBSRVZPS0UgQ1JFQVRFIE9O IERBVEFCQVNFIHJlZ3Jlc3Npb24gRlJPTSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogRFJP UCBUQUJMRSB0ZXN0cHViX3BhcnRlZDsKIERST1AgVEFCTEUgdGVzdHB1Yl90YmwxOwogXGRScCsg dGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWJfZGVmYXVsdAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIGZhaWwgLSBtdXN0 IGJlIG93bmVyIG9mIHB1YmxpY2F0aW9uCkBAIC0xMTY2LDIwICsxMTY2LDIwIEBAIEVSUk9SOiAg bXVzdCBiZSBvd25lciBvZiBwdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKIFJFU0VUIFJPTEU7 CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2RlZmF1bHQgUkVOQU1FIFRPIHRlc3RwdWJfZm9v OwogXGRScCB0ZXN0cHViX2ZvbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAgTmFtZSAgICAgfCAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gdGVzdHB1Yl9mb28gfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Yg cHVibGljYXRpb25zCisgICAgTmFtZSAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyB0ZXN0cHViX2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBm ICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gcmVuYW1lIGJhY2sgdG8ga2VlcCB0aGUgcmVzdCBz aW1wbGUKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9vIFJFTkFNRSBUTyB0ZXN0cHViX2Rl ZmF1bHQ7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2RlZmF1bHQgT1dORVIgVE8gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyMjsKIFxkUnAgdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAg ICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0 cHViX2RlZmF1bHQgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwor ICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHRlc3RwdWJfZGVmYXVsdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwg ZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIGFkZGluZyBzY2hlbWFzIGFuZCB0YWJsZXMKQEAg LTExOTUsMTkgKzExOTUsMTkgQEAgQ1JFQVRFIFRBQkxFICJDVVJSRU5UX1NDSEVNQSIuIkNVUlJF TlRfU0NIRU1BIihpZCBpbnQpOwogU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwog Q1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBGT1IgQUxMIFRBQkxFUyBJTiBT Q0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAg fCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViMl9mb3JzY2hlbWEgRk9SIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90 ZXN0MSwgcHViX3Rlc3QyLCBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAg ICAicHViX3Rlc3QyIgpAQCAtMTIyMSw0NCArMTIyMSw0NCBAQCBDUkVBVEUgUFVCTElDQVRJT04g dGVzdHB1YjZfZm9yc2NoZW1hIEZPUiBBTEwgVEFCTEVTIElOIFNDSEVNQSAiQ1VSUkVOVF9TQ0hF TUEiLAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgRk9SIFRBQkxFICJDVVJS RU5UX1NDSEVNQSIuIkNVUlJFTlRfU0NIRU1BIjsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7 CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjRfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjRfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0X2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIK IAogXGRScCsgdGVzdHB1YjVfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjVfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJv bSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIKICAgICAicHVibGljIgogCiBcZFJwKyB0 ZXN0cHViNl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViNl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjZfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWJfZm9y dGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BLkNVUlJF TlRfU0NIRU1BIgogCkBAIC0xMjkyLDEwICsxMjkyLDEwIEBAIEVSUk9SOiAgc2NoZW1hICJ0ZXN0 cHViX3ZpZXciIGRvZXMgbm90IGV4aXN0CiAtLSBkcm9wcGluZyB0aGUgc2NoZW1hIHNob3VsZCBy ZWZsZWN0IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRpb24KIERST1AgU0NIRU1BIHB1Yl90ZXN0MzsK IFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMzAzLDIwICsx MzAzLDIwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSByZW5hbWluZyB0aGUgc2NoZW1hIHNo b3VsZCByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRpb24KIEFMVEVSIFNDSEVNQSBwdWJf dGVzdDEgUkVOQU1FIHRvIHB1Yl90ZXN0MV9yZW5hbWVkOwogXGRScCsgdGVzdHB1YjJfZm9yc2No ZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJf Zm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2Zv cnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVz dDFfcmVuYW1lZCIKICAgICAicHViX3Rlc3QyIgogCiBBTFRFUiBTQ0hFTUEgcHViX3Rlc3QxX3Jl bmFtZWQgUkVOQU1FIHRvIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVt YQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAg ICJwdWJfdGVzdDIiCkBAIC0xMzI0LDEwICsxMzI0LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBhZGQgc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViMV9mb3JzY2hlbWEgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIFxkUnAr IHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1h czoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMzM2LDEwICsxMzM2LDEw IEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3Jz Y2hlbWEgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJP UjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRl c3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMzQ4LDEwICsxMzQ4LDEwIEBA IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hl bWEgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIEVSUk9SOiAgc2NoZW1hICJw dWJfdGVzdDEiIGlzIGFscmVhZHkgbWVtYmVyIG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHViMV9mb3Jz Y2hlbWEiCiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTM1 OSwxMCArMTM1OSwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIgcHVibGljYXRp b24gZHJvcCBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9Q IEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3Qx IgogCkBAIC0xMzcwLDEwICsxMzcwLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBBTEwgVEFCTEVTIElOIFNDSEVNQSBw dWJfdGVzdDI7CiBFUlJPUjogIHRhYmxlcyBmcm9tIHNjaGVtYSAicHViX3Rlc3QyIiBhcmUgbm90 IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAt MTM4MSwyOSArMTM4MSwyOSBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0 ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5v dCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKIC0tIGRyb3AgYWxsIHNjaGVtYXMK IEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIEFMTCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogKDEgcm93KQogCiAtLSBhbHRlciBwdWJsaWNhdGlvbiBzZXQgbXVsdGlwbGUgc2NoZW1h CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIEFMTCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QyOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2No ZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAg ICAgInB1Yl90ZXN0MiIKQEAgLTE0MTIsMTAgKzE0MTIsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1h czoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgQUxMIFRBQkxFUyBJ TiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3Rl bnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAg InB1Yl90ZXN0MiIKQEAgLTE0MjQsMTAgKzE0MjQsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoK IC0tIHJlbW92aW5nIHRoZSBkdXBsaWNhdGUgc2NoZW1hcwogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjFfZm9yc2NoZW1hIFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90 ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVz IGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTA2LDE4ICsxNTA2LDE4IEBA IFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViM19mb3JzY2hlbWE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVz dHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWIzX2ZvcnNjaGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rl c3QxOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE1MjcsMjAgKzE1MjcsMjAgQEAg Q1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlIEZPUiBBTEwgVEFC TEVTIElOIFNDSEVNQSBwdWJfdGVzdDEKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRh YmxlX2ZvcnNjaGVtYSBGT1IgVEFCTEUgcHViX3Rlc3QyLnRibDEsIEFMTCBUQUJMRVMgSU4gU0NI RU1BIHB1Yl90ZXN0MTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHVi X2ZvcnNjaGVtYV9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAg ICAgInB1Yl90ZXN0Mi50YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3Qx IgogCiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0Mi50YmwxIgogVGFibGVzIGZyb20gc2NoZW1h czoKLS0gCjEuOC4zLjEKCg== --000000000000b6224b05e91d0dbf Content-Type: application/octet-stream; name="v22-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v22-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8abifmx0 RnJvbSA0YzA4MjhmMGJjZTA2MmFiYTA5YTk2Y2MxMzBmYzk1ZWZjNGY3NDI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMjIgMDk6Mjg6NDQgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyMiAxLzVdIEZ1bmN0aW9ucyB0byBkZXBhcnNlIERETCBjb21tYW5kcy4KClRoaXMgcGF0Y2gg cHJvdmlkZXMgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4K bGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQg c3ByaW50Zi1saWtlCmV4cGFuc2lvbi4gVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0 byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCnRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5n IGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgoKTXVjaCBvZiB0aGUgaW5mb3JtYXRp b24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCmNhdGFsb2dz LCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRv IHJlbGlhYmx5CmNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBu b3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCmV0YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJz ZSBub2RlLgoKVGhpcyBwcm92aWRlcyBhIGJhc2UgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gb2Yg RERMIHN0YXRlbWVudHMuIEN1cnJlbnRseSwKdGhlIHBhdGNoIGhhcyBzdXBwb3J0IGZvcjoKCkNS RUFURS9BTFRFUi9EUk9QIFRBQkxFIC0tIE5vdGUgIzEsIE5vdGUgIzIKQ1JFQVRFL0FMVEVSL0RS T1AgU0VRVUVOQ0UKQ1JFQVRFL0FMVEVSL0RST1AgU0NIRU1BCkNSRUFURS9BTFRFUiBGVU5DVElP Ti9QUk9DRURVUkUKQ1JFQVRFL0FMVEVSIFRSSUdHRVIKQ1JFQVRFL0RST1AgSU5ERVgKQ1JFQVRF L0RST1AgT1BFUkFUT1IgW0NMQVNTL0ZBTUlMWV0KQ1JFQVRFL0FMVEVSL0RST1AgQ0FTVApDUkVB VEUvQUxURVIvRFJPUCBET01BSU4KQ1JFQVRFL0FMVEVSL0RST1AgVFlQRQpDUkVBVEUvQUxURVIv RFJPUCBDT05WRVJTSU9OCkNSRUFURS9BTFRFUi9EUk9QIFBPTElDWQpDUkVBVEUvQUxURVIvRFJP UCBFWFRFTlNJT04KR1JBTlQKCihOb3RlICMxKSBOb3RlIHRoYXQgc29tZSByZWNlbnRseSBpbnRy b2R1Y2VkIERETHMoZS5nLiBERExzIHJlbGF0ZWQgdG8KUEFSVElUSU9ORUQgVEFCTEUpIGFyZSB1 bnN1cHBvcnRlZC4gV2UgY2FuIGV4dGVuZCBpdCBhcyB3ZSBuZWVkIG1vcmUKZnVuY3Rpb25hbGl0 eSBmb3IgRERMIHJlcGxpY2F0aW9uLgoKKE5vdGUgIzIpIE5vdGUgdGhhdCwgZm9yIEFUVEFDSC9E RVRBQ0ggUEFSVElUSU9OLCB3ZSBoYXZlbid0IGFkZGVkIGV4dHJhIGxvZ2ljIG9uCnN1YnNjcmli ZXIgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSB0YWJsZSBvbiBwdWJsaXNoZXIgaXMgYSBQ QVJUSVRJT05FRApUQUJMRSB3aGlsZSB0aGUgdGFyZ2V0IHRhYmxlIG9uIHN1YmNyaWJlciBzaWRl IGlzIE5PUk1BTCB0YWJsZS4gV2Ugd2lsbApyZXNlYXJjaCB0aGlzIG1vcmUgYW5kIGltcHJvdmUg dGhpcyBsYXRlci4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZSAgICAgICB8ICAg IDIgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyAgfCA2ODU5ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNv bi5jICAgICB8ICA3NjMgKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAgICAg fCAgIDMzICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jIHwgICAgMyArLQog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYyAgICAgfCAgIDUyICsKIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgIHwgIDE0OSArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdCAgICAgfCAgICA2ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgg ICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggICAgICB8ICAgMjMg Kwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgfCAgICAxICsKIHNyYy9pbmNs dWRlL3V0aWxzL2J1aWx0aW5zLmggICAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS91dGlscy9y dWxldXRpbHMuaCAgICAgICB8ICAgMTMgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QgICAgfCAgICA0ICsKIDE0IGZpbGVzIGNoYW5nZWQsIDc4NDEgaW5zZXJ0aW9ucygrKSwgNzAg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9q c29uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IDQ4ZjczNDguLjE3MWRmYjIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01h a2VmaWxlCkBAIC0yOSw2ICsyOSw4IEBAIE9CSlMgPSBcCiAJY29weXRvLm8gXAogCWNyZWF0ZWFz Lm8gXAogCWRiY29tbWFuZHMubyBcCisJZGRsX2RlcGFyc2UubyBcCisJZGRsX2pzb24ubyBcCiAJ ZGVmaW5lLm8gXAogCWRpc2NhcmQubyBcCiAJZHJvcGNtZHMubyBcCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNDg0NTVlCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpAQCAt MCwwICsxLDY4NTkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9kZXBhcnNlLmMK KyAqCSAgRnVuY3Rpb25zIHRvIGNvbnZlcnQgdXRpbGl0eSBjb21tYW5kcyB0byBtYWNoaW5lLXBh cnNlYWJsZQorICoJICByZXByZXNlbnRhdGlvbgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENh bGlmb3JuaWEKKyAqCisgKiBOT1RFUworICoKKyAqIFRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlk ZSBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdoaWNoIGNhbgorICogbGF0 ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQgc3By aW50Zi1saWtlCisgKiBleHBhbnNpb24uICBUaGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVk IHRvIGFsbG93IGZvciBtYWNoaW5lLWVkaXRpbmcgb2YKKyAqIHRoZSBjb21tYW5kcywgYnkgcmVw bGFjaW5nIGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgorICoKKyAqIE11Y2ggb2Yg dGhlIGluZm9ybWF0aW9uIGluIHRoZSBvdXRwdXQgYmxvYiBhY3R1YWxseSBjb21lcyBmcm9tIHN5 c3RlbQorICogY2F0YWxvZ3MsIG5vdCBmcm9tIHRoZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0 IGlzIGltcG9zc2libGUgdG8gcmVsaWFibHkKKyAqIGNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmll ZCBjb21tYW5kIChpLmUuIG9uZSBub3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCisgKiBldGMp IGxvb2tpbmcgb25seSBhdCB0aGUgcGFyc2Ugbm9kZS4KKyAqCisgKiBJREVOVElGSUNBVElPTgor ICoJICBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2Rl cGFyc2UuaCIKKyNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFi bGUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL25h bWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0uaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX2F0dHJpYnV0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY2FzdC5oIgorI2luY2x1ZGUg ImNhdGFsb2cvcGdfY2xhc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf Y29udmVyc2lvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVwZW5kLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19leHRlbnNpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYW5ndWFnZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf bmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNsYXNzLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19vcGVyYXRvci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BmYW1pbHkuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX3BvbGljeS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJv Yy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcmFuZ2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAiY29t bWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKKyNpbmNsdWRl ICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUg ImxpYi9pbGlzdC5oIgorI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCisjaW5jbHVkZSAibm9kZXMv bWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9k ZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKKyNpbmNs dWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMu aCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgor I2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNs dWRlICJ1dGlscy9ydWxldXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorCisv KiBFc3RpbWF0ZWQgbGVuZ3RoIG9mIHRoZSBnZW5lcmF0ZWQganNvbmIgc3RyaW5nICovCisjZGVm aW5lIEpTT05CX0VTVElNQVRFRF9MRU4gMTI4CisKKy8qCisgKiBCZWZvcmUgdGhleSBhcmUgdHVy bmVkIGludG8gSlNPTkIgcmVwcmVzZW50YXRpb24sIGVhY2ggY29tbWFuZCBpcworICogcmVwcmVz ZW50ZWQgYXMgYW4gb2JqZWN0IHRyZWUsIHVzaW5nIHRoZSBzdHJ1Y3RzIGJlbG93LgorICovCit0 eXBlZGVmIGVudW0KK3sKKwlPYmpUeXBlTnVsbCwKKwlPYmpUeXBlQm9vbCwKKwlPYmpUeXBlU3Ry aW5nLAorCU9ialR5cGVBcnJheSwKKwlPYmpUeXBlSW50ZWdlciwKKwlPYmpUeXBlRmxvYXQsCisJ T2JqVHlwZU9iamVjdAorfSBPYmpUeXBlOworCit0eXBlZGVmIHN0cnVjdCBPYmpUcmVlCit7CisJ c2xpc3RfaGVhZAlwYXJhbXM7CisJaW50CQkJbnVtUGFyYW1zOworCVN0cmluZ0luZm8JZm10aW5m bzsKKwlib29sCQlwcmVzZW50OworfSBPYmpUcmVlOworCit0eXBlZGVmIHN0cnVjdCBPYmpFbGVt Cit7CisJY2hhcgkgICAqbmFtZTsKKwlPYmpUeXBlCQlvYmp0eXBlOworCisJdW5pb24KKwl7CisJ CWJvb2wJCWJvb2xlYW47CisJCWNoYXIJICAgKnN0cmluZzsKKwkJaW50NjQJCWludGVnZXI7CisJ CWZsb2F0OAkJZmx0OworCQlPYmpUcmVlCSAgICpvYmplY3Q7CisJCUxpc3QJICAgKmFycmF5Owor CX0gdmFsdWU7CisJc2xpc3Rfbm9kZQlub2RlOworfSBPYmpFbGVtOworCitib29sIHZlcmJvc2Ug PSB0cnVlOworCitzdGF0aWMgdm9pZCBhcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUs IGNoYXIgKm5hbWUsIExpc3QgKmFycmF5KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9ib29sX29iamVj dChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBib29sIHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFw cGVuZF9mbG9hdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgZmxvYXQ4IHZhbHVl KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9udWxsX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpu YW1lKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNo YXIgKm5hbWUsIE9ialRyZWUgKnZhbHVlKTsKK3N0YXRpYyBjaGFyICphcHBlbmRfb2JqZWN0X3Rv X2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCk7CitzdGF0aWMgdm9p ZCBhcHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxlbSAqZWxlbSk7Citz dGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1l LCBjaGFyICp2YWx1ZSk7CitzdGF0aWMgdm9pZCBmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlw ZV9vaWQsIGludDMyIHR5cGVtb2QsCisJCQkJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwbmFt ZSwgY2hhciAqKnR5cGVtb2RzdHIsCisJCQkJCQkJCSBib29sICp0eXBhcnJheSk7CitzdGF0aWMg TGlzdCAqRnVuY3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0cyk7CitzdGF0aWMg T2JqRWxlbSAqbmV3X29iamVjdChPYmpUeXBlIHR5cGUsIGNoYXIgKm5hbWUpOworc3RhdGljIE9i alRyZWUgKm5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPaWQgY2xhc3NJZCwgT2lkIG9iamVj dElkKTsKK3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoUm9sZVNwZWMg KnNwZWMpOworc3RhdGljIE9iakVsZW0gKm5ld19vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVl KTsKK3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpz LC4uLik7CitzdGF0aWMgT2JqRWxlbSAqbmV3X3N0cmluZ19vYmplY3QoY2hhciAqdmFsdWUpOwor c3RhdGljIEpzb25iVmFsdWUgKm9ianRyZWVfdG9fanNvbmJfcmVjKE9ialRyZWUgKnRyZWUsIEpz b25iUGFyc2VTdGF0ZSAqc3RhdGUpOworc3RhdGljIHZvaWQgcGdfZ2V0X2luZGV4ZGVmX2RldGFp bGVkKE9pZCBpbmRleHJlbGlkLAorCQkJCQkJCQkJIGNoYXIgKippbmRleF9hbSwKKwkJCQkJCQkJ CSBjaGFyICoqZGVmaW5pdGlvbiwKKwkJCQkJCQkJCSBjaGFyICoqcmVsb3B0aW9ucywKKwkJCQkJ CQkJCSBjaGFyICoqdGFibGVzcGFjZSwKKwkJCQkJCQkJCSBjaGFyICoqd2hlcmVDbGF1c2UpOwor c3RhdGljIGNoYXIgKlJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJO dW1iZXIgYXR0bm8sCisJCQkJCQkJCQkgIExpc3QgKmRwY29udGV4dCwgTGlzdCAqKmV4cHJzKTsK K3N0YXRpYyBjb25zdCBjaGFyICpzdHJpbmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUp OworCitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5EZWYoUmVsYXRpb24gcmVsYXRpb24s IExpc3QgKmRwY29udGV4dCwgYm9vbCBjb21wb3NpdGUsCisJCQkJCQkJCSAgQ29sdW1uRGVmICpj b2xkZWYsIGJvb2wgaXNfYWx0ZXIsIExpc3QgKipleHBycyk7CitzdGF0aWMgT2JqVHJlZSAqZGVw YXJzZV9Db2x1bW5JZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0 ZXJfdGFibGUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRl clRhYmxlQ21kICpzdWJjbWQpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9P cGVyYXRvcihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJl ZSAqZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZp bmUpOworCitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0sIGJv b2wgaXNfcmVzZXQpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRnVuY3Rpb25TZXQoVmFyaWFi bGVTZXRLaW5kIGtpbmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKTsKK3N0YXRpYyBPYmpUcmVl ICpkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKE9uQ29tbWl0QWN0aW9uIG9wdGlvbik7CitzdGF0aWMg T2JqVHJlZSAqZGVwYXJzZV9SZWxTZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCk7CisK K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQ2FjaGUoT2JqVHJlZSAqcGFyZW50 LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlu bGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DeWNsZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf c2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKmRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1 ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAq ZGVwYXJzZV9TZXFfTWludmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNl cWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNl X1NlcV9NYXh2YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwg Ym9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgT2JqRWxlbSAqZGVwYXJzZV9TZXFfT3duZWRCeShP YmpUcmVlICpwYXJlbnQsIE9pZCBzZXF1ZW5jZUlkLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfUmVzdGFydChPYmpUcmVlICpwYXJlbnQsIEZv cm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVw YXJzZV9TZXFfU3RhcnR3aXRoKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFk YXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9U eXBlX1N0b3JhZ2UoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0 aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9SZWNlaXZlKE9ialRyZWUgKnBhcmVudCwg Rm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5 cGVfU2VuZChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBp bmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1R5cG1vZF9JbihPYmpUcmVlICpwYXJlbnQsIEZv cm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBl X1R5cG1vZF9PdXQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0 aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9BbmFseXplKE9ialRyZWUgKnBhcmVudCwg Rm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5 cGVfU3Vic2NyaXB0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pOworCitz dGF0aWMgTGlzdCAqZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKTsKK3N0YXRpYyBM aXN0ICpkZXBhcnNlX1RhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxl RWxlbWVudHMsIExpc3QgKmRwY29udGV4dCwKKwkJCQkJCQkJICAgYm9vbCB0eXBlZCwgYm9vbCBj b21wb3NpdGUpOworCisvKgorICogQWRkIGNvbW1vbiBjbGF1c2VzIHRvIENyZWF0ZVBvbGljeSBv ciBBbHRlclBvbGljeSBkZXBhcnNlIG9iamVjdHMKKyAqLworc3RhdGljIHZvaWQKK2FkZF9wb2xp Y3lfY2xhdXNlcyhPYmpUcmVlICpwb2xpY3lTdG10LCBPaWQgcG9saWN5T2lkLCBMaXN0ICpyb2xl cywKKwkJCQkgICBib29sIGRvX3F1YWwsIGJvb2wgZG9fd2l0aF9jaGVjaykKK3sKKwlSZWxhdGlv bglwb2xSZWwgPSB0YWJsZV9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisJSGVhcFR1cGxlCXBvbFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocG9sUmVsLCBB bnVtX3BnX3BvbGljeV9vaWQsIHBvbGljeU9pZCk7CisJRm9ybV9wZ19wb2xpY3kgcG9sRm9ybTsK KworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwb2xUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgcG9saWN5ICV1IiwgcG9saWN5T2lkKTsKKworCXBvbEZvcm0gPSAo Rm9ybV9wZ19wb2xpY3kpIEdFVFNUUlVDVChwb2xUdXApOworCisJLyogYWRkIHRoZSAiT04gdGFi bGUiIGNsYXVzZSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBvbGljeVN0bXQsICJPTiAle3Rh YmxlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJIHBvbEZvcm0tPnBvbHJlbGlkKSk7CisKKwkvKgorCSAqIEFk ZCB0aGUgIlRPIHJvbGUiIGNsYXVzZSwgaWYgYW55LiAgSW4gdGhlIENSRUFURSBjYXNlLCBpdCBh bHdheXMKKwkgKiBjb250YWlucyBhdCBsZWFzdCBQVUJMSUMsIGJ1dCBpbiB0aGUgQUxURVIgY2Fz ZSBpdCBtaWdodCBiZSBlbXB0eS4KKwkgKi8KKwlpZiAocm9sZXMpCisJeworCQlMaXN0ICAgKmxp c3QgPSBOSUw7CisJCUxpc3RDZWxsICpjZWxsOworCisJCWZvcmVhY2ggKGNlbGwsIHJvbGVzKQor CQl7CisJCQlSb2xlU3BlYyAgICpzcGVjID0gKFJvbGVTcGVjICopIGxmaXJzdChjZWxsKTsKKwor CQkJbGlzdCA9IGxhcHBlbmQobGlzdCwKKwkJCQkJCSAgIG5ld19vYmplY3Rfb2JqZWN0KG5ld19v Ymp0cmVlX2Zvcl9yb2xlc3BlYyhzcGVjKSkpOworCQl9CisJCWFwcGVuZF9hcnJheV9vYmplY3Qo cG9saWN5U3RtdCwiVE8gJXtyb2xlOiwgfVIiLCBsaXN0KTsKKwl9CisJZWxzZQorCXsKKwkJYXBw ZW5kX2Jvb2xfb2JqZWN0KHBvbGljeVN0bXQsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKworCS8q IGFkZCB0aGUgVVNJTkcgY2xhdXNlLCBpZiBhbnkgKi8KKwlpZiAoZG9fcXVhbCkKKwl7CisJCURh dHVtCWRlcGFyc2VkOworCQlEYXR1bQlzdG9yZWRleHByOworCQlib29sCWlzbnVsbDsKKworCQlz dG9yZWRleHByID0gaGVhcF9nZXRhdHRyKHBvbFR1cCwgQW51bV9wZ19wb2xpY3lfcG9scXVhbCwK KwkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBvbFJlbCksICZpc251bGwpOworCQlpZiAoaXNu dWxsKQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTlVMTCBwb2xxdWFsIGV4cHJlc3Npb24gaW4g cG9saWN5ICV1IiwgcG9saWN5T2lkKTsKKwkJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwy KHBnX2dldF9leHByLCBzdG9yZWRleHByLCBwb2xGb3JtLT5wb2xyZWxpZCk7CisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHBvbGljeVN0bXQsICJVU0lORyAoJXtleHByZXNzaW9ufXMpIiwKKwkJCQkJ CQkgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCX0KKwllbHNlCisJCWFwcGVuZF9i b29sX29iamVjdChwb2xpY3lTdG10LCAicHJlc2VudCIsIGZhbHNlKTsKKworCS8qIGFkZCB0aGUg V0lUSCBDSEVDSyBjbGF1c2UsIGlmIGFueSAqLworCWlmIChkb193aXRoX2NoZWNrKQorCXsKKwkJ RGF0dW0JZGVwYXJzZWQ7CisJCURhdHVtCXN0b3JlZGV4cHI7CisJCWJvb2wJaXNudWxsOworCisJ CXN0b3JlZGV4cHIgPSBoZWFwX2dldGF0dHIocG9sVHVwLCBBbnVtX3BnX3BvbGljeV9wb2x3aXRo Y2hlY2ssCisJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwb2xSZWwpLCAmaXNudWxsKTsKKwkJ aWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgcG9sd2l0aGNoZWNrIGV4 cHJlc3Npb24gaW4gcG9saWN5ICV1IiwgcG9saWN5T2lkKTsKKwkJZGVwYXJzZWQgPSBEaXJlY3RG dW5jdGlvbkNhbGwyKHBnX2dldF9leHByLCBzdG9yZWRleHByLCBwb2xGb3JtLT5wb2xyZWxpZCk7 CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHBvbGljeVN0bXQsICJXSVRIIENIRUNLICgle2V4cHJl c3Npb259cykiLAorCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJfQor CWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHBvbGljeVN0bXQsICJwcmVzZW50IiwgZmFsc2Up OworCisJcmVsYXRpb25fY2xvc2UocG9sUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisvKiBB cHBlbmQgYW4gYXJyYXkgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVu ZF9hcnJheV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgTGlzdCAqYXJyYXkp Cit7CisJT2JqRWxlbQkqcGFyYW07CisJY2hhciAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3Vi X2ZtdCk7CisKKwlpZiAobGlzdF9sZW5ndGgoYXJyYXkpID09IDApCisJCXJldHVybjsKKworCWlm ICghdmVyYm9zZSkKKwl7CisJCUxpc3RDZWxsICpsYzsKKworCQkvKiBFeHRyYWN0IHRoZSBPYmpF bGVtcyB3aG9zZSBwcmVzZW50IGZsYWcgaXMgdHJ1ZSAqLworCQlmb3JlYWNoKGxjLCBhcnJheSkK KwkJeworCQkJT2JqRWxlbSAqZWxlbSA9IChPYmpFbGVtICopIGxmaXJzdChsYyk7CisKKwkJCUFz c2VydChlbGVtLT5vYmp0eXBlID09IE9ialR5cGVPYmplY3QgfHwKKwkJCQkgICBlbGVtLT5vYmp0 eXBlID09IE9ialR5cGVTdHJpbmcpOworCisJCQlpZiAoIWVsZW0tPnZhbHVlLm9iamVjdC0+cHJl c2VudCAmJgorCQkJCWVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCkKKwkJCQlhcnJheSA9 IGZvcmVhY2hfZGVsZXRlX2N1cnJlbnQoYXJyYXksIGxjKTsKKwkJfQorCisJfQorCisJb2JqZWN0 X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisK KwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZUFycmF5LCBvYmplY3RfbmFtZSk7CisJcGFyYW0t PnZhbHVlLmFycmF5ID0gYXJyYXk7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFt KTsKK30KKworLyogQXBwZW5kIGEgYm9vbGVhbiBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0 aWMgdm9pZAorYXBwZW5kX2Jvb2xfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQs IGJvb2wgdmFsdWUpCit7CisJT2JqRWxlbSAgKnBhcmFtOworCWNoYXIJICpvYmplY3RfbmFtZSA9 IHN1Yl9mbXQ7CisJYm9vbAkgIGlzX3ByZXNlbnRfZmxhZyA9IGZhbHNlOworCisJQXNzZXJ0KHN1 Yl9mbXQpOworCisJLyogQ2hlY2sgaWYgdGhlIHByZXNlbnQgaXMgcGFydCBvZiB0aGUgZm9ybWF0 IHN0cmluZyBhbmQgc3RvcmUgdGhlIGJvb2xlYW4gdmFsdWUqLworCWlmIChzdHJjbXAoc3ViX2Zt dCwgInByZXNlbnQiKSA9PSAwKQorCXsKKwkJaXNfcHJlc2VudF9mbGFnID0gdHJ1ZTsKKwkJdHJl ZS0+cHJlc2VudCA9IHZhbHVlOworCX0KKworCWlmICghdmVyYm9zZSAmJiAhdHJlZS0+cHJlc2Vu dCkKKwkJcmV0dXJuOworCisJaWYgKCFpc19wcmVzZW50X2ZsYWcpCisJCW9iamVjdF9uYW1lID0g YXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0g PSBuZXdfb2JqZWN0KE9ialR5cGVCb29sLCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmJv b2xlYW4gPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQor CisvKgorICogQXBwZW5kIGEgZmxvYXQ4IHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRp YyB2b2lkCithcHBlbmRfZmxvYXRfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQs IGZsb2F0OCB2YWx1ZSkKK3sKKwlPYmpFbGVtCSAgICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3Rf bmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVj dF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0 KE9ialR5cGVGbG9hdCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5mbHQgPSB2YWx1ZTsK KwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICogQXBwZW5k IHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpUcmVlLgorICovCitzdGF0aWMgdm9p ZAorYXBwZW5kX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkKK3sK KwlpbnQJCQkJbGVuOworCWNoYXIJCSAgICpmbXQ7CisKKwlpZiAodHJlZS0+Zm10aW5mbyA9PSBO VUxMKQorCQlyZXR1cm47CisKKwlmbXQgPSB0cmVlLT5mbXRpbmZvLT5kYXRhOworCWxlbiA9IHRy ZWUtPmZtdGluZm8tPmxlbjsKKworCS8qIEFkZCBhIHNlcGFyYXRvciBpZiBuZWNlc3NhcnkgKi8K KwlpZiAobGVuID4gMCAmJiBmbXRbbGVuIC0gMV0gIT0gJyAnKQorCQlhcHBlbmRTdHJpbmdJbmZv U3BhY2VzKHRyZWUtPmZtdGluZm8sIDEpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyh0cmVl LT5mbXRpbmZvLCBzdWJfZm10KTsKK30KKworLyogQXBwZW5kIGEgTlVMTCBvYmplY3QgdG8gYSB0 cmVlICovCitzdGF0aWMgdm9pZAorYXBwZW5kX251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNo YXIgKnN1Yl9mbXQpCit7CisJY2hhciAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7 CisKKwlpZiAoIXZlcmJvc2UpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29i amVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJYXBwZW5kX3ByZW1hZGVf b2JqZWN0KHRyZWUsIG5ld19vYmplY3QoT2JqVHlwZU51bGwsIG9iamVjdF9uYW1lKSk7Cit9CisK Ky8qIEFwcGVuZCBhbiBvYmplY3QgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQK K2FwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIE9ialRy ZWUgKnZhbHVlKQoreworCU9iakVsZW0JKnBhcmFtOworCWNoYXIgICAqb2JqZWN0X25hbWU7CisK KwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UgJiYgIXZhbHVlLT5wcmVzZW50KQor CQlyZXR1cm47CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmlu Zyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlT2JqZWN0LCBv YmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZhbHVlOworCWFwcGVuZF9wcmVt YWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG9iamVjdCBu YW1lIHdoaWNoIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBpbnB1dCAiKiV7bmFtZVs6Ll19KiIKKyAq IHN0eWxlIHN0cmluZy4gQW5kIGFwcGVuZCB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUg T2JqVHJlZS4KKyAqLworc3RhdGljIGNoYXIgKgorYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3Ry aW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJU3RyaW5nSW5mb0RhdGEJb2Jq ZWN0X25hbWU7CisJY29uc3QgY2hhcgkgICAqZW5kX3B0cjsKKwljb25zdCBjaGFyCSAgICpjcDsK Kwlib29sCQkJc3RhcnRfY29weSA9IGZhbHNlOworCisJaWYgKHN1Yl9mbXQgPT0gTlVMTCB8fCB0 cmVlLT5mbXRpbmZvID09IE5VTEwpCisJCXJldHVybiBzdWJfZm10OworCisJaW5pdFN0cmluZ0lu Zm8oJm9iamVjdF9uYW1lKTsKKwllbmRfcHRyID0gc3ViX2ZtdCArIHN0cmxlbihzdWJfZm10KTsK KworCWZvciAoY3AgPSBzdWJfZm10OyBjcCA8IGVuZF9wdHI7IGNwKyspCisJeworCQlpZiAoKmNw ID09ICd7JykKKwkJeworCQkJc3RhcnRfY29weSA9IHRydWU7CisJCQljb250aW51ZTsKKwkJfQor CisJCWlmICghc3RhcnRfY29weSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgqY3AgPT0gJzonIHx8 ICpjcCA9PSAnfScpCisJCQlicmVhazsKKworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKCZv YmplY3RfbmFtZSwgKmNwKTsKKwl9CisKKwlpZiAob2JqZWN0X25hbWUubGVuID09IDApCisJCWVs b2coRVJST1IsICJvYmplY3QgbmFtZSBub3QgZm91bmQiKTsKKworCWFwcGVuZF9mb3JtYXRfc3Ry aW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcmV0dXJuIG9iamVjdF9uYW1lLmRhdGE7Cit9CisKKy8q IEFwcGVuZCBhIHByZWFsbG9jYXRlZCBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgaW5s aW5lIHZvaWQKK2FwcGVuZF9wcmVtYWRlX29iamVjdChPYmpUcmVlICp0cmVlLCBPYmpFbGVtICpl bGVtKQoreworCXNsaXN0X3B1c2hfaGVhZCgmdHJlZS0+cGFyYW1zLCAmZWxlbS0+bm9kZSk7CisJ dHJlZS0+bnVtUGFyYW1zKys7Cit9CisKKy8qIEFwcGVuZCBhIHN0cmluZyBwYXJhbWV0ZXIgdG8g YSB0cmVlICovCitzdGF0aWMgdm9pZAorYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJl ZSwgY2hhciAqc3ViX2ZtdCwgY2hhciAqdmFsdWUpCit7CisJT2JqRWxlbQkgICAqcGFyYW07CisJ Y2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJv c2UgJiYgKHZhbHVlID09IE5VTEwgfHwgdmFsdWVbMF0gPT0gJ1wwJykpCisJCXJldHVybjsKKwor CW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9m bXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVTdHJpbmcsIG9iamVjdF9uYW1lKTsK KwlwYXJhbS0+dmFsdWUuc3RyaW5nID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRy ZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIFNpbWlsYXIgdG8gZm9ybWF0X3R5cGVfZXh0ZW5kZWQs IGV4Y2VwdCB3ZSByZXR1cm4gZWFjaCBiaXQgb2YgaW5mb3JtYXRpb24KKyAqIHNlcGFyYXRlbHk6 CisgKgorICogLSBuc3BpZCBpcyB0aGUgc2NoZW1hIE9JRC4gIEZvciBjZXJ0YWluIFNRTC1zdGFu ZGFyZCB0eXBlcyB3aGljaCBoYXZlIHdlaXJkCisgKiAgIHR5cG1vZCBydWxlcywgd2UgcmV0dXJu IEludmFsaWRPaWQ7IGNhbGxlciBpcyBleHBlY3RlZCB0byBub3Qgc2NoZW1hLQorICogICBxdWFs aWZ5IHRoZSBuYW1lIG5vciBhZGQgcXVvdGVzIHRvIHRoZSB0eXBlIG5hbWUgaW4gdGhpcyBjYXNl LgorICoKKyAqIC0gdHlwbmFtZSBpcyBzZXQgdG8gdGhlIHR5cGUgbmFtZSwgd2l0aG91dCBxdW90 ZXMKKyAqCisgKiAtIHR5cGVtb2RzdHIgaXMgc2V0IHRvIHRoZSB0eXBlbW9kLCBpZiBhbnksIGFz IGEgc3RyaW5nIHdpdGggcGFyZW5zCisgKgorICogLSB0eXBhcnJheSBpbmRpY2F0ZXMgd2hldGhl ciBbXXMgbXVzdCBiZSBhZGRlZAorICoKKyAqIFdlIGRvbid0IHRyeSB0byBkZWNvZGUgdHlwZSBu YW1lcyB0byB0aGVpciBzdGFuZGFyZC1tYW5kYXRlZCBuYW1lcywgZXhjZXB0CisgKiBpbiB0aGUg Y2FzZXMgb2YgdHlwZXMgd2l0aCB1bnVzdWFsIHR5cG1vZCBydWxlcy4KKyAqLworc3RhdGljIHZv aWQKK2Zvcm1hdF90eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwKKwkJ CQkJIE9pZCAqbnNwaWQsIGNoYXIgKip0eXBuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwKKwkJCQkJ IGJvb2wgKnR5cGFycmF5KQoreworCUhlYXBUdXBsZQkJdHVwbGU7CisJRm9ybV9wZ190eXBlCXR5 cGVmb3JtOworCU9pZAkJCQlhcnJheV9iYXNlX3R5cGU7CisKKwl0dXBsZSA9IFNlYXJjaFN5c0Nh Y2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKHR5cGVfb2lkKSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IHR5cGUgJXUiLCB0eXBlX29pZCk7CisKKwl0eXBlZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNU UlVDVCh0dXBsZSk7CisKKwkvKgorCSAqIENoZWNrIGlmIGl0J3MgYSByZWd1bGFyICh2YXJpYWJs ZSBsZW5ndGgpIGFycmF5IHR5cGUuICBBcyBhYm92ZSwKKwkgKiBmaXhlZC1sZW5ndGggYXJyYXkg dHlwZXMgc3VjaCBhcyAibmFtZSIgc2hvdWxkbid0IGdldCBkZWNvbnN0cnVjdGVkLgorCSAqLwor CWFycmF5X2Jhc2VfdHlwZSA9IHR5cGVmb3JtLT50eXBlbGVtOworCisJKnR5cGFycmF5ID0gKElz VHJ1ZUFycmF5VHlwZSh0eXBlZm9ybSkgJiYgdHlwZWZvcm0tPnR5cHN0b3JhZ2UgIT0gVFlQU1RP UkFHRV9QTEFJTik7CisKKwlpZiAoKnR5cGFycmF5KQorCXsKKwkJLyogU3dpdGNoIG91ciBhdHRl bnRpb24gdG8gdGhlIGFycmF5IGVsZW1lbnQgdHlwZSAqLworCQlSZWxlYXNlU3lzQ2FjaGUodHVw bGUpOworCQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVt KGFycmF5X2Jhc2VfdHlwZSkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCB0eXBlX29pZCk7 CisKKwkJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCQl0eXBl X29pZCA9IGFycmF5X2Jhc2VfdHlwZTsKKwl9CisKKwkvKgorCSAqIFNwZWNpYWwtY2FzZSBjcm9j ayBmb3IgdHlwZXMgd2l0aCBzdHJhbmdlIHR5cG1vZCBydWxlcyB3aGVyZSB3ZSBwdXQKKwkgKiB0 eXBtb2QgYXQgdGhlIG1pZGRsZSBvZiBuYW1lKGUuZy4gVElNRSg2KSB3aXRoIHRpbWUgem9uZSAp LiBXZSBjYW5ub3QKKwkgKiBzY2hlbWEtcXVhbGlmeSBub3IgYWRkIHF1b3RlcyB0byB0aGUgdHlw ZSBuYW1lIGluIHRoZXNlIGNhc2VzLgorCSAqLworCWlmICh0eXBlX29pZCA9PSBJTlRFUlZBTE9J RCB8fAorCQl0eXBlX29pZCA9PSBUSU1FU1RBTVBPSUQgfHwKKwkJdHlwZV9vaWQgPT0gVElNRVNU QU1QVFpPSUQgfHwKKwkJdHlwZV9vaWQgPT0gVElNRU9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1F VFpPSUQpCisJeworCQlzd2l0Y2ggKHR5cGVfb2lkKQorCQl7CisJCQljYXNlIElOVEVSVkFMT0lE OgorCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiSU5URVJWQUwiKTsKKwkJCQlicmVhazsKKwkJCWNh c2UgVElNRVNUQU1QVFpPSUQ6CisJCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJCQkqdHlwbmFtZSA9 IHBzdHJkdXAoIlRJTUVTVEFNUCBXSVRIIFRJTUUgWk9ORSIpOworCQkJCWVsc2UKKwkJCQkJLyog b3RoZXJ3aXNlLCBXSVRIIFRaIGlzIGFkZGVkIGJ5IHR5cG1vZC4gKi8KKwkJCQkJKnR5cG5hbWUg PSBwc3RyZHVwKCJUSU1FU1RBTVAiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRVNUQU1QT0lE OgorCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIik7CisJCQkJYnJlYWs7CisJCQlj YXNlIFRJTUVUWk9JRDoKKwkJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJCSp0eXBuYW1lID0gcHN0 cmR1cCgiVElNRSBXSVRIIFRJTUUgWk9ORSIpOworCQkJCWVsc2UKKwkJCQkJLyogb3RoZXJ3aXNl LCBXSVRIIFRaIGlzIGFkZGVkIGJ5IHR5cG1vZGUuICovCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1 cCgiVElNRSIpOworCQkJCWJyZWFrOworCQkJY2FzZSBUSU1FT0lEOgorCQkJCSp0eXBuYW1lID0g cHN0cmR1cCgiVElNRSIpOworCQkJCWJyZWFrOworCQl9CisJCSpuc3BpZCA9IEludmFsaWRPaWQ7 CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIE5vIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBpcyBy ZXF1aXJlZCBmb3Igb3RoZXIgdHlwZXMsIHNvIGdldCB0aGUgdHlwZQorCQkgKiBuYW1lIGFuZCBz Y2hlbWEgZGlyZWN0bHkgZnJvbSB0aGUgY2F0YWxvZy4KKwkJICovCisJCSpuc3BpZCA9IHR5cGVm b3JtLT50eXBuYW1lc3BhY2U7CisJCSp0eXBuYW1lID0gcHN0cmR1cChOYW1lU3RyKHR5cGVmb3Jt LT50eXBuYW1lKSk7CisJfQorCisJaWYgKHR5cGVtb2QgPj0gMCkKKwkJKnR5cGVtb2RzdHIgPSBw cmludFR5cG1vZCgiIiwgdHlwZW1vZCwgdHlwZWZvcm0tPnR5cG1vZG91dCk7CisJZWxzZQorCQkq dHlwZW1vZHN0ciA9IHBzdHJkdXAoIiIpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKK30K KworLyoKKyAqIFJldHVybiB0aGUgZGVmYXVsdHMgdmFsdWVzIG9mIGFyZ3VtZW50cyB0byBhIGZ1 bmN0aW9uLCBhcyBhIGxpc3Qgb2YKKyAqIGRlcGFyc2VkIGV4cHJlc3Npb25zLgorICovCitzdGF0 aWMgTGlzdCAqCitGdW5jdGlvbkdldERlZmF1bHRzKHRleHQgKnByb2FyZ2RlZmF1bHRzKQorewor CUxpc3QgICAqbm9kZWRlZnM7CisJTGlzdCAgICpzdHJkZWZzID0gTklMOworCUxpc3RDZWxsICpj ZWxsOworCisJbm9kZWRlZnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0 cmluZyhwcm9hcmdkZWZhdWx0cykpOworCWlmICghSXNBKG5vZGVkZWZzLCBMaXN0KSkKKwkJZWxv ZyhFUlJPUiwgInByb2FyZ2RlZmF1bHRzIGlzIG5vdCBhIGxpc3QiKTsKKworCWZvcmVhY2goY2Vs bCwgbm9kZWRlZnMpCisJeworCQlOb2RlICAgKm9uZWRlZiA9IGxmaXJzdChjZWxsKTsKKworCQlz dHJkZWZzID0gbGFwcGVuZChzdHJkZWZzLCBkZXBhcnNlX2V4cHJlc3Npb24ob25lZGVmLCBOSUws IGZhbHNlLCBmYWxzZSkpOworCX0KKworCXJldHVybiBzdHJkZWZzOworfQorCisvKgorICogUmV0 dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFJFTFBFUlNJU1RFTkNF IHZhbHVlLgorICovCitzdGF0aWMgY2hhciAqCitnZXRfcGVyc2lzdGVuY2Vfc3RyKGNoYXIgcGVy c2lzdGVuY2UpCit7CisJc3dpdGNoIChwZXJzaXN0ZW5jZSkKKwl7CisJCWNhc2UgUkVMUEVSU0lT VEVOQ0VfVEVNUDoKKwkJCXJldHVybiAiVEVNUE9SQVJZIjsKKwkJY2FzZSBSRUxQRVJTSVNURU5D RV9VTkxPR0dFRDoKKwkJCXJldHVybiAiVU5MT0dHRUQiOworCQljYXNlIFJFTFBFUlNJU1RFTkNF X1BFUk1BTkVOVDoKKwkJCXJldHVybiAiIjsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1 bmV4cGVjdGVkIHBlcnNpc3RlbmNlIG1hcmtpbmcgJWMiLCBwZXJzaXN0ZW5jZSk7CisJCQlyZXR1 cm4gIiI7CQkvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisJfQorfQorCisvKiBBbGxvY2F0ZSBh IG5ldyBwYXJhbWV0ZXIgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmplY3QoT2JqVHlwZSB0 eXBlLCBjaGFyICpuYW1lKQoreworCU9iakVsZW0JKnBhcmFtOworCisJcGFyYW0gPSBwYWxsb2Mw KHNpemVvZihPYmpFbGVtKSk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCXBhcmFtLT5vYmp0eXBl ID0gdHlwZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyogQWxsb2NhdGUgYSBuZXcgb2JqZWN0 IHBhcmFtZXRlciAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X29iamVjdF9vYmplY3QoT2JqVHJl ZSAqdmFsdWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2Jq VHlwZU9iamVjdCwgTlVMTCk7CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZhbHVlOworCisJcmV0 dXJuIHBhcmFtOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHRyZWUgdG8gc3Rv cmUgcGFyYW1ldGVyIHZhbHVlcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWUo Y2hhciAqZm10KQoreworCU9ialRyZWUJKnBhcmFtczsKKworCXBhcmFtcyA9IHBhbGxvYzAoc2l6 ZW9mKE9ialRyZWUpKTsKKwlwYXJhbXMtPnByZXNlbnQgPSB0cnVlOworCXNsaXN0X2luaXQoJnBh cmFtcy0+cGFyYW1zKTsKKworCWlmIChmbXQpCisJeworCQlwYXJhbXMtPmZtdGluZm8gPSBtYWtl U3RyaW5nSW5mbygpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHBhcmFtcy0+Zm10aW5mbywg Zm10KTsKKwl9CisKKwlyZXR1cm4gcGFyYW1zOworfQorCisvKgorICogQSBoZWxwZXIgcm91dGlu ZSB0byBzZXR1cCAle31EIGFuZCAle31PIGVsZW1lbnRzLgorICoKKyAqIEVsZW1lbnRzICJzY2hl bWFuYW1lIiBhbmQgIm9iam5hbWUiIGFyZSBzZXQuICBJZiB0aGUgbmFtZXNwYWNlIE9JRAorICog Y29ycmVzcG9uZHMgdG8gYSB0ZW1wIHNjaGVtYSwgdGhhdCdzIHNldCB0byAicGdfdGVtcCIuCisg KgorICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gZWxlbWVudCB0eXBlcyBpcyB3 aGV0aGVyIHRoZSBvYmpuYW1lIHdpbGwKKyAqIGJlIHF1b3RlZCBhcyBhbiBpZGVudGlmaWVyIG9y IG5vdCwgd2hpY2ggaXMgbm90IHNvbWV0aGluZyB0aGF0IHRoaXMgcm91dGluZQorICogY29uY2Vy bnMgaXRzZWxmIHdpdGg7IHRoYXQgd2lsbCBiZSB1cCB0byB0aGUgZXhwYW5kIGZ1bmN0aW9uLgor ICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoT2lkIG5zcGlk LCBjaGFyICpuYW1lKQoreworCU9ialRyZWUJKnF1YWxpZmllZDsKKwljaGFyCSAgICpuYW1lc3Bh Y2U7CisKKwlpZiAoaXNBbnlUZW1wTmFtZXNwYWNlKG5zcGlkKSkKKwkJbmFtZXNwYWNlID0gcHN0 cmR1cCgicGdfdGVtcCIpOworCWVsc2UKKwkJbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9uYW1l KG5zcGlkKTsKKworCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsIDIsCisJCQkJCQkJ ICAic2NoZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWVzcGFjZSwKKwkJCQkJCQkgICJvYmpu YW1lIiwgT2JqVHlwZVN0cmluZywgcHN0cmR1cChuYW1lKSk7CisKKwlyZXR1cm4gcXVhbGlmaWVk OworfQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31EIGFuZCAle31PIGVs ZW1lbnRzLCB3aXRoIHRoZSBvYmplY3Qgc3BlY2lmaWVkCisgKiBieSBjbGFzc0lkL29iaklkLgor ICoKKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9p ZCBjbGFzc0lkLCBPaWQgb2JqZWN0SWQpCit7CisJT2JqVHJlZQkqcXVhbGlmaWVkOworCVJlbGF0 aW9uCWNhdGFsb2c7CisJSGVhcFR1cGxlCWNhdG9iajsKKwlEYXR1bQkJb2JqbnNwOworCURhdHVt CQlvYmpuYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1l c3BhY2U7CisJQXR0ck51bWJlcglBbnVtX29pZCA9IGdldF9vYmplY3RfYXR0bnVtX29pZChjbGFz c0lkKTsKKwlib29sCQlpc251bGw7CisKKwljYXRhbG9nID0gdGFibGVfb3BlbihjbGFzc0lkLCBB Y2Nlc3NTaGFyZUxvY2spOworCisJY2F0b2JqID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChj YXRhbG9nLCBBbnVtX29pZCwgb2JqZWN0SWQpOworCWlmICghY2F0b2JqKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb2JqZWN0ICV1IG9mIGNhdGFsb2cgXCIlc1wiIiwK KwkJCSBvYmplY3RJZCwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoY2F0YWxvZykpOworCUFudW1f bmFtZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWUoY2xhc3NJZCk7CisJQW51bV9uYW1lc3BhY2Ug PSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lc3BhY2UoY2xhc3NJZCk7CisKKwlvYmpuc3AgPSBoZWFw X2dldGF0dHIoY2F0b2JqLCBBbnVtX25hbWVzcGFjZSwgUmVsYXRpb25HZXREZXNjcihjYXRhbG9n KSwKKwkJCQkJCSAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgInVuZXhw ZWN0ZWQgTlVMTCBuYW1lc3BhY2UiKTsKKworCW9iam5hbWUgPSBoZWFwX2dldGF0dHIoY2F0b2Jq LCBBbnVtX25hbWUsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJCQkgICAmaXNudWxs KTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBOVUxMIG5hbWUiKTsK KworCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShEYXR1bUdldE9iamVjdElk KG9iam5zcCksCisJCQkJCQkJCQkJIE5hbWVTdHIoKkRhdHVtR2V0TmFtZShvYmpuYW1lKSkpOwor CXRhYmxlX2Nsb3NlKGNhdGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcXVhbGlm aWVkOworfQorCisvKgorICogSGVscGVyIHJvdXRpbmUgZm9yICV7fVIgb2JqZWN0cywgd2l0aCBy b2xlIHNwZWNpZmllZCBieSBSb2xlU3BlYyBub2RlLgorICogU3BlY2lhbCB2YWx1ZXMgc3VjaCBh cyBST0xFU1BFQ19DVVJSRU5UX1VTRVIgYXJlIGV4cGFuZGVkIHRvIHRoZWlyIGZpbmFsCisgKiBu YW1lcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKFJv bGVTcGVjICpzcGVjKQoreworCU9ialRyZWUJICAgKnJvbGU7CisJY2hhcgkgICAqcm9sZXR5cGU7 CisKKwlpZiAoc3BlYy0+cm9sZXR5cGUgIT0gUk9MRVNQRUNfUFVCTElDKQorCQlyb2xldHlwZSA9 IGdldF9yb2xlc3BlY19uYW1lKHNwZWMpOworCWVsc2UKKwkJcm9sZXR5cGUgPSBwc3RyZHVwKCIi KTsKKworCXJvbGUgPSBuZXdfb2JqdHJlZV9WQShOVUxMLDIsCisJCQkJCQkgICJpc19wdWJsaWMi LCBPYmpUeXBlQm9vbCwgc3BlYy0+cm9sZXR5cGUgPT0gUk9MRVNQRUNfUFVCTElDLAorCQkJCQkJ ICAicm9sZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCByb2xldHlwZSk7CisJcmV0dXJuIHJvbGU7Cit9 CisKKy8qCisgKiBBIGhlbHBlciByb3V0aW5lIHRvIHNldHVwICV7fVQgZWxlbWVudHMuCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl90eXBlKE9pZCB0eXBlSWQsIGludDMy IHR5cG1vZCkKK3sKKwlPYmpUcmVlCSp0eXBlUGFyYW07CisJT2lkCQkJdHlwbnNwaWQ7CisJY2hh cgkgICAqdHlwbnNwOworCWNoYXIJICAgKnR5cGVuYW1lID0gTlVMTDsKKwljaGFyCSAgICp0eXBt b2RzdHI7CisJYm9vbAkJdHlwYXJyYXk7CisKKwlmb3JtYXRfdHlwZV9kZXRhaWxlZCh0eXBlSWQs IHR5cG1vZCwKKwkJCQkJCSAmdHlwbnNwaWQsICZ0eXBlbmFtZSwgJnR5cG1vZHN0ciwgJnR5cGFy cmF5KTsKKworCWlmIChPaWRJc1ZhbGlkKHR5cG5zcGlkKSkKKwkJdHlwbnNwID0gZ2V0X25hbWVz cGFjZV9uYW1lX29yX3RlbXAodHlwbnNwaWQpOworCWVsc2UKKwkJdHlwbnNwID0gcHN0cmR1cCgi Iik7CisKKwl0eXBlUGFyYW0gPSBuZXdfb2JqdHJlZV9WQShOVUxMLCA0LAorCQkJCQkJCSAgICJz Y2hlbWFuYW1lIiwgT2JqVHlwZVN0cmluZywgdHlwbnNwLAorCQkJCQkJCSAgICJ0eXBlbmFtZSIs IE9ialR5cGVTdHJpbmcsIHR5cGVuYW1lLAorCQkJCQkJCSAgICJ0eXBtb2QiLCBPYmpUeXBlU3Ry aW5nLCB0eXBtb2RzdHIsCisJCQkJCQkJICAgInR5cGFycmF5IiwgT2JqVHlwZUJvb2wsIHR5cGFy cmF5KTsKKworCXJldHVybiB0eXBlUGFyYW07Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBv YmplY3QgdHJlZSB0byBzdG9yZSBwYXJhbWV0ZXIgdmFsdWVzIC0tIHZhcmFyZ3MgdmVyc2lvbi4K KyAqCisgKiBUaGUgImZtdCIgYXJndW1lbnQgaXMgdXNlZCB0byBhcHBlbmQgYXMgYSAiZm10IiBl bGVtZW50IGluIHRoZSBvdXRwdXQgYmxvYi4KKyAqIG51bW9ianMgaW5kaWNhdGVzIHRoZSBudW1i ZXIgb2YgZXh0cmEgZWxlbWVudHMgdG8gYXBwZW5kOyBmb3IgZWFjaCBvbmUsIGEKKyAqIG5hbWUg KHN0cmluZyksIHR5cGUgKGZyb20gdGhlIE9ialR5cGUgZW51bSkgYW5kIHZhbHVlIG11c3QgYmUg c3VwcGxpZWQuICBUaGUKKyAqIHZhbHVlIG11c3QgbWF0Y2ggdGhlIHR5cGUgZ2l2ZW47IGZvciBp bnN0YW5jZSwgT2JqVHlwZUludGVnZXIgcmVxdWlyZXMgYW4KKyAqIGludDY0LCBPYmpUeXBlU3Ry aW5nIHJlcXVpcmVzIGEgY2hhciAqLCBPYmpUeXBlQXJyYXkgcmVxdWlyZXMgYSBsaXN0IChvZgor ICogT2JqRWxlbSksIE9ialR5cGVPYmplY3QgcmVxdWlyZXMgYW4gT2JqVHJlZSwgYW5kIHNvIG9u LiAgRWFjaCBlbGVtZW50IHR5cGUgKgorICogbXVzdCBtYXRjaCB0aGUgY29udmVyc2lvbiBzcGVj aWZpZXIgZ2l2ZW4gaW4gdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGRlc2NyaWJlZAorICogaW4gZGRs X2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQsIHEudi4KKyAqCisgKiBOb3RlIHdlIGRvbid0IGhhdmUg dGhlIGx1eHVyeSBvZiBzcHJpbnRmLWxpa2UgY29tcGlsZXIgd2FybmluZ3MgZm9yCisgKiBtYWxm b3JtZWQgYXJndW1lbnQgbGlzdHMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVl X1ZBKGNoYXIgKmZtdCwgaW50IG51bW9ianMsLi4uKQoreworCU9ialRyZWUJICAgKnRyZWU7CisJ dmFfbGlzdAkJYXJnczsKKwlpbnQJCQlpOworCisJLyogU2V0IHVwIHRoZSB0b3BsZXZlbCBvYmpl Y3QgYW5kIGl0cyAiZm10IiAqLworCXRyZWUgPSBuZXdfb2JqdHJlZShmbXQpOworCisJLyogQW5k IHByb2Nlc3MgdGhlIGdpdmVuIHZhcmFyZ3MgKi8KKwl2YV9zdGFydChhcmdzLCBudW1vYmpzKTsK Kwlmb3IgKGkgPSAwOyBpIDwgbnVtb2JqczsgaSsrKQorCXsKKwkJY2hhcgkgICAqbmFtZTsKKwkJ T2JqVHlwZQkJdHlwZTsKKwkJT2JqRWxlbQkgICAqZWxlbTsKKworCQluYW1lID0gdmFfYXJnKGFy Z3MsIGNoYXIgKik7CisJCXR5cGUgPSB2YV9hcmcoYXJncywgT2JqVHlwZSk7CisJCWVsZW0gPSBu ZXdfb2JqZWN0KHR5cGUsIE5VTEwpOworCisJCS8qCisJCSAqIEZvciBhbGwgb3RoZXIgcGFyYW0g dHlwZXMgdGhlcmUgbXVzdCBiZSBhIHZhbHVlIGluIHRoZSB2YXJhcmdzLgorCQkgKiBGZXRjaCBp dCBhbmQgYWRkIHRoZSBmdWxseSBmb3JtZWQgc3Vib2JqZWN0IGludG8gdGhlIG1haW4gb2JqZWN0 LgorCQkgKi8KKwkJc3dpdGNoICh0eXBlKQorCQl7CisJCQljYXNlIE9ialR5cGVOdWxsOgorCQkJ CS8qIE51bGwgcGFyYW1zIGRvbid0IGhhdmUgYSB2YWx1ZSAob2J2aW91c2x5KSAqLworCQkJCWJy ZWFrOworCQkJY2FzZSBPYmpUeXBlQm9vbDoKKwkJCQllbGVtLT52YWx1ZS5ib29sZWFuID0gdmFf YXJnKGFyZ3MsIGludCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVTdHJpbmc6CisJCQkJ ZWxlbS0+dmFsdWUuc3RyaW5nID0gdmFfYXJnKGFyZ3MsIGNoYXIgKik7CisJCQkJYnJlYWs7CisJ CQljYXNlIE9ialR5cGVBcnJheToKKwkJCQllbGVtLT52YWx1ZS5hcnJheSA9IHZhX2FyZyhhcmdz LCBMaXN0ICopOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJCQllbGVt LT52YWx1ZS5pbnRlZ2VyID0gdmFfYXJnKGFyZ3MsIGludDY0KTsKKwkJCQlicmVhazsKKwkJCWNh c2UgT2JqVHlwZUZsb2F0OgorCQkJCWVsZW0tPnZhbHVlLmZsdCA9IHZhX2FyZyhhcmdzLCBkb3Vi bGUpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlT2JqZWN0OgorCQkJCWVsZW0tPnZhbHVl Lm9iamVjdCA9IHZhX2FyZyhhcmdzLCBPYmpUcmVlICopOworCQkJCWJyZWFrOworCQkJZGVmYXVs dDoKKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBPYmpUcmVlIGVsZW1lbnQgdHlwZSAlZCIsIHR5 cGUpOworCQl9CisKKwkJZWxlbS0+bmFtZSA9IG5hbWU7CisJCWFwcGVuZF9wcmVtYWRlX29iamVj dCh0cmVlLCBlbGVtKTsKKwl9CisKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHRyZWU7Cit9CisK Ky8qIEFsbG9jYXRlIGEgbmV3IHN0cmluZyBvYmplY3QgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25l d19zdHJpbmdfb2JqZWN0KGNoYXIgKnZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCisJ QXNzZXJ0KHZhbHVlKTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5nLCBOVUxM KTsKKwlwYXJhbS0+dmFsdWUuc3RyaW5nID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisK Ky8qCisgKiBQcm9jZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyBmcm9tIHRoZSBPYmpU cmVlIGludG8gdGhlIG91dHB1dCBwYXJzZQorICogc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitv Ymp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9ialRy ZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlpZiAo dHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBQdXNoIHRoZSBrZXkgZmly c3QgKi8KKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSAiZm10 IjsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5LnZhbC5zdHJpbmcudmFsKTsKKwlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9LRVksICZrZXkpOworCisJLyogVGhlbiBwcm9jZXNz IHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyAqLworCXZhbC50eXBlID0gamJ2U3RyaW5nOwor CXZhbC52YWwuc3RyaW5nLmxlbiA9IHRyZWUtPmZtdGluZm8tPmxlbjsKKwl2YWwudmFsLnN0cmlu Zy52YWwgPSB0cmVlLT5mbXRpbmZvLT5kYXRhOworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X1ZBTFVFLCAmdmFsKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9u IGZyb20gYW4gT2JqVHJlZS4KKyAqLworc3RhdGljIEpzb25iICoKK29ianRyZWVfdG9fanNvbmIo T2JqVHJlZSAqdHJlZSkKK3sKKwlKc29uYlZhbHVlICp2YWx1ZTsKKworCXZhbHVlID0gb2JqdHJl ZV90b19qc29uYl9yZWModHJlZSwgTlVMTCk7CisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZh bHVlKTsKK30KKworLyoKKyAqIEhlbHBlciBmb3Igb2JqdHJlZV90b19qc29uYjogcHJvY2VzcyBh biBpbmRpdmlkdWFsIGVsZW1lbnQgZnJvbSBhbiBvYmplY3Qgb3IKKyAqIGFuIGFycmF5IGludG8g dGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK29ianRyZWVfdG9fanNv bmJfZWxlbWVudChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBPYmpFbGVtICpvYmplY3QsCisJCQkJ CQkgSnNvbmJJdGVyYXRvclRva2VuIGVsZW1fdG9rZW4pCit7CisJTGlzdENlbGwgICAqY2VsbDsK KwlKc29uYlZhbHVlCXZhbDsKKworCXN3aXRjaCAob2JqZWN0LT5vYmp0eXBlKQorCXsKKwkJY2Fz ZSBPYmpUeXBlTnVsbDoKKwkJCXZhbC50eXBlID0gamJ2TnVsbDsKKwkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVT dHJpbmc6CisJCQl2YWwudHlwZSA9IGpidlN0cmluZzsKKwkJCXZhbC52YWwuc3RyaW5nLmxlbiA9 IHN0cmxlbihvYmplY3QtPnZhbHVlLnN0cmluZyk7CisJCQl2YWwudmFsLnN0cmluZy52YWwgPSBv YmplY3QtPnZhbHVlLnN0cmluZzsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tl biwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJdmFsLnR5 cGUgPSBqYnZOdW1lcmljOworCQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0 dW1HZXROdW1lcmljKERpcmVjdEZ1bmN0aW9uQ2FsbDEoaW50OF9udW1lcmljLAorCQkJCQkJCQkJ CQkJCW9iamVjdC0+dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBl bGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUZsb2F0OgorCQkJ dmFsLnR5cGUgPSBqYnZOdW1lcmljOworCQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJ CQkJRGF0dW1HZXROdW1lcmljKERpcmVjdEZ1bmN0aW9uQ2FsbDEoZmxvYXQ4X251bWVyaWMsCisJ CQkJCQkJCQkJCQkJb2JqZWN0LT52YWx1ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlQm9v bDoKKwkJCXZhbC50eXBlID0gamJ2Qm9vbDsKKwkJCXZhbC52YWwuYm9vbGVhbiA9IG9iamVjdC0+ dmFsdWUuYm9vbGVhbjsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZh bCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkvKiBSZWN1cnNpdmVs eSBhZGQgdGhlIG9iamVjdCBpbnRvIHRoZSBleGlzdGluZyBwYXJzZSBzdGF0ZSAqLworCQkJb2Jq dHJlZV90b19qc29uYl9yZWMob2JqZWN0LT52YWx1ZS5vYmplY3QsIHN0YXRlKTsKKwkJCWJyZWFr OworCisJCWNhc2UgT2JqVHlwZUFycmF5OgorCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJf QkVHSU5fQVJSQVksIE5VTEwpOworCQkJZm9yZWFjaChjZWxsLCBvYmplY3QtPnZhbHVlLmFycmF5 KQorCQkJeworCQkJCU9iakVsZW0gICAqZWxlbSA9IGxmaXJzdChjZWxsKTsKKworCQkJCW9ianRy ZWVfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgZWxlbSwgV0pCX0VMRU0pOworCQkJfQorCQkJcHVz aEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX0FSUkFZLCBOVUxMKTsKKwkJCWJyZWFrOworCisJ CWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG9iamVjdCB0eXBlICVkIiwg b2JqZWN0LT5vYmp0eXBlKTsKKwkJCWJyZWFrOworCX0KK30KKworLyoKKyAqIFJlY3Vyc2l2ZSBo ZWxwZXIgZm9yIG9ianRyZWVfdG9fanNvbmIuCisgKi8KK3N0YXRpYyBKc29uYlZhbHVlICoKK29i anRyZWVfdG9fanNvbmJfcmVjKE9ialRyZWUgKnRyZWUsIEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUp Cit7CisJc2xpc3RfaXRlcglpdGVyOworCisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVH SU5fT0JKRUNULCBOVUxMKTsKKworCW9ianRyZWVfZm10X3RvX2pzb25iX2VsZW1lbnQoc3RhdGUs IHRyZWUpOworCisJc2xpc3RfZm9yZWFjaChpdGVyLCAmdHJlZS0+cGFyYW1zKQorCXsKKwkJT2Jq RWxlbQkqb2JqZWN0ID0gc2xpc3RfY29udGFpbmVyKE9iakVsZW0sIG5vZGUsIGl0ZXIuY3VyKTsK KwkJSnNvbmJWYWx1ZQlrZXk7CisKKwkJLyogUHVzaCB0aGUga2V5IGZpcnN0ICovCisJCWtleS50 eXBlID0gamJ2U3RyaW5nOworCQlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ob2JqZWN0LT5u YW1lKTsKKwkJa2V5LnZhbC5zdHJpbmcudmFsID0gb2JqZWN0LT5uYW1lOworCQlwdXNoSnNvbmJW YWx1ZSgmc3RhdGUsIFdKQl9LRVksICZrZXkpOworCisJCS8qIFRoZW4gcHJvY2VzcyB0aGUgdmFs dWUgYWNjb3JkaW5nIHRvIGl0cyB0eXBlICovCisJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVudChz dGF0ZSwgb2JqZWN0LCBXSkJfVkFMVUUpOworCX0KKworCXJldHVybiBwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9y IENSRUFURSBUQUJMRS9DUkVBVEUgRE9NQUlOIGRlcGFyc2luZy4KKyAqCisgKiBHaXZlbiBhIHRh YmxlIE9JRCBvciBkb21haW4gT0lELCBvYnRhaW4gaXRzIGNvbnN0cmFpbnRzIGFuZCBhcHBlbmQg dGhlbSB0bworICogdGhlIGdpdmVuIGVsZW1lbnRzIGxpc3QuICBUaGUgdXBkYXRlZCBsaXN0IGlz IHJldHVybmVkLgorICoKKyAqIFRoaXMgd29ya3MgZm9yIHR5cGVkIHRhYmxlcywgcmVndWxhciB0 YWJsZXMsIGFuZCBkb21haW5zLgorICoKKyAqIE5vdGUgdGhhdCBDT05TVFJBSU5UX0ZPUkVJR04g Y29uc3RyYWludHMgYXJlIGFsd2F5cyBpZ25vcmVkLgorICovCitzdGF0aWMgTGlzdCAqCitvYnRh aW5Db25zdHJhaW50cyhMaXN0ICplbGVtZW50cywgT2lkIHJlbGF0aW9uSWQsIE9pZCBkb21haW5J ZCkKK3sKKwlSZWxhdGlvbgljb25SZWw7CisJU2NhbktleURhdGEga2V5OworCVN5c1NjYW5EZXNj IHNjYW47CisJSGVhcFR1cGxlCXR1cGxlOworCU9ialRyZWUJKmNvbnN0cjsKKworCS8qIE9ubHkg b25lIG1heSBiZSB2YWxpZCAqLworCUFzc2VydChPaWRJc1ZhbGlkKHJlbGF0aW9uSWQpIF4gT2lk SXNWYWxpZChkb21haW5JZCkpOworCisJLyoKKwkgKiBTY2FuIHBnX2NvbnN0cmFpbnQgdG8gZmV0 Y2ggYWxsIGNvbnN0cmFpbnRzIGxpbmtlZCB0byB0aGUgZ2l2ZW4KKwkgKiByZWxhdGlvbi4KKwkg Ki8KKwljb25SZWwgPSB0YWJsZV9vcGVuKENvbnN0cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFy ZUxvY2spOworCWlmIChPaWRJc1ZhbGlkKHJlbGF0aW9uSWQpKQorCXsKKwkJU2NhbktleUluaXQo JmtleSwKKwkJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlkLAorCQkJCQlCVEVxdWFsU3Ry YXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCU9iamVjdElkR2V0RGF0dW0ocmVsYXRpb25JZCkp OworCQlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFJlbGlkVHlw aWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9CisJZWxz ZQorCXsKKwkJQXNzZXJ0KE9pZElzVmFsaWQoZG9tYWluSWQpKTsKKwkJU2NhbktleUluaXQoJmtl eSwKKwkJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnR5cGlkLAorCQkJCQlCVEVxdWFsU3RyYXRl Z3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCU9iamVjdElkR2V0RGF0dW0oZG9tYWluSWQpKTsKKwkJ c2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRUeXBpZEluZGV4SWQs CisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQorCisJLyoKKwkgKiBGb3IgZWFj aCBjb25zdHJhaW50LCBhZGQgYSBub2RlIHRvIHRoZSBsaXN0IG9mIHRhYmxlIGVsZW1lbnRzLiAg SW4KKwkgKiB0aGVzZSBub2RlcyB3ZSBpbmNsdWRlIG5vdCBvbmx5IHRoZSBwcmludGFibGUgaW5m b3JtYXRpb24gKCJmbXQiKSwgYnV0CisJICogYWxzbyBzZXBhcmF0ZSBhdHRyaWJ1dGVzIHRvIGlu ZGljYXRlIHRoZSB0eXBlIG9mIGNvbnN0cmFpbnQsIGZvcgorCSAqIGF1dG9tYXRpYyBwcm9jZXNz aW5nLgorCSAqLworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0 bmV4dChzY2FuKSkpCisJeworCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uc3RyRm9ybTsKKwkJY2hh cgkgICAqY29udHlwZTsKKworCQljb25zdHJGb3JtID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VU U1RSVUNUKHR1cGxlKTsKKworCQlzd2l0Y2ggKGNvbnN0ckZvcm0tPmNvbnR5cGUpCisJCXsKKwkJ CWNhc2UgQ09OU1RSQUlOVF9DSEVDSzoKKwkJCQljb250eXBlID0gImNoZWNrIjsKKwkJCQlicmVh azsKKwkJCWNhc2UgQ09OU1RSQUlOVF9GT1JFSUdOOgorCQkJCWNvbnRpbnVlOwkvKiBub3QgaGVy ZSAqLworCQkJY2FzZSBDT05TVFJBSU5UX1BSSU1BUlk6CisJCQkJY29udHlwZSA9ICJwcmltYXJ5 IGtleSI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfVU5JUVVFOgorCQkJCWNvbnR5 cGUgPSAidW5pcXVlIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9UUklHR0VSOgor CQkJCWNvbnR5cGUgPSAidHJpZ2dlciI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRf RVhDTFVTSU9OOgorCQkJCWNvbnR5cGUgPSAiZXhjbHVzaW9uIjsKKwkJCQlicmVhazsKKwkJCWRl ZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBjb25zdHJhaW50IHR5cGUiKTsK KwkJfQorCisJCS8qCisJCSAqICJ0eXBlIiBhbmQgImNvbnR5cGUiIGFyZSBub3QgcGFydCBvZiB0 aGUgcHJpbnRhYmxlIG91dHB1dCwgYnV0IGFyZQorCQkgKiB1c2VmdWwgdG8gcHJvZ3JhbW1hdGlj YWxseSBkaXN0aW5ndWlzaCB0aGVzZSBmcm9tIGNvbHVtbnMgYW5kIGFtb25nCisJCSAqIGRpZmZl cmVudCBjb25zdHJhaW50IHR5cGVzLgorCQkgKgorCQkgKiBYWFggaXQgbWlnaHQgYmUgdXNlZnVs IHRvIGFsc28gbGlzdCB0aGUgY29sdW1uIG5hbWVzIGluIGEgUEssIGV0Yy4KKwkJICovCisJCWNv bnN0ciA9IG5ld19vYmp0cmVlX1ZBKCJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1z IiwKKwkJCQkJCQkJNCwKKwkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29uc3RyYWlu dCIsCisJCQkJCQkJCSJjb250eXBlIiwgT2JqVHlwZVN0cmluZywgY29udHlwZSwKKwkJCQkJCQkJ Im5hbWUiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGNvbnN0ckZvcm0tPmNvbm5hbWUpLAorCQkJ CQkJCQkiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBwZ19nZXRfY29uc3Ry YWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJGb3JtLT5vaWQpKTsKKwkJZWxlbWVudHMgPSBs YXBwZW5kKGVsZW1lbnRzLCBuZXdfb2JqZWN0X29iamVjdChjb25zdHIpKTsKKwl9CisKKwlzeXN0 YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKGNvblJlbCwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCXJldHVybiBlbGVtZW50czsKK30KKworLyoKKyAqIFJldHVybiBhbiBpbmRleCBkZWZp bml0aW9uLCBzcGxpdCBpbiBzZXZlcmFsIHBpZWNlcy4KKyAqCisgKiBBIGxhcmdlIGFtb3VudCBv ZiBjb2RlIGlzIGR1cGxpY2F0ZWQgZnJvbSAgcGdfZ2V0X2luZGV4ZGVmX3dvcmtlciwgYnV0Cisg KiBjb250cm9sIGZsb3cgaXMgZGlmZmVyZW50IGVub3VnaCB0aGF0IGl0IGRvZXNuJ3Qgc2VlbSB3 b3J0aCBrZWVwaW5nIHRoZW0KKyAqIHRvZ2V0aGVyLgorICovCitzdGF0aWMgdm9pZAorcGdfZ2V0 X2luZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJlbGlkLAorCQkJCQkJIGNoYXIgKippbmRleF9h bSwKKwkJCQkJCSBjaGFyICoqZGVmaW5pdGlvbiwKKwkJCQkJCSBjaGFyICoqcmVsb3B0aW9ucywK KwkJCQkJCSBjaGFyICoqdGFibGVzcGFjZSwKKwkJCQkJCSBjaGFyICoqd2hlcmVDbGF1c2UpCit7 CisJSGVhcFR1cGxlCWh0X2lkeDsKKwlIZWFwVHVwbGUJaHRfaWR4cmVsOworCUhlYXBUdXBsZQlo dF9hbTsKKwlGb3JtX3BnX2luZGV4IGlkeHJlYzsKKwlGb3JtX3BnX2NsYXNzIGlkeHJlbHJlYzsK KwlGb3JtX3BnX2FtCWFtcmVjOworCUluZGV4QW1Sb3V0aW5lICphbXJvdXRpbmU7CisJTGlzdAkg ICAqaW5kZXhwcnM7CisJTGlzdENlbGwgICAqaW5kZXhwcl9pdGVtOworCUxpc3QJICAgKmNvbnRl eHQ7CisJT2lkCQkJaW5kcmVsaWQ7CisJaW50CQkJa2V5bm87CisJRGF0dW0JCWluZGNvbGxEYXR1 bTsKKwlEYXR1bQkJaW5kY2xhc3NEYXR1bTsKKwlEYXR1bQkJaW5kb3B0aW9uRGF0dW07CisJYm9v bAkJaXNudWxsOworCW9pZHZlY3RvciAgKmluZGNvbGxhdGlvbjsKKwlvaWR2ZWN0b3IgICppbmRj bGFzczsKKwlpbnQydmVjdG9yICppbmRvcHRpb247CisJU3RyaW5nSW5mb0RhdGEgZGVmaW5pdGlv bkJ1ZjsKKworCS8qCisJICogRmV0Y2ggdGhlIHBnX2luZGV4IHR1cGxlIGJ5IHRoZSBPaWQgb2Yg dGhlIGluZGV4CisJICovCisJaHRfaWR4ID0gU2VhcmNoU3lzQ2FjaGUxKElOREVYUkVMSUQsIE9i amVjdElkR2V0RGF0dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9p ZHgpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgaW5kZXggJXUiLCBp bmRleHJlbGlkKTsKKwlpZHhyZWMgPSAoRm9ybV9wZ19pbmRleCkgR0VUU1RSVUNUKGh0X2lkeCk7 CisKKwlpbmRyZWxpZCA9IGlkeHJlYy0+aW5kcmVsaWQ7CisJQXNzZXJ0KGluZGV4cmVsaWQgPT0g aWR4cmVjLT5pbmRleHJlbGlkKTsKKworCS8qIE11c3QgZ2V0IGluZGNvbGxhdGlvbiwgaW5kY2xh c3MsIGFuZCBpbmRvcHRpb24gdGhlIGhhcmQgd2F5ICovCisJaW5kY29sbERhdHVtID0gU3lzQ2Fj aGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJICAgQW51bV9wZ19pbmRleF9p bmRjb2xsYXRpb24sICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRjb2xsYXRpb24g PSAob2lkdmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjb2xsRGF0dW0pOworCisJaW5kY2xh c3NEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQlB bnVtX3BnX2luZGV4X2luZGNsYXNzLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5k Y2xhc3MgPSAob2lkdmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjbGFzc0RhdHVtKTsKKwor CWluZG9wdGlvbkRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJ CQkJCQkJCSBBbnVtX3BnX2luZGV4X2luZG9wdGlvbiwgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251 bGwpOworCWluZG9wdGlvbiA9IChpbnQydmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRvcHRp b25EYXR1bSk7CisKKwkvKgorCSAqIEZldGNoIHRoZSBwZ19jbGFzcyB0dXBsZSBvZiB0aGUgaW5k ZXggcmVsYXRpb24KKwkgKi8KKwlodF9pZHhyZWwgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBP YmplY3RJZEdldERhdHVtKGluZGV4cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRf aWR4cmVsKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbGF0aW9u ICV1IiwgaW5kZXhyZWxpZCk7CisJaWR4cmVscmVjID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVD VChodF9pZHhyZWwpOworCisJLyoKKwkgKiBGZXRjaCB0aGUgcGdfYW0gdHVwbGUgb2YgdGhlIGlu ZGV4JyBhY2Nlc3MgbWV0aG9kCisJICovCisJaHRfYW0gPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQs IE9iamVjdElkR2V0RGF0dW0oaWR4cmVscmVjLT5yZWxhbSkpOworCWlmICghSGVhcFR1cGxlSXNW YWxpZChodF9hbSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nl c3MgbWV0aG9kICV1IiwKKwkJCSBpZHhyZWxyZWMtPnJlbGFtKTsKKwlhbXJlYyA9IChGb3JtX3Bn X2FtKSBHRVRTVFJVQ1QoaHRfYW0pOworCisJLyoKKwkgKiBHZXQgdGhlIGluZGV4IGV4cHJlc3Np b25zLCBpZiBhbnkuICAoTk9URTogd2UgZG8gbm90IHVzZSB0aGUgcmVsY2FjaGUKKwkgKiB2ZXJz aW9ucyBvZiB0aGUgZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZSwgYmVjYXVzZSB3ZSB3YW50IHRv IGRpc3BsYXkKKwkgKiBub24tY29uc3QtZm9sZGVkIGV4cHJlc3Npb25zLikKKwkgKi8KKwlpZiAo IWhlYXBfYXR0aXNudWxsKGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRleHBycywgTlVMTCkpCisJ eworCQlEYXR1bQkJZXhwcnNEYXR1bTsKKwkJYm9vbAkJaXNudWxsOworCQljaGFyCSAgICpleHBy c1N0cmluZzsKKworCQlleHByc0RhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0 X2lkeCwKKwkJCQkJCQkJCSBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCAmaXNudWxsKTsKKwkJQXNz ZXJ0KCFpc251bGwpOworCQlleHByc1N0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcoZXhwcnNE YXR1bSk7CisJCWluZGV4cHJzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGV4cHJzU3RyaW5nKTsK KwkJcGZyZWUoZXhwcnNTdHJpbmcpOworCX0KKwllbHNlCisJCWluZGV4cHJzID0gTklMOworCisJ aW5kZXhwcl9pdGVtID0gbGlzdF9oZWFkKGluZGV4cHJzKTsKKworCWNvbnRleHQgPSBkZXBhcnNl X2NvbnRleHRfZm9yKGdldF9yZWxfbmFtZShpbmRyZWxpZCksIGluZHJlbGlkKTsKKworCWluaXRT dHJpbmdJbmZvKCZkZWZpbml0aW9uQnVmKTsKKworCS8qIE91dHB1dCBpbmRleCBBTSAqLworCSpp bmRleF9hbSA9IHBzdHJkdXAocXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGFtcmVjLT5hbW5hbWUp KSk7CisKKwkvKiBGZXRjaCB0aGUgaW5kZXggQU0ncyBBUEkgc3RydWN0ICovCisJYW1yb3V0aW5l ID0gR2V0SW5kZXhBbVJvdXRpbmUoYW1yZWMtPmFtaGFuZGxlcik7CisKKwkvKgorCSAqIE91dHB1 dCBpbmRleCBkZWZpbml0aW9uLiAgTm90ZSB0aGUgb3V0ZXIgcGFyZW5zIG11c3QgYmUgc3VwcGxp ZWQgYnkKKwkgKiBjYWxsZXIuCisJICovCisJZm9yIChrZXlubyA9IDA7IGtleW5vIDwgaWR4cmVj LT5pbmRuYXR0czsga2V5bm8rKykKKwl7CisJCUF0dHJOdW1iZXIJYXR0bnVtID0gaWR4cmVjLT5p bmRrZXkudmFsdWVzW2tleW5vXTsKKwkJaW50MTYJCW9wdCA9IGluZG9wdGlvbi0+dmFsdWVzW2tl eW5vXTsKKwkJT2lkCQkJa2V5Y29sdHlwZTsKKwkJT2lkCQkJa2V5Y29sY29sbGF0aW9uOworCQlP aWQJCQlpbmRjb2xsOworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYs IGtleW5vID09IDAgPyAiIiA6ICIsICIpOworCisJCWlmIChhdHRudW0gIT0gMCkKKwkJeworCQkJ LyogU2ltcGxlIGluZGV4IGNvbHVtbiAqLworCQkJY2hhcgkgICAqYXR0bmFtZTsKKwkJCWludDMy CQlrZXljb2x0eXBtb2Q7CisKKwkJCWF0dG5hbWUgPSBnZXRfYXR0bmFtZShpbmRyZWxpZCwgYXR0 bnVtLCBmYWxzZSk7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCBx dW90ZV9pZGVudGlmaWVyKGF0dG5hbWUpKTsKKwkJCWdldF9hdHR0eXBldHlwbW9kY29sbChpbmRy ZWxpZCwgYXR0bnVtLAorCQkJCQkJCQkgICZrZXljb2x0eXBlLCAma2V5Y29sdHlwbW9kLAorCQkJ CQkJCQkgICZrZXljb2xjb2xsYXRpb24pOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogRXhwcmVz c2lvbmFsIGluZGV4ICovCisJCQlOb2RlCSAgICppbmRleGtleTsKKwkJCWNoYXIJICAgKnN0cjsK KworCQkJaWYgKGluZGV4cHJfaXRlbSA9PSBOVUxMKQorCQkJCWVsb2coRVJST1IsICJ0b28gZmV3 IGVudHJpZXMgaW4gaW5kZXhwcnMgbGlzdCIpOworCQkJaW5kZXhrZXkgPSAoTm9kZSAqKSBsZmly c3QoaW5kZXhwcl9pdGVtKTsKKwkJCWluZGV4cHJfaXRlbSA9IGxuZXh0KGluZGV4cHJzLCBpbmRl eHByX2l0ZW0pOworCQkJLyogRGVwYXJzZSAqLworCQkJc3RyID0gZGVwYXJzZV9leHByZXNzaW9u KGluZGV4a2V5LCBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCisJCQkvKiBOZWVkIHBhcmVucyBp ZiBpdCdzIG5vdCBhIGJhcmUgZnVuY3Rpb24gY2FsbCAqLworCQkJaWYgKGluZGV4a2V5ICYmIElz QShpbmRleGtleSwgRnVuY0V4cHIpICYmCisJCQkJKChGdW5jRXhwciAqKSBpbmRleGtleSktPmZ1 bmNmb3JtYXQgPT0gQ09FUkNFX0VYUExJQ0lUX0NBTEwpCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmZGVmaW5pdGlvbkJ1Ziwgc3RyKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZv KCZkZWZpbml0aW9uQnVmLCAiKCVzKSIsIHN0cik7CisKKwkJCWtleWNvbHR5cGUgPSBleHByVHlw ZShpbmRleGtleSk7CisJCQlrZXljb2xjb2xsYXRpb24gPSBleHByQ29sbGF0aW9uKGluZGV4a2V5 KTsKKwkJfQorCisJCS8qIEFkZCBjb2xsYXRpb24sIGV2ZW4gaWYgZGVmYXVsdCAqLworCQlpbmRj b2xsID0gaW5kY29sbGF0aW9uLT52YWx1ZXNba2V5bm9dOworCQlpZiAoT2lkSXNWYWxpZChpbmRj b2xsKSkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmRlZmluaXRpb25CdWYsICIgQ09MTEFURSAlcyIs CisJCQkJCQkJIGdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKChpbmRjb2xsKSkpOworCisJCS8qIEFk ZCB0aGUgb3BlcmF0b3IgY2xhc3MgbmFtZSwgZXZlbiBpZiBkZWZhdWx0ICovCisJCWdldF9vcGNs YXNzX25hbWUoaW5kY2xhc3MtPnZhbHVlc1trZXlub10sIEludmFsaWRPaWQsICZkZWZpbml0aW9u QnVmKTsKKworCQkvKiBBZGQgb3B0aW9ucyBpZiByZWxldmFudCAqLworCQlpZiAoYW1yb3V0aW5l LT5hbWNhbm9yZGVyKQorCQl7CisJCQkvKiBJZiBpdCBzdXBwb3J0cyBzb3J0IG9yZGVyaW5nLCBy ZXBvcnQgREVTQyBhbmQgTlVMTFMgb3B0cyAqLworCQkJaWYgKG9wdCAmIElORE9QVElPTl9ERVND KQorCQkJeworCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIgREVT QyIpOworCQkJCS8qIE5VTExTIEZJUlNUIGlzIHRoZSBkZWZhdWx0IGluIHRoaXMgY2FzZSAqLwor CQkJCWlmICghKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkpCisJCQkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIgTlVMTFMgTEFTVCIpOworCQkJfQorCQkJZWxz ZQorCQkJeworCQkJCWlmIChvcHQgJiBJTkRPUFRJT05fTlVMTFNfRklSU1QpCisJCQkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIgTlVMTFMgRklSU1QiKTsKKwkJCX0K KwkJfQorCisJCS8qIFhYWCBleGNsdWRlT3BzIHRoaW5neSB3YXMgaGVyZTsgZG8gd2UgbmVlZCBh bnl0aGluZz8gKi8KKwl9CisJKmRlZmluaXRpb24gPSBkZWZpbml0aW9uQnVmLmRhdGE7CisKKwkv KiBPdXRwdXQgcmVsb3B0aW9ucyAqLworCSpyZWxvcHRpb25zID0gZmxhdHRlbl9yZWxvcHRpb25z KGluZGV4cmVsaWQpOworCisJLyogT3V0cHV0IHRhYmxlc3BhY2UgKi8KKwl7CisJCU9pZAkJCXRi bHNwYzsKKworCQl0YmxzcGMgPSBnZXRfcmVsX3RhYmxlc3BhY2UoaW5kZXhyZWxpZCk7CisJCWlm IChPaWRJc1ZhbGlkKHRibHNwYykpCisJCQkqdGFibGVzcGFjZSA9IHBzdHJkdXAocXVvdGVfaWRl bnRpZmllcihnZXRfdGFibGVzcGFjZV9uYW1lKHRibHNwYykpKTsKKwkJZWxzZQorCQkJKnRhYmxl c3BhY2UgPSBOVUxMOworCX0KKworCS8qIFJlcG9ydCBpbmRleCBwcmVkaWNhdGUsIGlmIGFueSAq LworCWlmICghaGVhcF9hdHRpc251bGwoaHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZHByZWQsIE5V TEwpKQorCXsKKwkJTm9kZQkgICAqbm9kZTsKKwkJRGF0dW0JCXByZWREYXR1bTsKKwkJYm9vbAkJ aXNudWxsOworCQljaGFyCSAgICpwcmVkU3RyaW5nOworCisJCS8qIENvbnZlcnQgdGV4dCBzdHJp bmcgdG8gbm9kZSB0cmVlICovCisJCXByZWREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJF TElELCBodF9pZHgsCisJCQkJCQkJCQlBbnVtX3BnX2luZGV4X2luZHByZWQsICZpc251bGwpOwor CQlBc3NlcnQoIWlzbnVsbCk7CisJCXByZWRTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHBy ZWREYXR1bSk7CisJCW5vZGUgPSAoTm9kZSAqKSBzdHJpbmdUb05vZGUocHJlZFN0cmluZyk7CisJ CXBmcmVlKHByZWRTdHJpbmcpOworCisJCS8qIERlcGFyc2UgKi8KKwkJKndoZXJlQ2xhdXNlID0K KwkJCWRlcGFyc2VfZXhwcmVzc2lvbihub2RlLCBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCX0K KwllbHNlCisJCSp3aGVyZUNsYXVzZSA9IE5VTEw7CisKKwkvKiBDbGVhbiB1cCAqLworCVJlbGVh c2VTeXNDYWNoZShodF9pZHgpOworCVJlbGVhc2VTeXNDYWNoZShodF9pZHhyZWwpOworCVJlbGVh c2VTeXNDYWNoZShodF9hbSk7Cit9CisKKy8qCisgKiBPYnRhaW4gdGhlIGRlcGFyc2VkIGRlZmF1 bHQgdmFsdWUgZm9yIHRoZSBnaXZlbiBjb2x1bW4gb2YgdGhlIGdpdmVuIHRhYmxlLgorICoKKyAq IENhbGxlciBtdXN0IGhhdmUgc2V0IGEgY29ycmVjdCBkZXBhcnNlIGNvbnRleHQuCisgKi8KK3N0 YXRpYyBjaGFyICoKK1JlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJO dW1iZXIgYXR0bm8sIExpc3QgKmRwY29udGV4dCwKKwkJCQkJCSBMaXN0ICoqZXhwcnMpCit7CisJ Tm9kZSAqZGVmdmFsOworCWNoYXIgKmRlZnN0cjsKKworCWRlZnZhbCA9IGJ1aWxkX2NvbHVtbl9k ZWZhdWx0KHJlbCwgYXR0bm8pOworCWRlZnN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihkZWZ2YWws IGRwY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKworCS8qIENvbGxlY3QgdGhlIGV4cHJlc3Npb24g Zm9yIGxhdGVyIHJlcGxpY2F0aW9uIHNhZmV0eSBjaGVja3MgKi8KKwlpZiAoZXhwcnMpCisJCSpl eHBycyA9IGxhcHBlbmQoKmV4cHJzLCBkZWZ2YWwpOworCisJcmV0dXJuIGRlZnN0cjsKK30KKwor LyoKKyAqIE9idGFpbiB0aGUgZGVwYXJzZWQgcGFydGl0aW9uIGJvdW5kIGV4cHJlc3Npb24gZm9y IHRoZSBnaXZlbiB0YWJsZS4KKyAqLworc3RhdGljIGNoYXIgKgorUmVsYXRpb25HZXRQYXJ0aXRp b25Cb3VuZChPaWQgcmVsaWQpCit7CisJRGF0dW0JCWRlcGFyc2VkOworCURhdHVtCQlib3VuZERh dHVtOworCWJvb2wJCWlzbnVsbDsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwl0dXBsZSA9IFNlYXJj aFN5c0NhY2hlMShSRUxPSUQsIHJlbGlkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24gJXUiLAor CQkJIHJlbGlkKTsKKworCWJvdW5kRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVMT0lELCB0dXBs ZSwKKwkJCQkJCQkJIEFudW1fcGdfY2xhc3NfcmVscGFydGJvdW5kLAorCQkJCQkJCQkgJmlzbnVs bCk7CisKKwlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsCisJCQkJ CQkJCSAgIENTdHJpbmdHZXRUZXh0RGF0dW0oVGV4dERhdHVtR2V0Q1N0cmluZyhib3VuZERhdHVt KSksCisJCQkJCQkJCSAgIHJlbGlkKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CisKKwly ZXR1cm4gVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCk7Cit9CisKKy8qCisgKiBSZXR1cm4g dGhlIGdpdmVuIG9iamVjdCB0eXBlIGFzIGEgc3RyaW5nLgorICovCitzdGF0aWMgY29uc3QgY2hh ciAqCitzdHJpbmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpCit7CisJc3dpdGNoIChv Ymp0eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfQUdHUkVHQVRFOgorCQkJcmV0dXJuICJBR0dSRUdB VEUiOworCQljYXNlIE9CSkVDVF9DQVNUOgorCQkJcmV0dXJuICJDQVNUIjsKKwkJY2FzZSBPQkpF Q1RfQ09MVU1OOgorCQkJcmV0dXJuICJDT0xVTU4iOworCQljYXNlIE9CSkVDVF9DT0xMQVRJT046 CisJCQlyZXR1cm4gIkNPTExBVElPTiI7CisJCWNhc2UgT0JKRUNUX0NPTlZFUlNJT046CisJCQly ZXR1cm4gIkNPTlZFUlNJT04iOworCQljYXNlIE9CSkVDVF9EQVRBQkFTRToKKwkJCXJldHVybiAi REFUQUJBU0UiOworCQljYXNlIE9CSkVDVF9ET01BSU46CisJCQlyZXR1cm4gIkRPTUFJTiI7CisJ CWNhc2UgT0JKRUNUX0VWRU5UX1RSSUdHRVI6CisJCQlyZXR1cm4gIkVWRU5UIFRSSUdHRVIiOwor CQljYXNlIE9CSkVDVF9FWFRFTlNJT046CisJCQlyZXR1cm4gIkVYVEVOU0lPTiI7CisJCWNhc2Ug T0JKRUNUX0ZEVzoKKwkJCXJldHVybiAiRk9SRUlHTiBEQVRBIFdSQVBQRVIiOworCQljYXNlIE9C SkVDVF9GT1JFSUdOX1NFUlZFUjoKKwkJCXJldHVybiAiU0VSVkVSIjsKKwkJY2FzZSBPQkpFQ1Rf Rk9SRUlHTl9UQUJMRToKKwkJCXJldHVybiAiRk9SRUlHTiBUQUJMRSI7CisJCWNhc2UgT0JKRUNU X0ZVTkNUSU9OOgorCQkJcmV0dXJuICJGVU5DVElPTiI7CisJCWNhc2UgT0JKRUNUX0lOREVYOgor CQkJcmV0dXJuICJJTkRFWCI7CisJCWNhc2UgT0JKRUNUX0xBTkdVQUdFOgorCQkJcmV0dXJuICJM QU5HVUFHRSI7CisJCWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNUOgorCQkJcmV0dXJuICJMQVJHRSBP QkpFQ1QiOworCQljYXNlIE9CSkVDVF9NQVRWSUVXOgorCQkJcmV0dXJuICJNQVRFUklBTElaRUQg VklFVyI7CisJCWNhc2UgT0JKRUNUX09QQ0xBU1M6CisJCQlyZXR1cm4gIk9QRVJBVE9SIENMQVNT IjsKKwkJY2FzZSBPQkpFQ1RfT1BFUkFUT1I6CisJCQlyZXR1cm4gIk9QRVJBVE9SIjsKKwkJY2Fz ZSBPQkpFQ1RfT1BGQU1JTFk6CisJCQlyZXR1cm4gIk9QRVJBVE9SIEZBTUlMWSI7CisJCWNhc2Ug T0JKRUNUX1BPTElDWToKKwkJCXJldHVybiAiUE9MSUNZIjsKKwkJY2FzZSBPQkpFQ1RfUk9MRToK KwkJCXJldHVybiAiUk9MRSI7CisJCWNhc2UgT0JKRUNUX1JVTEU6CisJCQlyZXR1cm4gIlJVTEUi OworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlyZXR1cm4gIlNDSEVNQSI7CisJCWNhc2UgT0JK RUNUX1NFUVVFTkNFOgorCQkJcmV0dXJuICJTRVFVRU5DRSI7CisJCWNhc2UgT0JKRUNUX1RBQkxF OgorCQkJcmV0dXJuICJUQUJMRSI7CisJCWNhc2UgT0JKRUNUX1RBQkxFU1BBQ0U6CisJCQlyZXR1 cm4gIlRBQkxFU1BBQ0UiOworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJcmV0dXJuICJUUklH R0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJcmV0dXJuICJURVhUIFNF QVJDSCBDT05GSUdVUkFUSU9OIjsKKwkJLyoKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdfTUFQUElO RzoKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiBNQVBQSU5HIjsKKwkJKi8K KwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBESUNU SU9OQVJZIjsKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNI IFBBUlNFUiI7CisJCWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCQlyZXR1cm4gIlRFWFQgU0VB UkNIIFRFTVBMQVRFIjsKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCXJldHVybiAiVFlQRSI7CisJ CWNhc2UgT0JKRUNUX1VTRVJfTUFQUElORzoKKwkJCXJldHVybiAiVVNFUiBNQVBQSU5HIjsKKwkJ Y2FzZSBPQkpFQ1RfVklFVzoKKwkJCXJldHVybiAiVklFVyI7CisKKwkJZGVmYXVsdDoKKwkJCWVs b2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIsIG9ianR5cGUpOworCX0KK30K KworLyoKKyAqIEdpdmVuIGEgQ29sbGVjdGVkQ29tbWFuZCwgcmV0dXJuIGEgSlNPTiByZXByZXNl bnRhdGlvbiBvZiBpdC4KKyAqCisgKiBUaGUgY29tbWFuZCBpcyBleHBhbmRlZCBmdWxseSwgc28g dGhhdCB0aGVyZSBhcmUgbm8gYW1iaWd1aXRpZXMgZXZlbiBpbiB0aGUKKyAqIGZhY2Ugb2Ygc2Vh cmNoX3BhdGggY2hhbmdlcy4KKyAqLworRGF0dW0KK2RkbF9kZXBhcnNlX3RvX2pzb24oUEdfRlVO Q1RJT05fQVJHUykKK3sKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQgPSAoQ29sbGVjdGVkQ29tbWFu ZCAqKSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKwljaGFyCQkgICAqY29tbWFuZDsKKworCWNvbW1h bmQgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIHRydWUpOworCisJaWYgKGNvbW1hbmQp CisJCVBHX1JFVFVSTl9URVhUX1AoQ1N0cmluZ0dldFRleHREYXR1bShjb21tYW5kKSk7CisKKwlQ R19SRVRVUk5fTlVMTCgpOworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckZ1bmN0aW9uU3Rt dCAoQUxURVIgRlVOQ1RJT04pCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBw YXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVz ZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0FsdGVyRnVuY3Rpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJG dW5jdGlvblN0bXQgKm5vZGUgPSAoQWx0ZXJGdW5jdGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9i alRyZWUJICAgKmFsdGVyRnVuYzsKKwlPYmpUcmVlCSAgICpzaWduOworCUhlYXBUdXBsZQlwcm9j VHVwOworCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlMaXN0CSAgICpwYXJhbXMgPSBOSUw7CisJ TGlzdAkgICAqZWxlbXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlpbnQJCQlpOworCisJ LyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlICovCisJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQ Uk9DT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1 IiwKKwkJCSBvYmplY3RJZCk7CisJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1Qo cHJvY1R1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBGVU5D VElPTiAle3NpZ25hdHVyZX1zICV7ZGVmaW5pdGlvbjogfXMKKwkgKi8KKwlhbHRlckZ1bmMgPSBu ZXdfb2JqdHJlZV9WQSgiQUxURVIgRlVOQ1RJT04iLCAwKTsKKworCS8qCisJICogQUxURVIgRlVO Q1RJT04gZG9lcyBub3QgY2hhbmdlIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlIGNhdGFsb2cKKwkg KiB0byBnZXQgaW5wdXQgdHlwZSBPaWRzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9y bS0+cHJvbmFyZ3M7IGkrKykKKwl7CisJCU9ialRyZWUJICAgKnRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCIle3R5cGV9VCIsIDApOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgInR5 cGUiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvYXJndHlwZXMu dmFsdWVzW2ldLCAtMSkpOworCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJfQorCisJc2lnbiA9IG5ld19vYmp0cmVlKCIiKTsKKworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHNpZ24sICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmpl Y3RJZCkpOworCWFwcGVuZF9hcnJheV9vYmplY3Qoc2lnbiwgIigle2FyZ3VtZW50czosIH1zKSIs IHBhcmFtcyk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckZ1bmMsICIle3NpZ25hdHVy ZX1zIiwgc2lnbik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPmFjdGlvbnMpCisJeworCQlEZWZF bGVtCSpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1w b2JqID0gTlVMTDsKKworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidm9sYXRpbGl0eSIp ID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKHN0clZhbChkZWZlbC0+YXJn KSwgMCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3RyaWN0Iikg PT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoaW50VmFsKGRlZmVsLT5hcmcp ID8KKwkJCQkJCQkJICJSRVRVUk5TIE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCQkgIkNB TExFRCBPTiBOVUxMIElOUFVUIiwgMCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5k ZWZuYW1lLCAic2VjdXJpdHkiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QShpbnRWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIlNFQ1VSSVRZIERFRklORVIiIDogIlNF Q1VSSVRZIElOVk9LRVIiLCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5h bWUsICJsZWFrcHJvb2YiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShp bnRWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIkxFQUtQUk9PRiIgOiAiTk9UIExFQUtQUk9P RiIsIDApOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImNvc3QiKSA9 PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQ09TVCAle2Nvc3R9biIsIDEs CisJCQkJCQkJCSAiY29zdCIsIE9ialR5cGVGbG9hdCwKKwkJCQkJCQkJIGRlZkdldE51bWVyaWMo ZGVmZWwpKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJyb3dzIikg PT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlJPV1MiLCAwKTsKKwkJCWlm IChkZWZHZXROdW1lcmljKGRlZmVsKSA9PSAwKQorCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBv YmosICJwcmVzZW50IiwgZmFsc2UpOworCQkJZWxzZQorCQkJCWFwcGVuZF9mbG9hdF9vYmplY3Qo dG1wb2JqLCAiJXtyb3dzfW4iLAorCQkJCQkJCQkJZGVmR2V0TnVtZXJpYyhkZWZlbCkpOworCQl9 CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09IDApCisJCXsKKwkJ CVZhcmlhYmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICopIGRlZmVsLT5hcmc7 CisJCQljaGFyICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0bXQpOworCisJCQl0 bXBvYmogPSBkZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+bmFtZSwgdmFs dWUpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN1cHBvcnQiKSA9 PSAwKQorCQl7CisJCQlPaWQJCQlhcmd0eXBlc1sxXTsKKworCQkJdG1wb2JqID0gbmV3X29ianRy ZWUoIlNVUFBPUlQiKTsKKworCQkJQXNzZXJ0KHByb2NGb3JtLT5wcm9zdXBwb3J0KTsKKworCQkJ LyoKKwkJCSAqIFdlIHNob3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3MgbmFtZSBp ZiBpdCB3b3VsZG4ndCBiZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGluIHRoZSBjdXJyZW50 IHNlYXJjaCBwYXRoLgorCQkJICovCisJCQlhcmd0eXBlc1swXSA9IElOVEVSTkFMT0lEOworCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtuYW1lfXMiLAorCQkJCQkJCQkgZ2VuZXJh dGVfZnVuY3Rpb25fbmFtZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwKKwkJCQkJCQkJCQkJCQkJ TklMLCBhcmd0eXBlcywKKwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEwsCisJCQkJCQkJCQkJCQkJ CUVYUFJfS0lORF9OT05FKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1l LCAicGFyYWxsZWwiKSA9PSAwKQorCQl7CisJCQljaGFyICpmbXQgPSBwc3ByaW50ZigiUEFSQUxM RUwgJXMiLCBzdHJWYWwoZGVmZWwtPmFyZykpOworCQkJdG1wb2JqID0gbmV3X29ianRyZWUoZm10 KTsKKwkJfQorCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlckZ1bmMsICIle2RlZmluaXRp b246IH1zIiwgZWxlbXMpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJu IGFsdGVyRnVuYzsKK30KKworLyoKKyAqIGRlcGFyc2UgYW4gQUxURVIgLi4uIFNFVCBTQ0hFTUEg Y29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck9iamVjdFNjaGVt YVN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQkJICBP YmplY3RBZGRyZXNzIG9sZHNjaGVtYSkKK3sKKwlBbHRlck9iamVjdFNjaGVtYVN0bXQgKm5vZGUg PSAoQWx0ZXJPYmplY3RTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICphbHRl clN0bXQ7CisJY2hhcgkgICAqZm10OworCWNoYXIJICAgKmlkZW50aXR5OworCWNoYXIJICAgKm5l d3NjaGVtYTsKKwljaGFyCSAgICpvbGRzY2huYW1lOworCWNoYXIJICAgKmlkZW50OworCisJbmV3 c2NoZW1hID0gbm9kZS0+bmV3c2NoZW1hOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAq CisJICogQUxURVIgJXMgJXtpZGVudGl0eX1zIFNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SQorCSAq LworCWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAlcyIsIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9i amVjdFR5cGUpKTsKKwlhbHRlclN0bXQgPSBuZXdfb2JqdHJlZShmbXQpOworCisJLyoKKwkgKiBT aW5jZSB0aGUgY29tbWFuZCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBmcm9tIHRoZSBwb2ludCBv ZiB2aWV3IG9mCisJICogY2F0YWxvZ3MsIGdldE9iamVjdElkZW50aXR5IHJldHVybnMgdGhlIG9i amVjdCBuYW1lIHdpdGggdGhlIGFscmVhZHkKKwkgKiBjaGFuZ2VkIHNjaGVtYS4gIFRoZSBvdXRw dXQgb2Ygb3VyIGRlcGFyc2luZyBtdXN0IHJldHVybiB0aGUgb3JpZ2luYWwKKwkgKiBzY2hlbWEg bmFtZSBob3dldmVyLCBzbyB3ZSBjaG9wIHRoZSBzY2hlbWEgbmFtZSBvZmYgdGhlIGlkZW50aXR5 IHN0cmluZworCSAqIGFuZCB0aGVuIHByZXBlbmQgdGhlIHF1b3RlZCBzY2hlbWEgbmFtZS4KKwkg KgorCSAqIFhYWCBUaGlzIGlzIHByZXR0eSBjbHVua3kuIENhbiB3ZSBkbyBiZXR0ZXI/CisJICov CisJaWRlbnRpdHkgPSBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpOworCW9sZHNj aG5hbWUgPSBnZXRfbmFtZXNwYWNlX25hbWUob2xkc2NoZW1hLm9iamVjdElkKTsKKwlpZiAoIW9s ZHNjaG5hbWUpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzY2hlbWEg d2l0aCBPSUQgJXUiLAorCQkJIG9sZHNjaGVtYS5vYmplY3RJZCk7CisKKwlpZGVudCA9IHBzcHJp bnRmKCIlcyVzIiwgcXVvdGVfaWRlbnRpZmllcihvbGRzY2huYW1lKSwKKwkJCQkJIGlkZW50aXR5 ICsgc3RybGVuKHF1b3RlX2lkZW50aWZpZXIobmV3c2NoZW1hKSkpOworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGFsdGVyU3RtdCwgIiV7aWRlbnRpdHl9cyIsIGlkZW50KTsKKworCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGFsdGVyU3RtdCwgIlNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SSIsIG5ld3NjaGVt YSk7CisKKwlyZXR1cm4gYWx0ZXJTdG10OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlck9w ZXJhdG9yU3RtdCAoQUxURVIgT1BFUkFUT1IgLi4uIFNFVCAuLi4pLgorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0FsdGVyT3BlcmF0b3JTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCUhlYXBUdXBsZSAgIAlvcHJUdXA7CisJQWx0ZXJPcGVyYXRvclN0bXQgKm5v ZGUgPSAoQWx0ZXJPcGVyYXRvclN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJCSAgICphbHRl cm9wOworCUZvcm1fcGdfb3BlcmF0b3Igb3ByRm9ybTsKKwlMaXN0Q2VsbAkgICAqY2VsbDsKKwlM aXN0CQkgICAqbGlzdCA9IE5JTDsKKworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVST0lE LCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9w clR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3 aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0b3IpIEdF VFNUUlVDVChvcHJUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQUxU RVIgT1BFUkFUT1IgJXtpZGVudGl0eX1PICgle2xlZnRfdHlwZX1ULCAle3JpZ2h0X3R5cGV9VCkg U0VUCisJICogKCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlhbHRlcm9wID0gbmV3X29ianRyZWVfVkEo IkFMVEVSIE9QRVJBVE9SICV7aWRlbnRpdHl9TyIsIDEsCisJCQkJCQkJICJpZGVudGl0eSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcHJGb3JtLT5v cHJuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wckZvcm0tPm9wcm5hbWUpKSk7 CisKKwkvKiBMRUZUQVJHICovCisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpCisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyb3AsICIoJXtsZWZ0X3R5cGV9VCIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcmxlZnQsIC0xKSk7CisJZWxzZQorCQlh cHBlbmRfc3RyaW5nX29iamVjdChhbHRlcm9wLCAiKCV7bGVmdF90eXBlfXMiLCAiTk9ORSIpOwor CisJLyogUklHSFRBUkcgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSk7 CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJvcCwgIiwgJXtyaWdodF90eXBlfVQpIiwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsKKworCWZv cmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gKmVsZW0gPSAoRGVmRWxl bSAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUgKnRtcG9iaiA9IE5VTEw7CisKKwkJaWYgKHN0 cmNtcChlbGVtLT5kZWZuYW1lLCAicmVzdHJpY3QiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiUkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAicmVzdHJpY3QiKTsKKwkJCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJlc3Qp KQorCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJCQllbHNlCisJCQkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9cyIsICJOT05FIik7CisJCX0KKwkJ ZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJqb2luIikgPT0gMCkKKwkJeworCQkJdG1w b2JqID0gbmV3X29ianRyZWVfVkEoIkpPSU49IiwgMSwKKwkJCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAiam9pbiIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3Byam9pbikp CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1zIiwgIk5PTkUiKTsKKwkJfQorCisJ CUFzc2VydCh0bXBvYmopOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyb3AsICJTRVQgKCV7 ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShvcHJUdXApOworCisJcmV0 dXJuIGFsdGVyb3A7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFMVEVSIE9QRVJBVE9SIEZBTUlM WSBBREQvRFJPUCBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVy T3BGYW1pbHkoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9ialRyZWUJICAgKmFsdGVyT3BG YW07CisJQWx0ZXJPcEZhbWlseVN0bXQgKnN0bXQgPSAoQWx0ZXJPcEZhbWlseVN0bXQgKikgY21k LT5wYXJzZXRyZWU7CisJSGVhcFR1cGxlCWZ0cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07 CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJZnRwID0gU2VhcmNoU3lz Q2FjaGUxKE9QRkFNSUxZT0lELAorCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGNtZC0+ZC5vcGZh bS5hZGRyZXNzLm9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZ0cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgJXUiLAor CQkJIGNtZC0+ZC5vcGZhbS5hZGRyZXNzLm9iamVjdElkKTsKKwlvcGZGb3JtID0gKEZvcm1fcGdf b3BmYW1pbHkpIEdFVFNUUlVDVChmdHApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAq CisJICogQUxURVIgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFtZX1J IEFERC9EUk9QCisJICogJXtpdGVtczosIH1zCisJICovCisJYWx0ZXJPcEZhbSA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EICIKKwkJCQkJCQkJIlVT SU5HICV7YW1uYW1lfUkiLCAyLAorCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJCQkgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSksCisJCQkJCQkJCSJhbW5h bWUiLCBPYmpUeXBlU3RyaW5nLCBzdG10LT5hbW5hbWUpOworCisJbGlzdCA9IE5JTDsKKwlmb3Jl YWNoKGNlbGwsIGNtZC0+ZC5vcGZhbS5vcGVyYXRvcnMpCisJeworCQlPcEZhbWlseU1lbWJlciAq b3BlciA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOworCisJCS8qCisJCSAq IFZlcmJvc2Ugc3ludGF4CisJCSAqCisJCSAqIE9QRVJBVE9SICV7bnVtfW4gJXtvcGVyYXRvcn1P KCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle3B1cnBvc2V9cworCQkgKi8KKwkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIk9QRVJBVE9SICV7bnVtfW4iLCAxLAorCQkJCQkJCSAibnVtIiwgT2JqVHlw ZUludGVnZXIsIG9wZXItPm51bWJlcik7CisKKwkJLyogQWRkIHRoZSBvcGVyYXRvciBuYW1lOyB0 aGUgRFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZSB0aGlzICovCisJCWlmICghc3RtdC0+aXNEcm9wKQor CQl7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle29wZXJhdG9yfU8iLAorCQkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJCSBvcGVyLT5vYmplY3QpKTsKKwkJfQorCisJCS8qIEFkZCB0aGUgdHlwZXMg Ki8KKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiKCV7bHR5cGV9VCwiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5sZWZ0dHlwZSwgLTEpKTsKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wb2JqLCAiJXtydHlwZX1UKSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl90eXBlKG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQgdGhlIEZPUiBTRUFSQ0gg LyBGT1IgT1JERVIgQlkgY2xhdXNlOyBub3QgaW4gdGhlIERST1AgY2FzZSAqLworCQlpZiAoIXN0 bXQtPmlzRHJvcCkKKwkJeworCQkJaWYgKG9wZXItPnNvcnRmYW1pbHkgPT0gSW52YWxpZE9pZCkK KwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3B1cnBvc2V9cyIsICJGT1IgU0VB UkNIIik7CisJCQllbHNlCisJCQl7CisJCQkJT2JqVHJlZQkgICAqdG1wb2JqMjsKKworCQkJCXRt cG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiRk9SIE9SREVSIEJZIiwgMCk7CisJCQkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wb2JqMiwgIiV7b3BmYW1pbHl9RCIsCisJCQkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yRmFtaWx5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkJCQkgb3Blci0+c29ydGZhbWlseSkpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9i aiwgIiV7cHVycG9zZX1zIiwgdG1wb2JqMik7CisJCQl9CisJCX0KKworCQlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlmb3JlYWNoKGNlbGws IGNtZC0+ZC5vcGZhbS5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKnByb2MgPSBs Zmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRtcG9iajsKKworCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiRlVOQ1RJT04gJXtudW19biAoJXtsdHlwZX1ULCAle3J0eXBlfVQpIiwgMywKKwkJ CQkJCQkgIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBwcm9jLT5udW1iZXIsCisJCQkJCQkJICJsdHlw ZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPmxl ZnR0eXBlLCAtMSksCisJCQkJCQkJICJydHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQgdGhl IGZ1bmN0aW9uIG5hbWUgYW5kIGFyZyB0eXBlczsgdGhlIERST1AgY2FzZSBkb2Vzbid0IGhhdmUg dGhpcyAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJSGVhcFR1cGxlCXByb2NUdXA7 CisJCQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJCQlPaWQJCSAgICpwcm9hcmd0eXBlczsKKwkJ CUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7CisJCQlpbnQJCQlpOworCisJCQlwcm9jVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvYy0+b2JqZWN0KSk7CisJ CQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2MtPm9iamVjdCk7CisJCQlwcm9j Rm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCQkJcHJvYXJndHlw ZXMgPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzOworCQkJZm9yIChpID0gMDsgaSA8IHBy b2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCQkJeworCQkJCU9ialRyZWUJICAgKmFyZzsKKworCQkJ CWFyZyA9IG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2FyZ3R5cGVzW2ldLCAtMSk7CisJCQkJYXJn bGlzdCA9IGxhcHBlbmQoYXJnbGlzdCwgbmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJCQl9CisK KwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7ZnVuY3Rpb259RCIsCisJCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCQkJICBOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSkpOworCisJCQlhcHBlbmRfZm9y bWF0X3N0cmluZyh0bXBvYmosICIoIik7CisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwg IiV7YXJndHlwZXM6LCB9VCIsIGFyZ2xpc3QpOworCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1w b2JqLCAiKSIpOworCisJCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJCX0KKworCQlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlpZiAo c3RtdC0+aXNEcm9wKQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlck9wRmFtLCAiRFJPUCIp OworCWVsc2UKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJPcEZhbSwgIkFERCIpOworCisJ YXBwZW5kX2FycmF5X29iamVjdChhbHRlck9wRmFtLCAiJXtpdGVtczosIH1zIiwgbGlzdCk7CisK KwlSZWxlYXNlU3lzQ2FjaGUoZnRwKTsKKworCXJldHVybiBhbHRlck9wRmFtOworfQorCisvKgor ICogRGVwYXJzZSBhIEFsdGVyT3duZXJTdG10IChBTFRFUiAuLi4gT1dORVIgVE8gLi4uKS4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck93bmVyU3RtdChPYmplY3RBZGRyZXNz IGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlck93bmVyU3RtdCAqbm9kZSA9IChB bHRlck93bmVyU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJICAgKm93bmVyU3RtdDsKKwlj aGFyCQkgICAqZm10OworCisJZm10ID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50aXR5fXMg T1dORVIgVE8gJSV7bmV3b3duZXJ9SSIsCisJCQkJICAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+ b2JqZWN0VHlwZSkpOworCisJb3duZXJTdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJ CQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJICAgZ2V0T2JqZWN0SWRl bnRpdHkoJmFkZHJlc3MsIGZhbHNlKSwKKwkJCQkJCQkgICAibmV3b3duZXIiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCSAgIGdldF9yb2xlc3BlY19uYW1lKG5vZGUtPm5ld293bmVyKSk7CisKKwly ZXR1cm4gb3duZXJTdG10OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclNlcVN0bXQuCisg KgorICogR2l2ZW4gYSBzZXF1ZW5jZSBPSUQgYW5kIGEgcGFyc2V0cmVlIHRoYXQgbW9kaWZpZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJTZXFTdG10KE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUJCSphbHRlclNlcTsKKwlPYmpUcmVlCQkq dG1wb2JqOworCVJlbGF0aW9uCSByZWxhdGlvbjsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2Vx ZGF0YTsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUZvcm1f cGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxl OworCUFsdGVyU2VxU3RtdCAqYWx0ZXJTZXFTdG10ID0gKEFsdGVyU2VxU3RtdCAqKSBwYXJzZXRy ZWU7CisKKwkvKgorCSAqIFNlcXVlbmNlIGZvciBJREVOVElUWSBDT0xVTU4gb3V0cHV0IHNlcGFy YXRlbHkodmlhIENSRUFURSBUQUJMRSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0dXJuIGVtcHR5 IGhlcmUuCisJICovCisJaWYgKGFsdGVyU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1cm4g TlVMTDsKKworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElkKTsKKworCXJl bGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZWwg PSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2Vx dHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkgICBPYmplY3RJ ZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlICV1IiwKKwkJ CSBvYmplY3RJZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChz ZXF0dXBsZSk7CisKKwlhbHRlclNlcSA9IG5ld19vYmp0cmVlKCJBTFRFUiBTRVFVRU5DRSIpOwor CisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJl bG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24p KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclNlcSwgIiV7aWRlbnRpdHl9RCIsIHRtcG9i aik7CisKKwlmb3JlYWNoKGNlbGwsICgoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZSktPm9wdGlv bnMpCisJeworCQlEZWZFbGVtICplbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlP YmpFbGVtICpuZXdlbG07CisKKwkJaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiY2FjaGUiKSA9 PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfQ2FjaGUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZh bHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjeWNsZSIpID09IDApCisJ CQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DeWNsZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOwor CQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImluY3JlbWVudCIpID09IDApCisJCQlu ZXdlbG0gPSBkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2Up OworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm1pbnZhbHVlIikgPT0gMCkKKwkJ CW5ld2VsbSA9IGRlcGFyc2VfU2VxX01pbnZhbHVlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7 CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWF4dmFsdWUiKSA9PSAwKQorCQkJ bmV3ZWxtID0gZGVwYXJzZV9TZXFfTWF4dmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsK KwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJzdGFydCIpID09IDApCisJCQluZXdl bG0gPSBkZXBhcnNlX1NlcV9TdGFydHdpdGgoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsKKwkJ ZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJyZXN0YXJ0IikgPT0gMCkKKwkJCW5ld2Vs bSA9IGRlcGFyc2VfU2VxX1Jlc3RhcnQoYWx0ZXJTZXEsIHNlcWRhdGEpOworCQllbHNlIGlmIChz dHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm93bmVkX2J5IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFy c2VfU2VxX093bmVkQnkoYWx0ZXJTZXEsIG9iamVjdElkLCBmYWxzZSk7CisJCWVsc2UKKwkJCWVs b2coRVJST1IsICJpbnZhbGlkIHNlcXVlbmNlIG9wdGlvbiAlcyIsIGVsZW0tPmRlZm5hbWUpOwor CisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3ZWxtKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlf b2JqZWN0KGFsdGVyU2VxLCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCXRhYmxlX2Ns b3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gYWx0ZXJTZXE7Cit9CisKKy8qCisgKiBEZXBhcnNl IGFuIEFsdGVyVHlwZVN0bXQuCisgKgorICogR2l2ZW4gYSB0eXBlIE9JRCBhbmQgYSBwYXJzZXRy ZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0 aGUgYWx0ZXIgdHlwZS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclR5cGVT ZXRTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqY21kKQoreworCUFsdGVyVHlwZVN0bXQgKmFsdGVy VHlwZVNldFN0bXQgPSAoQWx0ZXJUeXBlU3RtdCAqKWNtZDsKKwlPYmpUcmVlCQkqYWx0ZXJUeXBl OworCUxpc3RDZWxsICAgKnBsOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUhlYXBUdXBsZSAg IHR5cFR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0Nh Y2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciB0eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBl KSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCWFsdGVyVHlwZSA9IG5ld19vYmp0cmVlKCJBTFRFUiBU WVBFIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJUeXBlLCAiJXtpZGVudGl0eX1EIFNF VCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJZm9yZWFjaChwbCwgYWx0ZXJUeXBlU2V0U3Rt dC0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0 KHBsKTsKKwkJT2JqRWxlbSAqbmV3ZWxtOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUs ICJzdG9yYWdlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9TdG9yYWdlKGFsdGVy VHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJyZWNlaXZlIikg PT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9SZWNlaXZlKGFsdGVyVHlwZSwgdHlwRm9y bSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZW5kIikgPT0gMCkKKwkJCW5ld2Vs bSA9IGRlcGFyc2VfVHlwZV9TZW5kKGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAo ZGVmZWwtPmRlZm5hbWUsICJ0eXBtb2RfaW4iKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9U eXBlX1R5cG1vZF9JbihhbHRlclR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5k ZWZuYW1lLCAidHlwbW9kX291dCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfVHlw bW9kX091dChhbHRlclR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1l LCAiYW5hbHl6ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfQW5hbHl6ZShhbHRl clR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3Vic2NyaXB0 IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9TdWJzY3JpcHQoYWx0ZXJUeXBlLCB0 eXBGb3JtKTsKKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgdHlwZSBvcHRpb24gJXMi LCBkZWZlbC0+ZGVmbmFtZSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOwor CX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJUeXBlLCAiKCV7ZGVmaW5pdGlvbjogfXMp IiwgZWxlbXMpOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gYWx0ZXJU eXBlOworfQorCisvKgorICogRGVwYXJzZSBhIENvbXBvc2l0ZVR5cGVTdG10IChDUkVBVEUgVFlQ RSBBUykKKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24g Y29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db21wb3NpdGVUeXBlU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDb21wb3NpdGVUeXBlU3RtdCAq bm9kZSA9IChDb21wb3NpdGVUeXBlU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqY29t cG9zaXRlOworCUhlYXBUdXBsZQl0eXB0dXA7CisJRm9ybV9wZ190eXBlIHR5cGZvcm07CisJUmVs YXRpb24JdHlwZXJlbDsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJTGlzdAkgICAqdGFibGVlbHRz ID0gTklMOworCisJLyogRmluZCB0aGUgcGdfdHlwZSBlbnRyeSBhbmQgb3BlbiB0aGUgY29ycmVz cG9uZGluZyByZWxhdGlvbiAqLworCXR5cHR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBP YmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cHR1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlICV1Iiwgb2Jq ZWN0SWQpOworCXR5cGZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwdHVwKTsKKwl0 eXBlcmVsID0gcmVsYXRpb25fb3Blbih0eXBmb3JtLT50eXByZWxpZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUodHlwZXJlbCksCisJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHR5cGVyZWwpKTsKKwor CWNvbXBvc2l0ZSA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSIsIDApOworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNvbXBvc2l0ZSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJ ZCkpOworCisJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHR5cGVyZWwsIG5vZGUt PmNvbGRlZmxpc3QsIGRwY29udGV4dCwKKwkJCQkJCQkJCSAgZmFsc2UsCQkvKiBub3QgdHlwZWQg Ki8KKwkJCQkJCQkJCSAgdHJ1ZSk7CQkvKiBjb21wb3NpdGUgdHlwZSAqLworCisJYXBwZW5kX2Fy cmF5X29iamVjdChjb21wb3NpdGUsICJBUyAoJXtjb2x1bW5zOiwgfXMpIiwgdGFibGVlbHRzKTsK KworCXRhYmxlX2Nsb3NlKHR5cGVyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJUmVsZWFzZVN5c0Nh Y2hlKHR5cHR1cCk7CisKKwlyZXR1cm4gY29tcG9zaXRlOworfQorCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0NyZWF0ZUNvbnZlcnNpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJSGVhcFR1cGxlICAgY29uVHVwOworCVJlbGF0aW9uCWNvbnZyZWw7CisJRm9ybV9wZ19j b252ZXJzaW9uIGNvbkZvcm07CisJT2JqVHJlZQkgICAqY2NTdG10LCAqdG1wT2JqOworCisJY29u dnJlbCA9IHRhYmxlX29wZW4oQ29udmVyc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisJY29uVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjb252cmVsLCBBbnVtX3BnX2Nv bnZlcnNpb25fb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb252ZXJzaW9uIHdpdGgg T0lEICV1Iiwgb2JqZWN0SWQpOworCWNvbkZvcm0gPSAoRm9ybV9wZ19jb252ZXJzaW9uKSBHRVRT VFJVQ1QoY29uVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFU RSAle2RlZmF1bHR9cyBDT05WRVJTSU9OICV7aWRlbnRpdHl9RCBGT1IgJXtzb3VyY2V9TCBUTyAl e2Rlc3R9TAorCSAqIEZST00gJXtmdW5jdGlvbn1ECisJICovCisJY2NTdG10ID0gbmV3X29ianRy ZWUoIkNSRUFURSIpOworCisKKwkvKiBBZGQgdGhlIERFRkFVTFQgY2xhdXNlICovCisJYXBwZW5k X3N0cmluZ19vYmplY3QoY2NTdG10LCAiZGVmYXVsdCIsCisJCQkJCQkgY29uRm9ybS0+Y29uZGVm YXVsdCA/ICJERUZBVUxUIiA6ICIiKTsKKworCXRtcE9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShjb25Gb3JtLT5jb25uYW1lc3BhY2UsIE5hbWVTdHIoY29uRm9ybS0+Y29ubmFtZSkpOwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNjU3RtdCwgIkNPTlZFUlNJT04gJXtpZGVudGl0eX1EIiwg dG1wT2JqKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjY1N0bXQsICJGT1IgJXtzb3VyY2V9TCIs IChjaGFyICopCisJCQkJCQkgcGdfZW5jb2RpbmdfdG9fY2hhcihjb25Gb3JtLT5jb25mb3JlbmNv ZGluZykpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNjU3RtdCwgIlRPICV7ZGVzdH1MIiwgKGNo YXIgKikKKwkJCQkJCSBwZ19lbmNvZGluZ190b19jaGFyKGNvbkZvcm0tPmNvbnRvZW5jb2Rpbmcp KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjY1N0bXQsICJGUk9NICV7ZnVuY3Rpb259RCIsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJIGNvbkZvcm0tPmNvbnByb2MpKTsKKworCXRhYmxlX2Nsb3NlKGNvbnZyZWws IEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY2NTdG10OworfQorCisvKgorICogRGVwYXJz ZSBhIENyZWF0ZUVudW1TdG10IChDUkVBVEUgVFlQRSBBUyBFTlVNKQorICoKKyAqIEdpdmVuIGEg dHlwZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2Jq VHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUVudW1TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCUNyZWF0ZUVudW1TdG10ICpub2RlID0gKENyZWF0ZUVudW1TdG10ICopIHBh cnNldHJlZTsKKwlPYmpUcmVlCSAgICplbnVtdHlwZTsKKwlMaXN0CSAgICp2YWx1ZXM7CisJTGlz dENlbGwgICAqY2VsbDsKKworCWVudW10eXBlID0gbmV3X29ianRyZWUoIkNSRUFURSBUWVBFIik7 CisJYXBwZW5kX29iamVjdF9vYmplY3QoZW51bXR5cGUsICIle2lkZW50aXR5fUQiLAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkgb2JqZWN0SWQpKTsKKworCXZhbHVlcyA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPnZh bHMpCisJeworCQlTdHJpbmcgICAqdmFsID0gbGZpcnN0X25vZGUoU3RyaW5nLCBjZWxsKTsKKwor CQl2YWx1ZXMgPSBsYXBwZW5kKHZhbHVlcywgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKHZhbCkp KTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGVudW10eXBlLCAiQVMgRU5VTSAoJXt2YWx1 ZXM6LCB9TCkiLCB2YWx1ZXMpOworCXJldHVybiBlbnVtdHlwZTsKK30KKworLyoKKyAqIGRlcGFy c2VfQ3JlYXRlRXh0ZW5zaW9uU3RtdAorICoJCWRlcGFyc2UgYSBDcmVhdGVFeHRlbnNpb25TdG10 CisgKgorICogR2l2ZW4gYW4gZXh0ZW5zaW9uIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNy ZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRpbmcgdGhlIGNyZWF0 aW9uIGNvbW1hbmQuCisgKgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUV4 dGVuc2lvblN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRXh0 ZW5zaW9uU3RtdCAqbm9kZSA9IChDcmVhdGVFeHRlbnNpb25TdG10ICopIHBhcnNldHJlZTsKKwlS ZWxhdGlvbiAgICBwZ19leHRlbnNpb247CisJSGVhcFR1cGxlICAgZXh0VHVwOworCUZvcm1fcGdf ZXh0ZW5zaW9uIGV4dEZvcm07CisJT2JqVHJlZQkgICAqZXh0U3RtdDsKKwlPYmpUcmVlCSAgICp0 bXA7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkgKiBWZXJi b3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIEVYVEVOU0lPTiAle2lmX25vdF9leGlzdHN9cyAl e2lkZW50aXR5fUkgJXtvcHRpb25zOiB9cworCSAqLworCisJcGdfZXh0ZW5zaW9uID0gdGFibGVf b3BlbihFeHRlbnNpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWV4dFR1cCA9IGdl dF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfZXh0ZW5zaW9uLCBBbnVtX3BnX2V4dGVuc2lvbl9v aWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZXh0VHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGV4dGVuc2lvbiB3aXRoIE9JRCAldSIsCisJ CQkgb2JqZWN0SWQpOworCWV4dEZvcm0gPSAoRm9ybV9wZ19leHRlbnNpb24pIEdFVFNUUlVDVChl eHRUdXApOworCisJZXh0U3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUgRVhURU5TSU9OIik7CisK KwlhcHBlbmRfc3RyaW5nX29iamVjdChleHRTdG10LCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJ CQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwlhcHBl bmRfc3RyaW5nX29iamVjdChleHRTdG10LCAiJXtuYW1lfUkiLCBub2RlLT5leHRuYW1lKTsKKwor CS8qIExpc3Qgb2Ygb3B0aW9ucyAqLworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBub2Rl LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwp OworCisJCWlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAic2NoZW1hIikgPT0gMCkKKwkJeworCQkJ Lyogc2tpcCB0aGlzIG9uZTsgd2UgYWRkIG9uZSB1bmNvbmRpdGlvbmFsbHkgYmVsb3cgKi8KKwkJ CWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJuZXdfdmVy c2lvbiIpID09IDApCisJCXsKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWRVJTSU9OICV7dmVy c2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZlcnNpb24iLAor CQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmcob3B0KSk7CisJ CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQll bHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAib2xkX3ZlcnNpb24iKSA9PSAwKQorCQl7CisJ CQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRlJPTSAle3ZlcnNpb259TCIsIDIsCisJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJmcm9tIiwKKwkJCQkJCQkJICJ2ZXJzaW9uIiwgT2JqVHlw ZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgInVuc3Vw cG9ydGVkIG9wdGlvbiAlcyIsIG9wdC0+ZGVmbmFtZSk7CisJfQorCisJLyogQWRkIHRoZSBTQ0hF TUEgb3B0aW9uICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNDSEVNQSAle3NjaGVtYX1JIiwK KwkJCQkJCSAyLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzY2hlbWEiLAorCQkJCQkJICJzY2hl bWEiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9uYW1lc3BhY2VfbmFtZShleHRGb3JtLT5l eHRuYW1lc3BhY2UpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCS8qIGRvbmUgKi8KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGV4dFN0bXQsICIle29w dGlvbnM6IH1zIiwgbGlzdCk7CisKKwl0YWJsZV9jbG9zZShwZ19leHRlbnNpb24sIEFjY2Vzc1No YXJlTG9jayk7CisKKwlyZXR1cm4gZXh0U3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVB VEUgVFlQRSBBUyBSQU5HRSBzdGF0ZW1lbnQKKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCB0 aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJl c2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9DcmVhdGVSYW5nZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJ T2JqVHJlZQkgICAqcmFuZ2U7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmRlZmluaXRp b24gPSBOSUw7CisJUmVsYXRpb24JcGdfcmFuZ2U7CisJSGVhcFR1cGxlCXJhbmdlVHVwOworCUZv cm1fcGdfcmFuZ2UgcmFuZ2VGb3JtOworCVNjYW5LZXlEYXRhIGtleVsxXTsKKwlTeXNTY2FuRGVz YyBzY2FuOworCisJcGdfcmFuZ2UgPSB0YWJsZV9vcGVuKFJhbmdlUmVsYXRpb25JZCwgUm93RXhj bHVzaXZlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgma2V5WzBdLAorCQkJCUFudW1fcGdfcmFuZ2Vf cm5ndHlwaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVj dElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdf cmFuZ2UsIFJhbmdlVHlwaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMSwga2V5KTsK KworCXJhbmdlVHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQocmFuZ2VUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig cmFuZ2Ugd2l0aCB0eXBlIG9pZCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJcmFuZ2VGb3JtID0g KEZvcm1fcGdfcmFuZ2UpIEdFVFNUUlVDVChyYW5nZVR1cCk7CisKKwlyYW5nZSA9IG5ld19vYmp0 cmVlX1ZBKCJDUkVBVEUgVFlQRSIsIDApOworCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0SWQpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJh bmdlLCAiJXtpZGVudGl0eX1EIEFTIFJBTkdFIiwgdG1wKTsKKworCS8qIFNVQlRZUEUgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJ CQkgIHJhbmdlRm9ybS0+cm5nc3VidHlwZSk7CisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNVQlRZ UEUgPSAle3R5cGV9RCIsCisJCQkJCQkgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgInN1YnR5cGUiLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwgdG1wKTsKKwlkZWZp bml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CS8qIFNVQlRZUEVfT1BDTEFTUyAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nc3Vi b3BjKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvckNs YXNzUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nc3Vib3BjKTsKKwkJdG1w ID0gbmV3X29ianRyZWVfVkEoIlNVQlRZUEVfT1BDTEFTUyA9ICV7b3BjbGFzc31EIiwKKwkJCQkJ CQkgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJvcGNsYXNzIiwKKwkJCQkJ CQkgIm9wY2xhc3MiLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFwcGVu ZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBDT0xMQVRJ T04gKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ2NvbGxhdGlvbikpCisJeworCQl0 bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nY29sbGF0aW9uKTsKKwkJdG1wID0gbmV3X29ianRyZWVf VkEoIkNPTExBVElPTiA9ICV7Y29sbGF0aW9ufUQiLAorCQkJCQkJCSAyLAorCQkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgImNvbGxhdGlvbiIsCisJCQkJCQkJICJjb2xsYXRpb24iLCBP YmpUeXBlT2JqZWN0LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBDQU5PTklDQUwgKi8KKwlpZiAoT2lk SXNWYWxpZChyYW5nZUZvcm0tPnJuZ2Nhbm9uaWNhbCkpCisJeworCQl0bXAgPSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHJhbmdl Rm9ybS0+cm5nY2Fub25pY2FsKTsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkNBTk9OSUNBTCA9 ICV7Y2Fub25pY2FsfUQiLAorCQkJCQkJCSAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgImNhbm9uaWNhbCIsCisJCQkJCQkJICJjYW5vbmljYWwiLCBPYmpUeXBlT2JqZWN0LCB0 bXApOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKwl9CisKKwkvKiBTVUJUWVBFX0RJRkYgKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5n ZUZvcm0tPnJuZ3N1YmRpZmYpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICByYW5nZUZvcm0tPnJuZ3N1YmRp ZmYpOworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRV9ESUZGID0gJXtzdWJ0eXBlX2Rp ZmZ9RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3Vi dHlwZV9kaWZmIiwKKwkJCQkJCQkgInN1YnR5cGVfZGlmZiIsIE9ialR5cGVPYmplY3QsIHRtcCk7 CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmFuZ2UsICIoJXtkZWZpbml0aW9uOiwg fXMpIiwgZGVmaW5pdGlvbik7CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Ns b3NlKHBnX3JhbmdlLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiByYW5nZTsKK30KKwor LyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJFbnVtU3RtdC4KKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lE IGFuZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICog cmVwcmVzZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0FsdGVyRW51bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0 ZXJFbnVtU3RtdCAqbm9kZSA9IChBbHRlckVudW1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVl CSAgICphbHRlckVudW07CisKKwlhbHRlckVudW0gPQluZXdfb2JqdHJlZV9WQSgiQUxURVIgVFlQ RSIsIDApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRW51bSwgIiV7aWRlbnRpdHl9RCIs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJaWYgKCFub2RlLT5vbGRWYWwpCisJeworCQlhcHBl bmRfZm9ybWF0X3N0cmluZyhhbHRlckVudW0sICJBREQgVkFMVUUiKTsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QoYWx0ZXJFbnVtLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJCW5vZGUtPnNr aXBJZk5ld1ZhbEV4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCQlhcHBlbmRfc3Ry aW5nX29iamVjdChhbHRlckVudW0sICIle3ZhbHVlfUwiLCBub2RlLT5uZXdWYWwpOworCisJCWlm IChub2RlLT5uZXdWYWxOZWlnaGJvcikKKwkJeworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0 ZXJFbnVtLCAiJXthZnRlcl9vcl9iZWZvcmV9cyIsCisJCQkJCQkJCW5vZGUtPm5ld1ZhbElzQWZ0 ZXIgPyAiQUZURVIiIDogIkJFRk9SRSIpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJF bnVtLCAiJXtuZWlnaGJvdXJ9TCIsIG5vZGUtPm5ld1ZhbE5laWdoYm9yKTsKKwkJfQorCX0KKwll bHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVudW0sICJSRU5BTUUgVkFMVUUg JXt2YWx1ZX1MIFRPIiwKKwkJCQkJCQkgbm9kZS0+b2xkVmFsKTsKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QoYWx0ZXJFbnVtLCAiJXtuZXd2YWx1ZX1MIiwKKwkJCQkJCQkgbm9kZS0+bmV3VmFsKTsK Kwl9CisKKwlyZXR1cm4gYWx0ZXJFbnVtOworfQorCisvKgorICogRGVwYXJzZSBBTFRFUiBFWFRF TlNJT04gLi4gVVBEQVRFIFRPIFZFUlNJT04KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9BbHRlckV4dGVuc2lvblN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJ QWx0ZXJFeHRlbnNpb25TdG10ICpub2RlID0gKEFsdGVyRXh0ZW5zaW9uU3RtdCAqKSBwYXJzZXRy ZWU7CisJUmVsYXRpb24gICAgcGdfZXh0ZW5zaW9uOworCUhlYXBUdXBsZSAgIGV4dFR1cDsKKwlG b3JtX3BnX2V4dGVuc2lvbiBleHRGb3JtOworCU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkg ICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCXBn X2V4dGVuc2lvbiA9IHRhYmxlX29wZW4oRXh0ZW5zaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVM b2NrKTsKKwlleHRUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX2V4dGVuc2lvbiwg QW51bV9wZ19leHRlbnNpb25fb2lkLCAgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChleHRUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZXh0ZW5z aW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJZXh0Rm9ybSA9IChGb3JtX3BnX2V4 dGVuc2lvbikgR0VUU1RSVUNUKGV4dFR1cCk7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIEVYVEVOU0lPTiAle2lkZW50aXR5fUQgVVBEQVRFIiwgMSwKKwkJCQkJCSAgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGV4dEZv cm0tPmV4dG5hbWVzcGFjZSwKKwkJCQkJCQkgIAkJCQkJICAgTmFtZVN0cihleHRGb3JtLT5leHRu YW1lKSkpOworCisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVt ICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKHN0cmNtcChvcHQtPmRl Zm5hbWUsICJuZXdfdmVyc2lvbiIpID09IDApCisJCXsKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJUTyAle3ZlcnNpb259TCIsIDIsCisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2 ZXJzaW9uIiwKKwkJCQkJCQkJICJ2ZXJzaW9uIiwgT2JqVHlwZVN0cmluZywgZGVmR2V0U3RyaW5n KG9wdCkpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisJCX0KKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9wdGlvbiAlcyIsIG9w dC0+ZGVmbmFtZSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiJXtvcHRpb25z OiB9cyIsIGxpc3QpOworCisJdGFibGVfY2xvc2UocGdfZXh0ZW5zaW9uLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJcmV0dXJuIHN0bXQ7Cit9CisKKy8qCisgKiBBTFRFUiBFWFRFTlNJT04gZXh0IEFE RC9EUk9QIG9iamVjdAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRXh0ZW5z aW9uQ29udGVudHNTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJCQkg ICBPYmplY3RBZGRyZXNzIG9iamVjdEFkZHJlc3MpCit7CisJQWx0ZXJFeHRlbnNpb25Db250ZW50 c1N0bXQgKm5vZGUgPSAoQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUJICAgKnN0bXQ7CisJY2hhcgkgICAqZm10OworCisJQXNzZXJ0KG5vZGUtPmFjdGlv biA9PSArMSB8fCBub2RlLT5hY3Rpb24gPT0gLTEpOworCisJZm10ID0gcHNwcmludGYoIkFMVEVS IEVYVEVOU0lPTiAlJXtleHRpZGVudGl0eX1JICVzICVzICUle29iamlkZW50aXR5fXMiLAorCQkJ CSAgIG5vZGUtPmFjdGlvbiA9PSArMSA/ICJBREQiIDogIkRST1AiLAorCQkJCSAgIHN0cmluZ2lm eV9vYmp0eXBlKG5vZGUtPm9ianR5cGUpKTsKKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQs IDIsICJleHRpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIG5vZGUtPmV4dG5hbWUs CisJCQkJCQkgICJvYmppZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIGdldE9iamVj dElkZW50aXR5KCZvYmplY3RBZGRyZXNzLCBmYWxzZSkpOworCisJcmV0dXJuIHN0bXQ7Cit9Cisv KgorICogRGVwYXJzZSBhbiBDcmVhdGVDYXN0U3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNl IE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUK KyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9DcmVhdGVDYXN0U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJl ZSkKK3sKKwlDcmVhdGVDYXN0U3RtdCAqbm9kZSA9IChDcmVhdGVDYXN0U3RtdCAqKSBwYXJzZXRy ZWU7CisJUmVsYXRpb24JY2FzdHJlbDsKKwlIZWFwVHVwbGUJY2FzdFR1cDsKKwlGb3JtX3BnX2Nh c3QgY2FzdEZvcm07CisJT2JqVHJlZQkgICAqY3JlYXRlQ2FzdDsKKwljaGFyCSAgICpjb250ZXh0 OworCisJY2FzdHJlbCA9IHRhYmxlX29wZW4oQ2FzdFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJY2FzdFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY2FzdHJlbCwgQW51bV9w Z19jYXN0X29pZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjYXN0VHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNhc3Qgd2l0aCBPSUQgJXUi LCBvYmplY3RJZCk7CisJY2FzdEZvcm0gPSAoRm9ybV9wZ19jYXN0KSBHRVRTVFJVQ1QoY2FzdFR1 cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgQ0FTVCAoJXtz b3VyY2V0eXBlfVQgQVMgJXt0YXJnZXR0eXBlfVQpICV7bWVjaGFuaXNtfXMgJXtjb250ZXh0fXMK KwkgKi8KKwljcmVhdGVDYXN0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBDQVNUICgle3NvdXJj ZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9VCkiLAorCQkJCQkJCQkyLCAic291cmNldHlwZSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0 c291cmNlLCAtMSksCisJCQkJCQkJCSJ0YXJnZXR0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CQkJbmV3X29ianRyZWVfZm9yX3R5cGUoY2FzdEZvcm0tPmNhc3R0YXJnZXQsIC0xKSk7CisKKwlp ZiAobm9kZS0+aW5vdXQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUNhc3QsICIle21l Y2hhbmlzbX1zIiwgIldJVEggSU5PVVQiKTsKKwllbHNlIGlmIChub2RlLT5mdW5jID09IE5VTEwp CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUNhc3QsICIle21lY2hhbmlzbX1zIiwgIldJ VEhPVVQgRlVOQ1RJT04iKTsKKwllbHNlCisJeworCQlPYmpUcmVlCSAgICp0bXBvYmo7CisJCVN0 cmluZ0luZm9EYXRhIGZ1bmM7CisJCUhlYXBUdXBsZQlmdW5jVHVwOworCQlGb3JtX3BnX3Byb2Mg ZnVuY0Zvcm07CisJCWludAkJCWk7CisKKwkJZnVuY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9D T0lELCBjYXN0Rm9ybS0+Y2FzdGZ1bmMpOworCQlmdW5jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdF VFNUUlVDVChmdW5jVHVwKTsKKworCQlpbml0U3RyaW5nSW5mbygmZnVuYyk7CisJCWFwcGVuZFN0 cmluZ0luZm8oJmZ1bmMsICIlcygiLAorCQkJCQkJcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIo Z2V0X25hbWVzcGFjZV9uYW1lKGZ1bmNGb3JtLT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJ ICAgTmFtZVN0cihmdW5jRm9ybS0+cHJvbmFtZSkpKTsKKwkJZm9yIChpID0gMDsgaSA8IGZ1bmNG b3JtLT5wcm9uYXJnczsgaSsrKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZnVuYywKKwkJ CQkJCQkJICAgZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKGZ1bmNGb3JtLT5wcm9hcmd0eXBlcy52 YWx1ZXNbaV0pKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmZ1bmMsICcpJyk7CisKKwkJdG1w b2JqID0gbmV3X29ianRyZWVfVkEoIldJVEggRlVOQ1RJT04gJXtjYXN0ZnVuY3Rpb259cyIsIDEs CisJCQkJCQkJICJjYXN0ZnVuY3Rpb24iLCBPYmpUeXBlU3RyaW5nLCBmdW5jLmRhdGEpOworCQlh cHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVDYXN0LCAiJXttZWNoYW5pc219cyIsIHRtcG9iaik7 CisKKwkJUmVsZWFzZVN5c0NhY2hlKGZ1bmNUdXApOworCX0KKworCXN3aXRjaCAobm9kZS0+Y29u dGV4dCkKKwl7CisJCWNhc2UgQ09FUkNJT05fSU1QTElDSVQ6CisJCQljb250ZXh0ID0gIkFTIElN UExJQ0lUIjsKKwkJCWJyZWFrOworCQljYXNlIENPRVJDSU9OX0FTU0lHTk1FTlQ6CisJCQljb250 ZXh0ID0gIkFTIEFTU0lHTk1FTlQiOworCQkJYnJlYWs7CisJCWNhc2UgQ09FUkNJT05fRVhQTElD SVQ6CisJCQljb250ZXh0ID0gIiI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJS T1IsICJpbnZhbGlkIGNvZXJjaW9uIGNvZGUgJWMiLCBub2RlLT5jb250ZXh0KTsKKwkJCXJldHVy biBOVUxMOwkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCisJfQorCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGNyZWF0ZUNhc3QsICIle2NvbnRleHR9cyIsIGNvbnRleHQpOworCisJdGFibGVfY2xvc2Uo Y2FzdHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVDYXN0OworfQorCisv KgorICogRGVwYXJzZSBhbGwgdGhlIGNvbGxlY3RlZCBzdWJjb21tYW5kcyBhbmQgcmV0dXJuIGFu IE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZQorICogYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclRhYmxlU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQp Cit7CisJT2JqVHJlZQkgICAqYWx0ZXJUYWJsZVN0bXQ7CisJT2JqVHJlZQkgICAqdG1wb2JqOwor CU9ialRyZWUJICAgKnRtcG9iajI7CisJTGlzdAkgICAqZHBjb250ZXh0OworCVJlbGF0aW9uCXJl bDsKKwlMaXN0CSAgICpzdWJjbWRzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJY2hhcgkg ICAqZm10c3RyOworCWNvbnN0IGNoYXIgKnJlbHR5cGU7CisJYm9vbAkJaXN0eXBlID0gZmFsc2U7 CisJTGlzdAkgICAqZXhwcnMgPSBOSUw7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9BbHRl clRhYmxlKTsKKworCXJlbCA9IHJlbGF0aW9uX29wZW4oY21kLT5kLmFsdGVyVGFibGUub2JqZWN0 SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJY21kLT5kLmFsdGVyVGFibGUu b2JqZWN0SWQpOworCisJc3dpdGNoIChyZWwtPnJkX3JlbC0+cmVsa2luZCkKKwl7CisJCWNhc2Ug UkVMS0lORF9SRUxBVElPTjoKKwkJY2FzZSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFOgorCQkJ cmVsdHlwZSA9ICJUQUJMRSI7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0lOREVYOgorCQlj YXNlIFJFTEtJTkRfUEFSVElUSU9ORURfSU5ERVg6CisJCQlyZWx0eXBlID0gIklOREVYIjsKKwkJ CWJyZWFrOworCQljYXNlIFJFTEtJTkRfVklFVzoKKwkJCXJlbHR5cGUgPSAiVklFVyI7CisJCQli cmVhazsKKwkJY2FzZSBSRUxLSU5EX0NPTVBPU0lURV9UWVBFOgorCQkJcmVsdHlwZSA9ICJUWVBF IjsKKwkJCWlzdHlwZSA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0ZPUkVJR05f VEFCTEU6CisJCQlyZWx0eXBlID0gIkZPUkVJR04gVEFCTEUiOworCQkJYnJlYWs7CisKKwkJLyog VE9ETyBzdXBwb3J0IGZvciBwYXJ0aXRpb25lZCB0YWJsZSAqLworCisJCWRlZmF1bHQ6CisJCQll bG9nKEVSUk9SLCAidW5leHBlY3RlZCByZWxraW5kICVkIiwgcmVsLT5yZF9yZWwtPnJlbGtpbmQp OworCX0KKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIHJlbHR5cGUg JXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zCisJICovCisJZm10c3RyID0gcHNwcmludGYoIkFM VEVSICVzIiwgcmVsdHlwZSk7CisJYWx0ZXJUYWJsZVN0bXQgPSBuZXdfb2JqdHJlZShmbXRzdHIp OworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbC0+cmRfcmVsLT5yZWxu YW1lc3BhY2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyVGFibGVTdG10LCAiJXtpZGVudGl0eX1EIiwgdG1wb2Jq KTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLmFsdGVyVGFibGUuc3ViY21kcykKKwl7CisJCUNv bGxlY3RlZEFUU3ViY21kICpzdWIgPSAoQ29sbGVjdGVkQVRTdWJjbWQgKikgbGZpcnN0KGNlbGwp OworCQlBbHRlclRhYmxlQ21kCSpzdWJjbWQgPSAoQWx0ZXJUYWJsZUNtZCAqKSBzdWItPnBhcnNl dHJlZTsKKwkJT2JqVHJlZQkgICAqdHJlZTsKKworCQlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJU YWJsZUNtZCkpOworCisJCXN3aXRjaCAoc3ViY21kLT5zdWJ0eXBlKQorCQl7CisJCQljYXNlIEFU X0FkZENvbHVtbjoKKwkJCWNhc2UgQVRfQWRkQ29sdW1uUmVjdXJzZToKKwkJCQkvKiBYWFggbmVl ZCB0byBzZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCUFzc2VydChJc0Eo c3ViY21kLT5kZWYsIENvbHVtbkRlZikpOworCQkJCXRyZWUgPSBkZXBhcnNlX0NvbHVtbkRlZihy ZWwsIGRwY29udGV4dCwgZmFsc2UsCisJCQkJCQkJCQkJIChDb2x1bW5EZWYgKikgc3ViY21kLT5k ZWYsIHRydWUsICZleHBycyk7CisJCQkJZm10c3RyID0gcHNwcmludGYoIkFERCAlcyAlJXtkZWZp bml0aW9ufXMiLAorCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIpOwor CQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJhZGQgY29sdW1uIiwKKwkJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9i alR5cGVPYmplY3QsIHRyZWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluZGV4 Q29uc3RyYWludDoKKwkJCQl7CisJCQkJCUluZGV4U3RtdCAgKmlzdG10OworCQkJCQlSZWxhdGlv bglpZHg7CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwor CQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRleFN0bXQpKTsKKwkJCQkJaXN0bXQgPSAo SW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCUFzc2VydChpc3RtdC0+aXNjb25zdHJh aW50ICYmIGlzdG10LT51bmlxdWUpOworCisJCQkJCWlkeCA9IHJlbGF0aW9uX29wZW4oaXN0bXQt PmluZGV4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ug c3ludGF4CisJCQkJCSAqCisJCQkJCSAqIEFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7Y29uc3Ry YWludF90eXBlfXMgVVNJTkcgSU5ERVgKKwkJCQkJICogJWluZGV4X25hbWV9SSAle2RlZmVycmFi bGV9cyAle2luaXRfZGVmZXJyZWR9cworCQkJCQkgKi8KKwkJCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JIiwgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQgdXNpbmcgaW5kZXgiLAorCQkJCQkJCQkJCSAi bmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSk7CisK KwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtjb25zdHJhaW50X3R5cGV9cyIs IGlzdG10LT5kZWZlcnJhYmxlID8KKwkJCQkJCQkJCQkgIkRFRkVSUkFCTEUiIDogIk5PVCBERUZF UlJBQkxFIik7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIlVTSU5HIElOREVY ICV7aW5kZXhfbmFtZX1JIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4 KSk7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmZXJyYWJsZX1zIiwg aXN0bXQtPmRlZmVycmFibGUgPworCQkJCQkJCQkJCSAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVS UkFCTEUiKTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpbml0X2RlZmVy cmVkfXMiLCBpc3RtdC0+aW5pdGRlZmVycmVkID8KKwkJCQkJCQkJCQkgIklOSVRJQUxMWSBERUZF UlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFURSIpOworCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJCQkJCXJlbGF0aW9uX2Ns b3NlKGlkeCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfUmVBZGRJbmRleDoKKwkJCWNhc2UgQVRfUmVBZGRDb25zdHJhaW50OgorCQkJY2FzZSBBVF9S ZUFkZENvbW1lbnQ6CisJCQljYXNlIEFUX1JlcGxhY2VSZWxPcHRpb25zOgorCQkJCS8qIFN1YnR5 cGVzIHVzZWQgZm9yIGludGVybmFsIG9wZXJhdGlvbnM7IG5vdGhpbmcgdG8gZG8gaGVyZSAqLwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZENvbHVtblRvVmlldzoKKwkJCQkvKiBDUkVBVEUg T1IgUkVQTEFDRSBWSUVXIC0tIG5vdGhpbmcgdG8gZG8gaGVyZSAqLworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0NvbHVtbkRlZmF1bHQ6CisJCQkJaWYgKHN1YmNtZC0+ZGVmID09IE5VTEwpCisJ CQkJeworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkgRFJPUCBERUZBVUxUIiwgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZHJvcCBkZWZhdWx0IiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNt ZC0+bmFtZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUxpc3QJICAgKmRwY29udGV4 dDsKKwkJCQkJSGVhcFR1cGxlCWF0dHJ0dXA7CisJCQkJCUF0dHJOdW1iZXIJYXR0bm87CisKKwkJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBE RUZBVUxUIiwgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGRlZmF1 bHQiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsK KworCQkJCQlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbCksCisJCQkJCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwkJCQkJ YXR0cnR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1 YmNtZC0+bmFtZSk7CisJCQkJCWF0dG5vID0gKChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNU KGF0dHJ0dXApKS0+YXR0bnVtOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIl e2RlZmluaXRpb259cyIsCisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWws IGF0dG5vLCBkcGNvbnRleHQsIE5VTEwpKTsKKwkJCQkJUmVsZWFzZVN5c0NhY2hlKGF0dHJ0dXAp OworCQkJCX0KKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BOb3ROdWxsOgorCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIE5P VCBOVUxMIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIG5vdCBu dWxsIiwKKwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXROb3ROdWxsOgorCQkJCXRtcG9iaiA9IG5l d19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgTk9UIE5VTEwiLCAyLAor CQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBub3QgbnVsbCIsCisJCQkJCQkJ CQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfRHJvcEV4cHJlc3Npb246CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgRVhQUkVTU0lPTiIsIDIsCisJCQkJCQkJ CQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBleHByZXNzaW9uIiwKKwkJCQkJCQkJCSAi Y29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBvYmosICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkJCQkgc3ViY21kLT5t aXNzaW5nX29rID8gIklGIEVYSVNUUyI6ICIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9TZXRTdGF0aXN0aWNzOgorCQkJCXsKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW50 ZWdlcikpOworCQkJCQlpZiAoc3ViY21kLT5uYW1lKQorCQkJCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVEFUSVNUSUNTICV7c3RhdGlzdGlj c31uIiwKKwkJCQkJCQkJCQkJIDMsCisJCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJzZXQgc3RhdGlzdGljcyIsCisJCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywg c3ViY21kLT5uYW1lLAorCQkJCQkJCQkJCQkgInN0YXRpc3RpY3MiLCBPYmpUeXBlSW50ZWdlciwK KwkJCQkJCQkJCQkJIGludFZhbCgoSW50ZWdlciAqKSBzdWJjbWQtPmRlZikpOworCQkJCQllbHNl CisJCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufW4g U0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNzfW4iLAorCQkJCQkJCQkJCQkgMywKKwkJCQkJCQkJ CQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBzdGF0aXN0aWNzIiwKKwkJCQkJCQkJCQkJ ICJjb2x1bW4iLCBPYmpUeXBlSW50ZWdlciwgc3ViY21kLT5udW0sCisJCQkJCQkJCQkJCSAic3Rh dGlzdGljcyIsIE9ialR5cGVJbnRlZ2VyLAorCQkJCQkJCQkJCQkgaW50VmFsKChJbnRlZ2VyICop IHN1YmNtZC0+ZGVmKSk7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRP cHRpb25zOgorCQkJY2FzZSBBVF9SZXNldE9wdGlvbnM6CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QoCisJCQkJCQkJCQkgIGRlcGFyc2VfQ29sdW1uU2V0 T3B0aW9ucyhzdWJjbWQpKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0U3RvcmFnZToK KwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBTdHJpbmcpKTsKKwkJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUT1JBR0UgJXtzdG9yYWdl fXMiLCAzLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBzdG9yYWdlIiwK KwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJ CQkJICJzdG9yYWdlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJWYWwoKFN0cmluZyAq KSBzdWJjbWQtPmRlZikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldENvbXByZXNz aW9uOgorCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0cmluZykpOworCQkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgQ09NUFJFU1NJT04g JXtjb21wcmVzc2lvbl9tZXRob2R9cyIsCisJCQkJCQkJCQkgMywKKwkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJzZXQgY29tcHJlc3Npb24iLAorCQkJCQkJCQkJICJjb2x1bW4iLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkgImNvbXByZXNzaW9uX21ldGhv ZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyVmFsKChTdHJpbmcgKikgc3ViY21kLT5k ZWYpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29sdW1uUmVjdXJzZToKKwkJ CWNhc2UgQVRfRHJvcENvbHVtbjoKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiRFJPUCAlcyAlJXtj b2x1bW59SSIsCisJCQkJCQkJCSAgaXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09MVU1OIik7CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImRyb3AgY29sdW1uIiwKKwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIkNB U0NBREUiLCAxLAorCQkJCQkJCQkJICAicHJlc2VudCIsIE9ialR5cGVCb29sLCBzdWJjbWQtPmJl aGF2aW9yKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle2Nhc2NhZGV9cyIs IHRtcG9iajIpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5kZXg6CisJCQkJ eworCQkJCQlPaWQJCQlpZHhPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUluZGV4 U3RtdCAgKmlzdG10OworCQkJCQlSZWxhdGlvbglpZHg7CisJCQkJCWNvbnN0IGNoYXIgKmlkeG5h bWU7CisJCQkJCU9pZAkJCWNvbnN0ck9pZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVm LCBJbmRleFN0bXQpKTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOwor CisJCQkJCWlmICghaXN0bXQtPmlzY29uc3RyYWludCkKKwkJCQkJCWJyZWFrOworCisJCQkJCWlk eCA9IHJlbGF0aW9uX29wZW4oaWR4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCQlpZHhuYW1l ID0gUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4KTsKKworCQkJCQljb25zdHJPaWQgPSBnZXRf cmVsYXRpb25fY29uc3RyYWludF9vaWQoCisJCQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJ ZCwgaWR4bmFtZSwgZmFsc2UpOworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBREQg Q09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsIDMsCisJCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkgIm5hbWUiLCBP YmpUeXBlU3RyaW5nLCBpZHhuYW1lLAorCQkJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkJCQkJIHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNv bnN0ck9pZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShpZHgsIEFjY2Vzc1NoYXJlTG9j ayk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZENvbnN0cmFpbnQ6CisJCQlj YXNlIEFUX0FkZENvbnN0cmFpbnRSZWN1cnNlOgorCQkJCXsKKwkJCQkJLyogWFhYIG5lZWQgdG8g c2V0IHRoZSAicmVjdXJzZSIgYml0IHNvbWV3aGVyZT8gKi8KKwkJCQkJT2lkCQkJY29uc3RyT2lk ID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlib29sCQlpc251bGw7CisJCQkJCUhlYXBU dXBsZQl0dXA7CisJCQkJCURhdHVtCQl2YWw7CisJCQkJCUNvbnN0cmFpbnQgKmNvbnN0cjsKKwor CQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBDb25zdHJhaW50KSk7CisJCQkJCWNvbnN0ciA9 ICBjYXN0Tm9kZShDb25zdHJhaW50LCBzdWJjbWQtPmRlZik7CisKKwkJCQkJaWYgKCFjb25zdHIt PnNraXBfdmFsaWRhdGlvbikKKwkJCQkJeworCQkJCQkJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKENP TlNUUk9JRCwgT2JqZWN0SWRHZXREYXR1bShjb25zdHJPaWQpKTsKKworCQkJCQkJaWYgKEhlYXBU dXBsZUlzVmFsaWQodHVwKSkKKwkJCQkJCXsKKwkJCQkJCQljaGFyCSAgICpjb25iaW47CisKKwkJ CQkJCQkvKiBGZXRjaCBjb25zdHJhaW50IGV4cHJlc3Npb24gaW4gcGFyc2V0cmVlIGZvcm0gKi8K KwkJCQkJCQl2YWwgPSBTeXNDYWNoZUdldEF0dHIoQ09OU1RST0lELCB0dXAsCisJCQkJCQkJCQkJ CQkgIEFudW1fcGdfY29uc3RyYWludF9jb25iaW4sICZpc251bGwpOworCisJCQkJCQkJaWYgKCFp c251bGwpCisJCQkJCQkJeworCQkJCQkJCQljb25iaW4gPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHZh bCk7CisJCQkJCQkJCWV4cHJzID0gbGFwcGVuZChleHBycywgc3RyaW5nVG9Ob2RlKGNvbmJpbikp OworCQkJCQkJCX0KKworCQkJCQkJCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCQkJCQkJfQorCQkJ CQl9CisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFt ZX1JICV7ZGVmaW5pdGlvbn1zIiwgMywKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdl dF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkgImRlZmluaXRpb24iLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3Np bXBsZShjb25zdHJPaWQpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Fs dGVyQ29uc3RyYWludDoKKwkJCQl7CisJCQkJCU9pZAkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNz Lm9iamVjdElkOworCQkJCQlDb25zdHJhaW50ICpjID0gKENvbnN0cmFpbnQgKikgc3ViY21kLT5k ZWY7CisKKwkJCQkJLyogSWYgbm8gY29uc3RyYWludCB3YXMgYWx0ZXJlZCwgc2lsZW50bHkgc2tp cCBpdCAqLworCQkJCQlpZiAoIU9pZElzVmFsaWQoY29uc3RyT2lkKSkKKwkJCQkJCWJyZWFrOwor CisJCQkJCUFzc2VydChJc0EoYywgQ29uc3RyYWludCkpOworCQkJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmVycmFibGV9cyAle2luaXRf ZGVmZXJyZWR9cyIsCisJCQkJCQkJCQkJIDQsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImFsdGVyIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJp bmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkgImRlZmVycmFi bGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBjLT5kZWZlcnJhYmxlID8gIkRFRkVSUkFC TEUiIDogIk5PVCBERUZFUlJBQkxFIiwKKwkJCQkJCQkJCQkgImluaXRfZGVmZXJyZWQiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCQkJCSBjLT5pbml0ZGVmZXJyZWQgPyAiSU5JVElBTExZIERFRkVS UkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRFIik7CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX1ZhbGlkYXRlQ29uc3RyYWludFJlY3Vyc2U6CisJCQljYXNlIEFUX1ZhbGlk YXRlQ29uc3RyYWludDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVEUgQ09O U1RSQUlOVCAle2NvbnN0cmFpbnR9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAidmFsaWRhdGUgY29uc3RyYWludCIsCisJCQkJCQkJCQkgImNvbnN0cmFpbnQiLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ry b3BDb25zdHJhaW50UmVjdXJzZToKKwkJCWNhc2UgQVRfRHJvcENvbnN0cmFpbnQ6CisJCQkJdG1w b2JqID0gbmV3X29ianRyZWVfVkEoIkRST1AgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnR9SSIsIDIs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBjb25zdHJhaW50IiwKKwkJ CQkJCQkJCSAiY29uc3RyYWludCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5UeXBlOgorCQkJCXsKKwkJCQkJVHVw bGVEZXNjIHR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJCQkJCUZvcm1fcGdfYXR0 cmlidXRlIGF0dDsKKwkJCQkJQ29sdW1uRGVmCSAgICpkZWY7CisKKwkJCQkJYXR0ID0gJih0dXBk ZXNjLT5hdHRyc1tzdWItPmFkZHJlc3Mub2JqZWN0U3ViSWQgLSAxXSk7CisJCQkJCWRlZiA9IChD b2x1bW5EZWYgKikgc3ViY21kLT5kZWY7CisJCQkJCUFzc2VydChJc0EoZGVmLCBDb2x1bW5EZWYp KTsKKworCQkJCQkvKgorCQkJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJCQkgKgorCQkJCQkgKiBD b21wb3NpdGUgdHlwZXM6IEFMVEVSIHJlbHR5cGUgJXtjb2x1bW59SSBTRVQgREFUQSBUWVBFCisJ CQkJCSAqICV7ZGF0YXR5cGV9VCAle2NvbGxhdGlvbn1zIEFUVFJJQlVURSAle2Nhc2NhZGV9cwor CQkJCQkgKgorCQkJCQkgKiBOb3JtYWwgdHlwZXM6IEFMVEVSIHJlbHR5cGUgJXtjb2x1bW59SSBT RVQgREFUQSBUWVBFCisJCQkJCSAqICV7ZGF0YXR5cGV9VCAle2NvbGxhdGlvbn1zIENPTFVNTiAl e3VzaW5nfXMKKwkJCQkJICovCisJCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtj b2x1bW59SSBTRVQgREFUQSBUWVBFIiwKKwkJCQkJCQkJCSAgaXN0eXBlID8gIkFUVFJJQlVURSIg OiAiQ09MVU1OIik7CisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAyLAor CQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhbHRlciBjb2x1bW4gdHlwZSIsCisJ CQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCQkv KiBBZGQgdGhlIFRZUEUgY2xhdXNlICovCisJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9i aiwgIiV7ZGF0YXR5cGV9VCIsCisJCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKGF0dC0+ YXR0dHlwaWQsCisJCQkJCQkJCQkJCQkJCQkgIGF0dC0+YXR0dHlwbW9kKSk7CisKKwkJCQkJLyog QWRkIGEgQ09MTEFURSBjbGF1c2UsIGlmIG5lZWRlZCAqLworCQkJCQl0bXBvYmoyID0gbmV3X29i anRyZWUoIkNPTExBVEUiKTsKKwkJCQkJaWYgKE9pZElzVmFsaWQoYXR0LT5hdHRjb2xsYXRpb24p KQorCQkJCQl7CisJCQkJCQlPYmpUcmVlICpjb2xsbmFtZTsKKworCQkJCQkJY29sbG5hbWUgPSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJCSAgIGF0dC0+YXR0Y29sbGF0aW9uKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcG9iajIsICIle25hbWV9RCIsIGNvbGxuYW1lKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJ CQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqMiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7Y29sbGF0aW9ufXMiLCB0bXBvYmoyKTsKKwor CQkJCQkvKiBJZiBub3QgYSBjb21wb3NpdGUgdHlwZSwgYWRkIHRoZSBVU0lORyBjbGF1c2UgKi8K KwkJCQkJaWYgKCFpc3R5cGUpCisJCQkJCXsKKwkJCQkJCS8qCisJCQkJCQkgKiBJZiB0aGVyZSdz IGEgVVNJTkcgY2xhdXNlLCB0cmFuc2Zvcm1BbHRlclRhYmxlU3RtdAorCQkJCQkJICogcmFuIGl0 IHRocm91Z2ggdHJhbnNmb3JtRXhwciBhbmQgc3RvcmVkIHRoZQorCQkJCQkJICogcmVzdWx0aW5n IG5vZGUgaW4gY29va2VkX2RlZmF1bHQsIHdoaWNoIHdlIGNhbiB1c2UKKwkJCQkJCSAqIGhlcmUu CisJCQkJCQkgKi8KKwkJCQkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZSgiVVNJTkciKTsKKwkJCQkJ CWlmIChkZWYtPnJhd19kZWZhdWx0KQorCQkJCQkJeworCQkJCQkJCURhdHVtCWRlcGFyc2VkOwor CQkJCQkJCWNoYXIgICAqZGVmZXhwcjsKKworCQkJCQkJCWV4cHJzID0gbGFwcGVuZChleHBycywg ZGVmLT5jb29rZWRfZGVmYXVsdCk7CisJCQkJCQkJZGVmZXhwciA9IG5vZGVUb1N0cmluZyhkZWYt PmNvb2tlZF9kZWZhdWx0KTsKKwkJCQkJCQlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIo cGdfZ2V0X2V4cHIsCisJCQkJCQkJCQkJCQkJCSAgIENTdHJpbmdHZXRUZXh0RGF0dW0oZGVmZXhw ciksCisJCQkJCQkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJCQkJCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wb2JqMiwgIiV7ZXhwcmVzc2lvbn1zIiwKKwkJCQkJCQkJCQkJ CSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJ CQkJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iajIsICJwcmVzZW50IiwgZmFsc2UpOworCQkJ CQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXt1c2luZ31zIiwgdG1wb2JqMik7CisJ CQkJCX0KKworCQkJCQkvKiBJZiBpdCdzIGEgY29tcG9zaXRlIHR5cGUsIGFkZCB0aGUgQ0FTQ0FE RSBjbGF1c2UgKi8KKwkJCQkJaWYgKGlzdHlwZSkKKwkJCQkJeworCQkJCQkJdG1wb2JqMiA9IG5l d19vYmp0cmVlKCJDQVNDQURFIik7CisJCQkJCQlpZiAoc3ViY21kLT5iZWhhdmlvciAhPSBEUk9Q X0NBU0NBREUpCisJCQkJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iajIsICJwcmVzZW50Iiwg ZmFsc2UpOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtjYXNjYWRlfXMi LCB0bXBvYmoyKTsKKwkJCQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQlicmVhazsKKworI2lmZGVmIFRP RE9MSVNUCisJCQljYXNlIEFUX0FsdGVyQ29sdW1uR2VuZXJpY09wdGlvbnM6CisJCQkJdG1wb2Jq ID0gZGVwYXJzZV9GZHdPcHRpb25zKChMaXN0ICopIHN1YmNtZC0+ZGVmLAorCQkJCQkJCQkJCSBz dWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNlIEFUX0NoYW5nZU93 bmVyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPV05FUiBUTyAle293bmVyfUkiLCAy LAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNoYW5nZSBvd25lciIsCisJCQkJ CQkJCQkgIm93bmVyIiwgIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgZ2V0X3JvbGVzcGVjX25h bWUoc3ViY21kLT5uZXdvd25lcikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0NsdXN0 ZXJPbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQ0xVU1RFUiBPTiAle2luZGV4fUki LCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNsdXN0ZXIgb24iLAorCQkJ CQkJCQkJICJpbmRleCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfRHJvcENsdXN0ZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIlNFVCBXSVRIT1VUIENMVVNURVIiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgInNldCB3aXRob3V0IGNsdXN0ZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9TZXRMb2dnZWQ6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBMT0dHRUQiLCAx LAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBsb2dnZWQiKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRVbkxvZ2dlZDoKKwkJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiU0VUIFVOTE9HR0VEIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJzZXQgdW5sb2dnZWQiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wT2lk czoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFdJVEhPVVQgT0lEUyIsIDEsCisJ CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHdpdGhvdXQgb2lkcyIpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQkJCWJyZWFrOworCQkJY2FzZSBBVF9TZXRBY2Nlc3NNZXRob2Q6CisJCQkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIlNFVCBBQ0NFU1MgTUVUSE9EICV7YWNjZXNzX21ldGhvZH1JIiwgMiwKKwkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgYWNjZXNzIG1ldGhvZCIsCisJCQkJ CQkJCQkgImFjY2Vzc19tZXRob2QiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQkJCWJyZWFrOworCQkJY2FzZSBBVF9TZXRUYWJsZVNwYWNlOgorCQkJCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJTRVQgVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsIDIsCisJCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHRhYmxlc3BhY2UiLAorCQkJCQkJCQkJICJ0YWJs ZXNwYWNlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9TZXRSZWxPcHRpb25zOgorCQkJY2FzZSBBVF9SZXNldFJlbE9wdGlvbnM6CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QoCisJCQkJCQkJ CQkgIGRlcGFyc2VfUmVsU2V0T3B0aW9ucyhzdWJjbWQpKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfRW5hYmxlVHJpZzoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRS SUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImVuYWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlQWx3YXlzVHJp ZzoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIEFMV0FZUyBUUklHR0VSICV7 dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUg YWx3YXlzIHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSZXBsaWNhVHJp ZzoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJFUExJQ0EgVFJJR0dFUiAl e3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxl IHJlcGxpY2EgdHJpZ2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVUcmlnOgor CQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgJXt0cmlnZ2VyfUki LCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciIs CisJCQkJCQkJCQkgInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVRyaWdBbGw6CisJCQkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIkVOQUJMRSBUUklHR0VSIEFMTCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIgYWxsIik7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfRGlzYWJsZVRyaWdBbGw6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJ U0FCTEUgVFJJR0dFUiBBTEwiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImRpc2FibGUgdHJpZ2dlciBhbGwiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFi bGVUcmlnVXNlcjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIg VVNFUiIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdn ZXIgdXNlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVUcmlnVXNlcjoK KwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklHR0VSIFVTRVIiLCAxLAor CQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciB1c2VyIik7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUnVsZToKKwkJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9ialR5 cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5h YmxlQWx3YXlzUnVsZToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIEFMV0FZ UyBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJl bmFibGUgYWx3YXlzIHJ1bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSZXBsaWNhUnVs ZToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJFUExJQ0EgUlVMRSAle3J1 bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJlcGxp Y2EgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVSdWxlOgorCQkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0FkZEluaGVyaXQ6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIklOSEVSSVQgJXtwYXJl bnR9RCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiaW5oZXJpdCIsCisJ CQkJCQkJCQkgInBhcmVudCIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3Vi LT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcElu aGVyaXQ6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk5PIElOSEVSSVQgJXtwYXJlbnR9 RCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBpbmhlcml0IiwK KwkJCQkJCQkJCSAicGFyZW50IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBz dWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRP ZjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiT0YgJXt0eXBlX29mfVQiLCAyLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBvZiIsCisJCQkJCQkJCQkgInR5cGVf b2YiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHN1Yi0+ YWRkcmVzcy5vYmplY3RJZCwgLTEpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9w T2Y6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk5PVCBPRiIsIDEsCisJCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAibm90IG9mIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfUmVwbGljYUlkZW50aXR5OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJSRVBM SUNBIElERU5USVRZIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJyZXBs aWNhIGlkZW50aXR5Iik7CisJCQkJc3dpdGNoICgoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3Vi Y21kLT5kZWYpLT5pZGVudGl0eV90eXBlKQorCQkJCXsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5U SVRZX0RFRkFVTFQ6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2lkZW50 fXMiLCAiREVGQVVMVCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElU WV9GVUxMOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZGVudH1zIiwg IkZVTEwiKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfTk9USElO RzoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9cyIsICJOT1RI SU5HIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0lOREVYOgor CQkJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJVU0lORyBJTkRFWCAle2luZGV4fUkiLCAx LAorCQkJCQkJCQkJCQkgICJpbmRleCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCSAgKChS ZXBsaWNhSWRlbnRpdHlTdG10ICopIHN1YmNtZC0+ZGVmKS0+bmFtZSk7CisJCQkJCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBvYmosICIle2lkZW50fXMiLCB0bXBvYmoyKTsKKwkJCQkJCWJyZWFr OworCQkJCX0KKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSb3dTZWN1cml0eToK KwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWSIs IDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJvdyBzZWN1cml0 eSIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVSb3dTZWN1cml0eToKKwkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBST1cgTEVWRUwgU0VDVVJJVFkiLCAx LAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgcm93IHNlY3VyaXR5 Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisjaWZkZWYgVE9ET0xJU1QKKwkJCWNhc2UgQVRfR2VuZXJpY09w dGlvbnM6CisJCQkJdG1wb2JqID0gZGVwYXJzZV9GZHdPcHRpb25zKChMaXN0ICopIHN1YmNtZC0+ ZGVmLCBOVUxMKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJY2FzZSBBVF9BdHRhY2hQYXJ0 aXRpb246CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFUVEFDSCBQQVJUSVRJT04gJXtw YXJ0aXRpb25faWRlbnRpdHl9RCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiYXR0YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkgInBhcnRpdGlvbl9pZGVudGl0eSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0 aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7 CisKKwkJCQlpZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9U QUJMRSkKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtwYXJ0aXRpb25fYm91 bmR9cyIsCisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0UGFydGl0aW9uQm91bmQoc3ViLT5hZGRyZXNz Lm9iamVjdElkKSk7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfRGV0YWNoUGFydGl0aW9u OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJERVRBQ0ggUEFSVElUSU9OICV7cGFydGl0 aW9uX2lkZW50aXR5fUQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRl dGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJICJwYXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQkJCWJyZWFrOworCQkJY2FzZSBBVF9EZXRhY2hQYXJ0aXRpb25GaW5hbGl6ZToKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBBUlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0 eX1EIEZJTkFMSVpFIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkZXRh Y2ggcGFydGl0aW9uIGZpbmFsaXplIiwKKwkJCQkJCQkJCSAicGFydGl0aW9uX2lkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVs YXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQp KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfQWRkSWRlbnRpdHk6CisJCQkJeworCQkJCQlB dHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOworCQkJCQlPYmpUcmVlCSpz ZXFkZWY7CisJCQkJCUNvbHVtbkRlZiAgKmNvbGRlZiA9IChDb2x1bW5EZWYgKikgc3ViY21kLT5k ZWY7CisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVt bn1JIEFERCAle2lkZW50aXR5X2NvbHVtbn1zIiwgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiYWRkIGlkZW50aXR5IiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVT dHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlv bkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50 aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCQkJCQlz ZXFkZWYgPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcV9yZWxpZCwgY29sZGVmLT5pZGVudGl0 eSwgZmFsc2UpOworCisJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgImlkZW50aXR5 X2NvbHVtbiIsIHNlcWRlZik7CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBBVF9T ZXRJZGVudGl0eToKKwkJCQl7CisJCQkJCURlZkVsZW0JKmRlZmVsOworCQkJCQljaGFyCQlpZGVu dGl0eSA9IDA7CisJCQkJCU9ialRyZWUJICAgKnNlcWRlZjsKKwkJCQkJQXR0ck51bWJlcglhdHRu dW07CisJCQkJCU9pZAkJCXNlcV9yZWxpZDsKKworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgInNldCBpZGVudGl0eSIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBl U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWlmIChzdWJjbWQtPmRlZikKKwkJCQkJewor CQkJCQkJTGlzdAkgICAqZGVmID0gKExpc3QgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJCUFzc2Vy dChJc0Eoc3ViY21kLT5kZWYsIExpc3QpKTsKKworCQkJCQkJZGVmZWwgPSBsaW5pdGlhbF9ub2Rl KERlZkVsZW0sIGRlZik7CisJCQkJCQlpZGVudGl0eSA9IGRlZkdldEludDMyKGRlZmVsKTsKKwkJ CQkJfQorCisJCQkJCWF0dG51bSA9IGdldF9hdHRudW0oUmVsYXRpb25HZXRSZWxpZChyZWwpLCBz dWJjbWQtPm5hbWUpOworCQkJCQlzZXFfcmVsaWQgPSBnZXRJZGVudGl0eVNlcXVlbmNlKFJlbGF0 aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtLCB0cnVlKTsKKwkJCQkJc2VxZGVmID0gZGVwYXJzZV9D b2x1bW5JZGVudGl0eShzZXFfcmVsaWQsIGlkZW50aXR5LCB0cnVlKTsKKworCQkJCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBvYmosICIle2RlZmluaXRpb259cyIsIHNlcWRlZik7CisKKwkJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJCWJyZWFrOworCQkJCX0KKwkJCWNhc2UgQVRfRHJvcElkZW50aXR5OgorCQkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIElERU5USVRZIiwg MiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGlkZW50aXR5IiwKKwkJ CQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCQkJ CSBzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFr OworCQkJZGVmYXVsdDoKKwkJCQllbG9nKFdBUk5JTkcsICJ1bnN1cHBvcnRlZCBhbHRlciB0YWJs ZSBzdWJ0eXBlICVkIiwKKwkJCQkJIHN1YmNtZC0+c3VidHlwZSk7CisJCQkJYnJlYWs7CisJCX0K KworCQkvKgorCQkgKiBXZSBkb24ndCBzdXBwb3J0IHJlcGxpY2F0aW5nIEFMVEVSIFRBQkxFIHdo aWNoIGNvbnRhaW5zIHZvbGF0aWxlCisJCSAqIGZ1bmN0aW9ucyBiZWNhdXNlIEl0J3MgcG9zc2li bGUgdGhlIGZ1bmN0aW9ucyBjb250YWluIERETC9ETUwgaW4KKwkJICogd2hpY2ggY2FzZSB0aGVz ZSBvcGVydGlvbnMgd2lsbCBiZSBleGVjdXRlZCB0d2ljZSBhbmQgY2F1c2UKKwkJICogZHVwbGlj YXRlIGRhdGEuIEluIGFkZGl0aW9uLCB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIHRhYmxlcyBi ZWluZworCQkgKiBhY2Nlc3NlZCBieSB0aGVzZSBEREwvRE1MIGFyZSBwdWJsaXNoZWQgb3Igbm90 LiBTbyBibGluZGx5IGFsbG93aW5nCisJCSAqIHN1Y2ggZnVuY3Rpb25zIGNhbiBhbGxvdyB1bmlu dGVuZGVkIGNsYXVzZXMgbGlrZSB0aGUgdGFibGVzIGFjY2Vzc2VkCisJCSAqIGluIHRob3NlIGZ1 bmN0aW9ucyBtYXkgbm90IGV2ZW4gZXhpc3Qgb24gdGhlIHN1YnNjcmliZXItc2lkZS4KKwkJICov CisJCWlmIChjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9ucygoTm9kZSAqKSBleHBycykpCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRF RCksCisJCQkJCSBlcnJtc2coIkFMVEVSIFRBQkxFIGNvbW1hbmQgdXNpbmcgdm9sYXRpbGUgZnVu Y3Rpb24gY2Fubm90IGJlIHJlcGxpY2F0ZWQiKSkpOworCisJCS8qCisJCSAqIENsZWFuIHRoZSBs aXN0IGFzIHdlIGFscmVhZHkgY29uZmlybWVkIHRoZXJlIGlzIG5vIHZvbGF0aWxlCisJCSAqIGZ1 bmN0aW9uLgorCQkgKi8KKwkJbGlzdF9mcmVlKGV4cHJzKTsKKwkJZXhwcnMgPSBOSUw7CisJfQor CisJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJaWYgKGxpc3RfbGVuZ3Ro KHN1YmNtZHMpID09IDApCisJCXJldHVybiBOVUxMOworCisJYXBwZW5kX2FycmF5X29iamVjdChh bHRlclRhYmxlU3RtdCwgIiV7c3ViY21kczosIH1zIiwgc3ViY21kcyk7CisKKwlyZXR1cm4gYWx0 ZXJUYWJsZVN0bXQ7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUgZGVw YXJzaW5nLgorICoKKyAqIERlcGFyc2UgYSBDb2x1bW5EZWYgbm9kZSB3aXRoaW4gYSByZWd1bGFy IChub24gdHlwZWQpIHRhYmxlIGNyZWF0aW9uLgorICoKKyAqIE5PVCBOVUxMIGNvbnN0cmFpbnRz IGluIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBhcmUgZW1pdHRlZCBkaXJlY3RseSBpbiB0aGUKKyAq IGNvbHVtbiBkZWZpbml0aW9uIGJ5IHRoaXMgcm91dGluZTsgb3RoZXIgY29uc3RyYWludHMgbXVz dCBiZSBlbWl0dGVkCisgKiBlbHNld2hlcmUgKHRoZSBpbmZvIGluIHRoZSBwYXJzZSBub2RlIGlz IGluY29tcGxldGUgYW55d2F5LikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29s dW1uRGVmKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIGJvb2wgY29tcG9zaXRl LAorCQkJCSAgQ29sdW1uRGVmICpjb2xkZWYsIGJvb2wgaXNfYWx0ZXIsIExpc3QgKipleHBycykK K3sKKwlPYmpUcmVlCSAgICpjb2x1bW47CisJT2JqVHJlZQkgICAqdG1wb2JqOworCU9pZAkJCXJl bGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CisJSGVhcFR1cGxlCWF0dHJUdXA7CisJ Rm9ybV9wZ19hdHRyaWJ1dGUgYXR0ckZvcm07CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1v ZDsKKwlPaWQJCQl0eXBjb2xsYXRpb247CisJYm9vbAkJc2F3X25vdG51bGw7CisJTGlzdENlbGwg ICAqY2VsbDsKKworCS8qCisJICogSW5oZXJpdGVkIGNvbHVtbnMgd2l0aG91dCBsb2NhbCBkZWZp bml0aW9ucyBtdXN0IG5vdCBiZSBlbWl0dGVkLgorCSAqCisJICogWFhYIG1heWJlIGl0IGlzIHVz ZWZ1bCB0byBoYXZlIHRoZW0gd2l0aCAicHJlc2VudCA9IGZhbHNlIiBvciBzb21lIHN1Y2g/CisJ ICovCisJaWYgKCFjb2xkZWYtPmlzX2xvY2FsKQorCQlyZXR1cm4gTlVMTDsKKworCWF0dHJUdXAg PSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQg Y2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAorCQkJIGNvbGRl Zi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRT VFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJGb3Jt LT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisKKwkv KgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiAle25hbWV9SSAle2NvbHR5cGV9VCAle2Nv bXByZXNzaW9ufXMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1zCisJICogJXtjb2xsYXRpb259cwor CSAqLworCWNvbHVtbiA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSAle2NvbHR5cGV9VCIsIDMs CisJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwKKwkJCQkJCQkibmFtZSIs IE9ialR5cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFtZSwKKwkJCQkJCQkiY29sdHlwZSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUodHlwaWQsIHR5cG1vZCkpOwor CisJLyogVVNJTkcgY2xhdXNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIkNPTVBSRVNTSU9O Iik7CisJaWYgKGNvbGRlZi0+Y29tcHJlc3Npb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cG9iaiwgIiV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCBjb2xkZWYtPmNvbXByZXNzaW9uKTsKKwll bHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiJXtjb21wcmVzc2lvbl9tZXRo b2R9SSIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsK Kwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtjb21wcmVzc2lvbn1zIiwgdG1w b2JqKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFs aWQodHlwY29sbGF0aW9uKSkKKwl7CisJCU9ialRyZWUgKmNvbGxuYW1lOworCisJCWNvbGxuYW1l ID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCSAgIHR5cGNvbGxhdGlvbik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwg IiV7bmFtZX1EIiwgY29sbG5hbWUpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0 bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwg IiV7Y29sbGF0aW9ufXMiLCB0bXBvYmopOworCisJaWYgKCFjb21wb3NpdGUpCisJeworCQlPaWQJ c2VxcmVsaWQgPSBJbnZhbGlkT2lkOworCisJCS8qCisJCSAqIEVtaXQgYSBOT1QgTlVMTCBkZWNs YXJhdGlvbiBpZiBuZWNlc3NhcnkuICBOb3RlIHRoYXQgd2UgY2Fubm90IHRydXN0CisJCSAqIHBn X2F0dHJpYnV0ZS5hdHRub3RudWxsIGhlcmUsIGJlY2F1c2UgdGhhdCBiaXQgaXMgYWxzbyBzZXQg d2hlbgorCQkgKiBwcmltYXJ5IGtleXMgYXJlIHNwZWNpZmllZDsgYW5kIHdlIG11c3Qgbm90IGVt aXQgYSBOT1QgTlVMTAorCQkgKiBjb25zdHJhaW50IGluIHRoYXQgY2FzZSwgdW5sZXNzIGV4cGxp Y2l0ZWx5IHNwZWNpZmllZC4gIFRoZXJlZm9yZSwKKwkJICogd2Ugc2NhbiB0aGUgbGlzdCBvZiBj b25zdHJhaW50cyBhdHRhY2hlZCB0byB0aGlzIGNvbHVtbiB0byBkZXRlcm1pbmUKKwkJICogd2hl dGhlciB3ZSBuZWVkIHRvIGVtaXQgYW55dGhpbmcuCisJCSAqIChGb3J0dW5hdGVseSwgTk9UIE5V TEwgY29uc3RyYWludHMgY2Fubm90IGJlIHRhYmxlIGNvbnN0cmFpbnRzLikKKwkJICoKKwkJICog SW4gdGhlIEFMVEVSIFRBQkxFIGNhc2VzLCB3ZSBhbHNvIGFkZCBhIE5PVCBOVUxMIGlmIHRoZSBj b2xEZWYgaXMKKwkJICogbWFya2VkIGlzX25vdF9udWxsLgorCQkgKi8KKwkJc2F3X25vdG51bGwg PSBmYWxzZTsKKwkJZm9yZWFjaChjZWxsLCBjb2xkZWYtPmNvbnN0cmFpbnRzKQorCQl7CisJCQlD b25zdHJhaW50ICpjb25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWlm IChjb25zdHItPmNvbnR5cGUgPT0gQ09OU1RSX05PVE5VTEwpCisJCQkJc2F3X25vdG51bGwgPSB0 cnVlOworCQl9CisJCWlmIChpc19hbHRlciAmJiBjb2xkZWYtPmlzX25vdF9udWxsKQorCQkJc2F3 X25vdG51bGwgPSB0cnVlOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNvbHVtbiwgIiV7bm90 X251bGx9cyIsCisJCQkJCQkJIHNhd19ub3RudWxsID8gIk5PVCBOVUxMIiA6ICIiKTsKKworCQl0 bXBvYmogPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCQlpZiAoYXR0ckZvcm0tPmF0dGhhc2Rl ZikKKwkJeworCQkJY2hhciAqZGVmc3RyOworCisJCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVt bkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJCSAgZHBjb250 ZXh0LCBleHBycyk7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmYXVs dH1zIiwgZGVmc3RyKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtk ZWZhdWx0fXMiLCB0bXBvYmopOworCisJCS8qIElERU5USVRZIENPTFVNTiAqLworCQlpZiAoY29s ZGVmLT5pZGVudGl0eSkKKwkJeworCQkJT2lkCWF0dG5vID0gZ2V0X2F0dG51bShyZWxpZCwgY29s ZGVmLT5jb2xuYW1lKTsKKwkJCXNlcXJlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShyZWxpZCwg YXR0bm8sIGZhbHNlKTsKKwkJfQorCisJCXRtcG9iaiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHko c2VxcmVsaWQsIGNvbGRlZi0+aWRlbnRpdHksIGlzX2FsdGVyKTsKKwkJYXBwZW5kX29iamVjdF9v YmplY3QoY29sdW1uLCAiJXtpZGVudGl0eV9jb2x1bW59cyIsIHRtcG9iaik7CisKKwkJLyogR0VO RVJBVEVEIENPTFVNTiBFWFBSRVNTSU9OICovCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJHRU5F UkFURUQgQUxXQVlTIEFTIik7CisJCWlmIChjb2xkZWYtPmdlbmVyYXRlZCA9PSBBVFRSSUJVVEVf R0VORVJBVEVEX1NUT1JFRCkKKwkJeworCQkJY2hhciAqZGVmc3RyOworCisJCQlkZWZzdHIgPSBS ZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJ CQkJCQkJCSAgZHBjb250ZXh0LCBleHBycyk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBv YmosICIle2dlbmVyYXRpb25fZXhwcn1zIFNUT1JFRCIsIGRlZnN0cik7CisJCX0KKwkJZWxzZQor CQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCB0bXBvYmop OworCX0KKworCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKworCXJldHVybiBjb2x1bW47Cit9 CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUgT0YgZGVwYXJzaW5nLgorICoK KyAqIERlcGFyc2UgYSBDb2x1bW5EZWYgbm9kZSB3aXRoaW4gYSB0eXBlZCB0YWJsZSBjcmVhdGlv bi4JVGhpcyBpcyBzaW1wbGVyCisgKiB0aGFuIHRoZSByZWd1bGFyIGNhc2UsIGJlY2F1c2Ugd2Ug ZG9uJ3QgaGF2ZSB0byBlbWl0IHRoZSB0eXBlIGRlY2xhcmF0aW9uLAorICogY29sbGF0aW9uLCBv ciBkZWZhdWx0LiAgSGVyZSB3ZSBvbmx5IHJldHVybiBzb21ldGhpbmcgaWYgdGhlIGNvbHVtbiBp cyBiZWluZworICogZGVjbGFyZWQgTk9UIE5VTEwuCisgKgorICogQXMgaW4gZGVwYXJzZV9Db2x1 bW5EZWYsIGFueSBvdGhlciBjb25zdHJhaW50IGlzIHByb2Nlc3NlZCBlbHNld2hlcmUuCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uRGVmX3R5cGVkKFJlbGF0aW9uIHJlbGF0 aW9uLCBMaXN0ICpkcGNvbnRleHQsIENvbHVtbkRlZiAqY29sZGVmKQoreworCU9ialRyZWUJKmNv bHVtbiA9IE5VTEw7CisJT2JqVHJlZQkqdG1wb2JqOworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25H ZXRSZWxpZChyZWxhdGlvbik7CisJSGVhcFR1cGxlCWF0dHJUdXA7CisJRm9ybV9wZ19hdHRyaWJ1 dGUgYXR0ckZvcm07CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlPaWQJCQl0eXBj b2xsYXRpb247CisJYm9vbAkJc2F3X25vdG51bGw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWF0 dHJUdXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90 IGZpbmQgY2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAorCQkJ IGNvbGRlZi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmlidXRl KSBHRVRTVFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0 dHJGb3JtLT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7 CisKKwkvKgorCSAqIFNlYXJjaCBmb3IgYSBOT1QgTlVMTCBkZWNsYXJhdGlvbi4gIEFzIGluIGRl cGFyc2VfQ29sdW1uRGVmLCB3ZSByZWx5IG9uCisJICogZmluZGluZyBhIGNvbnN0cmFpbnQgb24g dGhlIGNvbHVtbiByYXRoZXIgdGhhbiBjb2xkZWYtPmlzX25vdF9udWxsLgorCSAqIChUaGlzIHJv dXRpbmUgaXMgbmV2ZXIgdXNlZCBmb3IgQUxURVIgY2FzZXMuKQorCSAqLworCXNhd19ub3RudWxs ID0gZmFsc2U7CisJZm9yZWFjaChjZWxsLCBjb2xkZWYtPmNvbnN0cmFpbnRzKQorCXsKKwkJQ29u c3RyYWludCAqY29uc3RyID0gKENvbnN0cmFpbnQgKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChj b25zdHItPmNvbnR5cGUgPT0gQ09OU1RSX05PVE5VTEwpCisJCXsKKwkJCXNhd19ub3RudWxsID0g dHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFzYXdfbm90bnVsbCAmJiAhYXR0ckZv cm0tPmF0dGhhc2RlZikKKwl7CisJCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKwkJcmV0dXJu IE5VTEw7CisJfQorCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogJXtuYW1lfUkg V0lUSCBPUFRJT05TICV7ZGVmYXVsdH1zICV7bm90X251bGx9cy4KKwkgKi8KKwljb2x1bW4gPSBu ZXdfb2JqdHJlZV9WQSgiJXtuYW1lfUkgV0lUSCBPUFRJT05TIiwgMiwKKwkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJjb2x1bW4iLAorCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywg Y29sZGVmLT5jb2xuYW1lKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNvbHVtbiwgIiV7bm90 X251bGx9cyIsCisJCQkJCQkgc2F3X25vdG51bGwgPyAiTk9UIE5VTEwiIDogIiIpOworCisJdG1w b2JqID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZikK Kwl7CisJCWNoYXIgKmRlZnN0cjsKKworCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1 bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJICBkcGNvbnRleHQsIE5V TEwpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmYXVsdH1zIiwgZGVm c3RyKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIs IGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2RlZmF1bHR9cyIsIHRt cG9iaik7CisKKwkvKgorCSAqIEdlbmVyYXRlZCBjb2x1bW5zIGFyZSBub3Qgc3VwcG9ydGVkIG9u IHR5cGVkIHRhYmxlcywgc28gd2UgYXJlIGRvbmUuCisJICovCisKKwlSZWxlYXNlU3lzQ2FjaGUo YXR0clR1cCk7CisKKwlyZXR1cm4gY29sdW1uOworfQorCisvKgorICogRGVwYXJzZSB0aGUgZGVm aW5pdGlvbiBvZiBjb2x1bW4gaWRlbnRpdHkuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQ29sdW1uSWRlbnRpdHkoT2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5LCBib29sIGFsdGVy X3RhYmxlKQoreworCU9ialRyZWUJICAgKmNvbHVtbjsKKwlPYmpUcmVlCSAgICppZGVudG9iajsK KwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1 cGxlOworCUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEg c2VxZGF0YTsKKwljaGFyCSAgICppZGVudGZtdDsKKwljaGFyCSAgICpvYmpmbXQ7CisKKwljb2x1 bW4gPSBuZXdfb2JqdHJlZSgiIik7CisKKwlpZiAoIU9pZElzVmFsaWQoc2VxcmVsaWQpKQorCXsK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KGNvbHVtbiwgInByZXNlbnQiLCBmYWxzZSk7CisJCXJldHVy biBjb2x1bW47CisJfQorCisJaWYgKGFsdGVyX3RhYmxlKQorCXsKKwkJaWRlbnRmbXQgPSAiU0VU IEdFTkVSQVRFRCAiOworCQlvYmpmbXQgPSAiJXtvcHRpb259cyI7CisJfQorCWVsc2UKKwl7CisJ CWlkZW50Zm10ID0gIkdFTkVSQVRFRCAiOworCQlvYmpmbXQgPSAiJXtvcHRpb259cyBBUyBJREVO VElUWSI7CisJfQorCisJaWRlbnRvYmogPSBuZXdfb2JqdHJlZShpZGVudGZtdCk7CisKKwlpZiAo aWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0FMV0FZUykKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QoaWRlbnRvYmosIG9iamZtdCwgIkFMV0FZUyIpOworCWVsc2UgaWYgKGlkZW50aXR5ID09 ICBBVFRSSUJVVEVfSURFTlRJVFlfQllfREVGQVVMVCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo aWRlbnRvYmosIG9iamZtdCwgIkJZIERFRkFVTFQiKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29i amVjdChpZGVudG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVj dChjb2x1bW4sICIle2lkZW50aXR5X3R5cGV9cyIsIGlkZW50b2JqKTsKKworCXJlbCA9IHRhYmxl X29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9 IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsIHNlcXJlbGlkKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3Igc2VxdWVuY2UgJXUiLAorCQkJIHNlcXJlbGlkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19z ZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxlKTsKKwlzZXFkYXRhID0gZ2V0X3NlcXVlbmNlX3Zh bHVlcyhzZXFyZWxpZCk7CisKKwkvKiBEZWZpbml0aW9uIGVsZW1lbnRzICovCisJZWxlbXMgPSBs YXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DYWNoZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJs ZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUoTlVMTCwgc2Vx Zm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2Vx X0luY3JlbWVudEJ5KE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBw ZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NaW52YWx1ZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJs ZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoTlVMTCwg c2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2Vf U2VxX1N0YXJ0d2l0aChOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFw cGVuZChlbGVtcywgZGVwYXJzZV9TZXFfUmVzdGFydChOVUxMLCBzZXFkYXRhKSk7CisJLyogV2Ug cHVycG9zZWZ1bGx5IGRvIG5vdCBlbWl0IE9XTkVEIEJZIGhlcmUgKi8KKworCWlmIChhbHRlcl90 YWJsZSkKKwkJYXBwZW5kX2FycmF5X29iamVjdChjb2x1bW4sICIle3NlcV9kZWZpbml0aW9uOiB9 cyIsIGVsZW1zKTsKKwllbHNlCisJCWFwcGVuZF9hcnJheV9vYmplY3QoY29sdW1uLCAiKCAle3Nl cV9kZWZpbml0aW9uOiB9cyApIiwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNs dXNpdmVMb2NrKTsKKworCXJldHVybiBjb2x1bW47Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09M VU1OIC4uLiBTRVQvUkVTRVQgKC4uLikKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9D b2x1bW5TZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0CSAgICpzZXRz ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJT2JqVHJlZQkgICAqY29sc2V0OworCWNoYXIJ ICAgKmZtdDsKKwlib29sCQlpc19yZXNldCA9IHN1YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNldE9w dGlvbnM7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBDT0xVTU4g JXtjb2x1bW59SSBSRVNFVHxTRVQgKCV7b3B0aW9uczosIH1zKQorCSAqLworCWlmIChpc19yZXNl dCkKKwkJZm10ID0gIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFJFU0VUICI7CisJZWxzZQorCQlm bXQgPSAiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUICI7CisKKwljb2xzZXQgPSBuZXdfb2Jq dHJlZV9WQShmbXQsIDEsICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CisJZm9yZWFjaChjZWxsLCAoTGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7CisJCURlZkVsZW0JICAg KmVsZW07CisJCU9ialRyZWUJICAgKnNldDsKKworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0 KGNlbGwpOworCQlzZXQgPSBkZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNfcmVzZXQpOworCQlzZXRz ID0gbGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdChzZXQpKTsKKwl9CisKKwlBc3NlcnQo c2V0cyk7CisJYXBwZW5kX2FycmF5X29iamVjdChjb2xzZXQsICIoJXtvcHRpb25zOiwgfXMpIiwg c2V0cyk7CisKKwlyZXR1cm4gY29sc2V0OworfQorCisvKgorICogRGVwYXJzZSB0aGUgQ1JFQVRF IERPTUFJTgorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUg Y3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVE b21haW4oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZQkgICAqY3Jl YXRlRG9tYWluOworCU9ialRyZWUJICAgKnRtcG9iajsKKwlIZWFwVHVwbGUJdHlwVHVwOworCUZv cm1fcGdfdHlwZSB0eXBGb3JtOworCUxpc3QJICAgKmNvbnN0cmFpbnRzOworCisJdHlwVHVwID0g U2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGRvbWFp biB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0eXBGb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VU U1RSVUNUKHR5cFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVB VEUgRE9NQUlOICV7aWRlbnRpdHl9RCBBUyAle3R5cGV9VCAle25vdF9udWxsfXMgJXtjb25zdHJh aW50c31zCisJICogJXtjb2xsYXRpb259cworCSAqLworCWNyZWF0ZURvbWFpbiA9IG5ld19vYmp0 cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZURvbWFpbiwKKwkJ CQkJCSAiRE9NQUlOICV7aWRlbnRpdHl9RCBBUyIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZURvbWFpbiwKKwkJCQkJCSAiJXt0eXBlfVQiLAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cEZvcm0tPnR5cGJhc2V0eXBlLCB0eXBGb3JtLT50 eXB0eXBtb2QpKTsKKworCWlmICh0eXBGb3JtLT50eXBub3RudWxsKQorCQlhcHBlbmRfc3RyaW5n X29iamVjdChjcmVhdGVEb21haW4sICIle25vdF9udWxsfXMiLCAiTk9UIE5VTEwiKTsKKwllbHNl CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7bm90X251bGx9cyIsICIi KTsKKworCWNvbnN0cmFpbnRzID0gb2J0YWluQ29uc3RyYWludHMoTklMLCBJbnZhbGlkT2lkLCBv YmplY3RJZCk7CisJaWYgKGNvbnN0cmFpbnRzID09IE5JTCkKKwl7CisJCXRtcG9iaiA9IG5ld19v Ymp0cmVlKCIiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxz ZSk7CisJfQorCWVsc2UKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiV7ZWxlbWVudHM6LCB9 cyIsIDEsCisJCQkJCQkJICJlbGVtZW50cyIsIE9ialR5cGVBcnJheSwgY29uc3RyYWludHMpOwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7Y29uc3RyYWludHN9cyIsIHRt cG9iaik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCWlmIChPaWRJc1Zh bGlkKHR5cEZvcm0tPnR5cGNvbGxhdGlvbikpCisJeworCQlPYmpUcmVlICpjb2xsbmFtZTsKKwor CQljb2xsbmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlv bklkLAorCQkJCQkJCQkJCQkgICB0eXBGb3JtLT50eXBjb2xsYXRpb24pOworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBvYmosICIle25hbWV9RCIsIGNvbGxuYW1lKTsKKwl9CisJZWxzZQorCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChjcmVhdGVEb21haW4sICIle2NvbGxhdGlvbn1zIiwgdG1wb2JqKTsKKworCVJl bGVhc2VTeXNDYWNoZSh0eXBUdXApOworCisJcmV0dXJuIGNyZWF0ZURvbWFpbjsKK30KKworLyoK KyAqIERlcGFyc2UgYSBDcmVhdGVGdW5jdGlvblN0bXQgKENSRUFURSBGVU5DVElPTikKKyAqCisg KiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1h bmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRnVuY3Rpb24oT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRnVuY3Rpb25TdG10ICpub2RlID0g KENyZWF0ZUZ1bmN0aW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqY3JlYXRlRnVu YzsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJRGF0dW0JCXRtcGRhdHVtOworCWNoYXIJICAgKnNv dXJjZTsKKwljaGFyCSAgICpwcm9iaW47CisJTGlzdAkgICAqcGFyYW1zOworCUxpc3QJICAgKmRl ZmF1bHRzOworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdAkgICAqdHlwZXMgPSBOSUw7CisJ TGlzdENlbGwgICAqY2VsbDsKKwlMaXN0Q2VsbCAgICpjdXJkZWY7CisJTGlzdENlbGwgICAqdGFi bGVfcGFyYW1zID0gTlVMTDsKKwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlGb3JtX3BnX3Byb2MgcHJv Y0Zvcm07CisJSGVhcFR1cGxlCWxhbmdUdXA7CisJT2lkCQkgICAqdHlwYXJyYXk7CisJT2lkCQkg ICAqdHJmdHlwZXM7CisJRm9ybV9wZ19sYW5ndWFnZSBsYW5nRm9ybTsKKwlpbnQJCQlpOworCWlu dAkJCXR5cG51bTsKKwlpbnQJCQludHlwZXM7CisJYm9vbAkJaXNudWxsOworCWJvb2wJCWlzZnVu Y3Rpb247CisKKwkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgKi8KKwlwcm9jVHVwID0gU2VhcmNo U3lzQ2FjaGUxKFBST0NPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJv Y1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgZnVuY3Rpb24g d2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2Mp IEdFVFNUUlVDVChwcm9jVHVwKTsKKworCS8qIEdldCB0aGUgY29ycmVzcG9uZGluZyBwZ19sYW5n dWFnZSB0dXBsZSAqLworCWxhbmdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoTEFOR09JRCwgcHJvY0Zv cm0tPnByb2xhbmcpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciBsYW5ndWFnZSB3aXRoIE9JRCAldSIsCisJ CQkgcHJvY0Zvcm0tPnByb2xhbmcpOworCWxhbmdGb3JtID0gKEZvcm1fcGdfbGFuZ3VhZ2UpIEdF VFNUUlVDVChsYW5nVHVwKTsKKworCS8qCisJICogRGV0ZXJtaW5lIHVzZWZ1bCB2YWx1ZXMgZm9y IHByb3NyYyBhbmQgcHJvYmluLiAgV2UgY29wZSB3aXRoIHByb2JpbgorCSAqIGJlaW5nIGVpdGhl ciBOVUxMIG9yICItIiwgYnV0IHByb3NyYyBtdXN0IGhhdmUgYSB2YWxpZCB2YWx1ZS4KKwkgKi8K Kwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAg IEFudW1fcGdfcHJvY19wcm9zcmMsICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJS T1IsICJudWxsIHByb3NyYyBpbiBmdW5jdGlvbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlz b3VyY2UgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHRtcGRhdHVtKTsKKworCS8qIERldGVybWluZSBh IHVzZWZ1bCB2YWx1ZSBmb3IgcHJvYmluICovCisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIo UFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYmluLCAmaXNudWxs KTsKKwlpZiAoaXNudWxsKQorCQlwcm9iaW4gPSBOVUxMOworCWVsc2UKKwl7CisJCXByb2JpbiA9 IFRleHREYXR1bUdldENTdHJpbmcodG1wZGF0dW0pOworCQlpZiAocHJvYmluWzBdID09ICdcMCcg fHwgc3RyY21wKHByb2JpbiwgIi0iKSA9PSAwKQorCQkJcHJvYmluID0gTlVMTDsKKwl9CisKKwkv KgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMgRlVO Q1RJT04gJXtzaWduYXR1cmV9cyBSRVRVUk5TICV7cmV0dXJuX3R5cGV9cworCSAqIExBTkdVQUdF ICV7dHJhbnNmb3JtX3R5cGV9cyAle2xhbmd1YWdlfUkgJXt3aW5kb3d9cyAle3ZvbGF0aWxpdHl9 cworCSAqICV7cGFyYWxsZWxfc2FmZXR5fXMgJXtsZWFrcHJvb2Z9cyAle3N0cmljdH1zICV7c2Vj dXJpdHlfZGVmaW5lcn1zCisJICogJXtjb3N0fXMgJXtyb3dzfXMgJXtzdXBwb3J0fXMgJXtzZXRf b3B0aW9uczogfXMgQVMgJXtvYmpmaWxlfUwsCisJICogJXtzeW1ib2x9TAorCSAqLworCWNyZWF0 ZUZ1bmMgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChj cmVhdGVGdW5jLCAiJXtvcl9yZXBsYWNlfXMiLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1Ig UkVQTEFDRSIgOiAiIik7CisKKwkvKgorCSAqIFRvIGNvbnN0cnVjdCB0aGUgYXJndW1lbnRzIGFy cmF5LCBleHRyYWN0IHRoZSB0eXBlIE9JRHMgZnJvbSB0aGUKKwkgKiBmdW5jdGlvbidzIHBnX3By b2MgZW50cnkuICBJZiBwcm9uYXJncyBlcXVhbHMgdGhlIHBhcmFtZXRlciBsaXN0IGxlbmd0aCwK KwkgKiB0aGVyZSBhcmUgbm8gT1VUIHBhcmFtZXRlcnMgYW5kIHRodXMgd2UgY2FuIGV4dHJhY3Qg dGhlIHR5cGUgT0lEIGZyb20KKwkgKiBwcm9hcmd0eXBlczsgb3RoZXJ3aXNlIHdlIG5lZWQgdG8g ZGVjb2RlIHByb2FsbGFyZ3R5cGVzLCB3aGljaCBpcworCSAqIGEgYml0IG1vcmUgaW52b2x2ZWQu CisJICovCisJdHlwYXJyYXkgPSBwYWxsb2MobGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycykg KiBzaXplb2YoT2lkKSk7CisJaWYgKGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpID4gcHJv Y0Zvcm0tPnByb25hcmdzKQorCXsKKwkJYm9vbAlpc251bGw7CisJCURhdHVtCWFsbHR5cGVzOwor CQlEYXR1bSAgKnZhbHVlczsKKwkJYm9vbCAgICpudWxsczsKKwkJaW50CQluZWxlbXM7CisKKwkJ YWxsdHlwZXMgPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkJICAg QW51bV9wZ19wcm9jX3Byb2FsbGFyZ3R5cGVzLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJ CWVsb2coRVJST1IsICJOVUxMIHByb2FsbGFyZ3R5cGVzLCBidXQgbW9yZSBwYXJhbWV0ZXJzIHRo YW4gYXJncyIpOworCQlkZWNvbnN0cnVjdF9hcnJheShEYXR1bUdldEFycmF5VHlwZVAoYWxsdHlw ZXMpLAorCQkJCQkJICBPSURPSUQsIDQsICd0JywgJ2knLAorCQkJCQkJICAmdmFsdWVzLCAmbnVs bHMsICZuZWxlbXMpOworCQlpZiAobmVsZW1zICE9IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRl cnMpKQorCQkJZWxvZyhFUlJPUiwgIm1pc21hdGNoZWQgcHJvYWxsYXJnYXR5cGVzIik7CisJCWZv ciAoaSA9IDA7IGkgPCBsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKTsgaSsrKQorCQkJdHlw YXJyYXlbaV0gPSB2YWx1ZXNbaV07CisJfQorCWVsc2UKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBs aXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKTsgaSsrKQorCQkJIHR5cGFycmF5W2ldID0gcHJv Y0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXTsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJlIGFy ZSBhbnkgZGVmYXVsdCBleHByZXNzaW9ucywgd2UgcmVhZCB0aGUgZGVwYXJzZWQgZXhwcmVzc2lv biBhcworCSAqIGEgbGlzdCBzbyB0aGF0IHdlIGNhbiBhdHRhY2ggdGhlbSB0byBlYWNoIGFyZ3Vt ZW50LgorCSAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAs CisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2FyZ2RlZmF1bHRzLCAmaXNudWxsKTsKKwlpZiAo IWlzbnVsbCkKKwl7CisJCWRlZmF1bHRzID0gRnVuY3Rpb25HZXREZWZhdWx0cyhEYXR1bUdldFRl eHRQKHRtcGRhdHVtKSk7CisJCWN1cmRlZiA9IGxpc3RfaGVhZChkZWZhdWx0cyk7CisJfQorCWVs c2UKKwl7CisJCWRlZmF1bHRzID0gTklMOworCQljdXJkZWYgPSBOVUxMOworCX0KKworCS8qCisJ ICogTm93IGl0ZXJhdGUgb3ZlciBlYWNoIHBhcmFtZXRlciBpbiB0aGUgcGFyc2V0cmVlIHRvIGNy ZWF0ZSB0aGUKKwkgKiBwYXJhbWV0ZXJzIGFycmF5LgorCSAqLworCXBhcmFtcyA9IE5JTDsKKwl0 eXBudW0gPSAwOworCWZvcmVhY2goY2VsbCwgbm9kZS0+cGFyYW1ldGVycykKKwl7CisJCUZ1bmN0 aW9uUGFyYW1ldGVyICpwYXJhbSA9IChGdW5jdGlvblBhcmFtZXRlciAqKSBsZmlyc3QoY2VsbCk7 CisJCU9ialRyZWUJICAgKnBhcmFtb2JqOworCQlPYmpUcmVlCSAgICpkZWZhdWx0dmFsOworCQlP YmpUcmVlCSAgICpuYW1lOworCisJCS8qCisJCSAqIEEgUEFSQU1fVEFCTEUgcGFyYW1ldGVyIGlu ZGljYXRlcyBlbmQgb2YgaW5wdXQgYXJndW1lbnRzOyB0aGUKKwkJICogZm9sbG93aW5nIHBhcmFt ZXRlcnMgYXJlIHBhcnQgb2YgdGhlIHJldHVybiB0eXBlLiAgV2UgaWdub3JlIHRoZW0KKwkJICog aGVyZSwgYnV0IGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGxpc3Qg c28gdGhhdAorCQkgKiB3ZSBjYW4gZWFzaWx5IHByb2R1Y2UgdGhlIHJldHVybiB0eXBlIGJlbG93 LgorCQkgKi8KKwkJaWYgKHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fVEFCTEUpCisJCXsKKwkJ CXRhYmxlX3BhcmFtcyA9IGNlbGw7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFZlcmJv c2Ugc3ludGF4IGZvciBwYXJhbWF0ZXI6ICV7bW9kZX1zICV7bmFtZX1zICV7dHlwZX1UICV7ZGVm YXVsdH1zCisJCSAqCisJCSAqIE5vdGUgdGhhdCAle25hbWV9cyBpcyBhIHN0cmluZyBoZXJlLCBu b3QgYW4gaWRlbnRpZmllcjsgdGhlIHJlYXNvbgorCQkgKiBmb3IgdGhpcyBpcyB0aGF0IGFuIGFi c2VudCBwYXJhbWV0ZXIgbmFtZSBtdXN0IHByb2R1Y2UgYW4gZW1wdHkKKwkJICogc3RyaW5nLCBu b3QgIiIsIHdoaWNoIGlzIHdoYXQgd291bGQgaGFwcGVuIGlmIHdlIHdlcmUgdG8gdXNlCisJCSAq ICV7bmFtZX1JIGhlcmUuICBTbyB3ZSBhZGQgYW5vdGhlciBsZXZlbCBvZiBpbmRpcmVjdGlvbiB0 byBhbGxvdyB1cworCQkgKiB0byBpbmplY3QgYSAicHJlc2VudCIgcGFyYW1ldGVyLgorCQkgKi8K KwkJcGFyYW1vYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHBh cmFtb2JqLCAiJXttb2RlfXMiLAorCQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX0lO ID8gIklOIiA6CisJCQkJCQkJIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fT1VUID8gIk9VVCIg OgorCQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX0lOT1VUID8gIklOT1VUIiA6CisJ CQkJCQkJIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fVkFSSUFESUMgPyAiVkFSSUFESUMiIDoK KwkJCQkJCQkgIklOIik7CisKKwkJLyogT3B0aW9uYWwgd2hvbGVzYWxlIHN1cHByZXNzaW9uIG9m ICJuYW1lIiBvY2N1cnMgaGVyZSAqLworCisJCW5hbWUgPSBuZXdfb2JqdHJlZSgiIik7CisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KG5hbWUsICIle25hbWV9SSIsCisJCQkJCQkJIHBhcmFtLT5uYW1l ID8gcGFyYW0tPm5hbWUgOiAiTlVMTCIpOworCisJCWFwcGVuZF9ib29sX29iamVjdChuYW1lLCAi cHJlc2VudCIsCisJCQkJCQkgICBwYXJhbS0+bmFtZSA/IHRydWUgOiBmYWxzZSk7CisKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIle25hbWV9cyIsIG5hbWUpOworCisJCWRlZmF1 bHR2YWwgPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCQlpZiAoUG9pbnRlcklzVmFsaWQocGFy YW0tPmRlZmV4cHIpKQorCQl7CisJCQljaGFyICpleHByOworCisJCQlpZiAoY3VyZGVmID09IE5V TEwpCisJCQkJZWxvZyhFUlJPUiwgInByb2FyZ2RlZmF1bHRzIGxpc3QgdG9vIHNob3J0Iik7CisJ CQlleHByID0gbGZpcnN0KGN1cmRlZik7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGRlZmF1 bHR2YWwsICIle3ZhbHVlfXMiLCBleHByKTsKKwkJCWN1cmRlZiA9IGxuZXh0KGRlZmF1bHRzLCBj dXJkZWYpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdChkZWZhdWx0dmFsLCAi cHJlc2VudCIsIGZhbHNlKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7 dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVtKytd LCAtMSkpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXtkZWZhdWx0fXMi LCBkZWZhdWx0dmFsKTsKKworCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9v YmplY3QocGFyYW1vYmopKTsKKwl9CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVu dGl0eX1EIiwgMSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJICBvYmplY3RJZCkpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKCIp OworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd1bWVudHM6LCB9cyIsIHBhcmFt cyk7CisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKSIpOworCisJaXNmdW5jdGlvbiA9 IChwcm9jRm9ybS0+cHJva2luZCAhPSBQUk9LSU5EX1BST0NFRFVSRSk7CisKKwlpZiAoaXNmdW5j dGlvbikKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIkZVTkNUSU9OICV7c2ln bmF0dXJlfXMiLCB0bXBvYmopOworCWVsc2UKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRl RnVuYywgIlBST0NFRFVSRSAle3NpZ25hdHVyZX1zIiwgdG1wb2JqKTsKKworCS8qCisJICogQSBy ZXR1cm4gdHlwZSBjYW4gYWRvcHQgb25lIG9mIHR3byBmb3JtczogZWl0aGVyIGEgW1NFVE9GXSBz b21lX3R5cGUsIG9yCisJICogYSBUQUJMRShsaXN0LW9mLXR5cGVzKS4gIFdlIGNhbiB0ZWxsIHRo ZSBzZWNvbmQgZm9ybSBiZWNhdXNlIHdlIHNhdyBhCisJICogdGFibGUgcGFyYW0gYWJvdmUgd2hp bGUgc2Nhbm5pbmcgdGhlIGFyZ3VtZW50IGxpc3QuCisJICovCisJaWYgKHRhYmxlX3BhcmFtcyA9 PSBOVUxMKQorCXsKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiIsIDEsCisJCQkJCQkJICJy ZXR1cm5fZm9ybSIsIE9ialR5cGVTdHJpbmcsICJwbGFpbiIpOworCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXBvYmosICIle3NldG9mfXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcmV0c2V0ID8g IlNFVE9GIiA6ICIiKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtyZXR0eXBl fVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvcmV0dHlwZSwg LTEpKTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdAkgICAqcmV0dHlwZXMgPSBOSUw7CisJCU9ialRy ZWUJICAgKnBhcmFtb2JqOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJUQUJMRSIsIDEs CisJCQkJCQkJICJyZXR1cm5fZm9ybSIsIE9ialR5cGVTdHJpbmcsICJ0YWJsZSIpOworCQlmb3Ig KDsgdGFibGVfcGFyYW1zICE9IE5VTEw7IHRhYmxlX3BhcmFtcyA9IGxuZXh0KG5vZGUtPnBhcmFt ZXRlcnMsIHRhYmxlX3BhcmFtcykpCisJCXsKKwkJCUZ1bmN0aW9uUGFyYW1ldGVyICpwYXJhbSA9 IGxmaXJzdCh0YWJsZV9wYXJhbXMpOworCisJCQlwYXJhbW9iaiA9IG5ld19vYmp0cmVlKCIiKTsK KwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHBhcmFtb2JqLCAiJXtuYW1lfUkiLCBwYXJhbS0+bmFt ZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGFycmF5W3R5cG51bSsrXSwgLTEpKTsKKwkJCXJl dHR5cGVzID0gbGFwcGVuZChyZXR0eXBlcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1vYmopKTsK KwkJfQorCisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7cmV0dHlwZXM6LCB9cyki LCByZXR0eXBlcyk7CisJfQorCisJaWYgKGlzZnVuY3Rpb24pCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNyZWF0ZUZ1bmMsICJSRVRVUk5TICV7cmV0dXJuX3R5cGV9cyIsIHRtcG9iaik7CisKKwkv KiBUUkFOU0ZPUk0gRk9SIFRZUEUgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiVFJBTlNGT1JN Iik7CisKKwludHlwZXMgPSBnZXRfZnVuY190cmZ0eXBlcyhwcm9jVHVwLCAmdHJmdHlwZXMpOwor CWZvciAoaSA9IDA7IGkgPCBudHlwZXM7IGkrKykKKwl7CisJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJGT1IgVFlQRSAle3R5cGV9VCIsIDEsCisJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHJmdHlwZXNbaV0sIC0xKSk7CisJCXR5 cGVzID0gbGFwcGVuZCh0eXBlcywgdG1wb2JqKTsKKwl9CisKKwlpZiAodHlwZXMpCisJCWFwcGVu ZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXtmb3JfdHlwZTosIH1zIiwgdHlwZXMpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlhcHBl bmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXt0cmFuc2Zvcm1fdHlwZX1zIiwgdG1wb2Jq KTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICJMQU5HVUFHRSAle2xhbmd1 YWdlfUkiLAorCQkJCQkJIE5hbWVTdHIobGFuZ0Zvcm0tPmxhbm5hbWUpKTsKKworCWlmIChpc2Z1 bmN0aW9uKQorCXsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7d2luZG93 fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJva2luZCA9PSBQUk9LSU5EX1dJTkRPVyA/ICJXSU5E T1ciIDogIiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXt2b2xhdGls aXR5fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvdm9sYXRpbGUgPT0gUFJPVk9MQVRJTEVfVk9M QVRJTEUgPworCQkJCQkJCSAiVk9MQVRJTEUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0 aWxlID09IFBST1ZPTEFUSUxFX1NUQUJMRSA/CisJCQkJCQkJICJTVEFCTEUiIDogIklNTVVUQUJM RSIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3BhcmFsbGVsX3Nh ZmV0eX1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3BhcmFsbGVsID09IFBST1BBUkFMTEVMX1NB RkUgPworCQkJCQkJCSAiUEFSQUxMRUwgU0FGRSIgOgorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFy YWxsZWwgPT0gUFJPUEFSQUxMRUxfUkVTVFJJQ1RFRCA/CisJCQkJCQkJICJQQVJBTExFTCBSRVNU UklDVEVEIiA6ICJQQVJBTExFTCBVTlNBRkUiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChj cmVhdGVGdW5jLCAiJXtsZWFrcHJvb2Z9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9sZWFrcHJv b2YgPyAiTEVBS1BST09GIiA6ICIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVu YywgIiV7c3RyaWN0fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvaXNzdHJpY3QgPworCQkJCQkJ CSAiUkVUVVJOUyBOVUxMIE9OIE5VTEwgSU5QVVQiIDoKKwkJCQkJCQkgIkNBTExFRCBPTiBOVUxM IElOUFVUIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7c2VjdXJp dHlfZGVmaW5lcn1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3NlY2RlZiA/CisJCQkJCQkJICJT RUNVUklUWSBERUZJTkVSIiA6ICJTRUNVUklUWSBJTlZPS0VSIik7CisKKwkJYXBwZW5kX29iamVj dF9vYmplY3QoY3JlYXRlRnVuYywgIiV7Y29zdH1zIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfVkEo IkNPU1QgJXtjb3N0fW4iLCAxLAorCQkJCQkJCQkJCQkiY29zdCIsIE9ialR5cGVGbG9hdCwKKwkJ CQkJCQkJCQkJcHJvY0Zvcm0tPnByb2Nvc3QpKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgi Uk9XUyIpOworCQlpZiAocHJvY0Zvcm0tPnByb3Jvd3MgPT0gMCkKKwkJCWFwcGVuZF9ib29sX29i amVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQllbHNlCisJCQlhcHBlbmRfZmxvYXRf b2JqZWN0KHRtcG9iaiwgIiV7cm93c31uIiwgcHJvY0Zvcm0tPnByb3Jvd3MpOworCQlhcHBlbmRf b2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXtyb3dzfXMiLCB0bXBvYmopOworCisJCXRtcG9i aiA9IG5ld19vYmp0cmVlKCJTVVBQT1JUICV7bmFtZX1zIik7CisJCWlmIChwcm9jRm9ybS0+cHJv c3VwcG9ydCkKKwkJeworCQkJT2lkCQkJYXJndHlwZXNbMV07CisKKwkJCS8qCisJCQkgKiBXZSBz aG91bGQgcXVhbGlmeSB0aGUgc3VwcG9ydCBmdW5jdGlvbidzIG5hbWUgaWYgaXQgd291bGRuJ3Qg YmUKKwkJCSAqIHJlc29sdmVkIGJ5IGxvb2t1cCBpbiB0aGUgY3VycmVudCBzZWFyY2ggcGF0aC4K KwkJCSAqLworCQkJYXJndHlwZXNbMF0gPSBJTlRFUk5BTE9JRDsKKwkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcG9iaiwgIiV7bmFtZX1zIiwKKwkJCQkJCQkJIGdlbmVyYXRlX2Z1bmN0aW9uX25h bWUocHJvY0Zvcm0tPnByb3N1cHBvcnQsIDEsCisJCQkJCQkJCQkJCQkJCU5JTCwgYXJndHlwZXMs CisJCQkJCQkJCQkJCQkJCWZhbHNlLCBOVUxMLAorCQkJCQkJCQkJCQkJCQlFWFBSX0tJTkRfTk9O RSkpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50 IiwgZmFsc2UpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3N1cHBv cnR9cyIsIHRtcG9iaik7CisJfQorCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsK KwkJRGVmRWxlbQkqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJ ICAgKnRtcG9iajsKKworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2V0IikgPT0gMCkK KwkJeworCQkJVmFyaWFibGVTZXRTdG10ICpzc3RtdCA9IChWYXJpYWJsZVNldFN0bXQgKikgZGVm ZWwtPmFyZzsKKwkJCWNoYXIgKnZhbHVlID0gRXh0cmFjdFNldFZhcmlhYmxlQXJncyhzc3RtdCk7 CisKKwkJCXRtcG9iaiA9IGRlcGFyc2VfRnVuY3Rpb25TZXQoc3N0bXQtPmtpbmQsIHNzdG10LT5u YW1lLCB2YWx1ZSk7CisJCQlzZXRzID0gbGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJfQorCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3Nl dF9vcHRpb25zOiB9cyIsIHNldHMpOworCisJLyogQWRkIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9u ICovCisJKHZvaWQpIFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLCBBbnVtX3BnX3By b2NfcHJvc3FsYm9keSwgJmlzbnVsbCk7CisJaWYgKHByb2NGb3JtLT5wcm9sYW5nID09IFNRTGxh bmd1YWdlSWQgJiYgIWlzbnVsbCkKKwl7CisJCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCQlpbml0 U3RyaW5nSW5mbygmYnVmKTsKKwkJcHJpbnRfZnVuY3Rpb25fc3FsYm9keSgmYnVmLCBwcm9jVHVw KTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtkZWZpbml0aW9ufXMi LCBidWYuZGF0YSk7CisJfQorCWVsc2UgaWYgKHByb2JpbiA9PSBOVUxMKQorCXsKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIkFTICV7ZGVmaW5pdGlvbn1MIiwKKwkJCQkJCQkg c291cmNlKTsKKwl9CisJZWxzZQorCXsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVu YywgIkFTICV7b2JqZmlsZX1MIiwgcHJvYmluKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3Jl YXRlRnVuYywgIiwgJXtzeW1ib2x9TCIsIHNvdXJjZSk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hl KGxhbmdUdXApOworCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKworCXJldHVybiBjcmVhdGVG dW5jOworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBPUEVSQVRPUiBDTEFTUyBjb21tYW5k LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KENvbGxl Y3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvcGNvaWQgPSBjbWQtPmQuY3JlYXRlb3BjLmFk ZHJlc3Mub2JqZWN0SWQ7CisJSGVhcFR1cGxlICAgb3BjVHVwOworCUhlYXBUdXBsZSAgIG9wZlR1 cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJRm9ybV9wZ19vcGNsYXNzIG9wY0Zvcm07 CisJT2JqVHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJTGlzdAkgICAqbGlz dDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyogRG9uJ3QgZGVwYXJzZSBzcWwgY29tbWFuZHMg Z2VuZXJhdGVkIHdoaWxlIGNyZWF0aW5nIGV4dGVuc2lvbiAqLworCWlmIChjbWQtPmluX2V4dGVu c2lvbikKKwkJcmV0dXJuIE5VTEw7CisJCQorCW9wY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShDTEFP SUQsIE9iamVjdElkR2V0RGF0dW0ob3Bjb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9w Y1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGNsYXNzIHdp dGggT0lEICV1Iiwgb3Bjb2lkKTsKKwlvcGNGb3JtID0gKEZvcm1fcGdfb3BjbGFzcykgR0VUU1RS VUNUKG9wY1R1cCk7CisKKwlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIG9w Y0Zvcm0tPm9wY2ZhbWlseSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBP SUQgJXUiLCBvcGNGb3JtLT5vcGNmYW1pbHkpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWls eSkgR0VUU1RSVUNUKG9wZlR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkg KiBDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgJXtpZGVudGl0eX1EICV7ZGVmYXVsdH1zIEZPUiBUWVBF ICV7dHlwZX1UIFVTSU5HCisJICogJXthbW5hbWV9SSAle29wZmFtaWx5fXMgQVMgJXtpdGVtczos IH1zCisJICovCisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiBDTEFT UyAle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BjRm9ybS0+b3BjbmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJICAgTmFtZVN0cihvcGNGb3JtLT5vcGNuYW1lKSkpOworCisJLyogQWRkIHRo ZSBERUZBVUxUIGNsYXVzZSAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHN0bXQsICIle2RlZmF1 bHR9cyIsCisJCQkJCQkgb3BjRm9ybS0+b3BjZGVmYXVsdCA/ICJERUZBVUxUIiA6ICIiKTsKKwor CS8qIEFkZCB0aGUgRk9SIFRZUEUgY2xhdXNlICovCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3Rt dCwgIkZPUiBUWVBFICV7dHlwZX1UIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGNG b3JtLT5vcGNpbnR5cGUsIC0xKSk7CisKKwkvKiBBZGQgdGhlIFVTSU5HIGNsYXVzZSAqLworCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHN0bXQsICJVU0lORyAle2FtbmFtZX1JIiwgZ2V0X2FtX25hbWUo b3BjRm9ybS0+b3BjbWV0aG9kKSk7CisKKwkvKgorCSAqIEFkZCB0aGUgRkFNSUxZIGNsYXVzZTsg YnV0IGlmIGl0IGhhcyB0aGUgc2FtZSBuYW1lIGFuZCBuYW1lc3BhY2UgYXMgdGhlCisJICogb3Bj bGFzcywgdGhlbiBoYXZlIGl0IGV4cGFuZCB0byBlbXB0eSwgYmVjYXVzZSBpdCB3b3VsZCBjYXVz ZSBhIGZhaWx1cmUKKwkgKiBpZiB0aGUgb3BmYW1pbHkgd2FzIGNyZWF0ZWQgaW50ZXJuYWxseS4K KwkgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRkFNSUxZICV7b3BmYW1pbHl9RCIsIDEs CisJCQkJCQkgIm9wZmFtaWx5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3Ry KG9wZkZvcm0tPm9wZm5hbWUpKSk7CisKKwlpZiAoc3RyY21wKE5hbWVTdHIob3BmRm9ybS0+b3Bm bmFtZSksIE5hbWVTdHIob3BjRm9ybS0+b3BjbmFtZSkpID09IDAgJiYKKwkJb3BmRm9ybS0+b3Bm bmFtZXNwYWNlID09IG9wY0Zvcm0tPm9wY25hbWVzcGFjZSkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10 LCAiJXtvcGZhbWlseX1zIiwgIHRtcG9iaik7CisKKwkvKgorCSAqIEFkZCB0aGUgaW5pdGlhbCBp dGVtIGxpc3QuICBOb3RlIHdlIGFsd2F5cyBhZGQgdGhlIFNUT1JBR0UgY2xhdXNlLCBldmVuCisJ ICogd2hlbiBpdCBpcyBpbXBsaWNpdCBpbiB0aGUgb3JpZ2luYWwgY29tbWFuZC4KKwkgKi8KKwl0 bXBvYmogPSBuZXdfb2JqdHJlZSgiU1RPUkFHRSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cG9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGNGb3JtLT5v cGNrZXl0eXBlICE9IEludmFsaWRPaWQgPworCQkJCQkJCQkJCQkgIG9wY0Zvcm0tPm9wY2tleXR5 cGUgOiBvcGNGb3JtLT5vcGNpbnR5cGUsCisJCQkJCQkJCQkJCSAgLTEpKTsKKwlsaXN0ID0gbGlz dF9tYWtlMShuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIEFkZCB0aGUgZGVjbGFy ZWQgb3BlcmF0b3JzICovCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLm9wZXJhdG9y cykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpvcGVyID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVl CSAgICp0bXBvYmo7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9QRVJBVE9SICV7bnVt fW4gJXtvcGVyYXRvcn1PKCV7bHR5cGV9VCwgJXtydHlwZX1UKSIsCisJCQkJCQkJIDQsCisJCQkJ CQkJICJudW0iLCBPYmpUeXBlSW50ZWdlciwgb3Blci0+bnVtYmVyLAorCQkJCQkJCSAib3BlcmF0 b3IiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo T3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3Blci0+b2JqZWN0KSwKKwkJCQkJ CQkibHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKG9w ZXItPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CQluZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5yaWdodHR5cGUsIC0xKSk7CisKKwkJLyogQWRk IHRoZSBGT1IgU0VBUkNIIC8gRk9SIE9SREVSIEJZIGNsYXVzZSAqLworCQlpZiAob3Blci0+c29y dGZhbWlseSA9PSBJbnZhbGlkT2lkKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAi JXtwdXJwb3NlfXMiLCAiRk9SIFNFQVJDSCIpOworCQllbHNlCisJCXsKKwkJCU9ialRyZWUJICAg KnRtcG9iajI7CisKKwkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiRk9SIE9SREVSIEJZICV7 b3BmYW1pbHl9RCIsIDApOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqMiwgIm9wZmFt aWx5IiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvckZhbWls eVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgb3Blci0+c29ydGZhbWlseSkpOworCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwdXJwb3NlfXMiLCB0bXBvYmoyKTsKKwkJfQor CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0K KworCS8qIEFkZCB0aGUgZGVjbGFyZWQgc3VwcG9ydCBmdW5jdGlvbnMgKi8KKwlmb3JlYWNoKGNl bGwsIGNtZC0+ZC5jcmVhdGVvcGMucHJvY2VkdXJlcykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpw cm9jID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlCSAgICp0bXBvYmo7CisJCUhlYXBUdXBsZQlw cm9jVHVwOworCQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJCU9pZAkJICAgKnByb2FyZ3R5cGVz OworCQlMaXN0CSAgICphcmdsaXN0ID0gTklMOworCQlpbnQJCQlpOworCisJCXByb2NUdXAgPSBT ZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jLT5vYmplY3QpKTsK KwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2MtPm9iamVjdCk7CisJCXByb2NG b3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCXRtcG9iaiA9IG5l d19vYmp0cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9VCkgJXtm dW5jdGlvbn1EIiwKKwkJCQkJCQkgNCwKKwkJCQkJCQkgIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBw cm9jLT5udW1iZXIsCisJCQkJCQkJICJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJICJydHlwZSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPnJpZ2h0 dHlwZSwgLTEpLAorCQkJCQkJCSAiZnVuY3Rpb24iLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCQkgIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJcHJvYXJndHlwZXMgPSBw cm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzOworCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0t PnByb25hcmdzOyBpKyspCisJCXsKKwkJCU9ialRyZWUJICAgKmFyZzsKKworCQkJYXJnID0gbmV3 X29ianRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCWFyZ2xpc3QgPSBsYXBw ZW5kKGFyZ2xpc3QsIG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOworCQl9CisKKwkJYXBwZW5kX2Zv cm1hdF9zdHJpbmcodG1wb2JqLCAiKCIpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwg IiV7YXJndHlwZXM6LCB9VCIsIGFyZ2xpc3QpOworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBv YmosICIpIik7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWFwcGVuZF9hcnJh eV9vYmplY3Qoc3RtdCwgIkFTICV7aXRlbXM6LCB9cyIsIGxpc3QpOworCisJUmVsZWFzZVN5c0Nh Y2hlKG9wZlR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKG9wY1R1cCk7CisKKwlyZXR1cm4gc3RtdDsK K30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVUcmlnU3RtdCAoQ1JFQVRFIE9QRVJBVE9SIEZB TUlMWSkKKyAqCisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQg Y3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRp b24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVPcEZhbWls eShPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlIZWFwVHVwbGUgICBvcGZUdXA7 CisJSGVhcFR1cGxlICAgYW1UdXA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUZvcm1f cGdfYW0gIGFtRm9ybTsKKwlPYmpUcmVlCSAgICpjb3BmU3RtdDsKKworCW9wZlR1cCA9IFNlYXJj aFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZChvcGZUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9w ZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisKKwlhbVR1cCA9 IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGZGb3JtLT5vcGZtZXRo b2QpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYW1UdXApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1ldGhvZCAldSIsCisJCQkgb3BmRm9ybS0+b3Bm bWV0aG9kKTsKKwlhbUZvcm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFtVHVwKTsKKworCWNv cGZTdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0 eX1EIFVTSU5HICV7YW1uYW1lfUkiLAorCQkJCQkJCSAgMiwKKwkJCQkJCQkgICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9y bS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgIE5hbWVTdHIob3BmRm9ybS0+b3BmbmFt ZSkpLAorCQkJCQkJCSAgImFtbmFtZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoYW1Gb3JtLT5h bW5hbWUpKTsKKworCVJlbGVhc2VTeXNDYWNoZShhbVR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKG9w ZlR1cCk7CisKKwlyZXR1cm4gY29wZlN0bXQ7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQ3JlYXRlUG9saWN5U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlD cmVhdGVQb2xpY3lTdG10ICpub2RlID0gKENyZWF0ZVBvbGljeVN0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUJICAgKnBvbGljeTsKKworCXBvbGljeSA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUg UE9MSUNZICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZVN0cmlu Zywgbm9kZS0+cG9saWN5X25hbWUpOworCisJLyogYWRkIHRoZSByZXN0IG9mIHRoZSBzdHVmZiAq LworCWFkZF9wb2xpY3lfY2xhdXNlcyhwb2xpY3ksIG9iamVjdElkLCBub2RlLT5yb2xlcywgISFu b2RlLT5xdWFsLAorCQkJCQkgICAhIW5vZGUtPndpdGhfY2hlY2spOworCisJcmV0dXJuIHBvbGlj eTsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclBvbGljeVN0bXQoT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJQb2xpY3lTdG10ICpub2RlID0gKEFs dGVyUG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqcG9saWN5OworCisJcG9s aWN5ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFBPTElDWSAle2lkZW50aXR5fUkiLCAxLAorCQkJ CQkJCSJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnBvbGljeV9uYW1lKTsKKworCS8q IGFkZCB0aGUgcmVzdCBvZiB0aGUgc3R1ZmYgKi8KKwlhZGRfcG9saWN5X2NsYXVzZXMocG9saWN5 LCBvYmplY3RJZCwgbm9kZS0+cm9sZXMsICEhbm9kZS0+cXVhbCwKKwkJCQkJICAgISFub2RlLT53 aXRoX2NoZWNrKTsKKworCXJldHVybiBwb2xpY3k7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3Jl YXRlU2NoZW1hU3RtdC4KKyAqCisgKiBHaXZlbiBhIHNjaGVtYSBPSUQgYW5kIHRoZSBwYXJzZXRy ZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRo ZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9D cmVhdGVTY2hlbWFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0 ZVNjaGVtYVN0bXQgKm5vZGUgPSAoQ3JlYXRlU2NoZW1hU3RtdCAqKSBwYXJzZXRyZWU7CisJT2Jq VHJlZQkJCSAqY3JlYXRlU2NoZW1hOworCU9ialRyZWUJCQkgKmF1dGg7CisKKwkvKgorCSAqIFZl cmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7 bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zCisJICovCisJY3JlYXRlU2NoZW1hID0gbmV3X29ianRy ZWUoIkNSRUFURSBTQ0hFTUEiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVNjaGVt YSwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklG IE5PVCBFWElTVFMiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU2NoZW1h LCAiJXtuYW1lfUkiLCBub2RlLT5zY2hlbWFuYW1lKTsKKworCWF1dGggPSBuZXdfb2JqdHJlZSgi QVVUSE9SSVpBVElPTiIpOworCWlmIChub2RlLT5hdXRocm9sZSkKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QoYXV0aCwgIiV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLAorCQkJCQkJCSBnZXRfcm9sZXNw ZWNfbmFtZShub2RlLT5hdXRocm9sZSkpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVj dChhdXRoLCAiJXthdXRob3JpemF0aW9uX3JvbGV9SSAiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KGF1dGgsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVh dGVTY2hlbWEsICIle2F1dGhvcml6YXRpb259cyIsIGF1dGgpOworCisJcmV0dXJuIGNyZWF0ZVNj aGVtYTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIGRvbWFpbi4K KyAqLworc3RhdGljIGNoYXIgKgorRG9tYWluR2V0RGVmYXVsdChIZWFwVHVwbGUgZG9tVHVwKQor eworCURhdHVtCWRlZjsKKwlOb2RlICAgKmRlZnZhbDsKKwljaGFyICAgKmRlZnN0cjsKKwlib29s CWlzbnVsbDsKKworCWRlZiA9IFN5c0NhY2hlR2V0QXR0cihUWVBFT0lELCBkb21UdXAsIEFudW1f cGdfdHlwZV90eXBkZWZhdWx0YmluLAorCQkJCQkJCSAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQor CQllbG9nKEVSUk9SLCAiZG9tYWluIFwiJXNcIiBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1 ZSIsCisJCQkgTmFtZVN0cigoKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKGRvbVR1cCkpLT50eXBu YW1lKSk7CisJZGVmdmFsID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcoZGVmKSk7 CisJZGVmc3RyID0gZGVwYXJzZV9leHByZXNzaW9uKGRlZnZhbCwgTlVMTCAvKiBkcGNvbnRleHQ/ ICovLAorCQkJCQkJCQkJICAgZmFsc2UsIGZhbHNlKTsKKworCXJldHVybiBkZWZzdHI7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGEgQWx0ZXJEb21haW5TdG10LgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0FsdGVyRG9tYWluU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwK KwkJCQkJCU9iamVjdEFkZHJlc3MgY29uc3RyYWludEFkZHIpCit7CisJQWx0ZXJEb21haW5TdG10 ICpub2RlID0gKEFsdGVyRG9tYWluU3RtdCAqKSBwYXJzZXRyZWU7CisJSGVhcFR1cGxlCWRvbVR1 cDsKKwlGb3JtX3BnX3R5cGUgZG9tRm9ybTsKKwlPYmpUcmVlCSAgICphbHRlckRvbTsKKwljaGFy CSAgICpmbXQ7CisJY29uc3QgY2hhciAqdHlwZTsKKworCS8qIEFMVEVSIERPTUFJTiBEUk9QIENP TlNUUkFJTlQgaXMgaGFuZGxlZCBieSB0aGUgRFJPUCBzdXBwb3J0IGNvZGUgKi8KKwlpZiAobm9k ZS0+c3VidHlwZSA9PSAnWCcpCisJCXJldHVybiBOVUxMOworCisJZG9tVHVwID0gU2VhcmNoU3lz Q2FjaGUxKFRZUEVPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZG9tVHVw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGRvbWFpbiB3aXRoIE9J RCAldSIsCisJCQkgb2JqZWN0SWQpOworCWRvbUZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJV Q1QoZG9tVHVwKTsKKworCXN3aXRjaCAobm9kZS0+c3VidHlwZSkKKwl7CisJCWNhc2UgJ1QnOgor CQkJLyogU0VUIERFRkFVTFQgLyBEUk9QIERFRkFVTFQgKi8KKwkJCWlmIChub2RlLT5kZWYgPT0g TlVMTCkKKwkJCXsKKwkJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCQl0eXBlID0gImRyb3Ag ZGVmYXVsdCI7CisJCQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgdHlwZSk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20s ICIle2lkZW50aXR5fUQgRFJPUCBERUZBVUxUIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICBOYW1lU3Ry KGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJZm10ID0gIkFM VEVSIERPTUFJTiI7CisJCQkJdHlwZSA9ICJzZXQgZGVmYXVsdCI7CisJCQkJYWx0ZXJEb20gPSBu ZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgdHlwZSk7CisJCQkJ YXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50aXR5fUQgU0VUIERFRkFVTFQi LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCQlh cHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRvbSwgIiV7ZGVmYXVsdH1zIiwgRG9tYWluR2V0RGVm YXVsdChkb21UdXApKTsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgJ04nOgorCQkJLyogRFJP UCBOT1QgTlVMTCAqLworCQkJZm10ID0gIkFMVEVSIERPTUFJTiI7CisJCQl0eXBlID0gImRyb3Ag bm90IG51bGwiOworCQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgdHlwZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwg IiV7aWRlbnRpdHl9RCBEUk9QIE5PVCBOVUxMIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihk b21Gb3JtLT50eXBuYW1lKSkpOworCQkJYnJlYWs7CisJCWNhc2UgJ08nOgorCQkJLyogU0VUIE5P VCBOVUxMICovCisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAic2V0IG5vdCBu dWxsIjsKKwkJCWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5 cGVTdHJpbmcsIHR5cGUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lk ZW50aXR5fUQgU0VUIE5PVCBOVUxMIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3Jt LT50eXBuYW1lKSkpOworCQkJYnJlYWs7CisJCWNhc2UgJ0MnOgorCQkJLyogQUREIENPTlNUUkFJ TlQuICBPbmx5IENIRUNLIGNvbnN0cmFpbnRzIGFyZSBzdXBwb3J0ZWQgYnkgZG9tYWlucyAqLwor CQkJZm10ID0gIkFMVEVSIERPTUFJTiI7CisJCQl0eXBlID0gImFkZCBjb25zdHJhaW50IjsKKwkJ CWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVTdHJpbmcs IHR5cGUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50aXR5fUQi LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQkvKiBh IG5ldyBjb25zdHJhaW50IGhhcyBhIG5hbWUgYW5kIGRlZmluaXRpb24gKi8KKwkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGFsdGVyRG9tLCAiQUREIENPTlNUUkFJTlQgJXtjb25zdHJhaW50X25hbWV9 cyIsCisJCQkJCQkJCSBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0cmFpbnRBZGRyLm9iamVjdElk KSk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRvbSwgIiV7ZGVmaW5pdGlvbn1zIiwK KwkJCQkJCQkJIHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0cmFpbnRB ZGRyLm9iamVjdElkKSk7CisJCQlicmVhazsKKwkJY2FzZSAnVic6CisJCQkvKiBWQUxJREFURSBD T05TVFJBSU5UICovCisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAidmFsaWRh dGUgY29uc3RyYWludCI7CisKKwkJCS8qCisJCQkgKiBQcm9jZXNzIHN1YnR5cGU9c3BlY2lmaWMg b3B0aW9ucy4gVmFsaWRhdGlvbiBhIGNvbnN0cmFpbnQKKwkJCSAqIHJlcXVpcmVzIGl0cyBuYW1l LgorCQkJICovCisJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAi JXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3Jt LT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1l KSkpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJEb20sICJWQUxJREFURSBDT05TVFJB SU5UICV7Y29uc3RyYWludF9uYW1lfXMiLCBub2RlLT5uYW1lKTsKKworCQkJYnJlYWs7CisJCWRl ZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzdWJ0eXBlICVjIiwgbm9kZS0+c3VidHlw ZSk7CisJfQorCisJLyogZG9uZSAqLworCVJlbGVhc2VTeXNDYWNoZShkb21UdXApOworCisJcmV0 dXJuIGFsdGVyRG9tOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVNlcVN0bXQuCisgKgor ICogR2l2ZW4gYSBzZXF1ZW5jZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGUgaXQs IHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU2VxU3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlCSpjcmVhdGVTZXE7CisJT2JqVHJlZQkq dG1wb2JqOworCVJlbGF0aW9uCXJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFk YXRhOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsK KwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxlOworCUNyZWF0ZVNlcVN0bXQgKmNy ZWF0ZVNlcVN0bXQgPSAoQ3JlYXRlU2VxU3RtdCAqKSBwYXJzZXRyZWU7CisKKwkvKgorCSAqIFNl cXVlbmNlIGZvciBJREVOVElUWSBDT0xVTU4gb3V0cHV0IHNlcGFyYXRlbHkodmlhIENSRUFURSBU QUJMRSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJICovCisJaWYg KGNyZWF0ZVNlcVN0bXQtPmZvcl9pZGVudGl0eSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXFkYXRh ID0gZ2V0X3NlcXVlbmNlX3ZhbHVlcyhvYmplY3RJZCk7CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9u X29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJcmVsID0gdGFibGVfb3BlbihTZXF1 ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2VhcmNoU3lz Q2FjaGVDb3B5MShTRVFSRUxJRCwKKwkJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJ ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBzZXF1ZW5jZSAldSIsCisJCQkgb2JqZWN0SWQpOworCisJ c2VxZm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCisJLyoK KwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBTRVFV RU5DRSAle2lkZW50aXR5fUQKKwkgKi8KKwljcmVhdGVTZXEgPSBuZXdfb2JqdHJlZSgiQ1JFQVRF Iik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTZXEsICIle3BlcnNpc3RlbmNlfXMi LAorCQkJCQkJIGdldF9wZXJzaXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lz dGVuY2UpKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+ cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbGF0aW9uKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU2VxLCAiU0VRVUVOQ0Ug JXtpZGVudGl0eX1EIiwgdG1wb2JqKTsKKworCS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KKwll bGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0NhY2hlKGNyZWF0ZVNlcSwgc2VxZm9y bSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0N5Y2xlKGNy ZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFy c2VfU2VxX0luY3JlbWVudEJ5KGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9 IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZhbHVlKGNyZWF0ZVNlcSwgc2VxZm9ybSwg ZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01heHZhbHVlKGNy ZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFy c2VfU2VxX1N0YXJ0d2l0aChjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBs YXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0YXJ0KGNyZWF0ZVNlcSwgc2VxZGF0YSkpOwor CisJLyogV2UgcHVycG9zZWZ1bGx5IGRvIG5vdCBlbWl0IE9XTkVEIEJZIGhlcmUgKi8KKwlhcHBl bmRfYXJyYXlfb2JqZWN0KGNyZWF0ZVNlcSwgIiV7ZGVmaW5pdGlvbjogfXMiLCBlbGVtcyk7CisK Kwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXJlbGF0aW9uX2Nsb3NlKHJl bGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGNyZWF0ZVNlcTsKK30KKworLyoK KyAqIERlcGFyc2UgYSBDcmVhdGVTdG10IChDUkVBVEUgVEFCTEUpLgorICoKKyAqIEdpdmVuIGEg dGFibGUgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9i alRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0 cmVlKQoreworCUNyZWF0ZVN0bXQgKm5vZGUgPSAoQ3JlYXRlU3RtdCAqKSBwYXJzZXRyZWU7CisJ UmVsYXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxv Y2spOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlPYmpUcmVlCSpjcmVhdGVTdG10OworCU9ialRy ZWUJKnRtcG9iajsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisK KwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1z IFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCBbT0YKKwkgKiAle29mX3R5cGV9 VCB8IFBBUlRJVElPTiBPRiAle3BhcmVudF9pZGVudGl0eX1EXSAle3RhYmxlX2VsZW1lbnRzfXMK KwkgKiAle2luaGVyaXRzfXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dp dGhfY2xhdXNlfXMKKwkgKiAle29uX2NvbW1pdH1zICV7dGFibGVzcGFjZX1zCisJICovCisJY3Jl YXRlU3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGNyZWF0ZVN0bXQsICIle3BlcnNpc3RlbmNlfXMiLAorCQkJCQkJIGdldF9wZXJzaXN0ZW5jZV9z dHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpKTsKKworCWFwcGVuZF9mb3JtYXRf c3RyaW5nKGNyZWF0ZVN0bXQsICJUQUJMRSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3Jl YXRlU3RtdCwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3Rz ID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRp b25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVh dGVTdG10LCAiJXtpZGVudGl0eX1EIiwgdG1wb2JqKTsKKworCWRwY29udGV4dCA9IGRlcGFyc2Vf Y29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pLAorCQkJCQkJCQkJ b2JqZWN0SWQpOworCisJLyoKKwkgKiBUeXBlZCB0YWJsZXMgYW5kIHBhcnRpdGlvbnMgdXNlIGEg c2xpZ2h0bHkgZGlmZmVyZW50IGZvcm1hdCBzdHJpbmc6IHdlCisJICogbXVzdCBub3QgcHV0IHRh YmxlX2VsZW1lbnRzIHdpdGggcGFyZW50cyBkaXJlY3RseSBpbiB0aGUgZm10IHN0cmluZywKKwkg KiBiZWNhdXNlIGlmIHRoZXJlIGFyZSBubyBvcHRpb25zIHRoZSBwYXJlbnMgbXVzdCBub3QgYmUg ZW1pdHRlZDsgYW5kCisJICogYWxzbywgdHlwZWQgdGFibGVzIGRvIG5vdCBhbGxvdyBmb3IgaW5o ZXJpdGFuY2UuCisJICovCisJaWYgKG5vZGUtPm9mVHlwZW5hbWUgfHwgbm9kZS0+cGFydGJvdW5k KQorCXsKKwkJTGlzdCAgICAgICAqdGFibGVlbHRzID0gTklMOworCisJCS8qCisJCSAqIFdlIGNh bid0IHB1dCB0YWJsZSBlbGVtZW50cyBkaXJlY3RseSBpbiB0aGUgZm10IHN0cmluZyBhcyBhbiBh cnJheQorCQkgKiBzdXJyb3VuZGVkIGJ5IHBhcmVucyBoZXJlLCBiZWNhdXNlIGFuIGVtcHR5IGNs YXVzZSB3b3VsZCBjYXVzZSBhCisJCSAqIHN5bnRheCBlcnJvci4gIFRoZXJlZm9yZSwgd2UgdXNl IGFuIGluZGlyZWN0aW9uIGVsZW1lbnQgYW5kIHNldAorCQkgKiBwcmVzZW50PWZhbHNlIHdoZW4g dGhlcmUgYXJlIG5vIGVsZW1lbnRzLgorCQkgKi8KKwkJaWYgKG5vZGUtPm9mVHlwZW5hbWUpCisJ CXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl90eXBlKHJlbGF0aW9uLT5yZF9yZWwtPnJl bG9mdHlwZSwgLTEpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIk9GICV7 b2ZfdHlwZX1UIiwgdG1wb2JqKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxpc3QgICAgICpwYXJl bnRzOworCQkJT2JqRWxlbSAgKmVsZW07CisKKwkJCXBhcmVudHMgPSBkZXBhcnNlX0luaFJlbGF0 aW9ucyhvYmplY3RJZCk7CisJCQllbGVtID0gKE9iakVsZW0gKikgbGluaXRpYWwocGFyZW50cyk7 CisKKwkJCUFzc2VydChsaXN0X2xlbmd0aChwYXJlbnRzKSA9PSAxKTsKKworCQkJYXBwZW5kX2Zv cm1hdF9zdHJpbmcoY3JlYXRlU3RtdCwgIlBBUlRJVElPTiBPRiIpOworCisJCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtwYXJlbnRfaWRlbnRpdHl9RCIsCisJCQkJCQkJCSBl bGVtLT52YWx1ZS5vYmplY3QpOworCQl9CisKKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVs ZW1lbnRzKHJlbGF0aW9uLCBub2RlLT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkg IHRydWUsICAgICAgLyogdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsgICAgLyog bm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJsZWVs dHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsKKworCQlpZiAodGFibGVlbHRzID09IE5JTCkKKwkJ eworCQkJdG1wb2JqID0gbmV3X29ianRyZWUoIiIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJCX0KKwkJZWxzZQorCQkJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIigle2VsZW1lbnRzOiwgfXMpIiwgMSwKKwkJCQkJCQkJICJlbGVtZW50cyIsIE9i alR5cGVBcnJheSwgdGFibGVlbHRzKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVT dG10LCAiJXt0YWJsZV9lbGVtZW50c31zIiwgdG1wb2JqKTsKKwl9CisJZWxzZQorCXsKKwkJTGlz dCAgICAgICAqdGFibGVlbHRzID0gTklMOworCisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIG5lZWQg dG8gcHJvY2VzcyBMSUtFIGNsYXVzZXMgc2VwYXJhdGVseTsgdGhleSBoYXZlCisJCSAqIGFscmVh ZHkgYmVlbiB0cmFuc2Zvcm1lZCBpbnRvIGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzLgorCQkgKi8K KworCQkvKgorCQkgKiBQcm9jZXNzIHRhYmxlIGVsZW1lbnRzOiBjb2x1bW4gZGVmaW5pdGlvbnMg YW5kIGNvbnN0cmFpbnRzLiAgT25seQorCQkgKiB0aGUgY29sdW1uIGRlZmluaXRpb25zIGFyZSBv YnRhaW5lZCBmcm9tIHRoZSBwYXJzZSBub2RlIGl0c2VsZi4gIFRvCisJCSAqIGdldCBjb25zdHJh aW50cyB3ZSByZWx5IG9uIHBnX2NvbnN0cmFpbnQsIGJlY2F1c2UgdGhlIHBhcnNlIG5vZGUKKwkJ ICogbWlnaHQgYmUgbWlzc2luZyBzb21lIHRoaW5ncyBzdWNoIGFzIHRoZSBuYW1lIG9mIHRoZSBj b25zdHJhaW50cy4KKwkJICovCisJCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyhy ZWxhdGlvbiwgbm9kZS0+dGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICBmYWxzZSwg ICAgIC8qIG5vdCB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOyAgICAvKiBub3Qg Y29tcG9zaXRlICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywg b2JqZWN0SWQsIEludmFsaWRPaWQpOworCisJCWFwcGVuZF9hcnJheV9vYmplY3QoY3JlYXRlU3Rt dCwgIigle3RhYmxlX2VsZW1lbnRzOiwgfXMpIiwgdGFibGVlbHRzKTsKKworCQkvKgorCQkgKiBB ZGQgaW5oZXJpdGFuY2Ugc3BlY2lmaWNhdGlvbi4gIFdlIGNhbm5vdCBzaW1wbHkgc2NhbiB0aGUg bGlzdCBvZgorCQkgKiBwYXJlbnRzIGZyb20gdGhlIHBhcnNlciBub2RlLCBiZWNhdXNlIHRoYXQg bWF5IGxhY2sgdGhlIGFjdHVhbAorCQkgKiBxdWFsaWZpZWQgbmFtZXMgb2YgdGhlIHBhcmVudCBy ZWxhdGlvbnMuICBSYXRoZXIgdGhhbiB0cnlpbmcgdG8KKwkJICogcmUtcmVzb2x2ZSB0aGVtIGZy b20gdGhlIGluZm9ybWF0aW9uIGluIHRoZSBwYXJzZSBub2RlLCBpdCBzZWVtcworCQkgKiBtb3Jl IGFjY3VyYXRlIGFuZCBjb252ZW5pZW50IHRvIGdyYWIgaXQgZnJvbSBwZ19pbmhlcml0cy4KKwkJ ICovCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJJTkhFUklUUyIpOworCQlpZiAobGlzdF9sZW5n dGgobm9kZS0+aW5oUmVsYXRpb25zKSA+IDApCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9i aiwgIigle3BhcmVudHM6LCB9RCkiLCBkZXBhcnNlX0luaFJlbGF0aW9ucyhvYmplY3RJZCkpOwor CQllbHNlCisJCXsKKwkJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIoJXtwYXJlbnRzOiwg fUQpIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsK KwkJfQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtpbmhlcml0c31zIiwg dG1wb2JqKTsKKwl9CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiVEFCTEVTUEFDRSIpOworCWlm IChub2RlLT50YWJsZXNwYWNlbmFtZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAi JXt0YWJsZXNwYWNlfUkiLCBub2RlLT50YWJsZXNwYWNlbmFtZSk7CisJZWxzZQorCXsKKwkJYXBw ZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIiV7dGFibGVzcGFjZX1JIik7CisJCWFwcGVuZF9ib29s X29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29i amVjdChjcmVhdGVTdG10LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXBvYmopOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle29uX2NvbW1pdH1zIiwKKwkJCQkJCSAgZGVwYXJzZV9P bkNvbW1pdENsYXVzZShub2RlLT5vbmNvbW1pdCkpOworCisJLyogRk9SIFZBTFVFUyBjbGF1c2Ug Ki8KKwlpZiAobm9kZS0+cGFydGJvdW5kKQorCXsKKwkJLyoKKwkJICogR2V0IHBnX2NsYXNzLnJl bHBhcnRib3VuZC4gV2UgY2Fubm90IHVzZSBwYXJ0Ym91bmQgaW4gdGhlCisJCSAqIHBhcnNldHJl ZSBkaXJlY3RseSBhcyBpdCdzIHRoZSBvcmlnaW5hbCBwYXJ0Ym91bmQgZXhwcmVzc2lvbgorCQkg KiB3aGljaCBoYXZlbid0IGJlZW4gdHJhbnNmb3JtZWQuCisJCSAqLworCQlhcHBlbmRfc3RyaW5n X29iamVjdChjcmVhdGVTdG10LCAiJXtwYXJ0aXRpb25fYm91bmR9cyIsCisJCQkJCQkJIFJlbGF0 aW9uR2V0UGFydGl0aW9uQm91bmQob2JqZWN0SWQpKTsKKwl9CisKKwkvKiBQQVJUSVRJT04gQlkg Y2xhdXNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlBBUlRJVElPTiBCWSIpOworCWlmIChy ZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwgcGdfZ2V0X3Bh cnRrZXlkZWZfc2ltcGxlKG9iamVjdElkKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2Jq ZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBv YmosICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVT dG10LCAiJXtwYXJ0aXRpb25fYnl9cyIsIHRtcG9iaik7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8K Kwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiVVNJTkciKTsKKwlpZiAobm9kZS0+YWNjZXNzTWV0aG9k KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2FjY2Vzc19tZXRob2R9SSIsIG5v ZGUtPmFjY2Vzc01ldGhvZCk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9i aiwgIiV7YWNjZXNzX21ldGhvZH1JIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJw cmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAi JXthY2Nlc3NfbWV0aG9kfXMiLCB0bXBvYmopOworCisJLyogV0lUSCBjbGF1c2UgKi8KKwl0bXBv YmogPSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25z KQorCXsKKwkJT2JqVHJlZSAgICAqdG1wb2JqMjsKKwkJRGVmRWxlbSAqb3B0ID0gKERlZkVsZW0g KikgbGZpcnN0KGNlbGwpOworCisJCXRtcG9iajIgPSBkZXBhcnNlX0RlZkVsZW0ob3B0LCBmYWxz ZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iajIpKTsK Kwl9CisKKwlpZiAobGlzdCkKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIoJXt3aXRo OiwgfXMpIiwgbGlzdCk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJl c2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3dp dGhfY2xhdXNlfXMiLCB0bXBvYmopOworCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2Ug YSBEZWZpbmVTdG10LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsIE9iamVjdEFkZHJlc3Mgc2Vjb25kYXJ5T2Jq KQoreworCURlZmluZVN0bXQgKmRlZmluZSA9IChEZWZpbmVTdG10ICopIHBhcnNldHJlZTsKKwlP YmpUcmVlCSAgICpkZWZTdG10ID0gTlVMTDsKKworCXN3aXRjaCAoZGVmaW5lLT5raW5kKQorCXsK KwkJY2FzZSBPQkpFQ1RfT1BFUkFUT1I6CisJCQlkZWZTdG10ID0gZGVwYXJzZV9EZWZpbmVTdG10 X09wZXJhdG9yKG9iamVjdElkLCBkZWZpbmUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1Rf VFlQRToKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShvYmplY3RJZCwgZGVm aW5lKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0 ZWQgb2JqZWN0IGtpbmQiKTsKKwl9CisKKwlyZXR1cm4gZGVmU3RtdDsKK30KKworLyoKKyAqIERl cGFyc2UgYSBEZWZpbmVTdG10IChDUkVBVEUgT1BFUkFUT1IpCisgKgorICogR2l2ZW4gYSB0cmln Z2VyIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRvcihPaWQgb2JqZWN0SWQsIERlZmlu ZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUgICBvcHJUdXA7CisJT2JqVHJlZQkgICAqc3Rt dDsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlGb3JtX3Bn X29wZXJhdG9yIG9wckZvcm07CisKKwlvcHJUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BFUk9JRCwg T2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcHJU dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3Igd2l0 aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJb3ByRm9ybSA9IChGb3JtX3BnX29wZXJhdG9yKSBHRVRT VFJVQ1Qob3ByVHVwKTsKKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9S ICV7aWRlbnRpdHl9TyIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcHJGb3JtLT5vcHJuYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkgICBOYW1lU3RyKG9wckZvcm0tPm9wcm5hbWUpKSk7CisKKwkvKiBQUk9DRURV UkUgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUFJPQ0VEVVJFPSV7cHJvY2VkdXJlfUQi LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvY2VkdXJlIiwKKwkJCQkJ CSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3By Y29kZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCisJLyogTEVGVEFSRyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJMRUZUQVJHPSIs IDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJsZWZ0YXJnIik7CisJaWYgKE9p ZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9i aiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3By bGVmdCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50 IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCisJLyogUklHSFRBUkcgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUklHSFRB Ukc9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJpZ2h0YXJnIik7CisJ aWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmlnaHQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBvYmosICIle3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZv cm0tPm9wcnJpZ2h0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwg InByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisKKwkvKiBDT01NVVRBVE9SICovCisJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIkNPTU1VVEFUT1I9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNv bW11dGF0b3IiKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJjb20pKQorCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBvYmosICIle29wZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3Jt LT5vcHJjb20pKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50 IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCisJLyogTkVHQVRPUiAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJORUdBVE9S PSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJuZWdhdG9yIik7CisJaWYg KE9pZElzVmFsaWQob3ByRm9ybS0+b3BybmVnYXRlKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wb2JqLCAiJXtvcGVyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo T3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3BybmVnYXRlKSk7 CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsK KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8q IFJFU1RSSUNUICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlJFU1RSSUNUPSIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0cmljdCIpOworCWlmIChPaWRJc1Zh bGlkKG9wckZvcm0tPm9wcnJlc3QpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIl e3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIEpPSU4g Ki8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiSk9JTj0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiam9pbiIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmpv aW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1EIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJqb2luKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIE1FUkdFUyAqLworCXRtcG9iaiA9IG5l d19vYmp0cmVlX1ZBKCJNRVJHRVMiLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAibWVyZ2VzIik7CisJaWYgKCFvcHJGb3JtLT5vcHJjYW5tZXJnZSkKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBIQVNIRVMgKi8KKwl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiSEFTSEVTIiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgImhhc2hlcyIpOworCWlmICghb3ByRm9ybS0+b3ByY2FuaGFzaCkKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQs ICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisK KwlyZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVFlQRSBzdGF0ZW1l bnQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UeXBlKE9pZCBv YmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIHR5cFR1cDsKKwlP YmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0OworCWNo YXIJICAgKnN0cjsKKwlEYXR1bQkJZGZsdDsKKwlib29sCQlpc251bGw7CisJRm9ybV9wZ190eXBl IHR5cEZvcm07CisKKwl0eXBUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRH ZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXBUdXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIsIG9i amVjdElkKTsKKwl0eXBGb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cFR1cCk7CisK KwkvKiBTaG9ydGN1dCBwcm9jZXNzaW5nIGZvciBzaGVsbCB0eXBlcy4gKi8KKwlpZiAoIXR5cEZv cm0tPnR5cGlzZGVmaW5lZCkKKwl7CisJCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZ UEUiLCAwKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0eXBGb3JtLT50eXBuYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkJICBOYW1lU3RyKHR5cEZvcm0tPnR5cG5hbWUpKSk7CisJCWFwcGVuZF9ib29s X29iamVjdChzdG10LCAicHJlc2VudCIsIHRydWUpOworCQlSZWxlYXNlU3lzQ2FjaGUodHlwVHVw KTsKKwkJcmV0dXJuIHN0bXQ7CisJfQorCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUg VFlQRSIsIDApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIle2lkZW50aXR5fUQiLAor CQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0eXBGb3JtLT50eXBuYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkJTmFtZVN0cih0eXBGb3JtLT50eXBuYW1lKSkpOworCWFwcGVuZF9ib29sX29i amVjdChzdG10LCAicHJlc2VudCIsIHRydWUpOworCisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNs YXVzZSAqLworCWxpc3QgPSBOSUw7CisKKwkvKiBJTlBVVCAqLworCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCIoSU5QVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImlucHV0 Iik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJIHR5cEZvcm0tPnR5cGlucHV0KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBPVVRQVVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiT1VUUFVUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJvdXRwdXQi KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkgdHlwRm9ybS0+dHlwb3V0cHV0KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBSRUNFSVZFICovCisJdG1wID0gbmV3X29ianRyZWVf VkEoIlJFQ0VJVkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlY2Vp dmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXByZWNlaXZlKSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9y bS0+dHlwcmVjZWl2ZSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNl bnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisKKwkvKiBTRU5EICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNFTkQ9IiwgMSwKKwkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNlbmQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0 eXBGb3JtLT50eXBzZW5kKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1 cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwc2VuZCkpOworCWVsc2UKKwkJYXBw ZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBUWVBNT0RfSU4gKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX0lOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJ0eXBtb2RfaW4iKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2Rp bikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZGluKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIFRZUE1PRF9PVVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiVFlQTU9EX09VVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi dHlwbW9kX291dCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZG91dCkpCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ IHR5cEZvcm0tPnR5cG1vZG91dCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwg InByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisKKwkvKiBBTkFMWVpFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkFOQUxZ WkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImFuYWx5emUiKTsKKwlp ZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBhbmFseXplKSkKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwYW5h bHl6ZSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxz ZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkv KiBJTlRFUk5BTExFTkdUSCAqLworCWlmICh0eXBGb3JtLT50eXBsZW4gPT0gLTEpCisJeworCQl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5URVJOQUxMRU5HVEg9VkFSSUFCTEUiLCAwKTsKKwl9CisJ ZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIklOVEVSTkFMTEVOR1RIPSV7dHlwbGVu fW4iLCAxLAorCQkJCQkJCSAidHlwbGVuIiwgT2JqVHlwZUludGVnZXIsIHR5cEZvcm0tPnR5cGxl bik7CisJfQorCisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwkvKiBQQVNTRURCWVZBTFVFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlBBU1NFREJZ VkFMVUUiLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicGFzc2VkYnl2YWx1 ZSIpOworCWlmICghdHlwRm9ybS0+dHlwYnl2YWwpCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAs ICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCisJLyogQUxJR05NRU5UICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkFM SUdOTUVOVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYWxpZ25tZW50 Iik7CisJLyogWFhYIGl0J3Mgb2RkIHRvIHJlcHJlc2VudCBhbGlnbm1lbnQgd2l0aCBzY2hlbWEt cXVhbGlmaWVkIHR5cGUgbmFtZXMgKi8KKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cGFsaWduKQorCXsK KwkJY2FzZSAnZCc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5mbG9hdDgiOworCQkJYnJlYWs7CisJ CWNhc2UgJ2knOgorCQkJc3RyID0gInBnX2NhdGFsb2cuaW50NCI7CisJCQlicmVhazsKKwkJY2Fz ZSAncyc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5pbnQyIjsKKwkJCWJyZWFrOworCQljYXNlICdj JzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmJwY2hhciI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoK KwkJCWVsb2coRVJST1IsICJpbnZhbGlkIGFsaWdubWVudCAlYyIsIHR5cEZvcm0tPnR5cGFsaWdu KTsKKwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXthbGlnbn1zIiwgc3RyKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJTVE9SQUdFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJzdG9yYWdlIik7CisJc3dpdGNoICh0eXBGb3JtLT50eXBzdG9yYWdlKQorCXsKKwkJY2Fz ZSAncCc6CisJCQlzdHIgPSAicGxhaW4iOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJc3Ry ID0gImV4dGVybmFsIjsKKwkJCWJyZWFrOworCQljYXNlICd4JzoKKwkJCXN0ciA9ICJleHRlbmRl ZCI7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlzdHIgPSAibWFpbiI7CisJCQlicmVhazsK KwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHN0b3JhZ2Ugc3BlY2lmaWVyICVj IiwgdHlwRm9ybS0+dHlwc3RvcmFnZSk7CisJfQorCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwg IiV7c3RvcmFnZX1zIiwgc3RyKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIENBVEVHT1JZICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkNB VEVHT1JZPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYXRlZ29yeSIp OworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7Y2F0ZWdvcnl9cyIsCisJCQkJCQkgcHNw cmludGYoIiVjIiwgdHlwRm9ybS0+dHlwY2F0ZWdvcnkpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFBSRUZFUlJFRCAqLworCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJQUkVGRVJSRUQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInByZWZlcnJlZCIpOworCWlmICghdHlwRm9ybS0+dHlwaXNwcmVmZXJyZWQpCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogREVGQVVMVCAqLworCWRmbHQg PSBTeXNDYWNoZUdldEF0dHIoVFlQRU9JRCwgdHlwVHVwLAorCQkJCQkJICAgQW51bV9wZ190eXBl X3R5cGRlZmF1bHQsCisJCQkJCQkgICAmaXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi REVGQVVMVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZGVmYXVsdCIp OworCWlmICghaXNudWxsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2RlZmF1bHR9 cyIsIFRleHREYXR1bUdldENTdHJpbmcoZGZsdCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2Jq ZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBFTEVNRU5UICovCisJdG1wID0gbmV3X29ianRyZWVf VkEoIkVMRU1FTlQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImVsZW1l bnQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBlbGVtKSkKKwkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wLCAiZWxlbSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cEZv cm0tPnR5cGVsZW0sIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJl c2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCS8qIERFTElNSVRFUiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERUxJTUlU RVI9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImRlbGltaXRlciIpOwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVsaW19TCIsCisJCQkJCQkgcHNwcmludGYo IiVjIiwgdHlwRm9ybS0+dHlwZGVsaW0pKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIENPTExBVEFCTEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiQ09MTEFUQUJMRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi Y29sbGF0YWJsZSIpOworCWlmICghT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBjb2xsYXRpb24pKQor CQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmpl Y3Qoc3RtdCwgIiV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0eXBU dXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBT RVQvUkVTRVQgKC4uLikKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZWxTZXRPcHRp b25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxp c3RDZWxsICAgKmNlbGw7CisJT2JqVHJlZQkgICAqcmVsc2V0OworCWNoYXIJICAgKmZtdDsKKwli b29sCQlpc19yZXNldCA9IHN1YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNldFJlbE9wdGlvbnM7CisK KwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBSRVNFVHxTRVQgKCV7b3B0aW9uczos IH1zKQorCSAqLworCWlmIChpc19yZXNldCkKKwkJZm10ID0gIlJFU0VUICI7CisJZWxzZQorCQlm bXQgPSAiU0VUICI7CisKKwlyZWxzZXQgPSBuZXdfb2JqdHJlZShmbXQpOworCisJZm9yZWFjaChj ZWxsLCAoTGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7CisJCURlZkVsZW0JICAgKmVsZW07CisJCU9i alRyZWUJICAgKnNldDsKKworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlz ZXQgPSBkZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNfcmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChz ZXRzLCBuZXdfb2JqZWN0X29iamVjdChzZXQpKTsKKwl9CisKKwlBc3NlcnQoc2V0cyk7CisJYXBw ZW5kX2FycmF5X29iamVjdChyZWxzZXQsICIoJXtvcHRpb25zOiwgfXMpIiwgc2V0cyk7CisKKwly ZXR1cm4gcmVsc2V0OworfQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisK KworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwor LyoKKyAqIERlcGFyc2UgYSBDcmVhdGVUcmlnU3RtdCAoQ1JFQVRFIFRSSUdHRVIpCisgKgorICog R2l2ZW4gYSB0cmlnZ2VyIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJl dHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlVHJpZ1N0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVHJpZ1N0bXQgKm5vZGUgPSAoQ3JlYXRlVHJp Z1N0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXBnX3RyaWdnZXI7CisJSGVhcFR1cGxlCXRy aWdUdXA7CisJRm9ybV9wZ190cmlnZ2VyIHRyaWdGb3JtOworCU9ialRyZWUJICAgKnRyaWdnZXI7 CisJT2JqVHJlZQkgICAqdG1wb2JqOworCWludAkJCXRnbmFyZ3M7CisJTGlzdAkgICAqbGlzdDsK KwlMaXN0CSAgICpldmVudHM7CisKKwlwZ190cmlnZ2VyID0gdGFibGVfb3BlbihUcmlnZ2VyUmVs YXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXRyaWdUdXAgPSBnZXRfY2F0YWxvZ19vYmpl Y3RfYnlfb2lkKHBnX3RyaWdnZXIsIEFudW1fcGdfdHJpZ2dlcl9vaWQsIG9iamVjdElkKTsKKwl0 cmlnRm9ybSA9IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCS8qCisJ ICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle2NvbnN0cmFpbnR9cyBUUklHR0VS ICV7bmFtZX1JICV7dGltZX1zICV7ZXZlbnRzOiBPUiB9cworCSAqIE9OICV7cmVsYXRpb259RCAl e2Zyb21fdGFibGV9cyAle2NvbnN0cmFpbnRfYXR0cnM6IH1zCisJICogRk9SIEVBQ0ggJXtmb3Jf ZWFjaH1zICV7d2hlbn1zIEVYRUNVVEUgUFJPQ0VEVVJFICV7ZnVuY3Rpb259cworCSAqLworCXRy aWdnZXIgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0 cmlnZ2VyLCAiJXtjb25zdHJhaW50fXMiLAorCQkJCQkJIG5vZGUtPmlzY29uc3RyYWludCA/ICJD T05TVFJBSU5UIiA6ICIiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICJUUklH R0VSICV7bmFtZX1JIiwgbm9kZS0+dHJpZ25hbWUpOworCisJaWYgKG5vZGUtPnRpbWluZyA9PSBU UklHR0VSX1RZUEVfQkVGT1JFKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiJXt0 aW1lfXMiLCAiQkVGT1JFIik7CisJZWxzZSBpZiAobm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQ RV9BRlRFUikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7dGltZX1zIiwgIkFG VEVSIik7CisJZWxzZSBpZiAobm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9JTlNURUFEKQor CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiJXt0aW1lfXMiLCAiSU5TVEVBRCBPRiIp OworCWVsc2UKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCB0cmlnZ2VyIHRpbWluZyB0eXBl ICVkIiwgbm9kZS0+dGltaW5nKTsKKworCS8qCisJICogRGVjb2RlIHRoZSBldmVudHMgdGhhdCB0 aGUgdHJpZ2dlciBmaXJlcyBmb3IuICBUaGUgb3V0cHV0IGlzIGEgbGlzdDsKKwkgKiBpbiBtb3N0 IGNhc2VzIGl0IHdpbGwganVzdCBiZSBhIHN0cmluZyB3aXRoIHRoZSBldmVudCBuYW1lLCBidXQg d2hlbgorCSAqIHRoZXJlJ3MgYW4gVVBEQVRFIHdpdGggYSBsaXN0IG9mIGNvbHVtbnMsIHdlIHJl dHVybiBhIEpTT04gb2JqZWN0LgorCSAqLworCWV2ZW50cyA9IE5JTDsKKwlpZiAobm9kZS0+ZXZl bnRzICYgVFJJR0dFUl9UWVBFX0lOU0VSVCkKKwkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5l d19zdHJpbmdfb2JqZWN0KCJJTlNFUlQiKSk7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJf VFlQRV9ERUxFVEUpCisJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVj dCgiREVMRVRFIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfVFJVTkNBVEUp CisJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiVFJVTkNBVEUi KSk7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9VUERBVEUpCisJeworCQlpZiAo bm9kZS0+Y29sdW1ucyA9PSBOSUwpCisJCXsKKwkJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBu ZXdfc3RyaW5nX29iamVjdCgiVVBEQVRFIikpOworCQl9CisJCWVsc2UKKwkJeworCQkJT2JqVHJl ZQkgICAqdXBkYXRlOworCQkJTGlzdENlbGwgICAqY2VsbDsKKwkJCUxpc3QJICAgKmNvbHMgPSBO SUw7CisKKwkJCS8qCisJCQkgKiBDdXJyZW50bHkgb25seSBVUERBVEUgT0YgY2FuIGJlIG9iamVj dHMgaW4gdGhlIG91dHB1dCBKU09OLCBidXQKKwkJCSAqIHdlIGFkZCBhICJraW5kIiBlbGVtZW50 IHNvIHRoYXQgdXNlciBjb2RlIGNhbiBkaXN0aW5ndWlzaAorCQkJICogcG9zc2libGUgZnV0dXJl IG5ldyBldmVudCB0eXBlcy4KKwkJCSAqLworCQkJdXBkYXRlID0gbmV3X29ianRyZWVfVkEoIlVQ REFURSBPRiIsIDEsCisJCQkJCQkJCQkia2luZCIsIE9ialR5cGVTdHJpbmcsICJ1cGRhdGVfb2Yi KTsKKworCQkJZm9yZWFjaChjZWxsLCBub2RlLT5jb2x1bW5zKQorCQkJeworCQkJCWNoYXIgICAq Y29sbmFtZSA9IHN0clZhbChsZmlyc3QoY2VsbCkpOworCisJCQkJY29scyA9IGxhcHBlbmQoY29s cywgbmV3X3N0cmluZ19vYmplY3QoY29sbmFtZSkpOworCQkJfQorCisJCQlhcHBlbmRfYXJyYXlf b2JqZWN0KHVwZGF0ZSwgIiV7Y29sdW1uczosIH1JIiwgY29scyk7CisKKwkJCWV2ZW50cyA9IGxh cHBlbmQoZXZlbnRzLCBuZXdfb2JqZWN0X29iamVjdCh1cGRhdGUpKTsKKwkJfQorCX0KKwlhcHBl bmRfYXJyYXlfb2JqZWN0KHRyaWdnZXIsICIle2V2ZW50czogT1IgfXMiLCBldmVudHMpOworCisJ dG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwK KwkJCQkJCQkJCSAgdHJpZ0Zvcm0tPnRncmVsaWQpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRy aWdnZXIsICJPTiAle3JlbGF0aW9ufUQiLCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIkZST00iLCAwKTsKKwlpZiAodHJpZ0Zvcm0tPnRnY29uc3RycmVsaWQpCisJeworCQlP YmpUcmVlCSAgICpyZWw7CisKKwkJcmVsID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJl bGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHRyaWdGb3JtLT50Z2NvbnN0cnJlbGlkKTsK KwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtyZWxhdGlvbn1EIiwgcmVsKTsKKwl9 CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAiJXtmcm9tX3RhYmxlfXMiLCB0bXBvYmop OworCisJbGlzdCA9IE5JTDsKKwlpZiAobm9kZS0+ZGVmZXJyYWJsZSkKKwkJbGlzdCA9IGxhcHBl bmQobGlzdCwKKwkJCQkJICAgbmV3X3N0cmluZ19vYmplY3QoIkRFRkVSUkFCTEUiKSk7CisJaWYg KG5vZGUtPmluaXRkZWZlcnJlZCkKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwKKwkJCQkJICAgbmV3 X3N0cmluZ19vYmplY3QoIklOSVRJQUxMWSBERUZFUlJFRCIpKTsKKwlhcHBlbmRfYXJyYXlfb2Jq ZWN0KHRyaWdnZXIsICIle2NvbnN0cmFpbnRfYXR0cnM6IH1zIiwgbGlzdCk7CisKKwlhcHBlbmRf c3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiRk9SIEVBQ0ggJXtmb3JfZWFjaH1zIiwKKwkJCQkJCSBu b2RlLT5yb3cgPyAiUk9XIiA6ICJTVEFURU1FTlQiKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJXSEVOIiwgMCk7CisJaWYgKG5vZGUtPndoZW5DbGF1c2UpCisJeworCQlOb2RlCSAgICp3 aGVuQ2xhdXNlOworCQlEYXR1bQkJdmFsdWU7CisJCWJvb2wJCWlzbnVsbDsKKworCQl2YWx1ZSA9 IGZhc3RnZXRhdHRyKHRyaWdUdXAsIEFudW1fcGdfdHJpZ2dlcl90Z3F1YWwsCisJCQkJCQkJUmVs YXRpb25HZXREZXNjcihwZ190cmlnZ2VyKSwgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQll bG9nKEVSUk9SLCAiYm9ndXMgTlVMTCB0Z3F1YWwiKTsKKworCQl3aGVuQ2xhdXNlID0gc3RyaW5n VG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcodmFsdWUpKTsKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wb2JqLCAiKCV7Y2xhdXNlfXMpIiwKKwkJCQkJCQkgcGdfZ2V0X3RyaWdnZXJfd2hlbmNs YXVzZSh0cmlnRm9ybSwKKwkJCQkJCQkJCQkJCQkgICB3aGVuQ2xhdXNlLAorCQkJCQkJCQkJCQkJ CSAgIGZhbHNlKSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInBy ZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIiV7d2hlbn1z IiwgdG1wb2JqKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2Z1bmNuYW1lfUQiLCAx LAorCQkJCQkJICJmdW5jbmFtZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRyaWdG b3JtLT50Z2ZvaWQpKTsKKwlsaXN0ID0gTklMOworCXRnbmFyZ3MgPSB0cmlnRm9ybS0+dGduYXJn czsKKwlpZiAodGduYXJncyA+IDApCisJeworCQlieXRlYSAgKnRnYXJnczsKKwkJY2hhciAgICph cmdzdHI7CisJCWJvb2wJaXNudWxsOworCQlpbnQJCWZpbmR4OworCQlpbnQJCWxlbnRnYXJnczsK KwkJY2hhciAgICpwOworCisJCXRnYXJncyA9IERhdHVtR2V0Qnl0ZWFQKGZhc3RnZXRhdHRyKHRy aWdUdXAsCisJCQkJCQkJCQkJCUFudW1fcGdfdHJpZ2dlcl90Z2FyZ3MsCisJCQkJCQkJCQkJCVJl bGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksCisJCQkJCQkJCQkJCSZpc251bGwpKTsKKwkJaWYg KGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgdGdhcmdzIik7CisJCWFyZ3N0 ciA9IChjaGFyICopIFZBUkRBVEEodGdhcmdzKTsKKwkJbGVudGdhcmdzID0gVkFSU0laRV9BTllf RVhIRFIodGdhcmdzKTsKKworCQlwID0gYXJnc3RyOworCQlmb3IgKGZpbmR4ID0gMDsgZmluZHgg PCB0Z25hcmdzOyBmaW5keCsrKQorCQl7CisJCQlzaXplX3QJdGxlbjsKKworCQkJLyogVmVyaWZ5 IHRoYXQgdGhlIGFyZ3VtZW50IGVuY29kaW5nIGlzIGNvcnJlY3QgKi8KKwkJCXRsZW4gPSBzdHJs ZW4ocCk7CisJCQlpZiAocCArIHRsZW4gPj0gYXJnc3RyICsgbGVudGdhcmdzKQorCQkJCWVyZXBv cnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVF KSwKKwkJCQkJCSBlcnJtc2coImludmFsaWQgYXJndW1lbnQgc3RyaW5nICglcykgZm9yIHRyaWdn ZXIgXCIlc1wiIiwKKwkJCQkJCQkJYXJnc3RyLCBOYW1lU3RyKHRyaWdGb3JtLT50Z25hbWUpKSkp OworCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwKSk7CisKKwkJ CXAgKz0gdGxlbiArIDE7CisJCX0KKwl9CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmos ICIoIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2FyZ3M6LCB9TCIsIGxpc3Qp OwkJLyogbWlnaHQgYmUgTklMICovCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKSIp OworCisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIkVYRUNVVEUgUFJPQ0VEVVJFICV7 ZnVuY3Rpb259cyIsIHRtcG9iaik7CisKKwl0YWJsZV9jbG9zZShwZ190cmlnZ2VyLCBBY2Nlc3NT aGFyZUxvY2spOworCisJcmV0dXJuIHRyaWdnZXI7Cit9CisKKy8qCisgKiBEZXBhcnNlIERlZkVs ZW1zLCBhcyB1c2VkIGUuZy4gYnkgQUxURVIgQ09MVU1OIC4uLiBTRVQsIGludG8gYSBsaXN0IG9m IFNFVAorICogKC4uLikgIG9yIFJFU0VUICguLi4pIGNvbnRlbnRzLgorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNldCkKK3sK KwlPYmpUcmVlCSAgICpzZXQ7CisJT2JqVHJlZQkgICAqb3B0bmFtZTsKKworCXNldCA9IG5ld19v Ymp0cmVlKCIiKTsKKwlvcHRuYW1lID0gbmV3X29ianRyZWUoIiIpOworCisJaWYgKGVsZW0tPmRl Zm5hbWVzcGFjZSAhPSBOVUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChvcHRuYW1lLCAiJXtz Y2hlbWF9SS4iLCBlbGVtLT5kZWZuYW1lc3BhY2UpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qo b3B0bmFtZSwgIiV7bGFiZWx9SSIsIGVsZW0tPmRlZm5hbWUpOworCisJYXBwZW5kX29iamVjdF9v YmplY3Qoc2V0LCAiJXtsYWJlbH1zIiwgb3B0bmFtZSk7CisKKwlpZiAoIWlzX3Jlc2V0KQorCQlh cHBlbmRfc3RyaW5nX29iamVjdChzZXQsICIgPSAle3ZhbHVlfUwiLAorCQkJCQkJCSBlbGVtLT5h cmcgPyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8g IlRSVUUiIDogIkZBTFNFIik7CisKKwlyZXR1cm4gc2V0OworfQorCisvKgorICogSGFuZGxlIGRl cGFyc2luZyBvZiBEUk9QIGNvbW1hbmRzLgorICovCitjaGFyICoKK2RlcGFyc2VfZHJvcF9jb21t YW5kKGNvbnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAorCQkJ CQkgRHJvcEJlaGF2aW9yIGJlaGF2aW9yKQoreworCVN0cmluZ0luZm9EYXRhICBzdHI7CisJY2hh cgkJICAgKmNvbW1hbmQ7CisJY2hhcgkJICAgKmlkZW50aXR5ID0gKGNoYXIgKikgb2JqaWRlbnRp dHk7CisJY2hhcgkJICAgKmZtdDsKKwlPYmpUcmVlCQkqc3RtdCwgKnN0bXQyOworCUpzb25iCQkg ICpqc29uYjsKKworCWluaXRTdHJpbmdJbmZvKCZzdHIpOworCisJZm10ID0gcHNwcmludGYoIkRS T1AgJXMgSUYgRVhJU1RTICUle29iamlkZW50aXR5fXMiLCBvYmplY3R0eXBlKTsKKworCXN0bXQg PSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJvYmppZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlk ZW50aXR5KTsKKwlzdG10MiA9IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCSAg ICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGJlaGF2aW9yID09IERST1BfQ0FTQ0FERSk7CisKKwlh cHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtjYXNjYWRlfXMiLCBzdG10Mik7CisKKwlqc29u YiA9IG9ianRyZWVfdG9fanNvbmIoc3RtdCk7CisJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZz dHIsICZqc29uYi0+cm9vdCwgSlNPTkJfRVNUSU1BVEVEX0xFTik7CisKKwlyZXR1cm4gY29tbWFu ZDsKK30KKworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgc2V0dGluZyBvZiBGdW5jdGlvbgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Z1bmN0aW9uU2V0KFZhcmlhYmxlU2V0S2luZCBr aW5kLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpUcmVlCSAgICpvYmo7CisKKwlp ZiAoa2luZCA9PSBWQVJfUkVTRVRfQUxMKQorCXsKKwkJb2JqID0gbmV3X29ianRyZWUoIlJFU0VU IEFMTCIpOworCX0KKwllbHNlIGlmICh2YWx1ZSAhPSBOVUxMKQorCXsKKwkJb2JqID0gbmV3X29i anRyZWVfVkEoIlNFVCAle3NldF9uYW1lfUkiLCAxLAorCQkJCQkJICAgInNldF9uYW1lIiwgT2Jq VHlwZVN0cmluZywgbmFtZSk7CisKKwkJLyoKKwkJICogU29tZSBHVUMgdmFyaWFibGUgbmFtZXMg YXJlICdMSVNUJyB0eXBlIGFuZCBoZW5jZSBtdXN0IG5vdCBiZQorCQkgKiBxdW90ZWQuCisJCSAq LworCQlpZiAoR2V0Q29uZmlnT3B0aW9uRmxhZ3MobmFtZSwgdHJ1ZSkgJiBHVUNfTElTVF9RVU9U RSkKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9iaiwgIlRPICV7c2V0X3ZhbHVlfXMiLCB2YWx1 ZSk7CisJCWVsc2UKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9iaiwgIlRPICV7c2V0X3ZhbHVl fUwiLCB2YWx1ZSk7CisJfQorCWVsc2UKKwl7CisJCW9iaiA9IG5ld19vYmp0cmVlKCJSRVNFVCIp OworCQlhcHBlbmRfc3RyaW5nX29iamVjdChvYmosICIle3NldF9uYW1lfUkiLCBuYW1lKTsKKwl9 CisKKwlyZXR1cm4gb2JqOworfQorCisvKgorICogRGVwYXJzZSBhbiBJbmRleFN0bXQuCisgKgor ICogR2l2ZW4gYW4gaW5kZXggT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwg cmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4K KyAqCisgKiBJZiB0aGUgaW5kZXggY29ycmVzcG9uZHMgdG8gYSBjb25zdHJhaW50LCBOVUxMIGlz IHJldHVybmVkLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0luZGV4U3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlJbmRleFN0bXQgICpub2RlID0gKEluZGV4 U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqaW5kZXhTdG10OworCU9ialRyZWUJICAg KnRtcG9iajsKKwlSZWxhdGlvbglpZHhyZWw7CisJUmVsYXRpb24JaGVhcHJlbDsKKwljaGFyCSAg ICppbmRleF9hbTsKKwljaGFyCSAgICpkZWZpbml0aW9uOworCWNoYXIJICAgKnJlbG9wdGlvbnM7 CisJY2hhcgkgICAqdGFibGVzcGFjZTsKKwljaGFyCSAgICp3aGVyZUNsYXVzZTsKKworCWlmIChu b2RlLT5wcmltYXJ5IHx8IG5vZGUtPmlzY29uc3RyYWludCkKKwl7CisJCS8qCisJCSAqIEluZGV4 ZXMgZm9yIFBSSU1BUlkgS0VZIGFuZCBvdGhlciBjb25zdHJhaW50cyBhcmUgb3V0cHV0CisJCSAq IHNlcGFyYXRlbHk7IHJldHVybiBlbXB0eSBoZXJlLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJ fQorCisJaWR4cmVsID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwloZWFwcmVsID0gcmVsYXRpb25fb3BlbihpZHhyZWwtPnJkX2luZGV4LT5pbmRyZWxpZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCXBnX2dldF9pbmRleGRlZl9kZXRhaWxlZChvYmplY3RJZCwKKwkJ CQkJCQkgJmluZGV4X2FtLCAmZGVmaW5pdGlvbiwgJnJlbG9wdGlvbnMsCisJCQkJCQkJICZ0YWJs ZXNwYWNlLCAmd2hlcmVDbGF1c2UpOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJ ICogQ1JFQVRFICV7dW5pcXVlfXMgSU5ERVggJXtjb25jdXJyZW50bHl9cyAle2lmX25vdF9leGlz dHN9cyAle25hbWV9SSBPTgorCSAqICV7dGFibGV9RCBVU0lORyAle2luZGV4X2FtfXMgKCV7ZGVm aW5pdGlvbn1zKSAle3dpdGh9cyAle3RhYmxlc3BhY2V9cworCSAqICV7d2hlcmVfY2xhdXNlfXMK KwkgKi8KKwlpbmRleFN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfc3Ry aW5nX29iamVjdChpbmRleFN0bXQsICIle3VuaXF1ZX1zIiwKKwkJCQkJCSBub2RlLT51bmlxdWUg PyAiVU5JUVVFIiA6ICIiKTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGluZGV4U3RtdCwgIklO REVYIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICIle2NvbmN1cnJlbnRs eX1zIiwKKwkJCQkJCSBub2RlLT5jb25jdXJyZW50ID8gIkNPTkNVUlJFTlRMWSIgOiAiIik7CisK KwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICIle2lmX25vdF9leGlzdHN9cyIsCisJ CQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7bmFtZX1JIiwKKwkJCQkJCSBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShpZHhyZWwpKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4 U3RtdCwgIk9OICV7dGFibGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGhl YXByZWwtPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKGhlYXByZWwpKSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICJVU0lO RyAle2luZGV4X2FtfXMiLCBpbmRleF9hbSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRl eFN0bXQsICIoJXtkZWZpbml0aW9ufXMpIiwgZGVmaW5pdGlvbik7CisKKwkvKiByZWxvcHRpb25z ICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIldJVEgiKTsKKwlpZiAocmVsb3B0aW9ucykKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiKCV7b3B0c31zKSIsIHJlbG9wdGlvbnMpOwor CWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJ YXBwZW5kX29iamVjdF9vYmplY3QoaW5kZXhTdG10LCAiJXt3aXRofXMiLCB0bXBvYmopOworCisJ LyogdGFibGVzcGFjZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJ aWYgKHRhYmxlc3BhY2UpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7dGFibGVz cGFjZX1zIiwgdGFibGVzcGFjZSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICIl e3RhYmxlc3BhY2V9cyIsIHRtcG9iaik7CisKKwkvKiBXSEVSRSBjbGF1c2UgKi8KKwl0bXBvYmog PSBuZXdfb2JqdHJlZSgiV0hFUkUiKTsKKwlpZiAod2hlcmVDbGF1c2UpCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcG9iaiwgIiV7d2hlcmV9cyIsIHdoZXJlQ2xhdXNlKTsKKwllbHNlCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGluZGV4U3RtdCwgIiV7d2hlcmVfY2xhdXNlfXMiLCB0bXBvYmopOworCisJdGFi bGVfY2xvc2UoaWR4cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCXRhYmxlX2Nsb3NlKGhlYXByZWws IEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gaW5kZXhTdG10OworfQorCisvKgorICogRGVw YXJzZSB0aGUgSU5IRVJJVFMgcmVsYXRpb25zLgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lELCBy ZXR1cm4gYSBzY2hlbWEgcXVhbGlmaWVkIHRhYmxlIGxpc3QgcmVwcmVzZW50aW5nCisgKiB0aGUg cGFyZW50IHRhYmxlcy4KKyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZV9JbmhSZWxhdGlvbnMo T2lkIG9iamVjdElkKQoreworCUxpc3QJICAgKnBhcmVudHMgPSBOSUw7CisJUmVsYXRpb24JaW5o UmVsOworCVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5OworCUhlYXBUdXBsZQl0 dXBsZTsKKworCWluaFJlbCA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBSb3dFeGNs dXNpdmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXksCisJCQkJQW51bV9wZ19pbmhlcml0c19p bmhyZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0 SWRHZXREYXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihpbmhS ZWwsIEluaGVyaXRzUmVsaWRTZXFub0luZGV4SWQsCisJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAm a2V5KTsKKworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4 dChzY2FuKSkpCisJeworCQlPYmpUcmVlCSpwYXJlbnQ7CisJCUZvcm1fcGdfaW5oZXJpdHMgZm9y bUluaCA9IChGb3JtX3BnX2luaGVyaXRzKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCXBhcmVudCA9 IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCSBmb3JtSW5oLT5pbmhwYXJlbnQpOworCQlwYXJlbnRzID0gbGFwcGVuZChwYXJlbnRzLCBu ZXdfb2JqZWN0X29iamVjdChwYXJlbnQpKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4p OworCXRhYmxlX2Nsb3NlKGluaFJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gcGFy ZW50czsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIE9OIENPTU1NSVQgLi4uIGNsYXVzZSBmb3Ig Q1JFQVRFIC4uLiBURU1QT1JBUlkgLi4uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf T25Db21taXRDbGF1c2UoT25Db21taXRBY3Rpb24gb3B0aW9uKQoreworCU9ialRyZWUJICAgKm9u Y29tbWl0OworCisJb25jb21taXQgPSBuZXdfb2JqdHJlZSgiT04gQ09NTUlUIik7CisJc3dpdGNo IChvcHRpb24pCisJeworCQljYXNlIE9OQ09NTUlUX0RST1A6CisJCQlhcHBlbmRfc3RyaW5nX29i amVjdChvbmNvbW1pdCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiLCAiRFJPUCIpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBPTkNPTU1JVF9ERUxFVEVfUk9XUzoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KG9uY29tbWl0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIsICJERUxFVEUgUk9XUyIpOworCQkJYnJl YWs7CisKKwkJY2FzZSBPTkNPTU1JVF9QUkVTRVJWRV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19v YmplY3Qob25jb21taXQsICIle29uX2NvbW1pdF92YWx1ZX1zIiwgIlBSRVNFUlZFIFJPV1MiKTsK KwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfTk9PUDoKKwkJCWFwcGVuZF9udWxsX29iamVj dChvbmNvbW1pdCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiKTsKKwkJCWFwcGVuZF9ib29sX29iamVj dChvbmNvbW1pdCwgInByZXNlbnQiLCBmYWxzZSk7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4g b25jb21taXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgUmVuYW1lU3RtdC4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9SZW5hbWVTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9k ZSAqcGFyc2V0cmVlKQoreworCVJlbmFtZVN0bXQgKm5vZGUgPSAoUmVuYW1lU3RtdCAqKSBwYXJz ZXRyZWU7CisJT2JqVHJlZQkgICAqcmVuYW1lU3RtdDsKKwljaGFyCSAgICpmbXRzdHI7CisJY29u c3QgY2hhciAqb2JqdHlwZTsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlPaWQJCQlzY2hlbWFJZDsK KworCS8qCisJICogSW4gYW4gQUxURVIgLi4gUkVOQU1FIGNvbW1hbmQsIHdlIGRvbid0IGhhdmUg dGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlCisJICogb2JqZWN0IGluIHN5c3RlbSBjYXRhbG9nczog c2luY2Ugd2UgaW5zcGVjdCB0aGVtIGFmdGVyIHRoZSBjb21tYW5kIGhhcworCSAqIGV4ZWN1dGVk LCB0aGUgb2xkIG5hbWUgaXMgYWxyZWFkeSBnb25lLiAgVGhlcmVmb3JlLCB3ZSBleHRyYWN0IGl0 IGZyb20KKwkgKiB0aGUgcGFyc2Ugbm9kZS4gIE5vdGUgd2Ugc3RpbGwgZXh0cmFjdCB0aGUgc2No ZW1hIG5hbWUgZnJvbSB0aGUgY2F0YWxvZworCSAqIChpdCBtaWdodCBub3QgYmUgcHJlc2VudCBp biB0aGUgcGFyc2Ugbm9kZSk7IGl0IGNhbm5vdCBwb3NzaWJseSBoYXZlCisJICogY2hhbmdlZCBh bnl3YXkuCisJICovCisJc3dpdGNoIChub2RlLT5yZW5hbWVUeXBlKQorCXsKKwkJY2FzZSBPQkpF Q1RfVEFCTEU6CisJCWNhc2UgT0JKRUNUX0lOREVYOgorCQljYXNlIE9CSkVDVF9TRVFVRU5DRToK KworCQkJLyoKKwkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkgKgorCQkJICogQUxURVIgJXMgJXtp Zl9leGlzdHN9cyAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisJCQkgKi8KKwkJ CW9ianR5cGUgPSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKTsKKwkJCWZtdHN0 ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyIsIG9ianR5cGUpOworCQkJcmVsYXRpb24gPSByZWxhdGlv bl9vcGVuKGFkZHJlc3Mub2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlzY2hlbWFJZCA9 IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbGF0aW9uKTsKKwkJCXJlbmFtZVN0bXQgPSBuZXdfb2Jq dHJlZV9WQShmbXRzdHIsIDApOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwg IiV7aWZfZXhpc3RzfXMiLAorCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMi IDogIiIpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7aWRlbnRpdHl9 RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJ CQkJCQkJCSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJlbmFtZVN0bXQsICJSRU5BTUUgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCQkgbm9kZS0+ bmV3bmFtZSk7CisJCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsK KwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1BPTElDWToKKwkJCXsKKwkJCQlIZWFwVHVwbGUJ cG9sVHVwOworCQkJCUZvcm1fcGdfcG9saWN5IHBvbEZvcm07CisJCQkJUmVsYXRpb24JcGdfcG9s aWN5OworCQkJCVNjYW5LZXlEYXRhCWtleTsKKwkJCQlTeXNTY2FuRGVzYwlzY2FuOworCisJCQkJ cGdfcG9saWN5ID0gcmVsYXRpb25fb3BlbihQb2xpY3lSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxv Y2spOworCQkJCVNjYW5LZXlJbml0KCZrZXksIEFudW1fcGdfcG9saWN5X29pZCwKKwkJCQkJCQlC VEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShh ZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19wb2xp Y3ksIFBvbGljeU9pZEluZGV4SWQsIHRydWUsCisJCQkJCQkJCQkJICBOVUxMLCAxLCAma2V5KTsK KwkJCQlwb2xUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pOworCQkJCWlmICghSGVhcFR1cGxl SXNWYWxpZChwb2xUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgcG9saWN5ICV1IiwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcG9sRm9ybSA9IChGb3JtX3Bn X3BvbGljeSkgR0VUU1RSVUNUKHBvbFR1cCk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIFBPTElDWSIsIDApOworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFt ZVN0bXQsICIle2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJCSBub2RlLT5taXNzaW5nX29rID8gIklG IEVYSVNUUyIgOiAiIik7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIiV7 cG9saWN5bmFtZX1JIiwgbm9kZS0+c3VibmFtZSk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3Qo cmVuYW1lU3RtdCwgIk9OICV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCSBwb2xGb3JtLT5wb2xy ZWxpZCkpOworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICJSRU5BTUUgVE8g JXtuZXduYW1lfUkiLAorCQkJCQkJCQkJIG5vZGUtPm5ld25hbWUpOworCQkJCXN5c3RhYmxlX2Vu ZHNjYW4oc2Nhbik7CisJCQkJcmVsYXRpb25fY2xvc2UocGdfcG9saWN5LCBBY2Nlc3NTaGFyZUxv Y2spOworCisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9BVFRSSUJVVEU6CisJCWNh c2UgT0JKRUNUX0NPTFVNTjoKKwkJCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLm9i amVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJc2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVz cGFjZShyZWxhdGlvbik7CisKKwkJCS8qCisJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJICoKKwkJ CSAqIENvbXBvc2l0ZSB0eXBlczogQUxURVIgb2JqdHlwZSAle2lkZW50aXR5fUQgUkVOQU1FIEFU VFJJQlVURQorCQkJICogJXtjb2xuYW1lfUkgVE8gJXtuZXduYW1lfUkgJXtjYXNjYWRlfXMKKwkJ CSAqCisJCQkgKiBOb3JtYWwgdHlwZXM6IEFMVEVSIG9ianR5cGUgJXtpZl9leGlzdHN9cyAlJXtp ZGVudGl0eX1EIFJFTkFNRQorCQkJICogQ09MVU1OICV7Y29sbmFtZX1JIFRPICV7bmV3bmFtZX1J CisJCQkgKi8KKworCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0FUVFJJQlVURSkK KwkJCXsKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWUoIkFMVEVSIFRZUEUiKTsKKwkJCQkJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkgIG5v ZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSk7CisJCQkJZm10c3RyID0gcHNwcmludGYoIlJFTkFNRSBB VFRSSUJVVEUgJSV7Y29sbmFtZX1JIik7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJb2JqdHlw ZSA9IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbGF0aW9uVHlwZSk7CisJCQkJZm10c3RyID0g cHNwcmludGYoIkFMVEVSICVzIiwgb2JqdHlwZSk7CisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0 cmVlKGZtdHN0cik7CisKKwkJCQkvKiBDb21wb3NpdGUgdHlwZXMgZG8gbm90IHN1cHBvcnQgSUYg RVhJU1RTICovCisJCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0NPTFVNTikKKwkJ CQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIiV7aWZfZXhpc3RzfXMiLAorCQkJ CQkJCQkJCW5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKworCQkJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJCSAgbm9kZS0+ cmVsYXRpb24tPnJlbG5hbWUpKTsKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiUkVOQU1FIENPTFVN TiAlJXtjb2xuYW1lfUkiKTsKKwkJCX0KKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1l U3RtdCwgZm10c3RyLCBub2RlLT5zdWJuYW1lKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJl bmFtZVN0bXQsICJUTyAle25ld25hbWV9SSIsIG5vZGUtPm5ld25hbWUpOworCisJCQlpZiAobm9k ZS0+cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQorCQkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHJlbmFtZVN0bXQsICIle2Nhc2NhZGV9cyIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfVkEo IkNBU0NBREUiLCAxLAorCQkJCQkJCQkJCQkJCSJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJ CQkJCQkJCQkJbm9kZS0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKSk7CisKKwkJCXJlbGF0aW9u X2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQlicmVhazsKKwkJY2FzZSBP QkpFQ1RfRlVOQ1RJT046CisJCQl7CisJCQkJY2hhcgkqaWRlbnQ7CisJCQkJSGVhcFR1cGxlIHBy b2N0dXA7CisJCQkJRm9ybV9wZ19wcm9jIHByb2Nmb3JtOworCQkJCUxpc3QJICAgKmlkZW50aXR5 OworCisJCQkJQXNzZXJ0KElzQShub2RlLT5vYmplY3QsIE9iamVjdFdpdGhBcmdzKSk7CisJCQkJ aWRlbnRpdHkgPSAoKE9iamVjdFdpdGhBcmdzICopIG5vZGUtPm9iamVjdCktPm9iam5hbWU7CisK KwkJCQlwcm9jdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsCisJCQkJCQkJCQkJICBPYmpl Y3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFs aWQocHJvY3R1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBw cm9jZWR1cmUgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXByb2Nmb3JtID0g KEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCisJCQkJLyogWFhYIGRvZXMgdGhp cyB3b3JrIGZvciBvcmRlcmVkLXNldCBhZ2dyZWdhdGVzPyAqLworCQkJCWlkZW50ID0gcHNwcmlu dGYoIiVzJXMiLAorCQkJCQkJCQkgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVz cGFjZV9uYW1lKHByb2Nmb3JtLT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJCQkJc3RyVmFs KGxsYXN0KGlkZW50aXR5KSkpLAorCQkJCQkJCQkgZm9ybWF0X3Byb2NlZHVyZV9hcmdzKGFkZHJl c3Mub2JqZWN0SWQsIHRydWUpKTsKKworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyAl JXtpZGVudGl0eX1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkiLAorCQkJCQkJCQkgIHN0cmluZ2lm eV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpKTsKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRy ZWVfVkEoZm10c3RyLCAyLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBp ZGVudCwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1l KTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJ CWNhc2UgT0JKRUNUX09QQ0xBU1M6CisJCQl7CisJCQkJSGVhcFR1cGxlICAgb3BjVHVwOworCQkJ CUZvcm1fcGdfb3BjbGFzcyBvcGNGb3JtOworCQkJCUxpc3QJICAgKm9sZG5hbWVzOworCQkJCWNo YXIJICAgKnNjaGVtYW5hbWU7CisJCQkJY2hhcgkgICAqb3BjbmFtZTsKKwkJCQljaGFyCSAgICpm bXQ7CisKKwkJCQlmbXQgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRpdHl9RCBVU0lORyAl JXtpbmRleF9tZXRob2R9cyBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JIiwKKwkJCQkJCQkgICBzdHJp bmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKSk7CisKKwkJCQlvcGNUdXAgPSBTZWFyY2hT eXNDYWNoZTEoQ0xBT0lELCBPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJ CQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BjVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mu b2JqZWN0SWQpOworCisJCQkJb3BjRm9ybSA9IChGb3JtX3BnX29wY2xhc3MpIEdFVFNUUlVDVChv cGNUdXApOworCisJCQkJb2xkbmFtZXMgPSBsaXN0X2NvcHlfdGFpbCgoTGlzdCAqKSBub2RlLT5v YmplY3QsIDEpOworCisJCQkJLyogZGVjb25zdHJ1Y3QgdGhlIG5hbWUgbGlzdCAqLworCQkJCURl Y29uc3RydWN0UXVhbGlmaWVkTmFtZShvbGRuYW1lcywgJnNjaGVtYW5hbWUsICZvcGNuYW1lKTsK KworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDMsCisJCQkJCQkJCQkJCSJp ZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShvcGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkJCSBvcGNuYW1lKSwK KwkJCQkJCQkJCQkJImluZGV4X21ldGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWdl dF9hbV9uYW1lKG9wY0Zvcm0tPm9wY21ldGhvZCksCisJCQkJCQkJCQkJCSJuZXduYW1lIiwgT2Jq VHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUob3BjVHVw KTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX09QRkFNSUxZOgorCQkJeworCQkJ CUhlYXBUdXBsZSAgIG9wZlR1cDsKKwkJCQlIZWFwVHVwbGUgICBhbVR1cDsKKwkJCQlGb3JtX3Bn X29wZmFtaWx5IG9wZkZvcm07CisJCQkJRm9ybV9wZ19hbSAgYW1Gb3JtOworCQkJCUxpc3QJICAg Km9sZG5hbWVzOworCQkJCWNoYXIJICAgKnNjaGVtYW5hbWU7CisJCQkJY2hhcgkgICAqb3BmbmFt ZTsKKwkJCQljaGFyCSAgICpmbXQ7CisKKwkJCQlmbXQgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7 aWRlbnRpdHl9RCBVU0lORyAlJXtpbmRleF9tZXRob2R9cyBSRU5BTUUgVE8gJSV7bmV3bmFtZX1J IiwKKwkJCQkJCQkgICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKSk7CisKKwkJ CQlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIGFkZHJlc3Mub2JqZWN0SWQp OworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGZUdXApKQorCQkJCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1IiwKKwkJ CQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkp IEdFVFNUUlVDVChvcGZUdXApOworCisJCQkJYW1UdXAgPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQs IE9iamVjdElkR2V0RGF0dW0ob3BmRm9ybS0+b3BmbWV0aG9kKSk7CisJCQkJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKGFtVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIGFjY2VzcyBtZXRob2QgJXUiLAorCQkJCQkJIG9wZkZvcm0tPm9wZm1ldGhvZCk7CisKKwkJ CQlhbUZvcm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFtVHVwKTsKKworCQkJCW9sZG5hbWVz ID0gbGlzdF9jb3B5X3RhaWwoKExpc3QgKikgbm9kZS0+b2JqZWN0LCAxKTsKKworCQkJCS8qIGRl Y29uc3RydWN0IHRoZSBuYW1lIGxpc3QgKi8KKwkJCQlEZWNvbnN0cnVjdFF1YWxpZmllZE5hbWUo b2xkbmFtZXMsICZzY2hlbWFuYW1lLCAmb3BmbmFtZSk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3 X29ianRyZWVfVkEoZm10LCAzLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJCQkJCQkgb3BmbmFtZSksCisJCQkJCQkJCQkJCSJpbmRleF9tZXRo b2QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlOYW1lU3RyKGFtRm9ybS0+YW1uYW1lKSwK KwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwor CQkJCVJlbGVhc2VTeXNDYWNoZShhbVR1cCk7CisJCQkJUmVsZWFzZVN5c0NhY2hlKG9wZlR1cCk7 CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlyZW5hbWVTdG10 ID0KKwkJCQluZXdfb2JqdHJlZV9WQSgiQUxURVIgU0NIRU1BICV7aWRlbnRpdHl9SSBSRU5BTUUg VE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCSAgIDEsCisJCQkJCQkJICAgImlkZW50aXR5IiwgT2Jq VHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkgICAibmV3bmFtZSIsIE9ialR5cGVT dHJpbmcsIG5vZGUtPm5ld25hbWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFJJR0dF UjoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJdHJpZ1R1cDsKKwkJCQlGb3JtX3BnX3RyaWdnZXIgdHJp Z0Zvcm07CisJCQkJUmVsYXRpb24JcGdfdHJpZ2dlcjsKKworCQkJCXBnX3RyaWdnZXIgPSByZWxh dGlvbl9vcGVuKFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCXRyaWdU dXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX3RyaWdnZXIsIGdldF9vYmplY3RfYXR0 bnVtX29pZChhZGRyZXNzLmNsYXNzSWQpLCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQl0cmlnRm9y bSA9IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCQkJCXJlbmFtZVN0 bXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVFJJR0dFUiAle3RyaWdnZXJuYW1lfUkgT04gJXtp ZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SSIsCisJCQkJCQkJCQkJCTMsCisJCQkJCQkJ CQkJCSJ0cmlnZ2VybmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJ CQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCQl0cmln Rm9ybS0+dGdyZWxpZCksCisJCQkJCQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9k ZS0+bmV3bmFtZSk7CisKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ190cmlnZ2VyLCBBY2Nlc3NTaGFy ZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJY2FzZSBP QkpFQ1RfQ09OVkVSU0lPTjoKKwkJY2FzZSBPQkpFQ1RfRE9NQUlOOgorCQkJeworCQkJCUhlYXBU dXBsZQlvYmpUdXA7CisJCQkJUmVsYXRpb24JY2F0YWxvZzsKKwkJCQlEYXR1bQkJb2JqbnNwOwor CQkJCWJvb2wJCWlzbnVsbDsKKwkJCQlBdHRyTnVtYmVyCUFudW1fbmFtZXNwYWNlOworCQkJCUxp c3QJICAgKmlkZW50aXR5ID0gY2FzdE5vZGUoTGlzdCwgbm9kZS0+b2JqZWN0KTsKKwkJCQljaGFy CSAgICpmbXRzdHJpbmc7CisKKwkJCQkvKiBvYnRhaW4gb2JqZWN0IHR1cGxlICovCisJCQkJY2F0 YWxvZyA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5jbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2spOwor CQkJCW9ialR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY2F0YWxvZywgZ2V0X29iamVj dF9hdHRudW1fb2lkKGFkZHJlc3MuY2xhc3NJZCksIGFkZHJlc3Mub2JqZWN0SWQpOworCisJCQkJ Lyogb2J0YWluIG5hbWVzcGFjZSAqLworCQkJCUFudW1fbmFtZXNwYWNlID0gZ2V0X29iamVjdF9h dHRudW1fbmFtZXNwYWNlKGFkZHJlc3MuY2xhc3NJZCk7CisJCQkJb2JqbnNwID0gaGVhcF9nZXRh dHRyKG9ialR1cCwgQW51bV9uYW1lc3BhY2UsCisJCQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3Io Y2F0YWxvZyksICZpc251bGwpOworCQkJCWlmIChpc251bGwpCisJCQkJCWVsb2coRVJST1IsICJp bnZhbGlkIE5VTEwgbmFtZXNwYWNlIik7CisKKwkJCQlvYmp0eXBlID0gc3RyaW5naWZ5X29ianR5 cGUobm9kZS0+cmVuYW1lVHlwZSk7CisJCQkJZm10c3RyaW5nID0gcHNwcmludGYoIkFMVEVSICVz Iiwgb2JqdHlwZSk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoZm10c3RyaW5n LAorCQkJCQkJCQkJCTApOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIl e2lkZW50aXR5fUQiLAorCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKERhdHVtR2V0 T2JqZWN0SWQob2JqbnNwKSwKKwkJCQkJCQkJCQkJCQkJCSAgc3RyVmFsKGxsYXN0KGlkZW50aXR5 KSkpKTsKKworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICJSRU5BTUUgVE8g JXtuZXduYW1lfUkiLAorCQkJCQkJCQkJIG5vZGUtPm5ld25hbWUpOworCQkJCXJlbGF0aW9uX2Ns b3NlKGNhdGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZh dWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwgbm9kZS0+ cmVuYW1lVHlwZSk7CisJfQorCisJcmV0dXJuIHJlbmFtZVN0bXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIGEgQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAoQUxURVIgLi4uIERFUEVORFMgT04gLi4uKS4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckRlcGVuZFN0bXQoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAqbm9kZSA9 IChBbHRlck9iamVjdERlcGVuZHNTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkgICAqYWx0 ZXJEZXBlbmRlU3RtdCA9IE5VTEw7CisKKworCWlmIChub2RlLT5vYmplY3RUeXBlID09IE9CSkVD VF9JTkRFWCkKKwl7CisJCVJlbGF0aW9uICAgICAgICByZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4o b2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCU9ialRyZWUgKnF1YWxpZmllZDsKKworCQlh bHRlckRlcGVuZGVTdG10ID0gbmV3X29ianRyZWUoIkFMVEVSIElOREVYIik7CisKKwkJcXVhbGlm aWVkID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVz cGFjZSwKKwkJCQkJCQkJCQkJIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKTsKKwkJYXBwZW5kX29i amVjdF9vYmplY3QoYWx0ZXJEZXBlbmRlU3RtdCwgIiV7aWRlbnRpdHl9RCIsIHF1YWxpZmllZCk7 CisJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGFsdGVyRGVwZW5kZVN0bXQsICIle05PfXMiLAorCQkJCQkJIG5vZGUt PnJlbW92ZSA/ICJOTyIgOiAiIik7CisKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJEZXBl bmRlU3RtdCwgIkRFUEVORFMgT04gRVhURU5TSU9OIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGFsdGVyRGVwZW5kZVN0bXQsICIle25ld25hbWV9SSIsIHN0clZhbChub2RlLT5leHRuYW1lKSk7 CisJfQorCWVsc2UKKwkJZWxvZyhMT0csICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRlcGFy c2UgY29tbWFuZDogJWQiLAorCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisKKwlyZXR1 cm4gYWx0ZXJEZXBlbmRlU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIENB Q0hFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0Nh Y2hlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVy X3RhYmxlKQoreworCU9ialRyZWUJICAgKmNhY2hlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFy CSAgICpmbXQ7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNl cWNhY2hlKTsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBDQUNIRSAle3ZhbHVl fXMiOworCWVsc2UKKwkJZm10ID0gIkNBQ0hFICV7dmFsdWV9cyI7CisKKwljYWNoZSA9IG5ld19v Ymp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYWNo ZSIsCisJCQkJCQkgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4g bmV3X29iamVjdF9vYmplY3QoY2FjaGUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVu Y2UgQ1lDTEUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9T ZXFfQ3ljbGUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wg YWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqY3ljbGU7CisJY2hhcgkgICAqZm10OworCisJ aWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUICV7bm99cyBDWUNMRSI7CisJZWxzZQorCQlm bXQgPSAiJXtub31zIENZQ0xFIjsKKworCWN5Y2xlID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAor CQkJCQkJICAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjeWNsZSIsCisJCQkJCQkgICAibm8i LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICAgc2VxZGF0YS0+c2VxY3ljbGUgPyAiIiA6ICJOTyIp OworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChjeWNsZSk7Cit9CisKKy8qCisgKiBEZXBhcnNl IHRoZSBzZXF1ZW5jZSBJTkNSRU1FTlQgQlkgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9i akVsZW0gKgorZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3Bn X3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqaW5j cmVtZW50YWxieTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFs dGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIElOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiOworCWVsc2UK KwkJZm10ID0gIklOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYo SU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFpbmNyZW1lbnQpOworCWluY3JlbWVudGFsYnkgPSBu ZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJCSAgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAic2VxaW5jcmVtZW50IiwKKwkJCQkJCQkJICAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1w c3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QoaW5jcmVtZW50YWxieSk7Cit9CisKKy8q CisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBNQVhWQUxVRSBvcHRpb24uCisgKi8KK3N0YXRpYyBp bmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9NYXh2YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZv cm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAg ICptYXh2YWx1ZTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFs dGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIE1BWFZBTFVFICV7dmFsdWV9cyI7CisJZWxzZQorCQlm bXQgPSAiTUFYVkFMVUUgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZP Uk1BVCwgc2VxZGF0YS0+c2VxbWF4KTsKKwltYXh2YWx1ZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwg MiwKKwkJCQkJCQkgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibWF4dmFsdWUiLAorCQkJCQkJ CSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9v YmplY3QobWF4dmFsdWUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgTUlOVkFM VUUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfTWlu dmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0 ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqbWludmFsdWU7CisJY2hhcgkgICAqdG1wc3RyOwor CWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBNSU5WQUxV RSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIk1JTlZBTFVFICV7dmFsdWV9cyI7CisKKwl0 bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1pbik7CisJbWludmFs dWUgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgIm1pbnZhbHVlIiwKKwkJCQkJCQkgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0 cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KG1pbnZhbHVlKTsKK30KKworLyoKKyAqIERl cGFyc2UgdGhlIHNlcXVlbmNlIE9XTkVEIEJZIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpFbGVt ICoKK2RlcGFyc2VfU2VxX093bmVkQnkoT2JqVHJlZSAqcGFyZW50LCBPaWQgc2VxdWVuY2VJZCwg Ym9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICpvd25lZGJ5ID0gTlVMTDsKKwlSZWxh dGlvbglkZXBSZWw7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXlzWzNdOwor CUhlYXBUdXBsZSAgIHR1cGxlOworCisJZGVwUmVsID0gdGFibGVfb3BlbihEZXBlbmRSZWxhdGlv bklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZrZXlzWzBdLAorCQkJCUFudW1f cGdfZGVwZW5kX2NsYXNzaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAor CQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25SZWxhdGlvbklkKSk7CisJU2NhbktleUluaXQo JmtleXNbMV0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2JqaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oc2VxdWVuY2VJZCkpOworCVNj YW5LZXlJbml0KCZrZXlzWzJdLAorCQkJCUFudW1fcGdfZGVwZW5kX29ianN1YmlkLAorCQkJCUJU RXF1YWxTdHJhdGVneU51bWJlciwgRl9JTlQ0RVEsCisJCQkJSW50MzJHZXREYXR1bSgwKSk7CisK KwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGRlcFJlbCwgRGVwZW5kRGVwZW5kZXJJbmRleElk LCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMywga2V5cyk7CisJd2hpbGUgKEhlYXBUdXBsZUlzVmFs aWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCU9pZAkJIG93bmVySWQ7 CisJCUZvcm1fcGdfZGVwZW5kIGRlcGZvcm07CisJCU9ialRyZWUJKnRtcG9iajsKKwkJY2hhcgkg ICAqY29sbmFtZTsKKworCQlkZXBmb3JtID0gKEZvcm1fcGdfZGVwZW5kKSBHRVRTVFJVQ1QodHVw bGUpOworCisJCS8qIE9ubHkgY29uc2lkZXIgQVVUTyBkZXBlbmRlbmNpZXMgb24gcGdfY2xhc3Mg Ki8KKwkJaWYgKGRlcGZvcm0tPmRlcHR5cGUgIT0gREVQRU5ERU5DWV9BVVRPKQorCQkJY29udGlu dWU7CisJCWlmIChkZXBmb3JtLT5yZWZjbGFzc2lkICE9IFJlbGF0aW9uUmVsYXRpb25JZCkKKwkJ CWNvbnRpbnVlOworCQlpZiAoZGVwZm9ybS0+cmVmb2Jqc3ViaWQgPD0gMCkKKwkJCWNvbnRpbnVl OworCisJCW93bmVySWQgPSBkZXBmb3JtLT5yZWZvYmppZDsKKwkJY29sbmFtZSA9IGdldF9hdHRu YW1lKG93bmVySWQsIGRlcGZvcm0tPnJlZm9ianN1YmlkLCBmYWxzZSk7CisJCWlmIChjb2xuYW1l ID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLCBvd25lcklkKTsKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wb2JqLCAiYXR0cm5hbWUiLCBjb2xuYW1lKTsKKwkJb3duZWRieSA9IG5ld19vYmp0 cmVlX1ZBKCJPV05FRCBCWSAle293bmVyfUQiLAorCQkJCQkJCQkgMiwKKwkJCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAib3duZWQiLAorCQkJCQkJCQkgIm93bmVyIiwgT2JqVHlwZU9i amVjdCwgdG1wb2JqKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXJlbGF0aW9u X2Nsb3NlKGRlcFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qCisJICogSWYgdGhlcmUncyBu byBvd25lciBjb2x1bW4sIGVtaXQgYW4gZW1wdHkgT1dORUQgQlkgZWxlbWVudCwgc2V0IHVwIHNv CisJICogdGhhdCBpdCB3b24ndCBwcmludCBhbnl0aGluZy4KKwkgKi8KKwlpZiAoIW93bmVkYnkp CisJCS8qIFhYWCB0aGlzIHNob3VsZG4ndCBoYXBwZW4gLi4uICovCisJCW93bmVkYnkgPSBuZXdf b2JqdHJlZV9WQSgiT1dORUQgQlkgJXtvd25lcn1EIiwKKwkJCQkJCQkJIDMsCisJCQkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm93bmVkIiwKKwkJCQkJCQkJICJvd25lciIsIE9ialR5 cGVOdWxsLAorCQkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgZmFsc2UpOworCisJcmV0 dXJuIG5ld19vYmplY3Rfb2JqZWN0KG93bmVkYnkpOworfQorCisvKgorICogRGVwYXJzZSB0aGUg c2VxdWVuY2UgUkVTVEFSVCBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitk ZXBhcnNlX1NlcV9SZXN0YXJ0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZV9kYXRh IHNlcWRhdGEpCit7CisJT2JqVHJlZQkgICAqcmVzdGFydDsKKwljaGFyCSAgICp0bXBzdHI7CisK Kwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPmxhc3RfdmFsdWUpOwor CXJlc3RhcnQgPSBuZXdfb2JqdHJlZV9WQSgiUkVTVEFSVCAle3ZhbHVlfXMiLCAyLAorCQkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RhcnQiLAorCQkJCQkJCSAidmFsdWUiLCBP YmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXN0YXJ0 KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFNUQVJUIFdJVEggb3B0aW9uLgor ICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfU3RhcnR3aXRoKE9ialRy ZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQor eworCU9ialRyZWUJICAgKnN0YXJ0d2l0aDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAq Zm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIFNUQVJUIFdJVEggJXt2YWx1 ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJTVEFSVCBXSVRIICV7dmFsdWV9cyI7CisKKwl0bXBzdHIg PSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcXN0YXJ0KTsKKwlzdGFydHdpdGgg PSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJzdGFydCIsCisJCQkJCQkJICAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsK KwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qoc3RhcnR3aXRoKTsKK30KKworLyoKKyAqIERlcGFy c2UgdGhlIHR5cGUgU1RPUkFHRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAq CitkZXBhcnNlX1R5cGVfU3RvcmFnZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBG b3JtKQoreworCU9ialRyZWUJICAgKnN0b3JhZ2U7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJ ICAgKmZtdDsKKwljaGFyCSAgICpzdHI7CisKKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cHN0b3JhZ2Up CisJeworCQljYXNlICdwJzoKKwkJCXN0ciA9ICJwbGFpbiI7CisJCQlicmVhazsKKwkJY2FzZSAn ZSc6CisJCQlzdHIgPSAiZXh0ZXJuYWwiOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJc3Ry ID0gImV4dGVuZGVkIjsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCXN0ciA9ICJtYWluIjsK KwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3RvcmFnZSBz cGVjaWZpZXIgJWMiLCB0eXBGb3JtLT50eXBzdG9yYWdlKTsKKwl9CisKKwl0bXBzdHIgPSBwc3By aW50ZigiJXMiLCBzdHIpOworCisJZm10ID0gIlNUT1JBR0UgPSAle3ZhbHVlfXMiOworCisJc3Rv cmFnZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJzdG9yYWdlIiwKKwkJCQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3Ry KTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChzdG9yYWdlKTsKK30KKworLyoKKyAqIERl cGFyc2UgdGhlIHR5cGUgUkVDRUlWRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxl bSAqCitkZXBhcnNlX1R5cGVfUmVjZWl2ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0 eXBGb3JtKQoreworCU9ialRyZWUJICAgKnJlY2VpdmU7CisKKwlyZWNlaXZlID0gbmV3X29ianRy ZWVfVkEoIlJFQ0VJVkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJl Y2VpdmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXByZWNlaXZlKSkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QocmVjZWl2ZSwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ IHR5cEZvcm0tPnR5cHJlY2VpdmUpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdChyZWNl aXZlLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZWNl aXZlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgU0VORCBvcHRpb24uCisgKi8KK3N0 YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU2VuZChPYmpUcmVlICpwYXJlbnQs IEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnNlbmQ7CisKKwlzZW5kID0g bmV3X29ianRyZWVfVkEoIlNFTkQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgInNlbmQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBzZW5kKSkKKwkJYXBwZW5k X29iamVjdF9vYmplY3Qoc2VuZCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5 cEZvcm0tPnR5cHNlbmQpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdChzZW5kLCAicHJl c2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChzZW5kKTsKK30KKwor LyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgdHlwbW9kX2luIG9wdGlvbi4KKyAqLworc3RhdGljIGlu bGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9UeXBtb2RfSW4oT2JqVHJlZSAqcGFyZW50LCBG b3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAgICp0eXBtb2RpbjsKKworCXR5cG1v ZGluID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9JTj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAidHlwbW9kX2luIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlw bW9kaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0eXBtb2RpbiwgIiV7cHJvY2VkdXJlfUQi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZGluKSk7CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodHlwbW9kaW4sICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19v YmplY3Rfb2JqZWN0KHR5cG1vZGluKTsKK30KKworCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSB0 eXBtb2Rfb3V0IG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2Vf VHlwZV9UeXBtb2RfT3V0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7 CisJT2JqVHJlZQkgICAqdHlwbW9kb3V0OworCisJdHlwbW9kb3V0ID0gbmV3X29ianRyZWVfVkEo IlRZUE1PRF9PVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1v ZF9vdXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2RvdXQpKQorCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0eXBtb2RvdXQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CSB0eXBGb3JtLT50eXBtb2RvdXQpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0eXBt b2RvdXQsICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5 cG1vZG91dCk7Cit9CisKKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgYW5hbHl6ZSBvcHRpb24u CisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfQW5hbHl6ZShPYmpU cmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnR5cGFu YWx5emU7CisKKwl0eXBhbmFseXplID0gbmV3X29ianRyZWVfVkEoIkFOQUxZWkU9IiwgMSwKKwkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImFuYWx5emUiKTsKKwlpZiAoT2lkSXNWYWxp ZCh0eXBGb3JtLT50eXBhbmFseXplKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodHlwYW5hbHl6 ZSwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGFuYWx5emUp KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0eXBhbmFseXplLCAicHJlc2VudCIsIGZh bHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdCh0eXBhbmFseXplKTsKK30KKworLyoK KyAqIERlcGFyc2UgdGhlIHR5cGUgc3Vic2NyaXB0IG9wdGlvbi4KKyAqLworc3RhdGljIGlubGlu ZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9TdWJzY3JpcHQoT2JqVHJlZSAqcGFyZW50LCBGb3Jt X3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAgICp0eXBzdWJzY3JpcHQ7CisKKwl0eXBz dWJzY3JpcHQgPSBuZXdfb2JqdHJlZV9WQSgiU1VCU0NSSVBUPSIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJzdWJzY3JpcHQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3Jt LT50eXBzdWJzY3JpcHQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0eXBzdWJzY3JpcHQsICIl e3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzdWJzY3JpcHQpKTsK KwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0eXBzdWJzY3JpcHQsICJwcmVzZW50IiwgZmFs c2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5cHN1YnNjcmlwdCk7Cit9CisKKy8q CisgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5kcy4KKyAqCisgKiBUaGlzIGZ1 bmN0aW9uIHNob3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNs b3cuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29sbGVj dGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNldHJl ZTsKKwlPYmpUcmVlCSAgICpjb21tYW5kOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfU2lt cGxlKTsKKworCXBhcnNldHJlZSA9IGNtZC0+cGFyc2V0cmVlOworCW9iamVjdElkID0gY21kLT5k LnNpbXBsZS5hZGRyZXNzLm9iamVjdElkOworCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uICYmIChu b2RlVGFnKHBhcnNldHJlZSkgIT0gVF9DcmVhdGVFeHRlbnNpb25TdG10KSkKKwkJcmV0dXJuIE5V TEw7CisKKworCS8qIFRoaXMgc3dpdGNoIG5lZWRzIHRvIGhhbmRsZSBldmVyeXRoaW5nIHRoYXQg UHJvY2Vzc1V0aWxpdHlTbG93IGRvZXMgKi8KKwlzd2l0Y2ggKG5vZGVUYWcocGFyc2V0cmVlKSkK Kwl7CisJCWNhc2UgVF9DcmVhdGVTY2hlbWFTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3Jl YXRlU2NoZW1hU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9BbHRlckRvbWFpblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckRvbWFpblN0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJICBjbWQtPmQuc2ltcGxlLnNlY29uZGFy eU9iamVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlU3RtdDoKKwkJCWNvbW1hbmQg PSBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKwor CQljYXNlIFRfQ3JlYXRlVHJpZ1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVUcmln U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVT ZXFTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlU2VxU3RtdChvYmplY3RJZCwgcGFy c2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlclNlcVN0bXQ6CisJCQljb21tYW5k ID0gZGVwYXJzZV9BbHRlclNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsK KworCQljYXNlIFRfRGVmaW5lU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0RlZmluZVN0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkgY21kLT5kLnNpbXBsZS5zZWNvbmRhcnlP YmplY3QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZUNvbnZlcnNpb25TdG10OgorCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlQ29udmVyc2lvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVEb21haW5TdG10OgorCQkJY29tbWFuZCA9IGRl cGFyc2VfQ3JlYXRlRG9tYWluKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVF eHRlbnNpb25TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBU X0FsdGVyRXh0ZW5zaW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRXh0ZW5zaW9u U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlckV4 dGVuc2lvbkNvbnRlbnRzU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRXh0ZW5zaW9u Q29udGVudHNTdG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJCQkJCSBjbWQtPmQu c2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlT3BG YW1pbHlTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlT3BGYW1pbHkob2JqZWN0SWQs IHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlUG9saWN5U3RtdDoKKwkJ CWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVBvbGljeVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisJCQlicmVhazsKKworCQljYXNlIFRfSW5kZXhTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2Vf SW5kZXhTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0Ny ZWF0ZUZ1bmN0aW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUZ1bmN0aW9uKG9i amVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRnVuY3Rpb25T dG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJGdW5jdGlvbihvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9SZW5hbWVTdG10OgorCQkJY29tbWFuZCA9IGRl cGFyc2VfUmVuYW1lU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisJCQli cmVhazsKKworCQljYXNlIFRfQWx0ZXJPYmplY3REZXBlbmRzU3RtdDoKKwkJCWNvbW1hbmQgPSBk ZXBhcnNlX0FsdGVyRGVwZW5kU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVF9BbHRlck9iamVjdFNjaGVtYVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9B bHRlck9iamVjdFNjaGVtYVN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLAorCQkJCQkJCQkJCQkJ CXBhcnNldHJlZSwKKwkJCQkJCQkJCQkJCQljbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7 CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJPd25lclN0bXQ6CisJCQljb21tYW5kID0gZGVw YXJzZV9BbHRlck93bmVyU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJPcGVyYXRvclN0bXQ6CisJCQljb21tYW5kID0gZGVw YXJzZV9BbHRlck9wZXJhdG9yU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVF9BbHRlclBvbGljeVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlclBv bGljeVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0 ZXJUeXBlU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyVHlwZVNldFN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ29tcG9zaXRlVHlwZVN0bXQ6 CisJCQljb21tYW5kID0gZGVwYXJzZV9Db21wb3NpdGVUeXBlU3RtdChvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVFbnVtU3RtdDoJLyogQ1JFQVRFIFRZ UEUgQVMgRU5VTSAqLworCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlRW51bVN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlUmFuZ2VTdG10Ogkv KiBDUkVBVEUgVFlQRSBBUyBSQU5HRSAqLworCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlUmFu Z2VTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVy RW51bVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckVudW1TdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZUNhc3RTdG10OgorCQkJY29t bWFuZCA9IGRlcGFyc2VfQ3JlYXRlQ2FzdFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQli cmVhazsKKworCQlkZWZhdWx0OgorCQkJY29tbWFuZCA9IE5VTEw7CisJCQllbG9nKExPRywgInVu cmVjb2duaXplZCBub2RlIHR5cGUgaW4gZGVwYXJzZSBjb21tYW5kOiAlZCIsCisJCQkJIChpbnQp IG5vZGVUYWcocGFyc2V0cmVlKSk7CisJfQorCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisg KiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUgZGVwYXJzaW5nLgorICoKKyAqIERlYWwgd2l0 aCBhbGwgdGhlIHRhYmxlIGVsZW1lbnRzIChjb2x1bW5zIGFuZCBjb25zdHJhaW50cykuCisgKgor ICogTm90ZSB3ZSBpZ25vcmUgY29uc3RyYWludHMgaW4gdGhlIHBhcnNlIG5vZGUgaGVyZTsgdGhl eSBhcmUgZXh0cmFjdGVkIGZyb20KKyAqIHN5c3RlbSBjYXRhbG9ncyBpbnN0ZWFkLgorICovCitz dGF0aWMgTGlzdCAqCitkZXBhcnNlX1RhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExp c3QgKnRhYmxlRWxlbWVudHMsIExpc3QgKmRwY29udGV4dCwKKwkJCQkJICBib29sIHR5cGVkLCBi b29sIGNvbXBvc2l0ZSkKK3sKKwlMaXN0CSAgICplbGVtZW50cyA9IE5JTDsKKwlMaXN0Q2VsbCAg ICpsYzsKKworCWZvcmVhY2gobGMsIHRhYmxlRWxlbWVudHMpCisJeworCQlOb2RlCSAgICplbHQg PSAoTm9kZSAqKSBsZmlyc3QobGMpOworCisJCXN3aXRjaCAobm9kZVRhZyhlbHQpKQorCQl7CisJ CQljYXNlIFRfQ29sdW1uRGVmOgorCQkJCXsKKwkJCQkJT2JqVHJlZQkgICAqdHJlZTsKKworCQkJ CQl0cmVlID0gdHlwZWQgPworCQkJCQkJZGVwYXJzZV9Db2x1bW5EZWZfdHlwZWQocmVsYXRpb24s IGRwY29udGV4dCwKKwkJCQkJCQkJCQkJCShDb2x1bW5EZWYgKikgZWx0KSA6CisJCQkJCQlkZXBh cnNlX0NvbHVtbkRlZihyZWxhdGlvbiwgZHBjb250ZXh0LAorCQkJCQkJCQkJCQkgIGNvbXBvc2l0 ZSwgKENvbHVtbkRlZiAqKSBlbHQsCisJCQkJCQkJCQkJCSAgZmFsc2UsIE5VTEwpOworCQkJCQlp ZiAodHJlZSAhPSBOVUxMKQorCQkJCQl7CisJCQkJCQlPYmpFbGVtCSpjb2x1bW47CisKKwkJCQkJ CWNvbHVtbiA9IG5ld19vYmplY3Rfb2JqZWN0KHRyZWUpOworCQkJCQkJZWxlbWVudHMgPSBsYXBw ZW5kKGVsZW1lbnRzLCBjb2x1bW4pOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2Fz ZSBUX0NvbnN0cmFpbnQ6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1Is ICJpbnZhbGlkIG5vZGUgdHlwZSAlZCIsIG5vZGVUYWcoZWx0KSk7CisJCX0KKwl9CisKKwlyZXR1 cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBXb3JraG9yc2UgdG8gZGVwYXJzZSBhIENvbGxlY3Rl ZENvbW1hbmQuCisgKi8KK2NoYXIgKgorZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVk Q29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSkKK3sKKwlPdmVycmlkZVNlYXJjaFBhdGgg Km92ZXJyaWRlUGF0aDsKKwlNZW1vcnlDb250ZXh0CW9sZGN4dDsKKwlNZW1vcnlDb250ZXh0CXRt cGN4dDsKKwlPYmpUcmVlCQkgICAqdHJlZTsKKwljaGFyCQkgICAqY29tbWFuZDsKKwlTdHJpbmdJ bmZvRGF0YSAgc3RyOworCisJLyoKKwkgKiBBbGxvY2F0ZSBldmVyeXRoaW5nIGRvbmUgYnkgdGhl IGRlcGFyc2luZyByb3V0aW5lcyBpbnRvIGEgdGVtcCBjb250ZXh0LAorCSAqIHRvIGF2b2lkIGhh dmluZyB0byBzcHJpbmtsZSB0aGVtIHdpdGggbWVtb3J5IGhhbmRsaW5nIGNvZGU7IGJ1dCBhbGxv Y2F0ZQorCSAqIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBiZWZvcmUgc3dpdGNoaW5nLgorCSAqLwor CWluaXRTdHJpbmdJbmZvKCZzdHIpOworCXRtcGN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShD dXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJICAgImRlcGFyc2UgY3R4IiwKKwkJCQkJCQkJ ICAgQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxU X0lOSVRTSVpFLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUpOworCW9sZGN4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjeHQpOworCisJLyoKKwkgKiBNYW55IHJvdXRp bmVzIHVuZGVybHlpbmcgdGhpcyBvbmUgd2lsbCBpbnZva2UgcnVsZXV0aWxzLmMgZnVuY3Rpb25h bGl0eQorCSAqIGluIG9yZGVyIHRvIG9idGFpbiBkZXBhcnNlZCB2ZXJzaW9ucyBvZiBleHByZXNz aW9ucy4gIEluIHN1Y2ggcmVzdWx0cywKKwkgKiB3ZSB3YW50IGFsbCBvYmplY3QgbmFtZXMgdG8g YmUgcXVhbGlmaWVkLCBzbyB0aGF0IHJlc3VsdHMgYXJlICJwb3J0YWJsZSIKKwkgKiB0byBlbnZp cm9ubWVudHMgd2l0aCBkaWZmZXJlbnQgc2VhcmNoX3BhdGggc2V0dGluZ3MuICBSYXRoZXIgdGhh biBpbmplY3QKKwkgKiB3aGF0IHdvdWxkIGJlIHJlcGV0aXRpdmUgY2FsbHMgdG8gb3ZlcnJpZGUg c2VhcmNoIHBhdGggYWxsIG92ZXIgdGhlCisJICogcGxhY2UsIHdlIGRvIGl0IGNlbnRyYWxseSBo ZXJlLgorCSAqLworCW92ZXJyaWRlUGF0aCA9IEdldE92ZXJyaWRlU2VhcmNoUGF0aChDdXJyZW50 TWVtb3J5Q29udGV4dCk7CisJb3ZlcnJpZGVQYXRoLT5zY2hlbWFzID0gTklMOworCW92ZXJyaWRl UGF0aC0+YWRkQ2F0YWxvZyA9IGZhbHNlOworCW92ZXJyaWRlUGF0aC0+YWRkVGVtcCA9IHRydWU7 CisJUHVzaE92ZXJyaWRlU2VhcmNoUGF0aChvdmVycmlkZVBhdGgpOworCisJdmVyYm9zZSA9IHZl cmJvc2VfbW9kZTsKKworCXN3aXRjaCAoY21kLT50eXBlKQorCXsKKwkJY2FzZSBTQ1RfU2ltcGxl OgorCQkJdHJlZSA9IGRlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoY21kKTsKKwkJCWJyZWFrOworCQlj YXNlIFNDVF9BbHRlclRhYmxlOgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJUYWJsZVN0bXQoY21k KTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9BbHRlck9wRmFtaWx5OgorCQkJdHJlZSA9IGRlcGFy c2VfQWx0ZXJPcEZhbWlseShjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xh c3M6CisJCQl0cmVlID0gZGVwYXJzZV9DcmVhdGVPcENsYXNzU3RtdChjbWQpOworCQkJYnJlYWs7 CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBkZXBhcnNlIG5vZGUgdHlw ZSAlZCIsIGNtZC0+dHlwZSk7CisJfQorCisJUG9wT3ZlcnJpZGVTZWFyY2hQYXRoKCk7CisKKwlp ZiAodHJlZSkKKwl7CisJCUpzb25iICpqc29uYjsKKworCQlqc29uYiA9IG9ianRyZWVfdG9fanNv bmIodHJlZSk7CisJCWNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3Qs IEpTT05CX0VTVElNQVRFRF9MRU4pOworCX0KKwllbHNlCisJCWNvbW1hbmQgPSBOVUxMOworCisJ LyoKKwkgKiBDbGVhbiB1cC4gIE5vdGUgdGhhdCBzaW5jZSB3ZSBjcmVhdGVkIHRoZSBTdHJpbmdJ bmZvIGluIHRoZSBjYWxsZXIncworCSAqIGNvbnRleHQsIHRoZSBvdXRwdXQgc3RyaW5nIGlzIG5v dCBkZWxldGVkIGhlcmUuCisJICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJ TWVtb3J5Q29udGV4dERlbGV0ZSh0bXBjeHQpOworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvZGRsX2pzb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODJl YjA1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYwpA QCAtMCwwICsxLDc2MyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2pzb24uYwor ICoJICBKU09OIGNvZGUgcmVsYXRlZCB0byBEREwgY29tbWFuZCBkZXBhcnNpbmcKKyAqCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0 aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAg c3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgi CisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgor CisKKy8qCisgKiBDb252ZXJzaW9uIHNwZWNpZmllciwgaXQgZGV0ZXJtaW5lcyBob3cgd2UgZXhw YW5kIHRoZSBqc29uIGVsZW1lbnQgaW50bworICogc3RyaW5nLgorICovCit0eXBlZGVmIGVudW0K K3sKKwlTcGVjVHlwZW5hbWUsCisJU3BlY09wZXJhdG9ybmFtZSwKKwlTcGVjRG90dGVkTmFtZSwK KwlTcGVjU3RyaW5nLAorCVNwZWNOdW1iZXIsCisJU3BlY1N0cmluZ0xpdGVyYWwsCisJU3BlY0lk ZW50aWZpZXIsCisJU3BlY1JvbGUKK30gY29udlNwZWNpZmllcjsKKworLyoKKyAqIEEgdGVybmFy eSB2YWx1ZSB3aGljaCByZXByZXNlbnRzIGEgYm9vbGVhbiB0eXBlIEpzb25iVmFsdWUuCisgKi8K K3R5cGVkZWYgZW51bQoreworCXR2X2Fic2VudCwKKwl0dl90cnVlLAorCXR2X2ZhbHNlCit9IGpz b25fdHJpdmFsdWU7CisKK3N0YXRpYyBib29sIGV4cGFuZF9vbmVfanNvbmJfZWxlbWVudChTdHJp bmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJCQkgSnNvbmJWYWx1ZSAqanNvbnZhbCwgY29u dlNwZWNpZmllciBzcGVjaWZpZXIsCisJCQkJCQkgY29uc3QgY2hhciAqZm10KTsKK3N0YXRpYyB2 b2lkIGV4cGFuZF9qc29uYl9hcnJheShTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJ ICAgSnNvbmJWYWx1ZSAqanNvbmFyciwgY2hhciAqYXJyYXlzZXAsCisJCQkJICAgY29udlNwZWNp ZmllciBzcGVjaWZpZXIsIGNvbnN0IGNoYXIgKmZtdCk7CitzdGF0aWMgdm9pZCBmbXRzdHJfZXJy b3JfY2FsbGJhY2sodm9pZCAqYXJnKTsKK2NoYXIgKmRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5n KGNoYXIgKmpzb25iKTsKKworLyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWluZXIsIGZpbmQgdGhl IEpzb25iVmFsdWUgd2l0aCB0aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisgKiBJZiBpdCdzIG9m IGEgdHlwZSBvdGhlciB0aGFuIGpidkJvb2wsIGFuIGVycm9yIGlzIHJhaXNlZC4gSWYgaXQgZG9l c24ndAorICogZXhpc3QsIHR2X2Fic2VudCBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlIHJldHVybiB0 aGUgYWN0dWFsIGpzb25fdHJpdmFsdWUuCisgKi8KK3N0YXRpYyBqc29uX3RyaXZhbHVlCitmaW5k X2Jvb2xfaW5fanNvbmJjb250YWluZXIoSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwgY2hhciAq a2V5bmFtZSkKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwlqc29u X3RyaXZhbHVlCXJlc3VsdDsKKworCWtleS50eXBlID0gamJ2U3RyaW5nOworCWtleS52YWwuc3Ry aW5nLnZhbCA9IGtleW5hbWU7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleW5hbWUp OworCXZhbHVlID0gZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwKKwkJCQkJ CQkJCQlKQl9GT0JKRUNULCAma2V5KTsKKwlpZiAodmFsdWUgPT0gTlVMTCkKKwkJcmV0dXJuIHR2 X2Fic2VudDsKKwlpZiAodmFsdWUtPnR5cGUgIT0gamJ2Qm9vbCkKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJy bXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3Qgb2YgdHlwZSBib29sZWFuIiwKKwkJCQkJCWtleW5h bWUpKSk7CisJcmVzdWx0ID0gdmFsdWUtPnZhbC5ib29sZWFuID8gdHZfdHJ1ZSA6IHR2X2ZhbHNl OworCXBmcmVlKHZhbHVlKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBHaXZlbiBh IEpzb25iQ29udGFpbmVyLCBmaW5kIHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtleSBu YW1lIGluIGl0LgorICogSWYgaXQncyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZTdHJpbmcsIGFu IGVycm9yIGlzIHJhaXNlZC4gIElmIGl0IGRvZXNuJ3QKKyAqIGV4aXN0LCBhbiBlcnJvciBpcyBy YWlzZWQgdW5sZXNzIG1pc3Npbmdfb2s7IG90aGVyd2lzZSByZXR1cm4gTlVMTC4KKyAqCisgKiBJ ZiBpdCBleGlzdHMgYW5kIGlzIGEgc3RyaW5nLCBhIGZyZXNobHkgcGFsbG9jJ2VkIGNvcHkgaXMg cmV0dXJuZWQuCisgKgorICogSWYgKmxlbmd0aCBpcyBub3QgTlVMTCwgaXQgaXMgc2V0IHRvIHRo ZSBsZW5ndGggb2YgdGhlIHN0cmluZy4KKyAqLworc3RhdGljIGNoYXIgKgorZmluZF9zdHJpbmdf aW5fanNvbmJjb250YWluZXIoSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwgY2hhciAqa2V5bmFt ZSwKKwkJCQkJCQkgIGJvb2wgbWlzc2luZ19vaywgaW50ICpsZW5ndGgpCit7CisJSnNvbmJWYWx1 ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJY2hhcgkgICAqc3RyOworCisJLyogWFhYIHZl cmlmeSB0aGF0IHRoaXMgaXMgYW4gb2JqZWN0LCBub3QgYW4gYXJyYXkgKi8KKworCWtleS50eXBl ID0gamJ2U3RyaW5nOworCWtleS52YWwuc3RyaW5nLnZhbCA9IGtleW5hbWU7CisJa2V5LnZhbC5z dHJpbmcubGVuID0gc3RybGVuKGtleW5hbWUpOworCXZhbHVlID0gZmluZEpzb25iVmFsdWVGcm9t Q29udGFpbmVyKGNvbnRhaW5lciwKKwkJCQkJCQkJCQlKQl9GT0JKRUNULCAma2V5KTsKKwlpZiAo dmFsdWUgPT0gTlVMTCkKKwl7CisJCWlmIChtaXNzaW5nX29rKQorCQkJcmV0dXJuIE5VTEw7CisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJIGVycm1zZygibWlzc2luZyBlbGVtZW50IFwiJXNcIiBpbiBqc29uIG9iamVj dCIsIGtleW5hbWUpKSk7CisJfQorCisJc3RyID0gcG5zdHJkdXAodmFsdWUtPnZhbC5zdHJpbmcu dmFsLCB2YWx1ZS0+dmFsLnN0cmluZy5sZW4pOworCWlmIChsZW5ndGgpCisJCSpsZW5ndGggPSB2 YWx1ZS0+dmFsLnN0cmluZy5sZW47CisJcGZyZWUodmFsdWUpOworCXJldHVybiBzdHI7Cit9CisK KyNkZWZpbmUgQURWQU5DRV9QQVJTRV9QT0lOVEVSKHB0cixlbmRfcHRyKSBcCisJZG8geyBcCisJ CWlmICgrKyhwdHIpID49IChlbmRfcHRyKSkgXAorCQkJZXJlcG9ydChFUlJPUiwgXAorCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwgXAorCQkJCQkgZXJybXNn KCJ1bnRlcm1pbmF0ZWQgZm9ybWF0IHNwZWNpZmllciIpKSk7IFwKKwl9IHdoaWxlICgwKQorCisv KgorICogUmVjdXJzaXZlIGhlbHBlciBmb3IgcGdfZXZlbnRfdHJpZ2dlcl9leHBhbmRfY29tbWFu ZAorICoKKyAqIEZpbmQgdGhlICJmbXQiIGVsZW1lbnQgaW4gdGhlIGdpdmVuIGNvbnRhaW5lciwg YW5kIGV4cGFuZCBpdCBpbnRvIHRoZQorICogcHJvdmlkZWQgU3RyaW5nSW5mby4KKyAqLworc3Rh dGljIHZvaWQKK2V4cGFuZF9mbXRfcmVjdXJzaXZlKEpzb25iQ29udGFpbmVyICpjb250YWluZXIs IFN0cmluZ0luZm8gYnVmKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVl OworCWNvbnN0IGNoYXIgKmNwOworCWNvbnN0IGNoYXIgKnN0YXJ0X3B0cjsKKwljb25zdCBjaGFy ICplbmRfcHRyOworCWludAkJCWxlbjsKKworCXN0YXJ0X3B0ciA9IGZpbmRfc3RyaW5nX2luX2pz b25iY29udGFpbmVyKGNvbnRhaW5lciwgImZtdCIsIGZhbHNlLCAmbGVuKTsKKwllbmRfcHRyID0g c3RhcnRfcHRyICsgbGVuOworCisJZm9yIChjcCA9IHN0YXJ0X3B0cjsgY3AgPCBlbmRfcHRyOyBj cCsrKQorCXsKKwkJY29udlNwZWNpZmllciBzcGVjaWZpZXI7CisJCWJvb2wJCWlzX2FycmF5ID0g ZmFsc2U7CisJCWNoYXIJICAgKnBhcmFtID0gTlVMTDsKKwkJY2hhcgkgICAqYXJyYXlzZXAgPSBO VUxMOworCisJCWlmICgqY3AgIT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1h Y3JvKGJ1ZiwgKmNwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKworCQlBRFZBTkNFX1BBUlNFX1BP SU5URVIoY3AsIGVuZF9wdHIpOworCisJCS8qIEVhc3kgY2FzZTogJSUgb3V0cHV0cyBhIHNpbmds ZSAlICovCisJCWlmICgqY3AgPT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1h Y3JvKGJ1ZiwgKmNwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogU2NhbiB0aGUg bWFuZGF0b3J5IGVsZW1lbnQgbmFtZS4gIEFsbG93IGZvciBhbiBhcnJheSBzZXBhcmF0b3IKKwkJ ICogKHdoaWNoIG1heSBiZSB0aGUgZW1wdHkgc3RyaW5nKSB0byBiZSBzcGVjaWZpZWQgYWZ0ZXIg Y29sb24uCisJCSAqLworCQlpZiAoKmNwID09ICd7JykKKwkJeworCQkJU3RyaW5nSW5mb0RhdGEg cGFyYnVmOworCQkJU3RyaW5nSW5mb0RhdGEgYXJyYXlzZXBidWY7CisJCQlTdHJpbmdJbmZvCWFw cGVuZFRvOworCisJCQlpbml0U3RyaW5nSW5mbygmcGFyYnVmKTsKKwkJCWFwcGVuZFRvID0gJnBh cmJ1ZjsKKworCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCWZvciAo OyBjcCA8IGVuZF9wdHI7KQorCQkJeworCQkJCWlmICgqY3AgPT0gJzonKQorCQkJCXsKKwkJCQkJ LyoKKwkJCQkJICogRm91bmQgYXJyYXkgc2VwYXJhdG9yIGRlbGltaXRlcjsgZWxlbWVudCBuYW1l IGlzIG5vdworCQkJCQkgKiBjb21wbGV0ZSwgc3RhcnQgZmlsbGluZyB0aGUgc2VwYXJhdG9yLgor CQkJCQkgKi8KKwkJCQkJaW5pdFN0cmluZ0luZm8oJmFycmF5c2VwYnVmKTsKKwkJCQkJYXBwZW5k VG8gPSAmYXJyYXlzZXBidWY7CisJCQkJCWlzX2FycmF5ID0gdHJ1ZTsKKwkJCQkJQURWQU5DRV9Q QVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJ aWYgKCpjcCA9PSAnfScpCisJCQkJeworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVu ZF9wdHIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNy byhhcHBlbmRUbywgKmNwKTsKKwkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIp OworCQkJfQorCQkJcGFyYW0gPSBwYXJidWYuZGF0YTsKKwkJCWlmIChpc19hcnJheSkKKwkJCQlh cnJheXNlcCA9IGFycmF5c2VwYnVmLmRhdGE7CisJCX0KKwkJaWYgKHBhcmFtID09IE5VTEwpCisJ CQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJtaXNzaW5nIGNvbnZlcnNpb24gbmFtZSBpbiBjb252ZXJz aW9uIHNwZWNpZmllciIpKSk7CisKKwkJc3dpdGNoICgqY3ApCisJCXsKKwkJCWNhc2UgJ0knOgor CQkJCXNwZWNpZmllciA9IFNwZWNJZGVudGlmaWVyOworCQkJCWJyZWFrOworCQkJY2FzZSAnRCc6 CisJCQkJc3BlY2lmaWVyID0gU3BlY0RvdHRlZE5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdz JzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjU3RyaW5nOworCQkJCWJyZWFrOworCQkJY2FzZSAnTCc6 CisJCQkJc3BlY2lmaWVyID0gU3BlY1N0cmluZ0xpdGVyYWw7CisJCQkJYnJlYWs7CisJCQljYXNl ICdUJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjVHlwZW5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNl ICdPJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjT3BlcmF0b3JuYW1lOworCQkJCWJyZWFrOworCQkJ Y2FzZSAnbic6CisJCQkJc3BlY2lmaWVyID0gU3BlY051bWJlcjsKKwkJCQlicmVhazsKKwkJCWNh c2UgJ1InOgorCQkJCXNwZWNpZmllciA9IFNwZWNSb2xlOworCQkJCWJyZWFrOworCQkJZGVmYXVs dDoKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJpbnZhbGlkIGNvbnZlcnNpb24gc3BlY2lm aWVyIFwiJWNcIiIsICpjcCkpKTsKKwkJfQorCisJCS8qCisJCSAqIE9idGFpbiB0aGUgZWxlbWVu dCB0byBiZSBleHBhbmRlZC4KKwkJICovCisJCWtleS50eXBlID0gamJ2U3RyaW5nOworCQlrZXku dmFsLnN0cmluZy52YWwgPSBwYXJhbTsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKHBh cmFtKTsKKworCQl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIs IEpCX0ZPQkpFQ1QsICZrZXkpOworCisJCS8qCisJCSAqIEV4cGFuZCB0aGUgZGF0YSAocG9zc2li bHkgYW4gYXJyYXkpIGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvLgorCQkgKi8KKwkJaWYgKGlz X2FycmF5KQorCQkJZXhwYW5kX2pzb25iX2FycmF5KGJ1ZiwgcGFyYW0sIHZhbHVlLCBhcnJheXNl cCwgc3BlY2lmaWVyLCBzdGFydF9wdHIpOworCQllbHNlCisJCQlleHBhbmRfb25lX2pzb25iX2Vs ZW1lbnQoYnVmLCBwYXJhbSwgdmFsdWUsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwl9Cit9CisK Ky8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgcXVvdGVkIGlkZW50aWZpZXIuICBUaGUg dmFsdWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9q c29udmFsX2lkZW50aWZpZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7 CisJY2hhcgkgICAqc3RyOworCisJQXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2U3RyaW5nKTsK KworCXN0ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52YWwu c3RyaW5nLmxlbik7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZp ZXIoc3RyKSk7CisJcGZyZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUg YXMgYSBkb3Qtc2VwYXJhdGVkLW5hbWUuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlCisgKiBv YmplY3QgYW5kIG1heSBjb250YWluIGVsZW1lbnRzICJzY2hlbWFuYW1lIiAob3B0aW9uYWwpLCAi b2JqbmFtZSIKKyAqIChtYW5kYXRvcnkpLCAiYXR0cm5hbWUiIChvcHRpb25hbCkuICBEb3VibGUg cXVvdGVzIGFyZSBhZGRlZCB0byBlYWNoIGVsZW1lbnQKKyAqIGFzIG5lY2Vzc2FyeSwgYW5kIGRv dCBzZXBhcmF0b3JzIHdoZXJlIG5lZWRlZC4KKyAqCisgKiBPbmUgZGF5IHdlIG1pZ2h0IG5lZWQg YSAiY2F0YWxvZyIgZWxlbWVudCBhcyB3ZWxsLCBidXQgbm8gY3VycmVudCB1c2UgY2FzZQorICog bmVlZHMgdGhhdC4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX2RvdHRlZG5hbWUo U3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOwor CisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFy eS5kYXRhLAorCQkJCQkJCQkJCSJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJaWYgKHN0cikK Kwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuIiwgcXVvdGVfaWRlbnRpZmllcihzdHIp KTsKKwkJcGZyZWUoc3RyKTsKKwl9CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRh aW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJIm9iam5hbWUiLCBmYWxz ZSwgTlVMTCk7CisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHF1b3RlX2lkZW50aWZpZXIo c3RyKSk7CisJcGZyZWUoc3RyKTsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFp bmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkiYXR0cm5hbWUiLCB0cnVl LCBOVUxMKTsKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIuJXMiLCBx dW90ZV9pZGVudGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0KK30KKworLyoKKyAqIEV4 cGFuZCBhIGpzb24gdmFsdWUgYXMgYSB0eXBlIG5hbWUuCisgKi8KK3N0YXRpYyB2b2lkCitleHBh bmRfanNvbnZhbF90eXBlbmFtZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkK K3sKKwljaGFyCSAgICpzY2hlbWEgPSBOVUxMOworCWNoYXIJICAgKnR5cGVuYW1lOworCWNoYXIJ ICAgKnR5cG1vZHN0cjsKKwlqc29uX3RyaXZhbHVlCWlzX2FycmF5OworCWNoYXIJICAgKmFycmF5 X2RlY29yOworCisJLyoKKwkgKiBXZSBvbWl0IHNjaGVtYS1xdWFsaWZ5aW5nIHRoZSBvdXRwdXQg bmFtZSBpZiB0aGUgc2NoZW1hIGVsZW1lbnQgaXMKKwkgKiBlaXRoZXIgdGhlIGVtcHR5IHN0cmlu ZyBvciBOVUxMOyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRob3NlIHR3byBjYXNlcworCSAqIGlz IHRoYXQgaW4gdGhlIGxhdHRlciB3ZSBxdW90ZSB0aGUgdHlwZSBuYW1lLCBpbiB0aGUgZm9ybWVy IHdlIGRvbid0LgorCSAqIFRoaXMgYWxsb3dzIGZvciB0eXBlcyB3aXRoIHNwZWNpYWwgdHlwbW9k IG5lZWRzLCBzdWNoIGFzIGludGVydmFsIGFuZAorCSAqIHRpbWVzdGFtcCAoc2VlIGZvcm1hdF90 eXBlX2RldGFpbGVkKSwgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSBhbGxvd2luZworCSAqIGZvciB0 aGUgc2NoZW1hIG5hbWUgdG8gYmUgb21pdHRlZCBmcm9tIHR5cGUgbmFtZXMgdGhhdCByZXF1aXJl IHF1b3RlcworCSAqIGJ1dCBhcmUgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHVzZXIgc2NoZW1hLgor CSAqLworCisJc2NoZW1hID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+ dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSAgICJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7 CisJdHlwZW5hbWUgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwu YmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSAidHlwZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJdHlw bW9kc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFy eS5kYXRhLAorCQkJCQkJCQkJCQkgICJ0eXBtb2QiLCB0cnVlLCBOVUxMKTsKKwlpc19hcnJheSA9 IGZpbmRfYm9vbF9pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJ CQkJCQkJCQkJICAgInR5cGFycmF5Iik7CisJc3dpdGNoIChpc19hcnJheSkKKwl7CisJCWNhc2Ug dHZfdHJ1ZToKKwkJCWFycmF5X2RlY29yID0gIltdIjsKKwkJCWJyZWFrOworCisJCWNhc2UgdHZf ZmFsc2U6CisJCQlhcnJheV9kZWNvciA9ICIiOworCQkJYnJlYWs7CisKKwkJY2FzZSB0dl9hYnNl bnQ6CisJCWRlZmF1bHQ6CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygibWlzc2luZyB0eXBhcnJh eSBlbGVtZW50IikpKTsKKwl9CisKKwlpZiAoc2NoZW1hID09IE5VTEwpCisJCWFwcGVuZFN0cmlu Z0luZm8oYnVmLCAiJXMiLCBxdW90ZV9pZGVudGlmaWVyKHR5cGVuYW1lKSk7CisJZWxzZSBpZiAo c2NoZW1hWzBdID09ICdcMCcpCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCB0eXBlbmFt ZSk7IC8qIFNwZWNpYWwgdHlwbW9kIG5lZWRzICovCisJZWxzZQorCQlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgIiVzLiVzIiwgcXVvdGVfaWRlbnRpZmllcihzY2hlbWEpLAorCQkJCQkJIHF1b3RlX2lk ZW50aWZpZXIodHlwZW5hbWUpKTsKKworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyIsIHR5 cG1vZHN0ciA/IHR5cG1vZHN0ciA6ICIiLCBhcnJheV9kZWNvcik7Cit9CisKKy8qCisgKiBFeHBh bmQgYSBqc29uIHZhbHVlIGFzIGFuIG9wZXJhdG9yIG5hbWUKKyAqLworc3RhdGljIHZvaWQKK2V4 cGFuZF9qc29udmFsX29wZXJhdG9yKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFs KQoreworCWNoYXIJICAgKnN0cjsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFp bmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkic2NoZW1hbmFtZSIsIHRy dWUsIE5VTEwpOworCS8qIFNjaGVtYSBtaWdodCBiZSBOVUxMIG9yIGVtcHR5ICovCisJaWYgKHN0 ciAhPSBOVUxMICYmIHN0clswXSAhPSAnXDAnKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYs ICIlcy4iLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0KKworCXN0 ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0 YSwKKwkJCQkJCQkJCQkib2JqbmFtZSIsIGZhbHNlLCBOVUxMKTsKKworCWlmIChzdHIpCisJewor CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwgc3RyKTsKKwkJcGZyZWUoc3RyKTsKKwl9Cit9 CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgc3RyaW5nLiAgVGhlIHZhbHVlIG11 c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3Igb2YKKyAqIHR5cGUgb2JqZWN0LiAgSW4gdGhlIGxhdHRl ciBjYXNlIGl0IG11c3QgY29udGFpbiBhICJmbXQiIGVsZW1lbnQgd2hpY2ggd2lsbAorICogYmUg cmVjdXJzaXZlbHkgZXhwYW5kZWQ7IGFsc28sIGlmIHRoZSBvYmplY3QgY29udGFpbnMgYW4gZWxl bWVudCAicHJlc2VudCIKKyAqIGFuZCBpdCBpcyBzZXQgdG8gZmFsc2UsIHRoZSBleHBhbnNpb24g aXMgdGhlIGVtcHR5IHN0cmluZy4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIGFjdHVhbCBl eHBhbnNpb24gd2FzIG1hZGUgZHVlIHRvIHRoZSAicHJlc2VudCIgZmxhZworICogYmVpbmcgc2V0 IHRvICJmYWxzZSIuCisgKi8KK3N0YXRpYyBib29sCitleHBhbmRfanNvbnZhbF9zdHJpbmcoU3Ry aW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJaWYgKGpzb252YWwtPnR5cGUg PT0gamJ2U3RyaW5nKQorCXsKKwkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsIGpzb252YWwt PnZhbC5zdHJpbmcudmFsLAorCQkJCQkJCSAgIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKwl9 CisJZWxzZSBpZiAoanNvbnZhbC0+dHlwZSA9PSBqYnZCaW5hcnkpCisJeworCQlqc29uX3RyaXZh bHVlCXByZXNlbnQ7CisKKwkJcHJlc2VudCA9IGZpbmRfYm9vbF9pbl9qc29uYmNvbnRhaW5lcihq c29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSAgInByZXNlbnQiKTsKKwkJLyoK KwkJICogSWYgInByZXNlbnQiIGlzIHNldCB0byBmYWxzZSwgdGhpcyBlbGVtZW50IGV4cGFuZHMg dG8gZW1wdHk7CisJCSAqIG90aGVyd2lzZSAoZWl0aGVyIHRydWUgb3IgYWJzZW50KSwgZmFsbCB0 aHJvdWdoIHRvIGV4cGFuZCAiZm10Ii4KKwkJICovCisJCWlmIChwcmVzZW50ID09IHR2X2ZhbHNl KQorCQkJcmV0dXJuIGZhbHNlOworCisJCWV4cGFuZF9mbXRfcmVjdXJzaXZlKGpzb252YWwtPnZh bC5iaW5hcnkuZGF0YSwgYnVmKTsKKwl9CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBzdHJpbmcgbGl0 ZXJhbC4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3N0cmxpdChTdHJpbmdJbmZv IGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyICAgKnN0cjsKKwlTdHJpbmdJbmZv RGF0YSBkcWRlbGltOworCXN0YXRpYyBjb25zdCBjaGFyIGRxc3VmZml4ZXNbXSA9ICJfWFlaWllY XyI7CisJaW50ICAgICAgICAgZHFuZXh0Y2hhciA9IDA7CisKKwlzdHIgPSBwbnN0cmR1cChqc29u dmFsLT52YWwuc3RyaW5nLnZhbCwganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCisJLyogRWFz eSBjYXNlOiBpZiB0aGVyZSBhcmUgbm8gJyBhbmQgbm8gXCwganVzdCB1c2UgYSBzaW5nbGUgcXVv dGUgKi8KKwlpZiAoc3RyY2hyKHN0ciwgJ1wnJykgPT0gTlVMTCAmJgorCQlzdHJjaHIoc3RyLCAn XFwnKSA9PSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICInJXMnIiwgc3RyKTsK KwkJcGZyZWUoc3RyKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE90aGVyd2lzZSBuZWVkIHRvIGZp bmQgYSB1c2VmdWwgZG9sbGFyLXF1b3RlIGRlbGltaXRlciAqLworCWluaXRTdHJpbmdJbmZvKCZk cWRlbGltKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkcWRlbGltLCAiJCIpOworCXdoaWxl IChzdHJzdHIoc3RyLCBkcWRlbGltLmRhdGEpICE9IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcigmZHFkZWxpbSwgZHFzdWZmaXhlc1tkcW5leHRjaGFyKytdKTsKKwkJZHFuZXh0Y2hh ciA9IGRxbmV4dGNoYXIgJSAoc2l6ZW9mKGRxc3VmZml4ZXMpIC0gMSk7CisJfQorCS8qIEFkZCB0 cmFpbGluZyAkICovCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRxZGVsaW0sICckJyk7CisKKwkv KiBBbmQgZmluYWxseSBwcm9kdWNlIHRoZSBxdW90ZWQgbGl0ZXJhbCBpbnRvIHRoZSBvdXRwdXQg U3RyaW5nSW5mbyAqLworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyVzIiwgZHFkZWxpbS5k YXRhLCBzdHIsIGRxZGVsaW0uZGF0YSk7CisJcGZyZWUoZHFkZWxpbS5kYXRhKTsKKwlwZnJlZShz dHIpOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhbiBpbnRlZ2VyIHF1YW50 aXR5LgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfbnVtYmVyKFN0cmluZ0luZm8g YnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIgKnN0cmRhdHVtOworCisJc3RyZGF0 dW0gPSBEYXR1bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxsMShudW1lcmljX291dCwKKwkJ CQkJCQkJCQkJCSAgIE51bWVyaWNHZXREYXR1bShqc29udmFsLT52YWwubnVtZXJpYykpKTsKKwlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwgc3RyZGF0dW0pOworfQorCisvKgorICogRXhwYW5k IGEganNvbiB2YWx1ZSBhcyBhIHJvbGUgbmFtZS4gIElmIHRoZSBpc19wdWJsaWMgZWxlbWVudCBp cyBzZXQgdG8KKyAqIHRydWUsIFBVQkxJQyBpcyBleHBhbmRlZCAobm8gcXVvdGVzKTsgb3RoZXJ3 aXNlLCBleHBhbmQgdGhlIGdpdmVuIHJvbGUgbmFtZSwKKyAqIHF1b3RpbmcgYXMgYW4gaWRlbnRp Zmllci4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3JvbGUoU3RyaW5nSW5mbyBi dWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJanNvbl90cml2YWx1ZQlpc19wdWJsaWM7CisK Kwlpc19wdWJsaWMgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJp bmFyeS5kYXRhLAorCQkJCQkJCQkJCQkiaXNfcHVibGljIik7CisJaWYgKGlzX3B1YmxpYyA9PSB0 dl90cnVlKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlBVQkxJQyIpOworCWVsc2UK Kwl7CisJCWNoYXIgKnJvbGVuYW1lOworCisJCXJvbGVuYW1lID0gZmluZF9zdHJpbmdfaW5fanNv bmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkJICJyb2xl bmFtZSIsIGZhbHNlLCBOVUxMKTsKKwkJaWYgKHJvbGVuYW1lKQorCQl7CisJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRpZmllcihyb2xlbmFtZSkpOworCQkJcGZyZWUo cm9sZW5hbWUpOworCQl9CisJfQorfQorCisvKgorICogRXhwYW5kIG9uZSBqc29uIGVsZW1lbnQg aW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYWNjb3JkaW5nIHRvIHRoZQorICogY29udmVyc2lv biBzcGVjaWZpZXIuICBUaGUgZWxlbWVudCB0eXBlIGlzIHZhbGlkYXRlZCwgYW5kIGFuIGVycm9y IGlzIHJhaXNlZAorICogaWYgaXQgZG9lc24ndCBtYXRjaCB3aGF0IHdlIGV4cGVjdCBmb3IgdGhl IGNvbnZlcnNpb24gc3BlY2lmaWVyLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgbm8gYWN0dWFs IGV4cGFuc2lvbiB3YXMgbWFkZSAoZHVlIHRvIHRoZSAicHJlc2VudCIgZmxhZworICogYmVpbmcg c2V0IHRvICJmYWxzZSIgaW4gZm9ybWF0dGVkIHN0cmluZyBleHBhbnNpb24pLgorICovCitzdGF0 aWMgYm9vbAorZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KFN0cmluZ0luZm8gYnVmLCBjaGFyICpw YXJhbSwgSnNvbmJWYWx1ZSAqanNvbnZhbCwKKwkJCQkJCSBjb252U3BlY2lmaWVyIHNwZWNpZmll ciwgY29uc3QgY2hhciAqZm10KQoreworCWJvb2wgcmVzdWx0ID0gdHJ1ZTsKKwlFcnJvckNvbnRl eHRDYWxsYmFjayBzcWxlcnJjb250ZXh0OworCisJLyogSWYgd2Ugd2VyZSBnaXZlbiBhIGZvcm1h dCBzdHJpbmcsIHNldHVwIGFuIGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNrICovCisJaWYgKGZt dCkKKwl7CisJCXNxbGVycmNvbnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJyb3JfY2FsbGJhY2s7 CisJCXNxbGVycmNvbnRleHQuYXJnID0gKHZvaWQgKikgZm10OworCQlzcWxlcnJjb250ZXh0LnBy ZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9ICZz cWxlcnJjb250ZXh0OworCX0KKworCWlmICghanNvbnZhbCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNn KCJlbGVtZW50IFwiJXNcIiBub3QgZm91bmQiLCBwYXJhbSkpKTsKKworCXN3aXRjaCAoc3BlY2lm aWVyKQorCXsKKwkJY2FzZSBTcGVjSWRlbnRpZmllcjoKKwkJCWlmIChqc29udmFsLT50eXBlICE9 IGpidlN0cmluZykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0 cmluZyBmb3IgJSVJIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNv bnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX2lkZW50aWZpZXIoYnVmLCBqc29udmFs KTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY0RvdHRlZE5hbWU6CisJCQlpZiAoanNvbnZhbC0+ dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQg SlNPTiBvYmplY3QgZm9yICUlRCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFy YW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9kb3R0ZWRuYW1lKGJ1Ziwg anNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNTdHJpbmc6CisJCQlpZiAoanNvbnZh bC0+dHlwZSAhPSBqYnZTdHJpbmcgJiYKKwkJCQlqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkK KwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBvciBvYmpl Y3QgZm9yICUlcyBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252 YWwtPnR5cGUpKSk7CisJCQlyZXN1bHQgPSBleHBhbmRfanNvbnZhbF9zdHJpbmcoYnVmLCBqc29u dmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1N0cmluZ0xpdGVyYWw6CisJCQlpZiAoanNv bnZhbC0+dHlwZSAhPSBqYnZTdHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhw ZWN0ZWQgSlNPTiBzdHJpbmcgZm9yICUlTCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJ CQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9zdHJsaXQoYnVm LCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1R5cGVuYW1lOgorCQkJaWYgKGpz b252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4 cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJVQgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJ CQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfdHlwZW5hbWUo YnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY09wZXJhdG9ybmFtZToKKwkJ CWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJy bXNnKCJleHBlY3RlZCBKU09OIG9iamVjdCBmb3IgJSVPIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQi LAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX29w ZXJhdG9yKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNOdW1iZXI6CisJ CQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZOdW1lcmljKQorCQkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBl cnJtc2coImV4cGVjdGVkIEpTT04gbnVtZXJpYyBmb3IgJSVuIGVsZW1lbnQgXCIlc1wiLCBnb3Qg JWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFs X251bWJlcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjUm9sZToKKwkJ CWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJy bXNnKCJleHBlY3RlZCBKU09OIG9iamVjdCBmb3IgJSVSIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQi LAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3Jv bGUoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCX0KKworCWlmIChmbXQpCisJCWVycm9yX2Nv bnRleHRfc3RhY2sgPSBzcWxlcnJjb250ZXh0LnByZXZpb3VzOworCisJcmV0dXJuIHJlc3VsdDsK K30KKworLyoKKyAqIEl0ZXJhdGUgb24gdGhlIGVsZW1lbnRzIG9mIGEgSlNPTiBhcnJheSwgZXhw YW5kaW5nIGVhY2ggb25lIGludG8gdGhlIG91dHB1dAorICogU3RyaW5nSW5mbyBwZXIgdGhlIGdp dmVuIGNvbnZlcnNpb24gc3BlY2lmaWVyLCBzZXBhcmF0ZWQgYnkgdGhlIGdpdmVuCisgKiBzZXBh cmF0b3IuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBi dWYsIGNoYXIgKnBhcmFtLAorCQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5 c2VwLCBjb252U3BlY2lmaWVyIHNwZWNpZmllciwKKwkJCQkgICBjb25zdCBjaGFyICpmbXQpCit7 CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgc3FsZXJyY29udGV4dDsKKwlKc29uYkNvbnRhaW5lciAq Y29udGFpbmVyOworCUpzb25iSXRlcmF0b3IgICppdDsKKwlKc29uYlZhbHVlCXY7CisJaW50CQkJ dHlwZTsKKwlib29sCQlmaXJzdCA9IHRydWU7CisJU3RyaW5nSW5mb0RhdGEgYXJyYXllbGVtOwor CisJLyogSWYgd2Ugd2VyZSBnaXZlbiBhIGZvcm1hdCBzdHJpbmcsIHNldHVwIGFuIGVyZXBvcnQo KSBjb250ZXh0IGNhbGxiYWNrICovCisJaWYgKGZtdCkKKwl7CisJCXNxbGVycmNvbnRleHQuY2Fs bGJhY2sgPSBmbXRzdHJfZXJyb3JfY2FsbGJhY2s7CisJCXNxbGVycmNvbnRleHQuYXJnID0gKHZv aWQgKikgZm10OworCQlzcWxlcnJjb250ZXh0LnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFj azsKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9ICZzcWxlcnJjb250ZXh0OworCX0KKworCWlmIChq c29uYXJyLT50eXBlICE9IGpidkJpbmFyeSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50 IFwiJXNcIiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwljb250YWluZXIgPSBq c29uYXJyLT52YWwuYmluYXJ5LmRhdGE7CisJaWYgKCFKc29uQ29udGFpbmVySXNBcnJheShjb250 YWluZXIpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBhIEpT T04gYXJyYXkiLCBwYXJhbSkpKTsKKworCWluaXRTdHJpbmdJbmZvKCZhcnJheWVsZW0pOworCisJ aXQgPSBKc29uYkl0ZXJhdG9ySW5pdChjb250YWluZXIpOworCXdoaWxlICgodHlwZSA9IEpzb25i SXRlcmF0b3JOZXh0KCZpdCwgJnYsIHRydWUpKSAhPSBXSkJfRE9ORSkKKwl7CisJCWlmICh0eXBl ID09IFdKQl9FTEVNKQorCQl7CisJCQlyZXNldFN0cmluZ0luZm8oJmFycmF5ZWxlbSk7CisKKwkJ CWlmIChleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoJmFycmF5ZWxlbSwgcGFyYW0sICZ2LCBzcGVj aWZpZXIsIE5VTEwpKQorCQkJeworCQkJCWlmICghZmlyc3QpCisJCQkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoYnVmLCBhcnJheXNlcCk7CisKKwkJCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1 ZiwgYXJyYXllbGVtLmRhdGEsIGFycmF5ZWxlbS5sZW4pOworCQkJCWZpcnN0ID0gZmFsc2U7CisJ CQl9CisJCX0KKwl9CisKKwlpZiAoZm10KQorCQllcnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJy Y29udGV4dC5wcmV2aW91czsKK30KKworLyoKKyAqIFdvcmtob3JzZSBmb3IgZGRsX2RlcGFyc2Vf ZXhwYW5kX2NvbW1hbmQuCisgKi8KK2NoYXIgKgorZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmco Y2hhciAqanNvbl9zdHIpCit7CisJRGF0dW0JCWQ7CisJSnNvbmIJICAgKmpzb25iOworCVN0cmlu Z0luZm8gYnVmID0gKFN0cmluZ0luZm8pIHBhbGxvYzAoc2l6ZW9mKFN0cmluZ0luZm9EYXRhKSk7 CisKKwlpbml0U3RyaW5nSW5mbyhidWYpOworCisJZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNv bmJfaW4sIFBvaW50ZXJHZXREYXR1bShqc29uX3N0cikpOworCWpzb25iID0gKEpzb25iICopIERh dHVtR2V0UG9pbnRlcihkKTsKKworCWV4cGFuZF9mbXRfcmVjdXJzaXZlKCZqc29uYi0+cm9vdCwg YnVmKTsKKworCXJldHVybiBidWYtPmRhdGE7Cit9CisKKy8qLS0tLS0tCisgKiBSZXR1cm5zIGEg Zm9ybWF0dGVkIHN0cmluZyBmcm9tIGEgSlNPTiBvYmplY3QuCisgKgorICogVGhlIHN0YXJ0aW5n IHBvaW50IGlzIHRoZSBlbGVtZW50IG5hbWVkICJmbXQiICh3aGljaCBtdXN0IGJlIGEgc3RyaW5n KS4KKyAqIFRoaXMgZm9ybWF0IHN0cmluZyBtYXkgY29udGFpbiB6ZXJvIG9yIG1vcmUgJS1lc2Nh cGVzLCB3aGljaCBjb25zaXN0IG9mIGFuCisgKiBlbGVtZW50IG5hbWUgZW5jbG9zZWQgaW4geyB9 LCBwb3NzaWJseSBmb2xsb3dlZCBieSBhIGNvbnZlcnNpb24gbW9kaWZpZXIsCisgKiBmb2xsb3dl ZCBieSBhIGNvbnZlcnNpb24gc3BlY2lmaWVyLiAgUG9zc2libGUgY29udmVyc2lvbiBzcGVjaWZp ZXJzIGFyZToKKyAqCisgKiAlCQlleHBhbmQgdG8gYSBsaXRlcmFsICUuCisgKiBJCQlleHBhbmQg YXMgYSBzaW5nbGUsIG5vbi1xdWFsaWZpZWQgaWRlbnRpZmllcgorICogRAkJZXhwYW5kIGFzIGEg cG9zc2libHktcXVhbGlmaWVkIGlkZW50aWZpZXIKKyAqIFQJCWV4cGFuZCBhcyBhIHR5cGUgbmFt ZQorICogTwkJZXhwYW5kIGFzIGFuIG9wZXJhdG9yIG5hbWUKKyAqIEwJCWV4cGFuZCBhcyBhIHN0 cmluZyBsaXRlcmFsIChxdW90ZSB1c2luZyBzaW5nbGUgcXVvdGVzKQorICogcwkJZXhwYW5kIGFz IGEgc2ltcGxlIHN0cmluZyAobm8gcXVvdGluZykKKyAqIG4JCWV4cGFuZCBhcyBhIHNpbXBsZSBu dW1iZXIgKG5vIHF1b3RpbmcpCisgKiBSCQlleHBhbmQgYXMgYSByb2xlIG5hbWUgKHBvc3NpYmx5 IHF1b3RlZCBuYW1lLCBvciBQVUJMSUMpCisgKgorICogVGhlIGVsZW1lbnQgbmFtZSBtYXkgaGF2 ZSBhbiBvcHRpb25hbCBzZXBhcmF0b3Igc3BlY2lmaWNhdGlvbiBwcmVjZWRlZAorICogYnkgYSBj b2xvbi4gIEl0cyBwcmVzZW5jZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBleHBlY3Rl ZCB0byBiZQorICogYW4gYXJyYXk7IHRoZSBzcGVjaWZpZWQgc2VwYXJhdG9yIGlzIHVzZWQgdG8g am9pbiB0aGUgYXJyYXkgZWxlbWVudHMuCisgKi0tLS0tLQorICovCitEYXR1bQorZGRsX2RlcGFy c2VfZXhwYW5kX2NvbW1hbmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwl0ZXh0CSAgICpqc29uID0g UEdfR0VUQVJHX1RFWFRfUCgwKTsKKwljaGFyCSAgICpqc29uX3N0cjsKKworCWpzb25fc3RyID0g VGV4dERhdHVtR2V0Q1N0cmluZyhqc29uKTsKKworCVBHX1JFVFVSTl9URVhUX1AoQ1N0cmluZ0dl dFRleHREYXR1bShkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhqc29uX3N0cikpKTsKK30KKwor LyoKKyAqIEVycm9yIGNvbnRleHQgY2FsbGJhY2sgZm9yIEpTT04gZm9ybWF0IHN0cmluZyBleHBh bnNpb24uCisgKgorICogWFhYOiBpbmRpY2F0ZSB3aGljaCBlbGVtZW50IHdlJ3JlIGV4cGFuZGlu ZywgaWYgYXBwbGljYWJsZS4KKyAqLworc3RhdGljIHZvaWQKK2ZtdHN0cl9lcnJvcl9jYWxsYmFj ayh2b2lkICphcmcpCit7CisJZXJyY29udGV4dCgid2hpbGUgZXhwYW5kaW5nIGZvcm1hdCBzdHJp bmcgXCIlc1wiIiwgKGNoYXIgKikgYXJnKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3NlcXVlbmNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCmluZGV4 IDk5YzlmOTEuLjQyMDVkZGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVl bmNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwpAQCAtMTcwOCw2ICsx NzA4LDM5IEBAIHByb2Nlc3Nfb3duZWRfYnkoUmVsYXRpb24gc2VxcmVsLCBMaXN0ICpvd25lZF9i eSwgYm9vbCBmb3JfaWRlbnRpdHkpCiAJCXJlbGF0aW9uX2Nsb3NlKHRhYmxlcmVsLCBOb0xvY2sp OwogfQogCisvKgorICogUmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMsIGRldGFpbGVkCisgKi8K K0Zvcm1fcGdfc2VxdWVuY2VfZGF0YQorZ2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQgc2VxdWVuY2VJ ZCkKK3sKKwlCdWZmZXIgICAgICBidWY7CisJU2VxVGFibGUgICAgZWxtOworCVJlbGF0aW9uICAg IHNlcXJlbDsKKwlIZWFwVHVwbGVEYXRhIHNlcXR1cGxlOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0 YSBzZXE7CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHJldFNlcTsKKworCS8qIE9wZW4gYW5kIEFj Y2Vzc1NoYXJlTG9jayBzZXF1ZW5jZSAqLworCWluaXRfc2VxdWVuY2Uoc2VxdWVuY2VJZCwgJmVs bSwgJnNlcXJlbCk7CisKKwlpZiAocGdfY2xhc3NfYWNsY2hlY2soc2VxdWVuY2VJZCwgR2V0VXNl cklkKCksCisJCQlBQ0xfU0VMRUNUIHwgQUNMX1VQREFURSB8IEFDTF9VU0FHRSkgIT0gQUNMQ0hF Q0tfT0spCisJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJ RU5UX1BSSVZJTEVHRSksCisJCQkJCSBlcnJtc2coInBlcm1pc3Npb24gZGVuaWVkIGZvciBzZXF1 ZW5jZSAlcyIsCisJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc2VxcmVsKSkpKTsKKwor CXNlcSA9IHJlYWRfc2VxX3R1cGxlKHNlcXJlbCwgJmJ1ZiwgJnNlcXR1cGxlKTsKKwlyZXRTZXEg PSBwYWxsb2Moc2l6ZW9mKEZvcm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKworCW1lbWNweShy ZXRTZXEsIHNlcSwgc2l6ZW9mKEZvcm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKworCVVubG9j a1JlbGVhc2VCdWZmZXIoYnVmKTsKKwlyZWxhdGlvbl9jbG9zZShzZXFyZWwsIE5vTG9jayk7CisK KwlyZXR1cm4gcmV0U2VxOworfQogCiAvKgogICogUmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMg aW4gYSBsaXN0IG9mIHRoZSBmb3JtIGNyZWF0ZWQgYnkgdGhlIHBhcnNlci4KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2Zvcm1hdF90eXBlLmMKaW5kZXggMjkxOGZkYi4uZjY0YTcyMSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2Zvcm1hdF90eXBlLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJ1dGlscy9udW1l cmljLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAotc3RhdGljIGNoYXIgKnByaW50 VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCk7 CiAKIAogLyoKQEAgLTM2Myw3ICszNjIsNyBAQCBmb3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoT2lk IHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKQogLyoKICAqIEFkZCB0eXBtb2QgZGVjb3JhdGlvbiB0 byB0aGUgYmFzaWMgdHlwZSBuYW1lCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogcHJpbnRU eXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KQog ewogCWNoYXIJICAgKnJlczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdw cm9jLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCmluZGV4IDZkNGMxYzIuLjZi MjM2ZTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYwpAQCAtNDQsNiArNDQsOCBAQAogc3RhdGlj IHZvaWQgcGFyc2VOYW1lQW5kQXJnVHlwZXMoY29uc3QgY2hhciAqc3RyaW5nLCBib29sIGFsbG93 Tm9uZSwKIAkJCQkJCQkJIExpc3QgKipuYW1lcywgaW50ICpuYXJncywgT2lkICphcmd0eXBlcyk7 CiAKK3N0YXRpYyB2b2lkIGZvcm1hdF9wcm9jZWR1cmVfYXJnc19pbnRlcm5hbChGb3JtX3BnX3By b2MgcHJvY2Zvcm0sCisJCQkJCQkJCQkJICAgU3RyaW5nSW5mbyBidWYsIGJvb2wgZm9yY2VfcXVh bGlmeSk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJIFVTRVIgSS9PIFJPVVRJTkVTCQkJ CQkJCQkJCQkJCQkgKgpAQCAtMzMyLDYgKzMzNCwyOSBAQCBmb3JtYXRfcHJvY2VkdXJlX3F1YWxp ZmllZChPaWQgcHJvY2VkdXJlX29pZCkKIH0KIAogLyoKKyAqIGZvcm1hdF9wcm9jZWR1cmVfYXJn cyAgIC0gY29udmVydHMgcHJvYyBPSUQgdG8gIihhcmdzKSIKKyAqLworY2hhciAqCitmb3JtYXRf cHJvY2VkdXJlX2FyZ3MoT2lkIHByb2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSkKK3sK KwlTdHJpbmdJbmZvRGF0YSBidWY7CisJSGVhcFR1cGxlICAgcHJvY3R1cDsKKwlGb3JtX3BnX3By b2MgcHJvY2Zvcm07CisKKwlwcm9jdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVj dElkR2V0RGF0dW0ocHJvY2VkdXJlX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9j dHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAl dSIsIHByb2NlZHVyZV9vaWQpOworCXByb2Nmb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNU KHByb2N0dXApOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJZm9ybWF0X3Byb2NlZHVyZV9h cmdzX2ludGVybmFsKHByb2Nmb3JtLCAmYnVmLCBmb3JjZV9xdWFsaWZ5KTsKKworCVJlbGVhc2VT eXNDYWNoZShwcm9jdHVwKTsKKworCXJldHVybiBidWYuZGF0YTsKK30KKworLyoKICAqIGZvcm1h dF9wcm9jZWR1cmVfZXh0ZW5kZWQgLSBjb252ZXJ0cyBwcm9jZWR1cmUgT0lEIHRvICJwcm9fbmFt ZShhcmdzKSIKICAqCiAgKiBUaGlzIGV4cG9ydHMgdGhlIHVzZWZ1bCBmdW5jdGlvbmFsaXR5IG9m IHJlZ3Byb2NlZHVyZW91dCBmb3IgdXNlCkBAIC0yMDYwLDMgKzIwODUsMzAgQEAgcGFyc2VOYW1l QW5kQXJnVHlwZXMoY29uc3QgY2hhciAqc3RyaW5nLCBib29sIGFsbG93Tm9uZSwgTGlzdCAqKm5h bWVzLAogCiAJcGZyZWUocmF3bmFtZSk7CiB9CisKKy8qCisgKiBBcHBlbmQgdGhlIHBhcmVudGhp c2VkIGFyZ3VtZW50cyBvZiB0aGUgZ2l2ZW4gcGdfcHJvYyByb3cgaW50byB0aGUgb3V0cHV0Cisg KiBidWZmZXIuICBmb3JjZV9xdWFsaWZ5IGluZGljYXRlcyB3aGV0aGVyIHRvIHNjaGVtYS1xdWFs aWZ5IHR5cGUgbmFtZXMKKyAqIHJlZ2FyZGxlc3Mgb2YgdmlzaWJpbGl0eS4KKyAqLworc3RhdGlj IHZvaWQKK2Zvcm1hdF9wcm9jZWR1cmVfYXJnc19pbnRlcm5hbChGb3JtX3BnX3Byb2MgcHJvY2Zv cm0sIFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCSAgIGJvb2wgZm9yY2VfcXVhbGlmeSkKK3sKKwlp bnQJCQlpOworCWludAkJCW5hcmdzID0gcHJvY2Zvcm0tPnByb25hcmdzOworCisJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoYnVmLCAnKCcpOworCWZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsrKQorCXsK KwkJT2lkCQkJdGhpc2FyZ3R5cGUgPSBwcm9jZm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldOwor CisJCWlmIChpID4gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywnKTsKKwkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsCisJCQkJCQkJICAgZm9yY2VfcXVhbGlmeSA/CisJCQkJ CQkJICAgZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKHRoaXNhcmd0eXBlKSA6CisJCQkJCQkJICAg Zm9ybWF0X3R5cGVfYmUodGhpc2FyZ3R5cGUpKTsKKwl9CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIo YnVmLCAnKScpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGls cy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IDJiN2IxYjAuLjU0 MDRkNTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTM1OCw3ICszNTgsNiBAQCBz dGF0aWMgaW50CXByaW50X2Z1bmN0aW9uX2FyZ3VtZW50cyhTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1 cGxlIHByb2N0dXAsCiAJCQkJCQkJCQkgYm9vbCBwcmludF90YWJsZV9hcmdzLCBib29sIHByaW50 X2RlZmF1bHRzKTsKIHN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3JldHR5cGUoU3RyaW5nSW5m byBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3Ry ZnR5cGVzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7Ci1zdGF0aWMgdm9pZCBw cmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7 CiBzdGF0aWMgdm9pZCBzZXRfcnRhYmxlX25hbWVzKGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBM aXN0ICpwYXJlbnRfbmFtZXNwYWNlcywKIAkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwog c3RhdGljIHZvaWQgc2V0X2RlcGFyc2VfZm9yX3F1ZXJ5KGRlcGFyc2VfbmFtZXNwYWNlICpkcG5z LCBRdWVyeSAqcXVlcnksCkBAIC00ODIsMjIgKzQ4MSwxNSBAQCBzdGF0aWMgdm9pZCBnZXRfZnJv bV9jbGF1c2VfY29sZGVmbGlzdChSYW5nZVRibEZ1bmN0aW9uICpydGZ1bmMsCiAJCQkJCQkJCQkg ICBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQgZ2V0X3RhYmxlc2FtcGxl X2RlZihUYWJsZVNhbXBsZUNsYXVzZSAqdGFibGVzYW1wbGUsCiAJCQkJCQkJCWRlcGFyc2VfY29u dGV4dCAqY29udGV4dCk7Ci1zdGF0aWMgdm9pZCBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNz LCBPaWQgYWN0dWFsX2RhdGF0eXBlLAotCQkJCQkJCSBTdHJpbmdJbmZvIGJ1Zik7CiBzdGF0aWMg Tm9kZSAqcHJvY2Vzc0luZGlyZWN0aW9uKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29u dGV4dCk7CiBzdGF0aWMgdm9pZCBwcmludFN1YnNjcmlwdHMoU3Vic2NyaXB0aW5nUmVmICpzYnNy ZWYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgY2hhciAqZ2V0X3JlbGF0aW9u X25hbWUoT2lkIHJlbGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9yZWxhdGlvbl9uYW1lKE9p ZCByZWxpZCwgTGlzdCAqbmFtZXNwYWNlcyk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcXVhbGlm aWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKLXN0YXRpYyBjaGFyICpnZW5lcmF0ZV9mdW5j dGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywKLQkJCQkJCQkJCUxpc3QgKmFyZ25hbWVz LCBPaWQgKmFyZ3R5cGVzLAotCQkJCQkJCQkJYm9vbCBoYXNfdmFyaWFkaWMsIGJvb2wgKnVzZV92 YXJpYWRpY19wLAotCQkJCQkJCQkJUGFyc2VFeHByS2luZCBzcGVjaWFsX2V4cHJraW5kKTsKIHN0 YXRpYyBjaGFyICpnZW5lcmF0ZV9vcGVyYXRvcl9uYW1lKE9pZCBvcGVyaWQsIE9pZCBhcmcxLCBP aWQgYXJnMik7CiBzdGF0aWMgdm9pZCBhZGRfY2FzdF90byhTdHJpbmdJbmZvIGJ1ZiwgT2lkIHR5 cGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfdHlwZV9uYW1lKE9pZCB0eXBp ZCk7CiBzdGF0aWMgdGV4dCAqc3RyaW5nX3RvX3RleHQoY2hhciAqc3RyKTsKLXN0YXRpYyBjaGFy ICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIHN0YXRpYyB2b2lkIGdldF9yZWxvcHRp b25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKTsKIAogI2RlZmluZSBvbmx5X21h cmtlcihydGUpICAoKHJ0ZSktPmluaCA/ICIiIDogIk9OTFkgIikKQEAgLTEwMTUsNjUgKzEwMDcs MTIgQEAgcGdfZ2V0X3RyaWdnZXJkZWZfd29ya2VyKE9pZCB0cmlnaWQsIGJvb2wgcHJldHR5KQog CWlmICghaXNudWxsKQogCXsKIAkJTm9kZQkgICAqcXVhbDsKLQkJY2hhcgkJcmVsa2luZDsKLQkJ ZGVwYXJzZV9jb250ZXh0IGNvbnRleHQ7Ci0JCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7Ci0JCVJh bmdlVGJsRW50cnkgKm9sZHJ0ZTsKLQkJUmFuZ2VUYmxFbnRyeSAqbmV3cnRlOwotCi0JCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIldIRU4gKCIpOworCQljaGFyICAgICAgICpxdWFsc3Ry OwogCiAJCXF1YWwgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyh2YWx1ZSkpOwor CQlxdWFsc3RyID0gcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZSh0cmlncmVjLCBxdWFsLCBwcmV0 dHkpOwogCi0JCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQodHJpZ3JlYy0+dGdyZWxpZCk7Ci0K LQkJLyogQnVpbGQgbWluaW1hbCBPTEQgYW5kIE5FVyBSVEVzIGZvciB0aGUgcmVsICovCi0JCW9s ZHJ0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOwotCQlvbGRydGUtPnJ0ZWtpbmQgPSBSVEVf UkVMQVRJT047Ci0JCW9sZHJ0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOwotCQlvbGRydGUt PnJlbGtpbmQgPSByZWxraW5kOwotCQlvbGRydGUtPnJlbGxvY2ttb2RlID0gQWNjZXNzU2hhcmVM b2NrOwotCQlvbGRydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJvbGQiLCBOSUwpOwotCQlvbGRydGUt PmVyZWYgPSBvbGRydGUtPmFsaWFzOwotCQlvbGRydGUtPmxhdGVyYWwgPSBmYWxzZTsKLQkJb2xk cnRlLT5pbmggPSBmYWxzZTsKLQkJb2xkcnRlLT5pbkZyb21DbCA9IHRydWU7Ci0KLQkJbmV3cnRl ID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7Ci0JCW5ld3J0ZS0+cnRla2luZCA9IFJURV9SRUxB VElPTjsKLQkJbmV3cnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7Ci0JCW5ld3J0ZS0+cmVs a2luZCA9IHJlbGtpbmQ7Ci0JCW5ld3J0ZS0+cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7 Ci0JCW5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm5ldyIsIE5JTCk7Ci0JCW5ld3J0ZS0+ZXJl ZiA9IG5ld3J0ZS0+YWxpYXM7Ci0JCW5ld3J0ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQluZXdydGUt PmluaCA9IGZhbHNlOwotCQluZXdydGUtPmluRnJvbUNsID0gdHJ1ZTsKLQotCQkvKiBCdWlsZCB0 d28tZWxlbWVudCBydGFibGUgKi8KLQkJbWVtc2V0KCZkcG5zLCAwLCBzaXplb2YoZHBucykpOwot CQlkcG5zLnJ0YWJsZSA9IGxpc3RfbWFrZTIob2xkcnRlLCBuZXdydGUpOwotCQlkcG5zLnN1YnBs YW5zID0gTklMOwotCQlkcG5zLmN0ZXMgPSBOSUw7Ci0JCWRwbnMuYXBwZW5kcmVscyA9IE5VTEw7 Ci0JCXNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwgTlVMTCk7Ci0JCXNldF9zaW1wbGVfY29s dW1uX25hbWVzKCZkcG5zKTsKLQotCQkvKiBTZXQgdXAgY29udGV4dCB3aXRoIG9uZS1kZWVwIG5h bWVzcGFjZSBzdGFjayAqLwotCQljb250ZXh0LmJ1ZiA9ICZidWY7Ci0JCWNvbnRleHQubmFtZXNw YWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOwotCQljb250ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsK LQkJY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKLQkJY29udGV4dC52YXJwcmVmaXggPSB0cnVl OwotCQljb250ZXh0LnByZXR0eUZsYWdzID0gR0VUX1BSRVRUWV9GTEFHUyhwcmV0dHkpOwotCQlj b250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxUOwotCQljb250ZXh0LmluZGVu dExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKLQkJY29udGV4dC5zcGVjaWFsX2V4cHJraW5kID0g RVhQUl9LSU5EX05PTkU7Ci0JCWNvbnRleHQuYXBwZW5kcGFyZW50cyA9IE5VTEw7Ci0KLQkJZ2V0 X3J1bGVfZXhwcihxdWFsLCAmY29udGV4dCwgZmFsc2UpOwotCi0JCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmJ1ZiwgIikgIik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIldIRU4gKCVzKSAi LCBxdWFsc3RyKTsKIAl9CiAKIAlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJFWEVDVVRFIEZVTkNU SU9OICVzKCIsCkBAIC0xMTE0LDYgKzEwNTMsNjQgQEAgcGdfZ2V0X3RyaWdnZXJkZWZfd29ya2Vy KE9pZCB0cmlnaWQsIGJvb2wgcHJldHR5KQogCXJldHVybiBidWYuZGF0YTsKIH0KIAorY2hhciAq CitwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKEZvcm1fcGdfdHJpZ2dlciB0cmlncmVjLCBOb2Rl ICp3aGVuQ2xhdXNlLCBib29sIHByZXR0eSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJY2hh ciAgICAgICAgcmVsa2luZDsKKwlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsKKwlkZXBhcnNlX25h bWVzcGFjZSBkcG5zOworCVJhbmdlVGJsRW50cnkgKm9sZHJ0ZTsKKwlSYW5nZVRibEVudHJ5ICpu ZXdydGU7CisKKyAgIGluaXRTdHJpbmdJbmZvKCZidWYpOworCisgICByZWxraW5kID0gZ2V0X3Jl bF9yZWxraW5kKHRyaWdyZWMtPnRncmVsaWQpOworCisgICAvKiBCdWlsZCBtaW5pbWFsIE9MRCBh bmQgTkVXIFJURXMgZm9yIHRoZSByZWwgKi8KKyAgIG9sZHJ0ZSA9IG1ha2VOb2RlKFJhbmdlVGJs RW50cnkpOworICAgb2xkcnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOworICAgb2xkcnRlLT5y ZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7CisgICBvbGRydGUtPnJlbGtpbmQgPSByZWxraW5kOwor ICAgb2xkcnRlLT5hbGlhcyA9IG1ha2VBbGlhcygib2xkIiwgTklMKTsKKyAgIG9sZHJ0ZS0+ZXJl ZiA9IG9sZHJ0ZS0+YWxpYXM7CisgICBvbGRydGUtPmxhdGVyYWwgPSBmYWxzZTsKKyAgIG9sZHJ0 ZS0+aW5oID0gZmFsc2U7CisgICBvbGRydGUtPmluRnJvbUNsID0gdHJ1ZTsKKworICAgbmV3cnRl ID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7CisgICBuZXdydGUtPnJ0ZWtpbmQgPSBSVEVfUkVM QVRJT047CisgICBuZXdydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKKyAgIG5ld3J0ZS0+ cmVsa2luZCA9IHJlbGtpbmQ7CisgICBuZXdydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJuZXciLCBO SUwpOworICAgbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsKKyAgIG5ld3J0ZS0+bGF0ZXJh bCA9IGZhbHNlOworICAgbmV3cnRlLT5pbmggPSBmYWxzZTsKKyAgIG5ld3J0ZS0+aW5Gcm9tQ2wg PSB0cnVlOworCisgICAvKiBCdWlsZCB0d28tZWxlbWVudCBydGFibGUgKi8KKyAgIG1lbXNldCgm ZHBucywgMCwgc2l6ZW9mKGRwbnMpKTsKKyAgIGRwbnMucnRhYmxlID0gbGlzdF9tYWtlMihvbGRy dGUsIG5ld3J0ZSk7CisgICBkcG5zLmN0ZXMgPSBOSUw7CisgICBzZXRfcnRhYmxlX25hbWVzKCZk cG5zLCBOSUwsIE5VTEwpOworICAgc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRwbnMpOworCisg ICAvKiBTZXQgdXAgY29udGV4dCB3aXRoIG9uZS1kZWVwIG5hbWVzcGFjZSBzdGFjayAqLworICAg Y29udGV4dC5idWYgPSAmYnVmOworICAgY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgm ZHBucyk7CisgICBjb250ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsKKyAgIGNvbnRleHQud2luZG93 VExpc3QgPSBOSUw7CisgICBjb250ZXh0LnZhcnByZWZpeCA9IHRydWU7CisgICBjb250ZXh0LnBy ZXR0eUZsYWdzID0gcHJldHR5ID8gUFJFVFRZRkxBR19QQVJFTiB8IFBSRVRUWUZMQUdfSU5ERU5U IDogUFJFVFRZRkxBR19JTkRFTlQ7CisgICBjb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVN Tl9ERUZBVUxUOworICAgY29udGV4dC5pbmRlbnRMZXZlbCA9IFBSRVRUWUlOREVOVF9TVEQ7Cisg ICBjb250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9ORTsKKworICAgZ2V0X3J1 bGVfZXhwcih3aGVuQ2xhdXNlLCAmY29udGV4dCwgZmFsc2UpOworCisgICByZXR1cm4gYnVmLmRh dGE7Cit9CisKIC8qIC0tLS0tLS0tLS0KICAqIHBnX2dldF9pbmRleGRlZgkJCS0gR2V0IHRoZSBk ZWZpbml0aW9uIG9mIGFuIGluZGV4CiAgKgpAQCAtMTg4MCw2ICsxODc3LDEzIEBAIHBnX2dldF9w YXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSkKIAlyZXR1cm4gcGdfZ2V0 X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCBwcmV0dHlGbGFncywgdHJ1ZSwgZmFsc2UpOwogfQog CisvKiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmVwb3J0cyB0aGUgZnVsbCBwYXJ0aXRpb24ga2V5 IGRlZmluaXRpb24gKi8KK2NoYXIgKgorcGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxlKE9pZCByZWxp ZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCAwLCBmYWxzZSwg ZmFsc2UpOworfQorCiAvKgogICogSW50ZXJuYWwgd29ya2hvcnNlIHRvIGRlY29tcGlsZSBhIHBh cnRpdGlvbiBrZXkgZGVmaW5pdGlvbi4KICAqLwpAQCAtMjEzMiw2ICsyMTM2LDE1IEBAIHBnX2dl dF9jb25zdHJhaW50ZGVmX2V4dChQR19GVU5DVElPTl9BUkdTKQogfQogCiAvKgorICogSW50ZXJu YWwgdmVyc2lvbiB0aGF0IHJldHVybnMgZGVmaW5pdGlvbiBvZiBhIENPTlNUUkFJTlQgY29tbWFu ZAorICovCitjaGFyICoKK3BnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKE9pZCBj b25zdHJhaW50SWQpCit7CisJcmV0dXJuIHBnX2dldF9jb25zdHJhaW50ZGVmX3dvcmtlcihjb25z dHJhaW50SWQsIGZhbHNlLCAwLCBmYWxzZSk7Cit9CisKKy8qCiAgKiBJbnRlcm5hbCB2ZXJzaW9u IHRoYXQgcmV0dXJucyBhIGZ1bGwgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIGNvbW1h bmQKICAqLwogY2hhciAqCkBAIC0zNTAxLDcgKzM1MTQsNyBAQCBwZ19nZXRfZnVuY3Rpb25fYXJn X2RlZmF1bHQoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKHN0cmluZ190b190 ZXh0KHN0cikpOwogfQogCi1zdGF0aWMgdm9pZAordm9pZAogcHJpbnRfZnVuY3Rpb25fc3FsYm9k eShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApCiB7CiAJaW50CQkJbnVtYXJnczsK QEAgLTExMzgwLDcgKzExMzkzLDcgQEAgZ2V0X3RhYmxlc2FtcGxlX2RlZihUYWJsZVNhbXBsZUNs YXVzZSAqdGFibGVzYW1wbGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCkKICAqIGFjdHVhbF9k YXRhdHlwZS4gIChJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzIGJlaGF2aW9yLCBqdXN0IHBhc3MKICAq IEludmFsaWRPaWQgZm9yIGFjdHVhbF9kYXRhdHlwZS4pCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lk CiBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAogCQkJ CSBTdHJpbmdJbmZvIGJ1ZikKIHsKQEAgLTExNzc0LDcgKzExNzg3LDcgQEAgZ2VuZXJhdGVfcXVh bGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKQogICoKICAqIFRoZSByZXN1bHQgaW5jbHVk ZXMgYWxsIG5lY2Vzc2FyeSBxdW90aW5nIGFuZCBzY2hlbWEtcHJlZml4aW5nLgogICovCi1zdGF0 aWMgY2hhciAqCitjaGFyICoKIGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwgaW50 IG5hcmdzLCBMaXN0ICphcmduYW1lcywgT2lkICphcmd0eXBlcywKIAkJCQkJICAgYm9vbCBoYXNf dmFyaWFkaWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAogCQkJCQkgICBQYXJzZUV4cHJLaW5kIHNw ZWNpYWxfZXhwcmtpbmQpCkBAIC0xMjE2MCw3ICsxMjE3Myw3IEBAIGdldF9yZWxvcHRpb25zKFN0 cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKQogLyoKICAqIEdlbmVyYXRlIGEgQyBzdHJp bmcgcmVwcmVzZW50aW5nIGEgcmVsYXRpb24ncyByZWxvcHRpb25zLCBvciBOVUxMIGlmIG5vbmUu CiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxp ZCkKIHsKIAljaGFyCSAgICpyZXN1bHQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5k ZXggYTA3ZTczNy4uMGJmYWViOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMTgyMCw0 ICsxMTgyMCwxMCBAQAogICBwcm9yZXR0eXBlID0+ICdieXRlYScsIHByb2FyZ3R5cGVzID0+ICdw Z19icmluX21pbm1heF9tdWx0aV9zdW1tYXJ5JywKICAgcHJvc3JjID0+ICdicmluX21pbm1heF9t dWx0aV9zdW1tYXJ5X3NlbmQnIH0sCiAKK3sgb2lkID0+ICc0NjQyJywgZGVzY3IgPT4gJ2RlcGFy c2UgdGhlIERETCBjb21tYW5kIGludG8ganNvbiBmb3JtYXQgc3RyaW5nJywKKyAgcHJvbmFtZSA9 PiAnZGRsX2RlcGFyc2VfdG9fanNvbicsIHByb3JldHR5cGUgPT4gJ3RleHQnLAorICBwcm9hcmd0 eXBlcyA9PiAncGdfZGRsX2NvbW1hbmQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNlX3RvX2pzb24n IH0sCit7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdleHBhbmQganNvbiBmb3JtYXQgRERMIHRv IGEgcGxhaW4gRERMIGNvbW1hbmQnLAorICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV9leHBhbmRf Y29tbWFuZCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9PiAndGV4dCcs IHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnIH0sCiBdCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMv c2VxdWVuY2UuaAppbmRleCBkMzhjMGUyLi40Y2E4NGIyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jb21tYW5kcy9zZXF1ZW5jZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNl LmgKQEAgLTU0LDYgKzU0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfc2VxX3JlYwogZXh0ZXJuIGlu dDY0IG5leHR2YWxfaW50ZXJuYWwoT2lkIHJlbGlkLCBib29sIGNoZWNrX3Blcm1pc3Npb25zKTsK IGV4dGVybiBEYXR1bSBuZXh0dmFsKFBHX0ZVTkNUSU9OX0FSR1MpOwogZXh0ZXJuIExpc3QgKnNl cXVlbmNlX29wdGlvbnMoT2lkIHJlbGlkKTsKK2V4dGVybiBGb3JtX3BnX3NlcXVlbmNlX2RhdGEg Z2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQgc2VxdWVuY2VJZCk7CiAKIGV4dGVybiBPYmplY3RBZGRy ZXNzIERlZmluZVNlcXVlbmNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlU2VxU3RtdCAqc3Rt dCk7CiBleHRlcm4gT2JqZWN0QWRkcmVzcyBBbHRlclNlcXVlbmNlKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgQWx0ZXJTZXFTdG10ICpzdG10KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGRs X2RlcGFyc2UuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGZkZjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2lu Y2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIGRkbF9kZXBhcnNlLmgKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp Zm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgRERMX0RFUEFSU0VfSAorI2RlZmluZSBERExfREVQ QVJTRV9ICisKKyNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgorCitleHRlcm4gY2hh ciAqZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZl cmJvc2VfbW9kZSk7CitleHRlcm4gY2hhciAqZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcoY2hh ciAqanNvbmIpOworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZHJvcF9jb21tYW5kKGNvbnN0IGNoYXIg Km9iamlkZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAorCQkJCQkJCQkgIERyb3BCZWhh dmlvciBiZWhhdmlvcik7CisKKworI2VuZGlmCQkvKiBERExfREVQQVJTRV9IICovCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNv cC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCA5NGRlMTNkLi5iNTMyOTRiIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3Av ZGVwYXJzZV91dGlsaXR5LmgKQEAgLTYyLDYgKzYyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVj dGVkQ29tbWFuZAogCQl7CiAJCQlPaWQJCQlvYmplY3RJZDsKIAkJCU9pZAkJCWNsYXNzSWQ7CisJ CQlib29sCQlyZXdyaXRlOwogCQkJTGlzdAkgICAqc3ViY21kczsKIAkJfQkJCWFsdGVyVGFibGU7 CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmggYi9zcmMvaW5jbHVk ZS91dGlscy9idWlsdGlucy5oCmluZGV4IDIyMWMzZTYuLjgxM2VhZmQgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRp bnMuaApAQCAtMTE0LDEwICsxMTQsMTIgQEAgZXh0ZXJuIERhdHVtIG51bWVyaWNfZmxvYXQ4X25v X292ZXJmbG93KFBHX0ZVTkNUSU9OX0FSR1MpOwogI2RlZmluZSBGT1JNQVRfVFlQRV9GT1JDRV9R VUFMSUZZCTB4MDQJLyogZm9yY2UgcXVhbGlmaWNhdGlvbiBvZiB0eXBlICovCiAjZGVmaW5lIEZP Uk1BVF9UWVBFX0lOVkFMSURfQVNfTlVMTAkweDA4CS8qIE5VTEwgaWYgdW5kZWZpbmVkICovCiBl eHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfZXh0ZW5kZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBl bW9kLCBiaXRzMTYgZmxhZ3MpOworZXh0ZXJuIGNoYXIgKmZvcm1hdF9wcm9jZWR1cmVfYXJncyhP aWQgcHJvY2VkdXJlX29pZCwgYm9vbCBmb3JjZV9xdWFsaWZ5KTsKIAogZXh0ZXJuIGNoYXIgKmZv cm1hdF90eXBlX2JlKE9pZCB0eXBlX29pZCk7CiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfYmVf cXVhbGlmaWVkKE9pZCB0eXBlX29pZCk7CiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfd2l0aF90 eXBlbW9kKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCk7CitleHRlcm4gY2hhciAqcHJpbnRU eXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KTsK IAogZXh0ZXJuIGludDMyIHR5cGVfbWF4aW11bV9zaXplKE9pZCB0eXBlX29pZCwgaW50MzIgdHlw ZW1vZCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oIGIvc3Jj L2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmgKaW5kZXggN2Q0ODk3MS4uM2Q2OWE2MCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvcnVsZXV0aWxzLmgKQEAgLTEzLDYgKzEzLDcgQEAKICNpZm5kZWYgUlVMRVVUSUxTX0gKICNk ZWZpbmUgUlVMRVVUSUxTX0gKIAorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJpZ2dlci5oIgogI2lu Y2x1ZGUgIm5vZGVzL25vZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgogI2lu Y2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKQEAgLTIzLDEyICsyNCwxNiBAQCBzdHJ1Y3QgUGxhbm5l ZFN0bXQ7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZfc3RyaW5nKE9pZCBpbmRleHJl bGlkKTsKIGV4dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZfY29sdW1ucyhPaWQgaW5kZXhyZWxp ZCwgYm9vbCBwcmV0dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dldF90cmlnZ2VyX3doZW5jbGF1c2Uo Rm9ybV9wZ190cmlnZ2VyIHRyaWdyZWMsCisJCQkJCQkJCQkgICBOb2RlICp3aGVuQ2xhdXNlLCBi b29sIHByZXR0eSk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3F1ZXJ5ZGVmKFF1ZXJ5ICpxdWVyeSwg Ym9vbCBwcmV0dHkpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhP aWQgcmVsaWQsIGJvb2wgcHJldHR5KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9z aW1wbGUoT2lkIHJlbGlkKTsKIGV4dGVybiBjaGFyICpwZ19nZXRfcGFydGNvbnN0cmRlZl9zdHJp bmcoT2lkIHBhcnRpdGlvbklkLCBjaGFyICphbGlhc25hbWUpOwogCiBleHRlcm4gY2hhciAqcGdf Z2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZChPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiBjaGFy ICpwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKTsK IGV4dGVybiBjaGFyICpkZXBhcnNlX2V4cHJlc3Npb24oTm9kZSAqZXhwciwgTGlzdCAqZHBjb250 ZXh0LAogCQkJCQkJCQlib29sIGZvcmNlcHJlZml4LCBib29sIHNob3dpbXBsaWNpdCk7CiBleHRl cm4gTGlzdCAqZGVwYXJzZV9jb250ZXh0X2Zvcihjb25zdCBjaGFyICphbGlhc25hbWUsIE9pZCBy ZWxpZCk7CkBAIC00MCw4ICs0NSwxNiBAQCBleHRlcm4gTGlzdCAqc2VsZWN0X3J0YWJsZV9uYW1l c19mb3JfZXhwbGFpbihMaXN0ICpydGFibGUsCiAJCQkJCQkJCQkJCSBCaXRtYXBzZXQgKnJlbHNf dXNlZCk7CiBleHRlcm4gY2hhciAqZ2VuZXJhdGVfY29sbGF0aW9uX25hbWUoT2lkIGNvbGxpZCk7 CiBleHRlcm4gY2hhciAqZ2VuZXJhdGVfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzKTsKK2V4dGVy biBjaGFyICpnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywgTGlz dCAqYXJnbmFtZXMsCisJCQkJCQkJCQlPaWQgKmFyZ3R5cGVzLCBib29sIGhhc192YXJpYWRpYywK KwkJCQkJCQkJCWJvb2wgKnVzZV92YXJpYWRpY19wLAorCQkJCQkJCQkJUGFyc2VFeHByS2luZCBz cGVjaWFsX2V4cHJraW5kKTsKIGV4dGVybiBjaGFyICpnZXRfcmFuZ2VfcGFydGJvdW5kX3N0cmlu ZyhMaXN0ICpib3VuZF9kYXR1bXMpOworZXh0ZXJuIHZvaWQgZ2V0X29wY2xhc3NfbmFtZShPaWQg b3BjbGFzcywgT2lkIGFjdHVhbF9kYXRhdHlwZSwKKwkJCQkJCQkgIFN0cmluZ0luZm8gYnVmKTsK K2V4dGVybiBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIAogZXh0ZXJuIGNo YXIgKnBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX3N0cmluZyhPaWQgc3RhdGV4dGlkKTsKK2V4dGVy biB2b2lkIHByaW50X2Z1bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBw cm9jdHVwKTsKIAogI2VuZGlmCQkJCQkJCS8qIFJVTEVVVElMU19IICovCmRpZmYgLS1naXQgYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CmluZGV4IDViM2IzMDUuLjQzMTY2M2MgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CkBAIC0xNjA5LDYgKzE2MDksOSBAQCBPU0luZm8KIE9TU0xDaXBoZXIKIE9TU0xEaWdlc3QK IE9WRVJMQVBQRUQKK09iakVsZW0KK09ialRyZWUKK09ialR5cGUKIE9iamVjdEFjY2Vzc0Ryb3AK IE9iamVjdEFjY2Vzc05hbWVzcGFjZVNlYXJjaAogT2JqZWN0QWNjZXNzUG9zdEFsdGVyCkBAIC0z MTc1LDYgKzMxNzgsNyBAQCBjb2xvcm1hcHJhbmdlCiBjb21wYXJlX2NvbnRleHQKIGNvbmZpZ192 YXJfdmFsdWUKIGNvbnRhaW5fYWdnc19vZl9sZXZlbF9jb250ZXh0Citjb252U3BlY2lmaWVyCiBj b252ZXJ0X3Rlc3RleHByX2NvbnRleHQKIGNvcHlfZGF0YV9zb3VyY2VfY2IKIGNvcmVfWVlTVFlQ RQotLSAKMS44LjMuMQoK --000000000000b6224b05e91d0dbf--