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 A44564279E for ; Fri, 7 Jan 2022 09:02:08 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0EFC368A927; Fri, 7 Jan 2022 11:02:01 +0200 (EET) Received: from mail-qk1-f182.google.com (mail-qk1-f182.google.com [209.85.222.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0BDC068AA6A for ; Fri, 7 Jan 2022 11:01:55 +0200 (EET) Received: by mail-qk1-f182.google.com with SMTP id m2so5321031qkd.8 for ; Fri, 07 Jan 2022 01:01:54 -0800 (PST) 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=XI2jKw+xBNNeW/WLPCe6+y2XInocUAnScpKYCRuPiS4=; b=T/uews4xoah31OT6QV94CEV9x6Zos4VfKIsN6Y0MObHycbLe0XFiUwhCbZvLK2TNLO XJsnt7HmGcS3ouS7BFlXO9pRq0+ftQ2tHF0sN/b9+F2NpPcr0PbBhJLKavAeEF3c26c0 nPZI25eK1PNICRwvGHCqo7T3EnYuczTptH2STk9Pz9X0ZaYHnLQS1CAyVh1EX7HTiJL/ JnAvr/mJGGgAfih75SeI7nTRLPK2SNa4Sguk7s1bPEV2R+Wob16YqR0kkXOpiuYmzqiv gxenUCHF8gTD30n2o9Gj1t+XdggdMnYQpioRE58xOuNJFUqjvefVrRdmBwDsIauoGh00 L3QQ== 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=XI2jKw+xBNNeW/WLPCe6+y2XInocUAnScpKYCRuPiS4=; b=m9OMxgSaJJDck5NmViUDvO/r9kr4eWs0Na2tVDSXtGApxFfXVQOMrOaQLel4d+Eil5 qWrcPVuplWo/WTQKM7egKVGZHBp0lZ7HNViZFyiuiJ5J7PzJlDZtKhiE8CujaQkFKkYr YKNNAZO+QmbA9Z/mG2sb857+XU7Z7+hVwKY3J4vJwT68JCCvycMs3+amzdHiXEQoY/u0 AF+biIWCz3HLvqL3X+7HIkhIL9EdYWLpztsakUbb1DoRBlxPoGF8Jpck8xgSNp+0pJel v4s4l9oiLSA4JAMC2HLCrT64ffC0ldOizpFp1gKXPpZaCt84R4NjSj0piXL9hes5XkfX LD3Q== X-Gm-Message-State: AOAM531Y/tgUhDV7CwrNGLcHE5mzd9Tmjjn/tbCjO+l+GYrbI7Hk3x5k wPtD57q5ZPflY/6AuACqxOapqt+1Y0s= X-Google-Smtp-Source: ABdhPJy6NzFJK/RYDsapVT5PrY3s4SukeQzWBRcRCgquk1GA+zQ8OF0QdVRL65qbaKEYfRhCGojAHA== X-Received: by 2002:a37:8006:: with SMTP id b6mr4243727qkd.433.1641546113586; Fri, 07 Jan 2022 01:01:53 -0800 (PST) Received: from gauss.local (c-68-41-54-207.hsd1.mi.comcast.net. [68.41.54.207]) by smtp.gmail.com with ESMTPSA id u17sm3077071qki.2.2022.01.07.01.01.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Jan 2022 01:01:53 -0800 (PST) From: Leo Izen To: ffmpeg-devel@ffmpeg.org Date: Fri, 7 Jan 2022 04:01:08 -0500 Message-Id: <20220107090111.243853-3-leo.izen@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220107090111.243853-1-leo.izen@gmail.com> References: <20220107090111.243853-1-leo.izen@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 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 Y29kZWMvbGlianhsLmMgICAgICAgfCAgNzAgKysrKysrKysrKwogbGliYXZjb2RlYy9saWJqeGwu aCAgICAgICB8ICA0OCArKysrKysrCiBsaWJhdmNvZGVjL2xpYmp4bGRlYy5jICAgIHwgMjc2ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDQw OSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9saWJqeGwuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlianhsLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWJhdmNvZGVjL2xpYmp4bGRlYy5jCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlO VEFJTkVSUwppbmRleCAxN2MwMTA0NjcyLi5hNjQ5MjIzYmNiIDEwMDY0NAotLS0gYS9NQUlOVEFJ TkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTk0LDYgKzE5NCw3IEBAIENvZGVjczoKICAgbGli Y29kZWMyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICBUb21hcyBIw6RyZGluCiAgIGxpYmRp cmFjKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF2aWQgQ29ucmFkCiAgIGxpYmRhdnMy LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHVpd2VuIFJlbgorICBsaWJqeGwqLmMsIGxp Ymp4bC5oICAgICAgICAgICAgICAgICAgIExlbyBJemVuCiAgIGxpYmdzbS5jICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTWljaGVsIEJhcmRpYXV4CiAgIGxpYmt2YXphYXIuYyAgICAgICAg ICAgICAgICAgICAgICAgICAgQXJ0dHUgWWzDpC1PdXRpbmVuCiAgIGxpYm9wZW5oMjY0ZW5jLmMg ICAgICAgICAgICAgICAgICAgICAgTWFydGluIFN0b3Jzam8sIExpbmppZSBGdQpkaWZmIC0tZ2l0 IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IDEyMjVmYWYxNWEuLmU1ZWI4YzViYTUgMTAw NzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTI0MSw2ICsyNDEsNyBAQCBF eHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6CiAgIC0tZW5hYmxlLWxpYmllYzYxODgzICAgICBlbmFi bGUgaWVjNjE4ODMgdmlhIGxpYmllYzYxODgzIFtub10KICAgLS1lbmFibGUtbGliaWxiYyAgICAg ICAgIGVuYWJsZSBpTEJDIGRlL2VuY29kaW5nIHZpYSBsaWJpbGJjIFtub10KICAgLS1lbmFibGUt bGliamFjayAgICAgICAgIGVuYWJsZSBKQUNLIGF1ZGlvIHNvdW5kIHNlcnZlciBbbm9dCisgIC0t ZW5hYmxlLWxpYmp4bCAgICAgICAgICBlbmFibGUgSlBFRyBYTCBkZWNvZGluZyB2aWEgbGlianhs IFtub10KICAgLS1lbmFibGUtbGlia2x2YW5jICAgICAgIGVuYWJsZSBLZXJuZWwgTGFicyBWQU5D IHByb2Nlc3NpbmcgW25vXQogICAtLWVuYWJsZS1saWJrdmF6YWFyICAgICAgZW5hYmxlIEhFVkMg ZW5jb2RpbmcgdmlhIGxpYmt2YXphYXIgW25vXQogICAtLWVuYWJsZS1saWJsZW5zZnVuICAgICAg ZW5hYmxlIGxlbnNmdW4gbGVucyBjb3JyZWN0aW9uIFtub10KQEAgLTE4MzIsNiArMTgzMyw3IEBA IEVYVEVSTkFMX0xJQlJBUllfTElTVD0iCiAgICAgbGliaWVjNjE4ODMKICAgICBsaWJpbGJjCiAg ICAgbGliamFjaworICAgIGxpYmp4bAogICAgIGxpYmtsdmFuYwogICAgIGxpYmt2YXphYXIKICAg ICBsaWJtb2RwbHVnCkBAIC0zMzM0LDYgKzMzMzYsNyBAQCBsaWJnc21fbXNfZGVjb2Rlcl9kZXBz PSJsaWJnc20iCiBsaWJnc21fbXNfZW5jb2Rlcl9kZXBzPSJsaWJnc20iCiBsaWJpbGJjX2RlY29k ZXJfZGVwcz0ibGliaWxiYyIKIGxpYmlsYmNfZW5jb2Rlcl9kZXBzPSJsaWJpbGJjIgorbGlianhs X2RlY29kZXJfZGVwcz0ibGlianhsIGxpYmp4bF90aHJlYWRzIgogbGlia3ZhemFhcl9lbmNvZGVy X2RlcHM9ImxpYmt2YXphYXIiCiBsaWJtb2RwbHVnX2RlbXV4ZXJfZGVwcz0ibGlibW9kcGx1ZyIK IGxpYm1wM2xhbWVfZW5jb2Rlcl9kZXBzPSJsaWJtcDNsYW1lIgpAQCAtNjU0OCw2ICs2NTUxLDgg QEAgZW5hYmxlZCBsaWJnc20gICAgICAgICAgICAmJiB7IGZvciBnc21faGRyIGluICJnc20uaCIg ImdzbS9nc20uaCI7IGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNr X2xpYiBsaWJnc20gIiR7Z3NtX2hkcn0iIGdzbV9jcmVhdGUgLWxnc20gJiYgYnJlYWs7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSB8fCBkaWUgIkVSUk9SOiBsaWJnc20gbm90 IGZvdW5kIjsgfQogZW5hYmxlZCBsaWJpbGJjICAgICAgICAgICAmJiByZXF1aXJlIGxpYmlsYmMg aWxiYy5oIFdlYlJ0Y0lsYmNmaXhfSW5pdERlY29kZSAtbGlsYmMgJHB0aHJlYWRzX2V4dHJhbGli cworZW5hYmxlZCBsaWJqeGwgICAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGlianhs ICJsaWJqeGwgPj0gMC43LjAiIGp4bC9kZWNvZGUuaCBKeGxEZWNvZGVyVmVyc2lvbiAmJgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlX3BrZ19jb25maWcgbGlianhsX3RocmVh ZHMgImxpYmp4bF90aHJlYWRzID49IDAuNy4wIiBqeGwvdGhyZWFkX3BhcmFsbGVsX3J1bm5lci5o IEp4bFRocmVhZFBhcmFsbGVsUnVubmVyCiBlbmFibGVkIGxpYmtsdmFuYyAgICAgICAgICYmIHJl cXVpcmUgbGlia2x2YW5jIGxpYmtsdmFuYy92YW5jLmgga2x2YW5jX2NvbnRleHRfY3JlYXRlIC1s a2x2YW5jCiBlbmFibGVkIGxpYmt2YXphYXIgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBs aWJrdmF6YWFyICJrdmF6YWFyID49IDAuOC4xIiBrdmF6YWFyLmgga3Z6X2FwaV9nZXQKIGVuYWJs ZWQgbGlibGVuc2Z1biAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmxlbnNmdW4gbGVu c2Z1biBsZW5zZnVuLmggbGZfZGJfbmV3CmRpZmYgLS1naXQgYS9kb2MvZ2VuZXJhbF9jb250ZW50 cy50ZXhpIGIvZG9jL2dlbmVyYWxfY29udGVudHMudGV4aQppbmRleCBkZjE2OTJjOGRmLi4yNzc4 ZTIwMDkxIDEwMDY0NAotLS0gYS9kb2MvZ2VuZXJhbF9jb250ZW50cy50ZXhpCisrKyBiL2RvYy9n ZW5lcmFsX2NvbnRlbnRzLnRleGkKQEAgLTE3MSw2ICsxNzEsMTMgQEAgR28gdG8gQHVybHtodHRw czovL2dpdGh1Yi5jb20vVGltb3RoeUd1L2xpYmlsYmN9IGFuZCBmb2xsb3cgdGhlIGluc3RydWN0 aW9ucyBmb3IKIGluc3RhbGxpbmcgdGhlIGxpYnJhcnkuIFRoZW4gcGFzcyBAY29kZXstLWVuYWJs ZS1saWJpbGJjfSB0byBjb25maWd1cmUgdG8KIGVuYWJsZSBpdC4KIAorQHNlY3Rpb24gbGlianhs CisKK0pQRUcgWEwgaXMgYW4gaW1hZ2UgZm9ybWF0IGludGVuZGVkIHRvIGZ1bGx5IHJlcGxhY2Ug bGVnYWN5IEpQRUcgZm9yIGFuIGV4dGVuZGVkCitwZXJpb2Qgb2YgbGlmZS4gU2VlIEB1cmx7aHR0 cHM6Ly9qcGVneGwuaW5mby99IGZvciBtb3JlIGluZm9ybWF0aW9uLCBhbmQgc2VlCitAdXJse2h0 dHBzOi8vZ2l0aHViLmNvbS9saWJqeGwvbGlianhsfSBmb3IgdGhlIGxpYnJhcnkgc291cmNlLiBZ b3UgY2FuIHBhc3MKK0Bjb2Rley0tZW5hYmxlLWxpYmp4bH0gdG8gY29uZmlndXJlIGluIG9yZGVy IGVuYWJsZSB0aGUgbGlianhsIHdyYXBwZXIuCisKIEBzZWN0aW9uIGxpYnZweAogCiBGRm1wZWcg Y2FuIG1ha2UgdXNlIG9mIHRoZSBsaWJ2cHggbGlicmFyeSBmb3IgVlA4L1ZQOSBkZWNvZGluZyBh bmQgZW5jb2RpbmcuCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2VmaWxlIGIvbGliYXZjb2Rl Yy9NYWtlZmlsZQppbmRleCA0MjMwMjJlNzE0Li5kNTM4YzNhNGQxIDEwMDY0NAotLS0gYS9saWJh dmNvZGVjL01ha2VmaWxlCisrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKQEAgLTEwNTUsNiArMTA1 NSw3IEBAIE9CSlMtJChDT05GSUdfTElCR1NNX01TX0RFQ09ERVIpICAgICAgICAgICs9IGxpYmdz bWRlYy5vCiBPQkpTLSQoQ09ORklHX0xJQkdTTV9NU19FTkNPREVSKSAgICAgICAgICArPSBsaWJn c21lbmMubwogT0JKUy0kKENPTkZJR19MSUJJTEJDX0RFQ09ERVIpICAgICAgICAgICAgKz0gbGli aWxiYy5vCiBPQkpTLSQoQ09ORklHX0xJQklMQkNfRU5DT0RFUikgICAgICAgICAgICArPSBsaWJp bGJjLm8KK09CSlMtJChDT05GSUdfTElCSlhMX0RFQ09ERVIpICAgICAgICAgICAgICs9IGxpYmp4 bGRlYy5vIGxpYmp4bC5vCiBPQkpTLSQoQ09ORklHX0xJQktWQVpBQVJfRU5DT0RFUikgICAgICAg ICArPSBsaWJrdmF6YWFyLm8KIE9CSlMtJChDT05GSUdfTElCTVAzTEFNRV9FTkNPREVSKSAgICAg ICAgICs9IGxpYm1wM2xhbWUubwogT0JKUy0kKENPTkZJR19MSUJPUEVOQ09SRV9BTVJOQl9ERUNP REVSKSAgKz0gbGlib3BlbmNvcmUtYW1yLm8KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWxsY29k ZWNzLmMgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCmluZGV4IGQxZTEwMTk3ZGUuLmI0MWRhM2Iw ZGUgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKKysrIGIvbGliYXZjb2RlYy9h bGxjb2RlY3MuYwpAQCAtNzQ0LDYgKzc0NCw3IEBAIGV4dGVybiBjb25zdCBBVkNvZGVjIGZmX2xp YmdzbV9tc19lbmNvZGVyOwogZXh0ZXJuIGNvbnN0IEFWQ29kZWMgZmZfbGliZ3NtX21zX2RlY29k ZXI7CiBleHRlcm4gY29uc3QgQVZDb2RlYyBmZl9saWJpbGJjX2VuY29kZXI7CiBleHRlcm4gY29u c3QgQVZDb2RlYyBmZl9saWJpbGJjX2RlY29kZXI7CitleHRlcm4gY29uc3QgQVZDb2RlYyBmZl9s aWJqeGxfZGVjb2RlcjsKIGV4dGVybiBjb25zdCBBVkNvZGVjIGZmX2xpYm1wM2xhbWVfZW5jb2Rl cjsKIGV4dGVybiBjb25zdCBBVkNvZGVjIGZmX2xpYm9wZW5jb3JlX2Ftcm5iX2VuY29kZXI7CiBl eHRlcm4gY29uc3QgQVZDb2RlYyBmZl9saWJvcGVuY29yZV9hbXJuYl9kZWNvZGVyOwpkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy9saWJqeGwuYyBiL2xpYmF2Y29kZWMvbGlianhsLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMjA0ZDkxZDhhOAotLS0gL2Rldi9udWxsCisr KyBiL2xpYmF2Y29kZWMvbGlianhsLmMKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIEpQRUcgWEwg ZGUvZW5jb2RpbmcgdmlhIGxpYmp4bCwgY29tbW9uIHN1cHBvcnQgaW1wbGVtZW50YXRpb24KKyAq IENvcHlyaWdodCAoYykgMjAyMSBMZW8gSXplbiA8bGVvLml6ZW5AZ21haWwuY29tPgorICoKKyAq IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp Y2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiBKUEVH IFhMIHZpYSBsaWJqeGwgY29tbW9uIHN1cHBvcnQgaW1wbGVtZW50YXRpb24KKyAqLworCisjaW5j bHVkZSAibGliYXZ1dGlsL2NwdS5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKKworI2lu Y2x1ZGUgPGp4bC9tZW1vcnlfbWFuYWdlci5oPgorI2luY2x1ZGUgImxpYmp4bC5oIgorCitzaXpl X3QgZmZfbGlianhsX2dldF90aHJlYWRjb3VudChpbnQgdGhyZWFkcykKK3sKKyAgICBpZiAodGhy ZWFkcyA8PSAwKQorICAgICAgICByZXR1cm4gYXZfY3B1X2NvdW50KCk7CisgICAgaWYgKHRocmVh ZHMgPT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRocmVhZHM7Cit9CisKKy8q KgorICogV3JhcHBlciBhcm91bmQgYXZfbWFsbG9jIHVzZWQgYXMgYSBqcGVneGxfYWxsb2NfZnVu Yy4KKyAqCisgKiBAcGFyYW0gIG9wYXF1ZSBvcGFxdWUgcG9pbnRlciBmb3IganBlZ3hsX2FsbG9j X2Z1bmMsIGFsd2F5cyBpZ25vcmVkCisgKiBAcGFyYW0gIHNpemUgU2l6ZSBpbiBieXRlcyBmb3Ig dGhlIG1lbW9yeSBibG9jayB0byBiZSBhbGxvY2F0ZWQKKyAqIEByZXR1cm4gUG9pbnRlciB0byB0 aGUgYWxsb2NhdGVkIGJsb2NrLCBvciBgTlVMTGAgaWYgaXQgY2Fubm90IGJlIGFsbG9jYXRlZAor ICovCitzdGF0aWMgdm9pZCAqbGlianhsX2F2X21hbGxvYyh2b2lkICpvcGFxdWUsIHNpemVfdCBz aXplKQoreworICAgIHJldHVybiBhdl9tYWxsb2Moc2l6ZSk7Cit9CisKKy8qKgorICogV3JhcHBl ciBhcm91bmQgYXZfZnJlZSB1c2VkIGFzIGEganBlZ3hsX2ZyZWVfZnVuYy4KKyAqCisgKiBAcGFy YW0gb3BhcXVlICBvcGFxdWUgcG9pbnRlciBmb3IganBlZ3hsX2ZyZWVfZnVuYywgYWx3YXlzIGln bm9yZWQKKyAqIEBwYXJhbSBhZGRyZXNzIFBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBibG9jaywg dG8gZnJlZS4gYE5VTExgIHBlcm1pdHRlZCBhcyBhIG5vLW9wLgorICovCitzdGF0aWMgdm9pZCBs aWJqeGxfYXZfZnJlZSh2b2lkICpvcGFxdWUsIHZvaWQgKmFkZHJlc3MpCit7CisgICAgYXZfZnJl ZShhZGRyZXNzKTsKK30KKwordm9pZCBmZl9saWJqeGxfaW5pdF9tZW1vcnlfbWFuYWdlcihKeGxN ZW1vcnlNYW5hZ2VyICptYW5hZ2VyKQoreworICAgIG1hbmFnZXItPm9wYXF1ZSA9IE5VTEw7Cisg ICAgbWFuYWdlci0+YWxsb2MgPSAmbGlianhsX2F2X21hbGxvYzsKKyAgICBtYW5hZ2VyLT5mcmVl ID0gJmxpYmp4bF9hdl9mcmVlOworfQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9saWJqeGwuaCBi L2xpYmF2Y29kZWMvbGlianhsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uNTM4N2M0MzhmZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvbGlianhsLmgKQEAg LTAsMCArMSw0OCBAQAorLyoKKyAqIEpQRUcgWEwgZGUvZW5jb2RpbmcgdmlhIGxpYmp4bCwgY29t bW9uIHN1cHBvcnQgaGVhZGVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTGVvIEl6ZW4gPGxlby5p emVuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgor ICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKwor LyoqCisgKiBAZmlsZQorICogSlBFRyBYTCB2aWEgbGlianhsIGNvbW1vbiBzdXBwb3J0IGhlYWRl cgorICovCisKKyNpZm5kZWYgQVZDT0RFQ19MSUJKWExfSAorI2RlZmluZSBBVkNPREVDX0xJQkpY TF9ICisKKyNpbmNsdWRlIDxqeGwvbWVtb3J5X21hbmFnZXIuaD4KKworLyoqCisgKiBUcmFuc2Zv cm0gdGhyZWFkY291bnQgaW4gZmZtcGVnIHRvIG9uZSB1c2VkIGJ5IGxpYmp4bC4KKyAqCisgKiBA cGFyYW0gIHRocmVhZHMgZmZtcGVnJ3MgdGhyZWFkcyBBVk9wdGlvbgorICogQHJldHVybiAgICAg ICAgIHRocmVhZCBjb3VudCBmb3IgbGlianhsJ3MgcGFyYWxsZWwgcnVubmVyCisgKi8KK3NpemVf dCBmZl9saWJqeGxfZ2V0X3RocmVhZGNvdW50KGludCB0aHJlYWRzKTsKKworLyoqCisgKiBJbml0 aWFsaXplIGFuZCBwb3B1bGF0ZSBhIEp4bE1lbW9yeU1hbmFnZXIKKyAqIHdpdGggYXZfbWFsbG9j KCkgYW5kIGF2X2ZyZWUoKSBzbyBsaWJqeGwgd2lsbCB1c2UgdGhlc2UKKyAqIGZ1bmN0aW9ucy4K KyAqIEBwYXJhbSBtYW5hZ2VyIGEgcG9pbnRlciB0byBhIEp4bE1lbW9yeU1hbmFnZXIgc3RydWN0 CisgKi8KK3ZvaWQgZmZfbGlianhsX2luaXRfbWVtb3J5X21hbmFnZXIoSnhsTWVtb3J5TWFuYWdl ciAqbWFuYWdlcik7CisKKyNlbmRpZiAvKiBBVkNPREVDX0xJQkpYTF9IICovCmRpZmYgLS1naXQg YS9saWJhdmNvZGVjL2xpYmp4bGRlYy5jIGIvbGliYXZjb2RlYy9saWJqeGxkZWMuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iYTRhM2M0ZjNhCi0tLSAvZGV2L251bGwK KysrIGIvbGliYXZjb2RlYy9saWJqeGxkZWMuYwpAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqIEpQ RUcgWEwgZGVjb2Rpbmcgc3VwcG9ydCB2aWEgbGlianhsCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEg TGVvIEl6ZW4gPGxlby5pemVuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBv ZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1w ZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZt cGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJ bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEz MDEgVVNBCisgKi8KKworLyoqCisgKiBAZmlsZQorICogSlBFRyBYTCBkZWNvZGVyIHVzaW5nIGxp Ymp4bAorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKKyNpbmNsdWRlICJs aWJhdnV0aWwvY29tbW9uLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2Vycm9yLmgiCisjaW5jbHVk ZSAibGliYXZ1dGlsL21lbS5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKKyNpbmNsdWRl ICJsaWJhdnV0aWwvcGl4ZGVzYy5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9waXhmbXQuaCIKKyNp bmNsdWRlICJsaWJhdnV0aWwvZnJhbWUuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvdmVyc2lvbi5o IgorCisjaW5jbHVkZSAiYXZjb2RlYy5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisKKyNpbmNs dWRlIDxqeGwvZGVjb2RlLmg+CisjaW5jbHVkZSA8anhsL3RocmVhZF9wYXJhbGxlbF9ydW5uZXIu aD4KKyNpbmNsdWRlICJsaWJqeGwuaCIKKwordHlwZWRlZiBzdHJ1Y3QgTGliSnhsRGVjb2RlQ29u dGV4dCB7CisgICAgdm9pZCAqcnVubmVyOworICAgIEp4bERlY29kZXIgKmRlY29kZXI7CisgICAg SnhsQmFzaWNJbmZvIGJhc2ljX2luZm87CisgICAgSnhsUGl4ZWxGb3JtYXQganhsX3BpeGZtdDsK KyAgICBKeGxEZWNvZGVyU3RhdHVzIGV2ZW50czsKK30gTGliSnhsRGVjb2RlQ29udGV4dDsKKwor c3RhdGljIGludCBsaWJqeGxfaW5pdF9qeGxfZGVjb2RlcihBVkNvZGVjQ29udGV4dCAqYXZjdHgp Cit7CisgICAgTGliSnhsRGVjb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKKwor ICAgIGN0eC0+ZXZlbnRzID0gSlhMX0RFQ19CQVNJQ19JTkZPIHwgSlhMX0RFQ19GVUxMX0lNQUdF IHwgSlhMX0RFQ19GUkFNRTsKKyAgICBpZiAoSnhsRGVjb2RlclN1YnNjcmliZUV2ZW50cyhjdHgt PmRlY29kZXIsIGN0eC0+ZXZlbnRzKSAhPSBKWExfREVDX1NVQ0NFU1MpIHsKKyAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFcnJvciBzdWJzY3JpYmluZyB0byBKWEwgZXZlbnRz Iik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIGlmIChK eGxEZWNvZGVyU2V0UGFyYWxsZWxSdW5uZXIoY3R4LT5kZWNvZGVyLCBKeGxUaHJlYWRQYXJhbGxl bFJ1bm5lciwgY3R4LT5ydW5uZXIpICE9IEpYTF9ERUNfU1VDQ0VTUykgeworICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBzZXQgSnhsVGhyZWFkUGFyYWxsZWxS dW5uZXIiKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAg bWVtc2V0KCZjdHgtPmJhc2ljX2luZm8sIDAsIHNpemVvZihKeGxCYXNpY0luZm8pKTsKKyAgICBt ZW1zZXQoJmN0eC0+anhsX3BpeGZtdCwgMCwgc2l6ZW9mKEp4bFBpeGVsRm9ybWF0KSk7CisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBhdl9jb2xkIGludCBsaWJqeGxfZGVjb2RlX2luaXQoQVZD b2RlY0NvbnRleHQgKmF2Y3R4KQoreworICAgIExpYkp4bERlY29kZUNvbnRleHQgKmN0eCA9IGF2 Y3R4LT5wcml2X2RhdGE7CisgICAgSnhsTWVtb3J5TWFuYWdlciBtYW5hZ2VyOworCisgICAgZmZf bGlianhsX2luaXRfbWVtb3J5X21hbmFnZXIoJm1hbmFnZXIpOworICAgIGN0eC0+ZGVjb2RlciA9 IEp4bERlY29kZXJDcmVhdGUoJm1hbmFnZXIpOworICAgIGlmICghY3R4LT5kZWNvZGVyKSB7Cisg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBKeGxE ZWNvZGVyIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAg IGN0eC0+cnVubmVyID0gSnhsVGhyZWFkUGFyYWxsZWxSdW5uZXJDcmVhdGUoJm1hbmFnZXIsIGZm X2xpYmp4bF9nZXRfdGhyZWFkY291bnQoYXZjdHgtPnRocmVhZF9jb3VudCkpOworICAgIGlmICgh Y3R4LT5ydW5uZXIpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWls ZWQgdG8gY3JlYXRlIEp4bFRocmVhZFBhcmFsbGVsUnVubmVyIik7CisgICAgICAgIHJldHVybiBB VkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIHJldHVybiBsaWJqeGxfaW5pdF9qeGxfZGVj b2RlcihhdmN0eCk7Cit9CisKK3N0YXRpYyBlbnVtIEFWUGl4ZWxGb3JtYXQgbGlianhsX2dldF9w aXhfZm10KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgSnhsQmFzaWNJbmZvICpiYXNpY19pbmZvLCBK eGxQaXhlbEZvcm1hdCAqZm9ybWF0KQoreworICAgIGZvcm1hdC0+ZW5kaWFubmVzcyA9IEpYTF9M SVRUTEVfRU5ESUFOOworICAgIGZvcm1hdC0+bnVtX2NoYW5uZWxzID0gYmFzaWNfaW5mby0+bnVt X2NvbG9yX2NoYW5uZWxzICsgKGJhc2ljX2luZm8tPmFscGhhX2JpdHMgPiAwKTsKKyAgICAvKiBh dl9tYWxsb2MgaGFuZGxlcyBhbGlnbm1lbnQgYWxyZWFkeSAqLworICAgIGZvcm1hdC0+YWxpZ24g PSAxOworICAgIC8qIEdyYXkgKi8KKyAgICBpZiAoYmFzaWNfaW5mby0+bnVtX2NvbG9yX2NoYW5u ZWxzID09IDEpIHsKKyAgICAgICAgaWYgKGJhc2ljX2luZm8tPmJpdHNfcGVyX3NhbXBsZSA8PSA4 KSB7CisgICAgICAgICAgICBmb3JtYXQtPmRhdGFfdHlwZSA9IEpYTF9UWVBFX1VJTlQ4OworICAg ICAgICAgICAgcmV0dXJuIGJhc2ljX2luZm8tPmFscGhhX2JpdHMgPyBBVl9QSVhfRk1UX1lBOCA6 IEFWX1BJWF9GTVRfR1JBWTg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJhc2ljX2luZm8tPmV4 cG9uZW50X2JpdHNfcGVyX3NhbXBsZSB8fCBiYXNpY19pbmZvLT5iaXRzX3Blcl9zYW1wbGUgPiAx NikgeworICAgICAgICAgICAgaWYgKGJhc2ljX2luZm8tPmFscGhhX2JpdHMpCisgICAgICAgICAg ICAgICAgcmV0dXJuIEFWX1BJWF9GTVRfTk9ORTsKKyAgICAgICAgICAgIGZvcm1hdC0+ZGF0YV90 eXBlID0gSlhMX1RZUEVfRkxPQVQ7CisgICAgICAgICAgICByZXR1cm4gQVZfUElYX0ZNVF9HUkFZ RjMyTEU7CisgICAgICAgIH0KKyAgICAgICAgZm9ybWF0LT5kYXRhX3R5cGUgPSBKWExfVFlQRV9V SU5UMTY7CisgICAgICAgIHJldHVybiBiYXNpY19pbmZvLT5hbHBoYV9iaXRzID8gQVZfUElYX0ZN VF9ZQTE2TEUgOiBBVl9QSVhfRk1UX0dSQVkxNkxFOworICAgIH0KKyAgICAvKiByZ2Igb25seSAq LworICAgIC8qIGxpYmp4bCBvbmx5IHN1cHBvcnRzIHBhY2tlZCBSR0IgYW5kIGdyYXkgb3V0cHV0 IGF0IHRoZSBtb21lbnQgKi8KKyAgICBpZiAoYmFzaWNfaW5mby0+bnVtX2NvbG9yX2NoYW5uZWxz ID09IDMpIHsKKyAgICAgICAgaWYgKGJhc2ljX2luZm8tPmJpdHNfcGVyX3NhbXBsZSA8PSA4KSB7 CisgICAgICAgICAgICBmb3JtYXQtPmRhdGFfdHlwZSA9IEpYTF9UWVBFX1VJTlQ4OworICAgICAg ICAgICAgcmV0dXJuIGJhc2ljX2luZm8tPmFscGhhX2JpdHMgPyBBVl9QSVhfRk1UX1JHQkEgOiBB Vl9QSVhfRk1UX1JHQjI0OworICAgICAgICB9CisgICAgICAgIGlmIChiYXNpY19pbmZvLT5iaXRz X3Blcl9zYW1wbGUgPiAxNikKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5J TkcsICJEb3duc2FtcGxpbmcgbGFyZ2VyIGludGVnZXIgdG8gMTYtYml0IHZpYSBsaWJqeGxcbiIp OworICAgICAgICBpZiAoYmFzaWNfaW5mby0+ZXhwb25lbnRfYml0c19wZXJfc2FtcGxlKQorICAg ICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIkRvd25zYW1wbGluZyBmbG9h dCB0byAxNi1iaXQgaW50ZWdlciB2aWEgbGlianhsXG4iKTsKKyAgICAgICAgZm9ybWF0LT5kYXRh X3R5cGUgPSBKWExfVFlQRV9VSU5UMTY7CisgICAgICAgIHJldHVybiBiYXNpY19pbmZvLT5hbHBo YV9iaXRzID8gQVZfUElYX0ZNVF9SR0JBNjRMRSA6IEFWX1BJWF9GTVRfUkdCNDhMRTsKKyAgICB9 CisgICAgcmV0dXJuIEFWX1BJWF9GTVRfTk9ORTsKK30KKworc3RhdGljIHZvaWQgbGlianhsX3Jv d19maWxsKHZvaWQgKmF2ZnJhbWUsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IG51bV9waXhl bHMsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBBVkZyYW1lICpmcmFtZSA9IGF2ZnJhbWU7 CisgICAgaW50IGJ5dGVzID0gYXZfZ2V0X3BhZGRlZF9iaXRzX3Blcl9waXhlbChhdl9waXhfZm10 X2Rlc2NfZ2V0KGZyYW1lLT5mb3JtYXQpKSAvIDg7CisgICAgc2l6ZV90IG9mZnNldCA9IHkgKiBm cmFtZS0+bGluZXNpemVbMF0gKyB4ICogYnl0ZXM7CisgICAgbWVtY3B5KGZyYW1lLT5kYXRhWzBd ICsgb2Zmc2V0LCBwaXhlbHMsIG51bV9waXhlbHMgKiBieXRlcyk7Cit9CisKK3N0YXRpYyBpbnQg bGlianhsX2RlY29kZV9mcmFtZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIHZvaWQgKmF2ZnJhbWUs IGludCAqZ290X2ZyYW1lLCBBVlBhY2tldCAqYXZwa3QpCit7CisgICAgTGliSnhsRGVjb2RlQ29u dGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICB1aW50OF90ICpidWYgPSBhdnBrdC0+ ZGF0YTsKKyAgICBzaXplX3QgcmVtYWluaW5nID0gYXZwa3QtPnNpemU7CisgICAgQVZGcmFtZSAq ZnJhbWUgPSBhdmZyYW1lOworICAgIEp4bERlY29kZXJTdGF0dXMgc3RhdHVzOworICAgIGludCBm Zl9zdGF0dXM7CisgICAgKmdvdF9mcmFtZSA9IDA7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAg IC8qCisgICAgICAgICAqIGl0IG9ubHkgcmV0dXJucyBKWExfREVDX0VSUk9SIGhlcmUgaWYgdGhl IGlucHV0CisgICAgICAgICAqIHdhcyBub3QgcmVsZWFzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0 aGlzIHdhcyBjYWxsZWQKKyAgICAgICAgICogaWYgdGhpcyBoYXBwZW5zLCBpdCdzIGEgcHJvZ3Jh bW1lciBlcnJvcgorICAgICAgICAgKi8KKyAgICAgICAgc3RhdHVzID0gSnhsRGVjb2RlclNldElu cHV0KGN0eC0+ZGVjb2RlciwgYnVmLCByZW1haW5pbmcpOworICAgICAgICBhdl9hc3NlcnQwKHN0 YXR1cyAhPSBKWExfREVDX0VSUk9SKTsKKworICAgICAgICBzdGF0dXMgPSBKeGxEZWNvZGVyUHJv Y2Vzc0lucHV0KGN0eC0+ZGVjb2Rlcik7CisgICAgICAgIC8qCisgICAgICAgICAqIEp4bERlY29k ZXJSZWxlYXNlSW5wdXQgcmV0dXJucyB0aGUgbnVtYmVyCisgICAgICAgICAqIG9mIGJ5dGVzIHJl bWFpbmluZyB0byBiZSByZWFkLCByYXRoZXIgdGhhbgorICAgICAgICAgKiB0aGUgbnVtYmVyIG9m IGJ5dGVzIHRoYXQgaXQgZGlkIHJlYWQKKyAgICAgICAgICovCisgICAgICAgIHJlbWFpbmluZyA9 IEp4bERlY29kZXJSZWxlYXNlSW5wdXQoY3R4LT5kZWNvZGVyKTsKKyAgICAgICAgYnVmID0gYXZw a3QtPmRhdGEgKyBhdnBrdC0+c2l6ZSAtIHJlbWFpbmluZzsKKworICAgICAgICBzd2l0Y2goc3Rh dHVzKSB7CisgICAgICAgIGNhc2UgSlhMX0RFQ19FUlJPUjoKKyAgICAgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5rbm93biBsaWJqeGwgZGVjb2RlIGVycm9yXG4iKTsKKyAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgICAgICBjYXNlIEpYTF9ERUNf TkVFRF9NT1JFX0lOUFVUOgorICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA9PSAwKSB7CisgICAg ICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIlVuZXhwZWN0ZWQgZW5k IG9mIEpYTCBjb2Rlc3RyZWFtXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihF QUdBSU4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df REVCVUcsICJORUVEX01PUkVfSU5QVVQgZXZlbnQgZW1pdHRlZFxuIik7CisgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgY2FzZSBKWExfREVDX0JBU0lDX0lORk86CisgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIkJBU0lDX0lORk8gZXZlbnQgZW1pdHRlZFxuIik7 CisgICAgICAgICAgICBpZiAoSnhsRGVjb2RlckdldEJhc2ljSW5mbyhjdHgtPmRlY29kZXIsICZj dHgtPmJhc2ljX2luZm8pICE9IEpYTF9ERUNfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIC8q CisgICAgICAgICAgICAgICAgICogdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuCisgICAgICAgICAg ICAgICAgICogaWYgaXQgZG9lcyBpdCBpcyBsaWtlbHkgYSBsaWJqeGwgZGVjb2RlciBidWcKKyAg ICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIkJhZCBsaWJqeGwgYmFzaWMgaW5mbyBldmVudFxuIik7CisgICAgICAgICAgICAgICAg cmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdmN0 eC0+cGl4X2ZtdCA9IGxpYmp4bF9nZXRfcGl4X2ZtdChhdmN0eCwgJmN0eC0+YmFzaWNfaW5mbywg JmN0eC0+anhsX3BpeGZtdCk7CisgICAgICAgICAgICBpZiAoYXZjdHgtPnBpeF9mbXQgPT0gQVZf UElYX0ZNVF9OT05FKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJCYWQgbGlianhsIHBpeGVsIGZvcm1hdFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmZl9zdGF0dXMg PSBmZl9zZXRfZGltZW5zaW9ucyhhdmN0eCwgY3R4LT5iYXNpY19pbmZvLnhzaXplLCBjdHgtPmJh c2ljX2luZm8ueXNpemUpOworICAgICAgICAgICAgaWYgKGZmX3N0YXR1cyA8IDApCisgICAgICAg ICAgICAgICAgcmV0dXJuIGZmX3N0YXR1czsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAg KiBXZSByZXdpbmQgdGhlIGRlY29kZXIgYW5kIGFzayBmb3IgZXZlcnl0aGluZyBhZ2FpbgorICAg ICAgICAgICAgICogVGhpcyBmdXR1cmVwcm9vZnMgdGhlIGRlY29kZXIgc2luY2UgaXQgd2lsbCBt YWtlCisgICAgICAgICAgICAgKiBhZGRpbmcgYSBwYXJzZXIgb3IgYSBkZWRpY2F0ZWQgZGVtdXhl ciBtdWNoIGVhc2llcgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBidWYgPSBhdnBrdC0+ ZGF0YTsKKyAgICAgICAgICAgIHJlbWFpbmluZyA9IGF2cGt0LT5zaXplOworICAgICAgICAgICAg SnhsRGVjb2RlclJld2luZChjdHgtPmRlY29kZXIpOworICAgICAgICAgICAgY3R4LT5ldmVudHMg Jj0gfkpYTF9ERUNfQkFTSUNfSU5GTzsKKyAgICAgICAgICAgIGlmIChKeGxEZWNvZGVyU3Vic2Ny aWJlRXZlbnRzKGN0eC0+ZGVjb2RlciwgY3R4LT5ldmVudHMpICE9IEpYTF9ERUNfU1VDQ0VTUykg eworICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRXJyb3Igc3Vi c2NyaWJpbmcgdG8gSlhMIGV2ZW50cyBhZnRlciByZXdpbmRcbiIpOworICAgICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgIGNhc2UgSlhMX0RFQ19GUkFNRToKKyAgICAgICAgY2FzZSBKWExfREVD X05FRURfSU1BR0VfT1VUX0JVRkZFUjoKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBX ZSBkb24ndCBkbyB0aGlzIGF0IGJhc2ljIGluZm8gdGltZQorICAgICAgICAgICAgICogYmVjYXVz ZSBpdCB3aWxsIGhhcHBlbiBhZ2FpbiB3aGVuIHdlCisgICAgICAgICAgICAgKiByZXdpbmQgYW55 d2F5CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RF QlVHLCAiJXMgZXZlbnQgZW1pdHRlZFxuIiwgc3RhdHVzID09IEpYTF9ERUNfRlJBTUUgPyAiRlJB TUUiIDogIk5FRURfSU1BR0VfT1VUX0JVRkZFUiIpOworICAgICAgICAgICAgZmZfc3RhdHVzID0g ZmZfZ2V0X2J1ZmZlcihhdmN0eCwgZnJhbWUsIDApOworICAgICAgICAgICAgaWYgKGZmX3N0YXR1 cyA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGZmX3N0YXR1czsKKyAgICAgICAgICAgIGlm IChKeGxEZWNvZGVyU2V0SW1hZ2VPdXRDYWxsYmFjayhjdHgtPmRlY29kZXIsICZjdHgtPmp4bF9w aXhmbXQsICZsaWJqeGxfcm93X2ZpbGwsIGZyYW1lKSAhPSBKWExfREVDX1NVQ0NFU1MpIHsKKyAg ICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkJhZCBsaWJqeGwgZGVj IG5lZWQgaW1hZ2Ugb3V0IGJ1ZmZlciBldmVudFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsK KyAgICAgICAgY2FzZSBKWExfREVDX0ZVTExfSU1BR0U6CisgICAgICAgICAgICAvKiBmdWxsIGlt YWdlIGlzIG9uZSBmcmFtZSwgZXZlbiBpZiBhbmltYXRlZCAqLworICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfREVCVUcsICJGVUxMX0lNQUdFIGV2ZW50IGVtaXR0ZWRcbiIpOworICAg ICAgICAgICAgKmdvdF9mcmFtZSA9IDE7CisgICAgICAgICAgICBmcmFtZS0+cGljdF90eXBlID0g QVZfUElDVFVSRV9UWVBFX0k7CisgICAgICAgICAgICBmcmFtZS0+a2V5X2ZyYW1lID0gMTsKKyAg ICAgICAgICAgIHJldHVybiBhdnBrdC0+c2l6ZSAtIHJlbWFpbmluZzsKKyAgICAgICAgY2FzZSBK WExfREVDX1NVQ0NFU1M6CisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywg IlNVQ0NFU1MgZXZlbnQgZW1pdHRlZFxuIik7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAg ICogVGhlIGZpbGUgaGFzIGZpbmlzaGVkIGRlY29kaW5nCisgICAgICAgICAgICAgKiByZXNldCB0 aGUgZGVjb2RlciB0byBsZXQgdXMKKyAgICAgICAgICAgICAqIHJldXNlIGl0IGFnYWluIGZvciB0 aGUgbmV4dCBpbWFnZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBKeGxEZWNvZGVyUmVz ZXQoY3R4LT5kZWNvZGVyKTsKKyAgICAgICAgICAgIGxpYmp4bF9pbml0X2p4bF9kZWNvZGVyKGF2 Y3R4KTsKKyAgICAgICAgICAgIGJ1ZiA9IGF2cGt0LT5kYXRhOworICAgICAgICAgICAgcmVtYWlu aW5nID0gYXZwa3QtPnNpemU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZGVmYXVs dDoKKyAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkJhZCBsaWJqeGwg ZXZlbnQ6ICVkXG4iLCBzdGF0dXMpOworICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVS TkFMOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgYXZfY29sZCBpbnQgbGlianhsX2Rl Y29kZV9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCit7CisgICAgTGliSnhsRGVjb2RlQ29u dGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBpZiAoY3R4LT5ydW5uZXIpCisgICAg ICAgIEp4bFRocmVhZFBhcmFsbGVsUnVubmVyRGVzdHJveShjdHgtPnJ1bm5lcik7CisgICAgY3R4 LT5ydW5uZXIgPSBOVUxMOworICAgIGlmIChjdHgtPmRlY29kZXIpCisgICAgICAgIEp4bERlY29k ZXJEZXN0cm95KGN0eC0+ZGVjb2Rlcik7CisgICAgY3R4LT5kZWNvZGVyID0gTlVMTDsKKyAgICBy ZXR1cm4gMDsKK30KKworY29uc3QgQVZDb2RlYyBmZl9saWJqeGxfZGVjb2RlciA9IHsKKyAgICAu bmFtZSAgICAgICAgICAgPSAibGlianhsIiwKKyAgICAubG9uZ19uYW1lICAgICAgPSBOVUxMX0lG X0NPTkZJR19TTUFMTCgibGlianhsIEpQRUcgWEwgZGVjb2RlciIpLAorICAgIC50eXBlICAgICAg ICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICAuaWQgICAgICAgICAgICAgPSBBVl9DT0RF Q19JRF9KUEVHWEwsCisgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKExpYkp4bERlY29kZUNv bnRleHQpLAorICAgIC5pbml0ICAgICAgICAgICA9IGxpYmp4bF9kZWNvZGVfaW5pdCwKKyAgICAu ZGVjb2RlICAgICAgICAgPSBsaWJqeGxfZGVjb2RlX2ZyYW1lLAorICAgIC5jbG9zZSAgICAgICAg ICA9IGxpYmp4bF9kZWNvZGVfY2xvc2UsCisgICAgLmNhcGFiaWxpdGllcyAgID0gQVZfQ09ERUNf Q0FQX0RSMSB8IEFWX0NPREVDX0NBUF9PVEhFUl9USFJFQURTLAorICAgIC5jYXBzX2ludGVybmFs ICA9IEZGX0NPREVDX0NBUF9BVVRPX1RIUkVBRFMgfCBGRl9DT0RFQ19DQVBfSU5JVF9DTEVBTlVQ LAorICAgIC53cmFwcGVyX25hbWUgICA9ICJsaWJqeGwiLAorfTsKLS0gCjIuMzQuMQoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1h aWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFp bG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFi b3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVj dCAidW5zdWJzY3JpYmUiLgo=