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 0C8BA485CF for ; Fri, 8 Dec 2023 16:20:49 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id ECDDF68D02E; Fri, 8 Dec 2023 18:20:45 +0200 (EET) Received: from mail-lj1-f170.google.com (mail-lj1-f170.google.com [209.85.208.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9BE9868CD3F for ; Fri, 8 Dec 2023 18:20:39 +0200 (EET) Received: by mail-lj1-f170.google.com with SMTP id 38308e7fff4ca-2c9efa1ab7fso27835301fa.0 for ; Fri, 08 Dec 2023 08:20:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1702052438; x=1702657238; darn=ffmpeg.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=XK5VZ+dC8cZd4Qi2lYdAYGrHWJHg0AnabZDmL51B6Q8=; b=J4hkuI3DqG5M1Z2ewx0JdMl9eAtvLwrsuvAGE3H0teIuKDLIspIvL3pRy8rKx1xDO5 eUdnrwwO6phW0aNdx9swQyqrM8UYlyb25vPorE4/YJdX+ODryH38RKElK1cSYxupEapD 8DiRnwF0ZKVCyFgNYCCrjbAh8kL6a8wwtI/pw8zwGpsICHmEUQ1AGkq4i0XfP+LcUcJa 57xRNO4buwsx13AgeIMFqpfkLP6QXZKNA6T7wu+7bdi0AaJclnFwqdqyREeXz//kR17b LYKl6V27aDwBmaeOx2D4NZ5jyNDtnHY+M3Dnbl5ryv8uPrwYJk3a7pM9qfIAuwLYjWTB mWYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702052438; x=1702657238; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=XK5VZ+dC8cZd4Qi2lYdAYGrHWJHg0AnabZDmL51B6Q8=; b=SwFTSOb7dZMouHaQTW1vWdO57wVJ31b5H0dRGF8Fw1PksYkGO5Ngb3WA7iVIy0/aSW guud1SAHQGwAY1uxxGd9skN+FIqNKcCsEPymW0BlTK00pngiMksAp7MoYnbNPVTYTtIr 3QCLlbI6/C7afsSZ5OaBwd9HwrX8/sJGSXGLsiztcIvNxuI/GK7LOq5o74E5LFhz4Jzg EeK6fAumJSFNc2+6VZfq6yKAqX6bW0sUkR0hNWUuGKfIxPpL6gwJREYqiWYjYPb+MAAO XqNFjFcbLEP+epuwFId7EJ2++6Un25FMykBAIFVoOPBigiVxPhKhkeZtXsHUtHcR7neQ HGxg== X-Gm-Message-State: AOJu0Ywvuq1F9KyK6Sa75ahSKI8Bo/RHTjVXdjSw+eOcctncirqn/EnQ QOAUgApOyJsuc1a25GQwFEfdAE0JUi6cXXlDpbUwIj4jaMQ= X-Google-Smtp-Source: AGHT+IF2yW13T3heL6xXNZJyrOjlVsq8j+kHujnXd5GBQPZLP0rn2fggJSeFGekYhQufd7XDny6F0pGxxmdLR7/LObU= X-Received: by 2002:a2e:9910:0:b0:2c9:f925:df0e with SMTP id v16-20020a2e9910000000b002c9f925df0emr42586lji.34.1702052437583; Fri, 08 Dec 2023 08:20:37 -0800 (PST) MIME-Version: 1.0 References: <20231205144519.7334-1-nuomi2021@gmail.com> In-Reply-To: From: Nuo Mi Date: Sat, 9 Dec 2023 00:20:24 +0800 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v6 14/14] vvcdec: add full vvc decoder 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: SGkgQW5kcmVhcywKdGhhbmsgeW91IGZvciB0aGUgcmV2aWV3LgpPbiBGcmksIERlYyA4LCAyMDIz IGF0IDg6MTfigK9QTSBBbmRyZWFzIFJoZWluaGFyZHQgPAphbmRyZWFzLnJoZWluaGFyZHRAb3V0 bG9vay5jb20+IHdyb3RlOgoKPgo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbWluX3B1X2FycmF5c19p bml0KFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IGludAo+IHBpY19zaXplX2luX21pbl9wdSkK PiA+ICt7Cj4gPiArICAgIGlmIChmYy0+dGFiLnBpY19zaXplX2luX21pbl9wdSAhPSBwaWNfc2l6 ZV9pbl9taW5fcHUpIHsKPiA+ICsgICAgICAgIG1pbl9wdV9hcnJheXNfZnJlZShmYyk7Cj4gPiAr ICAgICAgICBmYy0+dGFiLm1zZiAgPSBhdl9tYWxsb2N6KHBpY19zaXplX2luX21pbl9wdSk7Cj4g PiArICAgICAgICBmYy0+dGFiLmlhZiAgPSBhdl9tYWxsb2N6KHBpY19zaXplX2luX21pbl9wdSk7 Cj4gPiArICAgICAgICBmYy0+dGFiLm1taSAgPSBhdl9tYWxsb2N6KHBpY19zaXplX2luX21pbl9w dSk7Cj4gPiArICAgICAgICBmYy0+dGFiLm12ZiAgPSBhdl9tYWxsb2N6KHBpY19zaXplX2luX21p bl9wdSAqCj4gc2l6ZW9mKCpmYy0+dGFiLm12ZikpOwo+Cj4gRG8gdGhlc2UgaGF2ZSB0byBiZSBz ZXBhcmF0ZSBhbGxvY2F0aW9ucz8gSWYgdGhlcmUgd2VyZSBhbGxvY2F0ZWQKPiBqb2ludGx5LCBv bmUgbWVtc2V0IGJlbG93IHdvdWxkIHN1ZmZpY2UuCj4KVGhleSBhcmUgc2VwYXJhdGUgZmxhZ3Ms IGlmIHdlIGNvbWJpbmUgdGhlbS4gV2UgY2FuJ3QgdXNlIG1lbXNldCB0byBzZXQKZmxhZ3MgZm9y IGEgYmxvY2suCgo+Cj4gPiArCj4gPiArICAgIGlmICghZmMtPmN1X3Bvb2wpIHsKPiA+ICsgICAg ICAgIGZjLT5jdV9wb29sID0gZmZfcmVmc3RydWN0X3Bvb2xfYWxsb2Moc2l6ZW9mKENvZGluZ1Vu aXQpLCAwKTsKPiA+ICsgICAgICAgIGlmICghZmMtPmN1X3Bvb2wpCj4gPiArICAgICAgICAgICAg Z290byBmYWlsOwo+Cj4gVGhlIHNpemUgb2YgdGhlIG9iamVjdHMgY29udGFpbmVkIGluIHRoaXMg cG9vbCBkb24ndCBkZXBlbmQgb24gYW55Cj4gYml0c3RyZWFtIHBhcmFtZXRlcnMuIFlvdSBjYW4g dGhlcmVmb3JlIHNpbXBseSB1c2UgYSBzaW5nbGUgcG9vbCAoaW4KPiBWVkNDb250ZXh0KSB0aGF0 IGlzIGFsbG9jYXRlZCBpbiB2dmNfZGVjb2RlX2luaXQoKSBhbmQgZnJlZWQgaW4KPiB2dmNfZGVj b2RlX2ZyZWUoKS4KPiBUaGUgc2FtZSBnb2VzIGZvciB0dV9wb29sIGJlbG93Lgo+CkEgZ2xvYmFs IHBvb2wgbWF5IGhhdmUgYSBwZXJmb3JtYW5jZSBpc3N1ZSBmb3IgaHVnZSB0aHJlYWQgbnVtYmVy LgpNb3ZlIGl0IHRvIGZyYW1lX2NvbnRleHRfaW5pdAoKPgo+Cj4KPiA+ICtzdGF0aWMgaW50IHNs aWNlc19yZWFsbG9jKFZWQ0ZyYW1lQ29udGV4dCAqZmMpCj4gPiArewo+ID4gKyAgICB2b2lkICpw Owo+ID4gKyAgICBjb25zdCBpbnQgc2l6ZSA9IChmYy0+bmJfc2xpY2VzX2FsbG9jYXRlZCArIDEp ICogMyAvIDI7Cj4gPiArCj4gPiArICAgIGlmIChmYy0+bmJfc2xpY2VzIDwgZmMtPm5iX3NsaWNl c19hbGxvY2F0ZWQpCj4gPiArICAgICAgICByZXR1cm4gMDsKPiA+ICsKPiA+ICsgICAgcCA9IGF2 X3JlYWxsb2MoZmMtPnNsaWNlcywgc2l6ZSAqIHNpemVvZigqZmMtPnNsaWNlcykpOwo+Cj4gYXZf cmVhbGxvY19hcnJheSgpCj4KIGRvbmUKCj4KPiA+ICsgICAgaWYgKCFwKQo+ID4gKyAgICAgICAg cmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiA+ICsKPiA+ICsgICAgZmMtPnNsaWNlcyA9IHA7Cj4g PiArICAgIGZvciAoaW50IGkgPSBmYy0+bmJfc2xpY2VzX2FsbG9jYXRlZDsgaSA8IHNpemU7IGkr Kykgewo+ID4gKyAgICAgICAgZmMtPnNsaWNlc1tpXSA9IGF2X2NhbGxvYygxLCBzaXplb2YoKmZj LT5zbGljZXNbMF0pKTsKPgo+IGF2X21hbGxvY3ooKS4KPgpkb25lCgo+Cj4gPiArICAgICAgICBp ZiAoIWZjLT5zbGljZXNbaV0pIHsKPiA+ICsgICAgICAgICAgICBmb3IgKGludCBqID0gZmMtPm5i X3NsaWNlc19hbGxvY2F0ZWQ7IGogPCBpOyBqKyspCj4gPiArICAgICAgICAgICAgICAgIGF2X2Zy ZWVwKCZmYy0+c2xpY2VzW2pdKTsKPiA+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOwo+Cj4gQ2FuJ3QgeW91IHNpbXBseSBzZXQgZmMtPm5iX3NsaWNlc19hbGxvY2F0ZWQgdG8g aSBpbiBvcmRlciB0byBhdm9pZCB0aGlzCj4gbG9vcD8KPgpkb25lCgo+ID4gKwo+ID4gK3N0YXRp YyBpbnQgaW5pdF9zbGljZV9jb250ZXh0KFNsaWNlQ29udGV4dCAqc2MsIFZWQ0ZyYW1lQ29udGV4 dCAqZmMsCj4gY29uc3QgSDI2NDVOQUwgKm5hbCwgY29uc3QgQ29kZWRCaXRzdHJlYW1Vbml0ICp1 bml0KQo+ID4gK3sKPiA+ICsgICAgY29uc3QgVlZDU0ggKnNoICAgICAgICAgICAgID0gJnNjLT5z aDsKPiA+ICsgICAgY29uc3QgSDI2NlJhd1NsaWNlICpzbGljZSAgID0gKGNvbnN0IEgyNjZSYXdT bGljZSAqKXVuaXQtPmNvbnRlbnQ7Cj4KPiBQbGVhc2Ugbm8gcG9pbnRsZXNzIGNhc3RzLiBBbHNv LCB3aHkgaXMgdGhlcmUgdW5uZWNlc3Nhcnkgd2hpdGVzcGFjZSBpbgo+IGZyb250IG9mICc9Jz8K PgpGaXggaGVyZSBhbmQgc2VydmFsIG90aGVyIHBsYWNlcwpUaGUgd2hpdGVzcGFjZSB3aWxsIG1h a2UgYWxsID0gaW4gYSBjb2wuCgoKPiA+ICsgICAgaW50IG5iX2VwcyAgICAgICAgICAgICAgICAg ID0gc2gtPnItPm51bV9lbnRyeV9wb2ludHMgKyAxOwo+ID4gKyAgICBpbnQgY3R1X2FkZHIgICAg ICAgICAgICAgICAgPSAwOwo+ID4gKyAgICBHZXRCaXRDb250ZXh0IGdiOwo+ID4gKwo+ID4gKyAg ICBpZiAoc2MtPm5iX2VwcyAhPSBuYl9lcHMpIHsKPiA+ICsgICAgICAgIGVwc19mcmVlKHNjKTsK PiA+ICsgICAgICAgIHNjLT5lcHMgPSBhdl9jYWxsb2MobmJfZXBzLCBzaXplb2YoKnNjLT5lcHMp KTsKPiA+ICsgICAgICAgIGlmICghc2MtPmVwcykKPiA+ICsgICAgICAgICAgICByZXR1cm4gQVZF UlJPUihFTk9NRU0pOwo+Cj4gSW4gY2FzZSBvZiBlcnJvciwgc2MtPmVwcyBpcyBOVUxMLCB5ZXQg c2MtPm5iX2VwcyBtYXkgYmUgIT0gMC4gU3R1ZmYKPiBsaWtlIHRoaXMgY2FuIChhbmQgZG9lcykg bGVhZCB0byBjcmFzaGVzLgo+CmFkZGVkICJzbGljZS0+bmJfZXBzID0gMDsiIHRvIGVwc19mcmVl Cgo+Cj4gPiArc3RhdGljIGludCB2dmNfcmVmX2ZyYW1lKFZWQ0ZyYW1lQ29udGV4dCAqZmMsIFZW Q0ZyYW1lICpkc3QsIFZWQ0ZyYW1lCj4gKnNyYykKPgo+IHNyYyBzaG91bGQgYmUgY29uc3QuCj4K ZG9uZQoKPgo+ID4gKwo+ID4gK3N0YXRpYyBhdl9jb2xkIGludCBmcmFtZV9jb250ZXh0X2luaXQo VlZDRnJhbWVDb250ZXh0ICpmYywKPiBBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gPiArewo+ID4g Kwo+ID4gKyAgICBmYy0+YXZjdHggPSBhdl9tZW1kdXAoYXZjdHgsIHNpemVvZigqYXZjdHgpKTsK Pgo+IFdoZW4gSSByZWFkIHRoaXMsIEkgcHJlc3VtZWQgeW91IGFyZSB1c2luZyBtdWx0aXBsZSBB VkNvZGVjQ29udGV4dHMgdG8KPiBzdG9yZSB0aGUgZXZlciBjaGFuZ2luZyBzdGF0ZSBvZiB0aGUg QVZDb2RlY0NvbnRleHQgZmllbGRzIHNpbWlsYXJseSB0bwo+IHVwZGF0ZV9jb250ZXh0X2Zyb21f dGhyZWFkKCkgaW4gcHRocmVhZF9mcmFtZS5jLiBCdXQgaXQgc2VlbXMgeW91IGRvbid0Lgo+IFRo ZXNlIGNvbnRleHRzIGFyZSBvbmx5IHVzZWQgYXMgYSkgbG9nY29udGV4dHMgKHdoZXJlIHRoZSBh Y3R1YWwKPiB1c2VyLWZhY2luZyBBVkNvZGVjQ29udGV4dCBzaG91bGQgYmUgdXNlZCwgc28gdGhh dCB0aGUgdXNlciBjYW4gbWFrZQo+IHNlbnNlIG9mIHRoZSBsb2dtZXNzYWdlcyEpLCBiKSBpbiBm Zl90aHJlYWRfZ2V0X2J1ZmZlcigpIGFuZCBjKSBpbgo+IGV4cG9ydF9mcmFtZV9wYXJhbXMoKSB3 aGVyZSBvbmx5IHNvbWUgYmFzaWMgZmllbGRzCj4gKGRpbWVuc2lvbi1yZWxhdGVkK3BpeF9mbXQp IGlzIHNldC4gUHJlc3VtYWJseSBjKSBpcyBkb25lIGZvciBiKS4KPgpJIHJlbWVtYmVyIGlmIGkg ZGlkIG5vdCB1c2UgYSBsb2NhbCBBVkNvZGVjQ29udGV4dCAgaXQgd291bGQgdHJpZ2dlciBzb21l CmFzc2VydCB3aGVuIHJlc29sdXRpb24gY2hhbmdlZC4KCj4KPiBCdXQgdGhlIHVzZXIgaXMgYWxs b3dlZCB0byBjaGFuZ2UgdGhlIHByb3ZpZGVkIGNhbGxiYWNrcyBpbiB0aGUgbWFzdGVyCj4gY29u dGV4dCBhdCBhbnkgdGltZS4gRS5nLiB0aGUgY2FsbCB0byBmZl90aHJlYWRfZ2V0X2J1ZmZlcigp IGluCj4gdnZjX3JlZnMuYyBjdXJyZW50bHkgdXNlcyB0aGUgVlZDRnJhbWVDb250ZXh0IGFuZCB0 aGVyZWZvcmUgdXNlcyB0aGUKPiBnZXRfYnVmZmVyMiBjYWxsYmFjayBpbiBwbGFjZSBub3cgKGR1 cmluZyBhdl9tZW1kdXAoKSkuIFRoaXMgaXMgd3JvbmcuCj4KVGhpcyB3aWxsIG5vdCBoYXBwZW4u IGF2X21lbWR1cCBvbmx5IGhhcHBlbnMgaW4gdnZjX2RlY29kZV9pbml0LgpOb2JvZHkgd2lsbCBj YWxsIGZmX3RocmVhZF9nZXRfYnVmZmVyIGF0IHRoaXMgdGltZQoKPgo+IEkgdGhpbmsgeW91IGNh biBqdXN0IHJlbW92ZSBWVkNGcmFtZUNvbnRleHQuYXZjdHggYW5kIHVzZSB0aGUKPiB1c2VyLWZh Y2luZyBBVkNvZGVjQ29udGV4dCBpZiB5b3Ugc2V0IHRoZSBBVkZyYW1lIHByb3BlcnRpZXMgdGhh dCBhcmUKPiBub3JtYWxseSBkZXJpdmVkIGZyb20gdGhlIEFWQ29kZWNDb250ZXh0IGRpcmVjdGx5 IG9uIHRoZSBBVkZyYW1lIGJlZm9yZQo+IGZmX3RocmVhZF9nZXRfYnVmZmVyKCkuCgpDb3VsZCB5 b3UgZXhwbGFpbiBtb3JlIGFib3V0IGhvdyB0byBjcmVhdGUgYSB1c2VyLWZhY2luZyAgQVZDb2Rl Y0NvbnRleHQ/Cgo+Cj4gPiArCj4gPiArc3RhdGljIGludCBkZWNvZGVfbmFsX3VuaXQoVlZDQ29u dGV4dCAqcywgVlZDRnJhbWVDb250ZXh0ICpmYywgY29uc3QKPiBIMjY0NU5BTCAqbmFsLCBjb25z dCBDb2RlZEJpdHN0cmVhbVVuaXQgKnVuaXQpCj4gPiArewo+ID4gKyAgICBpbnQgIHJldDsKPiA+ ICsKPiA+ICsgICAgcy0+dGVtcG9yYWxfaWQgICA9IG5hbC0+dGVtcG9yYWxfaWQ7Cj4gPiArCj4g PiArICAgIHN3aXRjaCAodW5pdC0+dHlwZSkgewo+ID4gKyAgICBjYXNlIFZWQ19WUFNfTlVUOgo+ ID4gKyAgICBjYXNlIFZWQ19TUFNfTlVUOgo+ID4gKyAgICBjYXNlIFZWQ19QUFNfTlVUOgo+ID4g KyAgICAgICAgLyogdnBzLCBzcHMsIHNwcyBjYWNoZWQgYnkgcy0+Y2JjICovCj4gPiArICAgICAg ICBicmVhazsKPiA+ICsgICAgY2FzZSBWVkNfVFJBSUxfTlVUOgo+ID4gKyAgICBjYXNlIFZWQ19T VFNBX05VVDoKPiA+ICsgICAgY2FzZSBWVkNfUkFETF9OVVQ6Cj4gPiArICAgIGNhc2UgVlZDX1JB U0xfTlVUOgo+ID4gKyAgICBjYXNlIFZWQ19JRFJfV19SQURMOgo+ID4gKyAgICBjYXNlIFZWQ19J RFJfTl9MUDoKPiA+ICsgICAgY2FzZSBWVkNfQ1JBX05VVDoKPiA+ICsgICAgY2FzZSBWVkNfR0RS X05VVDoKPiA+ICsgICAgICAgIHJldCA9IGRlY29kZV9zbGljZShzLCBmYywgbmFsLCB1bml0KTsK PiA+ICsgICAgICAgIGlmIChyZXQgPCAwKQo+ID4gKyAgICAgICAgICAgIGdvdG8gZmFpbDsKPiA+ ICsgICAgICAgIGJyZWFrOwo+ID4gKyAgICBjYXNlIFZWQ19QUkVGSVhfQVBTX05VVDoKPiA+ICsg ICAgY2FzZSBWVkNfU1VGRklYX0FQU19OVVQ6Cj4gPiArICAgICAgICByZXQgPSBmZl92dmNfZGVj b2RlX2Fwcygmcy0+cHMsIHVuaXQpOwo+ID4gKyAgICAgICAgaWYgKHJldCA8IDApCj4gPiArICAg ICAgICAgICAgZ290byBmYWlsOwo+ID4gKyAgICAgICAgYnJlYWs7Cj4gPiArICAgIGRlZmF1bHQ6 Cj4gPiArICAgICAgICBhdl9sb2cocy0+YXZjdHgsIEFWX0xPR19JTkZPLAo+ID4gKyAgICAgICAg ICAgICAgICJTa2lwcGluZyBOQUwgdW5pdCAlZFxuIiwgdW5pdC0+dHlwZSk7Cj4KPiBUaGlzIHdp bGwgcHJvYmFibHkgYmUgdmVyeSBub2lzeSAoYW5kIHdhcm4gZm9yIGV2ZXJ5IFNFSSkuIEkgZG9u J3QgdGhpbmsKPiBpdCBpcyBldmVuIG5lZWRlZCwgYXMgaDI2NDVfcGFyc2UuYyBhbHJlYWR5IGNv bnRhaW5zIGRlYnVnIGxvZyBtZXNzYWdlcwo+IHRvIGRpc3BsYXkgdGhlIHVuaXQgdHlwZS4KPgpJ dCdzIGNvcGllZCBmcm9tIGhldmNkZWMuIEl0IG1lYW5zIHdlIGRpZCBub3QgaGFuZGxlIHRoZSBu YWwgZGlmZnJlbnQgdGhhbgpoMjY0NV9wYXJzZXIuYyBtZXNzYWdlcwoKQSBmYWlsIHRoYXQgaXMg b25seSAicmV0dXJuIHJldCIgaXMgcG9pbnRsZXNzIChub3Qgb25seSBoZXJlKS4KPgpBdCBzb21l ZGF5IGlmIHdlIG5lZWQgdG8gYWRkIHNvbWUgY2xlYW51cCBjb2RlLiB3ZSBkbyBub3QgbmVlZCB0 byBjaGFuZ2UKYWxsIHJldHVybnMgdG8gZ290by4KCj4KPiA+ICBzdGF0aWMgdm9pZCB2dmNfZGVj b2RlX2ZsdXNoKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKPgo+IFNob3VsZCBhbHNvIGJlIGF2X2Nv bGQKPgpkb25lCgo+Cj4gPiAgewo+ID4gKyAgICBWVkNDb250ZXh0ICpzID0gYXZjdHgtPnByaXZf ZGF0YTsKPiA+ICsgICAgaW50IGdvdF9vdXRwdXQ7Cj4gPiArICAgIEFWRnJhbWUgKm91dHB1dCA9 IGF2X2ZyYW1lX2FsbG9jKCk7Cj4KPiBBbGxvY2F0aW5nIGEgZnJhbWUgZm9yIGZsdXNoaW5nIGlz IGJhZCBlbm91Z2gsIGJ1dCB5b3UgYXJlIG9ubHkgZmx1c2hpbmcKPiBpZiBzYWlkIGFsbG9jYXRp bmcgc3VjY2VlZHMuIElmIGl0IGRvZXMgbm90LCB0aGVuIHdlIG5ldmVyIHdhaXQgZm9yCj4gZnJh bWVzIHdoaWNoIGFyZSBjdXJyZW50bHkgZGVjb2RlZCBieSBvdGhlciB0aHJlYWRzLCBkb24ndCB3 ZT8gU28gdGhlcmUKPiBjYW4gYmUgcmFjZXMgYW5kIGV2ZW4gY3Jhc2hlcyB3aGVuIHRoaXMgZnVu Y3Rpb24gaXMgY2FsbGVkIGZyb20KPiB2dmNfZGVjb2RlX2ZyZWUoKSBhbmQgYWxsb2NhdGlvbi4K PiBJbnN0ZWFkIHlvdSBjb3VsZCBwYXNzIE5VTEwgdG8gd2FpdF9kZWxheWVkX2ZyYW1lKCkgYW5k IG1ha2UgaXQgdW5yZWYKPiB0aGUgZnJhbWVzIChpbnN0ZWFkIG9mIG1vdmluZyB0aGVtKSBpbiBj YXNlIHRoZSBvdXRwdXQgZnJhbWUgaXMgTlVMTC4KPgpkb25lCgo+Cj4gPiArCj4gPiArICAgIGlm IChvdXRwdXQpIHsKPiA+ICsgICAgICAgIHdoaWxlIChzLT5uYl9kZWxheWVkKSB7Cj4gPiArICAg ICAgICAgICAgd2FpdF9kZWxheWVkX2ZyYW1lKHMsIG91dHB1dCwgJmdvdF9vdXRwdXQpOwo+ID4g KyAgICAgICAgICAgIGlmIChnb3Rfb3V0cHV0KSB7Cj4gPiArICAgICAgICAgICAgICAgIGF2X2Zy YW1lX3VucmVmKG91dHB1dCk7Cj4gPiArICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgfQo+ID4g KyAgICAgICAgYXZfZnJhbWVfZnJlZSgmb3V0cHV0KTsKPiA+ICsgICAgfQo+ID4gIH0KPiA+Cj4g PiAgc3RhdGljIGF2X2NvbGQgaW50IHZ2Y19kZWNvZGVfZnJlZShBVkNvZGVjQ29udGV4dCAqYXZj dHgpCj4gPiAgewo+ID4gKyAgICBWVkNDb250ZXh0ICpzID0gYXZjdHgtPnByaXZfZGF0YTsKPiA+ ICsgICAgaW50IGk7Cj4gPiArCj4gPiArICAgIGZmX2Nic19mcmFnbWVudF9mcmVlKCZzLT5jdXJy ZW50X2ZyYW1lKTsKPgo+IElzIGl0IHN1cmUgdGhhdCB0aGUgZnJhZ21lbnQgaXMgbm90IGluIHVz ZSAoZ2l2ZW4gdGhhdCBvdGhlciB0aHJlYWRzIG1heQo+IGJlIHJ1bm5pbmcgbm93IGJlZm9yZSB2 dmNfZGVjb2RlX2ZsdXNoKCkpPwo+CkRvIHlvdSBtZWFuIHRoZSBleGVjdXRvciB0aHJlYWRzPyBJ ZiB0aGV5IHdhbnQgdG8gdXNlIHNvbWUgZGF0YSwgdGhleSB3aWxsCnRha2UgdGhlaXIgb3duIGhp cC4Kc2VlIGZmX3JlZnN0cnVjdF9yZXBsYWNlKCZzcHMtPnIsIHJzcHMpOwoKPgo+ID4gKyAgICB2 dmNfZGVjb2RlX2ZsdXNoKGF2Y3R4KTsKPiA+ICsgICAgZmZfdnZjX2V4ZWN1dG9yX2ZyZWUoJnMt PmV4ZWN1dG9yKTsKPiA+ICsgICAgaWYgKHMtPmZjcykgewo+ID4gKyAgICAgICAgZm9yIChpID0g MDsgaSA8IHMtPm5iX2ZjczsgaSsrKQo+Cj4gZm9yIChpbnQgaSA9IDA7IGlzIGJldHRlciBhcyBp dCBoYXMgc21hbGxlciBzY29wZTsgaW4gdGhpcyBjYXNlLCBpdCBhbHNvCj4gYWxsb3dzIHRvIHNh dmUgYSBsaW5lIG9mIGNvZGUuIFNvbWV0aGluZyBzaW1pbGFyIGlzIHBvc3NpYmxlIGluCj4gZGVj b2RlX25hbF91bml0cygpLCBwbGVhc2UgY2hlY2sgdGhlIG90aGVyIHBhdGNoZXMsIHRvby4KClll YWgsIE1vc3Qgb2YgdGhlIGNvZGUgdXNlcyB0aGUgc21hbGxlc3Qgc2NvcGUuIEJ1dCBzb21lIGNv ZGVzIGFyZSBjb3BpZWQKZnJvbSBoZXZjIG9yIGp1c3QgYmVjYXVzZSBJIG1pc3NlZCB0aGVtLiA6 KQpkb3VibGUgZG91YmxlLWNoZWNrZWQgYW5kIGZpeGVkIGFsbChob3BlIHNvKQoKPgoKCj4gPiAr ICAgICAgICAgICAgZnJhbWVfY29udGV4dF9mcmVlKHMtPmZjcyArIGkpOwo+ID4gKyAgICAgICAg YXZfZnJlZShzLT5mY3MpOwo+ID4gKyAgICB9Cj4gPiArICAgIGZmX3Z2Y19wc191bmluaXQoJnMt PnBzKTsKPiA+ICsgICAgZmZfY2JzX2Nsb3NlKCZzLT5jYmMpOwo+ID4gKwo+ID4gICAgICByZXR1 cm4gMDsKPiA+ICB9Cj4gPgo+ID4gKyNkZWZpbmUgVlZDX01BWF9GUk1BRV9ERUxBWSAxNgo+Cj4g dHlwbwo+CmZpeGVkCgo+Cj4gPiAgc3RhdGljIGF2X2NvbGQgaW50IHZ2Y19kZWNvZGVfaW5pdChB VkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gPiAgewo+ID4gKyAgICBWVkNDb250ZXh0ICpzICAgICAg ID0gYXZjdHgtPnByaXZfZGF0YTsKPiA+ICsgICAgaW50IHJldDsKPiA+ICsKPiA+ICsgICAgcy0+ YXZjdHggPSBhdmN0eDsKPiA+ICsKPiA+ICsgICAgaWYgKGZmX2Nic19pbml0KCZzLT5jYmMsIEFW X0NPREVDX0lEX1ZWQywgYXZjdHgpKQo+ID4gKyAgICAgICAgZ290byBmYWlsOwo+Cj4gRm9yd2Fy ZCB0aGUgZXJyb3IgY29kZS4KPgpkb25lCgo+Cj4gPiArCj4gPiArICAgIHMtPm5iX2ZjcyA9IChh dmN0eC0+ZmxhZ3MgJiBBVl9DT0RFQ19GTEFHX0xPV19ERUxBWSkgPyAxIDoKPiBGRk1JTihhdl9j cHVfY291bnQoKSwgVlZDX01BWF9GUk1BRV9ERUxBWSk7Cj4KPiBUaGlzIG1heSBldmFsdWF0ZSBh dl9jcHVfY291bnQoKSBtdWx0aXBsZSB0aW1lcy4gRnVydGhlcm1vcmUgSSBkb24ndAo+IGtub3cg d2h5IHRoaXMgZGVmaW5lIGlzIHVzZWQgaGVyZSBhdCBhbGw6IFdpdGggZnJhbWUgdGhyZWFkaW5n LCB0aGUKPiBudW1iZXIgb2YgZnJhbWUgdGhyZWFkcyBpcyBub3QgbGltaXRlZCBieSB0aGUgZGVs YXkvbnVtYmVyIG9mIHJlb3JkZXJpbmcKPiBmcmFtZXMgYXQgYWxsICh3ZSBldmVuIGhhdmUgZnJh bWUtdGhyZWFkaW5nIGZvciBkZWNvZGVycyB3aXRob3V0Cj4gZnJhbWUtcmVvcmRlcmluZyBhdCBh bGwpLgo+CiB2dmNfZGVjb2RlX2ZyYW1lIG9ubHkgYWxsb3dzIDEgZnJhbWUgaW4gMSBmcmFtZSBv dXQuIFdlIGNhbiByZW1vdmUgdGhlCmRlbGF5IGlmIHdlIHN3aXRjaCB0byBGRkNvZGVjLT5yZWNl aXZlX2ZyYW1lLAoKPgo+IEJ1dCB3b3JzdCBvZiB0aGlzIGlzIHRoYXQgeW91IGRvIG5vdCBjaGVj ayBhdmN0eC0+dGhyZWFkX2NvdW50IGF0IGFsbC4KPgp3ZSBkbyBub3QgdXNlIGF2Y3R4LT50aHJl YWRfY291bnQuICB3ZSB1c2UgdGhlIGV4ZWN1dG9yIHRvIG1hbmFnZSB0aHJlYWRzLgoKPgo+ID4g KyAgICBzLT5mY3MgPSBhdl9jYWxsb2Mocy0+bmJfZmNzLCBzaXplb2YoKnMtPmZjcykpOwo+ID4g KyAgICBpZiAoIXMtPmZjcykKPiA+ICsgICAgICAgIGdvdG8gZmFpbDsKPiA+ICsKPiA+ICsgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBzLT5uYl9mY3M7IGkrKykgewo+ID4gKyAgICAgICAgVlZDRnJh bWVDb250ZXh0ICpmYyA9IHMtPmZjcyArIGk7Cj4gPiArICAgICAgICByZXQgPSBmcmFtZV9jb250 ZXh0X2luaXQoZmMsIGF2Y3R4KTsKPiA+ICsgICAgICAgIGlmIChyZXQgPCAwKQo+ID4gKyAgICAg ICAgICAgIGdvdG8gZmFpbDsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICBzLT5leGVjdXRvciA9 IGZmX3Z2Y19leGVjdXRvcl9hbGxvYyhzLCBzLT5uYl9mY3MpOwo+ID4gKyAgICBpZiAoIXMtPmV4 ZWN1dG9yKQo+ID4gKyAgICAgICAgZ290byBmYWlsOwo+ID4gKwo+ID4gKyAgICBzLT5lb3MgPSAx Owo+ID4gKyAgICBHRFJfU0VUX1JFQ09WRVJFRChzKTsKPiA+ICsgICAgbWVtc2V0KCZmZl92dmNf ZGVmYXVsdF9zY2FsZV9tLCAxNiwgc2l6ZW9mKGZmX3Z2Y19kZWZhdWx0X3NjYWxlX20pKTsKPgo+ IFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBvbmNlIChpLmUuIHByb3RlY3RlZCBieSBhbiBBVk9uY2Up IGFuZCBub3QgZXZlcnkKPiB0aW1lIGEgZGVjb2RlciBpcyBzZXQgdXAuIE90aGVyd2lzZSB0aGVy ZSBtaWdodCBiZSBkYXRhIHJhY2VzLgo+Ckl0J3Mgbm90IHJlYWQgYW5kIHNldCwgaXQgd2lsbCBu byBkYXRhIHJhY2VzOiksIEkgY2FuIGNoYW5nZSBpdCB0byAgQVZPbmNlCi4KCj4KPiA+ICsKPiA+ ICAgICAgcmV0dXJuIDA7Cj4gPiArCj4gPiArZmFpbDoKPiA+ICsgICAgdnZjX2RlY29kZV9mcmVl KGF2Y3R4KTsKPgo+IFVubmVjZXNzYXJ5LCBhcyB0aGlzIGRlY29kZXIgaGFzIHRoZSBGRl9DT0RF Q19DQVBfSU5JVF9DTEVBTlVQIHNldC4gSW4KPiBmYWN0LCBnaXZlbiB0aGF0IHZ2Y19kZWNvZGVf ZnJlZSgpIHVzZXMgYXZfZnJlZSgpIGluc3RlYWQgb2YgYXZfZnJlZXAoKQo+IGZvciBzLT5mY3Ms IGNhbGxpbmcgdnZjX2RlY29kZV9mcmVlKCkgaGVyZSBjYW4gbGVhZCB0byBhIHVzZS1hZnRlci1m cmVlCj4gKG5hbWVseSB3aGVuIHZ2Y19kZWNvZGVfZnJlZSgpIGlzIGNhbGxlZCBnZW5lcmljYWxs eSBsYXRlcikuCj4KZG9uZQoKPgo+ID4gKyAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ID4g IH0KPiA+Cj4gPiAgY29uc3QgRkZDb2RlYyBmZl92dmNfZGVjb2RlciA9IHsKPgo+IF9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZmZtcGVnLWRldmVsIG1h aWxpbmcgbGlzdAo+IGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCj4gaHR0cHM6Ly9mZm1wZWcub3Jn L21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCj4KPiBUbyB1bnN1YnNjcmliZSwgdmlzaXQg bGluayBhYm92ZSwgb3IgZW1haWwKPiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdp dGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVs QGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRl dmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRl dmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K