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 71B5E45AA4 for ; Wed, 15 Mar 2023 15:28:39 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3D9E068BCE2; Wed, 15 Mar 2023 17:28:37 +0200 (EET) Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 00B0368BB61 for ; Wed, 15 Mar 2023 17:28:30 +0200 (EET) Received: by mail-wm1-f45.google.com with SMTP id c8-20020a05600c0ac800b003ed2f97a63eso1324769wmr.3 for ; Wed, 15 Mar 2023 08:28:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678894110; h=content-transfer-encoding:content-language:to:subject:from :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=oC56Aiex+jTMvfiEYKgNQAVuB/KxUrSiXbERMokX1VI=; b=BZmBQsrtg45UqzdxArnCLOESNXr2gTknxbPd4Aen1gqxgMNec2Hqxndm5xZ1XG/HKw 41uvY0n1+jF6faRpm90ymxIgUN4lzyVpJuKRoDra2lFgXgOjksOOiWvOfwsqrnFPJi6A VT6xIrjqHy03R0hf1+jG42TuCsQR9ZBXazDsbIHk/gEW2iKIZzbUxK3PvV6SEsT5TNQj AnGj69/gNgOh7PcYE1+DcchjPtUddCEWGiG3c7M9/0ZHYW6Dy2bUAFfWtdC7xg6+4qAw HwDENOXuDi+D75FNpqo7jXqfoGkIYN+DqIqK4GA37bhEhfWym18a9UsBGPLlKx6AafdW XVtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678894110; h=content-transfer-encoding:content-language:to:subject:from :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=oC56Aiex+jTMvfiEYKgNQAVuB/KxUrSiXbERMokX1VI=; b=I0Kx02hBQf1A+Go7P1N0/u+e8XEiHCjbL0Qpy+cKEA6+V7RQrtEeN70qPOBXlbm4yO 9zPTouzrDDlGZ6/mkXxen91SUC+DCrAcEOv3+SeMuNEB2T6DbS1CVqXwlEtx+cV3VQbp rddTqEr/xC7DkBYklGiDYFXgnPA2m6Q59vU0HHyH/9jP04PMin4Qbjh13rtyn+FPBUHj t5Cf9voB6R3ByB7eLEvCUQlRCe1DHYg4fXaOu5TH7PYT528juUU2aEnUrs1sQ+eAJx31 0+AY8eIttCbFb2Tb4Un2S1TzrtPOnK+ybJWpDyrnK0CekEc+h8d2fraHuM4J0OMpZF30 TuEg== X-Gm-Message-State: AO0yUKVAywYClCdpbZh91U+6eoGnH+zdGimMArHzdZCn0mETn+kJNn9P +U11bP3RaV7RcvLWkpOB0O+SgKB3sVtX5w== X-Google-Smtp-Source: AK7set90ZRytzsldweXXnQSf02Su69J96gAQdY2XF9wPA/ILcMvjjg+xC/ejbN4aT3GwZg5YL4T/RQ== X-Received: by 2002:a05:600c:1c23:b0:3e2:669:757 with SMTP id j35-20020a05600c1c2300b003e206690757mr5837696wms.10.1678894109658; Wed, 15 Mar 2023 08:28:29 -0700 (PDT) Received: from [192.168.1.224] ([81.0.1.1]) by smtp.gmail.com with ESMTPSA id bg7-20020a05600c3c8700b003eb2e33f327sm7446330wmb.2.2023.03.15.08.28.29 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 15 Mar 2023 08:28:29 -0700 (PDT) Message-ID: Date: Wed, 15 Mar 2023 16:28:28 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 From: Suraj Shirvankar To: ffmpeg-devel@ffmpeg.org Content-Language: en-US Subject: [FFmpeg-devel] [PATCH] Initial version of PSNR 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 Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: UmVmYWN0b3IgYmFzZWQgb24gQ1IKClNpZ25lZC1vZmYtYnk6IFN1cmFqIFNoaXJ2YW5rYXIgPHN1 cmFqc2hpcnZhbmthckBnbWFpbC5jb20+Ci0tLQogIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAg ICAgfCAgIDEgKwogIGxpYmF2ZmlsdGVyL01ha2VmaWxlICAgICAgICAgfCAgIDEgKwogIGxpYmF2 ZmlsdGVyL2FsbGZpbHRlcnMuYyAgICAgfCAgIDEgKwogIGxpYmF2ZmlsdGVyL29wZW5jbC9wc25y LmNsICAgfCAgNDEgKysrCiAgbGliYXZmaWx0ZXIvb3BlbmNsX3NvdXJjZS5oICB8ICAgMSArCiAg bGliYXZmaWx0ZXIvdmZfcHNucl9vcGVuY2wuYyB8IDU4NSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogIDYgZmlsZXMgY2hhbmdlZCwgNjMwIGluc2VydGlvbnMoKykKICBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvb3BlbmNsL3BzbnIuY2wKICBjcmVhdGUgbW9kZSAx MDA2NDQgbGliYXZmaWx0ZXIvdmZfcHNucl9vcGVuY2wuYwoKZGlmZiAtLWdpdCBhL2NvbmZpZ3Vy ZSBiL2NvbmZpZ3VyZQppbmRleCBiNjYxNmYwLi5mMTI3ZmRlIDEwMDc1NQotLS0gYS9jb25maWd1 cmUKKysrIGIvY29uZmlndXJlCkBAIC0zNzE0LDYgKzM3MTQsNyBAQCBwcF9maWx0ZXJfZGVwcz0i Z3BsIHBvc3Rwcm9jIgogIHByZXdpdHRfb3BlbmNsX2ZpbHRlcl9kZXBzPSJvcGVuY2wiCiAgcHJv Y2FtcF92YWFwaV9maWx0ZXJfZGVwcz0idmFhcGkiCiAgcHJvZ3JhbV9vcGVuY2xfZmlsdGVyX2Rl cHM9Im9wZW5jbCIKK3BzbnJfb3BlbmNsX2ZpbHRlcl9kZXBzPSJvcGVuY2wiCiAgcHVsbHVwX2Zp bHRlcl9kZXBzPSJncGwiCiAgcmVtYXBfb3BlbmNsX2ZpbHRlcl9kZXBzPSJvcGVuY2wiCiAgcmVt b3ZlbG9nb19maWx0ZXJfZGVwcz0iYXZjb2RlYyBhdmZvcm1hdCBzd3NjYWxlIgpkaWZmIC0tZ2l0 IGEvbGliYXZmaWx0ZXIvTWFrZWZpbGUgYi9saWJhdmZpbHRlci9NYWtlZmlsZQppbmRleCBmYzc1 ZDcwLi42NjcxMjNiIDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci9NYWtlZmlsZQorKysgYi9saWJh dmZpbHRlci9NYWtlZmlsZQpAQCAtNDIyLDYgKzQyMiw3IEBAIE9CSlMtJChDT05GSUdfUFJFV0lU VF9PUEVOQ0xfRklMVEVSKSAgICAgICAgICs9IAp2Zl9jb252b2x1dGlvbl9vcGVuY2wubyBvcGVu Y2wubwogIE9CSlMtJChDT05GSUdfUFJPQ0FNUF9WQUFQSV9GSUxURVIpICAgICAgICAgICs9IHZm X3Byb2NhbXBfdmFhcGkubyAKdmFhcGlfdnBwLm8KICBPQkpTLSQoQ09ORklHX1BST0dSQU1fT1BF TkNMX0ZJTFRFUikgICAgICAgICArPSB2Zl9wcm9ncmFtX29wZW5jbC5vIApvcGVuY2wubyBmcmFt ZXN5bmMubwogIE9CSlMtJChDT05GSUdfUFNFVURPQ09MT1JfRklMVEVSKSAgICAgICAgICAgICs9 IHZmX3BzZXVkb2NvbG9yLm8KK09CSlMtJChDT05GSUdfUFNOUl9PUEVOQ0xfRklMVEVSKSAgICAg ICAgICAgICs9IHZmX3BzbnJfb3BlbmNsLm8gCmZyYW1lc3luYy5vIG9wZW5jbC9wc25yLm8KICBP QkpTLSQoQ09ORklHX1BTTlJfRklMVEVSKSAgICAgICAgICAgICAgICAgICArPSB2Zl9wc25yLm8g ZnJhbWVzeW5jLm8KICBPQkpTLSQoQ09ORklHX1BVTExVUF9GSUxURVIpICAgICAgICAgICAgICAg ICArPSB2Zl9wdWxsdXAubwogIE9CSlMtJChDT05GSUdfUVBfRklMVEVSKSAgICAgICAgICAgICAg ICAgICAgICs9IHZmX3FwLm8KZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYyBi L2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYwppbmRleCBkN2RiNDZjLi5kOGJkODMyIDEwMDY0NAot LS0gYS9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMKKysrIGIvbGliYXZmaWx0ZXIvYWxsZmlsdGVy cy5jCkBAIC0zOTksNiArMzk5LDcgQEAgZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX3ZmX3Byb2Nh bXBfdmFhcGk7CiAgZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX3ZmX3Byb2dyYW1fb3BlbmNsOwog IGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl92Zl9wc2V1ZG9jb2xvcjsKICBleHRlcm4gY29uc3Qg QVZGaWx0ZXIgZmZfdmZfcHNucjsKK2V4dGVybiBjb25zdCBBVkZpbHRlciBmZl92Zl9wc25yX29w ZW5jbDsKICBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfdmZfcHVsbHVwOwogIGV4dGVybiBjb25z dCBBVkZpbHRlciBmZl92Zl9xcDsKICBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfdmZfcmFuZG9t OwpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvb3BlbmNsL3BzbnIuY2wgYi9saWJhdmZpbHRlci9v cGVuY2wvcHNuci5jbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzEzZDg1 Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmaWx0ZXIvb3BlbmNsL3BzbnIuY2wKQEAgLTAsMCAr MSw0MSBAQAorX19rZXJuZWwgdm9pZCBjb21wdXRlX2ltYWdlc19tc2VfOGJpdChfX3JlYWRfb25s eSAgaW1hZ2UyZF90IG1haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fcmVhZF9vbmx5ICBpbWFnZTJkX3QgcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3dyaXRlX29ubHkgaW1hZ2UyZF90IG1zZV9pbWcpeworICBjb25zdCBzYW1w bGVyX3Qgc2FtcGxlciA9IChDTEtfTk9STUFMSVpFRF9DT09SRFNfRkFMU0UgfAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIENMS19GSUxURVJfTkVBUkVTVCk7CisgIGludDIgbG9jID0g KGludDIpKGdldF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQoMSkpOworICBpbnQgbXNleCA9 IDAsIG1zZXkgPSAgMCwgbXNleiA9IDA7CisKKyAgZmxvYXQ0IG1haW5fZiwgcmVmX2Y7CisKKyAg bWFpbl9mID0gcmVhZF9pbWFnZWYobWFpbiwgc2FtcGxlciwgbG9jKTsKKyAgcmVmX2YgPSByZWFk X2ltYWdlZihyZWYsIHNhbXBsZXIsIGxvYyk7CisgIG1zZXggPSAoKG1haW5fZi54IC0gcmVmX2Yu eCkgKiAobWFpbl9mLnggLSByZWZfZi54KSAqIDI1NSAqIDI1NSk7CisgIG1zZXkgPSAoKG1haW5f Zi55IC0gcmVmX2YueSkgKiAobWFpbl9mLnkgLSByZWZfZi55KSAqIDI1NSAqIDI1NSk7CisgIG1z ZXogPSAoKG1haW5fZi56IC0gcmVmX2YueikgKiAobWFpbl9mLnogLSByZWZfZi56KSAqIDI1NSAq IDI1NSk7CisgIGludDQgeCA9IChpbnQ0KShtc2V4LCBtc2V5LCBtc2V6LCAwLjApOworICB3cml0 ZV9pbWFnZWkobXNlX2ltZywgbG9jLCB4KTsKKyAgKyAgK30KKworX19rZXJuZWwgdm9pZCBzdW0o X19yZWFkX29ubHkgaW1hZ2UyZF90IG1zZV9pbWcsCisgICAgICAgICAgICAgICAgICBpbnQgaGVp Z2h0LAorICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgZ2xv YmFsIHVsb25nNCogcmVzdWx0KXsKKyAgICBjb25zdCBzYW1wbGVyX3Qgc2FtcGxlciA9IChDTEtf Tk9STUFMSVpFRF9DT09SRFNfRkFMU0UgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IENMS19GSUxURVJfTkVBUkVTVCk7CisgICAgaW50IGluZGV4ID0gZ2V0X2dsb2JhbF9pZCgwKTsK KyAgICB1bG9uZzQgc3VtID0gMDsKKworICAgIGlmKGluZGV4ID4gaGVpZ2h0KQorICAgIHJldHVy bjsKKyAgICBmb3IoaW50IHcgPSAwOyB3IDwgd2lkdGg7IHcrKyl7CisgICAgICAgIGludDQgciA9 IHJlYWRfaW1hZ2VpKG1zZV9pbWcsIHNhbXBsZXIsIChpbnQyKSh3LCBpbmRleCkpOworICAgICAg ICBzdW0ueCArPSByLng7CisgICAgICAgIHN1bS55ICs9IHIueTsKKyAgICAgICAgc3VtLnogKz0g ci56OworICAgIH0KKyAgICBzdW0udyA9IDA7CisgICAgcmVzdWx0W2luZGV4XSA9IHN1bTsKK30K ZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL29wZW5jbF9zb3VyY2UuaCBiL2xpYmF2ZmlsdGVyL29w ZW5jbF9zb3VyY2UuaAppbmRleCA5ZWFjMmRjLi4wNDIxODEwIDEwMDY0NAotLS0gYS9saWJhdmZp bHRlci9vcGVuY2xfc291cmNlLmgKKysrIGIvbGliYXZmaWx0ZXIvb3BlbmNsX3NvdXJjZS5oCkBA IC0yNyw2ICsyNyw3IEBAIGV4dGVybiBjb25zdCBjaGFyICpmZl9vcGVuY2xfc291cmNlX2Rlc2hh a2U7CiAgZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX29wZW5jbF9zb3VyY2VfbmVpZ2hib3I7CiAgZXh0 ZXJuIGNvbnN0IGNoYXIgKmZmX29wZW5jbF9zb3VyY2VfbmxtZWFuczsKICBleHRlcm4gY29uc3Qg Y2hhciAqZmZfb3BlbmNsX3NvdXJjZV9vdmVybGF5OworZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX29w ZW5jbF9zb3VyY2VfcHNucjsKICBleHRlcm4gY29uc3QgY2hhciAqZmZfb3BlbmNsX3NvdXJjZV9w YWQ7CiAgZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX29wZW5jbF9zb3VyY2VfcmVtYXA7CiAgZXh0ZXJu IGNvbnN0IGNoYXIgKmZmX29wZW5jbF9zb3VyY2VfdG9uZW1hcDsKZGlmZiAtLWdpdCBhL2xpYmF2 ZmlsdGVyL3ZmX3BzbnJfb3BlbmNsLmMgYi9saWJhdmZpbHRlci92Zl9wc25yX29wZW5jbC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MDgyZGYKLS0tIC9kZXYvbnVsbAor KysgYi9saWJhdmZpbHRlci92Zl9wc25yX29wZW5jbC5jCkBAIC0wLDAgKzEsNTg1IEBACisvKgor ICogQ29weXJpZ2h0IChjKSAyMDExIFJvZ2VyIFBhdSBNb25uw6kgPHJvZ2VyLnBhdUBlbnRlbC51 cGMuZWR1PgorICogQ29weXJpZ2h0IChjKSAyMDExIFN0ZWZhbm8gU2FiYXRpbmkKKyAqIENvcHly aWdodCAoYykgMjAxMyBQYXVsIEIgTWFob2wKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBG Rm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5z ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVn OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMu LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIAowMjExMC0xMzAx IFVTQQorICovCisKKy8qKgorICogQGZpbGUKKyAqIENhbGN1bGF0ZSB0aGUgUFNOUiBiZXR3ZWVu IHR3byBpbnB1dCB2aWRlb3MuCisgKi8KKworI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5o IgorI2luY2x1ZGUgImxpYmF2dXRpbC9maWxlX29wZW4uaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwv b3B0LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCIKKyNpbmNsdWRlICJhdmZpbHRl ci5oIgorI2luY2x1ZGUgImRyYXd1dGlscy5oIgorI2luY2x1ZGUgImZyYW1lc3luYy5oIgorI2lu Y2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAicHNuci5oIgorI2luY2x1ZGUgIm9wZW5jbC5o IgorI2luY2x1ZGUgIm9wZW5jbF9zb3VyY2UuaCIKKyNpbmNsdWRlICJ0aW1lLmgiCisKK3R5cGVk ZWYgc3RydWN0IFBTTlJPcGVuQ0xDb250ZXh0Cit7CisgICAgT3BlbkNMRmlsdGVyQ29udGV4dCBv Y2Y7CisgICAgaW50IGluaXRpYWxpc2VkOworICAgIEZGRnJhbWVTeW5jIGZzOworICAgIGNsX2tl cm5lbCBrZXJuZWw7CisgICAgY2xfbWVtIG1zZV9pbWc7CisgICAgY2xfbWVtIHdtOworICAgIGNs X2tlcm5lbCBzdW07CisgICAgY2xfY29tbWFuZF9xdWV1ZSBjb21tYW5kX3F1ZXVlOworICAgIGRv dWJsZSBtc2UsIG1pbl9tc2UsIG1heF9tc2UsIG1zZV9jb21wWzRdOworICAgIHVpbnQ2NF90IG5i X2ZyYW1lczsKKyAgICBGSUxFICpzdGF0c19maWxlOworICAgIGNoYXIgKnN0YXRzX2ZpbGVfc3Ry OworICAgIGludCBzdGF0c192ZXJzaW9uOworICAgIGludCBzdGF0c19oZWFkZXJfd3JpdHRlbjsK KyAgICBpbnQgc3RhdHNfYWRkX21heDsKKyAgICBpbnQgbWF4WzRdLCBhdmVyYWdlX21heDsKKyAg ICBpbnQgaXNfcmdiOworICAgIHVpbnQ4X3QgcmdiYV9tYXBbNF07CisgICAgY2hhciBjb21wc1s0 XTsKKyAgICBpbnQgbmJfY29tcG9uZW50czsKKyAgICBpbnQgcGxhbmV3aWR0aFs0XTsKKyAgICBp bnQgcGxhbmVoZWlnaHRbNF07CisgICAgZG91YmxlIHBsYW5ld2VpZ2h0WzRdOworICAgIHVpbnQ2 NF90ICpzY29yZTsKKyAgICBpbnQgY291bnRlcjsKK30gUFNOUk9wZW5DTENvbnRleHQ7CisKK2lu dCBmZl9mcmFtZXN5bmNfZHVhbGlucHV0X2dldF9zaW1wbGUoRkZGcmFtZVN5bmMgKmZzLCBBVkZy YW1lICoqZjAsIApBVkZyYW1lICoqZjEpOworaW50IGZmX2ZyYW1lc3luY19kdWFsaW5wdXRfZ2V0 X3NpbXBsZShGRkZyYW1lU3luYyAqZnMsIEFWRnJhbWUgKipmMCwgCkFWRnJhbWUgKipmMSkKK3sK KyAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IGZzLT5wYXJlbnQ7CisgICAgQVZGcmFtZSAqbWFp bnBpYyA9IE5VTEwsICpzZWNvbmRwaWMgPSBOVUxMOworICAgIGludCByZXQ7CisKKyAgICBpZiAo KHJldCA9IGZmX2ZyYW1lc3luY19nZXRfZnJhbWUoZnMsIDAsICZtYWlucGljLCAwKSkgPCAwIHx8 CisgICAgICAgIChyZXQgPSBmZl9mcmFtZXN5bmNfZ2V0X2ZyYW1lKGZzLCAxLCAmc2Vjb25kcGlj LCAwKSkgPCAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgYXZfYXNz ZXJ0MChtYWlucGljKTsKKyAgICBhdl9hc3NlcnQwKHNlY29uZHBpYyk7CisgICAgbWFpbnBpYy0+ cHRzID0gYXZfcmVzY2FsZV9xKGZzLT5wdHMsIGZzLT50aW1lX2Jhc2UsIApjdHgtPm91dHB1dHNb MF0tPnRpbWVfYmFzZSk7CisgICAgc2Vjb25kcGljLT5wdHMgPSBhdl9yZXNjYWxlX3EoZnMtPnB0 cywgZnMtPnRpbWVfYmFzZSwgCmN0eC0+b3V0cHV0c1swXS0+dGltZV9iYXNlKTsKKyAgICBpZiAo Y3R4LT5pc19kaXNhYmxlZCkKKyAgICAgICAgc2Vjb25kcGljID0gTlVMTDsKKyAgICAqZjAgPSBt YWlucGljOworICAgICpmMSA9IHNlY29uZHBpYzsKKyAgICByZXR1cm4gMDsKK30KK3N0YXRpYyBp bmxpbmUgdW5zaWduZWQgcG93XzIodW5zaWduZWQgYmFzZSkKK3sKKyAgICByZXR1cm4gYmFzZSAq IGJhc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIGdldF9wc25yKGRvdWJsZSBtc2UsIHVp bnQ2NF90IG5iX2ZyYW1lcywgaW50IG1heCkKK3sKKyAgICByZXR1cm4gMTAuMCAqIGxvZzEwKHBv d18yKG1heCkgLyAobXNlIC8gbmJfZnJhbWVzKSk7Cit9CisKK3N0YXRpYyBpbnQgcHNucl9vcGVu Y2xfbG9hZChBVkZpbHRlckNvbnRleHQgKmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVudW0gQVZQaXhlbEZvcm1hdCBtYWluX2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcmVmX2Zvcm1hdCkKK3sKKyAgICBQU05ST3BlbkNM Q29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXY7CisgICAgaW50IGVyciwgc3VtLCBqOworICAgIGNv bnN0IGNoYXIgKnNvdXJjZSA9IGZmX29wZW5jbF9zb3VyY2VfcHNucjsKKyAgICBjbF9pbnQgY2xl OworICAgIEFWRmlsdGVyTGluayAqaW5saW5rID0gYXZjdHgtPmlucHV0c1swXTsKKyAgICBkb3Vi bGUgYXZlcmFnZV9tYXg7CisgICAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICptYWluX2Rlc2M7 CisgICAgY2xfaW50IGhlaWdodCwgd2lkdGg7CisgICAgY2xfaW1hZ2VfZm9ybWF0IGltZ19mb3Jt YXQ7CisgICAgY2xfaW1hZ2VfZGVzYyBpbWdfZGVzYzsKKworICAgIGVyciA9IGZmX29wZW5jbF9m aWx0ZXJfbG9hZF9wcm9ncmFtKGF2Y3R4LCAmc291cmNlLCAxKTsKKyAgICBpZiAoZXJyIDwgMCkK KyAgICAgICAgZ290byBmYWlsOworCisgICAgbWFpbl9kZXNjID0gYXZfcGl4X2ZtdF9kZXNjX2dl dChtYWluX2Zvcm1hdCk7CisgICAgY3R4LT5uYl9jb21wb25lbnRzID0gbWFpbl9kZXNjLT5uYl9j b21wb25lbnRzOworCisgICAgaWYgKGF2Y3R4LT5pbnB1dHNbMF0tPncgIT0gYXZjdHgtPmlucHV0 c1sxXS0+dyB8fAorICAgICAgICBhdmN0eC0+aW5wdXRzWzBdLT5oICE9IGF2Y3R4LT5pbnB1dHNb MV0tPmgpCisgICAgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIldpZHRo IGFuZCBoZWlnaHQgb2YgaW5wdXQgdmlkZW9zIAptdXN0IGJlIHNhbWUuXG4iKTsKKyAgICAgICAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICBjdHgtPm1heFswXSA9ICgxIDw8 IG1haW5fZGVzYy0+Y29tcFswXS5kZXB0aCkgLSAxOworICAgIGN0eC0+bWF4WzFdID0gKDEgPDwg bWFpbl9kZXNjLT5jb21wWzFdLmRlcHRoKSAtIDE7CisgICAgY3R4LT5tYXhbMl0gPSAoMSA8PCBt YWluX2Rlc2MtPmNvbXBbMl0uZGVwdGgpIC0gMTsKKyAgICBjdHgtPm1heFszXSA9ICgxIDw8IG1h aW5fZGVzYy0+Y29tcFszXS5kZXB0aCkgLSAxOworCisgICAgY3R4LT5pc19yZ2IgPSBmZl9maWxs X3JnYmFfbWFwKGN0eC0+cmdiYV9tYXAsIG1haW5fZm9ybWF0KSA+PSAwOworICAgIGN0eC0+Y29t cHNbMF0gPSBjdHgtPmlzX3JnYiA/ICdyJyA6ICd5JzsKKyAgICBjdHgtPmNvbXBzWzFdID0gY3R4 LT5pc19yZ2IgPyAnZycgOiAndSc7CisgICAgY3R4LT5jb21wc1syXSA9IGN0eC0+aXNfcmdiID8g J2InIDogJ3YnOworICAgIGN0eC0+Y29tcHNbM10gPSAnYSc7CisKKyAgICBjdHgtPnBsYW5laGVp Z2h0WzFdID0gY3R4LT5wbGFuZWhlaWdodFsyXSA9IApBVl9DRUlMX1JTSElGVChpbmxpbmstPmgs IG1haW5fZGVzYy0+bG9nMl9jaHJvbWFfaCk7CisgICAgY3R4LT5wbGFuZWhlaWdodFswXSA9IGN0 eC0+cGxhbmVoZWlnaHRbM10gPSBpbmxpbmstPmg7CisgICAgY3R4LT5wbGFuZXdpZHRoWzFdID0g Y3R4LT5wbGFuZXdpZHRoWzJdID0gQVZfQ0VJTF9SU0hJRlQoaW5saW5rLT53LCAKbWFpbl9kZXNj LT5sb2cyX2Nocm9tYV93KTsKKyAgICBjdHgtPnBsYW5ld2lkdGhbMF0gPSBjdHgtPnBsYW5ld2lk dGhbM10gPSBpbmxpbmstPnc7CisgICAgc3VtID0gMDsKKyAgICBmb3IgKGogPSAwOyBqIDwgY3R4 LT5uYl9jb21wb25lbnRzOyBqKyspCisgICAgICAgIHN1bSArPSBjdHgtPnBsYW5laGVpZ2h0W2pd ICogY3R4LT5wbGFuZXdpZHRoW2pdOworICAgIGF2ZXJhZ2VfbWF4ID0gMDsKKyAgICBmb3IgKGog PSAwOyBqIDwgY3R4LT5uYl9jb21wb25lbnRzOyBqKyspCisgICAgeworICAgICAgICBjdHgtPnBs YW5ld2VpZ2h0W2pdID0gKGRvdWJsZSljdHgtPnBsYW5laGVpZ2h0W2pdICogCmN0eC0+cGxhbmV3 aWR0aFtqXSAvIHN1bTsKKyAgICAgICAgYXZlcmFnZV9tYXggKz0gY3R4LT5tYXhbal0gKiBjdHgt PnBsYW5ld2VpZ2h0W2pdOworICAgIH0KKyAgICBjdHgtPmF2ZXJhZ2VfbWF4ID0gbHJpbnQoYXZl cmFnZV9tYXgpOworCisgICAgY3R4LT5zY29yZSA9IGF2X2NhbGxvYyhjdHgtPm5iX2NvbXBvbmVu dHMsIHNpemVvZigqY3R4LT5zY29yZSkpOworICAgIGlmICghY3R4LT5zY29yZSkKKyAgICAgICAg cmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGN0eC0+Y29tbWFuZF9xdWV1ZSA9IGNsQ3Jl YXRlQ29tbWFuZFF1ZXVlKGN0eC0+b2NmLmh3Y3R4LT5jb250ZXh0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+b2NmLmh3Y3R4LT5kZXZpY2VfaWQs CisgCkNMX1FVRVVFX1BST0ZJTElOR19FTkFCTEUsICZjbGUpOworICAgIENMX0ZBSUxfT05fRVJS T1IoQVZFUlJPUihFSU8pLCAiRmFpbGVkIHRvIGNyZWF0ZSBPcGVuQ0wgIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiY29tbWFuZCBxdWV1ZSAlZC5cbiIsCisgICAgICAgICAg ICAgICAgICAgICBjbGUpOworCisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJTZXR0 aW5nIHVwIGtlcm5lbCAuXG4iKTsKKworICAgIGN0eC0+a2VybmVsID0gY2xDcmVhdGVLZXJuZWwo Y3R4LT5vY2YucHJvZ3JhbSwgCiJjb21wdXRlX2ltYWdlc19tc2VfOGJpdCIsICZjbGUpOworICAg IENMX0ZBSUxfT05fRVJST1IoQVZFUlJPUihFSU8pLCAiRmFpbGVkIHRvIGNyZWF0ZSBrZXJuZWwg CmNvbXB1dGVfaW1hZ2VzX21zZV84Yml0ICVkLlxuIiwgY2xlKTsKKworICAgIGN0eC0+c3VtID0g Y2xDcmVhdGVLZXJuZWwoY3R4LT5vY2YucHJvZ3JhbSwgInN1bSIsICZjbGUpOworICAgIENMX0ZB SUxfT05fRVJST1IoQVZFUlJPUihFSU8pLCAiRmFpbGVkIHRvIGNyZWF0ZSBrZXJuZWwgc3VtICVk XG4iLCAKY2xlKTsKKworICAgIGhlaWdodCA9IGN0eC0+cGxhbmVoZWlnaHRbMF07CisgICAgd2lk dGggPSBjdHgtPnBsYW5ld2lkdGhbMF07CisKKyAgICBpbWdfZm9ybWF0ID0gKGNsX2ltYWdlX2Zv cm1hdCl7Q0xfUkdCQSwgQ0xfU0lHTkVEX0lOVDMyfTsKKworICAgIGltZ19kZXNjID0gKGNsX2lt YWdlX2Rlc2MpeworICAgICAgICAuaW1hZ2VfdHlwZSA9IENMX01FTV9PQkpFQ1RfSU1BR0UyRCwK KyAgICAgICAgLmltYWdlX3dpZHRoID0gd2lkdGgsCisgICAgICAgIC5pbWFnZV9oZWlnaHQgPSBo ZWlnaHQsCisgICAgICAgIC5pbWFnZV9kZXB0aCA9IDAsCisgICAgICAgIC5pbWFnZV9hcnJheV9z aXplID0gMCwKKyAgICAgICAgLmltYWdlX3Jvd19waXRjaCA9IDAsCisgICAgICAgIC5pbWFnZV9z bGljZV9waXRjaCA9IDAsCisgICAgICAgIC5udW1fbWlwX2xldmVscyA9IDAsCisgICAgICAgIC5u dW1fc2FtcGxlcyA9IDAsCisgICAgICAgIC5idWZmZXIgPSBOVUxMLAorICAgIH07CisKKyAgICBj dHgtPm1zZV9pbWcgPSBjbENyZWF0ZUltYWdlKGN0eC0+b2NmLmh3Y3R4LT5jb250ZXh0LCAwLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmltZ19mb3JtYXQsICZpbWdfZGVzYywg TlVMTCwgJmNsZSk7CisgICAgQ0xfRkFJTF9PTl9FUlJPUihBVkVSUk9SKEVJTyksICJGYWlsZWQg dG8gY3JlYXRlIGJ1ZmZlcjogJWQuXG4iLCBjbGUpOworCisgICAgY3R4LT53bSA9IGNsQ3JlYXRl QnVmZmVyKGN0eC0+b2NmLmh3Y3R4LT5jb250ZXh0LCAwLCA0ICogaGVpZ2h0ICogCnNpemVvZihj bF91bG9uZyksIE5VTEwsICZjbGUpOworICAgIENMX0ZBSUxfT05fRVJST1IoQVZFUlJPUihFSU8p LCAiRmFpbGVkIHRvIGNyZWF0ZSBidWZmZXI6ICVkLlxuIiwgY2xlKTsKKworICAgIGN0eC0+aW5p dGlhbGlzZWQgPSAxOworICAgIHJldHVybiAwOworCitmYWlsOgorICAgIGlmIChjdHgtPmNvbW1h bmRfcXVldWUpCisgICAgICAgIGNsUmVsZWFzZUNvbW1hbmRRdWV1ZShjdHgtPmNvbW1hbmRfcXVl dWUpOworICAgIGlmIChjdHgtPmtlcm5lbCkKKyAgICAgICAgY2xSZWxlYXNlS2VybmVsKGN0eC0+ a2VybmVsKTsKKyAgICByZXR1cm4gZXJyOworfQorCisjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRv ZihQU05ST3BlbkNMQ29udGV4dCwgeCkKKyNkZWZpbmUgRkxBR1MgQVZfT1BUX0ZMQUdfRklMVEVS SU5HX1BBUkFNIHwgQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0KKworc3RhdGljIGNvbnN0IEFWT3B0 aW9uIHBzbnJfb3BlbmNsX29wdGlvbnNbXSA9IHsKKyAgICB7InN0YXRzX2ZpbGUiLCAiU2V0IGZp bGUgd2hlcmUgdG8gc3RvcmUgcGVyLWZyYW1lIGRpZmZlcmVuY2UgCmluZm9ybWF0aW9uIiwgT0ZG U0VUKHN0YXRzX2ZpbGVfc3RyKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5VTEx9LCAK MCwgMCwgRkxBR1N9LAorICAgIHsiZiIsICJTZXQgZmlsZSB3aGVyZSB0byBzdG9yZSBwZXItZnJh bWUgZGlmZmVyZW5jZSBpbmZvcm1hdGlvbiIsIApPRkZTRVQoc3RhdHNfZmlsZV9zdHIpLCBBVl9P UFRfVFlQRV9TVFJJTkcsIHsuc3RyID0gTlVMTH0sIDAsIDAsIEZMQUdTfSwKKyAgICB7InN0YXRz X3ZlcnNpb24iLCAiU2V0IHRoZSBmb3JtYXQgdmVyc2lvbiBmb3IgdGhlIHN0YXRzIGZpbGUuIiwg Ck9GRlNFVChzdGF0c192ZXJzaW9uKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IDF9LCAxLCAy LCBGTEFHU30sCisgICAgeyJvdXRwdXRfbWF4IiwgIkFkZCByYXcgc3RhdHMgKG1heCB2YWx1ZXMp IHRvIHRoZSBvdXRwdXQgbG9nLiIsIApPRkZTRVQoc3RhdHNfYWRkX21heCksIEFWX09QVF9UWVBF X0JPT0wsIHsuaTY0ID0gMH0sIDAsIDEsIEZMQUdTfSwKKyAgICB7TlVMTH19OworCitGUkFNRVNZ TkNfREVGSU5FX0NMQVNTKHBzbnJfb3BlbmNsLCBQU05ST3BlbkNMQ29udGV4dCwgZnMpOworCitz dGF0aWMgdm9pZCBzZXRfbWV0YShBVkRpY3Rpb25hcnkgKiptZXRhZGF0YSwgY29uc3QgY2hhciAq a2V5LCBjaGFyIApjb21wLCBmbG9hdCBkKQoreworICAgIGNoYXIgdmFsdWVbMTI4XTsKKyAgICBz bnByaW50Zih2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwgIiVmIiwgZCk7CisgICAgaWYgKGNvbXApCisg ICAgeworICAgICAgICBjaGFyIGtleTJbMTI4XTsKKyAgICAgICAgc25wcmludGYoa2V5Miwgc2l6 ZW9mKGtleTIpLCAiJXMlYyIsIGtleSwgY29tcCk7CisgICAgICAgIGF2X2RpY3Rfc2V0KG1ldGFk YXRhLCBrZXkyLCB2YWx1ZSwgMCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGF2 X2RpY3Rfc2V0KG1ldGFkYXRhLCBrZXksIHZhbHVlLCAwKTsKKyAgICB9Cit9CisKK3N0YXRpYyBp bnQgZG9fb3BlbmNsX3BzbnIoRkZGcmFtZVN5bmMgKmZzKQoreworICAgIEFWRmlsdGVyQ29udGV4 dCAqYXZjdHggPSBmcy0+cGFyZW50OworICAgIFBTTlJPcGVuQ0xDb250ZXh0ICpjdHggPSBhdmN0 eC0+cHJpdjsKKyAgICBBVkZpbHRlckxpbmsgKm91dGxpbmsgPSBhdmN0eC0+b3V0cHV0c1swXTsK KyAgICBBVkZyYW1lICpvdXRwdXQ7CisgICAgQVZGcmFtZSAqbWFzdGVyLCAqcmVmOworICAgIGlu dCByZXQsIGVyciwgaTsKKyAgICBjbF9pbnQgY2xlOworICAgIHNpemVfdCBnbG9iYWxfd29ya1sy XTsKKyAgICBpbnQgcGxhbmUsIGtlcm5lbF9hcmcgPSAwOworICAgIGNsX21lbSBtYWluX21lbSwg cmVmX21lbTsKKyAgICBjbF91bG9uZyAqZGF0YV9tZW07CisgICAgZG91YmxlIHBzbnJfYXZnOwor ICAgIHVpbnQ2NF90IGNvbXBfc3VtWzRdID0gezB9OworICAgIGRvdWJsZSBjb21wX21zZVs0XSwg bXNlID0gMC47CisgICAgQVZEaWN0aW9uYXJ5ICoqbWV0YWRhdGE7CisgICAgY2xfaW50IGhlaWdo dCwgd2lkdGg7CisKKyAgICByZXQgPSBmZl9mcmFtZXN5bmNfZHVhbGlucHV0X2dldF9zaW1wbGUo ZnMsICZtYXN0ZXIsICZyZWYpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0 OworCisgICAgaWYgKGF2Y3R4LT5pc19kaXNhYmxlZCB8fCAhcmVmKQorICAgICAgICByZXR1cm4g ZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmssIG1hc3Rlcik7CisKKyAgICBpZiAoIWN0eC0+aW5pdGlh bGlzZWQpCisgICAgeworICAgICAgICBBVkhXRnJhbWVzQ29udGV4dCAqbWFzdGVyX2ZjID0KKyAg ICAgICAgICAgIChBVkhXRnJhbWVzQ29udGV4dCAqKW1hc3Rlci0+aHdfZnJhbWVzX2N0eC0+ZGF0 YTsKKyAgICAgICAgQVZIV0ZyYW1lc0NvbnRleHQgKnJlZl9mYyA9CisgICAgICAgICAgICAoQVZI V0ZyYW1lc0NvbnRleHQgKilyZWYtPmh3X2ZyYW1lc19jdHgtPmRhdGE7CisKKyAgICAgICAgZXJy ID0gcHNucl9vcGVuY2xfbG9hZChhdmN0eCwgbWFzdGVyX2ZjLT5zd19mb3JtYXQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVmX2ZjLT5zd19mb3JtYXQpOworICAgICAgICBpZiAo ZXJyIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgb3V0cHV0ID0g ZmZfZ2V0X3ZpZGVvX2J1ZmZlcihvdXRsaW5rLCBvdXRsaW5rLT53LCBvdXRsaW5rLT5oKTsKKyAg ICBpID0gMDsKKworICAgIGtlcm5lbF9hcmcgPSAwOworICAgIGhlaWdodCA9IGN0eC0+cGxhbmVo ZWlnaHRbaV07CisgICAgd2lkdGggPSBjdHgtPnBsYW5ld2lkdGhbaV07CisKKyAgICBtYWluX21l bSA9IChjbF9tZW0pbWFzdGVyLT5kYXRhW2ldOworICAgIENMX1NFVF9LRVJORUxfQVJHKGN0eC0+ a2VybmVsLCBrZXJuZWxfYXJnLCBjbF9tZW0sICZtYWluX21lbSk7CisgICAga2VybmVsX2FyZysr OworCisgICAgcmVmX21lbSA9IChjbF9tZW0pcmVmLT5kYXRhW2ldOworICAgIENMX1NFVF9LRVJO RUxfQVJHKGN0eC0+a2VybmVsLCBrZXJuZWxfYXJnLCBjbF9tZW0sICZyZWZfbWVtKTsKKyAgICBr ZXJuZWxfYXJnKys7CisKKyAgICBDTF9TRVRfS0VSTkVMX0FSRyhjdHgtPmtlcm5lbCwga2VybmVs X2FyZywgY2xfbWVtLCAmY3R4LT5tc2VfaW1nKTsKKyAgICBrZXJuZWxfYXJnKys7CisKKyAgICBl cnIgPSBmZl9vcGVuY2xfZmlsdGVyX3dvcmtfc2l6ZV9mcm9tX2ltYWdlKGF2Y3R4LCBnbG9iYWxf d29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h c3RlciwgaSwgMCk7CisKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJFbnF1ZWluZyBrZXJuZWxcbiIpOworICAg IGNsZSA9IGNsRW5xdWV1ZU5EUmFuZ2VLZXJuZWwoY3R4LT5jb21tYW5kX3F1ZXVlLCBjdHgtPmtl cm5lbCwgMiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbF93 b3JrLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKKyAgICBDTF9GQUlMX09OX0VSUk9SKEFWRVJST1Io RUlPKSwgIkZhaWxlZCB0byBlbnF1ZXVlIHBzbnIga2VybmVsICIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImZvciBwbGFuZSAlZDogJWQuXG4iLAorICAgICAgICAgICAgICAg ICAgICAgcGxhbmUsIGNsZSk7CisKKyAgICBDTF9TRVRfS0VSTkVMX0FSRyhjdHgtPnN1bSwgMCwg Y2xfbWVtLCAmY3R4LT5tc2VfaW1nKTsKKyAgICBDTF9TRVRfS0VSTkVMX0FSRyhjdHgtPnN1bSwg MSwgY2xfaW50LCAmaGVpZ2h0KTsKKyAgICBDTF9TRVRfS0VSTkVMX0FSRyhjdHgtPnN1bSwgMiwg Y2xfaW50LCAmd2lkdGgpOworICAgIENMX1NFVF9LRVJORUxfQVJHKGN0eC0+c3VtLCAzLCBjbF9t ZW0sICZjdHgtPndtKTsKKworICAgIHNpemVfdCB3b3Jrc2l6ZVsyXSA9IHtoZWlnaHQsIDF9Owor ICAgIGNsZSA9IGNsRW5xdWV1ZU5EUmFuZ2VLZXJuZWwoY3R4LT5jb21tYW5kX3F1ZXVlLCBjdHgt PnN1bSwgMSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzaXpl LCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKKyAgICBDTF9GQUlMX09OX0VSUk9SKEFWRVJST1IoRUlP KSwgIkZhaWxlZCB0byBnZXQgZGF0YTogJWQuXG4iLCBjbGUpOworCisgICAgZGF0YV9tZW0gPSBh dl9tYWxsb2MoNCAqIGhlaWdodCAqIHNpemVvZihjbF91bG9uZykpOworICAgIGlmICghZGF0YV9t ZW0pCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICBjbGUgPSBjbEVucXVl dWVSZWFkQnVmZmVyKGN0eC0+Y29tbWFuZF9xdWV1ZSwgY3R4LT53bSwgQ0xfRkFMU0UsIDAsIAo0 ICogaGVpZ2h0ICogc2l6ZW9mKGNsX3Vsb25nKSwgZGF0YV9tZW0sIDAsIE5VTEwsIE5VTEwpOwor CisgICAgY2xlID0gY2xGaW5pc2goY3R4LT5jb21tYW5kX3F1ZXVlKTsKKyAgICBDTF9GQUlMX09O X0VSUk9SKEFWRVJST1IoRUlPKSwgIkZhaWxlZCB0byBmaW5pc2ggY29tbWFuZCBxdWV1ZTogCiVk LlxuIiwgY2xlKTsKKworICAgIG1ldGFkYXRhID0gJm1hc3Rlci0+bWV0YWRhdGE7CisKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IDQgKiBoZWlnaHQ7IGkgKz0gNCkKKyAgICB7CisgICAgICAgIGNv bXBfc3VtWzBdICs9IGRhdGFfbWVtW2kgKyAwXTsKKyAgICAgICAgY29tcF9zdW1bMV0gKz0gZGF0 YV9tZW1baSArIDFdOworICAgICAgICBjb21wX3N1bVsyXSArPSBkYXRhX21lbVtpICsgMl07Cisg ICAgICAgIGNvbXBfc3VtWzNdICs9IGRhdGFfbWVtW2kgKyAzXTsKKyAgICB9CisKKyAgICBmb3Ig KGludCBjID0gMDsgYyA8IGN0eC0+bmJfY29tcG9uZW50czsgYysrKQorICAgICAgICBjb21wX21z ZVtjXSA9IGNvbXBfc3VtW2NdIC8gKChkb3VibGUpY3R4LT5wbGFuZXdpZHRoW2NdICogCmN0eC0+ cGxhbmVoZWlnaHRbY10pOworCisgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjdHgtPm5iX2NvbXBv bmVudHM7IGMrKykKKyAgICAgICAgbXNlICs9IGNvbXBfbXNlW2NdICogY3R4LT5wbGFuZXdlaWdo dFtjXTsKKworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19UUkFDRSwgInZhbHVlcyAlZiAlZiAlZiAl ZlxuICIsIGNvbXBfbXNlWzBdLCAKY29tcF9tc2VbMV0sIGNvbXBfbXNlWzJdLCBjb21wX21zZVsz XSk7CisKKyAgICBjdHgtPm1pbl9tc2UgPSBGRk1JTihjdHgtPm1pbl9tc2UsIG1zZSk7CisgICAg Y3R4LT5tYXhfbXNlID0gRkZNQVgoY3R4LT5tYXhfbXNlLCBtc2UpOworCisgICAgY3R4LT5tc2Ug Kz0gbXNlOworCisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjdHgtPm5iX2NvbXBvbmVudHM7IGor KykKKyAgICAgICAgY3R4LT5tc2VfY29tcFtqXSArPSBjb21wX21zZVtqXTsKKyAgICBjdHgtPm5i X2ZyYW1lcysrOworCisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1RSQUNFLCAidmFsdWVzICVmICVm ICVmICVmXG4gIiwgY29tcF9tc2VbMF0sIApjb21wX21zZVsxXSwgY29tcF9tc2VbMl0sIGNvbXBf bXNlWzNdKTsKKworICAgIGZvciAoaW50IGogPSAwOyBqIDwgY3R4LT5uYl9jb21wb25lbnRzOyBq KyspCisgICAgeworICAgICAgICBpbnQgYyA9IGN0eC0+aXNfcmdiID8gY3R4LT5yZ2JhX21hcFtq XSA6IGo7CisgICAgICAgIHNldF9tZXRhKG1ldGFkYXRhLCAibGF2ZmkucHNuci5tc2UuIiwgY3R4 LT5jb21wc1tqXSwgY29tcF9tc2VbY10pOworICAgICAgICBzZXRfbWV0YShtZXRhZGF0YSwgImxh dmZpLnBzbnIucHNuci4iLCBjdHgtPmNvbXBzW2pdLCAKZ2V0X3BzbnIoY29tcF9tc2VbY10sIDEs IGN0eC0+bWF4W2NdKSk7CisgICAgfQorICAgIHNldF9tZXRhKG1ldGFkYXRhLCAibGF2ZmkucHNu ci5tc2VfYXZnIiwgMCwgbXNlKTsKKyAgICBwc25yX2F2ZyA9IGdldF9wc25yKG1zZSwgMSwgY3R4 LT5hdmVyYWdlX21heCk7CisgICAgc2V0X21ldGEobWV0YWRhdGEsICJsYXZmaS5wc25yLnBzbnJf YXZnIiwgMCwgcHNucl9hdmcpOworCisgICAgaWYgKGN0eC0+c3RhdHNfZmlsZSkKKyAgICB7Cisg ICAgICAgIGlmIChjdHgtPnN0YXRzX3ZlcnNpb24gPT0gMiAmJiAhY3R4LT5zdGF0c19oZWFkZXJf d3JpdHRlbikKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZihjdHgtPnN0YXRzX2ZpbGUs ICJwc25yX2xvZ192ZXJzaW9uOjIgZmllbGRzOm4iKTsKKyAgICAgICAgICAgIGZwcmludGYoY3R4 LT5zdGF0c19maWxlLCAiLG1zZV9hdmciKTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq IDwgY3R4LT5uYl9jb21wb25lbnRzOyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgZnByaW50ZihjdHgtPnN0YXRzX2ZpbGUsICIsbXNlXyVjIiwgY3R4LT5jb21wc1tqXSk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBmcHJpbnRmKGN0eC0+c3RhdHNfZmlsZSwgIixwc25y X2F2ZyIpOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjdHgtPm5iX2NvbXBvbmVu dHM7IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKGN0eC0+c3Rh dHNfZmlsZSwgIixwc25yXyVjIiwgY3R4LT5jb21wc1tqXSk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAoY3R4LT5zdGF0c19hZGRfbWF4KQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgIGZwcmludGYoY3R4LT5zdGF0c19maWxlLCAiLG1heF9hdmciKTsKKyAgICAgICAgICAg ICAgICBmb3IgKGludCBqID0gMDsgaiA8IGN0eC0+bmJfY29tcG9uZW50czsgaisrKQorICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihjdHgtPnN0YXRzX2ZpbGUs ICIsbWF4XyVjIiwgY3R4LT5jb21wc1tqXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICAgICAgZnByaW50ZihjdHgtPnN0YXRzX2ZpbGUsICJcbiIpOworICAgICAg ICAgICAgY3R4LT5zdGF0c19oZWFkZXJfd3JpdHRlbiA9IDE7CisgICAgICAgIH0KKyAgICAgICAg ZnByaW50ZihjdHgtPnN0YXRzX2ZpbGUsICJuOiUiIFBSSWQ2NCAiIG1zZV9hdmc6JTAuMmYgIiwg CmN0eC0+bmJfZnJhbWVzLCBtc2UpOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGN0eC0+ bmJfY29tcG9uZW50czsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYyA9IGN0eC0+ aXNfcmdiID8gY3R4LT5yZ2JhX21hcFtqXSA6IGo7CisgICAgICAgICAgICBmcHJpbnRmKGN0eC0+ c3RhdHNfZmlsZSwgIm1zZV8lYzolMC4yZiAiLCBjdHgtPmNvbXBzW2pdLCAKY29tcF9tc2VbY10p OworICAgICAgICB9CisgICAgICAgIGZwcmludGYoY3R4LT5zdGF0c19maWxlLCAicHNucl9hdmc6 JTAuMmYgIiwgcHNucl9hdmcpOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGN0eC0+bmJf Y29tcG9uZW50czsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgYyA9IGN0eC0+aXNf cmdiID8gY3R4LT5yZ2JhX21hcFtqXSA6IGo7CisgICAgICAgICAgICBmcHJpbnRmKGN0eC0+c3Rh dHNfZmlsZSwgInBzbnJfJWM6JTAuMmYgIiwgY3R4LT5jb21wc1tqXSwKKyAgICAgICAgICAgICAg ICAgICAgZ2V0X3BzbnIoY29tcF9tc2VbY10sIDEsIGN0eC0+bWF4W2NdKSk7CisgICAgICAgIH0K KyAgICAgICAgaWYgKGN0eC0+c3RhdHNfdmVyc2lvbiA9PSAyICYmIGN0eC0+c3RhdHNfYWRkX21h eCkKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZihjdHgtPnN0YXRzX2ZpbGUsICJtYXhf YXZnOiVkICIsIGN0eC0+YXZlcmFnZV9tYXgpOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7 IGogPCBjdHgtPm5iX2NvbXBvbmVudHM7IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICBpbnQgYyA9IGN0eC0+aXNfcmdiID8gY3R4LT5yZ2JhX21hcFtqXSA6IGo7CisgICAgICAg ICAgICAgICAgZnByaW50ZihjdHgtPnN0YXRzX2ZpbGUsICJtYXhfJWM6JWQgIiwgY3R4LT5jb21w c1tqXSwgCmN0eC0+bWF4W2NdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBm cHJpbnRmKGN0eC0+c3RhdHNfZmlsZSwgIlxuIik7CisgICAgICAgIGZmbHVzaChjdHgtPnN0YXRz X2ZpbGUpOworICAgIH0KKworICAgIGF2X2ZyZWUoZGF0YV9tZW0pOworICAgIHJldHVybiBmZl9m aWx0ZXJfZnJhbWUob3V0bGluaywgb3V0cHV0KTsKKworZmFpbDoKKyAgICByZXR1cm4gZXJyOwor fQorCitzdGF0aWMgYXZfY29sZCBpbnQgcHNucl9vcGVuY2xfaW5pdChBVkZpbHRlckNvbnRleHQg KmN0eCkKK3sKKyAgICBQU05ST3BlbkNMQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKworICAgIHMt Pm1pbl9tc2UgPSArSU5GSU5JVFk7CisgICAgcy0+bWF4X21zZSA9IC1JTkZJTklUWTsKKworICAg IGlmIChzLT5zdGF0c19maWxlX3N0cikKKyAgICB7CisgICAgICAgIGlmIChzLT5zdGF0c192ZXJz aW9uIDwgMiAmJiBzLT5zdGF0c19hZGRfbWF4KQorICAgICAgICB7CisgICAgICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAgICAgInN0YXRzX2FkZF9tYXgg d2FzIHNwZWNpZmllZCBidXQgc3RhdHNfdmVyc2lvbiA8IDIuXG4iKTsKKyAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzdHJjbXAocy0+ c3RhdHNfZmlsZV9zdHIsICItIikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHMtPnN0YXRzX2Zp bGUgPSBzdGRvdXQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg ICAgICBzLT5zdGF0c19maWxlID0gYXZwcml2X2ZvcGVuX3V0Zjgocy0+c3RhdHNfZmlsZV9zdHIs ICJ3Iik7CisgICAgICAgICAgICBpZiAoIXMtPnN0YXRzX2ZpbGUpCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgaW50IGVyciA9IEFWRVJST1IoZXJybm8pOworICAgICAgICAgICAgICAg IGNoYXIgYnVmWzEyOF07CisgICAgICAgICAgICAgICAgYXZfc3RyZXJyb3IoZXJyLCBidWYsIHNp emVvZihidWYpKTsKKyAgICAgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJD b3VsZCBub3Qgb3BlbiBzdGF0cyBmaWxlIAolczogJXNcbiIsCisgICAgICAgICAgICAgICAgICAg ICAgIHMtPnN0YXRzX2ZpbGVfc3RyLCBidWYpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnI7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzLT5mcy5vbl9ldmVudCA9 IGRvX29wZW5jbF9wc25yOworICAgIHJldHVybiBmZl9vcGVuY2xfZmlsdGVyX2luaXQoY3R4KTsK K30KKworc3RhdGljIGludCBwc25yX29wZW5jbF9jb25maWdfaW5wdXRfcmVmKEFWRmlsdGVyTGlu ayAqaW5saW5rKQoreworICAgIEFWRmlsdGVyQ29udGV4dCAqYXZjdHggPSBpbmxpbmstPmRzdDsK KworICAgIGlmICghaW5saW5rLT5od19mcmFtZXNfY3R4KQorICAgIHsKKyAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJPcGVuQ0wgZmlsdGVyaW5nIHJlcXVpcmVzIGEgIgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhcmR3YXJlIGZyYW1lcyBjb250ZXh0 IG9uIHRoZSAKaW5wdXQuXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAg ICB9CisKKyAgICBpZiAoYXZjdHgtPmlucHV0c1sxXSAhPSBpbmxpbmspCisgICAgICAgIHJldHVy biAwOworCisgICAgcmV0dXJuIGZmX29wZW5jbF9maWx0ZXJfY29uZmlnX2lucHV0KGlubGluayk7 Cit9CisKK3N0YXRpYyBpbnQgcHNucl9vcGVuY2xfY29uZmlnX291dHB1dChBVkZpbHRlckxpbmsg Km91dGxpbmspCit7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBvdXRsaW5rLT5zcmM7Cisg ICAgUFNOUk9wZW5DTENvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgQVZGaWx0ZXJMaW5rICpt YWlubGluayA9IGN0eC0+aW5wdXRzWzBdOworICAgIEFWRmlsdGVyTGluayAqcmVmbGluayA9IGN0 eC0+aW5wdXRzWzFdOworICAgIGludCByZXQ7CisKKyAgICByZXQgPSBmZl9mcmFtZXN5bmNfaW5p dF9kdWFsaW5wdXQoJnMtPmZzLCBjdHgpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1 cm4gcmV0OworICAgIG91dGxpbmstPncgPSBtYWlubGluay0+dzsKKyAgICBvdXRsaW5rLT5oID0g bWFpbmxpbmstPmg7CisgICAgb3V0bGluay0+dGltZV9iYXNlID0gbWFpbmxpbmstPnRpbWVfYmFz ZTsKKyAgICBvdXRsaW5rLT5zYW1wbGVfYXNwZWN0X3JhdGlvID0gbWFpbmxpbmstPnNhbXBsZV9h c3BlY3RfcmF0aW87CisgICAgb3V0bGluay0+ZnJhbWVfcmF0ZSA9IG1haW5saW5rLT5mcmFtZV9y YXRlOworICAgIGlmICgocmV0ID0gZmZfZnJhbWVzeW5jX2NvbmZpZ3VyZSgmcy0+ZnMpKSA8IDAp CisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBvdXRsaW5rLT50aW1lX2Jhc2UgPSBzLT5mcy50 aW1lX2Jhc2U7CisKKyAgICBpZiAoYXZfY21wX3EobWFpbmxpbmstPnRpbWVfYmFzZSwgb3V0bGlu ay0+dGltZV9iYXNlKSB8fAorICAgICAgICBhdl9jbXBfcShyZWZsaW5rLT50aW1lX2Jhc2UsIG91 dGxpbmstPnRpbWVfYmFzZSkpCisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19XQVJOSU5HLCAi bm90IG1hdGNoaW5nIHRpbWViYXNlcyBmb3VuZCAKYmV0d2VlbiBmaXJzdCBpbnB1dDogJWQvJWQg YW5kIHNlY29uZCBpbnB1dCAlZC8lZCwgcmVzdWx0cyBtYXkgYmUgCmluY29ycmVjdCFcbiIsCisg ICAgICAgICAgICAgICBtYWlubGluay0+dGltZV9iYXNlLm51bSwgbWFpbmxpbmstPnRpbWVfYmFz ZS5kZW4sCisgICAgICAgICAgICAgICByZWZsaW5rLT50aW1lX2Jhc2UubnVtLCByZWZsaW5rLT50 aW1lX2Jhc2UuZGVuKTsKKworICAgIHJldHVybiBmZl9mcmFtZXN5bmNfY29uZmlndXJlKCZzLT5m cyk7Cit9CisKK3N0YXRpYyBpbnQgcHNucl9vcGVuY2xfYWN0aXZhdGUoQVZGaWx0ZXJDb250ZXh0 ICpjdHgpCit7CisgICAgUFNOUk9wZW5DTENvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgcmV0 dXJuIGZmX2ZyYW1lc3luY19hY3RpdmF0ZSgmcy0+ZnMpOworfQorCitzdGF0aWMgYXZfY29sZCB2 b2lkIHBzbnJfb3BlbmNsX3VuaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBQU05S T3BlbkNMQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKworICAgIGlmIChzLT5uYl9mcmFtZXMgPiAw KQorICAgIHsKKyAgICAgICAgaW50IGo7CisgICAgICAgIGNoYXIgYnVmWzI1Nl07CisKKyAgICAg ICAgYnVmWzBdID0gMDsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHMtPm5iX2NvbXBvbmVudHM7 IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGMgPSBzLT5pc19yZ2IgPyBzLT5yZ2Jh X21hcFtqXSA6IGo7CisgICAgICAgICAgICBhdl9zdHJsY2F0ZihidWYsIHNpemVvZihidWYpLCAi ICVjOiVmIiwgcy0+Y29tcHNbal0sCisgICAgICAgICAgICAgICAgICAgICAgICBnZXRfcHNucihz LT5tc2VfY29tcFtjXSwgcy0+bmJfZnJhbWVzLCBzLT5tYXhbY10pKTsKKyAgICAgICAgfQorICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIlBTTlIlcyBhdmVyYWdlOiVmIG1pbjolZiBt YXg6JWZcbiIsCisgICAgICAgICAgICAgICBidWYsCisgICAgICAgICAgICAgICBnZXRfcHNucihz LT5tc2UsIHMtPm5iX2ZyYW1lcywgcy0+YXZlcmFnZV9tYXgpLAorICAgICAgICAgICAgICAgZ2V0 X3BzbnIocy0+bWF4X21zZSwgMSwgcy0+YXZlcmFnZV9tYXgpLAorICAgICAgICAgICAgICAgZ2V0 X3BzbnIocy0+bWluX21zZSwgMSwgcy0+YXZlcmFnZV9tYXgpKTsKKyAgICB9CisKKyAgICBmZl9m cmFtZXN5bmNfdW5pbml0KCZzLT5mcyk7CisgICAgY2xSZWxlYXNlTWVtT2JqZWN0KHMtPm1zZV9p bWcpOworICAgIGNsUmVsZWFzZU1lbU9iamVjdChzLT53bSk7CisgICAgYXZfZnJlZXAoJnMtPnNj b3JlKTsKKworICAgIGlmIChzLT5zdGF0c19maWxlICYmIHMtPnN0YXRzX2ZpbGUgIT0gc3Rkb3V0 KQorICAgICAgICBmY2xvc2Uocy0+c3RhdHNfZmlsZSk7Cit9CisKK3N0YXRpYyBjb25zdCBBVkZp bHRlclBhZCBwc25yX29wZW5jbF9pbnB1dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lID0g Im1haW4iLAorICAgICAgICAudHlwZSA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICAgICAgLmNv bmZpZ19wcm9wcyA9ICZmZl9vcGVuY2xfZmlsdGVyX2NvbmZpZ19pbnB1dCwKKyAgICB9LAorICAg IHsKKyAgICAgICAgLm5hbWUgPSAicmVmZXJlbmNlIiwKKyAgICAgICAgLnR5cGUgPSBBVk1FRElB X1RZUEVfVklERU8sCisgICAgICAgIC5jb25maWdfcHJvcHMgPSAmcHNucl9vcGVuY2xfY29uZmln X2lucHV0X3JlZiwKKyAgICB9LAorfTsKKworc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIHBzbnJf b3BlbmNsX291dHB1dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lID0gImRlZmF1bHQiLAor ICAgICAgICAudHlwZSA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICAgICAgLmNvbmZpZ19wcm9w cyA9IHBzbnJfb3BlbmNsX2NvbmZpZ19vdXRwdXQsCisgICAgfSwKK307CisKK2NvbnN0IEFWRmls dGVyIGZmX3ZmX3BzbnJfb3BlbmNsID0geworICAgIC5uYW1lID0gInBzbnJfb3BlbmNsIiwKKyAg ICAuZGVzY3JpcHRpb24gPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiQ2FsY3VsYXRlIHRoZSBQU05S IGJldHdlZW4gdHdvIAp2aWRlbyBzdHJlYW1zLiIpLAorICAgIC5wcmVpbml0ID0gcHNucl9vcGVu Y2xfZnJhbWVzeW5jX3ByZWluaXQsCisgICAgLmluaXQgPSBwc25yX29wZW5jbF9pbml0LAorICAg IC51bmluaXQgPSBwc25yX29wZW5jbF91bmluaXQsCisgICAgLmFjdGl2YXRlID0gcHNucl9vcGVu Y2xfYWN0aXZhdGUsCisgICAgLnByaXZfc2l6ZSA9IHNpemVvZihQU05ST3BlbkNMQ29udGV4dCks CisgICAgLnByaXZfY2xhc3MgPSAmcHNucl9vcGVuY2xfY2xhc3MsCisgICAgRklMVEVSX0lOUFVU Uyhwc25yX29wZW5jbF9pbnB1dHMpLAorICAgIEZJTFRFUl9PVVRQVVRTKHBzbnJfb3BlbmNsX291 dHB1dHMpLAorICAgIEZJTFRFUl9TSU5HTEVfUElYRk1UKEFWX1BJWF9GTVRfT1BFTkNMKSwKKyAg ICAuZmxhZ3MgPSBGRl9GSUxURVJfRkxBR19IV0ZSQU1FX0FXQVJFIHwKKyAgICAgICAgICAgICBB VkZJTFRFUl9GTEFHX01FVEFEQVRBX09OTFksCit9OwotLSAKMi4zNC4xCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBs aXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9y IGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1 YnNjcmliZSIuCg==