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 47BE944EEA for ; Mon, 28 Nov 2022 20:08:27 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2E02E68B176; Mon, 28 Nov 2022 22:08:25 +0200 (EET) Received: from mail-qt1-f179.google.com (mail-qt1-f179.google.com [209.85.160.179]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B1366680CE9 for ; Mon, 28 Nov 2022 22:08:19 +0200 (EET) Received: by mail-qt1-f179.google.com with SMTP id h24so7493976qta.9 for ; Mon, 28 Nov 2022 12:08:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:content-language:references :to:from:subject:user-agent:mime-version:date:message-id:from:to:cc :subject:date:message-id:reply-to; bh=pW25ageZEMigQOR7JC3pYeHMCOtPgkVvpRWtfMZKhR0=; b=jBLNuLDKgsjUm8gCa8R0dHyweVhtE5KmibJSMHLe9zF5n1SDcXe0thdQs1MkIbfTiV AR8kWKoGFEymtzQdENcsk4VONwEjFLUyzOzprXaMqYmII1pZxbhE8xFZMMDL3M7EDfvQ K77o1LOKiJOYOMswKw5Na4H5tGdbez7xwvMikIM4lIAGD+TXRVTfCjNd2/HeHgPOV6Qk klngPMmDD8XUUvmiHpvjbjp84gj2G2SEHvrg8JaxP+HmWozm8pnhtTKRy7ty5gyIlMyn hJwMqkutZMRqx9Z1ZsMPxpN4WZnPa6Mv/XXUB/2V1wL6DBU/w+m2D8l21EF4qjVwX1HO n4BA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:content-language:references :to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=pW25ageZEMigQOR7JC3pYeHMCOtPgkVvpRWtfMZKhR0=; b=S6aqz7KJTwELHj3RhayH7i2HMVo8l7DcNj2l4qghODEvP1yYXfm3rX+aw1hJx/+rbv 3LkSiETrcHkr/tB+kvo/j04z8/5qzVmpTNDChv6Bjuz8YL3+Mwoml99Fi2rRqGAr1kzv XQAdBxaFt0TOrBEFf8A/BSfb4G8Y8gONtQFdBQYQMp5e3qmYmU0SwimSN3jkHUA64m7e mnJk5LHvez5OJ0ByMWnQoJWmboX+rkQn3HzBXD8TC44SorcCtR642arYdYjhcwJVeb3y Ttt3a3X4yKVQk76HlWT3NzeeUgHEKfljzBLz/8usZ5eh+OinoaCqHzas+EEpI16r1eIy ddvQ== X-Gm-Message-State: ANoB5pmf6kiSxfrYZEtL4WU4jVd2lcMvMZ4AmDuiJ8MqZE2Pe3+xF/CA AWqs8Z2B44/wDLcsu8g+efIoNqJF62Y= X-Google-Smtp-Source: AA0mqf7njRO3FEaRtZQQSSFJPErSA8BApn9JWwsAdXu4dwNn+bkmPzH4QtHUwxDeA8TSslQIgQsbjQ== X-Received: by 2002:ac8:4698:0:b0:39c:1435:423e with SMTP id g24-20020ac84698000000b0039c1435423emr32713930qto.490.1669666097769; Mon, 28 Nov 2022 12:08:17 -0800 (PST) Received: from [192.168.1.11] (pool-72-66-19-106.washdc.fios.verizon.net. [72.66.19.106]) by smtp.gmail.com with ESMTPSA id w18-20020a05620a445200b006fafc111b12sm9237097qkp.83.2022.11.28.12.08.17 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 28 Nov 2022 12:08:17 -0800 (PST) Message-ID: <277c4353-3959-6d56-efe0-6700465e1578@gmail.com> Date: Mon, 28 Nov 2022 15:08:16 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 From: Scott Theisen To: ffmpeg-devel@ffmpeg.org References: <20220917170843.308894-1-scott.the.elm@gmail.com> <4a032252-705b-b71d-101e-8b1f55b4ec50@gmail.com> Content-Language: en-US In-Reply-To: <4a032252-705b-b71d-101e-8b1f55b4ec50@gmail.com> Subject: Re: [FFmpeg-devel] [PATCH] mpegts: identify and demux DSMCC-B/MHEG streams 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: UGluZyBmb3IgcmV2aWV3LgoKVGhhbmtzIGluIGFkdmFuY2UsCgpTY290dCBUaGVpc2VuCgpPbiAx MS8xMy8yMiAxODoxOSwgU2NvdHQgVGhlaXNlbiB3cm90ZToKPiBQaW5nIGZvciByZXZpZXcuCj4K PiBPbiA5LzE3LzIyIDEzOjA4LCBTY290dCBUaGVpc2VuIHdyb3RlOgo+PiBUaGVzZSBjaGFuZ2Vz IGFyZSBmcm9tIE15dGhUVi4KPj4gLS0tCj4+Cj4+IFRoZSBgQVZfQ09ERUNfSURgcyBhcmUgcHJv YmFibHkgaW4gdGhlIHdyb25nIHBsYWNlIHNpbmNlIHRoZXNlIGFyZQo+PiBkYXRhIGNvZGVjcywg YnV0IHRoYXQgaXMgd2hlcmUgdGhleSBhcmUgSW4gTXl0aFRWLgo+Pgo+PiBUaGVyZSB3YXMgYWxz byBhIHJlbGF0ZWQgY2hhbmdlIHRvIGxpYmF2Zm9ybWF0L2RlbXV4LmMncwo+PiBhdmZvcm1hdF9m aW5kX3N0cmVhbV9pbmZvKCkgdHJ5aW5nIHRvIG9wdGltaXplIGl0IGZvciBNSEVHIHN0cmVhbXMs Cj4+IGJ1dCBpdCBpcyB1bm5lY2Vzc2FyeSBhbmQgd2FzIGNhdXNpbmcgRkFURSB0byBmYWlsLgo+ Pgo+PiDCoCBsaWJhdmNvZGVjL2NvZGVjX2Rlc2MuYyB8wqAgMTIgKysrCj4+IMKgIGxpYmF2Y29k ZWMvY29kZWNfaWQuaMKgwqAgfMKgwqAgNiArKwo+PiDCoCBsaWJhdmZvcm1hdC9hdmZvcm1hdC5o wqAgfMKgwqAgNSArCj4+IMKgIGxpYmF2Zm9ybWF0L21wZWd0cy5jwqDCoMKgIHwgMTk5ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KPj4gwqAgbGliYXZmb3JtYXQvbXBl Z3RzLmjCoMKgwqAgfMKgIDE3ICsrKysKPj4gwqAgNSBmaWxlcyBjaGFuZ2VkLCAyMzcgaW5zZXJ0 aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvY29k ZWNfZGVzYy5jIGIvbGliYXZjb2RlYy9jb2RlY19kZXNjLmMKPj4gaW5kZXggNjQ4YzUxOGIzYy4u MGU1NDA4Nzg2MyAxMDA2NDQKPj4gLS0tIGEvbGliYXZjb2RlYy9jb2RlY19kZXNjLmMKPj4gKysr IGIvbGliYXZjb2RlYy9jb2RlY19kZXNjLmMKPj4gQEAgLTM0ODgsNiArMzQ4OCwxOCBAQCBzdGF0 aWMgY29uc3QgQVZDb2RlY0Rlc2NyaXB0b3IgCj4+IGNvZGVjX2Rlc2NyaXB0b3JzW10gPSB7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCAucHJvcHPCoMKgwqDCoCA9IEFWX0NPREVDX1BST1BfVEVYVF9T VUIsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAucHJvZmlsZXPCoCA9IE5VTExfSUZfQ09ORklHX1NN QUxMKGZmX2FyaWJfY2FwdGlvbl9wcm9maWxlcyksCj4+IMKgwqDCoMKgwqAgfSwKPj4gK8KgwqDC oCB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAuaWTCoMKgwqDCoMKgwqDCoCA9IEFWX0NPREVDX0lEX0RW Ql9WQkksCj4+ICvCoMKgwqDCoMKgwqDCoCAudHlwZcKgwqDCoMKgwqAgPSBBVk1FRElBX1RZUEVf REFUQSwKPj4gK8KgwqDCoMKgwqDCoMKgIC5uYW1lwqDCoMKgwqDCoCA9ICJkdmJfdmJpIiwKPj4g K8KgwqDCoMKgwqDCoMKgIC5sb25nX25hbWUgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiZHZiIHRl bGV0ZXh0IiksCj4+ICvCoMKgwqAgfSwKPj4gK8KgwqDCoCB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAu aWTCoMKgwqDCoMKgwqDCoCA9IEFWX0NPREVDX0lEX0RTTUNDX0IsCj4+ICvCoMKgwqDCoMKgwqDC oCAudHlwZcKgwqDCoMKgwqAgPSBBVk1FRElBX1RZUEVfREFUQSwKPj4gK8KgwqDCoMKgwqDCoMKg IC5uYW1lwqDCoMKgwqDCoCA9ICJkc21jY19iIiwKPj4gK8KgwqDCoMKgwqDCoMKgIC5sb25nX25h bWUgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiRFNNQ0MgQiIpLAo+PiArwqDCoMKgIH0sCj4+IMKg IMKgwqDCoMKgwqAgLyogb3RoZXIga2luZCBvZiBjb2RlY3MgYW5kIHBzZXVkby1jb2RlY3MgKi8K Pj4gwqDCoMKgwqDCoCB7Cj4+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2NvZGVjX2lkLmggYi9s aWJhdmNvZGVjL2NvZGVjX2lkLmgKPj4gaW5kZXggYmM4MjI2ZmYwNy4uN2UyMTk4YTgwMCAxMDA2 NDQKPj4gLS0tIGEvbGliYXZjb2RlYy9jb2RlY19pZC5oCj4+ICsrKyBiL2xpYmF2Y29kZWMvY29k ZWNfaWQuaAo+PiBAQCAtNTU5LDYgKzU1OSwxMiBAQCBlbnVtIEFWQ29kZWNJRCB7Cj4+IMKgwqDC oMKgwqAgQVZfQ09ERUNfSURfVFRNTCwKPj4gwqDCoMKgwqDCoCBBVl9DT0RFQ19JRF9BUklCX0NB UFRJT04sCj4+IMKgICvCoMKgwqAgLyogdGVsZXRleHQgY29kZWNzICovCj4+ICvCoMKgwqAgQVZf Q09ERUNfSURfRFZCX1ZCSSwKPj4gKwo+PiArwqDCoMKgIC8qIERTTUNDIGNvZGVjICovCj4+ICvC oMKgwqAgQVZfQ09ERUNfSURfRFNNQ0NfQiwKPj4gKwo+PiDCoMKgwqDCoMKgIC8qIG90aGVyIHNw ZWNpZmljIGtpbmQgb2YgY29kZWNzIChnZW5lcmFsbHkgdXNlZCBmb3IgCj4+IGF0dGFjaG1lbnRz KSAqLwo+PiDCoMKgwqDCoMKgIEFWX0NPREVDX0lEX0ZJUlNUX1VOS05PV04gPSAweDE4MDAwLMKg wqDCoMKgwqDCoMKgwqDCoMKgIC8vLzwgQSBkdW1teSBJRCAKPj4gcG9pbnRpbmcgYXQgdGhlIHN0 YXJ0IG9mIHZhcmlvdXMgZmFrZSBjb2RlY3MuCj4+IMKgwqDCoMKgwqAgQVZfQ09ERUNfSURfVFRG ID0gMHgxODAwMCwKPj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2F2Zm9ybWF0LmggYi9saWJh dmZvcm1hdC9hdmZvcm1hdC5oCj4+IGluZGV4IDlkNDY4NzVjY2UuLjY2NGExYWZhNjEgMTAwNjQ0 Cj4+IC0tLSBhL2xpYmF2Zm9ybWF0L2F2Zm9ybWF0LmgKPj4gKysrIGIvbGliYXZmb3JtYXQvYXZm b3JtYXQuaAo+PiBAQCAtMTExNyw2ICsxMTE3LDExIEBAIHR5cGVkZWYgc3RydWN0IEFWU3RyZWFt IHsKPj4gwqDCoMKgwqDCoMKgICoKPj4gwqDCoMKgwqDCoMKgICovCj4+IMKgwqDCoMKgwqAgaW50 IHB0c193cmFwX2JpdHM7Cj4+ICsKPj4gK8KgwqDCoCAvKiBNSEVHIHN1cHBvcnQgKi8KPj4gK8Kg wqDCoCBpbnQgY29tcG9uZW50X3RhZzsgLy8vPCBDb21wb25lbnQgdGFnIGdpdmVuIGluIFBNVAo+ PiArwqDCoMKgIGludCBjYXJvdXNlbF9pZDsKPj4gK8KgwqDCoCBpbnQgZGF0YV9pZDsKPj4gwqAg fSBBVlN0cmVhbTsKPj4gwqAgwqAgc3RydWN0IEFWQ29kZWNQYXJzZXJDb250ZXh0ICphdl9zdHJl YW1fZ2V0X3BhcnNlcihjb25zdCBBVlN0cmVhbSAKPj4gKnMpOwo+PiBkaWZmIC0tZ2l0IGEvbGli YXZmb3JtYXQvbXBlZ3RzLmMgYi9saWJhdmZvcm1hdC9tcGVndHMuYwo+PiBpbmRleCA4YTM0MzZm MmJlLi5iZThlZGQ5ZTYyIDEwMDY0NAo+PiAtLS0gYS9saWJhdmZvcm1hdC9tcGVndHMuYwo+PiAr KysgYi9saWJhdmZvcm1hdC9tcGVndHMuYwo+PiBAQCAtNDYsNiArNDYsMTUgQEAKPj4gwqAgI2lu Y2x1ZGUgPGljb252Lmg+Cj4+IMKgICNlbmRpZgo+PiDCoCArdHlwZWRlZiBzdHJ1Y3QgU2VjdGlv bkNvbnRleHQgewo+PiArwqDCoMKgIGludCBwaWQ7Cj4+ICvCoMKgwqAgaW50IHN0cmVhbV90eXBl Owo+PiArwqDCoMKgIGludCBuZXdfcGFja2V0Owo+PiArwqDCoMKgIE1wZWdUU0NvbnRleHQgKnRz Owo+PiArwqDCoMKgIEFWRm9ybWF0Q29udGV4dCAqc3RyZWFtOwo+PiArwqDCoMKgIEFWU3RyZWFt ICpzdDsKPj4gK30gU2VjdGlvbkNvbnRleHQ7Cj4+ICsKPj4gwqAgLyogbWF4aW11bSBzaXplIGlu IHdoaWNoIHdlIGxvb2sgZm9yIHN5bmNocm9uaXphdGlvbiBpZgo+PiDCoMKgICogc3luY2hyb25p emF0aW9uIGlzIGxvc3QgKi8KPj4gwqAgI2RlZmluZSBNQVhfUkVTWU5DX1NJWkUgNjU1MzYKPj4g QEAgLTQxMiw2ICs0MjEsOCBAQCBzdGF0aWMgaW50IGRpc2NhcmRfcGlkKE1wZWdUU0NvbnRleHQg KnRzLCAKPj4gdW5zaWduZWQgaW50IHBpZCkKPj4gwqDCoMKgwqDCoCByZXR1cm4gIXVzZWQgJiYg ZGlzY2FyZGVkOwo+PiDCoCB9Cj4+IMKgICtzdGF0aWMgdm9pZCBtcGVndHNfcHVzaF9zZWN0aW9u KE1wZWdUU0ZpbHRlciAqZmlsdGVyLCBjb25zdCAKPj4gdWludDhfdCAqc2VjdGlvbiwgaW50IHNl Y3Rpb25fbGVuKTsKPj4gKwo+PiDCoCAvKioKPj4gwqDCoCAqwqAgQXNzZW1ibGUgUEVTIHBhY2tl dHMgb3V0IG9mIFRTIHBhY2tldHMsIGFuZCB0aGVuIGNhbGwgdGhlIAo+PiAic2VjdGlvbl9jYiIK Pj4gwqDCoCAqwqAgZnVuY3Rpb24gd2hlbiB0aGV5IGFyZSBjb21wbGV0ZS4KPj4gQEAgLTQzOCw2 ICs0NDksMTEgQEAgc3RhdGljIHZvaWQgd3JpdGVfc2VjdGlvbl9kYXRhKE1wZWdUU0NvbnRleHQg Cj4+ICp0cywgTXBlZ1RTRmlsdGVyICp0c3MxLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdHNzLT5z ZWN0aW9uX2luZGV4ICs9IGxlbjsKPj4gwqDCoMKgwqDCoCB9Cj4+IMKgICvCoMKgwqAgaWYgKHRz cy0+c2VjdGlvbl9jYiA9PSBtcGVndHNfcHVzaF9zZWN0aW9uKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oCBTZWN0aW9uQ29udGV4dCAqc2VjdCA9IHRzcy0+b3BhcXVlOwo+PiArwqDCoMKgwqDCoMKgwqAg c2VjdC0+bmV3X3BhY2tldCA9IDE7Cj4+ICvCoMKgwqAgfQo+PiArCj4+IMKgwqDCoMKgwqAgb2Zm c2V0ID0gMDsKPj4gwqDCoMKgwqDCoCBjdXJfc2VjdGlvbl9idWYgPSB0c3MtPnNlY3Rpb25fYnVm Owo+PiDCoMKgwqDCoMKgIHdoaWxlIChjdXJfc2VjdGlvbl9idWYgLSB0c3MtPnNlY3Rpb25fYnVm IDwgTUFYX1NFQ1RJT05fU0laRSAmJiAKPj4gY3VyX3NlY3Rpb25fYnVmWzBdICE9IDB4ZmYpIHsK Pj4gQEAgLTc5OCw2ICs4MTQsNyBAQCBzdGF0aWMgY29uc3QgU3RyZWFtVHlwZSBJU09fdHlwZXNb XSA9IHsKPj4gwqDCoMKgwqDCoCB7IDB4MDIsIEFWTUVESUFfVFlQRV9WSURFTywgQVZfQ09ERUNf SURfTVBFRzJWSURFTyB9LAo+PiDCoMKgwqDCoMKgIHsgMHgwMywgQVZNRURJQV9UWVBFX0FVRElP LCBBVl9DT0RFQ19JRF9NUDPCoMKgwqDCoMKgwqDCoCB9LAo+PiDCoMKgwqDCoMKgIHsgMHgwNCwg QVZNRURJQV9UWVBFX0FVRElPLCBBVl9DT0RFQ19JRF9NUDPCoMKgwqDCoMKgwqDCoCB9LAo+PiAr wqDCoMKgIHsgMHgwYiwgQVZNRURJQV9UWVBFX0RBVEEswqAgQVZfQ09ERUNfSURfRFNNQ0NfQsKg wqDCoCB9LCAvKiAKPj4gRFZCX0NBUk9VU0VMX0lEICovCj4+IMKgwqDCoMKgwqAgeyAweDBmLCBB Vk1FRElBX1RZUEVfQVVESU8sIEFWX0NPREVDX0lEX0FBQ8KgwqDCoMKgwqDCoMKgIH0sCj4+IMKg wqDCoMKgwqAgeyAweDEwLCBBVk1FRElBX1RZUEVfVklERU8sIEFWX0NPREVDX0lEX01QRUc0wqDC oMKgwqDCoCB9LAo+PiDCoMKgwqDCoMKgIC8qIE1ha2l0byBlbmNvZGVyIHNldHMgc3RyZWFtIHR5 cGUgMHgxMSBmb3IgQUFDLAo+PiBAQCAtODgyLDExICs4OTksMjAgQEAgc3RhdGljIGNvbnN0IFN0 cmVhbVR5cGUgREVTQ190eXBlc1tdID0gewo+PiDCoMKgwqDCoMKgIHsgMHg2YSwgQVZNRURJQV9U WVBFX0FVRElPLMKgwqDCoCBBVl9DT0RFQ19JRF9BQzPCoMKgwqDCoMKgwqDCoMKgwqAgfSwgLyog Cj4+IEFDLTMgZGVzY3JpcHRvciAqLwo+PiDCoMKgwqDCoMKgIHsgMHg3YSwgQVZNRURJQV9UWVBF X0FVRElPLMKgwqDCoCBBVl9DT0RFQ19JRF9FQUMzwqDCoMKgwqDCoMKgwqDCoCB9LCAvKiAKPj4g RS1BQy0zIGRlc2NyaXB0b3IgKi8KPj4gwqDCoMKgwqDCoCB7IDB4N2IsIEFWTUVESUFfVFlQRV9B VURJTyzCoMKgwqAgQVZfQ09ERUNfSURfRFRTwqDCoMKgwqDCoMKgwqDCoMKgIH0sCj4+ICvCoMKg wqAgeyAweDEzLCBBVk1FRElBX1RZUEVfREFUQSzCoMKgwqDCoCBBVl9DT0RFQ19JRF9EU01DQ19C wqDCoMKgwqDCoCB9LCAvKiAKPj4gRFZCX0NBUk9VU0VMX0lEICovCj4+ICvCoMKgwqAgeyAweDQ1 LCBBVk1FRElBX1RZUEVfREFUQSzCoMKgwqDCoCBBVl9DT0RFQ19JRF9EVkJfVkJJwqDCoMKgwqDC oCB9LCAvKiAKPj4gRFZCX1ZCSV9EQVRBX0lEICovCj4+ICvCoMKgwqAgeyAweDQ2LCBBVk1FRElB X1RZUEVfREFUQSzCoMKgwqDCoCBBVl9DT0RFQ19JRF9EVkJfVkJJwqDCoMKgwqDCoCB9LCAvKiAK Pj4gRFZCX1ZCSV9URUxFVEVYVF9JRCAqLyAvL0ZpeE1lIHR5cGUgc3VidGlsdGUKPj4gwqDCoMKg wqDCoCB7IDB4NTYsIEFWTUVESUFfVFlQRV9TVUJUSVRMRSwgQVZfQ09ERUNfSURfRFZCX1RFTEVU RVhUIH0sCj4+IMKgwqDCoMKgwqAgeyAweDU5LCBBVk1FRElBX1RZUEVfU1VCVElUTEUsIEFWX0NP REVDX0lEX0RWQl9TVUJUSVRMRSB9LCAvKiAKPj4gc3VidGl0bGluZyBkZXNjcmlwdG9yICovCj4+ IMKgwqDCoMKgwqAgeyAwIH0sCj4+IMKgIH07Cj4+IMKgICsvKiBjb21wb25lbnQgdGFncyAqLwo+ PiArc3RhdGljIGNvbnN0IFN0cmVhbVR5cGUgQ09NUE9ORU5UX1RBR190eXBlc1tdID0gewo+PiAr wqDCoMKgIHsgMHgwYSwgQVZNRURJQV9UWVBFX0FVRElPLCBBVl9DT0RFQ19JRF9NUDPCoMKgwqDC oMKgwqDCoCB9LAo+PiArwqDCoMKgIHsgMHg1MiwgQVZNRURJQV9UWVBFX1ZJREVPLCBBVl9DT0RF Q19JRF9NUEVHMlZJREVPIH0sCj4+ICt9Owo+PiArCj4+IMKgIHN0YXRpYyB2b2lkIG1wZWd0c19m aW5kX3N0cmVhbV90eXBlKEFWU3RyZWFtICpzdCwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWludDMy X3Qgc3RyZWFtX3R5cGUsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IFN0cmVhbVR5cGUgKnR5 cGVzKQo+PiBAQCAtMTk3OSw3ICsyMDA1LDEzIEBAIGludCBmZl9wYXJzZV9tcGVnMl9kZXNjcmlw dG9yKEFWRm9ybWF0Q29udGV4dCAKPj4gKmZjLCBBVlN0cmVhbSAqc3QsIGludCBzdHJlYW1fdHlw ZQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtY3B5KGV4 dHJhZGF0YSwgKnBwLCA0KTsgLyogCj4+IGNvbXBvc2l0aW9uX3BhZ2VfaWQgYW5kIGFuY2lsbGFy eV9wYWdlX2lkICovCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBleHRyYWRhdGEgKz0gNTsKPj4gwqAgLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICpwcCArPSA0Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp bnQgY29tcF9wYWdlwqDCoCA9IGdldDE2KHBwLCBkZXNjX2VuZCk7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBhbmNfcGFnZcKgwqDCoCA9IGdl dDE2KHBwLCBkZXNjX2VuZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGludCBzdWJfaWTCoMKgwqDCoMKgID0gKGFuY19wYWdlIDw8IDE2KSB8IGNv bXBfcGFnZTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKHN1Yl9pZCAmJiAoc3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9PSAKPj4gQVZfQ09ERUNf SURfRFZCX1NVQlRJVExFKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdC0+Y2Fyb3VzZWxfaWQgPSBzdWJfaWQ7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfQo+PiDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGxhbmd1YWdlW2kgKiA0IC0gMV0gPSAwOwo+PiBAQCAtMjAyMyw4ICsyMDU1LDQ1IEBAIGludCBm Zl9wYXJzZV9tcGVnMl9kZXNjcmlwdG9yKEFWRm9ybWF0Q29udGV4dCAKPj4gKmZjLCBBVlN0cmVh bSAqc3QsIGludCBzdHJlYW1fdHlwZQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0aS0+cmVxdWVzdF9wcm9iZSA9IDUwOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiDC oMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqAgY2FzZSBEVkJfQlJPQURDQVNUX0lE Ogo+PiArwqDCoMKgwqDCoMKgwqAgc3QtPmRhdGFfaWQgPSBnZXQxNihwcCwgZGVzY19lbmQpOwo+ PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqAgY2FzZSBEVkJfQ0FST1VTRUxfSUQ6 Cj4+ICvCoMKgwqDCoMKgwqDCoCB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBjYXJJ ZCA9IDA7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNhcklkID0gZ2V0OChwcCwgZGVzY19l bmQpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjYXJJZCA9IChjYXJJZCA8PCA4KSB8IGdl dDgocHAsIGRlc2NfZW5kKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2FySWQgPSAoY2Fy SWQgPDwgOCkgfCBnZXQ4KHBwLCBkZXNjX2VuZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNhcklkID0gKGNhcklkIDw8IDgpIHwgZ2V0OChwcCwgZGVzY19lbmQpOwo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzdC0+Y2Fyb3VzZWxfaWQgPSBjYXJJZDsKPj4gK8KgwqDCoMKgwqDCoMKg IH0KPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiDCoMKgwqDCoMKgIGNhc2UgMHg1MjogLyog c3RyZWFtIGlkZW50aWZpZXIgZGVzY3JpcHRvciAqLwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3Rp LT5zdHJlYW1faWRlbnRpZmllciA9IDEgKyBnZXQ4KHBwLCBkZXNjX2VuZCk7Cj4+ICvCoMKgwqDC oMKgwqDCoCBzdC0+Y29tcG9uZW50X3RhZ8KgwqDCoMKgID0gc3RpLT5zdHJlYW1faWRlbnRpZmll ciAtIDE7Cj4+ICvCoMKgwqAgLy8gRFZCX0RBVEFfU1RSRUFNOgo+PiArwqDCoMKgwqDCoMKgwqAg LyogQXVkaW8gYW5kIHZpZGVvIGFyZSBzb21ldGltZXMgZW5jb2RlZCBpbiBwcml2YXRlIHN0cmVh bXMgCj4+IGxhYmVsbGVkIHdpdGgKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBhIGNvbXBvbmVudCB0 YWcuICovCj4+ICsjaWYgMAo+PiArwqDCoMKgwqDCoMKgwqDCoCBpZiAoc3QtPmNvZGVjcGFyLT5j b2RlY19pZCA9PSBBVl9DT0RFQ19JRF9OT05FICYmCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZGVzY19jb3VudMKgID09IDEgJiYKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJl YW1fdHlwZSA9PSBTVFJFQU1fVFlQRV9QUklWQVRFX0RBVEEpCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgbXBlZ3RzX2ZpbmRfc3RyZWFtX3R5cGUoc3QsIHN0LT5jb21wb25lbnRfdGFnLAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ09NUE9ORU5UX1RBR190eXBlcyk7Cj4+ICsjZW5k aWYKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgRFZCX1ZCSV9URUxF VEVYVF9JRDoKPj4gK8KgwqDCoMKgwqDCoMKgIGxhbmd1YWdlWzBdID0gZ2V0OChwcCwgZGVzY19l bmQpOwo+PiArwqDCoMKgwqDCoMKgwqAgbGFuZ3VhZ2VbMV0gPSBnZXQ4KHBwLCBkZXNjX2VuZCk7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBsYW5ndWFnZVsyXSA9IGdldDgocHAsIGRlc2NfZW5kKTsKPj4g K8KgwqDCoMKgwqDCoMKgIGxhbmd1YWdlWzNdID0gMDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAg LyogZHZiY2ktPnR4dF90eXBlID0gKi8gaSA9IChnZXQ4KHBwLCBkZXNjX2VuZCkpID4+IDM7IC8v IAo+PiBub3QgZXhwb3J0ZWQsIGRlZmVhdCBjb21waWxlciAtV3VudXNlZC12YWx1ZQo+PiArwqDC oMKgwqDCoMKgwqAgaWYgKGxhbmd1YWdlWzBdKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBh dl9kaWN0X3NldCgmc3QtPm1ldGFkYXRhLCAibGFuZ3VhZ2UiLCBsYW5ndWFnZSwgMCk7Cj4+ICvC oMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCBjYXNlIERWQl9WQklfREFUQV9JRDoKPj4g K8KgwqDCoMKgwqDCoMKgIC8vIGR2YmNpLT52YmlfZGF0YSA9IDE7IC8vbm90IHBhcnNpbmcgdGhl IGRhdGEgc2VydmljZSAKPj4gZGVzY3JpcHRvcnMKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFr Owo+PiDCoMKgwqDCoMKgIGNhc2UgTUVUQURBVEFfREVTQ1JJUFRPUjoKPj4gwqDCoMKgwqDCoMKg wqDCoMKgIGlmIChnZXQxNihwcCwgZGVzY19lbmQpID09IDB4RkZGRikKPj4gQEAgLTIzMDcsNiAr MjM3NiwzNCBAQCBzdGF0aWMgaW50IGlzX3Blc19zdHJlYW0oaW50IHN0cmVhbV90eXBlLCAKPj4g dWludDMyX3QgcHJvZ19yZWdfZGVzYykKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAo c3RyZWFtX3R5cGUgPT0gMHg4NiAmJiBwcm9nX3JlZ19kZXNjID09IAo+PiBBVl9STDMyKCJDVUVJ IikpICk7Cj4+IMKgIH0KPj4gwqAgK3N0YXRpYyBTZWN0aW9uQ29udGV4dCAqYWRkX3NlY3Rpb25f c3RyZWFtKE1wZWdUU0NvbnRleHQgKnRzLCBpbnQgCj4+IHBpZCwgaW50IHN0cmVhbV90eXBlKQo+ PiArewo+PiArwqDCoMKgIE1wZWdUU0ZpbHRlciAqdHNzID0gdHMtPnBpZHNbcGlkXTsKPj4gK8Kg wqDCoCBTZWN0aW9uQ29udGV4dCAqc2VjdCA9IDA7Cj4+ICvCoMKgwqAgaWYgKHRzcykgeyAvKiBm aWx0ZXIgYWxyZWFkeSBleGlzdHMgKi8KPj4gK8KgwqDCoMKgwqDCoMKgIC8qIGtpbGwgaXQsIGFu ZCBzdGFydCBhIG5ldyBzdHJlYW0gKi8KPj4gK8KgwqDCoMKgwqDCoMKgIG1wZWd0c19jbG9zZV9m aWx0ZXIodHMsIHRzcyk7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgLyogY3JlYXRlIGEg U0VDVElPTiBjb250ZXh0ICovCj4+ICvCoMKgwqAgaWYgKCEoc2VjdD1hdl9tYWxsb2N6KHNpemVv ZihTZWN0aW9uQ29udGV4dCkpKSkgewo+PiArwqDCoMKgwqDCoMKgwqAgYXZfbG9nKHRzLCBBVl9M T0dfRVJST1IsICJFcnJvcjogYXZfbWFsbG9jeigpIGZhaWxlZCBpbiAKPj4gYWRkX3NlY3Rpb25f c3RyZWFtIik7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gK8KgwqDCoCB9Cj4+ICvC oMKgwqAgc2VjdC0+dHMgPSB0czsKPj4gK8KgwqDCoCBzZWN0LT5zdHJlYW0gPSB0cy0+c3RyZWFt Owo+PiArwqDCoMKgIHNlY3QtPnBpZCA9IHBpZDsKPj4gK8KgwqDCoCBzZWN0LT5zdHJlYW1fdHlw ZSA9IHN0cmVhbV90eXBlOwo+PiArwqDCoMKgIHRzcyA9IG1wZWd0c19vcGVuX3NlY3Rpb25fZmls dGVyKHRzLCBwaWQsIG1wZWd0c19wdXNoX3NlY3Rpb24sIAo+PiBzZWN0LCAxKTsKPj4gK8KgwqDC oCBpZiAoIXRzcykgewo+PiArwqDCoMKgwqDCoMKgwqAgYXZfZnJlZShzZWN0KTsKPj4gK8KgwqDC oMKgwqDCoMKgIGF2X2xvZyh0cywgQVZfTE9HX0VSUk9SLCAiRXJyb3I6IHVuYWJsZSB0byBvcGVu IG1wZWd0cyAKPj4gU2VjdGlvbiBmaWx0ZXIgaW4gYWRkX3NlY3Rpb25fc3RyZWFtIik7Cj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXR1 cm4gc2VjdDsKPj4gK30KPj4gKwo+PiDCoCBzdGF0aWMgdm9pZCBwbXRfY2IoTXBlZ1RTRmlsdGVy ICpmaWx0ZXIsIGNvbnN0IHVpbnQ4X3QgKnNlY3Rpb24sIAo+PiBpbnQgc2VjdGlvbl9sZW4pCj4+ IMKgIHsKPj4gwqDCoMKgwqDCoCBNcGVnVFNDb250ZXh0ICp0cyA9IGZpbHRlci0+dS5zZWN0aW9u X2ZpbHRlci5vcGFxdWU7Cj4+IEBAIC0yNDI1LDcgKzI1MjIsNTYgQEAgc3RhdGljIHZvaWQgcG10 X2NiKE1wZWdUU0ZpbHRlciAqZmlsdGVyLCBjb25zdCAKPj4gdWludDhfdCAqc2VjdGlvbiwgaW50 IHNlY3Rpb25fbGVuCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJlYW1faWRlbnRpZmllciA9IHBh cnNlX3N0cmVhbV9pZGVudGlmaWVyX2Rlc2MocCwgcF9lbmQpIAo+PiArIDE7Cj4+IMKgIMKgwqDC oMKgwqDCoMKgwqDCoCAvKiBub3cgY3JlYXRlIHN0cmVhbSAqLwo+PiAtwqDCoMKgwqDCoMKgwqAg aWYgKHRzLT5waWRzW3BpZF0gJiYgdHMtPnBpZHNbcGlkXS0+dHlwZSA9PSBNUEVHVFNfUEVTKSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoc3RyZWFtX3R5cGUgPT0gU1RSRUFNX1RZUEVfRFNNQ0Nf QikKPj4gK8KgwqDCoMKgwqDCoMKgIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU2VjdGlv bkNvbnRleHQgKnNlY3QgPSBOVUxMOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgaWR4 ID0gLTE7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHRzLT5waWRzW3BpZF0g JiYgdHMtPnBpZHNbcGlkXS0+dHlwZSA9PSAKPj4gTVBFR1RTX1NFQ1RJT04gJiYKPj4gKyB0cy0+ cGlkc1twaWRdLT51LnNlY3Rpb25fZmlsdGVyLnNlY3Rpb25fY2IgPT0gbXBlZ3RzX3B1c2hfc2Vj dGlvbikgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8vIHUuc2VjdGlvbl9m aWx0ZXIub3BhcXVlIG1heSBiZSB0aGUgTXBlZ1RTQ29udGV4dCwgCj4+IHNvIHRlc3QgdGhlIHNl Y3Rpb25fY2IKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWN0ID0gKFNlY3Rp b25Db250ZXh0KikgCj4+IHRzLT5waWRzW3BpZF0tPnUuc2VjdGlvbl9maWx0ZXIub3BhcXVlOwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlm ICghc2VjdCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlY3QgPSBhZGRf c2VjdGlvbl9zdHJlYW0odHMsIHBpZCwgc3RyZWFtX3R5cGUpOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghc2VjdCkKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2 X2xvZyh0cywgQVZfTE9HX0VSUk9SLCAibXBlZ3RzX2FkZF9zdHJlYW06ICIKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJlcnJvciBjcmVhdGluZyBTZWN0 aW9uIGNvbnRleHQgZm9yIHBpZCAweCV4IAo+PiB3aXRoIHR5cGUgJWlcbiIsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaWQsIHN0cmVhbV90eXBlKTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG91dDsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlkeCA9IGZm X2ZpbmRfc3RyZWFtX2luZGV4KHRzLT5zdHJlYW0sIHBpZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGlmIChpZHggPj0gMCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0ID0gdHMtPnN0cmVhbS0+c3RyZWFtc1tpZHhdOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGF2X2xvZyh0cywgQVZfTE9HX0RFQlVHLCAibXBlZ3RzX2FkZF9zdHJlYW06ICIK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAicmV1c2luZyBzdHJlYW0g IyVkLCBoYXMgaWQgMHgleCBhbmQgY29kZWMgJXMsIAo+PiB0eXBlICVzIGF0IDB4JXBcbiIsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3QtPmluZGV4LCBzdC0+aWQs IAo+PiBhdmNvZGVjX2dldF9uYW1lKHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQpLAo+PiArIGF2X2dl dF9tZWRpYV90eXBlX3N0cmluZyhzdC0+Y29kZWNwYXItPmNvZGVjX3R5cGUpLCBzdCk7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFz dCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0ID0gYXZmb3JtYXRfbmV3 X3N0cmVhbShzZWN0LT5zdHJlYW0sIE5VTEwpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghc3QpIHsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBnb3RvIG91dDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWN0LT5zdCA9IHN0Owo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzZWN0LT5zdC0+aWQgPSBzZWN0LT5waWQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYXZwcml2X3NldF9wdHNfaW5mbyhzZWN0LT5zdCwgMzMsIDEsIDkwMDAwKTsK Pj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWN0LT5zdC0+Y29kZWNwYXItPmNvZGVj X3R5cGUgPSBBVk1FRElBX1RZUEVfREFUQTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2Vj dC0+c3QtPmNvZGVjcGFyLT5jb2RlY19pZMKgwqAgPSBBVl9DT0RFQ19JRF9EU01DQ19COwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWN0LT5zdC0+cHJpdl9kYXRhID0gc2VjdDsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZmZzdHJlYW0oc2VjdC0+c3QpLT5uZWVkX3BhcnNpbmcgPSBB VlNUUkVBTV9QQVJTRV9OT05FOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xv Zyh0cywgQVZfTE9HX0RFQlVHLCAibXBlZ3RzX2FkZF9zdHJlYW06ICIKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAic3RyZWFtICMlZCwgaGFzIGlkIDB4JXggYW5kIGNv ZGVjICVzLCB0eXBlICVzIGF0IAo+PiAweCVwXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN0LT5pbmRleCwgc3QtPmlkLCAKPj4gYXZjb2RlY19nZXRfbmFtZShz dC0+Y29kZWNwYXItPmNvZGVjX2lkKSwKPj4gKyBhdl9nZXRfbWVkaWFfdHlwZV9zdHJpbmcoc3Qt PmNvZGVjcGFyLT5jb2RlY190eXBlKSwgc3QpOwo+PiArwqDCoMKgwqDCoMKgwqAgfSBlbHNlIGlm ICh0cy0+cGlkc1twaWRdICYmIHRzLT5waWRzW3BpZF0tPnR5cGUgPT0gCj4+IE1QRUdUU19QRVMp IHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGVzID0gdHMtPnBpZHNbcGlkXS0+dS5w ZXNfZmlsdGVyLm9wYXF1ZTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHRzLT5t ZXJnZV9wbXRfdmVyc2lvbnMgJiYgIXBlcy0+c3QpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzdCA9IGZpbmRfbWF0Y2hpbmdfc3RyZWFtKHRzLCBwaWQsIGgtPmlkLCAK Pj4gc3RyZWFtX2lkZW50aWZpZXIsIGksICZvbGRfcHJvZ3JhbSk7Cj4+IEBAIC0yNTI3LDYgKzI2 NzMsNTUgQEAgb3V0Ogo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfZnJlZShtcDRfZGVzY3JbaV0u ZGVjX2NvbmZpZ19kZXNjcik7Cj4+IMKgIH0KPj4gwqAgKy8qIG1wZWd0c19wdXNoX3NlY3Rpb246 IHJldHVybiBvbmUgb3IgbW9yZSB0YWJsZXMuwqAgVGhlIHRhYmxlcyBtYXkgCj4+IG5vdCBjb21w bGV0ZWx5IGZpbGwKPj4gK8KgwqAgdGhlIHBhY2tldCBhbmQgdGhlcmUgbWF5IGJlIHN0dWZmaW5n IGJ5dGVzIGF0IHRoZSBlbmQuCj4+ICvCoMKgIFRoaXMgaXMgY29tcGxpY2F0ZWQgYmVjYXVzZSBh IHNpbmdsZSBUUyBwYWNrZXQgbWF5IHJlc3VsdCBpbiAKPj4gc2V2ZXJhbCB0YWJsZXMgYmVpbmcK Pj4gK8KgwqAgcHJvZHVjZWQuwqAgV2UgbWF5IGhhdmUgYSAic3RhcnQiIGJpdCBpbmRpY2F0aW5n LCBpbiBlZmZlY3QsIHRoZSAKPj4gZW5kIG9mIGEgdGFibGUgYnV0Cj4+ICvCoMKgIHRoZSByZXN0 IG9mIHRoZSBUUyBwYWNrZXQgYWZ0ZXIgdGhlIHN0YXJ0IG1heSBiZSBmaWxsZWQgd2l0aCBvbmUg Cj4+IG9yIG1vcmUgc21hbGwgdGFibGVzLgo+PiArKi8KPj4gK3N0YXRpYyB2b2lkIG1wZWd0c19w dXNoX3NlY3Rpb24oTXBlZ1RTRmlsdGVyICpmaWx0ZXIsIGNvbnN0IHVpbnQ4X3QgCj4+ICpzZWN0 aW9uLCBpbnQgc2VjdGlvbl9sZW4pCj4+ICt7Cj4+ICvCoMKgwqAgU2VjdGlvbkNvbnRleHQgKnNl Y3QgPSBmaWx0ZXItPnUuc2VjdGlvbl9maWx0ZXIub3BhcXVlOwo+PiArwqDCoMKgIE1wZWdUU0Nv bnRleHQgKnRzID0gc2VjdC0+dHM7Cj4+ICvCoMKgwqAgU2VjdGlvbkhlYWRlciBoZWFkZXI7Cj4+ ICvCoMKgwqAgQVZQYWNrZXQgKnBrdCA9IHRzLT5wa3Q7Cj4+ICvCoMKgwqAgY29uc3QgdWludDhf dCAqcCA9IHNlY3Rpb24sICpwX2VuZCA9IHNlY3Rpb24gKyBzZWN0aW9uX2xlbiAtIDQ7Cj4+ICsK Pj4gK8KgwqDCoCBpZiAocGFyc2Vfc2VjdGlvbl9oZWFkZXIoJmhlYWRlciwgJnAsIHBfZW5kKSA8 IDApCj4+ICvCoMKgwqAgewo+PiArwqDCoMKgwqDCoMKgwqAgYXZfbG9nKHRzLCBBVl9MT0dfREVC VUcsICJVbmFibGUgdG8gcGFyc2UgaGVhZGVyXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy bjsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBpZiAoc2VjdC0+bmV3X3BhY2tldCAmJiBw a3QgJiYgc2VjdC0+c3QgJiYgcGt0LT5zaXplID09IC0xKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBp bnQgcGt0TGVuID0gc2VjdGlvbl9sZW4gKyAxODQ7IC8qIEFkZCBlbm91Z2ggZm9yIGEgY29tcGxl dGUgCj4+IFRTIHBheWxvYWQuICovCj4+ICvCoMKgwqDCoMKgwqDCoCBzZWN0LT5uZXdfcGFja2V0 ID0gMDsKPj4gK8KgwqDCoMKgwqDCoMKgIGF2X3BhY2tldF91bnJlZihwa3QpOwo+PiArwqDCoMKg wqDCoMKgwqAgaWYgKGF2X25ld19wYWNrZXQocGt0LCBwa3RMZW4pID09IDApIHsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgbWVtY3B5KHBrdC0+ZGF0YSwgc2VjdGlvbiwgc2VjdGlvbl9sZW4p Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZW1zZXQocGt0LT5kYXRhK3NlY3Rpb25fbGVu LCAweGZmLCBwa3RMZW4tc2VjdGlvbl9sZW4pOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBw a3QtPnN0cmVhbV9pbmRleCA9IHNlY3QtPnN0LT5pbmRleDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgdHMtPnN0b3BfcGFyc2UgPSAxOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKg IH0gZWxzZSBpZiAocGt0LT5kYXRhKSB7IC8qIFdlJ3ZlIGFscmVhZHkgYWRkZWQgYXQgbGVhc3Qg b25lIAo+PiB0YWJsZS4gKi8KPj4gK8KgwqDCoMKgwqDCoMKgIHVpbnQ4X3QgKmRhdGEgPSBwa3Qt PmRhdGE7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpbnQgc3BhY2UgPSBwa3QtPnNpemU7Cj4+ICvCoMKg wqDCoMKgwqDCoCBpbnQgdGFibGVfc2l6ZSA9IDA7Cj4+ICvCoMKgwqDCoMKgwqDCoCB3aGlsZSAo c3BhY2UgPiAzICsgdGFibGVfc2l6ZSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0YWJs ZV9zaXplID0gKCgoZGF0YVsxXSAmIDB4ZikgPDwgOCkgfCBkYXRhWzJdKSArIDM7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlmICh0YWJsZV9zaXplIDwgc3BhY2UpIHsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcGFjZSAtPSB0YWJsZV9zaXplOwo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRhdGEgKz0gdGFibGVfc2l6ZTsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfSAvKiBPdGhlcndpc2Ugd2UndmUgZ290IGZpbGxlci4gKi8KPj4gK8KgwqDC oMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChzcGFjZSA8IHNlY3Rpb25fbGVuKSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyh0cywgQVZfTE9HX0RFQlVHLCAiSW5z dWZmaWNpZW50IHNwYWNlIGZvciAKPj4gYWRkaXRpb25hbCBwYWNrZXRcbiIpOwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqDC oMKgwqDCoCBtZW1jcHkoZGF0YSwgc2VjdGlvbiwgc2VjdGlvbl9sZW4pOwo+PiArwqDCoCB9Cj4+ ICt9Cj4+ICsKPj4gwqAgc3RhdGljIHZvaWQgcGF0X2NiKE1wZWdUU0ZpbHRlciAqZmlsdGVyLCBj b25zdCB1aW50OF90ICpzZWN0aW9uLCAKPj4gaW50IHNlY3Rpb25fbGVuKQo+PiDCoCB7Cj4+IMKg wqDCoMKgwqAgTXBlZ1RTQ29udGV4dCAqdHMgPSBmaWx0ZXItPnUuc2VjdGlvbl9maWx0ZXIub3Bh cXVlOwo+PiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbXBlZ3RzLmggYi9saWJhdmZvcm1hdC9t cGVndHMuaAo+PiBpbmRleCBhNDhmMTRlNzY4Li42ZjU3YWY3Nzg2IDEwMDY0NAo+PiAtLS0gYS9s aWJhdmZvcm1hdC9tcGVndHMuaAo+PiArKysgYi9saWJhdmZvcm1hdC9tcGVndHMuaAo+PiBAQCAt MTIyLDYgKzEyMiw3IEBACj4+IMKgICNkZWZpbmUgU1RSRUFNX1RZUEVfQVVESU9fTVBFRzLCoMKg wqDCoCAweDA0Cj4+IMKgICNkZWZpbmUgU1RSRUFNX1RZUEVfUFJJVkFURV9TRUNUSU9OIDB4MDUK Pj4gwqAgI2RlZmluZSBTVFJFQU1fVFlQRV9QUklWQVRFX0RBVEHCoMKgwqAgMHgwNgo+PiArI2Rl ZmluZSBTVFJFQU1fVFlQRV9EU01DQ19CwqDCoMKgwqDCoMKgwqDCoCAweDBiCj4+IMKgICNkZWZp bmUgU1RSRUFNX1RZUEVfQVVESU9fQUFDwqDCoMKgwqDCoMKgIDB4MGYKPj4gwqAgI2RlZmluZSBT VFJFQU1fVFlQRV9BVURJT19BQUNfTEFUTcKgIDB4MTEKPj4gwqAgI2RlZmluZSBTVFJFQU1fVFlQ RV9WSURFT19NUEVHNMKgwqDCoMKgIDB4MTAKPj4gQEAgLTEzOSw2ICsxNDAsMjIgQEAKPj4gwqAg I2RlZmluZSBTVFJFQU1fVFlQRV9BVURJT19UUlVFSETCoMKgwqAgMHg4Mwo+PiDCoCAjZGVmaW5l IFNUUkVBTV9UWVBFX0FVRElPX0VBQzPCoMKgwqDCoMKgIDB4ODcKPj4gwqAgKyNkZWZpbmUgU1RS RUFNX1RZUEVfQVVESU9fTUlTQ19EVFPCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDhhCj4+ICsjZGVm aW5lIFNUUkVBTV9UWVBFX0FVRElPX0hETVZfQUMzX1BMVVPCoMKgwqDCoMKgIDB4ODQKPj4gKyNk ZWZpbmUgU1RSRUFNX1RZUEVfQVVESU9fSERNVl9EVFNfSETCoMKgwqDCoMKgwqDCoCAweDg1Cj4+ ICsjZGVmaW5lIFNUUkVBTV9UWVBFX0FVRElPX0hETVZfRFRTX0hEX01BU1RFUiAweDg2Cj4+ICsK Pj4gKyNkZWZpbmUgU1RSRUFNX1RZUEVfU1VCVElUTEVfRFZCwqDCoMKgIDB4MTAwCj4+ICsjZGVm aW5lIFNUUkVBTV9UWVBFX1ZCSV9EVkLCoMKgwqDCoMKgwqDCoMKgIDB4MTAxCj4+ICsKPj4gKyNk ZWZpbmUgRFZCX0NBUk9VU0VMX0lEwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MTMKPj4gKyNk ZWZpbmUgRFZCX1ZCSV9EQVRBX0lEwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4NDUKPj4gKyNk ZWZpbmUgRFZCX1ZCSV9URUxFVEVYVF9JRMKgwqDCoMKgwqDCoMKgwqAgMHg0Ngo+PiArI2RlZmlu ZSBEVkJfVEVMRVRFWFRfSUTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHg1Ngo+PiArI2RlZmlu ZSBEVkJfU1VCVF9ERVNDSUTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHg1OQo+PiArI2RlZmlu ZSBEVkJfQlJPQURDQVNUX0lEwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDY2Cj4+ICsjZGVmaW5l IERWQl9EQVRBX1NUUkVBTcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDUyCj4+ICsKPj4gwqAg LyogSVNPL0lFQyAxMzgxOC0xIFRhYmxlIDItMjIgKi8KPj4gwqAgI2RlZmluZSBTVFJFQU1fSURf UFJPR1JBTV9TVFJFQU1fTUFQwqDCoMKgwqDCoMKgwqAgMHhiYwo+PiDCoCAjZGVmaW5lIFNUUkVB TV9JRF9QUklWQVRFX1NUUkVBTV8xwqDCoMKgwqDCoMKgwqDCoMKgIDB4YmQKPgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxp bmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1h bi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3Zl LCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAi dW5zdWJzY3JpYmUiLgo=