From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 018964008C for ; Sat, 19 Mar 2022 17:27:46 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DD88168B072; Sat, 19 Mar 2022 19:27:32 +0200 (EET) Received: from mail-qt1-f182.google.com (mail-qt1-f182.google.com [209.85.160.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4F5DD68AF21 for ; Sat, 19 Mar 2022 19:27:26 +0200 (EET) Received: by mail-qt1-f182.google.com with SMTP id c4so9153850qtx.1 for ; Sat, 19 Mar 2022 10:27:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=o1Rh61g/g5xwFE8CDw3dRMBxGIX6bZvC7Mdc5+jSowI=; b=pY/PmVQnSE6xdDjWIkQX+h3lA1zh+lP6lntuokxEpZbBHVALvrxUtXSGkuXBrZ7c/k sGlotRqpegKsfwsMCds9YPi2hTnTQdF70c5tmPZF6bA5LrHKjdSa40OICSqK94acHzL7 MgHDfOtGFaaXyuiXIsX6rmAfwf3EFf+72C8ftEveVNSe+IZq00fM5aBjh9zYz5Pnudv2 q4wghKXP7hrmgK7wkzQ60/TWJhM0V78q1q7DE9p9cIt+JLMNyE68iLyI998G9s6fwns8 x5uz7cBJKJPCXJSxD7Z2ISTrgwEupN0muWBqfhnU5dui88bH3TVqliGex2ZTtZtZmcNT 2lXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=o1Rh61g/g5xwFE8CDw3dRMBxGIX6bZvC7Mdc5+jSowI=; b=7bvlVFM65MtfxncsvCgajCtadDVAbLKCVGQAkKtb3U6T1RVe8AZpCgRvouGonT3/In yp92mRxCy/vwfIX9PcdthcJXiFcRiYQDvFoeEIiPYtzdQTY8hz/F2zcN/5LrS6fe7/xS DKLDpflh4d5uxSW3CLMlododrnws1Iq3DLQW1LdeGSAMMof3Df8L6rMdUavVq8E4D6Fd mFZAYzUC4Rj47SQmtbMNfwa46Is1W1aI5Rt9L8Z1K3nclzVmllpj89zC96AEQzPfS0sm h6SyURblp8SQ3M7f0XbpvifGp/I26iQMN5k+RmUJwT/XQBnAy0jIUA7PU2igaLo8TwxA VmGw== X-Gm-Message-State: AOAM532Zc4xMol7HfWJIWNdZ0sDA065p5By1MrioaT0fCAksqwsM9CS+ xc2YxqNZQe2nFqjyGiiujgK6pKqQpV0= X-Google-Smtp-Source: ABdhPJyPis6knHUeL4DtzvDpFQER2tiLNp4uXm2i2V8GHnXVRpewDu1MyWf30ZeP3BybZcUMAtkVDQ== X-Received: by 2002:a05:622a:1a9c:b0:2e1:e23b:2374 with SMTP id s28-20020a05622a1a9c00b002e1e23b2374mr11251939qtc.447.1647710844760; Sat, 19 Mar 2022 10:27:24 -0700 (PDT) Received: from gauss.local (c-68-41-54-207.hsd1.mi.comcast.net. [68.41.54.207]) by smtp.gmail.com with ESMTPSA id q28-20020a05620a039c00b006494cbf8f5asm5302402qkm.22.2022.03.19.10.27.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Mar 2022 10:27:24 -0700 (PDT) From: Leo Izen To: ffmpeg-devel@ffmpeg.org Date: Sat, 19 Mar 2022 13:26:42 -0400 Message-Id: <20220319172645.82718-2-leo.izen@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220319172645.82718-1-leo.izen@gmail.com> References: <20220319172645.82718-1-leo.izen@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v7 2/5] avcodec/libjxl: add Jpeg XL decoding via libjxl X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Leo Izen Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: VGhpcyBjb21taXQgYWRkcyBkZWNvZGluZyBzdXBwb3J0IHRvIGxpYmF2Y29kZWMKZm9yIEpwZWcg WEwgaW1hZ2VzIHZpYSB0aGUgZXh0ZXJuYWwgbGlicmFyeSBsaWJqeGwuCi0tLQogTUFJTlRBSU5F UlMgICAgICAgICAgICAgICB8ICAgMSArCiBjb25maWd1cmUgICAgICAgICAgICAgICAgIHwgICA1 ICsKIGRvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkgfCAgIDcgKwogbGliYXZjb2RlYy9NYWtlZmls ZSAgICAgICB8ICAgMSArCiBsaWJhdmNvZGVjL2FsbGNvZGVjcy5jICAgIHwgICAxICsKIGxpYmF2 Y29kZWMvbGlianhsLmMgICAgICAgfCAgNzAgKysrKysrKysrCiBsaWJhdmNvZGVjL2xpYmp4bC5o ICAgICAgIHwgIDQ4ICsrKysrKwogbGliYXZjb2RlYy9saWJqeGxkZWMuYyAgICB8IDMwMSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA0MzQg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlianhsLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2xpYmp4bC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliYXZjb2RlYy9saWJqeGxkZWMuYwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRB SU5FUlMKaW5kZXggMmUwZGU5ZTIyNC4uODc1ZDI1Y2E4OSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5F UlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTE5NSw2ICsxOTUsNyBAQCBDb2RlY3M6CiAgIGxpYmNv ZGVjMi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9tYXMgSMOkcmRpbgogICBsaWJkaXJh YyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdmlkIENvbnJhZAogICBsaWJkYXZzMi5j ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh1aXdlbiBSZW4KKyAgbGlianhsKi5jLCBsaWJq eGwuaCAgICAgICAgICAgICAgICAgICBMZW8gSXplbgogICBsaWJnc20uYyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE1pY2hlbCBCYXJkaWF1eAogICBsaWJrdmF6YWFyLmMgICAgICAgICAg ICAgICAgICAgICAgICAgIEFydHR1IFlsw6QtT3V0aW5lbgogICBsaWJvcGVuaDI2NGVuYy5jICAg ICAgICAgICAgICAgICAgICAgIE1hcnRpbiBTdG9yc2pvLCBMaW5qaWUgRnUKZGlmZiAtLWdpdCBh L2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBjNDNkMWJiMmU3Li5hODhkZThjYTljIDEwMDc1 NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0yNDAsNiArMjQwLDcgQEAgRXh0 ZXJuYWwgbGlicmFyeSBzdXBwb3J0OgogICAtLWVuYWJsZS1saWJpZWM2MTg4MyAgICAgZW5hYmxl IGllYzYxODgzIHZpYSBsaWJpZWM2MTg4MyBbbm9dCiAgIC0tZW5hYmxlLWxpYmlsYmMgICAgICAg ICBlbmFibGUgaUxCQyBkZS9lbmNvZGluZyB2aWEgbGliaWxiYyBbbm9dCiAgIC0tZW5hYmxlLWxp YmphY2sgICAgICAgICBlbmFibGUgSkFDSyBhdWRpbyBzb3VuZCBzZXJ2ZXIgW25vXQorICAtLWVu YWJsZS1saWJqeGwgICAgICAgICAgZW5hYmxlIEpQRUcgWEwgZGVjb2RpbmcgdmlhIGxpYmp4bCBb bm9dCiAgIC0tZW5hYmxlLWxpYmtsdmFuYyAgICAgICBlbmFibGUgS2VybmVsIExhYnMgVkFOQyBw cm9jZXNzaW5nIFtub10KICAgLS1lbmFibGUtbGlia3ZhemFhciAgICAgIGVuYWJsZSBIRVZDIGVu Y29kaW5nIHZpYSBsaWJrdmF6YWFyIFtub10KICAgLS1lbmFibGUtbGlibGVuc2Z1biAgICAgIGVu YWJsZSBsZW5zZnVuIGxlbnMgY29ycmVjdGlvbiBbbm9dCkBAIC0xODMzLDYgKzE4MzQsNyBAQCBF WFRFUk5BTF9MSUJSQVJZX0xJU1Q9IgogICAgIGxpYmllYzYxODgzCiAgICAgbGliaWxiYwogICAg IGxpYmphY2sKKyAgICBsaWJqeGwKICAgICBsaWJrbHZhbmMKICAgICBsaWJrdmF6YWFyCiAgICAg bGlibW9kcGx1ZwpAQCAtMzMyOSw2ICszMzMxLDcgQEAgbGliZ3NtX21zX2RlY29kZXJfZGVwcz0i bGliZ3NtIgogbGliZ3NtX21zX2VuY29kZXJfZGVwcz0ibGliZ3NtIgogbGliaWxiY19kZWNvZGVy X2RlcHM9ImxpYmlsYmMiCiBsaWJpbGJjX2VuY29kZXJfZGVwcz0ibGliaWxiYyIKK2xpYmp4bF9k ZWNvZGVyX2RlcHM9ImxpYmp4bCBsaWJqeGxfdGhyZWFkcyIKIGxpYmt2YXphYXJfZW5jb2Rlcl9k ZXBzPSJsaWJrdmF6YWFyIgogbGlibW9kcGx1Z19kZW11eGVyX2RlcHM9ImxpYm1vZHBsdWciCiBs aWJtcDNsYW1lX2VuY29kZXJfZGVwcz0ibGlibXAzbGFtZSIKQEAgLTY1NDEsNiArNjU0NCw4IEBA IGVuYWJsZWQgbGliZ3NtICAgICAgICAgICAgJiYgeyBmb3IgZ3NtX2hkciBpbiAiZ3NtLmgiICJn c20vZ3NtLmgiOyBkbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19s aWIgbGliZ3NtICIke2dzbV9oZHJ9IiBnc21fY3JlYXRlIC1sZ3NtICYmIGJyZWFrOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgfHwgZGllICJFUlJPUjogbGliZ3NtIG5vdCBm b3VuZCI7IH0KIGVuYWJsZWQgbGliaWxiYyAgICAgICAgICAgJiYgcmVxdWlyZSBsaWJpbGJjIGls YmMuaCBXZWJSdGNJbGJjZml4X0luaXREZWNvZGUgLWxpbGJjICRwdGhyZWFkc19leHRyYWxpYnMK K2VuYWJsZWQgbGlianhsICAgICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmp4bCAi bGlianhsID49IDAuNy4wIiBqeGwvZGVjb2RlLmggSnhsRGVjb2RlclZlcnNpb24gJiYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmp4bF90aHJlYWRz ICJsaWJqeGxfdGhyZWFkcyA+PSAwLjcuMCIganhsL3RocmVhZF9wYXJhbGxlbF9ydW5uZXIuaCBK eGxUaHJlYWRQYXJhbGxlbFJ1bm5lcgogZW5hYmxlZCBsaWJrbHZhbmMgICAgICAgICAmJiByZXF1 aXJlIGxpYmtsdmFuYyBsaWJrbHZhbmMvdmFuYy5oIGtsdmFuY19jb250ZXh0X2NyZWF0ZSAtbGts dmFuYwogZW5hYmxlZCBsaWJrdmF6YWFyICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGli a3ZhemFhciAia3ZhemFhciA+PSAwLjguMSIga3ZhemFhci5oIGt2el9hcGlfZ2V0CiBlbmFibGVk IGxpYmxlbnNmdW4gICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJsZW5zZnVuIGxlbnNm dW4gbGVuc2Z1bi5oIGxmX2RiX25ldwpkaWZmIC0tZ2l0IGEvZG9jL2dlbmVyYWxfY29udGVudHMu dGV4aSBiL2RvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkKaW5kZXggZmNkOWRhMWIzNC4uYTg5MzM0 N2ZiZSAxMDA2NDQKLS0tIGEvZG9jL2dlbmVyYWxfY29udGVudHMudGV4aQorKysgYi9kb2MvZ2Vu ZXJhbF9jb250ZW50cy50ZXhpCkBAIC0xNzEsNiArMTcxLDEzIEBAIEdvIHRvIEB1cmx7aHR0cHM6 Ly9naXRodWIuY29tL1RpbW90aHlHdS9saWJpbGJjfSBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlv bnMgZm9yCiBpbnN0YWxsaW5nIHRoZSBsaWJyYXJ5LiBUaGVuIHBhc3MgQGNvZGV7LS1lbmFibGUt bGliaWxiY30gdG8gY29uZmlndXJlIHRvCiBlbmFibGUgaXQuCiAKK0BzZWN0aW9uIGxpYmp4bAor CitKUEVHIFhMIGlzIGFuIGltYWdlIGZvcm1hdCBpbnRlbmRlZCB0byBmdWxseSByZXBsYWNlIGxl Z2FjeSBKUEVHIGZvciBhbiBleHRlbmRlZAorcGVyaW9kIG9mIGxpZmUuIFNlZSBAdXJse2h0dHBz Oi8vanBlZ3hsLmluZm8vfSBmb3IgbW9yZSBpbmZvcm1hdGlvbiwgYW5kIHNlZQorQHVybHtodHRw czovL2dpdGh1Yi5jb20vbGlianhsL2xpYmp4bH0gZm9yIHRoZSBsaWJyYXJ5IHNvdXJjZS4gWW91 IGNhbiBwYXNzCitAY29kZXstLWVuYWJsZS1saWJqeGx9IHRvIGNvbmZpZ3VyZSBpbiBvcmRlciBl bmFibGUgdGhlIGxpYmp4bCB3cmFwcGVyLgorCiBAc2VjdGlvbiBsaWJ2cHgKIAogRkZtcGVnIGNh biBtYWtlIHVzZSBvZiB0aGUgbGlidnB4IGxpYnJhcnkgZm9yIFZQOC9WUDkgZGVjb2RpbmcgYW5k IGVuY29kaW5nLgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9NYWtlZmlsZSBiL2xpYmF2Y29kZWMv TWFrZWZpbGUKaW5kZXggM2M0MGM0MTljZC4uNTcyZTMxZTY0NyAxMDA2NDQKLS0tIGEvbGliYXZj b2RlYy9NYWtlZmlsZQorKysgYi9saWJhdmNvZGVjL01ha2VmaWxlCkBAIC0xMDU5LDYgKzEwNTks NyBAQCBPQkpTLSQoQ09ORklHX0xJQkdTTV9NU19ERUNPREVSKSAgICAgICAgICArPSBsaWJnc21k ZWMubwogT0JKUy0kKENPTkZJR19MSUJHU01fTVNfRU5DT0RFUikgICAgICAgICAgKz0gbGliZ3Nt ZW5jLm8KIE9CSlMtJChDT05GSUdfTElCSUxCQ19ERUNPREVSKSAgICAgICAgICAgICs9IGxpYmls YmMubwogT0JKUy0kKENPTkZJR19MSUJJTEJDX0VOQ09ERVIpICAgICAgICAgICAgKz0gbGliaWxi Yy5vCitPQkpTLSQoQ09ORklHX0xJQkpYTF9ERUNPREVSKSAgICAgICAgICAgICArPSBsaWJqeGxk ZWMubyBsaWJqeGwubwogT0JKUy0kKENPTkZJR19MSUJLVkFaQUFSX0VOQ09ERVIpICAgICAgICAg Kz0gbGlia3ZhemFhci5vCiBPQkpTLSQoQ09ORklHX0xJQk1QM0xBTUVfRU5DT0RFUikgICAgICAg ICArPSBsaWJtcDNsYW1lLm8KIE9CSlMtJChDT05GSUdfTElCT1BFTkNPUkVfQU1STkJfREVDT0RF UikgICs9IGxpYm9wZW5jb3JlLWFtci5vCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FsbGNvZGVj cy5jIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwppbmRleCA3NDA0OWFmYThmLi43ZDFlYjBlMjJj IDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCisrKyBiL2xpYmF2Y29kZWMvYWxs Y29kZWNzLmMKQEAgLTc0OCw2ICs3NDgsNyBAQCBleHRlcm4gY29uc3QgQVZDb2RlYyBmZl9saWJn c21fbXNfZW5jb2RlcjsKIGV4dGVybiBjb25zdCBBVkNvZGVjIGZmX2xpYmdzbV9tc19kZWNvZGVy OwogZXh0ZXJuIGNvbnN0IEFWQ29kZWMgZmZfbGliaWxiY19lbmNvZGVyOwogZXh0ZXJuIGNvbnN0 IEFWQ29kZWMgZmZfbGliaWxiY19kZWNvZGVyOworZXh0ZXJuIGNvbnN0IEFWQ29kZWMgZmZfbGli anhsX2RlY29kZXI7CiBleHRlcm4gY29uc3QgQVZDb2RlYyBmZl9saWJtcDNsYW1lX2VuY29kZXI7 CiBleHRlcm4gY29uc3QgQVZDb2RlYyBmZl9saWJvcGVuY29yZV9hbXJuYl9lbmNvZGVyOwogZXh0 ZXJuIGNvbnN0IEFWQ29kZWMgZmZfbGlib3BlbmNvcmVfYW1ybmJfZGVjb2RlcjsKZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvbGlianhsLmMgYi9saWJhdmNvZGVjL2xpYmp4bC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjIwNGQ5MWQ4YTgKLS0tIC9kZXYvbnVsbAorKysg Yi9saWJhdmNvZGVjL2xpYmp4bC5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBKUEVHIFhMIGRl L2VuY29kaW5nIHZpYSBsaWJqeGwsIGNvbW1vbiBzdXBwb3J0IGltcGxlbWVudGF0aW9uCisgKiBD b3B5cmlnaHQgKGMpIDIwMjEgTGVvIEl6ZW4gPGxlby5pemVuQGdtYWlsLmNvbT4KKyAqCisgKiBU aGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoqCisgKiBAZmlsZQorICogSlBFRyBY TCB2aWEgbGlianhsIGNvbW1vbiBzdXBwb3J0IGltcGxlbWVudGF0aW9uCisgKi8KKworI2luY2x1 ZGUgImxpYmF2dXRpbC9jcHUuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCisKKyNpbmNs dWRlIDxqeGwvbWVtb3J5X21hbmFnZXIuaD4KKyNpbmNsdWRlICJsaWJqeGwuaCIKKworc2l6ZV90 IGZmX2xpYmp4bF9nZXRfdGhyZWFkY291bnQoaW50IHRocmVhZHMpCit7CisgICAgaWYgKHRocmVh ZHMgPD0gMCkKKyAgICAgICAgcmV0dXJuIGF2X2NwdV9jb3VudCgpOworICAgIGlmICh0aHJlYWRz ID09IDEpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB0aHJlYWRzOworfQorCisvKioK KyAqIFdyYXBwZXIgYXJvdW5kIGF2X21hbGxvYyB1c2VkIGFzIGEganBlZ3hsX2FsbG9jX2Z1bmMu CisgKgorICogQHBhcmFtICBvcGFxdWUgb3BhcXVlIHBvaW50ZXIgZm9yIGpwZWd4bF9hbGxvY19m dW5jLCBhbHdheXMgaWdub3JlZAorICogQHBhcmFtICBzaXplIFNpemUgaW4gYnl0ZXMgZm9yIHRo ZSBtZW1vcnkgYmxvY2sgdG8gYmUgYWxsb2NhdGVkCisgKiBAcmV0dXJuIFBvaW50ZXIgdG8gdGhl IGFsbG9jYXRlZCBibG9jaywgb3IgYE5VTExgIGlmIGl0IGNhbm5vdCBiZSBhbGxvY2F0ZWQKKyAq Lworc3RhdGljIHZvaWQgKmxpYmp4bF9hdl9tYWxsb2Modm9pZCAqb3BhcXVlLCBzaXplX3Qgc2l6 ZSkKK3sKKyAgICByZXR1cm4gYXZfbWFsbG9jKHNpemUpOworfQorCisvKioKKyAqIFdyYXBwZXIg YXJvdW5kIGF2X2ZyZWUgdXNlZCBhcyBhIGpwZWd4bF9mcmVlX2Z1bmMuCisgKgorICogQHBhcmFt IG9wYXF1ZSAgb3BhcXVlIHBvaW50ZXIgZm9yIGpwZWd4bF9mcmVlX2Z1bmMsIGFsd2F5cyBpZ25v cmVkCisgKiBAcGFyYW0gYWRkcmVzcyBQb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYmxvY2ssIHRv IGZyZWUuIGBOVUxMYCBwZXJtaXR0ZWQgYXMgYSBuby1vcC4KKyAqLworc3RhdGljIHZvaWQgbGli anhsX2F2X2ZyZWUodm9pZCAqb3BhcXVlLCB2b2lkICphZGRyZXNzKQoreworICAgIGF2X2ZyZWUo YWRkcmVzcyk7Cit9CisKK3ZvaWQgZmZfbGlianhsX2luaXRfbWVtb3J5X21hbmFnZXIoSnhsTWVt b3J5TWFuYWdlciAqbWFuYWdlcikKK3sKKyAgICBtYW5hZ2VyLT5vcGFxdWUgPSBOVUxMOworICAg IG1hbmFnZXItPmFsbG9jID0gJmxpYmp4bF9hdl9tYWxsb2M7CisgICAgbWFuYWdlci0+ZnJlZSA9 ICZsaWJqeGxfYXZfZnJlZTsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvbGlianhsLmggYi9s aWJhdmNvZGVjL2xpYmp4bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjUzODdjNDM4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL2xpYmp4bC5oCkBAIC0w LDAgKzEsNDggQEAKKy8qCisgKiBKUEVHIFhMIGRlL2VuY29kaW5nIHZpYSBsaWJqeGwsIGNvbW1v biBzdXBwb3J0IGhlYWRlcgorICogQ29weXJpZ2h0IChjKSAyMDIxIExlbyBJemVuIDxsZW8uaXpl bkBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAq IEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKy8q KgorICogQGZpbGUKKyAqIEpQRUcgWEwgdmlhIGxpYmp4bCBjb21tb24gc3VwcG9ydCBoZWFkZXIK KyAqLworCisjaWZuZGVmIEFWQ09ERUNfTElCSlhMX0gKKyNkZWZpbmUgQVZDT0RFQ19MSUJKWExf SAorCisjaW5jbHVkZSA8anhsL21lbW9yeV9tYW5hZ2VyLmg+CisKKy8qKgorICogVHJhbnNmb3Jt IHRocmVhZGNvdW50IGluIGZmbXBlZyB0byBvbmUgdXNlZCBieSBsaWJqeGwuCisgKgorICogQHBh cmFtICB0aHJlYWRzIGZmbXBlZydzIHRocmVhZHMgQVZPcHRpb24KKyAqIEByZXR1cm4gICAgICAg ICB0aHJlYWQgY291bnQgZm9yIGxpYmp4bCdzIHBhcmFsbGVsIHJ1bm5lcgorICovCitzaXplX3Qg ZmZfbGlianhsX2dldF90aHJlYWRjb3VudChpbnQgdGhyZWFkcyk7CisKKy8qKgorICogSW5pdGlh bGl6ZSBhbmQgcG9wdWxhdGUgYSBKeGxNZW1vcnlNYW5hZ2VyCisgKiB3aXRoIGF2X21hbGxvYygp IGFuZCBhdl9mcmVlKCkgc28gbGlianhsIHdpbGwgdXNlIHRoZXNlCisgKiBmdW5jdGlvbnMuCisg KiBAcGFyYW0gbWFuYWdlciBhIHBvaW50ZXIgdG8gYSBKeGxNZW1vcnlNYW5hZ2VyIHN0cnVjdAor ICovCit2b2lkIGZmX2xpYmp4bF9pbml0X21lbW9yeV9tYW5hZ2VyKEp4bE1lbW9yeU1hbmFnZXIg Km1hbmFnZXIpOworCisjZW5kaWYgLyogQVZDT0RFQ19MSUJKWExfSCAqLwpkaWZmIC0tZ2l0IGEv bGliYXZjb2RlYy9saWJqeGxkZWMuYyBiL2xpYmF2Y29kZWMvbGlianhsZGVjLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYzIyNGM1MTNmNgotLS0gL2Rldi9udWxsCisr KyBiL2xpYmF2Y29kZWMvbGlianhsZGVjLmMKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBKUEVH IFhMIGRlY29kaW5nIHN1cHBvcnQgdmlhIGxpYmp4bAorICogQ29weXJpZ2h0IChjKSAyMDIxIExl byBJemVuIDxsZW8uaXplbkBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQQorICovCisKKy8qKgorICogQGZpbGUKKyAqIEpQRUcgWEwgZGVjb2RlciB1c2luZyBsaWJq eGwKKyAqLworCisjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0LmgiCisjaW5jbHVkZSAibGli YXZ1dGlsL2NvbW1vbi5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9lcnJvci5oIgorI2luY2x1ZGUg ImxpYmF2dXRpbC9tZW0uaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCisjaW5jbHVkZSAi bGliYXZ1dGlsL3BpeGRlc2MuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4Zm10LmgiCisjaW5j bHVkZSAibGliYXZ1dGlsL2ZyYW1lLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL3ZlcnNpb24uaCIK KworI2luY2x1ZGUgImF2Y29kZWMuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisjaW5jbHVk ZSA8anhsL2RlY29kZS5oPgorI2luY2x1ZGUgPGp4bC90aHJlYWRfcGFyYWxsZWxfcnVubmVyLmg+ CisjaW5jbHVkZSAibGlianhsLmgiCisKK3R5cGVkZWYgc3RydWN0IExpYkp4bERlY29kZUNvbnRl eHQgeworICAgIHZvaWQgKnJ1bm5lcjsKKyAgICBKeGxEZWNvZGVyICpkZWNvZGVyOworICAgIEp4 bEJhc2ljSW5mbyBiYXNpY19pbmZvOworICAgIEp4bFBpeGVsRm9ybWF0IGp4bF9waXhmbXQ7Cisg ICAgSnhsRGVjb2RlclN0YXR1cyBldmVudHM7CisgICAgdWludDhfdCAqaWNjcDsKKyAgICBzaXpl X3QgaWNjcF9sZW47Cit9IExpYkp4bERlY29kZUNvbnRleHQ7CisKK3N0YXRpYyBpbnQgbGlianhs X2luaXRfanhsX2RlY29kZXIoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQoreworICAgIExpYkp4bERl Y29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7CisKKyAgICBjdHgtPmV2ZW50cyA9 IEpYTF9ERUNfQkFTSUNfSU5GTyB8IEpYTF9ERUNfRlVMTF9JTUFHRSB8IEpYTF9ERUNfRlJBTUUg fCBKWExfREVDX0NPTE9SX0VOQ09ESU5HOworICAgIGlmIChKeGxEZWNvZGVyU3Vic2NyaWJlRXZl bnRzKGN0eC0+ZGVjb2RlciwgY3R4LT5ldmVudHMpICE9IEpYTF9ERUNfU1VDQ0VTUykgeworICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkVycm9yIHN1YnNjcmliaW5nIHRvIEpY TCBldmVudHNcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisK KyAgICBpZiAoSnhsRGVjb2RlclNldFBhcmFsbGVsUnVubmVyKGN0eC0+ZGVjb2RlciwgSnhsVGhy ZWFkUGFyYWxsZWxSdW5uZXIsIGN0eC0+cnVubmVyKSAhPSBKWExfREVDX1NVQ0NFU1MpIHsKKyAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gc2V0IEp4bFRocmVh ZFBhcmFsbGVsUnVubmVyXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cisg ICAgfQorCisgICAgbWVtc2V0KCZjdHgtPmJhc2ljX2luZm8sIDAsIHNpemVvZihKeGxCYXNpY0lu Zm8pKTsKKyAgICBtZW1zZXQoJmN0eC0+anhsX3BpeGZtdCwgMCwgc2l6ZW9mKEp4bFBpeGVsRm9y bWF0KSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBhdl9jb2xkIGludCBsaWJqeGxfZGVj b2RlX2luaXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQoreworICAgIExpYkp4bERlY29kZUNvbnRl eHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgSnhsTWVtb3J5TWFuYWdlciBtYW5hZ2Vy OworCisgICAgZmZfbGlianhsX2luaXRfbWVtb3J5X21hbmFnZXIoJm1hbmFnZXIpOworICAgIGN0 eC0+ZGVjb2RlciA9IEp4bERlY29kZXJDcmVhdGUoJm1hbmFnZXIpOworICAgIGlmICghY3R4LT5k ZWNvZGVyKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRv IGNyZWF0ZSBKeGxEZWNvZGVyXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7 CisgICAgfQorCisgICAgY3R4LT5ydW5uZXIgPSBKeGxUaHJlYWRQYXJhbGxlbFJ1bm5lckNyZWF0 ZSgmbWFuYWdlciwgZmZfbGlianhsX2dldF90aHJlYWRjb3VudChhdmN0eC0+dGhyZWFkX2NvdW50 KSk7CisgICAgaWYgKCFjdHgtPnJ1bm5lcikgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgSnhsVGhyZWFkUGFyYWxsZWxSdW5uZXJcbiIpOwor ICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisKKyAgICByZXR1cm4gbGli anhsX2luaXRfanhsX2RlY29kZXIoYXZjdHgpOworfQorCitzdGF0aWMgZW51bSBBVlBpeGVsRm9y bWF0IGxpYmp4bF9nZXRfcGl4X2ZtdChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEp4bEJhc2ljSW5m byAqYmFzaWNfaW5mbywgSnhsUGl4ZWxGb3JtYXQgKmZvcm1hdCkKK3sKKyAgICBmb3JtYXQtPmVu ZGlhbm5lc3MgPSBKWExfTElUVExFX0VORElBTjsKKyAgICBmb3JtYXQtPm51bV9jaGFubmVscyA9 IGJhc2ljX2luZm8tPm51bV9jb2xvcl9jaGFubmVscyArIChiYXNpY19pbmZvLT5hbHBoYV9iaXRz ID4gMCk7CisgICAgLyogYXZfbWFsbG9jIGhhbmRsZXMgYWxpZ25tZW50IGFscmVhZHkgKi8KKyAg ICBmb3JtYXQtPmFsaWduID0gMTsKKyAgICAvKiBHcmF5ICovCisgICAgaWYgKGJhc2ljX2luZm8t Pm51bV9jb2xvcl9jaGFubmVscyA9PSAxKSB7CisgICAgICAgIGlmIChiYXNpY19pbmZvLT5iaXRz X3Blcl9zYW1wbGUgPD0gOCkgeworICAgICAgICAgICAgZm9ybWF0LT5kYXRhX3R5cGUgPSBKWExf VFlQRV9VSU5UODsKKyAgICAgICAgICAgIHJldHVybiBiYXNpY19pbmZvLT5hbHBoYV9iaXRzID8g QVZfUElYX0ZNVF9ZQTggOiBBVl9QSVhfRk1UX0dSQVk4OworICAgICAgICB9CisgICAgICAgIGlm IChiYXNpY19pbmZvLT5leHBvbmVudF9iaXRzX3Blcl9zYW1wbGUgfHwgYmFzaWNfaW5mby0+Yml0 c19wZXJfc2FtcGxlID4gMTYpIHsKKyAgICAgICAgICAgIGlmIChiYXNpY19pbmZvLT5hbHBoYV9i aXRzKQorICAgICAgICAgICAgICAgIHJldHVybiBBVl9QSVhfRk1UX05PTkU7CisgICAgICAgICAg ICBmb3JtYXQtPmRhdGFfdHlwZSA9IEpYTF9UWVBFX0ZMT0FUOworICAgICAgICAgICAgcmV0dXJu IEFWX1BJWF9GTVRfR1JBWUYzMkxFOworICAgICAgICB9CisgICAgICAgIGZvcm1hdC0+ZGF0YV90 eXBlID0gSlhMX1RZUEVfVUlOVDE2OworICAgICAgICByZXR1cm4gYmFzaWNfaW5mby0+YWxwaGFf Yml0cyA/IEFWX1BJWF9GTVRfWUExNkxFIDogQVZfUElYX0ZNVF9HUkFZMTZMRTsKKyAgICB9Cisg ICAgLyogcmdiIG9ubHkgKi8KKyAgICAvKiBsaWJqeGwgb25seSBzdXBwb3J0cyBwYWNrZWQgUkdC IGFuZCBncmF5IG91dHB1dCBhdCB0aGUgbW9tZW50ICovCisgICAgaWYgKGJhc2ljX2luZm8tPm51 bV9jb2xvcl9jaGFubmVscyA9PSAzKSB7CisgICAgICAgIGlmIChiYXNpY19pbmZvLT5iaXRzX3Bl cl9zYW1wbGUgPD0gOCkgeworICAgICAgICAgICAgZm9ybWF0LT5kYXRhX3R5cGUgPSBKWExfVFlQ RV9VSU5UODsKKyAgICAgICAgICAgIHJldHVybiBiYXNpY19pbmZvLT5hbHBoYV9iaXRzID8gQVZf UElYX0ZNVF9SR0JBIDogQVZfUElYX0ZNVF9SR0IyNDsKKyAgICAgICAgfQorICAgICAgICBpZiAo YmFzaWNfaW5mby0+Yml0c19wZXJfc2FtcGxlID4gMTYpCisgICAgICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19XQVJOSU5HLCAiRG93bnNhbXBsaW5nIGxhcmdlciBpbnRlZ2VyIHRvIDE2LWJp dCB2aWEgbGlianhsXG4iKTsKKyAgICAgICAgaWYgKGJhc2ljX2luZm8tPmV4cG9uZW50X2JpdHNf cGVyX3NhbXBsZSkKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJE b3duc2FtcGxpbmcgZmxvYXQgdG8gMTYtYml0IGludGVnZXIgdmlhIGxpYmp4bFxuIik7CisgICAg ICAgIGZvcm1hdC0+ZGF0YV90eXBlID0gSlhMX1RZUEVfVUlOVDE2OworICAgICAgICByZXR1cm4g YmFzaWNfaW5mby0+YWxwaGFfYml0cyA/IEFWX1BJWF9GTVRfUkdCQTY0TEUgOiBBVl9QSVhfRk1U X1JHQjQ4TEU7CisgICAgfQorICAgIHJldHVybiBBVl9QSVhfRk1UX05PTkU7Cit9CisKK3N0YXRp YyB2b2lkIGxpYmp4bF9yb3dfZmlsbCh2b2lkICphdmZyYW1lLCBzaXplX3QgeCwgc2l6ZV90IHks IHNpemVfdCBudW1fcGl4ZWxzLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgQVZGcmFtZSAq ZnJhbWUgPSBhdmZyYW1lOworICAgIGludCBieXRlcyA9IGF2X2dldF9wYWRkZWRfYml0c19wZXJf cGl4ZWwoYXZfcGl4X2ZtdF9kZXNjX2dldChmcmFtZS0+Zm9ybWF0KSkgLyA4OworICAgIHNpemVf dCBvZmZzZXQgPSB5ICogZnJhbWUtPmxpbmVzaXplWzBdICsgeCAqIGJ5dGVzOworICAgIG1lbWNw eShmcmFtZS0+ZGF0YVswXSArIG9mZnNldCwgcGl4ZWxzLCBudW1fcGl4ZWxzICogYnl0ZXMpOwor fQorCitzdGF0aWMgaW50IGxpYmp4bF9kZWNvZGVfZnJhbWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 LCB2b2lkICphdmZyYW1lLCBpbnQgKmdvdF9mcmFtZSwgQVZQYWNrZXQgKmF2cGt0KQoreworICAg IExpYkp4bERlY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgdWludDhf dCAqYnVmID0gYXZwa3QtPmRhdGE7CisgICAgc2l6ZV90IHJlbWFpbmluZyA9IGF2cGt0LT5zaXpl OworICAgIEFWRnJhbWUgKmZyYW1lID0gYXZmcmFtZTsKKyAgICBKeGxEZWNvZGVyU3RhdHVzIHN0 YXR1czsKKyAgICBpbnQgZmZfc3RhdHVzOworICAgICpnb3RfZnJhbWUgPSAwOworCisgICAgZm9y ICg7OykgeworICAgICAgICAvKgorICAgICAgICAgKiBpdCBvbmx5IHJldHVybnMgSlhMX0RFQ19F UlJPUiBoZXJlIGlmIHRoZSBpbnB1dAorICAgICAgICAgKiB3YXMgbm90IHJlbGVhc2VkIHNpbmNl IHRoZSBsYXN0IHRpbWUgdGhpcyB3YXMgY2FsbGVkCisgICAgICAgICAqIGlmIHRoaXMgaGFwcGVu cywgaXQncyBhIHByb2dyYW1tZXIgZXJyb3IKKyAgICAgICAgICovCisgICAgICAgIHN0YXR1cyA9 IEp4bERlY29kZXJTZXRJbnB1dChjdHgtPmRlY29kZXIsIGJ1ZiwgcmVtYWluaW5nKTsKKyAgICAg ICAgYXZfYXNzZXJ0MChzdGF0dXMgIT0gSlhMX0RFQ19FUlJPUik7CisKKyAgICAgICAgc3RhdHVz ID0gSnhsRGVjb2RlclByb2Nlc3NJbnB1dChjdHgtPmRlY29kZXIpOworICAgICAgICAvKgorICAg ICAgICAgKiBKeGxEZWNvZGVyUmVsZWFzZUlucHV0IHJldHVybnMgdGhlIG51bWJlcgorICAgICAg ICAgKiBvZiBieXRlcyByZW1haW5pbmcgdG8gYmUgcmVhZCwgcmF0aGVyIHRoYW4KKyAgICAgICAg ICogdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGl0IGRpZCByZWFkCisgICAgICAgICAqLworICAg ICAgICByZW1haW5pbmcgPSBKeGxEZWNvZGVyUmVsZWFzZUlucHV0KGN0eC0+ZGVjb2Rlcik7Cisg ICAgICAgIGJ1ZiA9IGF2cGt0LT5kYXRhICsgYXZwa3QtPnNpemUgLSByZW1haW5pbmc7CisKKyAg ICAgICAgc3dpdGNoKHN0YXR1cykgeworICAgICAgICBjYXNlIEpYTF9ERUNfRVJST1I6CisgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVua25vd24gbGlianhsIGRlY29k ZSBlcnJvclxuIik7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAg ICAgY2FzZSBKWExfREVDX05FRURfTU9SRV9JTlBVVDoKKyAgICAgICAgICAgIGlmIChyZW1haW5p bmcgPT0gMCkgeworICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcs ICJVbmV4cGVjdGVkIGVuZCBvZiBKWEwgY29kZXN0cmVhbVxuIik7CisgICAgICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRUFHQUlOKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiTkVFRF9NT1JFX0lOUFVUIGV2ZW50IGVtaXR0ZWRcbiIp OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgSlhMX0RFQ19CQVNJQ19JTkZP OgorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJCQVNJQ19JTkZPIGV2 ZW50IGVtaXR0ZWRcbiIpOworICAgICAgICAgICAgaWYgKEp4bERlY29kZXJHZXRCYXNpY0luZm8o Y3R4LT5kZWNvZGVyLCAmY3R4LT5iYXNpY19pbmZvKSAhPSBKWExfREVDX1NVQ0NFU1MpIHsKKyAg ICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIHRoaXMgc2hvdWxkIG5ldmVyIGhh cHBlbgorICAgICAgICAgICAgICAgICAqIGlmIGl0IGRvZXMgaXQgaXMgbGlrZWx5IGEgbGlianhs IGRlY29kZXIgYnVnCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJCYWQgbGlianhsIGJhc2ljIGluZm8gZXZlbnRcbiIpOwor ICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBsaWJqeGxfZ2V0X3BpeF9mbXQoYXZjdHgsICZj dHgtPmJhc2ljX2luZm8sICZjdHgtPmp4bF9waXhmbXQpOworICAgICAgICAgICAgaWYgKGF2Y3R4 LT5waXhfZm10ID09IEFWX1BJWF9GTVRfTk9ORSkgeworICAgICAgICAgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiQmFkIGxpYmp4bCBwaXhlbCBmb3JtYXRcbiIpOworICAgICAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgZmZfc3RhdHVzID0gZmZfc2V0X2RpbWVuc2lvbnMoYXZjdHgsIGN0eC0+YmFzaWNfaW5m by54c2l6ZSwgY3R4LT5iYXNpY19pbmZvLnlzaXplKTsKKyAgICAgICAgICAgIGlmIChmZl9zdGF0 dXMgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBmZl9zdGF0dXM7CisgICAgICAgICAgICAv KgorICAgICAgICAgICAgICogV2UgcmV3aW5kIHRoZSBkZWNvZGVyIGFuZCBhc2sgZm9yIGV2ZXJ5 dGhpbmcgYWdhaW4KKyAgICAgICAgICAgICAqIFRoaXMgZnV0dXJlcHJvb2ZzIHRoZSBkZWNvZGVy IHNpbmNlIGl0IHdpbGwgbWFrZQorICAgICAgICAgICAgICogYWRkaW5nIGEgcGFyc2VyIG9yIGEg ZGVkaWNhdGVkIGRlbXV4ZXIgbXVjaCBlYXNpZXIKKyAgICAgICAgICAgICAqLworICAgICAgICAg ICAgYnVmID0gYXZwa3QtPmRhdGE7CisgICAgICAgICAgICByZW1haW5pbmcgPSBhdnBrdC0+c2l6 ZTsKKyAgICAgICAgICAgIEp4bERlY29kZXJSZXdpbmQoY3R4LT5kZWNvZGVyKTsKKyAgICAgICAg ICAgIGN0eC0+ZXZlbnRzICY9IH5KWExfREVDX0JBU0lDX0lORk87CisgICAgICAgICAgICBpZiAo SnhsRGVjb2RlclN1YnNjcmliZUV2ZW50cyhjdHgtPmRlY29kZXIsIGN0eC0+ZXZlbnRzKSAhPSBK WExfREVDX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIkVycm9yIHN1YnNjcmliaW5nIHRvIEpYTCBldmVudHMgYWZ0ZXIgcmV3aW5kXG4iKTsK KyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIEpYTF9ERUNfQ09MT1JfRU5DT0RJ Tkc6CisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIkNPTE9SX0VOQ09E SU5HIGV2ZW50IGVtaXR0ZWRcbiIpOworICAgICAgICAgICAgc3RhdHVzID0gSnhsRGVjb2Rlckdl dElDQ1Byb2ZpbGVTaXplKGN0eC0+ZGVjb2RlciwgJmN0eC0+anhsX3BpeGZtdCwgSlhMX0NPTE9S X1BST0ZJTEVfVEFSR0VUX09SSUdJTkFMLCAmY3R4LT5pY2NwX2xlbik7CisgICAgICAgICAgICBp ZiAoc3RhdHVzID09IEpYTF9ERUNfU1VDQ0VTUyAmJiBjdHgtPmljY3BfbGVuID4gMCkgeworICAg ICAgICAgICAgICAgIGlmIChjdHgtPmljY3ApCisgICAgICAgICAgICAgICAgICAgIGF2X2ZyZWVw KCZjdHgtPmljY3ApOworICAgICAgICAgICAgICAgIGN0eC0+aWNjcCA9IGF2X21hbGxvYyhjdHgt PmljY3BfbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoIWN0eC0+aWNjcCkKKyAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgICAgICAgICBzdGF0dXMg PSBKeGxEZWNvZGVyR2V0Q29sb3JBc0lDQ1Byb2ZpbGUoY3R4LT5kZWNvZGVyLCAmY3R4LT5qeGxf cGl4Zm10LCBKWExfQ09MT1JfUFJPRklMRV9UQVJHRVRfT1JJR0lOQUwsIGN0eC0+aWNjcCwgY3R4 LT5pY2NwX2xlbik7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBKWExfREVDX1NVQ0NF U1MpCisgICAgICAgICAgICAgICAgICAgIGF2X2ZyZWVwKCZjdHgtPmljY3ApOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgSlhMX0RFQ19GUkFNRToK KyAgICAgICAgY2FzZSBKWExfREVDX05FRURfSU1BR0VfT1VUX0JVRkZFUjoKKyAgICAgICAgICAg IC8qCisgICAgICAgICAgICAgKiBXZSBkb24ndCBkbyB0aGlzIGF0IGJhc2ljIGluZm8gdGltZQor ICAgICAgICAgICAgICogYmVjYXVzZSBpdCB3aWxsIGhhcHBlbiBhZ2FpbiB3aGVuIHdlCisgICAg ICAgICAgICAgKiByZXdpbmQgYW55d2F5CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiJXMgZXZlbnQgZW1pdHRlZFxuIiwgc3RhdHVzID09 IEpYTF9ERUNfRlJBTUUgPyAiRlJBTUUiIDogIk5FRURfSU1BR0VfT1VUX0JVRkZFUiIpOworICAg ICAgICAgICAgZmZfc3RhdHVzID0gZmZfZ2V0X2J1ZmZlcihhdmN0eCwgZnJhbWUsIDApOworICAg ICAgICAgICAgaWYgKGZmX3N0YXR1cyA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGZmX3N0 YXR1czsKKyAgICAgICAgICAgIGlmIChKeGxEZWNvZGVyU2V0SW1hZ2VPdXRDYWxsYmFjayhjdHgt PmRlY29kZXIsICZjdHgtPmp4bF9waXhmbXQsICZsaWJqeGxfcm93X2ZpbGwsIGZyYW1lKSAhPSBK WExfREVDX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIkJhZCBsaWJqeGwgZGVjIG5lZWQgaW1hZ2Ugb3V0IGJ1ZmZlciBldmVudFxuIik7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBKWExfREVDX0ZVTExfSU1BR0U6Cisg ICAgICAgICAgICAvKiBmdWxsIGltYWdlIGlzIG9uZSBmcmFtZSwgZXZlbiBpZiBhbmltYXRlZCAq LworICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJGVUxMX0lNQUdFIGV2 ZW50IGVtaXR0ZWRcbiIpOworICAgICAgICAgICAgKmdvdF9mcmFtZSA9IDE7CisgICAgICAgICAg ICBmcmFtZS0+cGljdF90eXBlID0gQVZfUElDVFVSRV9UWVBFX0k7CisgICAgICAgICAgICBmcmFt ZS0+a2V5X2ZyYW1lID0gMTsKKyAgICAgICAgICAgIGlmIChjdHgtPmljY3ApIHsKKyAgICAgICAg ICAgICAgICBBVkZyYW1lU2lkZURhdGEgKnNkID0gYXZfZnJhbWVfbmV3X3NpZGVfZGF0YShmcmFt ZSwgQVZfRlJBTUVfREFUQV9JQ0NfUFJPRklMRSwgY3R4LT5pY2NwX2xlbik7CisgICAgICAgICAg ICAgICAgaWYgKCFzZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoc2QtPmRhdGEsIGN0eC0+aWNjcCwgY3R4LT5pY2Nw X2xlbik7CisgICAgICAgICAgICAgICAgYXZfZGljdF9zZXQoJnNkLT5tZXRhZGF0YSwgIm5hbWUi LCAiIiwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXZwa3QtPnNpemUg LSByZW1haW5pbmc7CisgICAgICAgIGNhc2UgSlhMX0RFQ19TVUNDRVNTOgorICAgICAgICAgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJTVUNDRVNTIGV2ZW50IGVtaXR0ZWRcbiIpOwor ICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFRoZSBmaWxlIGhhcyBmaW5pc2hlZCBkZWNv ZGluZworICAgICAgICAgICAgICogcmVzZXQgdGhlIGRlY29kZXIgdG8gbGV0IHVzCisgICAgICAg ICAgICAgKiByZXVzZSBpdCBhZ2FpbiBmb3IgdGhlIG5leHQgaW1hZ2UKKyAgICAgICAgICAgICAq LworICAgICAgICAgICAgSnhsRGVjb2RlclJlc2V0KGN0eC0+ZGVjb2Rlcik7CisgICAgICAgICAg ICBsaWJqeGxfaW5pdF9qeGxfZGVjb2RlcihhdmN0eCk7CisgICAgICAgICAgICBidWYgPSBhdnBr dC0+ZGF0YTsKKyAgICAgICAgICAgIHJlbWFpbmluZyA9IGF2cGt0LT5zaXplOworICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJCYWQgbGlianhsIGV2ZW50OiAlZFxuIiwgc3RhdHVzKTsKKyAgICAg ICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAgICAgfQorICAgIH0KK30KKwor c3RhdGljIGF2X2NvbGQgaW50IGxpYmp4bF9kZWNvZGVfY2xvc2UoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4KQoreworICAgIExpYkp4bERlY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7 CisgICAgaWYgKGN0eC0+cnVubmVyKQorICAgICAgICBKeGxUaHJlYWRQYXJhbGxlbFJ1bm5lckRl c3Ryb3koY3R4LT5ydW5uZXIpOworICAgIGN0eC0+cnVubmVyID0gTlVMTDsKKyAgICBpZiAoY3R4 LT5kZWNvZGVyKQorICAgICAgICBKeGxEZWNvZGVyRGVzdHJveShjdHgtPmRlY29kZXIpOworICAg IGN0eC0+ZGVjb2RlciA9IE5VTEw7CisgICAgaWYgKGN0eC0+aWNjcCkKKyAgICAgICAgYXZfZnJl ZXAoJmN0eC0+aWNjcCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2NvbnN0IEFWQ29kZWMgZmZfbGli anhsX2RlY29kZXIgPSB7CisgICAgLm5hbWUgICAgICAgICAgID0gImxpYmp4bCIsCisgICAgLmxv bmdfbmFtZSAgICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoImxpYmp4bCBKUEVHIFhMIGRlY29k ZXIiKSwKKyAgICAudHlwZSAgICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCisgICAgLmlk ICAgICAgICAgICAgID0gQVZfQ09ERUNfSURfSlBFR1hMLAorICAgIC5wcml2X2RhdGFfc2l6ZSA9 IHNpemVvZihMaWJKeGxEZWNvZGVDb250ZXh0KSwKKyAgICAuaW5pdCAgICAgICAgICAgPSBsaWJq eGxfZGVjb2RlX2luaXQsCisgICAgLmRlY29kZSAgICAgICAgID0gbGlianhsX2RlY29kZV9mcmFt ZSwKKyAgICAuY2xvc2UgICAgICAgICAgPSBsaWJqeGxfZGVjb2RlX2Nsb3NlLAorICAgIC5jYXBh YmlsaXRpZXMgICA9IEFWX0NPREVDX0NBUF9EUjEgfCBBVl9DT0RFQ19DQVBfT1RIRVJfVEhSRUFE UywKKyAgICAuY2Fwc19pbnRlcm5hbCAgPSBGRl9DT0RFQ19DQVBfQVVUT19USFJFQURTIHwgRkZf Q09ERUNfQ0FQX0lOSVRfQ0xFQU5VUCwKKyAgICAud3JhcHBlcl9uYW1lICAgPSAibGlianhsIiwK K307Ci0tIAoyLjM1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcK aHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1 YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RA ZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K