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 1omwaa-0001kV-TS for pgsql-hackers@arkaria.postgresql.org; Mon, 24 Oct 2022 12:29:57 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1omwaZ-0001li-3P for pgsql-hackers@arkaria.postgresql.org; Mon, 24 Oct 2022 12:29:55 +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 1omwaX-0001kb-Ks for pgsql-hackers@lists.postgresql.org; Mon, 24 Oct 2022 12:29:54 +0000 Received: from mail-lf1-x131.google.com ([2a00:1450:4864:20::131]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1omwaU-0001tQ-2v for pgsql-hackers@lists.postgresql.org; Mon, 24 Oct 2022 12:29:52 +0000 Received: by mail-lf1-x131.google.com with SMTP id r14so16504604lfm.2 for ; Mon, 24 Oct 2022 05:29:49 -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=bnGPTdoUsFw+KrXk5lxvCQAop0nN+iI+CATd+HvQsLo=; b=Qc4BBtpdcF+BEWYCD0ygJizx6YudPghnX9ByUa+E5flM4YKQd+p/JNcvLu0rSHv3f6 c0d11VlBnZekYpS0yk9Iv2LexSAeHbjJOWZowZL1ejHNhlmXnoi/MSnkV01awqr1Nu2N /nB0X2QLvmRXtR0FEmUkItekRJR3H8eL/B/n/EoNpyx9Jn+IUoqjzlCniQzXmS2M4Szq shdqLdSrdActOKuIcXUi9HUE3X64wygC3gbi27815/t2eBRnWy2ZLAs6J+0+V1QsB3OM pbSe9gNnqI/D2nhQ1k8g9w2zvcGjZhjJT6EHHwOfW7GLGny4ZYdkZUj5KXhxBp3Osuj9 aWxg== 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=bnGPTdoUsFw+KrXk5lxvCQAop0nN+iI+CATd+HvQsLo=; b=elSqa3nZpyo2jTafhsRuQ0SeeyTRsVpWt8d+1ZBj6j9qecX2nR6UHrMnr3ERLEJ+CT qwMekg3iORTgfYp6TXe73SCZn2eoOdmtKxt+gszOSsNDuKO0rTbg0hlh5O7B7+83LTzc 8hpVNA4HHaJ2YJUpvja5Ob9el1kTuqpjAyh+9IvfSOh4piUWaCXXnHiB97xKflZnl8F2 rEV22EOOBXBtPCO5NiX0V9ouuETJI+q5kCaAF7LY8zX1w0ArglanFbXnuoBORUoeQvky bLvAid2LpvIvdqYxKOayuJDNNd32uSpAChOqeFV7UGJRWuoNvzl5cMHEq8AhTqHlJ6e1 P++w== X-Gm-Message-State: ACrzQf3L4lLqwhwJDcXmnVH68haxh0iWmFxfl2EKpyQooEOyV17bciEp QXqTjaPV/MdyNrrTBgwfOyvz9gr8wNroK+SKNy8= X-Google-Smtp-Source: AMsMyM5cNWTKorGtvhsyzXEoHPu1IZY9tcEohrBhXdclG3Pj8Gdvh46PzICION/776c+ZBNVxM1tI3CvddXINbVHGnw= X-Received: by 2002:a05:6512:2211:b0:4a2:7dc0:281a with SMTP id h17-20020a056512221100b004a27dc0281amr12848231lfu.296.1666614587595; Mon, 24 Oct 2022 05:29:47 -0700 (PDT) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: Ajin Cherian Date: Mon, 24 Oct 2022 23:29:34 +1100 Message-ID: Subject: Re: Support logical replication of DDLs To: vignesh C Cc: Dilip Kumar , Zheng Li , Alvaro Herrera , "houzj.fnst@fujitsu.com" , Peter Smith , Amit Kapila , Masahiko Sawada , Japin Li , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000078f73c05ebc6f2db" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000078f73c05ebc6f2db Content-Type: text/plain; charset="UTF-8" On Wed, Oct 19, 2022 at 4:48 PM vignesh C wrote: > > This patch also includes changes for replication of: > CREATE/ALTER/DROP STATISTICS > and pgindent fixes for the ddl replication code. > Thanks for the comments, the attached v30 patch has the changes for the same. > Adding support for deparsing of CREATE/ALTER/DROP LANGUAGE for ddl replication. regards, Ajin Cherian Fujitsu Australia --00000000000078f73c05ebc6f2db Content-Type: application/octet-stream; name="v31-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v31-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l9mra1zy3 RnJvbSBiMTQ1MmNiZTkxMmVhMzY4YTM2M2FiNjRjNzQ5YmQ3YThmODRjMzA2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjAgT2N0IDIwMjIgMDY6MDA6MjggLTA0MDAKU3ViamVjdDogW1BBVENI IHYzMSA0LzRdIFRlc3QgY2FzZXMgZm9yIERETCByZXBsaWNhdGlvbi4KCkF1dGhvcjogVGFrYW1p 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== --00000000000078f73c05ebc6f2db Content-Type: application/octet-stream; name="v31-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v31-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l9mra1zx2 RnJvbSA4ZDVkODE2YjJmZjU0ZmQyMDUyYzhkMGZmYzFlYjMyNmQzYjFiNDUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjAgT2N0IDIwMjIgMDU6NTY6MjcgLTA0MDAKU3ViamVjdDogW1BBVENI IHYzMSAzLzRdIFN1cHBvcnQgQ1JFQVRFIFRBQkxFIEFTIFNFTEVDVCBJTlRPCgpUaGUgbWFpbiBp 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 bWFuZHMvY3JlYXRlYXMuYwppbmRleCAxNTJjMjliLi5iNzc5NWRhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ny ZWF0ZWFzLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5o IgogI2luY2x1ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9jcmVh dGVhcy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKICNpbmNsdWRlICJj b21tYW5kcy9tYXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBjcmVhdGVfY3Rh c19pbnRlcm5hbChMaXN0ICphdHRyTGlzdCwgSW50b0NsYXVzZSAqaW50bykKIAkJU3RvcmVWaWV3 UXVlcnkoaW50b1JlbGF0aW9uQWRkci5vYmplY3RJZCwgcXVlcnksIGZhbHNlKTsKIAkJQ29tbWFu ZENvdW50ZXJJbmNyZW1lbnQoKTsKIAl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRmlyZSB0aGUg dHJpZ2dlciBmb3IgdGFibGVfaW5pdF93cml0ZSBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgc28K KwkJICogdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZSBjYXRhbG9nIGluZm8gYWJvdXQgdGhlIG5ld2x5 IGNyZWF0ZWQgdGFibGUKKwkJICogaW4gdGhlIHRyaWdnZXIgZnVuY3Rpb24uCisJCSAqLworCQlF dmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZSgoTm9kZSAqKSBjcmVhdGUsIGludG9SZWxhdGlvbkFk ZHIpOworCX0KIAogCXJldHVybiBpbnRvUmVsYXRpb25BZGRyOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9kZXBhcnNlLmMKaW5kZXggYjU0OWEwOC4uNDI0ZTI3NiAxMDA3NTUKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxf ZGVwYXJzZS5jCkBAIC04Mjc4LDYgKzgyNzgsMjYgQEAgZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQo T2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKIAlyZXR1cm4gbmV3X29iamVj dF9vYmplY3QodHlwbW9kb3V0KTsKIH0KIAorLyoKKyAqIERlcGFyc2UgQ1JFQVRFIFRBQkxFIEFT IGNvbW1hbmQuCisgKgorICogZGVwYXJzZV9DcmVhdGVTdG10IGRvIHRoZSBhY3R1YWwgd29yayBh cyB3ZSBkZXBhcnNlIHRoZSBmaW5hbCBDcmVhdGVTdG10IGZvcgorICogQ1JFQVRFIFRBQkxFIEFT IGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlVGFibGVBc1N0 bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9iamVjdElkOworCU5vZGUJICAg KnBhcnNldHJlZTsKKworCUFzc2VydChjbWQtPnR5cGUgPT0gU0NUX0NyZWF0ZVRhYmxlQXMpOwor CisJcGFyc2V0cmVlID0gY21kLT5kLmN0YXMucmVhbF9jcmVhdGU7CisJb2JqZWN0SWQgPSBjbWQt PmQuY3Rhcy5hZGRyZXNzLm9iamVjdElkOworCisJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU3RtdChv YmplY3RJZCwgcGFyc2V0cmVlKTsKK30KKwogCiAvKgogICogRGVwYXJzZSB0aGUgdHlwZSBhbmFs eXplIG9wdGlvbi4KQEAgLTg4ODUsNiArODkwNSw5IEBAIGRlcGFyc2VfdXRpbGl0eV9jb21tYW5k KENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpCiAJCWNhc2UgU0NUX0dy YW50OgogCQkJdHJlZSA9IGRlcGFyc2VfR3JhbnRTdG10KGNtZCk7CiAJCQlicmVhazsKKwkJY2Fz ZSBTQ1RfQ3JlYXRlVGFibGVBczoKKwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10 KGNtZCk7CisJCQlicmVhazsKIAkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToKIAkJCXRyZWUgPSBk ZXBhcnNlX0FsdGVyT3BGYW1pbHkoY21kKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5jCmluZGV4IDU4NTViMzkuLmZkOTVlNmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmMKQEAgLTEzMyw3ICsxMzMsOCBAQCBDcmVhdGVFdmVudFRyaWdnZXIoQ3Jl YXRlRXZlbnRUcmlnU3RtdCAqc3RtdCkKIAlpZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRk bF9jb21tYW5kX3N0YXJ0IikgIT0gMCAmJgogCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRs X2NvbW1hbmRfZW5kIikgIT0gMCAmJgogCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ry b3AiKSAhPSAwICYmCi0JCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9yZXdyaXRlIikg IT0gMCkKKwkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAwICYm CisJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikgIT0gMCkKIAkJ ZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAJCQkJ IGVycm1zZygidW5yZWNvZ25pemVkIGV2ZW50IG5hbWUgXCIlc1wiIiwKQEAgLTE1OSw3ICsxNjAs OCBAQCBDcmVhdGVFdmVudFRyaWdnZXIoQ3JlYXRlRXZlbnRUcmlnU3RtdCAqc3RtdCkKIAkvKiBW YWxpZGF0ZSB0YWcgbGlzdCwgaWYgYW55LiAqLwogCWlmICgoc3RyY21wKHN0bXQtPmV2ZW50bmFt ZSwgImRkbF9jb21tYW5kX3N0YXJ0IikgPT0gMCB8fAogCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFt ZSwgImRkbF9jb21tYW5kX2VuZCIpID09IDAgfHwKLQkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUs ICJzcWxfZHJvcCIpID09IDApCisJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ryb3Ai KSA9PSAwIHx8CisJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfaW5pdF93cml0ZSIp ID09IDApCiAJCSYmIHRhZ3MgIT0gTlVMTCkKIAkJdmFsaWRhdGVfZGRsX3RhZ3MoInRhZyIsIHRh Z3MpOwogCWVsc2UgaWYgKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9yZXdyaXRlIikg PT0gMApAQCAtNTg1LDcgKzU4Nyw4IEBAIEV2ZW50VHJpZ2dlckNvbW1vblNldHVwKE5vZGUgKnBh cnNldHJlZSwKIAkJZGJndGFnID0gQ3JlYXRlQ29tbWFuZFRhZyhwYXJzZXRyZWUpOwogCQlpZiAo ZXZlbnQgPT0gRVZUX0RETENvbW1hbmRTdGFydCB8fAogCQkJZXZlbnQgPT0gRVZUX0RETENvbW1h bmRFbmQgfHwKLQkJCWV2ZW50ID09IEVWVF9TUUxEcm9wKQorCQkJZXZlbnQgPT0gRVZUX1NRTERy b3AgfHwKKwkJCWV2ZW50ID09IEVWVF9UYWJsZUluaXRXcml0ZSkKIAkJewogCQkJaWYgKCFjb21t YW5kX3RhZ19ldmVudF90cmlnZ2VyX29rKGRiZ3RhZykpCiAJCQkJZWxvZyhFUlJPUiwgInVuZXhw ZWN0ZWQgY29tbWFuZCB0YWcgXCIlc1wiIiwgR2V0Q29tbWFuZFRhZ05hbWUoZGJndGFnKSk7CkBA IC04NjgsNiArODcxLDE2MyBAQCBFdmVudFRyaWdnZXJUYWJsZVJld3JpdGUoTm9kZSAqcGFyc2V0 cmVlLCBPaWQgdGFibGVPaWQsIGludCByZWFzb24pCiAJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQo KTsKIH0KIAorCisvKgorICogRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydAorICogICAg IFByZXBhcmUgdG8gcmVjZWl2ZSBkYXRhIG9uIGFuIENSRUFURSBUQUJMRSBBUy9TRUxFVCBJTlRP IGNvbW1hbmQgYWJvdXQKKyAqICAgICB0byBiZSBleGVjdXRlZC4KKyAqLwordm9pZAorRXZlbnRU cmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChOb2RlICpwYXJzZXRyZWUpCit7CisJTWVtb3J5Q29u dGV4dCBvbGRjeHQ7CisJQ29sbGVjdGVkQ29tbWFuZCAqY29tbWFuZDsKKworCS8qIGlnbm9yZSBp ZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAq LworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCW9sZGN4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN4dCk7 CisKKwljb21tYW5kID0gcGFsbG9jKHNpemVvZihDb2xsZWN0ZWRDb21tYW5kKSk7CisKKwljb21t YW5kLT50eXBlID0gU0NUX0NyZWF0ZVRhYmxlQXM7CisJY29tbWFuZC0+aW5fZXh0ZW5zaW9uID0g Y3JlYXRpbmdfZXh0ZW5zaW9uOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRyZXNzID0gSW52YWxpZE9i amVjdEFkZHJlc3M7CisJY29tbWFuZC0+ZC5jdGFzLnJlYWxfY3JlYXRlID0gTlVMTDsKKwljb21t YW5kLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHBhcnNldHJlZSk7CisKKwljb21tYW5kLT5wYXJl bnQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCWN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQgPSBjb21tYW5kOworCisJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGN4dCk7Cit9CisKKy8qCisgKiBFdmVudFRyaWdnZXJUYWJsZUluaXRX cml0ZUVuZAorICoJCUZpbmlzaCB1cCBzYXZpbmcgYW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVDVCBJ TlRPIGNvbW1hbmQuCisgKgorICogRklYTUUgdGhpcyBBUEkgaXNuJ3QgY29uc2lkZXJpbmcgdGhl IHBvc3NpYmlsaXR5IHRoYXQgYW4geGFjdC9zdWJ4YWN0IGlzCisgKiBhYm9ydGVkIHBhcnR3YXkg dGhyb3VnaC4gIFByb2JhYmx5IGl0J3MgYmVzdCB0byBhZGQgYW4KKyAqIEF0RU9TdWJYYWN0X0V2 ZW50VHJpZ2dlcnMoKSB0byBmaXggdGhpcy4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyVGFibGVJ bml0V3JpdGVFbmQodm9pZCkKK3sKKwlDb2xsZWN0ZWRDb21tYW5kICpwYXJlbnQ7CisKKwkvKiBp Z25vcmUgaWYgZXZlbnQgdHJpZ2dlciBjb250ZXh0IG5vdCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlz YWJsZWQgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSB8fAorCQljdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkKQorCQlyZXR1cm47CisK KwlwYXJlbnQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5wYXJl bnQ7CisKKwlwZnJlZShjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kKTsK KworCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQgPSBwYXJlbnQ7Cit9 CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUKKyAqCisgKiBE ZXBhcnNlIHRoZSBkZGwgdGFibGUgY3JlYXRlIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAqLworRGF0 dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZShQR19GVU5DVElPTl9BUkdT KQoreworCWNoYXIJCXJlbHBlcnNpc3Q7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kOworCWNoYXIJ ICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8p KQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOwor CisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKwlBc3Nl cnQoY21kKTsKKworCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKGNtZC0+ZC5zaW1w bGUuYWRkcmVzcy5vYmplY3RJZCk7CisKKwkvKgorCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9n IGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFibGUgaXMgYSB0ZW1wb3JhcnkKKwkgKiB0YWJs ZS4KKwkgKgorCSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxl cyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxlcworCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFs dGVyZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcyBtYWtlcyBpdAorCSAqIHBvc3NpYmxl IHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21p bmcKKwkgKiByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkg Ki8KKwlpZiAocmVscGVyc2lzdCA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQlyZXR1cm4gUG9p bnRlckdldERhdHVtKE5VTEwpOworCisJLyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdB TCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlIHNhbWUuICovCisJanNvbl9zdHJpbmcg PSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNlKTsKKworCWlmIChqc29uX3N0cmlu ZyAhPSBOVUxMKQorCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ZC5zaW1w bGUuYWRkcmVzcy5vYmplY3RJZCwgRENUX1NpbXBsZUNtZCwKKwkJCQkJCQkganNvbl9zdHJpbmcs IHN0cmxlbihqc29uX3N0cmluZykgKyAxKTsKKworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVM TCk7Cit9CisKKy8qCisgKiBGaXJlIHRhYmxlX2luaXRfcmV3cml0ZSB0cmlnZ2Vycy4KKyAqLwor dm9pZAorRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGUoTm9kZSAqcmVhbF9jcmVhdGUsIE9iamVj dEFkZHJlc3MgYWRkcmVzcykKK3sKKwlMaXN0CSAgICpydW5saXN0OworCUV2ZW50VHJpZ2dlckRh dGEgdHJpZ2RhdGE7CisJQ29sbGVjdGVkQ29tbWFuZCAqY29tbWFuZDsKKworCS8qCisJICogU2Vl IEV2ZW50VHJpZ2dlckRETENvbW1hbmRTdGFydCBmb3IgYSBkaXNjdXNzaW9uIGFib3V0IHdoeSBl dmVudAorCSAqIHRyaWdnZXJzIGFyZSBkaXNhYmxlZCBpbiBzaW5nbGUgdXNlciBtb2RlLgorCSAq LworCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCisJCXJldHVybjsKKworCS8qCisJICogQWxzbyBk byBub3RoaW5nIGlmIG91ciBzdGF0ZSBpc24ndCBzZXQgdXAsIHdoaWNoIGl0IHdvbid0IGJlIGlm IHRoZXJlCisJICogd2VyZW4ndCBhbnkgcmVsZXZhbnQgZXZlbnQgdHJpZ2dlcnMgYXQgdGhlIHN0 YXJ0IG9mIHRoZSBjdXJyZW50IERETAorCSAqIGNvbW1hbmQuICBUaGlzIHRlc3QgbWlnaHQgdGhl cmVmb3JlIHNlZW0gb3B0aW9uYWwsIGJ1dCBpdCdzCisJICogKm5lY2Vzc2FyeSosIGJlY2F1c2Ug RXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAgbWlnaHQgZmluZCB0cmlnZ2VycyB0aGF0CisJICogZGlk bid0IGV4aXN0IGF0IHRoZSB0aW1lIHRoZSBjb21tYW5kIHN0YXJ0ZWQuCisJICovCisJaWYgKCFj dXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUpCisJCXJldHVybjsKKworCS8qIERvIG5vdGhpbmcgaWYg bm8gY29tbWFuZCB3YXMgY29sbGVjdGVkLiAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5jdXJyZW50Q29tbWFuZCkKKwkJcmV0dXJuOworCisJY29tbWFuZCA9IGN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisKKwlydW5saXN0ID0gRXZlbnRUcmlnZ2Vy Q29tbW9uU2V0dXAoY29tbWFuZC0+cGFyc2V0cmVlLAorCQkJCQkJCQkJICBFVlRfVGFibGVJbml0 V3JpdGUsCisJCQkJCQkJCQkgICJ0YWJsZV9pbml0X3dyaXRlIiwKKwkJCQkJCQkJCSAgJnRyaWdk YXRhKTsKKwlpZiAocnVubGlzdCA9PSBOSUwpCisJCXJldHVybjsKKworCS8qIFNldCB0aGUgcmVh bCBDcmVhdGVUYWJsZSBzdGF0bWVudCBhbmQgb2JqZWN0IGFkZHJlc3MgKi8KKwljb21tYW5kLT5k LmN0YXMucmVhbF9jcmVhdGUgPSByZWFsX2NyZWF0ZTsKKwljb21tYW5kLT5kLmN0YXMuYWRkcmVz cyA9IGFkZHJlc3M7CisKKwkvKiBSdW4gdGhlIHRyaWdnZXJzLiAqLworCUV2ZW50VHJpZ2dlcklu dm9rZShydW5saXN0LCAmdHJpZ2RhdGEpOworCisJLyogQ2xlYW51cC4gKi8KKwlsaXN0X2ZyZWUo cnVubGlzdCk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBhbnl0aGluZyB0aGUgZXZlbnQgdHJpZ2dl cnMgZGlkIHdpbGwgYmUgdmlzaWJsZSB0byB0aGUgbWFpbgorCSAqIGNvbW1hbmQuCisJICovCisJ Q29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKK30KKwogLyoKICAqIEludm9rZSBlYWNoIGV2ZW50 IHRyaWdnZXIgaW4gYSBsaXN0IG9mIGV2ZW50IHRyaWdnZXJzLgogICovCkBAIC0xMTQ5LDcgKzEz MDksOCBAQCB0cmFja0Ryb3BwZWRPYmplY3RzTmVlZGVkKHZvaWQpCiAJICovCiAJcmV0dXJuIChF dmVudENhY2hlTG9va3VwKEVWVF9TUUxEcm9wKSAhPSBOSUwpIHx8CiAJCShFdmVudENhY2hlTG9v a3VwKEVWVF9UYWJsZVJld3JpdGUpICE9IE5JTCkgfHwKLQkJKEV2ZW50Q2FjaGVMb29rdXAoRVZU X0RETENvbW1hbmRFbmQpICE9IE5JTCk7CisJCShFdmVudENhY2hlTG9va3VwKEVWVF9ERExDb21t YW5kRW5kKSAhPSBOSUwpIHx8CisJCShFdmVudENhY2hlTG9va3VwKEVWVF9UYWJsZUluaXRXcml0 ZSkgIT0gTklMKTsKIH0KIAogLyoKQEAgLTE4NjgsNiArMjAyOSw3IEBAIHBnX2V2ZW50X3RyaWdn ZXJfZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQljYXNlIFNDVF9BbHRlck9wRmFt aWx5OgogCQkJY2FzZSBTQ1RfQ3JlYXRlT3BDbGFzczoKIAkJCWNhc2UgU0NUX0FsdGVyVFNDb25m aWc6CisJCQljYXNlIFNDVF9DcmVhdGVUYWJsZUFzOgogCQkJCXsKIAkJCQkJY2hhcgkgICAqaWRl bnRpdHk7CiAJCQkJCWNoYXIJICAgKnR5cGU7CkBAIC0xODg1LDYgKzIwNDcsOCBAQCBwZ19ldmVu dF90cmlnZ2VyX2RkbF9jb21tYW5kcyhQR19GVU5DVElPTl9BUkdTKQogCQkJCQkJYWRkciA9IGNt ZC0+ZC5jcmVhdGVvcGMuYWRkcmVzczsKIAkJCQkJZWxzZSBpZiAoY21kLT50eXBlID09IFNDVF9B bHRlclRTQ29uZmlnKQogCQkJCQkJYWRkciA9IGNtZC0+ZC5hdHNjZmcuYWRkcmVzczsKKwkJCQkJ ZWxzZSBpZiAoY21kLT50eXBlID09IFNDVF9BbHRlclRTQ29uZmlnKQorCQkJCQkJYWRkciA9IGNt ZC0+ZC5jdGFzLmFkZHJlc3M7CiAKIAkJCQkJLyoKIAkJCQkJICogSWYgYW4gb2JqZWN0IHdhcyBk cm9wcGVkIGluIHRoZSBzYW1lIGNvbW1hbmQgd2UgbWF5IGVuZApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9w dWJsaWNhdGlvbmNtZHMuYwppbmRleCA4MTk3MDE2Li40YzllZDI1IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtMTAxOCw2ICsxMDE4LDExIEBAIENyZWF0ZVB1Ymxp Y2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQog CQkJQ01EVEFHX0RST1BfU1RBVElTVElDUwogCQl9OwogCisJCUNvbW1hbmRUYWcJaW5pdF9jb21t YW5kc1tdID0geworCQkJQ01EVEFHX0NSRUFURV9UQUJMRV9BUywKKwkJCUNNRFRBR19TRUxFQ1Rf SU5UTworCQl9OworCiAJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdn ZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5kIiwg ZW5kX2NvbW1hbmRzLAogCQkJCQkJCQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2VsZiwg cHVib2lkKTsKQEAgLTEwMjksNiArMTAzNCwxMCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0 YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJLyogQ3JlYXRlIHRo ZSB0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50 VHJpZ2dlcigidGFibGVfcmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMsCiAJCQkJCQkJCQkgbGVu Z3Rob2YocmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUg dGhlIHRhYmxlX2luaXRfd3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNh RXZlbnRUcmlnZ2VyKCJ0YWJsZV9pbml0X3dyaXRlIiwgaW5pdF9jb21tYW5kcywKKwkJCQkJCQkJ CSBsZW5ndGhvZihpbml0X2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOwogCX0KIAogCXRhYmxl X2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90 Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4IGJlYTM1YTYu LjUwODM5YzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCkBAIC0xNjY2LDggKzE2NjYsMTAgQEAgUHJvY2Vzc1V0 aWxpdHlTbG93KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQlicmVhazsKIAogCQkJY2FzZSBUX0Ny ZWF0ZVRhYmxlQXNTdG10OgorCQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQocGFy c2V0cmVlKTsKIAkJCQlhZGRyZXNzID0gRXhlY0NyZWF0ZVRhYmxlQXMocHN0YXRlLCAoQ3JlYXRl VGFibGVBc1N0bXQgKikgcGFyc2V0cmVlLAogCQkJCQkJCQkJCQlwYXJhbXMsIHF1ZXJ5RW52LCBx Yyk7CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQoKTsKIAkJCQlicmVhazsKIAog CQkJY2FzZSBUX1JlZnJlc2hNYXRWaWV3U3RtdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL2V2dGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5j CmluZGV4IGY3ZjcxNjUuLjdmYjhjYjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Nh Y2hlL2V2dGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYwpA QCAtMTY3LDYgKzE2Nyw4IEBAIEJ1aWxkRXZlbnRUcmlnZ2VyQ2FjaGUodm9pZCkKIAkJCWV2ZW50 ID0gRVZUX1NRTERyb3A7CiAJCWVsc2UgaWYgKHN0cmNtcChldnRldmVudCwgInRhYmxlX3Jld3Jp dGUiKSA9PSAwKQogCQkJZXZlbnQgPSBFVlRfVGFibGVSZXdyaXRlOworCQllbHNlIGlmIChzdHJj bXAoZXZ0ZXZlbnQsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKKwkJCWV2ZW50ID0gRVZUX1Rh YmxlSW5pdFdyaXRlOwogCQllbHNlCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKaW5kZXggODRmODdlMS4uOGRkZmQwZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0x MTg0Miw0ICsxMTg0Miw3IEBACiB7IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0cmlnZ2VyIGZv ciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIHJld3JpdGUnLAogICBwcm9uYW1lID0+ICdwdWJs aWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmln Z2VyJywKICAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJz ZV90YWJsZV9yZXdyaXRlJyB9LAoreyBvaWQgPT4gJzQ2NDcnLCBkZXNjciA9PiAndHJpZ2dlciBm b3IgZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSBpbml0JywKKyAgcHJvbmFtZSA9PiAncHVibGlj YXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJp Z2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFy c2VfdGFibGVfaW5pdF93cml0ZScgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2V2ZW50X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu aAppbmRleCBmZDJlZTdmLi5hOWUwZjcxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5oCkBAIC01NSw2ICs1NSwxMCBAQCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJERExDb21tYW5k RW5kKE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJTUUxEcm9wKE5v ZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZVJld3JpdGUoTm9k ZSAqcGFyc2V0cmVlLCBPaWQgdGFibGVPaWQsIGludCByZWFzb24pOwogCitleHRlcm4gdm9pZCBF dmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7CitleHRlcm4g dm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpwYXJzZXRyZWUsIE9iamVjdEFk ZHJlc3MgYWRkcmVzcyk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVu ZCh2b2lkKTsKKwogZXh0ZXJuIGJvb2wgRXZlbnRUcmlnZ2VyQmVnaW5Db21wbGV0ZVF1ZXJ5KHZv aWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRW5kQ29tcGxldGVRdWVyeSh2b2lkKTsKIGV4 dGVybiBib29sIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCk7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBh cnNlX3V0aWxpdHkuaAppbmRleCBiNTMyOTRiLi4zZDI5NGEwIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJz ZV91dGlsaXR5LmgKQEAgLTI5LDcgKzI5LDggQEAgdHlwZWRlZiBlbnVtIENvbGxlY3RlZENvbW1h bmRUeXBlCiAJU0NUX0FsdGVyT3BGYW1pbHksCiAJU0NUX0FsdGVyRGVmYXVsdFByaXZpbGVnZXMs CiAJU0NUX0NyZWF0ZU9wQ2xhc3MsCi0JU0NUX0FsdGVyVFNDb25maWcKKwlTQ1RfQWx0ZXJUU0Nv bmZpZywKKwlTQ1RfQ3JlYXRlVGFibGVBcwogfSBDb2xsZWN0ZWRDb21tYW5kVHlwZTsKIAogLyoK QEAgLTEwMSw2ICsxMDIsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZAogCQl7 CiAJCQlPYmplY3RUeXBlCW9ianR5cGU7CiAJCX0JCQlkZWZwcml2czsKKworCQlzdHJ1Y3QKKwkJ eworCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQkJTm9kZQkJICpyZWFsX2NyZWF0ZTsKKwkJ fQkJCWN0YXM7CiAJfQkJCWQ7CiAKIAlzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZCAqcGFyZW50Owkv KiB3aGVuIG5lc3RlZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUu aCBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKaW5kZXggZGRiNjdhNi4uMWU2NDgzMSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAorKysgYi9zcmMvaW5jbHVk ZS91dGlscy9ldnRjYWNoZS5oCkBAIC0yMiw3ICsyMiw4IEBAIHR5cGVkZWYgZW51bQogCUVWVF9E RExDb21tYW5kU3RhcnQsCiAJRVZUX0RETENvbW1hbmRFbmQsCiAJRVZUX1NRTERyb3AsCi0JRVZU X1RhYmxlUmV3cml0ZQorCUVWVF9UYWJsZVJld3JpdGUsCisJRVZUX1RhYmxlSW5pdFdyaXRlCiB9 IEV2ZW50VHJpZ2dlckV2ZW50OwogCiB0eXBlZGVmIHN0cnVjdAotLSAKMS44LjMuMQoK --00000000000078f73c05ebc6f2db Content-Type: application/octet-stream; name="v31-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v31-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l9mra1zw1 RnJvbSBjODczMzMxZWFkNTE5YTRmMmViMmVhYjgxYjMzNTBjOTVhOTM3YmI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjAgT2N0IDIwMjIgMDU6NTM6MjkgLTA0MDAKU3ViamVjdDogW1BBVENI IHYzMSAyLzRdIFN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLgoKVG8gc3VwcG9ydCBEREwgcmVwbGlj 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 ZXZlbnRfdHJpZ2dlci5jICAgICAgICAgICAgfCAyODUgKysrKysrKysrKysrKysrLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgICAgICAgICAgfCAxNzcgKysrKysrKysr Kwogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgICAgICAgIHwgICAx ICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jICAgIHwgIDg2 ICsrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jICAgICAgICB8 ICA0MSArKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jICAgICAg IHwgIDkzICsrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWls ZCAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAg ICAgICAgfCAgNDggKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJi dWZmZXIuYyB8IDEzNiArKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93 b3JrZXIuYyAgICAgICAgfCAyMzQgKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vcGdvdXRwdXQvcGdvdXRwdXQuYyAgICAgfCAxOTQgKysrKysrKysrKy0KIHNyYy9iYWNrZW5k L3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDIxICstCiBzcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3Bn X3dhbGR1bXAvcm1ncmRlc2MuYyAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3Bz cWwvZGVzY3JpYmUuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNyArLQogc3JjL2luY2x1 ZGUvYWNjZXNzL3JtZ3JsaXN0LmggICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oICAgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1 ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCAgICAgICAgICAgIHwgIDYwICsrKysKIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oICAgICAgICAgIHwgICA3ICstCiBzcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggICAgICAgICB8ICAyNyArKwogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oICAgICAgICAgfCAgMzkgKysrCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0ICAgICAgICAgICAgICB8ICAgNiArLQog c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgICAgICAgfCA0MjAgKysr KysrKysrKysrLS0tLS0tLS0tLS0tCiAzMyBmaWxlcyBjaGFuZ2VkLCAxNzQzIGluc2VydGlvbnMo 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 Z2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4IDhkMzZi NjYuLjU4NTViMzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdn 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 bHRlclRhYmxlLnN1YmNtZHMsIG5ld3N1Yik7CiAKQEAgLTIxNzUsMyArMjE4MCwyODEgQEAgc3Ry aW5naWZ5X2FkZWZwcml2c19vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKIAogCXJldHVybiAi Pz8/IjsJCQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwogfQorCisvKgorICogcHVibGljYXRp b25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydAorICoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21t YW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21t YW5kX3N0YXJ0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRXZlbnRUcmlnZ2VyRGF0YSAqdHJpZ2Rh dGE7CisJY2hhcgkgICAqY29tbWFuZCA9IHBzcHJpbnRmKCJEcm9wIHRhYmxlIGNvbW1hbmQgc3Rh cnQiKTsKKwlEcm9wU3RtdCAgICpzdG10OworCUxpc3RDZWxsICAgKmNlbGwxOworCisJaWYgKCFD QUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVk IGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2Vy RGF0YSAqKSBmY2luZm8tPmNvbnRleHQ7CisJc3RtdCA9IChEcm9wU3RtdCAqKSB0cmlnZGF0YS0+ cGFyc2V0cmVlOworCisJLyogZXh0cmFjdCB0aGUgcmVsaWQgZnJvbSB0aGUgcGFyc2UgdHJlZSAq LworCWZvcmVhY2goY2VsbDEsIHN0bXQtPm9iamVjdHMpCisJeworCQljaGFyCQlyZWxwZXJzaXN0 OworCQlOb2RlCSAgICpvYmplY3QgPSBsZmlyc3QoY2VsbDEpOworCQlPYmplY3RBZGRyZXNzIGFk ZHJlc3M7CisJCVJlbGF0aW9uCXJlbGF0aW9uID0gTlVMTDsKKworCQlhZGRyZXNzID0gZ2V0X29i amVjdF9hZGRyZXNzKHN0bXQtPnJlbW92ZVR5cGUsCisJCQkJCQkJCQkgb2JqZWN0LAorCQkJCQkJ CQkJICZyZWxhdGlvbiwKKwkJCQkJCQkJCSBBY2Nlc3NFeGNsdXNpdmVMb2NrLAorCQkJCQkJCQkJ IHRydWUpOworCisJCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKGFkZHJlc3Mub2Jq ZWN0SWQpOworCisJCS8qCisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5k cyB3aG9zZSB0YXJnZXQgdGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJ CSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0 IHVubG9nZ2VkCisJCSAqIHRhYmxlcyBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9u IHRoZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMKKwkJICogbWFrZXMgaXQgcG9zc2libGUgdG8gZGly ZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZQorCQkgKiBpbmNvbWlu ZyByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJ CWlmIChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXsKKwkJCXRhYmxlX2Ns b3NlKHJlbGF0aW9uLCBOb0xvY2spOworCQkJY29udGludWU7CisJCX0KKworCQlMb2dMb2dpY2Fs RERMTWVzc2FnZSgiZGVwYXJzZSIsIGFkZHJlc3Mub2JqZWN0SWQsIERDVF9UYWJsZURyb3BTdGFy dCwKKwkJCQkJCQkgY29tbWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisKKwkJaWYgKHJlbGF0 aW9uKQorCQkJdGFibGVfY2xvc2UocmVsYXRpb24sIE5vTG9jayk7CisJfQorCXJldHVybiBQb2lu dGVyR2V0RGF0dW0oTlVMTCk7Cit9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxl X3Jld3JpdGUKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgdGFibGUgcmV3cml0ZSBjb21tYW5kIGFu ZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1h bmQgKmNtZDsKKwljaGFyCSAgICpqc29uX3N0cmluZzsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5U X1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmln Z2VyIG1hbmFnZXIiKTsKKworCWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVu dENvbW1hbmQ7CisKKwlBc3NlcnQoY21kICYmIGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUpOwor CisJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLmFsdGVyVGFibGUub2Jq ZWN0SWQpOworCisJLyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMg d2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFibGUuCisJICoKKwkgKiBX ZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxv Z2dlZCB0YWJsZXMKKwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBz dWJzY3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0byBkaXJlY3RseSBy ZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJICogcmV3cml0 ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJICovCisJaWYgKHJlbHBl cnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShO VUxMKTsKKworCS8qIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFs bG93IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAqLworCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGls aXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJ TG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJ ZCwgRENUX1RhYmxlQWx0ZXIsCisJCQkJCQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9zdHJp bmcpICsgMSk7CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQorCisvKgorICog cHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQKKyAqCisgKiBEZXBhcnNlIHRoZSBk ZGwgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV9k ZGxfY29tbWFuZF9lbmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlz bGlzdF9pdGVyCWl0ZXI7CisJRGVwYXJzZWRDb21tYW5kVHlwZSB0eXBlOworCU9pZAkJCXJlbGlk OworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9S LCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJZm9yZWFjaChsYywg Y3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kTGlzdCkKKwl7CisJCWNoYXIJCXJlbHBl cnNpc3QgPSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ7CisJCUNvbGxlY3RlZENvbW1hbmQgKmNt ZCA9IGxmaXJzdChsYyk7CisJCWNoYXIJICAgKmpzb25fc3RyaW5nOworCisJCS8qIFJld3JpdGUg RERMIGhhcyBiZWVuIGhhbmRsZWQgaW4gdGFibGVfcmV3cml0ZSB0cmlnZ2VyICovCisJCWlmIChj bWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlKQorCQl7CisJCQlSZW5hbWVTdG10ICpyZW5hbWVTdG10 ID0gKFJlbmFtZVN0bXQgKikgY21kLT5wYXJzZXRyZWU7CisKKwkJCWlmIChyZW5hbWVTdG10ICYm IHJlbmFtZVN0bXQtPnJlbGF0aW9uVHlwZSAhPSBPQkpFQ1RfVFlQRSAmJgorCQkJCXJlbmFtZVN0 bXQtPnJlbGF0aW9uVHlwZSAhPSBPQkpFQ1RfVEFCTEUpCisJCQkJY29udGludWU7CisJCX0KKwor CQlpZiAoY21kLT50eXBlID09IFNDVF9TaW1wbGUgJiYKKwkJCSFPaWRJc1ZhbGlkKGNtZC0+ZC5z aW1wbGUuYWRkcmVzcy5vYmplY3RJZCkpCisJCQljb250aW51ZTsKKworCQlpZiAoY21kLT50eXBl ID09IFNDVF9BbHRlclRhYmxlKQorCQl7CisJCQlyZWxpZCA9IGNtZC0+ZC5hbHRlclRhYmxlLm9i amVjdElkOworCQkJdHlwZSA9IERDVF9UYWJsZUFsdGVyOworCQl9CisJCWVsc2UKKwkJeworCQkJ LyogT25seSBTQ1RfU2ltcGxlIGZvciBub3cgKi8KKwkJCXJlbGlkID0gY21kLT5kLnNpbXBsZS5h ZGRyZXNzLm9iamVjdElkOworCQkJdHlwZSA9IERDVF9TaW1wbGVDbWQ7CisJCX0KKworCQlpZiAo Z2V0X3JlbF9yZWxraW5kKHJlbGlkKSkKKwkJCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3Rl bmNlKHJlbGlkKTsKKworCQkvKgorCQkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29t bWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkg KgorCQkgKiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28g dGhhdCB1bmxvZ2dlZAorCQkgKiB0YWJsZXMgY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJl ZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzCisJCSAqIG1ha2VzIGl0IHBvc3NpYmxlIHRv IGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUKKwkJICogaW5j b21pbmcgcmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAq LworCQlpZiAocmVscGVyc2lzdCA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQkJY29udGludWU7 CisKKwkJLyoKKwkJICogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8g YWxsb3cgZGVjb2Rpbmcgb2YgdGhlCisJCSAqIHNhbWUuCisJCSAqLworCQlqc29uX3N0cmluZyA9 IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJCWlmIChqc29uX3N0cmlu ZyA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFy c2UiLCByZWxpZCwgdHlwZSwganNvbl9zdHJpbmcsCisJCQkJCQkJIHN0cmxlbihqc29uX3N0cmlu ZykgKyAxKTsKKwl9CisKKwlzbGlzdF9mb3JlYWNoKGl0ZXIsICYoY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5TUUxEcm9wTGlzdCkpCisJeworCQl2b2xhdGlsZSBTUUxEcm9wT2JqZWN0ICpvYmo7 CisJCURyb3BTdG10ICAgKnN0bXQ7CisJCUV2ZW50VHJpZ2dlckRhdGEgKnRyaWdkYXRhOworCQlj aGFyCSAgICpjb21tYW5kOworCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGU7CisJCWNvbnN0 IGNoYXIgKnRtcHR5cGU7CisKKwkJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAqKSBmY2lu Zm8tPmNvbnRleHQ7CisJCXN0bXQgPSAoRHJvcFN0bXQgKikgdHJpZ2RhdGEtPnBhcnNldHJlZTsK KworCQlvYmogPSBzbGlzdF9jb250YWluZXIoU1FMRHJvcE9iamVjdCwgbmV4dCwgaXRlci5jdXIp OworCisJCWlmIChzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGFibGUiKSA9PSAwKQorCQkJY21k dHlwZSA9IERDVF9UYWJsZURyb3BFbmQ7CisJCWVsc2UgaWYgKHN0cmNtcChvYmotPm9iamVjdHR5 cGUsICJzZXF1ZW5jZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInNj aGVtYSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImluZGV4IikgPT0g MCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiZnVuY3Rpb24iKSA9PSAwIHx8CisJ CQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJwcm9jZWR1cmUiKSA9PSAwIHx8CisJCQkJIHN0 cmNtcChvYmotPm9iamVjdHR5cGUsICJvcGVyYXRvciIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9i ai0+b2JqZWN0dHlwZSwgIm9wZXJhdG9yIGNsYXNzIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2Jq LT5vYmplY3R0eXBlLCAib3BlcmF0b3IgZmFtaWx5IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2Jq LT5vYmplY3R0eXBlLCAiY2FzdCIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlw ZSwgInR5cGUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJkb21haW4i KSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0cmlnZ2VyIikgPT0gMCB8 fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiY29udmVyc2lvbiIpID09IDAgfHwKKwkJ CQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInBvbGljeSIpID09IDAgfHwKKwkJCQkgc3RyY21w KG9iai0+b2JqZWN0dHlwZSwgInJ1bGUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVj dHR5cGUsICJleHRlbnNpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUs ICJmb3JlaWduLWRhdGEgd3JhcHBlciIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0 dHlwZSwgInRleHQgc2VhcmNoIGNvbmZpZ3VyYXRpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5IikgPT0gMCB8fAorCQkJCSBz dHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFyY2ggcGFyc2VyIikgPT0gMCB8fAorCQkJ CSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFyY2ggdGVtcGxhdGUiKSA9PSAwIHx8 CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0cmFuc2Zvcm0iKSA9PSAwIHx8CisJCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJzZXJ2ZXIiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJjb2xsYXRpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9i amVjdHR5cGUsICJ1c2VyIG1hcHBpbmciKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVj dHR5cGUsICJsYW5ndWFnZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwg InZpZXciKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJtYXRlcmlhbGl6 ZWQgdmlldyIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInN0YXRpc3Rp Y3Mgb2JqZWN0IikgPT0gMCkKKwkJCWNtZHR5cGUgPSBEQ1RfT2JqZWN0RHJvcDsKKwkJZWxzZQor CQkJY29udGludWU7CisKKwkJLyogQ2hhbmdlIGZvcmVpZ24tZGF0YSB3cmFwcGVyIHRvIGZvcmVp Z24gZGF0YSB3cmFwcGVyICovCisJCWlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgImZvcmVp Z24tZGF0YSB3cmFwcGVyIiwgMjApID09IDApCisJCXsKKwkJCXRtcHR5cGUgPSBwc3RyZHVwKCJm b3JlaWduIGRhdGEgd3JhcHBlciIpOworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5k KG9iai0+b2JqaWRlbnRpdHksIHRtcHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZpb3Ip OworCQl9CisKKwkJLyogQ2hhbmdlIHN0YXRpc3RpY3Mgb2JqZWN0IHRvIHN0YXRpc3RpY3MgKi8K KwkJZWxzZSBpZiAoc3RybmNtcChvYmotPm9iamVjdHR5cGUsICJzdGF0aXN0aWNzIG9iamVjdCIs CisJCQkJCQkgc3RybGVuKCJzdGF0aXN0aWNzIG9iamVjdCIpKSA9PSAwKQorCQl7CisJCQl0bXB0 eXBlID0gcHN0cmR1cCgic3RhdGlzdGljcyIpOworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9j b21tYW5kKG9iai0+b2JqaWRlbnRpdHksIHRtcHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVo YXZpb3IpOworCQl9CisKKwkJLyoKKwkJICogb2JqZWN0IGlkZW50aXR5IG5lZWRzIHRvIGJlIG1v ZGlmaWVkIHRvIG1ha2UgdGhlIGRyb3Agd29yaworCQkgKgorCQkgKiBGUk9NOiA8cm9sZT4gb24g c2VydmVyIDxzZXJ2ZXJuYW1lPiBUTyAgOiBmb3IgPnJvbGU+IHNlcnZlcgorCQkgKiA8c2VydmVy bmFtZT4KKwkJICoKKwkJICovCisJCWVsc2UgaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBlLCAi dXNlciBtYXBwaW5nIiwgMTIpID09IDApCisJCXsKKwkJCWNoYXIJICAgKm9uX3NlcnZlcjsKKwor CQkJdG1wdHlwZSA9IHBhbGxvYyhzdHJsZW4ob2JqLT5vYmppZGVudGl0eSkgKyAyKTsKKwkJCW9u X3NlcnZlciA9IHN0cnN0cihvYmotPm9iamlkZW50aXR5LCAib24gc2VydmVyIik7CisKKwkJCXNw cmludGYoKGNoYXIgKikgdG1wdHlwZSwgImZvciAiKTsKKwkJCXN0cm5jYXQoKGNoYXIgKikgdG1w dHlwZSwgb2JqLT5vYmppZGVudGl0eSwgb25fc2VydmVyIC0gb2JqLT5vYmppZGVudGl0eSk7CisJ CQlzdHJjYXQoKGNoYXIgKikgdG1wdHlwZSwgb25fc2VydmVyICsgMyk7CisJCQljb21tYW5kID0g ZGVwYXJzZV9kcm9wX2NvbW1hbmQodG1wdHlwZSwgb2JqLT5vYmplY3R0eXBlLAorCQkJCQkJCQkJ CSAgIHN0bXQtPmJlaGF2aW9yKTsKKwkJfQorCQllbHNlCisJCQljb21tYW5kID0gZGVwYXJzZV9k cm9wX2NvbW1hbmQob2JqLT5vYmppZGVudGl0eSwgb2JqLT5vYmplY3R0eXBlLAorCQkJCQkJCQkJ CSAgIHN0bXQtPmJlaGF2aW9yKTsKKworCQlpZiAoY29tbWFuZCA9PSBOVUxMKQorCQkJY29udGlu dWU7CisKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBvYmotPmFkZHJlc3Mub2Jq ZWN0SWQsIGNtZHR5cGUsCisJCQkJCQkJIGNvbW1hbmQsIHN0cmxlbihjb21tYW5kKSArIDEpOwor CX0KKworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IGE4Yjc1ZWIuLjgxOTcwMTYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC0zNywxMCArMzcsMTIgQEAKICNpbmNsdWRlICJj b21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVk ZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAi bm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgogI2lu Y2x1ZGUgInBhcnNlci9wYXJzZV9jb2xsYXRlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3Jl bGF0aW9uLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv bG1nci5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5Lmgi CkBAIC05Niw2ICs5OCw3IEBAIHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAq cHN0YXRlLAogCXB1YmFjdGlvbnMtPnB1YnVwZGF0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHVi ZGVsZXRlID0gdHJ1ZTsKIAlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJcHViYWN0 aW9ucy0+cHViZGRsID0gZmFsc2U7CiAJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFs c2U7CiAKIAkvKiBQYXJzZSBvcHRpb25zICovCkBAIC0xNDMsNiArMTQ2LDggQEAgcGFyc2VfcHVi bGljYXRpb25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCXB1YmFjdGlvbnMtPnB1 YmRlbGV0ZSA9IHRydWU7CiAJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAidHJ1bmNh dGUiKSA9PSAwKQogCQkJCQlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJCQkJZWxz ZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAiZGRsIikgPT0gMCkKKwkJCQkJcHViYWN0aW9ucy0+ cHViZGRsID0gdHJ1ZTsKIAkJCQllbHNlCiAJCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLApAQCAtNzI4LDYgKzczMyw1MyBAQCBDaGVja1B1 YlJlbGF0aW9uQ29sdW1uTGlzdChjaGFyICpwdWJuYW1lLCBMaXN0ICp0YWJsZXMsCiB9CiAKIC8q CisgKiBDcmVhdGUgZXZlbnQgdHJpZ2dlciB3aGljaCBpcyB1c2VkIGZvciBEREwgcmVwbGljYXRp b24uCisgKi8KK3N0YXRpYyB2b2lkCitDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKGNoYXIg KmV2ZW50bmFtZSwgQ29tbWFuZFRhZyAqY29tbWFuZHMsCisJCQkJCQkJIGludCBuY29tbWFuZHMs IE9iamVjdEFkZHJlc3MgcHViYWRkcmVzcywKKwkJCQkJCQkgT2lkIHB1Ym9pZCkKK3sKKwlpbnQJ CQlpOworCUxpc3QJICAgKnRhZ3MgPSBOSUw7CisJT2lkCQkJdHJpZ2dlcl9pZDsKKwlPYmplY3RB ZGRyZXNzIHJlZmVyZW5jZWQ7CisJQ3JlYXRlRXZlbnRUcmlnU3RtdCAqZGRsX3RyaWdnZXI7CisJ Y2hhcgkJdHJpZ2dlcl9uYW1lW05BTUVEQVRBTEVOXTsKKwljaGFyCQl0cmlnZ2VyX2Z1bmNfbmFt ZVtOQU1FREFUQUxFTl07CisJc3RhdGljIGNvbnN0IGNoYXIgKnRyaWdnZXJfbmFtZV9wcmVmaXgg PSAicGdfZGVwYXJzZV90cmlnXyVzXyV1IjsKKwlzdGF0aWMgY29uc3QgY2hhciAqdHJpZ2dlcl9m dW5jX3ByZWZpeCA9ICJwdWJsaWNhdGlvbl9kZXBhcnNlXyVzIjsKKworCWRkbF90cmlnZ2VyID0g bWFrZU5vZGUoQ3JlYXRlRXZlbnRUcmlnU3RtdCk7CisKKwlzbnByaW50Zih0cmlnZ2VyX25hbWUs IHNpemVvZih0cmlnZ2VyX25hbWUpLCB0cmlnZ2VyX25hbWVfcHJlZml4LAorCQkJIGV2ZW50bmFt ZSwgcHVib2lkKTsKKwlzbnByaW50Zih0cmlnZ2VyX2Z1bmNfbmFtZSwgc2l6ZW9mKHRyaWdnZXJf ZnVuY19uYW1lKSwgdHJpZ2dlcl9mdW5jX3ByZWZpeCwKKwkJCSBldmVudG5hbWUpOworCisJZGRs X3RyaWdnZXItPnRyaWduYW1lID0gcHN0cmR1cCh0cmlnZ2VyX25hbWUpOworCWRkbF90cmlnZ2Vy LT5ldmVudG5hbWUgPSBldmVudG5hbWU7CisJZGRsX3RyaWdnZXItPmZ1bmNuYW1lID0gU3lzdGVt RnVuY05hbWUodHJpZ2dlcl9mdW5jX25hbWUpOworCisJZm9yIChpID0gMDsgaSA8IG5jb21tYW5k czsgaSsrKQorCXsKKwkJU3RyaW5nCSAgICp0YWcgPSBtYWtlU3RyaW5nKHBzdHJkdXAoR2V0Q29t bWFuZFRhZ05hbWUoY29tbWFuZHNbaV0pKSk7CisKKwkJdGFncyA9IGxhcHBlbmQodGFncywgdGFn KTsKKwl9CisKKwlkZGxfdHJpZ2dlci0+d2hlbmNsYXVzZSA9IGxpc3RfbWFrZTEobWFrZURlZkVs ZW0oInRhZyIsIChOb2RlICopIHRhZ3MsIC0xKSk7CisKKwl0cmlnZ2VyX2lkID0gQ3JlYXRlRXZl bnRUcmlnZ2VyKGRkbF90cmlnZ2VyKTsKKworCS8qCisJICogUmVnaXN0ZXIgdGhlIGV2ZW50IHRy aWdnZXJzIGFzIGludGVybmFsbHkgZGVwZW5kZW50IG9uIHRoZSBwdWJsaWNhdGlvbi4KKwkgKi8K KwlPYmplY3RBZGRyZXNzU2V0KHJlZmVyZW5jZWQsIEV2ZW50VHJpZ2dlclJlbGF0aW9uSWQsIHRy aWdnZXJfaWQpOworCXJlY29yZERlcGVuZGVuY3lPbigmcmVmZXJlbmNlZCwgJnB1YmFkZHJlc3Ms IERFUEVOREVOQ1lfSU5URVJOQUwpOworfQorCisvKgogICogQ3JlYXRlIG5ldyBwdWJsaWNhdGlv bi4KICAqLwogT2JqZWN0QWRkcmVzcwpAQCAtNzk3LDYgKzg0OSw4IEBAIENyZWF0ZVB1YmxpY2F0 aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQlC b29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZWxldGUpOwogCXZhbHVlc1tBbnVtX3BnX3B1Ymxp Y2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPQogCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0 cnVuY2F0ZSk7CisJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPQorCQlC b29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGwpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0 aW9uX3B1YnZpYXJvb3QgLSAxXSA9CiAJCUJvb2xHZXREYXR1bShwdWJsaXNoX3ZpYV9wYXJ0aXRp b25fcm9vdCk7CiAKQEAgLTg1Nyw2ICs5MTEsMTI2IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNl U3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQl9CiAJfQogCisJ LyoKKwkgKiBDcmVhdGUgYW4gZXZlbnQgdHJpZ2dlciB0byBhbGxvdyBsb2dnaW5nIG9mIERETCBz dGF0ZW1lbnRzLgorCSAqCisJICogVE9ETzogV2UgbmVlZCB0byBmaW5kIGEgYmV0dGVyIHN5bnRh eCB0byBhbGxvdyByZXBsaWNhdGlvbiBvZiBEREwKKwkgKiBzdGF0ZW1lbnRzLgorCSAqCisJICog WFhYOiBUaGlzIGNvZGUgaXMganVzdCB0byBzaG93IHRoZSByZXBsaWNhdGlvbiBvZiBDUkVBVEUv QUxURVIvRFJPUAorCSAqIFRBQkxFIHdvcmtzLiBXZSBuZWVkIHRvIGVuaGFuY2UgdGhpcyBvbmNl IHRoZSBhcHByb2FjaCBmb3IgRERMCisJICogcmVwbGljYXRpb24gaXMgZmluYWxpemVkLgorCSAq LworCWlmIChwdWJhY3Rpb25zLnB1YmRkbCkKKwl7CisJCUNvbW1hbmRUYWcJc3RhcnRfY29tbWFu ZHNbXSA9IHtDTURUQUdfRFJPUF9UQUJMRX07CisJCUNvbW1hbmRUYWcJcmV3cml0ZV9jb21tYW5k c1tdID0ge0NNRFRBR19BTFRFUl9UQUJMRX07CisKKwkJQ29tbWFuZFRhZwllbmRfY29tbWFuZHNb XSA9IHsKKwkJCUNNRFRBR19DUkVBVEVfTEFOR1VBR0UsCisJCQlDTURUQUdfQUxURVJfTEFOR1VB R0UsCisJCQlDTURUQUdfRFJPUF9MQU5HVUFHRSwKKwkJCUNNRFRBR19DUkVBVEVfVklFVywKKwkJ CUNNRFRBR19BTFRFUl9WSUVXLAorCQkJQ01EVEFHX0RST1BfVklFVywKKwkJCUNNRFRBR19DUkVB VEVfTUFURVJJQUxJWkVEX1ZJRVcsCisJCQlDTURUQUdfQUxURVJfTUFURVJJQUxJWkVEX1ZJRVcs CisJCQlDTURUQUdfRFJPUF9NQVRFUklBTElaRURfVklFVywKKwkJCUNNRFRBR19DUkVBVEVfVVNF Ul9NQVBQSU5HLAorCQkJQ01EVEFHX0FMVEVSX1VTRVJfTUFQUElORywKKwkJCUNNRFRBR19DUkVB VEVfU0VSVkVSLAorCQkJQ01EVEFHX0FMVEVSX1NFUlZFUiwKKwkJCUNNRFRBR19EUk9QX1NFUlZF UiwKKwkJCUNNRFRBR19DUkVBVEVfQ09MTEFUSU9OLAorCQkJQ01EVEFHX0FMVEVSX0NPTExBVElP TiwKKwkJCUNNRFRBR19EUk9QX0NPTExBVElPTiwKKwkJCUNNRFRBR19DUkVBVEVfVFJBTlNGT1JN LAorCQkJQ01EVEFHX0RST1BfVFJBTlNGT1JNLAorCQkJQ01EVEFHX0NSRUFURV9GT1JFSUdOX0RB VEFfV1JBUFBFUiwKKwkJCUNNRFRBR19BTFRFUl9GT1JFSUdOX0RBVEFfV1JBUFBFUiwKKwkJCUNN RFRBR19EUk9QX0ZPUkVJR05fREFUQV9XUkFQUEVSLAorCQkJQ01EVEFHX0NSRUFURV9FWFRFTlNJ T04sCisJCQlDTURUQUdfQUxURVJfRVhURU5TSU9OLAorCQkJQ01EVEFHX0RST1BfRVhURU5TSU9O LAorCQkJQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLAorCQkJQ01EVEFH X0FMVEVSX1RFWFRfU0VBUkNIX0NPTkZJR1VSQVRJT04sCisJCQlDTURUQUdfRFJPUF9URVhUX1NF QVJDSF9DT05GSUdVUkFUSU9OLAorCQkJQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9ESUNUSU9O QVJZLAorCQkJQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX0RJQ1RJT05BUlksCisJCQlDTURUQUdf RFJPUF9URVhUX1NFQVJDSF9ESUNUSU9OQVJZLAorCQkJQ01EVEFHX0NSRUFURV9URVhUX1NFQVJD SF9QQVJTRVIsCisJCQlDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9QQVJTRVIsCisJCQlDTURUQUdf Q1JFQVRFX1RFWFRfU0VBUkNIX1RFTVBMQVRFLAorCQkJQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hf VEVNUExBVEUsCisJCQlDTURUQUdfQ1JFQVRFX1BPTElDWSwKKwkJCUNNRFRBR19BTFRFUl9QT0xJ Q1ksCisJCQlDTURUQUdfRFJPUF9QT0xJQ1ksCisJCQlDTURUQUdfQ1JFQVRFX0NPTlZFUlNJT04s CisJCQlDTURUQUdfQUxURVJfQ09OVkVSU0lPTiwKKwkJCUNNRFRBR19EUk9QX0NPTlZFUlNJT04s CisJCQlDTURUQUdfQ1JFQVRFX0RPTUFJTiwKKwkJCUNNRFRBR19BTFRFUl9ET01BSU4sCisJCQlD TURUQUdfRFJPUF9ET01BSU4sCisJCQlDTURUQUdfQUxURVJfSU5ERVgsCisJCQlDTURUQUdfQ1JF QVRFX1RZUEUsCisJCQlDTURUQUdfRFJPUF9UWVBFLAorCQkJQ01EVEFHX0FMVEVSX1RZUEUsCisJ CQlDTURUQUdfQ1JFQVRFX0NBU1QsCisJCQlDTURUQUdfQUxURVJfQ0FTVCwKKwkJCUNNRFRBR19E Uk9QX0NBU1QsCisJCQlDTURUQUdfQ1JFQVRFX09QRVJBVE9SLAorCQkJQ01EVEFHX0NSRUFURV9P UEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19DUkVBVEVfT1BFUkFUT1JfRkFNSUxZLAorCQkJQ01E VEFHX0FMVEVSX09QRVJBVE9SX0ZBTUlMWSwKKwkJCUNNRFRBR19BTFRFUl9PUEVSQVRPUl9DTEFT UywKKwkJCUNNRFRBR19BTFRFUl9PUEVSQVRPUiwKKwkJCUNNRFRBR19EUk9QX09QRVJBVE9SLAor CQkJQ01EVEFHX0RST1BfT1BFUkFUT1JfQ0xBU1MsCisJCQlDTURUQUdfRFJPUF9PUEVSQVRPUl9G QU1JTFksCisJCQlDTURUQUdfQ1JFQVRFX1BST0NFRFVSRSwKKwkJCUNNRFRBR19BTFRFUl9QUk9D RURVUkUsCisJCQlDTURUQUdfRFJPUF9QUk9DRURVUkUsCisJCQlDTURUQUdfQ1JFQVRFX0ZVTkNU SU9OLAorCQkJQ01EVEFHX0FMVEVSX0ZVTkNUSU9OLAorCQkJQ01EVEFHX0RST1BfRlVOQ1RJT04s CisJCQlDTURUQUdfQ1JFQVRFX1RSSUdHRVIsCisJCQlDTURUQUdfQUxURVJfVFJJR0dFUiwKKwkJ CUNNRFRBR19EUk9QX1RBQkxFLAorCQkJQ01EVEFHX0NSRUFURV9UQUJMRSwKKwkJCUNNRFRBR19B TFRFUl9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVfU0VRVUVOQ0UsCisJCQlDTURUQUdfQUxURVJf U0VRVUVOQ0UsCisJCQlDTURUQUdfRFJPUF9TRVFVRU5DRSwKKwkJCUNNRFRBR19DUkVBVEVfU0NI RU1BLAorCQkJQ01EVEFHX0FMVEVSX1NDSEVNQSwKKwkJCUNNRFRBR19EUk9QX1NDSEVNQSwKKwkJ CUNNRFRBR19DUkVBVEVfSU5ERVgsCisJCQlDTURUQUdfRFJPUF9JTkRFWCwKKwkJCUNNRFRBR19B TFRFUl9JTkRFWCwKKwkJCUNNRFRBR19HUkFOVCwKKwkJCUNNRFRBR19SRVZPS0UsCisJCQlDTURU QUdfQ1JFQVRFX1JVTEUsCisJCQlDTURUQUdfQUxURVJfUlVMRSwKKwkJCUNNRFRBR19EUk9QX1JV TEUsCisJCQlDTURUQUdfUkVGUkVTSF9NQVRFUklBTElaRURfVklFVywKKwkJCUNNRFRBR19DUkVB VEVfU1RBVElTVElDUywKKwkJCUNNRFRBR19BTFRFUl9TVEFUSVNUSUNTLAorCQkJQ01EVEFHX0RS T1BfU1RBVElTVElDUworCQl9OworCisJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2 ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1h bmRfZW5kIiwgZW5kX2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyks IG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX3N0YXJ0IGV2 ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1h bmRfc3RhcnQiLCBzdGFydF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihzdGFydF9jb21t YW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIHRhYmxlX3Jld3JpdGUg ZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9y ZXdyaXRlIiwgcmV3cml0ZV9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihyZXdyaXRlX2Nv bW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCX0KKwogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhj bHVzaXZlTG9jayk7CiAKIAlJbnZva2VPYmplY3RQb3N0Q3JlYXRlSG9vayhQdWJsaWNhdGlvblJl bGF0aW9uSWQsIHB1Ym9pZCwgMCk7CkBAIC05OTUsNiArMTE2OSw5IEBAIEFsdGVyUHVibGljYXRp b25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQs CiAKIAkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IEJvb2xH ZXREYXR1bShwdWJhY3Rpb25zLnB1YnRydW5jYXRlKTsKIAkJcmVwbGFjZXNbQW51bV9wZ19wdWJs aWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0gdHJ1ZTsKKworCQl2YWx1ZXNbQW51bV9wZ19wdWJs aWNhdGlvbl9wdWJkZGwgLSAxXSA9IEJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRkbCk7CisJ CXJlcGxhY2VzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPSB0cnVlOwogCX0KIAog CWlmIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbikKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVj bWRzLmMKaW5kZXggMjAxMzVlZi4uZTdjYzBhZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMK QEAgLTUyNTMsNyArNTI1Myw3IEBAIEFURXhlY0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFi bGVJbmZvICp0YWIsCiAJICogUmVwb3J0IHRoZSBzdWJjb21tYW5kIHRvIGludGVyZXN0ZWQgZXZl bnQgdHJpZ2dlcnMuCiAJICovCiAJaWYgKGNtZCkKLQkJRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVy VGFibGVTdWJjbWQoKE5vZGUgKikgY21kLCBhZGRyZXNzKTsKKwkJRXZlbnRUcmlnZ2VyQ29sbGVj dEFsdGVyVGFibGVTdWJjbWQoKE5vZGUgKikgY21kLCBhZGRyZXNzLCB0YWItPnJld3JpdGUpOwog CiAJLyoKIAkgKiBCdW1wIHRoZSBjb21tYW5kIGNvdW50ZXIgdG8gZW5zdXJlIHRoZSBuZXh0IHN1 YmNvbW1hbmQgaW4gdGhlIHNlcXVlbmNlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9N YWtlZmlsZQppbmRleCBjNGUyZmRlLi5mM2VlYjY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgb3ZlcnJpZGUgQ1BQRkxBR1MgOj0g LUkkKHNyY2RpcikgJChDUFBGTEFHUykKIAogT0JKUyA9IFwKIAlkZWNvZGUubyBcCisJZGRsbWVz c2FnZS5vXAogCWxhdW5jaGVyLm8gXAogCWxvZ2ljYWwubyBcCiAJbG9naWNhbGZ1bmNzLm8gXApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDkzNTIzCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKQEAgLTAsMCArMSw4NiBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsbWVzc2FnZS5jCisgKgkgIExvZ2ljYWwg RERMIG1lc3NhZ2VzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIE5PVEVTCisgKgor ICogTG9naWNhbCBEREwgbWVzc2FnZXMgYWxsb3cgWExPRyBsb2dnaW5nIG9mIERETCBjb21tYW5k IHN0cmluZ3MgdGhhdAorICogZ2V0IHBhc3NlZCB0byB0aGUgbG9naWNhbCBkZWNvZGluZyBwbHVn aW4uIEluIG5vcm1hbCBYTE9HIHByb2Nlc3NpbmcgdGhleQorICogYXJlIHNhbWUgYXMgTk9PUC4K KyAqCisgKiBVbmxpa2UgZ2VuZXJpYyBsb2dpY2FsIG1lc3NhZ2VzLCB0aGVzZSBEREwgbWVzc2Fn ZXMgaGF2ZSBvbmx5IHRyYW5zYWN0aW9uYWwKKyAqIG1vZGUuTm90ZSBieSBkZWZhdWx0IERETHMg aW4gUG9zdGdyZVNRTCBhcmUgdHJhbnNhY3Rpb25hbC4KKyAqCisgKiBUaGVzZSBtZXNzYWdlcyBh cmUgcGFydCBvZiBjdXJyZW50IHRyYW5zYWN0aW9uIGFuZCB3aWxsIGJlIHNlbnQgdG8KKyAqIGRl Y29kaW5nIHBsdWdpbiB1c2luZyBpbiBhIHNhbWUgd2F5IGFzIERNTCBvcGVyYXRpb25zLgorICoK KyAqIEV2ZXJ5IG1lc3NhZ2UgY2FycmllcyBwcmVmaXggdG8gYXZvaWQgY29uZmxpY3RzIGJldHdl ZW4gZGlmZmVyZW50IGRlY29kaW5nCisgKiBwbHVnaW5zLiBUaGUgcGx1Z2luIGF1dGhvcnMgbXVz dCB0YWtlIGV4dHJhIGNhcmUgdG8gdXNlIHVuaXF1ZSBwcmVmaXgsCisgKiBnb29kIG9wdGlvbnMg c2VlbXMgdG8gYmUgZm9yIGV4YW1wbGUgdG8gdXNlIHRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24u CisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgi CisKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0 LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4u aCIKKyNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9s b2dpY2FsLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorI2luY2x1ZGUg InV0aWxzL21lbXV0aWxzLmgiCisKKy8qCisgKiBXcml0ZSBsb2dpY2FsIGRlY29kaW5nIERETCBt ZXNzYWdlIGludG8gWExvZy4KKyAqLworWExvZ1JlY1B0cgorTG9nTG9naWNhbERETE1lc3NhZ2Uo Y29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlw ZSwKKwkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHNpemVfdCBzaXplKQoreworCXhsX2xvZ2lj YWxfZGRsX21lc3NhZ2UgeGxyZWM7CisKKwkvKgorCSAqIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQg dHJhbnNhY3Rpb24gaWQuCisJICovCisJQXNzZXJ0KElzVHJhbnNhY3Rpb25TdGF0ZSgpKTsKKwlH ZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpOworCisJeGxyZWMuZGJJZCA9IE15RGF0YWJhc2VJZDsK KwkvKiB0cmFpbGluZyB6ZXJvIGlzIGNyaXRpY2FsOyBzZWUgbG9naWNhbGRkbG1zZ19kZXNjICov CisJeGxyZWMucHJlZml4X3NpemUgPSBzdHJsZW4ocHJlZml4KSArIDE7CisJeGxyZWMubWVzc2Fn ZV9zaXplID0gc2l6ZTsKKwl4bHJlYy5yZWxpZCA9IHJlbGlkOworCXhscmVjLmNtZHR5cGUgPSBj bWR0eXBlOworCisJWExvZ0JlZ2luSW5zZXJ0KCk7CisJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAq KSAmeGxyZWMsIFNpemVPZkxvZ2ljYWxERExNZXNzYWdlKTsKKwlYTG9nUmVnaXN0ZXJEYXRhKHVu Y29uc3RpZnkoY2hhciAqLCBwcmVmaXgpLCB4bHJlYy5wcmVmaXhfc2l6ZSk7CisJWExvZ1JlZ2lz dGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgbWVzc2FnZSksIHNpemUpOworCisJLyogYWxsb3cg b3JpZ2luIGZpbHRlcmluZyAqLworCVhMb2dTZXRSZWNvcmRGbGFncyhYTE9HX0lOQ0xVREVfT1JJ R0lOKTsKKworCXJldHVybiBYTG9nSW5zZXJ0KFJNX0xPR0lDQUxERExNU0dfSUQsIFhMT0dfTE9H SUNBTF9ERExfTUVTU0FHRSk7Cit9CisKKy8qCisgKiBSZWRvIGlzIGJhc2ljYWxseSBqdXN0IG5v b3AgZm9yIGxvZ2ljYWwgZGVjb2RpbmcgZGRsIG1lc3NhZ2VzLgorICovCit2b2lkCitsb2dpY2Fs ZGRsbXNnX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCit7CisJdWludDgJCWluZm8gPSBY TG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyAhPSBY TE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJCWVsb2coUEFOSUMsICJsb2dpY2FsZGRsbXNnX3Jl ZG86IHVua25vd24gb3AgY29kZSAldSIsIGluZm8pOworCisJLyogVGhpcyBpcyBvbmx5IGludGVy ZXN0aW5nIGZvciBsb2dpY2FsIGRlY29kaW5nLCBzZWUgZGVjb2RlLmMuICovCit9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwppbmRleCAyY2MwYWM5Li4xZjJjNzUxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAgLTM2LDYgKzM2LDcg QEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19j b250cm9sLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCisjaW5jbHVkZSAicmVw bGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIK ICNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24v b3JpZ2luLmgiCkBAIC02MDQsNiArNjA1LDQ2IEBAIGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQogfQogCiAvKgorICog SGFuZGxlIHJtZ3IgTE9HSUNBTERETE1TR19JRCByZWNvcmRzIGZvciBEZWNvZGVSZWNvcmRJbnRv UmVvcmRlckJ1ZmZlcigpLgorICovCit2b2lkCitsb2dpY2FsZGRsbXNnX2RlY29kZShMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKK3sKKwlTbmFwQnVp bGQgICpidWlsZGVyID0gY3R4LT5zbmFwc2hvdF9idWlsZGVyOworCVhMb2dSZWFkZXJTdGF0ZSAq ciA9IGJ1Zi0+cmVjb3JkOworCVRyYW5zYWN0aW9uSWQgeGlkID0gWExvZ1JlY0dldFhpZChyKTsK Kwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHIpICYgflhMUl9JTkZPX01BU0s7CisJUmVw T3JpZ2luSWQgb3JpZ2luX2lkID0gWExvZ1JlY0dldE9yaWdpbihyKTsKKwl4bF9sb2dpY2FsX2Rk bF9tZXNzYWdlICptZXNzYWdlOworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RETF9NRVNT QUdFKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBSTV9MT0dJQ0FMRERMTVNHX0lEIHJlY29y ZCB0eXBlOiAldSIsIGluZm8pOworCisJUmVvcmRlckJ1ZmZlclByb2Nlc3NYaWQoY3R4LT5yZW9y ZGVyLCBYTG9nUmVjR2V0WGlkKHIpLCBidWYtPm9yaWdwdHIpOworCisJLyoKKwkgKiBJZiB3ZSBk b24ndCBoYXZlIHNuYXBzaG90IG9yIHdlIGFyZSBqdXN0IGZhc3QtZm9yd2FyZGluZywgdGhlcmUg aXMgbm8KKwkgKiBwb2ludCBpbiBkZWNvZGluZyBkZGwgbWVzc2FnZXMuCisJICovCisJaWYgKFNu YXBCdWlsZEN1cnJlbnRTdGF0ZShidWlsZGVyKSA8IFNOQVBCVUlMRF9GVUxMX1NOQVBTSE9UIHx8 CisJCWN0eC0+ZmFzdF9mb3J3YXJkKQorCQlyZXR1cm47CisKKwltZXNzYWdlID0gKHhsX2xvZ2lj YWxfZGRsX21lc3NhZ2UgKikgWExvZ1JlY0dldERhdGEocik7CisKKwlpZiAobWVzc2FnZS0+ZGJJ ZCAhPSBjdHgtPnNsb3QtPmRhdGEuZGF0YWJhc2UgfHwKKwkJRmlsdGVyQnlPcmlnaW4oY3R4LCBv cmlnaW5faWQpKQorCQlyZXR1cm47CisKKwlpZiAoU25hcEJ1aWxkUHJvY2Vzc0NoYW5nZShidWls ZGVyLCB4aWQsIGJ1Zi0+b3JpZ3B0cikpCisJCVJlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2Uo Y3R4LT5yZW9yZGVyLCB4aWQsIGJ1Zi0+ZW5kcHRyLAorCQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3Nh Z2UsIC8qIGZpcnN0IHBhcnQgb2YgbWVzc2FnZSBpcyBwcmVmaXggKi8KKwkJCQkJCQkJCSBtZXNz YWdlLT5tZXNzYWdlX3NpemUsCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZSArIG1lc3NhZ2Ut PnByZWZpeF9zaXplLAorCQkJCQkJCQkJIG1lc3NhZ2UtPnJlbGlkLCBtZXNzYWdlLT5jbWR0eXBl KTsKK30KKworLyoKICAqIENvbnNvbGlkYXRlZCBjb21taXQgcmVjb3JkIGhhbmRsaW5nIGJldHdl ZW4gdGhlIGRpZmZlcmVudCBmb3JtIG9mIGNvbW1pdAogICogcmVjb3Jkcy4KICAqCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCmluZGV4IDYyNWE3ZjQuLjk4OTY5Yzcg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCisr KyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCkBAIC0zMyw2ICsz Myw3IEBACiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1 ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNs dWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fs LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC03Myw2ICs3NCwxMCBAQCBz dGF0aWMgdm9pZCB0cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiBzdGF0aWMgdm9pZCBtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRl ckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkgICBYTG9nUmVj UHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWwsCiAJCQkJCQkJICAgY29uc3QgY2hh ciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0 aWMgdm9pZCBkZGxtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBjb25z dCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCSAgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBl IGNtZHR5cGUsCisJCQkJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3Nh Z2UpOwogCiAvKiBzdHJlYW1pbmcgY2FsbGJhY2tzICovCiBzdGF0aWMgdm9pZCBzdHJlYW1fc3Rh cnRfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhu LApAQCAtOTAsNiArOTUsMTEgQEAgc3RhdGljIHZvaWQgc3RyZWFtX2NoYW5nZV9jYl93cmFwcGVy KFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4KIHN0YXRpYyB2b2lk IHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJC dWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0 cmFuc2FjdGlvbmFsLAogCQkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgbWVzc2Fn ZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHN0cmVhbV9kZGxtZXNz YWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKKwkJCQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgY29uc3Qg Y2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUg Y21kdHlwZSwKKwkJCQkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3Nh Z2UpOwogc3RhdGljIHZvaWQgc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZl ciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAgIGludCBucmVsYXRp b25zLCBSZWxhdGlvbiByZWxhdGlvbnNbXSwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKTsK IApAQCAtMjE4LDYgKzIyOCw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0 X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+YXBwbHlfdHJ1bmNhdGUgPSB0cnVuY2F0 ZV9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+Y29tbWl0ID0gY29tbWl0X2NiX3dyYXBwZXI7 CiAJY3R4LT5yZW9yZGVyLT5tZXNzYWdlID0gbWVzc2FnZV9jYl93cmFwcGVyOworCWN0eC0+cmVv cmRlci0+ZGRsbWVzc2FnZSA9IGRkbG1lc3NhZ2VfY2Jfd3JhcHBlcjsKIAogCS8qCiAJICogVG8g c3VwcG9ydCBzdHJlYW1pbmcsIHdlIHJlcXVpcmUgc3RhcnQvc3RvcC9hYm9ydC9jb21taXQvY2hh bmdlCkBAIC0yMzQsNiArMjQ1LDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRw dXRfcGx1Z2luX29wdGlvbnMsCiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fY29tbWl0X2NiICE9 IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fY2hhbmdlX2NiICE9IE5VTEwpIHx8 CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fbWVzc2FnZV9jYiAhPSBOVUxMKSB8fAorCQkoY3R4 LT5jYWxsYmFja3Muc3RyZWFtX2RkbG1lc3NhZ2VfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2Fs bGJhY2tzLnN0cmVhbV90cnVuY2F0ZV9jYiAhPSBOVUxMKTsKIAogCS8qCkBAIC0yNTEsNiArMjYz LDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMs CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fY29tbWl0ID0gc3RyZWFtX2NvbW1pdF9jYl93cmFwcGVy OwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX2NoYW5nZSA9IHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBl cjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9tZXNzYWdlID0gc3RyZWFtX21lc3NhZ2VfY2Jfd3Jh cHBlcjsKKwljdHgtPnJlb3JkZXItPnN0cmVhbV9kZGxtZXNzYWdlID0gc3RyZWFtX2RkbG1lc3Nh Z2VfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV90cnVuY2F0ZSA9IHN0cmVhbV90 cnVuY2F0ZV9jYl93cmFwcGVyOwogCiAKQEAgLTEyMjEsNiArMTIzNCw0NCBAQCBtZXNzYWdlX2Ni X3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIH0K IAogc3RhdGljIHZvaWQKK2RkbG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNo ZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24s CisJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5 cGUgY21kdHlwZSwKKwkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICBjb25zdCBjaGFy ICptZXNzYWdlKQoreworCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hlLT5wcml2 YXRlX2RhdGE7CisJTG9naWNhbEVycm9yQ2FsbGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJvckNvbnRl eHRDYWxsYmFjayBlcnJjYWxsYmFjazsKKworCUFzc2VydCghY3R4LT5mYXN0X2ZvcndhcmQpOwor CisJaWYgKGN0eC0+Y2FsbGJhY2tzLmRkbG1lc3NhZ2VfY2IgPT0gTlVMTCkKKwkJcmV0dXJuOwor CisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8K KwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJkZGxtZXNzYWdlIjsK KwlzdGF0ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwllcnJjYWxsYmFjay5jYWxs YmFjayA9IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJhY2suYXJnID0g KHZvaWQgKikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9z dGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCisJLyogc2V0IG91 dHB1dCBzdGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRydWU7CisJY3R4LT53cml0ZV94 aWQgPSB0eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJY3R4 LT53cml0ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCisJLyogZG8gdGhlIGFjdHVhbCB3b3Jr OiBjYWxsIGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFja3MuZGRsbWVzc2FnZV9jYihjdHgsIHR4 biwgbWVzc2FnZV9sc24sIHByZWZpeCwgcmVsaWQsIGNtZHR5cGUsCisJCQkJCQkJCSBtZXNzYWdl X3NpemUsIG1lc3NhZ2UpOworCisJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJ ZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOworfQorCitzdGF0aWMg dm9pZAogc3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCVhMb2dSZWNQdHIgZmlyc3RfbHNuKQogewpAQCAtMTUz Niw2ICsxNTg3LDQ4IEBAIHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAq Y2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIH0KIAogc3RhdGljIHZvaWQKK3N0cmVhbV9k ZGxtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKKwkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkgY29uc3Qg Y2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJ CQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7 CisJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4ID0gY2FjaGUtPnByaXZhdGVfZGF0YTsKKwlM b2dpY2FsRXJyb3JDYWxsYmFja1N0YXRlIHN0YXRlOworCUVycm9yQ29udGV4dENhbGxiYWNrIGVy cmNhbGxiYWNrOworCisJQXNzZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7CisKKwkvKiBXZSdyZSBv bmx5IHN1cHBvc2VkIHRvIGNhbGwgdGhpcyB3aGVuIHN0cmVhbWluZyBpcyBzdXBwb3J0ZWQuICov CisJQXNzZXJ0KGN0eC0+c3RyZWFtaW5nKTsKKworCS8qIHRoaXMgY2FsbGJhY2sgaXMgb3B0aW9u YWwgKi8KKwlpZiAoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbG1lc3NhZ2VfY2IgPT0gTlVMTCkK KwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNvbnRl eHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJz dHJlYW1fZGRsbWVzc2FnZSI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2FnZV9sc247 CisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxiYWNrOwor CWVycmNhbGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5wcmV2aW91 cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxs YmFjazsKKworCS8qIHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0ZXMgPSB0 cnVlOworCWN0eC0+d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IEludmFsaWRU cmFuc2FjdGlvbklkOworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKworCS8q IGRvIHRoZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJhY2tzLnN0 cmVhbV9kZGxtZXNzYWdlX2NiKGN0eCwgdHhuLCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxpZCwK KwkJCQkJCQkJCQljbWR0eXBlLCBtZXNzYWdlX3NpemUsIG1lc3NhZ2UpOworCisJLyogUG9wIHRo ZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxi YWNrLnByZXZpb3VzOworfQorCitzdGF0aWMgdm9pZAogc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBw ZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCSAg IGludCBucmVsYXRpb25zLCBSZWxhdGlvbiByZWxhdGlvbnNbXSwKIAkJCQkJCSAgIFJlb3JkZXJC dWZmZXJDaGFuZ2UgKmNoYW5nZSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21l c29uLmJ1aWxkCmluZGV4IDc3MzU4M2EuLmU3YzcwYWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9tZXNvbi5idWlsZApAQCAtMSw0ICsxLDUgQEAKIGJhY2tlbmRfc291cmNl cyArPSBmaWxlcygKKyAgJ2RkbG1lc3NhZ2UuYycsCiAgICdkZWNvZGUuYycsCiAgICdsYXVuY2hl ci5jJywKICAgJ2xvZ2ljYWwuYycsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3Byb3RvLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3Rv LmMKaW5kZXggZmY4NTEzZS4uZjM1NDA2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9wcm90by5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcHJvdG8uYwpAQCAtNjYzLDYgKzY2Myw1MiBAQCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2Uo U3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKIH0KIAog LyoKKyAqIFJlYWQgRERMIE1FU1NBR0UgZnJvbSBzdHJlYW0KKyAqLworY2hhciAqCitsb2dpY2Fs cmVwX3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sCisJCQkJ CQkgICBjb25zdCBjaGFyICoqcHJlZml4LAorCQkJCQkJICAgU2l6ZSAqc3opCit7CisJdWludDgg ZmxhZ3M7CisJY2hhciAqbXNnOworCisJLy9UT0RPIGRvdWJsZSBjaGVjayB3aGVuIGRvIHdlIG5l ZWQgdG8gZ2V0IFRyYW5zYWN0aW9uSWQuCisKKwlmbGFncyA9IHBxX2dldG1zZ2ludChpbiwgMSk7 CisJaWYgKGZsYWdzICE9IDApCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgZmxhZ3MgJXUg aW4gZGRsIG1lc3NhZ2UiLCBmbGFncyk7CisJKmxzbiA9IHBxX2dldG1zZ2ludDY0KGluKTsKKwkq cHJlZml4ID0gcHFfZ2V0bXNnc3RyaW5nKGluKTsKKwkqc3ogPSBwcV9nZXRtc2dpbnQoaW4sIDQp OworCW1zZyA9IChjaGFyICopIHBxX2dldG1zZ2J5dGVzKGluLCAqc3opOworCisJcmV0dXJuIG1z ZzsKK30KKworLyoKKyAqIFdyaXRlIERETCBNRVNTQUdFIHRvIHN0cmVhbQorICovCit2b2lkCits b2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQg eGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3os IGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJdWludDgJCWZsYWdzID0gMDsKKworCXBxX3NlbmRi eXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0UpOworCisJLyogdHJhbnNhY3Rpb24g SUQgKGlmIG5vdCB2YWxpZCwgd2UncmUgbm90IHN0cmVhbWluZykgKi8KKwlpZiAoVHJhbnNhY3Rp b25JZElzVmFsaWQoeGlkKSkKKwkJcHFfc2VuZGludDMyKG91dCwgeGlkKTsKKworCXBxX3NlbmRp bnQ4KG91dCwgZmxhZ3MpOworCXBxX3NlbmRpbnQ2NChvdXQsIGxzbik7CisJcHFfc2VuZHN0cmlu ZyhvdXQsIHByZWZpeCk7CisJcHFfc2VuZGludDMyKG91dCwgc3opOworCXBxX3NlbmRieXRlcyhv dXQsIG1lc3NhZ2UsIHN6KTsKK30KKworLyoKICAqIFdyaXRlIHJlbGF0aW9uIGRlc2NyaXB0aW9u IHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCiB2b2lkCkBAIC0xMjE4LDYgKzEyNjQsOCBAQCBs b2dpY2FscmVwX21lc3NhZ2VfdHlwZShMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24pCiAJCQlyZXR1 cm4gIlRZUEUiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19NRVNTQUdFOgogCQkJcmV0dXJuICJN RVNTQUdFIjsKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERMTUVTU0FHRToKKwkJCXJldHVybiAi RERMIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfQkVHSU5fUFJFUEFSRToKIAkJCXJldHVybiAi QkVHSU4gUFJFUEFSRSI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkU6CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4IDZkZmY5 OTEuLjNjMzc2OTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVv cmRlcmJ1ZmZlci5jCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSAibGliL2JpbmFyeWhlYXAu aCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRl ICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNh bC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKICNpbmNsdWRlICJy ZXBsaWNhdGlvbi9zbG90LmgiCkBAIC01MTUsNiArNTE2LDE0IEBAIFJlb3JkZXJCdWZmZXJSZXR1 cm5DaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwK IAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UpOwogCQkJY2hhbmdlLT5kYXRhLm1z Zy5tZXNzYWdlID0gTlVMTDsKIAkJCWJyZWFrOworCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5H RV9ERExNRVNTQUdFOgorCQkJaWYgKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ICE9IE5VTEwp CisJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgpOworCQkJY2hhbmdlLT5kYXRh LmRkbG1zZy5wcmVmaXggPSBOVUxMOworCQkJaWYgKGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2Fn ZSAhPSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSk7CisJCQlj aGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UgPSBOVUxMOworCQkJYnJlYWs7CiAJCWNhc2UgUkVP UkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCWlmIChjaGFuZ2UtPmRhdGEuaW52 YWwuaW52YWxpZGF0aW9ucykKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuaW52YWwuaW52YWxpZGF0 aW9ucyk7CkBAIC04NzAsNiArODc5LDM2IEBAIFJlb3JkZXJCdWZmZXJRdWV1ZU1lc3NhZ2UoUmVv cmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogfQogCiAvKgorICogQSB0cmFuc2Fj dGlvbmFsIERETCBtZXNzYWdlIGlzIHF1ZXVlZCB0byBiZSBwcm9jZXNzZWQgdXBvbiBjb21taXQu CisgKi8KK3ZvaWQKK1Jlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAq cmIsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCSBYTG9nUmVjUHRyIGxzbiwgY29uc3QgY2hh ciAqcHJlZml4LAorCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2Fn ZSwKKwkJCQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUpCit7CisJ TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZTsK KworCUFzc2VydCh4aWQgIT0gSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCisJb2xkY29udGV4dCA9 IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhyYi0+Y29udGV4dCk7CisKKwljaGFuZ2UgPSBSZW9yZGVy QnVmZmVyR2V0Q2hhbmdlKHJiKTsKKwljaGFuZ2UtPmFjdGlvbiA9IFJFT1JERVJfQlVGRkVSX0NI QU5HRV9ERExNRVNTQUdFOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ID0gcHN0cmR1cChw cmVmaXgpOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cucmVsaWQgPSByZWxpZDsKKwljaGFuZ2UtPmRh dGEuZGRsbXNnLmNtZHR5cGUgPSBjbWR0eXBlOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2Fn ZV9zaXplID0gbWVzc2FnZV9zaXplOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSA9IHBh bGxvYyhtZXNzYWdlX3NpemUpOworCW1lbWNweShjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Us IG1lc3NhZ2UsIG1lc3NhZ2Vfc2l6ZSk7CisKKwlSZW9yZGVyQnVmZmVyUXVldWVDaGFuZ2UocmIs IHhpZCwgbHNuLCBjaGFuZ2UsIGZhbHNlKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj b250ZXh0KTsKK30KKworLyoKICAqIEFzc2VydFRYTkxzbk9yZGVyCiAgKgkJVmVyaWZ5IExTTiBv cmRlcmluZyBvZiB0cmFuc2FjdGlvbiBsaXN0cyBpbiB0aGUgcmVvcmRlcmJ1ZmZlcgogICoKQEAg LTE5NjksNiArMjAwOCwyOSBAQCBSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKFJlb3JkZXJCdWZm ZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiB9CiAKIC8qCisgKiBIZWxwZXIgZnVuY3Rp b24gZm9yIFJlb3JkZXJCdWZmZXJQcm9jZXNzVFhOIGZvciBhcHBseWluZyB0aGUgRERMIG1lc3Nh Z2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorUmVvcmRlckJ1ZmZlckFwcGx5RERMTWVzc2Fn ZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCSBSZW9y ZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UsIGJvb2wgc3RyZWFtaW5nKQoreworCWlmIChzdHJlYW1p bmcpCisJCXJiLT5zdHJlYW1fZGRsbWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJ CQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4LAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRk bG1zZy5yZWxpZCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwKKwkJCQkJ CQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplLAorCQkJCQkJCSAgY2hhbmdlLT5k YXRhLmRkbG1zZy5tZXNzYWdlKTsKKwllbHNlCisJCXJiLT5kZGxtZXNzYWdlKHJiLCB0eG4sIGNo YW5nZS0+bHNuLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJICAg Y2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5j bWR0eXBlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJ ICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsKK30KKworLyoKICAqIEZ1bmN0aW9uIHRv IHN0b3JlIHRoZSBjb21tYW5kIGlkIGFuZCBzbmFwc2hvdCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJy ZW50CiAgKiBzdHJlYW0gc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgd2hpbGUgc2VuZGlu ZyB0aGUgbmV4dCBzdHJlYW0uCiAgKi8KQEAgLTIzNDgsNiArMjQxMCwxMCBAQCBSZW9yZGVyQnVm ZmVyUHJvY2Vzc1RYTihSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog CQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5n KTsKIAkJCQkJYnJlYWs7CiAKKwkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNT QUdFOgorCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwg c3RyZWFtaW5nKTsKKwkJCQkJYnJlYWs7CisKIAkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5H RV9JTlZBTElEQVRJT046CiAJCQkJCS8qIEV4ZWN1dGUgdGhlIGludmFsaWRhdGlvbiBtZXNzYWdl cyBsb2NhbGx5ICovCiAJCQkJCVJlb3JkZXJCdWZmZXJFeGVjdXRlSW52YWxpZGF0aW9ucyhjaGFu Z2UtPmRhdGEuaW52YWwubmludmFsaWRhdGlvbnMsCkBAIC0zNzczLDYgKzM4MzksNDAgQEAgUmVv cmRlckJ1ZmZlclNlcmlhbGl6ZUNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLAogCiAJCQkJYnJlYWs7CiAJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hB TkdFX0RETE1FU1NBR0U6CisJCQl7CisJCQkJY2hhcgkgICAqZGF0YTsKKwkJCQlTaXplCQlwcmVm aXhfc2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCkgKyAxOworCisJCQkJ c3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSArCisJ CQkJCXNpemVvZihTaXplKSArIHNpemVvZihPaWQpICsgc2l6ZW9mKGludCkgKyBzaXplb2YoU2l6 ZSk7CisJCQkJUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZVJlc2VydmUocmIsIHN6KTsKKworCQkJCWRh dGEgPSAoKGNoYXIgKikgcmItPm91dGJ1ZikgKyBzaXplb2YoUmVvcmRlckJ1ZmZlckRpc2tDaGFu Z2UpOworCisJCQkJLyogbWlnaHQgaGF2ZSBiZWVuIHJlYWxsb2NhdGVkIGFib3ZlICovCisJCQkJ b25kaXNrID0gKFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlICopIHJiLT5vdXRidWY7CisKKwkJCQkv KiB3cml0ZSB0aGUgcHJlZml4LCByZWxpZCBhbmQgY21kdHlwZSBpbmNsdWRpbmcgdGhlIHNpemUg Ki8KKwkJCQltZW1jcHkoZGF0YSwgJnByZWZpeF9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRh dGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1z Zy5yZWxpZCwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVt Y3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUsIHNpemVvZihpbnQpKTsKKwkJ CQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRs bXNnLnByZWZpeCwKKwkJCQkJICAgcHJlZml4X3NpemUpOworCQkJCWRhdGEgKz0gcHJlZml4X3Np emU7CisKKwkJCQkvKiB3cml0ZSB0aGUgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJ CQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplLCBzaXplb2Yo U2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCBjaGFu Z2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVz c2FnZV9zaXplKTsKKwkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXpl OworCisJCQkJYnJlYWs7CisJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFM SURBVElPTjoKIAkJCXsKIAkJCQljaGFyCSAgICpkYXRhOwpAQCAtNDA4Nyw2ICs0MTg3LDE1IEBA IFJlb3JkZXJCdWZmZXJDaGFuZ2VTaXplKFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSkKIAog CQkJCWJyZWFrOwogCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdF OgorCQkJeworCQkJCVNpemUJCXByZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGxt c2cucHJlZml4KSArIDE7CisKKwkJCQlzeiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5k ZGxtc2cubWVzc2FnZV9zaXplICsKKwkJCQkJc2l6ZW9mKFNpemUpICsgc2l6ZW9mKFNpemUpICsg c2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KTsKKworCQkJCWJyZWFrOworCQkJfQogCQljYXNlIFJF T1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQl7CiAJCQkJc3ogKz0gc2l6ZW9m KFNoYXJlZEludmFsaWRhdGlvbk1lc3NhZ2UpICoKQEAgLTQzNjIsNiArNDQ3MSwzMyBAQCBSZW9y ZGVyQnVmZmVyUmVzdG9yZUNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAogCiAJCQkJYnJlYWs7CiAJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdF X0RETE1FU1NBR0U6CisJCQl7CisJCQkJU2l6ZQkJcHJlZml4X3NpemU7CisKKwkJCQkvKiByZWFk IHByZWZpeCAqLworCQkJCW1lbWNweSgmcHJlZml4X3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7 CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRs bXNnLnJlbGlkLCBkYXRhLCBzaXplb2YoT2lkKSk7CisJCQkJZGF0YSArPSBzaXplb2YoT2lkKTsK KwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwgZGF0YSwgc2l6ZW9mKGlu dCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKGludCk7CisJCQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5w cmVmaXggPSBNZW1vcnlDb250ZXh0QWxsb2MocmItPmNvbnRleHQsIHByZWZpeF9zaXplKTsKKwkJ CQltZW1jcHkoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgsIGRhdGEsIHByZWZpeF9zaXplKTsK KwkJCQlBc3NlcnQoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXhbcHJlZml4X3NpemUgLSAxXSA9 PSAnXDAnKTsKKwkJCQlkYXRhICs9IHByZWZpeF9zaXplOworCisJCQkJLyogcmVhZCB0aGUgbWVz c2FnZSAqLworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUsIGRhdGEs IHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJY2hhbmdlLT5k YXRhLm1zZy5tZXNzYWdlID0gTWVtb3J5Q29udGV4dEFsbG9jKHJiLT5jb250ZXh0LAorCQkJCQkJ CQkJCQkJCQkJICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJbWVtY3B5KGNo YW5nZS0+ZGF0YS5tc2cubWVzc2FnZSwgZGF0YSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLm1zZy5t ZXNzYWdlX3NpemUpOworCQkJCWRhdGEgKz0gY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7 CisKKwkJCQlicmVhazsKKwkJCX0KIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJ REFUSU9OOgogCQkJewogCQkJCVNpemUJCWludmFsX3NpemUgPSBzaXplb2YoU2hhcmVkSW52YWxp ZGF0aW9uTWVzc2FnZSkgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMK aW5kZXggNTI1MGFlNy4uYmU3NjJiOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3dvcmtlci5jCkBAIC0xNTYsNiArMTU2LDcgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNp bmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVy LmgiCisjaW5jbHVkZSAicGFyc2VyL2FuYWx5emUuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNp bmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRl cnJ1cHQuaCIKQEAgLTE3OSw3ICsxODAsMTAgQEAKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5o IgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKyNpbmNsdWRlICJ0Y29wL3BxdWVyeS5o IgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIK ICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2lu Y2x1ZGUgInV0aWxzL2NhdGNhY2hlLmgiCkBAIC0yNDg4LDYgKzI0OTIsMjMyIEBAIGFwcGx5X2hh bmRsZV90cnVuY2F0ZShTdHJpbmdJbmZvIHMpCiAJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIH0K IAorLyogUmVtb3ZlIHRoZSBkYXRhIHBvcHVsYXRpb24gZnJvbSB0aGUgY29tbWFuZCAqLworc3Rh dGljIHZvaWQKK3ByZXByb2Nlc3NfY3JlYXRlX3RhYmxlKFJhd1N0bXQgKmNvbW1hbmQpCit7CisJ Q29tbWFuZFRhZwljb21tYW5kVGFnOworCisJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWco KE5vZGUgKikgY29tbWFuZCk7CisKKwlzd2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENN RFRBR19DUkVBVEVfVEFCTEVfQVM6CisJCWNhc2UgQ01EVEFHX1NFTEVDVF9JTlRPOgorCQkJewor CQkJCUNyZWF0ZVRhYmxlQXNTdG10ICpjYXN0bXQgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKikgY29t bWFuZC0+c3RtdDsKKworCQkJCWlmIChjYXN0bXQtPm9ianR5cGUgPT0gT0JKRUNUX1RBQkxFKQor CQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRv IGF2b2lkIGRhdGEKKwkJCQkJICogaW5jb25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUgcmVwbGlj YXRlZCBmcm9tIHRoZQorCQkJCQkgKiBwdWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJ CWNhc3RtdC0+aW50by0+c2tpcERhdGEgPSB0cnVlOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOwor CQljYXNlIENNRFRBR19TRUxFQ1Q6CisJCQl7CisJCQkJU2VsZWN0U3RtdCAqc3N0bXQgPSAoU2Vs ZWN0U3RtdCAqKSBjb21tYW5kLT5zdG10OworCisJCQkJaWYgKHNzdG10LT5pbnRvQ2xhdXNlICE9 IE5VTEwpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3JjZSBza2lwcGluZyBkYXRhIHBvcHVs YXRpb24gdG8gYXZvaWQgZGF0YQorCQkJCQkgKiBpbmNvbnNpc3RlbmN5LiBEYXRhIHNob3VsZCBi ZSByZXBsaWNhdGVkIGZyb20gdGhlCisJCQkJCSAqIHB1Ymxpc2hlciBpbnN0ZWFkLgorCQkJCQkg Ki8KKwkJCQkJc3N0bXQtPmludG9DbGF1c2UtPnNraXBEYXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KK30KKworLyoKKyAqIEhhbmRs ZSBDUkVBVEUgVEFCTEUgY29tbWFuZAorICoKKyAqIENhbGwgQWRkU3Vic2NyaXB0aW9uUmVsU3Rh dGUgZm9yIENSRUFURSBUQUJFTCBjb21tYW5kIHRvIHNldCB0aGUgcmVsc3RhdGUgdG8KKyAqIFNV QlJFTF9TVEFURV9SRUFEWSBzbyBETUwgY2hhbmdlcyBvbiB0aGlzIG5ldyB0YWJsZSBjYW4gYmUg cmVwbGljYXRlZCB3aXRob3V0CisgKiBoYXZpbmcgdG8gbWFudWFsbHkgcnVuICJhbHRlciBzdWJz Y3JpcHRpb24gLi4uIHJlZnJlc2ggcHVibGljYXRpb24iCisgKi8KK3N0YXRpYyB2b2lkCitoYW5k bGVfY3JlYXRlX3RhYmxlKFJhd1N0bXQgKmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21tYW5k VGFnOworCVJhbmdlVmFyICAgKnJ2ID0gTlVMTDsKKwlPaWQJCQlyZWxpZDsKKwlPaWQJCQlyZWxu YW1lc3BhY2UgPSBJbnZhbGlkT2lkOworCWNoYXIJICAgKnNjaGVtYW5hbWUgPSBOVUxMOworCWNo YXIJICAgKnJlbG5hbWUgPSBOVUxMOworCisJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWco KE5vZGUgKikgY29tbWFuZCk7CisKKwlzd2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENN RFRBR19DUkVBVEVfVEFCTEU6CisJCQl7CisJCQkJQ3JlYXRlU3RtdCAqY3N0bXQgPSAoQ3JlYXRl U3RtdCAqKSBjb21tYW5kLT5zdG10OworCisJCQkJcnYgPSBjc3RtdC0+cmVsYXRpb247CisJCQl9 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCWlmICghcnYpCisJCXJl dHVybjsKKworCXNjaGVtYW5hbWUgPSBydi0+c2NoZW1hbmFtZTsKKwlyZWxuYW1lID0gcnYtPnJl bG5hbWU7CisKKwlpZiAoc2NoZW1hbmFtZSAhPSBOVUxMKQorCQlyZWxuYW1lc3BhY2UgPSBnZXRf bmFtZXNwYWNlX29pZChzY2hlbWFuYW1lLCBmYWxzZSk7CisKKwlpZiAocmVsbmFtZXNwYWNlICE9 IEludmFsaWRPaWQpCisJCXJlbGlkID0gZ2V0X3JlbG5hbWVfcmVsaWQocmVsbmFtZSwgcmVsbmFt ZXNwYWNlKTsKKwllbHNlCisJCXJlbGlkID0gUmVsbmFtZUdldFJlbGlkKHJlbG5hbWUpOworCisJ aWYgKHJlbGlkICE9IEludmFsaWRPaWQpCisJeworCQlBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZShN eVN1YnNjcmlwdGlvbi0+b2lkLCByZWxpZCwKKwkJCQkJCQkJU1VCUkVMX1NUQVRFX1JFQURZLAor CQkJCQkJCQlJbnZhbGlkWExvZ1JlY1B0cik7CisJCWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJt c2dfaW50ZXJuYWwoInRhYmxlIFwiJXNcIiBhZGRlZCB0byBzdWJzY3JpcHRpb24gXCIlc1wiIiwK KwkJCQkJCQkJIHJlbG5hbWUsIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOworCX0KK30KKworc3Rh dGljIHZvaWQKK2FwcGx5X2hhbmRsZV9kZGwoU3RyaW5nSW5mbyBzKQoreworCVhMb2dSZWNQdHIJ bHNuOworCWNvbnN0IGNoYXIgKnByZWZpeCA9IE5VTEw7CisJY2hhcgkgICAqbWVzc2FnZSA9IE5V TEw7CisJY2hhcgkgICAqZGRsX2NvbW1hbmQ7CisJU2l6ZQkJc3o7CisJTGlzdAkgICAqcGFyc2V0 cmVlX2xpc3Q7CisJTGlzdENlbGwgICAqcGFyc2V0cmVlX2l0ZW07CisJRGVzdFJlY2VpdmVyICpy ZWNlaXZlcjsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJY29uc3QgY2hhciAqc2F2ZV9k ZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZWJ1Z19xdWVyeV9zdHJpbmc7CisKKwltZXNzYWdlID0gbG9n aWNhbHJlcF9yZWFkX2RkbG1lc3NhZ2UocywgJmxzbiwgJnByZWZpeCwgJnN6KTsKKworCS8qIE1h a2Ugc3VyZSB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb21tYW5kICovCisJYmVnaW5fcmVwbGlj YXRpb25fc3RlcCgpOworCisJZGRsX2NvbW1hbmQgPSBkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmlu ZyhtZXNzYWdlKTsKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZGxfY29tbWFuZDsKKworCS8qIERl c3ROb25lIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uICovCisJcmVjZWl2ZXIgPSBDcmVhdGVEZXN0 UmVjZWl2ZXIoRGVzdE5vbmUpOworCXBhcnNldHJlZV9saXN0ID0gcGdfcGFyc2VfcXVlcnkoZGRs X2NvbW1hbmQpOworCisJZm9yZWFjaChwYXJzZXRyZWVfaXRlbSwgcGFyc2V0cmVlX2xpc3QpCisJ eworCQlMaXN0CSAgICpwbGFudHJlZV9saXN0OworCQlMaXN0CSAgICpxdWVyeXRyZWVfbGlzdDsK KwkJUmF3U3RtdCAgICAqY29tbWFuZCA9IChSYXdTdG10ICopIGxmaXJzdChwYXJzZXRyZWVfaXRl bSk7CisJCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwkJTWVtb3J5Q29udGV4dCBwZXJfcGFyc2V0 cmVlX2NvbnRleHQgPSBOVUxMOworCQlQb3J0YWwJCXBvcnRhbDsKKwkJYm9vbAkJc25hcHNob3Rf c2V0ID0gZmFsc2U7CisKKwkJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikg Y29tbWFuZCk7CisKKwkJLyogSWYgd2UgZ290IGEgY2FuY2VsIHNpZ25hbCBpbiBwYXJzaW5nIG9y IHByaW9yIGNvbW1hbmQsIHF1aXQgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkv KiBSZW1vdmUgZGF0YSBwb3B1bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQgKi8KKwkJcHJlcHJvY2Vz c19jcmVhdGVfdGFibGUoY29tbWFuZCk7CisKKwkJLyoKKwkJICogU2V0IHVwIGEgc25hcHNob3Qg aWYgcGFyc2UgYW5hbHlzaXMvcGxhbm5pbmcgd2lsbCBuZWVkIG9uZS4KKwkJICovCisJCWlmIChh bmFseXplX3JlcXVpcmVzX3NuYXBzaG90KGNvbW1hbmQpKQorCQl7CisJCQlQdXNoQWN0aXZlU25h cHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJCXNuYXBzaG90X3NldCA9IHRydWU7 CisJCX0KKworCQkvKgorCQkgKiBXZSBkbyB0aGUgd29yayBmb3IgZWFjaCBwYXJzZXRyZWUgaW4g YSBzaG9ydC1saXZlZCBjb250ZXh0LCB0bworCQkgKiBsaW1pdCB0aGUgbWVtb3J5IHVzZWQgd2hl biB0aGVyZSBhcmUgbWFueSBjb21tYW5kcyBpbiB0aGUgc3RyaW5nLgorCQkgKi8KKwkJcGVyX3Bh cnNldHJlZV9jb250ZXh0ID0KKwkJCUFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5 Q29udGV4dCwKKwkJCQkJCQkJICAiZXhlY3V0ZV9zcWxfc3RyaW5nIHBlci1zdGF0ZW1lbnQgY29u dGV4dCIsCisJCQkJCQkJCSAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGVyX3BhcnNldHJlZV9jb250ZXh0KTsKKworCQlxdWVy eXRyZWVfbGlzdCA9IHBnX2FuYWx5emVfYW5kX3Jld3JpdGVfZml4ZWRwYXJhbXMoY29tbWFuZCwK KwkJCQkJCQkJCQkJCQkJCWRkbF9jb21tYW5kLAorCQkJCQkJCQkJCQkJCQkJTlVMTCwgMCwgTlVM TCk7CisKKwkJcGxhbnRyZWVfbGlzdCA9IHBnX3BsYW5fcXVlcmllcyhxdWVyeXRyZWVfbGlzdCwg ZGRsX2NvbW1hbmQsIDAsIE5VTEwpOworCisJCS8qIERvbmUgd2l0aCB0aGUgc25hcHNob3QgdXNl ZCBmb3IgcGFyc2luZy9wbGFubmluZyAqLworCQlpZiAoc25hcHNob3Rfc2V0KQorCQkJUG9wQWN0 aXZlU25hcHNob3QoKTsKKworCQlwb3J0YWwgPSBDcmVhdGVQb3J0YWwoImxvZ2ljYWwgcmVwbGlj YXRpb24iLCB0cnVlLCB0cnVlKTsKKworCQkvKgorCQkgKiBXZSBkb24ndCBoYXZlIHRvIGNvcHkg YW55dGhpbmcgaW50byB0aGUgcG9ydGFsLCBiZWNhdXNlIGV2ZXJ5dGhpbmcKKwkJICogd2UgYXJl IHBhc3NpbmcgaGVyZSBpcyBpbiBBcHBseU1lc3NhZ2VDb250ZXh0IG9yIHRoZQorCQkgKiBwZXJf cGFyc2V0cmVlX2NvbnRleHQsIGFuZCBzbyB3aWxsIG91dGxpdmUgdGhlIHBvcnRhbCBhbnl3YXku CisJCSAqLworCQlQb3J0YWxEZWZpbmVRdWVyeShwb3J0YWwsCisJCQkJCQkgIE5VTEwsCisJCQkJ CQkgIGRkbF9jb21tYW5kLAorCQkJCQkJICBjb21tYW5kVGFnLAorCQkJCQkJICBwbGFudHJlZV9s aXN0LAorCQkJCQkJICBOVUxMKTsKKworCQkvKgorCQkgKiBTdGFydCB0aGUgcG9ydGFsLiAgTm8g cGFyYW1ldGVycyBoZXJlLgorCQkgKi8KKwkJUG9ydGFsU3RhcnQocG9ydGFsLCBOVUxMLCAwLCBJ bnZhbGlkU25hcHNob3QpOworCisJCS8qCisJCSAqIFN3aXRjaCBiYWNrIHRvIHRyYW5zYWN0aW9u IGNvbnRleHQgZm9yIGV4ZWN1dGlvbi4KKwkJICovCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjb250ZXh0KTsKKworCQkodm9pZCkgUG9ydGFsUnVuKHBvcnRhbCwKKwkJCQkJCSBGRVRDSF9B TEwsCisJCQkJCQkgdHJ1ZSwKKwkJCQkJCSB0cnVlLAorCQkJCQkJIHJlY2VpdmVyLAorCQkJCQkJ IHJlY2VpdmVyLAorCQkJCQkJIE5VTEwpOworCisJCVBvcnRhbERyb3AocG9ydGFsLCBmYWxzZSk7 CisKKwkJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKworCQkvKgorCQkgKiBUYWJsZSBjcmVh dGVkIGJ5IERETCByZXBsaWNhdGlvbiAoZGF0YWJhc2UgbGV2ZWwpIGlzIGF1dG9tYXRpY2FsbHkK KwkJICogYWRkZWQgdG8gdGhlIHN1YnNjcmlwdGlvbiBoZXJlLgorCQkgKi8KKwkJaGFuZGxlX2Ny ZWF0ZV90YWJsZShjb21tYW5kKTsKKworCQkvKiBOb3cgd2UgbWF5IGRyb3AgdGhlIHBlci1wYXJz ZXRyZWUgY29udGV4dCwgaWYgb25lIHdhcyBjcmVhdGVkLiAqLworCQlNZW1vcnlDb250ZXh0RGVs ZXRlKHBlcl9wYXJzZXRyZWVfY29udGV4dCk7CisJfQorCisJZGVidWdfcXVlcnlfc3RyaW5nID0g c2F2ZV9kZWJ1Z19xdWVyeV9zdHJpbmc7CisJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKK30KKwog CiAvKgogICogTG9naWNhbCByZXBsaWNhdGlvbiBwcm90b2NvbCBtZXNzYWdlIGRpc3BhdGNoZXIu CkBAIC0yNTUzLDYgKzI3ODMsMTAgQEAgYXBwbHlfZGlzcGF0Y2goU3RyaW5nSW5mbyBzKQogCQkJ ICovCiAJCQlicmVhazsKIAorCQljYXNlIExPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFOgorCQkJ YXBwbHlfaGFuZGxlX2RkbChzKTsKKwkJCWJyZWFrOworCiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNH X1NUUkVBTV9TVEFSVDoKIAkJCWFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQocyk7CiAJCQlicmVh azsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0 LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmluZGV4IDJl Y2FhNWIuLmIxY2RhNmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0 cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdv dXRwdXQuYwpAQCAtNTMsNiArNTMsMTEgQEAgc3RhdGljIHZvaWQgcGdvdXRwdXRfbWVzc2FnZShM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKIAkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBj b25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2Up Oworc3RhdGljIHZvaWQgcGdvdXRwdXRfZGRsbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsCisJCQkJCQkJCVJlb3JkZXJCdWZmZXJUWE4gKnR4biwgWExvZ1JlY1B0ciBtZXNzYWdl X2xzbiwKKwkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsCisJCQkJCQkJCURl cGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJU2l6ZSBzeiwgY29uc3QgY2hhciAq bWVzc2FnZSk7CiBzdGF0aWMgYm9vbCBwZ291dHB1dF9vcmlnaW5fZmlsdGVyKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJICAgUmVwT3JpZ2luSWQgb3JpZ2luX2lkKTsKIHN0 YXRpYyB2b2lkIHBnb3V0cHV0X2JlZ2luX3ByZXBhcmVfdHhuKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwKQEAgLTI1Niw2ICsyNjEsNyBAQCBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1 dFBsdWdpbkNhbGxiYWNrcyAqY2IpCiAJY2ItPmNoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsK IAljYi0+dHJ1bmNhdGVfY2IgPSBwZ291dHB1dF90cnVuY2F0ZTsKIAljYi0+bWVzc2FnZV9jYiA9 IHBnb3V0cHV0X21lc3NhZ2U7CisJY2ItPmRkbG1lc3NhZ2VfY2IgPSBwZ291dHB1dF9kZGxtZXNz YWdlOwogCWNiLT5jb21taXRfY2IgPSBwZ291dHB1dF9jb21taXRfdHhuOwogCiAJY2ItPmJlZ2lu X3ByZXBhcmVfY2IgPSBwZ291dHB1dF9iZWdpbl9wcmVwYXJlX3R4bjsKQEAgLTI3Miw2ICsyNzgs NyBAQCBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAqY2IpCiAJ Y2ItPnN0cmVhbV9jb21taXRfY2IgPSBwZ291dHB1dF9zdHJlYW1fY29tbWl0OwogCWNiLT5zdHJl YW1fY2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT5zdHJlYW1fbWVzc2FnZV9jYiA9 IHBnb3V0cHV0X21lc3NhZ2U7CisJY2ItPnN0cmVhbV9kZGxtZXNzYWdlX2NiID0gcGdvdXRwdXRf ZGRsbWVzc2FnZTsKIAljYi0+c3RyZWFtX3RydW5jYXRlX2NiID0gcGdvdXRwdXRfdHJ1bmNhdGU7 CiAJLyogdHJhbnNhY3Rpb24gc3RyZWFtaW5nIC0gdHdvLXBoYXNlIGNvbW1pdCAqLwogCWNiLT5z dHJlYW1fcHJlcGFyZV9jYiA9IHBnb3V0cHV0X3N0cmVhbV9wcmVwYXJlX3R4bjsKQEAgLTQyNiw2 ICs0MzMsNyBAQCBwZ291dHB1dF9zdGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg T3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LAogCiAJLyogVGhpcyBwbHVnaW4gdXNlcyBiaW5hcnkg cHJvdG9jb2wuICovCiAJb3B0LT5vdXRwdXRfdHlwZSA9IE9VVFBVVF9QTFVHSU5fQklOQVJZX09V VFBVVDsKKwlvcHQtPnJlY2VpdmVfcmV3cml0ZXMgPSB0cnVlOwogCiAJLyoKIAkgKiBUaGlzIGlz IHJlcGxpY2F0aW9uIHN0YXJ0IGFuZCBub3Qgc2xvdCBpbml0aWFsaXphdGlvbi4KQEAgLTQ5OSw2 ICs1MDcsNyBAQCBwZ291dHB1dF9zdGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg T3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LAogCiAJCS8qIEluaXQgcHVibGljYXRpb24gc3RhdGUu ICovCiAJCWRhdGEtPnB1YmxpY2F0aW9ucyA9IE5JTDsKKwkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMg PSBOSUw7CiAJCXB1YmxpY2F0aW9uc192YWxpZCA9IGZhbHNlOwogCQlDYWNoZVJlZ2lzdGVyU3lz Y2FjaGVDYWxsYmFjayhQVUJMSUNBVElPTk9JRCwKIAkJCQkJCQkJCSAgcHVibGljYXRpb25faW52 YWxpZGF0aW9uX2NiLApAQCAtMTM3Nyw5ICsxMzg2LDIyIEBAIHBnb3V0cHV0X2NoYW5nZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAlSZW9yZGVy QnVmZmVyQ2hhbmdlVHlwZSBhY3Rpb24gPSBjaGFuZ2UtPmFjdGlvbjsKIAlUdXBsZVRhYmxlU2xv dCAqb2xkX3Nsb3QgPSBOVUxMOwogCVR1cGxlVGFibGVTbG90ICpuZXdfc2xvdCA9IE5VTEw7CisJ Ym9vbAkJdGFibGVfcmV3cml0ZSA9IGZhbHNlOwogCiAJdXBkYXRlX3JlcGxpY2F0aW9uX3Byb2dy ZXNzKGN0eCwgZmFsc2UpOwogCisJLyoKKwkgKiBGb3IgaGVhcCByZXdyaXRlcywgd2UgbWlnaHQg bmVlZCB0byByZXBsaWNhdGUgdGhlbSBpZiB0aGUgcmV3cml0dGVuCisJICogdGFibGUgcHVibGlz aGVzIHJld3JpdGUgZGRsIG1lc3NhZ2UuIFNvIGdldCB0aGUgYWN0dWFsIHJlbGF0aW9uIGhlcmUK KwkgKiBhbmQgY2hlY2sgdGhlIHB1YmFjdGlvbiBsYXRlci4KKwkgKi8KKwlpZiAocmVsYXRpb24t PnJkX3JlbC0+cmVscmV3cml0ZSkKKwl7CisJCXRhYmxlX3Jld3JpdGUgPSB0cnVlOworCQlyZWxh dGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRl KTsKKwkJdGFyZ2V0cmVsID0gcmVsYXRpb247CisJfQorCiAJaWYgKCFpc19wdWJsaXNoYWJsZV9y ZWxhdGlvbihyZWxhdGlvbikpCiAJCXJldHVybjsKIApAQCAtMTQxMyw2ICsxNDM1LDEzIEBAIHBn b3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKIAkJCUFzc2VydChmYWxzZSk7CiAJfQogCisJLyoKKwkgKiBXZSBkb24ndCBwdWJs aXNoIHRhYmxlIHJld3JpdGUgY2hhbmdlIHVubGVzcyB3ZSBwdWJsaXNoIHRoZSByZXdyaXRlIGRk bAorCSAqIG1lc3NhZ2UuCisJICovCisJaWYgKHRhYmxlX3Jld3JpdGUgJiYgIXJlbGVudHJ5LT5w dWJhY3Rpb25zLnB1YmRkbCkKKwkJcmV0dXJuOworCiAJLyogQXZvaWQgbGVha2luZyBtZW1vcnkg YnkgdXNpbmcgYW5kIHJlc2V0dGluZyBvdXIgb3duIGNvbnRleHQgKi8KIAlvbGQgPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8oZGF0YS0+Y29udGV4dCk7CiAKQEAgLTE0NDIsOCArMTQ3MSw4IEBAIHBn b3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKIAkJCX0KIAogCQkJLyogQ2hlY2sgcm93IGZpbHRlciAqLwotCQkJaWYgKCFwZ291 dHB1dF9yb3dfZmlsdGVyKHRhcmdldHJlbCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwKLQkJ CQkJCQkJCSAmYWN0aW9uKSkKKwkJCWlmICghdGFibGVfcmV3cml0ZSAmJgorCQkJCSFwZ291dHB1 dF9yb3dfZmlsdGVyKHRhcmdldHJlbCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwgJmFjdGlv bikpCiAJCQkJYnJlYWs7CiAKIAkJCS8qCkBAIC0xNDYzLDggKzE0OTIsMTkgQEAgcGdvdXRwdXRf Y2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhu LAogCQkJbWF5YmVfc2VuZF9zY2hlbWEoY3R4LCBjaGFuZ2UsIHJlbGF0aW9uLCByZWxlbnRyeSk7 CiAKIAkJCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOwotCQkJbG9naWNhbHJl cF93cml0ZV9pbnNlcnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKLQkJCQkJ CQkJCWRhdGEtPmJpbmFyeSwgcmVsZW50cnktPmNvbHVtbnMpOworCisJCQkvKgorCQkJICogQ29u dmVydCB0aGUgcmV3cml0ZSBpbnNlcnRzIHRvIHVwZGF0ZXMgc28gdGhhdCB0aGUgc3Vic2NyaWJl cgorCQkJICogY2FuIHJlcGxheSBpdC4gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoZSBk YXRhIGJldHdlZW4KKwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBpcyBjb25zaXN0ZW50 LgorCQkJICovCisJCQlpZiAodGFibGVfcmV3cml0ZSkKKwkJCQlsb2dpY2FscmVwX3dyaXRlX3Vw ZGF0ZShjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWwsCisJCQkJCQkJCQkJTlVMTCwgbmV3X3Nsb3Qs IGRhdGEtPmJpbmFyeSwKKwkJCQkJCQkJCQlyZWxlbnRyeS0+Y29sdW1ucyk7CisJCQllbHNlCisJ CQkJbG9naWNhbHJlcF93cml0ZV9pbnNlcnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdf c2xvdCwKKwkJCQkJCQkJCQlkYXRhLT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKIAkJCU91 dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JV RkZFUl9DSEFOR0VfVVBEQVRFOgpAQCAtMTU5NCw2ICsxNjM0LDkgQEAgcGdvdXRwdXRfY2hhbmdl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQlh bmNlc3RvciA9IE5VTEw7CiAJfQogCisJaWYgKHRhYmxlX3Jld3JpdGUpCisJCVJlbGF0aW9uQ2xv c2UocmVsYXRpb24pOworCiAJLyogQ2xlYW51cCAqLwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGQpOwogCU1lbW9yeUNvbnRleHRSZXNldChkYXRhLT5jb250ZXh0KTsKQEAgLTE2NzEsOCArMTcx NCw4IEBAIHBnb3V0cHV0X3RydW5jYXRlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLAogCiBzdGF0aWMgdm9pZAogcGdvdXRwdXRfbWVzc2FnZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKLQkJCQkgWExv Z1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVm aXgsIFNpemUgc3osCi0JCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCisJCQkJIFhMb2dSZWNQdHIg bWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKKwkJCQkgY29uc3QgY2hhciAqcHJlZml4 LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKQogewogCVBHT3V0cHV0RGF0YSAqZGF0YSA9 IChQR091dHB1dERhdGEgKikgY3R4LT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CiAJVHJhbnNhY3Rp b25JZCB4aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKQEAgLTE3MTIsNiArMTc1NSwxMzkgQEAg cGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKIAlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOwogfQogCitzdGF0aWMg dm9pZAorcGdvdXRwdXRfZGRsbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJ Y29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlw ZSwKKwkJCQkJU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlQR091dHB1dERhdGEg KmRhdGEgPSAoUEdPdXRwdXREYXRhICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCVBH T3V0cHV0VHhuRGF0YSAqdHhuZGF0YSA9IChQR091dHB1dFR4bkRhdGEgKikgdHhuLT5vdXRwdXRf cGx1Z2luX3ByaXZhdGU7CisJUmVsYXRpb24JcmVsYXRpb24gPSBOVUxMOworCVRyYW5zYWN0aW9u SWQgeGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJUmVsYXRpb25TeW5jRW50cnkgKnJlbGVu dHJ5OworCisJLyoKKwkgKiBSZW1lbWJlciB0aGUgeGlkIGZvciB0aGUgbWVzc2FnZSBpbiBzdHJl YW1pbmcgbW9kZS4gU2VlCisJICogcGdvdXRwdXRfY2hhbmdlLgorCSAqLworCWlmIChpbl9zdHJl YW1pbmcpCisJCXhpZCA9IHR4bi0+eGlkOworCisJc3dpdGNoIChjbWR0eXBlKQorCXsKKwkJY2Fz ZSBEQ1RfVGFibGVEcm9wU3RhcnQ6CisKKwkJCS8qCisJCQkgKiBPbiBEUk9QIHN0YXJ0LCBhZGQg dGhlIHJlbGlkIHRvIGEgZGVsZXRlZF9yZWxpZCBsaXN0IGlmIHRoZQorCQkJICogcmVsaWQgaXMg cGFydCBvZiBhIHB1YmxpY2F0aW9uIHRoYXQgc3VwcG9ydHMgZGRsIHB1YmxpY2F0aW9uLgorCQkJ ICogV2UgbmVlZCB0aGlzIGJlY2F1c2Ugb24gRFJPUCBlbmQsIHRoZSByZWxpZCB3aWxsIG5vIGxv bmdlciBiZQorCQkJICogdmFsaWQuIExhdGVyIG9uIERyb3AgZW5kLCB2ZXJpZnkgdGhhdCB0aGUg ZHJvcCBpcyBmb3IgYSByZWxpZAorCQkJICogdGhhdCBpcyBvbiB0aGUgZGVsZXRlZF9yaWQgbGlz dCwgYW5kIG9ubHkgdGhlbiBzZW5kIHRoZSBkZGwKKwkJCSAqIG1lc3NhZ2UuCisJCQkgKi8KKwkJ CXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKworCQkJQXNzZXJ0KHJl bGF0aW9uKTsKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9u KTsKKworCQkJaWYgKHJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJCQlkYXRhLT5kZWxl dGVkX3JlbGlkcyA9IGxhcHBlbmRfb2lkKGRhdGEtPmRlbGV0ZWRfcmVsaWRzLCByZWxpZCk7CisK KwkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJcmV0dXJuOworCQljYXNlIERDVF9UYWJs ZURyb3BFbmQ6CisJCQlpZiAoIWxpc3RfbWVtYmVyX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywg cmVsaWQpKQorCQkJCXJldHVybjsKKwkJCWVsc2UKKwkJCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9 IGxpc3RfZGVsZXRlX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpOworCQkJYnJlYWs7 CisJCWNhc2UgRENUX1RhYmxlQWx0ZXI6CisKKwkJCS8qCisJCQkgKiBGb3IgdGFibGUgcmV3cml0 ZSBkZGwsIHdlIGZpcnN0IHNlbmQgdGhlIG9yaWdpbmFsIGRkbCBtZXNzYWdlCisJCQkgKiB0byBz dWJzY3JpYmVyLCB0aGVuIGNvbnZlcnQgdGhlIHVwY29taW5nIHJld3JpdGUgSU5TRVJUIHRvCisJ CQkgKiBVUERBVEUgYW5kIHNlbmQgdGhlbSB0byBzdWJzY3JpYmVyIHNvIHRoYXQgdGhlIGRhdGEg YmV0d2VlbgorCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGNhbiBhbHdheXMgYmUgY29u c2lzdGVudC4KKwkJCSAqCisJCQkgKiBXZSBkbyB0aGlzIHdheSBiZWNhdXNlIG9mIHR3byByZWFz b246CisJCQkgKgorCQkJICogKDEpIFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBkZGwgY291 bGQgYWxyZWFkeSBiZSBkaWZmZXJlbnQKKwkJCSAqIGFtb25nIHB1Ymxpc2hlciBhbmQgc3Vic2Ny aWJlci4gVG8gbWFrZSBzdXJlIHRoZSBleHRyYSBkYXRhIGluCisJCQkgKiBzdWJzY3JpYmVyIHdo aWNoIGRvZXNuJ3QgZXhpc3QgaW4gcHVibGlzaGVyIGFsc28gZ2V0IHJld3JpdHRlbiwKKwkJCSAq IHdlIG5lZWQgdG8gbGV0IHRoZSBzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3Jp dGUgZGRsCisJCQkgKiB0byByZXdyaXRlIGFsbCB0aGUgZGF0YSBhdCBmaXJzdC4KKwkJCSAqCisJ CQkgKiAoMikgdGhlIGRhdGEgYWZ0ZXIgZXhlY3V0aW5nIHJld3JpdGUgZGRsIGNvdWxkIGJlIGRp ZmZlcmVudAorCQkJICogYW1vbmcgcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyKGR1ZSB0byBkaWZm ZXJlbnQKKwkJCSAqIGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNlZCBkdXJpbmcgcmV3cml0ZSksIHNv IHdlIG5lZWQgdG8KKwkJCSAqIHJlcGxpY2F0ZSB0aGUgcmV3cml0ZSBVUERBVEVzIHRvIGtlZXAg dGhlIGRhdGEgY29uc2lzdGVudC4KKwkJCSAqCisJCQkgKiBUTyBJTVBST1ZFOiBXZSBjb3VsZCBp bXByb3ZlIHRoaXMgYnkgbGV0dGluZyB0aGUgc3Vic2NyaWJlcgorCQkJICogb25seSByZXdyaXRl IHRoZSBleHRyYSBkYXRhIGluc3RlYWQgb2YgZG9pbmcgZnVsbHkgcmV3cml0ZSBhbmQKKwkJCSAq IHVzZSB0aGUgdXBjb21pbmcgcmV3cml0ZSBVUERBVEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0 YS4KKwkJCSAqIEJlc2lkZXMsIHdlIG1heSBub3QgbmVlZCB0byBzZW5kIHJld3JpdGUgY2hhbmdl cyBmb3IgYWxsIHR5cGUKKwkJCSAqIG9mIHJld3JpdGUgZGRsLCBmb3IgZXhhbXBsZSwgaXQgc2Vl bXMgZmluZSB0byBza2lwIHNlbmRpbmcKKwkJCSAqIHJld3JpdGUgY2hhbmdlcyBmb3IgQUxURVIg VEFCTEUgU0VUIExPR0dFRCBhcyB0aGUgZGF0YSBpbiB0aGUKKwkJCSAqIHRhYmxlIGRvZXNuJ3Qg YWN0dWFsbHkgYmUgY2hhbmdlZC4KKwkJCSAqLworCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0 UmVsYXRpb24ocmVsaWQpOworCQkJQXNzZXJ0KHJlbGF0aW9uKTsKKworCQkJcmVsZW50cnkgPSBn ZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQkvKgorCQkJICogU2tpcCBz ZW5kaW5nIHRoaXMgZGRsIGlmIHdlIGRvbid0IHB1Ymxpc2ggZGRsIG1lc3NhZ2Ugb3IgdGhlCisJ CQkgKiBkZGwgbmVlZCB0byBiZSBwdWJsaXNoZWQgdmlhIGl0cyByb290IHJlbGF0aW9uLgorCQkJ ICovCisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCB8fAorCQkJCXJlbGVudHJ5 LT5wdWJsaXNoX2FzX3JlbGlkICE9IHJlbGlkKQorCQkJeworCQkJCVJlbGF0aW9uQ2xvc2UocmVs YXRpb24pOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgRENUX1NpbXBs ZUNtZDoKKwkJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKworCQkJ aWYgKHJlbGF0aW9uID09IE5VTEwpCisJCQkJYnJlYWs7CisKKwkJCXJlbGVudHJ5ID0gZ2V0X3Jl bF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0 aW9ucy5wdWJkZGwpCisJCQl7CisJCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0 dXJuOworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSBEQ1RfT2JqZWN0RHJvcDoKKwkJCS8qIGRv IG5vdGhpbmcgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3Vw cG9ydGVkIHR5cGUgJWQiLCBjbWR0eXBlKTsKKwkJCWJyZWFrOworCX0KKworCS8qIFNlbmQgQkVH SU4gaWYgd2UgaGF2ZW4ndCB5ZXQgKi8KKwlpZiAodHhuZGF0YSAmJiAhdHhuZGF0YS0+c2VudF9i ZWdpbl90eG4pCisJCXBnb3V0cHV0X3NlbmRfYmVnaW4oY3R4LCB0eG4pOworCisJT3V0cHV0UGx1 Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7CisJbG9naWNhbHJlcF93cml0ZV9kZGxtZXNzYWdl KGN0eC0+b3V0LAorCQkJCQkJCQl4aWQsCisJCQkJCQkJCW1lc3NhZ2VfbHNuLAorCQkJCQkJCQlw cmVmaXgsCisJCQkJCQkJCXN6LAorCQkJCQkJCQltZXNzYWdlKTsKKwlPdXRwdXRQbHVnaW5Xcml0 ZShjdHgsIHRydWUpOworCisJaWYgKHJlbGF0aW9uKQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9u KTsKK30KKwogLyoKICAqIFJldHVybiB0cnVlIGlmIHRoZSBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0 aCBhbiBvcmlnaW4gYW5kIHRoZSB1c2VyIGhhcwogICogcmVxdWVzdGVkIHRoZSBjaGFuZ2VzIHRo YXQgZG9uJ3QgaGF2ZSBhbiBvcmlnaW4sIGZhbHNlIG90aGVyd2lzZS4KQEAgLTE5OTMsNyArMjE2 OSw4IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJl bGF0aW9uKQogCQllbnRyeS0+c2NoZW1hX3NlbnQgPSBmYWxzZTsKIAkJZW50cnktPnN0cmVhbWVk X3R4bnMgPSBOSUw7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1Ymluc2VydCA9IGVudHJ5LT5wdWJh Y3Rpb25zLnB1YnVwZGF0ZSA9Ci0JCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBlbnRy eS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IGZhbHNlOworCQkJZW50cnktPnB1YmFjdGlvbnMu cHViZGVsZXRlID0gZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPQorCQkJZW50cnktPnB1 YmFjdGlvbnMucHViZGRsID0gZmFsc2U7CiAJCWVudHJ5LT5uZXdfc2xvdCA9IE5VTEw7CiAJCWVu dHJ5LT5vbGRfc2xvdCA9IE5VTEw7CiAJCW1lbXNldChlbnRyeS0+ZXhwcnN0YXRlLCAwLCBzaXpl b2YoZW50cnktPmV4cHJzdGF0ZSkpOwpAQCAtMjA1MSw2ICsyMjI4LDcgQEAgZ2V0X3JlbF9zeW5j X2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5w dWJhY3Rpb25zLnB1YnVwZGF0ZSA9IGZhbHNlOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxl dGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsKKwkJ ZW50cnktPnB1YmFjdGlvbnMucHViZGRsID0gZmFsc2U7CiAKIAkJLyoKIAkJICogVHVwbGUgc2xv dHMgY2xlYW51cHMuIChXaWxsIGJlIHJlYnVpbHQgbGF0ZXIgaWYgbmVlZGVkKS4KQEAgLTIxNjQs NiArMjM0Miw3IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0 aW9uIHJlbGF0aW9uKQogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWItPnB1 YmFjdGlvbnMucHVidXBkYXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSB8PSBw dWItPnB1YmFjdGlvbnMucHViZGVsZXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5j YXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZTsKKwkJCQllbnRyeS0+cHViYWN0aW9u cy5wdWJkZGwgfD0gcHViLT5wdWJhY3Rpb25zLnB1YmRkbDsKIAogCQkJCS8qCiAJCQkJICogV2Ug d2FudCB0byBwdWJsaXNoIHRoZSBjaGFuZ2VzIGFzIHRoZSB0b3AtbW9zdCBhbmNlc3RvcgpAQCAt MjM0OSw2ICsyNTI4LDcgQEAgcmVsX3N5bmNfY2FjaGVfcHVibGljYXRpb25fY2IoRGF0dW0gYXJn LCBpbnQgY2FjaGVpZCwgdWludDMyIGhhc2h2YWx1ZSkKIAl7CiAJCWVudHJ5LT5yZXBsaWNhdGVf dmFsaWQgPSBmYWxzZTsKIAl9CisKIH0KIAogLyogU2VuZCBSZXBsaWNhdGlvbiBvcmlnaW4gKi8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFj a2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IDAwZGMwZjIuLmYxYjRkMDkgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNTY4Myw2ICs1NjgzLDcgQEAgUmVsYXRpb25C dWlsZFB1YmxpY2F0aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpw dWJkZXNjKQogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWJmb3JtLT5wdWJ1 cGRhdGU7CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1YmZvcm0tPnB1YmRl bGV0ZTsKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWJmb3JtLT5wdWJ0 cnVuY2F0ZTsKKwkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZGwgfD0gcHViZm9ybS0+cHViZGRs OwogCiAJCS8qCiAJCSAqIENoZWNrIGlmIGFsbCBjb2x1bW5zIHJlZmVyZW5jZWQgaW4gdGhlIGZp bHRlciBleHByZXNzaW9uIGFyZSBwYXJ0CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdf ZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCBiZDliMDY2Li45N2Y0MzRh IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMKQEAgLTM4OTcsNiArMzg5Nyw3IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNo aXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlpbnQJCQlpX3B1YnVwZGF0ZTsKIAlp bnQJCQlpX3B1YmRlbGV0ZTsKIAlpbnQJCQlpX3B1YnRydW5jYXRlOworCWludAkJCWlfcHViZGRs OwogCWludAkJCWlfcHVidmlhcm9vdDsKIAlpbnQJCQlpLAogCQkJCW50dXBzOwpAQCAtMzkxMiwy MyArMzkxMywyMyBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJs aWNhdGlvbnMpCiAJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CiAKIAkvKiBHZXQgdGhlIHB1Ymxp Y2F0aW9ucy4gKi8KLQlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxMzAwMDApCisJaWYgKGZv dXQtPnJlbW90ZVZlcnNpb24gPj0gMTUwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVy eSwKIAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJ CQkJICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQs IHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJ2aWFyb290ICIK KwkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHVi ZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBwLnB1YmRkbCwgcC5wdWJ2aWFyb290ICIKIAkJCQkJCQkg IkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCWVsc2UgaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24g Pj0gMTEwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVD VCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkJICJwLnB1Ym93bmVyLCAi Ci0JCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1 YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCisJCQkJCQkJICJw LnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5w dWJ0cnVuY2F0ZSwgZmFsc2UgYXMgcC5wdWJkZGwsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgogCQkJ CQkJCSAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1l LCAiCiAJCQkJCQkJICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5w dWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNhdGUs IGZhbHNlIEFTIHB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5z ZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1YnRydW5jYXRlLCBmYWxz ZSBhcyBwLnB1YmRkbCwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1 YmxpY2F0aW9uIHAiKTsKIAogCXJlcyA9IEV4ZWN1dGVTcWxRdWVyeShmb3V0LCBxdWVyeS0+ZGF0 YSwgUEdSRVNfVFVQTEVTX09LKTsKQEAgLTM5NDQsNiArMzk0NSw3IEBAIGdldFB1YmxpY2F0aW9u cyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlpX3B1YnVwZGF0ZSA9IFBR Zm51bWJlcihyZXMsICJwdWJ1cGRhdGUiKTsKIAlpX3B1YmRlbGV0ZSA9IFBRZm51bWJlcihyZXMs ICJwdWJkZWxldGUiKTsKIAlpX3B1YnRydW5jYXRlID0gUFFmbnVtYmVyKHJlcywgInB1YnRydW5j YXRlIik7CisJaV9wdWJkZGwgPSBQUWZudW1iZXIocmVzLCAicHViZGRsIik7CiAJaV9wdWJ2aWFy b290ID0gUFFmbnVtYmVyKHJlcywgInB1YnZpYXJvb3QiKTsKIAogCXB1YmluZm8gPSBwZ19tYWxs b2MobnR1cHMgKiBzaXplb2YoUHVibGljYXRpb25JbmZvKSk7CkBAIC0zOTY3LDYgKzM5NjksOCBA QCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJ CQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YmRlbGV0ZSksICJ0IikgPT0gMCk7CiAJ CXB1YmluZm9baV0ucHVidHJ1bmNhdGUgPQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwg aV9wdWJ0cnVuY2F0ZSksICJ0IikgPT0gMCk7CisJCXB1YmluZm9baV0ucHViZGRsID0KKwkJCShz dHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGRsKSwgInQiKSA9PSAwKTsKIAkJcHViaW5m b1tpXS5wdWJ2aWFyb290ID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidmlh cm9vdCksICJ0IikgPT0gMCk7CiAKQEAgLTQwNDYsNiArNDA1MCwxNSBAQCBkdW1wUHVibGljYXRp b24oQXJjaGl2ZSAqZm91dCwgY29uc3QgUHVibGljYXRpb25JbmZvICpwdWJpbmZvKQogCQlmaXJz dCA9IGZhbHNlOwogCX0KIAorCWlmIChwdWJpbmZvLT5wdWJkZGwpCisJeworCQlpZiAoIWZpcnN0 KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsICIpOworCisJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKHF1ZXJ5LCAiZGRsIik7CisJCWZpcnN0ID0gZmFsc2U7CisJfQorCiAJYXBwZW5k UFFFeHBCdWZmZXJDaGFyKHF1ZXJ5LCAnXCcnKTsKIAogCWlmIChwdWJpbmZvLT5wdWJ2aWFyb290 KQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCBiL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmgKaW5kZXggNDI3ZjVkNC4uNjg1NjgzZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCkBAIC02MjAs NiArNjIwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1B1YmxpY2F0aW9uSW5mbwogCWJvb2wJCXB1YmRl bGV0ZTsKIAlib29sCQlwdWJ0cnVuY2F0ZTsKIAlib29sCQlwdWJ2aWFyb290OworCWJvb2wJCXB1 YmRkbDsKIH0gUHVibGljYXRpb25JbmZvOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193 YWxkdW1wL3JtZ3JkZXNjLmMgYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwppbmRleCA2 YjhjMTdiLi43OTJmNDM4IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2Mu YworKysgYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwpAQCAtMjcsNiArMjcsNyBAQAog I2luY2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVz cGFjZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKKyNpbmNsdWRlICJyZXBs aWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCiAj aW5jbHVkZSAicm1ncmRlc2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N0YW5kYnlkZWZzLmgiCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmli ZS5jCmluZGV4IGM2NDVkNjYuLjJlOTRmY2EgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNj cmliZS5jCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCkBAIC02MTU5LDcgKzYxNTksNyBA QCBsaXN0UHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJUFFFeHBCdWZmZXJEYXRh IGJ1ZjsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJcHJpbnRRdWVyeU9wdCBteW9wdCA9IHBzZXQucG9w dDsKLQlzdGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1tdID0ge2ZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CisJc3RhdGljIGNv bnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfTsKIAogCWlmIChwc2V0LnN2ZXJz aW9uIDwgMTAwMDAwKQogCXsKQEAgLTYxOTQsNiArNjE5NCwxMCBAQCBsaXN0UHVibGljYXRpb25z KGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkg ICIsXG4gIHB1YnZpYXJvb3QgQVMgXCIlc1wiIiwKIAkJCQkJCSAgZ2V0dGV4dF9ub29wKCJWaWEg cm9vdCIpKTsKKwlpZiAocHNldC5zdmVyc2lvbiA+PSAxNDAwMDApCisJCWFwcGVuZFBRRXhwQnVm ZmVyKCZidWYsCisJCQkJCQkgICIsXG4gIHB1YmRkbCBBUyBcIiVzXCIiLAorCQkJCQkJICBnZXR0 ZXh0X25vb3AoIkRETHMiKSk7CiAKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJ ICJcbkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvblxuIik7CkBAIC02Mjg0LDYgKzYyODgs NyBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCVBHcmVzdWx0 ICAgKnJlczsKIAlib29sCQloYXNfcHVidHJ1bmNhdGU7CiAJYm9vbAkJaGFzX3B1YnZpYXJvb3Q7 CisJYm9vbAkJaGFzX3B1YmRkbDsKIAogCVBRRXhwQnVmZmVyRGF0YSB0aXRsZTsKIAlwcmludFRh YmxlQ29udGVudCBjb250OwpAQCAtNjMwMCw2ICs2MzA1LDcgQEAgZGVzY3JpYmVQdWJsaWNhdGlv bnMoY29uc3QgY2hhciAqcGF0dGVybikKIAogCWhhc19wdWJ0cnVuY2F0ZSA9IChwc2V0LnN2ZXJz aW9uID49IDExMDAwMCk7CiAJaGFzX3B1YnZpYXJvb3QgPSAocHNldC5zdmVyc2lvbiA+PSAxMzAw MDApOworCWhhc19wdWJkZGwgPSAgKHBzZXQuc3ZlcnNpb24gPj0gMTUwMDAwKTsKIAogCWluaXRQ UUV4cEJ1ZmZlcigmYnVmKTsKIApAQCAtNjMxMyw2ICs2MzE5LDkgQEAgZGVzY3JpYmVQdWJsaWNh dGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkJICIsIHB1YnZpYXJvb3QiKTsKKwlpZiAoaGFz X3B1YmRkbCkKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKKwkJCQkJCQkgIiwgcHViZGRs Iik7CiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCSAiXG5GUk9NIHBnX2NhdGFs b2cucGdfcHVibGljYXRpb25cbiIpOwogCkBAIC02MzY0LDYgKzYzNzMsOCBAQCBkZXNjcmliZVB1 YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJbmNvbHMrKzsKIAkJaWYgKGhhc19w dWJ2aWFyb290KQogCQkJbmNvbHMrKzsKKwkJaWYgKGhhc19wdWJkZGwpCisJCQluY29scysrOwog CiAJCWluaXRQUUV4cEJ1ZmZlcigmdGl0bGUpOwogCQlwcmludGZQUUV4cEJ1ZmZlcigmdGl0bGUs IF8oIlB1YmxpY2F0aW9uICVzIiksIHB1Ym5hbWUpOwpAQCAtNjM3OCw2ICs2Mzg5LDggQEAgZGVz Y3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCXByaW50VGFibGVBZGRI ZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiVHJ1bmNhdGVzIiksIHRydWUsIGFsaWduKTsKIAkJ aWYgKGhhc19wdWJ2aWFyb290KQogCQkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4 dF9ub29wKCJWaWEgcm9vdCIpLCB0cnVlLCBhbGlnbik7CisJCWlmIChoYXNfcHViZGRsKQorCQkJ cHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJERExzIiksIHRydWUsIGFs aWduKTsKIAogCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDIp LCBmYWxzZSwgZmFsc2UpOwogCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShy ZXMsIGksIDMpLCBmYWxzZSwgZmFsc2UpOwpAQCAtNjM4OCw2ICs2NDAxLDggQEAgZGVzY3JpYmVQ dWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCXByaW50VGFibGVBZGRDZWxsKCZj b250LCBQUWdldHZhbHVlKHJlcywgaSwgNyksIGZhbHNlLCBmYWxzZSk7CiAJCWlmIChoYXNfcHVi dmlhcm9vdCkKIAkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwg OCksIGZhbHNlLCBmYWxzZSk7CisJCWlmIChoYXNfcHViZGRsKQorCQkJcHJpbnRUYWJsZUFkZENl bGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA5KSwgZmFsc2UsIGZhbHNlKTsKIAogCQlpZiAo IXB1YmFsbHRhYmxlcykKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3Js aXN0LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAppbmRleCAwMDBiY2JmLi4zN2Rm ZDQ1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaApAQCAtNDcsMyArNDcsNCBAQCBQR19STUdSKFJNX0NP TU1JVF9UU19JRCwgIkNvbW1pdFRzIiwgY29tbWl0X3RzX3JlZG8sIGNvbW1pdF90c19kZXNjLCBj b21taXRfdHNfaQogUEdfUk1HUihSTV9SRVBMT1JJR0lOX0lELCAiUmVwbGljYXRpb25PcmlnaW4i LCByZXBsb3JpZ2luX3JlZG8sIHJlcGxvcmlnaW5fZGVzYywgcmVwbG9yaWdpbl9pZGVudGlmeSwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKIFBHX1JNR1IoUk1fR0VORVJJQ19JRCwgIkdlbmVyaWMi LCBnZW5lcmljX3JlZG8sIGdlbmVyaWNfZGVzYywgZ2VuZXJpY19pZGVudGlmeSwgTlVMTCwgTlVM TCwgZ2VuZXJpY19tYXNrLCBOVUxMKQogUEdfUk1HUihSTV9MT0dJQ0FMTVNHX0lELCAiTG9naWNh bE1lc3NhZ2UiLCBsb2dpY2FsbXNnX3JlZG8sIGxvZ2ljYWxtc2dfZGVzYywgbG9naWNhbG1zZ19p ZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgbG9naWNhbG1zZ19kZWNvZGUpCitQR19STUdSKFJN X0xPR0lDQUxERExNU0dfSUQsICJMb2dpY2FsRERMTWVzc2FnZSIsIGxvZ2ljYWxkZGxtc2dfcmVk bywgbG9naWNhbGRkbG1zZ19kZXNjLCBsb2dpY2FsZGRsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxM LCBOVUxMLCBsb2dpY2FsZGRsbXNnX2RlY29kZSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4 IGMyZjFkZTIuLjg0Zjg3ZTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE4MzMsNCAr MTE4MzMsMTMgQEAKIHsgb2lkID0+ICc0NjQzJywgZGVzY3IgPT4gJ2V4cGFuZCBKU09OIGZvcm1h dCBEREwgdG8gYSBwbGFpbiBEREwgY29tbWFuZCcsCiAgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNl X2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCiAgIHByb2FyZ3R5cGVzID0+ ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcgfSwKK3sgb2lk ID0+ICc0NjQ0JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UnLAor ICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZCcsIHByb3Jl dHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZCcgfSwKK3sgb2lkID0+ICc0NjQ1 JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2Ugc3RhcnQnLAorICBw cm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0JywgcHJvcmV0 dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4g J3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQnIH0sCit7IG9pZCA9PiAnNDY0 NicsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIHJld3Jp dGUnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnLCBw cm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3Ny YyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJyB9LAogXQpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIGIvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wdWJsaWNhdGlvbi5oCmluZGV4IGVjZjVhMjguLmRhZmQ0ODMgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKQEAgLTU0LDYgKzU0LDkgQEAgQ0FUQUxPRyhwZ19wdWJs aWNhdGlvbiw2MTA0LFB1YmxpY2F0aW9uUmVsYXRpb25JZCkKIAogCS8qIHRydWUgaWYgcGFydGl0 aW9uIGNoYW5nZXMgYXJlIHB1Ymxpc2hlZCB1c2luZyByb290IHNjaGVtYSAqLwogCWJvb2wJCXB1 YnZpYXJvb3Q7CisKKwkvKiB0cnVlIGlmIHRhYmxlIGNyZWF0aW9ucyBhcmUgcHVibGlzaGVkICov CisJYm9vbAkJcHViZGRsOwogfSBGb3JtRGF0YV9wZ19wdWJsaWNhdGlvbjsKIAogLyogLS0tLS0t LS0tLS0tLS0tLQpAQCAtNzIsNiArNzUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbkFj dGlvbnMKIAlib29sCQlwdWJ1cGRhdGU7CiAJYm9vbAkJcHViZGVsZXRlOwogCWJvb2wJCXB1YnRy dW5jYXRlOworCWJvb2wJCXB1YmRkbDsKIH0gUHVibGljYXRpb25BY3Rpb25zOwogCiB0eXBlZGVm IHN0cnVjdCBQdWJsaWNhdGlvbkRlc2MKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRz L2V2ZW50X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaApp bmRleCAxMDA5MWMzLi5mZDJlZTdmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5o CkBAIC03MSw3ICs3MSw4IEBAIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RTaW1wbGVD b21tYW5kKE9iamVjdEFkZHJlc3MgYWRkcmVzcywKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFs dGVyVGFibGVTdGFydChOb2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2Vy QWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJZCk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJD b2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsCi0JCQkJCQkJCQkJCQlPYmplY3RB ZGRyZXNzIGFkZHJlc3MpOworCQkJCQkJCQkJCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzLAorCQkJ CQkJCQkJCQkJYm9vbCByZXdyaXRlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFi bGVFbmQodm9pZCk7CiAKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RHcmFudChJbnRl cm5hbEdyYW50ICppc3RtdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9k ZGxtZXNzYWdlLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhNzY2ZgotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaApAQCAtMCwwICsxLDYwIEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqIGRkbG1lc3NhZ2UuaAorICoJICAgRXhwb3J0cyBmcm9tIHJl cGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIy LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIHNyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5k ZWYgUEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisjZGVmaW5lIFBHX0xPR0lDQUxfRERMX01FU1NB R0VfSAorCisjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2Rl ZnMuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlYWRlci5oIgorI2luY2x1ZGUgIm5vZGVzL25v ZGVzLmgiCisKKworLyoKKyAqIFN1cHBvcnQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZGVwYXJzZWQg Y29tbWFuZHMuCisgKi8KK3R5cGVkZWYgZW51bSBEZXBhcnNlZENvbW1hbmRUeXBlCit7CisJRENU X1NpbXBsZUNtZCwKKwlEQ1RfVGFibGVEcm9wU3RhcnQsCisJRENUX1RhYmxlRHJvcEVuZCwKKwlE Q1RfVGFibGVBbHRlciwKKwlEQ1RfT2JqZWN0Q3JlYXRlLAorCURDVF9PYmplY3REcm9wCit9IERl cGFyc2VkQ29tbWFuZFR5cGU7CisKKy8qCisgKiBHZW5lcmljIGxvZ2ljYWwgZGVjb2RpbmcgRERM IG1lc3NhZ2Ugd2FsIHJlY29yZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeGxfbG9naWNhbF9kZGxf bWVzc2FnZQoreworCU9pZAkJCWRiSWQ7CQkJLyogZGF0YWJhc2UgT2lkIGVtaXR0ZWQgZnJvbSAq LworCVNpemUJCXByZWZpeF9zaXplOwkvKiBsZW5ndGggb2YgcHJlZml4ICovCisJT2lkCQkJcmVs aWQ7CQkJLyogaWQgb2YgdGhlIHRhYmxlICovCisJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBl OwkvKiB0eXBlIG9mIHNxbCBjb21tYW5kICovCisJU2l6ZQkJbWVzc2FnZV9zaXplOwkvKiBzaXpl IG9mIHRoZSBtZXNzYWdlICovCisKKwkvKgorCSAqIHBheWxvYWQsIGluY2x1ZGluZyBudWxsLXRl cm1pbmF0ZWQgcHJlZml4IG9mIGxlbmd0aCBwcmVmaXhfc2l6ZQorCSAqLworCWNoYXIJCW1lc3Nh Z2VbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30geGxfbG9naWNhbF9kZGxfbWVzc2FnZTsKKwor I2RlZmluZSBTaXplT2ZMb2dpY2FsRERMTWVzc2FnZQkob2Zmc2V0b2YoeGxfbG9naWNhbF9kZGxf bWVzc2FnZSwgbWVzc2FnZSkpCisKK2V4dGVybiBYTG9nUmVjUHRyIExvZ0xvZ2ljYWxERExNZXNz YWdlKGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNt ZHR5cGUsCisJCQkJCQkJCQkgICBjb25zdCBjaGFyICpkZGxfbWVzc2FnZSwgc2l6ZV90IHNpemUp OworCisvKiBSTUdSIEFQSSovCisjZGVmaW5lIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRQkweDAw Cit2b2lkCQlsb2dpY2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwordm9p ZAkJbG9naWNhbGRkbG1zZ19kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJl Y29yZCk7Citjb25zdCBjaGFyICpsb2dpY2FsZGRsbXNnX2lkZW50aWZ5KHVpbnQ4IGluZm8pOwor CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKaW5kZXggNzQxYmY2NS4uNDI3YTdiOSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKKysrIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKQEAgLTI3LDYgKzI3LDcgQEAgZXh0ZXJuIHZvaWQg aGVhcDJfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZl ciAqYnVmKTsKIGV4dGVybiB2b2lkIHhhY3RfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIHN0YW5kYnlfZGVjb2Rl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4 dGVybiB2b2lkIGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg WExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxkZGxtc2dfZGVjb2Rl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIAog ZXh0ZXJuIHZvaWQgTG9naWNhbERlY29kaW5nUHJvY2Vzc1JlY29yZChMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsCiAJCQkJCQkJCQkJIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggN2VhYTRjOS4uNWQ2MTc0OCAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysrIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTYxLDYgKzYxLDcgQEAgdHlw ZWRlZiBlbnVtIExvZ2ljYWxSZXBNc2dUeXBlCiAJTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OID0g J1InLAogCUxPR0lDQUxfUkVQX01TR19UWVBFID0gJ1knLAogCUxPR0lDQUxfUkVQX01TR19NRVNT QUdFID0gJ00nLAorCUxPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFID0gJ0wnLAogCUxPR0lDQUxf UkVQX01TR19CRUdJTl9QUkVQQVJFID0gJ2InLAogCUxPR0lDQUxfUkVQX01TR19QUkVQQVJFID0g J1AnLAogCUxPR0lDQUxfUkVQX01TR19DT01NSVRfUFJFUEFSRUQgPSAnSycsCkBAIC0yMjksNyAr MjMwLDExIEBAIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfdHJ1bmNhdGUoU3RyaW5nSW5m byBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAogZXh0ZXJuIExpc3QgKmxvZ2ljYWxyZXBfcmVhZF90 cnVuY2F0ZShTdHJpbmdJbmZvIGluLAogCQkJCQkJCQkJICBib29sICpjYXNjYWRlLCBib29sICpy ZXN0YXJ0X3NlcXMpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmlu Z0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCi0JCQkJCQkJCQkg Ym9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNo YXIgKm1lc3NhZ2UpOworCQkJCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAq cHJlZml4LAorCQkJCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJu IHZvaWQgbG9naWNhbHJlcF93cml0ZV9kZGxtZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2Fj dGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4 LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiBjaGFyICpsb2dpY2FscmVw X3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sIGNvbnN0IGNo YXIgKipwcmVmaXgsIFNpemUgKnN6KTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfcmVs KFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJIFJlbGF0aW9uIHJl bCwgQml0bWFwc2V0ICpjb2x1bW5zKTsKIGV4dGVybiBMb2dpY2FsUmVwUmVsYXRpb24gKmxvZ2lj YWxyZXBfcmVhZF9yZWwoU3RyaW5nSW5mbyBpbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRw dXRfcGx1Z2luLmgKaW5kZXggYjdkMjhkNy4uNzYzZTQzZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL291dHB1dF9wbHVnaW4uaApAQCAtOTEsNiArOTEsMTggQEAgdHlwZWRlZiB2b2lkICgqTG9n aWNhbERlY29kZU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs CiAJCQkJCQkJCQkJY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIC8qCisgKiBDYWxsZWQgZm9yIHRo ZSBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlcy4KKyAqLwordHlwZWRlZiB2b2lkICgqTG9n aWNhbERlY29kZURETE1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsCisJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSAgIFhM b2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAor CQkJCQkJCQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkgICBEZXBhcnNlZENvbW1hbmRUeXBl IGNtZHR5cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJICAg Y29uc3QgY2hhciAqbWVzc2FnZSk7CisKKy8qCiAgKiBGaWx0ZXIgY2hhbmdlcyBieSBvcmlnaW4u CiAgKi8KIHR5cGVkZWYgYm9vbCAoKkxvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdpbkNCKSAoc3Ry dWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKQEAgLTIwMiw2ICsyMTQsMTkgQEAgdHlw ZWRlZiB2b2lkICgqTG9naWNhbERlY29kZVN0cmVhbU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsK IAogLyoKKyAqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgbG9naWNhbCBkZWNvZGluZyBEREwgbWVz c2FnZXMgZnJvbSBpbi1wcm9ncmVzcworICogdHJhbnNhY3Rpb25zLgorICovCit0eXBlZGVmIHZv aWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFtRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJ CQkJCQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBj aGFyICpwcmVmaXgsCisJCQkJCQkJCQkJCQkgT2lkIHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFy c2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwK KwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsKKworLyoKICAqIENhbGxiYWNrIGZv ciBzdHJlYW1pbmcgdHJ1bmNhdGVzIGZyb20gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLgogICov CiB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFtVHJ1bmNhdGVDQikgKHN0cnVjdCBM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCkBAIC0yMjEsNiArMjQ2LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgT3V0cHV0UGx1Z2luQ2FsbGJhY2tzCiAJTG9naWNhbERlY29kZVRydW5jYXRlQ0IgdHJ1 bmNhdGVfY2I7CiAJTG9naWNhbERlY29kZUNvbW1pdENCIGNvbW1pdF9jYjsKIAlMb2dpY2FsRGVj b2RlTWVzc2FnZUNCIG1lc3NhZ2VfY2I7CisJTG9naWNhbERlY29kZURETE1lc3NhZ2VDQiBkZGxt ZXNzYWdlX2NiOwogCUxvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdpbkNCIGZpbHRlcl9ieV9vcmln aW5fY2I7CiAJTG9naWNhbERlY29kZVNodXRkb3duQ0Igc2h1dGRvd25fY2I7CiAKQEAgLTIzOSw2 ICsyNjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQbHVnaW5DYWxsYmFja3MKIAlMb2dpY2Fs RGVjb2RlU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1pdF9jYjsKIAlMb2dpY2FsRGVjb2RlU3Ry ZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZV9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtTWVzc2Fn ZUNCIHN0cmVhbV9tZXNzYWdlX2NiOworCUxvZ2ljYWxEZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0Ig c3RyZWFtX2RkbG1lc3NhZ2VfY2I7CiAJTG9naWNhbERlY29kZVN0cmVhbVRydW5jYXRlQ0Igc3Ry ZWFtX3RydW5jYXRlX2NiOwogfSBPdXRwdXRQbHVnaW5DYWxsYmFja3M7CiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9wZ291dHB1dC5oCmluZGV4IDAyMDI3NTUuLjgzZTBiMWUgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vcGdvdXRwdXQuaApAQCAtMjUsNiArMjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQR091dHB1dERh dGEKIAl1aW50MzIJCXByb3RvY29sX3ZlcnNpb247CiAJTGlzdAkgICAqcHVibGljYXRpb25fbmFt ZXM7CiAJTGlzdAkgICAqcHVibGljYXRpb25zOworCUxpc3QJICAgKmRlbGV0ZWRfcmVsaWRzOwog CWJvb2wJCWJpbmFyeTsKIAlib29sCQlzdHJlYW1pbmc7CiAJYm9vbAkJbWVzc2FnZXM7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKaW5kZXggMDJiNTlhMS4uYTlhMjAwZiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBi L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApAQCAtMTEsNiArMTEsOCBA QAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImxpYi9pbGlz dC5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRs bWVzc2FnZS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMv aHNlYXJjaC5oIgogI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCkBAIC01Niw2ICs1OCw3IEBA IHR5cGVkZWYgZW51bSBSZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZQogCVJFT1JERVJfQlVGRkVSX0NI QU5HRV9JTlNFUlQsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURSwKIAlSRU9SREVSX0JV RkZFUl9DSEFOR0VfREVMRVRFLAorCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFLAog CVJFT1JERVJfQlVGRkVSX0NIQU5HRV9NRVNTQUdFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9J TlZBTElEQVRJT04sCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVEVSTkFMX1NOQVBTSE9ULApA QCAtMTMwLDYgKzEzMywxNiBAQCB0eXBlZGVmIHN0cnVjdCBSZW9yZGVyQnVmZmVyQ2hhbmdlCiAJ CQljaGFyCSAgICptZXNzYWdlOwogCQl9CQkJbXNnOwogCisJCS8qIERETCBNZXNzYWdlLiAqLwor CQlzdHJ1Y3QKKwkJeworCQkJY2hhcgkgICAqcHJlZml4OworCQkJU2l6ZQkJbWVzc2FnZV9zaXpl OworCQkJY2hhcgkgICAqbWVzc2FnZTsKKwkJCU9pZAkJCXJlbGlkOworCQkJRGVwYXJzZWRDb21t YW5kVHlwZSBjbWR0eXBlOworCQl9CQkJZGRsbXNnOworCiAJCS8qIE5ldyBzbmFwc2hvdCwgc2V0 IHdoZW4gYWN0aW9uID09ICpfSU5URVJOQUxfU05BUFNIT1QgKi8KIAkJU25hcHNob3QJc25hcHNo b3Q7CiAKQEAgLTQzNSw2ICs0NDgsMTYgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlck1l c3NhZ2VDQikgKFJlb3JkZXJCdWZmZXIgKnJiLAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZp eCwgU2l6ZSBzeiwKIAkJCQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyogRERMIG1l c3NhZ2UgY2FsbGJhY2sgc2lnbmF0dXJlICovCit0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVy RERMTWVzc2FnZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCisJCQkJCQkJCQkJICAgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJ CQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSAgIE9pZCByZWxpZCwKKwkJ CQkJCQkJCQkgICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJICAgU2l6 ZSBzeiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyogYmVnaW4gcHJl cGFyZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJC ZWdpblByZXBhcmVDQikgKFJlb3JkZXJCdWZmZXIgKnJiLAogCQkJCQkJCQkJCQkgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuKTsKQEAgLTUwMSw2ICs1MjQsMTcgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRl ckJ1ZmZlclN0cmVhbU1lc3NhZ2VDQikgKAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZp eCwgU2l6ZSBzeiwKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyogc3Ry ZWFtIERETCBtZXNzYWdlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVv cmRlckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VDQikgKAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZm ZXIgKnJiLAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJ CSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZp eCwKKwkJCQkJCQkJCQkJCSBPaWQgcmVsaWQsCisJCQkJCQkJCQkJCQkgRGVwYXJzZWRDb21tYW5k VHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCQkJIFNpemUgc3osCisJCQkJCQkJCQkJCQkgY29uc3Qg Y2hhciAqbWVzc2FnZSk7CisKIC8qIHN0cmVhbSB0cnVuY2F0ZSBjYWxsYmFjayBzaWduYXR1cmUg Ki8KIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJTdHJlYW1UcnVuY2F0ZUNCKSAoCiAJCQkJ CQkJCQkJCSAgIFJlb3JkZXJCdWZmZXIgKnJiLApAQCAtNTUyLDYgKzU4Niw3IEBAIHN0cnVjdCBS ZW9yZGVyQnVmZmVyCiAJUmVvcmRlckJ1ZmZlckFwcGx5VHJ1bmNhdGVDQiBhcHBseV90cnVuY2F0 ZTsKIAlSZW9yZGVyQnVmZmVyQ29tbWl0Q0IgY29tbWl0OwogCVJlb3JkZXJCdWZmZXJNZXNzYWdl Q0IgbWVzc2FnZTsKKwlSZW9yZGVyQnVmZmVyRERMTWVzc2FnZUNCIGRkbG1lc3NhZ2U7CiAKIAkv KgogCSAqIENhbGxiYWNrcyB0byBiZSBjYWxsZWQgd2hlbiBzdHJlYW1pbmcgYSB0cmFuc2FjdGlv biBhdCBwcmVwYXJlIHRpbWUuCkBAIC01NzEsNiArNjA2LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZm ZXIKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1pdDsKIAlSZW9yZGVy QnVmZmVyU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZTsKIAlSZW9yZGVyQnVmZmVyU3RyZWFt TWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlOworCVJlb3JkZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdl Q0Igc3RyZWFtX2RkbG1lc3NhZ2U7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0Igc3Ry ZWFtX3RydW5jYXRlOwogCiAJLyoKQEAgLTY1MCw2ICs2ODYsOSBAQCBleHRlcm4gdm9pZCBSZW9y ZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhp ZCwKIAkJCQkJCQkJCSAgU25hcHNob3Qgc25hcCwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJCQkg IGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCQkJICBTaXpl IG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBSZW9yZGVy QnVmZmVyUXVldWVERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwgWExv Z1JlY1B0ciBsc24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdl X3NpemUsCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIE9pZCByZWxpZCwgRGVwYXJz ZWRDb21tYW5kVHlwZSBjbWR0eXBlKTsKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJDb21taXQo UmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQlYTG9nUmVjUHRy IGNvbW1pdF9sc24sIFhMb2dSZWNQdHIgZW5kX2xzbiwKIAkJCQkJCQkJVGltZXN0YW1wVHogY29t bWl0X3RpbWUsIFJlcE9yaWdpbklkIG9yaWdpbl9pZCwgWExvZ1JlY1B0ciBvcmlnaW5fbHNuKTsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CmluZGV4IGE3ZjU3MDAuLmJmYzczYzIgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wc3FsLm91dApAQCAtNTk3MCw5ICs1OTcwLDkgQEAgTGlzdCBvZiBz Y2hlbWFzCiAoMCByb3dzKQogCiBcZFJwICJuby5zdWNoLnB1YmxpY2F0aW9uIgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSBOYW1lIHwgT3duZXIg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyBOYW1lIHwgT3duZXIgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCiAoMCByb3dzKQogCiBcZFJz ICJuby5zdWNoLnN1YnNjcmlwdGlvbiIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNh dGlvbi5vdXQKaW5kZXggNDI3Zjg3ZS4uMmI3Y2QwZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wdWJsaWNhdGlvbi5vdXQKQEAgLTMwLDIwICszMCwyMCBAQCBFUlJPUjogIGNvbmZsaWN0 aW5nIG9yIHJlZHVuZGFudCBvcHRpb25zCiBMSU5FIDE6IC4uLnViX3h4eCBXSVRIIChwdWJsaXNo X3ZpYV9wYXJ0aXRpb25fcm9vdCA9ICd0cnVlJywgcHVibGlzaF92aS4uLgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIFxkUnAK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1 YmxpY2F0aW9ucwotICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYKLSB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9m IHB1YmxpY2F0aW9ucworICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cGliX2luc190cnVuY3QgfCByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCisgdGVzdHB1Yl9kZWZhdWx0ICAgIHwg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDIgcm93cykKIAogQUxURVIg UFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFNFVCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0 ZSwgZGVsZXRlJyk7CiBcZFJwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAgTmFtZSAgICAgICAgfCAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgICAgTmFtZSAgICAgICAgfCAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHBp Yl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgorIHRl c3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYK ICgyIHJvd3MpCiAKIC0tLSBhZGRpbmcgdGFibGVzCkBAIC04NywxMCArODcsMTAgQEAgUkVTRVQg Y2xpZW50X21pbl9tZXNzYWdlczsKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGFkZCBzY2hlbWEgdG8g J0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFi bGUgQUREIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxl Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9y dGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFi bGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogVGFi bGVzIGZyb20gc2NoZW1hczoKQEAgLTk5LDIwICs5OSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFz OgogLS0gc2hvdWxkIGJlIGFibGUgdG8gZHJvcCBzY2hlbWEgZnJvbSAnRk9SIFRBQkxFJyBwdWJs aWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBEUk9QIFRBQkxFUyBJ TiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogCiAtLSBzaG91bGQgYmUgYWJs ZSB0byBzZXQgc2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViX2ZvcnRhYmxlIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRS cCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgInB1Yl90ZXN0IgogCkBAIC0xMjMsMTAgKzEyMywxMCBAQCBDUkVBVEUgUFVCTElDQVRJ T04gdGVzdHB1Yl9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBDUkVB VEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVN QSBwdWJfdGVzdCwgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogUkVTRVQgY2xpZW50X21p bl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfZm9yX3RibF9zY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKIFRhYmxlcyBmcm9t IHNjaGVtYXM6CkBAIC0xMzUsMTAgKzEzNSwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0g c2hvdWxkIGJlIGFibGUgdG8gYWRkIGEgdGFibGUgb2YgdGhlIHNhbWUgc2NoZW1hIHRvIHRoZSBz Y2hlbWEgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIEFE RCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2No ZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CkBAIC0xNDcsMTAgKzE0NywxMCBAQCBUYWJsZXMgZnJvbSBzY2hl bWFzOgogLS0gc2hvdWxkIGJlIGFibGUgdG8gZHJvcCB0aGUgdGFibGUKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZm9yc2NoZW1hIERST1AgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwog XGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAicHViX3Rlc3QiCiAKQEAgLTE2MSwxMCArMTYxLDEwIEBAIEVSUk9SOiAgcmVs YXRpb24gInRlc3RwdWJfbm9wayIgaXMgbm90IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCiAtLSBz aG91bGQgYmUgYWJsZSB0byBzZXQgdGFibGUgdG8gc2NoZW1hIHB1YmxpY2F0aW9uCiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBTRVQgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9u b3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgog ICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiAKQEAgLTE4NiwxMCArMTg2LDEwIEBAIFB1Ymxp Y2F0aW9uczoKICAgICAidGVzdHB1Yl9mb3JhbGx0YWJsZXMiCiAKIFxkUnArIHRlc3RwdWJfZm9y YWxsdGFibGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX2ZvcmFsbHRhYmxlcwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgdCAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9yYWxsdGFibGVzCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogRFJPUCBUQUJMRSB0ZXN0 cHViX3RibDI7CkBAIC0yMDEsMTkgKzIwMSwxOSBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1 YjMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNCBG T1IgVEFCTEUgT05MWSB0ZXN0cHViX3RibDM7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwog XGRScCsgdGVzdHB1YjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90Ymwz IgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzYSIKIAogXGRScCsgdGVzdHB1YjQKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0Ci0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgog VGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgogCkBAIC0yMzQsMTAgKzIzNCwxMCBA QCBVUERBVEUgdGVzdHB1Yl9wYXJ0ZWQxIFNFVCBhID0gMTsKIC0tIG9ubHkgcGFyZW50IGlzIGxp c3RlZCBhcyBiZWluZyBpbiBwdWJsaWNhdGlvbiwgbm90IHRoZSBwYXJ0aXRpb24KIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZm9ycGFydGVkIEFERCBUQUJMRSB0ZXN0cHViX3BhcnRlZDsKIFxk UnArIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVi bGljLnRlc3RwdWJfcGFydGVkIgogCkBAIC0yNTIsMTAgKzI1MiwxMCBAQCBBTFRFUiBUQUJMRSB0 ZXN0cHViX3BhcnRlZCBERVRBQ0ggUEFSVElUSU9OIHRlc3RwdWJfcGFydGVkMTsKIFVQREFURSB0 ZXN0cHViX3BhcnRlZDEgU0VUIGEgPSAxOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3Jw YXJ0ZWQgU0VUIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOwogXGRScCsgdGVz dHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9mb3JwYXJ0ZWQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IHQgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVz dHB1Yl9wYXJ0ZWQiCiAKQEAgLTI4NCwxMCArMjg0LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3Nh Z2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNSBGT1IgVEFCTEUgdGVz dHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3RibDIgV0hFUkUgKGMgPD4gJ3Rlc3QnIEFORCBkIDwg NSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7 CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3Jm X3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDIiIFdIRVJFICgoYyA8PiAndGVzdCc6 OnRleHQpIEFORCAoZCA8IDUpKQpAQCAtMzAwLDEwICszMDAsMTAgQEAgVGFibGVzOgogCiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViNSBBREQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChl ID4gMTAwMCBBTkQgZSA8IDIwMDApOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgog ICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90Ymwy IiBXSEVSRSAoKGMgPD4gJ3Rlc3QnOjp0ZXh0KSBBTkQgKGQgPCA1KSkKQEAgLTMxOSwxMCArMzE5 LDEwIEBAIFB1YmxpY2F0aW9uczoKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgRFJPUCBU QUJMRSB0ZXN0cHViX3JmX3RibDI7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAg ICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMi IFdIRVJFICgoZSA+IDEwMDApIEFORCAoZSA8IDIwMDApKQpAQCAtMzMwLDEwICszMzAsMTAgQEAg VGFibGVzOgogLS0gcmVtb3ZlIHRlc3RwdWJfcmZfdGJsMSBhbmQgYWRkIHRlc3RwdWJfcmZfdGJs MyBhZ2FpbiAoYW5vdGhlciBXSEVSRSBleHByZXNzaW9uKQogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA+IDMwMCBBTkQgZSA8IDUw MCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAg IHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHVi X3JmX3RibDMiIFdIRVJFICgoZSA+IDMwMCkgQU5EIChlIDwgNTAwKSkKIApAQCAtMzY2LDEwICsz NjYsMTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfc3ludGF4MSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCBPTkxZIHRl c3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA8IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsK IFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX3N5bnRheDEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgxCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgxCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAg ICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVi bGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKGUgPCA5OTkpCkBAIC0zNzksMTAgKzM3OSwxMCBA QCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04g dGVzdHB1Yl9zeW50YXgyIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfc2No ZW1hMS50ZXN0cHViX3JmX3RibDUgV0hFUkUgKGggPCA5OTkpIFdJVEggKHB1Ymxpc2ggPSAnaW5z ZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9zeW50YXgy Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3lu dGF4MgotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4 MgorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAg ICAgInRlc3RwdWJfcmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUiIFdIRVJFIChoIDwgOTk5KQpA QCAtNDk3LDEwICs0OTcsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IEZPUiBUQUJM RVMgSU4gU0NIRU1BIHRlc3RwdWJfcmZfc2NoZW1hMjsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWI2IFNFVCBUQUJMRVMgSU4gU0NIRU1BIHRlc3RwdWJfcmZfc2NoZW1hMiwgVEFCTEUgdGVzdHB1 Yl9yZl9zY2hlbWEyLnRlc3RwdWJfcmZfdGJsNiBXSEVSRSAoaSA8IDk5KTsKIFJFU0VUIGNsaWVu dF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViNgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjYKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNgorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInRl c3RwdWJfcmZfc2NoZW1hMi50ZXN0cHViX3JmX3RibDYiIFdIRVJFIChpIDwgOTkpCiBUYWJsZXMg ZnJvbSBzY2hlbWFzOgpAQCAtNzE0LDEwICs3MTQsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWJfdGFibGVfaW5zIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScpOwogUkVT RVQgY2xpZW50X21pbl9tZXNzYWdlczsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVf aW5zIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEpOwkJLS0gb2sKIFxkUnArIHRlc3RwdWJfdGFi bGVfaW5zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl90YWJsZV9pbnMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf dGFibGVfaW5zCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJs NSIgKGEpCiAKQEAgLTg5MSwxMCArODkxLDEwIEBAIENSRUFURSBUQUJMRSB0ZXN0cHViX3RibF9i b3RoX2ZpbHRlcnMgKGEgaW50LCBiIGludCwgYyBpbnQsIFBSSU1BUlkgS0VZIChhLGMpKTsKIEFM VEVSIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyBSRVBMSUNBIElERU5USVRZIFVTSU5H IElOREVYIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVyc19wa2V5OwogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1Yl9ib3RoX2ZpbHRlcnMgQUREIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyAo YSxjKSBXSEVSRSAoYyAhPSAxKTsKIFxkUnArIHRlc3RwdWJfYm90aF9maWx0ZXJzCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycwot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJzCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsX2JvdGhfZmlsdGVy cyIgKGEsIGMpIFdIRVJFIChjIDw+IDEpCiAKQEAgLTEwOTksMTAgKzEwOTksMTAgQEAgRVJST1I6 ICByZWxhdGlvbiAidGVzdHB1Yl90YmwxIiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlv biAidGVzdHB1Yl9mb3J0YmwKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRibCBGT1Ig VEFCTEUgdGVzdHB1Yl90YmwxOwogRVJST1I6ICBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0Ymwi IGFscmVhZHkgZXhpc3RzCiBcZFJwKyB0ZXN0cHViX2ZvcnRibAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YmwKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRibAorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJs ZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAgICAicHVibGljLnRlc3RwdWJfdGJs MSIKQEAgLTExNDAsMTAgKzExNDAsMTAgQEAgUHVibGljYXRpb25zOgogICAgICJ0ZXN0cHViX2Zv cnRibCIKIAogXGRScCsgdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAg ICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKQEAg LTEyMjEsMTAgKzEyMjEsMTAgQEAgUkVWT0tFIENSRUFURSBPTiBEQVRBQkFTRSByZWdyZXNzaW9u IEZST00gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIERST1AgVEFCTEUgdGVzdHB1Yl9wYXJ0 ZWQ7CiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMTsKIFxkUnArIHRlc3RwdWJfZGVmYXVsdAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYg ICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBmYWlsIC0gbXVzdCBiZSBvd25lciBvZiBwdWJsaWNh dGlvbgpAQCAtMTIzNCwyMCArMTIzNCwyMCBAQCBFUlJPUjogIG11c3QgYmUgb3duZXIgb2YgcHVi bGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CiBSRVNFVCBST0xFOwogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1Yl9kZWZhdWx0IFJFTkFNRSBUTyB0ZXN0cHViX2ZvbzsKIFxkUnAgdGVzdHB1Yl9mb28K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1Ymxp Y2F0aW9ucwotICAgIE5hbWUgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRl c3RwdWJfZm9vIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgIE5h bWUgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVz dHB1Yl9mb28gfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cp CiAKIC0tIHJlbmFtZSBiYWNrIHRvIGtlZXAgdGhlIHJlc3Qgc2ltcGxlCiBBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViX2ZvbyBSRU5BTUUgVE8gdGVzdHB1Yl9kZWZhdWx0OwogQUxURVIgUFVCTElD QVRJT04gdGVzdHB1Yl9kZWZhdWx0IE9XTkVSIFRPIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7 CiBcZFJwIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHB1Yl9kZWZhdWx0IHwgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyMiB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgIE5hbWUgICAgICAgfCAg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cHVi X2RlZmF1bHQgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93 KQogCiAtLSBhZGRpbmcgc2NoZW1hcyBhbmQgdGFibGVzCkBAIC0xMjYzLDE5ICsxMjYzLDE5IEBA IENSRUFURSBUQUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSIoaWQgaW50KTsK IFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViMV9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsg dGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFz OgogICAgICJwdWJfdGVzdDEiCiAKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMl9mb3JzY2hl bWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDIsIHB1Yl90ZXN0MzsK IFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMjg5LDQ0ICsx Mjg5LDQ0IEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNl9mb3JzY2hlbWEgRk9SIFRBQkxF UyBJTiBTQ0hFTUEgIkNVUlJFTlRfU0NIRU1BIiwgQ1VSCiBDUkVBVEUgUFVCTElDQVRJT04gdGVz dHB1Yl9mb3J0YWJsZSBGT1IgVEFCTEUgIkNVUlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hFTUEi OwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNj aGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hl bWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHVibGljIgogCiBc ZFJwKyB0ZXN0cHViNF9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViNF9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjRfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogCiBcZFJwKyB0ZXN0cHViNV9mb3JzY2hlbWEK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9mb3Jz Y2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjVfZm9yc2No ZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NI RU1BIgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWI2X2ZvcnNjaGVtYQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNl9mb3JzY2hlbWEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAgICAg InB1YmxpYyIKIAogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl czoKICAgICAiQ1VSUkVOVF9TQ0hFTUEuQ1VSUkVOVF9TQ0hFTUEiCiAKQEAgLTEzNjAsMTAgKzEz NjAsMTAgQEAgRVJST1I6ICBzY2hlbWEgInRlc3RwdWJfdmlldyIgZG9lcyBub3QgZXhpc3QKIC0t IGRyb3BwaW5nIHRoZSBzY2hlbWEgc2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJsaWNh dGlvbgogRFJPUCBTQ0hFTUEgcHViX3Rlc3QzOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2No ZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAg ICAgInB1Yl90ZXN0MiIKQEAgLTEzNzEsMjAgKzEzNzEsMjAgQEAgVGFibGVzIGZyb20gc2NoZW1h czoKIC0tIHJlbmFtaW5nIHRoZSBzY2hlbWEgc2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBw dWJsaWNhdGlvbgogQUxURVIgU0NIRU1BIHB1Yl90ZXN0MSBSRU5BTUUgdG8gcHViX3Rlc3QxX3Jl bmFtZWQ7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MV9yZW5hbWVkIgogICAgICJwdWJfdGVzdDIi CiAKIEFMVEVSIFNDSEVNQSBwdWJfdGVzdDFfcmVuYW1lZCBSRU5BTUUgdG8gcHViX3Rlc3QxOwog XGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBz Y2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzOTIsMTAgKzEz OTIsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIGFsdGVyIHB1YmxpY2F0aW9uIGFkZCBz Y2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgVEFCTEVTIElO IFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAg ICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rl c3QyIgpAQCAtMTQwNCwxMCArMTQwNCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIg UFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9l eGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9l cyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgog VGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBA IC0xNDE2LDEwICsxNDE2LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwog RVJST1I6ICBzY2hlbWEgInB1Yl90ZXN0MSIgaXMgYWxyZWFkeSBtZW1iZXIgb2YgcHVibGljYXRp b24gInRlc3RwdWIxX2ZvcnNjaGVtYSIKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYg ICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJw dWJfdGVzdDIiCkBAIC0xNDI3LDEwICsxNDI3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAt LSBhbHRlciBwdWJsaWNhdGlvbiBkcm9wIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0 cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAg ICAgInB1Yl90ZXN0MSIKIApAQCAtMTQzOCwxMCArMTQzOCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hl bWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElO IFNDSEVNQSBwdWJfdGVzdDI7CiBFUlJPUjogIHRhYmxlcyBmcm9tIHNjaGVtYSAicHViX3Rlc3Qy IiBhcmUgbm90IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hl bWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9m b3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9y c2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0 MSIKIApAQCAtMTQ0OSwyOSArMTQ0OSwyOSBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIg UFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBub25f ZXhpc3RlbnRfc2NoZW1hOwogRVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRv ZXMgbm90IGV4aXN0CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogLS0gZHJvcCBhbGwgc2No ZW1hcwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElO IFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAg ICB8IGYKICgxIHJvdykKIAogLS0gYWx0ZXIgcHVibGljYXRpb24gc2V0IG11bHRpcGxlIHNjaGVt YQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NI RU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QyOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAg InB1Yl90ZXN0MiIKQEAgLTE0ODAsMTAgKzE0ODAsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoK IEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVN QSBub25fZXhpc3RlbnRfc2NoZW1hOwogRVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hl bWEiIGRvZXMgbm90IGV4aXN0CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAg ICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rl c3QyIgpAQCAtMTQ5MiwxMCArMTQ5MiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVt b3ZpbmcgdGhlIGR1cGxpY2F0ZSBzY2hlbWFzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9m b3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDE7CiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTU3NCwxOCArMTU3NCwxOCBAQCBTRVQgY2xpZW50 X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjNfZm9y c2NoZW1hOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzX2ZvcnNj aGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIz X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19m b3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViM19mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVz dHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgog ICAgICJwdWJfdGVzdDEiCiAKQEAgLTE1OTUsMjAgKzE1OTUsMjAgQEAgQ1JFQVRFIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90 ZXN0MSwgVEEKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYSBG T1IgVEFCTEUgcHViX3Rlc3QyLnRibDEsIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogUkVT RVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxl Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVt YV9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2No ZW1hX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QyLnRibDEi CiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKIFxkUnArIHRlc3RwdWJf Zm9ydGFibGVfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHViX3Rlc3QyLnRibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgotLSAKMS44LjMuMQoK --00000000000078f73c05ebc6f2db Content-Type: application/octet-stream; name="v31-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v31-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l9mra1zq0 RnJvbSBlMzIzOTU4NTlkMWQwMmY2MTRlNzczMTBiY2EzNzYyNzQ3YWZlNTA1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjAgT2N0IDIwMjIgMDA6MDg6NTAgLTA0MDAKU3ViamVjdDogW1BBVENI IHYzMSAxLzRdIEZ1bmN0aW9ucyB0byBkZXBhcnNlIERETCBjb21tYW5kcy4KClRoaXMgcGF0Y2gg cHJvdmlkZXMgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4K bGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQg c3ByaW50Zi1saWtlCmV4cGFuc2lvbi4gVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0 byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCnRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5n IGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgoKTXVjaCBvZiB0aGUgaW5mb3JtYXRp b24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCmNhdGFsb2dz LCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRv IHJlbGlhYmx5CmNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBu b3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCmV0YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJz ZSBub2RlLgoKVGhpcyBwcm92aWRlcyBhIGJhc2UgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gb2Yg RERMIHN0YXRlbWVudHMuIEN1cnJlbnRseSwKdGhlIHBhdGNoIGhhcyBzdXBwb3J0IGZvcjoKCkNS RUFURS9BTFRFUi9EUk9QIFRBQkxFIC0tIE5vdGUgIzEsIE5vdGUgIzIKQ1JFQVRFL0FMVEVSL0RS T1AgU0VRVUVOQ0UKQ1JFQVRFL0FMVEVSL0RST1AgU0NIRU1BCkNSRUFURS9BTFRFUiBGVU5DVElP Ti9QUk9DRURVUkUKQ1JFQVRFL0FMVEVSIFRSSUdHRVIKQ1JFQVRFL0RST1AgSU5ERVgKQ1JFQVRF L0RST1AgT1BFUkFUT1IgW0NMQVNTL0ZBTUlMWV0KQ1JFQVRFL0FMVEVSL0RST1AgQ0FTVApDUkVB VEUvQUxURVIvRFJPUCBET01BSU4KQ1JFQVRFL0FMVEVSL0RST1AgVFlQRQpDUkVBVEUvQUxURVIv RFJPUCBDT05WRVJTSU9OCkNSRUFURS9BTFRFUi9EUk9QIFBPTElDWQpDUkVBVEUvQUxURVIvRFJP UCBFWFRFTlNJT04KQ1JFQVRFL0FMVEVSL0RST1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIKQ1JFQVRF L0FMVEVSL0RST1AgUlVMRQpDUkVBVEUvQUxURVIvRFJPUCBTRVJWRVIKQ1JFQVRFL0FMVEVSL0RS T1AgQ09MTEFUSU9OCkdSQU5UClJFVk9LRQpSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXCkNSRUFU RS9BTFRFUi9EUk9QIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04vUEFSU0VSL0RJQ1RJT05BUlkv VEVNUExBVEUKQ1JFQVRFL0RST1AgVFJBTlNGT1JNCkNSRUFURS9BTFRFUi9EUk9QIFVTRVIgTUFQ UElORwpDUkVBVEUvQUxURVIvRFJPUCBWSUVXIC0tIE5vdGUgIzQKQ1JFQVRFL0FMVEVSL0RST1Ag TUFURVJJQUxJWkVEIFZJRVcKQ1JFQVRFL0FMVEVSL0RST1AgU1RBVElTVElDUwpDUkVBVEUvQUxU RVIvRFJPUCBMQU5HVUFHRQoKKE5vdGUgIzEpIE5vdGUgdGhhdCBzb21lIHJlY2VudGx5IGludHJv ZHVjZWQgRERMcyhlLmcuIERETHMgcmVsYXRlZCB0bwpQQVJUSVRJT05FRCBUQUJMRSkgYXJlIHVu c3VwcG9ydGVkLiBXZSBjYW4gZXh0ZW5kIGl0IGFzIHdlIG5lZWQgbW9yZQpmdW5jdGlvbmFsaXR5 IGZvciBEREwgcmVwbGljYXRpb24uCgooTm90ZSAjMikgTm90ZSB0aGF0LCBmb3IgQVRUQUNIL0RF VEFDSCBQQVJUSVRJT04sIHdlIGhhdmVuJ3QgYWRkZWQgZXh0cmEgbG9naWMgb24KdGhlIHN1YnNj cmliZXIgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSB0YWJsZSBvbiB0aGUgcHVibGlzaGVy IGlzIGEgUEFSVElUSU9ORUQKVEFCTEUgd2hpbGUgdGhlIHRhcmdldCB0YWJsZSBvbiB0aGUgc3Vi Y3JpYmVyIHNpZGUgaXMgYSBOT1JNQUwgdGFibGUuIFdlIHdpbGwKcmVzZWFyY2ggdGhpcyBtb3Jl IGFuZCBpbXByb3ZlIGl0IGxhdGVyLgoKKE5vdGUgIzMpIFJlbW92ZWQgYW4gdW5kZXNpcmFibGUg J29uJyBmcm9tIHRoZSBpZGVudGl0eSBzdHJpbmcgZm9yIFRSQU5TRk9STQppbiBnZXRPYmplY3RJ ZGVudGl0eVBhcnRzLiBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIGRlcGFyc2Ugb2YgRFJPUApUUkFO U0ZPUk0gY29tbWFuZCB3b3JrIHNpbmNlICdvbicgaXMgbm90IHByZXNlbnQgaW4gdGhlIGN1cnJl bnQKRFJPUCBUUkFOU0ZPUk0gc3ludGF4LiBGb3IgZXhhbXBsZSwgdGhlIGNvcnJlY3Qgc3ludGF4 IGlzCmRyb3AgdHJhbnNmb3JtIHRyZiBmb3IgaW50IGxhbmd1YWdlIHNxbDsKaW5zdGVhZCBvZgpk cm9wIHRyYW5zZm9ybSB0cmYgZm9yIGludCBvbiBsYW5ndWFnZSBzcWw7CgooTm90ZSAjNCkgTm90 ZSB0aGF0LCBmb3IgVklFV1NUTVQsIFdlIGNyZWF0ZWQgcGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwg dG8gZ2V0IHRoZQpTRUxFQ1QgcXVlcnkgb2YgdGhlIHBlbmRpbmcgVklFV1NUTVQuIEluIHRoZSBj YXNlIHRoYXQgdGhlIENSRUFURSBWSUVXIGNvbW1hbmQKaXMgc3RpbGwgaW4gcHJvZ3Jlc3MsIHdl IHdvdWxkIG5lZWQgdG8gc2VhcmNoIHRoZSBzeXN0ZW0gY2FjaGUgUlVMRVJFTE5BTUUgdG8gZ2V0 IHRoZQpyZXdyaXRlIHJ1bGUgb2YgdGhlIHZpZXcgYXMgb3Bwb3NlIHRvIHF1ZXJ5aW5nIHBnX3Jl d3JpdGUgYXMgaW4gcGdfZ2V0X3ZpZXdkZWZfd29ya2VyKCksCnRoZSBsYXR0ZXIgd2lsbCByZXR1 cm4gZW1wdHkgcmVzdWx0LgotLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMgICAgICAg ICAgICAgICAgIHwgICAgNCArCiBzcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYyAg ICAgICAgICB8ICAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlICAgICAgICAg ICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMgICAg ICAgICB8ICAgIDkgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgICAgICAg ICAgIHwgODkyMSArKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFu ZHMvZGRsX2pzb24uYyAgICAgICAgICAgICAgfCAgNzY0ICsrKwogc3JjL2JhY2tlbmQvY29tbWFu ZHMvbWVzb24uYnVpbGQgICAgICAgICAgICAgfCAgICAyICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRz L3NlcXVlbmNlLmMgICAgICAgICAgICAgIHwgICAzMyArCiBzcmMvYmFja2VuZC90Y29wL3V0aWxp dHkuYyAgICAgICAgICAgICAgICAgICB8ICAgIDMgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9m b3JtYXRfdHlwZS5jICAgICAgICAgIHwgICAgMyArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Jl Z3Byb2MuYyAgICAgICAgICAgICAgfCAgIDUyICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxl dXRpbHMuYyAgICAgICAgICAgIHwgIDI1MiArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdCAgICAgICAgICAgICAgfCAgICA2ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlv bmNtZHMuaCAgICAgICAgIHwgICAgMyArLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2Uu aCAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCAg ICAgICAgICAgICAgIHwgICAyMyArCiBzcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5o ICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvYWNsY2hrX2ludGVybmFsLmgg ICAgICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmggICAgICAgICAg ICAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaCAgICAgICAgICAg ICAgICB8ICAgMTkgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3RfYWRkcmVzcy5v dXQgfCAgICAyICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAg ICB8ICAgIDQgKwogMjIgZmlsZXMgY2hhbmdlZCwgMTAwMzQgaW5zZXJ0aW9ucygrKSwgNzUgZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2Rl cGFyc2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29u LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jIGIvc3JjL2JhY2tlbmQvY2F0 YWxvZy9hY2xjaGsuYwppbmRleCBhYTVhMmVkLi43ZGMxOTBkIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jYXRhbG9nL2FjbGNoay5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMK QEAgLTM4NSw3ICszODUsMTEgQEAgRXhlY3V0ZUdyYW50U3RtdChHcmFudFN0bXQgKnN0bXQpCiAJ CQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBP UlRFRCksCiAJCQkJCSBlcnJtc2coImdyYW50b3IgbXVzdCBiZSBjdXJyZW50IHVzZXIiKSkpOwor CisJCWlzdG10LmdyYW50b3JfdWlkID0gZ3JhbnRvcjsKIAl9CisJZWxzZQorCQlpc3RtdC5ncmFu dG9yX3VpZCA9IEludmFsaWRPaWQ7CiAKIAkvKgogCSAqIFR1cm4gdGhlIHJlZ3VsYXIgR3JhbnRT dG10IGludG8gdGhlIEludGVybmFsR3JhbnQgZm9ybS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRy ZXNzLmMKaW5kZXggMjg0Y2E1NS4uMDg0YWNlYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9vYmplY3RhZGRyZXNzLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRy ZXNzLmMKQEAgLTYwMDEsNyArNjAwMSw3IEBAIGdldE9iamVjdElkZW50aXR5UGFydHMoY29uc3Qg T2JqZWN0QWRkcmVzcyAqb2JqZWN0LAogCQkJCXRyYW5zZm9ybVR5cGUgPSBmb3JtYXRfdHlwZV9i ZV9xdWFsaWZpZWQodHJhbnNmb3JtLT50cmZ0eXBlKTsKIAkJCQl0cmFuc2Zvcm1MYW5nID0gZ2V0 X2xhbmd1YWdlX25hbWUodHJhbnNmb3JtLT50cmZsYW5nLCBmYWxzZSk7CiAKLQkJCQlhcHBlbmRT dHJpbmdJbmZvKCZidWZmZXIsICJmb3IgJXMgb24gbGFuZ3VhZ2UgJXMiLAorCQkJCWFwcGVuZFN0 cmluZ0luZm8oJmJ1ZmZlciwgImZvciAlcyBsYW5ndWFnZSAlcyIsCiAJCQkJCQkJCSB0cmFuc2Zv cm1UeXBlLAogCQkJCQkJCQkgdHJhbnNmb3JtTGFuZyk7CiAJCQkJaWYgKG9iam5hbWUpCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL01ha2VmaWxlCmluZGV4IDQ4ZjczNDguLjE3MWRmYjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxl CkBAIC0yOSw2ICsyOSw4IEBAIE9CSlMgPSBcCiAJY29weXRvLm8gXAogCWNyZWF0ZWFzLm8gXAog CWRiY29tbWFuZHMubyBcCisJZGRsX2RlcGFyc2UubyBcCisJZGRsX2pzb24ubyBcCiAJZGVmaW5l Lm8gXAogCWRpc2NhcmQubyBcCiAJZHJvcGNtZHMubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRp b25jbWRzLmMKaW5kZXggZmNmYzAyZC4uYmIyMWNjZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29sbGF0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxh dGlvbmNtZHMuYwpAQCAtNTAsNyArNTAsOCBAQCB0eXBlZGVmIHN0cnVjdAogICogQ1JFQVRFIENP TExBVElPTgogICovCiBPYmplY3RBZGRyZXNzCi1EZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAq cHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywgYm9vbCBpZl9ub3RfZXhpc3Rz KQorRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3Qg KnBhcmFtZXRlcnMsCisJCQkJIGJvb2wgaWZfbm90X2V4aXN0cywgT2JqZWN0QWRkcmVzcyAqZnJv bV9jb2xsaWQpCiB7CiAJY2hhcgkgICAqY29sbE5hbWU7CiAJT2lkCQkJY29sbE5hbWVzcGFjZTsK QEAgLTEzNyw2ICsxMzgsMTIgQEAgRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwg TGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZfbm90X2UKIAkJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHRwKSkKIAkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBjb2xsYXRpb24gJXUiLCBjb2xsaWQpOwogCisJCS8qIG1ha2UgZnJvbSBleGlzdGluZyBjb2xs YXRpb25pZCBhdmFpbGFibGUgdG8gY2FsbGVycyAqLworCQlpZiAoZnJvbV9jb2xsaWQgJiYgT2lk SXNWYWxpZChjb2xsaWQpKQorCQkJCU9iamVjdEFkZHJlc3NTZXQoKmZyb21fY29sbGlkLAorCQkJ CQkJCQkgQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJIGNvbGxpZCk7CisKIAkJY29sbHBy b3ZpZGVyID0gKChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKHRwKSktPmNvbGxwcm92aWRl cjsKIAkJY29sbGlzZGV0ZXJtaW5pc3RpYyA9ICgoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVD VCh0cCkpLT5jb2xsaXNkZXRlcm1pbmlzdGljOwogCQljb2xsZW5jb2RpbmcgPSAoKEZvcm1fcGdf Y29sbGF0aW9uKSBHRVRTVFJVQ1QodHApKS0+Y29sbGVuY29kaW5nOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9kZXBhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjU0OWEwOAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKQEAg LTAsMCArMSw4OTIxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJzZS5j CisgKgkgIEZ1bmN0aW9ucyB0byBjb252ZXJ0IHV0aWxpdHkgY29tbWFuZHMgdG8gbWFjaGluZS1w YXJzZWFibGUKKyAqCSAgcmVwcmVzZW50YXRpb24KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCisgKgorICogTk9URVMKKyAqCisgKiBUaGlzIGlzIGludGVuZGVkIHRvIHByb3Zp ZGUgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4KKyAqIGxh dGVyIGJlIHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmluZ3MgYnkgd2VsbC1kZWZpbmVkIHNw cmludGYtbGlrZQorICogZXhwYW5zaW9uLiAgVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRl ZCB0byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCisgKiB0aGUgY29tbWFuZHMsIGJ5IHJl cGxhY2luZyBjZXJ0YWluIG5vZGVzIHdpdGhpbiB0aGUgb2JqZWN0cy4KKyAqCisgKiBNdWNoIG9m IHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBz eXN0ZW0KKyAqIGNhdGFsb2dzLCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBp dCBpcyBpbXBvc3NpYmxlIHRvIHJlbGlhYmx5CisgKiBjb25zdHJ1Y3QgYSBmdWxseS1zcGVjaWZp ZWQgY29tbWFuZCAoaS5lLiBvbmUgbm90IGRlcGVuZGVudCBvbiBzZWFyY2hfcGF0aAorICogZXRj KSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5vZGUuCisgKgorICogSURFTlRJRklDQVRJT04K KyAqCSAgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9k ZXBhcnNlLmgiCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL3Rh YmxlLmgiCisjaW5jbHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9u YW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19hdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2F1dGhpZC5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfY2FzdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29u c3RyYWludC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udmVyc2lvbi5oIgorI2luY2x1ZGUg ImNhdGFsb2cvcGdfZGVwZW5kLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19leHRlbnNpb24uaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19mb3JlaWduX3NlcnZlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJp dHMuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19sYXJnZW9iamVjdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVy YXRvci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BmYW1pbHkuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX3BvbGljeS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgorI2luY2x1ZGUg ImNhdGFsb2cvcGdfcmFuZ2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Jld3JpdGUuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0 aXN0aWNfZXh0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190cmFuc2Zvcm0uaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX3RzX2NvbmZpZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfZGljdC5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfcGFyc2VyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z190c190ZW1wbGF0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUg ImNhdGFsb2cvcGdfdXNlcl9tYXBwaW5nLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgi CisjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy90YWJs ZXNwYWNlLmgiCisjaW5jbHVkZSAiZm9yZWlnbi9mb3JlaWduLmgiCisjaW5jbHVkZSAiZnVuY2Fw aS5oIgorI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCisj aW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgi CisjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9vcHRp bWl6ZXIuaCIKKyNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCisjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgorI2luY2x1ZGUg InV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisjaW5jbHVkZSAidXRpbHMv bHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGls cy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9ydWxldXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9z eXNjYWNoZS5oIgorCisvKiBFc3RpbWF0ZWQgbGVuZ3RoIG9mIHRoZSBnZW5lcmF0ZWQganNvbmIg c3RyaW5nICovCisjZGVmaW5lIEpTT05CX0VTVElNQVRFRF9MRU4gMTI4CisKKy8qCisgKiBCZWZv cmUgdGhleSBhcmUgdHVybmVkIGludG8gSlNPTkIgcmVwcmVzZW50YXRpb24sIGVhY2ggY29tbWFu ZCBpcworICogcmVwcmVzZW50ZWQgYXMgYW4gb2JqZWN0IHRyZWUsIHVzaW5nIHRoZSBzdHJ1Y3Rz IGJlbG93LgorICovCit0eXBlZGVmIGVudW0KK3sKKwlPYmpUeXBlTnVsbCwKKwlPYmpUeXBlQm9v bCwKKwlPYmpUeXBlU3RyaW5nLAorCU9ialR5cGVBcnJheSwKKwlPYmpUeXBlSW50ZWdlciwKKwlP YmpUeXBlRmxvYXQsCisJT2JqVHlwZU9iamVjdAorfSBPYmpUeXBlOworCisvKgorICogUmVwcmVz ZW50IHRoZSBjb21tYW5kIGFzIGFuIG9iamVjdCB0cmVlLgorICovCit0eXBlZGVmIHN0cnVjdCBP YmpUcmVlCit7CisJc2xpc3RfaGVhZAlwYXJhbXM7CQkJLyogT2JqZWN0IHRyZWUgcGFyYW1ldGVy cyAqLworCWludAkJCW51bVBhcmFtczsJCS8qIE51bWJlciBvZiBwYXJhbWV0ZXJzIGluIHRoZSBv YmplY3QgdHJlZSAqLworCVN0cmluZ0luZm8JZm10aW5mbzsJCS8qIEZvcm1hdCBzdHJpbmcgb2Yg dGhlIE9ialRyZWUgKi8KKwlib29sCQlwcmVzZW50OwkJLyogSW5kaWNhdGVzIGlmIGJvb2xlYW4g dmFsdWUgc2hvdWxkIGJlIHN0b3JlZCAqLworfSBPYmpUcmVlOworCisvKgorICogQW4gZWxlbWVu dCBvZiBhbiBvYmplY3QgdHJlZShPYmpUcmVlKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgT2JqRWxl bQoreworCWNoYXIJICAgKm5hbWU7CQkJLyogTmFtZSBvZiBvYmplY3QgZWxlbWVudCAqLworCU9i alR5cGUJCW9ianR5cGU7CQkvKiBPYmplY3QgdHlwZSAqLworCisJdW5pb24KKwl7CisJCWJvb2wJ CWJvb2xlYW47CisJCWNoYXIJICAgKnN0cmluZzsKKwkJaW50NjQJCWludGVnZXI7CisJCWZsb2F0 OAkJZmx0OworCQlPYmpUcmVlICAgICpvYmplY3Q7CisJCUxpc3QJICAgKmFycmF5OworCX0JCQl2 YWx1ZTsJCQkvKiBTdG9yZSB0aGUgb2JqZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBvYmplY3QKKwkJ CQkJCQkJICogdHlwZSAqLworCXNsaXN0X25vZGUJbm9kZTsJCQkvKiBVc2VkIGluIGNvbnZlcnRp bmcgYmFjayB0byBPYmpFbGVtCisJCQkJCQkJCSAqIHN0cnVjdHVyZSAqLworfSBPYmpFbGVtOwor CisvKgorICogUmVkdWNlIHNvbWUgdW5uY2Vzc2FyeSBzdHJpbmcgZnJvbSB0aGUgb3V0cHV0IGpz b24gc3R1ZmYgd2hlbiB2ZXJib3NlCisgKiBhbmQgInByZXNlbnQiIG1lbWJlciBpcyBmYWxzZS4g VGhpcyBtZWFucyB0aGVzZSBzdHJpbmdzIHdvbid0IGJlIG1lcmdlZCBpbnRvCisgKiB0aGUgbGFz dCBEREwgY29tbWFuZC4KKyAqLworYm9vbAkJdmVyYm9zZSA9IHRydWU7CisKK3N0YXRpYyB2b2lk IGFwcGVuZF9hcnJheV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgTGlzdCAqYXJy YXkpOworc3RhdGljIHZvaWQgYXBwZW5kX2Jvb2xfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIg Km5hbWUsIGJvb2wgdmFsdWUpOworc3RhdGljIHZvaWQgYXBwZW5kX2Zsb2F0X29iamVjdChPYmpU cmVlICp0cmVlLCBjaGFyICpuYW1lLCBmbG9hdDggdmFsdWUpOworc3RhdGljIHZvaWQgYXBwZW5k X251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUpOworc3RhdGljIHZvaWQgYXBw ZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgT2JqVHJlZSAqdmFs dWUpOworc3RhdGljIGNoYXIgKmFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyhPYmpUcmVl ICp0cmVlLCBjaGFyICpzdWJfZm10KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9wcmVtYWRlX29iamVj dChPYmpUcmVlICp0cmVlLCBPYmpFbGVtICplbGVtKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdHJp bmdfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKTsKK3N0YXRp YyB2b2lkIGZvcm1hdF90eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwK KwkJCQkJCQkJIE9pZCAqbnNwaWQsIGNoYXIgKip0eXBuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwK KwkJCQkJCQkJIGJvb2wgKnR5cGFycmF5KTsKK3N0YXRpYyBMaXN0ICpGdW5jdGlvbkdldERlZmF1 bHRzKHRleHQgKnByb2FyZ2RlZmF1bHRzKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfb2JqZWN0KE9i alR5cGUgdHlwZSwgY2hhciAqbmFtZSk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0SWQpOworc3RhdGljIE9ialRyZWUg Km5ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhSb2xlU3BlYyAqc3BlYyk7CitzdGF0aWMgT2JqRWxl bSAqbmV3X29iamVjdF9vYmplY3QoT2JqVHJlZSAqdmFsdWUpOworc3RhdGljIE9ialRyZWUgKm5l d19vYmp0cmVlX1ZBKGNoYXIgKmZtdCwgaW50IG51bW9ianMsLi4uKTsKK3N0YXRpYyBPYmpFbGVt ICpuZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1ZSk7CitzdGF0aWMgSnNvbmJWYWx1ZSAqb2Jq dHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSk7 CitzdGF0aWMgdm9pZCBwZ19nZXRfaW5kZXhkZWZfZGV0YWlsZWQoT2lkIGluZGV4cmVsaWQsCisJ CQkJCQkJCQkgY2hhciAqKmluZGV4X2FtLAorCQkJCQkJCQkJIGNoYXIgKipkZWZpbml0aW9uLAor CQkJCQkJCQkJIGNoYXIgKipyZWxvcHRpb25zLAorCQkJCQkJCQkJIGNoYXIgKip0YWJsZXNwYWNl LAorCQkJCQkJCQkJIGNoYXIgKip3aGVyZUNsYXVzZSk7CitzdGF0aWMgY2hhciAqUmVsYXRpb25H ZXRDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRubywKKwkJCQkJCQkJ CSAgTGlzdCAqZHBjb250ZXh0LCBMaXN0ICoqZXhwcnMpOworc3RhdGljIGNvbnN0IGNoYXIgKnN0 cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSk7CisKK3N0YXRpYyBPYmpUcmVlICpk ZXBhcnNlX0NvbHVtbkRlZihSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBib29s IGNvbXBvc2l0ZSwKKwkJCQkJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRlciwg TGlzdCAqKmV4cHJzKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtbklkZW50aXR5KE9p ZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgT2Jq VHJlZSAqZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCk7Citz dGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X0NvbGxhdGlvbihPaWQgb2JqZWN0SWQs IERlZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJCQkJCQkJIE9iamVjdEFkZHJlc3MgZnJvbUNvbGxp ZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmpl Y3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmlu ZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2Jq VHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKE9pZCBvYmplY3RJZCwgRGVmaW5lU3Rt dCAqZGVmaW5lLCBPYmplY3RBZGRyZXNzIGNvcGllZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJz ZV9EZWZpbmVTdG10X1RTUGFyc2VyKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsK K3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNEaWN0aW9uYXJ5KE9pZCBvYmpl Y3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmlu ZVN0bXRfVFNUZW1wbGF0ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CisKK3N0 YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNl dCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9GdW5jdGlvblNldChWYXJpYWJsZVNldEtpbmQg a2luZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2Vf T25Db21taXRDbGF1c2UoT25Db21taXRBY3Rpb24gb3B0aW9uKTsKK3N0YXRpYyBPYmpUcmVlICpk ZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKKworc3RhdGljIGlu bGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DYWNoZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf c2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKmRlcGFyc2VfU2VxX0N5Y2xlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBz ZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJz ZV9TZXFfSW5jcmVtZW50QnkoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRh dGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1Nl cV9NaW52YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9v bCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX01heHZh bHVlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVy X3RhYmxlKTsKK3N0YXRpYyBPYmpFbGVtICpkZXBhcnNlX1NlcV9Pd25lZEJ5KE9ialRyZWUgKnBh cmVudCwgT2lkIHNlcXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBP YmpFbGVtICpkZXBhcnNlX1NlcV9SZXN0YXJ0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1 ZW5jZV9kYXRhIHNlcWRhdGEpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9T dGFydHdpdGgoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wg YWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfU3RvcmFn ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqZGVwYXJzZV9UeXBlX1JlY2VpdmUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5 cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9TZW5kKE9i alRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpF bGVtICpkZXBhcnNlX1R5cGVfVHlwbW9kX0luKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBl IHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfVHlwbW9kX091 dChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqZGVwYXJzZV9UeXBlX0FuYWx5emUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5 cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9TdWJzY3Jp cHQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CisKK3N0YXRpYyBMaXN0 ICpkZXBhcnNlX0luaFJlbGF0aW9ucyhPaWQgb2JqZWN0SWQpOworc3RhdGljIExpc3QgKmRlcGFy c2VfVGFibGVFbGVtZW50cyhSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqdGFibGVFbGVtZW50cywg TGlzdCAqZHBjb250ZXh0LAorCQkJCQkJCQkgICBib29sIHR5cGVkLCBib29sIGNvbXBvc2l0ZSk7 CisKKy8qCisgKiBBZGQgY29tbW9uIGNsYXVzZXMgdG8gQ3JlYXRlUG9saWN5IG9yIEFsdGVyUG9s aWN5IGRlcGFyc2Ugb2JqZWN0cworICovCitzdGF0aWMgdm9pZAorYWRkX3BvbGljeV9jbGF1c2Vz KE9ialRyZWUgKnBvbGljeVN0bXQsIE9pZCBwb2xpY3lPaWQsIExpc3QgKnJvbGVzLAorCQkJCSAg IGJvb2wgZG9fcXVhbCwgYm9vbCBkb193aXRoX2NoZWNrKQoreworCVJlbGF0aW9uCXBvbFJlbCA9 IHRhYmxlX29wZW4oUG9saWN5UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlIZWFwVHVw bGUJcG9sVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwb2xSZWwsIEFudW1fcGdfcG9s aWN5X29pZCwgcG9saWN5T2lkKTsKKwlGb3JtX3BnX3BvbGljeSBwb2xGb3JtOworCisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHBvbFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciBwb2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCisJcG9sRm9ybSA9IChGb3JtX3BnX3Bv bGljeSkgR0VUU1RSVUNUKHBvbFR1cCk7CisKKwkvKiBhZGQgdGhlICJPTiB0YWJsZSIgY2xhdXNl ICovCisJYXBwZW5kX29iamVjdF9vYmplY3QocG9saWN5U3RtdCwgIk9OICV7dGFibGV9RCIsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkgcG9sRm9ybS0+cG9scmVsaWQpKTsKKworCS8qCisJICogQWRkIHRoZSAiVE8g cm9sZSIgY2xhdXNlLCBpZiBhbnkuICBJbiB0aGUgQ1JFQVRFIGNhc2UsIGl0IGFsd2F5cworCSAq IGNvbnRhaW5zIGF0IGxlYXN0IFBVQkxJQywgYnV0IGluIHRoZSBBTFRFUiBjYXNlIGl0IG1pZ2h0 IGJlIGVtcHR5LgorCSAqLworCWlmIChyb2xlcykKKwl7CisJCUxpc3QJICAgKmxpc3QgPSBOSUw7 CisJCUxpc3RDZWxsICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCByb2xlcykKKwkJeworCQkJ Um9sZVNwZWMgICAqc3BlYyA9IChSb2xlU3BlYyAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsCisJCQkJCQkgICBuZXdfb2JqZWN0X29iamVjdChuZXdfb2JqdHJlZV9m b3Jfcm9sZXNwZWMoc3BlYykpKTsKKwkJfQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHBvbGljeVN0 bXQsICJUTyAle3JvbGU6LCB9UiIsIGxpc3QpOworCX0KKwllbHNlCisJeworCQlhcHBlbmRfYm9v bF9vYmplY3QocG9saWN5U3RtdCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCisJLyogYWRkIHRo ZSBVU0lORyBjbGF1c2UsIGlmIGFueSAqLworCWlmIChkb19xdWFsKQorCXsKKwkJRGF0dW0JCWRl cGFyc2VkOworCQlEYXR1bQkJc3RvcmVkZXhwcjsKKwkJYm9vbAkJaXNudWxsOworCisJCXN0b3Jl ZGV4cHIgPSBoZWFwX2dldGF0dHIocG9sVHVwLCBBbnVtX3BnX3BvbGljeV9wb2xxdWFsLAorCQkJ CQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocG9sUmVsKSwgJmlzbnVsbCk7CisJCWlmIChpc251bGwp CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxMIHBvbHF1YWwgZXhwcmVzc2lvbiBpbiBwb2xp Y3kgJXUiLCBwb2xpY3lPaWQpOworCQlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdf Z2V0X2V4cHIsIHN0b3JlZGV4cHIsIHBvbEZvcm0tPnBvbHJlbGlkKTsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QocG9saWN5U3RtdCwgIlVTSU5HICgle2V4cHJlc3Npb259cykiLAorCQkJCQkJCSBU ZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHBvbGljeVN0bXQsICJwcmVzZW50IiwgZmFsc2UpOworCisJLyogYWRkIHRoZSBXSVRI IENIRUNLIGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRvX3dpdGhfY2hlY2spCisJeworCQlEYXR1 bQkJZGVwYXJzZWQ7CisJCURhdHVtCQlzdG9yZWRleHByOworCQlib29sCQlpc251bGw7CisKKwkJ c3RvcmVkZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1fcGdfcG9saWN5X3BvbHdpdGhj aGVjaywKKwkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBvbFJlbCksICZpc251bGwpOworCQlp ZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTlVMTCBwb2x3aXRoY2hlY2sgZXhw cmVzc2lvbiBpbiBwb2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCQlkZXBhcnNlZCA9IERpcmVjdEZ1 bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsIHN0b3JlZGV4cHIsIHBvbEZvcm0tPnBvbHJlbGlkKTsK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QocG9saWN5U3RtdCwgIldJVEggQ0hFQ0sgKCV7ZXhwcmVz c2lvbn1zKSIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwl9CisJ ZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QocG9saWN5U3RtdCwgInByZXNlbnQiLCBmYWxzZSk7 CisKKwlyZWxhdGlvbl9jbG9zZShwb2xSZWwsIEFjY2Vzc1NoYXJlTG9jayk7Cit9CisKKy8qIEFw cGVuZCBhbiBhcnJheSBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAorYXBwZW5k X2FycmF5X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBMaXN0ICphcnJheSkK K3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2Vy dChzdWJfZm10KTsKKworCWlmIChsaXN0X2xlbmd0aChhcnJheSkgPT0gMCkKKwkJcmV0dXJuOwor CisJaWYgKCF2ZXJib3NlKQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJLyogRXh0cmFjdCB0 aGUgT2JqRWxlbXMgd2hvc2UgcHJlc2VudCBmbGFnIGlzIHRydWUgKi8KKwkJZm9yZWFjaChsYywg YXJyYXkpCisJCXsKKwkJCU9iakVsZW0gICAgKmVsZW0gPSAoT2JqRWxlbSAqKSBsZmlyc3QobGMp OworCisJCQlBc3NlcnQoZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0IHx8CisJCQkJICAg ZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlU3RyaW5nKTsKKworCQkJaWYgKCFlbGVtLT52YWx1ZS5v YmplY3QtPnByZXNlbnQgJiYKKwkJCQllbGVtLT5vYmp0eXBlID09IE9ialR5cGVPYmplY3QpCisJ CQkJYXJyYXkgPSBmb3JlYWNoX2RlbGV0ZV9jdXJyZW50KGFycmF5LCBsYyk7CisJCX0KKworCX0K KworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1 Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVBcnJheSwgb2JqZWN0X25hbWUp OworCXBhcmFtLT52YWx1ZS5hcnJheSA9IGFycmF5OworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0 cmVlLCBwYXJhbSk7Cit9CisKKy8qIEFwcGVuZCBhIGJvb2xlYW4gcGFyYW1ldGVyIHRvIGEgdHJl ZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFy ICpzdWJfZm10LCBib29sIHZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCWNoYXIJICAg Km9iamVjdF9uYW1lID0gc3ViX2ZtdDsKKwlib29sCQlpc19wcmVzZW50X2ZsYWcgPSBmYWxzZTsK KworCUFzc2VydChzdWJfZm10KTsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHByZXNlbnQgaXMg cGFydCBvZiB0aGUgZm9ybWF0IHN0cmluZyBhbmQgc3RvcmUgdGhlIGJvb2xlYW4KKwkgKiB2YWx1 ZQorCSAqLworCWlmIChzdHJjbXAoc3ViX2ZtdCwgInByZXNlbnQiKSA9PSAwKQorCXsKKwkJaXNf cHJlc2VudF9mbGFnID0gdHJ1ZTsKKwkJdHJlZS0+cHJlc2VudCA9IHZhbHVlOworCX0KKworCWlm ICghdmVyYm9zZSAmJiAhdHJlZS0+cHJlc2VudCkKKwkJcmV0dXJuOworCisJaWYgKCFpc19wcmVz ZW50X2ZsYWcpCisJCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5n KHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVCb29sLCBvYmpl Y3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmJvb2xlYW4gPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFk ZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICogQXBwZW5kIGEgZmxvYXQ4IHBhcmFt ZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfZmxvYXRfb2JqZWN0KE9i alRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGZsb2F0OCB2YWx1ZSkKK3sKKwlPYmpFbGVtICAg ICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKwor CW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9m bXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVGbG9hdCwgb2JqZWN0X25hbWUpOwor CXBhcmFtLT52YWx1ZS5mbHQgPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwg cGFyYW0pOworfQorCisvKgorICogQXBwZW5kIHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5nIHRvIHRo ZSBPYmpUcmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2Zvcm1hdF9zdHJpbmcoT2JqVHJl ZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwlpbnQJCQlsZW47CisJY2hhcgkgICAqZm10Owor CisJaWYgKHRyZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm10ID0gdHJlZS0+ Zm10aW5mby0+ZGF0YTsKKwlsZW4gPSB0cmVlLT5mbXRpbmZvLT5sZW47CisKKwkvKiBBZGQgYSBz ZXBhcmF0b3IgaWYgbmVjZXNzYXJ5ICovCisJaWYgKGxlbiA+IDAgJiYgZm10W2xlbiAtIDFdICE9 ICcgJykKKwkJYXBwZW5kU3RyaW5nSW5mb1NwYWNlcyh0cmVlLT5mbXRpbmZvLCAxKTsKKworCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcodHJlZS0+Zm10aW5mbywgc3ViX2ZtdCk7Cit9CisKKy8qIEFw cGVuZCBhIE5VTEwgb2JqZWN0IHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9udWxs X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KQoreworCWNoYXIJICAgKm9iamVj dF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKCF2ZXJib3NlKQorCQlyZXR1cm47 CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBz dWJfZm10KTsKKworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBuZXdfb2JqZWN0KE9ialR5 cGVOdWxsLCBvYmplY3RfbmFtZSkpOworfQorCisvKiBBcHBlbmQgYW4gb2JqZWN0IHBhcmFtZXRl ciB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfb2JqZWN0X29iamVjdChPYmpUcmVl ICp0cmVlLCBjaGFyICpzdWJfZm10LCBPYmpUcmVlICp2YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpw YXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlm ICghdmVyYm9zZSAmJiAhdmFsdWUtPnByZXNlbnQpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1l ID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFy YW0gPSBuZXdfb2JqZWN0KE9ialR5cGVPYmplY3QsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFs dWUub2JqZWN0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsK K30KKworLyoKKyAqIFJldHVybiB0aGUgb2JqZWN0IG5hbWUgd2hpY2ggaXMgZXh0cmFjdGVkIGZy b20gdGhlIGlucHV0ICIqJXtuYW1lWzouXX0qIgorICogc3R5bGUgc3RyaW5nLiBBbmQgYXBwZW5k IHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpUcmVlLgorICovCitzdGF0aWMgY2hh ciAqCithcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAq c3ViX2ZtdCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBvYmplY3RfbmFtZTsKKwljb25zdCBjaGFyICpl bmRfcHRyOworCWNvbnN0IGNoYXIgKmNwOworCWJvb2wJCXN0YXJ0X2NvcHkgPSBmYWxzZTsKKwor CWlmIChzdWJfZm10ID09IE5VTEwgfHwgdHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm4g c3ViX2ZtdDsKKworCWluaXRTdHJpbmdJbmZvKCZvYmplY3RfbmFtZSk7CisJZW5kX3B0ciA9IHN1 Yl9mbXQgKyBzdHJsZW4oc3ViX2ZtdCk7CisKKwlmb3IgKGNwID0gc3ViX2ZtdDsgY3AgPCBlbmRf cHRyOyBjcCsrKQorCXsKKwkJaWYgKCpjcCA9PSAneycpCisJCXsKKwkJCXN0YXJ0X2NvcHkgPSB0 cnVlOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXN0YXJ0X2NvcHkpCisJCQljb250aW51 ZTsKKworCQlpZiAoKmNwID09ICc6JyB8fCAqY3AgPT0gJ30nKQorCQkJYnJlYWs7CisKKwkJYXBw ZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmb2JqZWN0X25hbWUsICpjcCk7CisJfQorCisJaWYgKG9i amVjdF9uYW1lLmxlbiA9PSAwKQorCQllbG9nKEVSUk9SLCAib2JqZWN0IG5hbWUgbm90IGZvdW5k Iik7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXJldHVybiBv YmplY3RfbmFtZS5kYXRhOworfQorCisvKiBBcHBlbmQgYSBwcmVhbGxvY2F0ZWQgcGFyYW1ldGVy IHRvIGEgdHJlZSAqLworc3RhdGljIGlubGluZSB2b2lkCithcHBlbmRfcHJlbWFkZV9vYmplY3Qo T2JqVHJlZSAqdHJlZSwgT2JqRWxlbSAqZWxlbSkKK3sKKwlzbGlzdF9wdXNoX2hlYWQoJnRyZWUt PnBhcmFtcywgJmVsZW0tPm5vZGUpOworCXRyZWUtPm51bVBhcmFtcysrOworfQorCisvKiBBcHBl bmQgYSBzdHJpbmcgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9z dHJpbmdfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGNoYXIgKnZhbHVlKQor eworCU9iakVsZW0gICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0 KHN1Yl9mbXQpOworCisJaWYgKCF2ZXJib3NlICYmICh2YWx1ZSA9PSBOVUxMIHx8IHZhbHVlWzBd ID09ICdcMCcpKQorCQlyZXR1cm47CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9f Zm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpU eXBlU3RyaW5nLCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLnN0cmluZyA9IHZhbHVlOwor CWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBTaW1pbGFy IHRvIGZvcm1hdF90eXBlX2V4dGVuZGVkLCBleGNlcHQgd2UgcmV0dXJuIGVhY2ggYml0IG9mIGlu Zm9ybWF0aW9uCisgKiBzZXBhcmF0ZWx5OgorICoKKyAqIC0gbnNwaWQgaXMgdGhlIHNjaGVtYSBP SUQuICBGb3IgY2VydGFpbiBTUUwtc3RhbmRhcmQgdHlwZXMgd2hpY2ggaGF2ZSB3ZWlyZAorICog ICB0eXBtb2QgcnVsZXMsIHdlIHJldHVybiBJbnZhbGlkT2lkOyB0aGUgY2FsbGVyIGlzIGV4cGVj dGVkIHRvIG5vdCBzY2hlbWEtCisgKiAgIHF1YWxpZnkgdGhlIG5hbWUgbm9yIGFkZCBxdW90ZXMg dG8gdGhlIHR5cGUgbmFtZSBpbiB0aGlzIGNhc2UuCisgKgorICogLSB0eXBuYW1lIGlzIHNldCB0 byB0aGUgdHlwZSBuYW1lLCB3aXRob3V0IHF1b3RlcworICoKKyAqIC0gdHlwZW1vZHN0ciBpcyBz ZXQgdG8gdGhlIHR5cGVtb2QsIGlmIGFueSwgYXMgYSBzdHJpbmcgd2l0aCBwYXJlbnRoZXNlcwor ICoKKyAqIC0gdHlwYXJyYXkgaW5kaWNhdGVzIHdoZXRoZXIgW11zIG11c3QgYmUgYWRkZWQKKyAq CisgKiBXZSBkb24ndCB0cnkgdG8gZGVjb2RlIHR5cGUgbmFtZXMgdG8gdGhlaXIgc3RhbmRhcmQt bWFuZGF0ZWQgbmFtZXMsIGV4Y2VwdAorICogaW4gdGhlIGNhc2VzIG9mIHR5cGVzIHdpdGggdW51 c3VhbCB0eXBtb2QgcnVsZXMuCisgKi8KK3N0YXRpYyB2b2lkCitmb3JtYXRfdHlwZV9kZXRhaWxl ZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCisJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoq dHlwbmFtZSwgY2hhciAqKnR5cGVtb2RzdHIsCisJCQkJCSBib29sICp0eXBhcnJheSkKK3sKKwlI ZWFwVHVwbGUJdHVwbGU7CisJRm9ybV9wZ190eXBlIHR5cGVmb3JtOworCU9pZAkJCWFycmF5X2Jh c2VfdHlwZTsKKworCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0 RGF0dW0odHlwZV9vaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSAldSIsIHR5cGVfb2lkKTsKKwor CXR5cGVmb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR1cGxlKTsKKworCS8qCisJICog Q2hlY2sgaWYgaXQncyBhIHJlZ3VsYXIgKHZhcmlhYmxlIGxlbmd0aCkgYXJyYXkgdHlwZS4gIEFz IGFib3ZlLAorCSAqIGZpeGVkLWxlbmd0aCBhcnJheSB0eXBlcyBzdWNoIGFzICJuYW1lIiBzaG91 bGRuJ3QgZ2V0IGRlY29uc3RydWN0ZWQuCisJICovCisJYXJyYXlfYmFzZV90eXBlID0gdHlwZWZv cm0tPnR5cGVsZW07CisKKwkqdHlwYXJyYXkgPSAoSXNUcnVlQXJyYXlUeXBlKHR5cGVmb3JtKSAm JiB0eXBlZm9ybS0+dHlwc3RvcmFnZSAhPSBUWVBTVE9SQUdFX1BMQUlOKTsKKworCWlmICgqdHlw YXJyYXkpCisJeworCQkvKiBTd2l0Y2ggb3VyIGF0dGVudGlvbiB0byB0aGUgYXJyYXkgZWxlbWVu dCB0eXBlICovCisJCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CisJCXR1cGxlID0gU2VhcmNoU3lz Q2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0oYXJyYXlfYmFzZV90eXBlKSk7CisJCWlm ICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgdHlwZSAldSIsIHR5cGVfb2lkKTsKKworCQl0eXBlZm9ybSA9IChGb3JtX3Bn X3R5cGUpIEdFVFNUUlVDVCh0dXBsZSk7CisJCXR5cGVfb2lkID0gYXJyYXlfYmFzZV90eXBlOwor CX0KKworCS8qCisJICogU3BlY2lhbC1jYXNlIGNyb2NrIGZvciB0eXBlcyB3aXRoIHN0cmFuZ2Ug dHlwbW9kIHJ1bGVzIHdoZXJlIHdlIHB1dAorCSAqIHR5cG1vZCBhdCB0aGUgbWlkZGxlIG9mIG5h bWUoZS5nLiBUSU1FKDYpIHdpdGggdGltZSB6b25lICkuIFdlIGNhbm5vdAorCSAqIHNjaGVtYS1x dWFsaWZ5IG5vciBhZGQgcXVvdGVzIHRvIHRoZSB0eXBlIG5hbWUgaW4gdGhlc2UgY2FzZXMuCisJ ICovCisJaWYgKHR5cGVfb2lkID09IElOVEVSVkFMT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVT VEFNUE9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FU1RBTVBUWk9JRCB8fAorCQl0eXBlX29pZCA9 PSBUSU1FT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVUWk9JRCkKKwl7CisJCXN3aXRjaCAodHlw ZV9vaWQpCisJCXsKKwkJCWNhc2UgSU5URVJWQUxPSUQ6CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVw KCJJTlRFUlZBTCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBUSU1FU1RBTVBUWk9JRDoKKwkJCQlp ZiAodHlwZW1vZCA8IDApCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIFdJVEgg VElNRSBaT05FIik7CisJCQkJZWxzZQorCQkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFogaXMgYWRk ZWQgYnkgdHlwbW9kLiAqLworCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFNUCIpOwor CQkJCWJyZWFrOworCQkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVw KCJUSU1FU1RBTVAiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRVRaT0lEOgorCQkJCWlmICh0 eXBlbW9kIDwgMCkKKwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FIFdJVEggVElNRSBaT05F Iik7CisJCQkJZWxzZQorCQkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFogaXMgYWRkZWQgYnkgdHlw bW9kLiAqLworCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgVElNRU9JRDoKKwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCQlicmVh azsKKwkJfQorCQkqbnNwaWQgPSBJbnZhbGlkT2lkOworCX0KKwllbHNlCisJeworCQkvKgorCQkg KiBObyBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQgZm9yIG90aGVyIHR5cGVzLCBz byBnZXQgdGhlCisJCSAqIHR5cGUgbmFtZSBhbmQgc2NoZW1hIGRpcmVjdGx5IGZyb20gdGhlIGNh dGFsb2cuCisJCSAqLworCQkqbnNwaWQgPSB0eXBlZm9ybS0+dHlwbmFtZXNwYWNlOworCQkqdHlw bmFtZSA9IHBzdHJkdXAoTmFtZVN0cih0eXBlZm9ybS0+dHlwbmFtZSkpOworCX0KKworCWlmICh0 eXBlbW9kID49IDApCisJCSp0eXBlbW9kc3RyID0gcHJpbnRUeXBtb2QoIiIsIHR5cGVtb2QsIHR5 cGVmb3JtLT50eXBtb2RvdXQpOworCWVsc2UKKwkJKnR5cGVtb2RzdHIgPSBwc3RyZHVwKCIiKTsK KworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGRlZmF1 bHRzIHZhbHVlcyBvZiBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiwgYXMgYSBsaXN0IG9mCisgKiBk ZXBhcnNlZCBleHByZXNzaW9ucy4KKyAqLworc3RhdGljIExpc3QgKgorRnVuY3Rpb25HZXREZWZh dWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0cykKK3sKKwlMaXN0CSAgICpub2RlZGVmczsKKwlMaXN0 CSAgICpzdHJkZWZzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlub2RlZGVmcyA9IChM aXN0ICopIHN0cmluZ1RvTm9kZSh0ZXh0X3RvX2NzdHJpbmcocHJvYXJnZGVmYXVsdHMpKTsKKwlp ZiAoIUlzQShub2RlZGVmcywgTGlzdCkpCisJCWVsb2coRVJST1IsICJwcm9hcmdkZWZhdWx0cyBp cyBub3QgYSBsaXN0Iik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGVkZWZzKQorCXsKKwkJTm9kZQkg ICAqb25lZGVmID0gbGZpcnN0KGNlbGwpOworCisJCXN0cmRlZnMgPSBsYXBwZW5kKHN0cmRlZnMs IGRlcGFyc2VfZXhwcmVzc2lvbihvbmVkZWYsIE5JTCwgZmFsc2UsIGZhbHNlKSk7CisJfQorCisJ cmV0dXJuIHN0cmRlZnM7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRh dGlvbiBvZiB0aGUgZ2l2ZW4gUkVMUEVSU0lTVEVOQ0UgdmFsdWUuCisgKi8KK3N0YXRpYyBjaGFy ICoKK2dldF9wZXJzaXN0ZW5jZV9zdHIoY2hhciBwZXJzaXN0ZW5jZSkKK3sKKwlzd2l0Y2ggKHBl cnNpc3RlbmNlKQorCXsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9URU1QOgorCQkJcmV0dXJuICJU RU1QT1JBUlkiOworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEOgorCQkJcmV0dXJuICJV TkxPR0dFRCI7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOgorCQkJcmV0dXJuICIi OworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcGVyc2lzdGVuY2UgbWFy a2luZyAlYyIsIHBlcnNpc3RlbmNlKTsKKwkJCXJldHVybiAiIjsJCQkvKiBtYWtlIGNvbXBpbGVy IGhhcHB5ICovCisJfQorfQorCisvKiBBbGxvY2F0ZSBhIG5ldyBwYXJhbWV0ZXIgKi8KK3N0YXRp YyBPYmpFbGVtICoKK25ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKQoreworCU9i akVsZW0gICAgKnBhcmFtOworCisJcGFyYW0gPSBwYWxsb2MwKHNpemVvZihPYmpFbGVtKSk7CisJ cGFyYW0tPm5hbWUgPSBuYW1lOworCXBhcmFtLT5vYmp0eXBlID0gdHlwZTsKKworCXJldHVybiBw YXJhbTsKK30KKworLyogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHBhcmFtZXRlciAqLworc3RhdGlj IE9iakVsZW0gKgorbmV3X29iamVjdF9vYmplY3QoT2JqVHJlZSAqdmFsdWUpCit7CisJT2JqRWxl bSAgICAqcGFyYW07CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZU9iamVjdCwgTlVMTCk7 CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZhbHVlOworCisJcmV0dXJuIHBhcmFtOworfQorCisv KgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVl cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWUoY2hhciAqZm10KQoreworCU9i alRyZWUgICAgKnBhcmFtczsKKworCXBhcmFtcyA9IHBhbGxvYzAoc2l6ZW9mKE9ialRyZWUpKTsK KwlwYXJhbXMtPnByZXNlbnQgPSB0cnVlOworCXNsaXN0X2luaXQoJnBhcmFtcy0+cGFyYW1zKTsK KworCWlmIChmbXQpCisJeworCQlwYXJhbXMtPmZtdGluZm8gPSBtYWtlU3RyaW5nSW5mbygpOwor CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHBhcmFtcy0+Zm10aW5mbywgZm10KTsKKwl9CisKKwly ZXR1cm4gcGFyYW1zOworfQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXQgdXAgJXt9 RCBhbmQgJXt9TyBlbGVtZW50cy4KKyAqCisgKiBFbGVtZW50cyAic2NoZW1hbmFtZSIgYW5kICJv YmpuYW1lIiBhcmUgc2V0LiAgSWYgdGhlIG5hbWVzcGFjZSBPSUQKKyAqIGNvcnJlc3BvbmRzIHRv IGEgdGVtcCBzY2hlbWEsIHRoYXQncyBzZXQgdG8gInBnX3RlbXAiLgorICoKKyAqIFRoZSBkaWZm ZXJlbmNlIGJldHdlZW4gdGhvc2UgdHdvIGVsZW1lbnQgdHlwZXMgaXMgd2hldGhlciB0aGUgb2Jq bmFtZSB3aWxsCisgKiBiZSBxdW90ZWQgYXMgYW4gaWRlbnRpZmllciBvciBub3QsIHdoaWNoIGlz IG5vdCBzb21ldGhpbmcgdGhhdCB0aGlzIHJvdXRpbmUKKyAqIGNvbmNlcm5zIGl0c2VsZiB3aXRo OyB0aGF0IHdpbGwgYmUgdXAgdG8gdGhlIGV4cGFuZCBmdW5jdGlvbi4KKyAqLworc3RhdGljIE9i alRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKE9pZCBuc3BpZCwgY2hhciAqbmFtZSkK K3sKKwlPYmpUcmVlICAgICpxdWFsaWZpZWQ7CisJY2hhcgkgICAqbmFtZXNwYWNlOworCisJaWYg KGlzQW55VGVtcE5hbWVzcGFjZShuc3BpZCkpCisJCW5hbWVzcGFjZSA9IHBzdHJkdXAoInBnX3Rl bXAiKTsKKwllbHNlCisJCW5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZShuc3BpZCk7CisK KwlxdWFsaWZpZWQgPSBuZXdfb2JqdHJlZV9WQShOVUxMLCAyLAorCQkJCQkJCSAgICJzY2hlbWFu YW1lIiwgT2JqVHlwZVN0cmluZywgbmFtZXNwYWNlLAorCQkJCQkJCSAgICJvYmpuYW1lIiwgT2Jq VHlwZVN0cmluZywgcHN0cmR1cChuYW1lKSk7CisKKwlyZXR1cm4gcXVhbGlmaWVkOworfQorCisv KgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXQgdXAgJXt9RCBhbmQgJXt9TyBlbGVtZW50cywg d2l0aCB0aGUgb2JqZWN0IHNwZWNpZmllZAorICogYnkgY2xhc3NJZC9vYmpJZC4KKyAqCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPaWQgY2xhc3NJ ZCwgT2lkIG9iamVjdElkKQoreworCU9ialRyZWUgICAgKnF1YWxpZmllZDsKKwlSZWxhdGlvbglj YXRhbG9nOworCUhlYXBUdXBsZQljYXRvYmo7CisJRGF0dW0JCW9iam5zcDsKKwlEYXR1bQkJb2Jq bmFtZTsKKwlBdHRyTnVtYmVyCUFudW1fbmFtZTsKKwlBdHRyTnVtYmVyCUFudW1fbmFtZXNwYWNl OworCUF0dHJOdW1iZXIJQW51bV9vaWQgPSBnZXRfb2JqZWN0X2F0dG51bV9vaWQoY2xhc3NJZCk7 CisJYm9vbAkJaXNudWxsOworCisJY2F0YWxvZyA9IHRhYmxlX29wZW4oY2xhc3NJZCwgQWNjZXNz U2hhcmVMb2NrKTsKKworCWNhdG9iaiA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY2F0YWxv ZywgQW51bV9vaWQsIG9iamVjdElkKTsKKwlpZiAoIWNhdG9iaikKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9iamVjdCAldSBvZiBjYXRhbG9nIFwiJXNcIiIsCisJCQkg b2JqZWN0SWQsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGNhdGFsb2cpKTsKKwlBbnVtX25hbWUg PSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lKGNsYXNzSWQpOworCUFudW1fbmFtZXNwYWNlID0gZ2V0 X29iamVjdF9hdHRudW1fbmFtZXNwYWNlKGNsYXNzSWQpOworCisJb2JqbnNwID0gaGVhcF9nZXRh dHRyKGNhdG9iaiwgQW51bV9uYW1lc3BhY2UsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJ CQkJCQkgICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVk IE5VTEwgbmFtZXNwYWNlIik7CisKKwlvYmpuYW1lID0gaGVhcF9nZXRhdHRyKGNhdG9iaiwgQW51 bV9uYW1lLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAorCQkJCQkJICAgJmlzbnVsbCk7CisJ aWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgTlVMTCBuYW1lIik7CisKKwlx dWFsaWZpZWQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoRGF0dW1HZXRPYmplY3RJZChvYmpu c3ApLAorCQkJCQkJCQkJCSBOYW1lU3RyKCpEYXR1bUdldE5hbWUob2JqbmFtZSkpKTsKKwl0YWJs ZV9jbG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHF1YWxpZmllZDsK K30KKworLyoKKyAqIEhlbHBlciByb3V0aW5lIGZvciAle31SIG9iamVjdHMsIHdpdGggcm9sZSBz cGVjaWZpZWQgYnkgUm9sZVNwZWMgbm9kZS4KKyAqIFNwZWNpYWwgdmFsdWVzIHN1Y2ggYXMgUk9M RVNQRUNfQ1VSUkVOVF9VU0VSIGFyZSBleHBhbmRlZCB0byB0aGVpciBmaW5hbAorICogbmFtZXMu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhSb2xlU3Bl YyAqc3BlYykKK3sKKwlPYmpUcmVlICAgICpyb2xlOworCWNoYXIJICAgKnJvbGV0eXBlOworCisJ aWYgKHNwZWMtPnJvbGV0eXBlICE9IFJPTEVTUEVDX1BVQkxJQykKKwkJcm9sZXR5cGUgPSBnZXRf cm9sZXNwZWNfbmFtZShzcGVjKTsKKwllbHNlCisJCXJvbGV0eXBlID0gcHN0cmR1cCgiIik7CisK Kwlyb2xlID0gbmV3X29ianRyZWVfVkEoTlVMTCwgMiwKKwkJCQkJCSAgImlzX3B1YmxpYyIsIE9i alR5cGVCb29sLCBzcGVjLT5yb2xldHlwZSA9PSBST0xFU1BFQ19QVUJMSUMsCisJCQkJCQkgICJy b2xlbmFtZSIsIE9ialR5cGVTdHJpbmcsIHJvbGV0eXBlKTsKKwlyZXR1cm4gcm9sZTsKK30KKwor LyoKKyAqIEhlbHBlciByb3V0aW5lIGZvciAle31SIG9iamVjdHMsIHdpdGggcm9sZSBzcGVjaWZp ZWQgYnkgT0lELiAgKEFDTF9JRF9QVUJMSUMKKyAqIG1lYW5zIHRvIHVzZSAicHVibGljIikuCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKE9pZCByb2xlb2lk KQoreworCU9ialRyZWUgICAgKnJvbGU7CisKKwlyb2xlID0gbmV3X29ianRyZWUoIiIpOworCisJ aWYgKHJvbGVvaWQgIT0gQUNMX0lEX1BVQkxJQykKKwl7CisJCUhlYXBUdXBsZQlyb2x0dXA7CisJ CWNoYXIJICAgKnJvbGVuYW1lOworCisJCXJvbHR1cCA9IFNlYXJjaFN5c0NhY2hlMShBVVRIT0lE LCBPYmplY3RJZEdldERhdHVtKHJvbGVvaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJv bHR1cCkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5F RF9PQkpFQ1QpLAorCQkJCQkgZXJybXNnKCJyb2xlIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0 Iiwgcm9sZW9pZCkpKTsKKworCQlyb2xlbmFtZSA9IE5hbWVTdHIoKChGb3JtX3BnX2F1dGhpZCkg R0VUU1RSVUNUKHJvbHR1cCkpLT5yb2xuYW1lKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qocm9s ZSwgIiV7cm9sZW5hbWV9SSIsIHBzdHJkdXAocm9sZW5hbWUpKTsKKworCQlSZWxlYXNlU3lzQ2Fj aGUocm9sdHVwKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyb2xlLCAiJXty b2xlbmFtZX1JIiwgInB1YmxpYyIpOworCisJcmV0dXJuIHJvbGU7Cit9CisKKy8qCisgKiBBIGhl bHBlciByb3V0aW5lIHRvIHNldHVwICV7fVQgZWxlbWVudHMuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK25ld19vYmp0cmVlX2Zvcl90eXBlKE9pZCB0eXBlSWQsIGludDMyIHR5cG1vZCkKK3sKKwlP YmpUcmVlICAgICp0eXBlUGFyYW07CisJT2lkCQkJdHlwbnNwaWQ7CisJY2hhcgkgICAqdHlwbnNw OworCWNoYXIJICAgKnR5cGVuYW1lID0gTlVMTDsKKwljaGFyCSAgICp0eXBtb2RzdHI7CisJYm9v bAkJdHlwYXJyYXk7CisKKwlmb3JtYXRfdHlwZV9kZXRhaWxlZCh0eXBlSWQsIHR5cG1vZCwKKwkJ CQkJCSAmdHlwbnNwaWQsICZ0eXBlbmFtZSwgJnR5cG1vZHN0ciwgJnR5cGFycmF5KTsKKworCWlm IChPaWRJc1ZhbGlkKHR5cG5zcGlkKSkKKwkJdHlwbnNwID0gZ2V0X25hbWVzcGFjZV9uYW1lX29y X3RlbXAodHlwbnNwaWQpOworCWVsc2UKKwkJdHlwbnNwID0gcHN0cmR1cCgiIik7CisKKwl0eXBl UGFyYW0gPSBuZXdfb2JqdHJlZV9WQShOVUxMLCA0LAorCQkJCQkJCSAgICJzY2hlbWFuYW1lIiwg T2JqVHlwZVN0cmluZywgdHlwbnNwLAorCQkJCQkJCSAgICJ0eXBlbmFtZSIsIE9ialR5cGVTdHJp bmcsIHR5cGVuYW1lLAorCQkJCQkJCSAgICJ0eXBtb2QiLCBPYmpUeXBlU3RyaW5nLCB0eXBtb2Rz dHIsCisJCQkJCQkJICAgInR5cGFycmF5IiwgT2JqVHlwZUJvb2wsIHR5cGFycmF5KTsKKworCXJl dHVybiB0eXBlUGFyYW07Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgdHJlZSB0 byBzdG9yZSBwYXJhbWV0ZXIgdmFsdWVzIC0tIHZhcmFyZ3MgdmVyc2lvbi4KKyAqCisgKiBUaGUg ImZtdCIgYXJndW1lbnQgaXMgdXNlZCB0byBhcHBlbmQgYXMgYSAiZm10IiBlbGVtZW50IGluIHRo ZSBvdXRwdXQgYmxvYi4KKyAqIG51bW9ianMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZXh0cmEg ZWxlbWVudHMgdG8gYXBwZW5kOyBmb3IgZWFjaCBvbmUsIGEKKyAqIG5hbWUgKHN0cmluZyksIHR5 cGUgKGZyb20gdGhlIE9ialR5cGUgZW51bSkgYW5kIHZhbHVlIG11c3QgYmUgc3VwcGxpZWQuICBU aGUKKyAqIHZhbHVlIG11c3QgbWF0Y2ggdGhlIHR5cGUgZ2l2ZW47IGZvciBpbnN0YW5jZSwgT2Jq VHlwZUludGVnZXIgcmVxdWlyZXMgYW4KKyAqIGludDY0LCBPYmpUeXBlU3RyaW5nIHJlcXVpcmVz IGEgY2hhciAqLCBPYmpUeXBlQXJyYXkgcmVxdWlyZXMgYSBsaXN0IChvZgorICogT2JqRWxlbSks IE9ialR5cGVPYmplY3QgcmVxdWlyZXMgYW4gT2JqVHJlZSwgYW5kIHNvIG9uLiAgRWFjaCBlbGVt ZW50IHR5cGUgKgorICogbXVzdCBtYXRjaCB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIgZ2l2ZW4g aW4gdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGRlc2NyaWJlZAorICogaW4gZGRsX2RlcGFyc2VfZXhw YW5kX2NvbW1hbmQsIHEudi4KKyAqCisgKiBOb3RlIHdlIGRvbid0IGhhdmUgdGhlIGx1eHVyeSBv ZiBzcHJpbnRmLWxpa2UgY29tcGlsZXIgd2FybmluZ3MgZm9yCisgKiBtYWxmb3JtZWQgYXJndW1l bnQgbGlzdHMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX1ZBKGNoYXIgKmZt dCwgaW50IG51bW9ianMsLi4uKQoreworCU9ialRyZWUgICAgKnRyZWU7CisJdmFfbGlzdAkJYXJn czsKKwlpbnQJCQlpOworCisJLyogU2V0IHVwIHRoZSB0b3BsZXZlbCBvYmplY3QgYW5kIGl0cyAi Zm10IiAqLworCXRyZWUgPSBuZXdfb2JqdHJlZShmbXQpOworCisJLyogQW5kIHByb2Nlc3MgdGhl IGdpdmVuIHZhcmFyZ3MgKi8KKwl2YV9zdGFydChhcmdzLCBudW1vYmpzKTsKKwlmb3IgKGkgPSAw OyBpIDwgbnVtb2JqczsgaSsrKQorCXsKKwkJY2hhcgkgICAqbmFtZTsKKwkJT2JqVHlwZQkJdHlw ZTsKKwkJT2JqRWxlbSAgICAqZWxlbTsKKworCQluYW1lID0gdmFfYXJnKGFyZ3MsIGNoYXIgKik7 CisJCXR5cGUgPSB2YV9hcmcoYXJncywgT2JqVHlwZSk7CisJCWVsZW0gPSBuZXdfb2JqZWN0KHR5 cGUsIE5VTEwpOworCisJCS8qCisJCSAqIEZvciBhbGwgb3RoZXIgcGFyYW0gdHlwZXMgdGhlcmUg bXVzdCBiZSBhIHZhbHVlIGluIHRoZSB2YXJhcmdzLgorCQkgKiBGZXRjaCBpdCBhbmQgYWRkIHRo ZSBmdWxseSBmb3JtZWQgc3Vib2JqZWN0IGludG8gdGhlIG1haW4gb2JqZWN0LgorCQkgKi8KKwkJ c3dpdGNoICh0eXBlKQorCQl7CisJCQljYXNlIE9ialR5cGVOdWxsOgorCQkJCS8qIE51bGwgcGFy YW1zIGRvbid0IGhhdmUgYSB2YWx1ZSAob2J2aW91c2x5KSAqLworCQkJCWJyZWFrOworCQkJY2Fz ZSBPYmpUeXBlQm9vbDoKKwkJCQllbGVtLT52YWx1ZS5ib29sZWFuID0gdmFfYXJnKGFyZ3MsIGlu dCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVTdHJpbmc6CisJCQkJZWxlbS0+dmFsdWUu c3RyaW5nID0gdmFfYXJnKGFyZ3MsIGNoYXIgKik7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5 cGVBcnJheToKKwkJCQllbGVtLT52YWx1ZS5hcnJheSA9IHZhX2FyZyhhcmdzLCBMaXN0ICopOwor CQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJCQllbGVtLT52YWx1ZS5pbnRl Z2VyID0gdmFfYXJnKGFyZ3MsIGludDY0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUZs b2F0OgorCQkJCWVsZW0tPnZhbHVlLmZsdCA9IHZhX2FyZyhhcmdzLCBkb3VibGUpOworCQkJCWJy ZWFrOworCQkJY2FzZSBPYmpUeXBlT2JqZWN0OgorCQkJCWVsZW0tPnZhbHVlLm9iamVjdCA9IHZh X2FyZyhhcmdzLCBPYmpUcmVlICopOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9n KEVSUk9SLCAiaW52YWxpZCBPYmpUcmVlIGVsZW1lbnQgdHlwZSAlZCIsIHR5cGUpOworCQl9CisK KwkJZWxlbS0+bmFtZSA9IG5hbWU7CisJCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBlbGVt KTsKKwl9CisKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHRyZWU7Cit9CisKKy8qIEFsbG9jYXRl IGEgbmV3IHN0cmluZyBvYmplY3QgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19zdHJpbmdfb2Jq ZWN0KGNoYXIgKnZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCisJQXNzZXJ0KHZhbHVl KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5nLCBOVUxMKTsKKwlwYXJhbS0+ dmFsdWUuc3RyaW5nID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKKy8qCisgKiBQcm9j ZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyBmcm9tIHRoZSBPYmpUcmVlIGludG8gdGhl IG91dHB1dCBwYXJzZQorICogc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitvYmp0cmVlX2ZtdF90 b19qc29uYl9lbGVtZW50KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9ialRyZWUgKnRyZWUpCit7 CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlpZiAodHJlZS0+Zm10aW5m byA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwlrZXku dHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSAiZm10IjsKKwlrZXkudmFs LnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5LnZhbC5zdHJpbmcudmFsKTsKKwlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIFdKQl9LRVksICZrZXkpOworCisJLyogVGhlbiBwcm9jZXNzIHRoZSBwcmUtYnVp bHQgZm9ybWF0IHN0cmluZyAqLworCXZhbC50eXBlID0gamJ2U3RyaW5nOworCXZhbC52YWwuc3Ry aW5nLmxlbiA9IHRyZWUtPmZtdGluZm8tPmxlbjsKKwl2YWwudmFsLnN0cmluZy52YWwgPSB0cmVl LT5mbXRpbmZvLT5kYXRhOworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX1ZBTFVFLCAmdmFs KTsKK30KKworLyoKKyAqIENyZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9uIGZyb20gYW4gT2Jq VHJlZS4KKyAqLworc3RhdGljIEpzb25iICoKK29ianRyZWVfdG9fanNvbmIoT2JqVHJlZSAqdHJl ZSkKK3sKKwlKc29uYlZhbHVlICp2YWx1ZTsKKworCXZhbHVlID0gb2JqdHJlZV90b19qc29uYl9y ZWModHJlZSwgTlVMTCk7CisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZhbHVlKTsKK30KKwor LyoKKyAqIEhlbHBlciBmb3Igb2JqdHJlZV90b19qc29uYjogcHJvY2VzcyBhbiBpbmRpdmlkdWFs IGVsZW1lbnQgZnJvbSBhbiBvYmplY3Qgb3IKKyAqIGFuIGFycmF5IGludG8gdGhlIG91dHB1dCBw YXJzZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK29ianRyZWVfdG9fanNvbmJfZWxlbWVudChK c29uYlBhcnNlU3RhdGUgKnN0YXRlLCBPYmpFbGVtICpvYmplY3QsCisJCQkJCQkgSnNvbmJJdGVy YXRvclRva2VuIGVsZW1fdG9rZW4pCit7CisJTGlzdENlbGwgICAqY2VsbDsKKwlKc29uYlZhbHVl CXZhbDsKKworCXN3aXRjaCAob2JqZWN0LT5vYmp0eXBlKQorCXsKKwkJY2FzZSBPYmpUeXBlTnVs bDoKKwkJCXZhbC50eXBlID0gamJ2TnVsbDsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxl bV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVTdHJpbmc6CisJCQl2 YWwudHlwZSA9IGpidlN0cmluZzsKKwkJCXZhbC52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmpl Y3QtPnZhbHVlLnN0cmluZyk7CisJCQl2YWwudmFsLnN0cmluZy52YWwgPSBvYmplY3QtPnZhbHVl LnN0cmluZzsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJ CQlicmVhazsKKworCQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJdmFsLnR5cGUgPSBqYnZOdW1l cmljOworCQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0dW1HZXROdW1lcmlj KERpcmVjdEZ1bmN0aW9uQ2FsbDEoaW50OF9udW1lcmljLAorCQkJCQkJCQkJCQkJCW9iamVjdC0+ dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAm dmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUZsb2F0OgorCQkJdmFsLnR5cGUgPSBq YnZOdW1lcmljOworCQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0dW1HZXRO dW1lcmljKERpcmVjdEZ1bmN0aW9uQ2FsbDEoZmxvYXQ4X251bWVyaWMsCisJCQkJCQkJCQkJCQkJ b2JqZWN0LT52YWx1ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1f dG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlQm9vbDoKKwkJCXZhbC50 eXBlID0gamJ2Qm9vbDsKKwkJCXZhbC52YWwuYm9vbGVhbiA9IG9iamVjdC0+dmFsdWUuYm9vbGVh bjsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVh azsKKworCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkvKiBSZWN1cnNpdmVseSBhZGQgdGhlIG9i amVjdCBpbnRvIHRoZSBleGlzdGluZyBwYXJzZSBzdGF0ZSAqLworCQkJb2JqdHJlZV90b19qc29u Yl9yZWMob2JqZWN0LT52YWx1ZS5vYmplY3QsIHN0YXRlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug T2JqVHlwZUFycmF5OgorCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fQVJSQVks IE5VTEwpOworCQkJZm9yZWFjaChjZWxsLCBvYmplY3QtPnZhbHVlLmFycmF5KQorCQkJeworCQkJ CU9iakVsZW0gICAgKmVsZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJCQlvYmp0cmVlX3RvX2pzb25i X2VsZW1lbnQoc3RhdGUsIGVsZW0sIFdKQl9FTEVNKTsKKwkJCX0KKwkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0VORF9BUlJBWSwgTlVMTCk7CisJCQlicmVhazsKKworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBvYmplY3QgdHlwZSAlZCIsIG9iamVjdC0+b2Jq dHlwZSk7CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBv Ymp0cmVlX3RvX2pzb25iLgorICovCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitvYmp0cmVlX3RvX2pz b25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKQoreworCXNsaXN0 X2l0ZXIJaXRlcjsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwg TlVMTCk7CisKKwlvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KHN0YXRlLCB0cmVlKTsKKwor CXNsaXN0X2ZvcmVhY2goaXRlciwgJnRyZWUtPnBhcmFtcykKKwl7CisJCU9iakVsZW0gICAgKm9i amVjdCA9IHNsaXN0X2NvbnRhaW5lcihPYmpFbGVtLCBub2RlLCBpdGVyLmN1cik7CisJCUpzb25i VmFsdWUJa2V5OworCisJCS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCQlrZXkudHlwZSA9IGpi dlN0cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKG9iamVjdC0+bmFtZSk7CisJ CWtleS52YWwuc3RyaW5nLnZhbCA9IG9iamVjdC0+bmFtZTsKKwkJcHVzaEpzb25iVmFsdWUoJnN0 YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCQkvKiBUaGVuIHByb2Nlc3MgdGhlIHZhbHVlIGFjY29y ZGluZyB0byBpdHMgdHlwZSAqLworCQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIG9i amVjdCwgV0pCX1ZBTFVFKTsKKwl9CisKKwlyZXR1cm4gcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBX SkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUg VEFCTEUvQ1JFQVRFIERPTUFJTiBkZXBhcnNpbmcuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQg b3IgZG9tYWluIE9JRCwgb2J0YWluIGl0cyBjb25zdHJhaW50cyBhbmQgYXBwZW5kIHRoZW0gdG8K KyAqIHRoZSBnaXZlbiBlbGVtZW50cyBsaXN0LiAgVGhlIHVwZGF0ZWQgbGlzdCBpcyByZXR1cm5l ZC4KKyAqCisgKiBUaGlzIHdvcmtzIGZvciB0eXBlZCB0YWJsZXMsIHJlZ3VsYXIgdGFibGVzLCBh bmQgZG9tYWlucy4KKyAqCisgKiBOb3RlIHRoYXQgQ09OU1RSQUlOVF9GT1JFSUdOIGNvbnN0cmFp bnRzIGFyZSBhbHdheXMgaWdub3JlZC4KKyAqLworc3RhdGljIExpc3QgKgorb2J0YWluQ29uc3Ry YWludHMoTGlzdCAqZWxlbWVudHMsIE9pZCByZWxhdGlvbklkLCBPaWQgZG9tYWluSWQpCit7CisJ UmVsYXRpb24JY29uUmVsOworCVNjYW5LZXlEYXRhIGtleTsKKwlTeXNTY2FuRGVzYyBzY2FuOwor CUhlYXBUdXBsZQl0dXBsZTsKKwlPYmpUcmVlICAgICpjb25zdHI7CisKKwkvKiBPbmx5IG9uZSBt YXkgYmUgdmFsaWQgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChyZWxhdGlvbklkKSBeIE9pZElzVmFs aWQoZG9tYWluSWQpKTsKKworCS8qCisJICogU2NhbiBwZ19jb25zdHJhaW50IHRvIGZldGNoIGFs bCBjb25zdHJhaW50cyBsaW5rZWQgdG8gdGhlIGdpdmVuCisJICogcmVsYXRpb24uCisJICovCisJ Y29uUmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwlpZiAoT2lkSXNWYWxpZChyZWxhdGlvbklkKSkKKwl7CisJCVNjYW5LZXlJbml0KCZrZXks CisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKHJlbGF0aW9uSWQpKTsKKwkJ c2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFt ZUluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQorCWVsc2UKKwl7 CisJCUFzc2VydChPaWRJc1ZhbGlkKGRvbWFpbklkKSk7CisJCVNjYW5LZXlJbml0KCZrZXksCisJ CQkJCUFudW1fcGdfY29uc3RyYWludF9jb250eXBpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVt YmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKGRvbWFpbklkKSk7CisJCXNjYW4g PSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50VHlwaWRJbmRleElkLAorCQkJ CQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKworCS8qCisJICogRm9yIGVhY2ggY29u c3RyYWludCwgYWRkIGEgbm9kZSB0byB0aGUgbGlzdCBvZiB0YWJsZSBlbGVtZW50cy4gIEluCisJ ICogdGhlc2Ugbm9kZXMgd2UgaW5jbHVkZSBub3Qgb25seSB0aGUgcHJpbnRhYmxlIGluZm9ybWF0 aW9uICgiZm10IiksIGJ1dAorCSAqIGFsc28gc2VwYXJhdGUgYXR0cmlidXRlcyB0byBpbmRpY2F0 ZSB0aGUgdHlwZSBvZiBjb25zdHJhaW50LCBmb3IKKwkgKiBhdXRvbWF0aWMgcHJvY2Vzc2luZy4K KwkgKi8KKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQo c2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbnN0ckZvcm07CisJCWNoYXIJICAg KmNvbnR5cGU7CisKKwkJY29uc3RyRm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVD VCh0dXBsZSk7CisKKwkJc3dpdGNoIChjb25zdHJGb3JtLT5jb250eXBlKQorCQl7CisJCQljYXNl IENPTlNUUkFJTlRfQ0hFQ0s6CisJCQkJY29udHlwZSA9ICJjaGVjayI7CisJCQkJYnJlYWs7CisJ CQljYXNlIENPTlNUUkFJTlRfRk9SRUlHTjoKKwkJCQljb250aW51ZTsJCS8qIG5vdCBoZXJlICov CisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQljb250eXBlID0gInByaW1hcnkga2V5 IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9VTklRVUU6CisJCQkJY29udHlwZSA9 ICJ1bmlxdWUiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1RSSUdHRVI6CisJCQkJ Y29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9FWENM VVNJT046CisJCQkJY29udHlwZSA9ICJleGNsdXNpb24iOworCQkJCWJyZWFrOworCQkJZGVmYXVs dDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0cmFpbnQgdHlwZSIpOworCQl9 CisKKwkJLyoKKwkJICogInR5cGUiIGFuZCAiY29udHlwZSIgYXJlIG5vdCBwYXJ0IG9mIHRoZSBw cmludGFibGUgb3V0cHV0LCBidXQgYXJlCisJCSAqIHVzZWZ1bCB0byBwcm9ncmFtbWF0aWNhbGx5 IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gY29sdW1ucyBhbmQgYW1vbmcKKwkJICogZGlmZmVyZW50 IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAqCisJCSAqIFhYWCBpdCBtaWdodCBiZSB1c2VmdWwgdG8g YWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQSywgZXRjLgorCQkgKi8KKwkJY29uc3Ry ID0gbmV3X29ianRyZWVfVkEoIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLAor CQkJCQkJCQk0LAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb25zdHJhaW50IiwK KwkJCQkJCQkJImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250eXBlLAorCQkJCQkJCQkibmFt ZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9ybS0+Y29ubmFtZSksCisJCQkJCQkJ CSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJcGdfZ2V0X2NvbnN0cmFpbnRk ZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyRm9ybS0+b2lkKSk7CisJCWVsZW1lbnRzID0gbGFwcGVu ZChlbGVtZW50cywgbmV3X29iamVjdF9vYmplY3QoY29uc3RyKSk7CisJfQorCisJc3lzdGFibGVf ZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwlyZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBSZXR1cm4gYW4gaW5kZXggZGVmaW5pdGlv biwgc3BsaXQgaW50byBzZXZlcmFsIHBpZWNlcy4KKyAqCisgKiBBIGxhcmdlIGFtb3VudCBvZiBj b2RlIGlzIGR1cGxpY2F0ZWQgZnJvbSAgcGdfZ2V0X2luZGV4ZGVmX3dvcmtlciwgYnV0CisgKiBj b250cm9sIGZsb3cgaXMgZGlmZmVyZW50IGVub3VnaCB0aGF0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0 aCBrZWVwaW5nIHRoZW0KKyAqIHRvZ2V0aGVyLgorICovCitzdGF0aWMgdm9pZAorcGdfZ2V0X2lu ZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJlbGlkLAorCQkJCQkJIGNoYXIgKippbmRleF9hbSwK KwkJCQkJCSBjaGFyICoqZGVmaW5pdGlvbiwKKwkJCQkJCSBjaGFyICoqcmVsb3B0aW9ucywKKwkJ CQkJCSBjaGFyICoqdGFibGVzcGFjZSwKKwkJCQkJCSBjaGFyICoqd2hlcmVDbGF1c2UpCit7CisJ SGVhcFR1cGxlCWh0X2lkeDsKKwlIZWFwVHVwbGUJaHRfaWR4cmVsOworCUhlYXBUdXBsZQlodF9h bTsKKwlGb3JtX3BnX2luZGV4IGlkeHJlYzsKKwlGb3JtX3BnX2NsYXNzIGlkeHJlbHJlYzsKKwlG b3JtX3BnX2FtCWFtcmVjOworCUluZGV4QW1Sb3V0aW5lICphbXJvdXRpbmU7CisJTGlzdAkgICAq aW5kZXhwcnM7CisJTGlzdENlbGwgICAqaW5kZXhwcl9pdGVtOworCUxpc3QJICAgKmNvbnRleHQ7 CisJT2lkCQkJaW5kcmVsaWQ7CisJaW50CQkJa2V5bm87CisJRGF0dW0JCWluZGNvbGxEYXR1bTsK KwlEYXR1bQkJaW5kY2xhc3NEYXR1bTsKKwlEYXR1bQkJaW5kb3B0aW9uRGF0dW07CisJYm9vbAkJ aXNudWxsOworCW9pZHZlY3RvciAgKmluZGNvbGxhdGlvbjsKKwlvaWR2ZWN0b3IgICppbmRjbGFz czsKKwlpbnQydmVjdG9yICppbmRvcHRpb247CisJU3RyaW5nSW5mb0RhdGEgZGVmaW5pdGlvbkJ1 ZjsKKworCS8qCisJICogRmV0Y2ggdGhlIHBnX2luZGV4IHR1cGxlIGJ5IHRoZSBPaWQgb2YgdGhl IGluZGV4CisJICovCisJaHRfaWR4ID0gU2VhcmNoU3lzQ2FjaGUxKElOREVYUkVMSUQsIE9iamVj dElkR2V0RGF0dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9pZHgp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgaW5kZXggJXUiLCBpbmRl eHJlbGlkKTsKKwlpZHhyZWMgPSAoRm9ybV9wZ19pbmRleCkgR0VUU1RSVUNUKGh0X2lkeCk7CisK KwlpbmRyZWxpZCA9IGlkeHJlYy0+aW5kcmVsaWQ7CisJQXNzZXJ0KGluZGV4cmVsaWQgPT0gaWR4 cmVjLT5pbmRleHJlbGlkKTsKKworCS8qIE11c3QgZ2V0IGluZGNvbGxhdGlvbiwgaW5kY2xhc3Ms IGFuZCBpbmRvcHRpb24gdGhlIGhhcmQgd2F5ICovCisJaW5kY29sbERhdHVtID0gU3lzQ2FjaGVH ZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJICAgQW51bV9wZ19pbmRleF9pbmRj b2xsYXRpb24sICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRjb2xsYXRpb24gPSAo b2lkdmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjb2xsRGF0dW0pOworCisJaW5kY2xhc3NE YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQlBbnVt X3BnX2luZGV4X2luZGNsYXNzLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY2xh c3MgPSAob2lkdmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjbGFzc0RhdHVtKTsKKworCWlu ZG9wdGlvbkRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJ CQkJCSBBbnVtX3BnX2luZGV4X2luZG9wdGlvbiwgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwp OworCWluZG9wdGlvbiA9IChpbnQydmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRvcHRpb25E YXR1bSk7CisKKwkvKgorCSAqIEZldGNoIHRoZSBwZ19jbGFzcyB0dXBsZSBvZiB0aGUgaW5kZXgg cmVsYXRpb24KKwkgKi8KKwlodF9pZHhyZWwgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBPYmpl Y3RJZEdldERhdHVtKGluZGV4cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfaWR4 cmVsKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbGF0aW9uICV1 IiwgaW5kZXhyZWxpZCk7CisJaWR4cmVscmVjID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVCho dF9pZHhyZWwpOworCisJLyoKKwkgKiBGZXRjaCB0aGUgcGdfYW0gdHVwbGUgb2YgdGhlIGluZGV4 JyBhY2Nlc3MgbWV0aG9kCisJICovCisJaHRfYW0gPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9i amVjdElkR2V0RGF0dW0oaWR4cmVscmVjLT5yZWxhbSkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChodF9hbSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3Mg bWV0aG9kICV1IiwKKwkJCSBpZHhyZWxyZWMtPnJlbGFtKTsKKwlhbXJlYyA9IChGb3JtX3BnX2Ft KSBHRVRTVFJVQ1QoaHRfYW0pOworCisJLyoKKwkgKiBHZXQgdGhlIGluZGV4IGV4cHJlc3Npb25z LCBpZiBhbnkuICAoTk9URTogd2UgZG8gbm90IHVzZSB0aGUgcmVsY2FjaGUKKwkgKiB2ZXJzaW9u cyBvZiB0aGUgZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZSwgYmVjYXVzZSB3ZSB3YW50IHRvIGRp c3BsYXkKKwkgKiBub24tY29uc3QtZm9sZGVkIGV4cHJlc3Npb25zLikKKwkgKi8KKwlpZiAoIWhl YXBfYXR0aXNudWxsKGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRleHBycywgTlVMTCkpCisJewor CQlEYXR1bQkJZXhwcnNEYXR1bTsKKwkJY2hhcgkgICAqZXhwcnNTdHJpbmc7CisKKwkJZXhwcnNE YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQkgQW51 bV9wZ19pbmRleF9pbmRleHBycywgJmlzbnVsbCk7CisJCUFzc2VydCghaXNudWxsKTsKKwkJZXhw cnNTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHJzRGF0dW0pOworCQlpbmRleHBycyA9 IChMaXN0ICopIHN0cmluZ1RvTm9kZShleHByc1N0cmluZyk7CisJCXBmcmVlKGV4cHJzU3RyaW5n KTsKKwl9CisJZWxzZQorCQlpbmRleHBycyA9IE5JTDsKKworCWluZGV4cHJfaXRlbSA9IGxpc3Rf aGVhZChpbmRleHBycyk7CisKKwljb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihnZXRfcmVs X25hbWUoaW5kcmVsaWQpLCBpbmRyZWxpZCk7CisKKwlpbml0U3RyaW5nSW5mbygmZGVmaW5pdGlv bkJ1Zik7CisKKwkvKiBPdXRwdXQgaW5kZXggQU0gKi8KKwkqaW5kZXhfYW0gPSBwc3RyZHVwKHF1 b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhbXJlYy0+YW1uYW1lKSkpOworCisJLyogRmV0Y2ggdGhl IGluZGV4IEFNJ3MgQVBJIHN0cnVjdCAqLworCWFtcm91dGluZSA9IEdldEluZGV4QW1Sb3V0aW5l KGFtcmVjLT5hbWhhbmRsZXIpOworCisJLyoKKwkgKiBPdXRwdXQgaW5kZXggZGVmaW5pdGlvbi4g IE5vdGUgdGhlIG91dGVyIHBhcmVucyBtdXN0IGJlIHN1cHBsaWVkIGJ5CisJICogY2FsbGVyLgor CSAqLworCWZvciAoa2V5bm8gPSAwOyBrZXlubyA8IGlkeHJlYy0+aW5kbmF0dHM7IGtleW5vKysp CisJeworCQlBdHRyTnVtYmVyCWF0dG51bSA9IGlkeHJlYy0+aW5ka2V5LnZhbHVlc1trZXlub107 CisJCWludDE2CQlvcHQgPSBpbmRvcHRpb24tPnZhbHVlc1trZXlub107CisJCU9pZAkJCWtleWNv bHR5cGU7CisJCU9pZAkJCWtleWNvbGNvbGxhdGlvbjsKKwkJT2lkCQkJaW5kY29sbDsKKworCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCBrZXlubyA9PSAwID8gIiIgOiAi LCAiKTsKKworCQlpZiAoYXR0bnVtICE9IDApCisJCXsKKwkJCS8qIFNpbXBsZSBpbmRleCBjb2x1 bW4gKi8KKwkJCWNoYXIJICAgKmF0dG5hbWU7CisJCQlpbnQzMgkJa2V5Y29sdHlwbW9kOworCisJ CQlhdHRuYW1lID0gZ2V0X2F0dG5hbWUoaW5kcmVsaWQsIGF0dG51bSwgZmFsc2UpOworCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgcXVvdGVfaWRlbnRpZmllcihhdHRu YW1lKSk7CisJCQlnZXRfYXR0dHlwZXR5cG1vZGNvbGwoaW5kcmVsaWQsIGF0dG51bSwKKwkJCQkJ CQkJICAma2V5Y29sdHlwZSwgJmtleWNvbHR5cG1vZCwKKwkJCQkJCQkJICAma2V5Y29sY29sbGF0 aW9uKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIEV4cHJlc3Npb25hbCBpbmRleCAqLworCQkJ Tm9kZQkgICAqaW5kZXhrZXk7CisJCQljaGFyCSAgICpzdHI7CisKKwkJCWlmIChpbmRleHByX2l0 ZW0gPT0gTlVMTCkKKwkJCQllbG9nKEVSUk9SLCAidG9vIGZldyBlbnRyaWVzIGluIGluZGV4cHJz IGxpc3QiKTsKKwkJCWluZGV4a2V5ID0gKE5vZGUgKikgbGZpcnN0KGluZGV4cHJfaXRlbSk7CisJ CQlpbmRleHByX2l0ZW0gPSBsbmV4dChpbmRleHBycywgaW5kZXhwcl9pdGVtKTsKKwkJCS8qIERl cGFyc2UgKi8KKwkJCXN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihpbmRleGtleSwgY29udGV4dCwg ZmFsc2UsIGZhbHNlKTsKKworCQkJLyogTmVlZCBwYXJlbnMgaWYgaXQncyBub3QgYSBiYXJlIGZ1 bmN0aW9uIGNhbGwgKi8KKwkJCWlmIChpbmRleGtleSAmJiBJc0EoaW5kZXhrZXksIEZ1bmNFeHBy KSAmJgorCQkJCSgoRnVuY0V4cHIgKikgaW5kZXhrZXkpLT5mdW5jZm9ybWF0ID09IENPRVJDRV9F WFBMSUNJVF9DQUxMKQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYs IHN0cik7CisJCQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIigl cykiLCBzdHIpOworCisJCQlrZXljb2x0eXBlID0gZXhwclR5cGUoaW5kZXhrZXkpOworCQkJa2V5 Y29sY29sbGF0aW9uID0gZXhwckNvbGxhdGlvbihpbmRleGtleSk7CisJCX0KKworCQkvKiBBZGQg Y29sbGF0aW9uLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJaW5kY29sbCA9IGluZGNvbGxhdGlvbi0+ dmFsdWVzW2tleW5vXTsKKwkJaWYgKE9pZElzVmFsaWQoaW5kY29sbCkpCisJCQlhcHBlbmRTdHJp bmdJbmZvKCZkZWZpbml0aW9uQnVmLCAiIENPTExBVEUgJXMiLAorCQkJCQkJCSBnZW5lcmF0ZV9j b2xsYXRpb25fbmFtZSgoaW5kY29sbCkpKTsKKworCQkvKiBBZGQgdGhlIG9wZXJhdG9yIGNsYXNz IG5hbWUsIGV2ZW4gaWYgZGVmYXVsdCAqLworCQlnZXRfb3BjbGFzc19uYW1lKGluZGNsYXNzLT52 YWx1ZXNba2V5bm9dLCBJbnZhbGlkT2lkLCAmZGVmaW5pdGlvbkJ1Zik7CisKKwkJLyogQWRkIG9w dGlvbnMgaWYgcmVsZXZhbnQgKi8KKwkJaWYgKGFtcm91dGluZS0+YW1jYW5vcmRlcikKKwkJewor CQkJLyogSWYgaXQgc3VwcG9ydHMgc29ydCBvcmRlcmluZywgcmVwb3J0IERFU0MgYW5kIE5VTExT IG9wdHMgKi8KKwkJCWlmIChvcHQgJiBJTkRPUFRJT05fREVTQykKKwkJCXsKKwkJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIERFU0MiKTsKKwkJCQkvKiBOVUxMUyBG SVJTVCBpcyB0aGUgZGVmYXVsdCBpbiB0aGlzIGNhc2UgKi8KKwkJCQlpZiAoIShvcHQgJiBJTkRP UFRJT05fTlVMTFNfRklSU1QpKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0 aW9uQnVmLCAiIE5VTExTIExBU1QiKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAob3B0 ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZk ZWZpbml0aW9uQnVmLCAiIE5VTExTIEZJUlNUIik7CisJCQl9CisJCX0KKworCQkvKiBYWFggZXhj bHVkZU9wcyB0aGluZ3kgd2FzIGhlcmU7IGRvIHdlIG5lZWQgYW55dGhpbmc/ICovCisJfQorCSpk ZWZpbml0aW9uID0gZGVmaW5pdGlvbkJ1Zi5kYXRhOworCisJLyogT3V0cHV0IHJlbG9wdGlvbnMg Ki8KKwkqcmVsb3B0aW9ucyA9IGZsYXR0ZW5fcmVsb3B0aW9ucyhpbmRleHJlbGlkKTsKKworCS8q IE91dHB1dCB0YWJsZXNwYWNlICovCisJeworCQlPaWQJCQl0YmxzcGM7CisKKwkJdGJsc3BjID0g Z2V0X3JlbF90YWJsZXNwYWNlKGluZGV4cmVsaWQpOworCQlpZiAoT2lkSXNWYWxpZCh0YmxzcGMp KQorCQkJKnRhYmxlc3BhY2UgPSBwc3RyZHVwKHF1b3RlX2lkZW50aWZpZXIoZ2V0X3RhYmxlc3Bh Y2VfbmFtZSh0YmxzcGMpKSk7CisJCWVsc2UKKwkJCSp0YWJsZXNwYWNlID0gTlVMTDsKKwl9CisK KwkvKiBSZXBvcnQgaW5kZXggcHJlZGljYXRlLCBpZiBhbnkgKi8KKwlpZiAoIWhlYXBfYXR0aXNu dWxsKGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRwcmVkLCBOVUxMKSkKKwl7CisJCU5vZGUJICAg Km5vZGU7CisJCURhdHVtCQlwcmVkRGF0dW07CisJCWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJ LyogQ29udmVydCB0ZXh0IHN0cmluZyB0byBub2RlIHRyZWUgKi8KKwkJcHJlZERhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCUFudW1fcGdfaW5kZXhf aW5kcHJlZCwgJmlzbnVsbCk7CisJCUFzc2VydCghaXNudWxsKTsKKwkJcHJlZFN0cmluZyA9IFRl eHREYXR1bUdldENTdHJpbmcocHJlZERhdHVtKTsKKwkJbm9kZSA9IChOb2RlICopIHN0cmluZ1Rv Tm9kZShwcmVkU3RyaW5nKTsKKwkJcGZyZWUocHJlZFN0cmluZyk7CisKKwkJLyogRGVwYXJzZSAq LworCQkqd2hlcmVDbGF1c2UgPQorCQkJZGVwYXJzZV9leHByZXNzaW9uKG5vZGUsIGNvbnRleHQs IGZhbHNlLCBmYWxzZSk7CisJfQorCWVsc2UKKwkJKndoZXJlQ2xhdXNlID0gTlVMTDsKKworCS8q IENsZWFuIHVwICovCisJUmVsZWFzZVN5c0NhY2hlKGh0X2lkeCk7CisJUmVsZWFzZVN5c0NhY2hl KGh0X2lkeHJlbCk7CisJUmVsZWFzZVN5c0NhY2hlKGh0X2FtKTsKK30KKworLyoKKyAqIE9idGFp biB0aGUgZGVwYXJzZWQgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGdpdmVuIGNvbHVtbiBvZiB0aGUg Z2l2ZW4gdGFibGUuCisgKgorICogQ2FsbGVyIG11c3QgaGF2ZSBzZXQgYSBjb3JyZWN0IGRlcGFy c2UgY29udGV4dC4KKyAqLworc3RhdGljIGNoYXIgKgorUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0 KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRubywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkJ IExpc3QgKipleHBycykKK3sKKwlOb2RlCSAgICpkZWZ2YWw7CisJY2hhcgkgICAqZGVmc3RyOwor CisJZGVmdmFsID0gYnVpbGRfY29sdW1uX2RlZmF1bHQocmVsLCBhdHRubyk7CisJZGVmc3RyID0g ZGVwYXJzZV9leHByZXNzaW9uKGRlZnZhbCwgZHBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCisJ LyogQ29sbGVjdCB0aGUgZXhwcmVzc2lvbiBmb3IgbGF0ZXIgcmVwbGljYXRpb24gc2FmZXR5IGNo ZWNrcyAqLworCWlmIChleHBycykKKwkJKmV4cHJzID0gbGFwcGVuZCgqZXhwcnMsIGRlZnZhbCk7 CisKKwlyZXR1cm4gZGVmc3RyOworfQorCisvKgorICogT2J0YWluIHRoZSBkZXBhcnNlZCBwYXJ0 aXRpb24gYm91bmQgZXhwcmVzc2lvbiBmb3IgdGhlIGdpdmVuIHRhYmxlLgorICovCitzdGF0aWMg Y2hhciAqCitSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKE9pZCByZWxpZCkKK3sKKwlEYXR1bQkJ ZGVwYXJzZWQ7CisJRGF0dW0JCWJvdW5kRGF0dW07CisJYm9vbAkJaXNudWxsOworCUhlYXBUdXBs ZQl0dXBsZTsKKworCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgcmVsaWQpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciByZWxhdGlvbiAldSIsCisJCQkgcmVsaWQpOworCisJYm91bmREYXR1bSA9IFN5 c0NhY2hlR2V0QXR0cihSRUxPSUQsIHR1cGxlLAorCQkJCQkJCQkgQW51bV9wZ19jbGFzc19yZWxw YXJ0Ym91bmQsCisJCQkJCQkJCSAmaXNudWxsKTsKKworCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rp b25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJICAgQ1N0cmluZ0dldFRleHREYXR1bShUZXh0 RGF0dW1HZXRDU3RyaW5nKGJvdW5kRGF0dW0pKSwKKwkJCQkJCQkJICAgcmVsaWQpOworCisJUmVs ZWFzZVN5c0NhY2hlKHR1cGxlKTsKKworCXJldHVybiBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFy c2VkKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZ2l2ZW4gb2JqZWN0IHR5cGUgYXMgYSBzdHJp bmcuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK3N0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5 cGUgb2JqdHlwZSkKK3sKKwlzd2l0Y2ggKG9ianR5cGUpCisJeworCQljYXNlIE9CSkVDVF9BR0dS RUdBVEU6CisJCQlyZXR1cm4gIkFHR1JFR0FURSI7CisJCWNhc2UgT0JKRUNUX0NBU1Q6CisJCQly ZXR1cm4gIkNBU1QiOworCQljYXNlIE9CSkVDVF9DT0xVTU46CisJCQlyZXR1cm4gIkNPTFVNTiI7 CisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoKKwkJCXJldHVybiAiQ09MTEFUSU9OIjsKKwkJY2Fz ZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJCXJldHVybiAiQ09OVkVSU0lPTiI7CisJCWNhc2UgT0JK RUNUX0RBVEFCQVNFOgorCQkJcmV0dXJuICJEQVRBQkFTRSI7CisJCWNhc2UgT0JKRUNUX0RPTUFJ TjoKKwkJCXJldHVybiAiRE9NQUlOIjsKKwkJY2FzZSBPQkpFQ1RfRVZFTlRfVFJJR0dFUjoKKwkJ CXJldHVybiAiRVZFTlQgVFJJR0dFUiI7CisJCWNhc2UgT0JKRUNUX0VYVEVOU0lPTjoKKwkJCXJl dHVybiAiRVhURU5TSU9OIjsKKwkJY2FzZSBPQkpFQ1RfRkRXOgorCQkJcmV0dXJuICJGT1JFSUdO IERBVEEgV1JBUFBFUiI7CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05fU0VSVkVSOgorCQkJcmV0dXJu ICJTRVJWRVIiOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1RBQkxFOgorCQkJcmV0dXJuICJGT1JF SUdOIFRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJCQlyZXR1cm4gIkZVTkNUSU9O IjsKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJCQlyZXR1cm4gIklOREVYIjsKKwkJY2FzZSBPQkpF Q1RfTEFOR1VBR0U6CisJCQlyZXR1cm4gIkxBTkdVQUdFIjsKKwkJY2FzZSBPQkpFQ1RfTEFSR0VP QkpFQ1Q6CisJCQlyZXR1cm4gIkxBUkdFIE9CSkVDVCI7CisJCWNhc2UgT0JKRUNUX01BVFZJRVc6 CisJCQlyZXR1cm4gIk1BVEVSSUFMSVpFRCBWSUVXIjsKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoK KwkJCXJldHVybiAiT1BFUkFUT1IgQ0xBU1MiOworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJ CXJldHVybiAiT1BFUkFUT1IiOworCQljYXNlIE9CSkVDVF9PUEZBTUlMWToKKwkJCXJldHVybiAi T1BFUkFUT1IgRkFNSUxZIjsKKwkJY2FzZSBPQkpFQ1RfUE9MSUNZOgorCQkJcmV0dXJuICJQT0xJ Q1kiOworCQljYXNlIE9CSkVDVF9ST0xFOgorCQkJcmV0dXJuICJST0xFIjsKKwkJY2FzZSBPQkpF Q1RfUlVMRToKKwkJCXJldHVybiAiUlVMRSI7CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJl dHVybiAiU0NIRU1BIjsKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlyZXR1cm4gIlNFUVVF TkNFIjsKKwkJY2FzZSBPQkpFQ1RfU1RBVElTVElDX0VYVDoKKwkJCXJldHVybiAiU1RBVElTVElD UyI7CisJCWNhc2UgT0JKRUNUX1RBQkxFOgorCQkJcmV0dXJuICJUQUJMRSI7CisJCWNhc2UgT0JK RUNUX1RBQkxFU1BBQ0U6CisJCQlyZXR1cm4gIlRBQkxFU1BBQ0UiOworCQljYXNlIE9CSkVDVF9U UklHR0VSOgorCQkJcmV0dXJuICJUUklHR0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFU SU9OOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIjsKKworCQkvKgorCQkg KiBjYXNlIE9CSkVDVF9UU0NPTkZJR19NQVBQSU5HOgorCQkgKgkJcmV0dXJuICJURVhUIFNFQVJD SCBDT05GSUdVUkFUSU9OIE1BUFBJTkciOworCQkgKi8KKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9O QVJZOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBESUNUSU9OQVJZIjsKKwkJY2FzZSBPQkpFQ1Rf VFNQQVJTRVI6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIFBBUlNFUiI7CisJCWNhc2UgT0JKRUNU X1RTVEVNUExBVEU6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIFRFTVBMQVRFIjsKKwkJY2FzZSBP QkpFQ1RfVFlQRToKKwkJCXJldHVybiAiVFlQRSI7CisJCWNhc2UgT0JKRUNUX1VTRVJfTUFQUElO RzoKKwkJCXJldHVybiAiVVNFUiBNQVBQSU5HIjsKKwkJY2FzZSBPQkpFQ1RfVklFVzoKKwkJCXJl dHVybiAiVklFVyI7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBv YmplY3QgdHlwZSAlZCIsIG9ianR5cGUpOworCX0KK30KKworLyoKKyAqIEdpdmVuIGEgQ29sbGVj dGVkQ29tbWFuZCwgcmV0dXJuIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBpdC4KKyAqCisgKiBU aGUgY29tbWFuZCBpcyBleHBhbmRlZCBmdWxseSBzbyB0aGF0IHRoZXJlIGFyZSBubyBhbWJpZ3Vp dGllcyBldmVuIGluIHRoZQorICogZmFjZSBvZiBzZWFyY2hfcGF0aCBjaGFuZ2VzLgorICovCitE YXR1bQorZGRsX2RlcGFyc2VfdG9fanNvbihQR19GVU5DVElPTl9BUkdTKQoreworCUNvbGxlY3Rl ZENvbW1hbmQgKmNtZCA9IChDb2xsZWN0ZWRDb21tYW5kICopIFBHX0dFVEFSR19QT0lOVEVSKDAp OworCWNoYXIJICAgKmNvbW1hbmQ7CisKKwljb21tYW5kID0gZGVwYXJzZV91dGlsaXR5X2NvbW1h bmQoY21kLCB0cnVlKTsKKworCWlmIChjb21tYW5kKQorCQlQR19SRVRVUk5fVEVYVF9QKGNzdHJp bmdfdG9fdGV4dChjb21tYW5kKSk7CisKKwlQR19SRVRVUk5fTlVMTCgpOworfQorCisvKgorICog RGVwYXJzZSBhbiBBbHRlckNvbGxhdGlvblN0bXQgKEFMVEVSIENPTExBVElPTikKKyAqCisgKiBH aXZlbiBhIGNvbGxhdGlvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwg cmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckNvbGxhdGlvbihPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpzdG10OworCUhlYXBUdXBsZQlj b2xUdXA7CisJRm9ybV9wZ19jb2xsYXRpb24gY29sRm9ybTsKKworCWNvbFR1cCA9IFNlYXJjaFN5 c0NhY2hlMShDT0xMT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKGNvbFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBjb2xsYXRpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJY29sRm9ybSA9IChGb3Jt X3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKGNvbFR1cCk7CisKKwlzdG10ID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIENPTExBVElPTiAle2lkZW50aXR5fU8gUkVGUkVTSCBWRVJTSU9OIiwgMSwKKwkJ CQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKGNvbEZvcm0tPmNvbGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgICBOYW1lU3Ry KGNvbEZvcm0tPmNvbGxuYW1lKSkpOworCisJUmVsZWFzZVN5c0NhY2hlKGNvbFR1cCk7CisKKwly ZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJGdW5jdGlvblN0bXQgKEFM VEVSIEZVTkNUSU9OKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2Ug dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRp bmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0 ZXJGdW5jdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckZ1bmN0 aW9uU3RtdCAqbm9kZSA9IChBbHRlckZ1bmN0aW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJl ZSAgICAqYWx0ZXJGdW5jOworCU9ialRyZWUgICAgKnNpZ247CisJSGVhcFR1cGxlCXByb2NUdXA7 CisJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCUxpc3QJICAgKnBhcmFtcyA9IE5JTDsKKwlMaXN0 CSAgICplbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWludAkJCWk7CisKKwkvKiBH ZXQgdGhlIHBnX3Byb2MgdHVwbGUgKi8KKwlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NP SUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAor CQkJIG9iamVjdElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9j VHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIEZVTkNUSU9O ICV7c2lnbmF0dXJlfXMgJXtkZWZpbml0aW9uOiB9cworCSAqLworCWFsdGVyRnVuYyA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBGVU5DVElPTiIsIDApOworCisJLyoKKwkgKiBBTFRFUiBGVU5DVElP TiBkb2VzIG5vdCBjaGFuZ2Ugc2lnbmF0dXJlIHNvIHdlIGNhbiB1c2UgY2F0YWxvZyB0byBnZXQK KwkgKiBpbnB1dCB0eXBlIE9pZHMuCisJICovCisJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5w cm9uYXJnczsgaSsrKQorCXsKKwkJT2JqVHJlZSAgICAqdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IiV7dHlwZX1UIiwgMCk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAidHlwZSIs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1 ZXNbaV0sIC0xKSk7CisJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKwl9CisKKwlzaWduID0gbmV3X29ianRyZWUoIiIpOworCisJYXBwZW5kX29i amVjdF9vYmplY3Qoc2lnbiwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElk KSk7CisJYXBwZW5kX2FycmF5X29iamVjdChzaWduLCAiKCV7YXJndW1lbnRzOiwgfXMpIiwgcGFy YW1zKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRnVuYywgIiV7c2lnbmF0dXJlfXMi LCBzaWduKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+YWN0aW9ucykKKwl7CisJCURlZkVsZW0g ICAgKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlICAgICp0bXBv YmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ2b2xhdGlsaXR5Iikg PT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoc3RyVmFsKGRlZmVsLT5hcmcp LCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdHJpY3QiKSA9 PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShpbnRWYWwoZGVmZWwtPmFyZykg PworCQkJCQkJCQkJIlJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUIiA6CisJCQkJCQkJCQkiQ0FM TEVEIE9OIE5VTEwgSU5QVVQiLCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJzZWN1cml0eSIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KGludFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCQkiU0VDVVJJVFkgREVGSU5FUiIgOiAiU0VD VVJJVFkgSU5WT0tFUiIsIDApOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgImxlYWtwcm9vZiIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGlu dFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCQkiTEVBS1BST09GIiA6ICJOT1QgTEVBS1BST09G IiwgMCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiY29zdCIpID09 IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDT1NUICV7Y29zdH1uIiwgMSwK KwkJCQkJCQkJCSJjb3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJCQkJCQkJZGVmR2V0TnVtZXJpYyhk ZWZlbCkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJvd3MiKSA9 PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUk9XUyIsIDApOworCQkJaWYg KGRlZkdldE51bWVyaWMoZGVmZWwpID09IDApCisJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9i aiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQllbHNlCisJCQkJYXBwZW5kX2Zsb2F0X29iamVjdCh0 bXBvYmosICIle3Jvd3N9biIsCisJCQkJCQkJCQlkZWZHZXROdW1lcmljKGRlZmVsKSk7CisJCX0K KwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2V0IikgPT0gMCkKKwkJeworCQkJ VmFyaWFibGVTZXRTdG10ICpzc3RtdCA9IChWYXJpYWJsZVNldFN0bXQgKikgZGVmZWwtPmFyZzsK KwkJCWNoYXIJICAgKnZhbHVlID0gRXh0cmFjdFNldFZhcmlhYmxlQXJncyhzc3RtdCk7CisKKwkJ CXRtcG9iaiA9IGRlcGFyc2VfRnVuY3Rpb25TZXQoc3N0bXQtPmtpbmQsIHNzdG10LT5uYW1lLCB2 YWx1ZSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3VwcG9ydCIp ID09IDApCisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZSgiU1VQUE9SVCIpOworCisJCQlBc3NlcnQocHJvY0Zvcm0tPnByb3N1cHBvcnQpOworCisJ CQkvKgorCQkJICogV2Ugc2hvdWxkIHF1YWxpZnkgdGhlIHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1l IGlmIGl0IHdvdWxkbid0IGJlCisJCQkgKiByZXNvbHZlZCBieSBsb29rdXAgaW4gdGhlIGN1cnJl bnQgc2VhcmNoIHBhdGguCisJCQkgKi8KKwkJCWFyZ3R5cGVzWzBdID0gSU5URVJOQUxPSUQ7CisJ CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle25hbWV9cyIsCisJCQkJCQkJCSBnZW5l cmF0ZV9mdW5jdGlvbl9uYW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJ CQlOSUwsIGFyZ3R5cGVzLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJ CQkJRVhQUl9LSU5EX05PTkUpKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5h bWUsICJwYXJhbGxlbCIpID09IDApCisJCXsKKwkJCWNoYXIJICAgKmZtdCA9IHBzcHJpbnRmKCJQ QVJBTExFTCAlcyIsIHN0clZhbChkZWZlbC0+YXJnKSk7CisKKwkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlKGZtdCk7CisJCX0KKworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJGdW5jLCAiJXtk ZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwor CXJldHVybiBhbHRlckZ1bmM7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT2JqZWN0U2No ZW1hU3RtdCAoQUxURVIgLi4uIFNFVCBTQ0hFTUEgY29tbWFuZCkKKyAqCisgKiBHaXZlbiB0aGUg b2JqZWN0IGFkZHJlc3MgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJu IHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck9iamVjdFNjaGVtYVN0bXQoT2JqZWN0QWRk cmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQkJICBPYmplY3RBZGRyZXNzIG9s ZHNjaGVtYSkKK3sKKwlBbHRlck9iamVjdFNjaGVtYVN0bXQgKm5vZGUgPSAoQWx0ZXJPYmplY3RT Y2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICphbHRlclN0bXQ7CisJY2hhcgkg ICAqZm10OworCWNoYXIJICAgKmlkZW50aXR5OworCWNoYXIJICAgKm5ld3NjaGVtYTsKKwljaGFy CSAgICpvbGRzY2huYW1lOworCWNoYXIJICAgKmlkZW50OworCisJbmV3c2NoZW1hID0gbm9kZS0+ bmV3c2NoZW1hOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQUxURVIgJXMg JXtpZGVudGl0eX1zIFNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SQorCSAqLworCWZtdCA9IHBzcHJp bnRmKCJBTFRFUiAlcyIsIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9iamVjdFR5cGUpKTsKKwlh bHRlclN0bXQgPSBuZXdfb2JqdHJlZShmbXQpOworCisJLyoKKwkgKiBTaW5jZSB0aGUgY29tbWFu ZCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mCisJICog Y2F0YWxvZ3MsIGdldE9iamVjdElkZW50aXR5IHJldHVybnMgdGhlIG9iamVjdCBuYW1lIHdpdGgg dGhlIGFscmVhZHkKKwkgKiBjaGFuZ2VkIHNjaGVtYS4gIFRoZSBvdXRwdXQgb2Ygb3VyIGRlcGFy c2luZyBtdXN0IHJldHVybiB0aGUgb3JpZ2luYWwKKwkgKiBzY2hlbWEgbmFtZSwgaG93ZXZlciwg c28gd2UgY2hvcCB0aGUgc2NoZW1hIG5hbWUgb2ZmIHRoZSBpZGVudGl0eQorCSAqIHN0cmluZyBh bmQgdGhlbiBwcmVwZW5kIHRoZSBxdW90ZWQgc2NoZW1hIG5hbWUuCisJICoKKwkgKiBYWFggVGhp cyBpcyBwcmV0dHkgY2x1bmt5LiBDYW4gd2UgZG8gYmV0dGVyPworCSAqLworCWlkZW50aXR5ID0g Z2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKTsKKwlvbGRzY2huYW1lID0gZ2V0X25h bWVzcGFjZV9uYW1lKG9sZHNjaGVtYS5vYmplY3RJZCk7CisJaWYgKCFvbGRzY2huYW1lKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2NoZW1hIHdpdGggT0lEICV1IiwK KwkJCSBvbGRzY2hlbWEub2JqZWN0SWQpOworCisJaWRlbnQgPSBwc3ByaW50ZigiJXMlcyIsIHF1 b3RlX2lkZW50aWZpZXIob2xkc2NobmFtZSksCisJCQkJCSBpZGVudGl0eSArIHN0cmxlbihxdW90 ZV9pZGVudGlmaWVyKG5ld3NjaGVtYSkpKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlclN0 bXQsICIle2lkZW50aXR5fXMiLCBpZGVudCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRl clN0bXQsICJTRVQgU0NIRU1BICV7bmV3c2NoZW1hfUkiLCBuZXdzY2hlbWEpOworCisJcmV0dXJu IGFsdGVyU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBHUkFOVC9SRVZPS0UgY29tbWFuZC4K KyAqCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfR3JhbnRTdG10KENvbGxlY3RlZENv bW1hbmQgKmNtZCkKK3sKKwlJbnRlcm5hbEdyYW50ICppc3RtdDsKKwlPYmpUcmVlICAgICpncmFu dFN0bXQ7CisJY2hhcgkgICAqZm10OworCWNoYXIJICAgKm9ianR5cGU7CisJTGlzdAkgICAqbGlz dDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9pZAkJCWNsYXNzSWQ7CisJT2JqVHJlZSAgICAqdG1w OworCisJaXN0bXQgPSBjbWQtPmQuZ3JhbnQuaXN0bXQ7CisKKwkvKgorCSAqIElmIHRoZXJlIGFy ZSBubyBvYmplY3RzIGZyb20gIkFMTCAuLi4gSU4gU0NIRU1BIiB0byBiZSBncmFudGVkLCB0aGVu IHdlCisJICogbmVlZCBub3QgZG8gYW55dGhpbmcuCisJICovCisJaWYgKGlzdG10LT5vYmplY3Rz ID09IE5JTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzd2l0Y2ggKGlzdG10LT5vYmp0eXBlKQorCXsK KwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJCW9ianR5cGUg PSAiVEFCTEUiOworCQkJY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKKwkJCWJyZWFrOwor CQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKwkJCW9ianR5cGUgPSAiU0VRVUVOQ0UiOworCQkJY2xh c3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9ET01B SU46CisJCQlvYmp0eXBlID0gIkRPTUFJTiI7CisJCQljbGFzc0lkID0gVHlwZVJlbGF0aW9uSWQ7 CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRkRXOgorCQkJb2JqdHlwZSA9ICJGT1JFSUdOIERB VEEgV1JBUFBFUiI7CisJCQljbGFzc0lkID0gRm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZDsK KwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1NFUlZFUjoKKwkJCW9ianR5cGUgPSAi Rk9SRUlHTiBTRVJWRVIiOworCQkJY2xhc3NJZCA9IEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkOwor CQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgorCQkJb2JqdHlwZSA9ICJGVU5DVElP TiI7CisJCQljbGFzc0lkID0gUHJvY2VkdXJlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNl IE9CSkVDVF9QUk9DRURVUkU6CisJCQlvYmp0eXBlID0gIlBST0NFRFVSRSI7CisJCQljbGFzc0lk ID0gUHJvY2VkdXJlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9ST1VUSU5F OgorCQkJb2JqdHlwZSA9ICJST1VUSU5FIjsKKwkJCWNsYXNzSWQgPSBQcm9jZWR1cmVSZWxhdGlv bklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0xBTkdVQUdFOgorCQkJb2JqdHlwZSA9ICJM QU5HVUFHRSI7CisJCQljbGFzc0lkID0gTGFuZ3VhZ2VSZWxhdGlvbklkOworCQkJYnJlYWs7CisJ CWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNUOgorCQkJb2JqdHlwZSA9ICJMQVJHRSBPQkpFQ1QiOwor CQkJY2xhc3NJZCA9IExhcmdlT2JqZWN0UmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9C SkVDVF9TQ0hFTUE6CisJCQlvYmp0eXBlID0gIlNDSEVNQSI7CisJCQljbGFzc0lkID0gTmFtZXNw YWNlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJb2JqdHlw ZSA9ICJUWVBFIjsKKwkJCWNsYXNzSWQgPSBUeXBlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQlj YXNlIE9CSkVDVF9EQVRBQkFTRToKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJCW9ianR5 cGUgPSAiIjsKKwkJCWNsYXNzSWQgPSBJbnZhbGlkT2lkOworCQkJZWxvZyhFUlJPUiwgImdsb2Jh bCBvYmplY3RzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxv ZyhFUlJPUiwgImludmFsaWQgT0JKRUNUIHZhbHVlICVkIiwgaXN0bXQtPm9ianR5cGUpOworCX0K KworCS8qIEdSQU5UIFRPIG9yIFJFVk9LRSBGUk9NICovCisJaWYgKGlzdG10LT5pc19ncmFudCkK KwkJZm10ID0gcHNwcmludGYoIkdSQU5UIik7CisJZWxzZQorCQlmbXQgPSBwc3ByaW50ZigiUkVW T0tFIik7CisKKwlncmFudFN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDApOworCisJLyogYnVp bGQgYSBsaXN0IG9mIHByaXZpbGVnZXMgdG8gZ3JhbnQvcmV2b2tlICovCisJaWYgKGlzdG10LT5h bGxfcHJpdnMpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxMIFBSSVZJTEVHRVMiLCAw KTsKKwkJbGlzdCA9IGxpc3RfbWFrZTEobmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCWVs c2UKKwl7CisJCWxpc3QgPSBOSUw7CisKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0lO U0VSVCkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJJTlNFUlQi KSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9TRUxFQ1QpCisJCQlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiU0VMRUNUIikpOworCQlpZiAoaXN0bXQtPnBy aXZpbGVnZXMgJiBBQ0xfVVBEQVRFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmlu Z19vYmplY3QoIlVQREFURSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0RFTEVU RSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJERUxFVEUiKSk7 CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9UUlVOQ0FURSkKKwkJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJUUlVOQ0FURSIpKTsKKwkJaWYgKGlzdG10LT5w cml2aWxlZ2VzICYgQUNMX1JFRkVSRU5DRVMpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf c3RyaW5nX29iamVjdCgiUkVGRVJFTkNFUyIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYg QUNMX1RSSUdHRVIpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgi VFJJR0dFUiIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0VYRUNVVEUpCisJCQls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiRVhFQ1VURSIpKTsKKwkJaWYg KGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1VTQUdFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X3N0cmluZ19vYmplY3QoIlVTQUdFIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBB Q0xfQ1JFQVRFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIkNS RUFURSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NSRUFURV9URU1QKQorCQkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlRFTVBPUkFSWSIpKTsKKwkJ aWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NPTk5FQ1QpCisJCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfc3RyaW5nX29iamVjdCgiQ09OTkVDVCIpKTsKKworCQlpZiAoIWlzdG10LT5pc19n cmFudCAmJiBpc3RtdC0+Z3JhbnRfb3B0aW9uKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3Jh bnRTdG10LCAiJXtncmFudF9vcHRpb259cyIsCisJCQkJCQkJCSBpc3RtdC0+Z3JhbnRfb3B0aW9u ID8gIkdSQU5UIE9QVElPTiBGT1IiIDogIiIpOworCisJCWlmIChpc3RtdC0+Y29sX3ByaXZzICE9 IE5JTCkKKwkJeworCQkJTGlzdENlbGwgICAqb2NlbGw7CisKKwkJCWZvcmVhY2gob2NlbGwsIGlz dG10LT5jb2xfcHJpdnMpCisJCQl7CisJCQkJQWNjZXNzUHJpdiAqcHJpdiA9IGxmaXJzdChvY2Vs bCk7CisJCQkJTGlzdAkgICAqY29scyA9IE5JTDsKKworCQkJCXRtcCA9IG5ld19vYmp0cmVlKCIi KTsKKwkJCQlmb3JlYWNoKGNlbGwsIHByaXYtPmNvbHMpCisJCQkJeworCQkJCQlTdHJpbmcJICAg KmNvbG5hbWUgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGNlbGwpOworCisJCQkJCWNvbHMgPSBsYXBw ZW5kKGNvbHMsCisJCQkJCQkJCSAgIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbChjb2xuYW1lKSkp OworCQkJCX0KKwkJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwgIigle2NvbHM6LCB9cykiLCBj b2xzKTsKKworCQkJCWlmIChwcml2LT5wcml2X25hbWUgPT0gTlVMTCkKKwkJCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QoZ3JhbnRTdG10LCAiJXtwcml2fXMiLCAiQUxMIFBSSVZJTEVHRVMiKTsKKwkJ CQllbHNlCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50U3RtdCwgIiV7cHJpdn1zIiwg cHJpdi0+cHJpdl9uYW1lKTsKKworCQkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCQkJfQorCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnRT dG10LCAiJXtwcml2aWxlZ2VzOiwgfXMgT04iLCBsaXN0KTsKKworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGdyYW50U3RtdCwgIiV7b2JqdHlwZX1zIiwgb2JqdHlwZSk7CisKKwkvKiB0YXJnZXQgb2Jq ZWN0cy4gIFdlIHVzZSBvYmplY3QgaWRlbnRpdGllcyBoZXJlICovCisJbGlzdCA9IE5JTDsKKwlm b3JlYWNoKGNlbGwsIGlzdG10LT5vYmplY3RzKQorCXsKKwkJT2lkCQkJb2JqaWQgPSBsZmlyc3Rf b2lkKGNlbGwpOworCQlPYmplY3RBZGRyZXNzIGFkZHI7CisKKwkJYWRkci5jbGFzc0lkID0gY2xh c3NJZDsKKwkJYWRkci5vYmplY3RJZCA9IG9iamlkOworCQlhZGRyLm9iamVjdFN1YklkID0gMDsK KworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1zIiwgMSwKKwkJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHIs IGZhbHNlKSk7CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnRTdG10LCAiJXtwcml2dGFyZ2V0Oiwg fXMiLCBsaXN0KTsKKworCWlmIChpc3RtdC0+aXNfZ3JhbnQpCisJCWFwcGVuZF9mb3JtYXRfc3Ry aW5nKGdyYW50U3RtdCwgIlRPIik7CisJZWxzZQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhncmFu dFN0bXQsICJGUk9NIik7CisKKwkvKiBsaXN0IG9mIGdyYW50ZWVzICovCisJbGlzdCA9IE5JTDsK Kwlmb3JlYWNoKGNlbGwsIGlzdG10LT5ncmFudGVlcykKKwl7CisJCU9pZAkJCWdyYW50ZWUgPSBs Zmlyc3Rfb2lkKGNlbGwpOworCisJCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKGdyYW50 ZWUpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9 CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGdyYW50U3RtdCwgIiV7Z3JhbnRlZXM6LCB9cyIsIGxp c3QpOworCisJLyogdGhlIHdvcmRpbmcgb2YgdGhlIGdyYW50IG9wdGlvbiBpcyB2YXJpYWJsZSAu Li4gKi8KKwlpZiAoaXN0bXQtPmlzX2dyYW50KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChncmFu dFN0bXQsICIle2dyYW50X29wdGlvbn1zIiwKKwkJCQkJCQkgaXN0bXQtPmdyYW50X29wdGlvbiA/ ICJXSVRIIEdSQU5UIE9QVElPTiIgOiAiIik7CisKKwlpZiAoaXN0bXQtPmdyYW50b3JfdWlkKQor CXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAqcm9sZW5hbWU7CisKKwkJcm9sdHVw ID0gU2VhcmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9iamVjdElkR2V0RGF0dW0oaXN0bXQtPmdyYW50 b3JfdWlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChyb2x0dXApKQorCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkJIGVy cm1zZygicm9sZSB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsIGlzdG10LT5ncmFudG9yX3Vp ZCkpKTsKKworCQlyb2xlbmFtZSA9IE5hbWVTdHIoKChGb3JtX3BnX2F1dGhpZCkgR0VUU1RSVUNU KHJvbHR1cCkpLT5yb2xuYW1lKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3JhbnRTdG10LCAi R1JBTlRFRCBCWSAle3JvbGVuYW1lfXMiLCByb2xlbmFtZSk7CisJCVJlbGVhc2VTeXNDYWNoZShy b2x0dXApOworCX0KKworCWlmICghaXN0bXQtPmlzX2dyYW50KQorCXsKKwkJaWYgKGlzdG10LT5i ZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0 bXQsICIle2Nhc2NhZGV9cyIsICJDQVNDQURFIik7CisJCWVsc2UKKwkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGdyYW50U3RtdCwgIiV7Y2FzY2FkZX1zIiwgIiIpOworCX0KKworCXJldHVybiBncmFu dFN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT3BlcmF0b3JTdG10IChBTFRFUiBP UEVSQVRPUiAuLi4gU0VUIC4uLikuCisgKgorICogR2l2ZW4gYW4gb3BlcmF0b3IgT0lEIGFuZCB0 aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiBy ZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQWx0ZXJPcGVyYXRvclN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJSGVhcFR1cGxlCW9wclR1cDsKKwlBbHRlck9wZXJhdG9yU3RtdCAqbm9kZSA9IChBbHRlck9w ZXJhdG9yU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqYWx0ZXJvcDsKKwlGb3JtX3Bn X29wZXJhdG9yIG9wckZvcm07CisJTGlzdENlbGwgICAqY2VsbDsKKwlMaXN0CSAgICpsaXN0ID0g TklMOworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQsIE9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3ByVHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdpdGggT0lEICV1Iiwgb2Jq ZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKG9wclR1cCk7 CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBPUEVSQVRPUiAle2lk ZW50aXR5fU8gKCV7bGVmdF90eXBlfVQsICV7cmlnaHRfdHlwZX1UKSBTRVQKKwkgKiAoJXtlbGVt czosIH1zKQorCSAqLworCWFsdGVyb3AgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgT1BFUkFUT1Ig JXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCQkgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIExFRlRBUkcg Ki8KKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9v YmplY3QoYWx0ZXJvcCwgIigle2xlZnRfdHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3R5cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGFsdGVyb3AsICIoJXtsZWZ0X3R5cGV9cyIsICJOT05FIik7CisKKwkvKiBSSUdIVEFSRyAq LworCUFzc2VydChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChhbHRlcm9wLCAiLCAle3JpZ2h0X3R5cGV9VCkiLAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkpOworCisJZm9yZWFjaChjZWxsLCBub2Rl LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChj ZWxsKTsKKwkJT2JqVHJlZSAgICAqdG1wb2JqID0gTlVMTDsKKworCQlpZiAoc3RyY21wKGVsZW0t PmRlZm5hbWUsICJyZXN0cmljdCIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJSRVNUUklDVD0iLCAxLAorCQkJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJy ZXN0cmljdCIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkpCisJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCQkJIG9wckZvcm0tPm9wcnJlc3QpKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1zIiwgIk5PTkUiKTsKKwkJfQorCQllbHNlIGlmIChz dHJjbXAoZWxlbS0+ZGVmbmFtZSwgImpvaW4iKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiSk9JTj0iLCAxLAorCQkJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJqb2luIik7CisJCQlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkKKwkJCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkJCQkgb3ByRm9ybS0+b3Byam9pbikpOworCQkJZWxzZQorCQkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfXMiLCAiTk9ORSIpOworCQl9CisKKwkJQXNzZXJ0KHRt cG9iaik7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJvcCwgIlNFVCAoJXtlbGVtczosIH1z KSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gYWx0ZXJv cDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgT1BFUkFUT1IgRkFNSUxZIEFERC9EUk9Q IGNvbW1hbmQuCisgKgorICogR2l2ZW4gdGhlIENvbGxlY3RlZENvbW1hbmQsIHJldHVybiB0aGUg SlNPTgorICogYmxvYiByZXByZXNlbnRpbmcgdGhlIEFsdGVyIE9wIGNvbW1hbmQuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPcEZhbWlseShDb2xsZWN0ZWRDb21tYW5kICpj bWQpCit7CisJT2JqVHJlZSAgICAqYWx0ZXJPcEZhbTsKKwlBbHRlck9wRmFtaWx5U3RtdCAqc3Rt dCA9IChBbHRlck9wRmFtaWx5U3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZnRw OworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxs ICAgKmNlbGw7CisKKwlmdHAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsCisJCQkJCQkg IE9iamVjdElkR2V0RGF0dW0oY21kLT5kLm9wZmFtLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQoZnRwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIG9wZXJhdG9yIGZhbWlseSAldSIsCisJCQkgY21kLT5kLm9wZmFtLmFkZHJlc3Mub2Jq ZWN0SWQpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKGZ0cCk7CisK KwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBPUEVSQVRPUiBGQU1JTFkg JXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1lfUkgQUREL0RST1AKKwkgKiAle2l0ZW1zOix9cwor CSAqLworCWFsdGVyT3BGYW0gPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgT1BFUkFUT1IgRkFNSUxZ ICV7aWRlbnRpdHl9RCAiCisJCQkJCQkJCSJVU0lORyAle2FtbmFtZX1JIiwgMiwKKwkJCQkJCQkJ ImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJIE5hbWVTdHIob3BmRm9y bS0+b3BmbmFtZSkpLAorCQkJCQkJCQkiYW1uYW1lIiwgT2JqVHlwZVN0cmluZywgc3RtdC0+YW1u YW1lKTsKKworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBjbWQtPmQub3BmYW0ub3BlcmF0 b3JzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKm9wZXIgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRy ZWUgICAgKnRtcG9iajsKKworCQkvKgorCQkgKiBWZXJib3NlIHN5bnRheAorCQkgKgorCQkgKiBP UEVSQVRPUiAle251bX1uICV7b3BlcmF0b3J9Tygle2x0eXBlfVQsICV7cnR5cGV9VCkgJXtwdXJw b3NlfXMKKwkJICovCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPUEVSQVRPUiAle251bX1u IiwgMSwKKwkJCQkJCQkJIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVyLT5udW1iZXIpOworCisJ CS8qIEFkZCB0aGUgb3BlcmF0b3IgbmFtZTsgdGhlIERST1AgY2FzZSBkb2Vzbid0IGhhdmUgdGhp cyAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wb2JqLCAiJXtvcGVyYXRvcn1PIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgb3Blci0+b2JqZWN0KSk7 CisJCX0KKworCQkvKiBBZGQgdGhlIHR5cGVzICovCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cG9iaiwgIigle2x0eXBlfVQsIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+ bGVmdHR5cGUsIC0xKSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cnR5cGV9 VCkiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5yaWdodHR5cGUsIC0xKSk7 CisKKwkJLyogQWRkIHRoZSBGT1IgU0VBUkNIIC8gRk9SIE9SREVSIEJZIGNsYXVzZTsgbm90IGlu IHRoZSBEUk9QIGNhc2UgKi8KKwkJaWYgKCFzdG10LT5pc0Ryb3ApCisJCXsKKwkJCWlmIChvcGVy LT5zb3J0ZmFtaWx5ID09IEludmFsaWRPaWQpCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w b2JqLCAiJXtwdXJwb3NlfXMiLCAiRk9SIFNFQVJDSCIpOworCQkJZWxzZQorCQkJeworCQkJCU9i alRyZWUgICAgKnRtcG9iajI7CisKKwkJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIkZPUiBP UkRFUiBCWSIsIDApOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iajIsICIle29wZmFt aWx5fUQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvckZh bWlseVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIG9wZXItPnNvcnRmYW1pbHkpKTsKKwkJ CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3B1cnBvc2V9cyIsIHRtcG9iajIpOwor CQkJfQorCQl9CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJfQorCisJZm9yZWFjaChjZWxsLCBjbWQtPmQub3BmYW0ucHJvY2VkdXJlcykKKwl7 CisJCU9wRmFtaWx5TWVtYmVyICpwcm9jID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlICAgICp0 bXBvYmo7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkZVTkNUSU9OICV7bnVtfW4gKCV7 bHR5cGV9VCwgJXtydHlwZX1UKSIsIDMsCisJCQkJCQkJCSJudW0iLCBPYmpUeXBlSW50ZWdlciwg cHJvYy0+bnVtYmVyLAorCQkJCQkJCQkibHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQlu ZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jLT5sZWZ0dHlwZSwgLTEpLAorCQkJCQkJCQkicnR5cGUi LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jLT5yaWdo dHR5cGUsIC0xKSk7CisKKwkJLyoKKwkJICogQWRkIHRoZSBmdW5jdGlvbiBuYW1lIGFuZCBhcmcg dHlwZXM7IHRoZSBEUk9QIGNhc2UgZG9lc24ndCBoYXZlCisJCSAqIHRoaXMKKwkJICovCisJCWlm ICghc3RtdC0+aXNEcm9wKQorCQl7CisJCQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJCUZvcm1fcGdf cHJvYyBwcm9jRm9ybTsKKwkJCU9pZAkJICAgKnByb2FyZ3R5cGVzOworCQkJTGlzdAkgICAqYXJn bGlzdCA9IE5JTDsKKwkJCWludAkJCWk7CisKKwkJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEo UFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jLT5vYmplY3QpKTsKKwkJCWlmICghSGVhcFR1 cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJCXByb2NGb3JtID0gKEZvcm1f cGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCQlwcm9hcmd0eXBlcyA9IHByb2NGb3Jt LT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25h cmdzOyBpKyspCisJCQl7CisJCQkJT2JqVHJlZSAgICAqYXJnOworCisJCQkJYXJnID0gbmV3X29i anRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCQlhcmdsaXN0ID0gbGFwcGVu ZChhcmdsaXN0LCBuZXdfb2JqZWN0X29iamVjdChhcmcpKTsKKwkJCX0KKworCQkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wb2JqLCAiJXtmdW5jdGlvbn1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5h bWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRt cG9iaiwgIigiKTsKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd0eXBlczos IH1UIiwgYXJnbGlzdCk7CisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7CisK KwkJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWlmIChzdG10LT5pc0Ryb3Ap CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVyT3BGYW0sICJEUk9QIik7CisJZWxzZQorCQlh cHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlck9wRmFtLCAiQUREIik7CisKKwlhcHBlbmRfYXJyYXlf b2JqZWN0KGFsdGVyT3BGYW0sICIle2l0ZW1zOiwgfXMiLCBsaXN0KTsKKworCVJlbGVhc2VTeXND YWNoZShmdHApOworCisJcmV0dXJuIGFsdGVyT3BGYW07Cit9CisKKy8qCisgKiBEZXBhcnNlIGFu IEFsdGVyT3duZXJTdG10IChBTFRFUiAuLi4gT1dORVIgVE8gLi4uKS4KKyAqCisgKiBHaXZlbiB0 aGUgb2JqZWN0IGFkZHJlc3MgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0 dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck93bmVyU3RtdChPYmplY3RBZGRyZXNz IGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlck93bmVyU3RtdCAqbm9kZSA9IChB bHRlck93bmVyU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqb3duZXJTdG10OworCWNo YXIJICAgKmZtdDsKKworCWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1zIE9X TkVSIFRPICUle25ld293bmVyfUkiLAorCQkJCSAgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9i amVjdFR5cGUpKTsKKworCW93bmVyU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJ CQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSAgIGdldE9iamVjdElkZW50 aXR5KCZhZGRyZXNzLCBmYWxzZSksCisJCQkJCQkJICAgIm5ld293bmVyIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCQkgICBnZXRfcm9sZXNwZWNfbmFtZShub2RlLT5uZXdvd25lcikpOworCisJcmV0 dXJuIG93bmVyU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJTZXFTdG10LgorICoK KyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCBhIHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclNlcVN0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAqYWx0ZXJTZXE7CisJT2JqVHJlZSAg ICAqdG1wb2JqOworCVJlbGF0aW9uCXJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBz ZXFkYXRhOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRm9y bV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVw bGU7CisJQWx0ZXJTZXFTdG10ICphbHRlclNlcVN0bXQgPSAoQWx0ZXJTZXFTdG10ICopIHBhcnNl dHJlZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2Vw YXJhdGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1w dHkgaGVyZS4KKwkgKi8KKwlpZiAoYWx0ZXJTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVy biBOVUxMOworCisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJ cmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJl bCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlz ZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVj dElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAor CQkJIG9iamVjdElkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNU KHNlcXR1cGxlKTsKKworCWFsdGVyU2VxID0gbmV3X29ianRyZWUoIkFMVEVSIFNFUVVFTkNFIik7 CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+ cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlv bikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyU2VxLCAiJXtpZGVudGl0eX1EIiwgdG1w b2JqKTsKKworCWZvcmVhY2goY2VsbCwgKChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlKS0+b3B0 aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7 CisJCU9iakVsZW0gICAgKm5ld2VsbTsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJj YWNoZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DYWNoZShhbHRlclNlcSwgc2Vx Zm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImN5Y2xlIikg PT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0N5Y2xlKGFsdGVyU2VxLCBzZXFmb3JtLCBm YWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiaW5jcmVtZW50IikgPT0g MCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KGFsdGVyU2VxLCBzZXFmb3Jt LCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWludmFsdWUiKSA9 PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWludmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0s IGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJtYXh2YWx1ZSIpID09 IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9NYXh2YWx1ZShhbHRlclNlcSwgc2VxZm9ybSwg ZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0YXJ0IikgPT0gMCkK KwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChhbHRlclNlcSwgc2VxZm9ybSwgZmFs c2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RhcnQiKSA9PSAwKQor CQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfUmVzdGFydChhbHRlclNlcSwgc2VxZGF0YSk7CisJCWVs c2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAib3duZWRfYnkiKSA9PSAwKQorCQkJbmV3ZWxt ID0gZGVwYXJzZV9TZXFfT3duZWRCeShhbHRlclNlcSwgb2JqZWN0SWQsIGZhbHNlKTsKKwkJZWxz ZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc2VxdWVuY2Ugb3B0aW9uICVzIiwgZWxlbS0+ZGVm bmFtZSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKworCWFwcGVu ZF9hcnJheV9vYmplY3QoYWx0ZXJTZXEsICIle2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCisJ dGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxh dGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBhbHRlclNlcTsKK30KKworLyoKKyAq IERlcGFyc2UgYW4gQWx0ZXJUeXBlU3RtdC4KKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCBh IHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJl c2VudGluZyB0aGUgYWx0ZXIgdHlwZS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9B bHRlclR5cGVTZXRTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqY21kKQoreworCUFsdGVyVHlwZVN0 bXQgKmFsdGVyVHlwZVNldFN0bXQgPSAoQWx0ZXJUeXBlU3RtdCAqKSBjbWQ7CisJT2JqVHJlZSAg ICAqYWx0ZXJUeXBlOworCUxpc3RDZWxsICAgKnBsOworCUxpc3QJICAgKmVsZW1zID0gTklMOwor CUhlYXBUdXBsZQl0eXBUdXA7CisJRm9ybV9wZ190eXBlIHR5cEZvcm07CisKKwl0eXBUdXAgPSBT ZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZCh0eXBUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0eXBGb3JtID0gKEZv cm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cFR1cCk7CisKKwlhbHRlclR5cGUgPSBuZXdfb2JqdHJl ZSgiQUxURVIgVFlQRSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyVHlwZSwgIiV7aWRl bnRpdHl9RCBTRVQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCWZvcmVhY2gocGwsIGFsdGVy VHlwZVNldFN0bXQtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpkZWZlbCA9IChEZWZFbGVt ICopIGxmaXJzdChwbCk7CisJCU9iakVsZW0gICAgKm5ld2VsbTsKKworCQlpZiAoc3RyY21wKGRl ZmVsLT5kZWZuYW1lLCAic3RvcmFnZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVf U3RvcmFnZShhbHRlclR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1l LCAicmVjZWl2ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfUmVjZWl2ZShhbHRl clR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2VuZCIpID09 IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfU2VuZChhbHRlclR5cGUsIHR5cEZvcm0pOwor CQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHlwbW9kX2luIikgPT0gMCkKKwkJCW5ld2Vs bSA9IGRlcGFyc2VfVHlwZV9UeXBtb2RfSW4oYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0 cmNtcChkZWZlbC0+ZGVmbmFtZSwgInR5cG1vZF9vdXQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVw YXJzZV9UeXBlX1R5cG1vZF9PdXQoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChk ZWZlbC0+ZGVmbmFtZSwgImFuYWx5emUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBl X0FuYWx5emUoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgInN1YnNjcmlwdCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfU3Vic2NyaXB0 KGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHR5 cGUgb3B0aW9uICVzIiwgZGVmZWwtPmRlZm5hbWUpOworCisJCWVsZW1zID0gbGFwcGVuZChlbGVt cywgbmV3ZWxtKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyVHlwZSwgIigle2Rl ZmluaXRpb246IH1zKSIsIGVsZW1zKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCisJ cmV0dXJuIGFsdGVyVHlwZTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDb21wb3NpdGVUeXBlU3Rt dCAoQ1JFQVRFIFRZUEUgQVMpCisgKgorICogR2l2ZW4gYSBDb21wb3NpdGUgdHlwZSBPSUQgYW5k IHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJl cHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9Db21wb3NpdGVUeXBlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlDb21wb3NpdGVUeXBlU3RtdCAqbm9kZSA9IChDb21wb3NpdGVUeXBlU3RtdCAqKSBwYXJz ZXRyZWU7CisJT2JqVHJlZSAgICAqY29tcG9zaXRlOworCUhlYXBUdXBsZQl0eXB0dXA7CisJRm9y bV9wZ190eXBlIHR5cGZvcm07CisJUmVsYXRpb24JdHlwZXJlbDsKKwlMaXN0CSAgICpkcGNvbnRl eHQ7CisJTGlzdAkgICAqdGFibGVlbHRzID0gTklMOworCisJLyogRmluZCB0aGUgcGdfdHlwZSBl bnRyeSBhbmQgb3BlbiB0aGUgY29ycmVzcG9uZGluZyByZWxhdGlvbiAqLworCXR5cHR1cCA9IFNl YXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKHR5cHR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciB0eXBlICV1Iiwgb2JqZWN0SWQpOworCXR5cGZvcm0gPSAoRm9ybV9wZ190eXBl KSBHRVRTVFJVQ1QodHlwdHVwKTsKKwl0eXBlcmVsID0gcmVsYXRpb25fb3Blbih0eXBmb3JtLT50 eXByZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4 dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodHlwZXJlbCksCisJCQkJCQkJCQlSZWxhdGlv bkdldFJlbGlkKHR5cGVyZWwpKTsKKworCWNvbXBvc2l0ZSA9IG5ld19vYmp0cmVlX1ZBKCJDUkVB VEUgVFlQRSIsIDApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbXBvc2l0ZSwgIiV7aWRlbnRp dHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJs ZUVsZW1lbnRzKHR5cGVyZWwsIG5vZGUtPmNvbGRlZmxpc3QsIGRwY29udGV4dCwKKwkJCQkJCQkJ CSAgZmFsc2UsCS8qIG5vdCB0eXBlZCAqLworCQkJCQkJCQkJICB0cnVlKTsJLyogY29tcG9zaXRl IHR5cGUgKi8KKworCWFwcGVuZF9hcnJheV9vYmplY3QoY29tcG9zaXRlLCAiQVMgKCV7Y29sdW1u czosIH1zKSIsIHRhYmxlZWx0cyk7CisKKwl0YWJsZV9jbG9zZSh0eXBlcmVsLCBBY2Nlc3NTaGFy ZUxvY2spOworCVJlbGVhc2VTeXNDYWNoZSh0eXB0dXApOworCisJcmV0dXJuIGNvbXBvc2l0ZTsK K30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVDb252ZXJzaW9uU3RtdAorICoKKyAqIEdpdmVu IGEgY29udmVyc2lvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0 dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVDb252ZXJzaW9uKE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZQljb25UdXA7CisJUmVsYXRpb24JY29u dnJlbDsKKwlGb3JtX3BnX2NvbnZlcnNpb24gY29uRm9ybTsKKwlPYmpUcmVlICAgICpjY1N0bXQ7 CisJT2JqVHJlZSAgICAqdG1wT2JqOworCisJY29udnJlbCA9IHRhYmxlX29wZW4oQ29udmVyc2lv blJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJY29uVHVwID0gZ2V0X2NhdGFsb2dfb2Jq ZWN0X2J5X29pZChjb252cmVsLCBBbnVtX3BnX2NvbnZlcnNpb25fb2lkLCBvYmplY3RJZCk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBjb252ZXJzaW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNvbkZv cm0gPSAoRm9ybV9wZ19jb252ZXJzaW9uKSBHRVRTVFJVQ1QoY29uVHVwKTsKKworCS8qCisJICog VmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle2RlZmF1bHR9cyBDT05WRVJTSU9OICV7 aWRlbnRpdHl9RCBGT1IgJXtzb3VyY2V9TCBUTyAle2Rlc3R9TAorCSAqIEZST00gJXtmdW5jdGlv bn1ECisJICovCisJY2NTdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisKKwkvKiBBZGQg dGhlIERFRkFVTFQgY2xhdXNlICovCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY2NTdG10LCAiZGVm YXVsdCIsCisJCQkJCQkgY29uRm9ybS0+Y29uZGVmYXVsdCA/ICJERUZBVUxUIiA6ICIiKTsKKwor CXRtcE9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShjb25Gb3JtLT5jb25uYW1lc3BhY2Us IE5hbWVTdHIoY29uRm9ybS0+Y29ubmFtZSkpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNjU3Rt dCwgIkNPTlZFUlNJT04gJXtpZGVudGl0eX1EIiwgdG1wT2JqKTsKKwlhcHBlbmRfc3RyaW5nX29i amVjdChjY1N0bXQsICJGT1IgJXtzb3VyY2V9TCIsIChjaGFyICopCisJCQkJCQkgcGdfZW5jb2Rp bmdfdG9fY2hhcihjb25Gb3JtLT5jb25mb3JlbmNvZGluZykpOworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGNjU3RtdCwgIlRPICV7ZGVzdH1MIiwgKGNoYXIgKikKKwkJCQkJCSBwZ19lbmNvZGluZ190 b19jaGFyKGNvbkZvcm0tPmNvbnRvZW5jb2RpbmcpKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChj Y1N0bXQsICJGUk9NICV7ZnVuY3Rpb259RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIGNvbkZvcm0tPmNvbnBy b2MpKTsKKworCXRhYmxlX2Nsb3NlKGNvbnZyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1 cm4gY2NTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUVudW1TdG10IChDUkVBVEUg VFlQRSBBUyBFTlVNKQorICoKKyAqIEdpdmVuIGEgRW51bSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNl IHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5n IHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Ny ZWF0ZUVudW1TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUVu dW1TdG10ICpub2RlID0gKENyZWF0ZUVudW1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAg ICplbnVtdHlwZTsKKwlMaXN0CSAgICp2YWx1ZXM7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWVu dW10eXBlID0gbmV3X29ianRyZWUoIkNSRUFURSBUWVBFIik7CisJYXBwZW5kX29iamVjdF9vYmpl Y3QoZW51bXR5cGUsICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCXZh bHVlcyA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPnZhbHMpCisJeworCQlTdHJpbmcJICAg KnZhbCA9IGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbCk7CisKKwkJdmFsdWVzID0gbGFwcGVuZCh2 YWx1ZXMsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbCh2YWwpKSk7CisJfQorCisJYXBwZW5kX2Fy cmF5X29iamVjdChlbnVtdHlwZSwgIkFTIEVOVU0gKCV7dmFsdWVzOiwgfUwpIiwgdmFsdWVzKTsK KwlyZXR1cm4gZW51bXR5cGU7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRXh0ZW5zaW9u U3RtdAorICoKKyAqIEdpdmVuIGFuIGV4dGVuc2lvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUg Y3JlYXRpb24gY29tbWFuZC4KKyAqCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3Jl YXRlRXh0ZW5zaW9uU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVh dGVFeHRlbnNpb25TdG10ICpub2RlID0gKENyZWF0ZUV4dGVuc2lvblN0bXQgKikgcGFyc2V0cmVl OworCVJlbGF0aW9uCXBnX2V4dGVuc2lvbjsKKwlIZWFwVHVwbGUJZXh0VHVwOworCUZvcm1fcGdf ZXh0ZW5zaW9uIGV4dEZvcm07CisJT2JqVHJlZSAgICAqZXh0U3RtdDsKKwlPYmpUcmVlICAgICp0 bXA7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkgKiBWZXJi b3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIEVYVEVOU0lPTiAle2lmX25vdF9leGlzdHN9cyAl e2lkZW50aXR5fUkgJXtvcHRpb25zOiB9cworCSAqLworCisJcGdfZXh0ZW5zaW9uID0gdGFibGVf b3BlbihFeHRlbnNpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWV4dFR1cCA9IGdl dF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfZXh0ZW5zaW9uLCBBbnVtX3BnX2V4dGVuc2lvbl9v aWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZXh0VHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGV4dGVuc2lvbiB3aXRoIE9JRCAldSIsCisJ CQkgb2JqZWN0SWQpOworCWV4dEZvcm0gPSAoRm9ybV9wZ19leHRlbnNpb24pIEdFVFNUUlVDVChl eHRUdXApOworCisJZXh0U3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUgRVhURU5TSU9OIik7CisK KwlhcHBlbmRfc3RyaW5nX29iamVjdChleHRTdG10LCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJ CQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwlhcHBl bmRfc3RyaW5nX29iamVjdChleHRTdG10LCAiJXtuYW1lfUkiLCBub2RlLT5leHRuYW1lKTsKKwor CS8qIExpc3Qgb2Ygb3B0aW9ucyAqLworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBub2Rl LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNl bGwpOworCisJCWlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAic2NoZW1hIikgPT0gMCkKKwkJewor CQkJLyogc2tpcCB0aGlzIG9uZTsgd2UgYWRkIG9uZSB1bmNvbmRpdGlvbmFsbHkgYmVsb3cgKi8K KwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJuZXdf dmVyc2lvbiIpID09IDApCisJCXsKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWRVJTSU9OICV7 dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZlcnNpb24i LAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmcob3B0KSk7 CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQor CQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAib2xkX3ZlcnNpb24iKSA9PSAwKQorCQl7 CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRlJPTSAle3ZlcnNpb259TCIsIDIsCisJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJmcm9tIiwKKwkJCQkJCQkJICJ2ZXJzaW9uIiwgT2Jq VHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgInVu c3VwcG9ydGVkIG9wdGlvbiAlcyIsIG9wdC0+ZGVmbmFtZSk7CisJfQorCisJLyogQWRkIHRoZSBT Q0hFTUEgb3B0aW9uICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNDSEVNQSAle3NjaGVtYX1J IiwKKwkJCQkJCSAyLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzY2hlbWEiLAorCQkJCQkJICJz Y2hlbWEiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9uYW1lc3BhY2VfbmFtZShleHRGb3Jt LT5leHRuYW1lc3BhY2UpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKworCS8qIGRvbmUgKi8KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGV4dFN0bXQsICIl e29wdGlvbnM6IH1zIiwgbGlzdCk7CisKKwl0YWJsZV9jbG9zZShwZ19leHRlbnNpb24sIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlyZXR1cm4gZXh0U3RtdDsKK30KKworLyoKKyAqIElmIGEgY29sdW1u IG5hbWUgaXMgc3BlY2lmaWVkLCBhZGQgYW4gZWxlbWVudCBmb3IgaXQ7IG90aGVyd2lzZSBpdCdz IGEKKyAqIHRhYmxlLWxldmVsIG9wdGlvbi4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9GZHdPcHRpb25zKExpc3QgKm9wdGlvbnMsIGNoYXIgKmNvbG5hbWUpCit7CisJT2JqVHJlZSAg ICAqdG1wOworCisJaWYgKGNvbG5hbWUpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBD T0xVTU4gJXtjb2x1bW59SSIsCisJCQkJCQkJIDEsICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBj b2xuYW1lKTsKKwllbHNlCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJPUFRJT05TIiwgMCk7CisK KwlpZiAob3B0aW9ucyAhPSBOSUwpCisJeworCQlMaXN0CSAgICpvcHRvdXQgPSBOSUw7CisJCUxp c3RDZWxsICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCBvcHRpb25zKQorCQl7CisJCQlEZWZF bGVtICAgICplbGVtOworCQkJT2JqVHJlZSAgICAqb3B0OworCisJCQllbGVtID0gKERlZkVsZW0g KikgbGZpcnN0KGNlbGwpOworCisJCQlzd2l0Y2ggKGVsZW0tPmRlZmFjdGlvbikKKwkJCXsKKwkJ CQljYXNlIERFRkVMRU1fVU5TUEVDOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiJXtsYWJl bH1JICV7dmFsdWV9TCIsIDIsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcsIGVs ZW0tPmRlZm5hbWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ CQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJCQkJIGRlZkdldEJv b2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBE RUZFTEVNX1NFVDoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIlNFVCAle2xhYmVsfUkgJXt2 YWx1ZX1MIiwgMiwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ZGVm bmFtZSwKKwkJCQkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgZWxl bS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkJCQkgZGVmR2V0Qm9vbGVhbihl bGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIERFRkVMRU1f QUREOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiQUREICV7bGFiZWx9SSAle3ZhbHVlfUwi LCAyLAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lLAor CQkJCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBlbGVtLT5hcmcg PyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8g IlRSVUUiIDogIkZBTFNFIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgREVGRUxFTV9EUk9QOgor CQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCAle2xhYmVsfUkiLCAxLAorCQkJCQkJCQkJ CSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lKTsKKwkJCQkJYnJlYWs7CisJ CQkJZGVmYXVsdDoKKwkJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgZGVmIGFjdGlvbiAlZCIsIGVs ZW0tPmRlZmFjdGlvbik7CisJCQkJCW9wdCA9IE5VTEw7CisJCQl9CisKKwkJCW9wdG91dCA9IGxh cHBlbmQob3B0b3V0LCBuZXdfb2JqZWN0X29iamVjdChvcHQpKTsKKwkJfQorCisJCWFwcGVuZF9h cnJheV9vYmplY3QodG1wLCAiKCV7b3B0aW9uOiAsfXMpIiwgb3B0b3V0KTsKKwl9CisJZWxzZQor CQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiB0 bXA7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRmR3U3RtdCAoQ1JFQVRFIEZPUkVJR04g REFUQSBXUkFQUEVSKQorICoKKyAqIEdpdmVuIGFuIEZEVyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVl IHRoYXQgY3JlYXRlZCBpdCwKKyAqIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUg Y3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVG ZHdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZkd1N0bXQg Km5vZGUgPSAoQ3JlYXRlRmR3U3RtdCAqKSBwYXJzZXRyZWU7CisJSGVhcFR1cGxlCWZkd1R1cDsK KwlGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyIGZkd0Zvcm07CisJUmVsYXRpb24JcmVsOwor CisJT2JqVHJlZSAgICAqY3JlYXRlU3RtdDsKKwlPYmpUcmVlICAgICp0bXA7CisKKwlyZWwgPSB0 YWJsZV9vcGVuKEZvcmVpZ25EYXRhV3JhcHBlclJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2sp OworCisJZmR3VHVwID0gU2VhcmNoU3lzQ2FjaGUxKEZPUkVJR05EQVRBV1JBUFBFUk9JRCwKKwkJ CQkJCQkgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChmZHdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZm9yZWln bi1kYXRhIHdyYXBwZXIgJXUiLCBvYmplY3RJZCk7CisKKwlmZHdGb3JtID0gKEZvcm1fcGdfZm9y ZWlnbl9kYXRhX3dyYXBwZXIpIEdFVFNUUlVDVChmZHdUdXApOworCisJY3JlYXRlU3RtdCA9IG5l d19vYmp0cmVlX1ZBKCJDUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JIiwg MSwKKwkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihmZHdGb3JtLT5m ZHduYW1lKSk7CisKKwkvKiBhZGQgSEFORExFUiBjbGF1c2UgKi8KKwlpZiAoZmR3Rm9ybS0+ZmR3 aGFuZGxlciA9PSBJbnZhbGlkT2lkKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTk8gSEFORExF UiIsIDApOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIQU5ETEVSICV7cHJv Y2VkdXJlfUQiLCAxLAorCQkJCQkJCSAiaGFuZGxlciIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkgZmR3Rm9ybS0+ZmR3aGFuZGxlcikpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVTdG10LCAiJXtoYW5kbGVyfXMiLCB0bXApOworCisJLyogYWRkIFZBTElEQVRPUiBj bGF1c2UgKi8KKwlpZiAoZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yID09IEludmFsaWRPaWQpCisJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJOTyBWQUxJREFUT1IiLCAwKTsKKwllbHNlCisJeworCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVE9SICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCSAi dmFsaWRhdG9yIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHd2 YWxpZGF0b3IpKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7dmFs aWRhdG9yfXMiLCB0bXApOworCisJLyogYWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8K KwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtnZW5lcmljX29wdGlvbnN9cyIs CisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsKKworCVJl bGVhc2VTeXNDYWNoZShmZHdUdXApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9j ayk7CisKKwlyZXR1cm4gY3JlYXRlU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJG ZHdTdG10IChBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUikKKyAqCisgKiBHaXZlbiBhbiBGRFcg T0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUKKyAqIEpT T04gYmxvYiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQWx0ZXJGZHdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVl KQoreworCUFsdGVyRmR3U3RtdCAqbm9kZSA9IChBbHRlckZkd1N0bXQgKikgcGFyc2V0cmVlOwor CUhlYXBUdXBsZQlmZHdUdXA7CisJRm9ybV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlciBmZHdGb3Jt OworCVJlbGF0aW9uCXJlbDsKKwlPYmpUcmVlICAgICphbHRlclN0bXQ7CisJTGlzdAkgICAqZmR3 X29wdGlvbnMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCXJlbCA9IHRhYmxlX29wZW4o Rm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlmZHdU dXAgPSBTZWFyY2hTeXNDYWNoZTEoRk9SRUlHTkRBVEFXUkFQUEVST0lELAorCQkJCQkJCSBPYmpl Y3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZkd1R1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmb3JlaWduLWRhdGEgd3Jh cHBlciAldSIsIG9iamVjdElkKTsKKworCWZkd0Zvcm0gPSAoRm9ybV9wZ19mb3JlaWduX2RhdGFf d3JhcHBlcikgR0VUU1RSVUNUKGZkd1R1cCk7CisKKwlhbHRlclN0bXQgPSBuZXdfb2JqdHJlZV9W QSgiQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCQkg ICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGZkd0Zvcm0tPmZkd25hbWUpKTsK KworCS8qCisJICogSXRlcmF0ZSB0aHJvdWdoIG9wdGlvbnMsIHRvIHNlZSB3aGF0IGNoYW5nZWQs IGJ1dCB1c2UgY2F0YWxvZyBhcyBhCisJICogYmFzaXMgZm9yIG5ldyB2YWx1ZXMuCisJICovCisJ Zm9yZWFjaChjZWxsLCBub2RlLT5mdW5jX29wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICplbGVt OworCQlPYmpUcmVlICAgICp0bXA7CisKKwkJZWxlbSA9IGxmaXJzdChjZWxsKTsKKworCQlpZiAo cGdfc3RyY2FzZWNtcChlbGVtLT5kZWZuYW1lLCAiaGFuZGxlciIpID09IDApCisJCXsKKwkJCS8q IGFkZCBIQU5ETEVSIGNsYXVzZSAqLworCQkJaWYgKGZkd0Zvcm0tPmZkd2hhbmRsZXIgPT0gSW52 YWxpZE9pZCkKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTk8gSEFORExFUiIsIDApOworCQkJ ZWxzZQorCQkJeworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIQU5ETEVSICV7cHJvY2VkdXJl fUQiLCAxLAorCQkJCQkJCQkJICJwcm9jZWR1cmUiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBmZHdG b3JtLT5mZHdoYW5kbGVyKSk7CisJCQl9CisJCQlmZHdfb3B0aW9ucyA9IGxhcHBlbmQoZmR3X29w dGlvbnMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVsc2UgaWYgKHBnX3N0cmNh c2VjbXAoZWxlbS0+ZGVmbmFtZSwgInZhbGlkYXRvciIpID09IDApCisJCXsKKwkJCS8qIGFkZCBW QUxJREFUT1IgY2xhdXNlICovCisJCQlpZiAoZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yID09IEludmFs aWRPaWQpCisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIk5PIFZBTElEQVRPUiIsIDApOworCQkJ ZWxzZQorCQkJeworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFUT1IgJXtwcm9jZWR1 cmV9RCIsIDEsCisJCQkJCQkJCQkgInByb2NlZHVyZSIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIGZk d0Zvcm0tPmZkd3ZhbGlkYXRvcikpOworCQkJfQorCQkJZmR3X29wdGlvbnMgPSBsYXBwZW5kKGZk d19vcHRpb25zLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCX0KKworCS8qIEFkZCBI QU5ETEVSL1ZBTElEQVRPUiBpZiBzcGVjaWZpZWQgKi8KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFs dGVyU3RtdCwgIiV7ZmR3X29wdGlvbnM6IH1zIiwgZmR3X29wdGlvbnMpOworCisKKwkvKiBhZGQg YW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVy U3RtdCwgIiV7Z2VuZXJpY19vcHRpb25zfUQiLAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhu b2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZmR3VHVwKTsKKwl0YWJs ZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIGFsdGVyU3RtdDsKK30K KworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVFlQRSBBUyBSQU5HRSBzdGF0ZW1lbnQKKyAqCisg KiBHaXZlbiBhIFJhbmdlIHR5cGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1h bmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlUmFuZ2VTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUgICAgKnJhbmdlOworCU9ialRy ZWUgICAgKnRtcDsKKwlMaXN0CSAgICpkZWZpbml0aW9uID0gTklMOworCVJlbGF0aW9uCXBnX3Jh bmdlOworCUhlYXBUdXBsZQlyYW5nZVR1cDsKKwlGb3JtX3BnX3JhbmdlIHJhbmdlRm9ybTsKKwlT Y2FuS2V5RGF0YSBrZXlbMV07CisJU3lzU2NhbkRlc2Mgc2NhbjsKKworCXBnX3JhbmdlID0gdGFi bGVfb3BlbihSYW5nZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJU2NhbktleUlu aXQoJmtleVswXSwKKwkJCQlBbnVtX3BnX3JhbmdlX3JuZ3R5cGlkLAorCQkJCUJURXF1YWxTdHJh dGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisK KwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3JhbmdlLCBSYW5nZVR5cGlkSW5kZXhJZCwg dHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDEsIGtleSk7CisKKwlyYW5nZVR1cCA9IHN5c3RhYmxlX2dl dG5leHQoc2Nhbik7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJhbmdlVHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJhbmdlIHdpdGggdHlwZSBvaWQgJXUiLAor CQkJIG9iamVjdElkKTsKKworCXJhbmdlRm9ybSA9IChGb3JtX3BnX3JhbmdlKSBHRVRTVFJVQ1Qo cmFuZ2VUdXApOworCisJcmFuZ2UgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZUEUiLCAwKTsK Kwl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIG9iamVj dElkKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyYW5nZSwgIiV7aWRlbnRpdHl9RCBBUyBSQU5H RSIsIHRtcCk7CisKKwkvKiBTVUJUWVBFICovCisJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJICByYW5nZUZvcm0tPnJuZ3N1YnR5cGUp OworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFID0gJXt0eXBlfUQiLAorCQkJCQkJIDIs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdWJ0eXBlIiwKKwkJCQkJCSAidHlw ZSIsIE9ialR5cGVPYmplY3QsIHRtcCk7CisJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlv biwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTVUJUWVBFX09QQ0xBU1MgKi8KKwlp ZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ3N1Ym9wYykpCisJeworCQl0bXAgPSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JDbGFzc1JlbGF0aW9uSWQsCisJCQkJCQkJCQkJ ICByYW5nZUZvcm0tPnJuZ3N1Ym9wYyk7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBF X09QQ0xBU1MgPSAle29wY2xhc3N9RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAib3BjbGFzcyIsCisJCQkJCQkJICJvcGNsYXNzIiwgT2JqVHlwZU9iamVj dCwgdG1wKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisJfQorCisJLyogQ09MTEFUSU9OICovCisJaWYgKE9pZElzVmFsaWQocmFu Z2VGb3JtLT5ybmdjb2xsYXRpb24pKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICByYW5nZUZvcm0tPnJuZ2Nv bGxhdGlvbik7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRJT04gPSAle2NvbGxhdGlv bn1EIiwKKwkJCQkJCQkgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xs YXRpb24iLAorCQkJCQkJCSAiY29sbGF0aW9uIiwgT2JqVHlwZU9iamVjdCwgdG1wKTsKKwkJZGVm aW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJ fQorCisJLyogQ0FOT05JQ0FMICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdjYW5v bmljYWwpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICByYW5nZUZvcm0tPnJuZ2Nhbm9uaWNhbCk7CisJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJDQU5PTklDQUwgPSAle2Nhbm9uaWNhbH1EIiwKKwkJCQkJCQkg MiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYW5vbmljYWwiLAorCQkJCQkJ CSAiY2Fub25pY2FsIiwgT2JqVHlwZU9iamVjdCwgdG1wKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBl bmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogU1VCVFlQ RV9ESUZGICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdzdWJkaWZmKSkKKwl7CisJ CXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdzdWJkaWZmKTsKKwkJdG1wID0gbmV3X29ianRyZWVf VkEoIlNVQlRZUEVfRElGRiA9ICV7c3VidHlwZV9kaWZmfUQiLAorCQkJCQkJCSAyLAorCQkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN1YnR5cGVfZGlmZiIsCisJCQkJCQkJICJzdWJ0 eXBlX2RpZmYiLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChk ZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlf b2JqZWN0KHJhbmdlLCAiKCV7ZGVmaW5pdGlvbjosIH1zKSIsIGRlZmluaXRpb24pOworCisJc3lz dGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShwZ19yYW5nZSwgUm93RXhjbHVzaXZl TG9jayk7CisKKwlyZXR1cm4gcmFuZ2U7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRW51 bVN0bXQuCisgKgorICogR2l2ZW4gYW4gZW51bSBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1v ZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0 eXBlLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRW51bVN0bXQoT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJFbnVtU3RtdCAqbm9kZSA9IChBbHRl ckVudW1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICphbHRlckVudW07CisKKwlhbHRl ckVudW0gPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVFlQRSIsIDApOworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGFsdGVyRW51bSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOwor CisJaWYgKCFub2RlLT5vbGRWYWwpCisJeworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlckVu dW0sICJBREQgVkFMVUUiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAiJXtp Zl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJCSBub2RlLT5za2lwSWZOZXdWYWxFeGlzdHMgPyAiSUYg Tk9UIEVYSVNUUyIgOiAiIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAi JXt2YWx1ZX1MIiwgbm9kZS0+bmV3VmFsKTsKKworCQlpZiAobm9kZS0+bmV3VmFsTmVpZ2hib3Ip CisJCXsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIiV7YWZ0ZXJfb3JfYmVm b3JlfXMiLAorCQkJCQkJCQkgbm9kZS0+bmV3VmFsSXNBZnRlciA/ICJBRlRFUiIgOiAiQkVGT1JF Iik7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVudW0sICIle25laWdoYm91cn1MIiwg bm9kZS0+bmV3VmFsTmVpZ2hib3IpOworCQl9CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGFsdGVyRW51bSwgIlJFTkFNRSBWQUxVRSAle3ZhbHVlfUwgVE8iLAorCQkJCQkJ CSBub2RlLT5vbGRWYWwpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVudW0sICIle25l d3ZhbHVlfUwiLAorCQkJCQkJCSBub2RlLT5uZXdWYWwpOworCX0KKworCXJldHVybiBhbHRlckVu dW07Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRXh0ZW5zaW9uU3RtdCAoQUxURVIgRVhU RU5TSU9OIC4uIFVQREFURSBUTyBWRVJTSU9OKQorICoKKyAqIEdpdmVuIGFuIGV4dGVuc2lvbiAg T0lEIGFuZCBhIHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUK KyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgdHlwZS4KKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9BbHRlckV4dGVuc2lvblN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJQWx0ZXJFeHRlbnNpb25TdG10ICpub2RlID0gKEFsdGVyRXh0ZW5zaW9uU3RtdCAqKSBw YXJzZXRyZWU7CisJUmVsYXRpb24JcGdfZXh0ZW5zaW9uOworCUhlYXBUdXBsZQlleHRUdXA7CisJ Rm9ybV9wZ19leHRlbnNpb24gZXh0Rm9ybTsKKwlPYmpUcmVlICAgICpzdG10OworCU9ialRyZWUg ICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlw Z19leHRlbnNpb24gPSB0YWJsZV9vcGVuKEV4dGVuc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJZXh0VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ19leHRlbnNpb24s IEFudW1fcGdfZXh0ZW5zaW9uX29pZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChleHRUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZXh0ZW5z aW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJZXh0Rm9ybSA9IChGb3JtX3BnX2V4 dGVuc2lvbikgR0VUU1RSVUNUKGV4dFR1cCk7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIEVYVEVOU0lPTiAle2lkZW50aXR5fUQgVVBEQVRFIiwgMSwKKwkJCQkJCSAgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGV4dEZv cm0tPmV4dG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgIE5hbWVTdHIoZXh0Rm9ybS0+ZXh0bmFt ZSkpKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAg Km9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoc3RyY21wKG9wdC0+ZGVm bmFtZSwgIm5ld192ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJdG1wID0gbmV3X29ianRyZWVfVkEo IlRPICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZl cnNpb24iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmco b3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb3B0aW9uICVzIiwgb3B0 LT5kZWZuYW1lKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIle29wdGlvbnM6 IH1zIiwgbGlzdCk7CisKKwl0YWJsZV9jbG9zZShwZ19leHRlbnNpb24sIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJFeHRlbnNp b25Db250ZW50c1N0bXQgKEFMVEVSIEVYVEVOU0lPTiBleHQgQUREL0RST1Agb2JqZWN0KQorICoK KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckV4dGVuc2lvbkNvbnRlbnRzU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJCQkJICAgT2JqZWN0QWRkcmVz cyBvYmplY3RBZGRyZXNzKQoreworCUFsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10ICpub2RlID0g KEFsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpz dG10OworCWNoYXIJICAgKmZtdDsKKworCUFzc2VydChub2RlLT5hY3Rpb24gPT0gKzEgfHwgbm9k ZS0+YWN0aW9uID09IC0xKTsKKworCWZtdCA9IHBzcHJpbnRmKCJBTFRFUiBFWFRFTlNJT04gJSV7 ZXh0aWRlbnRpdHl9SSAlcyAlcyAlJXtvYmppZGVudGl0eX1zIiwKKwkJCQkgICBub2RlLT5hY3Rp b24gPT0gKzEgPyAiQUREIiA6ICJEUk9QIiwKKwkJCQkgICBzdHJpbmdpZnlfb2JqdHlwZShub2Rl LT5vYmp0eXBlKSk7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLCAiZXh0aWRlbnRp dHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBub2RlLT5leHRuYW1lLAorCQkJCQkJICAib2Jq aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBnZXRPYmplY3RJZGVudGl0eSgmb2Jq ZWN0QWRkcmVzcywgZmFsc2UpKTsKKworCXJldHVybiBzdG10OworfQorCisvKgorICogRGVwYXJz ZSBhbiBDcmVhdGVDYXN0U3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgYSBw YXJzZSB0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNl bnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQ3JlYXRlQ2FzdFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3Jl YXRlQ2FzdFN0bXQgKm5vZGUgPSAoQ3JlYXRlQ2FzdFN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0 aW9uCWNhc3RyZWw7CisJSGVhcFR1cGxlCWNhc3RUdXA7CisJRm9ybV9wZ19jYXN0IGNhc3RGb3Jt OworCU9ialRyZWUgICAgKmNyZWF0ZUNhc3Q7CisJY2hhcgkgICAqY29udGV4dDsKKworCWNhc3Ry ZWwgPSB0YWJsZV9vcGVuKENhc3RSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWNhc3RU dXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhc3RyZWwsIEFudW1fcGdfY2FzdF9vaWQs IG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY2FzdFR1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjYXN0IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQp OworCWNhc3RGb3JtID0gKEZvcm1fcGdfY2FzdCkgR0VUU1RSVUNUKGNhc3RUdXApOworCisJLyoK KwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIENBU1QgKCV7c291cmNldHlwZX1U IEFTICV7dGFyZ2V0dHlwZX1UKSAle21lY2hhbmlzbX1zCisJICogJXtjb250ZXh0fXMKKwkgKi8K KwljcmVhdGVDYXN0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBDQVNUICgle3NvdXJjZXR5cGV9 VCBBUyAle3RhcmdldHR5cGV9VCkiLAorCQkJCQkJCQkyLCAic291cmNldHlwZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0c291cmNl LCAtMSksCisJCQkJCQkJCSJ0YXJnZXR0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3 X29ianRyZWVfZm9yX3R5cGUoY2FzdEZvcm0tPmNhc3R0YXJnZXQsIC0xKSk7CisKKwlpZiAobm9k ZS0+aW5vdXQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUNhc3QsICIle21lY2hhbmlz bX1zIiwgIldJVEggSU5PVVQiKTsKKwllbHNlIGlmIChub2RlLT5mdW5jID09IE5VTEwpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUNhc3QsICIle21lY2hhbmlzbX1zIiwgIldJVEhPVVQg RlVOQ1RJT04iKTsKKwllbHNlCisJeworCQlPYmpUcmVlICAgICp0bXBvYmo7CisJCVN0cmluZ0lu Zm9EYXRhIGZ1bmM7CisJCUhlYXBUdXBsZQlmdW5jVHVwOworCQlGb3JtX3BnX3Byb2MgZnVuY0Zv cm07CisJCWludAkJCWk7CisKKwkJZnVuY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBj YXN0Rm9ybS0+Y2FzdGZ1bmMpOworCQlmdW5jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVD VChmdW5jVHVwKTsKKworCQlpbml0U3RyaW5nSW5mbygmZnVuYyk7CisJCWFwcGVuZFN0cmluZ0lu Zm8oJmZ1bmMsICIlcygiLAorCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9u YW1lc3BhY2VfbmFtZShmdW5jRm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJCQkJCQkJCQkJCQlOYW1l U3RyKGZ1bmNGb3JtLT5wcm9uYW1lKSkpOworCQlmb3IgKGkgPSAwOyBpIDwgZnVuY0Zvcm0tPnBy b25hcmdzOyBpKyspCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmdW5jLAorCQkJCQkJCQkg ICBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQoZnVuY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tp XSkpOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZnVuYywgJyknKTsKKworCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiV0lUSCBGVU5DVElPTiAle2Nhc3RmdW5jdGlvbn1zIiwgMSwKKwkJCQkJ CQkJImNhc3RmdW5jdGlvbiIsIE9ialR5cGVTdHJpbmcsIGZ1bmMuZGF0YSk7CisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNyZWF0ZUNhc3QsICIle21lY2hhbmlzbX1zIiwgdG1wb2JqKTsKKworCQlS ZWxlYXNlU3lzQ2FjaGUoZnVuY1R1cCk7CisJfQorCisJc3dpdGNoIChub2RlLT5jb250ZXh0KQor CXsKKwkJY2FzZSBDT0VSQ0lPTl9JTVBMSUNJVDoKKwkJCWNvbnRleHQgPSAiQVMgSU1QTElDSVQi OworCQkJYnJlYWs7CisJCWNhc2UgQ09FUkNJT05fQVNTSUdOTUVOVDoKKwkJCWNvbnRleHQgPSAi QVMgQVNTSUdOTUVOVCI7CisJCQlicmVhazsKKwkJY2FzZSBDT0VSQ0lPTl9FWFBMSUNJVDoKKwkJ CWNvbnRleHQgPSAiIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImlu dmFsaWQgY29lcmNpb24gY29kZSAlYyIsIG5vZGUtPmNvbnRleHQpOworCQkJcmV0dXJuIE5VTEw7 CQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCisJfQorCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZUNhc3QsICIle2NvbnRleHR9cyIsIGNvbnRleHQpOworCisJdGFibGVfY2xvc2UoY2FzdHJl bCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVDYXN0OworfQorCisvKgorICog RGVwYXJzZSBhbGwgdGhlIGNvbGxlY3RlZCBzdWJjb21tYW5kcyBhbmQgcmV0dXJuIGFuIE9ialRy ZWUgcmVwcmVzZW50aW5nIHRoZQorICogYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9BbHRlclRhYmxlU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJ T2JqVHJlZSAgICAqYWx0ZXJUYWJsZVN0bXQ7CisJT2JqVHJlZSAgICAqdG1wb2JqOworCU9ialRy ZWUgICAgKnRtcG9iajI7CisJTGlzdAkgICAqZHBjb250ZXh0OworCVJlbGF0aW9uCXJlbDsKKwlM aXN0CSAgICpzdWJjbWRzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJY2hhcgkgICAqZm10 c3RyOworCWNvbnN0IGNoYXIgKnJlbHR5cGU7CisJYm9vbAkJaXN0eXBlID0gZmFsc2U7CisJTGlz dAkgICAqZXhwcnMgPSBOSUw7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9BbHRlclRhYmxl KTsKKworCXJlbCA9IHJlbGF0aW9uX29wZW4oY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJY21kLT5kLmFsdGVyVGFibGUub2JqZWN0 SWQpOworCisJc3dpdGNoIChyZWwtPnJkX3JlbC0+cmVsa2luZCkKKwl7CisJCWNhc2UgUkVMS0lO RF9SRUxBVElPTjoKKwkJY2FzZSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFOgorCQkJcmVsdHlw ZSA9ICJUQUJMRSI7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0lOREVYOgorCQljYXNlIFJF TEtJTkRfUEFSVElUSU9ORURfSU5ERVg6CisJCQlyZWx0eXBlID0gIklOREVYIjsKKwkJCWJyZWFr OworCQljYXNlIFJFTEtJTkRfVklFVzoKKwkJCXJlbHR5cGUgPSAiVklFVyI7CisJCQlicmVhazsK KwkJY2FzZSBSRUxLSU5EX0NPTVBPU0lURV9UWVBFOgorCQkJcmVsdHlwZSA9ICJUWVBFIjsKKwkJ CWlzdHlwZSA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0ZPUkVJR05fVEFCTEU6 CisJCQlyZWx0eXBlID0gIkZPUkVJR04gVEFCTEUiOworCQkJYnJlYWs7CisKKwkJCS8qIFRPRE8g c3VwcG9ydCBmb3IgcGFydGl0aW9uZWQgdGFibGUgKi8KKworCQlkZWZhdWx0OgorCQkJZWxvZyhF UlJPUiwgInVuZXhwZWN0ZWQgcmVsa2luZCAlZCIsIHJlbC0+cmRfcmVsLT5yZWxraW5kKTsKKwl9 CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiByZWx0eXBlICV7aWRl bnRpdHl9RCAle3N1YmNtZHM6LCB9cworCSAqLworCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAl cyIsIHJlbHR5cGUpOworCWFsdGVyVGFibGVTdG10ID0gbmV3X29ianRyZWUoZm10c3RyKTsKKwor CXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWwtPnJkX3JlbC0+cmVsbmFtZXNw YWNlLAorCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKwlhcHBlbmRf b2JqZWN0X29iamVjdChhbHRlclRhYmxlU3RtdCwgIiV7aWRlbnRpdHl9RCIsIHRtcG9iaik7CisK Kwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMpCisJeworCQlDb2xsZWN0 ZWRBVFN1YmNtZCAqc3ViID0gKENvbGxlY3RlZEFUU3ViY21kICopIGxmaXJzdChjZWxsKTsKKwkJ QWx0ZXJUYWJsZUNtZCAqc3ViY21kID0gKEFsdGVyVGFibGVDbWQgKikgc3ViLT5wYXJzZXRyZWU7 CisJCU9ialRyZWUgICAgKnRyZWU7CisKKwkJQXNzZXJ0KElzQShzdWJjbWQsIEFsdGVyVGFibGVD bWQpKTsKKworCQlzd2l0Y2ggKHN1YmNtZC0+c3VidHlwZSkKKwkJeworCQkJY2FzZSBBVF9BZGRD b2x1bW46CisJCQljYXNlIEFUX0FkZENvbHVtblJlY3Vyc2U6CisJCQkJLyogWFhYIG5lZWQgdG8g c2V0IHRoZSAicmVjdXJzZSIgYml0IHNvbWV3aGVyZT8gKi8KKwkJCQlBc3NlcnQoSXNBKHN1YmNt ZC0+ZGVmLCBDb2x1bW5EZWYpKTsKKwkJCQl0cmVlID0gZGVwYXJzZV9Db2x1bW5EZWYocmVsLCBk cGNvbnRleHQsIGZhbHNlLAorCQkJCQkJCQkJCSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmLCB0 cnVlLCAmZXhwcnMpOworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBREQgJXMgJSV7ZGVmaW5pdGlv bn1zIiwKKwkJCQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xVTU4iKTsKKwkJCQl0 bXBvYmogPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiYWRkIGNvbHVtbiIsCisJCQkJCQkJCQkJImRlZmluaXRpb24iLCBPYmpUeXBl T2JqZWN0LCB0cmVlKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJbmRleENvbnN0 cmFpbnQ6CisJCQkJeworCQkJCQlJbmRleFN0bXQgICppc3RtdDsKKwkJCQkJUmVsYXRpb24JaWR4 OworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisKKwkJCQkJ QXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW5kZXhTdG10KSk7CisJCQkJCWlzdG10ID0gKEluZGV4 U3RtdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQlBc3NlcnQoaXN0bXQtPmlzY29uc3RyYWludCAm JiBpc3RtdC0+dW5pcXVlKTsKKworCQkJCQlpZHggPSByZWxhdGlvbl9vcGVuKGlzdG10LT5pbmRl eE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJCQkvKgorCQkJCQkgKiBWZXJib3NlIHN5bnRh eAorCQkJCQkgKgorCQkJCQkgKiBBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2NvbnN0cmFpbnRf dHlwZX1zIFVTSU5HIElOREVYCisJCQkJCSAqICVpbmRleF9uYW1lfUkgJXtkZWZlcnJhYmxlfXMg JXtpbml0X2RlZmVycmVkfXMKKwkJCQkJICovCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSIsIDIsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImFkZCBjb25zdHJhaW50IHVzaW5nIGluZGV4IiwKKwkJCQkJCQkJCQkJIm5hbWUi LCBPYmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCkpOworCisJCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7Y29uc3RyYWludF90eXBlfXMiLCBpc3Rt dC0+ZGVmZXJyYWJsZSA/CisJCQkJCQkJCQkJICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJSQUJM RSIpOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICJVU0lORyBJTkRFWCAle2lu ZGV4X25hbWV9SSIsCisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeCkpOwor CQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2RlZmVycmFibGV9cyIsIGlzdG10 LT5kZWZlcnJhYmxlID8KKwkJCQkJCQkJCQkgIkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxF Iik7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aW5pdF9kZWZlcnJlZH1z IiwgaXN0bXQtPmluaXRkZWZlcnJlZCA/CisJCQkJCQkJCQkJICJJTklUSUFMTFkgREVGRVJSRUQi IDogIklOSVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShp ZHgsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1Jl QWRkSW5kZXg6CisJCQljYXNlIEFUX1JlQWRkQ29uc3RyYWludDoKKwkJCWNhc2UgQVRfUmVBZGRD b21tZW50OgorCQkJY2FzZSBBVF9SZXBsYWNlUmVsT3B0aW9uczoKKwkJCQkvKiBTdWJ0eXBlcyB1 c2VkIGZvciBpbnRlcm5hbCBvcGVyYXRpb25zOyBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9BZGRDb2x1bW5Ub1ZpZXc6CisJCQkJLyogQ1JFQVRFIE9SIFJF UExBQ0UgVklFVyAtLSBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9Db2x1bW5EZWZhdWx0OgorCQkJCWlmIChzdWJjbWQtPmRlZiA9PSBOVUxMKQorCQkJCXsK KwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERS T1AgREVGQVVMVCIsIDIsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Ag ZGVmYXVsdCIsCisJCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5h bWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlMaXN0CSAgICpkcGNvbnRleHRfcmVs OworCQkJCQlIZWFwVHVwbGUJYXR0cnR1cDsKKwkJCQkJQXR0ck51bWJlcglhdHRubzsKKworCQkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIERF RkFVTFQiLCAyLAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgZGVmYXVs dCIsCisJCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CisJCQkJCWRwY29udGV4dF9yZWwgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJ CQkJCWF0dHJ0dXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUoUmVsYXRpb25HZXRSZWxpZChyZWwp LCBzdWJjbWQtPm5hbWUpOworCQkJCQlhdHRubyA9ICgoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNU UlVDVChhdHRydHVwKSktPmF0dG51bTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2Jq LCAiJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQo cmVsLCBhdHRubywKKwkJCQkJCQkJCQkJCQkJCQkgIGRwY29udGV4dF9yZWwsCisJCQkJCQkJCQkJ CQkJCQkJICBOVUxMKSk7CisJCQkJCVJlbGVhc2VTeXNDYWNoZShhdHRydHVwKTsKKwkJCQl9CisK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wTm90TnVsbDoKKwkJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBOT1QgTlVMTCIsIDIs CisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBub3QgbnVsbCIsCisJCQkJ CQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfU2V0Tm90TnVsbDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIE5PVCBOVUxMIiwgMiwKKwkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbm90IG51bGwiLAorCQkJCQkJCQkJCSJjb2x1bW4i LCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX0Ryb3BFeHByZXNzaW9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBD T0xVTU4gJXtjb2x1bW59SSBEUk9QIEVYUFJFU1NJT04iLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImRyb3AgZXhwcmVzc2lvbiIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w b2JqLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJCQkJIHN1YmNtZC0+bWlzc2luZ19vayA/ ICJJRiBFWElTVFMiIDogIiIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFN0YXRp c3RpY3M6CisJCQkJeworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbnRlZ2VyKSk7CisJ CQkJCWlmIChzdWJjbWQtPm5hbWUpCisJCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNzfW4iLAorCQkJ CQkJCQkJCQkJMywKKwkJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBzdGF0 aXN0aWNzIiwKKwkJCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5h bWUsCisJCQkJCQkJCQkJCQkic3RhdGlzdGljcyIsIE9ialR5cGVJbnRlZ2VyLAorCQkJCQkJCQkJ CQkJaW50VmFsKChJbnRlZ2VyICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJCWVsc2UKKwkJCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59biBTRVQgU1RBVElT VElDUyAle3N0YXRpc3RpY3N9biIsCisJCQkJCQkJCQkJCQkzLAorCQkJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkJImNvbHVtbiIs IE9ialR5cGVJbnRlZ2VyLCBzdWJjbWQtPm51bSwKKwkJCQkJCQkJCQkJCSJzdGF0aXN0aWNzIiwg T2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJCQlpbnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5k ZWYpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE9wdGlvbnM6CisJ CQljYXNlIEFUX1Jlc2V0T3B0aW9uczoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJCQkJCQkJCSBkZXBhcnNlX0NvbHVtblNldE9wdGlv bnMoc3ViY21kKSkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFN0b3JhZ2U6CisJCQkJ QXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5nKSk7CisJCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVE9SQUdFICV7c3RvcmFnZX1zIiwg MywKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RvcmFnZSIsCisJCQkJ CQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQki c3RvcmFnZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJc3RyVmFsKChTdHJpbmcgKikgc3Vi Y21kLT5kZWYpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRDb21wcmVzc2lvbjoK KwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBTdHJpbmcpKTsKKwkJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIENPTVBSRVNTSU9OICV7Y29t cHJlc3Npb25fbWV0aG9kfXMiLAorCQkJCQkJCQkJCTMsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAic2V0IGNvbXByZXNzaW9uIiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJCSJjb21wcmVzc2lvbl9tZXRob2QiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCXN0clZhbCgoU3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENvbHVtblJlY3Vyc2U6CisJCQljYXNl IEFUX0Ryb3BDb2x1bW46CisJCQkJZm10c3RyID0gcHNwcmludGYoIkRST1AgJXMgJSV7Y29sdW1u fUkiLAorCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIpOworCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJkcm9wIGNvbHVtbiIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURF IiwgMSwKKwkJCQkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgc3ViY21kLT5iZWhhdmlv cik7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtjYXNjYWRlfXMiLCB0bXBv YmoyKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluZGV4OgorCQkJCXsKKwkJ CQkJT2lkCQkJaWR4T2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlJbmRleFN0bXQg ICppc3RtdDsKKwkJCQkJUmVsYXRpb24JaWR4OworCQkJCQljb25zdCBjaGFyICppZHhuYW1lOwor CQkJCQlPaWQJCQljb25zdHJPaWQ7CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW5k ZXhTdG10KSk7CisJCQkJCWlzdG10ID0gKEluZGV4U3RtdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJ CQlpZiAoIWlzdG10LT5pc2NvbnN0cmFpbnQpCisJCQkJCQlicmVhazsKKworCQkJCQlpZHggPSBy ZWxhdGlvbl9vcGVuKGlkeE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQkJaWR4bmFtZSA9IFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeCk7CisKKwkJCQkJY29uc3RyT2lkID0gZ2V0X3JlbGF0 aW9uX2NvbnN0cmFpbnRfb2lkKAorCQkJCQkJCQkJCQkJCQkJY21kLT5kLmFsdGVyVGFibGUub2Jq ZWN0SWQsIGlkeG5hbWUsIGZhbHNlKTsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi QUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCQkJCSJuYW1l IiwgT2JqVHlwZVN0cmluZywgaWR4bmFtZSwKKwkJCQkJCQkJCQkJImRlZmluaXRpb24iLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCQkJCQlwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBs ZShjb25zdHJPaWQpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisKKwkJCQkJcmVsYXRpb25fY2xvc2UoaWR4LCBBY2Nlc3NTaGFy ZUxvY2spOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRDb25zdHJhaW50Ogor CQkJY2FzZSBBVF9BZGRDb25zdHJhaW50UmVjdXJzZToKKwkJCQl7CisJCQkJCS8qIFhYWCBuZWVk IHRvIHNldCB0aGUgInJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICovCisJCQkJCU9pZAkJCWNvbnN0 ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJYm9vbAkJaXNudWxsOworCQkJCQlI ZWFwVHVwbGUJdHVwOworCQkJCQlEYXR1bQkJdmFsOworCQkJCQlDb25zdHJhaW50ICpjb25zdHI7 CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgQ29uc3RyYWludCkpOworCQkJCQljb25z dHIgPSBjYXN0Tm9kZShDb25zdHJhaW50LCBzdWJjbWQtPmRlZik7CisKKwkJCQkJaWYgKCFjb25z dHItPnNraXBfdmFsaWRhdGlvbikKKwkJCQkJeworCQkJCQkJdHVwID0gU2VhcmNoU3lzQ2FjaGUx KENPTlNUUk9JRCwgT2JqZWN0SWRHZXREYXR1bShjb25zdHJPaWQpKTsKKworCQkJCQkJaWYgKEhl YXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJCQkJCXsKKwkJCQkJCQljaGFyCSAgICpjb25iaW47CisK KwkJCQkJCQkvKiBGZXRjaCBjb25zdHJhaW50IGV4cHJlc3Npb24gaW4gcGFyc2V0cmVlIGZvcm0g Ki8KKwkJCQkJCQl2YWwgPSBTeXNDYWNoZUdldEF0dHIoQ09OU1RST0lELCB0dXAsCisJCQkJCQkJ CQkJCQkgIEFudW1fcGdfY29uc3RyYWludF9jb25iaW4sICZpc251bGwpOworCisJCQkJCQkJaWYg KCFpc251bGwpCisJCQkJCQkJeworCQkJCQkJCQljb25iaW4gPSBUZXh0RGF0dW1HZXRDU3RyaW5n KHZhbCk7CisJCQkJCQkJCWV4cHJzID0gbGFwcGVuZChleHBycywgc3RyaW5nVG9Ob2RlKGNvbmJp bikpOworCQkJCQkJCX0KKworCQkJCQkJCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCQkJCQkJfQor CQkJCQl9CisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7 bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgMywKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcs IGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkJImRlZmluaXRpb24i LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5k X3NpbXBsZShjb25zdHJPaWQpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0FsdGVyQ29uc3RyYWludDoKKwkJCQl7CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1Yi0+YWRk cmVzcy5vYmplY3RJZDsKKwkJCQkJQ29uc3RyYWludCAqYyA9IChDb25zdHJhaW50ICopIHN1YmNt ZC0+ZGVmOworCisJCQkJCS8qIElmIG5vIGNvbnN0cmFpbnQgd2FzIGFsdGVyZWQsIHNpbGVudGx5 IHNraXAgaXQgKi8KKwkJCQkJaWYgKCFPaWRJc1ZhbGlkKGNvbnN0ck9pZCkpCisJCQkJCQlicmVh azsKKworCQkJCQlBc3NlcnQoSXNBKGMsIENvbnN0cmFpbnQpKTsKKwkJCQkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIkFMVEVSIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZlcnJhYmxlfXMgJXtp bml0X2RlZmVycmVkfXMiLAorCQkJCQkJCQkJCQk0LAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJhbHRlciBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkJIm5hbWUiLCBPYmpUeXBl U3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCksCisJCQkJCQkJCQkJCSJkZWZl cnJhYmxlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJYy0+ZGVmZXJyYWJsZSA/ICJERUZF UlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIsCisJCQkJCQkJCQkJCSJpbml0X2RlZmVycmVkIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJYy0+aW5pdGRlZmVycmVkID8gIklOSVRJQUxMWSBE RUZFUlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFURSIpOworCisJCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9WYWxpZGF0ZUNvbnN0cmFpbnRSZWN1cnNlOgorCQkJY2FzZSBBVF9W YWxpZGF0ZUNvbnN0cmFpbnQ6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlZBTElEQVRF IENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgInZhbGlkYXRlIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSJjb25zdHJhaW50Iiwg T2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9Ecm9wQ29uc3RyYWludFJlY3Vyc2U6CisJCQljYXNlIEFUX0Ryb3BDb25zdHJhaW50OgorCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QIENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUki LCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgY29uc3RyYWludCIs CisJCQkJCQkJCQkJImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlwZToKKwkJCQl7CisJCQkJ CVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCQkJCQlGb3JtX3Bn X2F0dHJpYnV0ZSBhdHQ7CisJCQkJCUNvbHVtbkRlZiAgKmRlZjsKKworCQkJCQlhdHQgPSAmKHR1 cGRlc2MtPmF0dHJzW3N1Yi0+YWRkcmVzcy5vYmplY3RTdWJJZCAtIDFdKTsKKwkJCQkJZGVmID0g KENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKwkJCQkJQXNzZXJ0KElzQShkZWYsIENvbHVtbkRl ZikpOworCisJCQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkJCSAqCisJCQkJCSAq IENvbXBvc2l0ZSB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUK KwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQVRUUklCVVRFICV7Y2FzY2FkZX1z CisJCQkJCSAqCisJCQkJCSAqIE5vcm1hbCB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1J IFNFVCBEQVRBIFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQ09MVU1O ICV7dXNpbmd9cworCQkJCQkgKi8KKwkJCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzICUl e2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUiLAorCQkJCQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRF IiA6ICJDT0xVTU4iKTsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIs CisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbHVtbiB0eXBlIiwK KwkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJ CS8qIEFkZCB0aGUgVFlQRSBjbGF1c2UgKi8KKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w b2JqLCAiJXtkYXRhdHlwZX1UIiwKKwkJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUoYXR0 LT5hdHR0eXBpZCwKKwkJCQkJCQkJCQkJCQkJCSAgYXR0LT5hdHR0eXBtb2QpKTsKKworCQkJCQkv KiBBZGQgYSBDT0xMQVRFIGNsYXVzZSwgaWYgbmVlZGVkICovCisJCQkJCXRtcG9iajIgPSBuZXdf b2JqdHJlZSgiQ09MTEFURSIpOworCQkJCQlpZiAoT2lkSXNWYWxpZChhdHQtPmF0dGNvbGxhdGlv bikpCisJCQkJCXsKKwkJCQkJCU9ialRyZWUgICAgKmNvbGxuYW1lOworCisJCQkJCQljb2xsbmFt ZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkJICAgYXR0LT5hdHRjb2xsYXRpb24pOworCQkJCQkJYXBwZW5kX29iamVjdF9v YmplY3QodG1wb2JqMiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOworCQkJCQl9CisJCQkJCWVsc2UK KwkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoyLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJ CQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtjb2xsYXRpb259cyIsIHRtcG9iajIp OworCisJCQkJCS8qIElmIG5vdCBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhlIFVTSU5HIGNsYXVz ZSAqLworCQkJCQlpZiAoIWlzdHlwZSkKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIElmIHRo ZXJlJ3MgYSBVU0lORyBjbGF1c2UsIHRyYW5zZm9ybUFsdGVyVGFibGVTdG10CisJCQkJCQkgKiBy YW4gaXQgdGhyb3VnaCB0cmFuc2Zvcm1FeHByIGFuZCBzdG9yZWQgdGhlCisJCQkJCQkgKiByZXN1 bHRpbmcgbm9kZSBpbiBjb29rZWRfZGVmYXVsdCwgd2hpY2ggd2UgY2FuIHVzZQorCQkJCQkJICog aGVyZS4KKwkJCQkJCSAqLworCQkJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlKCJVU0lORyIpOwor CQkJCQkJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJCQkJCQl7CisJCQkJCQkJRGF0dW0JCWRlcGFy c2VkOworCQkJCQkJCWNoYXIJICAgKmRlZmV4cHI7CisKKwkJCQkJCQlleHBycyA9IGxhcHBlbmQo ZXhwcnMsIGRlZi0+Y29va2VkX2RlZmF1bHQpOworCQkJCQkJCWRlZmV4cHIgPSBub2RlVG9TdHJp bmcoZGVmLT5jb29rZWRfZGVmYXVsdCk7CisJCQkJCQkJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlv bkNhbGwyKHBnX2dldF9leHByLAorCQkJCQkJCQkJCQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVt KGRlZmV4cHIpLAorCQkJCQkJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJ CQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iajIsICIle2V4cHJlc3Npb259cyIsCisJCQkJ CQkJCQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCQkJCQkJfQorCQkJCQkJ ZWxzZQorCQkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoyLCAicHJlc2VudCIsIGZhbHNl KTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7dXNpbmd9cyIsIHRtcG9i ajIpOworCQkJCQl9CisKKwkJCQkJLyogSWYgaXQncyBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhl IENBU0NBREUgY2xhdXNlICovCisJCQkJCWlmIChpc3R5cGUpCisJCQkJCXsKKwkJCQkJCXRtcG9i ajIgPSBuZXdfb2JqdHJlZSgiQ0FTQ0FERSIpOworCQkJCQkJaWYgKHN1YmNtZC0+YmVoYXZpb3Ig IT0gRFJPUF9DQVNDQURFKQorCQkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoyLCAicHJl c2VudCIsIGZhbHNlKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7Y2Fz Y2FkZX1zIiwgdG1wb2JqMik7CisJCQkJCX0KKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKyNp ZmRlZiBUT0RPTElTVAorCQkJY2FzZSBBVF9BbHRlckNvbHVtbkdlbmVyaWNPcHRpb25zOgorCQkJ CXRtcG9iaiA9IGRlcGFyc2VfRmR3T3B0aW9ucygoTGlzdCAqKSBzdWJjbWQtPmRlZiwKKwkJCQkJ CQkJCQkJc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJY2FzZSBBVF9D aGFuZ2VPd25lcjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiT1dORVIgVE8gJXtvd25l cn1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjaGFuZ2Ugb3duZXIi LAorCQkJCQkJCQkJCSJvd25lciIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJZ2V0X3JvbGVz cGVjX25hbWUoc3ViY21kLT5uZXdvd25lcikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0NsdXN0ZXJPbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQ0xVU1RFUiBPTiAle2lu ZGV4fUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNsdXN0ZXIgb24i LAorCQkJCQkJCQkJCSJpbmRleCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENsdXN0ZXI6CisJCQkJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIlNFVCBXSVRIT1VUIENMVVNURVIiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgInNldCB3aXRob3V0IGNsdXN0ZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9TZXRMb2dnZWQ6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBMT0dH RUQiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBsb2dnZWQiKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRVbkxvZ2dlZDoKKwkJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiU0VUIFVOTE9HR0VEIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJzZXQgdW5sb2dnZWQiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9E cm9wT2lkczoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFdJVEhPVVQgT0lEUyIs IDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHdpdGhvdXQgb2lkcyIp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9TZXRBY2Nlc3NNZXRob2Q6CisJCQkJdG1wb2Jq ID0gbmV3X29ianRyZWVfVkEoIlNFVCBBQ0NFU1MgTUVUSE9EICV7YWNjZXNzX21ldGhvZH1JIiwg MiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgYWNjZXNzIG1ldGhvZCIs CisJCQkJCQkJCQkJImFjY2Vzc19tZXRob2QiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9TZXRUYWJsZVNwYWNlOgorCQkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJTRVQgVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsIDIsCisJCQkJ CQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHRhYmxlc3BhY2UiLAorCQkJCQkJCQkJ CSJ0YWJsZXNwYWNlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9TZXRSZWxPcHRpb25zOgorCQkJY2FzZSBBVF9SZXNldFJlbE9wdGlv bnM6CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QoCisJ CQkJCQkJCQkJCQkJCQkgZGVwYXJzZV9SZWxTZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJFTkFCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJCSJ0cmlnZ2VyIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFi bGVBbHdheXNUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgQUxXQVlT IFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImVuYWJsZSBhbHdheXMgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdnZXIiLCBPYmpUeXBl U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJs ZVJlcGxpY2FUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQTElD QSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJp bmcsICJlbmFibGUgcmVwbGljYSB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJpZ2dlciIsIE9ialR5 cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlz YWJsZVRyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiAl e3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJs ZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+ bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZ0FsbDoKKwkJCQl0 bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJCQkJ CQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciBhbGwiKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ0FsbDoKKwkJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiRElTQUJMRSBUUklHR0VSIEFMTCIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX0VuYWJsZVRyaWdVc2VyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFC TEUgVFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJl bmFibGUgdHJpZ2dlciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJs ZVRyaWdVc2VyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIg VVNFUiIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmln Z2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSdWxlOgorCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJ CQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJ1bGUiLAorCQkJCQkJCQkJCSJy dWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9FbmFibGVBbHdheXNSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJF TkFCTEUgQUxXQVlTIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImVuYWJsZSBhbHdheXMgcnVsZSIsCisJCQkJCQkJCQkJInJ1bGUiLCBPYmpUeXBl U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJs ZVJlcGxpY2FSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQTElD QSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJl bmFibGUgcmVwbGljYSBydWxlIiwKKwkJCQkJCQkJCQkicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJ1bGU6CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUlVMRSAle3J1bGV9SSIsIDIsCisJ CQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSBydWxlIiwKKwkJCQkJCQkJ CQkicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfQWRkSW5oZXJpdDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiSU5I RVJJVCAle3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJp bmhlcml0IiwKKwkJCQkJCQkJCQkicGFyZW50IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQlu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQkJCQlzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9Ecm9wSW5oZXJpdDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTk8gSU5IRVJJ VCAle3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9w IGluaGVyaXQiLAorCQkJCQkJCQkJCSJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJ CW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJCQkJCXN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX0FkZE9mOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPRiAle3R5cGVfb2Z9 VCIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIG9mIiwKKwkJCQkJ CQkJCQkidHlwZV9vZiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9y X3R5cGUoc3ViLT5hZGRyZXNzLm9iamVjdElkLCAtMSkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX0Ryb3BPZjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTk9UIE9GIiwgMSwK KwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJub3Qgb2YiKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9SZXBsaWNhSWRlbnRpdHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIlJFUExJQ0EgSURFTlRJVFkiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgInJlcGxpY2EgaWRlbnRpdHkiKTsKKwkJCQlzd2l0Y2ggKCgoUmVwbGljYUlkZW50aXR5 U3RtdCAqKSBzdWJjbWQtPmRlZiktPmlkZW50aXR5X3R5cGUpCisJCQkJeworCQkJCQljYXNlIFJF UExJQ0FfSURFTlRJVFlfREVGQVVMVDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9i aiwgIiV7aWRlbnR9cyIsICJERUZBVUxUIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBM SUNBX0lERU5USVRZX0ZVTEw6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIl e2lkZW50fXMiLCAiRlVMTCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVO VElUWV9OT1RISU5HOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZGVu dH1zIiwgIk5PVEhJTkciKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJ VFlfSU5ERVg6CisJCQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIlVTSU5HIElOREVYICV7 aW5kZXh9SSIsIDEsCisJCQkJCQkJCQkJCQkgImluZGV4IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkJCQkJCSAoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5uYW1lKTsKKwkJ CQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9cyIsIHRtcG9iajIpOwor CQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJv d1NlY3VyaXR5OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUk9XIExFVkVM IFNFQ1VSSVRZIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUg cm93IHNlY3VyaXR5Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJvd1Nl Y3VyaXR5OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFJPVyBMRVZFTCBT RUNVUklUWSIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSBy b3cgc2VjdXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKyNpZmRlZiBUT0RPTElTVAorCQkJY2FzZSBB VF9HZW5lcmljT3B0aW9uczoKKwkJCQl0bXBvYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3Qg Kikgc3ViY21kLT5kZWYsIE5VTEwpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNlIEFU X0F0dGFjaFBhcnRpdGlvbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQVRUQUNIIFBB UlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9i alR5cGVTdHJpbmcsICJhdHRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCQkicGFydGl0aW9uX2lk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlzdWItPmFkZHJlc3Mu b2JqZWN0SWQpKTsKKworCQkJCWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BB UlRJVElPTkVEX1RBQkxFKQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3Bh cnRpdGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChz dWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9EZXRh Y2hQYXJ0aXRpb246CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJ T04gJXtwYXJ0aXRpb25faWRlbnRpdHl9RCIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZGV0YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkJInBhcnRpdGlvbl9pZGVudGl0 eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJc3ViLT5hZGRyZXNzLm9iamVj dElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbkZpbmFsaXpl OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJERVRBQ0ggUEFSVElUSU9OICV7cGFydGl0 aW9uX2lkZW50aXR5fUQgRklOQUxJWkUiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImRldGFjaCBwYXJ0aXRpb24gZmluYWxpemUiLAorCQkJCQkJCQkJCSJwYXJ0aXRpb25f aWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+YWRkcmVz cy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9BZGRJZGVudGl0eToKKwkJ CQl7CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisJCQkJ CU9ialRyZWUgICAgKnNlcWRlZjsKKwkJCQkJQ29sdW1uRGVmICAqY29sZGVmID0gKENvbHVtbkRl ZiAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg Q09MVU1OICV7Y29sdW1ufUkgQUREICV7aWRlbnRpdHlfY29sdW1ufXMiLCAyLAorCQkJCQkJCQkJ CQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgaWRlbnRpdHkiLAorCQkJCQkJCQkJCQkiY29s dW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlhdHRudW0gPSBnZXRf YXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2VxX3Jl bGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwg dHJ1ZSk7CisJCQkJCXNlcWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBj b2xkZWYtPmlkZW50aXR5LCBmYWxzZSk7CisKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w b2JqLCAiaWRlbnRpdHlfY29sdW1uIiwgc2VxZGVmKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7 CisJCQljYXNlIEFUX1NldElkZW50aXR5OgorCQkJCXsKKwkJCQkJRGVmRWxlbSAgICAqZGVmZWw7 CisJCQkJCWNoYXIJCWlkZW50aXR5ID0gMDsKKwkJCQkJT2JqVHJlZSAgICAqc2VxZGVmOworCQkJ CQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOworCisKKwkJCQkJdG1w b2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJ CQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGlkZW50aXR5IiwKKwkJCQkJCQkJCQkJ ImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNt ZC0+ZGVmKQorCQkJCQl7CisJCQkJCQlMaXN0CSAgICpkZWYgPSAoTGlzdCAqKSBzdWJjbWQtPmRl ZjsKKworCQkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgTGlzdCkpOworCisJCQkJCQlkZWZl bCA9IGxpbml0aWFsX25vZGUoRGVmRWxlbSwgZGVmKTsKKwkJCQkJCWlkZW50aXR5ID0gZGVmR2V0 SW50MzIoZGVmZWwpOworCQkJCQl9CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlv bkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50 aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCQkJCQlz ZXFkZWYgPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcV9yZWxpZCwgaWRlbnRpdHksIHRydWUp OworCisJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwg c2VxZGVmKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSBBVF9Ecm9wSWRlbnRp dHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1J IERST1AgSURFTlRJVFkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRy b3AgaWRlbnRpdHkiLAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZl9ub3RfZXhp c3RzfXMiLAorCQkJCQkJCQkJIHN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIp OworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coV0FSTklORywgInVuc3Vw cG9ydGVkIGFsdGVyIHRhYmxlIHN1YnR5cGUgJWQiLAorCQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsK KwkJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFdlIGRvbid0IHN1cHBvcnQgcmVwbGljYXRp bmcgQUxURVIgVEFCTEUgd2hpY2ggY29udGFpbnMgdm9sYXRpbGUKKwkJICogZnVuY3Rpb25zIGJl Y2F1c2UgSXQncyBwb3NzaWJsZSB0aGUgZnVuY3Rpb25zIGNvbnRhaW4gRERML0RNTCBpbgorCQkg KiB3aGljaCBjYXNlIHRoZXNlIG9wZXJhdGlvbnMgd2lsbCBiZSBleGVjdXRlZCB0d2ljZSBhbmQg Y2F1c2UKKwkJICogZHVwbGljYXRlIGRhdGEuIEluIGFkZGl0aW9uLCB3ZSBkb24ndCBrbm93IHdo ZXRoZXIgdGhlIHRhYmxlcyBiZWluZworCQkgKiBhY2Nlc3NlZCBieSB0aGVzZSBEREwvRE1MIGFy ZSBwdWJsaXNoZWQgb3Igbm90LiBTbyBibGluZGx5IGFsbG93aW5nCisJCSAqIHN1Y2ggZnVuY3Rp b25zIGNhbiBhbGxvdyB1bmludGVuZGVkIGNsYXVzZXMgbGlrZSB0aGUgdGFibGVzCisJCSAqIGFj Y2Vzc2VkIGluIHRob3NlIGZ1bmN0aW9ucyBtYXkgbm90IGV2ZW4gZXhpc3Qgb24gdGhlIHN1YnNj cmliZXIuCisJCSAqLworCQlpZiAoY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnMoKE5vZGUgKikg ZXhwcnMpKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJF X05PVF9TVVBQT1JURUQpLAorCQkJCQkgZXJybXNnKCJBTFRFUiBUQUJMRSBjb21tYW5kIHVzaW5n IHZvbGF0aWxlIGZ1bmN0aW9uIGNhbm5vdCBiZSByZXBsaWNhdGVkIikpKTsKKworCQkvKgorCQkg KiBDbGVhbiB0aGUgbGlzdCBhcyB3ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGVyZSBpcyBubyB2b2xh dGlsZQorCQkgKiBmdW5jdGlvbi4KKwkJICovCisJCWxpc3RfZnJlZShleHBycyk7CisJCWV4cHJz ID0gTklMOworCX0KKworCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWlm IChsaXN0X2xlbmd0aChzdWJjbWRzKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWFwcGVuZF9h cnJheV9vYmplY3QoYWx0ZXJUYWJsZVN0bXQsICIle3N1YmNtZHM6LCB9cyIsIHN1YmNtZHMpOwor CisJcmV0dXJuIGFsdGVyVGFibGVTdG10OworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JF QVRFIFRBQkxFIGRlcGFyc2luZy4KKyAqCisgKiBEZXBhcnNlIGEgQ29sdW1uRGVmIG5vZGUgd2l0 aGluIGEgcmVndWxhciAobm9uLXR5cGVkKSB0YWJsZSBjcmVhdGlvbi4KKyAqCisgKiBOT1QgTlVM TCBjb25zdHJhaW50cyBpbiB0aGUgY29sdW1uIGRlZmluaXRpb24gYXJlIGVtaXR0ZWQgZGlyZWN0 bHkgaW4gdGhlCisgKiBjb2x1bW4gZGVmaW5pdGlvbiBieSB0aGlzIHJvdXRpbmU7IG90aGVyIGNv bnN0cmFpbnRzIG11c3QgYmUgZW1pdHRlZAorICogZWxzZXdoZXJlICh0aGUgaW5mbyBpbiB0aGUg cGFyc2Ugbm9kZSBpcyBpbmNvbXBsZXRlIGFueXdheS4pLgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0NvbHVtbkRlZihSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBi b29sIGNvbXBvc2l0ZSwKKwkJCQkgIENvbHVtbkRlZiAqY29sZGVmLCBib29sIGlzX2FsdGVyLCBM aXN0ICoqZXhwcnMpCit7CisJT2JqVHJlZSAgICAqY29sdW1uOworCU9ialRyZWUgICAgKnRtcG9i ajsKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBs ZQlhdHRyVHVwOworCUZvcm1fcGdfYXR0cmlidXRlIGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOwor CWludDMyCQl0eXBtb2Q7CisJT2lkCQkJdHlwY29sbGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxs OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKgorCSAqIEluaGVyaXRlZCBjb2x1bW5zIHdpdGhv dXQgbG9jYWwgZGVmaW5pdGlvbnMgbXVzdCBub3QgYmUgZW1pdHRlZC4KKwkgKgorCSAqIFhYWCBt YXliZSBpdCBpcyB1c2VmdWwgdG8gaGF2ZSB0aGVtIHdpdGggInByZXNlbnQgPSBmYWxzZSIgb3Ig c29tZQorCSAqIHN1Y2g/CisJICovCisJaWYgKCFjb2xkZWYtPmlzX2xvY2FsKQorCQlyZXR1cm4g TlVMTDsKKworCWF0dHJUdXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+ Y29sbmFtZSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9S LCAiY291bGQgbm90IGZpbmQgY2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRp b24gJXUiLAorCQkJIGNvbGRlZi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1f cGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNv bGwocmVsaWQsIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5 cGNvbGxhdGlvbik7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiAle25hbWV9 SSAle2NvbHR5cGV9VCAle2NvbXByZXNzaW9ufXMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1zCisJ ICogJXtjb2xsYXRpb259cworCSAqLworCWNvbHVtbiA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9 SSAle2NvbHR5cGV9VCIsIDMsCisJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1u IiwKKwkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFtZSwKKwkJCQkJ CQkiY29sdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUo dHlwaWQsIHR5cG1vZCkpOworCisJLyogVVNJTkcgY2xhdXNlICovCisJdG1wb2JqID0gbmV3X29i anRyZWUoIkNPTVBSRVNTSU9OIik7CisJaWYgKGNvbGRlZi0+Y29tcHJlc3Npb24pCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCBjb2xkZWYt PmNvbXByZXNzaW9uKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAi JXtjb21wcmVzc2lvbl9tZXRob2R9SSIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAi cHJlc2VudCIsIGZhbHNlKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtj b21wcmVzc2lvbn1zIiwgdG1wb2JqKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJDT0xMQVRF Iik7CisJaWYgKE9pZElzVmFsaWQodHlwY29sbGF0aW9uKSkKKwl7CisJCU9ialRyZWUgICAgKmNv bGxuYW1lOworCisJCWNvbGxuYW1lID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxh dGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSAgIHR5cGNvbGxhdGlvbik7CisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOworCX0KKwllbHNlCisJ CWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7Y29sbGF0aW9ufXMiLCB0bXBvYmopOworCisJaWYgKCFj b21wb3NpdGUpCisJeworCQlPaWQJCQlzZXFyZWxpZCA9IEludmFsaWRPaWQ7CisKKwkJLyoKKwkJ ICogRW1pdCBhIE5PVCBOVUxMIGRlY2xhcmF0aW9uIGlmIG5lY2Vzc2FyeS4gIE5vdGUgdGhhdCB3 ZSBjYW5ub3QKKwkJICogdHJ1c3QgcGdfYXR0cmlidXRlLmF0dG5vdG51bGwgaGVyZSwgYmVjYXVz ZSB0aGF0IGJpdCBpcyBhbHNvIHNldAorCQkgKiB3aGVuIHByaW1hcnkga2V5cyBhcmUgc3BlY2lm aWVkOyB3ZSBtdXN0IG5vdCBlbWl0IGEgTk9UIE5VTEwKKwkJICogY29uc3RyYWludCBpbiB0aGF0 IGNhc2UsIHVubGVzcyBleHBsaWNpdGx5IHNwZWNpZmllZC4gIFRoZXJlZm9yZSwKKwkJICogd2Ug c2NhbiB0aGUgbGlzdCBvZiBjb25zdHJhaW50cyBhdHRhY2hlZCB0byB0aGlzIGNvbHVtbiB0bwor CQkgKiBkZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRvIGVtaXQgYW55dGhpbmcuIChGb3J0dW5h dGVseSwgTk9UIE5VTEwKKwkJICogY29uc3RyYWludHMgY2Fubm90IGJlIHRhYmxlIGNvbnN0cmFp bnRzLikKKwkJICoKKwkJICogSW4gdGhlIEFMVEVSIFRBQkxFIGNhc2VzLCB3ZSBhbHNvIGFkZCBh IE5PVCBOVUxMIGlmIHRoZSBjb2xEZWYgaXMKKwkJICogbWFya2VkIGlzX25vdF9udWxsLgorCQkg Ki8KKwkJc2F3X25vdG51bGwgPSBmYWxzZTsKKwkJZm9yZWFjaChjZWxsLCBjb2xkZWYtPmNvbnN0 cmFpbnRzKQorCQl7CisJCQlDb25zdHJhaW50ICpjb25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmly c3QoY2VsbCk7CisKKwkJCWlmIChjb25zdHItPmNvbnR5cGUgPT0gQ09OU1RSX05PVE5VTEwpCisJ CQkJc2F3X25vdG51bGwgPSB0cnVlOworCQl9CisJCWlmIChpc19hbHRlciAmJiBjb2xkZWYtPmlz X25vdF9udWxsKQorCQkJc2F3X25vdG51bGwgPSB0cnVlOworCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGNvbHVtbiwgIiV7bm90X251bGx9cyIsCisJCQkJCQkJIHNhd19ub3RudWxsID8gIk5PVCBO VUxMIiA6ICIiKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCQlpZiAo YXR0ckZvcm0tPmF0dGhhc2RlZikKKwkJeworCQkJY2hhcgkgICAqZGVmc3RyOworCisJCQlkZWZz dHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0s CisJCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBleHBycyk7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIiV7ZGVmYXVsdH1zIiwgZGVmc3RyKTsKKwkJfQorCQllbHNlCisJCQlhcHBl bmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJYXBwZW5kX29iamVj dF9vYmplY3QoY29sdW1uLCAiJXtkZWZhdWx0fXMiLCB0bXBvYmopOworCisJCS8qIElERU5USVRZ IENPTFVNTiAqLworCQlpZiAoY29sZGVmLT5pZGVudGl0eSkKKwkJeworCQkJT2lkCQkJYXR0bm8g PSBnZXRfYXR0bnVtKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCisJCQlzZXFyZWxpZCA9IGdl dElkZW50aXR5U2VxdWVuY2UocmVsaWQsIGF0dG5vLCBmYWxzZSk7CisJCX0KKworCQl0bXBvYmog PSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcXJlbGlkLCBjb2xkZWYtPmlkZW50aXR5LCBpc19h bHRlcik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7aWRlbnRpdHlfY29sdW1u fXMiLCB0bXBvYmopOworCisJCS8qIEdFTkVSQVRFRCBDT0xVTU4gRVhQUkVTU0lPTiAqLworCQl0 bXBvYmogPSBuZXdfb2JqdHJlZSgiR0VORVJBVEVEIEFMV0FZUyBBUyIpOworCQlpZiAoY29sZGVm LT5nZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9TVE9SRUQpCisJCXsKKwkJCWNoYXIJ ICAgKmRlZnN0cjsKKworCQkJZGVmc3RyID0gUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0 aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCQkgIGRwY29udGV4dCwgZXhwcnMpOwor CQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtnZW5lcmF0aW9uX2V4cHJ9cyBTVE9S RUQiLCBkZWZzdHIpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmos ICJwcmVzZW50IiwgZmFsc2UpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7 Z2VuZXJhdGVkX2NvbHVtbn1zIiwgdG1wb2JqKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0 clR1cCk7CisKKwlyZXR1cm4gY29sdW1uOworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JF QVRFIFRBQkxFIE9GIGRlcGFyc2luZy4KKyAqCisgKiBEZXBhcnNlIGEgQ29sdW1uRGVmIG5vZGUg d2l0aGluIGEgdHlwZWQgdGFibGUgY3JlYXRpb24uCVRoaXMgaXMgc2ltcGxlcgorICogdGhhbiB0 aGUgcmVndWxhciBjYXNlLCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gZW1pdCB0aGUgdHlwZSBk ZWNsYXJhdGlvbiwKKyAqIGNvbGxhdGlvbiwgb3IgZGVmYXVsdC4gIEhlcmUgd2Ugb25seSByZXR1 cm4gc29tZXRoaW5nIGlmIHRoZSBjb2x1bW4gaXMgYmVpbmcKKyAqIGRlY2xhcmVkIE5PVCBOVUxM LgorICoKKyAqIEFzIGluIGRlcGFyc2VfQ29sdW1uRGVmLCBhbnkgb3RoZXIgY29uc3RyYWludCBp cyBwcm9jZXNzZWQgZWxzZXdoZXJlLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Nv bHVtbkRlZl90eXBlZChSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBDb2x1bW5E ZWYgKmNvbGRlZikKK3sKKwlPYmpUcmVlICAgICpjb2x1bW4gPSBOVUxMOworCU9ialRyZWUgICAg KnRtcG9iajsKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCUhl YXBUdXBsZQlhdHRyVHVwOworCUZvcm1fcGdfYXR0cmlidXRlIGF0dHJGb3JtOworCU9pZAkJCXR5 cGlkOworCWludDMyCQl0eXBtb2Q7CisJT2lkCQkJdHlwY29sbGF0aW9uOworCWJvb2wJCXNhd19u b3RudWxsOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlhdHRyVHVwID0gU2VhcmNoU3lzQ2FjaGVB dHROYW1lKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChh dHRyVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBmaW5kIGNhY2hlIGVudHJ5IGZvciBj b2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uICV1IiwKKwkJCSBjb2xkZWYtPmNvbG5hbWUsIHJlbGlk KTsKKwlhdHRyRm9ybSA9IChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHJUdXApOwor CisJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKHJlbGlkLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJ ICAmdHlwaWQsICZ0eXBtb2QsICZ0eXBjb2xsYXRpb24pOworCisJLyoKKwkgKiBTZWFyY2ggZm9y IGEgTk9UIE5VTEwgZGVjbGFyYXRpb24uICBBcyBpbiBkZXBhcnNlX0NvbHVtbkRlZiwgd2UgcmVs eSBvbgorCSAqIGZpbmRpbmcgYSBjb25zdHJhaW50IG9uIHRoZSBjb2x1bW4gcmF0aGVyIHRoYW4g Y29sZGVmLT5pc19ub3RfbnVsbC4KKwkgKiAoVGhpcyByb3V0aW5lIGlzIG5ldmVyIHVzZWQgZm9y IEFMVEVSIGNhc2VzLikKKwkgKi8KKwlzYXdfbm90bnVsbCA9IGZhbHNlOworCWZvcmVhY2goY2Vs bCwgY29sZGVmLT5jb25zdHJhaW50cykKKwl7CisJCUNvbnN0cmFpbnQgKmNvbnN0ciA9IChDb25z dHJhaW50ICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoY29uc3RyLT5jb250eXBlID09IENPTlNU Ul9OT1ROVUxMKQorCQl7CisJCQlzYXdfbm90bnVsbCA9IHRydWU7CisJCQlicmVhazsKKwkJfQor CX0KKworCWlmICghc2F3X25vdG51bGwgJiYgIWF0dHJGb3JtLT5hdHRoYXNkZWYpCisJeworCQlS ZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICog VmVyYm9zZSBzeW50YXgKKwkgKgorCSAqICV7bmFtZX1JIFdJVEggT1BUSU9OUyAle2RlZmF1bHR9 cyAle25vdF9udWxsfXMuCisJICovCisJY29sdW1uID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1J IFdJVEggT1BUSU9OUyIsIDIsCisJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1u IiwKKwkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFtZSk7CisKKwlh cHBlbmRfc3RyaW5nX29iamVjdChjb2x1bW4sICIle25vdF9udWxsfXMiLAorCQkJCQkJIHNhd19u b3RudWxsID8gIk5PVCBOVUxMIiA6ICIiKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJERUZB VUxUIik7CisJaWYgKGF0dHJGb3JtLT5hdHRoYXNkZWYpCisJeworCQljaGFyCSAgICpkZWZzdHI7 CisKKwkJZGVmc3RyID0gUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9y bS0+YXR0bnVtLAorCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBOVUxMKTsKKworCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXBvYmosICIle2RlZmF1bHR9cyIsIGRlZnN0cik7CisJfQorCWVsc2UKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29i amVjdF9vYmplY3QoY29sdW1uLCAiJXtkZWZhdWx0fXMiLCB0bXBvYmopOworCisJLyoKKwkgKiBH ZW5lcmF0ZWQgY29sdW1ucyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0eXBlZCB0YWJsZXMsIHNvIHdl IGFyZSBkb25lLgorCSAqLworCisJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCisJcmV0dXJu IGNvbHVtbjsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIGRlZmluaXRpb24gb2YgY29sdW1uIGlk ZW50aXR5LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtbklkZW50aXR5KE9p ZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVl ICAgICpjb2x1bW47CisJT2JqVHJlZSAgICAqaWRlbnRvYmo7CisJTGlzdAkgICAqZWxlbXMgPSBO SUw7CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlGb3JtX3BnX3NlcXVl bmNlIHNlcWZvcm07CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJY2hhcgkgICAq aWRlbnRmbXQ7CisJY2hhcgkgICAqb2JqZm10OworCisJY29sdW1uID0gbmV3X29ianRyZWUoIiIp OworCisJaWYgKCFPaWRJc1ZhbGlkKHNlcXJlbGlkKSkKKwl7CisJCWFwcGVuZF9ib29sX29iamVj dChjb2x1bW4sICJwcmVzZW50IiwgZmFsc2UpOworCQlyZXR1cm4gY29sdW1uOworCX0KKworCWlm IChhbHRlcl90YWJsZSkKKwl7CisJCWlkZW50Zm10ID0gIlNFVCBHRU5FUkFURUQgIjsKKwkJb2Jq Zm10ID0gIiV7b3B0aW9ufXMiOworCX0KKwllbHNlCisJeworCQlpZGVudGZtdCA9ICJHRU5FUkFU RUQgIjsKKwkJb2JqZm10ID0gIiV7b3B0aW9ufXMgQVMgSURFTlRJVFkiOworCX0KKworCWlkZW50 b2JqID0gbmV3X29ianRyZWUoaWRlbnRmbXQpOworCisJaWYgKGlkZW50aXR5ID09IEFUVFJJQlVU RV9JREVOVElUWV9BTFdBWVMpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50b2JqLCBvYmpm bXQsICJBTFdBWVMiKTsKKwllbHNlIGlmIChpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlf QllfREVGQVVMVCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoaWRlbnRvYmosIG9iamZtdCwgIkJZ IERFRkFVTFQiKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdChpZGVudG9iaiwgInByZXNl bnQiLCBmYWxzZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2lkZW50aXR5 X3R5cGV9cyIsIGlkZW50b2JqKTsKKworCXJlbCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlv bklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEo U0VRUkVMSUQsIHNlcXJlbGlkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAorCQkJ IHNlcXJlbGlkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNl cXR1cGxlKTsKKwlzZXFkYXRhID0gZ2V0X3NlcXVlbmNlX3ZhbHVlcyhzZXFyZWxpZCk7CisKKwkv KiBEZWZpbml0aW9uIGVsZW1lbnRzICovCisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNl X1NlcV9DYWNoZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVu ZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsK KwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KE5VTEwsIHNl cWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1Nl cV9NaW52YWx1ZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVu ZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUp KTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChOVUxMLCBz ZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9T ZXFfUmVzdGFydChOVUxMLCBzZXFkYXRhKSk7CisJLyogV2UgcHVycG9zZWZ1bGx5IGRvIG5vdCBl bWl0IE9XTkVEIEJZIGhlcmUgKi8KKworCWlmIChhbHRlcl90YWJsZSkKKwkJYXBwZW5kX2FycmF5 X29iamVjdChjb2x1bW4sICIle3NlcV9kZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKwllbHNlCisJ CWFwcGVuZF9hcnJheV9vYmplY3QoY29sdW1uLCAiKCAle3NlcV9kZWZpbml0aW9uOiB9cyApIiwg ZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVy biBjb2x1bW47Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQgKC4u LikKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVy VGFibGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3RDZWxsICAg KmNlbGw7CisJT2JqVHJlZSAgICAqY29sc2V0OworCWNoYXIJICAgKmZtdDsKKwlib29sCQlpc19y ZXNldCA9IHN1YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNldE9wdGlvbnM7CisKKwkvKgorCSAqIFZl cmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBSRVNFVHxTRVQg KCV7b3B0aW9uczosIH1zKQorCSAqLworCWlmIChpc19yZXNldCkKKwkJZm10ID0gIkFMVEVSIENP TFVNTiAle2NvbHVtbn1JIFJFU0VUICI7CisJZWxzZQorCQlmbXQgPSAiQUxURVIgQ09MVU1OICV7 Y29sdW1ufUkgU0VUICI7CisKKwljb2xzZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJjb2x1 bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJZm9yZWFjaChjZWxsLCAoTGlz dCAqKSBzdWJjbWQtPmRlZikKKwl7CisJCURlZkVsZW0gICAgKmVsZW07CisJCU9ialRyZWUgICAg KnNldDsKKworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlzZXQgPSBkZXBh cnNlX0RlZkVsZW0oZWxlbSwgaXNfcmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChzZXRzLCBuZXdf b2JqZWN0X29iamVjdChzZXQpKTsKKwl9CisKKwlBc3NlcnQoc2V0cyk7CisJYXBwZW5kX2FycmF5 X29iamVjdChjb2xzZXQsICIoJXtvcHRpb25zOiwgfXMpIiwgc2V0cyk7CisKKwlyZXR1cm4gY29s c2V0OworfQorCisvKgorICogRGVwYXJzZSB0aGUgQ1JFQVRFIERPTUFJTgorICoKKyAqIEdpdmVu IGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVy biB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRG9tYWluKE9pZCBvYmplY3RJZCwg Tm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUgICAgKmNyZWF0ZURvbWFpbjsKKwlPYmpUcmVl ICAgICp0bXBvYmo7CisJSGVhcFR1cGxlCXR5cFR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsK KwlMaXN0CSAgICpjb25zdHJhaW50czsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBF T0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBkb21haW4gd2l0aCBPSUQgJXUiLCBvYmpl Y3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJ LyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIERPTUFJTiAle2lkZW50aXR5 fUQgQVMgJXt0eXBlfVQgJXtub3RfbnVsbH1zICV7Y29uc3RyYWludHN9cworCSAqICV7Y29sbGF0 aW9ufXMKKwkgKi8KKwljcmVhdGVEb21haW4gPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlh cHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVEb21haW4sCisJCQkJCQkgIkRPTUFJTiAle2lkZW50 aXR5fUQgQVMiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChj cmVhdGVEb21haW4sCisJCQkJCQkgIiV7dHlwZX1UIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf dHlwZSh0eXBGb3JtLT50eXBiYXNldHlwZSwgdHlwRm9ybS0+dHlwdHlwbW9kKSk7CisKKwlpZiAo dHlwRm9ybS0+dHlwbm90bnVsbCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRG9tYWlu LCAiJXtub3RfbnVsbH1zIiwgIk5PVCBOVUxMIik7CisJZWxzZQorCQlhcHBlbmRfc3RyaW5nX29i amVjdChjcmVhdGVEb21haW4sICIle25vdF9udWxsfXMiLCAiIik7CisKKwljb25zdHJhaW50cyA9 IG9idGFpbkNvbnN0cmFpbnRzKE5JTCwgSW52YWxpZE9pZCwgb2JqZWN0SWQpOworCWlmIChjb25z dHJhaW50cyA9PSBOSUwpCisJeworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCWFwcGVu ZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwllbHNlCisJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2VsZW1lbnRzOiwgfXMiLCAxLAorCQkJCQkJCQkiZWxl bWVudHMiLCBPYmpUeXBlQXJyYXksIGNvbnN0cmFpbnRzKTsKKwlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVEb21haW4sICIle2NvbnN0cmFpbnRzfXMiLCB0bXBvYmopOworCisJdG1wb2JqID0g bmV3X29ianRyZWUoIkNPTExBVEUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBjb2xs YXRpb24pKQorCXsKKwkJT2JqVHJlZSAgICAqY29sbG5hbWU7CisKKwkJY29sbG5hbWUgPSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ ICAgdHlwRm9ybS0+dHlwY29sbGF0aW9uKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2Jq LCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRl RG9tYWluLCAiJXtjb2xsYXRpb259cyIsIHRtcG9iaik7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlw VHVwKTsKKworCXJldHVybiBjcmVhdGVEb21haW47Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3Jl YXRlRnVuY3Rpb25TdG10IChDUkVBVEUgRlVOQ1RJT04pCisgKgorICogR2l2ZW4gYSBmdW5jdGlv biBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRoZSBKU09O CisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGdW5jdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBh cnNldHJlZSkKK3sKKwlDcmVhdGVGdW5jdGlvblN0bXQgKm5vZGUgPSAoQ3JlYXRlRnVuY3Rpb25T dG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpjcmVhdGVGdW5jOworCU9ialRyZWUgICAg KnRtcG9iajsKKwlEYXR1bQkJdG1wZGF0dW07CisJY2hhcgkgICAqc291cmNlOworCWNoYXIJICAg KnByb2JpbjsKKwlMaXN0CSAgICpwYXJhbXM7CisJTGlzdAkgICAqZGVmYXVsdHM7CisJTGlzdAkg ICAqc2V0cyA9IE5JTDsKKwlMaXN0CSAgICp0eXBlcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxs OworCUxpc3RDZWxsICAgKmN1cmRlZjsKKwlMaXN0Q2VsbCAgICp0YWJsZV9wYXJhbXMgPSBOVUxM OworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlIZWFwVHVw bGUJbGFuZ1R1cDsKKwlPaWQJCSAgICp0eXBhcnJheTsKKwlPaWQJCSAgICp0cmZ0eXBlczsKKwlG b3JtX3BnX2xhbmd1YWdlIGxhbmdGb3JtOworCWludAkJCWk7CisJaW50CQkJdHlwbnVtOworCWlu dAkJCW50eXBlczsKKwlib29sCQlpc251bGw7CisJYm9vbAkJaXNmdW5jdGlvbjsKKworCS8qIEdl dCB0aGUgcGdfcHJvYyB0dXBsZSAqLworCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09J RCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJ CQkgb2JqZWN0SWQpOworCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NU dXApOworCisJLyogR2V0IHRoZSBjb3JyZXNwb25kaW5nIHBnX2xhbmd1YWdlIHR1cGxlICovCisJ bGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShMQU5HT0lELCBwcm9jRm9ybS0+cHJvbGFuZyk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxhbmdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWx1cmUgZm9yIGxhbmd1YWdlIHdpdGggT0lEICV1IiwKKwkJCSBwcm9jRm9ybS0+cHJv bGFuZyk7CisJbGFuZ0Zvcm0gPSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VUU1RSVUNUKGxhbmdUdXAp OworCisJLyoKKwkgKiBEZXRlcm1pbmUgdXNlZnVsIHZhbHVlcyBmb3IgcHJvc3JjIGFuZCBwcm9i aW4uICBXZSBjb3BlIHdpdGggcHJvYmluCisJICogYmVpbmcgZWl0aGVyIE5VTEwgb3IgIi0iLCBi dXQgcHJvc3JjIG11c3QgaGF2ZSBhIHZhbGlkIHZhbHVlLgorCSAqLworCXRtcGRhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3By b3NyYywgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgIm51bGwgcHJvc3Jj IGluIGZ1bmN0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXNvdXJjZSA9IFRleHREYXR1 bUdldENTdHJpbmcodG1wZGF0dW0pOworCisJLyogRGV0ZXJtaW5lIGEgdXNlZnVsIHZhbHVlIGZv ciBwcm9iaW4gKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVw LAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9iaW4sICZpc251bGwpOworCWlmIChpc251bGwp CisJCXByb2JpbiA9IE5VTEw7CisJZWxzZQorCXsKKwkJcHJvYmluID0gVGV4dERhdHVtR2V0Q1N0 cmluZyh0bXBkYXR1bSk7CisJCWlmIChwcm9iaW5bMF0gPT0gJ1wwJyB8fCBzdHJjbXAocHJvYmlu LCAiLSIpID09IDApCisJCQlwcm9iaW4gPSBOVUxMOworCX0KKworCS8qCisJICogVmVyYm9zZSBz eW50YXgKKwkgKgorCSAqIENSRUFURSAle29yX3JlcGxhY2V9cyBGVU5DVElPTiAle3NpZ25hdHVy ZX1zIFJFVFVSTlMgJXtyZXR1cm5fdHlwZX1zCisJICogTEFOR1VBR0UgJXt0cmFuc2Zvcm1fdHlw ZX1zICV7bGFuZ3VhZ2V9SSAle3dpbmRvd31zICV7dm9sYXRpbGl0eX1zCisJICogJXtwYXJhbGxl bF9zYWZldHl9cyAle2xlYWtwcm9vZn1zICV7c3RyaWN0fXMgJXtzZWN1cml0eV9kZWZpbmVyfXMK KwkgKiAle2Nvc3R9cyAle3Jvd3N9cyAle3N1cHBvcnR9cyAle3NldF9vcHRpb25zOiB9cyBBUyAl e29iamZpbGV9TCwKKwkgKiAle3N5bWJvbH1MCisJICovCisJY3JlYXRlRnVuYyA9IG5ld19vYmp0 cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle29y X3JlcGxhY2V9cyIsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiKTsK KworCS8qCisJICogVG8gY29uc3RydWN0IHRoZSBhcmd1bWVudHMgYXJyYXksIGV4dHJhY3QgdGhl IHR5cGUgT0lEcyBmcm9tIHRoZQorCSAqIGZ1bmN0aW9uJ3MgcGdfcHJvYyBlbnRyeS4gIElmIHBy b25hcmdzIGVxdWFscyB0aGUgcGFyYW1ldGVyIGxpc3QKKwkgKiBsZW5ndGgsIHRoZXJlIGFyZSBu byBPVVQgcGFyYW1ldGVycyBhbmQgdGh1cyB3ZSBjYW4gZXh0cmFjdCB0aGUgdHlwZQorCSAqIE9J RCBmcm9tIHByb2FyZ3R5cGVzOyBvdGhlcndpc2Ugd2UgbmVlZCB0byBkZWNvZGUgcHJvYWxsYXJn dHlwZXMsIHdoaWNoCisJICogaXMgYSBiaXQgbW9yZSBpbnZvbHZlZC4KKwkgKi8KKwl0eXBhcnJh eSA9IHBhbGxvYyhsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKSAqIHNpemVvZihPaWQpKTsK KwlpZiAobGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycykgPiBwcm9jRm9ybS0+cHJvbmFyZ3Mp CisJeworCQlEYXR1bQkJYWxsdHlwZXM7CisJCURhdHVtCSAgICp2YWx1ZXM7CisJCWJvb2wJICAg Km51bGxzOworCQlpbnQJCQluZWxlbXM7CisKKwkJYWxsdHlwZXMgPSBTeXNDYWNoZUdldEF0dHIo UFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2FsbGFyZ3R5cGVz LCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJOVUxMIHByb2FsbGFy Z3R5cGVzLCBidXQgbW9yZSBwYXJhbWV0ZXJzIHRoYW4gYXJncyIpOworCQlkZWNvbnN0cnVjdF9h cnJheShEYXR1bUdldEFycmF5VHlwZVAoYWxsdHlwZXMpLAorCQkJCQkJICBPSURPSUQsIDQsICd0 JywgJ2knLAorCQkJCQkJICAmdmFsdWVzLCAmbnVsbHMsICZuZWxlbXMpOworCQlpZiAobmVsZW1z ICE9IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpKQorCQkJZWxvZyhFUlJPUiwgIm1pc21h dGNoZWQgcHJvYWxsYXJnYXR5cGVzIik7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0X2xlbmd0aChu b2RlLT5wYXJhbWV0ZXJzKTsgaSsrKQorCQkJdHlwYXJyYXlbaV0gPSB2YWx1ZXNbaV07CisJfQor CWVsc2UKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJz KTsgaSsrKQorCQkJdHlwYXJyYXlbaV0gPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ld OworCX0KKworCS8qCisJICogSWYgdGhlcmUgYXJlIGFueSBkZWZhdWx0IGV4cHJlc3Npb25zLCB3 ZSByZWFkIHRoZSBkZXBhcnNlZCBleHByZXNzaW9uCisJICogYXMgYSBsaXN0IHNvIHRoYXQgd2Ug Y2FuIGF0dGFjaCB0aGVtIHRvIGVhY2ggYXJndW1lbnQuCisJICovCisJdG1wZGF0dW0gPSBTeXND YWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJv YXJnZGVmYXVsdHMsICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJZGVmYXVsdHMgPSBG dW5jdGlvbkdldERlZmF1bHRzKERhdHVtR2V0VGV4dFAodG1wZGF0dW0pKTsKKwkJY3VyZGVmID0g bGlzdF9oZWFkKGRlZmF1bHRzKTsKKwl9CisJZWxzZQorCXsKKwkJZGVmYXVsdHMgPSBOSUw7CisJ CWN1cmRlZiA9IE5VTEw7CisJfQorCisJLyoKKwkgKiBOb3cgaXRlcmF0ZSBvdmVyIGVhY2ggcGFy YW1ldGVyIGluIHRoZSBwYXJzZSB0cmVlIHRvIGNyZWF0ZSB0aGUKKwkgKiBwYXJhbWV0ZXJzIGFy cmF5LgorCSAqLworCXBhcmFtcyA9IE5JTDsKKwl0eXBudW0gPSAwOworCWZvcmVhY2goY2VsbCwg bm9kZS0+cGFyYW1ldGVycykKKwl7CisJCUZ1bmN0aW9uUGFyYW1ldGVyICpwYXJhbSA9IChGdW5j dGlvblBhcmFtZXRlciAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUgICAgKnBhcmFtb2JqOwor CQlPYmpUcmVlICAgICpkZWZhdWx0dmFsOworCQlPYmpUcmVlICAgICpuYW1lOworCisJCS8qCisJ CSAqIEEgUEFSQU1fVEFCTEUgcGFyYW1ldGVyIGluZGljYXRlcyB0aGUgZW5kIG9mIGlucHV0IGFy Z3VtZW50czsgdGhlCisJCSAqIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBwYXJ0IG9mIHRoZSBy ZXR1cm4gdHlwZS4gIFdlIGlnbm9yZSB0aGVtCisJCSAqIGhlcmUsIGJ1dCBrZWVwIHRyYWNrIG9m IHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBsaXN0IHNvIHRoYXQgd2UKKwkJICogY2FuIGVh c2lseSBwcm9kdWNlIHRoZSByZXR1cm4gdHlwZSBiZWxvdy4KKwkJICovCisJCWlmIChwYXJhbS0+ bW9kZSA9PSBGVU5DX1BBUkFNX1RBQkxFKQorCQl7CisJCQl0YWJsZV9wYXJhbXMgPSBjZWxsOwor CQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBWZXJib3NlIHN5bnRheCBmb3IgcGFyYW1hdGVy OiAle21vZGV9cyAle25hbWV9cyAle3R5cGV9VAorCQkgKiAle2RlZmF1bHR9cworCQkgKgorCQkg KiBOb3RlIHRoYXQgJXtuYW1lfXMgaXMgYSBzdHJpbmcgaGVyZSwgbm90IGFuIGlkZW50aWZpZXI7 IHRoZSByZWFzb24KKwkJICogZm9yIHRoaXMgaXMgdGhhdCBhbiBhYnNlbnQgcGFyYW1ldGVyIG5h bWUgbXVzdCBwcm9kdWNlIGFuIGVtcHR5CisJCSAqIHN0cmluZywgbm90ICIiLCB3aGljaCBpcyB3 aGF0IHdvdWxkIGhhcHBlbiBpZiB3ZSB3ZXJlIHRvIHVzZQorCQkgKiAle25hbWV9SSBoZXJlLiAg U28gd2UgYWRkIGFub3RoZXIgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gdG8gYWxsb3cgdXMKKwkJICog dG8gaW5qZWN0IGEgInByZXNlbnQiIHBhcmFtZXRlci4KKwkJICovCisJCXBhcmFtb2JqID0gbmV3 X29ianRyZWUoIiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChwYXJhbW9iaiwgIiV7bW9kZX1z IiwKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9JTiA/ICJJTiIgOgorCQkJCQkJ CSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX09VVCA/ICJPVVQiIDoKKwkJCQkJCQkgcGFyYW0t Pm1vZGUgPT0gRlVOQ19QQVJBTV9JTk9VVCA/ICJJTk9VVCIgOgorCQkJCQkJCSBwYXJhbS0+bW9k ZSA9PSBGVU5DX1BBUkFNX1ZBUklBRElDID8gIlZBUklBRElDIiA6CisJCQkJCQkJICJJTiIpOwor CisJCS8qIE9wdGlvbmFsIHdob2xlc2FsZSBzdXBwcmVzc2lvbiBvZiAibmFtZSIgb2NjdXJzIGhl cmUgKi8KKworCQluYW1lID0gbmV3X29ianRyZWUoIiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVj dChuYW1lLCAiJXtuYW1lfUkiLAorCQkJCQkJCSBwYXJhbS0+bmFtZSA/IHBhcmFtLT5uYW1lIDog Ik5VTEwiKTsKKworCQlhcHBlbmRfYm9vbF9vYmplY3QobmFtZSwgInByZXNlbnQiLAorCQkJCQkJ ICAgcGFyYW0tPm5hbWUgPyB0cnVlIDogZmFsc2UpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHBhcmFtb2JqLCAiJXtuYW1lfXMiLCBuYW1lKTsKKworCQlkZWZhdWx0dmFsID0gbmV3X29ianRy ZWUoIkRFRkFVTFQiKTsKKwkJaWYgKFBvaW50ZXJJc1ZhbGlkKHBhcmFtLT5kZWZleHByKSkKKwkJ eworCQkJY2hhcgkgICAqZXhwcjsKKworCQkJaWYgKGN1cmRlZiA9PSBOVUxMKQorCQkJCWVsb2co RVJST1IsICJwcm9hcmdkZWZhdWx0cyBsaXN0IHRvbyBzaG9ydCIpOworCQkJZXhwciA9IGxmaXJz dChjdXJkZWYpOworCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChkZWZhdWx0dmFsLCAiJXt2YWx1 ZX1zIiwgZXhwcik7CisJCQljdXJkZWYgPSBsbmV4dChkZWZhdWx0cywgY3VyZGVmKTsKKwkJfQor CQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QoZGVmYXVsdHZhbCwgInByZXNlbnQiLCBmYWxz ZSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIle3R5cGV9VCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGFycmF5W3R5cG51bSsrXSwgLTEpKTsKKworCQlh cHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7ZGVmYXVsdH1zIiwgZGVmYXVsdHZhbCk7 CisKKwkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtb2Jq KSk7CisJfQorCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHl9RCIsIDEsCisJ CQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJb2JqZWN0SWQp KTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIigiKTsKKwlhcHBlbmRfYXJyYXlf b2JqZWN0KHRtcG9iaiwgIiV7YXJndW1lbnRzOiwgfXMiLCBwYXJhbXMpOworCWFwcGVuZF9mb3Jt YXRfc3RyaW5nKHRtcG9iaiwgIikiKTsKKworCWlzZnVuY3Rpb24gPSAocHJvY0Zvcm0tPnByb2tp bmQgIT0gUFJPS0lORF9QUk9DRURVUkUpOworCisJaWYgKGlzZnVuY3Rpb24pCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICJGVU5DVElPTiAle3NpZ25hdHVyZX1zIiwgdG1wb2Jq KTsKKwllbHNlCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICJQUk9DRURVUkUg JXtzaWduYXR1cmV9cyIsIHRtcG9iaik7CisKKwkvKgorCSAqIEEgcmV0dXJuIHR5cGUgY2FuIGFk b3B0IG9uZSBvZiB0d28gZm9ybXM6IGVpdGhlciBhIFtTRVRPRl0gc29tZV90eXBlLAorCSAqIG9y IGEgVEFCTEUobGlzdC1vZi10eXBlcykuICBXZSBjYW4gdGVsbCB0aGUgc2Vjb25kIGZvcm0gYmVj YXVzZSB3ZSBzYXcKKwkgKiBhIHRhYmxlIHBhcmFtIGFib3ZlIHdoaWxlIHNjYW5uaW5nIHRoZSBh cmd1bWVudCBsaXN0LgorCSAqLworCWlmICh0YWJsZV9wYXJhbXMgPT0gTlVMTCkKKwl7CisJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJCQkicmV0dXJuX2Zvcm0iLCBPYmpU eXBlU3RyaW5nLCAicGxhaW4iKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtz ZXRvZn1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3JldHNldCA/ICJTRVRPRiIgOiAiIik7CisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cmV0dHlwZX1UIiwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb3JldHR5cGUsIC0xKSk7CisJfQorCWVsc2UK Kwl7CisJCUxpc3QJICAgKnJldHR5cGVzID0gTklMOworCQlPYmpUcmVlICAgICpwYXJhbW9iajsK KworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiVEFCTEUiLCAxLAorCQkJCQkJCQkicmV0dXJu X2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAidGFibGUiKTsKKwkJZm9yICg7IHRhYmxlX3BhcmFtcyAh PSBOVUxMOyB0YWJsZV9wYXJhbXMgPSBsbmV4dChub2RlLT5wYXJhbWV0ZXJzLCB0YWJsZV9wYXJh bXMpKQorCQl7CisJCQlGdW5jdGlvblBhcmFtZXRlciAqcGFyYW0gPSBsZmlyc3QodGFibGVfcGFy YW1zKTsKKworCQkJcGFyYW1vYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCQlhcHBlbmRfc3RyaW5n X29iamVjdChwYXJhbW9iaiwgIiV7bmFtZX1JIiwgcGFyYW0tPm5hbWUpOworCQkJYXBwZW5kX29i amVjdF9vYmplY3QocGFyYW1vYmosICIle3R5cGV9VCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfdHlwZSh0eXBhcnJheVt0eXBudW0rK10sIC0xKSk7CisJCQlyZXR0eXBlcyA9IGxhcHBlbmQo cmV0dHlwZXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtb2JqKSk7CisJCX0KKworCQlhcHBlbmRf YXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle3JldHR5cGVzOiwgfXMpIiwgcmV0dHlwZXMpOworCX0K KworCWlmIChpc2Z1bmN0aW9uKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAi UkVUVVJOUyAle3JldHVybl90eXBlfXMiLCB0bXBvYmopOworCisJLyogVFJBTlNGT1JNIEZPUiBU WVBFICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlRSQU5TRk9STSIpOworCisJbnR5cGVzID0g Z2V0X2Z1bmNfdHJmdHlwZXMocHJvY1R1cCwgJnRyZnR5cGVzKTsKKwlmb3IgKGkgPSAwOyBpIDwg bnR5cGVzOyBpKyspCisJeworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRk9SIFRZUEUgJXt0 eXBlfVQiLCAxLAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19v Ymp0cmVlX2Zvcl90eXBlKHRyZnR5cGVzW2ldLCAtMSkpOworCQl0eXBlcyA9IGxhcHBlbmQodHlw ZXMsIHRtcG9iaik7CisJfQorCisJaWYgKHR5cGVzKQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRt cG9iaiwgIiV7Zm9yX3R5cGU6LCB9cyIsIHR5cGVzKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29i amVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qo Y3JlYXRlRnVuYywgIiV7dHJhbnNmb3JtX3R5cGV9cyIsIHRtcG9iaik7CisKKwlhcHBlbmRfc3Ry aW5nX29iamVjdChjcmVhdGVGdW5jLCAiTEFOR1VBR0UgJXtsYW5ndWFnZX1JIiwKKwkJCQkJCSBO YW1lU3RyKGxhbmdGb3JtLT5sYW5uYW1lKSk7CisKKwlpZiAoaXNmdW5jdGlvbikKKwl7CisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3dpbmRvd31zIiwKKwkJCQkJCQkgcHJv Y0Zvcm0tPnByb2tpbmQgPT0gUFJPS0lORF9XSU5ET1cgPyAiV0lORE9XIiA6ICIiKTsKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7dm9sYXRpbGl0eX1zIiwKKwkJCQkJCQkg cHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09IFBST1ZPTEFUSUxFX1ZPTEFUSUxFID8KKwkJCQkJCQkg IlZPTEFUSUxFIiA6CisJCQkJCQkJIHByb2NGb3JtLT5wcm92b2xhdGlsZSA9PSBQUk9WT0xBVElM RV9TVEFCTEUgPworCQkJCQkJCSAiU1RBQkxFIiA6ICJJTU1VVEFCTEUiKTsKKworCQlhcHBlbmRf c3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtwYXJhbGxlbF9zYWZldHl9cyIsCisJCQkJCQkJ IHByb2NGb3JtLT5wcm9wYXJhbGxlbCA9PSBQUk9QQVJBTExFTF9TQUZFID8KKwkJCQkJCQkgIlBB UkFMTEVMIFNBRkUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3BhcmFsbGVsID09IFBST1BBUkFM TEVMX1JFU1RSSUNURUQgPworCQkJCQkJCSAiUEFSQUxMRUwgUkVTVFJJQ1RFRCIgOiAiUEFSQUxM RUwgVU5TQUZFIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7bGVh a3Byb29mfXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvbGVha3Byb29mID8gIkxFQUtQUk9PRiIg OiAiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3N0cmljdH1zIiwK KwkJCQkJCQkgcHJvY0Zvcm0tPnByb2lzc3RyaWN0ID8KKwkJCQkJCQkgIlJFVFVSTlMgTlVMTCBP TiBOVUxMIElOUFVUIiA6CisJCQkJCQkJICJDQUxMRUQgT04gTlVMTCBJTlBVVCIpOworCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3NlY3VyaXR5X2RlZmluZXJ9cyIsCisJ CQkJCQkJIHByb2NGb3JtLT5wcm9zZWNkZWYgPworCQkJCQkJCSAiU0VDVVJJVFkgREVGSU5FUiIg OiAiU0VDVVJJVFkgSU5WT0tFUiIpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1 bmMsICIle2Nvc3R9cyIsCisJCQkJCQkJIG5ld19vYmp0cmVlX1ZBKCJDT1NUICV7Y29zdH1uIiwg MSwKKwkJCQkJCQkJCQkJImNvc3QiLCBPYmpUeXBlRmxvYXQsCisJCQkJCQkJCQkJCXByb2NGb3Jt LT5wcm9jb3N0KSk7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIlJPV1MiKTsKKwkJaWYgKHBy b2NGb3JtLT5wcm9yb3dzID09IDApCisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJl c2VudCIsIGZhbHNlKTsKKwkJZWxzZQorCQkJYXBwZW5kX2Zsb2F0X29iamVjdCh0bXBvYmosICIl e3Jvd3N9biIsIHByb2NGb3JtLT5wcm9yb3dzKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3Jl YXRlRnVuYywgIiV7cm93c31zIiwgdG1wb2JqKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgi U1VQUE9SVCAle25hbWV9cyIpOworCQlpZiAocHJvY0Zvcm0tPnByb3N1cHBvcnQpCisJCXsKKwkJ CU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQkvKgorCQkJICogV2Ugc2hvdWxkIHF1YWxpZnkgdGhl IHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1lIGlmIGl0IHdvdWxkbid0IGJlCisJCQkgKiByZXNvbHZl ZCBieSBsb29rdXAgaW4gdGhlIGN1cnJlbnQgc2VhcmNoIHBhdGguCisJCQkgKi8KKwkJCWFyZ3R5 cGVzWzBdID0gSU5URVJOQUxPSUQ7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIl e25hbWV9cyIsCisJCQkJCQkJCSBnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKHByb2NGb3JtLT5wcm9z dXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJCQlOSUwsIGFyZ3R5cGVzLAorCQkJCQkJCQkJCQkJCQlm YWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJCQkJRVhQUl9LSU5EX05PTkUpKTsKKwkJfQorCQllbHNl CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCQlh cHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXtzdXBwb3J0fXMiLCB0bXBvYmopOwor CX0KKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmRl ZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJzZXQiKSA9PSAwKQorCQl7CisJCQlWYXJpYWJsZVNldFN0bXQgKnNzdG10ID0gKFZh cmlhYmxlU2V0U3RtdCAqKSBkZWZlbC0+YXJnOworCQkJY2hhcgkgICAqdmFsdWUgPSBFeHRyYWN0 U2V0VmFyaWFibGVBcmdzKHNzdG10KTsKKworCQkJdG1wb2JqID0gZGVwYXJzZV9GdW5jdGlvblNl dChzc3RtdC0+a2luZCwgc3N0bXQtPm5hbWUsIHZhbHVlKTsKKwkJCXNldHMgPSBsYXBwZW5kKHNl dHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQl9CisJfQorCWFwcGVuZF9hcnJheV9v YmplY3QoY3JlYXRlRnVuYywgIiV7c2V0X29wdGlvbnM6IH1zIiwgc2V0cyk7CisKKwkvKiBBZGQg dGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKwkodm9pZCkgU3lzQ2FjaGVHZXRBdHRyKFBST0NP SUQsIHByb2NUdXAsIEFudW1fcGdfcHJvY19wcm9zcWxib2R5LCAmaXNudWxsKTsKKwlpZiAocHJv Y0Zvcm0tPnByb2xhbmcgPT0gU1FMbGFuZ3VhZ2VJZCAmJiAhaXNudWxsKQorCXsKKwkJU3RyaW5n SW5mb0RhdGEgYnVmOworCisJCWluaXRTdHJpbmdJbmZvKCZidWYpOworCQlwcmludF9mdW5jdGlv bl9zcWxib2R5KCZidWYsIHByb2NUdXApOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0 ZUZ1bmMsICIle2RlZmluaXRpb259cyIsIGJ1Zi5kYXRhKTsKKwl9CisJZWxzZSBpZiAocHJvYmlu ID09IE5VTEwpCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiQVMgJXtk ZWZpbml0aW9ufUwiLAorCQkJCQkJCSBzb3VyY2UpOworCX0KKwllbHNlCisJeworCQlhcHBlbmRf c3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiQVMgJXtvYmpmaWxlfUwiLCBwcm9iaW4pOworCQlh cHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiLCAle3N5bWJvbH1MIiwgc291cmNlKTsK Kwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUobGFuZ1R1cCk7CisJUmVsZWFzZVN5c0NhY2hlKHByb2NU dXApOworCisJcmV0dXJuIGNyZWF0ZUZ1bmM7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRF IE9QRVJBVE9SIENMQVNTIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q3JlYXRlT3BDbGFzc1N0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9wY29p ZCA9IGNtZC0+ZC5jcmVhdGVvcGMuYWRkcmVzcy5vYmplY3RJZDsKKwlIZWFwVHVwbGUJb3BjVHVw OworCUhlYXBUdXBsZQlvcGZUdXA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUZvcm1f cGdfb3BjbGFzcyBvcGNGb3JtOworCU9ialRyZWUgICAgKnN0bXQ7CisJT2JqVHJlZSAgICAqdG1w b2JqOworCUxpc3QJICAgKmxpc3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qIERvbid0IGRl cGFyc2UgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNpb24gKi8K KwlpZiAoY21kLT5pbl9leHRlbnNpb24pCisJCXJldHVybiBOVUxMOworCisJb3BjVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKENMQU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGNvaWQpKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQob3BjVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIG9wY2xhc3Mgd2l0aCBPSUQgJXUiLCBvcGNvaWQpOworCW9wY0Zvcm0gPSAoRm9ybV9w Z19vcGNsYXNzKSBHRVRTVFJVQ1Qob3BjVHVwKTsKKworCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hl MShPUEZBTUlMWU9JRCwgb3BjRm9ybS0+b3BjZmFtaWx5KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQob3BmVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJh dG9yIGZhbWlseSB3aXRoIE9JRCAldSIsIG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJb3BmRm9ybSA9 IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCS8qCisJICogVmVyYm9z ZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSBPUEVSQVRPUiBDTEFTUyAle2lkZW50aXR5fUQgJXtk ZWZhdWx0fXMgRk9SIFRZUEUgJXt0eXBlfVQgVVNJTkcKKwkgKiAle2FtbmFtZX1JICV7b3BmYW1p bHl9cyBBUyAle2l0ZW1zOiwgfXMKKwkgKi8KKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JF QVRFIE9QRVJBVE9SIENMQVNTICV7aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGNGb3Jt LT5vcGNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgICBOYW1lU3RyKG9wY0Zvcm0tPm9wY25hbWUp KSk7CisKKwkvKiBBZGQgdGhlIERFRkFVTFQgY2xhdXNlICovCisJYXBwZW5kX3N0cmluZ19vYmpl Y3Qoc3RtdCwgIiV7ZGVmYXVsdH1zIiwKKwkJCQkJCSBvcGNGb3JtLT5vcGNkZWZhdWx0ID8gIkRF RkFVTFQiIDogIiIpOworCisJLyogQWRkIHRoZSBGT1IgVFlQRSBjbGF1c2UgKi8KKwlhcHBlbmRf b2JqZWN0X29iamVjdChzdG10LCAiRk9SIFRZUEUgJXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl90eXBlKG9wY0Zvcm0tPm9wY2ludHlwZSwgLTEpKTsKKworCS8qIEFkZCB0aGUgVVNJ TkcgY2xhdXNlICovCisJYXBwZW5kX3N0cmluZ19vYmplY3Qoc3RtdCwgIlVTSU5HICV7YW1uYW1l fUkiLCBnZXRfYW1fbmFtZShvcGNGb3JtLT5vcGNtZXRob2QpKTsKKworCS8qCisJICogQWRkIHRo ZSBGQU1JTFkgY2xhdXNlLCBidXQgaWYgaXQgaGFzIHRoZSBzYW1lIG5hbWUgYW5kIG5hbWVzcGFj ZSBhcyB0aGUKKwkgKiBvcGNsYXNzLCB0aGVuIGhhdmUgaXQgZXhwYW5kIHRvIGVtcHR5IGJlY2F1 c2UgaXQgd291bGQgY2F1c2UgYSBmYWlsdXJlCisJICogaWYgdGhlIG9wZmFtaWx5IHdhcyBjcmVh dGVkIGludGVybmFsbHkuCisJICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkZBTUlMWSAl e29wZmFtaWx5fUQiLCAxLAorCQkJCQkJCSJvcGZhbWlseSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCQkgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSkpOworCisJaWYgKHN0cmNtcChOYW1l U3RyKG9wZkZvcm0tPm9wZm5hbWUpLCBOYW1lU3RyKG9wY0Zvcm0tPm9wY25hbWUpKSA9PSAwICYm CisJCW9wZkZvcm0tPm9wZm5hbWVzcGFjZSA9PSBvcGNGb3JtLT5vcGNuYW1lc3BhY2UpCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29i amVjdF9vYmplY3Qoc3RtdCwgIiV7b3BmYW1pbHl9cyIsIHRtcG9iaik7CisKKwkvKgorCSAqIEFk ZCB0aGUgaW5pdGlhbCBpdGVtIGxpc3QuICBOb3RlIHdlIGFsd2F5cyBhZGQgdGhlIFNUT1JBR0Ug Y2xhdXNlLCBldmVuCisJICogd2hlbiBpdCBpcyBpbXBsaWNpdCBpbiB0aGUgb3JpZ2luYWwgY29t bWFuZC4KKwkgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiU1RPUkFHRSIpOworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf dHlwZShvcGNGb3JtLT5vcGNrZXl0eXBlICE9IEludmFsaWRPaWQgPworCQkJCQkJCQkJCQkgIG9w Y0Zvcm0tPm9wY2tleXR5cGUgOiBvcGNGb3JtLT5vcGNpbnR5cGUsCisJCQkJCQkJCQkJCSAgLTEp KTsKKwlsaXN0ID0gbGlzdF9tYWtlMShuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8q IEFkZCB0aGUgZGVjbGFyZWQgb3BlcmF0b3JzICovCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuY3Jl YXRlb3BjLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpvcGVyID0gbGZpcnN0KGNl bGwpOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPUEVSQVRPUiAle251bX1uICV7b3Bl cmF0b3J9Tygle2x0eXBlfVQsICV7cnR5cGV9VCkiLAorCQkJCQkJCQk0LAorCQkJCQkJCQkibnVt IiwgT2JqVHlwZUludGVnZXIsIG9wZXItPm51bWJlciwKKwkJCQkJCQkJIm9wZXJhdG9yIiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9y UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCW9wZXItPm9iamVjdCksCisJCQkJCQkJCSJsdHlw ZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPmxl ZnR0eXBlLCAtMSksCisJCQkJCQkJCSJydHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5l d19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQgdGhl IEZPUiBTRUFSQ0ggLyBGT1IgT1JERVIgQlkgY2xhdXNlICovCisJCWlmIChvcGVyLT5zb3J0ZmFt aWx5ID09IEludmFsaWRPaWQpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3B1 cnBvc2V9cyIsICJGT1IgU0VBUkNIIik7CisJCWVsc2UKKwkJeworCQkJT2JqVHJlZSAgICAqdG1w b2JqMjsKKworCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgT1JERVIgQlkgJXtvcGZh bWlseX1EIiwgMCk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmoyLCAib3BmYW1pbHki LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yRmFtaWx5UmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBvcGVyLT5zb3J0ZmFtaWx5KSk7CisJCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBvYmosICIle3B1cnBvc2V9cyIsIHRtcG9iajIpOworCQl9CisKKwkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJ LyogQWRkIHRoZSBkZWNsYXJlZCBzdXBwb3J0IGZ1bmN0aW9ucyAqLworCWZvcmVhY2goY2VsbCwg Y21kLT5kLmNyZWF0ZW9wYy5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKnByb2Mg PSBsZmlyc3QoY2VsbCk7CisJCUhlYXBUdXBsZQlwcm9jVHVwOworCQlGb3JtX3BnX3Byb2MgcHJv Y0Zvcm07CisJCU9pZAkJICAgKnByb2FyZ3R5cGVzOworCQlMaXN0CSAgICphcmdsaXN0ID0gTklM OworCQlpbnQJCQlpOworCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2Jq ZWN0SWRHZXREYXR1bShwcm9jLT5vYmplY3QpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBy b2NUdXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVy ZSAldSIsIHByb2MtPm9iamVjdCk7CisJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RS VUNUKHByb2NUdXApOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJGVU5DVElPTiAle251 bX1uICgle2x0eXBlfVQsICV7cnR5cGV9VCkgJXtmdW5jdGlvbn1EIiwKKwkJCQkJCQkJNCwKKwkJ CQkJCQkJIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBwcm9jLT5udW1iZXIsCisJCQkJCQkJCSJsdHlw ZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPmxl ZnR0eXBlLCAtMSksCisJCQkJCQkJCSJydHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5l d19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPnJpZ2h0dHlwZSwgLTEpLAorCQkJCQkJCQkiZnVuY3Rp b24iLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJv Y0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJIE5hbWVTdHIocHJvY0Zvcm0tPnBy b25hbWUpKSk7CisKKwkJcHJvYXJndHlwZXMgPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVz OworCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCXsKKwkJCU9i alRyZWUgICAgKmFyZzsKKworCQkJYXJnID0gbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYXJndHlw ZXNbaV0sIC0xKTsKKwkJCWFyZ2xpc3QgPSBsYXBwZW5kKGFyZ2xpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KGFyZykpOworCQl9CisKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKCIpOwor CQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIiV7YXJndHlwZXM6LCB9VCIsIGFyZ2xpc3Qp OworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7CisKKwkJUmVsZWFzZVN5c0Nh Y2hlKHByb2NUdXApOworCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIkFTICV7aXRlbXM6 LCB9cyIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wZlR1cCk7CisJUmVsZWFzZVN5c0Nh Y2hlKG9wY1R1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVh dGVUcmlnU3RtdCAoQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSkKKyAqCisgKiBHaXZlbiBhIHRyaWdn ZXIgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlT3BGYW1pbHkoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJSGVhcFR1cGxlCW9wZlR1cDsKKwlIZWFwVHVwbGUJYW1UdXA7CisJRm9ybV9w Z19vcGZhbWlseSBvcGZGb3JtOworCUZvcm1fcGdfYW0JYW1Gb3JtOworCU9ialRyZWUgICAgKmNv cGZTdG10OworCisJb3BmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELCBPYmplY3RJ ZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0 aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRT VFJVQ1Qob3BmVHVwKTsKKworCWFtVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJ ZEdldERhdHVtKG9wZkZvcm0tPm9wZm1ldGhvZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChh bVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0 aG9kICV1IiwKKwkJCSBvcGZGb3JtLT5vcGZtZXRob2QpOworCWFtRm9ybSA9IChGb3JtX3BnX2Ft KSBHRVRTVFJVQ1QoYW1UdXApOworCisJY29wZlN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRF IE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXthbW5hbWV9SSIsCisJCQkJCQkJ ICAyLAorCQkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJ ICAgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSksCisJCQkJCQkJICAiYW1uYW1lIiwgT2JqVHlw ZVN0cmluZywgTmFtZVN0cihhbUZvcm0tPmFtbmFtZSkpOworCisJUmVsZWFzZVN5c0NhY2hlKGFt VHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKworCXJldHVybiBjb3BmU3RtdDsKK30K Kworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVQb2xpY3lTdG10KE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVBvbGljeVN0bXQgKm5vZGUgPSAoQ3JlYXRl UG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcG9saWN5OworCisJcG9saWN5 ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBQT0xJQ1kgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJ CQkiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5wb2xpY3lfbmFtZSk7CisKKwkvKiBB ZGQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZmICovCisJYWRkX3BvbGljeV9jbGF1c2VzKHBvbGljeSwg b2JqZWN0SWQsIG5vZGUtPnJvbGVzLCAhIW5vZGUtPnF1YWwsCisJCQkJCSAgICEhbm9kZS0+d2l0 aF9jaGVjayk7CisKKwlyZXR1cm4gcG9saWN5OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0FsdGVyUG9saWN5U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlB bHRlclBvbGljeVN0bXQgKm5vZGUgPSAoQWx0ZXJQb2xpY3lTdG10ICopIHBhcnNldHJlZTsKKwlP YmpUcmVlICAgICpwb2xpY3k7CisKKwlwb2xpY3kgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgUE9M SUNZICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywg bm9kZS0+cG9saWN5X25hbWUpOworCisJLyogQWRkIHRoZSByZXN0IG9mIHRoZSBzdHVmZiAqLwor CWFkZF9wb2xpY3lfY2xhdXNlcyhwb2xpY3ksIG9iamVjdElkLCBub2RlLT5yb2xlcywgISFub2Rl LT5xdWFsLAorCQkJCQkgICAhIW5vZGUtPndpdGhfY2hlY2spOworCisJcmV0dXJuIHBvbGljeTsK K30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTY2hlbWFTdG10LgorICoKKyAqIEdpdmVuIGEg c2NoZW1hIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVTY2hlbWFTdG10KE9pZCBvYmplY3RJZCwg Tm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVNjaGVtYVN0bXQgKm5vZGUgPSAoQ3JlYXRlU2No ZW1hU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqY3JlYXRlU2NoZW1hOworCU9ialRy ZWUgICAgKmF1dGg7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUg U0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zCisJICov CisJY3JlYXRlU2NoZW1hID0gbmV3X29ianRyZWUoIkNSRUFURSBTQ0hFTUEiKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVNjaGVtYSwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJ CSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJYXBwZW5k X3N0cmluZ19vYmplY3QoY3JlYXRlU2NoZW1hLCAiJXtuYW1lfUkiLCBub2RlLT5zY2hlbWFuYW1l KTsKKworCWF1dGggPSBuZXdfb2JqdHJlZSgiQVVUSE9SSVpBVElPTiIpOworCWlmIChub2RlLT5h dXRocm9sZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYXV0aCwgIiV7YXV0aG9yaXphdGlvbl9y b2xlfUkiLAorCQkJCQkJCSBnZXRfcm9sZXNwZWNfbmFtZShub2RlLT5hdXRocm9sZSkpOworCWVs c2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdChhdXRoLCAiJXthdXRob3JpemF0aW9uX3JvbGV9 SSAiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KGF1dGgsICJwcmVzZW50IiwgZmFsc2UpOworCX0K KwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTY2hlbWEsICIle2F1dGhvcml6YXRpb259cyIs IGF1dGgpOworCisJcmV0dXJuIGNyZWF0ZVNjaGVtYTsKK30KKworLyoKKyAqIFJldHVybiB0aGUg ZGVmYXVsdCB2YWx1ZSBvZiBhIGRvbWFpbi4KKyAqLworc3RhdGljIGNoYXIgKgorRG9tYWluR2V0 RGVmYXVsdChIZWFwVHVwbGUgZG9tVHVwKQoreworCURhdHVtCQlkZWY7CisJTm9kZQkgICAqZGVm dmFsOworCWNoYXIJICAgKmRlZnN0cjsKKwlib29sCQlpc251bGw7CisKKwlkZWYgPSBTeXNDYWNo ZUdldEF0dHIoVFlQRU9JRCwgZG9tVHVwLCBBbnVtX3BnX3R5cGVfdHlwZGVmYXVsdGJpbiwKKwkJ CQkJCSAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgImRvbWFpbiBcIiVz XCIgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUiLAorCQkJIE5hbWVTdHIoKChGb3JtX3Bn X3R5cGUpIEdFVFNUUlVDVChkb21UdXApKS0+dHlwbmFtZSkpOworCWRlZnZhbCA9IHN0cmluZ1Rv Tm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKGRlZikpOworCWRlZnN0ciA9IGRlcGFyc2VfZXhwcmVz c2lvbihkZWZ2YWwsIE5VTEwgLyogZHBjb250ZXh0PyAqLyAsCisJCQkJCQkJCWZhbHNlLCBmYWxz ZSk7CisKKwlyZXR1cm4gZGVmc3RyOworfQorCisvKgorICogRGVwYXJzZSBhIEFsdGVyRG9tYWlu U3RtdC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckRvbWFpblN0bXQoT2lk IG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQlPYmplY3RBZGRyZXNzIGNvbnN0cmFp bnRBZGRyKQoreworCUFsdGVyRG9tYWluU3RtdCAqbm9kZSA9IChBbHRlckRvbWFpblN0bXQgKikg cGFyc2V0cmVlOworCUhlYXBUdXBsZQlkb21UdXA7CisJRm9ybV9wZ190eXBlIGRvbUZvcm07CisJ T2JqVHJlZSAgICAqYWx0ZXJEb207CisJY2hhcgkgICAqZm10OworCWNvbnN0IGNoYXIgKnR5cGU7 CisKKwkvKiBBTFRFUiBET01BSU4gRFJPUCBDT05TVFJBSU5UIGlzIGhhbmRsZWQgYnkgdGhlIERS T1Agc3VwcG9ydCBjb2RlICovCisJaWYgKG5vZGUtPnN1YnR5cGUgPT0gJ1gnKQorCQlyZXR1cm4g TlVMTDsKKworCWRvbVR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBvYmplY3RJZCk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGRvbVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBkb21haW4gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlkb21G b3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKGRvbVR1cCk7CisKKwlzd2l0Y2ggKG5vZGUt PnN1YnR5cGUpCisJeworCQljYXNlICdUJzoKKwkJCS8qIFNFVCBERUZBVUxUIC8gRFJPUCBERUZB VUxUICovCisJCQlpZiAobm9kZS0+ZGVmID09IE5VTEwpCisJCQl7CisJCQkJZm10ID0gIkFMVEVS IERPTUFJTiI7CisJCQkJdHlwZSA9ICJkcm9wIGRlZmF1bHQiOworCQkJCWFsdGVyRG9tID0gbmV3 X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsIHR5cGUpOworCQkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtpZGVudGl0eX1EIERST1AgREVGQVVMVCIs CisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJfQor CQkJZWxzZQorCQkJeworCQkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJCXR5cGUgPSAic2V0 IGRlZmF1bHQiOworCQkJCWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIs IE9ialR5cGVTdHJpbmcsIHR5cGUpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9t LCAiJXtpZGVudGl0eX1EIFNFVCBERUZBVUxUIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICBOYW1lU3Ry KGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJEb20s ICIle2RlZmF1bHR9cyIsIERvbWFpbkdldERlZmF1bHQoZG9tVHVwKSk7CisJCQl9CisKKwkJCWJy ZWFrOworCQljYXNlICdOJzoKKwkJCS8qIERST1AgTk9UIE5VTEwgKi8KKwkJCWZtdCA9ICJBTFRF UiBET01BSU4iOworCQkJdHlwZSA9ICJkcm9wIG5vdCBudWxsIjsKKwkJCWFsdGVyRG9tID0gbmV3 X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsIHR5cGUpOworCQkJYXBw ZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50aXR5fUQgRFJPUCBOT1QgTlVMTCIs CisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCWJyZWFr OworCQljYXNlICdPJzoKKwkJCS8qIFNFVCBOT1QgTlVMTCAqLworCQkJZm10ID0gIkFMVEVSIERP TUFJTiI7CisJCQl0eXBlID0gInNldCBub3QgbnVsbCI7CisJCQlhbHRlckRvbSA9IG5ld19vYmp0 cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtpZGVudGl0eX1EIFNFVCBOT1QgTlVMTCIsCisJCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJ CQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCWJyZWFrOworCQlj YXNlICdDJzoKKworCQkJLyoKKwkJCSAqIEFERCBDT05TVFJBSU5ULiAgT25seSBDSEVDSyBjb25z dHJhaW50cyBhcmUgc3VwcG9ydGVkIGJ5CisJCQkgKiBkb21haW5zCisJCQkgKi8KKwkJCWZtdCA9 ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJhZGQgY29uc3RyYWludCI7CisJCQlhbHRlckRv bSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsK KwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJ CQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJLyogQSBuZXcgY29u c3RyYWludCBoYXMgYSBuYW1lIGFuZCBkZWZpbml0aW9uICovCisJCQlhcHBlbmRfc3RyaW5nX29i amVjdChhbHRlckRvbSwgIkFERCBDT05TVFJBSU5UICV7Y29uc3RyYWludF9uYW1lfXMiLAorCQkJ CQkJCQkgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJhaW50QWRkci5vYmplY3RJZCkpOworCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJEb20sICIle2RlZmluaXRpb259cyIsCisJCQkJCQkJ CSBwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJhaW50QWRkci5vYmpl Y3RJZCkpOworCQkJYnJlYWs7CisJCWNhc2UgJ1YnOgorCQkJLyogVkFMSURBVEUgQ09OU1RSQUlO VCAqLworCQkJZm10ID0gIkFMVEVSIERPTUFJTiI7CisJCQl0eXBlID0gInZhbGlkYXRlIGNvbnN0 cmFpbnQiOworCisJCQkvKgorCQkJICogUHJvY2VzcyBzdWJ0eXBlPXNwZWNpZmljIG9wdGlvbnMu IFZhbGlkYXRpb24gYSBjb25zdHJhaW50CisJCQkgKiByZXF1aXJlcyBpdHMgbmFtZS4KKwkJCSAq LworCQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgdHlwZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRp dHl9RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRG9tLCAiVkFMSURBVEUgQ09OU1RSQUlOVCAle2Nv bnN0cmFpbnRfbmFtZX1zIiwgbm9kZS0+bmFtZSk7CisKKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3VidHlwZSAlYyIsIG5vZGUtPnN1YnR5cGUpOworCX0K KworCS8qIERvbmUgKi8KKwlSZWxlYXNlU3lzQ2FjaGUoZG9tVHVwKTsKKworCXJldHVybiBhbHRl ckRvbTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTdGF0c1N0bXQuCisgKgorICogR2l2 ZW4gYSBzdGF0aXN0aWNzIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCBy ZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVN0YXRpc3RpY3NTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVN0YXRzU3RtdCAqbm9kZSA9IChD cmVhdGVTdGF0c1N0bXQgKikgcGFyc2V0cmVlOworCUZvcm1fcGdfc3RhdGlzdGljX2V4dCBzdGF0 Zm9ybTsKKwlPYmpUcmVlICAgICpjcmVhdGVTdGF0OworCUhlYXBUdXBsZQl0dXA7CisJRGF0dW0J CWRhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlMaXN0CSAgICpzdGF0ZXhwcnMgPSBOSUw7CisKKwlj cmVhdGVTdGF0ID0gbmV3X29ianRyZWUoIkNSRUFURSBTVEFUSVNUSUNTIik7CisJYXBwZW5kX3N0 cmluZ19vYmplY3QoY3JlYXRlU3RhdCwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBub2Rl LT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJdHVwID0gU2VhcmNo U3lzQ2FjaGUxKFNUQVRFWFRPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIHN0YXRpc3RpYyAldSIsIG9iamVjdElkKTsKKworCXN0YXRmb3JtID0gKEZvcm1fcGdf c3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHR1cCk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChj cmVhdGVTdGF0LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUoc3RhdGZvcm0tPnN0eG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihzdGF0Zm9y bS0+c3R4bmFtZSkpKTsKKworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFNUQVRFWFRPSUQsIHR1 cCwgQW51bV9wZ19zdGF0aXN0aWNfZXh0X3N0eGV4cHJzLAorCQkJCQkJCSZpc251bGwpOworCWlm ICghaXNudWxsKQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisJCVJlbGF0aW9uCXN0YXRzcmVsOwor CQlMaXN0CSAgICpjb250ZXh0OworCQlMaXN0CSAgICpleHBycyA9IE5JTDsKKwkJY2hhcgkgICAq ZXhwcnNTdHJpbmc7CisKKwkJc3RhdHNyZWwgPSByZWxhdGlvbl9vcGVuKHN0YXRmb3JtLT5zdHhy ZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3Io UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc3RhdHNyZWwpLAorCQkJCQkJCQkJICBSZWxhdGlvbkdl dFJlbGlkKHN0YXRzcmVsKSk7CisKKwkJZXhwcnNTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5n KGRhdHVtKTsKKwkJZXhwcnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoZXhwcnNTdHJpbmcpOwor CisJCWZvcmVhY2gobGMsIGV4cHJzKQorCQl7CisJCQlOb2RlCSAgICpleHByID0gKE5vZGUgKikg bGZpcnN0KGxjKTsKKwkJCWNoYXIJICAgKnN0YXRleHByOworCisJCQlzdGF0ZXhwciA9IGRlcGFy c2VfZXhwcmVzc2lvbihleHByLCBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCQkJc3RhdGV4cHJz ID0gbGFwcGVuZChzdGF0ZXhwcnMsIG5ld19zdHJpbmdfb2JqZWN0KHN0YXRleHByKSk7CisJCX0K KworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNyZWF0ZVN0YXQsICJPTiAle2V4cHI6LCB9cyIsIHN0 YXRleHBycyk7CisJCXBmcmVlKGV4cHJzU3RyaW5nKTsKKwkJcmVsYXRpb25fY2xvc2Uoc3RhdHNy ZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJfQorCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoU1RB VEVYVE9JRCwgdHVwLCBBbnVtX3BnX3N0YXRpc3RpY19leHRfc3R4a2V5cywKKwkJCQkJCQkmaXNu dWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCWludAkJCWtleW5vOworCQljaGFyCSAgICphdHRu YW1lOworCQlMaXN0CSAgICpzdGF0Y29scyA9IE5JTDsKKwkJaW50MnZlY3RvciAqaW5kb3B0aW9u OworCisJCWluZG9wdGlvbiA9IChpbnQydmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihkYXR1bSk7 CisKKwkJZm9yIChrZXlubyA9IDA7IGtleW5vIDwgaW5kb3B0aW9uLT5kaW0xOyBrZXlubysrKQor CQl7CisJCQlhdHRuYW1lID0gZ2V0X2F0dG5hbWUoc3RhdGZvcm0tPnN0eHJlbGlkLCBpbmRvcHRp b24tPnZhbHVlc1trZXlub10sCisJCQkJCQkJCSAgZmFsc2UpOworCQkJc3RhdGNvbHMgPSBsYXBw ZW5kKHN0YXRjb2xzLCBuZXdfc3RyaW5nX29iamVjdChhdHRuYW1lKSk7CisJCX0KKworCQlpZiAo aW5kb3B0aW9uLT5kaW0xKQorCQl7CisJCQkvKiBBcHBlbmQgYSAnLCcgaWYgc3RhdGV4cHJzIGlz IHByZXNlbnQgZWxzZSBhcHBlbmQgJ09OJyAqLworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3Jl YXRlU3RhdCwgIiV7Y29tbWF9cyIsIHN0YXRleHBycyA/ICIsIiA6ICJPTiIpOworCQkJYXBwZW5k X2FycmF5X29iamVjdChjcmVhdGVTdGF0LCAiJXtjb2xzOiwgfXMiLCBzdGF0Y29scyk7CisJCX0K Kwl9CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyhjcmVhdGVTdGF0LCAiRlJPTSIpOworCisJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RhdCwgIiV7c3RhdF90YWJsZV9pZGVudGl0eX1EIiwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZ2V0X3JlbF9uYW1lc3BhY2Uoc3RhdGZv cm0tPnN0eHJlbGlkKSwKKwkJCQkJCQkJCQkJCSAgZ2V0X3JlbF9uYW1lKHN0YXRmb3JtLT5zdHhy ZWxpZCkpKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCisJcmV0dXJuIGNyZWF0ZVN0YXQ7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIENyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10IChDUkVBVEUg U0VSVkVSKQorICoKKyAqIEdpdmVuIGEgc2VydmVyIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhh dCBjcmVhdGVkIGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBh bHRlciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZvcmVp Z25TZXJ2ZXJTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZv cmVpZ25TZXJ2ZXJTdG10ICpub2RlID0gKENyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10ICopIHBhcnNl dHJlZTsKKwlPYmpUcmVlICAgICpjcmVhdGVTZXJ2ZXI7CisJT2JqVHJlZSAgICAqdG1wOworCisJ Y3JlYXRlU2VydmVyID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBTRVJWRVIgJXtpZGVudGl0eX1J IiwgMSwKKwkJCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zZXJ2ZXJu YW1lKTsKKworCS8qIEFkZCBhIFRZUEUgY2xhdXNlLCBpZiBhbnkgKi8KKwl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiVFlQRSIsIDApOworCWlmIChub2RlLT5zZXJ2ZXJ0eXBlKQorCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXAsICIle3R5cGV9TCIsIG5vZGUtPnNlcnZlcnR5cGUpOworCWVsc2UKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVj dF9vYmplY3QoY3JlYXRlU2VydmVyLCAiJXt0eXBlfXMiLCB0bXApOworCisJLyogQWRkIGEgVkVS U0lPTiBjbGF1c2UsIGlmIGFueSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWRVJTSU9OIiwg MCk7CisJaWYgKG5vZGUtPnZlcnNpb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7 dmVyc2lvbn1MIiwgbm9kZS0+dmVyc2lvbik7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3Qo dG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTZXJ2 ZXIsICIle3ZlcnNpb259cyIsIHRtcCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVT ZXJ2ZXIsICJGT1JFSUdOIERBVEEgV1JBUFBFUiAle2Zkd31JIiwgbm9kZS0+ZmR3bmFtZSk7CisJ LyogYWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVTZXJ2ZXIsICIle2dlbmVyaWNfb3B0aW9uc31zIiwKKwkJCQkJCSBkZXBhcnNlX0Zk d09wdGlvbnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOworCisJcmV0dXJuIGNyZWF0ZVNlcnZlcjsK K30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJGb3JlaWduU2VydmVyU3RtdCAoQUxURVIgU0VS VkVSKQorICoKKyAqIEdpdmVuIGEgc2VydmVyIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBj cmVhdGVkIGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBhbHRl ciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRm9yZWlnblNl cnZlclN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJGb3JlaWdu U2VydmVyU3RtdCAqbm9kZSA9IChBbHRlckZvcmVpZ25TZXJ2ZXJTdG10ICopIHBhcnNldHJlZTsK KwlPYmpUcmVlICAgICphbHRlclNlcnZlcjsKKwlPYmpUcmVlICAgICp0bXA7CisKKwlhbHRlclNl cnZlciA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTRVJWRVIgJXtpZGVudGl0eX1JIiwgMSwKKwkJ CQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnNlcnZlcm5hbWUpOworCisJ LyogQWRkIGEgVkVSU0lPTiBjbGF1c2UsIGlmIGFueSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJWRVJTSU9OIiwgMCk7CisJaWYgKG5vZGUtPmhhc192ZXJzaW9uICYmIG5vZGUtPnZlcnNpb24p CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7dmVyc2lvbn1MIiwgbm9kZS0+dmVyc2lv bik7CisJZWxzZSBpZiAobm9kZS0+aGFzX3ZlcnNpb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcCwgInZlcnNpb24iLCAiTlVMTCIpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cCwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJTZXJ2ZXIs ICIle3ZlcnNpb259cyIsIHRtcCk7CisKKwkvKiBBZGQgYSBWRVJTSU9OIGNsYXVzZSwgaWYgYW55 ICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlZFUlNJT04iLCAwKTsKKwlpZiAobm9kZS0+aGFz X3ZlcnNpb24gJiYgbm9kZS0+dmVyc2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAi JXt2ZXJzaW9ufUwiLCBub2RlLT52ZXJzaW9uKTsKKwllbHNlIGlmIChub2RlLT5oYXNfdmVyc2lv bikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAidmVyc2lvbiIsICJOVUxMIik7CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRf b2JqZWN0X29iamVjdChhbHRlclNlcnZlciwgIiV7dmVyc2lvbn1zIiwgdG1wKTsKKworCS8qIGFk ZCBhbiBPUFRJT05TIGNsYXVzZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0 ZXJTZXJ2ZXIsICIle2dlbmVyaWNfb3B0aW9uc31zIiwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlv bnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOworCisJcmV0dXJuIGFsdGVyU2VydmVyOworfQorCisv KgorICogRGVwYXJzZSBhIENyZWF0ZVBMYW5nU3RtdC4KKyAqCisgKiBHaXZlbiBhIGxhbmd1YWdl IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJl ZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0NyZWF0ZUxhbmdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0 cmVlKQoreworCUNyZWF0ZVBMYW5nU3RtdCAqbm9kZSA9IChDcmVhdGVQTGFuZ1N0bXQgKikgcGFy c2V0cmVlOworCU9ialRyZWUJICAgKmNyZWF0ZUxhbmc7CisJT2JqVHJlZQkgICAqdG1wOworCUhl YXBUdXBsZQlsYW5nVHVwOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07CisKKwlsYW5nVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKExBTkdPSUQsCisJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKG9i amVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxhbmdUdXApKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgbGFuZ3VhZ2UgJXUiLCBvYmplY3RJZCk7CisJbGFu Z0Zvcm0gPSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VUU1RSVUNUKGxhbmdUdXApOworCisJY3JlYXRl TGFuZyA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZUxhbmcsICIle29yX3JlcGxhY2V9cyIsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBS RVBMQUNFIiA6ICIiKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVMYW5nLCAiJXt0cnVz dGVkfXMiLAorCQkJCQkJIGxhbmdGb3JtLT5sYW5wbHRydXN0ZWQgPyAiVFJVU1RFRCIgOiAiIik7 CisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlTGFuZywgIkxBTkdVQUdFICV7aWRlbnRpdHl9 cyIsIG5vZGUtPnBsbmFtZSk7CisKKwlpZiAobm9kZS0+cGxoYW5kbGVyICE9IE5JTCkKKwl7CisJ CS8qIEFkZCB0aGUgSEFORExFUiBjbGF1c2UgKi8KKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3Jl YXRlTGFuZywgIkhBTkRMRVIgJXtoYW5kbGVyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGxhbmdGb3Jt LT5sYW5wbGNhbGxmb2lkKSk7CisKKwkJLyogQWRkIHRoZSBJTkxJTkUgY2xhdXNlLCBpZiBhbnkg Ki8KKwkJdG1wID0gbmV3X29ianRyZWUoIklOTElORSIpOworCQlpZiAoT2lkSXNWYWxpZChsYW5n Rm9ybS0+bGFuaW5saW5lKSkKKwkJeworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXto YW5kbGVyX25hbWV9RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJv Y2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBsYW5nRm9ybS0+bGFuaW5saW5lKSk7 CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxz ZSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUxhbmcsICIle2lubGluZX1zIiwgdG1w KTsKKworCQkvKiBBZGQgdGhlIFZBTElEQVRPUiBjbGF1c2UsIGlmIGFueSAqLworCQl0bXAgPSBu ZXdfb2JqdHJlZSgiVkFMSURBVE9SIik7CisJCWlmIChPaWRJc1ZhbGlkKGxhbmdGb3JtLT5sYW52 YWxpZGF0b3IpKQorCQl7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle2hhbmRsZXJf bmFtZX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVS ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIGxhbmdGb3JtLT5sYW52YWxpZGF0b3IpKTsKKwkJ fQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsK KwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlTGFuZywgIiV7dmFsaWRhdG9yfXMiLCB0bXAp OworCX0KKworCVJlbGVhc2VTeXNDYWNoZShsYW5nVHVwKTsKKworCXJldHVybiBjcmVhdGVMYW5n OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVNlcVN0bXQuCisgKgorICogR2l2ZW4gYSBz ZXF1ZW5jZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFu IE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVTZXFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCU9ialRyZWUgICAgKmNyZWF0ZVNlcTsKKwlPYmpUcmVlICAgICp0bXBv Ymo7CisJUmVsYXRpb24JcmVsYXRpb247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7 CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJl bGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQ3JlYXRlU2VxU3RtdCAqY3JlYXRl U2VxU3RtdCA9IChDcmVhdGVTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVu Y2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRFIFRBQkxF IG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoY3Jl YXRlU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCXNlcWRhdGEgPSBn ZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElkKTsKKworCXJlbGF0aW9uID0gcmVsYXRpb25fb3Bl bihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNl UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNo ZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlzZXFm b3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisKKwkvKgorCSAq IFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFNFUVVFTkNF ICV7aWRlbnRpdHl9RAorCSAqLworCWNyZWF0ZVNlcSA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsK KworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVNlcSwgIiV7cGVyc2lzdGVuY2V9cyIsCisJ CQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5j ZSkpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs YXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTZXEsICJTRVFVRU5DRSAle2lk ZW50aXR5fUQiLCB0bXBvYmopOworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWVsZW1z ID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ2FjaGUoY3JlYXRlU2VxLCBzZXFmb3JtLCBm YWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUoY3JlYXRl U2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9T ZXFfSW5jcmVtZW50QnkoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFw cGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWludmFsdWUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxz ZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoY3JlYXRl U2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9T ZXFfU3RhcnR3aXRoKGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBl bmQoZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQoY3JlYXRlU2VxLCBzZXFkYXRhKSk7CisKKwkv KiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCWFwcGVuZF9h cnJheV9vYmplY3QoY3JlYXRlU2VxLCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCXRh YmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVsYXRp b24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlU2VxOworfQorCisvKgorICog RGVwYXJzZSBhIENyZWF0ZVN0bXQgKENSRUFURSBUQUJMRSkuCisgKgorICogR2l2ZW4gYSB0YWJs ZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRy ZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9DcmVhdGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVl KQoreworCUNyZWF0ZVN0bXQgKm5vZGUgPSAoQ3JlYXRlU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVs YXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2sp OworCUxpc3QJICAgKmRwY29udGV4dDsKKwlPYmpUcmVlICAgICpjcmVhdGVTdG10OworCU9ialRy ZWUgICAgKnRtcG9iajsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7 CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtwZXJzaXN0ZW5j ZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCBbT0YKKwkgKiAle29mX3R5 cGV9VCB8IFBBUlRJVElPTiBPRiAle3BhcmVudF9pZGVudGl0eX1EXSAle3RhYmxlX2VsZW1lbnRz fXMKKwkgKiAle2luaGVyaXRzfXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAl e3dpdGhfY2xhdXNlfXMKKwkgKiAle29uX2NvbW1pdH1zICV7dGFibGVzcGFjZX1zCisJICovCisJ Y3JlYXRlU3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGNyZWF0ZVN0bXQsICIle3BlcnNpc3RlbmNlfXMiLAorCQkJCQkJIGdldF9wZXJzaXN0ZW5j ZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpKTsKKworCWFwcGVuZF9mb3Jt YXRfc3RyaW5nKGNyZWF0ZVN0bXQsICJUQUJMRSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qo Y3JlYXRlU3RtdCwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhp c3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCSAgUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChj cmVhdGVTdG10LCAiJXtpZGVudGl0eX1EIiwgdG1wb2JqKTsKKworCWRwY29udGV4dCA9IGRlcGFy c2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pLAorCQkJCQkJ CQkJb2JqZWN0SWQpOworCisJLyoKKwkgKiBUeXBlZCB0YWJsZXMgYW5kIHBhcnRpdGlvbnMgdXNl IGEgc2xpZ2h0bHkgZGlmZmVyZW50IGZvcm1hdCBzdHJpbmc6IHdlCisJICogbXVzdCBub3QgcHV0 IHRhYmxlX2VsZW1lbnRzIHdpdGggcGFyZW50cyBkaXJlY3RseSBpbiB0aGUgZm10IHN0cmluZywK KwkgKiBiZWNhdXNlIGlmIHRoZXJlIGFyZSBubyBvcHRpb25zIHRoZSBwYXJlbnRoZXNlcyBtdXN0 IG5vdCBiZSBlbWl0dGVkOworCSAqIGFuZCBhbHNvLCB0eXBlZCB0YWJsZXMgZG8gbm90IGFsbG93 IGZvciBpbmhlcml0YW5jZS4KKwkgKi8KKwlpZiAobm9kZS0+b2ZUeXBlbmFtZSB8fCBub2RlLT5w YXJ0Ym91bmQpCisJeworCQlMaXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICog V2UgY2FuJ3QgcHV0IHRhYmxlIGVsZW1lbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nIGFz IGFuIGFycmF5CisJCSAqIHN1cnJvdW5kZWQgYnkgcGFyZW50aGVzZXMgaGVyZSwgYmVjYXVzZSBh biBlbXB0eSBjbGF1c2Ugd291bGQgY2F1c2UKKwkJICogYSBzeW50YXggZXJyb3IuICBUaGVyZWZv cmUsIHdlIHVzZSBhbiBpbmRpcmVjdGlvbiBlbGVtZW50IGFuZCBzZXQKKwkJICogcHJlc2VudD1m YWxzZSB3aGVuIHRoZXJlIGFyZSBubyBlbGVtZW50cy4KKwkJICovCisJCWlmIChub2RlLT5vZlR5 cGVuYW1lKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfdHlwZShyZWxhdGlvbi0+ cmRfcmVsLT5yZWxvZnR5cGUsIC0xKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0 bXQsICJPRiAle29mX3R5cGV9VCIsIHRtcG9iaik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMaXN0 CSAgICpwYXJlbnRzOworCQkJT2JqRWxlbSAgICAqZWxlbTsKKworCQkJcGFyZW50cyA9IGRlcGFy c2VfSW5oUmVsYXRpb25zKG9iamVjdElkKTsKKwkJCWVsZW0gPSAoT2JqRWxlbSAqKSBsaW5pdGlh bChwYXJlbnRzKTsKKworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHBhcmVudHMpID09IDEpOworCisJ CQlhcHBlbmRfZm9ybWF0X3N0cmluZyhjcmVhdGVTdG10LCAiUEFSVElUSU9OIE9GIik7CisKKwkJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcmVudF9pZGVudGl0eX1EIiwK KwkJCQkJCQkJIGVsZW0tPnZhbHVlLm9iamVjdCk7CisJCX0KKworCQl0YWJsZWVsdHMgPSBkZXBh cnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24sIG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LAor CQkJCQkJCQkJCSAgdHJ1ZSwgLyogdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsJ Lyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJs ZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsKKworCQlpZiAodGFibGVlbHRzID09IE5JTCkK KwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWUoIiIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJCX0KKwkJZWxzZQorCQkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIigle2VsZW1lbnRzOiwgfXMpIiwgMSwKKwkJCQkJCQkJCSJlbGVtZW50cyIs IE9ialR5cGVBcnJheSwgdGFibGVlbHRzKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVh dGVTdG10LCAiJXt0YWJsZV9lbGVtZW50c31zIiwgdG1wb2JqKTsKKwl9CisJZWxzZQorCXsKKwkJ TGlzdAkgICAqdGFibGVlbHRzID0gTklMOworCisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIG5lZWQg dG8gcHJvY2VzcyBMSUtFIGNsYXVzZXMgc2VwYXJhdGVseTsgdGhleSBoYXZlCisJCSAqIGFscmVh ZHkgYmVlbiB0cmFuc2Zvcm1lZCBpbnRvIGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzLgorCQkgKi8K KworCQkvKgorCQkgKiBQcm9jZXNzIHRhYmxlIGVsZW1lbnRzOiBjb2x1bW4gZGVmaW5pdGlvbnMg YW5kIGNvbnN0cmFpbnRzLiAgT25seQorCQkgKiB0aGUgY29sdW1uIGRlZmluaXRpb25zIGFyZSBv YnRhaW5lZCBmcm9tIHRoZSBwYXJzZSBub2RlIGl0c2VsZi4gIFRvCisJCSAqIGdldCBjb25zdHJh aW50cyB3ZSByZWx5IG9uIHBnX2NvbnN0cmFpbnQsIGJlY2F1c2UgdGhlIHBhcnNlIG5vZGUKKwkJ ICogbWlnaHQgYmUgbWlzc2luZyBzb21lIHRoaW5ncyBzdWNoIGFzIHRoZSBuYW1lIG9mIHRoZSBj b25zdHJhaW50cy4KKwkJICovCisJCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyhy ZWxhdGlvbiwgbm9kZS0+dGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICBmYWxzZSwJ Lyogbm90IHR5cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7CS8qIG5vdCBjb21wb3Np dGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJ ZCwgSW52YWxpZE9pZCk7CisKKwkJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVTdG10LCAiKCV7 dGFibGVfZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCisJCS8qCisJCSAqIEFkZCBpbmhl cml0YW5jZSBzcGVjaWZpY2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRoZSBsaXN0IG9m CisJCSAqIHBhcmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhhdCBtYXkgbGFj ayB0aGUgYWN0dWFsCisJCSAqIHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50IHJlbGF0aW9u cy4gIFJhdGhlciB0aGFuIHRyeWluZyB0bworCQkgKiByZS1yZXNvbHZlIHRoZW0gZnJvbSB0aGUg aW5mb3JtYXRpb24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSAqIG1vcmUgYWNjdXJh dGUgYW5kIGNvbnZlbmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgorCQkgKi8KKwkJ dG1wb2JqID0gbmV3X29ianRyZWUoIklOSEVSSVRTIik7CisJCWlmIChsaXN0X2xlbmd0aChub2Rl LT5pbmhSZWxhdGlvbnMpID4gMCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7 cGFyZW50czosIH1EKSIsIGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKSk7CisJCWVsc2UK KwkJeworCQkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIigle3BhcmVudHM6LCB9RCkiKTsK KwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQl9CisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2luaGVyaXRzfXMiLCB0bXBvYmop OworCX0KKworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYgKG5vZGUt PnRhYmxlc3BhY2VuYW1lKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3RhYmxl c3BhY2V9SSIsIG5vZGUtPnRhYmxlc3BhY2VuYW1lKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVs bF9vYmplY3QodG1wb2JqLCAiJXt0YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNy ZWF0ZVN0bXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcG9iaik7CisJYXBwZW5kX29iamVjdF9vYmpl Y3QoY3JlYXRlU3RtdCwgIiV7b25fY29tbWl0fXMiLAorCQkJCQkJIGRlcGFyc2VfT25Db21taXRD bGF1c2Uobm9kZS0+b25jb21taXQpKTsKKworCS8qIEZPUiBWQUxVRVMgY2xhdXNlICovCisJaWYg KG5vZGUtPnBhcnRib3VuZCkKKwl7CisJCS8qCisJCSAqIEdldCBwZ19jbGFzcy5yZWxwYXJ0Ym91 bmQuIFdlIGNhbm5vdCB1c2UgcGFydGJvdW5kIGluIHRoZSBwYXJzZXRyZWUKKwkJICogZGlyZWN0 bHkgYXMgaXQncyB0aGUgb3JpZ2luYWwgcGFydGJvdW5kIGV4cHJlc3Npb24gd2hpY2ggaGF2ZW4n dAorCQkgKiBiZWVuIHRyYW5zZm9ybWVkLgorCQkgKi8KKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo Y3JlYXRlU3RtdCwgIiV7cGFydGl0aW9uX2JvdW5kfXMiLAorCQkJCQkJCSBSZWxhdGlvbkdldFBh cnRpdGlvbkJvdW5kKG9iamVjdElkKSk7CisJfQorCisJLyogUEFSVElUSU9OIEJZIGNsYXVzZSAq LworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJQQVJUSVRJT04gQlkiKTsKKwlpZiAocmVsYXRpb24t PnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBvYmosICIle2RlZmluaXRpb259cyIsIHBnX2dldF9wYXJ0a2V5ZGVm X3NpbXBsZShvYmplY3RJZCkpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBv YmosICIle2RlZmluaXRpb259cyIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJl c2VudCIsIGZhbHNlKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7 cGFydGl0aW9uX2J5fXMiLCB0bXBvYmopOworCisJLyogVVNJTkcgY2xhdXNlICovCisJdG1wb2Jq ID0gbmV3X29ianRyZWUoIlVTSU5HIik7CisJaWYgKG5vZGUtPmFjY2Vzc01ldGhvZCkKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXthY2Nlc3NfbWV0aG9kfUkiLCBub2RlLT5hY2Nl c3NNZXRob2QpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIle2Fj Y2Vzc19tZXRob2R9SSIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIs IGZhbHNlKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7YWNjZXNz X21ldGhvZH1zIiwgdG1wb2JqKTsKKworCS8qIFdJVEggY2xhdXNlICovCisJdG1wb2JqID0gbmV3 X29ianRyZWUoIldJVEgiKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJ CU9ialRyZWUgICAgKnRtcG9iajI7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxm aXJzdChjZWxsKTsKKworCQl0bXBvYmoyID0gZGVwYXJzZV9EZWZFbGVtKG9wdCwgZmFsc2UpOwor CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmoyKSk7CisJfQor CisJaWYgKGxpc3QpCisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7d2l0aDosIH1z KSIsIGxpc3QpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQi LCBmYWxzZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXt3aXRoX2Ns YXVzZX1zIiwgdG1wb2JqKTsKKworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFy ZUxvY2spOworCisJcmV0dXJuIGNyZWF0ZVN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVm aW5lU3RtdC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLCBPYmplY3RBZGRyZXNzIHNlY29uZGFyeU9iaikKK3sK KwlEZWZpbmVTdG10ICpkZWZpbmUgPSAoRGVmaW5lU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJl ZSAgICAqZGVmU3RtdCA9IE5VTEw7CisKKwlzd2l0Y2ggKGRlZmluZS0+a2luZCkKKwl7CisJCWNh c2UgT0JKRUNUX0NPTExBVElPTjoKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfQ29s bGF0aW9uKG9iamVjdElkLCBkZWZpbmUsIHNlY29uZGFyeU9iaik7CisJCQlicmVhazsKKworCQlj YXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfT3Bl cmF0b3Iob2JqZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UWVBF OgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UeXBlKG9iamVjdElkLCBkZWZpbmUp OworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJZGVmU3Rt dCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhvYmplY3RJZCwgZGVmaW5lLCBzZWNvbmRh cnlPYmopOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCQlkZWZTdG10 ID0gZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKG9iamVjdElkLCBkZWZpbmUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQkJZGVmU3RtdCA9IGRlcGFyc2Vf RGVmaW5lU3RtdF9UU0RpY3Rpb25hcnkob2JqZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKwor CQljYXNlIE9CSkVDVF9UU1RFTVBMQVRFOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3Rt dF9UU1RlbXBsYXRlKG9iamVjdElkLCBkZWZpbmUpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoK KwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3Qga2luZCIpOworCX0KKworCXJldHVy biBkZWZTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0bXQgKENSRUFURSBDT0xM QVRJT04pCisgKgorICogR2l2ZW4gYSBjb2xsYXRpb24gT0lELCByZXR1cm4gdGhlIEpTT04gYmxv YiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfRGVmaW5lU3RtdF9Db2xsYXRpb24oT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpk ZWZpbmUsCisJCQkJCQkJIE9iamVjdEFkZHJlc3MgZnJvbUNvbGxpZCkKK3sKKwlPYmpUcmVlICAg ICpzdG10OworCUhlYXBUdXBsZQljb2xUdXA7CisJRm9ybV9wZ19jb2xsYXRpb24gY29sRm9ybTsK KwlEYXR1bQkJZGF0dW07CisJYm9vbAkJaXNudWxsOworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0 CSAgICpsaXN0ID0gTklMOworCisJY29sVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTExPSUQsIE9i amVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29sVHVw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbGxhdGlvbiB3aXRo IE9JRCAldSIsIG9iamVjdElkKTsKKwljb2xGb3JtID0gKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRT VFJVQ1QoY29sVHVwKTsKKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIENPTExBVElP TiIsIDApOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGNvbEZvcm0tPmNvbGxuYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkgIE5hbWVTdHIoY29sRm9ybS0+Y29sbG5hbWUpKSk7CisKKwlpZiAoZnJvbUNv bGxpZC5vYmplY3RJZCAhPSBJbnZhbGlkT2lkKQorCXsKKwkJT2lkCQkJY29sbGlkID0gZnJvbUNv bGxpZC5vYmplY3RJZDsKKwkJSGVhcFR1cGxlCXRwOworCQlGb3JtX3BnX2NvbGxhdGlvbiBmcm9t Q29sRm9ybTsKKworCQkvKgorCQkgKiBDUkVBVEUgQ09MTEFUSU9OICV7aWRlbnRpdHl9RCBGUk9N IGV4aXN0aW5nX2NvbGxhdGlvbjsKKwkJICovCisJCXRwID0gU2VhcmNoU3lzQ2FjaGUxKENPTExP SUQsIE9iamVjdElkR2V0RGF0dW0oY29sbGlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0 cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29sbGF0aW9uICV1 IiwgY29sbGlkKTsKKworCQlmcm9tQ29sRm9ybSA9IChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RS VUNUKHRwKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiRlJPTSAle2Zyb21faWRl bnRpdHl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShmcm9tQ29sRm9ybS0+ Y29sbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZnJvbUNvbEZvcm0tPmNvbGxu YW1lKSkpOworCisKKwkJUmVsZWFzZVN5c0NhY2hlKHRwKTsKKwkJUmVsZWFzZVN5c0NhY2hlKGNv bFR1cCk7CisJCXJldHVybiBzdG10OworCX0KKworCS8qIExPQ0FMRSAqLworCWRhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKENPTExPSUQsIGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGljdWxv Y2FsZSwgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiTE9DQUxFPSIsIDEsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibG9jYWxl Iik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7bG9jYWxlfUwiLAorCQkJCQkJCSBw c3ByaW50ZigiJXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKSkpOworCQlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBMQ19DT0xMQVRF ICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgY29sVHVwLCBBbnVtX3BnX2Nv bGxhdGlvbl9jb2xsY29sbGF0ZSwgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiTENfQ09MTEFURT0iLCAxLAorCQkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgImNvbGxhdGUiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtj b2xsYXRlfUwiLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRh dHVtKSkpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK Kwl9CisKKwkvKiBMQ19DVFlQRSAqLworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQs IGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGN0eXBlLCAmaXNudWxsKTsKKwlpZiAoIWlz bnVsbCkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJMQ19DVFlQRT0iLCAxLAorCQkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImN0eXBlIik7CisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcCwgIiV7Y3R5cGV9TCIsCisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsIFRleHREYXR1bUdl dENTdHJpbmcoZGF0dW0pKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCX0KKworCS8qIFBST1ZJREVSICovCisJaWYgKGNvbEZvcm0tPmNvbGxwcm92 aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlBS T1ZJREVSPSIsIDEsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvdmlkZXIi KTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtwcm92aWRlcn1MIiwKKwkJCQkJCQkg cHNwcmludGYoIiVzIiwgImljdSIpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisJfQorCWVsc2UgaWYgKGNvbEZvcm0tPmNvbGxwcm92aWRlciA9PSBD T0xMUFJPVklERVJfTElCQykKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQUk9WSURFUj0i LCAxLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInByb3ZpZGVyIik7CisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7cHJvdmlkZXJ9TCIsCisJCQkJCQkJIHBzcHJpbnRm KCIlcyIsICJsaWJjIikpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKwl9CisKKwkvKiBERVRFUk1JTklTVElDICovCisJaWYgKGNvbEZvcm0tPmNvbGxp c2RldGVybWluaXN0aWMpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiREVURVJNSU5JU1RJ Qz0iLCAxLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImRldGVybWluaXN0aWMi KTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtkZXRlcm1pbmlzdGljfUwiLAorCQkJ CQkJCSBwc3ByaW50ZigiJXMiLCAidHJ1ZSIpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogVkVSU0lPTiAqLworCWRhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKENPTExPSUQsIGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbHZlcnNp b24sICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEo IlZFUlNJT049IiwgMSwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ2ZXJzaW9u Iik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7dmVyc2lvbn1MIiwKKwkJCQkJCQkg cHNwcmludGYoIiVzIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJYXBwZW5kX2FycmF5 X29iamVjdChzdG10LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKwlSZWxlYXNlU3lzQ2FjaGUo Y29sVHVwKTsKKworCXJldHVybiBzdG10OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0 bXQgKENSRUFURSBPUEVSQVRPUikKKyAqCisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFuZCB0aGUg cGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNl bnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfRGVmaW5lU3RtdF9PcGVyYXRvcihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkK K3sKKwlIZWFwVHVwbGUJb3ByVHVwOworCU9ialRyZWUgICAgKnN0bXQ7CisJT2JqVHJlZSAgICAq dG1wb2JqOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJRm9ybV9wZ19vcGVyYXRvciBvcHJGb3Jt OworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQsIE9iamVjdElkR2V0RGF0dW0o b2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3ByVHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdpdGggT0lEICV1Iiwgb2JqZWN0 SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKG9wclR1cCk7CisK KwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiAle2lkZW50aXR5fU8iLCAx LAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWUob3ByRm9ybS0+b3BybmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICAgTmFt ZVN0cihvcHJGb3JtLT5vcHJuYW1lKSkpOworCisJLyogUFJPQ0VEVVJFICovCisJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIlBST0NFRFVSRT0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCQkiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgInByb2NlZHVyZSIsCisJCQkJCQkJInByb2NlZHVyZSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCW9wckZvcm0tPm9wcmNvZGUpKTsKKwlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIExFRlRBUkcg Ki8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTEVGVEFSRz0iLCAxLAorCQkJCQkJCSJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAibGVmdGFyZyIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0t Pm9wcmxlZnQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3R5cGV9VCIsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcmxlZnQsIC0xKSk7CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIFJJR0hU QVJHICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlJJR0hUQVJHPSIsIDEsCisJCQkJCQkJ ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyaWdodGFyZyIpOworCWlmIChPaWRJc1ZhbGlkKG9w ckZvcm0tPm9wcnJpZ2h0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXt0eXBl fVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEp KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2Up OworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJ LyogQ09NTVVUQVRPUiAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDT01NVVRBVE9SPSIs IDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb21tdXRhdG9yIik7CisJaWYg KE9pZElzVmFsaWQob3ByRm9ybS0+b3ByY29tKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w b2JqLCAiJXtvcGVyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3Bl cmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3ByY29tKSk7CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIE5FR0FU T1IgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTkVHQVRPUj0iLCAxLAorCQkJCQkJCSJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibmVnYXRvciIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZv cm0tPm9wcm5lZ2F0ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3Blcn1E IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcm5lZ2F0ZSkpOworCWVsc2UKKwkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBSRVNUUklDVCAqLworCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJSRVNUUklDVD0iLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAicmVzdHJpY3QiKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJy ZXN0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3BycmVzdCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBKT0lOICovCisJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIkpPSU49IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg ImpvaW4iKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3By Rm9ybS0+b3Byam9pbikpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInBy ZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisKKwkvKiBNRVJHRVMgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTUVS R0VTIiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1lcmdlcyIpOworCWlm ICghb3ByRm9ybS0+b3ByY2FubWVyZ2UpCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJw cmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCisJLyogSEFTSEVTICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkhB U0hFUyIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJoYXNoZXMiKTsKKwlp ZiAoIW9wckZvcm0tPm9wcmNhbmhhc2gpCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJw cmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiKCV7ZWxlbXM6LCB9cyki LCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShvcHJUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9 CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRZUEUgc3RhdGVtZW50LgorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQsIERlZmluZVN0 bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUJdHlwVHVwOworCU9ialRyZWUgICAgKnN0bXQ7CisJ T2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3Q7CisJY2hhcgkgICAqc3RyOworCURhdHVt CQlkZmx0OworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKworCXR5cFR1 cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0g PSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCS8qIFNob3J0Y3V0IHByb2Nl c3NpbmcgZm9yIHNoZWxsIHR5cGVzLiAqLworCWlmICghdHlwRm9ybS0+dHlwaXNkZWZpbmVkKQor CXsKKwkJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSIsIDApOworCQlhcHBlbmRf b2JqZWN0X29iamVjdChzdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVT dHIodHlwRm9ybS0+dHlwbmFtZSkpKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHN0bXQsICJwcmVz ZW50IiwgdHJ1ZSk7CisJCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCQlyZXR1cm4gc3RtdDsK Kwl9CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJYXBwZW5k X29iamVjdF9vYmplY3Qoc3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0 cih0eXBGb3JtLT50eXBuYW1lKSkpOworCWFwcGVuZF9ib29sX29iamVjdChzdG10LCAicHJlc2Vu dCIsIHRydWUpOworCisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCWxpc3QgPSBO SUw7CisKKwkvKiBJTlBVVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIoSU5QVVQ9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImlucHV0Iik7CisJYXBwZW5kX29iamVj dF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5 cGlucHV0KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwkvKiBPVVRQVVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiT1VUUFVUPSIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJvdXRwdXQiKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlw b3V0cHV0KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwkvKiBSRUNFSVZFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlJFQ0VJVkU9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlY2VpdmUiKTsKKwlpZiAoT2lkSXNW YWxpZCh0eXBGb3JtLT50eXByZWNlaXZlKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAi JXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9j ZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwcmVjZWl2ZSkpOwor CWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTRU5EICov CisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNFTkQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInNlbmQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBzZW5kKSkK KwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQkgdHlwRm9ybS0+dHlwc2VuZCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwkvKiBUWVBNT0RfSU4gKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi VFlQTU9EX0lOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2Rf aW4iKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2RpbikpCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0t PnR5cG1vZGluKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIs IGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KworCS8qIFRZUE1PRF9PVVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX09VVD0i LCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX291dCIpOworCWlm IChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZG91dCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZG91 dCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBB TkFMWVpFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkFOQUxZWkU9IiwgMSwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImFuYWx5emUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBG b3JtLT50eXBhbmFseXplKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1 cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwYW5hbHl6ZSkpOworCWVsc2UKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBJTlRFUk5BTExFTkdUSCAq LworCWlmICh0eXBGb3JtLT50eXBsZW4gPT0gLTEpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiSU5URVJOQUxMRU5HVEg9VkFSSUFCTEUiLCAwKTsKKwl9CisJZWxzZQorCXsKKwkJdG1wID0g bmV3X29ianRyZWVfVkEoIklOVEVSTkFMTEVOR1RIPSV7dHlwbGVufW4iLCAxLAorCQkJCQkJCSAi dHlwbGVuIiwgT2JqVHlwZUludGVnZXIsIHR5cEZvcm0tPnR5cGxlbik7CisJfQorCisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBQQVNTRURCWVZB TFVFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlBBU1NFREJZVkFMVUUiLCAxLAorCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicGFzc2VkYnl2YWx1ZSIpOworCWlmICghdHlwRm9y bS0+dHlwYnl2YWwpCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2Up OworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyog QUxJR05NRU5UICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMSUdOTUVOVD0iLCAxLAorCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYWxpZ25tZW50Iik7CisJLyogWFhYIGl0J3Mg b2RkIHRvIHJlcHJlc2VudCBhbGlnbm1lbnQgd2l0aCBzY2hlbWEtcXVhbGlmaWVkIHR5cGUgbmFt ZXMgKi8KKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cGFsaWduKQorCXsKKwkJY2FzZSAnZCc6CisJCQlz dHIgPSAicGdfY2F0YWxvZy5mbG9hdDgiOworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJc3Ry ID0gInBnX2NhdGFsb2cuaW50NCI7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlzdHIgPSAi cGdfY2F0YWxvZy5pbnQyIjsKKwkJCWJyZWFrOworCQljYXNlICdjJzoKKwkJCXN0ciA9ICJwZ19j YXRhbG9nLmJwY2hhciI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJp bnZhbGlkIGFsaWdubWVudCAlYyIsIHR5cEZvcm0tPnR5cGFsaWduKTsKKwl9CisJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wLCAiJXthbGlnbn1zIiwgc3RyKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVE9S QUdFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdG9yYWdlIik7CisJ c3dpdGNoICh0eXBGb3JtLT50eXBzdG9yYWdlKQorCXsKKwkJY2FzZSAncCc6CisJCQlzdHIgPSAi cGxhaW4iOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJc3RyID0gImV4dGVybmFsIjsKKwkJ CWJyZWFrOworCQljYXNlICd4JzoKKwkJCXN0ciA9ICJleHRlbmRlZCI7CisJCQlicmVhazsKKwkJ Y2FzZSAnbSc6CisJCQlzdHIgPSAibWFpbiI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVs b2coRVJST1IsICJpbnZhbGlkIHN0b3JhZ2Ugc3BlY2lmaWVyICVjIiwgdHlwRm9ybS0+dHlwc3Rv cmFnZSk7CisJfQorCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7c3RvcmFnZX1zIiwgc3Ry KTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8q IENBVEVHT1JZICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkNBVEVHT1JZPSIsIDEsCisJCQkJ CQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYXRlZ29yeSIpOworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcCwgIiV7Y2F0ZWdvcnl9cyIsCisJCQkJCQkgcHNwcmludGYoIiVjIiwgdHlwRm9y bS0+dHlwY2F0ZWdvcnkpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKworCS8qIFBSRUZFUlJFRCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQUkVG RVJSRUQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInByZWZlcnJlZCIp OworCWlmICghdHlwRm9ybS0+dHlwaXNwcmVmZXJyZWQpCisJCWFwcGVuZF9ib29sX29iamVjdCh0 bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJLyogREVGQVVMVCAqLworCWRmbHQgPSBTeXNDYWNoZUdldEF0dHIo VFlQRU9JRCwgdHlwVHVwLAorCQkJCQkJICAgQW51bV9wZ190eXBlX3R5cGRlZmF1bHQsCisJCQkJ CQkgICAmaXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiREVGQVVMVD0iLCAxLAorCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZGVmYXVsdCIpOworCWlmICghaXNudWxsKQor CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2RlZmF1bHR9cyIsIFRleHREYXR1bUdldENT dHJpbmcoZGZsdCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQi LCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwkvKiBFTEVNRU5UICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkVMRU1FTlQ9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImVsZW1lbnQiKTsKKwlpZiAoT2lkSXNW YWxpZCh0eXBGb3JtLT50eXBlbGVtKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiZWxl bSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cEZvcm0tPnR5cGVsZW0sIC0xKSk7 CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIERFTElN SVRFUiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERUxJTUlURVI9IiwgMSwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImRlbGltaXRlciIpOworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcCwgIiV7ZGVsaW19TCIsCisJCQkJCQkgcHNwcmludGYoIiVjIiwgdHlwRm9ybS0+dHlw ZGVsaW0pKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KworCS8qIENPTExBVEFCTEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ09MTEFUQUJMRT0i LCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29sbGF0YWJsZSIpOworCWlm ICghT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBjb2xsYXRpb24pKQorCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIiV7ZWxlbXM6 LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCisJcmV0dXJuIHN0 bXQ7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhP aWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJCQlPYmplY3RBZGRyZXNzIGNv cGllZCkKK3sKKwlIZWFwVHVwbGUJdHNjVHVwOworCUhlYXBUdXBsZQl0c3BUdXA7CisJT2JqVHJl ZSAgICAqc3RtdDsKKwlPYmpUcmVlICAgICp0bXA7CisJRm9ybV9wZ190c19jb25maWcgdHNjRm9y bTsKKwlGb3JtX3BnX3RzX3BhcnNlciB0c3BGb3JtOworCUxpc3QJICAgKmxpc3Q7CisKKwl0c2NU dXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNDT05GSUdPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0 SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNjVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIGNvbmZpZ3VyYXRpb24gJXUiLAorCQkJ IG9iamVjdElkKTsKKwl0c2NGb3JtID0gKEZvcm1fcGdfdHNfY29uZmlnKSBHRVRTVFJVQ1QodHNj VHVwKTsKKworCXRzcFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU1BBUlNFUk9JRCwgT2JqZWN0SWRH ZXREYXR1bSh0c2NGb3JtLT5jZmdwYXJzZXIpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNw VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNo IHBhcnNlciAldSIsCisJCQkgdHNjRm9ybS0+Y2ZncGFyc2VyKTsKKwl0c3BGb3JtID0gKEZvcm1f cGdfdHNfcGFyc2VyKSBHRVRTVFJVQ1QodHNwVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50 YXgKKwkgKgorCSAqIENSRUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9 RCAoJXtlbGVtczosIH1zKQorCSAqLworCXN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisK KwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAl e2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2NGb3JtLT5j ZmduYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNjRm9ybS0+Y2ZnbmFtZSkpKTsK KworCS8qCisJICogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZS4gIElmIHdlIGhhdmUgQ09QWSdl ZCBhbiBleGlzdGluZyBjb25maWcsIGFkZAorCSAqIGEgQ09QWSBjbGF1c2U7IG90aGVyd2lzZSBh ZGQgYSBQQVJTRVIgY2xhdXNlLgorCSAqLworCWxpc3QgPSBOSUw7CisJLyogQ09QWSAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJDT1BZPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJjb3B5Iik7CisJaWYgKGNvcGllZC5vYmplY3RJZCAhPSBJbnZhbGlkT2lkKQorCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3RzY29uZmlnfUQiLAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoVFNDb25maWdSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkg Y29waWVkLm9iamVjdElkKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJl c2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCS8qIFBBUlNFUiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQQVJTRVI9Iiwg MSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInBhcnNlciIpOworCWlmIChjb3Bp ZWQub2JqZWN0SWQgPT0gSW52YWxpZE9pZCkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAi JXtwYXJzZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3BGb3JtLT5w cnNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzcEZvcm0tPnByc25hbWUpKSk7 CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9h cnJheV9vYmplY3Qoc3RtdCwgIigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lz Q2FjaGUodHNwVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHNjVHVwKTsKKworCXJldHVybiBzdG10 OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNQYXJzZXIoT2lk IG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlCXRzcFR1cDsKKwlP YmpUcmVlICAgICpzdG10OworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0OworCUZv cm1fcGdfdHNfcGFyc2VyIHRzcEZvcm07CisKKwl0c3BUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNQ QVJTRVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQodHNwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRl eHQgc2VhcmNoIHBhcnNlciB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzcEZvcm0g PSAoRm9ybV9wZ190c19wYXJzZXIpIEdFVFNUUlVDVCh0c3BUdXApOworCisJLyoKKwkgKiBWZXJi b3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiAle2lkZW50aXR5 fUQgKCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOwor CisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQgU0VBUkNIIFBBUlNFUiAle2lkZW50 aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3BGb3JtLT5wcnNuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNwRm9ybS0+cHJzbmFtZSkpKTsKKworCS8q IEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0ID0gTklMOworCisJLyogU1RBUlQg Ki8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1RBUlQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgInN0YXJ0Iik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtw cm9jZWR1cmV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc3N0YXJ0KSk7CisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBHRVRUT0tFTiAq LworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJHRVRUT0tFTj0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiZ2V0dG9rZW4iKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAs ICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJv Y2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzdG9rZW4pKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEVORCAq LworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTkQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgImVuZCIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2Vk dXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNlbmQpKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIExFWFRZUEVTICovCisJdG1w ID0gbmV3X29ianRyZWVfVkEoIkxFWFRZUEVTPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJsZXh0eXBlcyIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJv Y2VkdXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVS ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNsZXh0eXBlKSk7CisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBIRUFETElORSAq LworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIRUFETElORT0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiaGVhZGxpbmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0c3BGb3JtLT5w cnNoZWFkbGluZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2hlYWRsaW5lKSk7CisJZWxzZQorCQlhcHBl bmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3Rt dCwgIigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNwVHVwKTsK KworCXJldHVybiBzdG10OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0 bXRfVFNEaWN0aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhl YXBUdXBsZQl0c2RUdXA7CisJT2JqVHJlZSAgICAqc3RtdDsKKwlPYmpUcmVlICAgICp0bXA7CisJ TGlzdAkgICAqbGlzdDsKKwlEYXR1bQkJb3B0aW9uczsKKwlib29sCQlpc251bGw7CisJRm9ybV9w Z190c19kaWN0IHRzZEZvcm07CisKKwl0c2RUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNESUNUT0lE LCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRz ZFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJj aCBkaWN0aW9uYXJ5ICIKKwkJCSAid2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHNkRm9ybSA9 IChGb3JtX3BnX3RzX2RpY3QpIEdFVFNUUlVDVCh0c2RUdXApOworCisJLyoKKwkgKiBWZXJib3Nl IHN5bnRheAorCSAqCisJICogQ1JFQVRFIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkgJXtpZGVudGl0 eX1EICgle2VsZW1zOiwgfXMpCisJICovCisJc3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsK KworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICJURVhUIFNFQVJDSCBESUNUSU9OQVJZICV7 aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzZEZvcm0tPmRp Y3RuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNkRm9ybS0+ZGljdG5hbWUpKSk7 CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJbGlzdCA9IE5JTDsKKworCS8q IFRFTVBMQVRFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRFTVBMQVRFPSIsIDEsCisJCQkJ CQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0ZW1wbGF0ZSIpOworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcCwgIiV7dGVtcGxhdGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFRTVGVtcGxhdGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c2RGb3JtLT5kaWN0 dGVtcGxhdGUpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qCisJICogb3B0aW9ucy4gIFhYWCB0aGlzIGlzIGEgcHJldHR5IHVzZWxlc3MgcmVw cmVzZW50YXRpb24sIGJ1dCB3ZSBjYW4ndCBkbworCSAqIGJldHRlciB3aXRob3V0IG1vcmUgdHNf Y2FjaGUuYyBjb29wZXJhdGlvbiAuLi4KKwkgKi8KKwlvcHRpb25zID0gU3lzQ2FjaGVHZXRBdHRy KFRTRElDVE9JRCwgdHNkVHVwLAorCQkJCQkJCSAgQW51bV9wZ190c19kaWN0X2RpY3Rpbml0b3B0 aW9uLAorCQkJCQkJCSAgJmlzbnVsbCk7CisJdG1wID0gbmV3X29ianRyZWVfVkEoIiIsIDApOwor CWlmICghaXNudWxsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle29wdGlvbnN9cyIs IFRleHREYXR1bUdldENTdHJpbmcob3B0aW9ucykpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2Jq ZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIoJXtlbGVt czosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzZFR1cCk7CisKKwlyZXR1cm4g c3RtdDsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTVGVtcGxh dGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlCXRzdFR1 cDsKKwlPYmpUcmVlICAgICpzdG10OworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0 OworCUZvcm1fcGdfdHNfdGVtcGxhdGUgdHN0Rm9ybTsKKworCXRzdFR1cCA9IFNlYXJjaFN5c0Nh Y2hlMShUU1RFTVBMQVRFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHRzdFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciB0ZXh0IHNlYXJjaCB0ZW1wbGF0ZSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQp OworCXRzdEZvcm0gPSAoRm9ybV9wZ190c190ZW1wbGF0ZSkgR0VUU1RSVUNUKHRzdFR1cCk7CisK KwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggVEVN UExBVEUgJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpCisJICovCisJc3RtdCA9IG5ld19vYmp0 cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICJURVhUIFNFQVJD SCBURU1QTEFURSAle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZSh0c3RGb3JtLT50bXBsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzdEZvcm0t PnRtcGxuYW1lKSkpOworCisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCWxpc3Qg PSBOSUw7CisKKwkvKiBJTklUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIklOSVQ9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImluaXQiKTsKKwlpZiAoT2lkSXNWYWxp ZCh0c3RGb3JtLT50bXBsaW5pdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJv Y2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHRzdEZvcm0tPnRtcGxpbml0KSk7CisJZWxzZQor CQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIExFWElaRSAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJMRVhJWkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImxleGl6ZSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2Vk dXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3RGb3JtLT50bXBsbGV4aXplKSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlhcHBlbmRfYXJyYXlfb2Jq ZWN0KHN0bXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRz dFR1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9B bHRlclRTQ29uZmlndXJhdGlvblN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCUFsdGVy VFNDb25maWd1cmF0aW9uU3RtdCAqbm9kZSA9IChBbHRlclRTQ29uZmlndXJhdGlvblN0bXQgKikg Y21kLT5wYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqY29uZmlnOworCU9ialRyZWUgICAgKnRtcDsK KwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisJaW50CQkJaTsKKworCS8qCisJ ICogVmVyYm9zZSBzeW50YXgKKwkgKiBjYXNlIEFMVEVSX1RTQ09ORklHX0FERF9NQVBQSU5HOgor CSAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFERCBNQVBQ SU5HCisJICogCQlGT1IgJXt0b2tlbnR5cGU6LCB9SSBXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQK KwkgKgorCSAqIGNhc2UgQUxURVJfVFNDT05GSUdfRFJPUF9NQVBQSU5HOgorCSAqIEFMVEVSIFRF WFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIERST1AgTUFQUElORyAle2lmX2V4 aXN0c31zCisJICogCQlGT1IgJXt0b2tlbnR5cGV9SQorCSAqCisJICogY2FzZSBBTFRFUl9UU0NP TkZJR19BTFRFUl9NQVBQSU5HX0ZPUl9UT0tFTjoKKwkgKiBBTFRFUiBURVhUIFNFQVJDSCBDT05G SUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HCisJICogCQlGT1IgJXt0b2tlbnR5 cGU6LCB9SSBXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQKKwkgKgorCSAqIGNhc2UgQUxURVJfVFND T05GSUdfUkVQTEFDRV9ESUNUOgorCSAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04g JXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkcKKwkgKiAJCVJFUExBQ0UgJXtvbGRfZGljdGlvbmFy eX1EIFdJVEggJXtuZXdfZGljdGlvbmFyeX1ECisJICoKKwkgKiBjYXNlIEFMVEVSX1RTQ09ORklH X1JFUExBQ0VfRElDVF9GT1JfVE9LRU46CisJICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJB VElPTiAle2lkZW50aXR5fUQgQUxURVIgTUFQUElORworCSAqIAkJRk9SICV7dG9rZW50eXBlOiwg fUkgUkVQTEFDRSAle29sZF9kaWN0aW9uYXJ5fUQKKwkgKiAJCVdJVEggJXtuZXdfZGljdGlvbmFy eX1ECisJICovCisKKwljb25maWcgPSBuZXdfb2JqdHJlZSgiQUxURVIgVEVYVCBTRUFSQ0ggQ09O RklHVVJBVElPTiIpOworCisJLyogZGV0ZXJtaW5lIHRoZSBmb3JtYXQgc3RyaW5nIGFwcHJvcHJp YXRlIHRvIGVhY2ggc3ViY29tbWFuZCAqLworCXN3aXRjaCAobm9kZS0+a2luZCkKKwl7CisJCWNh c2UgQUxURVJfVFNDT05GSUdfQUREX01BUFBJTkc6CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChj b25maWcsICIle2lkZW50aXR5fUQgQUREIE1BUFBJTkciLAorCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJCQkJCQkJ CQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBBTFRFUl9UU0NPTkZJR19EUk9QX01BUFBJTkc6CisJCQlhcHBlbmRfb2JqZWN0X29iamVj dChjb25maWcsICIle2lkZW50aXR5fUQgRFJPUCBNQVBQSU5HIiwKKwkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJ CQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJJRiBFWElTVFMiLCAwKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAs ICJwcmVzZW50Iiwgbm9kZS0+bWlzc2luZ19vayk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChj b25maWcsICIle2lmX2V4aXN0c31zIiwgdG1wKTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUxURVJf VFNDT05GSUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU46CisJCQlhcHBlbmRfb2JqZWN0X29iamVj dChjb25maWcsICIle2lkZW50aXR5fUQgQUxURVIgTUFQUElORyIsCisJCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJCQkJ CQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQlicmVhazsK KworCQljYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVDoKKwkJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIiwKKwkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwK KwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTjoKKwkJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5H IiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFk ZHJlc3MuY2xhc3NJZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2Jq ZWN0SWQpKTsKKwkJCWJyZWFrOworCX0KKworCS8qIEFkZCB0aGUgYWZmZWN0ZWQgdG9rZW4gbGlz dCwgZm9yIHN1YmNvbW1hbmRzIHRoYXQgaGF2ZSBvbmUgKi8KKwlpZiAobm9kZS0+a2luZCA9PSBB TFRFUl9UU0NPTkZJR19BRERfTUFQUElORyB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RTQ09O RklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFND T05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTiB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RT Q09ORklHX0RST1BfTUFQUElORykKKwl7CisJCWxpc3QgPSBOSUw7CisJCWZvcmVhY2goY2VsbCwg bm9kZS0+dG9rZW50eXBlKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmpl Y3Qoc3RyVmFsKGxmaXJzdChjZWxsKSkpKTsKKwkJYXBwZW5kX2FycmF5X29iamVjdChjb25maWcs ICJGT1IgJXt0b2tlbnR5cGU6LCB9SSIsIGxpc3QpOworCX0KKworCS8qIGFkZCBmdXJ0aGVyIHN1 YmNvbW1hbmQtc3BlY2lmaWMgZWxlbWVudHMgKi8KKwlpZiAobm9kZS0+a2luZCA9PSBBTFRFUl9U U0NPTkZJR19BRERfTUFQUElORyB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX0FM VEVSX01BUFBJTkdfRk9SX1RPS0VOKQorCXsKKwkJLyogQUREIE1BUFBJTkcgYW5kIEFMVEVSIE1B UFBJTkcgRk9SIG5lZWQgYSBsaXN0IG9mIGRpY3Rpb25hcmllcyAqLworCQlsaXN0ID0gTklMOwor CQlmb3IgKGkgPSAwOyBpIDwgY21kLT5kLmF0c2NmZy5uZGljdHM7IGkrKykKKwkJeworCQkJT2Jq VHJlZSAgICAqZGljdG9iajsKKworCQkJZGljdG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJICBjbWQtPmQuYXRzY2Zn LmRpY3RJZHNbaV0pOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwKKwkJCQkJCSAgIG5ld19vYmpl Y3Rfb2JqZWN0KGRpY3RvYmopKTsKKwkJfQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbmZpZywg IldJVEggJXtkaWN0aW9uYXJpZXM6LCB9RCIsIGxpc3QpOworCX0KKwllbHNlIGlmIChub2RlLT5r aW5kID09IEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVCB8fAorCQkJIG5vZGUtPmtpbmQgPT0g QUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTikKKwl7CisJCS8qIHRoZSBSRVBM QUNFIGZvcm1zIHdhbnQgb2xkIGFuZCBuZXcgZGljdGlvbmFyaWVzICovCisJCUFzc2VydChjbWQt PmQuYXRzY2ZnLm5kaWN0cyA9PSAyKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29uZmlnLCAi UkVQTEFDRSAle29sZF9kaWN0aW9uYXJ5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5h dHNjZmcuZGljdElkc1swXSkpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb25maWcsICJXSVRI ICV7bmV3X2RpY3Rpb25hcnl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5k aWN0SWRzWzFdKSk7CisJfQorCisJcmV0dXJuIGNvbmZpZzsKK30KKworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9BbHRlclRTRGljdGlvbmFyeVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJT2JqVHJlZSAgICAqYWx0ZXJUU0Q7CisJT2JqVHJlZSAgICAqdG1wOworCURh dHVtCQlvcHRpb25zOworCUxpc3QJICAgKmRlZmluaXRpb24gPSBOSUw7CisJYm9vbAkJaXNudWxs OworCUhlYXBUdXBsZQl0c2RUdXA7CisJRm9ybV9wZ190c19kaWN0IHRzZEZvcm07CisKKwl0c2RU dXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNESUNUT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzZFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5ICIKKwkJCSAid2l0aCBP SUQgJXUiLCBvYmplY3RJZCk7CisJdHNkRm9ybSA9IChGb3JtX3BnX3RzX2RpY3QpIEdFVFNUUlVD VCh0c2RUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqIEFMVEVSIFRFWFQgU0VB UkNIIERJQ1RJT05BUlkgJXtpZGVudGl0eX1EICgle2RlZmluaXRpb246LCB9cykKKwkgKi8KKwor CWFsdGVyVFNEID0gbmV3X29ianRyZWUoIkFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkiKTsK KworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyVFNELCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNkRm9ybS0+ZGljdG5hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCSAgTmFtZVN0cih0c2RGb3JtLT5kaWN0bmFtZSkpKTsKKworCS8qCisJICogQWRkIHRo ZSBkZWZpbml0aW9uIGxpc3QgYWNjb3JkaW5nIHRvIHRoZSBwZ190c19kaWN0IGRpY3Rpbml0b3B0 aW9uCisJICogY29sdW1uCisJICovCisJb3B0aW9ucyA9IFN5c0NhY2hlR2V0QXR0cihUU0RJQ1RP SUQsIHRzZFR1cCwKKwkJCQkJCQkgIEFudW1fcGdfdHNfZGljdF9kaWN0aW5pdG9wdGlvbiwKKwkJ CQkJCQkgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIiLCAwKTsKKwlpZiAoIWlz bnVsbCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtvcHRpb25zfXMiLCBUZXh0RGF0 dW1HZXRDU3RyaW5nKG9wdGlvbnMpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAs ICJwcmVzZW50IiwgZmFsc2UpOworCisJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlclRTRCwg Iigle2RlZmluaXRpb246LCB9cykiLCBkZWZpbml0aW9uKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHNk VHVwKTsKKworCXJldHVybiBhbHRlclRTRDsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4g Li4uIFNFVC9SRVNFVCAoLi4uKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbFNl dE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7 CisJTGlzdENlbGwgICAqY2VsbDsKKwlPYmpUcmVlICAgICpyZWxzZXQ7CisJY2hhcgkgICAqZm10 OworCWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0UmVsT3B0aW9u czsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIFJFU0VUfFNFVCAoJXtvcHRp b25zOiwgfXMpCisJICovCisJaWYgKGlzX3Jlc2V0KQorCQlmbXQgPSAiUkVTRVQgIjsKKwllbHNl CisJCWZtdCA9ICJTRVQgIjsKKworCXJlbHNldCA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwlmb3Jl YWNoKGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbTsK KwkJT2JqVHJlZSAgICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7 CisJCXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMgPSBsYXBw ZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChzZXRzKTsK KwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJlbHNldCwgIigle29wdGlvbnM6LCB9cykiLCBzZXRzKTsK KworCXJldHVybiByZWxzZXQ7Cit9CisKKy8qCisgKiBkZXBhcnNlX1ZpZXdTdG10CisgKgkJZGVw YXJzZSBhIFZpZXdTdG10CisgKgorICogR2l2ZW4gYSB2aWV3IE9JRCBhbmQgdGhlIHBhcnNldHJl ZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhl IGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfVmlld1N0 bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJVmlld1N0bXQgICAqbm9kZSA9 IChWaWV3U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqdmlld1N0bXQ7CisJT2JqVHJl ZSAgICAqdG1wOworCVJlbGF0aW9uCXJlbGF0aW9uOworCisJcmVsYXRpb24gPSByZWxhdGlvbl9v cGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRh eAorCSAqCisJICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zICV7cGVyc2lzdGVuY2V9cyBWSUVXICV7 aWRlbnRpdHl9RCBBUyAle3F1ZXJ5fXMKKwkgKi8KKwl2aWV3U3RtdCA9IG5ld19vYmp0cmVlKCJD UkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHZpZXdTdG10LCAiJXtvcl9yZXBsYWNl fXMiLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIik7CisKKwlhcHBl bmRfc3RyaW5nX29iamVjdCh2aWV3U3RtdCwgIiV7cGVyc2lzdGVuY2V9cyIsCisJCQkJCQkgZ2V0 X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSkpOworCisJ dG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVz cGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKTsKKwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHZpZXdTdG10LCAiVklFVyAle2lkZW50aXR5fUQiLCB0bXAp OworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qodmlld1N0bXQsICJBUyAle3F1ZXJ5fXMiLAorCQkJ CQkJIHBnX2dldF92aWV3ZGVmX2ludGVybmFsKG9iamVjdElkKSk7CisKKwlyZWxhdGlvbl9jbG9z ZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiB2aWV3U3RtdDsKK30KKwor LyoKKyAqIERlcGFyc2UgQ1JFQVRFIE1hdGVyaWFsaXplZCBWaWV3IHN0YXRlbWVudCwgaXQgaXMg YSB2YXJpYW50IG9mIENyZWF0ZVRhYmxlQXNTdG10CisgKgorICogTm90ZSB0aGF0IENSRUFURSBU QUJMRSBBUyBTRUxFQ1QgSU5UTyBjYW4gYWxzbyBiZSBkZXBhcnNlZCBieQorICogZGVwYXJzZV9D cmVhdGVUYWJsZUFzU3RtdCB0byByZW1vdmUgdGhlIFNFTEVDVCBJTlRPIGNsYXVzZS4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdF92YW5pbGxhKE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRhYmxlQXNTdG10ICpub2RlID0g KENyZWF0ZVRhYmxlQXNTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IHJl bGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJT2JqVHJlZSAgICAqY3Jl YXRlU3RtdDsKKwlPYmpUcmVlICAgICp0bXA7CisJT2JqVHJlZSAgICAqdG1wMjsKKwljaGFyCSAg ICpmbXQ7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkgKiBS ZWplY3QgdW5zdXBwb3J0ZWQgY2FzZSByaWdodCBhd2F5LgorCSAqLworCWlmICgoKFF1ZXJ5ICop IChub2RlLT5xdWVyeSkpLT5jb21tYW5kVHlwZSA9PSBDTURfVVRJTElUWSkKKwkJZWxvZyhFUlJP UiwgInVuaW1wbGVtZW50ZWQgZGVwYXJzZSBvZiBDUkVBVEUgVEFCTEUgQVMgRVhFQ1VURSIpOwor CisJLyoKKwkgKiBOb3RlIHRoYXQgSU5TRVJUIElOVE8gaXMgZGVwYXJzZWQgYXMgQ1JFQVRFIFRB QkxFIEFTLiAgVGhleSBhcmUKKwkgKiBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBzeW5vbnltcyBz byB0aGVyZSBpcyBubyBoYXJtIGZyb20gdGhpcy4KKwkgKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJ ICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBbTUFURVJJQUxJWkVEIFZJRVcgfCBUQUJMRV0gJXtp Zl9ub3RfZXhpc3RzfXMKKwkgKiAJCSV7aWRlbnRpdHl9RCAle2NvbHVtbnN9cyBbJXtvbl9jb21t aXR9c10gJXt0YWJsZXNwYWNlfXMKKwkgKiAJCUFTICV7cXVlcnl9cyAle3dpdGhfbm9fZGF0YX1z IgorCSAqLworCWlmIChub2RlLT5vYmp0eXBlID09IE9CSkVDVF9NQVRWSUVXKQorCQlmbXQgPSAi Q1JFQVRFICV7cGVyc2lzdGVuY2V9cyBNQVRFUklBTElaRUQgVklFVyAle2lmX25vdF9leGlzdHN9 cyAiOworCWVsc2UKKwkJZm10ID0gIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9u b3RfZXhpc3RzfXMgIjsKKworCWNyZWF0ZVN0bXQgPQorCQluZXdfb2JqdHJlZV9WQShmbXQsIDIs CisJCQkJCSAgICJwZXJzaXN0ZW5jZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCSAgIGdldF9wZXJz aXN0ZW5jZV9zdHIobm9kZS0+aW50by0+cmVsLT5yZWxwZXJzaXN0ZW5jZSksCisJCQkJCSAgICJp Zl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJICAgbm9kZS0+aWZfbm90X2V4aXN0 cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCS8qIEFkZCBpZGVudGl0eSAqLworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ IG9iamVjdElkKSk7CisKKwkvKiBDT0xMVU1OUyBjbGF1c2UgKi8KKwlpZiAobm9kZS0+aW50by0+ Y29sTmFtZXMgPT0gTklMKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiIiwgMSwKKwkJCQkJCQkg InByZXNlbnQiLCBPYmpUeXBlQm9vbCwgZmFsc2UpOworCWVsc2UKKwl7CisJCWxpc3QgPSBOSUw7 CisJCWZvcmVhY2goY2VsbCwgbm9kZS0+aW50by0+Y29sTmFtZXMpCisJCQlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwobGZpcnN0KGNlbGwpKSkpOworCisJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCIoJXtjb2x1bW5zOiwgfUkpIiwgMSwKKwkJCQkJCQkgImNvbHVt bnMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVh dGVTdG10LCAiJXtjb2x1bW5zfXMiLCB0bXApOworCisJLyogVVNJTkcgY2xhdXNlICovCisJdG1w ID0gbmV3X29ianRyZWUoIlVTSU5HIik7CisJaWYgKG5vZGUtPmludG8tPmFjY2Vzc01ldGhvZCkK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXthY2Nlc3NfbWV0aG9kfUkiLCBub2RlLT5p bnRvLT5hY2Nlc3NNZXRob2QpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXAs ICIle2FjY2Vzc19tZXRob2R9SSIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7YWNj ZXNzX21ldGhvZH1zIiwgdG1wKTsKKworCS8qIFdJVEggY2xhdXNlICovCisJdG1wID0gbmV3X29i anRyZWVfVkEoIldJVEgiLCAwKTsKKwlsaXN0ID0gTklMOworCisJZm9yZWFjaChjZWxsLCBub2Rl LT5pbnRvLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZp cnN0KGNlbGwpOworCisJCXRtcDIgPSBkZXBhcnNlX0RlZkVsZW0ob3B0LCBmYWxzZSk7CisJCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcDIpKTsKKwl9CisKKwlpZiAo bGlzdCkKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXAsICIoJXt3aXRoOiwgfXMpIiwgbGlzdCk7 CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3dpdGhfY2xhdXNlfXMiLCB0bXAp OworCisJLyogT04gQ09NTUlUIGNsYXVzZS4gIENSRUFURSBNQVRFUklBTElaRUQgVklFVyBkb2Vz bid0IGhhdmUgb25lICovCisJaWYgKG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX1RBQkxFKQorCXsK KwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7b25fY29tbWl0fXMiLAorCQkJ CQkJCSBkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKG5vZGUtPmludG8tPm9uQ29tbWl0KSk7CisJfQor CisJLyogVEFCTEVTUEFDRSBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVEFCTEVT UEFDRSAle3RhYmxlc3BhY2V9SSIsIDApOworCWlmIChub2RlLT5pbnRvLT50YWJsZVNwYWNlTmFt ZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt0YWJsZXNwYWNlfXMiLCBub2RlLT5p bnRvLT50YWJsZVNwYWNlTmFtZSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRt cCwgIiV7dGFibGVzcGFjZX1JIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50 IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXt0YWJs ZXNwYWNlfXMiLCB0bXApOworCisJLyogYWRkIHRoZSBxdWVyeSAqLworCUFzc2VydChJc0Eobm9k ZS0+cXVlcnksIFF1ZXJ5KSk7CisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgIkFT ICV7cXVlcnl9cyIsCisJCQkJCQkgcGdfZ2V0X3F1ZXJ5ZGVmKChRdWVyeSAqKSBub2RlLT5xdWVy eSwgZmFsc2UpKTsKKworCS8qIGFkZCBhIFdJVEggTk8gREFUQSBjbGF1c2UgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiV0lUSCBOTyBEQVRBIiwgMSwKKwkJCQkJCSAicHJlc2VudCIsIE9ialR5 cGVCb29sLAorCQkJCQkJIG5vZGUtPmludG8tPnNraXBEYXRhID8gdHJ1ZSA6IGZhbHNlKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXt3aXRoX25vX2RhdGF9cyIsIHRtcCk7 CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVy biBjcmVhdGVTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVRyaWdTdG10IChDUkVB VEUgVFJJR0dFUikKKyAqCisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFyc2UgdHJl ZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhl IGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRl VHJpZ1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVHJpZ1N0 bXQgKm5vZGUgPSAoQ3JlYXRlVHJpZ1N0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXBnX3Ry aWdnZXI7CisJSGVhcFR1cGxlCXRyaWdUdXA7CisJRm9ybV9wZ190cmlnZ2VyIHRyaWdGb3JtOwor CU9ialRyZWUgICAgKnRyaWdnZXI7CisJT2JqVHJlZSAgICAqdG1wb2JqOworCWludAkJCXRnbmFy Z3M7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0CSAgICpldmVudHM7CisKKwlwZ190cmlnZ2VyID0g dGFibGVfb3BlbihUcmlnZ2VyUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXRyaWdU dXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX3RyaWdnZXIsIEFudW1fcGdfdHJpZ2dl cl9vaWQsIG9iamVjdElkKTsKKwl0cmlnRm9ybSA9IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVD VCh0cmlnVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAl e2NvbnN0cmFpbnR9cyBUUklHR0VSICV7bmFtZX1JICV7dGltZX1zICV7ZXZlbnRzOiBPUiB9cyBP TgorCSAqIAkJJXtyZWxhdGlvbn1EICV7ZnJvbV90YWJsZX1zICV7Y29uc3RyYWludF9hdHRyczog fXMgRk9SIEVBQ0gKKwkgKiAJCSV7Zm9yX2VhY2h9cyAle3doZW59cyBFWEVDVVRFIFBST0NFRFVS RSAle2Z1bmN0aW9ufXMKKwkgKi8KKwl0cmlnZ2VyID0gbmV3X29ianRyZWUoIkNSRUFURSIpOwor CisJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7Y29uc3RyYWludH1zIiwKKwkJCQkJ CSBub2RlLT5pc2NvbnN0cmFpbnQgPyAiQ09OU1RSQUlOVCIgOiAiIik7CisKKwlhcHBlbmRfc3Ry aW5nX29iamVjdCh0cmlnZ2VyLCAiVFJJR0dFUiAle25hbWV9SSIsIG5vZGUtPnRyaWduYW1lKTsK KworCWlmIChub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0JFRk9SRSkKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QodHJpZ2dlciwgIiV7dGltZX1zIiwgIkJFRk9SRSIpOworCWVsc2UgaWYgKG5v ZGUtPnRpbWluZyA9PSBUUklHR0VSX1RZUEVfQUZURVIpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRyaWdnZXIsICIle3RpbWV9cyIsICJBRlRFUiIpOworCWVsc2UgaWYgKG5vZGUtPnRpbWluZyA9 PSBUUklHR0VSX1RZUEVfSU5TVEVBRCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwg IiV7dGltZX1zIiwgIklOU1RFQUQgT0YiKTsKKwllbHNlCisJCWVsb2coRVJST1IsICJ1bnJlY29n bml6ZWQgdHJpZ2dlciB0aW1pbmcgdHlwZSAlZCIsIG5vZGUtPnRpbWluZyk7CisKKwkvKgorCSAq IERlY29kZSB0aGUgZXZlbnRzIHRoYXQgdGhlIHRyaWdnZXIgZmlyZXMgZm9yLiAgVGhlIG91dHB1 dCBpcyBhIGxpc3Q7IGluCisJICogbW9zdCBjYXNlcyBpdCB3aWxsIGp1c3QgYmUgYSBzdHJpbmcg d2l0aCB0aGUgZXZlbnQgbmFtZSwgYnV0IHdoZW4KKwkgKiB0aGVyZSdzIGFuIFVQREFURSB3aXRo IGEgbGlzdCBvZiBjb2x1bW5zLCB3ZSByZXR1cm4gYSBKU09OIG9iamVjdC4KKwkgKi8KKwlldmVu dHMgPSBOSUw7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9JTlNFUlQpCisJCWV2 ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiSU5TRVJUIikpOworCWlm IChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfREVMRVRFKQorCQlldmVudHMgPSBsYXBwZW5k KGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIkRFTEVURSIpKTsKKwlpZiAobm9kZS0+ZXZlbnRz ICYgVFJJR0dFUl9UWVBFX1RSVU5DQVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3 X3N0cmluZ19vYmplY3QoIlRSVU5DQVRFIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VS X1RZUEVfVVBEQVRFKQorCXsKKwkJaWYgKG5vZGUtPmNvbHVtbnMgPT0gTklMKQorCQl7CisJCQll dmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlVQREFURSIpKTsKKwkJ fQorCQllbHNlCisJCXsKKwkJCU9ialRyZWUgICAgKnVwZGF0ZTsKKwkJCUxpc3RDZWxsICAgKmNl bGw7CisJCQlMaXN0CSAgICpjb2xzID0gTklMOworCisJCQkvKgorCQkJICogQ3VycmVudGx5IG9u bHkgVVBEQVRFIE9GIGNhbiBiZSBvYmplY3RzIGluIHRoZSBvdXRwdXQgSlNPTiwgYnV0CisJCQkg KiB3ZSBhZGQgYSAia2luZCIgZWxlbWVudCBzbyB0aGF0IHVzZXIgY29kZSBjYW4gZGlzdGluZ3Vp c2gKKwkJCSAqIHBvc3NpYmxlIGZ1dHVyZSBuZXcgZXZlbnQgdHlwZXMuCisJCQkgKi8KKwkJCXVw ZGF0ZSA9IG5ld19vYmp0cmVlX1ZBKCJVUERBVEUgT0YiLCAxLAorCQkJCQkJCQkJImtpbmQiLCBP YmpUeXBlU3RyaW5nLCAidXBkYXRlX29mIik7CisKKwkJCWZvcmVhY2goY2VsbCwgbm9kZS0+Y29s dW1ucykKKwkJCXsKKwkJCQljaGFyCSAgICpjb2xuYW1lID0gc3RyVmFsKGxmaXJzdChjZWxsKSk7 CisKKwkJCQljb2xzID0gbGFwcGVuZChjb2xzLCBuZXdfc3RyaW5nX29iamVjdChjb2xuYW1lKSk7 CisJCQl9CisKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodXBkYXRlLCAiJXtjb2x1bW5zOiwgfUki LCBjb2xzKTsKKworCQkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19vYmplY3Rfb2JqZWN0 KHVwZGF0ZSkpOworCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QodHJpZ2dlciwgIiV7ZXZl bnRzOiBPUiB9cyIsIGV2ZW50cyk7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCSB0cmlnRm9ybS0+dGdyZWxpZCk7 CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIk9OICV7cmVsYXRpb259RCIsIHRtcG9i aik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRlJPTSIsIDApOworCWlmICh0cmlnRm9y bS0+dGdjb25zdHJyZWxpZCkKKwl7CisJCU9ialRyZWUgICAgKnJlbDsKKworCQlyZWwgPSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCSAg dHJpZ0Zvcm0tPnRnY29uc3RycmVsaWQpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmos ICIle3JlbGF0aW9ufUQiLCByZWwpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0 bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRyaWdnZXIs ICIle2Zyb21fdGFibGV9cyIsIHRtcG9iaik7CisKKwlsaXN0ID0gTklMOworCWlmIChub2RlLT5k ZWZlcnJhYmxlKQorCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkgICBuZXdfc3RyaW5nX29i amVjdCgiREVGRVJSQUJMRSIpKTsKKwlpZiAobm9kZS0+aW5pdGRlZmVycmVkKQorCQlsaXN0ID0g bGFwcGVuZChsaXN0LAorCQkJCQkgICBuZXdfc3RyaW5nX29iamVjdCgiSU5JVElBTExZIERFRkVS UkVEIikpOworCWFwcGVuZF9hcnJheV9vYmplY3QodHJpZ2dlciwgIiV7Y29uc3RyYWludF9hdHRy czogfXMiLCBsaXN0KTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICJGT1IgRUFD SCAle2Zvcl9lYWNofXMiLAorCQkJCQkJIG5vZGUtPnJvdyA/ICJST1ciIDogIlNUQVRFTUVOVCIp OworCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIldIRU4iLCAwKTsKKwlpZiAobm9kZS0+d2hl bkNsYXVzZSkKKwl7CisJCU5vZGUJICAgKndoZW5DbGF1c2U7CisJCURhdHVtCQl2YWx1ZTsKKwkJ Ym9vbAkJaXNudWxsOworCisJCXZhbHVlID0gZmFzdGdldGF0dHIodHJpZ1R1cCwgQW51bV9wZ190 cmlnZ2VyX3RncXVhbCwKKwkJCQkJCQlSZWxhdGlvbkdldERlc2NyKHBnX3RyaWdnZXIpLCAmaXNu dWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJib2d1cyBOVUxMIHRncXVhbCIp OworCisJCXdoZW5DbGF1c2UgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyh2YWx1 ZSkpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIoJXtjbGF1c2V9cykiLAorCQkJ CQkJCSBwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKHRyaWdGb3JtLAorCQkJCQkJCQkJCQkJCSAg IHdoZW5DbGF1c2UsCisJCQkJCQkJCQkJCQkJICAgZmFsc2UpKTsKKwl9CisJZWxzZQorCQlhcHBl bmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdCh0cmlnZ2VyLCAiJXt3aGVufXMiLCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIiV7ZnVuY25hbWV9RCIsIDEsCisJCQkJCQkJImZ1bmNuYW1lIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJdHJpZ0Zvcm0tPnRnZm9pZCkpOworCWxpc3QgPSBOSUw7CisJ dGduYXJncyA9IHRyaWdGb3JtLT50Z25hcmdzOworCWlmICh0Z25hcmdzID4gMCkKKwl7CisJCWJ5 dGVhCSAgICp0Z2FyZ3M7CisJCWNoYXIJICAgKmFyZ3N0cjsKKwkJYm9vbAkJaXNudWxsOworCQlp bnQJCQlmaW5keDsKKwkJaW50CQkJbGVudGdhcmdzOworCQljaGFyCSAgICpwOworCisJCXRnYXJn cyA9IERhdHVtR2V0Qnl0ZWFQKGZhc3RnZXRhdHRyKHRyaWdUdXAsCisJCQkJCQkJCQkJCUFudW1f cGdfdHJpZ2dlcl90Z2FyZ3MsCisJCQkJCQkJCQkJCVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dl ciksCisJCQkJCQkJCQkJCSZpc251bGwpKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1Is ICJpbnZhbGlkIE5VTEwgdGdhcmdzIik7CisJCWFyZ3N0ciA9IChjaGFyICopIFZBUkRBVEEodGdh cmdzKTsKKwkJbGVudGdhcmdzID0gVkFSU0laRV9BTllfRVhIRFIodGdhcmdzKTsKKworCQlwID0g YXJnc3RyOworCQlmb3IgKGZpbmR4ID0gMDsgZmluZHggPCB0Z25hcmdzOyBmaW5keCsrKQorCQl7 CisJCQlzaXplX3QJCXRsZW47CisKKwkJCS8qIFZlcmlmeSB0aGF0IHRoZSBhcmd1bWVudCBlbmNv ZGluZyBpcyBjb3JyZWN0ICovCisJCQl0bGVuID0gc3RybGVuKHApOworCQkJaWYgKHAgKyB0bGVu ID49IGFyZ3N0ciArIGxlbnRnYXJncykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJpbnZh bGlkIGFyZ3VtZW50IHN0cmluZyAoJXMpIGZvciB0cmlnZ2VyIFwiJXNcIiIsCisJCQkJCQkJCWFy Z3N0ciwgTmFtZVN0cih0cmlnRm9ybS0+dGduYW1lKSkpKTsKKworCQkJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X3N0cmluZ19vYmplY3QocCkpOworCisJCQlwICs9IHRsZW4gKyAxOworCQl9CisJ fQorCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKCIpOworCWFwcGVuZF9hcnJheV9v YmplY3QodG1wb2JqLCAiJXthcmdzOiwgfUwiLCBsaXN0KTsJLyogbWlnaHQgYmUgTklMICovCisJ YXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKSIpOworCisJYXBwZW5kX29iamVjdF9vYmpl Y3QodHJpZ2dlciwgIkVYRUNVVEUgUFJPQ0VEVVJFICV7ZnVuY3Rpb259cyIsIHRtcG9iaik7CisK Kwl0YWJsZV9jbG9zZShwZ190cmlnZ2VyLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHRy aWdnZXI7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlVXNlck1hcHBpbmdTdG10IChDUkVB VEUgVVNFUiBNQVBQSU5HKQorICoKKyAqIEdpdmVuIGEgVXNlciBNYXBwaW5nIE9JRCBhbmQgdGhl IHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LAorICogcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVz ZW50aW5nIHRoZSBDUkVBVEUgVVNFUiBNQVBQSU5HIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQ3JlYXRlVXNlck1hcHBpbmdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUNyZWF0ZVVzZXJNYXBwaW5nU3RtdCAqbm9kZSA9IChDcmVhdGVVc2Vy TWFwcGluZ1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKmNyZWF0ZVN0bXQ7CisJUmVs YXRpb24JcmVsOworCUhlYXBUdXBsZQl0cDsKKwlGb3JtX3BnX3VzZXJfbWFwcGluZyBmb3JtOwor CUZvcmVpZ25TZXJ2ZXIgKnNlcnZlcjsKKworCXJlbCA9IHRhYmxlX29wZW4oVXNlck1hcHBpbmdS ZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCS8qCisJICogTG9va3VwIHVwIG9iamVj dCBpbiB0aGUgY2F0YWxvZywgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZWFsIHdpdGgKKwkgKiBjdXJy ZW50X3VzZXIgYW5kIHN1Y2guCisJICovCisJdHAgPSBTZWFyY2hTeXNDYWNoZTEoVVNFUk1BUFBJ TkdPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQodHApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdXNlciBtYXBw aW5nICV1Iiwgb2JqZWN0SWQpOworCisJZm9ybSA9IChGb3JtX3BnX3VzZXJfbWFwcGluZykgR0VU U1RSVUNUKHRwKTsKKworCXNlcnZlciA9IEdldEZvcmVpZ25TZXJ2ZXIoZm9ybS0+dW1zZXJ2ZXIp OworCisJY3JlYXRlU3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUgVVNFUiBNQVBQSU5HICIpOwor CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIkZPUiAle3JvbGV9UiIsIG5ld19v Ymp0cmVlX2Zvcl9yb2xlX2lkKGZvcm0tPnVtdXNlcikpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY3JlYXRlU3RtdCwgIlNFUlZFUiAle3NlcnZlcn1JIiwgc2VydmVyLT5zZXJ2ZXJuYW1lKTsK KworCS8qIGFkZCBhbiBPUFRJT05TIGNsYXVzZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9v YmplY3QoY3JlYXRlU3RtdCwgIiV7Z2VuZXJpY19vcHRpb25zfXMiLAorCQkJCQkJIGRlcGFyc2Vf RmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHAp OworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmV0dXJuIGNyZWF0ZVN0 bXQ7Cit9CisKKy8qCisgKiBkZXBhcnNlX0FsdGVyVXNlck1hcHBpbmcKKyAqCisgKiBHaXZlbiBh IFVzZXIgTWFwcGluZyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwKKyAq IHJldHVybiB0aGUgSlNPTiBibG9iIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclVzZXJNYXBwaW5nU3RtdChPaWQgb2Jq ZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlclVzZXJNYXBwaW5nU3RtdCAqbm9kZSA9 IChBbHRlclVzZXJNYXBwaW5nU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqYWx0ZXJT dG10OworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJdHA7CisJRm9ybV9wZ191c2VyX21hcHBp bmcgZm9ybTsKKwlGb3JlaWduU2VydmVyICpzZXJ2ZXI7CisKKwlyZWwgPSB0YWJsZV9vcGVuKFVz ZXJNYXBwaW5nUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwkvKgorCSAqIExvb2t1 cCB1cCBvYmplY3QgaW4gdGhlIGNhdGFsb2csIHNvIHdlIGRvbid0IGhhdmUgdG8gZGVhbCB3aXRo CisJICogY3VycmVudF91c2VyIGFuZCBzdWNoLgorCSAqLworCisJdHAgPSBTZWFyY2hTeXNDYWNo ZTEoVVNFUk1BUFBJTkdPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQodHApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgdXNlciBtYXBwaW5nICV1Iiwgb2JqZWN0SWQpOworCisJZm9ybSA9IChGb3JtX3BnX3VzZXJf bWFwcGluZykgR0VUU1RSVUNUKHRwKTsKKworCS8qCisJICogTG9va3VwIHVwIG9iamVjdCBpbiB0 aGUgY2F0YWxvZywgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZWFsIHdpdGgKKwkgKiBjdXJyZW50X3Vz ZXIgYW5kIHN1Y2guCisJICovCisKKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShVU0VSTUFQUElOR09J RCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB1c2VyIG1hcHBpbmcg JXUiLCBvYmplY3RJZCk7CisKKwlmb3JtID0gKEZvcm1fcGdfdXNlcl9tYXBwaW5nKSBHRVRTVFJV Q1QodHApOworCisKKwlzZXJ2ZXIgPSBHZXRGb3JlaWduU2VydmVyKGZvcm0tPnVtc2VydmVyKTsK KworCWFsdGVyU3RtdCA9IG5ld19vYmp0cmVlKCJBTFRFUiBVU0VSIE1BUFBJTkciKTsKKworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyU3RtdCwgIkZPUiAle3JvbGV9UiIsIG5ld19vYmp0cmVl X2Zvcl9yb2xlX2lkKGZvcm0tPnVtdXNlcikpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0 ZXJTdG10LCAiU0VSVkVSICV7c2VydmVyfUkiLCBzZXJ2ZXItPnNlcnZlcm5hbWUpOworCisJLyog YWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChh bHRlclN0bXQsICIle2dlbmVyaWNfb3B0aW9uc31zIiwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlv bnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOworCisJUmVsZWFzZVN5c0NhY2hlKHRwKTsKKwl0YWJs ZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXJldHVybiBhbHRlclN0bXQ7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGFuIEFsdGVyU3RhdHNTdG10IChBTFRFUiBTVEFUSVNUSUNTKQorICoK KyAqIEdpdmVuIGEgYWx0ZXIgc3RhdGlzdGljcyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQg Y3JlYXRlZCBpdCwKKyAqIHJldHVybiB0aGUgSlNPTiBibG9iIHJlcHJlc2VudGluZyB0aGUgYWx0 ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclN0YXRzU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlclN0YXRzU3RtdCAqbm9k ZSA9IChBbHRlclN0YXRzU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqYWx0ZXJTdGF0 OworCUhlYXBUdXBsZQl0cDsKKwlGb3JtX3BnX3N0YXRpc3RpY19leHQgc3RhdGZvcm07CisKKwlp ZiAoIW5vZGUtPnN0eHN0YXR0YXJnZXQpCisJCXJldHVybiBOVUxMOworCisJYWx0ZXJTdGF0ID0g bmV3X29ianRyZWUoIkFMVEVSIFNUQVRJU1RJQ1MiKTsKKworCS8qIExvb2t1cCB1cCBvYmplY3Qg aW4gdGhlIGNhdGFsb2cgKi8KKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShTVEFURVhUT0lELCBPYmpl Y3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHN0YXRpc3RpYyAldSIsIG9iamVj dElkKTsKKworCXN0YXRmb3JtID0gKEZvcm1fcGdfc3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHRw KTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyU3RhdCwgIiV7aWRlbnRpdHl9RCIsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHN0YXRmb3JtLT5zdHhuYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkgIE5hbWVTdHIoc3RhdGZvcm0tPnN0eG5hbWUpKSk7CisKKwlhcHBlbmRfZmxv YXRfb2JqZWN0KGFsdGVyU3RhdCwgIlNFVCBTVEFUSVNUSUNTICV7dGFyZ2V0fW4iLCBub2RlLT5z dHhzdGF0dGFyZ2V0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJcmV0dXJuIGFsdGVyU3Rh dDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBSZWZyZXNoTWF0Vmlld1N0bXQgKFJFRlJFU0ggTUFU RVJJQUxJWkVEIFZJRVcpCisgKgorICogR2l2ZW4gYSBtYXRlcmlhbGl6ZWQgdmlldyBPSUQgYW5k IHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJl cHJlc2VudGluZyB0aGUgcmVmcmVzaCBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX1JlZnJlc2hNYXRWaWV3U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlSZWZyZXNoTWF0Vmlld1N0bXQgKm5vZGUgPSAoUmVmcmVzaE1hdFZpZXdTdG10ICopIHBh cnNldHJlZTsKKwlPYmpUcmVlICAgICpyZWZyZXNoU3RtdDsKKwlPYmpUcmVlICAgICp0bXA7CisK KwlyZWZyZXNoU3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVX IiwgMCk7CisKKwkvKiBBZGQgYSBDT05DVVJSRU5UTFkgY2xhdXNlICovCisJYXBwZW5kX3N0cmlu Z19vYmplY3QocmVmcmVzaFN0bXQsICIle2NvbmN1cnJlbnRseX1zIiwKKwkJCQkJCSBub2RlLT5j b25jdXJyZW50ID8gIkNPTkNVUlJFTlRMWSIgOiAiIik7CisJLyogQWRkIHRoZSBtYXR2aWV3IG5h bWUgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZWZyZXNoU3RtdCwgIiV7aWRlbnRpdHl9RCIs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKwkvKiBBZGQgYSBXSVRIIE5PIERBVEEgY2xhdXNl ICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIldJVEggTk8gREFUQSIsIDEsCisJCQkJCQkgInBy ZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCSBub2RlLT5za2lwRGF0YSA/IHRydWUgOiBmYWxz ZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmVmcmVzaFN0bXQsICIle3dpdGhfbm9fZGF0YX1z IiwgdG1wKTsKKworCXJldHVybiByZWZyZXNoU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgRGVm RWxlbXMsIGFzIHVzZWQgZS5nLiBieSBBTFRFUiBDT0xVTU4gLi4uIFNFVCwgaW50byBhIGxpc3Qg b2YgU0VUCisgKiAoLi4uKSAgb3IgUkVTRVQgKC4uLikgY29udGVudHMuCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfRGVmRWxlbShEZWZFbGVtICplbGVtLCBib29sIGlzX3Jlc2V0KQor eworCU9ialRyZWUgICAgKnNldDsKKwlPYmpUcmVlICAgICpvcHRuYW1lOworCisJc2V0ID0gbmV3 X29ianRyZWUoIiIpOworCW9wdG5hbWUgPSBuZXdfb2JqdHJlZSgiIik7CisKKwlpZiAoZWxlbS0+ ZGVmbmFtZXNwYWNlICE9IE5VTEwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9wdG5hbWUsICIl e3NjaGVtYX1JLiIsIGVsZW0tPmRlZm5hbWVzcGFjZSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVj dChvcHRuYW1lLCAiJXtsYWJlbH1JIiwgZWxlbS0+ZGVmbmFtZSk7CisKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChzZXQsICIle2xhYmVsfXMiLCBvcHRuYW1lKTsKKworCWlmICghaXNfcmVzZXQpCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHNldCwgIiA9ICV7dmFsdWV9TCIsCisJCQkJCQkJIGVsZW0t PmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkg PyAiVFJVRSIgOiAiRkFMU0UiKTsKKworCXJldHVybiBzZXQ7Cit9CisKKy8qCisgKiBIYW5kbGUg ZGVwYXJzaW5nIG9mIERST1AgY29tbWFuZHMuCisgKi8KK2NoYXIgKgorZGVwYXJzZV9kcm9wX2Nv bW1hbmQoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCisJ CQkJCSBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpCit7CisJU3RyaW5nSW5mb0RhdGEgc3RyOworCWNo YXIJICAgKmNvbW1hbmQ7CisJY2hhcgkgICAqaWRlbnRpdHkgPSAoY2hhciAqKSBvYmppZGVudGl0 eTsKKwljaGFyCSAgICpmbXQ7CisJT2JqVHJlZSAgICAqc3RtdDsKKwlPYmpUcmVlICAgICpzdG10 MjsKKwlKc29uYgkgICAqanNvbmI7CisKKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKworCWZtdCA9 IHBzcHJpbnRmKCJEUk9QICVzIElGIEVYSVNUUyAlJXtvYmppZGVudGl0eX1zIiwgb2JqZWN0dHlw ZSk7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAib2JqaWRlbnRpdHkiLCBPYmpU eXBlU3RyaW5nLCBpZGVudGl0eSk7CisJc3RtdDIgPSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIs IDEsCisJCQkJCQkgICAicHJlc2VudCIsIE9ialR5cGVCb29sLCBiZWhhdmlvciA9PSBEUk9QX0NB U0NBREUpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7Y2FzY2FkZX1zIiwgc3Rt dDIpOworCisJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHN0bXQpOworCWNvbW1hbmQgPSBKc29u YlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElNQVRFRF9MRU4pOworCisJ cmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIHNldHRpbmcgb2Yg RnVuY3Rpb24KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9GdW5jdGlvblNldChWYXJp YWJsZVNldEtpbmQga2luZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCit7CisJT2JqVHJlZSAg ICAqb2JqOworCisJaWYgKGtpbmQgPT0gVkFSX1JFU0VUX0FMTCkKKwl7CisJCW9iaiA9IG5ld19v Ymp0cmVlKCJSRVNFVCBBTEwiKTsKKwl9CisJZWxzZSBpZiAodmFsdWUgIT0gTlVMTCkKKwl7CisJ CW9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgJXtzZXRfbmFtZX1JIiwgMSwKKwkJCQkJCQkgInNl dF9uYW1lIiwgT2JqVHlwZVN0cmluZywgbmFtZSk7CisKKwkJLyoKKwkJICogU29tZSBHVUMgdmFy aWFibGUgbmFtZXMgYXJlICdMSVNUJyB0eXBlIGFuZCBoZW5jZSBtdXN0IG5vdCBiZQorCQkgKiBx dW90ZWQuCisJCSAqLworCQlpZiAoR2V0Q29uZmlnT3B0aW9uRmxhZ3MobmFtZSwgdHJ1ZSkgJiBH VUNfTElTVF9RVU9URSkKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9iaiwgIlRPICV7c2V0X3Zh bHVlfXMiLCB2YWx1ZSk7CisJCWVsc2UKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9iaiwgIlRP ICV7c2V0X3ZhbHVlfUwiLCB2YWx1ZSk7CisJfQorCWVsc2UKKwl7CisJCW9iaiA9IG5ld19vYmp0 cmVlKCJSRVNFVCIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChvYmosICIle3NldF9uYW1lfUki LCBuYW1lKTsKKwl9CisKKwlyZXR1cm4gb2JqOworfQorCisvKgorICogRGVwYXJzZSBhbiBJbmRl eFN0bXQuCisgKgorICogR2l2ZW4gYW4gaW5kZXggT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0 IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0 aW9uIGNvbW1hbmQuCisgKgorICogSWYgdGhlIGluZGV4IGNvcnJlc3BvbmRzIHRvIGEgY29uc3Ry YWludCwgTlVMTCBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9J bmRleFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJSW5kZXhTdG10ICAq bm9kZSA9IChJbmRleFN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKmluZGV4U3RtdDsK KwlPYmpUcmVlICAgICp0bXBvYmo7CisJUmVsYXRpb24JaWR4cmVsOworCVJlbGF0aW9uCWhlYXBy ZWw7CisJY2hhcgkgICAqaW5kZXhfYW07CisJY2hhcgkgICAqZGVmaW5pdGlvbjsKKwljaGFyCSAg ICpyZWxvcHRpb25zOworCWNoYXIJICAgKnRhYmxlc3BhY2U7CisJY2hhcgkgICAqd2hlcmVDbGF1 c2U7CisKKwlpZiAobm9kZS0+cHJpbWFyeSB8fCBub2RlLT5pc2NvbnN0cmFpbnQpCisJeworCQkv KgorCQkgKiBJbmRleGVzIGZvciBQUklNQVJZIEtFWSBhbmQgb3RoZXIgY29uc3RyYWludHMgYXJl IG91dHB1dAorCQkgKiBzZXBhcmF0ZWx5OyByZXR1cm4gZW1wdHkgaGVyZS4KKwkJICovCisJCXJl dHVybiBOVUxMOworCX0KKworCWlkeHJlbCA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJaGVhcHJlbCA9IHJlbGF0aW9uX29wZW4oaWR4cmVsLT5yZF9pbmRleC0+ aW5kcmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlwZ19nZXRfaW5kZXhkZWZfZGV0YWlsZWQo b2JqZWN0SWQsCisJCQkJCQkJICZpbmRleF9hbSwgJmRlZmluaXRpb24sICZyZWxvcHRpb25zLAor CQkJCQkJCSAmdGFibGVzcGFjZSwgJndoZXJlQ2xhdXNlKTsKKworCS8qCisJICogVmVyYm9zZSBz eW50YXgKKwkgKgorCSAqIENSRUFURSAle3VuaXF1ZX1zIElOREVYICV7Y29uY3VycmVudGx5fXMg JXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgT04KKwkgKiAle3RhYmxlfUQgVVNJTkcgJXtpbmRl eF9hbX1zICgle2RlZmluaXRpb259cykgJXt3aXRofXMgJXt0YWJsZXNwYWNlfXMKKwkgKiAle3do ZXJlX2NsYXVzZX1zCisJICovCisJaW5kZXhTdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOwor CisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiJXt1bmlxdWV9cyIsCisJCQkJCQkg bm9kZS0+dW5pcXVlID8gIlVOSVFVRSIgOiAiIik7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyhp bmRleFN0bXQsICJJTkRFWCIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAi JXtjb25jdXJyZW50bHl9cyIsCisJCQkJCQkgbm9kZS0+Y29uY3VycmVudCA/ICJDT05DVVJSRU5U TFkiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiJXtpZl9ub3Rf ZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIg OiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICIle25hbWV9SSIsCisJ CQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4cmVsKSk7CisKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChpbmRleFN0bXQsICJPTiAle3RhYmxlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShoZWFwcmVsLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAg UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcHJlbCkpKTsKKworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGluZGV4U3RtdCwgIlVTSU5HICV7aW5kZXhfYW19cyIsIGluZGV4X2FtKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIigle2RlZmluaXRpb259cykiLCBkZWZpbml0aW9u KTsKKworCS8qIHJlbG9wdGlvbnMgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiV0lUSCIpOwor CWlmIChyZWxvcHRpb25zKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIoJXtvcHRz fXMpIiwgcmVsb3B0aW9ucyk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAi cHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICIle3dp dGh9cyIsIHRtcG9iaik7CisKKwkvKiB0YWJsZXNwYWNlICovCisJdG1wb2JqID0gbmV3X29ianRy ZWUoIlRBQkxFU1BBQ0UiKTsKKwlpZiAodGFibGVzcGFjZSkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wb2JqLCAiJXt0YWJsZXNwYWNlfXMiLCB0YWJsZXNwYWNlKTsKKwllbHNlCisJCWFwcGVu ZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGluZGV4U3RtdCwgIiV7dGFibGVzcGFjZX1zIiwgdG1wb2JqKTsKKworCS8qIFdIRVJF IGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJXSEVSRSIpOworCWlmICh3aGVyZUNs YXVzZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXt3aGVyZX1zIiwgd2hlcmVD bGF1c2UpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBm YWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoaW5kZXhTdG10LCAiJXt3aGVyZV9jbGF1c2V9 cyIsIHRtcG9iaik7CisKKwl0YWJsZV9jbG9zZShpZHhyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJ dGFibGVfY2xvc2UoaGVhcHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBpbmRleFN0 bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBJTkhFUklUUyByZWxhdGlvbnMuCisgKgorICog R2l2ZW4gYSB0YWJsZSBPSUQsIHJldHVybiBhIHNjaGVtYS1xdWFsaWZpZWQgdGFibGUgbGlzdCBy ZXByZXNlbnRpbmcKKyAqIHRoZSBwYXJlbnQgdGFibGVzLgorICovCitzdGF0aWMgTGlzdCAqCitk ZXBhcnNlX0luaFJlbGF0aW9ucyhPaWQgb2JqZWN0SWQpCit7CisJTGlzdAkgICAqcGFyZW50cyA9 IE5JTDsKKwlSZWxhdGlvbglpbmhSZWw7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0 YSBrZXk7CisJSGVhcFR1cGxlCXR1cGxlOworCisJaW5oUmVsID0gdGFibGVfb3BlbihJbmhlcml0 c1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJU2NhbktleUluaXQoJmtleSwKKwkJ CQlBbnVtX3BnX2luaGVyaXRzX2luaHJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwg Rl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisKKwlzY2FuID0gc3lz dGFibGVfYmVnaW5zY2FuKGluaFJlbCwgSW5oZXJpdHNSZWxpZFNlcW5vSW5kZXhJZCwKKwkJCQkJ CQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVw bGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCU9ialRyZWUgICAgKnBhcmVudDsK KwkJRm9ybV9wZ19pbmhlcml0cyBmb3JtSW5oID0gKEZvcm1fcGdfaW5oZXJpdHMpIEdFVFNUUlVD VCh0dXBsZSk7CisKKwkJcGFyZW50ID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0 aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJIGZvcm1JbmgtPmluaHBhcmVudCk7CisJCXBhcmVu dHMgPSBsYXBwZW5kKHBhcmVudHMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmVudCkpOworCX0KKwor CXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoaW5oUmVsLCBSb3dFeGNsdXNp dmVMb2NrKTsKKworCXJldHVybiBwYXJlbnRzOworfQorCisvKgorICogRGVwYXJzZSB0aGUgT04g Q09NTUlUIC4uLiBjbGF1c2UgZm9yIENSRUFURSAuLi4gVEVNUE9SQVJZIC4uLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKE9uQ29tbWl0QWN0aW9uIG9wdGlv bikKK3sKKwlPYmpUcmVlICAgICpvbmNvbW1pdDsKKworCW9uY29tbWl0ID0gbmV3X29ianRyZWUo Ik9OIENPTU1JVCIpOworCXN3aXRjaCAob3B0aW9uKQorCXsKKwkJY2FzZSBPTkNPTU1JVF9EUk9Q OgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob25jb21taXQsICIle29uX2NvbW1pdF92YWx1ZX1z IiwgIkRST1AiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfREVMRVRFX1JPV1M6CisJ CQlhcHBlbmRfc3RyaW5nX29iamVjdChvbmNvbW1pdCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiLCAi REVMRVRFIFJPV1MiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfUFJFU0VSVkVfUk9X UzoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9uY29tbWl0LCAiJXtvbl9jb21taXRfdmFsdWV9 cyIsICJQUkVTRVJWRSBST1dTIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX05PT1A6 CisJCQlhcHBlbmRfbnVsbF9vYmplY3Qob25jb21taXQsICIle29uX2NvbW1pdF92YWx1ZX1zIik7 CisJCQlhcHBlbmRfYm9vbF9vYmplY3Qob25jb21taXQsICJwcmVzZW50IiwgZmFsc2UpOworCQkJ YnJlYWs7CisJfQorCisJcmV0dXJuIG9uY29tbWl0OworfQorCisvKgorICogRGVwYXJzZSBhIFJl bmFtZVN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUmVuYW1lU3RtdChPYmpl Y3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlSZW5hbWVTdG10ICpub2Rl ID0gKFJlbmFtZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJlbmFtZVN0bXQ7CisJ Y2hhcgkgICAqZm10c3RyOworCWNvbnN0IGNoYXIgKm9ianR5cGU7CisJUmVsYXRpb24JcmVsYXRp b247CisJT2lkCQkJc2NoZW1hSWQ7CisKKwkvKgorCSAqIEluIGFuIEFMVEVSIC4uIFJFTkFNRSBj b21tYW5kLCB3ZSBkb24ndCBoYXZlIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZQorCSAqIG9iamVj dCBpbiBzeXN0ZW0gY2F0YWxvZ3M6IHNpbmNlIHdlIGluc3BlY3QgdGhlbSBhZnRlciB0aGUgY29t bWFuZCBoYXMKKwkgKiBleGVjdXRlZCwgdGhlIG9sZCBuYW1lIGlzIGFscmVhZHkgZ29uZS4gIFRo ZXJlZm9yZSwgd2UgZXh0cmFjdCBpdCBmcm9tCisJICogdGhlIHBhcnNlIG5vZGUuICBOb3RlIHdl IHN0aWxsIGV4dHJhY3QgdGhlIHNjaGVtYSBuYW1lIGZyb20gdGhlIGNhdGFsb2cKKwkgKiAoaXQg bWlnaHQgbm90IGJlIHByZXNlbnQgaW4gdGhlIHBhcnNlIG5vZGUpOyBpdCBjYW5ub3QgcG9zc2li bHkgaGF2ZQorCSAqIGNoYW5nZWQgYW55d2F5LgorCSAqLworCXN3aXRjaCAobm9kZS0+cmVuYW1l VHlwZSkKKwl7CisJCWNhc2UgT0JKRUNUX1RBQkxFOgorCQljYXNlIE9CSkVDVF9JTkRFWDoKKwkJ Y2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCWNhc2UgT0JKRUNUX1ZJRVc6CisJCWNhc2UgT0JKRUNU X01BVFZJRVc6CisKKwkJCS8qCisJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJICoKKwkJCSAqIEFM VEVSICVzICV7aWZfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SQor CQkJICovCisJCQlvYmp0eXBlID0gc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSk7 CisJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMiLCBvYmp0eXBlKTsKKwkJCXJlbGF0aW9u ID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLm9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJ c2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWxhdGlvbik7CisJCQlyZW5hbWVTdG10 ID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAwKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJl bmFtZVN0bXQsICIle2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAi SUYgRVhJU1RTIiA6ICIiKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIl e2lkZW50aXR5fUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlk LAorCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSk7CisJCQlhcHBlbmRf c3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJ CQkJIG5vZGUtPm5ld25hbWUpOworCQkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1No YXJlTG9jayk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9QT0xJQ1k6CisJCQl7CisJCQkJ SGVhcFR1cGxlCXBvbFR1cDsKKwkJCQlGb3JtX3BnX3BvbGljeSBwb2xGb3JtOworCQkJCVJlbGF0 aW9uCXBnX3BvbGljeTsKKwkJCQlTY2FuS2V5RGF0YSBrZXk7CisJCQkJU3lzU2NhbkRlc2Mgc2Nh bjsKKworCQkJCXBnX3BvbGljeSA9IHJlbGF0aW9uX29wZW4oUG9saWN5UmVsYXRpb25JZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwkJCQlTY2FuS2V5SW5pdCgma2V5LCBBbnVtX3BnX3BvbGljeV9vaWQs CisJCQkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQkJCU9iamVjdElk R2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNj YW4ocGdfcG9saWN5LCBQb2xpY3lPaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCQkJCSAgTlVMTCwg MSwgJmtleSk7CisJCQkJcG9sVHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwkJCQlpZiAo IUhlYXBUdXBsZUlzVmFsaWQocG9sVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIHBvbGljeSAldSIsIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXBvbEZvcm0g PSAoRm9ybV9wZ19wb2xpY3kpIEdFVFNUUlVDVChwb2xUdXApOworCisJCQkJcmVuYW1lU3RtdCA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBQT0xJQ1kiLCAwKTsKKwkJCQlhcHBlbmRfc3RyaW5nX29i amVjdChyZW5hbWVTdG10LCAiJXtpZl9leGlzdHN9cyIsCisJCQkJCQkJCQkgbm9kZS0+bWlzc2lu Z19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFt ZVN0bXQsICIle3BvbGljeW5hbWV9SSIsIG5vZGUtPnN1Ym5hbWUpOworCQkJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJlbmFtZVN0bXQsICJPTiAle2lkZW50aXR5fUQiLAorCQkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CQkJIHBvbEZvcm0tPnBvbHJlbGlkKSk7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1l U3RtdCwgIlJFTkFNRSBUTyAle25ld25hbWV9SSIsCisJCQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7 CisJCQkJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ19wb2xp Y3ksIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNU X0FUVFJJQlVURToKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQkJcmVsYXRpb24gPSByZWxhdGlv bl9vcGVuKGFkZHJlc3Mub2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlzY2hlbWFJZCA9 IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbGF0aW9uKTsKKworCQkJLyoKKwkJCSAqIFZlcmJvc2Ug c3ludGF4CisJCQkgKgorCQkJICogQ29tcG9zaXRlIHR5cGVzOiBBTFRFUiBvYmp0eXBlICV7aWRl bnRpdHl9RCBSRU5BTUUgQVRUUklCVVRFCisJCQkgKiAle2NvbG5hbWV9SSBUTyAle25ld25hbWV9 SSAle2Nhc2NhZGV9cworCQkJICoKKwkJCSAqIE5vcm1hbCB0eXBlczogQUxURVIgb2JqdHlwZSAl e2lmX2V4aXN0c31zICUle2lkZW50aXR5fUQgUkVOQU1FCisJCQkgKiBDT0xVTU4gJXtjb2xuYW1l fUkgVE8gJXtuZXduYW1lfUkKKwkJCSAqLworCisJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBP QkpFQ1RfQVRUUklCVVRFKQorCQkJeworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZSgiQUxU RVIgVFlQRSIpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50 aXR5fUQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJ CQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpKTsKKwkJCQlmbXRzdHIgPSBw c3ByaW50ZigiUkVOQU1FIEFUVFJJQlVURSAlJXtjb2xuYW1lfUkiKTsKKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQlvYmp0eXBlID0gc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVsYXRpb25UeXBl KTsKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMiLCBvYmp0eXBlKTsKKwkJCQlyZW5h bWVTdG10ID0gbmV3X29ianRyZWUoZm10c3RyKTsKKworCQkJCS8qIENvbXBvc2l0ZSB0eXBlcyBk byBub3Qgc3VwcG9ydCBJRiBFWElTVFMgKi8KKwkJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBP QkpFQ1RfQ09MVU1OKQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiJXtp Zl9leGlzdHN9cyIsCisJCQkJCQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6 ICIiKTsKKworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50aXR5 fUQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJ CQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpKTsKKwkJCQlmbXRzdHIgPSBwc3By aW50ZigiUkVOQU1FIENPTFVNTiAlJXtjb2xuYW1lfUkiKTsKKwkJCX0KKworCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QocmVuYW1lU3RtdCwgZm10c3RyLCBub2RlLT5zdWJuYW1lKTsKKwkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICJUTyAle25ld25hbWV9SSIsIG5vZGUtPm5ld25h bWUpOworCisJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQorCQkJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2Nhc2NhZGV9cyIsCisJCQkJCQkJ CQkgbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJCQkJCQkJCSJwcmVzZW50Iiwg T2JqVHlwZUJvb2wsCisJCQkJCQkJCQkJCQkJbm9kZS0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURF KSk7CisKKwkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJ CQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJCQl7CisJCQkJY2hhcgkgICAqaWRl bnQ7CisJCQkJSGVhcFR1cGxlCXByb2N0dXA7CisJCQkJRm9ybV9wZ19wcm9jIHByb2Nmb3JtOwor CQkJCUxpc3QJICAgKmlkZW50aXR5OworCisJCQkJQXNzZXJ0KElzQShub2RlLT5vYmplY3QsIE9i amVjdFdpdGhBcmdzKSk7CisJCQkJaWRlbnRpdHkgPSAoKE9iamVjdFdpdGhBcmdzICopIG5vZGUt Pm9iamVjdCktPm9iam5hbWU7CisKKwkJCQlwcm9jdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NP SUQsCisJCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJ CQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY3R1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0 SWQpOworCQkJCXByb2Nmb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2N0dXApOwor CisJCQkJLyogWFhYIGRvZXMgdGhpcyB3b3JrIGZvciBvcmRlcmVkLXNldCBhZ2dyZWdhdGVzPyAq LworCQkJCWlkZW50ID0gcHNwcmludGYoIiVzJXMiLAorCQkJCQkJCQkgcXVvdGVfcXVhbGlmaWVk X2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKHByb2Nmb3JtLT5wcm9uYW1lc3BhY2UpLAor CQkJCQkJCQkJCQkJCQkJc3RyVmFsKGxsYXN0KGlkZW50aXR5KSkpLAorCQkJCQkJCQkgZm9ybWF0 X3Byb2NlZHVyZV9hcmdzKGFkZHJlc3Mub2JqZWN0SWQsIHRydWUpKTsKKworCQkJCWZtdHN0ciA9 IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUki LAorCQkJCQkJCQkgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpKTsKKwkJCQly ZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAyLAorCQkJCQkJCQkJCQkiaWRlbnRp dHkiLCBPYmpUeXBlU3RyaW5nLCBpZGVudCwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBl U3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsK KwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX09QQ0xBU1M6CisJCQl7CisJCQkJSGVh cFR1cGxlCW9wY1R1cDsKKwkJCQlGb3JtX3BnX29wY2xhc3Mgb3BjRm9ybTsKKwkJCQlMaXN0CSAg ICpvbGRuYW1lczsKKwkJCQljaGFyCSAgICpzY2hlbWFuYW1lOworCQkJCWNoYXIJICAgKm9wY25h bWU7CisJCQkJY2hhcgkgICAqZm10OworCisJCQkJZm10ID0gcHNwcmludGYoIkFMVEVSICVzICUl e2lkZW50aXR5fUQgVVNJTkcgJSV7aW5kZXhfbWV0aG9kfXMgUkVOQU1FIFRPICUle25ld25hbWV9 SSIsCisJCQkJCQkJICAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSkpOworCisJ CQkJb3BjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENMQU9JRCwgT2JqZWN0SWRHZXREYXR1bShhZGRy ZXNzLm9iamVjdElkKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wY1R1cCkpCisJCQkJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGNsYXNzIHdpdGggT0lEICV1 IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKworCQkJCW9wY0Zvcm0gPSAoRm9ybV9wZ19v cGNsYXNzKSBHRVRTVFJVQ1Qob3BjVHVwKTsKKworCQkJCW9sZG5hbWVzID0gbGlzdF9jb3B5X3Rh aWwoKExpc3QgKikgbm9kZS0+b2JqZWN0LCAxKTsKKworCQkJCS8qIERlY29uc3RydWN0IHRoZSBu YW1lIGxpc3QgKi8KKwkJCQlEZWNvbnN0cnVjdFF1YWxpZmllZE5hbWUob2xkbmFtZXMsICZzY2hl bWFuYW1lLCAmb3BjbmFtZSk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoZm10 LCAzLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQlu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BjRm9ybS0+b3BjbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJCQkJCQkgb3BjbmFtZSksCisJCQkJCQkJCQkJCSJpbmRleF9tZXRob2QiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCQkJCQlnZXRfYW1fbmFtZShvcGNGb3JtLT5vcGNtZXRob2QpLAorCQkJCQkJ CQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJUmVs ZWFzZVN5c0NhY2hlKG9wY1R1cCk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9P UEZBTUlMWToKKwkJCXsKKwkJCQlIZWFwVHVwbGUJb3BmVHVwOworCQkJCUhlYXBUdXBsZQlhbVR1 cDsKKwkJCQlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJCQkJRm9ybV9wZ19hbQlhbUZvcm07 CisJCQkJTGlzdAkgICAqb2xkbmFtZXM7CisJCQkJY2hhcgkgICAqc2NoZW1hbmFtZTsKKwkJCQlj aGFyCSAgICpvcGZuYW1lOworCQkJCWNoYXIJICAgKmZtdDsKKworCQkJCWZtdCA9IHBzcHJpbnRm KCJBTFRFUiAlcyAlJXtpZGVudGl0eX1EIFVTSU5HICUle2luZGV4X21ldGhvZH1zIFJFTkFNRSBU TyAlJXtuZXduYW1lfUkiLAorCQkJCQkJCSAgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFt ZVR5cGUpKTsKKworCQkJCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgYWRk cmVzcy5vYmplY3RJZCk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCQkJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0 aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCW9wZkZvcm0gPSAoRm9y bV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisKKwkJCQlhbVR1cCA9IFNlYXJjaFN5 c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGZGb3JtLT5vcGZtZXRob2QpKTsKKwkJ CQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYW1UdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1ldGhvZCAldSIsCisJCQkJCQkgb3BmRm9ybS0+b3Bm bWV0aG9kKTsKKworCQkJCWFtRm9ybSA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOwor CisJCQkJb2xkbmFtZXMgPSBsaXN0X2NvcHlfdGFpbCgoTGlzdCAqKSBub2RlLT5vYmplY3QsIDEp OworCisJCQkJLyogRGVjb25zdHJ1Y3QgdGhlIG5hbWUgbGlzdCAqLworCQkJCURlY29uc3RydWN0 UXVhbGlmaWVkTmFtZShvbGRuYW1lcywgJnNjaGVtYW5hbWUsICZvcGZuYW1lKTsKKworCQkJCXJl bmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDMsCisJCQkJCQkJCQkJCSJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZG b3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkJCSBvcGZuYW1lKSwKKwkJCQkJCQkJ CQkJImluZGV4X21ldGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCU5hbWVTdHIoYW1G b3JtLT5hbW5hbWUpLAorCQkJCQkJCQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUt Pm5ld25hbWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKGFtVHVwKTsKKwkJCQlSZWxlYXNlU3lz Q2FjaGUob3BmVHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1NDSEVNQToK KwkJCXJlbmFtZVN0bXQgPQorCQkJCW5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTQ0hFTUEgJXtpZGVu dGl0eX1JIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDIsCisJCQkJCQkJICAgImlkZW50aXR5Iiwg T2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkgICAibmV3bmFtZSIsIE9ialR5 cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfRkRX OgorCQljYXNlIE9CSkVDVF9MQU5HVUFHRToKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9TRVJWRVI6 CisJCQl7CisJCQkJU3RyaW5nCSAgICppZGVudGl0eSA9IGNhc3ROb2RlKFN0cmluZywgbm9kZS0+ b2JqZWN0KTsKKworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1z IFJFTkFNRSBUTyAlJXtuZXduYW1lfUkiLAorCQkJCQkJCQkgIHN0cmluZ2lmeV9vYmp0eXBlKG5v ZGUtPnJlbmFtZVR5cGUpKTsKKwkJCQlyZW5hbWVTdG10ID0KKwkJCQkJbmV3X29ianRyZWVfVkEo Zm10c3RyLCAyLAorCQkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBzdHJWYWwo aWRlbnRpdHkpLAorCQkJCQkJCQkgICAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5l d25hbWUpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfUlVMRToKKwkJCXsKKwkJ CQlIZWFwVHVwbGUJcmV3clR1cDsKKwkJCQlGb3JtX3BnX3Jld3JpdGUgcmV3ckZvcm07CisJCQkJ UmVsYXRpb24JcGdfcmV3cml0ZTsKKworCQkJCXBnX3Jld3JpdGUgPSByZWxhdGlvbl9vcGVuKFJl d3JpdGVSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCXJld3JUdXAgPSBnZXRfY2F0 YWxvZ19vYmplY3RfYnlfb2lkKHBnX3Jld3JpdGUsIEFudW1fcGdfcmV3cml0ZV9vaWQsIGFkZHJl c3Mub2JqZWN0SWQpOworCQkJCXJld3JGb3JtID0gKEZvcm1fcGdfcmV3cml0ZSkgR0VUU1RSVUNU KHJld3JUdXApOworCisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBSVUxF ICV7cnVsZW5hbWV9SSBPTiAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJ CQkJCQkJCQkJMywKKwkJCQkJCQkJCQkJInJ1bGVuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ c3VibmFtZSwKKwkJCQkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJ CQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJCQkJCXJld3JGb3JtLT5ldl9jbGFzcyksCisJCQkJCQkJCQkJCSJuZXduYW1lIiwg T2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQkJcmVsYXRpb25fY2xvc2UocGdfcmV3 cml0ZSwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNU X1RSSUdHRVI6CisJCQl7CisJCQkJSGVhcFR1cGxlCXRyaWdUdXA7CisJCQkJRm9ybV9wZ190cmln Z2VyIHRyaWdGb3JtOworCQkJCVJlbGF0aW9uCXBnX3RyaWdnZXI7CisKKwkJCQlwZ190cmlnZ2Vy ID0gcmVsYXRpb25fb3BlbihUcmlnZ2VyUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJ CQl0cmlnVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ190cmlnZ2VyLCBnZXRfb2Jq ZWN0X2F0dG51bV9vaWQoYWRkcmVzcy5jbGFzc0lkKSwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJ dHJpZ0Zvcm0gPSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJpZ1R1cCk7CisKKwkJCQly ZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFRSSUdHRVIgJXt0cmlnZ2VybmFtZX1J IE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCQkJCQkzLAor CQkJCQkJCQkJCQkidHJpZ2dlcm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAor CQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQluZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJ CQkJdHJpZ0Zvcm0tPnRncmVsaWQpLAorCQkJCQkJCQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJp bmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJcmVsYXRpb25fY2xvc2UocGdfdHJpZ2dlciwgQWNj ZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX0NPTExBVElP TjoKKwkJY2FzZSBPQkpFQ1RfU1RBVElTVElDX0VYVDoKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJ Y2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJY2FzZSBPQkpFQ1RfRE9NQUlOOgorCQljYXNlIE9C SkVDVF9UU0RJQ1RJT05BUlk6CisJCWNhc2UgT0JKRUNUX1RTUEFSU0VSOgorCQljYXNlIE9CSkVD VF9UU1RFTVBMQVRFOgorCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQl7CisJCQkJ SGVhcFR1cGxlCW9ialR1cDsKKwkJCQlSZWxhdGlvbgljYXRhbG9nOworCQkJCURhdHVtCQlvYmpu c3A7CisJCQkJYm9vbAkJaXNudWxsOworCQkJCUF0dHJOdW1iZXIJQW51bV9uYW1lc3BhY2U7CisJ CQkJTGlzdAkgICAqaWRlbnRpdHkgPSBjYXN0Tm9kZShMaXN0LCBub2RlLT5vYmplY3QpOworCQkJ CWNoYXIJICAgKmZtdHN0cmluZzsKKworCQkJCS8qIE9idGFpbiBvYmplY3QgdHVwbGUgKi8KKwkJ CQljYXRhbG9nID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLmNsYXNzSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJCQkJb2JqVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBnZXRf b2JqZWN0X2F0dG51bV9vaWQoYWRkcmVzcy5jbGFzc0lkKSwgYWRkcmVzcy5vYmplY3RJZCk7CisK KwkJCQkvKiBPYnRhaW4gbmFtZXNwYWNlICovCisJCQkJQW51bV9uYW1lc3BhY2UgPSBnZXRfb2Jq ZWN0X2F0dG51bV9uYW1lc3BhY2UoYWRkcmVzcy5jbGFzc0lkKTsKKwkJCQlvYmpuc3AgPSBoZWFw X2dldGF0dHIob2JqVHVwLCBBbnVtX25hbWVzcGFjZSwKKwkJCQkJCQkJCSAgUmVsYXRpb25HZXRE ZXNjcihjYXRhbG9nKSwgJmlzbnVsbCk7CisJCQkJaWYgKGlzbnVsbCkKKwkJCQkJZWxvZyhFUlJP UiwgImludmFsaWQgTlVMTCBuYW1lc3BhY2UiKTsKKworCQkJCW9ianR5cGUgPSBzdHJpbmdpZnlf b2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKTsKKwkJCQlmbXRzdHJpbmcgPSBwc3ByaW50ZigiQUxU RVIgJXMiLCBvYmp0eXBlKTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXRz dHJpbmcsCisJCQkJCQkJCQkJCTApOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0 bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShE YXR1bUdldE9iamVjdElkKG9iam5zcCksCisJCQkJCQkJCQkJCQkJCQkgIHN0clZhbChsbGFzdChp ZGVudGl0eSkpKSk7CisKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiUkVO QU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJCSBub2RlLT5uZXduYW1lKTsKKwkJCQlyZWxh dGlvbl9jbG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisK KwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIs IG5vZGUtPnJlbmFtZVR5cGUpOworCX0KKworCXJldHVybiByZW5hbWVTdG10OworfQorCisvKgor ICogRGVwYXJzZSBhIEFsdGVyT2JqZWN0RGVwZW5kc1N0bXQgKEFMVEVSIC4uLiBERVBFTkRTIE9O IC4uLikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJEZXBlbmRTdG10KE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyT2JqZWN0RGVwZW5kc1N0bXQg Km5vZGUgPSAoQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAg ICAqYWx0ZXJEZXBlbmRlU3RtdCA9IE5VTEw7CisKKworCWlmIChub2RlLT5vYmplY3RUeXBlID09 IE9CSkVDVF9JTkRFWCkKKwl7CisJCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVsYXRpb25fb3Blbihv YmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJT2JqVHJlZSAgICAqcXVhbGlmaWVkOworCisJ CWFsdGVyRGVwZW5kZVN0bXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgSU5ERVgiKTsKKworCQlxdWFs aWZpZWQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpOworCQlhcHBlbmRf b2JqZWN0X29iamVjdChhbHRlckRlcGVuZGVTdG10LCAiJXtpZGVudGl0eX1EIiwgcXVhbGlmaWVk KTsKKwkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJEZXBlbmRlU3RtdCwgIiV7Tk99cyIsCisJCQkJCQkJIG5v ZGUtPnJlbW92ZSA/ICJOTyIgOiAiIik7CisKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJE ZXBlbmRlU3RtdCwgIkRFUEVORFMgT04gRVhURU5TSU9OIik7CisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGFsdGVyRGVwZW5kZVN0bXQsICIle25ld25hbWV9SSIsIHN0clZhbChub2RlLT5leHRuYW1l KSk7CisJfQorCWVsc2UKKwkJZWxvZyhMT0csICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRl cGFyc2UgY29tbWFuZDogJWQiLAorCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisKKwly ZXR1cm4gYWx0ZXJEZXBlbmRlU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNl IENBQ0hFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2Vx X0NhY2hlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFs dGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKmNhY2hlOworCWNoYXIJICAgKnRtcHN0cjsKKwlj aGFyCSAgICpmbXQ7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEt PnNlcWNhY2hlKTsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBDQUNIRSAle3Zh bHVlfXMiOworCWVsc2UKKwkJZm10ID0gIkNBQ0hFICV7dmFsdWV9cyI7CisKKwljYWNoZSA9IG5l d19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi Y2FjaGUiLAorCQkJCQkJICAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJl dHVybiBuZXdfb2JqZWN0X29iamVjdChjYWNoZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBz ZXF1ZW5jZSBDWUNMRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBh cnNlX1NlcV9DeWNsZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwg Ym9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpjeWNsZTsKKwljaGFyCSAgICpmbXQ7 CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgJXtub31zIENZQ0xFIjsKKwllbHNl CisJCWZtdCA9ICIle25vfXMgQ1lDTEUiOworCisJY3ljbGUgPSBuZXdfb2JqdHJlZV9WQShmbXQs IDIsCisJCQkJCQkgICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImN5Y2xlIiwKKwkJCQkJCSAg ICJubyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgICBzZXFkYXRhLT5zZXFjeWNsZSA/ICIiIDog Ik5PIik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KGN5Y2xlKTsKK30KKworLyoKKyAqIERl cGFyc2UgdGhlIHNlcXVlbmNlIElOQ1JFTUVOVCBCWSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxp bmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShPYmpUcmVlICpwYXJlbnQsIEZv cm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAg ICppbmNyZW1lbnRhbGJ5OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlp ZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgSU5DUkVNRU5UIEJZICV7dmFsdWV9cyI7CisJ ZWxzZQorCQlmbXQgPSAiSU5DUkVNRU5UIEJZICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3By aW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWluY3JlbWVudCk7CisJaW5jcmVtZW50YWxi eSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkJICAgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJzZXFpbmNyZW1lbnQiLAorCQkJCQkJCQkgICAidmFsdWUiLCBPYmpUeXBlU3RyaW5n LCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChpbmNyZW1lbnRhbGJ5KTsKK30K KworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE1BWFZBTFVFIG9wdGlvbi4KKyAqLworc3Rh dGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01heHZhbHVlKE9ialRyZWUgKnBhcmVu dCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRy ZWUgICAgKm1heHZhbHVlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlp ZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgTUFYVkFMVUUgJXt2YWx1ZX1zIjsKKwllbHNl CisJCWZtdCA9ICJNQVhWQUxVRSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5U NjRfRk9STUFULCBzZXFkYXRhLT5zZXFtYXgpOworCW1heHZhbHVlID0gbmV3X29ianRyZWVfVkEo Zm10LCAyLAorCQkJCQkJCSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtYXh2YWx1ZSIsCisJ CQkJCQkJICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdfb2Jq ZWN0X29iamVjdChtYXh2YWx1ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBN SU5WQUxVRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1Nl cV9NaW52YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9v bCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICptaW52YWx1ZTsKKwljaGFyCSAgICp0bXBz dHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIE1J TlZBTFVFICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAiTUlOVkFMVUUgJXt2YWx1ZX1zIjsK KworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxbWluKTsKKwlt aW52YWx1ZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAibWludmFsdWUiLAorCQkJCQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywg dG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QobWludmFsdWUpOworfQorCisvKgor ICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgT1dORUQgQlkgY29tbWFuZC4KKyAqLworc3RhdGljIE9i akVsZW0gKgorZGVwYXJzZV9TZXFfT3duZWRCeShPYmpUcmVlICpwYXJlbnQsIE9pZCBzZXF1ZW5j ZUlkLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKm93bmVkYnkgPSBOVUxMOwor CVJlbGF0aW9uCWRlcFJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleXNb M107CisJSGVhcFR1cGxlCXR1cGxlOworCisJZGVwUmVsID0gdGFibGVfb3BlbihEZXBlbmRSZWxh dGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZrZXlzWzBdLAorCQkJCUFu dW1fcGdfZGVwZW5kX2NsYXNzaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVR LAorCQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25SZWxhdGlvbklkKSk7CisJU2NhbktleUlu aXQoJmtleXNbMV0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2JqaWQsCisJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oc2VxdWVuY2VJZCkpOwor CVNjYW5LZXlJbml0KCZrZXlzWzJdLAorCQkJCUFudW1fcGdfZGVwZW5kX29ianN1YmlkLAorCQkJ CUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9JTlQ0RVEsCisJCQkJSW50MzJHZXREYXR1bSgwKSk7 CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGRlcFJlbCwgRGVwZW5kRGVwZW5kZXJJbmRl eElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMywga2V5cyk7CisJd2hpbGUgKEhlYXBUdXBsZUlz VmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCU9pZAkJCW93bmVy SWQ7CisJCUZvcm1fcGdfZGVwZW5kIGRlcGZvcm07CisJCU9ialRyZWUgICAgKnRtcG9iajsKKwkJ Y2hhcgkgICAqY29sbmFtZTsKKworCQlkZXBmb3JtID0gKEZvcm1fcGdfZGVwZW5kKSBHRVRTVFJV Q1QodHVwbGUpOworCisJCS8qIE9ubHkgY29uc2lkZXIgQVVUTyBkZXBlbmRlbmNpZXMgb24gcGdf Y2xhc3MgKi8KKwkJaWYgKGRlcGZvcm0tPmRlcHR5cGUgIT0gREVQRU5ERU5DWV9BVVRPKQorCQkJ Y29udGludWU7CisJCWlmIChkZXBmb3JtLT5yZWZjbGFzc2lkICE9IFJlbGF0aW9uUmVsYXRpb25J ZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVwZm9ybS0+cmVmb2Jqc3ViaWQgPD0gMCkKKwkJCWNv bnRpbnVlOworCisJCW93bmVySWQgPSBkZXBmb3JtLT5yZWZvYmppZDsKKwkJY29sbmFtZSA9IGdl dF9hdHRuYW1lKG93bmVySWQsIGRlcGZvcm0tPnJlZm9ianN1YmlkLCBmYWxzZSk7CisJCWlmIChj b2xuYW1lID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLCBvd25lcklkKTsKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wb2JqLCAiYXR0cm5hbWUiLCBjb2xuYW1lKTsKKwkJb3duZWRieSA9IG5l d19vYmp0cmVlX1ZBKCJPV05FRCBCWSAle293bmVyfUQiLAorCQkJCQkJCQkgMiwKKwkJCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3duZWQiLAorCQkJCQkJCQkgIm93bmVyIiwgT2Jq VHlwZU9iamVjdCwgdG1wb2JqKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXJl bGF0aW9uX2Nsb3NlKGRlcFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qCisJICogSWYgdGhl cmUncyBubyBvd25lciBjb2x1bW4sIGVtaXQgYW4gZW1wdHkgT1dORUQgQlkgZWxlbWVudCwgc2V0 IHVwIHNvCisJICogdGhhdCBpdCB3b24ndCBwcmludCBhbnl0aGluZy4KKwkgKi8KKwlpZiAoIW93 bmVkYnkpCisJCS8qIFhYWCB0aGlzIHNob3VsZG4ndCBoYXBwZW4gLi4uICovCisJCW93bmVkYnkg PSBuZXdfb2JqdHJlZV9WQSgiT1dORUQgQlkgJXtvd25lcn1EIiwKKwkJCQkJCQkJIDMsCisJCQkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm93bmVkIiwKKwkJCQkJCQkJICJvd25lciIs IE9ialR5cGVOdWxsLAorCQkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgZmFsc2UpOwor CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KG93bmVkYnkpOworfQorCisvKgorICogRGVwYXJz ZSB0aGUgc2VxdWVuY2UgUkVTVEFSVCBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxl bSAqCitkZXBhcnNlX1NlcV9SZXN0YXJ0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5j ZV9kYXRhIHNlcWRhdGEpCit7CisJT2JqVHJlZSAgICAqcmVzdGFydDsKKwljaGFyCSAgICp0bXBz dHI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPmxhc3RfdmFs dWUpOworCXJlc3RhcnQgPSBuZXdfb2JqdHJlZV9WQSgiUkVTVEFSVCAle3ZhbHVlfXMiLCAyLAor CQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RhcnQiLAorCQkJCQkJCSAidmFs dWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChy ZXN0YXJ0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFNUQVJUIFdJVEggb3B0 aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfU3RhcnR3aXRo KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3Rh YmxlKQoreworCU9ialRyZWUgICAgKnN0YXJ0d2l0aDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hh cgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIFNUQVJUIFdJVEgg JXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJTVEFSVCBXSVRIICV7dmFsdWV9cyI7CisKKwl0 bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcXN0YXJ0KTsKKwlzdGFy dHdpdGggPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJzdGFydCIsCisJCQkJCQkJICAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1w c3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qoc3RhcnR3aXRoKTsKK30KKworLyoKKyAq IERlcGFyc2UgdGhlIHR5cGUgU1RPUkFHRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqCitkZXBhcnNlX1R5cGVfU3RvcmFnZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlw ZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnN0b3JhZ2U7CisJY2hhcgkgICAqdG1wc3RyOwor CWNoYXIJICAgKmZtdDsKKwljaGFyCSAgICpzdHI7CisKKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cHN0 b3JhZ2UpCisJeworCQljYXNlICdwJzoKKwkJCXN0ciA9ICJwbGFpbiI7CisJCQlicmVhazsKKwkJ Y2FzZSAnZSc6CisJCQlzdHIgPSAiZXh0ZXJuYWwiOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgor CQkJc3RyID0gImV4dGVuZGVkIjsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCXN0ciA9ICJt YWluIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3Rv cmFnZSBzcGVjaWZpZXIgJWMiLCB0eXBGb3JtLT50eXBzdG9yYWdlKTsKKwl9CisKKwl0bXBzdHIg PSBwc3ByaW50ZigiJXMiLCBzdHIpOworCisJZm10ID0gIlNUT1JBR0UgPSAle3ZhbHVlfXMiOwor CisJc3RvcmFnZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJzdG9yYWdlIiwKKwkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywg dG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChzdG9yYWdlKTsKK30KKworLyoK KyAqIERlcGFyc2UgdGhlIHR5cGUgUkVDRUlWRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfUmVjZWl2ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf dHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJlY2VpdmU7CisKKwlyZWNlaXZlID0gbmV3 X29ianRyZWVfVkEoIlJFQ0VJVkU9IiwgMSwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJyZWNlaXZlIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwcmVjZWl2ZSkpCisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlY2VpdmUsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJCSB0eXBGb3JtLT50eXByZWNlaXZlKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmpl Y3QocmVjZWl2ZSwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmpl Y3QocmVjZWl2ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIFNFTkQgb3B0aW9uLgor ICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1NlbmQoT2JqVHJlZSAq cGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlICAgICpzZW5kOworCisJ c2VuZCA9IG5ld19vYmp0cmVlX1ZBKCJTRU5EPSIsIDEsCisJCQkJCQkgICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAic2VuZCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHNlbmQpKQor CQlhcHBlbmRfb2JqZWN0X29iamVjdChzZW5kLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQkgdHlwRm9ybS0+dHlwc2VuZCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHNl bmQsICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHNlbmQp OworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSB0eXBtb2RfaW4gb3B0aW9uLgorICovCitz dGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1R5cG1vZF9JbihPYmpUcmVlICpw YXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnR5cG1vZGluOwor CisJdHlwbW9kaW4gPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX0lOPSIsIDEsCisJCQkJCQkJICAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9pbiIpOworCWlmIChPaWRJc1ZhbGlkKHR5 cEZvcm0tPnR5cG1vZGluKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodHlwbW9kaW4sICIle3By b2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RpbikpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHR5cG1vZGluLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJl dHVybiBuZXdfb2JqZWN0X29iamVjdCh0eXBtb2Rpbik7Cit9CisKKworLyoKKyAqIERlcGFyc2Ug dGhlIHR5cGUgdHlwbW9kX291dCBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAq CitkZXBhcnNlX1R5cGVfVHlwbW9kX091dChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0 eXBGb3JtKQoreworCU9ialRyZWUgICAgKnR5cG1vZG91dDsKKworCXR5cG1vZG91dCA9IG5ld19v Ymp0cmVlX1ZBKCJUWVBNT0RfT1VUPSIsIDEsCisJCQkJCQkJICAgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJ0eXBtb2Rfb3V0Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kb3V0 KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodHlwbW9kb3V0LCAiJXtwcm9jZWR1cmV9RCIsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kb3V0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9v bF9vYmplY3QodHlwbW9kb3V0LCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2Jq ZWN0X29iamVjdCh0eXBtb2RvdXQpOworfQorCisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIGFu YWx5emUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBl X0FuYWx5emUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpU cmVlICAgICp0eXBhbmFseXplOworCisJdHlwYW5hbHl6ZSA9IG5ld19vYmp0cmVlX1ZBKCJBTkFM WVpFPSIsIDEsCisJCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYW5hbHl6ZSIpOwor CWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGFuYWx5emUpKQorCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0eXBhbmFseXplLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9y bS0+dHlwYW5hbHl6ZSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHR5cGFuYWx5emUs ICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5cGFuYWx5 emUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBzdWJzY3JpcHQgb3B0aW9uLgorICov CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChPYmpUcmVl ICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnR5cHN1YnNj cmlwdDsKKworCXR5cHN1YnNjcmlwdCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJTQ1JJUFQ9IiwgMSwK KwkJCQkJCQkJICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN1YnNjcmlwdCIpOworCWlmIChP aWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHN1YnNjcmlwdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHR5cHN1YnNjcmlwdCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0t PnR5cHN1YnNjcmlwdCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHR5cHN1YnNjcmlw dCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QodHlwc3Vi c2NyaXB0KTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBSdWxlU3RtdCAoQ1JFQVRFIFJVTEUpLgor ICoKKyAqIEdpdmVuIGEgcnVsZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgcnVsZSBjb21tYW5kLgor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1J1bGVTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCVJ1bGVTdG10ICAgKm5vZGUgPSAoUnVsZVN0bXQgKikgcGFyc2V0 cmVlOworCU9ialRyZWUgICAgKnJ1bGVTdG10OworCU9ialRyZWUgICAgKnRtcDsKKwlSZWxhdGlv bglwZ19yZXdyaXRlOworCUZvcm1fcGdfcmV3cml0ZSByZXdyRm9ybTsKKwlIZWFwVHVwbGUJcmV3 clR1cDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleTsKKwlEYXR1bQkJZXZf cXVhbDsKKwlEYXR1bQkJZXZfYWN0aW9uczsKKwlib29sCQlpc251bGw7CisJY2hhcgkgICAqcXVh bDsKKwlMaXN0CSAgICphY3Rpb25zOworCUxpc3QJICAgKmxpc3Q7CisJTGlzdENlbGwgICAqY2Vs bDsKKworCXBnX3Jld3JpdGUgPSB0YWJsZV9vcGVuKFJld3JpdGVSZWxhdGlvbklkLCBBY2Nlc3NT aGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZrZXksCisJCQkJQW51bV9wZ19yZXdyaXRlX29pZCwK KwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsCisJCQkJRl9PSURFUSwgT2JqZWN0SWRHZXREYXR1 bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19yZXdyaXRlLCBS ZXdyaXRlT2lkSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDEsICZrZXkpOworCXJld3JU dXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChyZXdy VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJld3JpdGUgcnVs ZSB3aXRoIG9pZCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJcmV3ckZvcm0gPSAoRm9ybV9wZ19y ZXdyaXRlKSBHRVRTVFJVQ1QocmV3clR1cCk7CisKKwlydWxlU3RtdCA9IG5ld19vYmp0cmVlKCJD UkVBVEUgUlVMRSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocnVsZVN0bXQsICIle29yX3Jl cGxhY2V9cyIsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiKTsKKwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJ1bGVTdG10LCAiJXtpZGVudGl0eX1JIiwKKwkJCQkJCSBu b2RlLT5ydWxlbmFtZSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChydWxlU3RtdCwgIkFTIE9O ICV7ZXZlbnR9cyIsCisJCQkJCQkgbm9kZS0+ZXZlbnQgPT0gQ01EX1NFTEVDVCA/ICJTRUxFQ1Qi IDoKKwkJCQkJCSBub2RlLT5ldmVudCA9PSBDTURfVVBEQVRFID8gIlVQREFURSIgOgorCQkJCQkJ IG5vZGUtPmV2ZW50ID09IENNRF9ERUxFVEUgPyAiREVMRVRFIiA6CisJCQkJCQkgbm9kZS0+ZXZl bnQgPT0gQ01EX0lOU0VSVCA/ICJJTlNFUlQiIDogIlhYWCIpOworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHJ1bGVTdG10LCAiVE8gJXt0YWJsZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSByZXdyRm9ybS0+ZXZf Y2xhc3MpKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJ1bGVTdG10LCAiRE8gJXtpbnN0ZWFk fXMiLAorCQkJCQkJIG5vZGUtPmluc3RlYWQgPyAiSU5TVEVBRCIgOiAiQUxTTyIpOworCisJZXZf cXVhbCA9IGhlYXBfZ2V0YXR0cihyZXdyVHVwLCBBbnVtX3BnX3Jld3JpdGVfZXZfcXVhbCwKKwkJ CQkJCSAgIFJlbGF0aW9uR2V0RGVzY3IocGdfcmV3cml0ZSksICZpc251bGwpOworCWV2X2FjdGlv bnMgPSBoZWFwX2dldGF0dHIocmV3clR1cCwgQW51bV9wZ19yZXdyaXRlX2V2X2FjdGlvbiwKKwkJ CQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocGdfcmV3cml0ZSksICZpc251bGwpOworCisJcGdfZ2V0 X3J1bGVkZWZfZGV0YWlsZWQoZXZfcXVhbCwgZXZfYWN0aW9ucywgJnF1YWwsICZhY3Rpb25zKTsK KworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJXSEVSRSAle2NsYXVzZX1zIiwgMCk7CisKKwlpZiAo cXVhbCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiY2xhdXNlIiwgcXVhbCk7CisJZWxz ZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcCwgImNsYXVzZSIpOworCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisKKwlhcHBlbmRfb2JqZWN0X29i amVjdChydWxlU3RtdCwgIndoZXJlX2NsYXVzZSIsIHRtcCk7CisKKwlsaXN0ID0gTklMOworCWZv cmVhY2goY2VsbCwgYWN0aW9ucykKKwl7CisJCWNoYXIJICAgKmFjdGlvbiA9IGxmaXJzdChjZWxs KTsKKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChhY3Rpb24pKTsK Kwl9CisJYXBwZW5kX2FycmF5X29iamVjdChydWxlU3RtdCwgIiV7YWN0aW9uczosIH1zIiwgbGlz dCk7CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKHBnX3Jld3JpdGUs IEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcnVsZVN0bXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIGEgQ3JlYXRlVHJhbnNmb3JtU3RtdCAoQ1JFQVRFIFRSQU5TRk9STSkuCisgKgorICogR2l2 ZW4gYSB0cmFuc2Zvcm0gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJl dHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIENSRUFURSBUUkFOU0ZPUk0gY29t bWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUcmFuc2Zvcm1TdG10 KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRyYW5zZm9ybVN0bXQg Km5vZGUgPSAoQ3JlYXRlVHJhbnNmb3JtU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAq Y3JlYXRlVHJhbnNmb3JtOworCU9ialRyZWUgICAgKnNpZ247CisJSGVhcFR1cGxlCXRyZlR1cDsK KwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlGb3JtX3BnX3RyYW5z Zm9ybSB0cmZGb3JtOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07CisJRm9ybV9wZ19wcm9j IHByb2NGb3JtOworCWludAkJCWk7CisKKwkvKiBHZXQgdGhlIHBnX3RyYW5zZm9ybSB0dXBsZSAq LworCXRyZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShUUkZPSUQsIE9iamVjdElkR2V0RGF0dW0ob2Jq ZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHJmVHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciB0cmFuc2Zvcm0gd2l0aCBPSUQgJXUiLAorCQkJIG9i amVjdElkKTsKKwl0cmZGb3JtID0gKEZvcm1fcGdfdHJhbnNmb3JtKSBHRVRTVFJVQ1QodHJmVHVw KTsKKworCS8qIEdldCB0aGUgY29ycmVzcG9uZGluZyBwZ19sYW5ndWFnZSB0dXBsZSAqLworCWxh bmdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoTEFOR09JRCwgdHJmRm9ybS0+dHJmbGFuZyk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKGxhbmdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWx1cmUgZm9yIGxhbmd1YWdlIHdpdGggT0lEICV1IiwKKwkJCSB0cmZGb3JtLT50cmZsYW5n KTsKKwlsYW5nRm9ybSA9IChGb3JtX3BnX2xhbmd1YWdlKSBHRVRTVFJVQ1QobGFuZ1R1cCk7CisK KwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMg VFJBTlNGT1JNIEZPUiAle3R5cGVuYW1lfUQgTEFOR1VBR0UgJXtsYW5ndWFnZX1JCisJICogKCBG Uk9NIFNRTCBXSVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlfXMsIFRPIFNRTCBXSVRIIEZVTkNUSU9O CisJICogJXtzaWduYXR1cmVfdG9mfXMgKQorCSAqLworCWNyZWF0ZVRyYW5zZm9ybSA9IG5ld19v Ymp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVRyYW5zZm9y bSwgIiV7b3JfcmVwbGFjZX1zIiwKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0Ui IDogIiIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVRyYW5zZm9ybSwgIlRSQU5TRk9S TSBGT1IgJXt0eXBlbmFtZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo VHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRyZkZvcm0tPnRyZnR5cGUpKTsKKwlhcHBl bmRfc3RyaW5nX29iamVjdChjcmVhdGVUcmFuc2Zvcm0sICJMQU5HVUFHRSAle2xhbmd1YWdlfUki LAorCQkJCQkJIE5hbWVTdHIobGFuZ0Zvcm0tPmxhbm5hbWUpKTsKKworCS8qIGRlcGFyc2UgdGhl IHRyYW5zZm9ybV9lbGVtZW50X2xpc3QgKi8KKwlpZiAodHJmRm9ybS0+dHJmZnJvbXNxbCAhPSBJ bnZhbGlkT2lkKQorCXsKKwkJTGlzdAkgICAqcGFyYW1zID0gTklMOworCisJCS8qCisJCSAqIFZl cmJvc2Ugc3ludGF4CisJCSAqCisJCSAqIENSRUFURSAle29yX3JlcGxhY2V9cyBUUkFOU0ZPUk0g Rk9SICV7dHlwZW5hbWV9RCBMQU5HVUFHRQorCQkgKiAle2xhbmd1YWdlfUkgKCBGUk9NIFNRTCBX SVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlfXMgKQorCQkgKi8KKworCQkvKiBHZXQgdGhlIHBnX3By b2MgdHVwbGUgZm9yIHRoZSBGUk9NIEZVTkNUSU9OICovCisJCXByb2NUdXAgPSBTZWFyY2hTeXND YWNoZTEoUFJPQ09JRCwgdHJmRm9ybS0+dHJmZnJvbXNxbCk7CisJCWlmICghSGVhcFR1cGxlSXNW YWxpZChwcm9jVHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3Ig ZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJCSB0cmZGb3JtLT50cmZmcm9tc3FsKTsKKwkJcHJv Y0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJLyoKKwkJICog Q1JFQVRFIFRSQU5TRk9STSBkb2VzIG5vdCBjaGFuZ2UgZnVuY3Rpb24gc2lnbmF0dXJlIHNvIHdl IGNhbiB1c2UKKwkJICogY2F0YWxvZyB0byBnZXQgaW5wdXQgdHlwZSBPaWRzLgorCQkgKi8KKwkJ Zm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCQl7CisJCQlPYmpUcmVl ICAgICpwYXJhbW9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKworCQkJYXBwZW5kX29iamVjdF9vYmpl Y3QocGFyYW1vYmosICIle3R5cGV9VCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShw cm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldLCAtMSkpOworCQkJcGFyYW1zID0gbGFwcGVu ZChwYXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtb2JqKSk7CisJCX0KKworCQlzaWduID0g bmV3X29ianRyZWUoIiIpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHNpZ24sICIle2lkZW50 aXR5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25h bWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisJ CWFwcGVuZF9hcnJheV9vYmplY3Qoc2lnbiwgIigle2FyZ3VtZW50czosIH1zKSIsIHBhcmFtcyk7 CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlVHJhbnNmb3JtLCAiKEZST00gU1FMIFdJ VEggRlVOQ1RJT04gJXtzaWduYXR1cmV9cyIsIHNpZ24pOworCQlSZWxlYXNlU3lzQ2FjaGUocHJv Y1R1cCk7CisJfQorCWlmICh0cmZGb3JtLT50cmZ0b3NxbCAhPSBJbnZhbGlkT2lkKQorCXsKKwkJ TGlzdAkgICAqcGFyYW1zID0gTklMOworCisJCS8qCisJCSAqIFZlcmJvc2Ugc3ludGF4CisJCSAq CisJCSAqIENSRUFURSAle29yX3JlcGxhY2V9cyBUUkFOU0ZPUk0gRk9SICV7dHlwZW5hbWV9RCBM QU5HVUFHRQorCQkgKiAle2xhbmd1YWdlfUkgKCBGUk9NIFNRTCBXSVRIIEZVTkNUSU9OICV7c2ln bmF0dXJlfXMsIFRPIFNRTCBXSVRICisJCSAqIEZVTkNUSU9OICV7c2lnbmF0dXJlX3RvZn1zICkK KwkJICoKKwkJICogT1IKKwkJICoKKwkJICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zIFRSQU5TRk9S TSBGT1IgJXt0eXBlbmFtZX1EIExBTkdVQUdFCisJCSAqICV7bGFuZ3VhZ2V9SSAoIFRPIFNRTCBX SVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlX3RvZn1zICkKKwkJICovCisKKwkJLyogQXBwZW5kIGEg JywnIGlmIHRyZmZyb21zcWwgaXMgcHJlc2VudCwgZWxzZSBhcHBlbmQgJygnICovCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVRyYW5zZm9ybSwgIiV7Y29tbWF9cyIsCisJCQkJCQkJIHRy ZkZvcm0tPnRyZmZyb21zcWwgIT0gSW52YWxpZE9pZCA/ICIsIiA6ICIoIik7CisKKwkJLyogR2V0 IHRoZSBwZ19wcm9jIHR1cGxlIGZvciB0aGUgVE8gRlVOQ1RJT04gKi8KKwkJcHJvY1R1cCA9IFNl YXJjaFN5c0NhY2hlMShQUk9DT0lELCB0cmZGb3JtLT50cmZ0b3NxbCk7CisJCWlmICghSGVhcFR1 cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVy ZSBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJCSB0cmZGb3JtLT50cmZ0b3NxbCk7CisJ CXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCS8qCisJ CSAqIENSRUFURSBUUkFOU0ZPUk0gZG9lcyBub3QgY2hhbmdlIGZ1bmN0aW9uIHNpZ25hdHVyZSBz byB3ZSBjYW4gdXNlCisJCSAqIGNhdGFsb2cgdG8gZ2V0IGlucHV0IHR5cGUgT2lkcy4KKwkJICov CisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2Jq VHJlZSAgICAqcGFyYW1vYmogPSBuZXdfb2JqdHJlZSgiIik7CisKKwkJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHBhcmFtb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5 cGUocHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXSwgLTEpKTsKKwkJCXBhcmFtcyA9IGxh cHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVjdChwYXJhbW9iaikpOworCQl9CisKKwkJc2ln biA9IG5ld19vYmp0cmVlKCIiKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChzaWduLCAiJXtp ZGVudGl0eX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHByb2NGb3JtLT5w cm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSkp OworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHNpZ24sICIoJXthcmd1bWVudHM6LCB9cykiLCBwYXJh bXMpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVRyYW5zZm9ybSwgIlRPIFNRTCBX SVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlX3RvZn1zIiwgc2lnbik7CisJCVJlbGVhc2VTeXNDYWNo ZShwcm9jVHVwKTsKKwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlVHJhbnNmb3JtLCAi JXtjbG9zZV9icmFja2V0fXMiLCAiKSIpOworCisJUmVsZWFzZVN5c0NhY2hlKGxhbmdUdXApOwor CVJlbGVhc2VTeXNDYWNoZSh0cmZUdXApOworCXJldHVybiBjcmVhdGVUcmFuc2Zvcm07Cit9CisK Ky8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5kcy4KKyAqCisgKiBUaGlz IGZ1bmN0aW9uIHNob3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0 eVNsb3cuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29s bGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNl dHJlZTsKKwlPYmpUcmVlICAgICpjb21tYW5kOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1Rf U2ltcGxlKTsKKworCXBhcnNldHJlZSA9IGNtZC0+cGFyc2V0cmVlOworCW9iamVjdElkID0gY21k LT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkOworCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uICYm IChub2RlVGFnKHBhcnNldHJlZSkgIT0gVF9DcmVhdGVFeHRlbnNpb25TdG10KSkKKwkJcmV0dXJu IE5VTEw7CisKKworCS8qIFRoaXMgc3dpdGNoIG5lZWRzIHRvIGhhbmRsZSBldmVyeXRoaW5nIHRo YXQgUHJvY2Vzc1V0aWxpdHlTbG93IGRvZXMgKi8KKwlzd2l0Y2ggKG5vZGVUYWcocGFyc2V0cmVl KSkKKwl7CisJCWNhc2UgVF9DcmVhdGVTY2hlbWFTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2Vf Q3JlYXRlU2NoZW1hU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNh c2UgVF9BbHRlckRvbWFpblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckRvbWFpblN0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJICBjbWQtPmQuc2ltcGxlLnNlY29u ZGFyeU9iamVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlU3RtdDoKKwkJCWNvbW1h bmQgPSBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsK KworCQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfUmVm cmVzaE1hdFZpZXdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX0NyZWF0ZVRyaWdTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlVHJpZ1N0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfUnVsZVN0bXQ6CisJ CQljb21tYW5kID0gZGVwYXJzZV9SdWxlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgVF9DcmVhdGVQTGFuZ1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9D cmVhdGVMYW5nU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9DcmVhdGVTZXFTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlU2VxU3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVGZHdTdG10Ogor CQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlRmR3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVVc2VyTWFwcGluZ1N0bXQ6CisJCQljb21tYW5k ID0gZGVwYXJzZV9DcmVhdGVVc2VyTWFwcGluZ1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJVc2VyTWFwcGluZ1N0bXQ6CisJCQljb21tYW5kID0g ZGVwYXJzZV9BbHRlclVzZXJNYXBwaW5nU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgVF9BbHRlclN0YXRzU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Fs dGVyU3RhdHNTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBU X0FsdGVyRmR3U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRmR3U3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlclNlcVN0bXQ6CisJCQlj b21tYW5kID0gZGVwYXJzZV9BbHRlclNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQli cmVhazsKKworCQljYXNlIFRfRGVmaW5lU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0RlZmlu ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkgY21kLT5kLnNpbXBsZS5zZWNv bmRhcnlPYmplY3QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZUNvbnZlcnNpb25TdG10 OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlQ29udmVyc2lvbihvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVEb21haW5TdG10OgorCQkJY29tbWFu ZCA9IGRlcGFyc2VfQ3JlYXRlRG9tYWluKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9D cmVhdGVFeHRlbnNpb25TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBUX0FsdGVyRXh0ZW5zaW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRXh0 ZW5zaW9uU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9B bHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRXh0 ZW5zaW9uQ29udGVudHNTdG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJCQkJCSBj bWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3Jl YXRlT3BGYW1pbHlTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlT3BGYW1pbHkob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlUG9saWN5U3Rt dDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVBvbGljeVN0bXQob2JqZWN0SWQsIHBhcnNl dHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfSW5kZXhTdG10OgorCQkJY29tbWFuZCA9IGRl cGFyc2VfSW5kZXhTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX0NyZWF0ZUZ1bmN0aW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUZ1bmN0 aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRnVu Y3Rpb25TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJGdW5jdGlvbihvYmplY3RJZCwg cGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlckNvbGxhdGlvblN0bXQ6CisJ CQljb21tYW5kID0gZGVwYXJzZV9BbHRlckNvbGxhdGlvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9SZW5hbWVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2Vf UmVuYW1lU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisJCQlicmVhazsK KworCQljYXNlIFRfQWx0ZXJPYmplY3REZXBlbmRzU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNl X0FsdGVyRGVwZW5kU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNh c2UgVF9BbHRlck9iamVjdFNjaGVtYVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlck9i amVjdFNjaGVtYVN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLAorCQkJCQkJCQkJCQkJCXBhcnNl dHJlZSwKKwkJCQkJCQkJCQkJCQljbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisJCQli cmVhazsKKworCQljYXNlIFRfQWx0ZXJPd25lclN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9B bHRlck93bmVyU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisJCQlicmVh azsKKworCQljYXNlIFRfQWx0ZXJPcGVyYXRvclN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9B bHRlck9wZXJhdG9yU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNh c2UgVF9BbHRlclBvbGljeVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlclBvbGljeVN0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJUeXBl U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyVHlwZVNldFN0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlU3RhdHNTdG10OgorCQkJY29t bWFuZCA9IGRlcGFyc2VfQ3JlYXRlU3RhdGlzdGljc1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9DcmVhdGVGb3JlaWduU2VydmVyU3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlckZvcmVpZ25TZXJ2ZXJTdG10OgorCQkJY29t bWFuZCA9IGRlcGFyc2VfQWx0ZXJGb3JlaWduU2VydmVyU3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9Db21wb3NpdGVUeXBlU3RtdDoKKwkJCWNvbW1hbmQg PSBkZXBhcnNlX0NvbXBvc2l0ZVR5cGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBUX0NyZWF0ZUVudW1TdG10OgkvKiBDUkVBVEUgVFlQRSBBUyBFTlVNICov CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVFbnVtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVSYW5nZVN0bXQ6IC8qIENSRUFURSBUWVBF IEFTIFJBTkdFICovCisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVSYW5nZVN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJFbnVtU3RtdDoKKwkJ CWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRW51bVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlQ2FzdFN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJz ZV9DcmVhdGVDYXN0U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNh c2UgVF9BbHRlclRTRGljdGlvbmFyeVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlclRT RGljdGlvbmFyeVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNl IFRfQ3JlYXRlVHJhbnNmb3JtU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVRyYW5z Zm9ybVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfVmll d1N0bXQ6CQkvKiBDUkVBVEUgVklFVyAqLworCQkJY29tbWFuZCA9IGRlcGFyc2VfVmlld1N0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlVGFibGVB c1N0bXQ6CS8qIENSRUFURSBNQVRFUklBTElaRUQgVklFVyAqLworCQkJY29tbWFuZCA9IGRlcGFy c2VfQ3JlYXRlVGFibGVBc1N0bXRfdmFuaWxsYShvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJy ZWFrOworCisJCWRlZmF1bHQ6CisJCQljb21tYW5kID0gTlVMTDsKKwkJCWVsb2coTE9HLCAidW5y ZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJCQkgKGludCkg bm9kZVRhZyhwYXJzZXRyZWUpKTsKKwl9CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAq IFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcuCisgKgorICogRGVhbCB3aXRo IGFsbCB0aGUgdGFibGUgZWxlbWVudHMgKGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzKS4KKyAqCisg KiBOb3RlIHdlIGlnbm9yZSBjb25zdHJhaW50cyBpbiB0aGUgcGFyc2Ugbm9kZSBoZXJlOyB0aGV5 IGFyZSBleHRyYWN0ZWQgZnJvbQorICogc3lzdGVtIGNhdGFsb2dzIGluc3RlYWQuCisgKi8KK3N0 YXRpYyBMaXN0ICoKK2RlcGFyc2VfVGFibGVFbGVtZW50cyhSZWxhdGlvbiByZWxhdGlvbiwgTGlz dCAqdGFibGVFbGVtZW50cywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkgIGJvb2wgdHlwZWQsIGJv b2wgY29tcG9zaXRlKQoreworCUxpc3QJICAgKmVsZW1lbnRzID0gTklMOworCUxpc3RDZWxsICAg KmxjOworCisJZm9yZWFjaChsYywgdGFibGVFbGVtZW50cykKKwl7CisJCU5vZGUJICAgKmVsdCA9 IChOb2RlICopIGxmaXJzdChsYyk7CisKKwkJc3dpdGNoIChub2RlVGFnKGVsdCkpCisJCXsKKwkJ CWNhc2UgVF9Db2x1bW5EZWY6CisJCQkJeworCQkJCQlPYmpUcmVlICAgICp0cmVlOworCisJCQkJ CXRyZWUgPSB0eXBlZCA/CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChyZWxhdGlvbiwg ZHBjb250ZXh0LAorCQkJCQkJCQkJCQkJKENvbHVtbkRlZiAqKSBlbHQpIDoKKwkJCQkJCWRlcGFy c2VfQ29sdW1uRGVmKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICBjb21wb3NpdGUs IChDb2x1bW5EZWYgKikgZWx0LAorCQkJCQkJCQkJCSAgZmFsc2UsIE5VTEwpOworCQkJCQlpZiAo dHJlZSAhPSBOVUxMKQorCQkJCQl7CisJCQkJCQlPYmpFbGVtICAgICpjb2x1bW47CisKKwkJCQkJ CWNvbHVtbiA9IG5ld19vYmplY3Rfb2JqZWN0KHRyZWUpOworCQkJCQkJZWxlbWVudHMgPSBsYXBw ZW5kKGVsZW1lbnRzLCBjb2x1bW4pOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2Fz ZSBUX0NvbnN0cmFpbnQ6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1Is ICJpbnZhbGlkIG5vZGUgdHlwZSAlZCIsIG5vZGVUYWcoZWx0KSk7CisJCX0KKwl9CisKKwlyZXR1 cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBXb3JraG9yc2UgdG8gZGVwYXJzZSBhIENvbGxlY3Rl ZENvbW1hbmQuCisgKi8KK2NoYXIgKgorZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVk Q29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSkKK3sKKwlPdmVycmlkZVNlYXJjaFBhdGgg Km92ZXJyaWRlUGF0aDsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlNZW1vcnlDb250ZXh0IHRt cGN4dDsKKwlPYmpUcmVlICAgICp0cmVlOworCWNoYXIJICAgKmNvbW1hbmQ7CisJU3RyaW5nSW5m b0RhdGEgc3RyOworCisJLyoKKwkgKiBBbGxvY2F0ZSBldmVyeXRoaW5nIGRvbmUgYnkgdGhlIGRl cGFyc2luZyByb3V0aW5lcyBpbnRvIGEgdGVtcCBjb250ZXh0LAorCSAqIHRvIGF2b2lkIGhhdmlu ZyB0byBzcHJpbmtsZSB0aGVtIHdpdGggbWVtb3J5IGhhbmRsaW5nIGNvZGUsIGJ1dAorCSAqIGFs bG9jYXRlIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBiZWZvcmUgc3dpdGNoaW5nLgorCSAqLworCWlu aXRTdHJpbmdJbmZvKCZzdHIpOworCXRtcGN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJy ZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJICAgImRlcGFyc2UgY3R4IiwKKwkJCQkJCQkJICAg QUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX0lO SVRTSVpFLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUpOworCW9sZGN4dCA9 IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjeHQpOworCisJLyoKKwkgKiBNYW55IHJvdXRpbmVz IHVuZGVybHlpbmcgdGhpcyBvbmUgd2lsbCBpbnZva2UgcnVsZXV0aWxzLmMgZnVuY3Rpb25hbGl0 eQorCSAqIHRvIG9idGFpbiBkZXBhcnNlZCB2ZXJzaW9ucyBvZiBleHByZXNzaW9ucy4gIEluIHN1 Y2ggcmVzdWx0cywgd2Ugd2FudAorCSAqIGFsbCBvYmplY3QgbmFtZXMgdG8gYmUgcXVhbGlmaWVk LCBzbyB0aGF0IHJlc3VsdHMgYXJlICJwb3J0YWJsZSIgdG8KKwkgKiBlbnZpcm9ubWVudHMgd2l0 aCBkaWZmZXJlbnQgc2VhcmNoX3BhdGggc2V0dGluZ3MuICBSYXRoZXIgdGhhbiBpbmplY3QKKwkg KiB3aGF0IHdvdWxkIGJlIHJlcGV0aXRpdmUgY2FsbHMgdG8gb3ZlcnJpZGUgc2VhcmNoIHBhdGgg YWxsIG92ZXIgdGhlCisJICogcGxhY2UsIHdlIGRvIGl0IGNlbnRyYWxseSBoZXJlLgorCSAqLwor CW92ZXJyaWRlUGF0aCA9IEdldE92ZXJyaWRlU2VhcmNoUGF0aChDdXJyZW50TWVtb3J5Q29udGV4 dCk7CisJb3ZlcnJpZGVQYXRoLT5zY2hlbWFzID0gTklMOworCW92ZXJyaWRlUGF0aC0+YWRkQ2F0 YWxvZyA9IGZhbHNlOworCW92ZXJyaWRlUGF0aC0+YWRkVGVtcCA9IHRydWU7CisJUHVzaE92ZXJy aWRlU2VhcmNoUGF0aChvdmVycmlkZVBhdGgpOworCisJdmVyYm9zZSA9IHZlcmJvc2VfbW9kZTsK KworCXN3aXRjaCAoY21kLT50eXBlKQorCXsKKwkJY2FzZSBTQ1RfU2ltcGxlOgorCQkJdHJlZSA9 IGRlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9BbHRl clRhYmxlOgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJUYWJsZVN0bXQoY21kKTsKKwkJCWJyZWFr OworCQljYXNlIFNDVF9HcmFudDoKKwkJCXRyZWUgPSBkZXBhcnNlX0dyYW50U3RtdChjbWQpOwor CQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CisJCQl0cmVlID0gZGVwYXJzZV9B bHRlck9wRmFtaWx5KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRlT3BDbGFzczoK KwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KGNtZCk7CisJCQlicmVhazsKKwkJ Y2FzZSBTQ1RfQWx0ZXJUU0NvbmZpZzoKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyVFNDb25maWd1 cmF0aW9uU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAi dW5leHBlY3RlZCBkZXBhcnNlIG5vZGUgdHlwZSAlZCIsIGNtZC0+dHlwZSk7CisJfQorCisJUG9w T3ZlcnJpZGVTZWFyY2hQYXRoKCk7CisKKwlpZiAodHJlZSkKKwl7CisJCUpzb25iCSAgICpqc29u YjsKKworCQlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIodHJlZSk7CisJCWNvbW1hbmQgPSBKc29u YlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElNQVRFRF9MRU4pOworCX0K KwllbHNlCisJCWNvbW1hbmQgPSBOVUxMOworCisJLyoKKwkgKiBDbGVhbiB1cC4gIE5vdGUgdGhh dCBzaW5jZSB3ZSBjcmVhdGVkIHRoZSBTdHJpbmdJbmZvIGluIHRoZSBjYWxsZXIncworCSAqIGNv bnRleHQsIHRoZSBvdXRwdXQgc3RyaW5nIGlzIG5vdCBkZWxldGVkIGhlcmUuCisJICovCisJTWVt b3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBjeHQp OworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9kZGxfanNvbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTY3NTE5Ci0tLSAvZGV2L251bGwKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYwpAQCAtMCwwICsxLDc2NCBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogZGRsX2pzb24uYworICoJICBKU09OIGNvZGUgcmVsYXRlZCB0byBE REwgY29tbWFuZCBkZXBhcnNpbmcKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pz b24uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIK KworI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMu aCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgorCisKKy8qCisgKiBDb252ZXJzaW9uIHNwZWNp ZmllciB3aGljaCBkZXRlcm1pbmVzIGhvdyB3ZSBleHBhbmQgdGhlIEpTT04gZWxlbWVudCBpbnRv CisgKiBzdHJpbmcuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVNwZWNUeXBlbmFtZSwKKwlTcGVj T3BlcmF0b3JuYW1lLAorCVNwZWNEb3R0ZWROYW1lLAorCVNwZWNTdHJpbmcsCisJU3BlY051bWJl ciwKKwlTcGVjU3RyaW5nTGl0ZXJhbCwKKwlTcGVjSWRlbnRpZmllciwKKwlTcGVjUm9sZQorfSBj b252U3BlY2lmaWVyOworCisvKgorICogQSB0ZXJuYXJ5IHZhbHVlIHRoYXQgcmVwcmVzZW50cyBh IGJvb2xlYW4gdHlwZSBKc29uYlZhbHVlLgorICovCit0eXBlZGVmIGVudW0KK3sKKwl0dl9hYnNl bnQsCisJdHZfdHJ1ZSwKKwl0dl9mYWxzZQorfQkJCWpzb25fdHJpdmFsdWU7CisKK3N0YXRpYyBi b29sIGV4cGFuZF9vbmVfanNvbmJfZWxlbWVudChTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0s CisJCQkJCQkJCQkgSnNvbmJWYWx1ZSAqanNvbnZhbCwgY29udlNwZWNpZmllciBzcGVjaWZpZXIs CisJCQkJCQkJCQkgY29uc3QgY2hhciAqZm10KTsKK3N0YXRpYyB2b2lkIGV4cGFuZF9qc29uYl9h cnJheShTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJCQkJICAgSnNvbmJWYWx1ZSAq anNvbmFyciwgY2hhciAqYXJyYXlzZXAsCisJCQkJCQkJICAgY29udlNwZWNpZmllciBzcGVjaWZp ZXIsIGNvbnN0IGNoYXIgKmZtdCk7CitzdGF0aWMgdm9pZCBmbXRzdHJfZXJyb3JfY2FsbGJhY2so dm9pZCAqYXJnKTsKK2NoYXIgKmRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25i KTsKKworLyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWluZXIsIGZpbmQgdGhlIEpzb25iVmFsdWUg d2l0aCB0aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisgKiBJZiBpdCdzIG9mIGEgdHlwZSBvdGhl ciB0aGFuIGpidkJvb2wsIGFuIGVycm9yIGlzIHJhaXNlZC4gSWYgaXQgZG9lc24ndAorICogZXhp c3QsIHR2X2Fic2VudCBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlIHJldHVybiB0aGUgYWN0dWFsIGpz b25fdHJpdmFsdWUuCisgKi8KK3N0YXRpYyBqc29uX3RyaXZhbHVlCitmaW5kX2Jvb2xfaW5fanNv bmJjb250YWluZXIoSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwgY2hhciAqa2V5bmFtZSkKK3sK KwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwlqc29uX3RyaXZhbHVlIHJl c3VsdDsKKworCWtleS50eXBlID0gamJ2U3RyaW5nOworCWtleS52YWwuc3RyaW5nLnZhbCA9IGtl eW5hbWU7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleW5hbWUpOworCXZhbHVlID0g ZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwKKwkJCQkJCQkJCQlKQl9GT0JK RUNULCAma2V5KTsKKwlpZiAodmFsdWUgPT0gTlVMTCkKKwkJcmV0dXJuIHR2X2Fic2VudDsKKwlp ZiAodmFsdWUtPnR5cGUgIT0gamJ2Qm9vbCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50 IFwiJXNcIiBpcyBub3Qgb2YgdHlwZSBib29sZWFuIiwKKwkJCQkJCWtleW5hbWUpKSk7CisJcmVz dWx0ID0gdmFsdWUtPnZhbC5ib29sZWFuID8gdHZfdHJ1ZSA6IHR2X2ZhbHNlOworCXBmcmVlKHZh bHVlKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBHaXZlbiBhIEpzb25iQ29udGFp bmVyLCBmaW5kIHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtleSBuYW1lIGluIGl0Lgor ICogSWYgaXQncyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZTdHJpbmcsIGFuIGVycm9yIGlzIHJh aXNlZC4gIElmIGl0IGRvZXNuJ3QKKyAqIGV4aXN0LCBhbiBlcnJvciBpcyByYWlzZWQgdW5sZXNz IG1pc3Npbmdfb2s7IG90aGVyd2lzZSByZXR1cm4gTlVMTC4KKyAqCisgKiBJZiBpdCBleGlzdHMg YW5kIGlzIGEgc3RyaW5nLCBhIGZyZXNobHkgcGFsbG9jJ2VkIGNvcHkgaXMgcmV0dXJuZWQuCisg KgorICogSWYgKmxlbmd0aCBpcyBub3QgTlVMTCwgaXQgaXMgc2V0IHRvIHRoZSBsZW5ndGggb2Yg dGhlIHN0cmluZy4KKyAqLworc3RhdGljIGNoYXIgKgorZmluZF9zdHJpbmdfaW5fanNvbmJjb250 YWluZXIoSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwgY2hhciAqa2V5bmFtZSwKKwkJCQkJCQkg IGJvb2wgbWlzc2luZ19vaywgaW50ICpsZW5ndGgpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNv bmJWYWx1ZSAqdmFsdWU7CisJY2hhcgkgICAqc3RyOworCisJLyogWFhYIHZlcmlmeSB0aGF0IHRo aXMgaXMgYW4gb2JqZWN0LCBub3QgYW4gYXJyYXkgKi8KKworCWtleS50eXBlID0gamJ2U3RyaW5n OworCWtleS52YWwuc3RyaW5nLnZhbCA9IGtleW5hbWU7CisJa2V5LnZhbC5zdHJpbmcubGVuID0g c3RybGVuKGtleW5hbWUpOworCXZhbHVlID0gZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNv bnRhaW5lciwKKwkJCQkJCQkJCQlKQl9GT0JKRUNULCAma2V5KTsKKwlpZiAodmFsdWUgPT0gTlVM TCkKKwl7CisJCWlmIChtaXNzaW5nX29rKQorCQkJcmV0dXJuIE5VTEw7CisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ IGVycm1zZygibWlzc2luZyBlbGVtZW50IFwiJXNcIiBpbiBKU09OIG9iamVjdCIsIGtleW5hbWUp KSk7CisJfQorCisJc3RyID0gcG5zdHJkdXAodmFsdWUtPnZhbC5zdHJpbmcudmFsLCB2YWx1ZS0+ dmFsLnN0cmluZy5sZW4pOworCWlmIChsZW5ndGgpCisJCSpsZW5ndGggPSB2YWx1ZS0+dmFsLnN0 cmluZy5sZW47CisJcGZyZWUodmFsdWUpOworCXJldHVybiBzdHI7Cit9CisKKyNkZWZpbmUgQURW QU5DRV9QQVJTRV9QT0lOVEVSKHB0cixlbmRfcHRyKSBcCisJZG8geyBcCisJCWlmICgrKyhwdHIp ID49IChlbmRfcHRyKSkgXAorCQkJZXJlcG9ydChFUlJPUiwgXAorCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwgXAorCQkJCQkgZXJybXNnKCJ1bnRlcm1pbmF0 ZWQgZm9ybWF0IHNwZWNpZmllciIpKSk7IFwKKwl9IHdoaWxlICgwKQorCisvKgorICogUmVjdXJz aXZlIGhlbHBlciBmb3IgcGdfZXZlbnRfdHJpZ2dlcl9leHBhbmRfY29tbWFuZAorICoKKyAqIEZp bmQgdGhlICJmbXQiIGVsZW1lbnQgaW4gdGhlIGdpdmVuIGNvbnRhaW5lciwgYW5kIGV4cGFuZCBp dCBpbnRvIHRoZQorICogcHJvdmlkZWQgU3RyaW5nSW5mby4KKyAqLworc3RhdGljIHZvaWQKK2V4 cGFuZF9mbXRfcmVjdXJzaXZlKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIFN0cmluZ0luZm8g YnVmKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNvbnN0IGNo YXIgKmNwOworCWNvbnN0IGNoYXIgKnN0YXJ0X3B0cjsKKwljb25zdCBjaGFyICplbmRfcHRyOwor CWludAkJCWxlbjsKKworCXN0YXJ0X3B0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVy KGNvbnRhaW5lciwgImZtdCIsIGZhbHNlLCAmbGVuKTsKKwllbmRfcHRyID0gc3RhcnRfcHRyICsg bGVuOworCisJZm9yIChjcCA9IHN0YXJ0X3B0cjsgY3AgPCBlbmRfcHRyOyBjcCsrKQorCXsKKwkJ Y29udlNwZWNpZmllciBzcGVjaWZpZXI7CisJCWJvb2wJCWlzX2FycmF5ID0gZmFsc2U7CisJCWNo YXIJICAgKnBhcmFtID0gTlVMTDsKKwkJY2hhcgkgICAqYXJyYXlzZXAgPSBOVUxMOworCisJCWlm ICgqY3AgIT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZiwgKmNw KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKworCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVu ZF9wdHIpOworCisJCS8qIEVhc3kgY2FzZTogJSUgb3V0cHV0cyBhIHNpbmdsZSAlICovCisJCWlm ICgqY3AgPT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZiwgKmNw KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogU2NhbiB0aGUgbWFuZGF0b3J5IGVs ZW1lbnQgbmFtZS4gIEFsbG93IGZvciBhbiBhcnJheSBzZXBhcmF0b3IKKwkJICogKHdoaWNoIG1h eSBiZSB0aGUgZW1wdHkgc3RyaW5nKSB0byBiZSBzcGVjaWZpZWQgYWZ0ZXIgYSBjb2xvbi4KKwkJ ICovCisJCWlmICgqY3AgPT0gJ3snKQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBwYXJidWY7CisJ CQlTdHJpbmdJbmZvRGF0YSBhcnJheXNlcGJ1ZjsKKwkJCVN0cmluZ0luZm8JYXBwZW5kVG87CisK KwkJCWluaXRTdHJpbmdJbmZvKCZwYXJidWYpOworCQkJYXBwZW5kVG8gPSAmcGFyYnVmOworCisJ CQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJZm9yICg7IGNwIDwgZW5k X3B0cjspCisJCQl7CisJCQkJaWYgKCpjcCA9PSAnOicpCisJCQkJeworCQkJCQkvKgorCQkJCQkg KiBGb3VuZCBhcnJheSBzZXBhcmF0b3IgZGVsaW1pdGVyOyBlbGVtZW50IG5hbWUgaXMgbm93CisJ CQkJCSAqIGNvbXBsZXRlLCBzdGFydCBmaWxsaW5nIHRoZSBzZXBhcmF0b3IuCisJCQkJCSAqLwor CQkJCQlpbml0U3RyaW5nSW5mbygmYXJyYXlzZXBidWYpOworCQkJCQlhcHBlbmRUbyA9ICZhcnJh eXNlcGJ1ZjsKKwkJCQkJaXNfYXJyYXkgPSB0cnVlOworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5U RVIoY3AsIGVuZF9wdHIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlpZiAoKmNwID09 ICd9JykKKwkJCQl7CisJCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJ CQkJCWJyZWFrOworCQkJCX0KKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGFwcGVuZFRv LCAqY3ApOworCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQl9CisJ CQlwYXJhbSA9IHBhcmJ1Zi5kYXRhOworCQkJaWYgKGlzX2FycmF5KQorCQkJCWFycmF5c2VwID0g YXJyYXlzZXBidWYuZGF0YTsKKwkJfQorCQlpZiAocGFyYW0gPT0gTlVMTCkKKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAor CQkJCQkgZXJybXNnKCJtaXNzaW5nIGNvbnZlcnNpb24gbmFtZSBpbiBjb252ZXJzaW9uIHNwZWNp ZmllciIpKSk7CisKKwkJc3dpdGNoICgqY3ApCisJCXsKKwkJCWNhc2UgJ0knOgorCQkJCXNwZWNp ZmllciA9IFNwZWNJZGVudGlmaWVyOworCQkJCWJyZWFrOworCQkJY2FzZSAnRCc6CisJCQkJc3Bl Y2lmaWVyID0gU3BlY0RvdHRlZE5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdzJzoKKwkJCQlz cGVjaWZpZXIgPSBTcGVjU3RyaW5nOworCQkJCWJyZWFrOworCQkJY2FzZSAnTCc6CisJCQkJc3Bl Y2lmaWVyID0gU3BlY1N0cmluZ0xpdGVyYWw7CisJCQkJYnJlYWs7CisJCQljYXNlICdUJzoKKwkJ CQlzcGVjaWZpZXIgPSBTcGVjVHlwZW5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdPJzoKKwkJ CQlzcGVjaWZpZXIgPSBTcGVjT3BlcmF0b3JuYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAnbic6 CisJCQkJc3BlY2lmaWVyID0gU3BlY051bWJlcjsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1InOgor CQkJCXNwZWNpZmllciA9IFNwZWNSb2xlOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJCQkgZXJybXNnKCJpbnZhbGlkIGNvbnZlcnNpb24gc3BlY2lmaWVyIFwiJWNc IiIsICpjcCkpKTsKKwkJfQorCisJCS8qCisJCSAqIE9idGFpbiB0aGUgZWxlbWVudCB0byBiZSBl eHBhbmRlZC4KKwkJICovCisJCWtleS50eXBlID0gamJ2U3RyaW5nOworCQlrZXkudmFsLnN0cmlu Zy52YWwgPSBwYXJhbTsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKHBhcmFtKTsKKwor CQl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsIEpCX0ZPQkpF Q1QsICZrZXkpOworCisJCS8qCisJCSAqIEV4cGFuZCB0aGUgZGF0YSAocG9zc2libHkgYW4gYXJy YXkpIGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvLgorCQkgKi8KKwkJaWYgKGlzX2FycmF5KQor CQkJZXhwYW5kX2pzb25iX2FycmF5KGJ1ZiwgcGFyYW0sIHZhbHVlLCBhcnJheXNlcCwgc3BlY2lm aWVyLCBzdGFydF9wdHIpOworCQllbHNlCisJCQlleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoYnVm LCBwYXJhbSwgdmFsdWUsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwl9Cit9CisKKy8qCisgKiBF eHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgcXVvdGVkIGlkZW50aWZpZXIuICBUaGUgdmFsdWUgbXVz dCBiZSBvZiB0eXBlIHN0cmluZy4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX2lk ZW50aWZpZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkg ICAqc3RyOworCisJQXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2U3RyaW5nKTsKKworCXN0ciA9 IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52YWwuc3RyaW5nLmxl bik7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7 CisJcGZyZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBkb3Qt c2VwYXJhdGVkLW5hbWUuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlCisgKiBvYmplY3QgYW5k IG1heSBjb250YWluIGVsZW1lbnRzICJzY2hlbWFuYW1lIiAob3B0aW9uYWwpLCAib2JqbmFtZSIK KyAqIChtYW5kYXRvcnkpLCAiYXR0cm5hbWUiIChvcHRpb25hbCkuICBEb3VibGUgcXVvdGVzIGFy ZSBhZGRlZCB0byBlYWNoIGVsZW1lbnQKKyAqIGFzIG5lY2Vzc2FyeSwgYW5kIGRvdCBzZXBhcmF0 b3JzIHdoZXJlIG5lZWRlZC4KKyAqCisgKiBPbmUgZGF5IHdlIG1pZ2h0IG5lZWQgYSAiY2F0YWxv ZyIgZWxlbWVudCBhcyB3ZWxsLCBidXQgbm8gY3VycmVudCB1c2UgY2FzZQorICogbmVlZHMgdGhh dC4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX2RvdHRlZG5hbWUoU3RyaW5nSW5m byBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJc3RyID0g ZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAor CQkJCQkJCQkJCSJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJaWYgKHN0cikKKwl7CisJCWFw cGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZy ZWUoc3RyKTsKKwl9CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29u dmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJIm9iam5hbWUiLCBmYWxzZSwgTlVMTCk7 CisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJ cGZyZWUoc3RyKTsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252 YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkiYXR0cm5hbWUiLCB0cnVlLCBOVUxMKTsK KwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIuJXMiLCBxdW90ZV9pZGVu dGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0KK30KKworLyoKKyAqIEV4cGFuZCBhIEpT T04gdmFsdWUgYXMgYSB0eXBlIG5hbWUuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZh bF90eXBlbmFtZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFy CSAgICpzY2hlbWEgPSBOVUxMOworCWNoYXIJICAgKnR5cGVuYW1lOworCWNoYXIJICAgKnR5cG1v ZHN0cjsKKwlqc29uX3RyaXZhbHVlIGlzX2FycmF5OworCWNoYXIJICAgKmFycmF5X2RlY29yOwor CisJLyoKKwkgKiBXZSBvbWl0IHNjaGVtYS1xdWFsaWZ5aW5nIHRoZSBvdXRwdXQgbmFtZSBpZiB0 aGUgc2NoZW1hIGVsZW1lbnQgaXMKKwkgKiBlaXRoZXIgdGhlIGVtcHR5IHN0cmluZyBvciBOVUxM OyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRob3NlIHR3byBjYXNlcworCSAqIGlzIHRoYXQgaW4g dGhlIGxhdHRlciB3ZSBxdW90ZSB0aGUgdHlwZSBuYW1lLCBpbiB0aGUgZm9ybWVyIHdlIGRvbid0 LgorCSAqIFRoaXMgYWxsb3dzIGZvciB0eXBlcyB3aXRoIHNwZWNpYWwgdHlwbW9kIG5lZWRzLCBz dWNoIGFzIGludGVydmFsIGFuZAorCSAqIHRpbWVzdGFtcCAoc2VlIGZvcm1hdF90eXBlX2RldGFp bGVkKSwgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSBhbGxvd2luZworCSAqIGZvciB0aGUgc2NoZW1h IG5hbWUgdG8gYmUgb21pdHRlZCBmcm9tIHR5cGUgbmFtZXMgdGhhdCByZXF1aXJlIHF1b3Rlcwor CSAqIGJ1dCBhcmUgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHVzZXIgc2NoZW1hLgorCSAqLworCisJ c2NoZW1hID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFy eS5kYXRhLAorCQkJCQkJCQkJCSAgICJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJdHlwZW5h bWUgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRh dGEsCisJCQkJCQkJCQkJCSAidHlwZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJdHlwbW9kc3RyID0g ZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAor CQkJCQkJCQkJCQkgICJ0eXBtb2QiLCB0cnVlLCBOVUxMKTsKKwlpc19hcnJheSA9IGZpbmRfYm9v bF9pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJ ICAgInR5cGFycmF5Iik7CisJc3dpdGNoIChpc19hcnJheSkKKwl7CisJCWNhc2UgdHZfdHJ1ZToK KwkJCWFycmF5X2RlY29yID0gIltdIjsKKwkJCWJyZWFrOworCisJCWNhc2UgdHZfZmFsc2U6CisJ CQlhcnJheV9kZWNvciA9ICIiOworCQkJYnJlYWs7CisKKwkJY2FzZSB0dl9hYnNlbnQ6CisJCWRl ZmF1bHQ6CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygibWlzc2luZyB0eXBhcnJheSBlbGVtZW50 IikpKTsKKwl9CisKKwlpZiAoc2NoZW1hID09IE5VTEwpCisJCWFwcGVuZFN0cmluZ0luZm8oYnVm LCAiJXMiLCBxdW90ZV9pZGVudGlmaWVyKHR5cGVuYW1lKSk7CisJZWxzZSBpZiAoc2NoZW1hWzBd ID09ICdcMCcpCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCB0eXBlbmFtZSk7CS8qIFNw ZWNpYWwgdHlwbW9kIG5lZWRzICovCisJZWxzZQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVz LiVzIiwgcXVvdGVfaWRlbnRpZmllcihzY2hlbWEpLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIo dHlwZW5hbWUpKTsKKworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyIsIHR5cG1vZHN0ciA/ IHR5cG1vZHN0ciA6ICIiLCBhcnJheV9kZWNvcik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09O IHZhbHVlIGFzIGFuIG9wZXJhdG9yIG5hbWUKKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29u dmFsX29wZXJhdG9yKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNo YXIJICAgKnN0cjsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252 YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwp OworCS8qIFNjaGVtYSBtaWdodCBiZSBOVUxMIG9yIGVtcHR5ICovCisJaWYgKHN0ciAhPSBOVUxM ICYmIHN0clswXSAhPSAnXDAnKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4iLCBx dW90ZV9pZGVudGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0KKworCXN0ciA9IGZpbmRf c3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJ CQkJCQkib2JqbmFtZSIsIGZhbHNlLCBOVUxMKTsKKworCWlmIChzdHIpCisJeworCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1Ziwgc3RyKTsKKwkJcGZyZWUoc3RyKTsKKwl9Cit9CisKKy8qCisg KiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGEgc3RyaW5nLiAgVGhlIHZhbHVlIG11c3QgYmUgb2Yg dHlwZSBzdHJpbmcgb3Igb2YKKyAqIHR5cGUgb2JqZWN0LiAgSW4gdGhlIGxhdHRlciBjYXNlLCBp dCBtdXN0IGNvbnRhaW4gYSAiZm10IiBlbGVtZW50IHdoaWNoIHdpbGwKKyAqIGJlIHJlY3Vyc2l2 ZWx5IGV4cGFuZGVkOyBhbHNvLCBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zIGFuIGVsZW1lbnQgInBy ZXNlbnQiCisgKiBhbmQgaXQgaXMgc2V0IHRvIGZhbHNlLCB0aGUgZXhwYW5zaW9uIGlzIHRoZSBl bXB0eSBzdHJpbmcuCisgKgorICogUmV0dXJucyBmYWxzZSBpZiBubyBhY3R1YWwgZXhwYW5zaW9u IHdhcyBtYWRlIGR1ZSB0byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJlaW5nIHNldCB0byAiZmFs c2UiLgorICovCitzdGF0aWMgYm9vbAorZXhwYW5kX2pzb252YWxfc3RyaW5nKFN0cmluZ0luZm8g YnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWlmIChqc29udmFsLT50eXBlID09IGpidlN0 cmluZykKKwl7CisJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oYnVmLCBqc29udmFsLT52YWwuc3Ry aW5nLnZhbCwKKwkJCQkJCQkgICBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7CisJfQorCWVsc2Ug aWYgKGpzb252YWwtPnR5cGUgPT0gamJ2QmluYXJ5KQorCXsKKwkJanNvbl90cml2YWx1ZSBwcmVz ZW50OworCisJCXByZXNlbnQgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+ dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgICJwcmVzZW50Iik7CisKKwkJLyoKKwkJICog SWYgInByZXNlbnQiIGlzIHNldCB0byBmYWxzZSwgdGhpcyBlbGVtZW50IGV4cGFuZHMgdG8gZW1w dHk7CisJCSAqIG90aGVyd2lzZSAoZWl0aGVyIHRydWUgb3IgYWJzZW50KSwgZmFsbCB0aHJvdWdo IHRvIGV4cGFuZCAiZm10Ii4KKwkJICovCisJCWlmIChwcmVzZW50ID09IHR2X2ZhbHNlKQorCQkJ cmV0dXJuIGZhbHNlOworCisJCWV4cGFuZF9mbXRfcmVjdXJzaXZlKGpzb252YWwtPnZhbC5iaW5h cnkuZGF0YSwgYnVmKTsKKwl9CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1 ZTsKK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMgYSBzdHJpbmcgbGl0ZXJhbC4K KyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3N0cmxpdChTdHJpbmdJbmZvIGJ1Ziwg SnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisJU3RyaW5nSW5mb0RhdGEg ZHFkZWxpbTsKKwlzdGF0aWMgY29uc3QgY2hhciBkcXN1ZmZpeGVzW10gPSAiX1hZWlpZWF8iOwor CWludAkJCWRxbmV4dGNoYXIgPSAwOworCisJc3RyID0gcG5zdHJkdXAoanNvbnZhbC0+dmFsLnN0 cmluZy52YWwsIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKworCS8qIEVhc3kgY2FzZTogaWYg dGhlcmUgYXJlIG5vICcgYW5kIG5vIFwsIGp1c3QgdXNlIGEgc2luZ2xlIHF1b3RlICovCisJaWYg KHN0cmNocihzdHIsICdcJycpID09IE5VTEwgJiYKKwkJc3RyY2hyKHN0ciwgJ1xcJykgPT0gTlVM TCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJyVzJyIsIHN0cik7CisJCXBmcmVlKHN0 cik7CisJCXJldHVybjsKKwl9CisKKwkvKiBPdGhlcndpc2UgbmVlZCB0byBmaW5kIGEgdXNlZnVs IGRvbGxhci1xdW90ZSBkZWxpbWl0ZXIgKi8KKwlpbml0U3RyaW5nSW5mbygmZHFkZWxpbSk7CisJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZHFkZWxpbSwgIiQiKTsKKwl3aGlsZSAoc3Ryc3RyKHN0 ciwgZHFkZWxpbS5kYXRhKSAhPSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRx ZGVsaW0sIGRxc3VmZml4ZXNbZHFuZXh0Y2hhcisrXSk7CisJCWRxbmV4dGNoYXIgPSBkcW5leHRj aGFyICUgKHNpemVvZihkcXN1ZmZpeGVzKSAtIDEpOworCX0KKwkvKiBBZGQgdHJhaWxpbmcgJCAq LworCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkcWRlbGltLCAnJCcpOworCisJLyogQW5kIGZpbmFs bHkgcHJvZHVjZSB0aGUgcXVvdGVkIGxpdGVyYWwgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8g Ki8KKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJXMlcyIsIGRxZGVsaW0uZGF0YSwgc3RyLCBk cWRlbGltLmRhdGEpOworCXBmcmVlKGRxZGVsaW0uZGF0YSk7CisJcGZyZWUoc3RyKTsKK30KKwor LyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMgYW4gaW50ZWdlciBxdWFudGl0eS4KKyAqLwor c3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX251bWJlcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJW YWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHJkYXR1bTsKKworCXN0cmRhdHVtID0gRGF0 dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19vdXQsCisJCQkJCQkJCQkJ CQkgICBOdW1lcmljR2V0RGF0dW0oanNvbnZhbC0+dmFsLm51bWVyaWMpKSk7CisJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsIHN0cmRhdHVtKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04g dmFsdWUgYXMgYSByb2xlIG5hbWUuICBJZiB0aGUgaXNfcHVibGljIGVsZW1lbnQgaXMgc2V0IHRv CisgKiB0cnVlLCBQVUJMSUMgaXMgZXhwYW5kZWQgKG5vIHF1b3Rlcyk7IG90aGVyd2lzZSwgZXhw YW5kIHRoZSBnaXZlbiByb2xlIG5hbWUsCisgKiBxdW90aW5nIGFzIGFuIGlkZW50aWZpZXIuCisg Ki8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9yb2xlKFN0cmluZ0luZm8gYnVmLCBKc29u YlZhbHVlICpqc29udmFsKQoreworCWpzb25fdHJpdmFsdWUgaXNfcHVibGljOworCisJaXNfcHVi bGljID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0 YSwKKwkJCQkJCQkJCQkJImlzX3B1YmxpYyIpOworCWlmIChpc19wdWJsaWMgPT0gdHZfdHJ1ZSkK KwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJQVUJMSUMiKTsKKwllbHNlCisJeworCQlj aGFyCSAgICpyb2xlbmFtZTsKKworCQlyb2xlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29u dGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJCSAicm9sZW5hbWUi LCBmYWxzZSwgTlVMTCk7CisJCWlmIChyb2xlbmFtZSkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZpZXIocm9sZW5hbWUpKTsKKwkJCXBmcmVlKHJvbGVu YW1lKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEV4cGFuZCBvbmUgSlNPTiBlbGVtZW50IGludG8g dGhlIG91dHB1dCBTdHJpbmdJbmZvIGFjY29yZGluZyB0byB0aGUKKyAqIGNvbnZlcnNpb24gc3Bl Y2lmaWVyLiAgVGhlIGVsZW1lbnQgdHlwZSBpcyB2YWxpZGF0ZWQsIGFuZCBhbiBlcnJvciBpcyBy YWlzZWQKKyAqIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggd2hhdCB3ZSBleHBlY3QgZm9yIHRoZSBjb252 ZXJzaW9uIHNwZWNpZmllci4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIGFjdHVhbCBleHBh bnNpb24gd2FzIG1hZGUgKGR1ZSB0byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJlaW5nIHNldCB0 byAiZmFsc2UiIGluIGZvcm1hdHRlZCBzdHJpbmcgZXhwYW5zaW9uKS4KKyAqLworc3RhdGljIGJv b2wKK2V4cGFuZF9vbmVfanNvbmJfZWxlbWVudChTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0s IEpzb25iVmFsdWUgKmpzb252YWwsCisJCQkJCQkgY29udlNwZWNpZmllciBzcGVjaWZpZXIsIGNv bnN0IGNoYXIgKmZtdCkKK3sKKwlib29sCQlyZXN1bHQgPSB0cnVlOworCUVycm9yQ29udGV4dENh bGxiYWNrIHNxbGVycmNvbnRleHQ7CisKKwkvKiBJZiB3ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0IHN0 cmluZywgc2V0dXAgYW4gZXJlcG9ydCgpIGNvbnRleHQgY2FsbGJhY2sgKi8KKwlpZiAoZm10KQor CXsKKwkJc3FsZXJyY29udGV4dC5jYWxsYmFjayA9IGZtdHN0cl9lcnJvcl9jYWxsYmFjazsKKwkJ c3FsZXJyY29udGV4dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJCXNxbGVycmNvbnRleHQucHJldmlv dXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNxbGVy cmNvbnRleHQ7CisJfQorCisJaWYgKCFqc29udmFsKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVs ZW1lbnQgXCIlc1wiIG5vdCBmb3VuZCIsIHBhcmFtKSkpOworCisJc3dpdGNoIChzcGVjaWZpZXIp CisJeworCQljYXNlIFNwZWNJZGVudGlmaWVyOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2 U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5n IGZvciAlJUkgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFs LT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfaWRlbnRpZmllcihidWYsIGpzb252YWwpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjRG90dGVkTmFtZToKKwkJCWlmIChqc29udmFsLT50eXBl ICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09O IG9iamVjdCBmb3IgJSVEIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwg anNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX2RvdHRlZG5hbWUoYnVmLCBqc29u dmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1N0cmluZzoKKwkJCWlmIChqc29udmFsLT50 eXBlICE9IGpidlN0cmluZyAmJgorCQkJCWpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIG9yIG9iamVjdCBm b3IgJSVzIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+ dHlwZSkpKTsKKwkJCXJlc3VsdCA9IGV4cGFuZF9qc29udmFsX3N0cmluZyhidWYsIGpzb252YWwp OworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nTGl0ZXJhbDoKKwkJCWlmIChqc29udmFs LT50eXBlICE9IGpidlN0cmluZykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3Rl ZCBKU09OIHN0cmluZyBmb3IgJSVMIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlw YXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3N0cmxpdChidWYsIGpz b252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjVHlwZW5hbWU6CisJCQlpZiAoanNvbnZh bC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0 ZWQgSlNPTiBvYmplY3QgZm9yICUlVCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJ cGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF90eXBlbmFtZShidWYs IGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjT3BlcmF0b3JuYW1lOgorCQkJaWYg KGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2co ImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJU8gZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJ CQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfb3BlcmF0 b3IoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY051bWJlcjoKKwkJCWlm IChqc29udmFsLT50eXBlICE9IGpidk51bWVyaWMpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1z ZygiZXhwZWN0ZWQgSlNPTiBudW1lcmljIGZvciAlJW4gZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIs CisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfbnVt YmVyKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNSb2xlOgorCQkJaWYg KGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2co ImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJVIgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJ CQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfcm9sZShi dWYsIGpzb252YWwpOworCQkJYnJlYWs7CisJfQorCisJaWYgKGZtdCkKKwkJZXJyb3JfY29udGV4 dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7CisKKwlyZXR1cm4gcmVzdWx0OworfQor CisvKgorICogSXRlcmF0ZSBvbiB0aGUgZWxlbWVudHMgb2YgYSBKU09OIGFycmF5LCBleHBhbmRp bmcgZWFjaCBvbmUgaW50byB0aGUgb3V0cHV0CisgKiBTdHJpbmdJbmZvIHBlciB0aGUgZ2l2ZW4g Y29udmVyc2lvbiBzcGVjaWZpZXIsIHNlcGFyYXRlZCBieSB0aGUgZ2l2ZW4KKyAqIHNlcGFyYXRv ci4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29uYl9hcnJheShTdHJpbmdJbmZvIGJ1Ziwg Y2hhciAqcGFyYW0sCisJCQkJICAgSnNvbmJWYWx1ZSAqanNvbmFyciwgY2hhciAqYXJyYXlzZXAs IGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlF cnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJjb250ZXh0OworCUpzb25iQ29udGFpbmVyICpjb250 YWluZXI7CisJSnNvbmJJdGVyYXRvciAqaXQ7CisJSnNvbmJWYWx1ZQl2OworCWludAkJCXR5cGU7 CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCVN0cmluZ0luZm9EYXRhIGFycmF5ZWxlbTsKKworCS8q IElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkgY29u dGV4dCBjYWxsYmFjayAqLworCWlmIChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNhbGxiYWNr ID0gZm10c3RyX2Vycm9yX2NhbGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2b2lkICop IGZtdDsKKwkJc3FsZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJ CWVycm9yX2NvbnRleHRfc3RhY2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAoanNvbmFy ci0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVz XCIgaXMgbm90IGEgSlNPTiBhcnJheSIsIHBhcmFtKSkpOworCisJY29udGFpbmVyID0ganNvbmFy ci0+dmFsLmJpbmFyeS5kYXRhOworCWlmICghSnNvbkNvbnRhaW5lcklzQXJyYXkoY29udGFpbmVy KSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3QgYSBKU09OIGFy cmF5IiwgcGFyYW0pKSk7CisKKwlpbml0U3RyaW5nSW5mbygmYXJyYXllbGVtKTsKKworCWl0ID0g SnNvbmJJdGVyYXRvckluaXQoY29udGFpbmVyKTsKKwl3aGlsZSAoKHR5cGUgPSBKc29uYkl0ZXJh dG9yTmV4dCgmaXQsICZ2LCB0cnVlKSkgIT0gV0pCX0RPTkUpCisJeworCQlpZiAodHlwZSA9PSBX SkJfRUxFTSkKKwkJeworCQkJcmVzZXRTdHJpbmdJbmZvKCZhcnJheWVsZW0pOworCisJCQlpZiAo ZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KCZhcnJheWVsZW0sIHBhcmFtLCAmdiwgc3BlY2lmaWVy LCBOVUxMKSkKKwkJCXsKKwkJCQlpZiAoIWZpcnN0KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKGJ1ZiwgYXJyYXlzZXApOworCisJCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsIGFy cmF5ZWxlbS5kYXRhLCBhcnJheWVsZW0ubGVuKTsKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJfQor CQl9CisJfQorCisJaWYgKGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNvbnRl eHQucHJldmlvdXM7Cit9CisKKy8qCisgKiBXb3JraG9yc2UgZm9yIGRkbF9kZXBhcnNlX2V4cGFu ZF9jb21tYW5kLgorICovCitjaGFyICoKK2RkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNoYXIg Kmpzb25fc3RyKQoreworCURhdHVtCQlkOworCUpzb25iCSAgICpqc29uYjsKKwlTdHJpbmdJbmZv CWJ1ZiA9IChTdHJpbmdJbmZvKSBwYWxsb2MwKHNpemVvZihTdHJpbmdJbmZvRGF0YSkpOworCisJ aW5pdFN0cmluZ0luZm8oYnVmKTsKKworCWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKGpzb25iX2lu LCBQb2ludGVyR2V0RGF0dW0oanNvbl9zdHIpKTsKKwlqc29uYiA9IChKc29uYiAqKSBEYXR1bUdl dFBvaW50ZXIoZCk7CisKKwlleHBhbmRfZm10X3JlY3Vyc2l2ZSgmanNvbmItPnJvb3QsIGJ1Zik7 CisKKwlyZXR1cm4gYnVmLT5kYXRhOworfQorCisvKi0tLS0tLQorICogUmV0dXJucyBhIGZvcm1h dHRlZCBzdHJpbmcgZnJvbSBhIEpTT04gb2JqZWN0LgorICoKKyAqIFRoZSBzdGFydGluZyBwb2lu dCBpcyB0aGUgZWxlbWVudCBuYW1lZCAiZm10IiAod2hpY2ggbXVzdCBiZSBhIHN0cmluZykuCisg KiBUaGlzIGZvcm1hdCBzdHJpbmcgbWF5IGNvbnRhaW4gemVybyBvciBtb3JlICUtZXNjYXBlcywg d2hpY2ggY29uc2lzdCBvZiBhbgorICogZWxlbWVudCBuYW1lIGVuY2xvc2VkIGluIHsgfSwgcG9z c2libHkgZm9sbG93ZWQgYnkgYSBjb252ZXJzaW9uIG1vZGlmaWVyLAorICogZm9sbG93ZWQgYnkg YSBjb252ZXJzaW9uIHNwZWNpZmllci4gIFBvc3NpYmxlIGNvbnZlcnNpb24gc3BlY2lmaWVycyBh cmU6CisgKgorICogJQkJZXhwYW5kIHRvIGEgbGl0ZXJhbCAlLgorICogSQkJZXhwYW5kIGFzIGEg c2luZ2xlLCBub24tcXVhbGlmaWVkIGlkZW50aWZpZXIKKyAqIEQJCWV4cGFuZCBhcyBhIHBvc3Np Ymx5LXF1YWxpZmllZCBpZGVudGlmaWVyCisgKiBUCQlleHBhbmQgYXMgYSB0eXBlIG5hbWUKKyAq IE8JCWV4cGFuZCBhcyBhbiBvcGVyYXRvciBuYW1lCisgKiBMCQlleHBhbmQgYXMgYSBzdHJpbmcg bGl0ZXJhbCAocXVvdGUgdXNpbmcgc2luZ2xlIHF1b3RlcykKKyAqIHMJCWV4cGFuZCBhcyBhIHNp bXBsZSBzdHJpbmcgKG5vIHF1b3RpbmcpCisgKiBuCQlleHBhbmQgYXMgYSBzaW1wbGUgbnVtYmVy IChubyBxdW90aW5nKQorICogUgkJZXhwYW5kIGFzIGEgcm9sZSBuYW1lIChwb3NzaWJseSBxdW90 ZWQgbmFtZSwgb3IgUFVCTElDKQorICoKKyAqIFRoZSBlbGVtZW50IG5hbWUgbWF5IGhhdmUgYW4g b3B0aW9uYWwgc2VwYXJhdG9yIHNwZWNpZmljYXRpb24gcHJlY2VkZWQKKyAqIGJ5IGEgY29sb24u ICBJdHMgcHJlc2VuY2UgaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgaXMgZXhwZWN0ZWQgdG8g YmUKKyAqIGFuIGFycmF5OyB0aGUgc3BlY2lmaWVkIHNlcGFyYXRvciBpcyB1c2VkIHRvIGpvaW4g dGhlIGFycmF5IGVsZW1lbnRzLgorICotLS0tLS0KKyAqLworRGF0dW0KK2RkbF9kZXBhcnNlX2V4 cGFuZF9jb21tYW5kKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJdGV4dAkgICAqanNvbiA9IFBHX0dF VEFSR19URVhUX1AoMCk7CisJY2hhcgkgICAqanNvbl9zdHI7CisKKwlqc29uX3N0ciA9IHRleHRf dG9fY3N0cmluZyhqc29uKTsKKworCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KGRk bF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGpzb25fc3RyKSkpOworfQorCisvKgorICogRXJyb3Ig Y29udGV4dCBjYWxsYmFjayBmb3IgSlNPTiBmb3JtYXQgc3RyaW5nIGV4cGFuc2lvbi4KKyAqCisg KiBYWFg6IGluZGljYXRlIHdoaWNoIGVsZW1lbnQgd2UncmUgZXhwYW5kaW5nLCBpZiBhcHBsaWNh YmxlLgorICovCitzdGF0aWMgdm9pZAorZm10c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZykK K3sKKwllcnJjb250ZXh0KCJ3aGlsZSBleHBhbmRpbmcgZm9ybWF0IHN0cmluZyBcIiVzXCIiLCAo Y2hhciAqKSBhcmcpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24u YnVpbGQgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZAppbmRleCA5YjM1MGQwLi5j MWUxYTJjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZAorKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZApAQCAtMTUsNiArMTUsOCBAQCBiYWNr ZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdjb3B5dG8uYycsCiAgICdjcmVhdGVhcy5jJywKICAg J2RiY29tbWFuZHMuYycsCisgICdkZGxfZGVwYXJzZS5jJywKKyAgJ2RkbF9qc29uLmMnLAogICAn ZGVmaW5lLmMnLAogICAnZGlzY2FyZC5jJywKICAgJ2Ryb3BjbWRzLmMnLApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Nl cXVlbmNlLmMKaW5kZXggOTljOWY5MS4uNDIwNWRkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvc2VxdWVuY2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5j CkBAIC0xNzA4LDYgKzE3MDgsMzkgQEAgcHJvY2Vzc19vd25lZF9ieShSZWxhdGlvbiBzZXFyZWws IExpc3QgKm93bmVkX2J5LCBib29sIGZvcl9pZGVudGl0eSkKIAkJcmVsYXRpb25fY2xvc2UodGFi bGVyZWwsIE5vTG9jayk7CiB9CiAKKy8qCisgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycywg ZGV0YWlsZWQKKyAqLworRm9ybV9wZ19zZXF1ZW5jZV9kYXRhCitnZXRfc2VxdWVuY2VfdmFsdWVz KE9pZCBzZXF1ZW5jZUlkKQoreworCUJ1ZmZlciAgICAgIGJ1ZjsKKwlTZXFUYWJsZSAgICBlbG07 CisJUmVsYXRpb24gICAgc2VxcmVsOworCUhlYXBUdXBsZURhdGEgc2VxdHVwbGU7CisJRm9ybV9w Z19zZXF1ZW5jZV9kYXRhIHNlcTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgcmV0U2VxOworCisJ LyogT3BlbiBhbmQgQWNjZXNzU2hhcmVMb2NrIHNlcXVlbmNlICovCisJaW5pdF9zZXF1ZW5jZShz ZXF1ZW5jZUlkLCAmZWxtLCAmc2VxcmVsKTsKKworCWlmIChwZ19jbGFzc19hY2xjaGVjayhzZXF1 ZW5jZUlkLCBHZXRVc2VySWQoKSwKKwkJCUFDTF9TRUxFQ1QgfCBBQ0xfVVBEQVRFIHwgQUNMX1VT QUdFKSAhPSBBQ0xDSEVDS19PSykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdFKSwKKwkJCQkJIGVycm1zZygicGVybWlzc2lvbiBk ZW5pZWQgZm9yIHNlcXVlbmNlICVzIiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShz ZXFyZWwpKSkpOworCisJc2VxID0gcmVhZF9zZXFfdHVwbGUoc2VxcmVsLCAmYnVmLCAmc2VxdHVw bGUpOworCXJldFNlcSA9IHBhbGxvYyhzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkp OworCisJbWVtY3B5KHJldFNlcSwgc2VxLCBzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0 YSkpOworCisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCXJlbGF0aW9uX2Nsb3NlKHNlcXJl bCwgTm9Mb2NrKTsKKworCXJldHVybiByZXRTZXE7Cit9CiAKIC8qCiAgKiBSZXR1cm4gc2VxdWVu Y2UgcGFyYW1ldGVycyBpbiBhIGxpc3Qgb2YgdGhlIGZvcm0gY3JlYXRlZCBieSB0aGUgcGFyc2Vy LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgYi9zcmMvYmFja2VuZC90 Y29wL3V0aWxpdHkuYwppbmRleCAyNDdkMDgxLi5iZWEzNWE2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwpAQCAt MTQ0Niw3ICsxNDQ2LDggQEAgUHJvY2Vzc1V0aWxpdHlTbG93KFBhcnNlU3RhdGUgKnBzdGF0ZSwK IAkJCQkJCQlhZGRyZXNzID0gRGVmaW5lQ29sbGF0aW9uKHBzdGF0ZSwKIAkJCQkJCQkJCQkJCQkg IHN0bXQtPmRlZm5hbWVzLAogCQkJCQkJCQkJCQkJCSAgc3RtdC0+ZGVmaW5pdGlvbiwKLQkJCQkJ CQkJCQkJCQkgIHN0bXQtPmlmX25vdF9leGlzdHMpOworCQkJCQkJCQkJCQkJCSAgc3RtdC0+aWZf bm90X2V4aXN0cywKKwkJCQkJCQkJCQkJCQkgICZzZWNvbmRhcnlPYmplY3QpOwogCQkJCQkJCWJy ZWFrOwogCQkJCQkJZGVmYXVsdDoKIAkJCQkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGRl ZmluZSBzdG10IHR5cGU6ICVkIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9m b3JtYXRfdHlwZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMKaW5kZXgg MjkxOGZkYi4uZjY0YTcyMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1h dF90eXBlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMKQEAgLTI3 LDcgKzI3LDYgQEAKICNpbmNsdWRlICJ1dGlscy9udW1lcmljLmgiCiAjaW5jbHVkZSAidXRpbHMv c3lzY2FjaGUuaCIKIAotc3RhdGljIGNoYXIgKnByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5h bWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCk7CiAKIAogLyoKQEAgLTM2Myw3ICszNjIs NyBAQCBmb3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9k KQogLyoKICAqIEFkZCB0eXBtb2QgZGVjb3JhdGlvbiB0byB0aGUgYmFzaWMgdHlwZSBuYW1lCiAg Ki8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFt ZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KQogewogCWNoYXIJICAgKnJlczsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvcmVncHJvYy5jCmluZGV4IDZkNGMxYzIuLmIzYTQyNjggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Jl Z3Byb2MuYwpAQCAtNDQsNiArNDQsOCBAQAogc3RhdGljIHZvaWQgcGFyc2VOYW1lQW5kQXJnVHlw ZXMoY29uc3QgY2hhciAqc3RyaW5nLCBib29sIGFsbG93Tm9uZSwKIAkJCQkJCQkJIExpc3QgKipu YW1lcywgaW50ICpuYXJncywgT2lkICphcmd0eXBlcyk7CiAKK3N0YXRpYyB2b2lkIGZvcm1hdF9w cm9jZWR1cmVfYXJnc19pbnRlcm5hbChGb3JtX3BnX3Byb2MgcHJvY2Zvcm0sCisJCQkJCQkJCQkJ ICAgU3RyaW5nSW5mbyBidWYsIGJvb2wgZm9yY2VfcXVhbGlmeSk7CiAKIC8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgogICoJIFVTRVIgSS9PIFJPVVRJTkVTCQkJCQkJCQkJCQkJCQkgKgpAQCAtMzMyLDYg KzMzNCwyOSBAQCBmb3JtYXRfcHJvY2VkdXJlX3F1YWxpZmllZChPaWQgcHJvY2VkdXJlX29pZCkK IH0KIAogLyoKKyAqIGZvcm1hdF9wcm9jZWR1cmVfYXJncyAgIC0gY29udmVydHMgcHJvYyBPSUQg dG8gIihhcmdzKSIKKyAqLworY2hhciAqCitmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lkIHByb2Nl ZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJ SGVhcFR1cGxlICAgcHJvY3R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07CisKKwlwcm9jdHVw ID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvY2VkdXJlX29p ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jdHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2NlZHVyZV9vaWQpOworCXBy b2Nmb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCisJaW5pdFN0cmlu Z0luZm8oJmJ1Zik7CisJZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFsKHByb2Nmb3JtLCAm YnVmLCBmb3JjZV9xdWFsaWZ5KTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsKKworCXJl dHVybiBidWYuZGF0YTsKK30KKworLyoKICAqIGZvcm1hdF9wcm9jZWR1cmVfZXh0ZW5kZWQgLSBj b252ZXJ0cyBwcm9jZWR1cmUgT0lEIHRvICJwcm9fbmFtZShhcmdzKSIKICAqCiAgKiBUaGlzIGV4 cG9ydHMgdGhlIHVzZWZ1bCBmdW5jdGlvbmFsaXR5IG9mIHJlZ3Byb2NlZHVyZW91dCBmb3IgdXNl CkBAIC0yMDYwLDMgKzIwODUsMzAgQEAgcGFyc2VOYW1lQW5kQXJnVHlwZXMoY29uc3QgY2hhciAq c3RyaW5nLCBib29sIGFsbG93Tm9uZSwgTGlzdCAqKm5hbWVzLAogCiAJcGZyZWUocmF3bmFtZSk7 CiB9CisKKy8qCisgKiBBcHBlbmQgdGhlIHBhcmVudGhlc2l6ZWQgYXJndW1lbnRzIG9mIHRoZSBn aXZlbiBwZ19wcm9jIHJvdyBpbnRvIHRoZSBvdXRwdXQKKyAqIGJ1ZmZlci4gIGZvcmNlX3F1YWxp ZnkgaW5kaWNhdGVzIHdoZXRoZXIgdG8gc2NoZW1hLXF1YWxpZnkgdHlwZSBuYW1lcworICogcmVn YXJkbGVzcyBvZiB2aXNpYmlsaXR5LgorICovCitzdGF0aWMgdm9pZAorZm9ybWF0X3Byb2NlZHVy ZV9hcmdzX2ludGVybmFsKEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwgU3RyaW5nSW5mbyBidWYsCisJ CQkJCQkJICAgYm9vbCBmb3JjZV9xdWFsaWZ5KQoreworCWludAkJCWk7CisJaW50CQkJbmFyZ3Mg PSBwcm9jZm9ybS0+cHJvbmFyZ3M7CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcoJyk7 CisJZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKyspCisJeworCQlPaWQJCQl0aGlzYXJndHlwZSA9 IHByb2Nmb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV07CisKKwkJaWYgKGkgPiAwKQorCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnLCcpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 ZiwKKwkJCQkJCQkgICBmb3JjZV9xdWFsaWZ5ID8KKwkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZV9x dWFsaWZpZWQodGhpc2FyZ3R5cGUpIDoKKwkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZSh0aGlzYXJn dHlwZSkpOworCX0KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7Cit9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggNzBkNzIzZS4uYTVkZTU5NyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9ydWxldXRpbHMuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3Bl cmF0b3IuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3BhcnRpdGlvbmVkX3RhYmxlLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19yZXdyaXRlLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWNfZXh0LmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ190cmlnZ2VyLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCkBAIC0zNTgsNyAr MzU5LDYgQEAgc3RhdGljIGludAlwcmludF9mdW5jdGlvbl9hcmd1bWVudHMoU3RyaW5nSW5mbyBi dWYsIEhlYXBUdXBsZSBwcm9jdHVwLAogCQkJCQkJCQkJIGJvb2wgcHJpbnRfdGFibGVfYXJncywg Ym9vbCBwcmludF9kZWZhdWx0cyk7CiBzdGF0aWMgdm9pZCBwcmludF9mdW5jdGlvbl9yZXR0eXBl KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiBzdGF0aWMgdm9pZCBwcmludF9m dW5jdGlvbl90cmZ0eXBlcyhTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApOwotc3Rh dGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fc3FsYm9keShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxl IHByb2N0dXApOwogc3RhdGljIHZvaWQgc2V0X3J0YWJsZV9uYW1lcyhkZXBhcnNlX25hbWVzcGFj ZSAqZHBucywgTGlzdCAqcGFyZW50X25hbWVzcGFjZXMsCiAJCQkJCQkJIEJpdG1hcHNldCAqcmVs c191c2VkKTsKIHN0YXRpYyB2b2lkIHNldF9kZXBhcnNlX2Zvcl9xdWVyeShkZXBhcnNlX25hbWVz cGFjZSAqZHBucywgUXVlcnkgKnF1ZXJ5LApAQCAtNDgyLDIyICs0ODIsMTUgQEAgc3RhdGljIHZv aWQgZ2V0X2Zyb21fY2xhdXNlX2NvbGRlZmxpc3QoUmFuZ2VUYmxGdW5jdGlvbiAqcnRmdW5jLAog CQkJCQkJCQkJICAgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIGdldF90 YWJsZXNhbXBsZV9kZWYoVGFibGVTYW1wbGVDbGF1c2UgKnRhYmxlc2FtcGxlLAogCQkJCQkJCQlk ZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwotc3RhdGljIHZvaWQgZ2V0X29wY2xhc3NfbmFtZShP aWQgb3BjbGFzcywgT2lkIGFjdHVhbF9kYXRhdHlwZSwKLQkJCQkJCQkgU3RyaW5nSW5mbyBidWYp Owogc3RhdGljIE5vZGUgKnByb2Nlc3NJbmRpcmVjdGlvbihOb2RlICpub2RlLCBkZXBhcnNlX2Nv bnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQgcHJpbnRTdWJzY3JpcHRzKFN1YnNjcmlwdGlu Z1JlZiAqc2JzcmVmLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIGNoYXIgKmdl dF9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcmVsYXRp b25fbmFtZShPaWQgcmVsaWQsIExpc3QgKm5hbWVzcGFjZXMpOwogc3RhdGljIGNoYXIgKmdlbmVy YXRlX3F1YWxpZmllZF9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCk7Ci1zdGF0aWMgY2hhciAqZ2Vu ZXJhdGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsCi0JCQkJCQkJCQlMaXN0 ICphcmduYW1lcywgT2lkICphcmd0eXBlcywKLQkJCQkJCQkJCWJvb2wgaGFzX3ZhcmlhZGljLCBi b29sICp1c2VfdmFyaWFkaWNfcCwKLQkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBy a2luZCk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfb3BlcmF0b3JfbmFtZShPaWQgb3BlcmlkLCBP aWQgYXJnMSwgT2lkIGFyZzIpOwogc3RhdGljIHZvaWQgYWRkX2Nhc3RfdG8oU3RyaW5nSW5mbyBi dWYsIE9pZCB0eXBpZCk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcXVhbGlmaWVkX3R5cGVfbmFt ZShPaWQgdHlwaWQpOwogc3RhdGljIHRleHQgKnN0cmluZ190b190ZXh0KGNoYXIgKnN0cik7Ci1z dGF0aWMgY2hhciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7CiBzdGF0aWMgdm9pZCBn ZXRfcmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9ucyk7CiAKICNkZWZp bmUgb25seV9tYXJrZXIocnRlKSAgKChydGUpLT5pbmggPyAiIiA6ICJPTkxZICIpCkBAIC01NDUs NiArNTM4LDEwOCBAQCBwZ19nZXRfcnVsZWRlZl9leHQoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19S RVRVUk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHJlcykpOwogfQogCisvKgorICogR2l2ZW4gYSBw YWlyIG9mIERhdHVtIGNvcnJlc3BvbmRpbmcgdG8gYSBydWxlJ3MgcGdfcmV3cml0ZS5ldl9xdWFs IGFuZAorICogZXZfYWN0aW9uIGNvbHVtbnMsIHJldHVybiB0aGVpciB0ZXh0IHJlcHJlc2VudGF0 aW9uOyBldl9xdWFsIGFzIGEgc2luZ2xlCisgKiBzdHJpbmcgaW4gd2hlcmVDbGF1c2UgYW5kIGV2 X2FjdGlvbiBhcyBhIExpc3Qgb2Ygc3RyaW5ncyAod2hpY2ggbWlnaHQgYmUKKyAqIE5JTCwgc2ln bmFsbGluZyBOT1RISU5HKSBpbiBhY3Rpb25zLgorICovCit2b2lkCitwZ19nZXRfcnVsZWRlZl9k ZXRhaWxlZChEYXR1bSBldl9xdWFsLCBEYXR1bSBldl9hY3Rpb24sCisJCQkJCQljaGFyICoqd2hl cmVDbGF1c2UsIExpc3QgKiphY3Rpb25zKQoreworCWludAkJCXByZXR0eUZsYWdzID0gMDsKKwlj aGFyCSAgICpxdWFsc3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhldl9xdWFsKTsKKwljaGFyCSAg ICphY3Rpb25zdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV2X2FjdGlvbik7CisJTGlzdAkgICAq YWN0aW9uTm9kZUxpc3QgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoYWN0aW9uc3RyKTsKKwlTdHJp bmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlpZiAoc3RybGVuKHF1 YWxzdHIpID4gMCAmJiBzdHJjbXAocXVhbHN0ciwgIjw+IikgIT0gMCkKKwl7CisJCU5vZGUJICAg KnF1YWw7CisJCVF1ZXJ5CSAgICpxdWVyeTsKKwkJZGVwYXJzZV9jb250ZXh0IGNvbnRleHQ7CisJ CWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7CisKKwkJcXVhbCA9IHN0cmluZ1RvTm9kZShxdWFsc3Ry KTsKKworCQlxdWVyeSA9IChRdWVyeSAqKSBsaW5pdGlhbChhY3Rpb25Ob2RlTGlzdCk7CisJCXF1 ZXJ5ID0gZ2V0SW5zZXJ0U2VsZWN0UXVlcnkocXVlcnksIE5VTEwpOworCisJCUFjcXVpcmVSZXdy aXRlTG9ja3MocXVlcnksIGZhbHNlLCBmYWxzZSk7CisKKwkJY29udGV4dC5idWYgPSAmYnVmOwor CQljb250ZXh0Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5zKTsKKwkJY29udGV4dC53aW5k b3dDbGF1c2UgPSBOSUw7CisJCWNvbnRleHQud2luZG93VExpc3QgPSBOSUw7CisJCWNvbnRleHQu dmFycHJlZml4ID0gKGxpc3RfbGVuZ3RoKHF1ZXJ5LT5ydGFibGUpICE9IDEpOworCQljb250ZXh0 LnByZXR0eUZsYWdzID0gcHJldHR5RmxhZ3M7CisJCWNvbnRleHQud3JhcENvbHVtbiA9IFdSQVBf Q09MVU1OX0RFRkFVTFQ7CisJCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1RE OworCisJCXNldF9kZXBhcnNlX2Zvcl9xdWVyeSgmZHBucywgcXVlcnksIE5JTCk7CisKKwkJZ2V0 X3J1bGVfZXhwcihxdWFsLCAmY29udGV4dCwgZmFsc2UpOworCisJCSp3aGVyZUNsYXVzZSA9IHBz dHJkdXAoYnVmLmRhdGEpOworCX0KKwllbHNlCisJCSp3aGVyZUNsYXVzZSA9IE5VTEw7CisKKwlp ZiAobGlzdF9sZW5ndGgoYWN0aW9uTm9kZUxpc3QpID09IDApCisJCSphY3Rpb25zID0gTklMOwor CWVsc2UKKwl7CisJCUxpc3RDZWxsICAgKmNlbGw7CisJCUxpc3QJICAgKm91dHB1dCA9IE5JTDsK KworCQlmb3JlYWNoKGNlbGwsIGFjdGlvbk5vZGVMaXN0KQorCQl7CisJCQlRdWVyeQkgICAqcXVl cnkgPSAoUXVlcnkgKikgbGZpcnN0KGNlbGwpOworCisJCQlpZiAocXVlcnktPmNvbW1hbmRUeXBl ID09IENNRF9OT1RISU5HKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXNldFN0cmluZ0luZm8oJmJ1 Zik7CisJCQlnZXRfcXVlcnlfZGVmKHF1ZXJ5LCAmYnVmLCBOSUwsIE5VTEwsIHRydWUsCisJCQkJ CQkgIHByZXR0eUZsYWdzLCBXUkFQX0NPTFVNTl9ERUZBVUxULCAwKTsKKwkJCW91dHB1dCA9IGxh cHBlbmQob3V0cHV0LCBwc3RyZHVwKGJ1Zi5kYXRhKSk7CisJCX0KKwkJKmFjdGlvbnMgPSBvdXRw dXQ7CisJfQorfQorCisvKgorICogSW4gdGhlIGNhc2UgdGhhdCB0aGUgQ1JFQVRFIFZJRVcgY29t bWFuZCBleGVjdXRpb24gaXMgc3RpbGwgaW4gcHJvZ3Jlc3MsCisgKiB3ZSB3b3VsZCBuZWVkIHRv IHNlYXJjaCB0aGUgc3lzdGVtIGNhY2hlIFJVTEVSRUxOQU1FIHRvIGdldCB0aGUgcmV3cml0ZQor ICogcnVsZSBvZiB0aGUgdmlldyBhcyBvcHBvc2UgdG8gcXVlcnlpbmcgcGdfcmV3cml0ZSBhcyBp biBwZ19nZXRfdmlld2RlZl93b3JrZXIoKSwKKyAqIHRoZSBsYXR0ZXIgd2lsbCByZXR1cm4gZW1w dHkgcmVzdWx0LgorICovCitjaGFyICoKK3BnX2dldF92aWV3ZGVmX2ludGVybmFsKE9pZCB2aWV3 b2lkKQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlSZWxhdGlvbglwZ19yZXdyaXRlOworCUhl YXBUdXBsZQlydWxldHVwOworCVR1cGxlRGVzYwlydWxldHRjOworCisJaW5pdFN0cmluZ0luZm8o JmJ1Zik7CisJcGdfcmV3cml0ZSA9IHRhYmxlX29wZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlydWxldHVwID0gU2VhcmNoU3lzQ2FjaGUyKFJVTEVSRUxOQU1FLAor CQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bSh2aWV3b2lkKSwKKwkJCQkJCQkgIFBvaW50ZXJHZXRE YXR1bShWaWV3U2VsZWN0UnVsZU5hbWUpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocnVsZXR1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZXdyaXRlIHJ1bGUg Zm9yIHZpZXcgd2l0aCBPSUQgJXUiLCB2aWV3b2lkKTsKKworCXJ1bGV0dGMgPSBwZ19yZXdyaXRl LT5yZF9hdHQ7CisJbWFrZV92aWV3ZGVmKCZidWYsIHJ1bGV0dXAsIHJ1bGV0dGMsIDAsIFdSQVBf Q09MVU1OX0RFRkFVTFQpOworCVJlbGVhc2VTeXNDYWNoZShydWxldHVwKTsKKwl0YWJsZV9jbG9z ZShwZ19yZXdyaXRlLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGJ1Zi5kYXRhOworfQog CiBzdGF0aWMgY2hhciAqCiBwZ19nZXRfcnVsZWRlZl93b3JrZXIoT2lkIHJ1bGVvaWQsIGludCBw cmV0dHlGbGFncykKQEAgLTEwMTUsNjUgKzExMTAsMTIgQEAgcGdfZ2V0X3RyaWdnZXJkZWZfd29y a2VyKE9pZCB0cmlnaWQsIGJvb2wgcHJldHR5KQogCWlmICghaXNudWxsKQogCXsKIAkJTm9kZQkg ICAqcXVhbDsKLQkJY2hhcgkJcmVsa2luZDsKLQkJZGVwYXJzZV9jb250ZXh0IGNvbnRleHQ7Ci0J CWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7Ci0JCVJhbmdlVGJsRW50cnkgKm9sZHJ0ZTsKLQkJUmFu Z2VUYmxFbnRyeSAqbmV3cnRlOwotCi0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIldI RU4gKCIpOworCQljaGFyCSAgICpxdWFsc3RyOwogCiAJCXF1YWwgPSBzdHJpbmdUb05vZGUoVGV4 dERhdHVtR2V0Q1N0cmluZyh2YWx1ZSkpOworCQlxdWFsc3RyID0gcGdfZ2V0X3RyaWdnZXJfd2hl bmNsYXVzZSh0cmlncmVjLCBxdWFsLCBwcmV0dHkpOwogCi0JCXJlbGtpbmQgPSBnZXRfcmVsX3Jl bGtpbmQodHJpZ3JlYy0+dGdyZWxpZCk7Ci0KLQkJLyogQnVpbGQgbWluaW1hbCBPTEQgYW5kIE5F VyBSVEVzIGZvciB0aGUgcmVsICovCi0JCW9sZHJ0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkp OwotCQlvbGRydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047Ci0JCW9sZHJ0ZS0+cmVsaWQgPSB0 cmlncmVjLT50Z3JlbGlkOwotCQlvbGRydGUtPnJlbGtpbmQgPSByZWxraW5kOwotCQlvbGRydGUt PnJlbGxvY2ttb2RlID0gQWNjZXNzU2hhcmVMb2NrOwotCQlvbGRydGUtPmFsaWFzID0gbWFrZUFs aWFzKCJvbGQiLCBOSUwpOwotCQlvbGRydGUtPmVyZWYgPSBvbGRydGUtPmFsaWFzOwotCQlvbGRy dGUtPmxhdGVyYWwgPSBmYWxzZTsKLQkJb2xkcnRlLT5pbmggPSBmYWxzZTsKLQkJb2xkcnRlLT5p bkZyb21DbCA9IHRydWU7Ci0KLQkJbmV3cnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7Ci0J CW5ld3J0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKLQkJbmV3cnRlLT5yZWxpZCA9IHRyaWdy ZWMtPnRncmVsaWQ7Ci0JCW5ld3J0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7Ci0JCW5ld3J0ZS0+cmVs bG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMo Im5ldyIsIE5JTCk7Ci0JCW5ld3J0ZS0+ZXJlZiA9IG5ld3J0ZS0+YWxpYXM7Ci0JCW5ld3J0ZS0+ bGF0ZXJhbCA9IGZhbHNlOwotCQluZXdydGUtPmluaCA9IGZhbHNlOwotCQluZXdydGUtPmluRnJv bUNsID0gdHJ1ZTsKLQotCQkvKiBCdWlsZCB0d28tZWxlbWVudCBydGFibGUgKi8KLQkJbWVtc2V0 KCZkcG5zLCAwLCBzaXplb2YoZHBucykpOwotCQlkcG5zLnJ0YWJsZSA9IGxpc3RfbWFrZTIob2xk cnRlLCBuZXdydGUpOwotCQlkcG5zLnN1YnBsYW5zID0gTklMOwotCQlkcG5zLmN0ZXMgPSBOSUw7 Ci0JCWRwbnMuYXBwZW5kcmVscyA9IE5VTEw7Ci0JCXNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5J TCwgTlVMTCk7Ci0JCXNldF9zaW1wbGVfY29sdW1uX25hbWVzKCZkcG5zKTsKLQotCQkvKiBTZXQg dXAgY29udGV4dCB3aXRoIG9uZS1kZWVwIG5hbWVzcGFjZSBzdGFjayAqLwotCQljb250ZXh0LmJ1 ZiA9ICZidWY7Ci0JCWNvbnRleHQubmFtZXNwYWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOwotCQlj b250ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsKLQkJY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsK LQkJY29udGV4dC52YXJwcmVmaXggPSB0cnVlOwotCQljb250ZXh0LnByZXR0eUZsYWdzID0gR0VU X1BSRVRUWV9GTEFHUyhwcmV0dHkpOwotCQljb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVN Tl9ERUZBVUxUOwotCQljb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKLQkJ Y29udGV4dC5zcGVjaWFsX2V4cHJraW5kID0gRVhQUl9LSU5EX05PTkU7Ci0JCWNvbnRleHQuYXBw ZW5kcGFyZW50cyA9IE5VTEw7Ci0KLQkJZ2V0X3J1bGVfZXhwcihxdWFsLCAmY29udGV4dCwgZmFs c2UpOwotCi0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIikgIik7CisJCWFwcGVuZFN0 cmluZ0luZm8oJmJ1ZiwgIldIRU4gKCVzKSAiLCBxdWFsc3RyKTsKIAl9CiAKIAlhcHBlbmRTdHJp bmdJbmZvKCZidWYsICJFWEVDVVRFIEZVTkNUSU9OICVzKCIsCkBAIC0xMTE0LDYgKzExNTYsNjQg QEAgcGdfZ2V0X3RyaWdnZXJkZWZfd29ya2VyKE9pZCB0cmlnaWQsIGJvb2wgcHJldHR5KQogCXJl dHVybiBidWYuZGF0YTsKIH0KIAorY2hhciAqCitwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKEZv cm1fcGdfdHJpZ2dlciB0cmlncmVjLCBOb2RlICp3aGVuQ2xhdXNlLCBib29sIHByZXR0eSkKK3sK KwlTdHJpbmdJbmZvRGF0YSBidWY7CisJY2hhcgkJcmVsa2luZDsKKwlkZXBhcnNlX2NvbnRleHQg Y29udGV4dDsKKwlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOworCVJhbmdlVGJsRW50cnkgKm9sZHJ0 ZTsKKwlSYW5nZVRibEVudHJ5ICpuZXdydGU7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwor CXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQodHJpZ3JlYy0+dGdyZWxpZCk7CisKKwkvKiBCdWls ZCBtaW5pbWFsIE9MRCBhbmQgTkVXIFJURXMgZm9yIHRoZSByZWwgKi8KKwlvbGRydGUgPSBtYWtl Tm9kZShSYW5nZVRibEVudHJ5KTsKKwlvbGRydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047CisJ b2xkcnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7CisJb2xkcnRlLT5yZWxraW5kID0gcmVs a2luZDsKKwlvbGRydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJvbGQiLCBOSUwpOworCW9sZHJ0ZS0+ ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7CisJb2xkcnRlLT5sYXRlcmFsID0gZmFsc2U7CisJb2xkcnRl LT5pbmggPSBmYWxzZTsKKwlvbGRydGUtPmluRnJvbUNsID0gdHJ1ZTsKKworCW5ld3J0ZSA9IG1h a2VOb2RlKFJhbmdlVGJsRW50cnkpOworCW5ld3J0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsK KwluZXdydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKKwluZXdydGUtPnJlbGtpbmQgPSBy ZWxraW5kOworCW5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm5ldyIsIE5JTCk7CisJbmV3cnRl LT5lcmVmID0gbmV3cnRlLT5hbGlhczsKKwluZXdydGUtPmxhdGVyYWwgPSBmYWxzZTsKKwluZXdy dGUtPmluaCA9IGZhbHNlOworCW5ld3J0ZS0+aW5Gcm9tQ2wgPSB0cnVlOworCisJLyogQnVpbGQg dHdvLWVsZW1lbnQgcnRhYmxlICovCisJbWVtc2V0KCZkcG5zLCAwLCBzaXplb2YoZHBucykpOwor CWRwbnMucnRhYmxlID0gbGlzdF9tYWtlMihvbGRydGUsIG5ld3J0ZSk7CisJZHBucy5jdGVzID0g TklMOworCXNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwgTlVMTCk7CisJc2V0X3NpbXBsZV9j b2x1bW5fbmFtZXMoJmRwbnMpOworCisJLyogU2V0IHVwIGNvbnRleHQgd2l0aCBvbmUtZGVlcCBu YW1lc3BhY2Ugc3RhY2sgKi8KKwljb250ZXh0LmJ1ZiA9ICZidWY7CisJY29udGV4dC5uYW1lc3Bh Y2VzID0gbGlzdF9tYWtlMSgmZHBucyk7CisJY29udGV4dC53aW5kb3dDbGF1c2UgPSBOSUw7CisJ Y29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKKwljb250ZXh0LnZhcnByZWZpeCA9IHRydWU7CisJ Y29udGV4dC5wcmV0dHlGbGFncyA9IHByZXR0eSA/IFBSRVRUWUZMQUdfUEFSRU4gfCBQUkVUVFlG TEFHX0lOREVOVCA6IFBSRVRUWUZMQUdfSU5ERU5UOworCWNvbnRleHQud3JhcENvbHVtbiA9IFdS QVBfQ09MVU1OX0RFRkFVTFQ7CisJY29udGV4dC5pbmRlbnRMZXZlbCA9IFBSRVRUWUlOREVOVF9T VEQ7CisJY29udGV4dC5zcGVjaWFsX2V4cHJraW5kID0gRVhQUl9LSU5EX05PTkU7CisKKwlnZXRf cnVsZV9leHByKHdoZW5DbGF1c2UsICZjb250ZXh0LCBmYWxzZSk7CisKKwlyZXR1cm4gYnVmLmRh dGE7Cit9CisKIC8qIC0tLS0tLS0tLS0KICAqIHBnX2dldF9pbmRleGRlZgkJCS0gR2V0IHRoZSBk ZWZpbml0aW9uIG9mIGFuIGluZGV4CiAgKgpAQCAtMTg4MCw2ICsxOTgwLDEzIEBAIHBnX2dldF9w YXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSkKIAlyZXR1cm4gcGdfZ2V0 X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCBwcmV0dHlGbGFncywgdHJ1ZSwgZmFsc2UpOwogfQog CisvKiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmVwb3J0cyB0aGUgZnVsbCBwYXJ0aXRpb24ga2V5 IGRlZmluaXRpb24gKi8KK2NoYXIgKgorcGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxlKE9pZCByZWxp ZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCAwLCBmYWxzZSwg ZmFsc2UpOworfQorCiAvKgogICogSW50ZXJuYWwgd29ya2hvcnNlIHRvIGRlY29tcGlsZSBhIHBh cnRpdGlvbiBrZXkgZGVmaW5pdGlvbi4KICAqLwpAQCAtMjEzMiw2ICsyMjM5LDE1IEBAIHBnX2dl dF9jb25zdHJhaW50ZGVmX2V4dChQR19GVU5DVElPTl9BUkdTKQogfQogCiAvKgorICogSW50ZXJu YWwgdmVyc2lvbiB0aGF0IHJldHVybnMgdGhlIGRlZmluaXRpb24gb2YgYSBDT05TVFJBSU5UIGNv bW1hbmQKKyAqLworY2hhciAqCitwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShP aWQgY29uc3RyYWludElkKQoreworCXJldHVybiBwZ19nZXRfY29uc3RyYWludGRlZl93b3JrZXIo Y29uc3RyYWludElkLCBmYWxzZSwgMCwgZmFsc2UpOworfQorCisvKgogICogSW50ZXJuYWwgdmVy c2lvbiB0aGF0IHJldHVybnMgYSBmdWxsIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBj b21tYW5kCiAgKi8KIGNoYXIgKgpAQCAtMzUwMSw3ICszNjE3LDcgQEAgcGdfZ2V0X2Z1bmN0aW9u X2FyZ19kZWZhdWx0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdf dG9fdGV4dChzdHIpKTsKIH0KIAotc3RhdGljIHZvaWQKK3ZvaWQKIHByaW50X2Z1bmN0aW9uX3Nx bGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKQogewogCWludAkJCW51bWFy Z3M7CkBAIC0xMTM4NSw3ICsxMTUwMSw3IEBAIGdldF90YWJsZXNhbXBsZV9kZWYoVGFibGVTYW1w bGVDbGF1c2UgKnRhYmxlc2FtcGxlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpCiAgKiBhY3R1 YWxfZGF0YXR5cGUuICAoSWYgeW91IGRvbid0IHdhbnQgdGhpcyBiZWhhdmlvciwganVzdCBwYXNz CiAgKiBJbnZhbGlkT2lkIGZvciBhY3R1YWxfZGF0YXR5cGUuKQogICovCi1zdGF0aWMgdm9pZAor dm9pZAogZ2V0X29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcywgT2lkIGFjdHVhbF9kYXRhdHlwZSwK IAkJCQkgU3RyaW5nSW5mbyBidWYpCiB7CkBAIC0xMTc3OSw3ICsxMTg5NSw3IEBAIGdlbmVyYXRl X3F1YWxpZmllZF9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCkKICAqCiAgKiBUaGUgcmVzdWx0IGlu Y2x1ZGVzIGFsbCBuZWNlc3NhcnkgcXVvdGluZyBhbmQgc2NoZW1hLXByZWZpeGluZy4KICAqLwot c3RhdGljIGNoYXIgKgorY2hhciAqCiBnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQs IGludCBuYXJncywgTGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJndHlwZXMsCiAJCQkJCSAgIGJvb2wg aGFzX3ZhcmlhZGljLCBib29sICp1c2VfdmFyaWFkaWNfcCwKIAkJCQkJICAgUGFyc2VFeHByS2lu ZCBzcGVjaWFsX2V4cHJraW5kKQpAQCAtMTIxNjUsNyArMTIyODEsNyBAQCBnZXRfcmVsb3B0aW9u cyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9ucykKIC8qCiAgKiBHZW5lcmF0ZSBhIEMg c3RyaW5nIHJlcHJlc2VudGluZyBhIHJlbGF0aW9uJ3MgcmVsb3B0aW9ucywgb3IgTlVMTCBpZiBu b25lLgogICovCi1zdGF0aWMgY2hhciAqCitjaGFyICoKIGZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQg cmVsaWQpCiB7CiAJY2hhcgkgICAqcmVzdWx0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CmluZGV4IDYyYTViOGUuLmMyZjFkZTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE4 MjcsNCArMTE4MjcsMTAgQEAKICAgcHJvcmV0dHlwZSA9PiAnYnl0ZWEnLCBwcm9hcmd0eXBlcyA9 PiAncGdfYnJpbl9taW5tYXhfbXVsdGlfc3VtbWFyeScsCiAgIHByb3NyYyA9PiAnYnJpbl9taW5t YXhfbXVsdGlfc3VtbWFyeV9zZW5kJyB9LAogCit7IG9pZCA9PiAnNDY0MicsIGRlc2NyID0+ICdk ZXBhcnNlIHRoZSBEREwgY29tbWFuZCBpbnRvIEpTT04gZm9ybWF0IHN0cmluZycsCisgIHByb25h bWUgPT4gJ2RkbF9kZXBhcnNlX3RvX2pzb24nLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJv YXJndHlwZXMgPT4gJ3BnX2RkbF9jb21tYW5kJywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV90b19q c29uJyB9LAoreyBvaWQgPT4gJzQ2NDMnLCBkZXNjciA9PiAnZXhwYW5kIEpTT04gZm9ybWF0IERE TCB0byBhIHBsYWluIERETCBjb21tYW5kJywKKyAgcHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfZXhw YW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3Rl eHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJyB9LAogXQpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29sbGF0aW9uY21kcy5oIGIvc3JjL2luY2x1ZGUv Y29tbWFuZHMvY29sbGF0aW9uY21kcy5oCmluZGV4IDIwMWIxOWYuLjQ2ZDE4MzcgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaAorKysgYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmgKQEAgLTE4LDcgKzE4LDggQEAKICNpbmNsdWRlICJj YXRhbG9nL29iamVjdGFkZHJlc3MuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2Vfbm9kZS5oIgog Ci1leHRlcm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRl LCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywgYm9vbCBpZl9ub3RfZXhpc3RzKTsKK2V4 dGVybiBPYmplY3RBZGRyZXNzIERlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExp c3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLAorCQkJCQkJCQkJICBib29sIGlmX25vdF9leGlz dHMsIE9iamVjdEFkZHJlc3MgKmZyb21fY29sbGlkKTsKIGV4dGVybiB2b2lkIElzVGhlcmVDb2xs YXRpb25Jbk5hbWVzcGFjZShjb25zdCBjaGFyICpjb2xsbmFtZSwgT2lkIG5zcE9pZCk7CiBleHRl cm4gT2JqZWN0QWRkcmVzcyBBbHRlckNvbGxhdGlvbihBbHRlckNvbGxhdGlvblN0bXQgKnN0bXQp OwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaAppbmRleCBiM2IwNGNjLi5jMmIxY2EzIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCisrKyBiL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL3NlcXVlbmNlLmgKQEAgLTU0LDYgKzU0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfc2Vx X3JlYwogZXh0ZXJuIGludDY0IG5leHR2YWxfaW50ZXJuYWwoT2lkIHJlbGlkLCBib29sIGNoZWNr X3Blcm1pc3Npb25zKTsKIGV4dGVybiBEYXR1bSBuZXh0dmFsKFBHX0ZVTkNUSU9OX0FSR1MpOwog ZXh0ZXJuIExpc3QgKnNlcXVlbmNlX29wdGlvbnMoT2lkIHJlbGlkKTsKK2V4dGVybiBGb3JtX3Bn X3NlcXVlbmNlX2RhdGEgZ2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQgc2VxdWVuY2VJZCk7CiAKIGV4 dGVybiBPYmplY3RBZGRyZXNzIERlZmluZVNlcXVlbmNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3Jl YXRlU2VxU3RtdCAqc2VxKTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIEFsdGVyU2VxdWVuY2UoUGFy c2VTdGF0ZSAqcHN0YXRlLCBBbHRlclNlcVN0bXQgKnN0bXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYWFlNzMKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKQEAgLTAsMCArMSwyMyBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2RlcGFyc2UuaAorICoKKyAqIFBvcnRpb25z IENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2 ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNl LmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBERExfREVQQVJTRV9ICisj ZGVmaW5lIERETF9ERVBBUlNFX0gKKworI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5Lmgi CisKK2V4dGVybiBjaGFyICpkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5k ICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKTsKK2V4dGVybiBjaGFyICpkZGxfZGVwYXJzZV9qc29u X3RvX3N0cmluZyhjaGFyICpqc29uYik7CitleHRlcm4gY2hhciAqZGVwYXJzZV9kcm9wX2NvbW1h bmQoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCisJCQkJ CQkJCSAgRHJvcEJlaGF2aW9yIGJlaGF2aW9yKTsKKworCisjZW5kaWYJCQkJCQkJLyogRERMX0RF UEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHku aCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKaW5kZXggOTRkZTEzZC4uYjUz Mjk0YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAorKysg Yi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCkBAIC02Miw2ICs2Miw3IEBAIHR5 cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJT2lkCQkJb2JqZWN0SWQ7CiAJ CQlPaWQJCQljbGFzc0lkOworCQkJYm9vbAkJcmV3cml0ZTsKIAkJCUxpc3QJICAgKnN1YmNtZHM7 CiAJCX0JCQlhbHRlclRhYmxlOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9hY2xj aGtfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCmluZGV4 IDM2MTI4NGQuLjRlMDIwZWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19p bnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCkBAIC0z OSw2ICszOSw3IEBAIHR5cGVkZWYgc3RydWN0CiAJTGlzdAkgICAqZ3JhbnRlZXM7CiAJYm9vbAkJ Z3JhbnRfb3B0aW9uOwogCURyb3BCZWhhdmlvciBiZWhhdmlvcjsKKwlPaWQJCQlncmFudG9yX3Vp ZDsKIH0gSW50ZXJuYWxHcmFudDsKIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9i dWlsdGlucy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAppbmRleCA4MTYzMWYxLi43 MTUwZmFiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCisrKyBiL3Ny Yy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKQEAgLTExNCwxMCArMTE0LDEyIEBAIGV4dGVybiBE YXR1bSBudW1lcmljX2Zsb2F0OF9ub19vdmVyZmxvdyhQR19GVU5DVElPTl9BUkdTKTsKICNkZWZp bmUgRk9STUFUX1RZUEVfRk9SQ0VfUVVBTElGWQkweDA0CS8qIGZvcmNlIHF1YWxpZmljYXRpb24g b2YgdHlwZSAqLwogI2RlZmluZSBGT1JNQVRfVFlQRV9JTlZBTElEX0FTX05VTEwJMHgwOAkvKiBO VUxMIGlmIHVuZGVmaW5lZCAqLwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2V4dGVuZGVkKE9p ZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwgYml0czE2IGZsYWdzKTsKK2V4dGVybiBjaGFyICpm b3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lkIHByb2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlm eSk7CiAKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZShPaWQgdHlwZV9vaWQpOwogZXh0ZXJu IGNoYXIgKmZvcm1hdF90eXBlX2JlX3F1YWxpZmllZChPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNo YXIgKmZvcm1hdF90eXBlX3dpdGhfdHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2Qp OworZXh0ZXJuIGNoYXIgKnByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5 cG1vZCwgT2lkIHR5cG1vZG91dCk7CiAKIGV4dGVybiBpbnQzMiB0eXBlX21heGltdW1fc2l6ZShP aWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91 dGlscy9ydWxldXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCmluZGV4IDdk NDg5NzEuLmVjNmVmODAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCkBAIC0xMyw5ICsxMywxMiBAQAog I2lmbmRlZiBSVUxFVVRJTFNfSAogI2RlZmluZSBSVUxFVVRJTFNfSAogCisjaW5jbHVkZSAiYWNj ZXNzL2h0dXAuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJu b2Rlcy9ub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJu b2Rlcy9wZ19saXN0LmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX25vZGUuaCIKIAogc3RydWN0 IFBsYW47CQkJCQkvKiBhdm9pZCBpbmNsdWRpbmcgcGxhbm5vZGVzLmggaGVyZSAqLwogc3RydWN0 IFBsYW5uZWRTdG10OwpAQCAtMjMsMTIgKzI2LDIwIEBAIHN0cnVjdCBQbGFubmVkU3RtdDsKIAog ZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9zdHJpbmcoT2lkIGluZGV4cmVsaWQpOwogZXh0 ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9jb2x1bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHBy ZXR0eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZShGb3JtX3BnX3Ry aWdnZXIgdHJpZ3JlYywKKwkJCQkJCQkJCSAgIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wgcHJldHR5 KTsKIGV4dGVybiBjaGFyICpwZ19nZXRfcXVlcnlkZWYoUXVlcnkgKnF1ZXJ5LCBib29sIHByZXR0 eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwoT2lkIHZpZXdvaWQpOwog CiBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQsIGJvb2wg cHJldHR5KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUoT2lkIHJlbGlk KTsKIGV4dGVybiBjaGFyICpwZ19nZXRfcGFydGNvbnN0cmRlZl9zdHJpbmcoT2lkIHBhcnRpdGlv bklkLCBjaGFyICphbGlhc25hbWUpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRk ZWZfY29tbWFuZChPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiBjaGFyICpwZ19nZXRfY29uc3Ry YWludGRlZl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiB2b2lkIHBn X2dldF9ydWxlZGVmX2RldGFpbGVkKERhdHVtIGV2X3F1YWwsIERhdHVtIGV2X2FjdGlvbiwKKwkJ CQkJCQkJCWNoYXIgKip3aGVyZUNsYXVzZSwgTGlzdCAqKmFjdGlvbnMpOworCiBleHRlcm4gY2hh ciAqZGVwYXJzZV9leHByZXNzaW9uKE5vZGUgKmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJ CQkJYm9vbCBmb3JjZXByZWZpeCwgYm9vbCBzaG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRl cGFyc2VfY29udGV4dF9mb3IoY29uc3QgY2hhciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAt NDAsOCArNTEsMTYgQEAgZXh0ZXJuIExpc3QgKnNlbGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4cGxh aW4oTGlzdCAqcnRhYmxlLAogCQkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogZXh0 ZXJuIGNoYXIgKmdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNo YXIgKmdlbmVyYXRlX29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcyk7CitleHRlcm4gY2hhciAqZ2Vu ZXJhdGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVz LAorCQkJCQkJCQkJT2lkICphcmd0eXBlcywgYm9vbCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJCQli b29sICp1c2VfdmFyaWFkaWNfcCwKKwkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBy a2luZCk7CiBleHRlcm4gY2hhciAqZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91 bmRfZGF0dW1zKTsKK2V4dGVybiB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9p ZCBhY3R1YWxfZGF0YXR5cGUsCisJCQkJCQkJIFN0cmluZ0luZm8gYnVmKTsKK2V4dGVybiBjaGFy ICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9z dGF0aXN0aWNzb2JqZGVmX3N0cmluZyhPaWQgc3RhdGV4dGlkKTsKK2V4dGVybiB2b2lkIHByaW50 X2Z1bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIAog I2VuZGlmCQkJCQkJCS8qIFJVTEVVVElMU19IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CmluZGV4IGRhZGQ1OGUuLjNiZjllMTQgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CkBAIC00OTEsNyArNDkxLDcg QEAgU0VMRUNUIChwZ19pZGVudGlmeV9vYmplY3QoYWRkcjEuY2xhc3NpZCwgYWRkcjEub2JqaWQs IGFkZHIxLm9ianN1YmlkKSkuKiwKICBwb2xpY3kgICAgICAgICAgICAgICAgICAgIHwgICAgICAg ICAgICB8ICAgICAgICAgICAgICAgICAgIHwgZ2VucG9sIG9uIGFkZHJfbnNwLmdlbnRhYmxlICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0CiAgc3RhdGlzdGljcyBv YmplY3QgICAgICAgICB8IGFkZHJfbnNwICAgfCBnZW50YWJsZV9zdGF0ICAgICB8IGFkZHJfbnNw LmdlbnRhYmxlX3N0YXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgdAogIGNvbGxhdGlvbiAgICAgICAgICAgICAgICAgfCBwZ19jYXRhbG9nIHwgImRlZmF1 bHQiICAgICAgICAgfCBwZ19jYXRhbG9nLiJkZWZhdWx0IiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8IHQKLSB0cmFuc2Zvcm0gICAgICAgICAgICAgICAg IHwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgZm9yIGludGVnZXIgb24gbGFuZ3Vh Z2Ugc3FsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0CisgdHJh bnNmb3JtICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8 IGZvciBpbnRlZ2VyIGxhbmd1YWdlIHNxbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgdAogIHRleHQgc2VhcmNoIGRpY3Rpb25hcnkgICAgfCBhZGRyX25zcCAg IHwgYWRkcl90c19kaWN0ICAgICAgfCBhZGRyX25zcC5hZGRyX3RzX2RpY3QgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHQKICB0ZXh0IHNlYXJjaCBwYXJz ZXIgICAgICAgIHwgYWRkcl9uc3AgICB8IGFkZHJfdHNfcHJzICAgICAgIHwgYWRkcl9uc3AuYWRk cl90c19wcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCB0CiAgdGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbiB8IGFkZHJfbnNwICAgfCBhZGRyX3RzX2Nv bmYgICAgICB8IGFkZHJfbnNwLmFkZHJfdHNfY29uZiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgdApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBk OWI4MzljLi4yNDBkM2FlIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTYxMCw2ICsx NjEwLDkgQEAgT1NJbmZvCiBPU1NMQ2lwaGVyCiBPU1NMRGlnZXN0CiBPVkVSTEFQUEVECitPYmpF bGVtCitPYmpUcmVlCitPYmpUeXBlCiBPYmplY3RBY2Nlc3NEcm9wCiBPYmplY3RBY2Nlc3NOYW1l c3BhY2VTZWFyY2gKIE9iamVjdEFjY2Vzc1Bvc3RBbHRlcgpAQCAtMzE3Nyw2ICszMTgwLDcgQEAg Y29tcGFyZV9jb250ZXh0CiBjb25maWdfdmFyX3ZhbHVlCiBjb250YWluX2FnZ3Nfb2ZfbGV2ZWxf Y29udGV4dAogY29udmVydF90ZXN0ZXhwcl9jb250ZXh0Citjb252U3BlY2lmaWVyCiBjb3B5X2Rh dGFfZGVzdF9jYgogY29weV9kYXRhX3NvdXJjZV9jYgogY29yZV9ZWVNUWVBFCi0tIAoxLjguMy4x Cgo= --00000000000078f73c05ebc6f2db--