From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 300A3C25B74 for ; Thu, 16 May 2024 18:58:38 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s7gIm-0008Tm-Eb; Thu, 16 May 2024 14:58:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s7gIi-0008TK-Ps for grub-devel@gnu.org; Thu, 16 May 2024 14:58:00 -0400 Received: from mail-ej1-x636.google.com ([2a00:1450:4864:20::636]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1s7gIg-0006xi-3N for grub-devel@gnu.org; Thu, 16 May 2024 14:58:00 -0400 Received: by mail-ej1-x636.google.com with SMTP id a640c23a62f3a-a59a387fbc9so398098366b.1 for ; Thu, 16 May 2024 11:57:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1715885876; x=1716490676; darn=gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=XTBE1G4JiGzRJVd+magmDBKX3ADliKbuVZaRWMF4B/k=; b=NV0RNrudvDp924R4rS/128cqo7LwN8Ci7TjT9g+vzISyFuCiTzz0JX49cGMopFAbRa yU8BYorN2BWHoPAJH97yVQ3paMlrXXCp7Hfr4IASCktPE1AFsE27qnwVGs67C7zgZcM0 DWwK+rUPeJQ6bF9aCdEjP9EIgry9kdOtZFYMAnHEtsbRmnbCYG3qY4SvxnRrdmnnvOch cs1qOwun5Xo5xy5BT+ubemlSCpiAtmyVI61k9DW2Pl5t6TjXAXJfGUUvsyofzVSYhd/r E6lB3qq5SeBGT5iKy/v7toTVXOAwow7ZUis4XJEq1168mUJey5z8QahtfjrWP9dBuqYp E2CA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715885876; x=1716490676; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=XTBE1G4JiGzRJVd+magmDBKX3ADliKbuVZaRWMF4B/k=; b=YOceCbDRNnzrpk/0zn5ZmAeiGQ+YTddWVi040XdbL40BjQjfY+EH4AZMufJgfX/UbV PePsvslKOgdQDezGBTIAv0vvxXjF5L9TdrmwBufH/Hjg7pwpqi54EFk8Q31XBfHj84Rj VBRBQNApxtIhG8PnuKGYVSv+uNzAdyyu8Zye0FdcgQUJZ3UVdf6KFn/M0Q/o9VlIHO1x laIUjLiOnvnNYQAtOTrZiw3AxW3qR9TzN/DsCoWjQe9isdqAKL/3FpX3A4mHpfg/VoeI W1Ll/Mz6hg1QebM2prosBUaR+QvcLVfxG18ZgQNHOtjmHEb27ogkgeMLmytSROjb9NDF zExw== X-Gm-Message-State: AOJu0YzQCM7/zK/hmxlbhE0HCH4oe870odwIOue4f6Cgy9dP/P3/JQBo 28L1qO5cZNB4OD/i4+fLBwOYOoeehieGvPG7Phcj6OQZuuH6wMic3XkDYnXr X-Google-Smtp-Source: AGHT+IG3C+4VqsEpj/jhvNiXZxlBvcBcCn1ykoqI58cWepVGtwlpy8/WS0tzf6JYOBR+dpGv9IeMRQ== X-Received: by 2002:a17:906:e945:b0:a59:a3ef:21f4 with SMTP id a640c23a62f3a-a5a2d66b514mr1251293266b.53.1715885875811; Thu, 16 May 2024 11:57:55 -0700 (PDT) Received: from localhost ([5.253.206.60]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a5a17b01676sm1010259466b.152.2024.05.16.11.57.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 May 2024 11:57:55 -0700 (PDT) From: Vladimir Serbinenko To: grub-devel@gnu.org Cc: Vladimir Serbinenko Subject: [PATCH 1/2] Support qcow disks in GRUB Date: Thu, 16 May 2024 21:57:47 +0300 Message-Id: <20240516185748.3051-1-phcoder@gmail.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::636; envelope-from=phcoder@gmail.com; helo=mail-ej1-x636.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: The development of GNU GRUB Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org U2lnbmVkLW9mZi1ieTogVmxhZGltaXIgU2VyYmluZW5rbyA8cGhjb2RlckBnbWFpbC5jb20+Ci0t LQogTWFrZWZpbGUudXRpbC5kZWYgICAgICAgICAgICAgICB8ICAgMSArCiBncnViLWNvcmUvTWFr ZWZpbGUuY29yZS5kZWYgICAgIHwgICA2ICsKIGdydWItY29yZS9jb21tYW5kcy9uYXRpdmVkaXNr LmMgfCAgIDEgKwogZ3J1Yi1jb3JlL2Rpc2svcWNvdy5jICAgICAgICAgICB8IDQ2NCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9ncnViL2Rpc2suaCAgICAgICAgICAg ICB8ICAgMSArCiA1IGZpbGVzIGNoYW5nZWQsIDQ3MyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ3J1Yi1jb3JlL2Rpc2svcWNvdy5jCgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudXRp bC5kZWYgYi9NYWtlZmlsZS51dGlsLmRlZgppbmRleCA5NDMyMzY1YTkuLmQ4YjU1NmFmZCAxMDA2 NDQKLS0tIGEvTWFrZWZpbGUudXRpbC5kZWYKKysrIGIvTWFrZWZpbGUudXRpbC5kZWYKQEAgLTcx LDYgKzcxLDcgQEAgbGlicmFyeSA9IHsKICAgY29tbW9uID0gZ3J1Yi1jb3JlL2NvbW1hbmRzL2xz LmM7CiAgIGNvbW1vbiA9IGdydWItY29yZS9kaXNrL2RtcmFpZF9udmlkaWEuYzsKICAgY29tbW9u ID0gZ3J1Yi1jb3JlL2Rpc2svbG9vcGJhY2suYzsKKyAgY29tbW9uID0gZ3J1Yi1jb3JlL2Rpc2sv cWNvdy5jOwogICBjb21tb24gPSBncnViLWNvcmUvZGlzay9sdm0uYzsKICAgY29tbW9uID0gZ3J1 Yi1jb3JlL2Rpc2svbWRyYWlkX2xpbnV4LmM7CiAgIGNvbW1vbiA9IGdydWItY29yZS9kaXNrL21k cmFpZF9saW51eF9iZS5jOwpkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVm IGIvZ3J1Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVmCmluZGV4IDhlMWIxZDlmMy4uZGE2NWJhNjhj IDEwMDY0NAotLS0gYS9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYKKysrIGIvZ3J1Yi1jb3Jl L01ha2VmaWxlLmNvcmUuZGVmCkBAIC0xMjA0LDYgKzEyMDQsMTIgQEAgbW9kdWxlID0gewogICBj b21tb24gPSBkaXNrL2xvb3BiYWNrLmM7CiB9OwogCittb2R1bGUgPSB7CisgIG5hbWUgPSBxY293 OworICBjb21tb24gPSBkaXNrL3Fjb3cuYzsKKyAgY3BwZmxhZ3MgPSAnLUkkKHNyY2RpcikvbGli L3Bvc2l4X3dyYXAgLUkkKHNyY2RpcikvbGliL3pzdGQnOworfTsKKwogbW9kdWxlID0gewogICBu YW1lID0gY3J5cHRvZGlzazsKICAgY29tbW9uID0gZGlzay9jcnlwdG9kaXNrLmM7CmRpZmYgLS1n aXQgYS9ncnViLWNvcmUvY29tbWFuZHMvbmF0aXZlZGlzay5jIGIvZ3J1Yi1jb3JlL2NvbW1hbmRz L25hdGl2ZWRpc2suYwppbmRleCA1ODBjOGQzYjAuLjNlOWJhZmFjNyAxMDA2NDQKLS0tIGEvZ3J1 Yi1jb3JlL2NvbW1hbmRzL25hdGl2ZWRpc2suYworKysgYi9ncnViLWNvcmUvY29tbWFuZHMvbmF0 aXZlZGlzay5jCkBAIC05OCw2ICs5OCw3IEBAIGdldF91dWlkIChjb25zdCBjaGFyICpuYW1lLCBj aGFyICoqdXVpZCwgaW50IGdldG5hdGl2ZSkKIAogICAgICAgLyogRklYTUU6IHRob3NlIHByb2Jh Ymx5IG5lZWQgc3BlY2lhbCBoYW5kbGluZy4gICovCiAgICAgY2FzZSBHUlVCX0RJU0tfREVWSUNF X0xPT1BCQUNLX0lEOgorICAgIGNhc2UgR1JVQl9ESVNLX0RFVklDRV9RQ09XX0lEOgogICAgIGNh c2UgR1JVQl9ESVNLX0RFVklDRV9ESVNLRklMVEVSX0lEOgogICAgIGNhc2UgR1JVQl9ESVNLX0RF VklDRV9DUllQVE9ESVNLX0lEOgogICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9ncnViLWNvcmUv ZGlzay9xY293LmMgYi9ncnViLWNvcmUvZGlzay9xY293LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwLi5lZDk5YjRjNzgKLS0tIC9kZXYvbnVsbAorKysgYi9ncnViLWNvcmUv ZGlzay9xY293LmMKQEAgLTAsMCArMSw0NjQgQEAKKy8qIHFjb3cuYyAtIGNvbW1hbmQgdG8gYWRk IGxvb3BiYWNrIHFjb3cgZGV2aWNlcy4gICovCisvKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlm aWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjQgIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgorICoKKyAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgR1JVQiBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxncnVi L2RsLmg+CisjaW5jbHVkZSA8Z3J1Yi9taXNjLmg+CisjaW5jbHVkZSA8Z3J1Yi9maWxlLmg+Cisj aW5jbHVkZSA8Z3J1Yi9kaXNrLmg+CisjaW5jbHVkZSA8Z3J1Yi9tbS5oPgorI2luY2x1ZGUgPGdy dWIvZXh0Y21kLmg+CisjaW5jbHVkZSA8Z3J1Yi9pMThuLmg+CisjaW5jbHVkZSA8Z3J1Yi9kZWZs YXRlLmg+CisjaW5jbHVkZSA8enN0ZC5oPgorCitHUlVCX01PRF9MSUNFTlNFICgiR1BMdjMrIik7 CisKKyNkZWZpbmUgUUNPV19NQUdJQyAweDUxNDY0OWZiCisjZGVmaW5lIExYX09GRlNFVF9NQVNL IDB4ZmZmZmZmZmZmZmZlMDBMTAorc3RydWN0IHFjb3dfaGVhZGVyCit7CisgIGdydWJfdWludDMy X3QgbWFnaWM7CisgIGdydWJfdWludDMyX3QgdmVyc2lvbjsKKyAgZ3J1Yl91aW50NjRfdCBiYWNr aW5nX2ZpbGVfb2Zmc2V0OworICBncnViX3VpbnQzMl90IGJhY2tpbmdfZmlsZV9zaXplOworICBn cnViX3VpbnQzMl90IGNsdXN0ZXJfYml0czsKKyAgZ3J1Yl91aW50NjRfdCBzaXplOworICBncnVi X3VpbnQzMl90IGNyeXB0X21ldGhvZDsKKyAgZ3J1Yl91aW50MzJfdCBsMV9zaXplOworICBncnVi X3VpbnQ2NF90IGwxX3RhYmxlX29mZnNldDsKKyAgZ3J1Yl91aW50NjRfdCByZWZjb3VudF90YWJs ZV9vZmZzZXQ7CisgIGdydWJfdWludDMyX3QgcmVmY291bnRfdGFibGVfY2x1c3RlcnM7CisgIGdy dWJfdWludDMyX3QgbmJfc25hcHNob3RzOworICBncnViX3VpbnQ2NF90IHNuYXBzaG90c19vZmZz ZXQ7CisKKyAgLyogdjMgb25seSAqLworICBncnViX3VpbnQ2NF90IGZlYXRfaW5jb21wYXQ7Cisg IGdydWJfdWludDY0X3QgZmVhdF9jb21wYXQ7CisgIGdydWJfdWludDY0X3QgZmVhdF9hdXRvY2xl YXI7CisgIGdydWJfdWludDMyX3QgcmVmY291bnRfb3JkZXI7CisgIGdydWJfdWludDMyX3QgaGVh ZGVyX2xlbmd0aDsKKworICAvKiBPbmx5IGlmIHYzIGFuZCBoZWFkZXJfbGVuZ3RoIGFsbG93cyBp dC4gICovCisgIGdydWJfdWludDhfdCBjb21wcmVzc2lvbl90eXBlOworfTsKKworc3RydWN0IHFj b3dfaGVhZGVyX2V4dGVuc2lvbgoreworICBncnViX3VpbnQzMl90IHR5cGU7CisgIGdydWJfdWlu dDMyX3QgbGVuZ3RoOworfTsKKworc3RydWN0IGdydWJfcWNvdworeworICBzdHJ1Y3QgZ3J1Yl9x Y293ICpuZXh0OworICBjaGFyICpkZXZuYW1lOworICBncnViX2ZpbGVfdCBmaWxlOworICB1bnNp Z25lZCBsb25nIGlkOworICBzdHJ1Y3QgcWNvd19oZWFkZXIgaGVhZDsKKyAgZ3J1Yl91aW50NjRf dCAqbDE7CisgIGdydWJfdWludDY0X3QgKmwyXzA7CisgIGdydWJfdWludDY0X3QgKmwyX2NhY2hl OworICBncnViX3VpbnQ2NF90IGwyX2NhY2hlX2N1cnJlbnQ7CisgIGdydWJfdWludDhfdCBjb21w cmVzc2lvbl90eXBlOworfTsKKworc3RhdGljIHN0cnVjdCBncnViX3Fjb3cgKnFjb3dfbGlzdDsK K3N0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfaWQgPSAwOworCitzdGF0aWMgY29uc3Qgc3RydWN0 IGdydWJfYXJnX29wdGlvbiBvcHRpb25zW10gPQorICB7CisgICAgLyogVFJBTlNMQVRPUlM6IFRo ZSBkaXNrIGlzIHNpbXBseSByZW1vdmVkIGZyb20gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG9uZXMs CisgICAgICAgbm90IHdpcGVkLCBhdm9pZCB0byBzY2FyZSB1c2VyLiAgKi8KKyAgICB7ImRlbGV0 ZSIsICdkJywgMCwgTl8oIkRlbGV0ZSB0aGUgc3BlY2lmaWVkIHFjb3cgZHJpdmUuIiksIDAsIDB9 LAorICAgIHswLCAwLCAwLCAwLCAwLCAwfQorICB9OworCitzdGF0aWMgZ3J1Yl9lcnJfdAorb3Bl bl9xY293IChzdHJ1Y3QgZ3J1Yl9xY293ICpxY293KQoreworICBncnViX2ZpbGVfcmVhZCAocWNv dy0+ZmlsZSwgJnFjb3ctPmhlYWQsIHNpemVvZihxY293LT5oZWFkKSk7CisgIGlmIChncnViX2Vy cm5vKQorICAgIHJldHVybiBncnViX2Vycm5vOworICBpZiAocWNvdy0+aGVhZC5tYWdpYyAhPSBn cnViX2NwdV90b19iZTMyX2NvbXBpbGVfdGltZShRQ09XX01BR0lDKSkKKyAgICByZXR1cm4gZ3J1 Yl9lcnJvcihHUlVCX0VSUl9CQURfQVJHVU1FTlQsICJpbnZhbGlkIHFjb3cgbWFnaWMiKTsKKyAg aWYgKHFjb3ctPmhlYWQudmVyc2lvbiAhPSBncnViX2NwdV90b19iZTMyX2NvbXBpbGVfdGltZSgy KQorICAgICAgJiYgcWNvdy0+aGVhZC52ZXJzaW9uICE9IGdydWJfY3B1X3RvX2JlMzJfY29tcGls ZV90aW1lKDMpKQorICAgIHJldHVybiBncnViX2Vycm9yKEdSVUJfRVJSX05PVF9JTVBMRU1FTlRF RF9ZRVQsICJ1bnN1cHBvcnRlZCBxY293IHZlcnNpb24iKTsKKyAgaWYgKHFjb3ctPmhlYWQuYmFj a2luZ19maWxlX29mZnNldCB8fCBxY293LT5oZWFkLmJhY2tpbmdfZmlsZV9zaXplKQorICAgIHJl dHVybiBncnViX2Vycm9yKEdSVUJfRVJSX05PVF9JTVBMRU1FTlRFRF9ZRVQsICJxY293IGJhY2tp bmcgZmlsZSB1bnN1cHBvcnRlZCIpOworICBpZiAocWNvdy0+aGVhZC5jcnlwdF9tZXRob2QpCisg ICAgcmV0dXJuIGdydWJfZXJyb3IoR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lFVCwgImVuY3J5 cHRlZCBxY293IGlzIG5vdCBzdXBwb3J0ZWQiKTsKKworICBpZiAoZ3J1Yl9iZV90b19jcHUzMihx Y293LT5oZWFkLmwxX3NpemUpID49ICgxIDw8IDI4KSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvcihH UlVCX0VSUl9CQURfQVJHVU1FTlQsICJxY293IGwxIHRhYmxlIGlzIHRvbyBsYXJnZSIpOworICBp ZiAoIXFjb3ctPmhlYWQubDFfc2l6ZSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvcihHUlVCX0VSUl9C QURfQVJHVU1FTlQsICJMMSB0YWJsZSBpcyBtaXNzaW5nIik7CisgIGlmIChncnViX2JlX3RvX2Nw dTMyKHFjb3ctPmhlYWQuY2x1c3Rlcl9iaXRzKSA+PSAyNikKKyAgICByZXR1cm4gZ3J1Yl9lcnJv cihHUlVCX0VSUl9CQURfQVJHVU1FTlQsICJxY293IGNsdXN0ZXIgc2l6ZSBpcyB0b28gbGFyZ2Ui KTsKKworICBncnViX3NpemVfdCBsMV9ieXRlcyA9IGdydWJfYmVfdG9fY3B1MzIocWNvdy0+aGVh ZC5sMV9zaXplKSA8PCAzOworICBxY293LT5sMSA9IGdydWJfbWFsbG9jKGwxX2J5dGVzKTsKKyAg aWYgKCFxY293LT5sMSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKworICBncnViX2ZpbGVfc2Vl ayAocWNvdy0+ZmlsZSwgZ3J1Yl9iZV90b19jcHU2NChxY293LT5oZWFkLmwxX3RhYmxlX29mZnNl dCkpOworICBncnViX2ZpbGVfcmVhZCAocWNvdy0+ZmlsZSwgcWNvdy0+bDEsIGwxX2J5dGVzKTsK KyAgaWYgKGdydWJfZXJybm8pCisgICAgcmV0dXJuIGdydWJfZXJybm87CisKKyAgZ3J1Yl9zaXpl X3QgbDJfYnl0ZXMgPSAxIDw8IGdydWJfYmVfdG9fY3B1MzIocWNvdy0+aGVhZC5jbHVzdGVyX2Jp dHMpOworICBxY293LT5sMl8wID0gZ3J1Yl96YWxsb2MobDJfYnl0ZXMpOworICBxY293LT5sMl9j YWNoZSA9IGdydWJfemFsbG9jKGwyX2J5dGVzKTsKKyAgaWYgKCFxY293LT5sMl8wIHx8ICFxY293 LT5sMl9jYWNoZSkKKyAgICB7CisgICAgICBncnViX2ZyZWUocWNvdy0+bDJfMCk7CisgICAgICBn cnViX2ZyZWUocWNvdy0+bDJfY2FjaGUpOworICAgICAgcmV0dXJuIGdydWJfZXJybm87CisgICAg fQorCisgIGlmIChxY293LT5sMVswXSkKKyAgICB7CisgICAgICBncnViX2ZpbGVfc2VlayAocWNv dy0+ZmlsZSwgZ3J1Yl9iZV90b19jcHU2NChxY293LT5sMVswXSkgJiBMWF9PRkZTRVRfTUFTSyk7 CisgICAgICBncnViX2ZpbGVfcmVhZCAocWNvdy0+ZmlsZSwgcWNvdy0+bDJfMCwgbDJfYnl0ZXMp OworICAgIH0KKyAgaWYgKGdydWJfZXJybm8pCisgICAgcmV0dXJuIGdydWJfZXJybm87CisKKyAg Z3J1Yl91aW50MzJfdCBoZWFkZXJfbGVuZ3RoID0gcWNvdy0+aGVhZC52ZXJzaW9uID09IGdydWJf Y3B1X3RvX2JlMzJfY29tcGlsZV90aW1lKDMpID8gZ3J1Yl9iZV90b19jcHUzMihxY293LT5oZWFk LmhlYWRlcl9sZW5ndGgpIDogNzI7CisgIHFjb3ctPmNvbXByZXNzaW9uX3R5cGUgPSAoaGVhZGVy X2xlbmd0aCA+PSAxMDUpID8gcWNvdy0+aGVhZC5jb21wcmVzc2lvbl90eXBlIDogMDsKKworICBy ZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworLyogRGVsZXRlIHRoZSBxY293IGRldmljZSBOQU1F LiAgKi8KK3N0YXRpYyBncnViX2Vycl90CitkZWxldGVfcWNvdyAoY29uc3QgY2hhciAqbmFtZSkK K3sKKyAgc3RydWN0IGdydWJfcWNvdyAqZGV2OworICBzdHJ1Y3QgZ3J1Yl9xY293ICoqcHJldjsK KworICAvKiBTZWFyY2ggZm9yIHRoZSBkZXZpY2UuICAqLworICBmb3IgKGRldiA9IHFjb3dfbGlz dCwgcHJldiA9ICZxY293X2xpc3Q7CisgICAgICAgZGV2OworICAgICAgIHByZXYgPSAmZGV2LT5u ZXh0LCBkZXYgPSBkZXYtPm5leHQpCisgICAgaWYgKGdydWJfc3RyY21wIChkZXYtPmRldm5hbWUs IG5hbWUpID09IDApCisgICAgICBicmVhazsKKworICBpZiAoISBkZXYpCisgICAgcmV0dXJuIGdy dWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9ERVZJQ0UsICJkZXZpY2Ugbm90IGZvdW5kIik7CisKKyAg LyogUmVtb3ZlIHRoZSBkZXZpY2UgZnJvbSB0aGUgbGlzdC4gICovCisgICpwcmV2ID0gZGV2LT5u ZXh0OworCisgIGdydWJfZnJlZSAoZGV2LT5kZXZuYW1lKTsKKyAgZ3J1Yl9maWxlX2Nsb3NlIChk ZXYtPmZpbGUpOworICBncnViX2ZyZWUgKGRldik7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFRo ZSBjb21tYW5kIHRvIGFkZCBhbmQgcmVtb3ZlIHFjb3cgZGV2aWNlcy4gICovCitzdGF0aWMgZ3J1 Yl9lcnJfdAorZ3J1Yl9jbWRfcWNvdyAoZ3J1Yl9leHRjbWRfY29udGV4dF90IGN0eHQsIGludCBh cmdjLCBjaGFyICoqYXJncykKK3sKKyAgc3RydWN0IGdydWJfYXJnX2xpc3QgKnN0YXRlID0gY3R4 dC0+c3RhdGU7CisgIGdydWJfZmlsZV90IGZpbGU7CisgIGVudW0gZ3J1Yl9maWxlX3R5cGUgdHlw ZSA9IEdSVUJfRklMRV9UWVBFX0xPT1BCQUNLOworICBzdHJ1Y3QgZ3J1Yl9xY293ICpuZXdkZXY7 CisgIGdydWJfZXJyX3QgcmV0OworCisgIGlmIChhcmdjIDwgMSkKKyAgICByZXR1cm4gZ3J1Yl9l cnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCAiZGV2aWNlIG5hbWUgcmVxdWlyZWQiKTsKKwor ICAvKiBDaGVjayBpZiBgLWQnIHdhcyB1c2VkLiAgKi8KKyAgaWYgKHN0YXRlWzBdLnNldCkKKyAg ICAgIHJldHVybiBkZWxldGVfcWNvdyAoYXJnc1swXSk7CisKKyAgdHlwZSB8PSBHUlVCX0ZJTEVf VFlQRV9OT19ERUNPTVBSRVNTOworCisgIGlmIChhcmdjIDwgMikKKyAgICByZXR1cm4gZ3J1Yl9l cnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCBOXygiZmlsZW5hbWUgZXhwZWN0ZWQiKSk7CisK KyAgLyogQ2hlY2sgdGhhdCBhIGRldmljZSB3aXRoIHJlcXVlc3RlZCBuYW1lIGRvZXMgbm90IGFs cmVhZHkgZXhpc3QuICovCisgIGZvciAobmV3ZGV2ID0gcWNvd19saXN0OyBuZXdkZXY7IG5ld2Rl diA9IG5ld2Rldi0+bmV4dCkKKyAgICBpZiAoZ3J1Yl9zdHJjbXAgKG5ld2Rldi0+ZGV2bmFtZSwg YXJnc1swXSkgPT0gMCkKKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJH VU1FTlQsICJkZXZpY2UgbmFtZSBhbHJlYWR5IGV4aXN0cyIpOworCisgIGZpbGUgPSBncnViX2Zp bGVfb3BlbiAoYXJnc1sxXSwgdHlwZSk7CisgIGlmICghIGZpbGUpCisgICAgcmV0dXJuIGdydWJf ZXJybm87CisKKyAgLyogVW5hYmxlIHRvIHJlcGxhY2UgaXQsIG1ha2UgYSBuZXcgZW50cnkuICAq LworICBuZXdkZXYgPSBncnViX3phbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZ3J1Yl9xY293KSk7Cisg IGlmICghIG5ld2RldikKKyAgICBnb3RvIGZhaWw7CisKKyAgbmV3ZGV2LT5kZXZuYW1lID0gZ3J1 Yl9zdHJkdXAgKGFyZ3NbMF0pOworICBpZiAoISBuZXdkZXYtPmRldm5hbWUpCisgICAgeworICAg ICAgZ3J1Yl9mcmVlIChuZXdkZXYpOworICAgICAgZ290byBmYWlsOworICAgIH0KKworICBuZXdk ZXYtPmZpbGUgPSBmaWxlOworICBuZXdkZXYtPmlkID0gbGFzdF9pZCsrOworCisgIHJldCA9IG9w ZW5fcWNvdyhuZXdkZXYpOworICBpZiAocmV0KQorICAgIHsKKyAgICAgIGdydWJfZnJlZShuZXdk ZXYtPmRldm5hbWUpOworICAgICAgZ3J1Yl9mcmVlKG5ld2Rldik7CisgICAgICBnb3RvIGZhaWw7 CisgICAgfQorCisgIC8qIEFkZCB0aGUgbmV3IGVudHJ5IHRvIHRoZSBsaXN0LiAgKi8KKyAgbmV3 ZGV2LT5uZXh0ID0gcWNvd19saXN0OworICBxY293X2xpc3QgPSBuZXdkZXY7CisKKyAgcmV0dXJu IDA7CisKK2ZhaWw6CisgIHJldCA9IGdydWJfZXJybm87CisgIGdydWJfZmlsZV9jbG9zZSAoZmls ZSk7CisgIHJldHVybiByZXQ7Cit9CisKKwwKK3N0YXRpYyBpbnQKK2dydWJfcWNvd19pdGVyYXRl IChncnViX2Rpc2tfZGV2X2l0ZXJhdGVfaG9va190IGhvb2ssIHZvaWQgKmhvb2tfZGF0YSwKKwkJ ICAgICAgIGdydWJfZGlza19wdWxsX3QgcHVsbCkKK3sKKyAgc3RydWN0IGdydWJfcWNvdyAqZDsK KyAgaWYgKHB1bGwgIT0gR1JVQl9ESVNLX1BVTExfTk9ORSkKKyAgICByZXR1cm4gMDsKKyAgZm9y IChkID0gcWNvd19saXN0OyBkOyBkID0gZC0+bmV4dCkKKyAgICB7CisgICAgICBpZiAoaG9vayAo ZC0+ZGV2bmFtZSwgaG9va19kYXRhKSkKKwlyZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOwor fQorCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9xY293X29wZW4gKGNvbnN0IGNoYXIgKm5hbWUs IGdydWJfZGlza190IGRpc2spCit7CisgIHN0cnVjdCBncnViX3Fjb3cgKmRldjsKKworICBmb3Ig KGRldiA9IHFjb3dfbGlzdDsgZGV2OyBkZXYgPSBkZXYtPm5leHQpCisgICAgaWYgKGdydWJfc3Ry Y21wIChkZXYtPmRldm5hbWUsIG5hbWUpID09IDApCisgICAgICBicmVhazsKKworICBpZiAoISBk ZXYpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX1VOS05PV05fREVWSUNFLCAiY2Fu J3Qgb3BlbiBkZXZpY2UiKTsKKworICAvKiBVc2UgdGhlIGZpbGVzaXplIGZvciB0aGUgZGlzayBz aXplLCByb3VuZCB1cCB0byBhIGNvbXBsZXRlIHNlY3Rvci4gICovCisgIGRpc2stPnRvdGFsX3Nl Y3RvcnMgPSBncnViX2JlX3RvX2NwdTY0KGRldi0+aGVhZC5zaXplKSA+PiBHUlVCX0RJU0tfU0VD VE9SX0JJVFM7CisgIC8qIEF2b2lkIHJlYWRpbmcgbW9yZSB0aGFuIDUxMk0uICAqLworICBkaXNr LT5tYXhfYWdnbG9tZXJhdGUgPSAxIDw8ICgyOSAtIEdSVUJfRElTS19TRUNUT1JfQklUUworCQkJ CS0gR1JVQl9ESVNLX0NBQ0hFX0JJVFMpOworCisgIGRpc2stPmlkID0gZGV2LT5pZDsKKworICBk aXNrLT5kYXRhID0gZGV2OworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAor Z2V0X2wyX2VudHJ5KHN0cnVjdCBncnViX3Fjb3cgKnFjb3csIGdydWJfdWludDY0X3QgY2x1c3Rl ciwgZ3J1Yl91aW50NjRfdCAqbDJlKQoreworICBncnViX3NpemVfdCBsMl9ieXRlcyA9IDEgPDwg Z3J1Yl9iZV90b19jcHUzMihxY293LT5oZWFkLmNsdXN0ZXJfYml0cyk7CisgIGdydWJfdWludDY0 X3QgbDJfdGFibGVfYml0cyA9IGdydWJfYmVfdG9fY3B1MzIocWNvdy0+aGVhZC5jbHVzdGVyX2Jp dHMpIC0gMzsKKyAgZ3J1Yl91aW50NjRfdCBsMm4gPSBjbHVzdGVyICYgKCgxIDw8IGwyX3RhYmxl X2JpdHMpIC0gMSk7CisgIGdydWJfdWludDY0X3QgbDFuID0gY2x1c3RlciA+PiBsMl90YWJsZV9i aXRzOworICBpZiAocWNvdy0+bDFbbDFuXSA9PSAwKQorICAgIHsKKyAgICAgICpsMmUgPSAwOwor ICAgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisgICAgfQorICAgIAorICBpZiAobDFuID49IGdy dWJfYmVfdG9fY3B1MzIocWNvdy0+aGVhZC5sMV9zaXplKSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJv cihHUlVCX0VSUl9JTywgInNlZWtpbmcgb3V0c2lkZSBvZiBMMSB0YWJsZSIpOworICBpZiAobDFu ID09IDApCisgICAgeworICAgICAgKmwyZSA9IGdydWJfYmVfdG9fY3B1NjQocWNvdy0+bDJfMFts Mm5dKTsKKyAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOworICAgIH0KKyAgaWYgKGwxbiA9PSBx Y293LT5sMl9jYWNoZV9jdXJyZW50KQorICAgIHsKKyAgICAgICpsMmUgPSBncnViX2JlX3RvX2Nw dTY0KHFjb3ctPmwyX2NhY2hlW2wybl0pOworICAgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cisg ICAgfQorCisgIHFjb3ctPmwyX2NhY2hlX2N1cnJlbnQgPSAwOworICBncnViX2ZpbGVfc2VlayAo cWNvdy0+ZmlsZSwgZ3J1Yl9iZV90b19jcHU2NChxY293LT5sMVtsMW5dKSAmIExYX09GRlNFVF9N QVNLKTsKKyAgZ3J1Yl9maWxlX3JlYWQgKHFjb3ctPmZpbGUsIHFjb3ctPmwyX2NhY2hlLCBsMl9i eXRlcyk7CisgIGlmIChncnViX2Vycm5vKQorICAgIHJldHVybiBncnViX2Vycm5vOworICBxY293 LT5sMl9jYWNoZV9jdXJyZW50ID0gbDFuOworICAqbDJlID0gZ3J1Yl9iZV90b19jcHU2NChxY293 LT5sMl9jYWNoZVtsMm5dKTsKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisKK3N0YXRpYyBn cnViX2Vycl90CitncnViX3Fjb3dfcmVhZCAoZ3J1Yl9kaXNrX3QgZGlzaywgZ3J1Yl9kaXNrX2Fk ZHJfdCBzZWN0b3IsCisJCSAgICBncnViX3NpemVfdCBzaXplLCBjaGFyICpidWYpCit7CisgIHN0 cnVjdCBncnViX3Fjb3cgKnFjb3cgPSAoc3RydWN0IGdydWJfcWNvdyAqKSBkaXNrLT5kYXRhOwor ICB1bnNpZ25lZCBjbHVzdGVyX3NlY19iaXRzID0gZ3J1Yl9iZV90b19jcHUzMihxY293LT5oZWFk LmNsdXN0ZXJfYml0cykgLSBHUlVCX0RJU0tfU0VDVE9SX0JJVFM7CisgIGdydWJfdWludDY0X3Qg Y2x1c3Rlcl9zZWNfc2l6ZSA9IDEgPDwgY2x1c3Rlcl9zZWNfYml0czsKKyAgZ3J1Yl91aW50NjRf dCBjbHVzdGVyID0gc2VjdG9yID4+IGNsdXN0ZXJfc2VjX2JpdHM7CisgIGdydWJfc2l6ZV90IGNs dXN0ZXJfc2VjX29mZnNldCA9IHNlY3RvciAmICgoMSA8PCBjbHVzdGVyX3NlY19iaXRzKSAtIDEp OworICBncnViX2ZpbGVfdCBmaWxlID0gcWNvdy0+ZmlsZTsKKyAgY2hhciAqZGVjb21wcmVzc19i dWYgPSBOVUxMOworICBncnViX3NpemVfdCBkZWNvbXByZXNzX2J1Zl9zaXplID0gMDsKKworICB3 aGlsZSAoc2l6ZSkKKyAgICB7CisgICAgICBncnViX3NpemVfdCBtYXhfcmVhZCA9IGNsdXN0ZXJf c2VjX3NpemUgLSBjbHVzdGVyX3NlY19vZmZzZXQ7CisgICAgICBncnViX3VpbnQ2NF90IGwyZSA9 IDA7CisgICAgICBpZiAobWF4X3JlYWQgPiBzaXplKQorCW1heF9yZWFkID0gc2l6ZTsKKyAgICAg IAorICAgICAgZ3J1Yl9lcnJfdCBlcnIgPSBnZXRfbDJfZW50cnkocWNvdywgY2x1c3RlciwgJmwy ZSk7CisgICAgICBpZiAoZXJyKQorCXsKKwkgIGdydWJfZnJlZSAoZGVjb21wcmVzc19idWYpOwor CSAgcmV0dXJuIGVycjsKKwl9CisKKyAgICAgIC8qIEVtcHR5LiAgKi8KKyAgICAgIGlmIChsMmUg PT0gMCkKKwl7CisJICBncnViX21lbXNldCAoYnVmLCAwLCBtYXhfcmVhZCA8PCBHUlVCX0RJU0tf U0VDVE9SX0JJVFMpOworCX0KKyAgICAgIC8qIFVuY29tcHJlc3NlZC4gICovCisgICAgICBlbHNl IGlmICghKGwyZSAmICgxTEwgPDwgNjIpKSkKKwl7CisJICBncnViX2ZpbGVfc2VlayAoZmlsZSwg KGwyZSAmIExYX09GRlNFVF9NQVNLKSArIChjbHVzdGVyX3NlY19vZmZzZXQgPDwgR1JVQl9ESVNL X1NFQ1RPUl9CSVRTKSk7CisJICBncnViX2ZpbGVfcmVhZCAoZmlsZSwgYnVmLCBtYXhfcmVhZCA8 PCBHUlVCX0RJU0tfU0VDVE9SX0JJVFMpOworCSAgaWYgKGdydWJfZXJybm8pCisJICAgIHsKKwkg ICAgICBncnViX2ZyZWUgKGRlY29tcHJlc3NfYnVmKTsKKwkgICAgICByZXR1cm4gZ3J1Yl9lcnJu bzsKKwkgICAgfQorCX0KKyAgICAgIC8qIENvbXByZXNzZWQuICAqLworICAgICAgZWxzZQorCXsK KwkgIGludCBvZmZzZXRfYml0cyA9IDYyIC0gKGdydWJfYmVfdG9fY3B1MzIocWNvdy0+aGVhZC5j bHVzdGVyX2JpdHMpIC0gOCk7CisJICBncnViX3VpbnQ2NF90IG9mZiA9IGwyZSAmICgoMUxMIDw8 IG9mZnNldF9iaXRzKSAtIDEpOworCSAgZ3J1Yl91aW50MzJfdCBjb21wcmVzc2VkX3NpemUgPSAo KChsMmUgJiAweDNmZmZmZmZmZmZmZmZmZmZMTCkgPj4gb2Zmc2V0X2JpdHMpIDw8IDkpICsgMHgy MDAgLSAob2ZmICYgMHgxZmYpOworCSAgaWYgKHFjb3ctPmNvbXByZXNzaW9uX3R5cGUgPiAxKQor CSAgICB7CisJICAgICAgZ3J1Yl9mcmVlIChkZWNvbXByZXNzX2J1Zik7CisJICAgICAgcmV0dXJu IGdydWJfZXJyb3IoR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lFVCwgImNvbXByZXNzaW9uIHR5 cGUgJWQgbm90IHN1cHBvcnRlZCB5ZXQiLCBxY293LT5jb21wcmVzc2lvbl90eXBlKTsKKwkgICAg fQorCSAgZ3J1Yl9maWxlX3NlZWsgKGZpbGUsIG9mZik7CisJICBpZiAoY29tcHJlc3NlZF9zaXpl ID4gZGVjb21wcmVzc19idWZfc2l6ZSkKKwkgICAgeworCSAgICAgIGdydWJfZnJlZShkZWNvbXBy ZXNzX2J1Zik7CisJICAgICAgZGVjb21wcmVzc19idWZfc2l6ZSA9IGNvbXByZXNzZWRfc2l6ZSAq IDI7CisJICAgICAgZGVjb21wcmVzc19idWYgPSBncnViX21hbGxvYyAoZGVjb21wcmVzc19idWZf c2l6ZSk7CisJICAgICAgaWYgKCFkZWNvbXByZXNzX2J1ZikKKwkJcmV0dXJuIGdydWJfZXJybm87 CisJICAgIH0KKwkgIGdydWJfZmlsZV9yZWFkIChmaWxlLCBkZWNvbXByZXNzX2J1ZiwgY29tcHJl c3NlZF9zaXplKTsKKworCSAgZ3J1Yl9zaXplX3QgZGVjb21wcmVzc2VkX3NpemUgPSBjbHVzdGVy X3NlY19zaXplIDw8IDk7CisKKwkgIHN3aXRjaCAocWNvdy0+Y29tcHJlc3Npb25fdHlwZSkKKwkg ICAgeworCSAgICBjYXNlIDA6CisJICAgICAgaWYgKGdydWJfZGVmbGF0ZV9kZWNvbXByZXNzKGRl Y29tcHJlc3NfYnVmLCBjb21wcmVzc2VkX3NpemUsIChjbHVzdGVyX3NlY19vZmZzZXQgPDwgR1JV Ql9ESVNLX1NFQ1RPUl9CSVRTKSwgYnVmLCBtYXhfcmVhZCA8PCBHUlVCX0RJU0tfU0VDVE9SX0JJ VFMpIDwgMCkKKwkJeworCQkgIGdydWJfZnJlZSAoZGVjb21wcmVzc19idWYpOworCQkgIHJldHVy biBncnViX2Vycm5vOworCQl9CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgMToKKwkgICAgICB7 CisJCWNoYXIgKnRhcmdldF9idWYgPSBOVUxMLCAqdGFyZ2V0OworCQlpZiAobWF4X3JlYWQgPT0g Y2x1c3Rlcl9zZWNfc2l6ZSAmJiBjbHVzdGVyX3NlY19vZmZzZXQgPT0gMCkKKwkJICB0YXJnZXQg PSBidWY7CisJCWVsc2UKKwkJICB7CisJCSAgICB0YXJnZXQgPSB0YXJnZXRfYnVmID0gZ3J1Yl9t YWxsb2MoZGVjb21wcmVzc2VkX3NpemUpOworCQkgICAgaWYgKCF0YXJnZXQpCisJCSAgICAgIHsK KwkJCWdydWJfZnJlZSAoZGVjb21wcmVzc19idWYpOworCQkJcmV0dXJuIGdydWJfZXJybm87CisJ CSAgICAgIH0KKwkJICB9CisJCVpTVERfZGVjb21wcmVzcyAodGFyZ2V0LCBkZWNvbXByZXNzZWRf c2l6ZSwgZGVjb21wcmVzc19idWYsIGNvbXByZXNzZWRfc2l6ZSk7CisJCWlmICh0YXJnZXQgIT0g YnVmKQorCQkgIGdydWJfbWVtY3B5KGJ1ZiwgdGFyZ2V0ICsgKGNsdXN0ZXJfc2VjX29mZnNldCA8 PCBHUlVCX0RJU0tfU0VDVE9SX0JJVFMpLCBtYXhfcmVhZCA8PCBHUlVCX0RJU0tfU0VDVE9SX0JJ VFMpOworCQlncnViX2ZyZWUgKHRhcmdldF9idWYpOworCSAgICAgIH0KKwkgICAgICBicmVhazsK KwkgICAgfQorCX0KKyAgICAgIGJ1ZiArPSBtYXhfcmVhZCA8PCBHUlVCX0RJU0tfU0VDVE9SX0JJ VFM7CisgICAgICBzaXplIC09IG1heF9yZWFkOworICAgICAgY2x1c3Rlcl9zZWNfb2Zmc2V0ID0g MDsKKyAgICAgIGNsdXN0ZXIrKzsKKyAgICB9CisKKyAgZ3J1Yl9mcmVlIChkZWNvbXByZXNzX2J1 Zik7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9xY293X3dyaXRl IChncnViX2Rpc2tfdCBkaXNrIF9fYXR0cmlidXRlICgodW51c2VkKSksCisJCSAgICAgZ3J1Yl9k aXNrX2FkZHJfdCBzZWN0b3IgX19hdHRyaWJ1dGUgKCh1bnVzZWQpKSwKKwkJICAgICBncnViX3Np emVfdCBzaXplIF9fYXR0cmlidXRlICgodW51c2VkKSksCisJCSAgICAgY29uc3QgY2hhciAqYnVm IF9fYXR0cmlidXRlICgodW51c2VkKSkpCit7CisgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VS Ul9OT1RfSU1QTEVNRU5URURfWUVULAorCQkgICAgICJxY293IHdyaXRlIGlzIG5vdCBzdXBwb3J0 ZWQiKTsKK30KKworc3RhdGljIHN0cnVjdCBncnViX2Rpc2tfZGV2IGdydWJfcWNvd19kZXYgPQor ICB7CisgICAgLm5hbWUgPSAicWNvdyIsCisgICAgLmlkID0gR1JVQl9ESVNLX0RFVklDRV9RQ09X X0lELAorICAgIC5kaXNrX2l0ZXJhdGUgPSBncnViX3Fjb3dfaXRlcmF0ZSwKKyAgICAuZGlza19v cGVuID0gZ3J1Yl9xY293X29wZW4sCisgICAgLmRpc2tfcmVhZCA9IGdydWJfcWNvd19yZWFkLAor ICAgIC5kaXNrX3dyaXRlID0gZ3J1Yl9xY293X3dyaXRlLAorICAgIC5uZXh0ID0gMAorICB9Owor CitzdGF0aWMgZ3J1Yl9leHRjbWRfdCBjbWQ7CisKK0dSVUJfTU9EX0lOSVQocWNvdykKK3sKKyAg Y21kID0gZ3J1Yl9yZWdpc3Rlcl9leHRjbWQgKCJxY293IiwgZ3J1Yl9jbWRfcWNvdywgMCwKKwkJ CSAgICAgIE5fKCJbLWRdIFstRF0gREVWSUNFTkFNRSBGSUxFLiIpLAorCQkJICAgICAgLyogVFJB TlNMQVRPUlM6IFRoZSBmaWxlIGl0c2VsZiBpcyBub3QgZGVzdHJveWVkCisJCQkJIG9yIHRyYW5z Zm9ybWVkIGludG8gZHJpdmUuICAqLworCQkJICAgICAgTl8oIk1ha2UgYSB2aXJ0dWFsIGRyaXZl IGZyb20gYSBmaWxlLiIpLCBvcHRpb25zKTsKKyAgZ3J1Yl9kaXNrX2Rldl9yZWdpc3RlciAoJmdy dWJfcWNvd19kZXYpOworfQorCitHUlVCX01PRF9GSU5JKHFjb3cpCit7CisgIGdydWJfdW5yZWdp c3Rlcl9leHRjbWQgKGNtZCk7CisgIGdydWJfZGlza19kZXZfdW5yZWdpc3RlciAoJmdydWJfcWNv d19kZXYpOworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncnViL2Rpc2suaCBiL2luY2x1ZGUvZ3J1 Yi9kaXNrLmgKaW5kZXggZmJmMjNkZjdmLi42MGJjZDkyYmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUv Z3J1Yi9kaXNrLmgKKysrIGIvaW5jbHVkZS9ncnViL2Rpc2suaApAQCAtNTIsNiArNTIsNyBAQCBl bnVtIGdydWJfZGlza19kZXZfaWQKICAgICBHUlVCX0RJU0tfREVWSUNFX1VCT09URElTS19JRCwK ICAgICBHUlVCX0RJU0tfREVWSUNFX1hFTiwKICAgICBHUlVCX0RJU0tfREVWSUNFX09CRElTS19J RCwKKyAgICBHUlVCX0RJU0tfREVWSUNFX1FDT1dfSUQsCiAgIH07CiAKIHN0cnVjdCBncnViX2Rp c2s7Ci0tIAoyLjM5LjIKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpHcnViLWRldmVsIG1haWxpbmcgbGlzdApHcnViLWRldmVsQGdudS5vcmcKaHR0cHM6 Ly9saXN0cy5nbnUub3JnL21haWxtYW4vbGlzdGluZm8vZ3J1Yi1kZXZlbAo=