From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 75371 invoked by alias); 26 Feb 2015 03:09:32 -0000 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 Received: (qmail 75349 invoked by uid 89); 26 Feb 2015 03:09:28 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.0 required=5.0 tests=AWL,BAYES_50,RCVD_IN_DNSWL_LOW,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mail-ig0-f181.google.com Received: from mail-ig0-f181.google.com (HELO mail-ig0-f181.google.com) (209.85.213.181) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 26 Feb 2015 03:09:21 +0000 Received: by mail-ig0-f181.google.com with SMTP id hn18so11368002igb.2 for ; Wed, 25 Feb 2015 19:09:18 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=D+Gxtv3F8ZtXSVNTXK7hiwGGRpZyxYgt26b5ub/dIIQ=; b=cpdejcsK0zkDCDnvX3XrlHm9f6lKXtzy+q5MX/I0uKJhb3HOByWMnJaU/XoI3Jm9ic lG4kFM6MsEg3q58X+ANjCYM1UxuiCCZQM/Kayp1ujnWS3ZiIkdA4LJmo9m9dhdy9sXfY n1QqffakIKpHBOggLiOqJbwXVCUDWPRlUPKWlI/t6Jrjsq/PW5l2k36sIH051hIxZSZ1 VbRjcYA9e/0r9Us/iM/VDwU7pW9EqXinfRMKXwr/V2k4/C4j+XjaI0ckDIDlb1XMbrX5 SBDBBI+LiusOOFqjbitBf56RBCyZ9WOiIftrLk/yNyceZozn9Beoahr++i+N5AA+QTs6 j1UQ== X-Gm-Message-State: ALoCoQkpbh6Awt3mnQzUc8TLxgHFKUXGDN5DaAdJ687+Soqazx5p9v+VldrUgfVulFdWGXEEkjZC MIME-Version: 1.0 X-Received: by 10.107.137.101 with SMTP id l98mr8905902iod.23.1424920158394; Wed, 25 Feb 2015 19:09:18 -0800 (PST) Received: by 10.64.227.110 with HTTP; Wed, 25 Feb 2015 19:09:18 -0800 (PST) In-Reply-To: <54E71694.1080304@redhat.com> References: <21714.40641.510825.30998@ruffy2.mtv.corp.google.com> <54E71694.1080304@redhat.com> Date: Thu, 26 Feb 2015 03:09:00 -0000 Message-ID: Subject: Re: [RFC] [PATCH] Provide the ability to write the frame unwinder in Python From: Alexander Smundak To: Phil Muldoon Cc: Doug Evans , gdb-patches Content-Type: multipart/mixed; boundary=001a113ed540e02176050ff513b4 X-SW-Source: 2015-02/txt/msg00735.txt.bz2 --001a113ed540e02176050ff513b4 Content-Type: text/plain; charset=UTF-8 Content-length: 13626 Here's another round. I am not sure who will be the reviewer this time. >>> Is it possible to see the code, and example usage, of a real-life use-case >>> of this? That will help folks not familiar with this project to understand >>> the problem we are trying to solve. > > I agree. > >> The full implementation of the combined sniffer/frame filter for OpenJDK >> is about 2500 lines and will eventually become part of it. I am waiting for >> this GDB patch to be reviewed before I can present it to be reviewed by >> the JDK community :-) I am going to publish it on openjdk.java.net site once the site's admin updates my credentials. > You could expand the testcase a little? I have revised it really 'a little', i.e., there is more than one frame with broken previous frame link, causing standard unwinders to fail, but I am not sure it's enough. On the other hand, this is a test, making it too complex would make it harder to debug. > Please make errors a complete sentence with capitalization and > punctuation. Done. > + > + def list_sniffers(self, title, sniffers, name_re): > + """Lists the sniffers whose name matches regexp. > + > + Arguments: > + title: The line to print before the list. > + sniffers: The list of the sniffers. > + name_re: sniffer name filter. > + """ > + if not sniffers: > + return > + print title > + for sniffer in sniffers: > + if name_re.match(sniffer.name): > + print(" %s%s" % (sniffer.name, > + "" if sniffer.enabled else "[disabled]")) > + > + def invoke(self, arg, from_tty): > + locus_re, name_re = parse_sniffer_command_args(arg) > > I think parse_sniffer_command_args should error if the loci is not > global, progspace or objectfile. Either that or the default to object > file should be documented here, and in the parse_sniffer_command_args > function. Not sure what you mean -- locus can be either a literal "global", a literal "progspace", or a regex to match object file name. > + if locus_re.match("global"): > + self.list_sniffers("global sniffers:", gdb.frame_sniffers, > + name_re) > + if locus_re.match("progspace"): > + cp = gdb.current_progspace() > + self.list_sniffers("progspace %s sniffers:" % cp.filename, > + cp.frame_sniffers, name_re) > + for objfile in gdb.objfiles(): > > There seems no way *not* to parse object files for sniffers? Say I set > the loci to "global", that's what I want. Given there could be 1000s > of object files, I think this default is a bit odd? I might be > misunderstanding though. >From the point of view of the output, issuing `info sniffer global' will yield confusing result if the current progspace happens to contain an object file with filename 'global' exactly. IMHO it's not a big deal, especially taking into account that object file names tend to be absolute paths (the only one I've seen so far not having an absolute path has filename "system-supplied DSO at 0x7ffff7ffa000". As to the concerns about the performance: frankly, I've patterned the code after pretty_printers.py in the same directory, thinking that if the performance of the 'info sniffer global' will be on par with that of 'info pretty-printer global'. > +def do_enable_sniffer(arg, flag): > + """Enable/disable sniffer(s).""" > + (locus_re, name_re) = parse_sniffer_command_args(arg) > + total = 0 > + if locus_re.match("global"): > + total += do_enable_sniffer1(gdb.frame_sniffers, name_re, flag) > + if locus_re.match("progspace"): > + total += do_enable_sniffer1(gdb.current_progspace().frame_sniffers, > + name_re, flag) > + for objfile in gdb.objfiles(): > > Again, in an environment where there may be many object files this seems > a rather wasteful search if I set the loci to "global", and then we > search all object files pointlessly? Judging by the experiments dje@ asked me to conduct, the performance impact is fairly small, while the effort to maintain the exact list of the curently enabled sniffers is non-trivial. I can conduct additional experiments with thousands of object files to see if it's worth it. > + if locus_re.match(objfile.filename): > + total += do_enable_sniffer1(objfile.frame_sniffers, name_re, > + flag) > + print("%d sniffer%s %s" % (total, "" if total == 1 else "s", > + "enabled" if flag else "disabled")) > > > +def execute_sniffers(sniffer_info): > + """Internal function called from GDB to execute all sniffers. > + > + Runs each currently enabled sniffer until it finds the one that can > + unwind given frame. > + > + Arguments: > + sniffer_info: an instance of gdb.SnifferInfo. > + Returns: > + Unwind info or None. See the description of the value returned > + by Sniffer.__call__ below. > + """ > + for objfile in gdb.objfiles(): > + for sniffer in objfile.frame_sniffers: > + if sniffer.enabled: > + unwind_info = sniffer.__call__(sniffer_info) > + if unwind_info is not None: > + return unwind_info > > I think we may need a priority system. We ran into this with frame > filters. Allow me to explain a scenario, and how a user might solve > it. I don't think there is much common between frame filters and frame sniffers. The output of a filter is passed to the next filter, whereas a sniffer just returns the previous frame, I am not sure why the output of one sniffer may be handed down to the next one. > Say in the future I am debugging openjdk, and the RPM on my Fedora > system installs a bunch of frame sniffers in the GDB auto-loading > path. So they get auto-loaded when the openjdk inferior is > loaded. Good, that's what I want. But what happens if I want to > register my own frame sniffer that does additional stuff? If a sniffer already knows how to unwind a frame, there is nothing more to do, and there is no need to override this (unless you are debugging the sniffer proper, but this IMHO is a corner case). This is quite different from the frame filters behavior. > --- /dev/null > +++ b/gdb/python/lib/gdb/sniffer.py > @@ -0,0 +1,113 @@ > +# Copyright (C) 2013-2015 > > This and others, 2015 only. Done. > + > +class Sniffer(object): > + """Base class (or a template) for frame sniffers written in Python. > + > + A sniffer has a single method __call__ and the attributes described below. > + > + Attributes: > + name: The name of the sniffer. > + enabled: A boolean indicating whether the sniffer is enabled. > > priority: The priority order of the sniffers > (If you go with the idea of a priority based system) > > > + Returns: > + (REG_DATA, FRAME_ID_REGNUMS) tuple, or None if this sniffer cannot > + unwind the frame. > + REG_DATA is a tuple containing the registers in the unwound frame. > + Each element in thr REG_DATA is a (REG_NUM, REG_VALUE) tuple, > + where REG_NUM is platform-specific register number, and REG_VALUE > + is register value (a gdb.Value instance). > > See below > > + FRAME_ID_REGNUMS is a tuple specifying the registers used > + to construct the frame ID. For instance, on x86_64, > + FRAME_ID_REGNUMS is (7, 16), as 7 is the stack pointer > + register (RSP), and 16 is the instruction pointer (RIP). > + FRAME_ID_REGNUMS is a (SP), (SP, PC), or (SP, PC, > SPECIAL) > > This seems like an internal detail exposed a little too much? Why not > return an object with the attributes SP, PC and SPECIAL? These could > be mapped from the Python API register methods talked of earlier in > the previous emails. These three registers are either returned (SP > looks to be the mandatory one), or not. No additional registers other > than the three listed will be included in FRAME_ID_REGNUMS? > > Does the actual number of the register matter here to the > user/implementer? You tell the user the register number for SP, PC > and SPECIAL as you populate them in tuple order. Why make the user > jump through hops to map values to those three register numbers from > REG_DATA when you could do it for them? You could still return an > attribute containing the tuple REG_DATA if they wanted to poke around > the other registers. It seem like, though, we don't tell them what the > other registers are, so only the three named are important. > > There could be a very good reason for this, but I cannot see it > myself. What do you think? > I am struggling to describe platform-specific stuff in a platform-independent manner. Perhaps a better approach would be to spell what a sniffer is expected to return for each platform (... denotes optional (regnum, regvalue) 2-tuples): x86_64: (((#RBP, $RBP), (#RSP, $RSP), (#RIP, $RIP), ...), (#RSP, #RIP)) where #RBP=6, #RSP=7, #RIP=16 x86: (((#EBP, $EBP), (#ESP, $ESP), (#EIP, $EIP), ...), (#ESP, #EIP)) where #EBP=5, #ESP=4, #EIP=8 PPC64: (((#R1, $R1), (#PC, $PC), ...), (#R1, #PC)) where #R1=1, #PC=64) I don't think it's too much to ask unwinder's author to return such tuples (BTW, it also shows the for x86 the sniffer is expected to return xBP in addition to xSP and xIP). Do you think it will be better if the expected values were documented per platform? > > + tuple, where SP, PC, and SPECIAL are register numbers. Depending > + on the tuple, Python sniffer support code uses internal GDB > + functions to construct frame ID as follows: > + (SP) frame_id_build_wild (Value(SP)) > + (SP, PC) frame_id_build (Value(SP), Value(PC)) > + (SP, PC, SPECIAL) frame_id_build_special (Value(SP), > + Value(PC), Value(SPECIAL) > + The registers in the FRAME_ID_REGNUMS tuple should be among those > + returned by REG_DATA. > + The chapter "Stack Frames" in the GDB Internals Guide describes > + frame ID. > + """ > + raise NotImplementedError("Sniffer __call__") > > There might be a super-class provided somewhere the implements the > comments above. So comments might apply there too. Not sure what you mean here, please elaborate. > +typedef struct > +{ > + struct frame_id frame_id; > + struct gdbarch *gdbarch; > + int reg_count; > + struct reg_info > + { > + int number; > + gdb_byte *data; > + } reg[]; > +} cached_frame_info; > > Each field in a struct needs to be documented. Commented cached_frame_info fields. > > +sniffer_infopy_read_register (PyObject *self, PyObject *args) > +{ > + volatile struct gdb_exception except; > + int regnum; > + struct value *val = NULL; > + > + if (!PyArg_ParseTuple (args, "i", ®num)) > + return NULL; > + > + TRY_CATCH (except, RETURN_MASK_ALL) > + { > + /* Calling `value_of_register' will result in infinite recursion. > + Call `deprecated_frame_register_read' instead. */ > > Can you explain this comment in more detail? > > + if (deprecated_frame_register_read (frame, regnum, buffer)) > + val = value_from_contents (register_type (gdbarch, regnum), buffer); > + if (val == NULL) > + { > + char *error_text > + = xstrprintf (_("Cannot read register %d from frame"), regnum); > + PyErr_SetString (PyExc_ValueError, error_text); > + xfree (error_text); > > I believe in this case you are overwriting the GDB generated exception > with a more generic error message. Don't do it. I have changed the code to validate `regnum' by calling `user_ret_map_regnum_to_name', but I am not sure which exception you mean. > +static PyObject * > +frame_info_to_sniffer_info_object (struct frame_info *frame) > +{ > + sniffer_info_object *sniffer_info > + = PyObject_New (sniffer_info_object, &sniffer_info_object_type); > + > + if (sniffer_info != NULL) > > This is a new object so you should unconditionally write the > attribute? Done. > +static int > +pyuw_parse_int (PyObject *pyo_int, int *valuep) > +{ > > There's an issue with Python 2.x and Python 3.x compatibility with > longs. Please see py-value.c:1447 comment and resulting logic to > ensure this works in both cases. Done. > +static int > +pyuw_sniffer (const struct frame_unwind *self, struct frame_info *this_frame, > + void **cache_ptr) > +... > + gdb_assert (*cache_ptr == NULL); > > Can you please document the assert, and the reason for it. Deleted this assert. > > + gdbarch = (void *)(self->unwind_data); > > This cast seems odd to me. Indeed. > + if (data_size != TYPE_LENGTH (value_enclosing_type (value))) > + { > + error (_("The value of the register #%d returned by the " > + "Python sniffer has unexpected size: %u instead " > + "of %u"), reg->number, > + (unsigned)(TYPE_LENGTH (value_enclosing_type (value))), > + (unsigned)data_size); > + } > > Can you please document this assert reason. I assume you mean the one on the line below: > + gdb_assert ((gdb_data_free + data_size) <= gdb_data_end); It's an overflow check -- is it redundant? The ChangeLog files remain unchanged since last round, and the new patch is attached. --001a113ed540e02176050ff513b4 Content-Type: text/plain; charset=US-ASCII; name="patch4.diff" Content-Disposition: attachment; filename="patch4.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i6lkn68f0 Content-length: 83636 ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5p bgppbmRleCA4YWRkZWY0Li4zNzczZTJjIDEwMDY0NAotLS0gYS9nZGIvTWFr ZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0zOTQsNiArMzk0 LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktc3ltdGFiLm8gXAog CXB5LXRocmVhZGV2ZW50Lm8gXAogCXB5LXR5cGUubyBcCisJcHktdW53aW5k Lm8gXAogCXB5LXV0aWxzLm8gXAogCXB5LXZhbHVlLm8gXAogCXB5LXZhcm9i ai5vCkBAIC00MzMsNiArNDM0LDcgQEAgU1VCRElSX1BZVEhPTl9TUkNTID0g XAogCXB5dGhvbi9weS1zeW10YWIuYyBcCiAJcHl0aG9uL3B5LXRocmVhZGV2 ZW50LmMgXAogCXB5dGhvbi9weS10eXBlLmMgXAorCXB5dGhvbi9weS11bndp bmQuYyBcCiAJcHl0aG9uL3B5LXV0aWxzLmMgXAogCXB5dGhvbi9weS12YWx1 ZS5jIFwKIAlweXRob24vcHktdmFyb2JqLmMKQEAgLTI2MDgsNiArMjYxMCwx MCBAQCBweS10eXBlLm86ICQoc3JjZGlyKS9weXRob24vcHktdHlwZS5jCiAJ JChDT01QSUxFKSAkKFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24v cHktdHlwZS5jCiAJJChQT1NUQ09NUElMRSkKIAorcHktdW53aW5kLm86ICQo c3JjZGlyKS9weXRob24vcHktdW53aW5kLmMKKwkkKENPTVBJTEUpICQoUFlU SE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS11bndpbmQuYworCSQo UE9TVENPTVBJTEUpCisKIHB5LXV0aWxzLm86ICQoc3JjZGlyKS9weXRob24v cHktdXRpbHMuYwogCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNy Y2RpcikvcHl0aG9uL3B5LXV0aWxzLmMKIAkkKFBPU1RDT01QSUxFKQpkaWZm IC0tZ2l0IGEvZ2RiL05FV1MgYi9nZGIvTkVXUwppbmRleCBmMTk1NzdhLi44 OTE1N2E0IDEwMDY0NAotLS0gYS9nZGIvTkVXUworKysgYi9nZGIvTkVXUwpA QCAtMTIsNiArMTIsNyBAQAogICAqKiBnZGIuT2JqZmlsZSBvYmplY3RzIGhh dmUgYSBuZXcgYXR0cmlidXRlICJ1c2VybmFtZSIsCiAgICAgIHdoaWNoIGlz IHRoZSBuYW1lIG9mIHRoZSBvYmpmaWxlIGFzIHNwZWNpZmllZCBieSB0aGUg dXNlciwKICAgICAgd2l0aG91dCwgZm9yIGV4YW1wbGUsIHJlc29sdmluZyBz eW1saW5rcy4KKyAgKiogWW91IGNhbiBub3cgd3JpdGUgZnJhbWUgdW53aW5k ZXJzIGluIFB5dGhvbi4KIAogKiBOZXcgY29tbWFuZHMKIApkaWZmIC0tZ2l0 IGEvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluIGIvZ2RiL2RhdGEt ZGlyZWN0b3J5L01ha2VmaWxlLmluCmluZGV4IGMwMWI4NmQuLjQ3YjQ5NTcg MTAwNjQ0Ci0tLSBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgor KysgYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KQEAgLTYyLDE3 ICs2MiwyMCBAQCBQWVRIT05fRklMRV9MSVNUID0gXAogCWdkYi9GcmFtZURl Y29yYXRvci5weSBcCiAJZ2RiL3R5cGVzLnB5IFwKIAlnZGIvcHJpbnRpbmcu cHkgXAorCWdkYi9zbmlmZmVyLnB5IFwKIAlnZGIvcHJvbXB0LnB5IFwKIAln ZGIveG1ldGhvZC5weSBcCiAJZ2RiL2NvbW1hbmQvX19pbml0X18ucHkgXAog CWdkYi9jb21tYW5kL3htZXRob2RzLnB5IFwKIAlnZGIvY29tbWFuZC9mcmFt ZV9maWx0ZXJzLnB5IFwKKwlnZGIvY29tbWFuZC9zbmlmZmVycy5weSBcCiAJ Z2RiL2NvbW1hbmQvdHlwZV9wcmludGVycy5weSBcCiAJZ2RiL2NvbW1hbmQv cHJldHR5X3ByaW50ZXJzLnB5IFwKIAlnZGIvY29tbWFuZC9wcm9tcHQucHkg XAogCWdkYi9jb21tYW5kL2V4cGxvcmUucHkgXAogCWdkYi9mdW5jdGlvbi9f X2luaXRfXy5weSBcCiAJZ2RiL2Z1bmN0aW9uL2NhbGxlcl9pcy5weSBcCisg ICAgICAgIGdkYi9mdW5jdGlvbi9zbmlmZmVycy5weSBcCiAJZ2RiL2Z1bmN0 aW9uL3N0cmZucy5weSBcCiAJZ2RiL3ByaW50ZXIvX19pbml0X18ucHkgXAog CWdkYi9wcmludGVyL2JvdW5kX3JlZ2lzdGVycy5weQpkaWZmIC0tZ2l0IGEv Z2RiL2RvYy9weXRob24udGV4aSBiL2dkYi9kb2MvcHl0aG9uLnRleGkKaW5k ZXggZDcyNWViMC4uNjI1MzdkMiAxMDA2NDQKLS0tIGEvZ2RiL2RvYy9weXRo b24udGV4aQorKysgYi9nZGIvZG9jL3B5dGhvbi50ZXhpCkBAIC0xNDQsNiAr MTQ0LDcgQEAgb3B0aW9uYWwgYXJndW1lbnRzIHdoaWxlIHNraXBwaW5nIG90 aGVycy4gIEV4YW1wbGU6CiAqIEZyYW1lIEZpbHRlciBBUEk6OiAgICAgICAg ICAgIEZpbHRlcmluZyBGcmFtZXMuCiAqIEZyYW1lIERlY29yYXRvciBBUEk6 OiAgICAgICAgIERlY29yYXRpbmcgRnJhbWVzLgogKiBXcml0aW5nIGEgRnJh bWUgRmlsdGVyOjogICAgICBXcml0aW5nIGEgRnJhbWUgRmlsdGVyLgorKiBV bndpbmRpbmcgRnJhbWVzIGluIFB5dGhvbjo6ICBXcml0aW5nIGEgZnJhbWUg dW53aW5kZXIgaW4gUHl0aG9uLgogKiBYbWV0aG9kcyBJbiBQeXRob246OiAg ICAgICAgICBBZGRpbmcgYW5kIHJlcGxhY2luZyBtZXRob2RzIG9mIEMrKyBj bGFzc2VzLgogKiBYbWV0aG9kIEFQSTo6ICAgICAgICAgICAgICAgICBYbWV0 aG9kIHR5cGVzLgogKiBXcml0aW5nIGFuIFhtZXRob2Q6OiAgICAgICAgICBX cml0aW5nIGFuIHhtZXRob2QuCkBAIC0yMTc4LDYgKzIxNzksMTAxIEBAIHBy aW50ZWQgaGllcmFyY2hpY2FsbHkuICBBbm90aGVyIGFwcHJvYWNoIHdvdWxk IGJlIHRvIGNvbWJpbmUgdGhlCiBtYXJrZXIgaW4gdGhlIGlubGluZWQgZnJh bWUsIGFuZCBhbHNvIHNob3cgdGhlIGhpZXJhcmNoaWNhbAogcmVsYXRpb25z aGlwLgogCitAbm9kZSBVbndpbmRpbmcgRnJhbWVzIGluIFB5dGhvbgorQHN1 YnN1YnNlY3Rpb24gVW53aW5kaW5nIEZyYW1lcyBpbiBQeXRob24KK0BjaW5k ZXggVW53aW5kaW5nIGZyYW1lcyBpbiBQeXRob24uCisKK0luIEdEQiB0ZXJt aW5vbG9neSBgYHVud2luZGluZycnIGlzIHRoZSBwcm9jZXNzIG9mIGZpbmRp bmcgdGhlCitwcmV2aW91cyBmcmFtZSAodGhhdCBpcywgY2FsbGVyJ3MpIGZy b20gdGhlIGN1cnJlbnQgb25lLiBBIHJ1bm5pbmcgR0RCCittYW50YWlucyBh IGxpc3Qgb2YgdGhlIHVud2luZGVycyBhbmQgY2FsbHMgZWFjaCB1bndpbmRl cidzIHNuaWZmZXIgaW4KK3R1cm4gdW50aWwgaXQgZmluZHMgdGhlIG9uZSB0 aGF0IHJlY29nbml6ZXMgdGhlIGN1cnJlbnQgZnJhbWUuIFRoZXJlCitpcyBh biBBUEkgdG8gcmVnaXN0ZXIgYW4gdW53aW5kZXIuCisKK1RoZSB1bndpbmRl cnMgdGhhdCBjb21lIHdpdGggR0RCIGhhbmRsZSBzdGFuZGFyZCBmcmFtZXMg Zm9yIGVhY2gKK3BsYXRmb3JtIHdoZXJlIEdEQiBpcyBydW5uaW5nLiBIb3dl dmVyLCBtaXhlZCBsYW5ndWFnZSBhcHBsaWNhdGlvbnMKKyhmb3IgZXhhbXBs ZSwgYW5kIGFwcGxpY2F0aW9uIHJ1bm5pbmcgSmF2YSBWaXJ0dWFsIE1hY2hp bmUpIHNvbWV0aW1lcwordXNlIGZyYW1lIGxheW91dHMgdGhhdCBjYW5ub3Qg YmUgaGFuZGxlZCBieSB0aGUgR0RCIHVud2luZGVycy4gWW91CitjYW4gd3Jp dGUgUHl0aG9uIGNvZGUgdGhhdCBjYW4gaGFuZGxlIHN1Y2ggY3VzdG9tIGZy YW1lcy4KKworWW91IGltcGxlbWVudCBhIHNuaWZmZXIgYXMgYSBjbGFzcyB3 aXRoIHdoaWNoIGhhcyB0d28gYXR0cmlidXRlcywKK0Bjb2Rle25hbWV9IGFu ZCBAY29kZXtlbmFibGVkfSwgd2l0aCBvYnZpb3VzIG1lYW5pbmdzLCBhbmQg YSBzaW5nbGUKK21ldGhvZCBAY29kZXtfX2NhbGxfX30sIHdoaWNoIGV4YW1p bmVzIGEgZ2l2ZW4gZnJhbWUgYW5kIHJldHVybnMgdGhlIGRhdGEKK2Rlc2Ny aWJpbmcgaXQgKHRoYXQgaXMsIHdoZW4gaXQgcmVjb2duaXplcyBpdCkuIEdE QiBjb21lcyB3aXRoIHRoZSBtb2R1bGUKK2NvbnRhaW5pbmcgdGhlIGJhc2Ug QGNvZGV7U25pZmZlcn0gY2xhc3MgZm9yIHRoYXQuIFRoZSBzbmlmZmVyIGxv b2tzIGFzCitmb2xsb3dzOgorQHNtYWxsZXhhbXBsZQorZnJvbSBnZGIuc25p ZmZlcnMgaW1wb3J0IFNuaWZmZXIKKworY2xhc3MgTXlTbmlmZmVyKFNuaWZm ZXIpOgorICAgIGRlZiBfX2luaXRfXyguLi4uKToKKyAgICAgICAgc3VwZXIo TXlTbmlmZmVyLCBzZWxmKS5fX2luaXRfX18oPGV4cGVjdHMgc25pZmZlciBu YW1lIGFyZ3VtZW50PikKKyAgICBkZWYgX19jYWxsX18oc25pZmZlcl9pbmZv KToKKyAgICAgICAgaWYgbm90IDx3ZSByZWNvZ25pemUgZnJhbWU+OgorICAg ICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgPGZpbmQgcHJldmlvdXMg ZnJhbWUgcmVnaXN0ZXJzPgorICAgICAgICByZXR1cm4gKDxyZWdpc3RlcnM+ LCA8ZnJhbWUgSUQgcmVnaXN0ZXJzPikKK0BlbmQgc21hbGxleGFtcGxlCisK K0BzdWJoZWFkaW5nIEV4YW1pbmluZyBUaGUgQ3VycmVudCBGcmFtZQorCitA dmFsdWV7R0RCTn0gcGFzc2VzIGEgQGNvZGV7Z2RiLlNuaWZmZXJJbmZvfSBp bnN0YW5jZSB3aGVuIGl0IGNhbGxzCitzbmlmZmVyJ3MgQGNvZGV7X19jYWxs X199IG1ldGhvZC4gVGhpcyBjbGFzcyBoYXMgYSBzaW5nbGUgbWV0aG9kOgor CitAZGVmdW4gU25pZmZlckluZm8ucmVhZF9yZWdpc3RlciAoc2VsZiwgcmVn bnVtKQorVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhl IHJlZ2lzdGVyIEB2YXJ7cmVnbnVtfSBpbiB0aGUKK2ZyYW1lIGFzIGEgQGNv ZGV7Z2RiLlZhbHVlfSBvYmplY3QuIEB2YXJ7cmVnbnVtfSB2YWx1ZXMgYXJl CitwbGF0Zm9ybS1zcGVjaWZpYy4gVGhleSBhcmUgdXN1YWxseSBkZWZpbmVk IGluIHRoZSBjb3JyZXNwb25kaW5nCit4eHgtQGNvZGV7dGRlcC5ofSBmaWxl IGluIHRoZSBnZGIgc291cmNlIHRyZWUuCitAZW5kIGRlZnVuCisKK0BzdWJo ZWFkaW5nIFJldHVybmluZyBQcmV2aW91cyBGcmFtZQorCitJZiBzbmlmZmVy J3MgQGNvZGV7X19jYWxsX199IG1ldGhvZCByZWNvZ25pemVzIHRoZSBmcmFt ZSwgaXQgc2hvdWxkCityZXR1cm4gYSAoQHZhcntyZWdpc3RlcnN9LCBAdmFy e2ZyYW1lX2lkX3JlZ2lzdGVyX251bWJlcnN9KSB0dXBsZS4KKworQHZhcnty ZWdpc3RlcnN9IGRlc2NyaWJlIHRoZSByZWdpc3RlcnMgdGhhdCBjYW4gYmUg dW53b3VuZCAoaS5lLiwgdGhlCityZWdpc3RlcnMgZnJvbSB0aGUgcHJldmlv dXMgZnJhbWUgdGhhdCBoYXZlIGJlZW4gc2F2ZWQgaW4gdGhlIGN1cnJlbnQK K2ZyYW1lIGRlc2NyaWJlZCBieSBAdmFye3NuaWZmZXJfaW5mb30pLiBJdCBp cyBhIHR1cGxlIHdoZXJlIGVhY2gKK2VsZW1lbnQgaXMgYSAoQHZhcntyZWdu dW19LCBAdmFye3JlZ2RhdGF9KSAyLXR1cGxlLiAgQHZhcntyZWdudW19IGlz CithIHJlZ2lzdGVyIG51bWJlciwgYW5kIEB2YXJ7cmVnZGF0YX0gaXMgcmVn aXN0ZXIgY29udGVudHMgKGEKK0Bjb2Rle2dkYi5WYWx1ZX0gb2JqZWN0KS4K KworQHZhcntmcmFtZV9pZF9yZWdpc3Rlcl9udW1iZXJzfSBpcyBhIHR1cGxl IHNwZWNpZnlpbmcgdGhlIHJlZ2lzdGVycwordXNlZCB0byBjb25zdHJ1Y3Qg ZnJhbWUgSUQgb2YgdGhlIHJldHVybmVkIGZyYW1lLiAgSXQgaXMgYSAoQHZh cntzcH0pLAorKEB2YXJ7c3B9LCBAdmFye3BjfSkgb3IgKEB2YXJ7c3B9LCBA dmFye3BjfSwgQHZhcntzcGVjaWFsfSkgdHVwbGUsCit3aGVyZSBAdmFye3Nw fSwgQHZhcntwY30sIEB2YXJ7c3BlY2lhbH0gYXJlIHJlZ2lzdGVyIG51bWJl cnMuIFRoZQorcmVmZXJlbmNlZCByZWdpc3RlcnMgc2hvdWxkIGJlIHByZXNl bnQgaW4gQHZhcntyZWdpc3RlcnN9IHR1cGxlLiBUaGUKK2ZyYW1lIElEIGlz IGNvbnN0cnVjdGVkIGJ5IGNhbGxpbmcKK0Bjb2Rle2ZyYW1lX2lkX2J1aWxk X3dpbGR9KEB2YXJ7dmFsdWV9KEB2YXJ7c3B9KSksCitAY29kZXtmcmFtZV9p ZF9idWlsZH0oQHZhcnt2YWx1ZX0oQHZhcntzcH0pLCBAdmFye3ZhbHVlfShA dmFye3BjfSkpLAorb3IgQGNvZGV7ZnJhbWVfaWRfYnVpbGR9KEB2YXJ7dmFs dWV9KEB2YXJ7c3B9KSwgQHZhcnt2YWx1ZX0oQHZhcntwY30pLAorQHZhcnt2 YWx1ZX0oQHZhcntzcGVjaWFsfSkpIHJlc3BlY3RpdmVseS4KKworQHN1Ymhl YWRpbmcgUmVnaXN0ZXJpbmcgYSBTbmlmZmVyCisKK0FuIG9iamVjdCBmaWxl LCBhIHByb2dyYW0gc3BhY2UsIGFuZCB0aGUgQHZhbHVle0dEQk59IHByb3Bl ciBjYW4gaGF2ZQorc25pZmZlcnMgcmVnaXN0ZXJlZCB3aXRoIGl0LgorCitU aGUgQGNvZGV7Z2RiLnNuaWZmZXJzfSBtb2R1bGUgcHJvdmlkZXMgdGhlIGZ1 bmN0aW9uIHRvIHJlZ2lzdGVyIGEKK3NuaWZmZXI6CisKK0BkZWZ1biBnZGIu c25pZmZlci5yZWdpc3Rlcl9zbmlmZmVyIChsb2N1cywgc25pZmZlciwgcmVw bGFjZT1GYWxzZSkKK0B2YXJ7bG9jdXN9IGlzIHNwZWNpZmllcyBhbiBvYmpl Y3QgZmlsZSBvciBhIHByb2dyYW0gc3BhY2UgdG8gd2hpY2gKK0B2YXJ7c25p ZmZlcn0gaXMgYWRkZWQuIFBhc3NpbmcgQGNvZGV7Tm9uZX0gb3IgQGNvZGV7 Z2RifSBhZGRzCitAdmFye3NuaWZmZXJ9IHRvIHRoZSBAdmFsdWV7R0RCTn0n cyBnbG9iYWwgc25pZmZlciBsaXN0LiAgVGhlIG5ld2x5CithZGRlZCBAdmFy e3NuaWZmZXJ9IHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgc25p ZmZlciBmcm9tIHRoZQorc2FtZSBsb2N1cy4gIFR3byBzbmlmZmVycyBpbiB0 aGUgc2FtZSBsb2N1cyBjYW5ub3QgaGF2ZSB0aGUgc2FtZQorbmFtZS4gQW4g YXR0ZW1wdCB0byBhZGQgYSBzbmlmZmVyIHdpdGggYWxyZWFkeSBleGlzdGlu ZyBuYW1lIHJhaXNlcyBhbgorZXhjZXB0aW9uIHVubGVzcyBAdmFye3JlcGxh Y2V9IGlzIEBjb2Rle1RydWV9LCBpbiB3aGljaCBjYXNlIHRoZSBvbGQKK3Nu aWZmZXIgaXMgZGVsZXRlZC4KK0BlbmQgZGVmdW4KKworQHN1YmhlYWRpbmcg U25pZmZlciBQcmVjZWRlbmNlCisKK0B2YWx1ZXtHREJOfSBmaXJzdCBjYWxs cyB0aGUgc25pZmZlcnMgZnJvbSBhbGwgdGhlIG9iamVjdCBmaWxlcyBpbiBu bworcGFydGljdWxhciBvcmRlciwgdGhlbiB0aGUgc25pZmZlcnMgZnJvbSB0 aGUgY3VycmVudCBwcm9ncmFtIHNwYWNlLAorYW5kIGZpbmFsbHkgdGhlIHNu aWZmZXJzIGZyb20gQHZhbHVle0dEQk59LgorCiBAbm9kZSBYbWV0aG9kcyBJ biBQeXRob24KIEBzdWJzdWJzZWN0aW9uIFhtZXRob2RzIEluIFB5dGhvbgog QGNpbmRleCB4bWV0aG9kcyBpbiBQeXRob24KZGlmZiAtLWdpdCBhL2dkYi9w eXRob24vbGliL2dkYi9fX2luaXRfXy5weSBiL2dkYi9weXRob24vbGliL2dk Yi9fX2luaXRfXy5weQppbmRleCA5MmIwNmYyLi44ZDdmNjUxIDEwMDY0NAot LS0gYS9nZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKKysrIGIvZ2Ri L3B5dGhvbi9saWIvZ2RiL19faW5pdF9fLnB5CkBAIC03MSw2ICs3MSw4IEBA IHR5cGVfcHJpbnRlcnMgPSBbXQogeG1ldGhvZHMgPSBbXQogIyBJbml0aWFs IGZyYW1lIGZpbHRlcnMuCiBmcmFtZV9maWx0ZXJzID0ge30KKyMgSW5pdGlh bCBmcmFtZSBzbmlmZmVycy4KK2ZyYW1lX3NuaWZmZXJzID0gW10KIAogIyBD b252ZW5pZW5jZSB2YXJpYWJsZSB0byBHREIncyBweXRob24gZGlyZWN0b3J5 CiBQWVRIT05ESVIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1l KF9fZmlsZV9fKSkKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vbGliL2dkYi9j b21tYW5kL3NuaWZmZXJzLnB5IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1h bmQvc25pZmZlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uYWQ3ZjY5MwotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9weXRob24v bGliL2dkYi9jb21tYW5kL3NuaWZmZXJzLnB5CkBAIC0wLDAgKzEsMTk4IEBA CisjIFNuaWZmZXIgY29tbWFuZHMuCisjIENvcHlyaWdodCAyMDE1IEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2Yg dGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgor CitpbXBvcnQgZ2RiCitpbXBvcnQgcmUKKworCitkZWYgdmFsaWRhdGVfcmVn ZXhwKGV4cCwgaWRzdHJpbmcpOgorICAgIHRyeToKKyAgICAgICAgcmV0dXJu IHJlLmNvbXBpbGUoZXhwKQorICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAg ICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIkludmFsaWQgJXMgcmVnZXhwOiAl cy4iICUgKGlkc3RyaW5nLCBleHApKQorCisKK2RlZiBwYXJzZV9zbmlmZmVy X2NvbW1hbmRfYXJncyhhcmcpOgorICAgICIiIkludGVybmFsIHV0aWxpdHkg dG8gcGFyc2Ugc25pZmZlciBjb21tYW5kIGFyZ3YuCisKKyAgICBBcmd1bWVu dHM6CisgICAgICAgIGFyZzogVGhlIGFyZ3VtZW50cyB0byB0aGUgY29tbWFu ZC4gVGhlIGZvcm1hdCBpczoKKyAgICAgICAgICAgICBbbG9jdXMtcmVnZXhw IFtuYW1lLXJlZ2V4cF1dCisKKyAgICBSZXR1cm5zOgorICAgICAgICBBIDIt dHVwbGUgb2YgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9ucy4KKworICAg IFJhaXNlczoKKyAgICAgICAgU3ludGF4RXJyb3I6IGFuIGVycm9yIHByb2Nl c3NpbmcgQVJHCisgICAgIiIiCisKKyAgICBhcmd2ID0gZ2RiLnN0cmluZ190 b19hcmd2KGFyZykKKyAgICBhcmdjID0gbGVuKGFyZ3YpCisgICAgaWYgYXJn YyA+IDI6CisgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJUb28gbWFueSBh cmd1bWVudHMuIikKKyAgICBsb2N1c19yZWdleHAgPSAiIgorICAgIG5hbWVf cmVnZXhwID0gIiIKKyAgICBpZiBhcmdjID49IDE6CisgICAgICAgIGxvY3Vz X3JlZ2V4cCA9IGFyZ3ZbMF0KKyAgICAgICAgaWYgYXJnYyA+PSAyOgorICAg ICAgICAgICAgbmFtZV9yZWdleHAgPSBhcmd2WzFdCisgICAgcmV0dXJuICh2 YWxpZGF0ZV9yZWdleHAobG9jdXNfcmVnZXhwLCAibG9jdXMiKSwKKyAgICAg ICAgICAgIHZhbGlkYXRlX3JlZ2V4cChuYW1lX3JlZ2V4cCwgInNuaWZmZXIi KSkKKworCitjbGFzcyBJbmZvU25pZmZlcihnZGIuQ29tbWFuZCk6CisgICAg IiIiR0RCIGNvbW1hbmQgdG8gbGlzdCBzbmlmZmVycy4KKworICAgIFVzYWdl OiBpbmZvIHNuaWZmZXIgW2xvY3VzLXJlZ2V4cCBbbmFtZS1yZWdleHBdXQor CisgICAgTE9DVVMtUkVHRVhQIGlzIGEgcmVndWxhciBleHByZXNzaW9uIG1h dGNoaW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUKKyAgICBzbmlmZmVyLiAgSWYg aXQgaXMgb21pdHRlZCwgYWxsIHJlZ2lzdGVyZWQgc25pZmZlcnMgZnJvbSBh bGwgbG9jaQorICAgIGFyZSBsaXN0ZWQuICBBIGxvY3VzIGNvdWxkIGJlICdn bG9iYWwnLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgIG1hdGNoaW5nIHRo ZSBjdXJyZW50IHByb2dyYW0gc3BhY2UncyBmaWxlbmFtZSwgb3IgYSByZWd1 bGFyCisgICAgZXhwcmVzc2lvbiBtYXRjaGluZyBmaWxlbmFtZXMgb2Ygb2Jq ZmlsZXMuICBMb2N1cyBjb3VsZCBiZQorICAgICdwcm9nc3BhY2UnIHRvIHNw ZWNpZnkgdGhhdCBvbmx5IHNuaWZmZXJzIGZyb20gdGhlIGN1cnJlbnQKKyAg ICBwcm9nc3BhY2Ugc2hvdWxkIGJlIGxpc3RlZC4KKworICAgIE5BTUUtUkVH RVhQIGlzIGEgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbHRlciBzbmlmZmVy IG5hbWVzLgorICAgIElmIHRoaXMgb21pdHRlZCBmb3IgYSBzcGVjaWZpZWQg bG9jdXMsIHRoZW4gYWxsIHJlZ2lzdGVyZWQKKyAgICBzbmlmZmVycyBpbiB0 aGUgbG9jdXMgYXJlIGxpc3RlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2lu aXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoSW5mb1NuaWZmZXIsIHNlbGYp Ll9faW5pdF9fKCJpbmZvIHNuaWZmZXIiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfREFUQSkKKwor ICAgIGRlZiBsaXN0X3NuaWZmZXJzKHNlbGYsIHRpdGxlLCBzbmlmZmVycywg bmFtZV9yZSk6CisgICAgICAgICIiIkxpc3RzIHRoZSBzbmlmZmVycyB3aG9z ZSBuYW1lIG1hdGNoZXMgcmVnZXhwLgorCisgICAgICAgIEFyZ3VtZW50czoK KyAgICAgICAgICAgIHRpdGxlOiBUaGUgbGluZSB0byBwcmludCBiZWZvcmUg dGhlIGxpc3QuCisgICAgICAgICAgICBzbmlmZmVyczogVGhlIGxpc3Qgb2Yg dGhlIHNuaWZmZXJzLgorICAgICAgICAgICAgbmFtZV9yZTogc25pZmZlciBu YW1lIGZpbHRlci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzbmlm ZmVyczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBwcmludCB0aXRs ZQorICAgICAgICBmb3Igc25pZmZlciBpbiBzbmlmZmVyczoKKyAgICAgICAg ICAgIGlmIG5hbWVfcmUubWF0Y2goc25pZmZlci5uYW1lKToKKyAgICAgICAg ICAgICAgICBwcmludCgiICAlcyVzIiAlIChzbmlmZmVyLm5hbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgaWYgc25pZmZlci5l bmFibGVkIGVsc2UgIltkaXNhYmxlZF0iKSkKKworICAgIGRlZiBpbnZva2Uo c2VsZiwgYXJnLCBmcm9tX3R0eSk6CisgICAgICAgIGxvY3VzX3JlLCBuYW1l X3JlID0gcGFyc2Vfc25pZmZlcl9jb21tYW5kX2FyZ3MoYXJnKQorICAgICAg ICBpZiBsb2N1c19yZS5tYXRjaCgiZ2xvYmFsIik6CisgICAgICAgICAgICBz ZWxmLmxpc3Rfc25pZmZlcnMoImdsb2JhbCBzbmlmZmVyczoiLCBnZGIuZnJh bWVfc25pZmZlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bmFtZV9yZSkKKyAgICAgICAgaWYgbG9jdXNfcmUubWF0Y2goInByb2dzcGFj ZSIpOgorICAgICAgICAgICAgY3AgPSBnZGIuY3VycmVudF9wcm9nc3BhY2Uo KQorICAgICAgICAgICAgc2VsZi5saXN0X3NuaWZmZXJzKCJwcm9nc3BhY2Ug JXMgc25pZmZlcnM6IiAlIGNwLmZpbGVuYW1lLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNwLmZyYW1lX3NuaWZmZXJzLCBuYW1lX3JlKQor ICAgICAgICBmb3Igb2JqZmlsZSBpbiBnZGIub2JqZmlsZXMoKToKKyAgICAg ICAgICAgIGlmIGxvY3VzX3JlLm1hdGNoKG9iamZpbGUuZmlsZW5hbWUpOgor ICAgICAgICAgICAgICAgIHNlbGYubGlzdF9zbmlmZmVycygib2JqZmlsZSAl cyBzbmlmZmVyczoiICUgb2JqZmlsZS5maWxlbmFtZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb2JqZmlsZS5mcmFtZV9zbmlmZmVy cywgbmFtZV9yZSkKKworCitkZWYgZG9fZW5hYmxlX3NuaWZmZXIxKHNuaWZm ZXJzLCBuYW1lX3JlLCBmbGFnKToKKyAgICAiIiJFbmFibGUvZGlzYWJsZSBz bmlmZmVycyB3aG9zZSBuYW1lcyBtYXRjaCBnaXZlbiByZWdleC4KKworICAg IEFyZ3VtZW50czoKKyAgICAgICAgc25pZmZlcnM6IFRoZSBsaXN0IG9mIHNu aWZmZXJzLgorICAgICAgICBuYW1lX3JlOiBTbmlmZmVyIG5hbWUgZmlsdGVy LgorICAgICAgICBmbGFnOiBFbmFibGUvZGlzYWJsZS4KKworICAgIFJldHVy bnM6CisgICAgICAgIFRoZSBudW1iZXIgb2Ygc25pZmZlcnMgYWZmZWN0ZWQu CisgICAgIiIiCisgICAgdG90YWwgPSAwCisgICAgZm9yIHNuaWZmZXIgaW4g c25pZmZlcnM6CisgICAgICAgIGlmIG5hbWVfcmUubWF0Y2goc25pZmZlci5u YW1lKToKKyAgICAgICAgICAgIHNuaWZmZXIuZW5hYmxlZCA9IGZsYWcKKyAg ICAgICAgICAgIHRvdGFsICs9IDEKKyAgICByZXR1cm4gdG90YWwKKworCitk ZWYgZG9fZW5hYmxlX3NuaWZmZXIoYXJnLCBmbGFnKToKKyAgICAiIiJFbmFi bGUvZGlzYWJsZSBzbmlmZmVyKHMpLiIiIgorICAgIChsb2N1c19yZSwgbmFt ZV9yZSkgPSBwYXJzZV9zbmlmZmVyX2NvbW1hbmRfYXJncyhhcmcpCisgICAg dG90YWwgPSAwCisgICAgaWYgbG9jdXNfcmUubWF0Y2goImdsb2JhbCIpOgor ICAgICAgICB0b3RhbCArPSBkb19lbmFibGVfc25pZmZlcjEoZ2RiLmZyYW1l X3NuaWZmZXJzLCBuYW1lX3JlLCBmbGFnKQorICAgIGlmIGxvY3VzX3JlLm1h dGNoKCJwcm9nc3BhY2UiKToKKyAgICAgICAgdG90YWwgKz0gZG9fZW5hYmxl X3NuaWZmZXIxKGdkYi5jdXJyZW50X3Byb2dzcGFjZSgpLmZyYW1lX3NuaWZm ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt ZV9yZSwgZmxhZykKKyAgICBmb3Igb2JqZmlsZSBpbiBnZGIub2JqZmlsZXMo KToKKyAgICAgICAgaWYgbG9jdXNfcmUubWF0Y2gob2JqZmlsZS5maWxlbmFt ZSk6CisgICAgICAgICAgICB0b3RhbCArPSBkb19lbmFibGVfc25pZmZlcjEo b2JqZmlsZS5mcmFtZV9zbmlmZmVycywgbmFtZV9yZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnKQorICAgIHByaW50 KCIlZCBzbmlmZmVyJXMgJXMiICUgKHRvdGFsLCAiIiBpZiB0b3RhbCA9PSAx IGVsc2UgInMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJl bmFibGVkIiBpZiBmbGFnIGVsc2UgImRpc2FibGVkIikpCisKKworY2xhc3Mg RW5hYmxlU25pZmZlcihnZGIuQ29tbWFuZCk6CisgICAgIiIiR0RCIGNvbW1h bmQgdG8gZW5hYmxlIHNuaWZmZXJzLgorCisgICAgVXNhZ2U6IGVuYWJsZSBz bmlmZmVyIFtsb2N1cy1yZWdleHAgW25hbWUtcmVnZXhwXV0KKworICAgIExP Q1VTLVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0 aGUgb2JqZWN0cyB0byBleGFtaW5lLgorICAgIExvY2kgYXJlICJnbG9iYWwi LCB0aGUgcHJvZ3JhbSBzcGFjZSdzIGZpbGUsIGFuZCB0aGUgb2JqZmlsZXMg d2l0aGluCisgICAgdGhhdCBwcm9ncmFtIHNwYWNlLgorCisgICAgTkFNRV9S RUdFWFAgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gZmlsdGVyIHNuaWZm ZXIgbmFtZXMuCisgICAgSWYgdGhpcyBvbWl0dGVkIGZvciBhIHNwZWNpZmll ZCBsb2N1cywgdGhlbiBhbGwgcmVnaXN0ZXJlZAorICAgIHNuaWZmZXJzIGlu IHRoZSBsb2N1cyBhcmUgYWZmZWN0ZWQuCisgICAgIiIiCisKKyAgICBkZWYg X19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKEVuYWJsZVNuaWZmZXIs IHNlbGYpLl9faW5pdF9fKCJlbmFibGUgc25pZmZlciIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5E X0RBVEEpCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkp OgorICAgICAgICAiIiJHREIgY2FsbHMgdGhpcyB0byBwZXJmb3JtIHRoZSBj b21tYW5kLiIiIgorICAgICAgICBkb19lbmFibGVfc25pZmZlcihhcmcsIFRy dWUpCisKKworY2xhc3MgRGlzYWJsZVNuaWZmZXIoZ2RiLkNvbW1hbmQpOgor ICAgICIiIkdEQiBjb21tYW5kIHRvIGRpc2FibGUgdGhlIHNwZWNpZmllZCBz bmlmZmVyLgorCisgICAgVXNhZ2U6IGRpc2FibGUgc25pZmZlciBbbG9jdXMt cmVnZXhwIFtuYW1lLXJlZ2V4cF1dCisKKyAgICBMT0NVUy1SRUdFWFAgaXMg YSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgdGhlIG9iamVjdHMgdG8g ZXhhbWluZS4KKyAgICBMb2NpIGFyZSAiZ2xvYmFsIiwgdGhlIHByb2dyYW0g c3BhY2UncyBmaWxlLCBhbmQgdGhlIG9iamZpbGVzIHdpdGhpbgorICAgIHRo YXQgcHJvZ3JhbSBzcGFjZS4KKworICAgIE5BTUVfUkVHRVhQIGlzIGEgcmVn dWxhciBleHByZXNzaW9uIHRvIGZpbHRlciBzbmlmZmVyIG5hbWVzLgorICAg IElmIHRoaXMgb21pdHRlZCBmb3IgYSBzcGVjaWZpZWQgbG9jdXMsIHRoZW4g YWxsIHJlZ2lzdGVyZWQKKyAgICBzbmlmZmVycyBpbiB0aGUgbG9jdXMgYXJl IGFmZmVjdGVkLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYp OgorICAgICAgICBzdXBlcihEaXNhYmxlU25pZmZlciwgc2VsZikuX19pbml0 X18oImRpc2FibGUgc25pZmZlciIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9EQVRBKQorCisg ICAgZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KToKKyAgICAgICAg IiIiR0RCIGNhbGxzIHRoaXMgdG8gcGVyZm9ybSB0aGUgY29tbWFuZC4iIiIK KyAgICAgICAgZG9fZW5hYmxlX3NuaWZmZXIoYXJnLCBGYWxzZSkKKworCitk ZWYgcmVnaXN0ZXJfc25pZmZlcl9jb21tYW5kcygpOgorICAgICIiIkluc3Rh bGxzIHRoZSBzbmlmZmVyIGNvbW1hbmRzLiIiIgorICAgIEluZm9TbmlmZmVy KCkKKyAgICBFbmFibGVTbmlmZmVyKCkKKyAgICBEaXNhYmxlU25pZmZlcigp CisKKworcmVnaXN0ZXJfc25pZmZlcl9jb21tYW5kcygpCmRpZmYgLS1naXQg YS9nZGIvcHl0aG9uL2xpYi9nZGIvZnVuY3Rpb24vc25pZmZlcnMucHkgYi9n ZGIvcHl0aG9uL2xpYi9nZGIvZnVuY3Rpb24vc25pZmZlcnMucHkKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkY2E2MgotLS0gL2Rl di9udWxsCisrKyBiL2dkYi9weXRob24vbGliL2dkYi9mdW5jdGlvbi9zbmlm ZmVycy5weQpAQCAtMCwwICsxLDUzIEBACisjIENvcHlyaWdodCAoQykgMjAx NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor IyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIwor IyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKworIiIiSW50ZXJuYWwgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdp dGggZnJhbWUgc25pZmZlcnMuIiIiCisKK2ltcG9ydCBnZGIKKworCitkZWYg ZXhlY3V0ZV9zbmlmZmVycyhzbmlmZmVyX2luZm8pOgorICAgICIiIkludGVy bmFsIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIEdEQiB0byBleGVjdXRlIGFsbCBz bmlmZmVycy4KKworICAgIFJ1bnMgZWFjaCBjdXJyZW50bHkgZW5hYmxlZCBz bmlmZmVyIHVudGlsIGl0IGZpbmRzIHRoZSBvbmUgdGhhdCBjYW4KKyAgICB1 bndpbmQgZ2l2ZW4gZnJhbWUuCisKKyAgICBBcmd1bWVudHM6CisgICAgICAg IHNuaWZmZXJfaW5mbzogYW4gaW5zdGFuY2Ugb2YgZ2RiLlNuaWZmZXJJbmZv LgorICAgIFJldHVybnM6CisgICAgICAgIFVud2luZCBpbmZvIG9yIE5vbmUu IFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHZhbHVlIHJldHVybmVkCisg ICAgICAgIGJ5IFNuaWZmZXIuX19jYWxsX18gYmVsb3cuCisgICAgIiIiCisg ICAgZm9yIG9iamZpbGUgaW4gZ2RiLm9iamZpbGVzKCk6CisgICAgICAgIGZv ciBzbmlmZmVyIGluIG9iamZpbGUuZnJhbWVfc25pZmZlcnM6CisgICAgICAg ICAgICBpZiBzbmlmZmVyLmVuYWJsZWQ6CisgICAgICAgICAgICAgICAgdW53 aW5kX2luZm8gPSBzbmlmZmVyLl9fY2FsbF9fKHNuaWZmZXJfaW5mbykKKyAg ICAgICAgICAgICAgICBpZiB1bndpbmRfaW5mbyBpcyBub3QgTm9uZToKKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIHVud2luZF9pbmZvCisKKyAgICBj dXJyZW50X3Byb2dzcGFjZSA9IGdkYi5jdXJyZW50X3Byb2dzcGFjZSgpCisg ICAgZm9yIHNuaWZmZXIgaW4gY3VycmVudF9wcm9nc3BhY2UuZnJhbWVfc25p ZmZlcnM6CisgICAgICAgIGlmIHNuaWZmZXIuZW5hYmxlZDoKKyAgICAgICAg ICAgIHVud2luZF9pbmZvID0gc25pZmZlci5fX2NhbGxfXyhzbmlmZmVyX2lu Zm8pCisgICAgICAgICAgICBpZiB1bndpbmRfaW5mbyBpcyBub3QgTm9uZToK KyAgICAgICAgICAgICAgICByZXR1cm4gdW53aW5kX2luZm8KKworICAgIGZv ciBzbmlmZmVyIGluIGdkYi5mcmFtZV9zbmlmZmVyczoKKyAgICAgICAgaWYg c25pZmZlci5lbmFibGVkOgorICAgICAgICAgICAgdW53aW5kX2luZm8gPSBz bmlmZmVyLl9fY2FsbF9fKHNuaWZmZXJfaW5mbykKKyAgICAgICAgICAgIGlm IHVud2luZF9pbmZvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJl dHVybiB1bndpbmRfaW5mbworCisgICAgcmV0dXJuIE5vbmUKZGlmZiAtLWdp dCBhL2dkYi9weXRob24vbGliL2dkYi9zbmlmZmVyLnB5IGIvZ2RiL3B5dGhv bi9saWIvZ2RiL3NuaWZmZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNjUwYWQzYgotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9w eXRob24vbGliL2dkYi9zbmlmZmVyLnB5CkBAIC0wLDAgKzEsMTEwIEBACisj IENvcHlyaWdodCAoQykgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIiIiU25pZmZlciBjbGFzcyBh bmQgcmVnaXN0ZXJfc25pZmZlciBmdW5jdGlvbi4iIiIKKworaW1wb3J0IGdk YgorCisKK2NsYXNzIFNuaWZmZXIob2JqZWN0KToKKyAgICAiIiJCYXNlIGNs YXNzIChvciBhIHRlbXBsYXRlKSBmb3IgZnJhbWUgc25pZmZlcnMgd3JpdHRl biBpbiBQeXRob24uCisKKyAgICBBIHNuaWZmZXIgaGFzIGEgc2luZ2xlIG1l dGhvZCBfX2NhbGxfXyBhbmQgdGhlIGF0dHJpYnV0ZXMgZGVzY3JpYmVkIGJl bG93LgorCisgICAgQXR0cmlidXRlczoKKyAgICAgICAgbmFtZTogVGhlIG5h bWUgb2YgdGhlIHNuaWZmZXIuCisgICAgICAgIGVuYWJsZWQ6IEEgYm9vbGVh biBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNuaWZmZXIgaXMgZW5hYmxlZC4K KyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAg ICAgICAgIiIiQ29uc3RydWN0b3IuCisKKyAgICAgICAgQXJnczoKKyAgICAg ICAgICAgIG5hbWU6IEFuIGlkZW50aWZ5aW5nIG5hbWUgZm9yIHRoZSBzbmlm ZmVyLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQor ICAgICAgICBzZWxmLmVuYWJsZWQgPSBUcnVlCisKKyAgICBkZWYgX19jYWxs X18oc2VsZiwgc25pZmZlcl9pbmZvKToKKyAgICAgICAgIiIiR0RCIGNhbGxz IHRoaXMgbWV0aG9kIHRvIHVud2luZCBhIGZyYW1lLgorCisgICAgICAgIEFy Z3VtZW50czoKKyAgICAgICAgICAgIHNuaWZmZXJfaW5mbzogQW4gaW5zdGFu Y2Ugb2YgZ2RiLlNuaWZmZXJJbmZvIGRlc2NyaWJpbmcgdGhlIGZyYW1lLgor CisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICAoUkVHX0RBVEEsIEZS QU1FX0lEX1JFR05VTVMpIHR1cGxlLCBvciBOb25lIGlmIHRoaXMgc25pZmZl ciBjYW5ub3QKKyAgICAgICAgICAgIHVud2luZCB0aGUgZnJhbWUuCisgICAg ICAgICAgICBSRUdfREFUQSBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHJl Z2lzdGVycyBpbiB0aGUgdW53b3VuZCBmcmFtZS4KKyAgICAgICAgICAgIEVh Y2ggZWxlbWVudCBpbiB0aHIgUkVHX0RBVEEgaXMgYSAoUkVHX05VTSwgUkVH X1ZBTFVFKSB0dXBsZSwKKyAgICAgICAgICAgIHdoZXJlIFJFR19OVU0gaXMg cGxhdGZvcm0tc3BlY2lmaWMgcmVnaXN0ZXIgbnVtYmVyLCBhbmQgUkVHX1ZB TFVFCisgICAgICAgICAgICBpcyByZWdpc3RlciB2YWx1ZSAoYSBnZGIuVmFs dWUgaW5zdGFuY2UpLgorICAgICAgICAgICAgRlJBTUVfSURfUkVHTlVNUyBp cyBhIHR1cGxlIHNwZWNpZnlpbmcgdGhlIHJlZ2lzdGVycyB1c2VkCisgICAg ICAgICAgICB0byBjb25zdHJ1Y3QgdGhlIGZyYW1lIElELiBGb3IgaW5zdGFu Y2UsIG9uIHg4Nl82NCwKKyAgICAgICAgICAgIEZSQU1FX0lEX1JFR05VTVMg aXMgKDcsIDE2KSwgYXMgNyBpcyB0aGUgc3RhY2sgcG9pbnRlcgorICAgICAg ICAgICAgcmVnaXN0ZXIgKFJTUCksIGFuZCAxNiBpcyB0aGUgaW5zdHJ1Y3Rp b24gcG9pbnRlciAoUklQKS4KKyAgICAgICAgICAgIEZSQU1FX0lEX1JFR05V TVMgaXMgYSAoU1ApLCAoU1AsIFBDKSwgb3IgKFNQLCBQQywgU1BFQ0lBTCkK KyAgICAgICAgICAgIHR1cGxlLCB3aGVyZSBTUCwgUEMsIGFuZCBTUEVDSUFM IGFyZSByZWdpc3RlciBudW1iZXJzLiBEZXBlbmRpbmcKKyAgICAgICAgICAg IG9uIHRoZSB0dXBsZSwgUHl0aG9uIHNuaWZmZXIgc3VwcG9ydCBjb2RlIHVz ZXMgaW50ZXJuYWwgR0RCCisgICAgICAgICAgICBmdW5jdGlvbnMgdG8gY29u c3RydWN0IGZyYW1lIElEIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAoU1Ap ICAgICAgICAgICAgICAgICAgZnJhbWVfaWRfYnVpbGRfd2lsZCAoVmFsdWUo U1ApKQorICAgICAgICAgICAgKFNQLCBQQykgICAgICAgICAgICAgIGZyYW1l X2lkX2J1aWxkIChWYWx1ZShTUCksIFZhbHVlKFBDKSkKKyAgICAgICAgICAg IChTUCwgUEMsIFNQRUNJQUwpICAgICBmcmFtZV9pZF9idWlsZF9zcGVjaWFs IChWYWx1ZShTUCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZhbHVlKFBDKSwgVmFsdWUoU1BFQ0lBTCkKKyAgICAgICAgICAgIFRo ZSByZWdpc3RlcnMgaW4gdGhlIEZSQU1FX0lEX1JFR05VTVMgdHVwbGUgc2hv dWxkIGJlIGFtb25nIHRob3NlCisgICAgICAgICAgICByZXR1cm5lZCBieSBS RUdfREFUQS4KKyAgICAgICAgICAgIFRoZSBjaGFwdGVyICJTdGFjayBGcmFt ZXMiIGluIHRoZSBHREIgSW50ZXJuYWxzIEd1aWRlIGRlc2NyaWJlcworICAg ICAgICAgICAgZnJhbWUgSUQuCisgICAgICAgICIiIgorICAgICAgICByYWlz ZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJTbmlmZmVyIF9fY2FsbF9fLiIpCisK KworZGVmIHJlZ2lzdGVyX3NuaWZmZXIobG9jdXMsIHNuaWZmZXIsIHJlcGxh Y2U9RmFsc2UpOgorICAgICIiIlJlZ2lzdGVyIHNuaWZmZXIgaW4gZ2l2ZW4g bG9jdXMuCisKKyAgICBUaGUgc25pZmZlciBpcyBwcmVwZW5kZWQgdG8gdGhl IGxvY3VzJ3Mgc25pZmZlcnMgbGlzdC4gU25pZmZlcgorICAgIG5hbWUgc2hv dWxkIGJlIHVuaXF1ZS4KKworICAgIEFyZ3VtZW50czoKKyAgICAgICAgbG9j dXM6IEVpdGhlciBhbiBvYmpmaWxlLCBwcm9nc3BhY2UsIG9yIE5vbmUgKGlu IHdoaWNoIGNhc2UKKyAgICAgICAgICAgICAgIHRoZSBzbmlmZmVyIGlzIHJl Z2lzdGVyZWQgZ2xvYmFsbHkpLgorICAgICAgICBzbmlmZmVyOiBBbiBvYmpl Y3Qgb2YgYSBnZGIuU25pZmZlciBzdWJjbGFzcworICAgICAgICByZXBsYWNl OiBJZiBUcnVlLCByZXBsYWNlcyBleGlzdGluZyBzbmlmZmVyIHdpdGggdGhl IHNhbWUgbmFtZS4KKyAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCByYWlz ZXMgZXhjZXB0aW9uIGlmIHNuaWZmZXIgd2l0aCB0aGUgc2FtZQorICAgICAg ICAgICAgICAgICBuYW1lIGFscmVhZHkgZXhpc3RzLgorCisgICAgUmV0dXJu czoKKyAgICAgICAgTm90aGluZy4KKworICAgIFJhaXNlczoKKyAgICAgICAg UnVudGltZUVycm9yOiBTbmlmZmVyIG5hbWUgaXMgbm90IHVuaXF1ZS4KKwor ICAgICIiIgorICAgIGlmIGxvY3VzIGlzIE5vbmU6CisgICAgICAgIGlmIGdk Yi5wYXJhbWV0ZXIoInZlcmJvc2UiKToKKyAgICAgICAgICAgIGdkYi53cml0 ZSgiUmVnaXN0ZXJpbmcgZ2xvYmFsICVzIHNuaWZmZXIgLi4uXG4iICUgc25p ZmZlci5uYW1lKQorICAgICAgICBsb2N1cyA9IGdkYgorICAgIGVsc2U6Cisg ICAgICAgIGlmIGdkYi5wYXJhbWV0ZXIoInZlcmJvc2UiKToKKyAgICAgICAg ICAgIGdkYi53cml0ZSgiUmVnaXN0ZXJpbmcgJXMgc25pZmZlciBmb3IgJXMg Li4uXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAoc25pZmZlci5uYW1l LCBsb2N1cy5maWxlbmFtZSkpCisgICAgaSA9IDAKKyAgICBmb3IgbmVlZGxl IGluIGxvY3VzLmZyYW1lX3NuaWZmZXJzOgorICAgICAgICBpZiBuZWVkbGUu bmFtZSA9PSBzbmlmZmVyLm5hbWU6CisgICAgICAgICAgICBpZiByZXBsYWNl OgorICAgICAgICAgICAgICAgIGRlbCBsb2N1cy5mcmFtZV9zbmlmZmVyc1tp XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBS dW50aW1lRXJyb3IoIlNuaWZmZXIgJXMgYWxyZWFkeSBleGlzdHMuIiAlIHNu aWZmZXIubmFtZSkKKyAgICAgICAgaSArPSAxCisgICAgbG9jdXMuZnJhbWVf c25pZmZlcnMuaW5zZXJ0KDAsIHNuaWZmZXIpCmRpZmYgLS1naXQgYS9nZGIv cHl0aG9uL3B5LW9iamZpbGUuYyBiL2dkYi9weXRob24vcHktb2JqZmlsZS5j CmluZGV4IDBhZWNhZjYuLmE3YmI3Y2QgMTAwNjQ0Ci0tLSBhL2dkYi9weXRo b24vcHktb2JqZmlsZS5jCisrKyBiL2dkYi9weXRob24vcHktb2JqZmlsZS5j CkBAIC00Miw2ICs0MiwxMCBAQCB0eXBlZGVmIHN0cnVjdAogCiAgIC8qIFRo ZSBmcmFtZSBmaWx0ZXIgbGlzdCBvZiBmdW5jdGlvbnMuICAqLwogICBQeU9i amVjdCAqZnJhbWVfZmlsdGVyczsKKworICAvKiBUaGUgZnJhbWUgc25pZmZl cnMgbGlzdCBvZiBmdW5jdGlvbnMuICAqLworICBQeU9iamVjdCAqZnJhbWVf c25pZmZlcnM7CisKICAgLyogVGhlIHR5cGUtcHJpbnRlciBsaXN0LiAgKi8K ICAgUHlPYmplY3QgKnR5cGVfcHJpbnRlcnM7CiAKQEAgLTE4MSw2ICsxODUs NyBAQCBvYmpmcHlfZGVhbGxvYyAoUHlPYmplY3QgKm8pCiAgIFB5X1hERUNS RUYgKHNlbGYtPmRpY3QpOwogICBQeV9YREVDUkVGIChzZWxmLT5wcmludGVy cyk7CiAgIFB5X1hERUNSRUYgKHNlbGYtPmZyYW1lX2ZpbHRlcnMpOworICBQ eV9YREVDUkVGIChzZWxmLT5mcmFtZV9zbmlmZmVycyk7CiAgIFB5X1hERUNS RUYgKHNlbGYtPnR5cGVfcHJpbnRlcnMpOwogICBQeV9YREVDUkVGIChzZWxm LT54bWV0aG9kcyk7CiAgIFB5X1RZUEUgKHNlbGYpLT50cF9mcmVlIChzZWxm KTsKQEAgLTIwMyw2ICsyMDgsMTAgQEAgb2JqZnB5X2luaXRpYWxpemUgKG9i amZpbGVfb2JqZWN0ICpzZWxmKQogICBpZiAoc2VsZi0+ZnJhbWVfZmlsdGVy cyA9PSBOVUxMKQogICAgIHJldHVybiAwOwogCisgIHNlbGYtPmZyYW1lX3Nu aWZmZXJzID0gUHlMaXN0X05ldyAoMCk7CisgIGlmIChzZWxmLT5mcmFtZV9z bmlmZmVycyA9PSBOVUxMKQorICAgIHJldHVybiAwOworCiAgIHNlbGYtPnR5 cGVfcHJpbnRlcnMgPSBQeUxpc3RfTmV3ICgwKTsKICAgaWYgKHNlbGYtPnR5 cGVfcHJpbnRlcnMgPT0gTlVMTCkKICAgICByZXR1cm4gMDsKQEAgLTMxMCw2 ICszMTksNDggQEAgb2JqZnB5X3NldF9mcmFtZV9maWx0ZXJzIChQeU9iamVj dCAqbywgUHlPYmplY3QgKmZpbHRlcnMsIHZvaWQgKmlnbm9yZSkKICAgcmV0 dXJuIDA7CiB9CiAKKy8qIFJldHVybiB0aGUgZnJhbWUgc25pZmZlcnMgYXR0 cmlidXRlIGZvciB0aGlzIG9iamVjdCBmaWxlLiAgKi8KKworUHlPYmplY3Qg Kgorb2JqZnB5X2dldF9mcmFtZV9zbmlmZmVycyAoUHlPYmplY3QgKm8sIHZv aWQgKmlnbm9yZSkKK3sKKyAgb2JqZmlsZV9vYmplY3QgKnNlbGYgPSAob2Jq ZmlsZV9vYmplY3QgKikgbzsKKworICBQeV9JTkNSRUYgKHNlbGYtPmZyYW1l X3NuaWZmZXJzKTsKKyAgcmV0dXJuIHNlbGYtPmZyYW1lX3NuaWZmZXJzOwor fQorCisvKiBTZXQgdGhpcyBvYmplY3QgZmlsZSdzIGZyYW1lIHNuaWZmZXJz IGxpc3QgdG8gU05JRkZFUlMuICAqLworCitzdGF0aWMgaW50CitvYmpmcHlf c2V0X2ZyYW1lX3NuaWZmZXJzIChQeU9iamVjdCAqbywgUHlPYmplY3QgKnNu aWZmZXJzLCB2b2lkICppZ25vcmUpCit7CisgIFB5T2JqZWN0ICp0bXA7Cisg IG9iamZpbGVfb2JqZWN0ICpzZWxmID0gKG9iamZpbGVfb2JqZWN0ICopIG87 CisKKyAgaWYgKCFzbmlmZmVycykKKyAgICB7CisgICAgICBQeUVycl9TZXRT dHJpbmcgKFB5RXhjX1R5cGVFcnJvciwKKwkJICAgICAgIF8oIkNhbm5vdCBk ZWxldGUgdGhlIGZyYW1lIHNuaWZmZXJzIGF0dHJpYnV0ZS4iKSk7CisgICAg ICByZXR1cm4gLTE7CisgICAgfQorCisgIGlmICghUHlMaXN0X0NoZWNrIChz bmlmZmVycykpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4 Y19UeXBlRXJyb3IsCisJCSAgICAgICBfKCJUaGUgZnJhbWVfc25pZmZlcnMg YXR0cmlidXRlIG11c3QgYmUgYSBsaXN0LiIpKTsKKyAgICAgIHJldHVybiAt MTsKKyAgICB9CisKKyAgLyogVGFrZSBjYXJlIGluIGNhc2UgdGhlIExIUyBh bmQgUkhTIGFyZSByZWxhdGVkIHNvbWVob3cuICAqLworICB0bXAgPSBzZWxm LT5mcmFtZV9zbmlmZmVyczsKKyAgUHlfSU5DUkVGIChzbmlmZmVycyk7Cisg IHNlbGYtPmZyYW1lX3NuaWZmZXJzID0gc25pZmZlcnM7CisgIFB5X1hERUNS RUYgKHRtcCk7CisKKyAgcmV0dXJuIDA7Cit9CisKIC8qIEdldCB0aGUgJ3R5 cGVfcHJpbnRlcnMnIGF0dHJpYnV0ZS4gICovCiAKIHN0YXRpYyBQeU9iamVj dCAqCkBAIC02NDUsNiArNjk2LDggQEAgc3RhdGljIFB5R2V0U2V0RGVmIG9i amZpbGVfZ2V0c2V0W10gPQogICAgICJQcmV0dHkgcHJpbnRlcnMuIiwgTlVM TCB9LAogICB7ICJmcmFtZV9maWx0ZXJzIiwgb2JqZnB5X2dldF9mcmFtZV9m aWx0ZXJzLAogICAgIG9iamZweV9zZXRfZnJhbWVfZmlsdGVycywgIkZyYW1l IEZpbHRlcnMuIiwgTlVMTCB9LAorICB7ICJmcmFtZV9zbmlmZmVycyIsIG9i amZweV9nZXRfZnJhbWVfc25pZmZlcnMsCisgICAgb2JqZnB5X3NldF9mcmFt ZV9zbmlmZmVycywgIkZyYW1lIFNuaWZmZXJzIiwgTlVMTCB9LAogICB7ICJ0 eXBlX3ByaW50ZXJzIiwgb2JqZnB5X2dldF90eXBlX3ByaW50ZXJzLCBvYmpm cHlfc2V0X3R5cGVfcHJpbnRlcnMsCiAgICAgIlR5cGUgcHJpbnRlcnMuIiwg TlVMTCB9LAogICB7ICJ4bWV0aG9kcyIsIG9iamZweV9nZXRfeG1ldGhvZHMs IE5VTEwsCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LXByb2dzcGFjZS5j IGIvZ2RiL3B5dGhvbi9weS1wcm9nc3BhY2UuYwppbmRleCAyOWI5Zjk2Li5j ZTg1YjFhIDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5LXByb2dzcGFjZS5j CisrKyBiL2dkYi9weXRob24vcHktcHJvZ3NwYWNlLmMKQEAgLTQxLDYgKzQx LDEwIEBAIHR5cGVkZWYgc3RydWN0CiAKICAgLyogVGhlIGZyYW1lIGZpbHRl ciBsaXN0IG9mIGZ1bmN0aW9ucy4gICovCiAgIFB5T2JqZWN0ICpmcmFtZV9m aWx0ZXJzOworCisgIC8qIFRoZSBmcmFtZSBzbmlmZmVyIGxpc3QuICAqLwor ICBQeU9iamVjdCAqZnJhbWVfc25pZmZlcnM7CisKICAgLyogVGhlIHR5cGUt cHJpbnRlciBsaXN0LiAgKi8KICAgUHlPYmplY3QgKnR5cGVfcHJpbnRlcnM7 CiAKQEAgLTgyLDYgKzg2LDcgQEAgcHNweV9kZWFsbG9jIChQeU9iamVjdCAq c2VsZikKICAgUHlfWERFQ1JFRiAocHNfc2VsZi0+ZGljdCk7CiAgIFB5X1hE RUNSRUYgKHBzX3NlbGYtPnByaW50ZXJzKTsKICAgUHlfWERFQ1JFRiAocHNf c2VsZi0+ZnJhbWVfZmlsdGVycyk7CisgIFB5X1hERUNSRUYgKHBzX3NlbGYt PmZyYW1lX3NuaWZmZXJzKTsKICAgUHlfWERFQ1JFRiAocHNfc2VsZi0+dHlw ZV9wcmludGVycyk7CiAgIFB5X1hERUNSRUYgKHBzX3NlbGYtPnhtZXRob2Rz KTsKICAgUHlfVFlQRSAoc2VsZiktPnRwX2ZyZWUgKHNlbGYpOwpAQCAtMTA0 LDYgKzEwOSwxMCBAQCBwc3B5X2luaXRpYWxpemUgKHBzcGFjZV9vYmplY3Qg KnNlbGYpCiAgIGlmIChzZWxmLT5mcmFtZV9maWx0ZXJzID09IE5VTEwpCiAg ICAgcmV0dXJuIDA7CiAKKyAgc2VsZi0+ZnJhbWVfc25pZmZlcnMgPSBQeUxp c3RfTmV3ICgwKTsKKyAgaWYgKHNlbGYtPmZyYW1lX3NuaWZmZXJzID09IE5V TEwpCisgICAgcmV0dXJuIDA7CisKICAgc2VsZi0+dHlwZV9wcmludGVycyA9 IFB5TGlzdF9OZXcgKDApOwogICBpZiAoc2VsZi0+dHlwZV9wcmludGVycyA9 PSBOVUxMKQogICAgIHJldHVybiAwOwpAQCAtMjExLDYgKzIyMCw0OCBAQCBw c3B5X3NldF9mcmFtZV9maWx0ZXJzIChQeU9iamVjdCAqbywgUHlPYmplY3Qg KmZyYW1lLCB2b2lkICppZ25vcmUpCiAgIHJldHVybiAwOwogfQogCisvKiBS ZXR1cm4gdGhlIGxpc3Qgb2YgdGhlIGZyYW1lIHNuaWZmZXJzIGZvciB0aGlz IHByb2dyYW0gc3BhY2UuICAqLworCitQeU9iamVjdCAqCitwc3B5X2dldF9m cmFtZV9zbmlmZmVycyAoUHlPYmplY3QgKm8sIHZvaWQgKmlnbm9yZSkKK3sK KyAgcHNwYWNlX29iamVjdCAqc2VsZiA9IChwc3BhY2Vfb2JqZWN0ICopIG87 CisKKyAgUHlfSU5DUkVGIChzZWxmLT5mcmFtZV9zbmlmZmVycyk7CisgIHJl dHVybiBzZWxmLT5mcmFtZV9zbmlmZmVyczsKK30KKworLyogU2V0IHRoaXMg cHJvZ3JhbSBzcGFjZSdzIGxpc3Qgb2YgdGhlIHNuaWZmZXJzIHRvIFNOSUZG RVJTLiAgKi8KKworc3RhdGljIGludAorcHNweV9zZXRfZnJhbWVfc25pZmZl cnMgKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqc25pZmZlcnMsIHZvaWQgKmln bm9yZSkKK3sKKyAgUHlPYmplY3QgKnRtcDsKKyAgcHNwYWNlX29iamVjdCAq c2VsZiA9IChwc3BhY2Vfb2JqZWN0ICopIG87CisKKyAgaWYgKCFzbmlmZmVy cykKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1R5cGVF cnJvciwKKwkJICAgICAgICJjYW5ub3QgZGVsZXRlIHRoZSBmcmFtZSBzbmlm ZmVycyBsaXN0Iik7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlm ICghUHlMaXN0X0NoZWNrIChzbmlmZmVycykpCisgICAgeworICAgICAgUHlF cnJfU2V0U3RyaW5nIChQeUV4Y19UeXBlRXJyb3IsCisJCSAgICAgICAidGhl IGZyYW1lIHNuaWZmZXJzIGF0dHJpYnV0ZSBtdXN0IGJlIGEgbGlzdCIpOwor ICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAvKiBUYWtlIGNhcmUgaW4g Y2FzZSB0aGUgTEhTIGFuZCBSSFMgYXJlIHJlbGF0ZWQgc29tZWhvdy4gICov CisgIHRtcCA9IHNlbGYtPmZyYW1lX3NuaWZmZXJzOworICBQeV9JTkNSRUYg KHNuaWZmZXJzKTsKKyAgc2VsZi0+ZnJhbWVfc25pZmZlcnMgPSBzbmlmZmVy czsKKyAgUHlfWERFQ1JFRiAodG1wKTsKKworICByZXR1cm4gMDsKK30KKwog LyogR2V0IHRoZSAndHlwZV9wcmludGVycycgYXR0cmlidXRlLiAgKi8KIAog c3RhdGljIFB5T2JqZWN0ICoKQEAgLTM0NSw2ICszOTYsOCBAQCBzdGF0aWMg UHlHZXRTZXREZWYgcHNwYWNlX2dldHNldFtdID0KICAgICAiUHJldHR5IHBy aW50ZXJzLiIsIE5VTEwgfSwKICAgeyAiZnJhbWVfZmlsdGVycyIsIHBzcHlf Z2V0X2ZyYW1lX2ZpbHRlcnMsIHBzcHlfc2V0X2ZyYW1lX2ZpbHRlcnMsCiAg ICAgIkZyYW1lIGZpbHRlcnMuIiwgTlVMTCB9LAorICB7ICJmcmFtZV9zbmlm ZmVycyIsIHBzcHlfZ2V0X2ZyYW1lX3NuaWZmZXJzLCBwc3B5X3NldF9mcmFt ZV9zbmlmZmVycywKKyAgICAiRnJhbWUgc25pZmZlcnMuIiwgTlVMTCB9LAog ICB7ICJ0eXBlX3ByaW50ZXJzIiwgcHNweV9nZXRfdHlwZV9wcmludGVycywg cHNweV9zZXRfdHlwZV9wcmludGVycywKICAgICAiVHlwZSBwcmludGVycy4i LCBOVUxMIH0sCiAgIHsgInhtZXRob2RzIiwgcHNweV9nZXRfeG1ldGhvZHMs IE5VTEwsCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LXVud2luZC5jIGIv Z2RiL3B5dGhvbi9weS11bndpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi45NGIyYzU3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2Ri L3B5dGhvbi9weS11bndpbmQuYwpAQCAtMCwwICsxLDU4MiBAQAorLyogUHl0 aG9uIGZyYW1lIHVud2luZGVyIGludGVyZmFjZS4KKworICAgQ29weXJpZ2h0 IChDKSAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisg ICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAi YXJjaC11dGlscy5oIgorI2luY2x1ZGUgImZyYW1lLXVud2luZC5oIgorI2lu Y2x1ZGUgImdkYl9vYnN0YWNrLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisj aW5jbHVkZSAibGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJvYnNlcnZlci5oIgor I2luY2x1ZGUgInB5dGhvbi1pbnRlcm5hbC5oIgorI2luY2x1ZGUgInJlZ2Nh Y2hlLmgiCisjaW5jbHVkZSAidXNlci1yZWdzLmgiCisKKyNkZWZpbmUgVFJB Q0VfUFlfVU5XSU5EKGxldmVsLCBhcmdzLi4uKSBpZiAocHl1d19kZWJ1ZyA+ PSBsZXZlbCkgIFwKKyAgeyBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRs b2csIGFyZ3MpOyB9CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIFB5T2JqZWN0 X0hFQUQKKyAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lX2luZm87Cit9IHNu aWZmZXJfaW5mb19vYmplY3Q7CisKKy8qIFRoZSBkYXRhIHdlIGtlZXAgZm9y IGEgZnJhbWUgd2UgY2FuIHVud2luZDogZnJhbWUgSUQgYW5kIGFuIGFycmF5 IG9mCisgICAocmVnaXN0ZXJfbnVtYmVyLCByZWdpc3Rlcl92YWx1ZSkgcGFp cnMuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICAvKiBGcmFtZSBJRC4g ICovCisgIHN0cnVjdCBmcmFtZV9pZCBmcmFtZV9pZDsKKworICAvKiBHREIg QXJjaGl0ZWN0dXJlLiAgKi8KKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2g7 CisKKyAgLyogTGVuZ3RoIG9mIHRoZSBgcmVnJyBhcnJheSBiZWxvdy4gICov CisgIGludCByZWdfY291bnQ7CisKKyAgc3RydWN0IHJlZ19pbmZvCisgIHsK KyAgICAvKiBSZWdpc3RlciBudW1iZXIuICAqLworICAgIGludCBudW1iZXI7 CisKKyAgICAvKiBSZWdpc3RlciBkYXRhIGJ5dGVzIHBvaW50ZXIuICAqLwor ICAgIGdkYl9ieXRlICpkYXRhOworICB9IHJlZ1tdOworfSBjYWNoZWRfZnJh bWVfaW5mbzsKKworc3RhdGljIFB5VHlwZU9iamVjdCBzbmlmZmVyX2luZm9f b2JqZWN0X3R5cGUKKyAgICBDUFlDSEVDS0VSX1RZUEVfT0JKRUNUX0ZPUl9U WVBFREVGICgic25pZmZlcl9pbmZvX29iamVjdCIpOworCitzdGF0aWMgdW5z aWduZWQgaW50IHB5dXdfZGVidWcgPSAwOworCitzdGF0aWMgc3RydWN0IGdk YmFyY2hfZGF0YSAqcHl1d19nZGJhcmNoX2RhdGE7CisKKy8qIENhbGxlZCBi eSB0aGUgUHl0aG9uIGludGVycHJldGVyIHRvIG9idGFpbiBzdHJpbmcgcmVw cmVzZW50YXRpb24KKyAgIG9mIHRoZSBTbmlmZmVySW5mbyBvYmplY3QuICAq LworCitzdGF0aWMgUHlPYmplY3QgKgorc25pZmZlcl9pbmZvcHlfc3RyIChQ eU9iamVjdCAqc2VsZikKK3sKKyAgY2hhciAqczsKKyAgUHlPYmplY3QgKnJl c3VsdDsKKyAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lID0gKChzbmlmZmVy X2luZm9fb2JqZWN0ICopc2VsZiktPmZyYW1lX2luZm87CisKKyAgcyA9IHhz dHJwcmludGYgKCJTUD0lcyxQQz0lcyIsIGNvcmVfYWRkcl90b19zdHJpbmdf bnogKGdldF9mcmFtZV9zcCAoZnJhbWUpKSwKKyAgICAgICAgY29yZV9hZGRy X3RvX3N0cmluZ19ueiAoZ2V0X2ZyYW1lX3BjIChmcmFtZSkpKTsKKyAgcmVz dWx0ID0gUHlTdHJpbmdfRnJvbVN0cmluZyAocyk7CisgIHhmcmVlIChzKTsK KworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBJbXBsZW1lbnRhdGlvbiBv ZiBnZGIuU25pZmZlckluZm8ucmVhZF9yZWdpc3RlciAoc2VsZiwgcmVnbnVt KSAtPiBnZGIuVmFsdWUuCisgICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiByZWdp c3RlciBSRUdOVU0gYXMgZ2RiLlZhbHVlIGluc3RhbmNlLiAgKi8KKworc3Rh dGljIFB5T2JqZWN0ICoKK3NuaWZmZXJfaW5mb3B5X3JlYWRfcmVnaXN0ZXIg KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgdm9sYXRp bGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OworICBpbnQgcmVnbnVt OworICBzdHJ1Y3QgdmFsdWUgKnZhbCA9IE5VTEw7CisKKyAgaWYgKCFQeUFy Z19QYXJzZVR1cGxlIChhcmdzLCAiaSIsICZyZWdudW0pKQorICAgIHJldHVy biBOVUxMOworCisgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19B TEwpCisgICAgeworICAgICAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lID0g KChzbmlmZmVyX2luZm9fb2JqZWN0ICopIHNlbGYpLT5mcmFtZV9pbmZvOwor ICAgICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfZnJhbWVfYXJj aCAoZnJhbWUpOworICAgICAgY2hhciAqZXJyb3JfdGV4dCA9IE5VTEw7CisK KyAgICAgIC8qIFZhbGlkYXRlIHJlZ251bSB0byBwcmV2ZW50IGFzc2VydCBp biBgcmVnY2FjaGVfY29va2VkX3JlYWRfdmFsdWUnLiAgKi8KKyAgICAgIGlm ICh1c2VyX3JlZ19tYXBfcmVnbnVtX3RvX25hbWUgKGdkYmFyY2gsIHJlZ251 bSkgPT0gTlVMTCkKKyAgICAgICAgZXJyb3JfdGV4dCA9IHhzdHJwcmludGYg KF8oIkJhZCByZWdpc3RlciBudW1iZXI6ICVkLiIpLCByZWdudW0pOworICAg ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZ2RiX2J5dGUgYnVmZmVy W01BWF9SRUdJU1RFUl9TSVpFXTsKKworICAgICAgICAgIC8qIENhbGwgYGRl cHJlY2F0ZWRfZnJhbWVfcmVnaXN0ZXJfcmVhZCcgLS0gY2FsbGluZworICAg ICAgICAgICAgIGB2YWx1ZV9vZl9yZWdpc3Rlcicgd291bGQgYW4gYXNzZXJ0 IGluIGBnZXRfZnJhbWVfaWQnCisgICAgICAgICAgICAgYmVjYXVzZSBvdXIg ZnJhbWUgaXMgaW5jb21wbGV0ZS4gICovCisgICAgICAgICAgaWYgKGRlcHJl Y2F0ZWRfZnJhbWVfcmVnaXN0ZXJfcmVhZCAoZnJhbWUsIHJlZ251bSwgYnVm ZmVyKSkKKyAgICAgICAgICAgIHZhbCA9IHZhbHVlX2Zyb21fY29udGVudHMg KHJlZ2lzdGVyX3R5cGUgKGdkYmFyY2gsIHJlZ251bSksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIpOworICAgICAg ICAgIGlmICh2YWwgPT0gTlVMTCkKKyAgICAgICAgICAgIGVycm9yX3RleHQg PSB4c3RycHJpbnRmIChfKCJDYW5ub3QgcmVhZCByZWdpc3RlciAlZCBmcm9t IGZyYW1lLiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlZ251bSk7CisgICAgICAgIH0KKyAgICAgIGlmIChlcnJvcl90ZXh0 ICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBQeUVycl9TZXRTdHJp bmcgKFB5RXhjX1ZhbHVlRXJyb3IsIGVycm9yX3RleHQpOworICAgICAgICAg IHhmcmVlIChlcnJvcl90ZXh0KTsKKyAgICAgICAgfQorICAgIH0KKyAgR0RC X1BZX0hBTkRMRV9FWENFUFRJT04gKGV4Y2VwdCk7CisKKyAgcmV0dXJuIHZh bCA9PSBOVUxMID8gTlVMTCA6IHZhbHVlX3RvX3ZhbHVlX29iamVjdCAodmFs KTsKK30KKworLyogQ3JlYXRlIFB5dGhvbiBTbmlmZmVySW5mbyBvYmplY3Qu ICAqLworCitzdGF0aWMgUHlPYmplY3QgKgorZnJhbWVfaW5mb190b19zbmlm ZmVyX2luZm9fb2JqZWN0IChzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUpCit7 CisgIHNuaWZmZXJfaW5mb19vYmplY3QgKnNuaWZmZXJfaW5mbworICAgICAg PSBQeU9iamVjdF9OZXcgKHNuaWZmZXJfaW5mb19vYmplY3QsICZzbmlmZmVy X2luZm9fb2JqZWN0X3R5cGUpOworCisgIHNuaWZmZXJfaW5mby0+ZnJhbWVf aW5mbyA9IGZyYW1lOworICByZXR1cm4gKFB5T2JqZWN0ICopIHNuaWZmZXJf aW5mbzsKK30KKworLyogUGFyc2UgUHl0aG9uIEludCwgc2F2aW5nIGl0IGF0 IHRoZSBnaXZlbiBhZGRyZXNzLiBSZXR1cm5zIDEgb24gc3VjY2VzcywKKyAg IDAgb3RoZXJ3aXNlLiAgKi8KKworc3RhdGljIGludAorcHl1d19wYXJzZV9p bnQgKFB5T2JqZWN0ICpweW9faW50LCBpbnQgKnZhbHVlcCkKK3sKKyAgbG9u ZyBsb25nX3ZhbHVlOworCisgIGlmIChweW9faW50ID09IE5VTEwpCisgICAg cmV0dXJuIDA7CisgIC8qIE1ha2UgYSBsb25nIGxvZ2ljIGNoZWNrIGZpcnN0 LiAgSW4gUHl0aG9uIDMueCwgaW50ZXJuYWxseSwgYWxsCisgICAgIGludGVn ZXJzIGFyZSByZXByZXNlbnRlZCBhcyBsb25ncy4gIEluIFB5dGhvbiAyLngs IHRoZXJlIGlzIHN0aWxsCisgICAgIGEgZGlmZmVyZW50aWF0aW9uIGludGVy bmFsbHkgYmV0d2VlbiBhIFB5SW50IGFuZCBhIFB5TG9uZy4KKyAgICAgRXhw bGljaXRseSBkbyB0aGlzIGxvbmcgY2hlY2sgY29udmVyc2lvbiBmaXJzdC4g SW4gR0RCLCBmb3IKKyAgICAgUHl0aG9uIDMueCwgd2UgI2lmZGVmIFB5SW50 ID0gUHlMb25nLiAgVGhpcyBjaGVjayBoYXMgdG8gYmUgZG9uZQorICAgICBm aXJzdCB0byBlbnN1cmUgd2UgZG8gbm90IGxvc2UgaW5mb3JtYXRpb24gaW4g dGhlIGNvbnZlcnNpb24KKyAgICAgcHJvY2Vzcy4gICovCisgIGVsc2UgaWYg KFB5TG9uZ19DaGVjayAocHlvX2ludCkpCisgICAgeworICAgICAgTE9OR0VT VCBsID0gUHlMb25nX0FzTG9uZ0xvbmcgKHB5b19pbnQpOworCisgICAgICBp ZiAoUHlFcnJfT2NjdXJyZWQgKCkpCisgICAgICAgIHJldHVybiAwOworICAg ICAgbG9uZ192YWx1ZSA9IChsb25nKWw7CisgICAgICBpZiAobCAhPSBsb25n X3ZhbHVlKQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgIGVsc2UgaWYg KFB5SW50X0NoZWNrIChweW9faW50KSkKKyAgICB7CisgICAgICBsb25nX3Zh bHVlID0gUHlJbnRfQXNMb25nIChweW9faW50KTsKKyAgICAgIGlmIChQeUVy cl9PY2N1cnJlZCAoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICBl bHNlCisgICAgcmV0dXJuIDA7CisgIGlmIChsb25nX3ZhbHVlICE9IChpbnQp IGxvbmdfdmFsdWUpCisgICAgcmV0dXJuIDA7CisgICp2YWx1ZXAgPSAoaW50 KSBsb25nX3ZhbHVlOworICByZXR1cm4gMTsKK30KKworLyogUGFyc2UgZ2l2 ZW4gdHVwbGUgb2YgUHl0aG9uIEludHMgaW50byBhbiBhcnJheS4gUmV0dXJu cyB0aGUgbnVtYmVyCisgICBvZiBpdGVtcyBpbiB0aGUgdHVwbGUsIG9yIC0x IG9uIGVycm9yIChiYWQgdHVwbGUgZWxlbWVudCB0eXBlLAorICAgYXJyYXkg dG9vIHNtYWxsKS4gICovCisKK3N0YXRpYyBQeV9zc2l6ZV90CitweXV3X3Bh cnNlX2ludHMgKFB5T2JqZWN0ICpweW9fc2VxdWVuY2UsIGludCAqdmFsdWVz LCBQeV9zc2l6ZV90IG1heF92YWx1ZXMpCit7CisgIFB5X3NzaXplX3Qgc2l6 ZTsKKyAgUHlfc3NpemVfdCBpOworCisgIGlmICghIFB5VHVwbGVfQ2hlY2sg KHB5b19zZXF1ZW5jZSkpCisgICAgcmV0dXJuIC0xOworICBzaXplID0gUHlU dXBsZV9TaXplIChweW9fc2VxdWVuY2UpOworICBpZiAoc2l6ZSA8IDAgfHwg c2l6ZSA+IG1heF92YWx1ZXMpCisgICAgcmV0dXJuIC0xOworICBmb3IgKGkg PSAwOyBpIDwgc2l6ZTsgKytpKQorICAgIHsKKyAgICAgIGlmICghcHl1d19w YXJzZV9pbnQgKFB5VHVwbGVfR2V0SXRlbSAocHlvX3NlcXVlbmNlLCBpKSwg JnZhbHVlc1tpXSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIHJl dHVybiBpOworfQorCisvKiBSZXRyaWV2ZSByZWdpc3RlciB2YWx1ZSBmb3Ig dGhlIGNhY2hlZCB1bndpbmQgaW5mbyBhcyB0YXJnZXQgcG9pbnRlci4KKyAg IFJldHVybiAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZS4gICovCisKK3N0 YXRpYyBpbnQKK3B5dXdfcmVnX3ZhbHVlIChjYWNoZWRfZnJhbWVfaW5mbyAq Y2FjaGVkX2ZyYW1lLCBpbnQgcmVnbnVtLCBDT1JFX0FERFIgKnZhbHVlKQor eworICBzdHJ1Y3QgcmVnX2luZm8gKnJlZ19pbmZvID0gY2FjaGVkX2ZyYW1l LT5yZWc7CisgIHN0cnVjdCByZWdfaW5mbyAqcmVnX2luZm9fZW5kID0gcmVn X2luZm8gKyBjYWNoZWRfZnJhbWUtPnJlZ19jb3VudDsKKworICBmb3IgKDsg cmVnX2luZm8gPCByZWdfaW5mb19lbmQ7ICsrcmVnX2luZm8pCisgICAgewor ICAgICAgaWYgKHJlZ19pbmZvLT5udW1iZXIgPT0gcmVnbnVtKQorICAgICAg ICB7CisgICAgICAgICAgKnZhbHVlID0gdW5wYWNrX3BvaW50ZXIKKyAgICAg ICAgICAgICAgKHJlZ2lzdGVyX3R5cGUgKGNhY2hlZF9mcmFtZS0+Z2RiYXJj aCwgcmVnbnVtKSwgcmVnX2luZm8tPmRhdGEpOworICAgICAgICAgIHJldHVy biAxOworICAgICAgICB9CisgICAgfQorCisgIGVycm9yIChfKCJQeXRob24g c25pZmZlciB1c2VzIHJlZ2lzdGVyICMlZCBmb3IgdGhpc19pZCwgIgorICAg ICAgICAgICAiYnV0IHRoaXMgcmVnaXN0ZXIgaXMgbm90IGF2YWlsYWJsZS4i KSwgcmVnbnVtKTsKK30KKworLyogZnJhbWVfdW53aW5kLnRoaXNfaWQgbWV0 aG9kLiAgKi8KKworc3RhdGljIHZvaWQKK3B5dXdfdGhpc19pZCAoc3RydWN0 IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKipjYWNoZV9wdHIsCisg ICAgICAgICAgICAgIHN0cnVjdCBmcmFtZV9pZCAqdGhpc19pZCkKK3sKKyAg KnRoaXNfaWQgPSAoKGNhY2hlZF9mcmFtZV9pbmZvICopICpjYWNoZV9wdHIp LT5mcmFtZV9pZDsKKyAgaWYgKHB5dXdfZGVidWcgPj0gMSkKKyAgICB7Cisg ICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICIlczogZnJh bWVfaWQ6ICIsIF9fRlVOQ1RJT05fXyk7CisgICAgICBmcHJpbnRfZnJhbWVf aWQgKGdkYl9zdGRsb2csICp0aGlzX2lkKTsKKyAgICAgIGZwcmludGZfdW5m aWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIlxuIik7CisgICAgfQorfQorCisvKiBm cmFtZV91bndpbmQucHJldl9yZWdpc3Rlci4gICovCisKK3N0YXRpYyBzdHJ1 Y3QgdmFsdWUgKgorcHl1d19wcmV2X3JlZ2lzdGVyIChzdHJ1Y3QgZnJhbWVf aW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKmNhY2hlX3B0ciwKKyAgICAgICAg ICAgICAgICAgICAgaW50IHJlZ251bSkKK3sKKyAgY2FjaGVkX2ZyYW1lX2lu Zm8gKmNhY2hlZF9mcmFtZSA9ICpjYWNoZV9wdHI7CisgIHN0cnVjdCByZWdf aW5mbyAqcmVnX2luZm8gPSBjYWNoZWRfZnJhbWUtPnJlZzsKKyAgc3RydWN0 IHJlZ19pbmZvICpyZWdfaW5mb19lbmQgPSByZWdfaW5mbyArIGNhY2hlZF9m cmFtZS0+cmVnX2NvdW50OworCisgIFRSQUNFX1BZX1VOV0lORCAoMSwgIiVz KGZyYW1lPSVwLC4uLixyZWc9JWQpXG4iLCBfX0ZVTkNUSU9OX18sIHRoaXNf ZnJhbWUsCisgICAgICAgICAgICAgICAgICAgcmVnbnVtKTsKKyAgZm9yICg7 IHJlZ19pbmZvIDwgcmVnX2luZm9fZW5kOyArK3JlZ19pbmZvKQorICAgIHsK KyAgICAgIGlmIChyZWdudW0gPT0gcmVnX2luZm8tPm51bWJlcikKKyAgICAg ICAgcmV0dXJuIGZyYW1lX3Vud2luZF9nb3RfYnl0ZXMgKHRoaXNfZnJhbWUs IHJlZ251bSwgcmVnX2luZm8tPmRhdGEpOworICAgIH0KKworICByZXR1cm4g ZnJhbWVfdW53aW5kX2dvdF9vcHRpbWl6ZWQgKHRoaXNfZnJhbWUsIHJlZ251 bSk7Cit9CisKKy8qIFBhcnNlIGZyYW1lIElEIHR1cGxlIHJldHVybmVkIGJ5 IHRoZSBzbmlmZmVyIGluZm8gR0RCJ3MgZnJhbWVfaWQgYW5kCisgICBzYXZl IGl0IGluIHRoZSBjYWNoZWQgZnJhbWUuICAqLworCitzdGF0aWMgdm9pZAor cHl1d19wYXJzZV9mcmFtZV9pZCAoY2FjaGVkX2ZyYW1lX2luZm8gKmNhY2hl ZF9mcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweW9f ZnJhbWVfaWRfcmVncykKK3sKKyAgaW50IHJlZ25vWzNdOworICBDT1JFX0FE RFIgc3AsIHBjLCBzcGVjaWFsOworCisgIGlmICghUHlUdXBsZV9DaGVjayAo cHlvX2ZyYW1lX2lkX3JlZ3MpKQorICAgIGVycm9yIChfKCJUaGUgc2Vjb25k IGVsZW1lbnQgb2YgdGhlIHBhaXIgcmV0dXJuZWQgYnkgYSBQeXRob24gIgor ICAgICAgICAgICAgICJzbmlmZmVyIHNob3VsZCBiZSBhIHR1cGxlLiIpKTsK KworICBzd2l0Y2ggKHB5dXdfcGFyc2VfaW50cyAocHlvX2ZyYW1lX2lkX3Jl Z3MsIHJlZ25vLCBBUlJBWV9TSVpFIChyZWdubykpKQorICAgIHsKKyAgICBj YXNlIDE6CisgICAgICBpZiAocHl1d19yZWdfdmFsdWUgKGNhY2hlZF9mcmFt ZSwgcmVnbm9bMF0sICZzcCkpCisgICAgICB7CisgICAgICAgIGNhY2hlZF9m cmFtZS0+ZnJhbWVfaWQgPSBmcmFtZV9pZF9idWlsZF93aWxkIChzcCk7Cisg ICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNh c2UgMjoKKyAgICAgIGlmIChweXV3X3JlZ192YWx1ZSAoY2FjaGVkX2ZyYW1l LCByZWdub1swXSwgJnNwKQorICAgICAgICAgIHx8IHB5dXdfcmVnX3ZhbHVl IChjYWNoZWRfZnJhbWUsIHJlZ25vWzFdLCAmcGMpKQorICAgICAgeworICAg ICAgICBjYWNoZWRfZnJhbWUtPmZyYW1lX2lkID0gZnJhbWVfaWRfYnVpbGQg KHNwLCBwYyk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGJy ZWFrOworICAgIGNhc2UgMzoKKyAgICAgIGlmIChweXV3X3JlZ192YWx1ZSAo Y2FjaGVkX2ZyYW1lLCByZWdub1swXSwgJnNwKQorICAgICAgICAgIHx8IHB5 dXdfcmVnX3ZhbHVlIChjYWNoZWRfZnJhbWUsIHJlZ25vWzFdLCAmcGMpCisg ICAgICAgIHx8IHB5dXdfcmVnX3ZhbHVlIChjYWNoZWRfZnJhbWUsIHJlZ25v WzJdLCAmc3BlY2lhbCkpCisgICAgICB7CisgICAgICAgIGNhY2hlZF9mcmFt ZS0+ZnJhbWVfaWQgPSBmcmFtZV9pZF9idWlsZF9zcGVjaWFsIChzcCwgcGMs IHNwZWNpYWwpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBi cmVhazsKKyAgICB9CisgIGVycm9yIChfKCJVbndpbmRlciBzaG91bGQgcmV0 dXJuIGEgdHVwbGUgb2YgMSB0byAzIGludHMgaW4gdGhlIHNlY29uZCBpdGVt LiIpKTsKK30KKworLyogRnJhbWUgc25pZmZlciBkaXNwYXRjaC4gICovCisK K3N0YXRpYyBpbnQKK3B5dXdfc25pZmZlciAoY29uc3Qgc3RydWN0IGZyYW1l X3Vud2luZCAqc2VsZiwgc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUs CisgICAgICAgICAgICAgIHZvaWQgKipjYWNoZV9wdHIpCit7CisgIHN0cnVj dCBnZGJhcmNoICpnZGJhcmNoOworICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51 cHM7CisgIHN0cnVjdCBjbGVhbnVwICpjYWNoZWRfZnJhbWVfY2xlYW51cHM7 CisgIFB5T2JqZWN0ICpweW9fbW9kdWxlOworICBQeU9iamVjdCAqcHlvX2V4 ZWN1dGU7CisgIFB5T2JqZWN0ICpweW9fc25pZmZlcl9pbmZvOworICBQeU9i amVjdCAqcHlvX3Vud2luZF9pbmZvOworICBjYWNoZWRfZnJhbWVfaW5mbyAq Y2FjaGVkX2ZyYW1lID0gTlVMTDsKKworICBnZGJhcmNoID0gKHN0cnVjdCBn ZGJhcmNoICopIChzZWxmLT51bndpbmRfZGF0YSk7CisgIGNsZWFudXBzID0g ZW5zdXJlX3B5dGhvbl9lbnYgKGdkYmFyY2gsIGN1cnJlbnRfbGFuZ3VhZ2Up OworICBUUkFDRV9QWV9VTldJTkQgKDMsICIlcyhTUD0lcywgUEM9JXMpXG4i LCBfX0ZVTkNUSU9OX18sCisgICAgICAgICAgICAgICAgICAgcGFkZHJlc3Mg KGdkYmFyY2gsIGdldF9mcmFtZV9zcCAodGhpc19mcmFtZSkpLAorICAgICAg ICAgICAgICAgICAgIHBhZGRyZXNzIChnZGJhcmNoLCBnZXRfZnJhbWVfcGMg KHRoaXNfZnJhbWUpKSk7CisgIHB5b19zbmlmZmVyX2luZm8gPSBmcmFtZV9p bmZvX3RvX3NuaWZmZXJfaW5mb19vYmplY3QgKHRoaXNfZnJhbWUpOworICBp ZiAocHlvX3NuaWZmZXJfaW5mbyA9PSBOVUxMKQorICAgIGdvdG8gZXJyb3I7 CisgIG1ha2VfY2xlYW51cF9weV9kZWNyZWYgKHB5b19zbmlmZmVyX2luZm8p OworCisgIGlmICgocHlvX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVs ZSAoImdkYi5mdW5jdGlvbi5zbmlmZmVycyIpKSA9PSBOVUxMKQorICAgIGdv dG8gZXJyb3I7CisgIG1ha2VfY2xlYW51cF9weV9kZWNyZWYgKHB5b19tb2R1 bGUpOworCisgIHB5b19leGVjdXRlID0gUHlPYmplY3RfR2V0QXR0clN0cmlu ZyAocHlvX21vZHVsZSwgImV4ZWN1dGVfc25pZmZlcnMiKTsKKyAgaWYgKHB5 b19leGVjdXRlID09IE5VTEwpCisgICAgZ290byBlcnJvcjsKKyAgbWFrZV9j bGVhbnVwX3B5X2RlY3JlZiAocHlvX2V4ZWN1dGUpOworCisgIHB5b191bndp bmRfaW5mbworICAgICAgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdz IChweW9fZXhlY3V0ZSwgcHlvX3NuaWZmZXJfaW5mbywgTlVMTCk7CisgIGlm IChweW9fdW53aW5kX2luZm8gPT0gTlVMTCkKKyAgICBnb3RvIGVycm9yOwor ICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChweW9fdW53aW5kX2luZm8pOwor ICBpZiAocHlvX3Vud2luZF9pbmZvID09IFB5X05vbmUpCisgICAgZ290byBl cnJvcjsKKworICAvKiBVbndpbmRfaW5mbyBpcyBhIChSRUdJU1RFUlMsIEZS QU1FX0lEX1JFR05VTVMpIHR1cGxlLiAgUkVHSVNURVJTCisgICAqIGlzIGEg dHVwbGUgb2YgdGhlIChSRUdfTlIsIFJFR19WQUxVRSkgdHVwbGVzLiBGUkFN RV9JRF9SRUdOVU1TIGlzCisgICAqIHRoZSB0dXBsZSBvZiBSRUdOTyB2YWx1 ZXMuICAqLworICBpZiAoIVB5VHVwbGVfQ2hlY2sgKHB5b191bndpbmRfaW5m bykKKyAgICAgIHx8IFB5VHVwbGVfU2l6ZSAocHlvX3Vud2luZF9pbmZvKSAh PSAyKQorICAgIGVycm9yIChfKCJTbmlmZmVyIHNob3VsZCByZXR1cm4gYSBw YWlyIChSRUdJU1RFUlMsIEZSQU1FX0lEX1JFR05VTVMpLiIpKTsKKworICB7 CisgICAgUHlPYmplY3QgKnB5b19yZWdpc3RlcnMgPSBQeVR1cGxlX0dldEl0 ZW0gKHB5b191bndpbmRfaW5mbywgMCk7CisgICAgaW50IGk7CisgICAgaW50 IHJlZ19jb3VudDsKKyAgICBzaXplX3QgY2FjaGVkX2ZyYW1lX3NpemU7Cisg ICAgc2l6ZV90IGdkYl9ieXRlc19jb3VudDsKKyAgICBnZGJfYnl0ZSAqZ2Ri X2RhdGFfZnJlZSwgKmdkYl9kYXRhX2VuZDsKKworICAgIGlmIChweW9fcmVn aXN0ZXJzID09IE5VTEwpCisgICAgICBnb3RvIGVycm9yOworICAgIGlmICgh UHlUdXBsZV9DaGVjayAocHlvX3JlZ2lzdGVycykpCisgICAgICBlcnJvciAo XygiVGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHJldHVybmVkIHBhaXIgc2hv dWxkIGJlIGEgdHVwbGUuIikpOworCisgICAgLyogRmlndXJlIG91dCBob3cg bXVjaCBzcGFjZSB3ZSBuZWVkIHRvIGFsbG9jYXRlLiAgKi8KKyAgICByZWdf Y291bnQgPSBQeVR1cGxlX1NpemUgKHB5b19yZWdpc3RlcnMpOworICAgIGlm IChyZWdfY291bnQgPD0gMCkKKyAgICAgIGVycm9yIChfKCJSZWdpc3RlciBs aXN0IHNob3VsZCBub3QgYmUgZW1wdHkuIikpOworICAgIC8qIFdlIG1pZ2h0 IG92ZXJlc3RpbWF0ZSBgZ2RiX2J5dGVzX2NvdW50JywgYnV0IGl0J3Mgbm90 IHdvcnRoCisgICAgICAgcGFyc2luZyByZWdpc3RlciBudW1iZXJzIHR3aWNl IHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgbnVtYmVyIG9mCisgICAgICAgYnl0 ZXMgbmVlZGVkLiAgKi8KKyAgICBnZGJfYnl0ZXNfY291bnQgPSByZWdfY291 bnQgKiBNQVhfUkVHSVNURVJfU0laRTsKKyAgICBjYWNoZWRfZnJhbWVfc2l6 ZSA9IHNpemVvZiAoKmNhY2hlZF9mcmFtZSkgKworICAgICAgICByZWdfY291 bnQgKiBzaXplb2YgKGNhY2hlZF9mcmFtZS0+cmVnWzBdKSArCisgICAgICAg IGdkYl9ieXRlc19jb3VudCAqIHNpemVvZiAoZ2RiX2J5dGUpOworCisgICAg Y2FjaGVkX2ZyYW1lID0geG1hbGxvYyAoY2FjaGVkX2ZyYW1lX3NpemUpOwor ICAgIGNhY2hlZF9mcmFtZV9jbGVhbnVwcyA9IG1ha2VfY2xlYW51cCAoeGZy ZWUsIGNhY2hlZF9mcmFtZSk7CisgICAgLyogQWxsb2NhdGlvbnMgYWZ0ZXIg dGhpcyBwb2ludCB3aWxsIGJlIGRpc2NhcmRlZCEgICovCisKKyAgICBnZGJf ZGF0YV9lbmQgPSAoZ2RiX2J5dGUgKikoKGNoYXIgKikgY2FjaGVkX2ZyYW1l ICsgY2FjaGVkX2ZyYW1lX3NpemUpOworICAgIGdkYl9kYXRhX2ZyZWUgPSBn ZGJfZGF0YV9lbmQgLSBnZGJfYnl0ZXNfY291bnQ7CisKKyAgICBjYWNoZWRf ZnJhbWUtPmdkYmFyY2ggPSBnZGJhcmNoOworICAgIGNhY2hlZF9mcmFtZS0+ cmVnX2NvdW50ID0gcmVnX2NvdW50OworCisgICAgLyogUG9wdWxhdGUgcmVn aXN0ZXJzIGFycmF5LiAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgcmVnX2Nv dW50OyBpKyspCisgICAgICB7CisgICAgICAgIFB5T2JqZWN0ICpweW9fcmVn ID0gUHlUdXBsZV9HZXRJdGVtIChweW9fcmVnaXN0ZXJzLCBpKTsKKyAgICAg ICAgc3RydWN0IHJlZ19pbmZvICpyZWcgPSAmKGNhY2hlZF9mcmFtZS0+cmVn W2ldKTsKKworICAgICAgICBpZiAocHlvX3JlZyA9PSBOVUxMKQorICAgICAg ICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNr IChweW9fcmVnKSB8fCBQeVR1cGxlX1NpemUgKHB5b19yZWcpICE9IDIKKyAg ICAgICAgICAgIHx8ICFweXV3X3BhcnNlX2ludCAoUHlUdXBsZV9HZXRJdGVt IChweW9fcmVnLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnJlZy0+bnVtYmVyKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBl cnJvciAoXygiUHl0aG9uIHNuaWZmZXIgcmV0dXJuZWQgYmFkIHJlZ2lzdGVy IHR1cGxlOiAiCisgICAgICAgICAgICAgICAgICAgICAiaXRlbSAjJWQgaXMg bm90IGEgKHJlZ19ubywgcmVnX2RhdGEpIHR1cGxlICIKKyAgICAgICAgICAg ICAgICAgICAgICJ3aXRoIGludGVnZXIgcmVnX25vIGFuZCByZWdfZGF0YS4i KSwgaSk7CisgICAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICBQ eU9iamVjdCAqcHlvX3JlZ192YWx1ZSA9IFB5VHVwbGVfR2V0SXRlbSAocHlv X3JlZywgMSk7CisgICAgICAgICAgc3RydWN0IHZhbHVlICp2YWx1ZTsKKyAg ICAgICAgICBzaXplX3QgZGF0YV9zaXplOworCisgICAgICAgICAgaWYgKHB5 b19yZWdfdmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7 CisKKyAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVfb2JqZWN0X3RvX3Zh bHVlIChweW9fcmVnX3ZhbHVlKSkgPT0gTlVMTCkKKyAgICAgICAgICAgIGVy cm9yIChfKCJQeXRob24gc25pZmZlciByZXR1cm5lZCBiYWQgcmVnaXN0ZXIg dHVwbGU6ICIKKyAgICAgICAgICAgICAgICAgICAgICJpdGVtICMlZCwgcmVn aXN0ZXIgdmFsdWUgc2hvdWxkIGhhdmUgdHlwZSAiCisgICAgICAgICAgICAg ICAgICAgICAiZ2RiLlZhbHVlLiIpLCBpKTsKKyAgICAgICAgICBkYXRhX3Np emUgPSByZWdpc3Rlcl9zaXplIChnZGJhcmNoLCByZWctPm51bWJlcik7Cisg ICAgICAgICAgaWYgKGRhdGFfc2l6ZSAhPSBUWVBFX0xFTkdUSCAodmFsdWVf ZW5jbG9zaW5nX3R5cGUgKHZhbHVlKSkpCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgIGVycm9yIChfKCJUaGUgdmFsdWUgb2YgdGhlIHJlZ2lzdGVy ICMlZCByZXR1cm5lZCBieSB0aGUgIgorICAgICAgICAgICAgICAgICAgICAg ICAiUHl0aG9uIHNuaWZmZXIgaGFzIHVuZXhwZWN0ZWQgc2l6ZTogJXUgaW5z dGVhZCAiCisgICAgICAgICAgICAgICAgICAgICAgICJvZiAldS4iKSwgcmVn LT5udW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQpKFRZ UEVfTEVOR1RIICh2YWx1ZV9lbmNsb3NpbmdfdHlwZSAodmFsdWUpKSksCisg ICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQpZGF0YV9zaXplKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAvKiBTaG91bGQgbm90IG92ZXJmbG93 ICB0aGUgYnVmZmVyLiAgKi8KKyAgICAgICAgICBnZGJfYXNzZXJ0ICgoZ2Ri X2RhdGFfZnJlZSArIGRhdGFfc2l6ZSkgPD0gZ2RiX2RhdGFfZW5kKTsKKyAg ICAgICAgICBtZW1jcHkgKGdkYl9kYXRhX2ZyZWUsIHZhbHVlX2NvbnRlbnRz ICh2YWx1ZSksIGRhdGFfc2l6ZSk7CisgICAgICAgICAgcmVnLT5kYXRhID0g Z2RiX2RhdGFfZnJlZTsKKyAgICAgICAgICBnZGJfZGF0YV9mcmVlICs9IGRh dGFfc2l6ZTsKKyAgICAgICAgfQorICAgICAgfQorICB9CisKKyAgeworICAg IFB5T2JqZWN0ICpweW9fZnJhbWVfaWRfcmVncyA9IFB5VHVwbGVfR2V0SXRl bSAocHlvX3Vud2luZF9pbmZvLCAxKTsKKyAgICBpZiAocHlvX2ZyYW1lX2lk X3JlZ3MgPT0gTlVMTCkKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgcHl1d19w YXJzZV9mcmFtZV9pZCAoY2FjaGVkX2ZyYW1lLCBweW9fZnJhbWVfaWRfcmVn cyk7CisgIH0KKworICAqY2FjaGVfcHRyID0gY2FjaGVkX2ZyYW1lOworICBk aXNjYXJkX2NsZWFudXBzIChjYWNoZWRfZnJhbWVfY2xlYW51cHMpOworICBk b19jbGVhbnVwcyAoY2xlYW51cHMpOworICByZXR1cm4gMTsKKworZXJyb3I6 CisgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisgIHJldHVybiAwOworfQor CisvKiBGcmFtZSBjYWNoZSByZWxlYXNlIHNoaW0uICAqLworCitzdGF0aWMg dm9pZAorcHl1d19kZWFsbG9jX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAq dGhpc19mcmFtZSwgdm9pZCAqY2FjaGUpCit7CisgIFRSQUNFX1BZX1VOV0lO RCAoMywgIiVzOiBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisgIHhmcmVlIChj YWNoZSk7Cit9CisKK3N0cnVjdCBweXV3X2dkYmFyY2hfZGF0YV90eXBlCit7 CisgIC8qIEhhcyB0aGUgdW53aW5kZXIgc2hpbSBiZWVuIHByZXBlbmRlZD8g Ki8KKyAgaW50IHVud2luZGVyX3JlZ2lzdGVyZWQ7Cit9OworCitzdGF0aWMg dm9pZCAqCitweXV3X2dkYmFyY2hfZGF0YV9pbml0IChzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaCkKK3sKKyAgcmV0dXJuIEdEQkFSQ0hfT0JTVEFDS19aQUxM T0MgKGdkYmFyY2gsIHN0cnVjdCBweXV3X2dkYmFyY2hfZGF0YV90eXBlKTsK K30KKworLyogTmV3IGluZmVyaW9yIGFyY2hpdGVjdHVyZSBjYWxsYmFjazog cmVnaXN0ZXIgdGhlIFB5dGhvbiBzbmlmZmVycworICAgaW50ZXJtZWRpYXJ5 LiAgKi8KKworc3RhdGljIHZvaWQKK3B5dXdfb25fbmV3X2dkYmFyY2ggKHN0 cnVjdCBnZGJhcmNoICpuZXdhcmNoKQoreworICBzdHJ1Y3QgcHl1d19nZGJh cmNoX2RhdGFfdHlwZSAqZGF0YSA9CisgICAgICBnZGJhcmNoX2RhdGEgKG5l d2FyY2gsIHB5dXdfZ2RiYXJjaF9kYXRhKTsKKworICBpZiAoIWRhdGEtPnVu d2luZGVyX3JlZ2lzdGVyZWQpCisgICAgeworICAgICAgc3RydWN0IGZyYW1l X3Vud2luZCAqdW53aW5kZXIKKyAgICAgICAgICA9IEdEQkFSQ0hfT0JTVEFD S19aQUxMT0MgKG5ld2FyY2gsIHN0cnVjdCBmcmFtZV91bndpbmQpOworCisg ICAgICB1bndpbmRlci0+dHlwZSA9IE5PUk1BTF9GUkFNRTsKKyAgICAgIHVu d2luZGVyLT5zdG9wX3JlYXNvbiA9IGRlZmF1bHRfZnJhbWVfdW53aW5kX3N0 b3BfcmVhc29uOworICAgICAgdW53aW5kZXItPnRoaXNfaWQgPSBweXV3X3Ro aXNfaWQ7CisgICAgICB1bndpbmRlci0+cHJldl9yZWdpc3RlciA9IHB5dXdf cHJldl9yZWdpc3RlcjsKKyAgICAgIHVud2luZGVyLT51bndpbmRfZGF0YSA9 ICh2b2lkICopIG5ld2FyY2g7CisgICAgICB1bndpbmRlci0+c25pZmZlciA9 IHB5dXdfc25pZmZlcjsKKyAgICAgIHVud2luZGVyLT5kZWFsbG9jX2NhY2hl ID0gcHl1d19kZWFsbG9jX2NhY2hlOworICAgICAgZnJhbWVfdW53aW5kX3By ZXBlbmRfdW53aW5kZXIgKG5ld2FyY2gsIHVud2luZGVyKTsKKyAgICAgIFRS QUNFX1BZX1VOV0lORCAoMSwgIiVzOiByZWdpc3RlcmVkIHVud2luZGVyIGZv ciAlc1xuIiwgX19GVU5DVElPTl9fLAorICAgICAgICAgICAgICAgICAgICAg ICBnZGJhcmNoX2JmZF9hcmNoX2luZm8gKG5ld2FyY2gpLT5wcmludGFibGVf bmFtZSk7CisgICAgICBkYXRhLT51bndpbmRlcl9yZWdpc3RlcmVkID0gMTsK KyAgICB9Cit9CisKKy8qIEluaXRpYWxpemUgdW53aW5kIG1hY2hpbmVyeS4g ICovCisKK2ludAorZ2RicHlfaW5pdGlhbGl6ZV91bndpbmQgKHZvaWQpCit7 CisgIGFkZF9zZXRzaG93X3p1aW50ZWdlcl9jbWQKKyAgICAgICgicHktdW53 aW5kIiwgY2xhc3NfbWFpbnRlbmFuY2UsICZweXV3X2RlYnVnLAorICAgICAg ICBfKCJTZXQgUHl0aG9uIHVud2luZGVyIGRlYnVnZ2luZy4iKSwKKyAgICAg ICAgXygiU2hvdyBQeXRob24gdW53aW5kZXIgZGVidWdnaW5nLiIpLAorICAg ICAgICBfKCJXaGVuIG5vbi16ZXJvLCBQeXRoaW4gdW53aW5kZXIgZGVidWdn aW5nIGlzIGVuYWJsZWQuIiksCisgICAgICAgIE5VTEwsCisgICAgICAgIE5V TEwsCisgICAgICAgICZzZXRkZWJ1Z2xpc3QsICZzaG93ZGVidWdsaXN0KTsK KyAgcHl1d19nZGJhcmNoX2RhdGEKKyAgICAgID0gZ2RiYXJjaF9kYXRhX3Jl Z2lzdGVyX3Bvc3RfaW5pdCAocHl1d19nZGJhcmNoX2RhdGFfaW5pdCk7Cisg IG9ic2VydmVyX2F0dGFjaF9hcmNoaXRlY3R1cmVfY2hhbmdlZCAocHl1d19v bl9uZXdfZ2RiYXJjaCk7CisgIGlmIChQeVR5cGVfUmVhZHkgKCZzbmlmZmVy X2luZm9fb2JqZWN0X3R5cGUpIDwgMCkKKyAgICByZXR1cm4gLTE7CisgIHJl dHVybiBnZGJfcHltb2R1bGVfYWRkb2JqZWN0IChnZGJfbW9kdWxlLCAiU25p ZmZlckluZm8iLAorICAgICAgKFB5T2JqZWN0ICopICZzbmlmZmVyX2luZm9f b2JqZWN0X3R5cGUpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgc25pZmZl cl9pbmZvX29iamVjdF9tZXRob2RzW10gPQoreworICB7ICJyZWFkX3JlZ2lz dGVyIiwgc25pZmZlcl9pbmZvcHlfcmVhZF9yZWdpc3RlciwgTUVUSF9WQVJB UkdTLAorICAgICJyZWFkX3JlZ2lzdGVyIChyZWdpc3Rlcl9uYW1lKSAtPiBn ZGIuVmFsdWVcblwKK1JldHVybiB0aGUgdmFsdWUgb2YgdGhlIHJlZ2lzdGVy IGluIHRoZSBmcmFtZS4iIH0sCisgIHtOVUxMfSAgLyogU2VudGluZWwgKi8K K307CisKK3N0YXRpYyBQeVR5cGVPYmplY3Qgc25pZmZlcl9pbmZvX29iamVj dF90eXBlID0KK3sKKyAgUHlWYXJPYmplY3RfSEVBRF9JTklUIChOVUxMLCAw KQorICAiZ2RiLlNuaWZmZXJJbmZvIiwgICAgICAgICAgICAgIC8qIHRwX25h bWUgKi8KKyAgc2l6ZW9mIChzbmlmZmVyX2luZm9fb2JqZWN0KSwgICAvKiB0 cF9iYXNpY3NpemUgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiB0cF9pdGVtc2l6ZSAqLworICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KKyAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRy ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBf Y29tcGFyZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRwX3JlcHIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNo ICAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRw X2NhbGwgKi8KKyAgc25pZmZlcl9pbmZvcHlfc3RyLCAgICAgICAgICAgICAv KiB0cF9zdHIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF9nZXRhdHRybyAqLworICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgIFB5X1RQ RkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KKyAg IkdEQiBzbmlmZmVySW5mbyBvYmplY3QiLCAgICAgICAvKiB0cF9kb2MgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2 ZXJzZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHRwX2NsZWFyICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4 dCAqLworICBzbmlmZmVyX2luZm9fb2JqZWN0X21ldGhvZHMsICAgIC8qIHRw X21ldGhvZHMgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF9tZW1iZXJzICovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9z ZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0 cF9kaWN0b2Zmc2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdHBfaW5pdCAqLworICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHRwX2FsbG9jICovCit9OwpkaWZmIC0tZ2l0IGEvZ2Ri L3B5dGhvbi9weXRob24taW50ZXJuYWwuaCBiL2dkYi9weXRob24vcHl0aG9u LWludGVybmFsLmgKaW5kZXggYTc3ZjVhNi4uMzQxNzlkZSAxMDA2NDQKLS0t IGEvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaAorKysgYi9nZGIvcHl0 aG9uL3B5dGhvbi1pbnRlcm5hbC5oCkBAIC0zOTAsMTIgKzM5MCwxNCBAQCBQ eU9iamVjdCAqcHNwYWNlX3RvX3BzcGFjZV9vYmplY3QgKHN0cnVjdCBwcm9n cmFtX3NwYWNlICopCiAgICAgQ1BZQ0hFQ0tFUl9SRVRVUk5TX0JPUlJPV0VE X1JFRjsKIFB5T2JqZWN0ICpwc3B5X2dldF9wcmludGVycyAoUHlPYmplY3Qg Kiwgdm9pZCAqKTsKIFB5T2JqZWN0ICpwc3B5X2dldF9mcmFtZV9maWx0ZXJz IChQeU9iamVjdCAqLCB2b2lkICopOworUHlPYmplY3QgKnBzcHlfZ2V0X2Zy YW1lX3NuaWZmZXJzIChQeU9iamVjdCAqLCB2b2lkICopOwogUHlPYmplY3Qg KnBzcHlfZ2V0X3htZXRob2RzIChQeU9iamVjdCAqLCB2b2lkICopOwogCiBQ eU9iamVjdCAqb2JqZmlsZV90b19vYmpmaWxlX29iamVjdCAoc3RydWN0IG9i amZpbGUgKikKICAgICBDUFlDSEVDS0VSX1JFVFVSTlNfQk9SUk9XRURfUkVG OwogUHlPYmplY3QgKm9iamZweV9nZXRfcHJpbnRlcnMgKFB5T2JqZWN0ICos IHZvaWQgKik7CiBQeU9iamVjdCAqb2JqZnB5X2dldF9mcmFtZV9maWx0ZXJz IChQeU9iamVjdCAqLCB2b2lkICopOworUHlPYmplY3QgKm9iamZweV9nZXRf ZnJhbWVfc25pZmZlcnMgKFB5T2JqZWN0ICosIHZvaWQgKik7CiBQeU9iamVj dCAqb2JqZnB5X2dldF94bWV0aG9kcyAoUHlPYmplY3QgKiwgdm9pZCAqKTsK IFB5T2JqZWN0ICpnZGJweV9sb29rdXBfb2JqZmlsZSAoUHlPYmplY3QgKnNl bGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3cpOwogCkBAIC00OTAs NiArNDkyLDggQEAgaW50IGdkYnB5X2luaXRpYWxpemVfYXJjaCAodm9pZCkK ICAgQ1BZQ0hFQ0tFUl9ORUdBVElWRV9SRVNVTFRfU0VUU19FWENFUFRJT047 CiBpbnQgZ2RicHlfaW5pdGlhbGl6ZV94bWV0aG9kcyAodm9pZCkKICAgQ1BZ Q0hFQ0tFUl9ORUdBVElWRV9SRVNVTFRfU0VUU19FWENFUFRJT047CitpbnQg Z2RicHlfaW5pdGlhbGl6ZV91bndpbmQgKHZvaWQpCisgIENQWUNIRUNLRVJf TkVHQVRJVkVfUkVTVUxUX1NFVFNfRVhDRVBUSU9OOwogCiBzdHJ1Y3QgY2xl YW51cCAqbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAoUHlPYmplY3QgKnB5KTsK IHN0cnVjdCBjbGVhbnVwICptYWtlX2NsZWFudXBfcHlfeGRlY3JlZiAoUHlP YmplY3QgKnB5KTsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHl0aG9uLmMg Yi9nZGIvcHl0aG9uL3B5dGhvbi5jCmluZGV4IDM0NGQ4ZDIuLjNlMDc5YjUg MTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHl0aG9uLmMKKysrIGIvZ2RiL3B5 dGhvbi9weXRob24uYwpAQCAtMTc5MCw3ICsxNzkwLDggQEAgbWVzc2FnZSA9 PSBhbiBlcnJvciBtZXNzYWdlIHdpdGhvdXQgYSBzdGFjayB3aWxsIGJlIHBy aW50ZWQuIiksCiAgICAgICB8fCBnZGJweV9pbml0aWFsaXplX25ld19vYmpm aWxlX2V2ZW50ICgpICA8IDAKICAgICAgIHx8IGdkYnB5X2luaXRpYWxpemVf Y2xlYXJfb2JqZmlsZXNfZXZlbnQgKCkgIDwgMAogICAgICAgfHwgZ2RicHlf aW5pdGlhbGl6ZV9hcmNoICgpIDwgMAotICAgICAgfHwgZ2RicHlfaW5pdGlh bGl6ZV94bWV0aG9kcyAoKSA8IDApCisgICAgICB8fCBnZGJweV9pbml0aWFs aXplX3htZXRob2RzICgpIDwgMAorICAgICAgfHwgZ2RicHlfaW5pdGlhbGl6 ZV91bndpbmQgKCkgPCAwKQogICAgIGdvdG8gZmFpbDsKIAogICBnZGJweV90 b19zdHJpbmdfY3N0ID0gUHlTdHJpbmdfRnJvbVN0cmluZyAoInRvX3N0cmlu ZyIpOwpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LXVud2luZC1tYWludC5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LXVud2luZC1tYWludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjhjMWQ5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktdW53aW5kLW1haW50LmMKQEAgLTAsMCArMSwy NCBAQAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdO VSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMTUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4g ICovCisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgaW50IGkgPSAwOworCisg IHJldHVybiBpOyAvKiBuZXh0LWxpbmUgKi8KK30KZGlmZiAtLWdpdCBhL2dk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQtbWFpbnQuZXhwIGIv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2luZC1tYWludC5leHAK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwZTFhYQot LS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS11bndpbmQtbWFpbnQuZXhwCkBAIC0wLDAgKzEsNjQgQEAKKyMgQ29weXJp Z2h0IChDKSAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor CisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo ZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVzdHMgUHl0aG9uLWJhc2VkCisjIHVu d2luZGluZyBDTEkuCisKK2xvYWRfbGliIGdkYi1weXRob24uZXhwCisKK3N0 YW5kYXJkX3Rlc3RmaWxlCisKK2lmIHtbcHJlcGFyZV9mb3JfdGVzdGluZyAk e3Rlc3RmaWxlfS5leHAgJHt0ZXN0ZmlsZX0gJHtzcmNmaWxlfV0gfSB7Cisg ICAgcmV0dXJuIC0xCit9CisKKyMgU2tpcCBhbGwgdGVzdHMgaWYgUHl0aG9u IHNjcmlwdGluZyBpcyBub3QgZW5hYmxlZC4KK2lmIHsgW3NraXBfcHl0aG9u X3Rlc3RzXSB9IHsgY29udGludWUgfQorCitzZXQgcHlmaWxlIFtnZGJfcmVt b3RlX2Rvd25sb2FkIGhvc3QgJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3Rlc3Rm aWxlfS5weV0KKworaWYgIVtydW50b19tYWluIF0gdGhlbiB7CisgICAgZmFp bCAiQ2FuJ3QgcnVuIHRvIG1haW4iCisgICAgcmV0dXJuIC0xCit9CisKK2dk Yl90ZXN0ICJzb3VyY2UgJHtweWZpbGV9IiAiUHl0aG9uIHNjcmlwdCBpbXBv cnRlZCIgImltcG9ydCBweXRob24gc2NyaXB0cyIKKworZ2RiX3Rlc3Rfc2Vx dWVuY2UgImluZm8gc25pZmZlciIgIlNob3cgYWxsIHNuaWZmZXJzIiB7Cisg ICAgImdsb2JhbCBzbmlmZmVyczoiCisgICAgIiAgZ2xvYmFsX3NuaWZmZXIi CisgICAgInByb2dzcGFjZS4qc25pZmZlcnM6IgorICAgICJweV91bndpbmRf bWFpbnRfcHNfc25pZmZlciIKK30KKworZ2RiX2JyZWFrcG9pbnQgJHtzcmNm aWxlfTpbZ2RiX2dldF9saW5lX251bWJlciAibmV4dC1saW5lIl0KKworZ2Ri X3Rlc3Rfc2VxdWVuY2UgImNvbnRpbnVlIiAiU25pZmZlcnMgY2FsbGVkIiB7 CisgICAgInB5X3Vud2luZF9tYWludF9wc19zbmlmZmVyIGNhbGxlZCIKKyAg ICAiZ2xvYmFsX3NuaWZmZXIgY2FsbGVkIgorfQorCitnZGJfdGVzdCAiZGlz YWJsZSBzbmlmZmVyIGdsb2JhbCAuKiIgIjEgc25pZmZlciBkaXNhYmxlZCIg IlNuaWZmZXIgZGlzYWJsZWQiCisKK2dkYl90ZXN0X3NlcXVlbmNlICJpbmZv IHNuaWZmZXIiICJTaG93IHdpdGggZ2xvYmFsIHNuaWZmZXIgZGlzYWJsZWQi IHsKKyAgICAiZ2xvYmFsIHNuaWZmZXJzOiIKKyAgICAiICBnbG9iYWxfc25p ZmZlclxcW2Rpc2FibGVkXFxdIgorICAgICJwcm9nc3BhY2UuKnNuaWZmZXJz OiIKKyAgICAiICBweV91bndpbmRfbWFpbnRfcHNfc25pZmZlciIKK30KKwor Z2RiX3Rlc3Rfc2VxdWVuY2UgIndoZXJlIiAiR2xvYmFsIHNuaWZmZXIgZGlz YWJsZWQiIHsKKyAgICAicHlfdW53aW5kX21haW50X3BzX3NuaWZmZXIgY2Fs bGVkXHJcbiMwICBtYWluIgorfQpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LXVud2luZC1tYWludC5weSBiL2dkYi90ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9weS11bndpbmQtbWFpbnQucHkKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiNzAyYwotLS0gL2Rldi9udWxs CisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQtbWFp bnQucHkKQEAgLTAsMCArMSw1OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdEQiB0ZXN0c3Vp dGUuICBJdCB0ZXN0cyBweXRob24gc25pZmZlcnMuCisKK2ltcG9ydCByZQor aW1wb3J0IGdkYi50eXBlcworZnJvbSBnZGIuc25pZmZlciBpbXBvcnQgU25p ZmZlciwgcmVnaXN0ZXJfc25pZmZlcgorCitjbGFzcyBUZXN0R2xvYmFsU25p ZmZlcihTbmlmZmVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAg ICAgIHN1cGVyKFRlc3RHbG9iYWxTbmlmZmVyLCBzZWxmKS5fX2luaXRfXygi Z2xvYmFsX3NuaWZmZXIiKQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHNu aWZmZXJfaW5mbyk6CisgICAgICAgIHByaW50ICIlcyBjYWxsZWQiICUgc2Vs Zi5uYW1lCisgICAgICAgIHJldHVybiBOb25lCisKK2NsYXNzIFRlc3RQcm9n c3BhY2VTbmlmZmVyKFNuaWZmZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm LCBuYW1lKToKKyAgICAgICAgc3VwZXIoVGVzdFByb2dzcGFjZVNuaWZmZXIs IHNlbGYpLl9faW5pdF9fKCIlc19wc19zbmlmZmVyIiAlIG5hbWUpCisKKyAg ICBkZWYgX19jYWxsX18oc2VsZiwgc25pZmZlcl9pbmZvKToKKyAgICAgICAg cHJpbnQgIiVzIGNhbGxlZCIgJSBzZWxmLm5hbWUKKyAgICAgICAgcmV0dXJu IE5vbmUKKworY2xhc3MgVGVzdE9iamZpbGVTbmlmZmVyKFNuaWZmZXIpOgor ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc3VwZXIo VGVzdE9iamZpbGVTbmlmZmVyLCBzZWxmKS5fX2luaXRfXygiJXNfb2JqX3Nu aWZmZXIiICUgbmFtZSkKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBzbmlm ZmVyX2luZm8pOgorICAgICAgICBwcmludCAiJXMgY2FsbGVkIiAlIHNlbGYu bmFtZQorICAgICAgICByZXR1cm4gTm9uZQorCisKKworZ2RiLnNuaWZmZXIu cmVnaXN0ZXJfc25pZmZlcihnZGIsIFRlc3RHbG9iYWxTbmlmZmVyKCkpCitz YXdfcnVudGltZV9lcnJvciA9IEZhbHNlCit0cnk6CisgICAgZ2RiLnNuaWZm ZXIucmVnaXN0ZXJfc25pZmZlcihnZGIsIFRlc3RHbG9iYWxTbmlmZmVyKCks IHJlcGxhY2U9RmFsc2UpCitleGNlcHQgUnVudGltZUVycm9yOgorICAgIHNh d19ydW50aW1lX2Vycm9yID0gVHJ1ZQoraWYgbm90IHNhd19ydW50aW1lX2Vy cm9yOgorICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiTWlzc2luZyBydW50aW1l IGVycm9yIGZyb20gcmVnaXN0ZXJfc25pZmZlci4iKQorZ2RiLnNuaWZmZXIu cmVnaXN0ZXJfc25pZmZlcihnZGIsIFRlc3RHbG9iYWxTbmlmZmVyKCksIHJl cGxhY2U9VHJ1ZSkKK2dkYi5zbmlmZmVyLnJlZ2lzdGVyX3NuaWZmZXIoZ2Ri LmN1cnJlbnRfcHJvZ3NwYWNlKCksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBUZXN0UHJvZ3NwYWNlU25pZmZlcigicHlfdW53aW5kX21haW50 IikpCitwcmludCAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZCIKZGlmZiAtLWdp dCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQuYyBiL2dk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQxZDc4Ci0tLSAvZGV2L251 bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2luZC5j CkBAIC0wLDAgKzEsODEgQEAKKy8qIFRoaXMgdGVzdCBwcm9ncmFtIGlzIHBh cnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQg MjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhpcyBpcyB0aGUgdGVzdCBw cm9ncmFtIGxvYWRlZCBpbnRvIEdEQiBieSB0aGUgcHktdW53aW5kIHRlc3Qu ICAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8u aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworc3RhdGljIHZvaWQgKgorc3dh cF92YWx1ZSAodm9pZCAqKmxvY2F0aW9uLCB2b2lkICpuZXdfdmFsdWUpCit7 CisgIHZvaWQgKm9sZF92YWx1ZSA9ICpsb2NhdGlvbjsKKyAgKmxvY2F0aW9u ID0gbmV3X3ZhbHVlOworICByZXR1cm4gb2xkX3ZhbHVlOworfQorCitzdGF0 aWMgdm9pZAorYmFkX2xheW91dCh2b2lkICoqdmFyaWFibGVfcHRyLCB2b2lk ICpmcCkKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiRmlyc3QgdmFyaWFibGUg c2hvdWxkIGJlIGFsbG9jYXRlZCBvbmUgd29yZCBiZWxvdyAiCisgICAgICAg ICAgICJ0aGUgZnJhbWUuICBHb3QgdmFyaWFibGUncyBhZGRyZXNzICVwLCBm cmFtZSBhdCAlcCBpbnN0ZWFkLlxuIiwKKyAgICAgICAgICAgdmFyaWFibGVf cHRyLCBmcCk7CisgIGFib3J0KCk7Cit9CisKKyNkZWZpbmUgTVlfRlJBTUUg KF9fYnVpbHRpbl9mcmFtZV9hZGRyZXNzICgwKSkKKworc3RhdGljIHZvaWQK K2NvcnJ1cHRfZnJhbWVfaW5uZXIgKHZvaWQpCit7CisgIC8qIFNhdmUgb3V0 ZXIgZnJhbWUgYWRkcmVzcywgdGhlbiBjb3JydXB0IHRoZSB1bndpbmQgY2hh aW4gYnkKKyAgICAgc2V0dGluZyB0aGUgb3V0ZXIgZnJhbWUgYWRkcmVzcyBp biBpdCB0byBzZWxmLiAgVGhpcyBpcworICAgICBBQkktc3BlY2lmaWM6IHRo ZSBmaXJzdCB3b3JkIG9mIHRoZSBmcmFtZSBjb250YWlucyBwcmV2aW91cyBm cmFtZQorICAgICBhZGRyZXNzIGluIGFtZDY0LiAgKi8KKyAgdm9pZCAqcHJl dmlvdXNfZnAgPSBzd2FwX3ZhbHVlICgodm9pZCAqKikgTVlfRlJBTUUsIE1Z X0ZSQU1FKTsKKworICAvKiBWZXJpZnkgdGhlIGNvbXBpbGVyIGFsbG9jYXRl cyB0aGUgZmlyc3QgbG9jYWwgdmFyaWFibGUgb25lIHdvcmQKKyAgICAgYmVs b3cgZnJhbWUuICBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0IHVud2luZGVyIGV4 cGVjdHMgdG8gZmluZCB0aGUKKyAgICAgY29ycmVjdCBvdXRlciBmcmFtZSBh ZGRyZXNzLiAgKi8KKyAgaWYgKCZwcmV2aW91c19mcCArIDEgIT0gKHZvaWQg KiopIE1ZX0ZSQU1FKQorICAgIGJhZF9sYXlvdXQgKCZwcmV2aW91c19mcCAr IDEsIE1ZX0ZSQU1FKTsKKworICAvKiBOb3cgcmVzdG9yZSBpdCBzbyB0aGF0 IHdlIGNhbiByZXR1cm4uICBUaGUgdGVzdCBzZXRzIHRoZQorICAgICBicmVh a3BvaW50IGp1c3QgYmVmb3JlIHRoaXMgaGFwcGVucywgYW5kIEdEQiB3aWxs IG5vdCBiZSBhYmxlIHRvCisgICAgIHNob3cgdGhlIGJhY2t0cmFjZSB3aXRo b3V0IEpJVCByZWFkZXIuICAqLworICBzd2FwX3ZhbHVlICgodm9pZCAqKikg TVlfRlJBTUUsIHByZXZpb3VzX2ZwKTsgLyogYnJlYWsgYmFja3RyYWNlLWJy b2tlbiAqLworfQorCitzdGF0aWMgdm9pZAorY29ycnVwdF9mcmFtZV9vdXRl ciAodm9pZCkKK3sKKyAgLyogU2VlIGFib3ZlIGZvciB0aGUgZXhwbGFuYXRp b24gb2YgdGhlIGNvZGUgaGVyZS4gIFRoaXMgZnVuY3Rpb24KKyAgICAgY29y cnVwdHMgaXRzIGZyYW1lLCB0b28sIGFuZCB0aGVuIGNhbGxzIHRoZSBpbm5l ciBvbmUuICAqLworICB2b2lkICpwcmV2aW91c19mcCA9IHN3YXBfdmFsdWUg KCh2b2lkICoqKSBNWV9GUkFNRSwgTVlfRlJBTUUpOworICBpZiAoJnByZXZp b3VzX2ZwICsgMSAhPSAodm9pZCAqKikgTVlfRlJBTUUpCisgICAgYmFkX2xh eW91dCAoJnByZXZpb3VzX2ZwLCBNWV9GUkFNRSk7CisgIGNvcnJ1cHRfZnJh bWVfaW5uZXIgKCk7CisgIHN3YXBfdmFsdWUgKCh2b2lkICoqKSBNWV9GUkFN RSwgcHJldmlvdXNfZnApOworfQorCitpbnQKK21haW4gKCkKK3sKKyAgY29y cnVwdF9mcmFtZV9vdXRlciAoKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1n aXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLmV4cCBi L2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQuZXhwCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZjA5YjMKLS0tIC9k ZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53 aW5kLmV4cApAQCAtMCwwICsxLDU0IEBACisjIENvcHlyaWdodCAoQykgMjAx NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor IyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIwor IyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RCIHRlc3Rz dWl0ZS4gIEl0IHZlcmlmaWVzIHRoYXQgZnJhbWUKKyMgc25pZmZlcnMgY2Fu IGJlIGltcGxlbWVudGVkIGluIFB5dGhvbi4KKworbG9hZF9saWIgZ2RiLXB5 dGhvbi5leHAKKworc3RhbmRhcmRfdGVzdGZpbGUKKworaWYgeyBbcHJlcGFy ZV9mb3JfdGVzdGluZyAke3Rlc3RmaWxlfS5leHAgJHt0ZXN0ZmlsZX0gJHtz cmNmaWxlfV0gfSB7CisgICAgcmV0dXJuIC0xCit9CisKKyMgU2tpcCBhbGwg dGVzdHMgaWYgUHl0aG9uIHNjcmlwdGluZyBpcyBub3QgZW5hYmxlZC4KK2lm IHsgW3NraXBfcHl0aG9uX3Rlc3RzXSB9IHsgY29udGludWUgfQorCisjIFRo aXMgdGVzdCBydW5zIG9uIGEgc3BlY2lmaWMgcGxhdGZvcm0uCitpZiB7ICEg W2lzdGFyZ2V0IHg4Nl82NC0qXX0geyBjb250aW51ZSB9CisKKyMgVGhlIGZv bGxvd2luZyB0ZXN0cyByZXF1aXJlIGV4ZWN1dGlvbi4KKworaWYgIVtydW50 b19tYWluXSB0aGVuIHsKKyAgICBmYWlsICJDYW4ndCBydW4gdG8gbWFpbiIK KyAgICByZXR1cm4gMAorfQorCitzZXQgcHlmaWxlIFtnZGJfcmVtb3RlX2Rv d25sb2FkIGhvc3QgJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxlfS5w eV0KKworZ2RiX2JyZWFrcG9pbnQgW2dkYl9nZXRfbGluZV9udW1iZXIgImJy ZWFrIGJhY2t0cmFjZS1icm9rZW4iXQorCitnZGJfdGVzdCAic291cmNlICR7 cHlmaWxlfSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQiIFwKKyAgICAgICAg ICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMiCisKK2dkYl9jb250aW51ZV90b19i cmVha3BvaW50ICJicmVhayBiYWNrdHJhY2UtYnJva2VuIgorZ2RiX3Rlc3Rf c2VxdWVuY2UgIndoZXJlIiAgIkJhY2t0cmFjZSByZXN0b3JlZCBieSBzbmlm ZmVyIiB7CisgICAgIlxcclxcbiMwIC4qIGNvcnJ1cHRfZnJhbWVfaW5uZXIg XFwoXFwpIGF0ICIKKyAgICAiXFxyXFxuIzEgLiogY29ycnVwdF9mcmFtZV9v dXRlciBcXChcXCkgYXQgIgorICAgICJcXHJcXG4jMiAuKiBtYWluIFxcKC4q XFwpIGF0IgorfQorCisKZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2Ri LnB5dGhvbi9weS11bndpbmQucHkgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktdW53aW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjg2NmQ4ODIKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktdW53aW5kLnB5CkBAIC0wLDAgKzEsNzQgQEAK KyMgQ29weXJpZ2h0IChDKSAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisj IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisj IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitpbXBvcnQgZ2RiCitmcm9t IGdkYi5zbmlmZmVyIGltcG9ydCBTbmlmZmVyCisKK2NsYXNzIFRlc3RTbmlm ZmVyKFNuaWZmZXIpOgorICAgIEFNRDY0X1JCUCA9IDYKKyAgICBBTUQ2NF9S U1AgPSA3CisgICAgQU1ENjRfUklQID0gMTYKKworICAgIGRlZiBfX2luaXRf XyhzZWxmKToKKyAgICAgICAgU25pZmZlci5fX2luaXRfXyhzZWxmLCAidGVz dCBzbmlmZmVyIikKKyAgICAgICAgc2VsZi5jaGFyX3B0cl90ID0gZ2RiLmxv b2t1cF90eXBlKCJ1bnNpZ25lZCBjaGFyIikucG9pbnRlcigpCisgICAgICAg IHNlbGYuY2hhcl9wdHJfcHRyX3QgPSBzZWxmLmNoYXJfcHRyX3QucG9pbnRl cigpCisKKyAgICBkZWYgX3JlYWRfd29yZChzZWxmLCBhZGRyZXNzKToKKyAg ICAgICAgcmV0dXJuIGFkZHJlc3MuY2FzdChzZWxmLmNoYXJfcHRyX3B0cl90 KS5kZXJlZmVyZW5jZSgpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgc25p ZmZlcl9pbmZvKToKKyAgICAgICAgIiIiVGVzdCBzbmlmZmVyIHdyaXR0ZW4g aW4gUHl0aG9uLgorCisgICAgICAgIFRoaXMgc25pZmZlciBjYW4gdW53aW5k IHRoZSBmcmFtZXMgdGhhdCBoYXZlIGJlZW4gZGVsaWJlcmF0ZWx5CisgICAg ICAgIGNvcnJ1cHRlZCBpbiBhIHNwZWNpZmljIHdheSAoZnVuY3Rpb25zIGlu IHRoZSBhY2NvbXBhbnlpbmcKKyAgICAgICAgcHktdW53aW5kLmMgZmlsZSBk byB0aGF0LikKKyAgICAgICAgVGhpcyBjb2RlIGlzIG9ubHkgb24gQU1ENjQu CisgICAgICAgIE9uIEFNRDY0ICRSQlAgcG9pbnRzIHRvIHRoZSBpbm5lcm1v c3QgZnJhbWUgKHVubGVzcyB0aGUgY29kZQorICAgICAgICB3YXMgY29tcGls ZWQgd2l0aCAtZm9taXQtZnJhbWUtcG9pbnRlciksIHdoaWNoIGNvbnRhaW5z IHRoZQorICAgICAgICBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyBmcmFtZSBh dCBvZmZzZXQgMC4gVGhlIGZ1bmN0aW9ucworICAgICAgICBkZWxpYmVyYXRl bHkgY29ycnVwdCB0aGVpciBmcmFtZXMgYXMgZm9sbG93czoKKyAgICAgICAg ICAgICAgICAgICAgIEJlZm9yZSAgICAgICAgICAgICAgICAgQWZ0ZXIKKyAg ICAgICAgICAgICAgICAgICBDb3JydXB0aW9uOiAgICAgICAgICAgQ29ycnVw dGlvbjoKKyAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAg ICstLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgUkJQLTggICB8ICAgICAgICAg ICAgICB8ICAgICAgIHwgUHJldmlvdXMgUkJQIHwKKyAgICAgICAgICAgICAg ICArLS0tLS0tLS0tLS0tLS0rICAgICAgICstLS0tLS0tLS0tLS0tLSsKKyAg ICAgICAgUkJQICAgICArIFByZXZpb3VzIFJCUCB8ICAgICAgIHwgICAgUkJQ ICAgICAgIHwKKyAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAg ICAgICstLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgUkJQKzggICB8IFJldHVy biBSSVAgICB8ICAgICAgIHwgUmV0dXJuICBSSVAgIHwKKyAgICAgICAgICAg ICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICstLS0tLS0tLS0tLS0tLSsK KyAgICAgICAgT2xkIFNQICB8ICAgICAgICAgICAgICB8ICAgICAgIHwgICAg ICAgICAgICAgIHwKKworICAgICAgICBUaGlzIHNuaWZmZXIgcmVjb2duaXpl cyB0aGUgY29ycnVwdCBmcmFtZXMgYnkgY2hlY2tpbmcgdGhhdAorICAgICAg ICAqUkJQID09IFJCUCwgYW5kIHJlc3RvcmVzIHByZXZpb3VzIFJCUCBmcm9t IHRoZSB3b3JkIGFib3ZlIGl0LgorICAgICAgICAiIiIKKyAgICAgICAgYnAg PSBzbmlmZmVyX2luZm8ucmVhZF9yZWdpc3RlcigKKyAgICAgICAgICAgIFRl c3RTbmlmZmVyLkFNRDY0X1JCUCkuY2FzdChzZWxmLmNoYXJfcHRyX3QpCisg ICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuX3JlYWRfd29yZChi cCkgIT0gYnA6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAg ICAgICAgICMgRm91bmQgdGhlIGZyYW1lIHRoYXQgdGhlIHRlc3QgcHJvZ3Jh bSBoYXMgY29ycnVwdGVkIGZvciB1cy4KKyAgICAgICAgICAgICMgVGhlIGNv cnJlY3QgQlAgZm9yIHRoZSBvdXRlciBmcmFtZSBoYXMgYmVlbiBzYXZlZCBv bmUgd29yZAorICAgICAgICAgICAgIyBhYm92ZSwgcHJldmlvdXMgSVAgYW5k IFNQIGFyZSBhdCB0aGUgZXhwZWN0ZWQgcGxhY2VzCisgICAgICAgICAgICBw cmV2aW91c19zcCA9IGJwICsgMTYKKyAgICAgICAgICAgIHJldHVybiAoKChU ZXN0U25pZmZlci5BTUQ2NF9SQlAsIHNlbGYuX3JlYWRfd29yZChicCAtIDgp KSwKKyAgICAgICAgICAgICAgICAgICAgIChUZXN0U25pZmZlci5BTUQ2NF9S SVAsIHNlbGYuX3JlYWRfd29yZChicCArIDgpKSwKKyAgICAgICAgICAgICAg ICAgICAgIChUZXN0U25pZmZlci5BTUQ2NF9SU1AsIGJwICsgMTYpKSwKKyAg ICAgICAgICAgICAgICAgICAgKFRlc3RTbmlmZmVyLkFNRDY0X1JTUCwgVGVz dFNuaWZmZXIuQU1ENjRfUklQKSkKKyAgICAgICAgZXhjZXB0IChnZGIuZXJy b3IsIFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICByZXR1cm4gTm9uZQor CitnZGIuc25pZmZlci5yZWdpc3Rlcl9zbmlmZmVyKE5vbmUsIFRlc3RTbmlm ZmVyKCksIFRydWUpCitwcmludCgiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZCIp Cg== --001a113ed540e02176050ff513b4--