From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <ffmpeg-devel-bounces@ffmpeg.org> Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id E45214D6DA for <ffmpegdev@gitmailbox.com>; Sat, 19 Apr 2025 10:37:12 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8245C687D6E; Sat, 19 Apr 2025 13:37:07 +0300 (EEST) Received: from mail-qv1-f49.google.com (mail-qv1-f49.google.com [209.85.219.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4CEB5687D59 for <ffmpeg-devel@ffmpeg.org>; Sat, 19 Apr 2025 13:37:01 +0300 (EEST) Received: by mail-qv1-f49.google.com with SMTP id 6a1803df08f44-6f2b05f87bcso25485726d6.3 for <ffmpeg-devel@ffmpeg.org>; Sat, 19 Apr 2025 03:37:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745059020; x=1745663820; darn=ffmpeg.org; h=content-transfer-encoding:in-reply-to:autocrypt:from :content-language:references:to:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=S4DoWCJuKmpvVBVb59ycshUNFwgsGUVmCXvJymGI95Q=; b=nKj/Qy96gtT0/3wU997nfl063joqwOWm7Txbs5tGnCt4FLj0BEJXYmA6oPf+X7x2+Q 9rM1uEqeHD3wIL7GXSJcQsqvaN0DTWFcyIXEMpXQxAkJ9OuDUjzMIJ5IsjsujN520E4n qVIw9xuQLQ+cjr+t1B8AzIiW9HQA0GpKiyINycfL+jLxLtfibhjuUGWjuRg7fUVWkAyf 1UV35HNp7mqAIXrKvN9Z4D7EM6+mL7GHmDAEpEPX4hgD2bKkTnr6bP7n0PY8vhynNAfK K5vbhNqVR/S4I6DHFcpV75VInLdAP8NGx3ABPuXcFQXhnrIsw3gSbQpsjc910yh1r1ET bfcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745059020; x=1745663820; h=content-transfer-encoding:in-reply-to:autocrypt:from :content-language:references:to:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=S4DoWCJuKmpvVBVb59ycshUNFwgsGUVmCXvJymGI95Q=; b=Cad3bRA8MilTxgHJnrcultb1sN4N2YTZzi495CDsVDP7xQl83y8uWENFsw/lDdjHwi yBIugCcJL8jAeNInPA0iti1C5QODydke5EY8xI2Ze5shqmT7skuWEO0ryLVk2PvEsUoH mvawUePwkSva5DVRBYbIplrZpXZnm3Felj33MBAgpXIdvIIqIeWL7S7UITpgxn3vY3z4 k7Q4QQBRqhM2jQiVQFu2JQGhek6+6mWIDWS38a5OdmiD/7yNsiNM3LDdYzpKKdhsjO6K go86usdgQehWzD85cBwvN1+Q6R0qkaypV1qq8B4lLuv8j4dFH/FdecB1NtvNFjt4ppoT 0AUQ== X-Gm-Message-State: AOJu0YylS0l6t5edrRe5bcoYyi6CRmJbiTapXcAUSFdQ0aZym80vUFy8 3sAvNMhBPiM1V1jdHLXGGk+MFZszMiKTUH9a0KsIL/7razws954o7+GJig== X-Gm-Gg: ASbGncujgqPugP/KwrS07ADpRmZU4IE9fIZzAaVaayCxPFrLx9Lks2pTV6jnRd2guJB RJCZzF2rmslsd7fX06zSpw0lSWTPaYqX8af+/TPgNYAWsp19VC0mbXHuwvK9Aof1vhscvLsvgcG edTKu3fLSWSQaFegm908Y2Yr/aMr+7LIE4vIbNZwLp7JqVopmCHJkaJw3sb6iJnkqWP0mtPrO0j TKsDBbqgNarcUN9RHnGyX8QQTcXHKlFnHalB1vuQ4JuDeXrSQFbEFrJ3aKv3gRpWXle0TmwV/to IwIjEk/gy9Q5DOXIO3CXBtK8UufiTbnYQVphfafdnRAMy4ZKBa0vAUJCWmJMuvPWdIOwaXeTcqX NqSiA41mj05bkf93cTDCj X-Google-Smtp-Source: AGHT+IElO1GKthNvt5Fknay72M8BG8pGK9rxiboTydqnn9JJHKMurpvXC8Kh9Gd+aTnfIz2Ule7AbA== X-Received: by 2002:a05:6214:500f:b0:6eb:2f7a:45b0 with SMTP id 6a1803df08f44-6f2c46baaaamr113972996d6.38.1745059019156; Sat, 19 Apr 2025 03:36:59 -0700 (PDT) Received: from [192.168.1.35] (99-104-239-121.lightspeed.livnmi.sbcglobal.net. [99.104.239.121]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6f2c2af1c27sm20481726d6.2.2025.04.19.03.36.56 for <ffmpeg-devel@ffmpeg.org> (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 19 Apr 2025 03:36:57 -0700 (PDT) Message-ID: <ef669c75-c548-4a04-8dca-147e59f67c08@gmail.com> Date: Sat, 19 Apr 2025 06:36:56 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20250417165241.3266643-1-michael@niedermayer.cc> Content-Language: en-US-large From: Leo Izen <leo.izen@gmail.com> Autocrypt: addr=leo.izen@gmail.com; keydata= xjMEZZw8HxYJKwYBBAHaRw8BAQdAgcfI+LbtjWarA7LQu6/WAPlKkn9tn4HalmHgGVhMUdzN KkxlbyBJemVuIChUcmFuZXB0b3JhKSA8bGVvLml6ZW5AZ21haWwuY29tPsKTBBMWCgA7FiEE HYMKC85GcJ4gOyb8dk5I6kgiGDMFAmWcPB8CGwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcC F4AACgkQdk5I6kgiGDOnGAEA+oJFwblAblnhK+T5a5EuEbXMTZG4FkYTYz0VmjJ0NHIA/Rn9 ZE9+EEsH8fmT0hRJSiM3+zbkwQJA9gVVYAek9kMKzjgEZZw8HxIKKwYBBAGXVQEFAQEHQDes 4thejF9AU2rkGuDuut3CQYwB4SVpI4EzU8uvPJgfAwEIB8J4BBgWCgAgFiEEHYMKC85GcJ4g Oyb8dk5I6kgiGDMFAmWcPB8CGwwACgkQdk5I6kgiGDOv3QD+PLXrL0Ihk675Ip5FG+VJOodN 6e+5n3iYC6wJ75eqG3EA/1nCywoGXlCYuzXgq3el6NOn+8awwaXcTVJFzZCRbe8M In-Reply-To: <20250417165241.3266643-1-michael@niedermayer.cc> Subject: Re: [FFmpeg-devel] [PATCH v3] libavutil: Add AVMap X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org> List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe> List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel> List-Post: <mailto:ffmpeg-devel@ffmpeg.org> List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help> List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe> Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org> Archived-At: <https://master.gitmailbox.com/ffmpegdev/ef669c75-c548-4a04-8dca-147e59f67c08@gmail.com/> List-Archive: <https://master.gitmailbox.com/ffmpegdev/> List-Post: <mailto:ffmpegdev@gitmailbox.com> T24gNC8xNy8yNSAxMjo1MiwgTWljaGFlbCBOaWVkZXJtYXllciB3cm90ZToNCj4gQVZMIFRyZWUg YmFzZWQgTWFwDQo+IA0KPiBjb21wYXJlZCB0byBBVkRpY3Rpb25hcnkgdGhpcyBoYXMNCj4gICAq IGNsb25lIGlzIE8obikgaW5zdGVhZCBvZiBPKG7CsikNCj4gICAqIGNvcHkgaXMgTyhuKmxvZyBu KSBpbnN0ZWFkIG9mIE8obsKyKQ0KPiAgICogTyhsb2cgbikgbWFsbG9jKCkgY2FsbHMgYnkgZGVm YXVsdCBhbmQgTygxKSBpZiBhdl9tYXBfcmVhbGxvYygpIGlzIHVzZWQgaW5zdGVhZCBvZiBPKG4p DQo+ICAgKiBnZXQvYWRkL2RlbGV0ZSBpcyBPKGxvZyBuKQ0KPiAgICoNCj4gICAqIFlvdSBjYW4g YWRkIChpZiBtZW1vcnkgaXMgcmVhbGxvY2VkIGJlZm9yZSkgYW5kIHJlbW92ZSBlbnRyaWVzIHdo aWxlIGEgaXRlcmF0b3Igc3RheXMgdmFsaWQNCj4gICAqIGNvcHkgaXMgYXRvbWljLCBhIGZhaWx1 cmUgbWVhbnMgdGhlIGRzdCBpcyB1bmNoYW5nZWQNCj4gICAqDQo+ICAgKiB0aGVyZSBhcmUgcmVz dHJpY3Rpb25zIG9uIHdoYXQgY29tcGFyZSBmdW5jdGlvbiBjYW4gYmUgdXNlZCBvbiBnZXQgZGVw ZW5kaW5nIG9uIGhvdyB0aGUgTWFwIHdhcyBjcmVhdGVkDQo+ICAgKiB5b3UgY2FuIG1peCBjYXNl IHNlbnNpdGl2ZSBhbmQgY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJlIHdpdGggYXZfbWFwX3N1cGVy Y21wXyoNCj4gICAqIFN1cHBvcnRzIGJpbmFyeSBvYmplY3RzLCBub3QganVzdCBzdHJpbmdzDQo+ IA0KPiBTaWduZWQtb2ZmLWJ5OiBNaWNoYWVsIE5pZWRlcm1heWVyIDxtaWNoYWVsQG5pZWRlcm1h eWVyLmNjPg0KPiAtLS0NCj4gICBsaWJhdnV0aWwvTWFrZWZpbGUgICAgICAgIHwgICAzICsNCj4g ICBsaWJhdnV0aWwvbWFwLmMgICAgICAgICAgIHwgNDE1ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrDQo+ICAgbGliYXZ1dGlsL21hcC5oICAgICAgICAgICB8IDI3MCArKysr KysrKysrKysrKysrKysrKysrKysrDQo+ICAgbGliYXZ1dGlsL3Rlc3RzL21hcC5jICAgICB8IDIy MSArKysrKysrKysrKysrKysrKysrKw0KPiAgIGxpYmF2dXRpbC90cmVlLmMgICAgICAgICAgfCAg IDYgKy0NCj4gICBsaWJhdnV0aWwvdHJlZV9pbnRlcm5hbC5oIHwgIDI4ICsrKw0KPiAgIHRlc3Rz L2ZhdGUvbGliYXZ1dGlsLm1hayAgfCAgIDQgKw0KPiAgIHRlc3RzL3JlZi9mYXRlL21hcCAgICAg ICAgfCAgMjcgKysrDQo+ICAgOCBmaWxlcyBjaGFuZ2VkLCA5NjkgaW5zZXJ0aW9ucygrKSwgNSBk ZWxldGlvbnMoLSkNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZ1dGlsL21hcC5jDQo+ICAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2dXRpbC9tYXAuaA0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWJhdnV0aWwvdGVzdHMvbWFwLmMNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZ1dGls L3RyZWVfaW50ZXJuYWwuaA0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9yZWYvZmF0ZS9t YXANCj4gDQo+IGRpZmYgLS1naXQgYS9saWJhdnV0aWwvTWFrZWZpbGUgYi9saWJhdnV0aWwvTWFr ZWZpbGUNCj4gaW5kZXggOWVmMTE4MDE2YmIuLjNhOTI3NDhhNDgyIDEwMDY0NA0KPiAtLS0gYS9s aWJhdnV0aWwvTWFrZWZpbGUNCj4gKysrIGIvbGliYXZ1dGlsL01ha2VmaWxlDQo+IEBAIC04MSw2 ICs4MSw3IEBAIEhFQURFUlMgPSBhZGxlcjMyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gICAgICAgICAgICAgcmVwbGF5Z2Fpbi5oICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ICAgICAg ICAgICAgIHJpcGVtZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXA0KPiAgICAgICAgICAgICBzYW1wbGVmbXQuaCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gKyAgICAgICAgICBtYXAuaCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwN Cj4gICAgICAgICAgICAgc2hhLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcDQo+ICAgICAgICAgICAgIHNoYTUxMi5oICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPiAgICAgICAgICAg ICBzcGhlcmljYWwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwNCj4gQEAgLTE3Myw2ICsxNzQsNyBAQCBPQkpTID0gYWRsZXIzMi5vICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ICAgICAg ICAgIHJjNC5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXA0KPiAgICAgICAgICByaXBlbWQubyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gICAgICAgICAgc2FtcGxlZm10 Lm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc DQo+ICsgICAgICAgbWFwLm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcDQo+ICAgICAgICAgIHNpZGVfZGF0YS5vICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPiAgICAgICAgICBz aGEubyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwNCj4gICAgICAgICAgc2hhNTEyLm8gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+IEBAIC0yOTAsNiArMjkyLDcgQEAgVEVT VFBST0dTID0gYWRsZXIzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXA0KPiAgICAgICAgICAgICAgIHJhbmRvbV9zZWVkICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gICAgICAgICAgICAgICByYXRp b25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc DQo+ICAgICAgICAgICAgICAgcmlwZW1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXA0KPiArICAgICAgICAgICAgbWFwICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPiAgICAgICAgICAg ICAgIHNoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwNCj4gICAgICAgICAgICAgICBzaGE1MTIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ICAgICAgICAgICAgICAgc2lkZV9kYXRh X2FycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPiBk aWZmIC0tZ2l0IGEvbGliYXZ1dGlsL21hcC5jIGIvbGliYXZ1dGlsL21hcC5jDQo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwLi41OWI4N2ExZjA3NA0KPiAtLS0gL2Rl di9udWxsDQo+ICsrKyBiL2xpYmF2dXRpbC9tYXAuYw0KPiBAQCAtMCwwICsxLDQxNSBAQA0KPiAr LyoNCj4gKyAqIENvcHlyaWdodCAoYykgMjAyNSBNaWNoYWVsIE5pZWRlcm1heWVyDQo+ICsgKg0K PiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLg0KPiArICoNCj4gKyAqIEZGbXBlZyBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCj4gKyAqIG1v ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMN Cj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlcg0KPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQo+ICsgKg0KPiArICogRkZtcGVnIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQo+ICsgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0K PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUNCj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuDQo+ICsgKg0KPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KPiArICogTGljZW5zZSBhbG9uZyB3 aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KPiArICogRm91 bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN QSAwMjExMC0xMzAxIFVTQQ0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxpbnR0eXBlcy5oPg0K PiArI2luY2x1ZGUgPHN0cmluZy5oPg0KPiArDQo+ICsjaW5jbHVkZSAiYXZhc3NlcnQuaCINCj4g KyNpbmNsdWRlICJhdnN0cmluZy5oIg0KPiArI2luY2x1ZGUgImVycm9yLmgiDQo+ICsjaW5jbHVk ZSAibWVtLmgiDQo+ICsjaW5jbHVkZSAibWFwLmgiDQo+ICsNCj4gKyNpbmNsdWRlICJ0cmVlX2lu dGVybmFsLmgiIC8vIEZvciBpbXByb3ZlZCByZWFkYWJpbGl0eSB3aXRoIEFWVHJlZU5vZGUsIGRv IE5PVCB0b3VjaCBBVlRyZWVOb2RlIGludGVybmFscw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdHsN Cj4gKyAgICBBVk1hcEVudHJ5IG1hcF9lbnRyeTsNCj4gKyAgICB1aW50OF90IHRyZWVub2RlX2Fu ZF9rZXl2YWx1ZVswXTsNCj4gK30gQVZNYXBJbnRlcm5hbEVudHJ5Ow0KPiArDQo+ICtzdHJ1Y3Qg QVZNYXB7DQo+ICsjZGVmaW5lIENNUF9NQVNLIDMxDQo+ICsgICAgQVZNYXBDb21wYXJlRnVuYyBj bXBbMjddOw0KPiArICAgIEFWTWFwQ29weUZ1bmMgY29weTsNCj4gKyAgICBBVk1hcEZyZWVGdW5j IGZyZWVmOw0KPiArICAgIGludCBjb3VudDsNCj4gKyAgICBpbnQgZGVsZXRlZDsNCj4gKyAgICBp bnQgbmV4dDsgICAgICAgICAgICAgICAgICAgLy8vPCBpbmRleCBvZiBlbnRyeSBpbiByb290IGFy cmF5IGFmdGVyIGFsbCB1c2VkIGVudHJpZXMNCg0KSW5kaWNlcyBpbnRvIGFycmF5cyBhbmQgY291 bnRzIGFuZCB0aGUgbGlrZSBzaG91bGQgYmUgc2l6ZV90Lg0KDQo+ICsgICAgdW5zaWduZWQgaW50 ZXJuYWxfZW50cmllc19sZW47DQo+ICsgICAgQVZUcmVlTm9kZSAqdHJlZV9yb290Ow0KPiArICAg IEFWTWFwSW50ZXJuYWxFbnRyeSAqaW50ZXJuYWxfZW50cmllczsNCj4gK307DQo+ICsNCj4gK3N0 YXRpYyB1aW50OF90IGRlbGV0ZWRfZW50cnk7DQoNCnN0YXRpYyBjb25zdCBzaG91bGQgYWxsb3cg dGhlIGNvbXBpbGVyIHRvIHB1dCBpdCBpbiBhIGRpZmZlcmVudCBzZWN0aW9uIA0KaWYgaXQgd2lz aGVzLiBZb3UgY2FuIHN0aWxsIGFkZHJlc3MgaXQgZXZlbiB0aGVuLg0KDQo+ICsNCj4gK3N0YXRp YyBpbmxpbmUgaW50IGludGVybmFsX2VudHJ5X2xlbihBVk1hcEludGVybmFsRW50cnkgKkkpIHsN Cj4gKyAgICByZXR1cm4gKEktPm1hcF9lbnRyeS5rZXlsZW4gKyBJLT5tYXBfZW50cnkudmFsdWVs ZW4gKyBzaXplb2YgKCpJKSArIHNpemVvZihBVlRyZWVOb2RlKSAtIDEpIC8gc2l6ZW9mICgqSSkg KyAxOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIEFWVHJlZU5vZGUgKiBpbnRlcm5hbF90 cmVlbm9kZShjb25zdCBBVk1hcEludGVybmFsRW50cnkgKkkpDQo+ICt7DQo+ICsgICAgcmV0dXJu IChBVlRyZWVOb2RlICopSS0+dHJlZW5vZGVfYW5kX2tleXZhbHVlOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgaW5saW5lIHVpbnQ4X3QgKiBpbnRlcm5hbF9rZXkoQVZNYXBJbnRlcm5hbEVudHJ5ICpJ KQ0KPiArew0KPiArICAgIHJldHVybiBJLT50cmVlbm9kZV9hbmRfa2V5dmFsdWUgKyBzaXplb2Yo QVZUcmVlTm9kZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdWludDhfdCAqIGludGVy bmFsX3ZhbHVlKEFWTWFwSW50ZXJuYWxFbnRyeSAqSSkNCj4gK3sNCj4gKyAgICByZXR1cm4gSS0+ dHJlZW5vZGVfYW5kX2tleXZhbHVlICsgc2l6ZW9mKEFWVHJlZU5vZGUpICsgSS0+bWFwX2VudHJ5 LmtleWxlbjsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSBBVk1hcEludGVybmFsRW50cnkg KiBrZXl2YWx1ZTJpbnRlcm5hbChjb25zdCB1aW50OF90ICprZXl2YWx1ZSkNCj4gK3sNCj4gKyAg ICByZXR1cm4gKEFWTWFwSW50ZXJuYWxFbnRyeSopKGtleXZhbHVlIC0gb2Zmc2V0b2YoQVZNYXBJ bnRlcm5hbEVudHJ5LCB0cmVlbm9kZV9hbmRfa2V5dmFsdWUpIC0gc2l6ZW9mKEFWVHJlZU5vZGUp KTsNCj4gK30NCj4gKw0KPiAraW50IGF2X21hcF9zdHJjbXBfa2V5dmFsdWUoY29uc3QgY2hhciAq YSwgY29uc3QgY2hhciAqYikNCj4gK3sNCj4gKyAgICBpbnQgdiA9IHN0cmNtcChhLGIpOw0KPiAr ICAgIGlmKCF2KQ0KPiArICAgICAgICB2ID0gc3RyY21wKGEgKyBzdHJsZW4oYSkgKyAxLCBiICsg c3RybGVuKGEpICsgMSk7IC8vIHBsZWFzZSBvcHRpbWl6ZSB0aGlzIGRlYXIgY29tcGlsZXIsIHdl IGtub3cgdGhlIHN0cmxlbiBhZnRlciBzdHJjbXAoKQ0KPiArICAgIHJldHVybiB2Ow0KPiArfQ0K PiArDQo+ICtpbnQgYXZfbWFwX3N1cGVyY21wX2tleShjb25zdCBjaGFyICphLCBjb25zdCBjaGFy ICpiKQ0KPiArew0KPiArICAgIGludCB2ID0gYXZfc3RyY2FzZWNtcChhLGIpOw0KPiArICAgIGlm ICghdikNCj4gKyAgICAgICAgdiA9IHN0cmNtcChhLGIpOw0KPiArDQo+ICsgICAgcmV0dXJuIHY7 DQo+ICt9DQo+ICsNCj4gK2ludCBhdl9tYXBfc3VwZXJjbXBfa2V5dmFsdWUoY29uc3QgY2hhciAq YSwgY29uc3QgY2hhciAqYikNCj4gK3sNCj4gKyAgICBpbnQgdiA9IGF2X21hcF9zdXBlcmNtcF9r ZXkoYSxiKTsNCj4gKyAgICBpZiAoIXYpDQo+ICsgICAgICAgIHYgPSBzdHJjbXAoYSArIHN0cmxl bihhKSArIDEsIGIgKyBzdHJsZW4oYSkgKyAxKTsNCj4gKw0KPiArICAgIHJldHVybiB2Ow0KPiAr fQ0KPiArDQo+ICtpbnQgYXZfbWFwX2FkZF9jbXBfZnVuYyhBVk1hcCAqbSwgQVZNYXBDb21wYXJl RnVuYyBjbXAsIGludCBjbXBfZmxhZ3MpDQo+ICt7DQo+ICsgICAgc3RhdGljIGNvbnN0IHVpbnQ4 X3Qgc2Vuc2l0aXZpdHlbMjddWzNdID0gew0KPiArICAgICAgICB7MCwwLCAwfSx7MSwwLCAwfSx7 MiwwLCAwfSwgezAsMywgMH0sezEsMywgMH0sezIsMywgMH0sIHswLDYsIDB9LHsxLDYsIDB9LHsy LDYsIDB9LA0KPiArICAgICAgICB7MCwwLCA5fSx7MSwwLCA5fSx7MiwwLCA5fSwgezAsMywgOX0s ezEsMywgOX0sezIsMywgOX0sIHswLDYsIDl9LHsxLDYsIDl9LHsyLDYsIDl9LA0KPiArICAgICAg ICB7MCwwLDE4fSx7MSwwLDE4fSx7MiwwLDE4fSwgezAsMywxOH0sezEsMywxOH0sezIsMywxOH0s IHswLDYsMTh9LHsxLDYsMTh9LHsyLDYsMTh9LH07DQo+ICsgICAgaW50IGNhc2Vfc2Vuc2l0aXZl ICAgICAgID0gIHNlbnNpdGl2aXR5W2NtcF9mbGFnc11bMF07DQo+ICsgICAgaW50IGtleXZhbHVl X3NlbnNpdGl2ZSAgID0gIHNlbnNpdGl2aXR5W2NtcF9mbGFnc11bMV07DQo+ICsgICAgaW50IHRy dW5jYXRlZF9zZW5zaXRpdmUgID0gIHNlbnNpdGl2aXR5W2NtcF9mbGFnc11bMl07DQo+ICsNCj4g KyAgICBpZiAoIWtleXZhbHVlX3NlbnNpdGl2ZSB8fCAhdHJ1bmNhdGVkX3NlbnNpdGl2ZSB8fCBj bXBfZmxhZ3MgPj0gMjdVKQ0KPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOw0KDQpO ZWVkIHRvIGNoZWNrIGZvciBjbXBfZmxhZ3MgPj0gMjdVIGJlZm9yZSBpbmRleGluZyBpbnRvIHRo ZSBhcnJheS4gVGhlIA0KY29tcGlsZXIgbWF5IHB1bGwgdGhpcyBhcnJheSBvZmYgdGhlIHN0YWNr IGNhdXNlIGl0J3Mgc3RhdGljIGNvbnN0IHNvIA0KeW91IHJpc2sgaGl0dGluZyBhIGRlYWQgcGFn ZSBoZXJlLg0KDQo+ICsNCj4gKyAgICBhdl9hc3NlcnQxKGNhc2Vfc2Vuc2l0aXZlICsga2V5dmFs dWVfc2Vuc2l0aXZlICsgdHJ1bmNhdGVkX3NlbnNpdGl2ZSA9PSBjbXBfZmxhZ3MpOw0KPiArDQo+ ICsgICAgaWYgKCAgICAgY2FzZV9zZW5zaXRpdmUgPT0gQVZfTUFQX0NNUF9DQVNFX1NFTlNJVElW RSAmJiBtLT5jbXBba2V5dmFsdWVfc2Vuc2l0aXZlICsgQVZfTUFQX0NNUF9DQVNFX0lOU0VOU0lU SVZFXSkNCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsNCj4gKyAgICBpZiAoIGtl eXZhbHVlX3NlbnNpdGl2ZSA9PSBBVl9NQVBfQ01QX0tFWVZBTFVFICAgICAgICYmIG0tPmNtcFtB Vl9NQVBfQ01QX0tFWV0pDQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7DQo+ICsg ICAgaWYgKHRydW5jYXRlZF9zZW5zaXRpdmUgPT0gQVZfTUFQX0NNUF9OT05fVFJVTkNBVEVEICAm JiBtLT5jbXBba2V5dmFsdWVfc2Vuc2l0aXZlICsgQVZfTUFQX0NNUF9UUlVOQ0FURURdKQ0KPiAr ICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOw0KPiArDQo+ICsgICAgLy9tYXggZnVuY3Rp b25zIGlzIEtWIE5UIENTIC0+IEtWIE5UIENJIC0+IEtWIFQgQ0kgKENJL1QgaXMgYWJvdXQgdmFs dWUgb25seSkgLT4gSyBOVCBDUyAtPiBLIE5UIENJIC0+IEsgVCBDSQ0KPiArICAgIC8vbWlzc2lu ZyBpcyBLViBUIENTIGFuZCBLIFQgQ1MsIHdpdGggdGhlbSB3ZSBjYW4gaGF2ZSBLViBOVCBDUyAt PiBLViBUIENTIC0+IEsgTlQgQ1MgLT4gSyBUIENTDQo+ICsNCj4gKyAgICBmb3IgKGludCBpPTA7 IGk8ODsgaSsrKSB7DQo+ICsgICAgICAgIGludCBmbGFncyA9IDA7DQo+ICsgICAgICAgIGlmIChp JjEpIGZsYWdzICs9IGNhc2Vfc2Vuc2l0aXZlOw0KPiArICAgICAgICBpZiAoaSYyKSBmbGFncyAr PSBrZXl2YWx1ZV9zZW5zaXRpdmU7DQo+ICsgICAgICAgIGlmIChpJjQpIGZsYWdzICs9IHRydW5j YXRlZF9zZW5zaXRpdmU7DQo+ICsNCj4gKyAgICAgICAgaWYgKCFtLT5jbXBbZmxhZ3NdKQ0KPiAr ICAgICAgICAgICAgbS0+Y21wW2ZsYWdzXSA9IGNtcDsNCj4gKyAgICB9DQo+ICsgICAgcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gK2ludCBhdl9tYXBfaXNfY21wX2ZsYWdzX3N1cHBvcnRlZChBVk1h cCAqbSwgaW50IGNtcF9mbGFncykNCj4gK3sNCj4gKyAgICBpZiAoY21wX2ZsYWdzID49IDI3VSkN Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsNCj4gKyAgICByZXR1cm4gISFtLT5j bXBbY21wX2ZsYWdzXTsNCj4gK30NCj4gKw0KPiArQVZNYXAgKmF2X21hcF9uZXcoQVZNYXBDb21w YXJlRnVuYyBjbXBfa2V5dmFsdWUsIGludCBjbXBfZmxhZ3MsIEFWTWFwQ29weUZ1bmMgY29weSwg QVZNYXBGcmVlRnVuYyBmcmVlZikNCj4gK3sNCj4gKyAgICBBVk1hcCAqcyA9IGF2X21hbGxvY3oo c2l6ZW9mKCpzKSk7DQo+ICsgICAgaWYgKCFzKQ0KPiArICAgICAgICByZXR1cm4gTlVMTDsNCj4g Kw0KPiArICAgIHMtPmNvcHkgICAgICAgICAgPSBjb3B5Ow0KPiArICAgIHMtPmZyZWVmICAgICAg ICAgPSBmcmVlZjsNCj4gKw0KPiArICAgIGF2X21hcF9hZGRfY21wX2Z1bmMocywgY21wX2tleXZh bHVlLCBjbXBfZmxhZ3MpOw0KDQpObyBjaGVjayBmb3IgcmV0dXJuIHZhbHVlLiBhdl9tYXBfYWRk X2NtcF9mdW5jIGNhbiByZXR1cm4gDQpBVkVSUk9SKEVJTlZBTCkgZGVwZW5kaW5nIG9uIGNtcF9m bGFncy4NCg0KPiArDQo+ICsgICAgcmV0dXJuIHM7DQo+ICt9DQo+ICsNCj4gK2NvbnN0IEFWTWFw RW50cnkgKmF2X21hcF9nZXRfbXVsdGlwbGUoY29uc3QgQVZNYXAgKnMsIGNvbnN0IEFWTWFwRW50 cnkgKnByZXYsIGNvbnN0IGNoYXIgKmtleXZhbHVlLCBpbnQgZmxhZ3MpDQo+ICt7DQo+ICsgICAg QVZNYXBDb21wYXJlRnVuYyBjbXAgPSBzLT5jbXBbZmxhZ3MgJiBDTVBfTUFTS107DQo+ICsNCj4g KyAgICBpZiAocHJldikgew0KPiArICAgICAgICB2b2lkICpuZXh0X25vZGVbMl0gPSB7IE5VTEws IE5VTEwgfTsNCj4gKyAgICAgICAgdm9pZCAqcHJldl9rZXl2YWx1ZSA9IGF2X3RyZWVfZmluZDIo cy0+dHJlZV9yb290LCBwcmV2LT5rZXksIHMtPmNtcFswXSwgbmV4dF9ub2RlLCAyKTsNCj4gKyAg ICAgICAgYXZfYXNzZXJ0MihwcmV2X2tleXZhbHVlKTsNCj4gKyAgICAgICAgaWYgKCFuZXh0X25v ZGVbMV0gfHwgY21wKG5leHRfbm9kZVsxXSwga2V5dmFsdWUpKQ0KPiArICAgICAgICAgICAgcmV0 dXJuIE5VTEw7DQo+ICsNCj4gKyAgICAgICAga2V5dmFsdWUgPSBuZXh0X25vZGVbMV07DQo+ICsg ICAgfSBlbHNlIHsNCj4gKyAgICAgICAgdm9pZCAqbmV4dF9ub2RlWzRdID0geyBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMIH07DQo+ICsgICAgICAgIGtleXZhbHVlID0gYXZfdHJlZV9maW5kMihzLT50 cmVlX3Jvb3QsIGtleXZhbHVlLCBjbXAsIG5leHRfbm9kZSwgNCk7DQo+ICsgICAgICAgIGlmIChu ZXh0X25vZGVbMl0pIC8vIElmIHdlIGhhdmUgYSBsZWZ0bW9zdCBlcXVhbCBrZXl2YWx1ZSwgdXNl IGl0IGluc3RlYWQNCj4gKyAgICAgICAgICAgIGtleXZhbHVlID0gbmV4dF9ub2RlWzJdOw0KPiAr ICAgIH0NCj4gKw0KPiArICAgIGlmICgha2V5dmFsdWUpDQo+ICsgICAgICAgIHJldHVybiBOVUxM Ow0KPiArDQo+ICsgICAgcmV0dXJuICZrZXl2YWx1ZTJpbnRlcm5hbChrZXl2YWx1ZSktPm1hcF9l bnRyeTsNCj4gK30NCj4gKw0KPiArY29uc3QgQVZNYXBFbnRyeSAqYXZfbWFwX2dldChjb25zdCBB Vk1hcCAqcywgY29uc3QgY2hhciAqa2V5dmFsdWUsIGludCBmbGFncykNCj4gK3sNCj4gKyAgICBB Vk1hcENvbXBhcmVGdW5jIGNtcCA9IHMtPmNtcFtmbGFncyAmIENNUF9NQVNLXTsNCj4gKw0KPiAr ICAgIGtleXZhbHVlID0gYXZfdHJlZV9maW5kMihzLT50cmVlX3Jvb3QsIGtleXZhbHVlLCBjbXAs IE5VTEwsIDApOw0KPiArDQo+ICsgICAgaWYgKCFrZXl2YWx1ZSkNCj4gKyAgICAgICAgcmV0dXJu IE5VTEw7DQo+ICsNCj4gKyAgICByZXR1cm4gJmtleXZhbHVlMmludGVybmFsKGtleXZhbHVlKS0+ bWFwX2VudHJ5Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCB1cGRhdGVfcG9pbnRlcnMoQVZN YXAgKmRzdCwgQVZNYXBJbnRlcm5hbEVudHJ5ICpkc3RfaW50ZXJuYWxfZW50cmllcywgY29uc3Qg QVZNYXBJbnRlcm5hbEVudHJ5ICpzcmNfaW50ZXJuYWxfZW50cmllcykNCj4gK3sNCj4gKyAgICBB VlRyZWVOb2RlICpzcmNfdHJlZV9yb290ID0gZHN0LT50cmVlX3Jvb3Q7DQo+ICsNCj4gKyAgICBp ZiAoc3JjX3RyZWVfcm9vdCkgew0KPiArICAgICAgICBkc3QtPnRyZWVfcm9vdCA9IHNyY190cmVl X3Jvb3QgLSBpbnRlcm5hbF90cmVlbm9kZShzcmNfaW50ZXJuYWxfZW50cmllcykgKyBpbnRlcm5h bF90cmVlbm9kZShkc3RfaW50ZXJuYWxfZW50cmllcyk7DQo+ICsgICAgICAgIGF2X3RyZWVfbW92 ZShkc3QtPnRyZWVfcm9vdCwgc3JjX3RyZWVfcm9vdCwgZHN0X2ludGVybmFsX2VudHJpZXMsIHNy Y19pbnRlcm5hbF9lbnRyaWVzKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvL1RPRE8gV2UgY291 bGQgYXR0ZW1wdCB0byBjb21wYWN0IGZyZWUgc3BhY2UNCj4gKyAgICBmb3IoaW50IGkgPSAwOyBp PGRzdC0+bmV4dDsgaSsrKSB7DQo+ICsgICAgICAgIGlmIChkc3RfaW50ZXJuYWxfZW50cmllc1tp XS5tYXBfZW50cnkua2V5ICE9ICZkZWxldGVkX2VudHJ5KSB7DQo+ICsgICAgICAgICAgICBkc3Rf aW50ZXJuYWxfZW50cmllc1tpXS5tYXBfZW50cnkua2V5ICAgPSBpbnRlcm5hbF9rZXkgIChkc3Rf aW50ZXJuYWxfZW50cmllcyArIGkpOw0KPiArICAgICAgICAgICAgZHN0X2ludGVybmFsX2VudHJp ZXNbaV0ubWFwX2VudHJ5LnZhbHVlID0gaW50ZXJuYWxfdmFsdWUoZHN0X2ludGVybmFsX2VudHJp ZXMgKyBpKTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBpICs9IGludGVybmFsX2VudHJ5X2xl bihkc3RfaW50ZXJuYWxfZW50cmllcyArIGkpIC0gMTsNCj4gKyAgICB9DQo+ICsgICAgZHN0LT5p bnRlcm5hbF9lbnRyaWVzID0gZHN0X2ludGVybmFsX2VudHJpZXM7DQo+ICt9DQo+ICsNCj4gK2lu dCBhdl9tYXBfcmVhbGxvYyhBVk1hcCAqcywgaW50IGV4dHJhX2VsZW1lbnRzLCBpbnQgZXh0cmFf c3BhY2UpIHsNCj4gKyAgICBpbnQ2NF90IGFkdmFuY2UgPSBleHRyYV9lbGVtZW50cyArIChleHRy YV9zcGFjZSArIChpbnQ2NF90KWV4dHJhX2VsZW1lbnRzKihzaXplb2YoKnMtPmludGVybmFsX2Vu dHJpZXMpICsgc2l6ZW9mKEFWVHJlZU5vZGUpIC0gMSkpIC8gc2l6ZW9mKCpzLT5pbnRlcm5hbF9l bnRyaWVzKTsNCj4gKw0KPiArICAgIGlmIChhZHZhbmNlID4gKElOVDMyX01BWCAtIHMtPm5leHQp IC8gc2l6ZW9mKEFWTWFwSW50ZXJuYWxFbnRyeSkpDQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7DQo+ICsNCj4gKyAgICBBVk1hcEludGVybmFsRW50cnkgKm5ld19pbnRlcm5hbF9l bnRyaWVzID0gYXZfZmFzdF9yZWFsbG9jKHMtPmludGVybmFsX2VudHJpZXMsICZzLT5pbnRlcm5h bF9lbnRyaWVzX2xlbiwgKHMtPm5leHQgKyBhZHZhbmNlKSAqIHNpemVvZihBVk1hcEludGVybmFs RW50cnkpKTsNCj4gKw0KPiArICAgIGlmICghbmV3X2ludGVybmFsX2VudHJpZXMpDQo+ICsgICAg ICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7DQo+ICsNCj4gKyAgICBpZiAobmV3X2ludGVybmFs X2VudHJpZXMgIT0gcy0+aW50ZXJuYWxfZW50cmllcykgew0KPiArICAgICAgICB1cGRhdGVfcG9p bnRlcnMocywgbmV3X2ludGVybmFsX2VudHJpZXMsIHMtPmludGVybmFsX2VudHJpZXMpOw0KPiAr ICAgIH0NCg0KQ29kZSBzdHlsZTogcmVtb3ZlIHt9DQoNCg0KPiArICAgIHJldHVybiBhZHZhbmNl Ow0KPiArfQ0KPiArDQo+ICtpbnQgYXZfbWFwX2FkZChBVk1hcCAqcywgY29uc3QgY2hhciAqa2V5 LCBpbnQga2V5bGVuLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHZhbHVlbGVuLCBpbnQgZmxhZ3Mp DQo+ICt7DQo+ICsgICAgYXZfYXNzZXJ0MihrZXlsZW4gfHwgdmFsdWVsZW4pOyAvLyBwYXRjaCB3 ZWxjb21lIGJ1dCBob3cgd291bGQgdGhlIGNvbXBhcmUgZnVuY3Rpb24gY29tcGFyZSBhIGxlbj0w IGVsZW1lbnQgd2l0aG91dCBrbm93aW5nIGl0IGlzIGEgbGVuIDAgZWxlbWVudA0KPiArDQoNClRo aXMgaXMgYSBwdWJsaWMgZnVuY3Rpb24gc28gd2Ugc2hvdWxkIGJlIHJldHVybmluZyBBVkVSUk9S KEVJTlZBTCkgb24gDQppbnZhbGlkIGlucHV0IHJhdGhlciB0aGFuIGFzc2VydGluZy4gU2luY2Ug YSBsaWJyYXJ5IHVzZXIgY291bGQgZG8gdGhhdC4NCg0KPiArICAgIGludCBhZHZhbmNlID0gYXZf bWFwX3JlYWxsb2MocywgMSwga2V5bGVuICsgdmFsdWVsZW4pOw0KPiArICAgIGlmIChhZHZhbmNl IDwgMCkNCj4gKyAgICAgICAgcmV0dXJuIGFkdmFuY2U7DQo+ICsNCj4gKyAgICBBVk1hcEVudHJ5 ICplbnRyeSA9ICZzLT5pbnRlcm5hbF9lbnRyaWVzW3MtPm5leHRdLm1hcF9lbnRyeTsNCj4gKyAg ICBBVlRyZWVOb2RlICpuZXh0ID0gaW50ZXJuYWxfdHJlZW5vZGUocy0+aW50ZXJuYWxfZW50cmll cyArIHMtPm5leHQpOw0KPiArICAgIG1lbXNldChuZXh0LCAwLCBzaXplb2YoKm5leHQpKTsNCj4g KyAgICBlbnRyeS0+a2V5bGVuICA9IGtleWxlbjsNCj4gKyAgICBlbnRyeS0+dmFsdWVsZW49IHZh bHVlbGVuOw0KPiArICAgIGVudHJ5LT5rZXkgICAgID0gaW50ZXJuYWxfa2V5ICAocy0+aW50ZXJu YWxfZW50cmllcyArIHMtPm5leHQpOw0KPiArICAgIGVudHJ5LT52YWx1ZSAgID0gaW50ZXJuYWxf dmFsdWUocy0+aW50ZXJuYWxfZW50cmllcyArIHMtPm5leHQpOw0KPiArICAgIG1lbWNweShlbnRy eS0+a2V5ICAsIGtleSAgLCBrZXlsZW4pOw0KPiArICAgIG1lbWNweShlbnRyeS0+dmFsdWUsIHZh bHVlLCB2YWx1ZWxlbik7DQo+ICsNCj4gKyAgICB2b2lkICplbGVtID0gYXZfdHJlZV9pbnNlcnQo JnMtPnRyZWVfcm9vdCwgZW50cnktPmtleSwgcy0+Y21wWzBdLCAmbmV4dCk7DQo+ICsgICAgaW50 IHJldCA9IDE7DQo+ICsgICAgaWYgKGVsZW0gIT0gZW50cnktPmtleSAmJiBlbGVtKSB7DQo+ICsg ICAgICAgIGF2X2Fzc2VydDIobmV4dCk7DQo+ICsgICAgICAgIC8vd2UgYXNzdW1lIHRoYXQgbmV3 IGVudHJpZXMgYXJlIG1vcmUgY29tbW9uIHRoYW4gcmVwbGFjZW1lbnRzDQo+ICsgICAgICAgIGlm IChmbGFncyAmIEFWX01BUF9SRVBMQUNFKSB7DQo+ICsgICAgICAgICAgICByZXQgPSBhdl9tYXBf ZGVsKHMsIGVudHJ5LT5rZXksIGZsYWdzICYgfkNNUF9NQVNLKTsNCj4gKyAgICAgICAgICAgIGF2 X2Fzc2VydDIocmV0ID09IDEpOw0KPiArICAgICAgICAgICAgZWxlbSA9IGF2X3RyZWVfaW5zZXJ0 KCZzLT50cmVlX3Jvb3QsIGVudHJ5LT5rZXksIHMtPmNtcFswXSwgJm5leHQpOw0KPiArICAgICAg ICAgICAgYXZfYXNzZXJ0MihlbGVtID09IGVudHJ5LT5rZXkgfHwgIWVsZW0pOw0KPiArICAgICAg ICAgICAgcmV0ID0gMjsNCj4gKyAgICAgICAgfSBlbHNlDQo+ICsgICAgICAgICAgICByZXR1cm4g MDsgLy9lbnRyeSBhbHJlYWR5IGluIHRoZSBtYXANCj4gKyAgICB9DQo+ICsgICAgYXZfYXNzZXJ0 MighbmV4dCk7DQo+ICsgICAgYXZfYXNzZXJ0MihzLT50cmVlX3Jvb3QpOw0KPiArICAgIHMtPm5l eHQgKz0gYWR2YW5jZTsNCj4gKyAgICBzLT5jb3VudCsrOw0KPiArDQo+ICsgICAgcmV0dXJuIHJl dDsNCj4gK30NCj4gKw0KPiAraW50IGF2X21hcF9hZGRfc3RyaW5ncyhBVk1hcCAqcywgY29uc3Qg Y2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IGZsYWdzKQ0KPiArew0KPiArICAgIHJl dHVybiBhdl9tYXBfYWRkKHMsIGtleSwgc3RybGVuKGtleSkrMSwgdmFsdWUsIHN0cmxlbih2YWx1 ZSkrMSwgZmxhZ3MpOw0KPiArfQ0KPiArDQo+ICtpbnQgYXZfbWFwX2RlbChBVk1hcCAqcywgY29u c3QgY2hhciAqa2V5dmFsdWUsIGludCBmbGFncykNCj4gK3sNCj4gKyAgICB1aW50OF90ICpvbGRf a2V5dmFsdWU7DQo+ICsgICAgQVZUcmVlTm9kZSAqbmV4dCA9IE5VTEw7DQo+ICsgICAgQVZNYXBD b21wYXJlRnVuYyBjbXAgPSBzLT5jbXBbZmxhZ3MgJiBDTVBfTUFTS107DQo+ICsNCj4gKyAgICBp ZiAoY21wICE9IHMtPmNtcFswXSkgew0KPiArICAgICAgICAvLyBUaGUgdXNlciBhc2tzIHVzIHRv IHJlbW92ZSBhIGVudHJ5IHdpdGggYSBjb21wYXJlIGZ1bmN0aW9uIGRpZmZlcmVudCBmcm9tIHRo ZSBvbmUgdXNlZCB0byBidWlsZCB0aGUgbWFwDQo+ICsgICAgICAgIC8vIHdlIG5lZWQgdG8gZG8g MiBjYWxscyBoZXJlLCBmaXJzdCB3aXRoIHRoZSB1c2VycyBjb21wYXJlIHRvIGZpbmQgdGhlIGVu dHJ5IHNoZSB3YW50cyB0byByZW1vdmUNCj4gKyAgICAgICAgLy8gYW5kIHRoZW4gdG8gcmVtb3Zl IGl0IHdoaWxlIG1haW50YWluaW5nIHRoZSBjb3JyZWN0IG9yZGVyIHdpdGhpbiB0aGUgbWFwDQo+ ICsgICAgICAgIG9sZF9rZXl2YWx1ZSA9IGF2X3RyZWVfZmluZDIocy0+dHJlZV9yb290LCBrZXl2 YWx1ZSwgY21wLCBOVUxMLCAwKTsNCj4gKyAgICAgICAgaWYgKCFvbGRfa2V5dmFsdWUpDQo+ICsg ICAgICAgICAgICByZXR1cm4gMDsNCj4gKw0KPiArICAgICAgICBhdl90cmVlX2luc2VydCgmcy0+ dHJlZV9yb290LCBvbGRfa2V5dmFsdWUsIHMtPmNtcFswXSwgJm5leHQpOw0KPiArICAgICAgICBh dl9hc3NlcnQyKG5leHQpOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIGF2X3RyZWVfaW5z ZXJ0KCZzLT50cmVlX3Jvb3QsIChjaGFyKilrZXl2YWx1ZSwgcy0+Y21wWzBdLCAmbmV4dCk7DQo+ ICsgICAgICAgIGlmICghbmV4dCkNCj4gKyAgICAgICAgICAgIHJldHVybiAwOw0KPiArICAgICAg ICBvbGRfa2V5dmFsdWUgPSBuZXh0LT5lbGVtOyAvL1RPRE8gYWRkIGEgQVBJIHRvIGF2X3RyZWUo KSB0byByZXR1cm4gdGhlIGVsZW0gb2YgYSBBVlRyZWVOb2RlDQo+ICsNCj4gKyAgICB9DQo+ICsg ICAgQVZNYXBJbnRlcm5hbEVudHJ5ICppbnRlcm5hbF9lbnRyeSA9IGtleXZhbHVlMmludGVybmFs KG9sZF9rZXl2YWx1ZSk7DQo+ICsgICAgaW50ZXJuYWxfZW50cnktPm1hcF9lbnRyeS5rZXkgPSAm ZGVsZXRlZF9lbnRyeTsNCj4gKw0KPiArICAgIHMtPmNvdW50LS07DQo+ICsgICAgcy0+ZGVsZXRl ZCsrOw0KPiArDQo+ICsgICAgaWYgKChmbGFncyAmIEFWX01BUF9BTExPV19SRUJVSUxEKSAmJiBz LT5kZWxldGVkID4gcy0+Y291bnQpIHsNCj4gKyAgICAgICAgQVZNYXAgKm5ld3MgPSBhdl9tYXBf bmV3KHMtPmNtcFswXSwgQVZfTUFQX0NNUF9LRVlWQUxVRSArIEFWX01BUF9DTVBfTk9OX1RSVU5D QVRFRCwgcy0+Y29weSwgcy0+ZnJlZWYpOw0KPiArICAgICAgICBpZihuZXdzKSB7DQo+ICsgICAg ICAgICAgICBtZW1jcHkobmV3cy0+Y21wLCBzLT5jbXAsIHNpemVvZihuZXdzLT5jbXApKTsNCj4g KyAgICAgICAgICAgIGludCByZXQgPSBhdl9tYXBfY29weShuZXdzLCBzKTsNCj4gKyAgICAgICAg ICAgIGlmIChyZXQgPCAwKSB7DQo+ICsgICAgICAgICAgICAgICAgYXZfbWFwX2ZyZWUoJm5ld3Mp Ow0KPiArICAgICAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICAgICBpZiAocy0+ZnJl ZWYpDQo+ICsgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxzLT5jb3VudDsgaSsr KQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgcy0+ZnJlZWYoJnMtPmludGVybmFsX2VudHJp ZXNbaV0ubWFwX2VudHJ5KTsNCj4gKyAgICAgICAgICAgICAgICBhdl9mcmVlcCgmcy0+aW50ZXJu YWxfZW50cmllcyk7DQo+ICsgICAgICAgICAgICAgICAgbWVtY3B5KHMsIG5ld3MsIHNpemVvZigq cykpOw0KPiArICAgICAgICAgICAgfQ0KPiArICAgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgcmV0dXJuIDE7DQo+ICt9DQo+ICsNCj4gK2NvbnN0IEFWTWFwRW50cnkgKmF2X21hcF9pdGVy YXRlKGNvbnN0IEFWTWFwICpzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgQVZNYXBFbnRyeSAqcHJldikNCj4gK3sNCj4gKyAgICBBVk1hcEludGVybmFsRW50cnkg Kkk7DQo+ICsgICAgaWYgKHByZXYpIHsNCj4gKyAgICAgICAgSSA9IChBVk1hcEludGVybmFsRW50 cnkqKSgodWludDhfdCopcHJldiAtIG9mZnNldG9mKEFWTWFwSW50ZXJuYWxFbnRyeSwgbWFwX2Vu dHJ5KSk7DQo+ICsgICAgICAgIEkgKz0gaW50ZXJuYWxfZW50cnlfbGVuKEkpOw0KPiArICAgIH0g ZWxzZSB7DQo+ICsgICAgICAgIEkgPSBzLT5pbnRlcm5hbF9lbnRyaWVzOw0KPiArICAgIH0NCj4g KyAgICB3aGlsZSAoSSA8IHMtPmludGVybmFsX2VudHJpZXMgKyBzLT5uZXh0ICYmIEktPm1hcF9l bnRyeS5rZXkgPT0gJmRlbGV0ZWRfZW50cnkpDQo+ICsgICAgICAgIEkgKz0gaW50ZXJuYWxfZW50 cnlfbGVuKEkpOw0KPiArDQo+ICsgICAgaWYgKEkgPT0gcy0+aW50ZXJuYWxfZW50cmllcyArIHMt Pm5leHQpDQo+ICsgICAgICAgIHJldHVybiBOVUxMOw0KPiArDQo+ICsgICAgcmV0dXJuICZJLT5t YXBfZW50cnk7DQo+ICt9DQo+ICsNCj4gK2ludCBhdl9tYXBfY291bnQoY29uc3QgQVZNYXAgKnMp DQo+ICt7DQo+ICsgICAgcmV0dXJuIHMtPmNvdW50Ow0KPiArfQ0KPiArDQo+ICt2b2lkIGF2X21h cF9mcmVlKEFWTWFwICoqc3ApDQo+ICt7DQo+ICsgICAgQVZNYXAgKnMgPSAqc3A7DQo+ICsNCj4g KyAgICBmb3IgKGludCBpPTA7IGk8cy0+Y291bnQ7IGkrKykgew0KPiArICAgICAgICBpZiAocy0+ ZnJlZWYpDQo+ICsgICAgICAgICAgICBzLT5mcmVlZigmcy0+aW50ZXJuYWxfZW50cmllc1tpXS5t YXBfZW50cnkpOw0KPiArICAgIH0NCj4gKyAgICBhdl9mcmVlcCgmcy0+aW50ZXJuYWxfZW50cmll cyk7DQo+ICsgICAgcy0+bmV4dCA9DQo+ICsgICAgcy0+aW50ZXJuYWxfZW50cmllc19sZW4gPQ0K PiArICAgIHMtPmNvdW50ID0gMDsNCj4gKyAgICBhdl9mcmVlcChzcCk7DQo+ICt9DQo+ICsNCj4g K2ludCBhdl9tYXBfY29weShBVk1hcCAqZHN0LCBjb25zdCBBVk1hcCAqc3JjKQ0KPiArew0KPiAr ICAgIGNvbnN0IEFWTWFwRW50cnkgKnQgPSBOVUxMOw0KPiArICAgIEFWTWFwICpiYWsgPSBhdl9t ZW1kdXAoZHN0LCBzaXplb2YoKmRzdCkpOw0KPiArICAgIGlmICghYmFrKQ0KPiArICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOw0KPiArDQo+ICsgICAgQVZNYXBJbnRlcm5hbEVudHJ5ICpu ZXdfaW50ZXJuYWxfZW50cmllcyA9IGF2X21lbWR1cChiYWstPmludGVybmFsX2VudHJpZXMsIGJh ay0+aW50ZXJuYWxfZW50cmllc19sZW4pOw0KPiArICAgIEFWTWFwSW50ZXJuYWxFbnRyeSAqb2xk X2ludGVybmFsX2VudHJpZXMgPSBkc3QtPmludGVybmFsX2VudHJpZXM7DQoNCldlIGRvbid0IGFs bG93IG1peGVkIGRlbGNhcmF0aW9ucyBhbmQgc3RhdGVtZW50cy4gSG9pc3QgdGhlIGRlZmludGlv biANCmFib3ZlIGlmICghYmFrKSBhbmQgdGhlbiBwdXQgdGhlIGFzc2lnbm1lbnQgYmVsb3cgaXQu DQoNCj4gKw0KPiArICAgIHdoaWxlICgodCA9IGF2X21hcF9pdGVyYXRlKHNyYywgdCkpKSB7DQo+ ICsgICAgICAgIGludCByZXQgPSBhdl9tYXBfYWRkKGRzdCwgdC0+a2V5LCB0LT5rZXlsZW4sIHQt PnZhbHVlLCB0LT52YWx1ZWxlbiwgMCk7DQo+ICsNCj4gKyAgICAgICAgaWYgKHJldCA8IDApIHsN Cj4gKyAgICAgICAgICAgIHVwZGF0ZV9wb2ludGVycyhiYWssIG5ld19pbnRlcm5hbF9lbnRyaWVz LCBvbGRfaW50ZXJuYWxfZW50cmllcyk7DQo+ICsgICAgICAgICAgICBhdl9mcmVlKGRzdC0+aW50 ZXJuYWxfZW50cmllcyk7DQo+ICsgICAgICAgICAgICBtZW1jcHkoZHN0LCBiYWssIHNpemVvZigq ZHN0KSk7DQo+ICsgICAgICAgICAgICByZXR1cm4gcmV0Ow0KDQpZb3UgbGVhayBiYWsgaGVyZS4g UG9zc2libHkgbmV3X2ludGVybmFsX2VudHJpZXMgYXMgd2VsbC4NCg0KDQo+ICsgICAgICAgIH0N Cj4gKyAgICB9DQo+ICsNCj4gKyAgICBhdl9mcmVlcCgmbmV3X2ludGVybmFsX2VudHJpZXMpOw0K PiArICAgIGF2X2ZyZWUoYmFrKTsNCj4gKw0KPiArICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ ICtBVk1hcCAqYXZfbWFwX2Nsb25lKEFWTWFwICpzKQ0KPiArew0KPiArICAgIEFWTWFwICpkc3Qg PSBhdl9tZW1kdXAocywgc2l6ZW9mKEFWTWFwKSk7DQo+ICsNCj4gKyAgICBpZiAoIWRzdCkNCj4g KyAgICAgICAgcmV0dXJuIE5VTEw7DQo+ICsNCj4gKyAgICBkc3QtPmludGVybmFsX2VudHJpZXMg PSBhdl9tZW1kdXAocy0+aW50ZXJuYWxfZW50cmllcywgcy0+aW50ZXJuYWxfZW50cmllc19sZW4p Ow0KPiArDQo+ICsgICAgaWYgKCFkc3QtPmludGVybmFsX2VudHJpZXMpDQo+ICsgICAgICAgIGdv dG8gZXJyOw0KPiArDQo+ICsgICAgdXBkYXRlX3BvaW50ZXJzKGRzdCwgZHN0LT5pbnRlcm5hbF9l bnRyaWVzLCBzLT5pbnRlcm5hbF9lbnRyaWVzKTsNCj4gKw0KPiArICAgIHJldHVybiBkc3Q7DQo+ ICtlcnI6DQo+ICsgICAgaWYgKGRzdCkgew0KPiArICAgICAgICBhdl9mcmVlcCgmZHN0LT5pbnRl cm5hbF9lbnRyaWVzKTsNCj4gKyAgICB9DQoNCg0KQ29kZSBzdHlsZTogcmVtb3ZlIHt9DQoNCj4g KyAgICBhdl9mcmVlKGRzdCk7DQo+ICsgICAgcmV0dXJuIE5VTEw7DQo+ICt9DQo+IGRpZmYgLS1n aXQgYS9saWJhdnV0aWwvbWFwLmggYi9saWJhdnV0aWwvbWFwLmgNCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAuLjAzNTcyOTYwMzA2DQo+IC0tLSAvZGV2L251bGwN Cj4gKysrIGIvbGliYXZ1dGlsL21hcC5oDQo+IEBAIC0wLDAgKzEsMjcwIEBADQo+ICsvKg0KPiAr ICogQ29weXJpZ2h0IChjKSAyMDI1IE1pY2hhZWwgTmllZGVybWF5ZXINCj4gKyAqDQo+ICsgKiBU aGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuDQo+ICsgKg0KPiArICogRkZtcGVnIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KPiArICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KPiArICog TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyDQo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4NCj4gKyAqDQo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCj4gKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQo+ICsgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVQ0KPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4NCj4gKyAqDQo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZt cGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQo+ICsgKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEw LTEzMDEgVVNBDQo+ICsgKi8NCj4gKw0KPiArLyoqDQo+ICsgKiBAZmlsZQ0KPiArICogUHVibGlj IG1hcCBBUEkuDQo+ICsgKi8NCj4gKw0KPiArI2lmbmRlZiBBVlVUSUxfTUFQX0gNCj4gKyNkZWZp bmUgQVZVVElMX01BUF9IDQo+ICsNCj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4gKw0KPiArI2lu Y2x1ZGUgInRyZWUuaCINCj4gKw0KPiArLyoqDQo+ICsgKiBjb21wYXJlZCB0byBBVkRpY3Rpb25h cnkgdGhpcyBoYXMNCj4gKyAqIGNsb25lIGlzIE8obikgaW5zdGVhZCBvZiBPKG7CsikNCj4gKyAq IGNvcHkgaXMgTyhuKmxvZyBuKSBpbnN0ZWFkIG9mIE8obsKyKQ0KPiArICogTyhsb2cgbikgbWFs bG9jKCkgY2FsbHMgYnkgZGVmYXVsdCBhbmQgTygxKSBpZiBhdl9tYXBfcmVhbGxvYygpIGlzIHVz ZWQgaW5zdGVhZCBvZiBPKG4pDQo+ICsgKiBnZXQvYWRkL2RlbGV0ZSBpcyBPKGxvZyBuKQ0KPiAr ICoNCj4gKyAqIFlvdSBjYW4gYWRkIChpZiBtZW1vcnkgaXMgcmVhbGxvY2VkIGJlZm9yZSkgYW5k IHJlbW92ZSBlbnRyaWVzIHdoaWxlIGEgaXRlcmF0b3Igc3RheXMgdmFsaWQNCj4gKyAqIGNvcHkg aXMgYXRvbWljLCBhIGZhaWx1cmUgbWVhbnMgdGhlIGRzdCBpcyB1bmNoYW5nZWQNCj4gKyAqDQo+ ICsgKiB0aGVyZSBhcmUgcmVzdHJpY3Rpb25zIG9uIHdoYXQgY29tcGFyZSBmdW5jdGlvbiBjYW4g YmUgdXNlZCBvbiBnZXQgZGVwZW5kaW5nIG9uIGhvdyB0aGUgTWFwIHdhcyBjcmVhdGVkDQo+ICsg KiB5b3UgY2FuIG1peCBjYXNlIHNlbnNpdGl2ZSBhbmQgY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJl IHdpdGggYXZfbWFwX3N1cGVyY21wXyoNCj4gKyAqIFN1cHBvcnRzIGJpbmFyeSBvYmplY3RzLCBu b3QganVzdCBzdHJpbmdzDQo+ICsgKi8NCj4gKw0KPiArZW51bSB7DQo+ICsvL3VzZSArIG5vdCB8 IHRvIGNvbWJpbmUgdGhlc2UgZmxhZ3MNCj4gKyAgICBBVl9NQVBfQ01QX0NBU0VfU0VOU0lUSVZF ICAgPSAxLA0KPiArICAgIEFWX01BUF9DTVBfQ0FTRV9JTlNFTlNJVElWRSA9IDIsDQo+ICsgICAg QVZfTUFQX0NNUF9LRVkgICAgICAgICAgICAgID0gMywNCj4gKyAgICBBVl9NQVBfQ01QX0tFWVZB TFVFICAgICAgICAgPSA2LA0KPiArICAgIEFWX01BUF9DTVBfVFJVTkNBVEVEICAgICAgICA9IDks DQo+ICsgICAgQVZfTUFQX0NNUF9OT05fVFJVTkNBVEVEICAgID0gMTgsDQo+ICsNCj4gKyAgICBB Vl9NQVBfQUxMT1dfUkVCVUlMRCAgICAgICAgPSAyNTYsICAgLy8vPCB3aGVuIHJlbW92aW5nIGVu dHJpZXMgcmVidWlsZCB0aGUgbWFwIHRvIHJlZHVjZSBtZW1vcnkgY29uc3VtcHRpb24sIG5vdGUs IHRoaXMgaW52YWxpZGF0ZXMgcHJldmlvdXNseSByZXRyaWV2ZWQgZWxlbWVudHMgYW5kIGl0ZXJh dGUgc3RhdGUuDQo+ICsgICAgQVZfTUFQX1JFUExBQ0UgICAgICAgICAgICAgID0gNTEyLCAgIC8v LzwgcmVwbGFjZSBrZXl2YWx1ZSBpZiBhbHJlYWR5IGluIHRoZSBtYXANCj4gKw0KPiArfTsNCj4g Kw0KPiArdHlwZWRlZiBzdHJ1Y3QgQVZNYXBFbnRyeSB7DQo+ICsgICAgdWludDhfdCAqa2V5Ow0K PiArICAgIHVpbnQ4X3QgKnZhbHVlOw0KDQpBbnkgcGFydGljdWxhciByZWFzb24gdG8gdXNlIHVu c2lnbmVkIGNoYXIgaGVyZSByYXRoZXIgdGhhbiBqdXN0IGNoYXIgDQp3aGVuIHdvcmtpbmcgd2l0 aCBzdHJpbmdzPyBNb3N0IHN0cmluZyBzdHVmZiBleHBlY3RzIHNpZ25lZCBjaGFyLg0KDQo+ICsg ICAgaW50IGtleWxlbjsNCj4gKyAgICBpbnQgdmFsdWVsZW47DQoNCnNpemVfdCBmb3IgbGVuZ3Ro cw0KDQo+ICt9IEFWTWFwRW50cnk7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IEFWTWFwIEFWTWFw Ow0KPiArdHlwZWRlZiB2b2lkICgqIEFWTWFwRnJlZUZ1bmMpKEFWTWFwRW50cnkgKmMpOw0KPiAr dHlwZWRlZiB2b2lkICgqIEFWTWFwQ29weUZ1bmMpKEFWTWFwRW50cnkgKmRzdCwgY29uc3QgQVZN YXBFbnRyeSAqc3JjLCBzaXplX3QgbGVuKTsNCj4gK3R5cGVkZWYgaW50ICAoKiBBVk1hcENvbXBh cmVGdW5jKShjb25zdCB2b2lkICprZXl2YWx1ZSwgY29uc3Qgdm9pZCAqYik7DQo+ICsNCj4gKy8q Kg0KPiArICogbGlrZSBzdHJjbXAoKSBidXQgY29tcGFyZXMgY29uY2F0ZW5hdGVkIGtleXZhbHVl cy4NCj4gKyAqDQo+ICsgKiBBIG1hcCBpbml0aWFsaXplZCB3aXRoIHRoaXMgd2lsbCBhbGxvdyBk dXBsaWNhdGUga2V5cyBhcyBsb25nIGFzIHRoZWlyIHZhbHVlcyBkaWZmZXIuDQo+ICsgKi8NCj4g K2ludCBhdl9tYXBfc3RyY21wX2tleXZhbHVlKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIp Ow0KPiArDQo+ICsvKioNCj4gKyAqIGxpa2UgYXZfbWFwX3N0cmNtcF9rZXl2YWx1ZSgpIGJ1dCBp cyBjb21wYXRpYmxlIHdpdGggYXZfc3RyY2FzZWNtcCgpIGFuZCBhdl9tYXBfc3VwZXJjbXBfa2V5 Lg0KPiArICoNCj4gKyAqIEEgbWFwIGluaXRpYWxpemVkIHdpdGggdGhpcyB3aWxsIGFsbG93IGR1 cGxpY2F0ZSBrZXlzIGFzIGxvbmcgYXMgdGhlaXIgdmFsdWVzIGRpZmZlci4NCj4gKyAqLw0KPiAr aW50IGF2X21hcF9zdXBlcmNtcF9rZXl2YWx1ZShjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpi KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBsaWtlIHN0cmNtcCgpIGJ1dCBpcyBjb21wYXRpYmxlIHdp dGggYXZfc3RyY2FzZWNtcCgpLg0KPiArICoNCj4gKyAqIEEgbWFwIGluaXRpYWxpemVkIHdpdGgg dGhpcyB3aWxsIG5vdCBhbGxvdyBkdXBsaWNhdGUga2V5cy4NCj4gKyAqLw0KPiAraW50IGF2X21h cF9zdXBlcmNtcF9rZXkoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYik7DQoNCg0KSSBkb24n dCBiZWxpZXZlIGl0J3MgY2xlYXIgaWYgYW5kIHdoZW4gYSB1c2VyIHNob3VsZCBjYWxsIHRoZXNl IA0KZnVuY3Rpb25zIG9yIHNpbXBseSBwYXNzIHRoZW0gYnkgYWRkcmVzcy4gSWYgc28sIHdlIHNo b3VsZCB1c2UgdGhlIA0KdHlwZWRlZiwgb3IgYXQgbGVhc3QgcmVmZXJlbmNlIGl0IGluIHRoZSBk b2MgY29tbWVudC4NCg0KPiArDQo+ICsNCj4gKy8qKg0KPiArICoNCj4gKyAqIEBwYXJhbSBrZXl2 YWx1ZV9jbXAgY29tcGFyZSBmdW5jdGlvbiwgd2lsbCBiZSBwYXNzZWQgdGhlIGtleSArIHZhbHVl IGNvbmNhdGVuYXRlZC4NCj4gKyAqICAgICAgICAgICAgICAgICAgICAgaXQgc2hvdWxkIGZvcm0g YSBzdHJpY3QgdG90YWwgb3JkZXIgb24gYWxsIGVsZW1lbnRzIHlvdSB3YW50IHRvIHN0b3JlLiBl YWNoIGtleS12YWx1ZSBwYWlyDQo+ICsgKiAgICAgICAgICAgICAgICAgICAgIGNhbiBvbmx5IG9j Y3VyIG9uY2UuIFRob3VnaCB0aGVyZSBjYW4gYmUgbXVsdGlwbGUgdmFsdWVzIGZvciB0aGUgc2Ft ZSBrZXkuIElGIHRoaXMgZnVuY3Rpb24NCj4gKyAqICAgICAgICAgICAgICAgICAgICAgdHJlYXRz IHRoZW0gYXMgZGlmZmVyZW50Lg0KPiArICoNCj4gKyAqICAgICAgICAgICAgICAgICAgICAgaWYg dGhlIGtleXZhbHVlX2NtcCBpcyBpbmNvbnNpc3RhbnQsIGZvciBleGFtcGxlIGEgPCBiICYmIGIg PCBhLCByZWFkaW5nIG1heSBzdGlsbCB3b3JrIGFzIGxvbmcNCj4gKyAqICAgICAgICAgICAgICAg ICAgICAgYXMgdGhlIGZ1bmN0aW9uIGxhdGVyIHVzZWQgZm9yIHJlYWRpbmcgdHJlYXRzIGFsbCBl bGVtZW50cyBpbiB0aGUgaW5jb25zaXN0YW50IHN1YnNldCBhcw0KPiArICogICAgICAgICAgICAg ICAgICAgICBlcXVhbCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQgb3IgcmVjb21tYW5kZWQgYnV0IHJh dGhlciBkb2N1bWVudGVkIGZvciBjb21wbGV0ZW5lc3MuIERlbGV0aW5nDQo+ICsgKiAgICAgICAg ICAgICAgICAgICAgIGVsZW1lbnRzIG9mIHN1Y2ggaW5jb25zaXN0YW50IHN1YnNldHMgc2hvdWxk IG5vdCBiZSBleHBlY3RlZCB0byB3b3JrLg0KPiArICoNCj4gKyAqIEBwYXJhbSBmcmVlZiByZWNl aXZlcyBhIEFWTWFwRW50cnkgYW5kIHNob3VsZCBmcmVlIGFueSByZXNvdXJjZXMgZXhjZXB0IHRo ZSBBVk1hcEVudHJ5LT5rZXkvdmFsdWUgcG9pbnRlciBpdHNlbGYNCj4gKyAqICAgICAgICAgICAg ICBmb3IgZmxhdCBzdHJ1Y3RzIGxpa2Ugc3RyaW5ncywgdGhpcyBpcyBzaW1wbHkgTlVMTA0KPiAr ICoNCj4gKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBLZXkgICAgIFZhbHVlICAgY29tcGFp YmlsaXR5DQo+ICsgKiBhdl9tYXBfc3VwZXJjbXBfa2V5dmFsdWUgWCE9eCAgICBYIT14ICAgIGF2 X21hcF9zdXBlcmNtcF9rZXksIGF2X3N0cmNhc2VjbXAsICh0cnVjYXRlZCBhdl9zdHJjYXNlY21w KQ0KPiArICogYXZfbWFwX3N1cGVyY21wX2tleSAgICAgIFghPXggICAgICAgICAgICBhdl9zdHJj YXNlY21wLCAodHJ1Y2F0ZWQgYXZfc3RyY2FzZWNtcCkNCj4gKyAqIGF2X3N0cmNhc2VjbXAgICAg ICAgICAgICBYPT14ICAgICAgICAgICAgdHJ1bmNhdGlvbg0KPiArICoNCj4gKyAqIGF2X21hcF9z dHJjbXBfa2V5dmFsdWUgICBYIT14ICAgIFghPXggICAgc3RyY21wLCB0cnVuY2F0aW9uDQo+ICsg KiBzdHJjbXAgICAgICAgICAgICAgICAgICAgWCE9eCAgICAgICAgICAgIHRydW5jYXRpb24NCj4g KyAqDQo+ICsgKg0KPiArICovDQo+ICtBVk1hcCAqYXZfbWFwX25ldyhBVk1hcENvbXBhcmVGdW5j IGtleXZhbHVlX2NtcCwgaW50IGNtcF9mbGFncywgQVZNYXBDb3B5RnVuYyBjbG9uZSwgQVZNYXBG cmVlRnVuYyBmcmVlZik7DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgKiBBZGQgYSBjb21wYXRpYmxl IGNvbXBhcmUgZnVuY3Rpb24gdG8gdGhlIG1hcC4NCj4gKyAqIFRoZSBmdW5jdGlvbiB3aWxsIGxh dGVyIGJlIHNlbGVjdGVkIGJ5IHVzaW5nIEFWX01BUF9DTVBfKiBmbGFncw0KPiArICoNCj4gKyAq IEZ1bmN0aW9ucyBtdXN0IGJlIGFkZGVkIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCBzcGVj aWZpYywgdGhhdCBpcyBpZiBhIEFWTWFwIGlzIGJ1aWxkDQo+ICsgKiB3aXRoIGEgY2FzZSBpbnNl bnNpdGl2ZSBjb21wYXJlIG5vIGNhc2Ugc2Vuc2l0aXZlIGNvbXBhcmUgZnVuY3Rpb25zIGNhbiBi ZSBhZGRlZC4gVGhpcyBpcw0KPiArICogdG8gYXZvaWQgYnVpbGRpbmcgbm9uIGZ1bmN0aW9uYWwg QVZNYXBzLg0KPiArICoNCj4gKyAqDQo+ICsgKiBAc2VlIGF2X21hcF9uZXcNCj4gKyAqDQo+ICsg KiBAcGFyYW0gY21wIGNvbXBhcmUgZnVuY3Rpb24gdG8gYmUgYWRkZWQuDQo+ICsgKiAgICAgICAg ICAgIGNtcChhLGIpIG11c3QgcmV0dXJuIDAgb3IgYmUgZXF1YWwgdG8gdGhlIHByZXZpb3VzbHkg YWRkZWQgY29tcGFyZSBmdW5jdGlvbiBmb3IgKGEsYiksIGlmIGl0IHJldHVybnMgMCBpdCBhbHNv IG11c3QgZG8gc28gZm9yIGFsbA0KPiArICogICAgICAgICAgICBlbGVtZW50cyBiZXR3ZWVuIGEg YW5kIGINCj4gKyAqDQo+ICsgKiBAcGFyYW0gY21wX2ZsYWdzIGEgY29tYmluYXRpb24gb2YgQVZf TUFQX0NNUF8qLCBub3RlIGtleS9rZXl2YWx1ZSBhbmQgdHJ1bmNhdGVkIHZzIG5vbiB0cnVuY2F0 ZWQNCj4gKyAqICAgICAgICAgICAgICAgICAgYXJlIG1hbmRhdG9yeSB0byBiZSBzcGVjaWZpZWQN Cj4gKyAqDQo+ICsgKiBAcmV0dXJuIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGUgY21wX2Zs YWdzIGFyZSBpbGxlZ2FsIG9yIHVuc3VwcG9ydGVkIGZvciB0aGlzIEFWTWFwDQo+ICsgKiAgICAg ICAgIElmIHlvdSBrbm93IHlvdXIgZmxhZ3MgYXJlIHZhbGlkLCB0aGVuIHlvdSBkb250IG5lZWQg dG8gY2hlY2sgdGhlIHJldHVybg0KPiArICovDQo+ICtpbnQgYXZfbWFwX2FkZF9jbXBfZnVuYyhB Vk1hcCAqbSwgQVZNYXBDb21wYXJlRnVuYyBjbXAsIGludCBjbXBfZmxhZ3MpOw0KPiArDQo+ICsv KioNCj4gKyAqDQo+ICsgKiBAcmV0dXJuIDEgaWYgdGhlIHByb3ZpZGVkIEFWX01BUF9DTVBfKiBm bGFnIGNvbWJpbmF0aW9uIGlzIHN1cHBvcnRlZCBieSB0aGlzIG1hcC4NCj4gKyAqICAgICAgICAg MCBvdGhlcndpc2UNCj4gKyAqLw0KPiAraW50IGF2X21hcF9pc19jbXBfZmxhZ3Nfc3VwcG9ydGVk KEFWTWFwICptLCBpbnQgY21wX2ZsYWdzKTsNCj4gKw0KPiArLyoqDQo+ICsgKiByZWFsbG9jIGlu dGVybmFsIHNwYWNlIHRvIGFjY29tb2RhdGUgdGhlIHNwZWNpZmllZCBuZXcgZWxlbWVudHMNCj4g KyAqDQo+ICsgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGF2b2lkIHJlcGVhdGVkIG1lbW9yeSByZWFs bG9jYXRpb24uDQo+ICsgKg0KPiArICogQHBhcmFtIGV4dHJhX2VsZW1lbnRzIG51bWJlciBvZiBu ZXcgZWxlbWVudHMgdG8gYmUgYWRkZWQNCj4gKyAqIEBwYXJhbSBleHRyYV9zcGFjZSAgICBzdW0g b2Yga2V5bGVuIGFuZCB2YWx1ZWxlbiBvZiBhbGwgdG8gYmUgYWRkZWQgZWxlbWVudHMNCj4gKyAq DQo+ICsgKiBAcmV0dXJuICAgICAgICAgIDwwIG9uIGVycm9yDQo+ICsgKi8NCj4gK2ludCBhdl9t YXBfcmVhbGxvYyhBVk1hcCAqcywgaW50IGV4dHJhX2VsZW1lbnRzLCBpbnQgZXh0cmFfc3BhY2Up Ow0KPiArDQo+ICsvKioNCj4gKyAqIEFkZCB0aGUgZ2l2ZW4gZW50cnkgaW50byBhIEFWTWFwLg0K PiArICoNCj4gKyAqIEBwYXJhbSBzICAgICAgICAgUG9pbnRlciBBVk1hcCBzdHJ1Y3QuDQo+ICsg KiBAcGFyYW0gdmFsdWUgICAgIEVudHJ5IHZhbHVlIHRvIGFkZCB0byAqcw0KPiArICogQHBhcmFt IHZhbHVlbGVuICBsZW5ndGggb2YgdmFsdWUNCj4gKyAqIEBwYXJhbSBmbGFncyAgICAgMCwgQVZf TUFQX0FMTE9XX1JFQlVJTEQsIEFWX01BUF9SRVBMQUNFDQo+ICsgKg0KPiArICogQHJldHVybiAg ICAgICAgICAxIGlmIHRoZSBlbnRyeSB3YXMgYWRkZWQsIDAgaWYgaXQgd2FzIGFscmVhZHkgaW4g dGhlIG1hcCwgMiBpZiBpdCB3YXMgcmVwbGFjZWQNCj4gKyAqICAgICAgICAgICAgICAgICAgb3Ro ZXJ3aXNlIGFuIGVycm9yIGNvZGUgPDANCj4gKyAqLw0KPiAraW50IGF2X21hcF9hZGQoQVZNYXAg KnMsIGNvbnN0IGNoYXIgKmtleSwgaW50IGtleWxlbiwgY29uc3QgY2hhciAqdmFsdWUsIGludCB2 YWx1ZWxlbiwgaW50IGZsYWdzKTsNCj4gK2ludCBhdl9tYXBfYWRkX3N0cmluZ3MoQVZNYXAgKnMs IGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIGludCBmbGFncyk7DQo+ICsNCj4g Ky8qKg0KPiArICogRGVsZXRlIHRoZSBnaXZlbiBlbnRyeSBmcm9tIGEgQVZNYXAuDQo+ICsgKg0K PiArICogQHBhcmFtIHMgICAgICAgICBQb2ludGVyIEFWTWFwIHN0cnVjdC4NCj4gKyAqIEBwYXJh bSBrZXl2YWx1ZSAga2V5IG9yIGNvbmNhdGVuYXRlZCBrZXkrdmFsdWUNCj4gKyAqIEBwYXJhbSBm bGFncyAgICAgQVZfTUFQX0FMTE9XX1JFQlVJTEQgb3IgMA0KPiArICoNCj4gKyAqIEByZXR1cm4g ICAgICAgICAgMSBpZiB0aGUgZW50cnkgd2FzIGRlbGV0ZWQsIDAgaWYgaXQgd2FzIG5vdCBmb3Vu ZCBpbiB0aGUgbWFwDQo+ICsgKiAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSBhbiBlcnJvciBj b2RlIDwwDQo+ICsgKi8NCj4gK2ludCBhdl9tYXBfZGVsKEFWTWFwICpzLCBjb25zdCBjaGFyICpr ZXl2YWx1ZSwgaW50IGZsYWdzKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBJdGVyYXRlIG92ZXIgcG9z c2libHkgbXVsdGlwbGUgbWF0Y2hpbmcgbWFwIGVudHJpZXMuDQo+ICsgKg0KPiArICogVGhlIHJl dHVybmVkIGVudHJ5IG11c3Qgbm90IGJlIGNoYW5nZWQsIG9yIGl0IHdpbGwNCj4gKyAqIGNhdXNl IHVuZGVmaW5lZCBiZWhhdmlvci4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gcHJldiAgU2V0IHRvIHRo ZSBwcmV2aW91cyBtYXRjaGluZyBlbGVtZW50IHRvIGZpbmQgdGhlIG5leHQuDQo+ICsgKiAgICAg ICAgICAgICAgSWYgc2V0IHRvIE5VTEwgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgaXMgcmV0 dXJuZWQuDQo+ICsgKiBAcGFyYW0ga2V5dmFsdWUgTWF0Y2hpbmcga2V5IG9yIGtleSArIHZhbHVl DQo+ICsgKg0KPiArICogQHJldHVybiAgICAgIEZvdW5kIGVudHJ5IG9yIE5VTEwgaW4gY2FzZSBu byBtYXRjaGluZyBlbnRyeSB3YXMgZm91bmQgaW4gdGhlIGRpY3Rpb25hcnkNCj4gKyAqLw0KPiAr Y29uc3QgQVZNYXBFbnRyeSAqYXZfbWFwX2dldF9tdWx0aXBsZShjb25zdCBBVk1hcCAqcywgY29u c3QgQVZNYXBFbnRyeSAqcHJldiwgY29uc3QgY2hhciAqa2V5dmFsdWUsIGludCBmbGFncyk7DQo+ ICsNCj4gKy8qKg0KPiArICogTGlrZSBhdl9tYXBfZ2V0X211bHRpcGxlKCkgYnV0IG9ubHkgcmV0 dXJucyBvbmUgbWF0Y2hpbmcgZW50cnkNCj4gKyAqDQo+ICsgKiBUaGUgcmV0dXJuZWQgZW50cnkg Y2Fubm90IGJlIHVzZWQgYXMgaW5pdGlhbCBwcmV2IGVudHJ5IGZvciBhdl9tYXBfZ2V0X211bHRp cGxlKCkNCj4gKyAqLw0KPiArY29uc3QgQVZNYXBFbnRyeSAqYXZfbWFwX2dldChjb25zdCBBVk1h cCAqcywgY29uc3QgY2hhciAqa2V5dmFsdWUsIGludCBmbGFncyk7DQo+ICsNCj4gKy8qKg0KPiAr ICogSXRlcmF0ZSBvdmVyIGEgbWFwDQo+ICsgKg0KPiArICogSXRlcmF0ZXMgdGhyb3VnaCBhbGwg ZW50cmllcyBpbiB0aGUgbWFwLg0KPiArICoNCj4gKyAqIEB3YXJuaW5nIElmIHlvdSBjYWxsIGFu eSBmdW5jdGlvbiB3aXRoIEFWX1NFVF9BTExPV19SRUJVSUxEIHNldCwgdGhlbiB0aGUgaXRlcmF0 b3IgaXMNCj4gKyAqIGludmFsaWRhdGVkLCBhbmQgbXVzdCBub3QgYmUgdXNlZCBhbnltb3JlLiBP dGhlcndpc2UgYXZfbWFwX2FkZCgpICh3aXRob3V0IHJlYWxsb2MpIGFuZCBhdl9tYXBfZGVsKCkN Cj4gKyAqIGNhbiBzYWZ0ZWx5IGJlIGNhbGxlZCBkdXJpbmcgaXRlcmF0aW9uLg0KPiArICoNCj4g KyAqIFR5cGljYWwgdXNhZ2U6DQo+ICsgKiBAY29kZQ0KPiArICogY29uc3QgQVZNYXBFbnRyeSAq ZSA9IE5VTEw7DQo+ICsgKiB3aGlsZSAoKGUgPSBhdl9tYXBfaXRlcmF0ZShtLCBlKSkpIHsNCj4g KyAqICAgICAvLyAuLi4NCj4gKyAqIH0NCj4gKyAqIEBlbmRjb2RlDQo+ICsgKg0KPiArICogQHBh cmFtIHMgICAgIFRoZSBtYXAgdG8gaXRlcmF0ZSBvdmVyDQo+ICsgKiBAcGFyYW0gcHJldiAgUG9p bnRlciB0byB0aGUgcHJldmlvdXMgQVZNYXBFbnRyeSwgTlVMTCBpbml0aWFsbHkNCj4gKyAqDQo+ ICsgKiBAcmV0dmFsIEFWTWFwRW50cnkqIFRoZSBuZXh0IGVsZW1lbnQgaW4gdGhlIG1hcA0KPiAr ICogQHJldHZhbCBOVUxMICAgICAgICBObyBtb3JlIGVsZW1lbnRzIGluIHRoZSBtYXANCj4gKyAq Lw0KPiArY29uc3QgQVZNYXBFbnRyeSAqYXZfbWFwX2l0ZXJhdGUoY29uc3QgQVZNYXAgKnMsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVk1hcEVudHJ5ICpwcmV2 KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBHZXQgbnVtYmVyIG9mIGVudHJpZXMgaW4gbWFwLg0KPiAr ICoNCj4gKyAqIEBwYXJhbSBzIG1hcA0KPiArICogQHJldHVybiAgbnVtYmVyIG9mIGVudHJpZXMg aW4gbWFwDQo+ICsgKi8NCj4gK2ludCBhdl9tYXBfY291bnQoY29uc3QgQVZNYXAgKnMpOw0KPiAr DQo+ICsvKioNCj4gKyAqIEZyZWUgYWxsIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBhbiBBVk1h cCBzdHJ1Y3QNCj4gKyAqIGFuZCBhbGwgdmFsdWVzLg0KPiArICovDQo+ICt2b2lkIGF2X21hcF9m cmVlKEFWTWFwICoqcyk7DQo+ICsNCj4gK0FWTWFwICphdl9tYXBfY2xvbmUoQVZNYXAgKnMpOw0K PiArDQo+ICsvKioNCj4gKyAqIENvcHkgZW50cmllcyBmcm9tIG9uZSBBVk1hcCBzdHJ1Y3QgaW50 byBhbm90aGVyLg0KPiArICoNCj4gKyAqIEBwYXJhbSBkc3QgICBQb2ludGVyIHRvIGEgcG9pbnRl ciB0byBhIEFWTWFwIHN0cnVjdCB0byBjb3B5IGludG8uIElmICpkc3QgaXMgTlVMTCwNCj4gKyAq ICAgICAgICAgICAgICB0aGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgYSBzdHJ1Y3QgZm9yIHlv dSBhbmQgcHV0IGl0IGluICpkc3QNCj4gKyAqIEBwYXJhbSBzcmMgICBQb2ludGVyIHRvIHRoZSBz b3VyY2UgQVZNYXAgc3RydWN0IHRvIGNvcHkgaXRlbXMgZnJvbS4NCj4gKyAqIEBwYXJhbSBmbGFn cyBGbGFncyB0byB1c2Ugd2hlbiBzZXR0aW5nIGVudHJpZXMgaW4gKmRzdA0KPiArICoNCj4gKyAq IEBzZWUgd2hlbiB0aGUgaW5pdGlhbCBkc3QgbWFwIGlzIGVtcHR5IHVzZSBhdl9tYXBfY2xvbmUo KSBhcyBpdHMgZmFzdGVyDQo+ICsgKg0KPiArICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0 aXZlIEFWRVJST1IgY29kZSBvbiBmYWlsdXJlLg0KPiArICovDQo+ICsNCj4gK2ludCBhdl9tYXBf Y29weShBVk1hcCAqZHN0LCBjb25zdCBBVk1hcCAqc3JjKTsNCj4gKw0KPiArI2VuZGlmIC8qIEFW VVRJTF9NQVBfSCAqLw0KPiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL3Rlc3RzL21hcC5jIGIvbGli YXZ1dGlsL3Rlc3RzL21hcC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAw MDAwMDAwLi43NzA1ZWIzMWE5NQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2xpYmF2dXRpbC90 ZXN0cy9tYXAuYw0KPiBAQCAtMCwwICsxLDIyMSBAQA0KPiArLyoNCj4gKyAqIGNvcHlyaWdodCAo YykgMjAyNSBNaWNoYWVsIE5pZWRlcm1heWVyDQo+ICsgKg0KPiArICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLg0KPiArICoNCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCj4gKyAqIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KPiArICogdmVy c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uDQo+ICsgKg0KPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsDQo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KPiArICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCj4gKyAq IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+ICsgKg0K PiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYw0KPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KPiAr ICovDQo+ICsNCj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4gKyNpbmNsdWRlIDxzdGRpby5oPg0K PiArDQo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0LmgiDQo+ICsjaW5jbHVkZSAibGli YXZ1dGlsL2F2c3RyaW5nLmgiDQo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIg0KPiArI2lu Y2x1ZGUgImxpYmF2dXRpbC9tYXAuaCINCj4gKw0KPiArDQo+ICtzdGF0aWMgdm9pZCBwcmludF9z ZXQoY29uc3QgQVZNYXAgKnMpDQo+ICt7DQo+ICsgICAgY29uc3QgQVZNYXBFbnRyeSAqdCA9IE5V TEw7DQo+ICsgICAgd2hpbGUgKCh0ID0gYXZfbWFwX2l0ZXJhdGUocywgdCkpKQ0KPiArICAgICAg ICBwcmludGYoIiVzPSVzICVkLCVkICAgIiwgdC0+a2V5LCB0LT52YWx1ZSwgdC0+a2V5bGVuLCB0 LT52YWx1ZWxlbik7DQo+ICsgICAgcHJpbnRmKCJcbiIpOw0KPiArfQ0KPiArDQo+ICtpbnQgbWFp bih2b2lkKQ0KPiArew0KPiArICAgIHZvaWQgKm91cl9jbXBbXSA9IHsNCj4gKyAgICAgICAgc3Ry Y21wLA0KPiArICAgICAgICBhdl9tYXBfc3RyY21wX2tleXZhbHVlLA0KPiArICAgICAgICBhdl9z dHJjYXNlY21wLA0KPiArICAgICAgICBhdl9tYXBfc3VwZXJjbXBfa2V5dmFsdWUsDQo+ICsgICAg ICAgIGF2X21hcF9zdXBlcmNtcF9rZXl2YWx1ZSwNCj4gKyAgICB9Ow0KPiArICAgIGludCBvdXJf ZmxhZ3NbXSA9IHsNCj4gKyAgICAgICAgQVZfTUFQX0NNUF9OT05fVFJVTkNBVEVEICsgQVZfTUFQ X0NNUF9DQVNFX1NFTlNJVElWRSAgICsgQVZfTUFQX0NNUF9LRVksDQo+ICsgICAgICAgIEFWX01B UF9DTVBfTk9OX1RSVU5DQVRFRCArIEFWX01BUF9DTVBfQ0FTRV9TRU5TSVRJVkUgICArIEFWX01B UF9DTVBfS0VZVkFMVUUsDQo+ICsgICAgICAgIEFWX01BUF9DTVBfTk9OX1RSVU5DQVRFRCArIEFW X01BUF9DTVBfQ0FTRV9JTlNFTlNJVElWRSArIEFWX01BUF9DTVBfS0VZLA0KPiArICAgICAgICBB Vl9NQVBfQ01QX05PTl9UUlVOQ0FURUQgKyBBVl9NQVBfQ01QX0NBU0VfU0VOU0lUSVZFICAgKyBB Vl9NQVBfQ01QX0tFWVZBTFVFLA0KPiArICAgICAgICBBVl9NQVBfQ01QX05PTl9UUlVOQ0FURUQg KyBBVl9NQVBfQ01QX0NBU0VfU0VOU0lUSVZFICAgKyBBVl9NQVBfQ01QX0tFWVZBTFVFLA0KPiAr ICAgIH07DQo+ICsgICAgdm9pZCAqb3VyX3N1YmNtcFtdID0gew0KPiArICAgICAgICBzdHJjbXAs DQo+ICsgICAgICAgIHN0cmNtcCwNCj4gKyAgICAgICAgYXZfc3RyY2FzZWNtcCwNCj4gKyAgICAg ICAgYXZfbWFwX3N1cGVyY21wX2tleSwNCj4gKyAgICAgICAgYXZfc3RyY2FzZWNtcCwNCj4gKyAg ICB9Ow0KPiArICAgIGludCBvdXJfc3ViZmxhZ3NbXSA9IHsNCj4gKyAgICAgICAgQVZfTUFQX0NN UF9OT05fVFJVTkNBVEVEICsgQVZfTUFQX0NNUF9DQVNFX1NFTlNJVElWRSAgICsgQVZfTUFQX0NN UF9LRVksDQo+ICsgICAgICAgIEFWX01BUF9DTVBfTk9OX1RSVU5DQVRFRCArIEFWX01BUF9DTVBf Q0FTRV9TRU5TSVRJVkUgICArIEFWX01BUF9DTVBfS0VZLA0KPiArICAgICAgICBBVl9NQVBfQ01Q X05PTl9UUlVOQ0FURUQgKyBBVl9NQVBfQ01QX0NBU0VfSU5TRU5TSVRJVkUgKyBBVl9NQVBfQ01Q X0tFWSwNCj4gKyAgICAgICAgQVZfTUFQX0NNUF9OT05fVFJVTkNBVEVEICsgQVZfTUFQX0NNUF9D QVNFX1NFTlNJVElWRSAgICsgQVZfTUFQX0NNUF9LRVksDQo+ICsgICAgICAgIEFWX01BUF9DTVBf Tk9OX1RSVU5DQVRFRCArIEFWX01BUF9DTVBfQ0FTRV9JTlNFTlNJVElWRSArIEFWX01BUF9DTVBf S0VZLA0KPiArICAgIH07DQo+ICsNCj4gKyAgICBmb3IgKGludCBzZXR0eXBlPTA7IHNldHR5cGU8 Mzsgc2V0dHlwZSsrKSB7DQo+ICsgICAgICAgIEFWTWFwICpzZXQgPSBhdl9tYXBfbmV3KG91cl9j bXBbc2V0dHlwZV0sIG91cl9mbGFnc1tzZXR0eXBlXSwgTlVMTCwgTlVMTCk7DQo+ICsgICAgICAg IGF2X21hcF9hZGRfY21wX2Z1bmMoc2V0LCBvdXJfc3ViY21wW3NldHR5cGVdLCBvdXJfc3ViZmxh Z3Nbc2V0dHlwZV0pOw0KPiArDQo+ICsgICAgICAgIHByaW50ZigidGVzdGluZyBlbXB0eSBzZXRc biIpOw0KPiArDQo+ICsgICAgICAgIGNvbnN0IEFWTWFwRW50cnkgKmUgPSBhdl9tYXBfZ2V0KHNl dCwgImZvbyIsIG91cl9zdWJmbGFnc1tzZXR0eXBlXSk7DQo+ICsgICAgICAgIGF2X2Fzc2VydDAo ZSA9PSBOVUxMKTsNCj4gKw0KPiArICAgICAgICBlID0gYXZfbWFwX2dldChzZXQsICJmb28iLCBv dXJfc3ViZmxhZ3Nbc2V0dHlwZV0pOw0KPiArICAgICAgICBhdl9hc3NlcnQwKGUgPT0gTlVMTCk7 DQo+ICsNCj4gKyAgICAgICAgaW50IHJldCA9IGF2X21hcF9kZWwoc2V0LCAiZm9vIiwgb3VyX3N1 YmZsYWdzW3NldHR5cGVdKTsNCj4gKyAgICAgICAgYXZfYXNzZXJ0MChyZXQgPT0gMCk7DQo+ICsN Cj4gKyAgICAgICAgcHJpbnRfc2V0KHNldCk7DQo+ICsNCj4gKyAgICAgICAgcHJpbnRmKCJ0ZXN0 aW5nIDEtc2V0XG4iKTsNCj4gKw0KPiArICAgICAgICByZXQgPSBhdl9tYXBfYWRkKHNldCwgImZv byIsIDQsICJiYXIiLCA0LCAwKTsNCj4gKyAgICAgICAgYXZfYXNzZXJ0MChyZXQgPT0gMSk7DQo+ ICsNCj4gKyAgICAgICAgcmV0ID0gYXZfbWFwX2FkZChzZXQsICJmb28iLCA0LCAiYmVhciIsIDUs IDApOw0KPiArICAgICAgICBhdl9hc3NlcnQwKHJldCA9PSAoKGludFtdKXswLDEsMH0pW3NldHR5 cGVdKTsNCj4gKw0KPiArICAgICAgICBlID0gYXZfbWFwX2dldChzZXQsICJmb28iLCBvdXJfc3Vi ZmxhZ3Nbc2V0dHlwZV0pOw0KPiArICAgICAgICBhdl9hc3NlcnQwKCFzdHJjbXAoZS0+a2V5LCAi Zm9vIikpOw0KPiArICAgICAgICBpZiAoc2V0dHlwZSA9PSAxKSB7DQo+ICsgICAgICAgICAgICBh dl9hc3NlcnQwKCFzdHJjbXAoZS0+dmFsdWUsICJiZWFyIikgfHwgIXN0cmNtcChlLT52YWx1ZSwg ImJhciIpKTsNCj4gKyAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgIGF2X2Fzc2VydDAo IXN0cmNtcChlLT52YWx1ZSwgImJhciIpKTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAg IHJldCA9IGF2X21hcF9hZGQoc2V0LCAiZm9vIiwgNCwgImJlYXIiLCA1LCBBVl9NQVBfUkVQTEFD RSk7DQo+ICsgICAgICAgIGF2X2Fzc2VydDAocmV0ID09IDIpOw0KPiArDQo+ICsgICAgICAgIGUg PSBhdl9tYXBfZ2V0KHNldCwgImZvbyIsIG91cl9zdWJmbGFnc1tzZXR0eXBlXSk7DQo+ICsgICAg ICAgIGF2X2Fzc2VydDAoIXN0cmNtcChlLT5rZXksICJmb28iKSk7DQo+ICsgICAgICAgIGlmIChz ZXR0eXBlID09IDEpIHsNCj4gKyAgICAgICAgICAgIGF2X2Fzc2VydDAoIXN0cmNtcChlLT52YWx1 ZSwgImJlYXIiKSB8fCAhc3RyY21wKGUtPnZhbHVlLCAiYmFyIikpOw0KPiArICAgICAgICB9IGVs c2Ugew0KPiArICAgICAgICAgICAgYXZfYXNzZXJ0MCghc3RyY21wKGUtPnZhbHVlLCAiYmVhciIp KTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIGUgPSBhdl9tYXBfZ2V0X211bHRpcGxl KHNldCwgTlVMTCwgImZvbyIsIG91cl9zdWJmbGFnc1tzZXR0eXBlXSk7DQo+ICsgICAgICAgIGF2 X2Fzc2VydDAoIXN0cmNtcChlLT5rZXksICJmb28iKSk7DQo+ICsgICAgICAgIGlmIChzZXR0eXBl ID09IDEpIHsNCj4gKyAgICAgICAgICAgIGF2X2Fzc2VydDAoIXN0cmNtcChlLT52YWx1ZSwgImJh ciIpKTsNCj4gKyAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgIGF2X2Fzc2VydDAoIXN0 cmNtcChlLT52YWx1ZSwgImJlYXIiKSk7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgICAgZSA9IGF2 X21hcF9nZXRfbXVsdGlwbGUoc2V0LCBlLCAiZm9vIiwgb3VyX3N1YmZsYWdzW3NldHR5cGVdKTsN Cj4gKyAgICAgICAgaWYgKHNldHR5cGUgPT0gMSkgew0KPiArICAgICAgICAgICAgYXZfYXNzZXJ0 MCghc3RyY21wKGUtPmtleSwgImZvbyIpKTsNCj4gKyAgICAgICAgICAgIGF2X2Fzc2VydDAoIXN0 cmNtcChlLT52YWx1ZSwgImJlYXIiKSk7DQo+ICsgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAg ICAgICBhdl9hc3NlcnQwKGUgPT0gTlVMTCk7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAg ICByZXQgPSBhdl9tYXBfZGVsKHNldCwgImZvbyIsIG91cl9zdWJmbGFnc1tzZXR0eXBlXSk7DQo+ ICsgICAgICAgIGF2X2Fzc2VydDAocmV0ID09IDEpOw0KPiArDQo+ICsgICAgICAgIGUgPSBhdl9t YXBfZ2V0KHNldCwgImZvbyIsIG91cl9zdWJmbGFnc1tzZXR0eXBlXSk7DQo+ICsgICAgICAgIGlm IChzZXR0eXBlID09IDEpIHsNCj4gKyAgICAgICAgICAgIGF2X2Fzc2VydDAoIXN0cmNtcChlLT5r ZXksICJmb28iKSk7DQo+ICsgICAgICAgICAgICBhdl9hc3NlcnQwKCFzdHJjbXAoZS0+dmFsdWUs ICJiZWFyIikgfHwgIXN0cmNtcChlLT52YWx1ZSwgImJhciIpKTsNCj4gKyAgICAgICAgfSBlbHNl IHsNCj4gKyAgICAgICAgICAgIGF2X2Fzc2VydDAoZSA9PSBOVUxMKTsNCj4gKyAgICAgICAgfQ0K PiArDQo+ICsgICAgICAgIHJldCA9IGF2X21hcF9kZWwoc2V0LCAiZm9vIiwgb3VyX3N1YmZsYWdz W3NldHR5cGVdKTsNCj4gKyAgICAgICAgYXZfYXNzZXJ0MChyZXQgPT0gKChpbnRbXSl7MCwxLDB9 KVtzZXR0eXBlXSk7DQo+ICsNCj4gKw0KPiArICAgICAgICBwcmludF9zZXQoc2V0KTsNCj4gKw0K PiArICAgICAgICBwcmludGYoInRlc3Rpbmcgbi1zZXRcbiIpOw0KPiArICAgICAgICB1bnNpZ25l ZCByID0gNTsNCj4gKyAgICAgICAgaW50IGhpc3RvZ3JhbVsyNTZdID0gezB9Ow0KPiArICAgICAg ICBmb3IoaW50IGk9MDsgaTwxMDAwOyBpKyspIHsNCj4gKyAgICAgICAgICAgIHIgPSByKjEyMyAr IDc7DQo+ICsgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHN0clszXSA9IHswfTsNCj4gKyAgICAg ICAgICAgIHN0clswXSA9IHI7DQo+ICsgICAgICAgICAgICByZXQgPSBhdl9tYXBfYWRkKHNldCwg c3RyLCAyLCBzdHIsIDIgLDApOw0KPiArICAgICAgICAgICAgaWYgKGkgPCAxMjgpIHsNCj4gKyAg ICAgICAgICAgICAgICBpZiAoc2V0dHlwZSAhPSAyKSB7DQo+ICsgICAgICAgICAgICAgICAgICAg IGF2X2Fzc2VydDAocmV0ID09IDEpOw0KPiArICAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ICsg ICAgICAgICAgICAgICAgICAgIGF2X2Fzc2VydDAocmV0ID09ICFoaXN0b2dyYW1bYXZfdG91cHBl cihzdHJbMF0pXSk7DQo+ICsgICAgICAgICAgICAgICAgICAgIGhpc3RvZ3JhbVthdl90b3VwcGVy KHN0clswXSldID0gMTsNCj4gKyAgICAgICAgICAgICAgICB9DQo+ICsgICAgICAgICAgICB9IGVs c2Ugew0KPiArICAgICAgICAgICAgICAgIGF2X2Fzc2VydDAocmV0ID09IDApOw0KPiArICAgICAg ICAgICAgfQ0KPiArICAgICAgICAgICAgcHJpbnRmKCIlZCIsIHJldCk7DQo+ICsgICAgICAgIH0N Cj4gKyAgICAgICAgcHJpbnRmKCJcbiIpOw0KPiArDQo+ICsgICAgICAgIHIgPSA1Ow0KPiArICAg ICAgICBmb3IoaW50IGk9MDsgaTwxMDAwOyBpKyspIHsNCj4gKyAgICAgICAgICAgIHIgPSByKjEy MyArIDc7DQo+ICsgICAgICAgICAgICBjaGFyIHN0clszXSA9IHswfTsNCj4gKyAgICAgICAgICAg IHN0clswXSA9IHI7DQo+ICsNCj4gKyAgICAgICAgICAgIGlmIChpID09IDUxKSB7DQo+ICsgICAg ICAgICAgICAgICAgQVZNYXAgKm9sZCA9IHNldDsNCj4gKyAgICAgICAgICAgICAgICBzZXQgPSBh dl9tYXBfY2xvbmUoc2V0KTsNCj4gKyAgICAgICAgICAgICAgICBhdl9tYXBfZGVsKG9sZCwgc3Ry LCAwKTsNCj4gKyAgICAgICAgICAgICAgICBhdl9tYXBfZnJlZSgmb2xkKTsNCj4gKyAgICAgICAg ICAgIH0NCj4gKyAgICAgICAgICAgIGlmIChpID09IDczKSB7DQo+ICsgICAgICAgICAgICAgICAg QVZNYXAgKm9sZCA9IHNldDsNCj4gKyAgICAgICAgICAgICAgICBzZXQgPSBhdl9tYXBfbmV3KG91 cl9jbXBbc2V0dHlwZV0sIG91cl9mbGFnc1tzZXR0eXBlXSwgTlVMTCwgTlVMTCk7DQo+ICsgICAg ICAgICAgICAgICAgYXZfbWFwX2FkZF9jbXBfZnVuYyhzZXQsIG91cl9zdWJjbXBbc2V0dHlwZV0s IG91cl9zdWJmbGFnc1tzZXR0eXBlXSk7DQo+ICsgICAgICAgICAgICAgICAgcmV0ID0gYXZfbWFw X2FkZF9zdHJpbmdzKHNldCwgInRoZSBrZXkiLCAidGhlIHZhbHVlIiwgMCk7DQo+ICsgICAgICAg ICAgICAgICAgYXZfbWFwX2NvcHkoc2V0LCBvbGQpOw0KPiArICAgICAgICAgICAgICAgIGF2X21h cF9kZWwob2xkLCBzdHIsIDApOw0KPiArICAgICAgICAgICAgICAgIGF2X21hcF9mcmVlKCZvbGQp Ow0KPiArICAgICAgICAgICAgfQ0KPiArICAgICAgICAgICAgZSA9IGF2X21hcF9nZXQoc2V0LCBz dHIsIG91cl9zdWJmbGFnc1tzZXR0eXBlXSk7DQo+ICsgICAgICAgICAgICBpZiAoc2V0dHlwZSAh PSAyKSB7DQo+ICsgICAgICAgICAgICAgICAgYXZfYXNzZXJ0MCghc3RyY21wKGUtPmtleSwgc3Ry KSk7DQo+ICsgICAgICAgICAgICAgICAgYXZfYXNzZXJ0MCghc3RyY21wKGUtPnZhbHVlLCBzdHIp KTsNCj4gKyAgICAgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAgYXZfYXNzZXJ0 MCghYXZfc3RyY2FzZWNtcChlLT5rZXksIHN0cikpOw0KPiArICAgICAgICAgICAgICAgIGF2X2Fz c2VydDAoIWF2X3N0cmNhc2VjbXAoZS0+dmFsdWUsIHN0cikpOw0KPiArICAgICAgICAgICAgfQ0K PiArICAgICAgICAgICAgZSA9IGF2X21hcF9nZXRfbXVsdGlwbGUoc2V0LCBOVUxMLCBzdHIsIG91 cl9zdWJmbGFnc1tzZXR0eXBlXSk7DQo+ICsgICAgICAgICAgICBpZiAoc2V0dHlwZSAhPSAyKSB7 DQo+ICsgICAgICAgICAgICAgICAgYXZfYXNzZXJ0MCghc3RyY21wKGUtPmtleSwgc3RyKSk7DQo+ ICsgICAgICAgICAgICAgICAgYXZfYXNzZXJ0MCghc3RyY21wKGUtPnZhbHVlLCBzdHIpKTsNCj4g KyAgICAgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAgYXZfYXNzZXJ0MCghYXZf c3RyY2FzZWNtcChlLT5rZXksIHN0cikpOw0KPiArICAgICAgICAgICAgICAgIGF2X2Fzc2VydDAo IWF2X3N0cmNhc2VjbXAoZS0+dmFsdWUsIHN0cikpOw0KPiArICAgICAgICAgICAgfQ0KPiArICAg ICAgICAgICAgcmV0ID0gYXZfbWFwX2FkZChzZXQsIHN0ciwgMiwgc3RyLCAyLCAwKTsNCj4gKyAg ICAgICAgICAgIGF2X2Fzc2VydDAocmV0ID09IDApOw0KPiArDQo+ICsgICAgICAgICAgICBzdHJb MV09J3gnOw0KPiArDQo+ICsgICAgICAgICAgICBlID0gYXZfbWFwX2dldChzZXQsIHN0ciwgb3Vy X3N1YmZsYWdzW3NldHR5cGVdKTsNCj4gKyAgICAgICAgICAgIGF2X2Fzc2VydDAoZSA9PSBOVUxM KTsNCj4gKyAgICAgICAgICAgIGUgPSBhdl9tYXBfZ2V0X211bHRpcGxlKHNldCwgTlVMTCwgc3Ry LCBvdXJfc3ViZmxhZ3Nbc2V0dHlwZV0pOw0KPiArICAgICAgICAgICAgYXZfYXNzZXJ0MChlID09 IE5VTEwpOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIHByaW50X3NldChzZXQpOw0KPiArDQo+ ICsgICAgICAgIGF2X21hcF9mcmVlKCZzZXQpOw0KPiArICAgICAgICBhdl9hc3NlcnQwKCFzZXQp Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVybiAwOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEv bGliYXZ1dGlsL3RyZWUuYyBiL2xpYmF2dXRpbC90cmVlLmMNCj4gaW5kZXggNzA4ZDQwMTNmMDQu LjMwMDdkYzI2ZDI5IDEwMDY0NA0KPiAtLS0gYS9saWJhdnV0aWwvdHJlZS5jDQo+ICsrKyBiL2xp YmF2dXRpbC90cmVlLmMNCj4gQEAgLTI0LDExICsyNCw3IEBADQo+ICAgI2luY2x1ZGUgIm1lbS5o Ig0KPiAgICNpbmNsdWRlICJ0cmVlLmgiDQo+ICAgDQo+IC10eXBlZGVmIHN0cnVjdCBBVlRyZWVO b2RlIHsNCj4gLSAgICBzdHJ1Y3QgQVZUcmVlTm9kZSAqY2hpbGRbMl07DQo+IC0gICAgdm9pZCAq ZWxlbTsNCj4gLSAgICBpbnQgc3RhdGU7DQo+IC19IEFWVHJlZU5vZGU7DQo+ICsjaW5jbHVkZSAi dHJlZV9pbnRlcm5hbC5oIg0KPiAgIA0KPiAgIGNvbnN0IGludCBhdl90cmVlX25vZGVfc2l6ZSA9 IHNpemVvZihBVlRyZWVOb2RlKTsNCj4gICANCj4gZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC90cmVl X2ludGVybmFsLmggYi9saWJhdnV0aWwvdHJlZV9pbnRlcm5hbC5oDQo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwLi42MjA3YzMyMWE4ZQ0KPiAtLS0gL2Rldi9udWxs DQo+ICsrKyBiL2xpYmF2dXRpbC90cmVlX2ludGVybmFsLmgNCj4gQEAgLTAsMCArMSwyOCBAQA0K PiArLyoNCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4NCj4gKyAqDQo+ICsgKiBG Rm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+ ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljDQo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXINCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KPiArICoNCj4gKyAqIEZGbXBlZyBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KPiArICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YNCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VDQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLg0KPiArICoNCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCj4gKyAqIExpY2Vuc2Ug YWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCj4g KyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv c3RvbiwgTUEgMDIxMTAtMTMwMSBVU0ENCj4gKyAqLw0KPiArDQo+ICsjaWZuZGVmIEFWVVRJTF9U UkVFX0lOVEVSTkFMX0gNCj4gKyNkZWZpbmUgQVZVVElMX1RSRUVfSU5URVJOQUxfSA0KPiArDQo+ ICt0eXBlZGVmIHN0cnVjdCBBVlRyZWVOb2RlIHsNCj4gKyAgICBzdHJ1Y3QgQVZUcmVlTm9kZSAq Y2hpbGRbMl07DQo+ICsgICAgdm9pZCAqZWxlbTsNCj4gKyAgICBpbnQgc3RhdGU7DQo+ICt9IEFW VHJlZU5vZGU7DQo+ICsNCj4gKyNlbmRpZiAvKiBBVlVUSUxfVFJFRV9JTlRFUk5BTF9IICovDQo+ IGRpZmYgLS1naXQgYS90ZXN0cy9mYXRlL2xpYmF2dXRpbC5tYWsgYi90ZXN0cy9mYXRlL2xpYmF2 dXRpbC5tYWsNCj4gaW5kZXggNmJmMDNiMjQzODYuLmI3ZGY0OTlhMjljIDEwMDY0NA0KPiAtLS0g YS90ZXN0cy9mYXRlL2xpYmF2dXRpbC5tYWsNCj4gKysrIGIvdGVzdHMvZmF0ZS9saWJhdnV0aWwu bWFrDQo+IEBAIC03NCw2ICs3NCwxMCBAQCBGQVRFX0xJQkFWVVRJTCArPSBmYXRlLWRpY3QNCj4g ICBmYXRlLWRpY3Q6IGxpYmF2dXRpbC90ZXN0cy9kaWN0JChFWEVTVUYpDQo+ICAgZmF0ZS1kaWN0 OiBDTUQgPSBydW4gbGliYXZ1dGlsL3Rlc3RzL2RpY3QkKEVYRVNVRikNCj4gICANCj4gK0ZBVEVf TElCQVZVVElMICs9IGZhdGUtbWFwDQo+ICtmYXRlLW1hcDogbGliYXZ1dGlsL3Rlc3RzL21hcCQo RVhFU1VGKQ0KPiArZmF0ZS1tYXA6IENNRCA9IHJ1biBsaWJhdnV0aWwvdGVzdHMvbWFwJChFWEVT VUYpDQo+ICsNCj4gICBGQVRFX0xJQkFWVVRJTCArPSBmYXRlLWVuY3J5cHRpb24taW5mbw0KPiAg IGZhdGUtZW5jcnlwdGlvbi1pbmZvOiBsaWJhdnV0aWwvdGVzdHMvZW5jcnlwdGlvbl9pbmZvJChF WEVTVUYpDQo+ICAgZmF0ZS1lbmNyeXB0aW9uLWluZm86IENNRCA9IHJ1biBsaWJhdnV0aWwvdGVz dHMvZW5jcnlwdGlvbl9pbmZvJChFWEVTVUYpDQo+IGRpZmYgLS1naXQgYS90ZXN0cy9yZWYvZmF0 ZS9tYXAgYi90ZXN0cy9yZWYvZmF0ZS9tYXANCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5k ZXggMDAwMDAwMDAwMDAuLjZkMTY5OWVmNGI3DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvdGVz dHMvcmVmL2ZhdGUvbWFwDQo+IEBAIC0wLDAgKzEsMjcgQEANCj4gK3Rlc3RpbmcgZW1wdHkgc2V0 DQo+ICsNCj4gK3Rlc3RpbmcgMS1zZXQNCj4gKw0KPiArdGVzdGluZyBuLXNldA0KPiArMTExMTEx MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx MTExMTExMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KPiArdGhlIGtleT10aGUgdmFsdWUgOCwxMCAgIG49 biAyLDIgICDvv70977+9IDIsMiAgICI9IiAyLDIgICBdPV0gMiwyICAg77+9Pe+/vSAyLDIgICB5 PXkgMiwyICAgKj0qIDIsMiAgIDU9NSAyLDIgICB+PX4gMiwyICAg77+9Pe+/vSAyLDIgICDvv709 77+9IDIsMiAgIO+/vT3vv70gMiwyICAg77+9Pe+/vSAyLDIgICApPSkgMiwyICAg77+9Pe+/vSAy LDIgICBlPWUgMiwyICAg77+9Pe+/vSAyLDIgICBBPUEgMiwyICAgQj1CIDIsMiAgIO+/vT3vv70g MiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIEo9SiAyLDIgICDvv70977+9IDIsMiAg IO+/vT3vv70gMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAg 77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAg77+9Pe+/vSAyLDIgICDv v70977+9IDIsMiAgIO+/vT3vv70gMiwyICAgYj1iIDIsMiAgIB09HSAyLDIgICDvv70977+9IDIs MiAgIDk9OSAyLDIgICBqPWogMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIFE9USAy LDIgICDvv70977+9IDIsMiAgIE09TSAyLDIgICAGPQYgMiwyICAg77+9Pe+/vSAyLDIgICDvv709 77+9IDIsMiAgICU9JSAyLDIgICDvv70977+9IDIsMiAgIAE9ASAyLDIgICDvv70977+9IDIsMiAg IH09fSAyLDIgICAWPRYgMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIFU9VSAyLDIg ICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAgEj0SIDIsMiAgIO+/vT3vv70gMiwyICAgJj0m IDIsMiAgIEk9SSAyLDIgICAaPRogMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIGE9 YSAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAgNj02IDIsMiAgIO+/vT3vv70gMiwy ICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAgET0RIDIsMiAgIDI9 MiAyLDINCj4gPQ0KPiAgIDIsMiAgIEY9RiAyLDIgICDvv70977+9IDIsMiAgIDo9OiAyLDIgICDv v70977+9IDIsMiAgIA49DiAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAgPT09IDIs MiAgIFY9ViAyLDIgICBZPVkgMiwyICAg77+9Pe+/vSAyLDIgICAVPRUgMiwyICAgHj0eIDIsMiAg IHE9cSAyLDIgICBSPVIgMiwyICAgbT1tIDIsMiAgIGY9ZiAyLDIgICAJPQkgMiwyICAgWj1aIDIs MiAgIEU9RSAyLDIgICAuPS4gMiwyICAgIT0hIDIsMiAgIO+/vT3vv70gMiwyICAg77+9Pe+/vSAy LDIgICB2PXYgMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIHU9dSAyLDIgICA+PT4g MiwyICAg77+9Pe+/vSAyLDIgICByPXIgMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAg IGk9aSAyLDIgICB6PXogMiwyICAg77+9Pe+/vSAyLDIgICBOPU4gMiwyICAg77+9Pe+/vSAyLDIg ICACPQIgMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIBk9GSAyLDINCj4gKz0NCj4g KyAyLDIgICDvv70977+9IDIsMiAgIF49XiAyLDIgICAxPTEgMiwyICAg77+9Pe+/vSAyLDIgICAt PS0gMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAgBT0FIDIs Mg0KDQoNClRoaXMgbWF5IGp1c3QgYmUgbXkgZW1haWwgY2xpZW50IG1lc3NpbmcgdXAsIGJ1dCBt YW55IG9mIHRoZXNlIGFwcGVhciB0byANCmJlIG5vbnByaW50YWJsZS4gSSBkb24ndCBrbm93IHdo eS4NCg0KPiArdGVzdGluZyBlbXB0eSBzZXQNCj4gKw0KPiArdGVzdGluZyAxLXNldA0KPiArDQo+ ICt0ZXN0aW5nIG4tc2V0DQo+ICsxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQo+ICt0 aGUga2V5PXRoZSB2YWx1ZSA4LDEwICAgbj1uIDIsMiAgIO+/vT3vv70gMiwyICAgIj0iIDIsMiAg IF09XSAyLDIgICDvv70977+9IDIsMiAgIHk9eSAyLDIgICAqPSogMiwyICAgNT01IDIsMiAgIH49 fiAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9 IDIsMiAgICk9KSAyLDIgICDvv70977+9IDIsMiAgIGU9ZSAyLDIgICDvv70977+9IDIsMiAgIEE9 QSAyLDIgICBCPUIgMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwy ICAgSj1KIDIsMiAgIO+/vT3vv70gMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIO+/ vT3vv70gMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAg77+9 Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAg77+9Pe+/vSAyLDIgICBiPWIg MiwyICAgHT0dIDIsMiAgIO+/vT3vv70gMiwyICAgOT05IDIsMiAgIGo9aiAyLDIgICDvv70977+9 IDIsMiAgIO+/vT3vv70gMiwyICAgUT1RIDIsMiAgIO+/vT3vv70gMiwyICAgTT1NIDIsMiAgIAY9 BiAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAgJT0lIDIsMiAgIO+/vT3vv70gMiwy ICAgAT0BIDIsMiAgIO+/vT3vv70gMiwyICAgfT19IDIsMiAgIBY9FiAyLDIgICDvv70977+9IDIs MiAgIO+/vT3vv70gMiwyICAgVT1VIDIsMiAgIO+/vT3vv70gMiwyICAg77+9Pe+/vSAyLDIgICAS PRIgMiwyICAg77+9Pe+/vSAyLDIgICAmPSYgMiwyICAgST1JIDIsMiAgIBo9GiAyLDIgICDvv709 77+9IDIsMiAgIO+/vT3vv70gMiwyICAgYT1hIDIsMiAgIO+/vT3vv70gMiwyICAg77+9Pe+/vSAy LDIgICA2PTYgMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAg 77+9Pe+/vSAyLDIgICARPREgMiwyICAgMj0yIDIsMg0KPiA9DQo+ICAgMiwyICAgRj1GIDIsMiAg IO+/vT3vv70gMiwyICAgOj06IDIsMiAgIO+/vT3vv70gMiwyICAgDj0OIDIsMiAgIO+/vT3vv70g MiwyICAg77+9Pe+/vSAyLDIgICA9PT0gMiwyICAgVj1WIDIsMiAgIFk9WSAyLDIgICDvv70977+9 IDIsMiAgIBU9FSAyLDIgICAePR4gMiwyICAgcT1xIDIsMiAgIFI9UiAyLDIgICBtPW0gMiwyICAg Zj1mIDIsMiAgIAk9CSAyLDIgICBaPVogMiwyICAgRT1FIDIsMiAgIC49LiAyLDIgICAhPSEgMiwy ICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIHY9diAyLDIgICDvv70977+9IDIsMiAgIO+/ vT3vv70gMiwyICAgdT11IDIsMiAgID49PiAyLDIgICDvv70977+9IDIsMiAgIHI9ciAyLDIgICDv v70977+9IDIsMiAgIO+/vT3vv70gMiwyICAgaT1pIDIsMiAgIHo9eiAyLDIgICDvv70977+9IDIs MiAgIE49TiAyLDIgICDvv70977+9IDIsMiAgIAI9AiAyLDIgICDvv70977+9IDIsMiAgIO+/vT3v v70gMiwyICAgGT0ZIDIsMg0KPiArPQ0KPiArIDIsMiAgIO+/vT3vv70gMiwyICAgXj1eIDIsMiAg IDE9MSAyLDIgICDvv70977+9IDIsMiAgIC09LSAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70g MiwyICAg77+9Pe+/vSAyLDIgICAFPQUgMiwyDQo+ICt0ZXN0aW5nIGVtcHR5IHNldA0KPiArDQo+ ICt0ZXN0aW5nIDEtc2V0DQo+ICsNCj4gK3Rlc3Rpbmcgbi1zZXQNCj4gKzExMTExMTExMTExMTEx MTExMTExMTExMTExMTExMTExMTEwMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEx MTExMTExMTExMTExMTEwMTExMDEwMDExMDExMTEwMTEwMTEwMTEwMDEwMTExMTExMTExMTExMTEx MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDANCj4gK3RoZSBrZXk9dGhlIHZhbHVlIDgsMTAgICBuPW4gMiwyICAg 77+9Pe+/vSAyLDIgICAiPSIgMiwyICAgXT1dIDIsMiAgIO+/vT3vv70gMiwyICAgeT15IDIsMiAg ICo9KiAyLDIgICA1PTUgMiwyICAgfj1+IDIsMiAgIO+/vT3vv70gMiwyICAg77+9Pe+/vSAyLDIg ICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAgKT0pIDIsMiAgIO+/vT3vv70gMiwyICAgZT1l IDIsMiAgIO+/vT3vv70gMiwyICAgQT1BIDIsMiAgIEI9QiAyLDIgICDvv70977+9IDIsMiAgIO+/ vT3vv70gMiwyICAg77+9Pe+/vSAyLDIgICBKPUogMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9 IDIsMiAgIO+/vT3vv70gMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70g MiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAg77+9Pe+/vSAy LDIgICDvv70977+9IDIsMiAgIB09HSAyLDIgICDvv70977+9IDIsMiAgIDk9OSAyLDIgICDvv709 77+9IDIsMiAgIO+/vT3vv70gMiwyICAgUT1RIDIsMiAgIO+/vT3vv70gMiwyICAgTT1NIDIsMiAg IAY9BiAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAgJT0lIDIsMiAgIO+/vT3vv70g MiwyICAgAT0BIDIsMiAgIO+/vT3vv70gMiwyICAgfT19IDIsMiAgIBY9FiAyLDIgICDvv70977+9 IDIsMiAgIO+/vT3vv70gMiwyICAgVT1VIDIsMiAgIO+/vT3vv70gMiwyICAg77+9Pe+/vSAyLDIg ICASPRIgMiwyICAg77+9Pe+/vSAyLDIgICAmPSYgMiwyICAgST1JIDIsMiAgIBo9GiAyLDIgICDv v70977+9IDIsMiAgIO+/vT3vv70gMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIDY9 NiAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9 IDIsMiAgIBE9ESAyLDIgICAyPTIgMiwyDQo+ID0NCj4gICAyLDIgICBGPUYgMiwyICAg77+9Pe+/ vSAyLDIgICA6PTogMiwyICAg77+9Pe+/vSAyLDIgICAOPQ4gMiwyICAg77+9Pe+/vSAyLDIgICDv v70977+9IDIsMiAgID09PSAyLDIgICBWPVYgMiwyICAg77+9Pe+/vSAyLDIgICAVPRUgMiwyICAg Hj0eIDIsMiAgIFI9UiAyLDIgICAJPQkgMiwyICAgWj1aIDIsMiAgIC49LiAyLDIgICAhPSEgMiwy ICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAg77+9Pe+/vSAyLDIg ICA+PT4gMiwyICAg77+9Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwyICAg77+9 Pe+/vSAyLDIgICDvv70977+9IDIsMiAgIAI9AiAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70g MiwyICAgGT0ZIDIsMg0KPiArPQ0KPiArIDIsMiAgIO+/vT3vv70gMiwyICAgXj1eIDIsMiAgIDE9 MSAyLDIgICDvv70977+9IDIsMiAgIC09LSAyLDIgICDvv70977+9IDIsMiAgIO+/vT3vv70gMiwy ICAg77+9Pe+/vSAyLDIgICAFPQUgMiwyDQo+IA0KPiANCj4gX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdA0K PiBmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZw0KPiBodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9s aXN0aW5mby9mZm1wZWctZGV2ZWwNCj4gDQo+IFRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFi b3ZlLCBvciBlbWFpbA0KPiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3Vi amVjdCAidW5zdWJzY3JpYmUiLg0KTGVvIEl6ZW4gKFRyYW5lcHRvcmEpDQpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBs aXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9y IGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1 YnNjcmliZSIuCg==