From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19865 invoked by alias); 24 Jul 2009 23:39:55 -0000 Received: (qmail 19846 invoked by uid 22791); 24 Jul 2009 23:39:51 -0000 X-SWARE-Spam-Status: No, hits=3.1 required=5.0 tests=AWL,BAYES_50,HK_OBFDOM,J_CHICKENPOX_13,KAM_STOCKTIP,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-fx0-f210.google.com (HELO mail-fx0-f210.google.com) (209.85.220.210) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 24 Jul 2009 23:39:42 +0000 Received: by fxm6 with SMTP id 6so32888fxm.24 for ; Fri, 24 Jul 2009 16:39:39 -0700 (PDT) MIME-Version: 1.0 Received: by 10.239.161.74 with SMTP id g10mr414955hbd.92.1248478779120; Fri, 24 Jul 2009 16:39:39 -0700 (PDT) In-Reply-To: References: <9a9942200907221615o570e749fh5cb186c1600f159c@mail.gmail.com> <9a9942200907240946q1546646ft6e9112f263bcefdf@mail.gmail.com> From: Reid Kleckner Date: Sat, 25 Jul 2009 00:23:00 -0000 Message-ID: <9a9942200907241639o4e4b1d4ema22bac7bb6db9e35@mail.gmail.com> Subject: Re: [RFA] Add interface for registering JITed code To: Tom Tromey Cc: gdb-patches@sourceware.org, unladen-swallow@googlegroups.com Content-Type: multipart/mixed; boundary=001485f33676239d24046f7c1e99 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-07/txt/msg00614.txt.bz2 --001485f33676239d24046f7c1e99 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 5858 > Reid> Where should this go? It doesn't really fit under any of the > Reid> top-level topics, so far as I can tell. I only have about a page to > Reid> write about it. > > Yeah, I don't really have a suggestion for this. I'll figure it out on Monday, but for now, here's some code changes. > Today I've also been wondering whether this works with core files. > Have you tried that? (I can't imagine why it wouldn't work. And I > don't think it is really a requirement; I'm just curious.)q I have absolutely no idea. :) > Also I was wondering about a multi-threaded JIT. I suppose it is > sufficient to mention in the documentation that the JIT is responsible > for making sure only a single thread can call __jit_debug_register_code > at a time. Yes, on the LLVM side I actually put a big fat global lock around the whole thing. I don't know if it's possible for there to be multiple symbols when there are dynamic libraries or who knows what, but only one thread should be touching those globals at a time. If you had multiple JITs that were unaware of each other in the binary trying to JIT, then it would break down, but that seems like an uncommon use case. If it comes to that, someone could write a library that they both link in which handles the synchronization. > Tom> Does the current code work ok if LLVM is a .so linked into the > Tom> application? I suspect, but do not know for sure, that in this > Tom> situation gdb will not see the JIT symbols when the inferior-created > Tom> hook is run. > > Reid> I don't know, since we statically link to LLVM. I'm not an expert in > Reid> how dynamic loaders work, so I don't know how to fix this. > > Ok. One way would be to stick some code in breakpoint_re_set and > update_breakpoints_after_exec. (I am not sure if this is the best way or > not.) Anyway the idea is that after a .so is noticed, re-do the searching, > in case the new .so is a JIT. So, the work would be done per-objfile, > and not once per inferior. > > Maybe this can be done via observers as well; I don't know. I put it in breakpoint_re_set and follow_exec after the solib stuff, so that should probably work, but I have no way of testing it. > Tom> There is also the somewhat more pathological case of a program with > Tom> multiple JITs linked in. I'm on the fence about whether this is really > Tom> needed. > > Reid> How would this work? Would they both have separate functions > Reid> __jit_debug_register at different addresses? > > Yeah. This would work if you had two JITs in a process, say loaded > dynamically, and the various __jit symbols had hidden visibility. I think if someone has that use case, then they can write a client side library that wraps the __jit symbols and make the two JITs call that. > Tom> You can store arbitrary module-specific data in an objfile using the > Tom> objfile_data API. This would be better because it is an already > Tom> supported way of dealing with the lifetime of the associated data. > > Reid> Ah, that's much better. Unfortunately because the data for other > Reid> objfiles is uninitialized (it's returned from calloc), there's no way > Reid> for me to check which objfiles contain JITed code. > > I don't think I understand. I thought you meant that you couldn't > detect whether or not the JIT datum was set on an objfile, but I see > that jit_inferior_exit_hook already does this the way that I would > expect. Oh right, I wrote that code, and then was worried that the objfile_data wouldn't be initialized to NULL. It's returned from calloc, which according to Jeff is initialized to 0's, so the code I wrote works. > Tom> Please update the comment here to explain that these values are exported > Tom> and used by the inferior, so they cannot be changed. > > Reid> Done. The same is true about the rest of the structs, the ordering of > Reid> the fields cannot be changed without updating the protocol version. > > My reading of the code is that it unpacks target memory field-by-field > into the host-side structure. So, it is ok for this to change. What > cannot change is the definition of these structs on the target. > > Am I misreading this? > > These structs, in their target form, should probably all go in the > manual as well. That's true, but they should probably stay closely coupled. I started off just copying over the whole struct with one target_read_mem call, and having them magically line up. However, that doesn't work if you're debugging a 32-bit process with a 64-bit debugger. > Reid> + /* Remember a mapping from entry_addr to objfile. */ > Reid> + set_objfile_data (objfile, jit_objfile_data, (void*) entry_addr); > > I don't think you need the cast here. There are a few of these. Actually, it is, because entry_addr is a CORE_ADDR. CORE_ADDR fits into a void* right? I'm just doing it to avoid mallocing a single CORE_ADDR. > Reid> + printf_unfiltered ("Unable to find JITed code entry at address: %p\n", > Reid> + (void*) entry_addr); > > A style nit, in GNU style the cast is written "(void *)". Done. > Reid> + nbfd = bfd_open_from_memory (templ, buffer, size, filename); > Reid> + if (nbfd == NULL) > Reid> + error (_("Unable to create BFD from local memory: %s"), > Reid> + bfd_errmsg (bfd_get_error ())); > Reid> + > Reid> + /* We set loadbase to 0 and assume that the symbol file we're loading has the > Reid> + absolute addresses set in the ELF. */ > Reid> + loadbase = 0; > Reid> + objfile = symbol_file_add_from_memory_common (nbfd, loadbase, 0); > > I suspect this needs a cleanup to free the BFD in case > symbol_file_add_from_memory_common errors. But I couldn't tell > immediately if that is possible (in gdb I tend to assume that anything > can throw...). This code has been reverted, and I use bfd_openr_iovec now. Reid --001485f33676239d24046f7c1e99 Content-Type: text/plain; charset=US-ASCII; name="jit-patch.txt" Content-Disposition: attachment; filename="jit-patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fxjjjhbr0 Content-length: 39703 MjAwOS0wNy0yNCAgUmVpZCBLbGVja25lciAgPHJlaWRAa2xlY2tuZXIubmV0 PgoKCUFkZCBpbnRlcmZhY2UgZm9yIEpJVCBjb2RlIGdlbmVyYXRpb24uCgkq IE5FV1M6IEFubm91bmNlIEpJVCBpbnRlcmZhY2UuCgkqIE1ha2VmaWxlLmlu IChTRklMRVMpOiBBZGQgaml0LmMuCgkoSEZJTEVTX05PX1NSQ0RJUik6IEFk ZCBqaXQuaC4KCShDT01NT05fT0JTKTogQWRkIGppdC5vLgoJKiBqaXQuYzog TmV3IGZpbGUuCgkqIGppdC5oOiBOZXcgZmlsZS4KCSogYnJlYWtwb2ludC5o OgoJKGVudW0gYnB0eXBlKTogQWRkIGJwX2ppdF9ldmVudCB0byBlbnVtLgoJ KiBicmVha3BvaW50LmM6CgkodXBkYXRlX2JyZWFrcG9pbnRzX2FmdGVyX2V4 ZWMpOiBEZWxldGUgaml0IGJyZWFrcG9pbnRzIGFmdGVyIGV4ZWMuCgkoYnBz dGF0X3doYXQpOiBVcGRhdGUgZXZlbnQgdGFibGUgZm9yIGJwX2ppdF9ldmVu dC4KCShwcmludF9pdF90eXBpY2FsKTogQWRkZWQgY2FzZSBmb3IgYnBfaml0 X2V2ZW50LgoJKHByaW50X29uZV9icmVha3BvaW50X2xvY2F0aW9uKTogQWRk ZWQgY2FzZSBmb3IgYnBfaml0X2V2ZW50LgoJKGFsbG9jYXRlX2JwX2xvY2F0 aW9uKTogQWRkZWQgY2FzZSBmb3IgYnBfaml0X2V2ZW50LgoJKG1lbnRpb24p OiBBZGRlZCBjYXNlIGZvciBicF9qaXRfZXZlbnQuCgkoZGVsZXRlX2NvbW1h bmQpOiBBZGRlZCBjYXNlIGZvciBicF9qaXRfZXZlbnQuCgkoYnJlYWtwb2lu dF9yZV9zZXRfb25lKTogQWRkZWQgY2FzZSBmb3IgYnBfaml0X2V2ZW50LgoJ KGJyZWFrcG9pbnRfcmVfc2V0KTogQWRkZWQgY2FsbCB0byBqaXRfaW5mZXJp b3JfY3JlYXRlZF9ob29rLgoJKGNyZWF0ZV9qaXRfZXZlbnRfYnJlYWtwb2lu dCk6IE5ldy4KCSogaW5mcnVuLmMgKGhhbmRsZV9pbmZlcmlvcl9ldmVudCk6 IEFkZCBoYW5kbGVyIGZvciBqaXQgZXZlbnQuCgkoZm9sbG93X2V4ZWMpOiBB ZGQgY2FsbCB0byBqaXRfaW5mZXJpb3JfY3JlYXRlZF9ob29rLgoJKiBvYmpm aWxlcy5jIChmcmVlX29iamZpbGUpOiBGaXhlZCBhIG1lbW9yeSBsZWFrLgoK SW5kZXg6IGdkYi9NYWtlZmlsZS5pbgo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL01ha2VmaWxlLmluLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjEwOTEKZGlmZiAtdSAtcCAtdSAtcjEuMTA5 MSBNYWtlZmlsZS5pbgotLS0gZ2RiL01ha2VmaWxlLmluCTMgSnVsIDIwMDkg MTI6MDY6MzUgLTAwMDAJMS4xMDkxCisrKyBnZGIvTWFrZWZpbGUuaW4JMjQg SnVsIDIwMDkgMjM6MzQ6MjcgLTAwMDAKQEAgLTY3Nyw3ICs2NzcsOCBAQCBT RklMRVMgPSBhZGEtZXhwLnkgYWRhLWxhbmcuYyBhZGEtdHlwZXByCiAJd3Jh cHBlci5jIFwKIAl4bWwtdGRlc2MuYyB4bWwtc3VwcG9ydC5jIFwKIAlpbmZl cmlvci5jIGdkYl91c2xlZXAuYyBcCi0JcmVjb3JkLmMKKwlyZWNvcmQuYyBc CisJaml0LmMKIAogTElOVEZJTEVTID0gJChTRklMRVMpICQoWVlGSUxFUykg JChDT05GSUdfU1JDUykgaW5pdC5jCiAKQEAgLTc0Niw3ICs3NDcsNyBAQCBj b25maWcvcnM2MDAwL25tLXJzNjAwMC5oIHRvcC5oIGJzZC1rdm0uCiBhbm5v dGF0ZS5oIHNpbS1yZWduby5oIGRpY3Rpb25hcnkuaCBkZnAuaCBtYWluLmgg ZnJhbWUtdW53aW5kLmgJXAogcmVtb3RlLWZpbGVpby5oIGkzODYtbGludXgt dGRlcC5oIHZheC10ZGVwLmggb2JqYy1sYW5nLmggXAogc2VudGluZWwtZnJh bWUuaCBiY2FjaGUuaCBzeW1maWxlLmggd2luZG93cy10ZGVwLmggbGludXgt dGRlcC5oIFwKLWdkYl91c2xlZXAuaAorZ2RiX3VzbGVlcC5oIGppdC5oCiAK ICMgSGVhZGVyIGZpbGVzIHRoYXQgYWxyZWFkeSBoYXZlIHNyY2RpciBpbiB0 aGVtLCBvciB3aGljaCBhcmUgaW4gb2JqZGlyLgogCkBAIC04MjgsNyArODI5 LDggQEAgQ09NTU9OX09CUyA9ICQoREVQRklMRVMpICQoQ09ORklHX09CUykg JAogCXNvbGliLm8gc29saWItbnVsbC5vIFwKIAlwcm9sb2d1ZS12YWx1ZS5v IG1lbW9yeS1tYXAubyB4bWwtc3VwcG9ydC5vIFwKIAl0YXJnZXQtZGVzY3Jp cHRpb25zLm8gdGFyZ2V0LW1lbW9yeS5vIHhtbC10ZGVzYy5vIHhtbC1idWls dGluLm8gXAotCWluZmVyaW9yLm8gb3NkYXRhLm8gZ2RiX3VzbGVlcC5vIHJl Y29yZC5vCisJaW5mZXJpb3IubyBvc2RhdGEubyBnZGJfdXNsZWVwLm8gcmVj b3JkLm8gXAorCWppdC5vCiAKIFRTT0JTID0gaW5mbG93Lm8KIApJbmRleDog Z2RiL05FV1MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2 cy9zcmMvc3JjL2dkYi9ORVdTLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMx OQpkaWZmIC11IC1wIC11IC1yMS4zMTkgTkVXUwotLS0gZ2RiL05FV1MJMjAg SnVsIDIwMDkgMTg6NTE6NDEgLTAwMDAJMS4zMTkKKysrIGdkYi9ORVdTCTI0 IEp1bCAyMDA5IDIzOjM0OjI3IC0wMDAwCkBAIC0zLDYgKzMsMTEgQEAKIAog KioqIENoYW5nZXMgc2luY2UgR0RCIDYuOAogCisqIEdEQiBub3cgaGFzIGFu IGludGVyZmFjZSBmb3IgSklUIGNvbXBpbGF0aW9uLiAgQXBwbGljYXRpb25z IHRoYXQKK2R5bmFtaWNhbGx5IGdlbmVyYXRlIGNvZGUgY2FuIGNyZWF0ZSBv YmplY3QgZmlsZXMgd2l0aCBkZWJ1ZyBpbmZvIGluCittZW1vcnkgYW5kIHJl Z2lzdGVyIHRoZW0gd2l0aCBHREIuICBUaGUgaW50ZXJmYWNlIGFsc28gc3Vw cG9ydHMKK2F0dGFjaGluZyB0byBhIHJ1bm5pbmcgcHJvY2Vzcy4KKwogKiBU cmFjZXBvaW50cyBtYXkgbm93IGJlIGNvbmRpdGlvbmFsLiAgVGhlIHN5bnRh eCBpcyBhcyBmb3IKIGJyZWFrcG9pbnRzOyBlaXRoZXIgYW4gImlmIiBjbGF1 c2UgYXBwZW5kZWQgdG8gdGhlICJ0cmFjZSIgY29tbWFuZCwKIG9yIHRoZSAi Y29uZGl0aW9uIiBjb21tYW5kIGlzIGF2YWlsYWJsZS4gIEdEQiBzZW5kcyB0 aGUgY29uZGl0aW9uIHRvCkluZGV4OiBnZGIvYnJlYWtwb2ludC5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIv YnJlYWtwb2ludC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQxMwpkaWZm IC11IC1wIC11IC1yMS40MTMgYnJlYWtwb2ludC5jCi0tLSBnZGIvYnJlYWtw b2ludC5jCTcgSnVsIDIwMDkgMjI6MjE6MDkgLTAwMDAJMS40MTMKKysrIGdk Yi9icmVha3BvaW50LmMJMjQgSnVsIDIwMDkgMjM6MzQ6MzMgLTAwMDAKQEAg LTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJ0b3AuaCIKICNpbmNsdWRlICJ3 cmFwcGVyLmgiCiAjaW5jbHVkZSAidmFscHJpbnQuaCIKKyNpbmNsdWRlICJq aXQuaCIKIAogLyogcmVhZGxpbmUgaW5jbHVkZSBmaWxlcyAqLwogI2luY2x1 ZGUgInJlYWRsaW5lL3JlYWRsaW5lLmgiCkBAIC0xNTc1LDYgKzE1NzYsMTMg QEAgdXBkYXRlX2JyZWFrcG9pbnRzX2FmdGVyX2V4ZWMgKHZvaWQpCiAJY29u dGludWU7CiAgICAgICB9CiAKKyAgICAvKiBKSVQgYnJlYWtwb2ludHMgbXVz dCBiZSBleHBsaWNpdGx5IHJlc2V0IGFmdGVyIGFuIGV4ZWMoKS4gKi8KKyAg ICBpZiAoYi0+dHlwZSA9PSBicF9qaXRfZXZlbnQpCisgICAgICB7CisJZGVs ZXRlX2JyZWFrcG9pbnQgKGIpOworCWNvbnRpbnVlOworICAgICAgfQorCiAg ICAgLyogVGhyZWFkIGV2ZW50IGJyZWFrcG9pbnRzIG11c3QgYmUgc2V0IGFu ZXcgYWZ0ZXIgYW4gZXhlYygpLAogICAgICAgIGFzIG11c3Qgb3ZlcmxheSBl dmVudCBhbmQgbG9uZ2ptcCBtYXN0ZXIgYnJlYWtwb2ludHMuICAqLwogICAg IGlmIChiLT50eXBlID09IGJwX3RocmVhZF9ldmVudCB8fCBiLT50eXBlID09 IGJwX292ZXJsYXlfZXZlbnQKQEAgLTI1NzMsNiArMjU4MSw3IEBAIHByaW50 X2l0X3R5cGljYWwgKGJwc3RhdCBicykKICAgICBjYXNlIGJwX3dhdGNocG9p bnRfc2NvcGU6CiAgICAgY2FzZSBicF9jYWxsX2R1bW15OgogICAgIGNhc2Ug YnBfdHJhY2Vwb2ludDoKKyAgICBjYXNlIGJwX2ppdF9ldmVudDoKICAgICBk ZWZhdWx0OgogICAgICAgcmVzdWx0ID0gUFJJTlRfVU5LTk9XTjsKICAgICAg IGJyZWFrOwpAQCAtMzI5OCw2ICszMzA3LDkgQEAgYnBzdGF0X3doYXQgKGJw c3RhdCBicykKICAgICAgIC8qIFdlIGhpdCB0aGUgc2hhcmVkIGxpYnJhcnkg ZXZlbnQgYnJlYWtwb2ludC4gICovCiAgICAgICBzaGxpYl9ldmVudCwKIAor ICAgICAgLyogV2UgaGl0IHRoZSBqaXQgZXZlbnQgYnJlYWtwb2ludC4gICov CisgICAgICBqaXRfZXZlbnQsCisKICAgICAgIC8qIFRoaXMgaXMganVzdCB1 c2VkIHRvIGNvdW50IGhvdyBtYW55IGVudW1zIHRoZXJlIGFyZS4gICovCiAg ICAgICBjbGFzc19sYXN0CiAgICAgfTsKQEAgLTMzMTMsNiArMzMyNSw3IEBA IGJwc3RhdF93aGF0IChicHN0YXQgYnMpCiAjZGVmaW5lIGNsciBCUFNUQVRf V0hBVF9DTEVBUl9MT05HSk1QX1JFU1VNRQogI2RlZmluZSBzciBCUFNUQVRf V0hBVF9TVEVQX1JFU1VNRQogI2RlZmluZSBzaGwgQlBTVEFUX1dIQVRfQ0hF Q0tfU0hMSUJTCisjZGVmaW5lIGppdCBCUFNUQVRfV0hBVF9DSEVDS19KSVQK IAogLyogIkNhbid0IGhhcHBlbi4iICBNaWdodCB3YW50IHRvIHByaW50IGFu IGVycm9yIG1lc3NhZ2UuCiAgICBhYm9ydCgpIGlzIG5vdCBvdXQgb2YgdGhl IHF1ZXN0aW9uLCBidXQgY2hhbmNlcyBhcmUgR0RCIGlzIGp1c3QKQEAgLTMz MzMsMTIgKzMzNDYsMTMgQEAgYnBzdGF0X3doYXQgKGJwc3RhdCBicykKICAg ICAgYmFjayBhbmQgZGVjaWRlIHNvbWV0aGluZyBvZiBhIGxvd2VyIHByaW9y aXR5IGlzIGJldHRlci4gIFRoZQogICAgICBvcmRlcmluZyBpczoKIAotICAg ICBrYyAgIDwgY2xyIHNnbCBzaGwgc2xyIHNuIHNyIHNzCi0gICAgIHNnbCAg PCBzaGwgc2xyIHNuIHNyIHNzCi0gICAgIHNsciAgPCBlcnIgc2hsIHNuIHNy IHNzCi0gICAgIGNsciAgPCBlcnIgc2hsIHNuIHNyIHNzCi0gICAgIHNzICAg PCBzaGwgc24gc3IKLSAgICAgc24gICA8IHNobCBzcgorICAgICBrYyAgIDwg aml0IGNsciBzZ2wgc2hsIHNsciBzbiBzciBzcworICAgICBzZ2wgIDwgaml0 IHNobCBzbHIgc24gc3Igc3MKKyAgICAgc2xyICA8IGppdCBlcnIgc2hsIHNu IHNyIHNzCisgICAgIGNsciAgPCBqaXQgZXJyIHNobCBzbiBzciBzcworICAg ICBzcyAgIDwgaml0IHNobCBzbiBzcgorICAgICBzbiAgIDwgaml0IHNobCBz cgorICAgICBqaXQgIDwgc2hsIHNyCiAgICAgIHNobCAgPCBzcgogICAgICBz ciAgIDwKIApAQCAtMzM1NiwyOCArMzM3MCwxOCBAQCBicHN0YXRfd2hhdCAo YnBzdGF0IGJzKQogICAgIHRhYmxlWyhpbnQpIGNsYXNzX2xhc3RdWyhpbnQp IEJQU1RBVF9XSEFUX0xBU1RdID0KICAgewogICAvKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9sZCBhY3Rpb24gKi8KLSAgLyogICAgICAga2Mg ICAgc3MgICAgc24gICAgc2dsICAgIHNsciAgIGNsciAgIHNyICAgc2hsCi0g ICAqLwotLypub19lZmZlY3QgKi8KLSAgICB7a2MsIHNzLCBzbiwgc2dsLCBz bHIsIGNsciwgc3IsIHNobH0sCi0vKndwX3NpbGVudCAqLwotICAgIHtzcywg c3MsIHNuLCBzcywgc3MsIHNzLCBzciwgc2hsfSwKLS8qd3Bfbm9pc3kgKi8K LSAgICB7c24sIHNuLCBzbiwgc24sIHNuLCBzbiwgc3IsIHNobH0sCi0vKmJw X25vc3RvcCAqLwotICAgIHtzZ2wsIHNzLCBzbiwgc2dsLCBzbHIsIHNsciwg c3IsIHNobH0sCi0vKmJwX3NpbGVudCAqLwotICAgIHtzcywgc3MsIHNuLCBz cywgc3MsIHNzLCBzciwgc2hsfSwKLS8qYnBfbm9pc3kgKi8KLSAgICB7c24s IHNuLCBzbiwgc24sIHNuLCBzbiwgc3IsIHNobH0sCi0vKmxvbmdfanVtcCAq LwotICAgIHtzbHIsIHNzLCBzbiwgc2xyLCBzbHIsIGVyciwgc3IsIHNobH0s Ci0vKmxvbmdfcmVzdW1lICovCi0gICAge2Nsciwgc3MsIHNuLCBlcnIsIGVy ciwgZXJyLCBzciwgc2hsfSwKLS8qc3RlcF9yZXN1bWUgKi8KLSAgICB7c3Is IHNyLCBzciwgc3IsIHNyLCBzciwgc3IsIHNyfSwKLS8qc2hsaWIgKi8KLSAg ICB7c2hsLCBzaGwsIHNobCwgc2hsLCBzaGwsIHNobCwgc3IsIHNobH0KKyAg LyogICAgICAgICAgICAgICBrYyAgIHNzICAgc24gICBzZ2wgIHNsciAgY2xy ICBzciAgc2hsICBqaXQgKi8KKy8qIG5vX2VmZmVjdCAqLyAgIHtrYywgIHNz LCAgc24sICBzZ2wsIHNsciwgY2xyLCBzciwgc2hsLCBqaXR9LAorLyogd3Bf c2lsZW50ICovICAge3NzLCAgc3MsICBzbiwgIHNzLCAgc3MsICBzcywgIHNy LCBzaGwsIGppdH0sCisvKiB3cF9ub2lzeSAqLyAgICB7c24sICBzbiwgIHNu LCAgc24sICBzbiwgIHNuLCAgc3IsIHNobCwgaml0fSwKKy8qIGJwX25vc3Rv cCAqLyAgIHtzZ2wsIHNzLCAgc24sICBzZ2wsIHNsciwgc2xyLCBzciwgc2hs LCBqaXR9LAorLyogYnBfc2lsZW50ICovICAge3NzLCAgc3MsICBzbiwgIHNz LCAgc3MsICBzcywgIHNyLCBzaGwsIGppdH0sCisvKiBicF9ub2lzeSAqLyAg ICB7c24sICBzbiwgIHNuLCAgc24sICBzbiwgIHNuLCAgc3IsIHNobCwgaml0 fSwKKy8qIGxvbmdfanVtcCAqLyAgIHtzbHIsIHNzLCAgc24sICBzbHIsIHNs ciwgZXJyLCBzciwgc2hsLCBqaXR9LAorLyogbG9uZ19yZXN1bWUgKi8ge2Ns ciwgc3MsICBzbiwgIGVyciwgZXJyLCBlcnIsIHNyLCBzaGwsIGppdH0sCisv KiBzdGVwX3Jlc3VtZSAqLyB7c3IsICBzciwgIHNyLCAgc3IsICBzciwgIHNy LCAgc3IsIHNyLCAgc3IgfSwKKy8qIHNobGliICovICAgICAgIHtzaGwsIHNo bCwgc2hsLCBzaGwsIHNobCwgc2hsLCBzciwgc2hsLCBzaGx9LAorLyogaml0 X2V2ZW50ICovICAge2ppdCwgaml0LCBqaXQsIGppdCwgaml0LCBqaXQsIHNy LCBqaXQsIGppdH0KICAgfTsKIAogI3VuZGVmIGtjCkBAIC0zMzkwLDYgKzMz OTQsNyBAQCBicHN0YXRfd2hhdCAoYnBzdGF0IGJzKQogI3VuZGVmIHNyCiAj dW5kZWYgdHMKICN1bmRlZiBzaGwKKyN1bmRlZiBqaXQKICAgZW51bSBicHN0 YXRfd2hhdF9tYWluX2FjdGlvbiBjdXJyZW50X2FjdGlvbiA9IEJQU1RBVF9X SEFUX0tFRVBfQ0hFQ0tJTkc7CiAgIHN0cnVjdCBicHN0YXRfd2hhdCByZXR2 YWw7CiAKQEAgLTM0NjAsNiArMzQ2NSw5IEBAIGJwc3RhdF93aGF0IChicHN0 YXQgYnMpCiAJY2FzZSBicF9zaGxpYl9ldmVudDoKIAkgIGJzX2NsYXNzID0g c2hsaWJfZXZlbnQ7CiAJICBicmVhazsKKwljYXNlIGJwX2ppdF9ldmVudDoK KwkgIGJzX2NsYXNzID0gaml0X2V2ZW50OworCSAgYnJlYWs7CiAJY2FzZSBi cF90aHJlYWRfZXZlbnQ6CiAJY2FzZSBicF9vdmVybGF5X2V2ZW50OgogCWNh c2UgYnBfbG9uZ2ptcF9tYXN0ZXI6CkBAIC0zNTkzLDYgKzM2MDEsNyBAQCBw cmludF9vbmVfYnJlYWtwb2ludF9sb2NhdGlvbiAoc3RydWN0IGJyCiAgICAg e2JwX2xvbmdqbXBfbWFzdGVyLCAibG9uZ2ptcCBtYXN0ZXIifSwKICAgICB7 YnBfY2F0Y2hwb2ludCwgImNhdGNocG9pbnQifSwKICAgICB7YnBfdHJhY2Vw b2ludCwgInRyYWNlcG9pbnQifSwKKyAgICB7YnBfaml0X2V2ZW50LCAiaml0 IGV2ZW50cyJ9LAogICB9OwogICAKICAgc3RhdGljIGNoYXIgYnBlbmFibGVz W10gPSAibnlubnkiOwpAQCAtMzcyMSw2ICszNzMwLDcgQEAgcHJpbnRfb25l X2JyZWFrcG9pbnRfbG9jYXRpb24gKHN0cnVjdCBicgogICAgICAgY2FzZSBi cF9vdmVybGF5X2V2ZW50OgogICAgICAgY2FzZSBicF9sb25nam1wX21hc3Rl cjoKICAgICAgIGNhc2UgYnBfdHJhY2Vwb2ludDoKKyAgICAgIGNhc2UgYnBf aml0X2V2ZW50OgogCWlmIChvcHRzLmFkZHJlc3NwcmludCkKIAkgIHsKIAkg ICAgYW5ub3RhdGVfZmllbGQgKDQpOwpAQCAtNDM2Miw2ICs0MzcyLDcgQEAg YWxsb2NhdGVfYnBfbG9jYXRpb24gKHN0cnVjdCBicmVha3BvaW50IAogICAg IGNhc2UgYnBfc2hsaWJfZXZlbnQ6CiAgICAgY2FzZSBicF90aHJlYWRfZXZl bnQ6CiAgICAgY2FzZSBicF9vdmVybGF5X2V2ZW50OgorICAgIGNhc2UgYnBf aml0X2V2ZW50OgogICAgIGNhc2UgYnBfbG9uZ2ptcF9tYXN0ZXI6CiAgICAg ICBsb2MtPmxvY190eXBlID0gYnBfbG9jX3NvZnR3YXJlX2JyZWFrcG9pbnQ7 CiAgICAgICBicmVhazsKQEAgLTQ2NDQsNiArNDY1NSwxNyBAQCBzdHJ1Y3Qg bGFuZ19hbmRfcmFkaXgKICAgICBpbnQgcmFkaXg7CiAgIH07CiAKKy8qIENy ZWF0ZSBhIGJyZWFrcG9pbnQgZm9yIEpJVCBjb2RlIHJlZ2lzdHJhdGlvbiBh bmQgdW5yZWdpc3RyYXRpb24uICAqLworCitzdHJ1Y3QgYnJlYWtwb2ludCAq CitjcmVhdGVfaml0X2V2ZW50X2JyZWFrcG9pbnQgKHN0cnVjdCBnZGJhcmNo ICpnZGJhcmNoLCBDT1JFX0FERFIgYWRkcmVzcykKK3sKKyAgc3RydWN0IGJy ZWFrcG9pbnQgKmI7CisKKyAgYiA9IGNyZWF0ZV9pbnRlcm5hbF9icmVha3Bv aW50IChnZGJhcmNoLCBhZGRyZXNzLCBicF9qaXRfZXZlbnQpOworICB1cGRh dGVfZ2xvYmFsX2xvY2F0aW9uX2xpc3Rfbm90aHJvdyAoMSk7CisgIHJldHVy biBiOworfQogCiB2b2lkCiByZW1vdmVfc29saWJfZXZlbnRfYnJlYWtwb2lu dHMgKHZvaWQpCkBAIC01Mjc5LDYgKzUzMDEsNyBAQCBtZW50aW9uIChzdHJ1 Y3QgYnJlYWtwb2ludCAqYikKICAgICAgIGNhc2UgYnBfc2hsaWJfZXZlbnQ6 CiAgICAgICBjYXNlIGJwX3RocmVhZF9ldmVudDoKICAgICAgIGNhc2UgYnBf b3ZlcmxheV9ldmVudDoKKyAgICAgIGNhc2UgYnBfaml0X2V2ZW50OgogICAg ICAgY2FzZSBicF9sb25nam1wX21hc3RlcjoKIAlicmVhazsKICAgICAgIH0K QEAgLTc1ODUsNiArNzYwOCw3IEBAIGRlbGV0ZV9jb21tYW5kIChjaGFyICph cmcsIGludCBmcm9tX3R0eSkKICAgICAgIHsKIAlpZiAoYi0+dHlwZSAhPSBi cF9jYWxsX2R1bW15CiAJICAgICYmIGItPnR5cGUgIT0gYnBfc2hsaWJfZXZl bnQKKwkgICAgJiYgYi0+dHlwZSAhPSBicF9qaXRfZXZlbnQKIAkgICAgJiYg Yi0+dHlwZSAhPSBicF90aHJlYWRfZXZlbnQKIAkgICAgJiYgYi0+dHlwZSAh PSBicF9vdmVybGF5X2V2ZW50CiAJICAgICYmIGItPnR5cGUgIT0gYnBfbG9u Z2ptcF9tYXN0ZXIKQEAgLTc2MDQsNiArNzYyOCw3IEBAIGRlbGV0ZV9jb21t YW5kIChjaGFyICphcmcsIGludCBmcm9tX3R0eSkKIAkgICAgaWYgKGItPnR5 cGUgIT0gYnBfY2FsbF9kdW1teQogCQkmJiBiLT50eXBlICE9IGJwX3NobGli X2V2ZW50CiAJCSYmIGItPnR5cGUgIT0gYnBfdGhyZWFkX2V2ZW50CisJCSYm IGItPnR5cGUgIT0gYnBfaml0X2V2ZW50CiAJCSYmIGItPnR5cGUgIT0gYnBf b3ZlcmxheV9ldmVudAogCQkmJiBiLT50eXBlICE9IGJwX2xvbmdqbXBfbWFz dGVyCiAJCSYmIGItPm51bWJlciA+PSAwKQpAQCAtNzkyNiw2ICs3OTUxLDcg QEAgYnJlYWtwb2ludF9yZV9zZXRfb25lICh2b2lkICpiaW50KQogICAgIGNh c2UgYnBfc3RlcF9yZXN1bWU6CiAgICAgY2FzZSBicF9sb25nam1wOgogICAg IGNhc2UgYnBfbG9uZ2ptcF9yZXN1bWU6CisgICAgY2FzZSBicF9qaXRfZXZl bnQ6CiAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTc5NTQsNiArNzk4MCw4 IEBAIGJyZWFrcG9pbnRfcmVfc2V0ICh2b2lkKQogICBzZXRfbGFuZ3VhZ2Ug KHNhdmVfbGFuZ3VhZ2UpOwogICBpbnB1dF9yYWRpeCA9IHNhdmVfaW5wdXRf cmFkaXg7CiAKKyAgaml0X2luZmVyaW9yX2NyZWF0ZWRfaG9vayAoKTsKKwog ICBjcmVhdGVfb3ZlcmxheV9ldmVudF9icmVha3BvaW50ICgiX292bHlfZGVi dWdfZXZlbnQiKTsKICAgY3JlYXRlX2xvbmdqbXBfbWFzdGVyX2JyZWFrcG9p bnQgKCJsb25nam1wIik7CiAgIGNyZWF0ZV9sb25nam1wX21hc3Rlcl9icmVh a3BvaW50ICgiX2xvbmdqbXAiKTsKSW5kZXg6IGdkYi9icmVha3BvaW50LmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3Jj L2dkYi9icmVha3BvaW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTUK ZGlmZiAtdSAtcCAtdSAtcjEuOTUgYnJlYWtwb2ludC5oCi0tLSBnZGIvYnJl YWtwb2ludC5oCTIgSnVsIDIwMDkgMTc6MTI6MjQgLTAwMDAJMS45NQorKysg Z2RiL2JyZWFrcG9pbnQuaAkyNCBKdWwgMjAwOSAyMzozNDozNiAtMDAwMApA QCAtMTIwLDYgKzEyMCw5IEBAIGVudW0gYnB0eXBlCiAgICAgYnBfY2F0Y2hw b2ludCwKIAogICAgIGJwX3RyYWNlcG9pbnQsCisKKyAgICAvKiBFdmVudCBm b3IgSklUIGNvbXBpbGVkIGNvZGUgZ2VuZXJhdGlvbiBvciBkZWxldGlvbi4g ICovCisgICAgYnBfaml0X2V2ZW50LAogICB9OwogCiAvKiBTdGF0ZXMgb2Yg ZW5hYmxlbWVudCBvZiBicmVha3BvaW50LiAqLwpAQCAtNTQ4LDYgKzU1MSw5 IEBAIGVudW0gYnBzdGF0X3doYXRfbWFpbl9hY3Rpb24KICAgICAgICBrZWVw IGNoZWNraW5nLiAgKi8KICAgICBCUFNUQVRfV0hBVF9DSEVDS19TSExJQlMs CiAKKyAgICAvKiBDaGVjayBmb3IgbmV3IEpJVGVkIGNvZGUuICAqLworICAg IEJQU1RBVF9XSEFUX0NIRUNLX0pJVCwKKwogICAgIC8qIFRoaXMgaXMganVz dCB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgZW51bXMgdGhlcmUg YXJlLiAgKi8KICAgICBCUFNUQVRfV0hBVF9MQVNUCiAgIH07CkBAIC04NDEs NiArODQ3LDkgQEAgZXh0ZXJuIHZvaWQgbWFya19icmVha3BvaW50c19vdXQg KHZvaWQpOwogCiBleHRlcm4gdm9pZCBtYWtlX2JyZWFrcG9pbnRfcGVybWFu ZW50IChzdHJ1Y3QgYnJlYWtwb2ludCAqKTsKIAorZXh0ZXJuIHN0cnVjdCBi cmVha3BvaW50ICpjcmVhdGVfaml0X2V2ZW50X2JyZWFrcG9pbnQgKHN0cnVj dCBnZGJhcmNoICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ09SRV9BRERSKTsKKwogZXh0ZXJu IHN0cnVjdCBicmVha3BvaW50ICpjcmVhdGVfc29saWJfZXZlbnRfYnJlYWtw b2ludCAoc3RydWN0IGdkYmFyY2ggKiwKIAkJCQkJCQkgQ09SRV9BRERSKTsK IApJbmRleDogZ2RiL2luZnJ1bi5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvaW5mcnVuLmMsdgpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuNDAyCmRpZmYgLXUgLXAgLXUgLXIxLjQwMiBpbmZy dW4uYwotLS0gZ2RiL2luZnJ1bi5jCTIwIEp1bCAyMDA5IDE1OjA1OjEyIC0w MDAwCTEuNDAyCisrKyBnZGIvaW5mcnVuLmMJMjQgSnVsIDIwMDkgMjM6MzQ6 NDEgLTAwMDAKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJldmVudC10 b3AuaCIKICNpbmNsdWRlICJyZWNvcmQuaCIKICNpbmNsdWRlICJpbmxpbmUt ZnJhbWUuaCIKKyNpbmNsdWRlICJqaXQuaCIKIAogLyogUHJvdG90eXBlcyBm b3IgbG9jYWwgZnVuY3Rpb25zICovCiAKQEAgLTU0NCw2ICs1NDUsOCBAQCBm b2xsb3dfZXhlYyAocHRpZF90IHBpZCwgY2hhciAqZXhlY2RfcGF0CiAgIHNv bGliX2NyZWF0ZV9pbmZlcmlvcl9ob29rICgpOwogI2VuZGlmCiAKKyAgaml0 X2luZmVyaW9yX2NyZWF0ZWRfaG9vayAoKTsKKwogICAvKiBSZWluc2VydCBh bGwgYnJlYWtwb2ludHMuICAoVGhvc2Ugd2hpY2ggd2VyZSBzeW1ib2xpYyBo YXZlCiAgICAgIGJlZW4gcmVzZXQgdG8gdGhlIHByb3BlciBhZGRyZXNzIGlu IHRoZSBuZXcgYS5vdXQsIHRoYW5rcwogICAgICB0byBzeW1ib2xfZmlsZV9j b21tYW5kLi4uKSAqLwpAQCAtMzUyOSw2ICszNTMyLDIyIEBAIGluZnJ1bjog QlBTVEFUX1dIQVRfU0VUX0xPTkdKTVBfUkVTVU1FICgKIAl9CiAJYnJlYWs7 CiAKKyAgICAgIGNhc2UgQlBTVEFUX1dIQVRfQ0hFQ0tfSklUOgorICAgICAg ICBpZiAoZGVidWdfaW5mcnVuKQorICAgICAgICAgIGZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGxvZywgImluZnJ1bjogQlBTVEFUX1dIQVRfQ0hFQ0tf SklUXG4iKTsKKworICAgICAgICAvKiBTd2l0Y2ggdGVybWluYWwgZm9yIGFu eSBtZXNzYWdlcyBwcm9kdWNlZCBieSBicmVha3BvaW50X3JlX3NldC4gICov CisgICAgICAgIHRhcmdldF90ZXJtaW5hbF9vdXJzX2Zvcl9vdXRwdXQgKCk7 CisKKyAgICAgICAgaml0X2V2ZW50X2hhbmRsZXIgKCk7CisKKyAgICAgICAg dGFyZ2V0X3Rlcm1pbmFsX2luZmVyaW9yICgpOworCisgICAgICAgIC8qIFdl IHdhbnQgdG8gc3RlcCBvdmVyIHRoaXMgYnJlYWtwb2ludCwgdGhlbiBrZWVw IGdvaW5nLiAgKi8KKyAgICAgICAgZWNzLT5ldmVudF90aHJlYWQtPnN0ZXBw aW5nX292ZXJfYnJlYWtwb2ludCA9IDE7CisKKyAgICAgICAgYnJlYWs7CisK ICAgICAgIGNhc2UgQlBTVEFUX1dIQVRfTEFTVDoKIAkvKiBOb3QgYSByZWFs IGNvZGUsIGJ1dCBsaXN0ZWQgaGVyZSB0byBzaHV0IHVwIGdjYyAtV2FsbC4g ICovCiAKSW5kZXg6IGdkYi9qaXQuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiBnZGIvaml0LmMKZGlmZiAtTiBnZGIvaml0LmMKLS0tIC9k ZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBnZGIvaml0 LmMJMjQgSnVsIDIwMDkgMjM6MzQ6NDEgLTAwMDAKQEAgLTAsMCArMSwzOTMg QEAKKy8qIEhhbmRsZSBKSVQgY29kZSBnZW5lcmF0aW9uIGluIHRoZSBpbmZl cmlvciBmb3IgR0RCLCB0aGUgR05VIERlYnVnZ2VyLgorCisgICBDb3B5cmln aHQgKEMpIDIwMDkKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJkZWZzLmgiCisKKyNp bmNsdWRlICJqaXQuaCIKKyNpbmNsdWRlICJicmVha3BvaW50LmgiCisjaW5j bHVkZSAiZ2RiY29yZS5oIgorI2luY2x1ZGUgIm9ic2VydmVyLmgiCisjaW5j bHVkZSAib2JqZmlsZXMuaCIKKyNpbmNsdWRlICJzeW1maWxlLmgiCisjaW5j bHVkZSAic3ltdGFiLmgiCisjaW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVk ZSAiZ2RiX3N0YXQuaCIKKworLy8jaW5jbHVkZSAiYXNzZXJ0LmgiCisvLyNp bmNsdWRlICJzdHJpbmcuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvYmpm aWxlX2RhdGEgKmppdF9vYmpmaWxlX2RhdGE7CisKK3N0YXRpYyBjb25zdCBj aGFyICpjb25zdCBqaXRfYnJlYWtfbmFtZSA9ICJfX2ppdF9kZWJ1Z19yZWdp c3Rlcl9jb2RlIjsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGppdF9k ZXNjcmlwdG9yX25hbWUgPSAiX19qaXRfZGVidWdfZGVzY3JpcHRvciI7CisK Ky8qIFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIEpJVCBkZXNjcmlwdG9y IGluIHRoZSBpbmZlcmlvci4gICovCisKK3N0YXRpYyBDT1JFX0FERFIgaml0 X2Rlc2NyaXB0b3JfYWRkciA9IDA7CisKK3N0cnVjdCB0YXJnZXRfYnVmZmVy Cit7CisgIENPUkVfQUREUiBiYXNlOworICBzaXplX3Qgc2l6ZTsKK307CisK Ky8qIE9wZW5uaW5nIHRoZSBmaWxlIGlzIGEgbm8tb3AuICAqLworCitzdGF0 aWMgdm9pZCAqCittZW1fYmZkX2lvdmVjX29wZW4gKHN0cnVjdCBiZmQgKmFi ZmQsIHZvaWQgKm9wZW5fY2xvc3VyZSkKK3sKKyAgcmV0dXJuIG9wZW5fY2xv c3VyZTsKK30KKworLyogQ2xvc2luZyB0aGUgZmlsZSBpcyBqdXN0IGZyZWVp bmcgdGhlIGJhc2Uvc2l6ZSBwYWlyIG9uIG91ciBzaWRlLiAgKi8KKworc3Rh dGljIGludAorbWVtX2JmZF9pb3ZlY19jbG9zZSAoc3RydWN0IGJmZCAqYWJm ZCwgdm9pZCAqc3RyZWFtKQoreworICB4ZnJlZSAoc3RyZWFtKTsKKyAgcmV0 dXJuIDE7Cit9CisKKy8qIEZvciByZWFkaW5nIHRoZSBmaWxlLCB3ZSBqdXN0 IG5lZWQgdG8gcGFzcyB0aHJvdWdoIHRvIHRhcmdldF9yZWFkX21lbW9yeSBh bmQKKyAgIGZpeCB1cCB0aGUgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVz LiAgKi8KKworc3RhdGljIGZpbGVfcHRyCittZW1fYmZkX2lvdmVjX3ByZWFk IChzdHJ1Y3QgYmZkICphYmZkLCB2b2lkICpzdHJlYW0sIHZvaWQgKmJ1ZiwK KyAgICAgICAgICAgICAgICAgICAgIGZpbGVfcHRyIG5ieXRlcywgZmlsZV9w dHIgb2Zmc2V0KQoreworICBpbnQgZXJyOworICBzdHJ1Y3QgdGFyZ2V0X2J1 ZmZlciAqYnVmZmVyID0gKHN0cnVjdCB0YXJnZXRfYnVmZmVyICopIHN0cmVh bTsKKworICAvKiBJZiB0aGlzIHJlYWQgd2lsbCByZWFkIGFsbCBvZiB0aGUg ZmlsZSwgbGltaXQgaXQgdG8ganVzdCB0aGUgcmVzdC4gICovCisgIGlmIChv ZmZzZXQgKyBuYnl0ZXMgPiBidWZmZXItPnNpemUpCisgICAgbmJ5dGVzID0g YnVmZmVyLT5zaXplIC0gb2Zmc2V0OworCisgIC8qIElmIHRoZXJlIGFyZSBu byBtb3JlIGJ5dGVzIGxlZnQsIHdlJ3ZlIHJlYWNoZWQgRU9GLiAgKi8KKyAg aWYgKG5ieXRlcyA9PSAwKQorICAgIHJldHVybiAwOworCisgIGVyciA9IHRh cmdldF9yZWFkX21lbW9yeSAoYnVmZmVyLT5iYXNlICsgb2Zmc2V0LCAoZ2Ri X2J5dGUgKikgYnVmLCBuYnl0ZXMpOworICBpZiAoZXJyKQorICAgIHJldHVy biAtMTsKKworICByZXR1cm4gbmJ5dGVzOworfQorCisvKiBGb3Igc3RhdHRp bmcgdGhlIGZpbGUsIHdlIG9ubHkgc3VwcG9ydCB0aGUgc3Rfc2l6ZSBhdHRy aWJ1dGUuICAqLyAKKworc3RhdGljIGludAorbWVtX2JmZF9pb3ZlY19zdGF0 IChzdHJ1Y3QgYmZkICphYmZkLCB2b2lkICpzdHJlYW0sIHN0cnVjdCBzdGF0 ICpzYikKK3sKKyAgc3RydWN0IHRhcmdldF9idWZmZXIgKmJ1ZmZlciA9IChz dHJ1Y3QgdGFyZ2V0X2J1ZmZlciopIHN0cmVhbTsKKworICBzYi0+c3Rfc2l6 ZSA9IGJ1ZmZlci0+c2l6ZTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIE9wZW4g YSBCRkQgZnJvbSB0aGUgdGFyZ2V0J3MgbWVtb3J5LiAgKi8KKworc3RhdGlj IHN0cnVjdCBiZmQgKgorYmZkX29wZW5fZnJvbV90YXJnZXRfbWVtb3J5IChD T1JFX0FERFIgYWRkciwgc2l6ZV90IHNpemUsIGNoYXIgKnRhcmdldCkKK3sK KyAgY29uc3QgY2hhciAqZmlsZW5hbWUgPSB4c3RyZHVwICgiPGluLW1lbW9y eT4iKTsKKyAgc3RydWN0IHRhcmdldF9idWZmZXIgKmJ1ZmZlciA9IHhtYWxs b2MgKHNpemVvZiAoc3RydWN0IHRhcmdldF9idWZmZXIpKTsKKworICBidWZm ZXItPmJhc2UgPSBhZGRyOworICBidWZmZXItPnNpemUgPSBzaXplOworICBy ZXR1cm4gYmZkX29wZW5yX2lvdmVjIChmaWxlbmFtZSwgdGFyZ2V0LAorCQkJ ICBtZW1fYmZkX2lvdmVjX29wZW4sCisgICAgICAgICAgICAgICAgICAgICAg ICAgIGJ1ZmZlciwKKwkJCSAgbWVtX2JmZF9pb3ZlY19wcmVhZCwKKwkJCSAg bWVtX2JmZF9pb3ZlY19jbG9zZSwKKwkJCSAgbWVtX2JmZF9pb3ZlY19zdGF0 KTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciByZWFkaW5nIHRoZSBn bG9iYWwgSklUIGRlc2NyaXB0b3IgZnJvbSByZW1vdGUgbWVtb3J5LiAgKi8K Kworc3RhdGljIHZvaWQKK2ppdF9yZWFkX2Rlc2NyaXB0b3IgKHN0cnVjdCBq aXRfZGVzY3JpcHRvciAqZGVzY3JpcHRvcikKK3sKKyAgaW50IGVycjsKKyAg c3RydWN0IHR5cGUgKnB0cl90eXBlOworICBpbnQgcHRyX3NpemU7CisgIGlu dCBkZXNjX3NpemU7CisgIGdkYl9ieXRlICpkZXNjX2J1ZjsKKyAgZW51bSBi ZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVfb3JkZXIgKHRh cmdldF9nZGJhcmNoKTsKKworICAvKiBGaWd1cmUgb3V0IGhvdyBiaWcgdGhl IGRlc2NyaXB0b3IgaXMgb24gdGhlIHJlbW90ZSBhbmQgaG93IHRvIHJlYWQg aXQuICAqLworICBwdHJfdHlwZSA9IGJ1aWx0aW5fdHlwZSAodGFyZ2V0X2dk YmFyY2gpLT5idWlsdGluX2RhdGFfcHRyOworICBwdHJfc2l6ZSA9IFRZUEVf TEVOR1RIIChwdHJfdHlwZSk7CisgIGRlc2Nfc2l6ZSA9IDggKyAyICogcHRy X3NpemU7ICAvKiBUd28gMzItYml0IGludHMgYW5kIHR3byBwb2ludGVycy4g ICovCisgIGRlc2NfYnVmID0gYWxsb2NhIChkZXNjX3NpemUpOworCisgIC8q IFJlYWQgdGhlIGRlc2NyaXB0b3IuICAqLworICBlcnIgPSB0YXJnZXRfcmVh ZF9tZW1vcnkgKGppdF9kZXNjcmlwdG9yX2FkZHIsIGRlc2NfYnVmLCBkZXNj X3NpemUpOworICBpZiAoZXJyKQorICAgIGVycm9yIChfKCJVbmFibGUgdG8g cmVhZCBKSVQgZGVzY3JpcHRvciBmcm9tIHJlbW90ZSBtZW1vcnkhIikpOwor CisgIC8qIEZpeCB0aGUgZW5kaWFubmVzcyB0byBtYXRjaCB0aGUgaG9zdC4g ICovCisgIGRlc2NyaXB0b3ItPnZlcnNpb24gPSBleHRyYWN0X3Vuc2lnbmVk X2ludGVnZXIgKCZkZXNjX2J1ZlswXSwgNCwgYnl0ZV9vcmRlcik7CisgIGRl c2NyaXB0b3ItPmFjdGlvbl9mbGFnID0KKyAgICAgIGV4dHJhY3RfdW5zaWdu ZWRfaW50ZWdlciAoJmRlc2NfYnVmWzRdLCA0LCBieXRlX29yZGVyKTsKKyAg ZGVzY3JpcHRvci0+cmVsZXZhbnRfZW50cnkgPSBleHRyYWN0X3R5cGVkX2Fk ZHJlc3MgKCZkZXNjX2J1Zls4XSwgcHRyX3R5cGUpOworICBkZXNjcmlwdG9y LT5maXJzdF9lbnRyeSA9CisgICAgICBleHRyYWN0X3R5cGVkX2FkZHJlc3Mg KCZkZXNjX2J1Zls4ICsgcHRyX3NpemVdLCBwdHJfdHlwZSk7Cit9CisKKy8q IEhlbHBlciBmdW5jdGlvbiBmb3IgcmVhZGluZyBhIEpJVGVkIGNvZGUgZW50 cnkgZnJvbSByZW1vdGUgbWVtb3J5LiAgKi8KKworc3RhdGljIHZvaWQKK2pp dF9yZWFkX2NvZGVfZW50cnkgKENPUkVfQUREUiBjb2RlX2FkZHIsIHN0cnVj dCBqaXRfY29kZV9lbnRyeSAqY29kZV9lbnRyeSkKK3sKKyAgaW50IGVycjsK KyAgc3RydWN0IHR5cGUgKnB0cl90eXBlOworICBpbnQgcHRyX3NpemU7Cisg IGludCBlbnRyeV9zaXplOworICBnZGJfYnl0ZSAqZW50cnlfYnVmOworICBl bnVtIGJmZF9lbmRpYW4gYnl0ZV9vcmRlciA9IGdkYmFyY2hfYnl0ZV9vcmRl ciAodGFyZ2V0X2dkYmFyY2gpOworCisgIC8qIEZpZ3VyZSBvdXQgaG93IGJp ZyB0aGUgZW50cnkgaXMgb24gdGhlIHJlbW90ZSBhbmQgaG93IHRvIHJlYWQg aXQuICAqLworICBwdHJfdHlwZSA9IGJ1aWx0aW5fdHlwZSAodGFyZ2V0X2dk YmFyY2gpLT5idWlsdGluX2RhdGFfcHRyOworICBwdHJfc2l6ZSA9IFRZUEVf TEVOR1RIIChwdHJfdHlwZSk7CisgIGVudHJ5X3NpemUgPSAzICogcHRyX3Np emUgKyA4OyAgLyogVGhyZWUgcG9pbnRlcnMgYW5kIG9uZSA2NC1iaXQgaW50 LiAgKi8KKyAgZW50cnlfYnVmID0gYWxsb2NhIChlbnRyeV9zaXplKTsKKwor ICAvKiBSZWFkIHRoZSBlbnRyeS4gICovCisgIGVyciA9IHRhcmdldF9yZWFk X21lbW9yeSAoY29kZV9hZGRyLCBlbnRyeV9idWYsIGVudHJ5X3NpemUpOwor ICBpZiAoZXJyKQorICAgIGVycm9yIChfKCJVbmFibGUgdG8gcmVhZCBKSVQg Y29kZSBlbnRyeSBmcm9tIHJlbW90ZSBtZW1vcnkhIikpOworCisgIC8qIEZp eCB0aGUgZW5kaWFubmVzcyB0byBtYXRjaCB0aGUgaG9zdC4gICovCisgIHB0 cl90eXBlID0gYnVpbHRpbl90eXBlICh0YXJnZXRfZ2RiYXJjaCktPmJ1aWx0 aW5fZGF0YV9wdHI7CisgIGNvZGVfZW50cnktPm5leHRfZW50cnkgPSBleHRy YWN0X3R5cGVkX2FkZHJlc3MgKCZlbnRyeV9idWZbMF0sIHB0cl90eXBlKTsK KyAgY29kZV9lbnRyeS0+cHJldl9lbnRyeSA9CisgICAgICBleHRyYWN0X3R5 cGVkX2FkZHJlc3MgKCZlbnRyeV9idWZbcHRyX3NpemVdLCBwdHJfdHlwZSk7 CisgIGNvZGVfZW50cnktPnN5bWZpbGVfYWRkciA9CisgICAgICBleHRyYWN0 X3R5cGVkX2FkZHJlc3MgKCZlbnRyeV9idWZbMiAqIHB0cl9zaXplXSwgcHRy X3R5cGUpOworICBjb2RlX2VudHJ5LT5zeW1maWxlX3NpemUgPQorICAgICAg ZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyICgmZW50cnlfYnVmWzMgKiBwdHJf c2l6ZV0sIDgsIGJ5dGVfb3JkZXIpOworfQorCisvKiBUaGlzIGZ1bmN0aW9u IHJlZ2lzdGVycyBjb2RlIGFzc29jaWF0ZWQgd2l0aCBhIEpJVCBjb2RlIGVu dHJ5LiAgSXQgdXNlcyB0aGUKKyAgIHBvaW50ZXIgYW5kIHNpemUgcGFpciBp biB0aGUgZW50cnkgdG8gcmVhZCB0aGUgc3ltYm9sIGZpbGUgZnJvbSB0aGUg cmVtb3RlCisgICBhbmQgdGhlbiBjYWxscyBzeW1ib2xfZmlsZV9hZGRfZnJv bV9sb2NhbF9tZW1vcnkgdG8gYWRkIGl0IGFzIHRob3VnaCBpdCB3ZXJlCisg ICBhIHN5bWJvbCBmaWxlIGFkZGVkIGJ5IHRoZSB1c2VyLiAgKi8KKworc3Rh dGljIHZvaWQKK2ppdF9yZWdpc3Rlcl9jb2RlIChDT1JFX0FERFIgZW50cnlf YWRkciwgc3RydWN0IGppdF9jb2RlX2VudHJ5ICpjb2RlX2VudHJ5KQorewor ICBiZmQgKm5iZmQ7CisgIHN0cnVjdCBzZWN0aW9uX2FkZHJfaW5mbyAqc2Fp OworICBzdHJ1Y3QgYmZkX3NlY3Rpb24gKnNlYzsKKyAgc3RydWN0IG9iamZp bGUgKm9iamZpbGU7CisgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2xlYW51cHM7 CisgIGludCBpOworICBjb25zdCBzdHJ1Y3QgYmZkX2FyY2hfaW5mbyAqYjsK KworICBuYmZkID0gYmZkX29wZW5fZnJvbV90YXJnZXRfbWVtb3J5IChjb2Rl X2VudHJ5LT5zeW1maWxlX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvZGVfZW50cnktPnN5bWZpbGVfc2l6ZSwgZ251 dGFyZ2V0KTsKKyAgb2xkX2NsZWFudXBzID0gbWFrZV9jbGVhbnVwX2JmZF9j bG9zZSAobmJmZCk7CisKKyAgLyogQ2hlY2sgdGhlIGZvcm1hdC4gIE5PVEU6 IFRoaXMgaW5pdGlhbGl6ZXMgaW1wb3J0YW50IGRhdGEgdGhhdCBHREIgdXNl cyEKKyAgICAgV2Ugd291bGQgc2VnZmF1bHQgbGF0ZXIgd2l0aG91dCB0aGlz IGxpbmUuICAqLworICBpZiAoIWJmZF9jaGVja19mb3JtYXQgKG5iZmQsIGJm ZF9vYmplY3QpKQorICAgIHsKKyAgICAgIHByaW50Zl91bmZpbHRlcmVkIChf KCJcCitKSVRlZCBzeW1ib2wgZmlsZSBpcyBub3QgYW4gb2JqZWN0IGZpbGUs IGlnbm9yaW5nIGl0LlxuIikpOworICAgICAgZG9fY2xlYW51cHMgKG9sZF9j bGVhbnVwcyk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8qIENoZWNr IGJmZCBhcmNoLiAgKi8KKyAgYiA9IGdkYmFyY2hfYmZkX2FyY2hfaW5mbyAo dGFyZ2V0X2dkYmFyY2gpOworICBpZiAoYi0+Y29tcGF0aWJsZSAoYiwgYmZk X2dldF9hcmNoX2luZm8gKG5iZmQpKSAhPSBiKQorICAgIHdhcm5pbmcgKF8o IkpJVGVkIG9iamVjdCBmaWxlIGFyY2hpdGVjdHVyZSAlcyBpcyBub3QgY29t cGF0aWJsZSAiCisgICAgICAgICAgICAgICAid2l0aCB0YXJnZXQgYXJjaGl0 ZWN0dXJlICVzLiIpLCBiZmRfZ2V0X2FyY2hfaW5mbworICAgICAgICAgICAg IChuYmZkKS0+cHJpbnRhYmxlX25hbWUsIGItPnByaW50YWJsZV9uYW1lKTsK KworICAvKiBSZWFkIHRoZSBzZWN0aW9uIGFkZHJlc3MgaW5mb3JtYXRpb24g b3V0IG9mIHRoZSBzeW1ib2wgZmlsZS4gIFNpbmNlIHRoZQorICAgICBmaWxl IGlzIGdlbmVyYXRlZCBieSB0aGUgSklUIGF0IHJ1bnRpbWUsIGl0IHNob3Vs ZCBhbGwgb2YgdGhlIGFic29sdXRlCisgICAgIGFkZHJlc3NlcyB0aGF0IHdl IGNhcmUgYWJvdXQuICAqLworICBzYWkgPSBhbGxvY19zZWN0aW9uX2FkZHJf aW5mbyAoYmZkX2NvdW50X3NlY3Rpb25zIChuYmZkKSk7CisgIG1ha2VfY2xl YW51cF9mcmVlX3NlY3Rpb25fYWRkcl9pbmZvIChzYWkpOworICBpID0gMDsK KyAgZm9yIChzZWMgPSBuYmZkLT5zZWN0aW9uczsgc2VjICE9IE5VTEw7IHNl YyA9IHNlYy0+bmV4dCkKKyAgICBpZiAoKGJmZF9nZXRfc2VjdGlvbl9mbGFn cyAobmJmZCwgc2VjKSAmIChTRUNfQUxMT0N8U0VDX0xPQUQpKSAhPSAwKQor ICAgICAgeworICAgICAgICAvKiBXZSBhc3N1bWUgdGhhdCB0aGVzZSB2aXJ0 dWFsIGFkZHJlc3NlcyBhcmUgYWJzb2x1dGUsIGFuZCBkbyBub3QKKyAgICAg ICAgICAgdHJlYXQgdGhlbSBhcyBvZmZzZXRzLiAgKi8KKwlzYWktPm90aGVy W2ldLmFkZHIgPSBiZmRfZ2V0X3NlY3Rpb25fdm1hIChuYmZkLCBzZWMpOwor CXNhaS0+b3RoZXJbaV0ubmFtZSA9IChjaGFyICopIGJmZF9nZXRfc2VjdGlv bl9uYW1lIChuYmZkLCBzZWMpOworCXNhaS0+b3RoZXJbaV0uc2VjdGluZGV4 ID0gc2VjLT5pbmRleDsKKwkrK2k7CisgICAgICB9CisKKyAgLyogVGhpcyBj YWxsIHRha2VzIG93bmVyc2hpcCBvZiBzYWkuICAqLworICBvYmpmaWxlID0g c3ltYm9sX2ZpbGVfYWRkX2Zyb21fYmZkIChuYmZkLCAwLCBzYWksIE9CSkZf U0hBUkVEKTsKKworICAvKiBSZW1lbWJlciBhIG1hcHBpbmcgZnJvbSBlbnRy eV9hZGRyIHRvIG9iamZpbGUuICAqLworICBzZXRfb2JqZmlsZV9kYXRhIChv YmpmaWxlLCBqaXRfb2JqZmlsZV9kYXRhLCAodm9pZCAqKSBlbnRyeV9hZGRy KTsKKworICBkaXNjYXJkX2NsZWFudXBzIChvbGRfY2xlYW51cHMpOworfQor CisvKiBUaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXJzIEpJVGVkIGNvZGUgYW5k IGZyZWVzIHRoZSBjb3JyZXNwb25kaW5nIG9iamZpbGUuICAqLworCitzdGF0 aWMgdm9pZAoraml0X3VucmVnaXN0ZXJfY29kZSAoc3RydWN0IG9iamZpbGUg Km9iamZpbGUpCit7CisgIGZyZWVfb2JqZmlsZSAob2JqZmlsZSk7Cit9CisK K3ZvaWQKK2ppdF9pbmZlcmlvcl9jcmVhdGVkX2hvb2sgKHZvaWQpCit7Cisg IHN0cnVjdCBtaW5pbWFsX3N5bWJvbCAqcmVnX3N5bWJvbDsKKyAgc3RydWN0 IG1pbmltYWxfc3ltYm9sICpkZXNjX3N5bWJvbDsKKyAgQ09SRV9BRERSIHJl Z19hZGRyOworICBzdHJ1Y3Qgaml0X2Rlc2NyaXB0b3IgZGVzY3JpcHRvcjsK KyAgc3RydWN0IGppdF9jb2RlX2VudHJ5IGN1cl9lbnRyeTsKKyAgQ09SRV9B RERSIGN1cl9lbnRyeV9hZGRyOworCisgIC8qIElmIHdlIGFscmVhZHkgZm91 bmQgdGhlIHN5bWJvbHMgYW5kIHN1Y2Nlc3NmdWxseSBzZXQgdGhlIGJyZWFr cG9pbnQsIGRvbid0CisgICAgIGRvIGl0IGFnYWluLiAgKi8KKyAgaWYgKGpp dF9kZXNjcmlwdG9yX2FkZHIgIT0gMCkKKyAgICByZXR1cm47CisKKyAgLyog TG9va3VwIHRoZSByZWdpc3RyYXRpb24gc3ltYm9sLiAgSWYgaXQgaXMgbWlz c2luZywgdGhlbiB3ZSBhc3N1bWUgd2UgYXJlCisgICAgIG5vdCBhdHRhY2hl ZCB0byBhIEpJVC4gICovCisgIHJlZ19zeW1ib2wgPSBsb29rdXBfbWluaW1h bF9zeW1ib2wgKGppdF9icmVha19uYW1lLCBOVUxMLCBOVUxMKTsKKyAgaWYg KHJlZ19zeW1ib2wgPT0gTlVMTCkKKyAgICByZXR1cm47CisgIHJlZ19hZGRy ID0gU1lNQk9MX1ZBTFVFX0FERFJFU1MgKHJlZ19zeW1ib2wpOworICBpZiAo cmVnX2FkZHIgPT0gMCkKKyAgICByZXR1cm47CisKKyAgLyogTG9va3VwIHRo ZSBkZXNjcmlwdG9yIHN5bWJvbCBhbmQgY2FjaGUgdGhlIGFkZHIuICBJZiBp dCBpcyBtaXNzaW5nLCB3ZQorICAgICBhc3N1bWUgd2UgYXJlIG5vdCBhdHRh Y2hlZCB0byBhIEpJVCBhbmQgcmV0dXJuIGVhcmx5LiAgKi8KKyAgZGVzY19z eW1ib2wgPSBsb29rdXBfbWluaW1hbF9zeW1ib2wgKGppdF9kZXNjcmlwdG9y X25hbWUsIE5VTEwsIE5VTEwpOworICBpZiAoZGVzY19zeW1ib2wgPT0gTlVM TCkKKyAgICByZXR1cm47CisgIGppdF9kZXNjcmlwdG9yX2FkZHIgPSBTWU1C T0xfVkFMVUVfQUREUkVTUyAoZGVzY19zeW1ib2wpOworICBpZiAoaml0X2Rl c2NyaXB0b3JfYWRkciA9PSAwKQorICAgIHJldHVybjsKKworICAvKiBSZWFk IHRoZSBkZXNjcmlwdG9yIHNvIHdlIGNhbiBjaGVjayB0aGUgdmVyc2lvbiBu dW1iZXIgYW5kIGxvYWQgYW55IGFscmVhZHkKKyAgICAgSklUZWQgZnVuY3Rp b25zLiAgKi8KKyAgaml0X3JlYWRfZGVzY3JpcHRvciAoJmRlc2NyaXB0b3Ip OworCisgIC8qIENoZWNrIHRoYXQgdGhlIHZlcnNpb24gbnVtYmVyIGFncmVl cyB3aXRoIHRoYXQgd2Ugc3VwcG9ydC4gICovCisgIGlmIChkZXNjcmlwdG9y LnZlcnNpb24gIT0gMSkKKyAgICBlcnJvciAoXygiVW5zdXBwb3J0ZWQgSklU IHByb3RvY29sIHZlcnNpb24gaW4gZGVzY3JpcHRvciEiKSk7CisKKyAgLyog UHV0IGEgYnJlYWtwb2ludCBpbiB0aGUgcmVnaXN0cmF0aW9uIHN5bWJvbC4g ICovCisgIGNyZWF0ZV9qaXRfZXZlbnRfYnJlYWtwb2ludCAodGFyZ2V0X2dk YmFyY2gsIHJlZ19hZGRyKTsKKworICAvKiBJZiB3ZSd2ZSBhdHRhY2hlZCB0 byBhIHJ1bm5pbmcgcHJvZ3JhbSwgd2UgbmVlZCB0byBjaGVjayB0aGUgZGVz Y3JpcHRvciB0bworICAgICByZWdpc3RlciBhbnkgZnVuY3Rpb25zIHRoYXQg d2VyZSBhbHJlYWR5IGdlbmVyYXRlZC4gICovCisgIGZvciAoY3VyX2VudHJ5 X2FkZHIgPSBkZXNjcmlwdG9yLmZpcnN0X2VudHJ5OworICAgICAgIGN1cl9l bnRyeV9hZGRyICE9IDA7CisgICAgICAgY3VyX2VudHJ5X2FkZHIgPSBjdXJf ZW50cnkubmV4dF9lbnRyeSkKKyAgICB7CisgICAgICBqaXRfcmVhZF9jb2Rl X2VudHJ5IChjdXJfZW50cnlfYWRkciwgJmN1cl9lbnRyeSk7CisgICAgICBq aXRfcmVnaXN0ZXJfY29kZSAoY3VyX2VudHJ5X2FkZHIsICZjdXJfZW50cnkp OworICAgIH0KK30KKworLyogV3JhcHBlciB0byBtYXRjaCB0aGUgb2JzZXJ2 ZXIgZnVuY3Rpb24gcG9pbnRlciBwcm90b3R5cGUuICAqLworCitzdGF0aWMg dm9pZAoraml0X2luZmVyaW9yX2NyZWF0ZWRfaG9vazEgKHN0cnVjdCB0YXJn ZXRfb3BzICpvYmpmaWxlLCBpbnQgZnJvbV90dHkpCit7CisgIGppdF9pbmZl cmlvcl9jcmVhdGVkX2hvb2sgKCk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24g Y2xlYW5zIHVwIGFueSBjb2RlIGVudHJpZXMgbGVmdCBvdmVyIHdoZW4gdGhl IGluZmVyaW9yIGV4aXRzLgorICAgV2UgZ2V0IGxlZnQgb3ZlciBjb2RlIHdo ZW4gdGhlIGluZmVyaW9yIGV4aXRzIHdpdGhvdXQgdW5yZWdpc3RlcmluZyBp dHMgY29kZSwKKyAgIGZvciBleGFtcGxlIHdoZW4gaXQgY3Jhc2hlcy4gICov CisKK3N0YXRpYyB2b2lkCitqaXRfaW5mZXJpb3JfZXhpdF9ob29rIChpbnQg cGlkKQoreworICBzdHJ1Y3Qgb2JqZmlsZSAqb2JqZjsKKyAgc3RydWN0IG9i amZpbGUgKnRlbXA7CisKKyAgLyogV2UgbmVlZCB0byByZXNldCB0aGUgZGVz Y3JpcHRvciBhZGRyIHNvIHRoYXQgbmV4dCB0aW1lIHdlIGxvYWQgdXAgdGhl CisgICAgIGluZmVyaW9yIHdlIGxvb2sgZm9yIGl0IGFnYWluLiAgKi8KKyAg aml0X2Rlc2NyaXB0b3JfYWRkciA9IDA7CisKKyAgQUxMX09CSkZJTEVTX1NB RkUgKG9iamYsIHRlbXApCisgICAgaWYgKG9iamZpbGVfZGF0YSAob2JqZiwg aml0X29iamZpbGVfZGF0YSkgIT0gTlVMTCkKKyAgICAgIGppdF91bnJlZ2lz dGVyX2NvZGUgKG9iamYpOworfQorCit2b2lkCitqaXRfZXZlbnRfaGFuZGxl ciAodm9pZCkKK3sKKyAgc3RydWN0IGppdF9kZXNjcmlwdG9yIGRlc2NyaXB0 b3I7CisgIHN0cnVjdCBqaXRfY29kZV9lbnRyeSBjb2RlX2VudHJ5OworICBD T1JFX0FERFIgZW50cnlfYWRkcjsKKyAgc3RydWN0IG9iamZpbGUgKm9iamY7 CisgIHN0cnVjdCBvYmpmaWxlICp0ZW1wOworCisgIC8qIFJlYWQgdGhlIGRl c2NyaXB0b3IgZnJvbSByZW1vdGUgbWVtb3J5LiAgKi8KKyAgaml0X3JlYWRf ZGVzY3JpcHRvciAoJmRlc2NyaXB0b3IpOworICBlbnRyeV9hZGRyID0gZGVz Y3JpcHRvci5yZWxldmFudF9lbnRyeTsKKworICAvKiBEbyB0aGUgY29ycmVz cG9uZGluZyBhY3Rpb24uICovCisgIHN3aXRjaCAoZGVzY3JpcHRvci5hY3Rp b25fZmxhZykKKyAgICB7CisgICAgY2FzZSBKSVRfTk9BQ1RJT046CisgICAg ICBicmVhazsKKyAgICBjYXNlIEpJVF9SRUdJU1RFUjoKKyAgICAgIGppdF9y ZWFkX2NvZGVfZW50cnkgKGVudHJ5X2FkZHIsICZjb2RlX2VudHJ5KTsKKyAg ICAgIGppdF9yZWdpc3Rlcl9jb2RlIChlbnRyeV9hZGRyLCAmY29kZV9lbnRy eSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEpJVF9VTlJFR0lTVEVSOgor ICAgICAgLyogTG9vayB1cCB0aGUgb2JqZmlsZSB3aXRoIHRoaXMgY29kZSBl bnRyeSBhZGRyZXNzLiAgKi8KKyAgICAgIEFMTF9PQkpGSUxFU19TQUZFIChv YmpmLCB0ZW1wKQorICAgICAgICB7CisgICAgICAgICAgaWYgKG9iamZpbGVf ZGF0YSAob2JqZiwgaml0X29iamZpbGVfZGF0YSkgPT0gKHZvaWQgKikgZW50 cnlfYWRkcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaml0X3Vu cmVnaXN0ZXJfY29kZSAob2JqZik7CisgICAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgcHJpbnRmX3VuZmls dGVyZWQgKCJVbmFibGUgdG8gZmluZCBKSVRlZCBjb2RlIGVudHJ5IGF0IGFk ZHJlc3M6ICVwXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lk ICopIGVudHJ5X2FkZHIpOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK KyAgICAgIGVycm9yIChfKCJVbmtub3duIGFjdGlvbl9mbGFnIHZhbHVlIGlu IEpJVCBkZXNjcmlwdG9yISIpKTsKKyAgICAgIGJyZWFrOworICAgIH0KK30K KworLyogUHJvdmlkZSBhIHByb3RvdHlwZSB0byBzaWxlbmNlIC1XbWlzc2lu Zy1wcm90b3R5cGVzLiAgKi8KKworZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVf aml0ICh2b2lkKTsKKwordm9pZAorX2luaXRpYWxpemVfaml0ICh2b2lkKQor eworICBvYnNlcnZlcl9hdHRhY2hfaW5mZXJpb3JfY3JlYXRlZCAoaml0X2lu ZmVyaW9yX2NyZWF0ZWRfaG9vazEpOworICBvYnNlcnZlcl9hdHRhY2hfaW5m ZXJpb3JfZXhpdCAoaml0X2luZmVyaW9yX2V4aXRfaG9vayk7CisgIGppdF9v YmpmaWxlX2RhdGEgPSByZWdpc3Rlcl9vYmpmaWxlX2RhdGEgKCk7Cit9Cklu ZGV4OiBnZGIvaml0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogZ2RiL2ppdC5oCmRpZmYgLU4gZ2RiL2ppdC5oCi0tLSAvZGV2L251bGwJ MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgZ2RiL2ppdC5oCTI0IEp1 bCAyMDA5IDIzOjM0OjQxIC0wMDAwCkBAIC0wLDAgKzEsNzcgQEAKKy8qIEpJ VCBkZWNsYXJhdGlvbnMgZm9yIEdEQiwgdGhlIEdOVSBEZWJ1Z2dlci4KKwor ICAgQ29weXJpZ2h0IChDKSAyMDA5CisgICBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgor CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEpJVF9I CisjZGVmaW5lIEpJVF9ICisKKy8qIFdoZW4gdGhlIEpJVCBicmVha3BvaW50 IGZpcmVzLCB0aGUgaW5mZXJpb3Igd2FudHMgdXMgdG8gdGFrZSBvbmUgb2Yg dGhlc2UKKyAgIGFjdGlvbnMuICBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgYnkg dGhlIGluZmVyaW9yLCBzbyB0aGUgdmFsdWVzIG9mIHRoZXNlIGVudW1zCisg ICBjYW5ub3QgYmUgY2hhbmdlZC4gICovCisKK3R5cGVkZWYgZW51bQorewor ICBKSVRfTk9BQ1RJT04gPSAwLAorICBKSVRfUkVHSVNURVIsCisgIEpJVF9V TlJFR0lTVEVSCit9IGppdF9hY3Rpb25zX3Q7CisKKy8qIFRoaXMgc3RydWN0 IGRlc2NyaWJlcyBhIHNpbmdsZSBzeW1ib2wgZmlsZSBpbiBhIGxpbmtlZCBs aXN0IG9mIHN5bWJvbCBmaWxlcworICAgZGVzY3JpYmluZyBnZW5lcmF0ZWQg Y29kZS4gIEFzIHRoZSBpbmZlcmlvciBnZW5lcmF0ZXMgY29kZSwgaXQgYWRk cyB0aGVzZQorICAgZW50cmllcyB0byB0aGUgbGlzdCwgYW5kIHdoZW4gd2Ug YXR0YWNoIHRvIHRoZSBpbmZlcmlvciwgd2UgcmVhZCB0aGVtIGFsbC4KKyAg IEZvciB0aGUgZmlyc3QgZWxlbWVudCBwcmV2X2VudHJ5IHNob3VsZCBiZSBO VUxMLCBhbmQgZm9yIHRoZSBsYXN0IGVsZW1lbnQKKyAgIG5leHRfZW50cnkg c2hvdWxkIGJlIE5VTEwuICAqLworCitzdHJ1Y3Qgaml0X2NvZGVfZW50cnkK K3sKKyAgQ09SRV9BRERSIG5leHRfZW50cnk7CisgIENPUkVfQUREUiBwcmV2 X2VudHJ5OworICBDT1JFX0FERFIgc3ltZmlsZV9hZGRyOworICB1aW50NjRf dCBzeW1maWxlX3NpemU7Cit9OworCisvKiBUaGlzIGlzIHRoZSBnbG9iYWwg ZGVzY3JpcHRvciB0aGF0IHRoZSBpbmZlcmlvciB1c2VzIHRvIGNvbW11bmlj YXRlCisgICBpbmZvcm1hdGlvbiB0byB0aGUgZGVidWdnZXIuICBUbyBhbGVy dCB0aGUgZGVidWdnZXIgdG8gdGFrZSBhbiBhY3Rpb24sIHRoZQorICAgaW5m ZXJpb3Igc2V0cyB0aGUgYWN0aW9uX2ZsYWcgdG8gdGhlIGFwcHJvcHJpYXRl IGVudW0gdmFsdWUsIHVwZGF0ZXMKKyAgIHJlbGV2YW50X2VudHJ5IHRvIHBv aW50IHRvIHRoZSByZWxldmFudCBjb2RlIGVudHJ5LCBhbmQgY2FsbHMgdGhl IGZ1bmN0aW9uIGF0CisgICB0aGUgd2VsbC1rbm93biBzeW1ib2wgd2l0aCBv dXIgYnJlYWtwb2ludC4gIFdlIHRoZW4gcmVhZCB0aGlzIGRlc2NyaXB0b3Ig ZnJvbQorICAgYW5vdGhlciBnbG9iYWwgd2VsbC1rbm93biBzeW1ib2wuICAq LworCitzdHJ1Y3Qgaml0X2Rlc2NyaXB0b3IKK3sKKyAgdWludDMyX3QgdmVy c2lvbjsKKyAgLyogVGhpcyBzaG91bGQgYmUgaml0X2FjdGlvbnNfdCwgYnV0 IHdlIHdhbnQgdG8gYmUgc3BlY2lmaWMgYWJvdXQgdGhlCisgICAgIGJpdC13 aWR0aC4gICovCisgIHVpbnQzMl90IGFjdGlvbl9mbGFnOworICBDT1JFX0FE RFIgcmVsZXZhbnRfZW50cnk7CisgIENPUkVfQUREUiBmaXJzdF9lbnRyeTsK K307CisKKy8qIExvb2tzIGZvciB0aGUgZGVzY3JpcHRvciBhbmQgcmVnaXN0 cmF0aW9uIHN5bWJvbHMgYW5kIGJyZWFrcG9pbnRzIHRoZQorICAgcmVnaXN0 cmF0aW9uIGZ1bmN0aW9uLiAgSWYgaXQgZmluZHMgYm90aCwgaXQgcmVnaXN0 ZXJzIGFsbCB0aGUgYWxyZWFkeSBKSVRlZAorICAgY29kZS4gIElmIGl0IGhh cyBhbHJlYWR5IGZvdW5kIHRoZSBzeW1ib2xzLCB0aGVuIGl0IGRvZXNuJ3Qg dHJ5IGFnYWluLiAgKi8KKworZXh0ZXJuIHZvaWQgaml0X2luZmVyaW9yX2Ny ZWF0ZWRfaG9vayAodm9pZCk7CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIGJ5IGhhbmRsZV9pbmZlcmlvcl9ldmVudCB3aGVuIGl0IGRlY2lkZXMg dGhhdCB0aGUgSklUCisgICBldmVudCBicmVha3BvaW50IGhhcyBmaXJlZC4g ICovCisKK2V4dGVybiB2b2lkIGppdF9ldmVudF9oYW5kbGVyICh2b2lkKTsK KworI2VuZGlmIC8qIEpJVF9IICovCkluZGV4OiBnZGIvb2JqZmlsZXMuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMv Z2RiL29iamZpbGVzLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODcKZGlm ZiAtdSAtcCAtdSAtcjEuODcgb2JqZmlsZXMuYwotLS0gZ2RiL29iamZpbGVz LmMJMjIgSnVsIDIwMDkgMTk6MjE6MzEgLTAwMDAJMS44NworKysgZ2RiL29i amZpbGVzLmMJMjQgSnVsIDIwMDkgMjM6MzQ6NDEgLTAwMDAKQEAgLTI1LDYg KzI1LDcgQEAKIAogI2luY2x1ZGUgImRlZnMuaCIKICNpbmNsdWRlICJiZmQu aCIJCS8qIEJpbmFyeSBGaWxlIERlc2NyaXB0aW9uICovCisjaW5jbHVkZSAi bGliYmZkLmgiCiAjaW5jbHVkZSAic3ltdGFiLmgiCiAjaW5jbHVkZSAic3lt ZmlsZS5oIgogI2luY2x1ZGUgIm9iamZpbGVzLmgiCkBAIC00MzgsOSArNDM5 LDE5IEBAIGZyZWVfb2JqZmlsZSAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUp CiAgIGlmIChvYmpmaWxlLT5vYmZkICE9IE5VTEwgJiYgIShvYmpmaWxlLT5m bGFncyAmIE9CSkZfS0VFUEJGRCkpCiAgICAgewogICAgICAgY2hhciAqbmFt ZSA9IGJmZF9nZXRfZmlsZW5hbWUgKG9iamZpbGUtPm9iZmQpOworICAgICAg c3RydWN0IGJmZF9pbl9tZW1vcnkgKmJpbSA9IE5VTEw7CisgICAgICAvKiBI YWNrIHRvIHdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgQkZEIGRvZXMgbm90 IHRha2Ugb3duZXJzaGlwIG9mIHRoZQorICAgICAgICAgbWVtb3J5IGZvciBm aWxlcyBhbGxvY2F0ZWQgaW4gbWVtb3J5LiAgKi8KKyAgICAgIGlmIChvYmpm aWxlLT5vYmZkLT5mbGFncyAmIEJGRF9JTl9NRU1PUlkpCisgICAgICAgIGJp bSA9IChzdHJ1Y3QgYmZkX2luX21lbW9yeSAqKSBvYmpmaWxlLT5vYmZkLT5p b3N0cmVhbTsKICAgICAgIGlmICghYmZkX2Nsb3NlIChvYmpmaWxlLT5vYmZk KSkKIAl3YXJuaW5nIChfKCJjYW5ub3QgY2xvc2UgXCIlc1wiOiAlcyIpLAog CQkgbmFtZSwgYmZkX2Vycm1zZyAoYmZkX2dldF9lcnJvciAoKSkpOworICAg ICAgaWYgKGJpbSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgeGZy ZWUgKGJpbS0+YnVmZmVyKTsKKyAgICAgICAgICB4ZnJlZSAoYmltKTsKKyAg ICAgICAgfQogICAgICAgeGZyZWUgKG5hbWUpOwogICAgIH0KIAo= --001485f33676239d24046f7c1e99--