From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 73999 invoked by alias); 4 Aug 2015 12:31:04 -0000 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 Received: (qmail 73988 invoked by uid 89); 4 Aug 2015 12:31:02 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.3 required=5.0 tests=AWL,BAYES_20,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-oi0-f52.google.com Received: from mail-oi0-f52.google.com (HELO mail-oi0-f52.google.com) (209.85.218.52) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 04 Aug 2015 12:31:00 +0000 Received: by oio137 with SMTP id 137so410580oio.0 for ; Tue, 04 Aug 2015 05:30:57 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.202.208.197 with SMTP id h188mr2561673oig.74.1438691457548; Tue, 04 Aug 2015 05:30:57 -0700 (PDT) Received: by 10.76.170.36 with HTTP; Tue, 4 Aug 2015 05:30:57 -0700 (PDT) Date: Tue, 04 Aug 2015 12:31:00 -0000 Message-ID: Subject: [PATCH] Add __builtin_stack_top From: "H.J. Lu" To: Segher Boessenkool Cc: GCC Patches , Uros Bizjak Content-Type: multipart/mixed; boundary=001a113df2a644e16b051c7b75fe X-IsSubscribed: yes X-SW-Source: 2015-08/txt/msg00175.txt.bz2 --001a113df2a644e16b051c7b75fe Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-length: 3104 On Wed, Jul 22, 2015 at 8:44 AM, H.J. Lu wrote: > On Wed, Jul 22, 2015 at 6:59 AM, H.J. Lu wrote: >> On Wed, Jul 22, 2015 at 6:55 AM, Segher Boessenkool >> wrote: >>> On Wed, Jul 22, 2015 at 05:10:04AM -0700, H.J. Lu wrote: >>>> I got a feedback, suggesting __builtin_stack_top, instead of >>>> __builtin_ia32_stack_top. But I don't know if >>>> >>>> + /* After the prologue, stack top is at -WORD(AP) in the current >>>> + frame. */ >>>> + emit_insn (gen_rtx_SET (target, >>>> + plus_constant (Pmode, arg_pointer_rtx, >>>> + -UNITS_PER_WORD))); >>>> >>>> is true for all backends. If it works on all backends, I can move >>>> it to builtins.c. >>> >>> It doesn't afaik. But can't you define INITIAL_FRAME_ADDRESS_RTX? >>> >>> >>> Segher >> >> Does INITIAL_FRAME_ADDRESS_RTX point to stack top? It certainly >> can't be defined for x86. I will write a midld-end patch and leave to = each >> backend to enable it. > > Here is a patch. Any comments, feedbacks? Where does this feature belong? Middle-end or x86 backend? Here is the updated patch to implement it in middle-end. Any comments? Thanks. > Thanks. > > -- > H.J. > --- > When __builtin_frame_address is used to retrieve the address of the > function stack frame, the frame pointer is always kept, which wastes one > register and 2 instructions. For x86-32, one less register means > significant negative impact on performance. This patch adds a new > builtin function, __builtin_stack_top. It returns the stack address > when the function is called. > > This patch only enables __builtin_stack_top for x86 backend. Using > __builtin_stack_top with other backends will lead to > > sorry, unimplemented: =E2=80=98__builtin_stack_top=E2=80=99 not supported= on this target > > TARGET_STACK_TOP_RTX must be defined to enable __builtin_stack_top. > default_stack_top_rtx may be extended to support more backends, > including those with INITIAL_FRAME_ADDRESS_RTX. > > gcc/ > > PR target/66960 > * builtin-types.def (BT_FN_PTR_VOID): New function type. > * builtins.c (expand_builtin): Handle BUILT_IN_STACK_TOP. > (is_simple_builtin): Likewise. > * ipa-pure-const.c (special_builtin_state): Likewise. > * builtins.def: Add BUILT_IN_STACK_TOP. > * function.h (function): Add stack_top_taken. > * target.def (stack_top_rtx): New target hook. > * targhooks.c (default_stack_top_rtx): New. > * targhooks.h (default_stack_top_rtx): Likewise. > * config/i386/i386.c (ix86_expand_prologue): Sorry if DRAP is > used and the stack address has been taken. > (TARGET_STACK_TOP_RTX): New. > * doc/extend.texi: Document __builtin_stack_top. > * doc/tm.texi.in (TARGET_STACK_TOP_RTX): New. > * doc/tm.texi: Regenerated. > > gcc/testsuite/ > > PR target/66960 > * gcc.target/i386/pr66960-1.c: New test. > * gcc.target/i386/pr66960-2.c: Likewise. > * gcc.target/i386/pr66960-3.c: Likewise. > * gcc.target/i386/pr66960-4.c: Likewise. > * gcc.target/i386/pr66960-5.c: Likewise. --=20 H.J. --001a113df2a644e16b051c7b75fe Content-Type: text/x-patch; charset=UTF-8; name="0001-Add-__builtin_stack_top.patch" Content-Disposition: attachment; filename="0001-Add-__builtin_stack_top.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_icxbqech1 Content-length: 22623 RnJvbSAyNjc5ODJmN2M3NmNjNmVlY2UwZGQ3ODk2NTU1ZDI3MjkxZjU4N2Vm IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhq bC50b29sc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjEgSnVsIDIwMTUgMTQ6 MzI6MDkgLTA3MDAKU3ViamVjdDogW1BBVENIXSBBZGQgX19idWlsdGluX3N0 YWNrX3RvcApNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQv cGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGlu ZzogOGJpdAoKV2hlbiBfX2J1aWx0aW5fZnJhbWVfYWRkcmVzcyBpcyB1c2Vk IHRvIHJldHJpZXZlIHRoZSBhZGRyZXNzIG9mIHRoZQpmdW5jdGlvbiBzdGFj ayBmcmFtZSwgdGhlIGZyYW1lIHBvaW50ZXIgcmVnaXN0ZXIgaXMgcmVxdWly ZWQsIHdoaWNoCndhc3RlcyBvbmUgcmVnaXN0ZXIgYW5kIDIgaW5zdHJ1Y3Rp b25zLiAgRm9yIHg4Ni0zMiwgb25lIGxlc3MgcmVnaXN0ZXIKbWVhbnMgc2ln bmlmaWNhbnQgbmVnYXRpdmUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLiAgVGhp cyBwYXRjaCBhZGRzIGEKbmV3IGJ1aWx0aW4gZnVuY3Rpb24sIF9fYnVpbHRp bl9zdGFja190b3AuICBJdCByZXR1cm5zIHRoZSBzdGFjayBhZGRyZXNzCndo ZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4KClRoaXMgcGF0Y2ggb25seSBl bmFibGVzIF9fYnVpbHRpbl9zdGFja190b3AgZm9yIHg4NiBiYWNrZW5kLiAg VXNpbmcKX19idWlsdGluX3N0YWNrX3RvcCB3aXRoIG90aGVyIGJhY2tlbmRz IHdpbGwgbGVhZCB0bwoKc29ycnksIHVuaW1wbGVtZW50ZWQ6IOKAmF9fYnVp bHRpbl9zdGFja190b3DigJkgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHRhcmdl dAoKVEFSR0VUX1NUQUNLX1RPUF9SVFggbXVzdCBiZSBkZWZpbmVkIHRvIGVu YWJsZSBfX2J1aWx0aW5fc3RhY2tfdG9wLgpkZWZhdWx0X3N0YWNrX3RvcF9y dHggbWF5IGJlIGV4dGVuZGVkIHRvIHN1cHBvcnQgbW9yZSBiYWNrZW5kcywK aW5jbHVkaW5nIHRob3NlIHdpdGggSU5JVElBTF9GUkFNRV9BRERSRVNTX1JU WC4KCmdjYy8KCglQUiB0YXJnZXQvNjY5NjAKCSogYnVpbHRpbi10eXBlcy5k ZWYgKEJUX0ZOX1BUUl9WT0lEKTogTmV3IGZ1bmN0aW9uIHR5cGUuCgkqIGJ1 aWx0aW5zLmMgKGV4cGFuZF9idWlsdGluKTogSGFuZGxlIEJVSUxUX0lOX1NU QUNLX1RPUC4KCShpc19zaW1wbGVfYnVpbHRpbik6IExpa2V3aXNlLgoJKiBp cGEtcHVyZS1jb25zdC5jIChzcGVjaWFsX2J1aWx0aW5fc3RhdGUpOiBMaWtl d2lzZS4KCSogYnVpbHRpbnMuZGVmOiBBZGQgQlVJTFRfSU5fU1RBQ0tfVE9Q LgoJKiBmdW5jdGlvbi5oIChmdW5jdGlvbik6IEFkZCBzdGFja190b3BfdGFr ZW4uCgkqIHRhcmdldC5kZWYgKHN0YWNrX3RvcF9ydHgpOiBOZXcgdGFyZ2V0 IGhvb2suCgkqIHRhcmdob29rcy5jIChkZWZhdWx0X3N0YWNrX3RvcF9ydHgp OiBOZXcuCgkqIHRhcmdob29rcy5oIChkZWZhdWx0X3N0YWNrX3RvcF9ydHgp OiBMaWtld2lzZS4KCSogY29uZmlnL2kzODYvaTM4Ni5jIChpeDg2X2V4cGFu ZF9wcm9sb2d1ZSk6IFNvcnJ5IGlmIERSQVAgaXMKCXVzZWQgYW5kIHRoZSBz dGFjayBhZGRyZXNzIGhhcyBiZWVuIHRha2VuLgoJKFRBUkdFVF9TVEFDS19U T1BfUlRYKTogTmV3LgoJKiBkb2MvZXh0ZW5kLnRleGk6IERvY3VtZW50IF9f YnVpbHRpbl9zdGFja190b3AuCgkqIGRvYy90bS50ZXhpLmluIChUQVJHRVRf U1RBQ0tfVE9QX1JUWCk6IE5ldy4KCSogZG9jL3RtLnRleGk6IFJlZ2VuZXJh dGVkLgoKZ2NjL3Rlc3RzdWl0ZS8KCglQUiB0YXJnZXQvNjY5NjAKCSogZ2Nj LnRhcmdldC9pMzg2L3ByNjY5NjAtMS5jOiBOZXcgdGVzdC4KCSogZ2NjLnRh cmdldC9pMzg2L3ByNjY5NjAtMi5jOiBMaWtld2lzZS4KCSogZ2NjLnRhcmdl dC9pMzg2L3ByNjY5NjAtMy5jOiBMaWtld2lzZS4KCSogZ2NjLnRhcmdldC9p Mzg2L3ByNjY5NjAtNC5jOiBMaWtld2lzZS4KCSogZ2NjLnRhcmdldC9pMzg2 L3ByNjY5NjAtNS5jOiBMaWtld2lzZS4KLS0tCiBnY2MvYnVpbHRpbi10eXBl cy5kZWYgICAgICAgICAgICAgICAgICAgICB8ICAxICsKIGdjYy9idWlsdGlu cy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEgKysrKysrKysr KysKIGdjYy9idWlsdGlucy5kZWYgICAgICAgICAgICAgICAgICAgICAgICAg IHwgIDEgKwogZ2NjL2NvbmZpZy9pMzg2L2kzODYuYyAgICAgICAgICAgICAg ICAgICAgfCAgOCArKysrKysrKwogZ2NjL2RvYy9leHRlbmQudGV4aSAgICAg ICAgICAgICAgICAgICAgICAgfCAgNyArKysrKysrCiBnY2MvZG9jL3RtLnRl eGkgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1ICsrKysrCiBnY2Mv ZG9jL3RtLnRleGkuaW4gICAgICAgICAgICAgICAgICAgICAgICB8ICAyICsr CiBnY2MvZnVuY3Rpb24uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAzICsrKwogZ2NjL2lwYS1wdXJlLWNvbnN0LmMgICAgICAgICAgICAgICAg ICAgICAgfCAgMSArCiBnY2MvdGFyZ2V0LmRlZiAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICA3ICsrKysrKysKIGdjYy90YXJnaG9va3MuYyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDkgKysrKysrKysrCiBnY2MvdGFy Z2hvb2tzLmggICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzICsrKwog Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI2Njk2MC0xLmMgfCAz MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBnY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9wcjY2OTYwLTIuYyB8IDMzICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIGdjYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L3ByNjY5NjAtMy5jIHwgMTcgKysrKysrKysrKysrKysrKwog Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI2Njk2MC00LmMgfCAy MSArKysrKysrKysrKysrKysrKysrKwogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvcHI2Njk2MC01LmMgfCAyMSArKysrKysrKysrKysrKysrKysr KwogMTcgZmlsZXMgY2hhbmdlZCwgMTgzIGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9w cjY2OTYwLTEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L3ByNjY5NjAtMi5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI2Njk2MC0zLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjY2OTYwLTQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByNjY5NjAtNS5jCgpkaWZmIC0tZ2l0 IGEvZ2NjL2J1aWx0aW4tdHlwZXMuZGVmIGIvZ2NjL2J1aWx0aW4tdHlwZXMu ZGVmCmluZGV4IDBlMzQ1MzEuLjJiNmI1YWIgMTAwNjQ0Ci0tLSBhL2djYy9i dWlsdGluLXR5cGVzLmRlZgorKysgYi9nY2MvYnVpbHRpbi10eXBlcy5kZWYK QEAgLTE3Nyw2ICsxNzcsNyBAQCBERUZfRlVOQ1RJT05fVFlQRV8xIChCVF9G Tl9DT01QTEVYX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwKIAkJICAgICBCVF9D T01QTEVYX0xPTkdET1VCTEUsIEJUX0xPTkdET1VCTEUpCiBERUZfRlVOQ1RJ T05fVFlQRV8xIChCVF9GTl9QVFJfVUlOVCwgQlRfUFRSLCBCVF9VSU5UKQog REVGX0ZVTkNUSU9OX1RZUEVfMSAoQlRfRk5fUFRSX1NJWkUsIEJUX1BUUiwg QlRfU0laRSkKK0RFRl9GVU5DVElPTl9UWVBFXzEgKEJUX0ZOX1BUUl9WT0lE LCBCVF9QVFIsIEJUX1ZPSUQpCiBERUZfRlVOQ1RJT05fVFlQRV8xIChCVF9G Tl9JTlRfSU5ULCBCVF9JTlQsIEJUX0lOVCkKIERFRl9GVU5DVElPTl9UWVBF XzEgKEJUX0ZOX0lOVF9VSU5ULCBCVF9JTlQsIEJUX1VJTlQpCiBERUZfRlVO Q1RJT05fVFlQRV8xIChCVF9GTl9JTlRfTE9ORywgQlRfSU5ULCBCVF9MT05H KQpkaWZmIC0tZ2l0IGEvZ2NjL2J1aWx0aW5zLmMgYi9nY2MvYnVpbHRpbnMu YwppbmRleCBlYjdiN2IyLi5iMjU3YmFmIDEwMDY0NAotLS0gYS9nY2MvYnVp bHRpbnMuYworKysgYi9nY2MvYnVpbHRpbnMuYwpAQCAtNjIxMCw2ICs2MjEw LDE2IEBAIGV4cGFuZF9idWlsdGluICh0cmVlIGV4cCwgcnR4IHRhcmdldCwg cnR4IHN1YnRhcmdldCwgbWFjaGluZV9tb2RlIG1vZGUsCiAgICAgY2FzZSBC VUlMVF9JTl9DT05TVEFOVF9QOgogICAgICAgcmV0dXJuIGNvbnN0MF9ydHg7 CiAKKyAgICBjYXNlIEJVSUxUX0lOX1NUQUNLX1RPUDoKKyAgICAgIGlmICh0 YXJnZXRtLmNhbGxzLnN0YWNrX3RvcF9ydHgpCisJeworCSAgY2Z1bi0+c3Rh Y2tfdG9wX3Rha2VuID0gdHJ1ZTsKKwkgIHJldHVybiB0YXJnZXRtLmNhbGxz LnN0YWNrX3RvcF9ydHggKCk7CisJfQorICAgICAgZWxzZQorCXNvcnJ5ICgi JTxfX2J1aWx0aW5fc3RhY2tfdG9wJT4gbm90IHN1cHBvcnRlZCBvbiB0aGlz IHRhcmdldCIpOworICAgICAgYnJlYWs7CisKICAgICBjYXNlIEJVSUxUX0lO X0ZSQU1FX0FERFJFU1M6CiAgICAgY2FzZSBCVUlMVF9JTl9SRVRVUk5fQURE UkVTUzoKICAgICAgIHJldHVybiBleHBhbmRfYnVpbHRpbl9mcmFtZV9hZGRy ZXNzIChmbmRlY2wsIGV4cCk7CkBAIC0xMjM5OSw2ICsxMjQwOSw3IEBAIGlz X3NpbXBsZV9idWlsdGluICh0cmVlIGRlY2wpCiAgICAgICBjYXNlIEJVSUxU X0lOX1JFVFVSTjoKICAgICAgIGNhc2UgQlVJTFRfSU5fQUdHUkVHQVRFX0lO Q09NSU5HX0FERFJFU1M6CiAgICAgICBjYXNlIEJVSUxUX0lOX0ZSQU1FX0FE RFJFU1M6CisgICAgICBjYXNlIEJVSUxUX0lOX1NUQUNLX1RPUDoKICAgICAg IGNhc2UgQlVJTFRfSU5fVkFfRU5EOgogICAgICAgY2FzZSBCVUlMVF9JTl9T VEFDS19TQVZFOgogICAgICAgY2FzZSBCVUlMVF9JTl9TVEFDS19SRVNUT1JF OgpkaWZmIC0tZ2l0IGEvZ2NjL2J1aWx0aW5zLmRlZiBiL2djYy9idWlsdGlu cy5kZWYKaW5kZXggODBlNGE5Yy4uNjJmMDUyMyAxMDA2NDQKLS0tIGEvZ2Nj L2J1aWx0aW5zLmRlZgorKysgYi9nY2MvYnVpbHRpbnMuZGVmCkBAIC03Nzgs NiArNzc4LDcgQEAgREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5f RkZTTCwgImZmc2wiLCBCVF9GTl9JTlRfTE9ORywgQVRUUl9DT05TVF9OT1RI Uk8KIERFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0ZGU0xMLCAi ZmZzbGwiLCBCVF9GTl9JTlRfTE9OR0xPTkcsIEFUVFJfQ09OU1RfTk9USFJP V19MRUFGX0xJU1QpCiBERUZfRVhUX0xJQl9CVUlMVElOICAgICAgICAoQlVJ TFRfSU5fRk9SSywgImZvcmsiLCBCVF9GTl9QSUQsIEFUVFJfTk9USFJPV19M SVNUKQogREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRlJBTUVf QUREUkVTUywgImZyYW1lX2FkZHJlc3MiLCBCVF9GTl9QVFJfVUlOVCwgQVRU Ul9OVUxMKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU1RB Q0tfVE9QLCAic3RhY2tfdG9wIiwgQlRfRk5fUFRSX1ZPSUQsIEFUVFJfTlVM TCkKIC8qIFt0cmFucy1tZW1dOiBBZGp1c3QgQlVJTFRfSU5fVE1fRlJFRSBp ZiBCVUlMVF9JTl9GUkVFIGlzIGNoYW5nZWQuICAqLwogREVGX0xJQl9CVUlM VElOICAgICAgICAoQlVJTFRfSU5fRlJFRSwgImZyZWUiLCBCVF9GTl9WT0lE X1BUUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKIERFRl9HQ0NfQlVJTFRJ TiAgICAgICAgKEJVSUxUX0lOX0ZST0JfUkVUVVJOX0FERFIsICJmcm9iX3Jl dHVybl9hZGRyIiwgQlRfRk5fUFRSX1BUUiwgQVRUUl9OVUxMKQpkaWZmIC0t Z2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYuYyBiL2djYy9jb25maWcvaTM4 Ni9pMzg2LmMKaW5kZXggMWIwY2FkZS4uMGM3NzM2MyAxMDA2NDQKLS0tIGEv Z2NjL2NvbmZpZy9pMzg2L2kzODYuYworKysgYi9nY2MvY29uZmlnL2kzODYv aTM4Ni5jCkBAIC0xMTU3NSw2ICsxMTU3NSwxMiBAQCBpeDg2X2V4cGFuZF9w cm9sb2d1ZSAodm9pZCkKICAgICB7CiAgICAgICBpbnQgYWxpZ25fYnl0ZXMg PSBjcnRsLT5zdGFja19hbGlnbm1lbnRfbmVlZGVkIC8gQklUU19QRVJfVU5J VDsKIAorICAgICAgLyogQ2FuJ3QgdXNlIERSQVAgaWYgdGhlIHN0YWNrIGFk ZHJlc3MgaGFzIGJlZW4gdGFrZW4uICAqLworICAgICAgaWYgKGNmdW4tPnN0 YWNrX3RvcF90YWtlbikKKwlzb3JyeSAoIiU8X19idWlsdGluX3N0YWNrX3Rv cCU+IG5vdCBzdXBwb3J0ZWQgd2l0aCBzdGFjayIKKwkgICAgICAgIiByZWFs aWdubWVudC4gIFRoaXMgbWF5IGJlIHdvcmtlZCBhcm91bmQgYnkgYWRkaW5n IgorCSAgICAgICAiIC1tYWNjdW11bGF0ZS1vdXRnb2luZy1hcmdzLiIpOwor CiAgICAgICAvKiBPbmx5IG5lZWQgdG8gcHVzaCBwYXJhbWV0ZXIgcG9pbnRl ciByZWcgaWYgaXQgaXMgY2FsbGVyIHNhdmVkLiAgKi8KICAgICAgIGlmICgh Y2FsbF91c2VkX3JlZ3NbUkVHTk8gKGNydGwtPmRyYXBfcmVnKV0pCiAJewpA QCAtNTI1MTMsNiArNTI1MTksOCBAQCBpeDg2X29wZXJhbmRzX29rX2Zvcl9t b3ZlX211bHRpcGxlIChydHggKm9wZXJhbmRzLCBib29sIGxvYWQsCiAjZGVm aW5lIFRBUkdFVF9VUERBVEVfU1RBQ0tfQk9VTkRBUlkgaXg4Nl91cGRhdGVf c3RhY2tfYm91bmRhcnkKICN1bmRlZiBUQVJHRVRfR0VUX0RSQVBfUlRYCiAj ZGVmaW5lIFRBUkdFVF9HRVRfRFJBUF9SVFggaXg4Nl9nZXRfZHJhcF9ydHgK KyN1bmRlZiBUQVJHRVRfU1RBQ0tfVE9QX1JUWAorI2RlZmluZSBUQVJHRVRf U1RBQ0tfVE9QX1JUWCBkZWZhdWx0X3N0YWNrX3RvcF9ydHgKICN1bmRlZiBU QVJHRVRfU1RSSUNUX0FSR1VNRU5UX05BTUlORwogI2RlZmluZSBUQVJHRVRf U1RSSUNUX0FSR1VNRU5UX05BTUlORyBob29rX2Jvb2xfQ1VNVUxBVElWRV9B UkdTX3RydWUKICN1bmRlZiBUQVJHRVRfU1RBVElDX0NIQUlOCmRpZmYgLS1n aXQgYS9nY2MvZG9jL2V4dGVuZC50ZXhpIGIvZ2NjL2RvYy9leHRlbmQudGV4 aQppbmRleCAyYTQ3OTQzLi44MzRiN2Y0IDEwMDY0NAotLS0gYS9nY2MvZG9j L2V4dGVuZC50ZXhpCisrKyBiL2djYy9kb2MvZXh0ZW5kLnRleGkKQEAgLTg4 NDEsNiArODg0MSwxMyBAQCBvcHRpb24gaXMgaW4gZWZmZWN0LiAgU3VjaCBj YWxscyBzaG91bGQgb25seSBiZSBtYWRlIGluIGRlYnVnZ2luZwogc2l0dWF0 aW9ucy4KIEBlbmQgZGVmdHlwZWZuCiAKK0BkZWZ0eXBlZm4ge0J1aWx0LWlu IEZ1bmN0aW9ufSB7dm9pZCAqfSBfX2J1aWx0aW5fc3RhY2tfdG9wICh2b2lk KQorVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGNhbGxpbmcgQGNvZGV7 X19idWlsdGluX2ZyYW1lX2FkZHJlc3N9Cit3aXRoIGEgdmFsdWUgb2YgQGNv ZGV7MH0sIGJ1dCBpdCByZXR1cm5zIHRoZSBzdGFjayBhZGRyZXNzIHdoZW4g dGhlCitmdW5jdGlvbiBpcyBjYWxsZWQuICBVbmxpa2UgQGNvZGV7X19idWls dGluX2ZyYW1lX2FkZHJlc3N9LCB0aGUgZnJhbWUKK3BvaW50ZXIgcmVnaXN0 ZXIgaXNuJ3QgcmVxdWlyZWQuCitAZW5kIGRlZnR5cGVmbgorCiBAbm9kZSBW ZWN0b3IgRXh0ZW5zaW9ucwogQHNlY3Rpb24gVXNpbmcgVmVjdG9yIEluc3Ry dWN0aW9ucyB0aHJvdWdoIEJ1aWx0LWluIEZ1bmN0aW9ucwogCmRpZmYgLS1n aXQgYS9nY2MvZG9jL3RtLnRleGkgYi9nY2MvZG9jL3RtLnRleGkKaW5kZXgg Zjk1NjQ2Yy4uZTJjZDQ4MCAxMDA2NDQKLS0tIGEvZ2NjL2RvYy90bS50ZXhp CisrKyBiL2djYy9kb2MvdG0udGV4aQpAQCAtMTE0ODMsNiArMTE0ODMsMTEg QEAgYXJndW1lbnQgbGlzdCBkdWUgdG8gc3RhY2sgcmVhbGlnbm1lbnQuICBS ZXR1cm4gQGNvZGV7TlVMTH0gaWYgbm8gRFJBUAogaXMgbmVlZGVkLgogQGVu ZCBkZWZ0eXBlZm4KIAorQGRlZnR5cGVmbiB7VGFyZ2V0IEhvb2t9IHJ0eCBU QVJHRVRfU1RBQ0tfVE9QX1JUWCAodm9pZCkKK1RoaXMgaG9vayBzaG91bGQg cmV0dXJuIGFuIHJ0eCBmb3IgdGhlIHN0YWNrIGFkZHJlc3Mgd2hlbiB0aGUg ZnVuY3Rpb24KK2lzIGNhbGxlZC4KK0BlbmQgZGVmdHlwZWZuCisKIEBkZWZ0 eXBlZm4ge1RhcmdldCBIb29rfSBib29sIFRBUkdFVF9BTExPQ0FURV9TVEFD S19TTE9UU19GT1JfQVJHUyAodm9pZCkKIFdoZW4gb3B0aW1pemF0aW9uIGlz IGRpc2FibGVkLCB0aGlzIGhvb2sgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90 CiBhcmd1bWVudHMgc2hvdWxkIGJlIGFsbG9jYXRlZCB0byBzdGFjayBzbG90 cy4gIE5vcm1hbGx5LCBHQ0MgYWxsb2NhdGVzCmRpZmYgLS1naXQgYS9nY2Mv ZG9jL3RtLnRleGkuaW4gYi9nY2MvZG9jL3RtLnRleGkuaW4KaW5kZXggMjM4 M2ZiOS4uOTE2NzA2OSAxMDA2NDQKLS0tIGEvZ2NjL2RvYy90bS50ZXhpLmlu CisrKyBiL2djYy9kb2MvdG0udGV4aS5pbgpAQCAtODE4MSw2ICs4MTgxLDgg QEAgYW5kIHRoZSBhc3NvY2lhdGVkIGRlZmluaXRpb25zIG9mIHRob3NlIGZ1 bmN0aW9ucy4KIAogQGhvb2sgVEFSR0VUX0dFVF9EUkFQX1JUWAogCitAaG9v ayBUQVJHRVRfU1RBQ0tfVE9QX1JUWAorCiBAaG9vayBUQVJHRVRfQUxMT0NB VEVfU1RBQ0tfU0xPVFNfRk9SX0FSR1MKIAogQGhvb2sgVEFSR0VUX0NPTlNU X0FOQ0hPUgpkaWZmIC0tZ2l0IGEvZ2NjL2Z1bmN0aW9uLmggYi9nY2MvZnVu Y3Rpb24uaAppbmRleCBlOTJjMTdjLi5kZDFjMzhhIDEwMDY0NAotLS0gYS9n Y2MvZnVuY3Rpb24uaAorKysgYi9nY2MvZnVuY3Rpb24uaApAQCAtMzc4LDYg KzM3OCw5IEBAIHN0cnVjdCBHVFkoKCkpIGZ1bmN0aW9uIHsKIAogICAvKiBT ZXQgd2hlbiB0aGUgdGFpbCBjYWxsIGhhcyBiZWVuIGlkZW50aWZpZWQuICAq LwogICB1bnNpZ25lZCBpbnQgdGFpbF9jYWxsX21hcmtlZCA6IDE7CisKKyAg LyogU2V0IHdoZW4gdGhlIGFkZHJlc3Mgb2YgdGhlIHN0YWNrIHRvcCBoYXMg YmVlbiB0YWtlbi4gICovCisgIHVuc2lnbmVkIGludCBzdGFja190b3BfdGFr ZW4gOiAxOwogfTsKIAogLyogQWRkIHRoZSBkZWNsIEQgdG8gdGhlIGxvY2Fs X2RlY2xzIGxpc3Qgb2YgRlVOLiAgKi8KZGlmZiAtLWdpdCBhL2djYy9pcGEt cHVyZS1jb25zdC5jIGIvZ2NjL2lwYS1wdXJlLWNvbnN0LmMKaW5kZXggOGZk OGMzNi4uMjQwNTA4MiAxMDA2NDQKLS0tIGEvZ2NjL2lwYS1wdXJlLWNvbnN0 LmMKKysrIGIvZ2NjL2lwYS1wdXJlLWNvbnN0LmMKQEAgLTQ4MCw2ICs0ODAs NyBAQCBzcGVjaWFsX2J1aWx0aW5fc3RhdGUgKGVudW0gcHVyZV9jb25zdF9z dGF0ZV9lICpzdGF0ZSwgYm9vbCAqbG9vcGluZywKIAljYXNlIEJVSUxUX0lO X0NYQV9FTkRfQ0xFQU5VUDoKIAljYXNlIEJVSUxUX0lOX0VIX0NPUFlfVkFM VUVTOgogCWNhc2UgQlVJTFRfSU5fRlJBTUVfQUREUkVTUzoKKwljYXNlIEJV SUxUX0lOX1NUQUNLX1RPUDoKIAljYXNlIEJVSUxUX0lOX0FQUExZOgogCWNh c2UgQlVJTFRfSU5fQVBQTFlfQVJHUzoKIAkgICpsb29waW5nID0gZmFsc2U7 CmRpZmYgLS1naXQgYS9nY2MvdGFyZ2V0LmRlZiBiL2djYy90YXJnZXQuZGVm CmluZGV4IDRlZGMyMDkuLjdhMzBmMzkgMTAwNjQ0Ci0tLSBhL2djYy90YXJn ZXQuZGVmCisrKyBiL2djYy90YXJnZXQuZGVmCkBAIC00NTI1LDYgKzQ1MjUs MTMgQEAgYXJndW1lbnQgbGlzdCBkdWUgdG8gc3RhY2sgcmVhbGlnbm1lbnQu ICBSZXR1cm4gQGNvZGV7TlVMTH0gaWYgbm8gRFJBUFxuXAogaXMgbmVlZGVk LiIsCiAgcnR4LCAodm9pZCksIE5VTEwpCiAKKy8qIEdldCB0aGUgc3RhY2sg YWRkcmVzcyB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuICAqLworREVG SE9PSworKHN0YWNrX3RvcF9ydHgsCisgIlRoaXMgaG9vayBzaG91bGQgcmV0 dXJuIGFuIHJ0eCBmb3IgdGhlIHN0YWNrIGFkZHJlc3Mgd2hlbiB0aGUgZnVu Y3Rpb25cblwKK2lzIGNhbGxlZC4iLAorIHJ0eCwgKHZvaWQpLCBOVUxMKQor CiAvKiBSZXR1cm4gdHJ1ZSBpZiBhbGwgZnVuY3Rpb24gcGFyYW1ldGVycyBz aG91bGQgYmUgc3BpbGxlZCB0byB0aGUKICAgIHN0YWNrLiAgKi8KIERFRkhP T0sKZGlmZiAtLWdpdCBhL2djYy90YXJnaG9va3MuYyBiL2djYy90YXJnaG9v a3MuYwppbmRleCAzZWNhNDdlLi5mMTg4MjcyIDEwMDY0NAotLS0gYS9nY2Mv dGFyZ2hvb2tzLmMKKysrIGIvZ2NjL3Rhcmdob29rcy5jCkBAIC0xOTI2LDQg KzE5MjYsMTMgQEAgY2FuX3VzZV9kb2xvb3BfaWZfaW5uZXJtb3N0IChjb25z dCB3aWRlc3RfaW50ICYsIGNvbnN0IHdpZGVzdF9pbnQgJiwKICAgcmV0dXJu IGxvb3BfZGVwdGggPT0gMTsKIH0KIAorLyogR2V0IHRoZSBzdGFjayBhZGRy ZXNzIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gIEFmdGVyIHRoZQor ICAgcHJvbG9ndWUsIHN0YWNrIHRvcCBpcyBhdCAtV09SRChBUCkgaW4gdGhl IGN1cnJlbnQgZnJhbWUuICAqLworCitydHgKK2RlZmF1bHRfc3RhY2tfdG9w X3J0eCAodm9pZCkKK3sKKyAgcmV0dXJuIHBsdXNfY29uc3RhbnQgKFBtb2Rl LCBhcmdfcG9pbnRlcl9ydHgsIC1VTklUU19QRVJfV09SRCk7Cit9CisKICNp bmNsdWRlICJndC10YXJnaG9va3MuaCIKZGlmZiAtLWdpdCBhL2djYy90YXJn aG9va3MuaCBiL2djYy90YXJnaG9va3MuaAppbmRleCA1YWU5OTFkLi4wOTRh NTg5IDEwMDY0NAotLS0gYS9nY2MvdGFyZ2hvb2tzLmgKKysrIGIvZ2NjL3Rh cmdob29rcy5oCkBAIC0yNDAsNCArMjQwLDcgQEAgZXh0ZXJuIHZvaWQgZGVm YXVsdF9zZXR1cF9pbmNvbWluZ192YXJhcmdfYm91bmRzIChjdW11bGF0aXZl X2FyZ3NfdCBjYSBBVFRSSUJVVEUKIAkJCQkJCSAgdHJlZSB0eXBlIEFUVFJJ QlVURV9VTlVTRUQsCiAJCQkJCQkgIGludCAqcHJldGVuZF9hcmdfc2l6ZSBB VFRSSUJVVEVfVU5VU0VELAogCQkJCQkJICBpbnQgc2Vjb25kX3RpbWUgQVRU UklCVVRFX1VOVVNFRCk7CisKK2V4dGVybiBydHggZGVmYXVsdF9zdGFja190 b3BfcnR4ICh2b2lkKTsKKwogI2VuZGlmIC8qIEdDQ19UQVJHSE9PS1NfSCAq LwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv cHI2Njk2MC0xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9w cjY2OTYwLTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li40NzdkOTBkCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvcHI2Njk2MC0xLmMKQEAgLTAsMCArMSwzMyBAQAor LyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0ICotKi1saW51eCogfSB9ICov CisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciIg eyB0YXJnZXQgeyBscDY0IH0gfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1P MiAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFkZHJlc3MtbW9kZT1zaG9ydCIg eyB0YXJnZXQgeyB4MzIgfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8y IC1mb21pdC1mcmFtZS1wb2ludGVyIC1taWFtY3UgLWZuby1waWMiIHsgdGFy Z2V0IHsgaWEzMiB9IH0gfSAqLworCitleHRlcm4gY2hhciAqKmVudmlyb247 CitleHRlcm4gdm9pZCBleGl0IChpbnQgc3RhdHVzKTsKK2V4dGVybiBpbnQg bWFpbiAobG9uZyBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqKmVudnApOwor Cit2b2lkCitfc3RhcnQgKHZvaWQpCit7CisgIHZvaWQgKmFyZ2NfcCA9IF9f YnVpbHRpbl9zdGFja190b3AgKCk7CisgIGNoYXIgKiphcmd2ID0gKGNoYXIg KiopIChhcmdjX3AgKyBzaXplb2YgKHZvaWQgKikpOworICBsb25nIGFyZ2Mg PSAqKGxvbmcgKikgYXJnY19wOworICBpbnQgc3RhdHVzOworCisgIGVudmly b24gPSBhcmd2ICsgYXJnYyArIDE7CisKKyAgc3RhdHVzID0gbWFpbiAoYXJn YywgYXJndiwgZW52aXJvbik7CisKKyAgZXhpdCAoc3RhdHVzKTsKK30KKwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJtb3ZxXFsgXHRcXThc XCglcnNwXFwpLCAlcmRpIiB7IHRhcmdldCBscDY0IH0gfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImxlYXFcWyBcdFxdMTZcXCgl cnNwXFwpLCAlcnNpIiB7IHRhcmdldCBscDY0IH0gfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImxlYXFcWyBcdFxdMjRcXCglcnNw LCVyZGksOFxcKSwgJXJkeCIgeyB0YXJnZXQgbHA2NCB9IH0gfSAqLworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJtb3ZsXFsgXHRcXThcXCgl ZXNwXFwpLCAlZWRpIiB7IHRhcmdldCB4MzIgfSB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlciAibGVhbFxbIFx0XF0xMlxcKCVyc3Bc XCksICVlc2kiIHsgdGFyZ2V0IHgzMiB9IH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyICJsZWFsXFsgXHRcXTRcXCglcnNpLCVyZGks NFxcKSwgJWVkeCIgeyB0YXJnZXQgeDMyIH0gfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXIgIm1vdmxcWyBcdFxdXFwoJWVzcFxcKSwg JWVheCIgeyB0YXJnZXQgaWEzMiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICJsZWFsXFsgXHRcXTRcXCglZXNwXFwpLCAlZWR4 IiB7IHRhcmdldCBpYTMyIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXIgImxlYWxcWyBcdFxdOFxcKCVlc3AsJWVheCw0XFwpLCAl ZWN4IiB7IHRhcmdldCBpYTMyIH0gfSB9ICovCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjY2OTYwLTIuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByNjY5NjAtMi5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZGJkZTIKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjY2 OTYwLTIuYwpAQCAtMCwwICsxLDMzIEBACisvKiB7IGRnLWRvIGNvbXBpbGUg eyB0YXJnZXQgKi0qLWxpbnV4KiB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAi LU8yIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIiB7IHRhcmdldCB7IGxwNjQg fSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mbm8tb21pdC1mcmFt ZS1wb2ludGVyIC1tYWRkcmVzcy1tb2RlPXNob3J0IiB7IHRhcmdldCB7IHgz MiB9IH0gfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLWZuby1vbWl0LWZy YW1lLXBvaW50ZXIgLW1pYW1jdSIgeyB0YXJnZXQgeyBpYTMyIH0gfSB9ICov CisKK2V4dGVybiBjaGFyICoqZW52aXJvbjsKK2V4dGVybiB2b2lkIGV4aXQg KGludCBzdGF0dXMpOworZXh0ZXJuIGludCBtYWluIChsb25nIGFyZ2MsIGNo YXIgKiphcmd2LCBjaGFyICoqZW52cCk7CisKK3ZvaWQKK19zdGFydCAodm9p ZCkKK3sKKyAgdm9pZCAqYXJnY19wID0gX19idWlsdGluX3N0YWNrX3RvcCAo KTsKKyAgY2hhciAqKmFyZ3YgPSAoY2hhciAqKikgKGFyZ2NfcCArIHNpemVv ZiAodm9pZCAqKSk7CisgIGxvbmcgYXJnYyA9ICoobG9uZyAqKSBhcmdjX3A7 CisgIGludCBzdGF0dXM7CisKKyAgZW52aXJvbiA9IGFyZ3YgKyBhcmdjICsg MTsKKworICBzdGF0dXMgPSBtYWluIChhcmdjLCBhcmd2LCBlbnZpcm9uKTsK KworICBleGl0IChzdGF0dXMpOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXIgIm1vdnFcWyBcdFxdOFxcKCVyYnBcXCksICVyZGkiIHsg dGFyZ2V0IGxwNjQgfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlciAibGVhcVxbIFx0XF0xNlxcKCVyYnBcXCksICVyc2kiIHsgdGFy Z2V0IGxwNjQgfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt YmxlciAibGVhcVxbIFx0XF0yNFxcKCVyYnAsJXJkaSw4XFwpLCAlcmR4IiB7 IHRhcmdldCBscDY0IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXIgIm1vdmxcWyBcdFxdOFxcKCVlYnBcXCksICVlZGkiIHsgdGFy Z2V0IHgzMiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyICJsZWFsXFsgXHRcXTEyXFwoJXJicFxcKSwgJWVzaSIgeyB0YXJnZXQg eDMyIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIg ImxlYWxcWyBcdFxdNFxcKCVyc2ksJXJkaSw0XFwpLCAlZWR4IiB7IHRhcmdl dCB4MzIgfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ciAibW92bFxbIFx0XF00XFwoJWVicFxcKSwgJWVheCIgeyB0YXJnZXQgaWEz MiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJs ZWFsXFsgXHRcXThcXCglZWJwXFwpLCAlZWR4IiB7IHRhcmdldCBpYTMyIH0g fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImxlYWxc WyBcdFxdMTJcXCglZWJwLCVlYXgsNFxcKSwgJWVjeCIgeyB0YXJnZXQgaWEz MiB9IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvcHI2Njk2MC0zLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9wcjY2OTYwLTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi40OGNmMjVlCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI2Njk2MC0zLmMKQEAgLTAsMCAr MSwxNyBAQAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0ICotKi1saW51 eCogfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbW5vLWFjY3VtdWxh dGUtb3V0Z29pbmctYXJncyIgeyB0YXJnZXQgeyBscDY0IH0gfSB9ICovCisv KiB7IGRnLW9wdGlvbnMgIi1PMiAtbW5vLWFjY3VtdWxhdGUtb3V0Z29pbmct YXJncyAtbWFkZHJlc3MtbW9kZT1zaG9ydCIgeyB0YXJnZXQgeyB4MzIgfSB9 IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tbm8tYWNjdW11bGF0ZS1v dXRnb2luZy1hcmdzIC1taWFtY3UiIHsgdGFyZ2V0IHsgaWEzMiB9IH0gfSAq LworCitleHRlcm4gdm9pZCBhYm9ydCAodm9pZCk7CitleHRlcm4gaW50IGNo ZWNrX2ludCAoaW50ICppLCBpbnQgYWxpZ24pOwordHlwZWRlZiBpbnQgYWxp Z25lZCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDY0KSkpOworCit2b2lkICoK K2ZvbyAodm9pZCkKK3sKKyAgYWxpZ25lZCBqOworICBpZiAoY2hlY2tfaW50 ICgmaiwgX19hbGlnbm9mX18oaikpICE9IGopCisgICAgYWJvcnQgKCk7Cisg IHJldHVybiBfX2J1aWx0aW5fc3RhY2tfdG9wICgpOworfSAvKiB7IGRnLW1l c3NhZ2UgInNvcnJ5LCB1bmltcGxlbWVudGVkOiAuX19idWlsdGluX3N0YWNr X3RvcC4gbm90IHN1cHBvcnRlZCIgfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI2Njk2MC00LmMgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjY2OTYwLTQuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGMwYjI2Ci0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI2Njk2 MC00LmMKQEAgLTAsMCArMSwyMSBAQAorLyogeyBkZy1kbyBjb21waWxlIHsg dGFyZ2V0ICotKi1saW51eCogfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1P MiAtbWFjY3VtdWxhdGUtb3V0Z29pbmctYXJncyIgeyB0YXJnZXQgeyBscDY0 IH0gfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWFjY3VtdWxhdGUt b3V0Z29pbmctYXJncyAtbWFkZHJlc3MtbW9kZT1zaG9ydCIgeyB0YXJnZXQg eyB4MzIgfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYWNjdW11 bGF0ZS1vdXRnb2luZy1hcmdzIC1taWFtY3UiIHsgdGFyZ2V0IHsgaWEzMiB9 IH0gfSAqLworCitleHRlcm4gdm9pZCBhYm9ydCAodm9pZCk7CitleHRlcm4g aW50IGNoZWNrX2ludCAoaW50ICppLCBpbnQgYWxpZ24pOwordHlwZWRlZiBp bnQgYWxpZ25lZCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDY0KSkpOworCit2 b2lkICoKK2ZvbyAodm9pZCkKK3sKKyAgYWxpZ25lZCBqOworICBpZiAoY2hl Y2tfaW50ICgmaiwgX19hbGlnbm9mX18oaikpICE9IGopCisgICAgYWJvcnQg KCk7CisgIHJldHVybiBfX2J1aWx0aW5fc3RhY2tfdG9wICgpOworfQorCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImxlYXFcWyBcdFxdOFxc KCVyYnBcXCksICVyYXgiIHsgdGFyZ2V0IGxwNjQgfSB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAibGVhbFxbIFx0XF04XFwoJXJi cFxcKSwgJWVheCIgeyB0YXJnZXQgeDMyIH0gfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXIgImxlYWxcWyBcdFxdNFxcKCVlYnBcXCks ICVlYXgiIHsgdGFyZ2V0IGlhMzIgfSB9IH0gKi8KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByNjY5NjAtNS5jIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI2Njk2MC01LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0OTQzNwotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3By NjY5NjAtNS5jCkBAIC0wLDAgKzEsMjEgQEAKKy8qIHsgZGctZG8gbGluayB9 ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIiB9ICovCisKK2V4dGVybiB2b2lk IGxpbmtfZXJyb3IgKHZvaWQpOworCitfX2F0dHJpYnV0ZV9fICgobm9pbmxp bmUsIG5vY2xvbmUpKQordm9pZAorZm9vICh2b2lkKQoreworICB2b2lkICoq cCA9IF9fYnVpbHRpbl9zdGFja190b3AgKCk7CisgIHZvaWQgKnJhID0gX19i dWlsdGluX3JldHVybl9hZGRyZXNzICgwKTsKKyAgaWYgKCpwICE9IHJhKQor ICAgIGxpbmtfZXJyb3IgKCk7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sK KyAgZm9vICgpOworICByZXR1cm4gMDsKK30KLS0gCjIuNC4zCgo= --001a113df2a644e16b051c7b75fe--