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 AA0934095F for ; Sun, 3 Jul 2022 10:28:27 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5D32E68B9B0; Sun, 3 Jul 2022 13:28:20 +0300 (EEST) Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3949768B98E for ; Sun, 3 Jul 2022 13:28:13 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 85FC42400F5 for ; Sun, 3 Jul 2022 12:28:12 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id vITsvEreZgOL for ; Sun, 3 Jul 2022 12:28:10 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 9A143240179 for ; Sun, 3 Jul 2022 12:28:10 +0200 (CEST) Received: by libav.khirnov.net (Postfix, from userid 1000) id C95583A0909; Sun, 3 Jul 2022 12:28:10 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sun, 3 Jul 2022 12:26:35 +0200 Message-Id: <20220703102636.32523-2-anton@khirnov.net> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220703102636.32523-1-anton@khirnov.net> References: <20220703102636.32523-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/3] lavc: add standalone cached bitstream reader 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: RnJvbTogQWxleGFuZHJhIEjDoWprb3bDoSA8YWxleGFuZHJhLmtoaXJub3ZhQGdtYWlsLmNvbT4K ClRoZSBjYWNoZWQgYml0c3RyZWFtIHJlYWRlciB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEFs ZXhhbmRyYSBIw6Fqa292w6EKZm9yIExpYmF2LCB3aXRoIHNpZ25pZmljYW50IGlucHV0IGZyb20g S29zdHlhIFNoaXNoa292IGFuZCBMdWNhIEJhcmJhdG8uCkl0IHdhcyB0aGVuIGNvbW1pdHRlZCB0 byBGRm1wZWcgaW4gY2EwNzliMDk1NDksIGJ5IG1lcmdpbmcgaXQgd2l0aCB0aGUKaW1wbGVtZW50 YXRpb24gb2YgdGhlIGN1cnJlbnQgYml0c3RyZWFtIHJlYWRlci4KClRoaXMgbWVyZ2UgbWFrZXMg dGhlIGNvZGUgb2YgZ2V0X2JpdHMuaCBzaWduaWZpY2FudGx5IGhhcmRlciB0byByZWFkLApzaW5j ZSBpdCBub3cgY29udGFpbnMgdHdvIGRpZmZlcmVudCBiaXRzdHJlYW0gcmVhZGVycyBpbnRlcmxl YXZlZCB3aXRoCiAjaWZkZWZzLiBBZGRpdGlvbmFsbHksIHRoZSBjb2RlIHdhcyBjb21taXR0ZWQg d2l0aG91dCBwcm9wZXIgYXV0aG9yc2hpcAphdHRyaWJ1dGlvbi4KClRoaXMgY29tbWl0IHJlLWFk ZHMgdGhlIGNhY2hlZCBiaXRzdHJlYW0gcmVhZGVyIGFzIGEgc3RhbmRhbG9uZSBoZWFkZXIsCmFz IGl0IHdhcyBvcmlnaW5hbGx5IGRldmVsb3BlZC4gSXQgd2lsbCBiZSBtYWRlIHVzZWZ1bCBpbiBm b2xsb3dpbmcKY29tbWl0cy4KCkludGVncmF0aW9uIGJ5IEFudG9uIEtoaXJub3YuCgpTaWduZWQt b2ZmLWJ5OiBBbnRvbiBLaGlybm92IDxhbnRvbkBraGlybm92Lm5ldD4KLS0tCkFkZHJlc3NlZCBh bGwgcmV2aWV3IGNvbW1lbnRzIGJ5IEFuZHJlYXMuCgpSZXNlbmRpbmcgb25seSB0aGUgYmlzdHJl YW0gcmVhZGVyIGZvciBub3csIHNpbmNlIGFueSBzaWduaWZpY2FudApjaGFuZ2VzIHRvIGl0IG1l YW4gdGhhdCB0aGUgdGVtcGxhdGl6YXRpb24gcGF0Y2ggbmVlZHMgdG8gYmUgYmFzaWNhbGx5CnJl ZG9uZSBmcm9tIHNjcmF0Y2guIFdpbGwgc2VuZCB0aGUgcmVzdCBhZnRlciB0aGlzIGlzIGFwcHJv dmVkLgotLS0KIGxpYmF2Y29kZWMvYml0c3RyZWFtLmggfCA1NDAgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA1NDAgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvYml0c3RyZWFtLmgKCmRpZmYgLS1naXQg YS9saWJhdmNvZGVjL2JpdHN0cmVhbS5oIGIvbGliYXZjb2RlYy9iaXRzdHJlYW0uaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi41M2JjZGY0NjQzCi0tLSAvZGV2L251bGwK KysrIGIvbGliYXZjb2RlYy9iaXRzdHJlYW0uaApAQCAtMCwwICsxLDU0MCBAQAorLyoKKyAqIENv cHlyaWdodCAoYykgMjAxNiBBbGV4YW5kcmEgSMOhamtvdsOhCisgKgorICogVGhpcyBmaWxlIGlz IHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor ICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3 aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQQorICovCisKKy8qKgorICogQGZpbGUKKyAqIGJpdHN0cmVhbSByZWFkZXIg QVBJIGhlYWRlci4KKyAqLworCisjaWZuZGVmIEFWQ09ERUNfQklUU1RSRUFNX0gKKyNkZWZpbmUg QVZDT0RFQ19CSVRTVFJFQU1fSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlICJj b25maWcuaCIKKworI2luY2x1ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgorI2luY2x1ZGUgImxp YmF2dXRpbC9jb21tb24uaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRlLmgiCisj aW5jbHVkZSAibGliYXZ1dGlsL2xvZy5oIgorCisjaW5jbHVkZSAibWF0aG9wcy5oIgorI2luY2x1 ZGUgInZsYy5oIgorCisjaWZuZGVmIFVOQ0hFQ0tFRF9CSVRTVFJFQU1fUkVBREVSCisjZGVmaW5l IFVOQ0hFQ0tFRF9CSVRTVFJFQU1fUkVBREVSICFDT05GSUdfU0FGRV9CSVRTVFJFQU1fUkVBREVS CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgQml0c3RyZWFtQ29udGV4dCB7CisgICAgdWludDY0 X3QgYml0czsgICAgICAvLyBzdG9yZXMgYml0cyByZWFkIGZyb20gdGhlIGJ1ZmZlcgorICAgIGNv bnN0IHVpbnQ4X3QgKmJ1ZmZlciwgKmJ1ZmZlcl9lbmQ7CisgICAgY29uc3QgdWludDhfdCAqcHRy OyAvLyBwb2ludGVyIHRvIHRoZSBwb3NpdGlvbiBpbnNpZGUgYSBidWZmZXIKKyAgICB1bnNpZ25l ZCBiaXRzX2xlZnQ7IC8vIG51bWJlciBvZiBiaXRzIGxlZnQgaW4gYml0cyBmaWVsZAorICAgIHVu c2lnbmVkIHNpemVfaW5fYml0czsKK30gQml0c3RyZWFtQ29udGV4dDsKKworLyoqCisgKiBAcmV0 dXJuCisgKiAtIDAgb24gc3VjY2Vzc2Z1bCByZWZpbGwKKyAqIC0gYSBuZWdhdGl2ZSBudW1iZXIg d2hlbiBiaXRzdHJlYW0gZW5kIGlzIGhpdAorICoKKyAqIEFsd2F5cyBzdWNjZWVkcyB3aGVuIFVO Q0hFQ0tFRF9CSVRTVFJFQU1fUkVBREVSIGlzIGVuYWJsZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUg aW50IGJpdHNfcHJpdl9yZWZpbGxfNjQoQml0c3RyZWFtQ29udGV4dCAqYmMpCit7CisjaWYgIVVO Q0hFQ0tFRF9CSVRTVFJFQU1fUkVBREVSCisgICAgaWYgKGJjLT5wdHIgPj0gYmMtPmJ1ZmZlcl9l bmQpCisgICAgICAgIHJldHVybiAtMTsKKyNlbmRpZgorCisjaWZkZWYgQklUU1RSRUFNX1JFQURF Ul9MRQorICAgIGJjLT5iaXRzICAgICAgID0gQVZfUkw2NChiYy0+cHRyKTsKKyNlbHNlCisgICAg YmMtPmJpdHMgICAgICAgPSBBVl9SQjY0KGJjLT5wdHIpOworI2VuZGlmCisgICAgYmMtPnB0ciAg ICAgICArPSA4OworICAgIGJjLT5iaXRzX2xlZnQgID0gNjQ7CisKKyAgICByZXR1cm4gMDsKK30K KworLyoqCisgKiBAcmV0dXJuCisgKiAtIDAgb24gc3VjY2Vzc2Z1bCByZWZpbGwKKyAqIC0gYSBu ZWdhdGl2ZSBudW1iZXIgd2hlbiBiaXRzdHJlYW0gZW5kIGlzIGhpdAorICoKKyAqIEFsd2F5cyBz dWNjZWVkcyB3aGVuIFVOQ0hFQ0tFRF9CSVRTVFJFQU1fUkVBREVSIGlzIGVuYWJsZWQuCisgKi8K K3N0YXRpYyBpbmxpbmUgaW50IGJpdHNfcHJpdl9yZWZpbGxfMzIoQml0c3RyZWFtQ29udGV4dCAq YmMpCit7CisjaWYgIVVOQ0hFQ0tFRF9CSVRTVFJFQU1fUkVBREVSCisgICAgaWYgKGJjLT5wdHIg Pj0gYmMtPmJ1ZmZlcl9lbmQpCisgICAgICAgIHJldHVybiAtMTsKKyNlbmRpZgorCisjaWZkZWYg QklUU1RSRUFNX1JFQURFUl9MRQorICAgIGJjLT5iaXRzICAgICAgID0gKHVpbnQ2NF90KUFWX1JM MzIoYmMtPnB0cikgPDwgYmMtPmJpdHNfbGVmdCB8IGJjLT5iaXRzOworI2Vsc2UKKyAgICBiYy0+ Yml0cyAgICAgICA9IGJjLT5iaXRzIHwgKHVpbnQ2NF90KUFWX1JCMzIoYmMtPnB0cikgPDwgKDMy IC0gYmMtPmJpdHNfbGVmdCk7CisjZW5kaWYKKyAgICBiYy0+cHRyICAgICAgICs9IDQ7CisgICAg YmMtPmJpdHNfbGVmdCArPSAzMjsKKworICAgIHJldHVybiAwOworfQorCisvKioKKyAqIEluaXRp YWxpemUgQml0c3RyZWFtQ29udGV4dC4KKyAqIEBwYXJhbSBidWZmZXIgYml0c3RyZWFtIGJ1ZmZl ciwgbXVzdCBiZSBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFIGJ5dGVzCisgKiAgICAgICAg bGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCByZWFkIGJpdHMgYmVjYXVzZSBzb21lIG9wdGltaXplZCBi aXRzdHJlYW0KKyAqICAgICAgICByZWFkZXJzIHJlYWQgMzIgb3IgNjQgYml0cyBhdCBvbmNlIGFu ZCBjb3VsZCByZWFkIG92ZXIgdGhlIGVuZAorICogQHBhcmFtIGJpdF9zaXplIHRoZSBzaXplIG9m IHRoZSBidWZmZXIgaW4gYml0cworICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEFWRVJST1JfSU5W QUxJRERBVEEgaWYgdGhlIGJ1ZmZlcl9zaXplIHdvdWxkIG92ZXJmbG93LgorICovCitzdGF0aWMg aW5saW5lIGludCBiaXRzX2luaXQoQml0c3RyZWFtQ29udGV4dCAqYmMsIGNvbnN0IHVpbnQ4X3Qg KmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYml0X3Np emUpCit7CisgICAgdW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplOworCisgICAgaWYgKGJpdF9zaXpl ID4gSU5UX01BWCAtIDcgfHwgIWJ1ZmZlcikgeworICAgICAgICBiYy0+YnVmZmVyICAgID0gTlVM TDsKKyAgICAgICAgYmMtPnB0ciAgICAgICA9IE5VTEw7CisgICAgICAgIGJjLT5iaXRzX2xlZnQg PSAwOworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisKKyAgICBi dWZmZXJfc2l6ZSA9IChiaXRfc2l6ZSArIDcpID4+IDM7CisKKyAgICBiYy0+YnVmZmVyICAgICAg ID0gYnVmZmVyOworICAgIGJjLT5idWZmZXJfZW5kICAgPSBidWZmZXIgKyBidWZmZXJfc2l6ZTsK KyAgICBiYy0+cHRyICAgICAgICAgID0gYmMtPmJ1ZmZlcjsKKyAgICBiYy0+c2l6ZV9pbl9iaXRz ID0gYml0X3NpemU7CisgICAgYmMtPmJpdHNfbGVmdCAgICA9IDA7CisgICAgYmMtPmJpdHMgICAg ICAgICA9IDA7CisKKyAgICBiaXRzX3ByaXZfcmVmaWxsXzY0KGJjKTsKKworICAgIHJldHVybiAw OworfQorCisvKioKKyAqIEluaXRpYWxpemUgQml0c3RyZWFtQ29udGV4dC4KKyAqIEBwYXJhbSBi dWZmZXIgYml0c3RyZWFtIGJ1ZmZlciwgbXVzdCBiZSBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19T SVpFIGJ5dGVzCisgKiAgICAgICAgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCByZWFkIGJpdHMgYmVj YXVzZSBzb21lIG9wdGltaXplZCBiaXRzdHJlYW0KKyAqICAgICAgICByZWFkZXJzIHJlYWQgMzIg b3IgNjQgYml0cyBhdCBvbmNlIGFuZCBjb3VsZCByZWFkIG92ZXIgdGhlIGVuZAorICogQHBhcmFt IGJ5dGVfc2l6ZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGluIGJ5dGVzCisgKiBAcmV0dXJuIDAg b24gc3VjY2VzcywgQVZFUlJPUl9JTlZBTElEREFUQSBpZiB0aGUgYnVmZmVyX3NpemUgd291bGQg b3ZlcmZsb3cKKyAqLworc3RhdGljIGlubGluZSBpbnQgYml0c19pbml0OChCaXRzdHJlYW1Db250 ZXh0ICpiYywgY29uc3QgdWludDhfdCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgYnl0ZV9zaXplKQoreworICAgIGlmIChieXRlX3NpemUgPiBJTlRf TUFYIC8gOCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgcmV0dXJu IGJpdHNfaW5pdChiYywgYnVmZmVyLCBieXRlX3NpemUgKiA4KTsKK30KKworLyoqCisgKiBSZXR1 cm4gbnVtYmVyIG9mIGJpdHMgYWxyZWFkeSByZWFkLgorICovCitzdGF0aWMgaW5saW5lIGludCBi aXRzX3RlbGwoY29uc3QgQml0c3RyZWFtQ29udGV4dCAqYmMpCit7CisgICAgcmV0dXJuIChiYy0+ cHRyIC0gYmMtPmJ1ZmZlcikgKiA4IC0gYmMtPmJpdHNfbGVmdDsKK30KKworLyoqCisgKiBSZXR1 cm4gYnVmZmVyIHNpemUgaW4gYml0cy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYml0c19zaXpl KGNvbnN0IEJpdHN0cmVhbUNvbnRleHQgKmJjKQoreworICAgIHJldHVybiBiYy0+c2l6ZV9pbl9i aXRzOworfQorCisvKioKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBiaXRzIGxlZnQgaW4g YSBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJpdHNfbGVmdChjb25zdCBCaXRzdHJl YW1Db250ZXh0ICpiYykKK3sKKyAgICByZXR1cm4gKGJjLT5idWZmZXIgLSBiYy0+cHRyKSAqIDgg KyBiYy0+c2l6ZV9pbl9iaXRzICsgYmMtPmJpdHNfbGVmdDsKK30KKworc3RhdGljIGlubGluZSB1 aW50NjRfdCBiaXRzX3ByaXZfdmFsX2dldChCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQg aW50IG4pCit7CisgICAgdWludDY0X3QgcmV0OworCisgICAgYXZfYXNzZXJ0MihuID4gMCAmJiBu IDwgNjQpOworCisjaWZkZWYgQklUU1RSRUFNX1JFQURFUl9MRQorICAgIHJldCA9IGJjLT5iaXRz ICYgKChVSU5UNjRfQygxKSA8PCBuKSAtIDEpOworICAgIGJjLT5iaXRzID4+PSBuOworI2Vsc2UK KyAgICByZXQgPSBiYy0+Yml0cyA+PiAoNjQgLSBuKTsKKyAgICBiYy0+Yml0cyA8PD0gbjsKKyNl bmRpZgorICAgIGJjLT5iaXRzX2xlZnQgLT0gbjsKKworICAgIHJldHVybiByZXQ7Cit9CisKKy8q KgorICogUmV0dXJuIG9uZSBiaXQgZnJvbSB0aGUgYnVmZmVyLgorICovCitzdGF0aWMgaW5saW5l IHVuc2lnbmVkIGludCBiaXRzX3JlYWRfYml0KEJpdHN0cmVhbUNvbnRleHQgKmJjKQoreworICAg IGlmICghYmMtPmJpdHNfbGVmdCkKKyAgICAgICAgYml0c19wcml2X3JlZmlsbF82NChiYyk7CisK KyAgICByZXR1cm4gYml0c19wcml2X3ZhbF9nZXQoYmMsIDEpOworfQorCisvKioKKyAqIFJldHVy biBuIGJpdHMgZnJvbSB0aGUgYnVmZmVyLCBuIGhhcyB0byBiZSBpbiB0aGUgMS0zMiByYW5nZS4K KyAqIE1heSBiZSBmYXN0ZXIgdGhhbiBiaXRzX3JlYWQoKSB3aGVuIG4gaXMgbm90IGEgY29tcGls ZS10aW1lIGNvbnN0YW50IGFuZCBpcworICoga25vd24gdG8gYmUgbm9uLXplcm87CisgKi8KK3N0 YXRpYyBpbmxpbmUgdWludDMyX3QgYml0c19yZWFkX256KEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1 bnNpZ25lZCBpbnQgbikKK3sKKyAgICBhdl9hc3NlcnQyKG4gPiAwICYmIG4gPD0gMzIpOworCisg ICAgaWYgKG4gPiBiYy0+Yml0c19sZWZ0KSB7CisgICAgICAgIGlmIChiaXRzX3ByaXZfcmVmaWxs XzMyKGJjKSA8IDApCisgICAgICAgICAgICBiYy0+Yml0c19sZWZ0ID0gbjsKKyAgICB9CisKKyAg ICByZXR1cm4gYml0c19wcml2X3ZhbF9nZXQoYmMsIG4pOworfQorCisvKioKKyAqIFJldHVybiBu IGJpdHMgZnJvbSB0aGUgYnVmZmVyLCBuIGhhcyB0byBiZSBpbiB0aGUgMC0zMiAgcmFuZ2UuCisg Ki8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgYml0c19yZWFkKEJpdHN0cmVhbUNvbnRleHQgKmJj LCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgICBhdl9hc3NlcnQyKG4gPD0gMzIpOworCisgICAgaWYg KCFuKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBiaXRzX3JlYWRfbnooYmMsIG4p OworfQorCisvKioKKyAqIFJldHVybiBuIGJpdHMgZnJvbSB0aGUgYnVmZmVyLCBuIGhhcyB0byBi ZSBpbiB0aGUgMC02MyByYW5nZS4KKyAqLworc3RhdGljIGlubGluZSB1aW50NjRfdCBiaXRzX3Jl YWRfNjMoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGludCBuKQoreworICAgIHVpbnQ2 NF90IHJldCA9IDA7CisgICAgdW5zaWduZWQgbGVmdCA9IDA7CisKKyAgICBhdl9hc3NlcnQyKG4g PD0gNjMpOworCisgICAgaWYgKCFuKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChuID4g YmMtPmJpdHNfbGVmdCkgeworICAgICAgICBsZWZ0ID0gYmMtPmJpdHNfbGVmdDsKKyAgICAgICAg biAgIC09IGxlZnQ7CisKKyAgICAgICAgaWYgKGxlZnQpCisgICAgICAgICAgICByZXQgPSBiaXRz X3ByaXZfdmFsX2dldChiYywgbGVmdCk7CisKKyAgICAgICAgaWYgKGJpdHNfcHJpdl9yZWZpbGxf NjQoYmMpIDwgMCkKKyAgICAgICAgICAgIGJjLT5iaXRzX2xlZnQgPSBuOworCisgICAgfQorCisj aWZkZWYgQklUU1RSRUFNX1JFQURFUl9MRQorICAgIHJldCA9IGJpdHNfcHJpdl92YWxfZ2V0KGJj LCBuKSA8PCBsZWZ0IHwgcmV0OworI2Vsc2UKKyAgICByZXQgPSBiaXRzX3ByaXZfdmFsX2dldChi YywgbikgfCByZXQgPDwgbjsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJldDsKK30KKworLyoqCisg KiBSZXR1cm4gbiBiaXRzIGZyb20gdGhlIGJ1ZmZlciwgbiBoYXMgdG8gYmUgaW4gdGhlIDAtNjQg cmFuZ2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgYml0c19yZWFkXzY0KEJpdHN0cmVh bUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgICBhdl9hc3NlcnQyKG4gPD0gNjQp OworCisgICAgaWYgKG4gPT0gNjQpIHsKKyAgICAgICAgdWludDY0X3QgcmV0ID0gYml0c19yZWFk KGJjLCAzMik7CisjaWZkZWYgQklUU1RSRUFNX1JFQURFUl9MRQorICAgICAgICByZXR1cm4gcmV0 IHwgKCh1aW50NjRfdCliaXRzX3JlYWQoYmMsIDMyKSA8PCAzMik7CisjZWxzZQorICAgICAgICBy ZXR1cm4gKHJldCA8PCAzMikgfCBiaXRzX3JlYWQoYmMsIDMyKTsKKyNlbmRpZgorICAgIH0KKyAg ICByZXR1cm4gYml0c19yZWFkXzYzKGJjLCBuKTsKK30KKworLyoqCisgKiBSZXR1cm4gbiBiaXRz IGZyb20gdGhlIGJ1ZmZlciBhcyBhIHNpZ25lZCBpbnRlZ2VyLgorICogbiBoYXMgdG8gYmUgaW4g dGhlIDAtMzIgcmFuZ2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50MzJfdCBiaXRzX3JlYWRfc2ln bmVkKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgICByZXR1cm4g c2lnbl9leHRlbmQoYml0c19yZWFkKGJjLCBuKSwgbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5z aWduZWQgaW50IGJpdHNfcHJpdl92YWxfc2hvdyhCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWdu ZWQgaW50IG4pCit7CisjaWZkZWYgQklUU1RSRUFNX1JFQURFUl9MRQorICAgIHJldHVybiBiYy0+ Yml0cyAmICgoVUlOVDY0X0MoMSkgPDwgbikgLSAxKTsKKyNlbHNlCisgICAgcmV0dXJuIGJjLT5i aXRzID4+ICg2NCAtIG4pOworI2VuZGlmCit9CisKKy8qKgorICogUmV0dXJuIG4gYml0cyBmcm9t IHRoZSBidWZmZXIgYnV0IGRvIG5vdCBjaGFuZ2UgdGhlIGJ1ZmZlciBzdGF0ZS4KKyAqIG4gaGFz IHRvIGJlIGluIHRoZSAwLTMyIHJhbmdlLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGlu dCBiaXRzX3BlZWsoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGludCBuKQoreworICAg IGF2X2Fzc2VydDIobiA8PSAzMik7CisKKyAgICBpZiAobiA+IGJjLT5iaXRzX2xlZnQpCisgICAg ICAgIGJpdHNfcHJpdl9yZWZpbGxfMzIoYmMpOworCisgICAgcmV0dXJuIGJpdHNfcHJpdl92YWxf c2hvdyhiYywgbik7Cit9CisKKy8qKgorICogUmV0dXJuIG4gYml0cyBmcm9tIHRoZSBidWZmZXIg YXMgYSBzaWduZWQgaW50ZWdlciwKKyAqIGRvIG5vdCBjaGFuZ2UgdGhlIGJ1ZmZlciBzdGF0ZS4K KyAqIG4gaGFzIHRvIGJlIGluIHRoZSAwLTMyIHJhbmdlLgorICovCitzdGF0aWMgaW5saW5lIGlu dCBiaXRzX3BlZWtfc2lnbmVkKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikK K3sKKyAgICByZXR1cm4gc2lnbl9leHRlbmQoYml0c19wZWVrKGJjLCBuKSwgbik7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBiaXRzX3ByaXZfc2tpcF9yZW1haW5pbmcoQml0c3RyZWFtQ29udGV4 dCAqYmMsIHVuc2lnbmVkIGludCBuKQoreworI2lmZGVmIEJJVFNUUkVBTV9SRUFERVJfTEUKKyAg ICBiYy0+Yml0cyA+Pj0gbjsKKyNlbHNlCisgICAgYmMtPmJpdHMgPDw9IG47CisjZW5kaWYKKyAg ICBiYy0+Yml0c19sZWZ0IC09IG47Cit9CisKKy8qKgorICogU2tpcCBuIGJpdHMgaW4gdGhlIGJ1 ZmZlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGJpdHNfc2tpcChCaXRzdHJlYW1Db250ZXh0 ICpiYywgdW5zaWduZWQgaW50IG4pCit7CisgICAgaWYgKG4gPCBiYy0+Yml0c19sZWZ0KQorICAg ICAgICBiaXRzX3ByaXZfc2tpcF9yZW1haW5pbmcoYmMsIG4pOworICAgIGVsc2UgeworICAgICAg ICBuIC09IGJjLT5iaXRzX2xlZnQ7CisgICAgICAgIGJjLT5iaXRzICAgICAgPSAwOworICAgICAg ICBiYy0+Yml0c19sZWZ0ID0gMDsKKworICAgICAgICBpZiAobiA+PSA2NCkgeworICAgICAgICAg ICAgdW5zaWduZWQgaW50IHNraXAgPSBuIC8gODsKKworICAgICAgICAgICAgbiAtPSBza2lwICog ODsKKyAgICAgICAgICAgIGJjLT5wdHIgKz0gc2tpcDsKKyAgICAgICAgfQorICAgICAgICBiaXRz X3ByaXZfcmVmaWxsXzY0KGJjKTsKKyAgICAgICAgaWYgKG4pCisgICAgICAgICAgICBiaXRzX3By aXZfc2tpcF9yZW1haW5pbmcoYmMsIG4pOworICAgIH0KK30KKworLyoqCisgKiBTZWVrIHRvIHRo ZSBnaXZlbiBiaXQgcG9zaXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBiaXRzX3NlZWso Qml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIHBvcykKK3sKKyAgICBiYy0+cHRyICAgICAg ID0gYmMtPmJ1ZmZlcjsKKyAgICBiYy0+Yml0cyAgICAgID0gMDsKKyAgICBiYy0+Yml0c19sZWZ0 ID0gMDsKKworICAgIGJpdHNfc2tpcChiYywgcG9zKTsKK30KKworLyoqCisgKiBTa2lwIGJpdHMg dG8gYSBieXRlIGJvdW5kYXJ5LgorICovCitzdGF0aWMgaW5saW5lIGNvbnN0IHVpbnQ4X3QgKmJp dHNfYWxpZ24oQml0c3RyZWFtQ29udGV4dCAqYmMpCit7CisgICAgdW5zaWduZWQgaW50IG4gPSAt Yml0c190ZWxsKGJjKSAmIDc7CisgICAgaWYgKG4pCisgICAgICAgIGJpdHNfc2tpcChiYywgbik7 CisgICAgcmV0dXJuIGJjLT5idWZmZXIgKyAoYml0c190ZWxsKGJjKSA+PiAzKTsKK30KKworLyoq CisgKiBSZWFkIE1QRUctMSBkYy1zdHlsZSBWTEMgKHNpZ24gYml0ICsgbWFudGlzc2Egd2l0aCBu byBNU0IpLgorICogSWYgTVNCIG5vdCBzZXQgaXQgaXMgbmVnYXRpdmUuCisgKiBAcGFyYW0gbiBs ZW5ndGggaW4gYml0cworICovCitzdGF0aWMgaW5saW5lIGludCBiaXRzX3JlYWRfeGJpdHMoQml0 c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGludCBuKQoreworICAgIGludDMyX3QgY2FjaGUg PSBiaXRzX3BlZWsoYmMsIDMyKTsKKyAgICBpbnQgc2lnbiA9IH5jYWNoZSA+PiAzMTsKKyAgICBi aXRzX3ByaXZfc2tpcF9yZW1haW5pbmcoYmMsIG4pOworCisgICAgcmV0dXJuICgoKCh1aW50MzJf dCkoc2lnbiBeIGNhY2hlKSkgPj4gKDMyIC0gbikpIF4gc2lnbikgLSBzaWduOworfQorCisvKioK KyAqIFJldHVybiBkZWNvZGVkIHRydW5jYXRlZCB1bmFyeSBjb2RlIGZvciB0aGUgdmFsdWVzIDAs IDEsIDIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJpdHNfZGVjb2RlMDEyKEJpdHN0cmVhbUNv bnRleHQgKmJjKQoreworICAgIGlmICghYml0c19yZWFkX2JpdChiYykpCisgICAgICAgIHJldHVy biAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGJpdHNfcmVhZF9iaXQoYmMpICsgMTsKK30K KworLyoqCisgKiBSZXR1cm4gZGVjb2RlZCB0cnVuY2F0ZWQgdW5hcnkgY29kZSBmb3IgdGhlIHZh bHVlcyAyLCAxLCAwLgorICovCitzdGF0aWMgaW5saW5lIGludCBiaXRzX2RlY29kZTIxMChCaXRz dHJlYW1Db250ZXh0ICpiYykKK3sKKyAgICBpZiAoYml0c19yZWFkX2JpdChiYykpCisgICAgICAg IHJldHVybiAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDIgLSBiaXRzX3JlYWRfYml0KGJj KTsKK30KKworLyogUmVhZCBzaWduIGJpdCBhbmQgZmxpcCB0aGUgc2lnbiBvZiB0aGUgcHJvdmlk ZWQgdmFsdWUgYWNjb3JkaW5nbHkuICovCitzdGF0aWMgaW5saW5lIGludCBiaXRzX2FwcGx5X3Np Z24oQml0c3RyZWFtQ29udGV4dCAqYmMsIGludCB2YWwpCit7CisgICAgaW50IHNpZ24gPSBiaXRz X3JlYWRfc2lnbmVkKGJjLCAxKTsKKyAgICByZXR1cm4gKHZhbCBeIHNpZ24pIC0gc2lnbjsKK30K Kworc3RhdGljIGlubGluZSBpbnQgYml0c19za2lwXzFzdG9wXzhkYXRhKEJpdHN0cmVhbUNvbnRl eHQgKnMpCit7CisgICAgaWYgKGJpdHNfbGVmdChzKSA8PSAwKQorICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKworICAgIHdoaWxlIChiaXRzX3JlYWQocywgMSkpIHsKKyAgICAg ICAgYml0c19za2lwKHMsIDgpOworICAgICAgICBpZiAoYml0c19sZWZ0KHMpIDw9IDApCisgICAg ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisKKyAgICByZXR1cm4g MDsKK30KKworLyogVW5nZXQgdXAgdG8gMzIgYml0cy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBi aXRzX3VuZ2V0KEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1aW50NjRfdCB2YWx1ZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFtb3VudCkKK3sKKyAgICB1bnNpZ25lZCBj YWNoZV9zaXplID0gc2l6ZW9mKGJjLT5iaXRzKSAqIDg7CisKKyAgICBhdl9hc3NlcnQyKGFtb3Vu dCA8PSAzMik7CisKKyAgICBpZiAoYmMtPmJpdHNfbGVmdCArIGFtb3VudCA+IGNhY2hlX3NpemUp IHsKKyAgICAgICAgYmMtPmJpdHNfbGVmdCAgLT0gNCAqIDg7CisgICAgICAgIGJjLT5wdHIgICAg ICAgIC09IDQ7CisgICAgfQorCisjaWZkZWYgQklUU1RSRUFNX1JFQURFUl9MRQorICAgIGJjLT5i aXRzICAgICAgID0gKGJjLT5iaXRzIDw8IGFtb3VudCkgfCB2YWx1ZTsKKyNlbHNlCisgICAgYmMt PmJpdHMgICAgICAgPSAoYmMtPmJpdHMgPj4gYW1vdW50KSB8ICh2YWx1ZSA8PCAoY2FjaGVfc2l6 ZSAtIGFtb3VudCkpOworI2VuZGlmCisgICAgYmMtPmJpdHNfbGVmdCArPSBhbW91bnQ7Cit9CisK Ky8qKgorICogUmV0dXJuIHRoZSBMVVQgZWxlbWVudCBmb3IgdGhlIGdpdmVuIGJpdHN0cmVhbSBj b25maWd1cmF0aW9uLgorICovCitzdGF0aWMgaW5saW5lIGludCBiaXRzX3ByaXZfc2V0X2lkeChC aXRzdHJlYW1Db250ZXh0ICpiYywgaW50IGNvZGUsIGludCAqbiwgaW50ICpuYl9iaXRzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVkxDRWxlbSAqdGFibGUpCit7 CisgICAgdW5zaWduZWQgaWR4OworCisgICAgKm5iX2JpdHMgPSAtKm47CisgICAgaWR4ID0gYml0 c19wZWVrKGJjLCAqbmJfYml0cykgKyBjb2RlOworICAgICpuID0gdGFibGVbaWR4XS5sZW47CisK KyAgICByZXR1cm4gdGFibGVbaWR4XS5zeW07Cit9CisKKy8qKgorICogUGFyc2UgYSB2bGMgY29k ZS4KKyAqIEBwYXJhbSBiaXRzIGlzIHRoZSBudW1iZXIgb2YgYml0cyB3aGljaCB3aWxsIGJlIHJl YWQgYXQgb25jZSwgbXVzdCBiZQorICogICAgICAgICAgICAgaWRlbnRpY2FsIHRvIG5iX2JpdHMg aW4gaW5pdF92bGMoKQorICogQHBhcmFtIG1heF9kZXB0aCBpcyB0aGUgbnVtYmVyIG9mIHRpbWVz IGJpdHMgYml0cyBtdXN0IGJlIHJlYWQgdG8gY29tcGxldGVseQorICogICAgICAgICAgICAgICAg ICByZWFkIHRoZSBsb25nZXN0IHZsYyBjb2RlCisgKiAgICAgICAgICAgICAgICAgID0gKG1heF92 bGNfbGVuZ3RoICsgYml0cyAtIDEpIC8gYml0cworICogSWYgdGhlIHZsYyBjb2RlIGlzIGludmFs aWQgYW5kIG1heF9kZXB0aD0xLCB0aGVuIG5vIGJpdHMgd2lsbCBiZSByZW1vdmVkLgorICogSWYg dGhlIHZsYyBjb2RlIGlzIGludmFsaWQgYW5kIG1heF9kZXB0aD4xLCB0aGVuIHRoZSBudW1iZXIg b2YgYml0cyByZW1vdmVkCisgKiBpcyB1bmRlZmluZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50 IGJpdHNfcmVhZF92bGMoQml0c3RyZWFtQ29udGV4dCAqYmMsIGNvbnN0IFZMQ0VsZW0gKnRhYmxl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0cywgaW50IG1heF9kZXB0 aCkKK3sKKyAgICBpbnQgbmJfYml0czsKKyAgICB1bnNpZ25lZCBpZHggPSBiaXRzX3BlZWsoYmMs IGJpdHMpOworICAgIGludCBjb2RlICAgICA9IHRhYmxlW2lkeF0uc3ltOworICAgIGludCBuICAg ICAgICA9IHRhYmxlW2lkeF0ubGVuOworCisgICAgaWYgKG1heF9kZXB0aCA+IDEgJiYgbiA8IDAp IHsKKyAgICAgICAgYml0c19wcml2X3NraXBfcmVtYWluaW5nKGJjLCBiaXRzKTsKKyAgICAgICAg Y29kZSA9IGJpdHNfcHJpdl9zZXRfaWR4KGJjLCBjb2RlLCAmbiwgJm5iX2JpdHMsIHRhYmxlKTsK KyAgICAgICAgaWYgKG1heF9kZXB0aCA+IDIgJiYgbiA8IDApIHsKKyAgICAgICAgICAgIGJpdHNf cHJpdl9za2lwX3JlbWFpbmluZyhiYywgbmJfYml0cyk7CisgICAgICAgICAgICBjb2RlID0gYml0 c19wcml2X3NldF9pZHgoYmMsIGNvZGUsICZuLCAmbmJfYml0cywgdGFibGUpOworICAgICAgICB9 CisgICAgfQorICAgIGJpdHNfcHJpdl9za2lwX3JlbWFpbmluZyhiYywgbik7CisKKyAgICByZXR1 cm4gY29kZTsKK30KKworI2RlZmluZSBCSVRTX1JMX1ZMQyhsZXZlbCwgcnVuLCBiYywgdGFibGUs IGJpdHMsIG1heF9kZXB0aCkgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpbnQgbiwgbmJfYml0czsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1bnNpZ25lZCBpbnQgaW5k ZXggPSBiaXRzX3BlZWsoYmMsIGJpdHMpOyAgICAgICAgICAgXAorICAgICAgICBsZXZlbCA9IHRh YmxlW2luZGV4XS5sZXZlbDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBuICAg ICA9IHRhYmxlW2luZGV4XS5sZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICBpZiAobWF4X2RlcHRoID4gMSAmJiBuIDwgMCkgeyAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICAgICAgYml0c19za2lwKGJjLCBiaXRzKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgbmJfYml0cyA9IC1uOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaW5kZXggPSBiaXRzX3Bl ZWsoYmMsIG5iX2JpdHMpICsgbGV2ZWw7ICAgICAgICAgXAorICAgICAgICAgICAgbGV2ZWwgPSB0 YWJsZVtpbmRleF0ubGV2ZWw7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgbiAg ICAgPSB0YWJsZVtpbmRleF0ubGVuOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg ICAgaWYgKG1heF9kZXB0aCA+IDIgJiYgbiA8IDApIHsgICAgICAgICAgICAgICAgICAgXAorICAg ICAgICAgICAgICAgIGJpdHNfc2tpcChiYywgbmJfYml0cyk7ICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICAgICAgICAgIG5iX2JpdHMgPSAtbjsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGluZGV4ID0gYml0c19wZWVrKGJjLCBuYl9i aXRzKSArIGxldmVsOyAgICAgXAorICAgICAgICAgICAgICAgIGxldmVsID0gdGFibGVbaW5kZXhd LmxldmVsOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG4gICAgID0gdGFibGVb aW5kZXhdLmxlbjsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBydW4g PSB0YWJsZVtpbmRleF0ucnVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICBiaXRzX3NraXAoYmMsIG4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgIH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBBVkNPREVDX0JJVFNUUkVBTV9IICovCi0tIAoy LjM0LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZm bXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9m Zm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwg dmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9y ZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K