Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w2cEt-000Rgi-0s for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Mar 2026 21:46:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2cEr-005djU-2s for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Mar 2026 21:46:09 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w2cEr-005djL-0D for pgsql-hackers@lists.postgresql.org; Tue, 17 Mar 2026 21:46:09 +0000 Received: from mail-ed1-x531.google.com ([2a00:1450:4864:20::531]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2cEm-00000000Fvt-48Pw for pgsql-hackers@lists.postgresql.org; Tue, 17 Mar 2026 21:46:08 +0000 Received: by mail-ed1-x531.google.com with SMTP id 4fb4d7f45d1cf-667d8f30bb7so106451a12.0 for ; Tue, 17 Mar 2026 14:46:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773783965; cv=none; d=google.com; s=arc-20240605; b=SrBKsRDCRc1sIJXNUowBmp3hqIGBRZmZrGH/S8+AfsAp2CJY8QTKwkHLd8LnVQk47/ /tIJIPnaCAv3GGkTu8Vx5jCgO7ULbQpL8aL0vzVTy1j48bWDty1UhE9UCkE5USAZLfhS O0+neWLiiJD8kTW5q/ygZJ8HVkeFacSVMcsEqtlumKDC8HSJVJPIigiBChrijcGTzlQh 94/tGMPT8XTLZvrKeJ7MQiuzhEMkKMe3ttNkfotreLOTMliQ78xzwA12sYJ2odGVdhqx hgn9xksSU5fPwgzp+WBnpVe8JgnqKVkJBTaYNgPGvdS5/Pb622MWzfRFQIBPpZXLmTyL 8sew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=QAJ4IzkzMOTPI7UFadCfvodMaLl4gnjeMzANvSfKC8M=; fh=dxJXJbLzq9Nah1LUdsj4QTuQ3JoDScd0wp1YHY64NXM=; b=Ysq7U9bd4Cv7fQwfviYfOeONEZF034Ry5G0YQj1Nex0ATFNxsvtwkityQIVXTimpQ1 0XwyY36ARdeHp3oUhjjegtwHu2f0Xj32EARsL7D0jgMdO2GkcvMDsRM3EAYsPhH4PyKm uMv4Zj9WlB4Wtf2rkGr+Ka0ELzhvKLC83x1duJ+kxlIdqTJqrGVfW29IYcMdZzU/JZqB 6ECGJ7SB4+9Bw7gyNXUo9Gw5AQP7pJk6kSc045IheGge2wyA8IMLqH/1VbXA3DL71t71 mcUK8lWeMkMADAQoTYlFDWSpsohUDdq/l3o/NGvasrUEL74t0vNOtagPWem9RFeqByDx 5O/A==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773783965; x=1774388765; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=QAJ4IzkzMOTPI7UFadCfvodMaLl4gnjeMzANvSfKC8M=; b=mChU7KwCu6t/4Hgy8gqXqwtqpaqZTbbNdU4yL7YV4g8HLVKJtnBVSct+UduKQqH1oV q4HNqFzh23vXbru/jcq3tALUtHep347TxSrP5/BBHDOFUjSZ2nisoLRtt4gFlqC0hTPd i6samGoSqa1E264MU7t93qKozfFkKJ93Pi8Wou4U+74ASJ9KuxLUQRp7MNh/RMa8MEcT HUqIg/qKI6EXMTiGgbUG9t/vUoeF1WbBm5TjUKc/L0TzlcuzVwpEjhf8x80olyEZfd34 ON1SeoDfDfh88bK6yB0HMvhoHbqTtYhm1Rj1O9YuRvmyE20X2QMhZflddTW9eLXVSNkr yR+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773783965; x=1774388765; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=QAJ4IzkzMOTPI7UFadCfvodMaLl4gnjeMzANvSfKC8M=; b=RBcHgCxXoN5sI0rtWtUQTn/Nbof4pYPmna8TLRALnEVsRhdlR3ARPSfwsckj6TS+QR vqvOoxYjGzeZPdKkz8iObL1WJ6oVidDx5EdXGZ+iFUufLGaDKFXvNCkQbCpMWuAmq7HH q+Y5j5K9P5TLXdmMv4qvj9eAsDgkSZaT8G3BQoL0m0o+Ygj7RRNgDjrlOldiNBZowNVD nJxjNxqmf9Qa5fbXwWmJICgj8ktGOe0WdcrxDUn8+DEmwRCaH77PlgqTNsMwaVvOz7wJ BOS9UPb0mn9UGJpQKJNn9GqbBm2aS7D8QdNXxDdxqDIgOshLbNtJNCpA0CwekWsgK1o6 Fg0w== X-Gm-Message-State: AOJu0YzhNhoX21Mv3mtggaP9lN0o+73qAuSxz91h264Y7RPMvxaNoKEF YAIvZRACMVBWv601LW0gQeaTYI7HmC7PLBI+/dUQU6T7H94y6q2eNlHMhvGdRsvXQwb6FLsWu9M yzxxbCOJlFknEr7MXtESFEBtydsXsNIONPA== X-Gm-Gg: ATEYQzxuVTAn2tvebebtSQajJ6hr3b7yGo/JM51u1XF2NSO3eGqv807kANPX0O8W6CB DzY+XVP4e6nSN1tCIqGLne84mG+NCsGDetUZDs2ZR/3pNlx1iOYpoKo67Vh52lC9ml/gWaEUSwK rQOzw4Bbx5CpbGeA+0vWzKrRSZxP67/GOvuX8aFhDVCvHLmFq94sMGvFEQ8Tfz+X8ysl3IIpFSq Bp/hAH2hl8azIO2oT1P6Ats1kHkypYCCJZO82UaoN8nBYdqKoWTh9RzBknlFg+WuPCb5oXw5Y1s 1nfaNNu/1p1xPg0d70heMPeOPpycZKyyGPlBeeI5P4VnQEBnkQ== X-Received: by 2002:a17:907:c11:b0:b96:f329:e64 with SMTP id a640c23a62f3a-b97f4b7272bmr60306666b.55.1773783964823; Tue, 17 Mar 2026 14:46:04 -0700 (PDT) MIME-Version: 1.0 References: <1136161.1769654478@sss.pgh.pa.us> In-Reply-To: From: Robert Haas Date: Tue, 17 Mar 2026 17:45:52 -0400 X-Gm-Features: AaiRm50alRfjmgHnddGaxrjnRBhq4rZscJwF3JQJ6CwU3b4DzDSc4l7w3yf-8c0 Message-ID: Subject: Re: pg_plan_advice To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000021f284064d3f4358" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000021f284064d3f4358 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Mar 12, 2026 at 1:15=E2=80=AFPM Robert Haas = wrote: > I'm still hoping to get some more feedback on the remaining patches, > which are much smaller and conceptually simpler. While there is no > time to redesign them at this point in the release cycle, there is > still the opportunity to fix bugs, or decide that they're too > half-baked to ship. So here is v20 with just those patches. Of course, > post-commit review of the main patch is also very welcome. I've now committed test_plan_advice, since it seems crazy to me to have pg_plan_advice in the tree without it and reviewers evidently agree at least with the concept test_plan_advice is something we should have. Here are the remaining two patches, as v21. Separately, I also committed a fix for the GEQO crash that Alexander Lakhin found. The patch I proposed on list was missing a bms_copy() -- as proposed, it fixed the crash but was still wrong. I added that and committed it. --=20 Robert Haas EDB: http://www.enterprisedb.com --00000000000021f284064d3f4358 Content-Type: application/octet-stream; name="v21-0002-Add-pg_stash_advice-contrib-module.patch" Content-Disposition: attachment; filename="v21-0002-Add-pg_stash_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmv51dyp1 RnJvbSBhMDJlMTg5NmNkMmM5MDhjY2IzMmJjZWQ4NzAyYWYxOGIzOTAwODRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjcgRmViIDIwMjYgMTY6NTg6MTQgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyMSAy LzJdIEFkZCBwZ19zdGFzaF9hZHZpY2UgY29udHJpYiBtb2R1bGUuCgpUaGlzIG1vZHVsZSBhbGxv d3MgcGxhbiBhZHZpY2Ugc3RyaW5ncyB0byBiZSBwcm92aWRlZCBhdXRvbWF0aWNhbGx5CmZyb20g YW4gaW4tbWVtb3J5IGFkdmljZSBzdGFzaC4gQWR2aWNlIHN0YXNoZXMgYXJlIHN0b3JlZCBpbiBk eW5hbWljCnNoYXJlZCBtZW1vcnkgYW5kIG11c3QgYmUgcmVjcmVhdGVkIGFuZCByZXBvcHVsYXRl ZCBhZnRlciBhIHNlcnZlcgpyZXN0YXJ0LiBJZiBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSBp cyBzZXQgdG8gdGhlIG5hbWUgb2YgYW4gYWR2aWNlCnN0YXNoLCBhbmQgaWYgcXVlcnkgaWRlbnRp ZmllcnMgYXJlIGVuYWJsZWQsIHRoZSBxdWVyeSBpZGVudGlmaWVyCmZvciBlYWNoIHF1ZXJ5IHdp bGwgYmUgbG9va2VkIHVwIGluIHRoZSBhZHZpY2Ugc3Rhc2ggYW5kIHRoZQphc3NvY2lhdGVkIGFk dmljZSBzdHJpbmcsIGlmIGFueSwgd2lsbCBiZSB1c2VkIGVhY2ggdGltZSB0aGF0IHF1ZXJ5Cmlz IHBsYW5uZWQuCi0tLQogY29udHJpYi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAxICsKIGNvbnRyaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgMSArCiBjb250cmliL3BnX3N0YXNoX2FkdmljZS9NYWtlZmlsZSAgICAgICAgICAgICAg fCAgMjYgKwogLi4uL2V4cGVjdGVkL3BnX3N0YXNoX2FkdmljZS5vdXQgICAgICAgICAgICAgIHwg MzA1ICsrKysrKwogY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvbWVzb24uYnVpbGQgICAgICAgICAg IHwgIDM1ICsKIC4uLi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLS0xLjAuc3FsICB8 ICA0MyArCiBjb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuYyAgICAgfCA4 NzkgKysrKysrKysrKysrKysrKysrCiAuLi4vcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2Fkdmlj ZS5jb250cm9sICAgfCAgIDUgKwogLi4uL3BnX3N0YXNoX2FkdmljZS9zcWwvcGdfc3Rhc2hfYWR2 aWNlLnNxbCAgIHwgMTMwICsrKwogZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbCAgICAgICAgICAg ICAgICAgICAgIHwgICAxICsKIGRvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sICAgICAgICAgICAg ICAgICAgICB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5zZ21sICAgICAgICAg ICAgICAgfCAyMTggKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAg ICAgICAgICB8ICAgNiArCiAxMyBmaWxlcyBjaGFuZ2VkLCAxNjUxIGluc2VydGlvbnMoKykKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9NYWtlZmlsZQogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL2V4cGVjdGVkL3BnX3N0YXNoX2Fk dmljZS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9tZXNv bi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0 YXNoX2FkdmljZS0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfc3Rhc2hf YWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19z dGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmNvbnRyb2wKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX3N0YXNoX2FkdmljZS9zcWwvcGdfc3Rhc2hfYWR2aWNlLnNxbAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRvYy9zcmMvc2dtbC9wZ3N0YXNoYWR2aWNlLnNnbWwKCmRpZmYgLS1naXQgYS9j b250cmliL01ha2VmaWxlIGIvY29udHJpYi9NYWtlZmlsZQppbmRleCAyMjA3MTAzNGU1MS4uMTRl MTJkNGZlMmUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvTWFrZWZpbGUKKysrIGIvY29udHJpYi9NYWtl ZmlsZQpAQCAtMzAsNiArMzAsNyBAQCBTVUJESVJTID0gXAogCQlvaWQybmFtZQlcCiAJCXBhZ2Vp bnNwZWN0CVwKIAkJcGFzc3dvcmRjaGVjawlcCisJCXBnX3N0YXNoX2FkdmljZQlcCiAJCXBnX2J1 ZmZlcmNhY2hlCVwKIAkJcGdfY29sbGVjdF9hZHZpY2UgXAogCQlwZ19mcmVlc3BhY2VtYXAgXApk aWZmIC0tZ2l0IGEvY29udHJpYi9tZXNvbi5idWlsZCBiL2NvbnRyaWIvbWVzb24uYnVpbGQKaW5k ZXggZmY0MjJkOWI3ZmMuLjQ4NjJiYTk3ZWQxIDEwMDY0NAotLS0gYS9jb250cmliL21lc29uLmJ1 aWxkCisrKyBiL2NvbnRyaWIvbWVzb24uYnVpbGQKQEAgLTUyLDYgKzUyLDcgQEAgc3ViZGlyKCdw Z19vdmVyZXhwbGFpbicpCiBzdWJkaXIoJ3BnX3BsYW5fYWR2aWNlJykKIHN1YmRpcigncGdfcHJl d2FybScpCiBzdWJkaXIoJ3Bncm93bG9ja3MnKQorc3ViZGlyKCdwZ19zdGFzaF9hZHZpY2UnKQog c3ViZGlyKCdwZ19zdGF0X3N0YXRlbWVudHMnKQogc3ViZGlyKCdwZ3N0YXR0dXBsZScpCiBzdWJk aXIoJ3BnX3N1cmdlcnknKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFr ZWZpbGUgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2Q5YjdmMzAxMTUKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL3BnX3N0YXNoX2FkdmljZS9NYWtlZmlsZQpAQCAtMCwwICsxLDI2IEBACisjIGNvbnRy aWIvcGdfc3Rhc2hfYWR2aWNlL01ha2VmaWxlCisKK01PRFVMRV9iaWcgPSBwZ19zdGFzaF9hZHZp Y2UKK09CSlMgPSBcCisJJChXSU4zMlJFUykgXAorCXBnX3N0YXNoX2FkdmljZS5vCisKK0VYVEVO U0lPTiA9IHBnX3N0YXNoX2FkdmljZQorREFUQSA9IHBnX3N0YXNoX2FkdmljZS0tMS4wLnNxbAor UEdGSUxFREVTQyA9ICJwZ19zdGFzaF9hZHZpY2UgLSBzdG9yZSBhbmQgYXV0b21hdGljYWxseSBh cHBseSBwbGFuIGFkdmljZSIKKworUkVHUkVTUyA9IHBnX3N0YXNoX2FkdmljZQorRVhUUkFfSU5T VEFMTCA9IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NQUEZM QUdTID0gLUkkKGluY2x1ZGVkaXJfc2VydmVyKS9leHRlbnNpb24KK1BHX0NPTkZJRyA9IHBnX2Nv bmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdY UykKK2Vsc2UKK1BHX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UKK3N1YmRpciA9IGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlCit0b3BfYnVpbGRkaXIgPSAu Li8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVk ZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9leHBlY3RlZC9wZ19zdGFzaF9hZHZpY2Uub3V0 IGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvZXhwZWN0ZWQvcGdfc3Rhc2hfYWR2aWNlLm91dApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGRlNmMxMGNkZDEKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9leHBlY3RlZC9wZ19zdGFzaF9h ZHZpY2Uub3V0CkBAIC0wLDAgKzEsMzA1IEBACitDUkVBVEUgRVhURU5TSU9OIHBnX3N0YXNoX2Fk dmljZTsKK1NFVCBjb21wdXRlX3F1ZXJ5X2lkID0gb247CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtl cnNfcGVyX2dhdGhlciA9IDA7CistLSBIZWxwZXI6IGV4dHJhY3QgcXVlcnkgaWRlbnRpZmllciBm cm9tIEVYUExBSU4gVkVSQk9TRSBvdXRwdXQuCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBn ZXRfcXVlcnlfaWQocXVlcnlfdGV4dCB0ZXh0KSBSRVRVUk5TIGJpZ2ludAorTEFOR1VBR0UgcGxw Z3NxbCBBUyAkJAorREVDTEFSRQorICAgIGxpbmUgdGV4dDsKKyAgICBxaWQgYmlnaW50OworQkVH SU4KKyAgICBGT1IgbGluZSBJTiBFWEVDVVRFICdFWFBMQUlOIChWRVJCT1NFLCBGT1JNQVQgVEVY VCkgJyB8fCBxdWVyeV90ZXh0CisgICAgTE9PUAorICAgICAgICBJRiBsaW5lIH4gJ1F1ZXJ5IElk ZW50aWZpZXI6JyBUSEVOCisgICAgICAgICAgICBxaWQgOj0gcmVnZXhwX3JlcGxhY2UobGluZSwg Jy4qUXVlcnkgSWRlbnRpZmllcjpccyooLT9cZCspLionLCAnXDEnKTo6YmlnaW50OworICAgICAg ICAgICAgUkVUVVJOIHFpZDsKKyAgICAgICAgRU5EIElGOworICAgIEVORCBMT09QOworICAgIFJB SVNFIEVYQ0VQVElPTiAnUXVlcnkgSWRlbnRpZmllciBub3QgZm91bmQgaW4gRVhQTEFJTiBvdXRw dXQnOworRU5EOworJCQ7CitDUkVBVEUgVEFCTEUgYWFfZGltMSAoaWQgaW50ZWdlciBwcmltYXJ5 IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBm YWxzZSk7CitJTlNFUlQgSU5UTyBhYV9kaW0xIChpZCwgZGltMSwgdmFsMSkKKwlTRUxFQ1QgZywg J3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBhYV9kaW0xOworQ1JFQVRFIFRBQkxFIGFh X2RpbTIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZGltMiAoaWQs IGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSA3 KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpF IGFhX2RpbTI7CitDUkVBVEUgVEFCTEUgYWFfZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5LAor CWRpbTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGFhX2RpbTEgKGlkKSwKKwlkaW0y X2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBhYV9kaW0yIChpZCkKKykgV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZmFjdAorCVNFTEVDVCBn LCAoZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsK K1ZBQ1VVTSBBTkFMWVpFIGFhX2ZhY3Q7CistLSBHZXQgdGhlIHF1ZXJ5IGlkZW50aWZpZXIuCitT RUxFQ1QgZ2V0X3F1ZXJ5X2lkKCQkCitTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZiBMRUZUIEpPSU4g YWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9O IGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworJCQpIEFT IHFpZCBcZ3NldAorLS0gQ3JlYXRlIGFuIGFkdmljZSBzdGFzaCBhbmQgcG9pbnQgcGdfc3Rhc2hf YWR2aWNlIGF0IGl0LgorU0VMRUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rh c2gnKTsKKyBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgCisoMSByb3cpCisKK1NFVCBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICdyZWdyZXNz X3N0YXNoJzsKKy0tIFJ1biBvdXIgdGVzdCBxdWVyeSBmb3IgdGhlIGZpcnN0IHRpbWUgd2l0aCBu byBzdGFzaGVkIGFkdmljZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYWFf ZmFjdCBmIExFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBK T0lOIGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQg dmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAg SGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBhYV9mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gYWFfZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEp CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2RpbTEgZDEKKyAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorKDExIHJvd3MpCisKKy0tIEZvcmNlIGFuIGlu ZGV4IHNjYW4gb24gZGltMQorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19z dGFzaCcsIDoncWlkJywKKwknSU5ERVhfU0NBTihkMSBhYV9kaW0xX3BrZXkpJyk7CisgcGdfc2V0 X3N0YXNoZWRfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKwor RVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBh YV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04g Zi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhh c2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBK b2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBhYV9mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg YWFfZGltMV9wa2V5IG9uIGFhX2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEg PSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihkMSBhYV9kaW0xX3Br ZXkpIC8qIG1hdGNoZWQgKi8KKygxMyByb3dzKQorCistLSBGb3JjZSBhbiBhbHRlcm5hdGl2ZSBq b2luIG9yZGVyCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywg OidxaWQnLAorCSdqb2luX29yZGVyKGYgZDEgZDIpJyk7CisgcGdfc2V0X3N0YXNoZWRfYWR2aWNl IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMg T0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYu ZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIu aWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMSBkMQorICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGFhX2RpbTIgZDIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQxIGQyKSAvKiBtYXRjaGVkICov CisoMTMgcm93cykKKworLS0gRm9yY2UgYW4gYWx0ZXJuYXRpdmUgam9pbiBzdHJhdGVneQorU0VM RUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDoncWlkJywKKwknTkVT VEVEX0xPT1BfUExBSU4oZDEpJyk7CisgcGdfc2V0X3N0YXNoZWRfYWR2aWNlIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1Qg KiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQx LmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2 YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBI YXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBh YV9mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gYWFfZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisg ICAtPiAgSW5kZXggU2NhbiB1c2luZyBhYV9kaW0xX3BrZXkgb24gYWFfZGltMSBkMQorICAgICAg ICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW0xX2lkKQorICAgICAgICAgRmlsdGVyOiAodmFsMSA9 IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9QTEFJTihkMSkgLyog bWF0Y2hlZCAqLworKDEyIHJvd3MpCisKKy0tIEFkZCBhIHVzZWxlc3MgZXh0cmEgZW50cnkgdG8g b3VyIHRlc3Qgc3Rhc2guIFNob3VsZG4ndCBjaGFuZ2UgdGhlIHJlc3VsdAorLS0gZnJvbSB0aGUg cHJldmlvdXMgdGVzdC4KKy0tIChJZiB3ZSdyZSB1bmx1Y2t5IGVub3VnaCB0aGF0IHRoaXMgZXZl ciBmYWlscyBkdWUgdG8gcXVlcnkgSUQgYWN0dWFsbHkKKy0tIGJlaW5nIDEsIHRoZW4ganVzdCBw dXQgc29tZSBvdGhlciBjb25zdGFudCBoZXJlLiBTZWVtcyB1bmxpa2VseS4pCitTRUxFQ1QgcGdf c2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgMSwgJ1NFUV9TQ0FOKGQxKScpOwor IHBnX3NldF9zdGFzaGVkX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSBy b3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZU IEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0y IGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOwor ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQg TG9vcAorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0g ZDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZmFjdCBmCisgICAgICAgICAtPiAg SGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2RpbTIgZDIKKyAgICAgICAg ICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg YWFfZGltMV9wa2V5IG9uIGFhX2RpbTEgZDEKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYu ZGltMV9pZCkKKyAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgTkVTVEVEX0xPT1BfUExBSU4oZDEpIC8qIG1hdGNoZWQgKi8KKygxMiByb3dzKQor CistLSBUcnkgYW4gZW1wdHkgc3Rhc2ggdG8gYmUgc3VyZSBpdCBkb2VzIG5vdGhpbmcKK1NFTEVD VCBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX2VtcHR5X3N0YXNoJyk7CisgcGdfY3Jl YXRlX2FkdmljZV9zdGFzaCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CitTRVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVncmVzc19lbXB0eV9zdGFzaCc7 CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lO IGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBP TiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRp bTFfaWQgPSBkMS5pZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYu ZGltMl9pZCA9IGQyLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2ZhY3QgZgorICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9kaW0yIGQy CisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMSBkMQorICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMSA9IDEpCisoMTEgcm93cykKKworLS0gVGVzdCB0aGF0IHdlIGNhbiBsaXN0IGVhY2gg c3Rhc2ggaW5kaXZpZHVhbGx5IGFuZCBhbGwgb2YgdGhlbSB0b2dldGhlciwKKy0tIGJ1dCBub3Qg YSBub25leGlzdGVudCBzdGFzaC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaGVz KCkgT1JERVIgQlkgc3Rhc2hfbmFtZTsKKyAgICAgc3Rhc2hfbmFtZSAgICAgIHwgbnVtX2VudHJp ZXMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIHJlZ3Jlc3NfZW1wdHlf c3Rhc2ggfCAgICAgICAgICAgMAorIHJlZ3Jlc3Nfc3Rhc2ggICAgICAgfCAgICAgICAgICAgMgor KDIgcm93cykKKworU0VMRUNUIHN0YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwlGUk9NIHBnX2dl dF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoJ3JlZ3Jlc3Nfc3Rhc2gnKSBPUkRFUiBCWSBxdWVyeV9p ZDsKKyAgc3Rhc2hfbmFtZSAgIHwgICAgIGFkdmljZV9zdHJpbmcgICAgIAorLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgcmVncmVzc19zdGFzaCB8IFNFUV9TQ0FOKGQx KQorIHJlZ3Jlc3Nfc3Rhc2ggfCBORVNURURfTE9PUF9QTEFJTihkMSkKKygyIHJvd3MpCisKK1NF TEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJIEZST00gcGdfZ2V0X2FkdmljZV9zdGFz aF9jb250ZW50cygncmVncmVzc19lbXB0eV9zdGFzaCcpIE9SREVSIEJZIHF1ZXJ5X2lkOworIHN0 YXNoX25hbWUgfCBhZHZpY2Vfc3RyaW5nIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLQor KDAgcm93cykKKworU0VMRUNUIHN0YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwkgRlJPTSBwZ19n ZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKE5VTEwpIE9SREVSIEJZIHF1ZXJ5X2lkOworICBzdGFz aF9uYW1lICAgfCAgICAgYWR2aWNlX3N0cmluZyAgICAgCistLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyByZWdyZXNzX3N0YXNoIHwgU0VRX1NDQU4oZDEpCisgcmVncmVz c19zdGFzaCB8IE5FU1RFRF9MT09QX1BMQUlOKGQxKQorKDIgcm93cykKKworU0VMRUNUIHN0YXNo X25hbWUsIGFkdmljZV9zdHJpbmcKKwkgRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRz KCdub19zdWNoX3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7CitFUlJPUjogIGFkdmljZSBzdGFz aCAibm9fc3VjaF9zdGFzaCIgZG9lcyBub3QgZXhpc3QKKy0tIFRlc3QgdGhhdCB3ZSBjYW4gcmVt b3ZlIGFkdmljZS4KK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gn LCA6J3FpZCcsIG51bGwpOworIHBnX3NldF9zdGFzaGVkX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFVCBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSA9 ICdyZWdyZXNzX3N0YXNoJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9m YWN0IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQg Sk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5E IHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAg IEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAg ICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4g b24gYWFfZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGFhX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAx KQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9kaW0xIGQxCisgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKygxMSByb3dzKQorCitTRUxFQ1QgKiBGUk9N IHBnX2dldF9hZHZpY2Vfc3Rhc2hlcygpIE9SREVSIEJZIHN0YXNoX25hbWU7CisgICAgIHN0YXNo X25hbWUgICAgICB8IG51bV9lbnRyaWVzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0KKyByZWdyZXNzX2VtcHR5X3N0YXNoIHwgICAgICAgICAgIDAKKyByZWdyZXNzX3N0YXNo ICAgICAgIHwgICAgICAgICAgIDEKKygyIHJvd3MpCisKK1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZp Y2Vfc3RyaW5nCisJRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKCdyZWdyZXNzX3N0 YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7CisgIHN0YXNoX25hbWUgICB8IGFkdmljZV9zdHJpbmcg CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCisgcmVncmVzc19zdGFzaCB8IFNFUV9T Q0FOKGQxKQorKDEgcm93KQorCistLSBDbGVhbiB1cCBzdGF0ZSBpbiBkeW5hbWljIHNoYXJlZCBt ZW1vcnkuCitTRUxFQ1QgcGdfZHJvcF9hZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gnKTsKKyBw Z19kcm9wX2FkdmljZV9zdGFzaCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykK KworU0VMRUNUIHBnX2Ryb3BfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX2VtcHR5X3N0YXNoJyk7Cisg cGdfZHJvcF9hZHZpY2Vfc3Rhc2ggCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cp CisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL21lc29uLmJ1aWxkIGIvY29u dHJpYi9wZ19zdGFzaF9hZHZpY2UvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmI2NjZiY2QwZjFiCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9w Z19zdGFzaF9hZHZpY2UvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwzNSBAQAorIyBDb3B5cmlnaHQg KGMpIDIwMjItMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdf c3Rhc2hfYWR2aWNlX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3BnX3N0YXNoX2FkdmljZS5jJworKQor CitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgcGdfc3Rhc2hfYWR2aWNlX3NvdXJjZXMg Kz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0t TkFNRScsICdwZ19zdGFzaF9hZHZpY2UnLAorICAgICctLUZJTEVERVNDJywgJ3BnX3N0YXNoX2Fk dmljZSAtIHN0b3JlIGFuZCBhdXRvbWF0aWNhbGx5IGFwcGx5IHBsYW4gYWR2aWNlJyxdKQorZW5k aWYKKworcGdfc3Rhc2hfYWR2aWNlID0gc2hhcmVkX21vZHVsZSgncGdfc3Rhc2hfYWR2aWNlJywK KyAgcGdfc3Rhc2hfYWR2aWNlX3NvdXJjZXMsCisgIGluY2x1ZGVfZGlyZWN0b3JpZXM6IFtwZ19w bGFuX2FkdmljZV9pbmMsIGluY2x1ZGVfZGlyZWN0b3JpZXMoJy4nKV0sCisgIGt3YXJnczogY29u dHJpYl9tb2RfYXJncywKKykKK2NvbnRyaWJfdGFyZ2V0cyArPSBwZ19zdGFzaF9hZHZpY2UKKwor aW5zdGFsbF9kYXRhKAorICAncGdfc3Rhc2hfYWR2aWNlLS0xLjAuc3FsJywKKyAgJ3BnX3N0YXNo X2FkdmljZS5jb250cm9sJywKKyAga3dhcmdzOiBjb250cmliX2RhdGFfYXJncywKKykKKwordGVz dHMgKz0geworICAnbmFtZSc6ICdwZ19zdGFzaF9hZHZpY2UnLAorICAnc2QnOiBtZXNvbi5jdXJy ZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAg J3JlZ3Jlc3MnOiB7CisgICAgJ3NxbCc6IFsKKyAgICAgICdwZ19zdGFzaF9hZHZpY2UnLAorICAg IF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFz aF9hZHZpY2UtLTEuMC5zcWwgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZp Y2UtLTEuMC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg4ZGVk ZDhlZjFiCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rh c2hfYWR2aWNlLS0xLjAuc3FsCkBAIC0wLDAgKzEsNDMgQEAKKy8qIGNvbnRyaWIvcGdfc3Rhc2hf YWR2aWNlL3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3Jp cHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgor XGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHBnX3N0YXNoX2FkdmljZSIgdG8gbG9hZCB0aGlz IGZpbGUuIFxxdWl0CisKK0NSRUFURSBGVU5DVElPTiBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKHN0 YXNoX25hbWUgdGV4dCkKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19j cmVhdGVfYWR2aWNlX3N0YXNoJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElP TiBwZ19kcm9wX2FkdmljZV9zdGFzaChzdGFzaF9uYW1lIHRleHQpCitSRVRVUk5TIHZvaWQKK0FT ICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfZHJvcF9hZHZpY2Vfc3Rhc2gnCitMQU5HVUFHRSBDIFNU UklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIHBnX3NldF9zdGFzaGVkX2FkdmljZShzdGFzaF9uYW1l IHRleHQsIHF1ZXJ5X2lkIGJpZ2ludCwKKwkJCQkJCQkJCSAgYWR2aWNlX3N0cmluZyB0ZXh0KQor UkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX3NldF9zdGFzaGVkX2Fkdmlj ZScKK0xBTkdVQUdFIEM7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfYWR2aWNlX3N0YXNoZXMo CisJT1VUIHN0YXNoX25hbWUgdGV4dCwKKwlPVVQgbnVtX2VudHJpZXMgYmlnaW50CispCitSRVRV Uk5TIFNFVE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19nZXRfYWR2aWNlX3N0 YXNoZXMnCitMQU5HVUFHRSBDIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2dldF9hZHZp Y2Vfc3Rhc2hfY29udGVudHMoCisJSU5PVVQgc3Rhc2hfbmFtZSB0ZXh0LAorCU9VVCBxdWVyeV9p ZCBiaWdpbnQsCisJT1VUIGFkdmljZV9zdHJpbmcgdGV4dAorKQorUkVUVVJOUyBTRVRPRiByZWNv cmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cycK K0xBTkdVQUdFIEM7CisKK1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfY3JlYXRlX2FkdmljZV9z dGFzaCh0ZXh0KSBGUk9NIFBVQkxJQzsKK1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfZHJvcF9h ZHZpY2Vfc3Rhc2godGV4dCkgRlJPTSBQVUJMSUM7CitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBn X2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHModGV4dCkgRlJPTSBQVUJMSUM7CitSRVZPS0UgQUxM IE9OIEZVTkNUSU9OIHBnX2dldF9hZHZpY2Vfc3Rhc2hlcygpIEZST00gUFVCTElDOworUkVWT0tF IEFMTCBPTiBGVU5DVElPTiBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UodGV4dCwgYmlnaW50LCB0ZXh0 KSBGUk9NIFBVQkxJQzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0 YXNoX2FkdmljZS5jIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIyYmUzZTVkNjM5Ci0tLSAv ZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmMK QEAgLTAsMCArMSw4NzkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX3N0YXNoX2Fk dmljZS5jCisgKgkgIEFwcGx5IHBsYW4gYWR2aWNlIGF1dG9tYXRpY2FsbHksIHdpdGhvdXQgU1FM IG1vZGlmaWNhdGlvbnMuCisgKgorICogVGhpcyBtb2R1bGUgYWxsb3dzIHBsYW4gYWR2aWNlIHN0 cmluZ3MgKGFzIHVzZWQgYW5kIGdlbmVyYXRlZCBieQorICogcGdfcGxhbl9hZHZpY2UpIHRvIGJl ICJzdGFzaGVkIiBpbiBkeW5hbWljIHNoYXJlZCBtZW1vcnkgYW5kLCBmcm9tCisgKiB0aGVyZSwg YXV0b21hdGljYWxseSBiZSBhcHBsaWVkIHRvIHF1ZXJpZXMgYXMgdGhleSBhcmUgcGxhbm5lZC4K KyAqIFlvdSBjYW4gY3JlYXRlIGFueSBudW1iZXIgb2YgYWR2aWNlIHN0YXNoZXMsIGVhY2ggb2Yg d2hpY2ggaXMKKyAqIGlkZW50aWZpZWQgYnkgYSBodW1hbi1yZWFkYWJsZSwgQVNDSUkgbmFtZSwg YW5kIGVhY2ggb2YgdGhlbSBpcworICogZXNzZW50aWFsbHkgYSBxdWVyeSBJRCAtPiBhZHZpY2Vf c3RyaW5nIG1hcHBpbmcuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3N0YXNoX2Fk dmljZS9wZ19zdGFzaF9hZHZpY2UuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5j bHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKKyNpbmNsdWRl ICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgImZ1bmNhcGku aCIKKyNpbmNsdWRlICJsaWIvZHNoYXNoLmgiCisjaW5jbHVkZSAibm9kZXMvcXVlcnlqdW1ibGUu aCIKKyNpbmNsdWRlICJwZ19wbGFuX2FkdmljZS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvZHNtX3Jl Z2lzdHJ5LmgiCisjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKKyNpbmNsdWRlICJ1dGlscy9i dWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0 aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvdHVwbGVzdG9yZS5oIgorCitQR19NT0RVTEVfTUFHSUM7 CisKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfY3JlYXRlX2FkdmljZV9zdGFzaCk7CitQR19GVU5D VElPTl9JTkZPX1YxKHBnX2Ryb3BfYWR2aWNlX3N0YXNoKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEo cGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cyk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2dl dF9hZHZpY2Vfc3Rhc2hlcyk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX3NldF9zdGFzaGVkX2Fk dmljZSk7CisKK3R5cGVkZWYgc3RydWN0IHBnc2Ffc2hhcmVkX3N0YXRlCit7CisJTFdMb2NrCQls b2NrOworCWludAkJCWRzYV90cmFuY2hlOworCWludAkJCXN0YXNoX3RyYW5jaGU7CisJaW50CQkJ ZW50cnlfdHJhbmNoZTsKKwl1aW50NjQJCW5leHRfc3Rhc2hfaWQ7CisJZHNhX2hhbmRsZQlhcmVh OworCWRzaGFzaF90YWJsZV9oYW5kbGUgc3Rhc2hfaGFzaDsKKwlkc2hhc2hfdGFibGVfaGFuZGxl IGVudHJ5X2hhc2g7Cit9IHBnc2Ffc2hhcmVkX3N0YXRlOworCit0eXBlZGVmIHN0cnVjdCBwZ3Nh X3N0YXNoCit7CisJY2hhcgkJbmFtZVtOQU1FREFUQUxFTl07CisJdWludDY0CQlwZ3NhX3N0YXNo X2lkOworfSBwZ3NhX3N0YXNoOworCit0eXBlZGVmIHN0cnVjdCBwZ3NhX2VudHJ5X2tleQorewor CXVpbnQ2NAkJcGdzYV9zdGFzaF9pZDsKKwlpbnQ2NAkJcXVlcnlJZDsKK30gcGdzYV9lbnRyeV9r ZXk7CisKK3R5cGVkZWYgc3RydWN0IHBnc2FfZW50cnkKK3sKKwlwZ3NhX2VudHJ5X2tleSBrZXk7 CisJZHNhX3BvaW50ZXIgYWR2aWNlX3N0cmluZzsKK30gcGdzYV9lbnRyeTsKKwordHlwZWRlZiBz dHJ1Y3QgcGdzYV9zdGFzaF9jb3VudAoreworCXVpbnQzMgkJc3RhdHVzOworCXVpbnQ2NAkJcGdz YV9zdGFzaF9pZDsKKwlpbnQ2NAkJbnVtX2VudHJpZXM7Cit9IHBnc2Ffc3Rhc2hfY291bnQ7CisK KyNkZWZpbmUgU0hfUFJFRklYIHBnc2Ffc3Rhc2hfY291bnRfdGFibGUKKyNkZWZpbmUgU0hfRUxF TUVOVF9UWVBFIHBnc2Ffc3Rhc2hfY291bnQKKyNkZWZpbmUgU0hfS0VZX1RZUEUgdWludDY0Cisj ZGVmaW5lIFNIX0tFWSBwZ3NhX3N0YXNoX2lkCisjZGVmaW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkp IGhhc2hfYnl0ZXMoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgJihrZXkpLCBzaXplb2YodWludDY0 KSkKKyNkZWZpbmUgU0hfRVFVQUwodGIsIGEsIGIpIChhID09IGIpCisjZGVmaW5lIFNIX1NDT1BF IHN0YXRpYyBpbmxpbmUKKyNkZWZpbmUgU0hfREVGSU5FCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNp bmNsdWRlICJsaWIvc2ltcGxlaGFzaC5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3NhX3N0YXNoX25h bWUKK3sKKwl1aW50MzIJCXN0YXR1czsKKwl1aW50NjQJCXBnc2Ffc3Rhc2hfaWQ7CisJY2hhcgkg ICAqbmFtZTsKK30gcGdzYV9zdGFzaF9uYW1lOworCisjZGVmaW5lIFNIX1BSRUZJWCBwZ3NhX3N0 YXNoX25hbWVfdGFibGUKKyNkZWZpbmUgU0hfRUxFTUVOVF9UWVBFIHBnc2Ffc3Rhc2hfbmFtZQor I2RlZmluZSBTSF9LRVlfVFlQRSB1aW50NjQKKyNkZWZpbmUgU0hfS0VZIHBnc2Ffc3Rhc2hfaWQK KyNkZWZpbmUgU0hfSEFTSF9LRVkodGIsIGtleSkgaGFzaF9ieXRlcygoY29uc3QgdW5zaWduZWQg Y2hhciAqKSAmKGtleSksIHNpemVvZih1aW50NjQpKQorI2RlZmluZSBTSF9FUVVBTCh0YiwgYSwg YikgKGEgPT0gYikKKyNkZWZpbmUgU0hfU0NPUEUgc3RhdGljIGlubGluZQorI2RlZmluZSBTSF9E RUZJTkUKKyNkZWZpbmUgU0hfREVDTEFSRQorI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNoLmgiCisK Ky8qIFNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KK3N0YXRpYyBwZ3NhX3NoYXJlZF9zdGF0ZSAq cGdzYV9zdGF0ZTsKK3N0YXRpYyBkc2FfYXJlYSAqcGdzYV9kc2FfYXJlYTsKK3N0YXRpYyBkc2hh c2hfdGFibGUgKnBnc2Ffc3Rhc2hfZHNoYXNoOworc3RhdGljIGRzaGFzaF90YWJsZSAqcGdzYV9l bnRyeV9kc2hhc2g7CisKKy8qIFNoYXJlZCBtZW1vcnkgaGFzaCB0YWJsZSBwYXJhbWV0ZXJzICov CitzdGF0aWMgZHNoYXNoX3BhcmFtZXRlcnMgcGdzYV9zdGFzaF9kc2hhc2hfcGFyYW1ldGVycyA9 IHsKKwlOQU1FREFUQUxFTiwKKwlzaXplb2YocGdzYV9zdGFzaCksCisJZHNoYXNoX3N0cmNtcCwK Kwlkc2hhc2hfc3RyaGFzaCwKKwlkc2hhc2hfc3RyY3B5LAorCUxXVFJBTkNIRV9JTlZBTElECQkJ LyogZ2V0cyBzZXQgYXQgcnVudGltZSAqLworfTsKKworc3RhdGljIGRzaGFzaF9wYXJhbWV0ZXJz IHBnc2FfZW50cnlfZHNoYXNoX3BhcmFtZXRlcnMgPSB7CisJc2l6ZW9mKHBnc2FfZW50cnlfa2V5 KSwKKwlzaXplb2YocGdzYV9lbnRyeSksCisJZHNoYXNoX21lbWNtcCwKKwlkc2hhc2hfbWVtaGFz aCwKKwlkc2hhc2hfbWVtY3B5LAorCUxXVFJBTkNIRV9JTlZBTElECQkJLyogZ2V0cyBzZXQgYXQg cnVudGltZSAqLworfTsKKworLyogR1VDIHZhcmlhYmxlICovCitzdGF0aWMgY2hhciAqcGdfc3Rh c2hfYWR2aWNlX3N0YXNoX25hbWUgPSAiIjsKKworLyogT3RoZXIgZ2xvYmFsIHZhcmlhYmxlcyAq Lworc3RhdGljIE1lbW9yeUNvbnRleHQgcGdfc3Rhc2hfYWR2aWNlX21jeHQ7CisKKy8qIEZ1bmN0 aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBjaGFyICpwZ3NhX2Fkdmlzb3IoUGxhbm5lckdsb2Jh bCAqZ2xvYiwKKwkJCQkJCSAgUXVlcnkgKnBhcnNlLAorCQkJCQkJICBjb25zdCBjaGFyICpxdWVy eV9zdHJpbmcsCisJCQkJCQkgIGludCBjdXJzb3JPcHRpb25zLAorCQkJCQkJICBFeHBsYWluU3Rh dGUgKmVzKTsKK3N0YXRpYyB2b2lkIHBnc2FfYXR0YWNoKHZvaWQpOworc3RhdGljIHZvaWQgcGdz YV9jaGVja19zdGFzaF9uYW1lKGNoYXIgKnN0YXNoX25hbWUpOworc3RhdGljIGJvb2wgcGdzYV9j aGVja19zdGFzaF9uYW1lX2d1YyhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsCisJCQkJCQkJ CQkgIEd1Y1NvdXJjZSBzb3VyY2UpOworc3RhdGljIHZvaWQgcGdzYV9jbGVhcl9hZHZpY2Vfc3Ry aW5nKGNoYXIgKnN0YXNoX25hbWUsIGludDY0IHF1ZXJ5SWQpOworc3RhdGljIHZvaWQgcGdzYV9j cmVhdGVfc3Rhc2goY2hhciAqc3Rhc2hfbmFtZSk7CitzdGF0aWMgdm9pZCBwZ3NhX2Ryb3Bfc3Rh c2goY2hhciAqc3Rhc2hfbmFtZSk7CitzdGF0aWMgdm9pZCBwZ3NhX2luaXRfc2hhcmVkX3N0YXRl KHZvaWQgKnB0ciwgdm9pZCAqYXJnKTsKK3N0YXRpYyB1aW50NjQgcGdzYV9sb29rdXBfc3Rhc2hf aWQoY2hhciAqc3Rhc2hfbmFtZSk7CitzdGF0aWMgdm9pZCBwZ3NhX3NldF9hZHZpY2Vfc3RyaW5n KGNoYXIgKnN0YXNoX25hbWUsIGludDY0IHF1ZXJ5SWQsCisJCQkJCQkJCSAgIGNoYXIgKmFkdmlj ZV9zdHJpbmcpOworCisvKgorICogSW5pdGlhbGl6ZSB0aGlzIG1vZHVsZS4KKyAqLwordm9pZAor X1BHX2luaXQodm9pZCkKK3sKKwl2b2lkCQkoKmFkZF9hZHZpc29yX2ZuKSAocGdfcGxhbl9hZHZp Y2VfYWR2aXNvcl9ob29rIGhvb2spOworCisJLyogSWYgY29tcHV0ZV9xdWVyeV9pZCA9ICdhdXRv Jywgd2Ugd291bGQgbGlrZSBxdWVyeSBJRHMuICovCisJRW5hYmxlUXVlcnlJZCgpOworCisJLyog RGVmaW5lIG91ciBHVUNzLiAqLworCURlZmluZUN1c3RvbVN0cmluZ1ZhcmlhYmxlKCJwZ19zdGFz aF9hZHZpY2Uuc3Rhc2hfbmFtZSIsCisJCQkJCQkJICAgIk5hbWUgb2YgdGhlIGFkdmljZSBzdGFz aCB0byBiZSB1c2VkIGluIHRoaXMgc2Vzc2lvbi4iLAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJ ICAgJnBnX3N0YXNoX2FkdmljZV9zdGFzaF9uYW1lLAorCQkJCQkJCSAgICIiLAorCQkJCQkJCSAg IFBHQ19VU0VSU0VULAorCQkJCQkJCSAgIDAsCisJCQkJCQkJICAgcGdzYV9jaGVja19zdGFzaF9u YW1lX2d1YywKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIE5VTEwpOworCisJTWFya0dVQ1By ZWZpeFJlc2VydmVkKCJwZ19zdGFzaF9hZHZpY2UiKTsKKworCS8qIFRlbGwgcGdfcGxhbl9hZHZp Y2UgdGhhdCB3ZSB3YW50IHRvIHByb3ZpZGUgYWR2aWNlIHN0cmluZ3MuICovCisJYWRkX2Fkdmlz b3JfZm4gPQorCQlsb2FkX2V4dGVybmFsX2Z1bmN0aW9uKCJwZ19wbGFuX2FkdmljZSIsICJwZ19w bGFuX2FkdmljZV9hZGRfYWR2aXNvciIsCisJCQkJCQkJICAgdHJ1ZSwgTlVMTCk7CisJKCphZGRf YWR2aXNvcl9mbikgKHBnc2FfYWR2aXNvcik7Cit9CisKKy8qCisgKiBTUUwtY2FsbGFibGUgZnVu Y3Rpb24gdG8gY3JlYXRlIGFuIGFkdmljZSBzdGFzaAorICovCitEYXR1bQorcGdfY3JlYXRlX2Fk dmljZV9zdGFzaChQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJICAgKnN0YXNoX25hbWUgPSB0 ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCisJcGdzYV9jaGVja19zdGFz aF9uYW1lKHN0YXNoX25hbWUpOworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2RzaGFzaCA9PSBO VUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKwlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0YXRlLT5sb2Nr LCBMV19FWENMVVNJVkUpOworCXBnc2FfY3JlYXRlX3N0YXNoKHN0YXNoX25hbWUpOworCUxXTG9j a1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxvY2spOworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisKKy8q CisgKiBTUUwtY2FsbGFibGUgZnVuY3Rpb24gdG8gZHJvcCBhbiBhZHZpY2Ugc3Rhc2gKKyAqLwor RGF0dW0KK3BnX2Ryb3BfYWR2aWNlX3N0YXNoKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkg ICAqc3Rhc2hfbmFtZSA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgwKSk7CisK KwlwZ3NhX2NoZWNrX3N0YXNoX25hbWUoc3Rhc2hfbmFtZSk7CisJaWYgKHVubGlrZWx5KHBnc2Ff ZW50cnlfZHNoYXNoID09IE5VTEwpKQorCQlwZ3NhX2F0dGFjaCgpOworCUxXTG9ja0FjcXVpcmUo JnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJcGdzYV9kcm9wX3N0YXNoKHN0YXNo X25hbWUpOworCUxXTG9ja1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxvY2spOworCVBHX1JFVFVSTl9W T0lEKCk7Cit9CisKKy8qCisgKiBTUUwtY2FsbGFibGUgZnVuY3Rpb24gdG8gcHJvdmlkZSBhIGxp c3Qgb2YgYWR2aWNlIHN0YXNoZXMKKyAqLworRGF0dW0KK3BnX2dldF9hZHZpY2Vfc3Rhc2hlcyhQ R19GVU5DVElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJ bmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlkc2hhc2hfc2VxX3N0YXR1cyBpdGVyYXRvcjsK KwlwZ3NhX2VudHJ5ICplbnRyeTsKKwlwZ3NhX3N0YXNoICpzdGFzaDsKKwlwZ3NhX3N0YXNoX2Nv dW50X3RhYmxlX2hhc2ggKmNoYXNoOworCisJSW5pdE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDAp OworCisJLyogQXR0YWNoIHRvIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBpZiBub3QgYWxyZWFkeSBk b25lLiAqLworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2RzaGFzaCA9PSBOVUxMKSkKKwkJcGdz YV9hdHRhY2goKTsKKworCS8qIFRhbGx5IHVwIHRoZSBudW1iZXIgb2YgZW50cmllcyBwZXIgc3Rh c2guICovCisJY2hhc2ggPSBwZ3NhX3N0YXNoX2NvdW50X3RhYmxlX2NyZWF0ZShDdXJyZW50TWVt b3J5Q29udGV4dCwgNjQsIE5VTEwpOworCWRzaGFzaF9zZXFfaW5pdCgmaXRlcmF0b3IsIHBnc2Ff ZW50cnlfZHNoYXNoLCB0cnVlKTsKKwl3aGlsZSAoKGVudHJ5ID0gZHNoYXNoX3NlcV9uZXh0KCZp dGVyYXRvcikpICE9IE5VTEwpCisJeworCQlwZ3NhX3N0YXNoX2NvdW50ICpjOworCQlib29sCQlm b3VuZDsKKworCQljID0gcGdzYV9zdGFzaF9jb3VudF90YWJsZV9pbnNlcnQoY2hhc2gsCisJCQkJ CQkJCQkJICBlbnRyeS0+a2V5LnBnc2Ffc3Rhc2hfaWQsCisJCQkJCQkJCQkJICAmZm91bmQpOwor CQlpZiAoIWZvdW5kKQorCQkJYy0+bnVtX2VudHJpZXMgPSAxOworCQllbHNlCisJCQljLT5udW1f ZW50cmllcysrOworCX0KKwlkc2hhc2hfc2VxX3Rlcm0oJml0ZXJhdG9yKTsKKworCS8qIEVtaXQg cmVzdWx0cy4gKi8KKwlkc2hhc2hfc2VxX2luaXQoJml0ZXJhdG9yLCBwZ3NhX3N0YXNoX2RzaGFz aCwgdHJ1ZSk7CisJd2hpbGUgKChzdGFzaCA9IGRzaGFzaF9zZXFfbmV4dCgmaXRlcmF0b3IpKSAh PSBOVUxMKQorCXsKKwkJRGF0dW0JCXZhbHVlc1syXTsKKwkJYm9vbAkJbnVsbHNbMl07CisJCXBn c2Ffc3Rhc2hfY291bnQgKmM7CisKKwkJdmFsdWVzWzBdID0gQ1N0cmluZ0dldFRleHREYXR1bShz dGFzaC0+bmFtZSk7CisJCW51bGxzWzBdID0gZmFsc2U7CisKKwkJYyA9IHBnc2Ffc3Rhc2hfY291 bnRfdGFibGVfbG9va3VwKGNoYXNoLCBzdGFzaC0+cGdzYV9zdGFzaF9pZCk7CisJCXZhbHVlc1sx XSA9IEludDY0R2V0RGF0dW0oYyA9PSBOVUxMID8gMCA6IGMtPm51bV9lbnRyaWVzKTsKKwkJbnVs bHNbMV0gPSBmYWxzZTsKKworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3Vs dCwgcnNpbmZvLT5zZXREZXNjLCB2YWx1ZXMsCisJCQkJCQkJIG51bGxzKTsKKwl9CisJZHNoYXNo X3NlcV90ZXJtKCZpdGVyYXRvcik7CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQorCisvKgorICog U1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIHByb3ZpZGUgYWR2aWNlIHN0YXNoIGNvbnRlbnRzCisg Ki8KK0RhdHVtCitwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5y ZXN1bHRpbmZvOworCWRzaGFzaF9zZXFfc3RhdHVzIGl0ZXJhdG9yOworCWNoYXIJICAgKnN0YXNo X25hbWUgPSBOVUxMOworCXBnc2Ffc3Rhc2hfbmFtZV90YWJsZV9oYXNoICpuaGFzaCA9IE5VTEw7 CisJdWludDY0CQlzdGFzaF9pZCA9IDA7CisJcGdzYV9lbnRyeSAqZW50cnk7CisKKwlJbml0TWF0 ZXJpYWxpemVkU1JGKGZjaW5mbywgMCk7CisKKwkvKiBBdHRhY2ggdG8gZHluYW1pYyBzaGFyZWQg bWVtb3J5IGlmIG5vdCBhbHJlYWR5IGRvbmUuICovCisJaWYgKHVubGlrZWx5KHBnc2FfZW50cnlf ZHNoYXNoID09IE5VTEwpKQorCQlwZ3NhX2F0dGFjaCgpOworCisJLyogVXNlciBjYW4gcGFzcyBO VUxMIGZvciBhbGwgc3Rhc2hlcywgb3IgdGhlIG5hbWUgb2YgYSBzcGVjaWZpYyBzdGFzaC4gKi8K KwlpZiAoIVBHX0FSR0lTTlVMTCgwKSkKKwl7CisJCXN0YXNoX25hbWUgPSB0ZXh0X3RvX2NzdHJp bmcoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCQlwZ3NhX2NoZWNrX3N0YXNoX25hbWUoc3Rhc2hf bmFtZSk7CisJCXN0YXNoX2lkID0gcGdzYV9sb29rdXBfc3Rhc2hfaWQoc3Rhc2hfbmFtZSk7CisK KwkJLyogSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgc3Rhc2ggbmFtZSwgaXQgc2hvdWxkIGV4aXN0 LiAqLworCQlpZiAoc3Rhc2hfaWQgPT0gMCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCWVycm1zZygiYWR2aWNl IHN0YXNoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsIHN0YXNoX25hbWUpKTsKKwl9CisJZWxzZQor CXsKKwkJcGdzYV9zdGFzaCAqc3Rhc2g7CisKKwkJLyoKKwkJICogSWYgd2UncmUgZHVtcGluZyBk YXRhIGFib3V0IGFsbCBzdGFzaGVzLCB3ZSBuZWVkIGFuIElELT5uYW1lIGxvb2t1cAorCQkgKiB0 YWJsZS4KKwkJICovCisJCW5oYXNoID0gcGdzYV9zdGFzaF9uYW1lX3RhYmxlX2NyZWF0ZShDdXJy ZW50TWVtb3J5Q29udGV4dCwgNjQsIE5VTEwpOworCQlkc2hhc2hfc2VxX2luaXQoJml0ZXJhdG9y LCBwZ3NhX3N0YXNoX2RzaGFzaCwgdHJ1ZSk7CisJCXdoaWxlICgoc3Rhc2ggPSBkc2hhc2hfc2Vx X25leHQoJml0ZXJhdG9yKSkgIT0gTlVMTCkKKwkJeworCQkJcGdzYV9zdGFzaF9uYW1lICpuOwor CQkJYm9vbAkJZm91bmQ7CisKKwkJCW4gPSBwZ3NhX3N0YXNoX25hbWVfdGFibGVfaW5zZXJ0KG5o YXNoLAorCQkJCQkJCQkJCQkgc3Rhc2gtPnBnc2Ffc3Rhc2hfaWQsCisJCQkJCQkJCQkJCSAmZm91 bmQpOworCQkJQXNzZXJ0KCFmb3VuZCk7CisJCQluLT5uYW1lID0gcHN0cmR1cChzdGFzaC0+bmFt ZSk7CisJCX0KKwkJZHNoYXNoX3NlcV90ZXJtKCZpdGVyYXRvcik7CisJfQorCisJLyogTm93IGl0 ZXJhdGUgb3ZlciBhbGwgdGhlIGVudHJpZXMuICovCisJZHNoYXNoX3NlcV9pbml0KCZpdGVyYXRv ciwgcGdzYV9lbnRyeV9kc2hhc2gsIGZhbHNlKTsKKwl3aGlsZSAoKGVudHJ5ID0gZHNoYXNoX3Nl cV9uZXh0KCZpdGVyYXRvcikpICE9IE5VTEwpCisJeworCQlEYXR1bQkJdmFsdWVzWzNdOworCQli b29sCQludWxsc1szXTsKKwkJY2hhcgkgICAqdGhpc19zdGFzaF9uYW1lOworCQljaGFyCSAgICph ZHZpY2Vfc3RyaW5nOworCisJCS8qIFNraXAgaW5jb21wbGV0ZSBlbnRyaWVzIHdoZXJlIHRoZSBh ZHZpY2Ugc3RyaW5nIHdhcyBuZXZlciBzZXQuICovCisJCWlmIChlbnRyeS0+YWR2aWNlX3N0cmlu ZyA9PSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdGFzaF9pZCAh PSAwKQorCQl7CisJCQkvKgorCQkJICogV2UncmUgb25seSBkdW1waW5nIGRhdGEgZm9yIG9uZSBw YXJ0aWN1bGFyIHN0YXNoLCBzbyBza2lwCisJCQkgKiBlbnRyaWVzIGZvciBhbnkgb3RoZXIgc3Rh c2ggYW5kIHVzZSB0aGUgc3Rhc2ggbmFtZSBzcGVjaWZpZWQgYnkKKwkJCSAqIHRoZSB1c2VyLgor CQkJICovCisJCQlpZiAoc3Rhc2hfaWQgIT0gZW50cnktPmtleS5wZ3NhX3N0YXNoX2lkKQorCQkJ CWNvbnRpbnVlOworCQkJdGhpc19zdGFzaF9uYW1lID0gc3Rhc2hfbmFtZTsKKwkJfQorCQllbHNl CisJCXsKKwkJCXBnc2Ffc3Rhc2hfbmFtZSAqbjsKKworCQkJLyoKKwkJCSAqIFdlJ3JlIGR1bXBp bmcgZGF0YSBmb3IgYWxsIHN0YXNoZXMsIHNvIGxvb2sgdXAgdGhlIGNvcnJlY3QgbmFtZQorCQkJ ICogdG8gdXNlIGluIHRoZSBoYXNoIHRhYmxlLiBJZiBub3RoaW5nIGlzIGZvdW5kLCB3aGljaCBp cworCQkJICogcG9zc2libGUgZHVlIHRvIHJhY2UgY29uZGl0aW9ucywgbWFrZSB1cCBhIHN0cmlu ZyB0byB1c2UuCisJCQkgKi8KKwkJCW4gPSBwZ3NhX3N0YXNoX25hbWVfdGFibGVfbG9va3VwKG5o YXNoLCBlbnRyeS0+a2V5LnBnc2Ffc3Rhc2hfaWQpOworCQkJaWYgKG4gIT0gTlVMTCkKKwkJCQl0 aGlzX3N0YXNoX25hbWUgPSBuLT5uYW1lOworCQkJZWxzZQorCQkJCXRoaXNfc3Rhc2hfbmFtZSA9 IHBzcHJpbnRmKCI8c3Rhc2ggJSIgUFJJdTY0ICI+IiwKKwkJCQkJCQkJCQkgICBlbnRyeS0+a2V5 LnBnc2Ffc3Rhc2hfaWQpOworCQl9CisKKwkJLyogV29yayBvdXQgdHVwbGUgdmFsdWVzLiAqLwor CQl2YWx1ZXNbMF0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHRoaXNfc3Rhc2hfbmFtZSk7CisJCW51 bGxzWzBdID0gZmFsc2U7CisJCXZhbHVlc1sxXSA9IEludDY0R2V0RGF0dW0oZW50cnktPmtleS5x dWVyeUlkKTsKKwkJbnVsbHNbMV0gPSBmYWxzZTsKKwkJYWR2aWNlX3N0cmluZyA9IGRzYV9nZXRf YWRkcmVzcyhwZ3NhX2RzYV9hcmVhLCBlbnRyeS0+YWR2aWNlX3N0cmluZyk7CisJCXZhbHVlc1sy XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0cmluZyk7CisJCW51bGxzWzJdID0gZmFs c2U7CisKKwkJLyogRW1pdCB0aGUgdHVwbGUuICovCisJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJz aW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsIHZhbHVlcywKKwkJCQkJCQkgbnVsbHMp OworCX0KKwlkc2hhc2hfc2VxX3Rlcm0oJml0ZXJhdG9yKTsKKworCXJldHVybiAoRGF0dW0pIDA7 Cit9CisKKy8qCisgKiBTUUwtY2FsbGFibGUgZnVuY3Rpb24gdG8gdXBkYXRlIGFuIGFkdmljZSBz dGFzaCBlbnRyeSBmb3IgYSBwYXJ0aWN1bGFyCisgKiBxdWVyeSBJRAorICoKKyAqIElmIHRoZSBz ZWNvbmQgYXJndW1lbnQgaXMgTlVMTCwgd2UgZGVsZXRlIGFueSBleGlzdGluZyBhZHZpY2Ugc3Rh c2gKKyAqIGVudHJ5OyBvdGhlcndpc2UsIHdlIGVpdGhlciBjcmVhdGUgYW4gZW50cnkgb3IgdXBk YXRlIGl0IHdpdGggdGhlIG5ldworICogYWR2aWNlIHN0cmluZy4KKyAqLworRGF0dW0KK3BnX3Nl dF9zdGFzaGVkX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJICAgKnN0YXNoX25h bWU7CisJaW50NjQJCXF1ZXJ5SWQ7CisKKwlpZiAoUEdfQVJHSVNOVUxMKDApIHx8IFBHX0FSR0lT TlVMTCgxKSkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKworCS8qIEdldCBhbmQgY2hlY2sgYWR2aWNl IHN0YXNoIG5hbWUuICovCisJc3Rhc2hfbmFtZSA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdf VEVYVF9QUCgwKSk7CisJcGdzYV9jaGVja19zdGFzaF9uYW1lKHN0YXNoX25hbWUpOworCisJLyoK KwkgKiBHZXQgYW5kIGNoZWNrIHF1ZXJ5IElELgorCSAqCisJICogcXVlcnlJRCAwIG1lYW5zIG5v IHF1ZXJ5IElEIHdhcyBjb21wdXRlZCwgc28gcmVqZWN0IHRoYXQuCisJICovCisJcXVlcnlJZCA9 IFBHX0dFVEFSR19JTlQ2NCgxKTsKKwlpZiAocXVlcnlJZCA9PSAwKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJy bXNnKCJjYW5ub3Qgc2V0IGFkdmljZSBzdHJpbmcgZm9yIHF1ZXJ5IElEIDAiKSk7CisKKwkvKiBB dHRhY2ggdG8gZHluYW1pYyBzaGFyZWQgbWVtb3J5IGlmIG5vdCBhbHJlYWR5IGRvbmUuICovCisJ aWYgKHVubGlrZWx5KHBnc2FfZW50cnlfZHNoYXNoID09IE5VTEwpKQorCQlwZ3NhX2F0dGFjaCgp OworCisJLyogTm93IGNhbGwgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHRvIGRvIHRoZSByZWFs IHdvcmsuICovCisJaWYgKFBHX0FSR0lTTlVMTCgyKSkKKwkJcGdzYV9jbGVhcl9hZHZpY2Vfc3Ry aW5nKHN0YXNoX25hbWUsIHF1ZXJ5SWQpOworCWVsc2UKKwl7CisJCWNoYXIJICAgKmFkdmljZV9z dHJpbmcgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMikpOworCisJCXBnc2Ff c2V0X2FkdmljZV9zdHJpbmcoc3Rhc2hfbmFtZSwgcXVlcnlJZCwgYWR2aWNlX3N0cmluZyk7CisJ fQorCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIEdldCB0aGUgYWR2aWNlIHN0cmlu ZyB0aGF0IGhhcyBiZWVuIGNvbmZpZ3VyZWQgZm9yIHRoaXMgcXVlcnksIGlmIGFueSwKKyAqIGFu ZCByZXR1cm4gaXQuIE90aGVyd2lzZSwgcmV0dXJuIE5VTEwuCisgKi8KK3N0YXRpYyBjaGFyICoK K3Bnc2FfYWR2aXNvcihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkgY29u c3QgY2hhciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCSBFeHBsYWluU3Rh dGUgKmVzKQoreworCXBnc2FfZW50cnlfa2V5IGtleTsKKwlwZ3NhX2VudHJ5ICplbnRyeTsKKwlj aGFyCSAgICphZHZpY2Vfc3RyaW5nOworCXVpbnQ2NAkJc3Rhc2hfaWQ7CisKKwkvKgorCSAqIEV4 aXQgcXVpY2tseSBpZiB0aGUgc3Rhc2ggbmFtZSBpcyBlbXB0eSBvciB0aGVyZSdzIG5vIHF1ZXJ5 IElELgorCSAqLworCWlmIChwZ19zdGFzaF9hZHZpY2Vfc3Rhc2hfbmFtZVswXSA9PSAnXDAnIHx8 IHBhcnNlLT5xdWVyeUlkID09IDApCisJCXJldHVybiBOVUxMOworCisJLyogQXR0YWNoIHRvIGR5 bmFtaWMgc2hhcmVkIG1lbW9yeSBpZiBub3QgYWxyZWFkeSBkb25lLiAqLworCWlmICh1bmxpa2Vs eShwZ3NhX2VudHJ5X2RzaGFzaCA9PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKworCS8qCisJ ICogVHJhbnNsYXRlIHBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lIHRvIGFuIGludGVnZXIgSUQu CisJICoKKwkgKiBwZ3NhX2NoZWNrX3N0YXNoX25hbWVfZ3VjKCkgaGFzIGFscmVhZHkgdmFsaWRh dGVkIHRoZSBhZHZpY2Ugc3Rhc2gKKwkgKiBuYW1lLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNhbGwg cGdzYV9jaGVja19zdGFzaF9uYW1lKCkgaGVyZS4KKwkgKi8KKwlzdGFzaF9pZCA9IHBnc2FfbG9v a3VwX3N0YXNoX2lkKHBnX3N0YXNoX2FkdmljZV9zdGFzaF9uYW1lKTsKKwlpZiAoc3Rhc2hfaWQg PT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIExvb2sgdXAgdGhlIGFkdmljZSBzdHJp bmcgZm9yIHRoZSBnaXZlbiBzdGFzaCBJRCArIHF1ZXJ5IElELgorCSAqCisJICogSWYgd2UgZmlu ZCBhbiBhZHZpY2Ugc3RyaW5nLCB3ZSBjb3B5IGl0IGludG8gdGhlIGN1cnJlbnQgbWVtb3J5CisJ ICogY29udGV4dCwgcHJlc3VtYWJseSBzaG9ydC1saXZlZCwgc28gdGhhdCB3ZSBjYW4gcmVsZWFz ZSB0aGUgbG9jayBvbiB0aGUKKwkgKiBkc2hhc2ggZW50cnkuIHBnX3BsYW5fYWR2aWNlIG9ubHkg bmVlZHMgdGhlIHZhbHVlIHRvIHJlbWFpbiBhbGxvY2F0ZWQKKwkgKiBsb25nIGVub3VnaCBmb3Ig aXQgdG8gYmUgcGFyc2VkLCBzbyB0aGlzIHNob3VsZCBiZSBnb29kIGVub3VnaC4KKwkgKi8KKwlt ZW1zZXQoJmtleSwgMCwgc2l6ZW9mKHBnc2FfZW50cnlfa2V5KSk7CisJa2V5LnBnc2Ffc3Rhc2hf aWQgPSBzdGFzaF9pZDsKKwlrZXkucXVlcnlJZCA9IHBhcnNlLT5xdWVyeUlkOworCWVudHJ5ID0g ZHNoYXNoX2ZpbmQocGdzYV9lbnRyeV9kc2hhc2gsICZrZXksIHRydWUpOworCWlmIChlbnRyeSA9 PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoZW50cnktPmFkdmljZV9zdHJpbmcgPT0gSW52 YWxpZERzYVBvaW50ZXIpCisJCWFkdmljZV9zdHJpbmcgPSBOVUxMOworCWVsc2UKKwkJYWR2aWNl X3N0cmluZyA9IHBzdHJkdXAoZHNhX2dldF9hZGRyZXNzKHBnc2FfZHNhX2FyZWEsCisJCQkJCQkJ CQkJCQllbnRyeS0+YWR2aWNlX3N0cmluZykpOworCWRzaGFzaF9yZWxlYXNlX2xvY2socGdzYV9l bnRyeV9kc2hhc2gsIGVudHJ5KTsKKworCS8qIElmIHdlIGZvdW5kIGFuIGFkdmljZSBzdHJpbmcs IGVtaXQgYSBkZWJ1ZyBtZXNzYWdlLiAqLworCWlmIChhZHZpY2Vfc3RyaW5nICE9IE5VTEwpCisJ CWVsb2coREVCVUcyLCAic3VwcGx5aW5nIGF1dG9tYXRpYyBhZHZpY2UgZm9yIHN0YXNoIFwiJXNc IiwgcXVlcnkgSUQgJSIgUFJJZDY0ICI6ICVzIiwKKwkJCSBwZ19zdGFzaF9hZHZpY2Vfc3Rhc2hf bmFtZSwga2V5LnF1ZXJ5SWQsIGFkdmljZV9zdHJpbmcpOworCisJcmV0dXJuIGFkdmljZV9zdHJp bmc7Cit9CisKKy8qCisgKiBBdHRhY2ggdG8gdmFyaW91cyBzdHJ1Y3R1cmVzIGluIGR5bmFtaWMg c2hhcmVkIG1lbW9yeS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHJl c2lsaWVudCBhZ2FpbnN0IGVycm9ycy4gVGhhdCBpcywgaWYgaXQKKyAqIGZhaWxzIHBhcnR3YXkg dGhyb3VnaCwgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNhbGwgaXQgYWdhaW4sIHJlcGVhdCBu bworICogd29yayBhbHJlYWR5IGNvbXBsZXRlZCwgYW5kIHBvdGVudGlhbGx5IHN1Y2NlZWQgb3Ig YXQgbGVhc3QgZ2V0IGZ1cnRoZXIgaWYKKyAqIHdoYXRldmVyIGNhdXNlZCB0aGUgcHJldmlvdXMg ZmFpbHVyZSBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3NhX2F0dGFj aCh2b2lkKQoreworCWJvb2wJCWZvdW5kOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwor CS8qCisJICogQ3JlYXRlIGEgbWVtb3J5IGNvbnRleHQgdG8gbWFrZSBzdXJlIHRoYXQgYW55IGNv bnRyb2wgc3RydWN0dXJlcworCSAqIGFsbG9jYXRlZCBpbiBsb2NhbCBtZW1vcnkgYXJlIHN1ZmZp Y2llbnRseSBwZXJzaXN0ZW50LgorCSAqLworCWlmIChwZ19zdGFzaF9hZHZpY2VfbWN4dCA9PSBO VUxMKQorCQlwZ19zdGFzaF9hZHZpY2VfbWN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BN ZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJCSAicGdfc3Rhc2hfYWR2aWNlIiwKKwkJCQkJCQkJ CQkJCQkgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhwZ19zdGFzaF9hZHZpY2VfbWN4dCk7CisKKwkvKiBBdHRhY2ggdG8gdGhlIGZp eGVkLXNpemUgc3RhdGUgb2JqZWN0IGlmIG5vdCBhbHJlYWR5IGRvbmUuICovCisJaWYgKHBnc2Ff c3RhdGUgPT0gTlVMTCkKKwkJcGdzYV9zdGF0ZSA9IEdldE5hbWVkRFNNU2VnbWVudCgicGdfc3Rh c2hfYWR2aWNlIiwKKwkJCQkJCQkJCQlzaXplb2YocGdzYV9zaGFyZWRfc3RhdGUpLAorCQkJCQkJ CQkJCXBnc2FfaW5pdF9zaGFyZWRfc3RhdGUsCisJCQkJCQkJCQkJJmZvdW5kLCBOVUxMKTsKKwor CS8qIEF0dGFjaCB0byB0aGUgRFNBIGFyZWEgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAo cGdzYV9kc2FfYXJlYSA9PSBOVUxMKQorCXsKKwkJZHNhX2hhbmRsZQlhcmVhX2hhbmRsZTsKKwor CQlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCQlhcmVh X2hhbmRsZSA9IHBnc2Ffc3RhdGUtPmFyZWE7CisJCWlmIChhcmVhX2hhbmRsZSA9PSBEU0FfSEFO RExFX0lOVkFMSUQpCisJCXsKKwkJCXBnc2FfZHNhX2FyZWEgPSBkc2FfY3JlYXRlKHBnc2Ffc3Rh dGUtPmRzYV90cmFuY2hlKTsKKwkJCWRzYV9waW4ocGdzYV9kc2FfYXJlYSk7CisJCQlwZ3NhX3N0 YXRlLT5hcmVhID0gZHNhX2dldF9oYW5kbGUocGdzYV9kc2FfYXJlYSk7CisJCQlMV0xvY2tSZWxl YXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxXTG9ja1JlbGVh c2UoJnBnc2Ffc3RhdGUtPmxvY2spOworCQkJcGdzYV9kc2FfYXJlYSA9IGRzYV9hdHRhY2goYXJl YV9oYW5kbGUpOworCQl9CisJCWRzYV9waW5fbWFwcGluZyhwZ3NhX2RzYV9hcmVhKTsKKwl9CisK KwkvKiBBdHRhY2ggdG8gdGhlIHN0YXNoX25hbWUtPnN0YXNoX2lkIGhhc2ggdGFibGUgaWYgbm90 IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAocGdzYV9zdGFzaF9kc2hhc2ggPT0gTlVMTCkKKwl7CisJ CWRzaGFzaF90YWJsZV9oYW5kbGUgc3Rhc2hfaGFuZGxlOworCisJCUxXTG9ja0FjcXVpcmUoJnBn c2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCXBnc2Ffc3Rhc2hfZHNoYXNoX3BhcmFt ZXRlcnMudHJhbmNoZV9pZCA9IHBnc2Ffc3RhdGUtPnN0YXNoX3RyYW5jaGU7CisJCXN0YXNoX2hh bmRsZSA9IHBnc2Ffc3RhdGUtPnN0YXNoX2hhc2g7CisJCWlmIChzdGFzaF9oYW5kbGUgPT0gRFNI QVNIX0hBTkRMRV9JTlZBTElEKQorCQl7CisJCQlwZ3NhX3N0YXNoX2RzaGFzaCA9IGRzaGFzaF9j cmVhdGUocGdzYV9kc2FfYXJlYSwKKwkJCQkJCQkJCQkJICAmcGdzYV9zdGFzaF9kc2hhc2hfcGFy YW1ldGVycywKKwkJCQkJCQkJCQkJICBOVUxMKTsKKwkJCXBnc2Ffc3RhdGUtPnN0YXNoX2hhc2gg PQorCQkJCWRzaGFzaF9nZXRfaGFzaF90YWJsZV9oYW5kbGUocGdzYV9zdGFzaF9kc2hhc2gpOwor CQkJTFdMb2NrUmVsZWFzZSgmcGdzYV9zdGF0ZS0+bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJ CQlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwkJCXBnc2Ffc3Rhc2hfZHNoYXNo ID0gZHNoYXNoX2F0dGFjaChwZ3NhX2RzYV9hcmVhLAorCQkJCQkJCQkJCQkgICZwZ3NhX3N0YXNo X2RzaGFzaF9wYXJhbWV0ZXJzLAorCQkJCQkJCQkJCQkgIHN0YXNoX2hhbmRsZSwgTlVMTCk7CisJ CX0KKwl9CisKKwkvKiBBdHRhY2ggdG8gdGhlIGVudHJ5IGhhc2ggdGFibGUgaWYgbm90IGFscmVh ZHkgZG9uZS4gKi8KKwlpZiAocGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkKKwl7CisJCWRzaGFz aF90YWJsZV9oYW5kbGUgZW50cnlfaGFuZGxlOworCisJCUxXTG9ja0FjcXVpcmUoJnBnc2Ffc3Rh dGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCXBnc2FfZW50cnlfZHNoYXNoX3BhcmFtZXRlcnMu dHJhbmNoZV9pZCA9IHBnc2Ffc3RhdGUtPmVudHJ5X3RyYW5jaGU7CisJCWVudHJ5X2hhbmRsZSA9 IHBnc2Ffc3RhdGUtPmVudHJ5X2hhc2g7CisJCWlmIChlbnRyeV9oYW5kbGUgPT0gRFNIQVNIX0hB TkRMRV9JTlZBTElEKQorCQl7CisJCQlwZ3NhX2VudHJ5X2RzaGFzaCA9IGRzaGFzaF9jcmVhdGUo cGdzYV9kc2FfYXJlYSwKKwkJCQkJCQkJCQkJICAmcGdzYV9lbnRyeV9kc2hhc2hfcGFyYW1ldGVy cywKKwkJCQkJCQkJCQkJICBOVUxMKTsKKwkJCXBnc2Ffc3RhdGUtPmVudHJ5X2hhc2ggPQorCQkJ CWRzaGFzaF9nZXRfaGFzaF90YWJsZV9oYW5kbGUocGdzYV9lbnRyeV9kc2hhc2gpOworCQkJTFdM b2NrUmVsZWFzZSgmcGdzYV9zdGF0ZS0+bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xv Y2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwkJCXBnc2FfZW50cnlfZHNoYXNoID0gZHNo YXNoX2F0dGFjaChwZ3NhX2RzYV9hcmVhLAorCQkJCQkJCQkJCQkgICZwZ3NhX2VudHJ5X2RzaGFz aF9wYXJhbWV0ZXJzLAorCQkJCQkJCQkJCQkgIGVudHJ5X2hhbmRsZSwgTlVMTCk7CisJCX0KKwl9 CisKKwkvKiBSZXN0b3JlIHByZXZpb3VzIG1lbW9yeSBjb250ZXh0LiAqLworCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYW4gYWR2 aWNlIHN0YXNoIG5hbWUgaXMgbGVnYWwsIGFuZCBzaWduYWwgYW4gZXJyb3IgaWYgbm90LgorICoK KyAqIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggcGdzYV9jaGVja19zdGFzaF9uYW1lX2d1YywgYmVs b3cuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3NhX2NoZWNrX3N0YXNoX25hbWUoY2hhciAqc3Rhc2hf bmFtZSkKK3sKKwkvKiBSZWplY3QgZW1wdHkgYWR2aWNlIHN0YXNoIG5hbWUuICovCisJaWYgKHN0 YXNoX25hbWVbMF0gPT0gJ1wwJykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiYWR2aWNlIHN0YXNoIG5h bWUgbWF5IG5vdCBiZSB6ZXJvIGxlbmd0aCIpKTsKKworCS8qIFJlamVjdCBvdmVybG9uZyBhZHZp Y2Ugc3Rhc2ggbmFtZXMuICovCisJaWYgKHN0cmxlbihzdGFzaF9uYW1lKSArIDEgPiBOQU1FREFU QUxFTikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiYWR2aWNlIHN0YXNoIG5hbWVzIG1heSBub3QgYmUg bG9uZ2VyIHRoYW4gJWQgYnl0ZXMiLAorCQkJCQkgICBOQU1FREFUQUxFTiAtIDEpKTsKKworCS8q CisJICogUmVqZWN0IG5vbi1BU0NJSSBhZHZpY2Ugc3Rhc2ggbmFtZXMsIHNpbmNlIGFkdmljZSBz dGFzaGVzIGFyZSB2aXNpYmxlCisJICogYWNyb3NzIGFsbCBkYXRhYmFzZXMgYW5kIHRoZSBlbmNv ZGluZ3Mgb2YgdGhvc2UgZGF0YWJhc2VzIG1pZ2h0IGRpZmZlci4KKwkgKi8KKwlpZiAoIXBnX2lz X2FzY2lpKHN0YXNoX25hbWUpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2ggbmFt ZSBtdXN0IG5vdCBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIikpOworfQorCisvKgorICog QXMgYWJvdmUsIGJ1dCBmb3IgdGhlIEdVQyBjaGVja19ob29rLiBXZSBhbGxvdyB0aGUgZW1wdHkg c3RyaW5nIGhlcmUsCisgKiB0aG91Z2gsIGFzIGVxdWl2YWxlbnQgdG8gZGlzYWJsaW5nIHRoZSBm ZWF0dXJlLgorICovCitzdGF0aWMgYm9vbAorcGdzYV9jaGVja19zdGFzaF9uYW1lX2d1YyhjaGFy ICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCit7CisJY2hhcgkgICAq c3Rhc2hfbmFtZSA9ICpuZXd2YWw7CisKKwkvKiBSZWplY3Qgb3ZlcmxvbmcgYWR2aWNlIHN0YXNo IG5hbWVzLiAqLworCWlmIChzdHJsZW4oc3Rhc2hfbmFtZSkgKyAxID4gTkFNRURBVEFMRU4pCisJ eworCQlHVUNfY2hlY2tfZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKTsK KwkJR1VDX2NoZWNrX2VycmRldGFpbCgiYWR2aWNlIHN0YXNoIG5hbWVzIG1heSBub3QgYmUgbG9u Z2VyIHRoYW4gJWQgYnl0ZXMiLAorCQkJCQkJCU5BTUVEQVRBTEVOIC0gMSk7CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwkvKgorCSAqIFJlamVjdCBub24tQVNDSUkgYWR2aWNlIHN0YXNoIG5hbWVz LCBzaW5jZSBhZHZpY2Ugc3Rhc2hlcyBhcmUgdmlzaWJsZQorCSAqIGFjcm9zcyBhbGwgZGF0YWJh c2VzIGFuZCB0aGUgZW5jb2RpbmdzIG9mIHRob3NlIGRhdGFiYXNlcyBtaWdodCBkaWZmZXIuCisJ ICovCisJaWYgKCFwZ19pc19hc2NpaShzdGFzaF9uYW1lKSkKKwl7CisJCUdVQ19jaGVja19lcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpOworCQlHVUNfY2hlY2tfZXJyZGV0 YWlsKCJhZHZpY2Ugc3Rhc2ggbmFtZSBtdXN0IG5vdCBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0 ZXJzIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAq IENyZWF0ZSBhbiBhZHZpY2Ugc3Rhc2guCisgKi8KK3N0YXRpYyB2b2lkCitwZ3NhX2NyZWF0ZV9z dGFzaChjaGFyICpzdGFzaF9uYW1lKQoreworCXBnc2Ffc3Rhc2ggKnN0YXNoOworCWJvb2wJCWZv dW5kOworCisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKCZwZ3NhX3N0YXRlLT5sb2NrLCBM V19FWENMVVNJVkUpKTsKKworCS8qIENyZWF0ZSBhIHN0YXNoIHdpdGggdGhpcyBuYW1lLCB1bmxl c3Mgb25lIGFscmVhZHkgZXhpc3RzLiAqLworCXN0YXNoID0gZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0 KHBnc2Ffc3Rhc2hfZHNoYXNoLCBzdGFzaF9uYW1lLCAmZm91bmQpOworCWlmIChmb3VuZCkKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCWVycm1zZygiYWR2aWNlIHN0YXNoIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIsIHN0 YXNoX25hbWUpKTsKKwlzdGFzaC0+cGdzYV9zdGFzaF9pZCA9IHBnc2Ffc3RhdGUtPm5leHRfc3Rh c2hfaWQrKzsKKwlkc2hhc2hfcmVsZWFzZV9sb2NrKHBnc2Ffc3Rhc2hfZHNoYXNoLCBzdGFzaCk7 Cit9CisKKy8qCisgKiBSZW1vdmUgYW55IHN0b3JlZCBhZHZpY2Ugc3RyaW5nIGZvciB0aGUgZ2l2 ZW4gYWR2aWNlIHN0YXNoIGFuZCBxdWVyeSBJRC4KKyAqLworc3RhdGljIHZvaWQKK3Bnc2FfY2xl YXJfYWR2aWNlX3N0cmluZyhjaGFyICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkKQoreworCXBn c2FfZW50cnkgKmVudHJ5OworCXBnc2FfZW50cnlfa2V5IGtleTsKKwl1aW50NjQJCXN0YXNoX2lk OworCWRzYV9wb2ludGVyIG9sZF9kcDsKKworCS8qIFRyYW5zbGF0ZSB0aGUgc3Rhc2ggbmFtZSB0 byBhbiBpbnRlZ2VyIElELiAqLworCWlmICgoc3Rhc2hfaWQgPSBwZ3NhX2xvb2t1cF9zdGFzaF9p ZChzdGFzaF9uYW1lKSkgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiYWR2aWNlIHN0YXNoIFwi JXNcIiBkb2VzIG5vdCBleGlzdCIsIHN0YXNoX25hbWUpKTsKKworCS8qCisJICogTG9vayBmb3Ig YW4gZXhpc3RpbmcgZW50cnksIGFuZCBmcmVlIGl0LiBCdXQsIGJlIHN1cmUgdG8gc2F2ZSB0aGUK KwkgKiBwb2ludGVyIHRvIHRoZSBhc3NvY2lhdGVkIGFkdmljZSBzdHJpbmcsIGlmIGFueS4KKwkg Ki8KKwltZW1zZXQoJmtleSwgMCwgc2l6ZW9mKHBnc2FfZW50cnlfa2V5KSk7CisJa2V5LnBnc2Ff c3Rhc2hfaWQgPSBzdGFzaF9pZDsKKwlrZXkucXVlcnlJZCA9IHF1ZXJ5SWQ7CisJZW50cnkgPSBk c2hhc2hfZmluZChwZ3NhX2VudHJ5X2RzaGFzaCwgJmtleSwgdHJ1ZSk7CisJaWYgKGVudHJ5ID09 IE5VTEwpCisJCW9sZF9kcCA9IEludmFsaWREc2FQb2ludGVyOworCWVsc2UKKwl7CisJCW9sZF9k cCA9IGVudHJ5LT5hZHZpY2Vfc3RyaW5nOworCQlkc2hhc2hfZGVsZXRlX2VudHJ5KHBnc2FfZW50 cnlfZHNoYXNoLCBlbnRyeSk7CisJfQorCisJLyogTm93IHdlIGZyZWUgdGhlIGFkdmljZSBzdHJp bmcgYXMgd2VsbCwgaWYgdGhlcmUgd2FzIG9uZS4gKi8KKwlpZiAob2xkX2RwICE9IEludmFsaWRE c2FQb2ludGVyKQorCQlkc2FfZnJlZShwZ3NhX2RzYV9hcmVhLCBvbGRfZHApOworfQorCisvKgor ICogRHJvcCBhbiBhZHZpY2Ugc3Rhc2guCisgKi8KK3N0YXRpYyB2b2lkCitwZ3NhX2Ryb3Bfc3Rh c2goY2hhciAqc3Rhc2hfbmFtZSkKK3sKKwlwZ3NhX2VudHJ5ICplbnRyeTsKKwlwZ3NhX3N0YXNo ICpzdGFzaDsKKwlkc2hhc2hfc2VxX3N0YXR1cyBpdGVyYXRvcjsKKwl1aW50NjQJCXN0YXNoX2lk OworCisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKCZwZ3NhX3N0YXRlLT5sb2NrLCBMV19F WENMVVNJVkUpKTsKKworCS8qIFJlbW92ZSB0aGUgZW50cnkgZm9yIHRoaXMgYWR2aWNlIHN0YXNo LiAqLworCXN0YXNoID0gZHNoYXNoX2ZpbmQocGdzYV9zdGFzaF9kc2hhc2gsIHN0YXNoX25hbWUs IHRydWUpOworCWlmIChzdGFzaCA9PSBOVUxMKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJybXNnKCJhZHZpY2Ug c3Rhc2ggXCIlc1wiIGRvZXMgbm90IGV4aXN0Iiwgc3Rhc2hfbmFtZSkpOworCXN0YXNoX2lkID0g c3Rhc2gtPnBnc2Ffc3Rhc2hfaWQ7CisJZHNoYXNoX2RlbGV0ZV9lbnRyeShwZ3NhX3N0YXNoX2Rz aGFzaCwgc3Rhc2gpOworCisJLyoKKwkgKiBJdCBzaG91bGQgbm93IGJlIGltcG9zc2libGUgZm9y IGFueSBuZXcgZW50cmllcyB0byBiZSBhZGRlZCBmb3IgdGhlCisJICogYWR2aWNlIHN0YXNoIHdl IGp1c3QgZGVsZXRlZC4gR28gdGhyb3VnaCBhbmQgY2xlYW4gb3V0IGFsbCB0aGUgZXhpc3RpbmcK KwkgKiBvbmVzLgorCSAqLworCWRzaGFzaF9zZXFfaW5pdCgmaXRlcmF0b3IsIHBnc2FfZW50cnlf ZHNoYXNoLCB0cnVlKTsKKwl3aGlsZSAoKGVudHJ5ID0gZHNoYXNoX3NlcV9uZXh0KCZpdGVyYXRv cikpICE9IE5VTEwpCisJeworCQlpZiAoc3Rhc2hfaWQgPT0gZW50cnktPmtleS5wZ3NhX3N0YXNo X2lkKQorCQl7CisJCQlpZiAoZW50cnktPmFkdmljZV9zdHJpbmcgIT0gSW52YWxpZERzYVBvaW50 ZXIpCisJCQkJZHNhX2ZyZWUocGdzYV9kc2FfYXJlYSwgZW50cnktPmFkdmljZV9zdHJpbmcpOwor CQkJZHNoYXNoX2RlbGV0ZV9jdXJyZW50KCZpdGVyYXRvcik7CisJCX0KKwl9CisJZHNoYXNoX3Nl cV90ZXJtKCZpdGVyYXRvcik7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHNoYXJlZCBzdGF0ZSB3 aGVuIGZpcnN0IGNyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3NhX2luaXRfc2hhcmVkX3N0 YXRlKHZvaWQgKnB0ciwgdm9pZCAqYXJnKQoreworCXBnc2Ffc2hhcmVkX3N0YXRlICpzdGF0ZSA9 IChwZ3NhX3NoYXJlZF9zdGF0ZSAqKSBwdHI7CisKKwlMV0xvY2tJbml0aWFsaXplKCZzdGF0ZS0+ bG9jaywKKwkJCQkJIExXTG9ja05ld1RyYW5jaGVJZCgicGdfc3Rhc2hfYWR2aWNlX2xvY2siKSk7 CisJc3RhdGUtPmRzYV90cmFuY2hlID0gTFdMb2NrTmV3VHJhbmNoZUlkKCJwZ19zdGFzaF9hZHZp Y2VfZHNhIik7CisJc3RhdGUtPnN0YXNoX3RyYW5jaGUgPSBMV0xvY2tOZXdUcmFuY2hlSWQoInBn X3N0YXNoX2FkdmljZV9zdGFzaCIpOworCXN0YXRlLT5lbnRyeV90cmFuY2hlID0gTFdMb2NrTmV3 VHJhbmNoZUlkKCJwZ19zdGFzaF9hZHZpY2VfZW50cnkiKTsKKwlzdGF0ZS0+bmV4dF9zdGFzaF9p ZCA9IFVJTlQ2NENPTlNUKDEpOworCXN0YXRlLT5hcmVhID0gRFNBX0hBTkRMRV9JTlZBTElEOwor CXN0YXRlLT5zdGFzaF9oYXNoID0gRFNIQVNIX0hBTkRMRV9JTlZBTElEOworCXN0YXRlLT5lbnRy eV9oYXNoID0gRFNIQVNIX0hBTkRMRV9JTlZBTElEOworfQorCisvKgorICogTG9vayB1cCB0aGUg aW50ZWdlciBJRCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBnaXZlbiBzdGFzaCBuYW1lLgorICoK KyAqIFJldHVybnMgMCBpZiBubyBzdWNoIHN0YXNoIGV4aXN0cy4KKyAqLworc3RhdGljIHVpbnQ2 NAorcGdzYV9sb29rdXBfc3Rhc2hfaWQoY2hhciAqc3Rhc2hfbmFtZSkKK3sKKwlwZ3NhX3N0YXNo ICpzdGFzaDsKKwl1aW50NjQJCXN0YXNoX2lkOworCisJLyogU2VhcmNoIHRoZSBzaGFyZWQgaGFz aCB0YWJsZS4gKi8KKwlzdGFzaCA9IGRzaGFzaF9maW5kKHBnc2Ffc3Rhc2hfZHNoYXNoLCBzdGFz aF9uYW1lLCBmYWxzZSk7CisJaWYgKHN0YXNoID09IE5VTEwpCisJCXJldHVybiAwOworCXN0YXNo X2lkID0gc3Rhc2gtPnBnc2Ffc3Rhc2hfaWQ7CisJZHNoYXNoX3JlbGVhc2VfbG9jayhwZ3NhX3N0 YXNoX2RzaGFzaCwgc3Rhc2gpOworCisJcmV0dXJuIHN0YXNoX2lkOworfQorCisvKgorICogU3Rv cmUgYSBuZXcgb3IgdXBkYXRlZCBhZHZpY2Ugc3RyaW5nIGZvciB0aGUgZ2l2ZW4gYWR2aWNlIHN0 YXNoIGFuZCBxdWVyeSBJRC4KKyAqLworc3RhdGljIHZvaWQKK3Bnc2Ffc2V0X2FkdmljZV9zdHJp bmcoY2hhciAqc3Rhc2hfbmFtZSwgaW50NjQgcXVlcnlJZCwgY2hhciAqYWR2aWNlX3N0cmluZykK K3sKKwlwZ3NhX2VudHJ5ICplbnRyeTsKKwlib29sCQlmb3VuZDsKKwlwZ3NhX2VudHJ5X2tleSBr ZXk7CisJdWludDY0CQlzdGFzaF9pZDsKKwlkc2FfcG9pbnRlciBuZXdfZHA7CisJZHNhX3BvaW50 ZXIgb2xkX2RwOworCisJLyogVHJhbnNsYXRlIHRoZSBzdGFzaCBuYW1lIHRvIGFuIGludGVnZXIg SUQuICovCityZXN0YXJ0OgorCWlmICgoc3Rhc2hfaWQgPSBwZ3NhX2xvb2t1cF9zdGFzaF9pZChz dGFzaF9uYW1lKSkgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiYWR2aWNlIHN0YXNoIFwiJXNc IiBkb2VzIG5vdCBleGlzdCIsIHN0YXNoX25hbWUpKTsKKworCS8qIE1ha2Ugc3VyZSB0aGF0IGFu IGVudHJ5IGV4aXN0cy4gKi8KKwltZW1zZXQoJmtleSwgMCwgc2l6ZW9mKHBnc2FfZW50cnlfa2V5 KSk7CisJa2V5LnBnc2Ffc3Rhc2hfaWQgPSBzdGFzaF9pZDsKKwlrZXkucXVlcnlJZCA9IHF1ZXJ5 SWQ7CisJZW50cnkgPSBkc2hhc2hfZmluZF9vcl9pbnNlcnQocGdzYV9lbnRyeV9kc2hhc2gsICZr ZXksICZmb3VuZCk7CisJaWYgKCFmb3VuZCkKKwkJZW50cnktPmFkdmljZV9zdHJpbmcgPSBJbnZh bGlkRHNhUG9pbnRlcjsKKwlkc2hhc2hfcmVsZWFzZV9sb2NrKHBnc2FfZW50cnlfZHNoYXNoLCBl bnRyeSk7CisKKwkvKgorCSAqIENvcHkgdGhlIGFkdmljZSBzdHJpbmcgaW50byBkeW5hbWljIHNo YXJlZCBtZW1vcnkuCisJICoKKwkgKiBJZiB3ZSBmYWlsIGFmdGVyIHRoaXMgcG9pbnQsIHdlJ2xs IGhhdmUgYSBzZXJ2ZXItbGlmZXNwYW4gbWVtb3J5IGxlYWsuCisJICogV2UgYXNzdW1lIHRoYXQs IGhhdmluZyBjcmVhdGVkIHRoZSBlbnRyeSBhYm92ZSwgd2UnbGwgYmUgYWJsZSB0byBmaW5kCisJ ICogaXQgYWdhaW4gd2l0aG91dCBhbiBlcnJvci4KKwkgKi8KKwluZXdfZHAgPSBkc2FfYWxsb2Nh dGUocGdzYV9kc2FfYXJlYSwgc3RybGVuKGFkdmljZV9zdHJpbmcpICsgMSk7CisJc3RyY3B5KGRz YV9nZXRfYWRkcmVzcyhwZ3NhX2RzYV9hcmVhLCBuZXdfZHApLCBhZHZpY2Vfc3RyaW5nKTsKKwor CS8qCisJICogUmVmaW5kIHRoZSBlbnRyeSBhbmQgc3dhcCB0aGUgbmV3IHBvaW50ZXIgaW50byBw bGFjZS4KKwkgKgorCSAqIElmIHRoZSBlbnRyeSBoYXMgYmVlbiBkZWxldGVkIHNpbmNlIHdlIGZv dW5kIG9yIGNyZWF0ZWQgaXQgYWJvdmUsIGZyZWUKKwkgKiBtZW1vcnkgYW5kIHJldHJ5IGZyb20g dGhlIHRvcC4KKwkgKi8KKwllbnRyeSA9IGRzaGFzaF9maW5kKHBnc2FfZW50cnlfZHNoYXNoLCAm a2V5LCB0cnVlKTsKKwlpZiAoZW50cnkgPT0gTlVMTCkKKwl7CisJCWRzYV9mcmVlKHBnc2FfZHNh X2FyZWEsIG5ld19kcCk7CisJCWdvdG8gcmVzdGFydDsKKwl9CisJb2xkX2RwID0gZW50cnktPmFk dmljZV9zdHJpbmc7CisJZW50cnktPmFkdmljZV9zdHJpbmcgPSBuZXdfZHA7CisJZHNoYXNoX3Jl bGVhc2VfbG9jayhwZ3NhX2VudHJ5X2RzaGFzaCwgZW50cnkpOworCisJLyogSWYgd2UgcmVwbGFj ZWQgYW4gb2xkIGFkdmljZSBzdHJpbmcsIGZyZWUgaXQuICovCisJaWYgKG9sZF9kcCAhPSBJbnZh bGlkRHNhUG9pbnRlcikKKwkJZHNhX2ZyZWUocGdzYV9kc2FfYXJlYSwgb2xkX2RwKTsKK30KZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jb250cm9s IGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmNvbnRyb2wKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRhMGZmZjVjODY2Ci0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmNvbnRyb2wK QEAgLTAsMCArMSw1IEBACisjIHBnX3N0YXNoX2FkdmljZSBleHRlbnNpb24KK2NvbW1lbnQgPSAn c3RvcmUgYW5kIGF1dG9tYXRpY2FsbHkgYXBwbHkgcGxhbiBhZHZpY2UnCitkZWZhdWx0X3ZlcnNp b24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvcGdfc3Rhc2hfYWR2aWNlJwor cmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9z cWwvcGdfc3Rhc2hfYWR2aWNlLnNxbCBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3NxbC9wZ19z dGFzaF9hZHZpY2Uuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5h ZWQyZDJhNWE5YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3Nx bC9wZ19zdGFzaF9hZHZpY2Uuc3FsCkBAIC0wLDAgKzEsMTMwIEBACitDUkVBVEUgRVhURU5TSU9O IHBnX3N0YXNoX2FkdmljZTsKK1NFVCBjb21wdXRlX3F1ZXJ5X2lkID0gb247CitTRVQgbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisKKy0tIEhlbHBlcjogZXh0cmFjdCBxdWVy eSBpZGVudGlmaWVyIGZyb20gRVhQTEFJTiBWRVJCT1NFIG91dHB1dC4KK0NSRUFURSBPUiBSRVBM QUNFIEZVTkNUSU9OIGdldF9xdWVyeV9pZChxdWVyeV90ZXh0IHRleHQpIFJFVFVSTlMgYmlnaW50 CitMQU5HVUFHRSBwbHBnc3FsIEFTICQkCitERUNMQVJFCisgICAgbGluZSB0ZXh0OworICAgIHFp ZCBiaWdpbnQ7CitCRUdJTgorICAgIEZPUiBsaW5lIElOIEVYRUNVVEUgJ0VYUExBSU4gKFZFUkJP U0UsIEZPUk1BVCBURVhUKSAnIHx8IHF1ZXJ5X3RleHQKKyAgICBMT09QCisgICAgICAgIElGIGxp bmUgfiAnUXVlcnkgSWRlbnRpZmllcjonIFRIRU4KKyAgICAgICAgICAgIHFpZCA6PSByZWdleHBf cmVwbGFjZShsaW5lLCAnLipRdWVyeSBJZGVudGlmaWVyOlxzKigtP1xkKykuKicsICdcMScpOjpi aWdpbnQ7CisgICAgICAgICAgICBSRVRVUk4gcWlkOworICAgICAgICBFTkQgSUY7CisgICAgRU5E IExPT1A7CisgICAgUkFJU0UgRVhDRVBUSU9OICdRdWVyeSBJZGVudGlmaWVyIG5vdCBmb3VuZCBp biBFWFBMQUlOIG91dHB1dCc7CitFTkQ7CiskJDsKKworQ1JFQVRFIFRBQkxFIGFhX2RpbTEgKGlk IGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZGltMSAoaWQsIGRpbTEsIHZh bDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkg IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgYWFfZGltMTsK KworQ1JFQVRFIFRBQkxFIGFhX2RpbTIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4 dCwgdmFsMiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJU IElOVE8gYWFfZGltMiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0 ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkg ZzsKK1ZBQ1VVTSBBTkFMWVpFIGFhX2RpbTI7CisKK0NSRUFURSBUQUJMRSBhYV9mYWN0ICgKKwlp ZCBpbnQgcHJpbWFyeSBrZXksCisJZGltMV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMg YWFfZGltMSAoaWQpLAorCWRpbTJfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGFhX2Rp bTIgKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5U TyBhYV9mYWN0CisJU0VMRUNUIGcsIChnJTEwMCkrMSwgKGclMTAwKSsxIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgYWFfZmFjdDsKKworLS0gR2V0IHRo ZSBxdWVyeSBpZGVudGlmaWVyLgorU0VMRUNUIGdldF9xdWVyeV9pZCgkJAorU0VMRUNUICogRlJP TSBhYV9mYWN0IGYgTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlM RUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAx IEFORCB2YWwyID0gMTsKKyQkKSBBUyBxaWQgXGdzZXQKKworLS0gQ3JlYXRlIGFuIGFkdmljZSBz dGFzaCBhbmQgcG9pbnQgcGdfc3Rhc2hfYWR2aWNlIGF0IGl0LgorU0VMRUNUIHBnX2NyZWF0ZV9h ZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gnKTsKK1NFVCBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hf bmFtZSA9ICdyZWdyZXNzX3N0YXNoJzsKKworLS0gUnVuIG91ciB0ZXN0IHF1ZXJ5IGZvciB0aGUg Zmlyc3QgdGltZSB3aXRoIG5vIHN0YXNoZWQgYWR2aWNlLgorRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUICogRlJPTSBhYV9mYWN0IGYgTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lk ID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdI RVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gRm9yY2UgYW4gaW5kZXggc2NhbiBvbiBk aW0xCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgOidxaWQn LAorCSdJTkRFWF9TQ0FOKGQxIGFhX2RpbTFfcGtleSknKTsKK0VYUExBSU4gKENPU1RTIE9GRikg U0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFf aWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJ V0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworCistLSBGb3JjZSBhbiBhbHRlcm5hdGl2ZSBq b2luIG9yZGVyCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywg OidxaWQnLAorCSdqb2luX29yZGVyKGYgZDEgZDIpJyk7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNF TEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lk ID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdI RVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gRm9yY2UgYW4gYWx0ZXJuYXRpdmUgam9p biBzdHJhdGVneQorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcs IDoncWlkJywKKwknTkVTVEVEX0xPT1BfUExBSU4oZDEpJyk7CitFWFBMQUlOIChDT1NUUyBPRkYp IFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0x X2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAor CVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gQWRkIGEgdXNlbGVzcyBleHRyYSBl bnRyeSB0byBvdXIgdGVzdCBzdGFzaC4gU2hvdWxkbid0IGNoYW5nZSB0aGUgcmVzdWx0CistLSBm cm9tIHRoZSBwcmV2aW91cyB0ZXN0LgorLS0gKElmIHdlJ3JlIHVubHVja3kgZW5vdWdoIHRoYXQg dGhpcyBldmVyIGZhaWxzIGR1ZSB0byBxdWVyeSBJRCBhY3R1YWxseQorLS0gYmVpbmcgMSwgdGhl biBqdXN0IHB1dCBzb21lIG90aGVyIGNvbnN0YW50IGhlcmUuIFNlZW1zIHVubGlrZWx5LikKK1NF TEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gnLCAxLCAnU0VRX1NDQU4o ZDEpJyk7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVG VCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGlt MiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsK KworLS0gVHJ5IGFuIGVtcHR5IHN0YXNoIHRvIGJlIHN1cmUgaXQgZG9lcyBub3RoaW5nCitTRUxF Q1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCgncmVncmVzc19lbXB0eV9zdGFzaCcpOworU0VUIHBn X3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lID0gJ3JlZ3Jlc3NfZW1wdHlfc3Rhc2gnOworRVhQTEFJ TiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9kaW0x IGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5kaW0y X2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisKKy0tIFRlc3QgdGhh dCB3ZSBjYW4gbGlzdCBlYWNoIHN0YXNoIGluZGl2aWR1YWxseSBhbmQgYWxsIG9mIHRoZW0gdG9n ZXRoZXIsCistLSBidXQgbm90IGEgbm9uZXhpc3RlbnQgc3Rhc2guCitTRUxFQ1QgKiBGUk9NIHBn X2dldF9hZHZpY2Vfc3Rhc2hlcygpIE9SREVSIEJZIHN0YXNoX25hbWU7CitTRUxFQ1Qgc3Rhc2hf bmFtZSwgYWR2aWNlX3N0cmluZworCUZST00gcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cygn cmVncmVzc19zdGFzaCcpIE9SREVSIEJZIHF1ZXJ5X2lkOworU0VMRUNUIHN0YXNoX25hbWUsIGFk dmljZV9zdHJpbmcKKwkgRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKCdyZWdyZXNz X2VtcHR5X3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7CitTRUxFQ1Qgc3Rhc2hfbmFtZSwgYWR2 aWNlX3N0cmluZworCSBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoTlVMTCkgT1JE RVIgQlkgcXVlcnlfaWQ7CitTRUxFQ1Qgc3Rhc2hfbmFtZSwgYWR2aWNlX3N0cmluZworCSBGUk9N IHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoJ25vX3N1Y2hfc3Rhc2gnKSBPUkRFUiBCWSBx dWVyeV9pZDsKKworLS0gVGVzdCB0aGF0IHdlIGNhbiByZW1vdmUgYWR2aWNlLgorU0VMRUNUIHBn X3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDoncWlkJywgbnVsbCk7CitTRVQg cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVncmVzc19zdGFzaCc7CitFWFBMQUlOIChD T1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2RpbTEgZDEg T04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQg PSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X2FkdmljZV9zdGFzaGVzKCkgT1JERVIgQlkgc3Rhc2hfbmFtZTsKK1NFTEVDVCBzdGFzaF9u YW1lLCBhZHZpY2Vfc3RyaW5nCisJRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKCdy ZWdyZXNzX3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7CisKKy0tIENsZWFuIHVwIHN0YXRlIGlu IGR5bmFtaWMgc2hhcmVkIG1lbW9yeS4KK1NFTEVDVCBwZ19kcm9wX2FkdmljZV9zdGFzaCgncmVn cmVzc19zdGFzaCcpOworU0VMRUNUIHBnX2Ryb3BfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX2VtcHR5 X3N0YXNoJyk7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sIGIvZG9jL3Ny Yy9zZ21sL2NvbnRyaWIuc2dtbAppbmRleCAyYWI2ZmFmYmFiMS4uOGYwOWQ3Mjg2OTggMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbnRy aWIuc2dtbApAQCAtMTYwLDYgKzE2MCw3IEBAIENSRUFURSBFWFRFTlNJT04gPHJlcGxhY2VhYmxl PmV4dGVuc2lvbl9uYW1lPC9yZXBsYWNlYWJsZT47CiAgJnBncGxhbmFkdmljZTsKICAmcGdwcmV3 YXJtOwogICZwZ3Jvd2xvY2tzOworICZwZ3N0YXNoYWR2aWNlOwogICZwZ3N0YXRzdGF0ZW1lbnRz OwogICZwZ3N0YXR0dXBsZTsKICAmcGdzdXJnZXJ5OwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L2ZpbGVsaXN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbAppbmRleCA0MDdmZjNh YmZmZS4uOGMxNGJhYjg0ZTkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCkBAIC0xNDQsNiArMTQ0LDcgQEAKIDwh RU5USVRZIG9pZDJuYW1lICAgICAgICBTWVNURU0gIm9pZDJuYW1lLnNnbWwiPgogPCFFTlRJVFkg cGFnZWluc3BlY3QgICAgIFNZU1RFTSAicGFnZWluc3BlY3Quc2dtbCI+CiA8IUVOVElUWSBwYXNz d29yZGNoZWNrICAgU1lTVEVNICJwYXNzd29yZGNoZWNrLnNnbWwiPgorPCFFTlRJVFkgcGdzdGFz aGFkdmljZSAgIFNZU1RFTSAicGdzdGFzaGFkdmljZS5zZ21sIj4KIDwhRU5USVRZIHBnYnVmZmVy Y2FjaGUgICBTWVNURU0gInBnYnVmZmVyY2FjaGUuc2dtbCI+CiA8IUVOVElUWSBwZ2NvbGxlY3Rh ZHZpY2UgU1lTVEVNICJwZ2NvbGxlY3RhZHZpY2Uuc2dtbCI+CiA8IUVOVElUWSBwZ2NyeXB0byAg ICAgICAgU1lTVEVNICJwZ2NyeXB0by5zZ21sIj4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9w Z3N0YXNoYWR2aWNlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5zZ21sCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wODlmYzY2NDQ2ZgotLS0gL2Rldi9u dWxsCisrKyBiL2RvYy9zcmMvc2dtbC9wZ3N0YXNoYWR2aWNlLnNnbWwKQEAgLTAsMCArMSwyMTgg QEAKKzwhLS0gZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbCAtLT4KKworPHNlY3QxIGlk PSJwZ3N0YXNoYWR2aWNlIiB4cmVmbGFiZWw9InBnX3N0YXNoX2FkdmljZSI+CisgPHRpdGxlPnBn X3N0YXNoX2FkdmljZSAmbWRhc2g7IHN0b3JlIGFuZCBhdXRvbWF0aWNhbGx5IGFwcGx5IHBsYW4g YWR2aWNlPC90aXRsZT4KKworIDxpbmRleHRlcm0gem9uZT0icGdzdGFzaGFkdmljZSI+CisgIDxw cmltYXJ5PnBnX3N0YXNoX2FkdmljZTwvcHJpbWFyeT4KKyA8L2luZGV4dGVybT4KKworIDxwYXJh PgorICBUaGUgPGZpbGVuYW1lPnBnX3N0YXNoX2FkdmljZTwvZmlsZW5hbWU+IGV4dGVuc2lvbiBh bGxvd3MgeW91IHRvIHN0YXNoCisgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZSI+cGxhbiBh ZHZpY2U8L2xpbms+IHN0cmluZ3MgaW4gZHluYW1pYworICBzaGFyZWQgbWVtb3J5IHdoZXJlIHRo ZXkgY2FuIGJlIGF1dG9tYXRpY2FsbHkgYXBwbGllZC4gQW4KKyAgPGxpdGVyYWw+YWR2aWNlIHN0 YXNoPC9saXRlcmFsPiBpcyBhIG1hcHBpbmcgZnJvbQorICA8bGluayBsaW5rZW5kPSJndWMtY29t cHV0ZS1xdWVyeS1pZCI+cXVlcnkgaWRlbnRpZmllcnM8L2xpbms+IHRvIHBsYW4gYWR2aWNlCisg IHN0cmluZ3MuIFdoZW5ldmVyIGEgc2Vzc2lvbiBpcyBhc2tlZCB0byBwbGFuIGEgcXVlcnkgd2hv c2UgcXVlcnkgSUQgYXBwZWFycworICBpbiB0aGUgcmVsZXZhbnQgYWR2aWNlIHN0YXNoLCB0aGUg cGxhbiBhZHZpY2Ugc3RyaW5nIGlzIGF1dG9tYXRpY2FsbHkgYXBwbGllZAorICB0byBndWlkZSBw bGFubmluZy4gTm90ZSB0aGF0IGFkdmljZSBzdGFzaGVzIGV4aXN0IHB1cmVseSBpbiBtZW1vcnku IFRoaXMKKyAgbWVhbnMgYm90aCB0aGF0IGl0IGlzIGltcG9ydGFudCB0byBiZSBtaW5kZnVsIG9m IG1lbW9yeSBjb25zdW1wdGlvbiB3aGVuCisgIGRlY2lkaW5nIGhvdyBtdWNoIHBsYW4gYWR2aWNl IHRvIHN0YXNoLCBhbmQgYWxzbyB0aGF0IGFkdmljZSBzdGFzaGVzIG11c3QKKyAgYmUgcmVjcmVh dGVkIGFuZCByZXBvcHVsYXRlZCB3aGVuZXZlciB0aGUgc2VydmVyIGlzIHJlc3RhcnRlZC4KKyA8 L3BhcmE+CisKKyA8cGFyYT4KKyAgSW4gb3JkZXIgdG8gdXNlIHRoaXMgbW9kdWxlLCB5b3Ugd2ls bCBuZWVkIHRvIGV4ZWN1dGUKKyAgPGxpdGVyYWw+Q1JFQVRFIEVYVEVOU0lPTiBwZ19zdGFzaF9h ZHZpY2U8L2xpdGVyYWw+IGluIGF0IGxlYXN0CisgIG9uZSBkYXRhYmFzZSwgc28gdGhhdCB5b3Ug aGF2ZSBhY2Nlc3MgdG8gdGhlIFNRTCBmdW5jdGlvbnMgdG8gbWFuYWdlCisgIGFkdmljZSBzdGFz aGVzLiBZb3Ugd2lsbCBhbHNvIG5lZWQgdGhlIDxsaXRlcmFsPnBnX3N0YXNoX2FkdmljZTwvbGl0 ZXJhbD4KKyAgbW9kdWxlIHRvIGJlIGxvYWRlZCBpbiBhbGwgc2Vzc2lvbnMgd2hlcmUgeW91IHdh bnQgdGhpcyBtb2R1bGUgdG8KKyAgYXV0b21hdGljYWxseSBhcHBseSBhZHZpY2UuIEl0IHdpbGwg dXN1YWxseSBiZSBiZXN0IHRvIGRvIHRoaXMgYnkgYWRkaW5nCisgIDxsaXRlcmFsPnBnX3N0YXNo X2FkdmljZTwvbGl0ZXJhbD4gdG8KKyAgPHhyZWYgbGlua2VuZD0iZ3VjLXNoYXJlZC1wcmVsb2Fk LWxpYnJhcmllcyIvPiBhbmQgcmVzdGFydGluZyB0aGUgc2VydmVyLgorIDwvcGFyYT4KKworIDxw YXJhPgorICBPbmNlIHlvdSBoYXZlIG1ldCB0aGUgYWJvdmUgY3JpdGVyaWEsIHlvdSBjYW4gY3Jl YXRlIGFkdmljZSBzdGFzaGVzCisgIHVzaW5nIHRoZSA8bGl0ZXJhbD5wZ19jcmVhdGVfYWR2aWNl X3N0YXNoPC9saXRlcmFsPiBmdW5jdGlvbiBkZXNjcmliZWQKKyAgYmVsb3cgYW5kIHNldCB0aGUg cGxhbiBhZHZpY2UgZm9yIGEgZ2l2ZW4gcXVlcnkgSUQgaW4gYSBnaXZlbiBzdGFzaCB1c2luZwor ICB0aGUgPGxpdGVyYWw+cGdfc2V0X3N0YXNoZWRfYWR2aWNlPC9saXRlcmFsPiBmdW5jdGlvbi4g VGhlbiwgeW91IG5lZWQKKyAgb25seSBjb25maWd1cmUgPGxpdGVyYWw+cGdfc3Rhc2hfYWR2aWNl LnN0YXNoX25hbWU8L2xpdGVyYWw+IHRvIHBvaW50CisgIHRvIHRoZSBjaG9zZW4gYWR2aWNlIHN0 YXNoIG5hbWUuIEZvciBzb21lIHVzZSBjYXNlcywgcmF0aGVyIHRoYW4gc2V0dGluZworICB0aGlz IG9uIGEgc3lzdGVtLXdpZGUgYmFzaXMsIHlvdSBtYXkgZmluZCBpdCBoZWxwZnVsIHRvIHVzZQor ICA8bGl0ZXJhbD5BTFRFUiBEQVRBQkFTRSAuLi4gU0VUPC9saXRlcmFsPiBvcgorICA8bGl0ZXJh bD5BTFRFUiBST0xFIC4uLiBTRVQ8L2xpdGVyYWw+IHRvIGNvbmZpZ3VyZSB2YWx1ZXMgdGhhdCB3 aWxsIGFwcGx5CisgIG9ubHkgdG8gYSBkYXRhYmFzZSBvciBvbmx5IHRvIGEgY2VydGFpbiByb2xl LiBMaWtld2lzZSwgaXQgbWF5IHNvbWV0aW1lcworICBiZSBiZXR0ZXIgdG8gc2V0IHRoZSBzdGFz aCBuYW1lIGluIGEgcGFydGljdWxhciBzZXNzaW9uIHVzaW5nCisgIDxsaXRlcmFsPlNFVDwvbGl0 ZXJhbD4uCisgPC9wYXJhPgorCisgPHBhcmE+CisgIEJlY2F1c2UgPGxpdGVyYWw+cGdfc3Rhc2hf YWR2aWNlPC9saXRlcmFsPiB3b3JrcyBvbiB0aGUgYmFzaXMgb2YgcXVlcnkKKyAgaWRlbnRpZmll cnMsIHlvdSB3aWxsIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBxdWVyeSBpZGVudGlmaWVyIGZvciBl YWNoIHF1ZXJ5CisgIHdob3NlIHBsYW4geW91IHdpc2ggdG8gY29udHJvbC4gWW91IHdpbGwgYWxz byBuZWVkIHRvIGRldGVybWluZSB0aGUgYWR2aWNlCisgIHN0cmluZyB0aGF0IHlvdSB3aXNoIHRv IHN0b3JlIGZvciBlYWNoIHF1ZXJ5LiBPbmUgd2F5IHRvIGRvIHRoaXMgaXMgdG8gdXNlCisgIDxs aXRlcmFsPkVYUExBSU48L2xpdGVyYWw+OiB0aGUgPGxpdGVyYWw+VkVSQk9TRTwvbGl0ZXJhbD4g b3B0aW9uIHdpbGwKKyAgc2hvdyB0aGUgcXVlcnkgSUQsIGFuZCB0aGUgPGxpdGVyYWw+UExBTl9B RFZJQ0U8L2xpdGVyYWw+IG9wdGlvbiB3aWxsCisgIHNob3cgcGxhbiBhZHZpY2UuIDx4cmVmIGxp bmtlbmQ9InBnY29sbGVjdGFkdmljZSIgLz4gY2FuIGJlIHVzZWQgdG8KKyAgb2J0YWluIHRoaXMg aW5mb3JtYXRpb24gZm9yIGFuIGVudGlyZSB3b3JrbG9hZCwgYWx0aG91Z2ggY2FyZSBtdXN0IGJl CisgIHRha2VuIHNpbmNlIGl0IGNhbiB1c2UgdXAgYSBsb3Qgb2YgbWVtb3J5IHZlcnkgcXVpY2ts eS4gUXVlcnkgaWRlbnRpZmllcnMgY2FuCisgIGFsc28gYmUgb2J0YWluZWQgdGhyb3VnaCB0b29s cyBzdWNoIGFzIDx4cmVmIGxpbmtlbmQ9InBnc3RhdHN0YXRlbWVudHMiIC8+CisgIG9yIDx4cmVm IGxpbmtlbmQ9Im1vbml0b3JpbmctcGctc3RhdC1hY3Rpdml0eS12aWV3IiAvPiwgYnV0IHRoZXNl IHRvb2xzCisgIHdpbGwgbm90IHByb3ZpZGUgcGxhbiBhZHZpY2Ugc3RyaW5ncy4gTm90ZSB0aGF0 CisgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1jb21wdXRlLXF1ZXJ5LWlkIiAvPiBtdXN0IGJlIGVuYWJs ZWQgZm9yIHF1ZXJ5CisgIGlkZW50aWZpZXJzIHRvIGJlIGNvbXB1dGVkOyBpZiBzZXQgdG8gPGxp dGVyYWw+YXV0bzwvbGl0ZXJhbD4sIGxvYWRpbmcKKyAgPGxpdGVyYWw+cGdfc3Rhc2hfYWR2aWNl PC9saXRlcmFsPiB3aWxsIGVuYWJsZSBpdCBhdXRvbWF0aWNhbGx5LgorIDwvcGFyYT4KKworIDxw YXJhPgorICBHZW5lcmFsbHksIHRoZSBmYWN0IHRoYXQgdGhlIHBsYW5uZXIgaXMgYWJsZSB0byBj aGFuZ2UgcXVlcnkgcGxhbnMgYXMKKyAgdGhlIHVuZGVybHlpbmcgZGlzdHJpYnV0aW9uIG9mIGRh dGEgY2hhbmdlcyBpcyBhIGZlYXR1cmUsIG5vdCBhIGJ1Zy4KKyAgTW9yZW92ZXIsIGFwcGx5aW5n IHBsYW4gYWR2aWNlIGNhbiBoYXZlIGEgbm90aWNlYWJsZSBwZXJmb3JtYW5jZSBjb3N0IGV2ZW4K KyAgd2hlbiBpdCBkb2VzIG5vdCByZXN1bHQgaW4gYSBjaGFuZ2UgdG8gdGhlIHF1ZXJ5IHBsYW4u IFRoZXJlZm9yZSwgaXQgaXMKKyAgYSBnb29kIGlkZWEgdG8gdXNlIHRoaXMgZmVhdHVyZSBvbmx5 IHdoZW4gYW5kIHRvIHRoZSBleHRlbnQgbmVlZGVkLgorICBQbGFuIGFkdmljZSBzdHJpbmdzIGNh biBiZSB0cmltbWVkIGRvd24gdG8gbWVudGlvbiBvbmx5IHRob3NlIGFzcGVjdHMKKyAgb2YgdGhl IHBsYW4gdGhhdCBuZWVkIHRvIGJlIGNvbnRyb2xsZWQsIGFuZCB1c2VkIG9ubHkgZm9yIHF1ZXJp ZXMgd2hlcmUKKyAgdGhlcmUgaXMgYmVsaWV2ZWQgdG8gYmUgYSBzaWduaWZpY2FudCByaXNrIG9m IHBsYW5uZXIgZXJyb3IuCisgPC9wYXJhPgorCisgPHBhcmE+CisgIE5vdGUgdGhhdCA8bGl0ZXJh bD5wZ19zdGFzaF9hZHZpY2U8L2xpdGVyYWw+IGN1cnJlbnRseSBsYWNrcyBhIHNvcGhpc3RpY2F0 ZWQKKyAgc2VjdXJpdHkgbW9kZWwuIE9ubHkgdGhlIHN1cGVydXNlciwgb3IgYSB1c2VyIHRvIHdo b20gdGhlIHN1cGVydXNlciBoYXMKKyAgZ3JhbnRlZCA8bGl0ZXJhbD5FWEVDVVRFPC9saXRlcmFs PiBwZXJtaXNzaW9uIG9uIHRoZSByZWxldmFudCBmdW5jdGlvbnMsCisgIG1heSBjcmVhdGUgYWR2 aWNlIHN0YXNoZXMgb3IgYWx0ZXIgdGhlaXIgY29udGVudHMsIGJ1dCBhbnkgdXNlciBtYXkgc2V0 CisgIDxsaXRlcmFsPnBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lPC9saXRlcmFsPiBmb3IgdGhl aXIgc2Vzc2lvbiwgYW5kIHRoaXMKKyAgbWF5IHJldmVhbCB0aGUgY29udGVudHMgb2YgYW55IGFk dmljZSBzdGFzaCB3aXRoIHRoYXQgbmFtZS4gVXNlcnMgc2hvdWxkCisgIGFzc3VtZSB0aGF0IGlu Zm9ybWF0aW9uIGVtYmVkZGVkIGluIHN0YXNoZWQgYWR2aWNlIHN0cmluZ3MgbWF5IGJlY29tZSB2 aXNpYmxlCisgIHRvIG5vbnByaXZpbGVnZWQgdXNlcnMuCisgPC9wYXJhPgorCisgPHNlY3QyIGlk PSJwZ3N0YXNoYWR2aWNlLWZ1bmN0aW9ucyI+CisgIDx0aXRsZT5GdW5jdGlvbnM8L3RpdGxlPgor CisgIDx2YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAg IDxmdW5jdGlvbj5wZ19jcmVhdGVfYWR2aWNlX3N0YXNoKHN0YXNoX25hbWUgdGV4dCkgcmV0dXJu cyB2b2lkPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2Ny ZWF0ZV9hZHZpY2Vfc3Rhc2g8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVy bT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBDcmVhdGVzIGEgbmV3LCBl bXB0eSBhZHZpY2Ugc3Rhc2ggd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKyAgICAgPC9wYXJhPgorICAg IDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAg ICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2Ryb3BfYWR2aWNlX3N0YXNoKHN0YXNoX25hbWUg dGV4dCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxw cmltYXJ5PnBnX2Ryb3BfYWR2aWNlX3N0YXNoPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4K KyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgRHJvcHMg dGhlIG5hbWVkIGFkdmljZSBzdGFzaCBhbmQgYWxsIG9mIGl0cyBlbnRyaWVzLgorICAgICA8L3Bh cmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVu dHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfc2V0X3N0YXNoZWRfYWR2aWNlKHN0 YXNoX25hbWUgdGV4dCwgcXVlcnlfaWQgYmlnaW50LAorICAgICAgIGFkdmljZV9zdHJpbmcgdGV4 dCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmlt YXJ5PnBnX3NldF9zdGFzaGVkX2FkdmljZTwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+Cisg ICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFN0b3JlcyBh biBhZHZpY2Ugc3RyaW5nIGluIHRoZSBuYW1lZCBhZHZpY2Ugc3Rhc2gsIGFzc29jaWF0ZWQgd2l0 aAorICAgICAgdGhlIGdpdmVuIHF1ZXJ5IGlkZW50aWZpZXIuIElmIGFuIGVudHJ5IGZvciB0aGF0 IHF1ZXJ5IGlkZW50aWZpZXIKKyAgICAgIGFscmVhZHkgZXhpc3RzIGluIHRoZSBzdGFzaCwgaXQg aXMgcmVwbGFjZWQuIElmCisgICAgICA8cGFyYW1ldGVyPmFkdmljZV9zdHJpbmc8L3BhcmFtZXRl cj4gaXMgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4sCisgICAgICBhbnkgZXhpc3RpbmcgZW50cnkg Zm9yIHRoYXQgcXVlcnkgaWRlbnRpZmllciBpcyByZW1vdmVkLgorICAgICA8L3BhcmE+CisgICAg PC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAg IDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2FkdmljZV9zdGFzaGVzKCkgcmV0dXJucyBz ZXRvZiAoc3Rhc2hfbmFtZSB0ZXh0LAorICAgICAgIG51bV9lbnRyaWVzIGJpZ2ludCk8L2Z1bmN0 aW9uPgorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+cGdfZ2V0X2FkdmljZV9zdGFz aGVzPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlz dGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmV0dXJucyBvbmUgcm93IGZvciBlYWNoIGFkdmlj ZSBzdGFzaCwgc2hvd2luZyB0aGUgc3Rhc2ggbmFtZSBhbmQKKyAgICAgIHRoZSBudW1iZXIgb2Yg ZW50cmllcyBpdCBjb250YWlucy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8 L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1 bmN0aW9uPnBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoc3Rhc2hfbmFtZSB0ZXh0KSByZXR1 cm5zIHNldG9mCisgICAgICAgKHN0YXNoX25hbWUgdGV4dCwgcXVlcnlfaWQgYmlnaW50LCBhZHZp Y2Vfc3RyaW5nIHRleHQpPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmlt YXJ5PnBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHM8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0 ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBS ZXR1cm5zIG9uZSByb3cgZm9yIGVhY2ggZW50cnkgaW4gdGhlIG5hbWVkIGFkdmljZSBzdGFzaC4g SWYKKyAgICAgIDxwYXJhbWV0ZXI+c3Rhc2hfbmFtZTwvcGFyYW1ldGVyPiBpcyA8bGl0ZXJhbD5O VUxMPC9saXRlcmFsPiwgcmV0dXJucworICAgICAgZW50cmllcyBmcm9tIGFsbCBzdGFzaGVzLgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgIDwv dmFyaWFibGVsaXN0PgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icGdzdGFzaGFkdmljZS1j b25maWctcGFyYW1zIj4KKyAgPHRpdGxlPkNvbmZpZ3VyYXRpb24gUGFyYW1ldGVyczwvdGl0bGU+ CisKKyAgPHZhcmlhYmxlbGlzdD4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAg ICAgPHZhcm5hbWU+cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWU8L3Zhcm5hbWU+ICg8dHlwZT5z dHJpbmc8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+ cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWU8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1l dGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlz dGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBhZHZp Y2Ugc3Rhc2ggdG8gY29uc3VsdCBkdXJpbmcgcXVlcnkKKyAgICAgIHBsYW5uaW5nLiBUaGUgZGVm YXVsdCB2YWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB3aGljaCBkaXNhYmxlcworICAgICAgdGhp cyBtb2R1bGUuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+CisKKyA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJwZ3N0 YXNoYWR2aWNlLWF1dGhvciI+CisgIDx0aXRsZT5BdXRob3I8L3RpdGxlPgorCisgIDxwYXJhPgor ICAgUm9iZXJ0IEhhYXMgPGVtYWlsPnJoYWFzQHBvc3RncmVzcWwub3JnPC9lbWFpbD4KKyAgPC9w YXJhPgorIDwvc2VjdDI+CisKKzwvc2VjdDE+CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4 IDdhMjMzYTg4YTA5Li5hNGJlNWYzODU4OCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAg LTQwNDIsNiArNDA0MiwxMiBAQCBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlCiBwZ3BhX3Ryb3ZlX3Jl c3VsdAogcGdwYV90cm92ZV9zbGljZQogcGdwYV91bnJvbGxlZF9qb2luCitwZ3NhX2VudHJ5Citw Z3NhX2VudHJ5X2tleQorcGdzYV9zaGFyZWRfc3RhdGUKK3Bnc2Ffc3Rhc2gKK3Bnc2Ffc3Rhc2hf Y291bnQKK3Bnc2Ffc3Rhc2hfbmFtZQogcGdzb2NrZXQKIHBnc3FsX3RoaW5nX3QKIHBnc3NFbnRy eQotLSAKMi41MS4wCgo= --00000000000021f284064d3f4358 Content-Type: application/octet-stream; name="v21-0001-Add-pg_collect_advice-contrib-module.patch" Content-Disposition: attachment; filename="v21-0001-Add-pg_collect_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmv51dy90 RnJvbSAzNDY3MzhjYjNhOTU2OWEwZjQ4Nzk4Yzc0MWU4NDljMzY3ZTI5NTBhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgMjYgRmViIDIwMjYgMTY6NTE6MTYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyMSAx LzJdIEFkZCBwZ19jb2xsZWN0X2FkdmljZSBjb250cmliIG1vZHVsZS4KClRoaXMgbW9kdWxlIGFs bG93cyBhdXRvbWF0ZWQsIGxhcmdlLXNjYWxlIGNvbGxlY3Rpb24gb2YgcXVlcmllcyBhbmQKdGhl IGFzc29jaWF0ZWQgcGxhbiBhZHZpY2Ugc3RyaW5ncyB1c2luZyBlaXRoZXIgYmFja2VuZC1sb2Nh bCBtZW1vcnkKb3IgZHluYW1pYyBzaGFyZWQgbWVtb3J5LiBJbiBlaXRoZXIgY2FzZSwgbWVtb3J5 IHVzYWdlIGNhbiBiZSBsaW1pdGVkCmJ5IHJlc3RyaWN0aW9uIHRoZSBtYXhpbXVtIG51bWJlciBv ZiBxdWVyaWVzIGFuZCBhZHZpY2Ugc3RyaW5ncwpzdG9yZWQuIENhcmUgc2hvdWxkIGJlIHRha2Vu IHdpdGggdGhlc2UgdmFsdWVzLCBhbmQgd2l0aCB0aGUgdXNlIG9mCnRoaXMgbW9kdWxlIGluIGdl bmVyYWwsIGJlY2F1c2UgaXQncyBlYXN5IHRvIGNoZXcgdXAgYW4gdW5yZWFzb25hYmx5Cmxhcmdl IGFtb3VudCBvZiBtZW1vcnkuIFVubGlrZSBwZ19zdGF0X3N0YXRlbWVudHMsIHRoaXMgbW9kdWxl IGRvZXMKbm90IHByb3ZpZGUgZm9yIHF1ZXJ5IG5vcm1hbGl6YXRpb24gb3IgZXZlbiBkZWR1cGxp Y2F0aW9uOyBpdCBzaW1wbHkKbWFrZXMgYSByZWNvcmQgZm9yIGV2ZXJ5IHF1ZXJ5IHBsYW5uZWQu CgpJdCBjYW4gYmUgdXNlZnVsIHRvIGVuYWJsZSBxdWVyeSBJRCBjb21wdXRhdG9uIGJlZm9yZSB1 c2luZyB0aGUKbW9kdWxlLCBidXQgaXQncyBub3QgcmVxdWlyZWQuIElmIG5vdCBkb25lLCBhbGwg cXVlcmllcyB3aWxsIHNpbXBseQpzaG93IGEgcXVlcnkgSUQgb2YgemVyby4KClJldmlld2VkLWJ5 OiBBbGV4YW5kcmEgV2FuZyA8YWxleGFuZHJhLndhbmcub3NzQGdtYWlsLmNvbT4gKGVhcmxpZXIg dmVyc2lvbikKLS0tCiBjb250cmliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDEgKwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICB8 ICAzMCArCiBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2NvbGxlY3Rvci5jICAgICAgICAgfCA2 NDIgKysrKysrKysrKysrKysrKysrCiAuLi4vZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dCAg ICAgICAgICAgICAgfCAgNjkgKysKIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvaW50ZXJmYWNl LmMgICAgICAgICB8IDMwMyArKysrKysrKysKIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvbWVz b24uYnVpbGQgICAgICAgICB8ICA0MSArKwogLi4uL3BnX2NvbGxlY3RfYWR2aWNlLS0xLjAuc3Fs ICAgICAgICAgICAgICAgIHwgIDQzICsrCiAuLi4vcGdfY29sbGVjdF9hZHZpY2UuY29udHJvbCAg ICAgICAgICAgICAgICAgfCAgIDUgKwogY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xs ZWN0X2FkdmljZS5oIHwgIDM5ICsrCiAuLi4vcGdfY29sbGVjdF9hZHZpY2Uvc3FsL2xvY2FsX2Nv bGxlY3Rvci5zcWwgfCAgNDYgKysKIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvdC8wMDFfcmVn cmVzcy5wbCAgICB8IDE1MSArKysrCiBkb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sICAgICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwgICAgICAgICAg ICAgICAgICAgIHwgICAxICsKIGRvYy9zcmMvc2dtbC9wZ2NvbGxlY3RhZHZpY2Uuc2dtbCAgICAg ICAgICAgICB8IDI0NCArKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAg ICAgICAgICAgICAgfCAgIDYgKwogMTYgZmlsZXMgY2hhbmdlZCwgMTYyMyBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9NYWtlZmlsZQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvY29sbGVjdG9yLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2V4cGVjdGVkL2xv Y2FsX2NvbGxlY3Rvci5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2NvbGxlY3Rf YWR2aWNlL2ludGVyZmFjZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0 X2FkdmljZS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfY29sbGVj dF9hZHZpY2UvcGdfY29sbGVjdF9hZHZpY2UtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj b250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLmNvbnRyb2wKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNl LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3NxbC9sb2Nh bF9jb2xsZWN0b3Iuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0X2Fk dmljZS90LzAwMV9yZWdyZXNzLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgZG9jL3NyYy9zZ21sL3Bn Y29sbGVjdGFkdmljZS5zZ21sCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9NYWtlZmlsZSBiL2NvbnRy aWIvTWFrZWZpbGUKaW5kZXggZGQwNGMyMGFjZDIuLjIyMDcxMDM0ZTUxIDEwMDY0NAotLS0gYS9j b250cmliL01ha2VmaWxlCisrKyBiL2NvbnRyaWIvTWFrZWZpbGUKQEAgLTMxLDYgKzMxLDcgQEAg U1VCRElSUyA9IFwKIAkJcGFnZWluc3BlY3QJXAogCQlwYXNzd29yZGNoZWNrCVwKIAkJcGdfYnVm ZmVyY2FjaGUJXAorCQlwZ19jb2xsZWN0X2FkdmljZSBcCiAJCXBnX2ZyZWVzcGFjZW1hcCBcCiAJ CXBnX2xvZ2ljYWxpbnNwZWN0IFwKIAkJcGdfb3ZlcmV4cGxhaW4gXApkaWZmIC0tZ2l0IGEvY29u dHJpYi9tZXNvbi5idWlsZCBiL2NvbnRyaWIvbWVzb24uYnVpbGQKaW5kZXggNWE3NTJlYWMzNDcu LmZmNDIyZDliN2ZjIDEwMDY0NAotLS0gYS9jb250cmliL21lc29uLmJ1aWxkCisrKyBiL2NvbnRy aWIvbWVzb24uYnVpbGQKQEAgLTQ1LDYgKzQ1LDcgQEAgc3ViZGlyKCdwYWdlaW5zcGVjdCcpCiBz dWJkaXIoJ3Bhc3N3b3JkY2hlY2snKQogc3ViZGlyKCdwZ19idWZmZXJjYWNoZScpCiBzdWJkaXIo J3BnY3J5cHRvJykKK3N1YmRpcigncGdfY29sbGVjdF9hZHZpY2UnKQogc3ViZGlyKCdwZ19mcmVl c3BhY2VtYXAnKQogc3ViZGlyKCdwZ19sb2dpY2FsaW5zcGVjdCcpCiBzdWJkaXIoJ3BnX292ZXJl eHBsYWluJykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvTWFrZWZpbGUg Yi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5kZmQ4ZTllNjY1YgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRy aWIvcGdfY29sbGVjdF9hZHZpY2UvTWFrZWZpbGUKQEAgLTAsMCArMSwzMCBAQAorIyBjb250cmli L3BnX2NvbGxlY3RfYWR2aWNlL01ha2VmaWxlCisKK01PRFVMRV9iaWcgPSBwZ19jb2xsZWN0X2Fk dmljZQorT0JKUyA9IFwKKwkkKFdJTjMyUkVTKSBcCisJY29sbGVjdG9yLm8gXAorCWludGVyZmFj ZS5vCisKK0VYVEVOU0lPTiA9IHBnX2NvbGxlY3RfYWR2aWNlCitEQVRBID0gcGdfY29sbGVjdF9h ZHZpY2UtLTEuMC5zcWwKK1BHRklMRURFU0MgPSAicGdfY29sbGVjdF9hZHZpY2UgLSBjb2xsZWN0 IHF1ZXJpZXMgYW5kIHRoZWlyIHBsYW4gYWR2aWNlIHN0cmluZ3MiCisKK1JFR1JFU1MgPSBsb2Nh bF9jb2xsZWN0b3IKK0VYVFJBX0lOU1RBTEwgPSBjb250cmliL3BnX3BsYW5fYWR2aWNlCitUQVBf VEVTVFMgPSAxCisKKyMgcmVxdWlyZWQgZm9yIDAwMV9yZWdyZXNzLnBsCitSRUdSRVNTX1NITElC PSQoYWJzX3RvcF9idWlsZGRpcikvc3JjL3Rlc3QvcmVncmVzcy9yZWdyZXNzJChETFNVRkZJWCkK K2V4cG9ydCBSRUdSRVNTX1NITElCCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19j b25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBH WFMpCitlbHNlCitzdWJkaXIgPSBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlCit0b3BfYnVpbGRk aXIgPSAuLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAor aW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRp ZmYgLS1naXQgYS9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2NvbGxlY3Rvci5jIGIvY29udHJp Yi9wZ19jb2xsZWN0X2FkdmljZS9jb2xsZWN0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uZTBlY2U0MmJiNmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Bn X2NvbGxlY3RfYWR2aWNlL2NvbGxlY3Rvci5jCkBAIC0wLDAgKzEsNjQyIEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBjb2xsZWN0b3IuYworICoJICB3b3JraG9yc2UgZm9yIHNhdmluZyBw bGFuIGFkdmljZSBpbiBiYWNrZW5kLWxvY2FsIG9yIHNoYXJlZCBtZW1vcnkKKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKgkgIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvY29sbGVjdG9yLmMKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUg InBnX2NvbGxlY3RfYWR2aWNlLmgiCisKKyNpbmNsdWRlICJkYXRhdHlwZS90aW1lc3RhbXAuaCIK KyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAi bm9kZXMvcGdfbGlzdC5oIgorI2luY2x1ZGUgInV0aWxzL2FjbC5oIgorI2luY2x1ZGUgInV0aWxz L2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCisjaW5jbHVkZSAidXRp bHMvdHVwbGVzdG9yZS5oIgorCitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2NsZWFyX2NvbGxlY3Rl ZF9sb2NhbF9hZHZpY2UpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19jbGVhcl9jb2xsZWN0ZWRf c2hhcmVkX2FkdmljZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2dldF9jb2xsZWN0ZWRfbG9j YWxfYWR2aWNlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRf YWR2aWNlKTsKKworI2RlZmluZSBBRFZJQ0VfQ0hVTktfU0laRQkJMTAyNAorI2RlZmluZSBBRFZJ Q0VfQ0hVTktfQVJSQVlfU0laRQk2NAorCisjZGVmaW5lCVBHX0dFVF9BRFZJQ0VfQ09MVU1OUwk3 CisKKy8qCisgKiBBZHZpY2UgZXh0cmFjdGVkIGZyb20gb25lIHF1ZXJ5IHBsYW4sIHRvZ2V0aGVy IHdpdGggdGhlIHF1ZXJ5IHN0cmluZworICogYW5kIHZhcmlvdXMgb3RoZXIgaWRlbnRpZnlpbmcg ZGV0YWlscy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdjYV9jb2xsZWN0ZWRfYWR2aWNlCit7CisJ T2lkCQkJdXNlcmlkOwkJCS8qIHVzZXIgT0lEICovCisJT2lkCQkJZGJpZDsJCQkvKiBkYXRhYmFz ZSBPSUQgKi8KKwl1aW50NjQJCXF1ZXJ5aWQ7CQkvKiBxdWVyeSBpZGVudGlmaWVyICovCisJVGlt ZXN0YW1wVHogdGltZXN0YW1wOwkJLyogcXVlcnkgdGltZXN0YW1wICovCisJaW50CQkJYWR2aWNl X29mZnNldDsJLyogc3RhcnQgb2YgYWR2aWNlIGluIHRleHR1YWwgZGF0YSAqLworCWNoYXIJCXRl eHR1YWxfZGF0YVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSBwZ2NhX2NvbGxlY3RlZF9hZHZp Y2U7CisKKy8qCisgKiBBIGJ1bmNoIG9mIHBvaW50ZXJzIHRvIHBnY2FfY29sbGVjdGVkX2Fkdmlj ZSBvYmplY3RzLCBzdG9yZWQgaW4KKyAqIGJhY2tlbmQtbG9jYWwgbWVtb3J5LgorICovCit0eXBl ZGVmIHN0cnVjdCBwZ2NhX2xvY2FsX2FkdmljZV9jaHVuaworeworCXBnY2FfY29sbGVjdGVkX2Fk dmljZSAqZW50cmllc1tBRFZJQ0VfQ0hVTktfU0laRV07Cit9IHBnY2FfbG9jYWxfYWR2aWNlX2No dW5rOworCisvKgorICogSW5mb3JtYXRpb24gYWJvdXQgYWxsIG9mIHRoZSBwZ2NhX2NvbGxlY3Rl ZF9hZHZpY2Ugb2JqZWN0cyB0aGF0IHdlJ3JlCisgKiBzdG9yaW5nIGluIGxvY2FsIG1lbW9yeS4K KyAqCisgKiBXZSBhc3NpZ24gY29uc2VjdXRpdmUgSURzLCBzdGFydGluZyBmcm9tIDAsIHRvIGVh Y2ggcGdjYV9jb2xsZWN0ZWRfYWR2aWNlCisgKiBvYmplY3QgdGhhdCB3ZSBzdG9yZS4gVGhlIGFj dHVhbCBzdG9yYWdlIGlzIGFuIGFycmF5IG9mIGNodW5rcywgd2hpY2gKKyAqIGhlbHBzIGtlZXAg bWVtY3B5KCkgb3ZlcmhlYWQgbG93IHdoZW4gd2Ugc3RhcnQgZGlzY2FyZGluZyBvbGRlciBkYXRh LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ2NhX2xvY2FsX2FkdmljZQoreworCXVpbnQ2NAkJbmV4 dF9pZDsKKwl1aW50NjQJCW9sZGVzdF9pZDsKKwl1aW50NjQJCWJhc2VfaWQ7CisJaW50CQkJY2h1 bmtfYXJyYXlfYWxsb2NhdGVkX3NpemU7CisJcGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsgKipjaHVu a3M7Cit9IHBnY2FfbG9jYWxfYWR2aWNlOworCisvKgorICogSnVzdCBsaWtlIHBnY2FfbG9jYWxf YWR2aWNlX2NodW5rLCBidXQgc3RvcmVkIGluIGEgZHluYW1pYyBzaGFyZWQgYXJlYSwKKyAqIHNv IHdlIG11c3QgdXNlIGRzYV9wb2ludGVyIGluc3RlYWQgb2YgbmF0aXZlIHBvaW50ZXJzLgorICov Cit0eXBlZGVmIHN0cnVjdCBwZ2NhX3NoYXJlZF9hZHZpY2VfY2h1bmsKK3sKKwlkc2FfcG9pbnRl ciBlbnRyaWVzW0FEVklDRV9DSFVOS19TSVpFXTsKK30gcGdjYV9zaGFyZWRfYWR2aWNlX2NodW5r OworCisvKgorICogSnVzdCBsaWtlIHBnY2FfbG9jYWxfYWR2aWNlLCBidXQgc3RvcmVkIGluIGEg ZHluYW1pYyBzaGFyZWQgYXJlYSwgc28KKyAqIHdlIG11c3QgdXNlIGRzYV9wb2ludGVyIGluc3Rl YWQgb2YgbmF0aXZlIHBvaW50ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ2NhX3NoYXJlZF9h ZHZpY2UKK3sKKwl1aW50NjQJCW5leHRfaWQ7CisJdWludDY0CQlvbGRlc3RfaWQ7CisJdWludDY0 CQliYXNlX2lkOworCWludAkJCWNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplOworCWRzYV9wb2lu dGVyIGNodW5rczsKK30gcGdjYV9zaGFyZWRfYWR2aWNlOworCisvKiBQb2ludGVycyB0byBsb2Nh bCBhbmQgc2hhcmVkIGNvbGxlY3RvcnMgKi8KK3N0YXRpYyBwZ2NhX2xvY2FsX2FkdmljZSAqbG9j YWxfY29sbGVjdG9yID0gTlVMTDsKK3N0YXRpYyBwZ2NhX3NoYXJlZF9hZHZpY2UgKnNoYXJlZF9j b2xsZWN0b3IgPSBOVUxMOworCisvKiBTdGF0aWMgZnVuY3Rpb25zICovCitzdGF0aWMgcGdjYV9j b2xsZWN0ZWRfYWR2aWNlICptYWtlX2NvbGxlY3RlZF9hZHZpY2UoT2lkIHVzZXJpZCwKKwkJCQkJ CQkJCQkJCQlPaWQgZGJpZCwKKwkJCQkJCQkJCQkJCQl1aW50NjQgcXVlcnlJZCwKKwkJCQkJCQkJ CQkJCQlUaW1lc3RhbXBUeiB0aW1lc3RhbXAsCisJCQkJCQkJCQkJCQkJY29uc3QgY2hhciAqcXVl cnlfc3RyaW5nLAorCQkJCQkJCQkJCQkJCWNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcsCisJCQkJ CQkJCQkJCQkJZHNhX2FyZWEgKmFyZWEsCisJCQkJCQkJCQkJCQkJZHNhX3BvaW50ZXIgKnJlc3Vs dCk7CitzdGF0aWMgdm9pZCBzdG9yZV9sb2NhbF9hZHZpY2UocGdjYV9jb2xsZWN0ZWRfYWR2aWNl ICpjYSk7CitzdGF0aWMgdm9pZCB0cmltX2xvY2FsX2FkdmljZShpbnQgbGltaXQpOworc3RhdGlj IHZvaWQgc3RvcmVfc2hhcmVkX2FkdmljZShkc2FfcG9pbnRlciBjYV9wb2ludGVyKTsKK3N0YXRp YyB2b2lkIHRyaW1fc2hhcmVkX2FkdmljZShkc2FfYXJlYSAqYXJlYSwgaW50IGxpbWl0KTsKKwor LyogSGVscGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIHF1ZXJ5IHN0cmluZyBmcm9tIHBnY2Ff Y29sbGVjdGVkX2FkdmljZSAqLworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK3F1ZXJ5X3N0 cmluZyhwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKQoreworCXJldHVybiBjYS0+dGV4dHVhbF9k YXRhOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgYWR2aWNlIHN0cmlu ZyBmcm9tIHBnY2FfY29sbGVjdGVkX2FkdmljZSAqLworc3RhdGljIGlubGluZSBjb25zdCBjaGFy ICoKK2FkdmljZV9zdHJpbmcocGdjYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sKKwlyZXR1cm4g Y2EtPnRleHR1YWxfZGF0YSArIGNhLT5hZHZpY2Vfb2Zmc2V0OworfQorCisvKgorICogU3RvcmUg Y29sbGVjdGVkIHF1ZXJ5IGFkdmljZSBpbnRvIHRoZSBsb2NhbCBvciBzaGFyZWQgYWR2aWNlIGNv bGxlY3RvciwKKyAqIGFzIGFwcHJvcHJpYXRlLgorICovCit2b2lkCitwZ19jb2xsZWN0X2Fkdmlj ZV9zYXZlKHVpbnQ2NCBxdWVyeUlkLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCSAg IGNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcpCit7CisJT2lkCQkJdXNlcmlkID0gR2V0VXNlcklk KCk7CisJT2lkCQkJZGJpZCA9IE15RGF0YWJhc2VJZDsKKwlUaW1lc3RhbXBUeiBub3cgPSBHZXRD dXJyZW50VGltZXN0YW1wKCk7CisKKwlpZiAocGdfY29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVj dG9yICYmCisJCXBnX2NvbGxlY3RfYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQgPiAwKQor CXsKKwkJcGdjYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250 ZXh0OworCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGdfY29sbGVjdF9h ZHZpY2VfZ2V0X21jeHQoKSk7CisJCWNhID0gbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKHVzZXJpZCwg ZGJpZCwgcXVlcnlJZCwgbm93LAorCQkJCQkJCQkgICBxdWVyeV9zdHJpbmcsIGFkdmljZV9zdHJp bmcsCisJCQkJCQkJCSAgIE5VTEwsIE5VTEwpOworCQlzdG9yZV9sb2NhbF9hZHZpY2UoY2EpOwor CQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJfQorCisJaWYgKHBnX2NvbGxl Y3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3IgJiYKKwkJcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVk X2NvbGxlY3Rpb25fbGltaXQgPiAwKQorCXsKKwkJZHNhX2FyZWEgICAqYXJlYSA9IHBnX2NvbGxl Y3RfYWR2aWNlX2RzYV9hcmVhKCk7CisJCWRzYV9wb2ludGVyIGNhX3BvaW50ZXIgPSBJbnZhbGlk RHNhUG9pbnRlcjsgLyogcGxhY2F0ZSBjb21waWxlciAqLworCisJCW1ha2VfY29sbGVjdGVkX2Fk dmljZSh1c2VyaWQsIGRiaWQsIHF1ZXJ5SWQsIG5vdywKKwkJCQkJCQkgIHF1ZXJ5X3N0cmluZywg YWR2aWNlX3N0cmluZywgYXJlYSwKKwkJCQkJCQkgICZjYV9wb2ludGVyKTsKKwkJc3RvcmVfc2hh cmVkX2FkdmljZShjYV9wb2ludGVyKTsKKwl9Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgZmls bCBhIG5ldyBwZ2NhX2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0LgorICoKKyAqIElmIGFyZWEgIT0g TlVMTCwgaXQgaXMgdXNlZCB0byBhbGxvY2F0ZSB0aGUgbmV3IG9iamVjdCwgYW5kIHRoZSByZXN1 bHRpbmcKKyAqIGRzYV9wb2ludGVyIGlzIHJldHVybmVkIHZpYSAqcmVzdWx0LgorICoKKyAqIElm IGFyZWEgPT0gTlVMTCwgdGhlIG5ldyBvYmplY3QgaXMgYWxsb2NhdGVkIGluIHRoZSBjdXJyZW50 IG1lbW9yeSBjb250ZXh0LAorICogYW5kIHJlc3VsdCBpcyBub3QgZXhhbWluZWQgb3IgbW9kaWZp ZWQuCisgKi8KK3N0YXRpYyBwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKgorbWFrZV9jb2xsZWN0ZWRf YWR2aWNlKE9pZCB1c2VyaWQsIE9pZCBkYmlkLCB1aW50NjQgcXVlcnlJZCwKKwkJCQkJICBUaW1l c3RhbXBUeiB0aW1lc3RhbXAsCisJCQkJCSAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJ CQkgIGNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcsCisJCQkJCSAgZHNhX2FyZWEgKmFyZWEsIGRz YV9wb2ludGVyICpyZXN1bHQpCit7CisJc2l6ZV90CQlxdWVyeV9zdHJpbmdfbGVuZ3RoID0gc3Ry bGVuKHF1ZXJ5X3N0cmluZykgKyAxOworCXNpemVfdAkJYWR2aWNlX3N0cmluZ19sZW5ndGggPSBz dHJsZW4oYWR2aWNlX3N0cmluZykgKyAxOworCXNpemVfdAkJdG90YWxfbGVuZ3RoOworCXBnY2Ff Y29sbGVjdGVkX2FkdmljZSAqY2E7CisKKwl0b3RhbF9sZW5ndGggPSBvZmZzZXRvZihwZ2NhX2Nv bGxlY3RlZF9hZHZpY2UsIHRleHR1YWxfZGF0YSkKKwkJKyBxdWVyeV9zdHJpbmdfbGVuZ3RoICsg YWR2aWNlX3N0cmluZ19sZW5ndGg7CisKKwlpZiAoYXJlYSA9PSBOVUxMKQorCQljYSA9IHBhbGxv Yyh0b3RhbF9sZW5ndGgpOworCWVsc2UKKwl7CisJCSpyZXN1bHQgPSBkc2FfYWxsb2NhdGUoYXJl YSwgdG90YWxfbGVuZ3RoKTsKKwkJY2EgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgKnJlc3VsdCk7 CisJfQorCisJY2EtPnVzZXJpZCA9IHVzZXJpZDsKKwljYS0+ZGJpZCA9IGRiaWQ7CisJY2EtPnF1 ZXJ5aWQgPSBxdWVyeUlkOworCWNhLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisJY2EtPmFkdmlj ZV9vZmZzZXQgPSBxdWVyeV9zdHJpbmdfbGVuZ3RoOworCisJbWVtY3B5KGNhLT50ZXh0dWFsX2Rh dGEsIHF1ZXJ5X3N0cmluZywgcXVlcnlfc3RyaW5nX2xlbmd0aCk7CisJbWVtY3B5KCZjYS0+dGV4 dHVhbF9kYXRhW2NhLT5hZHZpY2Vfb2Zmc2V0XSwKKwkJICAgYWR2aWNlX3N0cmluZywgYWR2aWNl X3N0cmluZ19sZW5ndGgpOworCisJcmV0dXJuIGNhOworfQorCisvKgorICogQWRkIGEgcGdjYV9j b2xsZWN0ZWRfYWR2aWNlIG9iamVjdCB0byBvdXIgYmFja2VuZC1sb2NhbCBhZHZpY2UgY29sbGVj dGlvbi4KKyAqCisgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHN3aXRjaGluZyB0byB0aGUg YXBwcm9wcmlhdGUgbWVtb3J5IGNvbnRleHQ7CisgKiB0aGUgcHJvdmlkZWQgb2JqZWN0IHNob3Vs ZCBoYXZlIGJlZW4gYWxsb2NhdGVkIGluIHRoYXQgc2FtZSBjb250ZXh0LgorICovCitzdGF0aWMg dm9pZAorc3RvcmVfbG9jYWxfYWR2aWNlKHBnY2FfY29sbGVjdGVkX2FkdmljZSAqY2EpCit7CisJ dWludDY0CQljaHVua19udW1iZXI7CisJdWludDY0CQljaHVua19vZmZzZXQ7CisJcGdjYV9sb2Nh bF9hZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCisJLyogSWYgdGhlIGxvY2FsIGFkdmlj ZSBjb2xsZWN0b3IgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LCBkbyB0aGF0IG5vdy4gKi8KKwlpZiAo bGEgPT0gTlVMTCkKKwl7CisJCWxhID0gcGFsbG9jMChzaXplb2YocGdjYV9sb2NhbF9hZHZpY2Up KTsKKwkJbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gQURWSUNFX0NIVU5LX0FSUkFZ X1NJWkU7CisJCWxhLT5jaHVua3MgPSBwYWxsb2MwX2FycmF5KHBnY2FfbG9jYWxfYWR2aWNlX2No dW5rICosCisJCQkJCQkJCSAgIGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSk7CisJCWxv Y2FsX2NvbGxlY3RvciA9IGxhOworCX0KKworCS8qIENvbXB1dGUgY2h1bmsgYW5kIG9mZnNldCBh dCB3aGljaCB0byBzdG9yZSB0aGlzIGFkdmljZS4gKi8KKwljaHVua19udW1iZXIgPSAobGEtPm5l eHRfaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwljaHVua19vZmZzZXQg PSAobGEtPm5leHRfaWQgLSBsYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCS8q IEV4dGVuZCBjaHVuayBhcnJheSwgaWYgbmVlZGVkLiAqLworCWlmIChjaHVua19udW1iZXIgPj0g bGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKQorCXsKKwkJaW50CQkJbmV3X3NpemU7CisK KwkJbmV3X3NpemUgPSBsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgKyBBRFZJQ0VfQ0hV TktfQVJSQVlfU0laRTsKKwkJbGEtPmNodW5rcyA9IHJlcGFsbG9jMF9hcnJheShsYS0+Y2h1bmtz LAorCQkJCQkJCQkJIHBnY2FfbG9jYWxfYWR2aWNlX2NodW5rICosCisJCQkJCQkJCQkgbGEtPmNo dW5rX2FycmF5X2FsbG9jYXRlZF9zaXplLAorCQkJCQkJCQkJIG5ld19zaXplKTsKKwkJbGEtPmNo dW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gbmV3X3NpemU7CisJfQorCisJLyogQWxsb2NhdGUg bmV3IGNodW5rLCBpZiBuZWVkZWQuICovCisJaWYgKGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXSA9 PSBOVUxMKQorCQlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0gPSBwYWxsb2MwX29iamVjdChwZ2Nh X2xvY2FsX2FkdmljZV9jaHVuayk7CisKKwkvKiBTYXZlIHBvaW50ZXIgYW5kIGJ1bXAgbmV4dC1p ZCBjb3VudGVyLiAqLworCUFzc2VydChsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNb Y2h1bmtfb2Zmc2V0XSA9PSBOVUxMKTsKKwlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJp ZXNbY2h1bmtfb2Zmc2V0XSA9IGNhOworCSsrbGEtPm5leHRfaWQ7CisKKwkvKiBJZiB3ZSd2ZSBl eGNlZWRlZCB0aGUgc3RvcmFnZSBsaW1pdCwgZGlzY2FyZCBvbGQgZGF0YS4gKi8KKwl0cmltX2xv Y2FsX2FkdmljZShwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0KTsKK30K KworLyoKKyAqIEFkZCBhIHBnY2FfY29sbGVjdGVkX2FkdmljZSBvYmplY3QgdG8gdGhlIHNoYXJl ZCBhZHZpY2UgY29sbGVjdGlvbi4KKyAqCisgKiAnY2FfcG9pbnRlcicgc2hvdWxkIGhhdmUgYmVl biBhbGxvY2F0ZWQgZnJvbSB0aGUgcGdfY29sbGVjdF9hZHZpY2UgRFNBIGFyZWEKKyAqIGFuZCBz aG91bGQgcG9pbnQgdG8gYW4gb2JqZWN0IG9mIHR5cGUgcGdjYV9jb2xsZWN0ZWRfYWR2aWNlLgor ICovCitzdGF0aWMgdm9pZAorc3RvcmVfc2hhcmVkX2FkdmljZShkc2FfcG9pbnRlciBjYV9wb2lu dGVyKQoreworCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0Owor CXBnY2Ffc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX2NvbGxlY3RfYWR2aWNlX2F0dGFjaCgpOwor CWRzYV9hcmVhICAgKmFyZWEgPSBwZ19jb2xsZWN0X2FkdmljZV9kc2FfYXJlYSgpOworCXBnY2Ff c2hhcmVkX2FkdmljZSAqc2EgPSBzaGFyZWRfY29sbGVjdG9yOworCWRzYV9wb2ludGVyICpjaHVu a19hcnJheTsKKwlwZ2NhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKmNodW5rOworCisJLyogTG9jayB0 aGUgc2hhcmVkIHN0YXRlLiAqLworCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19FWENM VVNJVkUpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBub3QgYXR0YWNoZWQgdG8gdGhlIHNoYXJlZCBh ZHZpY2UgY29sbGVjdG9yIHlldCwgZml4IHRoYXQgbm93LgorCSAqIElmIHdlJ3JlIHRoZSBmaXJz dCBvbmVzIHRvIGF0dGFjaCwgd2UgbWF5IG5lZWQgdG8gY3JlYXRlIHRoZSBvYmplY3QuCisJICov CisJaWYgKHNhID09IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IgPT0g SW52YWxpZERzYVBvaW50ZXIpCisJCQlzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9CisJCQkJZHNh X2FsbG9jYXRlMChhcmVhLCBzaXplb2YocGdjYV9zaGFyZWRfYWR2aWNlKSk7CisJCXNoYXJlZF9j b2xsZWN0b3IgPSBzYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzdGF0ZS0+c2hhcmVkX2NvbGxl Y3Rvcik7CisJfQorCisJLyoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgc29tZSBvdGhlciBiYWNr ZW5kIG1heSBoYXZlIHN1Y2NlZWRlZCBpbiBjcmVhdGluZworCSAqIHRoZSBtYWluIGNvbGxlY3Rv ciBvYmplY3QgYnV0IGZhaWxlZCB0byBhbGxvY2F0ZSBhbiBpbml0aWFsIGNodW5rCisJICogYXJy YXksIHNvIHdlIG11c3QgYmUgcHJlcGFyZWQgdG8gYWxsb2NhdGUgdGhlIGNodW5rIGFycmF5IGhl cmUgd2hldGhlcgorCSAqIG9yIG5vdCB3ZSBjcmVhdGVkIHRoZSBjb2xsZWN0b3Igb2JqZWN0Lgor CSAqLworCWlmIChzaGFyZWRfY29sbGVjdG9yLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9 PSAwKQorCXsKKwkJc2EtPmNodW5rcyA9CisJCQlkc2FfYWxsb2NhdGUwKGFyZWEsCisJCQkJCQkg IHNpemVvZihkc2FfcG9pbnRlcikgKiBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRSk7CisJCXNhLT5j aHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9IEFEVklDRV9DSFVOS19BUlJBWV9TSVpFOworCX0K KworCS8qIENvbXB1dGUgY2h1bmsgYW5kIG9mZnNldCBhdCB3aGljaCB0byBzdG9yZSB0aGlzIGFk dmljZS4gKi8KKwljaHVua19udW1iZXIgPSAoc2EtPm5leHRfaWQgLSBzYS0+YmFzZV9pZCkgLyBB RFZJQ0VfQ0hVTktfU0laRTsKKwljaHVua19vZmZzZXQgPSAoc2EtPm5leHRfaWQgLSBzYS0+YmFz ZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCS8qIEdldCB0aGUgYWRkcmVzcyBvZiB0aGUg Y2h1bmsgYXJyYXkgYW5kLCBpZiBuZWVkZWQsIGV4dGVuZCBpdC4gKi8KKwlpZiAoY2h1bmtfbnVt YmVyID49IHNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSkKKwl7CisJCWludAkJCW5ld19z aXplOworCQlkc2FfcG9pbnRlciBuZXdfY2h1bmtzOworCisJCS8qCisJCSAqIERTQSBjYW4ndCBl bmxhcmdlIGFuIGV4aXN0aW5nIGFsbG9jYXRpb24sIHNvIHdlIG11c3QgbWFrZSBhIG5ldworCQkg KiBhbGxvY2F0aW9uIGFuZCBjb3B5IGRhdGEgb3Zlci4KKwkJICovCisJCW5ld19zaXplID0gc2Et PmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplICsgQURWSUNFX0NIVU5LX0FSUkFZX1NJWkU7CisJ CW5ld19jaHVua3MgPSBkc2FfYWxsb2NhdGUwKGFyZWEsIHNpemVvZihkc2FfcG9pbnRlcikgKiBu ZXdfc2l6ZSk7CisJCWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIG5ld19jaHVu a3MpOworCQltZW1jcHkoY2h1bmtfYXJyYXksIGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1 bmtzKSwKKwkJCSAgIHNpemVvZihkc2FfcG9pbnRlcikgKiBzYS0+Y2h1bmtfYXJyYXlfYWxsb2Nh dGVkX3NpemUpOworCQlkc2FfZnJlZShhcmVhLCBzYS0+Y2h1bmtzKTsKKwkJc2EtPmNodW5rcyA9 IG5ld19jaHVua3M7CisJCXNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9IG5ld19zaXpl OworCX0KKwllbHNlCisJCWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHNhLT5j aHVua3MpOworCisJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBkZXNpcmVkIGNodW5rLCBhbGxv Y2F0aW5nIGl0IGlmIG5lZWRlZC4gKi8KKwlpZiAoY2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVyXSA9 PSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJY2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVyXSA9CisJCQlk c2FfYWxsb2NhdGUwKGFyZWEsIHNpemVvZihwZ2NhX3NoYXJlZF9hZHZpY2VfY2h1bmspKTsKKwlj aHVuayA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBjaHVua19hcnJheVtjaHVua19udW1iZXJdKTsK KworCS8qIFNhdmUgcG9pbnRlciBhbmQgYnVtcCBuZXh0LWlkIGNvdW50ZXIuICovCisJQXNzZXJ0 KGNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPT0gSW52YWxpZERzYVBvaW50ZXIpOworCWNo dW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBjYV9wb2ludGVyOworCSsrc2EtPm5leHRfaWQ7 CisKKwkvKiBJZiB3ZSd2ZSBleGNlZWRlZCB0aGUgc3RvcmFnZSBsaW1pdCwgZGlzY2FyZCBvbGQg ZGF0YS4gKi8KKwl0cmltX3NoYXJlZF9hZHZpY2UoYXJlYSwgcGdfY29sbGVjdF9hZHZpY2Vfc2hh cmVkX2NvbGxlY3Rpb25fbGltaXQpOworCisJLyogUmVsZWFzZSBsb2NrIG9uIHNoYXJlZCBzdGF0 ZS4gKi8KKwlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7Cit9CisKKy8qCisgKiBEaXNjYXJk IGNvbGxlY3RlZCBhZHZpY2Ugc3RvcmVkIGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5IGluIGV4Y2Vz cyBvZiB0aGUKKyAqIHNwZWNpZmllZCBsaW1pdC4KKyAqLworc3RhdGljIHZvaWQKK3RyaW1fbG9j YWxfYWR2aWNlKGludCBsaW1pdCkKK3sKKwlwZ2NhX2xvY2FsX2FkdmljZSAqbGEgPSBsb2NhbF9j b2xsZWN0b3I7CisJdWludDY0CQljdXJyZW50X2NvdW50OworCXVpbnQ2NAkJdHJpbV9jb3VudDsK Kwl1aW50NjQJCXRvdGFsX2NodW5rX2NvdW50OworCXVpbnQ2NAkJdHJpbV9jaHVua19jb3VudDsK Kwl1aW50NjQJCXJlbWFpbmluZ19jaHVua19jb3VudDsKKworCS8qIElmIHdlIGhhdmVuJ3QgeWV0 IHJlYWNoZWQgdGhlIGxpbWl0LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uICovCisJY3VycmVudF9j b3VudCA9IGxhLT5uZXh0X2lkIC0gbGEtPm9sZGVzdF9pZDsKKwlpZiAoY3VycmVudF9jb3VudCA8 PSBsaW1pdCkKKwkJcmV0dXJuOworCisJLyogRnJlZSBlbm91Z2ggZW50cmllcyB0byBnZXQgdXMg YmFjayBkb3duIHRvIHRoZSBsaW1pdC4gKi8KKwl0cmltX2NvdW50ID0gY3VycmVudF9jb3VudCAt IGxpbWl0OworCXdoaWxlICh0cmltX2NvdW50ID4gMCkKKwl7CisJCXVpbnQ2NAkJY2h1bmtfbnVt YmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKworCQljaHVua19udW1iZXIgPSAobGEtPm9s ZGVzdF9pZCAtIGxhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19vZmZz ZXQgPSAobGEtPm9sZGVzdF9pZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpFOwor CisJCUFzc2VydChsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0 XSAhPSBOVUxMKTsKKwkJcGZyZWUobGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5lbnRyaWVzW2No dW5rX29mZnNldF0pOworCQlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtf b2Zmc2V0XSA9IE5VTEw7CisJCSsrbGEtPm9sZGVzdF9pZDsKKwkJLS10cmltX2NvdW50OworCX0K KworCS8qIEZyZWUgYW55IGNodW5rcyB0aGF0IGFyZSBub3cgZW50aXJlbHkgdW51c2VkLiAqLwor CXRyaW1fY2h1bmtfY291bnQgPSAobGEtPm9sZGVzdF9pZCAtIGxhLT5iYXNlX2lkKSAvIEFEVklD RV9DSFVOS19TSVpFOworCWZvciAodWludDY0IG4gPSAwOyBuIDwgdHJpbV9jaHVua19jb3VudDsg KytuKQorCQlwZnJlZShsYS0+Y2h1bmtzW25dKTsKKworCS8qIFNsaWRlIHJlbWFpbmluZyBjaHVu ayBwb2ludGVycyBiYWNrIHRvd2FyZCB0aGUgYmFzZSBvZiB0aGUgYXJyYXkuICovCisJdG90YWxf Y2h1bmtfY291bnQgPSAobGEtPm5leHRfaWQgLSBsYS0+YmFzZV9pZCArCisJCQkJCQkgQURWSUNF X0NIVU5LX1NJWkUgLSAxKSAvIEFEVklDRV9DSFVOS19TSVpFOworCXJlbWFpbmluZ19jaHVua19j b3VudCA9IHRvdGFsX2NodW5rX2NvdW50IC0gdHJpbV9jaHVua19jb3VudDsKKwlpZiAocmVtYWlu aW5nX2NodW5rX2NvdW50ID4gMCkKKwkJbWVtbW92ZSgmbGEtPmNodW5rc1swXSwgJmxhLT5jaHVu a3NbdHJpbV9jaHVua19jb3VudF0sCisJCQkJc2l6ZW9mKHBnY2FfbG9jYWxfYWR2aWNlX2NodW5r ICopICogcmVtYWluaW5nX2NodW5rX2NvdW50KTsKKworCS8qIERvbid0IGxlYXZlIHN0YWxlIHBv aW50ZXJzIGFyb3VuZC4gKi8KKwltZW1zZXQoJmxhLT5jaHVua3NbcmVtYWluaW5nX2NodW5rX2Nv dW50XSwgMCwKKwkJICAgc2l6ZW9mKHBnY2FfbG9jYWxfYWR2aWNlX2NodW5rICopCisJCSAgICog KHRvdGFsX2NodW5rX2NvdW50IC0gcmVtYWluaW5nX2NodW5rX2NvdW50KSk7CisKKwkvKiBBZGp1 c3QgYmFzZSBJRCB2YWx1ZSBhY2NvcmRpbmdseS4gKi8KKwlsYS0+YmFzZV9pZCArPSB0cmltX2No dW5rX2NvdW50ICogQURWSUNFX0NIVU5LX1NJWkU7Cit9CisKKy8qCisgKiBEaXNjYXJkIGNvbGxl Y3RlZCBhZHZpY2Ugc3RvcmVkIGluIHNoYXJlZCBtZW1vcnkgaW4gZXhjZXNzIG9mIHRoZQorICog c3BlY2lmaWVkIGxpbWl0LgorICovCitzdGF0aWMgdm9pZAordHJpbV9zaGFyZWRfYWR2aWNlKGRz YV9hcmVhICphcmVhLCBpbnQgbGltaXQpCit7CisJcGdjYV9zaGFyZWRfYWR2aWNlICpzYSA9IHNo YXJlZF9jb2xsZWN0b3I7CisJdWludDY0CQljdXJyZW50X2NvdW50OworCXVpbnQ2NAkJdHJpbV9j b3VudDsKKwl1aW50NjQJCXRvdGFsX2NodW5rX2NvdW50OworCXVpbnQ2NAkJdHJpbV9jaHVua19j b3VudDsKKwl1aW50NjQJCXJlbWFpbmluZ19jaHVua19jb3VudDsKKwlkc2FfcG9pbnRlciAqY2h1 bmtfYXJyYXk7CisKKwkvKiBJZiB3ZSBoYXZlbid0IHlldCByZWFjaGVkIHRoZSBsaW1pdCwgdGhl cmUncyBub3RoaW5nIHRvIGRvLiAqLworCWN1cnJlbnRfY291bnQgPSBzYS0+bmV4dF9pZCAtIHNh LT5vbGRlc3RfaWQ7CisJaWYgKGN1cnJlbnRfY291bnQgPD0gbGltaXQpCisJCXJldHVybjsKKwor CS8qIEdldCBhIHBvaW50ZXIgdG8gdGhlIGNodW5rIGFycmF5LiAqLworCWNodW5rX2FycmF5ID0g ZHNhX2dldF9hZGRyZXNzKGFyZWEsIHNhLT5jaHVua3MpOworCisJLyogRnJlZSBlbm91Z2ggZW50 cmllcyB0byBnZXQgdXMgYmFjayBkb3duIHRvIHRoZSBsaW1pdC4gKi8KKwl0cmltX2NvdW50ID0g Y3VycmVudF9jb3VudCAtIGxpbWl0OworCXdoaWxlICh0cmltX2NvdW50ID4gMCkKKwl7CisJCXVp bnQ2NAkJY2h1bmtfbnVtYmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKwkJcGdjYV9zaGFy ZWRfYWR2aWNlX2NodW5rICpjaHVuazsKKworCQljaHVua19udW1iZXIgPSAoc2EtPm9sZGVzdF9p ZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19vZmZzZXQgPSAo c2EtPm9sZGVzdF9pZCAtIHNhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJCWNo dW5rID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5rX2FycmF5W2NodW5rX251bWJlcl0pOwor CQlBc3NlcnQoY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSAhPSBJbnZhbGlkRHNhUG9pbnRl cik7CisJCWRzYV9mcmVlKGFyZWEsIGNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0pOworCQlj aHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gSW52YWxpZERzYVBvaW50ZXI7CisJCSsrc2Et Pm9sZGVzdF9pZDsKKwkJLS10cmltX2NvdW50OworCX0KKworCS8qIEZyZWUgYW55IGNodW5rcyB0 aGF0IGFyZSBub3cgZW50aXJlbHkgdW51c2VkLiAqLworCXRyaW1fY2h1bmtfY291bnQgPSAoc2Et Pm9sZGVzdF9pZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCWZvciAodWlu dDY0IG4gPSAwOyBuIDwgdHJpbV9jaHVua19jb3VudDsgKytuKQorCQlkc2FfZnJlZShhcmVhLCBj aHVua19hcnJheVtuXSk7CisKKwkvKiBTbGlkZSByZW1haW5pbmcgY2h1bmsgcG9pbnRlcnMgYmFj ayB0b3dhcmQgdGhlIGJhc2Ugb2YgdGhlIGFycmF5LiAqLworCXRvdGFsX2NodW5rX2NvdW50ID0g KHNhLT5uZXh0X2lkIC0gc2EtPmJhc2VfaWQgKworCQkJCQkJIEFEVklDRV9DSFVOS19TSVpFIC0g MSkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlyZW1haW5pbmdfY2h1bmtfY291bnQgPSB0b3RhbF9j aHVua19jb3VudCAtIHRyaW1fY2h1bmtfY291bnQ7CisJaWYgKHJlbWFpbmluZ19jaHVua19jb3Vu dCA+IDApCisJCW1lbW1vdmUoJmNodW5rX2FycmF5WzBdLCAmY2h1bmtfYXJyYXlbdHJpbV9jaHVu a19jb3VudF0sCisJCQkJc2l6ZW9mKGRzYV9wb2ludGVyKSAqIHJlbWFpbmluZ19jaHVua19jb3Vu dCk7CisKKwkvKiBEb24ndCBsZWF2ZSBzdGFsZSBwb2ludGVycyBhcm91bmQuICovCisJbWVtc2V0 KCZjaHVua19hcnJheVtyZW1haW5pbmdfY2h1bmtfY291bnRdLCAwLAorCQkgICBzaXplb2YoZHNh X3BvaW50ZXIpICogKHRvdGFsX2NodW5rX2NvdW50IC0gcmVtYWluaW5nX2NodW5rX2NvdW50KSk7 CisKKwkvKiBBZGp1c3QgYmFzZSBJRCB2YWx1ZSBhY2NvcmRpbmdseS4gKi8KKwlzYS0+YmFzZV9p ZCArPSB0cmltX2NodW5rX2NvdW50ICogQURWSUNFX0NIVU5LX1NJWkU7Cit9CisKKy8qCisgKiBT UUwtY2FsbGFibGUgZnVuY3Rpb24gdG8gZGlzY2FyZCBhZHZpY2UgY29sbGVjdGVkIGluIGJhY2tl bmQtbG9jYWwgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2 aWNlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJaWYgKGxvY2FsX2NvbGxlY3RvciAhPSBOVUxMKQor CQl0cmltX2xvY2FsX2FkdmljZSgwKTsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisKKy8qCisg KiBTUUwtY2FsbGFibGUgZnVuY3Rpb24gdG8gZGlzY2FyZCBhZHZpY2UgY29sbGVjdGVkIGluIHNo YXJlZCBtZW1vcnkKKyAqLworRGF0dW0KK3BnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNl KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJcGdjYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfY29s bGVjdF9hZHZpY2VfYXR0YWNoKCk7CisJZHNhX2FyZWEgICAqYXJlYSA9IHBnX2NvbGxlY3RfYWR2 aWNlX2RzYV9hcmVhKCk7CisKKwlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVT SVZFKTsKKworCS8qCisJICogSWYgd2UncmUgbm90IGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2 aWNlIGNvbGxlY3RvciB5ZXQsIGZpeCB0aGF0IG5vdzsKKwkgKiBidXQgaWYgdGhlIGNvbGxlY3Rv ciBkb2Vzbid0IGV2ZW4gZXhpc3QsIHdlIGNhbiByZXR1cm4gd2l0aG91dCBkb2luZworCSAqIGFu eXRoaW5nIGVsc2UuCisJICovCisJaWYgKHNoYXJlZF9jb2xsZWN0b3IgPT0gTlVMTCkKKwl7CisJ CWlmIChzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9PSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJewor CQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJ fQorCQlzaGFyZWRfY29sbGVjdG9yID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFy ZWRfY29sbGVjdG9yKTsKKwl9CisKKwkvKiBEbyB0aGUgcmVhbCB3b3JrICovCisJdHJpbV9zaGFy ZWRfYWR2aWNlKGFyZWEsIDApOworCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCisJ UEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBTUkYgdG8gcmV0dXJu IGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1vcnkKKyAqLworRGF0dW0KK3Bn X2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJUmV0dXJu U2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOwor CXBnY2FfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3RvcjsKKwlPaWQJCQl1c2VyaWQg PSBHZXRVc2VySWQoKTsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCWlm IChsYSA9PSBOVUxMKQorCQlyZXR1cm4gKERhdHVtKSAwOworCisJLyogTG9vcCBvdmVyIGFsbCBl bnRyaWVzLiAqLworCWZvciAodWludDY0IGlkID0gbGEtPm9sZGVzdF9pZDsgaWQgPCBsYS0+bmV4 dF9pZDsgKytpZCkKKwl7CisJCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCQl1aW50NjQJCWNodW5r X29mZnNldDsKKwkJcGdjYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsKKwkJRGF0dW0JCXZhbHVlc1tQ R19HRVRfQURWSUNFX0NPTFVNTlNdOworCQlib29sCQludWxsc1tQR19HRVRfQURWSUNFX0NPTFVN TlNdID0gezB9OworCisJCWNodW5rX251bWJlciA9IChpZCAtIGxhLT5iYXNlX2lkKSAvIEFEVklD RV9DSFVOS19TSVpFOworCQljaHVua19vZmZzZXQgPSAoaWQgLSBsYS0+YmFzZV9pZCkgJSBBRFZJ Q0VfQ0hVTktfU0laRTsKKworCQljYSA9IGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmll c1tjaHVua19vZmZzZXRdOworCisJCWlmICghbWVtYmVyX2Nhbl9zZXRfcm9sZSh1c2VyaWQsIGNh LT51c2VyaWQpKQorCQkJY29udGludWU7CisKKwkJdmFsdWVzWzBdID0gVUludDY0R2V0RGF0dW0o aWQpOworCQl2YWx1ZXNbMV0gPSBPYmplY3RJZEdldERhdHVtKGNhLT51c2VyaWQpOworCQl2YWx1 ZXNbMl0gPSBPYmplY3RJZEdldERhdHVtKGNhLT5kYmlkKTsKKwkJdmFsdWVzWzNdID0gVUludDY0 R2V0RGF0dW0oY2EtPnF1ZXJ5aWQpOworCQl2YWx1ZXNbNF0gPSBUaW1lc3RhbXBUekdldERhdHVt KGNhLT50aW1lc3RhbXApOworCQl2YWx1ZXNbNV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHF1ZXJ5 X3N0cmluZyhjYSkpOworCQl2YWx1ZXNbNl0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGFkdmljZV9z dHJpbmcoY2EpKTsKKworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwg cnNpbmZvLT5zZXREZXNjLAorCQkJCQkJCSB2YWx1ZXMsIG51bGxzKTsKKwl9CisKKwlyZXR1cm4g KERhdHVtKSAwOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIFNSRiB0byByZXR1cm4gYWR2aWNl IGNvbGxlY3RlZCBpbiBzaGFyZWQgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19nZXRfY29sbGVjdGVk X3NoYXJlZF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2lu Zm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJcGdjYV9zaGFyZWRf c3RhdGUgKnN0YXRlID0gcGdfY29sbGVjdF9hZHZpY2VfYXR0YWNoKCk7CisJZHNhX2FyZWEgICAq YXJlYSA9IHBnX2NvbGxlY3RfYWR2aWNlX2RzYV9hcmVhKCk7CisJZHNhX3BvaW50ZXIgKmNodW5r X2FycmF5OworCXBnY2Ffc2hhcmVkX2FkdmljZSAqc2EgPSBzaGFyZWRfY29sbGVjdG9yOworCU9p ZAkJCXVzZXJpZCA9IEdldFVzZXJJZCgpOworCisJSW5pdE1hdGVyaWFsaXplZFNSRihmY2luZm8s IDApOworCisJLyogTG9jayB0aGUgc2hhcmVkIHN0YXRlLiAqLworCUxXTG9ja0FjcXVpcmUoJnN0 YXRlLT5sb2NrLCBMV19TSEFSRUQpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBub3QgYXR0YWNoZWQg dG8gdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yIHlldCwgZml4IHRoYXQgbm93OworCSAqIGJ1 dCBpZiB0aGUgY29sbGVjdG9yIGRvZXNuJ3QgZXZlbiBleGlzdCwgd2UgY2FuIHJldHVybiB3aXRo b3V0IGRvaW5nCisJICogYW55dGhpbmcgZWxzZS4KKwkgKi8KKwlpZiAoc2EgPT0gTlVMTCkKKwl7 CisJCWlmIChzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9PSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJ eworCQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCQkJcmV0dXJuIChEYXR1bSkgMDsK KwkJfQorCQlzaGFyZWRfY29sbGVjdG9yID0gc2EgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc3Rh dGUtPnNoYXJlZF9jb2xsZWN0b3IpOworCX0KKworCS8qIEdldCBhIHBvaW50ZXIgdG8gdGhlIGNo dW5rIGFycmF5LiAqLworCWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHNhLT5j aHVua3MpOworCisJLyogTG9vcCBvdmVyIGFsbCBlbnRyaWVzLiAqLworCWZvciAodWludDY0IGlk ID0gc2EtPm9sZGVzdF9pZDsgaWQgPCBzYS0+bmV4dF9pZDsgKytpZCkKKwl7CisJCXVpbnQ2NAkJ Y2h1bmtfbnVtYmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKwkJcGdjYV9zaGFyZWRfYWR2 aWNlX2NodW5rICpjaHVuazsKKwkJcGdjYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsKKwkJRGF0dW0J CXZhbHVlc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdOworCQlib29sCQludWxsc1tQR19HRVRfQURW SUNFX0NPTFVNTlNdID0gezB9OworCisJCWNodW5rX251bWJlciA9IChpZCAtIHNhLT5iYXNlX2lk KSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19vZmZzZXQgPSAoaWQgLSBzYS0+YmFzZV9p ZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljaHVuayA9IGRzYV9nZXRfYWRkcmVzcyhhcmVh LCBjaHVua19hcnJheVtjaHVua19udW1iZXJdKTsKKwkJY2EgPSBkc2FfZ2V0X2FkZHJlc3MoYXJl YSwgY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7CisKKwkJaWYgKCFtZW1iZXJfY2FuX3Nl dF9yb2xlKHVzZXJpZCwgY2EtPnVzZXJpZCkpCisJCQljb250aW51ZTsKKworCQl2YWx1ZXNbMF0g PSBVSW50NjRHZXREYXR1bShpZCk7CisJCXZhbHVlc1sxXSA9IE9iamVjdElkR2V0RGF0dW0oY2Et PnVzZXJpZCk7CisJCXZhbHVlc1syXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPmRiaWQpOworCQl2 YWx1ZXNbM10gPSBVSW50NjRHZXREYXR1bShjYS0+cXVlcnlpZCk7CisJCXZhbHVlc1s0XSA9IFRp bWVzdGFtcFR6R2V0RGF0dW0oY2EtPnRpbWVzdGFtcCk7CisJCXZhbHVlc1s1XSA9IENTdHJpbmdH ZXRUZXh0RGF0dW0ocXVlcnlfc3RyaW5nKGNhKSk7CisJCXZhbHVlc1s2XSA9IENTdHJpbmdHZXRU ZXh0RGF0dW0oYWR2aWNlX3N0cmluZyhjYSkpOworCisJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJz aW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsCisJCQkJCQkJIHZhbHVlcywgbnVsbHMp OworCX0KKworCS8qIFJlbGVhc2UgbG9jayBvbiBzaGFyZWQgc3RhdGUuICovCisJTFdMb2NrUmVs ZWFzZSgmc3RhdGUtPmxvY2spOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dCBi L2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjU3Yjk2ZWU4MzUKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2V4cGVjdGVkL2xvY2FsX2Nv bGxlY3Rvci5vdXQKQEAgLTAsMCArMSw2OSBAQAorQ1JFQVRFIEVYVEVOU0lPTiBwZ19jb2xsZWN0 X2FkdmljZTsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9xdWVyeSA9IG9mZjsKKy0tIFRyeSBjbGVhcmlu ZyBhZHZpY2UgYmVmb3JlIHdlJ3ZlIGNvbGxlY3RlZCBhbnkuCitTRUxFQ1QgcGdfY2xlYXJfY29s bGVjdGVkX2xvY2FsX2FkdmljZSgpOworIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2Ug CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworLS0gU2V0 IGEgc21hbGwgYWR2aWNlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3ZSdsbCBleGNlZWQgaXQu CitTRVQgcGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDI7CistLSBF bmFibGUgdGhlIGNvbGxlY3Rvci4KK1NFVCBwZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0 b3IgPSBvbjsKKy0tIFNldCB1cCBhIGR1bW15IHRhYmxlLgorQ1JFQVRFIFRBQkxFIGR1bW15X3Rh YmxlIChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlLCBwYXJhbGxlbF93b3JrZXJzID0gMCk7CistLSBUZXN0IHF1ZXJpZXMuCitTRUxF Q1QgKiBGUk9NIGR1bW15X3RhYmxlIGEsIGR1bW15X3RhYmxlIGI7CisgYSB8IGIgfCBhIHwgYiAK Ky0tLSstLS0rLS0tKy0tLQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSBkdW1teV90YWJsZTsK KyBhIHwgYiAKKy0tLSstLS0KKygwIHJvd3MpCisKKy0tIFNob3VsZCByZXR1cm4gdGhlIGFkdmlj ZSBmcm9tIHRoZSBzZWNvbmQgdGVzdCBxdWVyeS4KK1NFVCBwZ19jb2xsZWN0X2FkdmljZS5sb2Nh bF9jb2xsZWN0b3IgPSBvZmY7CitTRUxFQ1QgYWR2aWNlIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9s b2NhbF9hZHZpY2UoKSBPUkRFUiBCWSBpZCBERVNDIExJTUlUIDE7CisgICAgICAgICBhZHZpY2Ug ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNFUV9TQ0FOKGR1bW15X3RhYmxl KSArCisgTk9fR0FUSEVSKGR1bW15X3RhYmxlKQorKDEgcm93KQorCistLSBOb3cgdHJ5IGNsZWFy aW5nIGFkdmljZSBhZ2Fpbi4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNl KCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBSYWlzZSB0aGUgY29sbGVjdGlvbiBs aW1pdCBzbyB0aGF0IHRoZSBjb2xsZWN0b3IgdXNlcyBtdWx0aXBsZSBjaHVua3MuCitTRVQgcGdf Y29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDIwMDA7CitTRVQgcGdfY29s bGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdG9yID0gb247CistLSBQdXNoIGEgYnVuY2ggb2YgcXVl cmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitETyAkJAorQkVHSU4KKwlGT1IgeCBJTiAxLi4y MDAwIExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICogRlJPTSBkdW1teV90YWJsZSc7CisJRU5EIExP T1A7CitFTkQKKyQkOworLS0gQ2hlY2sgdGhhdCB0aGUgY29sbGVjdG9yIHdvcmtlZC4KK1NFTEVD VCBDT1VOVCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgY291bnQg CistLS0tLS0tCisgIDIwMDAKKygxIHJvdykKKworLS0gQW5kIGNsZWFyIG9uZSBtb3JlIHRpbWUs IHRvIHZlcmlmeSB0aGF0IHRoaXMgZG9lc24ndCBjYXVzZSBhIHByb2JsZW0KKy0tIGV2ZW4gd2l0 aCBhIGxhcmdlciBudW1iZXIgb2YgZW50cmllcy4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRf bG9jYWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9j b250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2ludGVyZmFjZS5jIGIvY29udHJpYi9wZ19jb2xsZWN0 X2FkdmljZS9pbnRlcmZhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uZmViMTE5NzQxNTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2 aWNlL2ludGVyZmFjZS5jCkBAIC0wLDAgKzEsMzAzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBpbnRlcmZhY2UuYworICoJICBpbnRlcmZhY2Ugcm91dGluZXMgZm9yIHRoZSBwbGFuIGFk dmljZSBjb2xsZWN0b3IKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNiwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfY29sbGVjdF9h ZHZpY2UvaW50ZXJmYWNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ19jb2xsZWN0X2FkdmljZS5oIgorCisjaW5jbHVk ZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCisjaW5jbHVkZSAi c3RvcmFnZS9kc21fcmVnaXN0cnkuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKworUEdfTU9E VUxFX01BR0lDOworCisvKiBTaGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCitzdGF0aWMgcGdjYV9z aGFyZWRfc3RhdGUgKnBnY2Ffc3RhdGUgPSBOVUxMOworc3RhdGljIGRzYV9hcmVhICpwZ2NhX2Rz YV9hcmVhID0gTlVMTDsKKworLyogR1VDIHZhcmlhYmxlcyAqLworYm9vbAkJcGdfY29sbGVjdF9h ZHZpY2VfbG9jYWxfY29sbGVjdG9yID0gZmFsc2U7CitpbnQJCQlwZ19jb2xsZWN0X2FkdmljZV9s b2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMDsKK2Jvb2wJCXBnX2NvbGxlY3RfYWR2aWNlX3NoYXJl ZF9jb2xsZWN0b3IgPSBmYWxzZTsKK2ludAkJCXBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xs ZWN0aW9uX2xpbWl0ID0gMDsKKworLyogU2hhZG93IHZhcmlhYmxlcyBmb3IgR1VDIGFzc2lnbiBo b29rcyAqLworc3RhdGljIGJvb2wgcGdfY29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdG9yX2Fz X2Fzc2lnbmVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRf Y29sbGVjdG9yX2FzX2Fzc2lnbmVkID0gZmFsc2U7CisKKy8qIE90aGVyIGZpbGUtbGV2ZWwgZ2xv YmFscyAqLworc3RhdGljIHZvaWQgKCpyZXF1ZXN0X2FkdmljZV9nZW5lcmF0aW9uX2ZuKSAoYm9v bCBhY3RpdmF0ZSkgPSBOVUxMOworc3RhdGljIHBsYW5uZXJfc2h1dGRvd25faG9va190eXBlIHBy ZXZfcGxhbm5lcl9zaHV0ZG93biA9IE5VTEw7CitzdGF0aWMgTWVtb3J5Q29udGV4dCBwZ2NhX21l bW9yeV9jb250ZXh0ID0gTlVMTDsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLworc3RhdGlj IHZvaWQgcGdjYV9pbml0X3NoYXJlZF9zdGF0ZSh2b2lkICpwdHIsIHZvaWQgKmFyZyk7CitzdGF0 aWMgdm9pZCBwZ2NhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkg KnBhcnNlLAorCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJICBQ bGFubmVkU3RtdCAqcHN0bXQpOworc3RhdGljIHZvaWQgcGdfY29sbGVjdF9hZHZpY2VfbG9jYWxf Y29sbGVjdG9yX2Fzc2lnbl9ob29rKGJvb2wgbmV3dmFsLAorCQkJCQkJCQkJCQkJCQkgIHZvaWQg KmV4dHJhKTsKK3N0YXRpYyB2b2lkIHBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3Jf YXNzaWduX2hvb2soYm9vbCBuZXd2YWwsCisJCQkJCQkJCQkJCQkJCSAgIHZvaWQgKmV4dHJhKTsK K3N0YXRpYyBEZWZFbGVtICpmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShMaXN0ICpkZWZsaXN0LCBj aGFyICpkZWZuYW1lKTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3Zv aWQKK19QR19pbml0KHZvaWQpCit7CisJLyoKKwkgKiBHZXQgYSBwb2ludGVyIHNvIHdlIGNhbiBj YWxsIHBnX3BsYW5fYWR2aWNlX3JlcXVlc3RfYWR2aWNlX2dlbmVyYXRpb24uCisJICoKKwkgKiBX ZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIGRlZmluaW5nIGN1c3RvbSBHVUNzOyBvdGhlcndpc2Us IG91ciBhc3NpZ24KKwkgKiBob29rIHdpbGwgdHJ5IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIHBvaW50 ZXIgYmVmb3JlIGl0J3MgaW5pdGlhbGl6ZWQuCisJICoKKwkgKiBXZSBhbHNvIG5lZWQgdG8gZG8g dGhpcyBiZWZvcmUgaW5zdGFsbGluZyBvdXIgb3duIGhvb2tzLCBzbyB0aGF0IGlmCisJICogcGdf cGxhbl9hZHZpY2UgaXMgbm90IHlldCBsb2FkZWQsIGl0IHdpbGwgaW5zdGFsbCBpdHMgaG9va3Mg YmVmb3JlIHdlCisJICogaW5zdGFsbCBvdXJzLiAoU2VlIGNvbW1lbnRzIGluIHBnY2FfcGxhbm5l cl9zaHV0ZG93bi4pCisJICovCisJcmVxdWVzdF9hZHZpY2VfZ2VuZXJhdGlvbl9mbiA9CisJCWxv YWRfZXh0ZXJuYWxfZnVuY3Rpb24oInBnX3BsYW5fYWR2aWNlIiwKKwkJCQkJCQkgICAicGdfcGxh bl9hZHZpY2VfcmVxdWVzdF9hZHZpY2VfZ2VuZXJhdGlvbiIsCisJCQkJCQkJICAgdHJ1ZSwgTlVM TCk7CisKKwkvKiBEZWZpbmUgb3VyIEdVQ3MuICovCisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxl KCJwZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0b3IiLAorCQkJCQkJCSAiRW5hYmxlIHRo ZSBsb2NhbCBhZHZpY2UgY29sbGVjdG9yLiIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJICZwZ19j b2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3IsCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQ R0NfVVNFUlNFVCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgcGdfY29sbGVj dF9hZHZpY2VfbG9jYWxfY29sbGVjdG9yX2Fzc2lnbl9ob29rLAorCQkJCQkJCSBOVUxMKTsKKwor CURlZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0 aW9uX2xpbWl0IiwKKwkJCQkJCQkiIyBvZiBhZHZpY2UgZW50cmllcyB0byByZXRhaW4gaW4gcGVy LWJhY2tlbmQgbWVtb3J5IiwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCSZwZ19jb2xsZWN0X2Fkdmlj ZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5UX01BWCwK KwkJCQkJCQlQR0NfVVNFUlNFVCwKKwkJCQkJCQkwLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVM TCwKKwkJCQkJCQlOVUxMKTsKKworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfY29sbGVj dF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvciIsCisJCQkJCQkJICJFbmFibGUgdGhlIHNoYXJlZCBh ZHZpY2UgY29sbGVjdG9yLiIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJICZwZ19jb2xsZWN0X2Fk dmljZV9zaGFyZWRfY29sbGVjdG9yLAorCQkJCQkJCSBmYWxzZSwKKwkJCQkJCQkgUEdDX1NVU0VU LAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBwZ19jb2xsZWN0X2FkdmljZV9z aGFyZWRfY29sbGVjdG9yX2Fzc2lnbl9ob29rLAorCQkJCQkJCSBOVUxMKTsKKworCURlZmluZUN1 c3RvbUludFZhcmlhYmxlKCJwZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1p dCIsCisJCQkJCQkJIiMgb2YgYWR2aWNlIGVudHJpZXMgdG8gcmV0YWluIGluIHNoYXJlZCBtZW1v cnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xs ZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5UX01BWCwKKwkJCQkJCQlQR0Nf U1VTRVQsCisJCQkJCQkJMCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVM TCk7CisKKwlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoInBnX2NvbGxlY3RfYWR2aWNlIik7CisKKwkv KiBJbnN0YWxsIGhvb2tzICovCisJcHJldl9wbGFubmVyX3NodXRkb3duID0gcGxhbm5lcl9zaHV0 ZG93bl9ob29rOworCXBsYW5uZXJfc2h1dGRvd25faG9vayA9IHBnY2FfcGxhbm5lcl9zaHV0ZG93 bjsKK30KKworLyoKKyAqIEluaXRpYWxpemUgc2hhcmVkIHN0YXRlIHdoZW4gZmlyc3QgY3JlYXRl ZC4KKyAqLworc3RhdGljIHZvaWQKK3BnY2FfaW5pdF9zaGFyZWRfc3RhdGUodm9pZCAqcHRyLCB2 b2lkICphcmcpCit7CisJcGdjYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gKHBnY2Ffc2hhcmVkX3N0 YXRlICopIHB0cjsKKworCUxXTG9ja0luaXRpYWxpemUoJnN0YXRlLT5sb2NrLAorCQkJCQkgTFdM b2NrTmV3VHJhbmNoZUlkKCJwZ19jb2xsZWN0X2FkdmljZV9sb2NrIikpOworCXN0YXRlLT5kc2Ff dHJhbmNoZSA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfY29sbGVjdF9hZHZpY2VfZHNhIik7CisJ c3RhdGUtPmFyZWEgPSBEU0FfSEFORExFX0lOVkFMSUQ7CisJc3RhdGUtPnNoYXJlZF9jb2xsZWN0 b3IgPSBJbnZhbGlkRHNhUG9pbnRlcjsKK30KKworLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8g YSBtZW1vcnkgY29udGV4dCB3aGVyZSBsb25nLWxpdmVkIGRhdGEgbWFuYWdlZCBieSB0aGlzCisg KiBtb2R1bGUgY2FuIGJlIHN0b3JlZC4KKyAqLworTWVtb3J5Q29udGV4dAorcGdfY29sbGVjdF9h ZHZpY2VfZ2V0X21jeHQodm9pZCkKK3sKKwlpZiAocGdjYV9tZW1vcnlfY29udGV4dCA9PSBOVUxM KQorCQlwZ2NhX21lbW9yeV9jb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcE1lbW9y eUNvbnRleHQsCisJCQkJCQkJCQkJCQkJInBnX2NvbGxlY3RfYWR2aWNlIiwKKwkJCQkJCQkJCQkJ CQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCXJldHVybiBwZ2NhX21lbW9yeV9jb250ZXh0 OworfQorCisvKgorICogR2V0IGEgcG9pbnRlciB0byBvdXIgc2hhcmVkIHN0YXRlLgorICoKKyAq IElmIG5vIHNoYXJlZCBzdGF0ZSBleGlzdHMsIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBpdC4gSWYg aXQgZG9lcyBleGlzdCBidXQKKyAqIHRoaXMgYmFja2VuZCBoYXMgbm90IHlldCBhY2Nlc3NlZCBp dCwgYXR0YWNoIHRvIGl0LiBPdGhlcndpc2UsIGp1c3QgcmV0dXJuCisgKiBvdXIgY2FjaGVkIHBv aW50ZXIuCisgKi8KK3BnY2Ffc2hhcmVkX3N0YXRlICoKK3BnX2NvbGxlY3RfYWR2aWNlX2F0dGFj aCh2b2lkKQoreworCWlmIChwZ2NhX3N0YXRlID09IE5VTEwpCisJeworCQlib29sCQlmb3VuZDsK KworCQlwZ2NhX3N0YXRlID0KKwkJCUdldE5hbWVkRFNNU2VnbWVudCgicGdfY29sbGVjdF9hZHZp Y2UiLCBzaXplb2YocGdjYV9zaGFyZWRfc3RhdGUpLAorCQkJCQkJCSAgIHBnY2FfaW5pdF9zaGFy ZWRfc3RhdGUsICZmb3VuZCwgTlVMTCk7CisJfQorCisJcmV0dXJuIHBnY2Ffc3RhdGU7Cit9CisK Ky8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHBnX2NvbGxlY3RfYWR2aWNlJ3MgRFNBIGFyZWEs IGNyZWF0aW5nIGl0IGlmIG5lZWRlZC4KKyAqLworZHNhX2FyZWEgKgorcGdfY29sbGVjdF9hZHZp Y2VfZHNhX2FyZWEodm9pZCkKK3sKKwlpZiAocGdjYV9kc2FfYXJlYSA9PSBOVUxMKQorCXsKKwkJ cGdjYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfY29sbGVjdF9hZHZpY2VfYXR0YWNoKCk7CisJ CWRzYV9oYW5kbGUJYXJlYV9oYW5kbGU7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwor CQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBnX2NvbGxlY3RfYWR2aWNlX2dl dF9tY3h0KCkpOworCisJCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUp OworCQlhcmVhX2hhbmRsZSA9IHN0YXRlLT5hcmVhOworCQlpZiAoYXJlYV9oYW5kbGUgPT0gRFNB X0hBTkRMRV9JTlZBTElEKQorCQl7CisJCQlwZ2NhX2RzYV9hcmVhID0gZHNhX2NyZWF0ZShzdGF0 ZS0+ZHNhX3RyYW5jaGUpOworCQkJZHNhX3BpbihwZ2NhX2RzYV9hcmVhKTsKKwkJCXN0YXRlLT5h cmVhID0gZHNhX2dldF9oYW5kbGUocGdjYV9kc2FfYXJlYSk7CisJCQlMV0xvY2tSZWxlYXNlKCZz dGF0ZS0+bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+ bG9jayk7CisJCQlwZ2NhX2RzYV9hcmVhID0gZHNhX2F0dGFjaChhcmVhX2hhbmRsZSk7CisJCX0K KworCQlkc2FfcGluX21hcHBpbmcocGdjYV9kc2FfYXJlYSk7CisKKwkJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCXJldHVybiBwZ2NhX2RzYV9hcmVhOworfQorCisv KgorICogQWZ0ZXIgcGxhbm5pbmcgaXMgY29tcGxldGUsIHJldHJpZXZlIHRoZSBhZHZpY2Ugc3Ry aW5nLCBpZiBwcmVzZW50LCBhbmQKKyAqIHBhc3MgaXQgdGhyb3VnaCB0byB0aGUgY29sbGVjdG9y LgorICovCitzdGF0aWMgdm9pZAorcGdjYV9wbGFubmVyX3NodXRkb3duKFBsYW5uZXJHbG9iYWwg Kmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIFBs YW5uZWRTdG10ICpwc3RtdCkKK3sKKwlEZWZFbGVtICAgICpwZ3BhX2l0ZW07CisJRGVmRWxlbSAg ICAqYWR2aWNlX3N0cmluZ19pdGVtOworCWNoYXIJICAgKmFkdmljZV9zdHJpbmc7CisKKwkvKgor CSAqIFBhc3MgY2FsbCB0byBwcmV2aW91cyBob29rLgorCSAqCisJICogV2Ugd2FudCB0byBiZSBj YWxsZWQgYWZ0ZXIgcGdfcGxhbl9hZHZpY2UncyBzaHV0ZG93biBob29rIGhhcyBhbHJlYWR5CisJ ICogZXhlY3V0ZWQuIE91ciBfUEdfaW5pdCgpIG1ha2VzIHN1cmUgdGhhdCBwZ19wbGFuX2Fkdmlj ZSdzIGhvb2tzIGFyZQorCSAqIGFsd2F5cyBsb2FkZWQgYmVmb3JlIG91cnMsIGFuZCBoZXJlIHdl IHBhc3MgdGhlIGhvb2sgY2FsbCBkb3duIGZpcnN0LAorCSAqIGJlZm9yZSBkb2luZyBvdXIgb3du IHdvcmsuIFRoZSBjb21iaW5hdGlvbiBvZiB0aG9zZSB0d28gdGhpbmdzIHNob3VsZAorCSAqIGJl IGdvb2QgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRoZSBhZHZpY2Ugc3RyaW5nIGlzIGFscmVhZHkg cHJlc2VudCB3aGVuCisJICogd2UgZ28gbG9va2luZyBmb3IgaXQuCisJICovCisJaWYgKHByZXZf cGxhbm5lcl9zaHV0ZG93bikKKwkJKCpwcmV2X3BsYW5uZXJfc2h1dGRvd24pIChnbG9iLCBwYXJz ZSwgcXVlcnlfc3RyaW5nLCBwc3RtdCk7CisKKwkvKiBGaXNoIG91dCB0aGUgYWR2aWNlIHN0cmlu Zy4gSWYgbm90IGZvdW5kLCBkbyBub3RoaW5nLiAqLworCXBncGFfaXRlbSA9IGZpbmRfZGVmZWxl bV9ieV9kZWZuYW1lKHBzdG10LT5leHRlbnNpb25fc3RhdGUsCisJCQkJCQkJCQkJInBnX3BsYW5f YWR2aWNlIik7CisJaWYgKHBncGFfaXRlbSA9PSBOVUxMKQorCQlyZXR1cm47CisJYWR2aWNlX3N0 cmluZ19pdGVtID0gZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUoKExpc3QgKikgcGdwYV9pdGVtLT5h cmcsCisJCQkJCQkJCQkJCQkgImFkdmljZV9zdHJpbmciKTsKKwlpZiAoYWR2aWNlX3N0cmluZ19p dGVtID09IE5VTEwpCisJCXJldHVybjsKKwlhZHZpY2Vfc3RyaW5nID0gc3RyVmFsKGFkdmljZV9z dHJpbmdfaXRlbS0+YXJnKTsKKworCS8qCisJICogUGFzcyBpdCB0aHJvdWdoIHRvIHRoZSBhY3R1 YWwgY29sbGVjdG9yLiBCdXQsIGlmIGl0J3MgdGhlIGVtcHR5IHN0cmluZywKKwkgKiB3ZSBhc3N1 bWUgdGhhdCBjb2xsZWN0aW5nIGl0IGlzIHVuaW50ZXJlc3RpbmcuCisJICovCisJaWYgKGFkdmlj ZV9zdHJpbmdbMF0gIT0gJ1wwJykKKwkJcGdfY29sbGVjdF9hZHZpY2Vfc2F2ZShwc3RtdC0+cXVl cnlJZCwgcXVlcnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nKTsKK30KKworLyoKKyAqIHBnY2FfcGxh bm5lcl9zaHV0ZG93biB3b24ndCBmaW5kIGFueSBhZHZpY2UgdG8gY29sbGVjdCB1bmxlc3Mgd2Un dmUKKyAqIHJlcXVlc3RlZCB0aGF0IGl0IGJlIGdlbmVyYXRlZC4gU28sIHdoZW5ldmVyIHRoZSBl ZmZlY3RpdmUgdmFsdWUgb2YKKyAqIHBnX2NvbGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3RvciBj aGFuZ2VzLCBlaXRoZXIgbWFrZSBvcgorICogcmV2b2tlIGEgcmVxdWVzdCBmb3IgYWR2aWNlIGdl bmVyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xs ZWN0b3JfYXNzaWduX2hvb2soYm9vbCBuZXd2YWwsIHZvaWQgKmV4dHJhKQoreworCWlmIChwZ19j b2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3JfYXNfYXNzaWduZWQgJiYgIW5ld3ZhbCkKKwkJ KCpyZXF1ZXN0X2FkdmljZV9nZW5lcmF0aW9uX2ZuKSAoZmFsc2UpOworCWlmICghcGdfY29sbGVj dF9hZHZpY2VfbG9jYWxfY29sbGVjdG9yX2FzX2Fzc2lnbmVkICYmIG5ld3ZhbCkKKwkJKCpyZXF1 ZXN0X2FkdmljZV9nZW5lcmF0aW9uX2ZuKSAodHJ1ZSk7CisJcGdfY29sbGVjdF9hZHZpY2VfbG9j YWxfY29sbGVjdG9yX2FzX2Fzc2lnbmVkID0gbmV3dmFsOworfQorCisvKgorICogU2FtZSBhcyBh Ym92ZSwgYnV0IGZvciBwZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdG9yCisgKi8KK3N0 YXRpYyB2b2lkCitwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdG9yX2Fzc2lnbl9ob29r KGJvb2wgbmV3dmFsLCB2b2lkICpleHRyYSkKK3sKKwlpZiAocGdfY29sbGVjdF9hZHZpY2Vfc2hh cmVkX2NvbGxlY3Rvcl9hc19hc3NpZ25lZCAmJiAhbmV3dmFsKQorCQkoKnJlcXVlc3RfYWR2aWNl X2dlbmVyYXRpb25fZm4pIChmYWxzZSk7CisJaWYgKCFwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRf Y29sbGVjdG9yX2FzX2Fzc2lnbmVkICYmIG5ld3ZhbCkKKwkJKCpyZXF1ZXN0X2FkdmljZV9nZW5l cmF0aW9uX2ZuKSAodHJ1ZSk7CisJcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rvcl9h c19hc3NpZ25lZCA9IG5ld3ZhbDsKK30KKworLyoKKyAqIFNlYXJjaCBhIGxpc3Qgb2YgRGVmRWxl bSBvYmplY3RzIGZvciBhIGdpdmVuIGRlZm5hbWUuCisgKi8KK3N0YXRpYyBEZWZFbGVtICoKK2Zp bmRfZGVmZWxlbV9ieV9kZWZuYW1lKExpc3QgKmRlZmxpc3QsIGNoYXIgKmRlZm5hbWUpCit7CisJ Zm9yZWFjaF9ub2RlKERlZkVsZW0sIGl0ZW0sIGRlZmxpc3QpCisJeworCQlpZiAoc3RyY21wKGl0 ZW0tPmRlZm5hbWUsIGRlZm5hbWUpID09IDApCisJCQlyZXR1cm4gaXRlbTsKKwl9CisKKwlyZXR1 cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvbWVzb24u YnVpbGQgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jYTdkNWVjZmYxYQotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvbWVzb24uYnVpbGQKQEAgLTAsMCArMSw0MSBA QAorIyBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKworcGdfY29sbGVjdF9hZHZpY2Vfc291cmNlcyA9IGZpbGVzKAorICAnY29sbGVj dG9yLmMnLAorICAnaW50ZXJmYWNlLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93 cycKKyAgcGdfY29sbGVjdF9hZHZpY2Vfc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nlc3Mod2lu MzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3BnX2NvbGxlY3RfYWR2aWNl JywKKyAgICAnLS1GSUxFREVTQycsICdwZ19jb2xsZWN0X2FkdmljZSAtIGNvbGxlY3QgcXVlcmll cyBhbmQgdGhlaXIgcGxhbiBhZHZpY2Ugc3RyaW5ncycsXSkKK2VuZGlmCisKK3BnX2NvbGxlY3Rf YWR2aWNlID0gc2hhcmVkX21vZHVsZSgncGdfY29sbGVjdF9hZHZpY2UnLAorICBwZ19jb2xsZWN0 X2FkdmljZV9zb3VyY2VzLAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBpbmNsdWRlX2RpcmVjdG9y aWVzKCcuJyksCisgIGt3YXJnczogY29udHJpYl9tb2RfYXJncywKKykKK2NvbnRyaWJfdGFyZ2V0 cyArPSBwZ19jb2xsZWN0X2FkdmljZQorCitpbnN0YWxsX2RhdGEoCisgICdwZ19jb2xsZWN0X2Fk dmljZS0tMS4wLnNxbCcsCisgICdwZ19jb2xsZWN0X2FkdmljZS5jb250cm9sJywKKyAga3dhcmdz OiBjb250cmliX2RhdGFfYXJncywKKykKKwordGVzdHMgKz0geworICAnbmFtZSc6ICdwZ19jb2xs ZWN0X2FkdmljZScsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAorICAnYmQn OiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAncmVncmVzcyc6IHsKKyAgICAnc3FsJzog WworICAgICAgJ2xvY2FsX2NvbGxlY3RvcicsCisgICAgXSwKKyAgfSwKKyAgJ3RhcCc6IHsKKyAg ICAndGVzdHMnOiBbCisgICAgICAndC8wMDFfcmVncmVzcy5wbCcsCisgICAgXSwKKyAgfSwKK30K ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvcGdfY29sbGVjdF9hZHZpY2Ut LTEuMC5zcWwgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLS0x LjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wYmU4NmM1NGZj MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvcGdfY29sbGVj dF9hZHZpY2UtLTEuMC5zcWwKQEAgLTAsMCArMSw0MyBAQAorLyogY29udHJpYi9wZ19jb2xsZWN0 X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBz Y3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lP TgorXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHBnX2NvbGxlY3RfYWR2aWNlIiB0byBsb2Fk IHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2NsZWFyX2NvbGxlY3RlZF9s b2NhbF9hZHZpY2UoKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2Ns ZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UnCitMQU5HVUFHRSBDIFNUUklDVDsKKworQ1JFQVRF IEZVTkNUSU9OIHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkKK1JFVFVSTlMgdm9p ZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2Fkdmlj ZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3Rl ZF9sb2NhbF9hZHZpY2UoCisJT1VUIGlkIGJpZ2ludCwKKwlPVVQgdXNlcmlkIG9pZCwKKwlPVVQg ZGJpZCBvaWQsCisJT1VUIHF1ZXJ5aWQgYmlnaW50LAorCU9VVCBjb2xsZWN0aW9uX3RpbWUgdGlt ZXN0YW1wdHosCisJT1VUIHF1ZXJ5IHRleHQsCisJT1VUIGFkdmljZSB0ZXh0CispCitSRVRVUk5T IFNFVE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19nZXRfY29sbGVjdGVkX2xv Y2FsX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0 X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKAorCU9VVCBpZCBiaWdpbnQsCisJT1VUIHVzZXJpZCBv aWQsCisJT1VUIGRiaWQgb2lkLAorCU9VVCBxdWVyeWlkIGJpZ2ludCwKKwlPVVQgY29sbGVjdGlv bl90aW1lIHRpbWVzdGFtcHR6LAorCU9VVCBxdWVyeSB0ZXh0LAorCU9VVCBhZHZpY2UgdGV4dAor KQorUkVUVVJOUyBTRVRPRiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfZ2V0X2Nv bGxlY3RlZF9zaGFyZWRfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK1JFVk9LRSBBTEwg T04gRlVOQ1RJT04gcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSBGUk9NIFBVQkxJ QzsKK1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNl KCkgRlJPTSBQVUJMSUM7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3Bn X2NvbGxlY3RfYWR2aWNlLmNvbnRyb2wgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2Nv bGxlY3RfYWR2aWNlLmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjYwMWU1ZTI0ZWExCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19jb2xsZWN0X2Fk dmljZS9wZ19jb2xsZWN0X2FkdmljZS5jb250cm9sCkBAIC0wLDAgKzEsNSBAQAorIyBwZ19jb2xs ZWN0X2FkdmljZSBleHRlbnNpb24KK2NvbW1lbnQgPSAnY29sbGVjdCBxdWVyaWVzIGFuZCB0aGUg YXNzb2NpYXRlZCBwbGFuIGFkdmljZScKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVf cGF0aG5hbWUgPSAnJGxpYmRpci9wZ19jb2xsZWN0X2FkdmljZScKK3JlbG9jYXRhYmxlID0gdHJ1 ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2Fkdmlj ZS5oIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ODBjMmM2MzNjNAotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvcGdfY29sbGVjdF9hZHZpY2UuaApA QCAtMCwwICsxLDM5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19jb2xsZWN0X2Fk dmljZS5oCisgKgkgIGRlZmluaXRpb25zIGFuZCBkZWNsYXJhdGlvbnMgZm9yIHBnX2NvbGxlY3Rf YWR2aWNlIG1vZHVsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19jb2xsZWN0X2Fk dmljZS9wZ19jb2xsZWN0X2FkdmljZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNp Zm5kZWYgUEdfQ09MTEVDVF9BRFZJQ0VfSAorI2RlZmluZSBQR19DT0xMRUNUX0FEVklDRV9ICisK KyNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgorI2luY2x1ZGUgInV0aWxzL2RzYS5oIgorCit0 eXBlZGVmIHN0cnVjdCBwZ2NhX3NoYXJlZF9zdGF0ZQoreworCUxXTG9jawkJbG9jazsKKwlpbnQJ CQlkc2FfdHJhbmNoZTsKKwlkc2FfaGFuZGxlCWFyZWE7CisJZHNhX3BvaW50ZXIgc2hhcmVkX2Nv bGxlY3RvcjsKK30gcGdjYV9zaGFyZWRfc3RhdGU7CisKKy8qIEdVQyB2YXJpYWJsZXMgKi8KK2V4 dGVybiBib29sIHBnX2NvbGxlY3RfYWR2aWNlX2xvY2FsX2NvbGxlY3RvcjsKK2V4dGVybiBpbnQJ cGdfY29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdDsKK2V4dGVybiBib29sIHBn X2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3I7CitleHRlcm4gaW50CXBnX2NvbGxlY3Rf YWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0OworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVz ICovCitleHRlcm4gTWVtb3J5Q29udGV4dCBwZ19jb2xsZWN0X2FkdmljZV9nZXRfbWN4dCh2b2lk KTsKK2V4dGVybiBwZ2NhX3NoYXJlZF9zdGF0ZSAqcGdfY29sbGVjdF9hZHZpY2VfYXR0YWNoKHZv aWQpOworZXh0ZXJuIGRzYV9hcmVhICpwZ19jb2xsZWN0X2FkdmljZV9kc2FfYXJlYSh2b2lkKTsK K2V4dGVybiB2b2lkIHBnX2NvbGxlY3RfYWR2aWNlX3NhdmUodWludDY0IHF1ZXJ5SWQsIGNvbnN0 IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJICAgY29uc3QgY2hhciAqYWR2aWNlX3N0cmlu Zyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9zcWwv bG9jYWxfY29sbGVjdG9yLnNxbCBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2Uvc3FsL2xvY2Fs X2NvbGxlY3Rvci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQx YjE4N2M1Mzc1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9z cWwvbG9jYWxfY29sbGVjdG9yLnNxbApAQCAtMCwwICsxLDQ2IEBACitDUkVBVEUgRVhURU5TSU9O IHBnX2NvbGxlY3RfYWR2aWNlOworU0VUIGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2ZmOworCist LSBUcnkgY2xlYXJpbmcgYWR2aWNlIGJlZm9yZSB3ZSd2ZSBjb2xsZWN0ZWQgYW55LgorU0VMRUNU IHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0gU2V0IGEgc21hbGwgYWR2 aWNlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3ZSdsbCBleGNlZWQgaXQuCitTRVQgcGdfY29s bGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDI7CisKKy0tIEVuYWJsZSB0aGUg Y29sbGVjdG9yLgorU0VUIHBnX2NvbGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3RvciA9IG9uOwor CistLSBTZXQgdXAgYSBkdW1teSB0YWJsZS4KK0NSRUFURSBUQUJMRSBkdW1teV90YWJsZSAoYSBp bnQgcHJpbWFyeSBrZXksIGIgdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSwgcGFyYWxsZWxfd29ya2VycyA9IDApOworCistLSBUZXN0IHF1ZXJpZXMuCitTRUxFQ1QgKiBG Uk9NIGR1bW15X3RhYmxlIGEsIGR1bW15X3RhYmxlIGI7CitTRUxFQ1QgKiBGUk9NIGR1bW15X3Rh YmxlOworCistLSBTaG91bGQgcmV0dXJuIHRoZSBhZHZpY2UgZnJvbSB0aGUgc2Vjb25kIHRlc3Qg cXVlcnkuCitTRVQgcGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdG9yID0gb2ZmOworU0VM RUNUIGFkdmljZSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCkgT1JERVIgQlkg aWQgREVTQyBMSU1JVCAxOworCistLSBOb3cgdHJ5IGNsZWFyaW5nIGFkdmljZSBhZ2Fpbi4KK1NF TEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisKKy0tIFJhaXNlIHRoZSBj b2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQgdGhlIGNvbGxlY3RvciB1c2VzIG11bHRpcGxlIGNodW5r cy4KK1NFVCBwZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjAwMDsK K1NFVCBwZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0b3IgPSBvbjsKKworLS0gUHVzaCBh IGJ1bmNoIG9mIHF1ZXJpZXMgdGhyb3VnaCB0aGUgY29sbGVjdG9yLgorRE8gJCQKK0JFR0lOCisJ Rk9SIHggSU4gMS4uMjAwMCBMT09QCisJCUVYRUNVVEUgJ1NFTEVDVCAqIEZST00gZHVtbXlfdGFi bGUnOworCUVORCBMT09QOworRU5ECiskJDsKKworLS0gQ2hlY2sgdGhhdCB0aGUgY29sbGVjdG9y IHdvcmtlZC4KK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2 aWNlKCk7CisKKy0tIEFuZCBjbGVhciBvbmUgbW9yZSB0aW1lLCB0byB2ZXJpZnkgdGhhdCB0aGlz IGRvZXNuJ3QgY2F1c2UgYSBwcm9ibGVtCistLSBldmVuIHdpdGggYSBsYXJnZXIgbnVtYmVyIG9m IGVudHJpZXMuCitTRUxFQ1QgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOwpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS90LzAwMV9yZWdyZXNzLnBsIGIvY29u dHJpYi9wZ19jb2xsZWN0X2FkdmljZS90LzAwMV9yZWdyZXNzLnBsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lZDkzNGQwYzg1OQotLS0gL2Rldi9udWxsCisrKyBiL2Nv bnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbApAQCAtMCwwICsxLDE1MSBA QAorIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKworIyBSdW4gdGhlIGNvcmUgcmVncmVzc2lvbiB0ZXN0cyB1bmRlciBwZ19jb2xs ZWN0X2FkdmljZSBhbmQgcGdfcGxhbl9hZHZpY2UKKyMgdG8gY2hlY2sgZm9yIHByb2JsZW1zLgor dXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIEN3ZCAgICAg ICAgICAgIHF3KGFic19wYXRoKTsKK3VzZSBGaWxlOjpCYXNlbmFtZSBxdyhkaXJuYW1lKTsKKwor dXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRp bHM7Cit1c2UgVGVzdDo6TW9yZTsKKworIyBJbml0aWFsaXplIHRoZSBwcmltYXJ5IG5vZGUKK215 ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdtYWluJyk7Ciskbm9kZS0+ aW5pdCgpOworCisjIFNldCB1cCBvdXIgZGVzaXJlZCBjb25maWd1cmF0aW9uLgorIworIyBXZSBy dW4gd2l0aCBwZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdCBzZXQgdG8g ZW5zdXJlIHRoYXQgdGhlCisjIHBsYW4gdHJlZSB3YWxrZXIgY29kZSBydW5zIGFnYWluc3QgZXZl cnkgcXVlcnkgaW4gdGhlIHJlZ3Jlc3Npb24gdGVzdHMuIElmCisjIHdlJ3JlIHVuYWJsZSB0byBw cm9wZXJseSBhbmFseXplIGFueSBvZiB0aG9zZSBwbGFuIHRyZWVzLCB0aGlzIHRlc3Qgc2hvdWxk CisjIGhvcGVmdWxseSBmYWlsLgorIworIyBXZSBzZXQgcGdfY29sbGVjdF9hZHZpY2UuYWR2aWNl IHRvIGFuIGFkdmljZSBzdHJpbmcgdGhhdCB3aWxsIGNhdXNlIHRoZSBhZHZpY2UKKyMgdHJvdmUg dG8gYmUgcG9wdWxhdGVkIHdpdGggYSBmZXcgZW50cmllcyBvZiB2YXJpb3VzIHNvcnRzLCBidXQg d2hpY2ggd2UgZG8KKyMgbm90IGV4cGVjdCB0byBtYXRjaCBhbnl0aGluZyBpbiB0aGUgcmVncmVz c2lvbiB0ZXN0IHF1ZXJpZXMuIFRoaXMgd2F5LCB0aGUKKyMgcGxhbm5lciBob29rcyB3aWxsIGJl IGNhbGxlZCwgaW1wcm92aW5nIGNvZGUgY292ZXJhZ2UsIGJ1dCBubyBwbGFucyBzaG91bGQKKyMg YWN0dWFsbHkgY2hhbmdlLgorIworIyBwZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBw bGllZF9hZHZpY2U9ZmFsc2UgaXMgbmVlZGVkIHRvIGF2b2lkCisjIGJyZWFraW5nIHJlZ3Jlc3Np b24gdGVzdCBxdWVyaWVzIHRoYXQgdXNlIEVYUExBSU4uIEluIHRoZSByZWFsIHdvcmxkLCBpdAor IyBzZWVtcyBsaWtlIHVzZXJzIHdpbGwgd2FudCBFWFBMQUlOIG91dHB1dCB0byBzaG93IHN1cHBs aWVkIGFkdmljZSBzbyB0aGF0CisjIGl0J3MgY2xlYXIgd2hldGhlciBub3JtYWwgcGxhbm5lciBi ZWhhdmlvciBoYXMgYmVlbiBhbHRlcmVkLCBidXQgaGVyZSB0aGF0J3MKKyMgdW5kZXNpcmFibGUu Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsIDw8RU9NKTsKK3NoYXJlZF9w cmVsb2FkX2xpYnJhcmllcz1wZ19jb2xsZWN0X2FkdmljZQorcGdfY29sbGVjdF9hZHZpY2Uuc2hh cmVkX2NvbGxlY3Rpb25fbGltaXQ9MTAwMDAwMAorcGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2Nv bGxlY3Rvcj10cnVlCitwZ19wbGFuX2FkdmljZS5hZHZpY2U9J1NFUV9TQ0FOKGVudGlyZWx5X2Zp Y3RpdGlvdXMpIEhBU0hfSk9JTih0b3RhbF9mYWJyaWNhdGlvbikgR0FUSEVSKGNvbXBsZXRlbHlf aW1hZ2luYXJ5KScKK3BnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2Fkdmlj ZT1mYWxzZQorRU9NCiskbm9kZS0+c3RhcnQ7CisKK215ICRzcmNkaXIgPSBhYnNfcGF0aCgiLi4v Li4iKTsKKworIyAtLWRscGF0aCBpcyBuZWVkZWQgdG8gYmUgYWJsZSB0byBmaW5kIHRoZSBsb2Nh dGlvbiBvZiByZWdyZXNzLnNvCisjIGFuZCBhbnkgbGlicmFyaWVzIHRoZSByZWdyZXNzaW9uIHRl c3RzIHJlcXVpcmUuCitteSAkZGxwYXRoID0gZGlybmFtZSgkRU5We1JFR1JFU1NfU0hMSUJ9KTsK KworIyAtLW91dHB1dGRpciBwb2ludHMgdG8gdGhlIHBhdGggd2hlcmUgdG8gcGxhY2UgdGhlIG91 dHB1dCBmaWxlcy4KK215ICRvdXRwdXRkaXIgPSAkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRt cF9jaGVjazsKKworIyAtLWlucHV0ZGlyIHBvaW50cyB0byB0aGUgcGF0aCBvZiB0aGUgaW5wdXQg ZmlsZXMuCitteSAkaW5wdXRkaXIgPSAiJHNyY2Rpci9zcmMvdGVzdC9yZWdyZXNzIjsKKworIyBS dW4gdGhlIHRlc3RzLgorbXkgJHJjID0KKyAgc3lzdGVtKCRFTlZ7UEdfUkVHUkVTU30gLiAiICIK KwkgIC4gIi0tYmluZGlyPSAiCisJICAuICItLWRscGF0aD1cIiRkbHBhdGhcIiAiCisJICAuICIt LWhvc3Q9IiAuICRub2RlLT5ob3N0IC4gIiAiCisJICAuICItLXBvcnQ9IiAuICRub2RlLT5wb3J0 IC4gIiAiCisJICAuICItLXNjaGVkdWxlPSRzcmNkaXIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxl bF9zY2hlZHVsZSAiCisJICAuICItLW1heC1jb25jdXJyZW50LXRlc3RzPTIwICIKKwkgIC4gIi0t aW5wdXRkaXI9XCIkaW5wdXRkaXJcIiAiCisJICAuICItLW91dHB1dGRpcj1cIiRvdXRwdXRkaXJc IiIpOworCisjIER1bXAgb3V0IHRoZSByZWdyZXNzaW9uIGRpZmZzIGZpbGUsIGlmIHRoZXJlIGlz IG9uZQoraWYgKCRyYyAhPSAwKQoreworCW15ICRkaWZmcyA9ICIkb3V0cHV0ZGlyL3JlZ3Jlc3Np b24uZGlmZnMiOworCWlmICgtZSAkZGlmZnMpCisJeworCQlwcmludCAiPT09IGR1bXBpbmcgJGRp ZmZzID09PVxuIjsKKwkJcHJpbnQgc2x1cnBfZmlsZSgkZGlmZnMpOworCQlwcmludCAiPT09IEVP RiA9PT1cbiI7CisJfQorfQorCisjIFJlcG9ydCByZXN1bHRzCitpcygkcmMsIDAsICdyZWdyZXNz aW9uIHRlc3RzIHBhc3MnKTsKKworIyBDcmVhdGUgdGhlIGV4dGVuc2lvbiBzbyB3ZSBjYW4gYWNj ZXNzIHRoZSBjb2xsZWN0b3IKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBF WFRFTlNJT04gcGdfY29sbGVjdF9hZHZpY2UnKTsKKworIyBWZXJpZnkgdGhhdCBhIGxhcmdlIGFt b3VudCBvZiBhZHZpY2Ugd2FzIGNvbGxlY3RlZAorbXkgJGFsbF9xdWVyeV9jb3VudCA9ICRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworU0VMRUNUIENPVU5UKCopIEZST00gcGdf Z2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCk7CitFT00KK2NtcF9vaygkYWxsX3F1ZXJ5X2Nv dW50LCAnPicsIDIwMDAwLCAiY29waW91cyBhZHZpY2UgY29sbGVjdGVkIik7CisKKyMgVmVyaWZ5 IHRoYXQgbG90cyBvZiBkaWZmZXJlbnQgYWR2aWNlIHN0cmluZ3Mgd2VyZSBjb2xsZWN0ZWQKK215 ICRkaXN0aW5jdF9xdWVyeV9jb3VudCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxF T00pOworU0VMRUNUIENPVU5UKCopIEZST00KKwkoU0VMRUNUIERJU1RJTkNUIGFkdmljZSBGUk9N IHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpKTsKK0VPTQorY21wX29rKCRkaXN0aW5j dF9xdWVyeV9jb3VudCwgJz4nLCAzMDAwLCAiZGl2ZXJzZSBhZHZpY2UgY29sbGVjdGVkIik7CisK KyMgV2Ugd2FudCB0byB0ZXN0IGZvciB0aGUgcHJlc2VuY2Ugb2Ygb3VyIGtub3duIHRhZ3MgaW4g dGhlIGNvbGxlY3RlZCBhZHZpY2UuCisjIFB1dCBhbGwgdGFncyBpbnRvIHRoZSBoYXNoIHRoYXQg Zm9sbG93czsgbWFwIGFueSB0YWdzIHRoYXQgYXJlbid0IHRlc3RlZAorIyBieSB0aGUgY29yZSBy ZWdyZXNzaW9uIHRlc3RzIHRvIDAsIGFuZCBvdGhlcnMgdG8gMS4KK215ICV0YWdfbWFwID0gKAor CUJJVE1BUF9IRUFQX1NDQU4gPT4gMSwKKwlGT1JFSUdOX0pPSU4gPT4gMCwKKwlHQVRIRVIgPT4g MSwKKwlHQVRIRVJfTUVSR0UgPT4gMSwKKwlIQVNIX0pPSU4gPT4gMSwKKwlJTkRFWF9PTkxZX1ND QU4gPT4gMSwKKwlJTkRFWF9TQ0FOID0+IDEsCisJSk9JTl9PUkRFUiA9PiAxLAorCU1FUkdFX0pP SU5fTUFURVJJQUxJWkUgPT4gMSwKKwlNRVJHRV9KT0lOX1BMQUlOID0+IDEsCisJTkVTVEVEX0xP T1BfTUFURVJJQUxJWkUgPT4gMSwKKwlORVNURURfTE9PUF9NRU1PSVpFID0+IDEsCisJTkVTVEVE X0xPT1BfUExBSU4gPT4gMSwKKwlOT19HQVRIRVIgPT4gMSwKKwlQQVJUSVRJT05XSVNFID0+IDEs CisJU0VNSUpPSU5fTk9OX1VOSVFVRSA9PiAxLAorCVNFTUlKT0lOX1VOSVFVRSA9PiAxLAorCVNF UV9TQ0FOID0+IDEsCisJVElEX1NDQU4gPT4gMSwKKyk7Citmb3IgbXkgJHRhZyAoc29ydCBrZXlz ICV0YWdfbWFwKQoreworCW15ICRjaGVja2l0ID0gJHRhZ19tYXB7JHRhZ307CisKKwkjIFNlYXJj aCBmb3IgdGhlIGdpdmVuIHRhZy4gVGhpcyBpcyBub3QgZW50aXJlbHkgcm9idXN0OiBpdCBjb3Vs ZCBnZXQgdGhyb3duCisJIyBvZmYgYnkgYSB0YWJsZSBhbGlhcyBzdWNoIGFzICJGT1JFSUdOX0pP SU4oIiwgYnV0IHRoYXQgcHJvYmFibHkgd29uJ3QKKwkjIGhhcHBlbiBpbiB0aGUgY29yZSByZWdy ZXNzaW9uIHRlc3RzLgorCW15ICR0YWdfY291bnQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIDw8RU9NKTsKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVk X2FkdmljZSgpCisJV0hFUkUgYWR2aWNlIExJS0UgJyUkdGFnKCUnCitFT00KKworCSMgQ2hlY2sg dGhhdCB0aGUgdGFnIGdvdCBhIG5vbi10cml2aWFsIGFtb3VudCBvZiB1c2UsIHVubGVzcyB0b2xk IG90aGVyd2lzZS4KKwljbXBfb2soJHRhZ19jb3VudCwgJz4nLCAxMCwgIm11bHRpcGxlIHVzZXMg b2YgJHRhZyIpIGlmICRjaGVja2l0OworCisJIyBSZWdhcmRsZXNzLCBub3RlIHRoZSBleGFjdCBj b3VudCBpbiB0aGUgbG9nLCBmb3IgaHVtYW4gY29uc3VtcHRpb24uCisJbm90ZSgiZm91bmQgJHRh Z19jb3VudCBhZHZpY2Ugc3RyaW5ncyBjb250YWluaW5nICR0YWciKTsKK30KKworIyBUcmlnZ2Vy IGEgcGFydGlhbCBjbGVhbnVwIG9mIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciwgYW5kIHRo ZW4gYSBmdWxsCisjIGNsZWFudXAuCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9N KTsKK1NFVCBwZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdD01MDA7CitT RUxFQ1QgKiBGUk9NIHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCk7CitFT00KKwor ZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sIGIv ZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbAppbmRleCBiZGQ0ODY1ZjUzZi4uMmFiNmZhZmJhYjEg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L2NvbnRyaWIuc2dtbApAQCAtMTUyLDYgKzE1Miw3IEBAIENSRUFURSBFWFRFTlNJT04gPHJlcGxh Y2VhYmxlPmV4dGVuc2lvbl9uYW1lPC9yZXBsYWNlYWJsZT47CiAgJnBhZ2VpbnNwZWN0OwogICZw YXNzd29yZGNoZWNrOwogICZwZ2J1ZmZlcmNhY2hlOworICZwZ2NvbGxlY3RhZHZpY2U7CiAgJnBn Y3J5cHRvOwogICZwZ2ZyZWVzcGFjZW1hcDsKICAmcGdsb2dpY2FsaW5zcGVjdDsKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sIGIvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNn bWwKaW5kZXggZDkwYjQzMzhkMmEuLjQwN2ZmM2FiZmZlIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3Nn bWwvZmlsZWxpc3Quc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbApAQCAtMTQ1 LDYgKzE0NSw3IEBACiA8IUVOVElUWSBwYWdlaW5zcGVjdCAgICAgU1lTVEVNICJwYWdlaW5zcGVj dC5zZ21sIj4KIDwhRU5USVRZIHBhc3N3b3JkY2hlY2sgICBTWVNURU0gInBhc3N3b3JkY2hlY2su c2dtbCI+CiA8IUVOVElUWSBwZ2J1ZmZlcmNhY2hlICAgU1lTVEVNICJwZ2J1ZmZlcmNhY2hlLnNn bWwiPgorPCFFTlRJVFkgcGdjb2xsZWN0YWR2aWNlIFNZU1RFTSAicGdjb2xsZWN0YWR2aWNlLnNn bWwiPgogPCFFTlRJVFkgcGdjcnlwdG8gICAgICAgIFNZU1RFTSAicGdjcnlwdG8uc2dtbCI+CiA8 IUVOVElUWSBwZ2ZyZWVzcGFjZW1hcCAgU1lTVEVNICJwZ2ZyZWVzcGFjZW1hcC5zZ21sIj4KIDwh RU5USVRZIHBnbG9naWNhbGluc3BlY3QgIFNZU1RFTSAicGdsb2dpY2FsaW5zcGVjdC5zZ21sIj4K ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wZ2NvbGxlY3RhZHZpY2Uuc2dtbCBiL2RvYy9zcmMv c2dtbC9wZ2NvbGxlY3RhZHZpY2Uuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uMjIwYWFiZTc4YzYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3JjL3NnbWwvcGdj b2xsZWN0YWR2aWNlLnNnbWwKQEAgLTAsMCArMSwyNDQgQEAKKzwhLS0gZG9jL3NyYy9zZ21sL3Bn Y29sbGVjdGFkdmljZS5zZ21sIC0tPgorCis8c2VjdDEgaWQ9InBnY29sbGVjdGFkdmljZSIgeHJl ZmxhYmVsPSJwZ19jb2xsZWN0X2FkdmljZSI+CisgPHRpdGxlPnBnX2NvbGxlY3RfYWR2aWNlICZt ZGFzaDsgY29sbGVjdCBxdWVyaWVzIGFuZCB0aGVpciBwbGFuIGFkdmljZSBzdHJpbmdzPC90aXRs ZT4KKworIDxpbmRleHRlcm0gem9uZT0icGdjb2xsZWN0YWR2aWNlIj4KKyAgPHByaW1hcnk+cGdf Y29sbGVjdF9hZHZpY2U8L3ByaW1hcnk+CisgPC9pbmRleHRlcm0+CisKKyA8cGFyYT4KKyAgVGhl IDxmaWxlbmFtZT5wZ19jb2xsZWN0X2FkdmljZTwvZmlsZW5hbWU+IGV4dGVuc2lvbiBhbGxvd3Mg eW91IHRvCisgIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgcGxhbiBhZHZpY2UgZWFjaCB0aW1lIGEg cXVlcnkgaXMgcGxhbm5lZCBhbmQgc3RvcmUKKyAgdGhlIHF1ZXJ5IGFuZCB0aGUgZ2VuZXJhdGVk IGFkdmljZSBzdHJpbmcgZWl0aGVyIGluIGxvY2FsIG9yIHNoYXJlZCBtZW1vcnkuCisgIE5vdGUg dGhhdCB0aGlzIGV4dGVuc2lvbiByZXF1aXJlcyB0aGUgPHhyZWYgbGlua2VuZD0icGdwbGFuYWR2 aWNlIiAvPiBtb2R1bGUsCisgIHdoaWNoIHBlcmZvcm1zIHRoZSBhY3R1YWwgcGxhbiBhZHZpY2Ug Z2VuZXJhdGlvbjsgdGhpcyBtb2R1bGUgb25seSBrbm93cworICBob3cgdG8gc3RvcmUgdGhlIGdl bmVyYXRlZCBhZHZpY2UgZm9yIGxhdGVyIGV4YW1pbmF0aW9uLiBXaGVuZXZlcgorICA8bGl0ZXJh bD5wZ19jb2xsZWN0X2FkdmljZTwvbGl0ZXJhbD4gaXMgbG9hZGVkLCBpdCB3aWxsIGF1dG9tYXRp Y2FsbHkgbG9hZAorICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4uCisgPC9wYXJh PgorCisgPHBhcmE+CisgIEluIG9yZGVyIHRvIHVzZSB0aGlzIG1vZHVsZSwgeW91IHdpbGwgbmVl ZCB0byBleGVjdXRlCisgIDxsaXRlcmFsPkNSRUFURSBFWFRFTlNJT04gcGdfY29sbGVjdF9hZHZp Y2U8L2xpdGVyYWw+IGluIGF0IGxlYXN0CisgIG9uZSBkYXRhYmFzZSwgc28gdGhhdCB5b3UgaGF2 ZSBhIHdheSB0byBleGFtaW5lIHRoZSBjb2xsZWN0ZWQgYWR2aWNlLgorICBZb3Ugd2lsbCBhbHNv IG5lZWQgdGhlIDxsaXRlcmFsPnBnX2NvbGxlY3RfYWR2aWNlPC9saXRlcmFsPiBtb2R1bGUKKyAg dG8gYmUgbG9hZGVkIGluIGFsbCBzZXNzaW9ucyB3aGVyZSBhZHZpY2UgaXMgdG8gYmUgY29sbGVj dGVkLiBJdCB3aWxsCisgIHVzdWFsbHkgYmUgYmVzdCB0byBkbyB0aGlzIGJ5IGFkZGluZyA8bGl0 ZXJhbD5wZ19jb2xsZWN0X2FkdmljZTwvbGl0ZXJhbD4KKyAgdG8gPHhyZWYgbGlua2VuZD0iZ3Vj LXNoYXJlZC1wcmVsb2FkLWxpYnJhcmllcyIvPiBhbmQgcmVzdGFydGluZyB0aGUKKyAgc2VydmVy LgorIDwvcGFyYT4KKworIDxwYXJhPgorICA8bGl0ZXJhbD5wZ19jb2xsZWN0X2FkdmljZTwvbGl0 ZXJhbD4gaW5jbHVkZXMgYm90aCBhIHNoYXJlZCBhZHZpY2UKKyAgY29sbGVjdG9yIGFuZCBhIGxv Y2FsIGFkdmljZSBjb2xsZWN0b3IuIFRoZSBsb2NhbCBhZHZpY2UgY29sbGVjdG9yIG1ha2VzCisg IHF1ZXJpZXMgYW5kIHRoZWlyIGFkdmljZSBzdHJpbmdzIHZpc2libGUgb25seSB0byB0aGUgc2Vz c2lvbiB3aGVyZSB0aG9zZQorICBxdWVyaWVzIHdlcmUgcGxhbm5lZCwgd2hpbGUgdGhlIHNoYXJl ZCBhZHZpY2UgY29sbGVjdG9yIGNvbGxlY3RzIGRhdGEKKyAgb24gYSBzeXN0ZW0td2lkZSBiYXNp cywgYW5kIGF1dGhvcml6ZWQgdXNlcnMgY2FuIGV4YW1pbmUgZGF0YSBmcm9tIGFsbAorICBzZXNz aW9ucy4KKyA8L3BhcmE+CisKKyA8cGFyYT4KKyAgVG8gZW5hYmxlIGEgY29sbGVjdG9yLCB5b3Ug bXVzdCBmaXJzdCBzZXQgYSBjb2xsZWN0aW9uIGxpbWl0LiBXaGVuIHRoZQorICBudW1iZXIgb2Yg cXVlcmllcyBmb3Igd2hpY2ggYWR2aWNlIGhhcyBiZWVuIHN0b3JlZCBleGNlZWRzIHRoZSBjb2xs ZWN0aW9uCisgIGxpbWl0LCB0aGUgb2xkZXN0IHF1ZXJpZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5n IGFkdmljZSB3aWxsIGJlIGRpc2NhcmRlZC4KKyAgVGhlbiwgeW91IG11c3QgYWRqdXN0IGEgc2Vw YXJhdGUgc2V0dGluZyB0byBhY3R1YWxseSBlbmFibGUgYWR2aWNlCisgIGNvbGxlY3Rpb24uIEZv ciB0aGUgbG9jYWwgY29sbGVjdG9yLCBzZXQgdGhlIGNvbGxlY3Rpb24gbGltaXQgYnkgY29uZmln dXJpbmcKKyAgPGxpdGVyYWw+cGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1p dDwvbGl0ZXJhbD4gdG8gYSB2YWx1ZQorICBncmVhdGVyIHRoYW4gemVybywgYW5kIHRoZW4gZW5h YmxlIGFkdmljZSBjb2xsZWN0aW9uIGJ5IHNldHRpbmcKKyAgPGxpdGVyYWw+cGdfY29sbGVjdF9h ZHZpY2UubG9jYWxfY29sbGVjdG9yID0gdHJ1ZTwvbGl0ZXJhbD4uIEZvciB0aGUgc2hhcmVkCisg IGNvbGxlY3RvciwgdGhlIHByb2NlZHVyZSBpcyB0aGUgc2FtZSwgZXhjZXB0IHRoYXQgdGhlIG5h bWVzIG9mIHRoZSBzZXR0aW5ncworICBhcmUgPGxpdGVyYWw+cGdfY29sbGVjdF9hZHZpY2Uuc2hh cmVkX2NvbGxlY3Rpb25fbGltaXQ8L2xpdGVyYWw+IGFuZAorICA8bGl0ZXJhbD5wZ19jb2xsZWN0 X2FkdmljZS5zaGFyZWRfY29sbGVjdG9yPC9saXRlcmFsPi4gTm90ZSB0aGF0IGluIGJvdGgKKyAg Y2FzZXMsIHF1ZXJ5IHRleHRzIGFuZCBhZHZpY2Ugc3RyaW5ncyBhcmUgc3RvcmVkIGluIG1lbW9y eSwgc28KKyAgY29uZmlndXJpbmcgbGFyZ2UgbGltaXRzIG1heSByZXN1bHQgaW4gY29uc2lkZXJh YmxlIG1lbW9yeSBjb25zdW1wdGlvbi4KKyA8L3BhcmE+CisKKyA8cGFyYT4KKyAgT25jZSB0aGUg Y29sbGVjdG9yIGlzIGVuYWJsZWQsIHlvdSBjYW4gcnVuIGFueSBxdWVyaWVzIGZvciB3aGljaCB5 b3Ugd2lzaAorICB0byBzZWUgdGhlIGdlbmVyYXRlZCBwbGFuIGFkdmljZS4gVGhlbiwgeW91IGNh biBleGFtaW5lIHdoYXQgaGFzIGJlZW4KKyAgY29sbGVjdGVkIHVzaW5nIHdoaWNoZXZlciBvZgor ICA8bGl0ZXJhbD5TRUxFQ1QgKiBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk8 L2xpdGVyYWw+IG9yCisgIDxsaXRlcmFsPlNFTEVDVCAqIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9z aGFyZWRfYWR2aWNlKCk8L2xpdGVyYWw+CisgIGNvcnJlc3BvbmRzIHRvIHRoZSBjb2xsZWN0b3Ig eW91IGVuYWJsZWQuIFRvIGRpc2NhcmQgdGhlIGNvbGxlY3RlZCBhZHZpY2UKKyAgYW5kIHJlbGVh c2UgbWVtb3J5LCB5b3UgY2FuIGNhbGwKKyAgPGxpdGVyYWw+cGdfY2xlYXJfY29sbGVjdGVkX2xv Y2FsX2FkdmljZSgpPC9saXRlcmFsPgorICBvciA8bGl0ZXJhbD5wZ19jbGVhcl9jb2xsZWN0ZWRf c2hhcmVkX2FkdmljZSgpPC9saXRlcmFsPi4KKyA8L3BhcmE+CisKKyA8cGFyYT4KKyAgSW4gYWRk aXRpb24gdG8gdGhlIHF1ZXJ5IHRleHRzIGFuZCBhZHZpY2Ugc3RyaW5ncywgdGhlIGFkdmljZSBj b2xsZWN0b3JzCisgIHdpbGwgYWxzbyBzdG9yZSB0aGUgT0lEIG9mIHRoZSByb2xlIHRoYXQgY2F1 c2VkIHRoZSBxdWVyeSB0byBiZSBwbGFubmVkLAorICB0aGUgT0lEIG9mIHRoZSBkYXRhYmFzZSBp biB3aGljaCB0aGUgcXVlcnkgd2FzIHBsYW5uZWQsIHRoZSBxdWVyeSBJRCwKKyAgYW5kIHRoZSB0 aW1lIGF0IHdoaWNoIHRoZSBjb2xsZWN0aW9uIG9jY3VycmVkLiBUaGlzIG1vZHVsZSBkb2VzIG5v dAorICBhdXRvbWF0aWNhbGx5IGVuYWJsZSBxdWVyeSBJRCBjb21wdXRhdGlvbjsgdGhlcmVmb3Jl LCBpZiB5b3Ugd2FudCB0aGUKKyAgcXVlcnkgSUQgdmFsdWUgdG8gYmUgcG9wdWxhdGVkIGluIGNv bGxlY3RlZCBhZHZpY2UsIGJlIHN1cmUgdG8gY29uZmlndXJlCisgIDxsaXRlcmFsPmNvbXB1dGVf cXVlcnlfaWQgPSBvbjwvbGl0ZXJhbD4uIE90aGVyd2lzZSwgdGhlIHF1ZXJ5IElEIG1heQorICBh bHdheXMgc2hvdyBhcyA8bGl0ZXJhbD4wPC9saXRlcmFsPi4KKyA8L3BhcmE+CisKKyA8c2VjdDIg aWQ9InBnY29sbGVjdGFkdmljZS1mdW5jdGlvbnMiPgorICA8dGl0bGU+RnVuY3Rpb25zPC90aXRs ZT4KKworICA8dmFyaWFibGVsaXN0PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgor ICAgICA8ZnVuY3Rpb24+cGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpIHJldHVybnMg dm9pZDwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT5wZ19jbGVh cl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAg ICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmVtb3ZlcyBh bGwgY29sbGVjdGVkIHF1ZXJ5IHRleHRzIGFuZCBhZHZpY2Ugc3RyaW5ncyBmcm9tIGJhY2tlbmQt bG9jYWwKKyAgICAgIG1lbW9yeS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8 L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1 bmN0aW9uPnBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCkgcmV0dXJucyBzZXRvZiAoaWQg YmlnaW50LAorICAgICAgICB1c2VyaWQgb2lkLCBkYmlkIG9pZCwgcXVlcnlpZCBiaWdpbnQsIGNv bGxlY3Rpb25fdGltZSB0aW1lc3RhbXB0eiwKKyAgICAgICAgcXVlcnkgdGV4dCwgYWR2aWNlIHRl eHQpPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2dldF9j b2xsZWN0ZWRfbG9jYWxfYWR2aWNlPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8 L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmV0dXJucyBhbGwg cXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIHN0b3JlZCBpbiB0aGUgbG9jYWwKKyAgICAg IGFkdmljZSBjb2xsZWN0b3IuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxmdW5j dGlvbj5wZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpIHJldHVybnMgdm9pZDwvZnVu Y3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT5wZ19jbGVhcl9jb2xsZWN0 ZWRfc2hhcmVkX2FkdmljZTwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJt PgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFJlbW92ZXMgYWxsIGNvbGxl Y3RlZCBxdWVyeSB0ZXh0cyBhbmQgYWR2aWNlIHN0cmluZ3MgZnJvbSBzaGFyZWQKKyAgICAgIG1l bW9yeS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4K KworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2dldF9j b2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpIHJldHVybnMgc2V0b2YgKGlkIGJpZ2ludCwKKyAgICAg ICAgdXNlcmlkIG9pZCwgZGJpZCBvaWQsIHF1ZXJ5aWQgYmlnaW50LCBjb2xsZWN0aW9uX3RpbWUg dGltZXN0YW1wdHosCisgICAgICAgIHF1ZXJ5IHRleHQsIGFkdmljZSB0ZXh0KTwvZnVuY3Rpb24+ CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT5wZ19nZXRfY29sbGVjdGVkX3NoYXJl ZF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBSZXR1cm5zIGFsbCBxdWVyeSB0ZXh0cyBh bmQgYWR2aWNlIHN0cmluZ3Mgc3RvcmVkIGluIHRoZSBzaGFyZWQKKyAgICAgIGFkdmljZSBjb2xs ZWN0b3IuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+ CisKKyAgPC92YXJpYWJsZWxpc3Q+CisKKyA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJwZ2NvbGxl Y3RhZHZpY2UtY29uZmlnLXBhcmFtcyI+CisgIDx0aXRsZT5Db25maWd1cmF0aW9uIFBhcmFtZXRl cnM8L3RpdGxlPgorCisgIDx2YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAg PHRlcm0+CisgICAgIDx2YXJuYW1lPnBnX2NvbGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3Rvcjwv dmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAg PHByaW1hcnk+PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdG9yPC92YXJu YW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+ CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDx2YXJu YW1lPnBnX2NvbGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3RvcjwvdmFybmFtZT4gZW5hYmxlcyB0 aGUKKyAgICAgIGxvY2FsIGFkdmljZSBjb2xsZWN0b3IuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxs aXRlcmFsPmZhbHNlPC9saXRlcmFsPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+Cisg ICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAg PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdDwvdmFybmFt ZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1h cnk+PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdDwvdmFy bmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJt PgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8dmFy bmFtZT5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0PC92YXJuYW1lPiBz ZXRzIHRoZQorICAgICAgbWF4aW11bSBudW1iZXIgb2YgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBz dHJpbmdzIHJldGFpbmVkIGJ5IHRoZQorICAgICAgbG9jYWwgYWR2aWNlIGNvbGxlY3Rvci4gVGhl IGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+MDwvbGl0ZXJhbD4uCisgICAgIDwvcGFyYT4KKyAg ICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgPHRlcm0+CisgICAgIDx2YXJuYW1lPnBnX2NvbGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0 b3I8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAg ICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX2NvbGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0b3I8 L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4 dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAg PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvcjwvdmFybmFtZT4gZW5h YmxlcyB0aGUKKyAgICAgIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yLiBUaGUgZGVmYXVsdCB2YWx1 ZSBpcyA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4uCisgICAgICBPbmx5IHN1cGVydXNlcnMgYW5k IHVzZXJzIHdpdGggdGhlIGFwcHJvcHJpYXRlIDxsaXRlcmFsPlNFVDwvbGl0ZXJhbD4KKyAgICAg IHByaXZpbGVnZSBjYW4gY2hhbmdlIHRoaXMgc2V0dGluZy4KKyAgICAgPC9wYXJhPgorICAgIDwv bGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8 dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25f bGltaXQ8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4K KyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX2NvbGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0 aW9uX2xpbWl0PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAg ICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFy YT4KKyAgICAgIDx2YXJuYW1lPnBnX2NvbGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xp bWl0PC92YXJuYW1lPiBzZXRzIHRoZQorICAgICAgbWF4aW11bSBudW1iZXIgb2YgcXVlcnkgdGV4 dHMgYW5kIGFkdmljZSBzdHJpbmdzIHJldGFpbmVkIGJ5IHRoZQorICAgICAgc2hhcmVkIGFkdmlj ZSBjb2xsZWN0b3IuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxsaXRlcmFsPjA8L2xpdGVyYWw+Lgor ICAgICAgT25seSBzdXBlcnVzZXJzIGFuZCB1c2VycyB3aXRoIHRoZSBhcHByb3ByaWF0ZSA8bGl0 ZXJhbD5TRVQ8L2xpdGVyYWw+CisgICAgICBwcml2aWxlZ2UgY2FuIGNoYW5nZSB0aGlzIHNldHRp bmcuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisK KyAgPC92YXJpYWJsZWxpc3Q+CisKKyA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJwZ2NvbGxlY3Rh ZHZpY2UtYXV0aG9yIj4KKyAgPHRpdGxlPkF1dGhvcjwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBS b2JlcnQgSGFhcyA8ZW1haWw+cmhhYXNAcG9zdGdyZXNxbC5vcmc8L2VtYWlsPgorICA8L3BhcmE+ CisgPC9zZWN0Mj4KKworPC9zZWN0MT4KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNTJm ODYwM2E3YmUuLjdhMjMzYTg4YTA5IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNDAw Myw2ICs0MDAzLDEyIEBAIHBnX3V1aWRfdAogcGdfd2NoYXIKIHBnX3djaGFyX3RibAogcGdwX2Fy bW9yX2hlYWRlcnNfc3RhdGUKK3BnY2FfY29sbGVjdGVkX2FkdmljZQorcGdjYV9sb2NhbF9hZHZp Y2UKK3BnY2FfbG9jYWxfYWR2aWNlX2NodW5rCitwZ2NhX3NoYXJlZF9hZHZpY2UKK3BnY2Ffc2hh cmVkX2FkdmljZV9jaHVuaworcGdjYV9zaGFyZWRfc3RhdGUKIHBncGFfYWR2aWNlX2l0ZW0KIHBn cGFfYWR2aWNlX3RhZ190eXBlCiBwZ3BhX2FkdmljZV90YXJnZXQKLS0gCjIuNTEuMAoK --00000000000021f284064d3f4358--