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 1oiFLX-0000Kj-3K for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Oct 2022 13:31:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oiFLV-0000ZA-SK for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Oct 2022 13:30:57 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oiFLU-0000Yx-GF for pgsql-hackers@lists.postgresql.org; Tue, 11 Oct 2022 13:30:57 +0000 Received: from mail-lj1-x22b.google.com ([2a00:1450:4864:20::22b]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oiFLQ-0008Ho-Ku for pgsql-hackers@lists.postgresql.org; Tue, 11 Oct 2022 13:30:55 +0000 Received: by mail-lj1-x22b.google.com with SMTP id by36so16835350ljb.4 for ; Tue, 11 Oct 2022 06:30:52 -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:message-id:reply-to; bh=6YT7zX1xKDa4vPifpqbH1SmZQRt1m0G8TwVZPe3o6QY=; b=jblaxRpOCW7EWiMNVKCLwb8fgyyPoDU0+SjgrQu7lriD61jVikKJdBraVCsztYlJ1r pkK/cnRsasBg0ZoGMfDfCYi67YdctTCSrZlx0kSYK4wXulnh91s/J0j3R0nVR0rH6bRG ug/rh33eKWKpV8An97CMv1f3OAu50hsymGYVHFhMDSaB0JDFUAxkWkPkK9NjipYyPOIF 4BLRV37eKnCUWAUt68/53c7uj7f4v4J7gCI3Ull0O0+kQkIzOoZC2x4wJkLWlaSFXYOa aW9kJSpMcrrLv5W5TqSH2jNgS6je6ASt5QQyKG7qvyumZKsHHklYIKab4tof+ZmRTzf3 MyUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=6YT7zX1xKDa4vPifpqbH1SmZQRt1m0G8TwVZPe3o6QY=; b=bLDpZwVEpG/5olyzkbtdekDSKZ2Nk4tHtzz92w+KJzGreE7sNQeUEuA5yqOtxxhoAr vu+Od63e20FVfVEhKcFhe37ZyXjEr9yi6Bt/Zvvecc7dMjIJh7w7AUvRpe61Tfxz0FD+ uGIZah+AxU1seq9z9gtNm7g2ILpqepoQDj47Geaquu745oFwO1O0rNNq7HbBkMjNDhce sgSCZTqaHVNfHz8uobfeFp05JFCL/TD7PgNXIZUeilZls2dttmbu+73n+FSyfK1QKDXp exfGy8pfvmGcxOa0yKGiExDEnSCH7CbgvaZPXbwKY7QSXGljrQOuK0eGbB8vVdpd3l0B UuGg== X-Gm-Message-State: ACrzQf3jad9CZ3HMLnhLsVE7fB1jugmSa/3Yujh6uJL4dMtjcBYYx31N ytKwUW8PpfgSakS8FpNM3PnGjrEnidtJveQoZk0= X-Google-Smtp-Source: AMsMyM5KJiBCtW06ho3A8G0XiYP7lEsz6kcZZdYyoHNU1KKzfe++eZ/fNOvj3P3r3+nk7ST+p4swxa0FF9VFaUsPu8w= X-Received: by 2002:a05:651c:199f:b0:26f:b734:69cd with SMTP id bx31-20020a05651c199f00b0026fb73469cdmr1332656ljb.41.1665495050060; Tue, 11 Oct 2022 06:30:50 -0700 (PDT) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: Ajin Cherian Date: Wed, 12 Oct 2022 00:30:37 +1100 Message-ID: Subject: Re: Support logical replication of DDLs To: vignesh C Cc: Zheng Li , Alvaro Herrera , "houzj.fnst@fujitsu.com" , Peter Smith , Amit Kapila , Masahiko Sawada , Japin Li , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000d5f46705eac248cb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d5f46705eac248cb Content-Type: text/plain; charset="UTF-8" On Mon, Oct 10, 2022 at 8:58 PM Ajin Cherian wrote: > > On Fri, Oct 7, 2022 at 4:07 PM vignesh C wrote: > > > > On Fri, 7 Oct 2022 at 08:10, Zheng Li wrote: > > > > > > > Thanks for the new patch-set. > > > > Could you add the changes to patch 1 and patch 2, rather than adding a > > > > new patch? > > > > Otherwise, we'll have a separate patch for each command and it will > > > > take double work to keep it updated > > > > for each new command added. > > > > > > OK. Here is the consolidated patch set. TEXT SEARCH and TRANSFORM > > > commands are consolidated into patch 1 and patch 2. > > > I was wondering if keeping the changes for each command separate makes > > > it easier to review. Maybe just for some commands that need special > > > handling. > > > > I agree, let's keep the changes for the commands in patch 1 and patch > > 2 if we are following the same parsing mechanism that is being > > followed for the existing commands. If any command needs to be handled > > in a more complex manner which is different from the existing parsing > > mechanism then we can think of keeping it in a separate patch. > > > > CFBOT at [1] was failing as some additional changes were required to > > handle the meson build errors and warnings. The attached patch has the > > changes for the same. > > [1] - https://cirrus-ci.com/task/5343002330660864 > > Adding support for ddl deparsing CREATE/ALTER/DROP USER MAPPING and > > changes from Vignesh C for > CREATE/ALTER/DROP SERVER > CREATE/ALTER/DROP COLLATION > > > I had to change the object identity of the user mapping as part of the deparsing > to make the DROP command work on user mapping. > > FROM: " on server " > TO : "for server " > > Rebasing the patch-set as a recent commit broke it. Also fixed some whitespaces. regards, Ajin Cherian Fujitsu Australia --000000000000d5f46705eac248cb Content-Type: application/octet-stream; name="v27-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v27-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l948q1by3 RnJvbSAzYjZiODZiZTJjZGM2NTBkZjBmNTUzOWU3OTQ4YjI5MzkwMWUyMTVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMTEgT2N0IDIwMjIgMDk6MTg6NDAgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyNyA0LzRdIFRlc3QgY2FzZXMgZm9yIERETCByZXBsaWNhdGlvbi4KCkF1dGhvcjogVGFrYW1p 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== --000000000000d5f46705eac248cb Content-Type: application/octet-stream; name="v27-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v27-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l948q1bx2 RnJvbSBjODhhOTBlNDJkNmUxZTMzZDcxOTQxODM3Nzk4ODdkYTgxZDIyOTFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMTEgT2N0IDIwMjIgMDk6MTU6MjggLTA0MDAKU3ViamVjdDogW1BBVENI IHYyNyAzLzRdIFN1cHBvcnQgQ1JFQVRFIFRBQkxFIEFTIFNFTEVDVCBJTlRPCgpUaGUgbWFpbiBp ZGVhIG9mIHJlcGxpY2F0aW5nIHRoZSBDUkVBVEUgVEFCTEUgQVMgaXMgdGhhdCB3ZSBkZXByYXNl IHRoZSBDUkVBVEUKVEFCTEUgQVMgaW50byBhIHNpbXBsZSBDUkVBVEUgVEFCTEUod2l0aG91dCBz dWJxdWVyeSkgY29tbWFuZCBhbmQgV0FMIGxvZyBpdAphZnRlciBjcmVhdGluZyB0aGUgdGFibGUg YW5kIGJlZm9yZSB3cml0aW5nIGRhdGEgaW50byB0aGUgdGFibGUgYW5kIHJlcGxpY2F0ZQp0aGUg aW5jb21pbmcgd3JpdGVzIGxhdGVyIGFzIG5vcm1hbCBJTlNFUlRzLiBJbiB0aGlzIGFwcG9yYWNo LCB3ZSBkb24ndCBleGVjdXRlCnRoZSBzdWJxdWVyeSBvbiBzdWJzY3JpYmVyIHNvIHRoYXQgZG9u J3QgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBvYmplY3RzCnJlZmVyZW5jZWQgaW4gdGhlIHN1 YnF1ZXJ5IGFsc28gZXhpc3RzIGluIHN1YnNjcmliZXIuIEFuZCBUaGlzIGFwcHJvYWNoIHdvcmtz CmZvciBhbGwga2luZCBvZiBjb21tYW5kcyhlLmcuIENSQUVURSBUQUJMRSBBUyBbU0VMRUNUXVtF WEVDVVRFXVtWQUxVRVNdKQoKSW50cm9kdWNpbmcgYSBuZXcgdHlwZSBvZiBldmVudCB0cmlnZ2Vy ICJ0YWJsZV9pbml0X3dyaXRlIi4gd2hpY2ggd291bGQgYmUgZmlyZWQKZm9yIENSRUFURSBUQUJM RSBBUy9TRUxFQ1QgSU5UTyBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgYW5kCmJlZm9yZSBhbnkg b3RoZXIgbW9kaWZpY2F0aW9uLiB3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGluIHRoZSB0YWJsZV9p bml0X3dyaXRlIGV2ZW50CnRyaWdnZXIgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3Ry aW5nLiBUaGUgd2Fsc2VuZGVyIHdpbGwgc2VuZCB0aGUKc3RyaW5nIHRvIHN1YnNjcmliZXIuIEFu ZCBpbmNvbWluZyBJTlNFUlRzIHdpbGwgYWxzbyBiZSByZXBsaWNhdGVkLgotLS0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgICAgICAgIHwgIDEwICsrCiBzcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jICAgICB8ICAyMyArKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jICAgfCAxNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst CiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAgOSArKwogc3JjL2Jh Y2tlbmQvdGNvcC91dGlsaXR5LmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvZXZ0Y2FjaGUuYyAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdCAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5oICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgICAgfCAg IDkgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggICAgICAgICAgIHwgICAzICstCiAx MCBmaWxlcyBjaGFuZ2VkLCAyMzEgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY3JlYXRlYXMuYwppbmRleCAxNTJjMjliLi4wZDgwYzZjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ny ZWF0ZWFzLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5o IgogI2luY2x1ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9jcmVh dGVhcy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKICNpbmNsdWRlICJj b21tYW5kcy9tYXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBjcmVhdGVfY3Rh c19pbnRlcm5hbChMaXN0ICphdHRyTGlzdCwgSW50b0NsYXVzZSAqaW50bykKIAkJU3RvcmVWaWV3 UXVlcnkoaW50b1JlbGF0aW9uQWRkci5vYmplY3RJZCwgcXVlcnksIGZhbHNlKTsKIAkJQ29tbWFu ZENvdW50ZXJJbmNyZW1lbnQoKTsKIAl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRmlyZSB0aGUg dHJpZ2dlciBmb3IgdGFibGVfaW5pdF93cml0ZSBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgc28K KwkJICogdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZSBjYXRhbG9nIGluZm8gYWJvdXQgdGhlIG5ld2x5 IGNyZWF0ZWQgdGFibGUgaW4KKwkJICogdGhlIHRyaWdnZXIgZnVuY3Rpb24uCisJCSAqLworCQlF dmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZSgoTm9kZSAqKSBjcmVhdGUsIGludG9SZWxhdGlvbkFk ZHIpOworCX0KIAogCXJldHVybiBpbnRvUmVsYXRpb25BZGRyOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9kZXBhcnNlLmMKaW5kZXggODdhMmE0OC4uNmU0N2Y2MSAxMDA3NTUKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxf ZGVwYXJzZS5jCkBAIC04MTIxLDYgKzgxMjEsMjYgQEAgZGVwYXJzZV9DcmVhdGVUcmFuc2Zvcm1T dG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQogCXJldHVybiBjcmVhdGVUcmFuc2Zv cm07CiB9CiAKKy8qCisgKiBEZXBhcnNlIENSRUFURSBUQUJMRSBBUyBjb21tYW5kLgorICoKKyAq IGRlcGFyc2VfQ3JlYXRlU3RtdCBkbyB0aGUgYWN0dWFsIHdvcmsgYXMgd2UgZGVwYXJzZSB0aGUg ZmluYWwgQ3JlYXRlU3RtdCBmb3IKKyAqIENSRUFURSBUQUJMRSBBUyBjb21tYW5kLgorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KENvbGxlY3RlZENvbW1h bmQgKmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpwYXJzZXRyZWU7CisKKwlB c3NlcnQoY21kLT50eXBlID09IFNDVF9DcmVhdGVUYWJsZUFzKTsKKworCXBhcnNldHJlZSA9IGNt ZC0+ZC5jdGFzLnJlYWxfY3JlYXRlOworCW9iamVjdElkID0gY21kLT5kLmN0YXMuYWRkcmVzcy5v YmplY3RJZDsKKworCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJl ZSk7Cit9CisKIAogLyoKICAqIEhhbmRsZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNvbW1hbmRzLgpA QCAtODQyMyw2ICs4NDQzLDkgQEAgZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29t bWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSkKIAkJY2FzZSBTQ1RfR3JhbnQ6CiAJCQl0cmVl ID0gZGVwYXJzZV9HcmFudFN0bXQoY21kKTsKIAkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVhdGVU YWJsZUFzOgorCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoY21kKTsKKwkJCWJy ZWFrOwogCQljYXNlIFNDVF9BbHRlck9wRmFtaWx5OgogCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJP cEZhbWlseShjbWQpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMK aW5kZXggMTgxOWNhMi4uNGQ5ZWQ2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu YwpAQCAtMTMzLDcgKzEzMyw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdT dG10ICpzdG10KQogCWlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfc3Rh cnQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9lbmQi KSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpICE9IDAgJiYK LQkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAwKQorCQlzdHJj bXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDAgJiYKKwkJc3RyY21wKHN0 bXQtPmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSAhPSAwKQogCQllcmVwb3J0KEVSUk9S LAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNnKCJ1bnJl Y29nbml6ZWQgZXZlbnQgbmFtZSBcIiVzXCIiLApAQCAtMTU5LDcgKzE2MCw4IEBAIENyZWF0ZUV2 ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCS8qIFZhbGlkYXRlIHRhZyBs aXN0LCBpZiBhbnkuICovCiAJaWYgKChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1h bmRfc3RhcnQiKSA9PSAwIHx8CiAJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1h bmRfZW5kIikgPT0gMCB8fAotCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikg PT0gMCkKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpID09IDAgfHwKKwkJ IHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKIAkJJiYg dGFncyAhPSBOVUxMKQogCQl2YWxpZGF0ZV9kZGxfdGFncygidGFnIiwgdGFncyk7CiAJZWxzZSBp ZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSA9PSAwCkBAIC01ODUs NyArNTg3LDggQEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAqcGFyc2V0cmVlLAogCQlk Ymd0YWcgPSBDcmVhdGVDb21tYW5kVGFnKHBhcnNldHJlZSk7CiAJCWlmIChldmVudCA9PSBFVlRf RERMQ29tbWFuZFN0YXJ0IHx8CiAJCQlldmVudCA9PSBFVlRfRERMQ29tbWFuZEVuZCB8fAotCQkJ ZXZlbnQgPT0gRVZUX1NRTERyb3ApCisJCQlldmVudCA9PSBFVlRfU1FMRHJvcCB8fAorCQkJZXZl bnQgPT0gRVZUX1RhYmxlSW5pdFdyaXRlKQogCQl7CiAJCQlpZiAoIWNvbW1hbmRfdGFnX2V2ZW50 X3RyaWdnZXJfb2soZGJndGFnKSkKIAkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBjb21tYW5k IHRhZyBcIiVzXCIiLCBHZXRDb21tYW5kVGFnTmFtZShkYmd0YWcpKTsKQEAgLTg2OCw2ICs4NzEs MTYzIEBAIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9pZCB0YWJs ZU9pZCwgaW50IHJlYXNvbikKIAlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwogfQogCisKKy8q CisgKiBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0CisgKiAgICAgUHJlcGFyZSB0byBy ZWNlaXZlIGRhdGEgb24gYW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVUIElOVE8gY29tbWFuZCBhYm91 dAorICogICAgIHRvIGJlIGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUlu aXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsK KwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdn ZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21t YW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJb2xkY3h0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCWNvbW1hbmQg PSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZENvbW1hbmQpKTsKKworCWNvbW1hbmQtPnR5cGUgPSBT Q1RfQ3JlYXRlVGFibGVBczsKKwljb21tYW5kLT5pbl9leHRlbnNpb24gPSBjcmVhdGluZ19leHRl bnNpb247CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBJbnZhbGlkT2JqZWN0QWRkcmVzczsK Kwljb21tYW5kLT5kLmN0YXMucmVhbF9jcmVhdGUgPSBOVUxMOworCWNvbW1hbmQtPnBhcnNldHJl ZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKKworCWNvbW1hbmQtPnBhcmVudCA9IGN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5jdXJyZW50Q29tbWFuZCA9IGNvbW1hbmQ7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY3h0KTsKK30KKworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kCisgKgkJ RmluaXNoIHVwIHNhdmluZyBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRUNUIElOVE8gY29tbWFuZC4K KyAqCisgKiBGSVhNRSB0aGlzIEFQSSBpc24ndCBjb25zaWRlcmluZyB0aGUgcG9zc2liaWxpdHkg dGhhdCBhbiB4YWN0L3N1YnhhY3QgaXMKKyAqIGFib3J0ZWQgcGFydHdheSB0aHJvdWdoLiAgUHJv YmFibHkgaXQncyBiZXN0IHRvIGFkZCBhbgorICogQXRFT1N1YlhhY3RfRXZlbnRUcmlnZ2Vycygp IHRvIGZpeCB0aGlzLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCh2 b2lkKQoreworCUNvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsKKworCS8qIGlnbm9yZSBpZiBldmVu dCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlm ICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0 ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCXBhcmVudCA9IGN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPnBhcmVudDsKKworCXBmcmVl KGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpOworCisJY3VycmVudEV2 ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IHBhcmVudDsKK30KKworLyoKKyAqIHB1 YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZQorICoKKyAqIERlcGFyc2UgdGhlIGRk bCB0YWJsZSBjcmVhdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRp b25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkJ CQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1hbmQgICAqY21kOworCWNoYXIgICAJCQkgICAq anNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJ CWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwlj bWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCUFzc2VydChj bWQpOworCisJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLnNpbXBsZS5h ZGRyZXNzLm9iamVjdElkKTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9y IGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRhYmxlLgor CSAqCisJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNv IHRoYXQgdW5sb2dnZWQgdGFibGVzCisJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJl ZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2libGUgdG8g ZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZwor CSAqIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAqLwor CWlmIChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQb2ludGVy R2V0RGF0dW0oTlVMTCk7CisKKwkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxv ZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmluZyA9IGRl cGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3RyaW5nICE9 IE5VTEwpCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLnNpbXBsZS5h ZGRyZXNzLm9iamVjdElkLCBEQ1RfU2ltcGxlQ21kLAorCQkJCQkJCSBqc29uX3N0cmluZywgc3Ry bGVuKGpzb25fc3RyaW5nKSArIDEpOworCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsK K30KKworLyoKKyAqIEZpcmUgdGFibGVfaW5pdF9yZXdyaXRlIHRyaWdnZXJzLgorICovCit2b2lk CitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpyZWFsX2NyZWF0ZSwgT2JqZWN0QWRk cmVzcyBhZGRyZXNzKQoreworCUxpc3QJICAgKnJ1bmxpc3Q7CisJRXZlbnRUcmlnZ2VyRGF0YSB0 cmlnZGF0YTsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyoKKwkgKiBTZWUgRXZl bnRUcmlnZ2VyRERMQ29tbWFuZFN0YXJ0IGZvciBhIGRpc2N1c3Npb24gYWJvdXQgd2h5IGV2ZW50 CisJICogdHJpZ2dlcnMgYXJlIGRpc2FibGVkIGluIHNpbmdsZSB1c2VyIG1vZGUuCisJICovCisJ aWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbHNvIGRvIG5v dGhpbmcgaWYgb3VyIHN0YXRlIGlzbid0IHNldCB1cCwgd2hpY2ggaXQgd29uJ3QgYmUgaWYgdGhl cmUKKwkgKiB3ZXJlbid0IGFueSByZWxldmFudCBldmVudCB0cmlnZ2VycyBhdCB0aGUgc3RhcnQg b2YgdGhlIGN1cnJlbnQgRERMCisJICogY29tbWFuZC4gIFRoaXMgdGVzdCBtaWdodCB0aGVyZWZv cmUgc2VlbSBvcHRpb25hbCwgYnV0IGl0J3MKKwkgKiAqbmVjZXNzYXJ5KiwgYmVjYXVzZSBFdmVu dFRyaWdnZXJDb21tb25TZXR1cCBtaWdodCBmaW5kIHRyaWdnZXJzIHRoYXQKKwkgKiBkaWRuJ3Qg ZXhpc3QgYXQgdGhlIHRpbWUgdGhlIGNvbW1hbmQgc3RhcnRlZC4KKwkgKi8KKwlpZiAoIWN1cnJl bnRFdmVudFRyaWdnZXJTdGF0ZSkKKwkJcmV0dXJuOworCisJLyogRG8gbm90aGluZyBpZiBubyBj b21tYW5kIHdhcyBjb2xsZWN0ZWQuICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUt PmN1cnJlbnRDb21tYW5kKQorCQlyZXR1cm47CisKKwljb21tYW5kID0gY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCXJ1bmxpc3QgPSBFdmVudFRyaWdnZXJDb21t b25TZXR1cChjb21tYW5kLT5wYXJzZXRyZWUsCisJCQkJCQkJCQkgIEVWVF9UYWJsZUluaXRXcml0 ZSwKKwkJCQkJCQkJCSAgInRhYmxlX2luaXRfd3JpdGUiLAorCQkJCQkJCQkJICAmdHJpZ2RhdGEp OworCWlmIChydW5saXN0ID09IE5JTCkKKwkJcmV0dXJuOworCisJLyogU2V0IHRoZSByZWFsIENy ZWF0ZVRhYmxlIHN0YXRtZW50IGFuZCBvYmplY3QgYWRkcmVzcyAqLworCWNvbW1hbmQtPmQuY3Rh cy5yZWFsX2NyZWF0ZSA9IHJlYWxfY3JlYXRlOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRyZXNzID0g YWRkcmVzczsKKworCS8qIFJ1biB0aGUgdHJpZ2dlcnMuICovCisJRXZlbnRUcmlnZ2VySW52b2tl KHJ1bmxpc3QsICZ0cmlnZGF0YSk7CisKKwkvKiBDbGVhbnVwLiAqLworCWxpc3RfZnJlZShydW5s aXN0KTsKKworCS8qCisJICogTWFrZSBzdXJlIGFueXRoaW5nIHRoZSBldmVudCB0cmlnZ2VycyBk aWQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBtYWluCisJICogY29tbWFuZC4KKwkgKi8KKwlDb21t YW5kQ291bnRlckluY3JlbWVudCgpOworfQorCiAvKgogICogSW52b2tlIGVhY2ggZXZlbnQgdHJp Z2dlciBpbiBhIGxpc3Qgb2YgZXZlbnQgdHJpZ2dlcnMuCiAgKi8KQEAgLTExNDksNyArMTMwOSw4 IEBAIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCkKIAkgKi8KIAlyZXR1cm4gKEV2ZW50 Q2FjaGVMb29rdXAoRVZUX1NRTERyb3ApICE9IE5JTCkgfHwKIAkJKEV2ZW50Q2FjaGVMb29rdXAo RVZUX1RhYmxlUmV3cml0ZSkgIT0gTklMKSB8fAotCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERM Q29tbWFuZEVuZCkgIT0gTklMKTsKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RETENvbW1hbmRF bmQpICE9IE5JTCkgfHwKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1RhYmxlSW5pdFdyaXRlKSAh PSBOSUwpOwogfQogCiAvKgpAQCAtMTg2OCw2ICsyMDI5LDcgQEAgcGdfZXZlbnRfdHJpZ2dlcl9k ZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6 CiAJCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgogCQkJY2FzZSBTQ1RfQWx0ZXJUU0NvbmZpZzoK KwkJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CiAJCQkJewogCQkJCQljaGFyCSAgICppZGVudGl0 eTsKIAkJCQkJY2hhcgkgICAqdHlwZTsKQEAgLTE4ODUsNiArMjA0Nyw4IEBAIHBnX2V2ZW50X3Ry aWdnZXJfZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQlhZGRyID0gY21kLT5k LmNyZWF0ZW9wYy5hZGRyZXNzOwogCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVy VFNDb25maWcpCiAJCQkJCQlhZGRyID0gY21kLT5kLmF0c2NmZy5hZGRyZXNzOworCQkJCQllbHNl IGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCisJCQkJCQlhZGRyID0gY21kLT5k LmN0YXMuYWRkcmVzczsKIAogCQkJCQkvKgogCQkJCQkgKiBJZiBhbiBvYmplY3Qgd2FzIGRyb3Bw ZWQgaW4gdGhlIHNhbWUgY29tbWFuZCB3ZSBtYXkgZW5kCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1Ymxp Y2F0aW9uY21kcy5jCmluZGV4IDFiYTllZjQuLmM4ZGJmNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jCkBAIC0xMDA2LDYgKzEwMDYsMTEgQEAgQ3JlYXRlUHVibGljYXRp b24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCQlD TURUQUdfUkVGUkVTSF9NQVRFUklBTElaRURfVklFVwogCQl9OwogCisJCUNvbW1hbmRUYWcJaW5p dF9jb21tYW5kc1tdID0geworCQkJQ01EVEFHX0NSRUFURV9UQUJMRV9BUywKKwkJCUNNRFRBR19T RUxFQ1RfSU5UTworCQl9OworCiAJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50 IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRf ZW5kIiwgZW5kX2NvbW1hbmRzLAogCQkJCQkJCQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15 c2VsZiwgcHVib2lkKTsKQEAgLTEwMTcsNiArMTAyMiwxMCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQ YXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJLyogQ3Jl YXRlIHRoZSB0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGlj YUV2ZW50VHJpZ2dlcigidGFibGVfcmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMsCiAJCQkJCQkJ CQkgbGVuZ3Rob2YocmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBD cmVhdGUgdGhlIHRhYmxlX2luaXRfd3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExS ZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9pbml0X3dyaXRlIiwgaW5pdF9jb21tYW5kcywKKwkJ CQkJCQkJCSBsZW5ndGhvZihpbml0X2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOwogCX0KIAog CXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC90Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4IGJl YTM1YTYuLjUwODM5YzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisr KyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCkBAIC0xNjY2LDggKzE2NjYsMTAgQEAgUHJv Y2Vzc1V0aWxpdHlTbG93KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQlicmVhazsKIAogCQkJY2Fz ZSBUX0NyZWF0ZVRhYmxlQXNTdG10OgorCQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3Rh cnQocGFyc2V0cmVlKTsKIAkJCQlhZGRyZXNzID0gRXhlY0NyZWF0ZVRhYmxlQXMocHN0YXRlLCAo Q3JlYXRlVGFibGVBc1N0bXQgKikgcGFyc2V0cmVlLAogCQkJCQkJCQkJCQlwYXJhbXMsIHF1ZXJ5 RW52LCBxYyk7CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQoKTsKIAkJCQlicmVh azsKIAogCQkJY2FzZSBUX1JlZnJlc2hNYXRWaWV3U3RtdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRj YWNoZS5jCmluZGV4IGY3ZjcxNjUuLjdmYjhjYjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL2V2dGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2Fj aGUuYwpAQCAtMTY3LDYgKzE2Nyw4IEBAIEJ1aWxkRXZlbnRUcmlnZ2VyQ2FjaGUodm9pZCkKIAkJ CWV2ZW50ID0gRVZUX1NRTERyb3A7CiAJCWVsc2UgaWYgKHN0cmNtcChldnRldmVudCwgInRhYmxl X3Jld3JpdGUiKSA9PSAwKQogCQkJZXZlbnQgPSBFVlRfVGFibGVSZXdyaXRlOworCQllbHNlIGlm IChzdHJjbXAoZXZ0ZXZlbnQsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKKwkJCWV2ZW50ID0g RVZUX1RhYmxlSW5pdFdyaXRlOwogCQllbHNlCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKaW5kZXggY2UxYjE3Zi4uODFmYmZkNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CkBAIC0xMTgzOCw0ICsxMTgzOCw3IEBACiB7IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0cmln Z2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIHJld3JpdGUnLAogICBwcm9uYW1lID0+ ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVu dF90cmlnZ2VyJywKICAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25f ZGVwYXJzZV90YWJsZV9yZXdyaXRlJyB9LAoreyBvaWQgPT4gJzQ2NDcnLCBkZXNjciA9PiAndHJp Z2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSBpbml0JywKKyAgcHJvbmFtZSA9PiAn cHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZl bnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9u X2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZScgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuaAppbmRleCBmZDJlZTdmLi5hOWUwZjcxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5oCkBAIC01NSw2ICs1NSwxMCBAQCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJERExD b21tYW5kRW5kKE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJTUUxE cm9wKE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZVJld3Jp dGUoTm9kZSAqcGFyc2V0cmVlLCBPaWQgdGFibGVPaWQsIGludCByZWFzb24pOwogCitleHRlcm4g dm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7Citl eHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpwYXJzZXRyZWUsIE9i amVjdEFkZHJlc3MgYWRkcmVzcyk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRX cml0ZUVuZCh2b2lkKTsKKwogZXh0ZXJuIGJvb2wgRXZlbnRUcmlnZ2VyQmVnaW5Db21wbGV0ZVF1 ZXJ5KHZvaWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRW5kQ29tcGxldGVRdWVyeSh2b2lk KTsKIGV4dGVybiBib29sIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCk7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNv cC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCBiNTMyOTRiLi4zZDI5NGEwIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3Av ZGVwYXJzZV91dGlsaXR5LmgKQEAgLTI5LDcgKzI5LDggQEAgdHlwZWRlZiBlbnVtIENvbGxlY3Rl ZENvbW1hbmRUeXBlCiAJU0NUX0FsdGVyT3BGYW1pbHksCiAJU0NUX0FsdGVyRGVmYXVsdFByaXZp bGVnZXMsCiAJU0NUX0NyZWF0ZU9wQ2xhc3MsCi0JU0NUX0FsdGVyVFNDb25maWcKKwlTQ1RfQWx0 ZXJUU0NvbmZpZywKKwlTQ1RfQ3JlYXRlVGFibGVBcwogfSBDb2xsZWN0ZWRDb21tYW5kVHlwZTsK IAogLyoKQEAgLTEwMSw2ICsxMDIsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFu ZAogCQl7CiAJCQlPYmplY3RUeXBlCW9ianR5cGU7CiAJCX0JCQlkZWZwcml2czsKKworCQlzdHJ1 Y3QKKwkJeworCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQkJTm9kZQkJICpyZWFsX2NyZWF0 ZTsKKwkJfQkJCWN0YXM7CiAJfQkJCWQ7CiAKIAlzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZCAqcGFy ZW50OwkvKiB3aGVuIG5lc3RlZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0 Y2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKaW5kZXggZGRiNjdhNi4uMWU2 NDgzMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAorKysgYi9zcmMv aW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCkBAIC0yMiw3ICsyMiw4IEBAIHR5cGVkZWYgZW51bQog CUVWVF9ERExDb21tYW5kU3RhcnQsCiAJRVZUX0RETENvbW1hbmRFbmQsCiAJRVZUX1NRTERyb3As Ci0JRVZUX1RhYmxlUmV3cml0ZQorCUVWVF9UYWJsZVJld3JpdGUsCisJRVZUX1RhYmxlSW5pdFdy aXRlCiB9IEV2ZW50VHJpZ2dlckV2ZW50OwogCiB0eXBlZGVmIHN0cnVjdAotLSAKMS44LjMuMQoK --000000000000d5f46705eac248cb Content-Type: application/octet-stream; name="v27-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v27-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l948q1bl0 RnJvbSA4NTE2YjQwYTU4ZDJjZDk3MjFlNDA1ODgwZGIzZmRkYTkyYzk2MGVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMTEgT2N0IDIwMjIgMDg6NTk6NTggLTA0MDAKU3ViamVjdDogW1BBVENI IHYyNyAxLzRdIEZ1bmN0aW9ucyB0byBkZXBhcnNlIERETCBjb21tYW5kcy4KClRoaXMgcGF0Y2gg cHJvdmlkZXMgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4K bGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQg c3ByaW50Zi1saWtlCmV4cGFuc2lvbi4gVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0 byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCnRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5n IGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgoKTXVjaCBvZiB0aGUgaW5mb3JtYXRp b24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCmNhdGFsb2dz LCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRv IHJlbGlhYmx5CmNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBu b3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCmV0YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJz ZSBub2RlLgoKVGhpcyBwcm92aWRlcyBhIGJhc2UgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gb2Yg RERMIHN0YXRlbWVudHMuIEN1cnJlbnRseSwKdGhlIHBhdGNoIGhhcyBzdXBwb3J0IGZvcjoKCkNS RUFURS9BTFRFUi9EUk9QIFRBQkxFIC0tIE5vdGUgIzEsIE5vdGUgIzIKQ1JFQVRFL0FMVEVSL0RS T1AgU0VRVUVOQ0UKQ1JFQVRFL0FMVEVSL0RST1AgU0NIRU1BCkNSRUFURS9BTFRFUiBGVU5DVElP Ti9QUk9DRURVUkUKQ1JFQVRFL0FMVEVSIFRSSUdHRVIKQ1JFQVRFL0RST1AgSU5ERVgKQ1JFQVRF L0RST1AgT1BFUkFUT1IgW0NMQVNTL0ZBTUlMWV0KQ1JFQVRFL0FMVEVSL0RST1AgQ0FTVApDUkVB VEUvQUxURVIvRFJPUCBET01BSU4KQ1JFQVRFL0FMVEVSL0RST1AgVFlQRQpDUkVBVEUvQUxURVIv RFJPUCBDT05WRVJTSU9OCkNSRUFURS9BTFRFUi9EUk9QIFBPTElDWQpDUkVBVEUvQUxURVIvRFJP UCBFWFRFTlNJT04KQ1JFQVRFL0FMVEVSL0RST1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIKQ1JFQVRF L0FMVEVSL0RST1AgUlVMRQpDUkVBVEUvQUxURVIvRFJPUCBTRVJWRVIKQ1JFQVRFL0FMVEVSL0RS T1AgQ09MTEFUSU9OCkdSQU5UClJFVk9LRQpSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXCkNSRUFU RS9BTFRFUi9EUk9QIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04vUEFSU0VSL0RJQ1RJT05BUlkv VEVNUExBVEUKQ1JFQVRFL0RST1AgVFJBTlNGT1JNCkNSRUFURS9BTFRFUi9EUk9QIFVTRVIgTUFQ UElORwoKKE5vdGUgIzEpIE5vdGUgdGhhdCBzb21lIHJlY2VudGx5IGludHJvZHVjZWQgRERMcyhl LmcuIERETHMgcmVsYXRlZCB0bwpQQVJUSVRJT05FRCBUQUJMRSkgYXJlIHVuc3VwcG9ydGVkLiBX ZSBjYW4gZXh0ZW5kIGl0IGFzIHdlIG5lZWQgbW9yZQpmdW5jdGlvbmFsaXR5IGZvciBEREwgcmVw bGljYXRpb24uCgooTm90ZSAjMikgTm90ZSB0aGF0LCBmb3IgQVRUQUNIL0RFVEFDSCBQQVJUSVRJ T04sIHdlIGhhdmVuJ3QgYWRkZWQgZXh0cmEgbG9naWMgb24Kc3Vic2NyaWJlciB0byBoYW5kbGUg dGhlIGNhc2Ugd2hlcmUgdGhlIHRhYmxlIG9uIHB1Ymxpc2hlciBpcyBhIFBBUlRJVElPTkVEClRB QkxFIHdoaWxlIHRoZSB0YXJnZXQgdGFibGUgb24gc3ViY3JpYmVyIHNpZGUgaXMgTk9STUFMIHRh YmxlLiBXZSB3aWxsCnJlc2VhcmNoIHRoaXMgbW9yZSBhbmQgaW1wcm92ZSB0aGlzIGxhdGVyLgoK KE5vdGUgIzMpIFJlbW92ZWQgYW4gdW5kZXNpcmFibGUgJ29uJyBmcm9tIHRoZSBpZGVudGl0eSBz dHJpbmcgZm9yIFRSQU5TRk9STQppbiBnZXRPYmplY3RJZGVudGl0eVBhcnRzLiBUaGlzIGlzIG5l ZWRlZCB0byBtYWtlIGRlcGFyc2Ugb2YgRFJPUApUUkFOU0ZPUk0gY29tbWFuZCB3b3JrIHNpbmNl ICdvbicgaXMgbm90IHByZXNlbnQgaW4gdGhlIGN1cnJlbnQKRFJPUCBUUkFOU0ZPUk0gc3ludGF4 LiBGb3IgZXhhbXBsZSwgdGhlIGNvcnJlY3Qgc3ludGF4IGlzCmRyb3AgdHJhbnNmb3JtIHRyZiBm b3IgaW50IGxhbmd1YWdlIHNxbDsKaW5zdGVhZCBvZgpkcm9wIHRyYW5zZm9ybSB0cmYgZm9yIGlu dCBvbiBsYW5ndWFnZSBzcWw7Ci0tLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYyAgICAg ICAgICAgICAgICAgfCAgICA0ICsKIHNyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5j ICAgICAgICAgIHwgICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgICAgICAg ICAgICAgICAgfCAgICAyICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYyAg ICAgICAgIHwgICAgOSArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyAgICAg ICAgICAgfCA4NDU5ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfanNvbi5jICAgICAgICAgICAgICB8ICA3NjMgKysrCiBzcmMvYmFja2VuZC9jb21t YW5kcy9tZXNvbi5idWlsZCAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL2JhY2tlbmQvY29tbWFu ZHMvc2VxdWVuY2UuYyAgICAgICAgICAgICAgfCAgIDMzICsKIHNyYy9iYWNrZW5kL3Rjb3AvdXRp bGl0eS5jICAgICAgICAgICAgICAgICAgIHwgICAgMyArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2Zvcm1hdF90eXBlLmMgICAgICAgICAgfCAgICAzICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQv cmVncHJvYy5jICAgICAgICAgICAgICB8ICAgNTIgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1 bGV1dGlscy5jICAgICAgICAgICAgfCAgMjIwICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0ICAgICAgICAgICAgICB8ICAgIDYgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvY29sbGF0 aW9uY21kcy5oICAgICAgICAgfCAgICAzICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5j ZS5oICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5o ICAgICAgICAgICAgICAgfCAgIDIzICsKIHNyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5 LmggICAgICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwu aCAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCAgICAgICAg ICAgICAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oICAgICAgICAg ICAgICAgIHwgICAxNiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNz Lm91dCB8ICAgIDIgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAg ICAgIHwgICAgNCArCiAyMiBmaWxlcyBjaGFuZ2VkLCA5NTM2IGluc2VydGlvbnMoKyksIDc1IGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNzU1IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9k ZXBhcnNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNv bi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYyBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvYWNsY2hrLmMKaW5kZXggYWE1YTJlZC4uN2RjMTkwZCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9hY2xjaGsuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5j CkBAIC0zODUsNyArMzg1LDExIEBAIEV4ZWN1dGVHcmFudFN0bXQoR3JhbnRTdG10ICpzdG10KQog CQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQ T1JURUQpLAogCQkJCQkgZXJybXNnKCJncmFudG9yIG11c3QgYmUgY3VycmVudCB1c2VyIikpKTsK KworCQlpc3RtdC5ncmFudG9yX3VpZCA9IGdyYW50b3I7CiAJfQorCWVsc2UKKwkJaXN0bXQuZ3Jh bnRvcl91aWQgPSBJbnZhbGlkT2lkOwogCiAJLyoKIAkgKiBUdXJuIHRoZSByZWd1bGFyIEdyYW50 U3RtdCBpbnRvIHRoZSBJbnRlcm5hbEdyYW50IGZvcm0uCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRk cmVzcy5jCmluZGV4IDI4NGNhNTUuLjA4NGFjZWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvb2JqZWN0YWRkcmVzcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRk cmVzcy5jCkBAIC02MDAxLDcgKzYwMDEsNyBAQCBnZXRPYmplY3RJZGVudGl0eVBhcnRzKGNvbnN0 IE9iamVjdEFkZHJlc3MgKm9iamVjdCwKIAkJCQl0cmFuc2Zvcm1UeXBlID0gZm9ybWF0X3R5cGVf YmVfcXVhbGlmaWVkKHRyYW5zZm9ybS0+dHJmdHlwZSk7CiAJCQkJdHJhbnNmb3JtTGFuZyA9IGdl dF9sYW5ndWFnZV9uYW1lKHRyYW5zZm9ybS0+dHJmbGFuZywgZmFsc2UpOwogCi0JCQkJYXBwZW5k U3RyaW5nSW5mbygmYnVmZmVyLCAiZm9yICVzIG9uIGxhbmd1YWdlICVzIiwKKwkJCQlhcHBlbmRT dHJpbmdJbmZvKCZidWZmZXIsICJmb3IgJXMgbGFuZ3VhZ2UgJXMiLAogCQkJCQkJCQkgdHJhbnNm b3JtVHlwZSwKIAkJCQkJCQkJIHRyYW5zZm9ybUxhbmcpOwogCQkJCWlmIChvYmpuYW1lKQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9NYWtlZmlsZQppbmRleCA0OGY3MzQ4Li4xNzFkZmIyIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmls ZQpAQCAtMjksNiArMjksOCBAQCBPQkpTID0gXAogCWNvcHl0by5vIFwKIAljcmVhdGVhcy5vIFwK IAlkYmNvbW1hbmRzLm8gXAorCWRkbF9kZXBhcnNlLm8gXAorCWRkbF9qc29uLm8gXAogCWRlZmlu ZS5vIFwKIAlkaXNjYXJkLm8gXAogCWRyb3BjbWRzLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0 aW9uY21kcy5jCmluZGV4IGZjZmMwMmQuLmJiMjFjY2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xs YXRpb25jbWRzLmMKQEAgLTUwLDcgKzUwLDggQEAgdHlwZWRlZiBzdHJ1Y3QKICAqIENSRUFURSBD T0xMQVRJT04KICAqLwogT2JqZWN0QWRkcmVzcwotRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUg KnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZfbm90X2V4aXN0 cykKK0RlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKm5hbWVzLCBMaXN0 ICpwYXJhbWV0ZXJzLAorCQkJCSBib29sIGlmX25vdF9leGlzdHMsIE9iamVjdEFkZHJlc3MgKmZy b21fY29sbGlkKQogewogCWNoYXIJICAgKmNvbGxOYW1lOwogCU9pZAkJCWNvbGxOYW1lc3BhY2U7 CkBAIC0xMzcsNiArMTM4LDEyIEBAIERlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUs IExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLCBib29sIGlmX25vdF9lCiAJCWlmICghSGVh cFR1cGxlSXNWYWxpZCh0cCkpCiAJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgY29sbGF0aW9uICV1IiwgY29sbGlkKTsKIAorCQkvKiBtYWtlIGZyb20gZXhpc3RpbmcgY29s bGF0aW9uaWQgYXZhaWxhYmxlIHRvIGNhbGxlcnMgKi8KKwkJaWYgKGZyb21fY29sbGlkICYmIE9p ZElzVmFsaWQoY29sbGlkKSkKKwkJCQlPYmplY3RBZGRyZXNzU2V0KCpmcm9tX2NvbGxpZCwKKwkJ CQkJCQkJIENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCSBjb2xsaWQpOworCiAJCWNvbGxw cm92aWRlciA9ICgoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0cCkpLT5jb2xscHJvdmlk ZXI7CiAJCWNvbGxpc2RldGVybWluaXN0aWMgPSAoKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRTVFJV Q1QodHApKS0+Y29sbGlzZGV0ZXJtaW5pc3RpYzsKIAkJY29sbGVuY29kaW5nID0gKChGb3JtX3Bn X2NvbGxhdGlvbikgR0VUU1RSVUNUKHRwKSktPmNvbGxlbmNvZGluZzsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9k ZGxfZGVwYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3YTJhNDgK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCkBA IC0wLDAgKzEsODQ1OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2RlcGFyc2Uu YworICoJICBGdW5jdGlvbnMgdG8gY29udmVydCB1dGlsaXR5IGNvbW1hbmRzIHRvIG1hY2hpbmUt cGFyc2VhYmxlCisgKgkgIHJlcHJlc2VudGF0aW9uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2Yg Q2FsaWZvcm5pYQorICoKKyAqIE5PVEVTCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92 aWRlIEpTT04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5kcywgd2hpY2ggY2FuCisgKiBs YXRlciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBz cHJpbnRmLWxpa2UKKyAqIGV4cGFuc2lvbi4gIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50ZW5k ZWQgdG8gYWxsb3cgZm9yIG1hY2hpbmUtZWRpdGluZyBvZgorICogdGhlIGNvbW1hbmRzLCBieSBy ZXBsYWNpbmcgY2VydGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCisgKgorICogTXVjaCBv ZiB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20g c3lzdGVtCisgKiBjYXRhbG9ncywgbm90IGZyb20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMg aXQgaXMgaW1wb3NzaWJsZSB0byByZWxpYWJseQorICogY29uc3RydWN0IGEgZnVsbHktc3BlY2lm aWVkIGNvbW1hbmQgKGkuZS4gb25lIG5vdCBkZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKKyAqIGV0 YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJzZSBub2RlLgorICoKKyAqIElERU5USUZJQ0FUSU9O CisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAidGNvcC9kZGxf ZGVwYXJzZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy90 YWJsZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cv bmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfYXR0cmlidXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX2Nhc3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2Nv bnN0cmFpbnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnZlcnNpb24uaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX2RlcGVuZC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZXh0ZW5zaW9uLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX2RhdGFfd3JhcHBlci5oIgorI2luY2x1ZGUg ImNhdGFsb2cvcGdfZm9yZWlnbl9zZXJ2ZXIuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVy aXRzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYW5ndWFnZS5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfbGFyZ2VvYmplY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3Bl cmF0b3IuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wZmFtaWx5LmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19wb2xpY3kuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX3JhbmdlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19yZXdyaXRlLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJh bnNmb3JtLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c19jb25maWcuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3RzX2RpY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX3BhcnNlci5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfdGVtcGxhdGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X3R5cGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3VzZXJfbWFwcGluZy5oIgorI2luY2x1ZGUg ImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNlLmgiCisjaW5j bHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgImZvcmVpZ24vZm9yZWlnbi5o IgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJsaWIvaWxpc3QuaCIKKyNpbmNsdWRl ICJtYi9wZ193Y2hhci5oIgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUg Im5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNs dWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFu ZGxlci5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZm1n cm9pZHMuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5o IgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxz LmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMvcnVsZXV0aWxzLmgi CisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKworLyogRXN0aW1hdGVkIGxlbmd0aCBvZiB0 aGUgZ2VuZXJhdGVkIGpzb25iIHN0cmluZyAqLworI2RlZmluZSBKU09OQl9FU1RJTUFURURfTEVO IDEyOAorCisvKgorICogQmVmb3JlIHRoZXkgYXJlIHR1cm5lZCBpbnRvIEpTT05CIHJlcHJlc2Vu dGF0aW9uLCBlYWNoIGNvbW1hbmQgaXMKKyAqIHJlcHJlc2VudGVkIGFzIGFuIG9iamVjdCB0cmVl LCB1c2luZyB0aGUgc3RydWN0cyBiZWxvdy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJT2JqVHlw ZU51bGwsCisJT2JqVHlwZUJvb2wsCisJT2JqVHlwZVN0cmluZywKKwlPYmpUeXBlQXJyYXksCisJ T2JqVHlwZUludGVnZXIsCisJT2JqVHlwZUZsb2F0LAorCU9ialR5cGVPYmplY3QKK30gT2JqVHlw ZTsKKwordHlwZWRlZiBzdHJ1Y3QgT2JqVHJlZQoreworCXNsaXN0X2hlYWQJcGFyYW1zOworCWlu dAkJCW51bVBhcmFtczsKKwlTdHJpbmdJbmZvCWZtdGluZm87CisJYm9vbAkJcHJlc2VudDsKK30g T2JqVHJlZTsKKwordHlwZWRlZiBzdHJ1Y3QgT2JqRWxlbQoreworCWNoYXIJICAgKm5hbWU7CisJ T2JqVHlwZQkJb2JqdHlwZTsKKworCXVuaW9uCisJeworCQlib29sCQlib29sZWFuOworCQljaGFy CSAgICpzdHJpbmc7CisJCWludDY0CQlpbnRlZ2VyOworCQlmbG9hdDgJCWZsdDsKKwkJT2JqVHJl ZQkgICAqb2JqZWN0OworCQlMaXN0CSAgICphcnJheTsKKwl9IHZhbHVlOworCXNsaXN0X25vZGUJ bm9kZTsKK30gT2JqRWxlbTsKKworYm9vbCB2ZXJib3NlID0gdHJ1ZTsKKworc3RhdGljIHZvaWQg YXBwZW5kX2FycmF5X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBMaXN0ICphcnJh eSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfYm9vbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAq bmFtZSwgYm9vbCB2YWx1ZSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfZmxvYXRfb2JqZWN0KE9ialRy ZWUgKnRyZWUsIGNoYXIgKm5hbWUsIGZsb2F0OCB2YWx1ZSk7CitzdGF0aWMgdm9pZCBhcHBlbmRf bnVsbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSk7CitzdGF0aWMgdm9pZCBhcHBl bmRfb2JqZWN0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBPYmpUcmVlICp2YWx1 ZSk7CitzdGF0aWMgY2hhciAqYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKE9ialRyZWUg KnRyZWUsIGNoYXIgKnN1Yl9mbXQpOworc3RhdGljIHZvaWQgYXBwZW5kX3ByZW1hZGVfb2JqZWN0 KE9ialRyZWUgKnRyZWUsIE9iakVsZW0gKmVsZW0pOworc3RhdGljIHZvaWQgYXBwZW5kX3N0cmlu Z19vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOworc3RhdGlj IHZvaWQgZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAor CQkJCQkJCQkgT2lkICpuc3BpZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAor CQkJCQkJCQkgYm9vbCAqdHlwYXJyYXkpOworc3RhdGljIExpc3QgKkZ1bmN0aW9uR2V0RGVmYXVs dHModGV4dCAqcHJvYXJnZGVmYXVsdHMpOworc3RhdGljIE9iakVsZW0gKm5ld19vYmplY3QoT2Jq VHlwZSB0eXBlLCBjaGFyICpuYW1lKTsKK3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoT2lkIGNsYXNzSWQsIE9pZCBvYmplY3RJZCk7CitzdGF0aWMgT2JqVHJlZSAq bmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKFJvbGVTcGVjICpzcGVjKTsKK3N0YXRpYyBPYmpFbGVt ICpuZXdfb2JqZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgT2JqVHJlZSAqbmV3 X29ianRyZWVfVkEoY2hhciAqZm10LCBpbnQgbnVtb2JqcywuLi4pOworc3RhdGljIE9iakVsZW0g Km5ld19zdHJpbmdfb2JqZWN0KGNoYXIgKnZhbHVlKTsKK3N0YXRpYyBKc29uYlZhbHVlICpvYmp0 cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKTsK K3N0YXRpYyB2b2lkIHBnX2dldF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJ CQkJCQkJCSBjaGFyICoqaW5kZXhfYW0sCisJCQkJCQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJ CQkJCQkJCQkgY2hhciAqKnJlbG9wdGlvbnMsCisJCQkJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2Us CisJCQkJCQkJCQkgY2hhciAqKndoZXJlQ2xhdXNlKTsKK3N0YXRpYyBjaGFyICpSZWxhdGlvbkdl dENvbHVtbkRlZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG5vLAorCQkJCQkJCQkJ ICBMaXN0ICpkcGNvbnRleHQsIExpc3QgKipleHBycyk7CitzdGF0aWMgY29uc3QgY2hhciAqc3Ry aW5naWZ5X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlKTsKKworc3RhdGljIE9ialRyZWUgKmRl cGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIGJvb2wg Y29tcG9zaXRlLAorCQkJCQkJCQkgIENvbHVtbkRlZiAqY29sZGVmLCBib29sIGlzX2FsdGVyLCBM aXN0ICoqZXhwcnMpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoT2lk IHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5LCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBPYmpU cmVlICpkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKK3N0 YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfQ29sbGF0aW9uKE9pZCBvYmplY3RJZCwg RGVmaW5lU3RtdCAqZGVmaW5lLAorCQkJCQkJCQkJCQkgT2JqZWN0QWRkcmVzcyBmcm9tQ29sbGlk KTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0b3IoT2lkIG9iamVj dElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5l U3RtdF9UeXBlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpU cmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNDb25maWcoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10 ICpkZWZpbmUsIE9iamVjdEFkZHJlc3MgY29waWVkKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNl X0RlZmluZVN0bXRfVFNQYXJzZXIoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOwor c3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25hcnkoT2lkIG9iamVj dElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5l U3RtdF9UU1RlbXBsYXRlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKKworc3Rh dGljIE9ialRyZWUgKmRlcGFyc2VfRGVmRWxlbShEZWZFbGVtICplbGVtLCBib29sIGlzX3Jlc2V0 KTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0Z1bmN0aW9uU2V0KFZhcmlhYmxlU2V0S2luZCBr aW5kLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9P bkNvbW1pdENsYXVzZShPbkNvbW1pdEFjdGlvbiBvcHRpb24pOworc3RhdGljIE9ialRyZWUgKmRl cGFyc2VfUmVsU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpOworCitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0NhY2hlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19z ZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxl bSAqZGVwYXJzZV9TZXFfQ3ljbGUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNl cWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNl X1NlcV9JbmNyZW1lbnRCeShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0 YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2Vx X01pbnZhbHVlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29s IGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfTWF4dmFs dWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJf dGFibGUpOworc3RhdGljIE9iakVsZW0gKmRlcGFyc2VfU2VxX093bmVkQnkoT2JqVHJlZSAqcGFy ZW50LCBPaWQgc2VxdWVuY2VJZCwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9i akVsZW0gKmRlcGFyc2VfU2VxX1Jlc3RhcnQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVl bmNlX2RhdGEgc2VxZGF0YSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX1N0 YXJ0d2l0aChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBh bHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9TdG9yYWdl KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBP YmpFbGVtICpkZXBhcnNlX1R5cGVfUmVjZWl2ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlw ZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1NlbmQoT2Jq VHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKmRlcGFyc2VfVHlwZV9UeXBtb2RfSW4oT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUg dHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9UeXBtb2RfT3V0 KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBP YmpFbGVtICpkZXBhcnNlX1R5cGVfQW5hbHl6ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlw ZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1N1YnNjcmlw dChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKKworc3RhdGljIExpc3Qg KmRlcGFyc2VfSW5oUmVsYXRpb25zKE9pZCBvYmplY3RJZCk7CitzdGF0aWMgTGlzdCAqZGVwYXJz ZV9UYWJsZUVsZW1lbnRzKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBM aXN0ICpkcGNvbnRleHQsCisJCQkJCQkJCSAgIGJvb2wgdHlwZWQsIGJvb2wgY29tcG9zaXRlKTsK KworLyoKKyAqIEFkZCBjb21tb24gY2xhdXNlcyB0byBDcmVhdGVQb2xpY3kgb3IgQWx0ZXJQb2xp Y3kgZGVwYXJzZSBvYmplY3RzCisgKi8KK3N0YXRpYyB2b2lkCithZGRfcG9saWN5X2NsYXVzZXMo T2JqVHJlZSAqcG9saWN5U3RtdCwgT2lkIHBvbGljeU9pZCwgTGlzdCAqcm9sZXMsCisJCQkJICAg Ym9vbCBkb19xdWFsLCBib29sIGRvX3dpdGhfY2hlY2spCit7CisJUmVsYXRpb24JcG9sUmVsID0g dGFibGVfb3BlbihQb2xpY3lSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCUhlYXBUdXBs ZQlwb2xUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBvbFJlbCwgQW51bV9wZ19wb2xp Y3lfb2lkLCBwb2xpY3lPaWQpOworCUZvcm1fcGdfcG9saWN5IHBvbEZvcm07CisKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQocG9sVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIHBvbGljeSAldSIsIHBvbGljeU9pZCk7CisKKwlwb2xGb3JtID0gKEZvcm1fcGdfcG9s aWN5KSBHRVRTVFJVQ1QocG9sVHVwKTsKKworCS8qIGFkZCB0aGUgIk9OIHRhYmxlIiBjbGF1c2Ug Ki8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChwb2xpY3lTdG10LCAiT04gJXt0YWJsZX1EIiwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCSBwb2xGb3JtLT5wb2xyZWxpZCkpOworCisJLyoKKwkgKiBBZGQgdGhlICJUTyBy b2xlIiBjbGF1c2UsIGlmIGFueS4gIEluIHRoZSBDUkVBVEUgY2FzZSwgaXQgYWx3YXlzCisJICog Y29udGFpbnMgYXQgbGVhc3QgUFVCTElDLCBidXQgaW4gdGhlIEFMVEVSIGNhc2UgaXQgbWlnaHQg YmUgZW1wdHkuCisJICovCisJaWYgKHJvbGVzKQorCXsKKwkJTGlzdCAgICpsaXN0ID0gTklMOwor CQlMaXN0Q2VsbCAqY2VsbDsKKworCQlmb3JlYWNoIChjZWxsLCByb2xlcykKKwkJeworCQkJUm9s ZVNwZWMgICAqc3BlYyA9IChSb2xlU3BlYyAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWxpc3QgPSBs YXBwZW5kKGxpc3QsCisJCQkJCQkgICBuZXdfb2JqZWN0X29iamVjdChuZXdfb2JqdHJlZV9mb3Jf cm9sZXNwZWMoc3BlYykpKTsKKwkJfQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHBvbGljeVN0bXQs IlRPICV7cm9sZTosIH1SIiwgbGlzdCk7CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZF9ib29sX29i amVjdChwb2xpY3lTdG10LCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisKKwkvKiBhZGQgdGhlIFVT SU5HIGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRvX3F1YWwpCisJeworCQlEYXR1bQlkZXBhcnNl ZDsKKwkJRGF0dW0Jc3RvcmVkZXhwcjsKKwkJYm9vbAlpc251bGw7CisKKwkJc3RvcmVkZXhwciA9 IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1fcGdfcG9saWN5X3BvbHF1YWwsCisJCQkJCQkJCSAg UmVsYXRpb25HZXREZXNjcihwb2xSZWwpLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVs b2coRVJST1IsICJpbnZhbGlkIE5VTEwgcG9scXVhbCBleHByZXNzaW9uIGluIHBvbGljeSAldSIs IHBvbGljeU9pZCk7CisJCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhw ciwgc3RvcmVkZXhwciwgcG9sRm9ybS0+cG9scmVsaWQpOworCQlhcHBlbmRfc3RyaW5nX29iamVj dChwb2xpY3lTdG10LCAiVVNJTkcgKCV7ZXhwcmVzc2lvbn1zKSIsCisJCQkJCQkJIFRleHREYXR1 bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3Qo cG9saWN5U3RtdCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwkvKiBhZGQgdGhlIFdJVEggQ0hFQ0sg Y2xhdXNlLCBpZiBhbnkgKi8KKwlpZiAoZG9fd2l0aF9jaGVjaykKKwl7CisJCURhdHVtCWRlcGFy c2VkOworCQlEYXR1bQlzdG9yZWRleHByOworCQlib29sCWlzbnVsbDsKKworCQlzdG9yZWRleHBy ID0gaGVhcF9nZXRhdHRyKHBvbFR1cCwgQW51bV9wZ19wb2xpY3lfcG9sd2l0aGNoZWNrLAorCQkJ CQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocG9sUmVsKSwgJmlzbnVsbCk7CisJCWlmIChpc251bGwp CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxMIHBvbHdpdGhjaGVjayBleHByZXNzaW9uIGlu IHBvbGljeSAldSIsIHBvbGljeU9pZCk7CisJCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxs MihwZ19nZXRfZXhwciwgc3RvcmVkZXhwciwgcG9sRm9ybS0+cG9scmVsaWQpOworCQlhcHBlbmRf c3RyaW5nX29iamVjdChwb2xpY3lTdG10LCAiV0lUSCBDSEVDSyAoJXtleHByZXNzaW9ufXMpIiwK KwkJCQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCX0KKwllbHNlCisJCWFw cGVuZF9ib29sX29iamVjdChwb2xpY3lTdG10LCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJlbGF0 aW9uX2Nsb3NlKHBvbFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKK30KKworLyogQXBwZW5kIGFuIGFy cmF5IHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfYXJyYXlfb2Jq ZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIExpc3QgKmFycmF5KQoreworCU9iakVs ZW0JKnBhcmFtOworCWNoYXIgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJ aWYgKGxpc3RfbGVuZ3RoKGFycmF5KSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoIXZlcmJvc2Up CisJeworCQlMaXN0Q2VsbCAqbGM7CisKKwkJLyogRXh0cmFjdCB0aGUgT2JqRWxlbXMgd2hvc2Ug cHJlc2VudCBmbGFnIGlzIHRydWUgKi8KKwkJZm9yZWFjaChsYywgYXJyYXkpCisJCXsKKwkJCU9i akVsZW0gKmVsZW0gPSAoT2JqRWxlbSAqKSBsZmlyc3QobGMpOworCisJCQlBc3NlcnQoZWxlbS0+ b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0IHx8CisJCQkJICAgZWxlbS0+b2JqdHlwZSA9PSBPYmpU eXBlU3RyaW5nKTsKKworCQkJaWYgKCFlbGVtLT52YWx1ZS5vYmplY3QtPnByZXNlbnQgJiYKKwkJ CQllbGVtLT5vYmp0eXBlID09IE9ialR5cGVPYmplY3QpCisJCQkJYXJyYXkgPSBmb3JlYWNoX2Rl bGV0ZV9jdXJyZW50KGFycmF5LCBsYyk7CisJCX0KKworCX0KKworCW9iamVjdF9uYW1lID0gYXBw ZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBu ZXdfb2JqZWN0KE9ialR5cGVBcnJheSwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5hcnJh eSA9IGFycmF5OworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8q IEFwcGVuZCBhIGJvb2xlYW4gcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2Fw cGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBib29sIHZhbHVl KQoreworCU9iakVsZW0gICpwYXJhbTsKKwljaGFyCSAqb2JqZWN0X25hbWUgPSBzdWJfZm10Owor CWJvb2wJICBpc19wcmVzZW50X2ZsYWcgPSBmYWxzZTsKKworCUFzc2VydChzdWJfZm10KTsKKwor CS8qIENoZWNrIGlmIHRoZSBwcmVzZW50IGlzIHBhcnQgb2YgdGhlIGZvcm1hdCBzdHJpbmcgYW5k IHN0b3JlIHRoZSBib29sZWFuIHZhbHVlKi8KKwlpZiAoc3RyY21wKHN1Yl9mbXQsICJwcmVzZW50 IikgPT0gMCkKKwl7CisJCWlzX3ByZXNlbnRfZmxhZyA9IHRydWU7CisJCXRyZWUtPnByZXNlbnQg PSB2YWx1ZTsKKwl9CisKKwlpZiAoIXZlcmJvc2UgJiYgIXRyZWUtPnByZXNlbnQpCisJCXJldHVy bjsKKworCWlmICghaXNfcHJlc2VudF9mbGFnKQorCQlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmpl Y3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVj dChPYmpUeXBlQm9vbCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5ib29sZWFuID0gdmFs dWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFw cGVuZCBhIGZsb2F0OCBwYXJhbWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBw ZW5kX2Zsb2F0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBmbG9hdDggdmFs dWUpCit7CisJT2JqRWxlbQkgICAqcGFyYW07CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlB c3NlcnQoc3ViX2ZtdCk7CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0 X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlRmxv YXQsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuZmx0ID0gdmFsdWU7CisJYXBwZW5kX3By ZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVuZCB0aGUgaW5wdXQg Zm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9m b3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJaW50CQkJCWxl bjsKKwljaGFyCQkgICAqZm10OworCisJaWYgKHRyZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0 dXJuOworCisJZm10ID0gdHJlZS0+Zm10aW5mby0+ZGF0YTsKKwlsZW4gPSB0cmVlLT5mbXRpbmZv LT5sZW47CisKKwkvKiBBZGQgYSBzZXBhcmF0b3IgaWYgbmVjZXNzYXJ5ICovCisJaWYgKGxlbiA+ IDAgJiYgZm10W2xlbiAtIDFdICE9ICcgJykKKwkJYXBwZW5kU3RyaW5nSW5mb1NwYWNlcyh0cmVl LT5mbXRpbmZvLCAxKTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcodHJlZS0+Zm10aW5mbywg c3ViX2ZtdCk7Cit9CisKKy8qIEFwcGVuZCBhIE5VTEwgb2JqZWN0IHRvIGEgdHJlZSAqLworc3Rh dGljIHZvaWQKK2FwcGVuZF9udWxsX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10 KQoreworCWNoYXIgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKCF2 ZXJib3NlKQorCQlyZXR1cm47CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9y bWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVl LCBuZXdfb2JqZWN0KE9ialR5cGVOdWxsLCBvYmplY3RfbmFtZSkpOworfQorCisvKiBBcHBlbmQg YW4gb2JqZWN0IHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfb2Jq ZWN0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBPYmpUcmVlICp2YWx1ZSkK K3sKKwlPYmpFbGVtCSpwYXJhbTsKKwljaGFyICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1 Yl9mbXQpOworCisJaWYgKCF2ZXJib3NlICYmICF2YWx1ZS0+cHJlc2VudCkKKwkJcmV0dXJuOwor CisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3Vi X2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZU9iamVjdCwgb2JqZWN0X25hbWUp OworCXBhcmFtLT52YWx1ZS5vYmplY3QgPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3Qo dHJlZSwgcGFyYW0pOworfQorCisvKgorICogUmV0dXJuIHRoZSBvYmplY3QgbmFtZSB3aGljaCBp cyBleHRyYWN0ZWQgZnJvbSB0aGUgaW5wdXQgIiole25hbWVbOi5dfSoiCisgKiBzdHlsZSBzdHJp bmcuIEFuZCBhcHBlbmQgdGhlIGlucHV0IGZvcm1hdCBzdHJpbmcgdG8gdGhlIE9ialRyZWUuCisg Ki8KK3N0YXRpYyBjaGFyICoKK2FwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyhPYmpUcmVl ICp0cmVlLCBjaGFyICpzdWJfZm10KQoreworCVN0cmluZ0luZm9EYXRhCW9iamVjdF9uYW1lOwor CWNvbnN0IGNoYXIJICAgKmVuZF9wdHI7CisJY29uc3QgY2hhcgkgICAqY3A7CisJYm9vbAkJCXN0 YXJ0X2NvcHkgPSBmYWxzZTsKKworCWlmIChzdWJfZm10ID09IE5VTEwgfHwgdHJlZS0+Zm10aW5m byA9PSBOVUxMKQorCQlyZXR1cm4gc3ViX2ZtdDsKKworCWluaXRTdHJpbmdJbmZvKCZvYmplY3Rf bmFtZSk7CisJZW5kX3B0ciA9IHN1Yl9mbXQgKyBzdHJsZW4oc3ViX2ZtdCk7CisKKwlmb3IgKGNw ID0gc3ViX2ZtdDsgY3AgPCBlbmRfcHRyOyBjcCsrKQorCXsKKwkJaWYgKCpjcCA9PSAneycpCisJ CXsKKwkJCXN0YXJ0X2NvcHkgPSB0cnVlOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXN0 YXJ0X2NvcHkpCisJCQljb250aW51ZTsKKworCQlpZiAoKmNwID09ICc6JyB8fCAqY3AgPT0gJ30n KQorCQkJYnJlYWs7CisKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmb2JqZWN0X25hbWUs ICpjcCk7CisJfQorCisJaWYgKG9iamVjdF9uYW1lLmxlbiA9PSAwKQorCQllbG9nKEVSUk9SLCAi b2JqZWN0IG5hbWUgbm90IGZvdW5kIik7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0cmVlLCBz dWJfZm10KTsKKworCXJldHVybiBvYmplY3RfbmFtZS5kYXRhOworfQorCisvKiBBcHBlbmQgYSBw cmVhbGxvY2F0ZWQgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIGlubGluZSB2b2lkCith cHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxlbSAqZWxlbSkKK3sKKwlz bGlzdF9wdXNoX2hlYWQoJnRyZWUtPnBhcmFtcywgJmVsZW0tPm5vZGUpOworCXRyZWUtPm51bVBh cmFtcysrOworfQorCisvKiBBcHBlbmQgYSBzdHJpbmcgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLwor c3RhdGljIHZvaWQKK2FwcGVuZF9zdHJpbmdfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1 Yl9mbXQsIGNoYXIgKnZhbHVlKQoreworCU9iakVsZW0JICAgKnBhcmFtOworCWNoYXIJICAgKm9i amVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKCF2ZXJib3NlICYmICh2YWx1 ZSA9PSBOVUxMIHx8IHZhbHVlWzBdID09ICdcMCcpKQorCQlyZXR1cm47CisKKwlvYmplY3RfbmFt ZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBh cmFtID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5nLCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZh bHVlLnN0cmluZyA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7 Cit9CisKKy8qCisgKiBTaW1pbGFyIHRvIGZvcm1hdF90eXBlX2V4dGVuZGVkLCBleGNlcHQgd2Ug cmV0dXJuIGVhY2ggYml0IG9mIGluZm9ybWF0aW9uCisgKiBzZXBhcmF0ZWx5OgorICoKKyAqIC0g bnNwaWQgaXMgdGhlIHNjaGVtYSBPSUQuICBGb3IgY2VydGFpbiBTUUwtc3RhbmRhcmQgdHlwZXMg d2hpY2ggaGF2ZSB3ZWlyZAorICogICB0eXBtb2QgcnVsZXMsIHdlIHJldHVybiBJbnZhbGlkT2lk OyBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gbm90IHNjaGVtYS0KKyAqICAgcXVhbGlmeSB0aGUgbmFt ZSBub3IgYWRkIHF1b3RlcyB0byB0aGUgdHlwZSBuYW1lIGluIHRoaXMgY2FzZS4KKyAqCisgKiAt IHR5cG5hbWUgaXMgc2V0IHRvIHRoZSB0eXBlIG5hbWUsIHdpdGhvdXQgcXVvdGVzCisgKgorICog LSB0eXBlbW9kc3RyIGlzIHNldCB0byB0aGUgdHlwZW1vZCwgaWYgYW55LCBhcyBhIHN0cmluZyB3 aXRoIHBhcmVucworICoKKyAqIC0gdHlwYXJyYXkgaW5kaWNhdGVzIHdoZXRoZXIgW11zIG11c3Qg YmUgYWRkZWQKKyAqCisgKiBXZSBkb24ndCB0cnkgdG8gZGVjb2RlIHR5cGUgbmFtZXMgdG8gdGhl aXIgc3RhbmRhcmQtbWFuZGF0ZWQgbmFtZXMsIGV4Y2VwdAorICogaW4gdGhlIGNhc2VzIG9mIHR5 cGVzIHdpdGggdW51c3VhbCB0eXBtb2QgcnVsZXMuCisgKi8KK3N0YXRpYyB2b2lkCitmb3JtYXRf dHlwZV9kZXRhaWxlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCisJCQkJCSBPaWQgKm5z cGlkLCBjaGFyICoqdHlwbmFtZSwgY2hhciAqKnR5cGVtb2RzdHIsCisJCQkJCSBib29sICp0eXBh cnJheSkKK3sKKwlIZWFwVHVwbGUJCXR1cGxlOworCUZvcm1fcGdfdHlwZQl0eXBlZm9ybTsKKwlP aWQJCQkJYXJyYXlfYmFzZV90eXBlOworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9J RCwgT2JqZWN0SWRHZXREYXR1bSh0eXBlX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0 dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlICV1Iiwg dHlwZV9vaWQpOworCisJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUp OworCisJLyoKKwkgKiBDaGVjayBpZiBpdCdzIGEgcmVndWxhciAodmFyaWFibGUgbGVuZ3RoKSBh cnJheSB0eXBlLiAgQXMgYWJvdmUsCisJICogZml4ZWQtbGVuZ3RoIGFycmF5IHR5cGVzIHN1Y2gg YXMgIm5hbWUiIHNob3VsZG4ndCBnZXQgZGVjb25zdHJ1Y3RlZC4KKwkgKi8KKwlhcnJheV9iYXNl X3R5cGUgPSB0eXBlZm9ybS0+dHlwZWxlbTsKKworCSp0eXBhcnJheSA9IChJc1RydWVBcnJheVR5 cGUodHlwZWZvcm0pICYmIHR5cGVmb3JtLT50eXBzdG9yYWdlICE9IFRZUFNUT1JBR0VfUExBSU4p OworCisJaWYgKCp0eXBhcnJheSkKKwl7CisJCS8qIFN3aXRjaCBvdXIgYXR0ZW50aW9uIHRvIHRo ZSBhcnJheSBlbGVtZW50IHR5cGUgKi8KKwkJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKwkJdHVw bGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShhcnJheV9iYXNl X3R5cGUpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKKwkJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlICV1IiwgdHlwZV9vaWQpOworCisJCXR5cGVm b3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR1cGxlKTsKKwkJdHlwZV9vaWQgPSBhcnJh eV9iYXNlX3R5cGU7CisJfQorCisJLyoKKwkgKiBTcGVjaWFsLWNhc2UgY3JvY2sgZm9yIHR5cGVz IHdpdGggc3RyYW5nZSB0eXBtb2QgcnVsZXMgd2hlcmUgd2UgcHV0CisJICogdHlwbW9kIGF0IHRo ZSBtaWRkbGUgb2YgbmFtZShlLmcuIFRJTUUoNikgd2l0aCB0aW1lIHpvbmUgKS4gV2UgY2Fubm90 CisJICogc2NoZW1hLXF1YWxpZnkgbm9yIGFkZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0 aGVzZSBjYXNlcy4KKwkgKi8KKwlpZiAodHlwZV9vaWQgPT0gSU5URVJWQUxPSUQgfHwKKwkJdHlw ZV9vaWQgPT0gVElNRVNUQU1QT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVTVEFNUFRaT0lEIHx8 CisJCXR5cGVfb2lkID09IFRJTUVPSUQgfHwKKwkJdHlwZV9vaWQgPT0gVElNRVRaT0lEKQorCXsK KwkJc3dpdGNoICh0eXBlX29pZCkKKwkJeworCQkJY2FzZSBJTlRFUlZBTE9JRDoKKwkJCQkqdHlw bmFtZSA9IHBzdHJkdXAoIklOVEVSVkFMIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRJTUVTVEFN UFRaT0lEOgorCQkJCWlmICh0eXBlbW9kIDwgMCkKKwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJU SU1FU1RBTVAgV0lUSCBUSU1FIFpPTkUiKTsKKwkJCQllbHNlCisJCQkJCS8qIG90aGVyd2lzZSwg V0lUSCBUWiBpcyBhZGRlZCBieSB0eXBtb2QuICovCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgi VElNRVNUQU1QIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJCQkqdHlw bmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFNUCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBUSU1FVFpP SUQ6CisJCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUg V0lUSCBUSU1FIFpPTkUiKTsKKwkJCQllbHNlCisJCQkJCS8qIG90aGVyd2lzZSwgV0lUSCBUWiBp cyBhZGRlZCBieSB0eXBtb2RlLiAqLworCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsK KwkJCQlicmVhazsKKwkJCWNhc2UgVElNRU9JRDoKKwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJ TUUiKTsKKwkJCQlicmVhazsKKwkJfQorCQkqbnNwaWQgPSBJbnZhbGlkT2lkOworCX0KKwllbHNl CisJeworCQkvKgorCQkgKiBObyBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQgZm9y IG90aGVyIHR5cGVzLCBzbyBnZXQgdGhlIHR5cGUKKwkJICogbmFtZSBhbmQgc2NoZW1hIGRpcmVj dGx5IGZyb20gdGhlIGNhdGFsb2cuCisJCSAqLworCQkqbnNwaWQgPSB0eXBlZm9ybS0+dHlwbmFt ZXNwYWNlOworCQkqdHlwbmFtZSA9IHBzdHJkdXAoTmFtZVN0cih0eXBlZm9ybS0+dHlwbmFtZSkp OworCX0KKworCWlmICh0eXBlbW9kID49IDApCisJCSp0eXBlbW9kc3RyID0gcHJpbnRUeXBtb2Qo IiIsIHR5cGVtb2QsIHR5cGVmb3JtLT50eXBtb2RvdXQpOworCWVsc2UKKwkJKnR5cGVtb2RzdHIg PSBwc3RyZHVwKCIiKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7Cit9CisKKy8qCisgKiBS ZXR1cm4gdGhlIGRlZmF1bHRzIHZhbHVlcyBvZiBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiwgYXMg YSBsaXN0IG9mCisgKiBkZXBhcnNlZCBleHByZXNzaW9ucy4KKyAqLworc3RhdGljIExpc3QgKgor RnVuY3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0cykKK3sKKwlMaXN0ICAgKm5v ZGVkZWZzOworCUxpc3QgICAqc3RyZGVmcyA9IE5JTDsKKwlMaXN0Q2VsbCAqY2VsbDsKKworCW5v ZGVkZWZzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKHRleHRfdG9fY3N0cmluZyhwcm9hcmdkZWZh dWx0cykpOworCWlmICghSXNBKG5vZGVkZWZzLCBMaXN0KSkKKwkJZWxvZyhFUlJPUiwgInByb2Fy Z2RlZmF1bHRzIGlzIG5vdCBhIGxpc3QiKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZWRlZnMpCisJ eworCQlOb2RlICAgKm9uZWRlZiA9IGxmaXJzdChjZWxsKTsKKworCQlzdHJkZWZzID0gbGFwcGVu ZChzdHJkZWZzLCBkZXBhcnNlX2V4cHJlc3Npb24ob25lZGVmLCBOSUwsIGZhbHNlLCBmYWxzZSkp OworCX0KKworCXJldHVybiBzdHJkZWZzOworfQorCisvKgorICogUmV0dXJuIHRoZSBzdHJpbmcg cmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFJFTFBFUlNJU1RFTkNFIHZhbHVlLgorICovCitz dGF0aWMgY2hhciAqCitnZXRfcGVyc2lzdGVuY2Vfc3RyKGNoYXIgcGVyc2lzdGVuY2UpCit7CisJ c3dpdGNoIChwZXJzaXN0ZW5jZSkKKwl7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfVEVNUDoKKwkJ CXJldHVybiAiVEVNUE9SQVJZIjsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRDoKKwkJ CXJldHVybiAiVU5MT0dHRUQiOworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVDoKKwkJ CXJldHVybiAiIjsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHBlcnNp c3RlbmNlIG1hcmtpbmcgJWMiLCBwZXJzaXN0ZW5jZSk7CisJCQlyZXR1cm4gIiI7CQkvKiBtYWtl IGNvbXBpbGVyIGhhcHB5ICovCisJfQorfQorCisvKiBBbGxvY2F0ZSBhIG5ldyBwYXJhbWV0ZXIg Ki8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1l KQoreworCU9iakVsZW0JKnBhcmFtOworCisJcGFyYW0gPSBwYWxsb2MwKHNpemVvZihPYmpFbGVt KSk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCXBhcmFtLT5vYmp0eXBlID0gdHlwZTsKKworCXJl dHVybiBwYXJhbTsKK30KKworLyogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHBhcmFtZXRlciAqLwor c3RhdGljIE9iakVsZW0gKgorbmV3X29iamVjdF9vYmplY3QoT2JqVHJlZSAqdmFsdWUpCit7CisJ T2JqRWxlbQkqcGFyYW07CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZU9iamVjdCwgTlVM TCk7CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZhbHVlOworCisJcmV0dXJuIHBhcmFtOworfQor CisvKgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZh bHVlcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWUoY2hhciAqZm10KQorewor CU9ialRyZWUJKnBhcmFtczsKKworCXBhcmFtcyA9IHBhbGxvYzAoc2l6ZW9mKE9ialRyZWUpKTsK KwlwYXJhbXMtPnByZXNlbnQgPSB0cnVlOworCXNsaXN0X2luaXQoJnBhcmFtcy0+cGFyYW1zKTsK KworCWlmIChmbXQpCisJeworCQlwYXJhbXMtPmZtdGluZm8gPSBtYWtlU3RyaW5nSW5mbygpOwor CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHBhcmFtcy0+Zm10aW5mbywgZm10KTsKKwl9CisKKwly ZXR1cm4gcGFyYW1zOworfQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31E IGFuZCAle31PIGVsZW1lbnRzLgorICoKKyAqIEVsZW1lbnRzICJzY2hlbWFuYW1lIiBhbmQgIm9i am5hbWUiIGFyZSBzZXQuICBJZiB0aGUgbmFtZXNwYWNlIE9JRAorICogY29ycmVzcG9uZHMgdG8g YSB0ZW1wIHNjaGVtYSwgdGhhdCdzIHNldCB0byAicGdfdGVtcCIuCisgKgorICogVGhlIGRpZmZl cmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gZWxlbWVudCB0eXBlcyBpcyB3aGV0aGVyIHRoZSBvYmpu YW1lIHdpbGwKKyAqIGJlIHF1b3RlZCBhcyBhbiBpZGVudGlmaWVyIG9yIG5vdCwgd2hpY2ggaXMg bm90IHNvbWV0aGluZyB0aGF0IHRoaXMgcm91dGluZQorICogY29uY2VybnMgaXRzZWxmIHdpdGg7 IHRoYXQgd2lsbCBiZSB1cCB0byB0aGUgZXhwYW5kIGZ1bmN0aW9uLgorICovCitzdGF0aWMgT2Jq VHJlZSAqCituZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoT2lkIG5zcGlkLCBjaGFyICpuYW1lKQor eworCU9ialRyZWUJKnF1YWxpZmllZDsKKwljaGFyCSAgICpuYW1lc3BhY2U7CisKKwlpZiAoaXNB bnlUZW1wTmFtZXNwYWNlKG5zcGlkKSkKKwkJbmFtZXNwYWNlID0gcHN0cmR1cCgicGdfdGVtcCIp OworCWVsc2UKKwkJbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9uYW1lKG5zcGlkKTsKKworCXF1 YWxpZmllZCA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsIDIsCisJCQkJCQkJICAic2NoZW1hbmFtZSIs IE9ialR5cGVTdHJpbmcsIG5hbWVzcGFjZSwKKwkJCQkJCQkgICJvYmpuYW1lIiwgT2JqVHlwZVN0 cmluZywgcHN0cmR1cChuYW1lKSk7CisKKwlyZXR1cm4gcXVhbGlmaWVkOworfQorCisvKgorICog QSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31EIGFuZCAle31PIGVsZW1lbnRzLCB3aXRoIHRo ZSBvYmplY3Qgc3BlY2lmaWVkCisgKiBieSBjbGFzc0lkL29iaklkLgorICoKKyAqLworc3RhdGlj IE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQg b2JqZWN0SWQpCit7CisJT2JqVHJlZQkqcXVhbGlmaWVkOworCVJlbGF0aW9uCWNhdGFsb2c7CisJ SGVhcFR1cGxlCWNhdG9iajsKKwlEYXR1bQkJb2JqbnNwOworCURhdHVtCQlvYmpuYW1lOworCUF0 dHJOdW1iZXIJQW51bV9uYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lc3BhY2U7CisJQXR0ck51 bWJlcglBbnVtX29pZCA9IGdldF9vYmplY3RfYXR0bnVtX29pZChjbGFzc0lkKTsKKwlib29sCQlp c251bGw7CisKKwljYXRhbG9nID0gdGFibGVfb3BlbihjbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJY2F0b2JqID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBBbnVtX29p ZCwgb2JqZWN0SWQpOworCWlmICghY2F0b2JqKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3Igb2JqZWN0ICV1IG9mIGNhdGFsb2cgXCIlc1wiIiwKKwkJCSBvYmplY3RJZCwg UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoY2F0YWxvZykpOworCUFudW1fbmFtZSA9IGdldF9vYmpl Y3RfYXR0bnVtX25hbWUoY2xhc3NJZCk7CisJQW51bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0 dG51bV9uYW1lc3BhY2UoY2xhc3NJZCk7CisKKwlvYmpuc3AgPSBoZWFwX2dldGF0dHIoY2F0b2Jq LCBBbnVtX25hbWVzcGFjZSwgUmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwKKwkJCQkJCSAgJmlz bnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgTlVMTCBuYW1l c3BhY2UiKTsKKworCW9iam5hbWUgPSBoZWFwX2dldGF0dHIoY2F0b2JqLCBBbnVtX25hbWUsIFJl bGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJCQkgICAmaXNudWxsKTsKKwlpZiAoaXNudWxs KQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBOVUxMIG5hbWUiKTsKKworCXF1YWxpZmllZCA9 IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShEYXR1bUdldE9iamVjdElkKG9iam5zcCksCisJCQkJ CQkJCQkJIE5hbWVTdHIoKkRhdHVtR2V0TmFtZShvYmpuYW1lKSkpOworCXRhYmxlX2Nsb3NlKGNh dGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcXVhbGlmaWVkOworfQorCisvKgor ICogSGVscGVyIHJvdXRpbmUgZm9yICV7fVIgb2JqZWN0cywgd2l0aCByb2xlIHNwZWNpZmllZCBi eSBSb2xlU3BlYyBub2RlLgorICogU3BlY2lhbCB2YWx1ZXMgc3VjaCBhcyBST0xFU1BFQ19DVVJS RU5UX1VTRVIgYXJlIGV4cGFuZGVkIHRvIHRoZWlyIGZpbmFsCisgKiBuYW1lcy4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKFJvbGVTcGVjICpzcGVjKQor eworCU9ialRyZWUJICAgKnJvbGU7CisJY2hhcgkgICAqcm9sZXR5cGU7CisKKwlpZiAoc3BlYy0+ cm9sZXR5cGUgIT0gUk9MRVNQRUNfUFVCTElDKQorCQlyb2xldHlwZSA9IGdldF9yb2xlc3BlY19u YW1lKHNwZWMpOworCWVsc2UKKwkJcm9sZXR5cGUgPSBwc3RyZHVwKCIiKTsKKworCXJvbGUgPSBu ZXdfb2JqdHJlZV9WQShOVUxMLDIsCisJCQkJCQkgICJpc19wdWJsaWMiLCBPYmpUeXBlQm9vbCwg c3BlYy0+cm9sZXR5cGUgPT0gUk9MRVNQRUNfUFVCTElDLAorCQkJCQkJICAicm9sZW5hbWUiLCBP YmpUeXBlU3RyaW5nLCByb2xldHlwZSk7CisJcmV0dXJuIHJvbGU7Cit9CisKKy8qCisgKiBIZWxw ZXIgcm91dGluZSBmb3IgJXt9UiBvYmplY3RzLCB3aXRoIHJvbGUgc3BlY2lmaWVkIGJ5IE9JRC4g IChBQ0xfSURfUFVCTElDCisgKiBtZWFucyB0byB1c2UgInB1YmxpYyIpLgorICovCitzdGF0aWMg T2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3Jfcm9sZV9pZChPaWQgcm9sZW9pZCkKK3sKKwlPYmpU cmVlICAgICpyb2xlOworCisJcm9sZSA9IG5ld19vYmp0cmVlKCIiKTsKKworCWlmIChyb2xlb2lk ICE9IEFDTF9JRF9QVUJMSUMpCisJeworCQlIZWFwVHVwbGUJcm9sdHVwOworCQljaGFyCSAgICpy b2xlbmFtZTsKKworCQlyb2x0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQVVUSE9JRCwgT2JqZWN0SWRH ZXREYXR1bShyb2xlb2lkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChyb2x0dXApKQorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwK KwkJCQkJIGVycm1zZygicm9sZSB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsIHJvbGVvaWQp KSk7CisKKwkJcm9sZW5hbWUgPSBOYW1lU3RyKCgoRm9ybV9wZ19hdXRoaWQpIEdFVFNUUlVDVChy b2x0dXApKS0+cm9sbmFtZSk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJvbGUsICIle3JvbGVu YW1lfUkiLCBwc3RyZHVwKHJvbGVuYW1lKSk7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHJvbHR1cCk7 CisJfQorCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qocm9sZSwgIiV7cm9sZW5hbWV9SSIs ICJwdWJsaWMiKTsKKworCXJldHVybiByb2xlOworfQorCisvKgorICogQSBoZWxwZXIgcm91dGlu ZSB0byBzZXR1cCAle31UIGVsZW1lbnRzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2Jq dHJlZV9mb3JfdHlwZShPaWQgdHlwZUlkLCBpbnQzMiB0eXBtb2QpCit7CisJT2JqVHJlZQkqdHlw ZVBhcmFtOworCU9pZAkJCXR5cG5zcGlkOworCWNoYXIJICAgKnR5cG5zcDsKKwljaGFyCSAgICp0 eXBlbmFtZSA9IE5VTEw7CisJY2hhcgkgICAqdHlwbW9kc3RyOworCWJvb2wJCXR5cGFycmF5Owor CisJZm9ybWF0X3R5cGVfZGV0YWlsZWQodHlwZUlkLCB0eXBtb2QsCisJCQkJCQkgJnR5cG5zcGlk LCAmdHlwZW5hbWUsICZ0eXBtb2RzdHIsICZ0eXBhcnJheSk7CisKKwlpZiAoT2lkSXNWYWxpZCh0 eXBuc3BpZCkpCisJCXR5cG5zcCA9IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKHR5cG5zcGlk KTsKKwllbHNlCisJCXR5cG5zcCA9IHBzdHJkdXAoIiIpOworCisJdHlwZVBhcmFtID0gbmV3X29i anRyZWVfVkEoTlVMTCwgNCwKKwkJCQkJCQkgICAic2NoZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcs IHR5cG5zcCwKKwkJCQkJCQkgICAidHlwZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlbmFtZSwK KwkJCQkJCQkgICAidHlwbW9kIiwgT2JqVHlwZVN0cmluZywgdHlwbW9kc3RyLAorCQkJCQkJCSAg ICJ0eXBhcnJheSIsIE9ialR5cGVCb29sLCB0eXBhcnJheSk7CisKKwlyZXR1cm4gdHlwZVBhcmFt OworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1l dGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZlcnNpb24uCisgKgorICogVGhlICJmbXQiIGFyZ3VtZW50 IGlzIHVzZWQgdG8gYXBwZW5kIGFzIGEgImZtdCIgZWxlbWVudCBpbiB0aGUgb3V0cHV0IGJsb2Iu CisgKiBudW1vYmpzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGV4dHJhIGVsZW1lbnRzIHRvIGFw cGVuZDsgZm9yIGVhY2ggb25lLCBhCisgKiBuYW1lIChzdHJpbmcpLCB0eXBlIChmcm9tIHRoZSBP YmpUeXBlIGVudW0pIGFuZCB2YWx1ZSBtdXN0IGJlIHN1cHBsaWVkLiAgVGhlCisgKiB2YWx1ZSBt dXN0IG1hdGNoIHRoZSB0eXBlIGdpdmVuOyBmb3IgaW5zdGFuY2UsIE9ialR5cGVJbnRlZ2VyIHJl cXVpcmVzIGFuCisgKiBpbnQ2NCwgT2JqVHlwZVN0cmluZyByZXF1aXJlcyBhIGNoYXIgKiwgT2Jq VHlwZUFycmF5IHJlcXVpcmVzIGEgbGlzdCAob2YKKyAqIE9iakVsZW0pLCBPYmpUeXBlT2JqZWN0 IHJlcXVpcmVzIGFuIE9ialRyZWUsIGFuZCBzbyBvbi4gIEVhY2ggZWxlbWVudCB0eXBlICoKKyAq IG11c3QgbWF0Y2ggdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVyIGdpdmVuIGluIHRoZSBmb3JtYXQg c3RyaW5nLCBhcyBkZXNjcmliZWQKKyAqIGluIGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kLCBx LnYuCisgKgorICogTm90ZSB3ZSBkb24ndCBoYXZlIHRoZSBsdXh1cnkgb2Ygc3ByaW50Zi1saWtl IGNvbXBpbGVyIHdhcm5pbmdzIGZvcgorICogbWFsZm9ybWVkIGFyZ3VtZW50IGxpc3RzLgorICov CitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpz LC4uLikKK3sKKwlPYmpUcmVlCSAgICp0cmVlOworCXZhX2xpc3QJCWFyZ3M7CisJaW50CQkJaTsK KworCS8qIFNldCB1cCB0aGUgdG9wbGV2ZWwgb2JqZWN0IGFuZCBpdHMgImZtdCIgKi8KKwl0cmVl ID0gbmV3X29ianRyZWUoZm10KTsKKworCS8qIEFuZCBwcm9jZXNzIHRoZSBnaXZlbiB2YXJhcmdz ICovCisJdmFfc3RhcnQoYXJncywgbnVtb2Jqcyk7CisJZm9yIChpID0gMDsgaSA8IG51bW9ianM7 IGkrKykKKwl7CisJCWNoYXIJICAgKm5hbWU7CisJCU9ialR5cGUJCXR5cGU7CisJCU9iakVsZW0J ICAgKmVsZW07CisKKwkJbmFtZSA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQl0eXBlID0gdmFf YXJnKGFyZ3MsIE9ialR5cGUpOworCQllbGVtID0gbmV3X29iamVjdCh0eXBlLCBOVUxMKTsKKwor CQkvKgorCQkgKiBGb3IgYWxsIG90aGVyIHBhcmFtIHR5cGVzIHRoZXJlIG11c3QgYmUgYSB2YWx1 ZSBpbiB0aGUgdmFyYXJncy4KKwkJICogRmV0Y2ggaXQgYW5kIGFkZCB0aGUgZnVsbHkgZm9ybWVk IHN1Ym9iamVjdCBpbnRvIHRoZSBtYWluIG9iamVjdC4KKwkJICovCisJCXN3aXRjaCAodHlwZSkK KwkJeworCQkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJCQkvKiBOdWxsIHBhcmFtcyBkb24ndCBoYXZl IGEgdmFsdWUgKG9idmlvdXNseSkgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUJvb2w6 CisJCQkJZWxlbS0+dmFsdWUuYm9vbGVhbiA9IHZhX2FyZyhhcmdzLCBpbnQpOworCQkJCWJyZWFr OworCQkJY2FzZSBPYmpUeXBlU3RyaW5nOgorCQkJCWVsZW0tPnZhbHVlLnN0cmluZyA9IHZhX2Fy ZyhhcmdzLCBjaGFyICopOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlQXJyYXk6CisJCQkJ ZWxlbS0+dmFsdWUuYXJyYXkgPSB2YV9hcmcoYXJncywgTGlzdCAqKTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQkJZWxlbS0+dmFsdWUuaW50ZWdlciA9IHZhX2FyZyhh cmdzLCBpbnQ2NCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVGbG9hdDoKKwkJCQllbGVt LT52YWx1ZS5mbHQgPSB2YV9hcmcoYXJncywgZG91YmxlKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug T2JqVHlwZU9iamVjdDoKKwkJCQllbGVtLT52YWx1ZS5vYmplY3QgPSB2YV9hcmcoYXJncywgT2Jq VHJlZSAqKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgImludmFs aWQgT2JqVHJlZSBlbGVtZW50IHR5cGUgJWQiLCB0eXBlKTsKKwkJfQorCisJCWVsZW0tPm5hbWUg PSBuYW1lOworCQlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgZWxlbSk7CisJfQorCisJdmFf ZW5kKGFyZ3MpOworCXJldHVybiB0cmVlOworfQorCisvKiBBbGxvY2F0ZSBhIG5ldyBzdHJpbmcg b2JqZWN0ICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1 ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKworCUFzc2VydCh2YWx1ZSk7CisKKwlwYXJhbSA9 IG5ld19vYmplY3QoT2JqVHlwZVN0cmluZywgTlVMTCk7CisJcGFyYW0tPnZhbHVlLnN0cmluZyA9 IHZhbHVlOworCisJcmV0dXJuIHBhcmFtOworfQorCisvKgorICogUHJvY2VzcyB0aGUgcHJlLWJ1 aWx0IGZvcm1hdCBzdHJpbmcgZnJvbSB0aGUgT2JqVHJlZSBpbnRvIHRoZSBvdXRwdXQgcGFyc2UK KyAqIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorb2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVu dChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBPYmpUcmVlICp0cmVlKQoreworCUpzb25iVmFsdWUJ a2V5OworCUpzb25iVmFsdWUJdmFsOworCisJaWYgKHRyZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJ cmV0dXJuOworCisJLyogUHVzaCB0aGUga2V5IGZpcnN0ICovCisJa2V5LnR5cGUgPSBqYnZTdHJp bmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0gImZtdCI7CisJa2V5LnZhbC5zdHJpbmcubGVuID0g c3RybGVuKGtleS52YWwuc3RyaW5nLnZhbCk7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJf S0VZLCAma2V5KTsKKworCS8qIFRoZW4gcHJvY2VzcyB0aGUgcHJlLWJ1aWx0IGZvcm1hdCBzdHJp bmcgKi8KKwl2YWwudHlwZSA9IGpidlN0cmluZzsKKwl2YWwudmFsLnN0cmluZy5sZW4gPSB0cmVl LT5mbXRpbmZvLT5sZW47CisJdmFsLnZhbC5zdHJpbmcudmFsID0gdHJlZS0+Zm10aW5mby0+ZGF0 YTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9WQUxVRSwgJnZhbCk7Cit9CisKKy8qCisg KiBDcmVhdGUgYSBKU09OQiByZXByZXNlbnRhdGlvbiBmcm9tIGFuIE9ialRyZWUuCisgKi8KK3N0 YXRpYyBKc29uYiAqCitvYmp0cmVlX3RvX2pzb25iKE9ialRyZWUgKnRyZWUpCit7CisJSnNvbmJW YWx1ZSAqdmFsdWU7CisKKwl2YWx1ZSA9IG9ianRyZWVfdG9fanNvbmJfcmVjKHRyZWUsIE5VTEwp OworCXJldHVybiBKc29uYlZhbHVlVG9Kc29uYih2YWx1ZSk7Cit9CisKKy8qCisgKiBIZWxwZXIg Zm9yIG9ianRyZWVfdG9fanNvbmI6IHByb2Nlc3MgYW4gaW5kaXZpZHVhbCBlbGVtZW50IGZyb20g YW4gb2JqZWN0IG9yCisgKiBhbiBhcnJheSBpbnRvIHRoZSBvdXRwdXQgcGFyc2Ugc3RhdGUuCisg Ki8KK3N0YXRpYyB2b2lkCitvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRl ICpzdGF0ZSwgT2JqRWxlbSAqb2JqZWN0LAorCQkJCQkJIEpzb25iSXRlcmF0b3JUb2tlbiBlbGVt X3Rva2VuKQoreworCUxpc3RDZWxsICAgKmNlbGw7CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlzd2l0 Y2ggKG9iamVjdC0+b2JqdHlwZSkKKwl7CisJCWNhc2UgT2JqVHlwZU51bGw6CisJCQl2YWwudHlw ZSA9IGpidk51bGw7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwp OworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlU3RyaW5nOgorCQkJdmFsLnR5cGUgPSBqYnZT dHJpbmc7CisJCQl2YWwudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ob2JqZWN0LT52YWx1ZS5zdHJp bmcpOworCQkJdmFsLnZhbC5zdHJpbmcudmFsID0gb2JqZWN0LT52YWx1ZS5zdHJpbmc7CisJCQlw dXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJCXZhbC50eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52 YWwubnVtZXJpYyA9IChOdW1lcmljKQorCQkJCURhdHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlv bkNhbGwxKGludDhfbnVtZXJpYywKKwkJCQkJCQkJCQkJCQlvYmplY3QtPnZhbHVlLmludGVnZXIp KTsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVh azsKKworCQljYXNlIE9ialR5cGVGbG9hdDoKKwkJCXZhbC50eXBlID0gamJ2TnVtZXJpYzsKKwkJ CXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQorCQkJCURhdHVtR2V0TnVtZXJpYyhEaXJlY3RG dW5jdGlvbkNhbGwxKGZsb2F0OF9udW1lcmljLAorCQkJCQkJCQkJCQkJCW9iamVjdC0+dmFsdWUu aW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsK KwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUJvb2w6CisJCQl2YWwudHlwZSA9IGpidkJvb2w7 CisJCQl2YWwudmFsLmJvb2xlYW4gPSBvYmplY3QtPnZhbHVlLmJvb2xlYW47CisJCQlwdXNoSnNv bmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBP YmpUeXBlT2JqZWN0OgorCQkJLyogUmVjdXJzaXZlbHkgYWRkIHRoZSBvYmplY3QgaW50byB0aGUg ZXhpc3RpbmcgcGFyc2Ugc3RhdGUgKi8KKwkJCW9ianRyZWVfdG9fanNvbmJfcmVjKG9iamVjdC0+ dmFsdWUub2JqZWN0LCBzdGF0ZSk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVBcnJheToK KwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX0FSUkFZLCBOVUxMKTsKKwkJCWZv cmVhY2goY2VsbCwgb2JqZWN0LT52YWx1ZS5hcnJheSkKKwkJCXsKKwkJCQlPYmpFbGVtICAgKmVs ZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJCQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoc3RhdGUs IGVsZW0sIFdKQl9FTEVNKTsKKwkJCX0KKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VO RF9BUlJBWSwgTlVMTCk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwg InVucmVjb2duaXplZCBvYmplY3QgdHlwZSAlZCIsIG9iamVjdC0+b2JqdHlwZSk7CisJCQlicmVh azsKKwl9Cit9CisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBvYmp0cmVlX3RvX2pzb25i LgorICovCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitvYmp0cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVl ICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKQoreworCXNsaXN0X2l0ZXIJaXRlcjsKKwor CXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisKKwlvYmp0 cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KHN0YXRlLCB0cmVlKTsKKworCXNsaXN0X2ZvcmVhY2go aXRlciwgJnRyZWUtPnBhcmFtcykKKwl7CisJCU9iakVsZW0JKm9iamVjdCA9IHNsaXN0X2NvbnRh aW5lcihPYmpFbGVtLCBub2RlLCBpdGVyLmN1cik7CisJCUpzb25iVmFsdWUJa2V5OworCisJCS8q IFB1c2ggdGhlIGtleSBmaXJzdCAqLworCQlrZXkudHlwZSA9IGpidlN0cmluZzsKKwkJa2V5LnZh bC5zdHJpbmcubGVuID0gc3RybGVuKG9iamVjdC0+bmFtZSk7CisJCWtleS52YWwuc3RyaW5nLnZh bCA9IG9iamVjdC0+bmFtZTsKKwkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5 KTsKKworCQkvKiBUaGVuIHByb2Nlc3MgdGhlIHZhbHVlIGFjY29yZGluZyB0byBpdHMgdHlwZSAq LworCQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIG9iamVjdCwgV0pCX1ZBTFVFKTsK Kwl9CisKKwlyZXR1cm4gcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVM TCk7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUvQ1JFQVRFIERPTUFJ TiBkZXBhcnNpbmcuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQgb3IgZG9tYWluIE9JRCwgb2J0 YWluIGl0cyBjb25zdHJhaW50cyBhbmQgYXBwZW5kIHRoZW0gdG8KKyAqIHRoZSBnaXZlbiBlbGVt ZW50cyBsaXN0LiAgVGhlIHVwZGF0ZWQgbGlzdCBpcyByZXR1cm5lZC4KKyAqCisgKiBUaGlzIHdv cmtzIGZvciB0eXBlZCB0YWJsZXMsIHJlZ3VsYXIgdGFibGVzLCBhbmQgZG9tYWlucy4KKyAqCisg KiBOb3RlIHRoYXQgQ09OU1RSQUlOVF9GT1JFSUdOIGNvbnN0cmFpbnRzIGFyZSBhbHdheXMgaWdu b3JlZC4KKyAqLworc3RhdGljIExpc3QgKgorb2J0YWluQ29uc3RyYWludHMoTGlzdCAqZWxlbWVu dHMsIE9pZCByZWxhdGlvbklkLCBPaWQgZG9tYWluSWQpCit7CisJUmVsYXRpb24JY29uUmVsOwor CVNjYW5LZXlEYXRhIGtleTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXBsZTsK KwlPYmpUcmVlCSpjb25zdHI7CisKKwkvKiBPbmx5IG9uZSBtYXkgYmUgdmFsaWQgKi8KKwlBc3Nl cnQoT2lkSXNWYWxpZChyZWxhdGlvbklkKSBeIE9pZElzVmFsaWQoZG9tYWluSWQpKTsKKworCS8q CisJICogU2NhbiBwZ19jb25zdHJhaW50IHRvIGZldGNoIGFsbCBjb25zdHJhaW50cyBsaW5rZWQg dG8gdGhlIGdpdmVuCisJICogcmVsYXRpb24uCisJICovCisJY29uUmVsID0gdGFibGVfb3BlbihD b25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlpZiAoT2lkSXNWYWxpZChy ZWxhdGlvbklkKSkKKwl7CisJCVNjYW5LZXlJbml0KCZrZXksCisJCQkJCUFudW1fcGdfY29uc3Ry YWludF9jb25yZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJ CQlPYmplY3RJZEdldERhdHVtKHJlbGF0aW9uSWQpKTsKKwkJc2NhbiA9IHN5c3RhYmxlX2JlZ2lu c2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCSAg dHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQorCWVsc2UKKwl7CisJCUFzc2VydChPaWRJc1ZhbGlk KGRvbWFpbklkKSk7CisJCVNjYW5LZXlJbml0KCZrZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWlu dF9jb250eXBpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlP YmplY3RJZEdldERhdHVtKGRvbWFpbklkKSk7CisJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4o Y29uUmVsLCBDb25zdHJhaW50VHlwaWRJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEs ICZrZXkpOworCX0KKworCS8qCisJICogRm9yIGVhY2ggY29uc3RyYWludCwgYWRkIGEgbm9kZSB0 byB0aGUgbGlzdCBvZiB0YWJsZSBlbGVtZW50cy4gIEluCisJICogdGhlc2Ugbm9kZXMgd2UgaW5j bHVkZSBub3Qgb25seSB0aGUgcHJpbnRhYmxlIGluZm9ybWF0aW9uICgiZm10IiksIGJ1dAorCSAq IGFsc28gc2VwYXJhdGUgYXR0cmlidXRlcyB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBjb25zdHJh aW50LCBmb3IKKwkgKiBhdXRvbWF0aWMgcHJvY2Vzc2luZy4KKwkgKi8KKwl3aGlsZSAoSGVhcFR1 cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJRm9ybV9w Z19jb25zdHJhaW50IGNvbnN0ckZvcm07CisJCWNoYXIJICAgKmNvbnR5cGU7CisKKwkJY29uc3Ry Rm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJc3dpdGNo IChjb25zdHJGb3JtLT5jb250eXBlKQorCQl7CisJCQljYXNlIENPTlNUUkFJTlRfQ0hFQ0s6CisJ CQkJY29udHlwZSA9ICJjaGVjayI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfRk9S RUlHTjoKKwkJCQljb250aW51ZTsJLyogbm90IGhlcmUgKi8KKwkJCWNhc2UgQ09OU1RSQUlOVF9Q UklNQVJZOgorCQkJCWNvbnR5cGUgPSAicHJpbWFyeSBrZXkiOworCQkJCWJyZWFrOworCQkJY2Fz ZSBDT05TVFJBSU5UX1VOSVFVRToKKwkJCQljb250eXBlID0gInVuaXF1ZSI7CisJCQkJYnJlYWs7 CisJCQljYXNlIENPTlNUUkFJTlRfVFJJR0dFUjoKKwkJCQljb250eXBlID0gInRyaWdnZXIiOwor CQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0VYQ0xVU0lPTjoKKwkJCQljb250eXBlID0g ImV4Y2x1c2lvbiI7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJ1 bnJlY29nbml6ZWQgY29uc3RyYWludCB0eXBlIik7CisJCX0KKworCQkvKgorCQkgKiAidHlwZSIg YW5kICJjb250eXBlIiBhcmUgbm90IHBhcnQgb2YgdGhlIHByaW50YWJsZSBvdXRwdXQsIGJ1dCBh cmUKKwkJICogdXNlZnVsIHRvIHByb2dyYW1tYXRpY2FsbHkgZGlzdGluZ3Vpc2ggdGhlc2UgZnJv bSBjb2x1bW5zIGFuZCBhbW9uZworCQkgKiBkaWZmZXJlbnQgY29uc3RyYWludCB0eXBlcy4KKwkJ ICoKKwkJICogWFhYIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBhbHNvIGxpc3QgdGhlIGNvbHVtbiBu YW1lcyBpbiBhIFBLLCBldGMuCisJCSAqLworCQljb25zdHIgPSBuZXdfb2JqdHJlZV9WQSgiQ09O U1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsCisJCQkJCQkJCTQsCisJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbnN0cmFpbnQiLAorCQkJCQkJCQkiY29udHlwZSIsIE9i alR5cGVTdHJpbmcsIGNvbnR5cGUsCisJCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgTmFt ZVN0cihjb25zdHJGb3JtLT5jb25uYW1lKSwKKwkJCQkJCQkJImRlZmluaXRpb24iLCBPYmpUeXBl U3RyaW5nLAorCQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29u c3RyRm9ybS0+b2lkKSk7CisJCWVsZW1lbnRzID0gbGFwcGVuZChlbGVtZW50cywgbmV3X29iamVj dF9vYmplY3QoY29uc3RyKSk7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJs ZV9jbG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gZWxlbWVudHM7Cit9 CisKKy8qCisgKiBSZXR1cm4gYW4gaW5kZXggZGVmaW5pdGlvbiwgc3BsaXQgaW4gc2V2ZXJhbCBw aWVjZXMuCisgKgorICogQSBsYXJnZSBhbW91bnQgb2YgY29kZSBpcyBkdXBsaWNhdGVkIGZyb20g IHBnX2dldF9pbmRleGRlZl93b3JrZXIsIGJ1dAorICogY29udHJvbCBmbG93IGlzIGRpZmZlcmVu dCBlbm91Z2ggdGhhdCBpdCBkb2Vzbid0IHNlZW0gd29ydGgga2VlcGluZyB0aGVtCisgKiB0b2dl dGhlci4KKyAqLworc3RhdGljIHZvaWQKK3BnX2dldF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5k ZXhyZWxpZCwKKwkJCQkJCSBjaGFyICoqaW5kZXhfYW0sCisJCQkJCQkgY2hhciAqKmRlZmluaXRp b24sCisJCQkJCQkgY2hhciAqKnJlbG9wdGlvbnMsCisJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2Us CisJCQkJCQkgY2hhciAqKndoZXJlQ2xhdXNlKQoreworCUhlYXBUdXBsZQlodF9pZHg7CisJSGVh cFR1cGxlCWh0X2lkeHJlbDsKKwlIZWFwVHVwbGUJaHRfYW07CisJRm9ybV9wZ19pbmRleCBpZHhy ZWM7CisJRm9ybV9wZ19jbGFzcyBpZHhyZWxyZWM7CisJRm9ybV9wZ19hbQlhbXJlYzsKKwlJbmRl eEFtUm91dGluZSAqYW1yb3V0aW5lOworCUxpc3QJICAgKmluZGV4cHJzOworCUxpc3RDZWxsICAg KmluZGV4cHJfaXRlbTsKKwlMaXN0CSAgICpjb250ZXh0OworCU9pZAkJCWluZHJlbGlkOworCWlu dAkJCWtleW5vOworCURhdHVtCQlpbmRjb2xsRGF0dW07CisJRGF0dW0JCWluZGNsYXNzRGF0dW07 CisJRGF0dW0JCWluZG9wdGlvbkRhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlvaWR2ZWN0b3IgICpp bmRjb2xsYXRpb247CisJb2lkdmVjdG9yICAqaW5kY2xhc3M7CisJaW50MnZlY3RvciAqaW5kb3B0 aW9uOworCVN0cmluZ0luZm9EYXRhIGRlZmluaXRpb25CdWY7CisKKwkvKgorCSAqIEZldGNoIHRo ZSBwZ19pbmRleCB0dXBsZSBieSB0aGUgT2lkIG9mIHRoZSBpbmRleAorCSAqLworCWh0X2lkeCA9 IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmplY3RJZEdldERhdHVtKGluZGV4cmVsaWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfaWR4KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIGluZGV4ICV1IiwgaW5kZXhyZWxpZCk7CisJaWR4cmVjID0gKEZv cm1fcGdfaW5kZXgpIEdFVFNUUlVDVChodF9pZHgpOworCisJaW5kcmVsaWQgPSBpZHhyZWMtPmlu ZHJlbGlkOworCUFzc2VydChpbmRleHJlbGlkID09IGlkeHJlYy0+aW5kZXhyZWxpZCk7CisKKwkv KiBNdXN0IGdldCBpbmRjb2xsYXRpb24sIGluZGNsYXNzLCBhbmQgaW5kb3B0aW9uIHRoZSBoYXJk IHdheSAqLworCWluZGNvbGxEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9p ZHgsCisJCQkJCQkJCSAgIEFudW1fcGdfaW5kZXhfaW5kY29sbGF0aW9uLCAmaXNudWxsKTsKKwlB c3NlcnQoIWlzbnVsbCk7CisJaW5kY29sbGF0aW9uID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBv aW50ZXIoaW5kY29sbERhdHVtKTsKKworCWluZGNsYXNzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIo SU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJQW51bV9wZ19pbmRleF9pbmRjbGFzcywgJmlz bnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZGNsYXNzID0gKG9pZHZlY3RvciAqKSBEYXR1 bUdldFBvaW50ZXIoaW5kY2xhc3NEYXR1bSk7CisKKwlpbmRvcHRpb25EYXR1bSA9IFN5c0NhY2hl R2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQkgQW51bV9wZ19pbmRleF9pbmRv cHRpb24sICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRvcHRpb24gPSAoaW50MnZl Y3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kb3B0aW9uRGF0dW0pOworCisJLyoKKwkgKiBGZXRj aCB0aGUgcGdfY2xhc3MgdHVwbGUgb2YgdGhlIGluZGV4IHJlbGF0aW9uCisJICovCisJaHRfaWR4 cmVsID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bShpbmRleHJlbGlk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2lkeHJlbCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIsIGluZGV4cmVsaWQpOworCWlkeHJl bHJlYyA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1QoaHRfaWR4cmVsKTsKKworCS8qCisJICog RmV0Y2ggdGhlIHBnX2FtIHR1cGxlIG9mIHRoZSBpbmRleCcgYWNjZXNzIG1ldGhvZAorCSAqLwor CWh0X2FtID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKGlkeHJlbHJl Yy0+cmVsYW0pKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfYW0pKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1ldGhvZCAldSIsCisJCQkgaWR4cmVs cmVjLT5yZWxhbSk7CisJYW1yZWMgPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGh0X2FtKTsKKwor CS8qCisJICogR2V0IHRoZSBpbmRleCBleHByZXNzaW9ucywgaWYgYW55LiAgKE5PVEU6IHdlIGRv IG5vdCB1c2UgdGhlIHJlbGNhY2hlCisJICogdmVyc2lvbnMgb2YgdGhlIGV4cHJlc3Npb25zIGFu ZCBwcmVkaWNhdGUsIGJlY2F1c2Ugd2Ugd2FudCB0byBkaXNwbGF5CisJICogbm9uLWNvbnN0LWZv bGRlZCBleHByZXNzaW9ucy4pCisJICovCisJaWYgKCFoZWFwX2F0dGlzbnVsbChodF9pZHgsIEFu dW1fcGdfaW5kZXhfaW5kZXhwcnMsIE5VTEwpKQorCXsKKwkJRGF0dW0JCWV4cHJzRGF0dW07CisJ CWNoYXIJICAgKmV4cHJzU3RyaW5nOworCisJCWV4cHJzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIo SU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJIEFudW1fcGdfaW5kZXhfaW5kZXhwcnMsICZp c251bGwpOworCQlBc3NlcnQoIWlzbnVsbCk7CisJCWV4cHJzU3RyaW5nID0gVGV4dERhdHVtR2V0 Q1N0cmluZyhleHByc0RhdHVtKTsKKwkJaW5kZXhwcnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUo ZXhwcnNTdHJpbmcpOworCQlwZnJlZShleHByc1N0cmluZyk7CisJfQorCWVsc2UKKwkJaW5kZXhw cnMgPSBOSUw7CisKKwlpbmRleHByX2l0ZW0gPSBsaXN0X2hlYWQoaW5kZXhwcnMpOworCisJY29u dGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoZ2V0X3JlbF9uYW1lKGluZHJlbGlkKSwgaW5kcmVs aWQpOworCisJaW5pdFN0cmluZ0luZm8oJmRlZmluaXRpb25CdWYpOworCisJLyogT3V0cHV0IGlu ZGV4IEFNICovCisJKmluZGV4X2FtID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIo YW1yZWMtPmFtbmFtZSkpKTsKKworCS8qIEZldGNoIHRoZSBpbmRleCBBTSdzIEFQSSBzdHJ1Y3Qg Ki8KKwlhbXJvdXRpbmUgPSBHZXRJbmRleEFtUm91dGluZShhbXJlYy0+YW1oYW5kbGVyKTsKKwor CS8qCisJICogT3V0cHV0IGluZGV4IGRlZmluaXRpb24uICBOb3RlIHRoZSBvdXRlciBwYXJlbnMg bXVzdCBiZSBzdXBwbGllZCBieQorCSAqIGNhbGxlci4KKwkgKi8KKwlmb3IgKGtleW5vID0gMDsg a2V5bm8gPCBpZHhyZWMtPmluZG5hdHRzOyBrZXlubysrKQorCXsKKwkJQXR0ck51bWJlcglhdHRu dW0gPSBpZHhyZWMtPmluZGtleS52YWx1ZXNba2V5bm9dOworCQlpbnQxNgkJb3B0ID0gaW5kb3B0 aW9uLT52YWx1ZXNba2V5bm9dOworCQlPaWQJCQlrZXljb2x0eXBlOworCQlPaWQJCQlrZXljb2xj b2xsYXRpb247CisJCU9pZAkJCWluZGNvbGw7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm ZGVmaW5pdGlvbkJ1Ziwga2V5bm8gPT0gMCA/ICIiIDogIiwgIik7CisKKwkJaWYgKGF0dG51bSAh PSAwKQorCQl7CisJCQkvKiBTaW1wbGUgaW5kZXggY29sdW1uICovCisJCQljaGFyCSAgICphdHRu YW1lOworCQkJaW50MzIJCWtleWNvbHR5cG1vZDsKKworCQkJYXR0bmFtZSA9IGdldF9hdHRuYW1l KGluZHJlbGlkLCBhdHRudW0sIGZhbHNlKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRl ZmluaXRpb25CdWYsIHF1b3RlX2lkZW50aWZpZXIoYXR0bmFtZSkpOworCQkJZ2V0X2F0dHR5cGV0 eXBtb2Rjb2xsKGluZHJlbGlkLCBhdHRudW0sCisJCQkJCQkJCSAgJmtleWNvbHR5cGUsICZrZXlj b2x0eXBtb2QsCisJCQkJCQkJCSAgJmtleWNvbGNvbGxhdGlvbik7CisJCX0KKwkJZWxzZQorCQl7 CisJCQkvKiBFeHByZXNzaW9uYWwgaW5kZXggKi8KKwkJCU5vZGUJICAgKmluZGV4a2V5OworCQkJ Y2hhcgkgICAqc3RyOworCisJCQlpZiAoaW5kZXhwcl9pdGVtID09IE5VTEwpCisJCQkJZWxvZyhF UlJPUiwgInRvbyBmZXcgZW50cmllcyBpbiBpbmRleHBycyBsaXN0Iik7CisJCQlpbmRleGtleSA9 IChOb2RlICopIGxmaXJzdChpbmRleHByX2l0ZW0pOworCQkJaW5kZXhwcl9pdGVtID0gbG5leHQo aW5kZXhwcnMsIGluZGV4cHJfaXRlbSk7CisJCQkvKiBEZXBhcnNlICovCisJCQlzdHIgPSBkZXBh cnNlX2V4cHJlc3Npb24oaW5kZXhrZXksIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkJCS8q IE5lZWQgcGFyZW5zIGlmIGl0J3Mgbm90IGEgYmFyZSBmdW5jdGlvbiBjYWxsICovCisJCQlpZiAo aW5kZXhrZXkgJiYgSXNBKGluZGV4a2V5LCBGdW5jRXhwcikgJiYKKwkJCQkoKEZ1bmNFeHByICop IGluZGV4a2V5KS0+ZnVuY2Zvcm1hdCA9PSBDT0VSQ0VfRVhQTElDSVRfQ0FMTCkKKwkJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCBzdHIpOworCQkJZWxzZQorCQkJCWFw cGVuZFN0cmluZ0luZm8oJmRlZmluaXRpb25CdWYsICIoJXMpIiwgc3RyKTsKKworCQkJa2V5Y29s dHlwZSA9IGV4cHJUeXBlKGluZGV4a2V5KTsKKwkJCWtleWNvbGNvbGxhdGlvbiA9IGV4cHJDb2xs YXRpb24oaW5kZXhrZXkpOworCQl9CisKKwkJLyogQWRkIGNvbGxhdGlvbiwgZXZlbiBpZiBkZWZh dWx0ICovCisJCWluZGNvbGwgPSBpbmRjb2xsYXRpb24tPnZhbHVlc1trZXlub107CisJCWlmIChP aWRJc1ZhbGlkKGluZGNvbGwpKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1Ziwg IiBDT0xMQVRFICVzIiwKKwkJCQkJCQkgZ2VuZXJhdGVfY29sbGF0aW9uX25hbWUoKGluZGNvbGwp KSk7CisKKwkJLyogQWRkIHRoZSBvcGVyYXRvciBjbGFzcyBuYW1lLCBldmVuIGlmIGRlZmF1bHQg Ki8KKwkJZ2V0X29wY2xhc3NfbmFtZShpbmRjbGFzcy0+dmFsdWVzW2tleW5vXSwgSW52YWxpZE9p ZCwgJmRlZmluaXRpb25CdWYpOworCisJCS8qIEFkZCBvcHRpb25zIGlmIHJlbGV2YW50ICovCisJ CWlmIChhbXJvdXRpbmUtPmFtY2Fub3JkZXIpCisJCXsKKwkJCS8qIElmIGl0IHN1cHBvcnRzIHNv cnQgb3JkZXJpbmcsIHJlcG9ydCBERVNDIGFuZCBOVUxMUyBvcHRzICovCisJCQlpZiAob3B0ICYg SU5ET1BUSU9OX0RFU0MpCisJCQl7CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5p dGlvbkJ1ZiwgIiBERVNDIik7CisJCQkJLyogTlVMTFMgRklSU1QgaXMgdGhlIGRlZmF1bHQgaW4g dGhpcyBjYXNlICovCisJCQkJaWYgKCEob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKSkKKwkJ CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBMQVNUIik7 CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJT VCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBG SVJTVCIpOworCQkJfQorCQl9CisKKwkJLyogWFhYIGV4Y2x1ZGVPcHMgdGhpbmd5IHdhcyBoZXJl OyBkbyB3ZSBuZWVkIGFueXRoaW5nPyAqLworCX0KKwkqZGVmaW5pdGlvbiA9IGRlZmluaXRpb25C dWYuZGF0YTsKKworCS8qIE91dHB1dCByZWxvcHRpb25zICovCisJKnJlbG9wdGlvbnMgPSBmbGF0 dGVuX3JlbG9wdGlvbnMoaW5kZXhyZWxpZCk7CisKKwkvKiBPdXRwdXQgdGFibGVzcGFjZSAqLwor CXsKKwkJT2lkCQkJdGJsc3BjOworCisJCXRibHNwYyA9IGdldF9yZWxfdGFibGVzcGFjZShpbmRl eHJlbGlkKTsKKwkJaWYgKE9pZElzVmFsaWQodGJsc3BjKSkKKwkJCSp0YWJsZXNwYWNlID0gcHN0 cmR1cChxdW90ZV9pZGVudGlmaWVyKGdldF90YWJsZXNwYWNlX25hbWUodGJsc3BjKSkpOworCQll bHNlCisJCQkqdGFibGVzcGFjZSA9IE5VTEw7CisJfQorCisJLyogUmVwb3J0IGluZGV4IHByZWRp Y2F0ZSwgaWYgYW55ICovCisJaWYgKCFoZWFwX2F0dGlzbnVsbChodF9pZHgsIEFudW1fcGdfaW5k ZXhfaW5kcHJlZCwgTlVMTCkpCisJeworCQlOb2RlCSAgICpub2RlOworCQlEYXR1bQkJcHJlZERh dHVtOworCQljaGFyCSAgICpwcmVkU3RyaW5nOworCisJCS8qIENvbnZlcnQgdGV4dCBzdHJpbmcg dG8gbm9kZSB0cmVlICovCisJCXByZWREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElE LCBodF9pZHgsCisJCQkJCQkJCQlBbnVtX3BnX2luZGV4X2luZHByZWQsICZpc251bGwpOworCQlB c3NlcnQoIWlzbnVsbCk7CisJCXByZWRTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHByZWRE YXR1bSk7CisJCW5vZGUgPSAoTm9kZSAqKSBzdHJpbmdUb05vZGUocHJlZFN0cmluZyk7CisJCXBm cmVlKHByZWRTdHJpbmcpOworCisJCS8qIERlcGFyc2UgKi8KKwkJKndoZXJlQ2xhdXNlID0KKwkJ CWRlcGFyc2VfZXhwcmVzc2lvbihub2RlLCBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCX0KKwll bHNlCisJCSp3aGVyZUNsYXVzZSA9IE5VTEw7CisKKwkvKiBDbGVhbiB1cCAqLworCVJlbGVhc2VT eXNDYWNoZShodF9pZHgpOworCVJlbGVhc2VTeXNDYWNoZShodF9pZHhyZWwpOworCVJlbGVhc2VT eXNDYWNoZShodF9hbSk7Cit9CisKKy8qCisgKiBPYnRhaW4gdGhlIGRlcGFyc2VkIGRlZmF1bHQg dmFsdWUgZm9yIHRoZSBnaXZlbiBjb2x1bW4gb2YgdGhlIGdpdmVuIHRhYmxlLgorICoKKyAqIENh bGxlciBtdXN0IGhhdmUgc2V0IGEgY29ycmVjdCBkZXBhcnNlIGNvbnRleHQuCisgKi8KK3N0YXRp YyBjaGFyICoKK1JlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1i ZXIgYXR0bm8sIExpc3QgKmRwY29udGV4dCwKKwkJCQkJCSBMaXN0ICoqZXhwcnMpCit7CisJTm9k ZSAqZGVmdmFsOworCWNoYXIgKmRlZnN0cjsKKworCWRlZnZhbCA9IGJ1aWxkX2NvbHVtbl9kZWZh dWx0KHJlbCwgYXR0bm8pOworCWRlZnN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihkZWZ2YWwsIGRw Y29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKworCS8qIENvbGxlY3QgdGhlIGV4cHJlc3Npb24gZm9y IGxhdGVyIHJlcGxpY2F0aW9uIHNhZmV0eSBjaGVja3MgKi8KKwlpZiAoZXhwcnMpCisJCSpleHBy cyA9IGxhcHBlbmQoKmV4cHJzLCBkZWZ2YWwpOworCisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoK KyAqIE9idGFpbiB0aGUgZGVwYXJzZWQgcGFydGl0aW9uIGJvdW5kIGV4cHJlc3Npb24gZm9yIHRo ZSBnaXZlbiB0YWJsZS4KKyAqLworc3RhdGljIGNoYXIgKgorUmVsYXRpb25HZXRQYXJ0aXRpb25C b3VuZChPaWQgcmVsaWQpCit7CisJRGF0dW0JCWRlcGFyc2VkOworCURhdHVtCQlib3VuZERhdHVt OworCWJvb2wJCWlzbnVsbDsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwl0dXBsZSA9IFNlYXJjaFN5 c0NhY2hlMShSRUxPSUQsIHJlbGlkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24gJXUiLAorCQkJ IHJlbGlkKTsKKworCWJvdW5kRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVMT0lELCB0dXBsZSwK KwkJCQkJCQkJIEFudW1fcGdfY2xhc3NfcmVscGFydGJvdW5kLAorCQkJCQkJCQkgJmlzbnVsbCk7 CisKKwlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsCisJCQkJCQkJ CSAgIENTdHJpbmdHZXRUZXh0RGF0dW0oVGV4dERhdHVtR2V0Q1N0cmluZyhib3VuZERhdHVtKSks CisJCQkJCQkJCSAgIHJlbGlkKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CisKKwlyZXR1 cm4gVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhl IGdpdmVuIG9iamVjdCB0eXBlIGFzIGEgc3RyaW5nLgorICovCitzdGF0aWMgY29uc3QgY2hhciAq CitzdHJpbmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpCit7CisJc3dpdGNoIChvYmp0 eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfQUdHUkVHQVRFOgorCQkJcmV0dXJuICJBR0dSRUdBVEUi OworCQljYXNlIE9CSkVDVF9DQVNUOgorCQkJcmV0dXJuICJDQVNUIjsKKwkJY2FzZSBPQkpFQ1Rf Q09MVU1OOgorCQkJcmV0dXJuICJDT0xVTU4iOworCQljYXNlIE9CSkVDVF9DT0xMQVRJT046CisJ CQlyZXR1cm4gIkNPTExBVElPTiI7CisJCWNhc2UgT0JKRUNUX0NPTlZFUlNJT046CisJCQlyZXR1 cm4gIkNPTlZFUlNJT04iOworCQljYXNlIE9CSkVDVF9EQVRBQkFTRToKKwkJCXJldHVybiAiREFU QUJBU0UiOworCQljYXNlIE9CSkVDVF9ET01BSU46CisJCQlyZXR1cm4gIkRPTUFJTiI7CisJCWNh c2UgT0JKRUNUX0VWRU5UX1RSSUdHRVI6CisJCQlyZXR1cm4gIkVWRU5UIFRSSUdHRVIiOworCQlj YXNlIE9CSkVDVF9FWFRFTlNJT046CisJCQlyZXR1cm4gIkVYVEVOU0lPTiI7CisJCWNhc2UgT0JK RUNUX0ZEVzoKKwkJCXJldHVybiAiRk9SRUlHTiBEQVRBIFdSQVBQRVIiOworCQljYXNlIE9CSkVD VF9GT1JFSUdOX1NFUlZFUjoKKwkJCXJldHVybiAiU0VSVkVSIjsKKwkJY2FzZSBPQkpFQ1RfRk9S RUlHTl9UQUJMRToKKwkJCXJldHVybiAiRk9SRUlHTiBUQUJMRSI7CisJCWNhc2UgT0JKRUNUX0ZV TkNUSU9OOgorCQkJcmV0dXJuICJGVU5DVElPTiI7CisJCWNhc2UgT0JKRUNUX0lOREVYOgorCQkJ cmV0dXJuICJJTkRFWCI7CisJCWNhc2UgT0JKRUNUX0xBTkdVQUdFOgorCQkJcmV0dXJuICJMQU5H VUFHRSI7CisJCWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNUOgorCQkJcmV0dXJuICJMQVJHRSBPQkpF Q1QiOworCQljYXNlIE9CSkVDVF9NQVRWSUVXOgorCQkJcmV0dXJuICJNQVRFUklBTElaRUQgVklF VyI7CisJCWNhc2UgT0JKRUNUX09QQ0xBU1M6CisJCQlyZXR1cm4gIk9QRVJBVE9SIENMQVNTIjsK KwkJY2FzZSBPQkpFQ1RfT1BFUkFUT1I6CisJCQlyZXR1cm4gIk9QRVJBVE9SIjsKKwkJY2FzZSBP QkpFQ1RfT1BGQU1JTFk6CisJCQlyZXR1cm4gIk9QRVJBVE9SIEZBTUlMWSI7CisJCWNhc2UgT0JK RUNUX1BPTElDWToKKwkJCXJldHVybiAiUE9MSUNZIjsKKwkJY2FzZSBPQkpFQ1RfUk9MRToKKwkJ CXJldHVybiAiUk9MRSI7CisJCWNhc2UgT0JKRUNUX1JVTEU6CisJCQlyZXR1cm4gIlJVTEUiOwor CQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlyZXR1cm4gIlNDSEVNQSI7CisJCWNhc2UgT0JKRUNU X1NFUVVFTkNFOgorCQkJcmV0dXJuICJTRVFVRU5DRSI7CisJCWNhc2UgT0JKRUNUX1RBQkxFOgor CQkJcmV0dXJuICJUQUJMRSI7CisJCWNhc2UgT0JKRUNUX1RBQkxFU1BBQ0U6CisJCQlyZXR1cm4g IlRBQkxFU1BBQ0UiOworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJcmV0dXJuICJUUklHR0VS IjsKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJcmV0dXJuICJURVhUIFNFQVJD SCBDT05GSUdVUkFUSU9OIjsKKwkJLyoKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdfTUFQUElORzoK KwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiBNQVBQSU5HIjsKKwkJKi8KKwkJ Y2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBESUNUSU9O QVJZIjsKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIFBB UlNFUiI7CisJCWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNI IFRFTVBMQVRFIjsKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCXJldHVybiAiVFlQRSI7CisJCWNh c2UgT0JKRUNUX1VTRVJfTUFQUElORzoKKwkJCXJldHVybiAiVVNFUiBNQVBQSU5HIjsKKwkJY2Fz ZSBPQkpFQ1RfVklFVzoKKwkJCXJldHVybiAiVklFVyI7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2co RVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIsIG9ianR5cGUpOworCX0KK30KKwor LyoKKyAqIEdpdmVuIGEgQ29sbGVjdGVkQ29tbWFuZCwgcmV0dXJuIGEgSlNPTiByZXByZXNlbnRh dGlvbiBvZiBpdC4KKyAqCisgKiBUaGUgY29tbWFuZCBpcyBleHBhbmRlZCBmdWxseSwgc28gdGhh dCB0aGVyZSBhcmUgbm8gYW1iaWd1aXRpZXMgZXZlbiBpbiB0aGUKKyAqIGZhY2Ugb2Ygc2VhcmNo X3BhdGggY2hhbmdlcy4KKyAqLworRGF0dW0KK2RkbF9kZXBhcnNlX3RvX2pzb24oUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQgPSAoQ29sbGVjdGVkQ29tbWFuZCAq KSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKwljaGFyCQkgICAqY29tbWFuZDsKKworCWNvbW1hbmQg PSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIHRydWUpOworCisJaWYgKGNvbW1hbmQpCisJ CVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KGNvbW1hbmQpKTsKKworCVBHX1JFVFVS Tl9OVUxMKCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyQ29sbGF0aW9uU3RtdCAoQUxU RVIgQ09MTEFUSU9OKQorICoKKyAqIEdpdmVuIGEgY29sbGF0aW9uIE9JRCBhbmQgdGhlIHBhcnNl dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRp bmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0 ZXJDb2xsYXRpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAg ICAqc3RtdDsKKwlIZWFwVHVwbGUJY29sVHVwOworCUZvcm1fcGdfY29sbGF0aW9uIGNvbEZvcm07 CisKKwljb2xUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1bShv YmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjb2xUdXApKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29sbGF0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0 SWQpOworCWNvbEZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVChjb2xUdXApOwor CisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xMQVRJT04gJXtpZGVudGl0eX1PIFJF RlJFU0ggVkVSU0lPTiIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShjb2xGb3JtLT5jb2xsbmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJICAgTmFtZVN0cihjb2xGb3JtLT5jb2xsbmFtZSkpKTsKKworCVJlbGVhc2VT eXNDYWNoZShjb2xUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFu IEFsdGVyRnVuY3Rpb25TdG10IChBTFRFUiBGVU5DVElPTikKKyAqCisgKiBHaXZlbiBhIGZ1bmN0 aW9uIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNP TgorICogYmxvYiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJGdW5jdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNl dHJlZSkKK3sKKwlBbHRlckZ1bmN0aW9uU3RtdCAqbm9kZSA9IChBbHRlckZ1bmN0aW9uU3RtdCAq KSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqYWx0ZXJGdW5jOworCU9ialRyZWUJICAgKnNpZ247 CisJSGVhcFR1cGxlCXByb2NUdXA7CisJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCUxpc3QJICAg KnBhcmFtcyA9IE5JTDsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxs OworCWludAkJCWk7CisKKwkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgKi8KKwlwcm9jVHVwID0g U2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQocHJvY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgZnVu Y3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3Bn X3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkg KgorCSAqIEFMVEVSIEZVTkNUSU9OICV7c2lnbmF0dXJlfXMgJXtkZWZpbml0aW9uOiB9cworCSAq LworCWFsdGVyRnVuYyA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBGVU5DVElPTiIsIDApOworCisJ LyoKKwkgKiBBTFRFUiBGVU5DVElPTiBkb2VzIG5vdCBjaGFuZ2Ugc2lnbmF0dXJlIHNvIHdlIGNh biB1c2UgY2F0YWxvZworCSAqIHRvIGdldCBpbnB1dCB0eXBlIE9pZHMuCisJICovCisJZm9yIChp ID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCXsKKwkJT2JqVHJlZQkgICAqdG1w b2JqID0gbmV3X29ianRyZWVfVkEoIiV7dHlwZX1UIiwgMCk7CisKKwkJYXBwZW5kX29iamVjdF9v YmplY3QodG1wb2JqLCAidHlwZSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NG b3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0sIC0xKSk7CisJCXBhcmFtcyA9IGxhcHBlbmQocGFy YW1zLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlzaWduID0gbmV3X29ianRy ZWUoIiIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc2lnbiwgIiV7aWRlbnRpdHl9RCIsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisJYXBwZW5kX2FycmF5X29iamVjdChzaWduLCAiKCV7 YXJndW1lbnRzOiwgfXMpIiwgcGFyYW1zKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVy RnVuYywgIiV7c2lnbmF0dXJlfXMiLCBzaWduKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+YWN0 aW9ucykKKwl7CisJCURlZkVsZW0JKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOwor CQlPYmpUcmVlCSAgICp0bXBvYmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5h bWUsICJ2b2xhdGlsaXR5IikgPT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo c3RyVmFsKGRlZmVsLT5hcmcpLCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJzdHJpY3QiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShp bnRWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIlJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVU IiA6CisJCQkJCQkJCSAiQ0FMTEVEIE9OIE5VTEwgSU5QVVQiLCAwKTsKKwkJfQorCQllbHNlIGlm IChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZWN1cml0eSIpID09IDApCisJCXsKKwkJCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKGludFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiU0VDVVJJ VFkgREVGSU5FUiIgOiAiU0VDVVJJVFkgSU5WT0tFUiIsIDApOworCQl9CisJCWVsc2UgaWYgKHN0 cmNtcChkZWZlbC0+ZGVmbmFtZSwgImxlYWtwcm9vZiIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKGludFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiTEVBS1BST09G IiA6ICJOT1QgTEVBS1BST09GIiwgMCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5k ZWZuYW1lLCAiY29zdCIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJD T1NUICV7Y29zdH1uIiwgMSwKKwkJCQkJCQkJICJjb3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJCQkJ CQkgZGVmR2V0TnVtZXJpYyhkZWZlbCkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ ZGVmbmFtZSwgInJvd3MiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi Uk9XUyIsIDApOworCQkJaWYgKGRlZkdldE51bWVyaWMoZGVmZWwpID09IDApCisJCQkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQllbHNlCisJCQkJYXBw ZW5kX2Zsb2F0X29iamVjdCh0bXBvYmosICIle3Jvd3N9biIsCisJCQkJCQkJCQlkZWZHZXROdW1l cmljKGRlZmVsKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2V0 IikgPT0gMCkKKwkJeworCQkJVmFyaWFibGVTZXRTdG10ICpzc3RtdCA9IChWYXJpYWJsZVNldFN0 bXQgKikgZGVmZWwtPmFyZzsKKwkJCWNoYXIgKnZhbHVlID0gRXh0cmFjdFNldFZhcmlhYmxlQXJn cyhzc3RtdCk7CisKKwkJCXRtcG9iaiA9IGRlcGFyc2VfRnVuY3Rpb25TZXQoc3N0bXQtPmtpbmQs IHNzdG10LT5uYW1lLCB2YWx1ZSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZu YW1lLCAic3VwcG9ydCIpID09IDApCisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQl0 bXBvYmogPSBuZXdfb2JqdHJlZSgiU1VQUE9SVCIpOworCisJCQlBc3NlcnQocHJvY0Zvcm0tPnBy b3N1cHBvcnQpOworCisJCQkvKgorCQkJICogV2Ugc2hvdWxkIHF1YWxpZnkgdGhlIHN1cHBvcnQg ZnVuY3Rpb24ncyBuYW1lIGlmIGl0IHdvdWxkbid0IGJlCisJCQkgKiByZXNvbHZlZCBieSBsb29r dXAgaW4gdGhlIGN1cnJlbnQgc2VhcmNoIHBhdGguCisJCQkgKi8KKwkJCWFyZ3R5cGVzWzBdID0g SU5URVJOQUxPSUQ7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle25hbWV9cyIs CisJCQkJCQkJCSBnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAx LAorCQkJCQkJCQkJCQkJCQlOSUwsIGFyZ3R5cGVzLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVM TCwKKwkJCQkJCQkJCQkJCQkJRVhQUl9LSU5EX05PTkUpKTsKKwkJfQorCQllbHNlIGlmIChzdHJj bXAoZGVmZWwtPmRlZm5hbWUsICJwYXJhbGxlbCIpID09IDApCisJCXsKKwkJCWNoYXIgKmZtdCA9 IHBzcHJpbnRmKCJQQVJBTExFTCAlcyIsIHN0clZhbChkZWZlbC0+YXJnKSk7CisJCQl0bXBvYmog PSBuZXdfb2JqdHJlZShmbXQpOworCQl9CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVy RnVuYywgIiV7ZGVmaW5pdGlvbjogfXMiLCBlbGVtcyk7CisKKwlSZWxlYXNlU3lzQ2FjaGUocHJv Y1R1cCk7CisKKwlyZXR1cm4gYWx0ZXJGdW5jOworfQorCisvKgorICogZGVwYXJzZSBhbiBBTFRF UiAuLi4gU0VUIFNDSEVNQSBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0FsdGVyT2JqZWN0U2NoZW1hU3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNl dHJlZSwKKwkJCQkJCQkgIE9iamVjdEFkZHJlc3Mgb2xkc2NoZW1hKQoreworCUFsdGVyT2JqZWN0 U2NoZW1hU3RtdCAqbm9kZSA9IChBbHRlck9iamVjdFNjaGVtYVN0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUJICAgKmFsdGVyU3RtdDsKKwljaGFyCSAgICpmbXQ7CisJY2hhcgkgICAqaWRlbnRp dHk7CisJY2hhcgkgICAqbmV3c2NoZW1hOworCWNoYXIJICAgKm9sZHNjaG5hbWU7CisJY2hhcgkg ICAqaWRlbnQ7CisKKwluZXdzY2hlbWEgPSBub2RlLT5uZXdzY2hlbWE7CisKKwkvKgorCSAqIFZl cmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiAlcyAle2lkZW50aXR5fXMgU0VUIFNDSEVNQSAl e25ld3NjaGVtYX1JCisJICovCisJZm10ID0gcHNwcmludGYoIkFMVEVSICVzIiwgc3RyaW5naWZ5 X29ianR5cGUobm9kZS0+b2JqZWN0VHlwZSkpOworCWFsdGVyU3RtdCA9IG5ld19vYmp0cmVlKGZt dCk7CisKKwkvKgorCSAqIFNpbmNlIHRoZSBjb21tYW5kIGhhcyBhbHJlYWR5IHRha2VuIHBsYWNl IGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YKKwkgKiBjYXRhbG9ncywgZ2V0T2JqZWN0SWRlbnRp dHkgcmV0dXJucyB0aGUgb2JqZWN0IG5hbWUgd2l0aCB0aGUgYWxyZWFkeQorCSAqIGNoYW5nZWQg c2NoZW1hLiAgVGhlIG91dHB1dCBvZiBvdXIgZGVwYXJzaW5nIG11c3QgcmV0dXJuIHRoZSBvcmln aW5hbAorCSAqIHNjaGVtYSBuYW1lIGhvd2V2ZXIsIHNvIHdlIGNob3AgdGhlIHNjaGVtYSBuYW1l IG9mZiB0aGUgaWRlbnRpdHkgc3RyaW5nCisJICogYW5kIHRoZW4gcHJlcGVuZCB0aGUgcXVvdGVk IHNjaGVtYSBuYW1lLgorCSAqCisJICogWFhYIFRoaXMgaXMgcHJldHR5IGNsdW5reS4gQ2FuIHdl IGRvIGJldHRlcj8KKwkgKi8KKwlpZGVudGl0eSA9IGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNz LCBmYWxzZSk7CisJb2xkc2NobmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShvbGRzY2hlbWEub2Jq ZWN0SWQpOworCWlmICghb2xkc2NobmFtZSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIHNjaGVtYSB3aXRoIE9JRCAldSIsCisJCQkgb2xkc2NoZW1hLm9iamVjdElkKTsK KworCWlkZW50ID0gcHNwcmludGYoIiVzJXMiLCBxdW90ZV9pZGVudGlmaWVyKG9sZHNjaG5hbWUp LAorCQkJCQkgaWRlbnRpdHkgKyBzdHJsZW4ocXVvdGVfaWRlbnRpZmllcihuZXdzY2hlbWEpKSk7 CisJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJTdG10LCAiJXtpZGVudGl0eX1zIiwgaWRlbnQp OworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJTdG10LCAiU0VUIFNDSEVNQSAle25ld3Nj aGVtYX1JIiwgbmV3c2NoZW1hKTsKKworCXJldHVybiBhbHRlclN0bXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgR1JBTlQvUkVWT0tFIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfR3JhbnRTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlJbnRlcm5hbEdyYW50 ICppc3RtdDsKKwlPYmpUcmVlCSAgICpncmFudFN0bXQ7CisJY2hhcgkgICAqZm10OworCWNoYXIJ ICAgKm9ianR5cGU7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9pZAkJ CWNsYXNzSWQ7CisJT2JqVHJlZQkgICAqdG1wOworCisJaXN0bXQgPSBjbWQtPmQuZ3JhbnQuaXN0 bXQ7CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBubyBvYmplY3RzIGZyb20gIkFMTCAuLi4gSU4g U0NIRU1BIiB0byBiZSBncmFudGVkLCB0aGVuCisJICogd2UgbmVlZCBub3QgZG8gYW55dGhpbmcu CisJICovCisJaWYgKGlzdG10LT5vYmplY3RzID09IE5JTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlz d2l0Y2ggKGlzdG10LT5vYmp0eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQljYXNl IE9CSkVDVF9UQUJMRToKKwkJCW9ianR5cGUgPSAiVEFCTEUiOworCQkJY2xhc3NJZCA9IFJlbGF0 aW9uUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKwkJCW9i anR5cGUgPSAiU0VRVUVOQ0UiOworCQkJY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKKwkJ CWJyZWFrOworCQljYXNlIE9CSkVDVF9ET01BSU46CisJCQlvYmp0eXBlID0gIkRPTUFJTiI7CisJ CQljbGFzc0lkID0gVHlwZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRkRX OgorCQkJb2JqdHlwZSA9ICJGT1JFSUdOIERBVEEgV1JBUFBFUiI7CisJCQljbGFzc0lkID0gRm9y ZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GT1JF SUdOX1NFUlZFUjoKKwkJCW9ianR5cGUgPSAiRk9SRUlHTiBTRVJWRVIiOworCQkJY2xhc3NJZCA9 IEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZVTkNU SU9OOgorCQkJb2JqdHlwZSA9ICJGVU5DVElPTiI7CisJCQljbGFzc0lkID0gUHJvY2VkdXJlUmVs YXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9QUk9DRURVUkU6CisJCQlvYmp0eXBl ID0gIlBST0NFRFVSRSI7CisJCQljbGFzc0lkID0gUHJvY2VkdXJlUmVsYXRpb25JZDsKKwkJCWJy ZWFrOworCQljYXNlIE9CSkVDVF9ST1VUSU5FOgorCQkJb2JqdHlwZSA9ICJST1VUSU5FIjsKKwkJ CWNsYXNzSWQgPSBQcm9jZWR1cmVSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNU X0xBTkdVQUdFOgorCQkJb2JqdHlwZSA9ICJMQU5HVUFHRSI7CisJCQljbGFzc0lkID0gTGFuZ3Vh Z2VSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNUOgorCQkJ b2JqdHlwZSA9ICJMQVJHRSBPQkpFQ1QiOworCQkJY2xhc3NJZCA9IExhcmdlT2JqZWN0UmVsYXRp b25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlvYmp0eXBlID0gIlND SEVNQSI7CisJCQljbGFzc0lkID0gTmFtZXNwYWNlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQlj YXNlIE9CSkVDVF9UWVBFOgorCQkJb2JqdHlwZSA9ICJUWVBFIjsKKwkJCWNsYXNzSWQgPSBUeXBl UmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9EQVRBQkFTRToKKwkJY2FzZSBP QkpFQ1RfVEFCTEVTUEFDRToKKwkJCW9ianR5cGUgPSAiIjsKKwkJCWNsYXNzSWQgPSBJbnZhbGlk T2lkOworCQkJZWxvZyhFUlJPUiwgImdsb2JhbCBvYmplY3RzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJ CWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgT0JKRUNUIHZhbHVl ICVkIiwgaXN0bXQtPm9ianR5cGUpOworCX0KKworCS8qIEdSQU5UIFRPIG9yIFJFVk9LRSBGUk9N ICovCisJaWYgKGlzdG10LT5pc19ncmFudCkKKwkJZm10ID0gcHNwcmludGYoIkdSQU5UIik7CisJ ZWxzZQorCQlmbXQgPSBwc3ByaW50ZigiUkVWT0tFIik7CisKKwlncmFudFN0bXQgPSBuZXdfb2Jq dHJlZV9WQShmbXQsIDApOworCisJLyogYnVpbGQgbGlzdCBvZiBwcml2aWxlZ2VzIHRvIGdyYW50 L3Jldm9rZSAqLworCWlmIChpc3RtdC0+YWxsX3ByaXZzKQorCXsKKwkJdG1wID0gbmV3X29ianRy ZWVfVkEoIkFMTCBQUklWSUxFR0VTIiwgMCk7CisJCWxpc3QgPSBsaXN0X21ha2UxKG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCX0KKwllbHNlCisJeworCQlsaXN0ID0gTklMOworCisJCWlmIChp c3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9JTlNFUlQpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfc3RyaW5nX29iamVjdCgiSU5TRVJUIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBB Q0xfU0VMRUNUKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlNF TEVDVCIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1VQREFURSkKKwkJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJVUERBVEUiKSk7CisJCWlmIChpc3Rt dC0+cHJpdmlsZWdlcyAmIEFDTF9ERUxFVEUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf c3RyaW5nX29iamVjdCgiREVMRVRFIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xf VFJVTkNBVEUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiVFJV TkNBVEUiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9SRUZFUkVOQ0VTKQorCQkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlJFRkVSRU5DRVMiKSk7CisJ CWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9UUklHR0VSKQorCQkJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlRSSUdHRVIiKSk7CisJCWlmIChpc3RtdC0+cHJpdmls ZWdlcyAmIEFDTF9FWEVDVVRFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19v YmplY3QoIkVYRUNVVEUiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9VU0FHRSkK KwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJVU0FHRSIpKTsKKwkJ aWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NSRUFURSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19zdHJpbmdfb2JqZWN0KCJDUkVBVEUiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdl cyAmIEFDTF9DUkVBVEVfVEVNUCkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdf b2JqZWN0KCJURU1QT1JBUlkiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9DT05O RUNUKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIkNPTk5FQ1Qi KSk7CisKKwkJaWYgKCFpc3RtdC0+aXNfZ3JhbnQgJiYgaXN0bXQtPmdyYW50X29wdGlvbikKKwkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50U3RtdCwgIiV7Z3JhbnRfb3B0aW9ufXMiLAorCQkJ CQkJCQkgaXN0bXQtPmdyYW50X29wdGlvbiA/ICAiR1JBTlQgT1BUSU9OIEZPUiIgOiAiIik7CisK KwkJaWYgKGlzdG10LT5jb2xfcHJpdnMgIT0gTklMKQorCQl7CisJCQlMaXN0Q2VsbCAgICpvY2Vs bDsKKworCQkJZm9yZWFjaChvY2VsbCwgaXN0bXQtPmNvbF9wcml2cykKKwkJCXsKKwkJCQlBY2Nl c3NQcml2ICpwcml2ID0gbGZpcnN0KG9jZWxsKTsKKwkJCQlMaXN0ICAgKmNvbHMgPSBOSUw7CisK KwkJCQl0bXAgPSBuZXdfb2JqdHJlZSgiIik7CisJCQkJZm9yZWFjaChjZWxsLCBwcml2LT5jb2xz KQorCQkJCXsKKwkJCQkJU3RyaW5nICpjb2xuYW1lID0gbGZpcnN0X25vZGUoU3RyaW5nLCBjZWxs KTsKKworCQkJCQljb2xzID0gbGFwcGVuZChjb2xzLAorCQkJCQkJCQkgICBuZXdfc3RyaW5nX29i amVjdChzdHJWYWwoY29sbmFtZSkpKTsKKwkJCQl9CisJCQkJYXBwZW5kX2FycmF5X29iamVjdCh0 bXAsICIoJXtjb2xzOiwgfXMpIiwgY29scyk7CisKKwkJCQlpZiAocHJpdi0+cHJpdl9uYW1lID09 IE5VTEwpCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50U3RtdCwgIiV7cHJpdn1zIiwg IkFMTCBQUklWSUxFR0VTIik7CisJCQkJZWxzZQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChn cmFudFN0bXQsICIle3ByaXZ9cyIsIHByaXYtPnByaXZfbmFtZSk7CisKKwkJCQlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCX0KKwkJfQorCX0KKwlhcHBl bmRfYXJyYXlfb2JqZWN0KGdyYW50U3RtdCwgIiV7cHJpdmlsZWdlczosIH1zIE9OIiwgbGlzdCk7 CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0bXQsICIle29ianR5cGV9cyIsIG9ianR5 cGUpOworCisJLyogdGFyZ2V0IG9iamVjdHMuICBXZSB1c2Ugb2JqZWN0IGlkZW50aXRpZXMgaGVy ZSAqLworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBpc3RtdC0+b2JqZWN0cykKKwl7CisJ CU9pZAkJb2JqaWQgPSBsZmlyc3Rfb2lkKGNlbGwpOworCQlPYmplY3RBZGRyZXNzIGFkZHI7CisK KwkJYWRkci5jbGFzc0lkID0gY2xhc3NJZDsKKwkJYWRkci5vYmplY3RJZCA9IG9iamlkOworCQlh ZGRyLm9iamVjdFN1YklkID0gMDsKKworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0 eX1zIiwgMSwKKwkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSAg IGdldE9iamVjdElkZW50aXR5KCZhZGRyLCBmYWxzZSkpOworCisJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGdy YW50U3RtdCwgIiV7cHJpdnRhcmdldDosIH1zIiwgbGlzdCk7CisKKwlpZiAoaXN0bXQtPmlzX2dy YW50KQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhncmFudFN0bXQsICJUTyIpOworCWVsc2UKKwkJ YXBwZW5kX2Zvcm1hdF9zdHJpbmcoZ3JhbnRTdG10LCAiRlJPTSIpOworCisJLyogbGlzdCBvZiBn cmFudGVlcyAqLworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBpc3RtdC0+Z3JhbnRlZXMp CisJeworCQlPaWQJCWdyYW50ZWUgPSBsZmlyc3Rfb2lkKGNlbGwpOworCisJCXRtcCA9IG5ld19v Ymp0cmVlX2Zvcl9yb2xlX2lkKGdyYW50ZWUpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGdyYW50U3Rt dCwgIiV7Z3JhbnRlZXM6LCB9cyIsIGxpc3QpOworCisJLyogdGhlIHdvcmRpbmcgb2YgdGhlIGdy YW50IG9wdGlvbiBpcyB2YXJpYWJsZSAuLi4gKi8KKwlpZiAoaXN0bXQtPmlzX2dyYW50KQorCQlh cHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0bXQsICIle2dyYW50X29wdGlvbn1zIiwKKwkJCQkJ CQkgaXN0bXQtPmdyYW50X29wdGlvbiA/ICAiV0lUSCBHUkFOVCBPUFRJT04iIDogIiIpOworCisJ aWYgKGlzdG10LT5ncmFudG9yX3VpZCkKKwl7CisJCUhlYXBUdXBsZQlyb2x0dXA7CisJCWNoYXIJ ICAgKnJvbGVuYW1lOworCisJCXJvbHR1cCA9IFNlYXJjaFN5c0NhY2hlMShBVVRIT0lELCBPYmpl Y3RJZEdldERhdHVtKGlzdG10LT5ncmFudG9yX3VpZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFs aWQocm9sdHVwKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfVU5E RUZJTkVEX09CSkVDVCksCisJCQkJCSBlcnJtc2coInJvbGUgd2l0aCBPSUQgJXUgZG9lcyBub3Qg ZXhpc3QiLCBpc3RtdC0+Z3JhbnRvcl91aWQpKSk7CisKKwkJcm9sZW5hbWUgPSBOYW1lU3RyKCgo Rm9ybV9wZ19hdXRoaWQpIEdFVFNUUlVDVChyb2x0dXApKS0+cm9sbmFtZSk7CisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGdyYW50U3RtdCwgIkdSQU5URUQgQlkgJXtyb2xlbmFtZX1zIiwgcm9sZW5h bWUpOworCQlSZWxlYXNlU3lzQ2FjaGUocm9sdHVwKTsKKwl9CisKKwlpZiAoIWlzdG10LT5pc19n cmFudCkKKwl7CisJCWlmIChpc3RtdC0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKQorCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QoZ3JhbnRTdG10LCAiJXtjYXNjYWRlfXMiLCAiQ0FTQ0FERSIpOwor CQllbHNlCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0bXQsICIle2Nhc2NhZGV9cyIs ICIiKTsKKwl9CisKKwlyZXR1cm4gZ3JhbnRTdG10OworfQorCisvKgorICogRGVwYXJzZSBhbiBB bHRlck9wZXJhdG9yU3RtdCAoQUxURVIgT1BFUkFUT1IgLi4uIFNFVCAuLi4pLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3BlcmF0b3JTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZSAgIAlvcHJUdXA7CisJQWx0ZXJPcGVyYXRvclN0 bXQgKm5vZGUgPSAoQWx0ZXJPcGVyYXRvclN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJCSAg ICphbHRlcm9wOworCUZvcm1fcGdfb3BlcmF0b3Igb3ByRm9ybTsKKwlMaXN0Q2VsbAkgICAqY2Vs bDsKKwlMaXN0CQkgICAqbGlzdCA9IE5JTDsKKworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShP UEVST0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKG9wclR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVy YXRvciB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0 b3IpIEdFVFNUUlVDVChvcHJUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJ ICogQUxURVIgT1BFUkFUT1IgJXtpZGVudGl0eX1PICgle2xlZnRfdHlwZX1ULCAle3JpZ2h0X3R5 cGV9VCkgU0VUCisJICogKCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlhbHRlcm9wID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIE9QRVJBVE9SICV7aWRlbnRpdHl9TyIsIDEsCisJCQkJCQkJICJpZGVudGl0 eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcHJG b3JtLT5vcHJuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wckZvcm0tPm9wcm5h bWUpKSk7CisKKwkvKiBMRUZUQVJHICovCisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVm dCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyb3AsICIoJXtsZWZ0X3R5cGV9VCIsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcmxlZnQsIC0xKSk7CisJZWxz ZQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlcm9wLCAiKCV7bGVmdF90eXBlfXMiLCAiTk9O RSIpOworCisJLyogUklHSFRBUkcgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJs ZWZ0KSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJvcCwgIiwgJXtyaWdodF90eXBlfVQp IiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsK KworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gKmVsZW0gPSAo RGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUgKnRtcG9iaiA9IE5VTEw7CisKKwkJ aWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAicmVzdHJpY3QiKSA9PSAwKQorCQl7CisJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiUkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAicmVzdHJpY3QiKTsKKwkJCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9w cnJlc3QpKQorCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQi LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJCQllbHNlCisJCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9cyIsICJOT05FIik7CisJ CX0KKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJqb2luIikgPT0gMCkKKwkJewor CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkpPSU49IiwgMSwKKwkJCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiam9pbiIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3By am9pbikpCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIs CisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwkJCWVsc2UKKwkJCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1zIiwgIk5PTkUiKTsKKwkJ fQorCisJCUFzc2VydCh0bXBvYmopOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyb3AsICJT RVQgKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShvcHJUdXApOwor CisJcmV0dXJuIGFsdGVyb3A7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFMVEVSIE9QRVJBVE9S IEZBTUlMWSBBREQvRFJPUCBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0FsdGVyT3BGYW1pbHkoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9ialRyZWUJICAgKmFs dGVyT3BGYW07CisJQWx0ZXJPcEZhbWlseVN0bXQgKnN0bXQgPSAoQWx0ZXJPcEZhbWlseVN0bXQg KikgY21kLT5wYXJzZXRyZWU7CisJSGVhcFR1cGxlCWZ0cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9w ZkZvcm07CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJZnRwID0gU2Vh cmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELAorCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGNtZC0+ ZC5vcGZhbS5hZGRyZXNzLm9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZ0cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkg JXUiLAorCQkJIGNtZC0+ZC5vcGZhbS5hZGRyZXNzLm9iamVjdElkKTsKKwlvcGZGb3JtID0gKEZv cm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChmdHApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRh eAorCSAqCisJICogQUxURVIgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2Ft bmFtZX1JIEFERC9EUk9QCisJICogJXtpdGVtczosIH1zCisJICovCisJYWx0ZXJPcEZhbSA9IG5l d19vYmp0cmVlX1ZBKCJBTFRFUiBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EICIKKwkJCQkJ CQkJIlVTSU5HICV7YW1uYW1lfUkiLCAyLAorCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJCQkgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSksCisJCQkJCQkJ CSJhbW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBzdG10LT5hbW5hbWUpOworCisJbGlzdCA9IE5JTDsK Kwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5vcGZhbS5vcGVyYXRvcnMpCisJeworCQlPcEZhbWlseU1l bWJlciAqb3BlciA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOworCisJCS8q CisJCSAqIFZlcmJvc2Ugc3ludGF4CisJCSAqCisJCSAqIE9QRVJBVE9SICV7bnVtfW4gJXtvcGVy YXRvcn1PKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle3B1cnBvc2V9cworCQkgKi8KKwkJdG1wb2Jq ID0gbmV3X29ianRyZWVfVkEoIk9QRVJBVE9SICV7bnVtfW4iLCAxLAorCQkJCQkJCSAibnVtIiwg T2JqVHlwZUludGVnZXIsIG9wZXItPm51bWJlcik7CisKKwkJLyogQWRkIHRoZSBvcGVyYXRvciBu YW1lOyB0aGUgRFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZSB0aGlzICovCisJCWlmICghc3RtdC0+aXNE cm9wKQorCQl7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle29wZXJhdG9yfU8i LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJCSBvcGVyLT5vYmplY3QpKTsKKwkJfQorCisJCS8qIEFkZCB0aGUg dHlwZXMgKi8KKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiKCV7bHR5cGV9VCwiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5sZWZ0dHlwZSwgLTEpKTsKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtydHlwZX1UKSIsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQgdGhlIEZPUiBT RUFSQ0ggLyBGT1IgT1JERVIgQlkgY2xhdXNlOyBub3QgaW4gdGhlIERST1AgY2FzZSAqLworCQlp ZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJaWYgKG9wZXItPnNvcnRmYW1pbHkgPT0gSW52YWxp ZE9pZCkKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3B1cnBvc2V9cyIsICJG T1IgU0VBUkNIIik7CisJCQllbHNlCisJCQl7CisJCQkJT2JqVHJlZQkgICAqdG1wb2JqMjsKKwor CQkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiRk9SIE9SREVSIEJZIiwgMCk7CisJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqMiwgIiV7b3BmYW1pbHl9RCIsCisJCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yRmFtaWx5UmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJCQkgb3Blci0+c29ydGZhbWlseSkpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgdG1wb2JqMik7CisJCQl9CisJCX0KKworCQlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlmb3JlYWNo KGNlbGwsIGNtZC0+ZC5vcGZhbS5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKnBy b2MgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRtcG9iajsKKworCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiRlVOQ1RJT04gJXtudW19biAoJXtsdHlwZX1ULCAle3J0eXBlfVQpIiwg MywKKwkJCQkJCQkgIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBwcm9jLT5udW1iZXIsCisJCQkJCQkJ ICJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHBy b2MtPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJICJydHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBB ZGQgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGFyZyB0eXBlczsgdGhlIERST1AgY2FzZSBkb2Vzbid0 IGhhdmUgdGhpcyAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJSGVhcFR1cGxlCXBy b2NUdXA7CisJCQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJCQlPaWQJCSAgICpwcm9hcmd0eXBl czsKKwkJCUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7CisJCQlpbnQJCQlpOworCisJCQlwcm9jVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvYy0+b2JqZWN0 KSk7CisJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2MtPm9iamVjdCk7CisJ CQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCQkJcHJv YXJndHlwZXMgPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzOworCQkJZm9yIChpID0gMDsg aSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCQkJeworCQkJCU9ialRyZWUJICAgKmFyZzsK KworCQkJCWFyZyA9IG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2FyZ3R5cGVzW2ldLCAtMSk7CisJ CQkJYXJnbGlzdCA9IGxhcHBlbmQoYXJnbGlzdCwgbmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJ CQl9CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7ZnVuY3Rpb259RCIsCisJ CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSkpOworCisJCQlhcHBl bmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIoIik7CisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRt cG9iaiwgIiV7YXJndHlwZXM6LCB9VCIsIGFyZ2xpc3QpOworCQkJYXBwZW5kX2Zvcm1hdF9zdHJp bmcodG1wb2JqLCAiKSIpOworCisJCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJCX0KKwor CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisK KwlpZiAoc3RtdC0+aXNEcm9wKQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlck9wRmFtLCAi RFJPUCIpOworCWVsc2UKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJPcEZhbSwgIkFERCIp OworCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlck9wRmFtLCAiJXtpdGVtczosIH1zIiwgbGlz dCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZnRwKTsKKworCXJldHVybiBhbHRlck9wRmFtOworfQor CisvKgorICogRGVwYXJzZSBhIEFsdGVyT3duZXJTdG10IChBTFRFUiAuLi4gT1dORVIgVE8gLi4u KS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck93bmVyU3RtdChPYmplY3RB ZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlck93bmVyU3RtdCAqbm9k ZSA9IChBbHRlck93bmVyU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJICAgKm93bmVyU3Rt dDsKKwljaGFyCQkgICAqZm10OworCisJZm10ID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50 aXR5fXMgT1dORVIgVE8gJSV7bmV3b3duZXJ9SSIsCisJCQkJICAgc3RyaW5naWZ5X29ianR5cGUo bm9kZS0+b2JqZWN0VHlwZSkpOworCisJb3duZXJTdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAy LAorCQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJICAgZ2V0T2Jq ZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKSwKKwkJCQkJCQkgICAibmV3b3duZXIiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCSAgIGdldF9yb2xlc3BlY19uYW1lKG5vZGUtPm5ld293bmVyKSk7 CisKKwlyZXR1cm4gb3duZXJTdG10OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclNlcVN0 bXQuCisgKgorICogR2l2ZW4gYSBzZXF1ZW5jZSBPSUQgYW5kIGEgcGFyc2V0cmVlIHRoYXQgbW9k aWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNv bW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJTZXFTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUJCSphbHRlclNlcTsKKwlPYmpU cmVlCQkqdG1wb2JqOworCVJlbGF0aW9uCSByZWxhdGlvbjsKKwlGb3JtX3BnX3NlcXVlbmNlX2Rh dGEgc2VxZGF0YTsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOwor CUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNl cXR1cGxlOworCUFsdGVyU2VxU3RtdCAqYWx0ZXJTZXFTdG10ID0gKEFsdGVyU2VxU3RtdCAqKSBw YXJzZXRyZWU7CisKKwkvKgorCSAqIFNlcXVlbmNlIGZvciBJREVOVElUWSBDT0xVTU4gb3V0cHV0 IHNlcGFyYXRlbHkodmlhIENSRUFURSBUQUJMRSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0dXJu IGVtcHR5IGhlcmUuCisJICovCisJaWYgKGFsdGVyU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQly ZXR1cm4gTlVMTDsKKworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElkKTsK KworCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7 CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkgICBP YmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1 cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlICV1 IiwKKwkJCSBvYmplY3RJZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNU UlVDVChzZXF0dXBsZSk7CisKKwlhbHRlclNlcSA9IG5ld19vYmp0cmVlKCJBTFRFUiBTRVFVRU5D RSIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs YXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclNlcSwgIiV7aWRlbnRpdHl9RCIs IHRtcG9iaik7CisKKwlmb3JlYWNoKGNlbGwsICgoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZSkt Pm9wdGlvbnMpCisJeworCQlEZWZFbGVtICplbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwp OworCQlPYmpFbGVtICpuZXdlbG07CisKKwkJaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiY2Fj aGUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfQ2FjaGUoYWx0ZXJTZXEsIHNlcWZv cm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjeWNsZSIpID09 IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DeWNsZShhbHRlclNlcSwgc2VxZm9ybSwgZmFs c2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImluY3JlbWVudCIpID09IDAp CisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShhbHRlclNlcSwgc2VxZm9ybSwg ZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm1pbnZhbHVlIikgPT0g MCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX01pbnZhbHVlKGFsdGVyU2VxLCBzZXFmb3JtLCBm YWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWF4dmFsdWUiKSA9PSAw KQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWF4dmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZh bHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJzdGFydCIpID09IDApCisJ CQluZXdlbG0gPSBkZXBhcnNlX1NlcV9TdGFydHdpdGgoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNl KTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJyZXN0YXJ0IikgPT0gMCkKKwkJ CW5ld2VsbSA9IGRlcGFyc2VfU2VxX1Jlc3RhcnQoYWx0ZXJTZXEsIHNlcWRhdGEpOworCQllbHNl IGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm93bmVkX2J5IikgPT0gMCkKKwkJCW5ld2VsbSA9 IGRlcGFyc2VfU2VxX093bmVkQnkoYWx0ZXJTZXEsIG9iamVjdElkLCBmYWxzZSk7CisJCWVsc2UK KwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHNlcXVlbmNlIG9wdGlvbiAlcyIsIGVsZW0tPmRlZm5h bWUpOworCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3ZWxtKTsKKwl9CisKKwlhcHBlbmRf YXJyYXlfb2JqZWN0KGFsdGVyU2VxLCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCXRh YmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVsYXRp b24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gYWx0ZXJTZXE7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGFuIEFsdGVyVHlwZVN0bXQuCisgKgorICogR2l2ZW4gYSB0eXBlIE9JRCBhbmQgYSBw YXJzZXRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2Vu dGluZyB0aGUgYWx0ZXIgdHlwZS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRl clR5cGVTZXRTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqY21kKQoreworCUFsdGVyVHlwZVN0bXQg KmFsdGVyVHlwZVNldFN0bXQgPSAoQWx0ZXJUeXBlU3RtdCAqKWNtZDsKKwlPYmpUcmVlCQkqYWx0 ZXJUeXBlOworCUxpc3RDZWxsICAgKnBsOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUhlYXBU dXBsZSAgIHR5cFR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKworCXR5cFR1cCA9IFNlYXJj aFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciB0eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9w Z190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCWFsdGVyVHlwZSA9IG5ld19vYmp0cmVlKCJB TFRFUiBUWVBFIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJUeXBlLCAiJXtpZGVudGl0 eX1EIFNFVCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJZm9yZWFjaChwbCwgYWx0ZXJUeXBl U2V0U3RtdC0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmRlZmVsID0gKERlZkVsZW0gKikg bGZpcnN0KHBsKTsKKwkJT2JqRWxlbSAqbmV3ZWxtOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJzdG9yYWdlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9TdG9yYWdl KGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJyZWNl aXZlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9SZWNlaXZlKGFsdGVyVHlwZSwg dHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZW5kIikgPT0gMCkKKwkJ CW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9TZW5kKGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChz dHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0eXBtb2RfaW4iKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVw YXJzZV9UeXBlX1R5cG1vZF9JbihhbHRlclR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRl ZmVsLT5kZWZuYW1lLCAidHlwbW9kX291dCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5 cGVfVHlwbW9kX091dChhbHRlclR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5k ZWZuYW1lLCAiYW5hbHl6ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfQW5hbHl6 ZShhbHRlclR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3Vi c2NyaXB0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9TdWJzY3JpcHQoYWx0ZXJU eXBlLCB0eXBGb3JtKTsKKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgdHlwZSBvcHRp b24gJXMiLCBkZWZlbC0+ZGVmbmFtZSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdl bG0pOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJUeXBlLCAiKCV7ZGVmaW5pdGlv bjogfXMpIiwgZWxlbXMpOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4g YWx0ZXJUeXBlOworfQorCisvKgorICogRGVwYXJzZSBhIENvbXBvc2l0ZVR5cGVTdG10IChDUkVB VEUgVFlQRSBBUykKKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3Jl YXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db21wb3NpdGVU eXBlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDb21wb3NpdGVUeXBl U3RtdCAqbm9kZSA9IChDb21wb3NpdGVUeXBlU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkg ICAqY29tcG9zaXRlOworCUhlYXBUdXBsZQl0eXB0dXA7CisJRm9ybV9wZ190eXBlIHR5cGZvcm07 CisJUmVsYXRpb24JdHlwZXJlbDsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJTGlzdAkgICAqdGFi bGVlbHRzID0gTklMOworCisJLyogRmluZCB0aGUgcGdfdHlwZSBlbnRyeSBhbmQgb3BlbiB0aGUg Y29ycmVzcG9uZGluZyByZWxhdGlvbiAqLworCXR5cHR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBF T0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHR5cHR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlICV1 Iiwgb2JqZWN0SWQpOworCXR5cGZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwdHVw KTsKKwl0eXBlcmVsID0gcmVsYXRpb25fb3Blbih0eXBmb3JtLT50eXByZWxpZCwgQWNjZXNzU2hh cmVMb2NrKTsKKworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRS ZWxhdGlvbk5hbWUodHlwZXJlbCksCisJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHR5cGVyZWwp KTsKKworCWNvbXBvc2l0ZSA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSIsIDApOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGNvbXBvc2l0ZSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBv YmplY3RJZCkpOworCisJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHR5cGVyZWws IG5vZGUtPmNvbGRlZmxpc3QsIGRwY29udGV4dCwKKwkJCQkJCQkJCSAgZmFsc2UsCQkvKiBub3Qg dHlwZWQgKi8KKwkJCQkJCQkJCSAgdHJ1ZSk7CQkvKiBjb21wb3NpdGUgdHlwZSAqLworCisJYXBw ZW5kX2FycmF5X29iamVjdChjb21wb3NpdGUsICJBUyAoJXtjb2x1bW5zOiwgfXMpIiwgdGFibGVl bHRzKTsKKworCXRhYmxlX2Nsb3NlKHR5cGVyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJUmVsZWFz ZVN5c0NhY2hlKHR5cHR1cCk7CisKKwlyZXR1cm4gY29tcG9zaXRlOworfQorCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0NyZWF0ZUNvbnZlcnNpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJSGVhcFR1cGxlICAgY29uVHVwOworCVJlbGF0aW9uCWNvbnZyZWw7CisJRm9y bV9wZ19jb252ZXJzaW9uIGNvbkZvcm07CisJT2JqVHJlZQkgICAqY2NTdG10LCAqdG1wT2JqOwor CisJY29udnJlbCA9IHRhYmxlX29wZW4oQ29udmVyc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJY29uVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjb252cmVsLCBBbnVt X3BnX2NvbnZlcnNpb25fb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNv blR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb252ZXJzaW9u IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNvbkZvcm0gPSAoRm9ybV9wZ19jb252ZXJzaW9u KSBHRVRTVFJVQ1QoY29uVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAq IENSRUFURSAle2RlZmF1bHR9cyBDT05WRVJTSU9OICV7aWRlbnRpdHl9RCBGT1IgJXtzb3VyY2V9 TCBUTyAle2Rlc3R9TAorCSAqIEZST00gJXtmdW5jdGlvbn1ECisJICovCisJY2NTdG10ID0gbmV3 X29ianRyZWUoIkNSRUFURSIpOworCisKKwkvKiBBZGQgdGhlIERFRkFVTFQgY2xhdXNlICovCisJ YXBwZW5kX3N0cmluZ19vYmplY3QoY2NTdG10LCAiZGVmYXVsdCIsCisJCQkJCQkgY29uRm9ybS0+ Y29uZGVmYXVsdCA/ICJERUZBVUxUIiA6ICIiKTsKKworCXRtcE9iaiA9IG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShjb25Gb3JtLT5jb25uYW1lc3BhY2UsIE5hbWVTdHIoY29uRm9ybS0+Y29ubmFt ZSkpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNjU3RtdCwgIkNPTlZFUlNJT04gJXtpZGVudGl0 eX1EIiwgdG1wT2JqKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjY1N0bXQsICJGT1IgJXtzb3Vy Y2V9TCIsIChjaGFyICopCisJCQkJCQkgcGdfZW5jb2RpbmdfdG9fY2hhcihjb25Gb3JtLT5jb25m b3JlbmNvZGluZykpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNjU3RtdCwgIlRPICV7ZGVzdH1M IiwgKGNoYXIgKikKKwkJCQkJCSBwZ19lbmNvZGluZ190b19jaGFyKGNvbkZvcm0tPmNvbnRvZW5j b2RpbmcpKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjY1N0bXQsICJGUk9NICV7ZnVuY3Rpb259 RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJIGNvbkZvcm0tPmNvbnByb2MpKTsKKworCXRhYmxlX2Nsb3NlKGNv bnZyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY2NTdG10OworfQorCisvKgorICog RGVwYXJzZSBhIENyZWF0ZUVudW1TdG10IChDUkVBVEUgVFlQRSBBUyBFTlVNKQorICoKKyAqIEdp dmVuIGEgdHlwZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4g YW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUVudW1TdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUVudW1TdG10ICpub2RlID0gKENyZWF0ZUVudW1TdG10 ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICplbnVtdHlwZTsKKwlMaXN0CSAgICp2YWx1ZXM7 CisJTGlzdENlbGwgICAqY2VsbDsKKworCWVudW10eXBlID0gbmV3X29ianRyZWUoIkNSRUFURSBU WVBFIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QoZW51bXR5cGUsICIle2lkZW50aXR5fUQiLAor CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCXZhbHVlcyA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIG5v ZGUtPnZhbHMpCisJeworCQlTdHJpbmcgICAqdmFsID0gbGZpcnN0X25vZGUoU3RyaW5nLCBjZWxs KTsKKworCQl2YWx1ZXMgPSBsYXBwZW5kKHZhbHVlcywgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFs KHZhbCkpKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGVudW10eXBlLCAiQVMgRU5VTSAo JXt2YWx1ZXM6LCB9TCkiLCB2YWx1ZXMpOworCXJldHVybiBlbnVtdHlwZTsKK30KKworLyoKKyAq IGRlcGFyc2VfQ3JlYXRlRXh0ZW5zaW9uU3RtdAorICoJCWRlcGFyc2UgYSBDcmVhdGVFeHRlbnNp b25TdG10CisgKgorICogR2l2ZW4gYW4gZXh0ZW5zaW9uIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0 aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRpbmcgdGhl IGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Ny ZWF0ZUV4dGVuc2lvblN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3Jl YXRlRXh0ZW5zaW9uU3RtdCAqbm9kZSA9IChDcmVhdGVFeHRlbnNpb25TdG10ICopIHBhcnNldHJl ZTsKKwlSZWxhdGlvbiAgICBwZ19leHRlbnNpb247CisJSGVhcFR1cGxlICAgZXh0VHVwOworCUZv cm1fcGdfZXh0ZW5zaW9uIGV4dEZvcm07CisJT2JqVHJlZQkgICAqZXh0U3RtdDsKKwlPYmpUcmVl CSAgICp0bXA7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkg KiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIEVYVEVOU0lPTiAle2lmX25vdF9leGlz dHN9cyAle2lkZW50aXR5fUkgJXtvcHRpb25zOiB9cworCSAqLworCisJcGdfZXh0ZW5zaW9uID0g dGFibGVfb3BlbihFeHRlbnNpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWV4dFR1 cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfZXh0ZW5zaW9uLCBBbnVtX3BnX2V4dGVu c2lvbl9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZXh0VHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGV4dGVuc2lvbiB3aXRoIE9JRCAl dSIsCisJCQkgb2JqZWN0SWQpOworCWV4dEZvcm0gPSAoRm9ybV9wZ19leHRlbnNpb24pIEdFVFNU UlVDVChleHRUdXApOworCisJZXh0U3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUgRVhURU5TSU9O Iik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChleHRTdG10LCAiJXtpZl9ub3RfZXhpc3RzfXMi LAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisK KwlhcHBlbmRfc3RyaW5nX29iamVjdChleHRTdG10LCAiJXtuYW1lfUkiLCBub2RlLT5leHRuYW1l KTsKKworCS8qIExpc3Qgb2Ygb3B0aW9ucyAqLworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxs LCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0 KGNlbGwpOworCisJCWlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAic2NoZW1hIikgPT0gMCkKKwkJ eworCQkJLyogc2tpcCB0aGlzIG9uZTsgd2UgYWRkIG9uZSB1bmNvbmRpdGlvbmFsbHkgYmVsb3cg Ki8KKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJu ZXdfdmVyc2lvbiIpID09IDApCisJCXsKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWRVJTSU9O ICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZlcnNp b24iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmcob3B0 KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJ fQorCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAib2xkX3ZlcnNpb24iKSA9PSAwKQor CQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRlJPTSAle3ZlcnNpb259TCIsIDIsCisJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJmcm9tIiwKKwkJCQkJCQkJICJ2ZXJzaW9uIiwg T2JqVHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwg InVuc3VwcG9ydGVkIG9wdGlvbiAlcyIsIG9wdC0+ZGVmbmFtZSk7CisJfQorCisJLyogQWRkIHRo ZSBTQ0hFTUEgb3B0aW9uICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNDSEVNQSAle3NjaGVt YX1JIiwKKwkJCQkJCSAyLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzY2hlbWEiLAorCQkJCQkJ ICJzY2hlbWEiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9uYW1lc3BhY2VfbmFtZShleHRG b3JtLT5leHRuYW1lc3BhY2UpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIGRvbmUgKi8KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGV4dFN0bXQs ICIle29wdGlvbnM6IH1zIiwgbGlzdCk7CisKKwl0YWJsZV9jbG9zZShwZ19leHRlbnNpb24sIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gZXh0U3RtdDsKK30KKworLyoKKyAqIElmIGEgY29s dW1uIG5hbWUgaXMgc3BlY2lmaWVkLCBhZGQgYW4gZWxlbWVudCBmb3IgaXQ7IG90aGVyd2lzZSBp dCdzIGEKKyAqIHRhYmxlLWxldmVsIG9wdGlvbi4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9GZHdPcHRpb25zKExpc3QgKm9wdGlvbnMsIGNoYXIgKmNvbG5hbWUpCit7CisJT2JqVHJl ZQkgICAqdG1wOworCisJaWYgKGNvbG5hbWUpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRF UiBDT0xVTU4gJXtjb2x1bW59SSIsCisJCQkJCQkJIDEsICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5n LCBjb2xuYW1lKTsKKwllbHNlCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJPUFRJT05TIiwgMCk7 CisKKwlpZiAob3B0aW9ucyAhPSBOSUwpCisJeworCQlMaXN0CSAgICpvcHRvdXQgPSBOSUw7CisJ CUxpc3RDZWxsICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCBvcHRpb25zKQorCQl7CisJCQlE ZWZFbGVtCSAgICplbGVtOworCQkJT2JqVHJlZQkgICAqb3B0OworCisJCQllbGVtID0gKERlZkVs ZW0gKikgbGZpcnN0KGNlbGwpOworCisJCQlzd2l0Y2ggKGVsZW0tPmRlZmFjdGlvbikKKwkJCXsK KwkJCQljYXNlIERFRkVMRU1fVU5TUEVDOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiJXts YWJlbH1JICV7dmFsdWV9TCIsIDIsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcs IGVsZW0tPmRlZm5hbWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJCQkJIGRlZkdl dEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKwkJCQkJYnJlYWs7CisJCQkJY2Fz ZSBERUZFTEVNX1NFVDoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIlNFVCAle2xhYmVsfUkg JXt2YWx1ZX1MIiwgMiwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ ZGVmbmFtZSwKKwkJCQkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkg ZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkJCQkgZGVmR2V0Qm9vbGVh bihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIERFRkVM RU1fQUREOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiQUREICV7bGFiZWx9SSAle3ZhbHVl fUwiLCAyLAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1l LAorCQkJCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBlbGVtLT5h cmcgPyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0p ID8gIlRSVUUiIDogIkZBTFNFIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgREVGRUxFTV9EUk9Q OgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCAle2xhYmVsfUkiLCAxLAorCQkJCQkJ CQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lKTsKKwkJCQkJYnJlYWs7 CisJCQkJZGVmYXVsdDoKKwkJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgZGVmIGFjdGlvbiAlZCIs IGVsZW0tPmRlZmFjdGlvbik7CisJCQkJCW9wdCA9IE5VTEw7CisJCQl9CisKKwkJCW9wdG91dCA9 IGxhcHBlbmQob3B0b3V0LCBuZXdfb2JqZWN0X29iamVjdChvcHQpKTsKKwkJfQorCisJCWFwcGVu ZF9hcnJheV9vYmplY3QodG1wLCAiKCV7b3B0aW9uOiAsfXMpIiwgb3B0b3V0KTsKKwl9CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVy biB0bXA7Cit9CisKKy8qCisgKiBkZXBhcnNlX0NyZWF0ZUZkd1N0bXQKKyAqICAgRGVwYXJzZSBh IENyZWF0ZUZkd1N0bXQgKENSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUikKKyAqCisgKiBHaXZl biBhIHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwKKyAqIHJl dHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGZHdTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZkd1N0bXQgKm5vZGUgPSAoQ3JlYXRlRmR3U3RtdCAq KSBwYXJzZXRyZWU7CisJSGVhcFR1cGxlCQlmZHdUdXA7CisJRm9ybV9wZ19mb3JlaWduX2RhdGFf d3JhcHBlciBmZHdGb3JtOworCVJlbGF0aW9uCXJlbDsKKworCU9ialRyZWUJICAgKmNyZWF0ZVN0 bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCisJcmVsID0gdGFibGVfb3BlbihGb3JlaWduRGF0YVdy YXBwZXJSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCWZkd1R1cCA9IFNlYXJjaFN5 c0NhY2hlMShGT1JFSUdOREFUQVdSQVBQRVJPSUQsCisJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0o b2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZmR3VHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZvcmVpZ24tZGF0YSB3cmFwcGVyICV1Iiwgb2Jq ZWN0SWQpOworCisJZmR3Rm9ybSA9IChGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyKSBHRVRT VFJVQ1QoZmR3VHVwKTsKKworCWNyZWF0ZVN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIEZP UkVJR04gREFUQSBXUkFQUEVSICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkJCSJpZGVudGl0eSIs IE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoZmR3Rm9ybS0+ZmR3bmFtZSkpOworCisJLyogYWRkIEhB TkRMRVIgY2xhdXNlICovCisJaWYgKGZkd0Zvcm0tPmZkd2hhbmRsZXIgPT0gSW52YWxpZE9pZCkK KwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk5PIEhBTkRMRVIiLCAwKTsKKwllbHNlCisJeworCQl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiSEFORExFUiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkg ImhhbmRsZXIiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGZkd0Zvcm0tPmZkd2hh bmRsZXIpKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7aGFuZGxl cn1zIiwgdG1wKTsKKworCS8qIGFkZCBWQUxJREFUT1IgY2xhdXNlICovCisJaWYgKGZkd0Zvcm0t PmZkd3ZhbGlkYXRvciA9PSBJbnZhbGlkT2lkKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTk8g VkFMSURBVE9SIiwgMCk7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlZBTElE QVRPUiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkgInZhbGlkYXRvciIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yKSk7CisJfQorCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3ZhbGlkYXRvcn1zIiwgdG1wKTsKKworCS8q IGFkZCBhbiBPUFRJT05TIGNsYXVzZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmplY3Qo Y3JlYXRlU3RtdCwgIiV7Z2VuZXJpY19vcHRpb25zfXMiLAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0 aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZmR3VHVwKTsK Kwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIGNyZWF0ZVN0 bXQ7Cit9CisKKy8qCisgKiBkZXBhcnNlX0FsdGVyRmR3U3RtdAorICogIERlcGFyc2UgYW4gQWx0 ZXJGZHdTdG10IChBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUikKKyAqCisgKiBHaXZlbiBhIGZ1 bmN0aW9uIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZSBpdCwgcmV0dXJuIHRoZQor ICogSlNPTiBibG9iIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckZkd1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJQWx0ZXJGZHdTdG10ICpub2RlID0gKEFsdGVyRmR3U3RtdCAqKSBwYXJzZXRy ZWU7CisJSGVhcFR1cGxlCQlmZHdUdXA7CisJRm9ybV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlciBm ZHdGb3JtOworCVJlbGF0aW9uCXJlbDsKKwlPYmpUcmVlCSAgICphbHRlclN0bXQ7CisJTGlzdAkg ICAqZmR3X29wdGlvbnMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCXJlbCA9IHRhYmxl X29wZW4oRm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisK KwlmZHdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoRk9SRUlHTkRBVEFXUkFQUEVST0lELAorCQkJCQkJ CSBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZk d1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmb3JlaWduLWRh dGEgd3JhcHBlciAldSIsIG9iamVjdElkKTsKKworCWZkd0Zvcm0gPSAoRm9ybV9wZ19mb3JlaWdu X2RhdGFfd3JhcHBlcikgR0VUU1RSVUNUKGZkd1R1cCk7CisKKwlhbHRlclN0bXQgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JIiwgMSwKKwkJ CQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGZkd0Zvcm0tPmZkd25h bWUpKTsKKworCS8qCisJICogSXRlcmF0ZSB0aHJvdWdoIG9wdGlvbnMsIHRvIHNlZSB3aGF0IGNo YW5nZWQsIGJ1dCB1c2UgY2F0YWxvZyBhcyBiYXNpcworCSAqIGZvciBuZXcgdmFsdWVzLgorCSAq LworCWZvcmVhY2goY2VsbCwgbm9kZS0+ZnVuY19vcHRpb25zKQorCXsKKwkJRGVmRWxlbQkgICAq ZWxlbTsKKwkJT2JqVHJlZQkgICAqdG1wOworCisJCWVsZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJ aWYgKHBnX3N0cmNhc2VjbXAoZWxlbS0+ZGVmbmFtZSwgImhhbmRsZXIiKSA9PSAwKQorCQl7CisJ CQkvKiBhZGQgSEFORExFUiBjbGF1c2UgKi8KKwkJCWlmIChmZHdGb3JtLT5mZHdoYW5kbGVyID09 IEludmFsaWRPaWQpCisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIk5PIEhBTkRMRVIiLCAwKTsK KwkJCWVsc2UKKwkJCXsKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSEFORExFUiAle3Byb2Nl ZHVyZX1EIiwgMSwKKwkJCQkJCQkJCSAicHJvY2VkdXJlIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkg ZmR3Rm9ybS0+ZmR3aGFuZGxlcikpOworCQkJfQorCQkJZmR3X29wdGlvbnMgPSBsYXBwZW5kKGZk d19vcHRpb25zLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQllbHNlIGlmIChwZ19z dHJjYXNlY21wKGVsZW0tPmRlZm5hbWUsICJ2YWxpZGF0b3IiKSA9PSAwKQorCQl7CisJCQkvKiBh ZGQgVkFMSURBVE9SIGNsYXVzZSAqLworCQkJaWYgKGZkd0Zvcm0tPmZkd3ZhbGlkYXRvciA9PSBJ bnZhbGlkT2lkKQorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJOTyBWQUxJREFUT1IiLCAwKTsK KwkJCWVsc2UKKwkJCXsKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVE9SICV7cHJv Y2VkdXJlfUQiLCAxLAorCQkJCQkJCQkJICJwcm9jZWR1cmUiLAorCQkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJ CSBmZHdGb3JtLT5mZHd2YWxpZGF0b3IpKTsKKwkJCX0KKwkJCWZkd19vcHRpb25zID0gbGFwcGVu ZChmZHdfb3B0aW9ucywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwl9CisKKwkvKiBB ZGQgSEFORExFUi9WQUxJREFUT1IgaWYgc3BlY2lmaWVkICovCisJYXBwZW5kX2FycmF5X29iamVj dChhbHRlclN0bXQsICIle2Zkd19vcHRpb25zOiB9cyIsIGZkd19vcHRpb25zKTsKKworCisJLyog YWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChh bHRlclN0bXQsICIle2dlbmVyaWNfb3B0aW9uc31EIiwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlv bnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOworCisJUmVsZWFzZVN5c0NhY2hlKGZkd1R1cCk7CisJ dGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBhbHRlclN0bXQ7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRZUEUgQVMgUkFOR0Ugc3RhdGVtZW50Cisg KgorICogR2l2ZW4gYSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlUmFuZ2VTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUJICAgKnJhbmdlOworCU9ialRyZWUJ ICAgKnRtcDsKKwlMaXN0CSAgICpkZWZpbml0aW9uID0gTklMOworCVJlbGF0aW9uCXBnX3Jhbmdl OworCUhlYXBUdXBsZQlyYW5nZVR1cDsKKwlGb3JtX3BnX3JhbmdlIHJhbmdlRm9ybTsKKwlTY2Fu S2V5RGF0YSBrZXlbMV07CisJU3lzU2NhbkRlc2Mgc2NhbjsKKworCXBnX3JhbmdlID0gdGFibGVf b3BlbihSYW5nZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJU2NhbktleUluaXQo JmtleVswXSwKKwkJCQlBbnVtX3BnX3JhbmdlX3JuZ3R5cGlkLAorCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisKKwlz Y2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3JhbmdlLCBSYW5nZVR5cGlkSW5kZXhJZCwgdHJ1 ZSwKKwkJCQkJCQkgIE5VTEwsIDEsIGtleSk7CisKKwlyYW5nZVR1cCA9IHN5c3RhYmxlX2dldG5l eHQoc2Nhbik7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJhbmdlVHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJhbmdlIHdpdGggdHlwZSBvaWQgJXUiLAorCQkJ IG9iamVjdElkKTsKKworCXJhbmdlRm9ybSA9IChGb3JtX3BnX3JhbmdlKSBHRVRTVFJVQ1QocmFu Z2VUdXApOworCisJcmFuZ2UgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZUEUiLCAwKTsKKwl0 bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIG9iamVjdElk KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyYW5nZSwgIiV7aWRlbnRpdHl9RCBBUyBSQU5HRSIs IHRtcCk7CisKKwkvKiBTVUJUWVBFICovCisJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJICByYW5nZUZvcm0tPnJuZ3N1YnR5cGUpOwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFID0gJXt0eXBlfUQiLAorCQkJCQkJIDIsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdWJ0eXBlIiwKKwkJCQkJCSAidHlwZSIs IE9ialR5cGVPYmplY3QsIHRtcCk7CisJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTVUJUWVBFX09QQ0xBU1MgKi8KKwlpZiAo T2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ3N1Ym9wYykpCisJeworCQl0bXAgPSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JDbGFzc1JlbGF0aW9uSWQsCisJCQkJCQkJCQkJICBy YW5nZUZvcm0tPnJuZ3N1Ym9wYyk7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFX09Q Q0xBU1MgPSAle29wY2xhc3N9RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAib3BjbGFzcyIsCisJCQkJCQkJICJvcGNsYXNzIiwgT2JqVHlwZU9iamVjdCwg dG1wKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisJfQorCisJLyogQ09MTEFUSU9OICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VG b3JtLT5ybmdjb2xsYXRpb24pKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICByYW5nZUZvcm0tPnJuZ2NvbGxh dGlvbik7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRJT04gPSAle2NvbGxhdGlvbn1E IiwKKwkJCQkJCQkgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xsYXRp b24iLAorCQkJCQkJCSAiY29sbGF0aW9uIiwgT2JqVHlwZU9iamVjdCwgdG1wKTsKKwkJZGVmaW5p dGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQor CisJLyogQ0FOT05JQ0FMICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdjYW5vbmlj YWwpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJICByYW5nZUZvcm0tPnJuZ2Nhbm9uaWNhbCk7CisJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJDQU5PTklDQUwgPSAle2Nhbm9uaWNhbH1EIiwKKwkJCQkJCQkgMiwK KwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYW5vbmljYWwiLAorCQkJCQkJCSAi Y2Fub25pY2FsIiwgT2JqVHlwZU9iamVjdCwgdG1wKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQo ZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogU1VCVFlQRV9E SUZGICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdzdWJkaWZmKSkKKwl7CisJCXRt cCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdzdWJkaWZmKTsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEo IlNVQlRZUEVfRElGRiA9ICV7c3VidHlwZV9kaWZmfUQiLAorCQkJCQkJCSAyLAorCQkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN1YnR5cGVfZGlmZiIsCisJCQkJCQkJICJzdWJ0eXBl X2RpZmYiLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZp bml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2Jq ZWN0KHJhbmdlLCAiKCV7ZGVmaW5pdGlvbjosIH1zKSIsIGRlZmluaXRpb24pOworCisJc3lzdGFi bGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShwZ19yYW5nZSwgUm93RXhjbHVzaXZlTG9j ayk7CisKKwlyZXR1cm4gcmFuZ2U7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRW51bVN0 bXQuCisgKgorICogR2l2ZW4gYSB0eXBlIE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBtb2RpZmll ZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgdHlwZS4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckVudW1TdG10KE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRW51bVN0bXQgKm5vZGUgPSAoQWx0ZXJFbnVt U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqYWx0ZXJFbnVtOworCisJYWx0ZXJFbnVt ID0JbmV3X29ianRyZWVfVkEoIkFMVEVSIFRZUEUiLCAwKTsKKwlhcHBlbmRfb2JqZWN0X29iamVj dChhbHRlckVudW0sICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCWlm ICghbm9kZS0+b2xkVmFsKQorCXsKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJFbnVtLCAi QUREIFZBTFVFIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIiV7aWZfbm90 X2V4aXN0c31zIiwKKwkJCQkJCQlub2RlLT5za2lwSWZOZXdWYWxFeGlzdHMgPyAiSUYgTk9UIEVY SVNUUyIgOiAiIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAiJXt2YWx1 ZX1MIiwgbm9kZS0+bmV3VmFsKTsKKworCQlpZiAobm9kZS0+bmV3VmFsTmVpZ2hib3IpCisJCXsK KwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIiV7YWZ0ZXJfb3JfYmVmb3JlfXMi LAorCQkJCQkJCQlub2RlLT5uZXdWYWxJc0FmdGVyID8gIkFGVEVSIiA6ICJCRUZPUkUiKTsKKwkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIiV7bmVpZ2hib3VyfUwiLCBub2RlLT5u ZXdWYWxOZWlnaGJvcik7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QoYWx0ZXJFbnVtLCAiUkVOQU1FIFZBTFVFICV7dmFsdWV9TCBUTyIsCisJCQkJCQkJIG5vZGUt Pm9sZFZhbCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIiV7bmV3dmFsdWV9 TCIsCisJCQkJCQkJIG5vZGUtPm5ld1ZhbCk7CisJfQorCisJcmV0dXJuIGFsdGVyRW51bTsKK30K KworLyoKKyAqIERlcGFyc2UgQUxURVIgRVhURU5TSU9OIC4uIFVQREFURSBUTyBWRVJTSU9OCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJFeHRlbnNpb25TdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRXh0ZW5zaW9uU3RtdCAqbm9kZSA9IChB bHRlckV4dGVuc2lvblN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uICAgIHBnX2V4dGVuc2lv bjsKKwlIZWFwVHVwbGUgICBleHRUdXA7CisJRm9ybV9wZ19leHRlbnNpb24gZXh0Rm9ybTsKKwlP YmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklM OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlwZ19leHRlbnNpb24gPSB0YWJsZV9vcGVuKEV4dGVu c2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZXh0VHVwID0gZ2V0X2NhdGFsb2df b2JqZWN0X2J5X29pZChwZ19leHRlbnNpb24sIEFudW1fcGdfZXh0ZW5zaW9uX29pZCwgIG9iamVj dElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZXh0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIGV4dGVuc2lvbiB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0 SWQpOworCWV4dEZvcm0gPSAoRm9ybV9wZ19leHRlbnNpb24pIEdFVFNUUlVDVChleHRUdXApOwor CisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBFWFRFTlNJT04gJXtpZGVudGl0eX1EIFVQ REFURSIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShleHRGb3JtLT5leHRuYW1lc3BhY2UsCisJCQkJCQkJCQkJ CQkgICBOYW1lU3RyKGV4dEZvcm0tPmV4dG5hbWUpKSk7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUt Pm9wdGlvbnMpCisJeworCQlEZWZFbGVtICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7 CisKKwkJaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJuZXdfdmVyc2lvbiIpID09IDApCisJCXsK KwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUTyAle3ZlcnNpb259TCIsIDIsCisJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2ZXJzaW9uIiwKKwkJCQkJCQkJICJ2ZXJzaW9uIiwgT2Jq VHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgInVu c3VwcG9ydGVkIG9wdGlvbiAlcyIsIG9wdC0+ZGVmbmFtZSk7CisJfQorCisJYXBwZW5kX2FycmF5 X29iamVjdChzdG10LCAiJXtvcHRpb25zOiB9cyIsIGxpc3QpOworCisJdGFibGVfY2xvc2UocGdf ZXh0ZW5zaW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHN0bXQ7Cit9CisKKy8qCisg KiBBTFRFUiBFWFRFTlNJT04gZXh0IEFERC9EUk9QIG9iamVjdAorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlLAorCQkJCQkJCQkgICBPYmplY3RBZGRyZXNzIG9iamVjdEFkZHJlc3MpCit7 CisJQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQgKm5vZGUgPSAoQWx0ZXJFeHRlbnNpb25Db250 ZW50c1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKnN0bXQ7CisJY2hhcgkgICAqZm10 OworCisJQXNzZXJ0KG5vZGUtPmFjdGlvbiA9PSArMSB8fCBub2RlLT5hY3Rpb24gPT0gLTEpOwor CisJZm10ID0gcHNwcmludGYoIkFMVEVSIEVYVEVOU0lPTiAlJXtleHRpZGVudGl0eX1JICVzICVz ICUle29iamlkZW50aXR5fXMiLAorCQkJCSAgIG5vZGUtPmFjdGlvbiA9PSArMSA/ICJBREQiIDog IkRST1AiLAorCQkJCSAgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9ianR5cGUpKTsKKworCXN0 bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsICJleHRpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkgIG5vZGUtPmV4dG5hbWUsCisJCQkJCQkgICJvYmppZGVudGl0eSIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkgIGdldE9iamVjdElkZW50aXR5KCZvYmplY3RBZGRyZXNzLCBmYWxzZSkp OworCisJcmV0dXJuIHN0bXQ7Cit9CisvKgorICogRGVwYXJzZSBhbiBDcmVhdGVDYXN0U3RtdC4K KyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBtb2RpZmll ZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29t bWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVDYXN0U3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVDYXN0U3RtdCAqbm9kZSA9IChD cmVhdGVDYXN0U3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JY2FzdHJlbDsKKwlIZWFwVHVw bGUJY2FzdFR1cDsKKwlGb3JtX3BnX2Nhc3QgY2FzdEZvcm07CisJT2JqVHJlZQkgICAqY3JlYXRl Q2FzdDsKKwljaGFyCSAgICpjb250ZXh0OworCisJY2FzdHJlbCA9IHRhYmxlX29wZW4oQ2FzdFJl bGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJY2FzdFR1cCA9IGdldF9jYXRhbG9nX29iamVj dF9ieV9vaWQoY2FzdHJlbCwgQW51bV9wZ19jYXN0X29pZCwgb2JqZWN0SWQpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChjYXN0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIGNhc3Qgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJY2FzdEZvcm0gPSAoRm9ybV9w Z19jYXN0KSBHRVRTVFJVQ1QoY2FzdFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJ ICoKKwkgKiBDUkVBVEUgQ0FTVCAoJXtzb3VyY2V0eXBlfVQgQVMgJXt0YXJnZXR0eXBlfVQpICV7 bWVjaGFuaXNtfXMgJXtjb250ZXh0fXMKKwkgKi8KKwljcmVhdGVDYXN0ID0gbmV3X29ianRyZWVf VkEoIkNSRUFURSBDQVNUICgle3NvdXJjZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9VCkiLAorCQkJ CQkJCQkyLCAic291cmNldHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVl X2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0c291cmNlLCAtMSksCisJCQkJCQkJCSJ0YXJnZXR0eXBl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUoY2FzdEZvcm0t PmNhc3R0YXJnZXQsIC0xKSk7CisKKwlpZiAobm9kZS0+aW5vdXQpCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZUNhc3QsICIle21lY2hhbmlzbX1zIiwgIldJVEggSU5PVVQiKTsKKwllbHNl IGlmIChub2RlLT5mdW5jID09IE5VTEwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUNh c3QsICIle21lY2hhbmlzbX1zIiwgIldJVEhPVVQgRlVOQ1RJT04iKTsKKwllbHNlCisJeworCQlP YmpUcmVlCSAgICp0bXBvYmo7CisJCVN0cmluZ0luZm9EYXRhIGZ1bmM7CisJCUhlYXBUdXBsZQlm dW5jVHVwOworCQlGb3JtX3BnX3Byb2MgZnVuY0Zvcm07CisJCWludAkJCWk7CisKKwkJZnVuY1R1 cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBjYXN0Rm9ybS0+Y2FzdGZ1bmMpOworCQlmdW5j Rm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChmdW5jVHVwKTsKKworCQlpbml0U3RyaW5n SW5mbygmZnVuYyk7CisJCWFwcGVuZFN0cmluZ0luZm8oJmZ1bmMsICIlcygiLAorCQkJCQkJcXVv dGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKGZ1bmNGb3JtLT5wcm9u YW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihmdW5jRm9ybS0+cHJvbmFtZSkpKTsK KwkJZm9yIChpID0gMDsgaSA8IGZ1bmNGb3JtLT5wcm9uYXJnczsgaSsrKQorCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmZnVuYywKKwkJCQkJCQkJICAgZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVk KGZ1bmNGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0pKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0No YXIoJmZ1bmMsICcpJyk7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIldJVEggRlVOQ1RJ T04gJXtjYXN0ZnVuY3Rpb259cyIsIDEsCisJCQkJCQkJICJjYXN0ZnVuY3Rpb24iLCBPYmpUeXBl U3RyaW5nLCBmdW5jLmRhdGEpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVDYXN0LCAi JXttZWNoYW5pc219cyIsIHRtcG9iaik7CisKKwkJUmVsZWFzZVN5c0NhY2hlKGZ1bmNUdXApOwor CX0KKworCXN3aXRjaCAobm9kZS0+Y29udGV4dCkKKwl7CisJCWNhc2UgQ09FUkNJT05fSU1QTElD SVQ6CisJCQljb250ZXh0ID0gIkFTIElNUExJQ0lUIjsKKwkJCWJyZWFrOworCQljYXNlIENPRVJD SU9OX0FTU0lHTk1FTlQ6CisJCQljb250ZXh0ID0gIkFTIEFTU0lHTk1FTlQiOworCQkJYnJlYWs7 CisJCWNhc2UgQ09FUkNJT05fRVhQTElDSVQ6CisJCQljb250ZXh0ID0gIiI7CisJCQlicmVhazsK KwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIGNvZXJjaW9uIGNvZGUgJWMiLCBu b2RlLT5jb250ZXh0KTsKKwkJCXJldHVybiBOVUxMOwkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICov CisJfQorCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUNhc3QsICIle2NvbnRleHR9cyIsIGNv bnRleHQpOworCisJdGFibGVfY2xvc2UoY2FzdHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJl dHVybiBjcmVhdGVDYXN0OworfQorCisvKgorICogRGVwYXJzZSBhbGwgdGhlIGNvbGxlY3RlZCBz dWJjb21tYW5kcyBhbmQgcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZQorICogYWx0 ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclRhYmxlU3Rt dChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZQkgICAqYWx0ZXJUYWJsZVN0bXQ7 CisJT2JqVHJlZQkgICAqdG1wb2JqOworCU9ialRyZWUJICAgKnRtcG9iajI7CisJTGlzdAkgICAq ZHBjb250ZXh0OworCVJlbGF0aW9uCXJlbDsKKwlMaXN0CSAgICpzdWJjbWRzID0gTklMOworCUxp c3RDZWxsICAgKmNlbGw7CisJY2hhcgkgICAqZm10c3RyOworCWNvbnN0IGNoYXIgKnJlbHR5cGU7 CisJYm9vbAkJaXN0eXBlID0gZmFsc2U7CisJTGlzdAkgICAqZXhwcnMgPSBOSUw7CisKKwlBc3Nl cnQoY21kLT50eXBlID09IFNDVF9BbHRlclRhYmxlKTsKKworCXJlbCA9IHJlbGF0aW9uX29wZW4o Y21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZHBjb250ZXh0 ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJ CQkJCQkJY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQpOworCisJc3dpdGNoIChyZWwtPnJkX3Jl bC0+cmVsa2luZCkKKwl7CisJCWNhc2UgUkVMS0lORF9SRUxBVElPTjoKKwkJY2FzZSBSRUxLSU5E X1BBUlRJVElPTkVEX1RBQkxFOgorCQkJcmVsdHlwZSA9ICJUQUJMRSI7CisJCQlicmVhazsKKwkJ Y2FzZSBSRUxLSU5EX0lOREVYOgorCQljYXNlIFJFTEtJTkRfUEFSVElUSU9ORURfSU5ERVg6CisJ CQlyZWx0eXBlID0gIklOREVYIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfVklFVzoKKwkJ CXJlbHR5cGUgPSAiVklFVyI7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0NPTVBPU0lURV9U WVBFOgorCQkJcmVsdHlwZSA9ICJUWVBFIjsKKwkJCWlzdHlwZSA9IHRydWU7CisJCQlicmVhazsK KwkJY2FzZSBSRUxLSU5EX0ZPUkVJR05fVEFCTEU6CisJCQlyZWx0eXBlID0gIkZPUkVJR04gVEFC TEUiOworCQkJYnJlYWs7CisKKwkJLyogVE9ETyBzdXBwb3J0IGZvciBwYXJ0aXRpb25lZCB0YWJs ZSAqLworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCByZWxraW5kICVk IiwgcmVsLT5yZF9yZWwtPnJlbGtpbmQpOworCX0KKworCS8qCisJICogVmVyYm9zZSBzeW50YXgK KwkgKgorCSAqIEFMVEVSIHJlbHR5cGUgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zCisJICov CisJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzIiwgcmVsdHlwZSk7CisJYWx0ZXJUYWJsZVN0 bXQgPSBuZXdfb2JqdHJlZShmbXRzdHIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbCkpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyVGFibGVTdG10 LCAiJXtpZGVudGl0eX1EIiwgdG1wb2JqKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLmFsdGVy VGFibGUuc3ViY21kcykKKwl7CisJCUNvbGxlY3RlZEFUU3ViY21kICpzdWIgPSAoQ29sbGVjdGVk QVRTdWJjbWQgKikgbGZpcnN0KGNlbGwpOworCQlBbHRlclRhYmxlQ21kCSpzdWJjbWQgPSAoQWx0 ZXJUYWJsZUNtZCAqKSBzdWItPnBhcnNldHJlZTsKKwkJT2JqVHJlZQkgICAqdHJlZTsKKworCQlB c3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJUYWJsZUNtZCkpOworCisJCXN3aXRjaCAoc3ViY21kLT5z dWJ0eXBlKQorCQl7CisJCQljYXNlIEFUX0FkZENvbHVtbjoKKwkJCWNhc2UgQVRfQWRkQ29sdW1u UmVjdXJzZToKKwkJCQkvKiBYWFggbmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdo ZXJlPyAqLworCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIENvbHVtbkRlZikpOworCQkJCXRy ZWUgPSBkZXBhcnNlX0NvbHVtbkRlZihyZWwsIGRwY29udGV4dCwgZmFsc2UsCisJCQkJCQkJCQkJ IChDb2x1bW5EZWYgKikgc3ViY21kLT5kZWYsIHRydWUsICZleHBycyk7CisJCQkJZm10c3RyID0g cHNwcmludGYoIkFERCAlcyAlJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQkgIGlzdHlwZSA/ICJB VFRSSUJVVEUiIDogIkNPTFVNTiIpOworCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0 ciwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29sdW1uIiwKKwkJ CQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVPYmplY3QsIHRyZWUpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX0FkZEluZGV4Q29uc3RyYWludDoKKwkJCQl7CisJCQkJCUluZGV4U3Rt dCAgKmlzdG10OworCQkJCQlSZWxhdGlvbglpZHg7CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1 Yi0+YWRkcmVzcy5vYmplY3RJZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRl eFN0bXQpKTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJ CUFzc2VydChpc3RtdC0+aXNjb25zdHJhaW50ICYmIGlzdG10LT51bmlxdWUpOworCisJCQkJCWlk eCA9IHJlbGF0aW9uX29wZW4oaXN0bXQtPmluZGV4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJ CQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkJCSAqCisJCQkJCSAqIEFERCBDT05T VFJBSU5UICV7bmFtZX1JICV7Y29uc3RyYWludF90eXBlfXMgVVNJTkcgSU5ERVgKKwkJCQkJICog JWluZGV4X25hbWV9SSAle2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cworCQkJCQkgKi8K KwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JIiwg MiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQgdXNp bmcgaW5kZXgiLAorCQkJCQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJh aW50X25hbWUoY29uc3RyT2lkKSk7CisKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2Jq LCAiJXtjb25zdHJhaW50X3R5cGV9cyIsIGlzdG10LT5kZWZlcnJhYmxlID8KKwkJCQkJCQkJCQkg IkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIik7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIlVTSU5HIElOREVYICV7aW5kZXhfbmFtZX1JIiwKKwkJCQkJCQkJCQkgUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4KSk7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cG9iaiwgIiV7ZGVmZXJyYWJsZX1zIiwgaXN0bXQtPmRlZmVycmFibGUgPworCQkJCQkJCQkJCSAi REVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiKTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wb2JqLCAiJXtpbml0X2RlZmVycmVkfXMiLCBpc3RtdC0+aW5pdGRlZmVycmVkID8KKwkJ CQkJCQkJCQkgIklOSVRJQUxMWSBERUZFUlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFURSIpOwor CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlkeCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfUmVBZGRJbmRleDoKKwkJCWNhc2UgQVRfUmVBZGRD b25zdHJhaW50OgorCQkJY2FzZSBBVF9SZUFkZENvbW1lbnQ6CisJCQljYXNlIEFUX1JlcGxhY2VS ZWxPcHRpb25zOgorCQkJCS8qIFN1YnR5cGVzIHVzZWQgZm9yIGludGVybmFsIG9wZXJhdGlvbnM7 IG5vdGhpbmcgdG8gZG8gaGVyZSAqLworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZENvbHVt blRvVmlldzoKKwkJCQkvKiBDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIC0tIG5vdGhpbmcgdG8gZG8g aGVyZSAqLworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0NvbHVtbkRlZmF1bHQ6CisJCQkJaWYg KHN1YmNtZC0+ZGVmID09IE5VTEwpCisJCQkJeworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBERUZBVUxUIiwgMiwKKwkJCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBkZWZhdWx0IiwKKwkJCQkJCQkJCQkgImNvbHVt biIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7 CisJCQkJCUxpc3QJICAgKmRwY29udGV4dF9yZWw7CisJCQkJCUhlYXBUdXBsZQlhdHRydHVwOwor CQkJCQlBdHRyTnVtYmVyCWF0dG5vOworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgREVGQVVMVCIsIDIsCisJCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgInNldCBkZWZhdWx0IiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJZHBjb250ZXh0X3JlbCA9IGRlcGFy c2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCQkJ CQlSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQlhdHRydHVwID0gU2VhcmNoU3lzQ2FjaGVB dHROYW1lKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJYXR0bm8g PSAoKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0cnR1cCkpLT5hdHRudW07CisJCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwKKwkJCQkJCQkJ CQkgUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbCwgYXR0bm8sCisJCQkJCQkJCQkJCQkJCQkJ ICBkcGNvbnRleHRfcmVsLAorCQkJCQkJCQkJCQkJCQkJCSAgTlVMTCkpOworCQkJCQlSZWxlYXNl U3lzQ2FjaGUoYXR0cnR1cCk7CisJCQkJfQorCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RHJvcE5vdE51bGw6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAl e2NvbHVtbn1JIERST1AgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImRyb3Agbm90IG51bGwiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5n LCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE5vdE51bGw6 CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNF VCBOT1QgTlVMTCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IG5v dCBudWxsIiwKKwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1l KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wRXhwcmVzc2lvbjoKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBFWFBSRVNT SU9OIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGV4cHJlc3Np b24iLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJ CQkJCQkJCSBzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIjogIiIpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX1NldFN0YXRpc3RpY3M6CisJCQkJeworCQkJCQlBc3NlcnQoSXNB KHN1YmNtZC0+ZGVmLCBJbnRlZ2VyKSk7CisJCQkJCWlmIChzdWJjbWQtPm5hbWUpCisJCQkJCQl0 bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUQVRJ U1RJQ1MgJXtzdGF0aXN0aWNzfW4iLAorCQkJCQkJCQkJCQkgMywKKwkJCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgInNldCBzdGF0aXN0aWNzIiwKKwkJCQkJCQkJCQkJICJjb2x1bW4i LCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJCSAic3RhdGlzdGljcyIs IE9ialR5cGVJbnRlZ2VyLAorCQkJCQkJCQkJCQkgaW50VmFsKChJbnRlZ2VyICopIHN1YmNtZC0+ ZGVmKSk7CisJCQkJCWVsc2UKKwkJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBD T0xVTU4gJXtjb2x1bW59biBTRVQgU1RBVElTVElDUyAle3N0YXRpc3RpY3N9biIsCisJCQkJCQkJ CQkJCSAzLAorCQkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3Rp Y3MiLAorCQkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVJbnRlZ2VyLCBzdWJjbWQtPm51bSwK KwkJCQkJCQkJCQkJICJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJCSBp bnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX1NldE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0T3B0aW9uczoKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJCSAg ZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9TZXRTdG9yYWdlOgorCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0cmluZykpOwor CQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQg U1RPUkFHRSAle3N0b3JhZ2V9cyIsIDMsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAic2V0IHN0b3JhZ2UiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJj bWQtPm5hbWUsCisJCQkJCQkJCQkgInN0b3JhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ IHN0clZhbCgoU3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfU2V0Q29tcHJlc3Npb246CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5n KSk7CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1J IFNFVCBDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1zIiwKKwkJCQkJCQkJCSAzLAor CQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBjb21wcmVzc2lvbiIsCisJCQkJ CQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCSAi Y29tcHJlc3Npb25fbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJWYWwoKFN0 cmluZyAqKSBzdWJjbWQtPmRlZikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BD b2x1bW5SZWN1cnNlOgorCQkJY2FzZSBBVF9Ecm9wQ29sdW1uOgorCQkJCWZtdHN0ciA9IHBzcHJp bnRmKCJEUk9QICVzICUle2NvbHVtbn1JIiwKKwkJCQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRF IiA6ICJDT0xVTU4iKTsKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJ CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBjb2x1bW4iLAorCQkJCQkJCQkJ ICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXRtcG9iajIgPSBu ZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJCQkgICJwcmVzZW50IiwgT2JqVHlw ZUJvb2wsIHN1YmNtZC0+YmVoYXZpb3IpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9i aiwgIiV7Y2FzY2FkZX1zIiwgdG1wb2JqMik7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9BZGRJbmRleDoKKwkJCQl7CisJCQkJCU9pZAkJCWlkeE9pZCA9IHN1Yi0+YWRkcmVzcy5vYmpl Y3RJZDsKKwkJCQkJSW5kZXhTdG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJ Y29uc3QgY2hhciAqaWR4bmFtZTsKKwkJCQkJT2lkCQkJY29uc3RyT2lkOworCisJCQkJCUFzc2Vy dChJc0Eoc3ViY21kLT5kZWYsIEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQg Kikgc3ViY21kLT5kZWY7CisKKwkJCQkJaWYgKCFpc3RtdC0+aXNjb25zdHJhaW50KQorCQkJCQkJ YnJlYWs7CisKKwkJCQkJaWR4ID0gcmVsYXRpb25fb3BlbihpZHhPaWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJCQkJCWlkeG5hbWUgPSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgpOworCisJCQkJ CWNvbnN0ck9pZCA9IGdldF9yZWxhdGlvbl9jb25zdHJhaW50X29pZCgKKwkJCQkJCWNtZC0+ZC5h bHRlclRhYmxlLm9iamVjdElkLCBpZHhuYW1lLCBmYWxzZSk7CisKKwkJCQkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgMywK KwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJ CQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGlkeG5hbWUsCisJCQkJCQkJCQkJICJkZWZp bml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZf Y29tbWFuZF9zaW1wbGUoY29uc3RyT2lkKSk7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlk eCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRk Q29uc3RyYWludDoKKwkJCWNhc2UgQVRfQWRkQ29uc3RyYWludFJlY3Vyc2U6CisJCQkJeworCQkJ CQkvKiBYWFggbmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJ CQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCWJvb2wJCWlz bnVsbDsKKwkJCQkJSGVhcFR1cGxlCXR1cDsKKwkJCQkJRGF0dW0JCXZhbDsKKwkJCQkJQ29uc3Ry YWludCAqY29uc3RyOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIENvbnN0cmFpbnQp KTsKKwkJCQkJY29uc3RyID0gIGNhc3ROb2RlKENvbnN0cmFpbnQsIHN1YmNtZC0+ZGVmKTsKKwor CQkJCQlpZiAoIWNvbnN0ci0+c2tpcF92YWxpZGF0aW9uKQorCQkJCQl7CisJCQkJCQl0dXAgPSBT ZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBPYmplY3RJZEdldERhdHVtKGNvbnN0ck9pZCkpOwor CisJCQkJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQkJCQkJeworCQkJCQkJCWNoYXIJ ICAgKmNvbmJpbjsKKworCQkJCQkJCS8qIEZldGNoIGNvbnN0cmFpbnQgZXhwcmVzc2lvbiBpbiBw YXJzZXRyZWUgZm9ybSAqLworCQkJCQkJCXZhbCA9IFN5c0NhY2hlR2V0QXR0cihDT05TVFJPSUQs IHR1cCwKKwkJCQkJCQkJCQkJCSAgQW51bV9wZ19jb25zdHJhaW50X2NvbmJpbiwgJmlzbnVsbCk7 CisKKwkJCQkJCQlpZiAoIWlzbnVsbCkKKwkJCQkJCQl7CisJCQkJCQkJCWNvbmJpbiA9IFRleHRE YXR1bUdldENTdHJpbmcodmFsKTsKKwkJCQkJCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBzdHJp bmdUb05vZGUoY29uYmluKSk7CisJCQkJCQkJfQorCisJCQkJCQkJUmVsZWFzZVN5c0NhY2hlKHR1 cCk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQURE IENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCQkJICJuYW1lIiwg T2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJ CSAiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIHBnX2dldF9jb25zdHJh aW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ck9pZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfQWx0ZXJDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJT2lkCQljb25zdHJP aWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUNvbnN0cmFpbnQgKmMgPSAoQ29uc3Ry YWludCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkvKiBJZiBubyBjb25zdHJhaW50IHdhcyBhbHRl cmVkLCBzaWxlbnRseSBza2lwIGl0ICovCisJCQkJCWlmICghT2lkSXNWYWxpZChjb25zdHJPaWQp KQorCQkJCQkJYnJlYWs7CisKKwkJCQkJQXNzZXJ0KElzQShjLCBDb25zdHJhaW50KSk7CisJCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVm ZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zIiwKKwkJCQkJCQkJCQkgNCwKKwkJCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWx0ZXIgY29uc3RyYWludCIsCisJCQkJCQkJCQkJICJu YW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJ CQkJCQkJCSAiZGVmZXJyYWJsZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGMtPmRlZmVy cmFibGUgPyAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJCQkJCQkJCSAiaW5p dF9kZWZlcnJlZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGMtPmluaXRkZWZlcnJlZCA/ ICJJTklUSUFMTFkgREVGRVJSRUQiIDogIklOSVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfVmFsaWRhdGVDb25zdHJhaW50UmVjdXJzZToK KwkJCWNhc2UgQVRfVmFsaWRhdGVDb25zdHJhaW50OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJWQUxJREFURSBDT05TVFJBSU5UICV7Y29uc3RyYWludH1JIiwgMiwKKwkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2YWxpZGF0ZSBjb25zdHJhaW50IiwKKwkJCQkJCQkJCSAi Y29uc3RyYWludCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfRHJvcENvbnN0cmFpbnRSZWN1cnNlOgorCQkJY2FzZSBBVF9Ecm9wQ29u c3RyYWludDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCBDT05TVFJBSU5UICV7 Y29uc3RyYWludH1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9w IGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJICJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BbHRlckNvbHVtblR5cGU6 CisJCQkJeworCQkJCQlUdXBsZURlc2MgdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsK KwkJCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0OworCQkJCQlDb2x1bW5EZWYJICAgKmRlZjsKKwor CQkJCQlhdHQgPSAmKHR1cGRlc2MtPmF0dHJzW3N1Yi0+YWRkcmVzcy5vYmplY3RTdWJJZCAtIDFd KTsKKwkJCQkJZGVmID0gKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKwkJCQkJQXNzZXJ0KElz QShkZWYsIENvbHVtbkRlZikpOworCisJCQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ugc3ludGF4CisJ CQkJCSAqCisJCQkJCSAqIENvbXBvc2l0ZSB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1J IFNFVCBEQVRBIFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQVRUUklC VVRFICV7Y2FzY2FkZX1zCisJCQkJCSAqCisJCQkJCSAqIE5vcm1hbCB0eXBlczogQUxURVIgcmVs dHlwZSAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29s bGF0aW9ufXMgQ09MVU1OICV7dXNpbmd9cworCQkJCQkgKi8KKwkJCQkJZm10c3RyID0gcHNwcmlu dGYoIkFMVEVSICVzICUle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUiLAorCQkJCQkJCQkJICBpc3R5 cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xVTU4iKTsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVy IGNvbHVtbiB0eXBlIiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNt ZC0+bmFtZSk7CisJCQkJCS8qIEFkZCB0aGUgVFlQRSBjbGF1c2UgKi8KKwkJCQkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wb2JqLCAiJXtkYXRhdHlwZX1UIiwKKwkJCQkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3R5cGUoYXR0LT5hdHR0eXBpZCwKKwkJCQkJCQkJCQkJCQkJCSAgYXR0LT5hdHR0eXBt b2QpKTsKKworCQkJCQkvKiBBZGQgYSBDT0xMQVRFIGNsYXVzZSwgaWYgbmVlZGVkICovCisJCQkJ CXRtcG9iajIgPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCQkJCQlpZiAoT2lkSXNWYWxpZChh dHQtPmF0dGNvbGxhdGlvbikpCisJCQkJCXsKKwkJCQkJCU9ialRyZWUgKmNvbGxuYW1lOworCisJ CQkJCQljb2xsbmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkJICAgYXR0LT5hdHRjb2xsYXRpb24pOworCQkJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqMiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOworCQkJCQl9 CisJCQkJCWVsc2UKKwkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoyLCAicHJlc2VudCIs IGZhbHNlKTsKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtjb2xsYXRpb259 cyIsIHRtcG9iajIpOworCisJCQkJCS8qIElmIG5vdCBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhl IFVTSU5HIGNsYXVzZSAqLworCQkJCQlpZiAoIWlzdHlwZSkKKwkJCQkJeworCQkJCQkJLyoKKwkJ CQkJCSAqIElmIHRoZXJlJ3MgYSBVU0lORyBjbGF1c2UsIHRyYW5zZm9ybUFsdGVyVGFibGVTdG10 CisJCQkJCQkgKiByYW4gaXQgdGhyb3VnaCB0cmFuc2Zvcm1FeHByIGFuZCBzdG9yZWQgdGhlCisJ CQkJCQkgKiByZXN1bHRpbmcgbm9kZSBpbiBjb29rZWRfZGVmYXVsdCwgd2hpY2ggd2UgY2FuIHVz ZQorCQkJCQkJICogaGVyZS4KKwkJCQkJCSAqLworCQkJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVl KCJVU0lORyIpOworCQkJCQkJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJCQkJCQl7CisJCQkJCQkJ RGF0dW0JZGVwYXJzZWQ7CisJCQkJCQkJY2hhciAgICpkZWZleHByOworCisJCQkJCQkJZXhwcnMg PSBsYXBwZW5kKGV4cHJzLCBkZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJCQkJCQlkZWZleHByID0g bm9kZVRvU3RyaW5nKGRlZi0+Y29va2VkX2RlZmF1bHQpOworCQkJCQkJCWRlcGFyc2VkID0gRGly ZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJCQkJCQkJICAgQ1N0cmluZ0dl dFRleHREYXR1bShkZWZleHByKSwKKwkJCQkJCQkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxpZChy ZWwpKTsKKwkJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmoyLCAiJXtleHByZXNzaW9u fXMiLAorCQkJCQkJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwkJCQkJ CX0KKwkJCQkJCWVsc2UKKwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqMiwgInByZXNl bnQiLCBmYWxzZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3VzaW5n fXMiLCB0bXBvYmoyKTsKKwkJCQkJfQorCisJCQkJCS8qIElmIGl0J3MgYSBjb21wb3NpdGUgdHlw ZSwgYWRkIHRoZSBDQVNDQURFIGNsYXVzZSAqLworCQkJCQlpZiAoaXN0eXBlKQorCQkJCQl7CisJ CQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWUoIkNBU0NBREUiKTsKKwkJCQkJCWlmIChzdWJjbWQt PmJlaGF2aW9yICE9IERST1BfQ0FTQ0FERSkKKwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w b2JqMiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBv YmosICIle2Nhc2NhZGV9cyIsIHRtcG9iajIpOworCQkJCQl9CisKKwkJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJy ZWFrOworCisjaWZkZWYgVE9ET0xJU1QKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5HZW5lcmljT3B0 aW9uczoKKwkJCQl0bXBvYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5k ZWYsCisJCQkJCQkJCQkJIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJ CWNhc2UgQVRfQ2hhbmdlT3duZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9XTkVS IFRPICV7b3duZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2hh bmdlIG93bmVyIiwKKwkJCQkJCQkJCSAib3duZXIiLCAgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJ CSBnZXRfcm9sZXNwZWNfbmFtZShzdWJjbWQtPm5ld293bmVyKSk7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfQ2x1c3Rlck9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDTFVT VEVSIE9OICV7aW5kZXh9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi Y2x1c3RlciBvbiIsCisJCQkJCQkJCQkgImluZGV4IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5u YW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ2x1c3RlcjoKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFdJVEhPVVQgQ0xVU1RFUiIsIDEsCisJCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHdpdGhvdXQgY2x1c3RlciIpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX1NldExvZ2dlZDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiU0VUIExPR0dFRCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0 IGxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFVuTG9nZ2VkOgorCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgVU5MT0dHRUQiLCAxLAorCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB1bmxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0Ryb3BPaWRzOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgV0lU SE9VVCBPSURTIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgd2l0 aG91dCBvaWRzIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldEFjY2Vzc01ldGhvZDoK KwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIEFDQ0VTUyBNRVRIT0QgJXthY2Nlc3Nf bWV0aG9kfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBhY2Nl c3MgbWV0aG9kIiwKKwkJCQkJCQkJCSAiYWNjZXNzX21ldGhvZCIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldFRhYmxlU3BhY2U6CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1J IiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgdGFibGVzcGFjZSIs CisJCQkJCQkJCQkgInRhYmxlc3BhY2UiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFJlbE9wdGlvbnM6CisJCQljYXNlIEFUX1Jl c2V0UmVsT3B0aW9uczoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCgKKwkJCQkJCQkJCSAgZGVwYXJzZV9SZWxTZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwg T2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9FbmFibGVBbHdheXNUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUg QUxXQVlTIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImVuYWJsZSBhbHdheXMgdHJpZ2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIiLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0VuYWJsZVJlcGxpY2FUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUg UkVQTElDQSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJlbmFibGUgcmVwbGljYSB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIs IE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfRGlzYWJsZVRyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJ R0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZGlzYWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZ0FsbDoK KwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciBhbGwiKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ0FsbDoKKwkJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklHR0VSIEFMTCIsIDEsCisJCQkJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0VuYWJsZVRyaWdVc2VyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJFTkFCTEUgVFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJlbmFibGUgdHJpZ2dlciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RGlzYWJsZVRyaWdVc2VyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRS SUdHRVIgVVNFUiIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJs ZSB0cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSdWxl OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUlVMRSAle3J1bGV9SSIsIDIs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJ1bGUiLAorCQkJCQkJ CQkJICJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9FbmFibGVBbHdheXNSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJFTkFCTEUgQUxXQVlTIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImVuYWJsZSBhbHdheXMgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0VuYWJsZVJlcGxpY2FSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUg UkVQTElDQSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJlbmFibGUgcmVwbGljYSBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJ1 bGU6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUlVMRSAle3J1bGV9SSIs IDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSBydWxlIiwKKwkJ CQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfQWRkSW5oZXJpdDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiSU5IRVJJVCAle3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJpbmhlcml0IiwKKwkJCQkJCQkJCSAicGFyZW50IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9Ecm9wSW5oZXJpdDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTk8g SU5IRVJJVCAle3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJkcm9wIGluaGVyaXQiLAorCQkJCQkJCQkJICJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0FkZE9mOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPRiAle3R5 cGVfb2Z9VCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIG9mIiwK KwkJCQkJCQkJCSAidHlwZV9vZiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3R5cGUoc3ViLT5hZGRyZXNzLm9iamVjdElkLCAtMSkpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0Ryb3BPZjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTk9UIE9G IiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJub3Qgb2YiKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9SZXBsaWNhSWRlbnRpdHk6CisJCQkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIlJFUExJQ0EgSURFTlRJVFkiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgInJlcGxpY2EgaWRlbnRpdHkiKTsKKwkJCQlzd2l0Y2ggKCgoUmVwbGljYUlk ZW50aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPmlkZW50aXR5X3R5cGUpCisJCQkJeworCQkJCQlj YXNlIFJFUExJQ0FfSURFTlRJVFlfREVGQVVMVDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcG9iaiwgIiV7aWRlbnR9cyIsICJERUZBVUxUIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2Fz ZSBSRVBMSUNBX0lERU5USVRZX0ZVTEw6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBv YmosICIle2lkZW50fXMiLCAiRlVMTCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElD QV9JREVOVElUWV9OT1RISU5HOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAi JXtpZGVudH1zIiwgIk5PVEhJTkciKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0Ff SURFTlRJVFlfSU5ERVg6CisJCQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIlVTSU5HIElO REVYICV7aW5kZXh9SSIsIDEsCisJCQkJCQkJCQkJCSAgImluZGV4IiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCQkJCQkJICAoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5uYW1l KTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9cyIsIHRtcG9i ajIpOworCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Vu YWJsZVJvd1NlY3VyaXR5OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUk9X IExFVkVMIFNFQ1VSSVRZIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJl bmFibGUgcm93IHNlY3VyaXR5Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJs ZVJvd1NlY3VyaXR5OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFJPVyBM RVZFTCBTRUNVUklUWSIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlz YWJsZSByb3cgc2VjdXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKyNpZmRlZiBUT0RPTElTVAorCQkJ Y2FzZSBBVF9HZW5lcmljT3B0aW9uczoKKwkJCQl0bXBvYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMo KExpc3QgKikgc3ViY21kLT5kZWYsIE5VTEwpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQlj YXNlIEFUX0F0dGFjaFBhcnRpdGlvbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQVRU QUNIIFBBUlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJhdHRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCSAicGFydGl0 aW9uX2lkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFk ZHJlc3Mub2JqZWN0SWQpKTsKKworCQkJCWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxL SU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIle3BhcnRpdGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25C b3VuZChzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBB VF9EZXRhY2hQYXJ0aXRpb246CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQ QVJUSVRJT04gJXtwYXJ0aXRpb25faWRlbnRpdHl9RCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZGV0YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkgInBhcnRpdGlvbl9p ZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNz Lm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbkZp bmFsaXplOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJERVRBQ0ggUEFSVElUSU9OICV7 cGFydGl0aW9uX2lkZW50aXR5fUQgRklOQUxJWkUiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImRldGFjaCBwYXJ0aXRpb24gZmluYWxpemUiLAorCQkJCQkJCQkJICJwYXJ0 aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+ YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9BZGRJZGVudGl0 eToKKwkJCQl7CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7 CisJCQkJCU9ialRyZWUJKnNlcWRlZjsKKwkJCQkJQ29sdW1uRGVmICAqY29sZGVmID0gKENvbHVt bkRlZiAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgQ09MVU1OICV7Y29sdW1ufUkgQUREICV7aWRlbnRpdHlfY29sdW1ufXMiLCAyLAorCQkJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgaWRlbnRpdHkiLAorCQkJCQkJCQkJCSAi Y29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlhdHRudW0gPSBn ZXRfYXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2Vx X3JlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51 bSwgdHJ1ZSk7CisJCQkJCXNlcWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlk LCBjb2xkZWYtPmlkZW50aXR5LCBmYWxzZSk7CisKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wb2JqLCAiaWRlbnRpdHlfY29sdW1uIiwgc2VxZGVmKTsKKworCQkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJl YWs7CisJCQljYXNlIEFUX1NldElkZW50aXR5OgorCQkJCXsKKwkJCQkJRGVmRWxlbQkqZGVmZWw7 CisJCQkJCWNoYXIJCWlkZW50aXR5ID0gMDsKKwkJCQkJT2JqVHJlZQkgICAqc2VxZGVmOworCQkJ CQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOworCisKKwkJCQkJdG1w b2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGlkZW50aXR5IiwKKwkJCQkJCQkJCQkg ImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNt ZC0+ZGVmKQorCQkJCQl7CisJCQkJCQlMaXN0CSAgICpkZWYgPSAoTGlzdCAqKSBzdWJjbWQtPmRl ZjsKKworCQkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgTGlzdCkpOworCisJCQkJCQlkZWZl bCA9IGxpbml0aWFsX25vZGUoRGVmRWxlbSwgZGVmKTsKKwkJCQkJCWlkZW50aXR5ID0gZGVmR2V0 SW50MzIoZGVmZWwpOworCQkJCQl9CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlv bkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50 aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCQkJCQlz ZXFkZWYgPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcV9yZWxpZCwgaWRlbnRpdHksIHRydWUp OworCisJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwg c2VxZGVmKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSBBVF9Ecm9wSWRlbnRp dHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1J IERST1AgSURFTlRJVFkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRy b3AgaWRlbnRpdHkiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZl9ub3RfZXhp c3RzfXMiLAorCQkJCQkJCQkJIHN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIp OworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coV0FSTklORywgInVuc3Vw cG9ydGVkIGFsdGVyIHRhYmxlIHN1YnR5cGUgJWQiLAorCQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsK KwkJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFdlIGRvbid0IHN1cHBvcnQgcmVwbGljYXRp bmcgQUxURVIgVEFCTEUgd2hpY2ggY29udGFpbnMgdm9sYXRpbGUKKwkJICogZnVuY3Rpb25zIGJl Y2F1c2UgSXQncyBwb3NzaWJsZSB0aGUgZnVuY3Rpb25zIGNvbnRhaW4gRERML0RNTCBpbgorCQkg KiB3aGljaCBjYXNlIHRoZXNlIG9wZXJ0aW9ucyB3aWxsIGJlIGV4ZWN1dGVkIHR3aWNlIGFuZCBj YXVzZQorCQkgKiBkdXBsaWNhdGUgZGF0YS4gSW4gYWRkaXRpb24sIHdlIGRvbid0IGtub3cgd2hl dGhlciB0aGUgdGFibGVzIGJlaW5nCisJCSAqIGFjY2Vzc2VkIGJ5IHRoZXNlIERETC9ETUwgYXJl IHB1Ymxpc2hlZCBvciBub3QuIFNvIGJsaW5kbHkgYWxsb3dpbmcKKwkJICogc3VjaCBmdW5jdGlv bnMgY2FuIGFsbG93IHVuaW50ZW5kZWQgY2xhdXNlcyBsaWtlIHRoZSB0YWJsZXMgYWNjZXNzZWQK KwkJICogaW4gdGhvc2UgZnVuY3Rpb25zIG1heSBub3QgZXZlbiBleGlzdCBvbiB0aGUgc3Vic2Ny aWJlci1zaWRlLgorCQkgKi8KKwkJaWYgKGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKChOb2Rl ICopIGV4cHJzKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJIGVycm1zZygiQUxURVIgVEFCTEUgY29tbWFuZCB1 c2luZyB2b2xhdGlsZSBmdW5jdGlvbiBjYW5ub3QgYmUgcmVwbGljYXRlZCIpKSk7CisKKwkJLyoK KwkJICogQ2xlYW4gdGhlIGxpc3QgYXMgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhlcmUgaXMgbm8g dm9sYXRpbGUKKwkJICogZnVuY3Rpb24uCisJCSAqLworCQlsaXN0X2ZyZWUoZXhwcnMpOworCQll eHBycyA9IE5JTDsKKwl9CisKKwl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwlpZiAobGlzdF9sZW5ndGgoc3ViY21kcykgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhcHBl bmRfYXJyYXlfb2JqZWN0KGFsdGVyVGFibGVTdG10LCAiJXtzdWJjbWRzOiwgfXMiLCBzdWJjbWRz KTsKKworCXJldHVybiBhbHRlclRhYmxlU3RtdDsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9y IENSRUFURSBUQUJMRSBkZXBhcnNpbmcuCisgKgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2Rl IHdpdGhpbiBhIHJlZ3VsYXIgKG5vbiB0eXBlZCkgdGFibGUgY3JlYXRpb24uCisgKgorICogTk9U IE5VTEwgY29uc3RyYWludHMgaW4gdGhlIGNvbHVtbiBkZWZpbml0aW9uIGFyZSBlbWl0dGVkIGRp cmVjdGx5IGluIHRoZQorICogY29sdW1uIGRlZmluaXRpb24gYnkgdGhpcyByb3V0aW5lOyBvdGhl ciBjb25zdHJhaW50cyBtdXN0IGJlIGVtaXR0ZWQKKyAqIGVsc2V3aGVyZSAodGhlIGluZm8gaW4g dGhlIHBhcnNlIG5vZGUgaXMgaW5jb21wbGV0ZSBhbnl3YXkuKS4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9Db2x1bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4 dCwgYm9vbCBjb21wb3NpdGUsCisJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRl ciwgTGlzdCAqKmV4cHJzKQoreworCU9ialRyZWUJICAgKmNvbHVtbjsKKwlPYmpUcmVlCSAgICp0 bXBvYmo7CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFw VHVwbGUJYXR0clR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBp ZDsKKwlpbnQzMgkJdHlwbW9kOworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90 bnVsbDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkgKiBJbmhlcml0ZWQgY29sdW1ucyB3 aXRob3V0IGxvY2FsIGRlZmluaXRpb25zIG11c3Qgbm90IGJlIGVtaXR0ZWQuCisJICoKKwkgKiBY WFggbWF5YmUgaXQgaXMgdXNlZnVsIHRvIGhhdmUgdGhlbSB3aXRoICJwcmVzZW50ID0gZmFsc2Ui IG9yIHNvbWUgc3VjaD8KKwkgKi8KKwlpZiAoIWNvbGRlZi0+aXNfbG9jYWwpCisJCXJldHVybiBO VUxMOworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5j b2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1Is ICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlv biAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9w Z19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29s bChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlw Y29sbGF0aW9uKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqICV7bmFtZX1J ICV7Y29sdHlwZX1UICV7Y29tcHJlc3Npb259cyAle2RlZmF1bHR9cyAle25vdF9udWxsfXMKKwkg KiAle2NvbGxhdGlvbn1zCisJICovCisJY29sdW1uID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1J ICV7Y29sdHlwZX1UIiwgMywKKwkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb2x1bW4i LAorCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgY29sZGVmLT5jb2xuYW1lLAorCQkJCQkJ CSJjb2x0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZSh0 eXBpZCwgdHlwbW9kKSk7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdfb2Jq dHJlZSgiQ09NUFJFU1NJT04iKTsKKwlpZiAoY29sZGVmLT5jb21wcmVzc2lvbikKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsIGNvbGRlZi0+ Y29tcHJlc3Npb24pOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIl e2NvbXByZXNzaW9uX21ldGhvZH1JIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJw cmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2Nv bXByZXNzaW9ufXMiLCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3X29ianRyZWUoIkNPTExBVEUi KTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBjb2xsYXRpb24pKQorCXsKKwkJT2JqVHJlZSAqY29sbG5h bWU7CisKKwkJY29sbG5hbWUgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9u UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJICAgdHlwY29sbGF0aW9uKTsKKwkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wb2JqLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQorCWVsc2UKKwkJYXBw ZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVj dF9vYmplY3QoY29sdW1uLCAiJXtjb2xsYXRpb259cyIsIHRtcG9iaik7CisKKwlpZiAoIWNvbXBv c2l0ZSkKKwl7CisJCU9pZAlzZXFyZWxpZCA9IEludmFsaWRPaWQ7CisKKwkJLyoKKwkJICogRW1p dCBhIE5PVCBOVUxMIGRlY2xhcmF0aW9uIGlmIG5lY2Vzc2FyeS4gIE5vdGUgdGhhdCB3ZSBjYW5u b3QgdHJ1c3QKKwkJICogcGdfYXR0cmlidXRlLmF0dG5vdG51bGwgaGVyZSwgYmVjYXVzZSB0aGF0 IGJpdCBpcyBhbHNvIHNldCB3aGVuCisJCSAqIHByaW1hcnkga2V5cyBhcmUgc3BlY2lmaWVkOyBh bmQgd2UgbXVzdCBub3QgZW1pdCBhIE5PVCBOVUxMCisJCSAqIGNvbnN0cmFpbnQgaW4gdGhhdCBj YXNlLCB1bmxlc3MgZXhwbGljaXRlbHkgc3BlY2lmaWVkLiAgVGhlcmVmb3JlLAorCQkgKiB3ZSBz Y2FuIHRoZSBsaXN0IG9mIGNvbnN0cmFpbnRzIGF0dGFjaGVkIHRvIHRoaXMgY29sdW1uIHRvIGRl dGVybWluZQorCQkgKiB3aGV0aGVyIHdlIG5lZWQgdG8gZW1pdCBhbnl0aGluZy4KKwkJICogKEZv cnR1bmF0ZWx5LCBOT1QgTlVMTCBjb25zdHJhaW50cyBjYW5ub3QgYmUgdGFibGUgY29uc3RyYWlu dHMuKQorCQkgKgorCQkgKiBJbiB0aGUgQUxURVIgVEFCTEUgY2FzZXMsIHdlIGFsc28gYWRkIGEg Tk9UIE5VTEwgaWYgdGhlIGNvbERlZiBpcworCQkgKiBtYXJrZWQgaXNfbm90X251bGwuCisJCSAq LworCQlzYXdfbm90bnVsbCA9IGZhbHNlOworCQlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3Ry YWludHMpCisJCXsKKwkJCUNvbnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICopIGxmaXJz dChjZWxsKTsKKworCQkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJ CQlzYXdfbm90bnVsbCA9IHRydWU7CisJCX0KKwkJaWYgKGlzX2FsdGVyICYmIGNvbGRlZi0+aXNf bm90X251bGwpCisJCQlzYXdfbm90bnVsbCA9IHRydWU7CisKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY29sdW1uLCAiJXtub3RfbnVsbH1zIiwKKwkJCQkJCQkgc2F3X25vdG51bGwgPyAiTk9UIE5V TEwiIDogIiIpOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChh dHRyRm9ybS0+YXR0aGFzZGVmKQorCQl7CisJCQljaGFyICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9 IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJ CQkJCQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZzdHIpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9i b29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQlhcHBlbmRfb2JqZWN0X29i amVjdChjb2x1bW4sICIle2RlZmF1bHR9cyIsIHRtcG9iaik7CisKKwkJLyogSURFTlRJVFkgQ09M VU1OICovCisJCWlmIChjb2xkZWYtPmlkZW50aXR5KQorCQl7CisJCQlPaWQJYXR0bm8gPSBnZXRf YXR0bnVtKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCQkJc2VxcmVsaWQgPSBnZXRJZGVudGl0 eVNlcXVlbmNlKHJlbGlkLCBhdHRubywgZmFsc2UpOworCQl9CisKKwkJdG1wb2JqID0gZGVwYXJz ZV9Db2x1bW5JZGVudGl0eShzZXFyZWxpZCwgY29sZGVmLT5pZGVudGl0eSwgaXNfYWx0ZXIpOwor CQlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2lkZW50aXR5X2NvbHVtbn1zIiwgdG1w b2JqKTsKKworCQkvKiBHRU5FUkFURUQgQ09MVU1OIEVYUFJFU1NJT04gKi8KKwkJdG1wb2JqID0g bmV3X29ianRyZWUoIkdFTkVSQVRFRCBBTFdBWVMgQVMiKTsKKwkJaWYgKGNvbGRlZi0+Z2VuZXJh dGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfU1RPUkVEKQorCQl7CisJCQljaGFyICpkZWZzdHI7 CisKKwkJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZv cm0tPmF0dG51bSwKKwkJCQkJCQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsKKwkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7Z2VuZXJhdGlvbl9leHByfXMgU1RPUkVEIiwgZGVmc3Ry KTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIs IGZhbHNlKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2dlbmVyYXRlZF9j b2x1bW59cyIsIHRtcG9iaik7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCisJ cmV0dXJuIGNvbHVtbjsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBP RiBkZXBhcnNpbmcuCisgKgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHR5 cGVkIHRhYmxlIGNyZWF0aW9uLglUaGlzIGlzIHNpbXBsZXIKKyAqIHRoYW4gdGhlIHJlZ3VsYXIg Y2FzZSwgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRvIGVtaXQgdGhlIHR5cGUgZGVjbGFyYXRpb24s CisgKiBjb2xsYXRpb24sIG9yIGRlZmF1bHQuICBIZXJlIHdlIG9ubHkgcmV0dXJuIHNvbWV0aGlu ZyBpZiB0aGUgY29sdW1uIGlzIGJlaW5nCisgKiBkZWNsYXJlZCBOT1QgTlVMTC4KKyAqCisgKiBB cyBpbiBkZXBhcnNlX0NvbHVtbkRlZiwgYW55IG90aGVyIGNvbnN0cmFpbnQgaXMgcHJvY2Vzc2Vk IGVsc2V3aGVyZS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWZfdHlw ZWQoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgQ29sdW1uRGVmICpjb2xkZWYp Cit7CisJT2JqVHJlZQkqY29sdW1uID0gTlVMTDsKKwlPYmpUcmVlCSp0bXBvYmo7CisJT2lkCQkJ cmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsK KwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlw bW9kOworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2Vs bCAgICpjZWxsOworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29s ZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2co RVJST1IsICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiBy ZWxhdGlvbiAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAo Rm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlw bW9kY29sbChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9k LCAmdHlwY29sbGF0aW9uKTsKKworCS8qCisJICogU2VhcmNoIGZvciBhIE5PVCBOVUxMIGRlY2xh cmF0aW9uLiAgQXMgaW4gZGVwYXJzZV9Db2x1bW5EZWYsIHdlIHJlbHkgb24KKwkgKiBmaW5kaW5n IGEgY29uc3RyYWludCBvbiB0aGUgY29sdW1uIHJhdGhlciB0aGFuIGNvbGRlZi0+aXNfbm90X251 bGwuCisJICogKFRoaXMgcm91dGluZSBpcyBuZXZlciB1c2VkIGZvciBBTFRFUiBjYXNlcy4pCisJ ICovCisJc2F3X25vdG51bGwgPSBmYWxzZTsKKwlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3Ry YWludHMpCisJeworCQlDb25zdHJhaW50ICpjb25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3Qo Y2VsbCk7CisKKwkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJewor CQkJc2F3X25vdG51bGwgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXNhd19u b3RudWxsICYmICFhdHRyRm9ybS0+YXR0aGFzZGVmKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hlKGF0 dHJUdXApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJ ICoKKwkgKiAle25hbWV9SSBXSVRIIE9QVElPTlMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1zLgor CSAqLworCWNvbHVtbiA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSBXSVRIIE9QVElPTlMiLCAy LAorCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJCQkJCQkJIm5hbWUi LCBPYmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY29sdW1uLCAiJXtub3RfbnVsbH1zIiwKKwkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVM TCIgOiAiIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCWlmIChhdHRy Rm9ybS0+YXR0aGFzZGVmKQorCXsKKwkJY2hhciAqZGVmc3RyOworCisJCWRlZnN0ciA9IFJlbGF0 aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJ CQkgIGRwY29udGV4dCwgTlVMTCk7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAi JXtkZWZhdWx0fXMiLCBkZWZzdHIpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0 bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwg IiV7ZGVmYXVsdH1zIiwgdG1wb2JqKTsKKworCS8qCisJICogR2VuZXJhdGVkIGNvbHVtbnMgYXJl IG5vdCBzdXBwb3J0ZWQgb24gdHlwZWQgdGFibGVzLCBzbyB3ZSBhcmUgZG9uZS4KKwkgKi8KKwor CVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKworCXJldHVybiBjb2x1bW47Cit9CisKKy8qCisg KiBEZXBhcnNlIHRoZSBkZWZpbml0aW9uIG9mIGNvbHVtbiBpZGVudGl0eS4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5JZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRl bnRpdHksIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqY29sdW1uOworCU9ialRy ZWUJICAgKmlkZW50b2JqOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCVJlbGF0aW9uCXJlbDsK KwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCUZvcm1f cGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCWNoYXIJICAgKmlkZW50Zm10OworCWNoYXIJICAg Km9iamZtdDsKKworCWNvbHVtbiA9IG5ld19vYmp0cmVlKCIiKTsKKworCWlmICghT2lkSXNWYWxp ZChzZXFyZWxpZCkpCisJeworCQlhcHBlbmRfYm9vbF9vYmplY3QoY29sdW1uLCAicHJlc2VudCIs IGZhbHNlKTsKKwkJcmV0dXJuIGNvbHVtbjsKKwl9CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJewor CQlpZGVudGZtdCA9ICJTRVQgR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1zIjsK Kwl9CisJZWxzZQorCXsKKwkJaWRlbnRmbXQgPSAiR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIl e29wdGlvbn1zIEFTIElERU5USVRZIjsKKwl9CisKKwlpZGVudG9iaiA9IG5ld19vYmp0cmVlKGlk ZW50Zm10KTsKKworCWlmIChpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlfQUxXQVlTKQor CQlhcHBlbmRfc3RyaW5nX29iamVjdChpZGVudG9iaiwgb2JqZm10LCAiQUxXQVlTIik7CisJZWxz ZSBpZiAoaWRlbnRpdHkgPT0gIEFUVFJJQlVURV9JREVOVElUWV9CWV9ERUZBVUxUKQorCQlhcHBl bmRfc3RyaW5nX29iamVjdChpZGVudG9iaiwgb2JqZm10LCAiQlkgREVGQVVMVCIpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KGlkZW50b2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7aWRlbnRpdHlfdHlwZX1zIiwgaWRlbnRvYmop OworCisJcmVsID0gdGFibGVfb3BlbihTZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxv Y2spOworCXNlcXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwgc2VxcmVsaWQp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBzZXF1ZW5jZSAldSIsCisJCQkgc2VxcmVsaWQpOworCisJc2Vx Zm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCXNlcWRhdGEg PSBnZXRfc2VxdWVuY2VfdmFsdWVzKHNlcXJlbGlkKTsKKworCS8qIERlZmluaXRpb24gZWxlbWVu dHMgKi8KKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0NhY2hlKE5VTEwsIHNl cWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1Nl cV9DeWNsZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChl bGVtcywgZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUp KTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZhbHVlKE5VTEwsIHNl cWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1Nl cV9NYXh2YWx1ZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVu ZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxl KSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0YXJ0KE5VTEwsIHNl cWRhdGEpKTsKKwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAq LworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbHVtbiwgIiV7 c2VxX2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCWVsc2UKKwkJYXBwZW5kX2FycmF5X29iamVj dChjb2x1bW4sICIoICV7c2VxX2RlZmluaXRpb246IH1zICkiLCBlbGVtcyk7CisKKwl0YWJsZV9j bG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIGNvbHVtbjsKK30KKworLyoK KyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKQor eworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPYmpUcmVlCSAg ICpjb2xzZXQ7CisJY2hhcgkgICAqZm10OworCWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0 eXBlID09IEFUX1Jlc2V0T3B0aW9uczsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgor CSAqIEFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisJ ICovCisJaWYgKGlzX3Jlc2V0KQorCQlmbXQgPSAiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgUkVT RVQgIjsKKwllbHNlCisJCWZtdCA9ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgIjsKKwor CWNvbHNldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcs IHN1YmNtZC0+bmFtZSk7CisKKwlmb3JlYWNoKGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQor CXsKKwkJRGVmRWxlbQkgICAqZWxlbTsKKwkJT2JqVHJlZQkgICAqc2V0OworCisJCWVsZW0gPSAo RGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBp c19yZXNldCk7CisJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkp OworCX0KKworCUFzc2VydChzZXRzKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbHNldCwgIigl e29wdGlvbnM6LCB9cykiLCBzZXRzKTsKKworCXJldHVybiBjb2xzZXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIHRoZSBDUkVBVEUgRE9NQUlOCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5k IHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2Ig cmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0NyZWF0ZURvbWFpbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sK KwlPYmpUcmVlCSAgICpjcmVhdGVEb21haW47CisJT2JqVHJlZQkgICAqdG1wb2JqOworCUhlYXBU dXBsZQl0eXBUdXA7CisJRm9ybV9wZ190eXBlIHR5cEZvcm07CisJTGlzdAkgICAqY29uc3RyYWlu dHM7CisKKwl0eXBUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZCh0eXBUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgZG9tYWluIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAo Rm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50 YXgKKwkgKgorCSAqIENSRUFURSBET01BSU4gJXtpZGVudGl0eX1EIEFTICV7dHlwZX1UICV7bm90 X251bGx9cyAle2NvbnN0cmFpbnRzfXMKKwkgKiAle2NvbGxhdGlvbn1zCisJICovCisJY3JlYXRl RG9tYWluID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qo Y3JlYXRlRG9tYWluLAorCQkJCQkJICJET01BSU4gJXtpZGVudGl0eX1EIEFTIiwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ IG9iamVjdElkKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLAorCQkJCQkJ ICIle3R5cGV9VCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwYmFz ZXR5cGUsIHR5cEZvcm0tPnR5cHR5cG1vZCkpOworCisJaWYgKHR5cEZvcm0tPnR5cG5vdG51bGwp CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7bm90X251bGx9cyIsICJO T1QgTlVMTCIpOworCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRG9tYWluLCAi JXtub3RfbnVsbH1zIiwgIiIpOworCisJY29uc3RyYWludHMgPSBvYnRhaW5Db25zdHJhaW50cyhO SUwsIEludmFsaWRPaWQsIG9iamVjdElkKTsKKwlpZiAoY29uc3RyYWludHMgPT0gTklMKQorCXsK KwkJdG1wb2JqID0gbmV3X29ianRyZWUoIiIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJZWxzZQorCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiJXtlbGVtZW50czosIH1zIiwgMSwKKwkJCQkJCQkgImVsZW1lbnRzIiwgT2JqVHlwZUFycmF5 LCBjb25zdHJhaW50cyk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtj b25zdHJhaW50c31zIiwgdG1wb2JqKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJDT0xMQVRF Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwY29sbGF0aW9uKSkKKwl7CisJCU9ialRy ZWUgKmNvbGxuYW1lOworCisJCWNvbGxuYW1lID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSAgIHR5cEZvcm0tPnR5cGNvbGxhdGlv bik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7bmFtZX1EIiwgY29sbG5hbWUp OworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFs c2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7Y29sbGF0aW9ufXMi LCB0bXBvYmopOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gY3JlYXRl RG9tYWluOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUZ1bmN0aW9uU3RtdCAoQ1JFQVRF IEZVTkNUSU9OKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVl IHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0 aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVh dGVGdW5jdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGdW5j dGlvblN0bXQgKm5vZGUgPSAoQ3JlYXRlRnVuY3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlPYmpU cmVlCSAgICpjcmVhdGVGdW5jOworCU9ialRyZWUJICAgKnRtcG9iajsKKwlEYXR1bQkJdG1wZGF0 dW07CisJY2hhcgkgICAqc291cmNlOworCWNoYXIJICAgKnByb2JpbjsKKwlMaXN0CSAgICpwYXJh bXM7CisJTGlzdAkgICAqZGVmYXVsdHM7CisJTGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0CSAg ICp0eXBlcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUxpc3RDZWxsICAgKmN1cmRlZjsK KwlMaXN0Q2VsbCAgICp0YWJsZV9wYXJhbXMgPSBOVUxMOworCUhlYXBUdXBsZQlwcm9jVHVwOwor CUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlPaWQJCSAgICp0 eXBhcnJheTsKKwlPaWQJCSAgICp0cmZ0eXBlczsKKwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdGb3Jt OworCWludAkJCWk7CisJaW50CQkJdHlwbnVtOworCWludAkJCW50eXBlczsKKwlib29sCQlpc251 bGw7CisJYm9vbAkJaXNmdW5jdGlvbjsKKworCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLwor CXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgb2JqZWN0SWQpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls dXJlIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXByb2NGb3Jt ID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJLyogR2V0IHRoZSBjb3Jy ZXNwb25kaW5nIHBnX2xhbmd1YWdlIHR1cGxlICovCisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hl MShMQU5HT0lELCBwcm9jRm9ybS0+cHJvbGFuZyk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxh bmdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGxhbmd1YWdl IHdpdGggT0lEICV1IiwKKwkJCSBwcm9jRm9ybS0+cHJvbGFuZyk7CisJbGFuZ0Zvcm0gPSAoRm9y bV9wZ19sYW5ndWFnZSkgR0VUU1RSVUNUKGxhbmdUdXApOworCisJLyoKKwkgKiBEZXRlcm1pbmUg dXNlZnVsIHZhbHVlcyBmb3IgcHJvc3JjIGFuZCBwcm9iaW4uICBXZSBjb3BlIHdpdGggcHJvYmlu CisJICogYmVpbmcgZWl0aGVyIE5VTEwgb3IgIi0iLCBidXQgcHJvc3JjIG11c3QgaGF2ZSBhIHZh bGlkIHZhbHVlLgorCSAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHBy b2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb3NyYywgJmlzbnVsbCk7CisJaWYgKGlz bnVsbCkKKwkJZWxvZyhFUlJPUiwgIm51bGwgcHJvc3JjIGluIGZ1bmN0aW9uIHdpdGggT0lEICV1 Iiwgb2JqZWN0SWQpOworCXNvdXJjZSA9IFRleHREYXR1bUdldENTdHJpbmcodG1wZGF0dW0pOwor CisJLyogRGV0ZXJtaW5lIGEgdXNlZnVsIHZhbHVlIGZvciBwcm9iaW4gKi8KKwl0bXBkYXR1bSA9 IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJv Y19wcm9iaW4sICZpc251bGwpOworCWlmIChpc251bGwpCisJCXByb2JpbiA9IE5VTEw7CisJZWxz ZQorCXsKKwkJcHJvYmluID0gVGV4dERhdHVtR2V0Q1N0cmluZyh0bXBkYXR1bSk7CisJCWlmIChw cm9iaW5bMF0gPT0gJ1wwJyB8fCBzdHJjbXAocHJvYmluLCAiLSIpID09IDApCisJCQlwcm9iaW4g PSBOVUxMOworCX0KKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAl e29yX3JlcGxhY2V9cyBGVU5DVElPTiAle3NpZ25hdHVyZX1zIFJFVFVSTlMgJXtyZXR1cm5fdHlw ZX1zCisJICogTEFOR1VBR0UgJXt0cmFuc2Zvcm1fdHlwZX1zICV7bGFuZ3VhZ2V9SSAle3dpbmRv d31zICV7dm9sYXRpbGl0eX1zCisJICogJXtwYXJhbGxlbF9zYWZldHl9cyAle2xlYWtwcm9vZn1z ICV7c3RyaWN0fXMgJXtzZWN1cml0eV9kZWZpbmVyfXMKKwkgKiAle2Nvc3R9cyAle3Jvd3N9cyAl e3N1cHBvcnR9cyAle3NldF9vcHRpb25zOiB9cyBBUyAle29iamZpbGV9TCwKKwkgKiAle3N5bWJv bH1MCisJICovCisJY3JlYXRlRnVuYyA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle29yX3JlcGxhY2V9cyIsCisJCQkJCQkgbm9k ZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiKTsKKworCS8qCisJICogVG8gY29uc3RydWN0 IHRoZSBhcmd1bWVudHMgYXJyYXksIGV4dHJhY3QgdGhlIHR5cGUgT0lEcyBmcm9tIHRoZQorCSAq IGZ1bmN0aW9uJ3MgcGdfcHJvYyBlbnRyeS4gIElmIHByb25hcmdzIGVxdWFscyB0aGUgcGFyYW1l dGVyIGxpc3QgbGVuZ3RoLAorCSAqIHRoZXJlIGFyZSBubyBPVVQgcGFyYW1ldGVycyBhbmQgdGh1 cyB3ZSBjYW4gZXh0cmFjdCB0aGUgdHlwZSBPSUQgZnJvbQorCSAqIHByb2FyZ3R5cGVzOyBvdGhl cndpc2Ugd2UgbmVlZCB0byBkZWNvZGUgcHJvYWxsYXJndHlwZXMsIHdoaWNoIGlzCisJICogYSBi aXQgbW9yZSBpbnZvbHZlZC4KKwkgKi8KKwl0eXBhcnJheSA9IHBhbGxvYyhsaXN0X2xlbmd0aChu b2RlLT5wYXJhbWV0ZXJzKSAqIHNpemVvZihPaWQpKTsKKwlpZiAobGlzdF9sZW5ndGgobm9kZS0+ cGFyYW1ldGVycykgPiBwcm9jRm9ybS0+cHJvbmFyZ3MpCisJeworCQlEYXR1bQlhbGx0eXBlczsK KwkJRGF0dW0gICp2YWx1ZXM7CisJCWJvb2wgICAqbnVsbHM7CisJCWludAkJbmVsZW1zOworCisJ CWFsbHR5cGVzID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJCSAg IEFudW1fcGdfcHJvY19wcm9hbGxhcmd0eXBlcywgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJ CQllbG9nKEVSUk9SLCAiTlVMTCBwcm9hbGxhcmd0eXBlcywgYnV0IG1vcmUgcGFyYW1ldGVycyB0 aGFuIGFyZ3MiKTsKKwkJZGVjb25zdHJ1Y3RfYXJyYXkoRGF0dW1HZXRBcnJheVR5cGVQKGFsbHR5 cGVzKSwKKwkJCQkJCSAgT0lET0lELCA0LCAndCcsICdpJywKKwkJCQkJCSAgJnZhbHVlcywgJm51 bGxzLCAmbmVsZW1zKTsKKwkJaWYgKG5lbGVtcyAhPSBsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0 ZXJzKSkKKwkJCWVsb2coRVJST1IsICJtaXNtYXRjaGVkIHByb2FsbGFyZ2F0eXBlcyIpOworCQlm b3IgKGkgPSAwOyBpIDwgbGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycyk7IGkrKykKKwkJCXR5 cGFycmF5W2ldID0gdmFsdWVzW2ldOworCX0KKwllbHNlCisJeworCQlmb3IgKGkgPSAwOyBpIDwg bGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycyk7IGkrKykKKwkJCSB0eXBhcnJheVtpXSA9IHBy b2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV07CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSBh cmUgYW55IGRlZmF1bHQgZXhwcmVzc2lvbnMsIHdlIHJlYWQgdGhlIGRlcGFyc2VkIGV4cHJlc3Np b24gYXMKKwkgKiBhIGxpc3Qgc28gdGhhdCB3ZSBjYW4gYXR0YWNoIHRoZW0gdG8gZWFjaCBhcmd1 bWVudC4KKwkgKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVw LAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9hcmdkZWZhdWx0cywgJmlzbnVsbCk7CisJaWYg KCFpc251bGwpCisJeworCQlkZWZhdWx0cyA9IEZ1bmN0aW9uR2V0RGVmYXVsdHMoRGF0dW1HZXRU ZXh0UCh0bXBkYXR1bSkpOworCQljdXJkZWYgPSBsaXN0X2hlYWQoZGVmYXVsdHMpOworCX0KKwll bHNlCisJeworCQlkZWZhdWx0cyA9IE5JTDsKKwkJY3VyZGVmID0gTlVMTDsKKwl9CisKKwkvKgor CSAqIE5vdyBpdGVyYXRlIG92ZXIgZWFjaCBwYXJhbWV0ZXIgaW4gdGhlIHBhcnNldHJlZSB0byBj cmVhdGUgdGhlCisJICogcGFyYW1ldGVycyBhcnJheS4KKwkgKi8KKwlwYXJhbXMgPSBOSUw7CisJ dHlwbnVtID0gMDsKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPnBhcmFtZXRlcnMpCisJeworCQlGdW5j dGlvblBhcmFtZXRlciAqcGFyYW0gPSAoRnVuY3Rpb25QYXJhbWV0ZXIgKikgbGZpcnN0KGNlbGwp OworCQlPYmpUcmVlCSAgICpwYXJhbW9iajsKKwkJT2JqVHJlZQkgICAqZGVmYXVsdHZhbDsKKwkJ T2JqVHJlZQkgICAqbmFtZTsKKworCQkvKgorCQkgKiBBIFBBUkFNX1RBQkxFIHBhcmFtZXRlciBp bmRpY2F0ZXMgZW5kIG9mIGlucHV0IGFyZ3VtZW50czsgdGhlCisJCSAqIGZvbGxvd2luZyBwYXJh bWV0ZXJzIGFyZSBwYXJ0IG9mIHRoZSByZXR1cm4gdHlwZS4gIFdlIGlnbm9yZSB0aGVtCisJCSAq IGhlcmUsIGJ1dCBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBsaXN0 IHNvIHRoYXQKKwkJICogd2UgY2FuIGVhc2lseSBwcm9kdWNlIHRoZSByZXR1cm4gdHlwZSBiZWxv dy4KKwkJICovCisJCWlmIChwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX1RBQkxFKQorCQl7CisJ CQl0YWJsZV9wYXJhbXMgPSBjZWxsOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBWZXJi b3NlIHN5bnRheCBmb3IgcGFyYW1hdGVyOiAle21vZGV9cyAle25hbWV9cyAle3R5cGV9VCAle2Rl ZmF1bHR9cworCQkgKgorCQkgKiBOb3RlIHRoYXQgJXtuYW1lfXMgaXMgYSBzdHJpbmcgaGVyZSwg bm90IGFuIGlkZW50aWZpZXI7IHRoZSByZWFzb24KKwkJICogZm9yIHRoaXMgaXMgdGhhdCBhbiBh YnNlbnQgcGFyYW1ldGVyIG5hbWUgbXVzdCBwcm9kdWNlIGFuIGVtcHR5CisJCSAqIHN0cmluZywg bm90ICIiLCB3aGljaCBpcyB3aGF0IHdvdWxkIGhhcHBlbiBpZiB3ZSB3ZXJlIHRvIHVzZQorCQkg KiAle25hbWV9SSBoZXJlLiAgU28gd2UgYWRkIGFub3RoZXIgbGV2ZWwgb2YgaW5kaXJlY3Rpb24g dG8gYWxsb3cgdXMKKwkJICogdG8gaW5qZWN0IGEgInByZXNlbnQiIHBhcmFtZXRlci4KKwkJICov CisJCXBhcmFtb2JqID0gbmV3X29ianRyZWUoIiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChw YXJhbW9iaiwgIiV7bW9kZX1zIiwKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9J TiA/ICJJTiIgOgorCQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX09VVCA/ICJPVVQi IDoKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9JTk9VVCA/ICJJTk9VVCIgOgor CQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX1ZBUklBRElDID8gIlZBUklBRElDIiA6 CisJCQkJCQkJICJJTiIpOworCisJCS8qIE9wdGlvbmFsIHdob2xlc2FsZSBzdXBwcmVzc2lvbiBv ZiAibmFtZSIgb2NjdXJzIGhlcmUgKi8KKworCQluYW1lID0gbmV3X29ianRyZWUoIiIpOworCQlh cHBlbmRfc3RyaW5nX29iamVjdChuYW1lLCAiJXtuYW1lfUkiLAorCQkJCQkJCSBwYXJhbS0+bmFt ZSA/IHBhcmFtLT5uYW1lIDogIk5VTEwiKTsKKworCQlhcHBlbmRfYm9vbF9vYmplY3QobmFtZSwg InByZXNlbnQiLAorCQkJCQkJICAgcGFyYW0tPm5hbWUgPyB0cnVlIDogZmFsc2UpOworCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXtuYW1lfXMiLCBuYW1lKTsKKworCQlkZWZh dWx0dmFsID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwkJaWYgKFBvaW50ZXJJc1ZhbGlkKHBh cmFtLT5kZWZleHByKSkKKwkJeworCQkJY2hhciAqZXhwcjsKKworCQkJaWYgKGN1cmRlZiA9PSBO VUxMKQorCQkJCWVsb2coRVJST1IsICJwcm9hcmdkZWZhdWx0cyBsaXN0IHRvbyBzaG9ydCIpOwor CQkJZXhwciA9IGxmaXJzdChjdXJkZWYpOworCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChkZWZh dWx0dmFsLCAiJXt2YWx1ZX1zIiwgZXhwcik7CisJCQljdXJkZWYgPSBsbmV4dChkZWZhdWx0cywg Y3VyZGVmKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QoZGVmYXVsdHZhbCwg InByZXNlbnQiLCBmYWxzZSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIl e3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGFycmF5W3R5cG51bSsr XSwgLTEpKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7ZGVmYXVsdH1z IiwgZGVmYXVsdHZhbCk7CisKKwkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rf b2JqZWN0KHBhcmFtb2JqKSk7CisJfQorCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiV7aWRl bnRpdHl9RCIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkg IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCSAgb2JqZWN0SWQpKTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIigi KTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIiV7YXJndW1lbnRzOiwgfXMiLCBwYXJh bXMpOworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIikiKTsKKworCWlzZnVuY3Rpb24g PSAocHJvY0Zvcm0tPnByb2tpbmQgIT0gUFJPS0lORF9QUk9DRURVUkUpOworCisJaWYgKGlzZnVu Y3Rpb24pCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICJGVU5DVElPTiAle3Np Z25hdHVyZX1zIiwgdG1wb2JqKTsKKwllbHNlCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZUZ1bmMsICJQUk9DRURVUkUgJXtzaWduYXR1cmV9cyIsIHRtcG9iaik7CisKKwkvKgorCSAqIEEg cmV0dXJuIHR5cGUgY2FuIGFkb3B0IG9uZSBvZiB0d28gZm9ybXM6IGVpdGhlciBhIFtTRVRPRl0g c29tZV90eXBlLCBvcgorCSAqIGEgVEFCTEUobGlzdC1vZi10eXBlcykuICBXZSBjYW4gdGVsbCB0 aGUgc2Vjb25kIGZvcm0gYmVjYXVzZSB3ZSBzYXcgYQorCSAqIHRhYmxlIHBhcmFtIGFib3ZlIHdo aWxlIHNjYW5uaW5nIHRoZSBhcmd1bWVudCBsaXN0LgorCSAqLworCWlmICh0YWJsZV9wYXJhbXMg PT0gTlVMTCkKKwl7CisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJCSAi cmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAicGxhaW4iKTsKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wb2JqLCAiJXtzZXRvZn1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3JldHNldCA/ ICJTRVRPRiIgOiAiIik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cmV0dHlw ZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb3JldHR5cGUs IC0xKSk7CisJfQorCWVsc2UKKwl7CisJCUxpc3QJICAgKnJldHR5cGVzID0gTklMOworCQlPYmpU cmVlCSAgICpwYXJhbW9iajsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiVEFCTEUiLCAx LAorCQkJCQkJCSAicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAidGFibGUiKTsKKwkJZm9y ICg7IHRhYmxlX3BhcmFtcyAhPSBOVUxMOyB0YWJsZV9wYXJhbXMgPSBsbmV4dChub2RlLT5wYXJh bWV0ZXJzLCB0YWJsZV9wYXJhbXMpKQorCQl7CisJCQlGdW5jdGlvblBhcmFtZXRlciAqcGFyYW0g PSBsZmlyc3QodGFibGVfcGFyYW1zKTsKKworCQkJcGFyYW1vYmogPSBuZXdfb2JqdHJlZSgiIik7 CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChwYXJhbW9iaiwgIiV7bmFtZX1JIiwgcGFyYW0tPm5h bWUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIle3R5cGV9VCIsCisJCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBhcnJheVt0eXBudW0rK10sIC0xKSk7CisJCQly ZXR0eXBlcyA9IGxhcHBlbmQocmV0dHlwZXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtb2JqKSk7 CisJCX0KKworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle3JldHR5cGVzOiwgfXMp IiwgcmV0dHlwZXMpOworCX0KKworCWlmIChpc2Z1bmN0aW9uKQorCQlhcHBlbmRfb2JqZWN0X29i amVjdChjcmVhdGVGdW5jLCAiUkVUVVJOUyAle3JldHVybl90eXBlfXMiLCB0bXBvYmopOworCisJ LyogVFJBTlNGT1JNIEZPUiBUWVBFICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlRSQU5TRk9S TSIpOworCisJbnR5cGVzID0gZ2V0X2Z1bmNfdHJmdHlwZXMocHJvY1R1cCwgJnRyZnR5cGVzKTsK Kwlmb3IgKGkgPSAwOyBpIDwgbnR5cGVzOyBpKyspCisJeworCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiRk9SIFRZUEUgJXt0eXBlfVQiLCAxLAorCQkJCQkJCSAidHlwZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHRyZnR5cGVzW2ldLCAtMSkpOworCQl0 eXBlcyA9IGxhcHBlbmQodHlwZXMsIHRtcG9iaik7CisJfQorCisJaWYgKHR5cGVzKQorCQlhcHBl bmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIiV7Zm9yX3R5cGU6LCB9cyIsIHR5cGVzKTsKKwllbHNl CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIiV7dHJhbnNmb3JtX3R5cGV9cyIsIHRtcG9i aik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiTEFOR1VBR0UgJXtsYW5n dWFnZX1JIiwKKwkJCQkJCSBOYW1lU3RyKGxhbmdGb3JtLT5sYW5uYW1lKSk7CisKKwlpZiAoaXNm dW5jdGlvbikKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3dpbmRv d31zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2tpbmQgPT0gUFJPS0lORF9XSU5ET1cgPyAiV0lO RE9XIiA6ICIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7dm9sYXRp bGl0eX1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09IFBST1ZPTEFUSUxFX1ZP TEFUSUxFID8KKwkJCQkJCQkgIlZPTEFUSUxFIiA6CisJCQkJCQkJIHByb2NGb3JtLT5wcm92b2xh dGlsZSA9PSBQUk9WT0xBVElMRV9TVEFCTEUgPworCQkJCQkJCSAiU1RBQkxFIiA6ICJJTU1VVEFC TEUiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtwYXJhbGxlbF9z YWZldHl9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9wYXJhbGxlbCA9PSBQUk9QQVJBTExFTF9T QUZFID8KKwkJCQkJCQkgIlBBUkFMTEVMIFNBRkUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3Bh cmFsbGVsID09IFBST1BBUkFMTEVMX1JFU1RSSUNURUQgPworCQkJCQkJCSAiUEFSQUxMRUwgUkVT VFJJQ1RFRCIgOiAiUEFSQUxMRUwgVU5TQUZFIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo Y3JlYXRlRnVuYywgIiV7bGVha3Byb29mfXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvbGVha3By b29mID8gIkxFQUtQUk9PRiIgOiAiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1 bmMsICIle3N0cmljdH1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2lzc3RyaWN0ID8KKwkJCQkJ CQkgIlJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUIiA6CisJCQkJCQkJICJDQUxMRUQgT04gTlVM TCBJTlBVVCIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3NlY3Vy aXR5X2RlZmluZXJ9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9zZWNkZWYgPworCQkJCQkJCSAi U0VDVVJJVFkgREVGSU5FUiIgOiAiU0VDVVJJVFkgSU5WT0tFUiIpOworCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle2Nvc3R9cyIsCisJCQkJCQkJIG5ld19vYmp0cmVlX1ZB KCJDT1NUICV7Y29zdH1uIiwgMSwKKwkJCQkJCQkJCQkJImNvc3QiLCBPYmpUeXBlRmxvYXQsCisJ CQkJCQkJCQkJCXByb2NGb3JtLT5wcm9jb3N0KSk7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWUo IlJPV1MiKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9yb3dzID09IDApCisJCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJZWxzZQorCQkJYXBwZW5kX2Zsb2F0 X29iamVjdCh0bXBvYmosICIle3Jvd3N9biIsIHByb2NGb3JtLT5wcm9yb3dzKTsKKwkJYXBwZW5k X29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIiV7cm93c31zIiwgdG1wb2JqKTsKKworCQl0bXBv YmogPSBuZXdfb2JqdHJlZSgiU1VQUE9SVCAle25hbWV9cyIpOworCQlpZiAocHJvY0Zvcm0tPnBy b3N1cHBvcnQpCisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQkvKgorCQkJICogV2Ug c2hvdWxkIHF1YWxpZnkgdGhlIHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1lIGlmIGl0IHdvdWxkbid0 IGJlCisJCQkgKiByZXNvbHZlZCBieSBsb29rdXAgaW4gdGhlIGN1cnJlbnQgc2VhcmNoIHBhdGgu CisJCQkgKi8KKwkJCWFyZ3R5cGVzWzBdID0gSU5URVJOQUxPSUQ7CisJCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBvYmosICIle25hbWV9cyIsCisJCQkJCQkJCSBnZW5lcmF0ZV9mdW5jdGlvbl9u YW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJCQlOSUwsIGFyZ3R5cGVz LAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJCQkJRVhQUl9LSU5EX05P TkUpKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2Vu dCIsIGZhbHNlKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXtzdXBw b3J0fXMiLCB0bXBvYmopOworCX0KKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7 CisJCURlZkVsZW0JKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChz dHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZXQiKSA9PSAwKQorCQl7CisJCQlWYXJpYWJsZVNldFN0 bXQgKnNzdG10ID0gKFZhcmlhYmxlU2V0U3RtdCAqKSBkZWZlbC0+YXJnOworCQkJY2hhciAqdmFs dWUgPSBFeHRyYWN0U2V0VmFyaWFibGVBcmdzKHNzdG10KTsKKworCQkJdG1wb2JqID0gZGVwYXJz ZV9GdW5jdGlvblNldChzc3RtdC0+a2luZCwgc3N0bXQtPm5hbWUsIHZhbHVlKTsKKwkJCXNldHMg PSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQl9CisJfQorCWFw cGVuZF9hcnJheV9vYmplY3QoY3JlYXRlRnVuYywgIiV7c2V0X29wdGlvbnM6IH1zIiwgc2V0cyk7 CisKKwkvKiBBZGQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKwkodm9pZCkgU3lzQ2FjaGVH ZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsIEFudW1fcGdfcHJvY19wcm9zcWxib2R5LCAmaXNudWxs KTsKKwlpZiAocHJvY0Zvcm0tPnByb2xhbmcgPT0gU1FMbGFuZ3VhZ2VJZCAmJiAhaXNudWxsKQor CXsKKwkJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJCWluaXRTdHJpbmdJbmZvKCZidWYpOworCQlw cmludF9mdW5jdGlvbl9zcWxib2R5KCZidWYsIHByb2NUdXApOworCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZUZ1bmMsICIle2RlZmluaXRpb259cyIsIGJ1Zi5kYXRhKTsKKwl9CisJZWxz ZSBpZiAocHJvYmluID09IE5VTEwpCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVG dW5jLCAiQVMgJXtkZWZpbml0aW9ufUwiLAorCQkJCQkJCSBzb3VyY2UpOworCX0KKwllbHNlCisJ eworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiQVMgJXtvYmpmaWxlfUwiLCBw cm9iaW4pOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiLCAle3N5bWJvbH1M Iiwgc291cmNlKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUobGFuZ1R1cCk7CisJUmVsZWFzZVN5 c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJuIGNyZWF0ZUZ1bmM7Cit9CisKKy8qCisgKiBEZXBh cnNlIGEgQ1JFQVRFIE9QRVJBVE9SIENMQVNTIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQ3JlYXRlT3BDbGFzc1N0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQorewor CU9pZAkJCW9wY29pZCA9IGNtZC0+ZC5jcmVhdGVvcGMuYWRkcmVzcy5vYmplY3RJZDsKKwlIZWFw VHVwbGUgICBvcGNUdXA7CisJSGVhcFR1cGxlICAgb3BmVHVwOworCUZvcm1fcGdfb3BmYW1pbHkg b3BmRm9ybTsKKwlGb3JtX3BnX29wY2xhc3Mgb3BjRm9ybTsKKwlPYmpUcmVlCSAgICpzdG10Owor CU9ialRyZWUJICAgKnRtcG9iajsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7 CisKKwkvKiBEb24ndCBkZXBhcnNlIHNxbCBjb21tYW5kcyBnZW5lcmF0ZWQgd2hpbGUgY3JlYXRp bmcgZXh0ZW5zaW9uICovCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uKQorCQlyZXR1cm4gTlVMTDsK KworCW9wY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0ob3Bj b2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wY1R1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGNsYXNzIHdpdGggT0lEICV1Iiwgb3Bjb2lkKTsKKwlv cGNGb3JtID0gKEZvcm1fcGdfb3BjbGFzcykgR0VUU1RSVUNUKG9wY1R1cCk7CisKKwlvcGZUdXAg PSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLCBvcGNGb3JtLT5vcGNmYW1p bHkpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisK KwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgT1BFUkFUT1IgQ0xBU1Mg JXtpZGVudGl0eX1EICV7ZGVmYXVsdH1zIEZPUiBUWVBFICV7dHlwZX1UIFVTSU5HCisJICogJXth bW5hbWV9SSAle29wZmFtaWx5fXMgQVMgJXtpdGVtczosIH1zCisJICovCisKKwlzdG10ID0gbmV3 X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiBDTEFTUyAle2lkZW50aXR5fUQiLCAxLAorCQkJ CQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUob3BjRm9ybS0+b3BjbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihv cGNGb3JtLT5vcGNuYW1lKSkpOworCisJLyogQWRkIHRoZSBERUZBVUxUIGNsYXVzZSAqLworCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHN0bXQsICIle2RlZmF1bHR9cyIsCisJCQkJCQkgb3BjRm9ybS0+ b3BjZGVmYXVsdCA/ICJERUZBVUxUIiA6ICIiKTsKKworCS8qIEFkZCB0aGUgRk9SIFRZUEUgY2xh dXNlICovCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIkZPUiBUWVBFICV7dHlwZX1UIiwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGNGb3JtLT5vcGNpbnR5cGUsIC0xKSk7CisK KwkvKiBBZGQgdGhlIFVTSU5HIGNsYXVzZSAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHN0bXQs ICJVU0lORyAle2FtbmFtZX1JIiwgZ2V0X2FtX25hbWUob3BjRm9ybS0+b3BjbWV0aG9kKSk7CisK KwkvKgorCSAqIEFkZCB0aGUgRkFNSUxZIGNsYXVzZTsgYnV0IGlmIGl0IGhhcyB0aGUgc2FtZSBu YW1lIGFuZCBuYW1lc3BhY2UgYXMgdGhlCisJICogb3BjbGFzcywgdGhlbiBoYXZlIGl0IGV4cGFu ZCB0byBlbXB0eSwgYmVjYXVzZSBpdCB3b3VsZCBjYXVzZSBhIGZhaWx1cmUKKwkgKiBpZiB0aGUg b3BmYW1pbHkgd2FzIGNyZWF0ZWQgaW50ZXJuYWxseS4KKwkgKi8KKwl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiRkFNSUxZICV7b3BmYW1pbHl9RCIsIDEsCisJCQkJCQkgIm9wZmFtaWx5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3Bm bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSk7CisK KwlpZiAoc3RyY21wKE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSksIE5hbWVTdHIob3BjRm9ybS0+ b3BjbmFtZSkpID09IDAgJiYKKwkJb3BmRm9ybS0+b3BmbmFtZXNwYWNlID09IG9wY0Zvcm0tPm9w Y25hbWVzcGFjZSkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxz ZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtvcGZhbWlseX1zIiwgIHRtcG9i aik7CisKKwkvKgorCSAqIEFkZCB0aGUgaW5pdGlhbCBpdGVtIGxpc3QuICBOb3RlIHdlIGFsd2F5 cyBhZGQgdGhlIFNUT1JBR0UgY2xhdXNlLCBldmVuCisJICogd2hlbiBpdCBpcyBpbXBsaWNpdCBp biB0aGUgb3JpZ2luYWwgY29tbWFuZC4KKwkgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiU1RP UkFHRSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGNGb3JtLT5vcGNrZXl0eXBlICE9IEludmFsaWRPaWQg PworCQkJCQkJCQkJCQkgIG9wY0Zvcm0tPm9wY2tleXR5cGUgOiBvcGNGb3JtLT5vcGNpbnR5cGUs CisJCQkJCQkJCQkJCSAgLTEpKTsKKwlsaXN0ID0gbGlzdF9tYWtlMShuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKworCS8qIEFkZCB0aGUgZGVjbGFyZWQgb3BlcmF0b3JzICovCisJZm9yZWFj aChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVy ICpvcGVyID0gbGZpcnN0KGNlbGwpOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPUEVS QVRPUiAle251bX1uICV7b3BlcmF0b3J9Tygle2x0eXBlfVQsICV7cnR5cGV9VCkiLAorCQkJCQkJ CSA0LAorCQkJCQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIsIG9wZXItPm51bWJlciwKKwkJCQkJ CQkgIm9wZXJhdG9yIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wZXItPm9iamVj dCksCisJCQkJCQkJImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9m b3JfdHlwZShvcGVyLT5sZWZ0dHlwZSwgLTEpLAorCQkJCQkJCSJydHlwZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+cmlnaHR0eXBlLCAtMSkpOwor CisJCS8qIEFkZCB0aGUgRk9SIFNFQVJDSCAvIEZPUiBPUkRFUiBCWSBjbGF1c2UgKi8KKwkJaWYg KG9wZXItPnNvcnRmYW1pbHkgPT0gSW52YWxpZE9pZCkKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgIkZPUiBTRUFSQ0giKTsKKwkJZWxzZQorCQl7CisJCQlP YmpUcmVlCSAgICp0bXBvYmoyOworCisJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIkZPUiBP UkRFUiBCWSAle29wZmFtaWx5fUQiLCAwKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9i ajIsICJvcGZhbWlseSIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3Bl cmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIG9wZXItPnNvcnRmYW1pbHkp KTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgdG1wb2Jq Mik7CisJCX0KKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwl9CisKKwkvKiBBZGQgdGhlIGRlY2xhcmVkIHN1cHBvcnQgZnVuY3Rpb25zICovCisJ Zm9yZWFjaChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLnByb2NlZHVyZXMpCisJeworCQlPcEZhbWls eU1lbWJlciAqcHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJSGVhcFR1cGxlCXByb2NUdXA7CisJCUZv cm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJT2lkCQkgICAqcHJvYXJndHlwZXM7CisJCUxpc3QJICAg KmFyZ2xpc3QgPSBOSUw7CisJCWludAkJCWk7CisKKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hl MShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2MtPm9iamVjdCkpOworCQlpZiAoIUhlYXBU dXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJcHJvY0Zvcm0gPSAoRm9ybV9w Z19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IkZVTkNUSU9OICV7bnVtfW4gKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle2Z1bmN0aW9ufUQiLAor CQkJCQkJCSA0LAorCQkJCQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJlciwK KwkJCQkJCQkgImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkgInJ0eXBlIiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSksCisJ CQkJCQkJICJmdW5jdGlvbiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0 cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKworCQlwcm9hcmd0eXBlcyA9IHByb2NGb3JtLT5wcm9h cmd0eXBlcy52YWx1ZXM7CisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkr KykKKwkJeworCQkJT2JqVHJlZQkgICAqYXJnOworCisJCQlhcmcgPSBuZXdfb2JqdHJlZV9mb3Jf dHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJYXJnbGlzdCA9IGxhcHBlbmQoYXJnbGlzdCwg bmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJCX0KKworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0 bXBvYmosICIoIik7CisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd0eXBlczos IH1UIiwgYXJnbGlzdCk7CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIikiKTsKKwor CQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10 LCAiQVMgJXtpdGVtczosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsK KwlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKworCXJldHVybiBzdG10OworfQorCisvKgorICog RGVwYXJzZSBhIENyZWF0ZVRyaWdTdG10IChDUkVBVEUgT1BFUkFUT1IgRkFNSUxZKQorICoKKyAq IEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCBy ZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5KE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZSAgIG9wZlR1cDsKKwlIZWFwVHVwbGUg ICBhbVR1cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJRm9ybV9wZ19hbSAgYW1Gb3Jt OworCU9ialRyZWUJICAgKmNvcGZTdG10OworCisJb3BmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9Q RkFNSUxZT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKG9wZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBv cGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJb3BmRm9ybSA9IChGb3Jt X3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCWFtVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKG9wZkZvcm0tPm9wZm1ldGhvZCkpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZChhbVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1IiwKKwkJCSBvcGZGb3JtLT5vcGZtZXRob2QpOworCWFt Rm9ybSA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOworCisJY29wZlN0bXQgPSBuZXdf b2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXth bW5hbWV9SSIsCisJCQkJCQkJICAyLAorCQkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkJICAgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSksCisJCQkJCQkJ ICAiYW1uYW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihhbUZvcm0tPmFtbmFtZSkpOworCisJ UmVsZWFzZVN5c0NhY2hlKGFtVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKworCXJl dHVybiBjb3BmU3RtdDsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVQb2xp Y3lTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVBvbGljeVN0 bXQgKm5vZGUgPSAoQ3JlYXRlUG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAq cG9saWN5OworCisJcG9saWN5ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBQT0xJQ1kgJXtpZGVu dGl0eX1JIiwgMSwKKwkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5wb2xp Y3lfbmFtZSk7CisKKwkvKiBhZGQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZmICovCisJYWRkX3BvbGlj eV9jbGF1c2VzKHBvbGljeSwgb2JqZWN0SWQsIG5vZGUtPnJvbGVzLCAhIW5vZGUtPnF1YWwsCisJ CQkJCSAgICEhbm9kZS0+d2l0aF9jaGVjayk7CisKKwlyZXR1cm4gcG9saWN5OworfQorCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyUG9saWN5U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlBbHRlclBvbGljeVN0bXQgKm5vZGUgPSAoQWx0ZXJQb2xpY3lTdG10 ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpwb2xpY3k7CisKKwlwb2xpY3kgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgUE9MSUNZICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkJImlkZW50aXR5 IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cG9saWN5X25hbWUpOworCisJLyogYWRkIHRoZSByZXN0 IG9mIHRoZSBzdHVmZiAqLworCWFkZF9wb2xpY3lfY2xhdXNlcyhwb2xpY3ksIG9iamVjdElkLCBu b2RlLT5yb2xlcywgISFub2RlLT5xdWFsLAorCQkJCQkgICAhIW5vZGUtPndpdGhfY2hlY2spOwor CisJcmV0dXJuIHBvbGljeTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTY2hlbWFTdG10 LgorICoKKyAqIEdpdmVuIGEgc2NoZW1hIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0 ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNv bW1hbmQuCisgKgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVNjaGVtYVN0 bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU2NoZW1hU3RtdCAq bm9kZSA9IChDcmVhdGVTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkJICpjcmVh dGVTY2hlbWE7CisJT2JqVHJlZQkJCSAqYXV0aDsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgK KwkgKgorCSAqIENSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRo b3JpemF0aW9ufXMKKwkgKi8KKwljcmVhdGVTY2hlbWEgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIFND SEVNQSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU2NoZW1hLCAiJXtpZl9ub3Rf ZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIg OiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTY2hlbWEsICIle25hbWV9SSIs IG5vZGUtPnNjaGVtYW5hbWUpOworCisJYXV0aCA9IG5ld19vYmp0cmVlKCJBVVRIT1JJWkFUSU9O Iik7CisJaWYgKG5vZGUtPmF1dGhyb2xlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChhdXRoLCAi JXthdXRob3JpemF0aW9uX3JvbGV9SSIsCisJCQkJCQkJIGdldF9yb2xlc3BlY19uYW1lKG5vZGUt PmF1dGhyb2xlKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KGF1dGgsICIle2F1 dGhvcml6YXRpb25fcm9sZX1JICIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QoYXV0aCwgInByZXNl bnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVNjaGVtYSwgIiV7 YXV0aG9yaXphdGlvbn1zIiwgYXV0aCk7CisKKwlyZXR1cm4gY3JlYXRlU2NoZW1hOworfQorCisv KgorICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgZG9tYWluLgorICovCitzdGF0aWMg Y2hhciAqCitEb21haW5HZXREZWZhdWx0KEhlYXBUdXBsZSBkb21UdXApCit7CisJRGF0dW0JZGVm OworCU5vZGUgICAqZGVmdmFsOworCWNoYXIgICAqZGVmc3RyOworCWJvb2wJaXNudWxsOworCisJ ZGVmID0gU3lzQ2FjaGVHZXRBdHRyKFRZUEVPSUQsIGRvbVR1cCwgQW51bV9wZ190eXBlX3R5cGRl ZmF1bHRiaW4sCisJCQkJCQkJICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1Is ICJkb21haW4gXCIlc1wiIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlIiwKKwkJCSBOYW1l U3RyKCgoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QoZG9tVHVwKSktPnR5cG5hbWUpKTsKKwlkZWZ2 YWwgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyhkZWYpKTsKKwlkZWZzdHIgPSBk ZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBOVUxMIC8qIGRwY29udGV4dD8gKi8sCisJCQkJCQkJ CQkgICBmYWxzZSwgZmFsc2UpOworCisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAqIERlcGFy c2UgYSBBbHRlckRvbWFpblN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0 ZXJEb21haW5TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJT2JqZWN0 QWRkcmVzcyBjb25zdHJhaW50QWRkcikKK3sKKwlBbHRlckRvbWFpblN0bXQgKm5vZGUgPSAoQWx0 ZXJEb21haW5TdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZG9tVHVwOworCUZvcm1fcGdf dHlwZSBkb21Gb3JtOworCU9ialRyZWUJICAgKmFsdGVyRG9tOworCWNoYXIJICAgKmZtdDsKKwlj b25zdCBjaGFyICp0eXBlOworCisJLyogQUxURVIgRE9NQUlOIERST1AgQ09OU1RSQUlOVCBpcyBo YW5kbGVkIGJ5IHRoZSBEUk9QIHN1cHBvcnQgY29kZSAqLworCWlmIChub2RlLT5zdWJ0eXBlID09 ICdYJykKKwkJcmV0dXJuIE5VTEw7CisKKwlkb21UdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9J RCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChkb21UdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZG9tYWluIHdpdGggT0lEICV1IiwKKwkJCSBv YmplY3RJZCk7CisJZG9tRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChkb21UdXApOwor CisJc3dpdGNoIChub2RlLT5zdWJ0eXBlKQorCXsKKwkJY2FzZSAnVCc6CisJCQkvKiBTRVQgREVG QVVMVCAvIERST1AgREVGQVVMVCAqLworCQkJaWYgKG5vZGUtPmRlZiA9PSBOVUxMKQorCQkJewor CQkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJCXR5cGUgPSAiZHJvcCBkZWZhdWx0IjsKKwkJ CQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCB0eXBlKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9 RCBEUk9QIERFRkFVTFQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21G b3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlw bmFtZSkpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsK KwkJCQl0eXBlID0gInNldCBkZWZhdWx0IjsKKwkJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZB KGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCQlhcHBlbmRfb2JqZWN0 X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCBTRVQgREVGQVVMVCIsCisJCQkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGFsdGVyRG9tLCAiJXtkZWZhdWx0fXMiLCBEb21haW5HZXREZWZhdWx0KGRvbVR1cCkp OworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSAnTic6CisJCQkvKiBEUk9QIE5PVCBOVUxMICov CisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAiZHJvcCBub3QgbnVsbCI7CisJ CQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCB0eXBlKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtpZGVudGl0eX1E IERST1AgTk9UIE5VTEwiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZv cm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5h bWUpKSk7CisJCQlicmVhazsKKwkJY2FzZSAnTyc6CisJCQkvKiBTRVQgTk9UIE5VTEwgKi8KKwkJ CWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJzZXQgbm90IG51bGwiOworCQkJYWx0 ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgdHlw ZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCBTRVQg Tk9UIE5VTEwiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5 cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7 CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJCQkvKiBBREQgQ09OU1RSQUlOVC4gIE9ubHkgQ0hF Q0sgY29uc3RyYWludHMgYXJlIHN1cHBvcnRlZCBieSBkb21haW5zICovCisJCQlmbXQgPSAiQUxU RVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAiYWRkIGNvbnN0cmFpbnQiOworCQkJYWx0ZXJEb20gPSBu ZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgdHlwZSk7CisJCQlh cHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCS8qIGEgbmV3IGNvbnN0cmFp bnQgaGFzIGEgbmFtZSBhbmQgZGVmaW5pdGlvbiAqLworCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo YWx0ZXJEb20sICJBREQgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zIiwKKwkJCQkJCQkJ IGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyYWludEFkZHIub2JqZWN0SWQpKTsKKwkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGFsdGVyRG9tLCAiJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQkgcGdf Z2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyYWludEFkZHIub2JqZWN0SWQp KTsKKwkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCS8qIFZBTElEQVRFIENPTlNUUkFJTlQgKi8K KwkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJ2YWxpZGF0ZSBjb25zdHJhaW50 IjsKKworCQkJLyoKKwkJCSAqIFByb2Nlc3Mgc3VidHlwZT1zcGVjaWZpYyBvcHRpb25zLiBWYWxp ZGF0aW9uIGEgY29uc3RyYWludAorCQkJICogcmVxdWlyZXMgaXRzIG5hbWUuCisJCQkgKi8KKwkJ CWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVTdHJpbmcs IHR5cGUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50aXR5fUQi LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQlhcHBl bmRfc3RyaW5nX29iamVjdChhbHRlckRvbSwgIlZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25zdHJh aW50X25hbWV9cyIsIG5vZGUtPm5hbWUpOworCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVs b2coRVJST1IsICJpbnZhbGlkIHN1YnR5cGUgJWMiLCBub2RlLT5zdWJ0eXBlKTsKKwl9CisKKwkv KiBkb25lICovCisJUmVsZWFzZVN5c0NhY2hlKGRvbVR1cCk7CisKKwlyZXR1cm4gYWx0ZXJEb207 Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIENyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10IChDUkVBVEUg U0VSVkVSKQorICoKKyAqIEdpdmVuIGEgc2VydmVyIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0 IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRpbmcgdGhlIGFs dGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRm9yZWln blNlcnZlclN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRm9y ZWlnblNlcnZlclN0bXQgKm5vZGUgPSAoQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQgKikgcGFyc2V0 cmVlOworCU9ialRyZWUgICAgKmNyZWF0ZVNlcnZlcjsKKwlPYmpUcmVlICAgICp0bXA7CisKKwlj cmVhdGVTZXJ2ZXIgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFNFUlZFUiAle2lkZW50aXR5fUki LCAxLAorCQkJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnNlcnZlcm5h bWUpOworCisJLyogYWRkIGEgVFlQRSBjbGF1c2UsIGlmIGFueSAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJUWVBFIiwgMCk7CisJaWYgKG5vZGUtPnNlcnZlcnR5cGUpCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcCwgIiV7dHlwZX1MIiwgbm9kZS0+c2VydmVydHlwZSk7CisJZWxzZQorCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChjcmVhdGVTZXJ2ZXIsICIle3R5cGV9cyIsIHRtcCk7CisKKwkvKiBhZGQgYSBWRVJT SU9OIGNsYXVzZSwgaWYgYW55ICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlZFUlNJT04iLCAw KTsKKwlpZiAobm9kZS0+dmVyc2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt2 ZXJzaW9ufUwiLCBub2RlLT52ZXJzaW9uKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0 bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVNlcnZl ciwgIiV7dmVyc2lvbn1zIiwgdG1wKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVNl cnZlciwgIkZPUkVJR04gREFUQSBXUkFQUEVSICV7ZmR3fUkiLCBub2RlLT5mZHduYW1lKTsKKwkv KiBhZGQgYW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGNyZWF0ZVNlcnZlciwgIiV7Z2VuZXJpY19vcHRpb25zfXMiLAorCQkJCQkJIGRlcGFyc2VfRmR3 T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlyZXR1cm4gY3JlYXRlU2VydmVyOwor fQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckZvcmVpZ25TZXJ2ZXJTdG10IChBTFRFUiBTRVJW RVIpCisgKgorICogR2l2ZW4gYSBzZXJ2ZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIg Y29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckZvcmVpZ25TZXJ2 ZXJTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRm9yZWlnblNl cnZlclN0bXQgKm5vZGUgPSAoQWx0ZXJGb3JlaWduU2VydmVyU3RtdCAqKSBwYXJzZXRyZWU7CisJ T2JqVHJlZSAgICAqYWx0ZXJTZXJ2ZXI7CisJT2JqVHJlZSAgICAqdG1wOworCisJYWx0ZXJTZXJ2 ZXIgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgU0VSVkVSICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJ CQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zZXJ2ZXJuYW1lKTsKKworCS8q IGFkZCBhIFZFUlNJT04gY2xhdXNlLCBpZiBhbnkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi VkVSU0lPTiIsIDApOworCWlmIChub2RlLT5oYXNfdmVyc2lvbiAmJiBub2RlLT52ZXJzaW9uKQor CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle3ZlcnNpb259TCIsIG5vZGUtPnZlcnNpb24p OworCWVsc2UgaWYgKG5vZGUtPmhhc192ZXJzaW9uKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0 bXAsICJ2ZXJzaW9uIiwgIk5VTEwiKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAs ICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyU2VydmVyLCAi JXt2ZXJzaW9ufXMiLCB0bXApOworCisJLyogYWRkIGEgVkVSU0lPTiBjbGF1c2UsIGlmIGFueSAq LworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWRVJTSU9OIiwgMCk7CisJaWYgKG5vZGUtPmhhc192 ZXJzaW9uICYmIG5vZGUtPnZlcnNpb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7 dmVyc2lvbn1MIiwgbm9kZS0+dmVyc2lvbik7CisJZWxzZSBpZiAobm9kZS0+aGFzX3ZlcnNpb24p CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgInZlcnNpb24iLCAiTlVMTCIpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29i amVjdF9vYmplY3QoYWx0ZXJTZXJ2ZXIsICIle3ZlcnNpb259cyIsIHRtcCk7CisKKwkvKiBhZGQg YW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVy U2VydmVyLCAiJXtnZW5lcmljX29wdGlvbnN9cyIsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25z KG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsKKworCXJldHVybiBhbHRlclNlcnZlcjsKK30KKworLyoK KyAqIERlcGFyc2UgYSBDcmVhdGVTZXFTdG10LgorICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lE IGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICog cmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0NyZWF0ZVNlcVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJT2JqVHJlZQkqY3JlYXRlU2VxOworCU9ialRyZWUJKnRtcG9iajsKKwlSZWxhdGlvbglyZWxh dGlvbjsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YTsKKwlMaXN0CSAgICplbGVtcyA9 IE5JTDsKKwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07CisJUmVsYXRpb24JcmVsOworCUhlYXBU dXBsZQlzZXF0dXBsZTsKKwlDcmVhdGVTZXFTdG10ICpjcmVhdGVTZXFTdG10ID0gKENyZWF0ZVNl cVN0bXQgKikgcGFyc2V0cmVlOworCisJLyoKKwkgKiBTZXF1ZW5jZSBmb3IgSURFTlRJVFkgQ09M VU1OIG91dHB1dCBzZXBhcmF0ZWx5KHZpYSBDUkVBVEUgVEFCTEUgb3IKKwkgKiBBTFRFUiBUQUJM RSk7IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLworCWlmIChjcmVhdGVTZXFTdG10LT5mb3JfaWRl bnRpdHkpCisJCXJldHVybiBOVUxMOworCisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMo b2JqZWN0SWQpOworCisJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NT aGFyZUxvY2spOworCXJlbCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNs dXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJ CQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig c2VxdWVuY2UgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1 ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxlKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkg KgorCSAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMgU0VRVUVOQ0UgJXtpZGVudGl0eX1ECisJICov CisJY3JlYXRlU2VxID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19v YmplY3QoY3JlYXRlU2VxLCAiJXtwZXJzaXN0ZW5jZX1zIiwKKwkJCQkJCSBnZXRfcGVyc2lzdGVu Y2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKSk7CisKKwl0bXBvYmogPSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAor CQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpOworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNyZWF0ZVNlcSwgIlNFUVVFTkNFICV7aWRlbnRpdHl9RCIsIHRtcG9iaik7 CisKKwkvKiBEZWZpbml0aW9uIGVsZW1lbnRzICovCisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBk ZXBhcnNlX1NlcV9DYWNoZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBs YXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNl KSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShjcmVh dGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNl X1NlcV9NaW52YWx1ZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBw ZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNl KSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9TdGFydHdpdGgoY3JlYXRl U2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9T ZXFfUmVzdGFydChjcmVhdGVTZXEsIHNlcWRhdGEpKTsKKworCS8qIFdlIHB1cnBvc2VmdWxseSBk byBub3QgZW1pdCBPV05FRCBCWSBoZXJlICovCisJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVT ZXEsICIle2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBSb3dF eGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCXJldHVybiBjcmVhdGVTZXE7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU3Rt dCAoQ1JFQVRFIFRBQkxFKS4KKyAqCisgKiBHaXZlbiBhIHRhYmxlIE9JRCBhbmQgdGhlIHBhcnNl dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3Jl YXRlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTdG10ICpu b2RlID0gKENyZWF0ZVN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVs YXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlMaXN0CSAgICpkcGNvbnRl eHQ7CisJT2JqVHJlZQkqY3JlYXRlU3RtdDsKKwlPYmpUcmVlCSp0bXBvYmo7CisJTGlzdAkgICAq bGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRh eAorCSAqCisJICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9 cyAle2lkZW50aXR5fUQgW09GCisJICogJXtvZl90eXBlfVQgfCBQQVJUSVRJT04gT0YgJXtwYXJl bnRfaWRlbnRpdHl9RF0gJXt0YWJsZV9lbGVtZW50c31zCisJICogJXtpbmhlcml0c31zICV7cGFy dGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zCisJICogJXtvbl9j b21taXR9cyAle3RhYmxlc3BhY2V9cworCSAqLworCWNyZWF0ZVN0bXQgPSBuZXdfb2JqdHJlZSgi Q1JFQVRFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAiJXtwZXJzaXN0 ZW5jZX1zIiwKKwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJl bHBlcnNpc3RlbmNlKSk7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyhjcmVhdGVTdG10LCAiVEFC TEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2lmX25vdF9leGlz dHN9cyIsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIi KTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVs LT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0 aW9uKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7aWRlbnRpdHl9RCIs IHRtcG9iaik7CisKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbGF0aW9uKSwKKwkJCQkJCQkJCW9iamVjdElkKTsKKworCS8qCisJICog VHlwZWQgdGFibGVzIGFuZCBwYXJ0aXRpb25zIHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCBmb3Jt YXQgc3RyaW5nOiB3ZQorCSAqIG11c3Qgbm90IHB1dCB0YWJsZV9lbGVtZW50cyB3aXRoIHBhcmVu dHMgZGlyZWN0bHkgaW4gdGhlIGZtdCBzdHJpbmcsCisJICogYmVjYXVzZSBpZiB0aGVyZSBhcmUg bm8gb3B0aW9ucyB0aGUgcGFyZW5zIG11c3Qgbm90IGJlIGVtaXR0ZWQ7IGFuZAorCSAqIGFsc28s IHR5cGVkIHRhYmxlcyBkbyBub3QgYWxsb3cgZm9yIGluaGVyaXRhbmNlLgorCSAqLworCWlmIChu b2RlLT5vZlR5cGVuYW1lIHx8IG5vZGUtPnBhcnRib3VuZCkKKwl7CisJCUxpc3QgICAgICAgKnRh YmxlZWx0cyA9IE5JTDsKKworCQkvKgorCQkgKiBXZSBjYW4ndCBwdXQgdGFibGUgZWxlbWVudHMg ZGlyZWN0bHkgaW4gdGhlIGZtdCBzdHJpbmcgYXMgYW4gYXJyYXkKKwkJICogc3Vycm91bmRlZCBi eSBwYXJlbnMgaGVyZSwgYmVjYXVzZSBhbiBlbXB0eSBjbGF1c2Ugd291bGQgY2F1c2UgYQorCQkg KiBzeW50YXggZXJyb3IuICBUaGVyZWZvcmUsIHdlIHVzZSBhbiBpbmRpcmVjdGlvbiBlbGVtZW50 IGFuZCBzZXQKKwkJICogcHJlc2VudD1mYWxzZSB3aGVuIHRoZXJlIGFyZSBubyBlbGVtZW50cy4K KwkJICovCisJCWlmIChub2RlLT5vZlR5cGVuYW1lKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9mb3JfdHlwZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxvZnR5cGUsIC0xKTsKKwkJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICJPRiAle29mX3R5cGV9VCIsIHRtcG9iaik7CisJ CX0KKwkJZWxzZQorCQl7CisJCQlMaXN0ICAgICAqcGFyZW50czsKKwkJCU9iakVsZW0gICplbGVt OworCisJCQlwYXJlbnRzID0gZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpOworCQkJZWxl bSA9IChPYmpFbGVtICopIGxpbml0aWFsKHBhcmVudHMpOworCisJCQlBc3NlcnQobGlzdF9sZW5n dGgocGFyZW50cykgPT0gMSk7CisKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGNyZWF0ZVN0bXQs ICJQQVJUSVRJT04gT0YiKTsKKworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwg IiV7cGFyZW50X2lkZW50aXR5fUQiLAorCQkJCQkJCQkgZWxlbS0+dmFsdWUub2JqZWN0KTsKKwkJ fQorCisJCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyhyZWxhdGlvbiwgbm9kZS0+ dGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICB0cnVlLCAgICAgIC8qIHR5cGVkIHRh YmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7ICAgIC8qIG5vdCBjb21wb3NpdGUgKi8KKwkJdGFi bGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxpZE9p ZCk7CisKKwkJaWYgKHRhYmxlZWx0cyA9PSBOSUwpCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlKCIiKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2Up OworCQl9CisJCWVsc2UKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIoJXtlbGVtZW50czos IH1zKSIsIDEsCisJCQkJCQkJCSAiZWxlbWVudHMiLCBPYmpUeXBlQXJyYXksIHRhYmxlZWx0cyk7 CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7dGFibGVfZWxlbWVudHN9 cyIsIHRtcG9iaik7CisJfQorCWVsc2UKKwl7CisJCUxpc3QgICAgICAgKnRhYmxlZWx0cyA9IE5J TDsKKworCQkvKgorCQkgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgTElLRSBjbGF1c2Vz IHNlcGFyYXRlbHk7IHRoZXkgaGF2ZQorCQkgKiBhbHJlYWR5IGJlZW4gdHJhbnNmb3JtZWQgaW50 byBjb2x1bW5zIGFuZCBjb25zdHJhaW50cy4KKwkJICovCisKKwkJLyoKKwkJICogUHJvY2VzcyB0 YWJsZSBlbGVtZW50czogY29sdW1uIGRlZmluaXRpb25zIGFuZCBjb25zdHJhaW50cy4gIE9ubHkK KwkJICogdGhlIGNvbHVtbiBkZWZpbml0aW9ucyBhcmUgb2J0YWluZWQgZnJvbSB0aGUgcGFyc2Ug bm9kZSBpdHNlbGYuICBUbworCQkgKiBnZXQgY29uc3RyYWludHMgd2UgcmVseSBvbiBwZ19jb25z dHJhaW50LCBiZWNhdXNlIHRoZSBwYXJzZSBub2RlCisJCSAqIG1pZ2h0IGJlIG1pc3Npbmcgc29t ZSB0aGluZ3Mgc3VjaCBhcyB0aGUgbmFtZSBvZiB0aGUgY29uc3RyYWludHMuCisJCSAqLworCQl0 YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24sIG5vZGUtPnRhYmxlRWx0 cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSAgZmFsc2UsICAgICAvKiBub3QgdHlwZWQgdGFibGUg Ki8KKwkJCQkJCQkJCQkgIGZhbHNlKTsgICAgLyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVs dHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJsZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsK KworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNyZWF0ZVN0bXQsICIoJXt0YWJsZV9lbGVtZW50czos IH1zKSIsIHRhYmxlZWx0cyk7CisKKwkJLyoKKwkJICogQWRkIGluaGVyaXRhbmNlIHNwZWNpZmlj YXRpb24uICBXZSBjYW5ub3Qgc2ltcGx5IHNjYW4gdGhlIGxpc3Qgb2YKKwkJICogcGFyZW50cyBm cm9tIHRoZSBwYXJzZXIgbm9kZSwgYmVjYXVzZSB0aGF0IG1heSBsYWNrIHRoZSBhY3R1YWwKKwkJ ICogcXVhbGlmaWVkIG5hbWVzIG9mIHRoZSBwYXJlbnQgcmVsYXRpb25zLiAgUmF0aGVyIHRoYW4g dHJ5aW5nIHRvCisJCSAqIHJlLXJlc29sdmUgdGhlbSBmcm9tIHRoZSBpbmZvcm1hdGlvbiBpbiB0 aGUgcGFyc2Ugbm9kZSwgaXQgc2VlbXMKKwkJICogbW9yZSBhY2N1cmF0ZSBhbmQgY29udmVuaWVu dCB0byBncmFiIGl0IGZyb20gcGdfaW5oZXJpdHMuCisJCSAqLworCQl0bXBvYmogPSBuZXdfb2Jq dHJlZSgiSU5IRVJJVFMiKTsKKwkJaWYgKGxpc3RfbGVuZ3RoKG5vZGUtPmluaFJlbGF0aW9ucykg PiAwKQorCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIoJXtwYXJlbnRzOiwgfUQpIiwg ZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRf bnVsbF9vYmplY3QodG1wb2JqLCAiKCV7cGFyZW50czosIH1EKSIpOworCQkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJCX0KKwkJYXBwZW5kX29iamVjdF9v YmplY3QoY3JlYXRlU3RtdCwgIiV7aW5oZXJpdHN9cyIsIHRtcG9iaik7CisJfQorCisJdG1wb2Jq ID0gbmV3X29ianRyZWUoIlRBQkxFU1BBQ0UiKTsKKwlpZiAobm9kZS0+dGFibGVzcGFjZW5hbWUp CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7dGFibGVzcGFjZX1JIiwgbm9kZS0+ dGFibGVzcGFjZW5hbWUpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmos ICIle3RhYmxlc3BhY2V9SSIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7dGFi bGVzcGFjZX1zIiwgdG1wb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAi JXtvbl9jb21taXR9cyIsCisJCQkJCQkgIGRlcGFyc2VfT25Db21taXRDbGF1c2Uobm9kZS0+b25j b21taXQpKTsKKworCS8qIEZPUiBWQUxVRVMgY2xhdXNlICovCisJaWYgKG5vZGUtPnBhcnRib3Vu ZCkKKwl7CisJCS8qCisJCSAqIEdldCBwZ19jbGFzcy5yZWxwYXJ0Ym91bmQuIFdlIGNhbm5vdCB1 c2UgcGFydGJvdW5kIGluIHRoZQorCQkgKiBwYXJzZXRyZWUgZGlyZWN0bHkgYXMgaXQncyB0aGUg b3JpZ2luYWwgcGFydGJvdW5kIGV4cHJlc3Npb24KKwkJICogd2hpY2ggaGF2ZW4ndCBiZWVuIHRy YW5zZm9ybWVkLgorCQkgKi8KKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgIiV7 cGFydGl0aW9uX2JvdW5kfXMiLAorCQkJCQkJCSBSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKG9i amVjdElkKSk7CisJfQorCisJLyogUEFSVElUSU9OIEJZIGNsYXVzZSAqLworCXRtcG9iaiA9IG5l d19vYmp0cmVlKCJQQVJUSVRJT04gQlkiKTsKKwlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVsa2lu ZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0 bXBvYmosICIle2RlZmluaXRpb259cyIsIHBnX2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShvYmplY3RJ ZCkpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIle2RlZmluaXRp b259cyIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsK Kwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7cGFydGl0aW9uX2J5fXMi LCB0bXBvYmopOworCisJLyogVVNJTkcgY2xhdXNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUo IlVTSU5HIik7CisJaWYgKG5vZGUtPmFjY2Vzc01ldGhvZCkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wb2JqLCAiJXthY2Nlc3NfbWV0aG9kfUkiLCBub2RlLT5hY2Nlc3NNZXRob2QpOworCWVs c2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIle2FjY2Vzc19tZXRob2R9SSIp OworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJ YXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7YWNjZXNzX21ldGhvZH1zIiwgdG1w b2JqKTsKKworCS8qIFdJVEggY2xhdXNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIldJVEgi KTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCU9ialRyZWUgICAgKnRt cG9iajI7CisJCURlZkVsZW0gKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQl0 bXBvYmoyID0gZGVwYXJzZV9EZWZFbGVtKG9wdCwgZmFsc2UpOworCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmoyKSk7CisJfQorCisJaWYgKGxpc3QpCisJCWFw cGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7d2l0aDosIH1zKSIsIGxpc3QpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlhcHBl bmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXt3aXRoX2NsYXVzZX1zIiwgdG1wb2JqKTsK KworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJu IGNyZWF0ZVN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdC4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlLCBPYmplY3RBZGRyZXNzIHNlY29uZGFyeU9iaikKK3sKKwlEZWZpbmVTdG10ICpkZWZp bmUgPSAoRGVmaW5lU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqZGVmU3RtdCA9IE5V TEw7CisKKwlzd2l0Y2ggKGRlZmluZS0+a2luZCkKKwl7CisJCWNhc2UgT0JKRUNUX0NPTExBVElP TjoKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfQ29sbGF0aW9uKG9iamVjdElkLCBk ZWZpbmUsIHNlY29uZGFyeU9iaik7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9PUEVSQVRP UjoKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0b3Iob2JqZWN0SWQsIGRl ZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJZGVmU3RtdCA9IGRl cGFyc2VfRGVmaW5lU3RtdF9UeXBlKG9iamVjdElkLCBkZWZpbmUpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5l U3RtdF9UU0NvbmZpZyhvYmplY3RJZCwgZGVmaW5lLCBzZWNvbmRhcnlPYmopOworCQkJYnJlYWs7 CisKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCQlkZWZTdG10ID0gZGVwYXJzZV9EZWZpbmVT dG10X1RTUGFyc2VyKG9iamVjdElkLCBkZWZpbmUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpF Q1RfVFNESUNUSU9OQVJZOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rp b25hcnkob2JqZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UU1RF TVBMQVRFOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UU1RlbXBsYXRlKG9iamVj dElkLCBkZWZpbmUpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1 bnN1cHBvcnRlZCBvYmplY3Qga2luZCIpOworCX0KKworCXJldHVybiBkZWZTdG10OworfQorCisv KgorICogRGVwYXJzZSBhIERlZmluZVN0bXQgKENSRUFURSBDT0xMQVRJT04pCisgKgorICogR2l2 ZW4gYSBjb2xsYXRpb24gT0lELCByZXR1cm4gdGhlIEpTT04gYmxvYiByZXByZXNlbnRpbmcgdGhl IGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3Rt dF9Db2xsYXRpb24oT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUsCisJCQkJCQkJIE9i amVjdEFkZHJlc3MgZnJvbUNvbGxpZCkKK3sKKwlPYmpUcmVlICAgICpzdG10OworCUhlYXBUdXBs ZQljb2xUdXA7CisJRm9ybV9wZ19jb2xsYXRpb24gY29sRm9ybTsKKwlEYXR1bQkJZGF0dW07CisJ Ym9vbAkJaXNudWxsOworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOwor CisJY29sVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTExPSUQsIE9iamVjdElkR2V0RGF0dW0ob2Jq ZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29sVHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbGxhdGlvbiB3aXRoIE9JRCAldSIsIG9iamVjdElk KTsKKwljb2xGb3JtID0gKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1QoY29sVHVwKTsKKwor CXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIENPTExBVElPTiIsIDApOworCisJYXBwZW5k X29iamVjdF9vYmplY3Qoc3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKGNvbEZvcm0tPmNvbGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVT dHIoY29sRm9ybS0+Y29sbG5hbWUpKSk7CisKKwlpZiAoZnJvbUNvbGxpZC5vYmplY3RJZCAhPSBJ bnZhbGlkT2lkKQorCXsKKwkJT2lkCQkJY29sbGlkID0gZnJvbUNvbGxpZC5vYmplY3RJZDsKKwkJ SGVhcFR1cGxlCXRwOworCQlGb3JtX3BnX2NvbGxhdGlvbiBmcm9tQ29sRm9ybTsKKworCQkvKgor CQkgKiBDUkVBVEUgQ09MTEFUSU9OICV7aWRlbnRpdHl9RCBGUk9NIGV4aXN0aW5nX2NvbGxhdGlv bjsKKwkJICovCisJCXRwID0gU2VhcmNoU3lzQ2FjaGUxKENPTExPSUQsIE9iamVjdElkR2V0RGF0 dW0oY29sbGlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29sbGF0aW9uICV1IiwgY29sbGlkKTsKKworCQlm cm9tQ29sRm9ybSA9IChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKHRwKTsKKworCQlhcHBl bmRfb2JqZWN0X29iamVjdChzdG10LCAiRlJPTSAle2Zyb21faWRlbnRpdHl9RCIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShmcm9tQ29sRm9ybS0+Y29sbG5hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCQkgIE5hbWVTdHIoZnJvbUNvbEZvcm0tPmNvbGxuYW1lKSkpOworCisKKwkJUmVs ZWFzZVN5c0NhY2hlKHRwKTsKKwkJUmVsZWFzZVN5c0NhY2hlKGNvbFR1cCk7CisJCXJldHVybiBz dG10OworCX0KKworCS8qIExPQ0FMRSAqLworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExP SUQsIGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGljdWxvY2FsZSwgJmlzbnVsbCk7CisJ aWYgKCFpc251bGwpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTE9DQUxFPSIsIDEsCisJ CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibG9jYWxlIik7CisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcCwgIiV7bG9jYWxlfUwiLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCBUZXh0 RGF0dW1HZXRDU3RyaW5nKGRhdHVtKSkpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBMQ19DT0xMQVRFICovCisJZGF0dW0gPSBTeXND YWNoZUdldEF0dHIoQ09MTE9JRCwgY29sVHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsY29sbGF0 ZSwgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi TENfQ09MTEFURT0iLCAxLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbGxh dGUiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtjb2xsYXRlfUwiLAorCQkJCQkJ CSBwc3ByaW50ZigiJXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKSkpOworCQlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBMQ19DVFlQ RSAqLworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIGNvbFR1cCwgQW51bV9wZ19j b2xsYXRpb25fY29sbGN0eXBlLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJMQ19DVFlQRT0iLCAxLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImN0eXBlIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7Y3R5cGV9 TCIsCisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7 CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKwor CS8qIFBST1ZJREVSICovCisJaWYgKGNvbEZvcm0tPmNvbGxwcm92aWRlciA9PSBDT0xMUFJPVklE RVJfSUNVKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlBST1ZJREVSPSIsIDEsCisJCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvdmlkZXIiKTsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wLCAiJXtwcm92aWRlcn1MIiwKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgImlj dSIpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJ fQorCWVsc2UgaWYgKGNvbEZvcm0tPmNvbGxwcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQykK Kwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQUk9WSURFUj0iLCAxLAorCQkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgInByb3ZpZGVyIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcCwgIiV7cHJvdmlkZXJ9TCIsCisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsICJsaWJjIikpOwor CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkv KiBERVRFUk1JTklTVElDICovCisJaWYgKGNvbEZvcm0tPmNvbGxpc2RldGVybWluaXN0aWMpCisJ eworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiREVURVJNSU5JU1RJQz0iLCAxLAorCQkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImRldGVybWluaXN0aWMiKTsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wLCAiJXtkZXRlcm1pbmlzdGljfUwiLAorCQkJCQkJCSBwc3ByaW50ZigiJXMi LCAidHJ1ZSIpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJfQorCisJLyogVkVSU0lPTiAqLworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExP SUQsIGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbHZlcnNpb24sICZpc251bGwpOworCWlm ICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlZFUlNJT049IiwgMSwKKwkJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ2ZXJzaW9uIik7CisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcCwgIiV7dmVyc2lvbn1MIiwKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgVGV4 dERhdHVtR2V0Q1N0cmluZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiKCV7 ZWxlbXM6LCB9cykiLCBsaXN0KTsKKwlSZWxlYXNlU3lzQ2FjaGUoY29sVHVwKTsKKworCXJldHVy biBzdG10OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0bXQgKENSRUFURSBPUEVSQVRP UikKKyAqCisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24g Y29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X09wZXJh dG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIG9w clR1cDsKKwlPYmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcG9iajsKKwlMaXN0CSAg ICpsaXN0ID0gTklMOworCUZvcm1fcGdfb3BlcmF0b3Igb3ByRm9ybTsKKworCW9wclR1cCA9IFNl YXJjaFN5c0NhY2hlMShPUEVST0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKG9wclR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciBvcGVyYXRvciB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcHJGb3JtID0g KEZvcm1fcGdfb3BlcmF0b3IpIEdFVFNUUlVDVChvcHJUdXApOworCisJc3RtdCA9IG5ld19vYmp0 cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCSAgImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9w ckZvcm0tPm9wcm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgIE5hbWVTdHIob3ByRm9ybS0+b3By bmFtZSkpKTsKKworCS8qIFBST0NFRFVSRSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJQ Uk9DRURVUkU9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJwcm9jZWR1cmUiLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJjb2RlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBMRUZUQVJHICovCisJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIkxFRlRBUkc9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgImxlZnRhcmciKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJsZWZ0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBSSUdIVEFSRyAqLworCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJSSUdIVEFSRz0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAicmlnaHRhcmciKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyaWdodCkp CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BycmlnaHQsIC0xKSk7CisJZWxzZQorCQlhcHBl bmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIENPTU1VVEFUT1IgKi8K Kwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQ09NTVVUQVRPUj0iLCAxLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29tbXV0YXRvciIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZv cm0tPm9wcmNvbSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3Blcn1EIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmNvbSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBORUdBVE9SICovCisJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIk5FR0FUT1I9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgIm5lZ2F0b3IiKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJuZWdhdGUpKQor CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle29wZXJ9RCIsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CSBvcHJGb3JtLT5vcHJuZWdhdGUpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBv YmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCisJLyogUkVTVFJJQ1QgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiUkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJl c3RyaWN0Iik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkpCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9w ckZvcm0tPm9wcnJlc3QpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJw cmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCisJLyogSk9JTiAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJKT0lO PSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJaWYgKE9p ZElzVmFsaWQob3ByRm9ybS0+b3Byam9pbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9i aiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsK KwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyog TUVSR0VTICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk1FUkdFUyIsIDEsCisJCQkJCQkg ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtZXJnZXMiKTsKKwlpZiAoIW9wckZvcm0tPm9wcmNh bm1lcmdlKQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsK KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8q IEhBU0hFUyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJIQVNIRVMiLCAxLAorCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaGFzaGVzIik7CisJaWYgKCFvcHJGb3JtLT5vcHJj YW5oYXNoKQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsK KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCWFw cGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxl YXNlU3lzQ2FjaGUob3ByVHVwKTsKKworCXJldHVybiBzdG10OworfQorCisvKgorICogRGVwYXJz ZSBhIENSRUFURSBUWVBFIHN0YXRlbWVudC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9EZWZpbmVTdG10X1R5cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJ SGVhcFR1cGxlICAgdHlwVHVwOworCU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1w OworCUxpc3QJICAgKmxpc3Q7CisJY2hhcgkgICAqc3RyOworCURhdHVtCQlkZmx0OworCWJvb2wJ CWlzbnVsbDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0Nh Y2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciB0eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBl KSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCS8qIFNob3J0Y3V0IHByb2Nlc3NpbmcgZm9yIHNoZWxs IHR5cGVzLiAqLworCWlmICghdHlwRm9ybS0+dHlwaXNkZWZpbmVkKQorCXsKKwkJc3RtdCA9IG5l d19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSIsIDApOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChz dG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5 cEZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHlwRm9ybS0+dHlw bmFtZSkpKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHN0bXQsICJwcmVzZW50IiwgdHJ1ZSk7CisJ CVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCQlyZXR1cm4gc3RtdDsKKwl9CisKKwlzdG10ID0g bmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJYXBwZW5kX29iamVjdF9vYmplY3Qo c3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5 cEZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQlOYW1lU3RyKHR5cEZvcm0tPnR5cG5h bWUpKSk7CisJYXBwZW5kX2Jvb2xfb2JqZWN0KHN0bXQsICJwcmVzZW50IiwgdHJ1ZSk7CisKKwkv KiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJbGlzdCA9IE5JTDsKKworCS8qIElOUFVU ICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIihJTlBVVD0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiaW5wdXQiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIl e3Byb2NlZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwaW5wdXQpKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIE9VVFBVVCAq LworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJPVVRQVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgIm91dHB1dCIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7 cHJvY2VkdXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1 cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBvdXRwdXQpKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFJFQ0VJVkUg Ki8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUkVDRUlWRT0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAicmVjZWl2ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5 cHJlY2VpdmUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXByZWNlaXZlKSk7CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFNFTkQgKi8KKwl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiU0VORD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic2Vu ZCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHNlbmQpKQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50 eXBzZW5kKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZh bHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CS8qIFRZUE1PRF9JTiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfSU49IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9pbiIpOworCWlmIChPaWRJ c1ZhbGlkKHR5cEZvcm0tPnR5cG1vZGluKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAi JXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9j ZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kaW4pKTsKKwll bHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogVFlQTU9EX09V VCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfT1VUPSIsIDEsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2Rfb3V0Iik7CisJaWYgKE9pZElzVmFsaWQodHlw Rm9ybS0+dHlwbW9kb3V0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1 cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kb3V0KSk7CisJZWxzZQorCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEFOQUxZWkUgKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiQU5BTFlaRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAiYW5hbHl6ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGFuYWx5emUp KQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJCSB0eXBGb3JtLT50eXBhbmFseXplKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIElOVEVSTkFMTEVOR1RIICovCisJaWYgKHR5cEZvcm0t PnR5cGxlbiA9PSAtMSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTlRFUk5BTExFTkdU SD1WQVJJQUJMRSIsIDApOworCX0KKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi SU5URVJOQUxMRU5HVEg9JXt0eXBsZW59biIsIDEsCisJCQkJCQkJICJ0eXBsZW4iLCBPYmpUeXBl SW50ZWdlciwgdHlwRm9ybS0+dHlwbGVuKTsKKwl9CisKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFBBU1NFREJZVkFMVUUgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiUEFTU0VEQllWQUxVRSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJwYXNzZWRieXZhbHVlIik7CisJaWYgKCF0eXBGb3JtLT50eXBieXZhbCkKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBBTElHTk1FTlQgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxJR05NRU5UPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJhbGlnbm1lbnQiKTsKKwkvKiBYWFggaXQncyBvZGQgdG8gcmVwcmVzZW50 IGFsaWdubWVudCB3aXRoIHNjaGVtYS1xdWFsaWZpZWQgdHlwZSBuYW1lcyAqLworCXN3aXRjaCAo dHlwRm9ybS0+dHlwYWxpZ24pCisJeworCQljYXNlICdkJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9n LmZsb2F0OCI7CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5p bnQ0IjsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmludDIi OworCQkJYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkJc3RyID0gInBnX2NhdGFsb2cuYnBjaGFyIjsK KwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgYWxpZ25tZW50 ICVjIiwgdHlwRm9ybS0+dHlwYWxpZ24pOworCX0KKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAs ICIle2FsaWdufXMiLCBzdHIpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNUT1JBR0U9IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN0b3JhZ2UiKTsKKwlzd2l0Y2ggKHR5cEZvcm0t PnR5cHN0b3JhZ2UpCisJeworCQljYXNlICdwJzoKKwkJCXN0ciA9ICJwbGFpbiI7CisJCQlicmVh azsKKwkJY2FzZSAnZSc6CisJCQlzdHIgPSAiZXh0ZXJuYWwiOworCQkJYnJlYWs7CisJCWNhc2Ug J3gnOgorCQkJc3RyID0gImV4dGVuZGVkIjsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCXN0 ciA9ICJtYWluIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFs aWQgc3RvcmFnZSBzcGVjaWZpZXIgJWMiLCB0eXBGb3JtLT50eXBzdG9yYWdlKTsKKwl9CisJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtzdG9yYWdlfXMiLCBzdHIpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ0FURUdPUlkgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FURUdPUlk9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgImNhdGVnb3J5Iik7CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtj YXRlZ29yeX1zIiwKKwkJCQkJCSBwc3ByaW50ZigiJWMiLCB0eXBGb3JtLT50eXBjYXRlZ29yeSkp OworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyog UFJFRkVSUkVEICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlBSRUZFUlJFRD0iLCAxLAorCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJlZmVycmVkIik7CisJaWYgKCF0eXBGb3Jt LT50eXBpc3ByZWZlcnJlZCkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBm YWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisK KwkvKiBERUZBVUxUICovCisJZGZsdCA9IFN5c0NhY2hlR2V0QXR0cihUWVBFT0lELCB0eXBUdXAs CisJCQkJCQkgICBBbnVtX3BnX3R5cGVfdHlwZGVmYXVsdCwKKwkJCQkJCSAgICZpc251bGwpOwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERUZBVUxUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJkZWZhdWx0Iik7CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcCwgIiV7ZGVmYXVsdH1zIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkZmx0KSk7CisJ ZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEVMRU1FTlQg Ki8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRUxFTUVOVD0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiZWxlbWVudCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5 cGVsZW0pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICJlbGVtIiwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwZWxlbSwgLTEpKTsKKwllbHNlCisJCWFwcGVu ZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogREVMSU1JVEVSICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIkRFTElNSVRFUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAiZGVsaW1pdGVyIik7CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtkZWxp bX1MIiwKKwkJCQkJCSBwc3ByaW50ZigiJWMiLCB0eXBGb3JtLT50eXBkZWxpbSkpOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ09MTEFUQUJM RSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRBQkxFPSIsIDEsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xsYXRhYmxlIik7CisJaWYgKCFPaWRJc1ZhbGlkKHR5 cEZvcm0tPnR5cGNvbGxhdGlvbikpCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50 IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiJXtlbGVtczosIH1zKSIsIGxpc3QpOwor CisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKE9pZCBvYmplY3RJZCwgRGVm aW5lU3RtdCAqZGVmaW5lLAorCQkJCQkJCU9iamVjdEFkZHJlc3MgY29waWVkKQoreworCUhlYXBU dXBsZSAgIHRzY1R1cDsKKwlIZWFwVHVwbGUgICB0c3BUdXA7CisJT2JqVHJlZQkgICAqc3RtdDsK KwlPYmpUcmVlCSAgICp0bXA7CisJRm9ybV9wZ190c19jb25maWcgdHNjRm9ybTsKKwlGb3JtX3Bn X3RzX3BhcnNlciB0c3BGb3JtOworCUxpc3QJICAgKmxpc3Q7CisKKwl0c2NUdXAgPSBTZWFyY2hT eXNDYWNoZTEoVFNDT05GSUdPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQodHNjVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIHRleHQgc2VhcmNoIGNvbmZpZ3VyYXRpb24gJXUiLAorCQkJIG9iamVjdElkKTsK Kwl0c2NGb3JtID0gKEZvcm1fcGdfdHNfY29uZmlnKSBHRVRTVFJVQ1QodHNjVHVwKTsKKworCXRz cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU1BBUlNFUk9JRCwgT2JqZWN0SWRHZXREYXR1bSh0c2NG b3JtLT5jZmdwYXJzZXIpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNwVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIHBhcnNlciAldSIs CisJCQkgdHNjRm9ybS0+Y2ZncGFyc2VyKTsKKwl0c3BGb3JtID0gKEZvcm1fcGdfdHNfcGFyc2Vy KSBHRVRTVFJVQ1QodHNwVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAq IENSRUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCAoJXtlbGVtczos IH1zKQorCSAqLworCXN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChzdG10LCAiVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQi LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2NGb3JtLT5jZmduYW1lc3BhY2Us CisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNjRm9ybS0+Y2ZnbmFtZSkpKTsKKworCS8qCisJICog QWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZS4gIElmIHdlIGhhdmUgQ09QWSdlZCBhbiBleGlzdGlu ZyBjb25maWcsIGFkZAorCSAqIGEgQ09QWSBjbGF1c2U7IG90aGVyd2lzZSBhZGQgYSBQQVJTRVIg Y2xhdXNlLgorCSAqLworCWxpc3QgPSBOSUw7CisJLyogQ09QWSAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJDT1BZPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb3B5 Iik7CisJaWYgKGNvcGllZC5vYmplY3RJZCAhPSBJbnZhbGlkT2lkKQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXAsICIle3RzY29uZmlnfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoVFNDb25maWdSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY29waWVkLm9iamVj dElkKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNl KTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8q IFBBUlNFUiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQQVJTRVI9IiwgMSwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInBhcnNlciIpOworCWlmIChjb3BpZWQub2JqZWN0SWQg PT0gSW52YWxpZE9pZCkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwYXJzZXJ9RCIs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3BGb3JtLT5wcnNuYW1lc3BhY2Us CisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzcEZvcm0tPnByc25hbWUpKSk7CisJZWxzZQorCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qo c3RtdCwgIigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNwVHVw KTsKKwlSZWxlYXNlU3lzQ2FjaGUodHNjVHVwKTsKKworCXJldHVybiBzdG10OworfQorCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNQYXJzZXIoT2lkIG9iamVjdElkLCBE ZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlICAgdHNwVHVwOworCU9ialRyZWUJICAg KnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3Q7CisJRm9ybV9wZ190c19w YXJzZXIgdHNwRm9ybTsKKworCXRzcFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU1BBUlNFUk9JRCwg T2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c3BU dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2gg cGFyc2VyIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHNwRm9ybSA9IChGb3JtX3Bn X3RzX3BhcnNlcikgR0VUU1RSVUNUKHRzcFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4 CisJICoKKwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSICV7aWRlbnRpdHl9RCAoJXtlbGVt czosIH1zKQorCSAqLworCXN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRf b2JqZWN0X29iamVjdChzdG10LCAiVEVYVCBTRUFSQ0ggUEFSU0VSICV7aWRlbnRpdHl9RCIsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzcEZvcm0tPnByc25hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCSAgTmFtZVN0cih0c3BGb3JtLT5wcnNuYW1lKSkpOworCisJLyogQWRkIHRoZSBk ZWZpbml0aW9uIGNsYXVzZSAqLworCWxpc3QgPSBOSUw7CisKKwkvKiBTVEFSVCAqLworCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJTVEFSVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAic3RhcnQiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1E IiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzc3RhcnQpKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEdFVFRPS0VOICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIkdFVFRPS0VOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJnZXR0b2tlbiIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2Vk dXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnN0b2tlbikpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRU5EICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIkVORD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAiZW5kIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2VuZCkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTEVYVFlQRVMgKi8KKwl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiTEVYVFlQRVM9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg ImxleHR5cGVzIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2xleHR5cGUpKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEhFQURMSU5FICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIkhFQURMSU5FPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJoZWFkbGluZSIpOworCWlmIChPaWRJc1ZhbGlkKHRzcEZvcm0tPnByc2hlYWRsaW5l KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkgdHNwRm9ybS0+cHJzaGVhZGxpbmUpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29i amVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiKCV7ZWxl bXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c3BUdXApOworCisJcmV0dXJu IHN0bXQ7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rp b25hcnkoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlICAg dHNkVHVwOworCU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAg Kmxpc3Q7CisJRGF0dW0JCW9wdGlvbnM7CisJYm9vbAkJaXNudWxsOworCUZvcm1fcGdfdHNfZGlj dCB0c2RGb3JtOworCisJdHNkVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTRElDVE9JRCwgT2JqZWN0 SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c2RUdXApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggZGljdGlv bmFyeSAiCisJCQkgIndpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXRzZEZvcm0gPSAoRm9ybV9w Z190c19kaWN0KSBHRVRTVFJVQ1QodHNkVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgK KwkgKgorCSAqIENSRUFURSBURVhUIFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRpdHl9RCAoJXtl bGVtczosIH1zKQorCSAqLworCXN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBl bmRfb2JqZWN0X29iamVjdChzdG10LCAiVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lkZW50aXR5 fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2RGb3JtLT5kaWN0bmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzZEZvcm0tPmRpY3RuYW1lKSkpOworCisJLyog QWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCWxpc3QgPSBOSUw7CisKKwkvKiBURU1QTEFU RSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJURU1QTEFURT0iLCAxLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAidGVtcGxhdGUiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXAsICIle3RlbXBsYXRlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChU U1RlbXBsYXRlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNkRm9ybS0+ZGljdHRlbXBsYXRl KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkv KgorCSAqIG9wdGlvbnMuICBYWFggdGhpcyBpcyBhIHByZXR0eSB1c2VsZXNzIHJlcHJlc2VudGF0 aW9uLCBidXQgd2UgY2FuJ3QgZG8KKwkgKiBiZXR0ZXIgd2l0aG91dCBtb3JlIHRzX2NhY2hlLmMg Y29vcGVyYXRpb24gLi4uCisJICovCisJb3B0aW9ucyA9IFN5c0NhY2hlR2V0QXR0cihUU0RJQ1RP SUQsIHRzZFR1cCwKKwkJCQkJCQkgIEFudW1fcGdfdHNfZGljdF9kaWN0aW5pdG9wdGlvbiwKKwkJ CQkJCQkgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIiLCAwKTsKKwlpZiAoIWlz bnVsbCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtvcHRpb25zfXMiLCBUZXh0RGF0 dW1HZXRDU3RyaW5nKG9wdGlvbnMpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAs ICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiKCV7ZWxlbXM6LCB9cyki LCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c2RUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9 CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU1RlbXBsYXRlKE9pZCBv YmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIHRzdFR1cDsKKwlP YmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0OworCUZv cm1fcGdfdHNfdGVtcGxhdGUgdHN0Rm9ybTsKKworCXRzdFR1cCA9IFNlYXJjaFN5c0NhY2hlMShU U1RFTVBMQVRFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHRzdFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciB0ZXh0IHNlYXJjaCB0ZW1wbGF0ZSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRz dEZvcm0gPSAoRm9ybV9wZ190c190ZW1wbGF0ZSkgR0VUU1RSVUNUKHRzdFR1cCk7CisKKwkvKgor CSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggVEVNUExBVEUg JXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpCisJICovCisJc3RtdCA9IG5ld19vYmp0cmVlKCJD UkVBVEUiKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICJURVhUIFNFQVJDSCBURU1Q TEFURSAle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3RG b3JtLT50bXBsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzdEZvcm0tPnRtcGxu YW1lKSkpOworCisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCWxpc3QgPSBOSUw7 CisKKwkvKiBJTklUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIklOSVQ9IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImluaXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0c3RG b3JtLT50bXBsaW5pdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJl fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJIHRzdEZvcm0tPnRtcGxpbml0KSk7CisJZWxzZQorCQlhcHBl bmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIExFWElaRSAqLworCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJMRVhJWkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgImxleGl6ZSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQi LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCSB0c3RGb3JtLT50bXBsbGV4aXplKSk7CisJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0 bXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzdFR1cCk7 CisKKwlyZXR1cm4gc3RtdDsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclRT Q29uZmlndXJhdGlvblN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCUFsdGVyVFNDb25m aWd1cmF0aW9uU3RtdCAqbm9kZSA9IChBbHRlclRTQ29uZmlndXJhdGlvblN0bXQgKikgY21kLT5w YXJzZXRyZWU7CisJT2JqVHJlZSAqY29uZmlnOworCU9ialRyZWUgKnRtcDsKKwlMaXN0CSAgICps aXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisJaW50CQkJaTsKKworCS8qCisJICogVmVyYm9zZSBz eW50YXgKKwkgKiBjYXNlIEFMVEVSX1RTQ09ORklHX0FERF9NQVBQSU5HOgorCSAqIEFMVEVSIFRF WFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFERCBNQVBQSU5HIEZPUiAle3Rv a2VudHlwZTosIH1JIFdJVEggJXtkaWN0aW9uYXJpZXM6LCB9RAorCSAqCisJICogY2FzZSBBTFRF Ul9UU0NPTkZJR19EUk9QX01BUFBJTkc6CisJICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJB VElPTiAle2lkZW50aXR5fUQgRFJPUCBNQVBQSU5HICV7aWZfZXhpc3RzfXMgRk9SICV7dG9rZW50 eXBlfUkKKwkgKgorCSAqIGNhc2UgQUxURVJfVFNDT05GSUdfQUxURVJfTUFQUElOR19GT1JfVE9L RU46CisJICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUxU RVIgTUFQUElORyBGT1IgJXt0b2tlbnR5cGU6LCB9SSBXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQK KwkgKgorCSAqIGNhc2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUOgorCSAqIEFMVEVSIFRF WFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkcgUkVQTEFD RSAle29sZF9kaWN0aW9uYXJ5fUQgV0lUSCAle25ld19kaWN0aW9uYXJ5fUQKKwkgKgorCSAqIGNh c2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTjoKKwkgKiBBTFRFUiBURVhU IFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIEZPUiAle3Rv a2VudHlwZTosIH1JIFJFUExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIFdJVEggJXtuZXdfZGljdGlv bmFyeX1ECisJICovCisKKwljb25maWcgPSBuZXdfb2JqdHJlZSgiQUxURVIgVEVYVCBTRUFSQ0gg Q09ORklHVVJBVElPTiIpOworCisJLyogZGV0ZXJtaW5lIHRoZSBmb3JtYXQgc3RyaW5nIGFwcHJv cHJpYXRlIHRvIGVhY2ggc3ViY29tbWFuZCAqLworCXN3aXRjaCAobm9kZS0+a2luZCkKKwl7CisJ CWNhc2UgQUxURVJfVFNDT05GSUdfQUREX01BUFBJTkc6CisJCQlhcHBlbmRfb2JqZWN0X29iamVj dChjb25maWcsICIle2lkZW50aXR5fUQgQUREIE1BUFBJTkciLAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJCQkJ CQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQlicmVhazsKKworCQlj YXNlIEFMVEVSX1RTQ09ORklHX0RST1BfTUFQUElORzoKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBEUk9QIE1BUFBJTkciLAorCQkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJCQkJ CQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJdG1wID0gbmV3 X29ianRyZWVfVkEoIklGIEVYSVNUUyIsIDApOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwg InByZXNlbnQiLCBub2RlLT5taXNzaW5nX29rKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNv bmZpZywgIiV7aWZfZXhpc3RzfXMiLCB0bXApOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTFRFUl9U U0NPTkZJR19BTFRFUl9NQVBQSU5HX0ZPUl9UT0tFTjoKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIiwKKwkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJ CQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUOgorCQkJYXBwZW5kX29iamVjdF9v YmplY3QoY29uZmlnLCAiJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkciLAorCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAor CQkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJYnJl YWs7CisKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOOgorCQkJ YXBwZW5kX29iamVjdF9vYmplY3QoY29uZmlnLCAiJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkci LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRk cmVzcy5jbGFzc0lkLAorCQkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmpl Y3RJZCkpOworCQkJYnJlYWs7CisJfQorCisJLyogQWRkIHRoZSBhZmZlY3RlZCB0b2tlbiBsaXN0 LCBmb3Igc3ViY29tbWFuZHMgdGhhdCBoYXZlIG9uZSAqLworCWlmIChub2RlLT5raW5kID09IEFM VEVSX1RTQ09ORklHX0FERF9NQVBQSU5HIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05G SUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU4gfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NP TkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFND T05GSUdfRFJPUF9NQVBQSU5HKQorCXsKKwkJbGlzdCA9IE5JTDsKKwkJZm9yZWFjaChjZWxsLCBu b2RlLT50b2tlbnR5cGUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVj dChzdHJWYWwobGZpcnN0KGNlbGwpKSkpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbmZpZywg IkZPUiAle3Rva2VudHlwZTosIH1JIiwgbGlzdCk7CisJfQorCisJLyogYWRkIGZ1cnRoZXIgc3Vi Y29tbWFuZC1zcGVjaWZpYyBlbGVtZW50cyAqLworCWlmIChub2RlLT5raW5kID09IEFMVEVSX1RT Q09ORklHX0FERF9NQVBQSU5HIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfQUxU RVJfTUFQUElOR19GT1JfVE9LRU4pCisJeworCQkvKiBBREQgTUFQUElORyBhbmQgQUxURVIgTUFQ UElORyBGT1IgbmVlZCBhIGxpc3Qgb2YgZGljdGlvbmFyaWVzICovCisJCWxpc3QgPSBOSUw7CisJ CWZvciAoaSA9IDA7IGkgPCBjbWQtPmQuYXRzY2ZnLm5kaWN0czsgaSsrKQorCQl7CisJCQlPYmpU cmVlCSpkaWN0b2JqOworCisJCQlkaWN0b2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFRTRGljdGlvbmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkgIGNtZC0+ZC5hdHNjZmcuZGlj dElkc1tpXSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkJICAgbmV3X29iamVjdF9v YmplY3QoZGljdG9iaikpOworCQl9CisJCWFwcGVuZF9hcnJheV9vYmplY3QoY29uZmlnLCAiV0lU SCAle2RpY3Rpb25hcmllczosIH1EIiwgbGlzdCk7CisJfQorCWVsc2UgaWYgKG5vZGUtPmtpbmQg PT0gQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUIHx8CisJCQkgbm9kZS0+a2luZCA9PSBBTFRF Ul9UU0NPTkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOKQorCXsKKwkJLyogdGhlIFJFUExBQ0Ug Zm9ybXMgd2FudCBvbGQgYW5kIG5ldyBkaWN0aW9uYXJpZXMgKi8KKwkJQXNzZXJ0KGNtZC0+ZC5h dHNjZmcubmRpY3RzID09IDIpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb25maWcsICJSRVBM QUNFICV7b2xkX2RpY3Rpb25hcnl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2Nm Zy5kaWN0SWRzWzBdKSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbmZpZywgIldJVEggJXtu ZXdfZGljdGlvbmFyeX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFRT RGljdGlvbmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmRpY3RJ ZHNbMV0pKTsKKwl9CisKKwlyZXR1cm4gY29uZmlnOworfQorCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0FsdGVyVFNEaWN0aW9uYXJ5U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJl ZSkKK3sKKwlPYmpUcmVlICphbHRlclRTRDsKKwlPYmpUcmVlICp0bXA7CisJRGF0dW0JCW9wdGlv bnM7CisJTGlzdAkgICAqZGVmaW5pdGlvbiA9IE5JTDsKKwlib29sCQlpc251bGw7CisJSGVhcFR1 cGxlICAgdHNkVHVwOworCUZvcm1fcGdfdHNfZGljdCB0c2RGb3JtOworCisJdHNkVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKFRTRElDVE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZCh0c2RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggZGljdGlvbmFyeSAiCisJCQkgIndpdGggT0lEICV1Iiwg b2JqZWN0SWQpOworCXRzZEZvcm0gPSAoRm9ybV9wZ190c19kaWN0KSBHRVRTVFJVQ1QodHNkVHVw KTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKiBBTFRFUiBURVhUIFNFQVJDSCBESUNU SU9OQVJZICV7aWRlbnRpdHl9RCAoJXtkZWZpbml0aW9uOiwgfXMpCisJICovCisKKwlhbHRlclRT RCA9IG5ld19vYmp0cmVlKCJBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZIik7CisKKwlhcHBl bmRfb2JqZWN0X29iamVjdChhbHRlclRTRCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKHRzZEZvcm0tPmRpY3RuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkg IE5hbWVTdHIodHNkRm9ybS0+ZGljdG5hbWUpKSk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24g bGlzdCBhY2NvcmRpbmcgdG8gdGhlIHBnX3RzX2RpY3QgZGljdGluaXRvcHRpb24gY29sdW1uICov CisJb3B0aW9ucyA9IFN5c0NhY2hlR2V0QXR0cihUU0RJQ1RPSUQsIHRzZFR1cCwKKwkJCQkJCQkg IEFudW1fcGdfdHNfZGljdF9kaWN0aW5pdG9wdGlvbiwKKwkJCQkJCQkgICZpc251bGwpOworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCIiLCAwKTsKKwlpZiAoIWlzbnVsbCkKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wLCAiJXtvcHRpb25zfXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKG9wdGlvbnMp KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOwor CisJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlclRTRCwgIigle2RlZmluaXRpb246LCB9cyki LCBkZWZpbml0aW9uKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHNkVHVwKTsKKworCXJldHVybiBhbHRl clRTRDsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJUYWJsZUNt ZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsK KwlPYmpUcmVlCSAgICpyZWxzZXQ7CisJY2hhcgkgICAqZm10OworCWJvb2wJCWlzX3Jlc2V0ID0g c3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0UmVsT3B0aW9uczsKKworCS8qCisJICogVmVyYm9z ZSBzeW50YXgKKwkgKgorCSAqIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisJICovCisJaWYg KGlzX3Jlc2V0KQorCQlmbXQgPSAiUkVTRVQgIjsKKwllbHNlCisJCWZtdCA9ICJTRVQgIjsKKwor CXJlbHNldCA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwlmb3JlYWNoKGNlbGwsIChMaXN0ICopIHN1 YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbQkgICAqZWxlbTsKKwkJT2JqVHJlZQkgICAqc2V0Owor CisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCXNldCA9IGRlcGFyc2VfRGVm RWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rf b2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChzZXRzKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KHJlbHNldCwgIigle29wdGlvbnM6LCB9cykiLCBzZXRzKTsKKworCXJldHVybiByZWxzZXQ7Cit9 CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlVHJpZ1N0bXQgKENSRUFURSBUUklHR0VSKQorICoK KyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0 LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5k LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRyaWdTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRyaWdTdG10ICpub2RlID0gKENyZWF0 ZVRyaWdTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglwZ190cmlnZ2VyOworCUhlYXBUdXBs ZQl0cmlnVHVwOworCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsKKwlPYmpUcmVlCSAgICp0cmln Z2VyOworCU9ialRyZWUJICAgKnRtcG9iajsKKwlpbnQJCQl0Z25hcmdzOworCUxpc3QJICAgKmxp c3Q7CisJTGlzdAkgICAqZXZlbnRzOworCisJcGdfdHJpZ2dlciA9IHRhYmxlX29wZW4oVHJpZ2dl clJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwl0cmlnVHVwID0gZ2V0X2NhdGFsb2df b2JqZWN0X2J5X29pZChwZ190cmlnZ2VyLCBBbnVtX3BnX3RyaWdnZXJfb2lkLCBvYmplY3RJZCk7 CisJdHJpZ0Zvcm0gPSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJpZ1R1cCk7CisKKwkv KgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtjb25zdHJhaW50fXMgVFJJ R0dFUiAle25hbWV9SSAle3RpbWV9cyAle2V2ZW50czogT1IgfXMKKwkgKiBPTiAle3JlbGF0aW9u fUQgJXtmcm9tX3RhYmxlfXMgJXtjb25zdHJhaW50X2F0dHJzOiB9cworCSAqIEZPUiBFQUNIICV7 Zm9yX2VhY2h9cyAle3doZW59cyBFWEVDVVRFIFBST0NFRFVSRSAle2Z1bmN0aW9ufXMKKwkgKi8K Kwl0cmlnZ2VyID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QodHJpZ2dlciwgIiV7Y29uc3RyYWludH1zIiwKKwkJCQkJCSBub2RlLT5pc2NvbnN0cmFpbnQg PyAiQ09OU1RSQUlOVCIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmlnZ2VyLCAi VFJJR0dFUiAle25hbWV9SSIsIG5vZGUtPnRyaWduYW1lKTsKKworCWlmIChub2RlLT50aW1pbmcg PT0gVFJJR0dFUl9UWVBFX0JFRk9SRSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwg IiV7dGltZX1zIiwgIkJFRk9SRSIpOworCWVsc2UgaWYgKG5vZGUtPnRpbWluZyA9PSBUUklHR0VS X1RZUEVfQUZURVIpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICIle3RpbWV9cyIs ICJBRlRFUiIpOworCWVsc2UgaWYgKG5vZGUtPnRpbWluZyA9PSBUUklHR0VSX1RZUEVfSU5TVEVB RCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7dGltZX1zIiwgIklOU1RFQUQg T0YiKTsKKwllbHNlCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgdHJpZ2dlciB0aW1pbmcg dHlwZSAlZCIsIG5vZGUtPnRpbWluZyk7CisKKwkvKgorCSAqIERlY29kZSB0aGUgZXZlbnRzIHRo YXQgdGhlIHRyaWdnZXIgZmlyZXMgZm9yLiAgVGhlIG91dHB1dCBpcyBhIGxpc3Q7CisJICogaW4g bW9zdCBjYXNlcyBpdCB3aWxsIGp1c3QgYmUgYSBzdHJpbmcgd2l0aCB0aGUgZXZlbnQgbmFtZSwg YnV0IHdoZW4KKwkgKiB0aGVyZSdzIGFuIFVQREFURSB3aXRoIGEgbGlzdCBvZiBjb2x1bW5zLCB3 ZSByZXR1cm4gYSBKU09OIG9iamVjdC4KKwkgKi8KKwlldmVudHMgPSBOSUw7CisJaWYgKG5vZGUt PmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9JTlNFUlQpCisJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRz LCBuZXdfc3RyaW5nX29iamVjdCgiSU5TRVJUIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklH R0VSX1RZUEVfREVMRVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19v YmplY3QoIkRFTEVURSIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX1RSVU5D QVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlRSVU5D QVRFIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfVVBEQVRFKQorCXsKKwkJ aWYgKG5vZGUtPmNvbHVtbnMgPT0gTklMKQorCQl7CisJCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50 cywgbmV3X3N0cmluZ19vYmplY3QoIlVQREFURSIpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCU9i alRyZWUJICAgKnVwZGF0ZTsKKwkJCUxpc3RDZWxsICAgKmNlbGw7CisJCQlMaXN0CSAgICpjb2xz ID0gTklMOworCisJCQkvKgorCQkJICogQ3VycmVudGx5IG9ubHkgVVBEQVRFIE9GIGNhbiBiZSBv YmplY3RzIGluIHRoZSBvdXRwdXQgSlNPTiwgYnV0CisJCQkgKiB3ZSBhZGQgYSAia2luZCIgZWxl bWVudCBzbyB0aGF0IHVzZXIgY29kZSBjYW4gZGlzdGluZ3Vpc2gKKwkJCSAqIHBvc3NpYmxlIGZ1 dHVyZSBuZXcgZXZlbnQgdHlwZXMuCisJCQkgKi8KKwkJCXVwZGF0ZSA9IG5ld19vYmp0cmVlX1ZB KCJVUERBVEUgT0YiLCAxLAorCQkJCQkJCQkJImtpbmQiLCBPYmpUeXBlU3RyaW5nLCAidXBkYXRl X29mIik7CisKKwkJCWZvcmVhY2goY2VsbCwgbm9kZS0+Y29sdW1ucykKKwkJCXsKKwkJCQljaGFy ICAgKmNvbG5hbWUgPSBzdHJWYWwobGZpcnN0KGNlbGwpKTsKKworCQkJCWNvbHMgPSBsYXBwZW5k KGNvbHMsIG5ld19zdHJpbmdfb2JqZWN0KGNvbG5hbWUpKTsKKwkJCX0KKworCQkJYXBwZW5kX2Fy cmF5X29iamVjdCh1cGRhdGUsICIle2NvbHVtbnM6LCB9SSIsIGNvbHMpOworCisJCQlldmVudHMg PSBsYXBwZW5kKGV2ZW50cywgbmV3X29iamVjdF9vYmplY3QodXBkYXRlKSk7CisJCX0KKwl9CisJ YXBwZW5kX2FycmF5X29iamVjdCh0cmlnZ2VyLCAiJXtldmVudHM6IE9SIH1zIiwgZXZlbnRzKTsK KworCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9u SWQsCisJCQkJCQkJCQkgIHRyaWdGb3JtLT50Z3JlbGlkKTsKKwlhcHBlbmRfb2JqZWN0X29iamVj dCh0cmlnZ2VyLCAiT04gJXtyZWxhdGlvbn1EIiwgdG1wb2JqKTsKKworCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJGUk9NIiwgMCk7CisJaWYgKHRyaWdGb3JtLT50Z2NvbnN0cnJlbGlkKQorCXsK KwkJT2JqVHJlZQkgICAqcmVsOworCisJCXJlbCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICB0cmlnRm9ybS0+dGdjb25zdHJyZWxp ZCk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cmVsYXRpb259RCIsIHJlbCk7 CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxz ZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIiV7ZnJvbV90YWJsZX1zIiwgdG1w b2JqKTsKKworCWxpc3QgPSBOSUw7CisJaWYgKG5vZGUtPmRlZmVycmFibGUpCisJCWxpc3QgPSBs YXBwZW5kKGxpc3QsCisJCQkJCSAgIG5ld19zdHJpbmdfb2JqZWN0KCJERUZFUlJBQkxFIikpOwor CWlmIChub2RlLT5pbml0ZGVmZXJyZWQpCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCSAg IG5ld19zdHJpbmdfb2JqZWN0KCJJTklUSUFMTFkgREVGRVJSRUQiKSk7CisJYXBwZW5kX2FycmF5 X29iamVjdCh0cmlnZ2VyLCAiJXtjb25zdHJhaW50X2F0dHJzOiB9cyIsIGxpc3QpOworCisJYXBw ZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIkZPUiBFQUNIICV7Zm9yX2VhY2h9cyIsCisJCQkJ CQkgbm9kZS0+cm93ID8gIlJPVyIgOiAiU1RBVEVNRU5UIik7CisKKwl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiV0hFTiIsIDApOworCWlmIChub2RlLT53aGVuQ2xhdXNlKQorCXsKKwkJTm9kZQkg ICAqd2hlbkNsYXVzZTsKKwkJRGF0dW0JCXZhbHVlOworCQlib29sCQlpc251bGw7CisKKwkJdmFs dWUgPSBmYXN0Z2V0YXR0cih0cmlnVHVwLCBBbnVtX3BnX3RyaWdnZXJfdGdxdWFsLAorCQkJCQkJ CVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksICZpc251bGwpOworCQlpZiAoaXNudWxsKQor CQkJZWxvZyhFUlJPUiwgImJvZ3VzIE5VTEwgdGdxdWFsIik7CisKKwkJd2hlbkNsYXVzZSA9IHN0 cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcG9iaiwgIigle2NsYXVzZX1zKSIsCisJCQkJCQkJIHBnX2dldF90cmlnZ2VyX3do ZW5jbGF1c2UodHJpZ0Zvcm0sCisJCQkJCQkJCQkJCQkJICAgd2hlbkNsYXVzZSwKKwkJCQkJCQkJ CQkJCQkgICBmYWxzZSkpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmos ICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRyaWdnZXIsICIle3do ZW59cyIsIHRtcG9iaik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtmdW5jbmFtZX1E IiwgMSwKKwkJCQkJCSAiZnVuY25hbWUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0 cmlnRm9ybS0+dGdmb2lkKSk7CisJbGlzdCA9IE5JTDsKKwl0Z25hcmdzID0gdHJpZ0Zvcm0tPnRn bmFyZ3M7CisJaWYgKHRnbmFyZ3MgPiAwKQorCXsKKwkJYnl0ZWEgICp0Z2FyZ3M7CisJCWNoYXIg ICAqYXJnc3RyOworCQlib29sCWlzbnVsbDsKKwkJaW50CQlmaW5keDsKKwkJaW50CQlsZW50Z2Fy Z3M7CisJCWNoYXIgICAqcDsKKworCQl0Z2FyZ3MgPSBEYXR1bUdldEJ5dGVhUChmYXN0Z2V0YXR0 cih0cmlnVHVwLAorCQkJCQkJCQkJCQlBbnVtX3BnX3RyaWdnZXJfdGdhcmdzLAorCQkJCQkJCQkJ CQlSZWxhdGlvbkdldERlc2NyKHBnX3RyaWdnZXIpLAorCQkJCQkJCQkJCQkmaXNudWxsKSk7CisJ CWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxMIHRnYXJncyIpOworCQlh cmdzdHIgPSAoY2hhciAqKSBWQVJEQVRBKHRnYXJncyk7CisJCWxlbnRnYXJncyA9IFZBUlNJWkVf QU5ZX0VYSERSKHRnYXJncyk7CisKKwkJcCA9IGFyZ3N0cjsKKwkJZm9yIChmaW5keCA9IDA7IGZp bmR4IDwgdGduYXJnczsgZmluZHgrKykKKwkJeworCQkJc2l6ZV90CXRsZW47CisKKwkJCS8qIFZl cmlmeSB0aGF0IHRoZSBhcmd1bWVudCBlbmNvZGluZyBpcyBjb3JyZWN0ICovCisJCQl0bGVuID0g c3RybGVuKHApOworCQkJaWYgKHAgKyB0bGVuID49IGFyZ3N0ciArIGxlbnRnYXJncykKKwkJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJCQkgZXJybXNnKCJpbnZhbGlkIGFyZ3VtZW50IHN0cmluZyAoJXMpIGZvciB0 cmlnZ2VyIFwiJXNcIiIsCisJCQkJCQkJCWFyZ3N0ciwgTmFtZVN0cih0cmlnRm9ybS0+dGduYW1l KSkpKTsKKworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocCkpOwor CisJCQlwICs9IHRsZW4gKyAxOworCQl9CisJfQorCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1w b2JqLCAiKCIpOworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmdzOiwgfUwiLCBs aXN0KTsJCS8qIG1pZ2h0IGJlIE5JTCAqLworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwg IikiKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRyaWdnZXIsICJFWEVDVVRFIFBST0NFRFVS RSAle2Z1bmN0aW9ufXMiLCB0bXBvYmopOworCisJdGFibGVfY2xvc2UocGdfdHJpZ2dlciwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiB0cmlnZ2VyOworfQorCisvKgorICogRGVwYXJzZSBh IENyZWF0ZVVzZXJNYXBwaW5nU3RtdCAoQ1JFQVRFIFVTRVIgTUFQUElORykKKyAqCisgKiBHaXZl biBhIFVzZXIgTWFwcGluZyBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LAor ICogcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBDUkVBVEUgVVNFUiBNQVBQSU5H IGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlVXNlck1hcHBp bmdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVVzZXJNYXBw aW5nU3RtdCAqbm9kZSA9IChDcmVhdGVVc2VyTWFwcGluZ1N0bXQgKikgcGFyc2V0cmVlOworCU9i alRyZWUJICAgKmNyZWF0ZVN0bXQ7CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQl0cDsKKwlG b3JtX3BnX3VzZXJfbWFwcGluZyBmb3JtOworCUZvcmVpZ25TZXJ2ZXIgKnNlcnZlcjsKKworCXJl bCA9IHRhYmxlX29wZW4oVXNlck1hcHBpbmdSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsK KworCS8qCisJICogTG9va3VwIHVwIG9iamVjdCBpbiB0aGUgY2F0YWxvZywgc28gd2UgZG9uJ3Qg aGF2ZSB0byBkZWFsIHdpdGgKKwkgKiBjdXJyZW50X3VzZXIgYW5kIHN1Y2guCisJICovCisJdHAg PSBTZWFyY2hTeXNDYWNoZTEoVVNFUk1BUFBJTkdPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0 SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgdXNlciBtYXBwaW5nICV1Iiwgb2JqZWN0SWQpOworCisJZm9ybSA9 IChGb3JtX3BnX3VzZXJfbWFwcGluZykgR0VUU1RSVUNUKHRwKTsKKworCXNlcnZlciA9IEdldEZv cmVpZ25TZXJ2ZXIoZm9ybS0+dW1zZXJ2ZXIpOworCisJY3JlYXRlU3RtdCA9IG5ld19vYmp0cmVl KCJDUkVBVEUgVVNFUiBNQVBQSU5HICIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRl U3RtdCwgIkZPUiAle3JvbGV9UiIsIG5ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKGZvcm0tPnVtdXNl cikpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgIlNFUlZFUiAle3NlcnZl cn1JIiwgc2VydmVyLT5zZXJ2ZXJuYW1lKTsKKworCS8qIGFkZCBhbiBPUFRJT05TIGNsYXVzZSwg aWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7Z2VuZXJpY19v cHRpb25zfXMiLAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxM KSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVz aXZlTG9jayk7CisJcmV0dXJuIGNyZWF0ZVN0bXQ7Cit9CisKKy8qCisgKiBkZXBhcnNlX0FsdGVy VXNlck1hcHBpbmcKKyAqCisgKiBHaXZlbiBhIFVzZXIgTWFwcGluZyBPSUQgYW5kIHRoZSBwYXJz ZXRyZWUgdGhhdCBjcmVhdGVkIGl0LAorICogcmV0dXJuIHRoZSBKU09OIGJsb2IgcmVwcmVzZW50 aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Fs dGVyVXNlck1hcHBpbmdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFs dGVyVXNlck1hcHBpbmdTdG10ICpub2RlID0gKEFsdGVyVXNlck1hcHBpbmdTdG10ICopIHBhcnNl dHJlZTsKKwlPYmpUcmVlCSAgICphbHRlclN0bXQ7CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBs ZQl0cDsKKwlGb3JtX3BnX3VzZXJfbWFwcGluZyBmb3JtOworCUZvcmVpZ25TZXJ2ZXIgKnNlcnZl cjsKKworCXJlbCA9IHRhYmxlX29wZW4oVXNlck1hcHBpbmdSZWxhdGlvbklkLCBSb3dFeGNsdXNp dmVMb2NrKTsKKworCS8qCisJICogTG9va3VwIHVwIG9iamVjdCBpbiB0aGUgY2F0YWxvZywgc28g d2UgZG9uJ3QgaGF2ZSB0byBkZWFsIHdpdGgKKwkgKiBjdXJyZW50X3VzZXIgYW5kIHN1Y2guCisJ ICovCisKKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShVU0VSTUFQUElOR09JRCwgT2JqZWN0SWRHZXRE YXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB1c2VyIG1hcHBpbmcgJXUiLCBvYmplY3RJZCk7 CisKKwlmb3JtID0gKEZvcm1fcGdfdXNlcl9tYXBwaW5nKSBHRVRTVFJVQ1QodHApOworCisJLyoK KwkgKiBMb29rdXAgdXAgb2JqZWN0IGluIHRoZSBjYXRhbG9nLCBzbyB3ZSBkb24ndCBoYXZlIHRv IGRlYWwgd2l0aAorCSAqIGN1cnJlbnRfdXNlciBhbmQgc3VjaC4KKwkgKi8KKworCXRwID0gU2Vh cmNoU3lzQ2FjaGUxKFVTRVJNQVBQSU5HT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIHVzZXIgbWFwcGluZyAldSIsIG9iamVjdElkKTsKKworCWZvcm0gPSAoRm9y bV9wZ191c2VyX21hcHBpbmcpIEdFVFNUUlVDVCh0cCk7CisKKworCXNlcnZlciA9IEdldEZvcmVp Z25TZXJ2ZXIoZm9ybS0+dW1zZXJ2ZXIpOworCisJYWx0ZXJTdG10ID0gbmV3X29ianRyZWUoIkFM VEVSIFVTRVIgTUFQUElORyIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJTdG10LCAi Rk9SICV7cm9sZX1SIiwgbmV3X29ianRyZWVfZm9yX3JvbGVfaWQoZm9ybS0+dW11c2VyKSk7CisK KwlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlclN0bXQsICJTRVJWRVIgJXtzZXJ2ZXJ9SSIsIHNl cnZlci0+c2VydmVybmFtZSk7CisKKwkvKiBhZGQgYW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFueSAq LworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyU3RtdCwgIiV7Z2VuZXJpY19vcHRpb25zfXMi LAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlS ZWxlYXNlU3lzQ2FjaGUodHApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7 CisJcmV0dXJuIGFsdGVyU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBSZWZyZXNoTWF0Vmll d1N0bXQgKFJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcpCisgKgorICogR2l2ZW4gYSBtYXRlcmlh bGl6ZWQgdmlldyBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4g YW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSByZWZyZXNoIGNvbW1hbmQuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUmVmcmVzaE1hdFZpZXdTdG10KE9pZCBvYmplY3RJZCwg Tm9kZSAqcGFyc2V0cmVlKQoreworCVJlZnJlc2hNYXRWaWV3U3RtdCAqbm9kZSA9IChSZWZyZXNo TWF0Vmlld1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKnJlZnJlc2hTdG10OworCU9i alRyZWUJICAgKnRtcDsKKworCXJlZnJlc2hTdG10ID0gbmV3X29ianRyZWVfVkEoIlJFRlJFU0gg TUFURVJJQUxJWkVEIFZJRVciLCAwKTsKKworCS8qIGFkZCBhIENPTkNVUlJFTlRMWSBjbGF1c2Ug Ki8KKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZWZyZXNoU3RtdCwgIiV7Y29uY3VycmVudGx5fXMi LAorCQkJCQkJIG5vZGUtPmNvbmN1cnJlbnQgPyAiQ09OQ1VSUkVOVExZIiA6ICIiKTsKKwkvKiBh ZGQgdGhlIG1hdHZpZXcgbmFtZSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlZnJlc2hTdG10 LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVs YXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCS8qIGFkZCBhIFdJ VEggTk8gREFUQSBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCBOTyBEQVRB IiwgMSwKKwkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJCQkJIG5vZGUtPnNraXBE YXRhID8gdHJ1ZSA6IGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZWZyZXNoU3RtdCwg IiV7d2l0aF9ub19kYXRhfXMiLCB0bXApOworCisJcmV0dXJuIHJlZnJlc2hTdG10OworfQorCisv KgorICogRGVwYXJzZSBEZWZFbGVtcywgYXMgdXNlZCBlLmcuIGJ5IEFMVEVSIENPTFVNTiAuLi4g U0VULCBpbnRvIGEgbGlzdCBvZiBTRVQKKyAqICguLi4pICBvciBSRVNFVCAoLi4uKSBjb250ZW50 cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0s IGJvb2wgaXNfcmVzZXQpCit7CisJT2JqVHJlZQkgICAqc2V0OworCU9ialRyZWUJICAgKm9wdG5h bWU7CisKKwlzZXQgPSBuZXdfb2JqdHJlZSgiIik7CisJb3B0bmFtZSA9IG5ld19vYmp0cmVlKCIi KTsKKworCWlmIChlbGVtLT5kZWZuYW1lc3BhY2UgIT0gTlVMTCkKKwkJYXBwZW5kX3N0cmluZ19v YmplY3Qob3B0bmFtZSwgIiV7c2NoZW1hfUkuIiwgZWxlbS0+ZGVmbmFtZXNwYWNlKTsKKworCWFw cGVuZF9zdHJpbmdfb2JqZWN0KG9wdG5hbWUsICIle2xhYmVsfUkiLCBlbGVtLT5kZWZuYW1lKTsK KworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHNldCwgIiV7bGFiZWx9cyIsIG9wdG5hbWUpOworCisJ aWYgKCFpc19yZXNldCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qoc2V0LCAiID0gJXt2YWx1ZX1M IiwKKwkJCQkJCQkgZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkgZGVm R2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCisJcmV0dXJuIHNldDsKK30K KworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgb2YgRFJPUCBjb21tYW5kcy4KKyAqLworY2hhciAq CitkZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hh ciAqb2JqZWN0dHlwZSwKKwkJCQkJIERyb3BCZWhhdmlvciBiZWhhdmlvcikKK3sKKwlTdHJpbmdJ bmZvRGF0YSAgc3RyOworCWNoYXIJCSAgICpjb21tYW5kOworCWNoYXIJCSAgICppZGVudGl0eSA9 IChjaGFyICopIG9iamlkZW50aXR5OworCWNoYXIJCSAgICpmbXQ7CisJT2JqVHJlZQkJKnN0bXQs ICpzdG10MjsKKwlKc29uYgkJICAqanNvbmI7CisKKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwor CWZtdCA9IHBzcHJpbnRmKCJEUk9QICVzIElGIEVYSVNUUyAlJXtvYmppZGVudGl0eX1zIiwgb2Jq ZWN0dHlwZSk7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAib2JqaWRlbnRpdHki LCBPYmpUeXBlU3RyaW5nLCBpZGVudGl0eSk7CisJc3RtdDIgPSBuZXdfb2JqdHJlZV9WQSgiQ0FT Q0FERSIsIDEsCisJCQkJCQkgICAicHJlc2VudCIsIE9ialR5cGVCb29sLCBiZWhhdmlvciA9PSBE Uk9QX0NBU0NBREUpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7Y2FzY2FkZX1z Iiwgc3RtdDIpOworCisJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHN0bXQpOworCWNvbW1hbmQg PSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElNQVRFRF9MRU4p OworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIHNldHRp bmcgb2YgRnVuY3Rpb24KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9GdW5jdGlvblNl dChWYXJpYWJsZVNldEtpbmQga2luZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCit7CisJT2Jq VHJlZQkgICAqb2JqOworCisJaWYgKGtpbmQgPT0gVkFSX1JFU0VUX0FMTCkKKwl7CisJCW9iaiA9 IG5ld19vYmp0cmVlKCJSRVNFVCBBTEwiKTsKKwl9CisJZWxzZSBpZiAodmFsdWUgIT0gTlVMTCkK Kwl7CisJCW9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgJXtzZXRfbmFtZX1JIiwgMSwKKwkJCQkJ CSAgICJzZXRfbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWUpOworCisJCS8qCisJCSAqIFNvbWUg R1VDIHZhcmlhYmxlIG5hbWVzIGFyZSAnTElTVCcgdHlwZSBhbmQgaGVuY2UgbXVzdCBub3QgYmUK KwkJICogcXVvdGVkLgorCQkgKi8KKwkJaWYgKEdldENvbmZpZ09wdGlvbkZsYWdzKG5hbWUsIHRy dWUpICYgR1VDX0xJU1RfUVVPVEUpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChvYmosICJUTyAl e3NldF92YWx1ZX1zIiwgdmFsdWUpOworCQllbHNlCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChv YmosICJUTyAle3NldF92YWx1ZX1MIiwgdmFsdWUpOworCX0KKwllbHNlCisJeworCQlvYmogPSBu ZXdfb2JqdHJlZSgiUkVTRVQiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qob2JqLCAiJXtzZXRf bmFtZX1JIiwgbmFtZSk7CisJfQorCisJcmV0dXJuIG9iajsKK30KKworLyoKKyAqIERlcGFyc2Ug YW4gSW5kZXhTdG10LgorICoKKyAqIEdpdmVuIGFuIGluZGV4IE9JRCBhbmQgdGhlIHBhcnNldHJl ZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhl IGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogSWYgdGhlIGluZGV4IGNvcnJlc3BvbmRzIHRvIGEg Y29uc3RyYWludCwgTlVMTCBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9JbmRleFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJSW5kZXhT dG10ICAqbm9kZSA9IChJbmRleFN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmluZGV4 U3RtdDsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJUmVsYXRpb24JaWR4cmVsOworCVJlbGF0aW9u CWhlYXByZWw7CisJY2hhcgkgICAqaW5kZXhfYW07CisJY2hhcgkgICAqZGVmaW5pdGlvbjsKKwlj aGFyCSAgICpyZWxvcHRpb25zOworCWNoYXIJICAgKnRhYmxlc3BhY2U7CisJY2hhcgkgICAqd2hl cmVDbGF1c2U7CisKKwlpZiAobm9kZS0+cHJpbWFyeSB8fCBub2RlLT5pc2NvbnN0cmFpbnQpCisJ eworCQkvKgorCQkgKiBJbmRleGVzIGZvciBQUklNQVJZIEtFWSBhbmQgb3RoZXIgY29uc3RyYWlu dHMgYXJlIG91dHB1dAorCQkgKiBzZXBhcmF0ZWx5OyByZXR1cm4gZW1wdHkgaGVyZS4KKwkJICov CisJCXJldHVybiBOVUxMOworCX0KKworCWlkeHJlbCA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQs IEFjY2Vzc1NoYXJlTG9jayk7CisJaGVhcHJlbCA9IHJlbGF0aW9uX29wZW4oaWR4cmVsLT5yZF9p bmRleC0+aW5kcmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlwZ19nZXRfaW5kZXhkZWZfZGV0 YWlsZWQob2JqZWN0SWQsCisJCQkJCQkJICZpbmRleF9hbSwgJmRlZmluaXRpb24sICZyZWxvcHRp b25zLAorCQkJCQkJCSAmdGFibGVzcGFjZSwgJndoZXJlQ2xhdXNlKTsKKworCS8qCisJICogVmVy Ym9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle3VuaXF1ZX1zIElOREVYICV7Y29uY3VycmVu dGx5fXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgT04KKwkgKiAle3RhYmxlfUQgVVNJTkcg JXtpbmRleF9hbX1zICgle2RlZmluaXRpb259cykgJXt3aXRofXMgJXt0YWJsZXNwYWNlfXMKKwkg KiAle3doZXJlX2NsYXVzZX1zCisJICovCisJaW5kZXhTdG10ID0gbmV3X29ianRyZWUoIkNSRUFU RSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiJXt1bmlxdWV9cyIsCisJ CQkJCQkgbm9kZS0+dW5pcXVlID8gIlVOSVFVRSIgOiAiIik7CisKKwlhcHBlbmRfZm9ybWF0X3N0 cmluZyhpbmRleFN0bXQsICJJTkRFWCIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhT dG10LCAiJXtjb25jdXJyZW50bHl9cyIsCisJCQkJCQkgbm9kZS0+Y29uY3VycmVudCA/ICJDT05D VVJSRU5UTFkiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiJXtp Zl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVY SVNUUyIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICIle25hbWV9 SSIsCisJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4cmVsKSk7CisKKwlhcHBlbmRf b2JqZWN0X29iamVjdChpbmRleFN0bXQsICJPTiAle3RhYmxlfUQiLAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShoZWFwcmVsLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCSBS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShoZWFwcmVsKSkpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoaW5kZXhTdG10LCAiVVNJTkcgJXtpbmRleF9hbX1zIiwgaW5kZXhfYW0pOworCisJYXBwZW5k X3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiKCV7ZGVmaW5pdGlvbn1zKSIsIGRlZmluaXRpb24p OworCisJLyogcmVsb3B0aW9ucyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJXSVRIIik7CisJ aWYgKHJlbG9wdGlvbnMpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIigle29wdHN9 cykiLCByZWxvcHRpb25zKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJw cmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwgIiV7d2l0 aH1zIiwgdG1wb2JqKTsKKworCS8qIHRhYmxlc3BhY2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJl ZSgiVEFCTEVTUEFDRSIpOworCWlmICh0YWJsZXNwYWNlKQorCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXBvYmosICIle3RhYmxlc3BhY2V9cyIsIHRhYmxlc3BhY2UpOworCWVsc2UKKwkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9v YmplY3QoaW5kZXhTdG10LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXBvYmopOworCisJLyogV0hFUkUg Y2xhdXNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIldIRVJFIik7CisJaWYgKHdoZXJlQ2xh dXNlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3doZXJlfXMiLCB3aGVyZUNs YXVzZSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZh bHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICIle3doZXJlX2NsYXVzZX1z IiwgdG1wb2JqKTsKKworCXRhYmxlX2Nsb3NlKGlkeHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl0 YWJsZV9jbG9zZShoZWFwcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGluZGV4U3Rt dDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIElOSEVSSVRTIHJlbGF0aW9ucy4KKyAqCisgKiBH aXZlbiBhIHRhYmxlIE9JRCwgcmV0dXJuIGEgc2NoZW1hIHF1YWxpZmllZCB0YWJsZSBsaXN0IHJl cHJlc2VudGluZworICogdGhlIHBhcmVudCB0YWJsZXMuCisgKi8KK3N0YXRpYyBMaXN0ICoKK2Rl cGFyc2VfSW5oUmVsYXRpb25zKE9pZCBvYmplY3RJZCkKK3sKKwlMaXN0CSAgICpwYXJlbnRzID0g TklMOworCVJlbGF0aW9uCWluaFJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRh IGtleTsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwlpbmhSZWwgPSB0YWJsZV9vcGVuKEluaGVyaXRz UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgma2V5LAorCQkJ CUFudW1fcGdfaW5oZXJpdHNfaW5ocmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBG X09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0 YWJsZV9iZWdpbnNjYW4oaW5oUmVsLCBJbmhlcml0c1JlbGlkU2Vxbm9JbmRleElkLAorCQkJCQkJ CSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBs ZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJT2JqVHJlZQkqcGFyZW50OworCQlG b3JtX3BnX2luaGVyaXRzIGZvcm1JbmggPSAoRm9ybV9wZ19pbmhlcml0cykgR0VUU1RSVUNUKHR1 cGxlKTsKKworCQlwYXJlbnQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25S ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkgZm9ybUluaC0+aW5ocGFyZW50KTsKKwkJcGFyZW50cyA9 IGxhcHBlbmQocGFyZW50cywgbmV3X29iamVjdF9vYmplY3QocGFyZW50KSk7CisJfQorCisJc3lz dGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShpbmhSZWwsIFJvd0V4Y2x1c2l2ZUxv Y2spOworCisJcmV0dXJuIHBhcmVudHM7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBPTiBDT01N TUlUIC4uLiBjbGF1c2UgZm9yIENSRUFURSAuLi4gVEVNUE9SQVJZIC4uLgorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKE9uQ29tbWl0QWN0aW9uIG9wdGlvbikK K3sKKwlPYmpUcmVlCSAgICpvbmNvbW1pdDsKKworCW9uY29tbWl0ID0gbmV3X29ianRyZWUoIk9O IENPTU1JVCIpOworCXN3aXRjaCAob3B0aW9uKQorCXsKKwkJY2FzZSBPTkNPTU1JVF9EUk9QOgor CQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob25jb21taXQsICIle29uX2NvbW1pdF92YWx1ZX1zIiwg IkRST1AiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfREVMRVRFX1JPV1M6CisJCQlh cHBlbmRfc3RyaW5nX29iamVjdChvbmNvbW1pdCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiLCAiREVM RVRFIFJPV1MiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfUFJFU0VSVkVfUk9XUzoK KwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9uY29tbWl0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIs ICJQUkVTRVJWRSBST1dTIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX05PT1A6CisJ CQlhcHBlbmRfbnVsbF9vYmplY3Qob25jb21taXQsICIle29uX2NvbW1pdF92YWx1ZX1zIik7CisJ CQlhcHBlbmRfYm9vbF9vYmplY3Qob25jb21taXQsICJwcmVzZW50IiwgZmFsc2UpOworCQkJYnJl YWs7CisJfQorCisJcmV0dXJuIG9uY29tbWl0OworfQorCisvKgorICogRGVwYXJzZSBhIFJlbmFt ZVN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUmVuYW1lU3RtdChPYmplY3RB ZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlSZW5hbWVTdG10ICpub2RlID0g KFJlbmFtZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKnJlbmFtZVN0bXQ7CisJY2hh cgkgICAqZm10c3RyOworCWNvbnN0IGNoYXIgKm9ianR5cGU7CisJUmVsYXRpb24JcmVsYXRpb247 CisJT2lkCQkJc2NoZW1hSWQ7CisKKwkvKgorCSAqIEluIGFuIEFMVEVSIC4uIFJFTkFNRSBjb21t YW5kLCB3ZSBkb24ndCBoYXZlIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZQorCSAqIG9iamVjdCBp biBzeXN0ZW0gY2F0YWxvZ3M6IHNpbmNlIHdlIGluc3BlY3QgdGhlbSBhZnRlciB0aGUgY29tbWFu ZCBoYXMKKwkgKiBleGVjdXRlZCwgdGhlIG9sZCBuYW1lIGlzIGFscmVhZHkgZ29uZS4gIFRoZXJl Zm9yZSwgd2UgZXh0cmFjdCBpdCBmcm9tCisJICogdGhlIHBhcnNlIG5vZGUuICBOb3RlIHdlIHN0 aWxsIGV4dHJhY3QgdGhlIHNjaGVtYSBuYW1lIGZyb20gdGhlIGNhdGFsb2cKKwkgKiAoaXQgbWln aHQgbm90IGJlIHByZXNlbnQgaW4gdGhlIHBhcnNlIG5vZGUpOyBpdCBjYW5ub3QgcG9zc2libHkg aGF2ZQorCSAqIGNoYW5nZWQgYW55d2F5LgorCSAqLworCXN3aXRjaCAobm9kZS0+cmVuYW1lVHlw ZSkKKwl7CisJCWNhc2UgT0JKRUNUX1RBQkxFOgorCQljYXNlIE9CSkVDVF9JTkRFWDoKKwkJY2Fz ZSBPQkpFQ1RfU0VRVUVOQ0U6CisKKwkJCS8qCisJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJICoK KwkJCSAqIEFMVEVSICVzICV7aWZfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25l d25hbWV9SQorCQkJICovCisJCQlvYmp0eXBlID0gc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVu YW1lVHlwZSk7CisJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMiLCBvYmp0eXBlKTsKKwkJ CXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLm9iamVjdElkLCBBY2Nlc3NTaGFyZUxv Y2spOworCQkJc2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWxhdGlvbik7CisJCQly ZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAwKTsKKwkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHJlbmFtZVN0bXQsICIle2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJIG5vZGUtPm1pc3Np bmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFt ZVN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSk7CisJ CQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiUkVOQU1FIFRPICV7bmV3bmFtZX1J IiwKKwkJCQkJCQkJIG5vZGUtPm5ld25hbWUpOworCQkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24s IEFjY2Vzc1NoYXJlTG9jayk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9QT0xJQ1k6CisJ CQl7CisJCQkJSGVhcFR1cGxlCXBvbFR1cDsKKwkJCQlGb3JtX3BnX3BvbGljeSBwb2xGb3JtOwor CQkJCVJlbGF0aW9uCXBnX3BvbGljeTsKKwkJCQlTY2FuS2V5RGF0YQlrZXk7CisJCQkJU3lzU2Nh bkRlc2MJc2NhbjsKKworCQkJCXBnX3BvbGljeSA9IHJlbGF0aW9uX29wZW4oUG9saWN5UmVsYXRp b25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlTY2FuS2V5SW5pdCgma2V5LCBBbnVtX3BnX3Bv bGljeV9vaWQsCisJCQkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQkJ CU9iamVjdElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXNjYW4gPSBzeXN0YWJs ZV9iZWdpbnNjYW4ocGdfcG9saWN5LCBQb2xpY3lPaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCQkJ CSAgTlVMTCwgMSwgJmtleSk7CisJCQkJcG9sVHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsK KwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocG9sVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHBvbGljeSAldSIsIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJ CXBvbEZvcm0gPSAoRm9ybV9wZ19wb2xpY3kpIEdFVFNUUlVDVChwb2xUdXApOworCisJCQkJcmVu YW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBQT0xJQ1kiLCAwKTsKKwkJCQlhcHBlbmRf c3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiJXtpZl9leGlzdHN9cyIsCisJCQkJCQkJCQkgbm9k ZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCQkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJlbmFtZVN0bXQsICIle3BvbGljeW5hbWV9SSIsIG5vZGUtPnN1Ym5hbWUpOworCQkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICJPTiAle2lkZW50aXR5fUQiLAorCQkJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJ CQkJCQkgcG9sRm9ybS0+cG9scmVsaWQpKTsKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5h bWVTdG10LCAiUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJCSBub2RlLT5uZXduYW1l KTsKKwkJCQlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3Bv bGljeSwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpF Q1RfQVRUUklCVVRFOgorCQljYXNlIE9CSkVDVF9DT0xVTU46CisJCQlyZWxhdGlvbiA9IHJlbGF0 aW9uX29wZW4oYWRkcmVzcy5vYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCXNjaGVtYUlk ID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRpb24pOworCisJCQkvKgorCQkJICogVmVyYm9z ZSBzeW50YXgKKwkJCSAqCisJCQkgKiBDb21wb3NpdGUgdHlwZXM6IEFMVEVSIG9ianR5cGUgJXtp ZGVudGl0eX1EIFJFTkFNRSBBVFRSSUJVVEUKKwkJCSAqICV7Y29sbmFtZX1JIFRPICV7bmV3bmFt ZX1JICV7Y2FzY2FkZX1zCisJCQkgKgorCQkJICogTm9ybWFsIHR5cGVzOiBBTFRFUiBvYmp0eXBl ICV7aWZfZXhpc3RzfXMgJSV7aWRlbnRpdHl9RCBSRU5BTUUKKwkJCSAqIENPTFVNTiAle2NvbG5h bWV9SSBUTyAle25ld25hbWV9SQorCQkJICovCisKKwkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09 IE9CSkVDVF9BVFRSSUJVVEUpCisJCQl7CisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlKCJB TFRFUiBUWVBFIik7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVTdG10LCAiJXtp ZGVudGl0eX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwK KwkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSkpOworCQkJCWZtdHN0ciA9 IHBzcHJpbnRmKCJSRU5BTUUgQVRUUklCVVRFICUle2NvbG5hbWV9SSIpOworCQkJfQorCQkJZWxz ZQorCQkJeworCQkJCW9ianR5cGUgPSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZWxhdGlvblR5 cGUpOworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyIsIG9ianR5cGUpOworCQkJCXJl bmFtZVN0bXQgPSBuZXdfb2JqdHJlZShmbXRzdHIpOworCisJCQkJLyogQ29tcG9zaXRlIHR5cGVz IGRvIG5vdCBzdXBwb3J0IElGIEVYSVNUUyAqLworCQkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09 IE9CSkVDVF9DT0xVTU4pCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICIl e2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJCQlub2RlLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIg OiAiIik7CisKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVTdG10LCAiJXtpZGVudGl0 eX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJ CQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSk7CisJCQkJZm10c3RyID0gcHNw cmludGYoIlJFTkFNRSBDT0xVTU4gJSV7Y29sbmFtZX1JIik7CisJCQl9CisKKwkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsIGZtdHN0ciwgbm9kZS0+c3VibmFtZSk7CisJCQlhcHBl bmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiVE8gJXtuZXduYW1lfUkiLCBub2RlLT5uZXdu YW1lKTsKKworCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0FUVFJJQlVURSkKKwkJ CQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVTdG10LCAiJXtjYXNjYWRlfXMiLAorCQkJCQkJ CQkJIG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkJCQkJCQkicHJlc2VudCIs IE9ialR5cGVCb29sLAorCQkJCQkJCQkJCQkJCW5vZGUtPmJlaGF2aW9yID09IERST1BfQ0FTQ0FE RSkpOworCisJCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgorCQkJeworCQkJCWNoYXIJKmlkZW50 OworCQkJCUhlYXBUdXBsZSBwcm9jdHVwOworCQkJCUZvcm1fcGdfcHJvYyBwcm9jZm9ybTsKKwkJ CQlMaXN0CSAgICppZGVudGl0eTsKKworCQkJCUFzc2VydChJc0Eobm9kZS0+b2JqZWN0LCBPYmpl Y3RXaXRoQXJncykpOworCQkJCWlkZW50aXR5ID0gKChPYmplY3RXaXRoQXJncyAqKSBub2RlLT5v YmplY3QpLT5vYmpuYW1lOworCisJCQkJcHJvY3R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lE LAorCQkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2N0dXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElk KTsKKwkJCQlwcm9jZm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jdHVwKTsKKwor CQkJCS8qIFhYWCBkb2VzIHRoaXMgd29yayBmb3Igb3JkZXJlZC1zZXQgYWdncmVnYXRlcz8gKi8K KwkJCQlpZGVudCA9IHBzcHJpbnRmKCIlcyVzIiwKKwkJCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9p ZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShwcm9jZm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJ CQkJCQkJCQkJCQkJCXN0clZhbChsbGFzdChpZGVudGl0eSkpKSwKKwkJCQkJCQkJIGZvcm1hdF9w cm9jZWR1cmVfYXJncyhhZGRyZXNzLm9iamVjdElkLCB0cnVlKSk7CisKKwkJCQlmbXRzdHIgPSBw c3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRpdHl9cyBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JIiwK KwkJCQkJCQkJICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKSk7CisJCQkJcmVu YW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJCQkJImlkZW50aXR5 IiwgT2JqVHlwZVN0cmluZywgaWRlbnQsCisJCQkJCQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0 cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUocHJvY3R1cCk7CisJ CQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9PUENMQVNTOgorCQkJeworCQkJCUhlYXBU dXBsZSAgIG9wY1R1cDsKKwkJCQlGb3JtX3BnX29wY2xhc3Mgb3BjRm9ybTsKKwkJCQlMaXN0CSAg ICpvbGRuYW1lczsKKwkJCQljaGFyCSAgICpzY2hlbWFuYW1lOworCQkJCWNoYXIJICAgKm9wY25h bWU7CisJCQkJY2hhcgkgICAqZm10OworCisJCQkJZm10ID0gcHNwcmludGYoIkFMVEVSICVzICUl e2lkZW50aXR5fUQgVVNJTkcgJSV7aW5kZXhfbWV0aG9kfXMgUkVOQU1FIFRPICUle25ld25hbWV9 SSIsCisJCQkJCQkJICAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSkpOworCisJ CQkJb3BjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENMQU9JRCwgT2JqZWN0SWRHZXREYXR1bShhZGRy ZXNzLm9iamVjdElkKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wY1R1cCkpCisJCQkJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGNsYXNzIHdpdGggT0lEICV1 IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKworCQkJCW9wY0Zvcm0gPSAoRm9ybV9wZ19v cGNsYXNzKSBHRVRTVFJVQ1Qob3BjVHVwKTsKKworCQkJCW9sZG5hbWVzID0gbGlzdF9jb3B5X3Rh aWwoKExpc3QgKikgbm9kZS0+b2JqZWN0LCAxKTsKKworCQkJCS8qIGRlY29uc3RydWN0IHRoZSBu YW1lIGxpc3QgKi8KKwkJCQlEZWNvbnN0cnVjdFF1YWxpZmllZE5hbWUob2xkbmFtZXMsICZzY2hl bWFuYW1lLCAmb3BjbmFtZSk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoZm10 LCAzLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQlu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BjRm9ybS0+b3BjbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJCQkJCQkgb3BjbmFtZSksCisJCQkJCQkJCQkJCSJpbmRleF9tZXRob2QiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCQkJCQlnZXRfYW1fbmFtZShvcGNGb3JtLT5vcGNtZXRob2QpLAorCQkJCQkJ CQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJUmVs ZWFzZVN5c0NhY2hlKG9wY1R1cCk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9P UEZBTUlMWToKKwkJCXsKKwkJCQlIZWFwVHVwbGUgICBvcGZUdXA7CisJCQkJSGVhcFR1cGxlICAg YW1UdXA7CisJCQkJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCQkJCUZvcm1fcGdfYW0gIGFt Rm9ybTsKKwkJCQlMaXN0CSAgICpvbGRuYW1lczsKKwkJCQljaGFyCSAgICpzY2hlbWFuYW1lOwor CQkJCWNoYXIJICAgKm9wZm5hbWU7CisJCQkJY2hhcgkgICAqZm10OworCisJCQkJZm10ID0gcHNw cmludGYoIkFMVEVSICVzICUle2lkZW50aXR5fUQgVVNJTkcgJSV7aW5kZXhfbWV0aG9kfXMgUkVO QU1FIFRPICUle25ld25hbWV9SSIsCisJCQkJCQkJICAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+ cmVuYW1lVHlwZSkpOworCisJCQkJb3BmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lE LCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkK KwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWls eSB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJb3BmRm9ybSA9 IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCQkJCWFtVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKG9wZkZvcm0tPm9wZm1ldGhvZCkp OworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChhbVR1cCkpCisJCQkJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1IiwKKwkJCQkJCSBvcGZGb3Jt LT5vcGZtZXRob2QpOworCisJCQkJYW1Gb3JtID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1 cCk7CisKKwkJCQlvbGRuYW1lcyA9IGxpc3RfY29weV90YWlsKChMaXN0ICopIG5vZGUtPm9iamVj dCwgMSk7CisKKwkJCQkvKiBkZWNvbnN0cnVjdCB0aGUgbmFtZSBsaXN0ICovCisJCQkJRGVjb25z dHJ1Y3RRdWFsaWZpZWROYW1lKG9sZG5hbWVzLCAmc2NoZW1hbmFtZSwgJm9wZm5hbWUpOworCisJ CQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMywKKwkJCQkJCQkJCQkJImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCQkJIG9wZm5hbWUpLAorCQkJ CQkJCQkJCQkiaW5kZXhfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJTmFtZVN0 cihhbUZvcm0tPmFtbmFtZSksCisJCQkJCQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywg bm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUoYW1UdXApOworCQkJCVJlbGVh c2VTeXNDYWNoZShvcGZUdXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfU0NI RU1BOgorCQkJcmVuYW1lU3RtdCA9CisJCQkJbmV3X29ianRyZWVfVkEoIkFMVEVSIFNDSEVNQSAl e2lkZW50aXR5fUkgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMiwKKwkJCQkJCQkgICAiaWRlbnRp dHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCSAgICJuZXduYW1lIiwg T2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVD VF9GRFc6CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05fU0VSVkVSOgorCQkJeworCQkJCVN0cmluZyAq aWRlbnRpdHkgPSBjYXN0Tm9kZShTdHJpbmcsIG5vZGUtPm9iamVjdCk7CisKKwkJCQlmbXRzdHIg PSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRpdHl9cyBSRU5BTUUgVE8gJSV7bmV3bmFtZX1J IiwKKwkJCQkJCQkJCQkJCXN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpKTsKKwkJ CQlyZW5hbWVTdG10ID0KKwkJCQkJbmV3X29ianRyZWVfVkEoZm10c3RyLCAyLAorCQkJCQkJCQkg ICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBzdHJWYWwoaWRlbnRpdHkpLAorCQkJCQkJCQkg ICAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCQkJfQorCQkJYnJl YWs7CisKKwkJY2FzZSBPQkpFQ1RfUlVMRToKKwkJCXsKKwkJCQlIZWFwVHVwbGUJcmV3clR1cDsK KwkJCQlGb3JtX3BnX3Jld3JpdGUgcmV3ckZvcm07CisJCQkJUmVsYXRpb24JcGdfcmV3cml0ZTsK KworCQkJCXBnX3Jld3JpdGUgPSByZWxhdGlvbl9vcGVuKFJld3JpdGVSZWxhdGlvbklkLCBBY2Nl c3NTaGFyZUxvY2spOworCQkJCXJld3JUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBn X3Jld3JpdGUsIEFudW1fcGdfcmV3cml0ZV9vaWQsICBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQly ZXdyRm9ybSA9IChGb3JtX3BnX3Jld3JpdGUpIEdFVFNUUlVDVChyZXdyVHVwKTsKKworCQkJCXJl bmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgUlVMRSAle3J1bGVuYW1lfUkgT04gJXtp ZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SSIsCisJCQkJCQkJCQkJCTMsCisJCQkJCQkJ CQkJCSJydWxlbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJCQkJ CSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCQlyZXdyRm9y bS0+ZXZfY2xhc3MpLAorCQkJCQkJCQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUt Pm5ld25hbWUpOworCQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3Jld3JpdGUsIEFjY2Vzc1NoYXJlTG9j ayk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJeworCQkJ CUhlYXBUdXBsZQl0cmlnVHVwOworCQkJCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsKKwkJCQlS ZWxhdGlvbglwZ190cmlnZ2VyOworCisJCQkJcGdfdHJpZ2dlciA9IHJlbGF0aW9uX29wZW4oVHJp Z2dlclJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJdHJpZ1R1cCA9IGdldF9jYXRh bG9nX29iamVjdF9ieV9vaWQocGdfdHJpZ2dlciwgZ2V0X29iamVjdF9hdHRudW1fb2lkKGFkZHJl c3MuY2xhc3NJZCksIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXRyaWdGb3JtID0gKEZvcm1fcGdf dHJpZ2dlcikgR0VUU1RSVUNUKHRyaWdUdXApOworCisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBUUklHR0VSICV7dHJpZ2dlcm5hbWV9SSBPTiAle2lkZW50aXR5fUQgUkVO QU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJCQkJMywKKwkJCQkJCQkJCQkJInRyaWdnZXJu YW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJCQkJImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJCXRyaWdGb3JtLT50Z3JlbGlk KSwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsK KworCQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3RyaWdnZXIsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9 CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9DT0xMQVRJT046CisJCWNhc2UgT0JKRUNUX1RZ UEU6CisJCWNhc2UgT0JKRUNUX0NPTlZFUlNJT046CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJ Y2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJY2Fz ZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJ eworCQkJCUhlYXBUdXBsZQlvYmpUdXA7CisJCQkJUmVsYXRpb24JY2F0YWxvZzsKKwkJCQlEYXR1 bQkJb2JqbnNwOworCQkJCWJvb2wJCWlzbnVsbDsKKwkJCQlBdHRyTnVtYmVyCUFudW1fbmFtZXNw YWNlOworCQkJCUxpc3QJICAgKmlkZW50aXR5ID0gY2FzdE5vZGUoTGlzdCwgbm9kZS0+b2JqZWN0 KTsKKwkJCQljaGFyCSAgICpmbXRzdHJpbmc7CisKKwkJCQkvKiBvYnRhaW4gb2JqZWN0IHR1cGxl ICovCisJCQkJY2F0YWxvZyA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5jbGFzc0lkLCBBY2Nlc3NT aGFyZUxvY2spOworCQkJCW9ialR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY2F0YWxv ZywgZ2V0X29iamVjdF9hdHRudW1fb2lkKGFkZHJlc3MuY2xhc3NJZCksIGFkZHJlc3Mub2JqZWN0 SWQpOworCisJCQkJLyogb2J0YWluIG5hbWVzcGFjZSAqLworCQkJCUFudW1fbmFtZXNwYWNlID0g Z2V0X29iamVjdF9hdHRudW1fbmFtZXNwYWNlKGFkZHJlc3MuY2xhc3NJZCk7CisJCQkJb2JqbnNw ID0gaGVhcF9nZXRhdHRyKG9ialR1cCwgQW51bV9uYW1lc3BhY2UsCisJCQkJCQkJCQkgIFJlbGF0 aW9uR2V0RGVzY3IoY2F0YWxvZyksICZpc251bGwpOworCQkJCWlmIChpc251bGwpCisJCQkJCWVs b2coRVJST1IsICJpbnZhbGlkIE5VTEwgbmFtZXNwYWNlIik7CisKKwkJCQlvYmp0eXBlID0gc3Ry aW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSk7CisJCQkJZm10c3RyaW5nID0gcHNwcmlu dGYoIkFMVEVSICVzIiwgb2JqdHlwZSk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVf VkEoZm10c3RyaW5nLAorCQkJCQkJCQkJCTApOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl bmFtZVN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKERhdHVtR2V0T2JqZWN0SWQob2JqbnNwKSwKKwkJCQkJCQkJCQkJCQkJCSAgc3RyVmFsKGxs YXN0KGlkZW50aXR5KSkpKTsKKworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQs ICJSRU5BTUUgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCQkJIG5vZGUtPm5ld25hbWUpOworCQkJ CXJlbGF0aW9uX2Nsb3NlKGNhdGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9CisJCQlicmVh azsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBl ICVkIiwgbm9kZS0+cmVuYW1lVHlwZSk7CisJfQorCisJcmV0dXJuIHJlbmFtZVN0bXQ7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGEgQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAoQUxURVIgLi4uIERFUEVO RFMgT04gLi4uKS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckRlcGVuZFN0 bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJPYmplY3REZXBlbmRz U3RtdCAqbm9kZSA9IChBbHRlck9iamVjdERlcGVuZHNTdG10ICopIHBhcnNldHJlZTsKKwlPYmpU cmVlCQkgICAqYWx0ZXJEZXBlbmRlU3RtdCA9IE5VTEw7CisKKworCWlmIChub2RlLT5vYmplY3RU eXBlID09IE9CSkVDVF9JTkRFWCkKKwl7CisJCVJlbGF0aW9uICAgICAgICByZWxhdGlvbiA9IHJl bGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCU9ialRyZWUgKnF1YWxp ZmllZDsKKworCQlhbHRlckRlcGVuZGVTdG10ID0gbmV3X29ianRyZWUoIkFMVEVSIElOREVYIik7 CisKKwkJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKTsK KwkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEZXBlbmRlU3RtdCwgIiV7aWRlbnRpdHl9RCIs IHF1YWxpZmllZCk7CisJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRGVwZW5kZVN0bXQsICIle05PfXMiLAor CQkJCQkJIG5vZGUtPnJlbW92ZSA/ICJOTyIgOiAiIik7CisKKwkJYXBwZW5kX2Zvcm1hdF9zdHJp bmcoYWx0ZXJEZXBlbmRlU3RtdCwgIkRFUEVORFMgT04gRVhURU5TSU9OIik7CisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGFsdGVyRGVwZW5kZVN0bXQsICIle25ld25hbWV9SSIsIHN0clZhbChub2Rl LT5leHRuYW1lKSk7CisJfQorCWVsc2UKKwkJZWxvZyhMT0csICJ1bnJlY29nbml6ZWQgbm9kZSB0 eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLAorCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0cmVl KSk7CisKKwlyZXR1cm4gYWx0ZXJEZXBlbmRlU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhl IHNlcXVlbmNlIENBQ0hFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2Rl cGFyc2VfU2VxX0NhY2hlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRh LCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKmNhY2hlOworCWNoYXIJICAgKnRt cHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQs IHNlcWRhdGEtPnNlcWNhY2hlKTsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBD QUNIRSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIkNBQ0hFICV7dmFsdWV9cyI7CisKKwlj YWNoZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJjYWNoZSIsCisJCQkJCQkgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7 CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QoY2FjaGUpOworfQorCisvKgorICogRGVwYXJz ZSB0aGUgc2VxdWVuY2UgQ1lDTEUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0g KgorZGVwYXJzZV9TZXFfQ3ljbGUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNl cWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqY3ljbGU7CisJY2hhcgkg ICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUICV7bm99cyBDWUNMRSI7 CisJZWxzZQorCQlmbXQgPSAiJXtub31zIENZQ0xFIjsKKworCWN5Y2xlID0gbmV3X29ianRyZWVf VkEoZm10LCAyLAorCQkJCQkJICAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjeWNsZSIsCisJ CQkJCQkgICAibm8iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICAgc2VxZGF0YS0+c2VxY3ljbGUg PyAiIiA6ICJOTyIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChjeWNsZSk7Cit9CisKKy8q CisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBJTkNSRU1FTlQgQlkgb3B0aW9uLgorICovCitzdGF0 aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoT2JqVHJlZSAqcGFy ZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2Jq VHJlZQkgICAqaW5jcmVtZW50YWxieTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10 OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIElOQ1JFTUVOVCBCWSAle3ZhbHVl fXMiOworCWVsc2UKKwkJZm10ID0gIklOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiOworCisJdG1wc3Ry ID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFpbmNyZW1lbnQpOworCWluY3Jl bWVudGFsYnkgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJCSAgICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAic2VxaW5jcmVtZW50IiwKKwkJCQkJCQkJICAgInZhbHVlIiwgT2JqVHlw ZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QoaW5jcmVtZW50YWxi eSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBNQVhWQUxVRSBvcHRpb24uCisg Ki8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9NYXh2YWx1ZShPYmpUcmVl ICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sK KwlPYmpUcmVlCSAgICptYXh2YWx1ZTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10 OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIE1BWFZBTFVFICV7dmFsdWV9cyI7 CisJZWxzZQorCQlmbXQgPSAiTUFYVkFMVUUgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJp bnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxbWF4KTsKKwltYXh2YWx1ZSA9IG5ld19vYmp0 cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibWF4dmFs dWUiLAorCQkJCQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1cm4g bmV3X29iamVjdF9vYmplY3QobWF4dmFsdWUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2Vx dWVuY2UgTUlOVkFMVUUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVw YXJzZV9TZXFfTWludmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRh dGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqbWludmFsdWU7CisJY2hhcgkg ICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0g IlNFVCBNSU5WQUxVRSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIk1JTlZBTFVFICV7dmFs dWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1p bik7CisJbWludmFsdWUgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgIm1pbnZhbHVlIiwKKwkJCQkJCQkgICJ2YWx1ZSIsIE9ialR5cGVT dHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KG1pbnZhbHVlKTsKK30K KworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE9XTkVEIEJZIGNvbW1hbmQuCisgKi8KK3N0 YXRpYyBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX093bmVkQnkoT2JqVHJlZSAqcGFyZW50LCBPaWQg c2VxdWVuY2VJZCwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICpvd25lZGJ5ID0g TlVMTDsKKwlSZWxhdGlvbglkZXBSZWw7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0 YSBrZXlzWzNdOworCUhlYXBUdXBsZSAgIHR1cGxlOworCisJZGVwUmVsID0gdGFibGVfb3BlbihE ZXBlbmRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZrZXlzWzBd LAorCQkJCUFudW1fcGdfZGVwZW5kX2NsYXNzaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVy LCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25SZWxhdGlvbklkKSk7CisJ U2NhbktleUluaXQoJmtleXNbMV0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2JqaWQsCisJCQkJQlRF cXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oc2VxdWVu Y2VJZCkpOworCVNjYW5LZXlJbml0KCZrZXlzWzJdLAorCQkJCUFudW1fcGdfZGVwZW5kX29ianN1 YmlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9JTlQ0RVEsCisJCQkJSW50MzJHZXRE YXR1bSgwKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGRlcFJlbCwgRGVwZW5kRGVw ZW5kZXJJbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMywga2V5cyk7CisJd2hpbGUgKEhl YXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCU9p ZAkJIG93bmVySWQ7CisJCUZvcm1fcGdfZGVwZW5kIGRlcGZvcm07CisJCU9ialRyZWUJKnRtcG9i ajsKKwkJY2hhcgkgICAqY29sbmFtZTsKKworCQlkZXBmb3JtID0gKEZvcm1fcGdfZGVwZW5kKSBH RVRTVFJVQ1QodHVwbGUpOworCisJCS8qIE9ubHkgY29uc2lkZXIgQVVUTyBkZXBlbmRlbmNpZXMg b24gcGdfY2xhc3MgKi8KKwkJaWYgKGRlcGZvcm0tPmRlcHR5cGUgIT0gREVQRU5ERU5DWV9BVVRP KQorCQkJY29udGludWU7CisJCWlmIChkZXBmb3JtLT5yZWZjbGFzc2lkICE9IFJlbGF0aW9uUmVs YXRpb25JZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVwZm9ybS0+cmVmb2Jqc3ViaWQgPD0gMCkK KwkJCWNvbnRpbnVlOworCisJCW93bmVySWQgPSBkZXBmb3JtLT5yZWZvYmppZDsKKwkJY29sbmFt ZSA9IGdldF9hdHRuYW1lKG93bmVySWQsIGRlcGZvcm0tPnJlZm9ianN1YmlkLCBmYWxzZSk7CisJ CWlmIChjb2xuYW1lID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLCBvd25lcklkKTsKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiYXR0cm5hbWUiLCBjb2xuYW1lKTsKKwkJb3duZWRi eSA9IG5ld19vYmp0cmVlX1ZBKCJPV05FRCBCWSAle293bmVyfUQiLAorCQkJCQkJCQkgMiwKKwkJ CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3duZWQiLAorCQkJCQkJCQkgIm93bmVy IiwgT2JqVHlwZU9iamVjdCwgdG1wb2JqKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4p OworCXJlbGF0aW9uX2Nsb3NlKGRlcFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qCisJICog SWYgdGhlcmUncyBubyBvd25lciBjb2x1bW4sIGVtaXQgYW4gZW1wdHkgT1dORUQgQlkgZWxlbWVu dCwgc2V0IHVwIHNvCisJICogdGhhdCBpdCB3b24ndCBwcmludCBhbnl0aGluZy4KKwkgKi8KKwlp ZiAoIW93bmVkYnkpCisJCS8qIFhYWCB0aGlzIHNob3VsZG4ndCBoYXBwZW4gLi4uICovCisJCW93 bmVkYnkgPSBuZXdfb2JqdHJlZV9WQSgiT1dORUQgQlkgJXtvd25lcn1EIiwKKwkJCQkJCQkJIDMs CisJCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm93bmVkIiwKKwkJCQkJCQkJICJv d25lciIsIE9ialR5cGVOdWxsLAorCQkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgZmFs c2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KG93bmVkYnkpOworfQorCisvKgorICog RGVwYXJzZSB0aGUgc2VxdWVuY2UgUkVTVEFSVCBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqCitkZXBhcnNlX1NlcV9SZXN0YXJ0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19z ZXF1ZW5jZV9kYXRhIHNlcWRhdGEpCit7CisJT2JqVHJlZQkgICAqcmVzdGFydDsKKwljaGFyCSAg ICp0bXBzdHI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPmxh c3RfdmFsdWUpOworCXJlc3RhcnQgPSBuZXdfb2JqdHJlZV9WQSgiUkVTVEFSVCAle3ZhbHVlfXMi LCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RhcnQiLAorCQkJCQkJ CSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29i amVjdChyZXN0YXJ0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFNUQVJUIFdJ VEggb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfU3Rh cnR3aXRoKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFs dGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKnN0YXJ0d2l0aDsKKwljaGFyCSAgICp0bXBzdHI7 CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIFNUQVJU IFdJVEggJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJTVEFSVCBXSVRIICV7dmFsdWV9cyI7 CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcXN0YXJ0KTsK KwlzdGFydHdpdGggPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJzdGFydCIsCisJCQkJCQkJICAgInZhbHVlIiwgT2JqVHlwZVN0cmlu ZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qoc3RhcnR3aXRoKTsKK30KKwor LyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgU1RPUkFHRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxp bmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU3RvcmFnZShPYmpUcmVlICpwYXJlbnQsIEZvcm1f cGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnN0b3JhZ2U7CisJY2hhcgkgICAqdG1w c3RyOworCWNoYXIJICAgKmZtdDsKKwljaGFyCSAgICpzdHI7CisKKwlzd2l0Y2ggKHR5cEZvcm0t PnR5cHN0b3JhZ2UpCisJeworCQljYXNlICdwJzoKKwkJCXN0ciA9ICJwbGFpbiI7CisJCQlicmVh azsKKwkJY2FzZSAnZSc6CisJCQlzdHIgPSAiZXh0ZXJuYWwiOworCQkJYnJlYWs7CisJCWNhc2Ug J3gnOgorCQkJc3RyID0gImV4dGVuZGVkIjsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCXN0 ciA9ICJtYWluIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFs aWQgc3RvcmFnZSBzcGVjaWZpZXIgJWMiLCB0eXBGb3JtLT50eXBzdG9yYWdlKTsKKwl9CisKKwl0 bXBzdHIgPSBwc3ByaW50ZigiJXMiLCBzdHIpOworCisJZm10ID0gIlNUT1JBR0UgPSAle3ZhbHVl fXMiOworCisJc3RvcmFnZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJzdG9yYWdlIiwKKwkJCQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0 cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChzdG9yYWdlKTsKK30K KworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgUkVDRUlWRSBvcHRpb24uCisgKi8KK3N0YXRpYyBp bmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfUmVjZWl2ZShPYmpUcmVlICpwYXJlbnQsIEZv cm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnJlY2VpdmU7CisKKwlyZWNlaXZl ID0gbmV3X29ianRyZWVfVkEoIlJFQ0VJVkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgInJlY2VpdmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXByZWNlaXZl KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmVjZWl2ZSwgIiV7cHJvY2VkdXJlfUQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHJlY2VpdmUpKTsKKwllbHNlCisJCWFwcGVuZF9ib29s X29iamVjdChyZWNlaXZlLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0 X29iamVjdChyZWNlaXZlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgU0VORCBvcHRp b24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU2VuZChPYmpU cmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnNlbmQ7 CisKKwlzZW5kID0gbmV3X29ianRyZWVfVkEoIlNFTkQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgInNlbmQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBzZW5k KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qoc2VuZCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJIHR5cEZvcm0tPnR5cHNlbmQpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVj dChzZW5kLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChz ZW5kKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgdHlwbW9kX2luIG9wdGlvbi4KKyAq Lworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9UeXBtb2RfSW4oT2JqVHJl ZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAgICp0eXBtb2Rp bjsKKworCXR5cG1vZGluID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9JTj0iLCAxLAorCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX2luIik7CisJaWYgKE9pZElzVmFsaWQo dHlwRm9ybS0+dHlwbW9kaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0eXBtb2RpbiwgIiV7 cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZGluKSk7CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodHlwbW9kaW4sICJwcmVzZW50IiwgZmFsc2UpOworCisJ cmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5cG1vZGluKTsKK30KKworCisvKgorICogRGVwYXJz ZSB0aGUgdHlwZSB0eXBtb2Rfb3V0IG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVt ICoKK2RlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBl IHR5cEZvcm0pCit7CisJT2JqVHJlZQkgICAqdHlwbW9kb3V0OworCisJdHlwbW9kb3V0ID0gbmV3 X29ianRyZWVfVkEoIlRZUE1PRF9PVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInR5cG1vZF9vdXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2RvdXQp KQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0eXBtb2RvdXQsICIle3Byb2NlZHVyZX1EIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RvdXQpKTsKKwllbHNlCisJCWFwcGVuZF9ib29s X29iamVjdCh0eXBtb2RvdXQsICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmpl Y3Rfb2JqZWN0KHR5cG1vZG91dCk7Cit9CisKKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgYW5h bHl6ZSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVf QW5hbHl6ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRy ZWUJICAgKnR5cGFuYWx5emU7CisKKwl0eXBhbmFseXplID0gbmV3X29ianRyZWVfVkEoIkFOQUxZ WkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImFuYWx5emUiKTsKKwlp ZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBhbmFseXplKSkKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QodHlwYW5hbHl6ZSwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0t PnR5cGFuYWx5emUpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0eXBhbmFseXplLCAi cHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdCh0eXBhbmFseXpl KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgc3Vic2NyaXB0IG9wdGlvbi4KKyAqLwor c3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9TdWJzY3JpcHQoT2JqVHJlZSAq cGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAgICp0eXBzdWJzY3Jp cHQ7CisKKwl0eXBzdWJzY3JpcHQgPSBuZXdfb2JqdHJlZV9WQSgiU1VCU0NSSVBUPSIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdWJzY3JpcHQiKTsKKwlpZiAoT2lkSXNW YWxpZCh0eXBGb3JtLT50eXBzdWJzY3JpcHQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0eXBz dWJzY3JpcHQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBz dWJzY3JpcHQpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0eXBzdWJzY3JpcHQsICJw cmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5cHN1YnNjcmlw dCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgUnVsZVN0bXQgKENSRUFURSBSVUxFKS4KKyAqCisg KiBHaXZlbiBhIHJ1bGUgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0 dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgcnVsZSBjb21tYW5kLgorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1J1bGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCVJ1bGVTdG10ICpub2RlID0gKFJ1bGVTdG10ICopIHBhcnNldHJlZTsKKwlP YmpUcmVlCSAgICpydWxlU3RtdDsKKwlPYmpUcmVlCSAgICp0bXA7CisJUmVsYXRpb24JcGdfcmV3 cml0ZTsKKwlGb3JtX3BnX3Jld3JpdGUgcmV3ckZvcm07CisJSGVhcFR1cGxlCXJld3JUdXA7CisJ U3lzU2NhbkRlc2MJc2NhbjsKKwlTY2FuS2V5RGF0YQlrZXk7CisJRGF0dW0JCWV2X3F1YWw7CisJ RGF0dW0JCWV2X2FjdGlvbnM7CisJYm9vbAkJaXNudWxsOworCWNoYXIJICAgKnF1YWw7CisJTGlz dAkgICAqYWN0aW9uczsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlw Z19yZXdyaXRlID0gdGFibGVfb3BlbihSZXdyaXRlUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwlTY2FuS2V5SW5pdCgma2V5LAorCQkJCUFudW1fcGdfcmV3cml0ZV9vaWQsCisJCQkJQlRF cXVhbFN0cmF0ZWd5TnVtYmVyLAorCQkJCUZfT0lERVEsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0 SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfcmV3cml0ZSwgUmV3cml0ZU9p ZEluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCAma2V5KTsKKwlyZXdyVHVwID0gc3lz dGFibGVfZ2V0bmV4dChzY2FuKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocmV3clR1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZXdyaXRlIHJ1bGUgd2l0aCBv aWQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXJld3JGb3JtID0gKEZvcm1fcGdfcmV3cml0ZSkg R0VUU1RSVUNUKHJld3JUdXApOworCisJcnVsZVN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIFJV TEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJ1bGVTdG10LCAiJXtvcl9yZXBsYWNlfXMi LAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIik7CisKKwlhcHBlbmRf c3RyaW5nX29iamVjdChydWxlU3RtdCwgIiV7aWRlbnRpdHl9SSIsCisJCQkJCQkgbm9kZS0+cnVs ZW5hbWUpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocnVsZVN0bXQsICJBUyBPTiAle2V2ZW50 fXMiLAorCQkJCQkJIG5vZGUtPmV2ZW50ID09IENNRF9TRUxFQ1QgPyAiU0VMRUNUIiA6CisJCQkJ CQkgbm9kZS0+ZXZlbnQgPT0gQ01EX1VQREFURSA/ICJVUERBVEUiIDoKKwkJCQkJCSBub2RlLT5l dmVudCA9PSBDTURfREVMRVRFID8gIkRFTEVURSIgOgorCQkJCQkJIG5vZGUtPmV2ZW50ID09IENN RF9JTlNFUlQgPyAiSU5TRVJUIiA6ICJYWFgiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChydWxl U3RtdCwgIlRPICV7dGFibGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgcmV3ckZvcm0tPmV2X2NsYXNzKSk7 CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChydWxlU3RtdCwgIkRPICV7aW5zdGVhZH1zIiwKKwkJ CQkJCSBub2RlLT5pbnN0ZWFkID8gIklOU1RFQUQiIDogIkFMU08iKTsKKworCWV2X3F1YWwgPSBo ZWFwX2dldGF0dHIocmV3clR1cCwgQW51bV9wZ19yZXdyaXRlX2V2X3F1YWwsCisJCQkJCQkgICBS ZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAmaXNudWxsKTsKKwlldl9hY3Rpb25zID0gaGVh cF9nZXRhdHRyKHJld3JUdXAsIEFudW1fcGdfcmV3cml0ZV9ldl9hY3Rpb24sCisJCQkJCQkJICBS ZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAmaXNudWxsKTsKKworCXBnX2dldF9ydWxlZGVm X2RldGFpbGVkKGV2X3F1YWwsIGV2X2FjdGlvbnMsICZxdWFsLCAmYWN0aW9ucyk7CisKKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiV0hFUkUgJXtjbGF1c2V9cyIsIDApOworCisJaWYgKHF1YWwpCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImNsYXVzZSIsIHF1YWwpOworCWVsc2UKKwl7CisJ CWFwcGVuZF9udWxsX29iamVjdCh0bXAsICJjbGF1c2UiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCisJYXBwZW5kX29iamVjdF9vYmplY3QocnVs ZVN0bXQsICJ3aGVyZV9jbGF1c2UiLCB0bXApOworCisJbGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNl bGwsIGFjdGlvbnMpCisJeworCQljaGFyICphY3Rpb24gPSBsZmlyc3QoY2VsbCk7CisKKwkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoYWN0aW9uKSk7CisJfQorCWFwcGVu ZF9hcnJheV9vYmplY3QocnVsZVN0bXQsICIle2FjdGlvbnM6LCB9cyIsIGxpc3QpOworCisJc3lz dGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShwZ19yZXdyaXRlLCBBY2Nlc3NTaGFy ZUxvY2spOworCisJcmV0dXJuIHJ1bGVTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0 ZVRyYW5zZm9ybVN0bXQgKENSRUFURSBUUkFOU0ZPUk0pLgorICoKKyAqIEdpdmVuIGEgdHJhbnNm b3JtIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIENSRUFURSBUUkFOU0ZPUk0gY29tbWFuZC4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUcmFuc2Zvcm1TdG10KE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRyYW5zZm9ybVN0bXQgKm5vZGUgPSAoQ3Jl YXRlVHJhbnNmb3JtU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkqY3JlYXRlVHJhbnNmb3Jt OworCU9ialRyZWUgKnNpZ247CisJSGVhcFR1cGxlIHRyZlR1cDsKKwlIZWFwVHVwbGUgbGFuZ1R1 cDsKKwlIZWFwVHVwbGUgcHJvY1R1cDsKKwlGb3JtX3BnX3RyYW5zZm9ybSB0cmZGb3JtOworCUZv cm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07CisJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCWludCBp OworCisJLyogR2V0IHRoZSBwZ190cmFuc2Zvcm0gdHVwbGUgKi8KKwl0cmZUdXAgPSBTZWFyY2hT eXNDYWNoZTEoVFJGT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHRyZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVy ZSBmb3IgdHJhbnNmb3JtIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHJmRm9ybSA9 IChGb3JtX3BnX3RyYW5zZm9ybSkgR0VUU1RSVUNUKHRyZlR1cCk7CisKKwkvKiBHZXQgdGhlIGNv cnJlc3BvbmRpbmcgcGdfbGFuZ3VhZ2UgdHVwbGUgKi8KKwlsYW5nVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKExBTkdPSUQsIHRyZkZvcm0tPnRyZmxhbmcpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChs YW5nVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciBsYW5ndWFn ZSB3aXRoIE9JRCAldSIsCisJCQkgdHJmRm9ybS0+dHJmbGFuZyk7CisJbGFuZ0Zvcm0gPSAoRm9y bV9wZ19sYW5ndWFnZSkgR0VUU1RSVUNUKGxhbmdUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5 bnRheAorCSAqCisJICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zIFRSQU5TRk9STSBGT1IgJXt0eXBl bmFtZX1EIExBTkdVQUdFICV7bGFuZ3VhZ2V9SQorCSAqICggRlJPTSBTUUwgV0lUSCBGVU5DVElP TiAle3NpZ25hdHVyZX1zLCBUTyBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZV90b2Z9cyAp CisJICovCisJY3JlYXRlVHJhbnNmb3JtID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBw ZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlVHJhbnNmb3JtLCAiJXtvcl9yZXBsYWNlfXMiLAorCQkJ CQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIik7CisJYXBwZW5kX29iamVjdF9v YmplY3QoY3JlYXRlVHJhbnNmb3JtLCAiVFJBTlNGT1JNIEZPUiAle3R5cGVuYW1lfUQiLAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkgdHJmRm9ybS0+dHJmdHlwZSkpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVRy YW5zZm9ybSwgIkxBTkdVQUdFICV7bGFuZ3VhZ2V9SSIsCisJCQkJCQkgTmFtZVN0cihsYW5nRm9y bS0+bGFubmFtZSkpOworCisJLyogZGVwYXJzZSB0aGUgdHJhbnNmb3JtX2VsZW1lbnRfbGlzdCAq LworCWlmICh0cmZGb3JtLT50cmZmcm9tc3FsICE9IEludmFsaWRPaWQpCisJeworCQlMaXN0ICpw YXJhbXMgPSBOSUw7CisKKwkJLyoKKwkJICogVmVyYm9zZSBzeW50YXgKKwkJICoKKwkJICogQ1JF QVRFICV7b3JfcmVwbGFjZX1zIFRSQU5TRk9STSBGT1IgJXt0eXBlbmFtZX1EIExBTkdVQUdFICV7 bGFuZ3VhZ2V9SQorCQkgKiAoIEZST00gU1FMIFdJVEggRlVOQ1RJT04gJXtzaWduYXR1cmV9cyAp CisJCSAqLworCisJCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSBmb3IgdGhlIEZST00gRlVOQ1RJ T04gKi8KKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCB0cmZGb3JtLT50cmZm cm9tc3FsKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkJ dHJmRm9ybS0+dHJmZnJvbXNxbCk7CisJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RS VUNUKHByb2NUdXApOworCisJCS8qCisJCSAqIENSRUFURSBUUkFOU0ZPUk0gZG9lcyBub3QgY2hh bmdlIGZ1bmN0aW9uIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlIGNhdGFsb2cKKwkJICogdG8gZ2V0 IGlucHV0IHR5cGUgT2lkcy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJv bmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJlZSAqcGFyYW1vYmogPSBuZXdfb2JqdHJlZSgiIik7 CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXSwg LTEpKTsKKwkJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVjdChwYXJh bW9iaikpOworCQl9CisKKwkJc2lnbiA9IG5ld19vYmp0cmVlKCIiKTsKKworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChzaWduLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3Ry KHByb2NGb3JtLT5wcm9uYW1lKSkpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHNpZ24sICIoJXth cmd1bWVudHM6LCB9cykiLCBwYXJhbXMpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZVRyYW5zZm9ybSwgIihGUk9NIFNRTCBXSVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlfXMiLCBzaWdu KTsKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCX0KKwlpZiAodHJmRm9ybS0+dHJmdG9z cWwgIT0gSW52YWxpZE9pZCkKKwl7CisJCUxpc3QgKnBhcmFtcyA9IE5JTDsKKworCQkvKgorCQkg KiBWZXJib3NlIHN5bnRheAorCQkgKgorCQkgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMgVFJBTlNG T1JNIEZPUiAle3R5cGVuYW1lfUQgTEFOR1VBR0UgJXtsYW5ndWFnZX1JCisJCSAqICggRlJPTSBT UUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZX1zLCBUTyBTUUwgV0lUSCBGVU5DVElPTiAle3Np Z25hdHVyZV90b2Z9cyApCisJCSAqCisJCSAqIE9SCisJCSAqCisJCSAqIENSRUFURSAle29yX3Jl cGxhY2V9cyBUUkFOU0ZPUk0gRk9SICV7dHlwZW5hbWV9RCBMQU5HVUFHRSAle2xhbmd1YWdlfUkK KwkJICogKCBUTyBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZV90b2Z9cyApCisJCSAqLwor CisJCS8qIEFwcGVuZCBhICcsJyBpZiB0cmZmcm9tc3FsIGlzIHByZXNlbnQsIGVsc2UgYXBwZW5k ICcoJyAqLworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVUcmFuc2Zvcm0sICIle2NvbW1h fXMiLAorCQkJCQkJCSB0cmZGb3JtLT50cmZmcm9tc3FsICE9IEludmFsaWRPaWQgPyAiLCIgOiAi KCIpOworCisJCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSBmb3IgdGhlIFRPIEZVTkNUSU9OICov CisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgdHJmRm9ybS0+dHJmdG9zcWwp OworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWx1cmUgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1IiwKKwkJCQl0cmZGb3Jt LT50cmZ0b3NxbCk7CisJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NU dXApOworCisJCS8qCisJCSAqIENSRUFURSBUUkFOU0ZPUk0gZG9lcyBub3QgY2hhbmdlIGZ1bmN0 aW9uIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlIGNhdGFsb2cKKwkJICogdG8gZ2V0IGlucHV0IHR5 cGUgT2lkcy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkr KykKKwkJeworCQkJT2JqVHJlZSAqcGFyYW1vYmogPSBuZXdfb2JqdHJlZSgiIik7CisKKwkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXSwgLTEpKTsKKwkJ CXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVjdChwYXJhbW9iaikpOwor CQl9CisKKwkJc2lnbiA9IG5ld19vYmp0cmVlKCIiKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVj dChzaWduLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo cHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgTmFtZVN0cihwcm9jRm9ybS0+ cHJvbmFtZSkpKTsKKwkJYXBwZW5kX2FycmF5X29iamVjdChzaWduLCAiKCV7YXJndW1lbnRzOiwg fXMpIiwgcGFyYW1zKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVUcmFuc2Zvcm0s ICJUTyBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZV90b2Z9cyIsIHNpZ24pOworCQlSZWxl YXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJfQorCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVRy YW5zZm9ybSwgIiV7Y2xvc2VfYnJhY2tldH1zIiwgIikiKTsKKworCVJlbGVhc2VTeXNDYWNoZShs YW5nVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHJmVHVwKTsKKwlyZXR1cm4gY3JlYXRlVHJhbnNm b3JtOworfQorCisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5kcy4K KyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBpbiBQ cm9jZXNzVXRpbGl0eVNsb3cuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vfc2ltcGxl X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9iamVjdElkOworCU5v ZGUJICAgKnBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpjb21tYW5kOworCisJQXNzZXJ0KGNtZC0+ dHlwZSA9PSBTQ1RfU2ltcGxlKTsKKworCXBhcnNldHJlZSA9IGNtZC0+cGFyc2V0cmVlOworCW9i amVjdElkID0gY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkOworCisJaWYgKGNtZC0+aW5f ZXh0ZW5zaW9uICYmIChub2RlVGFnKHBhcnNldHJlZSkgIT0gVF9DcmVhdGVFeHRlbnNpb25TdG10 KSkKKwkJcmV0dXJuIE5VTEw7CisKKworCS8qIFRoaXMgc3dpdGNoIG5lZWRzIHRvIGhhbmRsZSBl dmVyeXRoaW5nIHRoYXQgUHJvY2Vzc1V0aWxpdHlTbG93IGRvZXMgKi8KKwlzd2l0Y2ggKG5vZGVU YWcocGFyc2V0cmVlKSkKKwl7CisJCWNhc2UgVF9DcmVhdGVTY2hlbWFTdG10OgorCQkJY29tbWFu ZCA9IGRlcGFyc2VfQ3JlYXRlU2NoZW1hU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgVF9BbHRlckRvbWFpblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9B bHRlckRvbWFpblN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJICBjbWQtPmQu c2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlU3Rt dDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisJCQlicmVhazsKKworCQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgorCQkJY29tbWFuZCA9 IGRlcGFyc2VfUmVmcmVzaE1hdFZpZXdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBUX0NyZWF0ZVRyaWdTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3Jl YXRlVHJpZ1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRf UnVsZVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9SdWxlU3RtdChvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVTZXFTdG10OgorCQkJY29tbWFuZCA9 IGRlcGFyc2VfQ3JlYXRlU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVF9DcmVhdGVGZHdTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlRmR3 U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVV c2VyTWFwcGluZ1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVVc2VyTWFwcGluZ1N0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJVc2Vy TWFwcGluZ1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlclVzZXJNYXBwaW5nU3RtdChv YmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlckZkd1N0bXQ6 CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckZkd1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJTZXFTdG10OgorCQkJY29tbWFuZCA9IGRlcGFy c2VfQWx0ZXJTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX0RlZmluZVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9EZWZpbmVTdG10KG9iamVjdElk LCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJIGNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVDb252ZXJzaW9uU3RtdDoKKwkJCWNvbW1hbmQg PSBkZXBhcnNlX0NyZWF0ZUNvbnZlcnNpb24ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVh azsKKworCQljYXNlIFRfQ3JlYXRlRG9tYWluU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Ny ZWF0ZURvbWFpbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9D cmVhdGVFeHRlbnNpb25TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlRXh0ZW5zaW9u U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlckV4 dGVuc2lvblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckV4dGVuc2lvblN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJFeHRlbnNpb25D b250ZW50c1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckV4dGVuc2lvbkNvbnRlbnRz U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJCQkJCQkgY21kLT5kLnNpbXBsZS5z ZWNvbmRhcnlPYmplY3QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZU9wRmFtaWx5U3Rt dDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5KG9iamVjdElkLCBwYXJzZXRy ZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZVBvbGljeVN0bXQ6CisJCQljb21tYW5k ID0gZGVwYXJzZV9DcmVhdGVQb2xpY3lTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBUX0luZGV4U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0luZGV4U3Rt dChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVGdW5j dGlvblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVGdW5jdGlvbihvYmplY3RJZCwg cGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlckZ1bmN0aW9uU3RtdDoKKwkJ CWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRnVuY3Rpb24ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJDb2xsYXRpb25TdG10OgorCQkJY29tbWFuZCA9IGRl cGFyc2VfQWx0ZXJDb2xsYXRpb24ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKwor CQljYXNlIFRfUmVuYW1lU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX1JlbmFtZVN0bXQoY21k LT5kLnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0Fs dGVyT2JqZWN0RGVwZW5kc1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckRlcGVuZFN0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJPYmpl Y3RTY2hlbWFTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJPYmplY3RTY2hlbWFTdG10 KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywKKwkJCQkJCQkJCQkJCQlwYXJzZXRyZWUsCisJCQkJCQkJ CQkJCQkJY21kLT5kLnNpbXBsZS5zZWNvbmRhcnlPYmplY3QpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX0FsdGVyT3duZXJTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJPd25lclN0bXQo Y21kLT5kLnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBU X0FsdGVyT3BlcmF0b3JTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJPcGVyYXRvclN0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJQb2xp Y3lTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJQb2xpY3lTdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyVHlwZVN0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9BbHRlclR5cGVTZXRTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10OgorCQkJY29tbWFuZCA9 IGRlcGFyc2VfQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJGb3JlaWduU2VydmVyU3RtdDoKKwkJCWNvbW1hbmQg PSBkZXBhcnNlX0FsdGVyRm9yZWlnblNlcnZlclN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfQ29tcG9zaXRlVHlwZVN0bXQ6CisJCQljb21tYW5kID0gZGVw YXJzZV9Db21wb3NpdGVUeXBlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVF9DcmVhdGVFbnVtU3RtdDoJLyogQ1JFQVRFIFRZUEUgQVMgRU5VTSAqLworCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlRW51bVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlUmFuZ2VTdG10OgkvKiBDUkVBVEUgVFlQRSBBUyBS QU5HRSAqLworCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlUmFuZ2VTdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRW51bVN0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9BbHRlckVudW1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBUX0NyZWF0ZUNhc3RTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3Jl YXRlQ2FzdFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRf QWx0ZXJUU0RpY3Rpb25hcnlTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJUU0RpY3Rp b25hcnlTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0Ny ZWF0ZVRyYW5zZm9ybVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVUcmFuc2Zvcm1T dG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWNv bW1hbmQgPSBOVUxMOworCQkJZWxvZyhMT0csICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRl cGFyc2UgY29tbWFuZDogJWQiLAorCQkJCSAoaW50KSBub2RlVGFnKHBhcnNldHJlZSkpOworCX0K KworCXJldHVybiBjb21tYW5kOworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRB QkxFIGRlcGFyc2luZy4KKyAqCisgKiBEZWFsIHdpdGggYWxsIHRoZSB0YWJsZSBlbGVtZW50cyAo Y29sdW1ucyBhbmQgY29uc3RyYWludHMpLgorICoKKyAqIE5vdGUgd2UgaWdub3JlIGNvbnN0cmFp bnRzIGluIHRoZSBwYXJzZSBub2RlIGhlcmU7IHRoZXkgYXJlIGV4dHJhY3RlZCBmcm9tCisgKiBz eXN0ZW0gY2F0YWxvZ3MgaW5zdGVhZC4KKyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZV9UYWJs ZUVsZW1lbnRzKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBMaXN0ICpk cGNvbnRleHQsCisJCQkJCSAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUpCit7CisJTGlzdAkg ICAqZWxlbWVudHMgPSBOSUw7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCB0YWJs ZUVsZW1lbnRzKQorCXsKKwkJTm9kZQkgICAqZWx0ID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKKwor CQlzd2l0Y2ggKG5vZGVUYWcoZWx0KSkKKwkJeworCQkJY2FzZSBUX0NvbHVtbkRlZjoKKwkJCQl7 CisJCQkJCU9ialRyZWUJICAgKnRyZWU7CisKKwkJCQkJdHJlZSA9IHR5cGVkID8KKwkJCQkJCWRl cGFyc2VfQ29sdW1uRGVmX3R5cGVkKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJCQko Q29sdW1uRGVmICopIGVsdCkgOgorCQkJCQkJZGVwYXJzZV9Db2x1bW5EZWYocmVsYXRpb24sIGRw Y29udGV4dCwKKwkJCQkJCQkJCQkJICBjb21wb3NpdGUsIChDb2x1bW5EZWYgKikgZWx0LAorCQkJ CQkJCQkJCQkgIGZhbHNlLCBOVUxMKTsKKwkJCQkJaWYgKHRyZWUgIT0gTlVMTCkKKwkJCQkJewor CQkJCQkJT2JqRWxlbQkqY29sdW1uOworCisJCQkJCQljb2x1bW4gPSBuZXdfb2JqZWN0X29iamVj dCh0cmVlKTsKKwkJCQkJCWVsZW1lbnRzID0gbGFwcGVuZChlbGVtZW50cywgY29sdW1uKTsKKwkJ CQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgVF9Db25zdHJhaW50OgorCQkJCWJyZWFr OworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBub2RlIHR5cGUgJWQiLCBu b2RlVGFnKGVsdCkpOworCQl9CisJfQorCisJcmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICog V29ya2hvcnNlIHRvIGRlcGFyc2UgYSBDb2xsZWN0ZWRDb21tYW5kLgorICovCitjaGFyICoKK2Rl cGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3Nl X21vZGUpCit7CisJT3ZlcnJpZGVTZWFyY2hQYXRoICpvdmVycmlkZVBhdGg7CisJTWVtb3J5Q29u dGV4dAlvbGRjeHQ7CisJTWVtb3J5Q29udGV4dAl0bXBjeHQ7CisJT2JqVHJlZQkJICAgKnRyZWU7 CisJY2hhcgkJICAgKmNvbW1hbmQ7CisJU3RyaW5nSW5mb0RhdGEgIHN0cjsKKworCS8qCisJICog QWxsb2NhdGUgZXZlcnl0aGluZyBkb25lIGJ5IHRoZSBkZXBhcnNpbmcgcm91dGluZXMgaW50byBh IHRlbXAgY29udGV4dCwKKwkgKiB0byBhdm9pZCBoYXZpbmcgdG8gc3ByaW5rbGUgdGhlbSB3aXRo IG1lbW9yeSBoYW5kbGluZyBjb2RlOyBidXQgYWxsb2NhdGUKKwkgKiB0aGUgb3V0cHV0IFN0cmlu Z0luZm8gYmVmb3JlIHN3aXRjaGluZy4KKwkgKi8KKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwl0 bXBjeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJ CQkJCSAgICJkZXBhcnNlIGN0eCIsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0la RSwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9JTklUU0laRSwKKwkJCQkJCQkJICAgQUxM T0NTRVRfREVGQVVMVF9NQVhTSVpFKTsKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8o dG1wY3h0KTsKKworCS8qCisJICogTWFueSByb3V0aW5lcyB1bmRlcmx5aW5nIHRoaXMgb25lIHdp bGwgaW52b2tlIHJ1bGV1dGlscy5jIGZ1bmN0aW9uYWxpdHkKKwkgKiBpbiBvcmRlciB0byBvYnRh aW4gZGVwYXJzZWQgdmVyc2lvbnMgb2YgZXhwcmVzc2lvbnMuICBJbiBzdWNoIHJlc3VsdHMsCisJ ICogd2Ugd2FudCBhbGwgb2JqZWN0IG5hbWVzIHRvIGJlIHF1YWxpZmllZCwgc28gdGhhdCByZXN1 bHRzIGFyZSAicG9ydGFibGUiCisJICogdG8gZW52aXJvbm1lbnRzIHdpdGggZGlmZmVyZW50IHNl YXJjaF9wYXRoIHNldHRpbmdzLiAgUmF0aGVyIHRoYW4gaW5qZWN0CisJICogd2hhdCB3b3VsZCBi ZSByZXBldGl0aXZlIGNhbGxzIHRvIG92ZXJyaWRlIHNlYXJjaCBwYXRoIGFsbCBvdmVyIHRoZQor CSAqIHBsYWNlLCB3ZSBkbyBpdCBjZW50cmFsbHkgaGVyZS4KKwkgKi8KKwlvdmVycmlkZVBhdGgg PSBHZXRPdmVycmlkZVNlYXJjaFBhdGgoQ3VycmVudE1lbW9yeUNvbnRleHQpOworCW92ZXJyaWRl UGF0aC0+c2NoZW1hcyA9IE5JTDsKKwlvdmVycmlkZVBhdGgtPmFkZENhdGFsb2cgPSBmYWxzZTsK KwlvdmVycmlkZVBhdGgtPmFkZFRlbXAgPSB0cnVlOworCVB1c2hPdmVycmlkZVNlYXJjaFBhdGgo b3ZlcnJpZGVQYXRoKTsKKworCXZlcmJvc2UgPSB2ZXJib3NlX21vZGU7CisKKwlzd2l0Y2ggKGNt ZC0+dHlwZSkKKwl7CisJCWNhc2UgU0NUX1NpbXBsZToKKwkJCXRyZWUgPSBkZXBhcnNlX3NpbXBs ZV9jb21tYW5kKGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJUYWJsZToKKwkJCXRy ZWUgPSBkZXBhcnNlX0FsdGVyVGFibGVTdG10KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1Rf R3JhbnQ6CisJCQl0cmVlID0gZGVwYXJzZV9HcmFudFN0bXQoY21kKTsKKwkJCWJyZWFrOworCQlj YXNlIFNDVF9BbHRlck9wRmFtaWx5OgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJPcEZhbWlseShj bWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xhc3M6CisJCQl0cmVlID0gZGVw YXJzZV9DcmVhdGVPcENsYXNzU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVy VFNDb25maWc6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlclRTQ29uZmlndXJhdGlvblN0bXQoY21k KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgZGVw YXJzZSBub2RlIHR5cGUgJWQiLCBjbWQtPnR5cGUpOworCX0KKworCVBvcE92ZXJyaWRlU2VhcmNo UGF0aCgpOworCisJaWYgKHRyZWUpCisJeworCQlKc29uYiAqanNvbmI7CisKKwkJanNvbmIgPSBv Ymp0cmVlX3RvX2pzb25iKHRyZWUpOworCQljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwg Jmpzb25iLT5yb290LCBKU09OQl9FU1RJTUFURURfTEVOKTsKKwl9CisJZWxzZQorCQljb21tYW5k ID0gTlVMTDsKKworCS8qCisJICogQ2xlYW4gdXAuICBOb3RlIHRoYXQgc2luY2Ugd2UgY3JlYXRl ZCB0aGUgU3RyaW5nSW5mbyBpbiB0aGUgY2FsbGVyJ3MKKwkgKiBjb250ZXh0LCB0aGUgb3V0cHV0 IHN0cmluZyBpcyBub3QgZGVsZXRlZCBoZXJlLgorCSAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjeHQpOworCU1lbW9yeUNvbnRleHREZWxldGUodG1wY3h0KTsKKworCXJldHVybiBjb21t YW5kOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uZmI5NzBmMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9qc29uLmMKQEAgLTAsMCArMSw3NjMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IGRkbF9qc29uLmMKKyAqCSAgSlNPTiBjb2RlIHJlbGF0ZWQgdG8gRERMIGNvbW1hbmQgZGVwYXJz aW5nCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQs IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJ Q0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJsaWIv c3RyaW5naW5mby5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRp bHMvanNvbmIuaCIKKworCisvKgorICogQ29udmVyc2lvbiBzcGVjaWZpZXIsIGl0IGRldGVybWlu ZXMgaG93IHdlIGV4cGFuZCB0aGUganNvbiBlbGVtZW50IGludG8KKyAqIHN0cmluZy4KKyAqLwor dHlwZWRlZiBlbnVtCit7CisJU3BlY1R5cGVuYW1lLAorCVNwZWNPcGVyYXRvcm5hbWUsCisJU3Bl Y0RvdHRlZE5hbWUsCisJU3BlY1N0cmluZywKKwlTcGVjTnVtYmVyLAorCVNwZWNTdHJpbmdMaXRl cmFsLAorCVNwZWNJZGVudGlmaWVyLAorCVNwZWNSb2xlCit9IGNvbnZTcGVjaWZpZXI7CisKKy8q CisgKiBBIHRlcm5hcnkgdmFsdWUgd2hpY2ggcmVwcmVzZW50cyBhIGJvb2xlYW4gdHlwZSBKc29u YlZhbHVlLgorICovCit0eXBlZGVmIGVudW0KK3sKKwl0dl9hYnNlbnQsCisJdHZfdHJ1ZSwKKwl0 dl9mYWxzZQorfSBqc29uX3RyaXZhbHVlOworCitzdGF0aWMgYm9vbCBleHBhbmRfb25lX2pzb25i X2VsZW1lbnQoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJCQkJIEpzb25iVmFsdWUg Kmpzb252YWwsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCQkJIGNvbnN0IGNoYXIgKmZt dCk7CitzdGF0aWMgdm9pZCBleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBidWYsIGNoYXIg KnBhcmFtLAorCQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5c2VwLAorCQkJ CSAgIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQpOworc3RhdGljIHZv aWQgZm10c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CitjaGFyICpkZGxfZGVwYXJzZV9q c29uX3RvX3N0cmluZyhjaGFyICpqc29uYik7CisKKy8qCisgKiBHaXZlbiBhIEpzb25iQ29udGFp bmVyLCBmaW5kIHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtleSBuYW1lIGluIGl0Lgor ICogSWYgaXQncyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZCb29sLCBhbiBlcnJvciBpcyByYWlz ZWQuIElmIGl0IGRvZXNuJ3QKKyAqIGV4aXN0LCB0dl9hYnNlbnQgaXMgcmV0dXJuZWQ7IG90aGVy d2lzZSByZXR1cm4gdGhlIGFjdHVhbCBqc29uX3RyaXZhbHVlLgorICovCitzdGF0aWMganNvbl90 cml2YWx1ZQorZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250 YWluZXIsIGNoYXIgKmtleW5hbWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAq dmFsdWU7CisJanNvbl90cml2YWx1ZQlyZXN1bHQ7CisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsK KwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1lOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0 cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250 YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwp CisJCXJldHVybiB0dl9hYnNlbnQ7CisJaWYgKHZhbHVlLT50eXBlICE9IGpidkJvb2wpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IG9mIHR5cGUgYm9vbGVhbiIs CisJCQkJCQlrZXluYW1lKSkpOworCXJlc3VsdCA9IHZhbHVlLT52YWwuYm9vbGVhbiA/IHR2X3Ry dWUgOiB0dl9mYWxzZTsKKwlwZnJlZSh2YWx1ZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisv KgorICogR2l2ZW4gYSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3aXRoIHRo ZSBnaXZlbiBrZXkgbmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVyIHRoYW4g amJ2U3RyaW5nLCBhbiBlcnJvciBpcyByYWlzZWQuICBJZiBpdCBkb2Vzbid0CisgKiBleGlzdCwg YW4gZXJyb3IgaXMgcmFpc2VkIHVubGVzcyBtaXNzaW5nX29rOyBvdGhlcndpc2UgcmV0dXJuIE5V TEwuCisgKgorICogSWYgaXQgZXhpc3RzIGFuZCBpcyBhIHN0cmluZywgYSBmcmVzaGx5IHBhbGxv YydlZCBjb3B5IGlzIHJldHVybmVkLgorICoKKyAqIElmICpsZW5ndGggaXMgbm90IE5VTEwsIGl0 IGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjaGFyICoK K2ZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIs IGNoYXIgKmtleW5hbWUsCisJCQkJCQkJICBib29sIG1pc3Npbmdfb2ssIGludCAqbGVuZ3RoKQor eworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNoYXIJICAgKnN0cjsK KworCS8qIFhYWCB2ZXJpZnkgdGhhdCB0aGlzIGlzIGFuIG9iamVjdCwgbm90IGFuIGFycmF5ICov CisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1l OworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRK c29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwg JmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwpCisJeworCQlpZiAobWlzc2luZ19vaykKKwkJCXJl dHVybiBOVUxMOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3NpbmcgZWxlbWVudCBcIiVzXCIg aW4ganNvbiBvYmplY3QiLCBrZXluYW1lKSkpOworCX0KKworCXN0ciA9IHBuc3RyZHVwKHZhbHVl LT52YWwuc3RyaW5nLnZhbCwgdmFsdWUtPnZhbC5zdHJpbmcubGVuKTsKKwlpZiAobGVuZ3RoKQor CQkqbGVuZ3RoID0gdmFsdWUtPnZhbC5zdHJpbmcubGVuOworCXBmcmVlKHZhbHVlKTsKKwlyZXR1 cm4gc3RyOworfQorCisjZGVmaW5lIEFEVkFOQ0VfUEFSU0VfUE9JTlRFUihwdHIsZW5kX3B0cikg XAorCWRvIHsgXAorCQlpZiAoKysocHRyKSA+PSAoZW5kX3B0cikpIFwKKwkJCWVyZXBvcnQoRVJS T1IsIFwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksIFwK KwkJCQkJIGVycm1zZygidW50ZXJtaW5hdGVkIGZvcm1hdCBzcGVjaWZpZXIiKSkpOyBcCisJfSB3 aGlsZSAoMCkKKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIHBnX2V2ZW50X3RyaWdnZXJf ZXhwYW5kX2NvbW1hbmQKKyAqCisgKiBGaW5kIHRoZSAiZm10IiBlbGVtZW50IGluIHRoZSBnaXZl biBjb250YWluZXIsIGFuZCBleHBhbmQgaXQgaW50byB0aGUKKyAqIHByb3ZpZGVkIFN0cmluZ0lu Zm8uCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfZm10X3JlY3Vyc2l2ZShKc29uYkNvbnRhaW5l ciAqY29udGFpbmVyLCBTdHJpbmdJbmZvIGJ1ZikKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29u YlZhbHVlICp2YWx1ZTsKKwljb25zdCBjaGFyICpjcDsKKwljb25zdCBjaGFyICpzdGFydF9wdHI7 CisJY29uc3QgY2hhciAqZW5kX3B0cjsKKwlpbnQJCQlsZW47CisKKwlzdGFydF9wdHIgPSBmaW5k X3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihjb250YWluZXIsICJmbXQiLCBmYWxzZSwgJmxlbik7 CisJZW5kX3B0ciA9IHN0YXJ0X3B0ciArIGxlbjsKKworCWZvciAoY3AgPSBzdGFydF9wdHI7IGNw IDwgZW5kX3B0cjsgY3ArKykKKwl7CisJCWNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyOworCQlib29s CQlpc19hcnJheSA9IGZhbHNlOworCQljaGFyCSAgICpwYXJhbSA9IE5VTEw7CisJCWNoYXIJICAg KmFycmF5c2VwID0gTlVMTDsKKworCQlpZiAoKmNwICE9ICclJykKKwkJeworCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQorCisKKwkJQURW QU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKworCQkvKiBFYXN5IGNhc2U6ICUlIG91 dHB1dHMgYSBzaW5nbGUgJSAqLworCQlpZiAoKmNwID09ICclJykKKwkJeworCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJ CSAqIFNjYW4gdGhlIG1hbmRhdG9yeSBlbGVtZW50IG5hbWUuICBBbGxvdyBmb3IgYW4gYXJyYXkg c2VwYXJhdG9yCisJCSAqICh3aGljaCBtYXkgYmUgdGhlIGVtcHR5IHN0cmluZykgdG8gYmUgc3Bl Y2lmaWVkIGFmdGVyIGNvbG9uLgorCQkgKi8KKwkJaWYgKCpjcCA9PSAneycpCisJCXsKKwkJCVN0 cmluZ0luZm9EYXRhIHBhcmJ1ZjsKKwkJCVN0cmluZ0luZm9EYXRhIGFycmF5c2VwYnVmOworCQkJ U3RyaW5nSW5mbwlhcHBlbmRUbzsKKworCQkJaW5pdFN0cmluZ0luZm8oJnBhcmJ1Zik7CisJCQlh cHBlbmRUbyA9ICZwYXJidWY7CisKKwkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0 cik7CisJCQlmb3IgKDsgY3AgPCBlbmRfcHRyOykKKwkJCXsKKwkJCQlpZiAoKmNwID09ICc6JykK KwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZvdW5kIGFycmF5IHNlcGFyYXRvciBkZWxpbWl0ZXI7 IGVsZW1lbnQgbmFtZSBpcyBub3cKKwkJCQkJICogY29tcGxldGUsIHN0YXJ0IGZpbGxpbmcgdGhl IHNlcGFyYXRvci4KKwkJCQkJICovCisJCQkJCWluaXRTdHJpbmdJbmZvKCZhcnJheXNlcGJ1Zik7 CisJCQkJCWFwcGVuZFRvID0gJmFycmF5c2VwYnVmOworCQkJCQlpc19hcnJheSA9IHRydWU7CisJ CQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQkJCWNvbnRpbnVlOwor CQkJCX0KKworCQkJCWlmICgqY3AgPT0gJ30nKQorCQkJCXsKKwkJCQkJQURWQU5DRV9QQVJTRV9Q T0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWFwcGVuZFN0cmlu Z0luZm9DaGFyTWFjcm8oYXBwZW5kVG8sICpjcCk7CisJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVS KGNwLCBlbmRfcHRyKTsKKwkJCX0KKwkJCXBhcmFtID0gcGFyYnVmLmRhdGE7CisJCQlpZiAoaXNf YXJyYXkpCisJCQkJYXJyYXlzZXAgPSBhcnJheXNlcGJ1Zi5kYXRhOworCQl9CisJCWlmIChwYXJh bSA9PSBOVUxMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygibWlzc2luZyBjb252ZXJzaW9uIG5h bWUgaW4gY29udmVyc2lvbiBzcGVjaWZpZXIiKSkpOworCisJCXN3aXRjaCAoKmNwKQorCQl7CisJ CQljYXNlICdJJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjSWRlbnRpZmllcjsKKwkJCQlicmVhazsK KwkJCWNhc2UgJ0QnOgorCQkJCXNwZWNpZmllciA9IFNwZWNEb3R0ZWROYW1lOworCQkJCWJyZWFr OworCQkJY2FzZSAncyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1N0cmluZzsKKwkJCQlicmVhazsK KwkJCWNhc2UgJ0wnOgorCQkJCXNwZWNpZmllciA9IFNwZWNTdHJpbmdMaXRlcmFsOworCQkJCWJy ZWFrOworCQkJY2FzZSAnVCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1R5cGVuYW1lOworCQkJCWJy ZWFrOworCQkJY2FzZSAnTyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY09wZXJhdG9ybmFtZTsKKwkJ CQlicmVhazsKKwkJCWNhc2UgJ24nOgorCQkJCXNwZWNpZmllciA9IFNwZWNOdW1iZXI7CisJCQkJ YnJlYWs7CisJCQljYXNlICdSJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjUm9sZTsKKwkJCQlicmVh azsKKwkJCWRlZmF1bHQ6CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBjb252 ZXJzaW9uIHNwZWNpZmllciBcIiVjXCIiLCAqY3ApKSk7CisJCX0KKworCQkvKgorCQkgKiBPYnRh aW4gdGhlIGVsZW1lbnQgdG8gYmUgZXhwYW5kZWQuCisJCSAqLworCQlrZXkudHlwZSA9IGpidlN0 cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcudmFsID0gcGFyYW07CisJCWtleS52YWwuc3RyaW5nLmxl biA9IHN0cmxlbihwYXJhbSk7CisKKwkJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWlu ZXIoY29udGFpbmVyLCBKQl9GT0JKRUNULCAma2V5KTsKKworCQkvKgorCQkgKiBFeHBhbmQgdGhl IGRhdGEgKHBvc3NpYmx5IGFuIGFycmF5KSBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mby4KKwkJ ICovCisJCWlmIChpc19hcnJheSkKKwkJCWV4cGFuZF9qc29uYl9hcnJheShidWYsIHBhcmFtLCB2 YWx1ZSwgYXJyYXlzZXAsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwkJZWxzZQorCQkJZXhwYW5k X29uZV9qc29uYl9lbGVtZW50KGJ1ZiwgcGFyYW0sIHZhbHVlLCBzcGVjaWZpZXIsIHN0YXJ0X3B0 cik7CisJfQorfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHF1b3RlZCBpZGVu dGlmaWVyLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuCisgKi8KK3N0YXRpYyB2 b2lkCitleHBhbmRfanNvbnZhbF9pZGVudGlmaWVyKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVl ICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKworCUFzc2VydChqc29udmFsLT50eXBlID09 IGpidlN0cmluZyk7CisKKwlzdHIgPSBwbnN0cmR1cChqc29udmFsLT52YWwuc3RyaW5nLnZhbCwg anNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBx dW90ZV9pZGVudGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQg YSBqc29uIHZhbHVlIGFzIGEgZG90LXNlcGFyYXRlZC1uYW1lLiAgVGhlIHZhbHVlIG11c3QgYmUg b2YgdHlwZQorICogb2JqZWN0IGFuZCBtYXkgY29udGFpbiBlbGVtZW50cyAic2NoZW1hbmFtZSIg KG9wdGlvbmFsKSwgIm9iam5hbWUiCisgKiAobWFuZGF0b3J5KSwgImF0dHJuYW1lIiAob3B0aW9u YWwpLiAgRG91YmxlIHF1b3RlcyBhcmUgYWRkZWQgdG8gZWFjaCBlbGVtZW50CisgKiBhcyBuZWNl c3NhcnksIGFuZCBkb3Qgc2VwYXJhdG9ycyB3aGVyZSBuZWVkZWQuCisgKgorICogT25lIGRheSB3 ZSBtaWdodCBuZWVkIGEgImNhdGFsb2ciIGVsZW1lbnQgYXMgd2VsbCwgYnV0IG5vIGN1cnJlbnQg dXNlIGNhc2UKKyAqIG5lZWRzIHRoYXQuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZh bF9kb3R0ZWRuYW1lKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNo YXIJICAgKnN0cjsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252 YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwp OworCWlmIChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiIsIHF1b3RlX2lk ZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorCisJc3RyID0gZmluZF9zdHJpbmdf aW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJv YmpuYW1lIiwgZmFsc2UsIE5VTEwpOworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCBxdW90 ZV9pZGVudGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19p bl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJImF0 dHJuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8o YnVmLCAiLiVzIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9Cit9 CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgdHlwZSBuYW1lLgorICovCitzdGF0 aWMgdm9pZAorZXhwYW5kX2pzb252YWxfdHlwZW5hbWUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFs dWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc2NoZW1hID0gTlVMTDsKKwljaGFyCSAgICp0eXBl bmFtZTsKKwljaGFyCSAgICp0eXBtb2RzdHI7CisJanNvbl90cml2YWx1ZQlpc19hcnJheTsKKwlj aGFyCSAgICphcnJheV9kZWNvcjsKKworCS8qCisJICogV2Ugb21pdCBzY2hlbWEtcXVhbGlmeWlu ZyB0aGUgb3V0cHV0IG5hbWUgaWYgdGhlIHNjaGVtYSBlbGVtZW50IGlzCisJICogZWl0aGVyIHRo ZSBlbXB0eSBzdHJpbmcgb3IgTlVMTDsgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28g Y2FzZXMKKwkgKiBpcyB0aGF0IGluIHRoZSBsYXR0ZXIgd2UgcXVvdGUgdGhlIHR5cGUgbmFtZSwg aW4gdGhlIGZvcm1lciB3ZSBkb24ndC4KKwkgKiBUaGlzIGFsbG93cyBmb3IgdHlwZXMgd2l0aCBz cGVjaWFsIHR5cG1vZCBuZWVkcywgc3VjaCBhcyBpbnRlcnZhbCBhbmQKKwkgKiB0aW1lc3RhbXAg KHNlZSBmb3JtYXRfdHlwZV9kZXRhaWxlZCksIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgYWxsb3dp bmcKKwkgKiBmb3IgdGhlIHNjaGVtYSBuYW1lIHRvIGJlIG9taXR0ZWQgZnJvbSB0eXBlIG5hbWVz IHRoYXQgcmVxdWlyZSBxdW90ZXMKKwkgKiBidXQgYXJlIHRvIGJlIG9idGFpbmVkIGZyb20gYSB1 c2VyIHNjaGVtYS4KKwkgKi8KKworCXNjaGVtYSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFp bmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAic2NoZW1hbmFtZSIs IHRydWUsIE5VTEwpOworCXR5cGVuYW1lID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIo anNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgInR5cGVuYW1lIiwgZmFsc2Us IE5VTEwpOworCXR5cG1vZHN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252 YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAidHlwbW9kIiwgdHJ1ZSwgTlVMTCk7 CisJaXNfYXJyYXkgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJp bmFyeS5kYXRhLAorCQkJCQkJCQkJCSAgICJ0eXBhcnJheSIpOworCXN3aXRjaCAoaXNfYXJyYXkp CisJeworCQljYXNlIHR2X3RydWU6CisJCQlhcnJheV9kZWNvciA9ICJbXSI7CisJCQlicmVhazsK KworCQljYXNlIHR2X2ZhbHNlOgorCQkJYXJyYXlfZGVjb3IgPSAiIjsKKwkJCWJyZWFrOworCisJ CWNhc2UgdHZfYWJzZW50OgorCQlkZWZhdWx0OgorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIm1p c3NpbmcgdHlwYXJyYXkgZWxlbWVudCIpKSk7CisJfQorCisJaWYgKHNjaGVtYSA9PSBOVUxMKQor CQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRlbnRpZmllcih0eXBlbmFtZSkp OworCWVsc2UgaWYgKHNjaGVtYVswXSA9PSAnXDAnKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1Ziwg IiVzIiwgdHlwZW5hbWUpOyAvKiBTcGVjaWFsIHR5cG1vZCBuZWVkcyAqLworCWVsc2UKKwkJYXBw ZW5kU3RyaW5nSW5mbyhidWYsICIlcy4lcyIsIHF1b3RlX2lkZW50aWZpZXIoc2NoZW1hKSwKKwkJ CQkJCSBxdW90ZV9pZGVudGlmaWVyKHR5cGVuYW1lKSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1 ZiwgIiVzJXMiLCB0eXBtb2RzdHIgPyB0eXBtb2RzdHIgOiAiIiwgYXJyYXlfZGVjb3IpOworfQor CisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhbiBvcGVyYXRvciBuYW1lCisgKi8KK3N0 YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9vcGVyYXRvcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJW YWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19p bl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJInNj aGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwkvKiBTY2hlbWEgbWlnaHQgYmUgTlVMTCBvciBlbXB0 eSAqLworCWlmIChzdHIgIT0gTlVMTCAmJiBzdHJbMF0gIT0gJ1wwJykKKwl7CisJCWFwcGVuZFN0 cmluZ0luZm8oYnVmLCAiJXMuIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3Ry KTsKKwl9CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52 YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJIm9iam5hbWUiLCBmYWxzZSwgTlVMTCk7CisKKwlp ZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHN0cik7CisJCXBmcmVl KHN0cik7CisJfQorfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHN0cmluZy4g IFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG9mCisgKiB0eXBlIG9iamVjdC4g IEluIHRoZSBsYXR0ZXIgY2FzZSBpdCBtdXN0IGNvbnRhaW4gYSAiZm10IiBlbGVtZW50IHdoaWNo IHdpbGwKKyAqIGJlIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkOyBhbHNvLCBpZiB0aGUgb2JqZWN0IGNv bnRhaW5zIGFuIGVsZW1lbnQgInByZXNlbnQiCisgKiBhbmQgaXQgaXMgc2V0IHRvIGZhbHNlLCB0 aGUgZXhwYW5zaW9uIGlzIHRoZSBlbXB0eSBzdHJpbmcuCisgKgorICogUmV0dXJucyBmYWxzZSBp ZiBubyBhY3R1YWwgZXhwYW5zaW9uIHdhcyBtYWRlIGR1ZSB0byB0aGUgInByZXNlbnQiIGZsYWcK KyAqIGJlaW5nIHNldCB0byAiZmFsc2UiLgorICovCitzdGF0aWMgYm9vbAorZXhwYW5kX2pzb252 YWxfc3RyaW5nKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWlmIChq c29udmFsLT50eXBlID09IGpidlN0cmluZykKKwl7CisJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8o YnVmLCBqc29udmFsLT52YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkgICBqc29udmFsLT52YWwuc3Ry aW5nLmxlbik7CisJfQorCWVsc2UgaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2QmluYXJ5KQorCXsK KwkJanNvbl90cml2YWx1ZQlwcmVzZW50OworCisJCXByZXNlbnQgPSBmaW5kX2Jvb2xfaW5fanNv bmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgICJwcmVz ZW50Iik7CisJCS8qCisJCSAqIElmICJwcmVzZW50IiBpcyBzZXQgdG8gZmFsc2UsIHRoaXMgZWxl bWVudCBleHBhbmRzIHRvIGVtcHR5OworCQkgKiBvdGhlcndpc2UgKGVpdGhlciB0cnVlIG9yIGFi c2VudCksIGZhbGwgdGhyb3VnaCB0byBleHBhbmQgImZtdCIuCisJCSAqLworCQlpZiAocHJlc2Vu dCA9PSB0dl9mYWxzZSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlleHBhbmRfZm10X3JlY3Vyc2l2 ZShqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsIGJ1Zik7CisJfQorCWVsc2UKKwkJcmV0dXJuIGZh bHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFz IGEgc3RyaW5nIGxpdGVyYWwuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9zdHJs aXQoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhciAgICpzdHI7 CisJU3RyaW5nSW5mb0RhdGEgZHFkZWxpbTsKKwlzdGF0aWMgY29uc3QgY2hhciBkcXN1ZmZpeGVz W10gPSAiX1hZWlpZWF8iOworCWludCAgICAgICAgIGRxbmV4dGNoYXIgPSAwOworCisJc3RyID0g cG5zdHJkdXAoanNvbnZhbC0+dmFsLnN0cmluZy52YWwsIGpzb252YWwtPnZhbC5zdHJpbmcubGVu KTsKKworCS8qIEVhc3kgY2FzZTogaWYgdGhlcmUgYXJlIG5vICcgYW5kIG5vIFwsIGp1c3QgdXNl IGEgc2luZ2xlIHF1b3RlICovCisJaWYgKHN0cmNocihzdHIsICdcJycpID09IE5VTEwgJiYKKwkJ c3RyY2hyKHN0ciwgJ1xcJykgPT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAi JyVzJyIsIHN0cik7CisJCXBmcmVlKHN0cik7CisJCXJldHVybjsKKwl9CisKKwkvKiBPdGhlcndp c2UgbmVlZCB0byBmaW5kIGEgdXNlZnVsIGRvbGxhci1xdW90ZSBkZWxpbWl0ZXIgKi8KKwlpbml0 U3RyaW5nSW5mbygmZHFkZWxpbSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZHFkZWxpbSwg IiQiKTsKKwl3aGlsZSAoc3Ryc3RyKHN0ciwgZHFkZWxpbS5kYXRhKSAhPSBOVUxMKQorCXsKKwkJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRxZGVsaW0sIGRxc3VmZml4ZXNbZHFuZXh0Y2hhcisrXSk7 CisJCWRxbmV4dGNoYXIgPSBkcW5leHRjaGFyICUgKHNpemVvZihkcXN1ZmZpeGVzKSAtIDEpOwor CX0KKwkvKiBBZGQgdHJhaWxpbmcgJCAqLworCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkcWRlbGlt LCAnJCcpOworCisJLyogQW5kIGZpbmFsbHkgcHJvZHVjZSB0aGUgcXVvdGVkIGxpdGVyYWwgaW50 byB0aGUgb3V0cHV0IFN0cmluZ0luZm8gKi8KKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJXMl cyIsIGRxZGVsaW0uZGF0YSwgc3RyLCBkcWRlbGltLmRhdGEpOworCXBmcmVlKGRxZGVsaW0uZGF0 YSk7CisJcGZyZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYW4g aW50ZWdlciBxdWFudGl0eS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX251bWJl cihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyICpzdHJkYXR1 bTsKKworCXN0cmRhdHVtID0gRGF0dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDEobnVt ZXJpY19vdXQsCisJCQkJCQkJCQkJCQkgICBOdW1lcmljR2V0RGF0dW0oanNvbnZhbC0+dmFsLm51 bWVyaWMpKSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHN0cmRhdHVtKTsKK30KKwor LyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSByb2xlIG5hbWUuICBJZiB0aGUgaXNfcHVi bGljIGVsZW1lbnQgaXMgc2V0IHRvCisgKiB0cnVlLCBQVUJMSUMgaXMgZXhwYW5kZWQgKG5vIHF1 b3Rlcyk7IG90aGVyd2lzZSwgZXhwYW5kIHRoZSBnaXZlbiByb2xlIG5hbWUsCisgKiBxdW90aW5n IGFzIGFuIGlkZW50aWZpZXIuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9yb2xl KFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWpzb25fdHJpdmFsdWUJ aXNfcHVibGljOworCisJaXNfcHVibGljID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpz b252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJImlzX3B1YmxpYyIpOworCWlmIChp c19wdWJsaWMgPT0gdHZfdHJ1ZSkKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJQVUJM SUMiKTsKKwllbHNlCisJeworCQljaGFyICpyb2xlbmFtZTsKKworCQlyb2xlbmFtZSA9IGZpbmRf c3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJ CQkJCQkJCSAicm9sZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJCWlmIChyb2xlbmFtZSkKKwkJewor CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZpZXIocm9sZW5hbWUp KTsKKwkJCXBmcmVlKHJvbGVuYW1lKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEV4cGFuZCBvbmUg anNvbiBlbGVtZW50IGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvIGFjY29yZGluZyB0byB0aGUK KyAqIGNvbnZlcnNpb24gc3BlY2lmaWVyLiAgVGhlIGVsZW1lbnQgdHlwZSBpcyB2YWxpZGF0ZWQs IGFuZCBhbiBlcnJvciBpcyByYWlzZWQKKyAqIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggd2hhdCB3ZSBl eHBlY3QgZm9yIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllci4KKyAqCisgKiBSZXR1cm5zIGZhbHNl IGlmIG5vIGFjdHVhbCBleHBhbnNpb24gd2FzIG1hZGUgKGR1ZSB0byB0aGUgInByZXNlbnQiIGZs YWcKKyAqIGJlaW5nIHNldCB0byAiZmFsc2UiIGluIGZvcm1hdHRlZCBzdHJpbmcgZXhwYW5zaW9u KS4KKyAqLworc3RhdGljIGJvb2wKK2V4cGFuZF9vbmVfanNvbmJfZWxlbWVudChTdHJpbmdJbmZv IGJ1ZiwgY2hhciAqcGFyYW0sIEpzb25iVmFsdWUgKmpzb252YWwsCisJCQkJCQkgY29udlNwZWNp ZmllciBzcGVjaWZpZXIsIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlib29sIHJlc3VsdCA9IHRydWU7 CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgc3FsZXJyY29udGV4dDsKKworCS8qIElmIHdlIHdlcmUg Z2l2ZW4gYSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxsYmFj ayAqLworCWlmIChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vy cm9yX2NhbGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJc3Fs ZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2NvbnRl eHRfc3RhY2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAoIWpzb252YWwpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgbm90IGZvdW5kIiwgcGFyYW0pKSk7CisKKwlz d2l0Y2ggKHNwZWNpZmllcikKKwl7CisJCWNhc2UgU3BlY0lkZW50aWZpZXI6CisJCQlpZiAoanNv bnZhbC0+dHlwZSAhPSBqYnZTdHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhw ZWN0ZWQgSlNPTiBzdHJpbmcgZm9yICUlSSBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJ CQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9pZGVudGlmaWVy KGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNEb3R0ZWROYW1lOgorCQkJ aWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJt c2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJUQgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIs CisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfZG90 dGVkbmFtZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nOgor CQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nICYmCisJCQkJanNvbnZhbC0+dHlwZSAh PSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBz dHJpbmcgb3Igb2JqZWN0IGZvciAlJXMgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJ CXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJcmVzdWx0ID0gZXhwYW5kX2pzb252YWxfc3Ry aW5nKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNTdHJpbmdMaXRlcmFs OgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJ CSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUwgZWxlbWVudCBcIiVzXCIsIGdv dCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252 YWxfc3RybGl0KGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNUeXBlbmFt ZToKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ CQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG9iamVjdCBmb3IgJSVUIGVsZW1lbnQgXCIlc1wiLCBn b3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29u dmFsX3R5cGVuYW1lKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNPcGVy YXRvcm5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUlTyBlbGVtZW50IFwi JXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBh bmRfanNvbnZhbF9vcGVyYXRvcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBT cGVjTnVtYmVyOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG51bWVyaWMgZm9yICUlbiBlbGVtZW50 IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQll eHBhbmRfanNvbnZhbF9udW1iZXIoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug U3BlY1JvbGU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUlUiBlbGVtZW50IFwi JXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBh bmRfanNvbnZhbF9yb2xlKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKwl9CisKKwlpZiAoZm10 KQorCQllcnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsKKworCXJl dHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBJdGVyYXRlIG9uIHRoZSBlbGVtZW50cyBvZiBhIEpT T04gYXJyYXksIGV4cGFuZGluZyBlYWNoIG9uZSBpbnRvIHRoZSBvdXRwdXQKKyAqIFN0cmluZ0lu Zm8gcGVyIHRoZSBnaXZlbiBjb252ZXJzaW9uIHNwZWNpZmllciwgc2VwYXJhdGVkIGJ5IHRoZSBn aXZlbgorICogc2VwYXJhdG9yLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb25iX2FycmF5 KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkgICBKc29uYlZhbHVlICpqc29uYXJy LCBjaGFyICphcnJheXNlcCwgY29udlNwZWNpZmllciBzcGVjaWZpZXIsCisJCQkJICAgY29uc3Qg Y2hhciAqZm10KQoreworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisJSnNv bmJDb250YWluZXIgKmNvbnRhaW5lcjsKKwlKc29uYkl0ZXJhdG9yICAqaXQ7CisJSnNvbmJWYWx1 ZQl2OworCWludAkJCXR5cGU7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCVN0cmluZ0luZm9EYXRh IGFycmF5ZWxlbTsKKworCS8qIElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3JtYXQgc3RyaW5nLCBzZXR1 cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxsYmFjayAqLworCWlmIChmbXQpCisJeworCQlzcWxl cnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vycm9yX2NhbGxiYWNrOworCQlzcWxlcnJjb250 ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJc3FsZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9y X2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmc3FsZXJyY29udGV4dDsK Kwl9CisKKwlpZiAoanNvbmFyci0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVy cm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IGEgSlNPTiBhcnJheSIsIHBhcmFtKSkpOworCisJ Y29udGFpbmVyID0ganNvbmFyci0+dmFsLmJpbmFyeS5kYXRhOworCWlmICghSnNvbkNvbnRhaW5l cklzQXJyYXkoY29udGFpbmVyKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNc IiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwlpbml0U3RyaW5nSW5mbygmYXJy YXllbGVtKTsKKworCWl0ID0gSnNvbmJJdGVyYXRvckluaXQoY29udGFpbmVyKTsKKwl3aGlsZSAo KHR5cGUgPSBKc29uYkl0ZXJhdG9yTmV4dCgmaXQsICZ2LCB0cnVlKSkgIT0gV0pCX0RPTkUpCisJ eworCQlpZiAodHlwZSA9PSBXSkJfRUxFTSkKKwkJeworCQkJcmVzZXRTdHJpbmdJbmZvKCZhcnJh eWVsZW0pOworCisJCQlpZiAoZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KCZhcnJheWVsZW0sIHBh cmFtLCAmdiwgc3BlY2lmaWVyLCBOVUxMKSkKKwkJCXsKKwkJCQlpZiAoIWZpcnN0KQorCQkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgYXJyYXlzZXApOworCisJCQkJYXBwZW5kQmluYXJ5 U3RyaW5nSW5mbyhidWYsIGFycmF5ZWxlbS5kYXRhLCBhcnJheWVsZW0ubGVuKTsKKwkJCQlmaXJz dCA9IGZhbHNlOworCQkJfQorCQl9CisJfQorCisJaWYgKGZtdCkKKwkJZXJyb3JfY29udGV4dF9z dGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7Cit9CisKKy8qCisgKiBXb3JraG9yc2UgZm9y IGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kLgorICovCitjaGFyICoKK2RkbF9kZXBhcnNlX2pz b25fdG9fc3RyaW5nKGNoYXIgKmpzb25fc3RyKQoreworCURhdHVtCQlkOworCUpzb25iCSAgICpq c29uYjsKKwlTdHJpbmdJbmZvIGJ1ZiA9IChTdHJpbmdJbmZvKSBwYWxsb2MwKHNpemVvZihTdHJp bmdJbmZvRGF0YSkpOworCisJaW5pdFN0cmluZ0luZm8oYnVmKTsKKworCWQgPSBEaXJlY3RGdW5j dGlvbkNhbGwxKGpzb25iX2luLCBQb2ludGVyR2V0RGF0dW0oanNvbl9zdHIpKTsKKwlqc29uYiA9 IChKc29uYiAqKSBEYXR1bUdldFBvaW50ZXIoZCk7CisKKwlleHBhbmRfZm10X3JlY3Vyc2l2ZSgm anNvbmItPnJvb3QsIGJ1Zik7CisKKwlyZXR1cm4gYnVmLT5kYXRhOworfQorCisvKi0tLS0tLQor ICogUmV0dXJucyBhIGZvcm1hdHRlZCBzdHJpbmcgZnJvbSBhIEpTT04gb2JqZWN0LgorICoKKyAq IFRoZSBzdGFydGluZyBwb2ludCBpcyB0aGUgZWxlbWVudCBuYW1lZCAiZm10IiAod2hpY2ggbXVz dCBiZSBhIHN0cmluZykuCisgKiBUaGlzIGZvcm1hdCBzdHJpbmcgbWF5IGNvbnRhaW4gemVybyBv ciBtb3JlICUtZXNjYXBlcywgd2hpY2ggY29uc2lzdCBvZiBhbgorICogZWxlbWVudCBuYW1lIGVu Y2xvc2VkIGluIHsgfSwgcG9zc2libHkgZm9sbG93ZWQgYnkgYSBjb252ZXJzaW9uIG1vZGlmaWVy LAorICogZm9sbG93ZWQgYnkgYSBjb252ZXJzaW9uIHNwZWNpZmllci4gIFBvc3NpYmxlIGNvbnZl cnNpb24gc3BlY2lmaWVycyBhcmU6CisgKgorICogJQkJZXhwYW5kIHRvIGEgbGl0ZXJhbCAlLgor ICogSQkJZXhwYW5kIGFzIGEgc2luZ2xlLCBub24tcXVhbGlmaWVkIGlkZW50aWZpZXIKKyAqIEQJ CWV4cGFuZCBhcyBhIHBvc3NpYmx5LXF1YWxpZmllZCBpZGVudGlmaWVyCisgKiBUCQlleHBhbmQg YXMgYSB0eXBlIG5hbWUKKyAqIE8JCWV4cGFuZCBhcyBhbiBvcGVyYXRvciBuYW1lCisgKiBMCQll eHBhbmQgYXMgYSBzdHJpbmcgbGl0ZXJhbCAocXVvdGUgdXNpbmcgc2luZ2xlIHF1b3RlcykKKyAq IHMJCWV4cGFuZCBhcyBhIHNpbXBsZSBzdHJpbmcgKG5vIHF1b3RpbmcpCisgKiBuCQlleHBhbmQg YXMgYSBzaW1wbGUgbnVtYmVyIChubyBxdW90aW5nKQorICogUgkJZXhwYW5kIGFzIGEgcm9sZSBu YW1lIChwb3NzaWJseSBxdW90ZWQgbmFtZSwgb3IgUFVCTElDKQorICoKKyAqIFRoZSBlbGVtZW50 IG5hbWUgbWF5IGhhdmUgYW4gb3B0aW9uYWwgc2VwYXJhdG9yIHNwZWNpZmljYXRpb24gcHJlY2Vk ZWQKKyAqIGJ5IGEgY29sb24uICBJdHMgcHJlc2VuY2UgaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1l bnQgaXMgZXhwZWN0ZWQgdG8gYmUKKyAqIGFuIGFycmF5OyB0aGUgc3BlY2lmaWVkIHNlcGFyYXRv ciBpcyB1c2VkIHRvIGpvaW4gdGhlIGFycmF5IGVsZW1lbnRzLgorICotLS0tLS0KKyAqLworRGF0 dW0KK2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJdGV4 dAkgICAqanNvbiA9IFBHX0dFVEFSR19URVhUX1AoMCk7CisJY2hhcgkgICAqanNvbl9zdHI7CisK Kwlqc29uX3N0ciA9IHRleHRfdG9fY3N0cmluZyhqc29uKTsKKworCVBHX1JFVFVSTl9URVhUX1Ao Y3N0cmluZ190b190ZXh0KGRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGpzb25fc3RyKSkpOwor fQorCisvKgorICogRXJyb3IgY29udGV4dCBjYWxsYmFjayBmb3IgSlNPTiBmb3JtYXQgc3RyaW5n IGV4cGFuc2lvbi4KKyAqCisgKiBYWFg6IGluZGljYXRlIHdoaWNoIGVsZW1lbnQgd2UncmUgZXhw YW5kaW5nLCBpZiBhcHBsaWNhYmxlLgorICovCitzdGF0aWMgdm9pZAorZm10c3RyX2Vycm9yX2Nh bGxiYWNrKHZvaWQgKmFyZykKK3sKKwllcnJjb250ZXh0KCJ3aGlsZSBleHBhbmRpbmcgZm9ybWF0 IHN0cmluZyBcIiVzXCIiLCAoY2hhciAqKSBhcmcpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWls ZAppbmRleCA5YjM1MGQwLi5jMWUxYTJjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZApAQCAt MTUsNiArMTUsOCBAQCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdjb3B5dG8uYycsCiAg ICdjcmVhdGVhcy5jJywKICAgJ2RiY29tbWFuZHMuYycsCisgICdkZGxfZGVwYXJzZS5jJywKKyAg J2RkbF9qc29uLmMnLAogICAnZGVmaW5lLmMnLAogICAnZGlzY2FyZC5jJywKICAgJ2Ryb3BjbWRz LmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKaW5kZXggOTljOWY5MS4uNDIwNWRkYSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9zZXF1ZW5jZS5jCkBAIC0xNzA4LDYgKzE3MDgsMzkgQEAgcHJvY2Vzc19vd25lZF9i eShSZWxhdGlvbiBzZXFyZWwsIExpc3QgKm93bmVkX2J5LCBib29sIGZvcl9pZGVudGl0eSkKIAkJ cmVsYXRpb25fY2xvc2UodGFibGVyZWwsIE5vTG9jayk7CiB9CiAKKy8qCisgKiBSZXR1cm4gc2Vx dWVuY2UgcGFyYW1ldGVycywgZGV0YWlsZWQKKyAqLworRm9ybV9wZ19zZXF1ZW5jZV9kYXRhCitn ZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5jZUlkKQoreworCUJ1ZmZlciAgICAgIGJ1ZjsK KwlTZXFUYWJsZSAgICBlbG07CisJUmVsYXRpb24gICAgc2VxcmVsOworCUhlYXBUdXBsZURhdGEg c2VxdHVwbGU7CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcTsKKwlGb3JtX3BnX3NlcXVlbmNl X2RhdGEgcmV0U2VxOworCisJLyogT3BlbiBhbmQgQWNjZXNzU2hhcmVMb2NrIHNlcXVlbmNlICov CisJaW5pdF9zZXF1ZW5jZShzZXF1ZW5jZUlkLCAmZWxtLCAmc2VxcmVsKTsKKworCWlmIChwZ19j bGFzc19hY2xjaGVjayhzZXF1ZW5jZUlkLCBHZXRVc2VySWQoKSwKKwkJCUFDTF9TRUxFQ1QgfCBB Q0xfVVBEQVRFIHwgQUNMX1VTQUdFKSAhPSBBQ0xDSEVDS19PSykKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdFKSwKKwkJCQkJIGVy cm1zZygicGVybWlzc2lvbiBkZW5pZWQgZm9yIHNlcXVlbmNlICVzIiwKKwkJCQkJCQlSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShzZXFyZWwpKSkpOworCisJc2VxID0gcmVhZF9zZXFfdHVwbGUoc2Vx cmVsLCAmYnVmLCAmc2VxdHVwbGUpOworCXJldFNlcSA9IHBhbGxvYyhzaXplb2YoRm9ybURhdGFf cGdfc2VxdWVuY2VfZGF0YSkpOworCisJbWVtY3B5KHJldFNlcSwgc2VxLCBzaXplb2YoRm9ybURh dGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCXJl bGF0aW9uX2Nsb3NlKHNlcXJlbCwgTm9Mb2NrKTsKKworCXJldHVybiByZXRTZXE7Cit9CiAKIC8q CiAgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycyBpbiBhIGxpc3Qgb2YgdGhlIGZvcm0gY3Jl YXRlZCBieSB0aGUgcGFyc2VyLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5 LmMgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCAyNDdkMDgxLi5iZWEzNWE2IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9zcmMvYmFja2VuZC90 Y29wL3V0aWxpdHkuYwpAQCAtMTQ0Niw3ICsxNDQ2LDggQEAgUHJvY2Vzc1V0aWxpdHlTbG93KFBh cnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQlhZGRyZXNzID0gRGVmaW5lQ29sbGF0aW9uKHBzdGF0 ZSwKIAkJCQkJCQkJCQkJCQkgIHN0bXQtPmRlZm5hbWVzLAogCQkJCQkJCQkJCQkJCSAgc3RtdC0+ ZGVmaW5pdGlvbiwKLQkJCQkJCQkJCQkJCQkgIHN0bXQtPmlmX25vdF9leGlzdHMpOworCQkJCQkJ CQkJCQkJCSAgc3RtdC0+aWZfbm90X2V4aXN0cywKKwkJCQkJCQkJCQkJCQkgICZzZWNvbmRhcnlP YmplY3QpOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJZGVmYXVsdDoKIAkJCQkJCQllbG9nKEVSUk9S LCAidW5yZWNvZ25pemVkIGRlZmluZSBzdG10IHR5cGU6ICVkIiwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zv cm1hdF90eXBlLmMKaW5kZXggMjkxOGZkYi4uZjY0YTcyMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zv cm1hdF90eXBlLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJ1dGlscy9udW1lcmljLmgi CiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAotc3RhdGljIGNoYXIgKnByaW50VHlwbW9k KGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCk7CiAKIAog LyoKQEAgLTM2Myw3ICszNjIsNyBAQCBmb3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoT2lkIHR5cGVf b2lkLCBpbnQzMiB0eXBlbW9kKQogLyoKICAqIEFkZCB0eXBtb2QgZGVjb3JhdGlvbiB0byB0aGUg YmFzaWMgdHlwZSBuYW1lCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogcHJpbnRUeXBtb2Qo Y29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KQogewogCWNo YXIJICAgKnJlczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCmluZGV4IDZkNGMxYzIuLjZiMjM2ZTUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYwpAQCAtNDQsNiArNDQsOCBAQAogc3RhdGljIHZvaWQg cGFyc2VOYW1lQW5kQXJnVHlwZXMoY29uc3QgY2hhciAqc3RyaW5nLCBib29sIGFsbG93Tm9uZSwK IAkJCQkJCQkJIExpc3QgKipuYW1lcywgaW50ICpuYXJncywgT2lkICphcmd0eXBlcyk7CiAKK3N0 YXRpYyB2b2lkIGZvcm1hdF9wcm9jZWR1cmVfYXJnc19pbnRlcm5hbChGb3JtX3BnX3Byb2MgcHJv Y2Zvcm0sCisJCQkJCQkJCQkJICAgU3RyaW5nSW5mbyBidWYsIGJvb2wgZm9yY2VfcXVhbGlmeSk7 CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgogICoJIFVTRVIgSS9PIFJPVVRJTkVTCQkJCQkJCQkJ CQkJCQkgKgpAQCAtMzMyLDYgKzMzNCwyOSBAQCBmb3JtYXRfcHJvY2VkdXJlX3F1YWxpZmllZChP aWQgcHJvY2VkdXJlX29pZCkKIH0KIAogLyoKKyAqIGZvcm1hdF9wcm9jZWR1cmVfYXJncyAgIC0g Y29udmVydHMgcHJvYyBPSUQgdG8gIihhcmdzKSIKKyAqLworY2hhciAqCitmb3JtYXRfcHJvY2Vk dXJlX2FyZ3MoT2lkIHByb2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSkKK3sKKwlTdHJp bmdJbmZvRGF0YSBidWY7CisJSGVhcFR1cGxlICAgcHJvY3R1cDsKKwlGb3JtX3BnX3Byb2MgcHJv Y2Zvcm07CisKKwlwcm9jdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0 RGF0dW0ocHJvY2VkdXJlX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jdHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHBy b2NlZHVyZV9vaWQpOworCXByb2Nmb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2N0 dXApOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2lu dGVybmFsKHByb2Nmb3JtLCAmYnVmLCBmb3JjZV9xdWFsaWZ5KTsKKworCVJlbGVhc2VTeXNDYWNo ZShwcm9jdHVwKTsKKworCXJldHVybiBidWYuZGF0YTsKK30KKworLyoKICAqIGZvcm1hdF9wcm9j ZWR1cmVfZXh0ZW5kZWQgLSBjb252ZXJ0cyBwcm9jZWR1cmUgT0lEIHRvICJwcm9fbmFtZShhcmdz KSIKICAqCiAgKiBUaGlzIGV4cG9ydHMgdGhlIHVzZWZ1bCBmdW5jdGlvbmFsaXR5IG9mIHJlZ3By b2NlZHVyZW91dCBmb3IgdXNlCkBAIC0yMDYwLDMgKzIwODUsMzAgQEAgcGFyc2VOYW1lQW5kQXJn VHlwZXMoY29uc3QgY2hhciAqc3RyaW5nLCBib29sIGFsbG93Tm9uZSwgTGlzdCAqKm5hbWVzLAog CiAJcGZyZWUocmF3bmFtZSk7CiB9CisKKy8qCisgKiBBcHBlbmQgdGhlIHBhcmVudGhpc2VkIGFy Z3VtZW50cyBvZiB0aGUgZ2l2ZW4gcGdfcHJvYyByb3cgaW50byB0aGUgb3V0cHV0CisgKiBidWZm ZXIuICBmb3JjZV9xdWFsaWZ5IGluZGljYXRlcyB3aGV0aGVyIHRvIHNjaGVtYS1xdWFsaWZ5IHR5 cGUgbmFtZXMKKyAqIHJlZ2FyZGxlc3Mgb2YgdmlzaWJpbGl0eS4KKyAqLworc3RhdGljIHZvaWQK K2Zvcm1hdF9wcm9jZWR1cmVfYXJnc19pbnRlcm5hbChGb3JtX3BnX3Byb2MgcHJvY2Zvcm0sIFN0 cmluZ0luZm8gYnVmLAorCQkJCQkJCSAgIGJvb2wgZm9yY2VfcXVhbGlmeSkKK3sKKwlpbnQJCQlp OworCWludAkJCW5hcmdzID0gcHJvY2Zvcm0tPnByb25hcmdzOworCisJYXBwZW5kU3RyaW5nSW5m b0NoYXIoYnVmLCAnKCcpOworCWZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsrKQorCXsKKwkJT2lk CQkJdGhpc2FyZ3R5cGUgPSBwcm9jZm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldOworCisJCWlm IChpID4gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywnKTsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsCisJCQkJCQkJICAgZm9yY2VfcXVhbGlmeSA/CisJCQkJCQkJICAg Zm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKHRoaXNhcmd0eXBlKSA6CisJCQkJCQkJICAgZm9ybWF0 X3R5cGVfYmUodGhpc2FyZ3R5cGUpKTsKKwl9CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAn KScpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IDg1NWQ0ODMuLjMwYjhkOTAg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTM1OCw3ICszNTgsNiBAQCBzdGF0aWMg aW50CXByaW50X2Z1bmN0aW9uX2FyZ3VtZW50cyhTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHBy b2N0dXAsCiAJCQkJCQkJCQkgYm9vbCBwcmludF90YWJsZV9hcmdzLCBib29sIHByaW50X2RlZmF1 bHRzKTsKIHN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3JldHR5cGUoU3RyaW5nSW5mbyBidWYs IEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3RyZnR5cGVz KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7Ci1zdGF0aWMgdm9pZCBwcmludF9m dW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiBzdGF0 aWMgdm9pZCBzZXRfcnRhYmxlX25hbWVzKGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBMaXN0ICpw YXJlbnRfbmFtZXNwYWNlcywKIAkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogc3RhdGlj IHZvaWQgc2V0X2RlcGFyc2VfZm9yX3F1ZXJ5KGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBRdWVy eSAqcXVlcnksCkBAIC00ODIsMjIgKzQ4MSwxNSBAQCBzdGF0aWMgdm9pZCBnZXRfZnJvbV9jbGF1 c2VfY29sZGVmbGlzdChSYW5nZVRibEZ1bmN0aW9uICpydGZ1bmMsCiAJCQkJCQkJCQkgICBkZXBh cnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQgZ2V0X3RhYmxlc2FtcGxlX2RlZihU YWJsZVNhbXBsZUNsYXVzZSAqdGFibGVzYW1wbGUsCiAJCQkJCQkJCWRlcGFyc2VfY29udGV4dCAq Y29udGV4dCk7Ci1zdGF0aWMgdm9pZCBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQg YWN0dWFsX2RhdGF0eXBlLAotCQkJCQkJCSBTdHJpbmdJbmZvIGJ1Zik7CiBzdGF0aWMgTm9kZSAq cHJvY2Vzc0luZGlyZWN0aW9uKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7 CiBzdGF0aWMgdm9pZCBwcmludFN1YnNjcmlwdHMoU3Vic2NyaXB0aW5nUmVmICpzYnNyZWYsIGRl cGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgY2hhciAqZ2V0X3JlbGF0aW9uX25hbWUo T2lkIHJlbGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9yZWxhdGlvbl9uYW1lKE9pZCByZWxp ZCwgTGlzdCAqbmFtZXNwYWNlcyk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcXVhbGlmaWVkX3Jl bGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKLXN0YXRpYyBjaGFyICpnZW5lcmF0ZV9mdW5jdGlvbl9u YW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywKLQkJCQkJCQkJCUxpc3QgKmFyZ25hbWVzLCBPaWQg KmFyZ3R5cGVzLAotCQkJCQkJCQkJYm9vbCBoYXNfdmFyaWFkaWMsIGJvb2wgKnVzZV92YXJpYWRp Y19wLAotCQkJCQkJCQkJUGFyc2VFeHByS2luZCBzcGVjaWFsX2V4cHJraW5kKTsKIHN0YXRpYyBj aGFyICpnZW5lcmF0ZV9vcGVyYXRvcl9uYW1lKE9pZCBvcGVyaWQsIE9pZCBhcmcxLCBPaWQgYXJn Mik7CiBzdGF0aWMgdm9pZCBhZGRfY2FzdF90byhTdHJpbmdJbmZvIGJ1ZiwgT2lkIHR5cGlkKTsK IHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfdHlwZV9uYW1lKE9pZCB0eXBpZCk7CiBz dGF0aWMgdGV4dCAqc3RyaW5nX3RvX3RleHQoY2hhciAqc3RyKTsKLXN0YXRpYyBjaGFyICpmbGF0 dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIHN0YXRpYyB2b2lkIGdldF9yZWxvcHRpb25zKFN0 cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKTsKIAogI2RlZmluZSBvbmx5X21hcmtlcihy dGUpICAoKHJ0ZSktPmluaCA/ICIiIDogIk9OTFkgIikKQEAgLTU0NSw2ICs1MzcsNzcgQEAgcGdf Z2V0X3J1bGVkZWZfZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJp bmdfdG9fdGV4dChyZXMpKTsKIH0KIAorLyoKKyAqIEdpdmVuIGEgcGFpciBvZiBEYXR1bSBjb3Jy ZXNwb25kaW5nIHRvIGEgcnVsZSdzIHBnX3Jld3JpdGUuZXZfcXVhbCBhbmQKKyAqIGV2X2FjdGlv biBjb2x1bW5zLCByZXR1cm4gdGhlaXIgdGV4dCByZXByZXNlbnRhdGlvbjsgZXZfcXVhbCBhcyBh IHNpbmdsZQorICogc3RyaW5nIGluIHdoZXJlQ2xhdXNlIGFuZCBldl9hY3Rpb24gYXMgYSBMaXN0 IG9mIHN0cmluZ3MgKHdoaWNoIG1pZ2h0IGJlCisgKiBOSUwsIHNpZ25hbGxpbmcgTk9USElORykg aW4gYWN0aW9ucy4KKyAqLwordm9pZAorcGdfZ2V0X3J1bGVkZWZfZGV0YWlsZWQoRGF0dW0gZXZf cXVhbCwgRGF0dW0gZXZfYWN0aW9uLAorCQkJCQkJY2hhciAqKndoZXJlQ2xhdXNlLCBMaXN0ICoq YWN0aW9ucykKK3sKKwlpbnQgcHJldHR5RmxhZ3MgPSAwOworCWNoYXIgKnF1YWxzdHIgPSBUZXh0 RGF0dW1HZXRDU3RyaW5nKGV2X3F1YWwpOworCWNoYXIgKmFjdGlvbnN0ciA9IFRleHREYXR1bUdl dENTdHJpbmcoZXZfYWN0aW9uKTsKKwlMaXN0ICphY3Rpb25Ob2RlTGlzdCA9IChMaXN0ICopIHN0 cmluZ1RvTm9kZShhY3Rpb25zdHIpOworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCWluaXRTdHJp bmdJbmZvKCZidWYpOworCWlmIChzdHJsZW4ocXVhbHN0cikgPiAwICYmIHN0cmNtcChxdWFsc3Ry LCAiPD4iKSAhPSAwKQorCXsKKwkJTm9kZQkgICAqcXVhbDsKKwkJUXVlcnkJICAgKnF1ZXJ5Owor CQlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsKKwkJZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKKwor CQlxdWFsID0gc3RyaW5nVG9Ob2RlKHF1YWxzdHIpOworCisJCXF1ZXJ5ID0gKFF1ZXJ5ICopIGxp bml0aWFsKGFjdGlvbk5vZGVMaXN0KTsKKwkJcXVlcnkgPSBnZXRJbnNlcnRTZWxlY3RRdWVyeShx dWVyeSwgTlVMTCk7CisKKwkJQWNxdWlyZVJld3JpdGVMb2NrcyhxdWVyeSwgZmFsc2UsIGZhbHNl KTsKKworCQljb250ZXh0LmJ1ZiA9ICZidWY7CisJCWNvbnRleHQubmFtZXNwYWNlcyA9IGxpc3Rf bWFrZTEoJmRwbnMpOworCQljb250ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsKKwkJY29udGV4dC53 aW5kb3dUTGlzdCA9IE5JTDsKKwkJY29udGV4dC52YXJwcmVmaXggPSAobGlzdF9sZW5ndGgocXVl cnktPnJ0YWJsZSkgIT0gMSk7CisJCWNvbnRleHQucHJldHR5RmxhZ3MgPSBwcmV0dHlGbGFnczsK KwkJY29udGV4dC53cmFwQ29sdW1uID0gV1JBUF9DT0xVTU5fREVGQVVMVDsKKwkJY29udGV4dC5p bmRlbnRMZXZlbCA9IFBSRVRUWUlOREVOVF9TVEQ7CisKKwkJc2V0X2RlcGFyc2VfZm9yX3F1ZXJ5 KCZkcG5zLCBxdWVyeSwgTklMKTsKKworCQlnZXRfcnVsZV9leHByKHF1YWwsICZjb250ZXh0LCBm YWxzZSk7CisKKwkJKndoZXJlQ2xhdXNlID0gcHN0cmR1cChidWYuZGF0YSk7CisJfQorCWVsc2UK KwkJKndoZXJlQ2xhdXNlID0gTlVMTDsKKworCWlmIChsaXN0X2xlbmd0aChhY3Rpb25Ob2RlTGlz dCkgPT0gMCkKKwkJKmFjdGlvbnMgPSBOSUw7CisJZWxzZQorCXsKKwkJTGlzdENlbGwgKmNlbGw7 CisJCUxpc3QJKm91dHB1dCA9IE5JTDsKKworCQlmb3JlYWNoKGNlbGwsIGFjdGlvbk5vZGVMaXN0 KQorCQl7CisJCQlRdWVyeQkqcXVlcnkgPSAoUXVlcnkgKikgbGZpcnN0KGNlbGwpOworCisJCQlp ZiAocXVlcnktPmNvbW1hbmRUeXBlID09IENNRF9OT1RISU5HKQorCQkJCWNvbnRpbnVlOworCisJ CQlyZXNldFN0cmluZ0luZm8oJmJ1Zik7CisJCQlnZXRfcXVlcnlfZGVmKHF1ZXJ5LCAmYnVmLCBO SUwsIE5VTEwsIHRydWUsCisJCQkJCQkgIHByZXR0eUZsYWdzLCBXUkFQX0NPTFVNTl9ERUZBVUxU LCAwKTsKKwkJCW91dHB1dCA9IGxhcHBlbmQob3V0cHV0LCBwc3RyZHVwKGJ1Zi5kYXRhKSk7CisJ CX0KKwkJKmFjdGlvbnMgPSBvdXRwdXQ7CisJfQorfQogCiBzdGF0aWMgY2hhciAqCiBwZ19nZXRf cnVsZWRlZl93b3JrZXIoT2lkIHJ1bGVvaWQsIGludCBwcmV0dHlGbGFncykKQEAgLTEwMTUsNjUg KzEwNzgsMTIgQEAgcGdfZ2V0X3RyaWdnZXJkZWZfd29ya2VyKE9pZCB0cmlnaWQsIGJvb2wgcHJl dHR5KQogCWlmICghaXNudWxsKQogCXsKIAkJTm9kZQkgICAqcXVhbDsKLQkJY2hhcgkJcmVsa2lu ZDsKLQkJZGVwYXJzZV9jb250ZXh0IGNvbnRleHQ7Ci0JCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7 Ci0JCVJhbmdlVGJsRW50cnkgKm9sZHJ0ZTsKLQkJUmFuZ2VUYmxFbnRyeSAqbmV3cnRlOwotCi0J CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIldIRU4gKCIpOworCQljaGFyICAgICAgICpx dWFsc3RyOwogCiAJCXF1YWwgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyh2YWx1 ZSkpOworCQlxdWFsc3RyID0gcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZSh0cmlncmVjLCBxdWFs LCBwcmV0dHkpOwogCi0JCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQodHJpZ3JlYy0+dGdyZWxp ZCk7Ci0KLQkJLyogQnVpbGQgbWluaW1hbCBPTEQgYW5kIE5FVyBSVEVzIGZvciB0aGUgcmVsICov Ci0JCW9sZHJ0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOwotCQlvbGRydGUtPnJ0ZWtpbmQg PSBSVEVfUkVMQVRJT047Ci0JCW9sZHJ0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOwotCQlv bGRydGUtPnJlbGtpbmQgPSByZWxraW5kOwotCQlvbGRydGUtPnJlbGxvY2ttb2RlID0gQWNjZXNz U2hhcmVMb2NrOwotCQlvbGRydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJvbGQiLCBOSUwpOwotCQlv bGRydGUtPmVyZWYgPSBvbGRydGUtPmFsaWFzOwotCQlvbGRydGUtPmxhdGVyYWwgPSBmYWxzZTsK LQkJb2xkcnRlLT5pbmggPSBmYWxzZTsKLQkJb2xkcnRlLT5pbkZyb21DbCA9IHRydWU7Ci0KLQkJ bmV3cnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7Ci0JCW5ld3J0ZS0+cnRla2luZCA9IFJU RV9SRUxBVElPTjsKLQkJbmV3cnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7Ci0JCW5ld3J0 ZS0+cmVsa2luZCA9IHJlbGtpbmQ7Ci0JCW5ld3J0ZS0+cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFy ZUxvY2s7Ci0JCW5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm5ldyIsIE5JTCk7Ci0JCW5ld3J0 ZS0+ZXJlZiA9IG5ld3J0ZS0+YWxpYXM7Ci0JCW5ld3J0ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQlu ZXdydGUtPmluaCA9IGZhbHNlOwotCQluZXdydGUtPmluRnJvbUNsID0gdHJ1ZTsKLQotCQkvKiBC dWlsZCB0d28tZWxlbWVudCBydGFibGUgKi8KLQkJbWVtc2V0KCZkcG5zLCAwLCBzaXplb2YoZHBu cykpOwotCQlkcG5zLnJ0YWJsZSA9IGxpc3RfbWFrZTIob2xkcnRlLCBuZXdydGUpOwotCQlkcG5z LnN1YnBsYW5zID0gTklMOwotCQlkcG5zLmN0ZXMgPSBOSUw7Ci0JCWRwbnMuYXBwZW5kcmVscyA9 IE5VTEw7Ci0JCXNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwgTlVMTCk7Ci0JCXNldF9zaW1w bGVfY29sdW1uX25hbWVzKCZkcG5zKTsKLQotCQkvKiBTZXQgdXAgY29udGV4dCB3aXRoIG9uZS1k ZWVwIG5hbWVzcGFjZSBzdGFjayAqLwotCQljb250ZXh0LmJ1ZiA9ICZidWY7Ci0JCWNvbnRleHQu bmFtZXNwYWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOwotCQljb250ZXh0LndpbmRvd0NsYXVzZSA9 IE5JTDsKLQkJY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKLQkJY29udGV4dC52YXJwcmVmaXgg PSB0cnVlOwotCQljb250ZXh0LnByZXR0eUZsYWdzID0gR0VUX1BSRVRUWV9GTEFHUyhwcmV0dHkp OwotCQljb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxUOwotCQljb250ZXh0 LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKLQkJY29udGV4dC5zcGVjaWFsX2V4cHJr aW5kID0gRVhQUl9LSU5EX05PTkU7Ci0JCWNvbnRleHQuYXBwZW5kcGFyZW50cyA9IE5VTEw7Ci0K LQkJZ2V0X3J1bGVfZXhwcihxdWFsLCAmY29udGV4dCwgZmFsc2UpOwotCi0JCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmJ1ZiwgIikgIik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIldIRU4g KCVzKSAiLCBxdWFsc3RyKTsKIAl9CiAKIAlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJFWEVDVVRF IEZVTkNUSU9OICVzKCIsCkBAIC0xMTE0LDYgKzExMjQsNjQgQEAgcGdfZ2V0X3RyaWdnZXJkZWZf d29ya2VyKE9pZCB0cmlnaWQsIGJvb2wgcHJldHR5KQogCXJldHVybiBidWYuZGF0YTsKIH0KIAor Y2hhciAqCitwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKEZvcm1fcGdfdHJpZ2dlciB0cmlncmVj LCBOb2RlICp3aGVuQ2xhdXNlLCBib29sIHByZXR0eSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7 CisJY2hhciAgICAgICAgcmVsa2luZDsKKwlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsKKwlkZXBh cnNlX25hbWVzcGFjZSBkcG5zOworCVJhbmdlVGJsRW50cnkgKm9sZHJ0ZTsKKwlSYW5nZVRibEVu dHJ5ICpuZXdydGU7CisKKyAgIGluaXRTdHJpbmdJbmZvKCZidWYpOworCisgICByZWxraW5kID0g Z2V0X3JlbF9yZWxraW5kKHRyaWdyZWMtPnRncmVsaWQpOworCisgICAvKiBCdWlsZCBtaW5pbWFs IE9MRCBhbmQgTkVXIFJURXMgZm9yIHRoZSByZWwgKi8KKyAgIG9sZHJ0ZSA9IG1ha2VOb2RlKFJh bmdlVGJsRW50cnkpOworICAgb2xkcnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOworICAgb2xk cnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7CisgICBvbGRydGUtPnJlbGtpbmQgPSByZWxr aW5kOworICAgb2xkcnRlLT5hbGlhcyA9IG1ha2VBbGlhcygib2xkIiwgTklMKTsKKyAgIG9sZHJ0 ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7CisgICBvbGRydGUtPmxhdGVyYWwgPSBmYWxzZTsKKyAg IG9sZHJ0ZS0+aW5oID0gZmFsc2U7CisgICBvbGRydGUtPmluRnJvbUNsID0gdHJ1ZTsKKworICAg bmV3cnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7CisgICBuZXdydGUtPnJ0ZWtpbmQgPSBS VEVfUkVMQVRJT047CisgICBuZXdydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKKyAgIG5l d3J0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7CisgICBuZXdydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJu ZXciLCBOSUwpOworICAgbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsKKyAgIG5ld3J0ZS0+ bGF0ZXJhbCA9IGZhbHNlOworICAgbmV3cnRlLT5pbmggPSBmYWxzZTsKKyAgIG5ld3J0ZS0+aW5G cm9tQ2wgPSB0cnVlOworCisgICAvKiBCdWlsZCB0d28tZWxlbWVudCBydGFibGUgKi8KKyAgIG1l bXNldCgmZHBucywgMCwgc2l6ZW9mKGRwbnMpKTsKKyAgIGRwbnMucnRhYmxlID0gbGlzdF9tYWtl MihvbGRydGUsIG5ld3J0ZSk7CisgICBkcG5zLmN0ZXMgPSBOSUw7CisgICBzZXRfcnRhYmxlX25h bWVzKCZkcG5zLCBOSUwsIE5VTEwpOworICAgc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRwbnMp OworCisgICAvKiBTZXQgdXAgY29udGV4dCB3aXRoIG9uZS1kZWVwIG5hbWVzcGFjZSBzdGFjayAq LworICAgY29udGV4dC5idWYgPSAmYnVmOworICAgY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9t YWtlMSgmZHBucyk7CisgICBjb250ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsKKyAgIGNvbnRleHQu d2luZG93VExpc3QgPSBOSUw7CisgICBjb250ZXh0LnZhcnByZWZpeCA9IHRydWU7CisgICBjb250 ZXh0LnByZXR0eUZsYWdzID0gcHJldHR5ID8gUFJFVFRZRkxBR19QQVJFTiB8IFBSRVRUWUZMQUdf SU5ERU5UIDogUFJFVFRZRkxBR19JTkRFTlQ7CisgICBjb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQ X0NPTFVNTl9ERUZBVUxUOworICAgY29udGV4dC5pbmRlbnRMZXZlbCA9IFBSRVRUWUlOREVOVF9T VEQ7CisgICBjb250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9ORTsKKworICAg Z2V0X3J1bGVfZXhwcih3aGVuQ2xhdXNlLCAmY29udGV4dCwgZmFsc2UpOworCisgICByZXR1cm4g YnVmLmRhdGE7Cit9CisKIC8qIC0tLS0tLS0tLS0KICAqIHBnX2dldF9pbmRleGRlZgkJCS0gR2V0 IHRoZSBkZWZpbml0aW9uIG9mIGFuIGluZGV4CiAgKgpAQCAtMTg4MCw2ICsxOTQ4LDEzIEBAIHBn X2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSkKIAlyZXR1cm4g cGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCBwcmV0dHlGbGFncywgdHJ1ZSwgZmFsc2Up OwogfQogCisvKiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmVwb3J0cyB0aGUgZnVsbCBwYXJ0aXRp b24ga2V5IGRlZmluaXRpb24gKi8KK2NoYXIgKgorcGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxlKE9p ZCByZWxpZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCAwLCBm YWxzZSwgZmFsc2UpOworfQorCiAvKgogICogSW50ZXJuYWwgd29ya2hvcnNlIHRvIGRlY29tcGls ZSBhIHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlvbi4KICAqLwpAQCAtMjEzMiw2ICsyMjA3LDE1IEBA IHBnX2dldF9jb25zdHJhaW50ZGVmX2V4dChQR19GVU5DVElPTl9BUkdTKQogfQogCiAvKgorICog SW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgZGVmaW5pdGlvbiBvZiBhIENPTlNUUkFJTlQg Y29tbWFuZAorICovCitjaGFyICoKK3BnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxl KE9pZCBjb25zdHJhaW50SWQpCit7CisJcmV0dXJuIHBnX2dldF9jb25zdHJhaW50ZGVmX3dvcmtl cihjb25zdHJhaW50SWQsIGZhbHNlLCAwLCBmYWxzZSk7Cit9CisKKy8qCiAgKiBJbnRlcm5hbCB2 ZXJzaW9uIHRoYXQgcmV0dXJucyBhIGZ1bGwgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5U IGNvbW1hbmQKICAqLwogY2hhciAqCkBAIC0zNTAxLDcgKzM1ODUsNyBAQCBwZ19nZXRfZnVuY3Rp b25fYXJnX2RlZmF1bHQoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKHN0cmlu Z190b190ZXh0KHN0cikpOwogfQogCi1zdGF0aWMgdm9pZAordm9pZAogcHJpbnRfZnVuY3Rpb25f c3FsYm9keShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApCiB7CiAJaW50CQkJbnVt YXJnczsKQEAgLTExMzg0LDcgKzExNDY4LDcgQEAgZ2V0X3RhYmxlc2FtcGxlX2RlZihUYWJsZVNh bXBsZUNsYXVzZSAqdGFibGVzYW1wbGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCkKICAqIGFj dHVhbF9kYXRhdHlwZS4gIChJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzIGJlaGF2aW9yLCBqdXN0IHBh c3MKICAqIEludmFsaWRPaWQgZm9yIGFjdHVhbF9kYXRhdHlwZS4pCiAgKi8KLXN0YXRpYyB2b2lk Cit2b2lkCiBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBl LAogCQkJCSBTdHJpbmdJbmZvIGJ1ZikKIHsKQEAgLTExNzc4LDcgKzExODYyLDcgQEAgZ2VuZXJh dGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKQogICoKICAqIFRoZSByZXN1bHQg aW5jbHVkZXMgYWxsIG5lY2Vzc2FyeSBxdW90aW5nIGFuZCBzY2hlbWEtcHJlZml4aW5nLgogICov Ci1zdGF0aWMgY2hhciAqCitjaGFyICoKIGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNp ZCwgaW50IG5hcmdzLCBMaXN0ICphcmduYW1lcywgT2lkICphcmd0eXBlcywKIAkJCQkJICAgYm9v bCBoYXNfdmFyaWFkaWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAogCQkJCQkgICBQYXJzZUV4cHJL aW5kIHNwZWNpYWxfZXhwcmtpbmQpCkBAIC0xMjE2NCw3ICsxMjI0OCw3IEBAIGdldF9yZWxvcHRp b25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKQogLyoKICAqIEdlbmVyYXRlIGEg QyBzdHJpbmcgcmVwcmVzZW50aW5nIGEgcmVsYXRpb24ncyByZWxvcHRpb25zLCBvciBOVUxMIGlm IG5vbmUuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZmxhdHRlbl9yZWxvcHRpb25zKE9p ZCByZWxpZCkKIHsKIAljaGFyCSAgICpyZXN1bHQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKaW5kZXggNjhiYjAzMi4uMmM4NzEwNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0x MTgyMyw0ICsxMTgyMywxMCBAQAogICBwcm9yZXR0eXBlID0+ICdieXRlYScsIHByb2FyZ3R5cGVz ID0+ICdwZ19icmluX21pbm1heF9tdWx0aV9zdW1tYXJ5JywKICAgcHJvc3JjID0+ICdicmluX21p bm1heF9tdWx0aV9zdW1tYXJ5X3NlbmQnIH0sCiAKK3sgb2lkID0+ICc0NjQyJywgZGVzY3IgPT4g J2RlcGFyc2UgdGhlIERETCBjb21tYW5kIGludG8ganNvbiBmb3JtYXQgc3RyaW5nJywKKyAgcHJv bmFtZSA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicsIHByb3JldHR5cGUgPT4gJ3RleHQnLAorICBw cm9hcmd0eXBlcyA9PiAncGdfZGRsX2NvbW1hbmQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNlX3Rv X2pzb24nIH0sCit7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdleHBhbmQganNvbiBmb3JtYXQg RERMIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQnLAorICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV9l eHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9PiAn dGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnIH0sCiBdCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmggYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmgKaW5kZXggMjAxYjE5Zi4uNDZkMTgzNyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29sbGF0aW9uY21kcy5oCisrKyBiL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaApAQCAtMTgsNyArMTgsOCBAQAogI2luY2x1ZGUg ImNhdGFsb2cvb2JqZWN0YWRkcmVzcy5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9ub2RlLmgi CiAKLWV4dGVybiBPYmplY3RBZGRyZXNzIERlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3Rh dGUsIExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLCBib29sIGlmX25vdF9leGlzdHMpOwor ZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwg TGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsCisJCQkJCQkJCQkgIGJvb2wgaWZfbm90X2V4 aXN0cywgT2JqZWN0QWRkcmVzcyAqZnJvbV9jb2xsaWQpOwogZXh0ZXJuIHZvaWQgSXNUaGVyZUNv bGxhdGlvbkluTmFtZXNwYWNlKGNvbnN0IGNoYXIgKmNvbGxuYW1lLCBPaWQgbnNwT2lkKTsKIGV4 dGVybiBPYmplY3RBZGRyZXNzIEFsdGVyQ29sbGF0aW9uKEFsdGVyQ29sbGF0aW9uU3RtdCAqc3Rt dCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmggYi9zcmMv aW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCmluZGV4IGIzYjA0Y2MuLmMyYjFjYTMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKKysrIGIvc3JjL2luY2x1ZGUv Y29tbWFuZHMvc2VxdWVuY2UuaApAQCAtNTQsNiArNTQsNyBAQCB0eXBlZGVmIHN0cnVjdCB4bF9z ZXFfcmVjCiBleHRlcm4gaW50NjQgbmV4dHZhbF9pbnRlcm5hbChPaWQgcmVsaWQsIGJvb2wgY2hl Y2tfcGVybWlzc2lvbnMpOwogZXh0ZXJuIERhdHVtIG5leHR2YWwoUEdfRlVOQ1RJT05fQVJHUyk7 CiBleHRlcm4gTGlzdCAqc2VxdWVuY2Vfb3B0aW9ucyhPaWQgcmVsaWQpOworZXh0ZXJuIEZvcm1f cGdfc2VxdWVuY2VfZGF0YSBnZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5jZUlkKTsKIAog ZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lU2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBD cmVhdGVTZXFTdG10ICpzZXEpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJTZXF1ZW5jZShQ YXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2VxU3RtdCAqc3RtdCk7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNl LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmZGY0NwotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApAQCAtMCwwICsxLDIzIEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJzZS5oCisgKgorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVu aXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFy c2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIERETF9ERVBBUlNFX0gK KyNkZWZpbmUgRERMX0RFUEFSU0VfSAorCisjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0aWxpdHku aCIKKworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1h bmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOworZXh0ZXJuIGNoYXIgKmRkbF9kZXBhcnNlX2pz b25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKK2V4dGVybiBjaGFyICpkZXBhcnNlX2Ryb3BfY29t bWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAqb2JqZWN0dHlwZSwKKwkJ CQkJCQkJICBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOworCisKKyNlbmRpZgkJLyogRERMX0RFUEFS U0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCBi L3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKaW5kZXggOTRkZTEzZC4uYjUzMjk0 YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAorKysgYi9z cmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCkBAIC02Miw2ICs2Miw3IEBAIHR5cGVk ZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJT2lkCQkJb2JqZWN0SWQ7CiAJCQlP aWQJCQljbGFzc0lkOworCQkJYm9vbAkJcmV3cml0ZTsKIAkJCUxpc3QJICAgKnN1YmNtZHM7CiAJ CX0JCQlhbHRlclRhYmxlOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtf aW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCmluZGV4IDM2 MTI4NGQuLjRlMDIwZWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRl cm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCkBAIC0zOSw2 ICszOSw3IEBAIHR5cGVkZWYgc3RydWN0CiAJTGlzdAkgICAqZ3JhbnRlZXM7CiAJYm9vbAkJZ3Jh bnRfb3B0aW9uOwogCURyb3BCZWhhdmlvciBiZWhhdmlvcjsKKwlPaWQJCQlncmFudG9yX3VpZDsK IH0gSW50ZXJuYWxHcmFudDsKIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9idWls dGlucy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAppbmRleCA4MTYzMWYxLi43MTUw ZmFiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCisrKyBiL3NyYy9p bmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKQEAgLTExNCwxMCArMTE0LDEyIEBAIGV4dGVybiBEYXR1 bSBudW1lcmljX2Zsb2F0OF9ub19vdmVyZmxvdyhQR19GVU5DVElPTl9BUkdTKTsKICNkZWZpbmUg Rk9STUFUX1RZUEVfRk9SQ0VfUVVBTElGWQkweDA0CS8qIGZvcmNlIHF1YWxpZmljYXRpb24gb2Yg dHlwZSAqLwogI2RlZmluZSBGT1JNQVRfVFlQRV9JTlZBTElEX0FTX05VTEwJMHgwOAkvKiBOVUxM IGlmIHVuZGVmaW5lZCAqLwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2V4dGVuZGVkKE9pZCB0 eXBlX29pZCwgaW50MzIgdHlwZW1vZCwgYml0czE2IGZsYWdzKTsKK2V4dGVybiBjaGFyICpmb3Jt YXRfcHJvY2VkdXJlX2FyZ3MoT2lkIHByb2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSk7 CiAKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZShPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNo YXIgKmZvcm1hdF90eXBlX2JlX3F1YWxpZmllZChPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIg KmZvcm1hdF90eXBlX3dpdGhfdHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOwor ZXh0ZXJuIGNoYXIgKnByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1v ZCwgT2lkIHR5cG1vZG91dCk7CiAKIGV4dGVybiBpbnQzMiB0eXBlX21heGltdW1fc2l6ZShPaWQg dHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGls cy9ydWxldXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCmluZGV4IDdkNDg5 NzEuLjNjYmNhNDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCkBAIC0xMyw2ICsxMyw3IEBACiAjaWZu ZGVmIFJVTEVVVElMU19ICiAjZGVmaW5lIFJVTEVVVElMU19ICiAKKyNpbmNsdWRlICJjYXRhbG9n L3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVz L3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCkBAIC0yMywxMiArMjQs MTkgQEAgc3RydWN0IFBsYW5uZWRTdG10OwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVm X3N0cmluZyhPaWQgaW5kZXhyZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX2Nv bHVtbnMoT2lkIGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KTsKK2V4dGVybiBjaGFyICpwZ19nZXRf dHJpZ2dlcl93aGVuY2xhdXNlKEZvcm1fcGdfdHJpZ2dlciB0cmlncmVjLAorCQkJCQkJCQkJICAg Tm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0dHkpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9xdWVy eWRlZihRdWVyeSAqcXVlcnksIGJvb2wgcHJldHR5KTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9w YXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSk7CitleHRlcm4gY2hhciAq cGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxlKE9pZCByZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0 X3BhcnRjb25zdHJkZWZfc3RyaW5nKE9pZCBwYXJ0aXRpb25JZCwgY2hhciAqYWxpYXNuYW1lKTsK IAogZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFp bnRJZCk7CitleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUo T2lkIGNvbnN0cmFpbnRJZCk7CitleHRlcm4gdm9pZCBwZ19nZXRfcnVsZWRlZl9kZXRhaWxlZChE YXR1bSBldl9xdWFsLCBEYXR1bSBldl9hY3Rpb24sCisJCQkJCQkJCSAgIGNoYXIgKip3aGVyZUNs YXVzZSwgTGlzdCAqKmFjdGlvbnMpOworCiBleHRlcm4gY2hhciAqZGVwYXJzZV9leHByZXNzaW9u KE5vZGUgKmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJYm9vbCBmb3JjZXByZWZpeCwg Ym9vbCBzaG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFyc2VfY29udGV4dF9mb3IoY29u c3QgY2hhciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNDAsOCArNDgsMTYgQEAgZXh0ZXJu IExpc3QgKnNlbGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4cGxhaW4oTGlzdCAqcnRhYmxlLAogCQkJ CQkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX2Nv bGxhdGlvbl9uYW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX29wY2xhc3Nf bmFtZShPaWQgb3BjbGFzcyk7CitleHRlcm4gY2hhciAqZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShP aWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLAorCQkJCQkJCQkJT2lkICphcmd0 eXBlcywgYm9vbCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJCQlib29sICp1c2VfdmFyaWFkaWNfcCwK KwkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCk7CiBleHRlcm4gY2hhciAq Z2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91bmRfZGF0dW1zKTsKK2V4dGVybiB2 b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCisJ CQkJCQkJICBTdHJpbmdJbmZvIGJ1Zik7CitleHRlcm4gY2hhciAqZmxhdHRlbl9yZWxvcHRpb25z KE9pZCByZWxpZCk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfc3RhdGlzdGljc29iamRlZl9zdHJp bmcoT2lkIHN0YXRleHRpZCk7CitleHRlcm4gdm9pZCBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0 cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiAKICNlbmRpZgkJCQkJCQkvKiBSVUxF VVRJTFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3Rf YWRkcmVzcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91 dAppbmRleCAzNTQ5YjYzLi4zYzRjYjdiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L29iamVjdF9hZGRyZXNzLm91dApAQCAtNDkwLDcgKzQ5MCw3IEBAIFNFTEVDVCAocGdfaWRlbnRp Znlfb2JqZWN0KGFkZHIxLmNsYXNzaWQsIGFkZHIxLm9iamlkLCBhZGRyMS5vYmpzdWJpZCkpLios CiAgcG9saWN5ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAg ICAgICB8IGdlbnBvbCBvbiBhZGRyX25zcC5nZW50YWJsZSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgdAogIHN0YXRpc3RpY3Mgb2JqZWN0ICAgICAgICAgfCBhZGRy X25zcCAgIHwgZ2VudGFibGVfc3RhdCAgICAgfCBhZGRyX25zcC5nZW50YWJsZV9zdGF0ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHQKICBjb2xsYXRpb24g ICAgICAgICAgICAgICAgIHwgcGdfY2F0YWxvZyB8ICJkZWZhdWx0IiAgICAgICAgIHwgcGdfY2F0 YWxvZy4iZGVmYXVsdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCB0Ci0gdHJhbnNmb3JtICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAg ICAgICAgICAgICAgICB8IGZvciBpbnRlZ2VyIG9uIGxhbmd1YWdlIHNxbCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdAorIHRyYW5zZm9ybSAgICAgICAgICAgICAg ICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCBmb3IgaW50ZWdlciBsYW5ndWFn ZSBzcWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHQKICB0 ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5ICAgIHwgYWRkcl9uc3AgICB8IGFkZHJfdHNfZGljdCAgICAg IHwgYWRkcl9uc3AuYWRkcl90c19kaWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCB0CiAgdGV4dCBzZWFyY2ggcGFyc2VyICAgICAgICB8IGFkZHJfbnNw ICAgfCBhZGRyX3RzX3BycyAgICAgICB8IGFkZHJfbnNwLmFkZHJfdHNfcHJzICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdAogIHRleHQgc2VhcmNoIGNv bmZpZ3VyYXRpb24gfCBhZGRyX25zcCAgIHwgYWRkcl90c19jb25mICAgICAgfCBhZGRyX25zcC5h ZGRyX3RzX2NvbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IHQKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggZDliODM5Yy4uMjQwZDNhZSAxMDA2 NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2MTAsNiArMTYxMCw5IEBAIE9TSW5mbwogT1NT TENpcGhlcgogT1NTTERpZ2VzdAogT1ZFUkxBUFBFRAorT2JqRWxlbQorT2JqVHJlZQorT2JqVHlw ZQogT2JqZWN0QWNjZXNzRHJvcAogT2JqZWN0QWNjZXNzTmFtZXNwYWNlU2VhcmNoCiBPYmplY3RB Y2Nlc3NQb3N0QWx0ZXIKQEAgLTMxNzcsNiArMzE4MCw3IEBAIGNvbXBhcmVfY29udGV4dAogY29u ZmlnX3Zhcl92YWx1ZQogY29udGFpbl9hZ2dzX29mX2xldmVsX2NvbnRleHQKIGNvbnZlcnRfdGVz dGV4cHJfY29udGV4dAorY29udlNwZWNpZmllcgogY29weV9kYXRhX2Rlc3RfY2IKIGNvcHlfZGF0 YV9zb3VyY2VfY2IKIGNvcmVfWVlTVFlQRQotLSAKMS44LjMuMQoK --000000000000d5f46705eac248cb Content-Type: application/octet-stream; name="v27-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v27-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l948q1bu1 RnJvbSAyYjU5MjIyMWQxZjI0NDI0MjViYzhmMmE0OThhYzg1NmZmY2E1ZWY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMTEgT2N0IDIwMjIgMDk6MTE6MjIgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyNyAyLzRdIFN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLgoKVG8gc3VwcG9ydCBEREwgcmVwbGlj 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 ZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jIHwgIDUyICsrKwogc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL21lc29uLmJ1aWxkICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5jICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jICAgICAgICAgICAgfCAyNzQgKysrKysrKysrKysrKysrLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgICAgICAgICAgfCAxNjUgKysrKysrKysr Kwogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgICAgICAgIHwgICAx ICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jICAgIHwgIDg2 ICsrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jICAgICAgICB8 ICA0MSArKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jICAgICAg IHwgIDkzICsrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWls ZCAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAg ICAgICAgfCAgNDggKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJi dWZmZXIuYyB8IDEzNiArKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93 b3JrZXIuYyAgICAgICAgfCAyMzIgKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vcGdvdXRwdXQvcGdvdXRwdXQuYyAgICAgfCAxOTIgKysrKysrKysrKy0KIHNyYy9iYWNrZW5k L3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDIxICstCiBzcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3Bn X3dhbGR1bXAvcm1ncmRlc2MuYyAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3Bz cWwvZGVzY3JpYmUuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNyArLQogc3JjL2luY2x1 ZGUvYWNjZXNzL3JtZ3JsaXN0LmggICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oICAgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1 ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCAgICAgICAgICAgIHwgIDYwICsrKysKIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oICAgICAgICAgIHwgICA3ICstCiBzcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggICAgICAgICB8ICAyNyArKwogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oICAgICAgICAgfCAgMzkgKysrCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0ICAgICAgICAgICAgICB8ICAgNiArLQog c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgICAgICAgfCA0MjAgKysr KysrKysrKysrLS0tLS0tLS0tLS0tCiAzMyBmaWxlcyBjaGFuZ2VkLCAxNzE2IGluc2VydGlvbnMo KyksIDIyOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nl c3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL01ha2VmaWxlCmluZGV4IGY4OGQ3MmYuLmI4ZTI5ZTggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv cm1ncmRlc2MvTWFrZWZpbGUKQEAgLTE5LDYgKzE5LDcgQEAgT0JKUyA9IFwKIAloYXNoZGVzYy5v IFwKIAloZWFwZGVzYy5vIFwKIAlsb2dpY2FsbXNnZGVzYy5vIFwKKwlsb2dpY2FsZGRsbXNnZGVz Yy5vIFwKIAlteGFjdGRlc2MubyBcCiAJbmJ0ZGVzYy5vIFwKIAlyZWxtYXBkZXNjLm8gXApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWRlZTUyCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKQEAgLTAsMCAr MSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogbG9naWNhbGRkbG1zZ2Rlc2MuYwor ICoJICBybWdyIGRlc2NyaXB0b3Igcm91dGluZXMgZm9yIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRs bWVzc2FnZS5jCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9O CisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5j bHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorCit2b2lkCitsb2dpY2FsZGRsbXNnX2Rl c2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQoreworCWNoYXIJICAg KnJlYyA9IFhMb2dSZWNHZXREYXRhKHJlY29yZCk7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0 SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyA9PSBYTE9HX0xPR0lD QUxfRERMX01FU1NBR0UpCisJeworCQl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICp4bHJlYyA9ICh4 bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIHJlYzsKKwkJY2hhcgkgICAqcHJlZml4ID0geGxyZWMt Pm1lc3NhZ2U7CisJCWNoYXIJICAgKm1lc3NhZ2UgPSB4bHJlYy0+bWVzc2FnZSArIHhscmVjLT5w cmVmaXhfc2l6ZTsKKwkJY2hhcgkgICAqc2VwID0gIiI7CisKKwkJQXNzZXJ0KHByZWZpeFt4bHJl Yy0+cHJlZml4X3NpemVdICE9ICdcMCcpOworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAicHJl Zml4IFwiJXNcIjsgcGF5bG9hZCAoJXp1IGJ5dGVzKTogIiwKKwkJCQkJCSBwcmVmaXgsIHhscmVj LT5tZXNzYWdlX3NpemUpOworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInJlbGlkICV1IGNtZHR5 cGUgJXUiLCB4bHJlYy0+cmVsaWQsIHhscmVjLT5jbWR0eXBlKTsKKwkJLyogV3JpdGUgbWVzc2Fn ZSBwYXlsb2FkIGFzIGEgc2VyaWVzIG9mIGhleCBieXRlcyAqLworCQlmb3IgKGludCBjbnQgPSAw OyBjbnQgPCB4bHJlYy0+bWVzc2FnZV9zaXplOyBjbnQrKykKKwkJeworCQkJYXBwZW5kU3RyaW5n SW5mbyhidWYsICIlcyUwMlgiLCBzZXAsICh1bnNpZ25lZCBjaGFyKSBtZXNzYWdlW2NudF0pOwor CQkJc2VwID0gIiAiOworCQl9CisJfQorfQorCitjb25zdCBjaGFyICoKK2xvZ2ljYWxkZGxtc2df aWRlbnRpZnkodWludDggaW5mbykKK3sKKwlpZiAoKGluZm8gJiB+WExSX0lORk9fTUFTSykgPT0g WExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQlyZXR1cm4gIkRETCBNRVNTQUdFIjsKKworCXJl dHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21l c29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkCmluZGV4 IGYzYTZlMGEuLjNhNzBjOTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVz Yy9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbWVzb24uYnVp bGQKQEAgLTksNiArOSw3IEBAIHJtZ3JfZGVzY19zb3VyY2VzID0gZmlsZXMoCiAgICdnaXN0ZGVz Yy5jJywKICAgJ2hhc2hkZXNjLmMnLAogICAnaGVhcGRlc2MuYycsCisgICdsb2dpY2FsZGRsbXNn ZGVzYy5jJywKICAgJ2xvZ2ljYWxtc2dkZXNjLmMnLAogICAnbXhhY3RkZXNjLmMnLAogICAnbmJ0 ZGVzYy5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24u YyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwppbmRleCA1OTk2NzA5Li43 MjFkMDIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMK KysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0xMDA1LDYgKzEw MDUsNyBAQCBHZXRQdWJsaWNhdGlvbihPaWQgcHViaWQpCiAJcHViLT5wdWJhY3Rpb25zLnB1YnVw ZGF0ZSA9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAlwdWItPnB1YmFjdGlvbnMucHViZGVsZXRlID0g cHViZm9ybS0+cHViZGVsZXRlOwogCXB1Yi0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IHB1YmZv cm0tPnB1YnRydW5jYXRlOworCXB1Yi0+cHViYWN0aW9ucy5wdWJkZGwgPSBwdWJmb3JtLT5wdWJk ZGw7CiAJcHViLT5wdWJ2aWFyb290ID0gcHViZm9ybS0+cHVidmlhcm9vdDsKIAogCVJlbGVhc2VT eXNDYWNoZSh0dXApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4IDQ0MWYy OWQuLjE4MTljYTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAgLTM3LDgg KzM3LDExIEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNl X2Z1bmMuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxt ZXNzYWdlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInRj b3AvZGVwYXJzZV91dGlsaXR5LmgiCiAjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCisjaW5jbHVk ZSAidGNvcC9kZGxfZGVwYXJzZS5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZXZ0Y2FjaGUuaCIKQEAgLTE1Mzcs NiArMTU0MCw3IEBAIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChOb2RlICpwYXJzZXRyZWUp CiAKIAljb21tYW5kLT5kLmFsdGVyVGFibGUuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsK IAljb21tYW5kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQgPSBJbnZhbGlkT2lkOworCWNvbW1hbmQt PmQuYWx0ZXJUYWJsZS5yZXdyaXRlID0gZmFsc2U7CiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1 YmNtZHMgPSBOSUw7CiAJY29tbWFuZC0+cGFyc2V0cmVlID0gY29weU9iamVjdChwYXJzZXRyZWUp OwogCkBAIC0xNTcwLDcgKzE1NzQsNyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVsaWQoT2lk IG9iamVjdElkKQogICogaW50ZXJuYWxseSwgc28gdGhhdCdzIGFsbCB0aGF0IHRoaXMgY29kZSBu ZWVkcyB0byBoYW5kbGUgYXQgdGhlIG1vbWVudC4KICAqLwogdm9pZAotRXZlbnRUcmlnZ2VyQ29s bGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3Mp CitFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVj dEFkZHJlc3MgYWRkcmVzcywgYm9vbCByZXdyaXRlKQogewogCU1lbW9yeUNvbnRleHQgb2xkY3h0 OwogCUNvbGxlY3RlZEFUU3ViY21kICpuZXdzdWI7CkBAIC0xNTkwLDYgKzE1OTQsNyBAQCBFdmVu dFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJl c3MgYWRkcmVzcykKIAluZXdzdWItPmFkZHJlc3MgPSBhZGRyZXNzOwogCW5ld3N1Yi0+cGFyc2V0 cmVlID0gY29weU9iamVjdChzdWJjbWQpOwogCisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5j dXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUgfD0gcmV3cml0ZTsKIAljdXJyZW50 RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9 CiAJCWxhcHBlbmQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5h bHRlclRhYmxlLnN1YmNtZHMsIG5ld3N1Yik7CiAKQEAgLTIxNzUsMyArMjE4MCwyNzAgQEAgc3Ry aW5naWZ5X2FkZWZwcml2c19vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKIAogCXJldHVybiAi Pz8/IjsJCQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwogfQorCisvKgorICogcHVibGljYXRp b25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydAorICoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21t YW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21t YW5kX3N0YXJ0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRXZlbnRUcmlnZ2VyRGF0YSAqdHJpZ2Rh dGE7CisJY2hhcgkJKmNvbW1hbmQgPSBwc3ByaW50ZigiRHJvcCB0YWJsZSBjb21tYW5kIHN0YXJ0 Iik7CisJRHJvcFN0bXQJKnN0bXQ7CisJTGlzdENlbGwJKmNlbGwxOworCisJaWYgKCFDQUxMRURf QVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2 ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAq KSBmY2luZm8tPmNvbnRleHQ7CisJc3RtdAkgPSAoRHJvcFN0bXQgKikgdHJpZ2RhdGEtPnBhcnNl dHJlZTsKKworCS8qIGV4dHJhY3QgdGhlIHJlbGlkIGZyb20gdGhlIHBhcnNlIHRyZWUgKi8KKwlm b3JlYWNoKGNlbGwxLCBzdG10LT5vYmplY3RzKQorCXsKKwkJY2hhcglyZWxwZXJzaXN0OworCQlO b2RlCSpvYmplY3QgPSBsZmlyc3QoY2VsbDEpOworCQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJ CVJlbGF0aW9uIHJlbGF0aW9uID0gTlVMTDsKKworCQlhZGRyZXNzID0gZ2V0X29iamVjdF9hZGRy ZXNzKHN0bXQtPnJlbW92ZVR5cGUsCisJCQkJCQkJCQkgb2JqZWN0LAorCQkJCQkJCQkJICZyZWxh dGlvbiwKKwkJCQkJCQkJCSBBY2Nlc3NFeGNsdXNpdmVMb2NrLAorCQkJCQkJCQkJIHRydWUpOwor CisJCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKGFkZHJlc3Mub2JqZWN0SWQpOwor CisJCS8qCisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0 YXJnZXQgdGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAqIFdlIHdp bGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2Vk CisJCSAqIHRhYmxlcyBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJz Y3JpYmVyIHNpZGUuIFRoaXMKKwkJICogbWFrZXMgaXQgcG9zc2libGUgdG8gZGlyZWN0bHkgcmVw bGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZQorCQkgKiBpbmNvbWluZyByZXdyaXRl IG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlmIChyZWxw ZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXsKKwkJCXRhYmxlX2Nsb3NlKHJlbGF0 aW9uLCBOb0xvY2spOworCQkJY29udGludWU7CisJCX0KKworCQlMb2dMb2dpY2FsRERMTWVzc2Fn ZSgiZGVwYXJzZSIsIGFkZHJlc3Mub2JqZWN0SWQsIERDVF9UYWJsZURyb3BTdGFydCwKKwkJCQkJ CQkgY29tbWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisKKwkJaWYgKHJlbGF0aW9uKQorCQkJ dGFibGVfY2xvc2UocmVsYXRpb24sIE5vTG9jayk7CisJfQorCXJldHVybiBQb2ludGVyR2V0RGF0 dW0oTlVMTCk7Cit9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUK KyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgdGFibGUgcmV3cml0ZSBjb21tYW5kIGFuZCBsb2cgaXQu CisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwljaGFyCQkJCXJlbHBlcnNpc3Q7CisJQ29sbGVjdGVkQ29tbWFuZCAgICpj bWQ7CisJY2hhcgkJCSAgICpqc29uX3N0cmluZzsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RS SUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2Vy IG1hbmFnZXIiKTsKKworCWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENv bW1hbmQ7CisKKwlBc3NlcnQoY21kICYmIGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUpOworCisJ cmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLmFsdGVyVGFibGUub2JqZWN0 SWQpOworCisJLyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hv c2UgdGFyZ2V0IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFibGUuCisJICoKKwkgKiBXZSB3 aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dl ZCB0YWJsZXMKKwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJz Y3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBs YXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJICogcmV3cml0ZSBt ZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJICovCisJaWYgKHJlbHBlcnNp c3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxM KTsKKworCS8qIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93 IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAqLworCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5 X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJTG9n TG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwg RENUX1RhYmxlQWx0ZXIsCisJCQkJCQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9zdHJpbmcp ICsgMSk7CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQorCisvKgorICogcHVi bGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwg Y29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV9kZGxf Y29tbWFuZF9lbmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlzbGlz dF9pdGVyICBpdGVyOworCURlcGFyc2VkQ29tbWFuZFR5cGUgdHlwZTsKKwlPaWQgcmVsaWQ7CisK KwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJu b3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwlmb3JlYWNoKGxjLCBjdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0KQorCXsKKwkJY2hhcgkJCQlyZWxwZXJz aXN0ID0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOworCQlDb2xsZWN0ZWRDb21tYW5kICAgKmNt ZCA9IGxmaXJzdChsYyk7CisJCWNoYXIJCQkgICAqanNvbl9zdHJpbmc7CisKKwkJLyogUmV3cml0 ZSBEREwgaGFzIGJlZW4gaGFuZGxlZCBpbiB0YWJsZV9yZXdyaXRlIHRyaWdnZXIgKi8KKwkJaWYg KGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUpCisJCXsKKwkJCVJlbmFtZVN0bXQgKnJlbmFtZVN0 bXQgPSAoUmVuYW1lU3RtdCAqKWNtZC0+cGFyc2V0cmVlOworCisJCQlpZiAocmVuYW1lU3RtdCAm JiByZW5hbWVTdG10LT5yZWxhdGlvblR5cGUgIT0gT0JKRUNUX1RZUEUgJiYKKwkJCQlyZW5hbWVT dG10LT5yZWxhdGlvblR5cGUgIT0gT0JKRUNUX1RBQkxFKQorCQkJCWNvbnRpbnVlOworCQl9CisK KwkJaWYgKGNtZC0+dHlwZSA9PSBTQ1RfU2ltcGxlICYmCisJCQkhT2lkSXNWYWxpZChjbWQtPmQu c2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQpKQorCQkJY29udGludWU7CisKKwkJaWYgKGNtZC0+dHlw ZSA9PSBTQ1RfQWx0ZXJUYWJsZSkKKwkJeworCQkJcmVsaWQgPSBjbWQtPmQuYWx0ZXJUYWJsZS5v YmplY3RJZDsKKwkJCXR5cGUgPSBEQ1RfVGFibGVBbHRlcjsKKwkJfQorCQllbHNlCisJCXsKKwkJ CS8qIE9ubHkgU0NUX1NpbXBsZSBmb3Igbm93ICovCisJCQlyZWxpZCA9IGNtZC0+ZC5zaW1wbGUu YWRkcmVzcy5vYmplY3RJZDsKKwkJCXR5cGUgPSBEQ1RfU2ltcGxlQ21kOworCQl9CisKKwkJaWYg KGdldF9yZWxfcmVsa2luZChyZWxpZCkpCisJCQlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0 ZW5jZShyZWxpZCk7CisKKwkJLyoKKwkJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNv bW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkJ ICoKKwkJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNv IHRoYXQgdW5sb2dnZWQgdGFibGVzCisJCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVy ZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcyBtYWtlcyBpdAorCQkgKiBwb3NzaWJsZSB0 byBkaXJlY3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5n CisJCSAqIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCQkg Ki8KKwkJaWYgKHJlbHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJCWNvbnRpbnVl OworCisJCS8qCisJCSAqIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRv IGFsbG93IGRlY29kaW5nIG9mIHRoZQorCQkgKiBzYW1lLgorCQkgKi8KKwkJanNvbl9zdHJpbmcg PSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNlKTsKKworCQlpZiAoanNvbl9zdHJp bmcgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBh cnNlIiwgcmVsaWQsIHR5cGUsIGpzb25fc3RyaW5nLAorCQkJCQkJCSBzdHJsZW4oanNvbl9zdHJp bmcpICsgMSk7CisJfQorCisJc2xpc3RfZm9yZWFjaChpdGVyLCAmKGN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+U1FMRHJvcExpc3QpKQorCXsKKwkJdm9sYXRpbGUgU1FMRHJvcE9iamVjdCAqb2Jq OworCQlEcm9wU3RtdAkJCSAgICpzdG10OworCQlFdmVudFRyaWdnZXJEYXRhIAkgICAqdHJpZ2Rh dGE7CisJCWNoYXIJCQkJICAgKmNvbW1hbmQ7CisJCURlcGFyc2VkQ29tbWFuZFR5cGUJCWNtZHR5 cGU7CisJCWNvbnN0IGNoYXIJCQkgICAqdG1wdHlwZTsKKworCQl0cmlnZGF0YSA9IChFdmVudFRy aWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4dDsKKwkJc3RtdAkgPSAoRHJvcFN0bXQgKikgdHJp Z2RhdGEtPnBhcnNldHJlZTsKKworCQlvYmogPSBzbGlzdF9jb250YWluZXIoU1FMRHJvcE9iamVj dCwgbmV4dCwgaXRlci5jdXIpOworCisJCWlmIChzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGFi bGUiKSA9PSAwKQorCQkJY21kdHlwZSA9IERDVF9UYWJsZURyb3BFbmQ7CisJCWVsc2UgaWYgKHN0 cmNtcChvYmotPm9iamVjdHR5cGUsICJzZXF1ZW5jZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9i ai0+b2JqZWN0dHlwZSwgInNjaGVtYSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0 dHlwZSwgImluZGV4IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiZnVu Y3Rpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJwcm9jZWR1cmUi KSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJvcGVyYXRvciIpID09IDAg fHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgIm9wZXJhdG9yIGNsYXNzIikgPT0gMCB8 fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAib3BlcmF0b3IgZmFtaWx5IikgPT0gMCB8 fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiY2FzdCIpID09IDAgfHwKKwkJCQkgc3Ry Y21wKG9iai0+b2JqZWN0dHlwZSwgInR5cGUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9i amVjdHR5cGUsICJkb21haW4iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUs ICJ0cmlnZ2VyIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiY29udmVy c2lvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInBvbGljeSIpID09 IDAJfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInJ1bGUiKSA9PSAwIHx8CisJCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJleHRlbnNpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNt cChvYmotPm9iamVjdHR5cGUsICJmb3JlaWduLWRhdGEgd3JhcHBlciIpID09IDAgfHwKKwkJCQkg c3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRleHQgc2VhcmNoIGNvbmZpZ3VyYXRpb24iKSA9PSAw IHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5 IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFyY2ggcGFy c2VyIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFyY2gg dGVtcGxhdGUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0cmFuc2Zv cm0iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJzZXJ2ZXIiKSA9PSAw IHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJjb2xsYXRpb24iKSA9PSAwIHx8CisJ CQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ1c2VyIG1hcHBpbmciKSA9PSAwKQorCQkJY21k dHlwZSA9IERDVF9PYmplY3REcm9wOworCQllbHNlCisJCQljb250aW51ZTsKKworCQkvKgorCQkg KiBDaGFuZ2UgZm9yZWlnbi1kYXRhIHdyYXBwZXIgdG8gZm9yZWlnbiBkYXRhIHdyYXBwZXIuCisJ CSAqLworCQlpZiAoc3RybmNtcChvYmotPm9iamVjdHR5cGUsICJmb3JlaWduLWRhdGEgd3JhcHBl ciIsIDIwKSA9PSAwKQorCQl7CisJCQl0bXB0eXBlID0gcHN0cmR1cCgiZm9yZWlnbiBkYXRhIHdy YXBwZXIiKTsKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3BfY29tbWFuZChvYmotPm9iamlkZW50 aXR5LCB0bXB0eXBlLAorCQkJCQkJCQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsKKwkJfQorCisJCS8q CisJCSAqIG9iamVjdCBpZGVudGl0eSBuZWVkcyB0byBiZSBtb2RpZmllZCB0byBtYWtlIHRoZSBk cm9wIHdvcmsKKwkJICoKKwkJICogRlJPTTogPHJvbGU+IG9uIHNlcnZlciA8c2VydmVybmFtZT4K KwkJICogVE8gIDogZm9yID5yb2xlPiBzZXJ2ZXIgPHNlcnZlcm5hbWU+CisJCSAqCisJCSAqLwor CQllbHNlIGlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgInVzZXIgbWFwcGluZyIsIDEyKSA9 PSAwKQorCQl7CisJCQljaGFyICpvbl9zZXJ2ZXI7CisKKwkJCXRtcHR5cGUgPSBwYWxsb2Moc3Ry bGVuKG9iai0+b2JqaWRlbnRpdHkpICsgMik7CisJCQlvbl9zZXJ2ZXIgPSBzdHJzdHIob2JqLT5v YmppZGVudGl0eSwgIm9uIHNlcnZlciIpOworCisJCQlzcHJpbnRmKChjaGFyICopdG1wdHlwZSwg ImZvciAiKTsKKwkJCXN0cm5jYXQoKGNoYXIgKil0bXB0eXBlLCBvYmotPm9iamlkZW50aXR5LCBv bl9zZXJ2ZXIgLSBvYmotPm9iamlkZW50aXR5KTsKKwkJCXN0cmNhdCgoY2hhciAqKXRtcHR5cGUs IG9uX3NlcnZlciArIDMpOworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKHRtcHR5 cGUsIG9iai0+b2JqZWN0dHlwZSwKKwkJCQkJCQkJCQkgICBzdG10LT5iZWhhdmlvcik7CisJCX0K KwkJZWxzZQorCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9iai0+b2JqaWRlbnRp dHksIG9iai0+b2JqZWN0dHlwZSwKKwkJCQkJCQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsKKworCQlp ZiAoY29tbWFuZCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJTG9nTG9naWNhbERETE1lc3Nh Z2UoImRlcGFyc2UiLCBvYmotPmFkZHJlc3Mub2JqZWN0SWQsIGNtZHR5cGUsCisJCQkJCQkJIGNv bW1hbmQsIHN0cmxlbihjb21tYW5kKSArIDEpOworCX0KKworCXJldHVybiBQb2ludGVyR2V0RGF0 dW0oTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlv bmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IGE4 Yjc1ZWIuLjFiYTllZjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBA IC0zNywxMCArMzcsMTIgQEAKICNpbmNsdWRlICJjb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuaCIK ICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAi bm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVk ZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jb2xsYXRl LmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgiCisjaW5jbHVkZSAicGFyc2Vy L3BhcnNlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInV0aWxzL2Fj bC5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCkBAIC05Niw2ICs5OCw3IEBAIHBhcnNlX3B1 YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCXB1YmFjdGlvbnMtPnB1YnVw ZGF0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHViZGVsZXRlID0gdHJ1ZTsKIAlwdWJhY3Rpb25z LT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJcHViYWN0aW9ucy0+cHViZGRsID0gZmFsc2U7CiAJKnB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2U7CiAKIAkvKiBQYXJzZSBvcHRpb25zICov CkBAIC0xNDMsNiArMTQ2LDggQEAgcGFyc2VfcHVibGljYXRpb25fb3B0aW9ucyhQYXJzZVN0YXRl ICpwc3RhdGUsCiAJCQkJCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSA9IHRydWU7CiAJCQkJZWxzZSBp ZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAidHJ1bmNhdGUiKSA9PSAwKQogCQkJCQlwdWJhY3Rpb25z LT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAi ZGRsIikgPT0gMCkKKwkJCQkJcHViYWN0aW9ucy0+cHViZGRsID0gdHJ1ZTsKIAkJCQllbHNlCiAJ CQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1Ip LApAQCAtNzI4LDYgKzczMyw1MyBAQCBDaGVja1B1YlJlbGF0aW9uQ29sdW1uTGlzdChjaGFyICpw dWJuYW1lLCBMaXN0ICp0YWJsZXMsCiB9CiAKIC8qCisgKiBDcmVhdGUgZXZlbnQgdHJpZ2dlciB3 aGljaCBpcyB1c2VkIGZvciBEREwgcmVwbGljYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitDcmVh dGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKGNoYXIgKmV2ZW50bmFtZSwgQ29tbWFuZFRhZyAqY29t bWFuZHMsCisJCQkJCQkJIGludCBuY29tbWFuZHMsIE9iamVjdEFkZHJlc3MgcHViYWRkcmVzcywK KwkJCQkJCQkgT2lkIHB1Ym9pZCkKK3sKKwlpbnQJCQkJCWk7CisJTGlzdAkJCSAgICp0YWdzID0g TklMOworCU9pZAkJCQkJdHJpZ2dlcl9pZDsKKwlPYmplY3RBZGRyZXNzCQlyZWZlcmVuY2VkOwor CUNyZWF0ZUV2ZW50VHJpZ1N0bXQgKmRkbF90cmlnZ2VyOworCWNoYXIJCQkJdHJpZ2dlcl9uYW1l W05BTUVEQVRBTEVOXTsKKwljaGFyCQkJCXRyaWdnZXJfZnVuY19uYW1lW05BTUVEQVRBTEVOXTsK KwlzdGF0aWMgY29uc3QgY2hhciAgICp0cmlnZ2VyX25hbWVfcHJlZml4ID0gInBnX2RlcGFyc2Vf dHJpZ18lc18ldSI7CisJc3RhdGljIGNvbnN0IGNoYXIgICAqdHJpZ2dlcl9mdW5jX3ByZWZpeCA9 ICJwdWJsaWNhdGlvbl9kZXBhcnNlXyVzIjsKKworCWRkbF90cmlnZ2VyID0gbWFrZU5vZGUoQ3Jl YXRlRXZlbnRUcmlnU3RtdCk7CisKKwlzbnByaW50Zih0cmlnZ2VyX25hbWUsIHNpemVvZih0cmln Z2VyX25hbWUpLCB0cmlnZ2VyX25hbWVfcHJlZml4LAorCQkJIGV2ZW50bmFtZSwgcHVib2lkKTsK KwlzbnByaW50Zih0cmlnZ2VyX2Z1bmNfbmFtZSwgc2l6ZW9mKHRyaWdnZXJfZnVuY19uYW1lKSwg dHJpZ2dlcl9mdW5jX3ByZWZpeCwKKwkJCSBldmVudG5hbWUpOworCisJZGRsX3RyaWdnZXItPnRy aWduYW1lID0gcHN0cmR1cCh0cmlnZ2VyX25hbWUpOworCWRkbF90cmlnZ2VyLT5ldmVudG5hbWUg PSBldmVudG5hbWU7CisJZGRsX3RyaWdnZXItPmZ1bmNuYW1lID0gU3lzdGVtRnVuY05hbWUodHJp Z2dlcl9mdW5jX25hbWUpOworCisJZm9yIChpID0gMDsgaSA8IG5jb21tYW5kczsgaSsrKQorCXsK KwkJU3RyaW5nICp0YWcgPSBtYWtlU3RyaW5nKHBzdHJkdXAoR2V0Q29tbWFuZFRhZ05hbWUoY29t bWFuZHNbaV0pKSk7CisJCXRhZ3MgPSBsYXBwZW5kKHRhZ3MsIHRhZyk7CisJfQorCisJZGRsX3Ry aWdnZXItPndoZW5jbGF1c2UgPSBsaXN0X21ha2UxKG1ha2VEZWZFbGVtKCJ0YWciLCAoTm9kZSAq KSB0YWdzLCAtMSkpOworCisJdHJpZ2dlcl9pZCA9IENyZWF0ZUV2ZW50VHJpZ2dlcihkZGxfdHJp Z2dlcik7CisKKwkvKgorCSAqIFJlZ2lzdGVyIHRoZSBldmVudCB0cmlnZ2VycyBhcyBpbnRlcm5h bGx5IGRlcGVuZGVudCBvbiB0aGUKKwkgKiBwdWJsaWNhdGlvbi4KKwkgKi8KKwlPYmplY3RBZGRy ZXNzU2V0KHJlZmVyZW5jZWQsIEV2ZW50VHJpZ2dlclJlbGF0aW9uSWQsIHRyaWdnZXJfaWQpOwor CXJlY29yZERlcGVuZGVuY3lPbigmcmVmZXJlbmNlZCwgJnB1YmFkZHJlc3MsIERFUEVOREVOQ1lf SU5URVJOQUwpOworfQorCisvKgogICogQ3JlYXRlIG5ldyBwdWJsaWNhdGlvbi4KICAqLwogT2Jq ZWN0QWRkcmVzcwpAQCAtNzk3LDYgKzg0OSw4IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQlCb29sR2V0RGF0dW0o cHViYWN0aW9ucy5wdWJkZWxldGUpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRy dW5jYXRlIC0gMV0gPQogCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CisJ dmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPQorCQlCb29sR2V0RGF0dW0o cHViYWN0aW9ucy5wdWJkZGwpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnZpYXJv b3QgLSAxXSA9CiAJCUJvb2xHZXREYXR1bShwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CiAK QEAgLTg1Nyw2ICs5MTEsMTE0IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQl9CiAJfQogCisJLyoKKwkgKiBDcmVh dGUgYW4gZXZlbnQgdHJpZ2dlciB0byBhbGxvdyBsb2dnaW5nIG9mIERETCBzdGF0ZW1lbnRzLgor CSAqCisJICogVE9ETzogV2UgbmVlZCB0byBmaW5kIGEgYmV0dGVyIHN5bnRheCB0byBhbGxvdyBy ZXBsaWNhdGlvbiBvZiBEREwKKwkgKiBzdGF0ZW1lbnRzLgorCSAqCisJICogWFhYOiBUaGlzIGNv ZGUgaXMganVzdCB0byBzaG93IHRoZSByZXBsaWNhdGlvbiBvZiBDUkVBVEUvQUxURVIvRFJPUAor CSAqIFRBQkxFIHdvcmtzLiBXZSBuZWVkIHRvIGVuaGFuY2UgdGhpcyBvbmNlIHRoZSBhcHByb2Fj aCBmb3IgRERMCisJICogcmVwbGljYXRpb24gaXMgZmluYWxpemVkLgorCSAqLworCWlmIChwdWJh Y3Rpb25zLnB1YmRkbCkKKwl7CisJCUNvbW1hbmRUYWcJc3RhcnRfY29tbWFuZHNbXSA9IHtDTURU QUdfRFJPUF9UQUJMRX07CisJCUNvbW1hbmRUYWcJcmV3cml0ZV9jb21tYW5kc1tdID0ge0NNRFRB R19BTFRFUl9UQUJMRX07CisKKwkJQ29tbWFuZFRhZwllbmRfY29tbWFuZHNbXSA9IHsKKwkJCUNN RFRBR19DUkVBVEVfVVNFUl9NQVBQSU5HLAorCQkJQ01EVEFHX0FMVEVSX1VTRVJfTUFQUElORywK KwkJCUNNRFRBR19DUkVBVEVfU0VSVkVSLAorCQkJQ01EVEFHX0FMVEVSX1NFUlZFUiwKKwkJCUNN RFRBR19EUk9QX1NFUlZFUiwKKwkJCUNNRFRBR19DUkVBVEVfQ09MTEFUSU9OLAorCQkJQ01EVEFH X0FMVEVSX0NPTExBVElPTiwKKwkJCUNNRFRBR19EUk9QX0NPTExBVElPTiwKKwkJCUNNRFRBR19D UkVBVEVfVFJBTlNGT1JNLAorCQkJQ01EVEFHX0RST1BfVFJBTlNGT1JNLAorCQkJQ01EVEFHX0NS RUFURV9GT1JFSUdOX0RBVEFfV1JBUFBFUiwKKwkJCUNNRFRBR19BTFRFUl9GT1JFSUdOX0RBVEFf V1JBUFBFUiwKKwkJCUNNRFRBR19EUk9QX0ZPUkVJR05fREFUQV9XUkFQUEVSLAorCQkJQ01EVEFH X0NSRUFURV9FWFRFTlNJT04sCisJCQlDTURUQUdfQUxURVJfRVhURU5TSU9OLAorCQkJQ01EVEFH X0RST1BfRVhURU5TSU9OLAorCQkJQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9DT05GSUdVUkFU SU9OLAorCQkJQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX0NPTkZJR1VSQVRJT04sCisJCQlDTURU QUdfRFJPUF9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLAorCQkJQ01EVEFHX0NSRUFURV9URVhU X1NFQVJDSF9ESUNUSU9OQVJZLAorCQkJQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX0RJQ1RJT05B UlksCisJCQlDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9ESUNUSU9OQVJZLAorCQkJQ01EVEFHX0NS RUFURV9URVhUX1NFQVJDSF9QQVJTRVIsCisJCQlDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9QQVJT RVIsCisJCQlDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX1RFTVBMQVRFLAorCQkJQ01EVEFHX0RS T1BfVEVYVF9TRUFSQ0hfVEVNUExBVEUsCisJCQlDTURUQUdfQ1JFQVRFX1BPTElDWSwKKwkJCUNN RFRBR19BTFRFUl9QT0xJQ1ksCisJCQlDTURUQUdfRFJPUF9QT0xJQ1ksCisJCQlDTURUQUdfQ1JF QVRFX0NPTlZFUlNJT04sCisJCQlDTURUQUdfQUxURVJfQ09OVkVSU0lPTiwKKwkJCUNNRFRBR19E Uk9QX0NPTlZFUlNJT04sCisJCQlDTURUQUdfQ1JFQVRFX0RPTUFJTiwKKwkJCUNNRFRBR19BTFRF Ul9ET01BSU4sCisJCQlDTURUQUdfRFJPUF9ET01BSU4sCisJCQlDTURUQUdfQUxURVJfSU5ERVgs CisJCQlDTURUQUdfQ1JFQVRFX1RZUEUsCisJCQlDTURUQUdfRFJPUF9UWVBFLAorCQkJQ01EVEFH X0FMVEVSX1RZUEUsCisJCQlDTURUQUdfQ1JFQVRFX0NBU1QsCisJCQlDTURUQUdfQUxURVJfQ0FT VCwKKwkJCUNNRFRBR19EUk9QX0NBU1QsCisJCQlDTURUQUdfQ1JFQVRFX09QRVJBVE9SLAorCQkJ Q01EVEFHX0NSRUFURV9PUEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19DUkVBVEVfT1BFUkFUT1Jf RkFNSUxZLAorCQkJQ01EVEFHX0FMVEVSX09QRVJBVE9SX0ZBTUlMWSwKKwkJCUNNRFRBR19BTFRF Ul9PUEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19BTFRFUl9PUEVSQVRPUiwKKwkJCUNNRFRBR19E Uk9QX09QRVJBVE9SLAorCQkJQ01EVEFHX0RST1BfT1BFUkFUT1JfQ0xBU1MsCisJCQlDTURUQUdf RFJPUF9PUEVSQVRPUl9GQU1JTFksCisJCQlDTURUQUdfQ1JFQVRFX1BST0NFRFVSRSwKKwkJCUNN RFRBR19BTFRFUl9QUk9DRURVUkUsCisJCQlDTURUQUdfRFJPUF9QUk9DRURVUkUsCisJCQlDTURU QUdfQ1JFQVRFX0ZVTkNUSU9OLAorCQkJQ01EVEFHX0FMVEVSX0ZVTkNUSU9OLAorCQkJQ01EVEFH X0RST1BfRlVOQ1RJT04sCisJCQlDTURUQUdfQ1JFQVRFX1RSSUdHRVIsCisJCQlDTURUQUdfQUxU RVJfVFJJR0dFUiwKKwkJCUNNRFRBR19EUk9QX1RBQkxFLAorCQkJQ01EVEFHX0NSRUFURV9UQUJM RSwKKwkJCUNNRFRBR19BTFRFUl9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVfU0VRVUVOQ0UsCisJ CQlDTURUQUdfQUxURVJfU0VRVUVOQ0UsCisJCQlDTURUQUdfRFJPUF9TRVFVRU5DRSwKKwkJCUNN RFRBR19DUkVBVEVfU0NIRU1BLAorCQkJQ01EVEFHX0FMVEVSX1NDSEVNQSwKKwkJCUNNRFRBR19E Uk9QX1NDSEVNQSwKKwkJCUNNRFRBR19DUkVBVEVfSU5ERVgsCisJCQlDTURUQUdfRFJPUF9JTkRF WCwKKwkJCUNNRFRBR19BTFRFUl9JTkRFWCwKKwkJCUNNRFRBR19HUkFOVCwKKwkJCUNNRFRBR19S RVZPS0UsCisJCQlDTURUQUdfQ1JFQVRFX1JVTEUsCisJCQlDTURUQUdfQUxURVJfUlVMRSwKKwkJ CUNNRFRBR19EUk9QX1JVTEUsCisJCQlDTURUQUdfUkVGUkVTSF9NQVRFUklBTElaRURfVklFVwor CQl9OworCisJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIgKi8K KwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5kIiwgZW5kX2Nv bW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lk KTsKKworCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX3N0YXJ0IGV2ZW50IHRyaWdnZXIgKi8K KwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfc3RhcnQiLCBzdGFy dF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihzdGFydF9jb21tYW5kcyksIG15c2VsZiwg cHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIHRhYmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAq LworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0 ZV9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxm LCBwdWJvaWQpOworCX0KKwogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAK IAlJbnZva2VPYmplY3RQb3N0Q3JlYXRlSG9vayhQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1Ym9p ZCwgMCk7CkBAIC05OTUsNiArMTE1Nyw5IEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNl U3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAKIAkJdmFsdWVzW0Fu dW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IEJvb2xHZXREYXR1bShwdWJhY3Rp b25zLnB1YnRydW5jYXRlKTsKIAkJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVu Y2F0ZSAtIDFdID0gdHJ1ZTsKKworCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGwg LSAxXSA9IEJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRkbCk7CisJCXJlcGxhY2VzW0FudW1f cGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPSB0cnVlOwogCX0KIAogCWlmIChwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdF9naXZlbikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggMjAx MzVlZi4uZTdjYzBhZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRz LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTUyNTMsNyArNTI1 Myw3IEBAIEFURXhlY0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiAJ ICogUmVwb3J0IHRoZSBzdWJjb21tYW5kIHRvIGludGVyZXN0ZWQgZXZlbnQgdHJpZ2dlcnMuCiAJ ICovCiAJaWYgKGNtZCkKLQkJRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoKE5v ZGUgKikgY21kLCBhZGRyZXNzKTsKKwkJRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJj bWQoKE5vZGUgKikgY21kLCBhZGRyZXNzLCB0YWItPnJld3JpdGUpOwogCiAJLyoKIAkgKiBCdW1w IHRoZSBjb21tYW5kIGNvdW50ZXIgdG8gZW5zdXJlIHRoZSBuZXh0IHN1YmNvbW1hbmQgaW4gdGhl IHNlcXVlbmNlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01h a2VmaWxlIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQppbmRleCBj NGUyZmRlLi5mM2VlYjY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZp bGUKQEAgLTE2LDYgKzE2LDcgQEAgb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLUkkKHNyY2RpcikgJChD UFBGTEFHUykKIAogT0JKUyA9IFwKIAlkZWNvZGUubyBcCisJZGRsbWVzc2FnZS5vXAogCWxhdW5j aGVyLm8gXAogCWxvZ2ljYWwubyBcCiAJbG9naWNhbGZ1bmNzLm8gXApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi41MDkzNTIzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKQEAgLTAsMCArMSw4NiBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogZGRsbWVzc2FnZS5jCisgKgkgIExvZ2ljYWwgRERMIG1lc3NhZ2VzLgor ICoKKyAqIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIE5PVEVTCisgKgorICogTG9naWNhbCBEREwg bWVzc2FnZXMgYWxsb3cgWExPRyBsb2dnaW5nIG9mIERETCBjb21tYW5kIHN0cmluZ3MgdGhhdAor ICogZ2V0IHBhc3NlZCB0byB0aGUgbG9naWNhbCBkZWNvZGluZyBwbHVnaW4uIEluIG5vcm1hbCBY TE9HIHByb2Nlc3NpbmcgdGhleQorICogYXJlIHNhbWUgYXMgTk9PUC4KKyAqCisgKiBVbmxpa2Ug Z2VuZXJpYyBsb2dpY2FsIG1lc3NhZ2VzLCB0aGVzZSBEREwgbWVzc2FnZXMgaGF2ZSBvbmx5IHRy YW5zYWN0aW9uYWwKKyAqIG1vZGUuTm90ZSBieSBkZWZhdWx0IERETHMgaW4gUG9zdGdyZVNRTCBh cmUgdHJhbnNhY3Rpb25hbC4KKyAqCisgKiBUaGVzZSBtZXNzYWdlcyBhcmUgcGFydCBvZiBjdXJy ZW50IHRyYW5zYWN0aW9uIGFuZCB3aWxsIGJlIHNlbnQgdG8KKyAqIGRlY29kaW5nIHBsdWdpbiB1 c2luZyBpbiBhIHNhbWUgd2F5IGFzIERNTCBvcGVyYXRpb25zLgorICoKKyAqIEV2ZXJ5IG1lc3Nh Z2UgY2FycmllcyBwcmVmaXggdG8gYXZvaWQgY29uZmxpY3RzIGJldHdlZW4gZGlmZmVyZW50IGRl Y29kaW5nCisgKiBwbHVnaW5zLiBUaGUgcGx1Z2luIGF1dGhvcnMgbXVzdCB0YWtlIGV4dHJhIGNh cmUgdG8gdXNlIHVuaXF1ZSBwcmVmaXgsCisgKiBnb29kIG9wdGlvbnMgc2VlbXMgdG8gYmUgZm9y IGV4YW1wbGUgdG8gdXNlIHRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24uCisgKgorICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJh Y2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJu b2Rlcy9leGVjbm9kZXMuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCisjaW5j bHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxz LmgiCisKKy8qCisgKiBXcml0ZSBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlIGludG8gWExv Zy4KKyAqLworWExvZ1JlY1B0cgorTG9nTG9naWNhbERETE1lc3NhZ2UoY29uc3QgY2hhciAqcHJl Zml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJIGNvbnN0 IGNoYXIgKm1lc3NhZ2UsIHNpemVfdCBzaXplKQoreworCXhsX2xvZ2ljYWxfZGRsX21lc3NhZ2Ug eGxyZWM7CisKKwkvKgorCSAqIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgdHJhbnNhY3Rpb24gaWQu CisJICovCisJQXNzZXJ0KElzVHJhbnNhY3Rpb25TdGF0ZSgpKTsKKwlHZXRDdXJyZW50VHJhbnNh Y3Rpb25JZCgpOworCisJeGxyZWMuZGJJZCA9IE15RGF0YWJhc2VJZDsKKwkvKiB0cmFpbGluZyB6 ZXJvIGlzIGNyaXRpY2FsOyBzZWUgbG9naWNhbGRkbG1zZ19kZXNjICovCisJeGxyZWMucHJlZml4 X3NpemUgPSBzdHJsZW4ocHJlZml4KSArIDE7CisJeGxyZWMubWVzc2FnZV9zaXplID0gc2l6ZTsK Kwl4bHJlYy5yZWxpZCA9IHJlbGlkOworCXhscmVjLmNtZHR5cGUgPSBjbWR0eXBlOworCisJWExv Z0JlZ2luSW5zZXJ0KCk7CisJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAmeGxyZWMsIFNpemVP ZkxvZ2ljYWxERExNZXNzYWdlKTsKKwlYTG9nUmVnaXN0ZXJEYXRhKHVuY29uc3RpZnkoY2hhciAq LCBwcmVmaXgpLCB4bHJlYy5wcmVmaXhfc2l6ZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0 aWZ5KGNoYXIgKiwgbWVzc2FnZSksIHNpemUpOworCisJLyogYWxsb3cgb3JpZ2luIGZpbHRlcmlu ZyAqLworCVhMb2dTZXRSZWNvcmRGbGFncyhYTE9HX0lOQ0xVREVfT1JJR0lOKTsKKworCXJldHVy biBYTG9nSW5zZXJ0KFJNX0xPR0lDQUxERExNU0dfSUQsIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FH RSk7Cit9CisKKy8qCisgKiBSZWRvIGlzIGJhc2ljYWxseSBqdXN0IG5vb3AgZm9yIGxvZ2ljYWwg ZGVjb2RpbmcgZGRsIG1lc3NhZ2VzLgorICovCit2b2lkCitsb2dpY2FsZGRsbXNnX3JlZG8oWExv Z1JlYWRlclN0YXRlICpyZWNvcmQpCit7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhy ZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfRERM X01FU1NBR0UpCisJCWVsb2coUEFOSUMsICJsb2dpY2FsZGRsbXNnX3JlZG86IHVua25vd24gb3Ag Y29kZSAldSIsIGluZm8pOworCisJLyogVGhpcyBpcyBvbmx5IGludGVyZXN0aW5nIGZvciBsb2dp Y2FsIGRlY29kaW5nLCBzZWUgZGVjb2RlLmMuICovCit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9kZWNvZGUuYwppbmRleCAyY2MwYWM5Li4xZjJjNzUxIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJh Y2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVz c2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC02 MDQsNiArNjA1LDQ2IEBAIGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQogfQogCiAvKgorICogSGFuZGxlIHJtZ3IgTE9H SUNBTERETE1TR19JRCByZWNvcmRzIGZvciBEZWNvZGVSZWNvcmRJbnRvUmVvcmRlckJ1ZmZlcigp LgorICovCit2b2lkCitsb2dpY2FsZGRsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKK3sKKwlTbmFwQnVpbGQgICpidWlsZGVyID0g Y3R4LT5zbmFwc2hvdF9idWlsZGVyOworCVhMb2dSZWFkZXJTdGF0ZSAqciA9IGJ1Zi0+cmVjb3Jk OworCVRyYW5zYWN0aW9uSWQgeGlkID0gWExvZ1JlY0dldFhpZChyKTsKKwl1aW50OAkJaW5mbyA9 IFhMb2dSZWNHZXRJbmZvKHIpICYgflhMUl9JTkZPX01BU0s7CisJUmVwT3JpZ2luSWQgb3JpZ2lu X2lkID0gWExvZ1JlY0dldE9yaWdpbihyKTsKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICptZXNz YWdlOworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQllbG9nKEVS Uk9SLCAidW5leHBlY3RlZCBSTV9MT0dJQ0FMRERMTVNHX0lEIHJlY29yZCB0eXBlOiAldSIsIGlu Zm8pOworCisJUmVvcmRlckJ1ZmZlclByb2Nlc3NYaWQoY3R4LT5yZW9yZGVyLCBYTG9nUmVjR2V0 WGlkKHIpLCBidWYtPm9yaWdwdHIpOworCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBoYXZlIHNuYXBz aG90IG9yIHdlIGFyZSBqdXN0IGZhc3QtZm9yd2FyZGluZywgdGhlcmUgaXMgbm8KKwkgKiBwb2lu dCBpbiBkZWNvZGluZyBkZGwgbWVzc2FnZXMuCisJICovCisJaWYgKFNuYXBCdWlsZEN1cnJlbnRT dGF0ZShidWlsZGVyKSA8IFNOQVBCVUlMRF9GVUxMX1NOQVBTSE9UIHx8CisJCWN0eC0+ZmFzdF9m b3J3YXJkKQorCQlyZXR1cm47CisKKwltZXNzYWdlID0gKHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2Ug KikgWExvZ1JlY0dldERhdGEocik7CisKKwlpZiAobWVzc2FnZS0+ZGJJZCAhPSBjdHgtPnNsb3Qt PmRhdGEuZGF0YWJhc2UgfHwKKwkJRmlsdGVyQnlPcmlnaW4oY3R4LCBvcmlnaW5faWQpKQorCQly ZXR1cm47CisKKwlpZiAoU25hcEJ1aWxkUHJvY2Vzc0NoYW5nZShidWlsZGVyLCB4aWQsIGJ1Zi0+ b3JpZ3B0cikpCisJCVJlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoY3R4LT5yZW9yZGVyLCB4 aWQsIGJ1Zi0+ZW5kcHRyLAorCQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2UsIC8qIGZpcnN0IHBh cnQgb2YgbWVzc2FnZSBpcyBwcmVmaXggKi8KKwkJCQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlX3Np emUsCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZSArIG1lc3NhZ2UtPnByZWZpeF9zaXplLAor CQkJCQkJCQkJIG1lc3NhZ2UtPnJlbGlkLCBtZXNzYWdlLT5jbWR0eXBlKTsKK30KKworLyoKICAq IENvbnNvbGlkYXRlZCBjb21taXQgcmVjb3JkIGhhbmRsaW5nIGJldHdlZW4gdGhlIGRpZmZlcmVu dCBmb3JtIG9mIGNvbW1pdAogICogcmVjb3Jkcy4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbG9naWNhbC5jCmluZGV4IDYyNWE3ZjQuLjk4OTY5YzcgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk ZSAiZm1nci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgor I2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlv bi9kZWNvZGUuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC03Myw2ICs3NCwxMCBAQCBzdGF0aWMgdm9pZCB0cnVu Y2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiBzdGF0aWMgdm9pZCBtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUs IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNu LCBib29sIHRyYW5zYWN0aW9uYWwsCiAJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LCBTaXpl IG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBkZGxtZXNz YWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKKwkJCQkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBjb25zdCBjaGFyICpwcmVmaXgs CisJCQkJCQkJCSAgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJ CQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCiAvKiBzdHJl YW1pbmcgY2FsbGJhY2tzICovCiBzdGF0aWMgdm9pZCBzdHJlYW1fc3RhcnRfY2Jfd3JhcHBlcihS ZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLApAQCAtOTAsNiArOTUs MTEgQEAgc3RhdGljIHZvaWQgc3RyZWFtX2NoYW5nZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIg KmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4KIHN0YXRpYyB2b2lkIHN0cmVhbV9tZXNzYWdl X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK IAkJCQkJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLAog CQkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBj aGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHN0cmVhbV9kZGxtZXNzYWdlX2NiX3dyYXBwZXIo UmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkg WExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LAor CQkJCQkJCQkJCSBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJ CQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIHZv aWQgc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAgIGludCBucmVsYXRpb25zLCBSZWxhdGlvbiBy ZWxhdGlvbnNbXSwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKTsKIApAQCAtMjE4LDYgKzIy OCw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25z LAogCWN0eC0+cmVvcmRlci0+YXBwbHlfdHJ1bmNhdGUgPSB0cnVuY2F0ZV9jYl93cmFwcGVyOwog CWN0eC0+cmVvcmRlci0+Y29tbWl0ID0gY29tbWl0X2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVy LT5tZXNzYWdlID0gbWVzc2FnZV9jYl93cmFwcGVyOworCWN0eC0+cmVvcmRlci0+ZGRsbWVzc2Fn ZSA9IGRkbG1lc3NhZ2VfY2Jfd3JhcHBlcjsKIAogCS8qCiAJICogVG8gc3VwcG9ydCBzdHJlYW1p bmcsIHdlIHJlcXVpcmUgc3RhcnQvc3RvcC9hYm9ydC9jb21taXQvY2hhbmdlCkBAIC0yMzQsNiAr MjQ1LDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlv bnMsCiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fY29tbWl0X2NiICE9IE5VTEwpIHx8CiAJCShj dHgtPmNhbGxiYWNrcy5zdHJlYW1fY2hhbmdlX2NiICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxi YWNrcy5zdHJlYW1fbWVzc2FnZV9jYiAhPSBOVUxMKSB8fAorCQkoY3R4LT5jYWxsYmFja3Muc3Ry ZWFtX2RkbG1lc3NhZ2VfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV90 cnVuY2F0ZV9jYiAhPSBOVUxMKTsKIAogCS8qCkBAIC0yNTEsNiArMjYzLDcgQEAgU3RhcnR1cERl Y29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4LT5yZW9yZGVy LT5zdHJlYW1fY29tbWl0ID0gc3RyZWFtX2NvbW1pdF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRl ci0+c3RyZWFtX2NoYW5nZSA9IHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3Jk ZXItPnN0cmVhbV9tZXNzYWdlID0gc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcjsKKwljdHgtPnJl b3JkZXItPnN0cmVhbV9kZGxtZXNzYWdlID0gc3RyZWFtX2RkbG1lc3NhZ2VfY2Jfd3JhcHBlcjsK IAljdHgtPnJlb3JkZXItPnN0cmVhbV90cnVuY2F0ZSA9IHN0cmVhbV90cnVuY2F0ZV9jYl93cmFw cGVyOwogCiAKQEAgLTEyMjEsNiArMTIzNCw0NCBAQCBtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRl ckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIH0KIAogc3RhdGljIHZvaWQK K2RkbG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLAorCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCSAgY29uc3Qg Y2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJ CQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKQorewor CUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hlLT5wcml2YXRlX2RhdGE7CisJTG9n aWNhbEVycm9yQ2FsbGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJj YWxsYmFjazsKKworCUFzc2VydCghY3R4LT5mYXN0X2ZvcndhcmQpOworCisJaWYgKGN0eC0+Y2Fs bGJhY2tzLmRkbG1lc3NhZ2VfY2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxs YmFjayArIGluZm8gb24gdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBj dHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJkZGxtZXNzYWdlIjsKKwlzdGF0ZS5yZXBvcnRf bG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwllcnJjYWxsYmFjay5jYWxsYmFjayA9IG91dHB1dF9w bHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJhY2suYXJnID0gKHZvaWQgKikgJnN0YXRl OworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwllcnJvcl9j b250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCisJLyogc2V0IG91dHB1dCBzdGF0ZSAqLwor CWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRydWU7CisJY3R4LT53cml0ZV94aWQgPSB0eG4gIT0gTlVM TCA/IHR4bi0+eGlkIDogSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJY3R4LT53cml0ZV9sb2NhdGlv biA9IG1lc3NhZ2VfbHNuOworCisJLyogZG8gdGhlIGFjdHVhbCB3b3JrOiBjYWxsIGNhbGxiYWNr ICovCisJY3R4LT5jYWxsYmFja3MuZGRsbWVzc2FnZV9jYihjdHgsIHR4biwgbWVzc2FnZV9sc24s IHByZWZpeCwgcmVsaWQsIGNtZHR5cGUsCisJCQkJCQkJCSBtZXNzYWdlX3NpemUsIG1lc3NhZ2Up OworCisJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJZXJyb3JfY29udGV4dF9z dGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOworfQorCitzdGF0aWMgdm9pZAogc3RyZWFtX3N0 YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKIAkJCQkJCVhMb2dSZWNQdHIgZmlyc3RfbHNuKQogewpAQCAtMTUzNiw2ICsxNTg3LDQ4IEBA IHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJC dWZmZXJUWE4gKnR4biwKIH0KIAogc3RhdGljIHZvaWQKK3N0cmVhbV9kZGxtZXNzYWdlX2NiX3dy YXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJ CQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBP aWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkgU2l6ZSBtZXNz YWdlX3NpemUsCisJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4ID0gY2FjaGUtPnByaXZhdGVfZGF0YTsKKwlMb2dpY2FsRXJyb3JDYWxs YmFja1N0YXRlIHN0YXRlOworCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNrOworCisJ QXNzZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7CisKKwkvKiBXZSdyZSBvbmx5IHN1cHBvc2VkIHRv IGNhbGwgdGhpcyB3aGVuIHN0cmVhbWluZyBpcyBzdXBwb3J0ZWQuICovCisJQXNzZXJ0KGN0eC0+ c3RyZWFtaW5nKTsKKworCS8qIHRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwgKi8KKwlpZiAoY3R4 LT5jYWxsYmFja3Muc3RyZWFtX2RkbG1lc3NhZ2VfY2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJ LyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwlz dGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJzdHJlYW1fZGRsbWVzc2Fn ZSI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisJZXJyY2FsbGJhY2su Y2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxiYWNrOworCWVycmNhbGxiYWNrLmFy ZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRl eHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKworCS8qIHNl dCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0ZXMgPSB0cnVlOworCWN0eC0+d3Jp dGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IEludmFsaWRUcmFuc2FjdGlvbklkOwor CWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKworCS8qIGRvIHRoZSBhY3R1YWwg d29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxtZXNzYWdl X2NiKGN0eCwgdHhuLCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxpZCwKKwkJCQkJCQkJCQljbWR0 eXBlLCBtZXNzYWdlX3NpemUsIG1lc3NhZ2UpOworCisJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0 IHN0YWNrICovCisJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwor fQorCitzdGF0aWMgdm9pZAogc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZl ciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCSAgIGludCBucmVsYXRpb25z LCBSZWxhdGlvbiByZWxhdGlvbnNbXSwKIAkJCQkJCSAgIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNo YW5nZSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24u YnVpbGQgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCmluZGV4 IDc3MzU4M2EuLmU3YzcwYWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9t ZXNvbi5idWlsZApAQCAtMSw0ICsxLDUgQEAKIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKKyAg J2RkbG1lc3NhZ2UuYycsCiAgICdkZWNvZGUuYycsCiAgICdsYXVuY2hlci5jJywKICAgJ2xvZ2lj YWwuYycsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3Rv LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXggZmY4NTEz ZS4uZjM1NDA2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9w cm90by5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAt NjYzLDYgKzY2Myw1MiBAQCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQs IFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKIH0KIAogLyoKKyAqIFJlYWQgRERM IE1FU1NBR0UgZnJvbSBzdHJlYW0KKyAqLworY2hhciAqCitsb2dpY2FscmVwX3JlYWRfZGRsbWVz c2FnZShTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sCisJCQkJCQkgICBjb25zdCBjaGFy ICoqcHJlZml4LAorCQkJCQkJICAgU2l6ZSAqc3opCit7CisJdWludDggZmxhZ3M7CisJY2hhciAq bXNnOworCisJLy9UT0RPIGRvdWJsZSBjaGVjayB3aGVuIGRvIHdlIG5lZWQgdG8gZ2V0IFRyYW5z YWN0aW9uSWQuCisKKwlmbGFncyA9IHBxX2dldG1zZ2ludChpbiwgMSk7CisJaWYgKGZsYWdzICE9 IDApCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgZmxhZ3MgJXUgaW4gZGRsIG1lc3NhZ2Ui LCBmbGFncyk7CisJKmxzbiA9IHBxX2dldG1zZ2ludDY0KGluKTsKKwkqcHJlZml4ID0gcHFfZ2V0 bXNnc3RyaW5nKGluKTsKKwkqc3ogPSBwcV9nZXRtc2dpbnQoaW4sIDQpOworCW1zZyA9IChjaGFy ICopIHBxX2dldG1zZ2J5dGVzKGluLCAqc3opOworCisJcmV0dXJuIG1zZzsKK30KKworLyoKKyAq IFdyaXRlIERETCBNRVNTQUdFIHRvIHN0cmVhbQorICovCit2b2lkCitsb2dpY2FscmVwX3dyaXRl X2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRy IGxzbiwKKwkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1l c3NhZ2UpCit7CisJdWludDgJCWZsYWdzID0gMDsKKworCXBxX3NlbmRieXRlKG91dCwgTE9HSUNB TF9SRVBfTVNHX0RETE1FU1NBR0UpOworCisJLyogdHJhbnNhY3Rpb24gSUQgKGlmIG5vdCB2YWxp ZCwgd2UncmUgbm90IHN0cmVhbWluZykgKi8KKwlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlk KSkKKwkJcHFfc2VuZGludDMyKG91dCwgeGlkKTsKKworCXBxX3NlbmRpbnQ4KG91dCwgZmxhZ3Mp OworCXBxX3NlbmRpbnQ2NChvdXQsIGxzbik7CisJcHFfc2VuZHN0cmluZyhvdXQsIHByZWZpeCk7 CisJcHFfc2VuZGludDMyKG91dCwgc3opOworCXBxX3NlbmRieXRlcyhvdXQsIG1lc3NhZ2UsIHN6 KTsKK30KKworLyoKICAqIFdyaXRlIHJlbGF0aW9uIGRlc2NyaXB0aW9uIHRvIHRoZSBvdXRwdXQg c3RyZWFtLgogICovCiB2b2lkCkBAIC0xMjE4LDYgKzEyNjQsOCBAQCBsb2dpY2FscmVwX21lc3Nh Z2VfdHlwZShMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24pCiAJCQlyZXR1cm4gIlRZUEUiOwogCQlj YXNlIExPR0lDQUxfUkVQX01TR19NRVNTQUdFOgogCQkJcmV0dXJuICJNRVNTQUdFIjsKKwkJY2Fz ZSBMT0dJQ0FMX1JFUF9NU0dfRERMTUVTU0FHRToKKwkJCXJldHVybiAiRERMIjsKIAkJY2FzZSBM T0dJQ0FMX1JFUF9NU0dfQkVHSU5fUFJFUEFSRToKIAkJCXJldHVybiAiQkVHSU4gUFJFUEFSRSI7 CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkU6CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4IDZkZmY5OTEuLjNjMzc2OTAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBA IC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSAibGliL2JpbmFyeWhlYXAuaCIKICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9k ZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90 LmgiCkBAIC01MTUsNiArNTE2LDE0IEBAIFJlb3JkZXJCdWZmZXJSZXR1cm5DaGFuZ2UoUmVvcmRl ckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwKIAkJCQlwZnJlZShjaGFu Z2UtPmRhdGEubXNnLm1lc3NhZ2UpOwogCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTlVM TDsKIAkJCWJyZWFrOworCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgor CQkJaWYgKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ICE9IE5VTEwpCisJCQkJcGZyZWUoY2hh bmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgpOworCQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgg PSBOVUxMOworCQkJaWYgKGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSAhPSBOVUxMKQorCQkJ CXBmcmVlKGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSk7CisJCQljaGFuZ2UtPmRhdGEuZGRs bXNnLm1lc3NhZ2UgPSBOVUxMOworCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hB TkdFX0lOVkFMSURBVElPTjoKIAkJCWlmIChjaGFuZ2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9u cykKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9ucyk7CkBAIC04NzAs NiArODc5LDM2IEBAIFJlb3JkZXJCdWZmZXJRdWV1ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIs IFRyYW5zYWN0aW9uSWQgeGlkLAogfQogCiAvKgorICogQSB0cmFuc2FjdGlvbmFsIERETCBtZXNz YWdlIGlzIHF1ZXVlZCB0byBiZSBwcm9jZXNzZWQgdXBvbiBjb21taXQuCisgKi8KK3ZvaWQKK1Jl b3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9u SWQgeGlkLAorCQkJCQkJCSBYTG9nUmVjUHRyIGxzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJ CQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSwKKwkJCQkJCQkgT2lk IHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUpCit7CisJTWVtb3J5Q29udGV4dCBv bGRjb250ZXh0OworCVJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZTsKKworCUFzc2VydCh4aWQg IT0gSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhyYi0+Y29udGV4dCk7CisKKwljaGFuZ2UgPSBSZW9yZGVyQnVmZmVyR2V0Q2hhbmdl KHJiKTsKKwljaGFuZ2UtPmFjdGlvbiA9IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdF OworCWNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ID0gcHN0cmR1cChwcmVmaXgpOworCWNoYW5n ZS0+ZGF0YS5kZGxtc2cucmVsaWQgPSByZWxpZDsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5 cGUgPSBjbWR0eXBlOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplID0gbWVzc2Fn ZV9zaXplOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSA9IHBhbGxvYyhtZXNzYWdlX3Np emUpOworCW1lbWNweShjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UsIG1lc3NhZ2UsIG1lc3Nh Z2Vfc2l6ZSk7CisKKwlSZW9yZGVyQnVmZmVyUXVldWVDaGFuZ2UocmIsIHhpZCwgbHNuLCBjaGFu Z2UsIGZhbHNlKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKwor LyoKICAqIEFzc2VydFRYTkxzbk9yZGVyCiAgKgkJVmVyaWZ5IExTTiBvcmRlcmluZyBvZiB0cmFu c2FjdGlvbiBsaXN0cyBpbiB0aGUgcmVvcmRlcmJ1ZmZlcgogICoKQEAgLTE5NjksNiArMjAwOCwy OSBAQCBSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCiB9CiAKIC8qCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIFJlb3JkZXJC dWZmZXJQcm9jZXNzVFhOIGZvciBhcHBseWluZyB0aGUgRERMIG1lc3NhZ2UuCisgKi8KK3N0YXRp YyBpbmxpbmUgdm9pZAorUmVvcmRlckJ1ZmZlckFwcGx5RERMTWVzc2FnZShSZW9yZGVyQnVmZmVy ICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCSBSZW9yZGVyQnVmZmVyQ2hhbmdl ICpjaGFuZ2UsIGJvb2wgc3RyZWFtaW5nKQoreworCWlmIChzdHJlYW1pbmcpCisJCXJiLT5zdHJl YW1fZGRsbWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0 YS5kZGxtc2cucHJlZml4LAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwKKwkJ CQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0 YS5kZGxtc2cubWVzc2FnZV9zaXplLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNz YWdlKTsKKwllbHNlCisJCXJiLT5kZGxtZXNzYWdlKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJ CQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRk bG1zZy5yZWxpZCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLAorCQkJCQkg ICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRh LmRkbG1zZy5tZXNzYWdlKTsKK30KKworLyoKICAqIEZ1bmN0aW9uIHRvIHN0b3JlIHRoZSBjb21t YW5kIGlkIGFuZCBzbmFwc2hvdCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CiAgKiBzdHJlYW0g c28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgd2hpbGUgc2VuZGluZyB0aGUgbmV4dCBzdHJl YW0uCiAgKi8KQEAgLTIzNDgsNiArMjQxMCwxMCBAQCBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTihS ZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQlSZW9yZGVyQnVm ZmVyQXBwbHlNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKIAkJCQkJYnJlYWs7 CiAKKwkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJCQlSZW9y ZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKKwkJ CQkJYnJlYWs7CisKIAkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046 CiAJCQkJCS8qIEV4ZWN1dGUgdGhlIGludmFsaWRhdGlvbiBtZXNzYWdlcyBsb2NhbGx5ICovCiAJ CQkJCVJlb3JkZXJCdWZmZXJFeGVjdXRlSW52YWxpZGF0aW9ucyhjaGFuZ2UtPmRhdGEuaW52YWwu bmludmFsaWRhdGlvbnMsCkBAIC0zNzczLDYgKzM4MzksNDAgQEAgUmVvcmRlckJ1ZmZlclNlcmlh bGl6ZUNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCiAJ CQkJYnJlYWs7CiAJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6 CisJCQl7CisJCQkJY2hhcgkgICAqZGF0YTsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZSA9IHN0cmxl bihjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCkgKyAxOworCisJCQkJc3ogKz0gcHJlZml4X3Np emUgKyBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSArCisJCQkJCXNpemVvZihTaXpl KSArIHNpemVvZihPaWQpICsgc2l6ZW9mKGludCkgKyBzaXplb2YoU2l6ZSk7CisJCQkJUmVvcmRl ckJ1ZmZlclNlcmlhbGl6ZVJlc2VydmUocmIsIHN6KTsKKworCQkJCWRhdGEgPSAoKGNoYXIgKikg cmItPm91dGJ1ZikgKyBzaXplb2YoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UpOworCisJCQkJLyog bWlnaHQgaGF2ZSBiZWVuIHJlYWxsb2NhdGVkIGFib3ZlICovCisJCQkJb25kaXNrID0gKFJlb3Jk ZXJCdWZmZXJEaXNrQ2hhbmdlICopIHJiLT5vdXRidWY7CisKKwkJCQkvKiB3cml0ZSB0aGUgcHJl Zml4LCByZWxpZCBhbmQgY21kdHlwZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHko ZGF0YSwgJnByZWZpeF9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNp emUpOworCQkJCW1lbWNweShkYXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwgc2l6ZW9m KE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFu Z2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUsIHNpemVvZihpbnQpKTsKKwkJCQlkYXRhICs9IHNpemVv ZihpbnQpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJ CQkJICAgcHJlZml4X3NpemUpOworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisKKwkJCQkvKiB3 cml0ZSB0aGUgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwg JmNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRh dGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsbXNn Lm1lc3NhZ2UsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplKTsKKwkJ CQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplOworCisJCQkJYnJlYWs7 CisJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCXsK IAkJCQljaGFyCSAgICpkYXRhOwpAQCAtNDA4Nyw2ICs0MTg3LDE1IEBAIFJlb3JkZXJCdWZmZXJD aGFuZ2VTaXplKFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSkKIAogCQkJCWJyZWFrOwogCQkJ fQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJeworCQkJCVNp emUJCXByZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KSArIDE7 CisKKwkJCQlzeiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9z aXplICsKKwkJCQkJc2l6ZW9mKFNpemUpICsgc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBz aXplb2YoaW50KTsKKworCQkJCWJyZWFrOworCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NI QU5HRV9JTlZBTElEQVRJT046CiAJCQl7CiAJCQkJc3ogKz0gc2l6ZW9mKFNoYXJlZEludmFsaWRh dGlvbk1lc3NhZ2UpICoKQEAgLTQzNjIsNiArNDQ3MSwzMyBAQCBSZW9yZGVyQnVmZmVyUmVzdG9y ZUNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCiAJCQkJ YnJlYWs7CiAJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJ CQl7CisJCQkJU2l6ZQkJcHJlZml4X3NpemU7CisKKwkJCQkvKiByZWFkIHByZWZpeCAqLworCQkJ CW1lbWNweSgmcHJlZml4X3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBz aXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkLCBkYXRh LCBzaXplb2YoT2lkKSk7CisJCQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQltZW1jcHkoJmNo YW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwgZGF0YSwgc2l6ZW9mKGludCkpOworCQkJCWRhdGEg Kz0gc2l6ZW9mKGludCk7CisJCQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBNZW1vcnlD b250ZXh0QWxsb2MocmItPmNvbnRleHQsIHByZWZpeF9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdl LT5kYXRhLmRkbG1zZy5wcmVmaXgsIGRhdGEsIHByZWZpeF9zaXplKTsKKwkJCQlBc3NlcnQoY2hh bmdlLT5kYXRhLmRkbG1zZy5wcmVmaXhbcHJlZml4X3NpemUgLSAxXSA9PSAnXDAnKTsKKwkJCQlk YXRhICs9IHByZWZpeF9zaXplOworCisJCQkJLyogcmVhZCB0aGUgbWVzc2FnZSAqLworCQkJCW1l bWNweSgmY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7 CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdl ID0gTWVtb3J5Q29udGV4dEFsbG9jKHJiLT5jb250ZXh0LAorCQkJCQkJCQkJCQkJCQkJICBjaGFu Z2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0YS5tc2cu bWVzc2FnZSwgZGF0YSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOwor CQkJCWRhdGEgKz0gY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CisKKwkJCQlicmVhazsK KwkJCX0KIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJewog CQkJCVNpemUJCWludmFsX3NpemUgPSBzaXplb2YoU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSkg KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggNTI1MGFlNy4u YThkMzg3NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3Jr ZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0x NTYsNiArMTU2LDcgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9t YWtlZnVuY3MuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAi cGFyc2VyL2FuYWx5emUuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFz dGVyL2Jnd29ya2VyLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKQEAgLTE3 OSw3ICsxODAsMTAgQEAKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9y YWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInRj b3AvZGRsX2RlcGFyc2UuaCIKKyNpbmNsdWRlICJ0Y29wL3BxdWVyeS5oIgogI2luY2x1ZGUgInRj b3AvdGNvcHByb3QuaCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKICNpbmNsdWRlICJ1dGls cy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2Nh dGNhY2hlLmgiCkBAIC0yNDg4LDYgKzI0OTIsMjMwIEBAIGFwcGx5X2hhbmRsZV90cnVuY2F0ZShT dHJpbmdJbmZvIHMpCiAJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIH0KIAorLyogUmVtb3ZlIHRo ZSBkYXRhIHBvcHVsYXRpb24gZnJvbSB0aGUgY29tbWFuZCAqLworc3RhdGljIHZvaWQKK3ByZXBy b2Nlc3NfY3JlYXRlX3RhYmxlKFJhd1N0bXQgKmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21t YW5kVGFnOworCisJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKiljb21tYW5k KTsKKworCXN3aXRjaCAoY29tbWFuZFRhZykKKwl7CisJCWNhc2UgQ01EVEFHX0NSRUFURV9UQUJM RV9BUzoKKwkJY2FzZSBDTURUQUdfU0VMRUNUX0lOVE86CisJCQl7CisJCQkJQ3JlYXRlVGFibGVB c1N0bXQgKmNhc3RtdCA9IChDcmVhdGVUYWJsZUFzU3RtdCAqKSBjb21tYW5kLT5zdG10OworCQkJ CWlmIChjYXN0bXQtPm9ianR5cGUgPT0gT0JKRUNUX1RBQkxFKQorCQkJCXsKKwkJCQkJLyoKKwkJ CQkJICogRm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2b2lkIGRhdGEKKwkJCQkJ ICogaW5jb25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUgcmVwbGljYXRlZCBmcm9tIHRoZQorCQkJ CQkgKiBwdWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJCWNhc3RtdC0+aW50by0+c2tp cERhdGEgPSB0cnVlOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENNRFRBR19TRUxF Q1Q6CisJCQl7CisJCQkJU2VsZWN0U3RtdCAqc3N0bXQgPSAoU2VsZWN0U3RtdCAqKSBjb21tYW5k LT5zdG10OworCisJCQkJaWYgKHNzdG10LT5pbnRvQ2xhdXNlICE9IE5VTEwpCisJCQkJeworCQkJ CQkvKgorCQkJCQkgKiBGb3JjZSBza2lwcGluZyBkYXRhIHBvcHVsYXRpb24gdG8gYXZvaWQgZGF0 YQorCQkJCQkgKiBpbmNvbnNpc3RlbmN5LiBEYXRhIHNob3VsZCBiZSByZXBsaWNhdGVkIGZyb20g dGhlCisJCQkJCSAqIHB1Ymxpc2hlciBpbnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJc3N0bXQtPmlu dG9DbGF1c2UtPnNraXBEYXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwlkZWZh dWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBIYW5kbGUgQ1JFQVRFIFRBQkxFIGNvbW1h bmQKKyAqCisgKiBDYWxsIEFkZFN1YnNjcmlwdGlvblJlbFN0YXRlIGZvciBDUkVBVEUgVEFCRUwg Y29tbWFuZCB0byBzZXQgdGhlIHJlbHN0YXRlIHRvCisgKiBTVUJSRUxfU1RBVEVfUkVBRFkgc28g RE1MIGNoYW5nZXMgb24gdGhpcyBuZXcgdGFibGUgY2FuIGJlIHJlcGxpY2F0ZWQgd2l0aG91dAor ICogaGF2aW5nIHRvIG1hbnVhbGx5IHJ1biAiYWx0ZXIgc3Vic2NyaXB0aW9uIC4uLiByZWZyZXNo IHB1YmxpY2F0aW9uIgorICovCitzdGF0aWMgdm9pZAoraGFuZGxlX2NyZWF0ZV90YWJsZShSYXdT dG10ICpjb21tYW5kKQoreworCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwlSYW5nZVZhcgkgKnJ2 ID0gTlVMTDsKKwlPaWQJCQlyZWxpZDsKKwlPaWQJCQlyZWxuYW1lc3BhY2UgPSBJbnZhbGlkT2lk OworCWNoYXIgCQkgKnNjaGVtYW5hbWUgPSBOVUxMOworCWNoYXIJCSAqcmVsbmFtZSA9IE5VTEw7 CisKKwljb21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKwor CXN3aXRjaCAoY29tbWFuZFRhZykKKwl7CisJCWNhc2UgQ01EVEFHX0NSRUFURV9UQUJMRToKKwkJ CXsKKwkJCQlDcmVhdGVTdG10ICpjc3RtdCA9IChDcmVhdGVTdG10ICopIGNvbW1hbmQtPnN0bXQ7 CisJCQkJcnYgPSBjc3RtdC0+cmVsYXRpb247CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoK KwkJCWJyZWFrOworCX0KKworCWlmICghcnYpCisJCXJldHVybjsKKworCXNjaGVtYW5hbWUgPSBy di0+c2NoZW1hbmFtZTsKKwlyZWxuYW1lID0gcnYtPnJlbG5hbWU7CisKKwlpZiAoc2NoZW1hbmFt ZSAhPSBOVUxMKQorCQlyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX29pZChzY2hlbWFuYW1l LCBmYWxzZSk7CisKKwlpZiAocmVsbmFtZXNwYWNlICE9IEludmFsaWRPaWQpCisJCXJlbGlkID0g Z2V0X3JlbG5hbWVfcmVsaWQocmVsbmFtZSwgcmVsbmFtZXNwYWNlKTsKKwllbHNlCisJCXJlbGlk ID0gUmVsbmFtZUdldFJlbGlkKHJlbG5hbWUpOworCisJaWYgKHJlbGlkICE9IEludmFsaWRPaWQp CisJeworCQlBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZShNeVN1YnNjcmlwdGlvbi0+b2lkLCByZWxp ZCwKKwkJCQkJCQkJU1VCUkVMX1NUQVRFX1JFQURZLAorCQkJCQkJCQlJbnZhbGlkWExvZ1JlY1B0 cik7CisJCWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2dfaW50ZXJuYWwoInRhYmxlIFwiJXNc IiBhZGRlZCB0byBzdWJzY3JpcHRpb24gXCIlc1wiIiwKKwkJCQkJCQkJIHJlbG5hbWUsIE15U3Vi c2NyaXB0aW9uLT5uYW1lKSkpOworCX0KK30KKworc3RhdGljIHZvaWQKK2FwcGx5X2hhbmRsZV9k ZGwoU3RyaW5nSW5mbyBzKQoreworCVhMb2dSZWNQdHIgbHNuOworCWNvbnN0IGNoYXIgKnByZWZp eCA9IE5VTEw7CisJY2hhciAqbWVzc2FnZSA9IE5VTEw7CisJY2hhcgkgICAqZGRsX2NvbW1hbmQ7 CisJU2l6ZQkJc3o7CisJTGlzdAkgICAqcGFyc2V0cmVlX2xpc3Q7CisJTGlzdENlbGwgICAqcGFy c2V0cmVlX2l0ZW07CisJRGVzdFJlY2VpdmVyICpyZWNlaXZlcjsKKwlNZW1vcnlDb250ZXh0IG9s ZGNvbnRleHQ7CisJY29uc3QgY2hhciAqc2F2ZV9kZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZWJ1Z19x dWVyeV9zdHJpbmc7CisKKwltZXNzYWdlID0gbG9naWNhbHJlcF9yZWFkX2RkbG1lc3NhZ2Uocywg JmxzbiwgJnByZWZpeCwgJnN6KTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gYSB0cmFuc2Fj dGlvbiBjb21tYW5kICovCisJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJZGRsX2NvbW1h bmQgPSBkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhtZXNzYWdlKTsKKwlkZWJ1Z19xdWVyeV9z dHJpbmcgPSBkZGxfY29tbWFuZDsKKworCS8qIERlc3ROb25lIGZvciBsb2dpY2FsIHJlcGxpY2F0 aW9uICovCisJcmVjZWl2ZXIgPSBDcmVhdGVEZXN0UmVjZWl2ZXIoRGVzdE5vbmUpOworCXBhcnNl dHJlZV9saXN0ID0gcGdfcGFyc2VfcXVlcnkoZGRsX2NvbW1hbmQpOworCisJZm9yZWFjaChwYXJz ZXRyZWVfaXRlbSwgcGFyc2V0cmVlX2xpc3QpCisJeworCQlMaXN0CSAgICpwbGFudHJlZV9saXN0 OworCQlMaXN0CSAgICpxdWVyeXRyZWVfbGlzdDsKKwkJUmF3U3RtdAkgICAqY29tbWFuZCA9IChS YXdTdG10ICopIGxmaXJzdChwYXJzZXRyZWVfaXRlbSk7CisJCUNvbW1hbmRUYWcJY29tbWFuZFRh ZzsKKwkJTWVtb3J5Q29udGV4dCBwZXJfcGFyc2V0cmVlX2NvbnRleHQgPSBOVUxMOworCQlQb3J0 YWwJCXBvcnRhbDsKKwkJYm9vbAkJIHNuYXBzaG90X3NldCA9IGZhbHNlOworCisJCWNvbW1hbmRU YWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICopIGNvbW1hbmQpOworCisJCS8qIElmIHdlIGdv dCBhIGNhbmNlbCBzaWduYWwgaW4gcGFyc2luZyBvciBwcmlvciBjb21tYW5kLCBxdWl0ICovCisJ CUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogUmVtb3ZlIGRhdGEgcG9wdWxhdGlvbiBm cm9tIHRoZSBjb21tYW5kICovCisJCXByZXByb2Nlc3NfY3JlYXRlX3RhYmxlKGNvbW1hbmQpOwor CisJCS8qCisJCSAqIFNldCB1cCBhIHNuYXBzaG90IGlmIHBhcnNlIGFuYWx5c2lzL3BsYW5uaW5n IHdpbGwgbmVlZCBvbmUuCisJCSAqLworCQlpZiAoYW5hbHl6ZV9yZXF1aXJlc19zbmFwc2hvdChj b21tYW5kKSkKKwkJeworCQkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNo b3QoKSk7CisJCQlzbmFwc2hvdF9zZXQgPSB0cnVlOworCQl9CisKKwkJLyoKKwkJICogV2UgZG8g dGhlIHdvcmsgZm9yIGVhY2ggcGFyc2V0cmVlIGluIGEgc2hvcnQtbGl2ZWQgY29udGV4dCwgdG8K KwkJICogbGltaXQgdGhlIG1lbW9yeSB1c2VkIHdoZW4gdGhlcmUgYXJlIG1hbnkgY29tbWFuZHMg aW4gdGhlIHN0cmluZy4KKwkJICovCisJCXBlcl9wYXJzZXRyZWVfY29udGV4dCA9CisJCQlBbGxv Y1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgImV4ZWN1 dGVfc3FsX3N0cmluZyBwZXItc3RhdGVtZW50IGNvbnRleHQiLAorCQkJCQkJCQkgIEFMTE9DU0VU X0RFRkFVTFRfU0laRVMpOworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBl cl9wYXJzZXRyZWVfY29udGV4dCk7CisKKwkJcXVlcnl0cmVlX2xpc3QgPSBwZ19hbmFseXplX2Fu ZF9yZXdyaXRlX2ZpeGVkcGFyYW1zKGNvbW1hbmQsCisJCQkJCQkJCQkJCQkJCQlkZGxfY29tbWFu ZCwKKwkJCQkJCQkJCQkJCQkJCU5VTEwsIDAsIE5VTEwpOworCisJCXBsYW50cmVlX2xpc3QgPSBw Z19wbGFuX3F1ZXJpZXMocXVlcnl0cmVlX2xpc3QsIGRkbF9jb21tYW5kLCAwLCBOVUxMKTsKKwor CQkvKiBEb25lIHdpdGggdGhlIHNuYXBzaG90IHVzZWQgZm9yIHBhcnNpbmcvcGxhbm5pbmcgKi8K KwkJaWYgKHNuYXBzaG90X3NldCkKKwkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwkJcG9ydGFs ID0gQ3JlYXRlUG9ydGFsKCJsb2dpY2FsIHJlcGxpY2F0aW9uIiwgdHJ1ZSwgdHJ1ZSk7CisKKwkJ LyoKKwkJICogV2UgZG9uJ3QgaGF2ZSB0byBjb3B5IGFueXRoaW5nIGludG8gdGhlIHBvcnRhbCwg YmVjYXVzZSBldmVyeXRoaW5nCisJCSAqIHdlIGFyZSBwYXNzaW5nIGhlcmUgaXMgaW4gQXBwbHlN ZXNzYWdlQ29udGV4dCBvciB0aGUKKwkJICogcGVyX3BhcnNldHJlZV9jb250ZXh0LCBhbmQgc28g d2lsbCBvdXRsaXZlIHRoZSBwb3J0YWwgYW55d2F5LgorCQkgKi8KKwkJUG9ydGFsRGVmaW5lUXVl cnkocG9ydGFsLAorCQkJCQkJICBOVUxMLAorCQkJCQkJICBkZGxfY29tbWFuZCwKKwkJCQkJCSAg Y29tbWFuZFRhZywKKwkJCQkJCSAgcGxhbnRyZWVfbGlzdCwKKwkJCQkJCSAgTlVMTCk7CisKKwkJ LyoKKwkJICogU3RhcnQgdGhlIHBvcnRhbC4gIE5vIHBhcmFtZXRlcnMgaGVyZS4KKwkJICovCisJ CVBvcnRhbFN0YXJ0KHBvcnRhbCwgTlVMTCwgMCwgSW52YWxpZFNuYXBzaG90KTsKKworCQkvKgor CQkgKiBTd2l0Y2ggYmFjayB0byB0cmFuc2FjdGlvbiBjb250ZXh0IGZvciBleGVjdXRpb24uCisJ CSAqLworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkJKHZvaWQpIFBv cnRhbFJ1bihwb3J0YWwsCisJCQkJCQkgRkVUQ0hfQUxMLAorCQkJCQkJIHRydWUsCisJCQkJCQkg dHJ1ZSwKKwkJCQkJCSByZWNlaXZlciwKKwkJCQkJCSByZWNlaXZlciwKKwkJCQkJCSBOVUxMKTsK KworCQlQb3J0YWxEcm9wKHBvcnRhbCwgZmFsc2UpOworCisJCUNvbW1hbmRDb3VudGVySW5jcmVt ZW50KCk7CisKKwkJLyoKKwkJICogVGFibGUgY3JlYXRlZCBieSBEREwgcmVwbGljYXRpb24gKGRh dGFiYXNlIGxldmVsKSBpcyBhdXRvbWF0aWNhbGx5CisJCSAqIGFkZGVkIHRvIHRoZSBzdWJzY3Jp cHRpb24gaGVyZS4KKwkJICovCisJCWhhbmRsZV9jcmVhdGVfdGFibGUoY29tbWFuZCk7CisKKwkJ LyogTm93IHdlIG1heSBkcm9wIHRoZSBwZXItcGFyc2V0cmVlIGNvbnRleHQsIGlmIG9uZSB3YXMg Y3JlYXRlZC4gKi8KKwkJTWVtb3J5Q29udGV4dERlbGV0ZShwZXJfcGFyc2V0cmVlX2NvbnRleHQp OworCX0KKworCWRlYnVnX3F1ZXJ5X3N0cmluZyA9IHNhdmVfZGVidWdfcXVlcnlfc3RyaW5nOwor CWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7Cit9CisKIAogLyoKICAqIExvZ2ljYWwgcmVwbGljYXRp b24gcHJvdG9jb2wgbWVzc2FnZSBkaXNwYXRjaGVyLgpAQCAtMjU1Myw2ICsyNzgxLDEwIEBAIGFw cGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8gcykKIAkJCSAqLwogCQkJYnJlYWs7CiAKKwkJY2FzZSBM T0dJQ0FMX1JFUF9NU0dfRERMTUVTU0FHRToKKwkJCWFwcGx5X2hhbmRsZV9kZGwocyk7CisJCQli cmVhazsKKwogCQljYXNlIExPR0lDQUxfUkVQX01TR19TVFJFQU1fU1RBUlQ6CiAJCQlhcHBseV9o YW5kbGVfc3RyZWFtX3N0YXJ0KHMpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vcGdvdXRwdXQvcGdvdXRwdXQuYwppbmRleCAyZWNhYTViLi41ZTViMWNhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTUzLDYgKzUzLDExIEBA IHN0YXRpYyB2b2lkIHBnb3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 LAogCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24s CiAJCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJ CSBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHBnb3V0cHV0X2Rk bG1lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQlSZW9yZGVyQnVm ZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCWNvbnN0IGNoYXIg KnByZWZpeCwgT2lkIHJlbGlkLAorCQkJCQkJCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUs CisJCQkJCQkJCVNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIGJvb2wgcGdv dXRwdXRfb3JpZ2luX2ZpbHRlcihMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJ CSAgIFJlcE9yaWdpbklkIG9yaWdpbl9pZCk7CiBzdGF0aWMgdm9pZCBwZ291dHB1dF9iZWdpbl9w cmVwYXJlX3R4bihMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCkBAIC0yNTYsNiArMjYxLDcg QEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQogCWNi LT5jaGFuZ2VfY2IgPSBwZ291dHB1dF9jaGFuZ2U7CiAJY2ItPnRydW5jYXRlX2NiID0gcGdvdXRw dXRfdHJ1bmNhdGU7CiAJY2ItPm1lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5k ZGxtZXNzYWdlX2NiID0gcGdvdXRwdXRfZGRsbWVzc2FnZTsKIAljYi0+Y29tbWl0X2NiID0gcGdv dXRwdXRfY29tbWl0X3R4bjsKIAogCWNiLT5iZWdpbl9wcmVwYXJlX2NiID0gcGdvdXRwdXRfYmVn aW5fcHJlcGFyZV90eG47CkBAIC0yNzIsNiArMjc4LDcgQEAgX1BHX291dHB1dF9wbHVnaW5faW5p dChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQogCWNiLT5zdHJlYW1fY29tbWl0X2NiID0gcGdv dXRwdXRfc3RyZWFtX2NvbW1pdDsKIAljYi0+c3RyZWFtX2NoYW5nZV9jYiA9IHBnb3V0cHV0X2No YW5nZTsKIAljYi0+c3RyZWFtX21lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5z dHJlYW1fZGRsbWVzc2FnZV9jYiA9IHBnb3V0cHV0X2RkbG1lc3NhZ2U7CiAJY2ItPnN0cmVhbV90 cnVuY2F0ZV9jYiA9IHBnb3V0cHV0X3RydW5jYXRlOwogCS8qIHRyYW5zYWN0aW9uIHN0cmVhbWlu ZyAtIHR3by1waGFzZSBjb21taXQgKi8KIAljYi0+c3RyZWFtX3ByZXBhcmVfY2IgPSBwZ291dHB1 dF9zdHJlYW1fcHJlcGFyZV90eG47CkBAIC00MjYsNiArNDMzLDcgQEAgcGdvdXRwdXRfc3RhcnR1 cChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwK IAogCS8qIFRoaXMgcGx1Z2luIHVzZXMgYmluYXJ5IHByb3RvY29sLiAqLwogCW9wdC0+b3V0cHV0 X3R5cGUgPSBPVVRQVVRfUExVR0lOX0JJTkFSWV9PVVRQVVQ7CisJb3B0LT5yZWNlaXZlX3Jld3Jp dGVzID0gdHJ1ZTsKIAogCS8qCiAJICogVGhpcyBpcyByZXBsaWNhdGlvbiBzdGFydCBhbmQgbm90 IHNsb3QgaW5pdGlhbGl6YXRpb24uCkBAIC00OTksNiArNTA3LDcgQEAgcGdvdXRwdXRfc3RhcnR1 cChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwK IAogCQkvKiBJbml0IHB1YmxpY2F0aW9uIHN0YXRlLiAqLwogCQlkYXRhLT5wdWJsaWNhdGlvbnMg PSBOSUw7CisJCWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0gTklMOwogCQlwdWJsaWNhdGlvbnNfdmFs aWQgPSBmYWxzZTsKIAkJQ2FjaGVSZWdpc3RlclN5c2NhY2hlQ2FsbGJhY2soUFVCTElDQVRJT05P SUQsCiAJCQkJCQkJCQkgIHB1YmxpY2F0aW9uX2ludmFsaWRhdGlvbl9jYiwKQEAgLTEzNzcsOSAr MTM4NiwyMiBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJUmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUgYWN0aW9uID0g Y2hhbmdlLT5hY3Rpb247CiAJVHVwbGVUYWJsZVNsb3QgKm9sZF9zbG90ID0gTlVMTDsKIAlUdXBs ZVRhYmxlU2xvdCAqbmV3X3Nsb3QgPSBOVUxMOworCWJvb2wJCQl0YWJsZV9yZXdyaXRlID0gZmFs c2U7CiAKIAl1cGRhdGVfcmVwbGljYXRpb25fcHJvZ3Jlc3MoY3R4LCBmYWxzZSk7CiAKKwkvKgor CSAqIEZvciBoZWFwIHJld3JpdGVzLCB3ZSBtaWdodCBuZWVkIHRvIHJlcGxpY2F0ZSB0aGVtIGlm IHRoZSByZXdyaXR0ZW4KKwkgKiB0YWJsZSBwdWJsaXNoZXMgcmV3cml0ZSBkZGwgbWVzc2FnZS4g U28gZ2V0IHRoZSBhY3R1YWwgcmVsYXRpb24gaGVyZSBhbmQKKwkgKiBjaGVjayB0aGUgcHViYWN0 aW9uIGxhdGVyLgorCSAqLworCWlmIChyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKQorCXsK KwkJdGFibGVfcmV3cml0ZSA9IHRydWU7CisJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0 aW9uKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHJld3JpdGUpOworCQl0YXJnZXRyZWwgPSByZWxhdGlv bjsKKwl9CisKIAlpZiAoIWlzX3B1Ymxpc2hhYmxlX3JlbGF0aW9uKHJlbGF0aW9uKSkKIAkJcmV0 dXJuOwogCkBAIC0xNDEzLDYgKzE0MzUsMTMgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJQXNzZXJ0KGZhbHNl KTsKIAl9CiAKKwkvKgorCSAqIFdlIGRvbid0IHB1Ymxpc2ggdGFibGUgcmV3cml0ZSBjaGFuZ2Ug dW5sZXNzIHdlIHB1Ymxpc2ggdGhlIHJld3JpdGUgZGRsCisJICogbWVzc2FnZS4KKwkgKi8KKwlp ZiAodGFibGVfcmV3cml0ZSAmJiAhcmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQlyZXR1 cm47CisKIAkvKiBBdm9pZCBsZWFraW5nIG1lbW9yeSBieSB1c2luZyBhbmQgcmVzZXR0aW5nIG91 ciBvd24gY29udGV4dCAqLwogCW9sZCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhkYXRhLT5jb250 ZXh0KTsKIApAQCAtMTQ0Miw4ICsxNDcxLDggQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJfQogCiAJCQkvKiBD aGVjayByb3cgZmlsdGVyICovCi0JCQlpZiAoIXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVs LCBOVUxMLCAmbmV3X3Nsb3QsIHJlbGVudHJ5LAotCQkJCQkJCQkJICZhY3Rpb24pKQorCQkJaWYg KCF0YWJsZV9yZXdyaXRlICYmCisJCQkJIXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBO VUxMLCAmbmV3X3Nsb3QsIHJlbGVudHJ5LCAmYWN0aW9uKSkKIAkJCQlicmVhazsKIAogCQkJLyoK QEAgLTE0NjMsOCArMTQ5MiwxOSBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQltYXliZV9zZW5kX3NjaGVtYShj dHgsIGNoYW5nZSwgcmVsYXRpb24sIHJlbGVudHJ5KTsKIAogCQkJT3V0cHV0UGx1Z2luUHJlcGFy ZVdyaXRlKGN0eCwgdHJ1ZSk7Ci0JCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwg eGlkLCB0YXJnZXRyZWwsIG5ld19zbG90LAotCQkJCQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRy eS0+Y29sdW1ucyk7CisKKwkJCS8qCisJCQkgKiBDb252ZXJ0IHRoZSByZXdyaXRlIGluc2VydHMg dG8gdXBkYXRlcyBzbyB0aGF0IHRoZSBzdWJzY3JpYmVyCisJCQkgKiBjYW4gcmVwbGF5IGl0LiBU aGlzIGlzIG5lZWRlZCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgYmV0d2VlbgorCQkJICogcHVibGlz aGVyIGFuZCBzdWJzY3JpYmVyIGlzIGNvbnNpc3RlbnQuCisJCQkgKi8KKwkJCWlmICh0YWJsZV9y ZXdyaXRlKQorCQkJCWxvZ2ljYWxyZXBfd3JpdGVfdXBkYXRlKGN0eC0+b3V0LCB4aWQsIHRhcmdl dHJlbCwKKwkJCQkJCQkJCQlOVUxMLCBuZXdfc2xvdCwgZGF0YS0+YmluYXJ5LAorCQkJCQkJCQkJ CXJlbGVudHJ5LT5jb2x1bW5zKTsKKwkJCWVsc2UKKwkJCQlsb2dpY2FscmVwX3dyaXRlX2luc2Vy dChjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWwsIG5ld19zbG90LAorCQkJCQkJCQkJCWRhdGEtPmJp bmFyeSwgcmVsZW50cnktPmNvbHVtbnMpOwogCQkJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVl KTsKIAkJCWJyZWFrOwogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9VUERBVEU6CkBAIC0x NTk0LDYgKzE2MzQsOSBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCWFuY2VzdG9yID0gTlVMTDsKIAl9CiAKKwlp ZiAodGFibGVfcmV3cml0ZSkKKwkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisKIAkvKiBDbGVh bnVwICovCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZCk7CiAJTWVtb3J5Q29udGV4dFJlc2V0 KGRhdGEtPmNvbnRleHQpOwpAQCAtMTY3MSw4ICsxNzE0LDggQEAgcGdvdXRwdXRfdHJ1bmNhdGUo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAKIHN0 YXRpYyB2b2lkCiBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAotCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29s IHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKLQkJCQkgY29uc3Qg Y2hhciAqbWVzc2FnZSkKKwkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2Fj dGlvbmFsLAorCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1l c3NhZ2UpCiB7CiAJUEdPdXRwdXREYXRhICpkYXRhID0gKFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91 dHB1dF9wbHVnaW5fcHJpdmF0ZTsKIAlUcmFuc2FjdGlvbklkIHhpZCA9IEludmFsaWRUcmFuc2Fj dGlvbklkOwpAQCAtMTcxMiw2ICsxNzU1LDEzNyBAQCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCU91dHB1dFBsdWdp bldyaXRlKGN0eCwgdHJ1ZSk7CiB9CiAKK3N0YXRpYyB2b2lkCitwZ291dHB1dF9kZGxtZXNzYWdl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJ CQlYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIE9pZCBy ZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQlTaXplIHN6LCBjb25zdCBj aGFyICptZXNzYWdlKQoreworCVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERhdGEgKikg Y3R4LT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CisJUEdPdXRwdXRUeG5EYXRhICp0eG5kYXRhID0g KFBHT3V0cHV0VHhuRGF0YSAqKSB0eG4tPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlSZWxhdGlv bglyZWxhdGlvbiA9IE5VTEw7CisJVHJhbnNhY3Rpb25JZCB4aWQgPSBJbnZhbGlkVHJhbnNhY3Rp b25JZDsKKwlSZWxhdGlvblN5bmNFbnRyeSAqcmVsZW50cnk7CisKKwkvKgorCSAqIFJlbWVtYmVy IHRoZSB4aWQgZm9yIHRoZSBtZXNzYWdlIGluIHN0cmVhbWluZyBtb2RlLiBTZWUKKwkgKiBwZ291 dHB1dF9jaGFuZ2UuCisJICovCisJaWYgKGluX3N0cmVhbWluZykKKwkJeGlkID0gdHhuLT54aWQ7 CisKKwlzd2l0Y2ggKGNtZHR5cGUpCisJeworCQljYXNlIERDVF9UYWJsZURyb3BTdGFydDoKKwkJ CS8qCisJCQkgKiBPbiBEUk9QIHN0YXJ0LCBhZGQgdGhlIHJlbGlkIHRvIGEgZGVsZXRlZF9yZWxp ZCBsaXN0IGlmIHRoZQorCQkJICogcmVsaWQgaXMgcGFydCBvZiBhIHB1YmxpY2F0aW9uIHRoYXQg c3VwcG9ydHMgZGRsIHB1YmxpY2F0aW9uLiBXZQorCQkJICogbmVlZCB0aGlzIGJlY2F1c2Ugb24g RFJPUCBlbmQsIHRoZSByZWxpZCB3aWxsIG5vIGxvbmdlciBiZQorCQkJICogdmFsaWQuIExhdGVy IG9uIERyb3AgZW5kLCB2ZXJpZnkgdGhhdCB0aGUgZHJvcCBpcyBmb3IgYSByZWxpZAorCQkJICog dGhhdCBpcyBvbiB0aGUgZGVsZXRlZF9yaWQgbGlzdCwgYW5kIG9ubHkgdGhlbiBzZW5kIHRoZSBk ZGwKKwkJCSAqIG1lc3NhZ2UuCisJCQkgKi8KKwkJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJl bGF0aW9uKHJlbGlkKTsKKworCQkJQXNzZXJ0KHJlbGF0aW9uKTsKKwkJCXJlbGVudHJ5ID0gZ2V0 X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJaWYgKHJlbGVudHJ5LT5wdWJh Y3Rpb25zLnB1YmRkbCkKKwkJCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IGxhcHBlbmRfb2lkKGRh dGEtPmRlbGV0ZWRfcmVsaWRzLCByZWxpZCk7CisKKwkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24p OworCQkJcmV0dXJuOworCQljYXNlIERDVF9UYWJsZURyb3BFbmQ6CisJCQlpZiAoIWxpc3RfbWVt YmVyX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpKQorCQkJCXJldHVybjsKKwkJCWVs c2UKKwkJCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IGxpc3RfZGVsZXRlX29pZChkYXRhLT5kZWxl dGVkX3JlbGlkcywgcmVsaWQpOworCQkJYnJlYWs7CisJCWNhc2UgRENUX1RhYmxlQWx0ZXI6CisJ CQkvKgorCQkJICogRm9yIHRhYmxlIHJld3JpdGUgZGRsLCB3ZSBmaXJzdCBzZW5kIHRoZSBvcmln aW5hbCBkZGwgbWVzc2FnZSB0bworCQkJICogc3Vic2NyaWJlciwgdGhlbiBjb252ZXJ0IHRoZSB1 cGNvbWluZyByZXdyaXRlIElOU0VSVCB0byBVUERBVEUgYW5kCisJCQkgKiBzZW5kIHRoZW0gdG8g c3Vic2NyaWJlciBzbyB0aGF0IHRoZSBkYXRhIGJldHdlZW4gcHVibGlzaGVyIGFuZAorCQkJICog c3Vic2NyaWJlciBjYW4gYWx3YXlzIGJlIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICogV2UgZG8g dGhpcyB3YXkgYmVjYXVzZSBvZiB0d28gcmVhc29uOgorCQkJICoKKwkJCSAqICgxKSBUaGUgZGF0 YSBiZWZvcmUgdGhlIHJld3JpdGUgZGRsIGNvdWxkIGFscmVhZHkgYmUgZGlmZmVyZW50IGFtb25n CisJCQkgKiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIuIFRvIG1ha2Ugc3VyZSB0aGUgZXh0cmEg ZGF0YSBpbiBzdWJzY3JpYmVyCisJCQkgKiB3aGljaCBkb2Vzbid0IGV4aXN0IGluIHB1Ymxpc2hl ciBhbHNvIGdldCByZXdyaXR0ZW4sIHdlIG5lZWQgdG8gbGV0CisJCQkgKiB0aGUgc3Vic2NyaWJl ciBleGVjdXRlIHRoZSBvcmlnaW5hbCByZXdyaXRlIGRkbCB0byByZXdyaXRlIGFsbCB0aGUKKwkJ CSAqIGRhdGEgYXQgZmlyc3QuCisJCQkgKgorCQkJICogKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1 dGluZyByZXdyaXRlIGRkbCBjb3VsZCBiZSBkaWZmZXJlbnQgYW1vbmcKKwkJCSAqIHB1Ymxpc2hl ciBhbmQgc3Vic2NyaWJlcihkdWUgdG8gZGlmZmVyZW50IGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNl ZAorCQkJICogZHVyaW5nIHJld3JpdGUpLCBzbyB3ZSBuZWVkIHRvIHJlcGxpY2F0ZSB0aGUgcmV3 cml0ZSBVUERBVEVzIHRvIGtlZXAKKwkJCSAqIHRoZSBkYXRhIGNvbnNpc3RlbnQuCisJCQkgKgor CQkJICogVE8gSU1QUk9WRTogV2UgY291bGQgaW1wcm92ZSB0aGlzIGJ5IGxldHRpbmcgdGhlIHN1 YnNjcmliZXIgb25seQorCQkJICogcmV3cml0ZSB0aGUgZXh0cmEgZGF0YSBpbnN0ZWFkIG9mIGRv aW5nIGZ1bGx5IHJld3JpdGUgYW5kIHVzZSB0aGUKKwkJCSAqIHVwY29taW5nIHJld3JpdGUgVVBE QVRFcyB0byByZXdyaXRlIHRoZSByZXN0IGRhdGEuIEJlc2lkZXMsIHdlIG1heQorCQkJICogbm90 IG5lZWQgdG8gc2VuZCByZXdyaXRlIGNoYW5nZXMgZm9yIGFsbCB0eXBlIG9mIHJld3JpdGUgZGRs LCBmb3IKKwkJCSAqIGV4YW1wbGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nIHJld3Jp dGUgY2hhbmdlcyBmb3IgQUxURVIKKwkJCSAqIFRBQkxFIFNFVCBMT0dHRUQgYXMgdGhlIGRhdGEg aW4gdGhlIHRhYmxlIGRvZXNuJ3QgYWN0dWFsbHkgYmUKKwkJCSAqIGNoYW5nZWQuCisJCQkgKi8K KwkJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKwkJCUFzc2VydChy ZWxhdGlvbik7CisKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0 aW9uKTsKKworCQkJLyoKKwkJCSAqIFNraXAgc2VuZGluZyB0aGlzIGRkbCBpZiB3ZSBkb24ndCBw dWJsaXNoIGRkbCBtZXNzYWdlIG9yIHRoZSBkZGwKKwkJCSAqIG5lZWQgdG8gYmUgcHVibGlzaGVk IHZpYSBpdHMgcm9vdCByZWxhdGlvbi4KKwkJCSAqLworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0 aW9ucy5wdWJkZGwgfHwKKwkJCQlyZWxlbnRyeS0+cHVibGlzaF9hc19yZWxpZCAhPSByZWxpZCkK KwkJCXsKKwkJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisK KwkJCWJyZWFrOworCQljYXNlIERDVF9TaW1wbGVDbWQ6CisJCQlyZWxhdGlvbiA9IFJlbGF0aW9u SWRHZXRSZWxhdGlvbihyZWxpZCk7CisKKwkJCWlmIChyZWxhdGlvbiA9PSBOVUxMKQorCQkJCWJy ZWFrOworCisJCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7 CisKKwkJCWlmICghcmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQkJeworCQkJCVJlbGF0 aW9uQ2xvc2UocmVsYXRpb24pOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNh c2UgRENUX09iamVjdERyb3A6CisJCQkvKiBkbyBub3RoaW5nICovCisJCQlicmVhazsKKwkJZGVm YXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCB0eXBlICVkIiwgY21kdHlwZSk7CisJ CQlicmVhazsKKwl9CisKKwkvKiBTZW5kIEJFR0lOIGlmIHdlIGhhdmVuJ3QgeWV0ICovCisJaWYg KHR4bmRhdGEgJiYgIXR4bmRhdGEtPnNlbnRfYmVnaW5fdHhuKQorCQlwZ291dHB1dF9zZW5kX2Jl Z2luKGN0eCwgdHhuKTsKKworCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOwor CWxvZ2ljYWxyZXBfd3JpdGVfZGRsbWVzc2FnZShjdHgtPm91dCwKKwkJCQkJCQkJeGlkLAorCQkJ CQkJCQltZXNzYWdlX2xzbiwKKwkJCQkJCQkJcHJlZml4LAorCQkJCQkJCQlzeiwKKwkJCQkJCQkJ bWVzc2FnZSk7CisJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKKworCWlmIChyZWxhdGlv bikKKwkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7Cit9CisKIC8qCiAgKiBSZXR1cm4gdHJ1ZSBp ZiB0aGUgZGF0YSBpcyBhc3NvY2lhdGVkIHdpdGggYW4gb3JpZ2luIGFuZCB0aGUgdXNlciBoYXMK ICAqIHJlcXVlc3RlZCB0aGUgY2hhbmdlcyB0aGF0IGRvbid0IGhhdmUgYW4gb3JpZ2luLCBmYWxz ZSBvdGhlcndpc2UuCkBAIC0xOTkzLDcgKzIxNjcsOCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdP dXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJZW50cnktPnNjaGVtYV9zZW50 ID0gZmFsc2U7CiAJCWVudHJ5LT5zdHJlYW1lZF90eG5zID0gTklMOwogCQllbnRyeS0+cHViYWN0 aW9ucy5wdWJpbnNlcnQgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPQotCQkJZW50cnkt PnB1YmFjdGlvbnMucHViZGVsZXRlID0gZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBm YWxzZTsKKwkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25z LnB1YnRydW5jYXRlID0KKwkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9IGZhbHNlOwogCQll bnRyeS0+bmV3X3Nsb3QgPSBOVUxMOwogCQllbnRyeS0+b2xkX3Nsb3QgPSBOVUxMOwogCQltZW1z ZXQoZW50cnktPmV4cHJzdGF0ZSwgMCwgc2l6ZW9mKGVudHJ5LT5leHByc3RhdGUpKTsKQEAgLTIw NTEsNiArMjIyNiw3IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJl bGF0aW9uIHJlbGF0aW9uKQogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBmYWxzZTsK IAkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rp b25zLnB1YnRydW5jYXRlID0gZmFsc2U7CisJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9IGZh bHNlOwogCiAJCS8qCiAJCSAqIFR1cGxlIHNsb3RzIGNsZWFudXBzLiAoV2lsbCBiZSByZWJ1aWx0 IGxhdGVyIGlmIG5lZWRlZCkuCkBAIC0yMTY0LDYgKzIzNDAsNyBAQCBnZXRfcmVsX3N5bmNfZW50 cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCQllbnRyeS0+cHVi YWN0aW9ucy5wdWJ1cGRhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZTsKIAkJCQllbnRy eS0+cHViYWN0aW9ucy5wdWJkZWxldGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZTsKIAkJ CQllbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidHJ1 bmNhdGU7CisJCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsIHw9IHB1Yi0+cHViYWN0aW9ucy5w dWJkZGw7CiAKIAkJCQkvKgogCQkJCSAqIFdlIHdhbnQgdG8gcHVibGlzaCB0aGUgY2hhbmdlcyBh cyB0aGUgdG9wLW1vc3QgYW5jZXN0b3IKQEAgLTIzNDksNiArMjUyNiw3IEBAIHJlbF9zeW5jX2Nh Y2hlX3B1YmxpY2F0aW9uX2NiKERhdHVtIGFyZywgaW50IGNhY2hlaWQsIHVpbnQzMiBoYXNodmFs dWUpCiAJewogCQllbnRyeS0+cmVwbGljYXRlX3ZhbGlkID0gZmFsc2U7CiAJfQorCiB9CiAKIC8q IFNlbmQgUmVwbGljYXRpb24gb3JpZ2luICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9jYWNoZS9yZWxjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpp bmRleCAwMGRjMGYyLi5mMWI0ZDA5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNo ZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAg LTU2ODMsNiArNTY4Myw3IEBAIFJlbGF0aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRpb24g cmVsYXRpb24sIFB1YmxpY2F0aW9uRGVzYyAqcHViZGVzYykKIAkJcHViZGVzYy0+cHViYWN0aW9u cy5wdWJ1cGRhdGUgfD0gcHViZm9ybS0+cHVidXBkYXRlOwogCQlwdWJkZXNjLT5wdWJhY3Rpb25z LnB1YmRlbGV0ZSB8PSBwdWJmb3JtLT5wdWJkZWxldGU7CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMu cHVidHJ1bmNhdGUgfD0gcHViZm9ybS0+cHVidHJ1bmNhdGU7CisJCXB1YmRlc2MtPnB1YmFjdGlv bnMucHViZGRsIHw9IHB1YmZvcm0tPnB1YmRkbDsKIAogCQkvKgogCQkgKiBDaGVjayBpZiBhbGwg Y29sdW1ucyByZWZlcmVuY2VkIGluIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbiBhcmUgcGFydApkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmMKaW5kZXggYmQ5YjA2Ni4uOTdmNDM0YSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0zODk3LDYgKzM4 OTcsNyBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlv bnMpCiAJaW50CQkJaV9wdWJ1cGRhdGU7CiAJaW50CQkJaV9wdWJkZWxldGU7CiAJaW50CQkJaV9w dWJ0cnVuY2F0ZTsKKwlpbnQJCQlpX3B1YmRkbDsKIAlpbnQJCQlpX3B1YnZpYXJvb3Q7CiAJaW50 CQkJaSwKIAkJCQludHVwczsKQEAgLTM5MTIsMjMgKzM5MTMsMjMgQEAgZ2V0UHVibGljYXRpb25z KEFyY2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCXJlc2V0UFFFeHBCdWZmZXIo cXVlcnkpOwogCiAJLyogR2V0IHRoZSBwdWJsaWNhdGlvbnMuICovCi0JaWYgKGZvdXQtPnJlbW90 ZVZlcnNpb24gPj0gMTMwMDAwKQorCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE1MDAwMCkK IAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9p ZCwgcC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAi cC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAu cHVidHJ1bmNhdGUsIHAucHVidmlhcm9vdCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5w dWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJk ZGwsIHAucHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAll bHNlIGlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDExMDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFt ZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAu cHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNl IEFTIHB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBw LnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRs LCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIp OwogCWVsc2UKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1Qg cC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgot CQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJk ZWxldGUsIGZhbHNlIEFTIHB1YnRydW5jYXRlLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKKwkJCQkJ CQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRl LCBmYWxzZSBBUyBwdWJ0cnVuY2F0ZSwgZmFsc2UgYXMgcC5wdWJkZGwsIGZhbHNlIEFTIHB1YnZp YXJvb3QgIgogCQkJCQkJCSAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAKIAlyZXMgPSBFeGVj dXRlU3FsUXVlcnkoZm91dCwgcXVlcnktPmRhdGEsIFBHUkVTX1RVUExFU19PSyk7CkBAIC0zOTQ0 LDYgKzM5NDUsNyBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJs aWNhdGlvbnMpCiAJaV9wdWJ1cGRhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidXBkYXRlIik7CiAJ aV9wdWJkZWxldGUgPSBQUWZudW1iZXIocmVzLCAicHViZGVsZXRlIik7CiAJaV9wdWJ0cnVuY2F0 ZSA9IFBRZm51bWJlcihyZXMsICJwdWJ0cnVuY2F0ZSIpOworCWlfcHViZGRsID0gUFFmbnVtYmVy KHJlcywgInB1YmRkbCIpOwogCWlfcHVidmlhcm9vdCA9IFBRZm51bWJlcihyZXMsICJwdWJ2aWFy b290Iik7CiAKIAlwdWJpbmZvID0gcGdfbWFsbG9jKG50dXBzICogc2l6ZW9mKFB1YmxpY2F0aW9u SW5mbykpOwpAQCAtMzk2Nyw2ICszOTY5LDggQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZv dXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwg aV9wdWJkZWxldGUpLCAidCIpID09IDApOwogCQlwdWJpbmZvW2ldLnB1YnRydW5jYXRlID0KIAkJ CShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidHJ1bmNhdGUpLCAidCIpID09IDApOwor CQlwdWJpbmZvW2ldLnB1YmRkbCA9CisJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1 YmRkbCksICJ0IikgPT0gMCk7CiAJCXB1YmluZm9baV0ucHVidmlhcm9vdCA9CiAJCQkoc3RyY21w KFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YnZpYXJvb3QpLCAidCIpID09IDApOwogCkBAIC00MDQ2 LDYgKzQwNTAsMTUgQEAgZHVtcFB1YmxpY2F0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFB1Ymxp Y2F0aW9uSW5mbyAqcHViaW5mbykKIAkJZmlyc3QgPSBmYWxzZTsKIAl9CiAKKwlpZiAocHViaW5m by0+cHViZGRsKQorCXsKKwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1 ZXJ5LCAiLCAiKTsKKworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgImRkbCIpOworCQlm aXJzdCA9IGZhbHNlOworCX0KKwogCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihxdWVyeSwgJ1wnJyk7 CiAKIAlpZiAocHViaW5mby0+cHVidmlhcm9vdCkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IDQyN2Y1ZDQuLjY4 NTY4M2UgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuaApAQCAtNjIwLDYgKzYyMCw3IEBAIHR5cGVkZWYgc3RydWN0IF9Q dWJsaWNhdGlvbkluZm8KIAlib29sCQlwdWJkZWxldGU7CiAJYm9vbAkJcHVidHJ1bmNhdGU7CiAJ Ym9vbAkJcHVidmlhcm9vdDsKKwlib29sCQlwdWJkZGw7CiB9IFB1YmxpY2F0aW9uSW5mbzsKIAog LyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jIGIvc3JjL2Jpbi9w Z193YWxkdW1wL3JtZ3JkZXNjLmMKaW5kZXggNmI4YzE3Yi4uNzkyZjQzOCAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKKysrIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3Jt Z3JkZXNjLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5o IgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlv bi9tZXNzYWdlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1 ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgogI2luY2x1ZGUgInJtZ3JkZXNjLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9zdGFuZGJ5ZGVmcy5oIgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2Ny aWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwppbmRleCBjNjQ1ZDY2Li4yZTk0ZmNhIDEw MDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwvZGVz Y3JpYmUuYwpAQCAtNjE1OSw3ICs2MTU5LDcgQEAgbGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFy ICpwYXR0ZXJuKQogCVBRRXhwQnVmZmVyRGF0YSBidWY7CiAJUEdyZXN1bHQgICAqcmVzOwogCXBy aW50UXVlcnlPcHQgbXlvcHQgPSBwc2V0LnBvcHQ7Ci0Jc3RhdGljIGNvbnN0IGJvb2wgdHJhbnNs YXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2V9OworCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10g PSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZX07CiAKIAlpZiAocHNldC5zdmVyc2lvbiA8IDEwMDAwMCkKIAl7CkBAIC02MTk0LDYg KzYxOTQsMTAgQEAgbGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQlhcHBl bmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAiLFxuICBwdWJ2aWFyb290IEFTIFwiJXNcIiIs CiAJCQkJCQkgIGdldHRleHRfbm9vcCgiVmlhIHJvb3QiKSk7CisJaWYgKHBzZXQuc3ZlcnNpb24g Pj0gMTQwMDAwKQorCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJICAiLFxuICBwdWJk ZGwgQVMgXCIlc1wiIiwKKwkJCQkJCSAgZ2V0dGV4dF9ub29wKCJERExzIikpOwogCiAJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCSAiXG5GUk9NIHBnX2NhdGFsb2cucGdfcHVibGlj YXRpb25cbiIpOwpAQCAtNjI4NCw2ICs2Mjg4LDcgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29u c3QgY2hhciAqcGF0dGVybikKIAlQR3Jlc3VsdCAgICpyZXM7CiAJYm9vbAkJaGFzX3B1YnRydW5j YXRlOwogCWJvb2wJCWhhc19wdWJ2aWFyb290OworCWJvb2wJCWhhc19wdWJkZGw7CiAKIAlQUUV4 cEJ1ZmZlckRhdGEgdGl0bGU7CiAJcHJpbnRUYWJsZUNvbnRlbnQgY29udDsKQEAgLTYzMDAsNiAr NjMwNSw3IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAKIAlo YXNfcHVidHJ1bmNhdGUgPSAocHNldC5zdmVyc2lvbiA+PSAxMTAwMDApOwogCWhhc19wdWJ2aWFy b290ID0gKHBzZXQuc3ZlcnNpb24gPj0gMTMwMDAwKTsKKwloYXNfcHViZGRsID0gIChwc2V0LnN2 ZXJzaW9uID49IDE1MDAwMCk7CiAKIAlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CiAKQEAgLTYzMTMs NiArNjMxOSw5IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJ aWYgKGhhc19wdWJ2aWFyb290KQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJ CSAiLCBwdWJ2aWFyb290Iik7CisJaWYgKGhhc19wdWJkZGwpCisJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKCZidWYsCisJCQkJCQkJICIsIHB1YmRkbCIpOwogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZi dWYsCiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uXG4iKTsKIApAQCAt NjM2NCw2ICs2MzczLDggQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVy bikKIAkJCW5jb2xzKys7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCW5jb2xzKys7CisJCWlm IChoYXNfcHViZGRsKQorCQkJbmNvbHMrKzsKIAogCQlpbml0UFFFeHBCdWZmZXIoJnRpdGxlKTsK IAkJcHJpbnRmUFFFeHBCdWZmZXIoJnRpdGxlLCBfKCJQdWJsaWNhdGlvbiAlcyIpLCBwdWJuYW1l KTsKQEAgLTYzNzgsNiArNjM4OSw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIg KnBhdHRlcm4pCiAJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIlRy dW5jYXRlcyIpLCB0cnVlLCBhbGlnbik7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCXByaW50 VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiVmlhIHJvb3QiKSwgdHJ1ZSwgYWxp Z24pOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdl dHRleHRfbm9vcCgiRERMcyIpLCB0cnVlLCBhbGlnbik7CiAKIAkJcHJpbnRUYWJsZUFkZENlbGwo JmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCAyKSwgZmFsc2UsIGZhbHNlKTsKIAkJcHJpbnRUYWJs ZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCAzKSwgZmFsc2UsIGZhbHNlKTsKQEAg LTYzODgsNiArNjQwMSw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRl cm4pCiAJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDcpLCBm YWxzZSwgZmFsc2UpOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmludFRhYmxlQWRkQ2Vs bCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDgpLCBmYWxzZSwgZmFsc2UpOworCQlpZiAoaGFz X3B1YmRkbCkKKwkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwg OSksIGZhbHNlLCBmYWxzZSk7CiAKIAkJaWYgKCFwdWJhbGx0YWJsZXMpCiAJCXsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3Jt Z3JsaXN0LmgKaW5kZXggMDAwYmNiZi4uMzdkZmQ0NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv YWNjZXNzL3JtZ3JsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKQEAg LTQ3LDMgKzQ3LDQgQEAgUEdfUk1HUihSTV9DT01NSVRfVFNfSUQsICJDb21taXRUcyIsIGNvbW1p dF90c19yZWRvLCBjb21taXRfdHNfZGVzYywgY29tbWl0X3RzX2kKIFBHX1JNR1IoUk1fUkVQTE9S SUdJTl9JRCwgIlJlcGxpY2F0aW9uT3JpZ2luIiwgcmVwbG9yaWdpbl9yZWRvLCByZXBsb3JpZ2lu X2Rlc2MsIHJlcGxvcmlnaW5faWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCiBQR19S TUdSKFJNX0dFTkVSSUNfSUQsICJHZW5lcmljIiwgZ2VuZXJpY19yZWRvLCBnZW5lcmljX2Rlc2Ms IGdlbmVyaWNfaWRlbnRpZnksIE5VTEwsIE5VTEwsIGdlbmVyaWNfbWFzaywgTlVMTCkKIFBHX1JN R1IoUk1fTE9HSUNBTE1TR19JRCwgIkxvZ2ljYWxNZXNzYWdlIiwgbG9naWNhbG1zZ19yZWRvLCBs b2dpY2FsbXNnX2Rlc2MsIGxvZ2ljYWxtc2dfaWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxv Z2ljYWxtc2dfZGVjb2RlKQorUEdfUk1HUihSTV9MT0dJQ0FMRERMTVNHX0lELCAiTG9naWNhbERE TE1lc3NhZ2UiLCBsb2dpY2FsZGRsbXNnX3JlZG8sIGxvZ2ljYWxkZGxtc2dfZGVzYywgbG9naWNh bGRkbG1zZ19pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgbG9naWNhbGRkbG1zZ19kZWNvZGUp CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCAyYzg3MTA2Li5jZTFiMTdmIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKQEAgLTExODI5LDQgKzExODI5LDEzIEBACiB7IG9pZCA9PiAnNDY0Mycs IGRlc2NyID0+ICdleHBhbmQganNvbiBmb3JtYXQgRERMIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQn LAogICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUg PT4gJ3RleHQnLAogICBwcm9hcmd0eXBlcyA9PiAndGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFy c2VfZXhwYW5kX2NvbW1hbmQnIH0sCit7IG9pZCA9PiAnNDY0NCcsIGRlc2NyID0+ICd0cmlnZ2Vy IGZvciBkZGwgY29tbWFuZCBkZXBhcnNlJywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVw YXJzZV9kZGxfY29tbWFuZF9lbmQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAg cHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29t bWFuZF9lbmQnIH0sCit7IG9pZCA9PiAnNDY0NScsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwg Y29tbWFuZCBkZXBhcnNlIHN0YXJ0JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJz ZV9kZGxfY29tbWFuZF9zdGFydCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBw cm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21t YW5kX3N0YXJ0JyB9LAoreyBvaWQgPT4gJzQ2NDYnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRs IGNvbW1hbmQgZGVwYXJzZSB0YWJsZSByZXdyaXRlJywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRp b25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcics CisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFi bGVfcmV3cml0ZScgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVi bGljYXRpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAppbmRleCBl Y2Y1YTI4Li5kYWZkNDgzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCkBAIC01 NCw2ICs1NCw5IEBAIENBVEFMT0cocGdfcHVibGljYXRpb24sNjEwNCxQdWJsaWNhdGlvblJlbGF0 aW9uSWQpCiAKIAkvKiB0cnVlIGlmIHBhcnRpdGlvbiBjaGFuZ2VzIGFyZSBwdWJsaXNoZWQgdXNp bmcgcm9vdCBzY2hlbWEgKi8KIAlib29sCQlwdWJ2aWFyb290OworCisJLyogdHJ1ZSBpZiB0YWJs ZSBjcmVhdGlvbnMgYXJlIHB1Ymxpc2hlZCAqLworCWJvb2wJCXB1YmRkbDsKIH0gRm9ybURhdGFf cGdfcHVibGljYXRpb247CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTcyLDYgKzc1LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25BY3Rpb25zCiAJYm9vbAkJcHVidXBkYXRlOwogCWJv b2wJCXB1YmRlbGV0ZTsKIAlib29sCQlwdWJ0cnVuY2F0ZTsKKwlib29sCQlwdWJkZGw7CiB9IFB1 YmxpY2F0aW9uQWN0aW9uczsKIAogdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25EZXNjCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKaW5kZXggMTAwOTFjMy4uZmQyZWU3ZiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaApAQCAtNzEsNyArNzEsOCBAQCBleHRlcm4gdm9p ZCBFdmVudFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFuZChPYmplY3RBZGRyZXNzIGFkZHJlc3Ms CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVl KTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQgb2JqZWN0SWQp OwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAq c3ViY21kLAotCQkJCQkJCQkJCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKKwkJCQkJCQkJCQkJ CU9iamVjdEFkZHJlc3MgYWRkcmVzcywKKwkJCQkJCQkJCQkJCWJvb2wgcmV3cml0ZSk7CiBleHRl cm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlRW5kKHZvaWQpOwogCiBleHRlcm4gdm9pZCBF dmVudFRyaWdnZXJDb2xsZWN0R3JhbnQoSW50ZXJuYWxHcmFudCAqaXN0bXQpOwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vZGRsbWVzc2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmE4ZGNhODYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxt ZXNzYWdlLmgKQEAgLTAsMCArMSw2MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBkZGxtZXNz YWdlLmgKKyAqCSAgIEV4cG9ydHMgZnJvbSByZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2Uu YworICoKKyAqIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqCisgKiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHX0xPR0lDQUxfRERMX01FU1NBR0VfSAor I2RlZmluZSBQR19MT0dJQ0FMX0RETF9NRVNTQUdFX0gKKworI2luY2x1ZGUgImFjY2Vzcy94bG9n LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dy ZWFkZXIuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgorCisKKy8qCisgKiBTdXBwb3J0IGZv ciBrZWVwaW5nIHRyYWNrIG9mIGRlcGFyc2VkIGNvbW1hbmRzLgorICovCit0eXBlZGVmIGVudW0g RGVwYXJzZWRDb21tYW5kVHlwZQoreworCURDVF9TaW1wbGVDbWQsCisJRENUX1RhYmxlRHJvcFN0 YXJ0LAorCURDVF9UYWJsZURyb3BFbmQsCisJRENUX1RhYmxlQWx0ZXIsCisJRENUX09iamVjdENy ZWF0ZSwKKwlEQ1RfT2JqZWN0RHJvcAorfSBEZXBhcnNlZENvbW1hbmRUeXBlOworCisvKgorICog R2VuZXJpYyBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlIHdhbCByZWNvcmQuCisgKi8KK3R5 cGVkZWYgc3RydWN0IHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UKK3sKKwlPaWQJCQkJCQlkYklkOwkJ CS8qIGRhdGFiYXNlIE9pZCBlbWl0dGVkIGZyb20gKi8KKwlTaXplCQkJCQlwcmVmaXhfc2l6ZTsJ LyogbGVuZ3RoIG9mIHByZWZpeCAqLworCU9pZAkJCQkJCXJlbGlkOwkJCS8qIGlkIG9mIHRoZSB0 YWJsZSAqLworCURlcGFyc2VkQ29tbWFuZFR5cGUJCWNtZHR5cGU7CQkvKiB0eXBlIG9mIHNxbCBj b21tYW5kICovCisJU2l6ZQkJCQkJbWVzc2FnZV9zaXplOwkgIC8qIHNpemUgb2YgdGhlIG1lc3Nh Z2UgKi8KKworCS8qCisJICogcGF5bG9hZCwgaW5jbHVkaW5nIG51bGwtdGVybWluYXRlZCBwcmVm aXggb2YgbGVuZ3RoIHByZWZpeF9zaXplCisJICovCisJY2hhcgkJbWVzc2FnZVtGTEVYSUJMRV9B UlJBWV9NRU1CRVJdOworfSB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlOworCisjZGVmaW5lIFNpemVP ZkxvZ2ljYWxERExNZXNzYWdlCShvZmZzZXRvZih4bF9sb2dpY2FsX2RkbF9tZXNzYWdlLCBtZXNz YWdlKSkKKworZXh0ZXJuIFhMb2dSZWNQdHIgTG9nTG9naWNhbERETE1lc3NhZ2UoY29uc3QgY2hh ciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJ CQkJCSAgIGNvbnN0IGNoYXIgKmRkbF9tZXNzYWdlLCBzaXplX3Qgc2l6ZSk7CisKKy8qIFJNR1Ig QVBJKi8KKyNkZWZpbmUgWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFCTB4MDAKK3ZvaWQJCWxvZ2lj YWxkZGxtc2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7Cit2b2lkCQlsb2dpY2FsZGRs bXNnX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK2NvbnN0 IGNoYXIgKmxvZ2ljYWxkZGxtc2dfaWRlbnRpZnkodWludDggaW5mbyk7CisKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmggYi9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9kZWNvZGUuaAppbmRleCA3NDFiZjY1Li40MjdhN2I5IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9kZWNvZGUuaApAQCAtMjcsNiArMjcsNyBAQCBleHRlcm4gdm9pZCBoZWFwMl9kZWNvZGUo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0 ZXJuIHZvaWQgeGFjdF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVj b3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgc3RhbmRieV9kZWNvZGUoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgbG9n aWNhbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVm ZmVyICpidWYpOworZXh0ZXJuIHZvaWQgbG9naWNhbGRkbG1zZ19kZWNvZGUoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogCiBleHRlcm4gdm9pZCBM b2dpY2FsRGVjb2RpbmdQcm9jZXNzUmVjb3JkKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwK IAkJCQkJCQkJCQkgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9sb2dpY2FscHJvdG8uaAppbmRleCA3ZWFhNGM5Li41ZDYxNzQ4IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9sb2dpY2FscHJvdG8uaApAQCAtNjEsNiArNjEsNyBAQCB0eXBlZGVmIGVudW0gTG9n aWNhbFJlcE1zZ1R5cGUKIAlMT0dJQ0FMX1JFUF9NU0dfUkVMQVRJT04gPSAnUicsCiAJTE9HSUNB TF9SRVBfTVNHX1RZUEUgPSAnWScsCiAJTE9HSUNBTF9SRVBfTVNHX01FU1NBR0UgPSAnTScsCisJ TE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0UgPSAnTCcsCiAJTE9HSUNBTF9SRVBfTVNHX0JFR0lO X1BSRVBBUkUgPSAnYicsCiAJTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkUgPSAnUCcsCiAJTE9HSUNB TF9SRVBfTVNHX0NPTU1JVF9QUkVQQVJFRCA9ICdLJywKQEAgLTIyOSw3ICsyMzAsMTEgQEAgZXh0 ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV90cnVuY2F0ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNh Y3Rpb25JZCB4aWQsCiBleHRlcm4gTGlzdCAqbG9naWNhbHJlcF9yZWFkX3RydW5jYXRlKFN0cmlu Z0luZm8gaW4sCiAJCQkJCQkJCQkgIGJvb2wgKmNhc2NhZGUsIGJvb2wgKnJlc3RhcnRfc2Vxcyk7 CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRy YW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKLQkJCQkJCQkJCSBib29sIHRyYW5zYWN0 aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7 CisJCQkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJ CQkJCQkgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBsb2dpY2Fs cmVwX3dyaXRlX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBY TG9nUmVjUHRyIGxzbiwKKwkJCQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNv bnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIGNoYXIgKmxvZ2ljYWxyZXBfcmVhZF9kZGxtZXNz YWdlKFN0cmluZ0luZm8gaW4sIFhMb2dSZWNQdHIgKmxzbiwgY29uc3QgY2hhciAqKnByZWZpeCwg U2l6ZSAqc3opOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBv dXQsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQg KmNvbHVtbnMpOwogZXh0ZXJuIExvZ2ljYWxSZXBSZWxhdGlvbiAqbG9naWNhbHJlcF9yZWFkX3Jl bChTdHJpbmdJbmZvIGluKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291 dHB1dF9wbHVnaW4uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaApp bmRleCBiN2QyOGQ3Li43NjNlNDNmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9vdXRwdXRfcGx1Z2luLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3Bs dWdpbi5oCkBAIC05MSw2ICs5MSwxOCBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlTWVz c2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCQlj b25zdCBjaGFyICptZXNzYWdlKTsKIAogLyoKKyAqIENhbGxlZCBmb3IgdGhlIGxvZ2ljYWwgZGVj b2RpbmcgRERMIG1lc3NhZ2VzLgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlRERM TWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJ CQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNz YWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJICAg T2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJ CQkJCQkJCQkgICBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpt ZXNzYWdlKTsKKworLyoKICAqIEZpbHRlciBjaGFuZ2VzIGJ5IG9yaWdpbi4KICAqLwogdHlwZWRl ZiBib29sICgqTG9naWNhbERlY29kZUZpbHRlckJ5T3JpZ2luQ0IpIChzdHJ1Y3QgTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LApAQCAtMjAyLDYgKzIxNCwxOSBAQCB0eXBlZGVmIHZvaWQgKCpM b2dpY2FsRGVjb2RlU3RyZWFtTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCiAvKgorICogQ2Fs bGJhY2sgZm9yIHN0cmVhbWluZyBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlcyBmcm9tIGlu LXByb2dyZXNzCisgKiB0cmFuc2FjdGlvbnMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKkxvZ2ljYWxE ZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJCSBY TG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwK KwkJCQkJCQkJCQkJCSBPaWQgcmVsaWQsCisJCQkJCQkJCQkJCQkgRGVwYXJzZWRDb21tYW5kVHlw ZSBjbWR0eXBlLAorCQkJCQkJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCQkJCQkJ IGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCisvKgogICogQ2FsbGJhY2sgZm9yIHN0cmVhbWluZyB0 cnVuY2F0ZXMgZnJvbSBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuCiAgKi8KIHR5cGVkZWYgdm9p ZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1UcnVuY2F0ZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwKQEAgLTIyMSw2ICsyNDYsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQ bHVnaW5DYWxsYmFja3MKIAlMb2dpY2FsRGVjb2RlVHJ1bmNhdGVDQiB0cnVuY2F0ZV9jYjsKIAlM b2dpY2FsRGVjb2RlQ29tbWl0Q0IgY29tbWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVNZXNzYWdlQ0Ig bWVzc2FnZV9jYjsKKwlMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCIGRkbG1lc3NhZ2VfY2I7CiAJ TG9naWNhbERlY29kZUZpbHRlckJ5T3JpZ2luQ0IgZmlsdGVyX2J5X29yaWdpbl9jYjsKIAlMb2dp Y2FsRGVjb2RlU2h1dGRvd25DQiBzaHV0ZG93bl9jYjsKIApAQCAtMjM5LDYgKzI2NSw3IEBAIHR5 cGVkZWYgc3RydWN0IE91dHB1dFBsdWdpbkNhbGxiYWNrcwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1D b21taXRDQiBzdHJlYW1fY29tbWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1DaGFuZ2VDQiBz dHJlYW1fY2hhbmdlX2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1NZXNzYWdlQ0Igc3RyZWFtX21l c3NhZ2VfY2I7CisJTG9naWNhbERlY29kZVN0cmVhbURETE1lc3NhZ2VDQiBzdHJlYW1fZGRsbWVz c2FnZV9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtVHJ1bmNhdGVDQiBzdHJlYW1fdHJ1bmNhdGVf Y2I7CiB9IE91dHB1dFBsdWdpbkNhbGxiYWNrczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vcGdvdXRwdXQuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0 LmgKaW5kZXggMDIwMjc1NS4uODNlMGIxZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vcGdvdXRwdXQuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5o CkBAIC0yNSw2ICsyNSw3IEBAIHR5cGVkZWYgc3RydWN0IFBHT3V0cHV0RGF0YQogCXVpbnQzMgkJ cHJvdG9jb2xfdmVyc2lvbjsKIAlMaXN0CSAgICpwdWJsaWNhdGlvbl9uYW1lczsKIAlMaXN0CSAg ICpwdWJsaWNhdGlvbnM7CisJTGlzdAkgICAqZGVsZXRlZF9yZWxpZHM7CiAJYm9vbAkJYmluYXJ5 OwogCWJvb2wJCXN0cmVhbWluZzsKIAlib29sCQltZXNzYWdlczsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3Jlb3JkZXJidWZmZXIuaAppbmRleCAwMmI1OWExLi4wYjFhOTE2IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKKysrIGIvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCkBAIC0xMSw2ICsxMSw4IEBACiAKICNpbmNsdWRl ICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAibGliL2lsaXN0LmgiCisjaW5jbHVk ZSAibm9kZXMvbm9kZXMuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9zaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAj aW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKQEAgLTU2LDYgKzU4LDcgQEAgdHlwZWRlZiBlbnVt IFJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBlCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOU0VSVCwK IAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9E RUxFVEUsCisJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0UsCiAJUkVPUkRFUl9CVUZG RVJfQ0hBTkdFX01FU1NBR0UsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTiwK IAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5URVJOQUxfU05BUFNIT1QsCkBAIC0xMzAsNiArMTMz LDE2IEBAIHR5cGVkZWYgc3RydWN0IFJlb3JkZXJCdWZmZXJDaGFuZ2UKIAkJCWNoYXIJICAgKm1l c3NhZ2U7CiAJCX0JCQltc2c7CiAKKwkJLyogRERMIE1lc3NhZ2UuICovCisJCXN0cnVjdAorCQl7 CisJCQljaGFyCSAgICpwcmVmaXg7CisJCQlTaXplCQltZXNzYWdlX3NpemU7CisJCQljaGFyCSAg ICptZXNzYWdlOworCQkJT2lkCQkJcmVsaWQ7CisJCQlEZXBhcnNlZENvbW1hbmRUeXBlCWNtZHR5 cGU7CisJCX0JCQlkZGxtc2c7CisKIAkJLyogTmV3IHNuYXBzaG90LCBzZXQgd2hlbiBhY3Rpb24g PT0gKl9JTlRFUk5BTF9TTkFQU0hPVCAqLwogCQlTbmFwc2hvdAlzbmFwc2hvdDsKIApAQCAtNDM1 LDYgKzQ0OCwxNiBAQCB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyTWVzc2FnZUNCKSAoUmVv cmRlckJ1ZmZlciAqcmIsCiAJCQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAog CQkJCQkJCQkJCWNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisvKiBEREwgbWVzc2FnZSBjYWxsYmFj ayBzaWduYXR1cmUgKi8KK3R5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0Ip IChSZW9yZGVyQnVmZmVyICpyYiwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CisJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25z dCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERl cGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIHN6LAorCQkJCQkJ CQkJCSAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCiAvKiBiZWdpbiBwcmVwYXJlIGNhbGxiYWNr IHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlckJlZ2luUHJlcGFyZUNC KSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4p OwpAQCAtNTAxLDYgKzUyNCwxNyBAQCB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFt TWVzc2FnZUNCKSAoCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAog CQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisvKiBzdHJlYW0gRERMIG1lc3Nh Z2UgY2FsbGJhY2sgc2lnbmF0dXJlICovCit0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3Ry ZWFtRERMTWVzc2FnZUNCKSAoCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlciAqcmIsCisJCQkJ CQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCQkJIFhMb2dSZWNQdHIg bWVzc2FnZV9sc24sCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJ CQkJIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkJCSBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUs CisJCQkJCQkJCQkJCQkgU2l6ZSBzeiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdl KTsKKwogLyogc3RyZWFtIHRydW5jYXRlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2 b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0IpICgKIAkJCQkJCQkJCQkJICAgUmVv cmRlckJ1ZmZlciAqcmIsCkBAIC01NTIsNiArNTg2LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIK IAlSZW9yZGVyQnVmZmVyQXBwbHlUcnVuY2F0ZUNCIGFwcGx5X3RydW5jYXRlOwogCVJlb3JkZXJC dWZmZXJDb21taXRDQiBjb21taXQ7CiAJUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQiBtZXNzYWdlOwor CVJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IgZGRsbWVzc2FnZTsKIAogCS8qCiAJICogQ2FsbGJh Y2tzIHRvIGJlIGNhbGxlZCB3aGVuIHN0cmVhbWluZyBhIHRyYW5zYWN0aW9uIGF0IHByZXBhcmUg dGltZS4KQEAgLTU3MSw2ICs2MDYsNyBAQCBzdHJ1Y3QgUmVvcmRlckJ1ZmZlcgogCVJlb3JkZXJC dWZmZXJTdHJlYW1Db21taXRDQiBzdHJlYW1fY29tbWl0OwogCVJlb3JkZXJCdWZmZXJTdHJlYW1D aGFuZ2VDQiBzdHJlYW1fY2hhbmdlOwogCVJlb3JkZXJCdWZmZXJTdHJlYW1NZXNzYWdlQ0Igc3Ry ZWFtX21lc3NhZ2U7CisJUmVvcmRlckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VDQiBzdHJlYW1fZGRs bWVzc2FnZTsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtVHJ1bmNhdGVDQiBzdHJlYW1fdHJ1bmNhdGU7 CiAKIAkvKgpAQCAtNjUwLDYgKzY4Niw5IEBAIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1 ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkJ ICBTbmFwc2hvdCBzbmFwLCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSAgYm9vbCB0cmFuc2Fj dGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXpl LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZURE TE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLCBYTG9nUmVjUHRyIGxzbiwK KwkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJ CQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlLCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5 cGUgY21kdHlwZSk7CiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyQ29tbWl0KFJlb3JkZXJCdWZm ZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJWExvZ1JlY1B0ciBjb21taXRfbHNu LCBYTG9nUmVjUHRyIGVuZF9sc24sCiAJCQkJCQkJCVRpbWVzdGFtcFR6IGNvbW1pdF90aW1lLCBS ZXBPcmlnaW5JZCBvcmlnaW5faWQsIFhMb2dSZWNQdHIgb3JpZ2luX2xzbik7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wc3FsLm91dAppbmRleCBhN2Y1NzAwLi5iZmM3M2MyIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHNxbC5vdXQKQEAgLTU5NzAsOSArNTk3MCw5IEBAIExpc3Qgb2Ygc2NoZW1hcwogKDAg cm93cykKIAogXGRScCAibm8uc3VjaC5wdWJsaWNhdGlvbiIKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gTmFtZSB8IE93bmVyIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2YgcHVibGljYXRpb25zCisgTmFtZSB8IE93bmVyIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQogKDAgcm93cykKIAogXGRScyAibm8uc3VjaC5z dWJzY3JpcHRpb24iCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1Ymxp Y2F0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0Cmlu ZGV4IDQyN2Y4N2UuLjJiN2NkMGQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcHVibGljYXRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGlj YXRpb24ub3V0CkBAIC0zMCwyMCArMzAsMjAgQEAgRVJST1I6ICBjb25mbGljdGluZyBvciByZWR1 bmRhbnQgb3B0aW9ucwogTElORSAxOiAuLi51Yl94eHggV0lUSCAocHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QgPSAndHJ1ZScsIHB1Ymxpc2hfdmkuLi4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiBcZFJwCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMK LSAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVz dHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IGYgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlv bnMKKyAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgICB8IGYgICAgICAgIHwgZgorIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgyIHJvd3MpCiAKIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWJfZGVmYXVsdCBTRVQgKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZScp OwogXGRScAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExp c3Qgb2YgcHVibGljYXRpb25zCi0gICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICAgIHwgZgotIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwaWJfaW5zX3RydW5j dCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1 bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMiByb3dzKQog CiAtLS0gYWRkaW5nIHRhYmxlcwpAQCAtODcsMTAgKzg3LDEwIEBAIFJFU0VUIGNsaWVudF9taW5f bWVzc2FnZXM7CiAtLSBzaG91bGQgYmUgYWJsZSB0byBhZGQgc2NoZW1hIHRvICdGT1IgVEFCTEUn IHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJM RVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAg ICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CkBAIC05OSwyMCArOTksMjAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3Vs ZCBiZSBhYmxlIHRvIGRyb3Agc2NoZW1hIGZyb20gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIHB1 Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKIAogLS0gc2hvdWxkIGJlIGFibGUgdG8gc2V0IHNj aGVtYSB0byAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb3J0YWJsZSBTRVQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJf Zm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJf dGVzdCIKIApAQCAtMTIzLDEwICsxMjMsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJf Zm9yc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogQ1JFQVRFIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZm9yX3RibF9zY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Qs IFRBQkxFIHB1Yl90ZXN0LnRlc3RwdWJfbm9wazsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7 CiBcZFJwKyB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yX3RibF9zY2hlbWEKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yX3RibF9zY2hlbWEKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpA QCAtMTM1LDEwICsxMzUsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBh YmxlIHRvIGFkZCBhIHRhYmxlIG9mIHRoZSBzYW1lIHNjaGVtYSB0byB0aGUgc2NoZW1hIHB1Ymxp Y2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBBREQgVEFCTEUgcHVi X3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiBUYWJsZXMgZnJvbSBz Y2hlbWFzOgpAQCAtMTQ3LDEwICsxNDcsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNo b3VsZCBiZSBhYmxlIHRvIGRyb3AgdGhlIHRhYmxlCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi X2ZvcnNjaGVtYSBEUk9QIFRBQkxFIHB1Yl90ZXN0LnRlc3RwdWJfbm9wazsKIFxkUnArIHRlc3Rw dWJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAg InB1Yl90ZXN0IgogCkBAIC0xNjEsMTAgKzE2MSwxMCBAQCBFUlJPUjogIHJlbGF0aW9uICJ0ZXN0 cHViX25vcGsiIGlzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbgogLS0gc2hvdWxkIGJlIGFi bGUgdG8gc2V0IHRhYmxlIHRvIHNjaGVtYSBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1Yl9mb3JzY2hlbWEgU0VUIFRBQkxFIHB1Yl90ZXN0LnRlc3RwdWJfbm9wazsKIFxkUnAr IHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rl c3QudGVzdHB1Yl9ub3BrIgogCkBAIC0xODYsMTAgKzE4NiwxMCBAQCBQdWJsaWNhdGlvbnM6CiAg ICAgInRlc3RwdWJfZm9yYWxsdGFibGVzIgogCiBcZFJwKyB0ZXN0cHViX2ZvcmFsbHRhYmxlcwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0 YWJsZXMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRh YmxlcworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCB0ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIERST1AgVEFCTEUgdGVzdHB1Yl90YmwyOwpA QCAtMjAxLDE5ICsyMDEsMTkgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIzIEZPUiBUQUJM RSB0ZXN0cHViX3RibDM7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjQgRk9SIFRBQkxFIE9O TFkgdGVzdHB1Yl90YmwzOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3Rw dWIzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViMwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMyIKICAgICAicHVi bGljLnRlc3RwdWJfdGJsM2EiCiAKIFxkUnArIHRlc3RwdWI0Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNAotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0CisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHVibGljLnRlc3RwdWJfdGJsMyIKIApAQCAtMjM0LDEwICsyMzQsMTAgQEAgVVBEQVRFIHRl c3RwdWJfcGFydGVkMSBTRVQgYSA9IDE7CiAtLSBvbmx5IHBhcmVudCBpcyBsaXN0ZWQgYXMgYmVp bmcgaW4gcHVibGljYXRpb24sIG5vdCB0aGUgcGFydGl0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcnBhcnRlZCBBREQgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBcZFJwKyB0ZXN0cHVi X2ZvcnBhcnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX2ZvcnBhcnRlZAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHVi X3BhcnRlZCIKIApAQCAtMjUyLDEwICsyNTIsMTAgQEAgQUxURVIgVEFCTEUgdGVzdHB1Yl9wYXJ0 ZWQgREVUQUNIIFBBUlRJVElPTiB0ZXN0cHViX3BhcnRlZDE7CiBVUERBVEUgdGVzdHB1Yl9wYXJ0 ZWQxIFNFVCBhID0gMTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ycGFydGVkIFNFVCAo cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKIFxkUnArIHRlc3RwdWJfZm9ycGFy dGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3JwYXJ0ZWQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCB0Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9y cGFydGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCB0ICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcGFydGVk IgogCkBAIC0yODQsMTAgKzI4NCwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJP Uic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjUgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJs MSwgdGVzdHB1Yl9yZl90YmwyIFdIRVJFIChjIDw+ICd0ZXN0JyBBTkQgZCA8IDUpIFdJVEggKHB1 Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVz dHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8 IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAg ICJwdWJsaWMudGVzdHB1Yl9yZl90YmwyIiBXSEVSRSAoKGMgPD4gJ3Rlc3QnOjp0ZXh0KSBBTkQg KGQgPCA1KSkKQEAgLTMwMCwxMCArMzAwLDEwIEBAIFRhYmxlczoKIAogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1YjUgQUREIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA+IDEwMDAgQU5E IGUgPCAyMDAwKTsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGlj LnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMiIgV0hFUkUgKChj IDw+ICd0ZXN0Jzo6dGV4dCkgQU5EIChkIDwgNSkpCkBAIC0zMTksMTAgKzMxOSwxMCBAQCBQdWJs aWNhdGlvbnM6CiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IERST1AgVEFCTEUgdGVzdHB1 Yl9yZl90YmwyOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAg IHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMu dGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwzIiBXSEVSRSAoKGUg PiAxMDAwKSBBTkQgKGUgPCAyMDAwKSkKQEAgLTMzMCwxMCArMzMwLDEwIEBAIFRhYmxlczoKIC0t IHJlbW92ZSB0ZXN0cHViX3JmX3RibDEgYW5kIGFkZCB0ZXN0cHViX3JmX3RibDMgYWdhaW4gKGFu b3RoZXIgV0hFUkUgZXhwcmVzc2lvbikKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBU QUJMRSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPiAzMDAgQU5EIGUgPCA1MDApOwogXGRScCsg dGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwzIiBX SEVSRSAoKGUgPiAzMDApIEFORCAoZSA8IDUwMCkpCiAKQEAgLTM2NiwxMCArMzY2LDEwIEBAIFNF VCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0 cHViX3N5bnRheDEgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSwgT05MWSB0ZXN0cHViX3JmX3Ri bDMgV0hFUkUgKGUgPCA5OTkpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGll bnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9zeW50YXgxCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MQotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHVi X3JmX3RibDMiIFdIRVJFIChlIDwgOTk5KQpAQCAtMzc5LDEwICszNzksMTAgQEAgU0VUIGNsaWVu dF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfc3lu dGF4MiBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3NjaGVtYTEudGVzdHB1 Yl9yZl90Ymw1IFdIRVJFIChoIDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwogUkVT RVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4MgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDIKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDIKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJ0ZXN0cHVi X3JmX3NjaGVtYTEudGVzdHB1Yl9yZl90Ymw1IiBXSEVSRSAoaCA8IDk5OSkKQEAgLTQ5NywxMCAr NDk3LDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNiBGT1IgVEFCTEVTIElOIFNDSEVN QSB0ZXN0cHViX3JmX3NjaGVtYTI7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFC TEVTIElOIFNDSEVNQSB0ZXN0cHViX3JmX3NjaGVtYTIsIFRBQkxFIHRlc3RwdWJfcmZfc2NoZW1h Mi50ZXN0cHViX3JmX3RibDYgV0hFUkUgKGkgPCA5OSk7CiBSRVNFVCBjbGllbnRfbWluX21lc3Nh Z2VzOwogXGRScCsgdGVzdHB1YjYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWI2Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjYKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJ0ZXN0cHViX3JmX3Nj aGVtYTIudGVzdHB1Yl9yZl90Ymw2IiBXSEVSRSAoaSA8IDk5KQogVGFibGVzIGZyb20gc2NoZW1h czoKQEAgLTcxNCwxMCArNzE0LDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3RhYmxl X2lucyBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdHJ1bmNhdGUnKTsKIFJFU0VUIGNsaWVudF9t aW5fbWVzc2FnZXM7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX3RhYmxlX2lucyBBREQgVEFC TEUgdGVzdHB1Yl90Ymw1IChhKTsJCS0tIG9rCiBcZFJwKyB0ZXN0cHViX3RhYmxlX2lucwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfdGFibGVfaW5z Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3RhYmxlX2lucwor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDUiIChhKQogCkBA IC04OTEsMTAgKzg5MSwxMCBAQCBDUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJz IChhIGludCwgYiBpbnQsIGMgaW50LCBQUklNQVJZIEtFWSAoYSxjKSk7CiBBTFRFUiBUQUJMRSB0 ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0 cHViX3RibF9ib3RoX2ZpbHRlcnNfcGtleTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfYm90 aF9maWx0ZXJzIEFERCBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEsYykgV0hFUkUg KGMgIT0gMSk7CiBcZFJwKyB0ZXN0cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycworICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBm CiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMiIChhLCBjKSBX SEVSRSAoYyA8PiAxKQogCkBAIC0xMDk5LDEwICsxMDk5LDEwIEBAIEVSUk9SOiAgcmVsYXRpb24g InRlc3RwdWJfdGJsMSIgaXMgYWxyZWFkeSBtZW1iZXIgb2YgcHVibGljYXRpb24gInRlc3RwdWJf Zm9ydGJsCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YmwgRk9SIFRBQkxFIHRlc3Rw dWJfdGJsMTsKIEVSUk9SOiAgcHVibGljYXRpb24gInRlc3RwdWJfZm9ydGJsIiBhbHJlYWR5IGV4 aXN0cwogXGRScCsgdGVzdHB1Yl9mb3J0YmwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGJsCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YmwKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJw dWJfdGVzdC50ZXN0cHViX25vcGsiCiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCkBAIC0xMTQw LDEwICsxMTQwLDEwIEBAIFB1YmxpY2F0aW9uczoKICAgICAidGVzdHB1Yl9mb3J0YmwiCiAKIFxk UnArIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBm ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2RlZmF1bHQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVz dC50ZXN0cHViX25vcGsiCiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCkBAIC0xMjIxLDEwICsx MjIxLDEwIEBAIFJFVk9LRSBDUkVBVEUgT04gREFUQUJBU0UgcmVncmVzc2lvbiBGUk9NIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlcjI7CiBEUk9QIFRBQkxFIHRlc3RwdWJfcGFydGVkOwogRFJPUCBU QUJMRSB0ZXN0cHViX3RibDE7CiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYK ICgxIHJvdykKIAogLS0gZmFpbCAtIG11c3QgYmUgb3duZXIgb2YgcHVibGljYXRpb24KQEAgLTEy MzQsMjAgKzEyMzQsMjAgQEAgRVJST1I6ICBtdXN0IGJlIG93bmVyIG9mIHB1YmxpY2F0aW9uIHRl c3RwdWJfZGVmYXVsdAogUkVTRVQgUk9MRTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVm YXVsdCBSRU5BTUUgVE8gdGVzdHB1Yl9mb287CiBcZFJwIHRlc3RwdWJfZm9vCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAg ICBOYW1lICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cHViX2ZvbyB8 IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICBOYW1lICAgICB8ICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwdWJfZm9vIHwg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSByZW5h bWUgYmFjayB0byBrZWVwIHRoZSByZXN0IHNpbXBsZQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb28gUkVOQU1FIFRPIHRlc3RwdWJfZGVmYXVsdDsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZGVmYXVsdCBPV05FUiBUTyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogXGRScCB0ZXN0 cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwdWJfZGVmYXVsdCB8IHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlcjIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHB1Yl9kZWZhdWx0IHwg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyMiB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gYWRk aW5nIHNjaGVtYXMgYW5kIHRhYmxlcwpAQCAtMTI2MywxOSArMTI2MywxOSBAQCBDUkVBVEUgVEFC TEUgIkNVUlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hFTUEiKGlkIGludCk7CiBTRVQgY2xpZW50 X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9y c2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHVi X3Rlc3QxIgogCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjJfZm9yc2NoZW1hIEZPUiBUQUJM RVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QyLCBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0 cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAg ICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTI4OSw0NCArMTI4OSw0NCBAQCBD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjZfZm9yc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1B ICJDVVJSRU5UX1NDSEVNQSIsIENVUgogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFi bGUgRk9SIFRBQkxFICJDVVJSRU5UX1NDSEVNQSIuIkNVUlJFTlRfU0NIRU1BIjsKIFJFU0VUIGNs aWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAg ICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1 YjRfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjRfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWI0X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAg ICJDVVJSRU5UX1NDSEVNQSIKIAogXGRScCsgdGVzdHB1YjVfZm9yc2NoZW1hCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjVfZm9yc2NoZW1hCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIKICAgICAi cHVibGljIgogCiBcZFJwKyB0ZXN0cHViNl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjZfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogICAgICJwdWJsaWMiCiAK IFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgIkNV UlJFTlRfU0NIRU1BLkNVUlJFTlRfU0NIRU1BIgogCkBAIC0xMzYwLDEwICsxMzYwLDEwIEBAIEVS Uk9SOiAgc2NoZW1hICJ0ZXN0cHViX3ZpZXciIGRvZXMgbm90IGV4aXN0CiAtLSBkcm9wcGluZyB0 aGUgc2NoZW1hIHNob3VsZCByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRpb24KIERST1Ag U0NIRU1BIHB1Yl90ZXN0MzsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVz dDIiCkBAIC0xMzcxLDIwICsxMzcxLDIwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSByZW5h bWluZyB0aGUgc2NoZW1hIHNob3VsZCByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRpb24K IEFMVEVSIFNDSEVNQSBwdWJfdGVzdDEgUkVOQU1FIHRvIHB1Yl90ZXN0MV9yZW5hbWVkOwogXGRS cCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hl bWFzOgogICAgICJwdWJfdGVzdDFfcmVuYW1lZCIKICAgICAicHViX3Rlc3QyIgogCiBBTFRFUiBT Q0hFTUEgcHViX3Rlc3QxX3JlbmFtZWQgUkVOQU1FIHRvIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3Rw dWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAg ICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMzkyLDEwICsxMzkyLDEwIEBAIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBhZGQgc2NoZW1hCiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEgcHVi X3Rlc3QyOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0 MDQsMTAgKzE0MDQsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2No ZW1hOwogRVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0 CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQxNiwxMCAr MTQxNiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjFfZm9yc2NoZW1hIEFERCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIEVSUk9SOiAgc2No ZW1hICJwdWJfdGVzdDEiIGlzIGFscmVhZHkgbWVtYmVyIG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHVi MV9mb3JzY2hlbWEiCiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpA QCAtMTQyNywxMCArMTQyNywxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIgcHVi bGljYXRpb24gZHJvcCBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVt YSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QyOwogXGRScCsgdGVzdHB1YjFfZm9yc2No ZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFf Zm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2Zv cnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVz dDEiCiAKQEAgLTE0MzgsMTAgKzE0MzgsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgcHVi X3Rlc3QyOwogRVJST1I6ICB0YWJsZXMgZnJvbSBzY2hlbWEgInB1Yl90ZXN0MiIgYXJlIG5vdCBw YXJ0IG9mIHRoZSBwdWJsaWNhdGlvbgogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE0 NDksMjkgKzE0NDksMjkgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3Nj aGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlz dAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJv bSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKIC0tIGRyb3AgYWxsIHNjaGVtYXMKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgcHVi X3Rlc3QxOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSBy b3cpCiAKIC0tIGFsdGVyIHB1YmxpY2F0aW9uIHNldCBtdWx0aXBsZSBzY2hlbWEKIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVz dDEsIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIi CkBAIC0xNDgwLDEwICsxNDgwLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0 ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5v dCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0 OTIsMTAgKzE0OTIsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHJlbW92aW5nIHRoZSBk dXBsaWNhdGUgc2NoZW1hcwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNF VCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjFf Zm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJw dWJfdGVzdDEiCiAKQEAgLTE1NzQsMTggKzE1NzQsMTggQEAgU0VUIGNsaWVudF9taW5fbWVzc2Fn ZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIzX2ZvcnNjaGVtYTsKIFJF U0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm ICAgICAgICB8IGYKICgxIHJvdykKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjNfZm9yc2No ZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIzX2ZvcnNj aGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIz X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19m b3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rl c3QxIgogCkBAIC0xNTk1LDIwICsxNTk1LDIwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHVi X2ZvcnNjaGVtYV9mb3J0YWJsZSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIFRBCiBD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEgRk9SIFRBQkxFIHB1 Yl90ZXN0Mi50YmwxLCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFJFU0VUIGNsaWVudF9t aW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJs ZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0Mi50YmwxIgogVGFibGVzIGZy b20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlX2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3J0YWJsZV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi X2ZvcnRhYmxlX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0 Mi50YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKLS0gCjEuOC4zLjEKCg== --000000000000d5f46705eac248cb--