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 EE4FB428AE for ; Tue, 5 Apr 2022 16:55:56 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6422268B1E6; Tue, 5 Apr 2022 19:55:39 +0300 (EEST) Received: from mail-qv1-f45.google.com (mail-qv1-f45.google.com [209.85.219.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7961A68AEEF for ; Tue, 5 Apr 2022 19:55:31 +0300 (EEST) Received: by mail-qv1-f45.google.com with SMTP id x5so12102qvk.4 for ; Tue, 05 Apr 2022 09:55:31 -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=JpQKNQJXybYHwnHUW54mWgiP/AgB4GFZqtNhChIkVig=; b=jgFh8taLrS+FJgSY6wR2q3v3vX5Bv9oMNVoFAdX7Jpn9sE6mJlt4CGo6eptdPvbeZL Nu8ssEswDog59H2LdR7UtnqbtdbraFQtPqtglMqYbSlYbMbz8qhx47mWaFw1GeeXGpmy 7PZ6lAkqr8T13tkyK/bHjp9GWye1Zqr0XWqojCjVx4AQHya1APGSIy5NAGxTXC7IraVx UVq1O80u9zSi/eHu8p3OY0MnF+Hs1SIPVoVTzKobb+uLwSCrlZRzjY/tG+s4hKOgh3OA aKAAj1udu/2CkdV6gC7Lfom8KQcb7UnjprMJJC/KdgW0i+t8iaFYcBMqp8LorgbO5XEb 9VeA== 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=JpQKNQJXybYHwnHUW54mWgiP/AgB4GFZqtNhChIkVig=; b=ird504/9yOgosGLPY0LN1bZRmkLvDj49+HrjCVJPUXTnK+IQd2dnMQT7VPmYqA61rV uSulj0buBg4jojLoGpMBLnJnljj4SzolsXKRr0ef05JHlEeu6hg+s4bLRgan91beHhu/ oPh36kjgOPvYq/mfnMBXJo4VgS9cGLsxgFdC0Zvx6u4i2cExtvdC7kRMiGdeBGeZYQEb OqINizBz2l5VOVvZOodY88QNqrvptvlIRp0S095jTPFrpv+K18+QYgJUwhe88AWVnByX Q/jSOkUFMAjuvaikg2t1W+QbNGNTCjxw67h2wxxwWtdGvxHpqzxuVe5EzEWGJYhwKgmk lR+Q== X-Gm-Message-State: AOAM531/JLzF/suidXiPE8O/DOrVuCfqqfYEnImZDBRZqmNt8/2GyUi4 KVBDAK9WHxopbFHC5kIvYhEiSWMNeq4= X-Google-Smtp-Source: ABdhPJxD9SXlq3R7b3ZFyKVdmyq4nhGb+Jazjn+6QpN1RXGU/ZkraJbAaJpURLbtdXgcGKgp1E9Lqg== X-Received: by 2002:a05:6214:238a:b0:441:76a5:2331 with SMTP id fw10-20020a056214238a00b0044176a52331mr3755475qvb.96.1649177729967; Tue, 05 Apr 2022 09:55:29 -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 bk15-20020a05620a1a0f00b0067e5bd7a9ccsm8332532qkb.50.2022.04.05.09.55.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Apr 2022 09:55:29 -0700 (PDT) From: Leo Izen To: ffmpeg-devel@ffmpeg.org Date: Tue, 5 Apr 2022 12:55:02 -0400 Message-Id: <20220405165504.29261-3-leo.izen@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220405165504.29261-1-leo.izen@gmail.com> References: <20220405165504.29261-1-leo.izen@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v13 2/4] 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 VEFJTkVSUwppbmRleCA4NTlhNTAwNWQ0Li5mYWVhODRlYmYxIDEwMDY0NAotLS0gYS9NQUlOVEFJ TkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTk0LDYgKzE5NCw3IEBAIENvZGVjczoKICAgbGli Y29kZWMyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICBUb21hcyBIw6RyZGluCiAgIGxpYmRp cmFjKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF2aWQgQ29ucmFkCiAgIGxpYmRhdnMy LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHVpd2VuIFJlbgorICBsaWJqeGwqLmMsIGxp Ymp4bC5oICAgICAgICAgICAgICAgICAgIExlbyBJemVuCiAgIGxpYmdzbS5jICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTWljaGVsIEJhcmRpYXV4CiAgIGxpYmt2YXphYXIuYyAgICAgICAg ICAgICAgICAgICAgICAgICAgQXJ0dHUgWWzDpC1PdXRpbmVuCiAgIGxpYm9wZW5oMjY0ZW5jLmMg ICAgICAgICAgICAgICAgICAgICAgTWFydGluIFN0b3Jzam8sIExpbmppZSBGdQpkaWZmIC0tZ2l0 IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IGU0ZDM2YWE2MzkuLjk2OWIxM2ViYTMgMTAw NzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTI0MCw2ICsyNDAsNyBAQCBF eHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6CiAgIC0tZW5hYmxlLWxpYmllYzYxODgzICAgICBlbmFi bGUgaWVjNjE4ODMgdmlhIGxpYmllYzYxODgzIFtub10KICAgLS1lbmFibGUtbGliaWxiYyAgICAg ICAgIGVuYWJsZSBpTEJDIGRlL2VuY29kaW5nIHZpYSBsaWJpbGJjIFtub10KICAgLS1lbmFibGUt bGliamFjayAgICAgICAgIGVuYWJsZSBKQUNLIGF1ZGlvIHNvdW5kIHNlcnZlciBbbm9dCisgIC0t ZW5hYmxlLWxpYmp4bCAgICAgICAgICBlbmFibGUgSlBFRyBYTCBkZWNvZGluZyB2aWEgbGlianhs IFtub10KICAgLS1lbmFibGUtbGlia2x2YW5jICAgICAgIGVuYWJsZSBLZXJuZWwgTGFicyBWQU5D IHByb2Nlc3NpbmcgW25vXQogICAtLWVuYWJsZS1saWJrdmF6YWFyICAgICAgZW5hYmxlIEhFVkMg ZW5jb2RpbmcgdmlhIGxpYmt2YXphYXIgW25vXQogICAtLWVuYWJsZS1saWJsZW5zZnVuICAgICAg ZW5hYmxlIGxlbnNmdW4gbGVucyBjb3JyZWN0aW9uIFtub10KQEAgLTE4MzMsNiArMTgzNCw3IEBA IEVYVEVSTkFMX0xJQlJBUllfTElTVD0iCiAgICAgbGliaWVjNjE4ODMKICAgICBsaWJpbGJjCiAg ICAgbGliamFjaworICAgIGxpYmp4bAogICAgIGxpYmtsdmFuYwogICAgIGxpYmt2YXphYXIKICAg ICBsaWJtb2RwbHVnCkBAIC0zMzI5LDYgKzMzMzEsNyBAQCBsaWJnc21fbXNfZGVjb2Rlcl9kZXBz PSJsaWJnc20iCiBsaWJnc21fbXNfZW5jb2Rlcl9kZXBzPSJsaWJnc20iCiBsaWJpbGJjX2RlY29k ZXJfZGVwcz0ibGliaWxiYyIKIGxpYmlsYmNfZW5jb2Rlcl9kZXBzPSJsaWJpbGJjIgorbGlianhs X2RlY29kZXJfZGVwcz0ibGlianhsIGxpYmp4bF90aHJlYWRzIgogbGlia3ZhemFhcl9lbmNvZGVy X2RlcHM9ImxpYmt2YXphYXIiCiBsaWJtb2RwbHVnX2RlbXV4ZXJfZGVwcz0ibGlibW9kcGx1ZyIK IGxpYm1wM2xhbWVfZW5jb2Rlcl9kZXBzPSJsaWJtcDNsYW1lIgpAQCAtNjU0MSw2ICs2NTQ0LDgg QEAgZW5hYmxlZCBsaWJnc20gICAgICAgICAgICAmJiB7IGZvciBnc21faGRyIGluICJnc20uaCIg ImdzbS9nc20uaCI7IGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNr X2xpYiBsaWJnc20gIiR7Z3NtX2hkcn0iIGdzbV9jcmVhdGUgLWxnc20gJiYgYnJlYWs7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSB8fCBkaWUgIkVSUk9SOiBsaWJnc20gbm90 IGZvdW5kIjsgfQogZW5hYmxlZCBsaWJpbGJjICAgICAgICAgICAmJiByZXF1aXJlIGxpYmlsYmMg aWxiYy5oIFdlYlJ0Y0lsYmNmaXhfSW5pdERlY29kZSAtbGlsYmMgJHB0aHJlYWRzX2V4dHJhbGli cworZW5hYmxlZCBsaWJqeGwgICAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGlianhs ICJsaWJqeGwgPj0gMC43LjAiIGp4bC9kZWNvZGUuaCBKeGxEZWNvZGVyVmVyc2lvbiAmJgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlX3BrZ19jb25maWcgbGlianhsX3RocmVh ZHMgImxpYmp4bF90aHJlYWRzID49IDAuNy4wIiBqeGwvdGhyZWFkX3BhcmFsbGVsX3J1bm5lci5o IEp4bFRocmVhZFBhcmFsbGVsUnVubmVyCiBlbmFibGVkIGxpYmtsdmFuYyAgICAgICAgICYmIHJl cXVpcmUgbGlia2x2YW5jIGxpYmtsdmFuYy92YW5jLmgga2x2YW5jX2NvbnRleHRfY3JlYXRlIC1s a2x2YW5jCiBlbmFibGVkIGxpYmt2YXphYXIgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBs aWJrdmF6YWFyICJrdmF6YWFyID49IDAuOC4xIiBrdmF6YWFyLmgga3Z6X2FwaV9nZXQKIGVuYWJs ZWQgbGlibGVuc2Z1biAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYmxlbnNmdW4gbGVu c2Z1biBsZW5zZnVuLmggbGZfZGJfbmV3CmRpZmYgLS1naXQgYS9kb2MvZ2VuZXJhbF9jb250ZW50 cy50ZXhpIGIvZG9jL2dlbmVyYWxfY29udGVudHMudGV4aQppbmRleCBmY2Q5ZGExYjM0Li5hODkz MzQ3ZmJlIDEwMDY0NAotLS0gYS9kb2MvZ2VuZXJhbF9jb250ZW50cy50ZXhpCisrKyBiL2RvYy9n ZW5lcmFsX2NvbnRlbnRzLnRleGkKQEAgLTE3MSw2ICsxNzEsMTMgQEAgR28gdG8gQHVybHtodHRw czovL2dpdGh1Yi5jb20vVGltb3RoeUd1L2xpYmlsYmN9IGFuZCBmb2xsb3cgdGhlIGluc3RydWN0 aW9ucyBmb3IKIGluc3RhbGxpbmcgdGhlIGxpYnJhcnkuIFRoZW4gcGFzcyBAY29kZXstLWVuYWJs ZS1saWJpbGJjfSB0byBjb25maWd1cmUgdG8KIGVuYWJsZSBpdC4KIAorQHNlY3Rpb24gbGlianhs CisKK0pQRUcgWEwgaXMgYW4gaW1hZ2UgZm9ybWF0IGludGVuZGVkIHRvIGZ1bGx5IHJlcGxhY2Ug bGVnYWN5IEpQRUcgZm9yIGFuIGV4dGVuZGVkCitwZXJpb2Qgb2YgbGlmZS4gU2VlIEB1cmx7aHR0 cHM6Ly9qcGVneGwuaW5mby99IGZvciBtb3JlIGluZm9ybWF0aW9uLCBhbmQgc2VlCitAdXJse2h0 dHBzOi8vZ2l0aHViLmNvbS9saWJqeGwvbGlianhsfSBmb3IgdGhlIGxpYnJhcnkgc291cmNlLiBZ b3UgY2FuIHBhc3MKK0Bjb2Rley0tZW5hYmxlLWxpYmp4bH0gdG8gY29uZmlndXJlIGluIG9yZGVy IGVuYWJsZSB0aGUgbGlianhsIHdyYXBwZXIuCisKIEBzZWN0aW9uIGxpYnZweAogCiBGRm1wZWcg Y2FuIG1ha2UgdXNlIG9mIHRoZSBsaWJ2cHggbGlicmFyeSBmb3IgVlA4L1ZQOSBkZWNvZGluZyBh bmQgZW5jb2RpbmcuCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2VmaWxlIGIvbGliYXZjb2Rl Yy9NYWtlZmlsZQppbmRleCBmYjhiMGU4MjRiLi5jNmQwYWU0MTA3IDEwMDY0NAotLS0gYS9saWJh dmNvZGVjL01ha2VmaWxlCisrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKQEAgLTEwNTksNiArMTA1 OSw3IEBAIE9CSlMtJChDT05GSUdfTElCR1NNX01TX0RFQ09ERVIpICAgICAgICAgICs9IGxpYmdz bWRlYy5vCiBPQkpTLSQoQ09ORklHX0xJQkdTTV9NU19FTkNPREVSKSAgICAgICAgICArPSBsaWJn c21lbmMubwogT0JKUy0kKENPTkZJR19MSUJJTEJDX0RFQ09ERVIpICAgICAgICAgICAgKz0gbGli aWxiYy5vCiBPQkpTLSQoQ09ORklHX0xJQklMQkNfRU5DT0RFUikgICAgICAgICAgICArPSBsaWJp bGJjLm8KK09CSlMtJChDT05GSUdfTElCSlhMX0RFQ09ERVIpICAgICAgICAgICAgICs9IGxpYmp4 bGRlYy5vIGxpYmp4bC5vCiBPQkpTLSQoQ09ORklHX0xJQktWQVpBQVJfRU5DT0RFUikgICAgICAg ICArPSBsaWJrdmF6YWFyLm8KIE9CSlMtJChDT05GSUdfTElCTVAzTEFNRV9FTkNPREVSKSAgICAg ICAgICs9IGxpYm1wM2xhbWUubwogT0JKUy0kKENPTkZJR19MSUJPUEVOQ09SRV9BTVJOQl9ERUNP REVSKSAgKz0gbGlib3BlbmNvcmUtYW1yLm8KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWxsY29k ZWNzLmMgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCmluZGV4IDIyZDU2NzYwZWMuLmE5Y2Q2OWRm Y2UgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKKysrIGIvbGliYXZjb2RlYy9h bGxjb2RlY3MuYwpAQCAtNzQ5LDYgKzc0OSw3IEBAIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xp YmdzbV9tc19lbmNvZGVyOwogZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGliZ3NtX21zX2RlY29k ZXI7CiBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJpbGJjX2VuY29kZXI7CiBleHRlcm4gY29u c3QgRkZDb2RlYyBmZl9saWJpbGJjX2RlY29kZXI7CitleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9s aWJqeGxfZGVjb2RlcjsKIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYm1wM2xhbWVfZW5jb2Rl cjsKIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYm9wZW5jb3JlX2Ftcm5iX2VuY29kZXI7CiBl eHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJvcGVuY29yZV9hbXJuYl9kZWNvZGVyOwpkaWZmIC0t 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 ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4xNzc0YWE5YjM1Ci0tLSAvZGV2L251bGwK KysrIGIvbGliYXZjb2RlYy9saWJqeGxkZWMuYwpAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqIEpQ RUcgWEwgZGVjb2Rpbmcgc3VwcG9ydCB2aWEgbGlianhsCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEg TGVvIEl6ZW4gPGxlby5pemVuQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBv ZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1w ZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZt cGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJ bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEz MDEgVVNBCisgKi8KKworLyoqCisgKiBAZmlsZQorICogSlBFRyBYTCBkZWNvZGVyIHVzaW5nIGxp Ymp4bAorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKKyNpbmNsdWRlICJs aWJhdnV0aWwvYnVmZmVyLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2NvbW1vbi5oIgorI2luY2x1 ZGUgImxpYmF2dXRpbC9lcnJvci5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKKyNpbmNs dWRlICJsaWJhdnV0aWwvcGl4ZGVzYy5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9waXhmbXQuaCIK KyNpbmNsdWRlICJsaWJhdnV0aWwvZnJhbWUuaCIKKworI2luY2x1ZGUgImF2Y29kZWMuaCIKKyNp bmNsdWRlICJjb2RlY19pbnRlcm5hbC5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisKKyNpbmNs dWRlIDxqeGwvZGVjb2RlLmg+CisjaW5jbHVkZSA8anhsL3RocmVhZF9wYXJhbGxlbF9ydW5uZXIu aD4KKyNpbmNsdWRlICJsaWJqeGwuaCIKKwordHlwZWRlZiBzdHJ1Y3QgTGliSnhsRGVjb2RlQ29u dGV4dCB7CisgICAgdm9pZCAqcnVubmVyOworICAgIEp4bERlY29kZXIgKmRlY29kZXI7CisgICAg SnhsQmFzaWNJbmZvIGJhc2ljX2luZm87CisgICAgSnhsUGl4ZWxGb3JtYXQganhsX3BpeGZtdDsK KyAgICBKeGxEZWNvZGVyU3RhdHVzIGV2ZW50czsKKyAgICBBVkJ1ZmZlclJlZiAqaWNjcDsKK30g TGliSnhsRGVjb2RlQ29udGV4dDsKKworc3RhdGljIGludCBsaWJqeGxfaW5pdF9qeGxfZGVjb2Rl cihBVkNvZGVjQ29udGV4dCAqYXZjdHgpCit7CisgICAgTGliSnhsRGVjb2RlQ29udGV4dCAqY3R4 ID0gYXZjdHgtPnByaXZfZGF0YTsKKworICAgIGN0eC0+ZXZlbnRzID0gSlhMX0RFQ19CQVNJQ19J TkZPIHwgSlhMX0RFQ19GVUxMX0lNQUdFIHwgSlhMX0RFQ19GUkFNRSB8IEpYTF9ERUNfQ09MT1Jf RU5DT0RJTkc7CisgICAgaWYgKEp4bERlY29kZXJTdWJzY3JpYmVFdmVudHMoY3R4LT5kZWNvZGVy LCBjdHgtPmV2ZW50cykgIT0gSlhMX0RFQ19TVUNDRVNTKSB7CisgICAgICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0VSUk9SLCAiRXJyb3Igc3Vic2NyaWJpbmcgdG8gSlhMIGV2ZW50c1xuIik7Cisg ICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIGlmIChKeGxEZWNv ZGVyU2V0UGFyYWxsZWxSdW5uZXIoY3R4LT5kZWNvZGVyLCBKeGxUaHJlYWRQYXJhbGxlbFJ1bm5l ciwgY3R4LT5ydW5uZXIpICE9IEpYTF9ERUNfU1VDQ0VTUykgeworICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBzZXQgSnhsVGhyZWFkUGFyYWxsZWxSdW5uZXJc biIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisKKyAgICBtZW1z ZXQoJmN0eC0+YmFzaWNfaW5mbywgMCwgc2l6ZW9mKEp4bEJhc2ljSW5mbykpOworICAgIG1lbXNl dCgmY3R4LT5qeGxfcGl4Zm10LCAwLCBzaXplb2YoSnhsUGl4ZWxGb3JtYXQpKTsKKworICAgIHJl dHVybiAwOworfQorCitzdGF0aWMgYXZfY29sZCBpbnQgbGlianhsX2RlY29kZV9pbml0KEFWQ29k ZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBMaWJKeGxEZWNvZGVDb250ZXh0ICpjdHggPSBhdmN0 eC0+cHJpdl9kYXRhOworICAgIEp4bE1lbW9yeU1hbmFnZXIgbWFuYWdlcjsKKworICAgIGZmX2xp Ymp4bF9pbml0X21lbW9yeV9tYW5hZ2VyKCZtYW5hZ2VyKTsKKyAgICBjdHgtPmRlY29kZXIgPSBK eGxEZWNvZGVyQ3JlYXRlKCZtYW5hZ2VyKTsKKyAgICBpZiAoIWN0eC0+ZGVjb2RlcikgeworICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgSnhsRGVj b2RlclxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAg IGN0eC0+cnVubmVyID0gSnhsVGhyZWFkUGFyYWxsZWxSdW5uZXJDcmVhdGUoJm1hbmFnZXIsIGZm X2xpYmp4bF9nZXRfdGhyZWFkY291bnQoYXZjdHgtPnRocmVhZF9jb3VudCkpOworICAgIGlmICgh Y3R4LT5ydW5uZXIpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWls ZWQgdG8gY3JlYXRlIEp4bFRocmVhZFBhcmFsbGVsUnVubmVyXG4iKTsKKyAgICAgICAgcmV0dXJu IEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgcmV0dXJuIGxpYmp4bF9pbml0X2p4bF9k ZWNvZGVyKGF2Y3R4KTsKK30KKworc3RhdGljIGVudW0gQVZQaXhlbEZvcm1hdCBsaWJqeGxfZ2V0 X3BpeF9mbXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBKeGxCYXNpY0luZm8gKmJhc2ljX2luZm8s IEp4bFBpeGVsRm9ybWF0ICpmb3JtYXQpCit7CisgICAgZm9ybWF0LT5lbmRpYW5uZXNzID0gSlhM X05BVElWRV9FTkRJQU47CisgICAgZm9ybWF0LT5udW1fY2hhbm5lbHMgPSBiYXNpY19pbmZvLT5u dW1fY29sb3JfY2hhbm5lbHMgKyAoYmFzaWNfaW5mby0+YWxwaGFfYml0cyA+IDApOworICAgIC8q IEdyYXkgKi8KKyAgICBpZiAoYmFzaWNfaW5mby0+bnVtX2NvbG9yX2NoYW5uZWxzID09IDEpIHsK KyAgICAgICAgaWYgKGJhc2ljX2luZm8tPmJpdHNfcGVyX3NhbXBsZSA8PSA4KSB7CisgICAgICAg ICAgICBmb3JtYXQtPmRhdGFfdHlwZSA9IEpYTF9UWVBFX1VJTlQ4OworICAgICAgICAgICAgcmV0 dXJuIGJhc2ljX2luZm8tPmFscGhhX2JpdHMgPyBBVl9QSVhfRk1UX1lBOCA6IEFWX1BJWF9GTVRf R1JBWTg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJhc2ljX2luZm8tPmV4cG9uZW50X2JpdHNf cGVyX3NhbXBsZSB8fCBiYXNpY19pbmZvLT5iaXRzX3Blcl9zYW1wbGUgPiAxNikgeworICAgICAg ICAgICAgaWYgKGJhc2ljX2luZm8tPmFscGhhX2JpdHMpCisgICAgICAgICAgICAgICAgcmV0dXJu IEFWX1BJWF9GTVRfTk9ORTsKKyAgICAgICAgICAgIGZvcm1hdC0+ZGF0YV90eXBlID0gSlhMX1RZ UEVfRkxPQVQ7CisgICAgICAgICAgICByZXR1cm4gQVZfUElYX0ZNVF9HUkFZRjMyOworICAgICAg ICB9CisgICAgICAgIGZvcm1hdC0+ZGF0YV90eXBlID0gSlhMX1RZUEVfVUlOVDE2OworICAgICAg ICByZXR1cm4gYmFzaWNfaW5mby0+YWxwaGFfYml0cyA/IEFWX1BJWF9GTVRfWUExNiA6IEFWX1BJ WF9GTVRfR1JBWTE2OworICAgIH0KKyAgICAvKiByZ2Igb25seSAqLworICAgIC8qIGxpYmp4bCBv bmx5IHN1cHBvcnRzIHBhY2tlZCBSR0IgYW5kIGdyYXkgb3V0cHV0IGF0IHRoZSBtb21lbnQgKi8K KyAgICBpZiAoYmFzaWNfaW5mby0+bnVtX2NvbG9yX2NoYW5uZWxzID09IDMpIHsKKyAgICAgICAg aWYgKGJhc2ljX2luZm8tPmJpdHNfcGVyX3NhbXBsZSA8PSA4KSB7CisgICAgICAgICAgICBmb3Jt YXQtPmRhdGFfdHlwZSA9IEpYTF9UWVBFX1VJTlQ4OworICAgICAgICAgICAgcmV0dXJuIGJhc2lj X2luZm8tPmFscGhhX2JpdHMgPyBBVl9QSVhfRk1UX1JHQkEgOiBBVl9QSVhfRk1UX1JHQjI0Owor ICAgICAgICB9CisgICAgICAgIGlmIChiYXNpY19pbmZvLT5iaXRzX3Blcl9zYW1wbGUgPiAxNikK KyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJEb3duc2FtcGxpbmcg bGFyZ2VyIGludGVnZXIgdG8gMTYtYml0IHZpYSBsaWJqeGxcbiIpOworICAgICAgICBpZiAoYmFz aWNfaW5mby0+ZXhwb25lbnRfYml0c19wZXJfc2FtcGxlKQorICAgICAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfV0FSTklORywgIkRvd25zYW1wbGluZyBmbG9hdCB0byAxNi1iaXQgaW50ZWdl ciB2aWEgbGlianhsXG4iKTsKKyAgICAgICAgZm9ybWF0LT5kYXRhX3R5cGUgPSBKWExfVFlQRV9V SU5UMTY7CisgICAgICAgIHJldHVybiBiYXNpY19pbmZvLT5hbHBoYV9iaXRzID8gQVZfUElYX0ZN VF9SR0JBNjQgOiBBVl9QSVhfRk1UX1JHQjQ4OworICAgIH0KKworICAgIHJldHVybiBBVl9QSVhf Rk1UX05PTkU7Cit9CisKK3N0YXRpYyBpbnQgbGlianhsX2RlY29kZV9mcmFtZShBVkNvZGVjQ29u dGV4dCAqYXZjdHgsIHZvaWQgKmF2ZnJhbWUsIGludCAqZ290X2ZyYW1lLCBBVlBhY2tldCAqYXZw a3QpCit7CisgICAgTGliSnhsRGVjb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsK KyAgICB1aW50OF90ICpidWYgPSBhdnBrdC0+ZGF0YTsKKyAgICBzaXplX3QgcmVtYWluaW5nID0g YXZwa3QtPnNpemUsIGljY3BfbGVuOworICAgIEFWRnJhbWUgKmZyYW1lID0gYXZmcmFtZTsKKyAg ICBKeGxEZWNvZGVyU3RhdHVzIGpyZXQ7CisgICAgaW50IHJldDsKKyAgICAqZ290X2ZyYW1lID0g MDsKKworICAgIHdoaWxlICgxKSB7CisKKyAgICAgICAganJldCA9IEp4bERlY29kZXJTZXRJbnB1 dChjdHgtPmRlY29kZXIsIGJ1ZiwgcmVtYWluaW5nKTsKKworICAgICAgICBpZiAoanJldCA9PSBK WExfREVDX0VSUk9SKSB7CisgICAgICAgICAgICAvKiB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4g aGVyZSB1bmxlc3MgdGhlcmUncyBhIGJ1ZyBpbiBsaWJqeGwgKi8KKyAgICAgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5rbm93biBsaWJqeGwgZGVjb2RlIGVycm9yXG4iKTsK KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgICAgICB9CisKKyAgICAg ICAganJldCA9IEp4bERlY29kZXJQcm9jZXNzSW5wdXQoY3R4LT5kZWNvZGVyKTsKKyAgICAgICAg LyoKKyAgICAgICAgICogSnhsRGVjb2RlclJlbGVhc2VJbnB1dCByZXR1cm5zIHRoZSBudW1iZXIK KyAgICAgICAgICogb2YgYnl0ZXMgcmVtYWluaW5nIHRvIGJlIHJlYWQsIHJhdGhlciB0aGFuCisg ICAgICAgICAqIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBpdCBkaWQgcmVhZAorICAgICAgICAg Ki8KKyAgICAgICAgcmVtYWluaW5nID0gSnhsRGVjb2RlclJlbGVhc2VJbnB1dChjdHgtPmRlY29k ZXIpOworICAgICAgICBidWYgPSBhdnBrdC0+ZGF0YSArIGF2cGt0LT5zaXplIC0gcmVtYWluaW5n OworCisgICAgICAgIHN3aXRjaChqcmV0KSB7CisgICAgICAgIGNhc2UgSlhMX0RFQ19FUlJPUjoK KyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5rbm93biBsaWJqeGwg ZGVjb2RlIGVycm9yXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB OworICAgICAgICBjYXNlIEpYTF9ERUNfTkVFRF9NT1JFX0lOUFVUOgorICAgICAgICAgICAgaWYg KHJlbWFpbmluZyA9PSAwKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJVbmV4cGVjdGVkIGVuZCBvZiBKWEwgY29kZXN0cmVhbVxuIik7CisgICAgICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk5FRURfTU9SRV9JTlBVVCBldmVudCBl bWl0dGVkXG4iKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIEpYTF9ERUNf QkFTSUNfSU5GTzoKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiQkFT SUNfSU5GTyBldmVudCBlbWl0dGVkXG4iKTsKKyAgICAgICAgICAgIGlmIChKeGxEZWNvZGVyR2V0 QmFzaWNJbmZvKGN0eC0+ZGVjb2RlciwgJmN0eC0+YmFzaWNfaW5mbykgIT0gSlhMX0RFQ19TVUND RVNTKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiB0aGlzIHNob3Vs ZCBuZXZlciBoYXBwZW4KKyAgICAgICAgICAgICAgICAgKiBpZiBpdCBkb2VzIGl0IGlzIGxpa2Vs eSBhIGxpYmp4bCBkZWNvZGVyIGJ1ZworICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQmFkIGxpYmp4bCBiYXNpYyBpbmZvIGV2 ZW50XG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGF2Y3R4LT5waXhfZm10ID0gbGlianhsX2dldF9waXhfZm10 KGF2Y3R4LCAmY3R4LT5iYXNpY19pbmZvLCAmY3R4LT5qeGxfcGl4Zm10KTsKKyAgICAgICAgICAg IGlmIChhdmN0eC0+cGl4X2ZtdCA9PSBBVl9QSVhfRk1UX05PTkUpIHsKKyAgICAgICAgICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkJhZCBsaWJqeGwgcGl4ZWwgZm9ybWF0XG4i KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHJldCA9IGZmX3NldF9kaW1lbnNpb25zKGF2Y3R4LCBjdHgtPmJhc2lj X2luZm8ueHNpemUsIGN0eC0+YmFzaWNfaW5mby55c2l6ZSk7CisgICAgICAgICAgICBpZiAocmV0 IDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgY29udGludWU7 CisgICAgICAgIGNhc2UgSlhMX0RFQ19DT0xPUl9FTkNPRElORzoKKyAgICAgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiQ09MT1JfRU5DT0RJTkcgZXZlbnQgZW1pdHRlZFxuIik7 CisgICAgICAgICAgICBqcmV0ID0gSnhsRGVjb2RlckdldElDQ1Byb2ZpbGVTaXplKGN0eC0+ZGVj b2RlciwgJmN0eC0+anhsX3BpeGZtdCwgSlhMX0NPTE9SX1BST0ZJTEVfVEFSR0VUX09SSUdJTkFM LCAmaWNjcF9sZW4pOworICAgICAgICAgICAgaWYgKGpyZXQgPT0gSlhMX0RFQ19TVUNDRVNTICYm IGljY3BfbGVuID4gMCkgeworICAgICAgICAgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmY3R4LT5p Y2NwKTsKKyAgICAgICAgICAgICAgICBjdHgtPmljY3AgPSBhdl9idWZmZXJfYWxsb2MoaWNjcF9s ZW4pOworICAgICAgICAgICAgICAgIGlmICghY3R4LT5pY2NwKQorICAgICAgICAgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgICAgIGpyZXQgPSBKeGxEZWNv ZGVyR2V0Q29sb3JBc0lDQ1Byb2ZpbGUoY3R4LT5kZWNvZGVyLCAmY3R4LT5qeGxfcGl4Zm10LCBK WExfQ09MT1JfUFJPRklMRV9UQVJHRVRfT1JJR0lOQUwsIGN0eC0+aWNjcC0+ZGF0YSwgaWNjcF9s ZW4pOworICAgICAgICAgICAgICAgIGlmIChqcmV0ICE9IEpYTF9ERUNfU1VDQ0VTUykKKyAgICAg ICAgICAgICAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZjdHgtPmljY3ApOworICAgICAgICAgICAg fQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgSlhMX0RFQ19GUkFNRToKKyAg ICAgICAgY2FzZSBKWExfREVDX05FRURfSU1BR0VfT1VUX0JVRkZFUjoKKyAgICAgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiJXMgZXZlbnQgZW1pdHRlZFxuIiwganJldCA9PSBK WExfREVDX0ZSQU1FID8gIkZSQU1FIiA6ICJORUVEX0lNQUdFX09VVF9CVUZGRVIiKTsKKyAgICAg ICAgICAgIHJldCA9IGZmX2dldF9idWZmZXIoYXZjdHgsIGZyYW1lLCAwKTsKKyAgICAgICAgICAg IGlmIChyZXQgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICBj dHgtPmp4bF9waXhmbXQuYWxpZ24gPSBmcmFtZS0+bGluZXNpemVbMF07CisgICAgICAgICAgICBp ZiAoSnhsRGVjb2RlclNldEltYWdlT3V0QnVmZmVyKGN0eC0+ZGVjb2RlciwgJmN0eC0+anhsX3Bp eGZtdCwgZnJhbWUtPmRhdGFbMF0sIGZyYW1lLT5idWZbMF0tPnNpemUpICE9IEpYTF9ERUNfU1VD Q0VTUykgeworICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQmFk IGxpYmp4bCBkZWMgbmVlZCBpbWFnZSBvdXQgYnVmZmVyIGV2ZW50XG4iKTsKKyAgICAgICAgICAg ICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICBjYXNlIEpYTF9ERUNfRlVMTF9JTUFHRToKKyAgICAgICAgICAg IC8qIGZ1bGwgaW1hZ2UgaXMgb25lIGZyYW1lLCBldmVuIGlmIGFuaW1hdGVkICovCisgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIkZVTExfSU1BR0UgZXZlbnQgZW1pdHRl ZFxuIik7CisgICAgICAgICAgICAqZ290X2ZyYW1lID0gMTsKKyAgICAgICAgICAgIGZyYW1lLT5w aWN0X3R5cGUgPSBBVl9QSUNUVVJFX1RZUEVfSTsKKyAgICAgICAgICAgIGZyYW1lLT5rZXlfZnJh bWUgPSAxOworICAgICAgICAgICAgaWYgKGN0eC0+aWNjcCkgeworICAgICAgICAgICAgICAgIEFW RnJhbWVTaWRlRGF0YSAqc2QgPSBhdl9mcmFtZV9uZXdfc2lkZV9kYXRhX2Zyb21fYnVmKGZyYW1l LCBBVl9GUkFNRV9EQVRBX0lDQ19QUk9GSUxFLCBjdHgtPmljY3ApOworICAgICAgICAgICAgICAg IGlmICghc2QpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cisg ICAgICAgICAgICAgICAgLyogb3duZXJzaGlwIGlzIHRyYW5zZmVyZWQsIGFuZCBpdCBpcyBub3Qg cmVmLWVkICovCisgICAgICAgICAgICAgICAgY3R4LT5pY2NwID0gTlVMTDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHJldHVybiBhdnBrdC0+c2l6ZSAtIHJlbWFpbmluZzsKKyAgICAgICAg Y2FzZSBKWExfREVDX1NVQ0NFU1M6CisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19E RUJVRywgIlNVQ0NFU1MgZXZlbnQgZW1pdHRlZFxuIik7CisgICAgICAgICAgICAvKgorICAgICAg ICAgICAgICogVGhlIGZpbGUgaGFzIGZpbmlzaGVkIGRlY29kaW5nCisgICAgICAgICAgICAgKiBy ZXNldCB0aGUgZGVjb2RlciB0byBsZXQgdXMKKyAgICAgICAgICAgICAqIHJldXNlIGl0IGFnYWlu IGZvciB0aGUgbmV4dCBpbWFnZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBKeGxEZWNv ZGVyUmVzZXQoY3R4LT5kZWNvZGVyKTsKKyAgICAgICAgICAgIGxpYmp4bF9pbml0X2p4bF9kZWNv ZGVyKGF2Y3R4KTsKKyAgICAgICAgICAgIGJ1ZiA9IGF2cGt0LT5kYXRhOworICAgICAgICAgICAg cmVtYWluaW5nID0gYXZwa3QtPnNpemU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg ZGVmYXVsdDoKKyAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkJhZCBs aWJqeGwgZXZlbnQ6ICVkXG4iLCBqcmV0KTsKKyAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9F WFRFUk5BTDsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGF2X2NvbGQgaW50IGxpYmp4 bF9kZWNvZGVfY2xvc2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQoreworICAgIExpYkp4bERlY29k ZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7CisKKyAgICBpZiAoY3R4LT5ydW5uZXIp CisgICAgICAgIEp4bFRocmVhZFBhcmFsbGVsUnVubmVyRGVzdHJveShjdHgtPnJ1bm5lcik7Cisg ICAgY3R4LT5ydW5uZXIgPSBOVUxMOworICAgIGlmIChjdHgtPmRlY29kZXIpCisgICAgICAgIEp4 bERlY29kZXJEZXN0cm95KGN0eC0+ZGVjb2Rlcik7CisgICAgY3R4LT5kZWNvZGVyID0gTlVMTDsK KyAgICBhdl9idWZmZXJfdW5yZWYoJmN0eC0+aWNjcCk7CisKKyAgICByZXR1cm4gMDsKK30KKwor Y29uc3QgRkZDb2RlYyBmZl9saWJqeGxfZGVjb2RlciA9IHsKKyAgICAucC5uYW1lICAgICAgICAg ICA9ICJsaWJqeGwiLAorICAgIC5wLmxvbmdfbmFtZSAgICAgID0gTlVMTF9JRl9DT05GSUdfU01B TEwoImxpYmp4bCBKUEVHIFhMIiksCisgICAgLnAudHlwZSAgICAgICAgICAgPSBBVk1FRElBX1RZ UEVfVklERU8sCisgICAgLnAuaWQgICAgICAgICAgICAgPSBBVl9DT0RFQ19JRF9KUEVHWEwsCisg ICAgLnByaXZfZGF0YV9zaXplICAgPSBzaXplb2YoTGliSnhsRGVjb2RlQ29udGV4dCksCisgICAg LmluaXQgICAgICAgICAgICAgPSBsaWJqeGxfZGVjb2RlX2luaXQsCisgICAgLmRlY29kZSAgICAg ICAgICAgPSBsaWJqeGxfZGVjb2RlX2ZyYW1lLAorICAgIC5jbG9zZSAgICAgICAgICAgID0gbGli anhsX2RlY29kZV9jbG9zZSwKKyAgICAucC5jYXBhYmlsaXRpZXMgICA9IEFWX0NPREVDX0NBUF9E UjEgfCBBVl9DT0RFQ19DQVBfT1RIRVJfVEhSRUFEUywKKyAgICAuY2Fwc19pbnRlcm5hbCAgICA9 IEZGX0NPREVDX0NBUF9BVVRPX1RIUkVBRFMgfCBGRl9DT0RFQ19DQVBfSU5JVF9DTEVBTlVQLAor ICAgIC5wLndyYXBwZXJfbmFtZSAgID0gImxpYmp4bCIsCit9OwotLSAKMi4zNS4xCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFp bGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJv dmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0 ICJ1bnN1YnNjcmliZSIuCg==