From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32214 invoked by alias); 6 Apr 2011 14:11:42 -0000 Received: (qmail 32200 invoked by uid 22791); 6 Apr 2011 14:11:39 -0000 X-SWARE-Spam-Status: No, hits=-0.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FSL_RU_URL,RCVD_IN_DNSWL_NONE,TW_FN,TW_OV,TW_RJ X-Spam-Check-By: sourceware.org Received: from mo-p00-ob.rzone.de (HELO mo-p00-ob.rzone.de) (81.169.146.161) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 06 Apr 2011 14:11:31 +0000 X-RZG-AUTH: :LXoWVUeid/7A29J/hMvvT2k715jHQaJercGObUOFkj18odoYNahU4Q== X-RZG-CLASS-ID: mo00 Received: from [192.168.0.22] (business-188-111-022-002.static.arcor-ip.net [188.111.22.2]) by post.strato.de (fruni mo56) (RZmta 25.11) with ESMTPA id 506699n36DjSj1 ; Wed, 6 Apr 2011 16:11:07 +0200 (MEST) Message-ID: <4D9C747B.1020303@gjlay.de> Date: Wed, 06 Apr 2011 14:11:00 -0000 From: Georg-Johann Lay User-Agent: Thunderbird 2.0.0.24 (X11/20100302) MIME-Version: 1.0 To: gcc-patches@gcc.gnu.org CC: Denis Chertykov , Eric Weddington , Anatoly Sokolov Subject: [Patch][AVR]: Initial builtins support Content-Type: multipart/mixed; boundary="------------020004080108060005040100" X-IsSubscribed: yes 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: 2011-04/txt/msg00473.txt.bz2 This is a multi-part message in MIME format. --------------020004080108060005040100 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-length: 1780 This patch adds builtin support for some RTL builtins to avr backend. One builtin implements loop for delay of specific number of ticks (under the assumption IRQs are off), others simply map to machine instructions like SEI, CLI, NOP, SLEEP, WDR, FMUL, FMAULS, FMULSU. In addition, builtin macros are introduced so that use can easily query if or if not a specific builtin is available. This might be useful as builtin support evolves, because #ifdef is easier then to twiddle out which version brings what builtin. 2011-04-06 Georg-Johann Lay * config/avr/avr.c: ("insn-codes.h", "optabs.h", "langhooks.h"): New Includes (avr_init_builtins, avr_expand_builtin, avr_expand_delay_cycles, avr_expand_unop_builtin, avr_expand_binop_builtin ): New functions. (avr_builtin_id): New enum (struct avr_builtin_description): New struct (bdesc_1arg, bdesc_2arg): New arrays describing some RTL builtins. (TARGET_INIT_BUILTINS, TARGET_EXPAND_BUILTIN): Define. * config/avr/avr.md (UNSPEC_FMUL, UNSPEC_FMULS, UNSPEC_FMULSU, UNSPECV_ENABLE_IRQS, UNSPECV_NOP, UNSPECV_SLEEP, UNSPECV_WDR, UNSPECV_DELAY_CYCLES): new enumeration values (UNSPEC_SEI, UNSPEC_CLI): Remove enumeration values ("enable_interrupt"): Use UNSPECV_ENABLE_IRQS ("disable_interrupt"): Use UNSPECV_ENABLE_IRQS ("*rotlqi3_4"): rename insn to "rotlqi3_4" ("delay_cycles_1", "delay_cycles_2", "delay_cycles_3", "delay_cycles_4", "nopv", "sleep", "wdr", "fmul", "fmuls", "fmulsu"): New insns * config/avr/avr-c.c: fix line endings (avr_cpu_cpp_builtins): New builtin defines: __BUILTIN_AVR_NOP, __BUILTIN_AVR_SEI, __BUILTIN_AVR_CLI, __BUILTIN_AVR_WDR, __BUILTIN_AVR_SLEEP, __BUILTIN_AVR_SWAP, __BUILTIN_AVR_DELAY_CYCLES, __BUILTIN_AVR_FMUL, __BUILTIN_AVR_FMULS, __BUILTIN_AVR_FMULSU. --------------020004080108060005040100 Content-Type: text/x-patch; name="builtin-v2.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="builtin-v2.diff" Content-length: 31619 SW5kZXg6IGNvbmZpZy9hdnIvYXZyLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gY29uZmlnL2F2ci9hdnIuYwkoUmV2aXNpb24gMTcyMDM2KQorKysg Y29uZmlnL2F2ci9hdnIuYwkoQXJiZWl0c2tvcGllKQpAQCAtMjksNiArMjks NyBAQAogI2luY2x1ZGUgImluc24tY29uZmlnLmgiCiAjaW5jbHVkZSAiY29u ZGl0aW9ucy5oIgogI2luY2x1ZGUgImluc24tYXR0ci5oIgorI2luY2x1ZGUg Imluc24tY29kZXMuaCIKICNpbmNsdWRlICJmbGFncy5oIgogI2luY2x1ZGUg InJlbG9hZC5oIgogI2luY2x1ZGUgInRyZWUuaCIKQEAgLTM4LDcgKzM5LDkg QEAKICNpbmNsdWRlICJvYnN0YWNrLmgiCiAjaW5jbHVkZSAiZnVuY3Rpb24u aCIKICNpbmNsdWRlICJyZWNvZy5oIgorI2luY2x1ZGUgIm9wdGFicy5oIgog I2luY2x1ZGUgImdnYy5oIgorI2luY2x1ZGUgImxhbmdob29rcy5oIgogI2lu Y2x1ZGUgInRtX3AuaCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKICNpbmNsdWRl ICJ0YXJnZXQtZGVmLmgiCkBAIC05MSw2ICs5NCw4IEBAIHN0YXRpYyBib29s IGF2cl9ydHhfY29zdHMgKHJ0eCwgaW50LCBpbnQKIHN0YXRpYyBpbnQgYXZy X2FkZHJlc3NfY29zdCAocnR4LCBib29sKTsKIHN0YXRpYyBib29sIGF2cl9y ZXR1cm5faW5fbWVtb3J5IChjb25zdF90cmVlLCBjb25zdF90cmVlKTsKIHN0 YXRpYyBzdHJ1Y3QgbWFjaGluZV9mdW5jdGlvbiAqIGF2cl9pbml0X21hY2hp bmVfc3RhdHVzICh2b2lkKTsKK3N0YXRpYyB2b2lkIGF2cl9pbml0X2J1aWx0 aW5zICh2b2lkKTsKK3N0YXRpYyBydHggYXZyX2V4cGFuZF9idWlsdGluICh0 cmVlLCBydHgsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIGludCk7CiBzdGF0 aWMgcnR4IGF2cl9idWlsdGluX3NldGptcF9mcmFtZV92YWx1ZSAodm9pZCk7 CiBzdGF0aWMgYm9vbCBhdnJfaGFyZF9yZWdub19zY3JhdGNoX29rICh1bnNp Z25lZCBpbnQpOwogc3RhdGljIHVuc2lnbmVkIGludCBhdnJfY2FzZV92YWx1 ZXNfdGhyZXNob2xkICh2b2lkKTsKQEAgLTI1Myw2ICsyNTgsMTMgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBkZWZhdWx0X29wdGlvbnMgYXZyXwogI3VuZGVm IFRBUkdFVF9GVU5DVElPTl9PS19GT1JfU0lCQ0FMTAogI2RlZmluZSBUQVJH RVRfRlVOQ1RJT05fT0tfRk9SX1NJQkNBTEwgYXZyX2Z1bmN0aW9uX29rX2Zv cl9zaWJjYWxsCiAKKyN1bmRlZiBUQVJHRVRfSU5JVF9CVUlMVElOUworI2Rl ZmluZSBUQVJHRVRfSU5JVF9CVUlMVElOUyBhdnJfaW5pdF9idWlsdGlucwor CisjdW5kZWYgVEFSR0VUX0VYUEFORF9CVUlMVElOCisjZGVmaW5lIFRBUkdF VF9FWFBBTkRfQlVJTFRJTiBhdnJfZXhwYW5kX2J1aWx0aW4KKworCiBzdHJ1 Y3QgZ2NjX3RhcmdldCB0YXJnZXRtID0gVEFSR0VUX0lOSVRJQUxJWkVSOwog DAogc3RhdGljIHZvaWQKQEAgLTY0MjYsNCArNjQzOCwzMzEgQEAgdW5zaWdu ZWQgaW50IGF2cl9jYXNlX3ZhbHVlc190aHJlc2hvbGQgKAogICByZXR1cm4g KCFBVlJfSEFWRV9KTVBfQ0FMTCB8fCBUQVJHRVRfQ0FMTF9QUk9MT0dVRVMp ID8gOCA6IDE3OwogfQogCisvKiBIZWxwZXIgZm9yIF9fYnVpbHRpbl9hdnJf ZGVsYXlfY3ljbGVzICovCisKK3N0YXRpYyB2b2lkCithdnJfZXhwYW5kX2Rl bGF5X2N5Y2xlcyAocnR4IG9wZXJhbmRzMCkKK3sKKyAgdW5zaWduZWQgSE9T VF9XSURFX0lOVCBjeWNsZXMgPSBVSU5UVkFMIChvcGVyYW5kczApOworICB1 bnNpZ25lZCBIT1NUX1dJREVfSU5UIGN5Y2xlc191c2VkOworICB1bnNpZ25l ZCBIT1NUX1dJREVfSU5UIGxvb3BfY291bnQ7CisgIAorICBpZiAoSU5fUkFO R0UgKGN5Y2xlcywgODM4ODYwODIsIDB4RkZGRkZGRkYpKQorICAgIHsKKyAg ICAgIGxvb3BfY291bnQgPSAoKGN5Y2xlcyAtIDkpIC8gNikgKyAxOworICAg ICAgY3ljbGVzX3VzZWQgPSAoKGxvb3BfY291bnQgLSAxKSAqIDYpICsgOTsK KyAgICAgIGVtaXRfaW5zbiAoZ2VuX2RlbGF5X2N5Y2xlc180IChnZW5faW50 X21vZGUgKGxvb3BfY291bnQsIFNJbW9kZSkpKTsKKyAgICAgIGN5Y2xlcyAt PSBjeWNsZXNfdXNlZDsKKyAgICB9CisgIAorICBpZiAoSU5fUkFOR0UgKGN5 Y2xlcywgMjYyMTQ1LCA4Mzg4NjA4MSkpCisgICAgeworICAgICAgbG9vcF9j b3VudCA9ICgoY3ljbGVzIC0gNykgLyA1KSArIDE7CisgICAgICBpZiAobG9v cF9jb3VudCA+IDB4RkZGRkZGKQorICAgICAgICBsb29wX2NvdW50ID0gMHhG RkZGRkY7CisgICAgICBjeWNsZXNfdXNlZCA9ICgobG9vcF9jb3VudCAtIDEp ICogNSkgKyA3OworICAgICAgZW1pdF9pbnNuIChnZW5fZGVsYXlfY3ljbGVz XzMgKGdlbl9pbnRfbW9kZSAobG9vcF9jb3VudCwgU0ltb2RlKSkpOworICAg ICAgY3ljbGVzIC09IGN5Y2xlc191c2VkOworICAgIH0KKyAgCisgIGlmIChJ Tl9SQU5HRSAoY3ljbGVzLCA3NjgsIDI2MjE0NCkpCisgICAgeworICAgICAg bG9vcF9jb3VudCA9ICgoY3ljbGVzIC0gNSkgLyA0KSArIDE7CisgICAgICBp ZiAobG9vcF9jb3VudCA+IDB4RkZGRikKKyAgICAgICAgbG9vcF9jb3VudCA9 IDB4RkZGRjsKKyAgICAgIGN5Y2xlc191c2VkID0gKChsb29wX2NvdW50IC0g MSkgKiA0KSArIDU7CisgICAgICBlbWl0X2luc24gKGdlbl9kZWxheV9jeWNs ZXNfMiAoZ2VuX2ludF9tb2RlIChsb29wX2NvdW50LCBISW1vZGUpKSk7Cisg ICAgICBjeWNsZXMgLT0gY3ljbGVzX3VzZWQ7CisgICAgfQorICAKKyAgaWYg KElOX1JBTkdFIChjeWNsZXMsIDYsIDc2NykpCisgICAgeworICAgICAgbG9v cF9jb3VudCA9IGN5Y2xlcyAvIDM7CisgICAgICBpZiAobG9vcF9jb3VudCA+ IDI1NSkgCisgICAgICAgIGxvb3BfY291bnQgPSAyNTU7CisgICAgICBjeWNs ZXNfdXNlZCA9IGxvb3BfY291bnQgKiAzOworICAgICAgZW1pdF9pbnNuIChn ZW5fZGVsYXlfY3ljbGVzXzEgKGdlbl9pbnRfbW9kZSAobG9vcF9jb3VudCwg UUltb2RlKSkpOworICAgICAgY3ljbGVzIC09IGN5Y2xlc191c2VkOworICAg ICAgfQorICAKKyAgd2hpbGUgKGN5Y2xlcyA+PSAyKQorICAgIHsKKyAgICAg IGVtaXRfaW5zbiAoZ2VuX25vcHYgKEdFTl9JTlQoMikpKTsKKyAgICAgIGN5 Y2xlcyAtPSAyOworICAgIH0KKworICBpZiAoY3ljbGVzID09IDEpCisgICAg eworICAgICAgZW1pdF9pbnNuIChnZW5fbm9wdiAoR0VOX0lOVCgxKSkpOwor ICAgICAgY3ljbGVzLS07CisgICAgfQorfQorCisvKiBJRHMgZm9yIGFsbCB0 aGUgQVZSIGJ1aWx0aW5zLiAgKi8KKworZW51bSBhdnJfYnVpbHRpbl9pZAor ICB7CisgICAgQVZSX0JVSUxUSU5fTk9QLAorICAgIEFWUl9CVUlMVElOX1NF SSwKKyAgICBBVlJfQlVJTFRJTl9DTEksCisgICAgQVZSX0JVSUxUSU5fV0RS LAorICAgIEFWUl9CVUlMVElOX1NMRUVQLAorICAgIEFWUl9CVUlMVElOX1NX QVAsCisgICAgQVZSX0JVSUxUSU5fRk1VTCwKKyAgICBBVlJfQlVJTFRJTl9G TVVMUywKKyAgICBBVlJfQlVJTFRJTl9GTVVMU1UsCisgICAgQVZSX0JVSUxU SU5fREVMQVlfQ1lDTEVTCisgIH07CisKKyNkZWZpbmUgREVGX0JVSUxUSU4o TkFNRSwgVFlQRSwgQ09ERSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGFkZF9idWlsdGluX2Z1 bmN0aW9uICgoTkFNRSksIChUWVBFKSwgKENPREUpLCBCVUlMVF9JTl9NRCwg ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBO VUxMX1RSRUUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9 IHdoaWxlICgwKQorCisKKy8qIEltcGxlbWVudCBgVEFSR0VUX0lOSVRfQlVJ TFRJTlMnICovCisvKiBTZXQgdXAgYWxsIGJ1aWx0aW4gZnVuY3Rpb25zIGZv ciB0aGlzIHRhcmdldC4gICovCisKK3N0YXRpYyB2b2lkCithdnJfaW5pdF9i dWlsdGlucyAodm9pZCkKK3sKKyAgdHJlZSB2b2lkX2Z0eXBlX3ZvaWQKKyAg ICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHZvaWRfdHlwZV9ub2RlLCB2b2lk X2xpc3Rfbm9kZSk7CisgIHRyZWUgdWNoYXJfZnR5cGVfdWNoYXIKKyAgICA9 IGJ1aWxkX2Z1bmN0aW9uX3R5cGVfbGlzdCAodW5zaWduZWRfY2hhcl90eXBl X25vZGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZF9jaGFyX3R5cGVfbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTF9UUkVFKTsKKyAgdHJlZSB1aW50X2Z0eXBlX3VjaGFy X3VjaGFyCisgICAgPSBidWlsZF9mdW5jdGlvbl90eXBlX2xpc3QgKHVuc2ln bmVkX3R5cGVfbm9kZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkX2NoYXJfdHlwZV9ub2RlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZF9jaGFyX3R5cGVfbm9kZSwgCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTExfVFJFRSk7Cisg IHRyZWUgaW50X2Z0eXBlX2NoYXJfY2hhcgorICAgID0gYnVpbGRfZnVuY3Rp b25fdHlwZV9saXN0IChpbnRlZ2VyX3R5cGVfbm9kZSwgCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZV9ub2RlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX3R5cGVfbm9kZSwgCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTExfVFJFRSk7Cisg IHRyZWUgaW50X2Z0eXBlX2NoYXJfdWNoYXIKKyAgICA9IGJ1aWxkX2Z1bmN0 aW9uX3R5cGVfbGlzdCAoaW50ZWdlcl90eXBlX25vZGUsIAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyX3R5cGVfbm9kZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWRfY2hhcl90eXBl X25vZGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM X1RSRUUpOworICB0cmVlIHZvaWRfZnR5cGVfdWxvbmcKKyAgICA9IGJ1aWxk X2Z1bmN0aW9uX3R5cGVfbGlzdCAodm9pZF90eXBlX25vZGUsIAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nX3Vuc2lnbmVkX3R5cGVf bm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTF9U UkVFKTsKKworICBERUZfQlVJTFRJTiAoIl9fYnVpbHRpbl9hdnJfbm9wIiwg dm9pZF9mdHlwZV92b2lkLCBBVlJfQlVJTFRJTl9OT1ApOworICBERUZfQlVJ TFRJTiAoIl9fYnVpbHRpbl9hdnJfc2VpIiwgdm9pZF9mdHlwZV92b2lkLCBB VlJfQlVJTFRJTl9TRUkpOworICBERUZfQlVJTFRJTiAoIl9fYnVpbHRpbl9h dnJfY2xpIiwgdm9pZF9mdHlwZV92b2lkLCBBVlJfQlVJTFRJTl9DTEkpOwor ICBERUZfQlVJTFRJTiAoIl9fYnVpbHRpbl9hdnJfd2RyIiwgdm9pZF9mdHlw ZV92b2lkLCBBVlJfQlVJTFRJTl9XRFIpOworICBERUZfQlVJTFRJTiAoIl9f YnVpbHRpbl9hdnJfc2xlZXAiLCB2b2lkX2Z0eXBlX3ZvaWQsIEFWUl9CVUlM VElOX1NMRUVQKTsKKyAgREVGX0JVSUxUSU4gKCJfX2J1aWx0aW5fYXZyX3N3 YXAiLCB1Y2hhcl9mdHlwZV91Y2hhciwgQVZSX0JVSUxUSU5fU1dBUCk7Cisg IERFRl9CVUlMVElOICgiX19idWlsdGluX2F2cl9kZWxheV9jeWNsZXMiLCB2 b2lkX2Z0eXBlX3Vsb25nLCAKKyAgICAgICAgICAgICAgIEFWUl9CVUlMVElO X0RFTEFZX0NZQ0xFUyk7CisKKyAgaWYgKEFWUl9IQVZFX01VTCkKKyAgICB7 CisgICAgICAvKiBGSVhNRTogSWYgIUFWUl9IQVZFX01VTCwgbWFrZSByZXNw ZWN0aXZlIGZ1bmN0aW9ucyBhdmFpbGFibGUKKyAgICAgICAgIGluIGxpYmdj Yy4gRm9yIGZtdWwgYW5kIGZtdWxzIHRoaXMgaXMgc3RyYWlnaHQgZm9yd2Fy ZCB3aXRoCisgICAgICAgICB1cGNvbWluZyBmaXhlZCBwb2ludCBzdXBwb3J0 LiAqLworICAgICAgCisgICAgICBERUZfQlVJTFRJTiAoIl9fYnVpbHRpbl9h dnJfZm11bCIsIHVpbnRfZnR5cGVfdWNoYXJfdWNoYXIsIAorICAgICAgICAg ICAgICAgICAgIEFWUl9CVUlMVElOX0ZNVUwpOworICAgICAgREVGX0JVSUxU SU4gKCJfX2J1aWx0aW5fYXZyX2ZtdWxzIiwgaW50X2Z0eXBlX2NoYXJfY2hh ciwgCisgICAgICAgICAgICAgICAgICAgQVZSX0JVSUxUSU5fRk1VTFMpOwor ICAgICAgREVGX0JVSUxUSU4gKCJfX2J1aWx0aW5fYXZyX2ZtdWxzdSIsIGlu dF9mdHlwZV9jaGFyX3VjaGFyLCAKKyAgICAgICAgICAgICAgICAgICBBVlJf QlVJTFRJTl9GTVVMU1UpOworICAgIH0KK30KKworI3VuZGVmIERFRl9CVUlM VElOCisKK3N0cnVjdCBhdnJfYnVpbHRpbl9kZXNjcmlwdGlvbgoreworICBj b25zdCBlbnVtIGluc25fY29kZSBpY29kZTsKKyAgY29uc3QgY2hhciAqY29u c3QgbmFtZTsKKyAgY29uc3QgZW51bSBhdnJfYnVpbHRpbl9pZCBpZDsKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXZyX2J1aWx0aW5fZGVzY3JpcHRp b24KK2JkZXNjXzFhcmdbXSA9CisgIHsKKyAgICB7IENPREVfRk9SX3JvdGxx aTNfNCwgIl9fYnVpbHRpbl9hdnJfc3dhcCIsIEFWUl9CVUlMVElOX1NXQVAg fQorICB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF2cl9idWlsdGluX2Rl c2NyaXB0aW9uCitiZGVzY18yYXJnW10gPQorICB7CisgICAgeyBDT0RFX0ZP Ul9mbXVsLCAiX19idWlsdGluX2F2cl9mbXVsIiwgQVZSX0JVSUxUSU5fRk1V TCB9LAorICAgIHsgQ09ERV9GT1JfZm11bHMsICJfX2J1aWx0aW5fYXZyX2Zt dWxzIiwgQVZSX0JVSUxUSU5fRk1VTFMgfSwKKyAgICB7IENPREVfRk9SX2Zt dWxzdSwgIl9fYnVpbHRpbl9hdnJfZm11bHN1IiwgQVZSX0JVSUxUSU5fRk1V TFNVIH0KKyAgfTsKKworLyogU3Vicm91dGluZSBvZiBhdnJfZXhwYW5kX2J1 aWx0aW4gdG8gdGFrZSBjYXJlIG9mIHVub3AgaW5zbnMuICAqLworCitzdGF0 aWMgcnR4CithdnJfZXhwYW5kX3Vub3BfYnVpbHRpbiAoZW51bSBpbnNuX2Nv ZGUgaWNvZGUsIHRyZWUgZXhwLAorICAgICAgICAgICAgICAgICAgICAgICAg IHJ0eCB0YXJnZXQpCit7CisgIHJ0eCBwYXQ7CisgIHRyZWUgYXJnMCA9IENB TExfRVhQUl9BUkcgKGV4cCwgMCk7CisgIHJ0eCBvcDAgPSBleHBhbmRfZXhw ciAoYXJnMCwgTlVMTF9SVFgsIFZPSURtb2RlLCAwKTsKKyAgZW51bSBtYWNo aW5lX21vZGUgb3AwbW9kZSA9IEdFVF9NT0RFIChvcDApOworICBlbnVtIG1h Y2hpbmVfbW9kZSB0bW9kZSA9IGluc25fZGF0YVtpY29kZV0ub3BlcmFuZFsw XS5tb2RlOworICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlMCA9IGluc25fZGF0 YVtpY29kZV0ub3BlcmFuZFsxXS5tb2RlOworCisgIGlmICghIHRhcmdldAor ICAgICAgfHwgR0VUX01PREUgKHRhcmdldCkgIT0gdG1vZGUKKyAgICAgIHx8 ICEgKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ucHJlZGljYXRlKSAo dGFyZ2V0LCB0bW9kZSkpCisgICAgeworICAgICAgdGFyZ2V0ID0gZ2VuX3Jl Z19ydHggKHRtb2RlKTsKKyAgICB9CisKKyAgaWYgKG9wMG1vZGUgPT0gU0lt b2RlICYmIG1vZGUwID09IEhJbW9kZSkKKyAgICB7CisgICAgICBvcDBtb2Rl ID0gSEltb2RlOworICAgICAgb3AwID0gZ2VuX2xvd3BhcnQgKEhJbW9kZSwg b3AwKTsKKyAgICB9CisgIAorICBnY2NfYXNzZXJ0IChvcDBtb2RlID09IG1v ZGUwIHx8IG9wMG1vZGUgPT0gVk9JRG1vZGUpOworCisgIGlmICghICgqaW5z bl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLnByZWRpY2F0ZSkgKG9wMCwgbW9k ZTApKQorICAgIG9wMCA9IGNvcHlfdG9fbW9kZV9yZWcgKG1vZGUwLCBvcDAp OworCisgIHBhdCA9IEdFTl9GQ04gKGljb2RlKSAodGFyZ2V0LCBvcDApOwor ICBpZiAoISBwYXQpCisgICAgcmV0dXJuIDA7CisgIAorICBlbWl0X2luc24g KHBhdCk7CisgIAorICByZXR1cm4gdGFyZ2V0OworfQorCisKKy8qIFN1YnJv dXRpbmUgb2YgYXZyX2V4cGFuZF9idWlsdGluIHRvIHRha2UgY2FyZSBvZiBi aW5vcCBpbnNucy4gICovCisKK3N0YXRpYyBydHgKK2F2cl9leHBhbmRfYmlu b3BfYnVpbHRpbiAoZW51bSBpbnNuX2NvZGUgaWNvZGUsIHRyZWUgZXhwLCBy dHggdGFyZ2V0KQoreworICBydHggcGF0OworICB0cmVlIGFyZzAgPSBDQUxM X0VYUFJfQVJHIChleHAsIDApOworICB0cmVlIGFyZzEgPSBDQUxMX0VYUFJf QVJHIChleHAsIDEpOworICBydHggb3AwID0gZXhwYW5kX2V4cHIgKGFyZzAs IE5VTExfUlRYLCBWT0lEbW9kZSwgMCk7CisgIHJ0eCBvcDEgPSBleHBhbmRf ZXhwciAoYXJnMSwgTlVMTF9SVFgsIFZPSURtb2RlLCAwKTsKKyAgZW51bSBt YWNoaW5lX21vZGUgb3AwbW9kZSA9IEdFVF9NT0RFIChvcDApOworICBlbnVt IG1hY2hpbmVfbW9kZSBvcDFtb2RlID0gR0VUX01PREUgKG9wMSk7CisgIGVu dW0gbWFjaGluZV9tb2RlIHRtb2RlID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVy YW5kWzBdLm1vZGU7CisgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUwID0gaW5z bl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLm1vZGU7CisgIGVudW0gbWFjaGlu ZV9tb2RlIG1vZGUxID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzJdLm1v ZGU7CisKKyAgaWYgKCEgdGFyZ2V0CisgICAgICB8fCBHRVRfTU9ERSAodGFy Z2V0KSAhPSB0bW9kZQorICAgICAgfHwgISAoKmluc25fZGF0YVtpY29kZV0u b3BlcmFuZFswXS5wcmVkaWNhdGUpICh0YXJnZXQsIHRtb2RlKSkKKyAgICB7 CisgICAgICB0YXJnZXQgPSBnZW5fcmVnX3J0eCAodG1vZGUpOworICAgIH0K KworICBpZiAoKG9wMG1vZGUgPT0gU0ltb2RlIHx8IG9wMG1vZGUgPT0gVk9J RG1vZGUpICYmIG1vZGUwID09IEhJbW9kZSkKKyAgICB7CisgICAgICBvcDBt b2RlID0gSEltb2RlOworICAgICAgb3AwID0gZ2VuX2xvd3BhcnQgKEhJbW9k ZSwgb3AwKTsKKyAgICB9CisgIAorICBpZiAoKG9wMW1vZGUgPT0gU0ltb2Rl IHx8IG9wMW1vZGUgPT0gVk9JRG1vZGUpICYmIG1vZGUxID09IEhJbW9kZSkK KyAgICB7CisgICAgICBvcDFtb2RlID0gSEltb2RlOworICAgICAgb3AxID0g Z2VuX2xvd3BhcnQgKEhJbW9kZSwgb3AxKTsKKyAgICB9CisgIAorICAvKiBJ biBjYXNlIHRoZSBpbnNuIHdhbnRzIGlucHV0IG9wZXJhbmRzIGluIG1vZGVz IGRpZmZlcmVudCBmcm9tCisgICAgIHRoZSByZXN1bHQsIGFib3J0LiAgKi8K KyAgCisgIGdjY19hc3NlcnQgKChvcDBtb2RlID09IG1vZGUwIHx8IG9wMG1v ZGUgPT0gVk9JRG1vZGUpCisgICAgICAgICAgICAgICYmIChvcDFtb2RlID09 IG1vZGUxIHx8IG9wMW1vZGUgPT0gVk9JRG1vZGUpKTsKKworICBpZiAoISAo Kmluc25fZGF0YVtpY29kZV0ub3BlcmFuZFsxXS5wcmVkaWNhdGUpIChvcDAs IG1vZGUwKSkKKyAgICBvcDAgPSBjb3B5X3RvX21vZGVfcmVnIChtb2RlMCwg b3AwKTsKKyAgCisgIGlmICghICgqaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5k WzJdLnByZWRpY2F0ZSkgKG9wMSwgbW9kZTEpKQorICAgIG9wMSA9IGNvcHlf dG9fbW9kZV9yZWcgKG1vZGUxLCBvcDEpOworCisgIHBhdCA9IEdFTl9GQ04g KGljb2RlKSAodGFyZ2V0LCBvcDAsIG9wMSk7CisgIAorICBpZiAoISBwYXQp CisgICAgcmV0dXJuIDA7CisKKyAgZW1pdF9pbnNuIChwYXQpOworICByZXR1 cm4gdGFyZ2V0OworfQorCisKKy8qIEV4cGFuZCBhbiBleHByZXNzaW9uIEVY UCB0aGF0IGNhbGxzIGEgYnVpbHQtaW4gZnVuY3Rpb24sCisgICB3aXRoIHJl c3VsdCBnb2luZyB0byBUQVJHRVQgaWYgdGhhdCdzIGNvbnZlbmllbnQKKyAg IChhbmQgaW4gbW9kZSBNT0RFIGlmIHRoYXQncyBjb252ZW5pZW50KS4KKyAg IFNVQlRBUkdFVCBtYXkgYmUgdXNlZCBhcyB0aGUgdGFyZ2V0IGZvciBjb21w dXRpbmcgb25lIG9mIEVYUCdzIG9wZXJhbmRzLgorICAgSUdOT1JFIGlzIG5v bnplcm8gaWYgdGhlIHZhbHVlIGlzIHRvIGJlIGlnbm9yZWQuICAqLworCitz dGF0aWMgcnR4CithdnJfZXhwYW5kX2J1aWx0aW4gKHRyZWUgZXhwLCBydHgg dGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICBydHggc3VidGFyZ2V0IEFU VFJJQlVURV9VTlVTRUQsCisgICAgICAgICAgICAgICAgICAgIGVudW0gbWFj aGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCwKKyAgICAgICAgICAg ICAgICAgICAgaW50IGlnbm9yZSBBVFRSSUJVVEVfVU5VU0VEKQoreworICBz aXplX3QgaTsKKyAgY29uc3Qgc3RydWN0IGF2cl9idWlsdGluX2Rlc2NyaXB0 aW9uICpkOworICB0cmVlIGZuZGVjbCA9IFRSRUVfT1BFUkFORCAoQ0FMTF9F WFBSX0ZOIChleHApLCAwKTsKKyAgdW5zaWduZWQgaW50IGlkID0gREVDTF9G VU5DVElPTl9DT0RFIChmbmRlY2wpOworICB0cmVlIGFyZzA7CisgIHJ0eCBv cDA7CisKKyAgc3dpdGNoIChpZCkKKyAgICB7CisgICAgY2FzZSBBVlJfQlVJ TFRJTl9OT1A6CisgICAgICBlbWl0X2luc24gKGdlbl9ub3B2IChHRU5fSU5U KDEpKSk7CisgICAgICByZXR1cm4gMDsKKyAgICAgIAorICAgIGNhc2UgQVZS X0JVSUxUSU5fU0VJOgorICAgICAgZW1pdF9pbnNuIChnZW5fZW5hYmxlX2lu dGVycnVwdCAoKSk7CisgICAgICByZXR1cm4gMDsKKyAgICAgIAorICAgIGNh c2UgQVZSX0JVSUxUSU5fQ0xJOgorICAgICAgZW1pdF9pbnNuIChnZW5fZGlz YWJsZV9pbnRlcnJ1cHQgKCkpOworICAgICAgcmV0dXJuIDA7CisgICAgICAK KyAgICBjYXNlIEFWUl9CVUlMVElOX1dEUjoKKyAgICAgIGVtaXRfaW5zbiAo Z2VuX3dkciAoKSk7CisgICAgICByZXR1cm4gMDsKKyAgICAgIAorICAgIGNh c2UgQVZSX0JVSUxUSU5fU0xFRVA6CisgICAgICBlbWl0X2luc24gKGdlbl9z bGVlcCAoKSk7CisgICAgICByZXR1cm4gMDsKKyAgICAgIAorICAgIGNhc2Ug QVZSX0JVSUxUSU5fREVMQVlfQ1lDTEVTOgorICAgICAgeworICAgICAgICBh cmcwID0gQ0FMTF9FWFBSX0FSRyAoZXhwLCAwKTsKKyAgICAgICAgb3AwID0g ZXhwYW5kX2V4cHIgKGFyZzAsIE5VTExfUlRYLCBWT0lEbW9kZSwgMCk7CisK KyAgICAgICAgaWYgKCEgQ09OU1RfSU5UX1AgKG9wMCkpCisgICAgICAgICAg ZXJyb3IgKCJfX2J1aWx0aW5fYXZyX2RlbGF5X2N5Y2xlcyBleHBlY3RzIGEg Y29tcGlsZSB0aW1lIGludGVnZXIgY29uc3RhbnQuIik7CisKKyAgICAgICAg YXZyX2V4cGFuZF9kZWxheV9jeWNsZXMgKG9wMCk7CisgICAgICAgIHJldHVy biAwOworICAgICAgfQorICAgIH0KKworICBmb3IgKGkgPSAwLCBkID0gYmRl c2NfMWFyZzsgaSA8IEFSUkFZX1NJWkUgKGJkZXNjXzFhcmcpOyBpKyssIGQr KykKKyAgICBpZiAoZC0+aWQgPT0gaWQpCisgICAgICByZXR1cm4gYXZyX2V4 cGFuZF91bm9wX2J1aWx0aW4gKGQtPmljb2RlLCBleHAsIHRhcmdldCk7CisK KyAgZm9yIChpID0gMCwgZCA9IGJkZXNjXzJhcmc7IGkgPCBBUlJBWV9TSVpF IChiZGVzY18yYXJnKTsgaSsrLCBkKyspCisgICAgaWYgKGQtPmlkID09IGlk KQorICAgICAgcmV0dXJuIGF2cl9leHBhbmRfYmlub3BfYnVpbHRpbiAoZC0+ aWNvZGUsIGV4cCwgdGFyZ2V0KTsKKworICBnY2NfdW5yZWFjaGFibGUgKCk7 Cit9CisKKwogI2luY2x1ZGUgImd0LWF2ci5oIgpJbmRleDogY29uZmlnL2F2 ci9hdnIubWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29uZmlnL2F2 ci9hdnIubWQJKFJldmlzaW9uIDE3MjAzNikKKysrIGNvbmZpZy9hdnIvYXZy Lm1kCShBcmJlaXRza29waWUpCkBAIC0zNSw5ICszNSw2IEBACiA7OyAgfiAg T3V0cHV0ICdyJyBpZiBub3QgQVZSX0hBVkVfSk1QX0NBTEwuCiA7OyAgISAg T3V0cHV0ICdlJyBpZiBBVlJfSEFWRV9FSUpNUF9FSUNBTEwuCiAKLTs7IFVO U1BFQyB1c2FnZToKLTs7ICAwICBMZW5ndGggb2YgYSBzdHJpbmcsIHNlZSAi c3RybGVuaGkiLgotOzsgIDEgIEp1bXAgYnkgcmVnaXN0ZXIgcGFpciBaIG9y IGJ5IHRhYmxlIGFkZHJlc3NlZCBieSBaLCBzZWUgImNhc2VzaSIuCiAKIChk ZWZpbmVfY29uc3RhbnRzCiAgIFsoUkVHX1gJMjYpCkBAIC01MCwxNyArNDcs MjkgQEAgKGRlZmluZV9jb25zdGFudHMKICAgIAogICAgKFNSRUdfQUREUiAg IDB4NUYpCiAgICAoUkFNUFpfQUREUiAgMHg1QikKLSAgIAotICAgKFVOU1BF Q19TVFJMRU4JMCkKLSAgIChVTlNQRUNfSU5ERVhfSk1QCTEpCi0gICAoVU5T UEVDX1NFSQkJMikKLSAgIChVTlNQRUNfQ0xJCQkzKQotCi0gICAoVU5TUEVD Vl9QUk9MT0dVRV9TQVZFUwkwKQotICAgKFVOU1BFQ1ZfRVBJTE9HVUVfUkVT VE9SRVMJMSkKLSAgIChVTlNQRUNWX1dSSVRFX1NQX0lSUV9PTgkyKQotICAg KFVOU1BFQ1ZfV1JJVEVfU1BfSVJRX09GRgkzKQotICAgKFVOU1BFQ1ZfR09U T19SRUNFSVZFUgk0KV0pCisgICBdKQorCisoZGVmaW5lX2NfZW51bSAidW5z cGVjIgorICBbVU5TUEVDX1NUUkxFTgorICAgVU5TUEVDX0lOREVYX0pNUAor ICAgVU5TUEVDX0ZNVUwKKyAgIFVOU1BFQ19GTVVMUworICAgVU5TUEVDX0ZN VUxTVQorICAgXSkKKworKGRlZmluZV9jX2VudW0gInVuc3BlY3YiCisgIFtV TlNQRUNWX1BST0xPR1VFX1NBVkVTCisgICBVTlNQRUNWX0VQSUxPR1VFX1JF U1RPUkVTCisgICBVTlNQRUNWX1dSSVRFX1NQX0lSUV9PTgorICAgVU5TUEVD Vl9XUklURV9TUF9JUlFfT0ZGCisgICBVTlNQRUNWX0dPVE9fUkVDRUlWRVIK KyAgIFVOU1BFQ1ZfRU5BQkxFX0lSUVMKKyAgIFVOU1BFQ1ZfTk9QCisgICBV TlNQRUNWX1NMRUVQCisgICBVTlNQRUNWX1dEUgorICAgVU5TUEVDVl9ERUxB WV9DWUNMRVMKKyAgIF0pCisgICAgCiAKIChpbmNsdWRlICJwcmVkaWNhdGVz Lm1kIikKIChpbmNsdWRlICJjb25zdHJhaW50cy5tZCIpCkBAIC0xNDg5LDcg KzE0OTgsNyBAQCAoZGVmaW5lX2V4cGFuZCAicm90bHFpMyIKICAgICBGQUlM OwogfSIpCiAKLShkZWZpbmVfaW5zbiAiKnJvdGxxaTNfNCIKKyhkZWZpbmVf aW5zbiAicm90bHFpM180IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpRSSAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQogCShyb3RhdGU6UUkgKG1hdGNo X29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKQogCQkgICAo Y29uc3RfaW50IDQpKSldCkBAIC0zMTMwLDIxICszMTM5LDE5IEBAIChkZWZp bmVfaW5zbiAicG9wcWkiCiAKIDs7IEVuYWJsZSBJbnRlcnJ1cHRzCiAoZGVm aW5lX2luc24gImVuYWJsZV9pbnRlcnJ1cHQiCi0gIFsodW5zcGVjIFsoY29u c3RfaW50IDApXSBVTlNQRUNfU0VJKV0KKyAgWyh1bnNwZWNfdm9sYXRpbGUg Wyhjb25zdF9pbnQgMSldIFVOU1BFQ1ZfRU5BQkxFX0lSUVMpXQogICAiIgog ICAic2VpIgogICBbKHNldF9hdHRyICJsZW5ndGgiICIxIikKLSAgKHNldF9h dHRyICJjYyIgIm5vbmUiKQotICBdKQorICAgKHNldF9hdHRyICJjYyIgIm5v bmUiKV0pCiAKIDs7IERpc2FibGUgSW50ZXJydXB0cwogKGRlZmluZV9pbnNu ICJkaXNhYmxlX2ludGVycnVwdCIKLSAgWyh1bnNwZWMgWyhjb25zdF9pbnQg MCldIFVOU1BFQ19DTEkpXQorICBbKHVuc3BlY192b2xhdGlsZSBbKGNvbnN0 X2ludCAwKV0gVU5TUEVDVl9FTkFCTEVfSVJRUyldCiAgICIiCiAgICJjbGki CiAgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjEiKQotICAoc2V0X2F0dHIgImNj IiAibm9uZSIpCi0gIF0pCisgICAoc2V0X2F0dHIgImNjIiAibm9uZSIpXSkK IAogOzsgIExpYnJhcnkgcHJvbG9ndWUgc2F2ZXMKIChkZWZpbmVfaW5zbiAi Y2FsbF9wcm9sb2d1ZV9zYXZlcyIKQEAgLTMyNDYsMyArMzI1MywxMzggQEAg KGRlZmluZV9leHBhbmQgInNpYmNhbGxfZXBpbG9ndWUiCiAgICAgZXhwYW5k X2VwaWxvZ3VlICh0cnVlIC8qIHNpYmNhbGxfcCAqLyk7CiAgICAgRE9ORTsK ICAgfSkKKworOzsgU29tZSBpbnN0cnVjdGlvbnMgcmVzcC4gaW5zdHJ1Y3Rp b24gc2VxdWVuY2VzIGF2YWlsYWJsZQorOzsgdmlhIGJ1aWx0aW5zLgorCiso ZGVmaW5lX2luc24gImRlbGF5X2N5Y2xlc18xIgorICBbKHVuc3BlY192b2xh dGlsZSBbKG1hdGNoX29wZXJhbmQ6UUkgMCAiY29uc3RfaW50X29wZXJhbmQi ICJuIikKKyAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMSldCisg ICAgICAgICAgICAgICAgICAgIFVOU1BFQ1ZfREVMQVlfQ1lDTEVTKQorICAg KGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkgMSAiPSZkIikpXQorICAiIgor ICAibGRpICUxLGxvOCglMCkKKwkxOiBkZWMgJTEKKwlicm5lIDFiIgorICBb KHNldF9hdHRyICJsZW5ndGgiICIzIikKKyAgIChzZXRfYXR0ciAiY2MiICJj bG9iYmVyIildKQorCisoZGVmaW5lX2luc24gImRlbGF5X2N5Y2xlc18yIgor ICBbKHVuc3BlY192b2xhdGlsZSBbKG1hdGNoX29wZXJhbmQ6SEkgMCAiY29u c3RfaW50X29wZXJhbmQiICJuIikKKyAgICAgICAgICAgICAgICAgICAgIChj b25zdF9pbnQgMildCisgICAgICAgICAgICAgICAgICAgIFVOU1BFQ1ZfREVM QVlfQ1lDTEVTKQorICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6SEkgMSAi PSZ3IikpXQorICAiIgorICAibGRpICVBMSxsbzgoJTApCisJbGRpICVCMSxo aTgoJTApCisJMTogc2JpdyAlQTEsMQorCWJybmUgMWIiCisgIFsoc2V0X2F0 dHIgImxlbmd0aCIgIjQiKQorICAgKHNldF9hdHRyICJjYyIgImNsb2JiZXIi KV0pCisKKyhkZWZpbmVfaW5zbiAiZGVsYXlfY3ljbGVzXzMiCisgIFsodW5z cGVjX3ZvbGF0aWxlIFsobWF0Y2hfb3BlcmFuZDpTSSAwICJjb25zdF9pbnRf b3BlcmFuZCIgIm4iKQorICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2lu dCAzKV0KKyAgICAgICAgICAgICAgICAgICAgVU5TUEVDVl9ERUxBWV9DWUNM RVMpCisgICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpRSSAxICI9JmQiKSkK KyAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOlFJIDIgIj0mZCIpKQorICAg KGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkgMyAiPSZkIikpXQorICAiIgor ICAibGRpICUxLGxvOCglMCkKKwlsZGkgJTIsaGk4KCUwKQorCWxkaSAlMyxo bG84KCUwKQorCTE6IHN1YmkgJTEsMQorCXNiY2kgJTIsMAorCXNiY2kgJTMs MAorCWJybmUgMWIiCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjciKQorICAg KHNldF9hdHRyICJjYyIgImNsb2JiZXIiKV0pCisKKyhkZWZpbmVfaW5zbiAi ZGVsYXlfY3ljbGVzXzQiCisgIFsodW5zcGVjX3ZvbGF0aWxlIFsobWF0Y2hf b3BlcmFuZDpTSSAwICJjb25zdF9pbnRfb3BlcmFuZCIgIm4iKQorICAgICAg ICAgICAgICAgICAgICAgKGNvbnN0X2ludCA0KV0KKyAgICAgICAgICAgICAg ICAgICAgVU5TUEVDVl9ERUxBWV9DWUNMRVMpCisgICAoY2xvYmJlciAobWF0 Y2hfc2NyYXRjaDpRSSAxICI9JmQiKSkKKyAgIChjbG9iYmVyIChtYXRjaF9z Y3JhdGNoOlFJIDIgIj0mZCIpKQorICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0 Y2g6UUkgMyAiPSZkIikpCisgICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpR SSA0ICI9JmQiKSldCisgICIiCisgICJsZGkgJTEsbG84KCUwKQorCWxkaSAl MixoaTgoJTApCisJbGRpICUzLGhsbzgoJTApCisJbGRpICU0LGhoaTgoJTAp CisJMTogc3ViaSAlMSwxCisJc2JjaSAlMiwwCisJc2JjaSAlMywwCisJc2Jj aSAlNCwwCisJYnJuZSAxYiIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiOSIp CisgICAoc2V0X2F0dHIgImNjIiAiY2xvYmJlciIpXSkKKworOzsgQ1BVIGlu c3RydWN0aW9ucworCis7OyBOT1AgdGFraW5nIDEgb3IgMiBUaWNrcyAKKyhk ZWZpbmVfaW5zbiAibm9wdiIKKyAgWyh1bnNwZWNfdm9sYXRpbGUgWyhtYXRj aF9vcGVyYW5kOlNJIDAgImNvbnN0X2ludF9vcGVyYW5kIiAiUCxLIildIAor ICAgICAgICAgICAgICAgICAgICBVTlNQRUNWX05PUCldCisgICIiCisgICJA CisJbm9wCisJcmptcCAuIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIxIikK KyAgIChzZXRfYXR0ciAiY2MiICJub25lIildKQorCis7OyBTTEVFUAorKGRl ZmluZV9pbnNuICJzbGVlcCIKKyAgWyh1bnNwZWNfdm9sYXRpbGUgWyhjb25z dF9pbnQgMCldIFVOU1BFQ1ZfU0xFRVApXQorICAiIgorICAic2xlZXAiCisg IFsoc2V0X2F0dHIgImxlbmd0aCIgIjEiKQorICAgKHNldF9hdHRyICJjYyIg Im5vbmUiKV0pCisgCis7OyBXRFIKKyhkZWZpbmVfaW5zbiAid2RyIgorICBb KHVuc3BlY192b2xhdGlsZSBbKGNvbnN0X2ludCAwKV0gVU5TUEVDVl9XRFIp XQorICAiIgorICAid2RyIgorICBbKHNldF9hdHRyICJsZW5ndGgiICIxIikK KyAgIChzZXRfYXR0ciAiY2MiICJub25lIildKQorICAKKzs7IEZNVUwKKyhk ZWZpbmVfaW5zbiAiZm11bCIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkodW5zcGVjOkhJIFsobWF0 Y2hfb3BlcmFuZDpRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiYSIpCisJCSAg ICAobWF0Y2hfb3BlcmFuZDpRSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiYSIp XQorICAgICAgICAgICAgICAgICAgIFVOU1BFQ19GTVVMKSldCisgICJBVlJf SEFWRV9NVUwiCisgICJmbXVsICUxLCUyCisJbW92dyAlMCxyMAorCWNsciBf X3plcm9fcmVnX18iCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjMiKQorICAg KHNldF9hdHRyICJjYyIgImNsb2JiZXIiKV0pCisKKzs7IEZNVUxTCisoZGVm aW5lX2luc24gImZtdWxzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCSh1bnNwZWM6SEkgWyhtYXRj aF9vcGVyYW5kOlFJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJhIikKKwkJICAg IChtYXRjaF9vcGVyYW5kOlFJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJhIild CisJCSAgICBVTlNQRUNfRk1VTFMpKV0KKyAgIkFWUl9IQVZFX01VTCIKKyAg ImZtdWxzICUxLCUyCisJbW92dyAlMCxyMAorCWNsciBfX3plcm9fcmVnX18i CisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjMiKQorICAgKHNldF9hdHRyICJj YyIgImNsb2JiZXIiKV0pCisKKzs7IEZNVUxTVQorKGRlZmluZV9pbnNuICJm bXVsc3UiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVy X29wZXJhbmQiICI9ciIpCisJKHVuc3BlYzpISSBbKG1hdGNoX29wZXJhbmQ6 UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgImEiKQorCQkgICAgKG1hdGNoX29w ZXJhbmQ6UUkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgImEiKV0KKyAgICAgICAg ICAgICAgICAgICBVTlNQRUNfRk1VTFNVKSldCisgICJBVlJfSEFWRV9NVUwi CisgICJmbXVsc3UgJTEsJTIKKwltb3Z3ICUwLHIwCisJY2xyIF9femVyb19y ZWdfXyIKKyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMyIpCisgICAoc2V0X2F0 dHIgImNjIiAiY2xvYmJlciIpXSkKSW5kZXg6IGNvbmZpZy9hdnIvYXZyLWMu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb25maWcvYXZyL2F2ci1j LmMJKFJldmlzaW9uIDE3MjAzNikKKysrIGNvbmZpZy9hdnIvYXZyLWMuYwko QXJiZWl0c2tvcGllKQpAQCAtMSw4NSArMSwxMDQgQEAKLS8qIENvcHlyaWdo dCAoQykgMjAwOSwgMjAxMA0KLSAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLg0KLSAgIENvbnRyaWJ1dGVkIGJ5IEFuYXRvbHkgU29rb2xvdiAo YWVzb2tAcG9zdC5ydSkNCi0NCi0gICBUaGlzIGZpbGUgaXMgcGFydCBvZiBH Q0MuDQotDQotICAgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCi0gICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQ0KLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikNCi0gICBh bnkgbGF0ZXIgdmVyc2lvbi4NCi0gICANCi0gICBHQ0MgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCi0gICBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZg0KLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCi0gICBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0K LSAgIA0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQotICAgYWxvbmcgd2l0 aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUNCi0g ICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLw0KLQ0KLQ0K LSNpbmNsdWRlICJjb25maWcuaCINCi0jaW5jbHVkZSAic3lzdGVtLmgiDQot I2luY2x1ZGUgImNvcmV0eXBlcy5oIg0KLSNpbmNsdWRlICJ0bS5oIg0KLSNp bmNsdWRlICJ0bV9wLmgiDQotI2luY2x1ZGUgImNwcGxpYi5oIg0KLSNpbmNs dWRlICJ0cmVlLmgiDQotI2luY2x1ZGUgImMtZmFtaWx5L2MtY29tbW9uLmgi DQotDQotLyogTm90IGluY2x1ZGVkIGluIGF2ci5jIHNpbmNlIHRoaXMgcmVx dWlyZXMgQyBmcm9udCBlbmQuICAqLw0KLQ0KLS8qIFdvcmtlciBmdW5jdGlv biBmb3IgVEFSR0VUX0NQVV9DUFBfQlVJTFRJTlMuICAqLw0KLQ0KLXZvaWQN Ci1hdnJfY3B1X2NwcF9idWlsdGlucyAoc3RydWN0IGNwcF9yZWFkZXIgKnBm aWxlKQ0KLXsNCi0gIGJ1aWx0aW5fZGVmaW5lX3N0ZCAoIkFWUiIpOw0KLQ0K LSAgaWYgKGF2cl9jdXJyZW50X2FyY2gtPm1hY3JvKQ0KLSAgICBjcHBfZGVm aW5lIChwZmlsZSwgYXZyX2N1cnJlbnRfYXJjaC0+bWFjcm8pOw0KLSAgaWYg KGF2cl9leHRyYV9hcmNoX21hY3JvKQ0KLSAgICBjcHBfZGVmaW5lIChwZmls ZSwgYXZyX2V4dHJhX2FyY2hfbWFjcm8pOw0KLSAgaWYgKGF2cl9jdXJyZW50 X2FyY2gtPmhhdmVfZWxwbSkNCi0gICAgY3BwX2RlZmluZSAocGZpbGUsICJf X0FWUl9IQVZFX1JBTVBaX18iKTsNCi0gIGlmIChhdnJfY3VycmVudF9hcmNo LT5oYXZlX2VscG0pDQotICAgIGNwcF9kZWZpbmUgKHBmaWxlLCAiX19BVlJf SEFWRV9FTFBNX18iKTsNCi0gIGlmIChhdnJfY3VycmVudF9hcmNoLT5oYXZl X2VscG14KQ0KLSAgICBjcHBfZGVmaW5lIChwZmlsZSwgIl9fQVZSX0hBVkVf RUxQTVhfXyIpOw0KLSAgaWYgKGF2cl9jdXJyZW50X2FyY2gtPmhhdmVfbW92 d19scG14KQ0KLSAgICB7DQotICAgICAgY3BwX2RlZmluZSAocGZpbGUsICJf X0FWUl9IQVZFX01PVldfXyIpOw0KLSAgICAgIGNwcF9kZWZpbmUgKHBmaWxl LCAiX19BVlJfSEFWRV9MUE1YX18iKTsNCi0gICAgfQ0KLSAgaWYgKGF2cl9j dXJyZW50X2FyY2gtPmFzbV9vbmx5KQ0KLSAgICBjcHBfZGVmaW5lIChwZmls ZSwgIl9fQVZSX0FTTV9PTkxZX18iKTsNCi0gIGlmIChhdnJfY3VycmVudF9h cmNoLT5oYXZlX211bCkNCi0gICAgew0KLSAgICAgIGNwcF9kZWZpbmUgKHBm aWxlLCAiX19BVlJfRU5IQU5DRURfXyIpOw0KLSAgICAgIGNwcF9kZWZpbmUg KHBmaWxlLCAiX19BVlJfSEFWRV9NVUxfXyIpOw0KLSAgICB9DQotICBpZiAo YXZyX2N1cnJlbnRfYXJjaC0+aGF2ZV9qbXBfY2FsbCkNCi0gICAgew0KLSAg ICAgIGNwcF9kZWZpbmUgKHBmaWxlLCAiX19BVlJfTUVHQV9fIik7DQotICAg ICAgY3BwX2RlZmluZSAocGZpbGUsICJfX0FWUl9IQVZFX0pNUF9DQUxMX18i KTsNCi0gICAgfQ0KLSAgaWYgKGF2cl9jdXJyZW50X2FyY2gtPmhhdmVfZWlq bXBfZWljYWxsKQ0KLSAgICB7DQotICAgICAgY3BwX2RlZmluZSAocGZpbGUs ICJfX0FWUl9IQVZFX0VJSk1QX0VJQ0FMTF9fIik7DQotICAgICAgY3BwX2Rl ZmluZSAocGZpbGUsICJfX0FWUl8zX0JZVEVfUENfXyIpOw0KLSAgICB9DQot ICBlbHNlDQotICAgIHsNCi0gICAgICBjcHBfZGVmaW5lIChwZmlsZSwgIl9f QVZSXzJfQllURV9QQ19fIik7DQotICAgIH0NCi0NCi0gIGlmIChhdnJfY3Vy cmVudF9kZXZpY2UtPnNob3J0X3NwKQ0KLSAgICBjcHBfZGVmaW5lIChwZmls ZSwgIl9fQVZSX0hBVkVfOEJJVF9TUF9fIik7DQotICBlbHNlDQotICAgIGNw cF9kZWZpbmUgKHBmaWxlLCAiX19BVlJfSEFWRV8xNkJJVF9TUF9fIik7DQot DQotICBpZiAoVEFSR0VUX05PX0lOVEVSUlVQVFMpDQotICAgIGNwcF9kZWZp bmUgKHBmaWxlLCAiX19OT19JTlRFUlJVUFRTX18iKTsNCi19DQotDQorLyog Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwCisgICBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEFuYXRvbHkgU29r b2xvdiAoYWVzb2tAcG9zdC5ydSkKKworICAgVGhpcyBmaWxlIGlzIHBhcnQg b2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFu eSBsYXRlciB2ZXJzaW9uLgorICAgCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgCisg ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNl ZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKworI2luY2x1ZGUgImNv bmZpZy5oIgorI2luY2x1ZGUgInN5c3RlbS5oIgorI2luY2x1ZGUgImNvcmV0 eXBlcy5oIgorI2luY2x1ZGUgInRtLmgiCisjaW5jbHVkZSAidG1fcC5oIgor I2luY2x1ZGUgImNwcGxpYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNs dWRlICJjLWZhbWlseS9jLWNvbW1vbi5oIgorCisvKiBOb3QgaW5jbHVkZWQg aW4gYXZyLmMgc2luY2UgdGhpcyByZXF1aXJlcyBDIGZyb250IGVuZC4gICov CisKKy8qIFdvcmtlciBmdW5jdGlvbiBmb3IgVEFSR0VUX0NQVV9DUFBfQlVJ TFRJTlMuICAqLworCit2b2lkCithdnJfY3B1X2NwcF9idWlsdGlucyAoc3Ry dWN0IGNwcF9yZWFkZXIgKnBmaWxlKQoreworICBidWlsdGluX2RlZmluZV9z dGQgKCJBVlIiKTsKKworICBpZiAoYXZyX2N1cnJlbnRfYXJjaC0+bWFjcm8p CisgICAgY3BwX2RlZmluZSAocGZpbGUsIGF2cl9jdXJyZW50X2FyY2gtPm1h Y3JvKTsKKyAgaWYgKGF2cl9leHRyYV9hcmNoX21hY3JvKQorICAgIGNwcF9k ZWZpbmUgKHBmaWxlLCBhdnJfZXh0cmFfYXJjaF9tYWNybyk7CisgIGlmIChh dnJfY3VycmVudF9hcmNoLT5oYXZlX2VscG0pCisgICAgY3BwX2RlZmluZSAo cGZpbGUsICJfX0FWUl9IQVZFX1JBTVBaX18iKTsKKyAgaWYgKGF2cl9jdXJy ZW50X2FyY2gtPmhhdmVfZWxwbSkKKyAgICBjcHBfZGVmaW5lIChwZmlsZSwg Il9fQVZSX0hBVkVfRUxQTV9fIik7CisgIGlmIChhdnJfY3VycmVudF9hcmNo LT5oYXZlX2VscG14KQorICAgIGNwcF9kZWZpbmUgKHBmaWxlLCAiX19BVlJf SEFWRV9FTFBNWF9fIik7CisgIGlmIChhdnJfY3VycmVudF9hcmNoLT5oYXZl X21vdndfbHBteCkKKyAgICB7CisgICAgICBjcHBfZGVmaW5lIChwZmlsZSwg Il9fQVZSX0hBVkVfTU9WV19fIik7CisgICAgICBjcHBfZGVmaW5lIChwZmls ZSwgIl9fQVZSX0hBVkVfTFBNWF9fIik7CisgICAgfQorICBpZiAoYXZyX2N1 cnJlbnRfYXJjaC0+YXNtX29ubHkpCisgICAgY3BwX2RlZmluZSAocGZpbGUs ICJfX0FWUl9BU01fT05MWV9fIik7CisgIGlmIChhdnJfY3VycmVudF9hcmNo LT5oYXZlX211bCkKKyAgICB7CisgICAgICBjcHBfZGVmaW5lIChwZmlsZSwg Il9fQVZSX0VOSEFOQ0VEX18iKTsKKyAgICAgIGNwcF9kZWZpbmUgKHBmaWxl LCAiX19BVlJfSEFWRV9NVUxfXyIpOworICAgIH0KKyAgaWYgKGF2cl9jdXJy ZW50X2FyY2gtPmhhdmVfam1wX2NhbGwpCisgICAgeworICAgICAgY3BwX2Rl ZmluZSAocGZpbGUsICJfX0FWUl9NRUdBX18iKTsKKyAgICAgIGNwcF9kZWZp bmUgKHBmaWxlLCAiX19BVlJfSEFWRV9KTVBfQ0FMTF9fIik7CisgICAgfQor ICBpZiAoYXZyX2N1cnJlbnRfYXJjaC0+aGF2ZV9laWptcF9laWNhbGwpCisg ICAgeworICAgICAgY3BwX2RlZmluZSAocGZpbGUsICJfX0FWUl9IQVZFX0VJ Sk1QX0VJQ0FMTF9fIik7CisgICAgICBjcHBfZGVmaW5lIChwZmlsZSwgIl9f QVZSXzNfQllURV9QQ19fIik7CisgICAgfQorICBlbHNlCisgICAgeworICAg ICAgY3BwX2RlZmluZSAocGZpbGUsICJfX0FWUl8yX0JZVEVfUENfXyIpOwor ICAgIH0KKworICBpZiAoYXZyX2N1cnJlbnRfZGV2aWNlLT5zaG9ydF9zcCkK KyAgICBjcHBfZGVmaW5lIChwZmlsZSwgIl9fQVZSX0hBVkVfOEJJVF9TUF9f Iik7CisgIGVsc2UKKyAgICBjcHBfZGVmaW5lIChwZmlsZSwgIl9fQVZSX0hB VkVfMTZCSVRfU1BfXyIpOworCisgIGlmIChUQVJHRVRfTk9fSU5URVJSVVBU UykKKyAgICBjcHBfZGVmaW5lIChwZmlsZSwgIl9fTk9fSU5URVJSVVBUU19f Iik7CisKKyAgLyogRGVmaW5lIGJ1aWx0aW4gbWFjcm9zIHNvIHRoYXQgdGhl IHVzZXIgY2FuCisgICAgIGVhc2lseSBxdWVyeSBpZiBvciBpZiBub3QgYSBz cGVjaWZpYyBidWlsdGluCisgICAgIGlzIGF2YWlsYWJsZS4gKi8KKworICBj cHBfZGVmaW5lIChwZmlsZSwgIl9fQlVJTFRJTl9BVlJfTk9QIik7CisgIGNw cF9kZWZpbmUgKHBmaWxlLCAiX19CVUlMVElOX0FWUl9TRUkiKTsKKyAgY3Bw X2RlZmluZSAocGZpbGUsICJfX0JVSUxUSU5fQVZSX0NMSSIpOworICBjcHBf ZGVmaW5lIChwZmlsZSwgIl9fQlVJTFRJTl9BVlJfV0RSIik7CisgIGNwcF9k ZWZpbmUgKHBmaWxlLCAiX19CVUlMVElOX0FWUl9TTEVFUCIpOworICBjcHBf ZGVmaW5lIChwZmlsZSwgIl9fQlVJTFRJTl9BVlJfU1dBUCIpOworICBjcHBf ZGVmaW5lIChwZmlsZSwgIl9fQlVJTFRJTl9BVlJfREVMQVlfQ1lDTEVTIik7 CisKKyAgaWYgKEFWUl9IQVZFX01VTCkKKyAgICB7CisgICAgICBjcHBfZGVm aW5lIChwZmlsZSwgIl9fQlVJTFRJTl9BVlJfRk1VTCIpOworICAgICAgY3Bw X2RlZmluZSAocGZpbGUsICJfX0JVSUxUSU5fQVZSX0ZNVUxTIik7CisgICAg ICBjcHBfZGVmaW5lIChwZmlsZSwgIl9fQlVJTFRJTl9BVlJfRk1VTFNVIik7 CisgICAgfQorfQorCg== --------------020004080108060005040100--