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 81DD2C3ABB0 for ; Sat, 3 May 2025 08:06:36 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uB7sn-0003ey-15; Sat, 03 May 2025 04:06:01 -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 1uB7sl-0003eS-H7 for grub-devel@gnu.org; Sat, 03 May 2025 04:05:59 -0400 Received: from mail-lj1-x229.google.com ([2a00:1450:4864:20::229]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uB7se-00082i-Hf for grub-devel@gnu.org; Sat, 03 May 2025 04:05:59 -0400 Received: by mail-lj1-x229.google.com with SMTP id 38308e7fff4ca-30c091b54aaso23235581fa.3 for ; Sat, 03 May 2025 01:05:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746259549; x=1746864349; darn=gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=etstAwxfON2oRgrlRYCyCNyNiT7spY9WQzQk8k3GjfY=; b=kyzCrM7wqAOLnShZkZ1YULPW+Ki5Z50y9sGMwRJNCSZgZ2S4+iWa75XQ3QHGRuSeBN iJzV9shmHkpRZv9FrQ3QoAH2K6G4VSIk/oiYgGR+tTAsZqt7/zmnTp9RI2HwRsy1o5fV ql5H9sMKt2961cSV7c+sRjJ5DJDhRTxptuwhXCMjG2qPY8gEzBglBNVv4soHsDCT9CxC FOy7NCNDlx7MkzNchuiOvZ0PxIjzFmjLtAo4rlw+jol7AD39WHww4oiWz8gQXwec3tWi 3Xav9WDUoC+Gc2u+CGiwLRjU2zVyBlfGJx36K7j5aB/AR3HVWazAe+Au7a78zXMXibV+ OFDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746259549; x=1746864349; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=etstAwxfON2oRgrlRYCyCNyNiT7spY9WQzQk8k3GjfY=; b=c9Qvfs4+TzQ5plIym5VQU1dogaVP8kSOe6rSjl0kNToLiweGnZ5dSPUGED5Y5U//qW sOhT247QHWG7U4NNvJBfJvEjYChN5Vc/AmfFpcwoLTJLadjF4KNKXV9O7dXJJsWSfwTM xanvFFdrh1xg/SLk0pgwQScG58MVU6xLiwLpCsgJvGHuAhXt/995Xvl0DnlOeU/3x3Lr fSzHlYyYDG5r8tr0vk30E4EKZugYux/fAdqhZfcJjfJxIRe1lBfRXkiTGgH7PQzomD5z uda2R76wwVGT1gXt8f+n3ZZ1+Oa80tYbhuQ8Zd8W8OwtLMIALdPuYNKyU61JPtudaW0X /AUg== X-Gm-Message-State: AOJu0YxwdIESDGZtAD4VZ0QnIrWa6/5HMmBn7GFx1eHZSNfTcmaq0Xkq YV15FF83M0pl9UH/s2qmclDkII246uI8rO5JG2xQjw5Q+PX92dEmQWY5KQ== X-Gm-Gg: ASbGncuJGNxLqm+kQVUqfIg5i4lNdWm7hrbZdUNlcZIeCLAaMxdzh962HeUEwlkVQOT 1RuSV5Cn1J95fnXYdrdDTn5Fwf0CTqrMaRGBEoftCVmI+fgBLNVgcXng9syMf4snL0u85wh/1QG Uv3fNWlJI5YpECVCzFPx96cd+mFbdzAqOlD6mYZJRyhDRukfr9QwBO0Ym/+i8arB04ztGtjXj6u LcuVSO5JuT432X8C9yt2jFTQw4BW6CInMpN1C/RxNDO+K3tKcljIKnoi5NUmgSTECSO3O4w/ueS dRx7n5OThIyw67tfAoELvoHKJyBpFn38/PMocgBXOYcf X-Google-Smtp-Source: AGHT+IEYMBeSzYljDpAJXohx+CdUW4NEqrjhgPsoTH6i+drhbaEGAPioHP9J4a2pxhfj5qeewY5Jeg== X-Received: by 2002:a2e:a54c:0:b0:30c:7a7:e87c with SMTP id 38308e7fff4ca-321dc87d502mr5819321fa.35.1746259548713; Sat, 03 May 2025 01:05:48 -0700 (PDT) Received: from localhost ([178.178.93.161]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3202ad90937sm6548691fa.106.2025.05.03.01.05.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 May 2025 01:05:48 -0700 (PDT) From: Vladimir Serbinenko To: grub-devel@gnu.org Cc: Vladimir Serbinenko Subject: [PATCH v2 3/5] Use ET_DYN images and PHDRs for creating relocatable images Date: Sat, 3 May 2025 08:04:24 +0000 Message-ID: <20250503080528.13240-4-phcoder@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250503080528.13240-1-phcoder@gmail.com> References: <20250503080528.13240-1-phcoder@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::229; envelope-from=phcoder@gmail.com; helo=mail-lj1-x229.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 RVRfUkVMIGltYWdlcyBjb250YWluIGxvdHMgb2YgY29tcGxpY2F0ZWQgcmVsb2NhdGlvbnMuIE9u ZSBuZXcgcmVsb2NhdGlvbgp3ZSBuZWVkIHRvIHN1cHBvcnQgaXMgUl9MQVJDSF9HT1RfUENfSEky MC9MTzEyLiBSYXRoZXIgdGhhbiB0aGUgZXRlcm5hbCBjaGFzaW5nCm9mIGNvbXBsaWNhdGVkIHdl IGNhbiB1c2UgbGlua2VyIHRvIGhhbmRsZSB0aGVtIGFuZCB0aGVuIG9ubHkgcmVsYXRpdmVseQpz aW1wbGUgZHluYW1pYyByZWxvY3MgcmVtYWluIHRvIGhhbmRsZS4KClRoaXMgcmVxdWlyZWQgc21h bGwgYWRqdXN0bWVudHMgdG8gdGhlIGFzbSBjb2RlIHRvIGJlIGNvbXBhdGlibGUgd2l0aAotc2hh cmVkLgoKU2lnbmVkLW9mZi1ieTogVmxhZGltaXIgU2VyYmluZW5rbyA8cGhjb2RlckBnbWFpbC5j b20+Ci0tLQogY29uZi9NYWtlZmlsZS5jb21tb24gICAgICAgICAgICAgICAgfCAgIDIgKy0KIGNv bmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2ICstCiBncnViLWNvcmUvTWFr ZWZpbGUuY29yZS5kZWYgICAgICAgICB8ICAyMCArLQogZ3J1Yi1jb3JlL2tlcm4vaWE2NC9lZmkv c3RhcnR1cC5TICAgfCAgIDcgKy0KIGdydWItY29yZS9rZXJuL21pcHMvc3RhcnR1cC5TICAgICAg IHwgICA0ICstCiBncnViLWNvcmUva2Vybi94ODZfNjQvZWZpL3N0YXJ0dXAuUyB8ICAxMiArLQog aW5jbHVkZS9ncnViL3V0aWwvbWtpbWFnZS5oICAgICAgICAgfCAgIDQgKy0KIHV0aWwvZ3J1Yi1t a2ltYWdleHguYyAgICAgICAgICAgICAgIHwgNTQwICsrKysrKysrKysrKysrLS0tLS0tLS0tLS0t LS0KIDggZmlsZXMgY2hhbmdlZCwgMjkzIGluc2VydGlvbnMoKyksIDMwMiBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9jb25mL01ha2VmaWxlLmNvbW1vbiBiL2NvbmYvTWFrZWZpbGUuY29tbW9u CmluZGV4IDhiMWJkNjViYy4uNDBiMTYwOWRmIDEwMDY0NAotLS0gYS9jb25mL01ha2VmaWxlLmNv bW1vbgorKysgYi9jb25mL01ha2VmaWxlLmNvbW1vbgpAQCAtNDEsNyArNDEsNyBAQCBDRkxBR1Nf S0VSTkVMID0gJChDRkxBR1NfUExBVEZPUk0pIC1mZnJlZXN0YW5kaW5nCiBMREZMQUdTX0tFUk5F TCA9ICQoTERGTEFHU19QTEFURk9STSkgLW5vc3RkbGliICQoVEFSR0VUX0xERkxBR1NfT0xETUFH SUMpCiBDUFBGTEFHU19LRVJORUwgPSAkKENQUEZMQUdTX0NQVSkgJChDUFBGTEFHU19QTEFURk9S TSkgLURHUlVCX0tFUk5FTD0xCiBDQ0FTRkxBR1NfS0VSTkVMID0gJChDQ0FTRkxBR1NfQ1BVKSAk KENDQVNGTEFHU19QTEFURk9STSkKLVNUUklQRkxBR1NfS0VSTkVMID0gLVIgLnJlbC5keW4gLVIg LnJlZ2luZm8gLVIgLm5vdGUgLVIgLmNvbW1lbnQgLVIgLmRyZWN0dmUgLVIgLm5vdGUuZ251Lmdv bGQtdmVyc2lvbiAtUiAuTUlQUy5hYmlmbGFncyAtUiAuQVJNLmV4aWR4CitTVFJJUEZMQUdTX0tF Uk5FTCA9IC1SIC5yZWdpbmZvIC1SIC5ub3RlIC1SIC5jb21tZW50IC1SIC5kcmVjdHZlIC1SIC5u b3RlLmdudS5nb2xkLXZlcnNpb24gLVIgLk1JUFMuYWJpZmxhZ3MgLVIgLkFSTS5leGlkeAogaWYg IUNPTkRfZW11CiBpZiBDT05EX0hBVkVfQVNNX1VTQ09SRQogICBMREZMQUdTX0tFUk5FTCArPSAt V2wsLS1kZWZzeW09X21hbGxvYz1fZ3J1Yl9tYWxsb2MgLVdsLC0tZGVmc3ltPV9mcmVlPV9ncnVi X2ZyZWUKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBmZjA2 NzUyZDAuLmZiZWVhMGM3MCAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3Vy ZS5hYwpAQCAtODc3LDkgKzg3Nyw2IEBAIGlmICggdGVzdCAieCR0YXJnZXRfY3B1IiA9IHhpMzg2 IHx8IHRlc3QgIngkdGFyZ2V0X2NwdSIgPSB4eDg2XzY0ICk7IHRoZW4KIGZpCiAKIGlmIHRlc3Qg IngkdGFyZ2V0X2NwdSIgPSB4bG9vbmdhcmNoNjQ7IHRoZW4KLSAgVEFSR0VUX0NGTEFHUz0iJFRB UkdFVF9DRkxBR1MgLWZuby1wbHQiCi0gIFRBUkdFVF9DQ0FTRkxBR1M9IiRUQVJHRVRfQ0NBU0ZM QUdTIC1mbm8tcGx0IgotCiAgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igbm8tcmVsYXggb3B0aW9uc10s IGdydWJfY3ZfdGFyZ2V0X2NjX21ub19yZWxheCwgWwogICAgIGdydWJfY3ZfdGFyZ2V0X2NjX21u b19yZWxheD1ubwogICAgIGZvciBjYW5kIGluICItbW5vLXJlbGF4IiAiLVdhLC1tbm8tcmVsYXgi OyBkbwpAQCAtMTQzNyw3ICsxNDM0LDggQEAgY2FzZSAkdGFyZ2V0X2NwdS0kcGxhdGZvcm0gaW4K IAkgICBUQVJHRVRfQ0ZMQUdTPSIkVEFSR0VUX0NGTEFHUyAtZlBJQyIKIAlmaQogCTs7Ci0gICAg IHJpc2N2MzItKiB8IGlhNjQtKikKKyAgICAgIyBUSG9zZSBwbGF0Zm9ybXMgcmVxdWlyZSAtZlBJ QyBpbiBvcmRlciB0byBnZW5lcmF0ZSBFVF9EWU4KKyAgICAgcmlzY3YzMi0qIHwgaWE2NC0qIHwg bG9vbmdhcmNoNjQtKikKICAgICAgICAgVEFSR0VUX0NGTEFHUz0iJFRBUkdFVF9DRkxBR1MgLWZQ SUMiCiAJOzsKICAgICAgKikKZGlmZiAtLWdpdCBhL2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRl ZiBiL2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZgppbmRleCBmNzBlMDJlNjkuLjljYzBhMGFj MyAxMDA2NDQKLS0tIGEvZ3J1Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVmCisrKyBiL2dydWItY29y ZS9NYWtlZmlsZS5jb3JlLmRlZgpAQCAtNTEsMzQgKzUxLDM0IEBAIGtlcm5lbCA9IHsKIAogICBl bXVfbGRmbGFncyAgICAgICAgICAgICAgPSAnLVdsLC1yJzsKICAgaTM4Nl9lZmlfY2ZsYWdzICAg ICAgICAgID0gJy1mc2hvcnQtd2NoYXInOwotICBpMzg2X2VmaV9sZGZsYWdzICAgICAgICAgPSAn LVdsLC1yJzsKKyAgaTM4Nl9lZmlfbGRmbGFncyAgICAgICAgID0gJyQoVEFSR0VUX1JFTE9DQVRB QkxFKSc7CiAgIGkzODZfZWZpX3N0cmlwZmxhZ3MgICAgICA9ICctLXN0cmlwLXVubmVlZGVkIC1L IHN0YXJ0IC1SIC5ub3RlIC1SIC5jb21tZW50IC1SIC5ub3RlLmdudS5nb2xkLXZlcnNpb24nOwog ICB4ODZfNjRfZWZpX2NmbGFncyAgICAgICAgPSAnLWZzaG9ydC13Y2hhcic7Ci0gIHg4Nl82NF9l ZmlfbGRmbGFncyAgICAgICA9ICctV2wsLXInOworICB4ODZfNjRfZWZpX2xkZmxhZ3MgICAgICAg PSAnJChUQVJHRVRfUkVMT0NBVEFCTEUpJzsKICAgeDg2XzY0X2VmaV9zdHJpcGZsYWdzICAgID0g Jy0tc3RyaXAtdW5uZWVkZWQgLUsgc3RhcnQgLVIgLm5vdGUgLVIgLmNvbW1lbnQgLVIgLm5vdGUu Z251LmdvbGQtdmVyc2lvbic7CiAKICAgaWE2NF9lZmlfY2ZsYWdzID0gJy1mc2hvcnQtd2NoYXIg LWZuby1idWlsdGluIC1mcGljIC1taW5saW5lLWludC1kaXZpZGUtbWF4LXRocm91Z2hwdXQnOwot ICBpYTY0X2VmaV9sZGZsYWdzID0gJy1XbCwtcic7CisgIGlhNjRfZWZpX2xkZmxhZ3MgPSAnLXNo YXJlZCc7CiAgIGlhNjRfZWZpX3N0cmlwZmxhZ3MgPSAnLS1zdHJpcC11bm5lZWRlZCAtSyBzdGFy dCAtUiAubm90ZSAtUiAuY29tbWVudCAtUiAubm90ZS5nbnUuZ29sZC12ZXJzaW9uJzsKIAogICBh cm1fZWZpX2NmbGFncyAgICAgICAgICAgPSAnLWZzaG9ydC13Y2hhcic7Ci0gIGFybV9lZmlfbGRm bGFncyAgICAgICAgICA9ICctV2wsLXInOworICBhcm1fZWZpX2xkZmxhZ3MgICAgICAgICAgPSAn LXNoYXJlZCc7CiAgIGFybV9lZmlfc3RyaXBmbGFncyAgICAgICA9ICctLXN0cmlwLXVubmVlZGVk IC1LIHN0YXJ0IC1SIC5ub3RlIC1SIC5jb21tZW50IC1SIC5ub3RlLmdudS5nb2xkLXZlcnNpb24n OwogCiAgIGFybTY0X2VmaV9jZmxhZ3MgICAgICAgICAgID0gJy1mc2hvcnQtd2NoYXInOwotICBh cm02NF9lZmlfbGRmbGFncyAgICAgICAgICA9ICctV2wsLXInOworICBhcm02NF9lZmlfbGRmbGFn cyAgICAgICAgICA9ICctc2hhcmVkJzsKICAgYXJtNjRfZWZpX3N0cmlwZmxhZ3MgICAgICAgPSAn LS1zdHJpcC11bm5lZWRlZCAtSyBzdGFydCAtUiAubm90ZSAtUiAuY29tbWVudCAtUiAubm90ZS5n bnUuZ29sZC12ZXJzaW9uIC1SIC5laF9mcmFtZSc7CiAKICAgbG9vbmdhcmNoNjRfZWZpX2NmbGFn cyAgICAgICA9ICctZnNob3J0LXdjaGFyJzsKLSAgbG9vbmdhcmNoNjRfZWZpX2xkZmxhZ3MgICAg ICA9ICctV2wsLXInOworICBsb29uZ2FyY2g2NF9lZmlfbGRmbGFncyAgICAgID0gJy1zaGFyZWQn OwogICBsb29uZ2FyY2g2NF9lZmlfc3RyaXBmbGFncyAgID0gJy0tc3RyaXAtdW5uZWVkZWQgLUsg c3RhcnQgLVIgLm5vdGUgLVIgLmNvbW1lbnQgLVIgLm5vdGUuZ251LmdvbGQtdmVyc2lvbiAtUiAu ZWhfZnJhbWUnOwogCiAgIHJpc2N2MzJfZWZpX2NmbGFncyAgICAgICA9ICctZnNob3J0LXdjaGFy JzsKLSAgcmlzY3YzMl9lZmlfbGRmbGFncyAgICAgID0gJy1XbCwtcic7CisgIHJpc2N2MzJfZWZp X2xkZmxhZ3MgICAgICA9ICctc2hhcmVkJzsKICAgcmlzY3YzMl9lZmlfc3RyaXBmbGFncyAgID0g Jy0tc3RyaXAtdW5uZWVkZWQgLUsgc3RhcnQgLVIgLm5vdGUgLVIgLmNvbW1lbnQgLVIgLm5vdGUu Z251LmdvbGQtdmVyc2lvbiAtUiAuZWhfZnJhbWUnOwogCiAgIHJpc2N2NjRfZWZpX2NmbGFncyAg ICAgICA9ICctZnNob3J0LXdjaGFyJzsKLSAgcmlzY3Y2NF9lZmlfbGRmbGFncyAgICAgID0gJy1X bCwtcic7CisgIHJpc2N2NjRfZWZpX2xkZmxhZ3MgICAgICA9ICctc2hhcmVkJzsKICAgcmlzY3Y2 NF9lZmlfc3RyaXBmbGFncyAgID0gJy0tc3RyaXAtdW5uZWVkZWQgLUsgc3RhcnQgLVIgLm5vdGUg LVIgLmNvbW1lbnQgLVIgLm5vdGUuZ251LmdvbGQtdmVyc2lvbiAtUiAuZWhfZnJhbWUnOwogCiAg IGkzODZfcGNfbGRmbGFncyAgICAgICAgICA9ICckKFRBUkdFVF9JTUdfTERGTEFHUyknOwpAQCAt MTA4LDkgKzEwOCw5IEBAIGtlcm5lbCA9IHsKICAgaTM4Nl9xZW11X2NwcGZsYWdzICAgICA9ICct REdSVUJfQk9PVF9NQUNISU5FX0xJTktfQUREUj0kKEdSVUJfQk9PVF9NQUNISU5FX0xJTktfQURE UiknOwogICBlbXVfY2ZsYWdzID0gJyQoQ0ZMQUdTX0dOVUxJQiknOwogICBlbXVfY3BwZmxhZ3Mg PSAnJChDUFBGTEFHU19HTlVMSUIpJzsKLSAgYXJtX3Vib290X2xkZmxhZ3MgICAgICAgPSAnLVds LC1yJzsKKyAgYXJtX3Vib290X2xkZmxhZ3MgICAgICAgPSAnLXNoYXJlZCc7CiAgIGFybV91Ym9v dF9zdHJpcGZsYWdzICAgID0gJy0tc3RyaXAtdW5uZWVkZWQgLUsgc3RhcnQgLVIgLm5vdGUgLVIg LmNvbW1lbnQgLVIgLm5vdGUuZ251LmdvbGQtdmVyc2lvbic7Ci0gIGFybV9jb3JlYm9vdF9sZGZs YWdzICAgICAgID0gJy1XbCwtcic7CisgIGFybV9jb3JlYm9vdF9sZGZsYWdzICAgICAgID0gJy1z aGFyZWQnOwogICBhcm1fY29yZWJvb3Rfc3RyaXBmbGFncyAgICA9ICctLXN0cmlwLXVubmVlZGVk IC1LIHN0YXJ0IC1SIC5ub3RlIC1SIC5jb21tZW50IC1SIC5ub3RlLmdudS5nb2xkLXZlcnNpb24n OwogCiAgIGkzODZfcGNfc3RhcnR1cCA9IGtlcm4vaTM4Ni9wYy9zdGFydHVwLlM7CmRpZmYgLS1n aXQgYS9ncnViLWNvcmUva2Vybi9pYTY0L2VmaS9zdGFydHVwLlMgYi9ncnViLWNvcmUva2Vybi9p YTY0L2VmaS9zdGFydHVwLlMKaW5kZXggZDc1YzZkN2NjLi5lMjIwY2JmMmQgMTAwNjQ0Ci0tLSBh L2dydWItY29yZS9rZXJuL2lhNjQvZWZpL3N0YXJ0dXAuUworKysgYi9ncnViLWNvcmUva2Vybi9p YTY0L2VmaS9zdGFydHVwLlMKQEAgLTI5LDggKzI5LDExIEBACiBfc3RhcnQ6CiAJYWxsb2MgbG9j MD1hci5wZnMsMiw0LDAsMAogCW1vdiBsb2MxPXJwCi0JYWRkbCBsb2MyPUBncHJlbChncnViX2Vm aV9pbWFnZV9oYW5kbGUpLGdwCi0JYWRkbCBsb2MzPUBncHJlbChncnViX2VmaV9zeXN0ZW1fdGFi bGUpLGdwCisJYWRkbCBsb2MyPUBsdG9mZngoZ3J1Yl9lZmlfaW1hZ2VfaGFuZGxlKSxyMQorCWFk ZGwgbG9jMz1AbHRvZmZ4KGdydWJfZWZpX3N5c3RlbV90YWJsZSkscjEKKwk7OworCWxkOC5tb3Yg bG9jMiA9IFtsb2MyXSwgZ3J1Yl9lZmlfaW1hZ2VfaGFuZGxlCisJbGQ4Lm1vdiBsb2MzID0gW2xv YzNdLCBncnViX2VmaV9zeXN0ZW1fdGFibGUKIAk7OwogCXN0OCBbbG9jMl09aW4wCiAJc3Q4IFts b2MzXT1pbjEKZGlmZiAtLWdpdCBhL2dydWItY29yZS9rZXJuL21pcHMvc3RhcnR1cC5TIGIvZ3J1 Yi1jb3JlL2tlcm4vbWlwcy9zdGFydHVwLlMKaW5kZXggMWZkYjU4YWNhLi5mZGU2NDM1OGMgMTAw NjQ0Ci0tLSBhL2dydWItY29yZS9rZXJuL21pcHMvc3RhcnR1cC5TCisrKyBiL2dydWItY29yZS9r ZXJuL21pcHMvc3RhcnR1cC5TCkBAIC03NCw4ICs3NCw4IEBAIGNvbnQ6CiAjZW5kaWYKIAogCS8q IE1vdmUgdGhlIG1vZHVsZXMgb3V0IG9mIEJTUy4gICovCi0JbHVpICR0MiwgJWhpKF9fYnNzX3N0 YXJ0KQotCWFkZGl1ICR0MiwgJWxvKF9fYnNzX3N0YXJ0KQorCWx1aSAkdDIsICVoaShfZWRhdGEp CisJYWRkaXUgJHQyLCAlbG8oX2VkYXRhKQogCQogCWx1aSAkdDEsICVoaShfZW5kKQogCWFkZGl1 ICR0MSwgJWxvKF9lbmQpCmRpZmYgLS1naXQgYS9ncnViLWNvcmUva2Vybi94ODZfNjQvZWZpL3N0 YXJ0dXAuUyBiL2dydWItY29yZS9rZXJuL3g4Nl82NC9lZmkvc3RhcnR1cC5TCmluZGV4IDkzNTdl NWM1ZC4uZjkzYWFlNDI0IDEwMDY0NAotLS0gYS9ncnViLWNvcmUva2Vybi94ODZfNjQvZWZpL3N0 YXJ0dXAuUworKysgYi9ncnViLWNvcmUva2Vybi94ODZfNjQvZWZpL3N0YXJ0dXAuUwpAQCAtMjUs MTAgKzI1LDE4IEBACiAgICAgICAgIC5nbG9ibCAgc3RhcnQsIF9zdGFydAogICAgICAgICAuY29k ZTY0CiAKKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisj ZGVmaW5lIEVYVF9HT1QoeCkgLnJlZnB0ci4gIyMgeAorI2Vsc2UKKyNkZWZpbmUgRVhUX0dPVCh4 KSB4IEAgR09UUENSRUwKKyNlbmRpZgorCiBzdGFydDoKIF9zdGFydDoKLQltb3ZxCSVyY3gsIEVY VF9DKGdydWJfZWZpX2ltYWdlX2hhbmRsZSkoJXJpcCkKLQltb3ZxCSVyZHgsIEVYVF9DKGdydWJf ZWZpX3N5c3RlbV90YWJsZSkoJXJpcCkKKwltb3ZxCUVYVF9HT1QoZ3J1Yl9lZmlfaW1hZ2VfaGFu ZGxlKSAoJXJpcCksICVyYXgKKwltb3ZxCSVyY3gsICglcmF4KQorCW1vdnEJRVhUX0dPVChncnVi X2VmaV9zeXN0ZW1fdGFibGUpKCVyaXApLCAlcmF4CisJbW92cQklcmR4LCAoJXJheCkKIAogCWFu ZHEJJH4weGYsICVyc3AKIAljYWxsCUVYVF9DKGdydWJfbWFpbikKZGlmZiAtLWdpdCBhL2luY2x1 ZGUvZ3J1Yi91dGlsL21raW1hZ2UuaCBiL2luY2x1ZGUvZ3J1Yi91dGlsL21raW1hZ2UuaAppbmRl eCA5ZDc0ZjgyYzUuLjcyYWM5NzU4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncnViL3V0aWwvbWtp bWFnZS5oCisrKyBiL2luY2x1ZGUvZ3J1Yi91dGlsL21raW1hZ2UuaApAQCAtMzAsMTIgKzMwLDE0 IEBAIHN0cnVjdCBncnViX21raW1hZ2VfbGF5b3V0CiAgIHNpemVfdCByZWxvY19zaXplOwogICBz aXplX3QgYWxpZ247CiAgIGdydWJfc2l6ZV90IGlhNjRqbXBfb2ZmOwotICBncnViX3NpemVfdCB0 cmFtcF9vZmY7CiAgIGdydWJfc2l6ZV90IGdvdF9vZmY7CiAgIGdydWJfc2l6ZV90IGdvdF9zaXpl OwogICB1bnNpZ25lZCBpYTY0am1wbnVtOwogICBncnViX3VpbnQzMl90IGJzc19zdGFydDsKICAg Z3J1Yl91aW50MzJfdCBlbmQ7CisgIGdydWJfaW50NjRfdCB2YWRkcl9kaWZmOworICBncnViX2lu dDY0X3Qgb2ZmX2RpZmY7CisgIGdydWJfc2l6ZV90IGR5bl9wbHRvZmY7CiB9OwogCiAvKiBQcml2 YXRlIGhlYWRlci4gVXNlIG9ubHkgaW4gbWtpbWFnZS1yZWxhdGVkIHNvdXJjZXMuICAqLwpkaWZm IC0tZ2l0IGEvdXRpbC9ncnViLW1raW1hZ2V4eC5jIGIvdXRpbC9ncnViLW1raW1hZ2V4eC5jCmlu ZGV4IDk3ZTgzNjcxYS4uYTYwZjE3MzBhIDEwMDY0NAotLS0gYS91dGlsL2dydWItbWtpbWFnZXh4 LmMKKysrIGIvdXRpbC9ncnViLW1raW1hZ2V4eC5jCkBAIC0xMDAsMTEgKzEwMCwxMyBAQCBzdHJ1 Y3Qgc2VjdGlvbl9tZXRhZGF0YQogewogICBFbGZfSGFsZiBudW1fc2VjdGlvbnM7CiAgIEVsZl9T aGRyICpzZWN0aW9uczsKLSAgRWxmX0FkZHIgKmFkZHJzOwotICBFbGZfQWRkciAqdmFkZHJzOwog ICBFbGZfSGFsZiBzZWN0aW9uX2VudHNpemU7CiAgIEVsZl9TaGRyICpzeW10YWI7CiAgIGNvbnN0 IGNoYXIgKnN0cnRhYjsKKworICBFbGZfSGFsZiBudW1fcGhkcnM7CisgIEVsZl9QaGRyICpwaGRy czsKKyAgRWxmX0hhbGYgcGhkcl9lbnRzaXplOwogfTsKIAogI2RlZmluZSBHUlVCX1NCQVRfTk9U RV9OQU1FICIuc2JhdCIKQEAgLTYwNCw3ICs2MDYsNyBAQCBTVUZGSVggKGdydWJfbWtpbWFnZV9n ZW5lcmF0ZV9lbGYpIChjb25zdCBzdHJ1Y3QgZ3J1Yl9pbnN0YWxsX2ltYWdlX3RhcmdldF9kZXNj CiBzdGF0aWMgRWxmX0FkZHIKIFNVRkZJWCAocmVsb2NhdGVfc3ltYm9scykgKEVsZl9FaGRyICpl LCBzdHJ1Y3Qgc2VjdGlvbl9tZXRhZGF0YSAqc21kLAogCQkJICAgdm9pZCAqanVtcGVycywgRWxm X0FkZHIganVtcGVyc19hZGRyLAotCQkJICAgRWxmX0FkZHIgYnNzX3N0YXJ0LCBFbGZfQWRkciBl bmQsCisJCQkgICBzdHJ1Y3QgZ3J1Yl9ta2ltYWdlX2xheW91dCAqbGF5b3V0LAogCQkJICAgY29u c3Qgc3RydWN0IGdydWJfaW5zdGFsbF9pbWFnZV90YXJnZXRfZGVzYyAqaW1hZ2VfdGFyZ2V0KQog ewogICBFbGZfV29yZCBzeW10YWJfc2l6ZSwgc3ltX3NpemUsIG51bV9zeW1zOwpAQCAtNjQyLDEx ICs2NDQsNyBAQCBTVUZGSVggKHJlbG9jYXRlX3N5bWJvbHMpIChFbGZfRWhkciAqZSwgc3RydWN0 IHNlY3Rpb25fbWV0YWRhdGEgKnNtZCwKICAgICAgICAgfQogICAgICAgZWxzZSBpZiAoY3VyX2lu ZGV4ID09IFNUTl9VTkRFRikKIAl7Ci0JICBpZiAoc3ltLT5zdF9uYW1lICYmIGdydWJfc3RyY21w IChuYW1lLCAiX19ic3Nfc3RhcnQiKSA9PSAwKQotCSAgICBzeW0tPnN0X3ZhbHVlID0gYnNzX3N0 YXJ0OwotCSAgZWxzZSBpZiAoc3ltLT5zdF9uYW1lICYmIGdydWJfc3RyY21wIChuYW1lLCAiX2Vu ZCIpID09IDApCi0JICAgIHN5bS0+c3RfdmFsdWUgPSBlbmQ7Ci0JICBlbHNlIGlmIChzeW0tPnN0 X25hbWUpCisJICBpZiAoc3ltLT5zdF9uYW1lKQogCSAgICBncnViX3V0aWxfZXJyb3IgKCJ1bmRl ZmluZWQgc3ltYm9sICVzIiwgbmFtZSk7CiAJICBlbHNlCiAJICAgIGNvbnRpbnVlOwpAQCAtNjU2 LDcgKzY1NCw3IEBAIFNVRkZJWCAocmVsb2NhdGVfc3ltYm9scykgKEVsZl9FaGRyICplLCBzdHJ1 Y3Qgc2VjdGlvbl9tZXRhZGF0YSAqc21kLAogICAgICAgZWxzZQogCXsKIAkgIHN5bS0+c3RfdmFs dWUgPSAoZ3J1Yl90YXJnZXRfdG9faG9zdCAoc3ltLT5zdF92YWx1ZSkKLQkJCSAgICsgc21kLT52 YWRkcnNbY3VyX2luZGV4XSk7CisJCQkgICArIGxheW91dC0+dmFkZHJfZGlmZik7CiAJfQogCiAg ICAgICBpZiAoaW1hZ2VfdGFyZ2V0LT5lbGZfdGFyZ2V0ID09IEVNX0lBXzY0ICYmIEVMRl9TVF9U WVBFIChzeW0tPnN0X2luZm8pCkBAIC02NjUsMTMgKzY2MywxMSBAQCBTVUZGSVggKHJlbG9jYXRl X3N5bWJvbHMpIChFbGZfRWhkciAqZSwgc3RydWN0IHNlY3Rpb25fbWV0YWRhdGEgKnNtZCwKIAkg ICpqcHRyID0gZ3J1Yl9ob3N0X3RvX3RhcmdldDY0IChzeW0tPnN0X3ZhbHVlKTsKIAkgIHN5bS0+ c3RfdmFsdWUgPSAoY2hhciAqKSBqcHRyIC0gKGNoYXIgKikganVtcGVycyArIGp1bXBlcnNfYWRk cjsKIAkgIGpwdHIrKzsKLQkgICpqcHRyID0gMDsKKwkgICpqcHRyID0gbGF5b3V0LT52YWRkcl9k aWZmICsgbGF5b3V0LT5keW5fcGx0b2ZmOwogCSAganB0cisrOwogCX0KLSAgICAgIGdydWJfdXRp bF9pbmZvICgibG9jYXRpbmcgJXMgYXQgMHglIiAgR1JVQl9IT1NUX1BSSXhMT05HX0xPTkcKLQkJ ICAgICAgIiAoMHglIiAgR1JVQl9IT1NUX1BSSXhMT05HX0xPTkcgIikiLCBuYW1lLAotCQkgICAg ICAodW5zaWduZWQgbG9uZyBsb25nKSBzeW0tPnN0X3ZhbHVlLAotCQkgICAgICAodW5zaWduZWQg bG9uZyBsb25nKSBzbWQtPnZhZGRyc1tjdXJfaW5kZXhdKTsKKyAgICAgIGdydWJfdXRpbF9pbmZv ICgibG9jYXRpbmcgJXMgYXQgMHglIiAgR1JVQl9IT1NUX1BSSXhMT05HX0xPTkcsIG5hbWUsCisJ CSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN5bS0+c3RfdmFsdWUpOwogCiAgICAgICBpZiAo c3RhcnRfYWRkcmVzcyA9PSAoRWxmX0FkZHIpLTEpCiAJaWYgKHN0cmNtcCAobmFtZSwgIl9zdGFy dCIpID09IDAgfHwgc3RyY21wIChuYW1lLCAic3RhcnQiKSA9PSAwKQpAQCAtNjk2LDEwICs2OTIs MTAgQEAgU1VGRklYIChnZXRfc3ltYm9sX2FkZHJlc3MpIChFbGZfRWhkciAqZSwgRWxmX1NoZHIg KnMsIEVsZl9Xb3JkIGksCiAKIC8qIFJldHVybiB0aGUgYWRkcmVzcyBvZiBhIG1vZGlmaWVkIHZh bHVlLiAgKi8KIHN0YXRpYyBFbGZfQWRkciAqCi1TVUZGSVggKGdldF90YXJnZXRfYWRkcmVzcykg KEVsZl9FaGRyICplLCBFbGZfU2hkciAqcywgRWxmX0FkZHIgb2Zmc2V0LAorU1VGRklYIChnZXRf dGFyZ2V0X2FkZHJlc3MpIChjaGFyICplLCBzdHJ1Y3QgZ3J1Yl9ta2ltYWdlX2xheW91dCAqbGF5 b3V0LCBFbGZfQWRkciBvZmZzZXQsCiAJCSAgICBjb25zdCBzdHJ1Y3QgZ3J1Yl9pbnN0YWxsX2lt YWdlX3RhcmdldF9kZXNjICppbWFnZV90YXJnZXQpCiB7Ci0gIHJldHVybiAoRWxmX0FkZHIgKikg KChjaGFyICopIGUgKyBncnViX3RhcmdldF90b19ob3N0IChzLT5zaF9vZmZzZXQpICsgb2Zmc2V0 KTsKKyAgcmV0dXJuIChFbGZfQWRkciAqKSAoKGNoYXIgKikgZSArIG9mZnNldCArIGxheW91dC0+ b2ZmX2RpZmYpOwogfQogCiAjaWZkZWYgTUtJTUFHRV9FTEY2NApAQCAtNzgzLDYgKzc3OSw4IEBA IGFybV9nZXRfdHJhbXBvbGluZV9zaXplIChFbGZfRWhkciAqZSwKIAkgICAgICB7CiAJICAgICAg Y2FzZSBSX0FSTV9BQlMzMjoKIAkgICAgICBjYXNlIFJfQVJNX1Y0Qlg6CisJICAgICAgY2FzZSBS X0FSTV9KVU1QX1NMT1Q6CisJICAgICAgY2FzZSBSX0FSTV9SRUxBVElWRToKIAkJYnJlYWs7CiAJ ICAgICAgY2FzZSBSX0FSTV9USE1fQ0FMTDoKIAkgICAgICBjYXNlIFJfQVJNX1RITV9KVU1QMjQ6 CkBAIC04MjAsMjAgKzgxOCwxNyBAQCBTVUZGSVggKGlzX2tlcHRfcmVsb2Nfc2VjdGlvbikgKEVs Zl9TaGRyICpzLCBjb25zdCBzdHJ1Y3QgZ3J1Yl9pbnN0YWxsX2ltYWdlX3RhcgogICAgYWdhaW4g YnkgYSBQRTMyIHJlbG9jYXRvciB3aGVuIGxvYWRlZC4gICovCiBzdGF0aWMgdm9pZAogU1VGRklY IChyZWxvY2F0ZV9hZGRycykgKEVsZl9FaGRyICplLCBzdHJ1Y3Qgc2VjdGlvbl9tZXRhZGF0YSAq c21kLAotCQkJICAgICBjaGFyICpwZV90YXJnZXQsIEVsZl9BZGRyIHRyYW1wX29mZiwgRWxmX0Fk ZHIgZ290X29mZiwKKwkJCSAgICAgY2hhciAqcGVfdGFyZ2V0LCBzdHJ1Y3QgZ3J1Yl9ta2ltYWdl X2xheW91dCAqbGF5b3V0LAogCQkJICAgICBjb25zdCBzdHJ1Y3QgZ3J1Yl9pbnN0YWxsX2ltYWdl X3RhcmdldF9kZXNjICppbWFnZV90YXJnZXQpCiB7CiAgIEVsZl9IYWxmIGk7CiAgIEVsZl9TaGRy ICpzOwogI2lmZGVmIE1LSU1BR0VfRUxGNjQKLSAgc3RydWN0IGdydWJfaWE2NF90cmFtcG9saW5l ICp0ciA9ICh2b2lkICopIChwZV90YXJnZXQgKyB0cmFtcF9vZmYpOwotICBncnViX3VpbnQ2NF90 ICpncHB0ciA9ICh2b2lkICopIChwZV90YXJnZXQgKyBnb3Rfb2ZmKTsKKyAgZ3J1Yl91aW50NjRf dCAqZ3BwdHIgPSAodm9pZCAqKSAocGVfdGFyZ2V0ICsgbGF5b3V0LT5nb3Rfb2ZmKTsKICAgdW5z aWduZWQgdW5tYXRjaGVkX2Fkcl9nb3RfcGFnZSA9IDA7CiAgIHN0cnVjdCBncnViX2xvb25nYXJj aDY0X3N0YWNrIHN0YWNrOwogICBncnViX2xvb25nYXJjaDY0X3N0YWNrX2luaXQgKCZzdGFjayk7 CiAjZGVmaW5lIE1BU0sxOSAoKDEgPDwgMTkpIC0gMSkKLSNlbHNlCi0gIGdydWJfdWludDMyX3Qg KnRyID0gKHZvaWQgKikgKHBlX3RhcmdldCArIHRyYW1wX29mZik7CiAjZW5kaWYKIAogICBmb3Ig KGkgPSAwLCBzID0gc21kLT5zZWN0aW9uczsKQEAgLTg0Niw3ICs4NDEsNyBAQCBTVUZGSVggKHJl bG9jYXRlX2FkZHJzKSAoRWxmX0VoZHIgKmUsIHN0cnVjdCBzZWN0aW9uX21ldGFkYXRhICpzbWQs CiAJRWxmX1dvcmQgcnRhYl9zaXplLCByX3NpemUsIG51bV9yczsKIAlFbGZfT2ZmIHJ0YWJfb2Zm c2V0OwogCUVsZl9Xb3JkIHRhcmdldF9zZWN0aW9uX2luZGV4OwotCUVsZl9BZGRyIHRhcmdldF9z ZWN0aW9uX2FkZHI7CisJRWxmX0FkZHIgdGFyZ2V0X3NlY3Rpb25fdmFkZHIgPSBsYXlvdXQtPnZh ZGRyX2RpZmY7CiAJRWxmX1NoZHIgKnRhcmdldF9zZWN0aW9uOwogCUVsZl9Xb3JkIGo7CiAKQEAg LTg1OSw3ICs4NTQsNiBAQCBTVUZGSVggKHJlbG9jYXRlX2FkZHJzKSAoRWxmX0VoZHIgKmUsIHN0 cnVjdCBzZWN0aW9uX21ldGFkYXRhICpzbWQsCiAJICB9CiAKIAl0YXJnZXRfc2VjdGlvbl9pbmRl eCA9IGdydWJfdGFyZ2V0X3RvX2hvc3QzMiAocy0+c2hfaW5mbyk7Ci0JdGFyZ2V0X3NlY3Rpb25f YWRkciA9IHNtZC0+YWRkcnNbdGFyZ2V0X3NlY3Rpb25faW5kZXhdOwogCXRhcmdldF9zZWN0aW9u ID0gKEVsZl9TaGRyICopICgoY2hhciAqKSBzbWQtPnNlY3Rpb25zCiAJCQkJCSArICh0YXJnZXRf c2VjdGlvbl9pbmRleAogCQkJCQkgICAgKiBzbWQtPnNlY3Rpb25fZW50c2l6ZSkpOwpAQCAtODg0 LDcgKzg3OCw3IEBAIFNVRkZJWCAocmVsb2NhdGVfYWRkcnMpIChFbGZfRWhkciAqZSwgc3RydWN0 IHNlY3Rpb25fbWV0YWRhdGEgKnNtZCwKIAkgICAgRWxmX0FkZHIgYWRkZW5kOwogCiAJICAgIG9m ZnNldCA9IGdydWJfdGFyZ2V0X3RvX2hvc3QgKHItPnJfb2Zmc2V0KTsKLQkgICAgdGFyZ2V0ID0g U1VGRklYIChnZXRfdGFyZ2V0X2FkZHJlc3MpIChlLCB0YXJnZXRfc2VjdGlvbiwKKwkgICAgdGFy Z2V0ID0gU1VGRklYIChnZXRfdGFyZ2V0X2FkZHJlc3MpIChwZV90YXJnZXQsIGxheW91dCwKIAkJ CQkJCSAgb2Zmc2V0LCBpbWFnZV90YXJnZXQpOwogCSAgICBpbmZvID0gZ3J1Yl90YXJnZXRfdG9f aG9zdCAoci0+cl9pbmZvKTsKIAkgICAgc3ltX2FkZHIgPSBTVUZGSVggKGdldF9zeW1ib2xfYWRk cmVzcykgKGUsIHNtZC0+c3ltdGFiLApAQCAtOTAxLDYgKzg5NSwxMCBAQCBTVUZGSVggKHJlbG9j YXRlX2FkZHJzKSAoRWxmX0VoZHIgKmUsIHN0cnVjdCBzZWN0aW9uX21ldGFkYXRhICpzbWQsCiAJ CWNhc2UgUl8zODZfTk9ORToKIAkJICBicmVhazsKIAorCQljYXNlIFJfMzg2X1JFTEFUSVZFOgor CQkgICp0YXJnZXQgPSBncnViX2hvc3RfdG9fdGFyZ2V0MzIgKGdydWJfdGFyZ2V0X3RvX2hvc3Qz MiAoKnRhcmdldCkgKyBhZGRlbmQgKyBsYXlvdXQtPnZhZGRyX2RpZmYpOworCQkgIGJyZWFrOwor CiAJCWNhc2UgUl8zODZfMzI6CiAJCSAgLyogVGhpcyBpcyBhYnNvbHV0ZS4gICovCiAJCSAgKnRh cmdldCA9IGdydWJfaG9zdF90b190YXJnZXQzMiAoZ3J1Yl90YXJnZXRfdG9faG9zdDMyICgqdGFy Z2V0KQpAQCAtOTE2LDggKzkxNCw3IEBAIFNVRkZJWCAocmVsb2NhdGVfYWRkcnMpIChFbGZfRWhk ciAqZSwgc3RydWN0IHNlY3Rpb25fbWV0YWRhdGEgKnNtZCwKIAkJICAvKiBUaGlzIGlzIHJlbGF0 aXZlLiAgKi8KIAkJICAqdGFyZ2V0ID0gZ3J1Yl9ob3N0X3RvX3RhcmdldDMyIChncnViX3Rhcmdl dF90b19ob3N0MzIgKCp0YXJnZXQpCiAJCQkJCQkgICArIGFkZGVuZCArIHN5bV9hZGRyCi0JCQkJ CQkgICAtIHRhcmdldF9zZWN0aW9uX2FkZHIgLSBvZmZzZXQKLQkJCQkJCSAgIC0gaW1hZ2VfdGFy Z2V0LT52YWRkcl9vZmZzZXQpOworCQkJCQkJICAgLSB0YXJnZXRfc2VjdGlvbl92YWRkciAtIG9m ZnNldCk7CiAJCSAgZ3J1Yl91dGlsX2luZm8gKCJyZWxvY2F0aW5nIGFuIFJfMzg2X1BDMzIgZW50 cnkgdG8gMHglIgogCQkJCSAgR1JVQl9IT1NUX1BSSXhMT05HX0xPTkcgIiBhdCB0aGUgb2Zmc2V0 IDB4JSIKIAkJCQkgIEdSVUJfSE9TVF9QUkl4TE9OR19MT05HLApAQCAtOTM4LDEwICs5MzUsMjUg QEAgU1VGRklYIChyZWxvY2F0ZV9hZGRycykgKEVsZl9FaGRyICplLCBzdHJ1Y3Qgc2VjdGlvbl9t ZXRhZGF0YSAqc21kLAogCQljYXNlIFJfWDg2XzY0X05PTkU6CiAJCSAgYnJlYWs7CiAKKwkJY2Fz ZSBSX1g4Nl82NF9SRUxBVElWRToKKwkJICAqdGFyZ2V0ID0gZ3J1Yl9ob3N0X3RvX3RhcmdldDY0 IChhZGRlbmQgKyBsYXlvdXQtPnZhZGRyX2RpZmYpOworCQkgIGJyZWFrOworCisJCWNhc2UgUl9Y ODZfNjRfR0xPQl9EQVQ6CiAJCWNhc2UgUl9YODZfNjRfNjQ6CiAJCSAgKnRhcmdldCA9IGdydWJf aG9zdF90b190YXJnZXQ2NCAoZ3J1Yl90YXJnZXRfdG9faG9zdDY0ICgqdGFyZ2V0KQogCQkJCQkJ ICAgKyBhZGRlbmQgKyBzeW1fYWRkcik7CiAJCSAgZ3J1Yl91dGlsX2luZm8gKCJyZWxvY2F0aW5n IGFuIFJfWDg2XzY0XzY0IGVudHJ5IHRvIDB4JSIKKwkJCQkgIEdSVUJfSE9TVF9QUkl4TE9OR19M T05HICIgYXQgdGhlIG9mZnNldCAweCUiCisJCQkJICBHUlVCX0hPU1RfUFJJeExPTkdfTE9ORyAi IGJ5IDB4JSIgR1JVQl9IT1NUX1BSSXhMT05HX0xPTkcsCisJCQkJICAodW5zaWduZWQgbG9uZyBs b25nKSAqdGFyZ2V0LAorCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgb2Zmc2V0LAorCQkJCSAg KHVuc2lnbmVkIGxvbmcgbG9uZykgYWRkZW5kICsgc3ltX2FkZHIpOworCQkgIGJyZWFrOworCisJ CWNhc2UgUl9YODZfNjRfSlVNUF9TTE9UOgorCQkgICp0YXJnZXQgPSBncnViX2hvc3RfdG9fdGFy Z2V0NjQgKGFkZGVuZCArIHN5bV9hZGRyKTsKKwkJICBncnViX3V0aWxfaW5mbyAoInJlbG9jYXRp bmcgYW4gUl9YODZfNjRfSlVNUF9TTE9UIGVudHJ5IHRvIDB4JSIKIAkJCQkgIEdSVUJfSE9TVF9Q Ukl4TE9OR19MT05HICIgYXQgdGhlIG9mZnNldCAweCUiCiAJCQkJICBHUlVCX0hPU1RfUFJJeExP TkdfTE9ORywKIAkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpICp0YXJnZXQsCkBAIC05NTQsOCAr OTY2LDcgQEAgU1VGRklYIChyZWxvY2F0ZV9hZGRycykgKEVsZl9FaGRyICplLCBzdHJ1Y3Qgc2Vj dGlvbl9tZXRhZGF0YSAqc21kLAogCQkgICAgZ3J1Yl91aW50MzJfdCAqdDMyID0gKGdydWJfdWlu dDMyX3QgKikgdGFyZ2V0OwogCQkgICAgKnQzMiA9IGdydWJfaG9zdF90b190YXJnZXQ2NCAoZ3J1 Yl90YXJnZXRfdG9faG9zdDMyICgqdDMyKQogCQkJCQkJICArIGFkZGVuZCArIHN5bV9hZGRyCi0J CQkJCQkgIC0gdGFyZ2V0X3NlY3Rpb25fYWRkciAtIG9mZnNldAotCQkJCQkJICAtIGltYWdlX3Rh cmdldC0+dmFkZHJfb2Zmc2V0KTsKKwkJCQkJCSAgLSB0YXJnZXRfc2VjdGlvbl92YWRkciAtIG9m ZnNldCk7CiAJCSAgICBncnViX3V0aWxfaW5mbyAoInJlbG9jYXRpbmcgYW4gUl9YODZfNjRfUEMz MiBlbnRyeSB0byAweCV4IGF0IHRoZSBvZmZzZXQgMHglIgogCQkJCSAgICBHUlVCX0hPU1RfUFJJ eExPTkdfTE9ORywKIAkJCQkgICAgKnQzMiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgb2Zmc2V0KTsK QEAgLTk2Niw4ICs5NzcsNyBAQCBTVUZGSVggKHJlbG9jYXRlX2FkZHJzKSAoRWxmX0VoZHIgKmUs IHN0cnVjdCBzZWN0aW9uX21ldGFkYXRhICpzbWQsCiAJCSAgewogCQkgICAgKnRhcmdldCA9IGdy dWJfaG9zdF90b190YXJnZXQ2NCAoZ3J1Yl90YXJnZXRfdG9faG9zdDY0ICgqdGFyZ2V0KQogCQkJ CQkJICAgICArIGFkZGVuZCArIHN5bV9hZGRyCi0JCQkJCQkgICAgIC0gdGFyZ2V0X3NlY3Rpb25f YWRkciAtIG9mZnNldAotCQkJCQkJICAgICAtIGltYWdlX3RhcmdldC0+dmFkZHJfb2Zmc2V0KTsK KwkJCQkJCSAgICAgLSB0YXJnZXRfc2VjdGlvbl92YWRkciAtIG9mZnNldCk7CiAJCSAgICBncnVi X3V0aWxfaW5mbyAoInJlbG9jYXRpbmcgYW4gUl9YODZfNjRfUEM2NCBlbnRyeSB0byAweCUiCiAJ CQkJICAgIEdSVUJfSE9TVF9QUkl4TE9OR19MT05HICIgYXQgdGhlIG9mZnNldCAweCUiCiAJCQkJ ICAgIEdSVUJfSE9TVF9QUkl4TE9OR19MT05HLApAQCAtOTk4LDE4ICsxMDA4LDExIEBAIFNVRkZJ WCAocmVsb2NhdGVfYWRkcnMpIChFbGZfRWhkciAqZSwgc3RydWN0IHNlY3Rpb25fbWV0YWRhdGEg KnNtZCwKIAkgICAgICBzd2l0Y2ggKEVMRl9SX1RZUEUgKGluZm8pKQogCQl7CiAJCWNhc2UgUl9J QTY0X1BDUkVMMjFCOgotCQkgIHsKLQkJICAgIGdydWJfdWludDY0X3Qgbm9mZjsKLQkJICAgIGdy dWJfaWE2NF9tYWtlX3RyYW1wb2xpbmUgKHRyLCBhZGRlbmQgKyBzeW1fYWRkcik7Ci0JCSAgICBu b2ZmID0gKChjaGFyICopIHRyIC0gKGNoYXIgKikgcGVfdGFyZ2V0Ci0JCQkgICAgLSB0YXJnZXRf c2VjdGlvbl9hZGRyIC0gKG9mZnNldCAmIH4zKSkgPj4gNDsKLQkJICAgIHRyKys7Ci0JCSAgICBp ZiAobm9mZiAmIH5NQVNLMTkpCi0JCSAgICAgIGdydWJfdXRpbF9lcnJvciAoInRyYW1wb2xpbmUg b2Zmc2V0IHRvbyBiaWcgKCUiCi0JCQkJICAgICAgIEdSVUJfSE9TVF9QUkl4TE9OR19MT05HICIp IiwKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbm9mZik7Ci0JCSAgICBncnViX2lh NjRfYWRkX3ZhbHVlX3RvX3Nsb3RfMjBiICgoZ3J1Yl9hZGRyX3QpIHRhcmdldCwgbm9mZik7Ci0J CSAgfQorCQkgIGdydWJfdXRpbF9lcnJvcigiaW5zZXJ0aW5nIHRyYW1wb2xpbmVzIGlzIG5vIGxv bmdlciBzdXBwb3J0ZWQiKTsKKwkJICBicmVhazsKKworCQljYXNlIFJfSUE2NF9SRUw2NExTQjoK KwkJICAqdGFyZ2V0ID0gZ3J1Yl9ob3N0X3RvX3RhcmdldDY0IChhZGRlbmQgKyBsYXlvdXQtPnZh ZGRyX2RpZmYpOwogCQkgIGJyZWFrOwogCiAJCWNhc2UgUl9JQTY0X0xUT0ZGMjJYOgpAQCAtMTA0 NSwxOCArMTA0OCwyMSBAQCBTVUZGSVggKHJlbG9jYXRlX2FkZHJzKSAoRWxmX0VoZHIgKmUsIHN0 cnVjdCBzZWN0aW9uX21ldGFkYXRhICpzbWQsCiAJCWNhc2UgUl9JQTY0X1BDUkVMNjRMU0I6CiAJ CSAgKnRhcmdldCA9IGdydWJfaG9zdF90b190YXJnZXQ2NCAoZ3J1Yl90YXJnZXRfdG9faG9zdDY0 ICgqdGFyZ2V0KQogCQkJCQkJICAgKyBhZGRlbmQgKyBzeW1fYWRkcgotCQkJCQkJICAgLSB0YXJn ZXRfc2VjdGlvbl9hZGRyIC0gb2Zmc2V0Ci0JCQkJCQkgICAtIGltYWdlX3RhcmdldC0+dmFkZHJf b2Zmc2V0KTsKKwkJCQkJCSAgIC0gdGFyZ2V0X3NlY3Rpb25fdmFkZHIgLSBvZmZzZXQpOwogCQkg IGJyZWFrOwogCi0JCWNhc2UgUl9JQTY0X1NFR1JFTDY0TFNCOgotCQkgICp0YXJnZXQgPSBncnVi X2hvc3RfdG9fdGFyZ2V0NjQgKGdydWJfdGFyZ2V0X3RvX2hvc3Q2NCAoKnRhcmdldCkKLQkJCQkJ CSAgICsgYWRkZW5kICsgc3ltX2FkZHIgLSB0YXJnZXRfc2VjdGlvbl9hZGRyKTsKKwkJY2FzZSBS X0lBNjRfSVBMVExTQjoKKwkJICBtZW1jcHkodGFyZ2V0LCAoKGNoYXIgKilwZV90YXJnZXQgKyBh ZGRlbmQgKyBzeW1fYWRkciAtIGltYWdlX3RhcmdldC0+dmFkZHJfb2Zmc2V0KSwgMTYpOworCQkg IGdydWJfdXRpbF9pbmZvICgicmVsb2NhdGluZyBhbiBJUExUIGVudHJ5IHRvIDB4JSIKKwkJCQkg IEdSVUJfSE9TVF9QUkl4TE9OR19MT05HICIgYXQgdGhlIG9mZnNldCAweCUiCisJCQkJICBHUlVC X0hPU1RfUFJJeExPTkdfTE9ORywKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJICBn cnViX3RhcmdldF90b19ob3N0NjQgKCp0YXJnZXQpLAorCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9u Zykgb2Zmc2V0KTsKIAkJICBicmVhazsKIAkJY2FzZSBSX0lBNjRfRElSNjRMU0I6CiAJCWNhc2Ug Ul9JQTY0X0ZQVFI2NExTQjoKLQkJICAqdGFyZ2V0ID0gZ3J1Yl9ob3N0X3RvX3RhcmdldDY0IChn cnViX3RhcmdldF90b19ob3N0NjQgKCp0YXJnZXQpCi0JCQkJCQkgICArIGFkZGVuZCArIHN5bV9h ZGRyKTsKKwkJICAqdGFyZ2V0ID0gZ3J1Yl9ob3N0X3RvX3RhcmdldDY0IChhZGRlbmQgKyBzeW1f YWRkcik7CiAJCSAgZ3J1Yl91dGlsX2luZm8gKCJyZWxvY2F0aW5nIGEgZGlyZWN0IGVudHJ5IHRv IDB4JSIKIAkJCQkgIEdSVUJfSE9TVF9QUkl4TE9OR19MT05HICIgYXQgdGhlIG9mZnNldCAweCUi CiAJCQkJICBHUlVCX0hPU1RfUFJJeExPTkdfTE9ORywKQEAgLTEwODAsMTggKzEwODYsMjMgQEAg U1VGRklYIChyZWxvY2F0ZV9hZGRycykgKEVsZl9FaGRyICplLCBzdHJ1Y3Qgc2VjdGlvbl9tZXRh ZGF0YSAqc21kLAogCQkgc3ltX2FkZHIgKz0gYWRkZW5kOwogCQkgc3dpdGNoIChFTEZfUl9UWVBF IChpbmZvKSkKIAkJICAgeworCQkgICBjYXNlIFJfQUFSQ0g2NF9KVU1QX1NMT1Q6CisJCSAgICAg KnRhcmdldCA9IGdydWJfaG9zdF90b190YXJnZXQ2NCAoc3ltX2FkZHIpOworCQkgICAgIGJyZWFr OwogCQkgICBjYXNlIFJfQUFSQ0g2NF9BQlM2NDoKIAkJICAgICB7CiAJCSAgICAgICAqdGFyZ2V0 ID0gZ3J1Yl9ob3N0X3RvX3RhcmdldDY0IChncnViX3RhcmdldF90b19ob3N0NjQgKCp0YXJnZXQp ICsgc3ltX2FkZHIpOwogCQkgICAgIH0KIAkJICAgICBicmVhazsKKwkJICAgY2FzZSBSX0FBUkNI NjRfUkVMQVRJVkU6CisJCSAgICAgKnRhcmdldCA9IGdydWJfaG9zdF90b190YXJnZXQ2NCAoYWRk ZW5kICsgbGF5b3V0LT52YWRkcl9kaWZmKTsKKwkJICAgICBicmVhazsKIAkJICAgY2FzZSBSX0FB UkNINjRfUFJFTDMyOgogCQkgICAgIHsKIAkJICAgICAgIGdydWJfdWludDMyX3QgKnQzMiA9IChn cnViX3VpbnQzMl90ICopIHRhcmdldDsKIAkJICAgICAgICp0MzIgPSBncnViX2hvc3RfdG9fdGFy Z2V0NjQgKGdydWJfdGFyZ2V0X3RvX2hvc3QzMiAoKnQzMikKIAkJCQkJCSAgICAgKyBzeW1fYWRk cgotCQkJCQkJICAgICAtIHRhcmdldF9zZWN0aW9uX2FkZHIgLSBvZmZzZXQKLQkJCQkJCSAgICAg LSBpbWFnZV90YXJnZXQtPnZhZGRyX29mZnNldCk7CisJCQkJCQkgICAgIC0gdGFyZ2V0X3NlY3Rp b25fdmFkZHIgLSBvZmZzZXQpOwogCQkgICAgICAgZ3J1Yl91dGlsX2luZm8gKCJyZWxvY2F0aW5n IGFuIFJfQUFSQ0g2NF9QUkVMMzIgZW50cnkgdG8gMHgleCBhdCB0aGUgb2Zmc2V0IDB4JSIKIAkJ CQkgICAgICAgR1JVQl9IT1NUX1BSSXhMT05HX0xPTkcsCiAJCQkJICAgICAgICp0MzIsICh1bnNp Z25lZCBsb25nIGxvbmcpIG9mZnNldCk7CkBAIC0xMTA5LDcgKzExMjAsNyBAQCBTVUZGSVggKHJl bG9jYXRlX2FkZHJzKSAoRWxmX0VoZHIgKmUsIHN0cnVjdCBzZWN0aW9uX21ldGFkYXRhICpzbWQs CiAJCSAgIGNhc2UgUl9BQVJDSDY0X0NBTEwyNjoKIAkJICAgICB7CiAJCSAgICAgICBzeW1fYWRk ciAtPSBvZmZzZXQ7Ci0JCSAgICAgICBzeW1fYWRkciAtPSB0YXJnZXRfc2VjdGlvbl9hZGRyICsg aW1hZ2VfdGFyZ2V0LT52YWRkcl9vZmZzZXQ7CisJCSAgICAgICBzeW1fYWRkciAtPSB0YXJnZXRf c2VjdGlvbl92YWRkcjsKIAkJICAgICAgIGlmICghZ3J1Yl9hcm1fNjRfY2hlY2tfeHh4eDI2X29m ZnNldCAoc3ltX2FkZHIpKQogCQkJIGdydWJfdXRpbF9lcnJvciAoIiVzIiwgIkNBTEwyNiBSZWxv Y2F0aW9uIG91dCBvZiByYW5nZSIpOwogCkBAIC0xMTIxLDcgKzExMzIsNyBAQCBTVUZGSVggKHJl bG9jYXRlX2FkZHJzKSAoRWxmX0VoZHIgKmUsIHN0cnVjdCBzZWN0aW9uX21ldGFkYXRhICpzbWQs CiAJCSAgICAgewogCQkgICAgICAgRWxmNjRfUmVsYSAqcmVsMjsKIAkJICAgICAgIGdydWJfaW50 NjRfdCBncG9mZnNldCA9ICgoKGNoYXIgKikgZ3BwdHIgLSAoY2hhciAqKSBwZV90YXJnZXQgKyBp bWFnZV90YXJnZXQtPnZhZGRyX29mZnNldCkgJiB+MHhmZmZVTEwpCi0JCQkgLSAoKG9mZnNldCAr IHRhcmdldF9zZWN0aW9uX2FkZHIgKyBpbWFnZV90YXJnZXQtPnZhZGRyX29mZnNldCkgJiB+MHhm ZmZVTEwpOworCQkJIC0gKChvZmZzZXQgKyB0YXJnZXRfc2VjdGlvbl92YWRkcikgJiB+MHhmZmZV TEwpOwogCQkgICAgICAgdW5zaWduZWQgazsKIAkJICAgICAgICpncHB0ciA9IGdydWJfaG9zdF90 b190YXJnZXQ2NCAoc3ltX2FkZHIpOwogCQkgICAgICAgdW5tYXRjaGVkX2Fkcl9nb3RfcGFnZSsr OwpAQCAtMTEzNyw3ICsxMTQ4LDcgQEAgU1VGRklYIChyZWxvY2F0ZV9hZGRycykgKEVsZl9FaGRy ICplLCBzdHJ1Y3Qgc2VjdGlvbl9tZXRhZGF0YSAqc21kLAogCQkJICAgICAmJiByLT5yX2FkZGVu ZCA9PSByZWwyLT5yX2FkZGVuZAogCQkJICAgICAmJiBFTEZfUl9UWVBFIChyZWwyLT5yX2luZm8p ID09IFJfQUFSQ0g2NF9MRDY0X0dPVF9MTzEyX05DKQogCQkJICAgewotCQkJICAgICBncnViX2Fy bTY0X3NldF9hYnNfbG8xMl9sZHN0NjQgKChncnViX3VpbnQzMl90ICopIFNVRkZJWCAoZ2V0X3Rh cmdldF9hZGRyZXNzKSAoZSwgdGFyZ2V0X3NlY3Rpb24sCisJCQkgICAgIGdydWJfYXJtNjRfc2V0 X2Fic19sbzEyX2xkc3Q2NCAoKGdydWJfdWludDMyX3QgKikgU1VGRklYIChnZXRfdGFyZ2V0X2Fk ZHJlc3MpIChwZV90YXJnZXQsIGxheW91dCwKIAkJCQkJCQkJCQkJCQkgICAgZ3J1Yl90YXJnZXRf dG9faG9zdCAocmVsMi0+cl9vZmZzZXQpLCBpbWFnZV90YXJnZXQpLAogCQkJCQkJCSAgICAgKChj aGFyICopIGdwcHRyIC0gKGNoYXIgKikgcGVfdGFyZ2V0ICsgaW1hZ2VfdGFyZ2V0LT52YWRkcl9v ZmZzZXQpKTsKIAkJCSAgICAgYnJlYWs7CkBAIC0xMTU1LDcgKzExNjYsNyBAQCBTVUZGSVggKHJl bG9jYXRlX2FkZHJzKSAoRWxmX0VoZHIgKmUsIHN0cnVjdCBzZWN0aW9uX21ldGFkYXRhICpzbWQs CiAJCSAgIGNhc2UgUl9BQVJDSDY0X0FEUl9QUkVMX1BHX0hJMjE6CiAJCSAgICAgewogCQkgICAg ICAgc3ltX2FkZHIgJj0gfjB4ZmZmVUxMOwotCQkgICAgICAgc3ltX2FkZHIgLT0gKG9mZnNldCAr IHRhcmdldF9zZWN0aW9uX2FkZHIgKyBpbWFnZV90YXJnZXQtPnZhZGRyX29mZnNldCkgJiB+MHhm ZmZVTEw7CisJCSAgICAgICBzeW1fYWRkciAtPSAob2Zmc2V0ICsgdGFyZ2V0X3NlY3Rpb25fdmFk ZHIpICYgfjB4ZmZmVUxMOwogCQkgICAgICAgaWYgKCFncnViX2FybTY0X2NoZWNrX2hpMjFfc2ln bmVkIChzeW1fYWRkcikpCiAJCQkgZ3J1Yl91dGlsX2Vycm9yICgiJXMiLCAiQ0FMTDI2IFJlbG9j YXRpb24gb3V0IG9mIHJhbmdlIik7CiAKQEAgLTExNzcsMjQgKzExODgsMjkgQEAgU1VGRklYIChy ZWxvY2F0ZV9hZGRycykgKEVsZl9FaGRyICplLCBzdHJ1Y3Qgc2VjdGlvbl9tZXRhZGF0YSAqc21k LAogCQkgZ3J1Yl91aW50MzJfdCAqdDMyID0gKGdydWJfdWludDMyX3QgKikgdGFyZ2V0OwogCQkg c3ltX2FkZHIgKz0gYWRkZW5kOwogCi0JCSBwYyA9IG9mZnNldCArIHRhcmdldF9zZWN0aW9uX2Fk ZHIgKyBpbWFnZV90YXJnZXQtPnZhZGRyX29mZnNldDsKKwkJIHBjID0gb2Zmc2V0ICsgdGFyZ2V0 X3NlY3Rpb25fdmFkZHI7CiAKIAkJIHN3aXRjaCAoRUxGX1JfVFlQRSAoaW5mbykpCiAJCSAgIHsK IAkJICAgY2FzZSBSX0xBUkNIXzY0OgogCQkgICAgIHsKIAkJICAgICAgIGdydWJfdWludDY0X3Qg KnQ2NCA9IChncnViX3VpbnQ2NF90ICopIHRhcmdldDsKLQkJICAgICAgICp0NjQgPSBncnViX2hv c3RfdG9fdGFyZ2V0NjQgKGdydWJfdGFyZ2V0X3RvX2hvc3Q2NCAoKnQ2NCkgKyBzeW1fYWRkcik7 CisJCSAgICAgICAqdDY0ID0gZ3J1Yl9ob3N0X3RvX3RhcmdldDY0IChzeW1fYWRkcik7CiAJCSAg ICAgfQogCQkgICAgIGJyZWFrOworCQkgICBjYXNlIFJfTEFSQ0hfSlVNUF9TTE9UOgorCQkgICAg ICp0YXJnZXQgPSBncnViX2hvc3RfdG9fdGFyZ2V0NjQgKHN5bV9hZGRyKTsKKwkJICAgICBicmVh azsKKwkJICAgY2FzZSBSX0xBUkNIX1JFTEFUSVZFOgorCQkgICAgICp0YXJnZXQgPSBncnViX2hv c3RfdG9fdGFyZ2V0NjQgKGFkZGVuZCArIGxheW91dC0+dmFkZHJfZGlmZik7CisJCSAgICAgYnJl YWs7CiAJCSAgIGNhc2UgUl9MQVJDSF9NQVJLX0xBOgogCQkgICAgIGJyZWFrOwogCQkgICBjYXNl IFJfTEFSQ0hfU09QX1BVU0hfUENSRUw6CiAJCSAgIGNhc2UgUl9MQVJDSF9TT1BfUFVTSF9QTFRf UENSRUw6CiAJCSAgICAgZ3J1Yl9sb29uZ2FyY2g2NF9zb3BfcHVzaCAoJnN0YWNrLCBzeW1fYWRk cgotCQkJCQkJLSh0YXJnZXRfc2VjdGlvbl9hZGRyCi0JCQkJCQkgICtvZmZzZXQKLQkJCQkJCSAg K2ltYWdlX3RhcmdldC0+dmFkZHJfb2Zmc2V0KSk7CisJCQkJCQktKHRhcmdldF9zZWN0aW9uX3Zh ZGRyCisJCQkJCQkgICtvZmZzZXQpKTsKIAkJICAgICBicmVhazsKIAkJICAgY2FzZSBSX0xBUkNI X0IyNjoKIAkJICAgICB7CkBAIC0xMjQzLDYgKzEyNTksMTUgQEAgU1VGRklYIChyZWxvY2F0ZV9h ZGRycykgKEVsZl9FaGRyICplLCBzdHJ1Y3Qgc2VjdGlvbl9tZXRhZGF0YSAqc21kLAogCQkgc3lt X2FkZHIgLT0gaW1hZ2VfdGFyZ2V0LT52YWRkcl9vZmZzZXQ7CiAJCSBzd2l0Y2ggKEVMRl9SX1RZ UEUgKGluZm8pKQogCQkgICB7CisJCSAgIGNhc2UgUl9BUk1fSlVNUF9TTE9UOgorCQkgICAgIHsK KwkJICAgICAgIGdydWJfdXRpbF9pbmZvICgiICBKVU1QOlx0b2Zmc2V0PSVkXHQoMHglMDh4KSIs CisJCQkJICAgICAgIChpbnQpIHN5bV9hZGRyLCAoaW50KSBzeW1fYWRkcik7CisJCSAgICAgICBp ZiAoaW1hZ2VfdGFyZ2V0LT5pZCA9PSBJTUFHRV9FRkkpCisJCQkgc3ltX2FkZHIgKz0gR1JVQl9Q RTMyX1NFQ1RJT05fQUxJR05NRU5UOworCQkgICAgICAgKnRhcmdldCA9IGdydWJfaG9zdF90b190 YXJnZXQzMiAoc3ltX2FkZHIpOworCQkgICAgICAgYnJlYWs7CisJCSAgICAgfQogCQkgICBjYXNl IFJfQVJNX0FCUzMyOgogCQkgICAgIHsKIAkJICAgICAgIGdydWJfdXRpbF9pbmZvICgiICBBQlMz MjpcdG9mZnNldD0lZFx0KDB4JTA4eCkiLApAQCAtMTI1Myw2ICsxMjc4LDkgQEAgU1VGRklYIChy ZWxvY2F0ZV9hZGRycykgKEVsZl9FaGRyICplLCBzdHJ1Y3Qgc2VjdGlvbl9tZXRhZGF0YSAqc21k LAogCQkgICAgICAgKnRhcmdldCA9IGdydWJfaG9zdF90b190YXJnZXQzMiAoZ3J1Yl90YXJnZXRf dG9faG9zdDMyICgqdGFyZ2V0KSArIHN5bV9hZGRyKTsKIAkJICAgICB9CiAJCSAgICAgYnJlYWs7 CisJCSAgIGNhc2UgUl9BUk1fUkVMQVRJVkU6CisJCSAgICAgKnRhcmdldCA9IGdydWJfaG9zdF90 b190YXJnZXQzMiAoZ3J1Yl90YXJnZXRfdG9faG9zdDMyICgqdGFyZ2V0KSArIGFkZGVuZCArIGxh eW91dC0+dmFkZHJfZGlmZik7CisJCSAgICAgYnJlYWs7CiAJCSAgICAgLyogSGFwcGVucyB3aGVu IGNvbXBpbGVkIHdpdGggLW1hcmNoPWFybXY0LgogCQkJU2luY2UgY3VycmVudGx5IHdlIG5lZWQg YXQgbGVhc3QgYXJtdjUsIGtlZXAgYnggYXMtaXMuCiAJCSAgICAgKi8KQEAgLTEyNzQsMjEgKzEz MDIsNyBAQCBTVUZGSVggKHJlbG9jYXRlX2FkZHJzKSAoRWxmX0VoZHIgKmUsIHN0cnVjdCBzZWN0 aW9uX21ldGFkYXRhICpzbWQsCiAJCSAgICAgICBpZiAoRUxGX1NUX1RZUEUgKHN5bS0+c3RfaW5m bykgIT0gU1RUX0ZVTkMpCiAJCQkgc3ltX2FkZHIgfD0gMTsKIAkJICAgICAgIGlmICghKHN5bV9h ZGRyICYgMSkpCi0JCQkgewotCQkJICAgZ3J1Yl91aW50MzJfdCB0cl9hZGRyOwotCQkJICAgZ3J1 Yl9pbnQzMl90IG5ld19vZmZzZXQ7Ci0JCQkgICB0cl9hZGRyID0gKGNoYXIgKikgdHIgLSAoY2hh ciAqKSBwZV90YXJnZXQKLQkJCSAgICAgLSB0YXJnZXRfc2VjdGlvbl9hZGRyOwotCQkJICAgbmV3 X29mZnNldCA9IHN5bV9hZGRyIC0gdHJfYWRkciAtIDEyOwotCi0JCQkgICBpZiAoIWdydWJfYXJt X2p1bXAyNF9jaGVja19vZmZzZXQgKG5ld19vZmZzZXQpKQotCQkJICAgICByZXR1cm4gZ3J1Yl91 dGlsX2Vycm9yICgianVtcDI0IHJlbG9jYXRpb24gb3V0IG9mIHJhbmdlIik7Ci0KLQkJCSAgIHRy WzBdID0gZ3J1Yl9ob3N0X3RvX3RhcmdldDMyICgweDQ2YzA0Nzc4KTsgLyogYnggcGM7IG5vcCAg Ki8KLQkJCSAgIHRyWzFdID0gZ3J1Yl9ob3N0X3RvX3RhcmdldDMyICgoKG5ld19vZmZzZXQgPj4g MikgJiAweGZmZmZmZikgfCAweGVhMDAwMDAwKTsgLyogYiBuZXdfb2Zmc2V0ICovCi0JCQkgICB0 ciArPSAyOwotCQkJICAgc3ltX2FkZHIgPSB0cl9hZGRyIHwgMTsKLQkJCSB9CisJCQkgZ3J1Yl91 dGlsX2Vycm9yKCJpbnNlcnRpbmcgdHJhbXBvbGluZXMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIp OwogCQkgICAgICAgc3ltX2FkZHIgLT0gb2Zmc2V0OwogCQkgICAgICAgLyogVGh1bWIgaW5zdHJ1 Y3Rpb25zIGNhbiBiZSAxNi1iaXQgYWxpZ25lZCAqLwogCQkgICAgICAgaWYgKEVMRl9SX1RZUEUg KGluZm8pID09IFJfQVJNX1RITV9KVU1QMTkpCkBAIC0xMzA3LDIxICsxMzIxLDcgQEAgU1VGRklY IChyZWxvY2F0ZV9hZGRycykgKEVsZl9FaGRyICplLCBzdHJ1Y3Qgc2VjdGlvbl9tZXRhZGF0YSAq c21kLAogCQkgICAgICAgZ3J1Yl9lcnJfdCBlcnI7CiAJCSAgICAgICBncnViX3V0aWxfaW5mbyAo IiAgSlVNUDI0Olx0dGFyZ2V0PTB4JTA4bHhcdG9mZnNldD0oMHglMDh4KSIsICAodW5zaWduZWQg bG9uZykgKChjaGFyICopIHRhcmdldCAtIChjaGFyICopIGUpLCBzeW1fYWRkcik7CiAJCSAgICAg ICBpZiAoc3ltX2FkZHIgJiAxKQotCQkJIHsKLQkJCSAgIGdydWJfdWludDMyX3QgdHJfYWRkcjsK LQkJCSAgIGdydWJfaW50MzJfdCBuZXdfb2Zmc2V0OwotCQkJICAgdHJfYWRkciA9IChjaGFyICop IHRyIC0gKGNoYXIgKikgcGVfdGFyZ2V0Ci0JCQkgICAgIC0gdGFyZ2V0X3NlY3Rpb25fYWRkcjsK LQkJCSAgIG5ld19vZmZzZXQgPSBzeW1fYWRkciAtIHRyX2FkZHIgLSAxMjsKLQotCQkJICAgLyog VGhlcmUgaXMgbm8gaW1tZWRpYXRlIHZlcnNpb24gb2YgYngsIG9ubHkgcmVnaXN0ZXIgb25lLi4u ICAqLwotCQkJICAgdHJbMF0gPSBncnViX2hvc3RfdG9fdGFyZ2V0MzIgKDB4ZTU5ZmMwMDQpOyAv KiBsZHIJaXAsIFtwYywgIzRdICovCi0JCQkgICB0clsxXSA9IGdydWJfaG9zdF90b190YXJnZXQz MiAoMHhlMDhjYzAwZik7IC8qIGFkZAlpcCwgaXAsIHBjICovCi0JCQkgICB0clsyXSA9IGdydWJf aG9zdF90b190YXJnZXQzMiAoMHhlMTJmZmYxYyk7IC8qIGJ4CWlwICovCi0JCQkgICB0clszXSA9 IGdydWJfaG9zdF90b190YXJnZXQzMiAobmV3X29mZnNldCB8IDEpOwotCQkJICAgdHIgKz0gNDsK LQkJCSAgIHN5bV9hZGRyID0gdHJfYWRkcjsKLQkJCSB9CisJCQkgZ3J1Yl91dGlsX2Vycm9yKCJp bnNlcnRpbmcgdHJhbXBvbGluZXMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpOwogCQkgICAgICAg c3ltX2FkZHIgLT0gb2Zmc2V0OwogCQkgICAgICAgZXJyID0gZ3J1Yl9hcm1fcmVsb2NfanVtcDI0 ICh0YXJnZXQsCiAJCQkJCQkgICAgc3ltX2FkZHIpOwpAQCAtMTM1NCwxMCArMTM1NCwxNiBAQCBT VUZGSVggKHJlbG9jYXRlX2FkZHJzKSAoRWxmX0VoZHIgKmUsIHN0cnVjdCBzZWN0aW9uX21ldGFk YXRhICpzbWQsCiAJCSAgKi8KIAogCQkgc3ltX2FkZHIgKz0gYWRkZW5kOwotCQkgb2ZmID0gc3lt X2FkZHIgLSB0YXJnZXRfc2VjdGlvbl9hZGRyIC0gb2Zmc2V0IC0gaW1hZ2VfdGFyZ2V0LT52YWRk cl9vZmZzZXQ7CisJCSBvZmYgPSBzeW1fYWRkciAtIHRhcmdldF9zZWN0aW9uX3ZhZGRyIC0gb2Zm c2V0IC0gaW1hZ2VfdGFyZ2V0LT52YWRkcl9vZmZzZXQ7CiAKIAkJIHN3aXRjaCAoRUxGX1JfVFlQ RSAoaW5mbykpCiAJCSAgIHsKKwkJICAgY2FzZSBSX1JJU0NWX0pVTVBfU0xPVDoKKwkJICAgICAq dGFyZ2V0ID0gZ3J1Yl9ob3N0X3RvX3RhcmdldF9hZGRyIChzeW1fYWRkcik7CisJCSAgICAgYnJl YWs7CisJCSAgIGNhc2UgUl9SSVNDVl9SRUxBVElWRToKKwkJICAgICAqdGFyZ2V0ID0gZ3J1Yl9o b3N0X3RvX3RhcmdldF9hZGRyIChhZGRlbmQgKyBsYXlvdXQtPnZhZGRyX2RpZmYpOworCQkgICAg IGJyZWFrOwogCQkgICBjYXNlIFJfUklTQ1ZfQUREODoKIAkJICAgICAqdDggPSAqdDggKyBzeW1f YWRkcjsKIAkJICAgICBicmVhazsKQEAgLTE0NzcsNyArMTQ4Myw3IEBAIFNVRkZJWCAocmVsb2Nh dGVfYWRkcnMpIChFbGZfRWhkciAqZSwgc3RydWN0IHNlY3Rpb25fbWV0YWRhdGEgKnNtZCwKIAog CQkJICAgcmVsMl9vZmZzZXQgPSBncnViX3RhcmdldF90b19ob3N0IChyZWwyLT5yX29mZnNldCk7 CiAJCQkgICByZWwyX2luZm8gPSBncnViX3RhcmdldF90b19ob3N0IChyZWwyLT5yX2luZm8pOwot CQkJICAgcmVsMl9sb2MgPSB0YXJnZXRfc2VjdGlvbl9hZGRyICsgcmVsMl9vZmZzZXQgKyBpbWFn ZV90YXJnZXQtPnZhZGRyX29mZnNldDsKKwkJCSAgIHJlbDJfbG9jID0gdGFyZ2V0X3NlY3Rpb25f dmFkZHIgKyByZWwyX29mZnNldCArIGltYWdlX3RhcmdldC0+dmFkZHJfb2Zmc2V0OwogCiAJCQkg ICBpZiAoRUxGX1JfVFlQRSAocmVsMl9pbmZvKSA9PSBSX1JJU0NWX1BDUkVMX0hJMjAKIAkJCSAg ICAgICAmJiByZWwyX2xvYyA9PSBzeW1fYWRkcikKQEAgLTE2NzgsNyArMTY4NCw3IEBAIHRyYW5z bGF0ZV9yZWxvY2F0aW9uX3BlIChzdHJ1Y3QgdHJhbnNsYXRlX2NvbnRleHQgKmN0eCwKICAgc3dp dGNoIChpbWFnZV90YXJnZXQtPmVsZl90YXJnZXQpCiAgICAgewogICAgIGNhc2UgRU1fMzg2Ogot ICAgICAgaWYgKEVMRl9SX1RZUEUgKGluZm8pID09IFJfMzg2XzMyKQorICAgICAgaWYgKEVMRl9S X1RZUEUgKGluZm8pID09IFJfMzg2XzMyIHx8IEVMRl9SX1RZUEUgKGluZm8pID09IFJfMzg2X1JF TEFUSVZFKQogCXsKIAkgIGdydWJfdXRpbF9pbmZvICgiYWRkaW5nIGEgcmVsb2NhdGlvbiBlbnRy eSBmb3IgMHglIgogCQkJICBHUlVCX0hPU1RfUFJJeExPTkdfTE9ORywKQEAgLTE2OTYsNyArMTcw MiwxMCBAQCB0cmFuc2xhdGVfcmVsb2NhdGlvbl9wZSAoc3RydWN0IHRyYW5zbGF0ZV9jb250ZXh0 ICpjdHgsCiAJewogCSAgZ3J1Yl91dGlsX2Vycm9yICgiY2FuXCd0IGFkZCBmaXh1cCBlbnRyeSBm b3IgUl9YODZfNjRfMzIoUykiKTsKIAl9Ci0gICAgICBlbHNlIGlmIChFTEZfUl9UWVBFIChpbmZv KSA9PSBSX1g4Nl82NF82NCkKKyAgICAgIGVsc2UgaWYgKEVMRl9SX1RZUEUgKGluZm8pID09IFJf WDg2XzY0XzY0CisJICAgICAgIHx8IEVMRl9SX1RZUEUgKGluZm8pID09IFJfWDg2XzY0X1JFTEFU SVZFCisJICAgICAgIHx8IEVMRl9SX1RZUEUgKGluZm8pID09IFJfWDg2XzY0X0pVTVBfU0xPVAor CSAgICAgICB8fCBFTEZfUl9UWVBFIChpbmZvKSA9PSBSX1g4Nl82NF9HTE9CX0RBVCkKIAl7CiAJ ICBncnViX3V0aWxfaW5mbyAoImFkZGluZyBhIHJlbG9jYXRpb24gZW50cnkgZm9yIDB4JSIKIAkJ CSAgR1JVQl9IT1NUX1BSSXhMT05HX0xPTkcsCkBAIC0xNzIzLDggKzE3MzIsMzEgQEAgdHJhbnNs YXRlX3JlbG9jYXRpb25fcGUgKHN0cnVjdCB0cmFuc2xhdGVfY29udGV4dCAqY3R4LAogCWNhc2Ug Ul9JQTY0X1NFR1JFTDY0TFNCOgogCSAgYnJlYWs7CiAKKwljYXNlIFJfSUE2NF9JUExUTFNCOgor I2lmIDEKKwkgIHsKKwkgICAgZ3J1Yl91dGlsX2luZm8gKCJhZGRpbmcgYSByZWxvY2F0aW9uIGVu dHJ5IGZvciAweCUiCisJCQkgICAgR1JVQl9IT1NUX1BSSXhMT05HX0xPTkcsCisJCQkgICAgKHVu c2lnbmVkIGxvbmcgbG9uZykgYWRkcik7CisJICAgIGN0eC0+Y3VycmVudF9hZGRyZXNzCisJICAg ICAgPSBhZGRfZml4dXBfZW50cnkgKCZjdHgtPmxzdCwKKwkJCQkgR1JVQl9QRTMyX1JFTF9CQVNF RF9ESVI2NCwKKwkJCQkgYWRkciwKKwkJCQkgMCwgY3R4LT5jdXJyZW50X2FkZHJlc3MsCisJCQkJ IGltYWdlX3RhcmdldCk7CisJICAgIGN0eC0+Y3VycmVudF9hZGRyZXNzCisJICAgICAgPSBhZGRf Zml4dXBfZW50cnkgKCZjdHgtPmxzdCwKKwkJCQkgR1JVQl9QRTMyX1JFTF9CQVNFRF9ESVI2NCwK KwkJCQkgYWRkciArIDgsCisJCQkJIDAsIGN0eC0+Y3VycmVudF9hZGRyZXNzLAorCQkJCSBpbWFn ZV90YXJnZXQpOworCSAgfQorI2VuZGlmCisJICBicmVhazsKKwogCWNhc2UgUl9JQTY0X0ZQVFI2 NExTQjoKIAljYXNlIFJfSUE2NF9ESVI2NExTQjoKKwljYXNlIFJfSUE2NF9SRUw2NExTQjoKICNp ZiAxCiAJICB7CiAJICAgIGdydWJfdXRpbF9pbmZvICgiYWRkaW5nIGEgcmVsb2NhdGlvbiBlbnRy eSBmb3IgMHglIgpAQCAtMTc0OSw3ICsxNzgxLDkgQEAgdHJhbnNsYXRlX3JlbG9jYXRpb25fcGUg KHN0cnVjdCB0cmFuc2xhdGVfY29udGV4dCAqY3R4LAogI2lmIGRlZmluZWQoTUtJTUFHRV9FTEY2 NCkKICAgICAgIHN3aXRjaCAoRUxGX1JfVFlQRSAoaW5mbykpCiAJeworCWNhc2UgUl9BQVJDSDY0 X1JFTEFUSVZFOgogCWNhc2UgUl9BQVJDSDY0X0FCUzY0OgorCWNhc2UgUl9BQVJDSDY0X0pVTVBf U0xPVDoKIAkgIHsKIAkgICAgY3R4LT5jdXJyZW50X2FkZHJlc3MKIAkgICAgICA9IGFkZF9maXh1 cF9lbnRyeSAoJmN0eC0+bHN0LApAQCAtMTc4OSw2ICsxODIzLDggQEAgdHJhbnNsYXRlX3JlbG9j YXRpb25fcGUgKHN0cnVjdCB0cmFuc2xhdGVfY29udGV4dCAqY3R4LAogICAgICAgc3dpdGNoIChF TEZfUl9UWVBFIChpbmZvKSkKIAl7CiAJY2FzZSBSX0xBUkNIXzY0OgorCWNhc2UgUl9MQVJDSF9S RUxBVElWRToKKwljYXNlIFJfTEFSQ0hfSlVNUF9TTE9UOgogCSAgewogCSAgICBjdHgtPmN1cnJl bnRfYWRkcmVzcyA9IGFkZF9maXh1cF9lbnRyeSAoJmN0eC0+bHN0LAogCQkJCQkJICAgIEdSVUJf UEUzMl9SRUxfQkFTRURfRElSNjQsCkBAIC0xODU5LDYgKzE4OTUsOCBAQCB0cmFuc2xhdGVfcmVs b2NhdGlvbl9wZSAoc3RydWN0IHRyYW5zbGF0ZV9jb250ZXh0ICpjdHgsCiAJICBicmVhazsKIAkg IC8qIENyZWF0ZSBmaXh1cCBlbnRyeSBmb3IgUEUvQ09GRiBsb2FkZXIgKi8KIAljYXNlIFJfQVJN X0FCUzMyOgorCWNhc2UgUl9BUk1fSlVNUF9TTE9UOgorCWNhc2UgUl9BUk1fUkVMQVRJVkU6CiAJ ICB7CiAJICAgIGN0eC0+Y3VycmVudF9hZGRyZXNzCiAJICAgICAgPSBhZGRfZml4dXBfZW50cnkg KCZjdHgtPmxzdCwKQEAgLTE4NzcsNiArMTkxNSwxMCBAQCB0cmFuc2xhdGVfcmVsb2NhdGlvbl9w ZSAoc3RydWN0IHRyYW5zbGF0ZV9jb250ZXh0ICpjdHgsCiAgICAgY2FzZSBFTV9SSVNDVjoKICAg ICAgIHN3aXRjaCAoRUxGX1JfVFlQRSAoaW5mbykpCiAJeworI2lmIGRlZmluZWQoTUtJTUFHRV9F TEYzMikKKwljYXNlIFJfUklTQ1ZfUkVMQVRJVkU6CisJY2FzZSBSX1JJU0NWX0pVTVBfU0xPVDoK KyNlbmRpZgogCWNhc2UgUl9SSVNDVl8zMjoKIAkgIHsKIAkgICAgY3R4LT5jdXJyZW50X2FkZHJl c3MKQEAgLTE4ODYsNiArMTkyOCwxMCBAQCB0cmFuc2xhdGVfcmVsb2NhdGlvbl9wZSAoc3RydWN0 IHRyYW5zbGF0ZV9jb250ZXh0ICpjdHgsCiAJCQkJIGltYWdlX3RhcmdldCk7CiAJICB9CiAJICBi cmVhazsKKyNpZiBkZWZpbmVkKE1LSU1BR0VfRUxGNjQpCisJY2FzZSBSX1JJU0NWX1JFTEFUSVZF OgorCWNhc2UgUl9SSVNDVl9KVU1QX1NMT1Q6CisjZW5kaWYKIAljYXNlIFJfUklTQ1ZfNjQ6CiAJ ICB7CiAJICAgIGN0eC0+Y3VycmVudF9hZGRyZXNzCkBAIC0yMTQ3LDcgKzIxOTMsNiBAQCBtYWtl X3JlbG9jX3NlY3Rpb24gKEVsZl9FaGRyICplLCBzdHJ1Y3QgZ3J1Yl9ta2ltYWdlX2xheW91dCAq bGF5b3V0LAogCUVsZl9SZWwgKnI7CiAJRWxmX1dvcmQgcnRhYl9zaXplLCByX3NpemUsIG51bV9y czsKIAlFbGZfT2ZmIHJ0YWJfb2Zmc2V0OwotCUVsZl9BZGRyIHNlY3Rpb25fYWRkcmVzczsKIAlF bGZfV29yZCBqOwogCiAJaWYgKCFTVUZGSVggKGlzX2tlcHRfcmVsb2Nfc2VjdGlvbikgKHMsIGlt YWdlX3RhcmdldCwgc21kKSkKQEAgLTIxNjUsOCArMjIxMCw2IEBAIG1ha2VfcmVsb2Nfc2VjdGlv biAoRWxmX0VoZHIgKmUsIHN0cnVjdCBncnViX21raW1hZ2VfbGF5b3V0ICpsYXlvdXQsCiAJcnRh Yl9vZmZzZXQgPSBncnViX3RhcmdldF90b19ob3N0IChzLT5zaF9vZmZzZXQpOwogCW51bV9ycyA9 IHJ0YWJfc2l6ZSAvIHJfc2l6ZTsKIAotCXNlY3Rpb25fYWRkcmVzcyA9IHNtZC0+dmFkZHJzW2dy dWJfbGVfdG9fY3B1MzIgKHMtPnNoX2luZm8pXTsKLQogCWZvciAoaiA9IDAsIHIgPSAoRWxmX1Jl bCAqKSAoKGNoYXIgKikgZSArIHJ0YWJfb2Zmc2V0KTsKIAkgICAgIGogPCBudW1fcnM7CiAJICAg ICBqKyssIHIgPSAoRWxmX1JlbCAqKSAoKGNoYXIgKikgciArIHJfc2l6ZSkpCkBAIC0yMTc4LDcg KzIyMjEsNyBAQCBtYWtlX3JlbG9jX3NlY3Rpb24gKEVsZl9FaGRyICplLCBzdHJ1Y3QgZ3J1Yl9t a2ltYWdlX2xheW91dCAqbGF5b3V0LAogCSAgICBvZmZzZXQgPSBncnViX3RhcmdldF90b19ob3N0 IChyLT5yX29mZnNldCk7CiAJICAgIGluZm8gPSBncnViX3RhcmdldF90b19ob3N0IChyLT5yX2lu Zm8pOwogCi0JICAgIGFkZHIgPSBzZWN0aW9uX2FkZHJlc3MgKyBvZmZzZXQ7CisJICAgIGFkZHIg PSBsYXlvdXQtPnZhZGRyX2RpZmYgKyBvZmZzZXQ7CiAKIAkgICAgdHJhbnNsYXRlX3JlbG9jYXRp b24gKCZjdHgsIGFkZHIsIGluZm8sIGltYWdlX3RhcmdldCk7CiAJICB9CkBAIC0yMjYyLDYgKzIz MDUsOSBAQCBTVUZGSVggKGlzX2tlcHRfcmVsb2Nfc2VjdGlvbikgKEVsZl9TaGRyICpzLCBjb25z dCBzdHJ1Y3QgZ3J1Yl9pbnN0YWxsX2ltYWdlX3RhcgogICBpbnQgciA9IDA7CiAgIGNvbnN0IGNo YXIgKm5hbWUgPSBzbWQtPnN0cnRhYiArIGdydWJfaG9zdF90b190YXJnZXQzMiAocy0+c2hfbmFt ZSk7CiAKKyAgaWYgKHN0cm5jbXAgKG5hbWUsICIucmVsYS5keW4iLCA5KSA9PSAwIHx8IHN0cm5j bXAgKG5hbWUsICIucmVsLmR5biIsIDgpID09IDApCisgICAgcmV0dXJuIDE7CisKICAgaWYgKCFz dHJuY21wIChuYW1lLCAiLnJlbGEuIiwgNikpCiAgICAgbmFtZSArPSA1OwogICBlbHNlIGlmICgh c3RybmNtcCAobmFtZSwgIi5yZWwuIiwgNSkpCkBAIC0yMjk5LDMxICsyMzQ1LDYgQEAgU1VGRklY IChjaGVja19lbGZfaGVhZGVyKSAoRWxmX0VoZHIgKmUsIHNpemVfdCBzaXplLCBjb25zdCBzdHJ1 Y3QgZ3J1Yl9pbnN0YWxsX2kKICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBFbGZfQWRkcgotU1VG RklYIChwdXRfc2VjdGlvbikgKEVsZl9TaGRyICpzLCBpbnQgaSwKLQkJICAgICAgRWxmX0FkZHIg Y3VycmVudF9hZGRyZXNzLAotCQkgICAgICBzdHJ1Y3Qgc2VjdGlvbl9tZXRhZGF0YSAqc21kLAot CQkgICAgICBjb25zdCBzdHJ1Y3QgZ3J1Yl9pbnN0YWxsX2ltYWdlX3RhcmdldF9kZXNjICppbWFn ZV90YXJnZXQpCi17Ci0JRWxmX1dvcmQgYWxpZ24gPSBncnViX2hvc3RfdG9fdGFyZ2V0X2FkZHIg KHMtPnNoX2FkZHJhbGlnbik7Ci0JY29uc3QgY2hhciAqbmFtZSA9IHNtZC0+c3RydGFiICsgZ3J1 Yl9ob3N0X3RvX3RhcmdldDMyIChzLT5zaF9uYW1lKTsKLQotCWlmIChhbGlnbikKLQkgIGN1cnJl bnRfYWRkcmVzcyA9IEFMSUdOX1VQIChjdXJyZW50X2FkZHJlc3MgKyBpbWFnZV90YXJnZXQtPnZh ZGRyX29mZnNldCwKLQkJCQkgICAgICBhbGlnbikKLQkgICAgLSBpbWFnZV90YXJnZXQtPnZhZGRy X29mZnNldDsKLQotCWdydWJfdXRpbF9pbmZvICgibG9jYXRpbmcgdGhlIHNlY3Rpb24gJXMgYXQg MHglIgotCQkJR1JVQl9IT1NUX1BSSXhMT05HX0xPTkcsCi0JCQluYW1lLCAodW5zaWduZWQgbG9u ZyBsb25nKSBjdXJyZW50X2FkZHJlc3MpOwotCWlmICghaXNfcmVsb2NhdGFibGUgKGltYWdlX3Rh cmdldCkpCi0JICBjdXJyZW50X2FkZHJlc3MgPSBncnViX2hvc3RfdG9fdGFyZ2V0X2FkZHIgKHMt PnNoX2FkZHIpCi0JCQkgICAgLSBpbWFnZV90YXJnZXQtPmxpbmtfYWRkcjsKLQlzbWQtPmFkZHJz W2ldID0gY3VycmVudF9hZGRyZXNzOwotCWN1cnJlbnRfYWRkcmVzcyArPSBncnViX2hvc3RfdG9f dGFyZ2V0X2FkZHIgKHMtPnNoX3NpemUpOwotCXJldHVybiBjdXJyZW50X2FkZHJlc3M7Ci19Ci0K IC8qCiAgKiBMb2NhdGUgc2VjdGlvbiBhZGRyZXNzZXMgYnkgbWVyZ2luZyBjb2RlIHNlY3Rpb25z IGFuZCBkYXRhIHNlY3Rpb25zCiAgKiBpbnRvIC50ZXh0IGFuZCAuZGF0YSwgcmVzcGVjdGl2ZWx5 LgpAQCAtMjMzNSw5NyArMjM1NiwxMDUgQEAgU1VGRklYIChsb2NhdGVfc2VjdGlvbnMpIChFbGZf RWhkciAqZSwgY29uc3QgY2hhciAqa2VybmVsX3BhdGgsCiAJCQkgIGNvbnN0IHN0cnVjdCBncnVi X2luc3RhbGxfaW1hZ2VfdGFyZ2V0X2Rlc2MgKmltYWdlX3RhcmdldCkKIHsKICAgaW50IGk7Ci0g IEVsZl9TaGRyICpzOworICBFbGZfUGhkciAqcDsKIAogICBsYXlvdXQtPmFsaWduID0gMTsKKyAg bGF5b3V0LT5rZXJuZWxfc2l6ZSA9IDA7CisKKyAgRWxmX0FkZHIgbWluX3ZhZGRyID0gfihFbGZf QWRkcikwOworICBFbGZfQWRkciBtYXhfdmFkZHIgPSAwOworICBFbGZfQWRkciBtYXhfZmlsbGVk X3ZhZGRyID0gMDsKKyAgRWxmX0FkZHIgbWF4X2FsaWduID0gMTsKKyAgRWxmX0FkZHIgbWF4X2V4 ZWN2YWRkciA9IDA7CisgIEVsZl9BZGRyIG1pbl93dmFkZHIgPSB+KEVsZl9BZGRyKTA7CisKICAg LyogUGFnZS1hbGlnbmluZyBzaW1wbGlmaWVzIHJlbG9jYXRpb24gaGFuZGxpbmcuICAqLwogICBp ZiAoaW1hZ2VfdGFyZ2V0LT5lbGZfdGFyZ2V0ID09IEVNX0FBUkNINjQpCi0gICAgbGF5b3V0LT5h bGlnbiA9IDQwOTY7CisgICAgbWF4X2FsaWduID0gNDA5NjsKIAotICBsYXlvdXQtPmtlcm5lbF9z aXplID0gMDsKKyAgZm9yIChpID0gMCwgcCA9IHNtZC0+cGhkcnM7CisgICAgICAgaSA8IHNtZC0+ bnVtX3BoZHJzOworICAgICAgIGkrKywgcCA9IChFbGZfUGhkciAqKSAoKGNoYXIgKikgcCArIHNt ZC0+cGhkcl9lbnRzaXplKSkKKyAgICB7CisgICAgICBpZiAoZ3J1Yl90YXJnZXRfdG9faG9zdDMy IChwLT5wX3R5cGUpID09IFBUX0xPQUQpCisJeworCSAgaWYgKGdydWJfdGFyZ2V0X3RvX2hvc3Qg KHAtPnBfdmFkZHIpIDwgbWluX3ZhZGRyKQorCSAgICBtaW5fdmFkZHIgPSBncnViX3RhcmdldF90 b19ob3N0IChwLT5wX3ZhZGRyKTsKKwkgIGlmIChncnViX3RhcmdldF90b19ob3N0IChwLT5wX3Zh ZGRyKSArIGdydWJfdGFyZ2V0X3RvX2hvc3QgKHAtPnBfbWVtc3opID4gbWF4X3ZhZGRyKQorCSAg ICBtYXhfdmFkZHIgPSBncnViX3RhcmdldF90b19ob3N0IChwLT5wX3ZhZGRyKSArIGdydWJfdGFy Z2V0X3RvX2hvc3QgKHAtPnBfbWVtc3opOworCSAgaWYgKHAtPnBfZmlsZXN6ICE9IDAgJiYgZ3J1 Yl90YXJnZXRfdG9faG9zdCAocC0+cF92YWRkcikgKyBncnViX3RhcmdldF90b19ob3N0IChwLT5w X2ZpbGVzeikgPiBtYXhfZmlsbGVkX3ZhZGRyKQorCSAgICBtYXhfZmlsbGVkX3ZhZGRyID0gZ3J1 Yl90YXJnZXRfdG9faG9zdCAocC0+cF92YWRkcikgKyBncnViX3RhcmdldF90b19ob3N0IChwLT5w X2ZpbGVzeik7CisJICBpZiAoKGdydWJfdGFyZ2V0X3RvX2hvc3QzMiAocC0+cF9mbGFncykgJiBQ Rl9YKSAmJiBncnViX3RhcmdldF90b19ob3N0IChwLT5wX3ZhZGRyKSArIGdydWJfdGFyZ2V0X3Rv X2hvc3QgKHAtPnBfbWVtc3opID4gbWF4X2V4ZWN2YWRkcikKKwkgICAgbWF4X2V4ZWN2YWRkciA9 IGdydWJfdGFyZ2V0X3RvX2hvc3QgKHAtPnBfdmFkZHIpICsgZ3J1Yl90YXJnZXRfdG9faG9zdCAo cC0+cF9tZW1zeik7CisJICBpZiAoKGdydWJfdGFyZ2V0X3RvX2hvc3QzMiAocC0+cF9mbGFncykg JiBQRl9XKSAmJiBncnViX3RhcmdldF90b19ob3N0IChwLT5wX3ZhZGRyKSA8IG1pbl93dmFkZHIp CisJICAgIG1pbl93dmFkZHIgPSBncnViX3RhcmdldF90b19ob3N0IChwLT5wX3ZhZGRyKTsKKwkg IGlmIChncnViX3RhcmdldF90b19ob3N0IChwLT5wX2FsaWduKSA+IG1heF9hbGlnbikKKwkgICAg bWF4X2FsaWduID0gZ3J1Yl90YXJnZXRfdG9faG9zdCAocC0+cF9hbGlnbik7CisJfQorICAgICAg aWYgKGdydWJfdGFyZ2V0X3RvX2hvc3QzMiAocC0+cF90eXBlKSA9PSBQVF9EWU5BTUlDKQorCXsK KwkgIEVsZjY0X0R5biAqZHluID0gKEVsZjY0X0R5biAqKSAoKGNoYXIgKikgZSArIGdydWJfdGFy Z2V0X3RvX2hvc3QgKHAtPnBfb2Zmc2V0KSk7CisJICBncnViX3NpemVfdCBzeiA9IGdydWJfdGFy Z2V0X3RvX2hvc3QgKHAtPnBfZmlsZXN6KTsKKwkgIHVuc2lnbmVkIGo7CisJICBmb3IgKGogPSAw OyBqIDwgc3ogLyBzaXplb2YoZHluWzBdKTsgaisrKQorCSAgICBzd2l0Y2ggKGR5bltqXS5kX3Rh ZykKKwkgICAgICB7CisJICAgICAgY2FzZSBEVF9QTFRHT1Q6CisJCWxheW91dC0+ZHluX3BsdG9m ZiA9IGR5bltqXS5kX3VuLmRfcHRyOworCQlicmVhazsKKwkgICAgICBjYXNlIERUX05VTEw6CisJ CWdvdG8gZW5kX2R5bmFtaWM7CisJICAgICAgfQorCWVuZF9keW5hbWljOjsKKwl9CisgICAgfQog Ci0gIGZvciAoaSA9IDAsIHMgPSBzbWQtPnNlY3Rpb25zOwotICAgICAgIGkgPCBzbWQtPm51bV9z ZWN0aW9uczsKLSAgICAgICBpKyssIHMgPSAoRWxmX1NoZHIgKikgKChjaGFyICopIHMgKyBzbWQt PnNlY3Rpb25fZW50c2l6ZSkpCi0gICAgaWYgKChncnViX3RhcmdldF90b19ob3N0IChzLT5zaF9m bGFncykgJiBTSEZfQUxMT0MpCi0JJiYgZ3J1Yl9ob3N0X3RvX3RhcmdldDMyIChzLT5zaF9hZGRy YWxpZ24pID4gbGF5b3V0LT5hbGlnbikKLSAgICAgIGxheW91dC0+YWxpZ24gPSBncnViX2hvc3Rf dG9fdGFyZ2V0MzIgKHMtPnNoX2FkZHJhbGlnbik7CisgIGlmIChpbWFnZV90YXJnZXQtPmlkID09 IElNQUdFX0VGSSkKKyAgICB7CisgICAgICBpZiAoQUxJR05fRE9XTihtaW5fd3ZhZGRyLCA0MDk2 KSA8IEFMSUdOX1VQKG1heF9leGVjdmFkZHIsIDQwOTYpKQorCWdydWJfdXRpbF9lcnJvcigid3Jp dGFibGUgYW5kIGV4ZWN1dGFibGUgb3ZlcmxhcCIpOworICAgICAgbWF4X2V4ZWN2YWRkciA9IEFM SUdOX1VQKG1heF9leGVjdmFkZHIsIDQwOTYpOworICAgIH0KIAotICAvKiAudGV4dCAqLwotICBm b3IgKGkgPSAwLCBzID0gc21kLT5zZWN0aW9uczsKLSAgICAgICBpIDwgc21kLT5udW1fc2VjdGlv bnM7Ci0gICAgICAgaSsrLCBzID0gKEVsZl9TaGRyICopICgoY2hhciAqKSBzICsgc21kLT5zZWN0 aW9uX2VudHNpemUpKQotICAgIGlmIChTVUZGSVggKGlzX3RleHRfc2VjdGlvbikgKHMsIGltYWdl X3RhcmdldCkpCi0gICAgICB7Ci0JbGF5b3V0LT5rZXJuZWxfc2l6ZSA9IFNVRkZJWCAocHV0X3Nl Y3Rpb24pIChzLCBpLCBsYXlvdXQtPmtlcm5lbF9zaXplLAotCQkJCQkJc21kLCBpbWFnZV90YXJn ZXQpOwotCWlmICghaXNfcmVsb2NhdGFibGUgKGltYWdlX3RhcmdldCkgJiYKLQkgICAgZ3J1Yl9o b3N0X3RvX3RhcmdldF9hZGRyIChzLT5zaF9hZGRyKSAhPSBpbWFnZV90YXJnZXQtPmxpbmtfYWRk cikKLQkgIHsKLQkgICAgY2hhciAqbXNnCi0JICAgICAgPSBncnViX3hhc3ByaW50ZiAoXygiYCVz JyBpcyBtaXNjb21waWxlZDogaXRzIHN0YXJ0IGFkZHJlc3MgaXMgMHglbGx4IgotCQkJCSAgIiBp bnN0ZWFkIG9mIDB4JWxseDogbGQuZ29sZCBidWc/IiksCi0JCQkJa2VybmVsX3BhdGgsCi0JCQkJ KHVuc2lnbmVkIGxvbmcgbG9uZykgZ3J1Yl9ob3N0X3RvX3RhcmdldF9hZGRyIChzLT5zaF9hZGRy KSwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBpbWFnZV90YXJnZXQtPmxpbmtfYWRkcik7Ci0J ICAgIGdydWJfdXRpbF9lcnJvciAoIiVzIiwgbXNnKTsKLQkgIH0KLSAgICAgIH0KKyAgaWYgKCFp c19yZWxvY2F0YWJsZSAoaW1hZ2VfdGFyZ2V0KSAmJgorICAgICAgbWluX3ZhZGRyICE9IGltYWdl X3RhcmdldC0+bGlua19hZGRyKQorICAgIHsKKyAgICAgIGNoYXIgKm1zZworCT0gZ3J1Yl94YXNw cmludGYgKF8oImAlcycgaXMgbWlzY29tcGlsZWQ6IGl0cyBzdGFydCBhZGRyZXNzIGlzIDB4JWxs eCIKKwkJCSAgICAiIGluc3RlYWQgb2YgMHglbGx4OiBsZC5nb2xkIGJ1Zz8iKSwKKwkJCSAga2Vy bmVsX3BhdGgsCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIG1pbl92YWRkciwKKwkJCSAgKHVu c2lnbmVkIGxvbmcgbG9uZykgaW1hZ2VfdGFyZ2V0LT5saW5rX2FkZHIpOworICAgICAgZ3J1Yl91 dGlsX2Vycm9yICgiJXMiLCBtc2cpOworICAgIH0KKworICBsYXlvdXQtPnZhZGRyX2RpZmYgPSBp bWFnZV90YXJnZXQtPnZhZGRyX29mZnNldDsKKyAgbGF5b3V0LT5vZmZfZGlmZiA9IC0oZ3J1Yl9p bnQ2NF90KW1pbl92YWRkcjsKKyAgbGF5b3V0LT5rZXJuZWxfc2l6ZSA9IG1heF9maWxsZWRfdmFk ZHIgLSBtaW5fdmFkZHI7CisgIGxheW91dC0+YnNzX3NpemUgPSBtYXhfdmFkZHIgLSBtYXhfZmls bGVkX3ZhZGRyOworICBsYXlvdXQtPmV4ZWNfc2l6ZSA9IG1heF9leGVjdmFkZHIgLSBtaW5fdmFk ZHI7CisgIGxheW91dC0+YWxpZ24gPSBtYXhfYWxpZ247CisKKyAgaWYgKGltYWdlX3RhcmdldC0+ aWQgPT0gSU1BR0VfRUZJKQorICAgIHsKKyAgICAgIGxheW91dC0+a2VybmVsX3NpemUgKz0gbGF5 b3V0LT5ic3Nfc2l6ZTsKKyAgICAgIGxheW91dC0+YnNzX3NpemUgPSAwOworICAgIH0KIAogI2lm ZGVmIE1LSU1BR0VfRUxGMzIKICAgaWYgKGltYWdlX3RhcmdldC0+ZWxmX3RhcmdldCA9PSBFTV9B Uk0pCiAgICAgewogICAgICAgZ3J1Yl9zaXplX3QgdHJhbXA7CiAKLSAgICAgIGxheW91dC0+a2Vy bmVsX3NpemUgPSBBTElHTl9VUCAobGF5b3V0LT5rZXJuZWxfc2l6ZSwgMTYpOwotCiAgICAgICB0 cmFtcCA9IGFybV9nZXRfdHJhbXBvbGluZV9zaXplIChlLCBzbWQtPnNlY3Rpb25zLCBzbWQtPnNl Y3Rpb25fZW50c2l6ZSwKIAkJCQkgICAgICAgc21kLT5udW1fc2VjdGlvbnMsIGltYWdlX3Rhcmdl dCk7Ci0KLSAgICAgIGxheW91dC0+dHJhbXBfb2ZmID0gbGF5b3V0LT5rZXJuZWxfc2l6ZTsKLSAg ICAgIGxheW91dC0+a2VybmVsX3NpemUgKz0gQUxJR05fVVAgKHRyYW1wLCAxNik7CisgICAgICBp ZiAodHJhbXAgIT0gMCkKKwlncnViX3V0aWxfZXJyb3IoImluc2VydGluZyB0cmFtcG9saW5lcyBp cyBubyBsb25nZXIgc3VwcG9ydGVkIik7CiAgICAgfQogI2VuZGlmCiAKLSAgbGF5b3V0LT5rZXJu ZWxfc2l6ZSA9IEFMSUdOX1VQIChsYXlvdXQtPmtlcm5lbF9zaXplICsgaW1hZ2VfdGFyZ2V0LT52 YWRkcl9vZmZzZXQsCi0JCQkgICAgICBpbWFnZV90YXJnZXQtPnNlY3Rpb25fYWxpZ24pCi0gICAg LSBpbWFnZV90YXJnZXQtPnZhZGRyX29mZnNldDsKLSAgbGF5b3V0LT5leGVjX3NpemUgPSBsYXlv dXQtPmtlcm5lbF9zaXplOwotCi0gIC8qIC5kYXRhICovCi0gIGZvciAoaSA9IDAsIHMgPSBzbWQt PnNlY3Rpb25zOwotICAgICAgIGkgPCBzbWQtPm51bV9zZWN0aW9uczsKLSAgICAgICBpKyssIHMg PSAoRWxmX1NoZHIgKikgKChjaGFyICopIHMgKyBzbWQtPnNlY3Rpb25fZW50c2l6ZSkpCi0gICAg aWYgKFNVRkZJWCAoaXNfZGF0YV9zZWN0aW9uKSAocywgaW1hZ2VfdGFyZ2V0KSkKLSAgICAgIGxh eW91dC0+a2VybmVsX3NpemUgPSBTVUZGSVggKHB1dF9zZWN0aW9uKSAocywgaSwgbGF5b3V0LT5r ZXJuZWxfc2l6ZSwgc21kLAotCQkJCQkJICBpbWFnZV90YXJnZXQpOwotCi0gIGxheW91dC0+YnNz X3N0YXJ0ID0gbGF5b3V0LT5rZXJuZWxfc2l6ZTsKLSAgbGF5b3V0LT5lbmQgPSBsYXlvdXQtPmtl cm5lbF9zaXplOwotCi0gIC8qIC5ic3MgKi8KLSAgZm9yIChpID0gMCwgcyA9IHNtZC0+c2VjdGlv bnM7Ci0gICAgICAgaSA8IHNtZC0+bnVtX3NlY3Rpb25zOwotICAgICAgIGkrKywgcyA9IChFbGZf U2hkciAqKSAoKGNoYXIgKikgcyArIHNtZC0+c2VjdGlvbl9lbnRzaXplKSkKLSAgICB7Ci0gICAg ICBpZiAoU1VGRklYIChpc19ic3Nfc2VjdGlvbikgKHMsIGltYWdlX3RhcmdldCkpCi0JbGF5b3V0 LT5lbmQgPSBTVUZGSVggKHB1dF9zZWN0aW9uKSAocywgaSwgbGF5b3V0LT5lbmQsIHNtZCwgaW1h Z2VfdGFyZ2V0KTsKLQotICAgICAgLyoKLSAgICAgICAqIFRoaXMgbXVzdCB0byBiZSBpbiB0aGUg bGFzdCB0aW1lIHRoaXMgZnVuY3Rpb24gcGFzc2VzIHRocm91Z2ggdGhlIGxvb3AuCi0gICAgICAg Ki8KLSAgICAgIHNtZC0+dmFkZHJzW2ldID0gc21kLT5hZGRyc1tpXSArIGltYWdlX3RhcmdldC0+ dmFkZHJfb2Zmc2V0OwotICAgIH0KLQotICBsYXlvdXQtPmVuZCA9IEFMSUdOX1VQIChsYXlvdXQt PmVuZCArIGltYWdlX3RhcmdldC0+dmFkZHJfb2Zmc2V0LAorICBsYXlvdXQtPmVuZCA9IEFMSUdO X1VQIChsYXlvdXQtPmtlcm5lbF9zaXplICsgaW1hZ2VfdGFyZ2V0LT52YWRkcl9vZmZzZXQsCiAJ CQkgICAgICBpbWFnZV90YXJnZXQtPnNlY3Rpb25fYWxpZ24pIC0gaW1hZ2VfdGFyZ2V0LT52YWRk cl9vZmZzZXQ7Ci0gIC8qIEV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBCU1MKLSAgICAgd2hlbiBwcm9k dWNpbmcgUEUzMiB0byBhdm9pZCBhIGJ1ZyBpbiBFRkkgaW1wbGVtZW50YXRpb25zLgotICAgICBQ bGF0Zm9ybXMgb3RoZXIgdGhhbiBFRkkgYW5kIFUtYm9vdCBzaG91bGRuJ3QgaGF2ZSAuYnNzIGlu Ci0gICAgIHRoZWlyIGJpbmFyaWVzIGFzIHdlIGJ1aWxkIHdpdGggLVdsLC1UdGV4dC4KLSAgKi8K LSAgaWYgKGltYWdlX3RhcmdldC0+aWQgPT0gSU1BR0VfRUZJIHx8ICFpc19yZWxvY2F0YWJsZSAo aW1hZ2VfdGFyZ2V0KSkKLSAgICBsYXlvdXQtPmtlcm5lbF9zaXplID0gbGF5b3V0LT5lbmQ7CiB9 CiAKIGNoYXIgKgpAQCAtMjQzNSwxMSArMjQ2NCwxMiBAQCBTVUZGSVggKGdydWJfbWtpbWFnZV9s b2FkX2ltYWdlKSAoY29uc3QgY2hhciAqa2VybmVsX3BhdGgsCiAJCQkJICBjb25zdCBzdHJ1Y3Qg Z3J1Yl9pbnN0YWxsX2ltYWdlX3RhcmdldF9kZXNjICppbWFnZV90YXJnZXQpCiB7CiAgIGNoYXIg Kmtlcm5lbF9pbWcsICpvdXRfaW1nOwotICBzdHJ1Y3Qgc2VjdGlvbl9tZXRhZGF0YSBzbWQgPSB7 IDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKyAgc3RydWN0IHNlY3Rpb25fbWV0YWRhdGEgc21kID0g eyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CiAgIEVsZl9FaGRyICplOwogICBpbnQgaTsKICAg RWxmX1NoZHIgKnM7Ci0gIEVsZl9PZmYgc2VjdGlvbl9vZmZzZXQ7CisgIEVsZl9QaGRyICpwOwor ICBFbGZfT2ZmIHNlY3Rpb25fb2Zmc2V0LCBwaGRyX29mZnNldDsKICAgZ3J1Yl9zaXplX3Qga2Vy bmVsX3NpemU7CiAKICAgZ3J1Yl9tZW1zZXQgKGxheW91dCwgMCwgc2l6ZW9mICgqbGF5b3V0KSk7 CkBAIC0yNDY0LDcxICsyNDk0LDIzIEBAIFNVRkZJWCAoZ3J1Yl9ta2ltYWdlX2xvYWRfaW1hZ2Up IChjb25zdCBjaGFyICprZXJuZWxfcGF0aCwKIAogICBzbWQuc2VjdGlvbnMgPSAoRWxmX1NoZHIg KikgKGtlcm5lbF9pbWcgKyBzZWN0aW9uX29mZnNldCk7CiAKKyAgcGhkcl9vZmZzZXQgPSBncnVi X3RhcmdldF90b19ob3N0IChlLT5lX3Bob2ZmKTsKKyAgc21kLnBoZHJfZW50c2l6ZSA9IGdydWJf dGFyZ2V0X3RvX2hvc3QxNiAoZS0+ZV9waGVudHNpemUpOworICBzbWQubnVtX3BoZHJzID0gZ3J1 Yl90YXJnZXRfdG9faG9zdDE2IChlLT5lX3BobnVtKTsKKworICBpZiAoa2VybmVsX3NpemUgPCBw aGRyX29mZnNldAorCQkgICAgKyAoZ3J1Yl91aW50MzJfdCkgc21kLnBoZHJfZW50c2l6ZSAqIHNt ZC5udW1fcGhkcnMpCisgICAgZ3J1Yl91dGlsX2Vycm9yIChfKCJwcmVtYXR1cmUgZW5kIG9mIGZp bGUgJXMiKSwga2VybmVsX3BhdGgpOworCisgIHNtZC5waGRycyA9IChFbGZfUGhkciAqKSAoa2Vy bmVsX2ltZyArIHBoZHJfb2Zmc2V0KTsKKwogICAvKiBSZWxvY2F0ZSBzZWN0aW9ucyB0aGVuIHN5 bWJvbHMgaW4gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gICovCiAgIHMgPSAoRWxmX1NoZHIg KikgKChjaGFyICopIHNtZC5zZWN0aW9ucwogCQkgICAgICArIGdydWJfaG9zdF90b190YXJnZXQx NiAoZS0+ZV9zaHN0cm5keCkgKiBzbWQuc2VjdGlvbl9lbnRzaXplKTsKICAgc21kLnN0cnRhYiA9 IChjaGFyICopIGUgKyBncnViX2hvc3RfdG9fdGFyZ2V0X2FkZHIgKHMtPnNoX29mZnNldCk7CiAK LSAgc21kLmFkZHJzID0geGNhbGxvYyAoc21kLm51bV9zZWN0aW9ucywgc2l6ZW9mICgqc21kLmFk ZHJzKSk7Ci0gIHNtZC52YWRkcnMgPSB4Y2FsbG9jIChzbWQubnVtX3NlY3Rpb25zLCBzaXplb2Yg KCpzbWQudmFkZHJzKSk7Ci0KICAgU1VGRklYIChsb2NhdGVfc2VjdGlvbnMpIChlLCBrZXJuZWxf cGF0aCwgJnNtZCwgbGF5b3V0LCBpbWFnZV90YXJnZXQpOwogCi0gIGlmICghaXNfcmVsb2NhdGFi bGUgKGltYWdlX3RhcmdldCkpCi0gICAgewotICAgICAgRWxmX0FkZHIgY3VycmVudF9hZGRyZXNz ID0gbGF5b3V0LT5rZXJuZWxfc2l6ZTsKLSAgICAgIEVsZl9BZGRyIGJzc19zdGFydCA9IGxheW91 dC0+a2VybmVsX3NpemU7Ci0gICAgICBib29sIGlzX2ZpcnN0ID0gdHJ1ZTsKLQotICAgICAgZm9y IChpID0gMCwgcyA9IHNtZC5zZWN0aW9uczsKLQkgICBpIDwgc21kLm51bV9zZWN0aW9uczsKLQkg ICBpKyssIHMgPSAoRWxmX1NoZHIgKikgKChjaGFyICopIHMgKyBzbWQuc2VjdGlvbl9lbnRzaXpl KSkKLQlpZiAoZ3J1Yl90YXJnZXRfdG9faG9zdDMyIChzLT5zaF90eXBlKSA9PSBTSFRfTk9CSVRT KQotCSAgewotCSAgICBFbGZfV29yZCBzZWNfYWxpZ24gPSBncnViX2hvc3RfdG9fdGFyZ2V0X2Fk ZHIgKHMtPnNoX2FkZHJhbGlnbik7Ci0JICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBzbWQuc3RydGFi ICsgZ3J1Yl9ob3N0X3RvX3RhcmdldDMyIChzLT5zaF9uYW1lKTsKLQotCSAgICBpZiAoc2VjX2Fs aWduKQotCSAgICAgIGN1cnJlbnRfYWRkcmVzcyA9IEFMSUdOX1VQIChjdXJyZW50X2FkZHJlc3MK LQkJCQkJICArIGltYWdlX3RhcmdldC0+dmFkZHJfb2Zmc2V0LAotCQkJCQkgIHNlY19hbGlnbikK LQkJLSBpbWFnZV90YXJnZXQtPnZhZGRyX29mZnNldDsKLQotCSAgICBncnViX3V0aWxfaW5mbyAo ImxvY2F0aW5nIHRoZSBzZWN0aW9uICVzIGF0IDB4JSIKLQkJCSAgICBHUlVCX0hPU1RfUFJJeExP TkdfTE9ORywKLQkJCSAgICBuYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKSBjdXJyZW50X2FkZHJl c3MpOwotCSAgICBpZiAoIWlzX3JlbG9jYXRhYmxlIChpbWFnZV90YXJnZXQpKQotCSAgICAgIGN1 cnJlbnRfYWRkcmVzcyA9IGdydWJfaG9zdF90b190YXJnZXRfYWRkciAocy0+c2hfYWRkcikKLQkJ LSBpbWFnZV90YXJnZXQtPmxpbmtfYWRkcjsKLQotCSAgICBpZiAoaXNfZmlyc3QgPT0gdHJ1ZSkK LQkgICAgICB7Ci0JCWJzc19zdGFydCA9IGN1cnJlbnRfYWRkcmVzczsKLQkJaXNfZmlyc3QgPSBm YWxzZTsKLQkgICAgICB9Ci0KLQkgICAgc21kLnZhZGRyc1tpXSA9IGN1cnJlbnRfYWRkcmVzcwot CSAgICAgICsgaW1hZ2VfdGFyZ2V0LT52YWRkcl9vZmZzZXQ7Ci0JICAgIGN1cnJlbnRfYWRkcmVz cyArPSBncnViX2hvc3RfdG9fdGFyZ2V0X2FkZHIgKHMtPnNoX3NpemUpOwotCSAgfQotICAgICAg Y3VycmVudF9hZGRyZXNzID0gQUxJR05fVVAgKGN1cnJlbnRfYWRkcmVzcyArIGltYWdlX3Rhcmdl dC0+dmFkZHJfb2Zmc2V0LAotCQkJCSAgaW1hZ2VfdGFyZ2V0LT5zZWN0aW9uX2FsaWduKQotCS0g aW1hZ2VfdGFyZ2V0LT52YWRkcl9vZmZzZXQ7Ci0KLSAgICAgIGlmIChpbWFnZV90YXJnZXQtPmlk ID09IElNQUdFX1lFRUxPT05HX0ZMQVNICi0JICB8fCBpbWFnZV90YXJnZXQtPmlkID09IElNQUdF X0ZVTE9PTkcyRl9GTEFTSAotCSAgfHwgaW1hZ2VfdGFyZ2V0LT5pZCA9PSBJTUFHRV9MT09OR1NP Tl9FTEYKLQkgIHx8IGltYWdlX3RhcmdldC0+aWQgPT0gSU1BR0VfUUVNVV9NSVBTX0ZMQVNICi0J ICB8fCBpbWFnZV90YXJnZXQtPmlkID09IElNQUdFX01JUFNfQVJDKQotCXsKLQkgIGxheW91dC0+ a2VybmVsX3NpemUgPSBic3Nfc3RhcnQ7Ci0JfQotCi0gICAgICBsYXlvdXQtPmJzc19zaXplID0g Y3VycmVudF9hZGRyZXNzIC0gbGF5b3V0LT5rZXJuZWxfc2l6ZTsKLSAgICB9Ci0gIGVsc2UKLSAg ICBsYXlvdXQtPmJzc19zaXplID0gMDsKLQogICBpZiAoaW1hZ2VfdGFyZ2V0LT5pZCA9PSBJTUFH RV9TUEFSQzY0X0FPVVQKICAgICAgIHx8IGltYWdlX3RhcmdldC0+aWQgPT0gSU1BR0VfU1BBUkM2 NF9SQVcKICAgICAgIHx8IGltYWdlX3RhcmdldC0+aWQgPT0gSU1BR0VfVUJPT1QKQEAgLTI1NDIs NyArMjUyNCw3IEBAIFNVRkZJWCAoZ3J1Yl9ta2ltYWdlX2xvYWRfaW1hZ2UpIChjb25zdCBjaGFy ICprZXJuZWxfcGF0aCwKICAgICAgIGZvciAoaSA9IDAsIHMgPSBzbWQuc2VjdGlvbnM7CiAJICAg aSA8IHNtZC5udW1fc2VjdGlvbnM7CiAJICAgaSsrLCBzID0gKEVsZl9TaGRyICopICgoY2hhciAq KSBzICsgc21kLnNlY3Rpb25fZW50c2l6ZSkpCi0JaWYgKHMtPnNoX3R5cGUgPT0gZ3J1Yl9ob3N0 X3RvX3RhcmdldDMyIChTSFRfU1lNVEFCKSkKKwlpZiAocy0+c2hfdHlwZSA9PSBncnViX2hvc3Rf dG9fdGFyZ2V0MzIgKFNIVF9EWU5TWU0pKQogCSAgewogCSAgICBzbWQuc3ltdGFiID0gczsKIAkg ICAgYnJlYWs7CkBAIC0yNTU4LDggKzI1NDAsOCBAQCBTVUZGSVggKGdydWJfbWtpbWFnZV9sb2Fk X2ltYWdlKSAoY29uc3QgY2hhciAqa2VybmVsX3BhdGgsCiAKIAkgIGdydWJfaWE2NF9kbF9nZXRf dHJhbXBfZ290X3NpemUgKGUsICZ0cmFtcCwgJmxheW91dC0+Z290X3NpemUpOwogCi0JICBsYXlv dXQtPnRyYW1wX29mZiA9IGxheW91dC0+a2VybmVsX3NpemU7Ci0JICBsYXlvdXQtPmtlcm5lbF9z aXplICs9IEFMSUdOX1VQICh0cmFtcCwgMTYpOworCSAgaWYgKHRyYW1wICE9IDApCisJICAgIGdy dWJfdXRpbF9lcnJvcigiaW5zZXJ0aW5nIHRyYW1wb2xpbmVzIGlzIG5vIGxvbmdlciBzdXBwb3J0 ZWQiKTsKIAogCSAgbGF5b3V0LT5pYTY0am1wX29mZiA9IGxheW91dC0+a2VybmVsX3NpemU7CiAJ ICBsYXlvdXQtPmlhNjRqbXBudW0gPSBTVUZGSVggKGNvdW50X2Z1bmNzKSAoZSwgc21kLnN5bXRh YiwKQEAgLTI2MDAsMTYgKzI1ODIsMzIgQEAgU1VGRklYIChncnViX21raW1hZ2VfbG9hZF9pbWFn ZSkgKGNvbnN0IGNoYXIgKmtlcm5lbF9wYXRoLAogICAgICAgbGF5b3V0LT5zdGFydF9hZGRyZXNz ID0gU1VGRklYIChyZWxvY2F0ZV9zeW1ib2xzKSAoZSwgJnNtZCwKIAkJCQkgIChjaGFyICopIG91 dF9pbWcgKyBsYXlvdXQtPmlhNjRqbXBfb2ZmLAogCQkJCSAgbGF5b3V0LT5pYTY0am1wX29mZiAr IGltYWdlX3RhcmdldC0+dmFkZHJfb2Zmc2V0LAotCQkJCSAgbGF5b3V0LT5ic3Nfc3RhcnQsIGxh eW91dC0+ZW5kLCBpbWFnZV90YXJnZXQpOworCQkJCSAgbGF5b3V0LCBpbWFnZV90YXJnZXQpOwog CiAgICAgICBpZiAobGF5b3V0LT5zdGFydF9hZGRyZXNzID09IChFbGZfQWRkcikgLTEpCiAJZ3J1 Yl91dGlsX2Vycm9yICgic3RhcnQgc3ltYm9sIGlzIG5vdCBkZWZpbmVkIik7CiAKKyAgICAgIG1h a2VfcmVsb2Nfc2VjdGlvbiAoZSwgbGF5b3V0LCAmc21kLCBpbWFnZV90YXJnZXQpOworICAgIH0K KworICBmb3IgKGkgPSAwLCBwID0gc21kLnBoZHJzOworICAgICAgIGkgPCBzbWQubnVtX3BoZHJz OworICAgICAgIGkrKywgcCA9IChFbGZfUGhkciAqKSAoKGNoYXIgKikgcCArIHNtZC5waGRyX2Vu dHNpemUpKQorICAgICAgeworCWlmIChncnViX3RhcmdldF90b19ob3N0MzIgKHAtPnBfdHlwZSkg IT0gUFRfTE9BRCkKKwkgIGNvbnRpbnVlOworCW1lbWNweSAob3V0X2ltZyArIGdydWJfdGFyZ2V0 X3RvX2hvc3QgKHAtPnBfdmFkZHIpICsgbGF5b3V0LT5vZmZfZGlmZiwKKwkgICAgICAga2VybmVs X2ltZyArIGdydWJfdGFyZ2V0X3RvX2hvc3QgKHAtPnBfb2Zmc2V0KSwgZ3J1Yl90YXJnZXRfdG9f aG9zdCAocC0+cF9maWxlc3opKTsKKwlpZiAoaW1hZ2VfdGFyZ2V0LT5pZCA9PSBJTUFHRV9FRkkp CisJICBtZW1zZXQgKG91dF9pbWcgKyBncnViX3RhcmdldF90b19ob3N0IChwLT5wX3ZhZGRyKSAr IGxheW91dC0+b2ZmX2RpZmYgKyBncnViX3RhcmdldF90b19ob3N0IChwLT5wX2ZpbGVzeiksCisJ CSAgMCwgZ3J1Yl90YXJnZXRfdG9faG9zdCAocC0+cF9tZW1zeikgLSBncnViX3RhcmdldF90b19o b3N0IChwLT5wX2ZpbGVzeikpOworICAgICAgfQorCisgIGlmIChpc19yZWxvY2F0YWJsZSAoaW1h Z2VfdGFyZ2V0KSkKKyAgICB7CiAgICAgICAvKiBSZXNvbHZlIGFkZHJzIGluIHRoZSB2aXJ0dWFs IGFkZHJlc3Mgc3BhY2UuICAqLwotICAgICAgU1VGRklYIChyZWxvY2F0ZV9hZGRycykgKGUsICZz bWQsIG91dF9pbWcsIGxheW91dC0+dHJhbXBfb2ZmLAotCQkJCSAgIGxheW91dC0+Z290X29mZiwg aW1hZ2VfdGFyZ2V0KTsKKyAgICAgIFNVRkZJWCAocmVsb2NhdGVfYWRkcnMpIChlLCAmc21kLCBv dXRfaW1nLCBsYXlvdXQsIGltYWdlX3RhcmdldCk7CiAKLSAgICAgIG1ha2VfcmVsb2Nfc2VjdGlv biAoZSwgbGF5b3V0LCAmc21kLCBpbWFnZV90YXJnZXQpOwogICAgICAgaWYgKGltYWdlX3Rhcmdl dC0+aWQgIT0gSU1BR0VfRUZJKQogCXsKIAkgIG91dF9pbWcgPSB4cmVhbGxvYyAob3V0X2ltZywg bGF5b3V0LT5rZXJuZWxfc2l6ZSArIHRvdGFsX21vZHVsZV9zaXplCkBAIC0yNjIxLDI1ICsyNjE5 LDcgQEAgU1VGRklYIChncnViX21raW1hZ2VfbG9hZF9pbWFnZSkgKGNvbnN0IGNoYXIgKmtlcm5l bF9wYXRoLAogCX0KICAgICB9CiAKLSAgZm9yIChpID0gMCwgcyA9IHNtZC5zZWN0aW9uczsKLSAg ICAgICBpIDwgc21kLm51bV9zZWN0aW9uczsKLSAgICAgICBpKyssIHMgPSAoRWxmX1NoZHIgKikg KChjaGFyICopIHMgKyBzbWQuc2VjdGlvbl9lbnRzaXplKSkKLSAgICBpZiAoU1VGRklYIChpc19r ZXB0X3NlY3Rpb24pIChzLCBpbWFnZV90YXJnZXQpKQotICAgICAgewotCWlmIChncnViX3Rhcmdl dF90b19ob3N0MzIgKHMtPnNoX3R5cGUpID09IFNIVF9OT0JJVFMpCi0JICBtZW1zZXQgKG91dF9p bWcgKyBzbWQuYWRkcnNbaV0sIDAsCi0JCSAgZ3J1Yl9ob3N0X3RvX3RhcmdldF9hZGRyIChzLT5z aF9zaXplKSk7Ci0JZWxzZQotCSAgbWVtY3B5IChvdXRfaW1nICsgc21kLmFkZHJzW2ldLAotCQkg IGtlcm5lbF9pbWcgKyBncnViX2hvc3RfdG9fdGFyZ2V0X2FkZHIgKHMtPnNoX29mZnNldCksCi0J CSAgZ3J1Yl9ob3N0X3RvX3RhcmdldF9hZGRyIChzLT5zaF9zaXplKSk7Ci0gICAgICB9CiAgIGZy ZWUgKGtlcm5lbF9pbWcpOwogCi0gIGZyZWUgKHNtZC52YWRkcnMpOwotICBzbWQudmFkZHJzID0g TlVMTDsKLSAgZnJlZSAoc21kLmFkZHJzKTsKLSAgc21kLmFkZHJzID0gTlVMTDsKLQogICByZXR1 cm4gb3V0X2ltZzsKIH0KLS0gCjIuNDkuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkdydWItZGV2ZWwgbWFpbGluZyBsaXN0CkdydWItZGV2ZWxAZ251 Lm9yZwpodHRwczovL2xpc3RzLmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9ncnViLWRldmVsCg==