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 99FEBC25B78 for ; Fri, 17 May 2024 07:47:18 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s7sIA-0007AD-9V; Fri, 17 May 2024 03:46:14 -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 1s7sI4-000783-Vz for grub-devel@gnu.org; Fri, 17 May 2024 03:46:09 -0400 Received: from mail-lf1-x135.google.com ([2a00:1450:4864:20::135]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1s7sI0-0003Lu-95 for grub-devel@gnu.org; Fri, 17 May 2024 03:46:08 -0400 Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-5238b7d0494so380607e87.3 for ; Fri, 17 May 2024 00:45:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1715931957; x=1716536757; 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=2SGeSJArwA/SazYVjHGnUbdNlm21v4ZxunfHeMhPGvA=; b=UOMQhxyRoe8RDug+qo6fDD2GOi1XB79s7lcri9/XYhDq11vw9oHiLtU5SByYyktb1O nvNfqfgigQcwPxVCg1gXC8YGhp8V776H1NLqJR4+sHoAUKuZR15xehorzlcFAlyOac6l H8uT/bH58I4GK+rlkcoMhslfCI+PueTR5Qw8UIzGibCIbdBdHM0pRRSCQ1AXrzQ5gbYS AVssTEq2qVWNQW34LAicBvE0CL87FaxWvlvaa+c3EELvEMo52lSK/wVe6Wk0toltgHRl iXJV88n8Li667UXQKUrS7OKLQFeE9qkENmSCrjQfXd79p9IyRoqxub8dr4roy4Jv0LIe Rjog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715931957; x=1716536757; 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=2SGeSJArwA/SazYVjHGnUbdNlm21v4ZxunfHeMhPGvA=; b=Tmr33Dzcda2mxXE7z31VodjkE/G6I3xNFb8atmG1hNC8pKkfd3Frp9vi99nLqU4eM8 FdmsBGVvbnKo0K69jyovE65900sPMtUQyXWHxMjR1eTpo/WG12+hrkxTgdEuIbEdkprC BDJj+GsBBCpVaGu6y/TKcXUL0xZVOufzEbLpmtVZwkYT8Nj0wKWBcs20XU2niqy9nogK 0BnlF5bnK7OFR7eum7Lw999+lmcLM0tJ5HeoNU4yAxF7elvnBBCMPPT5C1KvTWWL6FxK gOo0bc6+FO4I5rN/kxTSQMjSfcORAcqYEb+ejwWQxLjojTsHNSj5NLwpht4wIoFJsCHZ vuaw== X-Gm-Message-State: AOJu0YwUoSn+bmqjgdqr3wHzVrPYfvWXvvCUHmP5iQK/iYR6dc5geNz0 e7cmeSEWvMRD4aVwXwd2gwU6fmO1hkoYTFqa6Tdpa5dp3+MR8o1+19s/+QdVXka98g== X-Google-Smtp-Source: AGHT+IHBTH2ZRcZaAgdSHg46TwH432OpMrAiS37HyUDkqYHQE6FBdTIWuVT8gXqXWenAPN0CoA4FCQ== X-Received: by 2002:a05:6512:1321:b0:523:93e8:1cf3 with SMTP id 2adb3069b0e04-52393e820a7mr8614894e87.51.1715931957167; Fri, 17 May 2024 00:45:57 -0700 (PDT) Received: from localhost ([5.165.219.191]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-521f38d8811sm3227243e87.216.2024.05.17.00.45.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 May 2024 00:45:56 -0700 (PDT) From: Vladimir Serbinenko To: grub-devel@gnu.org Cc: Vladimir Serbinenko Subject: [PATCH v2 2/4] loader/bsd: Improve loading of *BSD on EFI platforms Date: Fri, 17 May 2024 10:45:38 +0300 Message-Id: <20240517074540.2576-2-phcoder@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240517074540.2576-1-phcoder@gmail.com> References: <20240517074540.2576-1-phcoder@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::135; envelope-from=phcoder@gmail.com; helo=mail-lf1-x135.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 LQogZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2JzZC5jICAgICAgICAgfCA1MTUgKysrKysrKysrKysr KysrKysrKysrKystLS0tLQogaW5jbHVkZS9ncnViL2kzODYvZnJlZWJzZF9saW5rZXIuaCAgfCAg MzkgKysrCiBpbmNsdWRlL2dydWIvaTM4Ni9uZXRic2RfYm9vdGluZm8uaCB8ICAxMiArLQogaW5j bHVkZS9ncnViL2kzODYvb3BlbmJzZF9ib290YXJnLmggfCAgMjQgKysKIDQgZmlsZXMgY2hhbmdl ZCwgNDk1IGluc2VydGlvbnMoKyksIDk1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2dydWIt Y29yZS9sb2FkZXIvaTM4Ni9ic2QuYyBiL2dydWItY29yZS9sb2FkZXIvaTM4Ni9ic2QuYwppbmRl eCAxZjkxMjhmNmYuLjU4Yjk3Njg2MSAxMDA2NDQKLS0tIGEvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2 L2JzZC5jCisrKyBiL2dydWItY29yZS9sb2FkZXIvaTM4Ni9ic2QuYwpAQCAtNDAsNiArNDAsOCBA QAogI2lmZGVmIEdSVUJfTUFDSElORV9QQ0JJT1MKICNpbmNsdWRlIDxncnViL21hY2hpbmUvaW50 Lmg+CiAjZW5kaWYKKyNpbmNsdWRlIDxncnViL2FjcGkuaD4KKyNpbmNsdWRlIDxncnViL3NtYmlv cy5oPgogCiBHUlVCX01PRF9MSUNFTlNFICgiR1BMdjMrIik7CiAKQEAgLTQ4LDEwICs1MCwxMSBA QCBHUlVCX01PRF9MSUNFTlNFICgiR1BMdjMrIik7CiAjaW5jbHVkZSA8Z3J1Yi9tYWNoaW5lL2Jp b3NudW0uaD4KICNlbmRpZgogI2lmZGVmIEdSVUJfTUFDSElORV9FRkkKKyNpbmNsdWRlIDxncnVi L2NvcmVib290L2xiaW8uaD4KICNpbmNsdWRlIDxncnViL2VmaS9lZmkuaD4KLSNkZWZpbmUgTkVU QlNEX0RFRkFVTFRfVklERU9fTU9ERSAiODAweDYwMCIKKyNkZWZpbmUgQlNEX0RFRkFVTFRfVklE RU9fTU9ERSAiODAweDYwMCIKICNlbHNlCi0jZGVmaW5lIE5FVEJTRF9ERUZBVUxUX1ZJREVPX01P REUgInRleHQiCisjZGVmaW5lIEJTRF9ERUZBVUxUX1ZJREVPX01PREUgInRleHQiCiAjaW5jbHVk ZSA8Z3J1Yi9pMzg2L3BjL3ZiZS5oPgogI2VuZGlmCiAjaW5jbHVkZSA8Z3J1Yi92aWRlby5oPgpA QCAtNzYsNiArNzksMTEgQEAgc3RhdGljIGludCBpc19lbGZfa2VybmVsLCBpc182NGJpdDsKIHN0 YXRpYyBncnViX3VpbnQzMl90IG9wZW5ic2Rfcm9vdDsKIHN0YXRpYyBzdHJ1Y3QgZ3J1Yl9yZWxv Y2F0b3IgKnJlbG9jYXRvciA9IE5VTEw7CiBzdGF0aWMgc3RydWN0IGdydWJfb3BlbmJzZF9yYW1k aXNrX2Rlc2NyaXB0b3Igb3BlbmJzZF9yYW1kaXNrOworI2lmZGVmIEdSVUJfTUFDSElORV9FRkkK K3N0YXRpYyBzdHJ1Y3QgZ3J1Yl9vcGVuYnNkX2Jvb3RhcmdfZWZpaW5mbyBvcGVuYnNkX2VmaV9p bmZvOworI2VuZGlmCisKK3N0YXRpYyBncnViX2Vycl90IGdydWJfYnNkX3NldHVwX3ZpZGVvICh2 b2lkKTsKIAogc3RydWN0IGJzZF90YWcKIHsKQEAgLTIxOSw3ICsyMjcsNyBAQCBncnViX2JzZF9n ZXRfZGV2aWNlIChncnViX3VpbnQzMl90ICogYmlvc2RldiwKIH0KIAogc3RhdGljIGdydWJfZXJy X3QKLWdydWJfYnNkX2FkZF9tZXRhX3B0ciAoZ3J1Yl91aW50MzJfdCB0eXBlLCB2b2lkICoqcHRy LCBncnViX3VpbnQzMl90IGxlbikKK2dydWJfYnNkX2FkZF9tZXRhX3B0ciAoZ3J1Yl91aW50MzJf dCB0eXBlLCB2b2lkICoqcHRyLCBncnViX3VpbnQzMl90IGxlbiwgaW50IGlzX2tlcm5lbF90YWcp CiB7CiAgIHN0cnVjdCBic2RfdGFnICpuZXd0YWc7CiAKQEAgLTIzMSw4ICsyMzksNyBAQCBncnVi X2JzZF9hZGRfbWV0YV9wdHIgKGdydWJfdWludDMyX3QgdHlwZSwgdm9pZCAqKnB0ciwgZ3J1Yl91 aW50MzJfdCBsZW4pCiAgIG5ld3RhZy0+bmV4dCA9IE5VTEw7CiAgICpwdHIgPSBuZXd0YWctPmRh dGE7CiAKLSAgaWYgKGtlcm5lbF90eXBlID09IEtFUk5FTF9UWVBFX0ZSRUVCU0QKLSAgICAgICYm IHR5cGUgPT0gKEZSRUVCU0RfTU9ESU5GT19NRVRBREFUQSB8IEZSRUVCU0RfTU9ESU5GT01EX1NN QVApKQorICBpZiAoa2VybmVsX3R5cGUgPT0gS0VSTkVMX1RZUEVfRlJFRUJTRCAmJiBpc19rZXJu ZWxfdGFnKQogICAgIHsKICAgICAgIHN0cnVjdCBic2RfdGFnICpwOwogICAgICAgZm9yIChwID0g dGFnczsKQEAgLTI1OSwyMCArMjY2LDM0IEBAIGdydWJfYnNkX2FkZF9tZXRhX3B0ciAoZ3J1Yl91 aW50MzJfdCB0eXBlLCB2b2lkICoqcHRyLCBncnViX3VpbnQzMl90IGxlbikKICAgcmV0dXJuIEdS VUJfRVJSX05PTkU7CiB9CiAKLWdydWJfZXJyX3QKLWdydWJfYnNkX2FkZF9tZXRhIChncnViX3Vp bnQzMl90IHR5cGUsIGNvbnN0IHZvaWQgKmRhdGEsIGdydWJfdWludDMyX3QgbGVuKQorc3RhdGlj IGdydWJfZXJyX3QKK2dydWJfYnNkX2FkZF9tZXRhX3JlYWwgKGdydWJfdWludDMyX3QgdHlwZSwg Y29uc3Qgdm9pZCAqZGF0YSwgZ3J1Yl91aW50MzJfdCBsZW4sIGludCBpc19rZXJuZWxfdGFnKQog ewogICBncnViX2Vycl90IGVycjsKICAgdm9pZCAqcHRyID0gTlVMTDsKIAotICBlcnIgPSBncnVi X2JzZF9hZGRfbWV0YV9wdHIgKHR5cGUsICZwdHIsIGxlbik7CisgIGVyciA9IGdydWJfYnNkX2Fk ZF9tZXRhX3B0ciAodHlwZSwgJnB0ciwgbGVuLCBpc19rZXJuZWxfdGFnKTsKICAgaWYgKGVycikK ICAgICByZXR1cm4gZXJyOwotICBpZiAobGVuKQorICBpZiAoZGF0YSAmJiBsZW4pCiAgICAgZ3J1 Yl9tZW1jcHkgKHB0ciwgZGF0YSwgbGVuKTsKKyAgZWxzZSBpZiAoIWRhdGEgJiYgbGVuKQorICAg IGdydWJfbWVtc2V0IChwdHIsIDAsIGxlbik7CisKICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CiB9 CiAKK3N0YXRpYyBncnViX2Vycl90CitncnViX2JzZF9hZGRfa2VybmVsX21ldGEgKGdydWJfdWlu dDMyX3QgdHlwZSwgY29uc3Qgdm9pZCAqZGF0YSwgZ3J1Yl91aW50MzJfdCBsZW4pCit7CisgIHJl dHVybiBncnViX2JzZF9hZGRfbWV0YV9yZWFsICh0eXBlLCBkYXRhLCBsZW4sIDEpOworfQorCitn cnViX2Vycl90CitncnViX2JzZF9hZGRfbWV0YSAoZ3J1Yl91aW50MzJfdCB0eXBlLCBjb25zdCB2 b2lkICpkYXRhLCBncnViX3VpbnQzMl90IGxlbikKK3sKKyAgcmV0dXJuIGdydWJfYnNkX2FkZF9t ZXRhX3JlYWwgKHR5cGUsIGRhdGEsIGxlbiwgMCk7Cit9CiAKIHN0cnVjdCBncnViX2U4MjBfbW1h cAogewpAQCAtNDA0LDggKzQyNSw4IEBAIGdydWJfYnNkX2FkZF9tbWFwICh2b2lkKQogICBlbHNl IGlmIChrZXJuZWxfdHlwZSA9PSBLRVJORUxfVFlQRV9PUEVOQlNEKQogICAgIGdydWJfYnNkX2Fk ZF9tZXRhIChPUEVOQlNEX0JPT1RBUkdfTU1BUCwgYnVmMCwgbGVuKTsKICAgZWxzZQotICAgIGdy dWJfYnNkX2FkZF9tZXRhIChGUkVFQlNEX01PRElORk9fTUVUQURBVEEgfAotCQkgICAgICAgRlJF RUJTRF9NT0RJTkZPTURfU01BUCwgYnVmMCwgbGVuKTsKKyAgICBncnViX2JzZF9hZGRfa2VybmVs X21ldGEgKEZSRUVCU0RfTU9ESU5GT19NRVRBREFUQSB8CisJCQkgICAgICBGUkVFQlNEX01PRElO Rk9NRF9TTUFQLCBidWYwLCBsZW4pOwogCiAgIGdydWJfZnJlZSAoYnVmMCk7CiAKQEAgLTQ2Miw3 ICs0ODMsNyBAQCBncnViX2ZyZWVic2RfYWRkX21ldGFfbW9kdWxlIChjb25zdCBjaGFyICpmaWxl bmFtZSwgY29uc3QgY2hhciAqdHlwZSwKIAkgIHZvaWQgKmNtZGxpbmU7CiAJICBjaGFyICpwOwog Ci0JICBpZiAoZ3J1Yl9ic2RfYWRkX21ldGFfcHRyIChGUkVFQlNEX01PRElORk9fQVJHUywgJmNt ZGxpbmUsIG4pKQorCSAgaWYgKGdydWJfYnNkX2FkZF9tZXRhX3B0ciAoRlJFRUJTRF9NT0RJTkZP X0FSR1MsICZjbWRsaW5lLCBuLCAwKSkKIAkgICAgcmV0dXJuIGdydWJfZXJybm87CiAKIAkgIHAg PSBjbWRsaW5lOwpAQCAtNTkyLDYgKzYxMyw4MCBAQCBmcmVlYnNkX2dldF96ZnMgKHZvaWQpCiAg IGdydWJfZnJlZSAodXVpZCk7CiB9CiAKKyNpZmRlZiBHUlVCX01BQ0hJTkVfRUZJCisKKyNkZWZp bmUgTkVYVF9NRU1PUllfREVTQ1JJUFRPUihkZXNjLCBzaXplKQlcCisgICgoZ3J1Yl9lZmlfbWVt b3J5X2Rlc2NyaXB0b3JfdCAqKSAoKGNoYXIgKikgKGRlc2MpICsgKHNpemUpKSkKKworc3RhdGlj IHZvaWQKK2dydWJfc3dhcF9idWZmZXJzKHZvaWQgKmEsIHZvaWQgKmIsIGdydWJfc2l6ZV90IG4p Cit7CisgIGdydWJfdWludDhfdCAqYXAgPSBhLCAqYnAgPSBiOworICBmb3IgKDsgbjsgbi0tLCBh cCsrLCBicCsrKQorICAgIHsKKyAgICAgIGdydWJfdWludDhfdCB0ID0gKmFwOworICAgICAgKmFw ID0gKmJwOworICAgICAgKmJwID0gdDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitncnViX2Vm aV9zb3J0X21lbW9yeV9tYXAodm9pZCAqYnVmLCBncnViX2VmaV91aW50bl90IGRlc2Nfc2l6ZSwg Z3J1Yl9lZmlfdWludG5fdCBtbWFwX3NpemUpCit7CisgIGludCBkb25lX2FueSA9IDE7CisKKyAg d2hpbGUgKGRvbmVfYW55KQorICAgIHsKKyAgICAgIGdydWJfZWZpX21lbW9yeV9kZXNjcmlwdG9y X3QgKmRfY3VyID0gYnVmOworICAgICAgZ3J1Yl9lZmlfbWVtb3J5X2Rlc2NyaXB0b3JfdCAqZF9u ZXh0ID0gTkVYVF9NRU1PUllfREVTQ1JJUFRPUihkX2N1ciwgZGVzY19zaXplKTsKKworICAgICAg ZG9uZV9hbnkgPSAwOworICAgICAgZm9yICg7IGRfbmV4dCA8IE5FWFRfTUVNT1JZX0RFU0NSSVBU T1IoYnVmLCBtbWFwX3NpemUpOworCSAgIGRfY3VyID0gZF9uZXh0LCBkX25leHQgPSBORVhUX01F TU9SWV9ERVNDUklQVE9SKGRfY3VyLCBkZXNjX3NpemUpKQorCXsKKwkgIGlmIChkX25leHQtPnBo eXNpY2FsX3N0YXJ0IDwgZF9jdXItPnBoeXNpY2FsX3N0YXJ0KQorCSAgICB7CisJICAgICAgZG9u ZV9hbnkgPSAxOworCSAgICAgIGdydWJfc3dhcF9idWZmZXJzKGRfY3VyLCBkX25leHQsIGRlc2Nf c2l6ZSk7CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdGF0aWMgaW50CitpdGVyYXRlX2dldF96 ZXJvdGFibGVzX3NpemUgKGdydWJfbGludXhiaW9zX3RhYmxlX2l0ZW1fdCB0YWJsZV9pdGVtLCB2 b2lkICpkYXRhKQoreworICBncnViX3VpbnQ2NF90ICpyZXQgPSBkYXRhOworICBtZW1fcmVnaW9u X3QgbWVtX3JlZ2lvbjsKKworICBpZiAodGFibGVfaXRlbS0+dGFnICE9IEdSVUJfTElOVVhCSU9T X01FTUJFUl9NRU1PUlkpCisgICAgcmV0dXJuIDA7CisKKyAgbWVtX3JlZ2lvbiA9CisgICAgKG1l bV9yZWdpb25fdCkgKChsb25nKSB0YWJsZV9pdGVtICsKKwkJCSAgICAgICBzaXplb2YgKHN0cnVj dCBncnViX2xpbnV4Ymlvc190YWJsZV9pdGVtKSk7CisgIGZvciAoOyAobG9uZykgbWVtX3JlZ2lv biA8IChsb25nKSB0YWJsZV9pdGVtICsgKGxvbmcpIHRhYmxlX2l0ZW0tPnNpemU7CisgICAgICAg bWVtX3JlZ2lvbisrKQorICAgIHsKKyAgICAgIGlmIChtZW1fcmVnaW9uLT50eXBlID09IEdSVUJf TUVNT1JZX0NPUkVCT09UX1RBQkxFUworCSAgJiYgbWVtX3JlZ2lvbi0+YWRkciA9PSAwICYmICpy ZXQgPCBtZW1fcmVnaW9uLT5hZGRyICsgbWVtX3JlZ2lvbi0+c2l6ZSkKKwkqcmV0ID0gbWVtX3Jl Z2lvbi0+YWRkciArIG1lbV9yZWdpb24tPnNpemU7CisgICAgfQorCisgIHJldHVybiAwOworfQor CitzdGF0aWMgZ3J1Yl91aW50NjRfdAorZ3J1Yl9jb3JlYm9vdF9nZXRfemVyb3RhYmxlc19zaXpl KHZvaWQpCit7CisgIGdydWJfdWludDY0X3QgcmV0ID0gMDsKKworICBncnViX2xpbnV4Ymlvc190 YWJsZV9pdGVyYXRlIChpdGVyYXRlX2dldF96ZXJvdGFibGVzX3NpemUsICZyZXQpOworCisgIHJl dHVybiByZXQ7Cit9CisjZW5kaWYKKwogc3RhdGljIGdydWJfZXJyX3QKIGdydWJfZnJlZWJzZF9i b290ICh2b2lkKQogewpAQCAtNjA0LDYgKzY5OSwzNCBAQCBncnViX2ZyZWVic2RfYm9vdCAodm9p ZCkKIAogICBzdHJ1Y3QgZ3J1Yl9lbnZfdmFyICp2YXI7CiAKKyAgZXJyID0gZ3J1Yl9ic2Rfc2V0 dXBfdmlkZW8gKCk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZ3J1Yl9wcmludF9lcnJvciAo KTsKKyAgICAgIGdydWJfcHV0c18gKE5fKCJCb290aW5nIGluIGJsaW5kIG1vZGUiKSk7CisgICAg ICBncnViX2Vycm5vID0gR1JVQl9FUlJfTk9ORTsKKyAgICB9CisKKyNpZmRlZiBHUlVCX01BQ0hJ TkVfRUZJCisgIGVyciA9IGdydWJfYnNkX2FkZF9rZXJuZWxfbWV0YSAoRlJFRUJTRF9NT0RJTkZP X01FVEFEQVRBIHwKKwkJCQkgIEZSRUVCU0RfTU9ESU5GT01EX0ZXX0hBTkRMRSwKKwkJCQkgICZn cnViX2VmaV9zeXN0ZW1fdGFibGUsCisJCQkJICBzaXplb2YgKGdydWJfZWZpX3N5c3RlbV90YWJs ZSkpOworICBpZiAoZXJyKQorICAgIHJldHVybiBlcnI7CisKKyAgZ3J1Yl91aW50MzJfdCBlZmlf bW1hcF9zaXplID0gMDsKKworICBlZmlfbW1hcF9zaXplID0gMiAqIGdydWJfZWZpX2ZpbmRfbW1h cF9zaXplICgpOworCisgIGVyciA9IGdydWJfYnNkX2FkZF9rZXJuZWxfbWV0YSAoRlJFRUJTRF9N T0RJTkZPX01FVEFEQVRBIHwgRlJFRUJTRF9NT0RJTkZPTURfRUZJX01BUCAsCisJCQkJICBOVUxM LAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBncnViX2ZyZWVic2RfYnRpbmZvX2VmaV9tYXBfaGVhZGVy KQorCQkJCSAgKyBlZmlfbW1hcF9zaXplKTsKKyAgaWYgKGVycikKKyAgICByZXR1cm4gZXJyOwor I2VuZGlmCisKICAgZ3J1Yl9tZW1zZXQgKCZiaSwgMCwgc2l6ZW9mIChiaSkpOwogICBiaS52ZXJz aW9uID0gRlJFRUJTRF9CT09USU5GT19WRVJTSU9OOwogICBiaS5sZW5ndGggPSBzaXplb2YgKGJp KTsKQEAgLTYxOSw2ICs3NDIsMzAgQEAgZ3J1Yl9mcmVlYnNkX2Jvb3QgKHZvaWQpCiAJcF9zaXpl ICs9IGdydWJfc3RybGVuICh2YXItPnZhbHVlKSArIDE7CiAgICAgICB9CiAKKyAgZ3J1Yl9hZGRy X3QgcnNkcCA9IChncnViX2FkZHJfdCkgZ3J1Yl9hY3BpX2dldF9yc2RwdjIoKSA/OiAoZ3J1Yl9h ZGRyX3QpIGdydWJfYWNwaV9nZXRfcnNkcHYxKCk7CisgIGdydWJfYWRkcl90IHNtYmlvcyA9IChn cnViX2FkZHJfdCkgZ3J1Yl9zbWJpb3NfZ2V0X2VwczMoKSA/OiAoZ3J1Yl9hZGRyX3QpIGdydWJf c21iaW9zX2dldF9lcHMoKTsKKyAgY2hhciByc2RwX2J1ZltzaXplb2YoImFjcGkucnNkcD0iKSAr IDIyXTsKKyAgY2hhciBoaW50X3JzZHBfYnVmW3NpemVvZigiaGludC5hY3BpLjAucnNkcD0iKSAr IDIyXTsKKyAgY2hhciBzbWJpb3NfYnVmW3NpemVvZigiaGludC5zbWJpb3MuMC5tZW09IikgKyAy Ml07CisKKyAgZ3J1Yl9tZW1zZXQgKHJzZHBfYnVmLCAwLCBzaXplb2YocnNkcF9idWYpKTsKKyAg Z3J1Yl9tZW1zZXQgKGhpbnRfcnNkcF9idWYsIDAsIHNpemVvZihoaW50X3JzZHBfYnVmKSk7Cisg IGdydWJfbWVtc2V0IChzbWJpb3NfYnVmLCAwLCBzaXplb2Yoc21iaW9zX2J1ZikpOworICBpZiAo cnNkcCkKKyAgICB7CisgICAgICBncnViX3NucHJpbnRmKHJzZHBfYnVmLCBzaXplb2YocnNkcF9i dWYpIC0gMiwgImFjcGkucnNkcD0weCVsbHgiLCAodW5zaWduZWQgbG9uZyBsb25nKSByc2RwKTsK KyAgICAgIHBfc2l6ZSArPSBncnViX3N0cmxlbiAocnNkcF9idWYpICsgMTsKKyAgICAgIC8vIHBy ZS0xMCBGcmVlQlNECisgICAgICBncnViX3NucHJpbnRmKGhpbnRfcnNkcF9idWYsIHNpemVvZiho aW50X3JzZHBfYnVmKSAtIDIsICJoaW50LmFjcGkuMC5yc2RwPTB4JWxseCIsICh1bnNpZ25lZCBs b25nIGxvbmcpIHJzZHApOworICAgICAgcF9zaXplICs9IGdydWJfc3RybGVuIChoaW50X3JzZHBf YnVmKSArIDE7CisgICAgfQorCisgIGlmIChzbWJpb3MpCisgICAgeworICAgICAgZ3J1Yl9zbnBy aW50ZihzbWJpb3NfYnVmLCBzaXplb2Yoc21iaW9zX2J1ZikgLSAyLCAiaGludC5zbWJpb3MuMC5t ZW09MHglbGx4IiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgc21iaW9zKTsKKyAgICAgIHBfc2l6ZSAr PSBncnViX3N0cmxlbiAoc21iaW9zX2J1ZikgKyAxOworICAgIH0KKwogICBpZiAocF9zaXplKQog ICAgIHBfc2l6ZSA9IEFMSUdOX1BBR0UgKGtlcm5fZW5kICsgcF9zaXplICsgMSkgLSBrZXJuX2Vu ZDsKIApAQCAtNjYwLDEzICs4MDcsMjYgQEAgZ3J1Yl9mcmVlYnNkX2Jvb3QgKHZvaWQpCiAgIEZP Ul9TT1JURURfRU5WICh2YXIpCiAgICAgaWYgKChncnViX21lbWNtcCAodmFyLT5uYW1lLCAia0Zy ZWVCU0QuIiwgc2l6ZW9mKCJrRnJlZUJTRC4iKSAtIDEpID09IDApICYmICh2YXItPm5hbWVbc2l6 ZW9mKCJrRnJlZUJTRC4iKSAtIDFdKSkKICAgICAgIHsKLQlncnViX3N0cmNweSAoKGNoYXIgKikg cCwgJnZhci0+bmFtZVtzaXplb2YoImtGcmVlQlNELiIpIC0gMV0pOwotCXAgKz0gZ3J1Yl9zdHJs ZW4gKChjaGFyICopIHApOwotCSoocCsrKSA9ICc9JzsKLQlncnViX3N0cmNweSAoKGNoYXIgKikg cCwgdmFyLT52YWx1ZSk7Ci0JcCArPSBncnViX3N0cmxlbiAoKGNoYXIgKikgcCkgKyAxOworCXAg PSAoZ3J1Yl91aW50OF90ICopIGdydWJfc3RwY3B5ICgoY2hhciAqKSBwLCAmdmFyLT5uYW1lW3Np emVvZigia0ZyZWVCU0QuIikgLSAxXSk7CisJKnArKyA9ICc9JzsKKwlwID0gKGdydWJfdWludDhf dCAqKSBncnViX3N0cGNweSAoKGNoYXIgKikgcCwgdmFyLT52YWx1ZSk7CisJKnArKyA9ICdcMCc7 CiAgICAgICB9CiAKKyAgaWYgKHJzZHApCisgICAgeworICAgICAgcCA9IChncnViX3VpbnQ4X3Qg KikgZ3J1Yl9zdHBjcHkgKChjaGFyICopIHAsIHJzZHBfYnVmKTsKKyAgICAgICpwKysgPSAnXDAn OworICAgICAgcCA9IChncnViX3VpbnQ4X3QgKikgZ3J1Yl9zdHBjcHkgKChjaGFyICopIHAsIGhp bnRfcnNkcF9idWYpOworICAgICAgKnArKyA9ICdcMCc7CisgICAgfQorCisgIGlmIChzbWJpb3Mp CisgICAgeworICAgICAgcCA9IChncnViX3VpbnQ4X3QgKikgZ3J1Yl9zdHBjcHkgKChjaGFyICop IHAsIHNtYmlvc19idWYpOworICAgICAgKnArKyA9ICdcMCc7CisgICAgfQorCiAgIGlmIChwICE9 IHAwKQogICAgIHsKICAgICAgICoocCsrKSA9IDA7CkBAIC02NzQsNiArODM0LDkgQEAgZ3J1Yl9m cmVlYnNkX2Jvb3QgKHZvaWQpCiAgICAgICBiaS5lbnZpcm9ubWVudCA9IHBfdGFyZ2V0OwogICAg IH0KIAorICBzdHJ1Y3QgZnJlZWJzZF90YWdfaGVhZGVyICplZmlfbWVtbWFwID0gMDsKKyAgZ3J1 Yl91aW50OF90ICpwX3RhZ19zdGFydCA9IHAsICpwX3RhZ19lbmQgPSBwOworCiAgIGlmIChpc19l bGZfa2VybmVsKQogICAgIHsKICAgICAgIGdydWJfdWludDhfdCAqcF90YWcgPSBwOwpAQCAtNjgz LDYgKzg0Niw4IEBAIGdydWJfZnJlZWJzZF9ib290ICh2b2lkKQogCXsKIAkgIHN0cnVjdCBmcmVl YnNkX3RhZ19oZWFkZXIgKmhlYWQKIAkgICAgPSAoc3RydWN0IGZyZWVic2RfdGFnX2hlYWRlciAq KSBwX3RhZzsKKwkgIGlmICh0YWctPnR5cGUgPT0gKEZSRUVCU0RfTU9ESU5GT01EX0VGSV9NQVAg fCBGUkVFQlNEX01PRElORk9fTUVUQURBVEEpKQorCSAgICBlZmlfbWVtbWFwID0gaGVhZDsKIAkg IGhlYWQtPnR5cGUgPSB0YWctPnR5cGU7CiAJICBoZWFkLT5sZW4gPSB0YWctPmxlbjsKIAkgIHBf dGFnICs9IHNpemVvZiAoc3RydWN0IGZyZWVic2RfdGFnX2hlYWRlcik7CkBAIC03MTQsNDYgKzg3 OSw3NyBAQCBncnViX2ZyZWVic2RfYm9vdCAodm9pZCkKIAkgICAgICBicmVhazsKIAkgICAgfQog CSAgcF90YWcgKz0gdGFnLT5sZW47Ci0JICBwX3RhZyA9IEFMSUdOX1ZBUiAocF90YWcgLSBwKSAr IHA7CisJICBwX3RhZyA9IEFMSUdOX1ZBUiAocF90YWcgLSBwX3RhZ19zdGFydCkgKyBwX3RhZ19z dGFydDsKIAl9CiAKLSAgICAgIGJpLnRhZ3MgPSAocCAtIHAwKSArIHBfdGFyZ2V0OworICAgICAg cF90YWdfZW5kID0gcF90YWc7CisgICAgICBiaS50YWdzID0gKHBfdGFnX3N0YXJ0IC0gcDApICsg cF90YXJnZXQ7CiAKICAgICAgIHAgPSAoQUxJR05fUEFHRSAoKHBfdGFnIC0gcDApICsgcF90YXJn ZXQpIC0gcF90YXJnZXQpICsgcDA7CiAgICAgfQogCiAgIGJpLmtlcm5fZW5kID0ga2Vybl9lbmQ7 CiAKLSAgZ3J1Yl92aWRlb19zZXRfbW9kZSAoInRleHQiLCAwLCAwKTsKKyAgZ3J1Yl9hZGRyX3Qg c3RhY2tfdGFyZ2V0OworICBncnViX3VpbnQzMl90ICpzdGFjazsKKyAgZ3J1Yl9yZWxvY2F0b3Jf Y2h1bmtfdCBjaDsKIAotICBpZiAoaXNfNjRiaXQpCi0gICAgewotICAgICAgc3RydWN0IGdydWJf cmVsb2NhdG9yNjRfc3RhdGUgc3RhdGUgPSB7MH07Ci0gICAgICBncnViX3VpbnQ4X3QgKnBhZ2V0 YWJsZTsKLSAgICAgIGdydWJfdWludDMyX3QgKnN0YWNrOwotICAgICAgZ3J1Yl9hZGRyX3Qgc3Rh Y2tfdGFyZ2V0OworICBlcnIgPSBncnViX3JlbG9jYXRvcl9hbGxvY19jaHVua19hbGlnbiAocmVs b2NhdG9yLCAmY2gsCisJCQkJCSAgMHgxMDAwMCwgMHg5MDAwMCwKKwkJCQkJICAoaXNfNjRiaXQg PyAzIDogOSkgKiBzaXplb2YgKGdydWJfdWludDMyX3QpCisJCQkJCSAgKyBzaXplb2YgKGJpKSwg NCwKKwkJCQkJICBHUlVCX1JFTE9DQVRPUl9QUkVGRVJFTkNFX05PTkUsCisJCQkJCSAgMCk7CiAK LSAgICAgIHsKLQlncnViX3JlbG9jYXRvcl9jaHVua190IGNoOwotCWVyciA9IGdydWJfcmVsb2Nh dG9yX2FsbG9jX2NodW5rX2FsaWduIChyZWxvY2F0b3IsICZjaCwKLQkJCQkJCTB4MTAwMDAsIDB4 OTAwMDAsCi0JCQkJCQkzICogc2l6ZW9mIChncnViX3VpbnQzMl90KQotCQkJCQkJKyBzaXplb2Yg KGJpKSwgNCwKLQkJCQkJCUdSVUJfUkVMT0NBVE9SX1BSRUZFUkVOQ0VfTk9ORSwKLQkJCQkJCTAp OwotCWlmIChlcnIpCi0JICByZXR1cm4gZXJyOwotCXN0YWNrID0gZ2V0X3ZpcnR1YWxfY3VycmVu dF9hZGRyZXNzIChjaCk7Ci0Jc3RhY2tfdGFyZ2V0ID0gZ2V0X3BoeXNpY2FsX3RhcmdldF9hZGRy ZXNzIChjaCk7Ci0gICAgICB9CisgIGlmIChlcnIpCisgICAgcmV0dXJuIGVycjsKKyAgc3RhY2sg PSBnZXRfdmlydHVhbF9jdXJyZW50X2FkZHJlc3MgKGNoKTsKKyAgc3RhY2tfdGFyZ2V0ID0gZ2V0 X3BoeXNpY2FsX3RhcmdldF9hZGRyZXNzIChjaCk7CiAKICNpZmRlZiBHUlVCX01BQ0hJTkVfRUZJ Ci0gICAgICBlcnIgPSBncnViX2VmaV9maW5pc2hfYm9vdF9zZXJ2aWNlcyAoTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgICBpZiAoZXJyKQotCXJldHVybiBlcnI7CisgIGdydWJf ZWZpX3VpbnRuX3QgZWZpX21tYXBfc2l6ZV9vdXQgPSBlZmlfbW1hcF9zaXplOworICBncnViX2Vm aV91aW50bl90IGVmaV9kZXNjX3NpemU7CisgIGdydWJfZWZpX3VpbnQzMl90IGVmaV9kZXNjX3Zl cnNpb247CisgIHN0cnVjdCBncnViX2ZyZWVic2RfYnRpbmZvX2VmaV9tYXBfaGVhZGVyICplZmlf bW1hcCA9IChzdHJ1Y3QgZ3J1Yl9mcmVlYnNkX2J0aW5mb19lZmlfbWFwX2hlYWRlciAqKSAoZWZp X21lbW1hcCArIDEpOworICBncnViX2VmaV9tZW1vcnlfZGVzY3JpcHRvcl90ICplZmlkZXNjcyA9 IChncnViX2VmaV9tZW1vcnlfZGVzY3JpcHRvcl90ICopIChlZmlfbWVtbWFwID8gZWZpX21tYXAg KyAxIDogMCk7CisKKyAgZXJyID0gZ3J1Yl9lZmlfZmluaXNoX2Jvb3Rfc2VydmljZXMgKCZlZmlf bW1hcF9zaXplX291dCwgZWZpZGVzY3MsIE5VTEwsICZlZmlfZGVzY19zaXplLCAmZWZpX2Rlc2Nf dmVyc2lvbik7CisgIGlmIChlcnIpCisgICAgcmV0dXJuIGVycjsKKworICBpZiAoZWZpX21lbW1h cCkKKyAgICB7CisgICAgICAvKiBEcmFnb25GbHlCU0QgbmVlZHMgdGhlbSBzb3J0ZWQuICAqLwor ICAgICAgZ3J1Yl9lZmlfc29ydF9tZW1vcnlfbWFwKGVmaWRlc2NzLCBlZmlfZGVzY19zaXplLCBl ZmlfbW1hcF9zaXplX291dCk7CisgICAgICAvKiBOb3dhZGF5cyB0aGUgdGFibGVzIGF0IDAgZG9u J3QgY29udGFpbiBhbnl0aGluZyBpbXBvcnRhbnQgYnV0CisJIERyYWdvbkZseUJTRCBuZWVkcyB0 aGUgbWVtb3J5IGF0IDAgZm9yIG93biBuZWVkcy4KKyAgICAgICAqLworICAgICAgaWYgKGVmaV9t bWFwX3NpemVfb3V0ID49IHNpemVvZihncnViX2VmaV9tZW1vcnlfZGVzY3JpcHRvcl90KSAmJiBl ZmlkZXNjcy0+cGh5c2ljYWxfc3RhcnQgPT0gMAorCSAgJiYgZWZpZGVzY3MtPnR5cGUgPT0gR1JV Ql9FRklfUkVTRVJWRURfTUVNT1JZX1RZUEUgJiYgZWZpZGVzY3MtPm51bV9wYWdlcyA8PSAoZ3J1 Yl9jb3JlYm9vdF9nZXRfemVyb3RhYmxlc19zaXplKCkgPj4gR1JVQl9FRklfUEFHRV9TSElGVCkp CisJeworCSAgZWZpZGVzY3MtPnR5cGUgPSBHUlVCX0VGSV9DT05WRU5USU9OQUxfTUVNT1JZOwor CX0KKyAgICAgIGdydWJfc2l6ZV90IG5ld2xlbiA9IHNpemVvZihzdHJ1Y3QgZ3J1Yl9mcmVlYnNk X2J0aW5mb19lZmlfbWFwX2hlYWRlcikgKyBlZmlfbW1hcF9zaXplX291dDsKKyAgICAgIGdydWJf dWludDhfdCAqb2xkX25leHRfdGFnID0gQUxJR05fVkFSICgoZ3J1Yl91aW50OF90ICopIGVmaV9t bWFwICsgZWZpX21lbW1hcC0+bGVuIC0gcF90YWdfc3RhcnQpICsgcF90YWdfc3RhcnQ7CisgICAg ICBncnViX3VpbnQ4X3QgKm5ld19uZXh0X3RhZyA9IEFMSUdOX1ZBUiAoKGdydWJfdWludDhfdCAq KSBlZmlfbW1hcCArIG5ld2xlbiAtIHBfdGFnX3N0YXJ0KSArIHBfdGFnX3N0YXJ0OworICAgICAg ZWZpX21lbW1hcC0+bGVuID0gbmV3bGVuOworICAgICAgaWYgKG5ld19uZXh0X3RhZyAhPSBvbGRf bmV4dF90YWcpCisJZ3J1Yl9tZW1tb3ZlKG5ld19uZXh0X3RhZywgb2xkX25leHRfdGFnLCBwX3Rh Z19lbmQgLSBvbGRfbmV4dF90YWcpOworICAgICAgcF90YWdfZW5kICs9IChuZXdfbmV4dF90YWcg LSBvbGRfbmV4dF90YWcpOworICAgICAgZWZpX21tYXAtPmRlc2NyaXB0b3JfdmVyc2lvbiA9IGVm aV9kZXNjX3ZlcnNpb247CisgICAgICBlZmlfbW1hcC0+ZGVzY3JpcHRvcl9zaXplID0gZWZpX2Rl c2Nfc2l6ZTsKKyAgICAgIGVmaV9tbWFwLT5tZW1vcnlfc2l6ZSA9IGVmaV9tbWFwX3NpemVfb3V0 OworICAgIH0KKyNlbHNlCisgICh2b2lkKSBlZmlfbWVtbWFwOworICAodm9pZCkgcF90YWdfZW5k OwogI2VuZGlmCiAKLSAgICAgIHBhZ2V0YWJsZSA9IHA7CisgIGlmIChpc182NGJpdCkKKyAgICB7 CisgICAgICBzdHJ1Y3QgZ3J1Yl9yZWxvY2F0b3I2NF9zdGF0ZSBzdGF0ZSA9IHswfTsKKyAgICAg IGdydWJfdWludDhfdCAqcGFnZXRhYmxlID0gcDsKKwogICAgICAgZmlsbF9ic2Q2NF9wYWdldGFi bGUgKHBhZ2V0YWJsZSwgKHBhZ2V0YWJsZSAtIHAwKSArIHBfdGFyZ2V0KTsKIAogICAgICAgc3Rh dGUuY3IzID0gKHBhZ2V0YWJsZSAtIHAwKSArIHBfdGFyZ2V0OwpAQCAtNzY4LDI4ICs5NjQsNiBA QCBncnViX2ZyZWVic2RfYm9vdCAodm9pZCkKICAgZWxzZQogICAgIHsKICAgICAgIHN0cnVjdCBn cnViX3JlbG9jYXRvcjMyX3N0YXRlIHN0YXRlID0gezB9OwotICAgICAgZ3J1Yl91aW50MzJfdCAq c3RhY2s7Ci0gICAgICBncnViX2FkZHJfdCBzdGFja190YXJnZXQ7Ci0KLSAgICAgIHsKLQlncnVi X3JlbG9jYXRvcl9jaHVua190IGNoOwotCWVyciA9IGdydWJfcmVsb2NhdG9yX2FsbG9jX2NodW5r X2FsaWduIChyZWxvY2F0b3IsICZjaCwKLQkJCQkJCTB4MTAwMDAsIDB4OTAwMDAsCi0JCQkJCQk5 ICogc2l6ZW9mIChncnViX3VpbnQzMl90KQotCQkJCQkJKyBzaXplb2YgKGJpKSwgNCwKLQkJCQkJ CUdSVUJfUkVMT0NBVE9SX1BSRUZFUkVOQ0VfTk9ORSwKLQkJCQkJCTApOwotCWlmIChlcnIpCi0J ICByZXR1cm4gZXJyOwotCXN0YWNrID0gZ2V0X3ZpcnR1YWxfY3VycmVudF9hZGRyZXNzIChjaCk7 Ci0Jc3RhY2tfdGFyZ2V0ID0gZ2V0X3BoeXNpY2FsX3RhcmdldF9hZGRyZXNzIChjaCk7Ci0gICAg ICB9Ci0KLSNpZmRlZiBHUlVCX01BQ0hJTkVfRUZJCi0gICAgICBlcnIgPSBncnViX2VmaV9maW5p c2hfYm9vdF9zZXJ2aWNlcyAoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgICBp ZiAoZXJyKQotCXJldHVybiBlcnI7Ci0jZW5kaWYKIAogICAgICAgZ3J1Yl9tZW1jcHkgKCZzdGFj a1s5XSwgJmJpLCBzaXplb2YgKGJpKSk7CiAgICAgICBzdGF0ZS5laXAgPSBlbnRyeTsKQEAgLTgy NSw2ICs5OTksMzEgQEAgZ3J1Yl9vcGVuYnNkX2Jvb3QgKHZvaWQpCiAgIGlmIChlcnIpCiAgICAg cmV0dXJuIGVycjsKIAorI2lmZGVmIEdSVUJfTUFDSElORV9FRkkKKyAgZ3J1Yl9tZW1zZXQoJm9w ZW5ic2RfZWZpX2luZm8sIDAsIHNpemVvZihvcGVuYnNkX2VmaV9pbmZvKSk7CisKKyAgZXJyID0g Z3J1Yl9ic2Rfc2V0dXBfdmlkZW8gKCk7CisgIGlmIChlcnIpCisgICAgeworICAgICAgZ3J1Yl9w cmludF9lcnJvciAoKTsKKyAgICAgIGdydWJfcHV0c18gKE5fKCJCb290aW5nIGluIGJsaW5kIG1v ZGUiKSk7CisgICAgICBncnViX2Vycm5vID0gR1JVQl9FUlJfTk9ORTsKKyAgICB9CisKKyAgb3Bl bmJzZF9lZmlfaW5mby5jb25maWdfYWNwaSA9IChncnViX2FkZHJfdCkgZ3J1Yl9hY3BpX2dldF9y c2RwdjIoKSA/OiAoZ3J1Yl9hZGRyX3QpIGdydWJfYWNwaV9nZXRfcnNkcHYxKCk7CisgIG9wZW5i c2RfZWZpX2luZm8uY29uZmlnX3NtYmlvcyA9IChncnViX2FkZHJfdCkgZ3J1Yl9zbWJpb3NfZ2V0 X2VwcygpOworICBvcGVuYnNkX2VmaV9pbmZvLnN5c3RlbV90YWJsZSA9IChncnViX2FkZHJfdCkg Z3J1Yl9lZmlfc3lzdGVtX3RhYmxlOworCisjaWZkZWYgX19hbWQ2NF9fCisgIG9wZW5ic2RfZWZp X2luZm8uZmxhZ3MgfD0gR1JVQl9PUEVOQlNEX0JPT1RBUkdfRUZJXzY0QklUOworI2VuZGlmCisK KyAgZXJyID0gZ3J1Yl9ic2RfYWRkX21ldGEgKE9QRU5CU0RfQk9PVEFSR19FRklJTkZPLCAmb3Bl bmJzZF9lZmlfaW5mbywKKwkJCSAgIHNpemVvZihvcGVuYnNkX2VmaV9pbmZvKSk7CisgIGlmIChl cnIpCisgICAgcmV0dXJuIGVycjsKKyNlbmRpZgorCiAjaWZkZWYgR1JVQl9NQUNISU5FX1BDQklP UwogICB7CiAgICAgc3RydWN0IGdydWJfYmlvc19pbnRfcmVnaXN0ZXJzIHJlZ3M7CkBAIC04NjQs MTAgKzEwNjMsMTcgQEAgZ3J1Yl9vcGVuYnNkX2Jvb3QgKHZvaWQpCiAgIH0KIAogICBidWZfdGFy Z2V0ID0gR1JVQl9CU0RfVEVNUF9CVUZGRVIgLSA5ICogc2l6ZW9mIChncnViX3VpbnQzMl90KTsK KworICBncnViX3VpbnQzMl90IGVmaV9tbWFwX3NpemUgPSAwOworCisjaWZkZWYgR1JVQl9NQUNI SU5FX0VGSQorICBlZmlfbW1hcF9zaXplID0gMiAqIGdydWJfZWZpX2ZpbmRfbW1hcF9zaXplICgp OworI2VuZGlmCisKICAgewogICAgIGdydWJfcmVsb2NhdG9yX2NodW5rX3QgY2g7CiAgICAgZXJy ID0gZ3J1Yl9yZWxvY2F0b3JfYWxsb2NfY2h1bmtfYWRkciAocmVsb2NhdG9yLCAmY2gsIGJ1Zl90 YXJnZXQsCi0JCQkJCSAgIHRhZ19idWZfbGVuCisJCQkJCSAgIHRhZ19idWZfbGVuICsgZWZpX21t YXBfc2l6ZQogCQkJCQkgICArIHNpemVvZiAoc3RydWN0IGdydWJfb3BlbmJzZF9ib290YXJncykK IAkJCQkJICAgKyA5ICogc2l6ZW9mIChncnViX3VpbnQzMl90KSk7CiAgICAgaWYgKGVycikKQEAg LTg3Niw3ICsxMDgyLDEwIEBAIGdydWJfb3BlbmJzZF9ib290ICh2b2lkKQogICB9CiAKICAgc3Rh Y2sgPSAoZ3J1Yl91aW50MzJfdCAqKSBidWYwOwotICBhcmcwID0gY3VyYXJnID0gc3RhY2sgKyA5 OworICB2b2lkICplZmlfbW1hcF9idWYgPSBzdGFjayArIDk7CisgIGFyZzAgPSBjdXJhcmcgPSAo Z3J1Yl91aW50OF90ICopIGVmaV9tbWFwX2J1ZiArIGVmaV9tbWFwX3NpemU7CisKKyAgc3RydWN0 IGdydWJfb3BlbmJzZF9ib290YXJnX2VmaWluZm8gKm9wZW5ic2RfZWZpX2luZm9fcHRyID0gMDsK IAogICB7CiAgICAgc3RydWN0IGJzZF90YWcgKnRhZzsKQEAgLTg4OSw2ICsxMDk4LDggQEAgZ3J1 Yl9vcGVuYnNkX2Jvb3QgKHZvaWQpCiAJaGVhZC0+YmFfc2l6ZSA9IHRhZy0+bGVuICsgc2l6ZW9m ICgqaGVhZCk7CiAJY3VyYXJnID0gaGVhZCArIDE7CiAJZ3J1Yl9tZW1jcHkgKGN1cmFyZywgdGFn LT5kYXRhLCB0YWctPmxlbik7CisJaWYgKHRhZy0+dHlwZSA9PSBPUEVOQlNEX0JPT1RBUkdfRUZJ SU5GTykKKwkgIG9wZW5ic2RfZWZpX2luZm9fcHRyID0gY3VyYXJnOwogCWN1cmFyZyA9IChncnVi X3VpbnQ4X3QgKikgY3VyYXJnICsgdGFnLT5sZW47CiAJaGVhZC0+YmFfbmV4dCA9IChncnViX3Vp bnQ4X3QgKikgY3VyYXJnIC0gKGdydWJfdWludDhfdCAqKSBidWYwCiAJICArIGJ1Zl90YXJnZXQ7 CkBAIC04OTksMTIgKzExMTAsMjUgQEAgZ3J1Yl9vcGVuYnNkX2Jvb3QgKHZvaWQpCiAgICAgaGVh ZC0+YmFfbmV4dCA9IDA7CiAgIH0KIAorI2lmbmRlZiBHUlVCX01BQ0hJTkVfRUZJCiAgIGdydWJf dmlkZW9fc2V0X21vZGUgKCJ0ZXh0IiwgMCwgMCk7CisjZW5kaWYKIAogI2lmZGVmIEdSVUJfTUFD SElORV9FRkkKLSAgZXJyID0gZ3J1Yl9lZmlfZmluaXNoX2Jvb3Rfc2VydmljZXMgKE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwpOworICBncnViX2VmaV91aW50bl90IGVmaV9tbWFwX3NpemVf b3V0ID0gZWZpX21tYXBfc2l6ZTsKKyAgZ3J1Yl9lZmlfdWludG5fdCBlZmlfZGVzY19zaXplOwor ICBncnViX2VmaV91aW50MzJfdCBlZmlfZGVzY192ZXJzaW9uOworCisgIGVyciA9IGdydWJfZWZp X2ZpbmlzaF9ib290X3NlcnZpY2VzICgmZWZpX21tYXBfc2l6ZV9vdXQsIGVmaV9tbWFwX2J1Ziwg TlVMTCwgJmVmaV9kZXNjX3NpemUsICZlZmlfZGVzY192ZXJzaW9uKTsKICAgaWYgKGVycikKICAg ICByZXR1cm4gZXJyOworCisgIG9wZW5ic2RfZWZpX2luZm9fcHRyLT5tbWFwX2Rlc2NfdmVyID0g ZWZpX2Rlc2NfdmVyc2lvbjsKKyAgb3BlbmJzZF9lZmlfaW5mb19wdHItPm1tYXBfZGVzY19zaXpl ID0gZWZpX2Rlc2Nfc2l6ZTsKKyAgb3BlbmJzZF9lZmlfaW5mb19wdHItPm1tYXBfc2l6ZSA9IGVm aV9tbWFwX3NpemVfb3V0OworICBvcGVuYnNkX2VmaV9pbmZvX3B0ci0+bW1hcF9zdGFydCA9ICgo Z3J1Yl91aW50OF90ICopIGVmaV9tbWFwX2J1ZiAtIChncnViX3VpbnQ4X3QgKikgYnVmMCkgKyBi dWZfdGFyZ2V0OworI2Vsc2UKKyAgKHZvaWQpIG9wZW5ic2RfZWZpX2luZm9fcHRyOwogI2VuZGlm CiAKICAgc3RhdGUuZWlwID0gZW50cnk7CkBAIC05MjQsMTIgKzExNDgsODggQEAgZ3J1Yl9vcGVu YnNkX2Jvb3QgKHZvaWQpCiB9CiAKIHN0YXRpYyBncnViX2Vycl90Ci1ncnViX25ldGJzZF9zZXR1 cF92aWRlbyAodm9pZCkKK2dydWJfbmV0YnNkX2FkZF9mcmFtZWJ1ZmVyX2luZm8oY29uc3Qgc3Ry dWN0IGdydWJfdmlkZW9fbW9kZV9pbmZvICptb2RlX2luZm8sCisJCQkgICAgICAgdm9pZCAqZnJh bWVidWZmZXIpIHsKKyAgc3RydWN0IGdydWJfbmV0YnNkX2J0aW5mb19mcmFtZWJ1ZiBwYXJhbXMg PSB7MH07CisgIHBhcmFtcy53aWR0aCA9IG1vZGVfaW5mby0+d2lkdGg7CisgIHBhcmFtcy5oZWln aHQgPSBtb2RlX2luZm8tPmhlaWdodDsKKyAgcGFyYW1zLmJwcCA9IG1vZGVfaW5mby0+YnBwOwor ICBwYXJhbXMucGl0Y2ggPSBtb2RlX2luZm8tPnBpdGNoOworICBwYXJhbXMuZmxhZ3MgPSAwOwor CisgIHBhcmFtcy5mYmFkZHIgPSAoZ3J1Yl9hZGRyX3QpIGZyYW1lYnVmZmVyOworCisgIHBhcmFt cy5yZWRfbWFza19zaXplID0gbW9kZV9pbmZvLT5yZWRfbWFza19zaXplOworICBwYXJhbXMucmVk X2ZpZWxkX3BvcyA9IG1vZGVfaW5mby0+cmVkX2ZpZWxkX3BvczsKKyAgcGFyYW1zLmdyZWVuX21h c2tfc2l6ZSA9IG1vZGVfaW5mby0+Z3JlZW5fbWFza19zaXplOworICBwYXJhbXMuZ3JlZW5fZmll bGRfcG9zID0gbW9kZV9pbmZvLT5ncmVlbl9maWVsZF9wb3M7CisgIHBhcmFtcy5ibHVlX21hc2tf c2l6ZSA9IG1vZGVfaW5mby0+Ymx1ZV9tYXNrX3NpemU7CisgIHBhcmFtcy5ibHVlX2ZpZWxkX3Bv cyA9IG1vZGVfaW5mby0+Ymx1ZV9maWVsZF9wb3M7CisKKyAgcmV0dXJuIGdydWJfYnNkX2FkZF9t ZXRhIChORVRCU0RfQlRJTkZPX0ZSQU1FQlVGLCAmcGFyYW1zLCBzaXplb2YgKHBhcmFtcykpOwor fQorCisjaWZkZWYgR1JVQl9NQUNISU5FX0VGSQorCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9v cGVuYnNkX2FkZF9mcmFtZWJ1ZmVyX2luZm8oY29uc3Qgc3RydWN0IGdydWJfdmlkZW9fbW9kZV9p bmZvICptb2RlX2luZm8sCisJCQkgICAgICAgdm9pZCAqZnJhbWVidWZmZXIpIHsKKyAgb3BlbmJz ZF9lZmlfaW5mby5mYl9yZWRfbWFzayA9ICgoMSA8PCBtb2RlX2luZm8tPnJlZF9tYXNrX3NpemUp IC0gMSkgPDwgbW9kZV9pbmZvLT5yZWRfZmllbGRfcG9zOworICBvcGVuYnNkX2VmaV9pbmZvLmZi X2dyZWVuX21hc2sgPSAoKDEgPDwgbW9kZV9pbmZvLT5ncmVlbl9tYXNrX3NpemUpIC0gMSkgPDwg bW9kZV9pbmZvLT5ncmVlbl9maWVsZF9wb3M7CisgIG9wZW5ic2RfZWZpX2luZm8uZmJfYmx1ZV9t YXNrID0gKCgxIDw8IG1vZGVfaW5mby0+Ymx1ZV9tYXNrX3NpemUpIC0gMSkgPDwgbW9kZV9pbmZv LT5ibHVlX2ZpZWxkX3BvczsKKyAgb3BlbmJzZF9lZmlfaW5mby5mYl9yZXNlcnZlZF9tYXNrID0g KCgxTEwgPDwgbW9kZV9pbmZvLT5icHApIC0gMSkKKyAgICAmIH4ob3BlbmJzZF9lZmlfaW5mby5m Yl9yZWRfbWFzayB8IG9wZW5ic2RfZWZpX2luZm8uZmJfZ3JlZW5fbWFzayB8IG9wZW5ic2RfZWZp X2luZm8uZmJfYmx1ZV9tYXNrKTsKKworICBvcGVuYnNkX2VmaV9pbmZvLmZiX2FkZHIgPSAoZ3J1 Yl9hZGRyX3QpIGZyYW1lYnVmZmVyOworICBvcGVuYnNkX2VmaV9pbmZvLmZiX3NpemUgPSBtb2Rl X2luZm8tPmhlaWdodCAqIG1vZGVfaW5mby0+cGl0Y2g7CisgIG9wZW5ic2RfZWZpX2luZm8uZmJf aGVpZ2h0ID0gbW9kZV9pbmZvLT5oZWlnaHQ7CisgIG9wZW5ic2RfZWZpX2luZm8uZmJfd2lkdGgg PSBtb2RlX2luZm8tPndpZHRoOworICBvcGVuYnNkX2VmaV9pbmZvLmZiX3BpeHBzbCA9IG1vZGVf aW5mby0+cGl0Y2ggLyAobW9kZV9pbmZvLT5icHAgLyA4KTsKKworICByZXR1cm4gR1JVQl9FUlJf Tk9ORTsKK30KKyNlbmRpZgorCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9mcmVlYnNkX2FkZF9m cmFtZWJ1ZmVyX2luZm8oY29uc3Qgc3RydWN0IGdydWJfdmlkZW9fbW9kZV9pbmZvICptb2RlX2lu Zm8sCisJCQkgICAgICAgdm9pZCAqZnJhbWVidWZmZXIpIHsKKyNpZmRlZiBHUlVCX01BQ0hJTkVf RUZJCisgIHN0cnVjdCBncnViX2ZyZWVic2RfYnRpbmZvX2VmaV9mcmFtZWJ1ZiBwYXJhbXMgPSB7 MH07CisjZWxzZQorICBzdHJ1Y3QgZ3J1Yl9mcmVlYnNkX2J0aW5mb192YmVfZnJhbWVidWYgcGFy YW1zID0gezB9OworI2VuZGlmCisKKyAgcGFyYW1zLndpZHRoID0gbW9kZV9pbmZvLT53aWR0aDsK KyAgcGFyYW1zLmhlaWdodCA9IG1vZGVfaW5mby0+aGVpZ2h0OworCisgIHBhcmFtcy5mYmFkZHIg PSAoZ3J1Yl9hZGRyX3QpIGZyYW1lYnVmZmVyOworICBwYXJhbXMuZmJzaXplID0gbW9kZV9pbmZv LT5oZWlnaHQgKiBtb2RlX2luZm8tPnBpdGNoOworCisgIHBhcmFtcy5yZWRfbWFzayA9ICgoMSA8 PCBtb2RlX2luZm8tPnJlZF9tYXNrX3NpemUpIC0gMSkgPDwgbW9kZV9pbmZvLT5yZWRfZmllbGRf cG9zOworICBwYXJhbXMuZ3JlZW5fbWFzayA9ICgoMSA8PCBtb2RlX2luZm8tPmdyZWVuX21hc2tf c2l6ZSkgLSAxKSA8PCBtb2RlX2luZm8tPmdyZWVuX2ZpZWxkX3BvczsKKyAgcGFyYW1zLmJsdWVf bWFzayA9ICgoMSA8PCBtb2RlX2luZm8tPmJsdWVfbWFza19zaXplKSAtIDEpIDw8IG1vZGVfaW5m by0+Ymx1ZV9maWVsZF9wb3M7CisgIHBhcmFtcy5yZXNlcnZlZF9tYXNrID0gKCgxTEwgPDwgbW9k ZV9pbmZvLT5icHApIC0gMSkKKyAgICAmIH4ocGFyYW1zLnJlZF9tYXNrIHwgcGFyYW1zLmdyZWVu X21hc2sgfCBwYXJhbXMuYmx1ZV9tYXNrKTsKKworICBwYXJhbXMucGl0Y2ggPSBtb2RlX2luZm8t PnBpdGNoIC8gKG1vZGVfaW5mby0+YnBwIC8gOCk7CisKKyNpZmRlZiBHUlVCX01BQ0hJTkVfRUZJ CisgIHJldHVybiBncnViX2JzZF9hZGRfa2VybmVsX21ldGEgKEZSRUVCU0RfTU9ESU5GT19NRVRB REFUQSB8CisJCQkJICAgRlJFRUJTRF9NT0RJTkZPTURfRUZJX0ZCLCAmcGFyYW1zLCBzaXplb2Yg KHBhcmFtcykpOworI2Vsc2UKKyAgcGFyYW1zLmJwcCA9IG1vZGVfaW5mby0+YnBwOworCisgIHJl dHVybiBncnViX2JzZF9hZGRfa2VybmVsX21ldGEgKEZSRUVCU0RfTU9ESU5GT19NRVRBREFUQSB8 CisJCQkJICAgRlJFRUJTRF9NT0RJTkZPTURfVkJFX0ZCLCAmcGFyYW1zLCBzaXplb2YgKHBhcmFt cykpOworI2VuZGlmCit9CisKK3N0YXRpYyBncnViX2Vycl90CitncnViX2JzZF9zZXR1cF92aWRl byAodm9pZCkKIHsKICAgc3RydWN0IGdydWJfdmlkZW9fbW9kZV9pbmZvIG1vZGVfaW5mbzsKICAg dm9pZCAqZnJhbWVidWZmZXI7CiAgIGNvbnN0IGNoYXIgKm1vZGV2YXI7Ci0gIHN0cnVjdCBncnVi X25ldGJzZF9idGluZm9fZnJhbWVidWYgcGFyYW1zID0gezB9OwogICBncnViX2Vycl90IGVycjsK ICAgZ3J1Yl92aWRlb19kcml2ZXJfaWRfdCBkcml2X2lkOwogCkBAIC05NDAsMTQgKzEyNDAsMTQg QEAgZ3J1Yl9uZXRic2Rfc2V0dXBfdmlkZW8gKHZvaWQpCiAgIGlmIChtb2RldmFyICYmICptb2Rl dmFyICE9IDApCiAgICAgewogICAgICAgY2hhciAqdG1wOwotICAgICAgdG1wID0gZ3J1Yl94YXNw cmludGYgKCIlczsiIE5FVEJTRF9ERUZBVUxUX1ZJREVPX01PREUsIG1vZGV2YXIpOworICAgICAg dG1wID0gZ3J1Yl94YXNwcmludGYgKCIlczsiIEJTRF9ERUZBVUxUX1ZJREVPX01PREUsIG1vZGV2 YXIpOwogICAgICAgaWYgKCEgdG1wKQogCXJldHVybiBncnViX2Vycm5vOwogICAgICAgZXJyID0g Z3J1Yl92aWRlb19zZXRfbW9kZSAodG1wLCAwLCAwKTsKICAgICAgIGdydWJfZnJlZSAodG1wKTsK ICAgICB9CiAgIGVsc2UKLSAgICBlcnIgPSBncnViX3ZpZGVvX3NldF9tb2RlIChORVRCU0RfREVG QVVMVF9WSURFT19NT0RFLCAwLCAwKTsKKyAgICBlcnIgPSBncnViX3ZpZGVvX3NldF9tb2RlIChC U0RfREVGQVVMVF9WSURFT19NT0RFLCAwLCAwKTsKIAogICBpZiAoZXJyKQogICAgIHJldHVybiBl cnI7CkBAIC05NjEsMjEgKzEyNjEsNiBAQCBncnViX25ldGJzZF9zZXR1cF92aWRlbyAodm9pZCkK ICAgaWYgKGVycikKICAgICByZXR1cm4gZXJyOwogCi0gIHBhcmFtcy53aWR0aCA9IG1vZGVfaW5m by53aWR0aDsKLSAgcGFyYW1zLmhlaWdodCA9IG1vZGVfaW5mby5oZWlnaHQ7Ci0gIHBhcmFtcy5i cHAgPSBtb2RlX2luZm8uYnBwOwotICBwYXJhbXMucGl0Y2ggPSBtb2RlX2luZm8ucGl0Y2g7Ci0g IHBhcmFtcy5mbGFncyA9IDA7Ci0KLSAgcGFyYW1zLmZiYWRkciA9IChncnViX2FkZHJfdCkgZnJh bWVidWZmZXI7Ci0KLSAgcGFyYW1zLnJlZF9tYXNrX3NpemUgPSBtb2RlX2luZm8ucmVkX21hc2tf c2l6ZTsKLSAgcGFyYW1zLnJlZF9maWVsZF9wb3MgPSBtb2RlX2luZm8ucmVkX2ZpZWxkX3BvczsK LSAgcGFyYW1zLmdyZWVuX21hc2tfc2l6ZSA9IG1vZGVfaW5mby5ncmVlbl9tYXNrX3NpemU7Ci0g IHBhcmFtcy5ncmVlbl9maWVsZF9wb3MgPSBtb2RlX2luZm8uZ3JlZW5fZmllbGRfcG9zOwotICBw YXJhbXMuYmx1ZV9tYXNrX3NpemUgPSBtb2RlX2luZm8uYmx1ZV9tYXNrX3NpemU7Ci0gIHBhcmFt cy5ibHVlX2ZpZWxkX3BvcyA9IG1vZGVfaW5mby5ibHVlX2ZpZWxkX3BvczsKLQogI2lmZGVmIEdS VUJfTUFDSElORV9QQ0JJT1MKICAgLyogVkVTQSBwYWNrZWQgbW9kZXMgbWF5IGNvbWUgd2l0aCB6 ZXJvZWQgbWFzayBzaXplcywgd2hpY2ggbmVlZAogICAgICB0byBiZSBzZXQgaGVyZSBhY2NvcmRp bmcgdG8gREFDIFBhbGV0dGUgd2lkdGguICBJZiB3ZSBkb24ndCwKQEAgLTk5NiwxMiArMTI4MSwy MCBAQCBncnViX25ldGJzZF9zZXR1cF92aWRlbyAodm9pZCkKIAkvKiA2IGlzIGRlZmF1bHQgYWZ0 ZXIgbW9kZSByZXNldC4gICovCiAJd2lkdGggPSA2OwogCi0gICAgICBwYXJhbXMucmVkX21hc2tf c2l6ZSA9IHBhcmFtcy5ncmVlbl9tYXNrX3NpemUKLQk9IHBhcmFtcy5ibHVlX21hc2tfc2l6ZSA9 IHdpZHRoOworICAgICAgbW9kZV9pbmZvLnJlZF9tYXNrX3NpemUgPSBtb2RlX2luZm8uZ3JlZW5f bWFza19zaXplCisJPSBtb2RlX2luZm8uYmx1ZV9tYXNrX3NpemUgPSB3aWR0aDsKICAgICB9CiAj ZW5kaWYKIAotICBlcnIgPSBncnViX2JzZF9hZGRfbWV0YSAoTkVUQlNEX0JUSU5GT19GUkFNRUJV RiwgJnBhcmFtcywgc2l6ZW9mIChwYXJhbXMpKTsKKyAgaWYgKGtlcm5lbF90eXBlID09IEtFUk5F TF9UWVBFX0ZSRUVCU0QpCisgICAgcmV0dXJuIGdydWJfZnJlZWJzZF9hZGRfZnJhbWVidWZlcl9p bmZvKCZtb2RlX2luZm8sIGZyYW1lYnVmZmVyKTsKKyAgZWxzZSBpZiAoa2VybmVsX3R5cGUgPT0g S0VSTkVMX1RZUEVfTkVUQlNEKQorICAgIHJldHVybiBncnViX25ldGJzZF9hZGRfZnJhbWVidWZl cl9pbmZvKCZtb2RlX2luZm8sIGZyYW1lYnVmZmVyKTsKKyNpZmRlZiBHUlVCX01BQ0hJTkVfRUZJ CisgIGVsc2UgaWYgKGtlcm5lbF90eXBlID09IEtFUk5FTF9UWVBFX09QRU5CU0QpCisgICAgcmV0 dXJuIGdydWJfb3BlbmJzZF9hZGRfZnJhbWVidWZlcl9pbmZvKCZtb2RlX2luZm8sIGZyYW1lYnVm ZmVyKTsKKyNlbmRpZgorCiAgIHJldHVybiBlcnI7CiB9CiAKQEAgLTExNDYsNyArMTQzOSw3IEBA IGdydWJfbmV0YnNkX2Jvb3QgKHZvaWQpCiAgIGlmIChlcnIpCiAgICAgcmV0dXJuIGVycjsKIAot ICBlcnIgPSBncnViX25ldGJzZF9zZXR1cF92aWRlbyAoKTsKKyAgZXJyID0gZ3J1Yl9ic2Rfc2V0 dXBfdmlkZW8gKCk7CiAgIGlmIChlcnIpCiAgICAgewogICAgICAgZ3J1Yl9wcmludF9lcnJvciAo KTsKQEAgLTExNTksMTEgKzE0NTIsMjkgQEAgZ3J1Yl9uZXRic2RfYm9vdCAodm9pZCkKICAgICBy ZXR1cm4gZXJyOwogCiAjaWZkZWYgR1JVQl9NQUNISU5FX0VGSQorICBzdHJ1Y3QgZ3J1Yl9uZXRi c2RfYnRpbmZvX2VmaSBlZmlfaW5mbzsKKyAgZ3J1Yl9tZW1zZXQoJmVmaV9pbmZvLCAwLCBzaXpl b2YoZWZpX2luZm8pKTsKKyAgZWZpX2luZm8ucGFfc3lzdGJsID0gKGdydWJfYWRkcl90KSBncnVi X2VmaV9zeXN0ZW1fdGFibGU7CisjaWZkZWYgX19pMzg2X18KKyAgZWZpX2luZm8uZmxhZ3MgfD0g R1JVQl9ORVRCU0RfQklfRUZJXzMyQklUOworI2VuZGlmCiAgIGVyciA9IGdydWJfYnNkX2FkZF9t ZXRhIChORVRCU0RfQlRJTkZPX0VGSSwKLQkJCSAgICZncnViX2VmaV9zeXN0ZW1fdGFibGUsCi0J CQkgICBzaXplb2YgKGdydWJfZWZpX3N5c3RlbV90YWJsZSkpOworCQkJICAgJmVmaV9pbmZvLAor CQkJICAgc2l6ZW9mIChlZmlfaW5mbykpOworICBpZiAoZXJyKQorICAgIHJldHVybiBlcnI7CisK KyAgZ3J1Yl91aW50MzJfdCBlZmlfbW1hcF9zaXplID0gMDsKKworICBlZmlfbW1hcF9zaXplID0g MiAqIGdydWJfZWZpX2ZpbmRfbW1hcF9zaXplICgpOworCisgIGVyciA9IGdydWJfYnNkX2FkZF9t ZXRhIChORVRCU0RfQlRJTkZPX0VGSU1FTU1BUCwKKwkJCSAgIE5VTEwsCisJCQkgICBzaXplb2Yo c3RydWN0IGdydWJfbmV0YnNkX2J0aW5mb19lZmltZW1tYXApCisJCQkgICArIGVmaV9tbWFwX3Np emUpOwogICBpZiAoZXJyKQogICAgIHJldHVybiBlcnI7CisKICNlbmRpZgogCiAgIHsKQEAgLTEx OTMsNiArMTUwNCw4IEBAIGdydWJfbmV0YnNkX2Jvb3QgKHZvaWQpCiAgIGFyZzAgPSBjdXJhcmc7 CiAgIGJvb3RpbmZvID0gKHZvaWQgKikgKChncnViX3VpbnQ4X3QgKikgYXJnMCArIHRhZ19idWZf bGVuKTsKIAorICBzdHJ1Y3QgZ3J1Yl9uZXRic2RfYnRpbmZvX2NvbW1vbiAqZWZpX21lbW1hcCA9 IDA7CisKICAgewogICAgIHN0cnVjdCBic2RfdGFnICp0YWc7CiAgICAgdW5zaWduZWQgaTsKQEAg LTEyMDQsNiArMTUxNyw4IEBAIGdydWJfbmV0YnNkX2Jvb3QgKHZvaWQpCiAJYm9vdGluZm8tPmJp X2RhdGFbaV0gPSAoKGdydWJfdWludDhfdCAqKSBjdXJhcmcgLSAoZ3J1Yl91aW50OF90ICopIGFy ZzApCiAJICArIGFyZ190YXJnZXQ7CiAJaGVhZC0+dHlwZSA9IHRhZy0+dHlwZTsKKwlpZiAodGFn LT50eXBlID09IE5FVEJTRF9CVElORk9fRUZJTUVNTUFQKQorCSAgZWZpX21lbW1hcCA9IGhlYWQ7 CiAJaGVhZC0+bGVuID0gdGFnLT5sZW4gKyBzaXplb2YgKCpoZWFkKTsKIAljdXJhcmcgPSBoZWFk ICsgMTsKIAlncnViX21lbWNweSAoY3VyYXJnLCB0YWctPmRhdGEsIHRhZy0+bGVuKTsKQEAgLTEy MjQsOSArMTUzOSwyMSBAQCBncnViX25ldGJzZF9ib290ICh2b2lkKQogICB9CiAKICNpZmRlZiBH UlVCX01BQ0hJTkVfRUZJCi0gIGVyciA9IGdydWJfZWZpX2ZpbmlzaF9ib290X3NlcnZpY2VzIChO VUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgZ3J1Yl9lZmlfdWludG5fdCBlZmlfbW1h cF9zaXplX291dCA9IGVmaV9tbWFwX3NpemU7CisgIGdydWJfZWZpX3VpbnRuX3QgZWZpX2Rlc2Nf c2l6ZTsKKyAgZ3J1Yl9lZmlfdWludDMyX3QgZWZpX2Rlc2NfdmVyc2lvbjsKKyAgc3RydWN0IGdy dWJfbmV0YnNkX2J0aW5mb19lZmltZW1tYXAgKmVmaV9tbWFwID0gKHN0cnVjdCBncnViX25ldGJz ZF9idGluZm9fZWZpbWVtbWFwICopIChlZmlfbWVtbWFwICsgMSk7CisKKyAgZXJyID0gZ3J1Yl9l ZmlfZmluaXNoX2Jvb3Rfc2VydmljZXMgKCZlZmlfbW1hcF9zaXplX291dCwgZWZpX21tYXAgKyAx LCBOVUxMLCAmZWZpX2Rlc2Nfc2l6ZSwgJmVmaV9kZXNjX3ZlcnNpb24pOwogICBpZiAoZXJyKQog ICAgIHJldHVybiBlcnI7CisKKyAgZWZpX21lbW1hcC0+bGVuID0gc2l6ZW9mIChzdHJ1Y3QgZ3J1 Yl9uZXRic2RfYnRpbmZvX2NvbW1vbikgKyBzaXplb2Yoc3RydWN0IGdydWJfbmV0YnNkX2J0aW5m b19lZmltZW1tYXApICsgZWZpX21tYXBfc2l6ZV9vdXQ7CisgIGVmaV9tbWFwLT52ZXJzaW9uID0g ZWZpX2Rlc2NfdmVyc2lvbjsKKyAgZWZpX21tYXAtPnNpemUgPSBlZmlfZGVzY19zaXplOworICBl ZmlfbW1hcC0+bnVtID0gZWZpX2Rlc2Nfc2l6ZSA+IDAgPyAoZWZpX21tYXBfc2l6ZV9vdXQgLyBl ZmlfZGVzY19zaXplKSA6IDA7CisjZWxzZQorICAodm9pZCkgZWZpX21lbW1hcDsKICNlbmRpZgog CiAgIHN0YXRlLmVpcCA9IGVudHJ5OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncnViL2kzODYvZnJl ZWJzZF9saW5rZXIuaCBiL2luY2x1ZGUvZ3J1Yi9pMzg2L2ZyZWVic2RfbGlua2VyLmgKaW5kZXgg M2MxZWI2NGI2Li5kZDUzZTRiY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ3J1Yi9pMzg2L2ZyZWVi c2RfbGlua2VyLmgKKysrIGIvaW5jbHVkZS9ncnViL2kzODYvZnJlZWJzZF9saW5rZXIuaApAQCAt NTQsNiArNTQsNyBAQAogI2RlZmluZSBGUkVFQlNEX01PRElORk9fU0laRQkJMHgwMDA0CS8qIFNp emUgb2YgbW9kdWxlICovCiAjZGVmaW5lIEZSRUVCU0RfTU9ESU5GT19FTVBUWQkJMHgwMDA1CS8q IEhhcyBiZWVuIGRlbGV0ZWQgKi8KICNkZWZpbmUgRlJFRUJTRF9NT0RJTkZPX0FSR1MJCTB4MDAw NgkvKiBQYXJhbWV0ZXJzIHN0cmluZyAqLworI2RlZmluZSBGUkVFQlNEX01PRElORk9NRF9GV19I QU5ETEUgICAgIDB4MDAwYwogI2RlZmluZSBGUkVFQlNEX01PRElORk9fTUVUQURBVEEJMHg4MDAw CS8qIE1vZHVsZS1zcGVjZmljICovCiAKICNkZWZpbmUgRlJFRUJTRF9NT0RJTkZPTURfQU9VVEVY RUMJMHgwMDAxCS8qIGEub3V0IGV4ZWMgaGVhZGVyICovCkBAIC02OCw3ICs2OSw0NSBAQAogI2Rl ZmluZSBGUkVFQlNEX01PRElORk9NRF9OT0NPUFkJMHg4MDAwCS8qIGRvbid0IGNvcHkgdGhpcyBt ZXRhZGF0YSB0byB0aGUga2VybmVsICovCiAKICNkZWZpbmUgRlJFRUJTRF9NT0RJTkZPTURfU01B UAkJMHgxMDAxCisjZGVmaW5lIEZSRUVCU0RfTU9ESU5GT01EX0VGSV9NQVAgICAgICAgMHgxMDA0 CisjZGVmaW5lIEZSRUVCU0RfTU9ESU5GT01EX0VGSV9GQiAgICAgICAgMHgxMDA1CisjZGVmaW5l CUZSRUVCU0RfTU9ESU5GT01EX1ZCRV9GQgkweDEwMDcKIAogI2RlZmluZSBGUkVFQlNEX01PRElO Rk9NRF9ERVBMSVNUCSgweDQwMDEgfCBGUkVFQlNEX01PRElORk9NRF9OT0NPUFkpICAvKiBkZXBl bmRzIG9uICovCiAKK3N0cnVjdCBncnViX2ZyZWVic2RfYnRpbmZvX2VmaV9mcmFtZWJ1Zgorewor ICBncnViX3VpbnQ2NF90CWZiYWRkcjsKKyAgZ3J1Yl91aW50NjRfdAlmYnNpemU7CisgIGdydWJf dWludDMyX3QJaGVpZ2h0OworICBncnViX3VpbnQzMl90CXdpZHRoOworICBncnViX3VpbnQzMl90 CXBpdGNoOworICBncnViX3VpbnQzMl90CXJlZF9tYXNrOworICBncnViX3VpbnQzMl90CWdyZWVu X21hc2s7CisgIGdydWJfdWludDMyX3QJYmx1ZV9tYXNrOworICBncnViX3VpbnQzMl90CXJlc2Vy dmVkX21hc2s7Cit9OworCitzdHJ1Y3QgZ3J1Yl9mcmVlYnNkX2J0aW5mb192YmVfZnJhbWVidWYK K3sKKyAgZ3J1Yl91aW50NjRfdAlmYmFkZHI7CisgIGdydWJfdWludDY0X3QJZmJzaXplOworICBn cnViX3VpbnQzMl90CWhlaWdodDsKKyAgZ3J1Yl91aW50MzJfdAl3aWR0aDsKKyAgZ3J1Yl91aW50 MzJfdAlwaXRjaDsKKyAgZ3J1Yl91aW50MzJfdAlyZWRfbWFzazsKKyAgZ3J1Yl91aW50MzJfdAln cmVlbl9tYXNrOworICBncnViX3VpbnQzMl90CWJsdWVfbWFzazsKKyAgZ3J1Yl91aW50MzJfdAly ZXNlcnZlZF9tYXNrOworICBncnViX3VpbnQzMl90CWJwcDsKK307CisKK3N0cnVjdCBncnViX2Zy ZWVic2RfYnRpbmZvX2VmaV9tYXBfaGVhZGVyCit7CisgIGdydWJfdWludDY0X3QgbWVtb3J5X3Np emU7CisgIGdydWJfdWludDY0X3QgZGVzY3JpcHRvcl9zaXplOworICBncnViX3VpbnQzMl90IGRl c2NyaXB0b3JfdmVyc2lvbjsKKyAgZ3J1Yl91aW50MzJfdCBwYWRkaW5nWzNdOworfTsKKwogI2Vu ZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dydWIvaTM4Ni9uZXRic2RfYm9vdGluZm8uaCBiL2lu Y2x1ZGUvZ3J1Yi9pMzg2L25ldGJzZF9ib290aW5mby5oCmluZGV4IDliNGY0NjA0MS4uZDgwYWY5 NjZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dydWIvaTM4Ni9uZXRic2RfYm9vdGluZm8uaAorKysg Yi9pbmNsdWRlL2dydWIvaTM4Ni9uZXRic2RfYm9vdGluZm8uaApAQCAtNjAsNiArNjAsNyBAQAog I2RlZmluZSBORVRCU0RfQlRJTkZPX0ZSQU1FQlVGCQkxMgogI2RlZmluZSBORVRCU0RfQlRJTkZP X1VTRVJDT05GQ09NTUFORFMgIDEzCiAjZGVmaW5lIE5FVEJTRF9CVElORk9fRUZJCSAgICAgICAg MTQKKyNkZWZpbmUgTkVUQlNEX0JUSU5GT19FRklNRU1NQVAJCTE1CiAKIHN0cnVjdCBncnViX25l dGJzZF9ib290aW5mbwogewpAQCAtMTUwLDcgKzE1MSwxNiBAQCBzdHJ1Y3QgZ3J1Yl9uZXRic2Rf YnRpbmZvX2ZyYW1lYnVmCiAKIHN0cnVjdCBncnViX25ldGJzZF9idGluZm9fZWZpCiB7Ci0gIHZv aWQgKnBhX3N5c3RibDsgIC8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIEVGSSBTeXN0ZW0gVGFi bGUgKi8KKyAgZ3J1Yl91aW50NjRfdCBwYV9zeXN0Ymw7ICAvKiBQaHlzaWNhbCBhZGRyZXNzIG9m IHRoZSBFRkkgU3lzdGVtIFRhYmxlICovCisgIGdydWJfdWludDMyX3QgZmxhZ3M7CisjZGVmaW5l IEdSVUJfTkVUQlNEX0JJX0VGSV8zMkJJVCAgICAgICAweDEKKyAgZ3J1Yl91aW50OF90IHJlc2Vy dmVkWzEyXTsKK307CisKK3N0cnVjdCBncnViX25ldGJzZF9idGluZm9fZWZpbWVtbWFwIHsKKyAg Z3J1Yl91aW50MzJfdCBudW07CQkvKiBudW1iZXIgb2YgbWVtb3J5IGRlc2NyaXB0b3IgKi8KKyAg Z3J1Yl91aW50MzJfdCB2ZXJzaW9uOwkvKiB2ZXJzaW9uIG9mIG1lbW9yeSBkZXNjcmlwdG9yICov CisgIGdydWJfdWludDMyX3Qgc2l6ZTsJCS8qIHNpemUgb2YgbWVtb3J5IGRlc2NyaXB0b3IgKi8K IH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncnViL2kzODYvb3BlbmJzZF9ib290 YXJnLmggYi9pbmNsdWRlL2dydWIvaTM4Ni9vcGVuYnNkX2Jvb3RhcmcuaAppbmRleCA4YzI4MjQ2 ZDUuLjA4M2IzZGUyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncnViL2kzODYvb3BlbmJzZF9ib290 YXJnLmgKKysrIGIvaW5jbHVkZS9ncnViL2kzODYvb3BlbmJzZF9ib290YXJnLmgKQEAgLTYzLDYg KzYzLDMwIEBACiAjZGVmaW5lCU9QRU5CU0RfQk9PVEFSR19NTUFQCTAKICNkZWZpbmUJT1BFTkJT RF9CT09UQVJHX1BDSUJJT1MgNAogI2RlZmluZQlPUEVOQlNEX0JPT1RBUkdfQ09OU09MRSA1Cisj ZGVmaW5lCU9QRU5CU0RfQk9PVEFSR19FRklJTkZPIDExCisKK3N0cnVjdCBncnViX29wZW5ic2Rf Ym9vdGFyZ19lZmlpbmZvIHsKKyAgZ3J1Yl91aW50NjRfdAljb25maWdfYWNwaTsKKyAgZ3J1Yl91 aW50NjRfdAljb25maWdfc21iaW9zOworICBncnViX3VpbnQ2NF90CWZiX2FkZHI7CisgIGdydWJf dWludDY0X3QJZmJfc2l6ZTsKKyAgZ3J1Yl91aW50MzJfdAlmYl9oZWlnaHQ7CisgIGdydWJfdWlu dDMyX3QJZmJfd2lkdGg7CisgIGdydWJfdWludDMyX3QJZmJfcGl4cHNsOwkvKiBwaXhlbHMgcGVy IHNjYW4gbGluZSAqLworICBncnViX3VpbnQzMl90CWZiX3JlZF9tYXNrOworICBncnViX3VpbnQz Ml90CWZiX2dyZWVuX21hc2s7CisgIGdydWJfdWludDMyX3QJZmJfYmx1ZV9tYXNrOworICBncnVi X3VpbnQzMl90CWZiX3Jlc2VydmVkX21hc2s7CisgIGdydWJfdWludDMyX3QJZmxhZ3M7CisjZGVm aW5lIEdSVUJfT1BFTkJTRF9CT09UQVJHX0VGSV82NEJJVAkweDAwMDAwMDAxCS8qIDY0LWJpdCBF RkkgaW1wbGVtZW50YXRpb24gKi8KKyNkZWZpbmUgR1JVQl9PUEVOQlNEX0JPT1RBUkdfRUZJX0VT UlQJMHgwMDAwMDAwMgkvKiBFU1JUIHRhYmxlICovCisgIGdydWJfdWludDMyX3QJbW1hcF9kZXNj X3ZlcjsKKyAgZ3J1Yl91aW50MzJfdAltbWFwX2Rlc2Nfc2l6ZTsKKyAgZ3J1Yl91aW50MzJfdAlt bWFwX3NpemU7CisgIGdydWJfdWludDY0X3QJbW1hcF9zdGFydDsKKyAgZ3J1Yl91aW50NjRfdAlz eXN0ZW1fdGFibGU7CisgIGdydWJfdWludDY0X3QJY29uZmlnX2VzcnQ7Cit9IEdSVUJfUEFDS0VE OwogCiBzdHJ1Y3QgZ3J1Yl9vcGVuYnNkX2Jvb3RhcmdzCiB7Ci0tIAoyLjM5LjIKCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpHcnViLWRldmVsIG1haWxp bmcgbGlzdApHcnViLWRldmVsQGdudS5vcmcKaHR0cHM6Ly9saXN0cy5nbnUub3JnL21haWxtYW4v bGlzdGluZm8vZ3J1Yi1kZXZlbAo=