From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id EEF933858D39 for ; Fri, 20 Oct 2023 16:50:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EEF933858D39 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org EEF933858D39 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=68.232.141.98 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1697820609; cv=none; b=UKFWaBjVdQ4OkM/vYRJ2zfFEWh3EVrF8ZKlCHb8+0D0eG/scLdO5Txe8TDeCYGekwtChVp/1Bjj9pWdLUmFWOlRxu7PhR+oRDZATQ7D8y4K09piLN7MT+thtN/EGS6XadxPzjktQy2Kcq/6XkB1/VopG7yqvopzpOcG6M2AxQJQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1697820609; c=relaxed/simple; bh=Dvqh6+SrZhLOrspFT/WUGenYxTND0Pg9b0dSGbrvSTs=; h=Message-ID:Date:MIME-Version:To:From:Subject; b=eoXbe0JE4BC/BJD74WnOneMLINIZrobY5Qm8rfl0cEEtvZtAyRmlDVGkh9T05i1SjNPVRbqTUmK4DUC/nzaEsOHjMIJWEP389r+/eOE8Rj9f3MlybIBziqjE5N1zisu9RfNNm+UwfpShPqoVBL8u8q03N8buVHD1gLwkTGOnAok= ARC-Authentication-Results: i=1; server2.sourceware.org X-CSE-ConnectionGUID: L3tkrOkGRh674cK6twLwog== X-CSE-MsgGUID: 6lpzJxMOTo+hBiSiqjLoRQ== X-IronPort-AV: E=Sophos;i="6.03,239,1694764800"; d="diff'?scan'208";a="22691601" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa2.mentor.iphmx.com with ESMTP; 20 Oct 2023 08:50:03 -0800 IronPort-SDR: AtUNqRAwnv/LxaUMxy4z0YtJCpMrnhBWsKfK2m3szwFPcWr1FDeor+Q18p87EUHuaMU2Cu/z8Q ohAsCi1cUbecONvIFWyiE0A704vkexRbwKk4zZSLnFkXnV5L0JqnNaQTNO+mGbLUsAveghASsJ A8JlMs6660LFNnDlk9XtZVIIYSHd5BSqZPHtuoArc5fWQnNCUuIb7HnRSvAaw1TkLpki95DVaT 7fmNPfDM+XvkIucMAiHQr9lKHTLAiuQChmVkb3WJLOyiwe6tE5nq/rrOc6iuznawidKrBpSfqB C1o= Content-Type: multipart/mixed; boundary="------------ltbGmhKjB5nviql5jf1nw3as" Message-ID: Date: Fri, 20 Oct 2023 18:49:58 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: gcc-patches , Jakub Jelinek From: Tobias Burnus Subject: [Patch] OpenMP: Add C++ support for 'omp allocate' with stack variables X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-11.mgc.mentorg.com (139.181.222.11) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --------------ltbGmhKjB5nviql5jf1nw3as Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable This patch adds C++ support for OpenMP's 'omp allocate' for stack/automatic arrays. Comments and suggestions? =E2=80=94 I bet there are given my little knowled= ge about the C++ FE... Tobias PS: I think I should write some additional C++-specific code, I bet some corner cases are missed. The question is only which ones. ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------ltbGmhKjB5nviql5jf1nw3as Content-Type: text/x-patch; charset="UTF-8"; name="omp-allocate-c++.diff" Content-Disposition: attachment; filename="omp-allocate-c++.diff" Content-Transfer-Encoding: base64 T3Blbk1QOiBBZGQgQysrIHN1cHBvcnQgZm9yICdvbXAgYWxsb2NhdGUnIHdpdGggc3RhY2sg dmFyaWFibGVzCgpnY2MvYy9DaGFuZ2VMb2c6CgoJKiBjLXBhcnNlci5jYyAoY19wYXJzZXJf b21wX2FsbG9jYXRlKTogQ2hhbmdlIGVycm9yCgl3b3JkaW5nLgoKZ2NjL2NwL0NoYW5nZUxv ZzoKCgkqIGNwLXRyZWUuaCAoZmluaXNoX29tcF9hbGxvY2F0ZSk6IE5ldyBwcm90b3R5cGUu CgkqIHBhcnNlci5jYyAoc3RydWN0IGNwX29tcF9sb2NfdHJlZSwKCWNwX2NoZWNrX29tcF9h bGxvY2F0ZV9hbGxvY2F0b3Jfcik6IE5ldy4KCShjcF9wYXJzZXJfb21wX2FsbG9jYXRlKTog Q2FsbCBpdDsgcmVtb3ZlIHNvcnJ5LAoJaW1wcm92ZSBjaGVja3MsIGNhbGwgZmluaXNoX29t cF9hbGxvY2F0ZS4KCSogcHQuY2MgKHRzdWJzdF9zdG10KTogQ2FsbCBmaW5pc2hfb21wX2Fs bG9jYXRlLgoJKiBzZW1hbnRpY3MuY2MgKGZpbmlzaF9vbXBfYWxsb2NhdGUpOiBOZXcuCgps aWJnb21wL0NoYW5nZUxvZzoKCgkqIGxpYmdvbXAudGV4aSAoT3Blbk1QIEltcGwuIFN0YXR1 cyk6IERvY3VtZW50IHRoYXQgJ29tcCBhbGxvY2F0ZScKCWlzIG5vdyBzdXBwb3J0ZWQgZm9y IEMrKyBzdGFjay9hdXRvbWF0aWMgdmFyaWFibGVzLgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5j LWMrKy1jb21tb24vYWxsb2NhdGUtNC5jOiBSZW5hbWVkIGZyb20gLi4uCgl0ZXN0c3VpdGUv bGliZ29tcC5jL2FsbG9jYXRlLTQuYzogLi4uIHRoaXMuCgkqIHRlc3RzdWl0ZS9saWJnb21w LmMtYysrLWNvbW1vbi9hbGxvY2F0ZS01LmM6IFJlbmFtZWQgZnJvbSAuLi4KCXRlc3RzdWl0 ZS9saWJnb21wLmMvYWxsb2NhdGUtNS5jOiAuLi4gdGhpcy4KCSogdGVzdHN1aXRlL2xpYmdv bXAuYy1jKystY29tbW9uL2FsbG9jYXRlLTYuYzogUmVuYW1lZCBmcm9tIC4uLgoJdGVzdHN1 aXRlL2xpYmdvbXAuYy9hbGxvY2F0ZS02LmM6IC4uLiB0aGlzLgoJKiB0ZXN0c3VpdGUvbGli Z29tcC5jKysvYWxsb2NhdGUtMi5DOiBOZXcgdGVzdC4KCmdjYy90ZXN0c3VpdGUvQ2hhbmdl TG9nOgoKCSogYy1jKystY29tbW9uL2dvbXAvYWxsb2NhdGUtNS5jOiBSZW1vdmUgQysrICdz b3JyeSc7IG1pbm9yIHVwZGF0ZXMuCgkqIGMtYysrLWNvbW1vbi9nb21wL2FsbG9jYXRlLTku YzogTGlrZXdpc2UuCgkqIGMtYysrLWNvbW1vbi9nb21wL2FsbG9jYXRlLTE3LmM6IExpa2V3 aXNlLgoJKiBjLWMrKy1jb21tb24vZ29tcC9kaXJlY3RpdmUtMS5jOiBMaWtld2lzZS4KCSog ZysrLmRnL2dvbXAvYWxsb2NhdGUtNS5DOiBOZXcgdGVzdC4KCiBnY2MvYy9jLXBhcnNlci5j YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogZ2NjL2NwL2Nw LXRyZWUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKwogZ2Nj L2NwL3BhcnNlci5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNDkg KysrKysrKy0tLQogZ2NjL2NwL3B0LmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDQgKwogZ2NjL2NwL3NlbWFudGljcy5jYyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgODAgKysrKysKIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9u L2dvbXAvYWxsb2NhdGUtMTcuYyAgICAgIHwgICAyICstCiBnY2MvdGVzdHN1aXRlL2MtYysr LWNvbW1vbi9nb21wL2FsbG9jYXRlLTUuYyAgICAgICB8ICAyNCArLQogZ2NjL3Rlc3RzdWl0 ZS9jLWMrKy1jb21tb24vZ29tcC9hbGxvY2F0ZS05LmMgICAgICAgfCAgNTkgKystLQogZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvZ29tcC9hbGxvY2F0ZS01LkMgICAgICAgICAgICAgfCAgMTQg KwogbGliZ29tcC9saWJnb21wLnRleGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDQgKy0KIGxpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYysrL2FsbG9jYXRlLTIuQyAg ICAgICAgIHwgMzI5ICsrKysrKysrKysrKysrKysrKysrKwogLi4uL2FsbG9jYXRlLTQuYyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgLQogLi4uL2FsbG9jYXRl LTUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgLQogLi4uL2Fs bG9jYXRlLTYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgLQog MTQgZmlsZXMgY2hhbmdlZCwgNTY3IGluc2VydGlvbnMoKyksIDExMyBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9nY2MvYy9jLXBhcnNlci5jYyBiL2djYy9jL2MtcGFyc2VyLmNjCmlu ZGV4IDBkNDY4Yjg2YmQ4Li40OWJlZmQ2ZmZjNCAxMDA2NDQKLS0tIGEvZ2NjL2MvYy1wYXJz ZXIuY2MKKysrIGIvZ2NjL2MvYy1wYXJzZXIuY2MKQEAgLTE5NTAxLDcgKzE5NTAxLDcgQEAg Y19wYXJzZXJfb21wX2FsbG9jYXRlIChjX3BhcnNlciAqcGFyc2VyKQogCQkgIT0gZ2V0X2lk ZW50aWZpZXIgKCJvbXBfYWxsb2NhdG9yX2hhbmRsZV90IikpCiAJICAgIHsKIAkgICAgICBl cnJvcl9hdCAoZXhwcl9sb2MsCi0JCQkiJTxhbGxvY2F0b3IlPiBjbGF1c2UgYWxsb2NhdG9y IGV4cHJlc3Npb24gaGFzIHR5cGUgIgorCQkJIiU8YWxsb2NhdG9yJT4gY2xhdXNlIGV4cHJl c3Npb24gaGFzIHR5cGUgIgogCQkJIiVxVCByYXRoZXIgdGhhbiAlPG9tcF9hbGxvY2F0b3Jf aGFuZGxlX3QlPiIsCiAJCQlUUkVFX1RZUEUgKGFsbG9jYXRvcikpOwogCSAgICAgIGFsbG9j YXRvciA9IE5VTExfVFJFRTsKZGlmZiAtLWdpdCBhL2djYy9jcC9jcC10cmVlLmggYi9nY2Mv Y3AvY3AtdHJlZS5oCmluZGV4IDMwZmU3MTZiMTA5Li5kM2E4NWYzOWUzZSAxMDA2NDQKLS0t IGEvZ2NjL2NwL2NwLXRyZWUuaAorKysgYi9nY2MvY3AvY3AtdHJlZS5oCkBAIC03ODAxLDYg Kzc4MDEsMTAgQEAgZXh0ZXJuIHRyZWUgZmluaXNoX29tcF9mb3IJCQkobG9jYXRpb25fdCwg ZW51bSB0cmVlX2NvZGUsCiAJCQkJCQkgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwK IAkJCQkJCSB0cmVlLCB0cmVlLCB2ZWM8dHJlZT4gKiwgdHJlZSk7CiBleHRlcm4gdHJlZSBm aW5pc2hfb21wX2Zvcl9ibG9jawkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNo X29tcF9hbGxvY2F0ZQkJCShib29sLCBsb2NhdGlvbl90LCB0cmVlLAorCQkJCQkJIHRyZWUg PSBOVUxMX1RSRUUsCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QgPSB0Zl93YXJuaW5nX29yX2Vy cm9yLAorCQkJCQkJIHRyZWUgPSBOVUxMX1RSRUUpOwogZXh0ZXJuIHZvaWQgZmluaXNoX29t cF9hdG9taWMJCQkobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsCiAJCQkJCQkgZW51bSB0 cmVlX2NvZGUsIHRyZWUsIHRyZWUsCiAJCQkJCQkgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwg dHJlZSwKZGlmZiAtLWdpdCBhL2djYy9jcC9wYXJzZXIuY2MgYi9nY2MvY3AvcGFyc2VyLmNj CmluZGV4IDU0ODMxMjFmNTFjLi5iMTYzNjE4MjkyZSAxMDA2NDQKLS0tIGEvZ2NjL2NwL3Bh cnNlci5jYworKysgYi9nY2MvY3AvcGFyc2VyLmNjCkBAIC00MTg2NCw2ICs0MTg2NCw2NyBA QCBjcF9wYXJzZXJfb21wX3N0cnVjdHVyZWRfYmxvY2sgKGNwX3BhcnNlciAqcGFyc2VyLCBi b29sICppZl9wKQogICByZXR1cm4gZmluaXNoX29tcF9zdHJ1Y3R1cmVkX2Jsb2NrIChzdG10 KTsKIH0KIAorc3RydWN0IGNwX29tcF9sb2NfdHJlZQoreworICBsb2NhdGlvbl90IGxvYzsK KyAgdHJlZSB2YXI7Cit9OworCisvKiBDaGVjayB3aGV0aGVyIHRoZSBleHByZXNzaW9uIHVz ZWQgaW4gdGhlIGFsbG9jYXRvciBjbGF1c2UgaXMgZGVjbGFyZWQgb3IKKyAgIG1vZGlmaWVk IGJldHdlZW4gdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGFuZCBpdHMgYWxsb2NhdGUgZGly ZWN0aXZlLiAgKi8KK3N0YXRpYyB0cmVlCitjcF9jaGVja19vbXBfYWxsb2NhdGVfYWxsb2Nh dG9yX3IgKHRyZWUgKnRwLCBpbnQgKiwgdm9pZCAqZGF0YSkKK3sKKyAgdHJlZSB2YXIgPSAo KHN0cnVjdCBjcF9vbXBfbG9jX3RyZWUgKikgZGF0YSktPnZhcjsKKyAgbG9jYXRpb25fdCBs b2MgPSAoKHN0cnVjdCBjcF9vbXBfbG9jX3RyZWUgKikgZGF0YSktPmxvYzsKKyAgdHJlZSB2 ID0gTlVMTF9UUkVFOworICBpZiAoVFJFRV9DT0RFICgqdHApID09IFZBUl9ERUNMKQorICAg IGZvciAodiA9IGN1cnJlbnRfYmluZGluZ19sZXZlbC0+bmFtZXM7IHY7IHYgPSBUUkVFX0NI QUlOICh2KSkKKyAgICAgIGlmICh2ID09IHZhcikKKwlicmVhazsKKyAgaWYgKHYgIT0gTlVM TF9UUkVFKQorICAgIHsKKyAgICAgIGlmIChsaW5lbWFwX2xvY2F0aW9uX2JlZm9yZV9wIChs aW5lX3RhYmxlLCBERUNMX1NPVVJDRV9MT0NBVElPTiAodmFyKSwKKwkJCQkgICAgIERFQ0xf U09VUkNFX0xPQ0FUSU9OICgqdHApKSkKKwl7CisJICBlcnJvcl9hdCAobG9jLCAidmFyaWFi bGUgJXFEIHVzZWQgaW4gdGhlICU8YWxsb2NhdG9yJT4gY2xhdXNlIG11c3QgIgorCQkJICJi ZSBkZWNsYXJlZCBiZWZvcmUgJXFEIiwgKnRwLCB2YXIpOworCSAgaW5mb3JtIChERUNMX1NP VVJDRV9MT0NBVElPTiAoKnRwKSwgImRlY2xhcmVkIGhlcmUiKTsKKwkgIGluZm9ybSAoREVD TF9TT1VSQ0VfTE9DQVRJT04gKHZhciksCisJCSAgInRvIGJlIGFsbG9jYXRlZCB2YXJpYWJs ZSBkZWNsYXJlZCBoZXJlIik7CisJICByZXR1cm4gKnRwOworCX0KKyAgICAgIGVsc2UKKwl7 CisJICBnY2NfYXNzZXJ0IChjdXJfc3RtdF9saXN0CisJCSAgICAgICYmIFRSRUVfQ09ERSAo Y3VyX3N0bXRfbGlzdCkgPT0gU1RBVEVNRU5UX0xJU1QpOworCisJICB0cmVlX3N0bXRfaXRl cmF0b3IgbCA9IHRzaV9sYXN0IChjdXJfc3RtdF9saXN0KTsKKwkgIHdoaWxlICghdHNpX2Vu ZF9wIChsKSkKKwkgICAgeworCSAgICAgIGlmIChsaW5lbWFwX2xvY2F0aW9uX2JlZm9yZV9w IChsaW5lX3RhYmxlLCBFWFBSX0xPQ0FUSU9OICgqbCksCisJCQkJCSAgICAgREVDTF9TT1VS Q0VfTE9DQVRJT04gKHZhcikpKQorCQlicmVhazsKKwkgICAgICBpZiAoVFJFRV9DT0RFICgq bCkgPT0gTU9ESUZZX0VYUFIKKwkJICAmJiBUUkVFX09QRVJBTkQgKCpsLCAwKSA9PSAqdHAp CisJCXsKKwkJICBlcnJvcl9hdCAobG9jLAorCQkJICAgICJ2YXJpYWJsZSAlcUQgdXNlZCBp biB0aGUgJTxhbGxvY2F0b3IlPiBjbGF1c2UgIgorCQkJICAgICJtdXN0IG5vdCBiZSBtb2Rp ZmllZCBiZXR3ZWVuIGRlY2xhcmF0aW9uIG9mICVxRCAiCisJCQkgICAgImFuZCBpdHMgJTxh bGxvY2F0ZSU+IGRpcmVjdGl2ZSIsICp0cCwgdmFyKTsKKwkJICBpbmZvcm0gKEVYUFJfTE9D QVRJT04gKCpsKSwgIm1vZGlmaWVkIGhlcmUiKTsKKwkJICBpbmZvcm0gKERFQ0xfU09VUkNF X0xPQ0FUSU9OICh2YXIpLAorCQkJICAidG8gYmUgYWxsb2NhdGVkIHZhcmlhYmxlIGRlY2xh cmVkIGhlcmUiKTsKKwkJICByZXR1cm4gKnRwOworCQl9CisJICAgICAgLS1sOworCSAgICB9 CisJfQorICAgIH0KKyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKworCiAvKiBPcGVuTVAgNS54 OgogICAgIyBwcmFnbWEgb21wIGFsbG9jYXRlIChsaXN0KSAgY2xhdXNlcwogCkBAIC00MTg3 OCw3ICs0MTkzOSw2IEBAIGNwX3BhcnNlcl9vbXBfYWxsb2NhdGUgKGNwX3BhcnNlciAqcGFy c2VyLCBjcF90b2tlbiAqcHJhZ21hX3RvaykKIHsKICAgdHJlZSBhbGxvY2F0b3IgPSBOVUxM X1RSRUU7CiAgIHRyZWUgYWxpZ25tZW50ID0gTlVMTF9UUkVFOwotICBsb2NhdGlvbl90IGxv YyA9IHByYWdtYV90b2stPmxvY2F0aW9uOwogICB0cmVlIG5sID0gY3BfcGFyc2VyX29tcF92 YXJfbGlzdCAocGFyc2VyLCBPTVBfQ0xBVVNFX0FMTE9DQVRFLCBOVUxMX1RSRUUpOwogCiAg IGRvCkBAIC00MTkwOCw2MyArNDE5NjgsNTYgQEAgY3BfcGFyc2VyX29tcF9hbGxvY2F0ZSAo Y3BfcGFyc2VyICpwYXJzZXIsIGNwX3Rva2VuICpwcmFnbWFfdG9rKQogCSAgYnJlYWs7CiAJ fQogICAgICAgZWxzZSBpZiAocFsyXSA9PSAnaScpCi0JewotCSAgaWYgKGV4cHIgIT0gZXJy b3JfbWFya19ub2RlKQotCSAgICBhbGlnbm1lbnQgPSBleHByOwotCSAgLyogRklYTUU6IFJl bW92ZSB3aGVuIGFkZGluZyBjaGVjayB0byBzZW1hbnRpY3MuY2M7IGNmIEZJWE1FIGJlbG93 LiAqLwotCSAgaWYgKGFsaWdubWVudAotCSAgICAgICYmICF0eXBlX2RlcGVuZGVudF9leHBy ZXNzaW9uX3AgKGFsaWdubWVudCkKLQkgICAgICAmJiAhSU5URUdSQUxfVFlQRV9QIChUUkVF X1RZUEUgKGFsaWdubWVudCkpKQotCSAgICB7Ci0JICAgICAgZXJyb3JfYXQgKGNsb2MsICIl PGFsaWduJT4gY2xhdXNlIGFyZ3VtZW50IG5lZWRzIHRvIGJlICIKLQkJCSAgICAgICJwb3Np dGl2ZSBjb25zdGFudCBwb3dlciBvZiB0d28gaW50ZWdlciAiCi0JCQkgICAgICAiZXhwcmVz c2lvbiIpOwotCSAgICAgIGFsaWdubWVudCA9IE5VTExfVFJFRTsKLQkgICAgfQotCSAgZWxz ZSBpZiAoYWxpZ25tZW50KQotCSAgICB7Ci0JICAgICAgYWxpZ25tZW50ID0gbWFya19ydmFs dWVfdXNlIChhbGlnbm1lbnQpOwotCSAgICAgIGlmICghcHJvY2Vzc2luZ190ZW1wbGF0ZV9k ZWNsKQotCQl7Ci0JCSAgYWxpZ25tZW50ID0gbWF5YmVfY29uc3RhbnRfdmFsdWUgKGFsaWdu bWVudCk7Ci0JCSAgaWYgKFRSRUVfQ09ERSAoYWxpZ25tZW50KSAhPSBJTlRFR0VSX0NTVAot CQkgICAgICB8fCAhdHJlZV9maXRzX3Vod2lfcCAoYWxpZ25tZW50KQotCQkgICAgICB8fCAh aW50ZWdlcl9wb3cycCAoYWxpZ25tZW50KSkKLQkJICAgIHsKLQkJICAgICAgZXJyb3JfYXQg KGNsb2MsICIlPGFsaWduJT4gY2xhdXNlIGFyZ3VtZW50IG5lZWRzIHRvIGJlICIKLQkJCQkg ICAgICAicG9zaXRpdmUgY29uc3RhbnQgcG93ZXIgb2YgdHdvIGludGVnZXIgIgotCQkJCSAg ICAgICJleHByZXNzaW9uIik7Ci0JCSAgICAgIGFsaWdubWVudCA9IE5VTExfVFJFRTsKLQkJ ICAgIH0KLQkJfQotCSAgICB9Ci0JfQorCWFsaWdubWVudCA9IGV4cHI7CiAgICAgICBlbHNl IGlmIChhbGxvY2F0b3IpCiAJewogCSAgZXJyb3JfYXQgKGNsb2MsICJ0b28gbWFueSAlcXMg Y2xhdXNlcyIsICJhbGxvY2F0b3IiKTsKIAkgIGJyZWFrOwogCX0KICAgICAgIGVsc2UKLQl7 Ci0JICBpZiAoZXhwciAhPSBlcnJvcl9tYXJrX25vZGUpCi0JICAgIGFsbG9jYXRvciA9IGV4 cHI7Ci0JfQorCSBhbGxvY2F0b3IgPSBleHByOwogICAgICAgcGFyZW5zLnJlcXVpcmVfY2xv c2UgKHBhcnNlcik7CiAgICAgfSB3aGlsZSAodHJ1ZSk7CiAgIGNwX3BhcnNlcl9yZXF1aXJl X3ByYWdtYV9lb2wgKHBhcnNlciwgcHJhZ21hX3Rvayk7CiAKLSAgaWYgKGFsbG9jYXRvciB8 fCBhbGlnbm1lbnQpCi0gICAgZm9yICh0cmVlIGMgPSBubDsgYyAhPSBOVUxMX1RSRUU7IGMg PSBPTVBfQ0xBVVNFX0NIQUlOIChjKSkKLSAgICAgIHsKLQlPTVBfQ0xBVVNFX0FMTE9DQVRF X0FMTE9DQVRPUiAoYykgPSBhbGxvY2F0b3I7Ci0JT01QX0NMQVVTRV9BTExPQ0FURV9BTElH TiAoYykgPSBhbGlnbm1lbnQ7Ci0gICAgICB9Ci0KLSAgLyogRklYTUU6IFdoZW4gaW1wbGVt ZW50aW5nIHByb3Blcmx5LCBkZWxldGUgdGhlIGFsaWduL2FsbG9jYXRlIGV4cHIgZXJyb3IK LSAgICAgY2hlY2sgYWJvdmUgYW5kIGFkZCBvbmUgaW4gc2VtYW50aWNzLmNjICh0byBwcm9w ZXJseSBoYW5kbGUgdGVtcGxhdGVzKS4KLSAgICAgQmFzZSB0aGlzIG9uIHRoZSBhbGxvY2F0 b3IvYWxpZ24gbW9kaWZpZXJzIGNoZWNrIGZvciB0aGUgJ2FsbG9jYXRlJyBjbGF1c2UKLSAg ICAgaW4gc2VtYW50aWNzLmNjJ3MgZmluaXNoX29tcF9jbGF1c2VzLiAgKi8KLSAgc29ycnlf YXQgKGxvYywgIiU8I3ByYWdtYSBvbXAgYWxsb2NhdGUlPiBub3QgeWV0IHN1cHBvcnRlZCIp OworICBmb3IgKHRyZWUgYyA9IG5sOyBjICE9IE5VTExfVFJFRTsgYyA9IE9NUF9DTEFVU0Vf Q0hBSU4gKGMpKQorICAgIHsKKyAgICAgIHRyZWUgdmFyID0gT01QX0NMQVVTRV9ERUNMIChj KTsKKyAgICAgIGlmIChsb29rdXBfYXR0cmlidXRlICgib21wIGFsbG9jYXRlIiwgREVDTF9B VFRSSUJVVEVTICh2YXIpKSkKKwl7CisJICBlcnJvcl9hdCAoT01QX0NMQVVTRV9MT0NBVElP TiAobmwpLAorCQkgICAgIiVxRCBhbHJlYWR5IGFwcGVhcmVkIGFzIGxpc3QgaXRlbSBpbiBh biAiCisJCSAgICAiJTxhbGxvY2F0ZSU+IGRpcmVjdGl2ZSIsIHZhcik7CisJICBjb250aW51 ZTsKKwl9CisgICAgICBpZiAoVFJFRV9DT0RFICh2YXIpID09IFBBUk1fREVDTCkKKwl7CisJ ICBlcnJvcl9hdCAoT01QX0NMQVVTRV9MT0NBVElPTiAobmwpLAorCQkgICAgImZ1bmN0aW9u IHBhcmFtZXRlciAlcUQgbWF5IG5vdCBhcHBlYXIgYXMgbGlzdCBpdGVtIGluIGFuICIKKwkJ ICAgICIlPGFsbG9jYXRlJT4gZGlyZWN0aXZlIiwgdmFyKTsKKwkgIGNvbnRpbnVlOworCX0K KyAgICAgIHRyZWUgdjsKKyAgICAgIGZvciAodiA9IGN1cnJlbnRfYmluZGluZ19sZXZlbC0+ bmFtZXM7IHY7IHYgPSBUUkVFX0NIQUlOICh2KSkKKwlpZiAodiA9PSB2YXIpCisJICBicmVh azsKKyAgICAgIGlmICh2ID09IE5VTExfVFJFRSkKKwl7CisJICBlcnJvcl9hdCAoT01QX0NM QVVTRV9MT0NBVElPTiAobmwpLAorCQkJIiU8YWxsb2NhdGUlPiBkaXJlY3RpdmUgbXVzdCBi ZSBpbiB0aGUgc2FtZSBzY29wZSBhcyAlcUQiLAorCQkJdmFyKTsKKwkgIGluZm9ybSAoREVD TF9TT1VSQ0VfTE9DQVRJT04gKHZhciksICJkZWNsYXJlZCBoZXJlIik7CisJICBjb250aW51 ZTsKKwl9CisgICAgICBzdHJ1Y3QgY3Bfb21wX2xvY190cmVlIGRhdGEKKwk9IHtFWFBSX0xP Q19PUl9MT0MgKGFsbG9jYXRvciwgT01QX0NMQVVTRV9MT0NBVElPTiAobmwpKSwgdmFyfTsK KyAgICAgIHdhbGtfdHJlZSAoJmFsbG9jYXRvciwgY3BfY2hlY2tfb21wX2FsbG9jYXRlX2Fs bG9jYXRvcl9yLCAmZGF0YSwgTlVMTCk7CisgICAgICBERUNMX0FUVFJJQlVURVMgKHZhcikg PSB0cmVlX2NvbnMgKGdldF9pZGVudGlmaWVyICgib21wIGFsbG9jYXRlIiksCisJCQkJCSBi dWlsZF90cmVlX2xpc3QgKGFsbG9jYXRvciwgYWxpZ25tZW50KSwKKwkJCQkJIERFQ0xfQVRU UklCVVRFUyAodmFyKSk7CisgICAgICBpZiAoIXByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkK KwlmaW5pc2hfb21wX2FsbG9jYXRlICh0cnVlLCBPTVBfQ0xBVVNFX0xPQ0FUSU9OIChubCks IHZhcik7CisgICAgfQogfQogCiAvKiBPcGVuTVAgMi41OgpkaWZmIC0tZ2l0IGEvZ2NjL2Nw L3B0LmNjIGIvZ2NjL2NwL3B0LmNjCmluZGV4IDIxMGM2Y2I5ZTRkLi4xMDYwM2Y0YzM5ZiAx MDA2NDQKLS0tIGEvZ2NjL2NwL3B0LmNjCisrKyBiL2djYy9jcC9wdC5jYwpAQCAtMTgzNzks NiArMTgzNzksMTAgQEAgdHN1YnN0X3N0bXQgKHRyZWUgdCwgdHJlZSBhcmdzLCB0c3Vic3Rf ZmxhZ3NfdCBjb21wbGFpbiwgdHJlZSBpbl9kZWNsKQogCiAJCSAgICBjcF9maW5pc2hfZGVj bCAoZGVjbCwgaW5pdCwgY29uc3RfaW5pdCwgYXNtc3BlY190cmVlLCAwLAogCQkJCSAgICBk ZWNvbXApOworCQorCQkgICAgaWYgKGZsYWdfb3Blbm1wICYmIFZBUl9QIChkZWNsKSkKKwkJ ICAgICAgZmluaXNoX29tcF9hbGxvY2F0ZSAoZmFsc2UsIERFQ0xfU09VUkNFX0xPQ0FUSU9O IChkZWNsKSwKKwkJCQkJICAgZGVjbCwgYXJncywgY29tcGxhaW4sIGluX2RlY2wpOwogCiAJ CSAgICBpZiAobmRlY2wgIT0gZXJyb3JfbWFya19ub2RlKQogCQkgICAgICBjcF9maW5pc2hf ZGVjb21wIChuZGVjbCwgZGVjb21wKTsKZGlmZiAtLWdpdCBhL2djYy9jcC9zZW1hbnRpY3Mu Y2MgYi9nY2MvY3Avc2VtYW50aWNzLmNjCmluZGV4IGRjM2MxMTQ2MWZiLi4zMGM3MGMwYjEz ZSAxMDA2NDQKLS0tIGEvZ2NjL2NwL3NlbWFudGljcy5jYworKysgYi9nY2MvY3Avc2VtYW50 aWNzLmNjCkBAIC0xMDk4Nyw2ICsxMDk4Nyw4NiBAQCBmaW5pc2hfb21wX2Zvcl9ibG9jayAo dHJlZSBiaW5kLCB0cmVlIG9tcF9mb3IpCiAgIHJldHVybiBiaW5kOwogfQogCit2b2lkCitm aW5pc2hfb21wX2FsbG9jYXRlIChib29sIGluX3BhcnNpbmcsIGxvY2F0aW9uX3QgbG9jLCB0 cmVlIGRlY2wsIHRyZWUgYXJncywKKwkJICAgICB0c3Vic3RfZmxhZ3NfdCBjb21wbGFpbiwg dHJlZSBpbl9kZWNsKQoreworICBsb2NhdGlvbl90IGxvYzI7CisgIHRyZWUgYXR0ciA9IGxv b2t1cF9hdHRyaWJ1dGUgKCJvbXAgYWxsb2NhdGUiLCBERUNMX0FUVFJJQlVURVMgKGRlY2wp KTsKKyAgaWYgKGF0dHIgPT0gTlVMTF9UUkVFKQorICAgIHJldHVybjsKKworICB0cmVlIGFs bG9jYXRvciA9IFRSRUVfUFVSUE9TRSAoVFJFRV9WQUxVRSAoYXR0cikpOworICB0cmVlIGFs aWdubWVudCA9IFRSRUVfVkFMVUUgKFRSRUVfVkFMVUUgKGF0dHIpKTsKKworICBpZiAoYWxp Z25tZW50ID09IGVycm9yX21hcmtfbm9kZSkKKyAgICBUUkVFX1ZBTFVFIChUUkVFX1ZBTFVF IChhdHRyKSkgPSBOVUxMX1RSRUU7CisgIGVsc2UgaWYgKGFsaWdubWVudCkKKyAgICB7Cisg ICAgICBsb2NhdGlvbl90IGxvYzIgPSBFWFBSX0xPQ0FUSU9OIChhbGlnbm1lbnQpOworICAg ICAgaWYgKCFpbl9wYXJzaW5nKQorCWFsaWdubWVudCA9IHRzdWJzdF9leHByIChhbGlnbm1l bnQsIGFyZ3MsIGNvbXBsYWluLCBpbl9kZWNsKTsKKyAgICAgIGFsaWdubWVudCA9IGZvbGRf bm9uX2RlcGVuZGVudF9leHByIChhbGlnbm1lbnQpOworCisgICAgICBpZiAoVFJFRV9DT0RF IChhbGlnbm1lbnQpICE9IElOVEVHRVJfQ1NUCisJICB8fCAhSU5URUdSQUxfVFlQRV9QIChU UkVFX1RZUEUgKGFsaWdubWVudCkpCisJICB8fCB0cmVlX2ludF9jc3Rfc2duIChhbGlnbm1l bnQpICE9IDEKKwkgIHx8ICFpbnRlZ2VyX3BvdzJwIChhbGlnbm1lbnQpKQorCXsKKwkgIGVy cm9yX2F0IChsb2MyLCAiJTxhbGlnbiU+IGNsYXVzZSBhcmd1bWVudCBuZWVkcyB0byBiZSBw b3NpdGl2ZSAiCisJCQkgICJjb25zdGFudCBwb3dlciBvZiB0d28gaW50ZWdlciBleHByZXNz aW9uIik7CisJICBUUkVFX1ZBTFVFIChUUkVFX1ZBTFVFIChhdHRyKSkgPSBOVUxMX1RSRUU7 CisJfQorICAgICAgZWxzZQorCVRSRUVfVkFMVUUgKFRSRUVfVkFMVUUgKGF0dHIpKSA9IGFs aWdubWVudDsKKyAgICB9CisgIGxvYzIgPSBhbGxvY2F0b3IgPyBFWFBSX0xPQ0FUSU9OIChh bGxvY2F0b3IpIDogVU5LTk9XTl9MT0NBVElPTjsKKyAgaWYgKGFsbG9jYXRvciA9PSBlcnJv cl9tYXJrX25vZGUpCisgICAgeworICAgICAgYWxsb2NhdG9yID0gVFJFRV9QVVJQT1NFIChU UkVFX1ZBTFVFIChhdHRyKSkgPSBOVUxMX1RSRUU7CisgICAgICByZXR1cm47CisgICAgfQor ICBlbHNlCisgICAgeworICAgICAgaWYgKCFpbl9wYXJzaW5nKQorCWFsbG9jYXRvciA9IHRz dWJzdF9leHByIChhbGxvY2F0b3IsIGFyZ3MsIGNvbXBsYWluLCBpbl9kZWNsKTsKKyAgICAg IGFsbG9jYXRvciA9IGZvbGRfbm9uX2RlcGVuZGVudF9leHByIChhbGxvY2F0b3IpOworICAg IH0KKworICBpZiAoYWxsb2NhdG9yKQorICAgIHsKKyAgICAgIHRyZWUgb3JpZ190eXBlID0g VFlQRV9NQUlOX1ZBUklBTlQgKFRSRUVfVFlQRSAoYWxsb2NhdG9yKSk7CisgICAgICBpZiAo IUlOVEVHUkFMX1RZUEVfUCAoVFJFRV9UWVBFIChhbGxvY2F0b3IpKQorCSAgfHwgVFJFRV9D T0RFIChvcmlnX3R5cGUpICE9IEVOVU1FUkFMX1RZUEUKKwkgIHx8IFRZUEVfTkFNRSAob3Jp Z190eXBlKSA9PSBOVUxMX1RSRUUKKwkgIHx8IChERUNMX05BTUUgKFRZUEVfTkFNRSAob3Jp Z190eXBlKSkKKwkgICAgICAhPSBnZXRfaWRlbnRpZmllciAoIm9tcF9hbGxvY2F0b3JfaGFu ZGxlX3QiKSkpCisJeworCSAgZXJyb3JfYXQgKGxvYzIsICIlPGFsbG9jYXRvciU+IGNsYXVz ZSBleHByZXNzaW9uIGhhcyB0eXBlICIKKwkJCSAgIiVxVCByYXRoZXIgdGhhbiAlPG9tcF9h bGxvY2F0b3JfaGFuZGxlX3QlPiIsCisJCQkgIFRSRUVfVFlQRSAoYWxsb2NhdG9yKSk7CisJ ICBhbGxvY2F0b3IgPSBUUkVFX1BVUlBPU0UgKFRSRUVfVkFMVUUgKGF0dHIpKSA9IE5VTExf VFJFRTsKKwl9CisgICAgICBlbHNlCisJVFJFRV9QVVJQT1NFIChUUkVFX1ZBTFVFIChhdHRy KSkgPSBmb2xkX25vbl9kZXBlbmRlbnRfZXhwciAoYWxsb2NhdG9yKTsKKyAgICB9CisgIGlm IChUUkVFX1NUQVRJQyAoZGVjbCkpCisgICAgeworICAgICAgaWYgKGFsbG9jYXRvciA9PSBO VUxMX1RSRUUpCisJZXJyb3JfYXQgKGxvYywgIiU8YWxsb2NhdG9yJT4gY2xhdXNlIHJlcXVp cmVkIGZvciAiCisJCSAgICAgICAic3RhdGljIHZhcmlhYmxlICVxRCIsIGRlY2wpOworICAg ICAgZWxzZSBpZiAoYWxsb2NhdG9yCisJICAgICAgICYmICh3aTo6dG9fd2lkZXN0IChhbGxv Y2F0b3IpIDwgMQorCQkgICB8fCB3aTo6dG9fd2lkZXN0IChhbGxvY2F0b3IpID4gOCkpCisJ LyogOCA9IGxhcmdlc3QgcHJlZGVmaW5lZCBtZW1vcnkgYWxsb2NhdG9yLiAqLworCWVycm9y X2F0IChsb2MyLCAiJTxhbGxvY2F0b3IlPiBjbGF1c2UgcmVxdWlyZXMgYSBwcmVkZWZpbmVk IGFsbG9jYXRvciAiCisJCQkiYXMgJXFEIGlzIHN0YXRpYyIsIGRlY2wpOworICAgICAgZWxz ZQorCXNvcnJ5X2F0IChsb2MsICIlPCNwcmFnbWEgb21wIGFsbG9jYXRlJT4gZm9yIHN0YXRp YyB2YXJpYWJsZXMgbGlrZSAlcUQgIgorCQkgICAgICAgIm5vdCB5ZXQgc3VwcG9ydGVkIiwg ZGVjbCk7CisgICAgfQorfQorCiB2b2lkCiBmaW5pc2hfb21wX2F0b21pYyAobG9jYXRpb25f dCBsb2MsIGVudW0gdHJlZV9jb2RlIGNvZGUsIGVudW0gdHJlZV9jb2RlIG9wY29kZSwKIAkJ ICAgdHJlZSBsaHMsIHRyZWUgcmhzLCB0cmVlIHYsIHRyZWUgbGhzMSwgdHJlZSByaHMxLCB0 cmVlIHIsCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL2Fs bG9jYXRlLTE3LmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL2FsbG9jYXRl LTE3LmMKaW5kZXggZjc1YWYwYzJkOTMuLjJhODk2Y2MzMzRkIDEwMDY0NAotLS0gYS9nY2Mv dGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL2FsbG9jYXRlLTE3LmMKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9jLWMrKy1jb21tb24vZ29tcC9hbGxvY2F0ZS0xNy5jCkBAIC0yMCw3ICsyMCw3 IEBAIG9uZSAoKQogICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwKHRvZnJvbTogcmVzdWx0KSBm aXJzdHByaXZhdGUobikKICAgICB7CiAgICAgICBpbnQgdmFyID0gNTsgLy8sIHZhcjJbbl07 Ci0gICAgICAjcHJhZ21hIG9tcCBhbGxvY2F0ZSh2YXIpIGFsaWduKDEyOCkgYWxsb2NhdG9y KG9tcF9sb3dfbGF0X21lbV9hbGxvYykgLyogeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBs ZW1lbnRlZDogJyNwcmFnbWEgb21wIGFsbG9jYXRlJyBub3QgeWV0IHN1cHBvcnRlZCIgIiIg eyB0YXJnZXQgYysrIH0gfSAqLworICAgICAgI3ByYWdtYSBvbXAgYWxsb2NhdGUodmFyKSBh bGlnbigxMjgpIGFsbG9jYXRvcihvbXBfbG93X2xhdF9tZW1fYWxsb2MpCiAgICAgICAgdmFy ID0gNzsKIH0KIApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29t cC9hbGxvY2F0ZS01LmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL2FsbG9j YXRlLTUuYwppbmRleCAyY2E0Nzg2MjY0Zi4uYjllZWQxNTI2MTMgMTAwNjQ0Ci0tLSBhL2dj Yy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvbXAvYWxsb2NhdGUtNS5jCisrKyBiL2djYy90 ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvbXAvYWxsb2NhdGUtNS5jCkBAIC0yMSwxMSArMjEs MTAgQEAgZm9vICgpCiAgIG9tcF9hbGxvY2F0b3JfaGFuZGxlX3QgbXlfYWxsb2NhdG9yID0g b21wX2RlZmF1bHRfbWVtX2FsbG9jOwogICBpbnQgYSwgYjsKICAgc3RhdGljIGludCBjOwot I3ByYWdtYSBvbXAgYWxsb2NhdGUgKGEpICAvKiB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmlt cGxlbWVudGVkOiAnI3ByYWdtYSBvbXAgYWxsb2NhdGUnIG5vdCB5ZXQgc3VwcG9ydGVkIiAi IiB7IHRhcmdldCBjKysgfSB9ICovCi0jcHJhZ21hIG9tcCBhbGxvY2F0ZSAoYikgYWxsb2Nh dG9yKG15X2FsbG9jYXRvcikgIC8qIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50 ZWQ6ICcjcHJhZ21hIG9tcCBhbGxvY2F0ZScgbm90IHlldCBzdXBwb3J0ZWQiICIiIHsgdGFy Z2V0IGMrKyB9IH0gKi8KKyNwcmFnbWEgb21wIGFsbG9jYXRlIChhKQorI3ByYWdtYSBvbXAg YWxsb2NhdGUgKGIpIGFsbG9jYXRvcihteV9hbGxvY2F0b3IpCiAjcHJhZ21hIG9tcCBhbGxv Y2F0ZShjKSBhbGlnbigzMikKLSAgLyogeyBkZy1tZXNzYWdlICInYWxsb2NhdG9yJyBjbGF1 c2UgcmVxdWlyZWQgZm9yIHN0YXRpYyB2YXJpYWJsZSAnYyciICIiIHsgdGFyZ2V0IGMgfSAu LTEgfSAqLwotICAvKiB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiAnI3By YWdtYSBvbXAgYWxsb2NhdGUnIG5vdCB5ZXQgc3VwcG9ydGVkIiAiIiB7IHRhcmdldCBjKysg fSAuLTIgfSAqLworICAvKiB7IGRnLW1lc3NhZ2UgIidhbGxvY2F0b3InIGNsYXVzZSByZXF1 aXJlZCBmb3Igc3RhdGljIHZhcmlhYmxlICdjJyIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEg fSAqLwogfQogCiB2b2lkCkBAIC0zNCwxNCArMzMsMTIgQEAgYmFyICgpCiAgIGludCBhLCBh MiwgYjsKICAgb21wX2FsbG9jYXRvcl9oYW5kbGVfdCBteV9hbGxvY2F0b3I7CiAjcHJhZ21h IG9tcCBhbGxvY2F0ZSAgLyogeyBkZy1lcnJvciAiZXhwZWN0ZWQgJ1xcKCcgYmVmb3JlIGVu ZCBvZiBsaW5lIiB9ICovCi0gIC8qIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50 ZWQ6ICcjcHJhZ21hIG9tcCBhbGxvY2F0ZScgbm90IHlldCBzdXBwb3J0ZWQiICIiIHsgdGFy Z2V0IGMrKyB9IC4tMSB9ICovCiAjcHJhZ21hIG9tcCBhbGxvY2F0ZSBhbGxvY2F0b3IobXlf YWxsb2NhdG9yKSAgLyogeyBkZy1lcnJvciAiZXhwZWN0ZWQgJ1xcKCcgYmVmb3JlICdhbGxv Y2F0b3InIiB9ICovCi0gIC8qIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6 ICcjcHJhZ21hIG9tcCBhbGxvY2F0ZScgbm90IHlldCBzdXBwb3J0ZWQiICIiIHsgdGFyZ2V0 IGMrKyB9IC4tMSB9ICovCiAjcHJhZ21hIG9tcCBhbGxvY2F0ZShhKSBmb28obXlfYWxsb2Nh dG9yKSAvKiB7IGRnLWVycm9yICJleHBlY3RlZCAnYWxsb2NhdG9yJyIgfSAqLwogICAvKiB7 IGRnLWVycm9yICJleHBlY3RlZCBlbmQgb2YgbGluZSBiZWZvcmUgJ1xcKCcgdG9rZW4iICIi IHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KLSAgLyogeyBkZy1tZXNzYWdlICJzb3JyeSwg dW5pbXBsZW1lbnRlZDogJyNwcmFnbWEgb21wIGFsbG9jYXRlJyBub3QgeWV0IHN1cHBvcnRl ZCIgIiIgeyB0YXJnZXQgYysrIH0gLi0yIH0gKi8KLSNwcmFnbWEgb21wIGFsbG9jYXRlKGEy KSBhbGxvY2F0b3IoYikgIC8qIHsgZGctZXJyb3IgIidhbGxvY2F0b3InIGNsYXVzZSBhbGxv Y2F0b3IgZXhwcmVzc2lvbiBoYXMgdHlwZSAnaW50JyByYXRoZXIgdGhhbiAnb21wX2FsbG9j YXRvcl9oYW5kbGVfdCciICJ0b2RvOiBjcC9zZW1hbnRpY3MuYyIgeyB4ZmFpbCBjKysgfSB9 ICovCi0gIC8qIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6ICcjcHJhZ21h IG9tcCBhbGxvY2F0ZScgbm90IHlldCBzdXBwb3J0ZWQiICIiIHsgdGFyZ2V0IGMrKyB9IC4t MSB9ICovCisjcHJhZ21hIG9tcCBhbGxvY2F0ZShhMikgYWxsb2NhdG9yKGIpICAvKiB7IGRn LWVycm9yICInYWxsb2NhdG9yJyBjbGF1c2UgZXhwcmVzc2lvbiBoYXMgdHlwZSAnaW50JyBy YXRoZXIgdGhhbiAnb21wX2FsbG9jYXRvcl9oYW5kbGVfdCciIH0gKi8KKyAgLyogVGhlIGZv bGxvd2luZyBlcnJvciBpcyBjb3JyZWN0IGFsYmVpdCBzbGlnaHRseSBzdXJwcmlzaW5nOiAg Ki8KKyAgLyogeyBkZy1lcnJvciAidmFyaWFibGUgJ2InIHVzZWQgaW4gdGhlICdhbGxvY2F0 b3InIGNsYXVzZSBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSAnYTInIiAiIiB7IHRhcmdldCBj KysgfSAuLTIgfSAqLwogfQogCiAKQEAgLTUwLDIyICs0NywxNiBAQCBhbGlnbl90ZXN0ICgp CiB7CiAgIGludCBpMSxpMixpMyxpNCxpNSxpNjsKICAgI3ByYWdtYSBvbXAgYWxsb2NhdGUo aTEpIGFsbG9jYXRvcihvbXBfZGVmYXVsdF9tZW1fYWxsb2MpLCBhbGlnbigzMikKLSAgLyog eyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogJyNwcmFnbWEgb21wIGFsbG9j YXRlJyBub3QgeWV0IHN1cHBvcnRlZCIgIiIgeyB0YXJnZXQgYysrIH0gLi0xIH0gKi8KICAg I3ByYWdtYSBvbXAgYWxsb2NhdGUoaTIpIGFsaWduICggMzIgKSxhbGxvY2F0b3Iob21wX2Rl ZmF1bHRfbWVtX2FsbG9jKQotICAvKiB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVu dGVkOiAnI3ByYWdtYSBvbXAgYWxsb2NhdGUnIG5vdCB5ZXQgc3VwcG9ydGVkIiAiIiB7IHRh cmdldCBjKysgfSAuLTEgfSAqLwogICAjcHJhZ21hIG9tcCBhbGxvY2F0ZShpMyksYWxsb2Nh dG9yKG9tcF9kZWZhdWx0X21lbV9hbGxvYykgYWxpZ24oMzIpCi0gIC8qIHsgZGctbWVzc2Fn ZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6ICcjcHJhZ21hIG9tcCBhbGxvY2F0ZScgbm90IHll dCBzdXBwb3J0ZWQiICIiIHsgdGFyZ2V0IGMrKyB9IC4tMSB9ICovCiAgICNwcmFnbWEgb21w IGFsbG9jYXRlKGk0KSBhbGlnbiAoIDMyICkgYWxsb2NhdG9yKG9tcF9kZWZhdWx0X21lbV9h bGxvYykKLSAgLyogeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogJyNwcmFn bWEgb21wIGFsbG9jYXRlJyBub3QgeWV0IHN1cHBvcnRlZCIgIiIgeyB0YXJnZXQgYysrIH0g Li0xIH0gKi8KIAogICAjcHJhZ21hIG9tcCBhbGxvY2F0ZShpNSkgYWxsb2NhdG9yICggb21w X2hpZ2hfYndfbWVtX2FsbG9jICksIGFsaWduICggMzIgKSBhbGxvY2F0b3Iob21wX2RlZmF1 bHRfbWVtX2FsbG9jKQogICAvKiB7IGRnLWVycm9yICJ0b28gbWFueSAnYWxsb2NhdG9yJyBj bGF1c2VzIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICovCiAgIC8qIHsgZGctZXJyb3Ig ImV4cGVjdGVkIGVuZCBvZiBsaW5lIGJlZm9yZSAnXFwpJyB0b2tlbiIgIiIgeyB0YXJnZXQg Ki0qLSogfSAuLTIgfSAqLwotICAvKiB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVu dGVkOiAnI3ByYWdtYSBvbXAgYWxsb2NhdGUnIG5vdCB5ZXQgc3VwcG9ydGVkIiAiIiB7IHRh cmdldCBjKysgfSAuLTMgfSAqLwogICAjcHJhZ21hIG9tcCBhbGxvY2F0ZShpNikgYWxpZ24g KCAzMiApLCBhbGlnbigzMikgYWxsb2NhdG9yKG9tcF9kZWZhdWx0X21lbV9hbGxvYykKICAg LyogeyBkZy1lcnJvciAidG9vIG1hbnkgJ2FsaWduJyBjbGF1c2VzIiAiIiB7IHRhcmdldCAq LSotKiB9IC4tMSB9ICovCiAgIC8qIHsgZGctZXJyb3IgImV4cGVjdGVkIGVuZCBvZiBsaW5l IGJlZm9yZSAnXFwpJyB0b2tlbiIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTIgfSAqLwotICAv KiB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiAnI3ByYWdtYSBvbXAgYWxs b2NhdGUnIG5vdCB5ZXQgc3VwcG9ydGVkIiAiIiB7IHRhcmdldCBjKysgfSAuLTMgfSAqLwog fQogCiB2b2lkCkBAIC03Myw5ICs2NCw2IEBAIGFsaWduX3Rlc3QyICgpCiB7CiAgIGludCBp LCBpMixpMzsKICAgI3ByYWdtYSBvbXAgYWxsb2NhdGUoaSkgYWxpZ24gKDMyLjApICAvKiB7 IGRnLWVycm9yICInYWxpZ24nIGNsYXVzZSBhcmd1bWVudCBuZWVkcyB0byBiZSBwb3NpdGl2 ZSBjb25zdGFudCBwb3dlciBvZiB0d28gaW50ZWdlciBleHByZXNzaW9uIiB9ICovCi0gIC8q IHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6ICcjcHJhZ21hIG9tcCBhbGxv Y2F0ZScgbm90IHlldCBzdXBwb3J0ZWQiICIiIHsgdGFyZ2V0IGMrKyB9IC4tMSB9ICovCiAg ICNwcmFnbWEgb21wIGFsbG9jYXRlKGkyKSBhbGlnbiAoIDMxICkgIC8qIHsgZGctZXJyb3Ig IidhbGlnbicgY2xhdXNlIGFyZ3VtZW50IG5lZWRzIHRvIGJlIHBvc2l0aXZlIGNvbnN0YW50 IHBvd2VyIG9mIHR3byBpbnRlZ2VyIGV4cHJlc3Npb24iIH0gKi8KLSAgLyogeyBkZy1tZXNz YWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogJyNwcmFnbWEgb21wIGFsbG9jYXRlJyBub3Qg eWV0IHN1cHBvcnRlZCIgIiIgeyB0YXJnZXQgYysrIH0gLi0xIH0gKi8KICAgI3ByYWdtYSBv bXAgYWxsb2NhdGUoaTMpIGFsaWduICggLTMyICkgIC8qIHsgZGctZXJyb3IgIidhbGlnbicg Y2xhdXNlIGFyZ3VtZW50IG5lZWRzIHRvIGJlIHBvc2l0aXZlIGNvbnN0YW50IHBvd2VyIG9m IHR3byBpbnRlZ2VyIGV4cHJlc3Npb24iIH0gKi8KLSAgLyogeyBkZy1tZXNzYWdlICJzb3Jy eSwgdW5pbXBsZW1lbnRlZDogJyNwcmFnbWEgb21wIGFsbG9jYXRlJyBub3QgeWV0IHN1cHBv cnRlZCIgIiIgeyB0YXJnZXQgYysrIH0gLi0xIH0gKi8KIH0KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvbXAvYWxsb2NhdGUtOS5jIGIvZ2NjL3Rlc3RzdWl0 ZS9jLWMrKy1jb21tb24vZ29tcC9hbGxvY2F0ZS05LmMKaW5kZXggMzEzODI3NDhiZTYuLmFh YTUyYjM1OWY4IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21w L2FsbG9jYXRlLTkuYworKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL2Fs bG9jYXRlLTkuYwpAQCAtMTcsNyArMTcsMTEgQEAgdHlwZWRlZiBlbnVtIG9tcF9hbGxvY2F0 b3JfaGFuZGxlX3QKIH0gb21wX2FsbG9jYXRvcl9oYW5kbGVfdDsKIAogCi1zdGF0aWMgaW50 IEFbNV0gPSB7MSwyLDMsNCw1fTsKK3N0YXRpYyBpbnQgQTFbNV0gPSB7MSwyLDMsNCw1fTsK K3N0YXRpYyBpbnQgQTJbNV0gPSB7MSwyLDMsNCw1fTsKK3N0YXRpYyBpbnQgQTNbNV0gPSB7 MSwyLDMsNCw1fTsKK3N0YXRpYyBpbnQgQTRbNV0gPSB7MSwyLDMsNCw1fTsKK3N0YXRpYyBp bnQgQTVbNV0gPSB7MSwyLDMsNCw1fTsKIGludCBCLCBDLCBEOwogCiAvKiBJZiB0aGUgZm9s bG93aW5nIGZhaWxzIGJlY2F1c2Ugb2YgYWRkZWQgcHJlZGVmaW5lZCBhbGxvY2F0b3JzLCBw bGVhc2UgdXBkYXRlCkBAIC0yNyw3MiArMzEsNjAgQEAgaW50IEIsIEMsIEQ7CiAgICAtIGxp YmdvbXAvbGliZ29tcC50ZXhpIChkb2N1bWVudCB0aGUgbmV3IHZhbHVlcyAtIG11bHRpcGxl IGxvY2F0aW9ucykKICAgICsgZW5zdXJlIHRoYXQgdGhlIG1lbW9yeS1zcGFjZXMgYXJlIGFs c28gdXAgdG8gZGF0ZS4gKi8KIAotI3ByYWdtYSBvbXAgYWxsb2NhdGUoQSkgYWxpZ24oMzIp IGFsbG9jYXRvcigob21wX2FsbG9jYXRvcl9oYW5kbGVfdCkgOSkgLyogeyBkZy1lcnJvciAi J2FsbG9jYXRvcicgY2xhdXNlIHJlcXVpcmVzIGEgcHJlZGVmaW5lZCBhbGxvY2F0b3IgYXMg J0EnIGlzIHN0YXRpYyIgIiIgeyB4ZmFpbCBjKysgfSB9ICovCi0vKiB7IGRnLW1lc3NhZ2Ug InNvcnJ5LCB1bmltcGxlbWVudGVkOiAnI3ByYWdtYSBvbXAgYWxsb2NhdGUnIG5vdCB5ZXQg c3VwcG9ydGVkIiAiIiB7IHRhcmdldCBjKysgfSAuLTEgfSAqLworI3ByYWdtYSBvbXAgYWxs b2NhdGUoQTEpIGFsaWduKDMyKSBhbGxvY2F0b3IoKG9tcF9hbGxvY2F0b3JfaGFuZGxlX3Qp IDkpIC8qIHsgZGctZXJyb3IgIidhbGxvY2F0b3InIGNsYXVzZSByZXF1aXJlcyBhIHByZWRl ZmluZWQgYWxsb2NhdG9yIGFzICdBMScgaXMgc3RhdGljIiB9ICovCiAKIAogLy8gdHlwbyBp biBhbGxvY2F0b3IgbmFtZToKLSNwcmFnbWEgb21wIGFsbG9jYXRlKEEpIGFsbG9jYXRvcihv bXBfbG93X2xhdGVuY3lfbWVtX2FsbG9jKQorI3ByYWdtYSBvbXAgYWxsb2NhdGUoQTIpIGFs bG9jYXRvcihvbXBfbG93X2xhdGVuY3lfbWVtX2FsbG9jKQogLyogeyBkZy1lcnJvciAiJ29t cF9sb3dfbGF0ZW5jeV9tZW1fYWxsb2MnIHVuZGVjbGFyZWQgaGVyZSBcXChub3QgaW4gYSBm dW5jdGlvblxcKTsgZGlkIHlvdSBtZWFuICdvbXBfbG93X2xhdF9tZW1fYWxsb2MnXFw/IiAi IiB7IHRhcmdldCBjIH0gLi0xIH0gKi8KIC8qIHsgZGctZXJyb3IgIidvbXBfbG93X2xhdGVu Y3lfbWVtX2FsbG9jJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGU7IGRpZCB5b3Ug bWVhbiAnb21wX2xvd19sYXRfbWVtX2FsbG9jJ1xcPyIgIiIgeyB0YXJnZXQgYysrIH0gLi0y IH0gKi8KLS8qIHsgZGctZXJyb3IgIidhbGxvY2F0b3InIGNsYXVzZSByZXF1aXJlZCBmb3Ig c3RhdGljIHZhcmlhYmxlICdBJyIgIiIgeyB0YXJnZXQgYyB9IC4tMyB9ICovCi0vKiB7IGRn LW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiAnI3ByYWdtYSBvbXAgYWxsb2NhdGUn IG5vdCB5ZXQgc3VwcG9ydGVkIiAiIiB7IHRhcmdldCBjKysgfSAuLTQgfSAqLworLyogeyBk Zy1lcnJvciAiJ2FsbG9jYXRvcicgY2xhdXNlIHJlcXVpcmVkIGZvciBzdGF0aWMgdmFyaWFi bGUgJ0EyJyIgIiIgeyB0YXJnZXQgYyB9IC4tMyB9ICovCiAKIC8qIGFsaWduIGJlIGNvbnN0 IG11bHRpcGxlIG9mIDIgKi8KLSNwcmFnbWEgb21wIGFsbG9jYXRlKEEpIGFsaWduKDMxKSBh bGxvY2F0b3Iob21wX2RlZmF1bHRfbWVtX2FsbG9jKSAvKiB7IGRnLWVycm9yICInYWxpZ24n IGNsYXVzZSBhcmd1bWVudCBuZWVkcyB0byBiZSBwb3NpdGl2ZSBjb25zdGFudCBwb3dlciBv ZiB0d28gaW50ZWdlciBleHByZXNzaW9uIiB9ICovCi0vKiB7IGRnLW1lc3NhZ2UgInNvcnJ5 LCB1bmltcGxlbWVudGVkOiAnI3ByYWdtYSBvbXAgYWxsb2NhdGUnIGZvciBzdGF0aWMgdmFy aWFibGVzIGxpa2UgJ0EnIG5vdCB5ZXQgc3VwcG9ydGVkIiAiIiB7IHRhcmdldCBjIH0gLi0x IH0gKi8KLS8qIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6ICcjcHJhZ21h IG9tcCBhbGxvY2F0ZScgbm90IHlldCBzdXBwb3J0ZWQiICIiIHsgdGFyZ2V0IGMrKyB9IC4t MiB9ICovCisjcHJhZ21hIG9tcCBhbGxvY2F0ZShBMykgYWxpZ24oMzEpIGFsbG9jYXRvcihv bXBfZGVmYXVsdF9tZW1fYWxsb2MpIC8qIHsgZGctZXJyb3IgIidhbGlnbicgY2xhdXNlIGFy Z3VtZW50IG5lZWRzIHRvIGJlIHBvc2l0aXZlIGNvbnN0YW50IHBvd2VyIG9mIHR3byBpbnRl Z2VyIGV4cHJlc3Npb24iIH0gKi8KKy8qIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVt ZW50ZWQ6ICcjcHJhZ21hIG9tcCBhbGxvY2F0ZScgZm9yIHN0YXRpYyB2YXJpYWJsZXMgbGlr ZSAnQTMnIG5vdCB5ZXQgc3VwcG9ydGVkIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9ICov CiAKIC8qIGFsbG9jYXRvciBtaXNzaW5nIChyZXF1aXJlZCBhcyBBIGlzIHN0YXRpYykgKi8K LSNwcmFnbWEgb21wIGFsbG9jYXRlKEEpIGFsaWduKDMyKSAvKiB7IGRnLWVycm9yICInYWxs b2NhdG9yJyBjbGF1c2UgcmVxdWlyZWQgZm9yIHN0YXRpYyB2YXJpYWJsZSAnQSciICIiIHsg eGZhaWwgYysrIH0gfSAqLwotLyogeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRl ZDogJyNwcmFnbWEgb21wIGFsbG9jYXRlJyBub3QgeWV0IHN1cHBvcnRlZCIgIiIgeyB0YXJn ZXQgYysrIH0gLi0xIH0gKi8KKyNwcmFnbWEgb21wIGFsbG9jYXRlKEE0KSBhbGlnbigzMikg LyogeyBkZy1lcnJvciAiJ2FsbG9jYXRvcicgY2xhdXNlIHJlcXVpcmVkIGZvciBzdGF0aWMg dmFyaWFibGUgJ0E0JyIgfSAqLwogCiAvKiAiZXhwcmVzc2lvbiBpbiB0aGUgY2xhdXNlIG11 c3QgYmUgYSBjb25zdGFudCBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIG9uZSBvZiB0 aGUKICAgIHByZWRlZmluZWQgbWVtb3J5IGFsbG9jYXRvciB2YWx1ZXMgLT4gb21wX2xvd19s YXRfbWVtX2FsbG9jIiAgKi8KICNwcmFnbWEgb21wIGFsbG9jYXRlKEIpIGFsbG9jYXRvcigo b21wX2FsbG9jYXRvcl9oYW5kbGVfdCkgKG9tcF9oaWdoX2J3X21lbV9hbGxvYysxKSkgYWxp Z24oMzIpIC8qIE9LOiBvbXBfbG93X2xhdF9tZW1fYWxsb2MgKi8KLS8qIHsgZGctbWVzc2Fn ZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6ICcjcHJhZ21hIG9tcCBhbGxvY2F0ZScgZm9yIHN0 YXRpYyB2YXJpYWJsZXMgbGlrZSAnQicgbm90IHlldCBzdXBwb3J0ZWQiICIiIHsgdGFyZ2V0 IGMgfSAuLTEgfSAqLwotLyogeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDog JyNwcmFnbWEgb21wIGFsbG9jYXRlJyBub3QgeWV0IHN1cHBvcnRlZCIgIiIgeyB0YXJnZXQg YysrIH0gLi0yIH0gKi8KKy8qIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6 ICcjcHJhZ21hIG9tcCBhbGxvY2F0ZScgZm9yIHN0YXRpYyB2YXJpYWJsZXMgbGlrZSAnQicg bm90IHlldCBzdXBwb3J0ZWQiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KIAogI3By YWdtYSBvbXAgYWxsb2NhdGUoQykgYWxsb2NhdG9yKChvbXBfYWxsb2NhdG9yX2hhbmRsZV90 KSAyKSAvKiBPSzogb21wX2xhcmdlX2NhcF9tZW1fYWxsb2MgKi8KLS8qIHsgZGctbWVzc2Fn ZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6ICcjcHJhZ21hIG9tcCBhbGxvY2F0ZScgZm9yIHN0 YXRpYyB2YXJpYWJsZXMgbGlrZSAnQycgbm90IHlldCBzdXBwb3J0ZWQiICIiIHsgdGFyZ2V0 IGMgfSAuLTEgfSAqLwotLyogeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDog JyNwcmFnbWEgb21wIGFsbG9jYXRlJyBub3QgeWV0IHN1cHBvcnRlZCIgIiIgeyB0YXJnZXQg YysrIH0gLi0yIH0gKi8KKy8qIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6 ICcjcHJhZ21hIG9tcCBhbGxvY2F0ZScgZm9yIHN0YXRpYyB2YXJpYWJsZXMgbGlrZSAnQycg bm90IHlldCBzdXBwb3J0ZWQiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0gKi8KIAotI3By YWdtYSBvbXAgYWxsb2NhdGUoQSkgYWxpZ24oMzIpIGFsbG9jYXRvcihvbXBfbnVsbF9hbGxv Y2F0b3IpIC8qIHsgZGctZXJyb3IgIidhbGxvY2F0b3InIGNsYXVzZSByZXF1aXJlcyBhIHBy ZWRlZmluZWQgYWxsb2NhdG9yIGFzICdBJyBpcyBzdGF0aWMiICIiIHsgeGZhaWwgYysrIH0g fSAqLwotLyogeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogJyNwcmFnbWEg b21wIGFsbG9jYXRlJyBub3QgeWV0IHN1cHBvcnRlZCIgIiIgeyB0YXJnZXQgYysrIH0gLi0x IH0gKi8KKyNwcmFnbWEgb21wIGFsbG9jYXRlKEE1KSBhbGlnbigzMikgYWxsb2NhdG9yKG9t cF9udWxsX2FsbG9jYXRvcikgLyogeyBkZy1lcnJvciAiJ2FsbG9jYXRvcicgY2xhdXNlIHJl cXVpcmVzIGEgcHJlZGVmaW5lZCBhbGxvY2F0b3IgYXMgJ0E1JyBpcyBzdGF0aWMiIH0gKi8K IAotI3ByYWdtYSBvbXAgYWxsb2NhdGUoQykgYWxpZ24oMzIpIGFsbG9jYXRvcihvbXBfbGFy Z2VfY2FwX21lbV9hbGxvYykgIC8qIHsgZGctZXJyb3IgIidDJyBhbHJlYWR5IGFwcGVhcmVk IGFzIGxpc3QgaXRlbSBpbiBhbiAnYWxsb2NhdGUnIGRpcmVjdGl2ZSIgIiIgeyB4ZmFpbCAq LSotKiB9IH0gKi8KLS8qIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6ICcj cHJhZ21hIG9tcCBhbGxvY2F0ZScgZm9yIHN0YXRpYyB2YXJpYWJsZXMgbGlrZSAnQycgbm90 IHlldCBzdXBwb3J0ZWQiICIiIHsgdGFyZ2V0IGMgfSAuLTEgfSAqLwotLyogeyBkZy1tZXNz YWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogJyNwcmFnbWEgb21wIGFsbG9jYXRlJyBub3Qg eWV0IHN1cHBvcnRlZCIgIiIgeyB0YXJnZXQgYysrIH0gLi0yIH0gKi8KKyNwcmFnbWEgb21w IGFsbG9jYXRlKEMpIGFsaWduKDMyKSBhbGxvY2F0b3Iob21wX2xhcmdlX2NhcF9tZW1fYWxs b2MpCisvKiB7IGRnLWVycm9yICInQycgYWxyZWFkeSBhcHBlYXJlZCBhcyBsaXN0IGl0ZW0g aW4gYW4gJ2FsbG9jYXRlJyBkaXJlY3RpdmUiICIiIHsgdGFyZ2V0IGMrKyB9IC4tMSB9ICov CisvKiB7IGRnLW1lc3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiAnI3ByYWdtYSBvbXAg YWxsb2NhdGUnIGZvciBzdGF0aWMgdmFyaWFibGVzIGxpa2UgJ0MnIG5vdCB5ZXQgc3VwcG9y dGVkIiAiIiB7IHRhcmdldCBjIH0gLi0yIH0gKi8KIAogLy8gYWxsb2NhdGUgZGlyZWN0aXZl IGluIHNhbWUgVFUKIGludCBmKCkKIHsKLSAgI3ByYWdtYSBvbXAgYWxsb2NhdGUoRCkgYWxp Z24oMzIpIGFsbG9jYXRvcihvbXBfbGFyZ2VfY2FwX21lbV9hbGxvYykgLyogeyBkZy1lcnJv ciAiJ2FsbG9jYXRlJyBkaXJlY3RpdmUgbXVzdCBiZSBpbiB0aGUgc2FtZSBzY29wZSBhcyAn RCciICIiIHsgeGZhaWwgYysrIH0gfSAqLwotLyogeyBkZy1ub3RlICJkZWNsYXJlZCBoZXJl IiAiIiB7IHRhcmdldCBjIH0gMjEgfSAqLwotLyogeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5p bXBsZW1lbnRlZDogJyNwcmFnbWEgb21wIGFsbG9jYXRlJyBub3QgeWV0IHN1cHBvcnRlZCIg IiIgeyB0YXJnZXQgYysrIH0gLi0yIH0gKi8KLSAgcmV0dXJuIEFbMF07CisgICNwcmFnbWEg b21wIGFsbG9jYXRlKEQpIGFsaWduKDMyKSBhbGxvY2F0b3Iob21wX2xhcmdlX2NhcF9tZW1f YWxsb2MpIC8qIHsgZGctZXJyb3IgIidhbGxvY2F0ZScgZGlyZWN0aXZlIG11c3QgYmUgaW4g dGhlIHNhbWUgc2NvcGUgYXMgJ0QnIiB9ICovCisvKiB7IGRnLW5vdGUgImRlY2xhcmVkIGhl cmUiICIiIHsgdGFyZ2V0ICotKi0qIH0gMjUgfSAqLworICByZXR1cm4gQTFbMF07CiB9CiAK IGludCBnKCkKIHsKICAgaW50IGEyPTEsIGIyPTI7CiAgICNwcmFnbWEgb21wIGFsbG9jYXRl KGEyKQotLyogeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogJyNwcmFnbWEg b21wIGFsbG9jYXRlJyBub3QgeWV0IHN1cHBvcnRlZCIgIiIgeyB0YXJnZXQgYysrIH0gLi0x IH0gKi8KLSAgI3ByYWdtYSBvbXAgYWxsb2NhdGUoYTIpICAvKiB7IGRnLWVycm9yICInYTIn IGFscmVhZHkgYXBwZWFyZWQgYXMgbGlzdCBpdGVtIGluIGFuICdhbGxvY2F0ZScgZGlyZWN0 aXZlIiAiIiB7IHhmYWlsIGMrKyB9IH0gKi8KLS8qIHsgZGctbWVzc2FnZSAic29ycnksIHVu aW1wbGVtZW50ZWQ6ICcjcHJhZ21hIG9tcCBhbGxvY2F0ZScgbm90IHlldCBzdXBwb3J0ZWQi ICIiIHsgdGFyZ2V0IGMrKyB9IC4tMSB9ICovCisgICNwcmFnbWEgb21wIGFsbG9jYXRlKGEy KSAgLyogeyBkZy1lcnJvciAiJ2EyJyBhbHJlYWR5IGFwcGVhcmVkIGFzIGxpc3QgaXRlbSBp biBhbiAnYWxsb2NhdGUnIGRpcmVjdGl2ZSIgfSAqLwogICB7CiAgICAgaW50IGMyPTM7Ci0g ICAgI3ByYWdtYSBvbXAgYWxsb2NhdGUoYzIsIGIyKSAvKiB7IGRnLWVycm9yICInYWxsb2Nh dGUnIGRpcmVjdGl2ZSBtdXN0IGJlIGluIHRoZSBzYW1lIHNjb3BlIGFzICdiMiciICIiIHsg eGZhaWwgYysrIH0gfSAqLwotLyogeyBkZy1ub3RlICJkZWNsYXJlZCBoZXJlIiAiIiB7IHRh cmdldCBjIH0gLi04IH0gKi8KLS8qIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50 ZWQ6ICcjcHJhZ21hIG9tcCBhbGxvY2F0ZScgbm90IHlldCBzdXBwb3J0ZWQiICIiIHsgdGFy Z2V0IGMrKyB9IC4tMiB9ICovCisgICAgI3ByYWdtYSBvbXAgYWxsb2NhdGUoYzIsIGIyKSAv KiB7IGRnLWVycm9yICInYWxsb2NhdGUnIGRpcmVjdGl2ZSBtdXN0IGJlIGluIHRoZSBzYW1l IHNjb3BlIGFzICdiMiciIH0gKi8KKy8qIHsgZGctbm90ZSAiZGVjbGFyZWQgaGVyZSIgIiIg eyB0YXJnZXQgKi0qLSogfSAuLTYgfSAqLwogICAgIHJldHVybiBjMithMitiMjsKICAgfQog fQogCiBpbnQgaChpbnQgcSkKIHsKLSAgI3ByYWdtYSBvbXAgYWxsb2NhdGUocSkgIC8qIHsg ZGctZXJyb3IgImZ1bmN0aW9uIHBhcmFtZXRlciAncScgbWF5IG5vdCBhcHBlYXIgYXMgbGlz dCBpdGVtIGluIGFuICdhbGxvY2F0ZScgZGlyZWN0aXZlIiAiIiB7IHhmYWlsIGMrKyB9IH0g Ki8KLS8qIHsgZGctbWVzc2FnZSAic29ycnksIHVuaW1wbGVtZW50ZWQ6ICcjcHJhZ21hIG9t cCBhbGxvY2F0ZScgbm90IHlldCBzdXBwb3J0ZWQiICIiIHsgdGFyZ2V0IGMrKyB9IC4tMSB9 ICovCisgICNwcmFnbWEgb21wIGFsbG9jYXRlKHEpICAvKiB7IGRnLWVycm9yICJmdW5jdGlv biBwYXJhbWV0ZXIgJ3EnIG1heSBub3QgYXBwZWFyIGFzIGxpc3QgaXRlbSBpbiBhbiAnYWxs b2NhdGUnIGRpcmVjdGl2ZSIgfSAqLwogICByZXR1cm4gcTsKIH0KIApAQCAtMTAwLDcgKzky LDYgQEAgaW50CiBrICgpCiB7CiAgIHN0YXRpYyBpbnQgdmFyMyA9IDg7Ci0gICNwcmFnbWEg b21wIGFsbG9jYXRlKHZhcjMpIGFsbG9jYXRvcigob21wX2FsbG9jYXRvcl9oYW5kbGVfdCkt MUwpICAvKiB7IGRnLWVycm9yICInYWxsb2NhdG9yJyBjbGF1c2UgcmVxdWlyZXMgYSBwcmVk ZWZpbmVkIGFsbG9jYXRvciBhcyAndmFyMycgaXMgc3RhdGljIiAiIiB7IHRhcmdldCBjIH0g fSAqLwotLyogeyBkZy1tZXNzYWdlICJzb3JyeSwgdW5pbXBsZW1lbnRlZDogJyNwcmFnbWEg b21wIGFsbG9jYXRlJyBub3QgeWV0IHN1cHBvcnRlZCIgIiIgeyB0YXJnZXQgYysrIH0gLi0x IH0gKi8KKyAgI3ByYWdtYSBvbXAgYWxsb2NhdGUodmFyMykgYWxsb2NhdG9yKChvbXBfYWxs b2NhdG9yX2hhbmRsZV90KS0xTCkgIC8qIHsgZGctZXJyb3IgIidhbGxvY2F0b3InIGNsYXVz ZSByZXF1aXJlcyBhIHByZWRlZmluZWQgYWxsb2NhdG9yIGFzICd2YXIzJyBpcyBzdGF0aWMi IH0gKi8KICAgcmV0dXJuIHZhcjM7CiB9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2cr Ky5kZy9nb21wL2FsbG9jYXRlLTUuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2dvbXAvYWxs b2NhdGUtNS5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zOWY0 MjNjZjc5NAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2dvbXAv YWxsb2NhdGUtNS5DCkBAIC0wLDAgKzEsMTQgQEAKK3RlbXBsYXRlPHR5cGVuYW1lIHQ+Cit0 Citmb28oKQoreworICB0IHZhciA9IDU7CisgICNwcmFnbWEgb21wIGFsbG9jYXRlKHZhcikg YWxpZ24oc2l6ZW9mKHQpICsgMSkgIC8qIHsgZGctZXJyb3IgIidhbGlnbicgY2xhdXNlIGFy Z3VtZW50IG5lZWRzIHRvIGJlIHBvc2l0aXZlIGNvbnN0YW50IHBvd2VyIG9mIHR3byBpbnRl Z2VyIGV4cHJlc3Npb24iIH0gKi8KKyAgcmV0dXJuIHZhcjsKK30KKworaW50CitiKCkKK3sK KyAgcmV0dXJuIGZvbzxmbG9hdD4oKTsgIC8qIHsgZGctbWVzc2FnZSAicmVxdWlyZWQgZnJv bSBoZXJlIiB9ICovCit9CmRpZmYgLS1naXQgYS9saWJnb21wL2xpYmdvbXAudGV4aSBiL2xp YmdvbXAvbGliZ29tcC50ZXhpCmluZGV4IDAyZjJkMGU1NzY3Li4zMTVlNDcxZTRkNCAxMDA2 NDQKLS0tIGEvbGliZ29tcC9saWJnb21wLnRleGkKKysrIGIvbGliZ29tcC9saWJnb21wLnRl eGkKQEAgLTIzMiw3ICsyMzIsNyBAQCBUaGUgT3Blbk1QIDQuNSBzcGVjaWZpY2F0aW9uIGlz IGZ1bGx5IHN1cHBvcnRlZC4KIEBpdGVtIFByZWRlZmluZWQgbWVtb3J5IHNwYWNlcywgbWVt b3J5IGFsbG9jYXRvcnMsIGFsbG9jYXRvciB0cmFpdHMKICAgICAgIEB0YWIgWSBAdGFiIFNl ZSBhbHNvIEByZWZ7TWVtb3J5IGFsbG9jYXRpb259CiBAaXRlbSBNZW1vcnkgbWFuYWdlbWVu dCByb3V0aW5lcyBAdGFiIFkgQHRhYgotQGl0ZW0gQGNvZGV7YWxsb2NhdGV9IGRpcmVjdGl2 ZSBAdGFiIFAgQHRhYiBPbmx5IEMgYW5kIEZvcnRyYW4sIG9ubHkgc3RhY2sgdmFyaWFibGVz CitAaXRlbSBAY29kZXthbGxvY2F0ZX0gZGlyZWN0aXZlIEB0YWIgUCBAdGFiIE9ubHkgZm9y IHN0YWNrIHZhcmlhYmxlcwogQGl0ZW0gQGNvZGV7YWxsb2NhdGV9IGNsYXVzZSBAdGFiIFAg QHRhYiBJbml0aWFsIHN1cHBvcnQKIEBpdGVtIEBjb2Rle3VzZV9kZXZpY2VfYWRkcn0gY2xh dXNlIG9uIEBjb2Rle3RhcmdldCBkYXRhfSBAdGFiIFkgQHRhYgogQGl0ZW0gQGNvZGV7YW5j ZXN0b3J9IG1vZGlmaWVyIG9uIEBjb2Rle2RldmljZX0gY2xhdXNlIEB0YWIgWSBAdGFiCkBA IC0zMDQsNyArMzA0LDcgQEAgVGhlIE9wZW5NUCA0LjUgc3BlY2lmaWNhdGlvbiBpcyBmdWxs eSBzdXBwb3J0ZWQuCiBAaXRlbSBAY29kZXtzdHJpY3R9IG1vZGlmaWVyIGluIHRoZSBAY29k ZXtncmFpbnNpemV9IGFuZCBAY29kZXtudW1fdGFza3N9CiAgICAgICBjbGF1c2VzIG9mIHRo ZSBAY29kZXt0YXNrbG9vcH0gY29uc3RydWN0IEB0YWIgWSBAdGFiCiBAaXRlbSBAY29kZXth bGlnbn0gY2xhdXNlIGluIEBjb2Rle2FsbG9jYXRlfSBkaXJlY3RpdmUgQHRhYiBQCi0gICAg ICBAdGFiIE9ubHkgQyBhbmQgRm9ydHJhbiAoYW5kIG9ubHkgc3RhY2sgdmFyaWFibGVzKQor ICAgICAgQHRhYiBPbmx5IGZvciBzdGFjayB2YXJpYWJsZXMKIEBpdGVtIEBjb2Rle2FsaWdu fSBtb2RpZmllciBpbiBAY29kZXthbGxvY2F0ZX0gY2xhdXNlIEB0YWIgWSBAdGFiCiBAaXRl bSBAY29kZXt0aHJlYWRfbGltaXR9IGNsYXVzZSB0byBAY29kZXt0YXJnZXR9IGNvbnN0cnVj dCBAdGFiIFkgQHRhYgogQGl0ZW0gQGNvZGV7aGFzX2RldmljZV9hZGRyfSBjbGF1c2UgdG8g QGNvZGV7dGFyZ2V0fSBjb25zdHJ1Y3QgQHRhYiBZIEB0YWIKZGlmZiAtLWdpdCBhL2xpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuYysrL2FsbG9jYXRlLTIuQyBiL2xpYmdvbXAvdGVzdHN1 aXRlL2xpYmdvbXAuYysrL2FsbG9jYXRlLTIuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uZjc5Y2FkYTE3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJnb21w L3Rlc3RzdWl0ZS9saWJnb21wLmMrKy9hbGxvY2F0ZS0yLkMKQEAgLTAsMCArMSwzMjkgQEAK Ky8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZmR1 bXAtdHJlZS1vbXBsb3dlciIgfSAqLworCisvKiBGb3IgdGhlIDQgdmFycyBpbiBvbXBfcGFy YWxsZWwsIDQgaW4gb21wX3RhcmdldCBhbmQgMSBvZiAyIGluIGVhY2ggb2Ygbm9fYWxsb2N7 LDJ9X2Z1bmMuICAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJf X2J1aWx0aW5fR09NUF9hbGxvYyBcXCgiIDEwICJvbXBsb3dlciIgfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIl9fYnVpbHRpbl9HT01QX2ZyZWUgXFwo IiAxMCAib21wbG93ZXIiIH0gfSAqLworCisjaW5jbHVkZSA8b21wLmg+CisKKwordm9pZAor Y2hlY2tfaW50IChpbnQgKngsIGludCB5KQoreworICBpZiAoKnggIT0geSkKKyAgICBfX2J1 aWx0aW5fYWJvcnQgKCk7Cit9CisKK3ZvaWQKK2NoZWNrX3B0ciAoaW50ICoqeCwgaW50ICp5 KQoreworICBpZiAoKnggIT0geSkKKyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7Cit9CisKKwor dGVtcGxhdGU8dHlwZW5hbWUgdD4KK3QKK25vX2FsbG9jX2Z1bmMgKCkKK3sKKyAgLyogVGhl cmUgaXMgbm8gX19idWlsdGluX0dPTVBfYWxsb2MgLyBfX2J1aWx0aW5fR09NUF9mcmVlIGFz CisgICAgIGFsbG9jYXRvciA9PSBvbXBfZGVmYXVsdF9tZW1fYWxsb2MgKGtub3duIGF0IGNv bXBpbGUgdGltZS4gKi8KKyAgdCBub19hbGxvYywgYWxsb2NfaGFzX2FsaWduID0gMzsKKyAg I3ByYWdtYSBvbXAgYWxsb2NhdGUobm9fYWxsb2MpIGFsbG9jYXRvcihvbXBfZGVmYXVsdF9t ZW1fYWxsb2MpCisgIC8qIEJ1dCB0aGlzIG9uZSBpcyBhbGxvY2F0ZWQgYmVjYXVzZSBvZiBh bGlnbi4gKi8KKyAgI3ByYWdtYSBvbXAgYWxsb2NhdGUoYWxsb2NfaGFzX2FsaWduKSBhbGxv Y2F0b3Iob21wX2RlZmF1bHRfbWVtX2FsbG9jKSBhbGlnbihzaXplb2YodCkpCisgIG5vX2Fs bG9jID0gNzsKKyAgcmV0dXJuIG5vX2FsbG9jICsgYWxsb2NfaGFzX2FsaWduOworfQorCit0 ZW1wbGF0ZTx0eXBlbmFtZSB0PgordAorbm9fYWxsb2MyX2Z1bmMoKQoreworICAvKiBUaGVy ZSBpcyBubyBfX2J1aWx0aW5fR09NUF9hbGxvYyAvIF9fYnVpbHRpbl9HT01QX2ZyZWUgYXMK KyAgICAgbm9fYWxsb2MyIGlzIFRSRUVfVU5VU0VELiAgQnV0IHRoZXJlIGlzIGZvciBpc19h bGxvYzIuICAqLworICB0IG5vX2FsbG9jMiwgaXNfYWxsb2MyOworICAjcHJhZ21hIG9tcCBh bGxvY2F0ZShub19hbGxvYzIsIGlzX2FsbG9jMikKKyAgaXNfYWxsb2MyID0gNzsKKyAgcmV0 dXJuIGlzX2FsbG9jMjsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSB0Pgordm9pZAorb21w X3BhcmFsbGVsICgpCit7CisgIGludCBuID0gNjsKKyAgdCBpaWkgPSA1LCBqampbNV0sIGtr a1tuXTsKKyAgdCAqcHRyID0gKHQgKikgMHgxMjM0OworICAjcHJhZ21hIG9tcCBhbGxvY2F0 ZShpaWksIGpqaiwga2trLCBwdHIpCisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKysp CisgICAgampqW2ldID0gMyppOworICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAg ICBra2tbaV0gPSA3Kmk7CisKKyAgI3ByYWdtYSBvbXAgcGFyYWxsZWwgZGVmYXVsdChub25l KSBmaXJzdHByaXZhdGUoaWlpLCBqamosIGtraywgcHRyKSBpZigwKQorICB7CisgICAgaWYg KGlpaSAhPSA1KQorICAgICAgX19idWlsdGluX2Fib3J0KCk7CisgICAgaWlpID0gNzsKKyAg ICBjaGVja19pbnQgKCZpaWksIDcpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsr KQorICAgICAgaWYgKGpqaltpXSAhPSAzKmkpCisJX19idWlsdGluX2Fib3J0ICgpOworICAg IGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgICAgaWYgKGtra1tpXSAhPSA3Kmkp CisJX19idWlsdGluX2Fib3J0ICgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsr KQorICAgICAgampqW2ldID0gNCppOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsr KQorICAgICAga2trW2ldID0gOCppOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsr KQorICAgICAgY2hlY2tfaW50ICgmampqW2ldLCA0KmkpOworICAgIGZvciAoaW50IGkgPSAw OyBpIDwgNjsgaSsrKQorICAgICAgY2hlY2tfaW50ICgma2trW2ldLCA4KmkpOworICAgIGlm IChwdHIgIT0gKGludCAqKSAweDEyMzQpCisgICAgICBfX2J1aWx0aW5fYWJvcnQgKCk7Cisg ICAgcHRyID0gKGludCAqKSAweGFiY2Q7CisgICAgaWYgKHB0ciAhPSAoaW50ICopIDB4YWJj ZCkKKyAgICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKyAgICBjaGVja19wdHIgKCZwdHIsIChp bnQgKikgMHhhYmNkKTsKKyAgfQorICBpZiAoaWlpICE9IDUpCisgICAgX19idWlsdGluX2Fi b3J0ICgpOworICBjaGVja19pbnQgKCZpaWksIDUpOworICBmb3IgKGludCBpID0gMDsgaSA8 IDU7IGkrKykKKyAgICB7CisgICAgICBpZiAoampqW2ldICE9IDMqaSkKKwlfX2J1aWx0aW5f YWJvcnQgKCk7CisgICAgICBjaGVja19pbnQgKCZqampbaV0sIDMqaSk7CisgICAgfQorICBm b3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICB7CisgICAgICBpZiAoa2trW2ldICE9 IDcqaSkKKwlfX2J1aWx0aW5fYWJvcnQgKCk7CisgICAgICBjaGVja19pbnQgKCZra2tbaV0s IDcqaSk7CisgICAgfQorICBpZiAocHRyICE9IChpbnQgKikgMHgxMjM0KQorICAgIF9fYnVp bHRpbl9hYm9ydCAoKTsKKyAgY2hlY2tfcHRyICgmcHRyLCAoaW50ICopIDB4MTIzNCk7CisK KyAgI3ByYWdtYSBvbXAgcGFyYWxsZWwgZGVmYXVsdChmaXJzdHByaXZhdGUpIGlmKDApCisg IHsKKyAgICBpZiAoaWlpICE9IDUpCisgICAgICBfX2J1aWx0aW5fYWJvcnQoKTsKKyAgICBp aWkgPSA3OworICAgIGNoZWNrX2ludCAoJmlpaSwgNyk7CisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCA1OyBpKyspCisgICAgICBpZiAoampqW2ldICE9IDMqaSkKKwlfX2J1aWx0aW5fYWJv cnQgKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCisgICAgICBpZiAoa2tr W2ldICE9IDcqaSkKKwlfX2J1aWx0aW5fYWJvcnQgKCk7CisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCA1OyBpKyspCisgICAgICBqampbaV0gPSA0Kmk7CisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCA2OyBpKyspCisgICAgICBra2tbaV0gPSA4Kmk7CisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCA1OyBpKyspCisgICAgICBjaGVja19pbnQgKCZqampbaV0sIDQqaSk7CisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCisgICAgICBjaGVja19pbnQgKCZra2tbaV0sIDgq aSk7CisgICAgaWYgKHB0ciAhPSAoaW50ICopIDB4MTIzNCkKKyAgICAgIF9fYnVpbHRpbl9h Ym9ydCAoKTsKKyAgICBwdHIgPSAoaW50ICopIDB4YWJjZDsKKyAgICBpZiAocHRyICE9IChp bnQgKikgMHhhYmNkKQorICAgICAgX19idWlsdGluX2Fib3J0ICgpOworICAgIGNoZWNrX3B0 ciAoJnB0ciwgKGludCAqKSAweGFiY2QpOworICB9CisgIGlmIChpaWkgIT0gNSkKKyAgICBf X2J1aWx0aW5fYWJvcnQgKCk7CisgIGNoZWNrX2ludCAoJmlpaSwgNSk7CisgIGZvciAoaW50 IGkgPSAwOyBpIDwgNTsgaSsrKQorICAgIHsKKyAgICAgIGlmIChqampbaV0gIT0gMyppKQor CV9fYnVpbHRpbl9hYm9ydCAoKTsKKyAgICAgIGNoZWNrX2ludCAoJmpqaltpXSwgMyppKTsK KyAgICB9CisgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgIHsKKyAgICAgIGlm IChra2tbaV0gIT0gNyppKQorCV9fYnVpbHRpbl9hYm9ydCAoKTsKKyAgICAgIGNoZWNrX2lu dCAoJmtra1tpXSwgNyppKTsKKyAgICB9CisgIGlmIChwdHIgIT0gKGludCAqKSAweDEyMzQp CisgICAgX19idWlsdGluX2Fib3J0ICgpOworICBjaGVja19wdHIgKCZwdHIsIChpbnQgKikg MHgxMjM0KTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSB0Pgordm9pZAorb21wX3Rhcmdl dCAoKQoreworICBpbnQgbiA9IDY7CisgIHQgaWlpID0gNSwgampqWzVdLCBra2tbbl07Cisg IHQgKnB0ciA9IChpbnQgKikgMHgxMjM0OworICAjcHJhZ21hIG9tcCBhbGxvY2F0ZShpaWks IGpqaiwga2trLCBwdHIpCisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspCisgICAg ampqW2ldID0gMyppOworICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICBra2tb aV0gPSA3Kmk7CisKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGRlZmF1bHRtYXAobm9uZSkgZmly c3Rwcml2YXRlKGlpaSwgampqLCBra2ssIHB0cikKKyAgeworICAgIGlmIChpaWkgIT0gNSkK KyAgICAgIF9fYnVpbHRpbl9hYm9ydCgpOworICAgIGlpaSA9IDc7CisgICAgY2hlY2tfaW50 ICgmaWlpLCA3KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykKKyAgICAgIGlm IChqampbaV0gIT0gMyppKQorCV9fYnVpbHRpbl9hYm9ydCAoKTsKKyAgICBmb3IgKGludCBp ID0gMDsgaSA8IDY7IGkrKykKKyAgICAgIGlmIChra2tbaV0gIT0gNyppKQorCV9fYnVpbHRp bl9hYm9ydCAoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykKKyAgICAgIGpq altpXSA9IDQqaTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICAgIGtr a1tpXSA9IDgqaTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykKKyAgICAgIGNo ZWNrX2ludCAoJmpqaltpXSwgNCppKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkr KykKKyAgICAgIGNoZWNrX2ludCAoJmtra1tpXSwgOCppKTsKKyAgICBpZiAocHRyICE9IChp bnQgKikgMHgxMjM0KQorICAgICAgX19idWlsdGluX2Fib3J0ICgpOworICAgIHB0ciA9IChp bnQgKikgMHhhYmNkOworICAgIGlmIChwdHIgIT0gKGludCAqKSAweGFiY2QpCisgICAgICBf X2J1aWx0aW5fYWJvcnQgKCk7CisgICAgY2hlY2tfcHRyICgmcHRyLCAoaW50ICopIDB4YWJj ZCk7CisgIH0KKyAgaWYgKGlpaSAhPSA1KQorICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKyAg Y2hlY2tfaW50ICgmaWlpLCA1KTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspCisg ICAgeworICAgICAgaWYgKGpqaltpXSAhPSAzKmkpCisJX19idWlsdGluX2Fib3J0ICgpOwor ICAgICAgY2hlY2tfaW50ICgmampqW2ldLCAzKmkpOworICAgIH0KKyAgZm9yIChpbnQgaSA9 IDA7IGkgPCA2OyBpKyspCisgICAgeworICAgICAgaWYgKGtra1tpXSAhPSA3KmkpCisJX19i dWlsdGluX2Fib3J0ICgpOworICAgICAgY2hlY2tfaW50ICgma2trW2ldLCA3KmkpOworICAg IH0KKyAgaWYgKHB0ciAhPSAoaW50ICopIDB4MTIzNCkKKyAgICBfX2J1aWx0aW5fYWJvcnQg KCk7CisgIGNoZWNrX3B0ciAoJnB0ciwgKGludCAqKSAweDEyMzQpOworCisgICNwcmFnbWEg b21wIHRhcmdldCBkZWZhdWx0bWFwKGZpcnN0cHJpdmF0ZSkKKyAgeworICAgIGlmIChpaWkg IT0gNSkKKyAgICAgIF9fYnVpbHRpbl9hYm9ydCgpOworICAgIGlpaSA9IDc7CisgICAgY2hl Y2tfaW50ICgmaWlpLCA3KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykKKyAg ICAgIGlmIChqampbaV0gIT0gMyppKQorCV9fYnVpbHRpbl9hYm9ydCAoKTsKKyAgICBmb3Ig KGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICAgIGlmIChra2tbaV0gIT0gNyppKQorCV9f YnVpbHRpbl9hYm9ydCAoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykKKyAg ICAgIGpqaltpXSA9IDQqaTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAg ICAgIGtra1tpXSA9IDgqaTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykKKyAg ICAgIGNoZWNrX2ludCAoJmpqaltpXSwgNCppKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8 IDY7IGkrKykKKyAgICAgIGNoZWNrX2ludCAoJmtra1tpXSwgOCppKTsKKyAgICBpZiAocHRy ICE9IChpbnQgKikgMHgxMjM0KQorICAgICAgX19idWlsdGluX2Fib3J0ICgpOworICAgIHB0 ciA9IChpbnQgKikgMHhhYmNkOworICAgIGlmIChwdHIgIT0gKGludCAqKSAweGFiY2QpCisg ICAgICBfX2J1aWx0aW5fYWJvcnQgKCk7CisgICAgY2hlY2tfcHRyICgmcHRyLCAoaW50ICop IDB4YWJjZCk7CisgIH0KKyAgaWYgKGlpaSAhPSA1KQorICAgIF9fYnVpbHRpbl9hYm9ydCAo KTsKKyAgY2hlY2tfaW50ICgmaWlpLCA1KTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBp KyspCisgICAgeworICAgICAgaWYgKGpqaltpXSAhPSAzKmkpCisJX19idWlsdGluX2Fib3J0 ICgpOworICAgICAgY2hlY2tfaW50ICgmampqW2ldLCAzKmkpOworICAgIH0KKyAgZm9yIChp bnQgaSA9IDA7IGkgPCA2OyBpKyspCisgICAgeworICAgICAgaWYgKGtra1tpXSAhPSA3Kmkp CisJX19idWlsdGluX2Fib3J0ICgpOworICAgICAgY2hlY2tfaW50ICgma2trW2ldLCA3Kmkp OworICAgIH0KKyAgaWYgKHB0ciAhPSAoaW50ICopIDB4MTIzNCkKKyAgICBfX2J1aWx0aW5f YWJvcnQgKCk7CisgIGNoZWNrX3B0ciAoJnB0ciwgKGludCAqKSAweDEyMzQpOworCisgICNw cmFnbWEgb21wIHRhcmdldCBkZWZhdWx0bWFwKHRvZnJvbSkKKyAgeworICAgIGlmIChpaWkg IT0gNSkKKyAgICAgIF9fYnVpbHRpbl9hYm9ydCgpOworICAgIGlpaSA9IDc7CisgICAgY2hl Y2tfaW50ICgmaWlpLCA3KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykKKyAg ICAgIGlmIChqampbaV0gIT0gMyppKQorCV9fYnVpbHRpbl9hYm9ydCAoKTsKKyAgICBmb3Ig KGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICAgIGlmIChra2tbaV0gIT0gNyppKQorCV9f YnVpbHRpbl9hYm9ydCAoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykKKyAg ICAgIGpqaltpXSA9IDQqaTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAg ICAgIGtra1tpXSA9IDgqaTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykKKyAg ICAgIGNoZWNrX2ludCAoJmpqaltpXSwgNCppKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8 IDY7IGkrKykKKyAgICAgIGNoZWNrX2ludCAoJmtra1tpXSwgOCppKTsKKyAgICBpZiAocHRy ICE9IChpbnQgKikgMHgxMjM0KQorICAgICAgX19idWlsdGluX2Fib3J0ICgpOworICAgIHB0 ciA9IChpbnQgKikgMHhhYmNkOworICAgIGlmIChwdHIgIT0gKGludCAqKSAweGFiY2QpCisg ICAgICBfX2J1aWx0aW5fYWJvcnQgKCk7CisgICAgY2hlY2tfcHRyICgmcHRyLCAoaW50ICop IDB4YWJjZCk7CisgIH0KKworICBpZiAoaWlpICE9IDcpCisgICAgX19idWlsdGluX2Fib3J0 ICgpOworICBjaGVja19pbnQgKCZpaWksIDcpOworICBmb3IgKGludCBpID0gMDsgaSA8IDU7 IGkrKykKKyAgICB7CisgICAgICBpZiAoampqW2ldICE9IDQqaSkKKwlfX2J1aWx0aW5fYWJv cnQgKCk7CisgICAgICBjaGVja19pbnQgKCZqampbaV0sIDQqaSk7CisgICAgfQorICBmb3Ig KGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICB7CisgICAgICBpZiAoa2trW2ldICE9IDgq aSkKKwlfX2J1aWx0aW5fYWJvcnQgKCk7CisgICAgICBjaGVja19pbnQgKCZra2tbaV0sIDgq aSk7CisgICAgfQorICBpZiAocHRyICE9IChpbnQgKikgMHhhYmNkKQorICAgIF9fYnVpbHRp bl9hYm9ydCAoKTsKKyAgY2hlY2tfcHRyICgmcHRyLCAoaW50ICopIDB4YWJjZCk7Cit9CisK K2ludAorZm9vKCkKK3sKKyAgcmV0dXJuIG5vX2FsbG9jX2Z1bmM8aW50PigpICsgbm9fYWxs b2MyX2Z1bmM8aW50PigpOworfQorCitpbnQKK21haW4gKCkKK3sKKyAgb21wX3BhcmFsbGVs PGludD4gKCk7CisgIG9tcF90YXJnZXQ8aW50PiAoKTsKKyAgaWYgKGZvbygpICE9IDEwICsg NykKKyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0 IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRlLTQuYyBiL2xpYmdvbXAv dGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL2FsbG9jYXRlLTQuYwpzaW1pbGFyaXR5 IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBsaWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxs b2NhdGUtNC5jCnJlbmFtZSB0byBsaWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNv bW1vbi9hbGxvY2F0ZS00LmMKaW5kZXggZTgxY2M0MDkzYWEuLjcwNmM4NTEwYjg0IDEwMDY0 NAotLS0gYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdGUtNC5jCisrKyBi L2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL2FsbG9jYXRlLTQuYwpA QCAtMSw2ICsxLDMgQEAKLS8qIFRPRE86IG1vdmUgdG8gLi4vbGliZ29tcC5jLWMrKy1jb21t b24gb25jZSBDKysgaXMgaW1wbGVtZW50ZWQuICovCi0vKiBOT1RFOiB7IHRhcmdldCBjIH0g aXMgdW5zdXBwb3J0ZWQgd2l0aCB3aXRoIHRoZSBDIGNvbXBpbGVyLiAgKi8KLQogLyogeyBk Zy1kbyBydW4gfSAqLwogLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1mZHVtcC10cmVl LWdpbXBsZSIgfSAqLwogCmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21w LmMvYWxsb2NhdGUtNS5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21t b24vYWxsb2NhdGUtNS5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGxpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0ZS01LmMKcmVuYW1lIHRvIGxpYmdvbXAv dGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29tbW9uL2FsbG9jYXRlLTUuYwppbmRleCBiZWFm MTY0NDBlMS4uM2JiZTc4ZGI4NDAgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvdGVzdHN1aXRlL2xp YmdvbXAuYy9hbGxvY2F0ZS01LmMKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5j LWMrKy1jb21tb24vYWxsb2NhdGUtNS5jCkBAIC0xLDYgKzEsMyBAQAotLyogVE9ETzogbW92 ZSB0byAuLi9saWJnb21wLmMtYysrLWNvbW1vbiBvbmNlIEMrKyBpcyBpbXBsZW1lbnRlZC4g Ki8KLS8qIE5PVEU6IHsgdGFyZ2V0IGMgfSBpcyB1bnN1cHBvcnRlZCB3aXRoIHdpdGggdGhl IEMgY29tcGlsZXIuICAqLwotCiAvKiB7IGRnLWRvIHJ1biB9ICovCiAvKiB7IGRnLWFkZGl0 aW9uYWwtb3B0aW9ucyAiLWZkdW1wLXRyZWUtZ2ltcGxlIiB9ICovCiAKZGlmZiAtLWdpdCBh L2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0ZS02LmMgYi9saWJnb21wL3Rl c3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi9hbGxvY2F0ZS02LmMKc2ltaWxhcml0eSBp bmRleCA5OCUKcmVuYW1lIGZyb20gbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9j YXRlLTYuYwpyZW5hbWUgdG8gbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21t b24vYWxsb2NhdGUtNi5jCmluZGV4IDZkNzI3OGNlNTcxLi42Njk1ODFiMzI3ZCAxMDA2NDQK LS0tIGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRlLTYuYworKysgYi9s aWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi9hbGxvY2F0ZS02LmMKQEAg LTEsNiArMSwzIEBACi0vKiBUT0RPOiBtb3ZlIHRvIC4uL2xpYmdvbXAuYy1jKystY29tbW9u IG9uY2UgQysrIGlzIGltcGxlbWVudGVkLiAqLwotLyogTk9URTogeyB0YXJnZXQgYyB9IGlz IHVuc3VwcG9ydGVkIHdpdGggd2l0aCB0aGUgQyBjb21waWxlci4gICovCi0KIC8qIHsgZGct ZG8gcnVuIH0gKi8KIC8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZmR1bXAtdHJlZS1v bXBsb3dlciIgfSAqLwogCg== --------------ltbGmhKjB5nviql5jf1nw3as--