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 196D1484A1 for ; Fri, 5 Jan 2024 00:31:16 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E3DC468CC16; Fri, 5 Jan 2024 02:31:13 +0200 (EET) Received: from mail-pg1-f170.google.com (mail-pg1-f170.google.com [209.85.215.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2277768CBD9 for ; Fri, 5 Jan 2024 02:31:07 +0200 (EET) Received: by mail-pg1-f170.google.com with SMTP id 41be03b00d2f7-53fbf2c42bfso761086a12.3 for ; Thu, 04 Jan 2024 16:31:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1704414664; x=1705019464; darn=ffmpeg.org; h=content-transfer-encoding:in-reply-to:autocrypt:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=vIOgbn807t1oyA5k+5pe6IX+ptrWBLRzeaNaCvc+PAw=; b=fd376cyhrcWdvi+xYvl6G6Yo6fWFI2Z5m/DXH40ZBdz0lCmLtlu9xvF3aFsWz5dIf/ wnC/m9jDFnjzkoSRjK/0vDTL+I7XvlYJX11kAOdO58NDdvjXR36TNK7E5NI6+gCHs9t+ Ief+f5j66LKrPetQXuPLWukUVo0SRncCMV5QyTV2MvPUrlEg6XuAhQcq7HVJTRoGoa3V dVHLdGBq7pW3dCrEje1C/CvWb88yYTorLsQdyfazonkFYUMIyRAVY26bvVgwUPPqYEBf m9Un3cy+iSLakuGCVnYTi8cDDoE/WsHv4jmJn1rUZltFSH3ZeAw1HtCinrg0LGFbaquw ZJtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704414664; x=1705019464; h=content-transfer-encoding:in-reply-to:autocrypt:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=vIOgbn807t1oyA5k+5pe6IX+ptrWBLRzeaNaCvc+PAw=; b=qD1ZFvaFXbmQnc3pqBZlnNyJWyRbAjV/ABJJ7DC3Dy9oZLhIJ6ojlzTdIPbSuXfQbc V0uABBcu6+C9M9JxdHVO6x9sq6YY3g7UEmJkdo9H14BlUxkbpnAPz1hhq5d6fd95lAdo aeGywPuN1wI8MXT7Li6U8hq0F3YCr5WoXNZ2aGG2xb7rigpzqr6bUck92FKRMQwT+Bpi KDJdonSnJ+cBQOEs9djsQ+7hDMJbNCDdZOvgmM+UI2N2CPPaHO3NDvSQMAdyAYqgPoaK sCme44rp6hF4z2ruipMqcV3mmmw0dJndJCaAng0NHTuyWaIh/G6zfc37wUVSdbjY/YdO ElYw== X-Gm-Message-State: AOJu0YzHt/oXtCpq/pqUwdH3CXS4dSSRMW0g5Seq+N6livP4tBYkYzJJ YqZz9GHMnowA6hPtSsajJ90zCRG2cyc= X-Google-Smtp-Source: AGHT+IHA/eAY9Qhl30XSEZajD5CQ9MYfi0vYXEQ+ZjPUYHYshjkLpWDgSeKY5TP05qIWo5/JwzGSIw== X-Received: by 2002:a05:6a20:2586:b0:199:3309:6fc8 with SMTP id k6-20020a056a20258600b0019933096fc8mr415135pzd.5.1704414663228; Thu, 04 Jan 2024 16:31:03 -0800 (PST) Received: from [192.168.0.13] (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id i9-20020a17090a650900b0028c361b5c7csm300708pjj.23.2024.01.04.16.31.02 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 04 Jan 2024 16:31:02 -0800 (PST) Message-ID: <724da457-774e-4985-a3c1-9708454d6290@gmail.com> Date: Thu, 4 Jan 2024 21:31:04 -0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20231103095720.32426-1-thomas.ff@spin-digital.com> <20231103095720.32426-3-thomas.ff@spin-digital.com> From: James Almer Autocrypt: addr=jamrial@gmail.com; keydata= xsBNBFjZtqABCADLW+vdEoZaJZDsIO6geYFTOcn1unsEHefj9zn+3oTHlDFFzO47mzHsSfbK 9JE2xpOJEVnC8FAF5Sayi/pVwV+mtQUV3n5dgVeVBYF9GUQwOGFCpK8X54RRqhkgknbunOEE 0CtgAJgmpFmmmHgq02GvEspx1h/rh4apqwQR6QX4Favb+x9+i9ytVpwVcBX94vo2toyP7h/K BWfadQmb8ltgE1kshfg+SQs/H5bTV5Z1DuEASf02ZL/1qYB/sdTgWPLv9XMUHHsRFmMY8TMx wJSkP+Af3AiYQPJYz1B1D4tt98T/NoiVdin10zATakPjV8hXaobuRmxgakkUASXudydDABEB AAHNH0phbWVzIEFsbWVyIDxqYW1yaWFsQGdtYWlsLmNvbT7CwJIEEwEIADwCGwMGCwkIBwMC BhUIAgkKCwQWAgMBAh4BAheAFiEEd1EujP2UoWlX5pp6FGMBrXN2WeAFAmJoLUUCGQEACgkQ FGMBrXN2WeAFVQf9GtGhniRs1PzNUOgJktCnv6j4BbLieaIPYPEFXKDHOgjqQE2zVMYXnoXl Jam928ii902a8OY06r9ywn/R8ApD1/3NY/v64O71CY9scz5XyH2au8wIZ6HwFy3/f7sqjdGD uctY8Qs7rjT7NkoC5lmgMu2v2k03dGtM9AAf5AK5gU+H0EUw7vmKKiXzUqt5kvBuf4CEwXvH AQT1SMJ52rIlDWB7FQFyZeUbOAK2IgY/KNedfK6nsgd/eQVnlofPd2XoddE7kP6iys7jJefw DD3g3rZyDTq7in5dyk5glaNpWZpbHGBs+9SCYLnfQ8XvWqPFOD+gj0plamKANgOvavKTxM7A TQRY2bagAQgA69YtILj8kYxmqPr/M8+MXT7wVoOWVW9lvSmPquCELaDy/NIS7D06VC5EuE/6 JlJXZMTn37NLlyWhzwOgXuXw5w2tyoQQBuvqGiXJijuXwXH7HKdzrc6rpYtAqt5w05hzNrFS KrS0izG64VpWrfproy3BsL+8TBm9brLhhNPynVRqVukbbGzlATTzNQGZ14TTi2/dL6DkMQnM qn4jX9UEe4GdGQBP50bUJSSmeiIkyNLWA+znuN2PZEz930ZwNrF9GtDVw7mzcmpCZ7spldE2 tutbpy9D1bIqxyqBrYDSezyzL2adR1qgHyOTMCHg2AYNkrIQHrSyJxKTpZ1/hqOp8wARAQAB wsBfBBgBAgAJBQJY2bagAhsMAAoJEBRjAa1zdlnghekH/0Yb0iYJ74oID2f/Fj+AJKS2ekQF P2xOr8lpGzgp/+yWUvPtqbX0A33anBJdYwxaAC0NataX3tfZ+oJkzXqfmqhIHMPYHdZesJA2 Bk9hU/33mDl5s5U66/z0uelWzwKVHoQ2O6or4+qF3HJFSJLCe9uvWJ3zXf9F342Ftj73sfx+ 3xkw/IXsN1RqbYqDlzpoEQ99SIEfY/8Jjwnd3sIPfqkuyeaYfe6GJDqKawdCEP1oRRlbXEAp TJgYz8r3nPhGv9cdHNDCk44ISbsqVuxIEnLqi4fTPZaGupiQhT+srl268TTAp2TQW7+6Ce/b NPQorMquzS/LZoyALpmsYi/miMc= In-Reply-To: <20231103095720.32426-3-thomas.ff@spin-digital.com> Subject: Re: [FFmpeg-devel] [PATCH v1 2/5] avformat: add muxer support for H266/VVC 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: T24gMTEvMy8yMDIzIDY6NTcgQU0sIFRob21hcyBTaWVkZWwgd3JvdGU6Cj4gQWRkIG11eGVyIGZv ciB2dmNjIGJ5dGUgc3RyZWFtIGZvcm1hdC4KPiBBZGQgQVZfQ09ERUNfSURfVlZDIHRvIGZmX21w NF9vYmpfdHlwZS4KPiBBZGQgQVZfQ09ERUNfSURfVlZDIHRvIElTTyBNZWRpYSBjb2RlYyAoVnZj Q29uZmlndXJhdGlvbkJveCB2dmkxLAo+IHZ2YzEgZGVmaW5lZCBpbiBJU08vSUVDIDE0NDk2LTE1 OjIwMjEpLgo+IEFkZCBWdmNDb25maWd1cmF0aW9uQm94IHZ2Y0Mgd2hpY2ggZXh0ZW5kcyBGdWxs Qm94IHR5cGUgaW4KPiBJU08vSUVDIDE0NDk2LTE1OjIwMjEuCj4gQWRkIGZmX3Z2Y19tdXhlciB0 byBSQVcgbXV4ZXJzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFRob21hcyBTaWVkZWwgPHRob21hcy5m ZkBzcGluLWRpZ2l0YWwuY29tPgo+IC0tLQo+ICAgbGliYXZmb3JtYXQvTWFrZWZpbGUgICAgfCAg IDYgKy0KPiAgIGxpYmF2Zm9ybWF0L2lzb20uYyAgICAgIHwgICAxICsKPiAgIGxpYmF2Zm9ybWF0 L2lzb21fdGFncy5jIHwgICAzICsKPiAgIGxpYmF2Zm9ybWF0L21vdi5jICAgICAgIHwgICA2ICsK PiAgIGxpYmF2Zm9ybWF0L21vdmVuYy5jICAgIHwgIDQxICstCj4gICBsaWJhdmZvcm1hdC92dmMu YyAgICAgICB8IDk5OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g ICBsaWJhdmZvcm1hdC92dmMuaCAgICAgICB8ICA5OSArKysrCj4gICA3IGZpbGVzIGNoYW5nZWQs IDExNTAgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWJhdmZvcm1hdC92dmMuYwo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L3Z2 Yy5oCj4gCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlIGIvbGliYXZmb3JtYXQv TWFrZWZpbGUKPiBpbmRleCAzMjkwNTVjY2ZkLi41OTVmNmJkZjA4IDEwMDY0NAo+IC0tLSBhL2xp YmF2Zm9ybWF0L01ha2VmaWxlCj4gKysrIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKPiBAQCAtMzQx LDcgKzM0MSw3IEBAIE9CSlMtJChDT05GSUdfTUFUUk9TS0FfREVNVVhFUikgICAgICAgICAgKz0g bWF0cm9za2FkZWMubyBtYXRyb3NrYS5vICBcCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9nZ3BhcnNldm9yYmlzLm8gdm9yYmlzY29tbWVudC5vIFwKPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXRwYWxldHRlLm8g cmVwbGF5Z2Fpbi5vIGRvdmlfaXNvbS5vCj4gICBPQkpTLSQoQ09ORklHX01BVFJPU0tBX01VWEVS KSAgICAgICAgICAgICs9IG1hdHJvc2thZW5jLm8gbWF0cm9za2EubyBcCj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXYxLm8gYXZjLm8gaGV2Yy5vIFwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdjEubyBhdmMubyBo ZXZjLm8gdnZjLm9cCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZsYWNlbmNfaGVhZGVyLm8gYXZsYW5ndWFnZS5vIFwKPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9yYmlzY29tbWVudC5vIHd2Lm8gZG92aV9pc29t Lm8KPiAgIE9CSlMtJChDT05GSUdfTUNBX0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gbWNhLm8K PiBAQCAtMzYzLDcgKzM2Myw3IEBAIE9CSlMtJChDT05GSUdfTU9EU19ERU1VWEVSKSAgICAgICAg ICAgICAgKz0gbW9kcy5vCj4gICBPQkpTLSQoQ09ORklHX01PRkxFWF9ERU1VWEVSKSAgICAgICAg ICAgICs9IG1vZmxleC5vCj4gICBPQkpTLSQoQ09ORklHX01PVl9ERU1VWEVSKSAgICAgICAgICAg ICAgICs9IG1vdi5vIG1vdl9jaGFuLm8gbW92X2VzZHMubyBcCj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF0cGFsZXR0ZS5vIHJlcGxheWdhaW4ubyBkb3Zp X2lzb20ubwo+IC1PQkpTLSQoQ09ORklHX01PVl9NVVhFUikgICAgICAgICAgICAgICAgICs9IG1v dmVuYy5vIGF2MS5vIGF2Yy5vIGhldmMubyB2cGNjLm8gXAo+ICtPQkpTLSQoQ09ORklHX01PVl9N VVhFUikgICAgICAgICAgICAgICAgICs9IG1vdmVuYy5vIGF2MS5vIGF2Yy5vIGhldmMubyB2dmMu byB2cGNjLm8gXAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtb3ZlbmNoaW50Lm8gbW92X2NoYW4ubyBydHAubyBcCj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVuY2NlbmMubyBtb3ZlbmNfdHRtbC5vIHJhd3V0 aWxzLm8gXAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk b3ZpX2lzb20ubyBldmMubwo+IEBAIC01MTYsNyArNTE2LDcgQEAgT0JKUy0kKENPTkZJR19SVFBf TVVYRVIpICAgICAgICAgICAgICAgICArPSBydHAubyAgICAgICAgIFwKPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRwZW5jX3ZwOC5vICBcCj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0cGVuY192cDkubyAgICAg ICAgICAgICAgICBcCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJ0cGVuY194aXBoLm8gXAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGF2Yy5vIGhldmMubwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGF2Yy5vIGhldmMubyB2dmMubwo+ICAgT0JKUy0kKENPTkZJR19SVFNQX0RF TVVYRVIpICAgICAgICAgICAgICArPSBydHNwLm8gcnRzcGRlYy5vIGh0dHBhdXRoLm8gXAo+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxkZWNvZGUubwo+ ICAgT0JKUy0kKENPTkZJR19SVFNQX01VWEVSKSAgICAgICAgICAgICAgICArPSBydHNwLm8gcnRz cGVuYy5vIGh0dHBhdXRoLm8gXAo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9pc29tLmMgYi9s aWJhdmZvcm1hdC9pc29tLmMKPiBpbmRleCA2ZDAxOTg4MWU1Li45ZmJjY2Q0NDM3IDEwMDY0NAo+ IC0tLSBhL2xpYmF2Zm9ybWF0L2lzb20uYwo+ICsrKyBiL2xpYmF2Zm9ybWF0L2lzb20uYwo+IEBA IC0zNiw2ICszNiw3IEBAIGNvbnN0IEFWQ29kZWNUYWcgZmZfbXA0X29ial90eXBlW10gPSB7Cj4g ICAgICAgeyBBVl9DT0RFQ19JRF9NUEVHNCAgICAgICAsIDB4MjAgfSwKPiAgICAgICB7IEFWX0NP REVDX0lEX0gyNjQgICAgICAgICwgMHgyMSB9LAo+ICAgICAgIHsgQVZfQ09ERUNfSURfSEVWQyAg ICAgICAgLCAweDIzIH0sCj4gKyAgICB7IEFWX0NPREVDX0lEX1ZWQyAgICAgICAgICwgMHgzMyB9 LAo+ICAgICAgIHsgQVZfQ09ERUNfSURfQUFDICAgICAgICAgLCAweDQwIH0sCj4gICAgICAgeyBB Vl9DT0RFQ19JRF9NUDRBTFMgICAgICAsIDB4NDAgfSwgLyogMTQ0OTYtMyBBTFMgKi8KPiAgICAg ICB7IEFWX0NPREVDX0lEX01QRUcyVklERU8gICwgMHg2MSB9LCAvKiBNUEVHLTIgTWFpbiAqLwo+ IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9pc29tX3RhZ3MuYyBiL2xpYmF2Zm9ybWF0L2lzb21f dGFncy5jCj4gaW5kZXggYTU3NWI3YzE2MC4uNzA1ODExZTk1MCAxMDA2NDQKPiAtLS0gYS9saWJh dmZvcm1hdC9pc29tX3RhZ3MuYwo+ICsrKyBiL2xpYmF2Zm9ybWF0L2lzb21fdGFncy5jCj4gQEAg LTEyMyw2ICsxMjMsOSBAQCBjb25zdCBBVkNvZGVjVGFnIGZmX2NvZGVjX21vdnZpZGVvX3RhZ3Nb XSA9IHsKPiAgICAgICB7IEFWX0NPREVDX0lEX0hFVkMsIE1LVEFHKCdkJywgJ3YnLCAnaCcsICdl JykgfSwgLyogSEVWQy1iYXNlZCBEb2xieSBWaXNpb24gZGVyaXZlZCBmcm9tIGhldjEgKi8KPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog ZHZoMSBpcyBoYW5kbGVkIHdpdGhpbiBtb3YuYyAqLwo+ICAgCj4gKyAgICB7IEFWX0NPREVDX0lE X1ZWQywgTUtUQUcoJ3YnLCAndicsICdpJywgJzEnKSB9LCAgLyogVlZDL0guMjY2IHdoaWNoIGlu ZGljYXRlcyBwYXJhbWV0ZXIgc2V0cyBtYXkgYmUgaW4gRVMgKi8KPiArICAgIHsgQVZfQ09ERUNf SURfVlZDLCBNS1RBRygndicsICd2JywgJ2MnLCAnMScpIH0sICAvKiBWVkMvSC4yNjYgd2hpY2gg aW5kaWNhdGVzIHBhcmFtZXRlciBzaGFsbCBub3QgYmUgaW4gRVMgKi8KPiArCj4gICAgICAgeyBB Vl9DT0RFQ19JRF9IMjY0LCBNS1RBRygnYScsICd2JywgJ2MnLCAnMScpIH0sIC8qIEFWQy0xL0gu MjY0ICovCj4gICAgICAgeyBBVl9DT0RFQ19JRF9IMjY0LCBNS1RBRygnYScsICd2JywgJ2MnLCAn MicpIH0sCj4gICAgICAgeyBBVl9DT0RFQ19JRF9IMjY0LCBNS1RBRygnYScsICd2JywgJ2MnLCAn MycpIH0sCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L21vdi5jIGIvbGliYXZmb3JtYXQvbW92 LmMKPiBpbmRleCBlOGVmY2NmNmViLi4xMWI0M2FjMTM1IDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9y bWF0L21vdi5jCj4gKysrIGIvbGliYXZmb3JtYXQvbW92LmMKPiBAQCAtMjExNyw2ICsyMTE3LDEx IEBAIHN0YXRpYyBpbnQgbW92X3JlYWRfZ2xibChNT1ZDb250ZXh0ICpjLCBBVklPQ29udGV4dCAq cGIsIE1PVkF0b20gYXRvbSkKPiAgICAgICBpZiAoKHVpbnQ2NF90KWF0b20uc2l6ZSA+ICgxPDwz MCkpCj4gICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICAgCj4gKyAgICBp ZiAoYXRvbS50eXBlID09IE1LVEFHKCd2JywndicsJ2MnLCdDJykpIHsKPiArICAgICAgICBhdmlv X3JiMzIocGIpOwoKYXZpb19za2lwKHBiLCA0KTsKCj4gKyAgICAgICAgYXRvbS5zaXplIC09IDQ7 Cj4gKyAgICB9Cj4gKwo+ICAgICAgIGlmIChhdG9tLnNpemUgPj0gMTApIHsKPiAgICAgICAgICAg Ly8gQnJva2VuIGZpbGVzIGNyZWF0ZWQgYnkgbGVnYWN5IHZlcnNpb25zIG9mIGxpYmF2Zm9ybWF0 IHdpbGwKPiAgICAgICAgICAgLy8gd3JhcCBhIHdob2xlIGZpZWwgYXRvbSBpbnNpZGUgb2YgYSBn bGJsIGF0b20uCj4gQEAgLTc5MjEsNiArNzkyNiw3IEBAIHN0YXRpYyBjb25zdCBNT1ZQYXJzZVRh YmxlRW50cnkgbW92X2RlZmF1bHRfcGFyc2VfdGFibGVbXSA9IHsKPiAgIHsgTUtUQUcoJ3MnLCdn JywncCcsJ2QnKSwgbW92X3JlYWRfc2dwZCB9LAo+ICAgeyBNS1RBRygncycsJ2InLCdnJywncCcp LCBtb3ZfcmVhZF9zYmdwIH0sCj4gICB7IE1LVEFHKCdoJywndicsJ2MnLCdDJyksIG1vdl9yZWFk X2dsYmwgfSwKPiAreyBNS1RBRygndicsJ3YnLCdjJywnQycpLCBtb3ZfcmVhZF9nbGJsIH0sCj4g ICB7IE1LVEFHKCd1JywndScsJ2knLCdkJyksIG1vdl9yZWFkX3V1aWQgfSwKPiAgIHsgTUtUQUco J0MnLCdpJywnbicsIDB4OGUpLCBtb3ZfcmVhZF90YXJnYV95MjE2IH0sCj4gICB7IE1LVEFHKCdm JywncicsJ2UnLCdlJyksIG1vdl9yZWFkX2ZyZWUgfSwKPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3Jt YXQvbW92ZW5jLmMgYi9saWJhdmZvcm1hdC9tb3ZlbmMuYwo+IGluZGV4IGUzOWYxYWM5ODcuLjA5 M2EwNGQwYzIgMTAwNjQ0Cj4gLS0tIGEvbGliYXZmb3JtYXQvbW92ZW5jLmMKPiArKysgYi9saWJh dmZvcm1hdC9tb3ZlbmMuYwo+IEBAIC02OCw2ICs2OCw3IEBACj4gICAjaW5jbHVkZSAidHRtbGVu Yy5oIgo+ICAgI2luY2x1ZGUgInZlcnNpb24uaCIKPiAgICNpbmNsdWRlICJ2cGNjLmgiCj4gKyNp bmNsdWRlICJ2dmMuaCIKPiAgIAo+ICAgc3RhdGljIGNvbnN0IEFWT3B0aW9uIG9wdGlvbnNbXSA9 IHsKPiAgICAgICB7ICJtb3ZmbGFncyIsICJNT1YgbXV4ZXIgZmxhZ3MiLCBvZmZzZXRvZihNT1ZN dXhDb250ZXh0LCBmbGFncyksIEFWX09QVF9UWVBFX0ZMQUdTLCB7Lmk2NCA9IDB9LCBJTlRfTUlO LCBJTlRfTUFYLCBBVl9PUFRfRkxBR19FTkNPRElOR19QQVJBTSwgIm1vdmZsYWdzIiB9LAo+IEBA IC0xNDczLDYgKzE0NzQsMjMgQEAgc3RhdGljIGludCBtb3Zfd3JpdGVfZXZjY190YWcoQVZJT0Nv bnRleHQgKnBiLCBNT1ZUcmFjayAqdHJhY2spCj4gICAgICAgcmV0dXJuIHVwZGF0ZV9zaXplKHBi LCBwb3MpOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyBpbnQgbW92X3dyaXRlX3Z2Y2NfdGFnKEFWSU9D b250ZXh0ICpwYiwgTU9WVHJhY2sgKnRyYWNrKQo+ICt7Cj4gKyAgICBpbnQ2NF90IHBvcyA9IGF2 aW9fdGVsbChwYik7Cj4gKwo+ICsgICAgYXZpb193YjMyKHBiLCAwKTsKPiArICAgIGZmaW9fd2Zv dXJjYyhwYiwgInZ2Y0MiKTsKPiArCj4gKyAgICBhdmlvX3c4ICAocGIsIDApOyAvKiB2ZXJzaW9u ICovCj4gKyAgICBhdmlvX3diMjQocGIsIDApOyAvKiBmbGFncyAqLwoKSXMgaXQgcmVhbGx5IGEg ZnVsbGJveD8gSSBmaW5kIGl0IG9kZCBjb25zaWRlcmluZyBoMjY0IGFuZCBoMjY1IGRvbid0LgoK PiArCj4gKyAgICBpZiAodHJhY2stPnRhZyA9PSBNS1RBRygndicsJ3YnLCdjJywnMScpKQo+ICsg ICAgICAgIGZmX2lzb21fd3JpdGVfdnZjYyhwYiwgdHJhY2stPnZvc19kYXRhLCB0cmFjay0+dm9z X2xlbiwgMSk7Cj4gKyAgICBlbHNlCj4gKyAgICAgICAgZmZfaXNvbV93cml0ZV92dmNjKHBiLCB0 cmFjay0+dm9zX2RhdGEsIHRyYWNrLT52b3NfbGVuLCAwKTsKPiArICAgIHJldHVybiB1cGRhdGVf c2l6ZShwYiwgcG9zKTsKPiArfQo+ICsKPiAgIC8qIGFsc28gdXNlZCBieSBhbGwgYXZpZCBjb2Rl Y3MgKGR2LCBpbXgsIG1lcmlkaWVuKSBhbmQgdGhlaXIgdmFyaWFudHMgKi8KPiAgIHN0YXRpYyBp bnQgbW92X3dyaXRlX2F2aWRfdGFnKEFWSU9Db250ZXh0ICpwYiwgTU9WVHJhY2sgKnRyYWNrKQo+ ICAgewo+IEBAIC0yMzgyLDYgKzI0MDAsOCBAQCBzdGF0aWMgaW50IG1vdl93cml0ZV92aWRlb190 YWcoQVZGb3JtYXRDb250ZXh0ICpzLCBBVklPQ29udGV4dCAqcGIsIE1PVk11eENvbnRleAo+ICAg ICAgICAgICBhdmlkID0gMTsKPiAgICAgICB9IGVsc2UgaWYgKHRyYWNrLT5wYXItPmNvZGVjX2lk ID09IEFWX0NPREVDX0lEX0hFVkMpCj4gICAgICAgICAgIG1vdl93cml0ZV9odmNjX3RhZyhwYiwg dHJhY2spOwo+ICsgICAgZWxzZSBpZiAodHJhY2stPnBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNf SURfVlZDKQo+ICsgICAgICAgIG1vdl93cml0ZV92dmNjX3RhZyhwYiwgdHJhY2spOwo+ICAgICAg IGVsc2UgaWYgKHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjQgJiYgIVRB R19JU19BVkNJKHRyYWNrLT50YWcpKSB7Cj4gICAgICAgICAgIG1vdl93cml0ZV9hdmNjX3RhZyhw YiwgdHJhY2spOwo+ICAgICAgICAgICBpZiAodHJhY2stPm1vZGUgPT0gTU9ERV9JUE9EKQo+IEBA IC02MTcwLDYgKzYxOTAsNyBAQCBpbnQgZmZfbW92X3dyaXRlX3BhY2tldChBVkZvcm1hdENvbnRl eHQgKnMsIEFWUGFja2V0ICpwa3QpCj4gICAgICAgaWYgKChwYXItPmNvZGVjX2lkID09IEFWX0NP REVDX0lEX0ROWEhEIHx8Cj4gICAgICAgICAgICBwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lE X0gyNjQgfHwKPiAgICAgICAgICAgIHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSEVWQyB8 fAo+ICsgICAgICAgICBwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX1ZWQyB8fAo+ICAgICAg ICAgICAgcGFyLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9WUDkgfHwKPiAgICAgICAgICAgIHBh ci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfRVZDIHx8Cj4gICAgICAgICAgICBwYXItPmNvZGVj X2lkID09IEFWX0NPREVDX0lEX1RSVUVIRCkgJiYgIXRyay0+dm9zX2xlbiAmJgo+IEBAIC02MjM1 LDYgKzYyNTYsMTggQEAgaW50IGZmX21vdl93cml0ZV9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpz LCBBVlBhY2tldCAqcGt0KQo+ICAgICAgICAgICAgICAgICAgIHNpemUgPSBmZl9oZXZjX2FubmV4 YjJtcDQocGIsIHBrdC0+ZGF0YSwgcGt0LT5zaXplLCAwLCBOVUxMKTsKPiAgICAgICAgICAgICAg IH0KPiAgICAgICAgICAgfQo+ICsgICAgfSBlbHNlIGlmIChwYXItPmNvZGVjX2lkID09IEFWX0NP REVDX0lEX1ZWQyAmJiB0cmstPnZvc19sZW4gPiA2ICYmCj4gKyAgICAgICAgICAgICAoQVZfUkIy NCh0cmstPnZvc19kYXRhKSA9PSAxIHx8IEFWX1JCMzIodHJrLT52b3NfZGF0YSkgPT0gMSkpIHsK PiArICAgICAgLyogZXh0cmFkYXRhIGlzIEFubmV4IEIsIGFzc3VtZSB0aGUgYml0c3RyZWFtIGlz IHRvbyBhbmQgY29udmVydCBpdCAqLwo+ICsgICAgICBpZiAodHJrLT5oaW50X3RyYWNrID49IDAg JiYgdHJrLT5oaW50X3RyYWNrIDwgbW92LT5uYl9zdHJlYW1zKSB7Cj4gKyAgICAgICAgICAgIHJl dCA9IGZmX2gyNjZfYW5uZXhiMm1wNF9idWYocGt0LT5kYXRhLCAmcmVmb3JtYXR0ZWRfZGF0YSwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2l6ZSwgMCwgTlVM TCk7Cj4gKyAgICAgICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICAgICAgcmV0dXJu IHJldDsKPiArICAgICAgICAgICAgYXZpb193cml0ZShwYiwgcmVmb3JtYXR0ZWRfZGF0YSwgc2l6 ZSk7Cj4gKyAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICBzaXplID0gZmZfaDI2Nl9hbm5leGIy bXA0KHBiLCBwa3QtPmRhdGEsIHBrdC0+c2l6ZSwgMCwgTlVMTCk7Cj4gKyAgICAgIH0KPiAgICAg ICB9IGVsc2UgaWYgKHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfQVYxKSB7Cj4gICAgICAg ICAgIGlmICh0cmstPmhpbnRfdHJhY2sgPj0gMCAmJiB0cmstPmhpbnRfdHJhY2sgPCBtb3YtPm5i X3N0cmVhbXMpIHsKPiAgICAgICAgICAgICAgIHJldCA9IGZmX2F2MV9maWx0ZXJfb2J1c19idWYo cGt0LT5kYXRhLCAmcmVmb3JtYXR0ZWRfZGF0YSwKPiBAQCAtNjI4MSw2ICs2MzE0LDkgQEAgaW50 IGZmX21vdl93cml0ZV9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0KQo+ ICAgICAgICAgICAgICAgfSBlbHNlIGlmKHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSEVW QyAmJiBwYXItPmV4dHJhZGF0YV9zaXplID4gMjEpIHsKPiAgICAgICAgICAgICAgICAgICBpbnQg bmFsX3NpemVfbGVuZ3RoID0gKHBhci0+ZXh0cmFkYXRhWzIxXSAmIDB4MykgKyAxOwo+ICAgICAg ICAgICAgICAgICAgIHJldCA9IGZmX21vdl9jZW5jX2F2Y193cml0ZV9uYWxfdW5pdHMocywgJnRy ay0+Y2VuYywgbmFsX3NpemVfbGVuZ3RoLCBwYiwgcGt0LT5kYXRhLCBzaXplKTsKPiArICAgICAg ICAgICAgfSBlbHNlIGlmKHBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfVlZDICYmIHBhci0+ ZXh0cmFkYXRhX3NpemUgPiAyMSkgewo+ICsgICAgICAgICAgICAgICAgaW50IG5hbF9zaXplX2xl bmd0aCA9IChwYXItPmV4dHJhZGF0YVsyMV0gJiAweDMpICsgMTsKCklzIHRoaXMgcmVhbGx5IGF0 IHRoZSBleGFjdCBzYW1lIG9mZnNldCBhcyBpbiBoZXZjPwoKPiArICAgICAgICAgICAgICAgIHJl dCA9IGZmX21vdl9jZW5jX2F2Y193cml0ZV9uYWxfdW5pdHMocywgJnRyay0+Y2VuYywgbmFsX3Np emVfbGVuZ3RoLCBwYiwgcGt0LT5kYXRhLCBzaXplKTsKPiAgICAgICAgICAgICAgIH0gZWxzZSB7 Cj4gICAgICAgICAgICAgICAgICAgcmV0ID0gZmZfbW92X2NlbmNfd3JpdGVfcGFja2V0KCZ0cmst PmNlbmMsIHBiLCBwa3QtPmRhdGEsIHNpemUpOwo+ICAgICAgICAgICAgICAgfQo+IEBAIC03MzYz LDcgKzczOTksOCBAQCBzdGF0aWMgaW50IG1vdl9pbml0KEFWRm9ybWF0Q29udGV4dCAqcykKPiAg IAo+ICAgICAgICAgICBpZiAobW92LT5lbmNyeXB0aW9uX3NjaGVtZSA9PSBNT1ZfRU5DX0NFTkNf QUVTX0NUUikgewo+ICAgICAgICAgICAgICAgcmV0ID0gZmZfbW92X2NlbmNfaW5pdCgmdHJhY2st PmNlbmMsIG1vdi0+ZW5jcnlwdGlvbl9rZXksCj4gLSAgICAgICAgICAgICAgICAodHJhY2stPnBh ci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NCB8fCB0cmFjay0+cGFyLT5jb2RlY19pZCA9 PSBBVl9DT0RFQ19JRF9IRVZDKSwKPiArICAgICAgICAgICAgICAgICh0cmFjay0+cGFyLT5jb2Rl Y19pZCA9PSBBVl9DT0RFQ19JRF9IMjY0IHx8IHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NP REVDX0lEX0hFVkMgfHwKPiArICAgICAgICAgICAgICAgICB0cmFjay0+cGFyLT5jb2RlY19pZCA9 PSBBVl9DT0RFQ19JRF9WVkMpLAo+ICAgICAgICAgICAgICAgICAgIHMtPmZsYWdzICYgQVZGTVRf RkxBR19CSVRFWEFDVCk7Cj4gICAgICAgICAgICAgICBpZiAocmV0KQo+ICAgICAgICAgICAgICAg ICAgIHJldHVybiByZXQ7Cj4gQEAgLTc4MzIsNiArNzg2OSw4IEBAIHN0YXRpYyBjb25zdCBBVkNv ZGVjVGFnIGNvZGVjX21wNF90YWdzW10gPSB7Cj4gICAgICAgeyBBVl9DT0RFQ19JRF9IRVZDLCAg ICAgICAgICAgIE1LVEFHKCdoJywgJ2UnLCAndicsICcxJykgfSwKPiAgICAgICB7IEFWX0NPREVD X0lEX0hFVkMsICAgICAgICAgICAgTUtUQUcoJ2gnLCAndicsICdjJywgJzEnKSB9LAo+ICAgICAg IHsgQVZfQ09ERUNfSURfSEVWQywgICAgICAgICAgICBNS1RBRygnZCcsICd2JywgJ2gnLCAnMScp IH0sCj4gKyAgICB7IEFWX0NPREVDX0lEX1ZWQywgICAgICAgICAgICAgTUtUQUcoJ3YnLCAndics ICdjJywgJzEnKSB9LAo+ICsgICAgeyBBVl9DT0RFQ19JRF9WVkMsICAgICAgICAgICAgIE1LVEFH KCd2JywgJ3YnLCAnaScsICcxJykgfSwKPiAgICAgICB7IEFWX0NPREVDX0lEX0VWQywgICAgICAg ICAgICAgTUtUQUcoJ2UnLCAndicsICdjJywgJzEnKSB9LAo+ICAgICAgIHsgQVZfQ09ERUNfSURf TVBFRzJWSURFTywgICAgICBNS1RBRygnbScsICdwJywgJzQnLCAndicpIH0sCj4gICAgICAgeyBB Vl9DT0RFQ19JRF9NUEVHMVZJREVPLCAgICAgIE1LVEFHKCdtJywgJ3AnLCAnNCcsICd2JykgfSwK PiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvdnZjLmMgYi9saWJhdmZvcm1hdC92dmMuYwo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uOGVjMDEzNjg2Mgo+IC0tLSAv ZGV2L251bGwKPiArKysgYi9saWJhdmZvcm1hdC92dmMuYwo+IEBAIC0wLDAgKzEsOTk4IEBACj4g Ky8qCj4gKyAqIEguMjY2L1ZWQyBoZWxwZXIgZnVuY3Rpb25zIGZvciBtdXhlcnMKPiArICoKPiAr ICogQ29weXJpZ2h0IChDKSAyMDIyLCBUaG9tYXMgU2llZGVsCj4gKyAqCj4gKyAqIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ICsgKiB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4gKyAqIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCj4gKyAqLwo+ICsK PiArI2luY2x1ZGUgImxpYmF2Y29kZWMvZ2V0X2JpdHMuaCIKPiArI2luY2x1ZGUgImxpYmF2Y29k ZWMvZ29sb21iLmgiCj4gKyNpbmNsdWRlICJsaWJhdmNvZGVjL3Z2Yy5oIgo+ICsjaW5jbHVkZSAi bGliYXZ1dGlsL2ludHJlYWR3cml0ZS5oIgo+ICsjaW5jbHVkZSAiYXZjLmgiCj4gKyNpbmNsdWRl ICJhdmlvLmgiCj4gKyNpbmNsdWRlICJhdmlvX2ludGVybmFsLmgiCj4gKyNpbmNsdWRlICJ2dmMu aCIKPiArCj4gK3R5cGVkZWYgc3RydWN0IFZWQ0NOQUxVbml0QXJyYXkgewo+ICsgICAgdWludDhf dCBhcnJheV9jb21wbGV0ZW5lc3M7Cj4gKyAgICB1aW50OF90IE5BTF91bml0X3R5cGU7Cj4gKyAg ICB1aW50MTZfdCBudW1fbmFsdXM7Cj4gKyAgICB1aW50MTZfdCAqbmFsX3VuaXRfbGVuZ3RoOwo+ ICsgICAgdWludDhfdCAqKm5hbF91bml0Owo+ICt9IFZWQ0NOQUxVbml0QXJyYXk7Cj4gKwo+ICt0 eXBlZGVmIHN0cnVjdCBWVkNQVExSZWNvcmQgewo+ICsgICAgdWludDhfdCBudW1fYnl0ZXNfY29u c3RyYWludF9pbmZvOwo+ICsgICAgdWludDhfdCBnZW5lcmFsX3Byb2ZpbGVfaWRjOwo+ICsgICAg dWludDhfdCBnZW5lcmFsX3RpZXJfZmxhZzsKPiArICAgIHVpbnQ4X3QgZ2VuZXJhbF9sZXZlbF9p ZGM7Cj4gKyAgICB1aW50OF90IHB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZzsKPiArICAg IHVpbnQ4X3QgcHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnOwo+ICsgICAgdWludDhfdCBnZW5l cmFsX2NvbnN0cmFpbnRfaW5mb1s5XTsKPiArICAgIHVpbnQ4X3QgKnB0bF9zdWJsYXllcl9sZXZl bF9wcmVzZW50X2ZsYWc7Cj4gKyAgICB1aW50OF90ICpzdWJsYXllcl9sZXZlbF9pZGM7Cj4gKyAg ICB1aW50OF90IHB0bF9udW1fc3ViX3Byb2ZpbGVzOwo+ICsgICAgdWludDMyX3QgKmdlbmVyYWxf c3ViX3Byb2ZpbGVfaWRjOwo+ICt9IFZWQ1BUTFJlY29yZDsKPiArCj4gK3R5cGVkZWYgc3RydWN0 IFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIHsKPiArICAgIHVpbnQ4X3QgbGVuZ3RoU2l6 ZU1pbnVzT25lOwo+ICsgICAgdWludDhfdCBwdGxfcHJlc2VudF9mbGFnOwo+ICsgICAgdWludDE2 X3Qgb2xzX2lkeDsKPiArICAgIHVpbnQ4X3QgbnVtX3N1YmxheWVyczsKPiArICAgIHVpbnQ4X3Qg Y29uc3RhbnRfZnJhbWVfcmF0ZTsKPiArICAgIHVpbnQ4X3QgY2hyb21hX2Zvcm1hdF9pZGM7Cj4g KyAgICB1aW50OF90IGJpdF9kZXB0aF9taW51czg7Cj4gKyAgICBWVkNQVExSZWNvcmQgcHRsOwo+ ICsgICAgdWludDE2X3QgbWF4X3BpY3R1cmVfd2lkdGg7Cj4gKyAgICB1aW50MTZfdCBtYXhfcGlj dHVyZV9oZWlnaHQ7Cj4gKyAgICB1aW50MTZfdCBhdmdfZnJhbWVfcmF0ZTsKPiArICAgIHVpbnQ4 X3QgbnVtX29mX2FycmF5czsKPiArICAgIFZWQ0NOQUxVbml0QXJyYXkgKmFycmF5Owo+ICt9IFZW Q0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkOwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgVlZDQ1By b2ZpbGVUaWVyTGV2ZWwgewo+ICsgICAgdWludDhfdCBwcm9maWxlX2lkYzsKPiArICAgIHVpbnQ4 X3QgdGllcl9mbGFnOwo+ICsgICAgdWludDhfdCBnZW5lcmFsX2xldmVsX2lkYzsKPiArICAgIHVp bnQ4X3QgcHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnOwo+ICsgICAgdWludDhfdCBwdGxf bXVsdGlsYXllcl9lbmFibGVkX2ZsYWc7Cj4gKy8vIGdlbmVyYWxfY29uc3RyYWludF9pbmZvCj4g KyAgICB1aW50OF90IGdjaV9wcmVzZW50X2ZsYWc7Cj4gKyAgICB1aW50OF90IGdjaV9nZW5lcmFs X2NvbnN0cmFpbnRzWzldOwo+ICsgICAgdWludDhfdCBnY2lfbnVtX3Jlc2VydmVkX2JpdHM7Cj4g Ky8vIGVuZCBnZW5lcmFsX2NvbnN0cmFpbnRfaW5mbwo+ICsgICAgdWludDhfdCAqcHRsX3N1Ymxh eWVyX2xldmVsX3ByZXNlbnRfZmxhZzsKPiArICAgIHVpbnQ4X3QgKnN1YmxheWVyX2xldmVsX2lk YzsKPiArICAgIHVpbnQ4X3QgcHRsX251bV9zdWJfcHJvZmlsZXM7Cj4gKyAgICB1aW50MzJfdCAq Z2VuZXJhbF9zdWJfcHJvZmlsZV9pZGM7Cj4gK30gVlZDQ1Byb2ZpbGVUaWVyTGV2ZWw7Cj4gKwo+ ICtzdGF0aWMgdm9pZCB2dmNjX3VwZGF0ZV9wdGwoVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNv cmQgKnZ2Y2MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNDUHJvZmlsZVRpZXJM ZXZlbCAqcHRsKQo+ICt7Cj4gKyAgICAvKgo+ICsgICAgICogVGhlIGxldmVsIGluZGljYXRpb24g Z2VuZXJhbF9sZXZlbF9pZGMgbXVzdCBpbmRpY2F0ZSBhIGxldmVsIG9mCj4gKyAgICAgKiBjYXBh YmlsaXR5IGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiB0aGUgaGlnaGVzdCBsZXZlbCBpbmRpY2F0 ZWQgZm9yIHRoZQo+ICsgICAgICogaGlnaGVzdCB0aWVyIGluIGFsbCB0aGUgcGFyYW1ldGVyIHNl dHMuCj4gKyAgICAgKi8KPiArICAgIGlmICh2dmNjLT5wdGwuZ2VuZXJhbF90aWVyX2ZsYWcgPCBw dGwtPnRpZXJfZmxhZykKPiArICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGMgPSBw dGwtPmdlbmVyYWxfbGV2ZWxfaWRjOwo+ICsgICAgZWxzZQo+ICsgICAgICAgIHZ2Y2MtPnB0bC5n ZW5lcmFsX2xldmVsX2lkYyA9Cj4gKyAgICAgICAgICAgIEZGTUFYKHZ2Y2MtPnB0bC5nZW5lcmFs X2xldmVsX2lkYywgcHRsLT5nZW5lcmFsX2xldmVsX2lkYyk7Cj4gKwo+ICsgICAgLyoKPiArICAg ICAqIFRoZSB0aWVyIGluZGljYXRpb24gZ2VuZXJhbF90aWVyX2ZsYWcgbXVzdCBpbmRpY2F0ZSBh IHRpZXIgZXF1YWwgdG8gb3IKPiArICAgICAqIGdyZWF0ZXIgdGhhbiB0aGUgaGlnaGVzdCB0aWVy IGluZGljYXRlZCBpbiBhbGwgdGhlIHBhcmFtZXRlciBzZXRzLgo+ICsgICAgICovCj4gKyAgICB2 dmNjLT5wdGwuZ2VuZXJhbF90aWVyX2ZsYWcgPQo+ICsgICAgICAgIEZGTUFYKHZ2Y2MtPnB0bC5n ZW5lcmFsX3RpZXJfZmxhZywgcHRsLT50aWVyX2ZsYWcpOwo+ICsKPiArICAgIC8qCj4gKyAgICAg KiBUaGUgcHJvZmlsZSBpbmRpY2F0aW9uIGdlbmVyYWxfcHJvZmlsZV9pZGMgbXVzdCBpbmRpY2F0 ZSBhIHByb2ZpbGUgdG8KPiArICAgICAqIHdoaWNoIHRoZSBzdHJlYW0gYXNzb2NpYXRlZCB3aXRo IHRoaXMgY29uZmlndXJhdGlvbiByZWNvcmQgY29uZm9ybXMuCj4gKyAgICAgKgo+ICsgICAgICog SWYgdGhlIHNlcXVlbmNlIHBhcmFtZXRlciBzZXRzIGFyZSBtYXJrZWQgd2l0aCBkaWZmZXJlbnQg cHJvZmlsZXMsIHRoZW4KPiArICAgICAqIHRoZSBzdHJlYW0gbWF5IG5lZWQgZXhhbWluYXRpb24g dG8gZGV0ZXJtaW5lIHdoaWNoIHByb2ZpbGUsIGlmIGFueSwgdGhlCj4gKyAgICAgKiBlbnRpcmUg c3RyZWFtIGNvbmZvcm1zIHRvLiBJZiB0aGUgZW50aXJlIHN0cmVhbSBpcyBub3QgZXhhbWluZWQs IG9yIHRoZQo+ICsgICAgICogZXhhbWluYXRpb24gcmV2ZWFscyB0aGF0IHRoZXJlIGlzIG5vIHBy b2ZpbGUgdG8gd2hpY2ggdGhlIGVudGlyZSBzdHJlYW0KPiArICAgICAqIGNvbmZvcm1zLCB0aGVu IHRoZSBlbnRpcmUgc3RyZWFtIG11c3QgYmUgc3BsaXQgaW50byB0d28gb3IgbW9yZQo+ICsgICAg ICogc3ViLXN0cmVhbXMgd2l0aCBzZXBhcmF0ZSBjb25maWd1cmF0aW9uIHJlY29yZHMgaW4gd2hp Y2ggdGhlc2UgcnVsZXMgY2FuCj4gKyAgICAgKiBiZSBtZXQuCj4gKyAgICAgKgo+ICsgICAgICog Tm90ZTogc2V0IHRoZSBwcm9maWxlIHRvIHRoZSBoaWdoZXN0IHZhbHVlIGZvciB0aGUgc2FrZSBv ZiBzaW1wbGljaXR5Lgo+ICsgICAgICovCj4gKyAgICB2dmNjLT5wdGwuZ2VuZXJhbF9wcm9maWxl X2lkYyA9Cj4gKyAgICAgICAgRkZNQVgodnZjYy0+cHRsLmdlbmVyYWxfcHJvZmlsZV9pZGMsIHB0 bC0+cHJvZmlsZV9pZGMpOwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBFYWNoIGJpdCBpbiBmbGFn cyBtYXkgb25seSBiZSBzZXQgaWYgYWxsCj4gKyAgICAgKiB0aGUgcGFyYW1ldGVyIHNldHMgc2V0 IHRoYXQgYml0Lgo+ICsgICAgICovCj4gKyAgICB2dmNjLT5wdGwucHRsX2ZyYW1lX29ubHlfY29u c3RyYWludF9mbGFnICY9Cj4gKyAgICAgICAgcHRsLT5wdGxfZnJhbWVfb25seV9jb25zdHJhaW50 X2ZsYWc7Cj4gKyAgICB2dmNjLT5wdGwucHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnICY9IHB0 bC0+cHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnOwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBD b25zdHJhaW50cyBJbmZvCj4gKyAgICAgKi8KPiArICAgIGlmIChwdGwtPmdjaV9wcmVzZW50X2Zs YWcpIHsKPiArICAgICAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyA9IDk7 Cj4gKyAgICAgICAgbWVtY3B5KCZ2dmNjLT5wdGwuZ2VuZXJhbF9jb25zdHJhaW50X2luZm9bMF0s Cj4gKyAgICAgICAgICAgICAgICZwdGwtPmdjaV9nZW5lcmFsX2NvbnN0cmFpbnRzWzBdLCBzaXpl b2YodWludDhfdCkgKiA5KTsKPiArCj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIHZ2Y2MtPnB0 bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvID0gMTsKPiArICAgICAgICBtZW1zZXQoJnZ2Y2Mt PnB0bC5nZW5lcmFsX2NvbnN0cmFpbnRfaW5mb1swXSwgMCwgc2l6ZW9mKHVpbnQ4X3QpICogOSk7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIEVhY2ggYml0IGluIGZsYWdzIG1heSBv bmx5IGJlIHNldCBpZiBvbmUgb2YKPiArICAgICAqIHRoZSBwYXJhbWV0ZXIgc2V0cyBzZXQgdGhh dCBiaXQuCj4gKyAgICAgKi8KPiArICAgIHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJl c2VudF9mbGFnID0KPiArICAgICAgICAodWludDhfdCAqKSBtYWxsb2Moc2l6ZW9mKHVpbnQ4X3Qp ICogdnZjYy0+bnVtX3N1YmxheWVycyAtIDEpOwo+ICsgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xl dmVsX2lkYyA9Cj4gKyAgICAgICAgKHVpbnQ4X3QgKikgbWFsbG9jKHNpemVvZih1aW50OF90KSAq IHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAxKTsKPiArCj4gKyAgICBtZW1zZXQodnZjYy0+cHRsLnB0 bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWcsIDAsCj4gKyAgICAgICAgICAgc2l6ZW9mKHVp bnQ4X3QpICogdnZjYy0+bnVtX3N1YmxheWVycyAtIDEpOwo+ICsgICAgbWVtc2V0KHZ2Y2MtPnB0 bC5zdWJsYXllcl9sZXZlbF9pZGMsIDAsCj4gKyAgICAgICAgICAgc2l6ZW9mKHVpbnQ4X3QpICog dnZjYy0+bnVtX3N1YmxheWVycyAtIDEpOwo+ICsKPiArICAgIGZvciAoaW50IGkgPSB2dmNjLT5u dW1fc3VibGF5ZXJzIC0gMjsgaSA+PSAwOyBpLS0pIHsKPiArICAgICAgICB2dmNjLT5wdGwucHRs X3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSB8PQo+ICsgICAgICAgICAgICBwdGwtPnB0 bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV07Cj4gKyAgICAgICAgaWYgKHZ2Y2MtPnB0 bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldKSB7Cj4gKyAgICAgICAgICAgIHZ2 Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0gPQo+ICsgICAgICAgICAgICAgICAgRkZNQVgo dnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkY1tpXSwKPiArICAgICAgICAgICAgICAgICAgICAg IHB0bC0+c3VibGF5ZXJfbGV2ZWxfaWRjW2ldKTsKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAg ICAgICAgICBpZiAoaSA9PSB2dmNjLT5udW1fc3VibGF5ZXJzIC0gMSkgewo+ICsgICAgICAgICAg ICAgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkY1tpXSA9IHZ2Y2MtPnB0bC5nZW5lcmFs X2xldmVsX2lkYzsKPiArICAgICAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgIHZ2 Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0gPQo+ICsgICAgICAgICAgICAgICAgICAgIHZ2 Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaSArIDFdOwo+ICsgICAgICAgICAgICB9Cj4gKyAg ICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxl cyA9Cj4gKyAgICAgICAgRkZNQVgodnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzLCBwdGwt PnB0bF9udW1fc3ViX3Byb2ZpbGVzKTsKPiArICAgIGlmICh2dmNjLT5wdGwucHRsX251bV9zdWJf cHJvZmlsZXMpIHsKPiArICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGMg PQo+ICsgICAgICAgICAgICAodWludDMyX3QgKikgbWFsbG9jKHNpemVvZih1aW50MzJfdCkgKgo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9w cm9maWxlcyk7Cj4gKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2dmNjLT5wdGwucHRsX251 bV9zdWJfcHJvZmlsZXM7IGkrKykgewo+ICsgICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9z dWJfcHJvZmlsZV9pZGNbaV0gPQo+ICsgICAgICAgICAgICAgICAgcHRsLT5nZW5lcmFsX3N1Yl9w cm9maWxlX2lkY1tpXTsKPiArICAgICAgICB9Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIHZ2 Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkYyA9Cj4gKyAgICAgICAgICAgICh1aW50MzJf dCAqKSBtYWxsb2Moc2l6ZW9mKHVpbnQzMl90KSk7Cj4gKyAgICB9Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHZ2Y2NfcGFyc2VfcHRsKEdldEJpdENvbnRleHQgKmdiLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYywKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHByb2ZpbGVUaWVyUHJlc2VudEZs YWcsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXhfc3ViX2xh eWVyc19taW51czEpCj4gK3sKPiArICAgIFZWQ0NQcm9maWxlVGllckxldmVsIGdlbmVyYWxfcHRs Owo+ICsgICAgaW50IGo7Cj4gKwo+ICsgICAgaWYgKHByb2ZpbGVUaWVyUHJlc2VudEZsYWcpIHsK PiArICAgICAgICBnZW5lcmFsX3B0bC5wcm9maWxlX2lkYyA9IGdldF9iaXRzKGdiLCA3KTsKPiAr ICAgICAgICBnZW5lcmFsX3B0bC50aWVyX2ZsYWcgPSBnZXRfYml0czEoZ2IpOwo+ICsgICAgfQo+ ICsgICAgZ2VuZXJhbF9wdGwuZ2VuZXJhbF9sZXZlbF9pZGMgPSBnZXRfYml0cyhnYiwgOCk7Cj4g Kwo+ICsgICAgZ2VuZXJhbF9wdGwucHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnID0gZ2V0 X2JpdHMxKGdiKTsKPiArICAgIGdlbmVyYWxfcHRsLnB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxh ZyA9IGdldF9iaXRzMShnYik7Cj4gKyAgICBpZiAocHJvZmlsZVRpZXJQcmVzZW50RmxhZykgeyAg ICAgICAvLyBwYXJzZSBjb25zdHJhaW50IGluZm8KPiArICAgICAgICBnZW5lcmFsX3B0bC5nY2lf cHJlc2VudF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKPiArICAgICAgICBpZiAoZ2VuZXJhbF9wdGwu Z2NpX3ByZXNlbnRfZmxhZykgewo+ICsgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgODsgaisr KQo+ICsgICAgICAgICAgICAgICAgZ2VuZXJhbF9wdGwuZ2NpX2dlbmVyYWxfY29uc3RyYWludHNb al0gPSBnZXRfYml0cyhnYiwgOCk7Cj4gKyAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdjaV9nZW5l cmFsX2NvbnN0cmFpbnRzWzhdID0gMDsKPiArICAgICAgICAgICAgZ2VuZXJhbF9wdGwuZ2NpX2dl bmVyYWxfY29uc3RyYWludHNbOF0gPSBnZXRfYml0cyhnYiwgNyk7Cj4gKwo+ICsgICAgICAgICAg ICBnZW5lcmFsX3B0bC5nY2lfbnVtX3Jlc2VydmVkX2JpdHMgPSBnZXRfYml0cyhnYiwgOCk7Cj4g KyAgICAgICAgICAgIHNraXBfYml0cyhnYiwgZ2VuZXJhbF9wdGwuZ2NpX251bV9yZXNlcnZlZF9i aXRzKTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgd2hpbGUgKGdiLT5pbmRleCAlIDggIT0gMCkK PiArICAgICAgICAgICAgc2tpcF9iaXRzMShnYik7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZ2VuZXJh bF9wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZyA9Cj4gKyAgICAgICAgKHVpbnQ4 X3QgKikgbWFsbG9jKHNpemVvZih1aW50OF90KSAqIG1heF9zdWJfbGF5ZXJzX21pbnVzMSk7Cj4g KyAgICBmb3IgKGludCBpID0gbWF4X3N1Yl9sYXllcnNfbWludXMxIC0gMTsgaSA+PSAwOyBpLS0p IHsKPiArICAgICAgICBnZW5lcmFsX3B0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFn W2ldID0gZ2V0X2JpdHMxKGdiKTsKPiArICAgIH0KPiArICAgIHdoaWxlIChnYi0+aW5kZXggJSA4 ICE9IDApCj4gKyAgICAgICAgc2tpcF9iaXRzMShnYik7Cj4gKwo+ICsgICAgZ2VuZXJhbF9wdGwu c3VibGF5ZXJfbGV2ZWxfaWRjID0KPiArICAgICAgICAodWludDhfdCAqKSBtYWxsb2Moc2l6ZW9m KHVpbnQ4X3QpICogbWF4X3N1Yl9sYXllcnNfbWludXMxKTsKPiArICAgIGZvciAoaW50IGkgPSBt YXhfc3ViX2xheWVyc19taW51czEgLSAxOyBpID49IDA7IGktLSkgewo+ICsgICAgICAgIGlmIChn ZW5lcmFsX3B0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldKQo+ICsgICAgICAg ICAgICBnZW5lcmFsX3B0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0gPSBnZXRfYml0cyhnYiwgOCk7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHByb2ZpbGVUaWVyUHJlc2VudEZsYWcpIHsKPiArICAg ICAgICBnZW5lcmFsX3B0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyA9IGdldF9iaXRzKGdiLCA4KTsK PiArICAgICAgICBpZiAoZ2VuZXJhbF9wdGwucHRsX251bV9zdWJfcHJvZmlsZXMpIHsKPiArICAg ICAgICAgICAgZ2VuZXJhbF9wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGMgPQo+ICsgICAgICAg ICAgICAgICAgKHVpbnQzMl90ICopIG1hbGxvYyhzaXplb2YodWludDMyX3QpICoKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbF9wdGwucHRsX251bV9zdWJfcHJv ZmlsZXMpOwo+ICsgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdlbmVyYWxfcHRsLnB0 bF9udW1fc3ViX3Byb2ZpbGVzOyBpKyspIHsKPiArICAgICAgICAgICAgICAgIGdlbmVyYWxfcHRs LmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2ldID0gZ2V0X2JpdHNfbG9uZyhnYiwgMzIpOwo+ICsg ICAgICAgICAgICB9Cj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgZ2VuZXJhbF9w dGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGMgPQo+ICsgICAgICAgICAgICAgICAgKHVpbnQzMl90 ICopIG1hbGxvYyhzaXplb2YodWludDMyX3QpKTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ ICsgICAgdnZjY191cGRhdGVfcHRsKHZ2Y2MsICZnZW5lcmFsX3B0bCk7Cj4gKwo+ICsgICAgZnJl ZShnZW5lcmFsX3B0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnKTsKPiArICAgIGZy ZWUoZ2VuZXJhbF9wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjKTsKPiArICAgIGZyZWUoZ2VuZXJhbF9w dGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZ2Y2Nf cGFyc2VfdnBzKEdldEJpdENvbnRleHQgKmdiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg IFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQo+ICt7Cj4gKyAgICB1bnNpZ25l ZCBpbnQgdnBzX21heF9sYXllcnNfbWludXMxOwo+ICsgICAgdW5zaWduZWQgaW50IHZwc19tYXhf c3ViX2xheWVyc19taW51czE7Cj4gKyAgICB1bnNpZ25lZCBpbnQgdnBzX2RlZmF1bHRfcHRsX2Rw Yl9ocmRfbWF4X3RpZF9mbGFnOwo+ICsgICAgdW5zaWduZWQgaW50IHZwc19hbGxfaW5kZXBlbmRh bnRfbGF5ZXJfZmxhZzsKPiArICAgIHVuc2lnbmVkIGludCB2cHNfZWFjaF9sYXllcl9pc19hbl9v bHNfZmxhZzsKPiArICAgIHVuc2lnbmVkIGludCB2cHNfb2xzX21vZGVfaWRjOwo+ICsKPiArICAg IHVuc2lnbmVkIGludCAqdnBzX3B0X3ByZXNlbnRfZmxhZzsKPiArICAgIHVuc2lnbmVkIGludCAq dnBzX3B0bF9tYXhfdGlkOwo+ICsgICAgdW5zaWduZWQgaW50IHZwc19udW1fcHRsc19taW51czEg PSAwOwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiB2cHNfdmlkZW9fcGFyYW1ldGVyX3NldF9pZCB1 KDQpCj4gKyAgICAgKi8KPiArICAgIHNraXBfYml0cyhnYiwgNCk7Cj4gKwo+ICsgICAgdnBzX21h eF9sYXllcnNfbWludXMxID0gZ2V0X2JpdHMoZ2IsIDYpOwo+ICsgICAgdnBzX21heF9zdWJfbGF5 ZXJzX21pbnVzMSA9IGdldF9iaXRzKGdiLCAzKTsKPiArCj4gKyAgICAvKgo+ICsgICAgICogbnVt VGVtcG9yYWxMYXllcnMgZ3JlYXRlciB0aGFuIDEgaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmVhbSB0 byB3aGljaCB0aGlzCj4gKyAgICAgKiBjb25maWd1cmF0aW9uIHJlY29yZCBhcHBsaWVzIGlzIHRl bXBvcmFsbHkgc2NhbGFibGUgYW5kIHRoZSBjb250YWluZWQKPiArICAgICAqIG51bWJlciBvZiB0 ZW1wb3JhbCBsYXllcnMgKGFsc28gcmVmZXJyZWQgdG8gYXMgdGVtcG9yYWwgc3ViLWxheWVyIG9y Cj4gKyAgICAgKiBzdWItbGF5ZXIgaW4gSVNPL0lFQyAyMzAwOC0yKSBpcyBlcXVhbCB0byBudW1U ZW1wb3JhbExheWVycy4gVmFsdWUgMQo+ICsgICAgICogaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmVh bSBpcyBub3QgdGVtcG9yYWxseSBzY2FsYWJsZS4gVmFsdWUgMCBpbmRpY2F0ZXMKPiArICAgICAq IHRoYXQgaXQgaXMgdW5rbm93biB3aGV0aGVyIHRoZSBzdHJlYW0gaXMgdGVtcG9yYWxseSBzY2Fs YWJsZS4KPiArICAgICAqLwo+ICsgICAgdnZjYy0+bnVtX3N1YmxheWVycyA9IEZGTUFYKHZ2Y2Mt Pm51bV9zdWJsYXllcnMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnBzX21h eF9zdWJfbGF5ZXJzX21pbnVzMSArIDEpOwo+ICsKPiArICAgIGlmICh2cHNfbWF4X2xheWVyc19t aW51czEgPiAwICYmIHZwc19tYXhfc3ViX2xheWVyc19taW51czEgPiAwKQo+ICsgICAgICAgIHZw c19kZWZhdWx0X3B0bF9kcGJfaHJkX21heF90aWRfZmxhZyA9IGdldF9iaXRzMShnYik7Cj4gKyAg ICBpZiAodnBzX21heF9sYXllcnNfbWludXMxID4gMCkKPiArICAgICAgICB2cHNfYWxsX2luZGVw ZW5kYW50X2xheWVyX2ZsYWcgPSBnZXRfYml0czEoZ2IpOwo+ICsKPiArICAgIGZvciAoaW50IGkg PSAwOyBpIDw9IHZwc19tYXhfbGF5ZXJzX21pbnVzMTsgaSsrKSB7Cj4gKyAgICAgICAgc2tpcF9i aXRzKGdiLCA2KTsgICAgLy92cHNfZGVmYXVsdF9wdGxfZHBiX2hyZF9tYXhfdGlkX2ZsYWdbaV0K PiArICAgICAgICBpZiAoaSA+IDAgJiYgIXZwc19hbGxfaW5kZXBlbmRhbnRfbGF5ZXJfZmxhZykg ewo+ICsgICAgICAgICAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgeyAgICAvLyB2cHNfaW5kZXBlbmRh bnRfbGF5ZXJfZmxhZwo+ICsgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZwc19tYXhfdGlk X3JlZl9wcmVzZW50X2ZsYWcgPSBnZXRfYml0czEoZ2IpOwo+ICsgICAgICAgICAgICAgICAgZm9y IChpbnQgaiA9IDA7IGogPCBpOyBqKyspIHsKPiArICAgICAgICAgICAgICAgICAgICBpZiAodnBz X21heF90aWRfcmVmX3ByZXNlbnRfZmxhZyAmJiBnZXRfYml0czEoZ2IpKSAgLy8gdnBzX2RpcmVj dF9yZWZfbGF5ZXJfZmxhZ1tpXVtqXQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2Jp dHMoZ2IsIDMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2cHNfbWF4X3RpZF9p bF9yZWZfcGljc19wbHVzMQo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICB9Cj4g KyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIGlmICh2cHNfbWF4X2xheWVyc19taW51czEg PiAwKSB7Cj4gKyAgICAgICAgaWYgKHZwc19hbGxfaW5kZXBlbmRhbnRfbGF5ZXJfZmxhZykKPiAr ICAgICAgICAgICAgdnBzX2VhY2hfbGF5ZXJfaXNfYW5fb2xzX2ZsYWcgPSBnZXRfYml0czEoZ2Ip Owo+ICsgICAgICAgIGlmICh2cHNfZWFjaF9sYXllcl9pc19hbl9vbHNfZmxhZykgewo+ICsgICAg ICAgICAgICBpZiAoIXZwc19hbGxfaW5kZXBlbmRhbnRfbGF5ZXJfZmxhZykKPiArICAgICAgICAg ICAgICAgIHZwc19vbHNfbW9kZV9pZGMgPSBnZXRfYml0cyhnYiwgMik7Cj4gKyAgICAgICAgICAg IGlmICh2cHNfb2xzX21vZGVfaWRjID09IDIpIHsKPiArICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCB2cHNfbnVtX291dHB1dF9sYXllcl9zZXRzX21pbnVzMiA9IGdldF9iaXRzKGdiLCA4KTsK PiArICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHZwc19udW1fb3V0cHV0X2xh eWVyX3NldHNfbWludXMyICsgMTsgaSsrKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgZm9yIChp bnQgaiA9IDA7IGogPD0gdnBzX21heF9sYXllcnNfbWludXMxOyBqKyspIHsKPiArICAgICAgICAg ICAgICAgICAgICAgICAgc2tpcF9iaXRzMShnYik7Cj4gKyAgICAgICAgICAgICAgICAgICAgfQo+ ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAg ICAgIHZwc19udW1fcHRsc19taW51czEgPSBnZXRfYml0cyhnYiwgOCk7Cj4gKyAgICB9Cj4gKwo+ ICsgICAgdnBzX3B0X3ByZXNlbnRfZmxhZyA9Cj4gKyAgICAgICAgKHVuc2lnbmVkIGludCAqKSBt YWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGludCkgKgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICh2cHNfbnVtX3B0bHNfbWludXMxICsgMSkpOwo+ICsgICAgdnBzX3B0bF9tYXhfdGlk ID0KPiArICAgICAgICAodW5zaWduZWQgaW50ICopIG1hbGxvYyhzaXplb2YodW5zaWduZWQgaW50 KSAqCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZwc19udW1fcHRsc19taW51 czEgKyAxKSk7Cj4gKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSB2cHNfbnVtX3B0bHNfbWludXMx OyBpKyspIHsKPiArICAgICAgICBpZiAoaSA+IDApCj4gKyAgICAgICAgICAgIHZwc19wdF9wcmVz ZW50X2ZsYWdbaV0gPSBnZXRfYml0czEoZ2IpOwo+ICsgICAgICAgIGlmICghdnBzX2RlZmF1bHRf cHRsX2RwYl9ocmRfbWF4X3RpZF9mbGFnKQo+ICsgICAgICAgICAgICB2cHNfcHRsX21heF90aWRb aV0gPSBnZXRfYml0cyhnYiwgMyk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgd2hpbGUgKGdiLT5pbmRl eCAlIDggIT0gMCkKPiArICAgICAgICBza2lwX2JpdHMxKGdiKTsKPiArCj4gKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8PSB2cHNfbnVtX3B0bHNfbWludXMxOyBpKyspIHsKPiArICAgICAgICB2dmNj X3BhcnNlX3B0bChnYiwgdnZjYywgdnBzX3B0X3ByZXNlbnRfZmxhZ1tpXSwgdnBzX3B0bF9tYXhf dGlkW2ldKTsKPiArICAgIH0KPiArCj4gKyAgICBmcmVlKHZwc19wdF9wcmVzZW50X2ZsYWcpOwo+ ICsgICAgZnJlZSh2cHNfcHRsX21heF90aWQpOwo+ICsKPiArICAgIC8qIG5vdGhpbmcgdXNlZnVs IGZvciB2dmNjIHBhc3QgdGhpcyBwb2ludCAqLwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgdnZjY19wYXJzZV9zcHMoR2V0Qml0Q29udGV4dCAqZ2IsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCj4g K3sKPiArICAgIHVuc2lnbmVkIGludCBzcHNfbWF4X3N1Yl9sYXllcnNfbWludXMxLCBsb2cyX2N0 dV9zaXplX21pbnVzNTsKPiArICAgIC8vdW5zaWduZWQgaW50IG51bV9zaG9ydF90ZXJtX3JlZl9w aWNfc2V0cywgbnVtX2RlbHRhX3BvY3NbVlZDX01BWF9SRUZfUElDX0xJU1RTXTsKPiArICAgIC8v dW5zaWduZWQgaW50IHNwc19jaHJvbWFfZm9ybWF0X2lkYzsKPiArICAgIHVuc2lnbmVkIGludCBz cHNfc3VicGljX3NhbWVfc2l6ZV9mbGFnLCBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1w bGUsCj4gKyAgICAgICAgc3BzX3BpY193aWR0aF9tYXhfaW5fbHVtYV9zYW1wbGU7Cj4gKyAgICB1 bnNpZ25lZCBpbnQgc3BzX2luZGVwZW5kYW50X3N1YnBpY3NfZmxhZzsKPiArICAgIHVuc2lnbmVk IGludCBmbGFnOwo+ICsKPiArICAgIHNraXBfYml0cyhnYiwgOCk7ICAvLyBzcHNfc2VxX3BhcmFt ZXRlcl9zZXRfaWQgJiYgc3BzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWQKPiArICAgIHNwc19tYXhf c3ViX2xheWVyc19taW51czEgPSBnZXRfYml0cyhnYiwgMyk7Cj4gKwo+ICsgICAgLyoKPiArICAg ICAqIG51bVRlbXBvcmFsTGF5ZXJzIGdyZWF0ZXIgdGhhbiAxIGluZGljYXRlcyB0aGF0IHRoZSBz dHJlYW0gdG8gd2hpY2ggdGhpcwo+ICsgICAgICogY29uZmlndXJhdGlvbiByZWNvcmQgYXBwbGll cyBpcyB0ZW1wb3JhbGx5IHNjYWxhYmxlIGFuZCB0aGUgY29udGFpbmVkCj4gKyAgICAgKiBudW1i ZXIgb2YgdGVtcG9yYWwgbGF5ZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzIHRlbXBvcmFsIHN1Yi1s YXllciBvcgo+ICsgICAgICogc3ViLWxheWVyIGluIElTTy9JRUMgMjMwMDgtMikgaXMgZXF1YWwg dG8gbnVtVGVtcG9yYWxMYXllcnMuIFZhbHVlIDEKPiArICAgICAqIGluZGljYXRlcyB0aGF0IHRo ZSBzdHJlYW0gaXMgbm90IHRlbXBvcmFsbHkgc2NhbGFibGUuIFZhbHVlIDAgaW5kaWNhdGVzCj4g KyAgICAgKiB0aGF0IGl0IGlzIHVua25vd24gd2hldGhlciB0aGUgc3RyZWFtIGlzIHRlbXBvcmFs bHkgc2NhbGFibGUuCj4gKyAgICAgKi8KPiArICAgIHZ2Y2MtPm51bV9zdWJsYXllcnMgPSBGRk1B WCh2dmNjLT5udW1fc3VibGF5ZXJzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNwc19tYXhfc3ViX2xheWVyc19taW51czEgKyAxKTsKPiArCj4gKyAgICB2dmNjLT5jaHJvbWFf Zm9ybWF0X2lkYyA9IGdldF9iaXRzKGdiLCAyKTsKPiArICAgIGxvZzJfY3R1X3NpemVfbWludXM1 ID0gZ2V0X2JpdHMoZ2IsIDIpOwo+ICsKPiArICAgIGlmIChnZXRfYml0czEoZ2IpKSAgICAgICAg ICAvL3Nwc19wdGxfZHBiX2hyZF9wYXJhbXNfcHJlc2VudF9mbGFnCj4gKyAgICAgICAgdnZjY19w YXJzZV9wdGwoZ2IsIHZ2Y2MsIDEsIHNwc19tYXhfc3ViX2xheWVyc19taW51czEpOwo+ICsKPiAr ICAgIGZsYWcgPSBnZXRfYml0cyhnYiwgMSk7ICAgICAvL3NraXBfYml0czEoZ2IpOyAvL3Nwc19n ZHJfZW5hYmxlZF9mbGFnCj4gKyAgICBmbGFnID0gZ2V0X2JpdHMoZ2IsIDEpOyAgICAgLy9zcHNf cmVmX3BpY19yZXNhbXBsaW5nX2VuYWJsZWRfZmxhZwo+ICsgICAgaWYgKGZsYWcpIHsgICAgICAg ICAgICAgICAgIC8vc3BzX3JlZl9waWNfcmVzYW1wbGluZ19lbmFibGVkX2ZsYWcKPiArICAgICAg ICBmbGFnID0gZ2V0X2JpdHMoZ2IsIDEpOyAvL3NraXBfYml0czEoZ2IpOyAvL3Nwc19yZXNfY2hh bmdlX2luX2NsdnNfYWxsb3dlZF9mbGFnCj4gKyAgICB9Cj4gKwo+ICsgICAgc3BzX3BpY193aWR0 aF9tYXhfaW5fbHVtYV9zYW1wbGUgPSBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOwo+ICsgICAgdnZj Yy0+bWF4X3BpY3R1cmVfd2lkdGggPQo+ICsgICAgICAgIEZGTUFYKHZ2Y2MtPm1heF9waWN0dXJl X3dpZHRoLCBzcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3NhbXBsZSk7Cj4gKyAgICBzcHNfcGlj X2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGUgPSBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOwo+ICsg ICAgdnZjYy0+bWF4X3BpY3R1cmVfaGVpZ2h0ID0KPiArICAgICAgICBGRk1BWCh2dmNjLT5tYXhf cGljdHVyZV9oZWlnaHQsIHNwc19waWNfaGVpZ2h0X21heF9pbl9sdW1hX3NhbXBsZSk7Cj4gKwo+ ICsgICAgaWYgKGdldF9iaXRzMShnYikpIHsKPiArICAgICAgICBnZXRfdWVfZ29sb21iX2xvbmco Z2IpOyAvLyBzcHNfY29uZl93aW5fbGVmdF9vZmZzZXQKPiArICAgICAgICBnZXRfdWVfZ29sb21i X2xvbmcoZ2IpOyAvLyBzcHNfY29uZl93aW5fcmlnaHRfb2Zmc2V0Cj4gKyAgICAgICAgZ2V0X3Vl X2dvbG9tYl9sb25nKGdiKTsgLy8gc3BzX2NvbmZfd2luX3RvcF9vZmZzZXQKPiArICAgICAgICBn ZXRfdWVfZ29sb21iX2xvbmcoZ2IpOyAvLyBzcHNfY29uZl93aW5fYm90dG9tX29mZnNldAo+ICsg ICAgfQo+ICsKPiArICAgIGlmIChnZXRfYml0czEoZ2IpKSB7ICAgICAgICAvLyBzcHNfc3VicGlj X2luZm9fcHJlc2VudF9mbGFnCj4gKyAgICAgICAgdW5zaWduZWQgaW50IHNwc19udW1fc3VicGlj c19taW51czEgPSBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOwo+ICsgICAgICAgIGlmIChzcHNfbnVt X3N1YnBpY3NfbWludXMxID4gMCkgeyAgICAgICAvLyBzcHNfbnVtX3N1YnBpY3NfbWludXMxCj4g KyAgICAgICAgICAgIHNwc19pbmRlcGVuZGFudF9zdWJwaWNzX2ZsYWcgPSBnZXRfYml0czEoZ2Ip Owo+ICsgICAgICAgICAgICBzcHNfc3VicGljX3NhbWVfc2l6ZV9mbGFnID0gZ2V0X2JpdHMxKGdi KTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgZm9yIChpbnQgaSA9IDA7Cj4gKyAgICAgICAgICAg ICBzcHNfbnVtX3N1YnBpY3NfbWludXMxID4gMCAmJiBpIDw9IHNwc19udW1fc3VicGljc19taW51 czE7IGkrKykgewo+ICsgICAgICAgICAgICBpZiAoIXNwc19zdWJwaWNfc2FtZV9zaXplX2ZsYWcg fHwgaSA9PSAwKSB7Cj4gKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gRkZNSU4obG9nMl9jdHVf c2l6ZV9taW51czUgKyA1LCAxNik7Cj4gKyAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgc3Bz X3BpY193aWR0aF9tYXhfaW5fbHVtYV9zYW1wbGUgPiAxMjgpCj4gKyAgICAgICAgICAgICAgICAg ICAgc2tpcF9iaXRzKGdiLCBsZW4pOwo+ICsgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIHNw c19waWNfaGVpZ2h0X21heF9pbl9sdW1hX3NhbXBsZSA+IDEyOCkKPiArICAgICAgICAgICAgICAg ICAgICBza2lwX2JpdHMoZ2IsIGxlbik7Cj4gKyAgICAgICAgICAgICAgICBpZiAoaSA8IHNwc19u dW1fc3VicGljc19taW51czEKPiArICAgICAgICAgICAgICAgICAgICAmJiBzcHNfcGljX3dpZHRo X21heF9pbl9sdW1hX3NhbXBsZSA+IDEyOCkKPiArICAgICAgICAgICAgICAgICAgICBza2lwX2Jp dHMoZ2IsIGxlbik7Cj4gKyAgICAgICAgICAgICAgICBpZiAoaSA8IHNwc19udW1fc3VicGljc19t aW51czEKPiArICAgICAgICAgICAgICAgICAgICAmJiBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVt YV9zYW1wbGUgPiAxMjgpCj4gKyAgICAgICAgICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCBsZW4p Owo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIGlmICghc3BzX2luZGVwZW5kYW50X3N1 YnBpY3NfZmxhZykgewo+ICsgICAgICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCAyKTsgICAgICAg Ly8gc3BzX3N1YnBpY190cmVhdGVkX2FzX3BpY19mbGFnICYmIHNwc19sb29wX2ZpbHRlcl9hY3Jv c3Nfc3VicGljX2VuYWJsZWRfZmxhZwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsg ICAgICAgIGdldF91ZV9nb2xvbWJfbG9uZyhnYik7IC8vIHNwc19zdWJwaWNfaWRfbGVuX21pbnVz MQo+ICsgICAgICAgIGlmIChnZXRfYml0czEoZ2IpKSB7ICAgIC8vIHNwc19zdWJwaWNfaWRfbWFw cGluZ19leHBsaWNpdGx5X3NpZ25hbGxlZF9mbGFnCj4gKyAgICAgICAgICAgIGlmIChnZXRfYml0 czEoZ2IpKSAgLy8gc3BzX3N1YnBpY19pZF9tYXBwaW5nX3ByZXNlbnRfZmxhZwo+ICsgICAgICAg ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3BzX251bV9zdWJwaWNzX21pbnVzMTsgaSsr KSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgc2tpcF9iaXRzMShnYik7ICAgICAvLyBzcHNfc3Vi cGljX2lkW2ldCj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsg ICAgdnZjYy0+Yml0X2RlcHRoX21pbnVzOCA9IGdldF91ZV9nb2xvbWJfbG9uZyhnYik7Cj4gKwo+ ICsgICAgLyogbm90aGluZyB1c2VmdWwgZm9yIHZ2Y2MgcGFzdCB0aGlzIHBvaW50ICovCj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2dmNjX3BhcnNlX3BwcyhHZXRCaXRD b250ZXh0ICpnYiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmln dXJhdGlvblJlY29yZCAqdnZjYykKPiArewo+ICsKPiArICAgIC8vIE5vdGhpbmcgb2YgaW1wb3J0 YW5jZSB0byBwYXJzZSBpbiBQUFMKPiArICAgIC8qIG5vdGhpbmcgdXNlZnVsIGZvciB2dmNjIHBh c3QgdGhpcyBwb2ludCAqLwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IG5hbF91bml0X3BhcnNlX2hlYWRlcihHZXRCaXRDb250ZXh0ICpnYiwgdWludDhfdCAqbmFsX3R5 cGUpCj4gK3sKPiArICAgIC8qCj4gKyAgICAgKiBmb3JiaWRkZW5femVyb19iaXQgICAgdSgxKQo+ ICsgICAgICogbnVoX3Jlc2VydmVkX3plcm9fYml0IHUoMSkKPiArICAgICAqIG51aF9sYXllcl9p ZCAgICAgICAgICB1KDYpCj4gKyAgICAgKi8KPiArICAgIHNraXBfYml0cyhnYiwgOCk7Cj4gKyAg ICAqbmFsX3R5cGUgPSBnZXRfYml0cyhnYiwgNSk7Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIG51 aF90ZW1wb3JhbF9pZF9wbHVzMSB1KDMpCj4gKyAgICAgKi8KPiArICAgIHNraXBfYml0cyhnYiwg Myk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdnZjY19hcnJheV9hZGRfbmFsX3VuaXQodWludDhf dCAqbmFsX2J1ZiwgdWludDMyX3QgbmFsX3NpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludDhfdCBuYWxfdHlwZSwgaW50IHBzX2FycmF5X2NvbXBsZXRlbmVzcywK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJh dGlvblJlY29yZCAqdnZjYykKPiArewo+ICsgICAgaW50IHJldDsKPiArICAgIHVpbnQ4X3QgaW5k ZXg7Cj4gKyAgICB1aW50MTZfdCBudW1fbmFsdXM7Cj4gKyAgICBWVkNDTkFMVW5pdEFycmF5ICph cnJheTsKPiArCj4gKyAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB2dmNjLT5udW1fb2ZfYXJy YXlzOyBpbmRleCsrKQo+ICsgICAgICAgIGlmICh2dmNjLT5hcnJheVtpbmRleF0uTkFMX3VuaXRf dHlwZSA9PSBuYWxfdHlwZSkKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgaWYgKGlu ZGV4ID49IHZ2Y2MtPm51bV9vZl9hcnJheXMpIHsKPiArICAgICAgICB1aW50OF90IGk7Cj4gKwo+ ICsgICAgICAgIHJldCA9Cj4gKyAgICAgICAgICAgIGF2X3JlYWxsb2NwX2FycmF5KCZ2dmNjLT5h cnJheSwgaW5kZXggKyAxLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yo VlZDQ05BTFVuaXRBcnJheSkpOwo+ICsgICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAg ICByZXR1cm4gcmV0Owo+ICsKPiArICAgICAgICBmb3IgKGkgPSB2dmNjLT5udW1fb2ZfYXJyYXlz OyBpIDw9IGluZGV4OyBpKyspCj4gKyAgICAgICAgICAgIG1lbXNldCgmdnZjYy0+YXJyYXlbaV0s IDAsIHNpemVvZihWVkNDTkFMVW5pdEFycmF5KSk7Cj4gKyAgICAgICAgdnZjYy0+bnVtX29mX2Fy cmF5cyA9IGluZGV4ICsgMTsKPiArICAgIH0KPiArCj4gKyAgICBhcnJheSA9ICZ2dmNjLT5hcnJh eVtpbmRleF07Cj4gKyAgICBudW1fbmFsdXMgPSBhcnJheS0+bnVtX25hbHVzOwo+ICsKPiArICAg IHJldCA9IGF2X3JlYWxsb2NwX2FycmF5KCZhcnJheS0+bmFsX3VuaXQsIG51bV9uYWx1cyArIDEs IHNpemVvZih1aW50OF90ICopKTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIHJldHVy biByZXQ7Cj4gKwo+ICsgICAgcmV0ID0KPiArICAgICAgICBhdl9yZWFsbG9jcF9hcnJheSgmYXJy YXktPm5hbF91bml0X2xlbmd0aCwgbnVtX25hbHVzICsgMSwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplb2YodWludDE2X3QpKTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAg IHJldHVybiByZXQ7Cj4gKwo+ICsgICAgYXJyYXktPm5hbF91bml0W251bV9uYWx1c10gPSBuYWxf YnVmOwo+ICsgICAgYXJyYXktPm5hbF91bml0X2xlbmd0aFtudW1fbmFsdXNdID0gbmFsX3NpemU7 Cj4gKyAgICBhcnJheS0+TkFMX3VuaXRfdHlwZSA9IG5hbF90eXBlOwo+ICsgICAgYXJyYXktPm51 bV9uYWx1cysrOwo+ICsKPiArICAgIC8qCj4gKyAgICAqIFdoZW4gdGhlIHNhbXBsZSBlbnRyeSBu YW1lIGlzICd2dmMxJywgdGhlIGZvbGxvd2luZyBhcHBsaWVzOgo+ICsgICAgKiDigKIgVGhlIHZh bHVlIG9mIGFycmF5X2NvbXBsZXRlbmVzcyBzaGFsbCBiZSBlcXVhbCB0byAxIGZvciBhcnJheXMg b2YgU1BTLAo+ICsgICAgKiAgIGFuZCBQUFMgTkFMIHVuaXRzLgo+ICsgICAgKiDigKIgSWYgYSBW VkMgYml0c3RyZWFtIGluY2x1ZGVzIERDSSBOQUwgdW5pdChzKSwgdGhlIHZhbHVlIG9mCj4gKyAg ICAqICAgYXJyYXlfY29tcGxldGVuZXNzIHNoYWxsIGJlIGVxdWFsIHRvIDEgZm9yIHRoZSBhcnJh eSBvZiBEQ0kgdW5pdHMuCj4gKyAgICAqICAgT3RoZXJ3aXNlLCBOQUxfdW5pdF90eXBlIHNoYWxs IG5vdCBpbmRpY2F0ZSBEQ0kgTkFMIHVuaXRzLgo+ICsgICAgKiDigKIgSWYgYSBWVkMgYml0c3Ry ZWFtIGluY2x1ZGVzIFZQUyBOQUwgdW5pdChzKSwgdGhlIHZhbHVlIG9mCj4gKyAgICAqICAgYXJy YXlfY29tcGxldGVuZXNzIHNoYWxsIGJlIGVxdWFsIHRvIDEgZm9yIHRoZSBhcnJheSBvZiBWUFMg TkFMIHVuaXRzLgo+ICsgICAgKiAgIE90aGVyd2lzZSwgTkFMX3VuaXRfdHlwZSBzaGFsbCBub3Qg aW5kaWNhdGUgVlBTIE5BTCB1bml0cy4KPiArICAgICogV2hlbiB0aGUgdmFsdWUgb2YgYXJyYXlf Y29tcGxldGVuZXNzIGlzIGVxdWFsIHRvIDEgZm9yIGFuIGFycmF5IG9mIGEKPiArICAgICogcGFy dGljdWxhciBOQUxfdW5pdF90eXBlIHZhbHVlLCBOQUwgdW5pdHMgb2YgdGhhdCBOQUxfdW5pdF90 eXBlIHZhbHVlCj4gKyAgICAqIGNhbm5vdCBiZSB1cGRhdGVkIHdpdGhvdXQgY2F1c2luZyBhIGRp ZmZlcmVudCBzYW1wbGUgZW50cnkgdG8gYmUgdXNlZC4KPiArICAgICogV2hlbiB0aGUgc2FtcGxl IGVudHJ5IG5hbWUgaXMgJ3Z2aTEnLCB0aGUgdmFsdWUgb2YgYXJyYXlfY29tcGxldGVuZXNzCj4g KyAgICAqIG9mIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIGFycmF5cyBzaGFsbCBiZSBl cXVhbCB0byAwOgo+ICsgICAgICDigKIgVGhlIGFycmF5IG9mIERDSSBOQUwgdW5pdHMsIGlmIHBy ZXNlbnQuCj4gKyAgICAgIOKAoiBUaGUgYXJyYXkgb2YgVlBTIE5BTCB1bml0cywgaWYgcHJlc2Vu dC4KPiArICAgICAg4oCiIFRoZSBhcnJheSBvZiBTUFMgTkFMIHVuaXRzCj4gKyAgICAgIOKAoiBU aGUgYXJyYXkgb2YgUFBTIE5BTCB1bml0cy4KPiArICAgICovCj4gKyAgICBpZiAobmFsX3R5cGUg PT0gVlZDX1ZQU19OVVQgfHwgbmFsX3R5cGUgPT0gVlZDX1NQU19OVVQgfHwKPiArICAgICAgICBu YWxfdHlwZSA9PSBWVkNfUFBTX05VVCB8fCBuYWxfdHlwZSA9PSBWVkNfRENJX05VVCApCj4gKyAg ICAgICAgYXJyYXktPmFycmF5X2NvbXBsZXRlbmVzcyA9IHBzX2FycmF5X2NvbXBsZXRlbmVzczsK PiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2dmNjX2FkZF9uYWxf dW5pdCh1aW50OF90ICpuYWxfYnVmLCB1aW50MzJfdCBuYWxfc2l6ZSwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgcHNfYXJyYXlfY29tcGxldGVuZXNzLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQo+ ICt7Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArICAgIEdldEJpdENvbnRleHQgZ2JjOwo+ICsgICAg dWludDhfdCBuYWxfdHlwZTsKPiArICAgIHVpbnQ4X3QgKnJic3BfYnVmOwo+ICsgICAgdWludDMy X3QgcmJzcF9zaXplOwo+ICsKPiArICAgIHJic3BfYnVmID0gZmZfbmFsX3VuaXRfZXh0cmFjdF9y YnNwKG5hbF9idWYsIG5hbF9zaXplLCAmcmJzcF9zaXplLCAyKTsKPiArICAgIGlmICghcmJzcF9i dWYpIHsKPiArICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICAgICAgZ290byBl bmQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gaW5pdF9nZXRfYml0czgoJmdiYywgcmJzcF9i dWYsIHJic3Bfc2l6ZSk7Cj4gKyAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICBnb3RvIGVuZDsK PiArCj4gKyAgICBuYWxfdW5pdF9wYXJzZV9oZWFkZXIoJmdiYywgJm5hbF90eXBlKTsKPiArCj4g KyAgICAvKgo+ICsgICAgICogTm90ZTogb25seSAnZGVjbGFyYXRpdmUnIFNFSSBtZXNzYWdlcyBh cmUgYWxsb3dlZCBpbgo+ICsgICAgICogdnZjYy4gUGVyaGFwcyB0aGUgU0VJIHBsYXlsb2FkIHR5 cGUgc2hvdWxkIGJlIGNoZWNrZWQKPiArICAgICAqIGFuZCBub24tZGVjbGFyYXRpdmUgU0VJIG1l c3NhZ2VzIGRpc2NhcmRlZD8KPiArICAgICAqLwo+ICsgICAgc3dpdGNoIChuYWxfdHlwZSkgewo+ ICsgICAgY2FzZSBWVkNfT1BJX05VVDoKPiArICAgIGNhc2UgVlZDX1ZQU19OVVQ6Cj4gKyAgICBj YXNlIFZWQ19TUFNfTlVUOgo+ICsgICAgY2FzZSBWVkNfUFBTX05VVDoKPiArICAgIGNhc2UgVlZD X1BSRUZJWF9TRUlfTlVUOgo+ICsgICAgY2FzZSBWVkNfU1VGRklYX1NFSV9OVVQ6Cj4gKyAgICAg ICAgcmV0ID0gdnZjY19hcnJheV9hZGRfbmFsX3VuaXQobmFsX2J1ZiwgbmFsX3NpemUsIG5hbF90 eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzX2FycmF5X2Nv bXBsZXRlbmVzcywgdnZjYyk7Cj4gKyAgICAgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgICAg IGdvdG8gZW5kOwo+ICsgICAgICAgIGVsc2UgaWYgKG5hbF90eXBlID09IFZWQ19WUFNfTlVUKQo+ ICsgICAgICAgICAgICByZXQgPSB2dmNjX3BhcnNlX3ZwcygmZ2JjLCB2dmNjKTsKPiArICAgICAg ICBlbHNlIGlmIChuYWxfdHlwZSA9PSBWVkNfU1BTX05VVCkKPiArICAgICAgICAgICAgcmV0ID0g dnZjY19wYXJzZV9zcHMoJmdiYywgdnZjYyk7Cj4gKyAgICAgICAgZWxzZSBpZiAobmFsX3R5cGUg PT0gVlZDX1BQU19OVVQpCj4gKyAgICAgICAgICAgIHJldCA9IHZ2Y2NfcGFyc2VfcHBzKCZnYmMs IHZ2Y2MpOwo+ICsgICAgICAgIGVsc2UgaWYgKG5hbF90eXBlID09IFZWQ19PUElfTlVUKSB7Cj4g KyAgICAgICAgICAgIC8vIG5vdCB5ZXQgc3VwcG9ydGVkCj4gKyAgICAgICAgfQo+ICsgICAgICAg IGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICBnb3RvIGVuZDsKPiArICAgICAgICBicmVhazsK PiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKPiAr ICAgICAgICBnb3RvIGVuZDsKPiArICAgIH0KPiArCj4gKyAgZW5kOgo+ICsgICAgYXZfZnJlZShy YnNwX2J1Zik7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2dmNj X2luaXQoVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCj4gK3sKPiArICAgIG1l bXNldCh2dmNjLCAwLCBzaXplb2YoVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQpKTsKPiAr ICAgIHZ2Y2MtPmxlbmd0aFNpemVNaW51c09uZSA9IDM7ICAgICAgIC8vIDQgYnl0ZXMKPiArCj4g KyAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyA9IDE7Cj4gKwo+ICsgICAg dnZjYy0+cHRsX3ByZXNlbnRfZmxhZyA9IDE7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZ2Y2Nf Y2xvc2UoVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCj4gK3sKPiArICAgIHVp bnQ4X3QgaTsKPiArCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX29mX2FycmF5czsg aSsrKSB7Cj4gKyAgICAgICAgdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzID0gMDsKPiArICAgICAg ICBhdl9mcmVlcCgmdnZjYy0+YXJyYXlbaV0ubmFsX3VuaXQpOwo+ICsgICAgICAgIGF2X2ZyZWVw KCZ2dmNjLT5hcnJheVtpXS5uYWxfdW5pdF9sZW5ndGgpOwo+ICsgICAgfQo+ICsKPiArICAgIGZy ZWUodnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWcpOwo+ICsgICAgZnJl ZSh2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjKTsKPiArICAgIGZyZWUodnZjYy0+cHRsLmdl bmVyYWxfc3ViX3Byb2ZpbGVfaWRjKTsKPiArCj4gKyAgICB2dmNjLT5udW1fb2ZfYXJyYXlzID0g MDsKPiArICAgIGF2X2ZyZWVwKCZ2dmNjLT5hcnJheSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg dnZjY193cml0ZShBVklPQ29udGV4dCAqcGIsIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3Jk ICp2dmNjKQo+ICt7Cj4gKyAgICB1aW50OF90IGk7Cj4gKyAgICB1aW50MTZfdCBqLCB2cHNfY291 bnQgPSAwLCBzcHNfY291bnQgPSAwLCBwcHNfY291bnQgPSAwOwo+ICsgICAgdW5zaWduZWQgY2hh ciAqYnVmID0gTlVMTDsKPiArICAgIC8qCj4gKyAgICAgKiBJdCdzIHVuY2xlYXIgaG93IHRvIHBy b3Blcmx5IGNvbXB1dGUgdGhlc2UgZmllbGRzLCBzbwo+ICsgICAgICogbGV0J3MgYWx3YXlzIHNl dCB0aGVtIHRvIHZhbHVlcyBtZWFuaW5nICd1bnNwZWNpZmllZCcuCj4gKyAgICAgKi8KPiArICAg IHZ2Y2MtPmF2Z19mcmFtZV9yYXRlID0gMDsKPiArICAgIHZ2Y2MtPmNvbnN0YW50X2ZyYW1lX3Jh dGUgPSAxOwo+ICsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCj4gKyAgICAgICAg ICAgImxlbmd0aFNpemVNaW51c09uZTogICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAo+ ICsgICAgICAgICAgIHZ2Y2MtPmxlbmd0aFNpemVNaW51c09uZSk7Cj4gKyAgICBhdl9sb2coTlVM TCwgQVZfTE9HX1RSQUNFLAo+ICsgICAgICAgICAgICJwdGxfcHJlc2VudF9mbGFnOiAgICAgICAg ICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwKPiArICAgICAgICAgICB2dmNjLT5wdGxfcHJlc2Vu dF9mbGFnKTsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCj4gKyAgICAgICAgICAg Im9sc19pZHg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIiBQUkl1MTYgIlxuIiwgdnZj Yy0+b2xzX2lkeCk7Cj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAo+ICsgICAgICAg ICAgICJudW1fc3VibGF5ZXJzOiAgICAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwK PiArICAgICAgICAgICB2dmNjLT5udW1fc3VibGF5ZXJzKTsKPiArICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfVFJBQ0UsCj4gKyAgICAgICAgICAgImNvbnN0YW50X2ZyYW1lX3JhdGU6ICAgICAgICAg ICAgICAgICAlIiBQUkl1OCAiXG4iLAo+ICsgICAgICAgICAgIHZ2Y2MtPmNvbnN0YW50X2ZyYW1l X3JhdGUpOwo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKPiArICAgICAgICAgICAi Y2hyb21hX2Zvcm1hdF9pZGM6ICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCj4gKyAg ICAgICAgICAgdnZjYy0+Y2hyb21hX2Zvcm1hdF9pZGMpOwo+ICsKPiArICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfVFJBQ0UsCj4gKyAgICAgICAgICAgImJpdF9kZXB0aF9taW51czg6ICAgICAgICAg ICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAo+ICsgICAgICAgICAgIHZ2Y2MtPmJpdF9kZXB0aF9t aW51czgpOwo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKPiArICAgICAgICAgICAi bnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbzogICAgICAgICAgICUiIFBSSXU4ICJcbiIsCj4gKyAg ICAgICAgICAgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8pOwo+ICsgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKPiArICAgICAgICAgICAiZ2VuZXJhbF9wcm9maWxlX2lk YzogICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCj4gKyAgICAgICAgICAgdnZjYy0+cHRs LmdlbmVyYWxfcHJvZmlsZV9pZGMpOwo+ICsgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwK PiArICAgICAgICAgICAiZ2VuZXJhbF90aWVyX2ZsYWc6ICAgICAgICAgICAgICAgICAgICUiIFBS SXU4ICJcbiIsCj4gKyAgICAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfdGllcl9mbGFnKTsKPiAr ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCj4gKyAgICAgICAgICAgImdlbmVyYWxfbGV2 ZWxfaWRjOiAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAo+ICsgICAgICAgICAgIHZ2 Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYyk7Cj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RS QUNFLAo+ICsgICAgICAgICAgICJwdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWc6ICAgICAg JSIgUFJJdTggIlxuIiwKPiArICAgICAgICAgICB2dmNjLT5wdGwucHRsX2ZyYW1lX29ubHlfY29u c3RyYWludF9mbGFnKTsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCj4gKyAgICAg ICAgICAgInB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZzogICAgICAgICAlIiBQUkl1OCAiXG4i LAo+ICsgICAgICAgICAgIHZ2Y2MtPnB0bC5wdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWcpOwo+ ICsgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZv OyBpKyspIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAo+ICsgICAgICAg ICAgICAgICAiZ2VuZXJhbF9jb25zdHJhaW50X2luZm9bJWRdOiAgICAgICAgICAlIiBQUkl1OCAi XG4iLCBpLAo+ICsgICAgICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9jb25zdHJhaW50X2lu Zm9baV0pOwo+ICsgICAgfQo+ICsKPiArICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5udW1fc3Vi bGF5ZXJzIC0gMTsgaSsrKSB7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwK PiArICAgICAgICAgICAgICAgInB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbJSIgUFJJ dTggIl06ICAlIiBQUkl1OCAiXG4iLCBpLAo+ICsgICAgICAgICAgICAgICB2dmNjLT5wdGwucHRs X3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSk7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEws IEFWX0xPR19UUkFDRSwKPiArICAgICAgICAgICAgICAgInN1YmxheWVyX2xldmVsX2lkY1slIiBQ Ukl1OCAiXTogJSIgUFJJdTggIlxuIiwgaSwKPiArICAgICAgICAgICAgICAgdnZjYy0+cHRsLnN1 YmxheWVyX2xldmVsX2lkY1tpXSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19UUkFDRSwKPiArICAgICAgICAgICAibnVtX3N1Yl9wcm9maWxlczogICAgICAgICAgICAg ICAgICAgICUiIFBSSXU4ICJcbiIsCj4gKyAgICAgICAgICAgdnZjYy0+cHRsLnB0bF9udW1fc3Vi X3Byb2ZpbGVzKTsKPiArCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+cHRsLnB0bF9udW1f c3ViX3Byb2ZpbGVzOyBpKyspIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNF LAo+ICsgICAgICAgICAgICAgICAiZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNbJSIgUFJJdTggIl06 ICAgICAgICAgJSIgUFJJeDMyICJcbiIsIGksCj4gKyAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5n ZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tpXSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19UUkFDRSwKPiArICAgICAgICAgICAibWF4X3BpY3R1cmVfd2lkdGg6ICAgICAg ICAgICAgICAgICAgICUiIFBSSXUxNiAiXG4iLAo+ICsgICAgICAgICAgIHZ2Y2MtPm1heF9waWN0 dXJlX3dpZHRoKTsKPiArICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCj4gKyAgICAgICAg ICAgIm1heF9waWN0dXJlX2hlaWdodDogICAgICAgICAgICAgICAgICAlIiBQUkl1MTYgIlxuIiwK PiArICAgICAgICAgICB2dmNjLT5tYXhfcGljdHVyZV9oZWlnaHQpOwo+ICsgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19UUkFDRSwKPiArICAgICAgICAgICAiYXZnX2ZyYW1lX3JhdGU6ICAgICAgICAg ICAgICAgICAgICAgICUiIFBSSXUxNiAiXG4iLAo+ICsgICAgICAgICAgIHZ2Y2MtPmF2Z19mcmFt ZV9yYXRlKTsKPiArCj4gKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAo+ICsgICAgICAg ICAgICJudW1fb2ZfYXJyYXlzOiAgICAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTggIlxuIiwK PiArICAgICAgICAgICB2dmNjLT5udW1fb2ZfYXJyYXlzKTsKPiArICAgIGZvciAoaSA9IDA7IGkg PCB2dmNjLT5udW1fb2ZfYXJyYXlzOyBpKyspIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX1RSQUNFLAo+ICsgICAgICAgICAgICAgICAiYXJyYXlfY29tcGxldGVuZXNzWyUiIFBSSXU4 ICJdOiAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsIGksCj4gKyAgICAgICAgICAgICAgIHZ2 Y2MtPmFycmF5W2ldLmFycmF5X2NvbXBsZXRlbmVzcyk7Cj4gKyAgICAgICAgYXZfbG9nKE5VTEws IEFWX0xPR19UUkFDRSwKPiArICAgICAgICAgICAgICAgIk5BTF91bml0X3R5cGVbJSIgUFJJdTgg Il06ICAgICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLCBpLAo+ICsgICAgICAgICAgICAg ICB2dmNjLT5hcnJheVtpXS5OQUxfdW5pdF90eXBlKTsKPiArICAgICAgICBhdl9sb2coTlVMTCwg QVZfTE9HX1RSQUNFLAo+ICsgICAgICAgICAgICAgICAibnVtX25hbHVzWyUiIFBSSXU4ICJdOiAg ICAgICAgICAgICAgICAgICAgICAgICUiIFBSSXUxNiAiXG4iLCBpLAo+ICsgICAgICAgICAgICAg ICB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXMpOwo+ICsgICAgICAgIGZvciAoaiA9IDA7IGogPCB2 dmNjLT5hcnJheVtpXS5udW1fbmFsdXM7IGorKykKPiArICAgICAgICAgICAgYXZfbG9nKE5VTEws IEFWX0xPR19UUkFDRSwKPiArICAgICAgICAgICAgICAgICAgICJuYWxfdW5pdF9sZW5ndGhbJSIg UFJJdTggIl1bJSIgUFJJdTE2ICJdOiAgICAgICAgICAgICAgICUiCj4gKyAgICAgICAgICAgICAg ICAgICBQUkl1MTYgIlxuIiwgaSwgaiwgdnZjYy0+YXJyYXlbaV0ubmFsX3VuaXRfbGVuZ3RoW2pd KTsKPiArICAgIH0KPiArCj4gKyAgICAvKgo+ICsgICAgICogV2UgbmVlZCBhdCBsZWFzdCBvbmUg b2YgZWFjaDogVlBTIGFuZCBTUFMuCj4gKyAgICAgKi8KPiArICAgIGZvciAoaSA9IDA7IGkgPCB2 dmNjLT5udW1fb2ZfYXJyYXlzOyBpKyspCj4gKyAgICAgICAgc3dpdGNoICh2dmNjLT5hcnJheVtp XS5OQUxfdW5pdF90eXBlKSB7Cj4gKyAgICAgICAgY2FzZSBWVkNfVlBTX05VVDoKPiArICAgICAg ICAgICAgdnBzX2NvdW50ICs9IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1czsKPiArICAgICAgICAg ICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSBWVkNfU1BTX05VVDoKPiArICAgICAgICAgICAgc3Bz X2NvdW50ICs9IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1czsKPiArICAgICAgICAgICAgYnJlYWs7 Cj4gKyAgICAgICAgY2FzZSBWVkNfUFBTX05VVDoKPiArICAgICAgICAgICAgcHBzX2NvdW50ICs9 IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1czsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAg ICAgZGVmYXVsdDoKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsKPiArICAg IGlmICghc3BzX2NvdW50IHx8IHNwc19jb3VudCA+IFZWQ19NQVhfU1BTX0NPVU5UKQo+ICsgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsKPiArICAgIC8qIGJpdCg1KSByZXNl cnZlZCA9IOKAmDExMTEx4oCZYjsKPiArICAgICAgIHVuc2lnbmVkIGludCAoMikgTGVuZ3RoU2l6 ZU1pbnVzT25lCj4gKyAgICAgICB1bnNpZ25lZCBpbnQgKDEpIHB0bF9wcmVzZW50X2ZsYWcgKi8K PiArICAgIGF2aW9fdzgocGIsIHZ2Y2MtPmxlbmd0aFNpemVNaW51c09uZSA8PCAxIHwgdnZjYy0+ cHRsX3ByZXNlbnRfZmxhZyB8IDB4ZjgpOwo+ICsKPiArICAgIGlmICh2dmNjLT5wdGxfcHJlc2Vu dF9mbGFnKSB7Cj4gKyAgICAgICAgLyoKPiArICAgICAgICAgKiB1bnNpZ25lZCBpbnQoOSkgb2xz X2lkeDsKPiArICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMykgbnVtX3N1YmxheWVyczsKPiArICAg ICAgICAgKiB1bnNpZ25lZCBpbnQoMikgY29uc3RhbnRfZnJhbWVfcmF0ZTsKPiArICAgICAgICAg KiB1bnNpZ25lZCBpbnQoMikgY2hyb21hX2Zvcm1hdF9pZGM7ICAgICAqLwo+ICsgICAgICAgIGF2 aW9fd2IxNihwYiwKPiArICAgICAgICAgICAgICAgICAgdnZjYy0+b2xzX2lkeCA8PCA3IHwgdnZj Yy0+bnVtX3N1YmxheWVycyA8PCA0IHwgdnZjYy0+Cj4gKyAgICAgICAgICAgICAgICAgIGNvbnN0 YW50X2ZyYW1lX3JhdGUgPDwgMiB8IHZ2Y2MtPmNocm9tYV9mb3JtYXRfaWRjKTsKPiArCj4gKyAg ICAgICAgLyogdW5zaWduZWQgaW50KDMpIGJpdF9kZXB0aF9taW51czg7Cj4gKyAgICAgICAgICAg Yml0KDUpIHJlc2VydmVkID0g4oCYMTExMTHigJliOyAqLwo+ICsgICAgICAgIGF2aW9fdzgocGIs IHZ2Y2MtPmJpdF9kZXB0aF9taW51czggPDwgNSB8IDB4MWYpOwo+ICsKPiArICAgICAgICAvL1ZW Q1BUTFJlY29yZAo+ICsKPiArICAgICAgICAvKiBiaXQoMikgcmVzZXJ2ZWQgPSDigJgwMOKAmWI7 Cj4gKyAgICAgICAgICAgdW5zaWduZWQgaW50ICg2KSBudW1fYnl0ZXNfY29uc3RyYWludF9pbmZv ICovCj4gKyAgICAgICAgYXZpb193OChwYiwgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50 X2luZm8gJiAweDNmKTsKPiArCj4gKyAgICAgICAgLyogdW5zaWduZWQgaW50ICg3KSBnZW5lcmFs X3Byb2ZpbGVfaWRjCj4gKyAgICAgICAgICAgdW5zaWduZWQgaW50ICgxKSBnZW5lcmFsX3RpZXJf ZmxhZyAqLwo+ICsgICAgICAgIGF2aW9fdzgocGIsCj4gKyAgICAgICAgICAgICAgICB2dmNjLT5w dGwuZ2VuZXJhbF9wcm9maWxlX2lkYyA8PCAxIHwgdnZjYy0+cHRsLmdlbmVyYWxfdGllcl9mbGFn KTsKPiArCj4gKyAgICAgICAgLyogdW5zaWduZWQgaW50ICg4KSBnZW5lcmFsX2xldmVsX2lkYyAq Lwo+ICsgICAgICAgIGF2aW9fdzgocGIsIHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYyk7Cj4g Kwo+ICsgICAgICAgIC8qCj4gKyAgICAgICAgICogdW5zaWduZWQgaW50ICgxKSBwdGxfZnJhbWVf b25seV9jb25zdHJhaW50X2ZsYWcKPiArICAgICAgICAgKiB1bnNpZ25lZCBpbnQgKDEpIHB0bF9t dWx0aWxheWVyX2VuYWJsZWRfZmxhZwo+ICsgICAgICAgICAqIHVuc2lnbmVkIGludCAoOCpudW1f Ynl0ZXNfY29uc3RyYWludF9pbmZvIC0yKSBnZW5lcmFsX2NvbnN0cmFpbnRfaW5mbyAqLwo+ICsg ICAgICAgIGJ1ZiA9Cj4gKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopIG1hbGxvYyhzaXpl b2YodW5zaWduZWQgY2hhcikgKgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8pOwo+ICsgICAgICAgICpidWYg PSB2dmNjLT5wdGwucHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnIDw8IHZ2Y2MtPnB0bC4K PiArICAgICAgICAgICAgbnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyAqIDggLSAxIHwgdnZjYy0+ cHRsLgo+ICsgICAgICAgICAgICBwdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWcgPDwgdnZjYy0+ cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8gKgo+ICsgICAgICAgICAgICA4IC0gMiB8ICp2 dmNjLT5wdGwuZ2VuZXJhbF9jb25zdHJhaW50X2luZm8gPj4gMjsKPiArICAgICAgICBhdmlvX3dy aXRlKHBiLCBidWYsIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvKTsKPiArICAg ICAgICBmcmVlKGJ1Zik7Cj4gKwo+ICsgICAgICAgIGlmICh2dmNjLT5udW1fc3VibGF5ZXJzID4g MSkgewo+ICsgICAgICAgICAgICB1aW50OF90IHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2Zs YWdzID0gMDsKPiArICAgICAgICAgICAgZm9yIChpbnQgaSA9IHZ2Y2MtPm51bV9zdWJsYXllcnMg LSAyOyBpID49IDA7IGktLSkgewo+ICsgICAgICAgICAgICAgICAgcHRsX3N1YmxheWVyX2xldmVs X3ByZXNlbnRfZmxhZ3MgPQo+ICsgICAgICAgICAgICAgICAgICAgIChwdGxfc3VibGF5ZXJfbGV2 ZWxfcHJlc2VudF9mbGFncyA8PCAxIHwgdnZjYy0+cHRsLgo+ICsgICAgICAgICAgICAgICAgICAg ICBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldKTsKPiArICAgICAgICAgICAgfQo+ ICsgICAgICAgICAgICBhdmlvX3c4KHBiLCBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFn cyk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBmb3IgKGludCBpID0gdnZjYy0+bnVtX3N1 YmxheWVycyAtIDI7IGkgPj0gMDsgaS0tKSB7Cj4gKyAgICAgICAgICAgIGlmICh2dmNjLT5wdGwu cHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSkKPiArICAgICAgICAgICAgICAgIGF2 aW9fdzgocGIsIHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0pOwo+ICsgICAgICAgIH0K PiArCj4gKyAgICAgICAgLyogdW5zaWduZWQgaW50KDgpIG51bV9zdWJfcHJvZmlsZXM7ICovCj4g KyAgICAgICAgYXZpb193OChwYiwgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzKTsKPiAr Cj4gKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJv ZmlsZXM7IGorKykgewo+ICsgICAgICAgICAgICAvKiB1bnNpZ25lZCBpbnQoMzIpIGdlbmVyYWxf c3ViX3Byb2ZpbGVfaWRjW2pdOyAqLwo+ICsgICAgICAgICAgICBhdmlvX3diMzIocGIsIHZ2Y2Mt PnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tqXSk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAg ICAgICAvL0VuZCBvZiBWdmNQVExSZWNvcmQKPiArCj4gKyAgICAgICAgLyoKPiArICAgICAgICAg KiB1bnNpZ25lZCBpbnQoMTYpIG1heF9waWN0dXJlX3dpZHRoOyovCj4gKyAgICAgICAgYXZpb193 YjE2KHBiLCB2dmNjLT5tYXhfcGljdHVyZV93aWR0aCk7Cj4gKwo+ICsgICAgICAgIC8qCj4gKyAg ICAgICAgICogdW5zaWduZWQgaW50KDE2KSBtYXhfcGljdHVyZV9oZWlnaHQ7Ki8KPiArICAgICAg ICBhdmlvX3diMTYocGIsIHZ2Y2MtPm1heF9waWN0dXJlX2hlaWdodCk7Cj4gKwo+ICsgICAgICAg IC8qCj4gKyAgICAgICAgICogdW5zaWduZWQgaW50KDE2KSBhdmdfZnJhbWVfcmF0ZTsgKi8KPiAr ICAgICAgICBhdmlvX3diMTYocGIsIHZ2Y2MtPmF2Z19mcmFtZV9yYXRlKTsKPiArICAgIH0KPiAr Cj4gKyAgICAvKiB1bnNpZ25lZCBpbnQoOCkgbnVtX29mX2FycmF5czsgKi8KPiArICAgIGF2aW9f dzgocGIsIHZ2Y2MtPm51bV9vZl9hcnJheXMpOwo+ICsKPiArICAgIGZvciAoaSA9IDA7IGkgPCB2 dmNjLT5udW1fb2ZfYXJyYXlzOyBpKyspIHsKPiArICAgICAgICAvKgo+ICsgICAgICAgICAqIGJp dCgxKSBhcnJheV9jb21wbGV0ZW5lc3M7Cj4gKyAgICAgICAgICogdW5zaWduZWQgaW50KDIpIHJl c2VydmVkID0gMDsKPiArICAgICAgICAgKiB1bnNpZ25lZCBpbnQoNSkgTkFMX3VuaXRfdHlwZTsK PiArICAgICAgICAgKi8KPiArICAgICAgICBhdmlvX3c4KHBiLCB2dmNjLT5hcnJheVtpXS5hcnJh eV9jb21wbGV0ZW5lc3MgPDwgNyB8Cj4gKyAgICAgICAgICAgICAgICB2dmNjLT5hcnJheVtpXS5O QUxfdW5pdF90eXBlICYgMHgxZik7Cj4gKyAgICAgICAgLyogdW5zaWduZWQgaW50KDE2KSBudW1f bmFsdXM7ICovCj4gKyAgICAgICAgaWYgKHZ2Y2MtPmFycmF5W2ldLk5BTF91bml0X3R5cGUgIT0g VlZDX0RDSV9OVVQgJiYKPiArICAgICAgICAgICAgdnZjYy0+YXJyYXlbaV0uTkFMX3VuaXRfdHlw ZSAhPSBWVkNfT1BJX05VVCkKPiArICAgICAgICAgICAgYXZpb193YjE2KHBiLCB2dmNjLT5hcnJh eVtpXS5udW1fbmFsdXMpOwo+ICsgICAgICAgIGZvciAoaiA9IDA7IGogPCB2dmNjLT5hcnJheVtp XS5udW1fbmFsdXM7IGorKykgewo+ICsgICAgICAgICAgICAvKiB1bnNpZ25lZCBpbnQoMTYpIG5h bF91bml0X2xlbmd0aDsgKi8KPiArICAgICAgICAgICAgYXZpb193YjE2KHBiLCB2dmNjLT5hcnJh eVtpXS5uYWxfdW5pdF9sZW5ndGhbal0pOwo+ICsKPiArICAgICAgICAgICAgLyogYml0KDgqbmFs X3VuaXRfbGVuZ3RoKSBuYWxfdW5pdDsgKi8KPiArICAgICAgICAgICAgYXZpb193cml0ZShwYiwg dnZjYy0+YXJyYXlbaV0ubmFsX3VuaXRbal0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgdnZj Yy0+YXJyYXlbaV0ubmFsX3VuaXRfbGVuZ3RoW2pdKTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4g Kwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBmZl9oMjY2X2FubmV4YjJtcDQoQVZJ T0NvbnRleHQgKnBiLCBjb25zdCB1aW50OF90ICpidWZfaW4sCj4gKyAgICAgICAgICAgICAgICAg ICAgICBpbnQgc2l6ZSwgaW50IGZpbHRlcl9wcywgaW50ICpwc19jb3VudCkKPiArewo+ICsgICAg aW50IG51bV9wcyA9IDAsIHJldCA9IDA7Cj4gKyAgICB1aW50OF90ICpidWYsICplbmQsICpzdGFy dCA9IE5VTEw7Cj4gKwo+ICsgICAgaWYgKCFmaWx0ZXJfcHMpIHsKPiArICAgICAgICByZXQgPSBm Zl9hdmNfcGFyc2VfbmFsX3VuaXRzKHBiLCBidWZfaW4sIHNpemUpOwo+ICsgICAgICAgIGdvdG8g ZW5kOwo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9IGZmX2F2Y19wYXJzZV9uYWxfdW5pdHNfYnVm KGJ1Zl9pbiwgJnN0YXJ0LCAmc2l6ZSk7Cj4gKyAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICBn b3RvIGVuZDsKPiArCj4gKyAgICByZXQgPSAwOwo+ICsgICAgYnVmID0gc3RhcnQ7Cj4gKyAgICBl bmQgPSBzdGFydCArIHNpemU7Cj4gKwo+ICsgICAgd2hpbGUgKGVuZCAtIGJ1ZiA+IDQpIHsKPiAr ICAgICAgICB1aW50MzJfdCBsZW4gPSBGRk1JTihBVl9SQjMyKGJ1ZiksIGVuZCAtIGJ1ZiAtIDQp Owo+ICsgICAgICAgIHVpbnQ4X3QgdHlwZSA9IChidWZbNV0gPj4gMyk7Cj4gKwo+ICsgICAgICAg IGJ1ZiArPSA0Owo+ICsKPiArICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKPiArICAgICAgICBjYXNl IFZWQ19WUFNfTlVUOgo+ICsgICAgICAgIGNhc2UgVlZDX1NQU19OVVQ6Cj4gKyAgICAgICAgY2Fz ZSBWVkNfUFBTX05VVDoKPiArICAgICAgICAgICAgbnVtX3BzKys7Cj4gKyAgICAgICAgICAgIGJy ZWFrOwo+ICsgICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAgIHJldCArPSA0ICsgbGVuOwo+ ICsgICAgICAgICAgICBhdmlvX3diMzIocGIsIGxlbik7Cj4gKyAgICAgICAgICAgIGF2aW9fd3Jp dGUocGIsIGJ1ZiwgbGVuKTsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsK PiArICAgICAgICBidWYgKz0gbGVuOwo+ICsgICAgfQo+ICsKPiArICBlbmQ6Cj4gKyAgICBhdl9m cmVlKHN0YXJ0KTsKPiArICAgIGlmIChwc19jb3VudCkKPiArICAgICAgICAqcHNfY291bnQgPSBu dW1fcHM7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQgZmZfaDI2Nl9hbm5leGIy bXA0X2J1Zihjb25zdCB1aW50OF90ICpidWZfaW4sIHVpbnQ4X3QgKipidWZfb3V0LAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCAqc2l6ZSwgaW50IGZpbHRlcl9wcywgaW50ICpwc19j b3VudCkKPiArewo+ICsgICAgQVZJT0NvbnRleHQgKnBiOwo+ICsgICAgaW50IHJldDsKPiArCj4g KyAgICByZXQgPSBhdmlvX29wZW5fZHluX2J1ZigmcGIpOwo+ICsgICAgaWYgKHJldCA8IDApCj4g KyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICByZXQgPSBmZl9oMjY2X2FubmV4YjJtcDQo cGIsIGJ1Zl9pbiwgKnNpemUsIGZpbHRlcl9wcywgcHNfY291bnQpOwo+ICsgICAgaWYgKHJldCA8 IDApIHsKPiArICAgICAgICBmZmlvX2ZyZWVfZHluX2J1ZigmcGIpOwo+ICsgICAgICAgIHJldHVy biByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgKnNpemUgPSBhdmlvX2Nsb3NlX2R5bl9idWYocGIs IGJ1Zl9vdXQpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgZmZfaXNvbV93 cml0ZV92dmNjKEFWSU9Db250ZXh0ICpwYiwgY29uc3QgdWludDhfdCAqZGF0YSwKPiArICAgICAg ICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwgaW50IHBzX2FycmF5X2NvbXBsZXRlbmVzcykKPiAr ewo+ICsgICAgVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgdnZjYzsKPiArICAgIHVpbnQ4 X3QgKmJ1ZiwgKmVuZCwgKnN0YXJ0Owo+ICsgICAgaW50IHJldDsKPiArCj4gKyAgICBpZiAoc2l6 ZSA8IDYpIHsKPiArICAgICAgICAvKiBXZSBjYW4ndCB3cml0ZSBhIHZhbGlkIHZ2Y2MgZnJvbSB0 aGUgcHJvdmlkZWQgZGF0YSAqLwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB Owo+ICsgICAgfSBlbHNlIGlmICgqZGF0YSA9PSAxKSB7Cj4gKyAgICAgICAgLyogRGF0YSBpcyBh bHJlYWR5IHZ2Y2MtZm9ybWF0dGVkICovCj4gKyAgICAgICAgYXZpb193cml0ZShwYiwgZGF0YSwg c2l6ZSk7Cj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICB9IGVsc2UgaWYgKCEoQVZfUkIyNChk YXRhKSA9PSAxIHx8IEFWX1JCMzIoZGF0YSkgPT0gMSkpIHsKPiArICAgICAgICAvKiBOb3QgYSB2 YWxpZCBBbm5leCBCIHN0YXJ0IGNvZGUgcHJlZml4ICovCj4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gZmZfYXZjX3BhcnNlX25h bF91bml0c19idWYoZGF0YSwgJnN0YXJ0LCAmc2l6ZSk7Cj4gKyAgICBpZiAocmV0IDwgMCkKPiAr ICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIHZ2Y2NfaW5pdCgmdnZjYyk7Cj4gKwo+ICsg ICAgYnVmID0gc3RhcnQ7Cj4gKyAgICBlbmQgPSBzdGFydCArIHNpemU7Cj4gKwo+ICsgICAgd2hp bGUgKGVuZCAtIGJ1ZiA+IDQpIHsKPiArICAgICAgICB1aW50MzJfdCBsZW4gPSBGRk1JTihBVl9S QjMyKGJ1ZiksIGVuZCAtIGJ1ZiAtIDQpOwo+ICsgICAgICAgIHVpbnQ4X3QgdHlwZSA9IChidWZb NV0gPj4gMyk7Cj4gKwo+ICsgICAgICAgIGJ1ZiArPSA0Owo+ICsKPiArICAgICAgICBzd2l0Y2gg KHR5cGUpIHsKPiArICAgICAgICBjYXNlIFZWQ19PUElfTlVUOgo+ICsgICAgICAgIGNhc2UgVlZD X1ZQU19OVVQ6Cj4gKyAgICAgICAgY2FzZSBWVkNfU1BTX05VVDoKPiArICAgICAgICBjYXNlIFZW Q19QUFNfTlVUOgo+ICsgICAgICAgIGNhc2UgVlZDX1BSRUZJWF9TRUlfTlVUOgo+ICsgICAgICAg IGNhc2UgVlZDX1NVRkZJWF9TRUlfTlVUOgo+ICsgICAgICAgICAgICByZXQgPSB2dmNjX2FkZF9u YWxfdW5pdChidWYsIGxlbiwgcHNfYXJyYXlfY29tcGxldGVuZXNzLCAmdnZjYyk7Cj4gKyAgICAg ICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICAgICAgZ290byBlbmQ7Cj4gKyAgICAg ICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgYnVmICs9IGxlbjsKPiArICAgIH0KPiArCj4gKyAg ICByZXQgPSB2dmNjX3dyaXRlKHBiLCAmdnZjYyk7Cj4gKwo+ICsgIGVuZDoKPiArICAgIHZ2Y2Nf Y2xvc2UoJnZ2Y2MpOwo+ICsgICAgYXZfZnJlZShzdGFydCk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ ICt9Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3Z2Yy5oIGIvbGliYXZmb3JtYXQvdnZjLmgK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLmY1ODE0NWU0YWUKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZmb3JtYXQvdnZjLmgKPiBAQCAtMCwwICsxLDk5IEBA Cj4gKy8qCj4gKyAqIEguMjY2IC8gVlZDIGhlbHBlciBmdW5jdGlvbnMgZm9yIG11eGVycwo+ICsg Kgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5j LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQQo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBAZmlsZQo+ICsgKiBpbnRlcm5hbCBoZWFkZXIg Zm9yIEguMjY2L1ZWQyAoZGUpbXV4ZXIgdXRpbGl0aWVzCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBB VkZPUk1BVF9IMjY2X0gKPiArI2RlZmluZSBBVkZPUk1BVF9IMjY2X0gKPiArCj4gKyNpbmNsdWRl IDxzdGRpbnQuaD4KPiArI2luY2x1ZGUgImF2aW8uaCIKPiArCj4gKy8qKgo+ICsgKiBXcml0ZXMg QW5uZXggQiBmb3JtYXR0ZWQgSC4yNjYvVlZDIE5BTCB1bml0cyB0byB0aGUgcHJvdmlkZWQgQVZJ T0NvbnRleHQuCj4gKyAqCj4gKyAqIFRoZSBOQUwgdW5pdHMgYXJlIGNvbnZlcnRlZCB0byBhbiBN UDQtY29tcGF0aWJsZSBmb3JtYXQgKHN0YXJ0IGNvZGUgcHJlZml4ZXMKPiArICogYXJlIHJlcGxh Y2VkIGJ5IDQtYnl0ZSBzaXplIGZpZWxkcywgYXMgcGVyIElTTy9JRUMgMTQ0OTYtMTUpLgo+ICsg Kgo+ICsgKiBJZiBmaWx0ZXJfcHMgaXMgbm9uLXplcm8sIGFueSBWVkMgcGFyYW1ldGVyIHNldHMg Zm91bmQgaW4gdGhlIGlucHV0IHdpbGwgYmUKPiArICogZGlzY2FyZGVkLCBhbmQgKnBzX2NvdW50 IHdpbGwgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgZGlzY2FyZGVkIFBTIE5BTCB1bml0cy4KPiAr ICoKPiArICogQHBhcmFtIHBiIGFkZHJlc3Mgb2YgdGhlIEFWSU9Db250ZXh0IHdoZXJlIHRoZSBk YXRhIHNoYWxsIGJlIHdyaXR0ZW4KPiArICogQHBhcmFtIGJ1Zl9pbiBhZGRyZXNzIG9mIHRoZSBi dWZmZXIgaG9sZGluZyB0aGUgaW5wdXQgZGF0YQo+ICsgKiBAcGFyYW0gc2l6ZSBzaXplIChpbiBi eXRlcykgb2YgdGhlIGlucHV0IGJ1ZmZlcgo+ICsgKiBAcGFyYW0gZmlsdGVyX3BzIHdoZXRoZXIg dG8gd3JpdGUgcGFyYW1ldGVyIHNldCBOQUwgdW5pdHMgdG8gdGhlIG91dHB1dCAoMCkKPiArICog ICAgICAgIG9yIHRvIGRpc2NhcmQgdGhlbSAobm9uLXplcm8pCj4gKyAqIEBwYXJhbSBwc19jb3Vu dCBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSB3aGVyZSB0aGUgbnVtYmVyIG9mIGRpc2NhcmRlZAo+ ICsgKiAgICAgICAgcGFyYW1ldGVyIHNldCBOQUwgdW5pdHMgc2hhbGwgYmUgd3JpdHRlbiwgbWF5 IGJlIE5VTEwKPiArICogQHJldHVybiB0aGUgYW1vdW50IChpbiBieXRlcykgb2YgZGF0YSB3cml0 dGVuIGluIGNhc2Ugb2Ygc3VjY2VzcywgYSBuZWdhdGl2ZQo+ICsgKiAgICAgICAgIHZhbHVlIGNv cnJlc3BvbmRpbmcgdG8gYW4gQVZFUlJPUiBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZQo+ICsgKi8K PiAraW50IGZmX2gyNjZfYW5uZXhiMm1wNChBVklPQ29udGV4dCAqcGIsIGNvbnN0IHVpbnQ4X3Qg KmJ1Zl9pbiwKPiArICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplLCBpbnQgZmlsdGVyX3Bz LCBpbnQgKnBzX2NvdW50KTsKPiArCj4gKy8qKgo+ICsgKiBXcml0ZXMgQW5uZXggQiBmb3JtYXR0 ZWQgSC4yNjYvVlZDIE5BTCB1bml0cyB0byBhIGRhdGEgYnVmZmVyLgo+ICsgKgo+ICsgKiBUaGUg TkFMIHVuaXRzIGFyZSBjb252ZXJ0ZWQgdG8gYW4gTVA0LWNvbXBhdGlibGUgZm9ybWF0IChzdGFy dCBjb2RlIHByZWZpeGVzCj4gKyAqIGFyZSByZXBsYWNlZCBieSA0LWJ5dGUgc2l6ZSBmaWVsZHMs IGFzIHBlciBJU08vSUVDIDE0NDk2LTE1KS4KPiArICoKPiArICogSWYgZmlsdGVyX3BzIGlzIG5v bi16ZXJvLCBhbnkgVlZDIHBhcmFtZXRlciBzZXRzIGZvdW5kIGluIHRoZSBpbnB1dCB3aWxsIGJl Cj4gKyAqIGRpc2NhcmRlZCwgYW5kICpwc19jb3VudCB3aWxsIGJlIHNldCB0byB0aGUgbnVtYmVy IG9mIGRpc2NhcmRlZCBQUyBOQUwgdW5pdHMuCj4gKyAqCj4gKyAqIE9uIHN1Y2Nlc3MsICpzaXpl IGhvbGRzIHRoZSBzaXplIChpbiBieXRlcykgb2YgdGhlIG91dHB1dCBkYXRhIGJ1ZmZlci4KPiAr ICoKPiArICogQHBhcmFtIGJ1Zl9pbiBhZGRyZXNzIG9mIHRoZSBidWZmZXIgaG9sZGluZyB0aGUg aW5wdXQgZGF0YQo+ICsgKiBAcGFyYW0gc2l6ZSBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSBob2xk aW5nIHRoZSBzaXplIChpbiBieXRlcykgb2YgdGhlIGlucHV0Cj4gKyAqICAgICAgICBidWZmZXIg KG9uIGlucHV0KSBhbmQgb2YgdGhlIG91dHB1dCBidWZmZXIgKG9uIHN1Y2Nlc3MpCj4gKyAqIEBw YXJhbSBidWZfb3V0IG9uIHN1Y2Nlc3MsIGFkZHJlc3Mgb2YgdGhlIHZhcmlhYmxlIGhvbGRpbmcg dGhlIGFkZHJlc3Mgb2YKPiArICogICAgICAgIHRoZSBvdXRwdXQgYnVmZmVyCj4gKyAqIEBwYXJh bSBmaWx0ZXJfcHMgd2hldGhlciB0byB3cml0ZSBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0cyB0byB0 aGUgb3V0cHV0ICgwKQo+ICsgKiAgICAgICAgb3IgdG8gZGlzY2FyZCB0aGVtIChub24temVybykK PiArICogQHBhcmFtIHBzX2NvdW50IGFkZHJlc3Mgb2YgdGhlIHZhcmlhYmxlIHdoZXJlIHRoZSBu dW1iZXIgb2YgZGlzY2FyZGVkCj4gKyAqICAgICAgICBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0cyBz aGFsbCBiZSB3cml0dGVuLCBtYXkgYmUgTlVMTAo+ICsgKiBAcmV0dXJuIDAgaW4gY2FzZSBvZiBz dWNjZXNzLCBhIG5lZ2F0aXZlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYW4gQVZFUlJPUgo+ICsg KiAgICAgICAgIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlCj4gKyAqIEBub3RlICpidWZfb3V0IHdp bGwgYmUgdHJlYXRlZCBhcyB1bmluaXRpYWxpemVkIG9uIGlucHV0IGFuZCB3b24ndCBiZSBmcmVl ZC4KPiArICovCj4gK2ludCBmZl9oMjY2X2FubmV4YjJtcDRfYnVmKGNvbnN0IHVpbnQ4X3QgKmJ1 Zl9pbiwgdWludDhfdCAqKmJ1Zl9vdXQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 ICpzaXplLCBpbnQgZmlsdGVyX3BzLCBpbnQgKnBzX2NvdW50KTsKPiArCj4gKy8qKgo+ICsgKiBX cml0ZXMgSC4yNjYvVlZDIGV4dHJhZGF0YSAocGFyYW1ldGVyIHNldHMsIGRlY2xhcmF0aXZlIFNF SSBOQUwgdW5pdHMpIHRvCj4gKyAqIHRoZSBwcm92aWRlZCBBVklPQ29udGV4dC4KPiArICoKPiAr ICogSWYgdGhlIGV4dHJhZGF0YSBpcyBBbm5leCBCIGZvcm1hdCwgaXQgZ2V0cyBjb252ZXJ0ZWQg dG8gdnZjQyBmb3JtYXQgYmVmb3JlCj4gKyAqIHdyaXRpbmcuCj4gKyAqCj4gKyAqIEBwYXJhbSBw YiBhZGRyZXNzIG9mIHRoZSBBVklPQ29udGV4dCB3aGVyZSB0aGUgdnZjQyBzaGFsbCBiZSB3cml0 dGVuCj4gKyAqIEBwYXJhbSBkYXRhIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBob2xkaW5nIHRoZSBk YXRhIG5lZWRlZCB0byB3cml0ZSB0aGUgdnZjQwo+ICsgKiBAcGFyYW0gc2l6ZSBzaXplIChpbiBi eXRlcykgb2YgdGhlIGRhdGEgYnVmZmVyCj4gKyAqIEBwYXJhbSBwc19hcnJheV9jb21wbGV0ZW5l c3Mgd2hldGhlciBhbGwgcGFyYW1ldGVyIHNldHMgYXJlIGluIHRoZSB2dmNDICgxKQo+ICsgKiAg ICAgICAgb3IgdGhlcmUgbWF5IGJlIGFkZGl0aW9uYWwgcGFyYW1ldGVyIHNldHMgaW4gdGhlIGJp dHN0cmVhbSAoMCkKPiArICogQHJldHVybiA+PTAgaW4gY2FzZSBvZiBzdWNjZXNzLCBhIG5lZ2F0 aXZlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYW4gQVZFUlJPUgo+ICsgKiAgICAgICAgIGNvZGUg aW4gY2FzZSBvZiBmYWlsdXJlCj4gKyAqLwo+ICtpbnQgZmZfaXNvbV93cml0ZV92dmNjKEFWSU9D b250ZXh0ICpwYiwgY29uc3QgdWludDhfdCAqZGF0YSwKPiArICAgICAgICAgICAgICAgICAgICAg ICBpbnQgc2l6ZSwgaW50IHBzX2FycmF5X2NvbXBsZXRlbmVzcyk7Cj4gKwo+ICsjZW5kaWYgLyog QVZGT1JNQVRfSDI2Nl9IICovCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5v cmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1 bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVl c3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K