From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28802 invoked by alias); 13 Mar 2013 20:30:29 -0000 Received: (qmail 28707 invoked by uid 22791); 13 Mar 2013 20:30:21 -0000 X-SWARE-Spam-Status: No, hits=-4.2 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL X-Spam-Check-By: sourceware.org Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 13 Mar 2013 20:30:15 +0000 Received: from svr-orw-exc-10.mgc.mentorg.com ([147.34.98.58]) by relay1.mentorg.com with esmtp id 1UFsJS-0001PX-9m from Catherine_Moore@mentor.com ; Wed, 13 Mar 2013 13:30:14 -0700 Received: from SVR-ORW-FEM-05.mgc.mentorg.com ([147.34.97.43]) by SVR-ORW-EXC-10.mgc.mentorg.com with Microsoft SMTPSVC(6.0.3790.4675); Wed, 13 Mar 2013 13:30:14 -0700 Received: from NA-MBX-01.mgc.mentorg.com ([169.254.1.207]) by SVR-ORW-FEM-05.mgc.mentorg.com ([147.34.97.43]) with mapi id 14.01.0289.001; Wed, 13 Mar 2013 13:30:14 -0700 From: "Moore, Catherine" To: Richard Sandiford CC: "gcc-patches@gcc.gnu.org" , "Rozycki, Maciej" Subject: RE: FW: [PATCH] [MIPS] microMIPS gcc support Date: Wed, 13 Mar 2013 20:30:00 -0000 Message-ID: References: <87y5mfjm4c.fsf@talisman.home> <871ubukhs7.fsf@talisman.default> <87d2vdtv3x.fsf@talisman.default> In-Reply-To: <87d2vdtv3x.fsf@talisman.default> Content-Type: multipart/mixed; boundary="_003_FD3DCEAC5B03E9408544A1E416F11242987BDF64NAMBX01mgcmento_" MIME-Version: 1.0 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2013-03/txt/msg00475.txt.bz2 --_003_FD3DCEAC5B03E9408544A1E416F11242987BDF64NAMBX01mgcmento_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 1669 > -----Original Message----- > From: Richard Sandiford [mailto:rdsandiford@googlemail.com] > Sent: Tuesday, March 05, 2013 4:06 PM > To: Moore, Catherine > Cc: gcc-patches@gcc.gnu.org; Rozycki, Maciej > Subject: Re: FW: [PATCH] [MIPS] microMIPS gcc support: >=20 > We have a few internal-only undocumented constraints that aren't used > much, so we should be able to move them to the "Y" space instead. The > patch below does this for "T" and "U". Then we could use "U" for new, > longer constraints. >=20 >=20 > U >=20 > where is: >=20 > s for signed > u for unsigned > d for decremented unsigned (-1 ... N) > i for incremented unsigned (1 ... N) >=20 > where is: >=20 > b for "byte" (*1) > h for "halfwords" (*2) > w for "words" (*4) > d for "doublewords" (*8) -- useful for 64-bit MIPS16 but probably not > needed for 32-bit microMIPS >=20 > and where is the number of bits. and could be > replaced with an ad-hoc two-letter combination for special cases. > E.g. "Uas9" ("add stack") for ADDISUP. >=20 > Just a suggestion though. I'm not saying these names are totally intuiti= ve or > anything, but they should at least be better than arbitrary letters. >=20 > Also, could be two digits if necessary, or we could just use hex d= igits. I extended this proposal a bit by: 1. Adding a e for encoded. The constraint will start with Ue, when= the operand is an encoded value. 2. I decided to use two digits for . 3. The ad-hoc combination is used for anything else. Patch is attached. WDYT? I'm still testing, but results so far look really good. Catherine --_003_FD3DCEAC5B03E9408544A1E416F11242987BDF64NAMBX01mgcmento_ Content-Type: application/octet-stream; name="short-delay.cl" Content-Description: short-delay.cl Content-Disposition: attachment; filename="short-delay.cl"; size=1238; creation-date="Mon, 04 Mar 2013 19:17:31 GMT"; modification-date="Wed, 13 Mar 2013 20:14:39 GMT" Content-Transfer-Encoding: base64 Content-length: 1680 MjAxMi0wMy0xMiAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGNvZGVzb3VyY2Vy eS5jb20+DQoNCgkqIGNvbmZpZy9taXBzL2NvbnN0cmFpbnRzLm1kICh1LCBV ZGIwNywgVWVhbmQsIFVlYXM2LCBVZWFzOSwNCglVZWltNCwgVW1lbTAsIFVs b2FkLCBVc3RvciwgVXNiMDMsIFVpYjAzKTogTmV3IGNvbnN0cmFpbnRzLg0K CSogY29uZmlnL21pcHMvcHJlZGljYXRlcy5tZCAoVW1lbTBfb3BlcmFuZCwg VWxvYWRfb3BlcmFuZCwNCglVc3RvcmVfb3BlcmFuZCwgVWRiMDdfb3BlcmFu ZCwgVWVhczlfb3BlcmFuZCwgVWVhczZfb3BlcmFuZCwNCglVZWltNF9vcGVy YW5kLCBVZWFuZF9vcGVyYW5kLCBVc2IwM19vcGVyYW5kLCBVaWIwM19vcGVy YW5kKToNCglOZXcgcHJlZGljYXRlcy4NCgkqIGNvbmZpZy9taXBzL21pcHMu bWQgKGNvbXByZXNzaW9uKTogTmV3IGF0dHJpYnV0ZS4NCgkoZW5hYmxlZCk6 IE5ldyBhdHRyaWJ1dGUuDQoJKGxlbmd0aCk6IFJlY29yZCBsZW5ndGggb2Yg c2hvcnQgbWljcm9NSVBTIGluc25zLg0KIAkoKmFkZDxtb2RlPjMpOiBOZXcg b3BlcmFuZHMuIFJlY29yZCBjb21wcmVzc2lvbi4NCgkoc3ViPG1vZGU+Myk6 IExpa2V3aXNlLg0KCShvbmVfY21wbDxtb2RlPjIpOiBMaWtld2lzZS4NCgko KmFuZDxtb2RlPjMpOiBMaWtld2lzZS4NCgkoKmlvcjxtb2RlPjMpOiBMaWtl d2lzZS4NCgkodW5uYW1lZCBwYXR0ZXJuIGZvciB4b3IpOiBMaWtld2lzZS4N CgkoKnplcm9fZXh0ZW5kPFNIT1JUOm1vZGU+PEdQUjptb2RlPjIpOiBMaWtl d2lzZS4NCgkoKjxvcHRhYj48bW9kZT4zKTogTGlrZXdpc2UuDQoJKiBjb25m aWcvbWlwcy9taXBzLXByb3Rvcy5oIChtaXBzX3NpZ25lZF9pbW1lZGlhdGVf cCk6IE5ldy4NCgkqbWlwc191bnNpZ25lZF9pbW1lZGlhdGVfcCk6IE5ldy4N CgkodW1pcHNfbHdzcF9zd3NwX2FkZHJlc3NfcCk6IE5ldy4NCgkodW1pcHNf YWRkcmVzc19wKTogTmV3Lg0KCSogY29uZmlnL21pcHMvbWlwcy5jIChtaXBz X3Vuc2lnbmVkX2ltbWVkaWF0ZV9wKTogTmV3IGZ1bmN0aW9uLg0KCShtaXBz X3NpZ25lZF9pbW1lZGlhdGVfcCk6IE5ldyBmdW5jdGlvbi4NCgkodW1pcHNf YWRkcmVzc19wKTogTmV3IGZ1bmN0aW9uLg0KCSh1bWlwc19sd3NwX3N3c3Bf YWRkcmVzc19wKTogTmV3IGZ1bmN0aW9uLg0KCShtaXBzX3ByaW50X29wZXJh bmRfcHVuY3R1YXRpb24pOiBSZWNvZ25pemUgc2hvcnQgZGVsYXkgc2xvdCBp bnNucw0KCWZvciBtaWNyb01JUFMuDQo= --_003_FD3DCEAC5B03E9408544A1E416F11242987BDF64NAMBX01mgcmento_ Content-Type: application/octet-stream; name="short-delay.patch" Content-Description: short-delay.patch Content-Disposition: attachment; filename="short-delay.patch"; size=17830; creation-date="Wed, 13 Mar 2013 20:30:12 GMT"; modification-date="Wed, 13 Mar 2013 20:30:12 GMT" Content-Transfer-Encoding: base64 Content-length: 24173 SW5kZXg6IGdjYy9jb25maWcvbWlwcy9jb25zdHJhaW50cy5tZA0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy9jb25maWcvbWlwcy9jb25zdHJh aW50cy5tZAkocmV2aXNpb24gMTk2NjM4KQ0KKysrIGdjYy9jb25maWcvbWlw cy9jb25zdHJhaW50cy5tZAkod29ya2luZyBjb3B5KQ0KQEAgLTQzLDYgKzQz LDkgQEANCiAoZGVmaW5lX3JlZ2lzdGVyX2NvbnN0cmFpbnQgImIiICJBTExf UkVHUyINCiAgICJAaW50ZXJuYWwiKQ0KIA0KKyhkZWZpbmVfcmVnaXN0ZXJf Y29uc3RyYWludCAidSIgIk0xNl9SRUdTIg0KKyAgIkBpbnRlcm5hbCIpDQor DQogOzsgTUlQUzE2IGNvZGUgYWx3YXlzIGNhbGxzIHRocm91Z2ggYSBNSVBT MTYgcmVnaXN0ZXI7IHNlZSBtaXBzX2VtaXRfY2FsbF9pbnNuDQogOzsgZm9y IGRldGFpbHMuDQogKGRlZmluZV9yZWdpc3Rlcl9jb25zdHJhaW50ICJjIiAi VEFSR0VUX01JUFMxNiA/IE0xNl9SRUdTDQpAQCAtMTcwLDYgKzE3Myw1OSBA QA0KICAgKGFuZCAobWF0Y2hfb3BlcmFuZCAwICJjYWxsX2luc25fb3BlcmFu ZCIpDQogICAgICAgIChtYXRjaF90ZXN0ICJDT05TVEFOVF9QIChvcCkiKSkp DQogDQorKGRlZmluZV9jb25zdHJhaW50ICJVZGIwNyINCisgICJAaW50ZXJu YWwNCisgICBBIGRlY3JlbWVudGVkIHVuc2lnbmVkIGNvbnN0YW50IG9mIDcg Yml0cy4iDQorICAobWF0Y2hfb3BlcmFuZCAwICJVZGIwN19vcGVyYW5kIiAi IikpDQorDQorKGRlZmluZV9jb25zdHJhaW50ICJVZWFuZCINCisgICJAaW50 ZXJuYWwNCisgICBBIG1pY3JvTUlQUyBlbmNvZGVkIGFuZGkgb3BlcmFuZC4i DQorICAobWF0Y2hfb3BlcmFuZCAwICJVZWFuZF9vcGVyYW5kIiAiIikpDQor DQorKGRlZmluZV9jb25zdHJhaW50ICJVZWFzNiINCisgICJAaW50ZXJuYWwN CisgICBBIG1pY3JvTUlQUyBlbmNvZGVkIEFERElVUjFTUCBvcGVyYW5kLiIN CisgIChtYXRjaF9vcGVyYW5kIDAgIlVlYXM2X29wZXJhbmQiICIiKSkNCisN CisoZGVmaW5lX2NvbnN0cmFpbnQgIlVlYXM5Ig0KKyAgIkBpbnRlcm5hbA0K KyAgIEEgbWljcm9NSVBTIGVuY29kZWQgQURESVVTUCBvcGVyYW5kLiINCisg IChtYXRjaF9vcGVyYW5kIDAgIlVlYXM5X29wZXJhbmQiICIiKSkNCisNCiso ZGVmaW5lX2NvbnN0cmFpbnQgIlVlaW00Ig0KKyAgIkBpbnRlcm5hbA0KKyAg IEEgbWljcm9NSVBTIGVuY29kZWQgQURESVVSMiBpbW1lZGlhdGUgb3BlcmFu ZC4iDQorICAobWF0Y2hfb3BlcmFuZCAwICJVZWltNF9vcGVyYW5kIiAiIikp DQorDQorKGRlZmluZV9tZW1vcnlfY29uc3RyYWludCAiVW1lbTAiDQorICAi QGludGVybmFsDQorICAgQSBtaWNyb01JUFMgbWVtb3J5IG9wZXJhbmQgZm9y IHVzZSB3aXRoIHRoZSBMV1NQL1NXU1AgaW5zbnMuIg0KKyAgKGFuZCAobWF0 Y2hfY29kZSAibWVtIikNCisgICAgICAgKG1hdGNoX29wZXJhbmQgMCAiVW1l bTBfb3BlcmFuZCIgIiIpKSkNCisNCisoZGVmaW5lX21lbW9yeV9jb25zdHJh aW50ICJVbG9hZCINCisgICJAaW50ZXJuYWwNCisgICBBIG1pY3JvTUlQUyBt ZW1vcnkgb3BlcmFuZCBmb3IgdXNlIHdpdGggdGhlIHZhcmlvdXMgTE9BRCBp bnNucy4iDQorICAoYW5kIChtYXRjaF9jb2RlICJtZW0iKQ0KKyAgICAgICAo bWF0Y2hfb3BlcmFuZCAwICJVbG9hZF9vcGVyYW5kIiAiIikpKQ0KKw0KKyhk ZWZpbmVfbWVtb3J5X2NvbnN0cmFpbnQgIlVzdG9yIg0KKyAgIkBpbnRlcm5h bA0KKyAgIEEgbWljcm9NSVBTIG1lbW9yeSBvcGVyYW5kIGZvciB1c2Ugd2l0 aCB0aGUgdmFyaW91cyBTVE9SRSBpbnNucy4iDQorICAoYW5kIChtYXRjaF9j b2RlICJtZW0iKQ0KKyAgICAgICAobWF0Y2hfb3BlcmFuZCAwICJVc3RvcmVf b3BlcmFuZCIgIiIpKSkNCisgIA0KKyhkZWZpbmVfY29uc3RyYWludCAiVXNi MDMiDQorICAiQGludGVybmFsDQorICAgQSBzaWduZWQgdGhyZWUtYml0IGNv bnN0YW50LiINCisgIChtYXRjaF9vcGVyYW5kIDAgIlVzYjAzX29wZXJhbmQi ICIiKSkNCisNCisoZGVmaW5lX2NvbnN0cmFpbnQgIlVpYjAzIg0KKyAgIkBp bnRlcm5hbA0KKyAgIEFuIHVuc2lnbmVkLCBpbmNyZW1lbnRlZCB0aHJlZS1i aXQgY29uc3RhbnQuIg0KKyAgKG1hdGNoX29wZXJhbmQgMCAiVWliMDNfb3Bl cmFuZCIgIiIpKQ0KKw0KIChkZWZpbmVfbWVtb3J5X2NvbnN0cmFpbnQgIlci DQogICAiQGludGVybmFsDQogICAgQSBtZW1vcnkgYWRkcmVzcyBiYXNlZCBv biBhIG1lbWJlciBvZiBAY29kZXtCQVNFX1JFR19DTEFTU30uICBUaGlzIGlz DQpJbmRleDogZ2NjL2NvbmZpZy9taXBzL3ByZWRpY2F0ZXMubWQNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvY29uZmlnL21pcHMvcHJlZGlj YXRlcy5tZAkocmV2aXNpb24gMTk2NjM4KQ0KKysrIGdjYy9jb25maWcvbWlw cy9wcmVkaWNhdGVzLm1kCSh3b3JraW5nIGNvcHkpDQpAQCAtMTIyLDYgKzEy Miw2MSBAQA0KIAkJICAgID8gTTE2X1JFR19QIChSRUdOTyAob3ApKQ0KIAkJ ICAgIDogR1BfUkVHX1AgKFJFR05PIChvcCkpIikpKQ0KIA0KKyhkZWZpbmVf cHJlZGljYXRlICJVbWVtMF9vcGVyYW5kIg0KKyAgKGFuZCAobWF0Y2hfY29k ZSAibWVtIikNCisgICAgICAgKG1hdGNoX3Rlc3QgInVtaXBzX2x3c3Bfc3dz cF9hZGRyZXNzX3AgKFhFWFAgKG9wLCAwKSwgbW9kZSkiKSkpDQorDQorKGRl ZmluZV9wcmVkaWNhdGUgIlVsb2FkX29wZXJhbmQiDQorICAoYW5kIChtYXRj aF9jb2RlICJtZW0iKQ0KKyAgICAgICAobWF0Y2hfdGVzdCAidW1pcHNfYWRk cmVzc19wIChYRVhQIChvcCwgMCksIHRydWUsIG1vZGUpIikpKQ0KKw0KKyhk ZWZpbmVfcHJlZGljYXRlICJVc3RvcmVfb3BlcmFuZCINCisgIChhbmQgKG1h dGNoX2NvZGUgIm1lbSIpDQorICAgICAgIChtYXRjaF90ZXN0ICJ1bWlwc19h ZGRyZXNzX3AgKFhFWFAgKG9wLCAwKSwgZmFsc2UsIG1vZGUpIikpKQ0KKw0K KyhkZWZpbmVfcHJlZGljYXRlICJVZGIwN19vcGVyYW5kIg0KKyAgKGFuZCAo bWF0Y2hfY29kZSAiY29uc3RfaW50IikNCisgICAgICAgKG1hdGNoX3Rlc3Qg Im1pcHNfdW5zaWduZWRfaW1tZWRpYXRlX3AgKElOVFZBTCAob3ApICsgMSwg NywgMCkiKSkpDQorDQorKGRlZmluZV9wcmVkaWNhdGUgIlVlYXM5X29wZXJh bmQiDQorICAoYW5kIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQ0KKyAgICAg ICAoaW9yIChtYXRjaF90ZXN0ICIoSU5fUkFOR0UgKElOVFZBTCAob3ApLCAy LCAyNTcpKSIpDQorCSAgICAobWF0Y2hfdGVzdCAiKElOX1JBTkdFIChJTlRW QUwgKG9wKSwgLTI1OCwgLTMpKSIpKSkpDQorDQorKGRlZmluZV9wcmVkaWNh dGUgIlVlYXM2X29wZXJhbmQiDQorICAoYW5kIChtYXRjaF9jb2RlICJjb25z dF9pbnQiKQ0KKyAgICAgICAobWF0Y2hfdGVzdCAibWlwc191bnNpZ25lZF9p bW1lZGlhdGVfcCAoSU5UVkFMIChvcCksIDgsIDIpIikpKQ0KKw0KKyhkZWZp bmVfcHJlZGljYXRlICJVZWltNF9vcGVyYW5kIg0KKyAgKGFuZCAobWF0Y2hf Y29kZSAiY29uc3RfaW50IikNCisJKGlvciAobWF0Y2hfdGVzdCAiSU5UVkFM IChvcCkgPT0gLTEiKQ0KKwkgICAgIChtYXRjaF90ZXN0ICJJTlRWQUwgKG9w KSA9PSAxIikNCisJICAgICAobWF0Y2hfdGVzdCAiSU5UVkFMIChvcCkgPT0g NCIpDQorCSAgICAgKG1hdGNoX3Rlc3QgIklOVFZBTCAob3ApID09IDgiKQ0K KwkgICAgIChtYXRjaF90ZXN0ICJJTlRWQUwgKG9wKSA9PSAxMiIpDQorCSAg ICAgKG1hdGNoX3Rlc3QgIklOVFZBTCAob3ApID09IDE2IikNCisJICAgICAo bWF0Y2hfdGVzdCAiSU5UVkFMIChvcCkgPT0gMjAiKQ0KKwkgICAgIChtYXRj aF90ZXN0ICJJTlRWQUwgKG9wKSA9PSAyNCIpKSkpDQorDQorKGRlZmluZV9w cmVkaWNhdGUgIlVlYW5kX29wZXJhbmQiDQorICAoYW5kIChtYXRjaF9jb2Rl ICJjb25zdF9pbnQiKQ0KKwkoaW9yIChtYXRjaF90ZXN0ICJJTl9SQU5HRSAo SU5UVkFMIChvcCksIDEsIDQpIikNCisJICAgICAobWF0Y2hfdGVzdCAiSU5f UkFOR0UgKElOVFZBTCAob3ApLCA3LCA4KSIpDQorCSAgICAgKG1hdGNoX3Rl c3QgIklOX1JBTkdFIChJTlRWQUwgKG9wKSwgMTUsIDE2KSIpDQorCSAgICAg KG1hdGNoX3Rlc3QgIklOX1JBTkdFIChJTlRWQUwgKG9wKSwgMzEsIDMyKSIp DQorCSAgICAgKG1hdGNoX3Rlc3QgIklOX1JBTkdFIChJTlRWQUwgKG9wKSwg NjMsIDY0KSIpDQorCSAgICAgKG1hdGNoX3Rlc3QgIklOVFZBTCAob3ApID09 IDI1NSIpDQorCSAgICAgKG1hdGNoX3Rlc3QgIklOVFZBTCAob3ApID09IDMy NzY4IikNCisJICAgICAobWF0Y2hfdGVzdCAiSU5UVkFMIChvcCkgPT0gNjU1 MzUiKSkpKQ0KKw0KKyhkZWZpbmVfcHJlZGljYXRlICJVc2IwM19vcGVyYW5k Ig0KKyAgKGFuZCAobWF0Y2hfY29kZSAiY29uc3RfaW50IikNCisgICAgICAg KG1hdGNoX3Rlc3QgIm1pcHNfc2lnbmVkX2ltbWVkaWF0ZV9wIChJTlRWQUwg KG9wKSwgMywgMCkiKSkpDQorDQorKGRlZmluZV9wcmVkaWNhdGUgIlVpYjAz X29wZXJhbmQiDQorICAoYW5kIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQ0K KyAgICAgICAobWF0Y2hfdGVzdCAibWlwc191bnNpZ25lZF9pbW1lZGlhdGVf cCAoSU5UVkFMIChvcCkgLSAxLCAzLCAwKSIpKSkNCisNCiAoZGVmaW5lX3By ZWRpY2F0ZSAibW92ZXBfc3JjX3JlZ2lzdGVyIg0KICAgKGFuZCAobWF0Y2hf Y29kZSAicmVnIikNCiAgICAgICAgKGlvciAobWF0Y2hfdGVzdCAoIklOX1JB TkdFIChSRUdOTyAob3ApLCAyLCAzKSIpKQ0KSW5kZXg6IGdjYy9jb25maWcv bWlwcy9taXBzLm1kDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2Nj L2NvbmZpZy9taXBzL21pcHMubWQJKHJldmlzaW9uIDE5NjYzOCkNCisrKyBn Y2MvY29uZmlnL21pcHMvbWlwcy5tZAkod29ya2luZyBjb3B5KQ0KQEAgLTQx MiwxMiArNDEyLDI5IEBADQogCQkoY29uc3Rfc3RyaW5nICJ5ZXMiKQ0KIAkJ KGNvbnN0X3N0cmluZyAibm8iKSkpDQogDQorKGRlZmluZV9hdHRyICJjb21w cmVzc2lvbiIgIm5vbmUsYWxsLG1pY3JvbWlwcyxtaXBzMTYiDQorICAoY29u c3Rfc3RyaW5nICJub25lIikpDQorDQorKGRlZmluZV9hdHRyICJlbmFibGVk IiAibm8seWVzIg0KKyAgKGlmX3RoZW5fZWxzZSAoaW9yIChlcV9hdHRyICJj b21wcmVzc2lvbiIgImFsbCIpDQorCQkgICAgIChlcV9hdHRyICJjb21wcmVz c2lvbiIgIm5vbmUiKQ0KKwkJICAgICAoYW5kIChlcV9hdHRyICJjb21wcmVz c2lvbiIgIm1pY3JvbWlwcyIpDQorCSAgICAgICAgICAgICAgICAgIChtYXRj aF90ZXN0ICJUQVJHRVRfTUlDUk9NSVBTIikpKQ0KKwkgICAgICAgIChjb25z dF9zdHJpbmcgInllcyIpDQorCSAgICAgICAgKGNvbnN0X3N0cmluZyAibm8i KSkpDQorICANCiA7OyBMZW5ndGggb2YgaW5zdHJ1Y3Rpb24gaW4gYnl0ZXMu DQogKGRlZmluZV9hdHRyICJsZW5ndGgiICIiDQogICAgKGNvbmQgWyhhbmQg KGVxX2F0dHIgImV4dGVuZGVkX21pcHMxNiIgInllcyIpDQogCSAgICAgICAo bWF0Y2hfdGVzdCAiVEFSR0VUX01JUFMxNiIpKQ0KIAkgIChjb25zdF9pbnQg OCkNCiANCisJICAoYW5kIChpb3IgKGVxX2F0dHIgImNvbXByZXNzaW9uIiAi bWljcm9taXBzIikNCisJCSAgICAoZXFfYXR0ciAiY29tcHJlc3Npb24iICJh bGwiKSkNCisJICAgICAgIChlcV9hdHRyICJkd29yZF9tb2RlIiAibm8iKQ0K KwkgICAgICAgKG1hdGNoX3Rlc3QgIlRBUkdFVF9NSUNST01JUFMiKSkNCisJ ICAoY29uc3RfaW50IDIpDQorDQogCSAgOzsgRGlyZWN0IG1pY3JvTUlQUyBi cmFuY2ggaW5zdHJ1Y3Rpb25zIGhhdmUgYSByYW5nZSBvZg0KIAkgIDs7IFst MHgxMDAwMCwweGZmZmVdLCBvdGhlcndpc2UgdGhlIHJhbmdlIGlzIFstMHgy MDAwMCwweDFmZmZjXS4NCiAJICA7OyBJZiBhIGJyYW5jaCBpcyBvdXRzaWRl IHRoaXMgcmFuZ2UsIHdlIGhhdmUgYSBjaG9pY2Ugb2YgdHdvDQpAQCAtMTEz MSwxNCArMTE0OCwxOSBAQA0KICAgIiIpDQogDQogKGRlZmluZV9pbnNuICIq YWRkPG1vZGU+MyINCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiPWQsZCIpDQotCShwbHVzOkdQUiAobWF0Y2hf b3BlcmFuZDpHUFIgMSAicmVnaXN0ZXJfb3BlcmFuZCIgImQsZCIpDQotCQkg IChtYXRjaF9vcGVyYW5kOkdQUiAyICJhcml0aF9vcGVyYW5kIiAiZCxRIikp KV0NCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJyZWdpc3Rlcl9v cGVyYW5kIiAiPSF1LGQsIXUsIWtzLGQsZCxkIikNCisJKHBsdXM6R1BSICht YXRjaF9vcGVyYW5kOkdQUiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIXUsZCwh dSwwLCFrcywha3MsZCIpDQorCQkgIChtYXRjaF9vcGVyYW5kOkdQUiAyICJh cml0aF9vcGVyYW5kIiAiIXUsZCxVZWltNCxVc2IwMyxVZWFzOSxVZWFzNixR IikpKV0NCiAgICIhVEFSR0VUX01JUFMxNiINCi0gICJADQotICAgIDxkPmFk ZHVcdCUwLCUxLCUyDQotICAgIDxkPmFkZGl1XHQlMCwlMSwlMiINCit7DQor ICBpZiAod2hpY2hfYWx0ZXJuYXRpdmUgPT0gMCANCisgICAgICB8fCB3aGlj aF9hbHRlcm5hdGl2ZSA9PSAxKQ0KKyAgICByZXR1cm4gIjxkPmFkZHVcdCUw LCUxLCUyIjsNCisgIGVsc2UNCisgICAgcmV0dXJuICI8ZD5hZGRpdVx0JTAs JTEsJTIiOw0KK30NCiAgIFsoc2V0X2F0dHIgImFsdV90eXBlIiAiYWRkIikN CisgICAoc2V0X2F0dHIgImNvbXByZXNzaW9uIiAibWljcm9taXBzLCosbWlj cm9taXBzLG1pY3JvbWlwcyxtaWNyb21pcHMsbWljcm9taXBzLCoiKQ0KICAg IChzZXRfYXR0ciAibW9kZSIgIjxNT0RFPiIpXSkNCiANCiAoZGVmaW5lX2lu c24gIiphZGQ8bW9kZT4zX21pcHMxNiINCkBAIC0xMzQ3LDEyICsxMzY5LDEz IEBADQogICAgKHNldF9hdHRyICJtb2RlIiAiPFVOSVRNT0RFPiIpXSkNCiAN CiAoZGVmaW5lX2luc24gInN1Yjxtb2RlPjMiDQotICBbKHNldCAobWF0Y2hf b3BlcmFuZDpHUFIgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1kIikNCi0JKG1p bnVzOkdQUiAobWF0Y2hfb3BlcmFuZDpHUFIgMSAicmVnaXN0ZXJfb3BlcmFu ZCIgImQiKQ0KLQkJICAgKG1hdGNoX29wZXJhbmQ6R1BSIDIgInJlZ2lzdGVy X29wZXJhbmQiICJkIikpKV0NCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQ UiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSF1LGQiKQ0KKwkobWludXM6R1BS IChtYXRjaF9vcGVyYW5kOkdQUiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIXUs ZCIpDQorCQkgICAobWF0Y2hfb3BlcmFuZDpHUFIgMiAicmVnaXN0ZXJfb3Bl cmFuZCIgIiF1LGQiKSkpXQ0KICAgIiINCi0gICI8ZD5zdWJ1XHQlMCwlMSwl MiINCit7IHJldHVybiAiPGQ+c3VidVx0JTAsJTEsJTIiOyB9DQogICBbKHNl dF9hdHRyICJhbHVfdHlwZSIgInN1YiIpDQorICAgKHNldF9hdHRyICJjb21w cmVzc2lvbiIgIm1pY3JvbWlwcywqIikNCiAgICAoc2V0X2F0dHIgIm1vZGUi ICI8TU9ERT4iKV0pDQogDQogKGRlZmluZV9pbnNuICIqc3Vic2kzX2V4dGVu ZGVkIg0KQEAgLTI4MjgsOCArMjg1MSw4IEBADQogICAgKHNldF9hdHRyICJt b2RlIiAiPFVOSVRNT0RFPiIpXSkNCiANCiAoZGVmaW5lX2luc24gIm9uZV9j bXBsPG1vZGU+MiINCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiPWQiKQ0KLQkobm90OkdQUiAobWF0Y2hfb3Bl cmFuZDpHUFIgMSAicmVnaXN0ZXJfb3BlcmFuZCIgImQiKSkpXQ0KKyAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6R1BSIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9 IXUsZCIpDQorCShub3Q6R1BSIChtYXRjaF9vcGVyYW5kOkdQUiAxICJyZWdp c3Rlcl9vcGVyYW5kIiAiIXUsZCIpKSldDQogICAiIg0KIHsNCiAgIGlmIChU QVJHRVRfTUlQUzE2KQ0KQEAgLTI4MzgsNiArMjg2MSw3IEBADQogICAgIHJl dHVybiAibm9yXHQlMCwlLiwlMSI7DQogfQ0KICAgWyhzZXRfYXR0ciAiYWx1 X3R5cGUiICJub3QiKQ0KKyAgIChzZXRfYXR0ciAiY29tcHJlc3Npb24iICJt aWNyb21pcHMsKiIpDQogICAgKHNldF9hdHRyICJtb2RlIiAiPE1PREU+Iild KQ0KIAwNCiA7Ow0KQEAgLTI4NzgsOSArMjkwMiw5IEBADQogOzsgIHJlZ2lz dGVyID1vcDEgICAgICAgICAgICAgICAgICAgICAgeA0KIA0KIChkZWZpbmVf aW5zbiAiKmFuZDxtb2RlPjMiDQotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpH UFIgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1kLGQsZCxkLGQsZCxkIikNCi0J KGFuZDpHUFIgKG1hdGNoX29wZXJhbmQ6R1BSIDEgIm5vbmltbWVkaWF0ZV9v cGVyYW5kIiAibyxvLFcsZCxkLGQsZCIpDQotCQkgKG1hdGNoX29wZXJhbmQ6 R1BSIDIgImFuZF9vcGVyYW5kIiAiWWIsWWgsWXcsSyxZeCxZdyxkIikpKV0N CisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiPWQsZCxkLCF1LGQsZCxkLCF1LGQiKQ0KKwkoYW5kOkdQUiAobWF0 Y2hfb3BlcmFuZDpHUFIgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiICJvLG8s VywhdSxkLGQsZCwwLGQiKQ0KKwkJIChtYXRjaF9vcGVyYW5kOkdQUiAyICJh bmRfb3BlcmFuZCIgIlliLFloLFl3LFVlYW5kLEssWXgsWXcsIXUsZCIpKSld DQogICAiIVRBUkdFVF9NSVBTMTYgJiYgYW5kX29wZXJhbmRzX29rICg8TU9E RT5tb2RlLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pIg0KIHsNCiAgIGlu dCBsZW47DQpAQCAtMjg5NywyMCArMjkyMSwyMyBAQA0KICAgICAgIG9wZXJh bmRzWzFdID0gZ2VuX2xvd3BhcnQgKFNJbW9kZSwgb3BlcmFuZHNbMV0pOw0K ICAgICAgIHJldHVybiAibHd1XHQlMCwlMSI7DQogICAgIGNhc2UgMzoNCisg ICAgY2FzZSA0Og0KICAgICAgIHJldHVybiAiYW5kaVx0JTAsJTEsJXgyIjsN Ci0gICAgY2FzZSA0Og0KKyAgICBjYXNlIDU6DQogICAgICAgbGVuID0gbG93 X2JpdG1hc2tfbGVuICg8TU9ERT5tb2RlLCBJTlRWQUwgKG9wZXJhbmRzWzJd KSk7DQogICAgICAgb3BlcmFuZHNbMl0gPSBHRU5fSU5UIChsZW4pOw0KICAg ICAgIHJldHVybiAiPGQ+ZXh0XHQlMCwlMSwwLCUyIjsNCi0gICAgY2FzZSA1 Og0KKyAgICBjYXNlIDY6DQogICAgICAgcmV0dXJuICIjIjsNCi0gICAgY2Fz ZSA2Og0KKyAgICBjYXNlIDc6DQorICAgIGNhc2UgODoNCiAgICAgICByZXR1 cm4gImFuZFx0JTAsJTEsJTIiOw0KICAgICBkZWZhdWx0Og0KICAgICAgIGdj Y191bnJlYWNoYWJsZSAoKTsNCiAgICAgfQ0KIH0NCi0gIFsoc2V0X2F0dHIg Im1vdmVfdHlwZSIgImxvYWQsbG9hZCxsb2FkLGFuZGksZXh0X2lucyxzaGlm dF9zaGlmdCxsb2dpY2FsIikNCisgIFsoc2V0X2F0dHIgIm1vdmVfdHlwZSIg ImxvYWQsbG9hZCxsb2FkLGFuZGksYW5kaSxleHRfaW5zLHNoaWZ0X3NoaWZ0 LGxvZ2ljYWwsbG9naWNhbCIpDQorICAgKHNldF9hdHRyICJjb21wcmVzc2lv biIgIiosKiwqLG1pY3JvbWlwcywqLCosKixtaWNyb21pcHMsKiIpDQogICAg KHNldF9hdHRyICJtb2RlIiAiPE1PREU+IildKQ0KIA0KIChkZWZpbmVfaW5z biAiKmFuZDxtb2RlPjNfbWlwczE2Ig0KQEAgLTI5NTIsMTQgKzI5NzksMTYg QEANCiB9KQ0KIA0KIChkZWZpbmVfaW5zbiAiKmlvcjxtb2RlPjMiDQotICBb KHNldCAobWF0Y2hfb3BlcmFuZDpHUFIgMCAicmVnaXN0ZXJfb3BlcmFuZCIg Ij1kLGQiKQ0KLQkoaW9yOkdQUiAobWF0Y2hfb3BlcmFuZDpHUFIgMSAicmVn aXN0ZXJfb3BlcmFuZCIgIiVkLGQiKQ0KLQkJIChtYXRjaF9vcGVyYW5kOkdQ UiAyICJ1bnNfYXJpdGhfb3BlcmFuZCIgImQsSyIpKSldDQorICBbKHNldCAo bWF0Y2hfb3BlcmFuZDpHUFIgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj0hdSxk LGQiKQ0KKwkoaW9yOkdQUiAobWF0Y2hfb3BlcmFuZDpHUFIgMSAicmVnaXN0 ZXJfb3BlcmFuZCIgIiUwLGQsZCIpDQorCQkgKG1hdGNoX29wZXJhbmQ6R1BS IDIgInVuc19hcml0aF9vcGVyYW5kIiAiIXUsZCxLIikpKV0NCiAgICIhVEFS R0VUX01JUFMxNiINCiAgICJADQogICAgb3JcdCUwLCUxLCUyDQorICAgb3Jc dCUwLCUxLCUyDQogICAgb3JpXHQlMCwlMSwleDIiDQogICBbKHNldF9hdHRy ICJhbHVfdHlwZSIgIm9yIikNCisgICAoc2V0X2F0dHIgImNvbXByZXNzaW9u IiAibWljcm9taXBzLCosKiIpDQogICAgKHNldF9hdHRyICJtb2RlIiAiPE1P REU+IildKQ0KIA0KIChkZWZpbmVfaW5zbiAiKmlvcjxtb2RlPjNfbWlwczE2 Ig0KQEAgLTI5NzksMTQgKzMwMDgsMTYgQEANCiAgICIiKQ0KIA0KIChkZWZp bmVfaW5zbiAiIg0KLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6R1BSIDAgInJl Z2lzdGVyX29wZXJhbmQiICI9ZCxkIikNCi0JKHhvcjpHUFIgKG1hdGNoX29w ZXJhbmQ6R1BSIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlZCxkIikNCi0JCSAo bWF0Y2hfb3BlcmFuZDpHUFIgMiAidW5zX2FyaXRoX29wZXJhbmQiICJkLEsi KSkpXQ0KKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6R1BSIDAgInJlZ2lzdGVy X29wZXJhbmQiICI9IXUsZCxkIikNCisJKHhvcjpHUFIgKG1hdGNoX29wZXJh bmQ6R1BSIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCxkLGQiKQ0KKwkJICht YXRjaF9vcGVyYW5kOkdQUiAyICJ1bnNfYXJpdGhfb3BlcmFuZCIgIiF1LGQs SyIpKSldDQogICAiIVRBUkdFVF9NSVBTMTYiDQogICAiQA0KICAgIHhvclx0 JTAsJTEsJTINCisgICB4b3JcdCUwLCUxLCUyDQogICAgeG9yaVx0JTAsJTEs JXgyIg0KICAgWyhzZXRfYXR0ciAiYWx1X3R5cGUiICJ4b3IiKQ0KKyAgIChz ZXRfYXR0ciAiY29tcHJlc3Npb24iICJtaWNyb21pcHMsKiwqIikNCiAgICAo c2V0X2F0dHIgIm1vZGUiICI8TU9ERT4iKV0pDQogDQogKGRlZmluZV9pbnNu ICIiDQpAQCAtMzE2MiwxNCArMzE5MywxNiBAQA0KIH0pDQogDQogKGRlZmlu ZV9pbnNuICIqemVyb19leHRlbmQ8U0hPUlQ6bW9kZT48R1BSOm1vZGU+MiIN Ci0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiPWQsZCIpDQorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpHUFIgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgIj0hdSxkLGQiKQ0KICAgICAgICAgKHplcm9f ZXh0ZW5kOkdQUg0KLQkgICAgIChtYXRjaF9vcGVyYW5kOlNIT1JUIDEgIm5v bmltbWVkaWF0ZV9vcGVyYW5kIiAiZCxtIikpKV0NCisJICAgICAobWF0Y2hf b3BlcmFuZDpTSE9SVCAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiF1LGQs bSIpKSldDQogICAiIVRBUkdFVF9NSVBTMTYiDQogICAiQA0KICAgIGFuZGlc dCUwLCUxLDxTSE9SVDptYXNrPg0KKyAgIGFuZGlcdCUwLCUxLDxTSE9SVDpt YXNrPg0KICAgIGw8U0hPUlQ6c2l6ZT51XHQlMCwlMSINCi0gIFsoc2V0X2F0 dHIgIm1vdmVfdHlwZSIgImFuZGksbG9hZCIpDQorICBbKHNldF9hdHRyICJt b3ZlX3R5cGUiICJhbmRpLGFuZGksbG9hZCIpDQorICAgKHNldF9hdHRyICJj b21wcmVzc2lvbiIgIm1pY3JvbWlwcywqLCoiKQ0KICAgIChzZXRfYXR0ciAi bW9kZSIgIjxHUFI6TU9ERT4iKV0pDQogDQogKGRlZmluZV9pbnNuICIqemVy b19leHRlbmQ8U0hPUlQ6bW9kZT48R1BSOm1vZGU+Ml9taXBzMTZlIg0KQEAg LTQzNjIsMTMgKzQzOTUsMTQgQEANCiA7OyBpbiBGUCByZWdpc3RlcnMgKG9m ZiBieSBkZWZhdWx0LCB1c2UgLW1kZWJ1Z2ggdG8gZW5hYmxlKS4NCiANCiAo ZGVmaW5lX2luc24gIiptb3Y8bW9kZT5faW50ZXJuYWwiDQotICBbKHNldCAo bWF0Y2hfb3BlcmFuZDpJTU9WRTMyIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5k IiAiPWQsZCxlLGQsbSwqZiwqZiwqZCwqbSwqZCwqeiwqYSwqZCwqQipDKkQs KkIqQypELCpkLCptIikNCi0JKG1hdGNoX29wZXJhbmQ6SU1PVkUzMiAxICJt b3ZlX29wZXJhbmQiICJkLFlkLFlmLG0sZEosKmQqSiwqbSwqZiwqZiwqeiwq ZCwqSipkLCphLCpkLCptLCpCKkMqRCwqQipDKkQiKSldDQorICBbKHNldCAo bWF0Y2hfb3BlcmFuZDpJTU9WRTMyIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5k IiAiPWQsIXUsZCxlLCF1LCF1LGQsZCxVbWVtMCxVc3RvcixtLCpmLCpmLCpk LCptLCpkLCp6LCphLCpkLCpCKkMqRCwqQipDKkQsKmQsKm0iKQ0KKwkobWF0 Y2hfb3BlcmFuZDpJTU9WRTMyIDEgIm1vdmVfb3BlcmFuZCIgImQsSixZZCxZ ZixVZGIwNyxVbG9hZCxVbWVtMCxtLGtzLCF1LGRKLCpkKkosKm0sKmYsKmYs KnosKmQsKkoqZCwqYSwqZCwqbSwqQipDKkQsKkIqQypEIikpXQ0KICAgIiFU QVJHRVRfTUlQUzE2DQogICAgJiYgKHJlZ2lzdGVyX29wZXJhbmQgKG9wZXJh bmRzWzBdLCA8TU9ERT5tb2RlKQ0KICAgICAgICB8fCByZWdfb3JfMF9vcGVy YW5kIChvcGVyYW5kc1sxXSwgPE1PREU+bW9kZSkpIg0KICAgeyByZXR1cm4g bWlwc19vdXRwdXRfbW92ZSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdKTsg fQ0KLSAgWyhzZXRfYXR0ciAibW92ZV90eXBlIiAibW92ZSxjb25zdCxjb25z dCxsb2FkLHN0b3JlLG10YyxmcGxvYWQsbWZjLGZwc3RvcmUsbWZjLG10Yyxt dGxvLG1mbG8sbXRjLGZwbG9hZCxtZmMsZnBzdG9yZSIpDQorICBbKHNldF9h dHRyICJtb3ZlX3R5cGUiICJtb3ZlLG1vdmUsY29uc3QsY29uc3QsbG9hZCxs b2FkLGxvYWQsbG9hZCxzdG9yZSxzdG9yZSxzdG9yZSxtdGMsZnBsb2FkLG1m YyxmcHN0b3JlLG1mYyxtdGMsbXRsbyxtZmxvLG10YyxmcGxvYWQsbWZjLGZw c3RvcmUiKQ0KKyAgIChzZXRfYXR0ciAiY29tcHJlc3Npb24iICJhbGwsbWlj cm9taXBzLCosKixtaWNyb21pcHMsbWljcm9taXBzLG1pY3JvbWlwcywqLG1p Y3JvbWlwcyxtaWNyb21pcHMsKiwqLCosKiwqLCosKiwqLCosKiwqLCosKiIp DQogICAgKHNldF9hdHRyICJtb2RlIiAiU0kiKV0pDQogDQogKGRlZmluZV9p bnNuICIqbW92PG1vZGU+X21pcHMxNiINCkBAIC01MjI1LDkgKzUyNTksOSBA QA0KIH0pDQogDQogKGRlZmluZV9pbnNuICIqPG9wdGFiPjxtb2RlPjMiDQot ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpHUFIgMCAicmVnaXN0ZXJfb3BlcmFu ZCIgIj1kIikNCi0JKGFueV9zaGlmdDpHUFIgKG1hdGNoX29wZXJhbmQ6R1BS IDEgInJlZ2lzdGVyX29wZXJhbmQiICJkIikNCi0JCSAgICAgICAobWF0Y2hf b3BlcmFuZDpTSSAyICJhcml0aF9vcGVyYW5kIiAiZEkiKSkpXQ0KKyAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6R1BSIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9 IXUsZCIpDQorCShhbnlfc2hpZnQ6R1BSIChtYXRjaF9vcGVyYW5kOkdQUiAx ICJyZWdpc3Rlcl9vcGVyYW5kIiAiIXUsZCIpDQorCQkgICAgICAgKG1hdGNo X29wZXJhbmQ6U0kgMiAiYXJpdGhfb3BlcmFuZCIgIlVpYjAzLGRJIikpKV0N CiAgICIhVEFSR0VUX01JUFMxNiINCiB7DQogICBpZiAoQ09OU1RfSU5UX1Ag KG9wZXJhbmRzWzJdKSkNCkBAIC01MjM3LDYgKzUyNzEsMTIgQEANCiAgIHJl dHVybiAiPGQ+PGluc24+XHQlMCwlMSwlMiI7DQogfQ0KICAgWyhzZXRfYXR0 ciAidHlwZSIgInNoaWZ0IikNCisgICAoc2V0X2F0dHJfYWx0ZXJuYXRpdmUg ImNvbXByZXNzaW9uIg0KKwlbKGlmX3RoZW5fZWxzZSAoaW9yIChtYXRjaF90 ZXN0ICJHRVRfQ09ERSAoU0VUX1NSQyAoUEFUVEVSTiAoaW5zbikpKSA9PSBB U0hJRlQiKQ0KKwkJCSAgICAobWF0Y2hfdGVzdCAiR0VUX0NPREUgKFNFVF9T UkMgKFBBVFRFUk4gKGluc24pKSkgPT0gTFNISUZUUlQiKSkNCisJCSAgICAg ICAoY29uc3Rfc3RyaW5nICJtaWNyb21pcHMiKQ0KKwkJICAgICAgIChjb25z dF9zdHJpbmcgIm5vbmUiKSkNCisJKGNvbnN0X3N0cmluZyAibm9uZSIpXSkN CiAgICAoc2V0X2F0dHIgIm1vZGUiICI8TU9ERT4iKV0pDQogDQogKGRlZmlu ZV9pbnNuICIqPG9wdGFiPnNpM19leHRlbmQiDQpJbmRleDogZ2NjL2NvbmZp Zy9taXBzL21pcHMtcHJvdG9zLmgNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci0tLSBnY2MvY29uZmlnL21pcHMvbWlwcy1wcm90b3MuaAkocmV2aXNpb24g MTk2NjM4KQ0KKysrIGdjYy9jb25maWcvbWlwcy9taXBzLXByb3Rvcy5oCSh3 b3JraW5nIGNvcHkpDQpAQCAtMzUwLDEyICszNTAsMTkgQEAgZXh0ZXJuIHZv aWQgbWlwc19leHBhbmRfdmVjX3JlZHVjIChydHgsIHJ0eCwgcnR4ICgNCiBl eHRlcm4gdm9pZCBtaXBzX2V4cGFuZF92ZWNfbWlubWF4IChydHgsIHJ0eCwg cnR4LA0KIAkJCQkgICAgcnR4ICgqKSAocnR4LCBydHgsIHJ0eCksIGJvb2wp Ow0KIA0KK2V4dGVybiBib29sIG1pcHNfc2lnbmVkX2ltbWVkaWF0ZV9wICh1 bnNpZ25lZCBIT1NUX1dJREVfSU5ULCBpbnQsIGludCk7DQorZXh0ZXJuIGJv b2wgbWlwc191bnNpZ25lZF9pbW1lZGlhdGVfcCAodW5zaWduZWQgSE9TVF9X SURFX0lOVCwgaW50LCBpbnQpOw0KKw0KIGV4dGVybiBjb25zdCBjaGFyICp1 bWlwc19vdXRwdXRfc2F2ZV9yZXN0b3JlIChib29sLCBydHgpOw0KIGV4dGVy biBib29sIHVtaXBzX3NhdmVfcmVzdG9yZV9wYXR0ZXJuX3AgKGJvb2wsIHJ0 eCk7DQogZXh0ZXJuIGJvb2wgdW1pcHNfbG9hZF9zdG9yZV9wYWlyX3AgKGJv b2wsIHJ0eCAqKTsNCiBleHRlcm4gdm9pZCB1bWlwc19vdXRwdXRfbG9hZF9z dG9yZV9wYWlyIChib29sLCBydHggKik7DQogZXh0ZXJuIGJvb2wgdW1pcHNf bW92ZXBfdGFyZ2V0X3AgKHJ0eCwgcnR4KTsNCisNCitleHRlcm4gYm9vbCB1 bWlwc19sd3NwX3N3c3BfYWRkcmVzc19wIChydHgsIGVudW0gbWFjaGluZV9t b2RlKTsNCitleHRlcm4gYm9vbCB1bWlwc19hZGRyZXNzX3AgKHJ0eCwgYm9v bCwgZW51bSBtYWNoaW5lX21vZGUpOw0KIGV4dGVybiBib29sIHVtaXBzXzEy Yml0X29mZnNldF9hZGRyZXNzX3AgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUp Ow0KKw0KIGV4dGVybiBydHggbWlwc19leHBhbmRfdGhyZWFkX3BvaW50ZXIg KHJ0eCk7DQogDQogZXh0ZXJuIGJvb2wgbWlwc19laF91c2VzICh1bnNpZ25l ZCBpbnQpOw0KSW5kZXg6IGdjYy9jb25maWcvbWlwcy9taXBzLmMNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvY29uZmlnL21pcHMvbWlwcy5j CShyZXZpc2lvbiAxOTY2MzgpDQorKysgZ2NjL2NvbmZpZy9taXBzL21pcHMu Ywkod29ya2luZyBjb3B5KQ0KQEAgLTIzNzcsNiArMjM3Nyw3MSBAQCBtaXBz X2FkZHJlc3NfaW5zbnMgKHJ0eCB4LCBlbnVtIG1hY2hpbmVfbW9kZSBtb2Rl LA0KICAgcmV0dXJuIDA7DQogfQ0KIA0KKy8qIFJldHVybiB0cnVlIGlmIFgg Zml0cyB3aXRoaW4gYW4gdW5zaWduZWQgZmllbGQgb2YgQklUUyBiaXRzIHRo YXQgaXMNCisgICBzaGlmdGVkIGxlZnQgU0hJRlQgYml0cyBiZWZvcmUgYmVp bmcgdXNlZC4gICovDQorDQorYm9vbA0KK21pcHNfdW5zaWduZWRfaW1tZWRp YXRlX3AgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgeCwgaW50IGJpdHMsIGlu dCBzaGlmdCA9IDApDQorew0KKyAgcmV0dXJuICh4ICYgKCgxIDw8IHNoaWZ0 KSAtIDEpKSA9PSAwICYmIHggPCAoMSA8PCAoc2hpZnQgKyBiaXRzKSk7DQor fQ0KKw0KKy8qIFJldHVybiB0cnVlIGlmIFggZml0cyB3aXRoaW4gYSBzaWdu ZWQgZmllbGQgb2YgIEJJVFMgYml0cyB0aGF0IGlzDQorICAgc2hpZnRlZCBs ZWZ0IFNISUZUIGJpdHMgYmVmb3JlIGJlaW5nIHVzZWQuICAqLw0KKw0KK2Jv b2wNCittaXBzX3NpZ25lZF9pbW1lZGlhdGVfcCAodW5zaWduZWQgSE9TVF9X SURFX0lOVCB4LCBpbnQgYml0cywgaW50IHNoaWZ0ID0gMCkNCit7DQorIHgg Kz0gMSA8PCAoYml0cyArIHNoaWZ0IC0gMSk7DQorIHJldHVybiBtaXBzX3Vu c2lnbmVkX2ltbWVkaWF0ZV9wICh4LCBiaXRzLCBzaGlmdCk7DQorfQ0KKw0K Ky8qIFJldHVybiB0cnVlIGlmIFggaXMgYSBsZWdpdGltYXRlIGFkZHJlc3Mg dGhhdCBjb25mb3JtcyB0byB0aGUgcmVxdWlyZW1lbnRzDQorICAgZm9yIGFu eSBvZiB0aGUgc2hvcnQgbWljcm9NSVBTIExPQUQgb3IgU1RPUkUgaW5zdHJ1 Y3Rpb25zIGV4Y2VwdCBMV1NQDQorICAgb3IgU1dTUC4gICovDQorDQorYm9v bA0KK3VtaXBzX2FkZHJlc3NfcCAocnR4IHgsIGJvb2wgbG9hZCwgZW51bSBt YWNoaW5lX21vZGUgbW9kZSkNCit7DQorDQorICBzdHJ1Y3QgbWlwc19hZGRy ZXNzX2luZm8gYWRkcjsNCisgIGJvb2wgb2sgPSBtaXBzX2NsYXNzaWZ5X2Fk ZHJlc3MgKCZhZGRyLCB4LCBtb2RlLCBmYWxzZSkNCisJICAgICYmIGFkZHIu dHlwZSA9PSBBRERSRVNTX1JFRw0KKwkgICAgJiYgTTE2X1JFR19QIChSRUdO TyAoYWRkci5yZWcpKQ0KKwkgICAgJiYgQ09OU1RfSU5UX1AgKGFkZHIub2Zm c2V0KTsNCisNCisgIGlmICghb2spDQorICAgIHJldHVybiBmYWxzZTsNCisN CisgIGlmIChtaXBzX3Vuc2lnbmVkX2ltbWVkaWF0ZV9wIChJTlRWQUwgKGFk ZHIub2Zmc2V0KSwgNCwgMikNCisgICAgICB8fCBtaXBzX3Vuc2lnbmVkX2lt bWVkaWF0ZV9wIChJTlRWQUwgKGFkZHIub2Zmc2V0KSwgNCwgMSkpDQorICAg IHJldHVybiB0cnVlOw0KKw0KKyAgaWYgKGxvYWQgJiYgSU5fUkFOR0UgKElO VFZBTCAoYWRkci5vZmZzZXQpLCAtMSwgMTQpKQ0KKyAgICByZXR1cm4gdHJ1 ZTsNCisNCisgIGlmICghbG9hZCAmJiBJTl9SQU5HRSAoSU5UVkFMIChhZGRy Lm9mZnNldCksIDAsIDE1KSkNCisgICAgcmV0dXJuIHRydWU7DQorDQorICBy ZXR1cm4gZmFsc2U7DQorDQorfQ0KKw0KKy8qIFJldHVybiB0cnVlIGlmIFgg aXMgYSBsZWdpdGltYXRlIGFkZHJlc3MgdGhhdCBjb25mb3JtcyB0byB0aGUg cmVxdWlyZW1lbnRzDQorICAgZm9yIGEgbWljcm9NSVBTIExXU1Agb3IgU1dT UCBpbnNuLiAgKi8NCisNCitib29sDQordW1pcHNfbHdzcF9zd3NwX2FkZHJl c3NfcCAocnR4IHgsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUpDQorew0KKyAg c3RydWN0IG1pcHNfYWRkcmVzc19pbmZvIGFkZHI7DQorDQorICByZXR1cm4g KG1pcHNfY2xhc3NpZnlfYWRkcmVzcyAoJmFkZHIsIHgsIG1vZGUsIGZhbHNl KQ0KKwkgICYmIGFkZHIudHlwZSA9PSBBRERSRVNTX1JFRw0KKwkgICYmIFJF R05PIChhZGRyLnJlZykgPT0gU1RBQ0tfUE9JTlRFUl9SRUdOVU0NCisJICAm JiBDT05TVF9JTlRfUCAoYWRkci5vZmZzZXQpDQorCSAgJiYgbWlwc191bnNp Z25lZF9pbW1lZGlhdGVfcCAoSU5UVkFMIChhZGRyLm9mZnNldCksIDUsIDIp KTsNCit9DQorDQogLyogUmV0dXJuIHRydWUgaWYgWCBpcyBhIGxlZ2l0aW1h dGUgYWRkcmVzcyB3aXRoIGEgMTItYml0IG9mZnNldC4NCiAgICBNT0RFIGlz IHRoZSBtb2RlIG9mIHRoZSB2YWx1ZSBiZWluZyBhY2Nlc3NlZC4gICovDQog DQpAQCAtODAxMCw5ICs4MDc1LDE3IEBAIG1pcHNfcHJpbnRfb3BlcmFuZF9w dW5jdHVhdGlvbiAoRklMRSAqZmlsZSwgaW50IGNoDQogDQogICAgIGNhc2Ug JyEnOg0KICAgICAgIC8qIFdoZW4gZmluYWxfc2VxdWVuY2UgaXMgMCwgdGhl IGRlbGF5IHNsb3Qgd2lsbCBiZSBhIG5vcC4gIFdlIGNhbg0KLQkgYSAxNi1i aXQgZGVsYXkgc2xvdCBmb3IgbWljcm9NSVBTLiAgKi8NCisJIHVzZSBhIDE2 LWJpdCBkZWxheSBzbG90IGZvciBtaWNyb01JUFMuICAqLw0KICAgICAgIGlm IChmaW5hbF9zZXF1ZW5jZSA9PSAwKQ0KIAlwdXRjICgncycsIGZpbGUpOw0K KyAgICAgIGVsc2UgDQorCXsNCisJICAvKiBVc2UgdGhlIGNvbXBhY3QgdmVy c2lvbiBmb3IgbWljcm9NSVBTIGlmIHRoZSBkZWxheSBzbG90IGlzIGENCisJ ICAgICBjb21wYWN0IG1pY3JvTUlQUyBpbnN0cnVjdGlvbi4gICovDQorCSAg cnR4IGluc24gPSBYVkVDRVhQIChmaW5hbF9zZXF1ZW5jZSwgMCwgMSk7DQor CSAgaWYgKGdldF9hdHRyX2xlbmd0aCAoaW5zbikgPT0gMikNCisJICAgIHB1 dGMgKCdzJywgZmlsZSk7DQorCX0NCiAgICAgICBicmVhazsNCiANCiAgICAg ZGVmYXVsdDoNCg== --_003_FD3DCEAC5B03E9408544A1E416F11242987BDF64NAMBX01mgcmento_--