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 1ogTvH-0004kk-6Q for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Oct 2022 16:40:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ogTvE-0007oe-Et for pgsql-hackers@arkaria.postgresql.org; Thu, 06 Oct 2022 16:40:32 +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 1ogTvC-0007l1-U0 for pgsql-hackers@lists.postgresql.org; Thu, 06 Oct 2022 16:40:31 +0000 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ogTv5-0004Fq-9w for pgsql-hackers@lists.postgresql.org; Thu, 06 Oct 2022 16:40:29 +0000 Received: by mail-pj1-x1036.google.com with SMTP id b15so2224281pje.1 for ; Thu, 06 Oct 2022 09:40:23 -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=v9pjmORV9Aw6Y0akcJtns9U8WZrNJLi12jhGAfP0GVs=; b=lmZEgnSNIot4ul+ldqs2lK2BckvBzukltPJL/pbod9xl/yWiLAJ+2+lrVxGg31gP1x Zkaw6XFPeLyPpnNIDOieSyQ2mAvZlc6ieaTUOfDZOYkbvBm6mvUdzYn7jwC+6HtdcSn9 Xu2oQZC2Qm4Wz43UmmpeoPtx/DLI+Y8ekPzr9ojzfbq7TyaBTHfHKtdFPC1Rh0xPeF1z HvxM/TjhWkXKSZNt7p9CyOfZ2cNtAvKi8+mLRkTOuxcUkfV9erhTCxKM12annRkihjiw 08/+6I1m2QyJDH7rahFZ2smM+Q4To6b1YUhlGLIX3hOHIYdEzHCL1+wS0QLGMtBSjN8m mYfA== 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=v9pjmORV9Aw6Y0akcJtns9U8WZrNJLi12jhGAfP0GVs=; b=HQuNeiXJIKskVkVjnFU6GNO1+lWgvkOm+21KH/vB/4tlOIasX0jtbgVBTYB2TCemHM hCN/LfmKpSpBnce+dJ1vaKKmXBcMnJAel1nYBSWQLeJEPIG9fawVLoIrz1lIyQ8xmU3Y GEvKABwpva8nJxh86sx1hKTwVMT5dIIdRm7IodWf7wl5+4G3F8hyWbQ5IAQqwvPV+0kB lwOfbSOhjg3eL9RtOhuBuVvkmQIlqjDrMKFT1spjEOd5esmttPgMB0Vwr/ChcUjSppJR Xw2xjfqwJuMtPxzwhYD7N8ws91xAUsBG2z65an1sJY15divrXcOAADzNAjas8v9zJoDr iZKA== X-Gm-Message-State: ACrzQf0qoNQHOLfCLUt0EAIwvj7MC8hRHuiX12zi93fiYzQm3Ei0tIUW Eh8MCRX5BAQqMXAVTPlZmOESrPSyd8KyKlIYxhE= X-Google-Smtp-Source: AMsMyM6bt7RTXBx3Bs9vm1/yAYWf9yNiT7jCmM3ss8BdF6X9cGu70DRNWruPbf/y2iXUqENc6ZF7TH6G2RGDB0guofM= X-Received: by 2002:a17:90b:2d85:b0:20a:d20e:a5fe with SMTP id sj5-20020a17090b2d8500b0020ad20ea5femr590103pjb.96.1665074421961; Thu, 06 Oct 2022 09:40:21 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Zheng Li Date: Thu, 6 Oct 2022 12:40:10 -0400 Message-ID: Subject: Re: Support logical replication of DDLs To: vignesh C Cc: Ajin Cherian , "houzj.fnst@fujitsu.com" , Peter Smith , Amit Kapila , Masahiko Sawada , Japin Li , Alvaro Herrera , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000072399e05ea605996" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000072399e05ea605996 Content-Type: text/plain; charset="UTF-8" Hi, Attaching v25 patch which adds supports for: CREATE TRANSFORM DROP TRANSFORM These are relatively new commands so they're not in the original DDL deparser patch. Some tweaking is made in deparse_drop_command in order to make DROP TRANSFORM deparsing work. This is because the objidentity captured in currentEventTriggerState->SQLDropList contains the keyword 'on', for example "for typename on language lang", but the keyword 'on' is not needed in the current DROP TRANSFORM syntax. So we need to remove the 'on' keyword in objidentity. I'm not sure if this is the best way to handle it, maybe we can consider directly modifying what's captured in currentEventTriggerState->SQLDropList so we don't have the "on" keyword to begin with? BTW, my colleague Runqi started a new thread to discuss DDL deparser testing in [1]. Your feedback is appreciated. With Regards, Zheng Li [1] https://www.postgresql.org/message-id/CAH8n8_jMTunxxtP4L-3tc%3DGNamg%3Dmg1X%3DtgHr9CqqjjzFLwQng%40mail.gmail.com --00000000000072399e05ea605996 Content-Type: application/octet-stream; name="v25-0005-Add-DDL-deparser-support-for-TEXT-SEARCH-commands-wh.patch" Content-Disposition: attachment; filename="v25-0005-Add-DDL-deparser-support-for-TEXT-SEARCH-commands-wh.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8xa4not4 RnJvbSBkM2ZmZDNhOTBjMGE4NTMzMGE0MzBmN2U5MmE2MjI1OTkwMWNmN2M5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IEZyaSwgMzAgU2VwIDIwMjIgMTI6MjM6MDMgKzA1MzAKU3ViamVjdDogW1BBVENIIDUv Nl0gQWRkIERETCBkZXBhcnNlciBzdXBwb3J0IGZvciBURVhUIFNFQVJDSCBjb21tYW5kcywgd2hp Y2gKIGluY2x1ZGVzOiAtQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04vUEFSU0VSL0RJ Q1RJT05BUlkvVEVNUExBVEUgLURST1AKIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04vUEFSU0VS L0RJQ1RJT05BUlkvVEVNUExBVEUgLUFMVEVSIFRFWFQgU0VBUkNICiBDT05GSUdVUkFUSU9OIGFu ZCBBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9kZXBhcnNlLmMgICAgIHwgNDU2ICsrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9i YWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9j b21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAxMCArCiAzIGZpbGVzIGNoYW5nZWQsIDQ3MSBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMK aW5kZXggODEzYmFiODU2Ny4uNWJmYTgwMGZjMiAxMDA3NTUKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJz ZS5jCkBAIC01NCw2ICs1NCwxMCBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfcmFuZ2UuaCIKICNp bmNsdWRlICJjYXRhbG9nL3BnX3Jld3JpdGUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3NlcXVl bmNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c19jb25maWcuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX3RzX2RpY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX3BhcnNlci5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfdHNfdGVtcGxhdGUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5 cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKICNpbmNsdWRlICJjb21tYW5kcy9z ZXF1ZW5jZS5oIgpAQCAtMTU2LDYgKzE2MCwxMCBAQCBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9D b2x1bW5JZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJfdAog c3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpz dWJjbWQpOwogc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRvcihPaWQg b2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CiBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9E ZWZpbmVTdG10X1R5cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGlj IE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhPaWQgb2JqZWN0SWQsIERlZmlu ZVN0bXQgKmRlZmluZSwgT2JqZWN0QWRkcmVzcyBjb3BpZWQpOworc3RhdGljIE9ialRyZWUgKmRl cGFyc2VfRGVmaW5lU3RtdF9UU1BhcnNlcihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmlu ZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTRGljdGlvbmFyeShPaWQg b2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9E ZWZpbmVTdG10X1RTVGVtcGxhdGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOwog CiBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0sIGJvb2wgaXNf cmVzZXQpOwogc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRnVuY3Rpb25TZXQoVmFyaWFibGVTZXRL aW5kIGtpbmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKTsKQEAgLTU0MDYsNiArNTQxNCwyMiBA QCBkZXBhcnNlX0RlZmluZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsIE9iamVj dEFkZHJlc3Mgc2Vjb25kYXJ5T2JqKQogCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9U eXBlKG9iamVjdElkLCBkZWZpbmUpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBPQkpFQ1RfVFNDT05G SUdVUkFUSU9OOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhvYmpl Y3RJZCwgZGVmaW5lLCBzZWNvbmRhcnlPYmopOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1Rf VFNQQVJTRVI6CisJCQlkZWZTdG10ID0gZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKG9iamVj dElkLCBkZWZpbmUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgor CQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25hcnkob2JqZWN0SWQsIGRl ZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UU1RFTVBMQVRFOgorCQkJZGVmU3Rt dCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UU1RlbXBsYXRlKG9iamVjdElkLCBkZWZpbmUpOworCQkJ YnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3Qg a2luZCIpOwogCX0KQEAgLTU3NjYsNiArNTc5MCw0MjcgQEAgZGVwYXJzZV9EZWZpbmVTdG10X1R5 cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCiAJcmV0dXJuIHN0bXQ7CiB9CiAK K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhPaWQgb2JqZWN0 SWQsIERlZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJCQlPYmplY3RBZGRyZXNzIGNvcGllZCkKK3sK KwlIZWFwVHVwbGUgICB0c2NUdXA7CisJSGVhcFR1cGxlICAgdHNwVHVwOworCU9ialRyZWUJICAg KnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUZvcm1fcGdfdHNfY29uZmlnIHRzY0Zvcm07CisJ Rm9ybV9wZ190c19wYXJzZXIgdHNwRm9ybTsKKwlMaXN0CSAgICpsaXN0OworCisJdHNjVHVwID0g U2VhcmNoU3lzQ2FjaGUxKFRTQ09ORklHT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBjb25maWd1cmF0aW9uICV1IiwKKwkJCSBvYmpl Y3RJZCk7CisJdHNjRm9ybSA9IChGb3JtX3BnX3RzX2NvbmZpZykgR0VUU1RSVUNUKHRzY1R1cCk7 CisKKwl0c3BUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNQQVJTRVJPSUQsIE9iamVjdElkR2V0RGF0 dW0odHNjRm9ybS0+Y2ZncGFyc2VyKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzcFR1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBwYXJz ZXIgJXUiLAorCQkJIHRzY0Zvcm0tPmNmZ3BhcnNlcik7CisJdHNwRm9ybSA9IChGb3JtX3BnX3Rz X3BhcnNlcikgR0VUU1RSVUNUKHRzcFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJ ICoKKwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgKCV7 ZWxlbXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBw ZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVu dGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNjRm9ybS0+Y2ZnbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzY0Zvcm0tPmNmZ25hbWUpKSk7CisKKwkv KgorCSAqIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UuICBJZiB3ZSBoYXZlIENPUFknZWQgYW4g ZXhpc3RpbmcgY29uZmlnLCBhZGQKKwkgKiBhIENPUFkgY2xhdXNlOyBvdGhlcndpc2UgYWRkIGEg UEFSU0VSIGNsYXVzZS4KKwkgKi8KKwlsaXN0ID0gTklMOworCS8qIENPUFkgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiQ09QWT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAiY29weSIpOworCWlmIChjb3BpZWQub2JqZWN0SWQgIT0gSW52YWxpZE9pZCkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wLCAiJXt0c2NvbmZpZ31EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFRTQ29uZmlnUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNvcGll ZC5vYmplY3RJZCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQi LCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwkvKiBQQVJTRVIgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFSU0VSPSIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwYXJzZXIiKTsKKwlpZiAoY29waWVkLm9i amVjdElkID09IEludmFsaWRPaWQpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cGFy c2VyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNwRm9ybS0+cHJzbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3BGb3JtLT5wcnNuYW1lKSkpOworCWVs c2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlhcHBlbmRfYXJyYXlf b2JqZWN0KHN0bXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hl KHRzcFR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKHRzY1R1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30K Kworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKE9pZCBvYmpl Y3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIHRzcFR1cDsKKwlPYmpU cmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0OworCUZvcm1f cGdfdHNfcGFyc2VyIHRzcEZvcm07CisKKwl0c3BUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNQQVJT RVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQodHNwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQg c2VhcmNoIHBhcnNlciB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzcEZvcm0gPSAo Rm9ybV9wZ190c19wYXJzZXIpIEdFVFNUUlVDVCh0c3BUdXApOworCisJLyoKKwkgKiBWZXJib3Nl IHN5bnRheAorCSAqCisJICogQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiAle2lkZW50aXR5fUQg KCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJ YXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQgU0VBUkNIIFBBUlNFUiAle2lkZW50aXR5 fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3BGb3JtLT5wcnNuYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNwRm9ybS0+cHJzbmFtZSkpKTsKKworCS8qIEFk ZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0ID0gTklMOworCisJLyogU1RBUlQgKi8K Kwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1RBUlQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInN0YXJ0Iik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9j ZWR1cmV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc3N0YXJ0KSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBHRVRUT0tFTiAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJHRVRUT0tFTj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiZ2V0dG9rZW4iKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIl e3Byb2NlZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzdG9rZW4pKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEVORCAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTkQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImVuZCIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJl fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNlbmQpKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIExFWFRZUEVTICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIkxFWFRZUEVTPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJsZXh0eXBlcyIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2Vk dXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNsZXh0eXBlKSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBIRUFETElORSAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIRUFETElORT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiaGVhZGxpbmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0c3BGb3JtLT5wcnNo ZWFkbGluZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2hlYWRsaW5lKSk7CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwg Iigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNwVHVwKTsKKwor CXJldHVybiBzdG10OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRf VFNEaWN0aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBU dXBsZSAgIHRzZFR1cDsKKwlPYmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlM aXN0CSAgICpsaXN0OworCURhdHVtCQlvcHRpb25zOworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3Bn X3RzX2RpY3QgdHNkRm9ybTsKKworCXRzZFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU0RJQ1RPSUQs IE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNk VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNo IGRpY3Rpb25hcnkgIgorCQkJICJ3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0c2RGb3JtID0g KEZvcm1fcGdfdHNfZGljdCkgR0VUU1RSVUNUKHRzZFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ug c3ludGF4CisJICoKKwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lkZW50aXR5 fUQgKCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOwor CisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQgU0VBUkNIIERJQ1RJT05BUlkgJXtp ZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNkRm9ybS0+ZGlj dG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c2RGb3JtLT5kaWN0bmFtZSkpKTsK KworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0ID0gTklMOworCisJLyog VEVNUExBVEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVEVNUExBVEU9IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInRlbXBsYXRlIik7CisJYXBwZW5kX29iamVjdF9v YmplY3QodG1wLCAiJXt0ZW1wbGF0ZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoVFNUZW1wbGF0ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzZEZvcm0tPmRpY3R0 ZW1wbGF0ZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCisJLyoKKwkgKiBvcHRpb25zLiAgWFhYIHRoaXMgaXMgYSBwcmV0dHkgdXNlbGVzcyByZXBy ZXNlbnRhdGlvbiwgYnV0IHdlIGNhbid0IGRvCisJICogYmV0dGVyIHdpdGhvdXQgbW9yZSB0c19j YWNoZS5jIGNvb3BlcmF0aW9uIC4uLgorCSAqLworCW9wdGlvbnMgPSBTeXNDYWNoZUdldEF0dHIo VFNESUNUT0lELCB0c2RUdXAsCisJCQkJCQkJICBBbnVtX3BnX3RzX2RpY3RfZGljdGluaXRvcHRp b24sCisJCQkJCQkJICAmaXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiIiwgMCk7CisJ aWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7b3B0aW9uc31zIiwg VGV4dERhdHVtR2V0Q1N0cmluZyhvcHRpb25zKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIigle2VsZW1z OiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNkVHVwKTsKKworCXJldHVybiBz dG10OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNUZW1wbGF0 ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUgICB0c3RU dXA7CisJT2JqVHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAgICp0bXA7CisJTGlzdAkgICAqbGlz dDsKKwlGb3JtX3BnX3RzX3RlbXBsYXRlIHRzdEZvcm07CisKKwl0c3RUdXAgPSBTZWFyY2hTeXND YWNoZTEoVFNURU1QTEFURU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZCh0c3RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgdGV4dCBzZWFyY2ggdGVtcGxhdGUgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElk KTsKKwl0c3RGb3JtID0gKEZvcm1fcGdfdHNfdGVtcGxhdGUpIEdFVFNUUlVDVCh0c3RUdXApOwor CisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIFRFWFQgU0VBUkNIIFRF TVBMQVRFICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKQorCSAqLworCXN0bXQgPSBuZXdfb2Jq dHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiVEVYVCBTRUFS Q0ggVEVNUExBVEUgJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUodHN0Rm9ybS0+dG1wbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3RGb3Jt LT50bXBsbmFtZSkpKTsKKworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0 ID0gTklMOworCisJLyogSU5JVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTklUPSIsIDEs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJpbml0Iik7CisJaWYgKE9pZElzVmFs aWQodHN0Rm9ybS0+dG1wbGluaXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3By b2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0c3RGb3JtLT50bXBsaW5pdCkpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBMRVhJWkUgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiTEVYSVpFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJsZXhpemUiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2Nl ZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHN0Rm9ybS0+dG1wbGxleGl6ZSkpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29i amVjdChzdG10LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0 c3RUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlBbHRl clRTQ29uZmlndXJhdGlvblN0bXQgKm5vZGUgPSAoQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10ICop IGNtZC0+cGFyc2V0cmVlOworCU9ialRyZWUgKmNvbmZpZzsKKwlPYmpUcmVlICp0bXA7CisJTGlz dAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWludAkJCWk7CisKKwkvKgorCSAqIFZl cmJvc2Ugc3ludGF4CisJICogY2FzZSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORzoKKwkgKiBB TFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBREQgTUFQUElORyBG T1IgJXt0b2tlbnR5cGU6LCB9SSBXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQKKwkgKgorCSAqIGNh c2UgQUxURVJfVFNDT05GSUdfRFJPUF9NQVBQSU5HOgorCSAqIEFMVEVSIFRFWFQgU0VBUkNIIENP TkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIERST1AgTUFQUElORyAle2lmX2V4aXN0c31zIEZPUiAl e3Rva2VudHlwZX1JCisJICoKKwkgKiBjYXNlIEFMVEVSX1RTQ09ORklHX0FMVEVSX01BUFBJTkdf Rk9SX1RPS0VOOgorCSAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0 eX1EIEFMVEVSIE1BUFBJTkcgRk9SICV7dG9rZW50eXBlOiwgfUkgV0lUSCAle2RpY3Rpb25hcmll czosIH1ECisJICoKKwkgKiBjYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVDoKKwkgKiBB TFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5H IFJFUExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIFdJVEggJXtuZXdfZGljdGlvbmFyeX1ECisJICoK KwkgKiBjYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU46CisJICogQUxU RVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUxURVIgTUFQUElORyBG T1IgJXt0b2tlbnR5cGU6LCB9SSBSRVBMQUNFICV7b2xkX2RpY3Rpb25hcnl9RCBXSVRIICV7bmV3 X2RpY3Rpb25hcnl9RAorCSAqLworCisJY29uZmlnID0gbmV3X29ianRyZWUoIkFMVEVSIFRFWFQg U0VBUkNIIENPTkZJR1VSQVRJT04iKTsKKworCS8qIGRldGVybWluZSB0aGUgZm9ybWF0IHN0cmlu ZyBhcHByb3ByaWF0ZSB0byBlYWNoIHN1YmNvbW1hbmQgKi8KKwlzd2l0Y2ggKG5vZGUtPmtpbmQp CisJeworCQljYXNlIEFMVEVSX1RTQ09ORklHX0FERF9NQVBQSU5HOgorCQkJYXBwZW5kX29iamVj dF9vYmplY3QoY29uZmlnLCAiJXtpZGVudGl0eX1EIEFERCBNQVBQSU5HIiwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJ CQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19EUk9QX01BUFBJTkc6CisJCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjb25maWcsICIle2lkZW50aXR5fUQgRFJPUCBNQVBQSU5HIiwKKwkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwK KwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJJRiBFWElTVFMiLCAwKTsKKwkJCWFwcGVuZF9ib29sX29iamVj dCh0bXAsICJwcmVzZW50Iiwgbm9kZS0+bWlzc2luZ19vayk7CisJCQlhcHBlbmRfb2JqZWN0X29i amVjdChjb25maWcsICIle2lmX2V4aXN0c31zIiwgdG1wKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug QUxURVJfVFNDT05GSUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU46CisJCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjb25maWcsICIle2lkZW50aXR5fUQgQUxURVIgTUFQUElORyIsCisJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQs CisJCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQli cmVhazsKKworCQljYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVDoKKwkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIiwKKwkJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xh c3NJZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsK KwkJCWJyZWFrOworCisJCWNhc2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tF TjoKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBBTFRFUiBN QVBQSU5HIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRz Y2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJl c3Mub2JqZWN0SWQpKTsKKwkJCWJyZWFrOworCX0KKworCS8qIEFkZCB0aGUgYWZmZWN0ZWQgdG9r ZW4gbGlzdCwgZm9yIHN1YmNvbW1hbmRzIHRoYXQgaGF2ZSBvbmUgKi8KKwlpZiAobm9kZS0+a2lu ZCA9PSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORyB8fAorCQlub2RlLT5raW5kID09IEFMVEVS X1RTQ09ORklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxU RVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTiB8fAorCQlub2RlLT5raW5kID09IEFM VEVSX1RTQ09ORklHX0RST1BfTUFQUElORykKKwl7CisJCWxpc3QgPSBOSUw7CisJCWZvcmVhY2go Y2VsbCwgbm9kZS0+dG9rZW50eXBlKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmlu Z19vYmplY3Qoc3RyVmFsKGxmaXJzdChjZWxsKSkpKTsKKwkJYXBwZW5kX2FycmF5X29iamVjdChj b25maWcsICJGT1IgJXt0b2tlbnR5cGU6LCB9SSIsIGxpc3QpOworCX0KKworCS8qIGFkZCBmdXJ0 aGVyIHN1YmNvbW1hbmQtc3BlY2lmaWMgZWxlbWVudHMgKi8KKwlpZiAobm9kZS0+a2luZCA9PSBB TFRFUl9UU0NPTkZJR19BRERfTUFQUElORyB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RTQ09O RklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOKQorCXsKKwkJLyogQUREIE1BUFBJTkcgYW5kIEFM VEVSIE1BUFBJTkcgRk9SIG5lZWQgYSBsaXN0IG9mIGRpY3Rpb25hcmllcyAqLworCQlsaXN0ID0g TklMOworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5kLmF0c2NmZy5uZGljdHM7IGkrKykKKwkJewor CQkJT2JqVHJlZQkqZGljdG9iajsKKworCQkJZGljdG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJICBjbWQtPmQuYXRz Y2ZnLmRpY3RJZHNbaV0pOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwKKwkJCQkJCSAgIG5ld19v YmplY3Rfb2JqZWN0KGRpY3RvYmopKTsKKwkJfQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbmZp ZywgIldJVEggJXtkaWN0aW9uYXJpZXM6LCB9RCIsIGxpc3QpOworCX0KKwllbHNlIGlmIChub2Rl LT5raW5kID09IEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVCB8fAorCQkJIG5vZGUtPmtpbmQg PT0gQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTikKKwl7CisJCS8qIHRoZSBS RVBMQUNFIGZvcm1zIHdhbnQgb2xkIGFuZCBuZXcgZGljdGlvbmFyaWVzICovCisJCUFzc2VydChj bWQtPmQuYXRzY2ZnLm5kaWN0cyA9PSAyKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29uZmln LCAiUkVQTEFDRSAle29sZF9kaWN0aW9uYXJ5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNtZC0+ ZC5hdHNjZmcuZGljdElkc1swXSkpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb25maWcsICJX SVRIICV7bmV3X2RpY3Rpb25hcnl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2Nm Zy5kaWN0SWRzWzFdKSk7CisJfQorCisJcmV0dXJuIGNvbmZpZzsKK30KKworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9BbHRlclRTRGljdGlvbmFyeVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpw YXJzZXRyZWUpCit7CisJT2JqVHJlZSAqYWx0ZXJUU0Q7CisJT2JqVHJlZSAqdG1wOworCURhdHVt CQlvcHRpb25zOworCUxpc3QJICAgKmRlZmluaXRpb24gPSBOSUw7CisJYm9vbAkJaXNudWxsOwor CUhlYXBUdXBsZSAgIHRzZFR1cDsKKwlGb3JtX3BnX3RzX2RpY3QgdHNkRm9ybTsKKworCXRzZFR1 cCA9IFNlYXJjaFN5c0NhY2hlMShUU0RJQ1RPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNkVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIGRpY3Rpb25hcnkgIgorCQkJICJ3aXRoIE9J RCAldSIsIG9iamVjdElkKTsKKwl0c2RGb3JtID0gKEZvcm1fcGdfdHNfZGljdCkgR0VUU1RSVUNU KHRzZFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICogQUxURVIgVEVYVCBTRUFS Q0ggRElDVElPTkFSWSAle2lkZW50aXR5fUQgKCV7ZGVmaW5pdGlvbjosIH1zKQorCSAqLworCisJ YWx0ZXJUU0QgPSBuZXdfb2JqdHJlZSgiQUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSIpOwor CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJUU0QsICIle2lkZW50aXR5fUQiLAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2RGb3JtLT5kaWN0bmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJICBOYW1lU3RyKHRzZEZvcm0tPmRpY3RuYW1lKSkpOworCisJLyogQWRkIHRoZSBkZWZp bml0aW9uIGxpc3QgYWNjb3JkaW5nIHRvIHRoZSBwZ190c19kaWN0IGRpY3Rpbml0b3B0aW9uIGNv bHVtbiAqLworCW9wdGlvbnMgPSBTeXNDYWNoZUdldEF0dHIoVFNESUNUT0lELCB0c2RUdXAsCisJ CQkJCQkJICBBbnVtX3BnX3RzX2RpY3RfZGljdGluaXRvcHRpb24sCisJCQkJCQkJICAmaXNudWxs KTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiIiwgMCk7CisJaWYgKCFpc251bGwpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7b3B0aW9uc31zIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhv cHRpb25zKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZh bHNlKTsKKworCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJUU0QsICIoJXtkZWZpbml0aW9u OiwgfXMpIiwgZGVmaW5pdGlvbik7CisJUmVsZWFzZVN5c0NhY2hlKHRzZFR1cCk7CisKKwlyZXR1 cm4gYWx0ZXJUU0Q7Cit9CisKIC8qCiAgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQg KC4uLikKICAqLwpAQCAtNjYxMSw2ICs3MDU2LDEwIEBAIGRlcGFyc2VfUmVuYW1lU3RtdChPYmpl Y3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKIAkJY2FzZSBPQkpFQ1RfVFlQRToK IAkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKIAkJY2FzZSBPQkpFQ1RfRE9NQUlOOgorCQljYXNl IE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCWNhc2UgT0JKRUNUX1RTUEFSU0VSOgorCQljYXNlIE9C SkVDVF9UU1RFTVBMQVRFOgorCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CiAJCQl7CiAJ CQkJSGVhcFR1cGxlCW9ialR1cDsKIAkJCQlSZWxhdGlvbgljYXRhbG9nOwpAQCAtNzM1MSw2ICs3 ODAwLDEwIEBAIGRlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQog CQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlQ2FzdFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CiAJCQlicmVhazsKIAorCQljYXNlIFRfQWx0ZXJUU0RpY3Rpb25hcnlTdG10OgorCQkJY29tbWFu ZCA9IGRlcGFyc2VfQWx0ZXJUU0RpY3Rpb25hcnlTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwor CQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCWNvbW1hbmQgPSBOVUxMOwogCQkJZWxvZyhMT0cs ICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLApAQCAtNzQ3 Miw2ICs3OTI1LDkgQEAgZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAq Y21kLCBib29sIHZlcmJvc2VfbW9kZSkKIAkJY2FzZSBTQ1RfQ3JlYXRlT3BDbGFzczoKIAkJCXRy ZWUgPSBkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KGNtZCk7CiAJCQlicmVhazsKKwkJY2FzZSBT Q1RfQWx0ZXJUU0NvbmZpZzoKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyVFNDb25maWd1cmF0aW9u U3RtdChjbWQpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5leHBl Y3RlZCBkZXBhcnNlIG5vZGUgdHlwZSAlZCIsIGNtZC0+dHlwZSk7CiAJfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4IDE3ZWUxYzI2NTAuLjgxZWRiY2I0NjcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAgLTI1NTUsNyArMjU1NSwxMSBAQCBwdWJsaWNh dGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdTKQogCQkJCSBzdHJj bXAob2JqLT5vYmplY3R0eXBlLCAicG9saWN5IikgPT0gMAl8fAogCQkJCSBzdHJjbXAob2JqLT5v YmplY3R0eXBlLCAicnVsZSIpID09IDAgfHwKIAkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwg ImV4dGVuc2lvbiIpID09IDAgfHwKLQkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImZvcmVp Z24tZGF0YSB3cmFwcGVyIikgPT0gMCkKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImZv cmVpZ24tZGF0YSB3cmFwcGVyIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBl LCAidGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+ b2JqZWN0dHlwZSwgInRleHQgc2VhcmNoIGRpY3Rpb25hcnkiKSA9PSAwIHx8CisJCQkJIHN0cmNt cChvYmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCBwYXJzZXIiKSA9PSAwIHx8CisJCQkJIHN0 cmNtcChvYmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCB0ZW1wbGF0ZSIpID09IDApCiAJCQlj bWR0eXBlID0gRENUX09iamVjdERyb3A7CiAJCWVsc2UKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCA2NWU5ODc2NDE3Li4zN2QzMzZlN2FhIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtOTMzLDYgKzkzMywxNiBA QCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9u U3RtdCAqc3RtdCkKIAkJCUNNRFRBR19DUkVBVEVfRVhURU5TSU9OLAogCQkJQ01EVEFHX0FMVEVS X0VYVEVOU0lPTiwKIAkJCUNNRFRBR19EUk9QX0VYVEVOU0lPTiwKKwkJCUNNRFRBR19DUkVBVEVf VEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwKKwkJCUNNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9D T05GSUdVUkFUSU9OLAorCQkJQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwK KwkJCUNNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwKKwkJCUNNRFRBR19BTFRF Ul9URVhUX1NFQVJDSF9ESUNUSU9OQVJZLAorCQkJQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfRElD VElPTkFSWSwKKwkJCUNNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfUEFSU0VSLAorCQkJQ01EVEFH X0RST1BfVEVYVF9TRUFSQ0hfUEFSU0VSLAorCQkJQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9U RU1QTEFURSwKKwkJCUNNRFRBR19EUk9QX1RFWFRfU0VBUkNIX1RFTVBMQVRFLAogCQkJQ01EVEFH X0NSRUFURV9QT0xJQ1ksCiAJCQlDTURUQUdfQUxURVJfUE9MSUNZLAogCQkJQ01EVEFHX0RST1Bf UE9MSUNZLAotLSAKMi4zNy4xCgo= --00000000000072399e05ea605996 Content-Type: application/octet-stream; name="v25-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v25-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8xa4not2 RnJvbSBkYjE5NDI0MWYzZmVlOWFlMjU1NjRmMjE5ZDljMTk0MGEyMjM4NjcyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNod2FyYW4gQyA8dmlnbmVzaDIxQGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAzMCBTZXAgMjAyMiAxMjowNToyMyArMDUzMApTdWJqZWN0OiBbUEFUQ0ggMy82 XSBTdXBwb3J0IENSRUFURSBUQUJMRSBBUyBTRUxFQ1QgSU5UTwoKVGhlIG1haW4gaWRlYSBvZiBy ZXBsaWNhdGluZyB0aGUgQ1JFQVRFIFRBQkxFIEFTIGlzIHRoYXQgd2UgZGVwcmFzZSB0aGUgQ1JF QVRFClRBQkxFIEFTIGludG8gYSBzaW1wbGUgQ1JFQVRFIFRBQkxFKHdpdGhvdXQgc3VicXVlcnkp IGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQKYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIGFuZCBiZWZv cmUgd3JpdGluZyBkYXRhIGludG8gdGhlIHRhYmxlIGFuZCByZXBsaWNhdGUKdGhlIGluY29taW5n IHdyaXRlcyBsYXRlciBhcyBub3JtYWwgSU5TRVJUcy4gSW4gdGhpcyBhcHBvcmFjaCwgd2UgZG9u J3QgZXhlY3V0ZQp0aGUgc3VicXVlcnkgb24gc3Vic2NyaWJlciBzbyB0aGF0IGRvbid0IG5lZWQg dG8gbWFrZSBzdXJlIGFsbCB0aGUgb2JqZWN0cwpyZWZlcmVuY2VkIGluIHRoZSBzdWJxdWVyeSBh bHNvIGV4aXN0cyBpbiBzdWJzY3JpYmVyLiBBbmQgVGhpcyBhcHByb2FjaCB3b3Jrcwpmb3IgYWxs IGtpbmQgb2YgY29tbWFuZHMoZS5nLiBDUkFFVEUgVEFCTEUgQVMgW1NFTEVDVF1bRVhFQ1VURV1b VkFMVUVTXSkKCkludHJvZHVjaW5nIGEgbmV3IHR5cGUgb2YgZXZlbnQgdHJpZ2dlciAidGFibGVf aW5pdF93cml0ZSIuIHdoaWNoIHdvdWxkIGJlIGZpcmVkCmZvciBDUkVBVEUgVEFCTEUgQVMvU0VM RUNUIElOVE8gYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIGFuZApiZWZvcmUgYW55IG90aGVyIG1v ZGlmaWNhdGlvbi4gd2UgZGVwYXJzZSB0aGUgY29tbWFuZCBpbiB0aGUgdGFibGVfaW5pdF93cml0 ZSBldmVudAp0cmlnZ2VyIGFuZCBXQUwgbG9nIHRoZSBkZXBhcnNlZCBqc29uIHN0cmluZy4gVGhl IHdhbHNlbmRlciB3aWxsIHNlbmQgdGhlCnN0cmluZyB0byBzdWJzY3JpYmVyLiBBbmQgaW5jb21p bmcgSU5TRVJUcyB3aWxsIGFsc28gYmUgcmVwbGljYXRlZC4KLS0tCiBzcmMvYmFja2VuZC9jb21t YW5kcy9jcmVhdGVhcy5jICAgICAgICB8ICAxMCArKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYyAgICAgfCAgMjQgKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5jICAgfCAxNzIgKysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvY29t bWFuZHMvcHVibGljYXRpb25jbWRzLmMgfCAgIDkgKysKIHNyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0 eS5jICAgICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hl LmMgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgIHwg ICAzICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCAgIHwgICA0ICsKIHNy Yy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggICAgIHwgICA5ICstCiBzcmMvaW5jbHVk ZS91dGlscy9ldnRjYWNoZS5oICAgICAgICAgICB8ICAgMyArLQogMTAgZmlsZXMgY2hhbmdlZCwg MjMyIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvY3JlYXRlYXMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMK aW5kZXggMTUyYzI5YjU1MS4uMGQ4MGM2Yzk3NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvY3JlYXRlYXMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBA IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3RvYXN0aW5nLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvY3JlYXRlYXMuaCIKKyNp bmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvbWF0 dmlldy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ByZXBhcmUuaCIKICNpbmNsdWRlICJjb21tYW5k cy90YWJsZWNtZHMuaCIKQEAgLTE0Myw2ICsxNDQsMTUgQEAgY3JlYXRlX2N0YXNfaW50ZXJuYWwo TGlzdCAqYXR0ckxpc3QsIEludG9DbGF1c2UgKmludG8pCiAJCVN0b3JlVmlld1F1ZXJ5KGludG9S ZWxhdGlvbkFkZHIub2JqZWN0SWQsIHF1ZXJ5LCBmYWxzZSk7CiAJCUNvbW1hbmRDb3VudGVySW5j cmVtZW50KCk7CiAJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIEZpcmUgdGhlIHRyaWdnZXIgZm9y IHRhYmxlX2luaXRfd3JpdGUgYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIHNvCisJCSAqIHRoYXQg d2UgY2FuIGFjY2VzcyB0aGUgY2F0YWxvZyBpbmZvIGFib3V0IHRoZSBuZXdseSBjcmVhdGVkIHRh YmxlIGluCisJCSAqIHRoZSB0cmlnZ2VyIGZ1bmN0aW9uLgorCQkgKi8KKwkJRXZlbnRUcmlnZ2Vy VGFibGVJbml0V3JpdGUoKE5vZGUgKikgY3JlYXRlLCBpbnRvUmVsYXRpb25BZGRyKTsKKwl9CiAK IAlyZXR1cm4gaW50b1JlbGF0aW9uQWRkcjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5j CmluZGV4IDhkYzMxNTA2MWIuLjgxM2JhYjg1NjcgMTAwNzU1Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbF9kZXBhcnNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFy c2UuYwpAQCAtNzE2OSw2ICs3MTY5LDI3IEBAIGRlcGFyc2VfUnVsZVN0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCiAJcmV0dXJuIHJ1bGVTdG10OwogfQogCisvKgorICogRGVwYXJz ZSBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqCisgKiBkZXBhcnNlX0NyZWF0ZVN0bXQgZG8g dGhlIGFjdHVhbCB3b3JrIGFzIHdlIGRlcGFyc2UgdGhlIGZpbmFsIENyZWF0ZVN0bXQgZm9yCisg KiBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9DcmVhdGVUYWJsZUFzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb2Jq ZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1Rf Q3JlYXRlVGFibGVBcyk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPmQuY3Rhcy5yZWFsX2NyZWF0ZTsK KwlvYmplY3RJZCA9IGNtZC0+ZC5jdGFzLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlyZXR1cm4gZGVw YXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworfQorCisKIC8qCiAgKiBIYW5k bGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5kcy4KICAqCkBAIC03NDQyLDYgKzc0NjMsOSBA QCBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVy Ym9zZV9tb2RlKQogCQljYXNlIFNDVF9HcmFudDoKIAkJCXRyZWUgPSBkZXBhcnNlX0dyYW50U3Rt dChjbWQpOwogCQkJYnJlYWs7CisJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CisJCQl0cmVlID0g ZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdChjbWQpOworCQkJYnJlYWs7CiAJCWNhc2UgU0NUX0Fs dGVyT3BGYW1pbHk6CiAJCQl0cmVlID0gZGVwYXJzZV9BbHRlck9wRmFtaWx5KGNtZCk7CiAJCQli cmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCBhNDk5OTg0MmZmLi4x N2VlMWMyNjUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2Vy LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0xMzMsNyAr MTMzLDggQEAgQ3JlYXRlRXZlbnRUcmlnZ2VyKENyZWF0ZUV2ZW50VHJpZ1N0bXQgKnN0bXQpCiAJ aWYgKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9zdGFydCIpICE9IDAgJiYK IAkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX2VuZCIpICE9IDAgJiYKIAkJ c3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgIT0gMCAmJgotCQlzdHJjbXAoc3Rt dC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDApCisJCXN0cmNtcChzdG10LT5ldmVu dG5hbWUsICJ0YWJsZV9yZXdyaXRlIikgIT0gMCAmJgorCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1l LCAidGFibGVfaW5pdF93cml0ZSIpICE9IDApCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNv ZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCSBlcnJtc2coInVucmVjb2duaXplZCBldmVu dCBuYW1lIFwiJXNcIiIsCkBAIC0xNTksNyArMTYwLDggQEAgQ3JlYXRlRXZlbnRUcmlnZ2VyKENy ZWF0ZUV2ZW50VHJpZ1N0bXQgKnN0bXQpCiAJLyogVmFsaWRhdGUgdGFnIGxpc3QsIGlmIGFueS4g Ki8KIAlpZiAoKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9zdGFydCIpID09 IDAgfHwKIAkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9lbmQiKSA9PSAw IHx8Ci0JCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ryb3AiKSA9PSAwKQorCQkgc3Ry Y21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgPT0gMCB8fAorCQkgc3RyY21wKHN0bXQt PmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSA9PSAwKQogCQkmJiB0YWdzICE9IE5VTEwp CiAJCXZhbGlkYXRlX2RkbF90YWdzKCJ0YWciLCB0YWdzKTsKIAllbHNlIGlmIChzdHJjbXAoc3Rt dC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpID09IDAKQEAgLTU4NSw3ICs1ODcsOCBAQCBF dmVudFRyaWdnZXJDb21tb25TZXR1cChOb2RlICpwYXJzZXRyZWUsCiAJCWRiZ3RhZyA9IENyZWF0 ZUNvbW1hbmRUYWcocGFyc2V0cmVlKTsKIAkJaWYgKGV2ZW50ID09IEVWVF9ERExDb21tYW5kU3Rh cnQgfHwKIAkJCWV2ZW50ID09IEVWVF9ERExDb21tYW5kRW5kIHx8Ci0JCQlldmVudCA9PSBFVlRf U1FMRHJvcCkKKwkJCWV2ZW50ID09IEVWVF9TUUxEcm9wIHx8CisJCQlldmVudCA9PSBFVlRfVGFi bGVJbml0V3JpdGUpCiAJCXsKIAkJCWlmICghY29tbWFuZF90YWdfZXZlbnRfdHJpZ2dlcl9vayhk Ymd0YWcpKQogCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGNvbW1hbmQgdGFnIFwiJXNcIiIs IEdldENvbW1hbmRUYWdOYW1lKGRiZ3RhZykpOwpAQCAtODY4LDYgKzg3MSwxNjMgQEAgRXZlbnRU cmlnZ2VyVGFibGVSZXdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2lkIHRhYmxlT2lkLCBpbnQgcmVh c29uKQogCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CiB9CiAKKworLyoKKyAqIEV2ZW50VHJp Z2dlclRhYmxlSW5pdFdyaXRlU3RhcnQKKyAqICAgICBQcmVwYXJlIHRvIHJlY2VpdmUgZGF0YSBv biBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRVQgSU5UTyBjb21tYW5kIGFib3V0CisgKiAgICAgdG8g YmUgZXhlY3V0ZWQuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQo Tm9kZSAqcGFyc2V0cmVlKQoreworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCUNvbGxlY3RlZENv bW1hbmQgKmNvbW1hbmQ7CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQgdHJpZ2dlciBjb250ZXh0IG5v dCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRDb2xsZWN0aW9u SW5oaWJpdGVkKQorCQlyZXR1cm47CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8o Y3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOworCisJY29tbWFuZCA9IHBhbGxvYyhzaXpl b2YoQ29sbGVjdGVkQ29tbWFuZCkpOworCisJY29tbWFuZC0+dHlwZSA9IFNDVF9DcmVhdGVUYWJs ZUFzOworCWNvbW1hbmQtPmluX2V4dGVuc2lvbiA9IGNyZWF0aW5nX2V4dGVuc2lvbjsKKwljb21t YW5kLT5kLmN0YXMuYWRkcmVzcyA9IEludmFsaWRPYmplY3RBZGRyZXNzOworCWNvbW1hbmQtPmQu Y3Rhcy5yZWFsX2NyZWF0ZSA9IE5VTEw7CisJY29tbWFuZC0+cGFyc2V0cmVlID0gY29weU9iamVj dChwYXJzZXRyZWUpOworCisJY29tbWFuZC0+cGFyZW50ID0gY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5jdXJyZW50Q29tbWFuZDsKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRD b21tYW5kID0gY29tbWFuZDsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQor CisvKgorICogRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQKKyAqCQlGaW5pc2ggdXAgc2F2 aW5nIGFuIENSRUFURSBUQUJMRSBBUy9TRUxFQ1QgSU5UTyBjb21tYW5kLgorICoKKyAqIEZJWE1F IHRoaXMgQVBJIGlzbid0IGNvbnNpZGVyaW5nIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGFuIHhhY3Qv c3VieGFjdCBpcworICogYWJvcnRlZCBwYXJ0d2F5IHRocm91Z2guICBQcm9iYWJseSBpdCdzIGJl c3QgdG8gYWRkIGFuCisgKiBBdEVPU3ViWGFjdF9FdmVudFRyaWdnZXJzKCkgdG8gZml4IHRoaXMu CisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKHZvaWQpCit7CisJQ29s bGVjdGVkQ29tbWFuZCAqcGFyZW50OworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29u dGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29s bGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJcGFyZW50ID0gY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+cGFyZW50OworCisJcGZyZWUoY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCk7CisKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3Rh dGUtPmN1cnJlbnRDb21tYW5kID0gcGFyZW50OworfQorCisvKgorICogcHVibGljYXRpb25fZGVw YXJzZV90YWJsZV9pbml0X3dyaXRlCisgKgorICogRGVwYXJzZSB0aGUgZGRsIHRhYmxlIGNyZWF0 ZSBjb21tYW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX3Rh YmxlX2luaXRfd3JpdGUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCQkJCXJlbHBlcnNpc3Q7 CisJQ29sbGVjdGVkQ29tbWFuZCAgICpjbWQ7CisJY2hhciAgIAkJCSAgICpqc29uX3N0cmluZzsK KworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwg Im5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKworCWNtZCA9IGN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJQXNzZXJ0KGNtZCk7CisKKwlyZWxw ZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0 SWQpOworCisJLyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hv c2UgdGFyZ2V0IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFibGUuCisJICoKKwkgKiBXZSB3 aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dl ZCB0YWJsZXMKKwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJz Y3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBs YXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJICogcmV3cml0ZSBt ZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJICovCisJaWYgKHJlbHBlcnNp c3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxM KTsKKworCS8qIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93 IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAqLworCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5 X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJTG9n TG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0 SWQsIERDVF9TaW1wbGVDbWQsCisJCQkJCQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9zdHJp bmcpICsgMSk7CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQorCisvKgorICog RmlyZSB0YWJsZV9pbml0X3Jld3JpdGUgdHJpZ2dlcnMuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dl clRhYmxlSW5pdFdyaXRlKE5vZGUgKnJlYWxfY3JlYXRlLCBPYmplY3RBZGRyZXNzIGFkZHJlc3Mp Cit7CisJTGlzdAkgICAqcnVubGlzdDsKKwlFdmVudFRyaWdnZXJEYXRhIHRyaWdkYXRhOworCUNv bGxlY3RlZENvbW1hbmQgKmNvbW1hbmQ7CisKKwkvKgorCSAqIFNlZSBFdmVudFRyaWdnZXJERExD b21tYW5kU3RhcnQgZm9yIGEgZGlzY3Vzc2lvbiBhYm91dCB3aHkgZXZlbnQKKwkgKiB0cmlnZ2Vy cyBhcmUgZGlzYWJsZWQgaW4gc2luZ2xlIHVzZXIgbW9kZS4KKwkgKi8KKwlpZiAoIUlzVW5kZXJQ b3N0bWFzdGVyKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEFsc28gZG8gbm90aGluZyBpZiBvdXIg c3RhdGUgaXNuJ3Qgc2V0IHVwLCB3aGljaCBpdCB3b24ndCBiZSBpZiB0aGVyZQorCSAqIHdlcmVu J3QgYW55IHJlbGV2YW50IGV2ZW50IHRyaWdnZXJzIGF0IHRoZSBzdGFydCBvZiB0aGUgY3VycmVu dCBEREwKKwkgKiBjb21tYW5kLiAgVGhpcyB0ZXN0IG1pZ2h0IHRoZXJlZm9yZSBzZWVtIG9wdGlv bmFsLCBidXQgaXQncworCSAqICpuZWNlc3NhcnkqLCBiZWNhdXNlIEV2ZW50VHJpZ2dlckNvbW1v blNldHVwIG1pZ2h0IGZpbmQgdHJpZ2dlcnMgdGhhdAorCSAqIGRpZG4ndCBleGlzdCBhdCB0aGUg dGltZSB0aGUgY29tbWFuZCBzdGFydGVkLgorCSAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlKQorCQlyZXR1cm47CisKKwkvKiBEbyBub3RoaW5nIGlmIG5vIGNvbW1hbmQgd2FzIGNv bGxlY3RlZC4gKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1h bmQpCisJCXJldHVybjsKKworCWNvbW1hbmQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1 cnJlbnRDb21tYW5kOworCisJcnVubGlzdCA9IEV2ZW50VHJpZ2dlckNvbW1vblNldHVwKGNvbW1h bmQtPnBhcnNldHJlZSwKKwkJCQkJCQkJCSAgRVZUX1RhYmxlSW5pdFdyaXRlLAorCQkJCQkJCQkJ ICAidGFibGVfaW5pdF93cml0ZSIsCisJCQkJCQkJCQkgICZ0cmlnZGF0YSk7CisJaWYgKHJ1bmxp c3QgPT0gTklMKQorCQlyZXR1cm47CisKKwkvKiBTZXQgdGhlIHJlYWwgQ3JlYXRlVGFibGUgc3Rh dG1lbnQgYW5kIG9iamVjdCBhZGRyZXNzICovCisJY29tbWFuZC0+ZC5jdGFzLnJlYWxfY3JlYXRl ID0gcmVhbF9jcmVhdGU7CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBhZGRyZXNzOworCisJ LyogUnVuIHRoZSB0cmlnZ2Vycy4gKi8KKwlFdmVudFRyaWdnZXJJbnZva2UocnVubGlzdCwgJnRy aWdkYXRhKTsKKworCS8qIENsZWFudXAuICovCisJbGlzdF9mcmVlKHJ1bmxpc3QpOworCisJLyoK KwkgKiBNYWtlIHN1cmUgYW55dGhpbmcgdGhlIGV2ZW50IHRyaWdnZXJzIGRpZCB3aWxsIGJlIHZp c2libGUgdG8gdGhlIG1haW4KKwkgKiBjb21tYW5kLgorCSAqLworCUNvbW1hbmRDb3VudGVySW5j cmVtZW50KCk7Cit9CisKIC8qCiAgKiBJbnZva2UgZWFjaCBldmVudCB0cmlnZ2VyIGluIGEgbGlz dCBvZiBldmVudCB0cmlnZ2Vycy4KICAqLwpAQCAtMTE0OSw3ICsxMzA5LDggQEAgdHJhY2tEcm9w cGVkT2JqZWN0c05lZWRlZCh2b2lkKQogCSAqLwogCXJldHVybiAoRXZlbnRDYWNoZUxvb2t1cChF VlRfU1FMRHJvcCkgIT0gTklMKSB8fAogCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVSZXdy aXRlKSAhPSBOSUwpIHx8Ci0JCShFdmVudENhY2hlTG9va3VwKEVWVF9ERExDb21tYW5kRW5kKSAh PSBOSUwpOworCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERMQ29tbWFuZEVuZCkgIT0gTklMKSB8 fAorCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVJbml0V3JpdGUpICE9IE5JTCk7CiB9CiAK IC8qCkBAIC0xODY4LDYgKzIwMjksNyBAQCBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcyhQ R19GVU5DVElPTl9BUkdTKQogCQkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToKIAkJCWNhc2UgU0NU X0NyZWF0ZU9wQ2xhc3M6CiAJCQljYXNlIFNDVF9BbHRlclRTQ29uZmlnOgorCQkJY2FzZSBTQ1Rf Q3JlYXRlVGFibGVBczoKIAkJCQl7CiAJCQkJCWNoYXIJICAgKmlkZW50aXR5OwogCQkJCQljaGFy CSAgICp0eXBlOwpAQCAtMTg4NSw2ICsyMDQ3LDggQEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29t bWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCWFkZHIgPSBjbWQtPmQuY3JlYXRlb3BjLmFk ZHJlc3M7CiAJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUU0NvbmZpZykKIAkJ CQkJCWFkZHIgPSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3M7CisJCQkJCWVsc2UgaWYgKGNtZC0+dHlw ZSA9PSBTQ1RfQWx0ZXJUU0NvbmZpZykKKwkJCQkJCWFkZHIgPSBjbWQtPmQuY3Rhcy5hZGRyZXNz OwogCiAJCQkJCS8qCiAJCQkJCSAqIElmIGFuIG9iamVjdCB3YXMgZHJvcHBlZCBpbiB0aGUgc2Ft ZSBjb21tYW5kIHdlIG1heSBlbmQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1 YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMK aW5kZXggNTg0MzA4M2Q2NS4uNjVlOTg3NjQxNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGlj YXRpb25jbWRzLmMKQEAgLTk4Niw2ICs5ODYsMTEgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VT dGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCQlDTURUQUdfUkVG UkVTSF9NQVRFUklBTElaRURfVklFVwogCQl9OwogCisJCUNvbW1hbmRUYWcJaW5pdF9jb21tYW5k c1tdID0geworCQkJQ01EVEFHX0NSRUFURV9UQUJMRV9BUywKKwkJCUNNRFRBR19TRUxFQ1RfSU5U TworCQl9OworCiAJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIg Ki8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5kIiwgZW5k X2NvbW1hbmRzLAogCQkJCQkJCQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2VsZiwgcHVi b2lkKTsKQEAgLTk5Nyw2ICsxMDAyLDEwIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUg KnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQkvKiBDcmVhdGUgdGhlIHRh YmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAqLwogCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmln Z2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0ZV9jb21tYW5kcywKIAkJCQkJCQkJCSBsZW5ndGhv ZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUg dGFibGVfaW5pdF93cml0ZSBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVu dFRyaWdnZXIoInRhYmxlX2luaXRfd3JpdGUiLCBpbml0X2NvbW1hbmRzLAorCQkJCQkJCQkJIGxl bmd0aG9mKGluaXRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CiAJfQogCiAJdGFibGVfY2xv c2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3Av dXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5kZXggMjQ3ZDA4MTZhZC4u YzYzNDkyYjQ5YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKKysrIGIv c3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKQEAgLTE2NjUsOCArMTY2NSwxMCBAQCBQcm9jZXNz VXRpbGl0eVNsb3coUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCWJyZWFrOwogCiAJCQljYXNlIFRf Q3JlYXRlVGFibGVBc1N0bXQ6CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChw YXJzZXRyZWUpOwogCQkJCWFkZHJlc3MgPSBFeGVjQ3JlYXRlVGFibGVBcyhwc3RhdGUsIChDcmVh dGVUYWJsZUFzU3RtdCAqKSBwYXJzZXRyZWUsCiAJCQkJCQkJCQkJCXBhcmFtcywgcXVlcnlFbnYs IHFjKTsKKwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCgpOwogCQkJCWJyZWFrOwog CiAJCQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hl LmMKaW5kZXggZjdmNzE2NWY3Zi4uN2ZiOGNiMjkxZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRj YWNoZS5jCkBAIC0xNjcsNiArMTY3LDggQEAgQnVpbGRFdmVudFRyaWdnZXJDYWNoZSh2b2lkKQog CQkJZXZlbnQgPSBFVlRfU1FMRHJvcDsKIAkJZWxzZSBpZiAoc3RyY21wKGV2dGV2ZW50LCAidGFi bGVfcmV3cml0ZSIpID09IDApCiAJCQlldmVudCA9IEVWVF9UYWJsZVJld3JpdGU7CisJCWVsc2Ug aWYgKHN0cmNtcChldnRldmVudCwgInRhYmxlX2luaXRfd3JpdGUiKSA9PSAwKQorCQkJZXZlbnQg PSBFVlRfVGFibGVJbml0V3JpdGU7CiAJCWVsc2UKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdAppbmRleCBjZTFiMTdmNWFiLi44MWZiZmQ0YWFjIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKQEAgLTExODM4LDQgKzExODM4LDcgQEAKIHsgb2lkID0+ICc0NjQ2JywgZGVzY3Ig PT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UgdGFibGUgcmV3cml0ZScsCiAgIHBy b25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZScsIHByb3JldHR5cGUg PT4gJ2V2ZW50X3RyaWdnZXInLAogICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJs aWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnIH0sCit7IG9pZCA9PiAnNDY0NycsIGRlc2Ny ID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIGluaXQnLAorICBwcm9u YW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUnLCBwcm9yZXR0eXBl ID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVi bGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5oCmluZGV4IGZkMmVlN2ZmZTQuLmE5ZTBmNzFmNmEgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTU1LDYgKzU1LDEwIEBAIGV4dGVybiB2b2lkIEV2 ZW50VHJpZ2dlckRETENvbW1hbmRFbmQoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2 ZW50VHJpZ2dlclNRTERyb3AoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJp Z2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9pZCB0YWJsZU9pZCwgaW50IHJlYXNv bik7CiAKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQoTm9kZSAq cGFyc2V0cmVlKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlKE5vZGUg KnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJp Z2dlclRhYmxlSW5pdFdyaXRlRW5kKHZvaWQpOworCiBleHRlcm4gYm9vbCBFdmVudFRyaWdnZXJC ZWdpbkNvbXBsZXRlUXVlcnkodm9pZCk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJFbmRDb21w bGV0ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJuIGJvb2wgdHJhY2tEcm9wcGVkT2JqZWN0c05lZWRlZCh2 b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggYi9z cmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IGI1MzI5NGJmNTcuLjNkMjk0 YTAzNzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKKysr IGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAtMjksNyArMjksOCBAQCB0 eXBlZGVmIGVudW0gQ29sbGVjdGVkQ29tbWFuZFR5cGUKIAlTQ1RfQWx0ZXJPcEZhbWlseSwKIAlT Q1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlcywKIAlTQ1RfQ3JlYXRlT3BDbGFzcywKLQlTQ1RfQWx0 ZXJUU0NvbmZpZworCVNDVF9BbHRlclRTQ29uZmlnLAorCVNDVF9DcmVhdGVUYWJsZUFzCiB9IENv bGxlY3RlZENvbW1hbmRUeXBlOwogCiAvKgpAQCAtMTAxLDYgKzEwMiwxMiBAQCB0eXBlZGVmIHN0 cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9iamVjdFR5cGUJb2JqdHlwZTsKIAkJfQkJ CWRlZnByaXZzOworCisJCXN0cnVjdAorCQl7CisJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJ CQlOb2RlCQkgKnJlYWxfY3JlYXRlOworCQl9CQkJY3RhczsKIAl9CQkJZDsKIAogCXN0cnVjdCBD b2xsZWN0ZWRDb21tYW5kICpwYXJlbnQ7CS8qIHdoZW4gbmVzdGVkICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUu aAppbmRleCBkZGI2N2E2OGZhLi4xZTY0ODMxN2FlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9ldnRjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKQEAgLTIy LDcgKzIyLDggQEAgdHlwZWRlZiBlbnVtCiAJRVZUX0RETENvbW1hbmRTdGFydCwKIAlFVlRfRERM Q29tbWFuZEVuZCwKIAlFVlRfU1FMRHJvcCwKLQlFVlRfVGFibGVSZXdyaXRlCisJRVZUX1RhYmxl UmV3cml0ZSwKKwlFVlRfVGFibGVJbml0V3JpdGUKIH0gRXZlbnRUcmlnZ2VyRXZlbnQ7CiAKIHR5 cGVkZWYgc3RydWN0Ci0tIAoyLjM3LjEKCg== --00000000000072399e05ea605996 Content-Type: application/octet-stream; name="v25-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v25-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8xa4nos1 RnJvbSBhMTJjYWUyMTU0MDhmMzYwNzMxOGVhNTk1NGIyZmE4Nzc4NDc5MDlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjkgU2VwIDIwMjIgMDk6MTA6NDQgLTA0MDAKU3ViamVjdDogW1BBVENI IDIvNl0gU3VwcG9ydCBEREwgcmVwbGljYXRpb24uCgpUbyBzdXBwb3J0IERETCByZXBsaWNhdGlv biwgd2UgdXNlIGV2ZW50IHRyaWdnZXIgYW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcy4gV2hp bGUgY3JlYXRpbmcgYSBwdWJsaWNhdGlvbiwgd2UgcmVnaXN0ZXIgYSBjb21tYW5kIGVuZAp0cmln Z2VyIHRoYXQgZGVwYXJzZXMgdGhlIERETCBhcyBhIEpTT04gYmxvYiwgYW5kIFdBTCBsb2dzIGl0 LiBUaGUgZXZlbnQKdHJpZ2dlciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgYXQgdGhlIHRpbWUg b2YgZHJvcCBwdWJsaWNhdGlvbi4gVGhlCldBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwgYW5kIHNl bmRzIGl0IGRvd25zdHJlYW0gc2ltaWxhciB0byBvdGhlciBETUwKY29tbWFuZHMuIFRoZSBzdWJz Y3JpYmVyIHRoZW4gY29udmVydHMgSlNPTiBiYWNrIHRvIHRoZSBEREwgY29tbWFuZCBzdHJpbmcK YW5kIGV4ZWN1dGVzIGl0LiBJbiB0aGUgc3Vic2NyaWJlciwgd2UgYWxzbyBhZGQgdGhlIG5ld2x5 IGFkZGVkIHJlbCB0bwpwZ19zdWJzY3JpcHRpb25fcmVsIHNvIHRoYXQgdGhlIERNTCBjaGFuZ2Vz IG9uIHRoZSBuZXcgdGFibGUgY2FuIGJlCnJlcGxpY2F0ZWQgd2l0aG91dCBoYXZpbmcgdG8gbWFu dWFsbHkgcnVuCiJBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggUFVCTElDQVRJT04iLgoK VGhpcyBpcyBhIFBPQyBwYXRjaCB0byBzaG93IGhvdyB1c2luZyBldmVudCB0cmlnZ2VycyBhbmQg RERMIGRlcGFyc2luZwpmYWNpbGl0aWVzIHdlIGNhbiBpbXBsZW1lbnQgRERMIHJlcGxpY2F0aW9u LiBTbywgdGhlIGltcGxlbWVudGF0aW9uIGlzCnJlc3RyaWN0ZWQgdG8gQ1JFQVRFIFRBQkxFL0FM VEVSIFRBQkxFL0RST1AgVEFCTEUgY29tbWFuZHMuCgotIEZvciBub24tcmV3cml0ZSBBTFRFUiBv YmplY3QgY29tbWFuZCBhbmQKLSAgICAgQ1JFQVRFIG9iamVjdCBjb21tYW5kOgp3ZSBkZXBhcnNl IHRoZSBjb21tYW5kIGF0IGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2VyIGFuZCBXQUwgbG9n IHRoZQpkZXBhcnNlZCBqc29uIHN0cmluZy4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwg YW5kIHNlbmRzIGl0IHRvCnN1YnNjcmliZXIgaWYgdGhlIGNyZWF0ZWQvYWx0ZXJlZCB0YWJsZSBp cyBwdWJsaXNoZWQuIEl0IHN1cHBvcnRzIG1vc3Qgb2YKQUxURVIgVEFCTEUgY29tbWFuZCBleGNl cHQgc29tZSBjb21tYW5kcyhEREwgcmVsYXRlZCB0byBQQVJUSVRJT05FRCBUQUJMRQouLi4pIHRo YXQgaW50cm9kdWNlZCByZWNlbnRseSB3aGljaCBoYXZlbid0IGJlZW4gc3VwcG9ydGVkIGJ5IHRo ZSBjdXJyZW50CmRkbF9kZXBhcnNlciwgd2Ugd2lsbCBzdXBwb3J0IHRoYXQgbGF0ZXIuCgpOb3Rl IHRoYXQgdGhlIHJlcGxpY2F0aW9uIGZvciBBTFRFUiBJTkRFWCBjb21tYW5kIGlzIHN0aWxsIHVu ZGVyCnByb2dyZXNzLgoKLSBGb3IgRFJPUCBvYmplY3Q6ClRoZSAnY29tbWFuZCBzdGFydCcgZXZl bnQgaGFuZGxlciBsb2dzIGEgZGRsIG1lc3NhZ2Ugd2l0aCB0aGUgcmVsaWRzIG9mCnRoZSB0YWJs ZXMgdGhhdCBhcmUgZHJvcHBlZCB3aGljaCB0aGUgb3V0cHV0IHBsdWdpbiAocGdvdXRwdXQpIHN0 b3JlcyBpbgppdHMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQg aXQgaXMgZm9yIGEgdGFibGUgdGhhdCBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbi4gTGF0ZXIg dGhlICdjb21tYW5kIGVuZCcgZXZlbnQgaGFuZGxlciBzZW5kcyB0aGUKYWN0dWFsIGRyb3AgbWVz c2FnZS4gUGdvdXRwdXQgb24gcmVjZWl2aW5nIHRoZSBjb21tYW5kIGVuZCwgb25seSBzZW5kcyBv dXQKdGhlIGRyb3AgY29tbWFuZCBvbmx5IGlmIGl0IGlzIGZvciBvbmUgb2YgdGhlIHJlbGlkcyBt YXJrZWQgZm9yIGRlbGV0aW5nLgpUaGUgcmVhc29uIHdlIGhhdmUgdG8gZG8gdGhpcyBpcyBiZWNh dXNlLCBvbmNlIHRoZSBsb2dpY2FsIGRlY29kZXIKcmVjZWl2ZXMgdGhlICdjb21tYW5kIGVuZCcg bWVzc2FnZSwgIHRoZSByZWxpZCBvZiB0aGUgdGFibGUgaXMgbm8gbG9uZ2VyCnZhbGlkIGFzIGl0 IGhhcyBiZWVuIGRlbGV0ZWQgYXMgcGFydCBvZiBpbnZhbGlkYXRpb25zIHJlY2VpdmVkIGZvciB0 aGUKZHJvcCB0YWJsZSBjb21tYW5kLiBJdCBpcyBubyBsb25nZXIgcG9zc2libGUgdG8gdmVyaWZ5 IGlmIHRoZSB0YWJsZSBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbiBsaXN0IG9yIG5vdC4gVG8g bWFrZSB0aGlzIHBvc3NpYmxlLCBJIGhhdmUgYWRkZWQKdHdvIG1vcmUgZWxlbWVudHMgdG8gdGhl IGRkbCB4bG9nIGFuZCBkZGwgbWVzc2FnZSwgKHJlbGlkIGFuZCBjbWR0eXBlKS4KCldlIGNvdWxk IGhhdmUgYWxzbyBoYW5kbGVkIGFsbCB0aGlzIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUgYXMgd2Vs bCwgYnV0CnRoYXQgd291bGQgbWVhbiBzZW5kaW5nIHNwdXJpb3VzIGRkbCBtZXNzYWdlcyBmb3Ig dGFibGVzIHRoYXQgYXJlIG5vdCBwYXJ0Cm9mIHRoZSBwdWJsaWNhdGlvbi4KCi0gRm9yIHRhYmxl X3Jld3JpdGUgQUxURVIgVEFCTEUgY29tbWFuZDoKKEFMVEVSIENPTFVNTiBUWVBFLCBBREQgQ09M VU1OIERFRkFVTFQsIFNFVCBMT0dHRUQsIFNFVCBBQ0NFU1MgTUVUSE9EKQoKd2UgZGVwYXJzZSB0 aGUgY29tbWFuZCBhbmQgV0FMIGxvZyB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcgYXQKdGFibGVf cmV3cml0ZSBldmVudCB0cmlnZ2VyLiBUaGUgV0FMU2VuZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQg c2VuZHMgaXQgdG8Kc3Vic2NyaWJlciBpZiB0aGUgYWx0ZXJlZCB0YWJsZSBpcyBwdWJsaXNoZWQu IFRoZW4sIHRoZSBXQUxTZW5kZXIgd2lsbApjb252ZXJ0IHRoZSB1cGNvbWluZyByZXdyaXRlIElO U0VSVHMgdG8gVVBEQVRFcyBhbmQgc2VuZCB0aGVtIHRvCnN1YnNjcmliZXIgc28gdGhhdCB0aGUg ZGF0YSBiZXR3ZWVuIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBjYW4gYWx3YXlzIGJlCmNvbnNp c3RlbnQuIE5vdGUgdGhhdCB0aGUgdGFibGVzIHRoYXQgcHVibGlzaCByZXdyaXRlIGRkbCBtdXN0 IGhhdmUgYQpyZXBsaWNhIGlkZW50aXR5IGNvbmZpZ3VyZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0 byByZXBsaWNhdGUgdGhlIHVwY29taW5nCnJld3JpdGUgVVBEQVRFcy4KCldlIGRvIHRoaXMgd2F5 IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKDEpIFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBk ZGwgY291bGQgYWxyZWFkeSBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlzaGVyIGFuZCBzdWJzY3Jp YmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4dHJhIGRhdGEgaW4gc3Vic2NyaWJlciB3aGljaApkb2Vz bid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCByZXdyaXR0ZW4sIHdlIG5lZWQgdG8gbGV0 IHRoZQpzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRsIHRvIHJld3Jp dGUgYWxsIHRoZSBkYXRhIGF0CmZpcnN0LgoKKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyBy ZXdyaXRlIGRkbCBjb3VsZCBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlzaGVyIGFuZCBzdWJzY3Jp YmVyKGR1ZSB0byBkaWZmZXJlbnQgZnVuY3Rpb25zL29wZXJhdG9ycyB1c2VkIGR1cmluZwpyZXdy aXRlKSwgc28gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhlIHJld3JpdGUgVVBEQVRFcyB0byBrZWVw IHRoZSBkYXRhCmNvbnNpc3RlbnQuCgpUTyBJTVBST1ZFOgpUaGlzIGFwcHJvYWNoIGNvdWxkIGJl IGltcHJvdmVkIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmliZXIgdHJ5IHRvIHVwZGF0ZQp0aGUgZXh0 cmEgZGF0YSBpdHNlbGYgaW5zdGVhZCBvZiBkb2luZyBmdWxseSByZXdyaXRlIGRkbCBhbmQgdXNl IHRoZQp1cGNvbWluZyByZXdyaXRlIFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRhLiBU byBhY2hpZXZlIHRoaXMsIHdlCmNvdWxkIG1vZGlmeSB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcg dG8gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSByZXdyaXRlCnBhcnQgYW5kIGFkZCBzb21lIGxvZ2lj IGluIHN1YnNjcmliZXIgdG8gdXBkYXRlIHRoZSBleHRyYSBkYXRhLgpCZXNpZGVzLCB3ZSBtYXkg bm90IG5lZWQgdG8gc2VuZCByZXdyaXRlIGNoYW5nZXMgZm9yIGFsbCB0eXBlIG9mIHJld3JpdGUK ZGRsLCBmb3IgZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBza2lwIHNlbmRpbmcgcmV3cml0ZSBj aGFuZ2VzIGZvciBBTFRFUgpUQUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBkYXRhIGluIHRoZSB0YWJs ZSBkb2Vzbid0IGFjdHVhbGx5IGJlIGNoYW5nZWQuIFdlCmNvdWxkIHVzZSB0aGUgZGVwYXJzZXIg YW5kIGV2ZW50IHRyaWdnZXIgdG8gZmlsdGVyIHRoZXNlIGRkbHMgYW5kIHNraXAKc2VuZGluZyBy ZXdyaXRlIGNoYW5nZXMgZm9yIHRoZW0uCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L01ha2VmaWxlICAgICAgICAgIHwgICAxICsKIC4uLi9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRk bG1zZ2Rlc2MuYyAgICAgICB8ICA1MiArKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uYyAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmln Z2VyLmMgICAgICAgICAgfCAyNDUgKysrKysrKysrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVi bGljYXRpb25jbWRzLmMgICAgICAgIHwgMTQ1ICsrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv dGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL01ha2VmaWxlICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9kZGxtZXNzYWdlLmMgIHwgIDg2ICsrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvZGVjb2RlLmMgICAgICB8ICA0MSArKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9sb2dpY2FsLmMgICAgIHwgIDkzICsrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcHJvdG8uYyAgICAgICB8ICA0OCArKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cmVvcmRlcmJ1ZmZlci5jICAgICAgIHwgMTM2ICsrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwgMjMyICsrKysrKysrKysKIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgICB8IDE5MiArKysrKysrLQogc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgICB8ICAyMSArLQogc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfd2Fs ZHVtcC9ybWdyZGVzYy5jICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BzcWwvZGVz Y3JpYmUuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMTcgKy0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9ybWdybGlzdC5oICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5oICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuaCAgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v ZGRsbWVzc2FnZS5oICAgICAgICAgIHwgIDYwICsrKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v ZGVjb2RlLmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xv Z2ljYWxwcm90by5oICAgICAgICB8ICAgNyArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0 cHV0X3BsdWdpbi5oICAgICAgIHwgIDI3ICsrCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291 dHB1dC5oICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRl cmJ1ZmZlci5oICAgICAgIHwgIDM5ICsrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwu b3V0ICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGlj YXRpb24ub3V0ICAgICB8IDQyMCArKysrKysrKystLS0tLS0tLS0KIDMxIGZpbGVzIGNoYW5nZWQs IDE2NjUgaW5zZXJ0aW9ucygrKSwgMjI5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKaW5kZXggZjg4ZDcyZmQ4Ni4uYjhlMjll OGRmMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBA QCBPQkpTID0gXAogCWhhc2hkZXNjLm8gXAogCWhlYXBkZXNjLm8gXAogCWxvZ2ljYWxtc2dkZXNj Lm8gXAorCWxvZ2ljYWxkZGxtc2dkZXNjLm8gXAogCW14YWN0ZGVzYy5vIFwKIAluYnRkZXNjLm8g XAogCXJlbG1hcGRlc2MubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MvbG9naWNhbGRkbG1zZ2Rlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dp Y2FsZGRsbXNnZGVzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjgx ZGVlNTI5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mv bG9naWNhbGRkbG1zZ2Rlc2MuYwpAQCAtMCwwICsxLDUyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBsb2dpY2FsZGRsbXNnZGVzYy5jCisgKgkgIHJtZ3IgZGVzY3JpcHRvciByb3V0aW5l cyBmb3IgcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDIwMTUtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdl LmgiCisKK3ZvaWQKK2xvZ2ljYWxkZGxtc2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpCit7CisJY2hhcgkgICAqcmVjID0gWExvZ1JlY0dldERhdGEocmVjb3Jk KTsKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFT SzsKKworCWlmIChpbmZvID09IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwl7CisJCXhsX2xv Z2ljYWxfZGRsX21lc3NhZ2UgKnhscmVjID0gKHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKikgcmVj OworCQljaGFyCSAgICpwcmVmaXggPSB4bHJlYy0+bWVzc2FnZTsKKwkJY2hhcgkgICAqbWVzc2Fn ZSA9IHhscmVjLT5tZXNzYWdlICsgeGxyZWMtPnByZWZpeF9zaXplOworCQljaGFyCSAgICpzZXAg PSAiIjsKKworCQlBc3NlcnQocHJlZml4W3hscmVjLT5wcmVmaXhfc2l6ZV0gIT0gJ1wwJyk7CisK KwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJwcmVmaXggXCIlc1wiOyBwYXlsb2FkICglenUgYnl0 ZXMpOiAiLAorCQkJCQkJIHByZWZpeCwgeGxyZWMtPm1lc3NhZ2Vfc2l6ZSk7CisJCWFwcGVuZFN0 cmluZ0luZm8oYnVmLCAicmVsaWQgJXUgY21kdHlwZSAldSIsIHhscmVjLT5yZWxpZCwgeGxyZWMt PmNtZHR5cGUpOworCQkvKiBXcml0ZSBtZXNzYWdlIHBheWxvYWQgYXMgYSBzZXJpZXMgb2YgaGV4 IGJ5dGVzICovCisJCWZvciAoaW50IGNudCA9IDA7IGNudCA8IHhscmVjLT5tZXNzYWdlX3NpemU7 IGNudCsrKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJTAyWCIsIHNlcCwgKHVu c2lnbmVkIGNoYXIpIG1lc3NhZ2VbY250XSk7CisJCQlzZXAgPSAiICI7CisJCX0KKwl9Cit9CisK K2NvbnN0IGNoYXIgKgorbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBpbmZvKQoreworCWlm ICgoaW5mbyAmIH5YTFJfSU5GT19NQVNLKSA9PSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJ CXJldHVybiAiRERMIE1FU1NBR0UiOworCisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9n L3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggNTk5NjcwOThiMy4uNzIxZDAyM2FhNSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwpAQCAtMTAwNSw2ICsxMDA1LDcgQEAgR2V0UHVibGlj YXRpb24oT2lkIHB1YmlkKQogCXB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBwdWJmb3JtLT5w dWJ1cGRhdGU7CiAJcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IHB1YmZvcm0tPnB1YmRlbGV0 ZTsKIAlwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBwdWJmb3JtLT5wdWJ0cnVuY2F0ZTsK KwlwdWItPnB1YmFjdGlvbnMucHViZGRsID0gcHViZm9ybS0+cHViZGRsOwogCXB1Yi0+cHVidmlh cm9vdCA9IHB1YmZvcm0tPnB1YnZpYXJvb3Q7CiAKIAlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCA0NDFmMjlkNjg0Li5hNDk5OTg0MmZm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0zNyw4ICszNywxMSBAQAog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9mdW5jLmgiCiAj aW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgor I2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJ0Y29wL2RlcGFyc2Vf dXRpbGl0eS5oIgogI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgorI2luY2x1ZGUgInRjb3AvZGRs X2RlcGFyc2UuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2V2dGNhY2hlLmgiCkBAIC0xNTM3LDYgKzE1NDAsNyBA QCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKQogCiAJY29tbWFu ZC0+ZC5hbHRlclRhYmxlLmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CiAJY29tbWFuZC0+ ZC5hbHRlclRhYmxlLm9iamVjdElkID0gSW52YWxpZE9pZDsKKwljb21tYW5kLT5kLmFsdGVyVGFi bGUucmV3cml0ZSA9IGZhbHNlOwogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0gTklM OwogCWNvbW1hbmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKIApAQCAtMTU3 MCw3ICsxNTc0LDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJZCkK ICAqIGludGVybmFsbHksIHNvIHRoYXQncyBhbGwgdGhhdCB0aGlzIGNvZGUgbmVlZHMgdG8gaGFu ZGxlIGF0IHRoZSBtb21lbnQuCiAgKi8KIHZvaWQKLUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRh YmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQorRXZlbnRUcmln Z2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFk ZHJlc3MsIGJvb2wgcmV3cml0ZSkKIHsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlDb2xsZWN0 ZWRBVFN1YmNtZCAqbmV3c3ViOwpAQCAtMTU5MCw2ICsxNTk0LDcgQEAgRXZlbnRUcmlnZ2VyQ29s bGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3Mp CiAJbmV3c3ViLT5hZGRyZXNzID0gYWRkcmVzczsKIAluZXdzdWItPnBhcnNldHJlZSA9IGNvcHlP YmplY3Qoc3ViY21kKTsKIAorCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1h bmQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9IHJld3JpdGU7CiAJY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPQogCQlsYXBwZW5k KGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5z dWJjbWRzLCBuZXdzdWIpOwogCkBAIC0yMTc1LDMgKzIxODAsMjQxIEBAIHN0cmluZ2lmeV9hZGVm cHJpdnNfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpCiAKIAlyZXR1cm4gIj8/PyI7CQkJCS8q IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIH0KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2Vf ZGRsX2NvbW1hbmRfc3RhcnQKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgY29tbWFuZCBhbmQgbG9n IGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydChQ R19GVU5DVElPTl9BUkdTKQoreworCUV2ZW50VHJpZ2dlckRhdGEgKnRyaWdkYXRhOworCWNoYXIJ CSpjb21tYW5kID0gcHNwcmludGYoIkRyb3AgdGFibGUgY29tbWFuZCBzdGFydCIpOworCURyb3BT dG10CSpzdG10OworCUxpc3RDZWxsCSpjZWxsMTsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RS SUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2Vy IG1hbmFnZXIiKTsKKworCXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dlckRhdGEgKikgZmNpbmZvLT5j b250ZXh0OworCXN0bXQJID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7CisKKwkv KiBleHRyYWN0IHRoZSByZWxpZCBmcm9tIHRoZSBwYXJzZSB0cmVlICovCisJZm9yZWFjaChjZWxs MSwgc3RtdC0+b2JqZWN0cykKKwl7CisJCWNoYXIJcmVscGVyc2lzdDsKKwkJTm9kZQkqb2JqZWN0 ID0gbGZpcnN0KGNlbGwxKTsKKwkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQlSZWxhdGlvbiBy ZWxhdGlvbiA9IE5VTEw7CisKKwkJYWRkcmVzcyA9IGdldF9vYmplY3RfYWRkcmVzcyhzdG10LT5y ZW1vdmVUeXBlLAorCQkJCQkJCQkJIG9iamVjdCwKKwkJCQkJCQkJCSAmcmVsYXRpb24sCisJCQkJ CQkJCQkgQWNjZXNzRXhjbHVzaXZlTG9jaywKKwkJCQkJCQkJCSB0cnVlKTsKKworCQlyZWxwZXJz aXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShhZGRyZXNzLm9iamVjdElkKTsKKworCQkvKgorCQkg KiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxl IGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkgKiBXZSB3aWxsIGdlbmVyYXRl IHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZAorCQkgKiB0YWJs ZXMgY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRl LiBUaGlzCisJCSAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VU IExPR0dFRCBjb21tYW5kIGFuZCB0aGUKKwkJICogaW5jb21pbmcgcmV3cml0ZSBtZXNzYWdlIHdp dGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlpZiAocmVscGVyc2lzdCA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQorCQl7CisJCQl0YWJsZV9jbG9zZShyZWxhdGlvbiwgTm9Mb2Nr KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2Ui LCBhZGRyZXNzLm9iamVjdElkLCBEQ1RfVGFibGVEcm9wU3RhcnQsCisJCQkJCQkJIGNvbW1hbmQs IHN0cmxlbihjb21tYW5kKSArIDEpOworCisJCWlmIChyZWxhdGlvbikKKwkJCXRhYmxlX2Nsb3Nl KHJlbGF0aW9uLCBOb0xvY2spOworCX0KKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwor fQorCisvKgorICogcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlCisgKgorICogRGVw YXJzZSB0aGUgZGRsIHRhYmxlIHJld3JpdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1 bQorcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJY2hhcgkJCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1hbmQgICAqY21kOworCWNoYXIJ CQkgICAqanNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5m bykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7 CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCisJ QXNzZXJ0KGNtZCAmJiBjbWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlKTsKKworCXJlbHBlcnNpc3Qg PSBnZXRfcmVsX3BlcnNpc3RlbmNlKGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKTsKKworCS8q CisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0 YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRhYmxlLgorCSAqCisJICogV2Ugd2lsbCBnZW5lcmF0 ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQgdGFibGVzCisJ ICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRl LiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQg TE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCSAqIHJld3JpdGUgbWVzc2FnZSB3aXRo b3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAqLworCWlmIChyZWxwZXJzaXN0ID09IFJFTFBF UlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisKKwkvKiBE ZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBv ZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNt ZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3RyaW5nICE9IE5VTEwpCisJCUxvZ0xvZ2ljYWxERExN ZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQsIERDVF9UYWJsZUFs dGVyLAorCQkJCQkJCSBqc29uX3N0cmluZywgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCisJ cmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2Rl cGFyc2VfZGRsX2NvbW1hbmRfZW5kCisgKgorICogRGVwYXJzZSB0aGUgZGRsIGNvbW1hbmQgYW5k IGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5k KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTGlzdENlbGwgICAqbGM7CisJc2xpc3RfaXRlciAgaXRl cjsKKwlEZXBhcnNlZENvbW1hbmRUeXBlIHR5cGU7CisJT2lkIHJlbGlkOworCisJaWYgKCFDQUxM RURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5 IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJZm9yZWFjaChsYywgY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jb21tYW5kTGlzdCkKKwl7CisJCWNoYXIJCQkJcmVscGVyc2lzdCA9IFJFTFBF UlNJU1RFTkNFX1BFUk1BTkVOVDsKKwkJQ29sbGVjdGVkQ29tbWFuZCAgICpjbWQgPSBsZmlyc3Qo bGMpOworCQljaGFyCQkJICAgKmpzb25fc3RyaW5nOworCisJCS8qIFJld3JpdGUgRERMIGhhcyBi ZWVuIGhhbmRsZWQgaW4gdGFibGVfcmV3cml0ZSB0cmlnZ2VyICovCisJCWlmIChjbWQtPmQuYWx0 ZXJUYWJsZS5yZXdyaXRlKQorCQl7CisJCQlSZW5hbWVTdG10ICpyZW5hbWVTdG10ID0gKFJlbmFt ZVN0bXQgKiljbWQtPnBhcnNldHJlZTsKKworCQkJaWYgKHJlbmFtZVN0bXQgJiYgcmVuYW1lU3Rt dC0+cmVsYXRpb25UeXBlICE9IE9CSkVDVF9UWVBFICYmCisJCQkJcmVuYW1lU3RtdC0+cmVsYXRp b25UeXBlICE9IE9CSkVDVF9UQUJMRSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjbWQt PnR5cGUgPT0gU0NUX1NpbXBsZSAmJgorCQkJIU9pZElzVmFsaWQoY21kLT5kLnNpbXBsZS5hZGRy ZXNzLm9iamVjdElkKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX0Fs dGVyVGFibGUpCisJCXsKKwkJCXJlbGlkID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7CisJ CQl0eXBlID0gRENUX1RhYmxlQWx0ZXI7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBPbmx5IFND VF9TaW1wbGUgZm9yIG5vdyAqLworCQkJcmVsaWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2Jq ZWN0SWQ7CisJCQl0eXBlID0gRENUX1NpbXBsZUNtZDsKKwkJfQorCisJCWlmIChnZXRfcmVsX3Jl bGtpbmQocmVsaWQpKQorCQkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UocmVsaWQp OworCisJCS8qCisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9z ZSB0YXJnZXQgdGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAqIFdl IHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9n Z2VkIHRhYmxlcworCQkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBz dWJzY3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkJICogcG9zc2libGUgdG8gZGlyZWN0bHkg cmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCQkgKiByZXdy aXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlmIChy ZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCQljb250aW51ZTsKKworCQkvKgor CQkgKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNv ZGluZyBvZiB0aGUKKwkJICogc2FtZS4KKwkJICovCisJCWpzb25fc3RyaW5nID0gZGVwYXJzZV91 dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwkJaWYgKGpzb25fc3RyaW5nID09IE5VTEwp CisJCQljb250aW51ZTsKKworCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIHJlbGlk LCB0eXBlLCBqc29uX3N0cmluZywKKwkJCQkJCQkgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOwor CX0KKworCXNsaXN0X2ZvcmVhY2goaXRlciwgJihjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPlNR TERyb3BMaXN0KSkKKwl7CisJCXZvbGF0aWxlIFNRTERyb3BPYmplY3QgKm9iajsKKwkJRHJvcFN0 bXQJCQkgICAqc3RtdDsKKwkJRXZlbnRUcmlnZ2VyRGF0YSAJICAgKnRyaWdkYXRhOworCQljaGFy CQkJCSAgICpjb21tYW5kOworCQlEZXBhcnNlZENvbW1hbmRUeXBlCQljbWR0eXBlOworCQljb25z dCBjaGFyCQkJICAgKnRtcHR5cGU7CisKKwkJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAq KSBmY2luZm8tPmNvbnRleHQ7CisJCXN0bXQJID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJz ZXRyZWU7CisKKwkJb2JqID0gc2xpc3RfY29udGFpbmVyKFNRTERyb3BPYmplY3QsIG5leHQsIGl0 ZXIuY3VyKTsKKworCQlpZiAoc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRhYmxlIikgPT0gMCkK KwkJCWNtZHR5cGUgPSBEQ1RfVGFibGVEcm9wRW5kOworCQllbHNlIGlmIChzdHJjbXAob2JqLT5v YmplY3R0eXBlLCAic2VxdWVuY2UiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5 cGUsICJzY2hlbWEiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJpbmRl eCIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImZ1bmN0aW9uIikgPT0g MCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAicHJvY2VkdXJlIikgPT0gMCB8fAor CQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAib3BlcmF0b3IiKSA9PSAwIHx8CisJCQkJIHN0 cmNtcChvYmotPm9iamVjdHR5cGUsICJvcGVyYXRvciBjbGFzcyIpID09IDAgfHwKKwkJCQkgc3Ry Y21wKG9iai0+b2JqZWN0dHlwZSwgIm9wZXJhdG9yIGZhbWlseSIpID09IDAgfHwKKwkJCQkgc3Ry Y21wKG9iai0+b2JqZWN0dHlwZSwgImNhc3QiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9i amVjdHR5cGUsICJ0eXBlIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAi ZG9tYWluIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidHJpZ2dlciIp ID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImNvbnZlcnNpb24iKSA9PSAw IHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJwb2xpY3kiKSA9PSAwCXx8CisJCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJydWxlIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2Jq LT5vYmplY3R0eXBlLCAiZXh0ZW5zaW9uIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmpl Y3R0eXBlLCAiZm9yZWlnbi1kYXRhIHdyYXBwZXIiKSA9PSAwKQorCQkJY21kdHlwZSA9IERDVF9P YmplY3REcm9wOworCQllbHNlCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBDaGFuZ2UgZm9y ZWlnbi1kYXRhIHdyYXBwZXIgdG8gZm9yZWlnbiBkYXRhIHdyYXBwZXIuCisJCSAqLworCQlpZiAo c3RybmNtcChvYmotPm9iamVjdHR5cGUsICJmb3JlaWduLWRhdGEgd3JhcHBlciIsIDIwKSA9PSAw KQorCQl7CisJCQl0bXB0eXBlID0gcHN0cmR1cCgiZm9yZWlnbiBkYXRhIHdyYXBwZXIiKTsKKwkJ CWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3BfY29tbWFuZChvYmotPm9iamlkZW50aXR5LCB0bXB0eXBl LAorCQkJCQkJCQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsKKwkJfQorCQllbHNlCisJCQljb21tYW5k ID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQob2JqLT5vYmppZGVudGl0eSwgb2JqLT5vYmplY3R0eXBl LAorCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZpb3IpOworCisJCWlmIChjb21tYW5kID09IE5VTEwp CisJCQljb250aW51ZTsKKworCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIG9iai0+ YWRkcmVzcy5vYmplY3RJZCwgY21kdHlwZSwKKwkJCQkJCQkgY29tbWFuZCwgc3RybGVuKGNvbW1h bmQpICsgMSk7CisJfQorCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXggYThiNzVlYjFiZS4uNTg0MzA4M2Q2 NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTM3LDEwICszNywx MiBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oIgogI2luY2x1ZGUgImZ1 bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVu Y3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFy c2VfY2xhdXNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NvbGxhdGUuaCIKICNpbmNsdWRl ICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VyLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVk ZSAidXRpbHMvYXJyYXkuaCIKQEAgLTk2LDYgKzk4LDcgQEAgcGFyc2VfcHVibGljYXRpb25fb3B0 aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJcHViYWN0aW9ucy0+cHVidXBkYXRlID0gdHJ1ZTsK IAlwdWJhY3Rpb25zLT5wdWJkZWxldGUgPSB0cnVlOwogCXB1YmFjdGlvbnMtPnB1YnRydW5jYXRl ID0gdHJ1ZTsKKwlwdWJhY3Rpb25zLT5wdWJkZGwgPSBmYWxzZTsKIAkqcHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QgPSBmYWxzZTsKIAogCS8qIFBhcnNlIG9wdGlvbnMgKi8KQEAgLTE0Myw2ICsx NDYsOCBAQCBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJ CQkJcHViYWN0aW9ucy0+cHViZGVsZXRlID0gdHJ1ZTsKIAkJCQllbHNlIGlmIChzdHJjbXAocHVi bGlzaF9vcHQsICJ0cnVuY2F0ZSIpID09IDApCiAJCQkJCXB1YmFjdGlvbnMtPnB1YnRydW5jYXRl ID0gdHJ1ZTsKKwkJCQllbHNlIGlmIChzdHJjbXAocHVibGlzaF9vcHQsICJkZGwiKSA9PSAwKQor CQkJCQlwdWJhY3Rpb25zLT5wdWJkZGwgPSB0cnVlOwogCQkJCWVsc2UKIAkJCQkJZXJlcG9ydChF UlJPUiwKIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCkBAIC03MjcsNiAr NzMyLDUzIEBAIENoZWNrUHViUmVsYXRpb25Db2x1bW5MaXN0KGNoYXIgKnB1Ym5hbWUsIExpc3Qg KnRhYmxlcywKIAl9CiB9CiAKKy8qCisgKiBDcmVhdGUgZXZlbnQgdHJpZ2dlciB3aGljaCBpcyB1 c2VkIGZvciBEREwgcmVwbGljYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitDcmVhdGVERExSZXBs aWNhRXZlbnRUcmlnZ2VyKGNoYXIgKmV2ZW50bmFtZSwgQ29tbWFuZFRhZyAqY29tbWFuZHMsCisJ CQkJCQkJIGludCBuY29tbWFuZHMsIE9iamVjdEFkZHJlc3MgcHViYWRkcmVzcywKKwkJCQkJCQkg T2lkIHB1Ym9pZCkKK3sKKwlpbnQJCQkJCWk7CisJTGlzdAkJCSAgICp0YWdzID0gTklMOworCU9p ZAkJCQkJdHJpZ2dlcl9pZDsKKwlPYmplY3RBZGRyZXNzCQlyZWZlcmVuY2VkOworCUNyZWF0ZUV2 ZW50VHJpZ1N0bXQgKmRkbF90cmlnZ2VyOworCWNoYXIJCQkJdHJpZ2dlcl9uYW1lW05BTUVEQVRB TEVOXTsKKwljaGFyCQkJCXRyaWdnZXJfZnVuY19uYW1lW05BTUVEQVRBTEVOXTsKKwlzdGF0aWMg Y29uc3QgY2hhciAgICp0cmlnZ2VyX25hbWVfcHJlZml4ID0gInBnX2RlcGFyc2VfdHJpZ18lc18l dSI7CisJc3RhdGljIGNvbnN0IGNoYXIgICAqdHJpZ2dlcl9mdW5jX3ByZWZpeCA9ICJwdWJsaWNh dGlvbl9kZXBhcnNlXyVzIjsKKworCWRkbF90cmlnZ2VyID0gbWFrZU5vZGUoQ3JlYXRlRXZlbnRU cmlnU3RtdCk7CisKKwlzbnByaW50Zih0cmlnZ2VyX25hbWUsIHNpemVvZih0cmlnZ2VyX25hbWUp LCB0cmlnZ2VyX25hbWVfcHJlZml4LAorCQkJIGV2ZW50bmFtZSwgcHVib2lkKTsKKwlzbnByaW50 Zih0cmlnZ2VyX2Z1bmNfbmFtZSwgc2l6ZW9mKHRyaWdnZXJfZnVuY19uYW1lKSwgdHJpZ2dlcl9m dW5jX3ByZWZpeCwKKwkJCSBldmVudG5hbWUpOworCisJZGRsX3RyaWdnZXItPnRyaWduYW1lID0g cHN0cmR1cCh0cmlnZ2VyX25hbWUpOworCWRkbF90cmlnZ2VyLT5ldmVudG5hbWUgPSBldmVudG5h bWU7CisJZGRsX3RyaWdnZXItPmZ1bmNuYW1lID0gU3lzdGVtRnVuY05hbWUodHJpZ2dlcl9mdW5j X25hbWUpOworCisJZm9yIChpID0gMDsgaSA8IG5jb21tYW5kczsgaSsrKQorCXsKKwkJU3RyaW5n ICp0YWcgPSBtYWtlU3RyaW5nKHBzdHJkdXAoR2V0Q29tbWFuZFRhZ05hbWUoY29tbWFuZHNbaV0p KSk7CisJCXRhZ3MgPSBsYXBwZW5kKHRhZ3MsIHRhZyk7CisJfQorCisJZGRsX3RyaWdnZXItPndo ZW5jbGF1c2UgPSBsaXN0X21ha2UxKG1ha2VEZWZFbGVtKCJ0YWciLCAoTm9kZSAqKSB0YWdzLCAt MSkpOworCisJdHJpZ2dlcl9pZCA9IENyZWF0ZUV2ZW50VHJpZ2dlcihkZGxfdHJpZ2dlcik7CisK KwkvKgorCSAqIFJlZ2lzdGVyIHRoZSBldmVudCB0cmlnZ2VycyBhcyBpbnRlcm5hbGx5IGRlcGVu ZGVudCBvbiB0aGUKKwkgKiBwdWJsaWNhdGlvbi4KKwkgKi8KKwlPYmplY3RBZGRyZXNzU2V0KHJl ZmVyZW5jZWQsIEV2ZW50VHJpZ2dlclJlbGF0aW9uSWQsIHRyaWdnZXJfaWQpOworCXJlY29yZERl cGVuZGVuY3lPbigmcmVmZXJlbmNlZCwgJnB1YmFkZHJlc3MsIERFUEVOREVOQ1lfSU5URVJOQUwp OworfQorCiAvKgogICogQ3JlYXRlIG5ldyBwdWJsaWNhdGlvbi4KICAqLwpAQCAtNzk3LDYgKzg0 OSw4IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGlj YXRpb25TdG10ICpzdG10KQogCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZWxldGUpOwog CXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPQogCQlCb29sR2V0 RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CisJdmFsdWVzW0FudW1fcGdfcHVibGljYXRp b25fcHViZGRsIC0gMV0gPQorCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGwpOwogCXZh bHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnZpYXJvb3QgLSAxXSA9CiAJCUJvb2xHZXREYXR1 bShwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CiAKQEAgLTg1Nyw2ICs5MTEsOTQgQEAgQ3Jl YXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQg KnN0bXQpCiAJCX0KIAl9CiAKKwkvKgorCSAqIENyZWF0ZSBhbiBldmVudCB0cmlnZ2VyIHRvIGFs bG93IGxvZ2dpbmcgb2YgRERMIHN0YXRlbWVudHMuCisJICoKKwkgKiBUT0RPOiBXZSBuZWVkIHRv IGZpbmQgYSBiZXR0ZXIgc3ludGF4IHRvIGFsbG93IHJlcGxpY2F0aW9uIG9mIERETAorCSAqIHN0 YXRlbWVudHMuCisJICoKKwkgKiBYWFg6IFRoaXMgY29kZSBpcyBqdXN0IHRvIHNob3cgdGhlIHJl cGxpY2F0aW9uIG9mIENSRUFURS9BTFRFUi9EUk9QCisJICogVEFCTEUgd29ya3MuIFdlIG5lZWQg dG8gZW5oYW5jZSB0aGlzIG9uY2UgdGhlIGFwcHJvYWNoIGZvciBEREwKKwkgKiByZXBsaWNhdGlv biBpcyBmaW5hbGl6ZWQuCisJICovCisJaWYgKHB1YmFjdGlvbnMucHViZGRsKQorCXsKKwkJQ29t bWFuZFRhZwlzdGFydF9jb21tYW5kc1tdID0ge0NNRFRBR19EUk9QX1RBQkxFfTsKKwkJQ29tbWFu ZFRhZwlyZXdyaXRlX2NvbW1hbmRzW10gPSB7Q01EVEFHX0FMVEVSX1RBQkxFfTsKKworCQlDb21t YW5kVGFnCWVuZF9jb21tYW5kc1tdID0geworCQkJQ01EVEFHX0NSRUFURV9GT1JFSUdOX0RBVEFf V1JBUFBFUiwKKwkJCUNNRFRBR19BTFRFUl9GT1JFSUdOX0RBVEFfV1JBUFBFUiwKKwkJCUNNRFRB R19EUk9QX0ZPUkVJR05fREFUQV9XUkFQUEVSLAorCQkJQ01EVEFHX0NSRUFURV9FWFRFTlNJT04s CisJCQlDTURUQUdfQUxURVJfRVhURU5TSU9OLAorCQkJQ01EVEFHX0RST1BfRVhURU5TSU9OLAor CQkJQ01EVEFHX0NSRUFURV9QT0xJQ1ksCisJCQlDTURUQUdfQUxURVJfUE9MSUNZLAorCQkJQ01E VEFHX0RST1BfUE9MSUNZLAorCQkJQ01EVEFHX0NSRUFURV9DT05WRVJTSU9OLAorCQkJQ01EVEFH X0FMVEVSX0NPTlZFUlNJT04sCisJCQlDTURUQUdfRFJPUF9DT05WRVJTSU9OLAorCQkJQ01EVEFH X0NSRUFURV9ET01BSU4sCisJCQlDTURUQUdfQUxURVJfRE9NQUlOLAorCQkJQ01EVEFHX0RST1Bf RE9NQUlOLAorCQkJQ01EVEFHX0FMVEVSX0lOREVYLAorCQkJQ01EVEFHX0NSRUFURV9UWVBFLAor CQkJQ01EVEFHX0RST1BfVFlQRSwKKwkJCUNNRFRBR19BTFRFUl9UWVBFLAorCQkJQ01EVEFHX0NS RUFURV9DQVNULAorCQkJQ01EVEFHX0FMVEVSX0NBU1QsCisJCQlDTURUQUdfRFJPUF9DQVNULAor CQkJQ01EVEFHX0NSRUFURV9PUEVSQVRPUiwKKwkJCUNNRFRBR19DUkVBVEVfT1BFUkFUT1JfQ0xB U1MsCisJCQlDTURUQUdfQ1JFQVRFX09QRVJBVE9SX0ZBTUlMWSwKKwkJCUNNRFRBR19BTFRFUl9P UEVSQVRPUl9GQU1JTFksCisJCQlDTURUQUdfQUxURVJfT1BFUkFUT1JfQ0xBU1MsCisJCQlDTURU QUdfQUxURVJfT1BFUkFUT1IsCisJCQlDTURUQUdfRFJPUF9PUEVSQVRPUiwKKwkJCUNNRFRBR19E Uk9QX09QRVJBVE9SX0NMQVNTLAorCQkJQ01EVEFHX0RST1BfT1BFUkFUT1JfRkFNSUxZLAorCQkJ Q01EVEFHX0NSRUFURV9QUk9DRURVUkUsCisJCQlDTURUQUdfQUxURVJfUFJPQ0VEVVJFLAorCQkJ Q01EVEFHX0RST1BfUFJPQ0VEVVJFLAorCQkJQ01EVEFHX0NSRUFURV9GVU5DVElPTiwKKwkJCUNN RFRBR19BTFRFUl9GVU5DVElPTiwKKwkJCUNNRFRBR19EUk9QX0ZVTkNUSU9OLAorCQkJQ01EVEFH X0NSRUFURV9UUklHR0VSLAorCQkJQ01EVEFHX0FMVEVSX1RSSUdHRVIsCisJCQlDTURUQUdfRFJP UF9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVfVEFCTEUsCisJCQlDTURUQUdfQUxURVJfVEFCTEUs CisJCQlDTURUQUdfQ1JFQVRFX1NFUVVFTkNFLAorCQkJQ01EVEFHX0FMVEVSX1NFUVVFTkNFLAor CQkJQ01EVEFHX0RST1BfU0VRVUVOQ0UsCisJCQlDTURUQUdfQ1JFQVRFX1NDSEVNQSwKKwkJCUNN RFRBR19BTFRFUl9TQ0hFTUEsCisJCQlDTURUQUdfRFJPUF9TQ0hFTUEsCisJCQlDTURUQUdfQ1JF QVRFX0lOREVYLAorCQkJQ01EVEFHX0RST1BfSU5ERVgsCisJCQlDTURUQUdfQUxURVJfSU5ERVgs CisJCQlDTURUQUdfR1JBTlQsCisJCQlDTURUQUdfUkVWT0tFLAorCQkJQ01EVEFHX0NSRUFURV9S VUxFLAorCQkJQ01EVEFHX0FMVEVSX1JVTEUsCisJCQlDTURUQUdfRFJPUF9SVUxFLAorCQkJQ01E VEFHX1JFRlJFU0hfTUFURVJJQUxJWkVEX1ZJRVcKKwkJfTsKKworCQkvKiBDcmVhdGUgdGhlIGRk bF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRy aWdnZXIoImRkbF9jb21tYW5kX2VuZCIsIGVuZF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhv ZihlbmRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxf Y29tbWFuZF9zdGFydCBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRy aWdnZXIoImRkbF9jb21tYW5kX3N0YXJ0Iiwgc3RhcnRfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVu Z3Rob2Yoc3RhcnRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRo ZSB0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50 VHJpZ2dlcigidGFibGVfcmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVu Z3Rob2YocmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKwl9CisKIAl0YWJsZV9j bG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOwogCiAJSW52b2tlT2JqZWN0UG9zdENyZWF0ZUhv b2soUHVibGljYXRpb25SZWxhdGlvbklkLCBwdWJvaWQsIDApOwpAQCAtOTk1LDYgKzExMzcsOSBA QCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGlj YXRpb25TdG10ICpzdG10LAogCiAJCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5j YXRlIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CiAJCXJlcGxh Y2VzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IHRydWU7CisKKwkJdmFs dWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0 aW9ucy5wdWJkZGwpOworCQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbCAtIDFd ID0gdHJ1ZTsKIAl9CiAKIAlpZiAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4pCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDFmNzc0YWMwNjUuLjdmYzZmNDE2MDEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC01MjUzLDcgKzUyNTMsNyBAQCBBVEV4ZWNDbWQoTGlz dCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCSAqIFJlcG9ydCB0aGUgc3ViY29t bWFuZCB0byBpbnRlcmVzdGVkIGV2ZW50IHRyaWdnZXJzLgogCSAqLwogCWlmIChjbWQpCi0JCUV2 ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcyk7 CisJCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRk cmVzcywgdGFiLT5yZXdyaXRlKTsKIAogCS8qCiAJICogQnVtcCB0aGUgY29tbWFuZCBjb3VudGVy IHRvIGVuc3VyZSB0aGUgbmV4dCBzdWJjb21tYW5kIGluIHRoZSBzZXF1ZW5jZQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggYzRlMmZkZWI3MS4uZjNlZWI2NzMx MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQor KysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNiw2ICsx Niw3IEBAIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9C SlMgPSBcCiAJZGVjb2RlLm8gXAorCWRkbG1lc3NhZ2Uub1wKIAlsYXVuY2hlci5vIFwKIAlsb2dp Y2FsLm8gXAogCWxvZ2ljYWxmdW5jcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9kZGxtZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u NTA5MzUyM2U5YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvZGRsbWVzc2FnZS5jCkBAIC0wLDAgKzEsODYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIGRkbG1lc3NhZ2UuYworICoJICBMb2dpY2FsIERETCBtZXNzYWdlcy4KKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9kZGxtZXNzYWdlLmMKKyAqCisgKiBOT1RFUworICoKKyAqIExvZ2ljYWwgRERMIG1lc3NhZ2Vz IGFsbG93IFhMT0cgbG9nZ2luZyBvZiBEREwgY29tbWFuZCBzdHJpbmdzIHRoYXQKKyAqIGdldCBw YXNzZWQgdG8gdGhlIGxvZ2ljYWwgZGVjb2RpbmcgcGx1Z2luLiBJbiBub3JtYWwgWExPRyBwcm9j ZXNzaW5nIHRoZXkKKyAqIGFyZSBzYW1lIGFzIE5PT1AuCisgKgorICogVW5saWtlIGdlbmVyaWMg bG9naWNhbCBtZXNzYWdlcywgdGhlc2UgRERMIG1lc3NhZ2VzIGhhdmUgb25seSB0cmFuc2FjdGlv bmFsCisgKiBtb2RlLk5vdGUgYnkgZGVmYXVsdCBERExzIGluIFBvc3RncmVTUUwgYXJlIHRyYW5z YWN0aW9uYWwuCisgKgorICogVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnQgb2YgY3VycmVudCB0cmFu c2FjdGlvbiBhbmQgd2lsbCBiZSBzZW50IHRvCisgKiBkZWNvZGluZyBwbHVnaW4gdXNpbmcgaW4g YSBzYW1lIHdheSBhcyBETUwgb3BlcmF0aW9ucy4KKyAqCisgKiBFdmVyeSBtZXNzYWdlIGNhcnJp ZXMgcHJlZml4IHRvIGF2b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCBkZWNvZGluZwor ICogcGx1Z2lucy4gVGhlIHBsdWdpbiBhdXRob3JzIG11c3QgdGFrZSBleHRyYSBjYXJlIHRvIHVz ZSB1bmlxdWUgcHJlZml4LAorICogZ29vZCBvcHRpb25zIHNlZW1zIHRvIGJlIGZvciBleGFtcGxl IHRvIHVzZSB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3hh Y3QuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImNhdGFsb2cv bmFtZXNwYWNlLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvZXhl Y25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2luY2x1ZGUgInJl cGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCisv KgorICogV3JpdGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFhMb2cuCisgKi8K K1hMb2dSZWNQdHIKK0xvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwgT2lk IHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSBjb25zdCBjaGFyICpt ZXNzYWdlLCBzaXplX3Qgc2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlIHhscmVjOwor CisJLyoKKwkgKiBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHRyYW5zYWN0aW9uIGlkLgorCSAqLwor CUFzc2VydChJc1RyYW5zYWN0aW9uU3RhdGUoKSk7CisJR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQo KTsKKworCXhscmVjLmRiSWQgPSBNeURhdGFiYXNlSWQ7CisJLyogdHJhaWxpbmcgemVybyBpcyBj cml0aWNhbDsgc2VlIGxvZ2ljYWxkZGxtc2dfZGVzYyAqLworCXhscmVjLnByZWZpeF9zaXplID0g c3RybGVuKHByZWZpeCkgKyAxOworCXhscmVjLm1lc3NhZ2Vfc2l6ZSA9IHNpemU7CisJeGxyZWMu cmVsaWQgPSByZWxpZDsKKwl4bHJlYy5jbWR0eXBlID0gY21kdHlwZTsKKworCVhMb2dCZWdpbklu c2VydCgpOworCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgJnhscmVjLCBTaXplT2ZMb2dpY2Fs RERMTWVzc2FnZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgcHJlZml4 KSwgeGxyZWMucHJlZml4X3NpemUpOworCVhMb2dSZWdpc3RlckRhdGEodW5jb25zdGlmeShjaGFy ICosIG1lc3NhZ2UpLCBzaXplKTsKKworCS8qIGFsbG93IG9yaWdpbiBmaWx0ZXJpbmcgKi8KKwlY TG9nU2V0UmVjb3JkRmxhZ3MoWExPR19JTkNMVURFX09SSUdJTik7CisKKwlyZXR1cm4gWExvZ0lu c2VydChSTV9MT0dJQ0FMRERMTVNHX0lELCBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpOworfQor CisvKgorICogUmVkbyBpcyBiYXNpY2FsbHkganVzdCBub29wIGZvciBsb2dpY2FsIGRlY29kaW5n IGRkbCBtZXNzYWdlcy4KKyAqLwordm9pZAorbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJT dGF0ZSAqcmVjb3JkKQoreworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocmVjb3JkKSAm IH5YTFJfSU5GT19NQVNLOworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdF KQorCQllbG9nKFBBTklDLCAibG9naWNhbGRkbG1zZ19yZWRvOiB1bmtub3duIG9wIGNvZGUgJXUi LCBpbmZvKTsKKworCS8qIFRoaXMgaXMgb25seSBpbnRlcmVzdGluZyBmb3IgbG9naWNhbCBkZWNv ZGluZywgc2VlIGRlY29kZS5jLiAqLworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9kZWNvZGUuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv ZGVjb2RlLmMKaW5kZXggMmNjMGFjOWViMC4uMWYyYzc1MTc1OSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiYWNj ZXNzL3hsb2d1dGlscy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3Nh Z2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpAQCAtNjAz LDYgKzYwNCw0NiBAQCBsb2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKIAkJCQkJCQkgIG1lc3NhZ2UtPm1lc3NhZ2UgKyBt ZXNzYWdlLT5wcmVmaXhfc2l6ZSk7CiB9CiAKKy8qCisgKiBIYW5kbGUgcm1nciBMT0dJQ0FMRERM TVNHX0lEIHJlY29yZHMgZm9yIERlY29kZVJlY29yZEludG9SZW9yZGVyQnVmZmVyKCkuCisgKi8K K3ZvaWQKK2xvZ2ljYWxkZGxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg WExvZ1JlY29yZEJ1ZmZlciAqYnVmKQoreworCVNuYXBCdWlsZCAgKmJ1aWxkZXIgPSBjdHgtPnNu YXBzaG90X2J1aWxkZXI7CisJWExvZ1JlYWRlclN0YXRlICpyID0gYnVmLT5yZWNvcmQ7CisJVHJh bnNhY3Rpb25JZCB4aWQgPSBYTG9nUmVjR2V0WGlkKHIpOworCXVpbnQ4CQlpbmZvID0gWExvZ1Jl Y0dldEluZm8ocikgJiB+WExSX0lORk9fTUFTSzsKKwlSZXBPcmlnaW5JZCBvcmlnaW5faWQgPSBY TG9nUmVjR2V0T3JpZ2luKHIpOworCXhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKm1lc3NhZ2U7CisK KwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJCWVsb2coRVJST1IsICJ1 bmV4cGVjdGVkIFJNX0xPR0lDQUxERExNU0dfSUQgcmVjb3JkIHR5cGU6ICV1IiwgaW5mbyk7CisK KwlSZW9yZGVyQnVmZmVyUHJvY2Vzc1hpZChjdHgtPnJlb3JkZXIsIFhMb2dSZWNHZXRYaWQociks IGJ1Zi0+b3JpZ3B0cik7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgc25hcHNob3Qgb3Ig d2UgYXJlIGp1c3QgZmFzdC1mb3J3YXJkaW5nLCB0aGVyZSBpcyBubworCSAqIHBvaW50IGluIGRl Y29kaW5nIGRkbCBtZXNzYWdlcy4KKwkgKi8KKwlpZiAoU25hcEJ1aWxkQ3VycmVudFN0YXRlKGJ1 aWxkZXIpIDwgU05BUEJVSUxEX0ZVTExfU05BUFNIT1QgfHwKKwkJY3R4LT5mYXN0X2ZvcndhcmQp CisJCXJldHVybjsKKworCW1lc3NhZ2UgPSAoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqKSBYTG9n UmVjR2V0RGF0YShyKTsKKworCWlmIChtZXNzYWdlLT5kYklkICE9IGN0eC0+c2xvdC0+ZGF0YS5k YXRhYmFzZSB8fAorCQlGaWx0ZXJCeU9yaWdpbihjdHgsIG9yaWdpbl9pZCkpCisJCXJldHVybjsK KworCWlmIChTbmFwQnVpbGRQcm9jZXNzQ2hhbmdlKGJ1aWxkZXIsIHhpZCwgYnVmLT5vcmlncHRy KSkKKwkJUmVvcmRlckJ1ZmZlclF1ZXVlRERMTWVzc2FnZShjdHgtPnJlb3JkZXIsIHhpZCwgYnVm LT5lbmRwdHIsCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZSwgLyogZmlyc3QgcGFydCBvZiBt ZXNzYWdlIGlzIHByZWZpeCAqLworCQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2Vfc2l6ZSwKKwkJ CQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlICsgbWVzc2FnZS0+cHJlZml4X3NpemUsCisJCQkJCQkJ CQkgbWVzc2FnZS0+cmVsaWQsIG1lc3NhZ2UtPmNtZHR5cGUpOworfQorCiAvKgogICogQ29uc29s aWRhdGVkIGNvbW1pdCByZWNvcmQgaGFuZGxpbmcgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGZvcm0g b2YgY29tbWl0CiAgKiByZWNvcmRzLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9sb2dpY2FsLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xv Z2ljYWwuYwppbmRleCA2MjVhN2Y0MjczLi45ODk2OWM3YWVjIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYworKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImZt Z3IuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNs dWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVj b2RlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxp Y2F0aW9uL29yaWdpbi5oIgpAQCAtNzMsNiArNzQsMTAgQEAgc3RhdGljIHZvaWQgdHJ1bmNhdGVf Y2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog c3RhdGljIHZvaWQgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9v bCB0cmFuc2FjdGlvbmFsLAogCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNz YWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgZGRsbWVzc2FnZV9j Yl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJ CQkJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJ CQkJCQkgIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkg IFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyogc3RyZWFtaW5n IGNhbGxiYWNrcyAqLwogc3RhdGljIHZvaWQgc3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRl ckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKQEAgLTkwLDYgKzk1LDExIEBA IHN0YXRpYyB2b2lkIHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNo ZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuCiBzdGF0aWMgdm9pZCBzdHJlYW1fbWVzc2FnZV9jYl93 cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJ CQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJ CQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAq bWVzc2FnZSk7CitzdGF0aWMgdm9pZCBzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3Jk ZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJIFhMb2dS ZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJ CQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJ IFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyB2b2lkIHN0 cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRp b25zW10sIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSk7CiAKQEAgLTIxOCw2ICsyMjgsNyBA QCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAlj dHgtPnJlb3JkZXItPmFwcGx5X3RydW5jYXRlID0gdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAljdHgt PnJlb3JkZXItPmNvbW1pdCA9IGNvbW1pdF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+bWVz c2FnZSA9IG1lc3NhZ2VfY2Jfd3JhcHBlcjsKKwljdHgtPnJlb3JkZXItPmRkbG1lc3NhZ2UgPSBk ZGxtZXNzYWdlX2NiX3dyYXBwZXI7CiAKIAkvKgogCSAqIFRvIHN1cHBvcnQgc3RyZWFtaW5nLCB3 ZSByZXF1aXJlIHN0YXJ0L3N0b3AvYWJvcnQvY29tbWl0L2NoYW5nZQpAQCAtMjM0LDYgKzI0NSw3 IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAog CQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2NvbW1pdF9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5j YWxsYmFja3Muc3RyZWFtX2NoYW5nZV9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Mu c3RyZWFtX21lc3NhZ2VfY2IgIT0gTlVMTCkgfHwKKwkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9k ZGxtZXNzYWdlX2NiICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fdHJ1bmNh dGVfY2IgIT0gTlVMTCk7CiAKIAkvKgpAQCAtMjUxLDYgKzI2Myw3IEBAIFN0YXJ0dXBEZWNvZGlu Z0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+c3Ry ZWFtX2NvbW1pdCA9IHN0cmVhbV9jb21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0 cmVhbV9jaGFuZ2UgPSBzdHJlYW1fY2hhbmdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5z dHJlYW1fbWVzc2FnZSA9IHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVy LT5zdHJlYW1fZGRsbWVzc2FnZSA9IHN0cmVhbV9kZGxtZXNzYWdlX2NiX3dyYXBwZXI7CiAJY3R4 LT5yZW9yZGVyLT5zdHJlYW1fdHJ1bmNhdGUgPSBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcjsK IAogCkBAIC0xMjIwLDYgKzEyMzMsNDQgQEAgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZm ZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJZXJyb3JfY29udGV4dF9zdGFjayA9 IGVycmNhbGxiYWNrLnByZXZpb3VzOwogfQogCitzdGF0aWMgdm9pZAorZGRsbWVzc2FnZV9jYl93 cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJ CSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIE9p ZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkgIFNpemUgbWVzc2Fn ZV9zaXplLAorCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4ID0gY2FjaGUtPnByaXZhdGVfZGF0YTsKKwlMb2dpY2FsRXJyb3JDYWxsYmFj a1N0YXRlIHN0YXRlOworCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNrOworCisJQXNz ZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7CisKKwlpZiAoY3R4LT5jYWxsYmFja3MuZGRsbWVzc2Fn ZV9jYiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBQdXNoIGNhbGxiYWNrICsgaW5mbyBvbiB0 aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCXN0YXRlLmN0eCA9IGN0eDsKKwlzdGF0ZS5jYWxs YmFja19uYW1lID0gImRkbG1lc3NhZ2UiOworCXN0YXRlLnJlcG9ydF9sb2NhdGlvbiA9IG1lc3Nh Z2VfbHNuOworCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gb3V0cHV0X3BsdWdpbl9lcnJvcl9jYWxs YmFjazsKKwllcnJjYWxsYmFjay5hcmcgPSAodm9pZCAqKSAmc3RhdGU7CisJZXJyY2FsbGJhY2su cHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAm ZXJyY2FsbGJhY2s7CisKKwkvKiBzZXQgb3V0cHV0IHN0YXRlICovCisJY3R4LT5hY2NlcHRfd3Jp dGVzID0gdHJ1ZTsKKwljdHgtPndyaXRlX3hpZCA9IHR4biAhPSBOVUxMID8gdHhuLT54aWQgOiBJ bnZhbGlkVHJhbnNhY3Rpb25JZDsKKwljdHgtPndyaXRlX2xvY2F0aW9uID0gbWVzc2FnZV9sc247 CisKKwkvKiBkbyB0aGUgYWN0dWFsIHdvcms6IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxi YWNrcy5kZGxtZXNzYWdlX2NiKGN0eCwgdHhuLCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxpZCwg Y21kdHlwZSwKKwkJCQkJCQkJIG1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3AgdGhl IGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJh Y2sucHJldmlvdXM7Cit9CisKIHN0YXRpYyB2b2lkCiBzdHJlYW1fc3RhcnRfY2Jfd3JhcHBlcihS ZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJWExvZ1Jl Y1B0ciBmaXJzdF9sc24pCkBAIC0xNTM1LDYgKzE1ODYsNDggQEAgc3RyZWFtX21lc3NhZ2VfY2Jf d3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCWVy cm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKIH0KIAorc3RhdGljIHZv aWQKK3N0cmVhbV9kZGxtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJ CQkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUg Y21kdHlwZSwKKwkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJIGNvbnN0IGNoYXIg Km1lc3NhZ2UpCit7CisJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4ID0gY2FjaGUtPnByaXZh dGVfZGF0YTsKKwlMb2dpY2FsRXJyb3JDYWxsYmFja1N0YXRlIHN0YXRlOworCUVycm9yQ29udGV4 dENhbGxiYWNrIGVycmNhbGxiYWNrOworCisJQXNzZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7CisK KwkvKiBXZSdyZSBvbmx5IHN1cHBvc2VkIHRvIGNhbGwgdGhpcyB3aGVuIHN0cmVhbWluZyBpcyBz dXBwb3J0ZWQuICovCisJQXNzZXJ0KGN0eC0+c3RyZWFtaW5nKTsKKworCS8qIHRoaXMgY2FsbGJh Y2sgaXMgb3B0aW9uYWwgKi8KKwlpZiAoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbG1lc3NhZ2Vf Y2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhl IGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJh Y2tfbmFtZSA9ICJzdHJlYW1fZGRsbWVzc2FnZSI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0g bWVzc2FnZV9sc247CisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9y X2NhbGxiYWNrOworCWVycmNhbGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxs YmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFj ayA9ICZlcnJjYWxsYmFjazsKKworCS8qIHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2Vw dF93cml0ZXMgPSB0cnVlOworCWN0eC0+d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhp ZCA6IEludmFsaWRUcmFuc2FjdGlvbklkOworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdl X2xzbjsKKworCS8qIGRvIHRoZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+ Y2FsbGJhY2tzLnN0cmVhbV9kZGxtZXNzYWdlX2NiKGN0eCwgdHhuLCBtZXNzYWdlX2xzbiwgcHJl Zml4LCByZWxpZCwKKwkJCQkJCQkJCQljbWR0eXBlLCBtZXNzYWdlX3NpemUsIG1lc3NhZ2UpOwor CisJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJZXJyb3JfY29udGV4dF9zdGFj ayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOworfQorCiBzdGF0aWMgdm9pZAogc3RyZWFtX3RydW5j YXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKIAkJCQkJCSAgIGludCBucmVsYXRpb25zLCBSZWxhdGlvbiByZWxhdGlvbnNbXSwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwppbmRleCBmZjg1MTNlMmQyLi5mMzU0MDYy NzViIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCkBAIC02NjIsNiAr NjYyLDUyIEBAIGxvZ2ljYWxyZXBfd3JpdGVfbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNh Y3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAogCXBxX3NlbmRieXRlcyhvdXQsIG1lc3NhZ2Us IHN6KTsKIH0KIAorLyoKKyAqIFJlYWQgRERMIE1FU1NBR0UgZnJvbSBzdHJlYW0KKyAqLworY2hh ciAqCitsb2dpY2FscmVwX3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRy ICpsc24sCisJCQkJCQkgICBjb25zdCBjaGFyICoqcHJlZml4LAorCQkJCQkJICAgU2l6ZSAqc3op Cit7CisJdWludDggZmxhZ3M7CisJY2hhciAqbXNnOworCisJLy9UT0RPIGRvdWJsZSBjaGVjayB3 aGVuIGRvIHdlIG5lZWQgdG8gZ2V0IFRyYW5zYWN0aW9uSWQuCisKKwlmbGFncyA9IHBxX2dldG1z Z2ludChpbiwgMSk7CisJaWYgKGZsYWdzICE9IDApCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6 ZWQgZmxhZ3MgJXUgaW4gZGRsIG1lc3NhZ2UiLCBmbGFncyk7CisJKmxzbiA9IHBxX2dldG1zZ2lu dDY0KGluKTsKKwkqcHJlZml4ID0gcHFfZ2V0bXNnc3RyaW5nKGluKTsKKwkqc3ogPSBwcV9nZXRt c2dpbnQoaW4sIDQpOworCW1zZyA9IChjaGFyICopIHBxX2dldG1zZ2J5dGVzKGluLCAqc3opOwor CisJcmV0dXJuIG1zZzsKK30KKworLyoKKyAqIFdyaXRlIERETCBNRVNTQUdFIHRvIHN0cmVhbQor ICovCit2b2lkCitsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRy YW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQljb25zdCBjaGFyICpwcmVm aXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJdWludDgJCWZsYWdzID0gMDsK KworCXBxX3NlbmRieXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0UpOworCisJLyog dHJhbnNhY3Rpb24gSUQgKGlmIG5vdCB2YWxpZCwgd2UncmUgbm90IHN0cmVhbWluZykgKi8KKwlp ZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKKwkJcHFfc2VuZGludDMyKG91dCwgeGlkKTsK KworCXBxX3NlbmRpbnQ4KG91dCwgZmxhZ3MpOworCXBxX3NlbmRpbnQ2NChvdXQsIGxzbik7CisJ cHFfc2VuZHN0cmluZyhvdXQsIHByZWZpeCk7CisJcHFfc2VuZGludDMyKG91dCwgc3opOworCXBx X3NlbmRieXRlcyhvdXQsIG1lc3NhZ2UsIHN6KTsKK30KKwogLyoKICAqIFdyaXRlIHJlbGF0aW9u IGRlc2NyaXB0aW9uIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCkBAIC0xMjE4LDYgKzEyNjQs OCBAQCBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24pCiAJ CQlyZXR1cm4gIlRZUEUiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19NRVNTQUdFOgogCQkJcmV0 dXJuICJNRVNTQUdFIjsKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERMTUVTU0FHRToKKwkJCXJl dHVybiAiRERMIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfQkVHSU5fUFJFUEFSRToKIAkJCXJl dHVybiAiQkVHSU4gUFJFUEFSRSI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkU6CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4 IDZkZmY5OTE1YTUuLjNjMzc2OTBjMzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSAibGli L2JpbmFyeWhlYXAuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQu aCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIK ICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCkBAIC01MTUsNiArNTE2LDE0IEBAIFJlb3Jk ZXJCdWZmZXJSZXR1cm5DaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJDaGFu Z2UgKmNoYW5nZSwKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UpOwogCQkJY2hh bmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTlVMTDsKIAkJCWJyZWFrOworCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJaWYgKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJl Zml4ICE9IE5VTEwpCisJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgpOworCQkJ Y2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBOVUxMOworCQkJaWYgKGNoYW5nZS0+ZGF0YS5k ZGxtc2cubWVzc2FnZSAhPSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVz c2FnZSk7CisJCQljaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UgPSBOVUxMOworCQkJYnJlYWs7 CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCWlmIChjaGFu Z2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9ucykKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuaW52 YWwuaW52YWxpZGF0aW9ucyk7CkBAIC04NjksNiArODc4LDM2IEBAIFJlb3JkZXJCdWZmZXJRdWV1 ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCX0KIH0KIAor LyoKKyAqIEEgdHJhbnNhY3Rpb25hbCBEREwgbWVzc2FnZSBpcyBxdWV1ZWQgdG8gYmUgcHJvY2Vz c2VkIHVwb24gY29tbWl0LgorICovCit2b2lkCitSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdl KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKKwkJCQkJCQkgWExvZ1JlY1B0 ciBsc24sIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsIGNv bnN0IGNoYXIgKm1lc3NhZ2UsCisJCQkJCQkJIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlw ZSBjbWR0eXBlKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlSZW9yZGVyQnVmZmVy Q2hhbmdlICpjaGFuZ2U7CisKKwlBc3NlcnQoeGlkICE9IEludmFsaWRUcmFuc2FjdGlvbklkKTsK KworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocmItPmNvbnRleHQpOworCisJ Y2hhbmdlID0gUmVvcmRlckJ1ZmZlckdldENoYW5nZShyYik7CisJY2hhbmdlLT5hY3Rpb24gPSBS RU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLnBy ZWZpeCA9IHBzdHJkdXAocHJlZml4KTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkID0gcmVs aWQ7CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlID0gY21kdHlwZTsKKwljaGFuZ2UtPmRh dGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSA9IG1lc3NhZ2Vfc2l6ZTsKKwljaGFuZ2UtPmRhdGEuZGRs bXNnLm1lc3NhZ2UgPSBwYWxsb2MobWVzc2FnZV9zaXplKTsKKwltZW1jcHkoY2hhbmdlLT5kYXRh LmRkbG1zZy5tZXNzYWdlLCBtZXNzYWdlLCBtZXNzYWdlX3NpemUpOworCisJUmVvcmRlckJ1ZmZl clF1ZXVlQ2hhbmdlKHJiLCB4aWQsIGxzbiwgY2hhbmdlLCBmYWxzZSk7CisKKwlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9CisKIC8qCiAgKiBBc3NlcnRUWE5Mc25PcmRlcgog ICoJCVZlcmlmeSBMU04gb3JkZXJpbmcgb2YgdHJhbnNhY3Rpb24gbGlzdHMgaW4gdGhlIHJlb3Jk ZXJidWZmZXIKQEAgLTE5NjgsNiArMjAwNywyOSBAQCBSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdl KFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCWNoYW5nZS0+ ZGF0YS5tc2cubWVzc2FnZSk7CiB9CiAKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIFJlb3Jk ZXJCdWZmZXJQcm9jZXNzVFhOIGZvciBhcHBseWluZyB0aGUgRERMIG1lc3NhZ2UuCisgKi8KK3N0 YXRpYyBpbmxpbmUgdm9pZAorUmVvcmRlckJ1ZmZlckFwcGx5RERMTWVzc2FnZShSZW9yZGVyQnVm ZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCSBSZW9yZGVyQnVmZmVyQ2hh bmdlICpjaGFuZ2UsIGJvb2wgc3RyZWFtaW5nKQoreworCWlmIChzdHJlYW1pbmcpCisJCXJiLT5z dHJlYW1fZGRsbWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJCQkgIGNoYW5nZS0+ ZGF0YS5kZGxtc2cucHJlZml4LAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwK KwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwKKwkJCQkJCQkgIGNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5t ZXNzYWdlKTsKKwllbHNlCisJCXJiLT5kZGxtZXNzYWdlKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAor CQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgY2hhbmdlLT5kYXRh LmRkbG1zZy5yZWxpZCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLAorCQkJ CQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICAgY2hhbmdlLT5k YXRhLmRkbG1zZy5tZXNzYWdlKTsKK30KKwogLyoKICAqIEZ1bmN0aW9uIHRvIHN0b3JlIHRoZSBj b21tYW5kIGlkIGFuZCBzbmFwc2hvdCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CiAgKiBzdHJl YW0gc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgd2hpbGUgc2VuZGluZyB0aGUgbmV4dCBz dHJlYW0uCkBAIC0yMzQ4LDYgKzI0MTAsMTAgQEAgUmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4oUmVv cmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJUmVvcmRlckJ1ZmZl ckFwcGx5TWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UsIHN0cmVhbWluZyk7CiAJCQkJCWJyZWFrOwog CisJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRToKKwkJCQkJUmVvcmRl ckJ1ZmZlckFwcGx5RERMTWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UsIHN0cmVhbWluZyk7CisJCQkJ CWJyZWFrOworCiAJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgog CQkJCQkvKiBFeGVjdXRlIHRoZSBpbnZhbGlkYXRpb24gbWVzc2FnZXMgbG9jYWxseSAqLwogCQkJ CQlSZW9yZGVyQnVmZmVyRXhlY3V0ZUludmFsaWRhdGlvbnMoY2hhbmdlLT5kYXRhLmludmFsLm5p bnZhbGlkYXRpb25zLApAQCAtMzc3MSw2ICszODM3LDQwIEBAIFJlb3JkZXJCdWZmZXJTZXJpYWxp emVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJ ICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOwogCQkJCWRhdGEgKz0gY2hhbmdlLT5k YXRhLm1zZy5tZXNzYWdlX3NpemU7CiAKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBSRU9SREVS X0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRToKKwkJCXsKKwkJCQljaGFyCSAgICpkYXRhOworCQkJ CVNpemUJCXByZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KSAr IDE7CisKKwkJCQlzeiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2Fn ZV9zaXplICsKKwkJCQkJc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KSAr IHNpemVvZihTaXplKTsKKwkJCQlSZW9yZGVyQnVmZmVyU2VyaWFsaXplUmVzZXJ2ZShyYiwgc3op OworCisJCQkJZGF0YSA9ICgoY2hhciAqKSByYi0+b3V0YnVmKSArIHNpemVvZihSZW9yZGVyQnVm ZmVyRGlza0NoYW5nZSk7CisKKwkJCQkvKiBtaWdodCBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQgYWJv dmUgKi8KKwkJCQlvbmRpc2sgPSAoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UgKikgcmItPm91dGJ1 ZjsKKworCQkJCS8qIHdyaXRlIHRoZSBwcmVmaXgsIHJlbGlkIGFuZCBjbWR0eXBlIGluY2x1ZGlu ZyB0aGUgc2l6ZSAqLworCQkJCW1lbWNweShkYXRhLCAmcHJlZml4X3NpemUsIHNpemVvZihTaXpl KSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2Ut PmRhdGEuZGRsbXNnLnJlbGlkLCBzaXplb2YoT2lkKSk7CisJCQkJZGF0YSArPSBzaXplb2YoT2lk KTsKKwkJCQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwgc2l6ZW9m KGludCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKGludCk7CisJCQkJbWVtY3B5KGRhdGEsIGNoYW5n ZS0+ZGF0YS5kZGxtc2cucHJlZml4LAorCQkJCQkgICBwcmVmaXhfc2l6ZSk7CisJCQkJZGF0YSAr PSBwcmVmaXhfc2l6ZTsKKworCQkJCS8qIHdyaXRlIHRoZSBtZXNzYWdlIGluY2x1ZGluZyB0aGUg c2l6ZSAqLworCQkJCW1lbWNweShkYXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3Np emUsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5 KGRhdGEsIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRh LmRkbG1zZy5tZXNzYWdlX3NpemUpOworCQkJCWRhdGEgKz0gY2hhbmdlLT5kYXRhLmRkbG1zZy5t ZXNzYWdlX3NpemU7CisKIAkJCQlicmVhazsKIAkJCX0KIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9D SEFOR0VfSU5WQUxJREFUSU9OOgpAQCAtNDA4NSw2ICs0MTg1LDE1IEBAIFJlb3JkZXJCdWZmZXJD aGFuZ2VTaXplKFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSkKIAkJCQlzeiArPSBwcmVmaXhf c2l6ZSArIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplICsKIAkJCQkJc2l6ZW9mKFNpemUp ICsgc2l6ZW9mKFNpemUpOwogCisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZG RVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7CisJCQkJU2l6ZQkJcHJlZml4X3NpemUgPSBzdHJs ZW4oY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgpICsgMTsKKworCQkJCXN6ICs9IHByZWZpeF9z aXplICsgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUgKworCQkJCQlzaXplb2YoU2l6 ZSkgKyBzaXplb2YoU2l6ZSkgKyBzaXplb2YoT2lkKSArIHNpemVvZihpbnQpOworCiAJCQkJYnJl YWs7CiAJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKQEAg LTQzNjAsNiArNDQ2OSwzMyBAQCBSZW9yZGVyQnVmZmVyUmVzdG9yZUNoYW5nZShSZW9yZGVyQnVm ZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkgICBjaGFuZ2UtPmRhdGEubXNn Lm1lc3NhZ2Vfc2l6ZSk7CiAJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6 ZTsKIAorCQkJCWJyZWFrOworCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExN RVNTQUdFOgorCQkJeworCQkJCVNpemUJCXByZWZpeF9zaXplOworCisJCQkJLyogcmVhZCBwcmVm aXggKi8KKwkJCQltZW1jcHkoJnByZWZpeF9zaXplLCBkYXRhLCBzaXplb2YoU2l6ZSkpOworCQkJ CWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLmRkbG1zZy5y ZWxpZCwgZGF0YSwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJ bWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUsIGRhdGEsIHNpemVvZihpbnQpKTsK KwkJCQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCWNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4 ID0gTWVtb3J5Q29udGV4dEFsbG9jKHJiLT5jb250ZXh0LCBwcmVmaXhfc2l6ZSk7CisJCQkJbWVt Y3B5KGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4LCBkYXRhLCBwcmVmaXhfc2l6ZSk7CisJCQkJ QXNzZXJ0KGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4W3ByZWZpeF9zaXplIC0gMV0gPT0gJ1ww Jyk7CisJCQkJZGF0YSArPSBwcmVmaXhfc2l6ZTsKKworCQkJCS8qIHJlYWQgdGhlIG1lc3NhZ2Ug Ki8KKwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplLCBkYXRhLCBzaXpl b2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCWNoYW5nZS0+ZGF0YS5t c2cubWVzc2FnZSA9IE1lbW9yeUNvbnRleHRBbGxvYyhyYi0+Y29udGV4dCwKKwkJCQkJCQkJCQkJ CQkJCSAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCW1lbWNweShjaGFuZ2Ut PmRhdGEubXNnLm1lc3NhZ2UsIGRhdGEsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2Fn ZV9zaXplKTsKKwkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplOworCiAJ CQkJYnJlYWs7CiAJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElP TjoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IDIwN2E1ODA1 YmEuLjIxYjgyZjM0NGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIu YwpAQCAtMTU2LDYgKzE1Niw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi bm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2lu Y2x1ZGUgInBhcnNlci9hbmFseXplLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAi cG9zdG1hc3Rlci9iZ3dvcmtlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0Lmgi CkBAIC0xNzksNyArMTgwLDEwIEBACiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNs dWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCisjaW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNpbmNs dWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCiAjaW5jbHVk ZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1 dGlscy9jYXRjYWNoZS5oIgpAQCAtMjQ2NCw2ICsyNDY4LDIzMCBAQCBhcHBseV9oYW5kbGVfdHJ1 bmNhdGUoU3RyaW5nSW5mbyBzKQogCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiB9CiAKKy8qIFJl bW92ZSB0aGUgZGF0YSBwb3B1bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQgKi8KK3N0YXRpYyB2b2lk CitwcmVwcm9jZXNzX2NyZWF0ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQoreworCUNvbW1hbmRU YWcJY29tbWFuZFRhZzsKKworCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICop Y29tbWFuZCk7CisKKwlzd2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19DUkVB VEVfVEFCTEVfQVM6CisJCWNhc2UgQ01EVEFHX1NFTEVDVF9JTlRPOgorCQkJeworCQkJCUNyZWF0 ZVRhYmxlQXNTdG10ICpjYXN0bXQgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKikgY29tbWFuZC0+c3Rt dDsKKwkJCQlpZiAoY2FzdG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkKKwkJCQl7CisJCQkJ CS8qCisJCQkJCSAqIEZvcmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0byBhdm9pZCBkYXRh CisJCQkJCSAqIGluY29uc2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxpY2F0ZWQgZnJvbSB0 aGUKKwkJCQkJICogcHVibGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJCQljYXN0bXQtPmlu dG8tPnNraXBEYXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDTURU QUdfU0VMRUNUOgorCQkJeworCQkJCVNlbGVjdFN0bXQgKnNzdG10ID0gKFNlbGVjdFN0bXQgKikg Y29tbWFuZC0+c3RtdDsKKworCQkJCWlmIChzc3RtdC0+aW50b0NsYXVzZSAhPSBOVUxMKQorCQkJ CXsKKwkJCQkJLyoKKwkJCQkJICogRm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2 b2lkIGRhdGEKKwkJCQkJICogaW5jb25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUgcmVwbGljYXRl ZCBmcm9tIHRoZQorCQkJCQkgKiBwdWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJCXNz dG10LT5pbnRvQ2xhdXNlLT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7 CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogSGFuZGxlIENSRUFURSBUQUJM RSBjb21tYW5kCisgKgorICogQ2FsbCBBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZSBmb3IgQ1JFQVRF IFRBQkVMIGNvbW1hbmQgdG8gc2V0IHRoZSByZWxzdGF0ZSB0bworICogU1VCUkVMX1NUQVRFX1JF QURZIHNvIERNTCBjaGFuZ2VzIG9uIHRoaXMgbmV3IHRhYmxlIGNhbiBiZSByZXBsaWNhdGVkIHdp dGhvdXQKKyAqIGhhdmluZyB0byBtYW51YWxseSBydW4gImFsdGVyIHN1YnNjcmlwdGlvbiAuLi4g cmVmcmVzaCBwdWJsaWNhdGlvbiIKKyAqLworc3RhdGljIHZvaWQKK2hhbmRsZV9jcmVhdGVfdGFi bGUoUmF3U3RtdCAqY29tbWFuZCkKK3sKKwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisJUmFuZ2VW YXIJICpydiA9IE5VTEw7CisJT2lkCQkJcmVsaWQ7CisJT2lkCQkJcmVsbmFtZXNwYWNlID0gSW52 YWxpZE9pZDsKKwljaGFyIAkJICpzY2hlbWFuYW1lID0gTlVMTDsKKwljaGFyCQkgKnJlbG5hbWUg PSBOVUxMOworCisJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgY29tbWFu ZCk7CisKKwlzd2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19DUkVBVEVfVEFC TEU6CisJCQl7CisJCQkJQ3JlYXRlU3RtdCAqY3N0bXQgPSAoQ3JlYXRlU3RtdCAqKSBjb21tYW5k LT5zdG10OworCQkJCXJ2ID0gY3N0bXQtPnJlbGF0aW9uOworCQkJfQorCQkJYnJlYWs7CisJCWRl ZmF1bHQ6CisJCQlicmVhazsKKwl9CisKKwlpZiAoIXJ2KQorCQlyZXR1cm47CisKKwlzY2hlbWFu YW1lID0gcnYtPnNjaGVtYW5hbWU7CisJcmVsbmFtZSA9IHJ2LT5yZWxuYW1lOworCisJaWYgKHNj aGVtYW5hbWUgIT0gTlVMTCkKKwkJcmVsbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9vaWQoc2No ZW1hbmFtZSwgZmFsc2UpOworCisJaWYgKHJlbG5hbWVzcGFjZSAhPSBJbnZhbGlkT2lkKQorCQly ZWxpZCA9IGdldF9yZWxuYW1lX3JlbGlkKHJlbG5hbWUsIHJlbG5hbWVzcGFjZSk7CisJZWxzZQor CQlyZWxpZCA9IFJlbG5hbWVHZXRSZWxpZChyZWxuYW1lKTsKKworCWlmIChyZWxpZCAhPSBJbnZh bGlkT2lkKQorCXsKKwkJQWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUoTXlTdWJzY3JpcHRpb24tPm9p ZCwgcmVsaWQsCisJCQkJCQkJCVNVQlJFTF9TVEFURV9SRUFEWSwKKwkJCQkJCQkJSW52YWxpZFhM b2dSZWNQdHIpOworCQllcmVwb3J0KERFQlVHMSwKKwkJCQkoZXJybXNnX2ludGVybmFsKCJ0YWJs ZSBcIiVzXCIgYWRkZWQgdG8gc3Vic2NyaXB0aW9uIFwiJXNcIiIsCisJCQkJCQkJCSByZWxuYW1l LCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCithcHBseV9o YW5kbGVfZGRsKFN0cmluZ0luZm8gcykKK3sKKwlYTG9nUmVjUHRyIGxzbjsKKwljb25zdCBjaGFy ICpwcmVmaXggPSBOVUxMOworCWNoYXIgKm1lc3NhZ2UgPSBOVUxMOworCWNoYXIJICAgKmRkbF9j b21tYW5kOworCVNpemUJCXN6OworCUxpc3QJICAgKnBhcnNldHJlZV9saXN0OworCUxpc3RDZWxs ICAgKnBhcnNldHJlZV9pdGVtOworCURlc3RSZWNlaXZlciAqcmVjZWl2ZXI7CisJTWVtb3J5Q29u dGV4dCBvbGRjb250ZXh0OworCWNvbnN0IGNoYXIgKnNhdmVfZGVidWdfcXVlcnlfc3RyaW5nID0g ZGVidWdfcXVlcnlfc3RyaW5nOworCisJbWVzc2FnZSA9IGxvZ2ljYWxyZXBfcmVhZF9kZGxtZXNz YWdlKHMsICZsc24sICZwcmVmaXgsICZzeik7CisKKwkvKiBNYWtlIHN1cmUgd2UgYXJlIGluIGEg dHJhbnNhY3Rpb24gY29tbWFuZCAqLworCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKworCWRk bF9jb21tYW5kID0gZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcobWVzc2FnZSk7CisJZGVidWdf cXVlcnlfc3RyaW5nID0gZGRsX2NvbW1hbmQ7CisKKwkvKiBEZXN0Tm9uZSBmb3IgbG9naWNhbCBy ZXBsaWNhdGlvbiAqLworCXJlY2VpdmVyID0gQ3JlYXRlRGVzdFJlY2VpdmVyKERlc3ROb25lKTsK KwlwYXJzZXRyZWVfbGlzdCA9IHBnX3BhcnNlX3F1ZXJ5KGRkbF9jb21tYW5kKTsKKworCWZvcmVh Y2gocGFyc2V0cmVlX2l0ZW0sIHBhcnNldHJlZV9saXN0KQorCXsKKwkJTGlzdAkgICAqcGxhbnRy ZWVfbGlzdDsKKwkJTGlzdAkgICAqcXVlcnl0cmVlX2xpc3Q7CisJCVJhd1N0bXQJICAgKmNvbW1h bmQgPSAoUmF3U3RtdCAqKSBsZmlyc3QocGFyc2V0cmVlX2l0ZW0pOworCQlDb21tYW5kVGFnCWNv bW1hbmRUYWc7CisJCU1lbW9yeUNvbnRleHQgcGVyX3BhcnNldHJlZV9jb250ZXh0ID0gTlVMTDsK KwkJUG9ydGFsCQlwb3J0YWw7CisJCWJvb2wJCSBzbmFwc2hvdF9zZXQgPSBmYWxzZTsKKworCQlj b21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCQkvKiBJ ZiB3ZSBnb3QgYSBjYW5jZWwgc2lnbmFsIGluIHBhcnNpbmcgb3IgcHJpb3IgY29tbWFuZCwgcXVp dCAqLworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIFJlbW92ZSBkYXRhIHBvcHVs YXRpb24gZnJvbSB0aGUgY29tbWFuZCAqLworCQlwcmVwcm9jZXNzX2NyZWF0ZV90YWJsZShjb21t YW5kKTsKKworCQkvKgorCQkgKiBTZXQgdXAgYSBzbmFwc2hvdCBpZiBwYXJzZSBhbmFseXNpcy9w bGFubmluZyB3aWxsIG5lZWQgb25lLgorCQkgKi8KKwkJaWYgKGFuYWx5emVfcmVxdWlyZXNfc25h cHNob3QoY29tbWFuZCkpCisJCXsKKwkJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlv blNuYXBzaG90KCkpOworCQkJc25hcHNob3Rfc2V0ID0gdHJ1ZTsKKwkJfQorCisJCS8qCisJCSAq IFdlIGRvIHRoZSB3b3JrIGZvciBlYWNoIHBhcnNldHJlZSBpbiBhIHNob3J0LWxpdmVkIGNvbnRl eHQsIHRvCisJCSAqIGxpbWl0IHRoZSBtZW1vcnkgdXNlZCB3aGVuIHRoZXJlIGFyZSBtYW55IGNv bW1hbmRzIGluIHRoZSBzdHJpbmcuCisJCSAqLworCQlwZXJfcGFyc2V0cmVlX2NvbnRleHQgPQor CQkJQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkg ICJleGVjdXRlX3NxbF9zdHJpbmcgcGVyLXN0YXRlbWVudCBjb250ZXh0IiwKKwkJCQkJCQkJICBB TExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCisJCXF1ZXJ5dHJlZV9saXN0ID0gcGdfYW5h bHl6ZV9hbmRfcmV3cml0ZV9maXhlZHBhcmFtcyhjb21tYW5kLAorCQkJCQkJCQkJCQkJCQkJZGRs X2NvbW1hbmQsCisJCQkJCQkJCQkJCQkJCQlOVUxMLCAwLCBOVUxMKTsKKworCQlwbGFudHJlZV9s aXN0ID0gcGdfcGxhbl9xdWVyaWVzKHF1ZXJ5dHJlZV9saXN0LCBkZGxfY29tbWFuZCwgMCwgTlVM TCk7CisKKwkJLyogRG9uZSB3aXRoIHRoZSBzbmFwc2hvdCB1c2VkIGZvciBwYXJzaW5nL3BsYW5u aW5nICovCisJCWlmIChzbmFwc2hvdF9zZXQpCisJCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCisJ CXBvcnRhbCA9IENyZWF0ZVBvcnRhbCgibG9naWNhbCByZXBsaWNhdGlvbiIsIHRydWUsIHRydWUp OworCisJCS8qCisJCSAqIFdlIGRvbid0IGhhdmUgdG8gY29weSBhbnl0aGluZyBpbnRvIHRoZSBw b3J0YWwsIGJlY2F1c2UgZXZlcnl0aGluZworCQkgKiB3ZSBhcmUgcGFzc2luZyBoZXJlIGlzIGlu IEFwcGx5TWVzc2FnZUNvbnRleHQgb3IgdGhlCisJCSAqIHBlcl9wYXJzZXRyZWVfY29udGV4dCwg YW5kIHNvIHdpbGwgb3V0bGl2ZSB0aGUgcG9ydGFsIGFueXdheS4KKwkJICovCisJCVBvcnRhbERl ZmluZVF1ZXJ5KHBvcnRhbCwKKwkJCQkJCSAgTlVMTCwKKwkJCQkJCSAgZGRsX2NvbW1hbmQsCisJ CQkJCQkgIGNvbW1hbmRUYWcsCisJCQkJCQkgIHBsYW50cmVlX2xpc3QsCisJCQkJCQkgIE5VTEwp OworCisJCS8qCisJCSAqIFN0YXJ0IHRoZSBwb3J0YWwuICBObyBwYXJhbWV0ZXJzIGhlcmUuCisJ CSAqLworCQlQb3J0YWxTdGFydChwb3J0YWwsIE5VTEwsIDAsIEludmFsaWRTbmFwc2hvdCk7CisK KwkJLyoKKwkJICogU3dpdGNoIGJhY2sgdG8gdHJhbnNhY3Rpb24gY29udGV4dCBmb3IgZXhlY3V0 aW9uLgorCQkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJCSh2 b2lkKSBQb3J0YWxSdW4ocG9ydGFsLAorCQkJCQkJIEZFVENIX0FMTCwKKwkJCQkJCSB0cnVlLAor CQkJCQkJIHRydWUsCisJCQkJCQkgcmVjZWl2ZXIsCisJCQkJCQkgcmVjZWl2ZXIsCisJCQkJCQkg TlVMTCk7CisKKwkJUG9ydGFsRHJvcChwb3J0YWwsIGZhbHNlKTsKKworCQlDb21tYW5kQ291bnRl ckluY3JlbWVudCgpOworCisJCS8qCisJCSAqIFRhYmxlIGNyZWF0ZWQgYnkgRERMIHJlcGxpY2F0 aW9uIChkYXRhYmFzZSBsZXZlbCkgaXMgYXV0b21hdGljYWxseQorCQkgKiBhZGRlZCB0byB0aGUg c3Vic2NyaXB0aW9uIGhlcmUuCisJCSAqLworCQloYW5kbGVfY3JlYXRlX3RhYmxlKGNvbW1hbmQp OworCisJCS8qIE5vdyB3ZSBtYXkgZHJvcCB0aGUgcGVyLXBhcnNldHJlZSBjb250ZXh0LCBpZiBv bmUgd2FzIGNyZWF0ZWQuICovCisJCU1lbW9yeUNvbnRleHREZWxldGUocGVyX3BhcnNldHJlZV9j b250ZXh0KTsKKwl9CisKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBzYXZlX2RlYnVnX3F1ZXJ5X3N0 cmluZzsKKwllbmRfcmVwbGljYXRpb25fc3RlcCgpOworfQorCiAKIC8qCiAgKiBMb2dpY2FsIHJl cGxpY2F0aW9uIHByb3RvY29sIG1lc3NhZ2UgZGlzcGF0Y2hlci4KQEAgLTI1MjksNiArMjc1Nywx MCBAQCBhcHBseV9kaXNwYXRjaChTdHJpbmdJbmZvIHMpCiAJCQkgKi8KIAkJCWJyZWFrOwogCisJ CWNhc2UgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0U6CisJCQlhcHBseV9oYW5kbGVfZGRsKHMp OworCQkJYnJlYWs7CisKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX1NUQVJUOgogCQkJ YXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChzKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXggMmVjYWE1YjkwNy4uNWU1YjFjYTEy ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQu YworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC01 Myw2ICs1MywxMSBAQCBzdGF0aWMgdm9pZCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwKIAkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRy IG1lc3NhZ2VfbHNuLAogCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnBy ZWZpeCwKIAkJCQkJCQkgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9p ZCBwZ291dHB1dF9kZGxtZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJ CQkJUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJ CQljb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwKKwkJCQkJCQkJRGVwYXJzZWRDb21tYW5k VHlwZSBjbWR0eXBlLAorCQkJCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0 YXRpYyBib29sIHBnb3V0cHV0X29yaWdpbl9maWx0ZXIoTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LAogCQkJCQkJCQkgICBSZXBPcmlnaW5JZCBvcmlnaW5faWQpOwogc3RhdGljIHZvaWQgcGdv dXRwdXRfYmVnaW5fcHJlcGFyZV90eG4oTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LApAQCAt MjU2LDYgKzI2MSw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJh Y2tzICpjYikKIAljYi0+Y2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT50cnVuY2F0 ZV9jYiA9IHBnb3V0cHV0X3RydW5jYXRlOwogCWNiLT5tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVz c2FnZTsKKwljYi0+ZGRsbWVzc2FnZV9jYiA9IHBnb3V0cHV0X2RkbG1lc3NhZ2U7CiAJY2ItPmNv bW1pdF9jYiA9IHBnb3V0cHV0X2NvbW1pdF90eG47CiAKIAljYi0+YmVnaW5fcHJlcGFyZV9jYiA9 IHBnb3V0cHV0X2JlZ2luX3ByZXBhcmVfdHhuOwpAQCAtMjcyLDYgKzI3OCw3IEBAIF9QR19vdXRw dXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikKIAljYi0+c3RyZWFtX2Nv bW1pdF9jYiA9IHBnb3V0cHV0X3N0cmVhbV9jb21taXQ7CiAJY2ItPnN0cmVhbV9jaGFuZ2VfY2Ig PSBwZ291dHB1dF9jaGFuZ2U7CiAJY2ItPnN0cmVhbV9tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVz c2FnZTsKKwljYi0+c3RyZWFtX2RkbG1lc3NhZ2VfY2IgPSBwZ291dHB1dF9kZGxtZXNzYWdlOwog CWNiLT5zdHJlYW1fdHJ1bmNhdGVfY2IgPSBwZ291dHB1dF90cnVuY2F0ZTsKIAkvKiB0cmFuc2Fj dGlvbiBzdHJlYW1pbmcgLSB0d28tcGhhc2UgY29tbWl0ICovCiAJY2ItPnN0cmVhbV9wcmVwYXJl X2NiID0gcGdvdXRwdXRfc3RyZWFtX3ByZXBhcmVfdHhuOwpAQCAtNDI2LDYgKzQzMyw3IEBAIHBn b3V0cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5P cHRpb25zICpvcHQsCiAKIAkvKiBUaGlzIHBsdWdpbiB1c2VzIGJpbmFyeSBwcm90b2NvbC4gKi8K IAlvcHQtPm91dHB1dF90eXBlID0gT1VUUFVUX1BMVUdJTl9CSU5BUllfT1VUUFVUOworCW9wdC0+ cmVjZWl2ZV9yZXdyaXRlcyA9IHRydWU7CiAKIAkvKgogCSAqIFRoaXMgaXMgcmVwbGljYXRpb24g c3RhcnQgYW5kIG5vdCBzbG90IGluaXRpYWxpemF0aW9uLgpAQCAtNDk5LDYgKzUwNyw3IEBAIHBn b3V0cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5P cHRpb25zICpvcHQsCiAKIAkJLyogSW5pdCBwdWJsaWNhdGlvbiBzdGF0ZS4gKi8KIAkJZGF0YS0+ cHVibGljYXRpb25zID0gTklMOworCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IE5JTDsKIAkJcHVi bGljYXRpb25zX3ZhbGlkID0gZmFsc2U7CiAJCUNhY2hlUmVnaXN0ZXJTeXNjYWNoZUNhbGxiYWNr KFBVQkxJQ0FUSU9OT0lELAogCQkJCQkJCQkJICBwdWJsaWNhdGlvbl9pbnZhbGlkYXRpb25fY2Is CkBAIC0xMzc3LDkgKzEzODYsMjIgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCVJlb3JkZXJCdWZmZXJDaGFuZ2VU eXBlIGFjdGlvbiA9IGNoYW5nZS0+YWN0aW9uOwogCVR1cGxlVGFibGVTbG90ICpvbGRfc2xvdCA9 IE5VTEw7CiAJVHVwbGVUYWJsZVNsb3QgKm5ld19zbG90ID0gTlVMTDsKKwlib29sCQkJdGFibGVf cmV3cml0ZSA9IGZhbHNlOwogCiAJdXBkYXRlX3JlcGxpY2F0aW9uX3Byb2dyZXNzKGN0eCwgZmFs c2UpOwogCisJLyoKKwkgKiBGb3IgaGVhcCByZXdyaXRlcywgd2UgbWlnaHQgbmVlZCB0byByZXBs aWNhdGUgdGhlbSBpZiB0aGUgcmV3cml0dGVuCisJICogdGFibGUgcHVibGlzaGVzIHJld3JpdGUg ZGRsIG1lc3NhZ2UuIFNvIGdldCB0aGUgYWN0dWFsIHJlbGF0aW9uIGhlcmUgYW5kCisJICogY2hl Y2sgdGhlIHB1YmFjdGlvbiBsYXRlci4KKwkgKi8KKwlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVs cmV3cml0ZSkKKwl7CisJCXRhYmxlX3Jld3JpdGUgPSB0cnVlOworCQlyZWxhdGlvbiA9IFJlbGF0 aW9uSWRHZXRSZWxhdGlvbihyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKTsKKwkJdGFyZ2V0 cmVsID0gcmVsYXRpb247CisJfQorCiAJaWYgKCFpc19wdWJsaXNoYWJsZV9yZWxhdGlvbihyZWxh dGlvbikpCiAJCXJldHVybjsKIApAQCAtMTQxMyw2ICsxNDM1LDEzIEBAIHBnb3V0cHV0X2NoYW5n ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJ CUFzc2VydChmYWxzZSk7CiAJfQogCisJLyoKKwkgKiBXZSBkb24ndCBwdWJsaXNoIHRhYmxlIHJl d3JpdGUgY2hhbmdlIHVubGVzcyB3ZSBwdWJsaXNoIHRoZSByZXdyaXRlIGRkbAorCSAqIG1lc3Nh Z2UuCisJICovCisJaWYgKHRhYmxlX3Jld3JpdGUgJiYgIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1 YmRkbCkKKwkJcmV0dXJuOworCiAJLyogQXZvaWQgbGVha2luZyBtZW1vcnkgYnkgdXNpbmcgYW5k IHJlc2V0dGluZyBvdXIgb3duIGNvbnRleHQgKi8KIAlvbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8oZGF0YS0+Y29udGV4dCk7CiAKQEAgLTE0NDIsOCArMTQ3MSw4IEBAIHBnb3V0cHV0X2NoYW5n ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJ CX0KIAogCQkJLyogQ2hlY2sgcm93IGZpbHRlciAqLwotCQkJaWYgKCFwZ291dHB1dF9yb3dfZmls dGVyKHRhcmdldHJlbCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwKLQkJCQkJCQkJCSAmYWN0 aW9uKSkKKwkJCWlmICghdGFibGVfcmV3cml0ZSAmJgorCQkJCSFwZ291dHB1dF9yb3dfZmlsdGVy KHRhcmdldHJlbCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwgJmFjdGlvbikpCiAJCQkJYnJl YWs7CiAKIAkJCS8qCkBAIC0xNDYzLDggKzE0OTIsMTkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJbWF5YmVf c2VuZF9zY2hlbWEoY3R4LCBjaGFuZ2UsIHJlbGF0aW9uLCByZWxlbnRyeSk7CiAKIAkJCU91dHB1 dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOwotCQkJbG9naWNhbHJlcF93cml0ZV9pbnNl cnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKLQkJCQkJCQkJCWRhdGEtPmJp bmFyeSwgcmVsZW50cnktPmNvbHVtbnMpOworCisJCQkvKgorCQkJICogQ29udmVydCB0aGUgcmV3 cml0ZSBpbnNlcnRzIHRvIHVwZGF0ZXMgc28gdGhhdCB0aGUgc3Vic2NyaWJlcgorCQkJICogY2Fu IHJlcGxheSBpdC4gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIGJldHdlZW4K KwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBpcyBjb25zaXN0ZW50LgorCQkJICovCisJ CQlpZiAodGFibGVfcmV3cml0ZSkKKwkJCQlsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShjdHgtPm91 dCwgeGlkLCB0YXJnZXRyZWwsCisJCQkJCQkJCQkJTlVMTCwgbmV3X3Nsb3QsIGRhdGEtPmJpbmFy eSwKKwkJCQkJCQkJCQlyZWxlbnRyeS0+Y29sdW1ucyk7CisJCQllbHNlCisJCQkJbG9naWNhbHJl cF93cml0ZV9pbnNlcnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKKwkJCQkJ CQkJCQlkYXRhLT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKIAkJCU91dHB1dFBsdWdpbldy aXRlKGN0eCwgdHJ1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0Vf VVBEQVRFOgpAQCAtMTU5NCw2ICsxNjM0LDkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQlhbmNlc3RvciA9IE5V TEw7CiAJfQogCisJaWYgKHRhYmxlX3Jld3JpdGUpCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24p OworCiAJLyogQ2xlYW51cCAqLwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGQpOwogCU1lbW9y eUNvbnRleHRSZXNldChkYXRhLT5jb250ZXh0KTsKQEAgLTE2NzEsOCArMTcxNCw4IEBAIHBnb3V0 cHV0X3RydW5jYXRlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAogCiBzdGF0aWMgdm9pZAogcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKLQkJCQkgWExvZ1JlY1B0ciBtZXNz YWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3os Ci0JCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCisJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24s IGJvb2wgdHJhbnNhY3Rpb25hbCwKKwkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBj b25zdCBjaGFyICptZXNzYWdlKQogewogCVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERh dGEgKikgY3R4LT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CiAJVHJhbnNhY3Rpb25JZCB4aWQgPSBJ bnZhbGlkVHJhbnNhY3Rpb25JZDsKQEAgLTE3MTIsNiArMTc1NSwxMzcgQEAgcGdvdXRwdXRfbWVz c2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK IAlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOwogfQogCitzdGF0aWMgdm9pZAorcGdvdXRw dXRfZGRsbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKKwkJCQkJWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJY29uc3QgY2hhciAq cHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJU2l6 ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdP dXRwdXREYXRhICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCVBHT3V0cHV0VHhuRGF0 YSAqdHhuZGF0YSA9IChQR091dHB1dFR4bkRhdGEgKikgdHhuLT5vdXRwdXRfcGx1Z2luX3ByaXZh dGU7CisJUmVsYXRpb24JcmVsYXRpb24gPSBOVUxMOworCVRyYW5zYWN0aW9uSWQgeGlkID0gSW52 YWxpZFRyYW5zYWN0aW9uSWQ7CisJUmVsYXRpb25TeW5jRW50cnkgKnJlbGVudHJ5OworCisJLyoK KwkgKiBSZW1lbWJlciB0aGUgeGlkIGZvciB0aGUgbWVzc2FnZSBpbiBzdHJlYW1pbmcgbW9kZS4g U2VlCisJICogcGdvdXRwdXRfY2hhbmdlLgorCSAqLworCWlmIChpbl9zdHJlYW1pbmcpCisJCXhp ZCA9IHR4bi0+eGlkOworCisJc3dpdGNoIChjbWR0eXBlKQorCXsKKwkJY2FzZSBEQ1RfVGFibGVE cm9wU3RhcnQ6CisJCQkvKgorCQkJICogT24gRFJPUCBzdGFydCwgYWRkIHRoZSByZWxpZCB0byBh IGRlbGV0ZWRfcmVsaWQgbGlzdCBpZiB0aGUKKwkJCSAqIHJlbGlkIGlzIHBhcnQgb2YgYSBwdWJs aWNhdGlvbiB0aGF0IHN1cHBvcnRzIGRkbCBwdWJsaWNhdGlvbi4gV2UKKwkJCSAqIG5lZWQgdGhp cyBiZWNhdXNlIG9uIERST1AgZW5kLCB0aGUgcmVsaWQgd2lsbCBubyBsb25nZXIgYmUKKwkJCSAq IHZhbGlkLiBMYXRlciBvbiBEcm9wIGVuZCwgdmVyaWZ5IHRoYXQgdGhlIGRyb3AgaXMgZm9yIGEg cmVsaWQKKwkJCSAqIHRoYXQgaXMgb24gdGhlIGRlbGV0ZWRfcmlkIGxpc3QsIGFuZCBvbmx5IHRo ZW4gc2VuZCB0aGUgZGRsCisJCQkgKiBtZXNzYWdlLgorCQkJICovCisJCQlyZWxhdGlvbiA9IFJl bGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7CisKKwkJCUFzc2VydChyZWxhdGlvbik7CisJCQly ZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlmIChy ZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwpCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBs YXBwZW5kX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpOworCisJCQlSZWxhdGlvbkNs b3NlKHJlbGF0aW9uKTsKKwkJCXJldHVybjsKKwkJY2FzZSBEQ1RfVGFibGVEcm9wRW5kOgorCQkJ aWYgKCFsaXN0X21lbWJlcl9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKSkKKwkJCQly ZXR1cm47CisJCQllbHNlCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsaXN0X2RlbGV0ZV9v aWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsKKwkJCWJyZWFrOworCQljYXNlIERDVF9U YWJsZUFsdGVyOgorCQkJLyoKKwkJCSAqIEZvciB0YWJsZSByZXdyaXRlIGRkbCwgd2UgZmlyc3Qg c2VuZCB0aGUgb3JpZ2luYWwgZGRsIG1lc3NhZ2UgdG8KKwkJCSAqIHN1YnNjcmliZXIsIHRoZW4g Y29udmVydCB0aGUgdXBjb21pbmcgcmV3cml0ZSBJTlNFUlQgdG8gVVBEQVRFIGFuZAorCQkJICog c2VuZCB0aGVtIHRvIHN1YnNjcmliZXIgc28gdGhhdCB0aGUgZGF0YSBiZXR3ZWVuIHB1Ymxpc2hl ciBhbmQKKwkJCSAqIHN1YnNjcmliZXIgY2FuIGFsd2F5cyBiZSBjb25zaXN0ZW50LgorCQkJICoK KwkJCSAqIFdlIGRvIHRoaXMgd2F5IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKwkJCSAqCisJCQkg KiAoMSkgVGhlIGRhdGEgYmVmb3JlIHRoZSByZXdyaXRlIGRkbCBjb3VsZCBhbHJlYWR5IGJlIGRp ZmZlcmVudCBhbW9uZworCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyLiBUbyBtYWtlIHN1 cmUgdGhlIGV4dHJhIGRhdGEgaW4gc3Vic2NyaWJlcgorCQkJICogd2hpY2ggZG9lc24ndCBleGlz dCBpbiBwdWJsaXNoZXIgYWxzbyBnZXQgcmV3cml0dGVuLCB3ZSBuZWVkIHRvIGxldAorCQkJICog dGhlIHN1YnNjcmliZXIgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgcmV3cml0ZSBkZGwgdG8gcmV3cml0 ZSBhbGwgdGhlCisJCQkgKiBkYXRhIGF0IGZpcnN0LgorCQkJICoKKwkJCSAqICgyKSB0aGUgZGF0 YSBhZnRlciBleGVjdXRpbmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlmZmVyZW50IGFtb25nCisJ CQkgKiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIoZHVlIHRvIGRpZmZlcmVudCBmdW5jdGlvbnMv b3BlcmF0b3JzIHVzZWQKKwkJCSAqIGR1cmluZyByZXdyaXRlKSwgc28gd2UgbmVlZCB0byByZXBs aWNhdGUgdGhlIHJld3JpdGUgVVBEQVRFcyB0byBrZWVwCisJCQkgKiB0aGUgZGF0YSBjb25zaXN0 ZW50LgorCQkJICoKKwkJCSAqIFRPIElNUFJPVkU6IFdlIGNvdWxkIGltcHJvdmUgdGhpcyBieSBs ZXR0aW5nIHRoZSBzdWJzY3JpYmVyIG9ubHkKKwkJCSAqIHJld3JpdGUgdGhlIGV4dHJhIGRhdGEg aW5zdGVhZCBvZiBkb2luZyBmdWxseSByZXdyaXRlIGFuZCB1c2UgdGhlCisJCQkgKiB1cGNvbWlu ZyByZXdyaXRlIFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRhLiBCZXNpZGVzLCB3ZSBt YXkKKwkJCSAqIG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwgdHlwZSBv ZiByZXdyaXRlIGRkbCwgZm9yCisJCQkgKiBleGFtcGxlLCBpdCBzZWVtcyBmaW5lIHRvIHNraXAg c2VuZGluZyByZXdyaXRlIGNoYW5nZXMgZm9yIEFMVEVSCisJCQkgKiBUQUJMRSBTRVQgTE9HR0VE IGFzIHRoZSBkYXRhIGluIHRoZSB0YWJsZSBkb2Vzbid0IGFjdHVhbGx5IGJlCisJCQkgKiBjaGFu Z2VkLgorCQkJICovCisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7 CisJCQlBc3NlcnQocmVsYXRpb24pOworCisJCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRy eShkYXRhLCByZWxhdGlvbik7CisKKwkJCS8qCisJCQkgKiBTa2lwIHNlbmRpbmcgdGhpcyBkZGwg aWYgd2UgZG9uJ3QgcHVibGlzaCBkZGwgbWVzc2FnZSBvciB0aGUgZGRsCisJCQkgKiBuZWVkIHRv IGJlIHB1Ymxpc2hlZCB2aWEgaXRzIHJvb3QgcmVsYXRpb24uCisJCQkgKi8KKwkJCWlmICghcmVs ZW50cnktPnB1YmFjdGlvbnMucHViZGRsIHx8CisJCQkJcmVsZW50cnktPnB1Ymxpc2hfYXNfcmVs aWQgIT0gcmVsaWQpCisJCQl7CisJCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0 dXJuOworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSBEQ1RfU2ltcGxlQ21kOgorCQkJcmVsYXRp b24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlpZiAocmVsYXRpb24gPT0g TlVMTCkKKwkJCQlicmVhazsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0 YSwgcmVsYXRpb24pOworCisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJ CXsKKwkJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJ CWJyZWFrOworCQljYXNlIERDVF9PYmplY3REcm9wOgorCQkJLyogZG8gbm90aGluZyAqLworCQkJ YnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgdHlwZSAlZCIs IGNtZHR5cGUpOworCQkJYnJlYWs7CisJfQorCisJLyogU2VuZCBCRUdJTiBpZiB3ZSBoYXZlbid0 IHlldCAqLworCWlmICh0eG5kYXRhICYmICF0eG5kYXRhLT5zZW50X2JlZ2luX3R4bikKKwkJcGdv dXRwdXRfc2VuZF9iZWdpbihjdHgsIHR4bik7CisKKwlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUo Y3R4LCB0cnVlKTsKKwlsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoY3R4LT5vdXQsCisJCQkJ CQkJCXhpZCwKKwkJCQkJCQkJbWVzc2FnZV9sc24sCisJCQkJCQkJCXByZWZpeCwKKwkJCQkJCQkJ c3osCisJCQkJCQkJCW1lc3NhZ2UpOworCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CisK KwlpZiAocmVsYXRpb24pCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworfQorCiAvKgogICog UmV0dXJuIHRydWUgaWYgdGhlIGRhdGEgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIG9yaWdpbiBhbmQg dGhlIHVzZXIgaGFzCiAgKiByZXF1ZXN0ZWQgdGhlIGNoYW5nZXMgdGhhdCBkb24ndCBoYXZlIGFu IG9yaWdpbiwgZmFsc2Ugb3RoZXJ3aXNlLgpAQCAtMTk5Myw3ICsyMTY3LDggQEAgZ2V0X3JlbF9z eW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5 LT5zY2hlbWFfc2VudCA9IGZhbHNlOwogCQllbnRyeS0+c3RyZWFtZWRfdHhucyA9IE5JTDsKIAkJ ZW50cnktPnB1YmFjdGlvbnMucHViaW5zZXJ0ID0gZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRl ID0KLQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1 YnRydW5jYXRlID0gZmFsc2U7CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBlbnRy eS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwg PSBmYWxzZTsKIAkJZW50cnktPm5ld19zbG90ID0gTlVMTDsKIAkJZW50cnktPm9sZF9zbG90ID0g TlVMTDsKIAkJbWVtc2V0KGVudHJ5LT5leHByc3RhdGUsIDAsIHNpemVvZihlbnRyeS0+ZXhwcnN0 YXRlKSk7CkBAIC0yMDUxLDYgKzIyMjYsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXRE YXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJZW50cnktPnB1YmFjdGlvbnMucHVidXBk YXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGZhbHNlOwogCQll bnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IGZhbHNlOworCQllbnRyeS0+cHViYWN0aW9u cy5wdWJkZGwgPSBmYWxzZTsKIAogCQkvKgogCQkgKiBUdXBsZSBzbG90cyBjbGVhbnVwcy4gKFdp bGwgYmUgcmVidWlsdCBsYXRlciBpZiBuZWVkZWQpLgpAQCAtMjE2NCw2ICsyMzQwLDcgQEAgZ2V0 X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJ CQkJZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRh dGU7CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5w dWJkZWxldGU7CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgfD0gcHViLT5wdWJh Y3Rpb25zLnB1YnRydW5jYXRlOworCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCB8PSBwdWIt PnB1YmFjdGlvbnMucHViZGRsOwogCiAJCQkJLyoKIAkJCQkgKiBXZSB3YW50IHRvIHB1Ymxpc2gg dGhlIGNoYW5nZXMgYXMgdGhlIHRvcC1tb3N0IGFuY2VzdG9yCkBAIC0yMzQ5LDYgKzI1MjYsNyBA QCByZWxfc3luY19jYWNoZV9wdWJsaWNhdGlvbl9jYihEYXR1bSBhcmcsIGludCBjYWNoZWlkLCB1 aW50MzIgaGFzaHZhbHVlKQogCXsKIAkJZW50cnktPnJlcGxpY2F0ZV92YWxpZCA9IGZhbHNlOwog CX0KKwogfQogCiAvKiBTZW5kIFJlcGxpY2F0aW9uIG9yaWdpbiAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L3JlbGNhY2hlLmMKaW5kZXggMDBkYzBmMjQwMy4uZjFiNGQwOTNjZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9yZWxjYWNoZS5jCkBAIC01NjgzLDYgKzU2ODMsNyBAQCBSZWxhdGlvbkJ1aWxkUHVibGlj YXRpb25EZXNjKFJlbGF0aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1YmRlc2MpCiAJ CXB1YmRlc2MtPnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAkJ cHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZWxldGUgfD0gcHViZm9ybS0+cHViZGVsZXRlOwogCQlw dWJkZXNjLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlIHw9IHB1YmZvcm0tPnB1YnRydW5jYXRlOwor CQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YmRkbCB8PSBwdWJmb3JtLT5wdWJkZGw7CiAKIAkJLyoK IAkJICogQ2hlY2sgaWYgYWxsIGNvbHVtbnMgcmVmZXJlbmNlZCBpbiB0aGUgZmlsdGVyIGV4cHJl c3Npb24gYXJlIHBhcnQKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IGJkOWIwNjZlNGUuLjk3ZjQzNGE3ZTggMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuYwpAQCAtMzg5Nyw2ICszODk3LDcgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUg KmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCWludAkJCWlfcHVidXBkYXRlOwogCWludAkJ CWlfcHViZGVsZXRlOwogCWludAkJCWlfcHVidHJ1bmNhdGU7CisJaW50CQkJaV9wdWJkZGw7CiAJ aW50CQkJaV9wdWJ2aWFyb290OwogCWludAkJCWksCiAJCQkJbnR1cHM7CkBAIC0zOTEyLDIzICsz OTEzLDIzIEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0 aW9ucykKIAlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKIAogCS8qIEdldCB0aGUgcHVibGljYXRp b25zLiAqLwotCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDEzMDAwMCkKKwlpZiAoZm91dC0+ cmVtb3RlVmVyc2lvbiA+PSAxNTAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAog CQkJCQkJCSAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkg InAucHVib3duZXIsICIKLQkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5w dWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBwLnB1YnZpYXJvb3QgIgorCQkJ CQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxl dGUsIHAucHVidHJ1bmNhdGUsIHAucHViZGRsLCBwLnB1YnZpYXJvb3QgIgogCQkJCQkJCSAiRlJP TSBwZ19wdWJsaWNhdGlvbiBwIik7CiAJZWxzZSBpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAx MTAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNUIHAu dGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkgInAucHVib3duZXIsICIKLQkJ CQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVs ZXRlLCBwLnB1YnRydW5jYXRlLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKKwkJCQkJCQkgInAucHVi YWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRy dW5jYXRlLCBmYWxzZSBhcyBwLnB1YmRkbCwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCiAJCQkJCQkJ ICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAllbHNlCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIK IAkJCQkJCQkgInAucHVib3duZXIsICIKLQkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymlu c2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBmYWxzZSBBUyBwdWJ0cnVuY2F0ZSwgZmFs c2UgQVMgcHVidmlhcm9vdCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQs IHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNhdGUsIGZhbHNlIGFz IHAucHViZGRsLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGlj YXRpb24gcCIpOwogCiAJcmVzID0gRXhlY3V0ZVNxbFF1ZXJ5KGZvdXQsIHF1ZXJ5LT5kYXRhLCBQ R1JFU19UVVBMRVNfT0spOwpAQCAtMzk0NCw2ICszOTQ1LDcgQEAgZ2V0UHVibGljYXRpb25zKEFy Y2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCWlfcHVidXBkYXRlID0gUFFmbnVt YmVyKHJlcywgInB1YnVwZGF0ZSIpOwogCWlfcHViZGVsZXRlID0gUFFmbnVtYmVyKHJlcywgInB1 YmRlbGV0ZSIpOwogCWlfcHVidHJ1bmNhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidHJ1bmNhdGUi KTsKKwlpX3B1YmRkbCA9IFBRZm51bWJlcihyZXMsICJwdWJkZGwiKTsKIAlpX3B1YnZpYXJvb3Qg PSBQUWZudW1iZXIocmVzLCAicHVidmlhcm9vdCIpOwogCiAJcHViaW5mbyA9IHBnX21hbGxvYyhu dHVwcyAqIHNpemVvZihQdWJsaWNhdGlvbkluZm8pKTsKQEAgLTM5NjcsNiArMzk2OSw4IEBAIGdl dFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAkJCShz dHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGVsZXRlKSwgInQiKSA9PSAwKTsKIAkJcHVi aW5mb1tpXS5wdWJ0cnVuY2F0ZSA9CiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1 YnRydW5jYXRlKSwgInQiKSA9PSAwKTsKKwkJcHViaW5mb1tpXS5wdWJkZGwgPQorCQkJKHN0cmNt cChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJkZGwpLCAidCIpID09IDApOwogCQlwdWJpbmZvW2ld LnB1YnZpYXJvb3QgPQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJ2aWFyb290 KSwgInQiKSA9PSAwKTsKIApAQCAtNDA0Niw2ICs0MDUwLDE1IEBAIGR1bXBQdWJsaWNhdGlvbihB cmNoaXZlICpmb3V0LCBjb25zdCBQdWJsaWNhdGlvbkluZm8gKnB1YmluZm8pCiAJCWZpcnN0ID0g ZmFsc2U7CiAJfQogCisJaWYgKHB1YmluZm8tPnB1YmRkbCkKKwl7CisJCWlmICghZmlyc3QpCisJ CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgIik7CisKKwkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIocXVlcnksICJkZGwiKTsKKwkJZmlyc3QgPSBmYWxzZTsKKwl9CisKIAlhcHBlbmRQUUV4 cEJ1ZmZlckNoYXIocXVlcnksICdcJycpOwogCiAJaWYgKHB1YmluZm8tPnB1YnZpYXJvb3QpCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2R1bXAuaAppbmRleCA0MjdmNWQ0NWY2Li42ODU2ODNlZWIwIDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKQEAgLTYy MCw2ICs2MjAsNyBAQCB0eXBlZGVmIHN0cnVjdCBfUHVibGljYXRpb25JbmZvCiAJYm9vbAkJcHVi ZGVsZXRlOwogCWJvb2wJCXB1YnRydW5jYXRlOwogCWJvb2wJCXB1YnZpYXJvb3Q7CisJYm9vbAkJ cHViZGRsOwogfSBQdWJsaWNhdGlvbkluZm87CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X3dhbGR1bXAvcm1ncmRlc2MuYyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCmluZGV4 IDZiOGMxN2JiNGMuLjc5MmY0Mzg5NTkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC9y bWdyZGVzYy5jCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCkBAIC0yNyw2ICsy Nyw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKICNpbmNsdWRlICJjb21tYW5k cy90YWJsZXNwYWNlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgorI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmln aW4uaCIKICNpbmNsdWRlICJybWdyZGVzYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieWRl ZnMuaCIKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3Fs L2Rlc2NyaWJlLmMKaW5kZXggYzY0NWQ2NjQxOC4uMmU5NGZjYTc0NCAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTYx NTksNyArNjE1OSw3IEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlQ UUV4cEJ1ZmZlckRhdGEgYnVmOwogCVBHcmVzdWx0ICAgKnJlczsKIAlwcmludFF1ZXJ5T3B0IG15 b3B0ID0gcHNldC5wb3B0OwotCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10g PSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl fTsKKwlzdGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1tdID0ge2ZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OwogCiAJ aWYgKHBzZXQuc3ZlcnNpb24gPCAxMDAwMDApCiAJewpAQCAtNjE5NCw2ICs2MTk0LDEwIEBAIGxp c3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJYXBwZW5kUFFFeHBCdWZmZXIo JmJ1ZiwKIAkJCQkJCSAgIixcbiAgcHVidmlhcm9vdCBBUyBcIiVzXCIiLAogCQkJCQkJICBnZXR0 ZXh0X25vb3AoIlZpYSByb290IikpOworCWlmIChwc2V0LnN2ZXJzaW9uID49IDE0MDAwMCkKKwkJ YXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgIixcbiAgcHViZGRsIEFTIFwiJXNcIiIs CisJCQkJCQkgIGdldHRleHRfbm9vcCgiRERMcyIpKTsKIAogCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZidWYsCiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uXG4iKTsKQEAg LTYyODQsNiArNjI4OCw3IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRl cm4pCiAJUEdyZXN1bHQgICAqcmVzOwogCWJvb2wJCWhhc19wdWJ0cnVuY2F0ZTsKIAlib29sCQlo YXNfcHVidmlhcm9vdDsKKwlib29sCQloYXNfcHViZGRsOwogCiAJUFFFeHBCdWZmZXJEYXRhIHRp dGxlOwogCXByaW50VGFibGVDb250ZW50IGNvbnQ7CkBAIC02MzAwLDYgKzYzMDUsNyBAQCBkZXNj cmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCiAJaGFzX3B1YnRydW5jYXRl ID0gKHBzZXQuc3ZlcnNpb24gPj0gMTEwMDAwKTsKIAloYXNfcHVidmlhcm9vdCA9IChwc2V0LnN2 ZXJzaW9uID49IDEzMDAwMCk7CisJaGFzX3B1YmRkbCA9ICAocHNldC5zdmVyc2lvbiA+PSAxNTAw MDApOwogCiAJaW5pdFBRRXhwQnVmZmVyKCZidWYpOwogCkBAIC02MzEzLDYgKzYzMTksOSBAQCBk ZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCWlmIChoYXNfcHVidmlh cm9vdCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCQkgIiwgcHVidmlhcm9v dCIpOworCWlmIChoYXNfcHViZGRsKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAorCQkJ CQkJCSAiLCBwdWJkZGwiKTsKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJICJc bkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvblxuIik7CiAKQEAgLTYzNjQsNiArNjM3Myw4 IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQluY29scysr OwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQluY29scysrOworCQlpZiAoaGFzX3B1YmRkbCkK KwkJCW5jb2xzKys7CiAKIAkJaW5pdFBRRXhwQnVmZmVyKCZ0aXRsZSk7CiAJCXByaW50ZlBRRXhw QnVmZmVyKCZ0aXRsZSwgXygiUHVibGljYXRpb24gJXMiKSwgcHVibmFtZSk7CkBAIC02Mzc4LDYg KzYzODksOCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJ cHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJUcnVuY2F0ZXMiKSwgdHJ1 ZSwgYWxpZ24pOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmludFRhYmxlQWRkSGVhZGVy KCZjb250LCBnZXR0ZXh0X25vb3AoIlZpYSByb290IiksIHRydWUsIGFsaWduKTsKKwkJaWYgKGhh c19wdWJkZGwpCisJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIkRE THMiKSwgdHJ1ZSwgYWxpZ24pOwogCiAJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZh bHVlKHJlcywgaSwgMiksIGZhbHNlLCBmYWxzZSk7CiAJCXByaW50VGFibGVBZGRDZWxsKCZjb250 LCBQUWdldHZhbHVlKHJlcywgaSwgMyksIGZhbHNlLCBmYWxzZSk7CkBAIC02Mzg4LDYgKzY0MDEs OCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJcHJpbnRU YWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA3KSwgZmFsc2UsIGZhbHNlKTsK IAkJaWYgKGhhc19wdWJ2aWFyb290KQogCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0 dmFsdWUocmVzLCBpLCA4KSwgZmFsc2UsIGZhbHNlKTsKKwkJaWYgKGhhc19wdWJkZGwpCisJCQlw cmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDkpLCBmYWxzZSwgZmFs c2UpOwogCiAJCWlmICghcHViYWxsdGFibGVzKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3Mvcm1ncmxpc3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCmluZGV4 IDAwMGJjYmZkYWYuLjM3ZGZkNDUxZjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9y bWdybGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCkBAIC00NywzICs0 Nyw0IEBAIFBHX1JNR1IoUk1fQ09NTUlUX1RTX0lELCAiQ29tbWl0VHMiLCBjb21taXRfdHNfcmVk bywgY29tbWl0X3RzX2Rlc2MsIGNvbW1pdF90c19pCiBQR19STUdSKFJNX1JFUExPUklHSU5fSUQs ICJSZXBsaWNhdGlvbk9yaWdpbiIsIHJlcGxvcmlnaW5fcmVkbywgcmVwbG9yaWdpbl9kZXNjLCBy ZXBsb3JpZ2luX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQogUEdfUk1HUihSTV9H RU5FUklDX0lELCAiR2VuZXJpYyIsIGdlbmVyaWNfcmVkbywgZ2VuZXJpY19kZXNjLCBnZW5lcmlj X2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBnZW5lcmljX21hc2ssIE5VTEwpCiBQR19STUdSKFJNX0xP R0lDQUxNU0dfSUQsICJMb2dpY2FsTWVzc2FnZSIsIGxvZ2ljYWxtc2dfcmVkbywgbG9naWNhbG1z Z19kZXNjLCBsb2dpY2FsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBsb2dpY2FsbXNn X2RlY29kZSkKK1BHX1JNR1IoUk1fTE9HSUNBTERETE1TR19JRCwgIkxvZ2ljYWxERExNZXNzYWdl IiwgbG9naWNhbGRkbG1zZ19yZWRvLCBsb2dpY2FsZGRsbXNnX2Rlc2MsIGxvZ2ljYWxkZGxtc2df aWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxkZGxtc2dfZGVjb2RlKQpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKaW5kZXggMmM4NzEwNmVlZi4uY2UxYjE3ZjVhYiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0CkBAIC0xMTgyOSw0ICsxMTgyOSwxMyBAQAogeyBvaWQgPT4gJzQ2NDMnLCBk ZXNjciA9PiAnZXhwYW5kIGpzb24gZm9ybWF0IERETCB0byBhIHBsYWluIERETCBjb21tYW5kJywK ICAgcHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ ICd0ZXh0JywKICAgcHJvYXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNl X2V4cGFuZF9jb21tYW5kJyB9LAoreyBvaWQgPT4gJzQ2NDQnLCBkZXNjciA9PiAndHJpZ2dlciBm b3IgZGRsIGNvbW1hbmQgZGVwYXJzZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFy c2VfZGRsX2NvbW1hbmRfZW5kJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHBy b2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1h bmRfZW5kJyB9LAoreyBvaWQgPT4gJzQ2NDUnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNv bW1hbmQgZGVwYXJzZSBzdGFydCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2Vf ZGRsX2NvbW1hbmRfc3RhcnQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJv YXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFu ZF9zdGFydCcgfSwKK3sgb2lkID0+ICc0NjQ2JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBj b21tYW5kIGRlcGFyc2UgdGFibGUgcmV3cml0ZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9u X2RlcGFyc2VfdGFibGVfcmV3cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAor ICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxl X3Jld3JpdGUnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXggZWNm NWEyOGUwMC4uZGFmZDQ4Mzc2YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w dWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaApA QCAtNTQsNiArNTQsOSBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9uLDYxMDQsUHVibGljYXRpb25S ZWxhdGlvbklkKQogCiAJLyogdHJ1ZSBpZiBwYXJ0aXRpb24gY2hhbmdlcyBhcmUgcHVibGlzaGVk IHVzaW5nIHJvb3Qgc2NoZW1hICovCiAJYm9vbAkJcHVidmlhcm9vdDsKKworCS8qIHRydWUgaWYg dGFibGUgY3JlYXRpb25zIGFyZSBwdWJsaXNoZWQgKi8KKwlib29sCQlwdWJkZGw7CiB9IEZvcm1E YXRhX3BnX3B1YmxpY2F0aW9uOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC03Miw2ICs3NSw3 IEBAIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uQWN0aW9ucwogCWJvb2wJCXB1YnVwZGF0ZTsK IAlib29sCQlwdWJkZWxldGU7CiAJYm9vbAkJcHVidHJ1bmNhdGU7CisJYm9vbAkJcHViZGRsOwog fSBQdWJsaWNhdGlvbkFjdGlvbnM7CiAKIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uRGVzYwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IDEwMDkxYzNhYWYuLmZkMmVlN2Zm ZTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysg Yi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTcxLDcgKzcxLDggQEAg ZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdFNpbXBsZUNvbW1hbmQoT2JqZWN0QWRkcmVz cyBhZGRyZXNzLAogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUg KnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVsaWQoT2lk IG9iamVjdElkKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3Vi Y21kKE5vZGUgKnN1YmNtZCwKLQkJCQkJCQkJCQkJCU9iamVjdEFkZHJlc3MgYWRkcmVzcyk7CisJ CQkJCQkJCQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3MsCisJCQkJCQkJCQkJCQlib29sIHJld3Jp dGUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZUVuZCh2b2lkKTsKIAogZXh0 ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEdyYW50KEludGVybmFsR3JhbnQgKmlzdG10KTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi5hOGRjYTg2M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICogZGRsbWVzc2FnZS5oCisgKgkgICBFeHBvcnRzIGZyb20gcmVwbGljYXRpb24vbG9n aWNhbC9kZGxtZXNzYWdlLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v ZGRsbWVzc2FnZS5oCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19MT0dJQ0FM X0RETF9NRVNTQUdFX0gKKyNkZWZpbmUgUEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisKKyNpbmNs dWRlICJhY2Nlc3MveGxvZy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1 ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKworCisv KgorICogU3VwcG9ydCBmb3Iga2VlcGluZyB0cmFjayBvZiBkZXBhcnNlZCBjb21tYW5kcy4KKyAq LwordHlwZWRlZiBlbnVtIERlcGFyc2VkQ29tbWFuZFR5cGUKK3sKKwlEQ1RfU2ltcGxlQ21kLAor CURDVF9UYWJsZURyb3BTdGFydCwKKwlEQ1RfVGFibGVEcm9wRW5kLAorCURDVF9UYWJsZUFsdGVy LAorCURDVF9PYmplY3RDcmVhdGUsCisJRENUX09iamVjdERyb3AKK30gRGVwYXJzZWRDb21tYW5k VHlwZTsKKworLyoKKyAqIEdlbmVyaWMgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSB3YWwg cmVjb3JkLgorICovCit0eXBlZGVmIHN0cnVjdCB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlCit7CisJ T2lkCQkJCQkJZGJJZDsJCQkvKiBkYXRhYmFzZSBPaWQgZW1pdHRlZCBmcm9tICovCisJU2l6ZQkJ CQkJcHJlZml4X3NpemU7CS8qIGxlbmd0aCBvZiBwcmVmaXggKi8KKwlPaWQJCQkJCQlyZWxpZDsJ CQkvKiBpZCBvZiB0aGUgdGFibGUgKi8KKwlEZXBhcnNlZENvbW1hbmRUeXBlCQljbWR0eXBlOwkJ LyogdHlwZSBvZiBzcWwgY29tbWFuZCAqLworCVNpemUJCQkJCW1lc3NhZ2Vfc2l6ZTsJICAvKiBz aXplIG9mIHRoZSBtZXNzYWdlICovCisKKwkvKgorCSAqIHBheWxvYWQsIGluY2x1ZGluZyBudWxs LXRlcm1pbmF0ZWQgcHJlZml4IG9mIGxlbmd0aCBwcmVmaXhfc2l6ZQorCSAqLworCWNoYXIJCW1l c3NhZ2VbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30geGxfbG9naWNhbF9kZGxfbWVzc2FnZTsK KworI2RlZmluZSBTaXplT2ZMb2dpY2FsRERMTWVzc2FnZQkob2Zmc2V0b2YoeGxfbG9naWNhbF9k ZGxfbWVzc2FnZSwgbWVzc2FnZSkpCisKK2V4dGVybiBYTG9nUmVjUHRyIExvZ0xvZ2ljYWxERExN ZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBl IGNtZHR5cGUsCisJCQkJCQkJCQkgICBjb25zdCBjaGFyICpkZGxfbWVzc2FnZSwgc2l6ZV90IHNp emUpOworCisvKiBSTUdSIEFQSSovCisjZGVmaW5lIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRQkw eDAwCit2b2lkCQlsb2dpY2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwor dm9pZAkJbG9naWNhbGRkbG1zZ19kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUg KnJlY29yZCk7Citjb25zdCBjaGFyICpsb2dpY2FsZGRsbXNnX2lkZW50aWZ5KHVpbnQ4IGluZm8p OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5o IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKaW5kZXggNzQxYmY2NWNmNy4uNDI3 YTdiOTk3ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKKysr IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKQEAgLTI3LDYgKzI3LDcgQEAgZXh0 ZXJuIHZvaWQgaGVhcDJfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1Jl Y29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIHhhY3RfZGVjb2RlKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIHN0YW5k YnlfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAq YnVmKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxkZGxt c2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAq YnVmKTsKIAogZXh0ZXJuIHZvaWQgTG9naWNhbERlY29kaW5nUHJvY2Vzc1JlY29yZChMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCQkJIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3Jk KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggN2VhYTRjOTdlZC4u NWQ2MTc0ODRmYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHBy b3RvLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTYx LDYgKzYxLDcgQEAgdHlwZWRlZiBlbnVtIExvZ2ljYWxSZXBNc2dUeXBlCiAJTE9HSUNBTF9SRVBf TVNHX1JFTEFUSU9OID0gJ1InLAogCUxPR0lDQUxfUkVQX01TR19UWVBFID0gJ1knLAogCUxPR0lD QUxfUkVQX01TR19NRVNTQUdFID0gJ00nLAorCUxPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFID0g J0wnLAogCUxPR0lDQUxfUkVQX01TR19CRUdJTl9QUkVQQVJFID0gJ2InLAogCUxPR0lDQUxfUkVQ X01TR19QUkVQQVJFID0gJ1AnLAogCUxPR0lDQUxfUkVQX01TR19DT01NSVRfUFJFUEFSRUQgPSAn SycsCkBAIC0yMjksNyArMjMwLDExIEBAIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfdHJ1 bmNhdGUoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAogZXh0ZXJuIExpc3QgKmxv Z2ljYWxyZXBfcmVhZF90cnVuY2F0ZShTdHJpbmdJbmZvIGluLAogCQkJCQkJCQkJICBib29sICpj YXNjYWRlLCBib29sICpyZXN0YXJ0X3NlcXMpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0 ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBs c24sCi0JCQkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNp emUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCQkJCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25h bCwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1l c3NhZ2UpOworZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9kZGxtZXNzYWdlKFN0cmluZ0lu Zm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJY29u c3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiBj aGFyICpsb2dpY2FscmVwX3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRy ICpsc24sIGNvbnN0IGNoYXIgKipwcmVmaXgsIFNpemUgKnN6KTsKIGV4dGVybiB2b2lkIGxvZ2lj YWxyZXBfd3JpdGVfcmVsKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJ CQkJIFJlbGF0aW9uIHJlbCwgQml0bWFwc2V0ICpjb2x1bW5zKTsKIGV4dGVybiBMb2dpY2FsUmVw UmVsYXRpb24gKmxvZ2ljYWxyZXBfcmVhZF9yZWwoU3RyaW5nSW5mbyBpbik7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggYi9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKaW5kZXggYjdkMjhkNzA0NS4uNzYzZTQzZjZiZSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCisrKyBi L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaApAQCAtOTAsNiArOTAsMTgg QEAgdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCQkJU2l6ZSBtZXNzYWdlX3NpemUsCiAJCQkJ CQkJCQkJY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qCisgKiBDYWxsZWQgZm9yIHRoZSBsb2dp Y2FsIGRlY29kaW5nIERETCBtZXNzYWdlcy4KKyAqLwordHlwZWRlZiB2b2lkICgqTG9naWNhbERl Y29kZURETE1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJ CQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQ dHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJ CQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkgICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5 cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJICAgY29uc3Qg Y2hhciAqbWVzc2FnZSk7CisKIC8qCiAgKiBGaWx0ZXIgY2hhbmdlcyBieSBvcmlnaW4uCiAgKi8K QEAgLTIwMSw2ICsyMTMsMTkgQEAgdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZVN0cmVhbU1l c3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgKIAkJCQkJCQkJCQkJ ICBTaXplIG1lc3NhZ2Vfc2l6ZSwKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsK IAorLyoKKyAqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgbG9naWNhbCBkZWNvZGluZyBEREwgbWVz c2FnZXMgZnJvbSBpbi1wcm9ncmVzcworICogdHJhbnNhY3Rpb25zLgorICovCit0eXBlZGVmIHZv aWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFtRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJ CQkJCQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBj aGFyICpwcmVmaXgsCisJCQkJCQkJCQkJCQkgT2lkIHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFy c2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwK KwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyoKICAqIENhbGxiYWNrIGZv ciBzdHJlYW1pbmcgdHJ1bmNhdGVzIGZyb20gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLgogICov CkBAIC0yMjEsNiArMjQ2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3V0cHV0UGx1Z2luQ2FsbGJhY2tz CiAJTG9naWNhbERlY29kZVRydW5jYXRlQ0IgdHJ1bmNhdGVfY2I7CiAJTG9naWNhbERlY29kZUNv bW1pdENCIGNvbW1pdF9jYjsKIAlMb2dpY2FsRGVjb2RlTWVzc2FnZUNCIG1lc3NhZ2VfY2I7CisJ TG9naWNhbERlY29kZURETE1lc3NhZ2VDQiBkZGxtZXNzYWdlX2NiOwogCUxvZ2ljYWxEZWNvZGVG aWx0ZXJCeU9yaWdpbkNCIGZpbHRlcl9ieV9vcmlnaW5fY2I7CiAJTG9naWNhbERlY29kZVNodXRk b3duQ0Igc2h1dGRvd25fY2I7CiAKQEAgLTIzOSw2ICsyNjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBP dXRwdXRQbHVnaW5DYWxsYmFja3MKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ29tbWl0Q0Igc3RyZWFt X2NvbW1pdF9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZV9j YjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlX2NiOworCUxv Z2ljYWxEZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbG1lc3NhZ2VfY2I7CiAJTG9n aWNhbERlY29kZVN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlX2NiOwogfSBPdXRwdXRQ bHVnaW5DYWxsYmFja3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bn b3V0cHV0LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCmluZGV4IDAyMDI3 NTUwZTIuLjgzZTBiMWUyZTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bn b3V0cHV0LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaApAQCAtMjUs NiArMjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQR091dHB1dERhdGEKIAl1aW50MzIJCXByb3RvY29s X3ZlcnNpb247CiAJTGlzdAkgICAqcHVibGljYXRpb25fbmFtZXM7CiAJTGlzdAkgICAqcHVibGlj YXRpb25zOworCUxpc3QJICAgKmRlbGV0ZWRfcmVsaWRzOwogCWJvb2wJCWJpbmFyeTsKIAlib29s CQlzdHJlYW1pbmc7CiAJYm9vbAkJbWVzc2FnZXM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9y ZGVyYnVmZmVyLmgKaW5kZXggMDJiNTlhMTkzMS4uMGIxYTkxNjFjNSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApAQCAtMTEsNiArMTEsOCBAQAogCiAjaW5jbHVkZSAi YWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUg Im5vZGVzL25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2lu Y2x1ZGUgInN0b3JhZ2Uvc2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2lu Y2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCkBAIC01Niw2ICs1OCw3IEBAIHR5cGVkZWYgZW51bSBS ZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZQogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlNFUlQsCiAJ UkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfREVM RVRFLAorCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFLAogCVJFT1JERVJfQlVGRkVS X0NIQU5HRV9NRVNTQUdFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT04sCiAJ UkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVEVSTkFMX1NOQVBTSE9ULApAQCAtMTMwLDYgKzEzMywx NiBAQCB0eXBlZGVmIHN0cnVjdCBSZW9yZGVyQnVmZmVyQ2hhbmdlCiAJCQljaGFyCSAgICptZXNz YWdlOwogCQl9CQkJbXNnOwogCisJCS8qIERETCBNZXNzYWdlLiAqLworCQlzdHJ1Y3QKKwkJewor CQkJY2hhcgkgICAqcHJlZml4OworCQkJU2l6ZQkJbWVzc2FnZV9zaXplOworCQkJY2hhcgkgICAq bWVzc2FnZTsKKwkJCU9pZAkJCXJlbGlkOworCQkJRGVwYXJzZWRDb21tYW5kVHlwZQljbWR0eXBl OworCQl9CQkJZGRsbXNnOworCiAJCS8qIE5ldyBzbmFwc2hvdCwgc2V0IHdoZW4gYWN0aW9uID09 ICpfSU5URVJOQUxfU05BUFNIT1QgKi8KIAkJU25hcHNob3QJc25hcHNob3Q7CiAKQEAgLTQzNSw2 ICs0NDgsMTYgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQikgKFJlb3Jk ZXJCdWZmZXIgKnJiLAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKIAkJ CQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyogRERMIG1lc3NhZ2UgY2FsbGJhY2sg c2lnbmF0dXJlICovCit0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyRERMTWVzc2FnZUNCKSAo UmVvcmRlckJ1ZmZlciAqcmIsCisJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAor CQkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAgY29uc3Qg Y2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkgICBEZXBh cnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBzeiwKKwkJCQkJCQkJ CQkgICBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyogYmVnaW4gcHJlcGFyZSBjYWxsYmFjayBz aWduYXR1cmUgKi8KIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJCZWdpblByZXBhcmVDQikg KFJlb3JkZXJCdWZmZXIgKnJiLAogCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuKTsK QEAgLTUwMSw2ICs1MjQsMTcgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbU1l c3NhZ2VDQikgKAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKIAkJ CQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyogc3RyZWFtIERETCBtZXNzYWdl IGNhbGxiYWNrIHNpZ25hdHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVh bURETE1lc3NhZ2VDQikgKAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJ CQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1l c3NhZ2VfbHNuLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJ CSBPaWQgcmVsaWQsCisJCQkJCQkJCQkJCQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAor CQkJCQkJCQkJCQkJIFNpemUgc3osCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7 CisKIC8qIHN0cmVhbSB0cnVuY2F0ZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KIHR5cGVkZWYgdm9p ZCAoKlJlb3JkZXJCdWZmZXJTdHJlYW1UcnVuY2F0ZUNCKSAoCiAJCQkJCQkJCQkJCSAgIFJlb3Jk ZXJCdWZmZXIgKnJiLApAQCAtNTUyLDYgKzU4Niw3IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJ UmVvcmRlckJ1ZmZlckFwcGx5VHJ1bmNhdGVDQiBhcHBseV90cnVuY2F0ZTsKIAlSZW9yZGVyQnVm ZmVyQ29tbWl0Q0IgY29tbWl0OwogCVJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IgbWVzc2FnZTsKKwlS ZW9yZGVyQnVmZmVyRERMTWVzc2FnZUNCIGRkbG1lc3NhZ2U7CiAKIAkvKgogCSAqIENhbGxiYWNr cyB0byBiZSBjYWxsZWQgd2hlbiBzdHJlYW1pbmcgYSB0cmFuc2FjdGlvbiBhdCBwcmVwYXJlIHRp bWUuCkBAIC01NzEsNiArNjA2LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVm ZmVyU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1pdDsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ2hh bmdlQ0Igc3RyZWFtX2NoYW5nZTsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCIHN0cmVh bV9tZXNzYWdlOworCVJlb3JkZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbG1l c3NhZ2U7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlOwog CiAJLyoKQEAgLTY1MCw2ICs2ODYsOSBAQCBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVN ZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCSAg U25hcHNob3Qgc25hcCwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJCQkgIGJvb2wgdHJhbnNhY3Rp b25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwg Y29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVERExN ZXNzYWdlKFJlb3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwgWExvZ1JlY1B0ciBsc24sCisJ CQkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJ CQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBl IGNtZHR5cGUpOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckNvbW1pdChSZW9yZGVyQnVmZmVy ICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCVhMb2dSZWNQdHIgY29tbWl0X2xzbiwg WExvZ1JlY1B0ciBlbmRfbHNuLAogCQkJCQkJCQlUaW1lc3RhbXBUeiBjb21taXRfdGltZSwgUmVw T3JpZ2luSWQgb3JpZ2luX2lkLCBYTG9nUmVjUHRyIG9yaWdpbl9sc24pOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHNxbC5vdXQKaW5kZXggYTdmNTcwMGVkYy4uYmZjNzNjMjMyOCAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3BzcWwub3V0CkBAIC01OTcwLDkgKzU5NzAsOSBAQCBMaXN0IG9mIHNjaGVtYXMK ICgwIHJvd3MpCiAKIFxkUnAgIm5vLnN1Y2gucHVibGljYXRpb24iCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotIE5hbWUgfCBPd25lciB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KICgwIHJvd3MpCiAKIFxkUnMgIm5vLnN1 Y2guc3Vic2NyaXB0aW9uIgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w dWJsaWNhdGlvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91 dAppbmRleCA0MjdmODdlYTA3Li4yYjdjZDBkNTk2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3B1YmxpY2F0aW9uLm91dApAQCAtMzAsMjAgKzMwLDIwIEBAIEVSUk9SOiAgY29uZmxpY3Rp bmcgb3IgcmVkdW5kYW50IG9wdGlvbnMKIExJTkUgMTogLi4udWJfeHh4IFdJVEggKHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290ID0gJ3RydWUnLCBwdWJsaXNoX3ZpLi4uCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogXGRScAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVi bGljYXRpb25zCi0gICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAg IHwgZgotIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCBmICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Yg cHVibGljYXRpb25zCisgICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICB8IHQgICAgICAg fCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMiByb3dzKQogCiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViX2RlZmF1bHQgU0VUIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRl LCBkZWxldGUnKTsKIFxkUnAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgICBOYW1lICAgICAgICB8ICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgICB8IGYKLSB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgICBOYW1lICAgICAgICB8ICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cGli X2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCisgdGVz dHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgog KDIgcm93cykKIAogLS0tIGFkZGluZyB0YWJsZXMKQEAgLTg3LDEwICs4NywxMCBAQCBSRVNFVCBj bGllbnRfbWluX21lc3NhZ2VzOwogLS0gc2hvdWxkIGJlIGFibGUgdG8gYWRkIHNjaGVtYSB0byAn Rk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJs ZSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0 YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJs ZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgpAQCAtOTksMjAgKzk5LDIwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAtLSBzaG91bGQgYmUgYWJsZSB0byBkcm9wIHNjaGVtYSBmcm9tICdGT1IgVEFCTEUnIHB1Ymxp Y2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIERST1AgVEFCTEVTIElO IFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBm CiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCiAKIC0tIHNob3VsZCBiZSBhYmxl IHRvIHNldCBzY2hlbWEgdG8gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZm9ydGFibGUgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJw KyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAicHViX3Rlc3QiCiAKQEAgLTEyMywxMCArMTIzLDEwIEBAIENSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViX2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIENSRUFU RSBQVUJMSUNBVElPTiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1B IHB1Yl90ZXN0LCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBSRVNFVCBjbGllbnRfbWlu X21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAg ICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogVGFibGVzIGZyb20g c2NoZW1hczoKQEAgLTEzNSwxMCArMTM1LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBz aG91bGQgYmUgYWJsZSB0byBhZGQgYSB0YWJsZSBvZiB0aGUgc2FtZSBzY2hlbWEgdG8gdGhlIHNj aGVtYSBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgQURE IFRBQkxFIHB1Yl90ZXN0LnRlc3RwdWJfbm9wazsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogVGFi bGVzIGZyb20gc2NoZW1hczoKQEAgLTE0NywxMCArMTQ3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAtLSBzaG91bGQgYmUgYWJsZSB0byBkcm9wIHRoZSB0YWJsZQogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1Yl9mb3JzY2hlbWEgRFJPUCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBc ZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hl bWFzOgogICAgICJwdWJfdGVzdCIKIApAQCAtMTYxLDEwICsxNjEsMTAgQEAgRVJST1I6ICByZWxh dGlvbiAidGVzdHB1Yl9ub3BrIiBpcyBub3QgcGFydCBvZiB0aGUgcHVibGljYXRpb24KIC0tIHNo b3VsZCBiZSBhYmxlIHRvIHNldCB0YWJsZSB0byBzY2hlbWEgcHVibGljYXRpb24KIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIFNFVCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25v cGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAg ICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKIApAQCAtMTg2LDEwICsxODYsMTAgQEAgUHVibGlj YXRpb25zOgogICAgICJ0ZXN0cHViX2ZvcmFsbHRhYmxlcyIKIAogXGRScCsgdGVzdHB1Yl9mb3Jh bGx0YWJsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9yYWxsdGFibGVzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCB0ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3JhbGx0YWJsZXMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiBEUk9QIFRBQkxFIHRlc3Rw dWJfdGJsMjsKQEAgLTIwMSwxOSArMjAxLDE5IEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHVi MyBGT1IgVEFCTEUgdGVzdHB1Yl90YmwzOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI0IEZP UiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJsMzsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBc ZFJwKyB0ZXN0cHViMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDMi CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDNhIgogCiBcZFJwKyB0ZXN0cHViNAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNAorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDMiCiAKQEAgLTIzNCwxMCArMjM0LDEwIEBA IFVQREFURSB0ZXN0cHViX3BhcnRlZDEgU0VUIGEgPSAxOwogLS0gb25seSBwYXJlbnQgaXMgbGlz dGVkIGFzIGJlaW5nIGluIHB1YmxpY2F0aW9uLCBub3QgdGhlIHBhcnRpdGlvbgogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1Yl9mb3JwYXJ0ZWQgQUREIFRBQkxFIHRlc3RwdWJfcGFydGVkOwogXGRS cCsgdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJs aWMudGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTI1MiwxMCArMjUyLDEwIEBAIEFMVEVSIFRBQkxFIHRl c3RwdWJfcGFydGVkIERFVEFDSCBQQVJUSVRJT04gdGVzdHB1Yl9wYXJ0ZWQxOwogVVBEQVRFIHRl c3RwdWJfcGFydGVkMSBTRVQgYSA9IDE7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBh cnRlZCBTRVQgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CiBcZFJwKyB0ZXN0 cHViX2ZvcnBhcnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnBhcnRlZAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgdCAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0 cHViX3BhcnRlZCIKIApAQCAtMjg0LDEwICsyODQsMTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2Fn ZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEZPUiBUQUJMRSB0ZXN0 cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfdGJsMiBXSEVSRSAoYyA8PiAndGVzdCcgQU5EIGQgPCA1 KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsK IFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBm ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZf dGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6 dGV4dCkgQU5EIChkIDwgNSkpCkBAIC0zMDAsMTAgKzMwMCwxMCBAQCBUYWJsZXM6CiAKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEFERCBUQUJMRSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUg PiAxMDAwIEFORCBlIDwgMjAwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAg ICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDIi IFdIRVJFICgoYyA8PiAndGVzdCc6OnRleHQpIEFORCAoZCA8IDUpKQpAQCAtMzE5LDEwICszMTks MTAgQEAgUHVibGljYXRpb25zOgogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBEUk9QIFRB QkxFIHRlc3RwdWJfcmZfdGJsMjsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIg V0hFUkUgKChlID4gMTAwMCkgQU5EIChlIDwgMjAwMCkpCkBAIC0zMzAsMTAgKzMzMCwxMCBAQCBU YWJsZXM6CiAtLSByZW1vdmUgdGVzdHB1Yl9yZl90YmwxIGFuZCBhZGQgdGVzdHB1Yl9yZl90Ymwz IGFnYWluIChhbm90aGVyIFdIRVJFIGV4cHJlc3Npb24pCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlID4gMzAwIEFORCBlIDwgNTAw KTsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg fCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJf cmZfdGJsMyIgV0hFUkUgKChlID4gMzAwKSBBTkQgKGUgPCA1MDApKQogCkBAIC0zNjYsMTAgKzM2 NiwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1Yl9zeW50YXgxIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIE9OTFkgdGVz dHB1Yl9yZl90YmwzIFdIRVJFIChlIDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwog UkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4MQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJs aWMudGVzdHB1Yl9yZl90YmwzIiBXSEVSRSAoZSA8IDk5OSkKQEAgLTM3OSwxMCArMzc5LDEwIEBA IFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViX3N5bnRheDIgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSwgdGVzdHB1Yl9yZl9zY2hl bWExLnRlc3RwdWJfcmZfdGJsNSBXSEVSRSAoaCA8IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNl cnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX3N5bnRheDIK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50 YXgyCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgy CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAg ICAidGVzdHB1Yl9yZl9zY2hlbWExLnRlc3RwdWJfcmZfdGJsNSIgV0hFUkUgKGggPCA5OTkpCkBA IC00OTcsMTAgKzQ5NywxMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjYgRk9SIFRBQkxF UyBJTiBTQ0hFTUEgdGVzdHB1Yl9yZl9zY2hlbWEyOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjYgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgdGVzdHB1Yl9yZl9zY2hlbWEyLCBUQUJMRSB0ZXN0cHVi X3JmX3NjaGVtYTIudGVzdHB1Yl9yZl90Ymw2IFdIRVJFIChpIDwgOTkpOwogUkVTRVQgY2xpZW50 X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWI2Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNgotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAidGVz dHB1Yl9yZl9zY2hlbWEyLnRlc3RwdWJfcmZfdGJsNiIgV0hFUkUgKGkgPCA5OSkKIFRhYmxlcyBm cm9tIHNjaGVtYXM6CkBAIC03MTQsMTAgKzcxNCwxMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVz dHB1Yl90YWJsZV9pbnMgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQsIHRydW5jYXRlJyk7CiBSRVNF VCBjbGllbnRfbWluX21lc3NhZ2VzOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl90YWJsZV9p bnMgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSk7CQktLSBvawogXGRScCsgdGVzdHB1Yl90YWJs ZV9pbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi X3RhYmxlX2lucwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90 YWJsZV9pbnMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90Ymw1 IiAoYSkKIApAQCAtODkxLDEwICs4OTEsMTAgQEAgQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsX2Jv dGhfZmlsdGVycyAoYSBpbnQsIGIgaW50LCBjIGludCwgUFJJTUFSWSBLRVkgKGEsYykpOwogQUxU RVIgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcg SU5ERVggdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzX3BrZXk7CiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2JvdGhfZmlsdGVycyBBREQgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChh LGMpIFdIRVJFIChjICE9IDEpOwogXGRScCsgdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJzCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYg ICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmxfYm90aF9maWx0ZXJz IiAoYSwgYykgV0hFUkUgKGMgPD4gMSkKIApAQCAtMTA5OSwxMCArMTA5OSwxMCBAQCBFUlJPUjog IHJlbGF0aW9uICJ0ZXN0cHViX3RibDEiIGlzIGFscmVhZHkgbWVtYmVyIG9mIHB1YmxpY2F0aW9u ICJ0ZXN0cHViX2ZvcnRibAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGJsIEZPUiBU QUJMRSB0ZXN0cHViX3RibDE7CiBFUlJPUjogIHB1YmxpY2F0aW9uICJ0ZXN0cHViX2ZvcnRibCIg YWxyZWFkeSBleGlzdHMKIFxkUnArIHRlc3RwdWJfZm9ydGJsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRibAotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGJsCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl czoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJsaWMudGVzdHB1Yl90Ymwx IgpAQCAtMTE0MCwxMCArMTE0MCwxMCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9y dGJsIgogCiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgpAQCAt MTIyMSwxMCArMTIyMSwxMCBAQCBSRVZPS0UgQ1JFQVRFIE9OIERBVEFCQVNFIHJlZ3Jlc3Npb24g RlJPTSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogRFJPUCBUQUJMRSB0ZXN0cHViX3BhcnRl ZDsKIERST1AgVEFCTEUgdGVzdHB1Yl90YmwxOwogXGRScCsgdGVzdHB1Yl9kZWZhdWx0Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAg ICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIGZhaWwgLSBtdXN0IGJlIG93bmVyIG9mIHB1YmxpY2F0 aW9uCkBAIC0xMjM0LDIwICsxMjM0LDIwIEBAIEVSUk9SOiAgbXVzdCBiZSBvd25lciBvZiBwdWJs aWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKIFJFU0VUIFJPTEU7CiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2RlZmF1bHQgUkVOQU1FIFRPIHRlc3RwdWJfZm9vOwogXGRScCB0ZXN0cHViX2Zvbwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGlj YXRpb25zCi0gICAgTmFtZSAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVz dHB1Yl9mb28gfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgTmFt ZSAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0 cHViX2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykK IAogLS0gcmVuYW1lIGJhY2sgdG8ga2VlcCB0aGUgcmVzdCBzaW1wbGUKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZm9vIFJFTkFNRSBUTyB0ZXN0cHViX2RlZmF1bHQ7CiBBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViX2RlZmF1bHQgT1dORVIgVE8gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsK IFxkUnAgdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgTmFtZSAgICAgICB8ICAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cHViX2RlZmF1bHQgfCByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgTmFtZSAgICAgICB8ICAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwdWJf ZGVmYXVsdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cp CiAKIC0tIGFkZGluZyBzY2hlbWFzIGFuZCB0YWJsZXMKQEAgLTEyNjMsMTkgKzEyNjMsMTkgQEAg Q1JFQVRFIFRBQkxFICJDVVJSRU5UX1NDSEVNQSIuIkNVUlJFTlRfU0NIRU1BIihpZCBpbnQpOwog U0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWIxX2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0 ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgInB1Yl90ZXN0MSIKIAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIyX2ZvcnNjaGVt YSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MiwgcHViX3Rlc3QzOwog XGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBz Y2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEyODksNDQgKzEy ODksNDQgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2X2ZvcnNjaGVtYSBGT1IgVEFCTEVT IElOIFNDSEVNQSAiQ1VSUkVOVF9TQ0hFTUEiLCBDVVIKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0 cHViX2ZvcnRhYmxlIEZPUiBUQUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSI7 CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2No ZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJsaWMiCiAKIFxk UnArIHRlc3RwdWI0X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWI0X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViNF9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAKIFxkUnArIHRlc3RwdWI1X2ZvcnNjaGVtYQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNj aGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9mb3JzY2hl bWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hF TUEiCiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIKICAgICAi cHVibGljIgogCiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVz OgogICAgICJDVVJSRU5UX1NDSEVNQS5DVVJSRU5UX1NDSEVNQSIKIApAQCAtMTM2MCwxMCArMTM2 MCwxMCBAQCBFUlJPUjogIHNjaGVtYSAidGVzdHB1Yl92aWV3IiBkb2VzIG5vdCBleGlzdAogLS0g ZHJvcHBpbmcgdGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0 aW9uCiBEUk9QIFNDSEVNQSBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAg ICAicHViX3Rlc3QyIgpAQCAtMTM3MSwyMCArMTM3MSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFz OgogLS0gcmVuYW1pbmcgdGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1 YmxpY2F0aW9uCiBBTFRFUiBTQ0hFTUEgcHViX3Rlc3QxIFJFTkFNRSB0byBwdWJfdGVzdDFfcmVu YW1lZDsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVz IGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxX3JlbmFtZWQiCiAgICAgInB1Yl90ZXN0MiIK IAogQUxURVIgU0NIRU1BIHB1Yl90ZXN0MV9yZW5hbWVkIFJFTkFNRSB0byBwdWJfdGVzdDE7CiBc ZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTM5MiwxMCArMTM5 MiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIgcHVibGljYXRpb24gYWRkIHNj aGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVz dDIiCkBAIC0xNDA0LDEwICsxNDA0LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4 aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2Vz IG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAg LTE0MTYsMTAgKzE0MTYsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBF UlJPUjogIHNjaGVtYSAicHViX3Rlc3QxIiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlv biAidGVzdHB1YjFfZm9yc2NoZW1hIgogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1 Yl90ZXN0MiIKQEAgLTE0MjcsMTAgKzE0MjcsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0t IGFsdGVyIHB1YmxpY2F0aW9uIGRyb3Agc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi MV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3Rw dWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAg ICAicHViX3Rlc3QxIgogCkBAIC0xNDM4LDEwICsxNDM4LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MjsKIEVSUk9SOiAgdGFibGVzIGZyb20gc2NoZW1hICJwdWJfdGVzdDIi IGFyZSBub3QgcGFydCBvZiB0aGUgcHVibGljYXRpb24KIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3Qx IgogCkBAIC0xNDQ5LDI5ICsxNDQ5LDI5IEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9l eGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9l cyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgog VGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCiAtLSBkcm9wIGFsbCBzY2hl bWFzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogKDEgcm93KQogCiAtLSBhbHRlciBwdWJsaWNhdGlvbiBzZXQgbXVsdGlwbGUgc2NoZW1h CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hF TUEgcHViX3Rlc3QxLCBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAi cHViX3Rlc3QyIgpAQCAtMTQ4MCwxMCArMTQ4MCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgog QUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1B IG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVt YSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVz dDIiCkBAIC0xNDkyLDEwICsxNDkyLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSByZW1v dmluZyB0aGUgZHVwbGljYXRlIHNjaGVtYXMKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2Zv cnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MTsKIFxkUnAr IHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1h czoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTc0LDE4ICsxNTc0LDE4IEBAIFNFVCBjbGllbnRf bWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3Jz Y2hlbWE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2No ZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNf Zm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2Zv cnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWIzX2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0 cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjNfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAg ICAgInB1Yl90ZXN0MSIKIApAQCAtMTU5NSwyMCArMTU5NSwyMCBAQCBDUkVBVEUgUFVCTElDQVRJ T04gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rl c3QxLCBUQQogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hIEZP UiBUQUJMRSBwdWJfdGVzdDIudGJsMSwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBSRVNF VCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1h X2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hl bWFfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogXGRScCsgdGVzdHB1Yl9m b3J0YWJsZV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJfdGVzdDIudGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6Ci0tIAoyLjM3LjEKCg== --00000000000072399e05ea605996 Content-Type: application/octet-stream; name="v25-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v25-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8xa4not3 RnJvbSBjODFmNzRhYzAxYjk3ZDNlY2E3NTMyMjE0OGUwZGJiNjYxNzlkZGVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjkgU2VwIDIwMjIgMDk6Mzc6MjggLTA0MDAKU3ViamVjdDogW1BBVENI IDQvNl0gVGVzdCBjYXNlcyBmb3IgRERMIHJlcGxpY2F0aW9uLgoKQXV0aG9yOiBUYWthbWljaGkg T3N1bWkKLS0tCiAuLi4vc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbCAgICAg fCA0NjUgKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDY1IGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3Jl cGxpY2F0aW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2Rk bF9yZXBsaWNhdGlvbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGlj YXRpb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNjZkY2IwMTJh NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVw bGljYXRpb24ucGwKQEAgLTAsMCArMSw0NjUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBSZWdyZXNzaW9uIHRlc3RzIGZvciBs b2dpY2FsIHJlcGxpY2F0aW9uIG9mIERETHMKKyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpV dGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVyLT5pbml0 KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7 CisKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9 PiAnbG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKK215ICRkZGwgPSAiQ1JF QVRFIFRBQkxFIHRlc3RfcmVwKGlkIGludCBwcmltYXJ5IGtleSwgbmFtZSB2YXJjaGFyLCB2YWx1 ZSBpbnRlZ2VyKTsiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRk bCk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dGVzdF9yZXAgVkFMVUVTICgxLCAnZGF0YTEnLCAxKTsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5v ZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIG15cHViIEZP UiBBTEwgVEFCTEVTIHdpdGggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZSwgZGRs Jyk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRF IFNVQlNDUklQVElPTiBteXN1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJ Q0FUSU9OIG15cHViOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1 YicpOworCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IHN5bmNocm9uaXplZCB0aGUgdGFibGUu CisjIFRoaXMgcHJldmVudHMgQUxURVIgVEFCTEUgY29tbWFuZCBiZWxvdyBmcm9tIGJlaW5nIGV4 ZWN1dGVkIGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24uCiskbm9kZV9zdWJzY3JpYmVyLT5w b2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAiU0VMRUNUIENPVU5UKDEpID0gMCBGUk9N IHBnX3N1YnNjcmlwdGlvbl9yZWwgc3IgV0hFUkUgc3Iuc3JzdWJzdGF0ZSBOT1QgSU4gKCdzJywg J3InKSBBTkQgc3Iuc3JyZWxpZCA9ICd0ZXN0X3JlcCc6OnJlZ2NsYXNzIgorKTsKKworIyBUZXN0 IEFMVEVSIFRBQkxFIEFERAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFERCBjNCBpbnQ7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgyLCAnZGF0 YTInLCAyLCAyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKK215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGM0ID0gMjsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgQUREIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFM VEVSIFRBQkxFIERST1AKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJB TFRFUiBUQUJMRSB0ZXN0X3JlcCBEUk9QIGM0OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVwIHdoZXJlIGlkID0gMjsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHRlc3RfcmVwOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBEUk9QIHJl cGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFRZUEUKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2 YWx1ZSBUWVBFIHZhcmNoYXIiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDMsICdkYXRhMycsICczJyk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJP TSB0ZXN0X3JlcCBXSEVSRSB2YWx1ZSA9ICczJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQUxU RVIgdGVzdF9yZXAgQUxURVIgQ09MVU1OIFRZUEUgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQUxU RVIgVEFCTEUgQUxURVIgU0VUIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgZGVmYXVs dCB2YWx1ZSBhZnRlciB0aGUgZGlyZWN0IGluc2VydCB0byBzdWJzY3JpYmVyIG5vZGUuCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAg QUxURVIgQ09MVU1OIHZhbHVlIFNFVCBERUZBVUxUICdmb28nIik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNCwgJ2RhdGE0Jyk7Iik7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgdmFsdWUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDQ7Iik7CitpcygkcmVzdWx0LCAnZm9v JywgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIFNFVCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBkb24ndCBo YXZlIHRoZSBkZWZhdWx0IHZhbHVlIHByZXZpb3VzbHkgZGVmaW5lZC4KKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiBDT0xV TU4gdmFsdWUgRFJPUCBERUZBVUxUOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDUsICdkYXRhNScpOyIpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVlIElTIE5V TEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7CitpcygkcmVzdWx0LCBxKHQpLCAnQUxU RVIgdGVzdF9yZXAgQUxURVIgRFJPUCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFM VEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTAorIyBSZW1vdmUgdGhlIGV4aXN0aW5nIHJlY29y ZCB0aGF0IGNvbnRhaW5zIG51bGwgdmFsdWUgZmlyc3QuCitteSAoJHN0ZG91dCwgJHN0ZGVycik7 Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRl c3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBTRVQgTk9UIE5VTEw7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDYs ICdkYXRhNicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJy ID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAv RVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiBcInZhbHVlXCIgb2YgcmVsYXRpb24gXCJ0ZXN0 X3JlcFwiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFpbGVkIHRv IHJlcGxpY2F0ZSBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwiOworCisjIFRlc3QgQUxU RVIgVEFCTEUgQUxURVIgRFJPUCBOT1QgTlVMTAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIERST1AgTk9UIE5V TEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIElu c2VydCBzYW1lIGRhdGEgdGhhdCBoYXMgTlVMTCB2YWx1ZS4gVGhpcyBmYWlsZWQgYmVmb3JlIGJ1 dCBub3cgc2hvdWxkIHN1Y2NlZWQuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNiwgJ2RhdGE2Jyk7Iik7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgdmFs dWUgSVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNjsiKTsKK2lzKCRyZXN1bHQsIHEo dCksICJBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIE5PVCBOVUxMIHJlcGxpY2F0ZWQiKTsKKwor IyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBVTkxPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBVTkxPR0dFRDsnKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDcs ICdkYXRhNycsICc3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDc7Iik7CitpcygkcmVz dWx0LCBxcSgwKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBVTkxPR0dFRCByZXBsaWNhdGVkJyk7CisK KyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIExPR0dFRDsnKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDgsICdk YXRhOCcsICc4Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3Vi Jyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDg7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBMT0dHRUQgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQ1JFQVRFIFRBQkxFIGFuZCBETUwgY2hhbmdlcworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGEgaW50LCBiIHZhcmNoYXIpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEo MSksICdDUkVBVEUgdG1wIGlzIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgdmFsdWVzICgxLCAnYScpIik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIHZhbHVl cyAoMiwgJ2InKSIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMiksICdETUwgQ2hhbmdl cyB0byB0bXAgYXJlIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJTkhFUklU UworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0 bXAyIChjMyBpbnQpIElOSEVSSVRTICh0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDIgVkFMVUVTICgxLCAnYScsIDEpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAyJzsiKTsKK2lzKCRyZXN1bHQsIHFx KDEpLCAnQ1JFQVRFIFRBQkxFIElOSEVSSVRTIGlzIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBm cm9tIHRtcDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBzb21lIGRhdGEgdG8g aW5oZXJpdGVkIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDIiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBM SUtFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IHRtcDMgKGMzIGludCwgTElLRSB0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDMgVkFMVUVTICgxLCAxLCAnYScpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20g cGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAzJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEp LCAnQ1JFQVRFIFRBQkxFIExJS0UgcmVwbGljYXRlZCcpOworJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wMzsi KTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0IHNvbWUgZGF0YSB0byBhIHRhYmxlIGRlZmlu ZWQgd2l0aCBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDMiKTsKKworIyBUZXN0IERST1AgVEFCTEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDAp LCAnVEFCTEUgdG1wIGlzIGRyb3BwZWQnKTsKKworIyBUZXN0IENSRUFURSBVTkxPR0dFRCBUQUJM RQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBVTkxPR0dF RCBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJsZXMgd2hl cmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBVTkxP R0dFRCBUQUJMRSBpcyByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1w OyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdpbnNlcnRpbmcgZGF0YSB0byB1bmxvZ2dlZCB0YWJs ZSBpcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxF IElGIE5PVCBFWElTVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJD UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIGRhdGEgdG8gYSB0 YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT IChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUg dGFibGUgb24gdGhlIHN1YnNjcmliZXIgaW4gYWR2YW5jZSwgYW5kIGlmIHdlIHN1Y2NlZWQKKyMg aW4gcmVwbGljYXRpbmcgY2hhbmdlcy4pCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChp ZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSks ICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENS RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRh YmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciwgYnV0IG5vdCBv biB0aGUgc3Vic2NyaWJlci4pCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFU RSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRB QkxFIHdpdGggY29sbGF0ZQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBUQUJMRSB0bXAgKG5hbWUgdGV4dCBDT0xMQVRFIFwiQ1wiKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgn Zm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y29sbGF0aW9uX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVSRSB0YWJs ZV9uYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcShDKSwgJ0NSRUFURSBUQUJMRSB3aXRo IGNvbGxhdGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0aCBuYW1l ZCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRBQkxFIHRtcCAoaWQgaW50IENPTlNUUkFJTlQgXCJtdXN0IGJlIGJpZ2dlciB0aGFuIDEw XCIgQ0hFQ0sgKGlkID4gMTApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJ ICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0 ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVj ayBjb25zdHJhaW50ICJtdXN0IGJlIGJpZ2dlciB0aGFuIDEwIi8KKyAgb3IgZGllICJmYWlsZWQg dG8gcmVwbGljYXRlIG5hbWVkIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisj IFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25zdHJhaW50cy4KKyMg Tk9UIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IE5PVCBOVUxMKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBudWxsIHZhbHVl IGluIGNvbHVtbiAibmFtZSIgb2YgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgbm90LW51bGwgY29u c3RyYWludC8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIG5vbiBudWxsIGNvbnN0cmFp bnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwg bmFtZSB0ZXh0IE5VTEwpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1lIElTIE5VTEwgRlJPTSB0bXA7Iik7Citpcygk cmVzdWx0LCBxcSh0KSwgIkNSRUFURSBUQUJMRSB3aXRoIE5VTEwgY29uc3RyYWludCByZXBsaWNh dGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXAiKTsKKworIyBDSEVDSyBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBwcm9kdWN0X2FtZSB0ZXh0 LCBwcmljZSBpbnQgQ0hFQ0sgKHByaWNlID4gMCkpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycsIC0xMDApOyIsCisJCQkJCSAgIG9u X2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBz dGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxh dGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfcHJpY2VfY2hlY2siLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgQ0hFQ0sgY29uc3RyYWludCI7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMg REVGQVVMVAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IERFRkFVTFQgJ2ZvbycpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1l IGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoZm9vKSwgIkNSRUFURSBUQUJMRSB3aXRoIGRl ZmF1bHQgdmFsdWUgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVU5JUVVFIGNvbnN0cmFpbnQKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBp bnQgVU5JUVVFKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwK KwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQp OworJHN0ZGVyciA9fiAvRVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1 ZSBjb25zdHJhaW50ICJ0bXBfaWRfa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRl IGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFBSSU1BUlkgS0VZCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQg aW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdiYXInKTsi LAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVy ciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVw bGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXkiLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgcHJpbWFyeSBrZXkgYXQgY3JlYXRpbmcgdGFi bGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUg dG1wOyIpOworCisjIEVYQ0xVREUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgY2lyY2xlcyAoYyBjaXJjbGUsIEVYQ0xVREUgVVNJTkcgZ2lzdCAo YyBXSVRIICYmKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3Jp YmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAoJzwoMSwg MSksIDE+Jzo6Y2lyY2xlKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAg IHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRl cnIgPX4gL0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1c2lvbiBj b25zdHJhaW50ICJjaXJjbGVzX2NfZXhjbCIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0 ZSBFWENMVURFIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIGNpcmNsZXMiKTsKKworIyBSRUZFUkVOQ0VTCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHByb2R1Y3Qg KGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMSwgJ2Zvbycp OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRP IHByb2R1Y3QgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBSSU1BUlkg S0VZLCBwcm9kdWN0X2lkIGludCBSRUZFUkVOQ0VTIHByb2R1Y3QgKGlkKSkiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIG9yZGVycyBWQUxVRVMgKDEsIDEwKSIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBpbnNlcnQgb3Ig dXBkYXRlIG9uIHRhYmxlICJvcmRlcnMiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQg Im9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUg UkVGRVJFTkNFUyBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBvcmRlcnMiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHByb2R1Y3QiKTsKKworIyBERUZFUlJBQkxF Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRt cCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hlY2sgb2YgZGVmZXJyYWJsZSBjbGF1 c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVVBEQVRFIHRtcCBT RVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUgYSB0ZXN0IHRoYXQgc2hvdWxkIGZh aWwgZm9yIElOSVRJQUxMWSBJTU1FRElBVEUodGhlIGRlZmF1bHQpCiskbm9kZV9zdWJzY3JpYmVy LT5wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsg MTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsKK0RFTEVURSBGUk9NIHRt cCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispLCBvbl9lcnJvcl9zdG9wID0+IDAsIHN0ZGVyciA9 PiBcJHN0ZGVyciwgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVw bGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXkiLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgREVGRVJSQUJMRSBhdCBjcmVhdGluZyB0YWJs ZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0 bXA7Iik7CisKKyMgTk9UIERFRkVSUkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgTk9UIERFRkVS UkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdi YXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRu b2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQg KyAxOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwk c3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6 ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfcGtl eSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBOT1QgREVGRVJSQUJMRSBhdCBjcmVh dGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXA7Iik7CisKKyMgREVGRVJSQUJMRSBhbmQgSU5JVElBTExZIERFRkVSUkVECisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAo aWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVELCBuYW1lIHRl eHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNoZWNrIG9m IGRlZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRlIGEgdGVz dCB0aGF0IHNob3VsZCBzdWNjZWVkIGZvciBJTklUSUFMTFkgREVGRVJSRUQKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRtcCBTRVQg aWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7CitERUxF VEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVB VEUgVEFCTEUgd2l0aCB0YWJsZSBjb25zdHJhaW50CisjIFdlIHdpbGwgc2V0IHR3byBjaGVja3Mg YW5kIGNvbmR1Y3QgdHdvIGluc2VydHMgdGhhdCBzaG91bGQgZmFpbCByZXNwZWN0aXZlbHkuCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdG1w IChwcmljZSBpbnQsIGRpc2NvdW50ZWRfcHJpY2UgaW50LCBDSEVDSyAoZGlzY291bnRlZF9wcmlj ZSA+IDAgQU5EIHByaWNlID4gZGlzY291bnRlZF9wcmljZSkpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMTAwLCAwKTsiLAorCQkJCQkgICBvbl9l cnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rk b3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRp b24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAgb3IgZGll ICJmYWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKGZpcnN0IGNvbmRpdGlvbikg YXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoNTAsIDEwMCk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3Rv cCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBc JHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0bXAi IHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAiZmFpbGVk IHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChzZWNvbmQgY29uZGl0aW9uKSBhdCBjcmVh dGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgV0lUSCBzdHJvcmFnZV9wYXJh bWV0ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEUgdG1wIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA4MCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBnX2NsYXNz IFdIRVJFIHJlbG5hbWUgPSAndG1wJzsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRvdXQgPX4gL3tmaWxsZmFjdG9yPTgwfS8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGlj YXRlIHN0b3JhZ2Ugb3B0aW9uIjsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQs IHFxKDEpLCAnQ1JFQVRFIFRBQkxFIHdpdGggc3RvcmFnZV9wYXJhbWV0ZXIgcmVwbGljYXRlZCcp OworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1w OyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgKGNyZWF0aW5nIGEgdGFibGVz cGFjZSBpcyBub3QgcmVwbGljYXRlZCkKKyMgUHJlcGFyZSB0aGUgZGlyZWN0b3JpZXMgZm9yIHRo ZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZmlyc3QuCitteSAoJGJhc2VkaXIsICR0YWJsZXNw YWNlX2Rpcik7CisKKyRiYXNlZGlyID0gJG5vZGVfcHVibGlzaGVyLT5iYXNlZGlyOworJHRhYmxl c3BhY2VfZGlyID0gIiRiYXNlZGlyL3RibHNwY19wdWIiOworbWtkaXIoJHRhYmxlc3BhY2VfZGly KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVT UEFDRSBteXRibHNwYyBMT0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKyRiYXNlZGlyID0g JG5vZGVfc3Vic2NyaWJlci0+YmFzZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFzZWRpci90 YmxzcGNfc3ViIjsKK21rZGlyICgkdGFibGVzcGFjZV9kaXIpOworJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVTUEFDRSBteXRibHNwYyBMT0NBVElP TiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCkgVEFCTEVTUEFDRSBteXRibHNwYzsi KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0 bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRF IFRBQkxFIFRBQkxFU1BBQ0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRZUEUK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBteXR5 cGUgQVMgKGlkIGludCwgbmFtZSB0ZXh0LCBhZ2UgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIE9GIG15dHlwZTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnYmFy Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBPRiBy ZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRZUEUgbXl0eXBlIik7CisKKyMgVGVzdCBDUkVBVEUgRU5VTSBUWVBFCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXllbnVtdHlwZSBBUyBF TlVNICgnbmV3JywgJ29wZW4nLCAnY2xvc2VkJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoc3RhdHVzIG15ZW51bXR5cGUpOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKCdu ZXcnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAq IGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEobmV3KSwgJ0NSRUFURSBUQUJMRSBPRiByZXBs aWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRZUEUgbXllbnVtdHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIFJBTkdFIFRZUEUKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBmbG9hdDhfcmFuZ2Ug QVMgUkFOR0UgKHN1YnR5cGUgPSBmbG9hdDgsIHN1YnR5cGVfZGlmZiA9IGZsb2F0OG1pKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wICh2YWwgZmxvYXQ4 X3JhbmdlKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJpbnNl cnQgaW50byB0bXAgdmFsdWVzKGZsb2F0OF9yYW5nZSgtMTIuMzQsICcxLjExMTExM2UzJykpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogZnJvbSB0 bXA7Iik7CitpcygkcmVzdWx0LCBxcShbLTEyLjM0LDExMTEuMTEzXCkpLCAnQ1JFQVRFIFRBQkxF IE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgVFlQRSBmbG9hdDhfcmFuZ2UiKTsKKworIyBUZXN0IENSRUFURSBCQVNFIERBVEEg VFlQRSBhbmQgdXNlIGl0IGluIHRhYmxlIGRlZmluaXRpb24KKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICIKK0NSRUFURSBUWVBFIGludDQyOworQ1JFQVRFIEZVTkNUSU9O IGludDQyX2luKGNzdHJpbmcpCisgICBSRVRVUk5TIGludDQyCisgICBBUyAnaW50NGluJworICAg TEFOR1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBGVU5DVElPTiBpbnQ0 Ml9vdXQoaW50NDIpCisgICBSRVRVUk5TIGNzdHJpbmcKKyAgIEFTICdpbnQ0b3V0JworICAgTEFO R1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBUWVBFIGludDQyICgKKyAg IGludGVybmFsbGVuZ3RoID0gNCwKKyAgIGlucHV0ID0gaW50NDJfaW4sCisgICBvdXRwdXQgPSBp bnQ0Ml9vdXQsCisgICBhbGlnbm1lbnQgPSBpbnQ0LAorICAgZGVmYXVsdCA9IDQyLAorICAgcGFz c2VkYnl2YWx1ZQorKTsKK0NSRUFURSBUQUJMRSB0bXAgKGYxIGludDQyKTsKK0lOU0VSVCBJTlRP IHRtcCBERUZBVUxUIFZBTFVFUzsKKyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUICogZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSg0MiksICdDUkVB VEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUWVBFIGludDQyIGNhc2NhZGUiKTsKKworcGFzcyAiRERMIHJlcGxp Y2F0aW9uIHRlc3RzIHBhc3NlZDoiOworCiskbm9kZV9zdWJzY3JpYmVyLT5zdG9wOworJG5vZGVf cHVibGlzaGVyLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuMzcuMQoK --00000000000072399e05ea605996 Content-Type: application/octet-stream; name="v25-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v25-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8xa4noq0 RnJvbSBkYTU5ZDc4ZGEzNGIzNzc1MWJmY2M1Y2JhYTNjMDgzZGI3MGExYzAyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjggU2VwIDIwMjIgMDk6NDY6MzEgLTA0MDAKU3ViamVjdDogW1BBVENI IDEvNl0gRnVuY3Rpb25zIHRvIGRlcGFyc2UgRERMIGNvbW1hbmRzLgoKVGhpcyBwYXRjaCBwcm92 aWRlcyBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdoaWNoIGNhbgpsYXRl ciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJp bnRmLWxpa2UKZXhwYW5zaW9uLiBUaGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVkIHRvIGFs bG93IGZvciBtYWNoaW5lLWVkaXRpbmcgb2YKdGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcgY2Vy dGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCgpNdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBp biB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KY2F0YWxvZ3MsIG5v dCBmcm9tIHRoZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVs aWFibHkKY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4gb25lIG5vdCBk ZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5v ZGUuCgpUaGlzIHByb3ZpZGVzIGEgYmFzZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBEREwg c3RhdGVtZW50cy4gQ3VycmVudGx5LAp0aGUgcGF0Y2ggaGFzIHN1cHBvcnQgZm9yOgoKQ1JFQVRF L0FMVEVSL0RST1AgVEFCTEUgLS0gTm90ZSAjMSwgTm90ZSAjMgpDUkVBVEUvQUxURVIvRFJPUCBT RVFVRU5DRQpDUkVBVEUvQUxURVIvRFJPUCBTQ0hFTUEKQ1JFQVRFL0FMVEVSIEZVTkNUSU9OL1BS T0NFRFVSRQpDUkVBVEUvQUxURVIgVFJJR0dFUgpDUkVBVEUvRFJPUCBJTkRFWApDUkVBVEUvRFJP UCBPUEVSQVRPUiBbQ0xBU1MvRkFNSUxZXQpDUkVBVEUvQUxURVIvRFJPUCBDQVNUCkNSRUFURS9B TFRFUi9EUk9QIERPTUFJTgpDUkVBVEUvQUxURVIvRFJPUCBUWVBFCkNSRUFURS9BTFRFUi9EUk9Q IENPTlZFUlNJT04KQ1JFQVRFL0FMVEVSL0RST1AgUE9MSUNZCkNSRUFURS9BTFRFUi9EUk9QIEVY VEVOU0lPTgpDUkVBVEUvQUxURVIvRFJPUCBGT1JFSUdOIERBVEEgV1JBUFBFUgpDUkVBVEUvQUxU RVIvRFJPUCBSVUxFCkdSQU5UClJFVk9LRQpSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXCgooTm90 ZSAjMSkgTm90ZSB0aGF0IHNvbWUgcmVjZW50bHkgaW50cm9kdWNlZCBERExzKGUuZy4gRERMcyBy ZWxhdGVkIHRvClBBUlRJVElPTkVEIFRBQkxFKSBhcmUgdW5zdXBwb3J0ZWQuIFdlIGNhbiBleHRl bmQgaXQgYXMgd2UgbmVlZCBtb3JlCmZ1bmN0aW9uYWxpdHkgZm9yIERETCByZXBsaWNhdGlvbi4K CihOb3RlICMyKSBOb3RlIHRoYXQsIGZvciBBVFRBQ0gvREVUQUNIIFBBUlRJVElPTiwgd2UgaGF2 ZW4ndCBhZGRlZCBleHRyYSBsb2dpYyBvbgpzdWJzY3JpYmVyIHRvIGhhbmRsZSB0aGUgY2FzZSB3 aGVyZSB0aGUgdGFibGUgb24gcHVibGlzaGVyIGlzIGEgUEFSVElUSU9ORUQKVEFCTEUgd2hpbGUg dGhlIHRhcmdldCB0YWJsZSBvbiBzdWJjcmliZXIgc2lkZSBpcyBOT1JNQUwgdGFibGUuIFdlIHdp bGwKcmVzZWFyY2ggdGhpcyBtb3JlIGFuZCBpbXByb3ZlIHRoaXMgbGF0ZXIuCi0tLQogc3JjL2Jh Y2tlbmQvY2F0YWxvZy9hY2xjaGsuYyAgICAgICAgfCAgICA0ICsKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL01ha2VmaWxlICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVw YXJzZS5jICB8IDc0NzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9j b21tYW5kcy9kZGxfanNvbi5jICAgICB8ICA3NjMgKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9z ZXF1ZW5jZS5jICAgICB8ICAgMzMgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBl LmMgfCAgICAzICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jICAgICB8ICAgNTIg Kwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgfCAgMjIwICstCiBzcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICB8ICAgIDYgKwogc3JjL2luY2x1ZGUvY29tbWFu ZHMvc2VxdWVuY2UuaCAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2Uu aCAgICAgIHwgICAyMyArCiBzcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oICB8ICAg IDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvYWNsY2hrX2ludGVybmFsLmggfCAgICAxICsKIHNyYy9p bmNsdWRlL3V0aWxzL2J1aWx0aW5zLmggICAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS91dGls cy9ydWxldXRpbHMuaCAgICAgICB8ICAgMTYgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgfCAgICA0ICsKIDE2IGZpbGVzIGNoYW5nZWQsIDg1MzYgaW5zZXJ0aW9ucygrKSwg NzAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3JjL2JhY2tlbmQvY29tbWFuZHMv ZGRsX2RlcGFyc2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9qc29uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNl LmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jIGIvc3JjL2JhY2tl bmQvY2F0YWxvZy9hY2xjaGsuYwppbmRleCBhYTVhMmVkOTQ4Li43ZGMxOTBkZGViIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvYWNsY2hrLmMKQEAgLTM4NSw3ICszODUsMTEgQEAgRXhlY3V0ZUdyYW50U3RtdChHcmFudFN0 bXQgKnN0bXQpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRV UkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJCSBlcnJtc2coImdyYW50b3IgbXVzdCBiZSBjdXJyZW50 IHVzZXIiKSkpOworCisJCWlzdG10LmdyYW50b3JfdWlkID0gZ3JhbnRvcjsKIAl9CisJZWxzZQor CQlpc3RtdC5ncmFudG9yX3VpZCA9IEludmFsaWRPaWQ7CiAKIAkvKgogCSAqIFR1cm4gdGhlIHJl Z3VsYXIgR3JhbnRTdG10IGludG8gdGhlIEludGVybmFsR3JhbnQgZm9ybS4KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFr ZWZpbGUKaW5kZXggNDhmNzM0OGY5MS4uMTcxZGZiMjgwMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUK QEAgLTI5LDYgKzI5LDggQEAgT0JKUyA9IFwKIAljb3B5dG8ubyBcCiAJY3JlYXRlYXMubyBcCiAJ ZGJjb21tYW5kcy5vIFwKKwlkZGxfZGVwYXJzZS5vIFwKKwlkZGxfanNvbi5vIFwKIAlkZWZpbmUu byBcCiAJZGlzY2FyZC5vIFwKIAlkcm9wY21kcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJz ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAuLjhkYzMxNTA2MWIKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCkBAIC0w LDAgKzEsNzQ3NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2RlcGFyc2UuYwor ICoJICBGdW5jdGlvbnMgdG8gY29udmVydCB1dGlsaXR5IGNvbW1hbmRzIHRvIG1hY2hpbmUtcGFy c2VhYmxlCisgKgkgIHJlcHJlc2VudGF0aW9uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2Fs aWZvcm5pYQorICoKKyAqIE5PVEVTCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRl IEpTT04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5kcywgd2hpY2ggY2FuCisgKiBsYXRl ciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJp bnRmLWxpa2UKKyAqIGV4cGFuc2lvbi4gIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50ZW5kZWQg dG8gYWxsb3cgZm9yIG1hY2hpbmUtZWRpdGluZyBvZgorICogdGhlIGNvbW1hbmRzLCBieSByZXBs YWNpbmcgY2VydGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCisgKgorICogTXVjaCBvZiB0 aGUgaW5mb3JtYXRpb24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lz dGVtCisgKiBjYXRhbG9ncywgbm90IGZyb20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQg aXMgaW1wb3NzaWJsZSB0byByZWxpYWJseQorICogY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVk IGNvbW1hbmQgKGkuZS4gb25lIG5vdCBkZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKKyAqIGV0Yykg bG9va2luZyBvbmx5IGF0IHRoZSBwYXJzZSBub2RlLgorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKKyAqCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAidGNvcC9kZGxfZGVw YXJzZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJs ZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFt ZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfYXR0cmlidXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX2Nhc3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnN0 cmFpbnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX2RlcGVuZC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZXh0ZW5zaW9uLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX2RhdGFfd3JhcHBlci5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGdfZm9yZWlnbl9zZXJ2ZXIuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRz LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYW5ndWFnZS5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfbGFyZ2VvYmplY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0 b3IuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wZmFtaWx5LmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19wb2xpY3kuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3JhbmdlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19yZXdyaXRlLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5o IgorI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVl bmNlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgImZ1bmNh cGkuaCIKKyNpbmNsdWRlICJsaWIvaWxpc3QuaCIKKyNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgor I2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5o IgorI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0 aW1pemVyLmgiCisjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oIgorI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKKyNpbmNsdWRl ICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgorI2luY2x1ZGUgInV0aWxz L2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRp bHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMvcnVsZXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMv c3lzY2FjaGUuaCIKKworLyogRXN0aW1hdGVkIGxlbmd0aCBvZiB0aGUgZ2VuZXJhdGVkIGpzb25i IHN0cmluZyAqLworI2RlZmluZSBKU09OQl9FU1RJTUFURURfTEVOIDEyOAorCisvKgorICogQmVm b3JlIHRoZXkgYXJlIHR1cm5lZCBpbnRvIEpTT05CIHJlcHJlc2VudGF0aW9uLCBlYWNoIGNvbW1h bmQgaXMKKyAqIHJlcHJlc2VudGVkIGFzIGFuIG9iamVjdCB0cmVlLCB1c2luZyB0aGUgc3RydWN0 cyBiZWxvdy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJT2JqVHlwZU51bGwsCisJT2JqVHlwZUJv b2wsCisJT2JqVHlwZVN0cmluZywKKwlPYmpUeXBlQXJyYXksCisJT2JqVHlwZUludGVnZXIsCisJ T2JqVHlwZUZsb2F0LAorCU9ialR5cGVPYmplY3QKK30gT2JqVHlwZTsKKwordHlwZWRlZiBzdHJ1 Y3QgT2JqVHJlZQoreworCXNsaXN0X2hlYWQJcGFyYW1zOworCWludAkJCW51bVBhcmFtczsKKwlT dHJpbmdJbmZvCWZtdGluZm87CisJYm9vbAkJcHJlc2VudDsKK30gT2JqVHJlZTsKKwordHlwZWRl ZiBzdHJ1Y3QgT2JqRWxlbQoreworCWNoYXIJICAgKm5hbWU7CisJT2JqVHlwZQkJb2JqdHlwZTsK KworCXVuaW9uCisJeworCQlib29sCQlib29sZWFuOworCQljaGFyCSAgICpzdHJpbmc7CisJCWlu dDY0CQlpbnRlZ2VyOworCQlmbG9hdDgJCWZsdDsKKwkJT2JqVHJlZQkgICAqb2JqZWN0OworCQlM aXN0CSAgICphcnJheTsKKwl9IHZhbHVlOworCXNsaXN0X25vZGUJbm9kZTsKK30gT2JqRWxlbTsK KworYm9vbCB2ZXJib3NlID0gdHJ1ZTsKKworc3RhdGljIHZvaWQgYXBwZW5kX2FycmF5X29iamVj dChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBMaXN0ICphcnJheSk7CitzdGF0aWMgdm9pZCBh cHBlbmRfYm9vbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgYm9vbCB2YWx1ZSk7 CitzdGF0aWMgdm9pZCBhcHBlbmRfZmxvYXRfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5h bWUsIGZsb2F0OCB2YWx1ZSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfbnVsbF9vYmplY3QoT2JqVHJl ZSAqdHJlZSwgY2hhciAqbmFtZSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfb2JqZWN0X29iamVjdChP YmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgY2hhciAq YXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9m bXQpOworc3RhdGljIHZvaWQgYXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9i akVsZW0gKmVsZW0pOworc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAq dHJlZSwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOworc3RhdGljIHZvaWQgZm9ybWF0X3R5cGVf ZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJCQkJCQkgT2lkICpuc3Bp ZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkJCQkgYm9vbCAqdHlw YXJyYXkpOworc3RhdGljIExpc3QgKkZ1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAqcHJvYXJnZGVm YXVsdHMpOworc3RhdGljIE9iakVsZW0gKm5ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpu YW1lKTsKK3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT2lkIGNs YXNzSWQsIE9pZCBvYmplY3RJZCk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfZm9yX3Jv bGVzcGVjKFJvbGVTcGVjICpzcGVjKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfb2JqZWN0X29iamVj dChPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfVkEoY2hhciAq Zm10LCBpbnQgbnVtb2JqcywuLi4pOworc3RhdGljIE9iakVsZW0gKm5ld19zdHJpbmdfb2JqZWN0 KGNoYXIgKnZhbHVlKTsKK3N0YXRpYyBKc29uYlZhbHVlICpvYmp0cmVlX3RvX2pzb25iX3JlYyhP YmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKTsKK3N0YXRpYyB2b2lkIHBnX2dl dF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJCQkJCQkJCSBjaGFyICoqaW5k ZXhfYW0sCisJCQkJCQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkJCQkgY2hhciAqKnJl bG9wdGlvbnMsCisJCQkJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkJCQkgY2hhciAq KndoZXJlQ2xhdXNlKTsKK3N0YXRpYyBjaGFyICpSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQoUmVs YXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG5vLAorCQkJCQkJCQkJICBMaXN0ICpkcGNvbnRleHQs IExpc3QgKipleHBycyk7CitzdGF0aWMgY29uc3QgY2hhciAqc3RyaW5naWZ5X29ianR5cGUoT2Jq ZWN0VHlwZSBvYmp0eXBlKTsKKworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uRGVmKFJl bGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIGJvb2wgY29tcG9zaXRlLAorCQkJCQkJ CQkgIENvbHVtbkRlZiAqY29sZGVmLCBib29sIGlzX2FsdGVyLCBMaXN0ICoqZXhwcnMpOworc3Rh dGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoT2lkIHNlcXJlbGlkLCBjaGFyIGlk ZW50aXR5LCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVt blNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBh cnNlX0RlZmluZVN0bXRfT3BlcmF0b3IoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUp Oworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UeXBlKE9pZCBvYmplY3RJZCwg RGVmaW5lU3RtdCAqZGVmaW5lKTsKKworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmRWxlbShE ZWZFbGVtICplbGVtLCBib29sIGlzX3Jlc2V0KTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0Z1 bmN0aW9uU2V0KFZhcmlhYmxlU2V0S2luZCBraW5kLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSk7 CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9PbkNvbW1pdENsYXVzZShPbkNvbW1pdEFjdGlvbiBv cHRpb24pOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfUmVsU2V0T3B0aW9ucyhBbHRlclRhYmxl Q21kICpzdWJjbWQpOworCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0NhY2hl KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3Rh YmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQ3ljbGUoT2JqVHJlZSAq cGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3Rh dGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShPYmpUcmVlICpwYXJl bnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMg aW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX01pbnZhbHVlKE9ialRyZWUgKnBhcmVudCwgRm9y bV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqZGVwYXJzZV9TZXFfTWF4dmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3Nl cXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIE9iakVsZW0gKmRlcGFy c2VfU2VxX093bmVkQnkoT2JqVHJlZSAqcGFyZW50LCBPaWQgc2VxdWVuY2VJZCwgYm9vbCBhbHRl cl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX1Jlc3RhcnQoT2Jq VHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YSk7CitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX1N0YXJ0d2l0aChPYmpUcmVlICpwYXJlbnQsIEZvcm1f cGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9i akVsZW0gKmRlcGFyc2VfVHlwZV9TdG9yYWdlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBl IHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfUmVjZWl2ZShP YmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9UeXBlX1NlbmQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlw Rm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9UeXBtb2RfSW4oT2Jq VHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKmRlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBl IHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfQW5hbHl6ZShP YmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlw ZSB0eXBGb3JtKTsKKworc3RhdGljIExpc3QgKmRlcGFyc2VfSW5oUmVsYXRpb25zKE9pZCBvYmpl Y3RJZCk7CitzdGF0aWMgTGlzdCAqZGVwYXJzZV9UYWJsZUVsZW1lbnRzKFJlbGF0aW9uIHJlbGF0 aW9uLCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBMaXN0ICpkcGNvbnRleHQsCisJCQkJCQkJCSAgIGJv b2wgdHlwZWQsIGJvb2wgY29tcG9zaXRlKTsKKworLyoKKyAqIEFkZCBjb21tb24gY2xhdXNlcyB0 byBDcmVhdGVQb2xpY3kgb3IgQWx0ZXJQb2xpY3kgZGVwYXJzZSBvYmplY3RzCisgKi8KK3N0YXRp YyB2b2lkCithZGRfcG9saWN5X2NsYXVzZXMoT2JqVHJlZSAqcG9saWN5U3RtdCwgT2lkIHBvbGlj eU9pZCwgTGlzdCAqcm9sZXMsCisJCQkJICAgYm9vbCBkb19xdWFsLCBib29sIGRvX3dpdGhfY2hl Y2spCit7CisJUmVsYXRpb24JcG9sUmVsID0gdGFibGVfb3BlbihQb2xpY3lSZWxhdGlvbklkLCBB Y2Nlc3NTaGFyZUxvY2spOworCUhlYXBUdXBsZQlwb2xUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3Rf Ynlfb2lkKHBvbFJlbCwgQW51bV9wZ19wb2xpY3lfb2lkLCBwb2xpY3lPaWQpOworCUZvcm1fcGdf cG9saWN5IHBvbEZvcm07CisKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocG9sVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHBvbGljeSAldSIsIHBvbGljeU9pZCk7 CisKKwlwb2xGb3JtID0gKEZvcm1fcGdfcG9saWN5KSBHRVRTVFJVQ1QocG9sVHVwKTsKKworCS8q IGFkZCB0aGUgIk9OIHRhYmxlIiBjbGF1c2UgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChwb2xp Y3lTdG10LCAiT04gJXt0YWJsZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBwb2xGb3JtLT5wb2xyZWxpZCkp OworCisJLyoKKwkgKiBBZGQgdGhlICJUTyByb2xlIiBjbGF1c2UsIGlmIGFueS4gIEluIHRoZSBD UkVBVEUgY2FzZSwgaXQgYWx3YXlzCisJICogY29udGFpbnMgYXQgbGVhc3QgUFVCTElDLCBidXQg aW4gdGhlIEFMVEVSIGNhc2UgaXQgbWlnaHQgYmUgZW1wdHkuCisJICovCisJaWYgKHJvbGVzKQor CXsKKwkJTGlzdCAgICpsaXN0ID0gTklMOworCQlMaXN0Q2VsbCAqY2VsbDsKKworCQlmb3JlYWNo IChjZWxsLCByb2xlcykKKwkJeworCQkJUm9sZVNwZWMgICAqc3BlYyA9IChSb2xlU3BlYyAqKSBs Zmlyc3QoY2VsbCk7CisKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCQkgICBuZXdfb2Jq ZWN0X29iamVjdChuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoc3BlYykpKTsKKwkJfQorCQlhcHBl bmRfYXJyYXlfb2JqZWN0KHBvbGljeVN0bXQsIlRPICV7cm9sZTosIH1SIiwgbGlzdCk7CisJfQor CWVsc2UKKwl7CisJCWFwcGVuZF9ib29sX29iamVjdChwb2xpY3lTdG10LCAicHJlc2VudCIsIGZh bHNlKTsKKwl9CisKKwkvKiBhZGQgdGhlIFVTSU5HIGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRv X3F1YWwpCisJeworCQlEYXR1bQlkZXBhcnNlZDsKKwkJRGF0dW0Jc3RvcmVkZXhwcjsKKwkJYm9v bAlpc251bGw7CisKKwkJc3RvcmVkZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1fcGdf cG9saWN5X3BvbHF1YWwsCisJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwb2xSZWwpLCAmaXNu dWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgcG9scXVh bCBleHByZXNzaW9uIGluIHBvbGljeSAldSIsIHBvbGljeU9pZCk7CisJCWRlcGFyc2VkID0gRGly ZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwgc3RvcmVkZXhwciwgcG9sRm9ybS0+cG9scmVs aWQpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChwb2xpY3lTdG10LCAiVVNJTkcgKCV7ZXhwcmVz c2lvbn1zKSIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwl9CisJ ZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QocG9saWN5U3RtdCwgInByZXNlbnQiLCBmYWxzZSk7 CisKKwkvKiBhZGQgdGhlIFdJVEggQ0hFQ0sgY2xhdXNlLCBpZiBhbnkgKi8KKwlpZiAoZG9fd2l0 aF9jaGVjaykKKwl7CisJCURhdHVtCWRlcGFyc2VkOworCQlEYXR1bQlzdG9yZWRleHByOworCQli b29sCWlzbnVsbDsKKworCQlzdG9yZWRleHByID0gaGVhcF9nZXRhdHRyKHBvbFR1cCwgQW51bV9w Z19wb2xpY3lfcG9sd2l0aGNoZWNrLAorCQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocG9sUmVs KSwgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxM IHBvbHdpdGhjaGVjayBleHByZXNzaW9uIGluIHBvbGljeSAldSIsIHBvbGljeU9pZCk7CisJCWRl cGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwgc3RvcmVkZXhwciwgcG9s Rm9ybS0+cG9scmVsaWQpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChwb2xpY3lTdG10LCAiV0lU SCBDSEVDSyAoJXtleHByZXNzaW9ufXMpIiwKKwkJCQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhk ZXBhcnNlZCkpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdChwb2xpY3lTdG10LCAi cHJlc2VudCIsIGZhbHNlKTsKKworCXJlbGF0aW9uX2Nsb3NlKHBvbFJlbCwgQWNjZXNzU2hhcmVM b2NrKTsKK30KKworLyogQXBwZW5kIGFuIGFycmF5IHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0 YXRpYyB2b2lkCithcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9m bXQsIExpc3QgKmFycmF5KQoreworCU9iakVsZW0JKnBhcmFtOworCWNoYXIgKm9iamVjdF9uYW1l OworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKGxpc3RfbGVuZ3RoKGFycmF5KSA9PSAwKQor CQlyZXR1cm47CisKKwlpZiAoIXZlcmJvc2UpCisJeworCQlMaXN0Q2VsbCAqbGM7CisKKwkJLyog RXh0cmFjdCB0aGUgT2JqRWxlbXMgd2hvc2UgcHJlc2VudCBmbGFnIGlzIHRydWUgKi8KKwkJZm9y ZWFjaChsYywgYXJyYXkpCisJCXsKKwkJCU9iakVsZW0gKmVsZW0gPSAoT2JqRWxlbSAqKSBsZmly c3QobGMpOworCisJCQlBc3NlcnQoZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0IHx8CisJ CQkJICAgZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlU3RyaW5nKTsKKworCQkJaWYgKCFlbGVtLT52 YWx1ZS5vYmplY3QtPnByZXNlbnQgJiYKKwkJCQllbGVtLT5vYmp0eXBlID09IE9ialR5cGVPYmpl Y3QpCisJCQkJYXJyYXkgPSBmb3JlYWNoX2RlbGV0ZV9jdXJyZW50KGFycmF5LCBsYyk7CisJCX0K KworCX0KKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRy ZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVBcnJheSwgb2JqZWN0 X25hbWUpOworCXBhcmFtLT52YWx1ZS5hcnJheSA9IGFycmF5OworCWFwcGVuZF9wcmVtYWRlX29i amVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qIEFwcGVuZCBhIGJvb2xlYW4gcGFyYW1ldGVyIHRv IGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVl LCBjaGFyICpzdWJfZm10LCBib29sIHZhbHVlKQoreworCU9iakVsZW0gICpwYXJhbTsKKwljaGFy CSAqb2JqZWN0X25hbWUgPSBzdWJfZm10OworCWJvb2wJICBpc19wcmVzZW50X2ZsYWcgPSBmYWxz ZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCS8qIENoZWNrIGlmIHRoZSBwcmVzZW50IGlzIHBh cnQgb2YgdGhlIGZvcm1hdCBzdHJpbmcgYW5kIHN0b3JlIHRoZSBib29sZWFuIHZhbHVlKi8KKwlp ZiAoc3RyY21wKHN1Yl9mbXQsICJwcmVzZW50IikgPT0gMCkKKwl7CisJCWlzX3ByZXNlbnRfZmxh ZyA9IHRydWU7CisJCXRyZWUtPnByZXNlbnQgPSB2YWx1ZTsKKwl9CisKKwlpZiAoIXZlcmJvc2Ug JiYgIXRyZWUtPnByZXNlbnQpCisJCXJldHVybjsKKworCWlmICghaXNfcHJlc2VudF9mbGFnKQor CQlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJf Zm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlQm9vbCwgb2JqZWN0X25hbWUpOwor CXBhcmFtLT52YWx1ZS5ib29sZWFuID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRy ZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVuZCBhIGZsb2F0OCBwYXJhbWV0ZXIgdG8gYSB0 cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2Zsb2F0X29iamVjdChPYmpUcmVlICp0cmVl LCBjaGFyICpzdWJfZm10LCBmbG9hdDggdmFsdWUpCit7CisJT2JqRWxlbQkgICAqcGFyYW07CisJ Y2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlvYmplY3RfbmFt ZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBh cmFtID0gbmV3X29iamVjdChPYmpUeXBlRmxvYXQsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFs dWUuZmx0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30K KworLyoKKyAqIEFwcGVuZCB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJlZS4K KyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNo YXIgKnN1Yl9mbXQpCit7CisJaW50CQkJCWxlbjsKKwljaGFyCQkgICAqZm10OworCisJaWYgKHRy ZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm10ID0gdHJlZS0+Zm10aW5mby0+ ZGF0YTsKKwlsZW4gPSB0cmVlLT5mbXRpbmZvLT5sZW47CisKKwkvKiBBZGQgYSBzZXBhcmF0b3Ig aWYgbmVjZXNzYXJ5ICovCisJaWYgKGxlbiA+IDAgJiYgZm10W2xlbiAtIDFdICE9ICcgJykKKwkJ YXBwZW5kU3RyaW5nSW5mb1NwYWNlcyh0cmVlLT5mbXRpbmZvLCAxKTsKKworCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcodHJlZS0+Zm10aW5mbywgc3ViX2ZtdCk7Cit9CisKKy8qIEFwcGVuZCBhIE5V TEwgb2JqZWN0IHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9udWxsX29iamVjdChP YmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KQoreworCWNoYXIgKm9iamVjdF9uYW1lOworCisJ QXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKCF2ZXJib3NlKQorCQlyZXR1cm47CisKKwlvYmplY3Rf bmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKwor CWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBuZXdfb2JqZWN0KE9ialR5cGVOdWxsLCBvYmpl Y3RfbmFtZSkpOworfQorCisvKiBBcHBlbmQgYW4gb2JqZWN0IHBhcmFtZXRlciB0byBhIHRyZWUg Ki8KK3N0YXRpYyB2b2lkCithcHBlbmRfb2JqZWN0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFy ICpzdWJfZm10LCBPYmpUcmVlICp2YWx1ZSkKK3sKKwlPYmpFbGVtCSpwYXJhbTsKKwljaGFyICAg Km9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKCF2ZXJib3NlICYmICF2 YWx1ZS0+cHJlc2VudCkKKwkJcmV0dXJuOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0 X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3Qo T2JqVHlwZU9iamVjdCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5vYmplY3QgPSB2YWx1 ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICogUmV0 dXJuIHRoZSBvYmplY3QgbmFtZSB3aGljaCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgaW5wdXQgIiol e25hbWVbOi5dfSoiCisgKiBzdHlsZSBzdHJpbmcuIEFuZCBhcHBlbmQgdGhlIGlucHV0IGZvcm1h dCBzdHJpbmcgdG8gdGhlIE9ialRyZWUuCisgKi8KK3N0YXRpYyBjaGFyICoKK2FwcGVuZF9vYmpl Y3RfdG9fZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KQoreworCVN0 cmluZ0luZm9EYXRhCW9iamVjdF9uYW1lOworCWNvbnN0IGNoYXIJICAgKmVuZF9wdHI7CisJY29u c3QgY2hhcgkgICAqY3A7CisJYm9vbAkJCXN0YXJ0X2NvcHkgPSBmYWxzZTsKKworCWlmIChzdWJf Zm10ID09IE5VTEwgfHwgdHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gc3ViX2ZtdDsK KworCWluaXRTdHJpbmdJbmZvKCZvYmplY3RfbmFtZSk7CisJZW5kX3B0ciA9IHN1Yl9mbXQgKyBz dHJsZW4oc3ViX2ZtdCk7CisKKwlmb3IgKGNwID0gc3ViX2ZtdDsgY3AgPCBlbmRfcHRyOyBjcCsr KQorCXsKKwkJaWYgKCpjcCA9PSAneycpCisJCXsKKwkJCXN0YXJ0X2NvcHkgPSB0cnVlOworCQkJ Y29udGludWU7CisJCX0KKworCQlpZiAoIXN0YXJ0X2NvcHkpCisJCQljb250aW51ZTsKKworCQlp ZiAoKmNwID09ICc6JyB8fCAqY3AgPT0gJ30nKQorCQkJYnJlYWs7CisKKwkJYXBwZW5kU3RyaW5n SW5mb0NoYXJNYWNybygmb2JqZWN0X25hbWUsICpjcCk7CisJfQorCisJaWYgKG9iamVjdF9uYW1l LmxlbiA9PSAwKQorCQllbG9nKEVSUk9SLCAib2JqZWN0IG5hbWUgbm90IGZvdW5kIik7CisKKwlh cHBlbmRfZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXJldHVybiBvYmplY3RfbmFt ZS5kYXRhOworfQorCisvKiBBcHBlbmQgYSBwcmVhbGxvY2F0ZWQgcGFyYW1ldGVyIHRvIGEgdHJl ZSAqLworc3RhdGljIGlubGluZSB2b2lkCithcHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAq dHJlZSwgT2JqRWxlbSAqZWxlbSkKK3sKKwlzbGlzdF9wdXNoX2hlYWQoJnRyZWUtPnBhcmFtcywg JmVsZW0tPm5vZGUpOworCXRyZWUtPm51bVBhcmFtcysrOworfQorCisvKiBBcHBlbmQgYSBzdHJp bmcgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9zdHJpbmdfb2Jq ZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGNoYXIgKnZhbHVlKQoreworCU9iakVs ZW0JICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQp OworCisJaWYgKCF2ZXJib3NlICYmICh2YWx1ZSA9PSBOVUxMIHx8IHZhbHVlWzBdID09ICdcMCcp KQorCQlyZXR1cm47CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0 cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5n LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLnN0cmluZyA9IHZhbHVlOworCWFwcGVuZF9w cmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBTaW1pbGFyIHRvIGZvcm1h dF90eXBlX2V4dGVuZGVkLCBleGNlcHQgd2UgcmV0dXJuIGVhY2ggYml0IG9mIGluZm9ybWF0aW9u CisgKiBzZXBhcmF0ZWx5OgorICoKKyAqIC0gbnNwaWQgaXMgdGhlIHNjaGVtYSBPSUQuICBGb3Ig Y2VydGFpbiBTUUwtc3RhbmRhcmQgdHlwZXMgd2hpY2ggaGF2ZSB3ZWlyZAorICogICB0eXBtb2Qg cnVsZXMsIHdlIHJldHVybiBJbnZhbGlkT2lkOyBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gbm90IHNj aGVtYS0KKyAqICAgcXVhbGlmeSB0aGUgbmFtZSBub3IgYWRkIHF1b3RlcyB0byB0aGUgdHlwZSBu YW1lIGluIHRoaXMgY2FzZS4KKyAqCisgKiAtIHR5cG5hbWUgaXMgc2V0IHRvIHRoZSB0eXBlIG5h bWUsIHdpdGhvdXQgcXVvdGVzCisgKgorICogLSB0eXBlbW9kc3RyIGlzIHNldCB0byB0aGUgdHlw ZW1vZCwgaWYgYW55LCBhcyBhIHN0cmluZyB3aXRoIHBhcmVucworICoKKyAqIC0gdHlwYXJyYXkg aW5kaWNhdGVzIHdoZXRoZXIgW11zIG11c3QgYmUgYWRkZWQKKyAqCisgKiBXZSBkb24ndCB0cnkg dG8gZGVjb2RlIHR5cGUgbmFtZXMgdG8gdGhlaXIgc3RhbmRhcmQtbWFuZGF0ZWQgbmFtZXMsIGV4 Y2VwdAorICogaW4gdGhlIGNhc2VzIG9mIHR5cGVzIHdpdGggdW51c3VhbCB0eXBtb2QgcnVsZXMu CisgKi8KK3N0YXRpYyB2b2lkCitmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlwZV9vaWQsIGlu dDMyIHR5cGVtb2QsCisJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwbmFtZSwgY2hhciAqKnR5 cGVtb2RzdHIsCisJCQkJCSBib29sICp0eXBhcnJheSkKK3sKKwlIZWFwVHVwbGUJCXR1cGxlOwor CUZvcm1fcGdfdHlwZQl0eXBlZm9ybTsKKwlPaWQJCQkJYXJyYXlfYmFzZV90eXBlOworCisJdHVw bGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bSh0eXBlX29pZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciB0eXBlICV1IiwgdHlwZV9vaWQpOworCisJdHlwZWZvcm0gPSAoRm9y bV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCisJLyoKKwkgKiBDaGVjayBpZiBpdCdzIGEg cmVndWxhciAodmFyaWFibGUgbGVuZ3RoKSBhcnJheSB0eXBlLiAgQXMgYWJvdmUsCisJICogZml4 ZWQtbGVuZ3RoIGFycmF5IHR5cGVzIHN1Y2ggYXMgIm5hbWUiIHNob3VsZG4ndCBnZXQgZGVjb25z dHJ1Y3RlZC4KKwkgKi8KKwlhcnJheV9iYXNlX3R5cGUgPSB0eXBlZm9ybS0+dHlwZWxlbTsKKwor CSp0eXBhcnJheSA9IChJc1RydWVBcnJheVR5cGUodHlwZWZvcm0pICYmIHR5cGVmb3JtLT50eXBz dG9yYWdlICE9IFRZUFNUT1JBR0VfUExBSU4pOworCisJaWYgKCp0eXBhcnJheSkKKwl7CisJCS8q IFN3aXRjaCBvdXIgYXR0ZW50aW9uIHRvIHRoZSBhcnJheSBlbGVtZW50IHR5cGUgKi8KKwkJUmVs ZWFzZVN5c0NhY2hlKHR1cGxlKTsKKwkJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwg T2JqZWN0SWRHZXREYXR1bShhcnJheV9iYXNlX3R5cGUpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHR1cGxlKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBl ICV1IiwgdHlwZV9vaWQpOworCisJCXR5cGVmb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNU KHR1cGxlKTsKKwkJdHlwZV9vaWQgPSBhcnJheV9iYXNlX3R5cGU7CisJfQorCisJLyoKKwkgKiBT cGVjaWFsLWNhc2UgY3JvY2sgZm9yIHR5cGVzIHdpdGggc3RyYW5nZSB0eXBtb2QgcnVsZXMgd2hl cmUgd2UgcHV0CisJICogdHlwbW9kIGF0IHRoZSBtaWRkbGUgb2YgbmFtZShlLmcuIFRJTUUoNikg d2l0aCB0aW1lIHpvbmUgKS4gV2UgY2Fubm90CisJICogc2NoZW1hLXF1YWxpZnkgbm9yIGFkZCBx dW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGVzZSBjYXNlcy4KKwkgKi8KKwlpZiAodHlwZV9v aWQgPT0gSU5URVJWQUxPSUQgfHwKKwkJdHlwZV9vaWQgPT0gVElNRVNUQU1QT0lEIHx8CisJCXR5 cGVfb2lkID09IFRJTUVTVEFNUFRaT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVPSUQgfHwKKwkJ dHlwZV9vaWQgPT0gVElNRVRaT0lEKQorCXsKKwkJc3dpdGNoICh0eXBlX29pZCkKKwkJeworCQkJ Y2FzZSBJTlRFUlZBTE9JRDoKKwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIklOVEVSVkFMIik7CisJ CQkJYnJlYWs7CisJCQljYXNlIFRJTUVTVEFNUFRaT0lEOgorCQkJCWlmICh0eXBlbW9kIDwgMCkK KwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAgV0lUSCBUSU1FIFpPTkUiKTsKKwkJ CQllbHNlCisJCQkJCS8qIG90aGVyd2lzZSwgV0lUSCBUWiBpcyBhZGRlZCBieSB0eXBtb2QuICov CisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIik7CisJCQkJYnJlYWs7CisJCQlj YXNlIFRJTUVTVEFNUE9JRDoKKwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFNUCIpOwor CQkJCWJyZWFrOworCQkJY2FzZSBUSU1FVFpPSUQ6CisJCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJ CQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUgV0lUSCBUSU1FIFpPTkUiKTsKKwkJCQllbHNlCisJ CQkJCS8qIG90aGVyd2lzZSwgV0lUSCBUWiBpcyBhZGRlZCBieSB0eXBtb2RlLiAqLworCQkJCQkq dHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRU9JRDoK KwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCQlicmVhazsKKwkJfQorCQkqbnNw aWQgPSBJbnZhbGlkT2lkOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBObyBhZGRpdGlvbmFs IHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQgZm9yIG90aGVyIHR5cGVzLCBzbyBnZXQgdGhlIHR5cGUK KwkJICogbmFtZSBhbmQgc2NoZW1hIGRpcmVjdGx5IGZyb20gdGhlIGNhdGFsb2cuCisJCSAqLwor CQkqbnNwaWQgPSB0eXBlZm9ybS0+dHlwbmFtZXNwYWNlOworCQkqdHlwbmFtZSA9IHBzdHJkdXAo TmFtZVN0cih0eXBlZm9ybS0+dHlwbmFtZSkpOworCX0KKworCWlmICh0eXBlbW9kID49IDApCisJ CSp0eXBlbW9kc3RyID0gcHJpbnRUeXBtb2QoIiIsIHR5cGVtb2QsIHR5cGVmb3JtLT50eXBtb2Rv dXQpOworCWVsc2UKKwkJKnR5cGVtb2RzdHIgPSBwc3RyZHVwKCIiKTsKKworCVJlbGVhc2VTeXND YWNoZSh0dXBsZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGRlZmF1bHRzIHZhbHVlcyBvZiBh cmd1bWVudHMgdG8gYSBmdW5jdGlvbiwgYXMgYSBsaXN0IG9mCisgKiBkZXBhcnNlZCBleHByZXNz aW9ucy4KKyAqLworc3RhdGljIExpc3QgKgorRnVuY3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpwcm9h cmdkZWZhdWx0cykKK3sKKwlMaXN0ICAgKm5vZGVkZWZzOworCUxpc3QgICAqc3RyZGVmcyA9IE5J TDsKKwlMaXN0Q2VsbCAqY2VsbDsKKworCW5vZGVkZWZzID0gKExpc3QgKikgc3RyaW5nVG9Ob2Rl KHRleHRfdG9fY3N0cmluZyhwcm9hcmdkZWZhdWx0cykpOworCWlmICghSXNBKG5vZGVkZWZzLCBM aXN0KSkKKwkJZWxvZyhFUlJPUiwgInByb2FyZ2RlZmF1bHRzIGlzIG5vdCBhIGxpc3QiKTsKKwor CWZvcmVhY2goY2VsbCwgbm9kZWRlZnMpCisJeworCQlOb2RlICAgKm9uZWRlZiA9IGxmaXJzdChj ZWxsKTsKKworCQlzdHJkZWZzID0gbGFwcGVuZChzdHJkZWZzLCBkZXBhcnNlX2V4cHJlc3Npb24o b25lZGVmLCBOSUwsIGZhbHNlLCBmYWxzZSkpOworCX0KKworCXJldHVybiBzdHJkZWZzOworfQor CisvKgorICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFJF TFBFUlNJU1RFTkNFIHZhbHVlLgorICovCitzdGF0aWMgY2hhciAqCitnZXRfcGVyc2lzdGVuY2Vf c3RyKGNoYXIgcGVyc2lzdGVuY2UpCit7CisJc3dpdGNoIChwZXJzaXN0ZW5jZSkKKwl7CisJCWNh c2UgUkVMUEVSU0lTVEVOQ0VfVEVNUDoKKwkJCXJldHVybiAiVEVNUE9SQVJZIjsKKwkJY2FzZSBS RUxQRVJTSVNURU5DRV9VTkxPR0dFRDoKKwkJCXJldHVybiAiVU5MT0dHRUQiOworCQljYXNlIFJF TFBFUlNJU1RFTkNFX1BFUk1BTkVOVDoKKwkJCXJldHVybiAiIjsKKwkJZGVmYXVsdDoKKwkJCWVs b2coRVJST1IsICJ1bmV4cGVjdGVkIHBlcnNpc3RlbmNlIG1hcmtpbmcgJWMiLCBwZXJzaXN0ZW5j ZSk7CisJCQlyZXR1cm4gIiI7CQkvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisJfQorfQorCisv KiBBbGxvY2F0ZSBhIG5ldyBwYXJhbWV0ZXIgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmpl Y3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKQoreworCU9iakVsZW0JKnBhcmFtOworCisJcGFy YW0gPSBwYWxsb2MwKHNpemVvZihPYmpFbGVtKSk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCXBh cmFtLT5vYmp0eXBlID0gdHlwZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyogQWxsb2NhdGUg YSBuZXcgb2JqZWN0IHBhcmFtZXRlciAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X29iamVjdF9v YmplY3QoT2JqVHJlZSAqdmFsdWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisKKwlwYXJhbSA9IG5l d19vYmplY3QoT2JqVHlwZU9iamVjdCwgTlVMTCk7CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZh bHVlOworCisJcmV0dXJuIHBhcmFtOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0 IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgor bmV3X29ianRyZWUoY2hhciAqZm10KQoreworCU9ialRyZWUJKnBhcmFtczsKKworCXBhcmFtcyA9 IHBhbGxvYzAoc2l6ZW9mKE9ialRyZWUpKTsKKwlwYXJhbXMtPnByZXNlbnQgPSB0cnVlOworCXNs aXN0X2luaXQoJnBhcmFtcy0+cGFyYW1zKTsKKworCWlmIChmbXQpCisJeworCQlwYXJhbXMtPmZt dGluZm8gPSBtYWtlU3RyaW5nSW5mbygpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHBhcmFt cy0+Zm10aW5mbywgZm10KTsKKwl9CisKKwlyZXR1cm4gcGFyYW1zOworfQorCisvKgorICogQSBo ZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31EIGFuZCAle31PIGVsZW1lbnRzLgorICoKKyAqIEVs ZW1lbnRzICJzY2hlbWFuYW1lIiBhbmQgIm9iam5hbWUiIGFyZSBzZXQuICBJZiB0aGUgbmFtZXNw YWNlIE9JRAorICogY29ycmVzcG9uZHMgdG8gYSB0ZW1wIHNjaGVtYSwgdGhhdCdzIHNldCB0byAi cGdfdGVtcCIuCisgKgorICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gZWxlbWVu dCB0eXBlcyBpcyB3aGV0aGVyIHRoZSBvYmpuYW1lIHdpbGwKKyAqIGJlIHF1b3RlZCBhcyBhbiBp ZGVudGlmaWVyIG9yIG5vdCwgd2hpY2ggaXMgbm90IHNvbWV0aGluZyB0aGF0IHRoaXMgcm91dGlu ZQorICogY29uY2VybnMgaXRzZWxmIHdpdGg7IHRoYXQgd2lsbCBiZSB1cCB0byB0aGUgZXhwYW5k IGZ1bmN0aW9uLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUoT2lkIG5zcGlkLCBjaGFyICpuYW1lKQoreworCU9ialRyZWUJKnF1YWxpZmllZDsKKwljaGFy CSAgICpuYW1lc3BhY2U7CisKKwlpZiAoaXNBbnlUZW1wTmFtZXNwYWNlKG5zcGlkKSkKKwkJbmFt ZXNwYWNlID0gcHN0cmR1cCgicGdfdGVtcCIpOworCWVsc2UKKwkJbmFtZXNwYWNlID0gZ2V0X25h bWVzcGFjZV9uYW1lKG5zcGlkKTsKKworCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX1ZBKE5VTEws IDIsCisJCQkJCQkJICAic2NoZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWVzcGFjZSwKKwkJ CQkJCQkgICJvYmpuYW1lIiwgT2JqVHlwZVN0cmluZywgcHN0cmR1cChuYW1lKSk7CisKKwlyZXR1 cm4gcXVhbGlmaWVkOworfQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31E IGFuZCAle31PIGVsZW1lbnRzLCB3aXRoIHRoZSBvYmplY3Qgc3BlY2lmaWVkCisgKiBieSBjbGFz c0lkL29iaklkLgorICoKKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0SWQpCit7CisJT2JqVHJlZQkqcXVhbGlm aWVkOworCVJlbGF0aW9uCWNhdGFsb2c7CisJSGVhcFR1cGxlCWNhdG9iajsKKwlEYXR1bQkJb2Jq bnNwOworCURhdHVtCQlvYmpuYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lOworCUF0dHJOdW1i ZXIJQW51bV9uYW1lc3BhY2U7CisJQXR0ck51bWJlcglBbnVtX29pZCA9IGdldF9vYmplY3RfYXR0 bnVtX29pZChjbGFzc0lkKTsKKwlib29sCQlpc251bGw7CisKKwljYXRhbG9nID0gdGFibGVfb3Bl bihjbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJY2F0b2JqID0gZ2V0X2NhdGFsb2dfb2Jq ZWN0X2J5X29pZChjYXRhbG9nLCBBbnVtX29pZCwgb2JqZWN0SWQpOworCWlmICghY2F0b2JqKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb2JqZWN0ICV1IG9mIGNhdGFs b2cgXCIlc1wiIiwKKwkJCSBvYmplY3RJZCwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoY2F0YWxv ZykpOworCUFudW1fbmFtZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWUoY2xhc3NJZCk7CisJQW51 bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lc3BhY2UoY2xhc3NJZCk7CisKKwlv Ympuc3AgPSBoZWFwX2dldGF0dHIoY2F0b2JqLCBBbnVtX25hbWVzcGFjZSwgUmVsYXRpb25HZXRE ZXNjcihjYXRhbG9nKSwKKwkJCQkJCSAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhF UlJPUiwgInVuZXhwZWN0ZWQgTlVMTCBuYW1lc3BhY2UiKTsKKworCW9iam5hbWUgPSBoZWFwX2dl dGF0dHIoY2F0b2JqLCBBbnVtX25hbWUsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJ CQkgICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBO VUxMIG5hbWUiKTsKKworCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShEYXR1 bUdldE9iamVjdElkKG9iam5zcCksCisJCQkJCQkJCQkJIE5hbWVTdHIoKkRhdHVtR2V0TmFtZShv YmpuYW1lKSkpOworCXRhYmxlX2Nsb3NlKGNhdGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisKKwly ZXR1cm4gcXVhbGlmaWVkOworfQorCisvKgorICogSGVscGVyIHJvdXRpbmUgZm9yICV7fVIgb2Jq ZWN0cywgd2l0aCByb2xlIHNwZWNpZmllZCBieSBSb2xlU3BlYyBub2RlLgorICogU3BlY2lhbCB2 YWx1ZXMgc3VjaCBhcyBST0xFU1BFQ19DVVJSRU5UX1VTRVIgYXJlIGV4cGFuZGVkIHRvIHRoZWly IGZpbmFsCisgKiBuYW1lcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9y X3JvbGVzcGVjKFJvbGVTcGVjICpzcGVjKQoreworCU9ialRyZWUJICAgKnJvbGU7CisJY2hhcgkg ICAqcm9sZXR5cGU7CisKKwlpZiAoc3BlYy0+cm9sZXR5cGUgIT0gUk9MRVNQRUNfUFVCTElDKQor CQlyb2xldHlwZSA9IGdldF9yb2xlc3BlY19uYW1lKHNwZWMpOworCWVsc2UKKwkJcm9sZXR5cGUg PSBwc3RyZHVwKCIiKTsKKworCXJvbGUgPSBuZXdfb2JqdHJlZV9WQShOVUxMLDIsCisJCQkJCQkg ICJpc19wdWJsaWMiLCBPYmpUeXBlQm9vbCwgc3BlYy0+cm9sZXR5cGUgPT0gUk9MRVNQRUNfUFVC TElDLAorCQkJCQkJICAicm9sZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCByb2xldHlwZSk7CisJcmV0 dXJuIHJvbGU7Cit9CisKKy8qCisgKiBIZWxwZXIgcm91dGluZSBmb3IgJXt9UiBvYmplY3RzLCB3 aXRoIHJvbGUgc3BlY2lmaWVkIGJ5IE9JRC4gIChBQ0xfSURfUFVCTElDCisgKiBtZWFucyB0byB1 c2UgInB1YmxpYyIpLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3Jfcm9s ZV9pZChPaWQgcm9sZW9pZCkKK3sKKwlPYmpUcmVlICAgICpyb2xlOworCisJcm9sZSA9IG5ld19v Ymp0cmVlKCIiKTsKKworCWlmIChyb2xlb2lkICE9IEFDTF9JRF9QVUJMSUMpCisJeworCQlIZWFw VHVwbGUJcm9sdHVwOworCQljaGFyCSAgICpyb2xlbmFtZTsKKworCQlyb2x0dXAgPSBTZWFyY2hT eXNDYWNoZTEoQVVUSE9JRCwgT2JqZWN0SWRHZXREYXR1bShyb2xlb2lkKSk7CisJCWlmICghSGVh cFR1cGxlSXNWYWxpZChyb2x0dXApKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUo RVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkJIGVycm1zZygicm9sZSB3aXRoIE9JRCAl dSBkb2VzIG5vdCBleGlzdCIsIHJvbGVvaWQpKSk7CisKKwkJcm9sZW5hbWUgPSBOYW1lU3RyKCgo Rm9ybV9wZ19hdXRoaWQpIEdFVFNUUlVDVChyb2x0dXApKS0+cm9sbmFtZSk7CisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJvbGUsICIle3JvbGVuYW1lfUkiLCBwc3RyZHVwKHJvbGVuYW1lKSk7CisK KwkJUmVsZWFzZVN5c0NhY2hlKHJvbHR1cCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19v YmplY3Qocm9sZSwgIiV7cm9sZW5hbWV9SSIsICJwdWJsaWMiKTsKKworCXJldHVybiByb2xlOwor fQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31UIGVsZW1lbnRzLgorICov CitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfdHlwZShPaWQgdHlwZUlkLCBpbnQz MiB0eXBtb2QpCit7CisJT2JqVHJlZQkqdHlwZVBhcmFtOworCU9pZAkJCXR5cG5zcGlkOworCWNo YXIJICAgKnR5cG5zcDsKKwljaGFyCSAgICp0eXBlbmFtZSA9IE5VTEw7CisJY2hhcgkgICAqdHlw bW9kc3RyOworCWJvb2wJCXR5cGFycmF5OworCisJZm9ybWF0X3R5cGVfZGV0YWlsZWQodHlwZUlk LCB0eXBtb2QsCisJCQkJCQkgJnR5cG5zcGlkLCAmdHlwZW5hbWUsICZ0eXBtb2RzdHIsICZ0eXBh cnJheSk7CisKKwlpZiAoT2lkSXNWYWxpZCh0eXBuc3BpZCkpCisJCXR5cG5zcCA9IGdldF9uYW1l c3BhY2VfbmFtZV9vcl90ZW1wKHR5cG5zcGlkKTsKKwllbHNlCisJCXR5cG5zcCA9IHBzdHJkdXAo IiIpOworCisJdHlwZVBhcmFtID0gbmV3X29ianRyZWVfVkEoTlVMTCwgNCwKKwkJCQkJCQkgICAi c2NoZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcsIHR5cG5zcCwKKwkJCQkJCQkgICAidHlwZW5hbWUi LCBPYmpUeXBlU3RyaW5nLCB0eXBlbmFtZSwKKwkJCQkJCQkgICAidHlwbW9kIiwgT2JqVHlwZVN0 cmluZywgdHlwbW9kc3RyLAorCQkJCQkJCSAgICJ0eXBhcnJheSIsIE9ialR5cGVCb29sLCB0eXBh cnJheSk7CisKKwlyZXR1cm4gdHlwZVBhcmFtOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcg b2JqZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZlcnNpb24u CisgKgorICogVGhlICJmbXQiIGFyZ3VtZW50IGlzIHVzZWQgdG8gYXBwZW5kIGFzIGEgImZtdCIg ZWxlbWVudCBpbiB0aGUgb3V0cHV0IGJsb2IuCisgKiBudW1vYmpzIGluZGljYXRlcyB0aGUgbnVt YmVyIG9mIGV4dHJhIGVsZW1lbnRzIHRvIGFwcGVuZDsgZm9yIGVhY2ggb25lLCBhCisgKiBuYW1l IChzdHJpbmcpLCB0eXBlIChmcm9tIHRoZSBPYmpUeXBlIGVudW0pIGFuZCB2YWx1ZSBtdXN0IGJl IHN1cHBsaWVkLiAgVGhlCisgKiB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB0eXBlIGdpdmVuOyBmb3Ig aW5zdGFuY2UsIE9ialR5cGVJbnRlZ2VyIHJlcXVpcmVzIGFuCisgKiBpbnQ2NCwgT2JqVHlwZVN0 cmluZyByZXF1aXJlcyBhIGNoYXIgKiwgT2JqVHlwZUFycmF5IHJlcXVpcmVzIGEgbGlzdCAob2YK KyAqIE9iakVsZW0pLCBPYmpUeXBlT2JqZWN0IHJlcXVpcmVzIGFuIE9ialRyZWUsIGFuZCBzbyBv bi4gIEVhY2ggZWxlbWVudCB0eXBlICoKKyAqIG11c3QgbWF0Y2ggdGhlIGNvbnZlcnNpb24gc3Bl Y2lmaWVyIGdpdmVuIGluIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBkZXNjcmliZWQKKyAqIGluIGRk bF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kLCBxLnYuCisgKgorICogTm90ZSB3ZSBkb24ndCBoYXZl IHRoZSBsdXh1cnkgb2Ygc3ByaW50Zi1saWtlIGNvbXBpbGVyIHdhcm5pbmdzIGZvcgorICogbWFs Zm9ybWVkIGFyZ3VtZW50IGxpc3RzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJl ZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLikKK3sKKwlPYmpUcmVlCSAgICp0cmVlOwor CXZhX2xpc3QJCWFyZ3M7CisJaW50CQkJaTsKKworCS8qIFNldCB1cCB0aGUgdG9wbGV2ZWwgb2Jq ZWN0IGFuZCBpdHMgImZtdCIgKi8KKwl0cmVlID0gbmV3X29ianRyZWUoZm10KTsKKworCS8qIEFu ZCBwcm9jZXNzIHRoZSBnaXZlbiB2YXJhcmdzICovCisJdmFfc3RhcnQoYXJncywgbnVtb2Jqcyk7 CisJZm9yIChpID0gMDsgaSA8IG51bW9ianM7IGkrKykKKwl7CisJCWNoYXIJICAgKm5hbWU7CisJ CU9ialR5cGUJCXR5cGU7CisJCU9iakVsZW0JICAgKmVsZW07CisKKwkJbmFtZSA9IHZhX2FyZyhh cmdzLCBjaGFyICopOworCQl0eXBlID0gdmFfYXJnKGFyZ3MsIE9ialR5cGUpOworCQllbGVtID0g bmV3X29iamVjdCh0eXBlLCBOVUxMKTsKKworCQkvKgorCQkgKiBGb3IgYWxsIG90aGVyIHBhcmFt IHR5cGVzIHRoZXJlIG11c3QgYmUgYSB2YWx1ZSBpbiB0aGUgdmFyYXJncy4KKwkJICogRmV0Y2gg aXQgYW5kIGFkZCB0aGUgZnVsbHkgZm9ybWVkIHN1Ym9iamVjdCBpbnRvIHRoZSBtYWluIG9iamVj dC4KKwkJICovCisJCXN3aXRjaCAodHlwZSkKKwkJeworCQkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJ CQkvKiBOdWxsIHBhcmFtcyBkb24ndCBoYXZlIGEgdmFsdWUgKG9idmlvdXNseSkgKi8KKwkJCQli cmVhazsKKwkJCWNhc2UgT2JqVHlwZUJvb2w6CisJCQkJZWxlbS0+dmFsdWUuYm9vbGVhbiA9IHZh X2FyZyhhcmdzLCBpbnQpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlU3RyaW5nOgorCQkJ CWVsZW0tPnZhbHVlLnN0cmluZyA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQkJCWJyZWFrOwor CQkJY2FzZSBPYmpUeXBlQXJyYXk6CisJCQkJZWxlbS0+dmFsdWUuYXJyYXkgPSB2YV9hcmcoYXJn cywgTGlzdCAqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQkJZWxl bS0+dmFsdWUuaW50ZWdlciA9IHZhX2FyZyhhcmdzLCBpbnQ2NCk7CisJCQkJYnJlYWs7CisJCQlj YXNlIE9ialR5cGVGbG9hdDoKKwkJCQllbGVtLT52YWx1ZS5mbHQgPSB2YV9hcmcoYXJncywgZG91 YmxlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZU9iamVjdDoKKwkJCQllbGVtLT52YWx1 ZS5vYmplY3QgPSB2YV9hcmcoYXJncywgT2JqVHJlZSAqKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1 bHQ6CisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgT2JqVHJlZSBlbGVtZW50IHR5cGUgJWQiLCB0 eXBlKTsKKwkJfQorCisJCWVsZW0tPm5hbWUgPSBuYW1lOworCQlhcHBlbmRfcHJlbWFkZV9vYmpl Y3QodHJlZSwgZWxlbSk7CisJfQorCisJdmFfZW5kKGFyZ3MpOworCXJldHVybiB0cmVlOworfQor CisvKiBBbGxvY2F0ZSBhIG5ldyBzdHJpbmcgb2JqZWN0ICovCitzdGF0aWMgT2JqRWxlbSAqCitu ZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKwor CUFzc2VydCh2YWx1ZSk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZVN0cmluZywgTlVM TCk7CisJcGFyYW0tPnZhbHVlLnN0cmluZyA9IHZhbHVlOworCisJcmV0dXJuIHBhcmFtOworfQor CisvKgorICogUHJvY2VzcyB0aGUgcHJlLWJ1aWx0IGZvcm1hdCBzdHJpbmcgZnJvbSB0aGUgT2Jq VHJlZSBpbnRvIHRoZSBvdXRwdXQgcGFyc2UKKyAqIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAor b2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBPYmpU cmVlICp0cmVlKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUJdmFsOworCisJaWYg KHRyZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCB0aGUga2V5IGZp cnN0ICovCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0gImZt dCI7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleS52YWwuc3RyaW5nLnZhbCk7CisJ cHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCS8qIFRoZW4gcHJvY2Vz cyB0aGUgcHJlLWJ1aWx0IGZvcm1hdCBzdHJpbmcgKi8KKwl2YWwudHlwZSA9IGpidlN0cmluZzsK Kwl2YWwudmFsLnN0cmluZy5sZW4gPSB0cmVlLT5mbXRpbmZvLT5sZW47CisJdmFsLnZhbC5zdHJp bmcudmFsID0gdHJlZS0+Zm10aW5mby0+ZGF0YTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdK Ql9WQUxVRSwgJnZhbCk7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBKU09OQiByZXByZXNlbnRhdGlv biBmcm9tIGFuIE9ialRyZWUuCisgKi8KK3N0YXRpYyBKc29uYiAqCitvYmp0cmVlX3RvX2pzb25i KE9ialRyZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisKKwl2YWx1ZSA9IG9ianRy ZWVfdG9fanNvbmJfcmVjKHRyZWUsIE5VTEwpOworCXJldHVybiBKc29uYlZhbHVlVG9Kc29uYih2 YWx1ZSk7Cit9CisKKy8qCisgKiBIZWxwZXIgZm9yIG9ianRyZWVfdG9fanNvbmI6IHByb2Nlc3Mg YW4gaW5kaXZpZHVhbCBlbGVtZW50IGZyb20gYW4gb2JqZWN0IG9yCisgKiBhbiBhcnJheSBpbnRv IHRoZSBvdXRwdXQgcGFyc2Ugc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitvYmp0cmVlX3RvX2pz b25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2JqRWxlbSAqb2JqZWN0LAorCQkJ CQkJIEpzb25iSXRlcmF0b3JUb2tlbiBlbGVtX3Rva2VuKQoreworCUxpc3RDZWxsICAgKmNlbGw7 CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlzd2l0Y2ggKG9iamVjdC0+b2JqdHlwZSkKKwl7CisJCWNh c2UgT2JqVHlwZU51bGw6CisJCQl2YWwudHlwZSA9IGpidk51bGw7CisJCQlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBl U3RyaW5nOgorCQkJdmFsLnR5cGUgPSBqYnZTdHJpbmc7CisJCQl2YWwudmFsLnN0cmluZy5sZW4g PSBzdHJsZW4ob2JqZWN0LT52YWx1ZS5zdHJpbmcpOworCQkJdmFsLnZhbC5zdHJpbmcudmFsID0g b2JqZWN0LT52YWx1ZS5zdHJpbmc7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9r ZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJCXZhbC50 eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQorCQkJCURh dHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGludDhfbnVtZXJpYywKKwkJCQkJCQkJ CQkJCQlvYmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwg ZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVGbG9hdDoKKwkJ CXZhbC50eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQor CQkJCURhdHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGZsb2F0OF9udW1lcmljLAor CQkJCQkJCQkJCQkJCW9iamVjdC0+dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUJv b2w6CisJCQl2YWwudHlwZSA9IGpidkJvb2w7CisJCQl2YWwudmFsLmJvb2xlYW4gPSBvYmplY3Qt PnZhbHVlLmJvb2xlYW47CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2 YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlT2JqZWN0OgorCQkJLyogUmVjdXJzaXZl bHkgYWRkIHRoZSBvYmplY3QgaW50byB0aGUgZXhpc3RpbmcgcGFyc2Ugc3RhdGUgKi8KKwkJCW9i anRyZWVfdG9fanNvbmJfcmVjKG9iamVjdC0+dmFsdWUub2JqZWN0LCBzdGF0ZSk7CisJCQlicmVh azsKKworCQljYXNlIE9ialR5cGVBcnJheToKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0JFR0lOX0FSUkFZLCBOVUxMKTsKKwkJCWZvcmVhY2goY2VsbCwgb2JqZWN0LT52YWx1ZS5hcnJh eSkKKwkJCXsKKwkJCQlPYmpFbGVtICAgKmVsZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJCQlvYmp0 cmVlX3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIGVsZW0sIFdKQl9FTEVNKTsKKwkJCX0KKwkJCXB1 c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9BUlJBWSwgTlVMTCk7CisJCQlicmVhazsKKwor CQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBvYmplY3QgdHlwZSAlZCIs IG9iamVjdC0+b2JqdHlwZSk7CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBSZWN1cnNpdmUg aGVscGVyIGZvciBvYmp0cmVlX3RvX2pzb25iLgorICovCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitv Ymp0cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRl KQoreworCXNsaXN0X2l0ZXIJaXRlcjsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JF R0lOX09CSkVDVCwgTlVMTCk7CisKKwlvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KHN0YXRl LCB0cmVlKTsKKworCXNsaXN0X2ZvcmVhY2goaXRlciwgJnRyZWUtPnBhcmFtcykKKwl7CisJCU9i akVsZW0JKm9iamVjdCA9IHNsaXN0X2NvbnRhaW5lcihPYmpFbGVtLCBub2RlLCBpdGVyLmN1cik7 CisJCUpzb25iVmFsdWUJa2V5OworCisJCS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCQlrZXku dHlwZSA9IGpidlN0cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKG9iamVjdC0+ bmFtZSk7CisJCWtleS52YWwuc3RyaW5nLnZhbCA9IG9iamVjdC0+bmFtZTsKKwkJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCQkvKiBUaGVuIHByb2Nlc3MgdGhlIHZh bHVlIGFjY29yZGluZyB0byBpdHMgdHlwZSAqLworCQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQo c3RhdGUsIG9iamVjdCwgV0pCX1ZBTFVFKTsKKwl9CisKKwlyZXR1cm4gcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZv ciBDUkVBVEUgVEFCTEUvQ1JFQVRFIERPTUFJTiBkZXBhcnNpbmcuCisgKgorICogR2l2ZW4gYSB0 YWJsZSBPSUQgb3IgZG9tYWluIE9JRCwgb2J0YWluIGl0cyBjb25zdHJhaW50cyBhbmQgYXBwZW5k IHRoZW0gdG8KKyAqIHRoZSBnaXZlbiBlbGVtZW50cyBsaXN0LiAgVGhlIHVwZGF0ZWQgbGlzdCBp cyByZXR1cm5lZC4KKyAqCisgKiBUaGlzIHdvcmtzIGZvciB0eXBlZCB0YWJsZXMsIHJlZ3VsYXIg dGFibGVzLCBhbmQgZG9tYWlucy4KKyAqCisgKiBOb3RlIHRoYXQgQ09OU1RSQUlOVF9GT1JFSUdO IGNvbnN0cmFpbnRzIGFyZSBhbHdheXMgaWdub3JlZC4KKyAqLworc3RhdGljIExpc3QgKgorb2J0 YWluQ29uc3RyYWludHMoTGlzdCAqZWxlbWVudHMsIE9pZCByZWxhdGlvbklkLCBPaWQgZG9tYWlu SWQpCit7CisJUmVsYXRpb24JY29uUmVsOworCVNjYW5LZXlEYXRhIGtleTsKKwlTeXNTY2FuRGVz YyBzY2FuOworCUhlYXBUdXBsZQl0dXBsZTsKKwlPYmpUcmVlCSpjb25zdHI7CisKKwkvKiBPbmx5 IG9uZSBtYXkgYmUgdmFsaWQgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChyZWxhdGlvbklkKSBeIE9p ZElzVmFsaWQoZG9tYWluSWQpKTsKKworCS8qCisJICogU2NhbiBwZ19jb25zdHJhaW50IHRvIGZl dGNoIGFsbCBjb25zdHJhaW50cyBsaW5rZWQgdG8gdGhlIGdpdmVuCisJICogcmVsYXRpb24uCisJ ICovCisJY29uUmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwlpZiAoT2lkSXNWYWxpZChyZWxhdGlvbklkKSkKKwl7CisJCVNjYW5LZXlJbml0 KCZrZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQkJQlRFcXVhbFN0 cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKHJlbGF0aW9uSWQp KTsKKwkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5 cGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQorCWVs c2UKKwl7CisJCUFzc2VydChPaWRJc1ZhbGlkKGRvbWFpbklkKSk7CisJCVNjYW5LZXlJbml0KCZr ZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb250eXBpZCwKKwkJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKGRvbWFpbklkKSk7CisJ CXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50VHlwaWRJbmRleElk LAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKworCS8qCisJICogRm9yIGVh Y2ggY29uc3RyYWludCwgYWRkIGEgbm9kZSB0byB0aGUgbGlzdCBvZiB0YWJsZSBlbGVtZW50cy4g IEluCisJICogdGhlc2Ugbm9kZXMgd2UgaW5jbHVkZSBub3Qgb25seSB0aGUgcHJpbnRhYmxlIGlu Zm9ybWF0aW9uICgiZm10IiksIGJ1dAorCSAqIGFsc28gc2VwYXJhdGUgYXR0cmlidXRlcyB0byBp bmRpY2F0ZSB0aGUgdHlwZSBvZiBjb25zdHJhaW50LCBmb3IKKwkgKiBhdXRvbWF0aWMgcHJvY2Vz c2luZy4KKwkgKi8KKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dl dG5leHQoc2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbnN0ckZvcm07CisJCWNo YXIJICAgKmNvbnR5cGU7CisKKwkJY29uc3RyRm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdF VFNUUlVDVCh0dXBsZSk7CisKKwkJc3dpdGNoIChjb25zdHJGb3JtLT5jb250eXBlKQorCQl7CisJ CQljYXNlIENPTlNUUkFJTlRfQ0hFQ0s6CisJCQkJY29udHlwZSA9ICJjaGVjayI7CisJCQkJYnJl YWs7CisJCQljYXNlIENPTlNUUkFJTlRfRk9SRUlHTjoKKwkJCQljb250aW51ZTsJLyogbm90IGhl cmUgKi8KKwkJCWNhc2UgQ09OU1RSQUlOVF9QUklNQVJZOgorCQkJCWNvbnR5cGUgPSAicHJpbWFy eSBrZXkiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1VOSVFVRToKKwkJCQljb250 eXBlID0gInVuaXF1ZSI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfVFJJR0dFUjoK KwkJCQljb250eXBlID0gInRyaWdnZXIiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5U X0VYQ0xVU0lPTjoKKwkJCQljb250eXBlID0gImV4Y2x1c2lvbiI7CisJCQkJYnJlYWs7CisJCQlk ZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgY29uc3RyYWludCB0eXBlIik7 CisJCX0KKworCQkvKgorCQkgKiAidHlwZSIgYW5kICJjb250eXBlIiBhcmUgbm90IHBhcnQgb2Yg dGhlIHByaW50YWJsZSBvdXRwdXQsIGJ1dCBhcmUKKwkJICogdXNlZnVsIHRvIHByb2dyYW1tYXRp Y2FsbHkgZGlzdGluZ3Vpc2ggdGhlc2UgZnJvbSBjb2x1bW5zIGFuZCBhbW9uZworCQkgKiBkaWZm ZXJlbnQgY29uc3RyYWludCB0eXBlcy4KKwkJICoKKwkJICogWFhYIGl0IG1pZ2h0IGJlIHVzZWZ1 bCB0byBhbHNvIGxpc3QgdGhlIGNvbHVtbiBuYW1lcyBpbiBhIFBLLCBldGMuCisJCSAqLworCQlj b25zdHIgPSBuZXdfb2JqdHJlZV9WQSgiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259 cyIsCisJCQkJCQkJCTQsCisJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbnN0cmFp bnQiLAorCQkJCQkJCQkiY29udHlwZSIsIE9ialR5cGVTdHJpbmcsIGNvbnR5cGUsCisJCQkJCQkJ CSJuYW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihjb25zdHJGb3JtLT5jb25uYW1lKSwKKwkJ CQkJCQkJImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgcGdfZ2V0X2NvbnN0 cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyRm9ybS0+b2lkKSk7CisJCWVsZW1lbnRzID0g bGFwcGVuZChlbGVtZW50cywgbmV3X29iamVjdF9vYmplY3QoY29uc3RyKSk7CisJfQorCisJc3lz dGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlyZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBSZXR1cm4gYW4gaW5kZXggZGVm aW5pdGlvbiwgc3BsaXQgaW4gc2V2ZXJhbCBwaWVjZXMuCisgKgorICogQSBsYXJnZSBhbW91bnQg b2YgY29kZSBpcyBkdXBsaWNhdGVkIGZyb20gIHBnX2dldF9pbmRleGRlZl93b3JrZXIsIGJ1dAor ICogY29udHJvbCBmbG93IGlzIGRpZmZlcmVudCBlbm91Z2ggdGhhdCBpdCBkb2Vzbid0IHNlZW0g d29ydGgga2VlcGluZyB0aGVtCisgKiB0b2dldGhlci4KKyAqLworc3RhdGljIHZvaWQKK3BnX2dl dF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJCQkJCSBjaGFyICoqaW5kZXhf YW0sCisJCQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkgY2hhciAqKnJlbG9wdGlvbnMs CisJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkgY2hhciAqKndoZXJlQ2xhdXNlKQor eworCUhlYXBUdXBsZQlodF9pZHg7CisJSGVhcFR1cGxlCWh0X2lkeHJlbDsKKwlIZWFwVHVwbGUJ aHRfYW07CisJRm9ybV9wZ19pbmRleCBpZHhyZWM7CisJRm9ybV9wZ19jbGFzcyBpZHhyZWxyZWM7 CisJRm9ybV9wZ19hbQlhbXJlYzsKKwlJbmRleEFtUm91dGluZSAqYW1yb3V0aW5lOworCUxpc3QJ ICAgKmluZGV4cHJzOworCUxpc3RDZWxsICAgKmluZGV4cHJfaXRlbTsKKwlMaXN0CSAgICpjb250 ZXh0OworCU9pZAkJCWluZHJlbGlkOworCWludAkJCWtleW5vOworCURhdHVtCQlpbmRjb2xsRGF0 dW07CisJRGF0dW0JCWluZGNsYXNzRGF0dW07CisJRGF0dW0JCWluZG9wdGlvbkRhdHVtOworCWJv b2wJCWlzbnVsbDsKKwlvaWR2ZWN0b3IgICppbmRjb2xsYXRpb247CisJb2lkdmVjdG9yICAqaW5k Y2xhc3M7CisJaW50MnZlY3RvciAqaW5kb3B0aW9uOworCVN0cmluZ0luZm9EYXRhIGRlZmluaXRp b25CdWY7CisKKwkvKgorCSAqIEZldGNoIHRoZSBwZ19pbmRleCB0dXBsZSBieSB0aGUgT2lkIG9m IHRoZSBpbmRleAorCSAqLworCWh0X2lkeCA9IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBP YmplY3RJZEdldERhdHVtKGluZGV4cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRf aWR4KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGluZGV4ICV1Iiwg aW5kZXhyZWxpZCk7CisJaWR4cmVjID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChodF9pZHgp OworCisJaW5kcmVsaWQgPSBpZHhyZWMtPmluZHJlbGlkOworCUFzc2VydChpbmRleHJlbGlkID09 IGlkeHJlYy0+aW5kZXhyZWxpZCk7CisKKwkvKiBNdXN0IGdldCBpbmRjb2xsYXRpb24sIGluZGNs YXNzLCBhbmQgaW5kb3B0aW9uIHRoZSBoYXJkIHdheSAqLworCWluZGNvbGxEYXR1bSA9IFN5c0Nh Y2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCSAgIEFudW1fcGdfaW5kZXhf aW5kY29sbGF0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY29sbGF0aW9u ID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY29sbERhdHVtKTsKKworCWluZGNs YXNzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJ QW51bV9wZ19pbmRleF9pbmRjbGFzcywgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWlu ZGNsYXNzID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY2xhc3NEYXR1bSk7CisK KwlpbmRvcHRpb25EYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJ CQkJCQkJCQkgQW51bV9wZ19pbmRleF9pbmRvcHRpb24sICZpc251bGwpOworCUFzc2VydCghaXNu dWxsKTsKKwlpbmRvcHRpb24gPSAoaW50MnZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kb3B0 aW9uRGF0dW0pOworCisJLyoKKwkgKiBGZXRjaCB0aGUgcGdfY2xhc3MgdHVwbGUgb2YgdGhlIGlu ZGV4IHJlbGF0aW9uCisJICovCisJaHRfaWR4cmVsID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwg T2JqZWN0SWRHZXREYXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0 X2lkeHJlbCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlv biAldSIsIGluZGV4cmVsaWQpOworCWlkeHJlbHJlYyA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJV Q1QoaHRfaWR4cmVsKTsKKworCS8qCisJICogRmV0Y2ggdGhlIHBnX2FtIHR1cGxlIG9mIHRoZSBp bmRleCcgYWNjZXNzIG1ldGhvZAorCSAqLworCWh0X2FtID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lE LCBPYmplY3RJZEdldERhdHVtKGlkeHJlbHJlYy0+cmVsYW0pKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQoaHRfYW0pKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNj ZXNzIG1ldGhvZCAldSIsCisJCQkgaWR4cmVscmVjLT5yZWxhbSk7CisJYW1yZWMgPSAoRm9ybV9w Z19hbSkgR0VUU1RSVUNUKGh0X2FtKTsKKworCS8qCisJICogR2V0IHRoZSBpbmRleCBleHByZXNz aW9ucywgaWYgYW55LiAgKE5PVEU6IHdlIGRvIG5vdCB1c2UgdGhlIHJlbGNhY2hlCisJICogdmVy c2lvbnMgb2YgdGhlIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGUsIGJlY2F1c2Ugd2Ugd2FudCB0 byBkaXNwbGF5CisJICogbm9uLWNvbnN0LWZvbGRlZCBleHByZXNzaW9ucy4pCisJICovCisJaWYg KCFoZWFwX2F0dGlzbnVsbChodF9pZHgsIEFudW1fcGdfaW5kZXhfaW5kZXhwcnMsIE5VTEwpKQor CXsKKwkJRGF0dW0JCWV4cHJzRGF0dW07CisJCWJvb2wJCWlzbnVsbDsKKwkJY2hhcgkgICAqZXhw cnNTdHJpbmc7CisKKwkJZXhwcnNEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBo dF9pZHgsCisJCQkJCQkJCQkgQW51bV9wZ19pbmRleF9pbmRleHBycywgJmlzbnVsbCk7CisJCUFz c2VydCghaXNudWxsKTsKKwkJZXhwcnNTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHJz RGF0dW0pOworCQlpbmRleHBycyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShleHByc1N0cmluZyk7 CisJCXBmcmVlKGV4cHJzU3RyaW5nKTsKKwl9CisJZWxzZQorCQlpbmRleHBycyA9IE5JTDsKKwor CWluZGV4cHJfaXRlbSA9IGxpc3RfaGVhZChpbmRleHBycyk7CisKKwljb250ZXh0ID0gZGVwYXJz ZV9jb250ZXh0X2ZvcihnZXRfcmVsX25hbWUoaW5kcmVsaWQpLCBpbmRyZWxpZCk7CisKKwlpbml0 U3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1Zik7CisKKwkvKiBPdXRwdXQgaW5kZXggQU0gKi8KKwkq aW5kZXhfYW0gPSBwc3RyZHVwKHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhbXJlYy0+YW1uYW1l KSkpOworCisJLyogRmV0Y2ggdGhlIGluZGV4IEFNJ3MgQVBJIHN0cnVjdCAqLworCWFtcm91dGlu ZSA9IEdldEluZGV4QW1Sb3V0aW5lKGFtcmVjLT5hbWhhbmRsZXIpOworCisJLyoKKwkgKiBPdXRw dXQgaW5kZXggZGVmaW5pdGlvbi4gIE5vdGUgdGhlIG91dGVyIHBhcmVucyBtdXN0IGJlIHN1cHBs aWVkIGJ5CisJICogY2FsbGVyLgorCSAqLworCWZvciAoa2V5bm8gPSAwOyBrZXlubyA8IGlkeHJl Yy0+aW5kbmF0dHM7IGtleW5vKyspCisJeworCQlBdHRyTnVtYmVyCWF0dG51bSA9IGlkeHJlYy0+ aW5ka2V5LnZhbHVlc1trZXlub107CisJCWludDE2CQlvcHQgPSBpbmRvcHRpb24tPnZhbHVlc1tr ZXlub107CisJCU9pZAkJCWtleWNvbHR5cGU7CisJCU9pZAkJCWtleWNvbGNvbGxhdGlvbjsKKwkJ T2lkCQkJaW5kY29sbDsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVm LCBrZXlubyA9PSAwID8gIiIgOiAiLCAiKTsKKworCQlpZiAoYXR0bnVtICE9IDApCisJCXsKKwkJ CS8qIFNpbXBsZSBpbmRleCBjb2x1bW4gKi8KKwkJCWNoYXIJICAgKmF0dG5hbWU7CisJCQlpbnQz MgkJa2V5Y29sdHlwbW9kOworCisJCQlhdHRuYW1lID0gZ2V0X2F0dG5hbWUoaW5kcmVsaWQsIGF0 dG51bSwgZmFsc2UpOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1Ziwg cXVvdGVfaWRlbnRpZmllcihhdHRuYW1lKSk7CisJCQlnZXRfYXR0dHlwZXR5cG1vZGNvbGwoaW5k cmVsaWQsIGF0dG51bSwKKwkJCQkJCQkJICAma2V5Y29sdHlwZSwgJmtleWNvbHR5cG1vZCwKKwkJ CQkJCQkJICAma2V5Y29sY29sbGF0aW9uKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIEV4cHJl c3Npb25hbCBpbmRleCAqLworCQkJTm9kZQkgICAqaW5kZXhrZXk7CisJCQljaGFyCSAgICpzdHI7 CisKKwkJCWlmIChpbmRleHByX2l0ZW0gPT0gTlVMTCkKKwkJCQllbG9nKEVSUk9SLCAidG9vIGZl dyBlbnRyaWVzIGluIGluZGV4cHJzIGxpc3QiKTsKKwkJCWluZGV4a2V5ID0gKE5vZGUgKikgbGZp cnN0KGluZGV4cHJfaXRlbSk7CisJCQlpbmRleHByX2l0ZW0gPSBsbmV4dChpbmRleHBycywgaW5k ZXhwcl9pdGVtKTsKKwkJCS8qIERlcGFyc2UgKi8KKwkJCXN0ciA9IGRlcGFyc2VfZXhwcmVzc2lv bihpbmRleGtleSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKworCQkJLyogTmVlZCBwYXJlbnMg aWYgaXQncyBub3QgYSBiYXJlIGZ1bmN0aW9uIGNhbGwgKi8KKwkJCWlmIChpbmRleGtleSAmJiBJ c0EoaW5kZXhrZXksIEZ1bmNFeHByKSAmJgorCQkJCSgoRnVuY0V4cHIgKikgaW5kZXhrZXkpLT5m dW5jZm9ybWF0ID09IENPRVJDRV9FWFBMSUNJVF9DQUxMKQorCQkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmRlZmluaXRpb25CdWYsIHN0cik7CisJCQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5m bygmZGVmaW5pdGlvbkJ1ZiwgIiglcykiLCBzdHIpOworCisJCQlrZXljb2x0eXBlID0gZXhwclR5 cGUoaW5kZXhrZXkpOworCQkJa2V5Y29sY29sbGF0aW9uID0gZXhwckNvbGxhdGlvbihpbmRleGtl eSk7CisJCX0KKworCQkvKiBBZGQgY29sbGF0aW9uLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJaW5k Y29sbCA9IGluZGNvbGxhdGlvbi0+dmFsdWVzW2tleW5vXTsKKwkJaWYgKE9pZElzVmFsaWQoaW5k Y29sbCkpCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZkZWZpbml0aW9uQnVmLCAiIENPTExBVEUgJXMi LAorCQkJCQkJCSBnZW5lcmF0ZV9jb2xsYXRpb25fbmFtZSgoaW5kY29sbCkpKTsKKworCQkvKiBB ZGQgdGhlIG9wZXJhdG9yIGNsYXNzIG5hbWUsIGV2ZW4gaWYgZGVmYXVsdCAqLworCQlnZXRfb3Bj bGFzc19uYW1lKGluZGNsYXNzLT52YWx1ZXNba2V5bm9dLCBJbnZhbGlkT2lkLCAmZGVmaW5pdGlv bkJ1Zik7CisKKwkJLyogQWRkIG9wdGlvbnMgaWYgcmVsZXZhbnQgKi8KKwkJaWYgKGFtcm91dGlu ZS0+YW1jYW5vcmRlcikKKwkJeworCQkJLyogSWYgaXQgc3VwcG9ydHMgc29ydCBvcmRlcmluZywg cmVwb3J0IERFU0MgYW5kIE5VTExTIG9wdHMgKi8KKwkJCWlmIChvcHQgJiBJTkRPUFRJT05fREVT QykKKwkJCXsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIERF U0MiKTsKKwkJCQkvKiBOVUxMUyBGSVJTVCBpcyB0aGUgZGVmYXVsdCBpbiB0aGlzIGNhc2UgKi8K KwkJCQlpZiAoIShvcHQgJiBJTkRPUFRJT05fTlVMTFNfRklSU1QpKQorCQkJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIE5VTExTIExBU1QiKTsKKwkJCX0KKwkJCWVs c2UKKwkJCXsKKwkJCQlpZiAob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKQorCQkJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIE5VTExTIEZJUlNUIik7CisJCQl9 CisJCX0KKworCQkvKiBYWFggZXhjbHVkZU9wcyB0aGluZ3kgd2FzIGhlcmU7IGRvIHdlIG5lZWQg YW55dGhpbmc/ICovCisJfQorCSpkZWZpbml0aW9uID0gZGVmaW5pdGlvbkJ1Zi5kYXRhOworCisJ LyogT3V0cHV0IHJlbG9wdGlvbnMgKi8KKwkqcmVsb3B0aW9ucyA9IGZsYXR0ZW5fcmVsb3B0aW9u cyhpbmRleHJlbGlkKTsKKworCS8qIE91dHB1dCB0YWJsZXNwYWNlICovCisJeworCQlPaWQJCQl0 YmxzcGM7CisKKwkJdGJsc3BjID0gZ2V0X3JlbF90YWJsZXNwYWNlKGluZGV4cmVsaWQpOworCQlp ZiAoT2lkSXNWYWxpZCh0YmxzcGMpKQorCQkJKnRhYmxlc3BhY2UgPSBwc3RyZHVwKHF1b3RlX2lk ZW50aWZpZXIoZ2V0X3RhYmxlc3BhY2VfbmFtZSh0YmxzcGMpKSk7CisJCWVsc2UKKwkJCSp0YWJs ZXNwYWNlID0gTlVMTDsKKwl9CisKKwkvKiBSZXBvcnQgaW5kZXggcHJlZGljYXRlLCBpZiBhbnkg Ki8KKwlpZiAoIWhlYXBfYXR0aXNudWxsKGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRwcmVkLCBO VUxMKSkKKwl7CisJCU5vZGUJICAgKm5vZGU7CisJCURhdHVtCQlwcmVkRGF0dW07CisJCWJvb2wJ CWlzbnVsbDsKKwkJY2hhcgkgICAqcHJlZFN0cmluZzsKKworCQkvKiBDb252ZXJ0IHRleHQgc3Ry aW5nIHRvIG5vZGUgdHJlZSAqLworCQlwcmVkRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhS RUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJQW51bV9wZ19pbmRleF9pbmRwcmVkLCAmaXNudWxsKTsK KwkJQXNzZXJ0KCFpc251bGwpOworCQlwcmVkU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmluZyhw cmVkRGF0dW0pOworCQlub2RlID0gKE5vZGUgKikgc3RyaW5nVG9Ob2RlKHByZWRTdHJpbmcpOwor CQlwZnJlZShwcmVkU3RyaW5nKTsKKworCQkvKiBEZXBhcnNlICovCisJCSp3aGVyZUNsYXVzZSA9 CisJCQlkZXBhcnNlX2V4cHJlc3Npb24obm9kZSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwl9 CisJZWxzZQorCQkqd2hlcmVDbGF1c2UgPSBOVUxMOworCisJLyogQ2xlYW4gdXAgKi8KKwlSZWxl YXNlU3lzQ2FjaGUoaHRfaWR4KTsKKwlSZWxlYXNlU3lzQ2FjaGUoaHRfaWR4cmVsKTsKKwlSZWxl YXNlU3lzQ2FjaGUoaHRfYW0pOworfQorCisvKgorICogT2J0YWluIHRoZSBkZXBhcnNlZCBkZWZh dWx0IHZhbHVlIGZvciB0aGUgZ2l2ZW4gY29sdW1uIG9mIHRoZSBnaXZlbiB0YWJsZS4KKyAqCisg KiBDYWxsZXIgbXVzdCBoYXZlIHNldCBhIGNvcnJlY3QgZGVwYXJzZSBjb250ZXh0LgorICovCitz dGF0aWMgY2hhciAqCitSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRy TnVtYmVyIGF0dG5vLCBMaXN0ICpkcGNvbnRleHQsCisJCQkJCQkgTGlzdCAqKmV4cHJzKQorewor CU5vZGUgKmRlZnZhbDsKKwljaGFyICpkZWZzdHI7CisKKwlkZWZ2YWwgPSBidWlsZF9jb2x1bW5f ZGVmYXVsdChyZWwsIGF0dG5vKTsKKwlkZWZzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFs LCBkcGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkvKiBDb2xsZWN0IHRoZSBleHByZXNzaW9u IGZvciBsYXRlciByZXBsaWNhdGlvbiBzYWZldHkgY2hlY2tzICovCisJaWYgKGV4cHJzKQorCQkq ZXhwcnMgPSBsYXBwZW5kKCpleHBycywgZGVmdmFsKTsKKworCXJldHVybiBkZWZzdHI7Cit9CisK Ky8qCisgKiBPYnRhaW4gdGhlIGRlcGFyc2VkIHBhcnRpdGlvbiBib3VuZCBleHByZXNzaW9uIGZv ciB0aGUgZ2l2ZW4gdGFibGUuCisgKi8KK3N0YXRpYyBjaGFyICoKK1JlbGF0aW9uR2V0UGFydGl0 aW9uQm91bmQoT2lkIHJlbGlkKQoreworCURhdHVtCQlkZXBhcnNlZDsKKwlEYXR1bQkJYm91bmRE YXR1bTsKKwlib29sCQlpc251bGw7CisJSGVhcFR1cGxlCXR1cGxlOworCisJdHVwbGUgPSBTZWFy Y2hTeXNDYWNoZTEoUkVMT0lELCByZWxpZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxl KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbGF0aW9uICV1IiwK KwkJCSByZWxpZCk7CisKKwlib3VuZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwgdHVw bGUsCisJCQkJCQkJCSBBbnVtX3BnX2NsYXNzX3JlbHBhcnRib3VuZCwKKwkJCQkJCQkJICZpc251 bGwpOworCisJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAorCQkJ CQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVtKFRleHREYXR1bUdldENTdHJpbmcoYm91bmREYXR1 bSkpLAorCQkJCQkJCQkgICByZWxpZCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCisJ cmV0dXJuIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpOworfQorCisvKgorICogUmV0dXJu IHRoZSBnaXZlbiBvYmplY3QgdHlwZSBhcyBhIHN0cmluZy4KKyAqLworc3RhdGljIGNvbnN0IGNo YXIgKgorc3RyaW5naWZ5X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlKQoreworCXN3aXRjaCAo b2JqdHlwZSkKKwl7CisJCWNhc2UgT0JKRUNUX0FHR1JFR0FURToKKwkJCXJldHVybiAiQUdHUkVH QVRFIjsKKwkJY2FzZSBPQkpFQ1RfQ0FTVDoKKwkJCXJldHVybiAiQ0FTVCI7CisJCWNhc2UgT0JK RUNUX0NPTFVNTjoKKwkJCXJldHVybiAiQ09MVU1OIjsKKwkJY2FzZSBPQkpFQ1RfQ09MTEFUSU9O OgorCQkJcmV0dXJuICJDT0xMQVRJT04iOworCQljYXNlIE9CSkVDVF9DT05WRVJTSU9OOgorCQkJ cmV0dXJuICJDT05WRVJTSU9OIjsKKwkJY2FzZSBPQkpFQ1RfREFUQUJBU0U6CisJCQlyZXR1cm4g IkRBVEFCQVNFIjsKKwkJY2FzZSBPQkpFQ1RfRE9NQUlOOgorCQkJcmV0dXJuICJET01BSU4iOwor CQljYXNlIE9CSkVDVF9FVkVOVF9UUklHR0VSOgorCQkJcmV0dXJuICJFVkVOVCBUUklHR0VSIjsK KwkJY2FzZSBPQkpFQ1RfRVhURU5TSU9OOgorCQkJcmV0dXJuICJFWFRFTlNJT04iOworCQljYXNl IE9CSkVDVF9GRFc6CisJCQlyZXR1cm4gIkZPUkVJR04gREFUQSBXUkFQUEVSIjsKKwkJY2FzZSBP QkpFQ1RfRk9SRUlHTl9TRVJWRVI6CisJCQlyZXR1cm4gIlNFUlZFUiI7CisJCWNhc2UgT0JKRUNU X0ZPUkVJR05fVEFCTEU6CisJCQlyZXR1cm4gIkZPUkVJR04gVEFCTEUiOworCQljYXNlIE9CSkVD VF9GVU5DVElPTjoKKwkJCXJldHVybiAiRlVOQ1RJT04iOworCQljYXNlIE9CSkVDVF9JTkRFWDoK KwkJCXJldHVybiAiSU5ERVgiOworCQljYXNlIE9CSkVDVF9MQU5HVUFHRToKKwkJCXJldHVybiAi TEFOR1VBR0UiOworCQljYXNlIE9CSkVDVF9MQVJHRU9CSkVDVDoKKwkJCXJldHVybiAiTEFSR0Ug T0JKRUNUIjsKKwkJY2FzZSBPQkpFQ1RfTUFUVklFVzoKKwkJCXJldHVybiAiTUFURVJJQUxJWkVE IFZJRVciOworCQljYXNlIE9CSkVDVF9PUENMQVNTOgorCQkJcmV0dXJuICJPUEVSQVRPUiBDTEFT UyI7CisJCWNhc2UgT0JKRUNUX09QRVJBVE9SOgorCQkJcmV0dXJuICJPUEVSQVRPUiI7CisJCWNh c2UgT0JKRUNUX09QRkFNSUxZOgorCQkJcmV0dXJuICJPUEVSQVRPUiBGQU1JTFkiOworCQljYXNl IE9CSkVDVF9QT0xJQ1k6CisJCQlyZXR1cm4gIlBPTElDWSI7CisJCWNhc2UgT0JKRUNUX1JPTEU6 CisJCQlyZXR1cm4gIlJPTEUiOworCQljYXNlIE9CSkVDVF9SVUxFOgorCQkJcmV0dXJuICJSVUxF IjsKKwkJY2FzZSBPQkpFQ1RfU0NIRU1BOgorCQkJcmV0dXJuICJTQ0hFTUEiOworCQljYXNlIE9C SkVDVF9TRVFVRU5DRToKKwkJCXJldHVybiAiU0VRVUVOQ0UiOworCQljYXNlIE9CSkVDVF9UQUJM RToKKwkJCXJldHVybiAiVEFCTEUiOworCQljYXNlIE9CSkVDVF9UQUJMRVNQQUNFOgorCQkJcmV0 dXJuICJUQUJMRVNQQUNFIjsKKwkJY2FzZSBPQkpFQ1RfVFJJR0dFUjoKKwkJCXJldHVybiAiVFJJ R0dFUiI7CisJCWNhc2UgT0JKRUNUX1RTQ09ORklHVVJBVElPTjoKKwkJCXJldHVybiAiVEVYVCBT RUFSQ0ggQ09ORklHVVJBVElPTiI7CisJCS8qCisJCWNhc2UgT0JKRUNUX1RTQ09ORklHX01BUFBJ Tkc6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gTUFQUElORyI7CisJCSov CisJCWNhc2UgT0JKRUNUX1RTRElDVElPTkFSWToKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggRElD VElPTkFSWSI7CisJCWNhc2UgT0JKRUNUX1RTUEFSU0VSOgorCQkJcmV0dXJuICJURVhUIFNFQVJD SCBQQVJTRVIiOworCQljYXNlIE9CSkVDVF9UU1RFTVBMQVRFOgorCQkJcmV0dXJuICJURVhUIFNF QVJDSCBURU1QTEFURSI7CisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCQlyZXR1cm4gIlRZUEUiOwor CQljYXNlIE9CSkVDVF9VU0VSX01BUFBJTkc6CisJCQlyZXR1cm4gIlVTRVIgTUFQUElORyI7CisJ CWNhc2UgT0JKRUNUX1ZJRVc6CisJCQlyZXR1cm4gIlZJRVciOworCisJCWRlZmF1bHQ6CisJCQll bG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgJWQiLCBvYmp0eXBlKTsKKwl9Cit9 CisKKy8qCisgKiBHaXZlbiBhIENvbGxlY3RlZENvbW1hbmQsIHJldHVybiBhIEpTT04gcmVwcmVz ZW50YXRpb24gb2YgaXQuCisgKgorICogVGhlIGNvbW1hbmQgaXMgZXhwYW5kZWQgZnVsbHksIHNv IHRoYXQgdGhlcmUgYXJlIG5vIGFtYmlndWl0aWVzIGV2ZW4gaW4gdGhlCisgKiBmYWNlIG9mIHNl YXJjaF9wYXRoIGNoYW5nZXMuCisgKi8KK0RhdHVtCitkZGxfZGVwYXJzZV90b19qc29uKFBHX0ZV TkNUSU9OX0FSR1MpCit7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kID0gKENvbGxlY3RlZENvbW1h bmQgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisJY2hhcgkJICAgKmNvbW1hbmQ7CisKKwljb21t YW5kID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCB0cnVlKTsKKworCWlmIChjb21tYW5k KQorCQlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChjb21tYW5kKSk7CisKKwlQR19S RVRVUk5fTlVMTCgpOworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckZ1bmN0aW9uU3RtdCAo QUxURVIgRlVOQ1RJT04pCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJz ZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50 aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Fs dGVyRnVuY3Rpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJGdW5j dGlvblN0bXQgKm5vZGUgPSAoQWx0ZXJGdW5jdGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9ialRy ZWUJICAgKmFsdGVyRnVuYzsKKwlPYmpUcmVlCSAgICpzaWduOworCUhlYXBUdXBsZQlwcm9jVHVw OworCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlMaXN0CSAgICpwYXJhbXMgPSBOSUw7CisJTGlz dAkgICAqZWxlbXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlpbnQJCQlpOworCisJLyog R2V0IHRoZSBwZ19wcm9jIHR1cGxlICovCisJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9D T0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1IiwK KwkJCSBvYmplY3RJZCk7CisJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJv Y1R1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBGVU5DVElP TiAle3NpZ25hdHVyZX1zICV7ZGVmaW5pdGlvbjogfXMKKwkgKi8KKwlhbHRlckZ1bmMgPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgRlVOQ1RJT04iLCAwKTsKKworCS8qCisJICogQUxURVIgRlVOQ1RJ T04gZG9lcyBub3QgY2hhbmdlIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlIGNhdGFsb2cKKwkgKiB0 byBnZXQgaW5wdXQgdHlwZSBPaWRzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+ cHJvbmFyZ3M7IGkrKykKKwl7CisJCU9ialRyZWUJICAgKnRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCIle3R5cGV9VCIsIDApOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgInR5cGUi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFs dWVzW2ldLCAtMSkpOworCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJfQorCisJc2lnbiA9IG5ld19vYmp0cmVlKCIiKTsKKworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHNpZ24sICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJ ZCkpOworCWFwcGVuZF9hcnJheV9vYmplY3Qoc2lnbiwgIigle2FyZ3VtZW50czosIH1zKSIsIHBh cmFtcyk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckZ1bmMsICIle3NpZ25hdHVyZX1z Iiwgc2lnbik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPmFjdGlvbnMpCisJeworCQlEZWZFbGVt CSpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2Jq ID0gTlVMTDsKKworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidm9sYXRpbGl0eSIpID09 IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKHN0clZhbChkZWZlbC0+YXJnKSwg MCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3RyaWN0IikgPT0g MCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoaW50VmFsKGRlZmVsLT5hcmcpID8K KwkJCQkJCQkJICJSRVRVUk5TIE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCQkgIkNBTExF RCBPTiBOVUxMIElOUFVUIiwgMCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZu YW1lLCAic2VjdXJpdHkiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShp bnRWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIlNFQ1VSSVRZIERFRklORVIiIDogIlNFQ1VS SVRZIElOVk9LRVIiLCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUs ICJsZWFrcHJvb2YiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShpbnRW YWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIkxFQUtQUk9PRiIgOiAiTk9UIExFQUtQUk9PRiIs IDApOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImNvc3QiKSA9PSAw KQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQ09TVCAle2Nvc3R9biIsIDEsCisJ CQkJCQkJCSAiY29zdCIsIE9ialR5cGVGbG9hdCwKKwkJCQkJCQkJIGRlZkdldE51bWVyaWMoZGVm ZWwpKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJyb3dzIikgPT0g MCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlJPV1MiLCAwKTsKKwkJCWlmIChk ZWZHZXROdW1lcmljKGRlZmVsKSA9PSAwKQorCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmos ICJwcmVzZW50IiwgZmFsc2UpOworCQkJZWxzZQorCQkJCWFwcGVuZF9mbG9hdF9vYmplY3QodG1w b2JqLCAiJXtyb3dzfW4iLAorCQkJCQkJCQkJZGVmR2V0TnVtZXJpYyhkZWZlbCkpOworCQl9CisJ CWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09IDApCisJCXsKKwkJCVZh cmlhYmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICopIGRlZmVsLT5hcmc7CisJ CQljaGFyICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0bXQpOworCisJCQl0bXBv YmogPSBkZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+bmFtZSwgdmFsdWUp OworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN1cHBvcnQiKSA9PSAw KQorCQl7CisJCQlPaWQJCQlhcmd0eXBlc1sxXTsKKworCQkJdG1wb2JqID0gbmV3X29ianRyZWUo IlNVUFBPUlQiKTsKKworCQkJQXNzZXJ0KHByb2NGb3JtLT5wcm9zdXBwb3J0KTsKKworCQkJLyoK KwkJCSAqIFdlIHNob3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3MgbmFtZSBpZiBp dCB3b3VsZG4ndCBiZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGluIHRoZSBjdXJyZW50IHNl YXJjaCBwYXRoLgorCQkJICovCisJCQlhcmd0eXBlc1swXSA9IElOVEVSTkFMT0lEOworCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtuYW1lfXMiLAorCQkJCQkJCQkgZ2VuZXJhdGVf ZnVuY3Rpb25fbmFtZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwKKwkJCQkJCQkJCQkJCQkJTklM LCBhcmd0eXBlcywKKwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEwsCisJCQkJCQkJCQkJCQkJCUVY UFJfS0lORF9OT05FKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAi cGFyYWxsZWwiKSA9PSAwKQorCQl7CisJCQljaGFyICpmbXQgPSBwc3ByaW50ZigiUEFSQUxMRUwg JXMiLCBzdHJWYWwoZGVmZWwtPmFyZykpOworCQkJdG1wb2JqID0gbmV3X29ianRyZWUoZm10KTsK KwkJfQorCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlckZ1bmMsICIle2RlZmluaXRpb246 IH1zIiwgZWxlbXMpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJuIGFs dGVyRnVuYzsKK30KKworLyoKKyAqIGRlcGFyc2UgYW4gQUxURVIgLi4uIFNFVCBTQ0hFTUEgY29t bWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck9iamVjdFNjaGVtYVN0 bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQkJICBPYmpl Y3RBZGRyZXNzIG9sZHNjaGVtYSkKK3sKKwlBbHRlck9iamVjdFNjaGVtYVN0bXQgKm5vZGUgPSAo QWx0ZXJPYmplY3RTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICphbHRlclN0 bXQ7CisJY2hhcgkgICAqZm10OworCWNoYXIJICAgKmlkZW50aXR5OworCWNoYXIJICAgKm5ld3Nj aGVtYTsKKwljaGFyCSAgICpvbGRzY2huYW1lOworCWNoYXIJICAgKmlkZW50OworCisJbmV3c2No ZW1hID0gbm9kZS0+bmV3c2NoZW1hOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJ ICogQUxURVIgJXMgJXtpZGVudGl0eX1zIFNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SQorCSAqLwor CWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAlcyIsIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9iamVj dFR5cGUpKTsKKwlhbHRlclN0bXQgPSBuZXdfb2JqdHJlZShmbXQpOworCisJLyoKKwkgKiBTaW5j ZSB0aGUgY29tbWFuZCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBmcm9tIHRoZSBwb2ludCBvZiB2 aWV3IG9mCisJICogY2F0YWxvZ3MsIGdldE9iamVjdElkZW50aXR5IHJldHVybnMgdGhlIG9iamVj dCBuYW1lIHdpdGggdGhlIGFscmVhZHkKKwkgKiBjaGFuZ2VkIHNjaGVtYS4gIFRoZSBvdXRwdXQg b2Ygb3VyIGRlcGFyc2luZyBtdXN0IHJldHVybiB0aGUgb3JpZ2luYWwKKwkgKiBzY2hlbWEgbmFt ZSBob3dldmVyLCBzbyB3ZSBjaG9wIHRoZSBzY2hlbWEgbmFtZSBvZmYgdGhlIGlkZW50aXR5IHN0 cmluZworCSAqIGFuZCB0aGVuIHByZXBlbmQgdGhlIHF1b3RlZCBzY2hlbWEgbmFtZS4KKwkgKgor CSAqIFhYWCBUaGlzIGlzIHByZXR0eSBjbHVua3kuIENhbiB3ZSBkbyBiZXR0ZXI/CisJICovCisJ aWRlbnRpdHkgPSBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpOworCW9sZHNjaG5h bWUgPSBnZXRfbmFtZXNwYWNlX25hbWUob2xkc2NoZW1hLm9iamVjdElkKTsKKwlpZiAoIW9sZHNj aG5hbWUpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzY2hlbWEgd2l0 aCBPSUQgJXUiLAorCQkJIG9sZHNjaGVtYS5vYmplY3RJZCk7CisKKwlpZGVudCA9IHBzcHJpbnRm KCIlcyVzIiwgcXVvdGVfaWRlbnRpZmllcihvbGRzY2huYW1lKSwKKwkJCQkJIGlkZW50aXR5ICsg c3RybGVuKHF1b3RlX2lkZW50aWZpZXIobmV3c2NoZW1hKSkpOworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGFsdGVyU3RtdCwgIiV7aWRlbnRpdHl9cyIsIGlkZW50KTsKKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGFsdGVyU3RtdCwgIlNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SSIsIG5ld3NjaGVtYSk7 CisKKwlyZXR1cm4gYWx0ZXJTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIEdSQU5UL1JFVk9L RSBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0dyYW50U3RtdChDb2xs ZWN0ZWRDb21tYW5kICpjbWQpCit7CisJSW50ZXJuYWxHcmFudCAqaXN0bXQ7CisJT2JqVHJlZQkg ICAqZ3JhbnRTdG10OworCWNoYXIJICAgKmZtdDsKKwljaGFyCSAgICpvYmp0eXBlOworCUxpc3QJ ICAgKmxpc3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPaWQJCQljbGFzc0lkOworCU9ialRyZWUJ ICAgKnRtcDsKKworCWlzdG10ID0gY21kLT5kLmdyYW50LmlzdG10OworCisJLyoKKwkgKiBJZiB0 aGVyZSBhcmUgbm8gb2JqZWN0cyBmcm9tICJBTEwgLi4uIElOIFNDSEVNQSIgdG8gYmUgZ3JhbnRl ZCwgdGhlbgorCSAqIHdlIG5lZWQgbm90IGRvIGFueXRoaW5nLgorCSAqLworCWlmIChpc3RtdC0+ b2JqZWN0cyA9PSBOSUwpCisJCXJldHVybiBOVUxMOworCisJc3dpdGNoIChpc3RtdC0+b2JqdHlw ZSkKKwl7CisJCWNhc2UgT0JKRUNUX0NPTFVNTjoKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCQlv Ymp0eXBlID0gIlRBQkxFIjsKKwkJCWNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CisJCQli cmVhazsKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlvYmp0eXBlID0gIlNFUVVFTkNFIjsK KwkJCWNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpF Q1RfRE9NQUlOOgorCQkJb2JqdHlwZSA9ICJET01BSU4iOworCQkJY2xhc3NJZCA9IFR5cGVSZWxh dGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZEVzoKKwkJCW9ianR5cGUgPSAiRk9S RUlHTiBEQVRBIFdSQVBQRVIiOworCQkJY2xhc3NJZCA9IEZvcmVpZ25EYXRhV3JhcHBlclJlbGF0 aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9TRVJWRVI6CisJCQlvYmp0 eXBlID0gIkZPUkVJR04gU0VSVkVSIjsKKwkJCWNsYXNzSWQgPSBGb3JlaWduU2VydmVyUmVsYXRp b25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJCW9ianR5cGUgPSAi RlVOQ1RJT04iOworCQkJY2xhc3NJZCA9IFByb2NlZHVyZVJlbGF0aW9uSWQ7CisJCQlicmVhazsK KwkJY2FzZSBPQkpFQ1RfUFJPQ0VEVVJFOgorCQkJb2JqdHlwZSA9ICJQUk9DRURVUkUiOworCQkJ Y2xhc3NJZCA9IFByb2NlZHVyZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1Rf Uk9VVElORToKKwkJCW9ianR5cGUgPSAiUk9VVElORSI7CisJCQljbGFzc0lkID0gUHJvY2VkdXJl UmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9MQU5HVUFHRToKKwkJCW9ianR5 cGUgPSAiTEFOR1VBR0UiOworCQkJY2xhc3NJZCA9IExhbmd1YWdlUmVsYXRpb25JZDsKKwkJCWJy ZWFrOworCQljYXNlIE9CSkVDVF9MQVJHRU9CSkVDVDoKKwkJCW9ianR5cGUgPSAiTEFSR0UgT0JK RUNUIjsKKwkJCWNsYXNzSWQgPSBMYXJnZU9iamVjdFJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJ Y2FzZSBPQkpFQ1RfU0NIRU1BOgorCQkJb2JqdHlwZSA9ICJTQ0hFTUEiOworCQkJY2xhc3NJZCA9 IE5hbWVzcGFjZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJ CW9ianR5cGUgPSAiVFlQRSI7CisJCQljbGFzc0lkID0gVHlwZVJlbGF0aW9uSWQ7CisJCQlicmVh azsKKwkJY2FzZSBPQkpFQ1RfREFUQUJBU0U6CisJCWNhc2UgT0JKRUNUX1RBQkxFU1BBQ0U6CisJ CQlvYmp0eXBlID0gIiI7CisJCQljbGFzc0lkID0gSW52YWxpZE9pZDsKKwkJCWVsb2coRVJST1Is ICJnbG9iYWwgb2JqZWN0cyBub3Qgc3VwcG9ydGVkIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoK KwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9CSkVDVCB2YWx1ZSAlZCIsIGlzdG10LT5vYmp0eXBl KTsKKwl9CisKKwkvKiBHUkFOVCBUTyBvciBSRVZPS0UgRlJPTSAqLworCWlmIChpc3RtdC0+aXNf Z3JhbnQpCisJCWZtdCA9IHBzcHJpbnRmKCJHUkFOVCIpOworCWVsc2UKKwkJZm10ID0gcHNwcmlu dGYoIlJFVk9LRSIpOworCisJZ3JhbnRTdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAwKTsKKwor CS8qIGJ1aWxkIGxpc3Qgb2YgcHJpdmlsZWdlcyB0byBncmFudC9yZXZva2UgKi8KKwlpZiAoaXN0 bXQtPmFsbF9wcml2cykKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTEwgUFJJVklMRUdF UyIsIDApOworCQlsaXN0ID0gbGlzdF9tYWtlMShuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9 CisJZWxzZQorCXsKKwkJbGlzdCA9IE5JTDsKKworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBB Q0xfSU5TRVJUKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIklO U0VSVCIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1NFTEVDVCkKKwkJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJTRUxFQ1QiKSk7CisJCWlmIChpc3Rt dC0+cHJpdmlsZWdlcyAmIEFDTF9VUERBVEUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf c3RyaW5nX29iamVjdCgiVVBEQVRFIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xf REVMRVRFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIkRFTEVU RSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1RSVU5DQVRFKQorCQkJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlRSVU5DQVRFIikpOworCQlpZiAoaXN0 bXQtPnByaXZpbGVnZXMgJiBBQ0xfUkVGRVJFTkNFUykKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19zdHJpbmdfb2JqZWN0KCJSRUZFUkVOQ0VTIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVn ZXMgJiBBQ0xfVFJJR0dFUikKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2Jq ZWN0KCJUUklHR0VSIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfRVhFQ1VURSkK KwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJFWEVDVVRFIikpOwor CQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVVNBR0UpCisJCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfc3RyaW5nX29iamVjdCgiVVNBR0UiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdl cyAmIEFDTF9DUkVBVEUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVj dCgiQ1JFQVRFIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfQ1JFQVRFX1RFTVAp CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiVEVNUE9SQVJZIikp OworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfQ09OTkVDVCkKKwkJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJDT05ORUNUIikpOworCisJCWlmICghaXN0bXQt PmlzX2dyYW50ICYmIGlzdG10LT5ncmFudF9vcHRpb24pCisJCQlhcHBlbmRfc3RyaW5nX29iamVj dChncmFudFN0bXQsICIle2dyYW50X29wdGlvbn1zIiwKKwkJCQkJCQkJIGlzdG10LT5ncmFudF9v cHRpb24gPyAgIkdSQU5UIE9QVElPTiBGT1IiIDogIiIpOworCisJCWlmIChpc3RtdC0+Y29sX3By aXZzICE9IE5JTCkKKwkJeworCQkJTGlzdENlbGwgICAqb2NlbGw7CisKKwkJCWZvcmVhY2gob2Nl bGwsIGlzdG10LT5jb2xfcHJpdnMpCisJCQl7CisJCQkJQWNjZXNzUHJpdiAqcHJpdiA9IGxmaXJz dChvY2VsbCk7CisJCQkJTGlzdCAgICpjb2xzID0gTklMOworCisJCQkJdG1wID0gbmV3X29ianRy ZWUoIiIpOworCQkJCWZvcmVhY2goY2VsbCwgcHJpdi0+Y29scykKKwkJCQl7CisJCQkJCVN0cmlu ZyAqY29sbmFtZSA9IGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbCk7CisKKwkJCQkJY29scyA9IGxh cHBlbmQoY29scywKKwkJCQkJCQkJICAgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKGNvbG5hbWUp KSk7CisJCQkJfQorCQkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wLCAiKCV7Y29sczosIH1zKSIs IGNvbHMpOworCisJCQkJaWYgKHByaXYtPnByaXZfbmFtZSA9PSBOVUxMKQorCQkJCQlhcHBlbmRf c3RyaW5nX29iamVjdChncmFudFN0bXQsICIle3ByaXZ9cyIsICJBTEwgUFJJVklMRUdFUyIpOwor CQkJCWVsc2UKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3JhbnRTdG10LCAiJXtwcml2fXMi LCBwcml2LT5wcml2X25hbWUpOworCisJCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisJCQl9CisJCX0KKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChncmFu dFN0bXQsICIle3ByaXZpbGVnZXM6LCB9cyBPTiIsIGxpc3QpOworCisJYXBwZW5kX3N0cmluZ19v YmplY3QoZ3JhbnRTdG10LCAiJXtvYmp0eXBlfXMiLCBvYmp0eXBlKTsKKworCS8qIHRhcmdldCBv YmplY3RzLiAgV2UgdXNlIG9iamVjdCBpZGVudGl0aWVzIGhlcmUgKi8KKwlsaXN0ID0gTklMOwor CWZvcmVhY2goY2VsbCwgaXN0bXQtPm9iamVjdHMpCisJeworCQlPaWQJCW9iamlkID0gbGZpcnN0 X29pZChjZWxsKTsKKwkJT2JqZWN0QWRkcmVzcyBhZGRyOworCisJCWFkZHIuY2xhc3NJZCA9IGNs YXNzSWQ7CisJCWFkZHIub2JqZWN0SWQgPSBvYmppZDsKKwkJYWRkci5vYmplY3RTdWJJZCA9IDA7 CisKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHl9cyIsIDEsCisJCQkJCQkJICAg ImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgICBnZXRPYmplY3RJZGVudGl0eSgm YWRkciwgZmFsc2UpKTsKKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChncmFudFN0bXQsICIle3ByaXZ0YXJn ZXQ6LCB9cyIsIGxpc3QpOworCisJaWYgKGlzdG10LT5pc19ncmFudCkKKwkJYXBwZW5kX2Zvcm1h dF9zdHJpbmcoZ3JhbnRTdG10LCAiVE8iKTsKKwllbHNlCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5n KGdyYW50U3RtdCwgIkZST00iKTsKKworCS8qIGxpc3Qgb2YgZ3JhbnRlZXMgKi8KKwlsaXN0ID0g TklMOworCWZvcmVhY2goY2VsbCwgaXN0bXQtPmdyYW50ZWVzKQorCXsKKwkJT2lkCQlncmFudGVl ID0gbGZpcnN0X29pZChjZWxsKTsKKworCQl0bXAgPSBuZXdfb2JqdHJlZV9mb3Jfcm9sZV9pZChn cmFudGVlKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChncmFudFN0bXQsICIle2dyYW50ZWVzOiwgfXMi LCBsaXN0KTsKKworCS8qIHRoZSB3b3JkaW5nIG9mIHRoZSBncmFudCBvcHRpb24gaXMgdmFyaWFi bGUgLi4uICovCisJaWYgKGlzdG10LT5pc19ncmFudCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo Z3JhbnRTdG10LCAiJXtncmFudF9vcHRpb259cyIsCisJCQkJCQkJIGlzdG10LT5ncmFudF9vcHRp b24gPyAgIldJVEggR1JBTlQgT1BUSU9OIiA6ICIiKTsKKworCWlmIChpc3RtdC0+Z3JhbnRvcl91 aWQpCisJeworCQlIZWFwVHVwbGUJcm9sdHVwOworCQljaGFyCSAgICpyb2xlbmFtZTsKKworCQly b2x0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQVVUSE9JRCwgT2JqZWN0SWRHZXREYXR1bShpc3RtdC0+ Z3JhbnRvcl91aWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJvbHR1cCkpCisJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJ CQkgZXJybXNnKCJyb2xlIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwgaXN0bXQtPmdyYW50 b3JfdWlkKSkpOworCisJCXJvbGVuYW1lID0gTmFtZVN0cigoKEZvcm1fcGdfYXV0aGlkKSBHRVRT VFJVQ1Qocm9sdHVwKSktPnJvbG5hbWUpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0 bXQsICJHUkFOVEVEIEJZICV7cm9sZW5hbWV9cyIsIHJvbGVuYW1lKTsKKwkJUmVsZWFzZVN5c0Nh Y2hlKHJvbHR1cCk7CisJfQorCisJaWYgKCFpc3RtdC0+aXNfZ3JhbnQpCisJeworCQlpZiAoaXN0 bXQtPmJlaGF2aW9yID09IERST1BfQ0FTQ0FERSkKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdy YW50U3RtdCwgIiV7Y2FzY2FkZX1zIiwgIkNBU0NBREUiKTsKKwkJZWxzZQorCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QoZ3JhbnRTdG10LCAiJXtjYXNjYWRlfXMiLCAiIik7CisJfQorCisJcmV0dXJu IGdyYW50U3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJPcGVyYXRvclN0bXQgKEFM VEVSIE9QRVJBVE9SIC4uLiBTRVQgLi4uKS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9BbHRlck9wZXJhdG9yU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlI ZWFwVHVwbGUgICAJb3ByVHVwOworCUFsdGVyT3BlcmF0b3JTdG10ICpub2RlID0gKEFsdGVyT3Bl cmF0b3JTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkgICAqYWx0ZXJvcDsKKwlGb3JtX3Bn X29wZXJhdG9yIG9wckZvcm07CisJTGlzdENlbGwJICAgKmNlbGw7CisJTGlzdAkJICAgKmxpc3Qg PSBOSUw7CisKKwlvcHJUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BFUk9JRCwgT2JqZWN0SWRHZXRE YXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcHJUdXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3Igd2l0aCBPSUQgJXUiLCBv YmplY3RJZCk7CisJb3ByRm9ybSA9IChGb3JtX3BnX29wZXJhdG9yKSBHRVRTVFJVQ1Qob3ByVHVw KTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIE9QRVJBVE9SICV7 aWRlbnRpdHl9TyAoJXtsZWZ0X3R5cGV9VCwgJXtyaWdodF90eXBlfVQpIFNFVAorCSAqICgle2Vs ZW1zOiwgfXMpCisJICovCisJYWx0ZXJvcCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBPUEVSQVRP UiAle2lkZW50aXR5fU8iLCAxLAorCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3ByRm9ybS0+b3BybmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJCSAgTmFtZVN0cihvcHJGb3JtLT5vcHJuYW1lKSkpOworCisJLyogTEVGVEFS RyAqLworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdChhbHRlcm9wLCAiKCV7bGVmdF90eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfdHlwZShvcHJGb3JtLT5vcHJsZWZ0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QoYWx0ZXJvcCwgIigle2xlZnRfdHlwZX1zIiwgIk5PTkUiKTsKKworCS8qIFJJR0hUQVJH ICovCisJQXNzZXJ0KE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGFsdGVyb3AsICIsICV7cmlnaHRfdHlwZX1UKSIsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BycmlnaHQsIC0xKSk7CisKKwlmb3JlYWNoKGNlbGwsIG5v ZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICplbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNl bGwpOworCQlPYmpUcmVlICp0bXBvYmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZWxlbS0+ZGVm bmFtZSwgInJlc3RyaWN0IikgPT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IlJFU1RSSUNUPSIsIDEsCisJCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3Ry aWN0Iik7CisJCQlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyZXN0KSkKKwkJCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ CQkgb3ByRm9ybS0+b3BycmVzdCkpOworCQkJZWxzZQorCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcG9iaiwgIiV7cHJvY2VkdXJlfXMiLCAiTk9ORSIpOworCQl9CisJCWVsc2UgaWYgKHN0cmNt cChlbGVtLT5kZWZuYW1lLCAiam9pbiIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJKT0lOPSIsIDEsCisJCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImpv aW4iKTsKKwkJCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmpvaW4pKQorCQkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJ CSBvcHJGb3JtLT5vcHJqb2luKSk7CisJCQllbHNlCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wb2JqLCAiJXtwcm9jZWR1cmV9cyIsICJOT05FIik7CisJCX0KKworCQlBc3NlcnQodG1wb2Jq KTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ fQorCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlcm9wLCAiU0VUICgle2VsZW1zOiwgfXMpIiwg bGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3ByVHVwKTsKKworCXJldHVybiBhbHRlcm9wOwor fQorCisvKgorICogRGVwYXJzZSBhbiBBTFRFUiBPUEVSQVRPUiBGQU1JTFkgQUREL0RST1AgY29t bWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck9wRmFtaWx5KENvbGxl Y3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPYmpUcmVlCSAgICphbHRlck9wRmFtOworCUFsdGVyT3BG YW1pbHlTdG10ICpzdG10ID0gKEFsdGVyT3BGYW1pbHlTdG10ICopIGNtZC0+cGFyc2V0cmVlOwor CUhlYXBUdXBsZQlmdHA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUxpc3QJICAgKmxp c3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWZ0cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlM WU9JRCwKKwkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShjbWQtPmQub3BmYW0uYWRkcmVzcy5vYmpl Y3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChmdHApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5ICV1IiwKKwkJCSBjbWQtPmQub3Bm YW0uYWRkcmVzcy5vYmplY3RJZCk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRT VFJVQ1QoZnRwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIE9Q RVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXthbW5hbWV9SSBBREQvRFJPUAorCSAq ICV7aXRlbXM6LCB9cworCSAqLworCWFsdGVyT3BGYW0gPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg T1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCAiCisJCQkJCQkJCSJVU0lORyAle2FtbmFtZX1J IiwgMiwKKwkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJ IE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSkpLAorCQkJCQkJCQkiYW1uYW1lIiwgT2JqVHlwZVN0 cmluZywgc3RtdC0+YW1uYW1lKTsKKworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBjbWQt PmQub3BmYW0ub3BlcmF0b3JzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKm9wZXIgPSBsZmlyc3Qo Y2VsbCk7CisJCU9ialRyZWUJICAgKnRtcG9iajsKKworCQkvKgorCQkgKiBWZXJib3NlIHN5bnRh eAorCQkgKgorCQkgKiBPUEVSQVRPUiAle251bX1uICV7b3BlcmF0b3J9Tygle2x0eXBlfVQsICV7 cnR5cGV9VCkgJXtwdXJwb3NlfXMKKwkJICovCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJP UEVSQVRPUiAle251bX1uIiwgMSwKKwkJCQkJCQkgIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVy LT5udW1iZXIpOworCisJCS8qIEFkZCB0aGUgb3BlcmF0b3IgbmFtZTsgdGhlIERST1AgY2FzZSBk b2Vzbid0IGhhdmUgdGhpcyAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtvcGVyYXRvcn1PIiwKKwkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkg b3Blci0+b2JqZWN0KSk7CisJCX0KKworCQkvKiBBZGQgdGhlIHR5cGVzICovCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcG9iaiwgIigle2x0eXBlfVQsIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3R5cGUob3Blci0+bGVmdHR5cGUsIC0xKSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cG9iaiwgIiV7cnR5cGV9VCkiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5y aWdodHR5cGUsIC0xKSk7CisKKwkJLyogQWRkIHRoZSBGT1IgU0VBUkNIIC8gRk9SIE9SREVSIEJZ IGNsYXVzZTsgbm90IGluIHRoZSBEUk9QIGNhc2UgKi8KKwkJaWYgKCFzdG10LT5pc0Ryb3ApCisJ CXsKKwkJCWlmIChvcGVyLT5zb3J0ZmFtaWx5ID09IEludmFsaWRPaWQpCisJCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wb2JqLCAiJXtwdXJwb3NlfXMiLCAiRk9SIFNFQVJDSCIpOworCQkJZWxz ZQorCQkJeworCQkJCU9ialRyZWUJICAgKnRtcG9iajI7CisKKwkJCQl0bXBvYmoyID0gbmV3X29i anRyZWVfVkEoIkZPUiBPUkRFUiBCWSIsIDApOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cG9iajIsICIle29wZmFtaWx5fUQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChPcGVyYXRvckZhbWlseVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIG9wZXItPnNv cnRmYW1pbHkpKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3B1cnBvc2V9 cyIsIHRtcG9iajIpOworCQkJfQorCQl9CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJZm9yZWFjaChjZWxsLCBjbWQtPmQub3BmYW0u cHJvY2VkdXJlcykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpwcm9jID0gbGZpcnN0KGNlbGwpOwor CQlPYmpUcmVlCSAgICp0bXBvYmo7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkZVTkNU SU9OICV7bnVtfW4gKCV7bHR5cGV9VCwgJXtydHlwZX1UKSIsIDMsCisJCQkJCQkJICJudW0iLCBP YmpUeXBlSW50ZWdlciwgcHJvYy0+bnVtYmVyLAorCQkJCQkJCSAibHR5cGUiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jLT5sZWZ0dHlwZSwgLTEpLAor CQkJCQkJCSAicnR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf dHlwZShwcm9jLT5yaWdodHR5cGUsIC0xKSk7CisKKwkJLyogQWRkIHRoZSBmdW5jdGlvbiBuYW1l IGFuZCBhcmcgdHlwZXM7IHRoZSBEUk9QIGNhc2UgZG9lc24ndCBoYXZlIHRoaXMgKi8KKwkJaWYg KCFzdG10LT5pc0Ryb3ApCisJCXsKKwkJCUhlYXBUdXBsZQlwcm9jVHVwOworCQkJRm9ybV9wZ19w cm9jIHByb2NGb3JtOworCQkJT2lkCQkgICAqcHJvYXJndHlwZXM7CisJCQlMaXN0CSAgICphcmds aXN0ID0gTklMOworCQkJaW50CQkJaTsKKworCQkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQ Uk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2MtPm9iamVjdCkpOworCQkJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHByb2NUdXApKQorCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBwcm9jZWR1cmUgJXUiLCBwcm9jLT5vYmplY3QpOworCQkJcHJvY0Zvcm0gPSAoRm9ybV9w Z19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJCXByb2FyZ3R5cGVzID0gcHJvY0Zvcm0t PnByb2FyZ3R5cGVzLnZhbHVlczsKKwkJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFy Z3M7IGkrKykKKwkJCXsKKwkJCQlPYmpUcmVlCSAgICphcmc7CisKKwkJCQlhcmcgPSBuZXdfb2Jq dHJlZV9mb3JfdHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJCWFyZ2xpc3QgPSBsYXBwZW5k KGFyZ2xpc3QsIG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOworCQkJfQorCisJCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBvYmosICIle2Z1bmN0aW9ufUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFt ZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKworCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1w b2JqLCAiKCIpOworCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2FyZ3R5cGVzOiwg fVQiLCBhcmdsaXN0KTsKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIikiKTsKKwor CQkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCQl9CisKKwkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJaWYgKHN0bXQtPmlzRHJvcCkK KwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJPcEZhbSwgIkRST1AiKTsKKwllbHNlCisJCWFw cGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVyT3BGYW0sICJBREQiKTsKKworCWFwcGVuZF9hcnJheV9v YmplY3QoYWx0ZXJPcEZhbSwgIiV7aXRlbXM6LCB9cyIsIGxpc3QpOworCisJUmVsZWFzZVN5c0Nh Y2hlKGZ0cCk7CisKKwlyZXR1cm4gYWx0ZXJPcEZhbTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBB bHRlck93bmVyU3RtdCAoQUxURVIgLi4uIE9XTkVSIFRPIC4uLikuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQWx0ZXJPd25lclN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2Rl ICpwYXJzZXRyZWUpCit7CisJQWx0ZXJPd25lclN0bXQgKm5vZGUgPSAoQWx0ZXJPd25lclN0bXQg KikgcGFyc2V0cmVlOworCU9ialRyZWUJCSAgICpvd25lclN0bXQ7CisJY2hhcgkJICAgKmZtdDsK KworCWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1zIE9XTkVSIFRPICUle25l d293bmVyfUkiLAorCQkJCSAgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9iamVjdFR5cGUpKTsK KworCW93bmVyU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICAiaWRlbnRp dHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSAgIGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNz LCBmYWxzZSksCisJCQkJCQkJICAgIm5ld293bmVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkg ICBnZXRfcm9sZXNwZWNfbmFtZShub2RlLT5uZXdvd25lcikpOworCisJcmV0dXJuIG93bmVyU3Rt dDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJTZXFTdG10LgorICoKKyAqIEdpdmVuIGEg c2VxdWVuY2UgT0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyU2VxU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNl dHJlZSkKK3sKKwlPYmpUcmVlCQkqYWx0ZXJTZXE7CisJT2JqVHJlZQkJKnRtcG9iajsKKwlSZWxh dGlvbgkgcmVsYXRpb247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJTGlzdAkg ICAqZWxlbXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlGb3JtX3BnX3NlcXVlbmNlIHNl cWZvcm07CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlBbHRlclNlcVN0 bXQgKmFsdGVyU2VxU3RtdCA9IChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlOworCisJLyoKKwkg KiBTZXF1ZW5jZSBmb3IgSURFTlRJVFkgQ09MVU1OIG91dHB1dCBzZXBhcmF0ZWx5KHZpYSBDUkVB VEUgVEFCTEUgb3IKKwkgKiBBTFRFUiBUQUJMRSk7IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLwor CWlmIChhbHRlclNlcVN0bXQtPmZvcl9pZGVudGl0eSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXFk YXRhID0gZ2V0X3NlcXVlbmNlX3ZhbHVlcyhvYmplY3RJZCk7CisKKwlyZWxhdGlvbiA9IHJlbGF0 aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJcmVsID0gdGFibGVfb3BlbihT ZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2VhcmNo U3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwKKwkJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShvYmpl Y3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzZXF1ZW5jZSAldSIsCisJCQkgb2JqZWN0SWQpOwor CisJc2VxZm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCisJ YWx0ZXJTZXEgPSBuZXdfb2JqdHJlZSgiQUxURVIgU0VRVUVOQ0UiKTsKKworCXRtcG9iaiA9IG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJ CQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7CisJYXBwZW5kX29i amVjdF9vYmplY3QoYWx0ZXJTZXEsICIle2lkZW50aXR5fUQiLCB0bXBvYmopOworCisJZm9yZWFj aChjZWxsLCAoKEFsdGVyU2VxU3RtdCAqKSBwYXJzZXRyZWUpLT5vcHRpb25zKQorCXsKKwkJRGVm RWxlbSAqZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqRWxlbSAqbmV3ZWxt OworCisJCWlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImNhY2hlIikgPT0gMCkKKwkJCW5ld2Vs bSA9IGRlcGFyc2VfU2VxX0NhY2hlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2Ug aWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiY3ljbGUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVw YXJzZV9TZXFfQ3ljbGUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3Ry Y21wKGVsZW0tPmRlZm5hbWUsICJpbmNyZW1lbnQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJz ZV9TZXFfSW5jcmVtZW50QnkoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAo c3RyY21wKGVsZW0tPmRlZm5hbWUsICJtaW52YWx1ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBh cnNlX1NlcV9NaW52YWx1ZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChz dHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm1heHZhbHVlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFy c2VfU2VxX01heHZhbHVlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0 cmNtcChlbGVtLT5kZWZuYW1lLCAic3RhcnQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9T ZXFfU3RhcnR3aXRoKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNt cChlbGVtLT5kZWZuYW1lLCAicmVzdGFydCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1Nl cV9SZXN0YXJ0KGFsdGVyU2VxLCBzZXFkYXRhKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRl Zm5hbWUsICJvd25lZF9ieSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9Pd25lZEJ5 KGFsdGVyU2VxLCBvYmplY3RJZCwgZmFsc2UpOworCQllbHNlCisJCQllbG9nKEVSUk9SLCAiaW52 YWxpZCBzZXF1ZW5jZSBvcHRpb24gJXMiLCBlbGVtLT5kZWZuYW1lKTsKKworCQllbGVtcyA9IGxh cHBlbmQoZWxlbXMsIG5ld2VsbSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlclNl cSwgIiV7ZGVmaW5pdGlvbjogfXMiLCBlbGVtcyk7CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJcmV0dXJuIGFsdGVyU2VxOworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclR5cGVT dG10LgorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5kIGEgcGFyc2V0cmVlIHRoYXQgbW9kaWZp ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJUeXBlU2V0U3RtdChPaWQgb2Jq ZWN0SWQsIE5vZGUgKmNtZCkKK3sKKwlBbHRlclR5cGVTdG10ICphbHRlclR5cGVTZXRTdG10ID0g KEFsdGVyVHlwZVN0bXQgKiljbWQ7CisJT2JqVHJlZQkJKmFsdGVyVHlwZTsKKwlMaXN0Q2VsbCAg ICpwbDsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlIZWFwVHVwbGUgICB0eXBUdXA7CisJRm9y bV9wZ190eXBlIHR5cEZvcm07CisKKwl0eXBUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwg T2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXBU dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9J RCAldSIsIG9iamVjdElkKTsKKwl0eXBGb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5 cFR1cCk7CisKKwlhbHRlclR5cGUgPSBuZXdfb2JqdHJlZSgiQUxURVIgVFlQRSIpOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGFsdGVyVHlwZSwgIiV7aWRlbnRpdHl9RCBTRVQiLAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkg b2JqZWN0SWQpKTsKKworCWZvcmVhY2gocGwsIGFsdGVyVHlwZVNldFN0bXQtPm9wdGlvbnMpCisJ eworCQlEZWZFbGVtICAgICpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChwbCk7CisJCU9iakVs ZW0gKm5ld2VsbTsKKworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3RvcmFnZSIpID09 IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfU3RvcmFnZShhbHRlclR5cGUsIHR5cEZvcm0p OworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAicmVjZWl2ZSIpID09IDApCisJCQluZXdl bG0gPSBkZXBhcnNlX1R5cGVfUmVjZWl2ZShhbHRlclR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3Ry Y21wKGRlZmVsLT5kZWZuYW1lLCAic2VuZCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5 cGVfU2VuZChhbHRlclR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1l LCAidHlwbW9kX2luIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9UeXBtb2RfSW4o YWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInR5cG1v ZF9vdXQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQoYWx0ZXJU eXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImFuYWx5emUiKSA9 PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX0FuYWx5emUoYWx0ZXJUeXBlLCB0eXBGb3Jt KTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN1YnNjcmlwdCIpID09IDApCisJCQlu ZXdlbG0gPSBkZXBhcnNlX1R5cGVfU3Vic2NyaXB0KGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWVs c2UKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHR5cGUgb3B0aW9uICVzIiwgZGVmZWwtPmRlZm5h bWUpOworCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3ZWxtKTsKKwl9CisKKwlhcHBlbmRf YXJyYXlfb2JqZWN0KGFsdGVyVHlwZSwgIigle2RlZmluaXRpb246IH1zKSIsIGVsZW1zKTsKKwor CVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCisJcmV0dXJuIGFsdGVyVHlwZTsKK30KKworLyoK KyAqIERlcGFyc2UgYSBDb21wb3NpdGVUeXBlU3RtdCAoQ1JFQVRFIFRZUEUgQVMpCisgKgorICog R2l2ZW4gYSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVy biBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29tcG9zaXRlVHlwZVN0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ29tcG9zaXRlVHlwZVN0bXQgKm5vZGUgPSAoQ29tcG9z aXRlVHlwZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmNvbXBvc2l0ZTsKKwlIZWFw VHVwbGUJdHlwdHVwOworCUZvcm1fcGdfdHlwZSB0eXBmb3JtOworCVJlbGF0aW9uCXR5cGVyZWw7 CisJTGlzdAkgICAqZHBjb250ZXh0OworCUxpc3QJICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCS8q IEZpbmQgdGhlIHBnX3R5cGUgZW50cnkgYW5kIG9wZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVsYXRp b24gKi8KKwl0eXB0dXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1 bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXB0dXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSAldSIsIG9iamVjdElkKTsKKwl0eXBm b3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cHR1cCk7CisJdHlwZXJlbCA9IHJlbGF0 aW9uX29wZW4odHlwZm9ybS0+dHlwcmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlkcGNvbnRl eHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHR5cGVyZWwp LAorCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxpZCh0eXBlcmVsKSk7CisKKwljb21wb3NpdGUgPSBu ZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZUEUiLCAwKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChj b21wb3NpdGUsICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCXRhYmxl ZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyh0eXBlcmVsLCBub2RlLT5jb2xkZWZsaXN0LCBk cGNvbnRleHQsCisJCQkJCQkJCQkgIGZhbHNlLAkJLyogbm90IHR5cGVkICovCisJCQkJCQkJCQkg IHRydWUpOwkJLyogY29tcG9zaXRlIHR5cGUgKi8KKworCWFwcGVuZF9hcnJheV9vYmplY3QoY29t cG9zaXRlLCAiQVMgKCV7Y29sdW1uczosIH1zKSIsIHRhYmxlZWx0cyk7CisKKwl0YWJsZV9jbG9z ZSh0eXBlcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCVJlbGVhc2VTeXNDYWNoZSh0eXB0dXApOwor CisJcmV0dXJuIGNvbXBvc2l0ZTsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVh dGVDb252ZXJzaW9uKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBs ZSAgIGNvblR1cDsKKwlSZWxhdGlvbgljb252cmVsOworCUZvcm1fcGdfY29udmVyc2lvbiBjb25G b3JtOworCU9ialRyZWUJICAgKmNjU3RtdCwgKnRtcE9iajsKKworCWNvbnZyZWwgPSB0YWJsZV9v cGVuKENvbnZlcnNpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWNvblR1cCA9IGdl dF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY29udnJlbCwgQW51bV9wZ19jb252ZXJzaW9uX29pZCwg b2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjb25UdXApKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29udmVyc2lvbiB3aXRoIE9JRCAldSIsIG9iamVj dElkKTsKKwljb25Gb3JtID0gKEZvcm1fcGdfY29udmVyc2lvbikgR0VUU1RSVUNUKGNvblR1cCk7 CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtkZWZhdWx0fXMg Q09OVkVSU0lPTiAle2lkZW50aXR5fUQgRk9SICV7c291cmNlfUwgVE8gJXtkZXN0fUwKKwkgKiBG Uk9NICV7ZnVuY3Rpb259RAorCSAqLworCWNjU3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsK KworCisJLyogQWRkIHRoZSBERUZBVUxUIGNsYXVzZSAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGNjU3RtdCwgImRlZmF1bHQiLAorCQkJCQkJIGNvbkZvcm0tPmNvbmRlZmF1bHQgPyAiREVGQVVM VCIgOiAiIik7CisKKwl0bXBPYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoY29uRm9ybS0+ Y29ubmFtZXNwYWNlLCBOYW1lU3RyKGNvbkZvcm0tPmNvbm5hbWUpKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChjY1N0bXQsICJDT05WRVJTSU9OICV7aWRlbnRpdHl9RCIsIHRtcE9iaik7CisJYXBw ZW5kX3N0cmluZ19vYmplY3QoY2NTdG10LCAiRk9SICV7c291cmNlfUwiLCAoY2hhciAqKQorCQkJ CQkJIHBnX2VuY29kaW5nX3RvX2NoYXIoY29uRm9ybS0+Y29uZm9yZW5jb2RpbmcpKTsKKwlhcHBl bmRfc3RyaW5nX29iamVjdChjY1N0bXQsICJUTyAle2Rlc3R9TCIsIChjaGFyICopCisJCQkJCQkg cGdfZW5jb2RpbmdfdG9fY2hhcihjb25Gb3JtLT5jb250b2VuY29kaW5nKSk7CisJYXBwZW5kX29i amVjdF9vYmplY3QoY2NTdG10LCAiRlJPTSAle2Z1bmN0aW9ufUQiLAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBj b25Gb3JtLT5jb25wcm9jKSk7CisKKwl0YWJsZV9jbG9zZShjb252cmVsLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJcmV0dXJuIGNjU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVFbnVt U3RtdCAoQ1JFQVRFIFRZUEUgQVMgRU5VTSkKKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCB0 aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJl c2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9DcmVhdGVFbnVtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlD cmVhdGVFbnVtU3RtdCAqbm9kZSA9IChDcmVhdGVFbnVtU3RtdCAqKSBwYXJzZXRyZWU7CisJT2Jq VHJlZQkgICAqZW51bXR5cGU7CisJTGlzdAkgICAqdmFsdWVzOworCUxpc3RDZWxsICAgKmNlbGw7 CisKKwllbnVtdHlwZSA9IG5ld19vYmp0cmVlKCJDUkVBVEUgVFlQRSIpOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGVudW10eXBlLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7 CisKKwl2YWx1ZXMgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBub2RlLT52YWxzKQorCXsKKwkJU3Ry aW5nICAgKnZhbCA9IGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbCk7CisKKwkJdmFsdWVzID0gbGFw cGVuZCh2YWx1ZXMsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbCh2YWwpKSk7CisJfQorCisJYXBw ZW5kX2FycmF5X29iamVjdChlbnVtdHlwZSwgIkFTIEVOVU0gKCV7dmFsdWVzOiwgfUwpIiwgdmFs dWVzKTsKKwlyZXR1cm4gZW51bXR5cGU7Cit9CisKKy8qCisgKiBkZXBhcnNlX0NyZWF0ZUV4dGVu c2lvblN0bXQKKyAqCQlkZXBhcnNlIGEgQ3JlYXRlRXh0ZW5zaW9uU3RtdAorICoKKyAqIEdpdmVu IGFuIGV4dGVuc2lvbiBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgor ICoKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVFeHRlbnNpb25TdG10KE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUV4dGVuc2lvblN0bXQgKm5v ZGUgPSAoQ3JlYXRlRXh0ZW5zaW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24gICAgcGdf ZXh0ZW5zaW9uOworCUhlYXBUdXBsZSAgIGV4dFR1cDsKKwlGb3JtX3BnX2V4dGVuc2lvbiBleHRG b3JtOworCU9ialRyZWUJICAgKmV4dFN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAg Kmxpc3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkg KgorCSAqIENSRUFURSBFWFRFTlNJT04gJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1JICV7 b3B0aW9uczogfXMKKwkgKi8KKworCXBnX2V4dGVuc2lvbiA9IHRhYmxlX29wZW4oRXh0ZW5zaW9u UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlleHRUdXAgPSBnZXRfY2F0YWxvZ19vYmpl Y3RfYnlfb2lkKHBnX2V4dGVuc2lvbiwgQW51bV9wZ19leHRlbnNpb25fb2lkLCBvYmplY3RJZCk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGV4dFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBleHRlbnNpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsK KwlleHRGb3JtID0gKEZvcm1fcGdfZXh0ZW5zaW9uKSBHRVRTVFJVQ1QoZXh0VHVwKTsKKworCWV4 dFN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIEVYVEVOU0lPTiIpOworCisJYXBwZW5kX3N0cmlu Z19vYmplY3QoZXh0U3RtdCwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBub2RlLT5pZl9u b3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoZXh0U3RtdCwgIiV7bmFtZX1JIiwgbm9kZS0+ZXh0bmFtZSk7CisKKwkvKiBMaXN0IG9mIG9w dGlvbnMgKi8KKwlsaXN0ID0gTklMOworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7 CisJCURlZkVsZW0gKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoc3Ry Y21wKG9wdC0+ZGVmbmFtZSwgInNjaGVtYSIpID09IDApCisJCXsKKwkJCS8qIHNraXAgdGhpcyBv bmU7IHdlIGFkZCBvbmUgdW5jb25kaXRpb25hbGx5IGJlbG93ICovCisJCQljb250aW51ZTsKKwkJ fQorCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAibmV3X3ZlcnNpb24iKSA9PSAwKQor CQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkVSU0lPTiAle3ZlcnNpb259TCIsIDIsCisJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2ZXJzaW9uIiwKKwkJCQkJCQkJICJ2ZXJz aW9uIiwgT2JqVHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21w KG9wdC0+ZGVmbmFtZSwgIm9sZF92ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJdG1wID0gbmV3X29i anRyZWVfVkEoIkZST00gJXt2ZXJzaW9ufUwiLCAyLAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZnJvbSIsCisJCQkJCQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsIGRlZkdl dFN0cmluZyhvcHQpKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCQl9CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvcHRpb24g JXMiLCBvcHQtPmRlZm5hbWUpOworCX0KKworCS8qIEFkZCB0aGUgU0NIRU1BIG9wdGlvbiAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTQ0hFTUEgJXtzY2hlbWF9SSIsCisJCQkJCQkgMiwgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAic2NoZW1hIiwKKwkJCQkJCSAic2NoZW1hIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCSBnZXRfbmFtZXNwYWNlX25hbWUoZXh0Rm9ybS0+ZXh0bmFtZXNwYWNlKSk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBk b25lICovCisJYXBwZW5kX2FycmF5X29iamVjdChleHRTdG10LCAiJXtvcHRpb25zOiB9cyIsIGxp c3QpOworCisJdGFibGVfY2xvc2UocGdfZXh0ZW5zaW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJ cmV0dXJuIGV4dFN0bXQ7Cit9CisKKy8qCisgKiBJZiBhIGNvbHVtbiBuYW1lIGlzIHNwZWNpZmll ZCwgYWRkIGFuIGVsZW1lbnQgZm9yIGl0OyBvdGhlcndpc2UgaXQncyBhCisgKiB0YWJsZS1sZXZl bCBvcHRpb24uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRmR3T3B0aW9ucyhMaXN0 ICpvcHRpb25zLCBjaGFyICpjb2xuYW1lKQoreworCU9ialRyZWUJICAgKnRtcDsKKworCWlmIChj b2xuYW1lKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUki LAorCQkJCQkJCSAxLCAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgY29sbmFtZSk7CisJZWxzZQor CQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiT1BUSU9OUyIsIDApOworCisJaWYgKG9wdGlvbnMgIT0g TklMKQorCXsKKwkJTGlzdAkgICAqb3B0b3V0ID0gTklMOworCQlMaXN0Q2VsbCAgICpjZWxsOwor CisJCWZvcmVhY2goY2VsbCwgb3B0aW9ucykKKwkJeworCQkJRGVmRWxlbQkgICAqZWxlbTsKKwkJ CU9ialRyZWUJICAgKm9wdDsKKworCQkJZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsK KworCQkJc3dpdGNoIChlbGVtLT5kZWZhY3Rpb24pCisJCQl7CisJCQkJY2FzZSBERUZFTEVNX1VO U1BFQzoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIiV7bGFiZWx9SSAle3ZhbHVlfUwiLCAy LAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lLAorCQkJ CQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBlbGVtLT5hcmcgPyBk ZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRS VUUiIDogIkZBTFNFIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgREVGRUxFTV9TRVQ6CisJCQkJ CW9wdCA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgJXtsYWJlbH1JICV7dmFsdWV9TCIsIDIsCisJCQkJ CQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcsIGVsZW0tPmRlZm5hbWUsCisJCQkJCQkJCQkJ ICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0 cmluZyhlbGVtKSA6CisJCQkJCQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAi RkFMU0UiKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBERUZFTEVNX0FERDoKKwkJCQkJb3B0ID0g bmV3X29ianRyZWVfVkEoIkFERCAle2xhYmVsfUkgJXt2YWx1ZX1MIiwgMiwKKwkJCQkJCQkJCQkg ImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ZGVmbmFtZSwKKwkJCQkJCQkJCQkgInZhbHVl IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVs ZW0pIDoKKwkJCQkJCQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIp OworCQkJCQlicmVhazsKKwkJCQljYXNlIERFRkVMRU1fRFJPUDoKKwkJCQkJb3B0ID0gbmV3X29i anRyZWVfVkEoIkRST1AgJXtsYWJlbH1JIiwgMSwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlw ZVN0cmluZywgZWxlbS0+ZGVmbmFtZSk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJ CWVsb2coRVJST1IsICJpbnZhbGlkIGRlZiBhY3Rpb24gJWQiLCBlbGVtLT5kZWZhY3Rpb24pOwor CQkJCQlvcHQgPSBOVUxMOworCQkJfQorCisJCQlvcHRvdXQgPSBsYXBwZW5kKG9wdG91dCwgbmV3 X29iamVjdF9vYmplY3Qob3B0KSk7CisJCX0KKworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwg Iigle29wdGlvbjogLH1zKSIsIG9wdG91dCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2Jq ZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gdG1wOworfQorCisvKgorICog ZGVwYXJzZV9DcmVhdGVGZHdTdG10CisgKiAgIERlcGFyc2UgYSBDcmVhdGVGZHdTdG10IChDUkVB VEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIpCisgKgorICogR2l2ZW4gYSB0cmlnZ2VyIE9JRCBhbmQg dGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsCisgKiByZXR1cm4gYW4gT2JqVHJlZSByZXBy ZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQ3JlYXRlRmR3U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlD cmVhdGVGZHdTdG10ICpub2RlID0gKENyZWF0ZUZkd1N0bXQgKikgcGFyc2V0cmVlOworCUhlYXBU dXBsZQkJZmR3VHVwOworCUZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIgZmR3Rm9ybTsKKwlS ZWxhdGlvbglyZWw7CisKKwlPYmpUcmVlCSAgICpjcmVhdGVTdG10OworCU9ialRyZWUJICAgKnRt cDsKKworCXJlbCA9IHRhYmxlX29wZW4oRm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZCwgUm93 RXhjbHVzaXZlTG9jayk7CisKKwlmZHdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoRk9SRUlHTkRBVEFX UkFQUEVST0lELAorCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKGZkd1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciBmb3JlaWduLWRhdGEgd3JhcHBlciAldSIsIG9iamVjdElkKTsKKworCWZkd0Zvcm0g PSAoRm9ybV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlcikgR0VUU1RSVUNUKGZkd1R1cCk7CisKKwlj cmVhdGVTdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUiAl e2lkZW50aXR5fUkiLCAxLAorCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBOYW1l U3RyKGZkd0Zvcm0tPmZkd25hbWUpKTsKKworCS8qIGFkZCBIQU5ETEVSIGNsYXVzZSAqLworCWlm IChmZHdGb3JtLT5mZHdoYW5kbGVyID09IEludmFsaWRPaWQpCisJCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJOTyBIQU5ETEVSIiwgMCk7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEo IkhBTkRMRVIgJXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJICJoYW5kbGVyIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHdoYW5kbGVyKSk7CisJfQorCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2hhbmRsZXJ9cyIsIHRtcCk7CisKKwkvKiBh ZGQgVkFMSURBVE9SIGNsYXVzZSAqLworCWlmIChmZHdGb3JtLT5mZHd2YWxpZGF0b3IgPT0gSW52 YWxpZE9pZCkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk5PIFZBTElEQVRPUiIsIDApOworCWVs c2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFUT1IgJXtwcm9jZWR1cmV9RCIs IDEsCisJCQkJCQkJICJ2YWxpZGF0b3IiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ IGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVh dGVTdG10LCAiJXt2YWxpZGF0b3J9cyIsIHRtcCk7CisKKwkvKiBhZGQgYW4gT1BUSU9OUyBjbGF1 c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2dlbmVy aWNfb3B0aW9uc31zIiwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0aW9ucywg TlVMTCkpOworCisJUmVsZWFzZVN5c0NhY2hlKGZkd1R1cCk7CisJdGFibGVfY2xvc2UocmVsLCBS b3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVTdG10OworfQorCisvKgorICogZGVw YXJzZV9BbHRlckZkd1N0bXQKKyAqICBEZXBhcnNlIGFuIEFsdGVyRmR3U3RtdCAoQUxURVIgRk9S RUlHTiBEQVRBIFdSQVBQRVIpCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBw YXJzZXRyZWUgdGhhdCBjcmVhdGUgaXQsIHJldHVybiB0aGUKKyAqIEpTT04gYmxvYiByZXByZXNl bnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJGZHdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRmR3 U3RtdCAqbm9kZSA9IChBbHRlckZkd1N0bXQgKikgcGFyc2V0cmVlOworCUhlYXBUdXBsZQkJZmR3 VHVwOworCUZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIgZmR3Rm9ybTsKKwlSZWxhdGlvbgly ZWw7CisJT2JqVHJlZQkgICAqYWx0ZXJTdG10OworCUxpc3QJICAgKmZkd19vcHRpb25zID0gTklM OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlyZWwgPSB0YWJsZV9vcGVuKEZvcmVpZ25EYXRhV3Jh cHBlclJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJZmR3VHVwID0gU2VhcmNoU3lz Q2FjaGUxKEZPUkVJR05EQVRBV1JBUFBFUk9JRCwKKwkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShv YmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChmZHdUdXApKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZm9yZWlnbi1kYXRhIHdyYXBwZXIgJXUiLCBvYmpl Y3RJZCk7CisKKwlmZHdGb3JtID0gKEZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIpIEdFVFNU UlVDVChmZHdUdXApOworCisJYWx0ZXJTdG10ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIEZPUkVJ R04gREFUQSBXUkFQUEVSICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkJICAgImlkZW50aXR5Iiwg T2JqVHlwZVN0cmluZywgTmFtZVN0cihmZHdGb3JtLT5mZHduYW1lKSk7CisKKwkvKgorCSAqIEl0 ZXJhdGUgdGhyb3VnaCBvcHRpb25zLCB0byBzZWUgd2hhdCBjaGFuZ2VkLCBidXQgdXNlIGNhdGFs b2cgYXMgYmFzaXMKKwkgKiBmb3IgbmV3IHZhbHVlcy4KKwkgKi8KKwlmb3JlYWNoKGNlbGwsIG5v ZGUtPmZ1bmNfb3B0aW9ucykKKwl7CisJCURlZkVsZW0JICAgKmVsZW07CisJCU9ialRyZWUJICAg KnRtcDsKKworCQllbGVtID0gbGZpcnN0KGNlbGwpOworCisJCWlmIChwZ19zdHJjYXNlY21wKGVs ZW0tPmRlZm5hbWUsICJoYW5kbGVyIikgPT0gMCkKKwkJeworCQkJLyogYWRkIEhBTkRMRVIgY2xh dXNlICovCisJCQlpZiAoZmR3Rm9ybS0+ZmR3aGFuZGxlciA9PSBJbnZhbGlkT2lkKQorCQkJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJOTyBIQU5ETEVSIiwgMCk7CisJCQllbHNlCisJCQl7CisJCQkJ dG1wID0gbmV3X29ianRyZWVfVkEoIkhBTkRMRVIgJXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJ CQkgInByb2NlZHVyZSIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIGZkd0Zvcm0tPmZkd2hhbmRsZXIp KTsKKwkJCX0KKwkJCWZkd19vcHRpb25zID0gbGFwcGVuZChmZHdfb3B0aW9ucywgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChlbGVtLT5kZWZu YW1lLCAidmFsaWRhdG9yIikgPT0gMCkKKwkJeworCQkJLyogYWRkIFZBTElEQVRPUiBjbGF1c2Ug Ki8KKwkJCWlmIChmZHdGb3JtLT5mZHd2YWxpZGF0b3IgPT0gSW52YWxpZE9pZCkKKwkJCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiTk8gVkFMSURBVE9SIiwgMCk7CisJCQllbHNlCisJCQl7CisJCQkJ dG1wID0gbmV3X29ianRyZWVfVkEoIlZBTElEQVRPUiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJ CQkJCSAicHJvY2VkdXJlIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3dmFsaWRh dG9yKSk7CisJCQl9CisJCQlmZHdfb3B0aW9ucyA9IGxhcHBlbmQoZmR3X29wdGlvbnMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJfQorCisJLyogQWRkIEhBTkRMRVIvVkFMSURBVE9S IGlmIHNwZWNpZmllZCAqLworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJTdG10LCAiJXtmZHdf b3B0aW9uczogfXMiLCBmZHdfb3B0aW9ucyk7CisKKworCS8qIGFkZCBhbiBPUFRJT05TIGNsYXVz ZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJTdG10LCAiJXtnZW5lcmlj X29wdGlvbnN9RCIsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5V TEwpKTsKKworCVJlbGVhc2VTeXNDYWNoZShmZHdUdXApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93 RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gYWx0ZXJTdG10OworfQorCisvKgorICogRGVwYXJz ZSBhIENSRUFURSBUWVBFIEFTIFJBTkdFIHN0YXRlbWVudAorICoKKyAqIEdpdmVuIGEgdHlwZSBP SUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQor ICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0NyZWF0ZVJhbmdlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJl ZSkKK3sKKwlPYmpUcmVlCSAgICpyYW5nZTsKKwlPYmpUcmVlCSAgICp0bXA7CisJTGlzdAkgICAq ZGVmaW5pdGlvbiA9IE5JTDsKKwlSZWxhdGlvbglwZ19yYW5nZTsKKwlIZWFwVHVwbGUJcmFuZ2VU dXA7CisJRm9ybV9wZ19yYW5nZSByYW5nZUZvcm07CisJU2NhbktleURhdGEga2V5WzFdOworCVN5 c1NjYW5EZXNjIHNjYW47CisKKwlwZ19yYW5nZSA9IHRhYmxlX29wZW4oUmFuZ2VSZWxhdGlvbklk LCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51bV9w Z19yYW5nZV9ybmd0eXBpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJ CQkJT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2lu c2NhbihwZ19yYW5nZSwgUmFuZ2VUeXBpZEluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAx LCBrZXkpOworCisJcmFuZ2VUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChyYW5nZVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciByYW5nZSB3aXRoIHR5cGUgb2lkICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlyYW5n ZUZvcm0gPSAoRm9ybV9wZ19yYW5nZSkgR0VUU1RSVUNUKHJhbmdlVHVwKTsKKworCXJhbmdlID0g bmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJdG1wID0gbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLCBvYmplY3RJZCk7CisJYXBwZW5kX29iamVjdF9v YmplY3QocmFuZ2UsICIle2lkZW50aXR5fUQgQVMgUkFOR0UiLCB0bXApOworCisJLyogU1VCVFlQ RSAqLworCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwK KwkJCQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdzdWJ0eXBlKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiU1VCVFlQRSA9ICV7dHlwZX1EIiwKKwkJCQkJCSAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAic3VidHlwZSIsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LCB0bXAp OworCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogU1VCVFlQRV9PUENMQVNTICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3Jt LT5ybmdzdWJvcGMpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9w ZXJhdG9yQ2xhc3NSZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdzdWJvcGMp OworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRV9PUENMQVNTID0gJXtvcGNsYXNzfUQi LAorCQkJCQkJCSAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm9wY2xhc3Mi LAorCQkJCQkJCSAib3BjbGFzcyIsIE9ialR5cGVPYmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24g PSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8q IENPTExBVElPTiAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nY29sbGF0aW9uKSkK Kwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlv bklkLAorCQkJCQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdjb2xsYXRpb24pOworCQl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiQ09MTEFUSU9OID0gJXtjb2xsYXRpb259RCIsCisJCQkJCQkJIDIsCisJCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29sbGF0aW9uIiwKKwkJCQkJCQkgImNvbGxh dGlvbiIsIE9ialR5cGVPYmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmlu aXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIENBTk9OSUNBTCAqLwor CWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nY2Fub25pY2FsKSkKKwl7CisJCXRtcCA9IG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CSAgcmFuZ2VGb3JtLT5ybmdjYW5vbmljYWwpOworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FO T05JQ0FMID0gJXtjYW5vbmljYWx9RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiY2Fub25pY2FsIiwKKwkJCQkJCQkgImNhbm9uaWNhbCIsIE9ialR5cGVP YmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIFNVQlRZUEVfRElGRiAqLworCWlmIChPaWRJc1Zh bGlkKHJhbmdlRm9ybS0+cm5nc3ViZGlmZikpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+ cm5nc3ViZGlmZik7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFX0RJRkYgPSAle3N1 YnR5cGVfZGlmZn1EIiwKKwkJCQkJCQkgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJzdWJ0eXBlX2RpZmYiLAorCQkJCQkJCSAic3VidHlwZV9kaWZmIiwgT2JqVHlwZU9iamVj dCwgdG1wKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChyYW5nZSwgIigle2RlZmlu aXRpb246LCB9cykiLCBkZWZpbml0aW9uKTsKKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJ dGFibGVfY2xvc2UocGdfcmFuZ2UsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHJhbmdl OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckVudW1TdG10LgorICoKKyAqIEdpdmVuIGEg dHlwZSBPSUQgYW5kIGEgcGFyc2V0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQWx0ZXJFbnVtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlBbHRlckVudW1TdG10ICpub2RlID0gKEFsdGVyRW51bVN0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUJICAgKmFsdGVyRW51bTsKKworCWFsdGVyRW51bSA9CW5ld19vYmp0cmVlX1ZBKCJB TFRFUiBUWVBFIiwgMCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJFbnVtLCAiJXtpZGVu dGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwlpZiAoIW5vZGUtPm9sZFZhbCkKKwl7 CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVyRW51bSwgIkFERCBWQUxVRSIpOworCQlhcHBl bmRfc3RyaW5nX29iamVjdChhbHRlckVudW0sICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkJ bm9kZS0+c2tpcElmTmV3VmFsRXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIiV7dmFsdWV9TCIsIG5vZGUtPm5ld1ZhbCk7 CisKKwkJaWYgKG5vZGUtPm5ld1ZhbE5laWdoYm9yKQorCQl7CisJCQlhcHBlbmRfc3RyaW5nX29i amVjdChhbHRlckVudW0sICIle2FmdGVyX29yX2JlZm9yZX1zIiwKKwkJCQkJCQkJbm9kZS0+bmV3 VmFsSXNBZnRlciA/ICJBRlRFUiIgOiAiQkVGT1JFIik7CisJCQlhcHBlbmRfc3RyaW5nX29iamVj dChhbHRlckVudW0sICIle25laWdoYm91cn1MIiwgbm9kZS0+bmV3VmFsTmVpZ2hib3IpOworCQl9 CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIlJFTkFN RSBWQUxVRSAle3ZhbHVlfUwgVE8iLAorCQkJCQkJCSBub2RlLT5vbGRWYWwpOworCQlhcHBlbmRf c3RyaW5nX29iamVjdChhbHRlckVudW0sICIle25ld3ZhbHVlfUwiLAorCQkJCQkJCSBub2RlLT5u ZXdWYWwpOworCX0KKworCXJldHVybiBhbHRlckVudW07Cit9CisKKy8qCisgKiBEZXBhcnNlIEFM VEVSIEVYVEVOU0lPTiAuLiBVUERBVEUgVE8gVkVSU0lPTgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJl ZSkKK3sKKwlBbHRlckV4dGVuc2lvblN0bXQgKm5vZGUgPSAoQWx0ZXJFeHRlbnNpb25TdG10ICop IHBhcnNldHJlZTsKKwlSZWxhdGlvbiAgICBwZ19leHRlbnNpb247CisJSGVhcFR1cGxlICAgZXh0 VHVwOworCUZvcm1fcGdfZXh0ZW5zaW9uIGV4dEZvcm07CisJT2JqVHJlZQkgICAqc3RtdDsKKwlP YmpUcmVlCSAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxs OworCisJcGdfZXh0ZW5zaW9uID0gdGFibGVfb3BlbihFeHRlbnNpb25SZWxhdGlvbklkLCBBY2Nl c3NTaGFyZUxvY2spOworCWV4dFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfZXh0 ZW5zaW9uLCBBbnVtX3BnX2V4dGVuc2lvbl9vaWQsICBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKGV4dFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBleHRlbnNpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlleHRGb3JtID0gKEZv cm1fcGdfZXh0ZW5zaW9uKSBHRVRTVFJVQ1QoZXh0VHVwKTsKKworCXN0bXQgPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgRVhURU5TSU9OICV7aWRlbnRpdHl9RCBVUERBVEUiLCAxLAorCQkJCQkJICAi aWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUoZXh0Rm9ybS0+ZXh0bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihleHRGb3Jt LT5leHRuYW1lKSkpOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVm RWxlbSAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChzdHJjbXAob3B0 LT5kZWZuYW1lLCAibmV3X3ZlcnNpb24iKSA9PSAwKQorCQl7CisJCQl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiVE8gJXt2ZXJzaW9ufUwiLCAyLAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAidmVyc2lvbiIsCisJCQkJCQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsIGRlZkdldFN0 cmluZyhvcHQpKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCQl9CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvcHRpb24gJXMi LCBvcHQtPmRlZm5hbWUpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIiV7b3B0 aW9uczogfXMiLCBsaXN0KTsKKworCXRhYmxlX2Nsb3NlKHBnX2V4dGVuc2lvbiwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXJldHVybiBzdG10OworfQorCisvKgorICogQUxURVIgRVhURU5TSU9OIGV4 dCBBREQvRFJPUCBvYmplY3QKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckV4 dGVuc2lvbkNvbnRlbnRzU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJ CQkJICAgT2JqZWN0QWRkcmVzcyBvYmplY3RBZGRyZXNzKQoreworCUFsdGVyRXh0ZW5zaW9uQ29u dGVudHNTdG10ICpub2RlID0gKEFsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10ICopIHBhcnNldHJl ZTsKKwlPYmpUcmVlCSAgICpzdG10OworCWNoYXIJICAgKmZtdDsKKworCUFzc2VydChub2RlLT5h Y3Rpb24gPT0gKzEgfHwgbm9kZS0+YWN0aW9uID09IC0xKTsKKworCWZtdCA9IHBzcHJpbnRmKCJB TFRFUiBFWFRFTlNJT04gJSV7ZXh0aWRlbnRpdHl9SSAlcyAlcyAlJXtvYmppZGVudGl0eX1zIiwK KwkJCQkgICBub2RlLT5hY3Rpb24gPT0gKzEgPyAiQUREIiA6ICJEUk9QIiwKKwkJCQkgICBzdHJp bmdpZnlfb2JqdHlwZShub2RlLT5vYmp0eXBlKSk7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEo Zm10LCAyLCAiZXh0aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBub2RlLT5leHRu YW1lLAorCQkJCQkJICAib2JqaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBnZXRP YmplY3RJZGVudGl0eSgmb2JqZWN0QWRkcmVzcywgZmFsc2UpKTsKKworCXJldHVybiBzdG10Owor fQorLyoKKyAqIERlcGFyc2UgYW4gQ3JlYXRlQ2FzdFN0bXQuCisgKgorICogR2l2ZW4gYSBzZXF1 ZW5jZSBPSUQgYW5kIGEgcGFyc2V0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlQ2FzdFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJQ3JlYXRlQ2FzdFN0bXQgKm5vZGUgPSAoQ3JlYXRlQ2FzdFN0bXQgKikgcGFy c2V0cmVlOworCVJlbGF0aW9uCWNhc3RyZWw7CisJSGVhcFR1cGxlCWNhc3RUdXA7CisJRm9ybV9w Z19jYXN0IGNhc3RGb3JtOworCU9ialRyZWUJICAgKmNyZWF0ZUNhc3Q7CisJY2hhcgkgICAqY29u dGV4dDsKKworCWNhc3RyZWwgPSB0YWJsZV9vcGVuKENhc3RSZWxhdGlvbklkLCBBY2Nlc3NTaGFy ZUxvY2spOworCWNhc3RUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhc3RyZWwsIEFu dW1fcGdfY2FzdF9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY2FzdFR1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjYXN0IHdpdGggT0lE ICV1Iiwgb2JqZWN0SWQpOworCWNhc3RGb3JtID0gKEZvcm1fcGdfY2FzdCkgR0VUU1RSVUNUKGNh c3RUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIENBU1Qg KCV7c291cmNldHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSAle21lY2hhbmlzbX1zICV7Y29udGV4 dH1zCisJICovCisJY3JlYXRlQ2FzdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgQ0FTVCAoJXtz b3VyY2V0eXBlfVQgQVMgJXt0YXJnZXR0eXBlfVQpIiwKKwkJCQkJCQkJMiwgInNvdXJjZXR5cGUi LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShjYXN0Rm9ybS0+ Y2FzdHNvdXJjZSwgLTEpLAorCQkJCQkJCQkidGFyZ2V0dHlwZSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0dGFyZ2V0LCAtMSkpOwor CisJaWYgKG5vZGUtPmlub3V0KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVDYXN0LCAi JXttZWNoYW5pc219cyIsICJXSVRIIElOT1VUIik7CisJZWxzZSBpZiAobm9kZS0+ZnVuYyA9PSBO VUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVDYXN0LCAiJXttZWNoYW5pc219cyIs ICJXSVRIT1VUIEZVTkNUSU9OIik7CisJZWxzZQorCXsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOwor CQlTdHJpbmdJbmZvRGF0YSBmdW5jOworCQlIZWFwVHVwbGUJZnVuY1R1cDsKKwkJRm9ybV9wZ19w cm9jIGZ1bmNGb3JtOworCQlpbnQJCQlpOworCisJCWZ1bmNUdXAgPSBTZWFyY2hTeXNDYWNoZTEo UFJPQ09JRCwgY2FzdEZvcm0tPmNhc3RmdW5jKTsKKwkJZnVuY0Zvcm0gPSAoRm9ybV9wZ19wcm9j KSBHRVRTVFJVQ1QoZnVuY1R1cCk7CisKKwkJaW5pdFN0cmluZ0luZm8oJmZ1bmMpOworCQlhcHBl bmRTdHJpbmdJbmZvKCZmdW5jLCAiJXMoIiwKKwkJCQkJCXF1b3RlX3F1YWxpZmllZF9pZGVudGlm aWVyKGdldF9uYW1lc3BhY2VfbmFtZShmdW5jRm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJCQkJCQkJ CQkJCSAgIE5hbWVTdHIoZnVuY0Zvcm0tPnByb25hbWUpKSk7CisJCWZvciAoaSA9IDA7IGkgPCBm dW5jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZ1bmMs CisJCQkJCQkJCSAgIGZvcm1hdF90eXBlX2JlX3F1YWxpZmllZChmdW5jRm9ybS0+cHJvYXJndHlw ZXMudmFsdWVzW2ldKSk7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZmdW5jLCAnKScpOworCisJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJXSVRIIEZVTkNUSU9OICV7Y2FzdGZ1bmN0aW9ufXMi LCAxLAorCQkJCQkJCSAiY2FzdGZ1bmN0aW9uIiwgT2JqVHlwZVN0cmluZywgZnVuYy5kYXRhKTsK KwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlQ2FzdCwgIiV7bWVjaGFuaXNtfXMiLCB0bXBv YmopOworCisJCVJlbGVhc2VTeXNDYWNoZShmdW5jVHVwKTsKKwl9CisKKwlzd2l0Y2ggKG5vZGUt PmNvbnRleHQpCisJeworCQljYXNlIENPRVJDSU9OX0lNUExJQ0lUOgorCQkJY29udGV4dCA9ICJB UyBJTVBMSUNJVCI7CisJCQlicmVhazsKKwkJY2FzZSBDT0VSQ0lPTl9BU1NJR05NRU5UOgorCQkJ Y29udGV4dCA9ICJBUyBBU1NJR05NRU5UIjsKKwkJCWJyZWFrOworCQljYXNlIENPRVJDSU9OX0VY UExJQ0lUOgorCQkJY29udGV4dCA9ICIiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9n KEVSUk9SLCAiaW52YWxpZCBjb2VyY2lvbiBjb2RlICVjIiwgbm9kZS0+Y29udGV4dCk7CisJCQly ZXR1cm4gTlVMTDsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworCX0KKwlhcHBlbmRfc3RyaW5n X29iamVjdChjcmVhdGVDYXN0LCAiJXtjb250ZXh0fXMiLCBjb250ZXh0KTsKKworCXRhYmxlX2Ns b3NlKGNhc3RyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlQ2FzdDsKK30K KworLyoKKyAqIERlcGFyc2UgYWxsIHRoZSBjb2xsZWN0ZWQgc3ViY29tbWFuZHMgYW5kIHJldHVy biBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUKKyAqIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJUYWJsZVN0bXQoQ29sbGVjdGVkQ29tbWFuZCAq Y21kKQoreworCU9ialRyZWUJICAgKmFsdGVyVGFibGVTdG10OworCU9ialRyZWUJICAgKnRtcG9i ajsKKwlPYmpUcmVlCSAgICp0bXBvYmoyOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlSZWxhdGlv bglyZWw7CisJTGlzdAkgICAqc3ViY21kcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWNo YXIJICAgKmZtdHN0cjsKKwljb25zdCBjaGFyICpyZWx0eXBlOworCWJvb2wJCWlzdHlwZSA9IGZh bHNlOworCUxpc3QJICAgKmV4cHJzID0gTklMOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1Rf QWx0ZXJUYWJsZSk7CisKKwlyZWwgPSByZWxhdGlvbl9vcGVuKGNtZC0+ZC5hbHRlclRhYmxlLm9i amVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9m b3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCWNtZC0+ZC5hbHRlclRh YmxlLm9iamVjdElkKTsKKworCXN3aXRjaCAocmVsLT5yZF9yZWwtPnJlbGtpbmQpCisJeworCQlj YXNlIFJFTEtJTkRfUkVMQVRJT046CisJCWNhc2UgUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRToK KwkJCXJlbHR5cGUgPSAiVEFCTEUiOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9JTkRFWDoK KwkJY2FzZSBSRUxLSU5EX1BBUlRJVElPTkVEX0lOREVYOgorCQkJcmVsdHlwZSA9ICJJTkRFWCI7 CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX1ZJRVc6CisJCQlyZWx0eXBlID0gIlZJRVciOwor CQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9DT01QT1NJVEVfVFlQRToKKwkJCXJlbHR5cGUgPSAi VFlQRSI7CisJCQlpc3R5cGUgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9GT1JF SUdOX1RBQkxFOgorCQkJcmVsdHlwZSA9ICJGT1JFSUdOIFRBQkxFIjsKKwkJCWJyZWFrOworCisJ CS8qIFRPRE8gc3VwcG9ydCBmb3IgcGFydGl0aW9uZWQgdGFibGUgKi8KKworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcmVsa2luZCAlZCIsIHJlbC0+cmRfcmVsLT5yZWxr aW5kKTsKKwl9CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiByZWx0 eXBlICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9cworCSAqLworCWZtdHN0ciA9IHBzcHJpbnRm KCJBTFRFUiAlcyIsIHJlbHR5cGUpOworCWFsdGVyVGFibGVTdG10ID0gbmV3X29ianRyZWUoZm10 c3RyKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWwtPnJkX3JlbC0+ cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclRhYmxlU3RtdCwgIiV7aWRlbnRpdHl9RCIsIHRt cG9iaik7CisKKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMpCisJewor CQlDb2xsZWN0ZWRBVFN1YmNtZCAqc3ViID0gKENvbGxlY3RlZEFUU3ViY21kICopIGxmaXJzdChj ZWxsKTsKKwkJQWx0ZXJUYWJsZUNtZAkqc3ViY21kID0gKEFsdGVyVGFibGVDbWQgKikgc3ViLT5w YXJzZXRyZWU7CisJCU9ialRyZWUJICAgKnRyZWU7CisKKwkJQXNzZXJ0KElzQShzdWJjbWQsIEFs dGVyVGFibGVDbWQpKTsKKworCQlzd2l0Y2ggKHN1YmNtZC0+c3VidHlwZSkKKwkJeworCQkJY2Fz ZSBBVF9BZGRDb2x1bW46CisJCQljYXNlIEFUX0FkZENvbHVtblJlY3Vyc2U6CisJCQkJLyogWFhY IG5lZWQgdG8gc2V0IHRoZSAicmVjdXJzZSIgYml0IHNvbWV3aGVyZT8gKi8KKwkJCQlBc3NlcnQo SXNBKHN1YmNtZC0+ZGVmLCBDb2x1bW5EZWYpKTsKKwkJCQl0cmVlID0gZGVwYXJzZV9Db2x1bW5E ZWYocmVsLCBkcGNvbnRleHQsIGZhbHNlLAorCQkJCQkJCQkJCSAoQ29sdW1uRGVmICopIHN1YmNt ZC0+ZGVmLCB0cnVlLCAmZXhwcnMpOworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBREQgJXMgJSV7 ZGVmaW5pdGlvbn1zIiwKKwkJCQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xVTU4i KTsKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbHVtbiIsCisJCQkJCQkJCQkgImRlZmluaXRpb24i LCBPYmpUeXBlT2JqZWN0LCB0cmVlKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJ bmRleENvbnN0cmFpbnQ6CisJCQkJeworCQkJCQlJbmRleFN0bXQgICppc3RtdDsKKwkJCQkJUmVs YXRpb24JaWR4OworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7 CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW5kZXhTdG10KSk7CisJCQkJCWlzdG10 ID0gKEluZGV4U3RtdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQlBc3NlcnQoaXN0bXQtPmlzY29u c3RyYWludCAmJiBpc3RtdC0+dW5pcXVlKTsKKworCQkJCQlpZHggPSByZWxhdGlvbl9vcGVuKGlz dG10LT5pbmRleE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJCQkvKgorCQkJCQkgKiBWZXJi b3NlIHN5bnRheAorCQkJCQkgKgorCQkJCQkgKiBBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2Nv bnN0cmFpbnRfdHlwZX1zIFVTSU5HIElOREVYCisJCQkJCSAqICVpbmRleF9uYW1lfUkgJXtkZWZl cnJhYmxlfXMgJXtpbml0X2RlZmVycmVkfXMKKwkJCQkJICovCisJCQkJCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSIsIDIsCisJCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IHVzaW5nIGluZGV4IiwKKwkJCQkJCQkJ CQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCkp OworCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7Y29uc3RyYWludF90eXBl fXMiLCBpc3RtdC0+ZGVmZXJyYWJsZSA/CisJCQkJCQkJCQkJICJERUZFUlJBQkxFIiA6ICJOT1Qg REVGRVJSQUJMRSIpOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICJVU0lORyBJ TkRFWCAle2luZGV4X25hbWV9SSIsCisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KGlkeCkpOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2RlZmVycmFibGV9 cyIsIGlzdG10LT5kZWZlcnJhYmxlID8KKwkJCQkJCQkJCQkgIkRFRkVSUkFCTEUiIDogIk5PVCBE RUZFUlJBQkxFIik7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aW5pdF9k ZWZlcnJlZH1zIiwgaXN0bXQtPmluaXRkZWZlcnJlZCA/CisJCQkJCQkJCQkJICJJTklUSUFMTFkg REVGRVJSRUQiIDogIklOSVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCQkJCQlyZWxhdGlv bl9jbG9zZShpZHgsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX1JlQWRkSW5kZXg6CisJCQljYXNlIEFUX1JlQWRkQ29uc3RyYWludDoKKwkJCWNhc2Ug QVRfUmVBZGRDb21tZW50OgorCQkJY2FzZSBBVF9SZXBsYWNlUmVsT3B0aW9uczoKKwkJCQkvKiBT dWJ0eXBlcyB1c2VkIGZvciBpbnRlcm5hbCBvcGVyYXRpb25zOyBub3RoaW5nIHRvIGRvIGhlcmUg Ki8KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRDb2x1bW5Ub1ZpZXc6CisJCQkJLyogQ1JF QVRFIE9SIFJFUExBQ0UgVklFVyAtLSBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9Db2x1bW5EZWZhdWx0OgorCQkJCWlmIChzdWJjbWQtPmRlZiA9PSBOVUxM KQorCQkJCXsKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2Nv bHVtbn1JIERST1AgREVGQVVMVCIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImRyb3AgZGVmYXVsdCIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlMaXN0CSAgICpkcGNv bnRleHQ7CisJCQkJCUhlYXBUdXBsZQlhdHRydHVwOworCQkJCQlBdHRyTnVtYmVyCWF0dG5vOwor CisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBT RVQgREVGQVVMVCIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBk ZWZhdWx0IiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFt ZSk7CisKKwkJCQkJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJ CQkJCWF0dHJ0dXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUoUmVsYXRpb25HZXRSZWxpZChyZWwp LCBzdWJjbWQtPm5hbWUpOworCQkJCQlhdHRubyA9ICgoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNU UlVDVChhdHRydHVwKSktPmF0dG51bTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2Jq LCAiJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQo cmVsLCBhdHRubywgZHBjb250ZXh0LCBOVUxMKSk7CisJCQkJCVJlbGVhc2VTeXNDYWNoZShhdHRy dHVwKTsKKwkJCQl9CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wTm90TnVsbDoK KwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJP UCBOT1QgTlVMTCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBu b3QgbnVsbCIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFt ZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0Tm90TnVsbDoKKwkJCQl0bXBvYmog PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIE5PVCBOVUxMIiwg MiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbm90IG51bGwiLAorCQkJ CQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0Ryb3BFeHByZXNzaW9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIEVYUFJFU1NJT04iLCAyLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgZXhwcmVzc2lvbiIsCisJCQkJCQkJ CQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJCQkJIHN1YmNt ZC0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiOiAiIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfU2V0U3RhdGlzdGljczoKKwkJCQl7CisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYs IEludGVnZXIpKTsKKwkJCQkJaWYgKHN1YmNtZC0+bmFtZSkKKwkJCQkJCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RBVElTVElDUyAle3N0YXRp c3RpY3N9biIsCisJCQkJCQkJCQkJCSAzLAorCQkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAic2V0IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkJICJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVn ZXIsCisJCQkJCQkJCQkJCSBpbnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJ ZWxzZQorCQkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVt bn1uIFNFVCBTVEFUSVNUSUNTICV7c3RhdGlzdGljc31uIiwKKwkJCQkJCQkJCQkJIDMsCisJCQkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RhdGlzdGljcyIsCisJCQkJCQkJ CQkJCSAiY29sdW1uIiwgT2JqVHlwZUludGVnZXIsIHN1YmNtZC0+bnVtLAorCQkJCQkJCQkJCQkg InN0YXRpc3RpY3MiLCBPYmpUeXBlSW50ZWdlciwKKwkJCQkJCQkJCQkJIGludFZhbCgoSW50ZWdl ciAqKSBzdWJjbWQtPmRlZikpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf U2V0T3B0aW9uczoKKwkJCWNhc2UgQVRfUmVzZXRPcHRpb25zOgorCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KAorCQkJCQkJCQkJICBkZXBhcnNlX0NvbHVt blNldE9wdGlvbnMoc3ViY21kKSkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFN0b3Jh Z2U6CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5nKSk7CisJCQkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVE9SQUdFICV7c3Rv cmFnZX1zIiwgMywKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RvcmFn ZSIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJ CQkJCQkJCSAic3RvcmFnZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyVmFsKChTdHJp bmcgKikgc3ViY21kLT5kZWYpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRDb21w cmVzc2lvbjoKKwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBTdHJpbmcpKTsKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIENPTVBSRVNT SU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfXMiLAorCQkJCQkJCQkJIDMsCisJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGNvbXByZXNzaW9uIiwKKwkJCQkJCQkJCSAiY29sdW1u IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJICJjb21wcmVzc2lvbl9t ZXRob2QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0clZhbCgoU3RyaW5nICopIHN1YmNt ZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENvbHVtblJlY3Vyc2U6 CisJCQljYXNlIEFUX0Ryb3BDb2x1bW46CisJCQkJZm10c3RyID0gcHNwcmludGYoIkRST1AgJXMg JSV7Y29sdW1ufUkiLAorCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIp OworCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbHVtbiIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZB KCJDQVNDQURFIiwgMSwKKwkJCQkJCQkJCSAgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgc3ViY21k LT5iZWhhdmlvcik7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtjYXNjYWRl fXMiLCB0bXBvYmoyKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluZGV4Ogor CQkJCXsKKwkJCQkJT2lkCQkJaWR4T2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlJ bmRleFN0bXQgICppc3RtdDsKKwkJCQkJUmVsYXRpb24JaWR4OworCQkJCQljb25zdCBjaGFyICpp ZHhuYW1lOworCQkJCQlPaWQJCQljb25zdHJPaWQ7CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQt PmRlZiwgSW5kZXhTdG10KSk7CisJCQkJCWlzdG10ID0gKEluZGV4U3RtdCAqKSBzdWJjbWQtPmRl ZjsKKworCQkJCQlpZiAoIWlzdG10LT5pc2NvbnN0cmFpbnQpCisJCQkJCQlicmVhazsKKworCQkJ CQlpZHggPSByZWxhdGlvbl9vcGVuKGlkeE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQkJaWR4 bmFtZSA9IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeCk7CisKKwkJCQkJY29uc3RyT2lkID0g Z2V0X3JlbGF0aW9uX2NvbnN0cmFpbnRfb2lkKAorCQkJCQkJY21kLT5kLmFsdGVyVGFibGUub2Jq ZWN0SWQsIGlkeG5hbWUsIGZhbHNlKTsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi QUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCQkJICJuYW1l IiwgT2JqVHlwZVN0cmluZywgaWR4bmFtZSwKKwkJCQkJCQkJCQkgImRlZmluaXRpb24iLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCQkJCSBwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBs ZShjb25zdHJPaWQpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisKKwkJCQkJcmVsYXRpb25fY2xvc2UoaWR4LCBBY2Nlc3NTaGFy ZUxvY2spOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRDb25zdHJhaW50Ogor CQkJY2FzZSBBVF9BZGRDb25zdHJhaW50UmVjdXJzZToKKwkJCQl7CisJCQkJCS8qIFhYWCBuZWVk IHRvIHNldCB0aGUgInJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICovCisJCQkJCU9pZAkJCWNvbnN0 ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJYm9vbAkJaXNudWxsOworCQkJCQlI ZWFwVHVwbGUJdHVwOworCQkJCQlEYXR1bQkJdmFsOworCQkJCQlDb25zdHJhaW50ICpjb25zdHI7 CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgQ29uc3RyYWludCkpOworCQkJCQljb25z dHIgPSAgY2FzdE5vZGUoQ29uc3RyYWludCwgc3ViY21kLT5kZWYpOworCisJCQkJCWlmICghY29u c3RyLT5za2lwX3ZhbGlkYXRpb24pCisJCQkJCXsKKwkJCQkJCXR1cCA9IFNlYXJjaFN5c0NhY2hl MShDT05TVFJPSUQsIE9iamVjdElkR2V0RGF0dW0oY29uc3RyT2lkKSk7CisKKwkJCQkJCWlmIChI ZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJCQkJCQl7CisJCQkJCQkJY2hhcgkgICAqY29uYmluOwor CisJCQkJCQkJLyogRmV0Y2ggY29uc3RyYWludCBleHByZXNzaW9uIGluIHBhcnNldHJlZSBmb3Jt ICovCisJCQkJCQkJdmFsID0gU3lzQ2FjaGVHZXRBdHRyKENPTlNUUk9JRCwgdHVwLAorCQkJCQkJ CQkJCQkJICBBbnVtX3BnX2NvbnN0cmFpbnRfY29uYmluLCAmaXNudWxsKTsKKworCQkJCQkJCWlm ICghaXNudWxsKQorCQkJCQkJCXsKKwkJCQkJCQkJY29uYmluID0gVGV4dERhdHVtR2V0Q1N0cmlu Zyh2YWwpOworCQkJCQkJCQlleHBycyA9IGxhcHBlbmQoZXhwcnMsIHN0cmluZ1RvTm9kZShjb25i aW4pKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKKwkJCQkJCX0K KwkJCQkJfQorCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RSQUlOVCAl e25hbWV9SSAle2RlZmluaXRpb259cyIsIDMsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImFkZCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5n LCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCksCisJCQkJCQkJCQkJICJkZWZpbml0aW9u IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFu ZF9zaW1wbGUoY29uc3RyT2lkKSk7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9BbHRlckNvbnN0cmFpbnQ6CisJCQkJeworCQkJCQlPaWQJCWNvbnN0ck9pZCA9IHN1Yi0+YWRk cmVzcy5vYmplY3RJZDsKKwkJCQkJQ29uc3RyYWludCAqYyA9IChDb25zdHJhaW50ICopIHN1YmNt ZC0+ZGVmOworCisJCQkJCS8qIElmIG5vIGNvbnN0cmFpbnQgd2FzIGFsdGVyZWQsIHNpbGVudGx5 IHNraXAgaXQgKi8KKwkJCQkJaWYgKCFPaWRJc1ZhbGlkKGNvbnN0ck9pZCkpCisJCQkJCQlicmVh azsKKworCQkJCQlBc3NlcnQoSXNBKGMsIENvbnN0cmFpbnQpKTsKKwkJCQkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIkFMVEVSIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZlcnJhYmxlfXMgJXtp bml0X2RlZmVycmVkfXMiLAorCQkJCQkJCQkJCSA0LAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJhbHRlciBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkgIm5hbWUiLCBPYmpUeXBl U3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCksCisJCQkJCQkJCQkJICJkZWZl cnJhYmxlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgYy0+ZGVmZXJyYWJsZSA/ICJERUZF UlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIsCisJCQkJCQkJCQkJICJpbml0X2RlZmVycmVkIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgYy0+aW5pdGRlZmVycmVkID8gIklOSVRJQUxMWSBE RUZFUlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFURSIpOworCisJCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9WYWxpZGF0ZUNvbnN0cmFpbnRSZWN1cnNlOgorCQkJY2FzZSBBVF9W YWxpZGF0ZUNvbnN0cmFpbnQ6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlZBTElEQVRF IENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgInZhbGlkYXRlIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJICJjb25zdHJhaW50Iiwg T2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9Ecm9wQ29uc3RyYWludFJlY3Vyc2U6CisJCQljYXNlIEFUX0Ryb3BDb25zdHJhaW50OgorCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QIENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUki LCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgY29uc3RyYWludCIs CisJCQkJCQkJCQkgImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlwZToKKwkJCQl7CisJCQkJ CVR1cGxlRGVzYyB0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCQkJCQlGb3JtX3Bn X2F0dHJpYnV0ZSBhdHQ7CisJCQkJCUNvbHVtbkRlZgkgICAqZGVmOworCisJCQkJCWF0dCA9ICYo dHVwZGVzYy0+YXR0cnNbc3ViLT5hZGRyZXNzLm9iamVjdFN1YklkIC0gMV0pOworCQkJCQlkZWYg PSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCQkJCQlBc3NlcnQoSXNBKGRlZiwgQ29sdW1u RGVmKSk7CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCQkJICoKKwkJCQkJ ICogQ29tcG9zaXRlIHR5cGVzOiBBTFRFUiByZWx0eXBlICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQ RQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xsYXRpb259cyBBVFRSSUJVVEUgJXtjYXNjYWRl fXMKKwkJCQkJICoKKwkJCQkJICogTm9ybWFsIHR5cGVzOiBBTFRFUiByZWx0eXBlICV7Y29sdW1u fUkgU0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xsYXRpb259cyBDT0xV TU4gJXt1c2luZ31zCisJCQkJCSAqLworCQkJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMg JSV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRSIsCisJCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJV VEUiIDogIkNPTFVNTiIpOworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwg MiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWx0ZXIgY29sdW1uIHR5cGUi LAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJ CQkJLyogQWRkIHRoZSBUWVBFIGNsYXVzZSAqLworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXBvYmosICIle2RhdGF0eXBlfVQiLAorCQkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShh dHQtPmF0dHR5cGlkLAorCQkJCQkJCQkJCQkJCQkJICBhdHQtPmF0dHR5cG1vZCkpOworCisJCQkJ CS8qIEFkZCBhIENPTExBVEUgY2xhdXNlLCBpZiBuZWVkZWQgKi8KKwkJCQkJdG1wb2JqMiA9IG5l d19vYmp0cmVlKCJDT0xMQVRFIik7CisJCQkJCWlmIChPaWRJc1ZhbGlkKGF0dC0+YXR0Y29sbGF0 aW9uKSkKKwkJCQkJeworCQkJCQkJT2JqVHJlZSAqY29sbG5hbWU7CisKKwkJCQkJCWNvbGxuYW1l ID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCQkgICBhdHQtPmF0dGNvbGxhdGlvbik7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXBvYmoyLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJCQkJCX0KKwkJCQkJZWxzZQor CQkJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iajIsICJwcmVzZW50IiwgZmFsc2UpOworCQkJ CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle2NvbGxhdGlvbn1zIiwgdG1wb2JqMik7 CisKKwkJCQkJLyogSWYgbm90IGEgY29tcG9zaXRlIHR5cGUsIGFkZCB0aGUgVVNJTkcgY2xhdXNl ICovCisJCQkJCWlmICghaXN0eXBlKQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICogSWYgdGhl cmUncyBhIFVTSU5HIGNsYXVzZSwgdHJhbnNmb3JtQWx0ZXJUYWJsZVN0bXQKKwkJCQkJCSAqIHJh biBpdCB0aHJvdWdoIHRyYW5zZm9ybUV4cHIgYW5kIHN0b3JlZCB0aGUKKwkJCQkJCSAqIHJlc3Vs dGluZyBub2RlIGluIGNvb2tlZF9kZWZhdWx0LCB3aGljaCB3ZSBjYW4gdXNlCisJCQkJCQkgKiBo ZXJlLgorCQkJCQkJICovCisJCQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWUoIlVTSU5HIik7CisJ CQkJCQlpZiAoZGVmLT5yYXdfZGVmYXVsdCkKKwkJCQkJCXsKKwkJCQkJCQlEYXR1bQlkZXBhcnNl ZDsKKwkJCQkJCQljaGFyICAgKmRlZmV4cHI7CisKKwkJCQkJCQlleHBycyA9IGxhcHBlbmQoZXhw cnMsIGRlZi0+Y29va2VkX2RlZmF1bHQpOworCQkJCQkJCWRlZmV4cHIgPSBub2RlVG9TdHJpbmco ZGVmLT5jb29rZWRfZGVmYXVsdCk7CisJCQkJCQkJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNh bGwyKHBnX2dldF9leHByLAorCQkJCQkJCQkJCQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVtKGRl ZmV4cHIpLAorCQkJCQkJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iajIsICIle2V4cHJlc3Npb259cyIsCisJCQkJCQkJ CQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCQkJCQkJfQorCQkJCQkJZWxz ZQorCQkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoyLCAicHJlc2VudCIsIGZhbHNlKTsK KwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7dXNpbmd9cyIsIHRtcG9iajIp OworCQkJCQl9CisKKwkJCQkJLyogSWYgaXQncyBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhlIENB U0NBREUgY2xhdXNlICovCisJCQkJCWlmIChpc3R5cGUpCisJCQkJCXsKKwkJCQkJCXRtcG9iajIg PSBuZXdfb2JqdHJlZSgiQ0FTQ0FERSIpOworCQkJCQkJaWYgKHN1YmNtZC0+YmVoYXZpb3IgIT0g RFJPUF9DQVNDQURFKQorCQkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoyLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7Y2FzY2Fk ZX1zIiwgdG1wb2JqMik7CisJCQkJCX0KKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKyNpZmRl ZiBUT0RPTElTVAorCQkJY2FzZSBBVF9BbHRlckNvbHVtbkdlbmVyaWNPcHRpb25zOgorCQkJCXRt cG9iaiA9IGRlcGFyc2VfRmR3T3B0aW9ucygoTGlzdCAqKSBzdWJjbWQtPmRlZiwKKwkJCQkJCQkJ CQkgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJY2FzZSBBVF9DaGFu Z2VPd25lcjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiT1dORVIgVE8gJXtvd25lcn1J IiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjaGFuZ2Ugb3duZXIiLAor CQkJCQkJCQkJICJvd25lciIsICBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIGdldF9yb2xlc3Bl Y19uYW1lKHN1YmNtZC0+bmV3b3duZXIpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9D bHVzdGVyT246CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkNMVVNURVIgT04gJXtpbmRl eH1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjbHVzdGVyIG9uIiwK KwkJCQkJCQkJCSAiaW5kZXgiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDbHVzdGVyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJTRVQgV0lUSE9VVCBDTFVTVEVSIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJzZXQgd2l0aG91dCBjbHVzdGVyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfU2V0TG9nZ2VkOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgTE9HR0VE IiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbG9nZ2VkIik7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0VW5Mb2dnZWQ6CisJCQkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIlNFVCBVTkxPR0dFRCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAic2V0IHVubG9nZ2VkIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJv cE9pZHM6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBXSVRIT1VUIE9JRFMiLCAx LAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB3aXRob3V0IG9pZHMiKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0QWNjZXNzTWV0aG9kOgorCQkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJTRVQgQUNDRVNTIE1FVEhPRCAle2FjY2Vzc19tZXRob2R9SSIsIDIs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGFjY2VzcyBtZXRob2QiLAor CQkJCQkJCQkJICJhY2Nlc3NfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0VGFibGVTcGFjZToKKwkJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiU0VUIFRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAyLAorCQkJCQkJ CQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB0YWJsZXNwYWNlIiwKKwkJCQkJCQkJCSAi dGFibGVzcGFjZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfU2V0UmVsT3B0aW9uczoKKwkJCWNhc2UgQVRfUmVzZXRSZWxPcHRpb25z OgorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KAorCQkJ CQkJCQkJICBkZXBhcnNlX1JlbFNldE9wdGlvbnMoc3ViY21kKSkpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0VuYWJsZVRyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJM RSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJlbmFibGUgdHJpZ2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5n LCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZUFsd2F5 c1RyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBBTFdBWVMgVFJJR0dF UiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5h YmxlIGFsd2F5cyB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcs IHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUmVwbGlj YVRyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSRVBMSUNBIFRSSUdH RVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVu YWJsZSByZXBsaWNhIHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJp ZzoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklHR0VSICV7dHJpZ2dl cn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdn ZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnQWxsOgorCQkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiBBTEwiLCAxLAorCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0Rpc2FibGVUcmlnQWxsOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJESVNBQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJkaXNhYmxlIHRyaWdnZXIgYWxsIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RW5hYmxlVHJpZ1VzZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBUUklH R0VSIFVTRVIiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0 cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ1Vz ZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiBVU0VSIiwg MSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIgdXNl ciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJ1bGU6CisJCQkJdG1wb2Jq ID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0VuYWJsZUFsd2F5c1J1bGU6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBB TFdBWVMgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiZW5hYmxlIGFsd2F5cyBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcs IHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUmVwbGlj YVJ1bGU6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSRVBMSUNBIFJVTEUg JXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBy ZXBsaWNhIHJ1bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5u YW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlUnVsZToKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHJ1bGUiLAorCQkJCQkJCQkJICJydWxl IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9BZGRJbmhlcml0OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJJTkhFUklUICV7 cGFyZW50fUQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImluaGVyaXQi LAorCQkJCQkJCQkJICJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJ IHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ry b3BJbmhlcml0OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJOTyBJTkhFUklUICV7cGFy ZW50fUQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgaW5oZXJp dCIsCisJCQkJCQkJCQkgInBhcmVudCIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ CQkgc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf QWRkT2Y6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9GICV7dHlwZV9vZn1UIiwgMiwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgb2YiLAorCQkJCQkJCQkJICJ0 eXBlX29mIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShz dWItPmFkZHJlc3Mub2JqZWN0SWQsIC0xKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RHJvcE9mOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJOT1QgT0YiLCAxLAorCQkJCQkJ CQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgIm5vdCBvZiIpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX1JlcGxpY2FJZGVudGl0eToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi UkVQTElDQSBJREVOVElUWSIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi cmVwbGljYSBpZGVudGl0eSIpOworCQkJCXN3aXRjaCAoKChSZXBsaWNhSWRlbnRpdHlTdG10ICop IHN1YmNtZC0+ZGVmKS0+aWRlbnRpdHlfdHlwZSkKKwkJCQl7CisJCQkJCWNhc2UgUkVQTElDQV9J REVOVElUWV9ERUZBVUxUOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtp ZGVudH1zIiwgIkRFRkFVTFQiKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURF TlRJVFlfRlVMTDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9 cyIsICJGVUxMIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZX05P VEhJTkc6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2lkZW50fXMiLCAi Tk9USElORyIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9JTkRF WDoKKwkJCQkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiVVNJTkcgSU5ERVggJXtpbmRleH1J IiwgMSwKKwkJCQkJCQkJCQkJICAiaW5kZXgiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQkg ICgoUmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPm5hbWUpOworCQkJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtpZGVudH1zIiwgdG1wb2JqMik7CisJCQkJCQli cmVhazsKKwkJCQl9CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUm93U2VjdXJp dHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBST1cgTEVWRUwgU0VDVVJJ VFkiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByb3cgc2Vj dXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlUm93U2VjdXJpdHk6 CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUk9XIExFVkVMIFNFQ1VSSVRZ IiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHJvdyBzZWN1 cml0eSIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCQkJCWJyZWFrOworI2lmZGVmIFRPRE9MSVNUCisJCQljYXNlIEFUX0dlbmVy aWNPcHRpb25zOgorCQkJCXRtcG9iaiA9IGRlcGFyc2VfRmR3T3B0aW9ucygoTGlzdCAqKSBzdWJj bWQtPmRlZiwgTlVMTCk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2UgQVRfQXR0YWNo UGFydGl0aW9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBVFRBQ0ggUEFSVElUSU9O ICV7cGFydGl0aW9uX2lkZW50aXR5fUQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImF0dGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJICJwYXJ0aXRpb25faWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChS ZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJ ZCkpOworCisJCQkJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9O RURfVEFCTEUpCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cGFydGl0aW9u X2JvdW5kfXMiLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKHN1Yi0+YWRk cmVzcy5vYmplY3RJZCkpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFjaFBhcnRp dGlvbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBBUlRJVElPTiAle3Bh cnRpdGlvbl9pZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJkZXRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCSAicGFydGl0aW9uX2lkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRp b25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfRGV0YWNoUGFydGl0aW9uRmluYWxpemU6CisJCQkJ dG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRl bnRpdHl9RCBGSU5BTElaRSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZGV0YWNoIHBhcnRpdGlvbiBmaW5hbGl6ZSIsCisJCQkJCQkJCQkgInBhcnRpdGlvbl9pZGVudGl0 eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNzLm9iamVj dElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0FkZElkZW50aXR5OgorCQkJCXsKKwkJ CQkJQXR0ck51bWJlcglhdHRudW07CisJCQkJCU9pZAkJCXNlcV9yZWxpZDsKKwkJCQkJT2JqVHJl ZQkqc2VxZGVmOworCQkJCQlDb2x1bW5EZWYgICpjb2xkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNt ZC0+ZGVmOworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtj b2x1bW59SSBBREQgJXtpZGVudGl0eV9jb2x1bW59cyIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImFkZCBpZGVudGl0eSIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWF0dG51bSA9IGdldF9hdHRudW0oUmVs YXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlzZXFfcmVsaWQgPSBnZXRJ ZGVudGl0eVNlcXVlbmNlKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtLCB0cnVlKTsKKwkJ CQkJc2VxZGVmID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzZXFfcmVsaWQsIGNvbGRlZi0+aWRl bnRpdHksIGZhbHNlKTsKKworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICJpZGVu dGl0eV9jb2x1bW4iLCBzZXFkZWYpOworCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2Ug QVRfU2V0SWRlbnRpdHk6CisJCQkJeworCQkJCQlEZWZFbGVtCSpkZWZlbDsKKwkJCQkJY2hhcgkJ aWRlbnRpdHkgPSAwOworCQkJCQlPYmpUcmVlCSAgICpzZXFkZWY7CisJCQkJCUF0dHJOdW1iZXIJ YXR0bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisKKworCQkJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJzZXQgaWRlbnRpdHkiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2Jq VHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlpZiAoc3ViY21kLT5kZWYpCisJCQkJ CXsKKwkJCQkJCUxpc3QJICAgKmRlZiA9IChMaXN0ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCQlB c3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBMaXN0KSk7CisKKwkJCQkJCWRlZmVsID0gbGluaXRpYWxf bm9kZShEZWZFbGVtLCBkZWYpOworCQkJCQkJaWRlbnRpdHkgPSBkZWZHZXRJbnQzMihkZWZlbCk7 CisJCQkJCX0KKworCQkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQocmVs KSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2VxX3JlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShS ZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwgdHJ1ZSk7CisJCQkJCXNlcWRlZiA9IGRlcGFy c2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBpZGVudGl0eSwgdHJ1ZSk7CisKKwkJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtkZWZpbml0aW9ufXMiLCBzZXFkZWYpOworCisJ CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCQkJCQlicmVhazsKKwkJCQl9CisJCQljYXNlIEFUX0Ryb3BJZGVudGl0eToKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBJREVOVElU WSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBpZGVudGl0eSIs CisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJ CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJ CQkJCQkgc3ViY21kLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7CisKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQli cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhXQVJOSU5HLCAidW5zdXBwb3J0ZWQgYWx0ZXIg dGFibGUgc3VidHlwZSAlZCIsCisJCQkJCSBzdWJjbWQtPnN1YnR5cGUpOworCQkJCWJyZWFrOwor CQl9CisKKwkJLyoKKwkJICogV2UgZG9uJ3Qgc3VwcG9ydCByZXBsaWNhdGluZyBBTFRFUiBUQUJM RSB3aGljaCBjb250YWlucyB2b2xhdGlsZQorCQkgKiBmdW5jdGlvbnMgYmVjYXVzZSBJdCdzIHBv c3NpYmxlIHRoZSBmdW5jdGlvbnMgY29udGFpbiBEREwvRE1MIGluCisJCSAqIHdoaWNoIGNhc2Ug dGhlc2Ugb3BlcnRpb25zIHdpbGwgYmUgZXhlY3V0ZWQgdHdpY2UgYW5kIGNhdXNlCisJCSAqIGR1 cGxpY2F0ZSBkYXRhLiBJbiBhZGRpdGlvbiwgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSB0YWJs ZXMgYmVpbmcKKwkJICogYWNjZXNzZWQgYnkgdGhlc2UgRERML0RNTCBhcmUgcHVibGlzaGVkIG9y IG5vdC4gU28gYmxpbmRseSBhbGxvd2luZworCQkgKiBzdWNoIGZ1bmN0aW9ucyBjYW4gYWxsb3cg dW5pbnRlbmRlZCBjbGF1c2VzIGxpa2UgdGhlIHRhYmxlcyBhY2Nlc3NlZAorCQkgKiBpbiB0aG9z ZSBmdW5jdGlvbnMgbWF5IG5vdCBldmVuIGV4aXN0IG9uIHRoZSBzdWJzY3JpYmVyLXNpZGUuCisJ CSAqLworCQlpZiAoY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnMoKE5vZGUgKikgZXhwcnMpKQor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQ T1JURUQpLAorCQkJCQkgZXJybXNnKCJBTFRFUiBUQUJMRSBjb21tYW5kIHVzaW5nIHZvbGF0aWxl IGZ1bmN0aW9uIGNhbm5vdCBiZSByZXBsaWNhdGVkIikpKTsKKworCQkvKgorCQkgKiBDbGVhbiB0 aGUgbGlzdCBhcyB3ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGVyZSBpcyBubyB2b2xhdGlsZQorCQkg KiBmdW5jdGlvbi4KKwkJICovCisJCWxpc3RfZnJlZShleHBycyk7CisJCWV4cHJzID0gTklMOwor CX0KKworCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWlmIChsaXN0X2xl bmd0aChzdWJjbWRzKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWFwcGVuZF9hcnJheV9vYmpl Y3QoYWx0ZXJUYWJsZVN0bXQsICIle3N1YmNtZHM6LCB9cyIsIHN1YmNtZHMpOworCisJcmV0dXJu IGFsdGVyVGFibGVTdG10OworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxF IGRlcGFyc2luZy4KKyAqCisgKiBEZXBhcnNlIGEgQ29sdW1uRGVmIG5vZGUgd2l0aGluIGEgcmVn dWxhciAobm9uIHR5cGVkKSB0YWJsZSBjcmVhdGlvbi4KKyAqCisgKiBOT1QgTlVMTCBjb25zdHJh aW50cyBpbiB0aGUgY29sdW1uIGRlZmluaXRpb24gYXJlIGVtaXR0ZWQgZGlyZWN0bHkgaW4gdGhl CisgKiBjb2x1bW4gZGVmaW5pdGlvbiBieSB0aGlzIHJvdXRpbmU7IG90aGVyIGNvbnN0cmFpbnRz IG11c3QgYmUgZW1pdHRlZAorICogZWxzZXdoZXJlICh0aGUgaW5mbyBpbiB0aGUgcGFyc2Ugbm9k ZSBpcyBpbmNvbXBsZXRlIGFueXdheS4pLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0NvbHVtbkRlZihSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBib29sIGNvbXBv c2l0ZSwKKwkJCQkgIENvbHVtbkRlZiAqY29sZGVmLCBib29sIGlzX2FsdGVyLCBMaXN0ICoqZXhw cnMpCit7CisJT2JqVHJlZQkgICAqY29sdW1uOworCU9ialRyZWUJICAgKnRtcG9iajsKKwlPaWQJ CQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVw OworCUZvcm1fcGdfYXR0cmlidXRlIGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0 eXBtb2Q7CisJT2lkCQkJdHlwY29sbGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RD ZWxsICAgKmNlbGw7CisKKwkvKgorCSAqIEluaGVyaXRlZCBjb2x1bW5zIHdpdGhvdXQgbG9jYWwg ZGVmaW5pdGlvbnMgbXVzdCBub3QgYmUgZW1pdHRlZC4KKwkgKgorCSAqIFhYWCBtYXliZSBpdCBp cyB1c2VmdWwgdG8gaGF2ZSB0aGVtIHdpdGggInByZXNlbnQgPSBmYWxzZSIgb3Igc29tZSBzdWNo PworCSAqLworCWlmICghY29sZGVmLT5pc19sb2NhbCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhdHRy VHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZChhdHRyVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBm aW5kIGNhY2hlIGVudHJ5IGZvciBjb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uICV1IiwKKwkJCSBj b2xkZWYtPmNvbG5hbWUsIHJlbGlkKTsKKwlhdHRyRm9ybSA9IChGb3JtX3BnX2F0dHJpYnV0ZSkg R0VUU1RSVUNUKGF0dHJUdXApOworCisJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKHJlbGlkLCBhdHRy Rm9ybS0+YXR0bnVtLAorCQkJCQkJICAmdHlwaWQsICZ0eXBtb2QsICZ0eXBjb2xsYXRpb24pOwor CisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogJXtuYW1lfUkgJXtjb2x0eXBlfVQg JXtjb21wcmVzc2lvbn1zICV7ZGVmYXVsdH1zICV7bm90X251bGx9cworCSAqICV7Y29sbGF0aW9u fXMKKwkgKi8KKwljb2x1bW4gPSBuZXdfb2JqdHJlZV9WQSgiJXtuYW1lfUkgJXtjb2x0eXBlfVQi LCAzLAorCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJCQkJCQkJIm5h bWUiLCBPYmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJCQkJImNvbHR5cGUiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGlkLCB0eXBtb2Qp KTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJDT01QUkVT U0lPTiIpOworCWlmIChjb2xkZWYtPmNvbXByZXNzaW9uKQorCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXBvYmosICIle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgY29sZGVmLT5jb21wcmVzc2lvbik7 CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIiV7Y29tcHJlc3Npb25f bWV0aG9kfUkiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxz ZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7Y29tcHJlc3Npb259cyIs IHRtcG9iaik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCWlmIChPaWRJ c1ZhbGlkKHR5cGNvbGxhdGlvbikpCisJeworCQlPYmpUcmVlICpjb2xsbmFtZTsKKworCQljb2xs bmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAor CQkJCQkJCQkJCQkgICB0eXBjb2xsYXRpb24pOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBv YmosICIle25hbWV9RCIsIGNvbGxuYW1lKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1 bW4sICIle2NvbGxhdGlvbn1zIiwgdG1wb2JqKTsKKworCWlmICghY29tcG9zaXRlKQorCXsKKwkJ T2lkCXNlcXJlbGlkID0gSW52YWxpZE9pZDsKKworCQkvKgorCQkgKiBFbWl0IGEgTk9UIE5VTEwg ZGVjbGFyYXRpb24gaWYgbmVjZXNzYXJ5LiAgTm90ZSB0aGF0IHdlIGNhbm5vdCB0cnVzdAorCQkg KiBwZ19hdHRyaWJ1dGUuYXR0bm90bnVsbCBoZXJlLCBiZWNhdXNlIHRoYXQgYml0IGlzIGFsc28g c2V0IHdoZW4KKwkJICogcHJpbWFyeSBrZXlzIGFyZSBzcGVjaWZpZWQ7IGFuZCB3ZSBtdXN0IG5v dCBlbWl0IGEgTk9UIE5VTEwKKwkJICogY29uc3RyYWludCBpbiB0aGF0IGNhc2UsIHVubGVzcyBl eHBsaWNpdGVseSBzcGVjaWZpZWQuICBUaGVyZWZvcmUsCisJCSAqIHdlIHNjYW4gdGhlIGxpc3Qg b2YgY29uc3RyYWludHMgYXR0YWNoZWQgdG8gdGhpcyBjb2x1bW4gdG8gZGV0ZXJtaW5lCisJCSAq IHdoZXRoZXIgd2UgbmVlZCB0byBlbWl0IGFueXRoaW5nLgorCQkgKiAoRm9ydHVuYXRlbHksIE5P VCBOVUxMIGNvbnN0cmFpbnRzIGNhbm5vdCBiZSB0YWJsZSBjb25zdHJhaW50cy4pCisJCSAqCisJ CSAqIEluIHRoZSBBTFRFUiBUQUJMRSBjYXNlcywgd2UgYWxzbyBhZGQgYSBOT1QgTlVMTCBpZiB0 aGUgY29sRGVmIGlzCisJCSAqIG1hcmtlZCBpc19ub3RfbnVsbC4KKwkJICovCisJCXNhd19ub3Ru dWxsID0gZmFsc2U7CisJCWZvcmVhY2goY2VsbCwgY29sZGVmLT5jb25zdHJhaW50cykKKwkJewor CQkJQ29uc3RyYWludCAqY29uc3RyID0gKENvbnN0cmFpbnQgKikgbGZpcnN0KGNlbGwpOworCisJ CQlpZiAoY29uc3RyLT5jb250eXBlID09IENPTlNUUl9OT1ROVUxMKQorCQkJCXNhd19ub3RudWxs ID0gdHJ1ZTsKKwkJfQorCQlpZiAoaXNfYWx0ZXIgJiYgY29sZGVmLT5pc19ub3RfbnVsbCkKKwkJ CXNhd19ub3RudWxsID0gdHJ1ZTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjb2x1bW4sICIl e25vdF9udWxsfXMiLAorCQkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVMTCIgOiAiIik7CisK KwkJdG1wb2JqID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwkJaWYgKGF0dHJGb3JtLT5hdHRo YXNkZWYpCisJCXsKKwkJCWNoYXIgKmRlZnN0cjsKKworCQkJZGVmc3RyID0gUmVsYXRpb25HZXRD b2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCQkgIGRw Y29udGV4dCwgZXhwcnMpOworCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2Rl ZmF1bHR9cyIsIGRlZnN0cik7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwg IiV7ZGVmYXVsdH1zIiwgdG1wb2JqKTsKKworCQkvKiBJREVOVElUWSBDT0xVTU4gKi8KKwkJaWYg KGNvbGRlZi0+aWRlbnRpdHkpCisJCXsKKwkJCU9pZAlhdHRubyA9IGdldF9hdHRudW0ocmVsaWQs IGNvbGRlZi0+Y29sbmFtZSk7CisJCQlzZXFyZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2UocmVs aWQsIGF0dG5vLCBmYWxzZSk7CisJCX0KKworCQl0bXBvYmogPSBkZXBhcnNlX0NvbHVtbklkZW50 aXR5KHNlcXJlbGlkLCBjb2xkZWYtPmlkZW50aXR5LCBpc19hbHRlcik7CisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNvbHVtbiwgIiV7aWRlbnRpdHlfY29sdW1ufXMiLCB0bXBvYmopOworCisJCS8q IEdFTkVSQVRFRCBDT0xVTU4gRVhQUkVTU0lPTiAqLworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgi R0VORVJBVEVEIEFMV0FZUyBBUyIpOworCQlpZiAoY29sZGVmLT5nZW5lcmF0ZWQgPT0gQVRUUklC VVRFX0dFTkVSQVRFRF9TVE9SRUQpCisJCXsKKwkJCWNoYXIgKmRlZnN0cjsKKworCQkJZGVmc3Ry ID0gUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAor CQkJCQkJCQkJCQkgIGRwY29udGV4dCwgZXhwcnMpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wb2JqLCAiJXtnZW5lcmF0aW9uX2V4cHJ9cyBTVE9SRUQiLCBkZWZzdHIpOworCQl9CisJCWVs c2UKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgdG1w b2JqKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisKKwlyZXR1cm4gY29sdW1u OworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxFIE9GIGRlcGFyc2luZy4K KyAqCisgKiBEZXBhcnNlIGEgQ29sdW1uRGVmIG5vZGUgd2l0aGluIGEgdHlwZWQgdGFibGUgY3Jl YXRpb24uCVRoaXMgaXMgc2ltcGxlcgorICogdGhhbiB0aGUgcmVndWxhciBjYXNlLCBiZWNhdXNl IHdlIGRvbid0IGhhdmUgdG8gZW1pdCB0aGUgdHlwZSBkZWNsYXJhdGlvbiwKKyAqIGNvbGxhdGlv biwgb3IgZGVmYXVsdC4gIEhlcmUgd2Ugb25seSByZXR1cm4gc29tZXRoaW5nIGlmIHRoZSBjb2x1 bW4gaXMgYmVpbmcKKyAqIGRlY2xhcmVkIE5PVCBOVUxMLgorICoKKyAqIEFzIGluIGRlcGFyc2Vf Q29sdW1uRGVmLCBhbnkgb3RoZXIgY29uc3RyYWludCBpcyBwcm9jZXNzZWQgZWxzZXdoZXJlLgor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChSZWxhdGlvbiBy ZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBDb2x1bW5EZWYgKmNvbGRlZikKK3sKKwlPYmpUcmVl CSpjb2x1bW4gPSBOVUxMOworCU9ialRyZWUJKnRtcG9iajsKKwlPaWQJCQlyZWxpZCA9IFJlbGF0 aW9uR2V0UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVwOworCUZvcm1fcGdfYXR0 cmlidXRlIGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0eXBtb2Q7CisJT2lkCQkJ dHlwY29sbGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RDZWxsICAgKmNlbGw7CisK KwlhdHRyVHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChhdHRyVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNvdWxk IG5vdCBmaW5kIGNhY2hlIGVudHJ5IGZvciBjb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uICV1IiwK KwkJCSBjb2xkZWYtPmNvbG5hbWUsIHJlbGlkKTsKKwlhdHRyRm9ybSA9IChGb3JtX3BnX2F0dHJp YnV0ZSkgR0VUU1RSVUNUKGF0dHJUdXApOworCisJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKHJlbGlk LCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJICAmdHlwaWQsICZ0eXBtb2QsICZ0eXBjb2xsYXRp b24pOworCisJLyoKKwkgKiBTZWFyY2ggZm9yIGEgTk9UIE5VTEwgZGVjbGFyYXRpb24uICBBcyBp biBkZXBhcnNlX0NvbHVtbkRlZiwgd2UgcmVseSBvbgorCSAqIGZpbmRpbmcgYSBjb25zdHJhaW50 IG9uIHRoZSBjb2x1bW4gcmF0aGVyIHRoYW4gY29sZGVmLT5pc19ub3RfbnVsbC4KKwkgKiAoVGhp cyByb3V0aW5lIGlzIG5ldmVyIHVzZWQgZm9yIEFMVEVSIGNhc2VzLikKKwkgKi8KKwlzYXdfbm90 bnVsbCA9IGZhbHNlOworCWZvcmVhY2goY2VsbCwgY29sZGVmLT5jb25zdHJhaW50cykKKwl7CisJ CUNvbnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICopIGxmaXJzdChjZWxsKTsKKworCQlp ZiAoY29uc3RyLT5jb250eXBlID09IENPTlNUUl9OT1ROVUxMKQorCQl7CisJCQlzYXdfbm90bnVs bCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghc2F3X25vdG51bGwgJiYgIWF0 dHJGb3JtLT5hdHRoYXNkZWYpCisJeworCQlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisJCXJl dHVybiBOVUxMOworCX0KKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqICV7bmFt ZX1JIFdJVEggT1BUSU9OUyAle2RlZmF1bHR9cyAle25vdF9udWxsfXMuCisJICovCisJY29sdW1u ID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1JIFdJVEggT1BUSU9OUyIsIDIsCisJCQkJCQkJInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwKKwkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJp bmcsIGNvbGRlZi0+Y29sbmFtZSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjb2x1bW4sICIl e25vdF9udWxsfXMiLAorCQkJCQkJIHNhd19ub3RudWxsID8gIk5PVCBOVUxMIiA6ICIiKTsKKwor CXRtcG9iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJaWYgKGF0dHJGb3JtLT5hdHRoYXNk ZWYpCisJeworCQljaGFyICpkZWZzdHI7CisKKwkJZGVmc3RyID0gUmVsYXRpb25HZXRDb2x1bW5E ZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCSAgZHBjb250ZXh0 LCBOVUxMKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2RlZmF1bHR9cyIs IGRlZnN0cik7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNl bnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtkZWZhdWx0fXMi LCB0bXBvYmopOworCisJLyoKKwkgKiBHZW5lcmF0ZWQgY29sdW1ucyBhcmUgbm90IHN1cHBvcnRl ZCBvbiB0eXBlZCB0YWJsZXMsIHNvIHdlIGFyZSBkb25lLgorCSAqLworCisJUmVsZWFzZVN5c0Nh Y2hlKGF0dHJUdXApOworCisJcmV0dXJuIGNvbHVtbjsKK30KKworLyoKKyAqIERlcGFyc2UgdGhl IGRlZmluaXRpb24gb2YgY29sdW1uIGlkZW50aXR5LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0NvbHVtbklkZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBh bHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICpjb2x1bW47CisJT2JqVHJlZQkgICAqaWRlbnRv Ymo7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlz ZXF0dXBsZTsKKwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07CisJRm9ybV9wZ19zZXF1ZW5jZV9k YXRhIHNlcWRhdGE7CisJY2hhcgkgICAqaWRlbnRmbXQ7CisJY2hhcgkgICAqb2JqZm10OworCisJ Y29sdW1uID0gbmV3X29ianRyZWUoIiIpOworCisJaWYgKCFPaWRJc1ZhbGlkKHNlcXJlbGlkKSkK Kwl7CisJCWFwcGVuZF9ib29sX29iamVjdChjb2x1bW4sICJwcmVzZW50IiwgZmFsc2UpOworCQly ZXR1cm4gY29sdW1uOworCX0KKworCWlmIChhbHRlcl90YWJsZSkKKwl7CisJCWlkZW50Zm10ID0g IlNFVCBHRU5FUkFURUQgIjsKKwkJb2JqZm10ID0gIiV7b3B0aW9ufXMiOworCX0KKwllbHNlCisJ eworCQlpZGVudGZtdCA9ICJHRU5FUkFURUQgIjsKKwkJb2JqZm10ID0gIiV7b3B0aW9ufXMgQVMg SURFTlRJVFkiOworCX0KKworCWlkZW50b2JqID0gbmV3X29ianRyZWUoaWRlbnRmbXQpOworCisJ aWYgKGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElUWV9BTFdBWVMpCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGlkZW50b2JqLCBvYmpmbXQsICJBTFdBWVMiKTsKKwllbHNlIGlmIChpZGVudGl0 eSA9PSAgQVRUUklCVVRFX0lERU5USVRZX0JZX0RFRkFVTFQpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGlkZW50b2JqLCBvYmpmbXQsICJCWSBERUZBVUxUIik7CisJZWxzZQorCQlhcHBlbmRfYm9v bF9vYmplY3QoaWRlbnRvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29iamVjdF9v YmplY3QoY29sdW1uLCAiJXtpZGVudGl0eV90eXBlfXMiLCBpZGVudG9iaik7CisKKwlyZWwgPSB0 YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVw bGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELCBzZXFyZWxpZCk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIHNlcXVlbmNlICV1IiwKKwkJCSBzZXFyZWxpZCk7CisKKwlzZXFmb3JtID0gKEZvcm1f cGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisJc2VxZGF0YSA9IGdldF9zZXF1ZW5j ZV92YWx1ZXMoc2VxcmVsaWQpOworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWVsZW1z ID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ2FjaGUoTlVMTCwgc2VxZm9ybSwgYWx0ZXJf dGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0N5Y2xlKE5VTEws IHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNl X1NlcV9JbmNyZW1lbnRCeShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0g bGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWludmFsdWUoTlVMTCwgc2VxZm9ybSwgYWx0ZXJf dGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01heHZhbHVlKE5V TEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBh cnNlX1NlcV9TdGFydHdpdGgoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9 IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQoTlVMTCwgc2VxZGF0YSkpOworCS8q IFdlIHB1cnBvc2VmdWxseSBkbyBub3QgZW1pdCBPV05FRCBCWSBoZXJlICovCisKKwlpZiAoYWx0 ZXJfdGFibGUpCisJCWFwcGVuZF9hcnJheV9vYmplY3QoY29sdW1uLCAiJXtzZXFfZGVmaW5pdGlv bjogfXMiLCBlbGVtcyk7CisJZWxzZQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbHVtbiwgIigg JXtzZXFfZGVmaW5pdGlvbjogfXMgKSIsIGVsZW1zKTsKKworCXRhYmxlX2Nsb3NlKHJlbCwgUm93 RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gY29sdW1uOworfQorCisvKgorICogLi4uIEFMVEVS IENPTFVNTiAuLi4gU0VUL1JFU0VUICguLi4pCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpCit7CisJTGlzdAkgICAq c2V0cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9ialRyZWUJICAgKmNvbHNldDsKKwlj aGFyCSAgICpmbXQ7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5cGUgPT0gQVRfUmVz ZXRPcHRpb25zOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQUxURVIgQ09M VU1OICV7Y29sdW1ufUkgUkVTRVR8U0VUICgle29wdGlvbnM6LCB9cykKKwkgKi8KKwlpZiAoaXNf cmVzZXQpCisJCWZtdCA9ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBSRVNFVCAiOworCWVsc2UK KwkJZm10ID0gIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCAiOworCisJY29sc2V0ID0gbmV3 X29ianRyZWVfVkEoZm10LCAxLCAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1l KTsKKworCWZvcmVhY2goY2VsbCwgKExpc3QgKikgc3ViY21kLT5kZWYpCisJeworCQlEZWZFbGVt CSAgICplbGVtOworCQlPYmpUcmVlCSAgICpzZXQ7CisKKwkJZWxlbSA9IChEZWZFbGVtICopIGxm aXJzdChjZWxsKTsKKwkJc2V0ID0gZGVwYXJzZV9EZWZFbGVtKGVsZW0sIGlzX3Jlc2V0KTsKKwkJ c2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3Qoc2V0KSk7CisJfQorCisJQXNz ZXJ0KHNldHMpOworCWFwcGVuZF9hcnJheV9vYmplY3QoY29sc2V0LCAiKCV7b3B0aW9uczosIH1z KSIsIHNldHMpOworCisJcmV0dXJuIGNvbHNldDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIENS RUFURSBET01BSU4KKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBhcnNldHJl ZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3Jl YXRlRG9tYWluKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUJICAg KmNyZWF0ZURvbWFpbjsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJSGVhcFR1cGxlCXR5cFR1cDsK KwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKwlMaXN0CSAgICpjb25zdHJhaW50czsKKworCXR5cFR1 cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBk b21haW4gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUp IEdFVFNUUlVDVCh0eXBUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICog Q1JFQVRFIERPTUFJTiAle2lkZW50aXR5fUQgQVMgJXt0eXBlfVQgJXtub3RfbnVsbH1zICV7Y29u c3RyYWludHN9cworCSAqICV7Y29sbGF0aW9ufXMKKwkgKi8KKwljcmVhdGVEb21haW4gPSBuZXdf b2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVEb21haW4s CisJCQkJCQkgIkRPTUFJTiAle2lkZW50aXR5fUQgQVMiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVEb21haW4sCisJCQkJCQkgIiV7dHlwZX1UIiwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBGb3JtLT50eXBiYXNldHlwZSwgdHlwRm9y bS0+dHlwdHlwbW9kKSk7CisKKwlpZiAodHlwRm9ybS0+dHlwbm90bnVsbCkKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtub3RfbnVsbH1zIiwgIk5PVCBOVUxMIik7CisJ ZWxzZQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVEb21haW4sICIle25vdF9udWxsfXMi LCAiIik7CisKKwljb25zdHJhaW50cyA9IG9idGFpbkNvbnN0cmFpbnRzKE5JTCwgSW52YWxpZE9p ZCwgb2JqZWN0SWQpOworCWlmIChjb25zdHJhaW50cyA9PSBOSUwpCisJeworCQl0bXBvYmogPSBu ZXdfb2JqdHJlZSgiIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50Iiwg ZmFsc2UpOworCX0KKwllbHNlCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2VsZW1lbnRz OiwgfXMiLCAxLAorCQkJCQkJCSAiZWxlbWVudHMiLCBPYmpUeXBlQXJyYXksIGNvbnN0cmFpbnRz KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVEb21haW4sICIle2NvbnN0cmFpbnRzfXMi LCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3X29ianRyZWUoIkNPTExBVEUiKTsKKwlpZiAoT2lk SXNWYWxpZCh0eXBGb3JtLT50eXBjb2xsYXRpb24pKQorCXsKKwkJT2JqVHJlZSAqY29sbG5hbWU7 CisKKwkJY29sbG5hbWUgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJICAgdHlwRm9ybS0+dHlwY29sbGF0aW9uKTsKKwkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQorCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5k X29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtjb2xsYXRpb259cyIsIHRtcG9iaik7CisK KwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVybiBjcmVhdGVEb21haW47Cit9CisK Ky8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRnVuY3Rpb25TdG10IChDUkVBVEUgRlVOQ1RJT04pCisg KgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVk IGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBj b21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZ1bmN0aW9uKE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZ1bmN0aW9uU3RtdCAqbm9k ZSA9IChDcmVhdGVGdW5jdGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmNyZWF0 ZUZ1bmM7CisJT2JqVHJlZQkgICAqdG1wb2JqOworCURhdHVtCQl0bXBkYXR1bTsKKwljaGFyCSAg ICpzb3VyY2U7CisJY2hhcgkgICAqcHJvYmluOworCUxpc3QJICAgKnBhcmFtczsKKwlMaXN0CSAg ICpkZWZhdWx0czsKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3QJICAgKnR5cGVzID0gTklM OworCUxpc3RDZWxsICAgKmNlbGw7CisJTGlzdENlbGwgICAqY3VyZGVmOworCUxpc3RDZWxsICAg KnRhYmxlX3BhcmFtcyA9IE5VTEw7CisJSGVhcFR1cGxlCXByb2NUdXA7CisJRm9ybV9wZ19wcm9j IHByb2NGb3JtOworCUhlYXBUdXBsZQlsYW5nVHVwOworCU9pZAkJICAgKnR5cGFycmF5OworCU9p ZAkJICAgKnRyZnR5cGVzOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07CisJaW50CQkJaTsK KwlpbnQJCQl0eXBudW07CisJaW50CQkJbnR5cGVzOworCWJvb2wJCWlzbnVsbDsKKwlib29sCQlp c2Z1bmN0aW9uOworCisJLyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlICovCisJcHJvY1R1cCA9IFNl YXJjaFN5c0NhY2hlMShQUk9DT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHByb2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGZ1bmN0 aW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJcHJvY0Zvcm0gPSAoRm9ybV9wZ19w cm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkvKiBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgcGdf bGFuZ3VhZ2UgdHVwbGUgKi8KKwlsYW5nVHVwID0gU2VhcmNoU3lzQ2FjaGUxKExBTkdPSUQsIHBy b2NGb3JtLT5wcm9sYW5nKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQobGFuZ1R1cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgbGFuZ3VhZ2Ugd2l0aCBPSUQgJXUi LAorCQkJIHByb2NGb3JtLT5wcm9sYW5nKTsKKwlsYW5nRm9ybSA9IChGb3JtX3BnX2xhbmd1YWdl KSBHRVRTVFJVQ1QobGFuZ1R1cCk7CisKKwkvKgorCSAqIERldGVybWluZSB1c2VmdWwgdmFsdWVz IGZvciBwcm9zcmMgYW5kIHByb2Jpbi4gIFdlIGNvcGUgd2l0aCBwcm9iaW4KKwkgKiBiZWluZyBl aXRoZXIgTlVMTCBvciAiLSIsIGJ1dCBwcm9zcmMgbXVzdCBoYXZlIGEgdmFsaWQgdmFsdWUuCisJ ICovCisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJ CQkgICBBbnVtX3BnX3Byb2NfcHJvc3JjLCAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9n KEVSUk9SLCAibnVsbCBwcm9zcmMgaW4gZnVuY3Rpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7 CisJc291cmNlID0gVGV4dERhdHVtR2V0Q1N0cmluZyh0bXBkYXR1bSk7CisKKwkvKiBEZXRlcm1p bmUgYSB1c2VmdWwgdmFsdWUgZm9yIHByb2JpbiAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRB dHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2JpbiwgJmlz bnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJcHJvYmluID0gTlVMTDsKKwllbHNlCisJeworCQlwcm9i aW4gPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHRtcGRhdHVtKTsKKwkJaWYgKHByb2JpblswXSA9PSAn XDAnIHx8IHN0cmNtcChwcm9iaW4sICItIikgPT0gMCkKKwkJCXByb2JpbiA9IE5VTEw7CisJfQor CisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7b3JfcmVwbGFjZX1z IEZVTkNUSU9OICV7c2lnbmF0dXJlfXMgUkVUVVJOUyAle3JldHVybl90eXBlfXMKKwkgKiBMQU5H VUFHRSAle3RyYW5zZm9ybV90eXBlfXMgJXtsYW5ndWFnZX1JICV7d2luZG93fXMgJXt2b2xhdGls aXR5fXMKKwkgKiAle3BhcmFsbGVsX3NhZmV0eX1zICV7bGVha3Byb29mfXMgJXtzdHJpY3R9cyAl e3NlY3VyaXR5X2RlZmluZXJ9cworCSAqICV7Y29zdH1zICV7cm93c31zICV7c3VwcG9ydH1zICV7 c2V0X29wdGlvbnM6IH1zIEFTICV7b2JqZmlsZX1MLAorCSAqICV7c3ltYm9sfUwKKwkgKi8KKwlj cmVhdGVGdW5jID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY3JlYXRlRnVuYywgIiV7b3JfcmVwbGFjZX1zIiwKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8g Ik9SIFJFUExBQ0UiIDogIiIpOworCisJLyoKKwkgKiBUbyBjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50 cyBhcnJheSwgZXh0cmFjdCB0aGUgdHlwZSBPSURzIGZyb20gdGhlCisJICogZnVuY3Rpb24ncyBw Z19wcm9jIGVudHJ5LiAgSWYgcHJvbmFyZ3MgZXF1YWxzIHRoZSBwYXJhbWV0ZXIgbGlzdCBsZW5n dGgsCisJICogdGhlcmUgYXJlIG5vIE9VVCBwYXJhbWV0ZXJzIGFuZCB0aHVzIHdlIGNhbiBleHRy YWN0IHRoZSB0eXBlIE9JRCBmcm9tCisJICogcHJvYXJndHlwZXM7IG90aGVyd2lzZSB3ZSBuZWVk IHRvIGRlY29kZSBwcm9hbGxhcmd0eXBlcywgd2hpY2ggaXMKKwkgKiBhIGJpdCBtb3JlIGludm9s dmVkLgorCSAqLworCXR5cGFycmF5ID0gcGFsbG9jKGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRl cnMpICogc2l6ZW9mKE9pZCkpOworCWlmIChsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKSA+ IHByb2NGb3JtLT5wcm9uYXJncykKKwl7CisJCWJvb2wJaXNudWxsOworCQlEYXR1bQlhbGx0eXBl czsKKwkJRGF0dW0gICp2YWx1ZXM7CisJCWJvb2wgICAqbnVsbHM7CisJCWludAkJbmVsZW1zOwor CisJCWFsbHR5cGVzID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJ CSAgIEFudW1fcGdfcHJvY19wcm9hbGxhcmd0eXBlcywgJmlzbnVsbCk7CisJCWlmIChpc251bGwp CisJCQllbG9nKEVSUk9SLCAiTlVMTCBwcm9hbGxhcmd0eXBlcywgYnV0IG1vcmUgcGFyYW1ldGVy cyB0aGFuIGFyZ3MiKTsKKwkJZGVjb25zdHJ1Y3RfYXJyYXkoRGF0dW1HZXRBcnJheVR5cGVQKGFs bHR5cGVzKSwKKwkJCQkJCSAgT0lET0lELCA0LCAndCcsICdpJywKKwkJCQkJCSAgJnZhbHVlcywg Jm51bGxzLCAmbmVsZW1zKTsKKwkJaWYgKG5lbGVtcyAhPSBsaXN0X2xlbmd0aChub2RlLT5wYXJh bWV0ZXJzKSkKKwkJCWVsb2coRVJST1IsICJtaXNtYXRjaGVkIHByb2FsbGFyZ2F0eXBlcyIpOwor CQlmb3IgKGkgPSAwOyBpIDwgbGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycyk7IGkrKykKKwkJ CXR5cGFycmF5W2ldID0gdmFsdWVzW2ldOworCX0KKwllbHNlCisJeworCQlmb3IgKGkgPSAwOyBp IDwgbGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycyk7IGkrKykKKwkJCSB0eXBhcnJheVtpXSA9 IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV07CisJfQorCisJLyoKKwkgKiBJZiB0aGVy ZSBhcmUgYW55IGRlZmF1bHQgZXhwcmVzc2lvbnMsIHdlIHJlYWQgdGhlIGRlcGFyc2VkIGV4cHJl c3Npb24gYXMKKwkgKiBhIGxpc3Qgc28gdGhhdCB3ZSBjYW4gYXR0YWNoIHRoZW0gdG8gZWFjaCBh cmd1bWVudC4KKwkgKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9j VHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9hcmdkZWZhdWx0cywgJmlzbnVsbCk7CisJ aWYgKCFpc251bGwpCisJeworCQlkZWZhdWx0cyA9IEZ1bmN0aW9uR2V0RGVmYXVsdHMoRGF0dW1H ZXRUZXh0UCh0bXBkYXR1bSkpOworCQljdXJkZWYgPSBsaXN0X2hlYWQoZGVmYXVsdHMpOworCX0K KwllbHNlCisJeworCQlkZWZhdWx0cyA9IE5JTDsKKwkJY3VyZGVmID0gTlVMTDsKKwl9CisKKwkv KgorCSAqIE5vdyBpdGVyYXRlIG92ZXIgZWFjaCBwYXJhbWV0ZXIgaW4gdGhlIHBhcnNldHJlZSB0 byBjcmVhdGUgdGhlCisJICogcGFyYW1ldGVycyBhcnJheS4KKwkgKi8KKwlwYXJhbXMgPSBOSUw7 CisJdHlwbnVtID0gMDsKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPnBhcmFtZXRlcnMpCisJeworCQlG dW5jdGlvblBhcmFtZXRlciAqcGFyYW0gPSAoRnVuY3Rpb25QYXJhbWV0ZXIgKikgbGZpcnN0KGNl bGwpOworCQlPYmpUcmVlCSAgICpwYXJhbW9iajsKKwkJT2JqVHJlZQkgICAqZGVmYXVsdHZhbDsK KwkJT2JqVHJlZQkgICAqbmFtZTsKKworCQkvKgorCQkgKiBBIFBBUkFNX1RBQkxFIHBhcmFtZXRl ciBpbmRpY2F0ZXMgZW5kIG9mIGlucHV0IGFyZ3VtZW50czsgdGhlCisJCSAqIGZvbGxvd2luZyBw YXJhbWV0ZXJzIGFyZSBwYXJ0IG9mIHRoZSByZXR1cm4gdHlwZS4gIFdlIGlnbm9yZSB0aGVtCisJ CSAqIGhlcmUsIGJ1dCBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBs aXN0IHNvIHRoYXQKKwkJICogd2UgY2FuIGVhc2lseSBwcm9kdWNlIHRoZSByZXR1cm4gdHlwZSBi ZWxvdy4KKwkJICovCisJCWlmIChwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX1RBQkxFKQorCQl7 CisJCQl0YWJsZV9wYXJhbXMgPSBjZWxsOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBW ZXJib3NlIHN5bnRheCBmb3IgcGFyYW1hdGVyOiAle21vZGV9cyAle25hbWV9cyAle3R5cGV9VCAl e2RlZmF1bHR9cworCQkgKgorCQkgKiBOb3RlIHRoYXQgJXtuYW1lfXMgaXMgYSBzdHJpbmcgaGVy ZSwgbm90IGFuIGlkZW50aWZpZXI7IHRoZSByZWFzb24KKwkJICogZm9yIHRoaXMgaXMgdGhhdCBh biBhYnNlbnQgcGFyYW1ldGVyIG5hbWUgbXVzdCBwcm9kdWNlIGFuIGVtcHR5CisJCSAqIHN0cmlu Zywgbm90ICIiLCB3aGljaCBpcyB3aGF0IHdvdWxkIGhhcHBlbiBpZiB3ZSB3ZXJlIHRvIHVzZQor CQkgKiAle25hbWV9SSBoZXJlLiAgU28gd2UgYWRkIGFub3RoZXIgbGV2ZWwgb2YgaW5kaXJlY3Rp b24gdG8gYWxsb3cgdXMKKwkJICogdG8gaW5qZWN0IGEgInByZXNlbnQiIHBhcmFtZXRlci4KKwkJ ICovCisJCXBhcmFtb2JqID0gbmV3X29ianRyZWUoIiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVj dChwYXJhbW9iaiwgIiV7bW9kZX1zIiwKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJB TV9JTiA/ICJJTiIgOgorCQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX09VVCA/ICJP VVQiIDoKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9JTk9VVCA/ICJJTk9VVCIg OgorCQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX1ZBUklBRElDID8gIlZBUklBRElD IiA6CisJCQkJCQkJICJJTiIpOworCisJCS8qIE9wdGlvbmFsIHdob2xlc2FsZSBzdXBwcmVzc2lv biBvZiAibmFtZSIgb2NjdXJzIGhlcmUgKi8KKworCQluYW1lID0gbmV3X29ianRyZWUoIiIpOwor CQlhcHBlbmRfc3RyaW5nX29iamVjdChuYW1lLCAiJXtuYW1lfUkiLAorCQkJCQkJCSBwYXJhbS0+ bmFtZSA/IHBhcmFtLT5uYW1lIDogIk5VTEwiKTsKKworCQlhcHBlbmRfYm9vbF9vYmplY3QobmFt ZSwgInByZXNlbnQiLAorCQkJCQkJICAgcGFyYW0tPm5hbWUgPyB0cnVlIDogZmFsc2UpOworCisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXtuYW1lfXMiLCBuYW1lKTsKKworCQlk ZWZhdWx0dmFsID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwkJaWYgKFBvaW50ZXJJc1ZhbGlk KHBhcmFtLT5kZWZleHByKSkKKwkJeworCQkJY2hhciAqZXhwcjsKKworCQkJaWYgKGN1cmRlZiA9 PSBOVUxMKQorCQkJCWVsb2coRVJST1IsICJwcm9hcmdkZWZhdWx0cyBsaXN0IHRvbyBzaG9ydCIp OworCQkJZXhwciA9IGxmaXJzdChjdXJkZWYpOworCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChk ZWZhdWx0dmFsLCAiJXt2YWx1ZX1zIiwgZXhwcik7CisJCQljdXJkZWYgPSBsbmV4dChkZWZhdWx0 cywgY3VyZGVmKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QoZGVmYXVsdHZh bCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmos ICIle3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGFycmF5W3R5cG51 bSsrXSwgLTEpKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7ZGVmYXVs dH1zIiwgZGVmYXVsdHZhbCk7CisKKwkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmpl Y3Rfb2JqZWN0KHBhcmFtb2JqKSk7CisJfQorCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiV7 aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCSAgb2JqZWN0SWQpKTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwg IigiKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIiV7YXJndW1lbnRzOiwgfXMiLCBw YXJhbXMpOworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIikiKTsKKworCWlzZnVuY3Rp b24gPSAocHJvY0Zvcm0tPnByb2tpbmQgIT0gUFJPS0lORF9QUk9DRURVUkUpOworCisJaWYgKGlz ZnVuY3Rpb24pCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICJGVU5DVElPTiAl e3NpZ25hdHVyZX1zIiwgdG1wb2JqKTsKKwllbHNlCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNy ZWF0ZUZ1bmMsICJQUk9DRURVUkUgJXtzaWduYXR1cmV9cyIsIHRtcG9iaik7CisKKwkvKgorCSAq IEEgcmV0dXJuIHR5cGUgY2FuIGFkb3B0IG9uZSBvZiB0d28gZm9ybXM6IGVpdGhlciBhIFtTRVRP Rl0gc29tZV90eXBlLCBvcgorCSAqIGEgVEFCTEUobGlzdC1vZi10eXBlcykuICBXZSBjYW4gdGVs bCB0aGUgc2Vjb25kIGZvcm0gYmVjYXVzZSB3ZSBzYXcgYQorCSAqIHRhYmxlIHBhcmFtIGFib3Zl IHdoaWxlIHNjYW5uaW5nIHRoZSBhcmd1bWVudCBsaXN0LgorCSAqLworCWlmICh0YWJsZV9wYXJh bXMgPT0gTlVMTCkKKwl7CisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJ CSAicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAicGxhaW4iKTsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wb2JqLCAiJXtzZXRvZn1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3JldHNl dCA/ICJTRVRPRiIgOiAiIik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cmV0 dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb3JldHR5 cGUsIC0xKSk7CisJfQorCWVsc2UKKwl7CisJCUxpc3QJICAgKnJldHR5cGVzID0gTklMOworCQlP YmpUcmVlCSAgICpwYXJhbW9iajsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiVEFCTEUi LCAxLAorCQkJCQkJCSAicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAidGFibGUiKTsKKwkJ Zm9yICg7IHRhYmxlX3BhcmFtcyAhPSBOVUxMOyB0YWJsZV9wYXJhbXMgPSBsbmV4dChub2RlLT5w YXJhbWV0ZXJzLCB0YWJsZV9wYXJhbXMpKQorCQl7CisJCQlGdW5jdGlvblBhcmFtZXRlciAqcGFy YW0gPSBsZmlyc3QodGFibGVfcGFyYW1zKTsKKworCQkJcGFyYW1vYmogPSBuZXdfb2JqdHJlZSgi Iik7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChwYXJhbW9iaiwgIiV7bmFtZX1JIiwgcGFyYW0t Pm5hbWUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIle3R5cGV9VCIsCisJ CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBhcnJheVt0eXBudW0rK10sIC0xKSk7CisJ CQlyZXR0eXBlcyA9IGxhcHBlbmQocmV0dHlwZXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtb2Jq KSk7CisJCX0KKworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle3JldHR5cGVzOiwg fXMpIiwgcmV0dHlwZXMpOworCX0KKworCWlmIChpc2Z1bmN0aW9uKQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjcmVhdGVGdW5jLCAiUkVUVVJOUyAle3JldHVybl90eXBlfXMiLCB0bXBvYmopOwor CisJLyogVFJBTlNGT1JNIEZPUiBUWVBFICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlRSQU5T Rk9STSIpOworCisJbnR5cGVzID0gZ2V0X2Z1bmNfdHJmdHlwZXMocHJvY1R1cCwgJnRyZnR5cGVz KTsKKwlmb3IgKGkgPSAwOyBpIDwgbnR5cGVzOyBpKyspCisJeworCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiRk9SIFRZUEUgJXt0eXBlfVQiLCAxLAorCQkJCQkJCSAidHlwZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHRyZnR5cGVzW2ldLCAtMSkpOwor CQl0eXBlcyA9IGxhcHBlbmQodHlwZXMsIHRtcG9iaik7CisJfQorCisJaWYgKHR5cGVzKQorCQlh cHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIiV7Zm9yX3R5cGU6LCB9cyIsIHR5cGVzKTsKKwll bHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJ YXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIiV7dHJhbnNmb3JtX3R5cGV9cyIsIHRt cG9iaik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiTEFOR1VBR0UgJXts YW5ndWFnZX1JIiwKKwkJCQkJCSBOYW1lU3RyKGxhbmdGb3JtLT5sYW5uYW1lKSk7CisKKwlpZiAo aXNmdW5jdGlvbikKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3dp bmRvd31zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2tpbmQgPT0gUFJPS0lORF9XSU5ET1cgPyAi V0lORE9XIiA6ICIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7dm9s YXRpbGl0eX1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09IFBST1ZPTEFUSUxF X1ZPTEFUSUxFID8KKwkJCQkJCQkgIlZPTEFUSUxFIiA6CisJCQkJCQkJIHByb2NGb3JtLT5wcm92 b2xhdGlsZSA9PSBQUk9WT0xBVElMRV9TVEFCTEUgPworCQkJCQkJCSAiU1RBQkxFIiA6ICJJTU1V VEFCTEUiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtwYXJhbGxl bF9zYWZldHl9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9wYXJhbGxlbCA9PSBQUk9QQVJBTExF TF9TQUZFID8KKwkJCQkJCQkgIlBBUkFMTEVMIFNBRkUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnBy b3BhcmFsbGVsID09IFBST1BBUkFMTEVMX1JFU1RSSUNURUQgPworCQkJCQkJCSAiUEFSQUxMRUwg UkVTVFJJQ1RFRCIgOiAiUEFSQUxMRUwgVU5TQUZFIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY3JlYXRlRnVuYywgIiV7bGVha3Byb29mfXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvbGVh a3Byb29mID8gIkxFQUtQUk9PRiIgOiAiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0 ZUZ1bmMsICIle3N0cmljdH1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2lzc3RyaWN0ID8KKwkJ CQkJCQkgIlJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUIiA6CisJCQkJCQkJICJDQUxMRUQgT04g TlVMTCBJTlBVVCIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3Nl Y3VyaXR5X2RlZmluZXJ9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9zZWNkZWYgPworCQkJCQkJ CSAiU0VDVVJJVFkgREVGSU5FUiIgOiAiU0VDVVJJVFkgSU5WT0tFUiIpOworCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle2Nvc3R9cyIsCisJCQkJCQkJIG5ld19vYmp0cmVl X1ZBKCJDT1NUICV7Y29zdH1uIiwgMSwKKwkJCQkJCQkJCQkJImNvc3QiLCBPYmpUeXBlRmxvYXQs CisJCQkJCQkJCQkJCXByb2NGb3JtLT5wcm9jb3N0KSk7CisKKwkJdG1wb2JqID0gbmV3X29ianRy ZWUoIlJPV1MiKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9yb3dzID09IDApCisJCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJZWxzZQorCQkJYXBwZW5kX2Zs b2F0X29iamVjdCh0bXBvYmosICIle3Jvd3N9biIsIHByb2NGb3JtLT5wcm9yb3dzKTsKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIiV7cm93c31zIiwgdG1wb2JqKTsKKworCQl0 bXBvYmogPSBuZXdfb2JqdHJlZSgiU1VQUE9SVCAle25hbWV9cyIpOworCQlpZiAocHJvY0Zvcm0t PnByb3N1cHBvcnQpCisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQkvKgorCQkJICog V2Ugc2hvdWxkIHF1YWxpZnkgdGhlIHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1lIGlmIGl0IHdvdWxk bid0IGJlCisJCQkgKiByZXNvbHZlZCBieSBsb29rdXAgaW4gdGhlIGN1cnJlbnQgc2VhcmNoIHBh dGguCisJCQkgKi8KKwkJCWFyZ3R5cGVzWzBdID0gSU5URVJOQUxPSUQ7CisJCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXBvYmosICIle25hbWV9cyIsCisJCQkJCQkJCSBnZW5lcmF0ZV9mdW5jdGlv bl9uYW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJCQlOSUwsIGFyZ3R5 cGVzLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJCQkJRVhQUl9LSU5E X05PTkUpKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJl c2VudCIsIGZhbHNlKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXtz dXBwb3J0fXMiLCB0bXBvYmopOworCX0KKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykK Kwl7CisJCURlZkVsZW0JKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlPYmpU cmVlCSAgICp0bXBvYmo7CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09 IDApCisJCXsKKwkJCVZhcmlhYmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICop IGRlZmVsLT5hcmc7CisJCQljaGFyICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0 bXQpOworCisJCQl0bXBvYmogPSBkZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3Rt dC0+bmFtZSwgdmFsdWUpOworCQkJc2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJCX0KKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVGdW5jLCAi JXtzZXRfb3B0aW9uczogfXMiLCBzZXRzKTsKKworCS8qIEFkZCB0aGUgZnVuY3Rpb24gZGVmaW5p dGlvbiAqLworCSh2b2lkKSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwgQW51bV9w Z19wcm9jX3Byb3NxbGJvZHksICZpc251bGwpOworCWlmIChwcm9jRm9ybS0+cHJvbGFuZyA9PSBT UUxsYW5ndWFnZUlkICYmICFpc251bGwpCisJeworCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJ aW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCXByaW50X2Z1bmN0aW9uX3NxbGJvZHkoJmJ1ZiwgcHJv Y1R1cCk7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7ZGVmaW5pdGlv bn1zIiwgYnVmLmRhdGEpOworCX0KKwllbHNlIGlmIChwcm9iaW4gPT0gTlVMTCkKKwl7CisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICJBUyAle2RlZmluaXRpb259TCIsCisJCQkJ CQkJIHNvdXJjZSk7CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0 ZUZ1bmMsICJBUyAle29iamZpbGV9TCIsIHByb2Jpbik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGNyZWF0ZUZ1bmMsICIsICV7c3ltYm9sfUwiLCBzb3VyY2UpOworCX0KKworCVJlbGVhc2VTeXND YWNoZShsYW5nVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwlyZXR1cm4gY3Jl YXRlRnVuYzsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgY29t bWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVPcENsYXNzU3RtdChD b2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb3Bjb2lkID0gY21kLT5kLmNyZWF0ZW9w Yy5hZGRyZXNzLm9iamVjdElkOworCUhlYXBUdXBsZSAgIG9wY1R1cDsKKwlIZWFwVHVwbGUgICBv cGZUdXA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUZvcm1fcGdfb3BjbGFzcyBvcGNG b3JtOworCU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wb2JqOworCUxpc3QJICAg Kmxpc3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qIERvbid0IGRlcGFyc2Ugc3FsIGNvbW1h bmRzIGdlbmVyYXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNpb24gKi8KKwlpZiAoY21kLT5pbl9l eHRlbnNpb24pCisJCXJldHVybiBOVUxMOworCisJb3BjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENM QU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGNvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo b3BjVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wY2xhc3Mg d2l0aCBPSUQgJXUiLCBvcGNvaWQpOworCW9wY0Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRT VFJVQ1Qob3BjVHVwKTsKKworCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwg b3BjRm9ybS0+b3BjZmFtaWx5KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRo IE9JRCAldSIsIG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFt aWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgor CSAqIENSRUFURSBPUEVSQVRPUiBDTEFTUyAle2lkZW50aXR5fUQgJXtkZWZhdWx0fXMgRk9SIFRZ UEUgJXt0eXBlfVQgVVNJTkcKKwkgKiAle2FtbmFtZX1JICV7b3BmYW1pbHl9cyBBUyAle2l0ZW1z OiwgfXMKKwkgKi8KKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIENM QVNTICV7aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGNGb3JtLT5vcGNuYW1lc3BhY2Us CisJCQkJCQkJCQkJCQkgICBOYW1lU3RyKG9wY0Zvcm0tPm9wY25hbWUpKSk7CisKKwkvKiBBZGQg dGhlIERFRkFVTFQgY2xhdXNlICovCisJYXBwZW5kX3N0cmluZ19vYmplY3Qoc3RtdCwgIiV7ZGVm YXVsdH1zIiwKKwkJCQkJCSBvcGNGb3JtLT5vcGNkZWZhdWx0ID8gIkRFRkFVTFQiIDogIiIpOwor CisJLyogQWRkIHRoZSBGT1IgVFlQRSBjbGF1c2UgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChz dG10LCAiRk9SIFRZUEUgJXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9w Y0Zvcm0tPm9wY2ludHlwZSwgLTEpKTsKKworCS8qIEFkZCB0aGUgVVNJTkcgY2xhdXNlICovCisJ YXBwZW5kX3N0cmluZ19vYmplY3Qoc3RtdCwgIlVTSU5HICV7YW1uYW1lfUkiLCBnZXRfYW1fbmFt ZShvcGNGb3JtLT5vcGNtZXRob2QpKTsKKworCS8qCisJICogQWRkIHRoZSBGQU1JTFkgY2xhdXNl OyBidXQgaWYgaXQgaGFzIHRoZSBzYW1lIG5hbWUgYW5kIG5hbWVzcGFjZSBhcyB0aGUKKwkgKiBv cGNsYXNzLCB0aGVuIGhhdmUgaXQgZXhwYW5kIHRvIGVtcHR5LCBiZWNhdXNlIGl0IHdvdWxkIGNh dXNlIGEgZmFpbHVyZQorCSAqIGlmIHRoZSBvcGZhbWlseSB3YXMgY3JlYXRlZCBpbnRlcm5hbGx5 LgorCSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJGQU1JTFkgJXtvcGZhbWlseX1EIiwg MSwKKwkJCQkJCSAib3BmYW1pbHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVT dHIob3BmRm9ybS0+b3BmbmFtZSkpKTsKKworCWlmIChzdHJjbXAoTmFtZVN0cihvcGZGb3JtLT5v cGZuYW1lKSwgTmFtZVN0cihvcGNGb3JtLT5vcGNuYW1lKSkgPT0gMCAmJgorCQlvcGZGb3JtLT5v cGZuYW1lc3BhY2UgPT0gb3BjRm9ybS0+b3BjbmFtZXNwYWNlKQorCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0 bXQsICIle29wZmFtaWx5fXMiLCAgdG1wb2JqKTsKKworCS8qCisJICogQWRkIHRoZSBpbml0aWFs IGl0ZW0gbGlzdC4gIE5vdGUgd2UgYWx3YXlzIGFkZCB0aGUgU1RPUkFHRSBjbGF1c2UsIGV2ZW4K KwkgKiB3aGVuIGl0IGlzIGltcGxpY2l0IGluIHRoZSBvcmlnaW5hbCBjb21tYW5kLgorCSAqLwor CXRtcG9iaiA9IG5ld19vYmp0cmVlKCJTVE9SQUdFIik7CisJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zvcm0t Pm9wY2tleXR5cGUgIT0gSW52YWxpZE9pZCA/CisJCQkJCQkJCQkJCSAgb3BjRm9ybS0+b3Bja2V5 dHlwZSA6IG9wY0Zvcm0tPm9wY2ludHlwZSwKKwkJCQkJCQkJCQkJICAtMSkpOworCWxpc3QgPSBs aXN0X21ha2UxKG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogQWRkIHRoZSBkZWNs YXJlZCBvcGVyYXRvcnMgKi8KKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5jcmVhdGVvcGMub3BlcmF0 b3JzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKm9wZXIgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRy ZWUJICAgKnRtcG9iajsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiT1BFUkFUT1IgJXtu dW19biAle29wZXJhdG9yfU8oJXtsdHlwZX1ULCAle3J0eXBlfVQpIiwKKwkJCQkJCQkgNCwKKwkJ CQkJCQkgIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVyLT5udW1iZXIsCisJCQkJCQkJICJvcGVy YXRvciIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcGVyLT5vYmplY3QpLAorCQkJ CQkJCSJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUo b3Blci0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkicnR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBB ZGQgdGhlIEZPUiBTRUFSQ0ggLyBGT1IgT1JERVIgQlkgY2xhdXNlICovCisJCWlmIChvcGVyLT5z b3J0ZmFtaWx5ID09IEludmFsaWRPaWQpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIle3B1cnBvc2V9cyIsICJGT1IgU0VBUkNIIik7CisJCWVsc2UKKwkJeworCQkJT2JqVHJlZQkg ICAqdG1wb2JqMjsKKworCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgT1JERVIgQlkg JXtvcGZhbWlseX1EIiwgMCk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmoyLCAib3Bm YW1pbHkiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yRmFt aWx5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBvcGVyLT5zb3J0ZmFtaWx5KSk7CisJCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3B1cnBvc2V9cyIsIHRtcG9iajIpOworCQl9 CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ fQorCisJLyogQWRkIHRoZSBkZWNsYXJlZCBzdXBwb3J0IGZ1bmN0aW9ucyAqLworCWZvcmVhY2go Y2VsbCwgY21kLT5kLmNyZWF0ZW9wYy5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIg KnByb2MgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRtcG9iajsKKwkJSGVhcFR1cGxl CXByb2NUdXA7CisJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJT2lkCQkgICAqcHJvYXJndHlw ZXM7CisJCUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7CisJCWludAkJCWk7CisKKwkJcHJvY1R1cCA9 IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2MtPm9iamVjdCkp OworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJcHJv Y0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIkZVTkNUSU9OICV7bnVtfW4gKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAl e2Z1bmN0aW9ufUQiLAorCQkJCQkJCSA0LAorCQkJCQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIs IHByb2MtPm51bWJlciwKKwkJCQkJCQkgImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkgInJ0eXBl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmln aHR0eXBlLCAtMSksCisJCQkJCQkJICJmdW5jdGlvbiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJCSAgTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKworCQlwcm9hcmd0eXBlcyA9 IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9y bS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJlZQkgICAqYXJnOworCisJCQlhcmcgPSBu ZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJYXJnbGlzdCA9IGxh cHBlbmQoYXJnbGlzdCwgbmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJCX0KKworCQlhcHBlbmRf Zm9ybWF0X3N0cmluZyh0bXBvYmosICIoIik7CisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2Jq LCAiJXthcmd0eXBlczosIH1UIiwgYXJnbGlzdCk7CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRt cG9iaiwgIikiKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwkJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJYXBwZW5kX2Fy cmF5X29iamVjdChzdG10LCAiQVMgJXtpdGVtczosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lz Q2FjaGUob3BmVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKworCXJldHVybiBzdG10 OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVRyaWdTdG10IChDUkVBVEUgT1BFUkFUT1Ig RkFNSUxZKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhh dCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVh dGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wRmFt aWx5KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZSAgIG9wZlR1 cDsKKwlIZWFwVHVwbGUgICBhbVR1cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJRm9y bV9wZ19hbSAgYW1Gb3JtOworCU9ialRyZWUJICAgKmNvcGZTdG10OworCisJb3BmVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJ b3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCWFtVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKG9wZkZvcm0tPm9wZm1l dGhvZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChhbVR1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1IiwKKwkJCSBvcGZGb3JtLT5v cGZtZXRob2QpOworCWFtRm9ybSA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOworCisJ Y29wZlN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50 aXR5fUQgVVNJTkcgJXthbW5hbWV9SSIsCisJCQkJCQkJICAyLAorCQkJCQkJCSAgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZG b3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICAgTmFtZVN0cihvcGZGb3JtLT5vcGZu YW1lKSksCisJCQkJCQkJICAiYW1uYW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihhbUZvcm0t PmFtbmFtZSkpOworCisJUmVsZWFzZVN5c0NhY2hlKGFtVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUo b3BmVHVwKTsKKworCXJldHVybiBjb3BmU3RtdDsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9DcmVhdGVQb2xpY3lTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CUNyZWF0ZVBvbGljeVN0bXQgKm5vZGUgPSAoQ3JlYXRlUG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7 CisJT2JqVHJlZQkgICAqcG9saWN5OworCisJcG9saWN5ID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSBQT0xJQ1kgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlU3Ry aW5nLCBub2RlLT5wb2xpY3lfbmFtZSk7CisKKwkvKiBhZGQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZm ICovCisJYWRkX3BvbGljeV9jbGF1c2VzKHBvbGljeSwgb2JqZWN0SWQsIG5vZGUtPnJvbGVzLCAh IW5vZGUtPnF1YWwsCisJCQkJCSAgICEhbm9kZS0+d2l0aF9jaGVjayk7CisKKwlyZXR1cm4gcG9s aWN5OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyUG9saWN5U3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlclBvbGljeVN0bXQgKm5vZGUgPSAo QWx0ZXJQb2xpY3lTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpwb2xpY3k7CisKKwlw b2xpY3kgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgUE9MSUNZICV7aWRlbnRpdHl9SSIsIDEsCisJ CQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cG9saWN5X25hbWUpOworCisJ LyogYWRkIHRoZSByZXN0IG9mIHRoZSBzdHVmZiAqLworCWFkZF9wb2xpY3lfY2xhdXNlcyhwb2xp Y3ksIG9iamVjdElkLCBub2RlLT5yb2xlcywgISFub2RlLT5xdWFsLAorCQkJCQkgICAhIW5vZGUt PndpdGhfY2hlY2spOworCisJcmV0dXJuIHBvbGljeTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBD cmVhdGVTY2hlbWFTdG10LgorICoKKyAqIEdpdmVuIGEgc2NoZW1hIE9JRCBhbmQgdGhlIHBhcnNl dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0NyZWF0ZVNjaGVtYVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3Jl YXRlU2NoZW1hU3RtdCAqbm9kZSA9IChDcmVhdGVTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlP YmpUcmVlCQkJICpjcmVhdGVTY2hlbWE7CisJT2JqVHJlZQkJCSAqYXV0aDsKKworCS8qCisJICog VmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMg JXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMKKwkgKi8KKwljcmVhdGVTY2hlbWEgPSBuZXdfb2Jq dHJlZSgiQ1JFQVRFIFNDSEVNQSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU2No ZW1hLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAi SUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTY2hl bWEsICIle25hbWV9SSIsIG5vZGUtPnNjaGVtYW5hbWUpOworCisJYXV0aCA9IG5ld19vYmp0cmVl KCJBVVRIT1JJWkFUSU9OIik7CisJaWYgKG5vZGUtPmF1dGhyb2xlKQorCQlhcHBlbmRfc3RyaW5n X29iamVjdChhdXRoLCAiJXthdXRob3JpemF0aW9uX3JvbGV9SSIsCisJCQkJCQkJIGdldF9yb2xl c3BlY19uYW1lKG5vZGUtPmF1dGhyb2xlKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2Jq ZWN0KGF1dGgsICIle2F1dGhvcml6YXRpb25fcm9sZX1JICIpOworCQlhcHBlbmRfYm9vbF9vYmpl Y3QoYXV0aCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNy ZWF0ZVNjaGVtYSwgIiV7YXV0aG9yaXphdGlvbn1zIiwgYXV0aCk7CisKKwlyZXR1cm4gY3JlYXRl U2NoZW1hOworfQorCisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgZG9tYWlu LgorICovCitzdGF0aWMgY2hhciAqCitEb21haW5HZXREZWZhdWx0KEhlYXBUdXBsZSBkb21UdXAp Cit7CisJRGF0dW0JZGVmOworCU5vZGUgICAqZGVmdmFsOworCWNoYXIgICAqZGVmc3RyOworCWJv b2wJaXNudWxsOworCisJZGVmID0gU3lzQ2FjaGVHZXRBdHRyKFRZUEVPSUQsIGRvbVR1cCwgQW51 bV9wZ190eXBlX3R5cGRlZmF1bHRiaW4sCisJCQkJCQkJICZpc251bGwpOworCWlmIChpc251bGwp CisJCWVsb2coRVJST1IsICJkb21haW4gXCIlc1wiIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZh bHVlIiwKKwkJCSBOYW1lU3RyKCgoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QoZG9tVHVwKSktPnR5 cG5hbWUpKTsKKwlkZWZ2YWwgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyhkZWYp KTsKKwlkZWZzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBOVUxMIC8qIGRwY29udGV4 dD8gKi8sCisJCQkJCQkJCQkgICBmYWxzZSwgZmFsc2UpOworCisJcmV0dXJuIGRlZnN0cjsKK30K KworLyoKKyAqIERlcGFyc2UgYSBBbHRlckRvbWFpblN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQWx0ZXJEb21haW5TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVl LAorCQkJCQkJT2JqZWN0QWRkcmVzcyBjb25zdHJhaW50QWRkcikKK3sKKwlBbHRlckRvbWFpblN0 bXQgKm5vZGUgPSAoQWx0ZXJEb21haW5TdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZG9t VHVwOworCUZvcm1fcGdfdHlwZSBkb21Gb3JtOworCU9ialRyZWUJICAgKmFsdGVyRG9tOworCWNo YXIJICAgKmZtdDsKKwljb25zdCBjaGFyICp0eXBlOworCisJLyogQUxURVIgRE9NQUlOIERST1Ag Q09OU1RSQUlOVCBpcyBoYW5kbGVkIGJ5IHRoZSBEUk9QIHN1cHBvcnQgY29kZSAqLworCWlmIChu b2RlLT5zdWJ0eXBlID09ICdYJykKKwkJcmV0dXJuIE5VTEw7CisKKwlkb21UdXAgPSBTZWFyY2hT eXNDYWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChkb21U dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZG9tYWluIHdpdGgg T0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJZG9tRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNU UlVDVChkb21UdXApOworCisJc3dpdGNoIChub2RlLT5zdWJ0eXBlKQorCXsKKwkJY2FzZSAnVCc6 CisJCQkvKiBTRVQgREVGQVVMVCAvIERST1AgREVGQVVMVCAqLworCQkJaWYgKG5vZGUtPmRlZiA9 PSBOVUxMKQorCQkJeworCQkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJCXR5cGUgPSAiZHJv cCBkZWZhdWx0IjsKKwkJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRv bSwgIiV7aWRlbnRpdHl9RCBEUk9QIERFRkFVTFQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIE5hbWVT dHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlmbXQgPSAi QUxURVIgRE9NQUlOIjsKKwkJCQl0eXBlID0gInNldCBkZWZhdWx0IjsKKwkJCQlhbHRlckRvbSA9 IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJ CQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCBTRVQgREVGQVVM VCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVz cGFjZSwKKwkJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRG9tLCAiJXtkZWZhdWx0fXMiLCBEb21haW5HZXRE ZWZhdWx0KGRvbVR1cCkpOworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSAnTic6CisJCQkvKiBE Uk9QIE5PVCBOVUxMICovCisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAiZHJv cCBub3QgbnVsbCI7CisJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9t LCAiJXtpZGVudGl0eX1EIERST1AgTk9UIE5VTEwiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3Ry KGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQlicmVhazsKKwkJY2FzZSAnTyc6CisJCQkvKiBTRVQg Tk9UIE5VTEwgKi8KKwkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJzZXQgbm90 IG51bGwiOworCQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgdHlwZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7 aWRlbnRpdHl9RCBTRVQgTk9UIE5VTEwiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZv cm0tPnR5cG5hbWUpKSk7CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJCQkvKiBBREQgQ09OU1RS QUlOVC4gIE9ubHkgQ0hFQ0sgY29uc3RyYWludHMgYXJlIHN1cHBvcnRlZCBieSBkb21haW5zICov CisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAiYWRkIGNvbnN0cmFpbnQiOwor CQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgdHlwZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9 RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCS8q IGEgbmV3IGNvbnN0cmFpbnQgaGFzIGEgbmFtZSBhbmQgZGVmaW5pdGlvbiAqLworCQkJYXBwZW5k X3N0cmluZ19vYmplY3QoYWx0ZXJEb20sICJBREQgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFt ZX1zIiwKKwkJCQkJCQkJIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyYWludEFkZHIub2JqZWN0 SWQpKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRG9tLCAiJXtkZWZpbml0aW9ufXMi LAorCQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyYWlu dEFkZHIub2JqZWN0SWQpKTsKKwkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCS8qIFZBTElEQVRF IENPTlNUUkFJTlQgKi8KKwkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJ2YWxp ZGF0ZSBjb25zdHJhaW50IjsKKworCQkJLyoKKwkJCSAqIFByb2Nlc3Mgc3VidHlwZT1zcGVjaWZp YyBvcHRpb25zLiBWYWxpZGF0aW9uIGEgY29uc3RyYWludAorCQkJICogcmVxdWlyZXMgaXRzIG5h bWUuCisJCQkgKi8KKwkJCWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIs IE9ialR5cGVTdHJpbmcsIHR5cGUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20s ICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZv cm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5h bWUpKSk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRvbSwgIlZBTElEQVRFIENPTlNU UkFJTlQgJXtjb25zdHJhaW50X25hbWV9cyIsIG5vZGUtPm5hbWUpOworCisJCQlicmVhazsKKwkJ ZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHN1YnR5cGUgJWMiLCBub2RlLT5zdWJ0 eXBlKTsKKwl9CisKKwkvKiBkb25lICovCisJUmVsZWFzZVN5c0NhY2hlKGRvbVR1cCk7CisKKwly ZXR1cm4gYWx0ZXJEb207Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU2VxU3RtdC4KKyAq CisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZSBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFu ZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVTZXFTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUJKmNyZWF0ZVNlcTsKKwlPYmpUcmVl CSp0bXBvYmo7CisJUmVsYXRpb24JcmVsYXRpb247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNl cWRhdGE7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3Jt OworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQ3JlYXRlU2VxU3RtdCAq Y3JlYXRlU2VxU3RtdCA9IChDcmVhdGVTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICog U2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRF IFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlp ZiAoY3JlYXRlU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCXNlcWRh dGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElkKTsKKworCXJlbGF0aW9uID0gcmVsYXRp b25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZWwgPSB0YWJsZV9vcGVuKFNl cXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hT eXNDYWNoZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKG9iamVj dElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlICV1IiwKKwkJCSBvYmplY3RJZCk7CisK KwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisKKwkv KgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFNF UVVFTkNFICV7aWRlbnRpdHl9RAorCSAqLworCWNyZWF0ZVNlcSA9IG5ld19vYmp0cmVlKCJDUkVB VEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVNlcSwgIiV7cGVyc2lzdGVuY2V9 cyIsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJz aXN0ZW5jZSkpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9u LT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUocmVsYXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTZXEsICJTRVFVRU5D RSAle2lkZW50aXR5fUQiLCB0bXBvYmopOworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLwor CWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ2FjaGUoY3JlYXRlU2VxLCBzZXFm b3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUo Y3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVw YXJzZV9TZXFfSW5jcmVtZW50QnkoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1z ID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWludmFsdWUoY3JlYXRlU2VxLCBzZXFmb3Jt LCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUo Y3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVw YXJzZV9TZXFfU3RhcnR3aXRoKGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9 IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQoY3JlYXRlU2VxLCBzZXFkYXRhKSk7 CisKKwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCWFw cGVuZF9hcnJheV9vYmplY3QoY3JlYXRlU2VxLCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsK KworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2Uo cmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlU2VxOworfQorCisv KgorICogRGVwYXJzZSBhIENyZWF0ZVN0bXQgKENSRUFURSBUQUJMRSkuCisgKgorICogR2l2ZW4g YSB0YWJsZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJQ3JlYXRlU3RtdCAqbm9kZSA9IChDcmVhdGVTdG10ICopIHBhcnNldHJlZTsK KwlSZWxhdGlvbglyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJTGlzdAkgICAqZHBjb250ZXh0OworCU9ialRyZWUJKmNyZWF0ZVN0bXQ7CisJT2Jq VHJlZQkqdG1wb2JqOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsK KworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle3BlcnNpc3RlbmNl fXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFtPRgorCSAqICV7b2ZfdHlw ZX1UIHwgUEFSVElUSU9OIE9GICV7cGFyZW50X2lkZW50aXR5fURdICV7dGFibGVfZWxlbWVudHN9 cworCSAqICV7aW5oZXJpdHN9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7 d2l0aF9jbGF1c2V9cworCSAqICV7b25fY29tbWl0fXMgJXt0YWJsZXNwYWNlfXMKKwkgKi8KKwlj cmVhdGVTdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY3JlYXRlU3RtdCwgIiV7cGVyc2lzdGVuY2V9cyIsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNl X3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSkpOworCisJYXBwZW5kX2Zvcm1h dF9zdHJpbmcoY3JlYXRlU3RtdCwgIlRBQkxFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChj cmVhdGVTdG10LCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlz dHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxh dGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNy ZWF0ZVN0bXQsICIle2lkZW50aXR5fUQiLCB0bXBvYmopOworCisJZHBjb250ZXh0ID0gZGVwYXJz ZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJ CQlvYmplY3RJZCk7CisKKwkvKgorCSAqIFR5cGVkIHRhYmxlcyBhbmQgcGFydGl0aW9ucyB1c2Ug YSBzbGlnaHRseSBkaWZmZXJlbnQgZm9ybWF0IHN0cmluZzogd2UKKwkgKiBtdXN0IG5vdCBwdXQg dGFibGVfZWxlbWVudHMgd2l0aCBwYXJlbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nLAor CSAqIGJlY2F1c2UgaWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMgdGhlIHBhcmVucyBtdXN0IG5vdCBi ZSBlbWl0dGVkOyBhbmQKKwkgKiBhbHNvLCB0eXBlZCB0YWJsZXMgZG8gbm90IGFsbG93IGZvciBp bmhlcml0YW5jZS4KKwkgKi8KKwlpZiAobm9kZS0+b2ZUeXBlbmFtZSB8fCBub2RlLT5wYXJ0Ym91 bmQpCisJeworCQlMaXN0ICAgICAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogV2Ug Y2FuJ3QgcHV0IHRhYmxlIGVsZW1lbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nIGFzIGFu IGFycmF5CisJCSAqIHN1cnJvdW5kZWQgYnkgcGFyZW5zIGhlcmUsIGJlY2F1c2UgYW4gZW1wdHkg Y2xhdXNlIHdvdWxkIGNhdXNlIGEKKwkJICogc3ludGF4IGVycm9yLiAgVGhlcmVmb3JlLCB3ZSB1 c2UgYW4gaW5kaXJlY3Rpb24gZWxlbWVudCBhbmQgc2V0CisJCSAqIHByZXNlbnQ9ZmFsc2Ugd2hl biB0aGVyZSBhcmUgbm8gZWxlbWVudHMuCisJCSAqLworCQlpZiAobm9kZS0+b2ZUeXBlbmFtZSkK KwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3R5cGUocmVsYXRpb24tPnJkX3JlbC0+ cmVsb2Z0eXBlLCAtMSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiT0Yg JXtvZl90eXBlfVQiLCB0bXBvYmopOworCQl9CisJCWVsc2UKKwkJeworCQkJTGlzdCAgICAgKnBh cmVudHM7CisJCQlPYmpFbGVtICAqZWxlbTsKKworCQkJcGFyZW50cyA9IGRlcGFyc2VfSW5oUmVs YXRpb25zKG9iamVjdElkKTsKKwkJCWVsZW0gPSAoT2JqRWxlbSAqKSBsaW5pdGlhbChwYXJlbnRz KTsKKworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHBhcmVudHMpID09IDEpOworCisJCQlhcHBlbmRf Zm9ybWF0X3N0cmluZyhjcmVhdGVTdG10LCAiUEFSVElUSU9OIE9GIik7CisKKwkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcmVudF9pZGVudGl0eX1EIiwKKwkJCQkJCQkJ IGVsZW0tPnZhbHVlLm9iamVjdCk7CisJCX0KKworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxl RWxlbWVudHMocmVsYXRpb24sIG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJ CSAgdHJ1ZSwgICAgICAvKiB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOyAgICAv KiBub3QgY29tcG9zaXRlICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxl ZWx0cywgb2JqZWN0SWQsIEludmFsaWRPaWQpOworCisJCWlmICh0YWJsZWVsdHMgPT0gTklMKQor CQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3Qo dG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJfQorCQllbHNlCisJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiKCV7ZWxlbWVudHM6LCB9cykiLCAxLAorCQkJCQkJCQkgImVsZW1lbnRzIiwg T2JqVHlwZUFycmF5LCB0YWJsZWVsdHMpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZVN0bXQsICIle3RhYmxlX2VsZW1lbnRzfXMiLCB0bXBvYmopOworCX0KKwllbHNlCisJeworCQlM aXN0ICAgICAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgbm8gbmVl ZCB0byBwcm9jZXNzIExJS0UgY2xhdXNlcyBzZXBhcmF0ZWx5OyB0aGV5IGhhdmUKKwkJICogYWxy ZWFkeSBiZWVuIHRyYW5zZm9ybWVkIGludG8gY29sdW1ucyBhbmQgY29uc3RyYWludHMuCisJCSAq LworCisJCS8qCisJCSAqIFByb2Nlc3MgdGFibGUgZWxlbWVudHM6IGNvbHVtbiBkZWZpbml0aW9u cyBhbmQgY29uc3RyYWludHMuICBPbmx5CisJCSAqIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgYXJl IG9idGFpbmVkIGZyb20gdGhlIHBhcnNlIG5vZGUgaXRzZWxmLiAgVG8KKwkJICogZ2V0IGNvbnN0 cmFpbnRzIHdlIHJlbHkgb24gcGdfY29uc3RyYWludCwgYmVjYXVzZSB0aGUgcGFyc2Ugbm9kZQor CQkgKiBtaWdodCBiZSBtaXNzaW5nIHNvbWUgdGhpbmdzIHN1Y2ggYXMgdGhlIG5hbWUgb2YgdGhl IGNvbnN0cmFpbnRzLgorCQkgKi8KKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRz KHJlbGF0aW9uLCBub2RlLT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIGZhbHNl LCAgICAgLyogbm90IHR5cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7ICAgIC8qIG5v dCBjb21wb3NpdGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRz LCBvYmplY3RJZCwgSW52YWxpZE9pZCk7CisKKwkJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVT dG10LCAiKCV7dGFibGVfZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCisJCS8qCisJCSAq IEFkZCBpbmhlcml0YW5jZSBzcGVjaWZpY2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRo ZSBsaXN0IG9mCisJCSAqIHBhcmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhh dCBtYXkgbGFjayB0aGUgYWN0dWFsCisJCSAqIHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50 IHJlbGF0aW9ucy4gIFJhdGhlciB0aGFuIHRyeWluZyB0bworCQkgKiByZS1yZXNvbHZlIHRoZW0g ZnJvbSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSAqIG1v cmUgYWNjdXJhdGUgYW5kIGNvbnZlbmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgor CQkgKi8KKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIklOSEVSSVRTIik7CisJCWlmIChsaXN0X2xl bmd0aChub2RlLT5pbmhSZWxhdGlvbnMpID4gMCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1w b2JqLCAiKCV7cGFyZW50czosIH1EKSIsIGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKSk7 CisJCWVsc2UKKwkJeworCQkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIigle3BhcmVudHM6 LCB9RCkiKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2Up OworCQl9CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2luaGVyaXRzfXMi LCB0bXBvYmopOworCX0KKworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJ aWYgKG5vZGUtPnRhYmxlc3BhY2VuYW1lKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIle3RhYmxlc3BhY2V9SSIsIG5vZGUtPnRhYmxlc3BhY2VuYW1lKTsKKwllbHNlCisJeworCQlh cHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiJXt0YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX2Jv b2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNyZWF0ZVN0bXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcG9iaik7CisJYXBwZW5kX29i amVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7b25fY29tbWl0fXMiLAorCQkJCQkJICBkZXBhcnNl X09uQ29tbWl0Q2xhdXNlKG5vZGUtPm9uY29tbWl0KSk7CisKKwkvKiBGT1IgVkFMVUVTIGNsYXVz ZSAqLworCWlmIChub2RlLT5wYXJ0Ym91bmQpCisJeworCQkvKgorCQkgKiBHZXQgcGdfY2xhc3Mu cmVscGFydGJvdW5kLiBXZSBjYW5ub3QgdXNlIHBhcnRib3VuZCBpbiB0aGUKKwkJICogcGFyc2V0 cmVlIGRpcmVjdGx5IGFzIGl0J3MgdGhlIG9yaWdpbmFsIHBhcnRib3VuZCBleHByZXNzaW9uCisJ CSAqIHdoaWNoIGhhdmVuJ3QgYmVlbiB0cmFuc2Zvcm1lZC4KKwkJICovCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcnRpdGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkgUmVs YXRpb25HZXRQYXJ0aXRpb25Cb3VuZChvYmplY3RJZCkpOworCX0KKworCS8qIFBBUlRJVElPTiBC WSBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiUEFSVElUSU9OIEJZIik7CisJaWYg KHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZpbml0aW9ufXMiLCBwZ19nZXRf cGFydGtleWRlZl9zaW1wbGUob2JqZWN0SWQpKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9v YmplY3QodG1wb2JqLCAiJXtkZWZpbml0aW9ufXMiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZVN0bXQsICIle3BhcnRpdGlvbl9ieX1zIiwgdG1wb2JqKTsKKworCS8qIFVTSU5HIGNsYXVzZSAq LworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJVU0lORyIpOworCWlmIChub2RlLT5hY2Nlc3NNZXRo b2QpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7YWNjZXNzX21ldGhvZH1JIiwg bm9kZS0+YWNjZXNzTWV0aG9kKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1w b2JqLCAiJXthY2Nlc3NfbWV0aG9kfUkiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwg InByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQs ICIle2FjY2Vzc19tZXRob2R9cyIsIHRtcG9iaik7CisKKwkvKiBXSVRIIGNsYXVzZSAqLworCXRt cG9iaiA9IG5ld19vYmp0cmVlKCJXSVRIIik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlv bnMpCisJeworCQlPYmpUcmVlICAgICp0bXBvYmoyOworCQlEZWZFbGVtICpvcHQgPSAoRGVmRWxl bSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJdG1wb2JqMiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZh bHNlKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqMikp OworCX0KKworCWlmIChsaXN0KQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle3dp dGg6LCB9cykiLCBsaXN0KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJw cmVzZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7 d2l0aF9jbGF1c2V9cyIsIHRtcG9iaik7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVTdG10OworfQorCisvKgorICogRGVwYXJz ZSBhIERlZmluZVN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBzZWNvbmRhcnlP YmopCit7CisJRGVmaW5lU3RtdCAqZGVmaW5lID0gKERlZmluZVN0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUJICAgKmRlZlN0bXQgPSBOVUxMOworCisJc3dpdGNoIChkZWZpbmUtPmtpbmQpCisJ eworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0 bXRfT3BlcmF0b3Iob2JqZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVD VF9UWVBFOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UeXBlKG9iamVjdElkLCBk ZWZpbmUpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBv cnRlZCBvYmplY3Qga2luZCIpOworCX0KKworCXJldHVybiBkZWZTdG10OworfQorCisvKgorICog RGVwYXJzZSBhIERlZmluZVN0bXQgKENSRUFURSBPUEVSQVRPUikKKyAqCisgKiBHaXZlbiBhIHRy aWdnZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9i alRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVm aW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIG9wclR1cDsKKwlPYmpUcmVlCSAgICpz dG10OworCU9ialRyZWUJICAgKnRtcG9iajsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUZvcm1f cGdfb3BlcmF0b3Igb3ByRm9ybTsKKworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVST0lE LCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9w clR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3 aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0b3IpIEdF VFNUUlVDVChvcHJUdXApOworCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFU T1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCSAgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIFBST0NF RFVSRSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJQUk9DRURVUkU9JXtwcm9jZWR1cmV9 RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwcm9jZWR1cmUiLAorCQkJ CQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5v cHJjb2RlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisKKwkvKiBMRUZUQVJHICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkxFRlRBUkc9 IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxlZnRhcmciKTsKKwlpZiAo T2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w b2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5v cHJsZWZ0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNl bnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisKKwkvKiBSSUdIVEFSRyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJSSUdI VEFSRz0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmlnaHRhcmciKTsK KwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyaWdodCkpCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcG9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3By Rm9ybS0+b3BycmlnaHQsIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKworCS8qIENPTU1VVEFUT1IgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiQ09NTVVUQVRPUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi Y29tbXV0YXRvciIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmNvbSkpCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3Blcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZv cm0tPm9wcmNvbSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNl bnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisKKwkvKiBORUdBVE9SICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk5FR0FU T1I9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm5lZ2F0b3IiKTsKKwlp ZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJuZWdhdGUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBvYmosICIle29wZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJuZWdhdGUp KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2Up OworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJ LyogUkVTVFJJQ1QgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUkVTVFJJQ1Q9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RyaWN0Iik7CisJaWYgKE9pZElz VmFsaWQob3ByRm9ybS0+b3BycmVzdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwg IiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJv Y2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcnJlc3QpKTsKKwll bHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogSk9J TiAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJKT0lOPSIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3By am9pbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ib29s X29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogTUVSR0VTICovCisJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIk1FUkdFUyIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJtZXJnZXMiKTsKKwlpZiAoIW9wckZvcm0tPm9wcmNhbm1lcmdlKQorCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIEhBU0hFUyAqLworCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJIQVNIRVMiLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAiaGFzaGVzIik7CisJaWYgKCFvcHJGb3JtLT5vcHJjYW5oYXNoKQorCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3Rt dCwgIigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3ByVHVwKTsK KworCXJldHVybiBzdG10OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBUWVBFIHN0YXRl bWVudC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUoT2lk IG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlICAgdHlwVHVwOwor CU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3Q7CisJ Y2hhcgkgICAqc3RyOworCURhdHVtCQlkZmx0OworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3BnX3R5 cGUgdHlwRm9ybTsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJ ZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1Iiwg b2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsK KworCS8qIFNob3J0Y3V0IHByb2Nlc3NpbmcgZm9yIHNoZWxsIHR5cGVzLiAqLworCWlmICghdHlw Rm9ybS0+dHlwaXNkZWZpbmVkKQorCXsKKwkJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUg VFlQRSIsIDApOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtpZGVudGl0eX1EIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHlwRm9ybS0+dHlwbmFtZSkpKTsKKwkJYXBwZW5kX2Jv b2xfb2JqZWN0KHN0bXQsICJwcmVzZW50IiwgdHJ1ZSk7CisJCVJlbGVhc2VTeXNDYWNoZSh0eXBU dXApOworCQlyZXR1cm4gc3RtdDsKKwl9CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSBUWVBFIiwgMCk7CisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7aWRlbnRpdHl9RCIs CisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCQlOYW1lU3RyKHR5cEZvcm0tPnR5cG5hbWUpKSk7CisJYXBwZW5kX2Jvb2xf b2JqZWN0KHN0bXQsICJwcmVzZW50IiwgdHJ1ZSk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24g Y2xhdXNlICovCisJbGlzdCA9IE5JTDsKKworCS8qIElOUFVUICovCisJdG1wID0gbmV3X29ianRy ZWVfVkEoIihJTlBVVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaW5w dXQiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkgdHlwRm9ybS0+dHlwaW5wdXQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIE9VVFBVVCAqLworCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJPVVRQVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm91dHB1 dCIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCSB0eXBGb3JtLT50eXBvdXRwdXQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFJFQ0VJVkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiUkVDRUlWRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVj ZWl2ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHJlY2VpdmUpKQorCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBG b3JtLT50eXByZWNlaXZlKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJl c2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCS8qIFNFTkQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0VORD0iLCAxLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic2VuZCIpOworCWlmIChPaWRJc1ZhbGlk KHR5cEZvcm0tPnR5cHNlbmQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2Nl ZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzZW5kKSk7CisJZWxzZQorCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFRZUE1PRF9JTiAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfSU49IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInR5cG1vZF9pbiIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1v ZGluKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29i amVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogVFlQTU9EX09VVCAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJUWVBNT0RfT1VUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJ0eXBtb2Rfb3V0Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kb3V0KSkKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkgdHlwRm9ybS0+dHlwbW9kb3V0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w LCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIEFOQUxZWkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQU5B TFlaRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYW5hbHl6ZSIpOwor CWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGFuYWx5emUpKQorCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBh bmFseXplKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZh bHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CS8qIElOVEVSTkFMTEVOR1RIICovCisJaWYgKHR5cEZvcm0tPnR5cGxlbiA9PSAtMSkKKwl7CisJ CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTlRFUk5BTExFTkdUSD1WQVJJQUJMRSIsIDApOworCX0K KwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5URVJOQUxMRU5HVEg9JXt0eXBs ZW59biIsIDEsCisJCQkJCQkJICJ0eXBsZW4iLCBPYmpUeXBlSW50ZWdlciwgdHlwRm9ybS0+dHlw bGVuKTsKKwl9CisKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qIFBBU1NFREJZVkFMVUUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFTU0VE QllWQUxVRSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwYXNzZWRieXZh bHVlIik7CisJaWYgKCF0eXBGb3JtLT50eXBieXZhbCkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwkvKiBBTElHTk1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi QUxJR05NRU5UPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbGlnbm1l bnQiKTsKKwkvKiBYWFggaXQncyBvZGQgdG8gcmVwcmVzZW50IGFsaWdubWVudCB3aXRoIHNjaGVt YS1xdWFsaWZpZWQgdHlwZSBuYW1lcyAqLworCXN3aXRjaCAodHlwRm9ybS0+dHlwYWxpZ24pCisJ eworCQljYXNlICdkJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmZsb2F0OCI7CisJCQlicmVhazsK KwkJY2FzZSAnaSc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5pbnQ0IjsKKwkJCWJyZWFrOworCQlj YXNlICdzJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmludDIiOworCQkJYnJlYWs7CisJCWNhc2Ug J2MnOgorCQkJc3RyID0gInBnX2NhdGFsb2cuYnBjaGFyIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgYWxpZ25tZW50ICVjIiwgdHlwRm9ybS0+dHlwYWxp Z24pOworCX0KKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2FsaWdufXMiLCBzdHIpOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJdG1wID0g bmV3X29ianRyZWVfVkEoIlNUT1JBR0U9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInN0b3JhZ2UiKTsKKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cHN0b3JhZ2UpCisJeworCQlj YXNlICdwJzoKKwkJCXN0ciA9ICJwbGFpbiI7CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQlz dHIgPSAiZXh0ZXJuYWwiOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJc3RyID0gImV4dGVu ZGVkIjsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCXN0ciA9ICJtYWluIjsKKwkJCWJyZWFr OworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3RvcmFnZSBzcGVjaWZpZXIg JWMiLCB0eXBGb3JtLT50eXBzdG9yYWdlKTsKKwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w LCAiJXtzdG9yYWdlfXMiLCBzdHIpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJLyogQ0FURUdPUlkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi Q0FURUdPUlk9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNhdGVnb3J5 Iik7CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtjYXRlZ29yeX1zIiwKKwkJCQkJCSBw c3ByaW50ZigiJWMiLCB0eXBGb3JtLT50eXBjYXRlZ29yeSkpOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogUFJFRkVSUkVEICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIlBSRUZFUlJFRD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAicHJlZmVycmVkIik7CisJaWYgKCF0eXBGb3JtLT50eXBpc3ByZWZlcnJlZCkKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBERUZBVUxUICovCisJZGZs dCA9IFN5c0NhY2hlR2V0QXR0cihUWVBFT0lELCB0eXBUdXAsCisJCQkJCQkgICBBbnVtX3BnX3R5 cGVfdHlwZGVmYXVsdCwKKwkJCQkJCSAgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJERUZBVUxUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJkZWZhdWx0 Iik7CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVmYXVs dH1zIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkZmx0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEVMRU1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiRUxFTUVOVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZWxl bWVudCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGVsZW0pKQorCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXAsICJlbGVtIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlw Rm9ybS0+dHlwZWxlbSwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJw cmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJLyogREVMSU1JVEVSICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkRFTElN SVRFUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZGVsaW1pdGVyIik7 CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtkZWxpbX1MIiwKKwkJCQkJCSBwc3ByaW50 ZigiJWMiLCB0eXBGb3JtLT50eXBkZWxpbSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ09MTEFUQUJMRSAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJDT0xMQVRBQkxFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJjb2xsYXRhYmxlIik7CisJaWYgKCFPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGNvbGxhdGlvbikp CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29i amVjdChzdG10LCAiJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHR5 cFR1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4u IFNFVC9SRVNFVCAoLi4uKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbFNldE9w dGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJ TGlzdENlbGwgICAqY2VsbDsKKwlPYmpUcmVlCSAgICpyZWxzZXQ7CisJY2hhcgkgICAqZm10Owor CWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0UmVsT3B0aW9uczsK KworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIFJFU0VUfFNFVCAoJXtvcHRpb25z OiwgfXMpCisJICovCisJaWYgKGlzX3Jlc2V0KQorCQlmbXQgPSAiUkVTRVQgIjsKKwllbHNlCisJ CWZtdCA9ICJTRVQgIjsKKworCXJlbHNldCA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwlmb3JlYWNo KGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbQkgICAqZWxlbTsKKwkJ T2JqVHJlZQkgICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJ CXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMgPSBsYXBwZW5k KHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChzZXRzKTsKKwlh cHBlbmRfYXJyYXlfb2JqZWN0KHJlbHNldCwgIigle29wdGlvbnM6LCB9cykiLCBzZXRzKTsKKwor CXJldHVybiByZWxzZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlVHJpZ1N0bXQgKENS RUFURSBUUklHR0VSKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRy ZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRo ZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0 ZVRyaWdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRyaWdT dG10ICpub2RlID0gKENyZWF0ZVRyaWdTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglwZ190 cmlnZ2VyOworCUhlYXBUdXBsZQl0cmlnVHVwOworCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsK KwlPYmpUcmVlCSAgICp0cmlnZ2VyOworCU9ialRyZWUJICAgKnRtcG9iajsKKwlpbnQJCQl0Z25h cmdzOworCUxpc3QJICAgKmxpc3Q7CisJTGlzdAkgICAqZXZlbnRzOworCisJcGdfdHJpZ2dlciA9 IHRhYmxlX29wZW4oVHJpZ2dlclJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwl0cmln VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ190cmlnZ2VyLCBBbnVtX3BnX3RyaWdn ZXJfb2lkLCBvYmplY3RJZCk7CisJdHJpZ0Zvcm0gPSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJV Q1QodHJpZ1R1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUg JXtjb25zdHJhaW50fXMgVFJJR0dFUiAle25hbWV9SSAle3RpbWV9cyAle2V2ZW50czogT1IgfXMK KwkgKiBPTiAle3JlbGF0aW9ufUQgJXtmcm9tX3RhYmxlfXMgJXtjb25zdHJhaW50X2F0dHJzOiB9 cworCSAqIEZPUiBFQUNIICV7Zm9yX2VhY2h9cyAle3doZW59cyBFWEVDVVRFIFBST0NFRFVSRSAl e2Z1bmN0aW9ufXMKKwkgKi8KKwl0cmlnZ2VyID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJ YXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7Y29uc3RyYWludH1zIiwKKwkJCQkJCSBu b2RlLT5pc2NvbnN0cmFpbnQgPyAiQ09OU1RSQUlOVCIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5n X29iamVjdCh0cmlnZ2VyLCAiVFJJR0dFUiAle25hbWV9SSIsIG5vZGUtPnRyaWduYW1lKTsKKwor CWlmIChub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0JFRk9SRSkKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodHJpZ2dlciwgIiV7dGltZX1zIiwgIkJFRk9SRSIpOworCWVsc2UgaWYgKG5vZGUt PnRpbWluZyA9PSBUUklHR0VSX1RZUEVfQUZURVIpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRy aWdnZXIsICIle3RpbWV9cyIsICJBRlRFUiIpOworCWVsc2UgaWYgKG5vZGUtPnRpbWluZyA9PSBU UklHR0VSX1RZUEVfSU5TVEVBRCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7 dGltZX1zIiwgIklOU1RFQUQgT0YiKTsKKwllbHNlCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6 ZWQgdHJpZ2dlciB0aW1pbmcgdHlwZSAlZCIsIG5vZGUtPnRpbWluZyk7CisKKwkvKgorCSAqIERl Y29kZSB0aGUgZXZlbnRzIHRoYXQgdGhlIHRyaWdnZXIgZmlyZXMgZm9yLiAgVGhlIG91dHB1dCBp cyBhIGxpc3Q7CisJICogaW4gbW9zdCBjYXNlcyBpdCB3aWxsIGp1c3QgYmUgYSBzdHJpbmcgd2l0 aCB0aGUgZXZlbnQgbmFtZSwgYnV0IHdoZW4KKwkgKiB0aGVyZSdzIGFuIFVQREFURSB3aXRoIGEg bGlzdCBvZiBjb2x1bW5zLCB3ZSByZXR1cm4gYSBKU09OIG9iamVjdC4KKwkgKi8KKwlldmVudHMg PSBOSUw7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9JTlNFUlQpCisJCWV2ZW50 cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiSU5TRVJUIikpOworCWlmIChu b2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfREVMRVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2 ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIkRFTEVURSIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYg VFJJR0dFUl9UWVBFX1RSVU5DQVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0 cmluZ19vYmplY3QoIlRSVU5DQVRFIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZ UEVfVVBEQVRFKQorCXsKKwkJaWYgKG5vZGUtPmNvbHVtbnMgPT0gTklMKQorCQl7CisJCQlldmVu dHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlVQREFURSIpKTsKKwkJfQor CQllbHNlCisJCXsKKwkJCU9ialRyZWUJICAgKnVwZGF0ZTsKKwkJCUxpc3RDZWxsICAgKmNlbGw7 CisJCQlMaXN0CSAgICpjb2xzID0gTklMOworCisJCQkvKgorCQkJICogQ3VycmVudGx5IG9ubHkg VVBEQVRFIE9GIGNhbiBiZSBvYmplY3RzIGluIHRoZSBvdXRwdXQgSlNPTiwgYnV0CisJCQkgKiB3 ZSBhZGQgYSAia2luZCIgZWxlbWVudCBzbyB0aGF0IHVzZXIgY29kZSBjYW4gZGlzdGluZ3Vpc2gK KwkJCSAqIHBvc3NpYmxlIGZ1dHVyZSBuZXcgZXZlbnQgdHlwZXMuCisJCQkgKi8KKwkJCXVwZGF0 ZSA9IG5ld19vYmp0cmVlX1ZBKCJVUERBVEUgT0YiLCAxLAorCQkJCQkJCQkJImtpbmQiLCBPYmpU eXBlU3RyaW5nLCAidXBkYXRlX29mIik7CisKKwkJCWZvcmVhY2goY2VsbCwgbm9kZS0+Y29sdW1u cykKKwkJCXsKKwkJCQljaGFyICAgKmNvbG5hbWUgPSBzdHJWYWwobGZpcnN0KGNlbGwpKTsKKwor CQkJCWNvbHMgPSBsYXBwZW5kKGNvbHMsIG5ld19zdHJpbmdfb2JqZWN0KGNvbG5hbWUpKTsKKwkJ CX0KKworCQkJYXBwZW5kX2FycmF5X29iamVjdCh1cGRhdGUsICIle2NvbHVtbnM6LCB9SSIsIGNv bHMpOworCisJCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X29iamVjdF9vYmplY3QodXBk YXRlKSk7CisJCX0KKwl9CisJYXBwZW5kX2FycmF5X29iamVjdCh0cmlnZ2VyLCAiJXtldmVudHM6 IE9SIH1zIiwgZXZlbnRzKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkgIHRyaWdGb3JtLT50Z3JlbGlkKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAiT04gJXtyZWxhdGlvbn1EIiwgdG1wb2JqKTsK KworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJGUk9NIiwgMCk7CisJaWYgKHRyaWdGb3JtLT50 Z2NvbnN0cnJlbGlkKQorCXsKKwkJT2JqVHJlZQkgICAqcmVsOworCisJCXJlbCA9IG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICB0cmln Rm9ybS0+dGdjb25zdHJyZWxpZCk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7 cmVsYXRpb259RCIsIHJlbCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9i aiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIiV7 ZnJvbV90YWJsZX1zIiwgdG1wb2JqKTsKKworCWxpc3QgPSBOSUw7CisJaWYgKG5vZGUtPmRlZmVy cmFibGUpCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCSAgIG5ld19zdHJpbmdfb2JqZWN0 KCJERUZFUlJBQkxFIikpOworCWlmIChub2RlLT5pbml0ZGVmZXJyZWQpCisJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsCisJCQkJCSAgIG5ld19zdHJpbmdfb2JqZWN0KCJJTklUSUFMTFkgREVGRVJSRUQi KSk7CisJYXBwZW5kX2FycmF5X29iamVjdCh0cmlnZ2VyLCAiJXtjb25zdHJhaW50X2F0dHJzOiB9 cyIsIGxpc3QpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIkZPUiBFQUNIICV7 Zm9yX2VhY2h9cyIsCisJCQkJCQkgbm9kZS0+cm93ID8gIlJPVyIgOiAiU1RBVEVNRU5UIik7CisK Kwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiV0hFTiIsIDApOworCWlmIChub2RlLT53aGVuQ2xh dXNlKQorCXsKKwkJTm9kZQkgICAqd2hlbkNsYXVzZTsKKwkJRGF0dW0JCXZhbHVlOworCQlib29s CQlpc251bGw7CisKKwkJdmFsdWUgPSBmYXN0Z2V0YXR0cih0cmlnVHVwLCBBbnVtX3BnX3RyaWdn ZXJfdGdxdWFsLAorCQkJCQkJCVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksICZpc251bGwp OworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgImJvZ3VzIE5VTEwgdGdxdWFsIik7CisK KwkJd2hlbkNsYXVzZSA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7 CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIigle2NsYXVzZX1zKSIsCisJCQkJCQkJ IHBnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UodHJpZ0Zvcm0sCisJCQkJCQkJCQkJCQkJICAgd2hl bkNsYXVzZSwKKwkJCQkJCQkJCQkJCQkgICBmYWxzZSkpOworCX0KKwllbHNlCisJCWFwcGVuZF9i b29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRyaWdnZXIsICIle3doZW59cyIsIHRtcG9iaik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiJXtmdW5jbmFtZX1EIiwgMSwKKwkJCQkJCSAiZnVuY25hbWUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCSB0cmlnRm9ybS0+dGdmb2lkKSk7CisJbGlzdCA9IE5JTDsKKwl0Z25h cmdzID0gdHJpZ0Zvcm0tPnRnbmFyZ3M7CisJaWYgKHRnbmFyZ3MgPiAwKQorCXsKKwkJYnl0ZWEg ICp0Z2FyZ3M7CisJCWNoYXIgICAqYXJnc3RyOworCQlib29sCWlzbnVsbDsKKwkJaW50CQlmaW5k eDsKKwkJaW50CQlsZW50Z2FyZ3M7CisJCWNoYXIgICAqcDsKKworCQl0Z2FyZ3MgPSBEYXR1bUdl dEJ5dGVhUChmYXN0Z2V0YXR0cih0cmlnVHVwLAorCQkJCQkJCQkJCQlBbnVtX3BnX3RyaWdnZXJf dGdhcmdzLAorCQkJCQkJCQkJCQlSZWxhdGlvbkdldERlc2NyKHBnX3RyaWdnZXIpLAorCQkJCQkJ CQkJCQkmaXNudWxsKSk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBO VUxMIHRnYXJncyIpOworCQlhcmdzdHIgPSAoY2hhciAqKSBWQVJEQVRBKHRnYXJncyk7CisJCWxl bnRnYXJncyA9IFZBUlNJWkVfQU5ZX0VYSERSKHRnYXJncyk7CisKKwkJcCA9IGFyZ3N0cjsKKwkJ Zm9yIChmaW5keCA9IDA7IGZpbmR4IDwgdGduYXJnczsgZmluZHgrKykKKwkJeworCQkJc2l6ZV90 CXRsZW47CisKKwkJCS8qIFZlcmlmeSB0aGF0IHRoZSBhcmd1bWVudCBlbmNvZGluZyBpcyBjb3Jy ZWN0ICovCisJCQl0bGVuID0gc3RybGVuKHApOworCQkJaWYgKHAgKyB0bGVuID49IGFyZ3N0ciAr IGxlbnRnYXJncykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJpbnZhbGlkIGFyZ3VtZW50 IHN0cmluZyAoJXMpIGZvciB0cmlnZ2VyIFwiJXNcIiIsCisJCQkJCQkJCWFyZ3N0ciwgTmFtZVN0 cih0cmlnRm9ybS0+dGduYW1lKSkpKTsKKworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0 cmluZ19vYmplY3QocCkpOworCisJCQlwICs9IHRsZW4gKyAxOworCQl9CisJfQorCisJYXBwZW5k X2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKCIpOworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2Jq LCAiJXthcmdzOiwgfUwiLCBsaXN0KTsJCS8qIG1pZ2h0IGJlIE5JTCAqLworCWFwcGVuZF9mb3Jt YXRfc3RyaW5nKHRtcG9iaiwgIikiKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRyaWdnZXIs ICJFWEVDVVRFIFBST0NFRFVSRSAle2Z1bmN0aW9ufXMiLCB0bXBvYmopOworCisJdGFibGVfY2xv c2UocGdfdHJpZ2dlciwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiB0cmlnZ2VyOworfQor CisvKgorICogRGVwYXJzZSBhIFJlZnJlc2hNYXRWaWV3U3RtdCAoUkVGUkVTSCBNQVRFUklBTEla RUQgVklFVykKKyAqCisgKiBHaXZlbiBhIG1hdGVyaWFsaXplZCB2aWV3IE9JRCBhbmQgdGhlIHBh cnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRp bmcgdGhlIHJlZnJlc2ggY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9S ZWZyZXNoTWF0Vmlld1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJUmVm cmVzaE1hdFZpZXdTdG10ICpub2RlID0gKFJlZnJlc2hNYXRWaWV3U3RtdCAqKSBwYXJzZXRyZWU7 CisJT2JqVHJlZQkgICAqcmVmcmVzaFN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCisJcmVmcmVz aFN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyIsIDApOwor CisJLyogYWRkIGEgQ09OQ1VSUkVOVExZIGNsYXVzZSAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHJlZnJlc2hTdG10LCAiJXtjb25jdXJyZW50bHl9cyIsCisJCQkJCQkgbm9kZS0+Y29uY3VycmVu dCA/ICJDT05DVVJSRU5UTFkiIDogIiIpOworCS8qIGFkZCB0aGUgbWF0dmlldyBuYW1lICovCisJ YXBwZW5kX29iamVjdF9vYmplY3QocmVmcmVzaFN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJIG9iamVjdElkKSk7CisJLyogYWRkIGEgV0lUSCBOTyBEQVRBIGNsYXVzZSAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJXSVRIIE5PIERBVEEiLCAxLAorCQkJCQkJICJwcmVzZW50Iiwg T2JqVHlwZUJvb2wsCisJCQkJCQkgbm9kZS0+c2tpcERhdGEgPyB0cnVlIDogZmFsc2UpOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJlZnJlc2hTdG10LCAiJXt3aXRoX25vX2RhdGF9cyIsIHRtcCk7 CisKKwlyZXR1cm4gcmVmcmVzaFN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIERlZkVsZW1zLCBh cyB1c2VkIGUuZy4gYnkgQUxURVIgQ09MVU1OIC4uLiBTRVQsIGludG8gYSBsaXN0IG9mIFNFVAor ICogKC4uLikgIG9yIFJFU0VUICguLi4pIGNvbnRlbnRzLgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNldCkKK3sKKwlPYmpU cmVlCSAgICpzZXQ7CisJT2JqVHJlZQkgICAqb3B0bmFtZTsKKworCXNldCA9IG5ld19vYmp0cmVl KCIiKTsKKwlvcHRuYW1lID0gbmV3X29ianRyZWUoIiIpOworCisJaWYgKGVsZW0tPmRlZm5hbWVz cGFjZSAhPSBOVUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChvcHRuYW1lLCAiJXtzY2hlbWF9 SS4iLCBlbGVtLT5kZWZuYW1lc3BhY2UpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qob3B0bmFt ZSwgIiV7bGFiZWx9SSIsIGVsZW0tPmRlZm5hbWUpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qo c2V0LCAiJXtsYWJlbH1zIiwgb3B0bmFtZSk7CisKKwlpZiAoIWlzX3Jlc2V0KQorCQlhcHBlbmRf c3RyaW5nX29iamVjdChzZXQsICIgPSAle3ZhbHVlfUwiLAorCQkJCQkJCSBlbGVtLT5hcmcgPyBk ZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRSVUUi IDogIkZBTFNFIik7CisKKwlyZXR1cm4gc2V0OworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2lu ZyBvZiBEUk9QIGNvbW1hbmRzLgorICovCitjaGFyICoKK2RlcGFyc2VfZHJvcF9jb21tYW5kKGNv bnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAorCQkJCQkgRHJv cEJlaGF2aW9yIGJlaGF2aW9yKQoreworCVN0cmluZ0luZm9EYXRhICBzdHI7CisJY2hhcgkJICAg KmNvbW1hbmQ7CisJY2hhcgkJICAgKmlkZW50aXR5ID0gKGNoYXIgKikgb2JqaWRlbnRpdHk7CisJ Y2hhcgkJICAgKmZtdDsKKwlPYmpUcmVlCQkqc3RtdCwgKnN0bXQyOworCUpzb25iCQkgICpqc29u YjsKKworCWluaXRTdHJpbmdJbmZvKCZzdHIpOworCisJZm10ID0gcHNwcmludGYoIkRST1AgJXMg SUYgRVhJU1RTICUle29iamlkZW50aXR5fXMiLCBvYmplY3R0eXBlKTsKKworCXN0bXQgPSBuZXdf b2JqdHJlZV9WQShmbXQsIDEsICJvYmppZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50aXR5 KTsKKwlzdG10MiA9IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCSAgICJwcmVz ZW50IiwgT2JqVHlwZUJvb2wsIGJlaGF2aW9yID09IERST1BfQ0FTQ0FERSk7CisKKwlhcHBlbmRf b2JqZWN0X29iamVjdChzdG10LCAiJXtjYXNjYWRlfXMiLCBzdG10Mik7CisKKwlqc29uYiA9IG9i anRyZWVfdG9fanNvbmIoc3RtdCk7CisJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZq c29uYi0+cm9vdCwgSlNPTkJfRVNUSU1BVEVEX0xFTik7CisKKwlyZXR1cm4gY29tbWFuZDsKK30K KworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgc2V0dGluZyBvZiBGdW5jdGlvbgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Z1bmN0aW9uU2V0KFZhcmlhYmxlU2V0S2luZCBraW5kLCBj aGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpUcmVlCSAgICpvYmo7CisKKwlpZiAoa2lu ZCA9PSBWQVJfUkVTRVRfQUxMKQorCXsKKwkJb2JqID0gbmV3X29ianRyZWUoIlJFU0VUIEFMTCIp OworCX0KKwllbHNlIGlmICh2YWx1ZSAhPSBOVUxMKQorCXsKKwkJb2JqID0gbmV3X29ianRyZWVf VkEoIlNFVCAle3NldF9uYW1lfUkiLCAxLAorCQkJCQkJICAgInNldF9uYW1lIiwgT2JqVHlwZVN0 cmluZywgbmFtZSk7CisKKwkJLyoKKwkJICogU29tZSBHVUMgdmFyaWFibGUgbmFtZXMgYXJlICdM SVNUJyB0eXBlIGFuZCBoZW5jZSBtdXN0IG5vdCBiZQorCQkgKiBxdW90ZWQuCisJCSAqLworCQlp ZiAoR2V0Q29uZmlnT3B0aW9uRmxhZ3MobmFtZSwgdHJ1ZSkgJiBHVUNfTElTVF9RVU9URSkKKwkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9iaiwgIlRPICV7c2V0X3ZhbHVlfXMiLCB2YWx1ZSk7CisJ CWVsc2UKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9iaiwgIlRPICV7c2V0X3ZhbHVlfUwiLCB2 YWx1ZSk7CisJfQorCWVsc2UKKwl7CisJCW9iaiA9IG5ld19vYmp0cmVlKCJSRVNFVCIpOworCQlh cHBlbmRfc3RyaW5nX29iamVjdChvYmosICIle3NldF9uYW1lfUkiLCBuYW1lKTsKKwl9CisKKwly ZXR1cm4gb2JqOworfQorCisvKgorICogRGVwYXJzZSBhbiBJbmRleFN0bXQuCisgKgorICogR2l2 ZW4gYW4gaW5kZXggT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJu IGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisg KiBJZiB0aGUgaW5kZXggY29ycmVzcG9uZHMgdG8gYSBjb25zdHJhaW50LCBOVUxMIGlzIHJldHVy bmVkLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0luZGV4U3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlJbmRleFN0bXQgICpub2RlID0gKEluZGV4U3RtdCAq KSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqaW5kZXhTdG10OworCU9ialRyZWUJICAgKnRtcG9i ajsKKwlSZWxhdGlvbglpZHhyZWw7CisJUmVsYXRpb24JaGVhcHJlbDsKKwljaGFyCSAgICppbmRl eF9hbTsKKwljaGFyCSAgICpkZWZpbml0aW9uOworCWNoYXIJICAgKnJlbG9wdGlvbnM7CisJY2hh cgkgICAqdGFibGVzcGFjZTsKKwljaGFyCSAgICp3aGVyZUNsYXVzZTsKKworCWlmIChub2RlLT5w cmltYXJ5IHx8IG5vZGUtPmlzY29uc3RyYWludCkKKwl7CisJCS8qCisJCSAqIEluZGV4ZXMgZm9y IFBSSU1BUlkgS0VZIGFuZCBvdGhlciBjb25zdHJhaW50cyBhcmUgb3V0cHV0CisJCSAqIHNlcGFy YXRlbHk7IHJldHVybiBlbXB0eSBoZXJlLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ aWR4cmVsID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwloZWFw cmVsID0gcmVsYXRpb25fb3BlbihpZHhyZWwtPnJkX2luZGV4LT5pbmRyZWxpZCwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXBnX2dldF9pbmRleGRlZl9kZXRhaWxlZChvYmplY3RJZCwKKwkJCQkJCQkg JmluZGV4X2FtLCAmZGVmaW5pdGlvbiwgJnJlbG9wdGlvbnMsCisJCQkJCQkJICZ0YWJsZXNwYWNl LCAmd2hlcmVDbGF1c2UpOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JF QVRFICV7dW5pcXVlfXMgSU5ERVggJXtjb25jdXJyZW50bHl9cyAle2lmX25vdF9leGlzdHN9cyAl e25hbWV9SSBPTgorCSAqICV7dGFibGV9RCBVU0lORyAle2luZGV4X2FtfXMgKCV7ZGVmaW5pdGlv bn1zKSAle3dpdGh9cyAle3RhYmxlc3BhY2V9cworCSAqICV7d2hlcmVfY2xhdXNlfXMKKwkgKi8K KwlpbmRleFN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfc3RyaW5nX29i amVjdChpbmRleFN0bXQsICIle3VuaXF1ZX1zIiwKKwkJCQkJCSBub2RlLT51bmlxdWUgPyAiVU5J UVVFIiA6ICIiKTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGluZGV4U3RtdCwgIklOREVYIik7 CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICIle2NvbmN1cnJlbnRseX1zIiwK KwkJCQkJCSBub2RlLT5jb25jdXJyZW50ID8gIkNPTkNVUlJFTlRMWSIgOiAiIik7CisKKwlhcHBl bmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkg bm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7bmFtZX1JIiwKKwkJCQkJCSBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShpZHhyZWwpKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwg Ik9OICV7dGFibGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGhlYXByZWwt PnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGhl YXByZWwpKSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICJVU0lORyAle2lu ZGV4X2FtfXMiLCBpbmRleF9hbSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQs ICIoJXtkZWZpbml0aW9ufXMpIiwgZGVmaW5pdGlvbik7CisKKwkvKiByZWxvcHRpb25zICovCisJ dG1wb2JqID0gbmV3X29ianRyZWUoIldJVEgiKTsKKwlpZiAocmVsb3B0aW9ucykKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wb2JqLCAiKCV7b3B0c31zKSIsIHJlbG9wdGlvbnMpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5k X29iamVjdF9vYmplY3QoaW5kZXhTdG10LCAiJXt3aXRofXMiLCB0bXBvYmopOworCisJLyogdGFi bGVzcGFjZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYgKHRh Ymxlc3BhY2UpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7dGFibGVzcGFjZX1z IiwgdGFibGVzcGFjZSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJl c2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICIle3RhYmxl c3BhY2V9cyIsIHRtcG9iaik7CisKKwkvKiBXSEVSRSBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdf b2JqdHJlZSgiV0hFUkUiKTsKKwlpZiAod2hlcmVDbGF1c2UpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIiV7d2hlcmV9cyIsIHdoZXJlQ2xhdXNlKTsKKwllbHNlCisJCWFwcGVuZF9i b29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGluZGV4U3RtdCwgIiV7d2hlcmVfY2xhdXNlfXMiLCB0bXBvYmopOworCisJdGFibGVfY2xv c2UoaWR4cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCXRhYmxlX2Nsb3NlKGhlYXByZWwsIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlyZXR1cm4gaW5kZXhTdG10OworfQorCisvKgorICogRGVwYXJzZSB0 aGUgSU5IRVJJVFMgcmVsYXRpb25zLgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lELCByZXR1cm4g YSBzY2hlbWEgcXVhbGlmaWVkIHRhYmxlIGxpc3QgcmVwcmVzZW50aW5nCisgKiB0aGUgcGFyZW50 IHRhYmxlcy4KKyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9i amVjdElkKQoreworCUxpc3QJICAgKnBhcmVudHMgPSBOSUw7CisJUmVsYXRpb24JaW5oUmVsOwor CVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5OworCUhlYXBUdXBsZQl0dXBsZTsK KworCWluaFJlbCA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVM b2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXksCisJCQkJQW51bV9wZ19pbmhlcml0c19pbmhyZWxp ZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXRE YXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihpbmhSZWwsIElu aGVyaXRzUmVsaWRTZXFub0luZGV4SWQsCisJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsK KworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2Fu KSkpCisJeworCQlPYmpUcmVlCSpwYXJlbnQ7CisJCUZvcm1fcGdfaW5oZXJpdHMgZm9ybUluaCA9 IChGb3JtX3BnX2luaGVyaXRzKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCXBhcmVudCA9IG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSBm b3JtSW5oLT5pbmhwYXJlbnQpOworCQlwYXJlbnRzID0gbGFwcGVuZChwYXJlbnRzLCBuZXdfb2Jq ZWN0X29iamVjdChwYXJlbnQpKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRh YmxlX2Nsb3NlKGluaFJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gcGFyZW50czsK K30KKworLyoKKyAqIERlcGFyc2UgdGhlIE9OIENPTU1NSVQgLi4uIGNsYXVzZSBmb3IgQ1JFQVRF IC4uLiBURU1QT1JBUlkgLi4uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfT25Db21t aXRDbGF1c2UoT25Db21taXRBY3Rpb24gb3B0aW9uKQoreworCU9ialRyZWUJICAgKm9uY29tbWl0 OworCisJb25jb21taXQgPSBuZXdfb2JqdHJlZSgiT04gQ09NTUlUIik7CisJc3dpdGNoIChvcHRp b24pCisJeworCQljYXNlIE9OQ09NTUlUX0RST1A6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChv bmNvbW1pdCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiLCAiRFJPUCIpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBPTkNPTU1JVF9ERUxFVEVfUk9XUzoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9uY29t bWl0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIsICJERUxFVEUgUk9XUyIpOworCQkJYnJlYWs7CisK KwkJY2FzZSBPTkNPTU1JVF9QUkVTRVJWRV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo b25jb21taXQsICIle29uX2NvbW1pdF92YWx1ZX1zIiwgIlBSRVNFUlZFIFJPV1MiKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgT05DT01NSVRfTk9PUDoKKwkJCWFwcGVuZF9udWxsX29iamVjdChvbmNv bW1pdCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdChvbmNv bW1pdCwgInByZXNlbnQiLCBmYWxzZSk7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gb25jb21t aXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgUmVuYW1lU3RtdC4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9SZW5hbWVTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFy c2V0cmVlKQoreworCVJlbmFtZVN0bXQgKm5vZGUgPSAoUmVuYW1lU3RtdCAqKSBwYXJzZXRyZWU7 CisJT2JqVHJlZQkgICAqcmVuYW1lU3RtdDsKKwljaGFyCSAgICpmbXRzdHI7CisJY29uc3QgY2hh ciAqb2JqdHlwZTsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlPaWQJCQlzY2hlbWFJZDsKKworCS8q CisJICogSW4gYW4gQUxURVIgLi4gUkVOQU1FIGNvbW1hbmQsIHdlIGRvbid0IGhhdmUgdGhlIG9y aWdpbmFsIG5hbWUgb2YgdGhlCisJICogb2JqZWN0IGluIHN5c3RlbSBjYXRhbG9nczogc2luY2Ug d2UgaW5zcGVjdCB0aGVtIGFmdGVyIHRoZSBjb21tYW5kIGhhcworCSAqIGV4ZWN1dGVkLCB0aGUg b2xkIG5hbWUgaXMgYWxyZWFkeSBnb25lLiAgVGhlcmVmb3JlLCB3ZSBleHRyYWN0IGl0IGZyb20K KwkgKiB0aGUgcGFyc2Ugbm9kZS4gIE5vdGUgd2Ugc3RpbGwgZXh0cmFjdCB0aGUgc2NoZW1hIG5h bWUgZnJvbSB0aGUgY2F0YWxvZworCSAqIChpdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiB0aGUg cGFyc2Ugbm9kZSk7IGl0IGNhbm5vdCBwb3NzaWJseSBoYXZlCisJICogY2hhbmdlZCBhbnl3YXku CisJICovCisJc3dpdGNoIChub2RlLT5yZW5hbWVUeXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfVEFC TEU6CisJCWNhc2UgT0JKRUNUX0lOREVYOgorCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKworCQkJ LyoKKwkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkgKgorCQkJICogQUxURVIgJXMgJXtpZl9leGlz dHN9cyAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisJCQkgKi8KKwkJCW9ianR5 cGUgPSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKTsKKwkJCWZtdHN0ciA9IHBz cHJpbnRmKCJBTFRFUiAlcyIsIG9ianR5cGUpOworCQkJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVu KGFkZHJlc3Mub2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlzY2hlbWFJZCA9IFJlbGF0 aW9uR2V0TmFtZXNwYWNlKHJlbGF0aW9uKTsKKwkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9W QShmbXRzdHIsIDApOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIiV7aWZf ZXhpc3RzfXMiLAorCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIp OworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJ CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJ CSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJl bmFtZVN0bXQsICJSRU5BTUUgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCQkgbm9kZS0+bmV3bmFt ZSk7CisJCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgT0JKRUNUX1BPTElDWToKKwkJCXsKKwkJCQlIZWFwVHVwbGUJcG9sVHVw OworCQkJCUZvcm1fcGdfcG9saWN5IHBvbEZvcm07CisJCQkJUmVsYXRpb24JcGdfcG9saWN5Owor CQkJCVNjYW5LZXlEYXRhCWtleTsKKwkJCQlTeXNTY2FuRGVzYwlzY2FuOworCisJCQkJcGdfcG9s aWN5ID0gcmVsYXRpb25fb3BlbihQb2xpY3lSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOwor CQkJCVNjYW5LZXlJbml0KCZrZXksIEFudW1fcGdfcG9saWN5X29pZCwKKwkJCQkJCQlCVEVxdWFs U3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShhZGRyZXNz Lm9iamVjdElkKSk7CisJCQkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19wb2xpY3ksIFBv bGljeU9pZEluZGV4SWQsIHRydWUsCisJCQkJCQkJCQkJICBOVUxMLCAxLCAma2V5KTsKKwkJCQlw b2xUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxp ZChwb2xUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcG9s aWN5ICV1IiwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcG9sRm9ybSA9IChGb3JtX3BnX3BvbGlj eSkgR0VUU1RSVUNUKHBvbFR1cCk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEo IkFMVEVSIFBPTElDWSIsIDApOworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQs ICIle2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJCSBub2RlLT5taXNzaW5nX29rID8gIklGIEVYSVNU UyIgOiAiIik7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIiV7cG9saWN5 bmFtZX1JIiwgbm9kZS0+c3VibmFtZSk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1l U3RtdCwgIk9OICV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCSBwb2xGb3JtLT5wb2xyZWxpZCkp OworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICJSRU5BTUUgVE8gJXtuZXdu YW1lfUkiLAorCQkJCQkJCQkJIG5vZGUtPm5ld25hbWUpOworCQkJCXN5c3RhYmxlX2VuZHNjYW4o c2Nhbik7CisJCQkJcmVsYXRpb25fY2xvc2UocGdfcG9saWN5LCBBY2Nlc3NTaGFyZUxvY2spOwor CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9BVFRSSUJVVEU6CisJCWNhc2UgT0JK RUNUX0NPTFVNTjoKKwkJCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLm9iamVjdElk LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJc2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShy ZWxhdGlvbik7CisKKwkJCS8qCisJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJICoKKwkJCSAqIENv bXBvc2l0ZSB0eXBlczogQUxURVIgb2JqdHlwZSAle2lkZW50aXR5fUQgUkVOQU1FIEFUVFJJQlVU RQorCQkJICogJXtjb2xuYW1lfUkgVE8gJXtuZXduYW1lfUkgJXtjYXNjYWRlfXMKKwkJCSAqCisJ CQkgKiBOb3JtYWwgdHlwZXM6IEFMVEVSIG9ianR5cGUgJXtpZl9leGlzdHN9cyAlJXtpZGVudGl0 eX1EIFJFTkFNRQorCQkJICogQ09MVU1OICV7Y29sbmFtZX1JIFRPICV7bmV3bmFtZX1JCisJCQkg Ki8KKworCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0FUVFJJQlVURSkKKwkJCXsK KwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWUoIkFMVEVSIFRZUEUiKTsKKwkJCQkJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJl bGF0aW9uLT5yZWxuYW1lKSk7CisJCQkJZm10c3RyID0gcHNwcmludGYoIlJFTkFNRSBBVFRSSUJV VEUgJSV7Y29sbmFtZX1JIik7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJb2JqdHlwZSA9IHN0 cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbGF0aW9uVHlwZSk7CisJCQkJZm10c3RyID0gcHNwcmlu dGYoIkFMVEVSICVzIiwgb2JqdHlwZSk7CisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlKGZt dHN0cik7CisKKwkJCQkvKiBDb21wb3NpdGUgdHlwZXMgZG8gbm90IHN1cHBvcnQgSUYgRVhJU1RT ICovCisJCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0NPTFVNTikKKwkJCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIiV7aWZfZXhpc3RzfXMiLAorCQkJCQkJCQkJ CW5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKworCQkJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRp b24tPnJlbG5hbWUpKTsKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiUkVOQU1FIENPTFVNTiAlJXtj b2xuYW1lfUkiKTsKKwkJCX0KKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwg Zm10c3RyLCBub2RlLT5zdWJuYW1lKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0 bXQsICJUTyAle25ld25hbWV9SSIsIG5vZGUtPm5ld25hbWUpOworCisJCQlpZiAobm9kZS0+cmVu YW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQorCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl bmFtZVN0bXQsICIle2Nhc2NhZGV9cyIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfVkEoIkNBU0NB REUiLCAxLAorCQkJCQkJCQkJCQkJCSJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkJCQkJ CQkJbm9kZS0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKSk7CisKKwkJCXJlbGF0aW9uX2Nsb3Nl KHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1Rf RlVOQ1RJT046CisJCQl7CisJCQkJY2hhcgkqaWRlbnQ7CisJCQkJSGVhcFR1cGxlIHByb2N0dXA7 CisJCQkJRm9ybV9wZ19wcm9jIHByb2Nmb3JtOworCQkJCUxpc3QJICAgKmlkZW50aXR5OworCisJ CQkJQXNzZXJ0KElzQShub2RlLT5vYmplY3QsIE9iamVjdFdpdGhBcmdzKSk7CisJCQkJaWRlbnRp dHkgPSAoKE9iamVjdFdpdGhBcmdzICopIG5vZGUtPm9iamVjdCktPm9iam5hbWU7CisKKwkJCQlw cm9jdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsCisJCQkJCQkJCQkJICBPYmplY3RJZEdl dERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJv Y3R1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1 cmUgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXByb2Nmb3JtID0gKEZvcm1f cGdfcHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCisJCQkJLyogWFhYIGRvZXMgdGhpcyB3b3Jr IGZvciBvcmRlcmVkLXNldCBhZ2dyZWdhdGVzPyAqLworCQkJCWlkZW50ID0gcHNwcmludGYoIiVz JXMiLAorCQkJCQkJCQkgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9u YW1lKHByb2Nmb3JtLT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJCQkJc3RyVmFsKGxsYXN0 KGlkZW50aXR5KSkpLAorCQkJCQkJCQkgZm9ybWF0X3Byb2NlZHVyZV9hcmdzKGFkZHJlc3Mub2Jq ZWN0SWQsIHRydWUpKTsKKworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVu dGl0eX1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkiLAorCQkJCQkJCQkgIHN0cmluZ2lmeV9vYmp0 eXBlKG5vZGUtPnJlbmFtZVR5cGUpKTsKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEo Zm10c3RyLCAyLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBpZGVudCwK KwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwor CQkJCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2Ug T0JKRUNUX09QQ0xBU1M6CisJCQl7CisJCQkJSGVhcFR1cGxlICAgb3BjVHVwOworCQkJCUZvcm1f cGdfb3BjbGFzcyBvcGNGb3JtOworCQkJCUxpc3QJICAgKm9sZG5hbWVzOworCQkJCWNoYXIJICAg KnNjaGVtYW5hbWU7CisJCQkJY2hhcgkgICAqb3BjbmFtZTsKKwkJCQljaGFyCSAgICpmbXQ7CisK KwkJCQlmbXQgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRpdHl9RCBVU0lORyAlJXtpbmRl eF9tZXRob2R9cyBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JIiwKKwkJCQkJCQkgICBzdHJpbmdpZnlf b2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKSk7CisKKwkJCQlvcGNUdXAgPSBTZWFyY2hTeXNDYWNo ZTEoQ0xBT0lELCBPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlpZiAo IUhlYXBUdXBsZUlzVmFsaWQob3BjVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0 SWQpOworCisJCQkJb3BjRm9ybSA9IChGb3JtX3BnX29wY2xhc3MpIEdFVFNUUlVDVChvcGNUdXAp OworCisJCQkJb2xkbmFtZXMgPSBsaXN0X2NvcHlfdGFpbCgoTGlzdCAqKSBub2RlLT5vYmplY3Qs IDEpOworCisJCQkJLyogZGVjb25zdHJ1Y3QgdGhlIG5hbWUgbGlzdCAqLworCQkJCURlY29uc3Ry dWN0UXVhbGlmaWVkTmFtZShvbGRuYW1lcywgJnNjaGVtYW5hbWUsICZvcGNuYW1lKTsKKworCQkJ CXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDMsCisJCQkJCQkJCQkJCSJpZGVudGl0 eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShv cGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkJCSBvcGNuYW1lKSwKKwkJCQkJ CQkJCQkJImluZGV4X21ldGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWdldF9hbV9u YW1lKG9wY0Zvcm0tPm9wY21ldGhvZCksCisJCQkJCQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0 cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKwkJ CX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX09QRkFNSUxZOgorCQkJeworCQkJCUhlYXBU dXBsZSAgIG9wZlR1cDsKKwkJCQlIZWFwVHVwbGUgICBhbVR1cDsKKwkJCQlGb3JtX3BnX29wZmFt aWx5IG9wZkZvcm07CisJCQkJRm9ybV9wZ19hbSAgYW1Gb3JtOworCQkJCUxpc3QJICAgKm9sZG5h bWVzOworCQkJCWNoYXIJICAgKnNjaGVtYW5hbWU7CisJCQkJY2hhcgkgICAqb3BmbmFtZTsKKwkJ CQljaGFyCSAgICpmbXQ7CisKKwkJCQlmbXQgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRp dHl9RCBVU0lORyAlJXtpbmRleF9tZXRob2R9cyBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JIiwKKwkJ CQkJCQkgICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKSk7CisKKwkJCQlvcGZU dXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJ CWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGZUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1IiwKKwkJCQkJCSBh ZGRyZXNzLm9iamVjdElkKTsKKwkJCQlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNU UlVDVChvcGZUdXApOworCisJCQkJYW1UdXAgPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVj dElkR2V0RGF0dW0ob3BmRm9ybS0+b3BmbWV0aG9kKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGFtVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFj Y2VzcyBtZXRob2QgJXUiLAorCQkJCQkJIG9wZkZvcm0tPm9wZm1ldGhvZCk7CisKKwkJCQlhbUZv cm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFtVHVwKTsKKworCQkJCW9sZG5hbWVzID0gbGlz dF9jb3B5X3RhaWwoKExpc3QgKikgbm9kZS0+b2JqZWN0LCAxKTsKKworCQkJCS8qIGRlY29uc3Ry dWN0IHRoZSBuYW1lIGxpc3QgKi8KKwkJCQlEZWNvbnN0cnVjdFF1YWxpZmllZE5hbWUob2xkbmFt ZXMsICZzY2hlbWFuYW1lLCAmb3BmbmFtZSk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRy ZWVfVkEoZm10LCAzLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJCQkJCQkgb3BmbmFtZSksCisJCQkJCQkJCQkJCSJpbmRleF9tZXRob2QiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlOYW1lU3RyKGFtRm9ybS0+YW1uYW1lKSwKKwkJCQkJ CQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJl bGVhc2VTeXNDYWNoZShhbVR1cCk7CisJCQkJUmVsZWFzZVN5c0NhY2hlKG9wZlR1cCk7CisJCQl9 CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlyZW5hbWVTdG10ID0KKwkJ CQluZXdfb2JqdHJlZV9WQSgiQUxURVIgU0NIRU1BICV7aWRlbnRpdHl9SSBSRU5BTUUgVE8gJXtu ZXduYW1lfUkiLCAyLAorCQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUt PnN1Ym5hbWUsCisJCQkJCQkJICAgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXdu YW1lKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX0ZEVzoKKwkJCXsKKwkJCQlTdHJpbmcg KmlkZW50aXR5ID0gY2FzdE5vZGUoU3RyaW5nLCBub2RlLT5vYmplY3QpOworCisJCQkJcmVuYW1l U3RtdCA9CisJCQkJCW5ld19vYmp0cmVlX1ZBKCJBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUiAl e2lkZW50aXR5fUkgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJICAgMiwgImlkZW50 aXR5IiwgT2JqVHlwZVN0cmluZywgc3RyVmFsKGlkZW50aXR5KSwKKwkJCQkJCQkJICAgIm5ld25h bWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwkJCX0KKwkJCWJyZWFrOworCisJ CWNhc2UgT0JKRUNUX1JVTEU6CisJCQl7CisJCQkJSGVhcFR1cGxlCXJld3JUdXA7CisJCQkJRm9y bV9wZ19yZXdyaXRlIHJld3JGb3JtOworCQkJCVJlbGF0aW9uCXBnX3Jld3JpdGU7CisKKwkJCQlw Z19yZXdyaXRlID0gcmVsYXRpb25fb3BlbihSZXdyaXRlUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVM b2NrKTsKKwkJCQlyZXdyVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ19yZXdyaXRl LCBBbnVtX3BnX3Jld3JpdGVfb2lkLCAgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcmV3ckZvcm0g PSAoRm9ybV9wZ19yZXdyaXRlKSBHRVRTVFJVQ1QocmV3clR1cCk7CisKKwkJCQlyZW5hbWVTdG10 ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFJVTEUgJXtydWxlbmFtZX1JIE9OICV7aWRlbnRpdHl9 RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCQkJCQkzLAorCQkJCQkJCQkJCQkicnVs ZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJCQkiaWRlbnRp dHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQkJcmV3ckZvcm0tPmV2X2Ns YXNzKSwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1l KTsKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ19yZXdyaXRlLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJ fQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFJJR0dFUjoKKwkJCXsKKwkJCQlIZWFwVHVw bGUJdHJpZ1R1cDsKKwkJCQlGb3JtX3BnX3RyaWdnZXIgdHJpZ0Zvcm07CisJCQkJUmVsYXRpb24J cGdfdHJpZ2dlcjsKKworCQkJCXBnX3RyaWdnZXIgPSByZWxhdGlvbl9vcGVuKFRyaWdnZXJSZWxh dGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCXRyaWdUdXAgPSBnZXRfY2F0YWxvZ19vYmpl Y3RfYnlfb2lkKHBnX3RyaWdnZXIsIGdldF9vYmplY3RfYXR0bnVtX29pZChhZGRyZXNzLmNsYXNz SWQpLCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQl0cmlnRm9ybSA9IChGb3JtX3BnX3RyaWdnZXIp IEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgVFJJR0dFUiAle3RyaWdnZXJuYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAl e25ld25hbWV9SSIsCisJCQkJCQkJCQkJCTMsCisJCQkJCQkJCQkJCSJ0cmlnZ2VybmFtZSIsIE9i alR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlv blJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCQl0cmlnRm9ybS0+dGdyZWxpZCksCisJCQkJ CQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQly ZWxhdGlvbl9jbG9zZShwZ190cmlnZ2VyLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJl YWs7CisKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJ Y2FzZSBPQkpFQ1RfRE9NQUlOOgorCQkJeworCQkJCUhlYXBUdXBsZQlvYmpUdXA7CisJCQkJUmVs YXRpb24JY2F0YWxvZzsKKwkJCQlEYXR1bQkJb2JqbnNwOworCQkJCWJvb2wJCWlzbnVsbDsKKwkJ CQlBdHRyTnVtYmVyCUFudW1fbmFtZXNwYWNlOworCQkJCUxpc3QJICAgKmlkZW50aXR5ID0gY2Fz dE5vZGUoTGlzdCwgbm9kZS0+b2JqZWN0KTsKKwkJCQljaGFyCSAgICpmbXRzdHJpbmc7CisKKwkJ CQkvKiBvYnRhaW4gb2JqZWN0IHR1cGxlICovCisJCQkJY2F0YWxvZyA9IHJlbGF0aW9uX29wZW4o YWRkcmVzcy5jbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCW9ialR1cCA9IGdldF9jYXRh bG9nX29iamVjdF9ieV9vaWQoY2F0YWxvZywgZ2V0X29iamVjdF9hdHRudW1fb2lkKGFkZHJlc3Mu Y2xhc3NJZCksIGFkZHJlc3Mub2JqZWN0SWQpOworCisJCQkJLyogb2J0YWluIG5hbWVzcGFjZSAq LworCQkJCUFudW1fbmFtZXNwYWNlID0gZ2V0X29iamVjdF9hdHRudW1fbmFtZXNwYWNlKGFkZHJl c3MuY2xhc3NJZCk7CisJCQkJb2JqbnNwID0gaGVhcF9nZXRhdHRyKG9ialR1cCwgQW51bV9uYW1l c3BhY2UsCisJCQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksICZpc251bGwpOwor CQkJCWlmIChpc251bGwpCisJCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgbmFtZXNwYWNl Iik7CisKKwkJCQlvYmp0eXBlID0gc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSk7 CisJCQkJZm10c3RyaW5nID0gcHNwcmludGYoIkFMVEVSICVzIiwgb2JqdHlwZSk7CisKKwkJCQly ZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoZm10c3RyaW5nLAorCQkJCQkJCQkJCTApOworCQkJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJ CQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKERhdHVtR2V0T2JqZWN0SWQob2JqbnNwKSwKKwkJ CQkJCQkJCQkJCQkJCSAgc3RyVmFsKGxsYXN0KGlkZW50aXR5KSkpKTsKKworCQkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICJSRU5BTUUgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJ CQkJIG5vZGUtPm5ld25hbWUpOworCQkJCXJlbGF0aW9uX2Nsb3NlKGNhdGFsb2csIEFjY2Vzc1No YXJlTG9jayk7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwg InVuc3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwgbm9kZS0+cmVuYW1lVHlwZSk7CisJfQorCisJ cmV0dXJuIHJlbmFtZVN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJPYmplY3REZXBl bmRzU3RtdCAoQUxURVIgLi4uIERFUEVORFMgT04gLi4uKS4KKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9BbHRlckRlcGVuZFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAqbm9kZSA9IChBbHRlck9iamVjdERlcGVuZHNT dG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkgICAqYWx0ZXJEZXBlbmRlU3RtdCA9IE5VTEw7 CisKKworCWlmIChub2RlLT5vYmplY3RUeXBlID09IE9CSkVDVF9JTkRFWCkKKwl7CisJCVJlbGF0 aW9uICAgICAgICByZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJCU9ialRyZWUgKnF1YWxpZmllZDsKKworCQlhbHRlckRlcGVuZGVTdG10ID0gbmV3 X29ianRyZWUoIkFMVEVSIElOREVYIik7CisKKwkJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJIG5v ZGUtPnJlbGF0aW9uLT5yZWxuYW1lKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEZXBl bmRlU3RtdCwgIiV7aWRlbnRpdHl9RCIsIHF1YWxpZmllZCk7CisJCXJlbGF0aW9uX2Nsb3NlKHJl bGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVy RGVwZW5kZVN0bXQsICIle05PfXMiLAorCQkJCQkJIG5vZGUtPnJlbW92ZSA/ICJOTyIgOiAiIik7 CisKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJEZXBlbmRlU3RtdCwgIkRFUEVORFMgT04g RVhURU5TSU9OIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRGVwZW5kZVN0bXQsICIl e25ld25hbWV9SSIsIHN0clZhbChub2RlLT5leHRuYW1lKSk7CisJfQorCWVsc2UKKwkJZWxvZyhM T0csICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLAorCQkJ IChpbnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisKKwlyZXR1cm4gYWx0ZXJEZXBlbmRlU3RtdDsK K30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIENBQ0hFIG9wdGlvbi4KKyAqLworc3Rh dGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0NhY2hlKE9ialRyZWUgKnBhcmVudCwg Rm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJ ICAgKmNhY2hlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwl0bXBzdHIg PSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWNhY2hlKTsKKworCWlmIChhbHRl cl90YWJsZSkKKwkJZm10ID0gIlNFVCBDQUNIRSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0g IkNBQ0hFICV7dmFsdWV9cyI7CisKKwljYWNoZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJ CQkJCSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYWNoZSIsCisJCQkJCQkgICJ2YWx1ZSIs IE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QoY2Fj aGUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQ1lDTEUgb3B0aW9uLgorICov CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfQ3ljbGUoT2JqVHJlZSAqcGFy ZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2Jq VHJlZQkgICAqY3ljbGU7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlm bXQgPSAiU0VUICV7bm99cyBDWUNMRSI7CisJZWxzZQorCQlmbXQgPSAiJXtub31zIENZQ0xFIjsK KworCWN5Y2xlID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICAgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJjeWNsZSIsCisJCQkJCQkgICAibm8iLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJICAgc2VxZGF0YS0+c2VxY3ljbGUgPyAiIiA6ICJOTyIpOworCXJldHVybiBuZXdfb2JqZWN0 X29iamVjdChjeWNsZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBJTkNSRU1F TlQgQlkgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFf SW5jcmVtZW50QnkoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJv b2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqaW5jcmVtZW50YWxieTsKKwljaGFyCSAg ICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAi U0VUIElOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIklOQ1JFTUVOVCBC WSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRh LT5zZXFpbmNyZW1lbnQpOworCWluY3JlbWVudGFsYnkgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIs CisJCQkJCQkJCSAgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic2VxaW5jcmVtZW50IiwKKwkJ CQkJCQkJICAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3QoaW5jcmVtZW50YWxieSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1 ZW5jZSBNQVhWQUxVRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBh cnNlX1NlcV9NYXh2YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0 YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICptYXh2YWx1ZTsKKwljaGFyCSAg ICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAi U0VUIE1BWFZBTFVFICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAiTUFYVkFMVUUgJXt2YWx1 ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxbWF4 KTsKKwltYXh2YWx1ZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAibWF4dmFsdWUiLAorCQkJCQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0 cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QobWF4dmFsdWUpOworfQor CisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgTUlOVkFMVUUgb3B0aW9uLgorICovCitzdGF0 aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfTWludmFsdWUoT2JqVHJlZSAqcGFyZW50 LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJl ZQkgICAqbWludmFsdWU7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlm IChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBNSU5WQUxVRSAle3ZhbHVlfXMiOworCWVsc2UK KwkJZm10ID0gIk1JTlZBTFVFICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2 NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1pbik7CisJbWludmFsdWUgPSBuZXdfb2JqdHJlZV9WQShm bXQsIDIsCisJCQkJCQkJICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1pbnZhbHVlIiwKKwkJ CQkJCQkgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmpl Y3Rfb2JqZWN0KG1pbnZhbHVlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE9X TkVEIEJZIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX093bmVk QnkoT2JqVHJlZSAqcGFyZW50LCBPaWQgc2VxdWVuY2VJZCwgYm9vbCBhbHRlcl90YWJsZSkKK3sK KwlPYmpUcmVlCSAgICpvd25lZGJ5ID0gTlVMTDsKKwlSZWxhdGlvbglkZXBSZWw7CisJU3lzU2Nh bkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXlzWzNdOworCUhlYXBUdXBsZSAgIHR1cGxlOwor CisJZGVwUmVsID0gdGFibGVfb3BlbihEZXBlbmRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OworCVNjYW5LZXlJbml0KCZrZXlzWzBdLAorCQkJCUFudW1fcGdfZGVwZW5kX2NsYXNzaWQsCisJ CQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0o UmVsYXRpb25SZWxhdGlvbklkKSk7CisJU2NhbktleUluaXQoJmtleXNbMV0sCisJCQkJQW51bV9w Z19kZXBlbmRfb2JqaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJ CU9iamVjdElkR2V0RGF0dW0oc2VxdWVuY2VJZCkpOworCVNjYW5LZXlJbml0KCZrZXlzWzJdLAor CQkJCUFudW1fcGdfZGVwZW5kX29ianN1YmlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwg Rl9JTlQ0RVEsCisJCQkJSW50MzJHZXREYXR1bSgwKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVn aW5zY2FuKGRlcFJlbCwgRGVwZW5kRGVwZW5kZXJJbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVM TCwgMywga2V5cyk7CisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9n ZXRuZXh0KHNjYW4pKSkKKwl7CisJCU9pZAkJIG93bmVySWQ7CisJCUZvcm1fcGdfZGVwZW5kIGRl cGZvcm07CisJCU9ialRyZWUJKnRtcG9iajsKKwkJY2hhcgkgICAqY29sbmFtZTsKKworCQlkZXBm b3JtID0gKEZvcm1fcGdfZGVwZW5kKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCS8qIE9ubHkgY29u c2lkZXIgQVVUTyBkZXBlbmRlbmNpZXMgb24gcGdfY2xhc3MgKi8KKwkJaWYgKGRlcGZvcm0tPmRl cHR5cGUgIT0gREVQRU5ERU5DWV9BVVRPKQorCQkJY29udGludWU7CisJCWlmIChkZXBmb3JtLT5y ZWZjbGFzc2lkICE9IFJlbGF0aW9uUmVsYXRpb25JZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVw Zm9ybS0+cmVmb2Jqc3ViaWQgPD0gMCkKKwkJCWNvbnRpbnVlOworCisJCW93bmVySWQgPSBkZXBm b3JtLT5yZWZvYmppZDsKKwkJY29sbmFtZSA9IGdldF9hdHRuYW1lKG93bmVySWQsIGRlcGZvcm0t PnJlZm9ianN1YmlkLCBmYWxzZSk7CisJCWlmIChjb2xuYW1lID09IE5VTEwpCisJCQljb250aW51 ZTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxh dGlvbklkLCBvd25lcklkKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiYXR0cm5h bWUiLCBjb2xuYW1lKTsKKwkJb3duZWRieSA9IG5ld19vYmp0cmVlX1ZBKCJPV05FRCBCWSAle293 bmVyfUQiLAorCQkJCQkJCQkgMiwKKwkJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi b3duZWQiLAorCQkJCQkJCQkgIm93bmVyIiwgT2JqVHlwZU9iamVjdCwgdG1wb2JqKTsKKwl9CisK KwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXJlbGF0aW9uX2Nsb3NlKGRlcFJlbCwgQWNjZXNz U2hhcmVMb2NrKTsKKworCS8qCisJICogSWYgdGhlcmUncyBubyBvd25lciBjb2x1bW4sIGVtaXQg YW4gZW1wdHkgT1dORUQgQlkgZWxlbWVudCwgc2V0IHVwIHNvCisJICogdGhhdCBpdCB3b24ndCBw cmludCBhbnl0aGluZy4KKwkgKi8KKwlpZiAoIW93bmVkYnkpCisJCS8qIFhYWCB0aGlzIHNob3Vs ZG4ndCBoYXBwZW4gLi4uICovCisJCW93bmVkYnkgPSBuZXdfb2JqdHJlZV9WQSgiT1dORUQgQlkg JXtvd25lcn1EIiwKKwkJCQkJCQkJIDMsCisJCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgIm93bmVkIiwKKwkJCQkJCQkJICJvd25lciIsIE9ialR5cGVOdWxsLAorCQkJCQkJCQkgInBy ZXNlbnQiLCBPYmpUeXBlQm9vbCwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0 KG93bmVkYnkpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgUkVTVEFSVCBvcHRp b24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9SZXN0YXJ0KE9i alRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEpCit7CisJT2JqVHJl ZQkgICAqcmVzdGFydDsKKwljaGFyCSAgICp0bXBzdHI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJ TlQ2NF9GT1JNQVQsIHNlcWRhdGEtPmxhc3RfdmFsdWUpOworCXJlc3RhcnQgPSBuZXdfb2JqdHJl ZV9WQSgiUkVTVEFSVCAle3ZhbHVlfXMiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInJlc3RhcnQiLAorCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIp OworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXN0YXJ0KTsKK30KKworLyoKKyAqIERlcGFy c2UgdGhlIHNlcXVlbmNlIFNUQVJUIFdJVEggb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9i akVsZW0gKgorZGVwYXJzZV9TZXFfU3RhcnR3aXRoKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19z ZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKnN0YXJ0 d2l0aDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3Rh YmxlKQorCQlmbXQgPSAiU0VUIFNUQVJUIFdJVEggJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9 ICJTVEFSVCBXSVRIICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JN QVQsIHNlcWRhdGEtPnNlcXN0YXJ0KTsKKwlzdGFydHdpdGggPSBuZXdfb2JqdHJlZV9WQShmbXQs IDIsCisJCQkJCQkJICAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdGFydCIsCisJCQkJCQkJ ICAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9v YmplY3Qoc3RhcnR3aXRoKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgU1RPUkFHRSBv cHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU3RvcmFn ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAg KnN0b3JhZ2U7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKwljaGFyCSAgICpz dHI7CisKKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cHN0b3JhZ2UpCisJeworCQljYXNlICdwJzoKKwkJ CXN0ciA9ICJwbGFpbiI7CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQlzdHIgPSAiZXh0ZXJu YWwiOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJc3RyID0gImV4dGVuZGVkIjsKKwkJCWJy ZWFrOworCQljYXNlICdtJzoKKwkJCXN0ciA9ICJtYWluIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3RvcmFnZSBzcGVjaWZpZXIgJWMiLCB0eXBGb3Jt LT50eXBzdG9yYWdlKTsKKwl9CisKKwl0bXBzdHIgPSBwc3ByaW50ZigiJXMiLCBzdHIpOworCisJ Zm10ID0gIlNUT1JBR0UgPSAle3ZhbHVlfXMiOworCisJc3RvcmFnZSA9IG5ld19vYmp0cmVlX1ZB KGZtdCwgMiwKKwkJCQkJCSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdG9yYWdlIiwKKwkJ CQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2Jq ZWN0X29iamVjdChzdG9yYWdlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgUkVDRUlW RSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfUmVj ZWl2ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJ ICAgKnJlY2VpdmU7CisKKwlyZWNlaXZlID0gbmV3X29ianRyZWVfVkEoIlJFQ0VJVkU9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlY2VpdmUiKTsKKwlpZiAoT2lkSXNW YWxpZCh0eXBGb3JtLT50eXByZWNlaXZlKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmVjZWl2 ZSwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHJlY2VpdmUp KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdChyZWNlaXZlLCAicHJlc2VudCIsIGZhbHNl KTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZWNlaXZlKTsKK30KKworLyoKKyAqIERl cGFyc2UgdGhlIHR5cGUgU0VORCBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAq CitkZXBhcnNlX1R5cGVfU2VuZChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3Jt KQoreworCU9ialRyZWUJICAgKnNlbmQ7CisKKwlzZW5kID0gbmV3X29ianRyZWVfVkEoIlNFTkQ9 IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNlbmQiKTsKKwlpZiAoT2lk SXNWYWxpZCh0eXBGb3JtLT50eXBzZW5kKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qoc2VuZCwg IiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJv Y2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHNlbmQpKTsKKwll bHNlCisJCWFwcGVuZF9ib29sX29iamVjdChzZW5kLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJl dHVybiBuZXdfb2JqZWN0X29iamVjdChzZW5kKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5 cGUgdHlwbW9kX2luIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFy c2VfVHlwZV9UeXBtb2RfSW4oT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkK K3sKKwlPYmpUcmVlCSAgICp0eXBtb2RpbjsKKworCXR5cG1vZGluID0gbmV3X29ianRyZWVfVkEo IlRZUE1PRF9JTj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9k X2luIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kaW4pKQorCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0eXBtb2RpbiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5 cEZvcm0tPnR5cG1vZGluKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodHlwbW9kaW4s ICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5cG1vZGlu KTsKK30KKworCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSB0eXBtb2Rfb3V0IG9wdGlvbi4KKyAq Lworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KE9ialRy ZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZQkgICAqdHlwbW9k b3V0OworCisJdHlwbW9kb3V0ID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9PVVQ9IiwgMSwKKwkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9vdXQiKTsKKwlpZiAoT2lkSXNW YWxpZCh0eXBGb3JtLT50eXBtb2RvdXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0eXBtb2Rv dXQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RvdXQp KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0eXBtb2RvdXQsICJwcmVzZW50IiwgZmFs c2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5cG1vZG91dCk7Cit9CisKKworLyoK KyAqIERlcGFyc2UgdGhlIHR5cGUgYW5hbHl6ZSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfQW5hbHl6ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf dHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnR5cGFuYWx5emU7CisKKwl0eXBhbmFseXpl ID0gbmV3X29ianRyZWVfVkEoIkFOQUxZWkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImFuYWx5emUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBhbmFseXpl KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodHlwYW5hbHl6ZSwgIiV7cHJvY2VkdXJlfUQiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGFuYWx5emUpKTsKKwllbHNlCisJCWFwcGVuZF9i b29sX29iamVjdCh0eXBhbmFseXplLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdf b2JqZWN0X29iamVjdCh0eXBhbmFseXplKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUg c3Vic2NyaXB0IG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2Vf VHlwZV9TdWJzY3JpcHQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sK KwlPYmpUcmVlCSAgICp0eXBzdWJzY3JpcHQ7CisKKwl0eXBzdWJzY3JpcHQgPSBuZXdfb2JqdHJl ZV9WQSgiU1VCU0NSSVBUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJz dWJzY3JpcHQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBzdWJzY3JpcHQpKQorCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0eXBzdWJzY3JpcHQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzdWJzY3JpcHQpKTsKKwllbHNlCisJCWFwcGVuZF9ib29s X29iamVjdCh0eXBzdWJzY3JpcHQsICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19v YmplY3Rfb2JqZWN0KHR5cHN1YnNjcmlwdCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgUnVsZVN0 bXQgKENSRUFURSBSVUxFKS4KKyAqCisgKiBHaXZlbiBhIHJ1bGUgT0lEIGFuZCB0aGUgcGFyc2V0 cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0 aGUgcnVsZSBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1J1bGVTdG10 KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCVJ1bGVTdG10ICpub2RlID0gKFJ1 bGVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpydWxlU3RtdDsKKwlPYmpUcmVlCSAg ICp0bXA7CisJUmVsYXRpb24JcGdfcmV3cml0ZTsKKwlGb3JtX3BnX3Jld3JpdGUgcmV3ckZvcm07 CisJSGVhcFR1cGxlCXJld3JUdXA7CisJU3lzU2NhbkRlc2MJc2NhbjsKKwlTY2FuS2V5RGF0YQlr ZXk7CisJRGF0dW0JCWV2X3F1YWw7CisJRGF0dW0JCWV2X2FjdGlvbnM7CisJYm9vbAkJaXNudWxs OworCWNoYXIJICAgKnF1YWw7CisJTGlzdAkgICAqYWN0aW9uczsKKwlMaXN0CSAgICpsaXN0Owor CUxpc3RDZWxsICAgKmNlbGw7CisKKwlwZ19yZXdyaXRlID0gdGFibGVfb3BlbihSZXdyaXRlUmVs YXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgma2V5LAorCQkJCUFudW1f cGdfcmV3cml0ZV9vaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLAorCQkJCUZfT0lERVEs IE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNj YW4ocGdfcmV3cml0ZSwgUmV3cml0ZU9pZEluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAx LCAma2V5KTsKKwlyZXdyVHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQocmV3clR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciByZXdyaXRlIHJ1bGUgd2l0aCBvaWQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXJld3JG b3JtID0gKEZvcm1fcGdfcmV3cml0ZSkgR0VUU1RSVUNUKHJld3JUdXApOworCisJcnVsZVN0bXQg PSBuZXdfb2JqdHJlZSgiQ1JFQVRFIFJVTEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJ1 bGVTdG10LCAiJXtvcl9yZXBsYWNlfXMiLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQ TEFDRSIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChydWxlU3RtdCwgIiV7aWRlbnRp dHl9SSIsCisJCQkJCQkgbm9kZS0+cnVsZW5hbWUpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qo cnVsZVN0bXQsICJBUyBPTiAle2V2ZW50fXMiLAorCQkJCQkJIG5vZGUtPmV2ZW50ID09IENNRF9T RUxFQ1QgPyAiU0VMRUNUIiA6CisJCQkJCQkgbm9kZS0+ZXZlbnQgPT0gQ01EX1VQREFURSA/ICJV UERBVEUiIDoKKwkJCQkJCSBub2RlLT5ldmVudCA9PSBDTURfREVMRVRFID8gIkRFTEVURSIgOgor CQkJCQkJIG5vZGUtPmV2ZW50ID09IENNRF9JTlNFUlQgPyAiSU5TRVJUIiA6ICJYWFgiKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChydWxlU3RtdCwgIlRPICV7dGFibGV9RCIsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkgcmV3ckZvcm0tPmV2X2NsYXNzKSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChydWxlU3Rt dCwgIkRPICV7aW5zdGVhZH1zIiwKKwkJCQkJCSBub2RlLT5pbnN0ZWFkID8gIklOU1RFQUQiIDog IkFMU08iKTsKKworCWV2X3F1YWwgPSBoZWFwX2dldGF0dHIocmV3clR1cCwgQW51bV9wZ19yZXdy aXRlX2V2X3F1YWwsCisJCQkJCQkgICBSZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAmaXNu dWxsKTsKKwlldl9hY3Rpb25zID0gaGVhcF9nZXRhdHRyKHJld3JUdXAsIEFudW1fcGdfcmV3cml0 ZV9ldl9hY3Rpb24sCisJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAmaXNu dWxsKTsKKworCXBnX2dldF9ydWxlZGVmX2RldGFpbGVkKGV2X3F1YWwsIGV2X2FjdGlvbnMsICZx dWFsLCAmYWN0aW9ucyk7CisKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiV0hFUkUgJXtjbGF1c2V9 cyIsIDApOworCisJaWYgKHF1YWwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImNsYXVz ZSIsIHF1YWwpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXAsICJjbGF1c2Ui KTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCisJ YXBwZW5kX29iamVjdF9vYmplY3QocnVsZVN0bXQsICJ3aGVyZV9jbGF1c2UiLCB0bXApOworCisJ bGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIGFjdGlvbnMpCisJeworCQljaGFyICphY3Rpb24g PSBsZmlyc3QoY2VsbCk7CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmpl Y3QoYWN0aW9uKSk7CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QocnVsZVN0bXQsICIle2FjdGlv bnM6LCB9cyIsIGxpc3QpOworCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9z ZShwZ19yZXdyaXRlLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJ1bGVTdG10OworfQor CisvKgorICogSGFuZGxlIGRlcGFyc2luZyBvZiBzaW1wbGUgY29tbWFuZHMuCisgKgorICogVGhp cyBmdW5jdGlvbiBzaG91bGQgY292ZXIgYWxsIGNhc2VzIGhhbmRsZWQgaW4gUHJvY2Vzc1V0aWxp dHlTbG93LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX3NpbXBsZV9jb21tYW5kKENv bGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpwYXJz ZXRyZWU7CisJT2JqVHJlZQkgICAqY29tbWFuZDsKKworCUFzc2VydChjbWQtPnR5cGUgPT0gU0NU X1NpbXBsZSk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPnBhcnNldHJlZTsKKwlvYmplY3RJZCA9IGNt ZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZDsKKworCWlmIChjbWQtPmluX2V4dGVuc2lvbiAm JiAobm9kZVRhZyhwYXJzZXRyZWUpICE9IFRfQ3JlYXRlRXh0ZW5zaW9uU3RtdCkpCisJCXJldHVy biBOVUxMOworCisKKwkvKiBUaGlzIHN3aXRjaCBuZWVkcyB0byBoYW5kbGUgZXZlcnl0aGluZyB0 aGF0IFByb2Nlc3NVdGlsaXR5U2xvdyBkb2VzICovCisJc3dpdGNoIChub2RlVGFnKHBhcnNldHJl ZSkpCisJeworCQljYXNlIFRfQ3JlYXRlU2NoZW1hU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNl X0NyZWF0ZVNjaGVtYVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQlj YXNlIFRfQWx0ZXJEb21haW5TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJEb21haW5T dG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJCSAgY21kLT5kLnNpbXBsZS5zZWNv bmRhcnlPYmplY3QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZVN0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBUX1JlZnJlc2hNYXRWaWV3U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX1Jl ZnJlc2hNYXRWaWV3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNh c2UgVF9DcmVhdGVUcmlnU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVRyaWdTdG10 KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX1J1bGVTdG10Ogor CQkJY29tbWFuZCA9IGRlcGFyc2VfUnVsZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQli cmVhazsKKworCQljYXNlIFRfQ3JlYXRlU2VxU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Ny ZWF0ZVNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRf Q3JlYXRlRmR3U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUZkd1N0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJGZHdTdG10OgorCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJGZHdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyU2VxU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Fs dGVyU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9E ZWZpbmVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfRGVmaW5lU3RtdChvYmplY3RJZCwgcGFy c2V0cmVlLAorCQkJCQkJCQkJCSBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisJCQli cmVhazsKKworCQljYXNlIFRfQ3JlYXRlQ29udmVyc2lvblN0bXQ6CisJCQljb21tYW5kID0gZGVw YXJzZV9DcmVhdGVDb252ZXJzaW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisK KwkJY2FzZSBUX0NyZWF0ZURvbWFpblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVE b21haW4ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRl RXh0ZW5zaW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUV4dGVuc2lvblN0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJFeHRlbnNp b25TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJFeHRlbnNpb25TdG10KG9iamVjdElk LCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRXh0ZW5zaW9uQ29udGVu dHNTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5zaW1wbGUuc2Vjb25k YXJ5T2JqZWN0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVPcEZhbWlseVN0bXQ6CisJ CQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVPcEZhbWlseShvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVQb2xpY3lTdG10OgorCQkJY29tbWFuZCA9IGRl cGFyc2VfQ3JlYXRlUG9saWN5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVF9JbmRleFN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9JbmRleFN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlRnVuY3Rpb25T dG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlRnVuY3Rpb24ob2JqZWN0SWQsIHBhcnNl dHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJGdW5jdGlvblN0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9BbHRlckZ1bmN0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBUX1JlbmFtZVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9SZW5hbWVT dG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNh c2UgVF9BbHRlck9iamVjdERlcGVuZHNTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJE ZXBlbmRTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0Fs dGVyT2JqZWN0U2NoZW1hU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyT2JqZWN0U2No ZW1hU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsCisJCQkJCQkJCQkJCQkJcGFyc2V0cmVlLAor CQkJCQkJCQkJCQkJCWNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVF9BbHRlck93bmVyU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyT3du ZXJTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgVF9BbHRlck9wZXJhdG9yU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyT3Bl cmF0b3JTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0Fs dGVyUG9saWN5U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyUG9saWN5U3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlclR5cGVTdG10Ogor CQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJUeXBlU2V0U3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9Db21wb3NpdGVUeXBlU3RtdDoKKwkJCWNvbW1hbmQg PSBkZXBhcnNlX0NvbXBvc2l0ZVR5cGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBUX0NyZWF0ZUVudW1TdG10OgkvKiBDUkVBVEUgVFlQRSBBUyBFTlVNICov CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVFbnVtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVSYW5nZVN0bXQ6CS8qIENSRUFURSBUWVBF IEFTIFJBTkdFICovCisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVSYW5nZVN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJFbnVtU3RtdDoKKwkJ CWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRW51bVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlQ2FzdFN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJz ZV9DcmVhdGVDYXN0U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWRl ZmF1bHQ6CisJCQljb21tYW5kID0gTlVMTDsKKwkJCWVsb2coTE9HLCAidW5yZWNvZ25pemVkIG5v ZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJCQkgKGludCkgbm9kZVRhZyhwYXJz ZXRyZWUpKTsKKwl9CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUg Zm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcuCisgKgorICogRGVhbCB3aXRoIGFsbCB0aGUgdGFi bGUgZWxlbWVudHMgKGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzKS4KKyAqCisgKiBOb3RlIHdlIGln bm9yZSBjb25zdHJhaW50cyBpbiB0aGUgcGFyc2Ugbm9kZSBoZXJlOyB0aGV5IGFyZSBleHRyYWN0 ZWQgZnJvbQorICogc3lzdGVtIGNhdGFsb2dzIGluc3RlYWQuCisgKi8KK3N0YXRpYyBMaXN0ICoK K2RlcGFyc2VfVGFibGVFbGVtZW50cyhSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqdGFibGVFbGVt ZW50cywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkgIGJvb2wgdHlwZWQsIGJvb2wgY29tcG9zaXRl KQoreworCUxpc3QJICAgKmVsZW1lbnRzID0gTklMOworCUxpc3RDZWxsICAgKmxjOworCisJZm9y ZWFjaChsYywgdGFibGVFbGVtZW50cykKKwl7CisJCU5vZGUJICAgKmVsdCA9IChOb2RlICopIGxm aXJzdChsYyk7CisKKwkJc3dpdGNoIChub2RlVGFnKGVsdCkpCisJCXsKKwkJCWNhc2UgVF9Db2x1 bW5EZWY6CisJCQkJeworCQkJCQlPYmpUcmVlCSAgICp0cmVlOworCisJCQkJCXRyZWUgPSB0eXBl ZCA/CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChyZWxhdGlvbiwgZHBjb250ZXh0LAor CQkJCQkJCQkJCQkJKENvbHVtbkRlZiAqKSBlbHQpIDoKKwkJCQkJCWRlcGFyc2VfQ29sdW1uRGVm KHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJCSAgY29tcG9zaXRlLCAoQ29sdW1uRGVm ICopIGVsdCwKKwkJCQkJCQkJCQkJICBmYWxzZSwgTlVMTCk7CisJCQkJCWlmICh0cmVlICE9IE5V TEwpCisJCQkJCXsKKwkJCQkJCU9iakVsZW0JKmNvbHVtbjsKKworCQkJCQkJY29sdW1uID0gbmV3 X29iamVjdF9vYmplY3QodHJlZSk7CisJCQkJCQllbGVtZW50cyA9IGxhcHBlbmQoZWxlbWVudHMs IGNvbHVtbik7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFRfQ29uc3RyYWlu dDoKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgbm9k ZSB0eXBlICVkIiwgbm9kZVRhZyhlbHQpKTsKKwkJfQorCX0KKworCXJldHVybiBlbGVtZW50czsK K30KKworLyoKKyAqIFdvcmtob3JzZSB0byBkZXBhcnNlIGEgQ29sbGVjdGVkQ29tbWFuZC4KKyAq LworY2hhciAqCitkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQs IGJvb2wgdmVyYm9zZV9tb2RlKQoreworCU92ZXJyaWRlU2VhcmNoUGF0aCAqb3ZlcnJpZGVQYXRo OworCU1lbW9yeUNvbnRleHQJb2xkY3h0OworCU1lbW9yeUNvbnRleHQJdG1wY3h0OworCU9ialRy ZWUJCSAgICp0cmVlOworCWNoYXIJCSAgICpjb21tYW5kOworCVN0cmluZ0luZm9EYXRhICBzdHI7 CisKKwkvKgorCSAqIEFsbG9jYXRlIGV2ZXJ5dGhpbmcgZG9uZSBieSB0aGUgZGVwYXJzaW5nIHJv dXRpbmVzIGludG8gYSB0ZW1wIGNvbnRleHQsCisJICogdG8gYXZvaWQgaGF2aW5nIHRvIHNwcmlu a2xlIHRoZW0gd2l0aCBtZW1vcnkgaGFuZGxpbmcgY29kZTsgYnV0IGFsbG9jYXRlCisJICogdGhl IG91dHB1dCBTdHJpbmdJbmZvIGJlZm9yZSBzd2l0Y2hpbmcuCisJICovCisJaW5pdFN0cmluZ0lu Zm8oJnN0cik7CisJdG1wY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlD b250ZXh0LAorCQkJCQkJCQkgICAiZGVwYXJzZSBjdHgiLAorCQkJCQkJCQkgICBBTExPQ1NFVF9E RUZBVUxUX01JTlNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJ CQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUFYU0laRSk7CisJb2xkY3h0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKHRtcGN4dCk7CisKKwkvKgorCSAqIE1hbnkgcm91dGluZXMgdW5kZXJseWlu ZyB0aGlzIG9uZSB3aWxsIGludm9rZSBydWxldXRpbHMuYyBmdW5jdGlvbmFsaXR5CisJICogaW4g b3JkZXIgdG8gb2J0YWluIGRlcGFyc2VkIHZlcnNpb25zIG9mIGV4cHJlc3Npb25zLiAgSW4gc3Vj aCByZXN1bHRzLAorCSAqIHdlIHdhbnQgYWxsIG9iamVjdCBuYW1lcyB0byBiZSBxdWFsaWZpZWQs IHNvIHRoYXQgcmVzdWx0cyBhcmUgInBvcnRhYmxlIgorCSAqIHRvIGVudmlyb25tZW50cyB3aXRo IGRpZmZlcmVudCBzZWFyY2hfcGF0aCBzZXR0aW5ncy4gIFJhdGhlciB0aGFuIGluamVjdAorCSAq IHdoYXQgd291bGQgYmUgcmVwZXRpdGl2ZSBjYWxscyB0byBvdmVycmlkZSBzZWFyY2ggcGF0aCBh bGwgb3ZlciB0aGUKKwkgKiBwbGFjZSwgd2UgZG8gaXQgY2VudHJhbGx5IGhlcmUuCisJICovCisJ b3ZlcnJpZGVQYXRoID0gR2V0T3ZlcnJpZGVTZWFyY2hQYXRoKEN1cnJlbnRNZW1vcnlDb250ZXh0 KTsKKwlvdmVycmlkZVBhdGgtPnNjaGVtYXMgPSBOSUw7CisJb3ZlcnJpZGVQYXRoLT5hZGRDYXRh bG9nID0gZmFsc2U7CisJb3ZlcnJpZGVQYXRoLT5hZGRUZW1wID0gdHJ1ZTsKKwlQdXNoT3ZlcnJp ZGVTZWFyY2hQYXRoKG92ZXJyaWRlUGF0aCk7CisKKwl2ZXJib3NlID0gdmVyYm9zZV9tb2RlOwor CisJc3dpdGNoIChjbWQtPnR5cGUpCisJeworCQljYXNlIFNDVF9TaW1wbGU6CisJCQl0cmVlID0g ZGVwYXJzZV9zaW1wbGVfY29tbWFuZChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVy VGFibGU6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlclRhYmxlU3RtdChjbWQpOworCQkJYnJlYWs7 CisJCWNhc2UgU0NUX0dyYW50OgorCQkJdHJlZSA9IGRlcGFyc2VfR3JhbnRTdG10KGNtZCk7CisJ CQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToKKwkJCXRyZWUgPSBkZXBhcnNlX0Fs dGVyT3BGYW1pbHkoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgor CQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlT3BDbGFzc1N0bXQoY21kKTsKKwkJCWJyZWFrOworCQlk ZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQi LCBjbWQtPnR5cGUpOworCX0KKworCVBvcE92ZXJyaWRlU2VhcmNoUGF0aCgpOworCisJaWYgKHRy ZWUpCisJeworCQlKc29uYiAqanNvbmI7CisKKwkJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHRy ZWUpOworCQljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09O Ql9FU1RJTUFURURfTEVOKTsKKwl9CisJZWxzZQorCQljb21tYW5kID0gTlVMTDsKKworCS8qCisJ ICogQ2xlYW4gdXAuICBOb3RlIHRoYXQgc2luY2Ugd2UgY3JlYXRlZCB0aGUgU3RyaW5nSW5mbyBp biB0aGUgY2FsbGVyJ3MKKwkgKiBjb250ZXh0LCB0aGUgb3V0cHV0IHN0cmluZyBpcyBub3QgZGVs ZXRlZCBoZXJlLgorCSAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCU1lbW9y eUNvbnRleHREZWxldGUodG1wY3h0KTsKKworCXJldHVybiBjb21tYW5kOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9qc29uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZmI5NzBm MmJlZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMK QEAgLTAsMCArMSw3NjMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9qc29uLmMK KyAqCSAgSlNPTiBjb2RlIHJlbGF0ZWQgdG8gRERMIGNvbW1hbmQgZGVwYXJzaW5nCisgKgorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkg IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5o IgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIK KworCisvKgorICogQ29udmVyc2lvbiBzcGVjaWZpZXIsIGl0IGRldGVybWluZXMgaG93IHdlIGV4 cGFuZCB0aGUganNvbiBlbGVtZW50IGludG8KKyAqIHN0cmluZy4KKyAqLwordHlwZWRlZiBlbnVt Cit7CisJU3BlY1R5cGVuYW1lLAorCVNwZWNPcGVyYXRvcm5hbWUsCisJU3BlY0RvdHRlZE5hbWUs CisJU3BlY1N0cmluZywKKwlTcGVjTnVtYmVyLAorCVNwZWNTdHJpbmdMaXRlcmFsLAorCVNwZWNJ ZGVudGlmaWVyLAorCVNwZWNSb2xlCit9IGNvbnZTcGVjaWZpZXI7CisKKy8qCisgKiBBIHRlcm5h cnkgdmFsdWUgd2hpY2ggcmVwcmVzZW50cyBhIGJvb2xlYW4gdHlwZSBKc29uYlZhbHVlLgorICov Cit0eXBlZGVmIGVudW0KK3sKKwl0dl9hYnNlbnQsCisJdHZfdHJ1ZSwKKwl0dl9mYWxzZQorfSBq c29uX3RyaXZhbHVlOworCitzdGF0aWMgYm9vbCBleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3Ry aW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJCQkJIEpzb25iVmFsdWUgKmpzb252YWwsIGNv bnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCQkJIGNvbnN0IGNoYXIgKmZtdCk7CitzdGF0aWMg dm9pZCBleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJ CSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5c2VwLAorCQkJCSAgIGNvbnZTcGVj aWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQpOworc3RhdGljIHZvaWQgZm10c3RyX2Vy cm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CitjaGFyICpkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmlu ZyhjaGFyICpqc29uYik7CisKKy8qCisgKiBHaXZlbiBhIEpzb25iQ29udGFpbmVyLCBmaW5kIHRo ZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtleSBuYW1lIGluIGl0LgorICogSWYgaXQncyBv ZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZCb29sLCBhbiBlcnJvciBpcyByYWlzZWQuIElmIGl0IGRv ZXNuJ3QKKyAqIGV4aXN0LCB0dl9hYnNlbnQgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSByZXR1cm4g dGhlIGFjdHVhbCBqc29uX3RyaXZhbHVlLgorICovCitzdGF0aWMganNvbl90cml2YWx1ZQorZmlu ZF9ib29sX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIGNoYXIg KmtleW5hbWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJanNv bl90cml2YWx1ZQlyZXN1bHQ7CisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0 cmluZy52YWwgPSBrZXluYW1lOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1l KTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJ CQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwpCisJCXJldHVybiB0 dl9hYnNlbnQ7CisJaWYgKHZhbHVlLT50eXBlICE9IGpidkJvb2wpCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVy cm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IG9mIHR5cGUgYm9vbGVhbiIsCisJCQkJCQlrZXlu YW1lKSkpOworCXJlc3VsdCA9IHZhbHVlLT52YWwuYm9vbGVhbiA/IHR2X3RydWUgOiB0dl9mYWxz ZTsKKwlwZnJlZSh2YWx1ZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogR2l2ZW4g YSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZlbiBrZXkg bmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVyIHRoYW4gamJ2U3RyaW5nLCBh biBlcnJvciBpcyByYWlzZWQuICBJZiBpdCBkb2Vzbid0CisgKiBleGlzdCwgYW4gZXJyb3IgaXMg cmFpc2VkIHVubGVzcyBtaXNzaW5nX29rOyBvdGhlcndpc2UgcmV0dXJuIE5VTEwuCisgKgorICog SWYgaXQgZXhpc3RzIGFuZCBpcyBhIHN0cmluZywgYSBmcmVzaGx5IHBhbGxvYydlZCBjb3B5IGlz IHJldHVybmVkLgorICoKKyAqIElmICpsZW5ndGggaXMgbm90IE5VTEwsIGl0IGlzIHNldCB0byB0 aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjaGFyICoKK2ZpbmRfc3RyaW5n X2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIGNoYXIgKmtleW5h bWUsCisJCQkJCQkJICBib29sIG1pc3Npbmdfb2ssIGludCAqbGVuZ3RoKQoreworCUpzb25iVmFs dWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNoYXIJICAgKnN0cjsKKworCS8qIFhYWCB2 ZXJpZnkgdGhhdCB0aGlzIGlzIGFuIG9iamVjdCwgbm90IGFuIGFycmF5ICovCisKKwlrZXkudHlw ZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1lOworCWtleS52YWwu c3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJv bUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJaWYg KHZhbHVlID09IE5VTEwpCisJeworCQlpZiAobWlzc2luZ19vaykKKwkJCXJldHVybiBOVUxMOwor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3NpbmcgZWxlbWVudCBcIiVzXCIgaW4ganNvbiBvYmpl Y3QiLCBrZXluYW1lKSkpOworCX0KKworCXN0ciA9IHBuc3RyZHVwKHZhbHVlLT52YWwuc3RyaW5n LnZhbCwgdmFsdWUtPnZhbC5zdHJpbmcubGVuKTsKKwlpZiAobGVuZ3RoKQorCQkqbGVuZ3RoID0g dmFsdWUtPnZhbC5zdHJpbmcubGVuOworCXBmcmVlKHZhbHVlKTsKKwlyZXR1cm4gc3RyOworfQor CisjZGVmaW5lIEFEVkFOQ0VfUEFSU0VfUE9JTlRFUihwdHIsZW5kX3B0cikgXAorCWRvIHsgXAor CQlpZiAoKysocHRyKSA+PSAoZW5kX3B0cikpIFwKKwkJCWVyZXBvcnQoRVJST1IsIFwKKwkJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksIFwKKwkJCQkJIGVycm1z ZygidW50ZXJtaW5hdGVkIGZvcm1hdCBzcGVjaWZpZXIiKSkpOyBcCisJfSB3aGlsZSAoMCkKKwor LyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIHBnX2V2ZW50X3RyaWdnZXJfZXhwYW5kX2NvbW1h bmQKKyAqCisgKiBGaW5kIHRoZSAiZm10IiBlbGVtZW50IGluIHRoZSBnaXZlbiBjb250YWluZXIs IGFuZCBleHBhbmQgaXQgaW50byB0aGUKKyAqIHByb3ZpZGVkIFN0cmluZ0luZm8uCisgKi8KK3N0 YXRpYyB2b2lkCitleHBhbmRfZm10X3JlY3Vyc2l2ZShKc29uYkNvbnRhaW5lciAqY29udGFpbmVy LCBTdHJpbmdJbmZvIGJ1ZikKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1 ZTsKKwljb25zdCBjaGFyICpjcDsKKwljb25zdCBjaGFyICpzdGFydF9wdHI7CisJY29uc3QgY2hh ciAqZW5kX3B0cjsKKwlpbnQJCQlsZW47CisKKwlzdGFydF9wdHIgPSBmaW5kX3N0cmluZ19pbl9q c29uYmNvbnRhaW5lcihjb250YWluZXIsICJmbXQiLCBmYWxzZSwgJmxlbik7CisJZW5kX3B0ciA9 IHN0YXJ0X3B0ciArIGxlbjsKKworCWZvciAoY3AgPSBzdGFydF9wdHI7IGNwIDwgZW5kX3B0cjsg Y3ArKykKKwl7CisJCWNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyOworCQlib29sCQlpc19hcnJheSA9 IGZhbHNlOworCQljaGFyCSAgICpwYXJhbSA9IE5VTEw7CisJCWNoYXIJICAgKmFycmF5c2VwID0g TlVMTDsKKworCQlpZiAoKmNwICE9ICclJykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJN YWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQorCisKKwkJQURWQU5DRV9QQVJTRV9Q T0lOVEVSKGNwLCBlbmRfcHRyKTsKKworCQkvKiBFYXN5IGNhc2U6ICUlIG91dHB1dHMgYSBzaW5n bGUgJSAqLworCQlpZiAoKmNwID09ICclJykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJN YWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFNjYW4gdGhl IG1hbmRhdG9yeSBlbGVtZW50IG5hbWUuICBBbGxvdyBmb3IgYW4gYXJyYXkgc2VwYXJhdG9yCisJ CSAqICh3aGljaCBtYXkgYmUgdGhlIGVtcHR5IHN0cmluZykgdG8gYmUgc3BlY2lmaWVkIGFmdGVy IGNvbG9uLgorCQkgKi8KKwkJaWYgKCpjcCA9PSAneycpCisJCXsKKwkJCVN0cmluZ0luZm9EYXRh IHBhcmJ1ZjsKKwkJCVN0cmluZ0luZm9EYXRhIGFycmF5c2VwYnVmOworCQkJU3RyaW5nSW5mbwlh cHBlbmRUbzsKKworCQkJaW5pdFN0cmluZ0luZm8oJnBhcmJ1Zik7CisJCQlhcHBlbmRUbyA9ICZw YXJidWY7CisKKwkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQlmb3Ig KDsgY3AgPCBlbmRfcHRyOykKKwkJCXsKKwkJCQlpZiAoKmNwID09ICc6JykKKwkJCQl7CisJCQkJ CS8qCisJCQkJCSAqIEZvdW5kIGFycmF5IHNlcGFyYXRvciBkZWxpbWl0ZXI7IGVsZW1lbnQgbmFt ZSBpcyBub3cKKwkJCQkJICogY29tcGxldGUsIHN0YXJ0IGZpbGxpbmcgdGhlIHNlcGFyYXRvci4K KwkJCQkJICovCisJCQkJCWluaXRTdHJpbmdJbmZvKCZhcnJheXNlcGJ1Zik7CisJCQkJCWFwcGVu ZFRvID0gJmFycmF5c2VwYnVmOworCQkJCQlpc19hcnJheSA9IHRydWU7CisJCQkJCUFEVkFOQ0Vf UEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJ CWlmICgqY3AgPT0gJ30nKQorCQkJCXsKKwkJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBl bmRfcHRyKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFj cm8oYXBwZW5kVG8sICpjcCk7CisJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRy KTsKKwkJCX0KKwkJCXBhcmFtID0gcGFyYnVmLmRhdGE7CisJCQlpZiAoaXNfYXJyYXkpCisJCQkJ YXJyYXlzZXAgPSBhcnJheXNlcGJ1Zi5kYXRhOworCQl9CisJCWlmIChwYXJhbSA9PSBOVUxMKQor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJIGVycm1zZygibWlzc2luZyBjb252ZXJzaW9uIG5hbWUgaW4gY29udmVy c2lvbiBzcGVjaWZpZXIiKSkpOworCisJCXN3aXRjaCAoKmNwKQorCQl7CisJCQljYXNlICdJJzoK KwkJCQlzcGVjaWZpZXIgPSBTcGVjSWRlbnRpZmllcjsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0Qn OgorCQkJCXNwZWNpZmllciA9IFNwZWNEb3R0ZWROYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAn cyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1N0cmluZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0wn OgorCQkJCXNwZWNpZmllciA9IFNwZWNTdHJpbmdMaXRlcmFsOworCQkJCWJyZWFrOworCQkJY2Fz ZSAnVCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1R5cGVuYW1lOworCQkJCWJyZWFrOworCQkJY2Fz ZSAnTyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY09wZXJhdG9ybmFtZTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgJ24nOgorCQkJCXNwZWNpZmllciA9IFNwZWNOdW1iZXI7CisJCQkJYnJlYWs7CisJCQlj YXNlICdSJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjUm9sZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1 bHQ6CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBjb252ZXJzaW9uIHNwZWNp ZmllciBcIiVjXCIiLCAqY3ApKSk7CisJCX0KKworCQkvKgorCQkgKiBPYnRhaW4gdGhlIGVsZW1l bnQgdG8gYmUgZXhwYW5kZWQuCisJCSAqLworCQlrZXkudHlwZSA9IGpidlN0cmluZzsKKwkJa2V5 LnZhbC5zdHJpbmcudmFsID0gcGFyYW07CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihw YXJhbSk7CisKKwkJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVy LCBKQl9GT0JKRUNULCAma2V5KTsKKworCQkvKgorCQkgKiBFeHBhbmQgdGhlIGRhdGEgKHBvc3Np Ymx5IGFuIGFycmF5KSBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mby4KKwkJICovCisJCWlmIChp c19hcnJheSkKKwkJCWV4cGFuZF9qc29uYl9hcnJheShidWYsIHBhcmFtLCB2YWx1ZSwgYXJyYXlz ZXAsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwkJZWxzZQorCQkJZXhwYW5kX29uZV9qc29uYl9l bGVtZW50KGJ1ZiwgcGFyYW0sIHZhbHVlLCBzcGVjaWZpZXIsIHN0YXJ0X3B0cik7CisJfQorfQor CisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHF1b3RlZCBpZGVudGlmaWVyLiAgVGhl IHZhbHVlIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRf anNvbnZhbF9pZGVudGlmaWVyKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQor eworCWNoYXIJICAgKnN0cjsKKworCUFzc2VydChqc29udmFsLT50eXBlID09IGpidlN0cmluZyk7 CisKKwlzdHIgPSBwbnN0cmR1cChqc29udmFsLT52YWwuc3RyaW5nLnZhbCwganNvbnZhbC0+dmFs LnN0cmluZy5sZW4pOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlm aWVyKHN0cikpOworCXBmcmVlKHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVl IGFzIGEgZG90LXNlcGFyYXRlZC1uYW1lLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZQorICog b2JqZWN0IGFuZCBtYXkgY29udGFpbiBlbGVtZW50cyAic2NoZW1hbmFtZSIgKG9wdGlvbmFsKSwg Im9iam5hbWUiCisgKiAobWFuZGF0b3J5KSwgImF0dHJuYW1lIiAob3B0aW9uYWwpLiAgRG91Ymxl IHF1b3RlcyBhcmUgYWRkZWQgdG8gZWFjaCBlbGVtZW50CisgKiBhcyBuZWNlc3NhcnksIGFuZCBk b3Qgc2VwYXJhdG9ycyB3aGVyZSBuZWVkZWQuCisgKgorICogT25lIGRheSB3ZSBtaWdodCBuZWVk IGEgImNhdGFsb2ciIGVsZW1lbnQgYXMgd2VsbCwgYnV0IG5vIGN1cnJlbnQgdXNlIGNhc2UKKyAq IG5lZWRzIHRoYXQuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9kb3R0ZWRuYW1l KFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsK KworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5h cnkuZGF0YSwKKwkJCQkJCQkJCQkic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCWlmIChzdHIp CisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZpZXIoc3Ry KSk7CisJCXBmcmVlKHN0cik7CisJfQorCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250 YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJvYmpuYW1lIiwgZmFs c2UsIE5VTEwpOworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCBxdW90ZV9pZGVudGlmaWVy KHN0cikpOworCXBmcmVlKHN0cik7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRh aW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJImF0dHJuYW1lIiwgdHJ1 ZSwgTlVMTCk7CisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiLiVzIiwg cXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9Cit9CisKKy8qCisgKiBF eHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgdHlwZSBuYW1lLgorICovCitzdGF0aWMgdm9pZAorZXhw YW5kX2pzb252YWxfdHlwZW5hbWUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwp Cit7CisJY2hhcgkgICAqc2NoZW1hID0gTlVMTDsKKwljaGFyCSAgICp0eXBlbmFtZTsKKwljaGFy CSAgICp0eXBtb2RzdHI7CisJanNvbl90cml2YWx1ZQlpc19hcnJheTsKKwljaGFyCSAgICphcnJh eV9kZWNvcjsKKworCS8qCisJICogV2Ugb21pdCBzY2hlbWEtcXVhbGlmeWluZyB0aGUgb3V0cHV0 IG5hbWUgaWYgdGhlIHNjaGVtYSBlbGVtZW50IGlzCisJICogZWl0aGVyIHRoZSBlbXB0eSBzdHJp bmcgb3IgTlVMTDsgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMKKwkgKiBp cyB0aGF0IGluIHRoZSBsYXR0ZXIgd2UgcXVvdGUgdGhlIHR5cGUgbmFtZSwgaW4gdGhlIGZvcm1l ciB3ZSBkb24ndC4KKwkgKiBUaGlzIGFsbG93cyBmb3IgdHlwZXMgd2l0aCBzcGVjaWFsIHR5cG1v ZCBuZWVkcywgc3VjaCBhcyBpbnRlcnZhbCBhbmQKKwkgKiB0aW1lc3RhbXAgKHNlZSBmb3JtYXRf dHlwZV9kZXRhaWxlZCksIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgYWxsb3dpbmcKKwkgKiBmb3Ig dGhlIHNjaGVtYSBuYW1lIHRvIGJlIG9taXR0ZWQgZnJvbSB0eXBlIG5hbWVzIHRoYXQgcmVxdWly ZSBxdW90ZXMKKwkgKiBidXQgYXJlIHRvIGJlIG9idGFpbmVkIGZyb20gYSB1c2VyIHNjaGVtYS4K KwkgKi8KKworCXNjaGVtYSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwt PnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwp OworCXR5cGVuYW1lID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFs LmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgInR5cGVuYW1lIiwgZmFsc2UsIE5VTEwpOworCXR5 cG1vZHN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5h cnkuZGF0YSwKKwkJCQkJCQkJCQkJICAidHlwbW9kIiwgdHJ1ZSwgTlVMTCk7CisJaXNfYXJyYXkg PSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAor CQkJCQkJCQkJCSAgICJ0eXBhcnJheSIpOworCXN3aXRjaCAoaXNfYXJyYXkpCisJeworCQljYXNl IHR2X3RydWU6CisJCQlhcnJheV9kZWNvciA9ICJbXSI7CisJCQlicmVhazsKKworCQljYXNlIHR2 X2ZhbHNlOgorCQkJYXJyYXlfZGVjb3IgPSAiIjsKKwkJCWJyZWFrOworCisJCWNhc2UgdHZfYWJz ZW50OgorCQlkZWZhdWx0OgorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIm1pc3NpbmcgdHlwYXJy YXkgZWxlbWVudCIpKSk7CisJfQorCisJaWYgKHNjaGVtYSA9PSBOVUxMKQorCQlhcHBlbmRTdHJp bmdJbmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRlbnRpZmllcih0eXBlbmFtZSkpOworCWVsc2UgaWYg KHNjaGVtYVswXSA9PSAnXDAnKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgdHlwZW5h bWUpOyAvKiBTcGVjaWFsIHR5cG1vZCBuZWVkcyAqLworCWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5m byhidWYsICIlcy4lcyIsIHF1b3RlX2lkZW50aWZpZXIoc2NoZW1hKSwKKwkJCQkJCSBxdW90ZV9p ZGVudGlmaWVyKHR5cGVuYW1lKSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJXMiLCB0 eXBtb2RzdHIgPyB0eXBtb2RzdHIgOiAiIiwgYXJyYXlfZGVjb3IpOworfQorCisvKgorICogRXhw YW5kIGEganNvbiB2YWx1ZSBhcyBhbiBvcGVyYXRvciBuYW1lCisgKi8KK3N0YXRpYyB2b2lkCitl eHBhbmRfanNvbnZhbF9vcGVyYXRvcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZh bCkKK3sKKwljaGFyCSAgICpzdHI7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRh aW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJInNjaGVtYW5hbWUiLCB0 cnVlLCBOVUxMKTsKKwkvKiBTY2hlbWEgbWlnaHQgYmUgTlVMTCBvciBlbXB0eSAqLworCWlmIChz dHIgIT0gTlVMTCAmJiBzdHJbMF0gIT0gJ1wwJykKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVm LCAiJXMuIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9CisKKwlz dHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRh dGEsCisJCQkJCQkJCQkJIm9iam5hbWUiLCBmYWxzZSwgTlVMTCk7CisKKwlpZiAoc3RyKQorCXsK KwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHN0cik7CisJCXBmcmVlKHN0cik7CisJfQor fQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHN0cmluZy4gIFRoZSB2YWx1ZSBt dXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG9mCisgKiB0eXBlIG9iamVjdC4gIEluIHRoZSBsYXR0 ZXIgY2FzZSBpdCBtdXN0IGNvbnRhaW4gYSAiZm10IiBlbGVtZW50IHdoaWNoIHdpbGwKKyAqIGJl IHJlY3Vyc2l2ZWx5IGV4cGFuZGVkOyBhbHNvLCBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zIGFuIGVs ZW1lbnQgInByZXNlbnQiCisgKiBhbmQgaXQgaXMgc2V0IHRvIGZhbHNlLCB0aGUgZXhwYW5zaW9u IGlzIHRoZSBlbXB0eSBzdHJpbmcuCisgKgorICogUmV0dXJucyBmYWxzZSBpZiBubyBhY3R1YWwg ZXhwYW5zaW9uIHdhcyBtYWRlIGR1ZSB0byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJlaW5nIHNl dCB0byAiZmFsc2UiLgorICovCitzdGF0aWMgYm9vbAorZXhwYW5kX2pzb252YWxfc3RyaW5nKFN0 cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWlmIChqc29udmFsLT50eXBl ID09IGpidlN0cmluZykKKwl7CisJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oYnVmLCBqc29udmFs LT52YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkgICBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7CisJ fQorCWVsc2UgaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2QmluYXJ5KQorCXsKKwkJanNvbl90cml2 YWx1ZQlwcmVzZW50OworCisJCXByZXNlbnQgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIo anNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgICJwcmVzZW50Iik7CisJCS8q CisJCSAqIElmICJwcmVzZW50IiBpcyBzZXQgdG8gZmFsc2UsIHRoaXMgZWxlbWVudCBleHBhbmRz IHRvIGVtcHR5OworCQkgKiBvdGhlcndpc2UgKGVpdGhlciB0cnVlIG9yIGFic2VudCksIGZhbGwg dGhyb3VnaCB0byBleHBhbmQgImZtdCIuCisJCSAqLworCQlpZiAocHJlc2VudCA9PSB0dl9mYWxz ZSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlleHBhbmRfZm10X3JlY3Vyc2l2ZShqc29udmFsLT52 YWwuYmluYXJ5LmRhdGEsIGJ1Zik7CisJfQorCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0 dXJuIHRydWU7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgc3RyaW5nIGxp dGVyYWwuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9zdHJsaXQoU3RyaW5nSW5m byBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhciAgICpzdHI7CisJU3RyaW5nSW5m b0RhdGEgZHFkZWxpbTsKKwlzdGF0aWMgY29uc3QgY2hhciBkcXN1ZmZpeGVzW10gPSAiX1hZWlpZ WF8iOworCWludCAgICAgICAgIGRxbmV4dGNoYXIgPSAwOworCisJc3RyID0gcG5zdHJkdXAoanNv bnZhbC0+dmFsLnN0cmluZy52YWwsIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKworCS8qIEVh c3kgY2FzZTogaWYgdGhlcmUgYXJlIG5vICcgYW5kIG5vIFwsIGp1c3QgdXNlIGEgc2luZ2xlIHF1 b3RlICovCisJaWYgKHN0cmNocihzdHIsICdcJycpID09IE5VTEwgJiYKKwkJc3RyY2hyKHN0ciwg J1xcJykgPT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJyVzJyIsIHN0cik7 CisJCXBmcmVlKHN0cik7CisJCXJldHVybjsKKwl9CisKKwkvKiBPdGhlcndpc2UgbmVlZCB0byBm aW5kIGEgdXNlZnVsIGRvbGxhci1xdW90ZSBkZWxpbWl0ZXIgKi8KKwlpbml0U3RyaW5nSW5mbygm ZHFkZWxpbSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZHFkZWxpbSwgIiQiKTsKKwl3aGls ZSAoc3Ryc3RyKHN0ciwgZHFkZWxpbS5kYXRhKSAhPSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoJmRxZGVsaW0sIGRxc3VmZml4ZXNbZHFuZXh0Y2hhcisrXSk7CisJCWRxbmV4dGNo YXIgPSBkcW5leHRjaGFyICUgKHNpemVvZihkcXN1ZmZpeGVzKSAtIDEpOworCX0KKwkvKiBBZGQg dHJhaWxpbmcgJCAqLworCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkcWRlbGltLCAnJCcpOworCisJ LyogQW5kIGZpbmFsbHkgcHJvZHVjZSB0aGUgcXVvdGVkIGxpdGVyYWwgaW50byB0aGUgb3V0cHV0 IFN0cmluZ0luZm8gKi8KKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJXMlcyIsIGRxZGVsaW0u ZGF0YSwgc3RyLCBkcWRlbGltLmRhdGEpOworCXBmcmVlKGRxZGVsaW0uZGF0YSk7CisJcGZyZWUo c3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYW4gaW50ZWdlciBxdWFu dGl0eS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX251bWJlcihTdHJpbmdJbmZv IGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyICpzdHJkYXR1bTsKKworCXN0cmRh dHVtID0gRGF0dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19vdXQsCisJ CQkJCQkJCQkJCQkgICBOdW1lcmljR2V0RGF0dW0oanNvbnZhbC0+dmFsLm51bWVyaWMpKSk7CisJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHN0cmRhdHVtKTsKK30KKworLyoKKyAqIEV4cGFu ZCBhIGpzb24gdmFsdWUgYXMgYSByb2xlIG5hbWUuICBJZiB0aGUgaXNfcHVibGljIGVsZW1lbnQg aXMgc2V0IHRvCisgKiB0cnVlLCBQVUJMSUMgaXMgZXhwYW5kZWQgKG5vIHF1b3Rlcyk7IG90aGVy d2lzZSwgZXhwYW5kIHRoZSBnaXZlbiByb2xlIG5hbWUsCisgKiBxdW90aW5nIGFzIGFuIGlkZW50 aWZpZXIuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9yb2xlKFN0cmluZ0luZm8g YnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWpzb25fdHJpdmFsdWUJaXNfcHVibGljOwor CisJaXNfcHVibGljID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5i aW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJImlzX3B1YmxpYyIpOworCWlmIChpc19wdWJsaWMgPT0g dHZfdHJ1ZSkKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJQVUJMSUMiKTsKKwllbHNl CisJeworCQljaGFyICpyb2xlbmFtZTsKKworCQlyb2xlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pz b25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJCSAicm9s ZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJCWlmIChyb2xlbmFtZSkKKwkJeworCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZpZXIocm9sZW5hbWUpKTsKKwkJCXBmcmVl KHJvbGVuYW1lKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEV4cGFuZCBvbmUganNvbiBlbGVtZW50 IGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvIGFjY29yZGluZyB0byB0aGUKKyAqIGNvbnZlcnNp b24gc3BlY2lmaWVyLiAgVGhlIGVsZW1lbnQgdHlwZSBpcyB2YWxpZGF0ZWQsIGFuZCBhbiBlcnJv ciBpcyByYWlzZWQKKyAqIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggd2hhdCB3ZSBleHBlY3QgZm9yIHRo ZSBjb252ZXJzaW9uIHNwZWNpZmllci4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIGFjdHVh bCBleHBhbnNpb24gd2FzIG1hZGUgKGR1ZSB0byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJlaW5n IHNldCB0byAiZmFsc2UiIGluIGZvcm1hdHRlZCBzdHJpbmcgZXhwYW5zaW9uKS4KKyAqLworc3Rh dGljIGJvb2wKK2V4cGFuZF9vbmVfanNvbmJfZWxlbWVudChTdHJpbmdJbmZvIGJ1ZiwgY2hhciAq cGFyYW0sIEpzb25iVmFsdWUgKmpzb252YWwsCisJCQkJCQkgY29udlNwZWNpZmllciBzcGVjaWZp ZXIsIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlib29sIHJlc3VsdCA9IHRydWU7CisJRXJyb3JDb250 ZXh0Q2FsbGJhY2sgc3FsZXJyY29udGV4dDsKKworCS8qIElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3Jt YXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxsYmFjayAqLworCWlmIChm bXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vycm9yX2NhbGxiYWNr OworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJc3FsZXJyY29udGV4dC5w cmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSAm c3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAoIWpzb252YWwpCisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1z ZygiZWxlbWVudCBcIiVzXCIgbm90IGZvdW5kIiwgcGFyYW0pKSk7CisKKwlzd2l0Y2ggKHNwZWNp ZmllcikKKwl7CisJCWNhc2UgU3BlY0lkZW50aWZpZXI6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAh PSBqYnZTdHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBz dHJpbmcgZm9yICUlSSBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpz b252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9pZGVudGlmaWVyKGJ1ZiwganNvbnZh bCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNEb3R0ZWROYW1lOgorCQkJaWYgKGpzb252YWwt PnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVk IEpTT04gb2JqZWN0IGZvciAlJUQgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBh cmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfZG90dGVkbmFtZShidWYs IGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nOgorCQkJaWYgKGpzb252 YWwtPnR5cGUgIT0gamJ2U3RyaW5nICYmCisJCQkJanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkp CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcgb3Igb2Jq ZWN0IGZvciAlJXMgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29u dmFsLT50eXBlKSkpOworCQkJcmVzdWx0ID0gZXhwYW5kX2pzb252YWxfc3RyaW5nKGJ1ZiwganNv bnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNTdHJpbmdMaXRlcmFsOgorCQkJaWYgKGpz b252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4 cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUwgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJ CQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfc3RybGl0KGJ1 ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNUeXBlbmFtZToKKwkJCWlmIChq c29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJl eHBlY3RlZCBKU09OIG9iamVjdCBmb3IgJSVUIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJ CQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3R5cGVuYW1l KGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNPcGVyYXRvcm5hbWU6CisJ CQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVy cm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUlTyBlbGVtZW50IFwiJXNcIiwgZ290ICVk IiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9v cGVyYXRvcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjTnVtYmVyOgor CQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkg ZXJybXNnKCJleHBlY3RlZCBKU09OIG51bWVyaWMgZm9yICUlbiBlbGVtZW50IFwiJXNcIiwgZ290 ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZh bF9udW1iZXIoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1JvbGU6CisJ CQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVy cm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUlUiBlbGVtZW50IFwiJXNcIiwgZ290ICVk IiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9y b2xlKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKwl9CisKKwlpZiAoZm10KQorCQllcnJvcl9j b250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsKKworCXJldHVybiByZXN1bHQ7 Cit9CisKKy8qCisgKiBJdGVyYXRlIG9uIHRoZSBlbGVtZW50cyBvZiBhIEpTT04gYXJyYXksIGV4 cGFuZGluZyBlYWNoIG9uZSBpbnRvIHRoZSBvdXRwdXQKKyAqIFN0cmluZ0luZm8gcGVyIHRoZSBn aXZlbiBjb252ZXJzaW9uIHNwZWNpZmllciwgc2VwYXJhdGVkIGJ5IHRoZSBnaXZlbgorICogc2Vw YXJhdG9yLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb25iX2FycmF5KFN0cmluZ0luZm8g YnVmLCBjaGFyICpwYXJhbSwKKwkJCQkgICBKc29uYlZhbHVlICpqc29uYXJyLCBjaGFyICphcnJh eXNlcCwgY29udlNwZWNpZmllciBzcGVjaWZpZXIsCisJCQkJICAgY29uc3QgY2hhciAqZm10KQor eworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisJSnNvbmJDb250YWluZXIg KmNvbnRhaW5lcjsKKwlKc29uYkl0ZXJhdG9yICAqaXQ7CisJSnNvbmJWYWx1ZQl2OworCWludAkJ CXR5cGU7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCVN0cmluZ0luZm9EYXRhIGFycmF5ZWxlbTsK KworCS8qIElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0 KCkgY29udGV4dCBjYWxsYmFjayAqLworCWlmIChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNh bGxiYWNrID0gZm10c3RyX2Vycm9yX2NhbGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2 b2lkICopIGZtdDsKKwkJc3FsZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3Rh Y2s7CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAo anNvbmFyci0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVu dCBcIiVzXCIgaXMgbm90IGEgSlNPTiBhcnJheSIsIHBhcmFtKSkpOworCisJY29udGFpbmVyID0g anNvbmFyci0+dmFsLmJpbmFyeS5kYXRhOworCWlmICghSnNvbkNvbnRhaW5lcklzQXJyYXkoY29u dGFpbmVyKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3QgYSBK U09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwlpbml0U3RyaW5nSW5mbygmYXJyYXllbGVtKTsKKwor CWl0ID0gSnNvbmJJdGVyYXRvckluaXQoY29udGFpbmVyKTsKKwl3aGlsZSAoKHR5cGUgPSBKc29u Ykl0ZXJhdG9yTmV4dCgmaXQsICZ2LCB0cnVlKSkgIT0gV0pCX0RPTkUpCisJeworCQlpZiAodHlw ZSA9PSBXSkJfRUxFTSkKKwkJeworCQkJcmVzZXRTdHJpbmdJbmZvKCZhcnJheWVsZW0pOworCisJ CQlpZiAoZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KCZhcnJheWVsZW0sIHBhcmFtLCAmdiwgc3Bl Y2lmaWVyLCBOVUxMKSkKKwkJCXsKKwkJCQlpZiAoIWZpcnN0KQorCQkJCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKGJ1ZiwgYXJyYXlzZXApOworCisJCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhi dWYsIGFycmF5ZWxlbS5kYXRhLCBhcnJheWVsZW0ubGVuKTsKKwkJCQlmaXJzdCA9IGZhbHNlOwor CQkJfQorCQl9CisJfQorCisJaWYgKGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVy cmNvbnRleHQucHJldmlvdXM7Cit9CisKKy8qCisgKiBXb3JraG9yc2UgZm9yIGRkbF9kZXBhcnNl X2V4cGFuZF9jb21tYW5kLgorICovCitjaGFyICoKK2RkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5n KGNoYXIgKmpzb25fc3RyKQoreworCURhdHVtCQlkOworCUpzb25iCSAgICpqc29uYjsKKwlTdHJp bmdJbmZvIGJ1ZiA9IChTdHJpbmdJbmZvKSBwYWxsb2MwKHNpemVvZihTdHJpbmdJbmZvRGF0YSkp OworCisJaW5pdFN0cmluZ0luZm8oYnVmKTsKKworCWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKGpz b25iX2luLCBQb2ludGVyR2V0RGF0dW0oanNvbl9zdHIpKTsKKwlqc29uYiA9IChKc29uYiAqKSBE YXR1bUdldFBvaW50ZXIoZCk7CisKKwlleHBhbmRfZm10X3JlY3Vyc2l2ZSgmanNvbmItPnJvb3Qs IGJ1Zik7CisKKwlyZXR1cm4gYnVmLT5kYXRhOworfQorCisvKi0tLS0tLQorICogUmV0dXJucyBh IGZvcm1hdHRlZCBzdHJpbmcgZnJvbSBhIEpTT04gb2JqZWN0LgorICoKKyAqIFRoZSBzdGFydGlu ZyBwb2ludCBpcyB0aGUgZWxlbWVudCBuYW1lZCAiZm10IiAod2hpY2ggbXVzdCBiZSBhIHN0cmlu ZykuCisgKiBUaGlzIGZvcm1hdCBzdHJpbmcgbWF5IGNvbnRhaW4gemVybyBvciBtb3JlICUtZXNj YXBlcywgd2hpY2ggY29uc2lzdCBvZiBhbgorICogZWxlbWVudCBuYW1lIGVuY2xvc2VkIGluIHsg fSwgcG9zc2libHkgZm9sbG93ZWQgYnkgYSBjb252ZXJzaW9uIG1vZGlmaWVyLAorICogZm9sbG93 ZWQgYnkgYSBjb252ZXJzaW9uIHNwZWNpZmllci4gIFBvc3NpYmxlIGNvbnZlcnNpb24gc3BlY2lm aWVycyBhcmU6CisgKgorICogJQkJZXhwYW5kIHRvIGEgbGl0ZXJhbCAlLgorICogSQkJZXhwYW5k IGFzIGEgc2luZ2xlLCBub24tcXVhbGlmaWVkIGlkZW50aWZpZXIKKyAqIEQJCWV4cGFuZCBhcyBh IHBvc3NpYmx5LXF1YWxpZmllZCBpZGVudGlmaWVyCisgKiBUCQlleHBhbmQgYXMgYSB0eXBlIG5h bWUKKyAqIE8JCWV4cGFuZCBhcyBhbiBvcGVyYXRvciBuYW1lCisgKiBMCQlleHBhbmQgYXMgYSBz dHJpbmcgbGl0ZXJhbCAocXVvdGUgdXNpbmcgc2luZ2xlIHF1b3RlcykKKyAqIHMJCWV4cGFuZCBh cyBhIHNpbXBsZSBzdHJpbmcgKG5vIHF1b3RpbmcpCisgKiBuCQlleHBhbmQgYXMgYSBzaW1wbGUg bnVtYmVyIChubyBxdW90aW5nKQorICogUgkJZXhwYW5kIGFzIGEgcm9sZSBuYW1lIChwb3NzaWJs eSBxdW90ZWQgbmFtZSwgb3IgUFVCTElDKQorICoKKyAqIFRoZSBlbGVtZW50IG5hbWUgbWF5IGhh dmUgYW4gb3B0aW9uYWwgc2VwYXJhdG9yIHNwZWNpZmljYXRpb24gcHJlY2VkZWQKKyAqIGJ5IGEg Y29sb24uICBJdHMgcHJlc2VuY2UgaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgaXMgZXhwZWN0 ZWQgdG8gYmUKKyAqIGFuIGFycmF5OyB0aGUgc3BlY2lmaWVkIHNlcGFyYXRvciBpcyB1c2VkIHRv IGpvaW4gdGhlIGFycmF5IGVsZW1lbnRzLgorICotLS0tLS0KKyAqLworRGF0dW0KK2RkbF9kZXBh cnNlX2V4cGFuZF9jb21tYW5kKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJdGV4dAkgICAqanNvbiA9 IFBHX0dFVEFSR19URVhUX1AoMCk7CisJY2hhcgkgICAqanNvbl9zdHI7CisKKwlqc29uX3N0ciA9 IHRleHRfdG9fY3N0cmluZyhqc29uKTsKKworCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190 ZXh0KGRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGpzb25fc3RyKSkpOworfQorCisvKgorICog RXJyb3IgY29udGV4dCBjYWxsYmFjayBmb3IgSlNPTiBmb3JtYXQgc3RyaW5nIGV4cGFuc2lvbi4K KyAqCisgKiBYWFg6IGluZGljYXRlIHdoaWNoIGVsZW1lbnQgd2UncmUgZXhwYW5kaW5nLCBpZiBh cHBsaWNhYmxlLgorICovCitzdGF0aWMgdm9pZAorZm10c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQg KmFyZykKK3sKKwllcnJjb250ZXh0KCJ3aGlsZSBleHBhbmRpbmcgZm9ybWF0IHN0cmluZyBcIiVz XCIiLCAoY2hhciAqKSBhcmcpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv c2VxdWVuY2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKaW5kZXggOTljOWY5 MWNiYS4uNDIwNWRkYTIyMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVu Y2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCkBAIC0xNzA4LDYgKzE3 MDgsMzkgQEAgcHJvY2Vzc19vd25lZF9ieShSZWxhdGlvbiBzZXFyZWwsIExpc3QgKm93bmVkX2J5 LCBib29sIGZvcl9pZGVudGl0eSkKIAkJcmVsYXRpb25fY2xvc2UodGFibGVyZWwsIE5vTG9jayk7 CiB9CiAKKy8qCisgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycywgZGV0YWlsZWQKKyAqLwor Rm9ybV9wZ19zZXF1ZW5jZV9kYXRhCitnZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5jZUlk KQoreworCUJ1ZmZlciAgICAgIGJ1ZjsKKwlTZXFUYWJsZSAgICBlbG07CisJUmVsYXRpb24gICAg c2VxcmVsOworCUhlYXBUdXBsZURhdGEgc2VxdHVwbGU7CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRh IHNlcTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgcmV0U2VxOworCisJLyogT3BlbiBhbmQgQWNj ZXNzU2hhcmVMb2NrIHNlcXVlbmNlICovCisJaW5pdF9zZXF1ZW5jZShzZXF1ZW5jZUlkLCAmZWxt LCAmc2VxcmVsKTsKKworCWlmIChwZ19jbGFzc19hY2xjaGVjayhzZXF1ZW5jZUlkLCBHZXRVc2Vy SWQoKSwKKwkJCUFDTF9TRUxFQ1QgfCBBQ0xfVVBEQVRFIHwgQUNMX1VTQUdFKSAhPSBBQ0xDSEVD S19PSykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lF TlRfUFJJVklMRUdFKSwKKwkJCQkJIGVycm1zZygicGVybWlzc2lvbiBkZW5pZWQgZm9yIHNlcXVl bmNlICVzIiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzZXFyZWwpKSkpOworCisJ c2VxID0gcmVhZF9zZXFfdHVwbGUoc2VxcmVsLCAmYnVmLCAmc2VxdHVwbGUpOworCXJldFNlcSA9 IHBhbGxvYyhzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJbWVtY3B5KHJl dFNlcSwgc2VxLCBzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJVW5sb2Nr UmVsZWFzZUJ1ZmZlcihidWYpOworCXJlbGF0aW9uX2Nsb3NlKHNlcXJlbCwgTm9Mb2NrKTsKKwor CXJldHVybiByZXRTZXE7Cit9CiAKIC8qCiAgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycyBp biBhIGxpc3Qgb2YgdGhlIGZvcm0gY3JlYXRlZCBieSB0aGUgcGFyc2VyLgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvZm9ybWF0X3R5cGUuYwppbmRleCAyOTE4ZmRiZmI2Li5mNjRhNzIxM2I3IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvZm9ybWF0X3R5cGUuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgInV0aWxz L251bWVyaWMuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCi1zdGF0aWMgY2hhciAq cHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9k b3V0KTsKIAogCiAvKgpAQCAtMzYzLDcgKzM2Miw3IEBAIGZvcm1hdF90eXBlX3dpdGhfdHlwZW1v ZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpCiAvKgogICogQWRkIHR5cG1vZCBkZWNvcmF0 aW9uIHRvIHRoZSBiYXNpYyB0eXBlIG5hbWUKICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBw cmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBtb2Rv dXQpCiB7CiAJY2hhcgkgICAqcmVzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3JlZ3Byb2MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKaW5kZXggNmQ0YzFj MjdhNS4uNmIyMzZlNWYxOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3By b2MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCkBAIC00NCw2ICs0NCw4 IEBACiBzdGF0aWMgdm9pZCBwYXJzZU5hbWVBbmRBcmdUeXBlcyhjb25zdCBjaGFyICpzdHJpbmcs IGJvb2wgYWxsb3dOb25lLAogCQkJCQkJCQkgTGlzdCAqKm5hbWVzLCBpbnQgKm5hcmdzLCBPaWQg KmFyZ3R5cGVzKTsKIAorc3RhdGljIHZvaWQgZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFs KEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwKKwkJCQkJCQkJCQkgICBTdHJpbmdJbmZvIGJ1ZiwgYm9v bCBmb3JjZV9xdWFsaWZ5KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkgVVNFUiBJL08g Uk9VVElORVMJCQkJCQkJCQkJCQkJCSAqCkBAIC0zMzEsNiArMzMzLDI5IEBAIGZvcm1hdF9wcm9j ZWR1cmVfcXVhbGlmaWVkKE9pZCBwcm9jZWR1cmVfb2lkKQogCXJldHVybiBmb3JtYXRfcHJvY2Vk dXJlX2V4dGVuZGVkKHByb2NlZHVyZV9vaWQsIEZPUk1BVF9QUk9DX0ZPUkNFX1FVQUxJRlkpOwog fQogCisvKgorICogZm9ybWF0X3Byb2NlZHVyZV9hcmdzICAgLSBjb252ZXJ0cyBwcm9jIE9JRCB0 byAiKGFyZ3MpIgorICovCitjaGFyICoKK2Zvcm1hdF9wcm9jZWR1cmVfYXJncyhPaWQgcHJvY2Vk dXJlX29pZCwgYm9vbCBmb3JjZV9xdWFsaWZ5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlI ZWFwVHVwbGUgICBwcm9jdHVwOworCUZvcm1fcGdfcHJvYyBwcm9jZm9ybTsKKworCXByb2N0dXAg PSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jZWR1cmVfb2lk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2N0dXApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvY2VkdXJlX29pZCk7CisJcHJv Y2Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisKKwlpbml0U3RyaW5n SW5mbygmYnVmKTsKKwlmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwocHJvY2Zvcm0sICZi dWYsIGZvcmNlX3F1YWxpZnkpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2N0dXApOworCisJcmV0 dXJuIGJ1Zi5kYXRhOworfQorCiAvKgogICogZm9ybWF0X3Byb2NlZHVyZV9leHRlbmRlZCAtIGNv bnZlcnRzIHByb2NlZHVyZSBPSUQgdG8gInByb19uYW1lKGFyZ3MpIgogICoKQEAgLTIwNjAsMyAr MjA4NSwzMCBAQCBwYXJzZU5hbWVBbmRBcmdUeXBlcyhjb25zdCBjaGFyICpzdHJpbmcsIGJvb2wg YWxsb3dOb25lLCBMaXN0ICoqbmFtZXMsCiAKIAlwZnJlZShyYXduYW1lKTsKIH0KKworLyoKKyAq IEFwcGVuZCB0aGUgcGFyZW50aGlzZWQgYXJndW1lbnRzIG9mIHRoZSBnaXZlbiBwZ19wcm9jIHJv dyBpbnRvIHRoZSBvdXRwdXQKKyAqIGJ1ZmZlci4gIGZvcmNlX3F1YWxpZnkgaW5kaWNhdGVzIHdo ZXRoZXIgdG8gc2NoZW1hLXF1YWxpZnkgdHlwZSBuYW1lcworICogcmVnYXJkbGVzcyBvZiB2aXNp YmlsaXR5LgorICovCitzdGF0aWMgdm9pZAorZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFs KEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwgU3RyaW5nSW5mbyBidWYsCisJCQkJCQkJICAgYm9vbCBm b3JjZV9xdWFsaWZ5KQoreworCWludAkJCWk7CisJaW50CQkJbmFyZ3MgPSBwcm9jZm9ybS0+cHJv bmFyZ3M7CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcoJyk7CisJZm9yIChpID0gMDsg aSA8IG5hcmdzOyBpKyspCisJeworCQlPaWQJCQl0aGlzYXJndHlwZSA9IHByb2Nmb3JtLT5wcm9h cmd0eXBlcy52YWx1ZXNbaV07CisKKwkJaWYgKGkgPiAwKQorCQkJYXBwZW5kU3RyaW5nSW5mb0No YXIoYnVmLCAnLCcpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwKKwkJCQkJCQkgICBm b3JjZV9xdWFsaWZ5ID8KKwkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQodGhpc2Fy Z3R5cGUpIDoKKwkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZSh0aGlzYXJndHlwZSkpOworCX0KKwlh cHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxz LmMKaW5kZXggODU1ZDQ4MzcyYS4uMzBiOGQ5MDc2NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRp bHMuYwpAQCAtMzU4LDcgKzM1OCw2IEBAIHN0YXRpYyBpbnQJcHJpbnRfZnVuY3Rpb25fYXJndW1l bnRzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCwKIAkJCQkJCQkJCSBib29sIHBy aW50X3RhYmxlX2FyZ3MsIGJvb2wgcHJpbnRfZGVmYXVsdHMpOwogc3RhdGljIHZvaWQgcHJpbnRf ZnVuY3Rpb25fcmV0dHlwZShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApOwogc3Rh dGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fdHJmdHlwZXMoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBs ZSBwcm9jdHVwKTsKLXN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5m byBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lkIHNldF9ydGFibGVfbmFtZXMo ZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIExpc3QgKnBhcmVudF9uYW1lc3BhY2VzLAogCQkJCQkJ CSBCaXRtYXBzZXQgKnJlbHNfdXNlZCk7CiBzdGF0aWMgdm9pZCBzZXRfZGVwYXJzZV9mb3JfcXVl cnkoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIFF1ZXJ5ICpxdWVyeSwKQEAgLTQ4MiwyMiArNDgx LDE1IEBAIHN0YXRpYyB2b2lkIGdldF9mcm9tX2NsYXVzZV9jb2xkZWZsaXN0KFJhbmdlVGJsRnVu Y3Rpb24gKnJ0ZnVuYywKIAkJCQkJCQkJCSAgIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBz dGF0aWMgdm9pZCBnZXRfdGFibGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNh bXBsZSwKIAkJCQkJCQkJZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKLXN0YXRpYyB2b2lkIGdl dF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCi0JCQkJCQkJ IFN0cmluZ0luZm8gYnVmKTsKIHN0YXRpYyBOb2RlICpwcm9jZXNzSW5kaXJlY3Rpb24oTm9kZSAq bm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIHByaW50U3Vic2Ny aXB0cyhTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsK IHN0YXRpYyBjaGFyICpnZXRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpOwogc3RhdGljIGNoYXIg KmdlbmVyYXRlX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkLCBMaXN0ICpuYW1lc3BhY2VzKTsKIHN0 YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpOwot c3RhdGljIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwgaW50IG5hcmdz LAotCQkJCQkJCQkJTGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJndHlwZXMsCi0JCQkJCQkJCQlib29s IGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCi0JCQkJCQkJCQlQYXJzZUV4cHJL aW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX29wZXJhdG9yX25h bWUoT2lkIG9wZXJpZCwgT2lkIGFyZzEsIE9pZCBhcmcyKTsKIHN0YXRpYyB2b2lkIGFkZF9jYXN0 X3RvKFN0cmluZ0luZm8gYnVmLCBPaWQgdHlwaWQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX3F1 YWxpZmllZF90eXBlX25hbWUoT2lkIHR5cGlkKTsKIHN0YXRpYyB0ZXh0ICpzdHJpbmdfdG9fdGV4 dChjaGFyICpzdHIpOwotc3RhdGljIGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQp Owogc3RhdGljIHZvaWQgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9w dGlvbnMpOwogCiAjZGVmaW5lIG9ubHlfbWFya2VyKHJ0ZSkgICgocnRlKS0+aW5oID8gIiIgOiAi T05MWSAiKQpAQCAtNTQ1LDYgKzUzNyw3NyBAQCBwZ19nZXRfcnVsZWRlZl9leHQoUEdfRlVOQ1RJ T05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHJlcykpOwogfQogCisv KgorICogR2l2ZW4gYSBwYWlyIG9mIERhdHVtIGNvcnJlc3BvbmRpbmcgdG8gYSBydWxlJ3MgcGdf cmV3cml0ZS5ldl9xdWFsIGFuZAorICogZXZfYWN0aW9uIGNvbHVtbnMsIHJldHVybiB0aGVpciB0 ZXh0IHJlcHJlc2VudGF0aW9uOyBldl9xdWFsIGFzIGEgc2luZ2xlCisgKiBzdHJpbmcgaW4gd2hl cmVDbGF1c2UgYW5kIGV2X2FjdGlvbiBhcyBhIExpc3Qgb2Ygc3RyaW5ncyAod2hpY2ggbWlnaHQg YmUKKyAqIE5JTCwgc2lnbmFsbGluZyBOT1RISU5HKSBpbiBhY3Rpb25zLgorICovCit2b2lkCitw Z19nZXRfcnVsZWRlZl9kZXRhaWxlZChEYXR1bSBldl9xdWFsLCBEYXR1bSBldl9hY3Rpb24sCisJ CQkJCQljaGFyICoqd2hlcmVDbGF1c2UsIExpc3QgKiphY3Rpb25zKQoreworCWludCBwcmV0dHlG bGFncyA9IDA7CisJY2hhciAqcXVhbHN0ciA9IFRleHREYXR1bUdldENTdHJpbmcoZXZfcXVhbCk7 CisJY2hhciAqYWN0aW9uc3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhldl9hY3Rpb24pOworCUxp c3QgKmFjdGlvbk5vZGVMaXN0ID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGFjdGlvbnN0cik7CisJ U3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJaWYgKHN0cmxl bihxdWFsc3RyKSA+IDAgJiYgc3RyY21wKHF1YWxzdHIsICI8PiIpICE9IDApCisJeworCQlOb2Rl CSAgICpxdWFsOworCQlRdWVyeQkgICAqcXVlcnk7CisJCWRlcGFyc2VfY29udGV4dCBjb250ZXh0 OworCQlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOworCisJCXF1YWwgPSBzdHJpbmdUb05vZGUocXVh bHN0cik7CisKKwkJcXVlcnkgPSAoUXVlcnkgKikgbGluaXRpYWwoYWN0aW9uTm9kZUxpc3QpOwor CQlxdWVyeSA9IGdldEluc2VydFNlbGVjdFF1ZXJ5KHF1ZXJ5LCBOVUxMKTsKKworCQlBY3F1aXJl UmV3cml0ZUxvY2tzKHF1ZXJ5LCBmYWxzZSwgZmFsc2UpOworCisJCWNvbnRleHQuYnVmID0gJmJ1 ZjsKKwkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7CisJCWNvbnRleHQu d2luZG93Q2xhdXNlID0gTklMOworCQljb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOworCQljb250 ZXh0LnZhcnByZWZpeCA9IChsaXN0X2xlbmd0aChxdWVyeS0+cnRhYmxlKSAhPSAxKTsKKwkJY29u dGV4dC5wcmV0dHlGbGFncyA9IHByZXR0eUZsYWdzOworCQljb250ZXh0LndyYXBDb2x1bW4gPSBX UkFQX0NPTFVNTl9ERUZBVUxUOworCQljb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5U X1NURDsKKworCQlzZXRfZGVwYXJzZV9mb3JfcXVlcnkoJmRwbnMsIHF1ZXJ5LCBOSUwpOworCisJ CWdldF9ydWxlX2V4cHIocXVhbCwgJmNvbnRleHQsIGZhbHNlKTsKKworCQkqd2hlcmVDbGF1c2Ug PSBwc3RyZHVwKGJ1Zi5kYXRhKTsKKwl9CisJZWxzZQorCQkqd2hlcmVDbGF1c2UgPSBOVUxMOwor CisJaWYgKGxpc3RfbGVuZ3RoKGFjdGlvbk5vZGVMaXN0KSA9PSAwKQorCQkqYWN0aW9ucyA9IE5J TDsKKwllbHNlCisJeworCQlMaXN0Q2VsbCAqY2VsbDsKKwkJTGlzdAkqb3V0cHV0ID0gTklMOwor CisJCWZvcmVhY2goY2VsbCwgYWN0aW9uTm9kZUxpc3QpCisJCXsKKwkJCVF1ZXJ5CSpxdWVyeSA9 IChRdWVyeSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWlmIChxdWVyeS0+Y29tbWFuZFR5cGUgPT0g Q01EX05PVEhJTkcpCisJCQkJY29udGludWU7CisKKwkJCXJlc2V0U3RyaW5nSW5mbygmYnVmKTsK KwkJCWdldF9xdWVyeV9kZWYocXVlcnksICZidWYsIE5JTCwgTlVMTCwgdHJ1ZSwKKwkJCQkJCSAg cHJldHR5RmxhZ3MsIFdSQVBfQ09MVU1OX0RFRkFVTFQsIDApOworCQkJb3V0cHV0ID0gbGFwcGVu ZChvdXRwdXQsIHBzdHJkdXAoYnVmLmRhdGEpKTsKKwkJfQorCQkqYWN0aW9ucyA9IG91dHB1dDsK Kwl9Cit9CiAKIHN0YXRpYyBjaGFyICoKIHBnX2dldF9ydWxlZGVmX3dvcmtlcihPaWQgcnVsZW9p ZCwgaW50IHByZXR0eUZsYWdzKQpAQCAtMTAxNSw2NSArMTA3OCwxMiBAQCBwZ19nZXRfdHJpZ2dl cmRlZl93b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJaWYgKCFpc251bGwpCiAJewog CQlOb2RlCSAgICpxdWFsOwotCQljaGFyCQlyZWxraW5kOwotCQlkZXBhcnNlX2NvbnRleHQgY29u dGV4dDsKLQkJZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKLQkJUmFuZ2VUYmxFbnRyeSAqb2xkcnRl OwotCQlSYW5nZVRibEVudHJ5ICpuZXdydGU7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm YnVmLCAiV0hFTiAoIik7CisJCWNoYXIgICAgICAgKnF1YWxzdHI7CiAKIAkJcXVhbCA9IHN0cmlu Z1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJCXF1YWxzdHIgPSBwZ19nZXRf dHJpZ2dlcl93aGVuY2xhdXNlKHRyaWdyZWMsIHF1YWwsIHByZXR0eSk7CiAKLQkJcmVsa2luZCA9 IGdldF9yZWxfcmVsa2luZCh0cmlncmVjLT50Z3JlbGlkKTsKLQotCQkvKiBCdWlsZCBtaW5pbWFs IE9MRCBhbmQgTkVXIFJURXMgZm9yIHRoZSByZWwgKi8KLQkJb2xkcnRlID0gbWFrZU5vZGUoUmFu Z2VUYmxFbnRyeSk7Ci0JCW9sZHJ0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKLQkJb2xkcnRl LT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7Ci0JCW9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7 Ci0JCW9sZHJ0ZS0+cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW9sZHJ0ZS0+YWxp YXMgPSBtYWtlQWxpYXMoIm9sZCIsIE5JTCk7Ci0JCW9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxp YXM7Ci0JCW9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQlvbGRydGUtPmluaCA9IGZhbHNlOwot CQlvbGRydGUtPmluRnJvbUNsID0gdHJ1ZTsKLQotCQluZXdydGUgPSBtYWtlTm9kZShSYW5nZVRi bEVudHJ5KTsKLQkJbmV3cnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOwotCQluZXdydGUtPnJl bGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKLQkJbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsKLQkJ bmV3cnRlLT5yZWxsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKLQkJbmV3cnRlLT5hbGlhcyA9 IG1ha2VBbGlhcygibmV3IiwgTklMKTsKLQkJbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsK LQkJbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5oID0gZmFsc2U7Ci0JCW5l d3J0ZS0+aW5Gcm9tQ2wgPSB0cnVlOwotCi0JCS8qIEJ1aWxkIHR3by1lbGVtZW50IHJ0YWJsZSAq LwotCQltZW1zZXQoJmRwbnMsIDAsIHNpemVvZihkcG5zKSk7Ci0JCWRwbnMucnRhYmxlID0gbGlz dF9tYWtlMihvbGRydGUsIG5ld3J0ZSk7Ci0JCWRwbnMuc3VicGxhbnMgPSBOSUw7Ci0JCWRwbnMu Y3RlcyA9IE5JTDsKLQkJZHBucy5hcHBlbmRyZWxzID0gTlVMTDsKLQkJc2V0X3J0YWJsZV9uYW1l cygmZHBucywgTklMLCBOVUxMKTsKLQkJc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRwbnMpOwot Ci0JCS8qIFNldCB1cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICovCi0J CWNvbnRleHQuYnVmID0gJmJ1ZjsKLQkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgm ZHBucyk7Ci0JCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOwotCQljb250ZXh0LndpbmRvd1RM aXN0ID0gTklMOwotCQljb250ZXh0LnZhcnByZWZpeCA9IHRydWU7Ci0JCWNvbnRleHQucHJldHR5 RmxhZ3MgPSBHRVRfUFJFVFRZX0ZMQUdTKHByZXR0eSk7Ci0JCWNvbnRleHQud3JhcENvbHVtbiA9 IFdSQVBfQ09MVU1OX0RFRkFVTFQ7Ci0JCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRF TlRfU1REOwotCQljb250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9ORTsKLQkJ Y29udGV4dC5hcHBlbmRwYXJlbnRzID0gTlVMTDsKLQotCQlnZXRfcnVsZV9leHByKHF1YWwsICZj b250ZXh0LCBmYWxzZSk7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiKSAiKTsK KwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiV0hFTiAoJXMpICIsIHF1YWxzdHIpOwogCX0KIAog CWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIkVYRUNVVEUgRlVOQ1RJT04gJXMoIiwKQEAgLTExMTQs NiArMTEyNCw2NCBAQCBwZ19nZXRfdHJpZ2dlcmRlZl93b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBw cmV0dHkpCiAJcmV0dXJuIGJ1Zi5kYXRhOwogfQogCitjaGFyICoKK3BnX2dldF90cmlnZ2VyX3do ZW5jbGF1c2UoRm9ybV9wZ190cmlnZ2VyIHRyaWdyZWMsIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wg cHJldHR5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwljaGFyICAgICAgICByZWxraW5kOwor CWRlcGFyc2VfY29udGV4dCBjb250ZXh0OworCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7CisJUmFu Z2VUYmxFbnRyeSAqb2xkcnRlOworCVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsKKworICAgaW5pdFN0 cmluZ0luZm8oJmJ1Zik7CisKKyAgIHJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQodHJpZ3JlYy0+ dGdyZWxpZCk7CisKKyAgIC8qIEJ1aWxkIG1pbmltYWwgT0xEIGFuZCBORVcgUlRFcyBmb3IgdGhl IHJlbCAqLworICAgb2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7CisgICBvbGRydGUt PnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047CisgICBvbGRydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdy ZWxpZDsKKyAgIG9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7CisgICBvbGRydGUtPmFsaWFzID0g bWFrZUFsaWFzKCJvbGQiLCBOSUwpOworICAgb2xkcnRlLT5lcmVmID0gb2xkcnRlLT5hbGlhczsK KyAgIG9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOworICAgb2xkcnRlLT5pbmggPSBmYWxzZTsKKyAg IG9sZHJ0ZS0+aW5Gcm9tQ2wgPSB0cnVlOworCisgICBuZXdydGUgPSBtYWtlTm9kZShSYW5nZVRi bEVudHJ5KTsKKyAgIG5ld3J0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKKyAgIG5ld3J0ZS0+ cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOworICAgbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsK KyAgIG5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm5ldyIsIE5JTCk7CisgICBuZXdydGUtPmVy ZWYgPSBuZXdydGUtPmFsaWFzOworICAgbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7CisgICBuZXdy dGUtPmluaCA9IGZhbHNlOworICAgbmV3cnRlLT5pbkZyb21DbCA9IHRydWU7CisKKyAgIC8qIEJ1 aWxkIHR3by1lbGVtZW50IHJ0YWJsZSAqLworICAgbWVtc2V0KCZkcG5zLCAwLCBzaXplb2YoZHBu cykpOworICAgZHBucy5ydGFibGUgPSBsaXN0X21ha2UyKG9sZHJ0ZSwgbmV3cnRlKTsKKyAgIGRw bnMuY3RlcyA9IE5JTDsKKyAgIHNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwgTlVMTCk7Cisg ICBzZXRfc2ltcGxlX2NvbHVtbl9uYW1lcygmZHBucyk7CisKKyAgIC8qIFNldCB1cCBjb250ZXh0 IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICovCisgICBjb250ZXh0LmJ1ZiA9ICZidWY7 CisgICBjb250ZXh0Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5zKTsKKyAgIGNvbnRleHQu d2luZG93Q2xhdXNlID0gTklMOworICAgY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKKyAgIGNv bnRleHQudmFycHJlZml4ID0gdHJ1ZTsKKyAgIGNvbnRleHQucHJldHR5RmxhZ3MgPSBwcmV0dHkg PyBQUkVUVFlGTEFHX1BBUkVOIHwgUFJFVFRZRkxBR19JTkRFTlQgOiBQUkVUVFlGTEFHX0lOREVO VDsKKyAgIGNvbnRleHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7CisgICBjb250 ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKKyAgIGNvbnRleHQuc3BlY2lhbF9l eHBya2luZCA9IEVYUFJfS0lORF9OT05FOworCisgICBnZXRfcnVsZV9leHByKHdoZW5DbGF1c2Us ICZjb250ZXh0LCBmYWxzZSk7CisKKyAgIHJldHVybiBidWYuZGF0YTsKK30KKwogLyogLS0tLS0t LS0tLQogICogcGdfZ2V0X2luZGV4ZGVmCQkJLSBHZXQgdGhlIGRlZmluaXRpb24gb2YgYW4gaW5k ZXgKICAqCkBAIC0xODgwLDYgKzE5NDgsMTMgQEAgcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhP aWQgcmVsaWQsIGJvb2wgcHJldHR5KQogCXJldHVybiBwZ19nZXRfcGFydGtleWRlZl93b3JrZXIo cmVsaWQsIHByZXR0eUZsYWdzLCB0cnVlLCBmYWxzZSk7CiB9CiAKKy8qIEludGVybmFsIHZlcnNp b24gdGhhdCByZXBvcnRzIHRoZSBmdWxsIHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlvbiAqLworY2hh ciAqCitwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUoT2lkIHJlbGlkKQoreworCXJldHVybiBwZ19n ZXRfcGFydGtleWRlZl93b3JrZXIocmVsaWQsIDAsIGZhbHNlLCBmYWxzZSk7Cit9CisKIC8qCiAg KiBJbnRlcm5hbCB3b3JraG9yc2UgdG8gZGVjb21waWxlIGEgcGFydGl0aW9uIGtleSBkZWZpbml0 aW9uLgogICovCkBAIC0yMTMxLDYgKzIyMDYsMTUgQEAgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfZXh0 KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChyZXMp KTsKIH0KIAorLyoKKyAqIEludGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIGRlZmluaXRpb24g b2YgYSBDT05TVFJBSU5UIGNvbW1hbmQKKyAqLworY2hhciAqCitwZ19nZXRfY29uc3RyYWludGRl Zl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKQoreworCXJldHVybiBwZ19nZXRfY29u c3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwgMCwgZmFsc2UpOworfQorCiAv KgogICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgYSBmdWxsIEFMVEVSIFRBQkxFIC4u LiBBREQgQ09OU1RSQUlOVCBjb21tYW5kCiAgKi8KQEAgLTM1MDEsNyArMzU4NSw3IEBAIHBnX2dl dF9mdW5jdGlvbl9hcmdfZGVmYXVsdChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9URVhU X1Aoc3RyaW5nX3RvX3RleHQoc3RyKSk7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBwcmludF9m dW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCkKIHsKIAlp bnQJCQludW1hcmdzOwpAQCAtMTEzODQsNyArMTE0NjgsNyBAQCBnZXRfdGFibGVzYW1wbGVfZGVm KFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0 KQogICogYWN0dWFsX2RhdGF0eXBlLiAgKElmIHlvdSBkb24ndCB3YW50IHRoaXMgYmVoYXZpb3Is IGp1c3QgcGFzcwogICogSW52YWxpZE9pZCBmb3IgYWN0dWFsX2RhdGF0eXBlLikKICAqLwotc3Rh dGljIHZvaWQKK3ZvaWQKIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxf ZGF0YXR5cGUsCiAJCQkJIFN0cmluZ0luZm8gYnVmKQogewpAQCAtMTE3NzgsNyArMTE4NjIsNyBA QCBnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpCiAgKgogICogVGhl IHJlc3VsdCBpbmNsdWRlcyBhbGwgbmVjZXNzYXJ5IHF1b3RpbmcgYW5kIHNjaGVtYS1wcmVmaXhp bmcuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShP aWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAogCQkJ CQkgICBib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCiAJCQkJCSAgIFBh cnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCkKQEAgLTEyMTY0LDcgKzEyMjQ4LDcgQEAgZ2V0 X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpCiAvKgogICogR2Vu ZXJhdGUgYSBDIHN0cmluZyByZXByZXNlbnRpbmcgYSByZWxhdGlvbidzIHJlbG9wdGlvbnMsIG9y IE5VTEwgaWYgbm9uZS4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBmbGF0dGVuX3JlbG9w dGlvbnMoT2lkIHJlbGlkKQogewogCWNoYXIJICAgKnJlc3VsdCA9IE5VTEw7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdAppbmRleCA2OGJiMDMyZDNlLi4yYzg3MTA2ZWVmIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKQEAgLTExODIzLDQgKzExODIzLDEwIEBACiAgIHByb3JldHR5cGUgPT4gJ2J5dGVh JywgcHJvYXJndHlwZXMgPT4gJ3BnX2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnknLAogICBwcm9z cmMgPT4gJ2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnlfc2VuZCcgfSwKIAoreyBvaWQgPT4gJzQ2 NDInLCBkZXNjciA9PiAnZGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgaW50byBqc29uIGZvcm1hdCBz dHJpbmcnLAorICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV90b19qc29uJywgcHJvcmV0dHlwZSA9 PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICdwZ19kZGxfY29tbWFuZCcsIHByb3NyYyA9PiAn ZGRsX2RlcGFyc2VfdG9fanNvbicgfSwKK3sgb2lkID0+ICc0NjQzJywgZGVzY3IgPT4gJ2V4cGFu ZCBqc29uIGZvcm1hdCBEREwgdG8gYSBwbGFpbiBEREwgY29tbWFuZCcsCisgIHByb25hbWUgPT4g J2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHBy b2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFu ZCcgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmggYi9z cmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCmluZGV4IGIzYjA0Y2NmYTkuLmMyYjFjYTMy ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKKysrIGIvc3Jj L2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaApAQCAtNTQsNiArNTQsNyBAQCB0eXBlZGVmIHN0 cnVjdCB4bF9zZXFfcmVjCiBleHRlcm4gaW50NjQgbmV4dHZhbF9pbnRlcm5hbChPaWQgcmVsaWQs IGJvb2wgY2hlY2tfcGVybWlzc2lvbnMpOwogZXh0ZXJuIERhdHVtIG5leHR2YWwoUEdfRlVOQ1RJ T05fQVJHUyk7CiBleHRlcm4gTGlzdCAqc2VxdWVuY2Vfb3B0aW9ucyhPaWQgcmVsaWQpOworZXh0 ZXJuIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBnZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5j ZUlkKTsKIAogZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lU2VxdWVuY2UoUGFyc2VTdGF0ZSAq cHN0YXRlLCBDcmVhdGVTZXFTdG10ICpzZXEpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJT ZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2VxU3RtdCAqc3RtdCk7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVkZS90Y29wL2Rk bF9kZXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYmRmZGY0 N2UyZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApA QCAtMCwwICsxLDIzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJzZS5o CisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJl Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRl L3Rjb3AvZGRsX2RlcGFyc2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVm IERETF9ERVBBUlNFX0gKKyNkZWZpbmUgRERMX0RFUEFSU0VfSAorCisjaW5jbHVkZSAidGNvcC9k ZXBhcnNlX3V0aWxpdHkuaCIKKworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9jb21tYW5k KENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOworZXh0ZXJuIGNoYXIg KmRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKK2V4dGVybiBjaGFyICpk ZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAq b2JqZWN0dHlwZSwKKwkJCQkJCQkJICBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOworCisKKyNlbmRp ZgkJLyogRERMX0RFUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBh cnNlX3V0aWxpdHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKaW5kZXgg OTRkZTEzZDk5MC4uYjUzMjk0YmY1NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBh cnNlX3V0aWxpdHkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCkBA IC02Miw2ICs2Miw3IEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJ T2lkCQkJb2JqZWN0SWQ7CiAJCQlPaWQJCQljbGFzc0lkOworCQkJYm9vbAkJcmV3cml0ZTsKIAkJ CUxpc3QJICAgKnN1YmNtZHM7CiAJCX0JCQlhbHRlclRhYmxlOwogCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNo a19pbnRlcm5hbC5oCmluZGV4IDM2MTI4NGQ4ZWIuLjRlMDIwZWY0YWUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L2FjbGNoa19pbnRlcm5hbC5oCkBAIC0zOSw2ICszOSw3IEBAIHR5cGVkZWYgc3RydWN0CiAJTGlz dAkgICAqZ3JhbnRlZXM7CiAJYm9vbAkJZ3JhbnRfb3B0aW9uOwogCURyb3BCZWhhdmlvciBiZWhh dmlvcjsKKwlPaWQJCQlncmFudG9yX3VpZDsKIH0gSW50ZXJuYWxHcmFudDsKIAogCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVp bHRpbnMuaAppbmRleCA4MTYzMWYxNjQ1Li43MTUwZmFiZDI0IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS91dGlscy9idWlsdGlucy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgK QEAgLTExNCwxMCArMTE0LDEyIEBAIGV4dGVybiBEYXR1bSBudW1lcmljX2Zsb2F0OF9ub19vdmVy ZmxvdyhQR19GVU5DVElPTl9BUkdTKTsKICNkZWZpbmUgRk9STUFUX1RZUEVfRk9SQ0VfUVVBTElG WQkweDA0CS8qIGZvcmNlIHF1YWxpZmljYXRpb24gb2YgdHlwZSAqLwogI2RlZmluZSBGT1JNQVRf VFlQRV9JTlZBTElEX0FTX05VTEwJMHgwOAkvKiBOVUxMIGlmIHVuZGVmaW5lZCAqLwogZXh0ZXJu IGNoYXIgKmZvcm1hdF90eXBlX2V4dGVuZGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwg Yml0czE2IGZsYWdzKTsKK2V4dGVybiBjaGFyICpmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lkIHBy b2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSk7CiAKIGV4dGVybiBjaGFyICpmb3JtYXRf dHlwZV9iZShPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2JlX3F1YWxp ZmllZChPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX3dpdGhfdHlwZW1v ZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOworZXh0ZXJuIGNoYXIgKnByaW50VHlwbW9k KGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCk7CiAKIGV4 dGVybiBpbnQzMiB0eXBlX21heGltdW1fc2l6ZShPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2Qp OwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaCBiL3NyYy9pbmNs dWRlL3V0aWxzL3J1bGV1dGlscy5oCmluZGV4IDdkNDg5NzE4YTMuLjNjYmNhNDhmODUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0 aWxzL3J1bGV1dGlscy5oCkBAIC0xMyw2ICsxMyw3IEBACiAjaWZuZGVmIFJVTEVVVElMU19ICiAj ZGVmaW5lIFJVTEVVVElMU19ICiAKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKICNp bmNsdWRlICJub2Rlcy9ub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNp bmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCkBAIC0yMywxMiArMjQsMTkgQEAgc3RydWN0IFBsYW5u ZWRTdG10OwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX3N0cmluZyhPaWQgaW5kZXhy ZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX2NvbHVtbnMoT2lkIGluZGV4cmVs aWQsIGJvb2wgcHJldHR5KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNl KEZvcm1fcGdfdHJpZ2dlciB0cmlncmVjLAorCQkJCQkJCQkJICAgTm9kZSAqd2hlbkNsYXVzZSwg Ym9vbCBwcmV0dHkpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9xdWVyeWRlZihRdWVyeSAqcXVlcnks IGJvb2wgcHJldHR5KTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMo T2lkIHJlbGlkLCBib29sIHByZXR0eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZf c2ltcGxlKE9pZCByZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRjb25zdHJkZWZfc3Ry aW5nKE9pZCBwYXJ0aXRpb25JZCwgY2hhciAqYWxpYXNuYW1lKTsKIAogZXh0ZXJuIGNoYXIgKnBn X2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFpbnRJZCk7CitleHRlcm4gY2hh ciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoT2lkIGNvbnN0cmFpbnRJZCk7 CitleHRlcm4gdm9pZCBwZ19nZXRfcnVsZWRlZl9kZXRhaWxlZChEYXR1bSBldl9xdWFsLCBEYXR1 bSBldl9hY3Rpb24sCisJCQkJCQkJCSAgIGNoYXIgKip3aGVyZUNsYXVzZSwgTGlzdCAqKmFjdGlv bnMpOworCiBleHRlcm4gY2hhciAqZGVwYXJzZV9leHByZXNzaW9uKE5vZGUgKmV4cHIsIExpc3Qg KmRwY29udGV4dCwKIAkJCQkJCQkJYm9vbCBmb3JjZXByZWZpeCwgYm9vbCBzaG93aW1wbGljaXQp OwogZXh0ZXJuIExpc3QgKmRlcGFyc2VfY29udGV4dF9mb3IoY29uc3QgY2hhciAqYWxpYXNuYW1l LCBPaWQgcmVsaWQpOwpAQCAtNDAsOCArNDgsMTYgQEAgZXh0ZXJuIExpc3QgKnNlbGVjdF9ydGFi bGVfbmFtZXNfZm9yX2V4cGxhaW4oTGlzdCAqcnRhYmxlLAogCQkJCQkJCQkJCQkgQml0bWFwc2V0 ICpyZWxzX3VzZWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKE9pZCBj b2xsaWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcyk7 CitleHRlcm4gY2hhciAqZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFy Z3MsIExpc3QgKmFyZ25hbWVzLAorCQkJCQkJCQkJT2lkICphcmd0eXBlcywgYm9vbCBoYXNfdmFy aWFkaWMsCisJCQkJCQkJCQlib29sICp1c2VfdmFyaWFkaWNfcCwKKwkJCQkJCQkJCVBhcnNlRXhw cktpbmQgc3BlY2lhbF9leHBya2luZCk7CiBleHRlcm4gY2hhciAqZ2V0X3JhbmdlX3BhcnRib3Vu ZF9zdHJpbmcoTGlzdCAqYm91bmRfZGF0dW1zKTsKK2V4dGVybiB2b2lkIGdldF9vcGNsYXNzX25h bWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCisJCQkJCQkJICBTdHJpbmdJbmZv IGJ1Zik7CitleHRlcm4gY2hhciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7CiAKIGV4 dGVybiBjaGFyICpwZ19nZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmcoT2lkIHN0YXRleHRpZCk7 CitleHRlcm4gdm9pZCBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFw VHVwbGUgcHJvY3R1cCk7CiAKICNlbmRpZgkJCQkJCQkvKiBSVUxFVVRJTFNfSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdAppbmRleCA5N2M5YmMxODYxLi5lZjE2ODY5NGExIDEwMDY0NAotLS0g YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtMTYxMCw2ICsxNjEwLDkgQEAgT1NJbmZvCiBPU1NMQ2lwaGVy CiBPU1NMRGlnZXN0CiBPVkVSTEFQUEVECitPYmpFbGVtCitPYmpUcmVlCitPYmpUeXBlCiBPYmpl Y3RBY2Nlc3NEcm9wCiBPYmplY3RBY2Nlc3NOYW1lc3BhY2VTZWFyY2gKIE9iamVjdEFjY2Vzc1Bv c3RBbHRlcgpAQCAtMzE3Niw2ICszMTc5LDcgQEAgY29sb3JtYXByYW5nZQogY29tcGFyZV9jb250 ZXh0CiBjb25maWdfdmFyX3ZhbHVlCiBjb250YWluX2FnZ3Nfb2ZfbGV2ZWxfY29udGV4dAorY29u dlNwZWNpZmllcgogY29udmVydF90ZXN0ZXhwcl9jb250ZXh0CiBjb3B5X2RhdGFfc291cmNlX2Ni CiBjb3JlX1lZU1RZUEUKLS0gCjIuMzcuMQoK --00000000000072399e05ea605996 Content-Type: application/octet-stream; name="v25-0006-Support-CREATE-TRANSFORM-and-DROP-TRANSFORM-commands.patch" Content-Disposition: attachment; filename="v25-0006-Support-CREATE-TRANSFORM-and-DROP-TRANSFORM-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8xa4nou5 RnJvbSBkNzYxOGRiYzUxMmQ0Nzk5MWNjYTg4MGRjYTQ3ZmI0NmFmNmQ3NzkzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IFRodSwgNiBPY3QgMjAyMiAxNTo0MToxNSArMDAwMApTdWJqZWN0OiBbUEFUQ0ggNi82 XSBTdXBwb3J0IENSRUFURSBUUkFOU0ZPUk0gYW5kIERST1AgVFJBTlNGT1JNIGNvbW1hbmRzLgoK U29tZSB0d2Vha2luZyBpcyBtYWRlIGluIGRlcGFyc2VfZHJvcF9jb21tYW5kIGluIG9yZGVyIHRv IG1ha2UgRFJPUApUUkFOU0ZPUk0gZGVwYXJzaW5nIHdvcmsuIFRoaXMgaXMgYmVjYXVzZSB0aGUg b2JqaWRlbnRpdHkgY2FwdHVyZWQgaW4KY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5TUUxEcm9w TGlzdCBjb250YWlucyB0aGUga2V5d29yZCAnb24nLCBmb3IKZXhhbXBsZSAiZm9yIHR5cGVuYW1l IG9uIGxhbmd1YWdlIGxhbmciLCBidXQgdGhlIGtleXdvcmQgJ29uJyBpcyBub3QKbmVlZGVkIGlu IHRoZSBjdXJyZW50IERST1AgVFJBTlNGT1JNIHN5bnRheC4gU28gd2UgbmVlZCB0byByZW1vdmUg dGhlCidvbicga2V5d29yZCBpbiBvYmppZGVudGl0eSBmb3IgRFJPUCBUUkFOU0ZPUk0uCi0tLQog c3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyAgICAgfCAxNzEgKysrKysrKysrKysr KysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jICAgfCAg IDMgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIHwgICAyICsKIDMg ZmlsZXMgY2hhbmdlZCwgMTc1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvZGRsX2RlcGFyc2UuYwppbmRleCA1YmZhODAwZmMyLi5jMzRkZGE4NWI4IDEwMDc1NQot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJjYXRh bG9nL3BnX3JhbmdlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19yZXdyaXRlLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJhbnNmb3Jt LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190c19jb25maWcuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX3RzX2RpY3QuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX3BhcnNlci5oIgpAQCAtNjUy Niw2ICs2NTI3LDIzIEBAIGRlcGFyc2VfZHJvcF9jb21tYW5kKGNvbnN0IGNoYXIgKm9iamlkZW50 aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAogCiAJZm10ID0gcHNwcmludGYoIkRST1AgJXMg SUYgRVhJU1RTICUle29iamlkZW50aXR5fXMiLCBvYmplY3R0eXBlKTsKIAorCS8qIERST1AgVFJB TlNGT1JNIG5lZWRzIHNvbWUgdHdlYWtpbmcgdG8gZml4IHRoZSBzeW50YXggKi8KKwlpZiAoc3Ry Y21wKG9iamVjdHR5cGUsICJ0cmFuc2Zvcm0iKSA9PSAwKQorCXsKKwkJLyoKKwkJICogUmVtb3Zl ICJvbiIgaW4gImZvciB0eXBlbmFtZSBvbiBsYW5ndWFnZSBsYW5nIiBiZWNhdXNlIHRoZSBjdXJy ZW50CisJCSAqIHN5bnRheCBvZiBEUk9QIFRSQU5TRk9STSBkb2Vzbid0IG5lZWQgdGhlICJvbiIg a2V5d29yZAorCQkgKi8KKwkJY2hhciAqb24gPSBzdHJzdHIoaWRlbnRpdHksICIgb24gIik7CisJ CWNoYXIgKm5ld19pZGVudGl0eTsKKworCQlBc3NlcnQob24gIT0gTlVMTCk7CisJCW5ld19pZGVu dGl0eSA9IHBhbGxvYzAoc3RybGVuKGlkZW50aXR5KSAtIDIpOworCQltZW1jcHkobmV3X2lkZW50 aXR5LCBpZGVudGl0eSwgb24gLSBpZGVudGl0eSk7CisJCW1lbWNweShuZXdfaWRlbnRpdHkgKyAo b24gLSBpZGVudGl0eSksIG9uICsgMywgc3RybGVuKGlkZW50aXR5KSAtIChvbiAtIGlkZW50aXR5 KSAtIDMpOworCQlpZGVudGl0eSA9IG5ld19pZGVudGl0eTsKKwl9CisKIAlzdG10ID0gbmV3X29i anRyZWVfVkEoZm10LCAxLCAib2JqaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBpZGVudGl0eSk7 CiAJc3RtdDIgPSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCiAJCQkJCQkgICAicHJlc2Vu dCIsIE9ialR5cGVCb29sLCBiZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpOwpAQCAtNzYzOCw2ICs3 NjU2LDE1NSBAQCBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KENvbGxlY3RlZENvbW1hbmQgKmNt ZCkKIAlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwogfQog CisvKgorICogRGVwYXJzZSBhIENyZWF0ZVRyYW5zZm9ybVN0bXQgKENSRUFURSBUUkFOU0ZPUk0p LgorICoKKyAqIEdpdmVuIGEgdHJhbnNmb3JtIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNy ZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIENSRUFURSBU UkFOU0ZPUk0gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVU cmFuc2Zvcm1TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRy YW5zZm9ybVN0bXQgKm5vZGUgPSAoQ3JlYXRlVHJhbnNmb3JtU3RtdCAqKSBwYXJzZXRyZWU7CisJ T2JqVHJlZQkqY3JlYXRlVHJhbnNmb3JtOworCU9ialRyZWUgKnNpZ247CisJSGVhcFR1cGxlIHRy ZlR1cDsKKwlIZWFwVHVwbGUgbGFuZ1R1cDsKKwlIZWFwVHVwbGUgcHJvY1R1cDsKKwlGb3JtX3Bn X3RyYW5zZm9ybSB0cmZGb3JtOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07CisJRm9ybV9w Z19wcm9jIHByb2NGb3JtOworCWludCBpOworCisJLyogR2V0IHRoZSBwZ190cmFuc2Zvcm0gdHVw bGUgKi8KKwl0cmZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFJGT0lELCBPYmplY3RJZEdldERhdHVt KG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRyZlR1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgdHJhbnNmb3JtIHdpdGggT0lEICV1IiwKKwkJ CSBvYmplY3RJZCk7CisJdHJmRm9ybSA9IChGb3JtX3BnX3RyYW5zZm9ybSkgR0VUU1RSVUNUKHRy ZlR1cCk7CisKKwkvKiBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgcGdfbGFuZ3VhZ2UgdHVwbGUgKi8K KwlsYW5nVHVwID0gU2VhcmNoU3lzQ2FjaGUxKExBTkdPSUQsIHRyZkZvcm0tPnRyZmxhbmcpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsdXJlIGZvciBsYW5ndWFnZSB3aXRoIE9JRCAldSIsCisJCQkgdHJmRm9ybS0+dHJm bGFuZyk7CisJbGFuZ0Zvcm0gPSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VUU1RSVUNUKGxhbmdUdXAp OworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7b3JfcmVwbGFj ZX1zIFRSQU5TRk9STSBGT1IgJXt0eXBlbmFtZX1EIExBTkdVQUdFICV7bGFuZ3VhZ2V9SQorCSAq ICggRlJPTSBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZX1zLCBUTyBTUUwgV0lUSCBGVU5D VElPTiAle3NpZ25hdHVyZV90b2Z9cyApCisJICovCisJY3JlYXRlVHJhbnNmb3JtID0gbmV3X29i anRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlVHJhbnNmb3Jt LCAiJXtvcl9yZXBsYWNlfXMiLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIg OiAiIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlVHJhbnNmb3JtLCAiVFJBTlNGT1JN IEZPUiAle3R5cGVuYW1lfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChU eXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHJmRm9ybS0+dHJmdHlwZSkpOworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVRyYW5zZm9ybSwgIkxBTkdVQUdFICV7bGFuZ3VhZ2V9SSIs CisJCQkJCQkgTmFtZVN0cihsYW5nRm9ybS0+bGFubmFtZSkpOworCisJLyogZGVwYXJzZSB0aGUg dHJhbnNmb3JtX2VsZW1lbnRfbGlzdCAqLworCWlmICh0cmZGb3JtLT50cmZmcm9tc3FsICE9IElu dmFsaWRPaWQpCisJeworCQlMaXN0ICpwYXJhbXMgPSBOSUw7CisKKwkJLyoKKwkJICogVmVyYm9z ZSBzeW50YXgKKwkJICoKKwkJICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zIFRSQU5TRk9STSBGT1Ig JXt0eXBlbmFtZX1EIExBTkdVQUdFICV7bGFuZ3VhZ2V9SQorCQkgKiAoIEZST00gU1FMIFdJVEgg RlVOQ1RJT04gJXtzaWduYXR1cmV9cyApCisJCSAqLworCisJCS8qIEdldCB0aGUgcGdfcHJvYyB0 dXBsZSBmb3IgdGhlIEZST00gRlVOQ1RJT04gKi8KKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hl MShQUk9DT0lELCB0cmZGb3JtLT50cmZmcm9tc3FsKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciBmdW5j dGlvbiB3aXRoIE9JRCAldSIsCisJCQkJdHJmRm9ybS0+dHJmZnJvbXNxbCk7CisJCXByb2NGb3Jt ID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCS8qCisJCSAqIENSRUFU RSBUUkFOU0ZPUk0gZG9lcyBub3QgY2hhbmdlIGZ1bmN0aW9uIHNpZ25hdHVyZSBzbyB3ZSBjYW4g dXNlIGNhdGFsb2cKKwkJICogdG8gZ2V0IGlucHV0IHR5cGUgT2lkcy4KKwkJICovCisJCWZvciAo aSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJlZSAqcGFy YW1vYmogPSBuZXdfb2JqdHJlZSgiIik7CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFt b2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0t PnByb2FyZ3R5cGVzLnZhbHVlc1tpXSwgLTEpKTsKKwkJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1z LCBuZXdfb2JqZWN0X29iamVjdChwYXJhbW9iaikpOworCQl9CisKKwkJc2lnbiA9IG5ld19vYmp0 cmVlKCIiKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChzaWduLCAiJXtpZGVudGl0eX1EIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2Us CisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSkpOworCQlhcHBlbmRf YXJyYXlfb2JqZWN0KHNpZ24sICIoJXthcmd1bWVudHM6LCB9cykiLCBwYXJhbXMpOworCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVRyYW5zZm9ybSwgIihGUk9NIFNRTCBXSVRIIEZVTkNU SU9OICV7c2lnbmF0dXJlfXMiLCBzaWduKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOwor CX0KKwlpZiAodHJmRm9ybS0+dHJmdG9zcWwgIT0gSW52YWxpZE9pZCkKKwl7CisJCUxpc3QgKnBh cmFtcyA9IE5JTDsKKworCQkvKgorCQkgKiBWZXJib3NlIHN5bnRheAorCQkgKgorCQkgKiBDUkVB VEUgJXtvcl9yZXBsYWNlfXMgVFJBTlNGT1JNIEZPUiAle3R5cGVuYW1lfUQgTEFOR1VBR0UgJXts YW5ndWFnZX1JCisJCSAqICggRlJPTSBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZX1zLCBU TyBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZV90b2Z9cyApCisJCSAqCisJCSAqIE9SCisJ CSAqCisJCSAqIENSRUFURSAle29yX3JlcGxhY2V9cyBUUkFOU0ZPUk0gRk9SICV7dHlwZW5hbWV9 RCBMQU5HVUFHRSAle2xhbmd1YWdlfUkKKwkJICogKCBUTyBTUUwgV0lUSCBGVU5DVElPTiAle3Np Z25hdHVyZV90b2Z9cyApCisJCSAqLworCisJCS8qIEFwcGVuZCBhICcsJyBpZiB0cmZmcm9tc3Fs IGlzIHByZXNlbnQsIGVsc2UgYXBwZW5kICcoJyAqLworCQlhcHBlbmRfc3RyaW5nX29iamVjdChj cmVhdGVUcmFuc2Zvcm0sICIle2NvbW1hfXMiLAorCQkJCQkJCSB0cmZGb3JtLT50cmZmcm9tc3Fs ICE9IEludmFsaWRPaWQgPyAiLCIgOiAiKCIpOworCisJCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBs ZSBmb3IgdGhlIFRPIEZVTkNUSU9OICovCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJP Q09JRCwgdHJmRm9ybS0+dHJmdG9zcWwpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1 cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGZ1bmN0aW9uIHdp dGggT0lEICV1IiwKKwkJCQl0cmZGb3JtLT50cmZ0b3NxbCk7CisJCXByb2NGb3JtID0gKEZvcm1f cGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCS8qCisJCSAqIENSRUFURSBUUkFOU0ZP Uk0gZG9lcyBub3QgY2hhbmdlIGZ1bmN0aW9uIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlIGNhdGFs b2cKKwkJICogdG8gZ2V0IGlucHV0IHR5cGUgT2lkcy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkg PCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJlZSAqcGFyYW1vYmogPSBu ZXdfb2JqdHJlZSgiIik7CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXt0 eXBlfVQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb2FyZ3R5 cGVzLnZhbHVlc1tpXSwgLTEpKTsKKwkJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2Jq ZWN0X29iamVjdChwYXJhbW9iaikpOworCQl9CisKKwkJc2lnbiA9IG5ld19vYmp0cmVlKCIiKTsK KworCQlhcHBlbmRfb2JqZWN0X29iamVjdChzaWduLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQlu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCQkgTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKwkJYXBwZW5kX2FycmF5X29iamVj dChzaWduLCAiKCV7YXJndW1lbnRzOiwgfXMpIiwgcGFyYW1zKTsKKworCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjcmVhdGVUcmFuc2Zvcm0sICJUTyBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVy ZV90b2Z9cyIsIHNpZ24pOworCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJfQorCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVRyYW5zZm9ybSwgIiV7Y2xvc2VfYnJhY2tldH1zIiwgIiki KTsKKworCVJlbGVhc2VTeXNDYWNoZShsYW5nVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHJmVHVw KTsKKwlyZXR1cm4gY3JlYXRlVHJhbnNmb3JtOworfQorCiAKIC8qCiAgKiBIYW5kbGUgZGVwYXJz aW5nIG9mIHNpbXBsZSBjb21tYW5kcy4KQEAgLTc4MDQsNiArNzk3MSwxMCBAQCBkZXBhcnNlX3Np bXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKIAkJCWNvbW1hbmQgPSBkZXBhcnNl X0FsdGVyVFNEaWN0aW9uYXJ5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKIAkJCWJyZWFrOwog CisJCWNhc2UgVF9DcmVhdGVUcmFuc2Zvcm1TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3Jl YXRlVHJhbnNmb3JtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCiAJCWRl ZmF1bHQ6CiAJCQljb21tYW5kID0gTlVMTDsKIAkJCWVsb2coTE9HLCAidW5yZWNvZ25pemVkIG5v ZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuYwppbmRleCA4MWVkYmNiNDY3Li4yNTU1OGFhMWM1IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jCkBAIC0yNTU5LDcgKzI1NTksOCBAQCBwdWJsaWNhdGlvbl9kZXBhcnNl X2RkbF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdTKQogCQkJCSBzdHJjbXAob2JqLT5vYmpl Y3R0eXBlLCAidGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbiIpID09IDAgfHwKIAkJCQkgc3RyY21w KG9iai0+b2JqZWN0dHlwZSwgInRleHQgc2VhcmNoIGRpY3Rpb25hcnkiKSA9PSAwIHx8CiAJCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCBwYXJzZXIiKSA9PSAwIHx8Ci0J CQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCB0ZW1wbGF0ZSIpID09IDAp CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCB0ZW1wbGF0ZSIpID09 IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRyYW5zZm9ybSIpID09IDApCiAJ CQljbWR0eXBlID0gRENUX09iamVjdERyb3A7CiAJCWVsc2UKIAkJCWNvbnRpbnVlOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCAzN2QzMzZlN2FhLi5iNjAwNTUwYmUx IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtOTI3LDYgKzkyNyw4 IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRp b25TdG10ICpzdG10KQogCQlDb21tYW5kVGFnCXJld3JpdGVfY29tbWFuZHNbXSA9IHtDTURUQUdf QUxURVJfVEFCTEV9OwogCiAJCUNvbW1hbmRUYWcJZW5kX2NvbW1hbmRzW10gPSB7CisJCQlDTURU QUdfQ1JFQVRFX1RSQU5TRk9STSwKKwkJCUNNRFRBR19EUk9QX1RSQU5TRk9STSwKIAkJCUNNRFRB R19DUkVBVEVfRk9SRUlHTl9EQVRBX1dSQVBQRVIsCiAJCQlDTURUQUdfQUxURVJfRk9SRUlHTl9E QVRBX1dSQVBQRVIsCiAJCQlDTURUQUdfRFJPUF9GT1JFSUdOX0RBVEFfV1JBUFBFUiwKLS0gCjIu MzcuMQoK --00000000000072399e05ea605996--