From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32429 invoked by alias); 9 Aug 2012 21:32:41 -0000 Received: (qmail 32416 invoked by uid 22791); 9 Aug 2012 21:32:36 -0000 X-SWARE-Spam-Status: No, hits=-3.4 required=5.0 tests=AWL,BAYES_50,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-ob0-f169.google.com (HELO mail-ob0-f169.google.com) (209.85.214.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 09 Aug 2012 21:32:17 +0000 Received: by obhx4 with SMTP id x4so1478381obh.0 for ; Thu, 09 Aug 2012 14:32:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-system-of-record:x-gm-message-state; bh=t7B5guqRpjM2aPFKOwpZd8eYHRsQ/4Zltbr9i6W7C3k=; b=pqLOM5EQ00EL4FQ/RhiEYRmwzgqtUEAxHBxWS3kjOqQ+jy9pAB+/DlVj2qcgjlG2iM AE+wl1E+BQqUfykJXuKLqyUdqEbcRud6Vqfm3k9B3a6nd6y/N5H/9WSsPqE2CFrSn8UY DTn0MguSuVtM3AsESUddmC9n/MtcWj+N0ID9Cd50VdF3IEufGyQYf13iapAVNTGYJHFV 14LVRHXfey/UPwTDgv1b/MattL3Ub0EIkaCkBYlOkGD1XeJaoE/2r32vBLOkx11j9fIy c4twpagVCn+WhagSlQW+zo/FTBOkwp5mPHeGzy3X5c4P+2Wlhlyjm9vRAI3gafcJweFy z7IA== Received: by 10.60.13.10 with SMTP id d10mr967788oec.63.1344547936585; Thu, 09 Aug 2012 14:32:16 -0700 (PDT) MIME-Version: 1.0 Received: by 10.60.13.10 with SMTP id d10mr967762oec.63.1344547936381; Thu, 09 Aug 2012 14:32:16 -0700 (PDT) Received: by 10.182.58.193 with HTTP; Thu, 9 Aug 2012 14:32:16 -0700 (PDT) In-Reply-To: References: Date: Fri, 10 Aug 2012 00:56:00 -0000 Message-ID: Subject: Re: [patch] Gold linker patch to provide plugin support for mapping some text sections to an unique ELF segment. From: Sriraman Tallam To: Cary Coutant Cc: binutils , Ian Lance Taylor Content-Type: multipart/mixed; boundary=e89a8ff1c72421aa3504c6dbf656 X-System-Of-Record: true X-Gm-Message-State: ALoCoQmo4Nr1jzaC/7w556hlzoKMM/sqFoASQdNHamSLhIYF0ph0qKfSAZSp3pNC1dChumVEs5brVrGI+/WusV+IxSa9RRq51cah+mOLqslpYZ/8FYpBpup3fyA+FP2u46tdXMW5E+li7mEC3F8QIFDOVPXmHz2KojVcZQODTgVT3HMi1ECuloGgz3ZN6+LBHtJp4LDCWdsj X-IsSubscribed: yes Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org X-SW-Source: 2012-08/txt/msg00182.txt.bz2 --e89a8ff1c72421aa3504c6dbf656 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 11586 Hi Cary, I have attached the revised patch with all the mentioned changes done. Thanks, -Sri. * gold.cc (queue_middle_tasks): Call layout again when unique segments for sections is desired. * layout.cc (Layout::Layout): Initialize new members. (Layout::layout): Make output section for mapping to a unique segment. (Layout::attach_allocated_section_to_segment): Make unique segment for output sections marked so. (Layout::segment_precedes): Check for unique segments when sorting. * layout.h (Layout::Unique_segment_info): New struct. (Layout::Section_segment_map): New typedef. (Layout::get_section_segment_map): New function. (Layout::is_unique_segment_for_sections_specified): New function. (Layout::set_unique_segment_for_sections_specified): New function. (Layout::unique_segment_for_sections_specified_): New member. (Layout::section_segment_map_): New member. * object.cc (Sized_relobj_file::do_layout): Rename is_gc_pass_one to is_pass_one. Rename is_gc_pass_two to is_pass_two. Rename is_gc_or_icf to is_two_pass. Check for which pass based on whether symbols data is present. Make it two pass when unique segments for sections is desired. * output.cc (Output_section::Output_section): Initialize new members. * output.h (Output_section::is_unique_segment): New function. (Output_section::set_is_unique_segment): New function. (Output_section::is_unique_segment_): New member. (Output_section::extra_segment_flags): New function. (Output_section::set_extra_segment_flags): New function. (Output_section::extra_segment_flags_): New member. (Output_section::segment_alignment): New function. (Output_section::set_segment_alignment): New function. (Output_section::segment_alignment_): New member. (Output_segment::Output_segment): Initialize is_unique_segment_. (Output_segment::is_unique_segment): New function. (Output_segment::set_is_unique_segment): New function. (Output_segment::is_unique_segment_): New member. * plugin.cc (allow_unique_segment_for_sections): New function. (unique_segment_for_sections): New function. (Plugin::load): Add new functions to transfer vector. * Makefile.am (plugin_final_layout.readelf.stdout): Add readelf output. * Makefile.in: Regenerate. * testsuite/plugin_final_layout.sh: Check if unique segment functionality works. * testsuite/plugin_section_order.c (onload): Check if new interfaces are available. (allow_unique_segment_for_sections): New global. (unique_segment_for_sections): New global. (claim_file_hook): Call allow_unique_segment_for_sections. (all_symbols_read_hook): Call unique_segment_for_sections. * plugin-api.h (ld_plugin_allow_unique_segment_for_sections): New interface. (ld_plugin_unique_segment_for_sections): New interface. (LDPT_ALLOW_UNIQUE_SEGMENT_FOR_SECTIONS): New enum val. (LDPT_UNIQUE_SEGMENT_FOR_SECTIONS): New enum val. (tv_allow_unique_segment_for_sections): New member. (tv_unique_segment_for_sections): New member. On Thu, Aug 2, 2012 at 6:02 PM, Cary Coutant wrote: > * layout.cc (Layout::Layout): Initialize new members. > (choose_output_section): New parameter. > Modify call to output_section_name. > (output_section_name): New parameter. > Check if input section needs to be mapped to a different output > section. > > Please include the class name with the method name > (Layout::choose_output_section, Layout::output_section_name). > > s/New parameter/Add parameter./ > > (Layout::layout): Modify call to choose_output_section. > Mark output section for mapping to an unique segment. > > s/an unique/a unique/ (throughout) > > > @@ -939,7 +944,8 @@ Layout::choose_output_section(const Relo > if (is_input_section > && !this->script_options_->saw_sections_clause() > && !parameters->options().relocatable()) > - name = Layout::output_section_name(relobj, name, &len); > + name = Layout::output_section_name(relobj, shndx, name, &len, > + &this->section_segment_map_); > > This seems to be pushing the check for a remapped section too deep -- > you're essentially turning a class method into an instance method > by passing it a pointer to instance data that it could have accessed > directly if it weren't static. > > I think the lookup in section_segment_map should be made in > Layout::layout, just before it would call choose_output_section; > then you can call choose_output_section with the remapped name. > > That would avoid the large number of places where you have to > pass '0' for shndx. > > > + // Check if this output section needs to be mapped to an unique segment. > + // This can happen when using plugins. > + if (!os->is_unique_segment() > + && (this->section_segment_map_.find(Const_section_id(object, shndx)) > + != this->section_segment_map_.end())) > + os->set_is_unique_segment(); > > This looks like a redundant test. If you move the remap into > Layout::layout, you can just set a bool flag, and call > set_is_unique_segment right after choose_output_section returns. > > > + /* Check if do_layout needs to be two-pass. If so, find out which pass > + should happen. In the first pass, the data in sd is saved to be used > + later in the second pass. */ > + if (is_two_pass) > + { > + if (!this->get_symbols_data()) > > Write this as "if (this->get_symbols_data() == NULL)". > > Also, since you call get_symbols_data() again just a bit lower, > you may as well simply write: > > gc_sd = this->get_symbols_data(); > if (gc_sd == NULL) > > + { > + gold_assert (sd != NULL); > + is_pass_one = true; > + } > + else > + { > + if (parameters->options().gc_sections()) > + gold_assert(symtab->gc()->is_worklist_ready()); > + if (parameters->options().icf_enabled()) > + gold_assert(symtab->icf()->is_icf_ready()); > + is_pass_two = true; > + } > + } > + > + // Both is_pass_one and is_pass_two should not be true. > + gold_assert(!(is_pass_one && is_pass_two)); > > I think the assert is unnecessary. It's pretty obvious from the code > immediately above that they're mutually exclusive. > > What you could explain here (or, better, where the two bools are declared) > is that both will be false when it's *not* a two-pass layout. > > > +// This function should map the list of sections specified in the > +// SECTION_LIST to an unique segment. ELF segments do not have names > +// and the NAME is used to identify Output Section which should contain > +// the list of sections. This Output Section will then be mapped to > +// an unique segment. FLAGS is used to specify if any additional segment > +// flags need to be set. For instance, a specific segment flag can be > +// set to identify this segment. Unsetting segment flags is not possible. > > Please add a blank line after this comment block. > > +static enum ld_plugin_status > +unique_segment_for_sections(const char* segment_name, > + uint64_t flags, > + const struct ld_plugin_section* section_list, > + unsigned int num_sections) > > Given the discussion upstream, I think you'll want to add the ability > for the plugin to select a specific segment alignment here as well. > > +{ > + gold_assert(parameters->options().has_plugins()); > + > + if (num_sections == 0) > + return LDPS_OK; > + > + if (section_list == NULL) > + return LDPS_ERR; > + > + Layout* layout = parameters->options().plugins()->layout(); > + gold_assert (layout != NULL); > + > + std::map* section_segment_map > + = layout->get_section_segment_map(); > > Indent by four spaces here. > > I think it would clear up the code if you made this a reference instead > of a pointer. It would also help to have a typedef for the map. > > + > + for (unsigned int i = 0; i < num_sections; ++i) > + { > + Object* obj = parameters->options().plugins()->get_elf_object( > + section_list[i].handle); > + if (obj == NULL) > + return LDPS_BAD_HANDLE; > + unsigned int shndx = section_list[i].shndx; > + Const_section_id secn_id(obj, shndx); > + (*section_segment_map)[secn_id] = segment_name; > + } > + > + std::map* output_section_flags_map > + = layout->get_output_section_flags_map(); > + > + (*output_section_flags_map)[std::string(segment_name)] = flags; > > Rather than have a second map keyed on the section name, I suggest > you store the flags (and alignment) as part of the section_segment_map. > > Also, I think "section" flags is the wrong name -- it should be > "segment" flags. > > It's also a bit confusing that you're creating a segment (which doesn't > have a name) by creating a new section (which does), and setting the > is_unique_segment flag on that section later when it actually gets > created. There's not much to do about that but clarify it in the > comments and documentation. > > > --- gold/testsuite/plugin_section_order.c 29 Sep 2011 23:45:57 -0000 1.1 > +++ gold/testsuite/plugin_section_order.c 20 Jul 2012 22:51:50 -0000 > @@ -36,6 +36,8 @@ static ld_plugin_get_input_section_name > static ld_plugin_get_input_section_contents get_input_section_contents = NULL; > static ld_plugin_update_section_order update_section_order = NULL; > static ld_plugin_allow_section_ordering allow_section_ordering = NULL; > +static ld_plugin_allow_unique_segment_for_sections > allow_unique_segment_for_sections = NULL; > +static ld_plugin_unique_segment_for_sections > unique_segment_for_sections = NULL; > > enum ld_plugin_status onload(struct ld_plugin_tv *tv); > enum ld_plugin_status claim_file_hook(const struct ld_plugin_input_file *file, > @@ -76,6 +78,11 @@ onload(struct ld_plugin_tv *tv) > case LDPT_ALLOW_SECTION_ORDERING: > allow_section_ordering = *entry->tv_u.tv_allow_section_ordering; > break; > + case LDPT_ALLOW_UNIQUE_SEGMENT_FOR_SECTIONS: > + allow_unique_segment_for_sections = > *entry->tv_u.tv_allow_unique_segment_for_sections; > + case LDPT_UNIQUE_SEGMENT_FOR_SECTIONS: > + unique_segment_for_sections = *entry->tv_u.tv_unique_segment_for_sections; > + break; > > There are a few lines > 80 chars here. > > > +/* The linker's interface for specifying that a specific set of sections > + must be mapped to an unique segment. ELF segments do not have names > + and the NAME is used as an identifier only. FLAGS is used to specify > + if any additional segment flags need to be set. For instance, a > + specific segment flag can be set to identify this segment. Unsetting > + segment flags that would be set by default is not possible. */ > > NAME is still subject to some constraints, I think. You're going to create > an output section with that name, so I think it will need to be unique > in the namespace of section names. > > + > +typedef > +enum ld_plugin_status > +(*ld_plugin_unique_segment_for_sections) (const char* segment_name, > + uint64_t segment_flags, > + const struct ld_plugin_section * > + section_list, > + unsigned int num_sections); > > Rewrite this parameter list with the first parameter on a new line, > indented by four spaces. --e89a8ff1c72421aa3504c6dbf656 Content-Type: text/plain; charset=US-ASCII; name="segment_patch.txt" Content-Disposition: attachment; filename="segment_patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h5od3hji0 Content-length: 50163 SW5kZXg6IGdvbGQvZ29sZC5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ29sZC9nb2xkLmNjLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjEwMApkaWZmIC11IC11IC1wIC1yMS4xMDAgZ29sZC5j YwotLS0gZ29sZC9nb2xkLmNjCTE2IEp1bCAyMDEyIDE5OjAwOjE4IC0wMDAw CTEuMTAwCisrKyBnb2xkL2dvbGQuY2MJOSBBdWcgMjAxMiAyMToyODowMiAt MDAwMApAQCAtNTMwLDExICs1MzAsMTMgQEAgcXVldWVfbWlkZGxlX3Rhc2tz KGNvbnN0IEdlbmVyYWxfb3B0aW9ucwogCiAgIC8vIENhbGwgT2JqZWN0Ojps YXlvdXQgZm9yIHRoZSBzZWNvbmQgdGltZSB0byBkZXRlcm1pbmUgdGhlCiAg IC8vIG91dHB1dF9zZWN0aW9ucyBmb3IgYWxsIHJlZmVyZW5jZWQgaW5wdXQg c2VjdGlvbnMuICBXaGVuCi0gIC8vIC0tZ2Mtc2VjdGlvbnMgb3IgLS1pY2Yg aXMgdHVybmVkIG9uLCBPYmplY3Q6OmxheW91dCBpcwotICAvLyBjYWxsZWQg dHdpY2UuICBJdCBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUgd2hlbiB0aGUK LSAgLy8gc3ltYm9scyBhcmUgYWRkZWQuCisgIC8vIC0tZ2Mtc2VjdGlvbnMg b3IgLS1pY2YgaXMgdHVybmVkIG9uLCBvciB3aGVuIGNlcnRhaW4gaW5wdXQK KyAgLy8gc2VjdGlvbnMgaGF2ZSB0byBiZSBtYXBwZWQgdG8gdW5pcXVlIHNl Z21lbnRzLCBPYmplY3Q6OmxheW91dAorICAvLyBpcyBjYWxsZWQgdHdpY2Uu ICBJdCBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUgd2hlbiBzeW1ib2xzCisg IC8vIGFyZSBhZGRlZC4KICAgaWYgKHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5n Y19zZWN0aW9ucygpCi0gICAgICB8fCBwYXJhbWV0ZXJzLT5vcHRpb25zKCku aWNmX2VuYWJsZWQoKSkKKyAgICAgIHx8IHBhcmFtZXRlcnMtPm9wdGlvbnMo KS5pY2ZfZW5hYmxlZCgpCisgICAgICB8fCBsYXlvdXQtPmlzX3VuaXF1ZV9z ZWdtZW50X2Zvcl9zZWN0aW9uc19zcGVjaWZpZWQoKSkKICAgICB7CiAgICAg ICBmb3IgKElucHV0X29iamVjdHM6OlJlbG9ial9pdGVyYXRvciBwID0gaW5w dXRfb2JqZWN0cy0+cmVsb2JqX2JlZ2luKCk7CiAJICAgcCAhPSBpbnB1dF9v YmplY3RzLT5yZWxvYmpfZW5kKCk7CkluZGV4OiBnb2xkL2xheW91dC5jYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMv Z29sZC9sYXlvdXQuY2MsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjMyCmRp ZmYgLXUgLXUgLXAgLXIxLjIzMiBsYXlvdXQuY2MKLS0tIGdvbGQvbGF5b3V0 LmNjCTcgQXVnIDIwMTIgMTM6MjQ6NDcgLTAwMDAJMS4yMzIKKysrIGdvbGQv bGF5b3V0LmNjCTkgQXVnIDIwMTIgMjE6Mjg6MDIgLTAwMDAKQEAgLTQwOCwx MiArNDA4LDE0IEBAIExheW91dDo6TGF5b3V0KGludCBudW1iZXJfb2ZfaW5w dXRfZmlsZXMKICAgICByZXNpemVkX3NpZ25hdHVyZXNfKGZhbHNlKSwKICAg ICBoYXZlX3N0YWJzdHJfc2VjdGlvbl8oZmFsc2UpLAogICAgIHNlY3Rpb25f b3JkZXJpbmdfc3BlY2lmaWVkXyhmYWxzZSksCisgICAgdW5pcXVlX3NlZ21l bnRfZm9yX3NlY3Rpb25zX3NwZWNpZmllZF8oZmFsc2UpLAogICAgIGluY3Jl bWVudGFsX2lucHV0c18oTlVMTCksCiAgICAgcmVjb3JkX291dHB1dF9zZWN0 aW9uX2RhdGFfZnJvbV9zY3JpcHRfKGZhbHNlKSwKICAgICBzY3JpcHRfb3V0 cHV0X3NlY3Rpb25fZGF0YV9saXN0XygpLAogICAgIHNlZ21lbnRfc3RhdGVz XyhOVUxMKSwKICAgICByZWxheGF0aW9uX2RlYnVnX2NoZWNrXyhOVUxMKSwK ICAgICBzZWN0aW9uX29yZGVyX21hcF8oKSwKKyAgICBzZWN0aW9uX3NlZ21l bnRfbWFwXygpLAogICAgIGlucHV0X3NlY3Rpb25fcG9zaXRpb25fKCksCiAg ICAgaW5wdXRfc2VjdGlvbl9nbG9iXygpLAogICAgIGluY3JlbWVudGFsX2Jh c2VfKE5VTEwpLApAQCAtMTAyOCw5ICsxMDMwLDQ4IEBAIExheW91dDo6bGF5 b3V0KFNpemVkX3JlbG9ial9maWxlPHNpemUsIGIKICAgICB9CiAgIGVsc2UK ICAgICB7Ci0gICAgICBvcyA9IHRoaXMtPmNob29zZV9vdXRwdXRfc2VjdGlv bihvYmplY3QsIG5hbWUsIHNoX3R5cGUsCi0JCQkJICAgICAgIHNoZHIuZ2V0 X3NoX2ZsYWdzKCksIHRydWUsCi0JCQkJICAgICAgIE9SREVSX0lOVkFMSUQs IGZhbHNlKTsKKyAgICAgIC8vIFBsdWdpbnMgY2FuIGNob29zZSB0byBwbGFj ZSBvbmUgb3IgbW9yZSBzdWJzZXRzIG9mIHNlY3Rpb25zIGluCisgICAgICAv LyB1bmlxdWUgc2VnbWVudHMgYW5kIHRoaXMgaXMgZG9uZSBieSBtYXBwaW5n IHRoZXNlIHNlY3Rpb24gc3Vic2V0cworICAgICAgLy8gdG8gdW5pcXVlIG91 dHB1dCBzZWN0aW9ucy4gIENoZWNrIGlmIHRoaXMgc2VjdGlvbiBuZWVkcyB0 byBiZQorICAgICAgLy8gcmVtYXBwZWQgdG8gYSB1bmlxdWUgb3V0cHV0IHNl Y3Rpb24uCisgICAgICBTZWN0aW9uX3NlZ21lbnRfbWFwOjppdGVyYXRvciBp dAorCSAgPSB0aGlzLT5zZWN0aW9uX3NlZ21lbnRfbWFwXy5maW5kKENvbnN0 X3NlY3Rpb25faWQob2JqZWN0LCBzaG5keCkpOworICAgICAgaWYgKGl0ICE9 IHRoaXMtPnNlY3Rpb25fc2VnbWVudF9tYXBfLmVuZCgpKQorCXsKKwkgIC8v IFdlIGtub3cgdGhlIG5hbWUgb2YgdGhlIG91dHB1dCBzZWN0aW9uLCBkaXJl Y3RseSBjYWxsCisJICAvLyBnZXRfb3V0cHV0X3NlY3Rpb24gaGVyZSBieS1w YXNzaW5nIGNob29zZV9vdXRwdXRfc2VjdGlvbi4KKwkgIGVsZmNwcDo6RWxm X1h3b3JkIGZsYWdzID0gc2hkci5nZXRfc2hfZmxhZ3MoKTsKKwkgIC8vIFNv bWUgZmxhZ3MgaW4gdGhlIGlucHV0IHNlY3Rpb24gc2hvdWxkIG5vdCBiZSBh dXRvbWF0aWNhbGx5CisJICAvLyBjb3BpZWQgdG8gdGhlIG91dHB1dCBzZWN0 aW9uLgorCSAgZmxhZ3MgJj0gfiAoZWxmY3BwOjpTSEZfSU5GT19MSU5LCisJ CSAgICAgIHwgZWxmY3BwOjpTSEZfR1JPVVAKKwkJICAgICAgfCBlbGZjcHA6 OlNIRl9NRVJHRQorCQkgICAgICB8IGVsZmNwcDo6U0hGX1NUUklOR1MpOwor CisJICAvLyBXZSBvbmx5IGNsZWFyIHRoZSBTSEZfTElOS19PUkRFUiBmbGFn IGluIGZvcgorCSAgLy8gYSBub24tcmVsb2NhdGFibGUgbGluay4KKwkgIGlm ICghcGFyYW1ldGVycy0+b3B0aW9ucygpLnJlbG9jYXRhYmxlKCkpCisJICAg IGZsYWdzICY9IH5lbGZjcHA6OlNIRl9MSU5LX09SREVSOworCSAgCisJICBj b25zdCBjaGFyKiBvc19uYW1lID0gaXQtPnNlY29uZC0+bmFtZTsKKwkgIFN0 cmluZ3Bvb2w6OktleSBuYW1lX2tleTsKKwkgIG9zX25hbWUgPSB0aGlzLT5u YW1lcG9vbF8uYWRkX3dpdGhfbGVuZ3RoKG9zX25hbWUsIHN0cmxlbihvc19u YW1lKSwKKwkJCQkJCSAgICB0cnVlLCAmbmFtZV9rZXkpOworCSAgb3MgPSB0 aGlzLT5nZXRfb3V0cHV0X3NlY3Rpb24ob3NfbmFtZSwgbmFtZV9rZXksIHNo X3R5cGUsIGZsYWdzLAorCQkJCQlPUkRFUl9JTlZBTElELCBmYWxzZSk7CisJ ICBpZiAoIW9zLT5pc191bmlxdWVfc2VnbWVudCgpKQorCSAgICB7CisJICAg ICAgb3MtPnNldF9pc191bmlxdWVfc2VnbWVudCgpOworCSAgICAgIG9zLT5z ZXRfZXh0cmFfc2VnbWVudF9mbGFncyhpdC0+c2Vjb25kLT5mbGFncyk7CisJ ICAgICAgb3MtPnNldF9zZWdtZW50X2FsaWdubWVudChpdC0+c2Vjb25kLT5h bGlnbik7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworICAgICAgICAg IG9zID0gdGhpcy0+Y2hvb3NlX291dHB1dF9zZWN0aW9uKG9iamVjdCwgbmFt ZSwgc2hfdHlwZSwKKwkJCQkJICAgc2hkci5nZXRfc2hfZmxhZ3MoKSwgdHJ1 ZSwKKwkJCQkJICAgT1JERVJfSU5WQUxJRCwgZmFsc2UpOworCX0KICAgICAg IGlmIChvcyA9PSBOVUxMKQogCXJldHVybiBOVUxMOwogICAgIH0KQEAgLTE2 OTIsNiArMTczMywxMCBAQCBMYXlvdXQ6OmF0dGFjaF9hbGxvY2F0ZWRfc2Vj dGlvbl90b19zZWdtCiAKICAgZWxmY3BwOjpFbGZfV29yZCBzZWdfZmxhZ3Mg PSBMYXlvdXQ6OnNlY3Rpb25fZmxhZ3NfdG9fc2VnbWVudChmbGFncyk7CiAK KyAgLy8gSWYgdGhpcyBvdXRwdXQgc2VjdGlvbidzIHNlZ21lbnQgaGFzIGV4 dHJhIGZsYWdzIHRoYXQgbmVlZCB0byBiZSBzZXQsCisgIC8vIGNvbWluZyBm cm9tIGEgbGlua2VyIHBsdWdpbiwgZG8gdGhhdC4KKyAgc2VnX2ZsYWdzIHw9 IG9zLT5leHRyYV9zZWdtZW50X2ZsYWdzKCk7CisKICAgLy8gQ2hlY2sgZm9y IC0tc2VjdGlvbi1zdGFydC4KICAgdWludDY0X3QgYWRkcjsKICAgYm9vbCBp c19hZGRyZXNzX3NldCA9IHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5zZWN0aW9u X3N0YXJ0KG9zLT5uYW1lKCksICZhZGRyKTsKQEAgLTE3MDgsOCArMTc1Mywx NCBAQCBMYXlvdXQ6OmF0dGFjaF9hbGxvY2F0ZWRfc2VjdGlvbl90b19zZWdt CiAgICAgICAgcCAhPSB0aGlzLT5zZWdtZW50X2xpc3RfLmVuZCgpOwogICAg ICAgICsrcCkKICAgICB7CisgICAgICAvLyBObyBuZWVkIHRvIGdvIHRocm91 Z2ggdGhlIGxvb3AgaWYgYSB1bmlxdWUgc2VnbWVudCBpcyBuZWVkZWQuCisg ICAgICBpZiAob3MtPmlzX3VuaXF1ZV9zZWdtZW50KCkpCisgICAgICAgIGJy ZWFrOwogICAgICAgaWYgKCgqcCktPnR5cGUoKSAhPSBlbGZjcHA6OlBUX0xP QUQpCiAJY29udGludWU7CisgICAgICAvLyBJZiB0aGlzIHNlZ21lbnQgaXMg bWFya2VkIHVuaXF1ZSwgc2tpcC4KKyAgICAgIGlmICgoKnApLT5pc191bmlx dWVfc2VnbWVudCgpKQorCWNvbnRpbnVlOwogICAgICAgaWYgKCFwYXJhbWV0 ZXJzLT5vcHRpb25zKCkub21hZ2ljKCkKIAkgICYmICgoKnApLT5mbGFncygp ICYgZWxmY3BwOjpQRl9XKSAhPSAoc2VnX2ZsYWdzICYgZWxmY3BwOjpQRl9X KSkKIAljb250aW51ZTsKQEAgLTE3NDIsNyArMTc5Myw4IEBAIExheW91dDo6 YXR0YWNoX2FsbG9jYXRlZF9zZWN0aW9uX3RvX3NlZ20KICAgICAgIGJyZWFr OwogICAgIH0KIAotICBpZiAocCA9PSB0aGlzLT5zZWdtZW50X2xpc3RfLmVu ZCgpKQorICBpZiAocCA9PSB0aGlzLT5zZWdtZW50X2xpc3RfLmVuZCgpCisg ICAgICB8fCBvcy0+aXNfdW5pcXVlX3NlZ21lbnQoKSkKICAgICB7CiAgICAg ICBPdXRwdXRfc2VnbWVudCogb3NlZyA9IHRoaXMtPm1ha2Vfb3V0cHV0X3Nl Z21lbnQoZWxmY3BwOjpQVF9MT0FELAogCQkJCQkJICAgICAgIHNlZ19mbGFn cyk7CkBAIC0xNzUxLDYgKzE4MDMsMTQgQEAgTGF5b3V0OjphdHRhY2hfYWxs b2NhdGVkX3NlY3Rpb25fdG9fc2VnbQogICAgICAgb3NlZy0+YWRkX291dHB1 dF9zZWN0aW9uX3RvX2xvYWQodGhpcywgb3MsIHNlZ19mbGFncyk7CiAgICAg ICBpZiAoaXNfYWRkcmVzc19zZXQpCiAJb3NlZy0+c2V0X2FkZHJlc3Nlcyhh ZGRyLCBhZGRyKTsKKyAgICAgIC8vIENoZWNrIGlmIHNlZ21lbnQgc2hvdWxk IGJlIG1hcmtlZCB1bmlxdWUuICBGb3Igc2VnbWVudHMgbWFya2VkCisgICAg ICAvLyB1bmlxdWUgYnkgbGlua2VyIHBsdWdpbnMsIHNldCB0aGUgbmV3IGFs aWdubWVudCBpZiBzcGVjaWZpZWQuCisgICAgICBpZiAob3MtPmlzX3VuaXF1 ZV9zZWdtZW50KCkpCisJeworCSAgb3NlZy0+c2V0X2lzX3VuaXF1ZV9zZWdt ZW50KCk7CisJICBpZiAob3MtPnNlZ21lbnRfYWxpZ25tZW50KCkpCisJICAg IG9zZWctPnNldF9taW5pbXVtX3BfYWxpZ24ob3MtPnNlZ21lbnRfYWxpZ25t ZW50KCkpOworCX0KICAgICB9CiAKICAgLy8gSWYgd2Ugc2VlIGEgbG9hZGFi bGUgU0hUX05PVEUgc2VjdGlvbiwgd2UgY3JlYXRlIGEgUFRfTk9URQpAQCAt MzA5NSw5ICszMTU1LDExIEBAIExheW91dDo6c2VnbWVudF9wcmVjZWRlcyhj b25zdCBPdXRwdXRfc2UKIAogICAvLyBXZSBzaG91bGRuJ3QgZ2V0IGhlcmUt LXdlIHNob3VsZG4ndCBjcmVhdGUgc2VnbWVudHMgd2hpY2ggd2UKICAgLy8g Y2FuJ3QgZGlzdGluZ3Vpc2guICBVbmxlc3Mgb2YgY291cnNlIHdlIGFyZSB1 c2luZyBhIHdlaXJkIGxpbmtlcgotICAvLyBzY3JpcHQgb3Igb3ZlcmxhcHBp bmcgLS1zZWN0aW9uLXN0YXJ0IG9wdGlvbnMuCisgIC8vIHNjcmlwdCBvciBv dmVybGFwcGluZyAtLXNlY3Rpb24tc3RhcnQgb3B0aW9ucy4gIFdlIGNvdWxk IGFsc28gZ2V0CisgIC8vIGhlcmUgaWYgcGx1Z2lucyB3YW50IHVuaXF1ZSBz ZWdtZW50cyBmb3Igc3Vic2V0cyBvZiBzZWN0aW9ucy4KICAgZ29sZF9hc3Nl cnQodGhpcy0+c2NyaXB0X29wdGlvbnNfLT5zYXdfcGhkcnNfY2xhdXNlKCkK LQkgICAgICB8fCBwYXJhbWV0ZXJzLT5vcHRpb25zKCkuYW55X3NlY3Rpb25f c3RhcnQoKSk7CisJICAgICAgfHwgcGFyYW1ldGVycy0+b3B0aW9ucygpLmFu eV9zZWN0aW9uX3N0YXJ0KCkKKwkgICAgICB8fCB0aGlzLT5pc191bmlxdWVf c2VnbWVudF9mb3Jfc2VjdGlvbnNfc3BlY2lmaWVkKCkpOwogICByZXR1cm4g ZmFsc2U7CiB9CiAKSW5kZXg6IGdvbGQvbGF5b3V0LmgKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dvbGQvbGF5b3V0 LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAzCmRpZmYgLXUgLXUgLXAg LXIxLjEwMyBsYXlvdXQuaAotLS0gZ29sZC9sYXlvdXQuaAkyIE1heSAyMDEy IDIxOjM3OjIzIC0wMDAwCTEuMTAzCisrKyBnb2xkL2xheW91dC5oCTkgQXVn IDIwMTIgMjE6Mjg6MDIgLTAwMDAKQEAgLTUyOCw2ICs1MjgsMjkgQEAgY2xh c3MgTGF5b3V0CiAgIGdldF9zZWN0aW9uX29yZGVyX21hcCgpCiAgIHsgcmV0 dXJuICZ0aGlzLT5zZWN0aW9uX29yZGVyX21hcF87IH0KIAorICAvLyBTdHJ1 Y3QgdG8gc3RvcmUgc2VnbWVudCBpbmZvIHdoZW4gbWFwcGluZyBzb21lIGlu cHV0IHNlY3Rpb25zIHRvCisgIC8vIHVuaXF1ZSBzZWdtZW50cyB1c2luZyBs aW5rZXIgcGx1Z2lucy4gIE1hcHBpbmcgYW4gaW5wdXQgc2VjdGlvbiB0bwor ICAvLyBhIHVuaXF1ZSBzZWdtZW50IGlzIGRvbmUgYnkgZmlyc3QgcGxhY2lu ZyBzdWNoIGlucHV0IHNlY3Rpb25zIGluCisgIC8vIHVuaXF1ZSBvdXRwdXQg c2VjdGlvbnMgYW5kIHRoZW4gbWFwcGluZyB0aGUgb3V0cHV0IHNlY3Rpb24g dG8gYQorICAvLyB1bmlxdWUgc2VnbWVudC4gIE5BTUUgaXMgdGhlIG5hbWUg b2YgdGhlIG91dHB1dCBzZWN0aW9uLiAgRkxBR1MKKyAgLy8gYW5kIEFMSUdO IGFyZSB0aGUgZXh0cmEgZmxhZ3MgYW5kIGFsaWdubWVudCBvZiB0aGUgc2Vn bWVudC4KKyAgdHlwZWRlZiBzdHJ1Y3QKKyAgeworICAgIC8vIElkZW50aWZp ZXIgZm9yIHRoZSBTZWdtZW50LiAgRUxGIFNlZ21lbnRzIGRvbnQgaGF2ZSBu YW1lcy4KKyAgICBjb25zdCBjaGFyKiBuYW1lOworICAgIC8vIFNlZ21lbnQg ZmxhZ3MuCisgICAgdWludDY0X3QgZmxhZ3M7CisgICAgdWludDY0X3QgYWxp Z247CisgIH0gVW5pcXVlX3NlZ21lbnRfaW5mbzsgCisKKyAgLy8gTWFwcGlu ZyBmcm9tIGlucHV0IHNlY3Rpb24gdG8gc2VnbWVudC4KKyAgdHlwZWRlZiBz dGQ6Om1hcDxDb25zdF9zZWN0aW9uX2lkLCBVbmlxdWVfc2VnbWVudF9pbmZv Kj4KKyAgU2VjdGlvbl9zZWdtZW50X21hcDsKKworICBTZWN0aW9uX3NlZ21l bnRfbWFwJgorICBnZXRfc2VjdGlvbl9zZWdtZW50X21hcCgpCisgIHsgcmV0 dXJuIHRoaXMtPnNlY3Rpb25fc2VnbWVudF9tYXBfOyB9CisgIAogICBib29s CiAgIGlzX3NlY3Rpb25fb3JkZXJpbmdfc3BlY2lmaWVkKCkKICAgeyByZXR1 cm4gdGhpcy0+c2VjdGlvbl9vcmRlcmluZ19zcGVjaWZpZWRfOyB9CkBAIC01 MzYsNiArNTU5LDE0IEBAIGNsYXNzIExheW91dAogICBzZXRfc2VjdGlvbl9v cmRlcmluZ19zcGVjaWZpZWQoKQogICB7IHRoaXMtPnNlY3Rpb25fb3JkZXJp bmdfc3BlY2lmaWVkXyA9IHRydWU7IH0KIAorICBib29sCisgIGlzX3VuaXF1 ZV9zZWdtZW50X2Zvcl9zZWN0aW9uc19zcGVjaWZpZWQoKSBjb25zdAorICB7 IHJldHVybiB0aGlzLT51bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnNfc3Bl Y2lmaWVkXzsgfQorCisgIHZvaWQKKyAgc2V0X3VuaXF1ZV9zZWdtZW50X2Zv cl9zZWN0aW9uc19zcGVjaWZpZWQoKQorICB7IHRoaXMtPnVuaXF1ZV9zZWdt ZW50X2Zvcl9zZWN0aW9uc19zcGVjaWZpZWRfID0gdHJ1ZTsgfQorCiAgIC8v IEZvciBpbmNyZW1lbnRhbCB1cGRhdGVzLCBhbGxvY2F0ZSBhIGJsb2NrIG9m IG1lbW9yeSBmcm9tIHRoZQogICAvLyBmcmVlIGxpc3QuICBGaW5kIGEgYmxv Y2sgc3RhcnRpbmcgYXQgb3IgYWZ0ZXIgTUlOT0ZGLgogICBvZmZfdApAQCAt MTMzMSw2ICsxMzYyLDkgQEAgY2xhc3MgTGF5b3V0CiAgIC8vIFRydWUgaWYg dGhlIGlucHV0IHNlY3Rpb25zIGluIHRoZSBvdXRwdXQgc2VjdGlvbnMgc2hv dWxkIGJlIHNvcnRlZAogICAvLyBhcyBzcGVjaWZpZWQgaW4gYSBzZWN0aW9u IG9yZGVyaW5nIGZpbGUuCiAgIGJvb2wgc2VjdGlvbl9vcmRlcmluZ19zcGVj aWZpZWRfOworICAvLyBUcnVlIGlmIHNvbWUgaW5wdXQgc2VjdGlvbnMgbmVl ZCB0byBiZSBtYXBwZWQgdG8gYSB1bmlxdWUgc2VnbWVudCwKKyAgLy8gYWZ0 ZXIgYmVpbmcgbWFwcGVkIHRvIGEgdW5pcXVlIE91dHB1dF9zZWN0aW9uLgor ICBib29sIHVuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9uc19zcGVjaWZpZWRf OwogICAvLyBJbiBpbmNyZW1lbnRhbCBidWlsZCwgaG9sZHMgaW5mb3JtYXRp b24gY2hlY2sgdGhlIGlucHV0cyBhbmQgYnVpbGQgdGhlCiAgIC8vIC5nbnVf aW5jcmVtZW50YWxfaW5wdXRzIHNlY3Rpb24uCiAgIEluY3JlbWVudGFsX2lu cHV0cyogaW5jcmVtZW50YWxfaW5wdXRzXzsKQEAgLTEzNDUsNiArMTM3OSwx MSBAQCBjbGFzcyBMYXlvdXQKICAgLy8gUGx1Z2lucyBzcGVjaWZ5IHNlY3Rp b25fb3JkZXJpbmcgdXNpbmcgdGhpcyBtYXAuICBUaGlzIGlzIHNldCBpbgog ICAvLyB1cGRhdGVfc2VjdGlvbl9vcmRlciBpbiBwbHVnaW4uY2MKICAgc3Rk OjptYXA8U2VjdGlvbl9pZCwgdW5zaWduZWQgaW50PiBzZWN0aW9uX29yZGVy X21hcF87CisgIC8vIFRoaXMgbWFwcyBhbiBpbnB1dCBzZWN0aW9uIHRvIGEg dW5pcXVlIHNlZ21lbnQuIFRoaXMgaXMgZG9uZSBieSBmaXJzdAorICAvLyBw bGFjaW5nIHN1Y2ggaW5wdXQgc2VjdGlvbnMgaW4gdW5pcXVlIG91dHB1dCBz ZWN0aW9ucyBhbmQgdGhlbiBtYXBwaW5nCisgIC8vIHRoZSBvdXRwdXQgc2Vj dGlvbiB0byBhIHVuaXF1ZSBzZWdtZW50LiAgVW5pcXVlX3NlZ21lbnRfaW5m byBzdG9yZXMKKyAgLy8gYW55IGFkZGl0aW9uYWwgZmxhZ3MgYW5kIGFsaWdu bWVudCBvZiB0aGUgbmV3IHNlZ21lbnQuCisgIFNlY3Rpb25fc2VnbWVudF9t YXAgc2VjdGlvbl9zZWdtZW50X21hcF87CiAgIC8vIEhhc2ggYSBwYXR0ZXJu IHRvIGl0cyBwb3NpdGlvbiBpbiB0aGUgc2VjdGlvbiBvcmRlcmluZyBmaWxl LgogICBVbm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCB1bnNpZ25lZCBpbnQ+ IGlucHV0X3NlY3Rpb25fcG9zaXRpb25fOwogICAvLyBWZWN0b3Igb2YgZ2xv YiBvbmx5IHBhdHRlcm5zIGluIHRoZSBzZWN0aW9uX29yZGVyaW5nIGZpbGUu CkluZGV4OiBnb2xkL29iamVjdC5jYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ29sZC9vYmplY3QuY2MsdgpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMTU1CmRpZmYgLXUgLXUgLXAgLXIxLjE1NSBv YmplY3QuY2MKLS0tIGdvbGQvb2JqZWN0LmNjCTIgTWF5IDIwMTIgMjE6Mzc6 MjMgLTAwMDAJMS4xNTUKKysrIGdvbGQvb2JqZWN0LmNjCTkgQXVnIDIwMTIg MjE6Mjg6MDMgLTAwMDAKQEAgLTExNjQsMTUgKzExNjQsMTkgQEAgU2l6ZWRf cmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj46OmxheQogLy8gd2hldGhl ciB0aGV5IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgbGluay4gIElmIHRo ZXkgc2hvdWxkLCB3ZQogLy8gcGFzcyB0aGVtIHRvIHRoZSBMYXlvdXQgb2Jq ZWN0LCB3aGljaCB3aWxsIHJldHVybiBhbiBvdXRwdXQgc2VjdGlvbgogLy8g YW5kIGFuIG9mZnNldC4KLS8vIER1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24g KC0tZ2Mtc2VjdGlvbnMpIGFuZCBpZGVudGljYWwgY29kZSBmb2xkaW5nCi0v LyAoLS1pY2YpLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0d2ljZS4gIFdo ZW4gaXQgaXMgY2FsbGVkIHRoZSBmaXJzdAotLy8gdGltZSwgaXQgaXMgZm9y IHNldHRpbmcgdXAgc29tZSBzZWN0aW9ucyBhcyByb290cyB0byBhIHdvcmst bGlzdCBmb3IKLS8vIC0tZ2Mtc2VjdGlvbnMgYW5kIHRvIGRvIGNvbWRhdCBw cm9jZXNzaW5nLiAgQWN0dWFsIGxheW91dCBoYXBwZW5zIHRoZQotLy8gc2Vj b25kIHRpbWUgYXJvdW5kIGFmdGVyIGFsbCB0aGUgcmVsZXZhbnQgc2VjdGlv bnMgaGF2ZSBiZWVuIGRldGVybWluZWQuCi0vLyBUaGUgZmlyc3QgdGltZSwg aXNfd29ya2xpc3RfcmVhZHkgb3IgaXNfaWNmX3JlYWR5IGlzIGZhbHNlLiBJ dCBpcyB0aGVuCi0vLyBzZXQgdG8gdHJ1ZSBhZnRlciB0aGUgZ2FyYmFnZSBj b2xsZWN0aW9uIHdvcmtsaXN0IG9yIGlkZW50aWNhbCBjb2RlCi0vLyBmb2xk aW5nIGlzIHByb2Nlc3NlZCBhbmQgdGhlIHJlbGV2YW50IHNlY3Rpb25zIHRv IGJlIGtlcHQgYXJlCi0vLyBkZXRlcm1pbmVkLiAgVGhlbiwgdGhpcyBmdW5j dGlvbiBpcyBjYWxsZWQgYWdhaW4gdG8gbGF5b3V0IHRoZSBzZWN0aW9ucy4K Ky8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHR3aWNlIHNvbWV0aW1lcywg dHdvIHBhc3Nlcywgd2hlbiBtYXBwaW5nCisvLyBvZiBpbnB1dCBzZWN0aW9u cyB0byBvdXRwdXQgc2VjdGlvbnMgbXVzdCBiZSBkZWxheWVkLgorLy8gVGhp cyBpcyB0cnVlIGZvciB0aGUgZm9sbG93aW5nIDoKKy8vICogR2FyYmFnZSBj b2xsZWN0aW9uICgtLWdjLXNlY3Rpb25zKTogU29tZSBpbnB1dCBzZWN0aW9u cyB3aWxsIGJlCisvLyBkaXNjYXJkZWQgYW5kIGhlbmNlIHRoZSBhc3NpZ25t ZW50IG11c3Qgd2FpdCB1bnRpbCB0aGUgc2Vjb25kIHBhc3MuCisvLyBJbiB0 aGUgZmlyc3QgcGFzcywgIGl0IGlzIGZvciBzZXR0aW5nIHVwIHNvbWUgc2Vj dGlvbnMgYXMgcm9vdHMgdG8KKy8vIGEgd29yay1saXN0IGZvciAtLWdjLXNl Y3Rpb25zIGFuZCB0byBkbyBjb21kYXQgcHJvY2Vzc2luZy4KKy8vICogSWRl bnRpY2FsIENvZGUgRm9sZGluZyAoLS1pY2Y9PHNhZmUsYWxsPik6IFNvbWUg aW5wdXQgc2VjdGlvbnMKKy8vIHdpbGwgYmUgZm9sZGVkIGFuZCBoZW5jZSB0 aGUgYXNzaWdubWVudCBtdXN0IHdhaXQuCisvLyAqIFVzaW5nIHBsdWdpbnMg dG8gbWFwIHNvbWUgc2VjdGlvbnMgdG8gdW5pcXVlIHNlZ21lbnRzOiBNYXBw aW5nCisvLyBzb21lIHNlY3Rpb25zIHRvIHVuaXF1ZSBzZWdtZW50cyByZXF1 aXJlcyBtYXBwaW5nIHRoZW0gdG8gdW5pcXVlCisvLyBvdXRwdXQgc2VjdGlv bnMgdG9vLiAgVGhpcyBjYW4gYmUgZG9uZSB2aWEgcGx1Z2lucyBub3cgYW5k IHRoaXMKKy8vIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhl IGZpcnN0IHBhc3MuCiAKIHRlbXBsYXRlPGludCBzaXplLCBib29sIGJpZ19l bmRpYW4+CiB2b2lkCkBAIC0xMTgxLDI2ICsxMTg1LDQ0IEBAIFNpemVkX3Jl bG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+Ojpkb18KIAkJCQkJICAgICAg IFJlYWRfc3ltYm9sc19kYXRhKiBzZCkKIHsKICAgY29uc3QgdW5zaWduZWQg aW50IHNobnVtID0gdGhpcy0+c2hudW0oKTsKLSAgYm9vbCBpc19nY19wYXNz X29uZSA9ICgocGFyYW1ldGVycy0+b3B0aW9ucygpLmdjX3NlY3Rpb25zKCkK LQkJCSAgJiYgIXN5bXRhYi0+Z2MoKS0+aXNfd29ya2xpc3RfcmVhZHkoKSkK LQkJCSB8fCAocGFyYW1ldGVycy0+b3B0aW9ucygpLmljZl9lbmFibGVkKCkK LQkJCSAgICAgJiYgIXN5bXRhYi0+aWNmKCktPmlzX2ljZl9yZWFkeSgpKSk7 Ci0KLSAgYm9vbCBpc19nY19wYXNzX3R3byA9ICgocGFyYW1ldGVycy0+b3B0 aW9ucygpLmdjX3NlY3Rpb25zKCkKLQkJCSAgJiYgc3ltdGFiLT5nYygpLT5p c193b3JrbGlzdF9yZWFkeSgpKQotCQkJIHx8IChwYXJhbWV0ZXJzLT5vcHRp b25zKCkuaWNmX2VuYWJsZWQoKQotCQkJICAgICAmJiBzeW10YWItPmljZigp LT5pc19pY2ZfcmVhZHkoKSkpOwogCi0gIGJvb2wgaXNfZ2Nfb3JfaWNmID0g KHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5nY19zZWN0aW9ucygpCi0JCSAgICAg ICB8fCBwYXJhbWV0ZXJzLT5vcHRpb25zKCkuaWNmX2VuYWJsZWQoKSk7Cisg IC8qIFNob3VsZCB0aGlzIGZ1bmN0aW9uIGJlIGNhbGxlZCB0d2ljZT8gICov CisgIGJvb2wgaXNfdHdvX3Bhc3MgPSAocGFyYW1ldGVycy0+b3B0aW9ucygp LmdjX3NlY3Rpb25zKCkKKwkJICAgICAgfHwgcGFyYW1ldGVycy0+b3B0aW9u cygpLmljZl9lbmFibGVkKCkKKwkJICAgICAgfHwgbGF5b3V0LT5pc191bmlx dWVfc2VnbWVudF9mb3Jfc2VjdGlvbnNfc3BlY2lmaWVkKCkpOworCisgIC8q IE9ubHkgb25lIG9mIGlzX3Bhc3Nfb25lIGFuZCBpc19wYXNzX3R3byBpcyB0 cnVlLiAgQm90aCBhcmUgZmFsc2Ugd2hlbgorICAgICBhIHR3by1wYXNzIGFw cHJvYWNoIGlzIG5vdCBuZWVkZWQuICAqLworICBib29sIGlzX3Bhc3Nfb25l ID0gZmFsc2U7CisgIGJvb2wgaXNfcGFzc190d28gPSBmYWxzZTsKIAotICAv LyBCb3RoIGlzX2djX3Bhc3Nfb25lIGFuZCBpc19nY19wYXNzX3R3byBzaG91 bGQgbm90IGJlIHRydWUuCi0gIGdvbGRfYXNzZXJ0KCEoaXNfZ2NfcGFzc19v bmUgICYmIGlzX2djX3Bhc3NfdHdvKSk7CisgIFN5bWJvbHNfZGF0YSogZ2Nf c2QgPSBOVUxMOwogCisgIC8qIENoZWNrIGlmIGRvX2xheW91dCBuZWVkcyB0 byBiZSB0d28tcGFzcy4gIElmIHNvLCBmaW5kIG91dCB3aGljaCBwYXNzCisg ICAgIHNob3VsZCBoYXBwZW4uICBJbiB0aGUgZmlyc3QgcGFzcywgdGhlIGRh dGEgaW4gc2QgaXMgc2F2ZWQgdG8gYmUgdXNlZAorICAgICBsYXRlciBpbiB0 aGUgc2Vjb25kIHBhc3MuICAqLworICBpZiAoaXNfdHdvX3Bhc3MpCisgICAg eworICAgICAgZ2Nfc2QgPSB0aGlzLT5nZXRfc3ltYm9sc19kYXRhKCk7Cisg ICAgICBpZiAoZ2Nfc2QgPT0gTlVMTCkKKwl7CisJICBnb2xkX2Fzc2VydCAo c2QgIT0gTlVMTCk7CisJICBpc19wYXNzX29uZSA9IHRydWU7CisJfQorICAg ICAgZWxzZQorCXsKKwkgIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuZ2Nf c2VjdGlvbnMoKSkKKwkgICAgZ29sZF9hc3NlcnQoc3ltdGFiLT5nYygpLT5p c193b3JrbGlzdF9yZWFkeSgpKTsKKwkgIGlmIChwYXJhbWV0ZXJzLT5vcHRp b25zKCkuaWNmX2VuYWJsZWQoKSkKKwkgICAgZ29sZF9hc3NlcnQoc3ltdGFi LT5pY2YoKS0+aXNfaWNmX3JlYWR5KCkpOyAKKwkgIGlzX3Bhc3NfdHdvID0g dHJ1ZTsKKwl9CisgICAgfQorICAgIAogICBpZiAoc2hudW0gPT0gMCkKICAg ICByZXR1cm47Ci0gIFN5bWJvbHNfZGF0YSogZ2Nfc2QgPSBOVUxMOwotICBp ZiAoaXNfZ2NfcGFzc19vbmUpCisKKyAgaWYgKGlzX3Bhc3Nfb25lKQogICAg IHsKICAgICAgIC8vIER1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24gc2F2ZSB0 aGUgc3ltYm9scyBkYXRhIHRvIHVzZSBpdCB3aGVuCiAgICAgICAvLyByZS1l bnRlcmluZyB0aGlzIGZ1bmN0aW9uLgpAQCAtMTIwOCwxMCArMTIzMCw2IEBA IFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+Ojpkb18KICAg ICAgIHRoaXMtPmNvcHlfc3ltYm9sc19kYXRhKGdjX3NkLCBzZCwgVGhpczo6 c2hkcl9zaXplICogc2hudW0pOwogICAgICAgdGhpcy0+c2V0X3N5bWJvbHNf ZGF0YShnY19zZCk7CiAgICAgfQotICBlbHNlIGlmIChpc19nY19wYXNzX3R3 bykKLSAgICB7Ci0gICAgICBnY19zZCA9IHRoaXMtPmdldF9zeW1ib2xzX2Rh dGEoKTsKLSAgICB9CiAKICAgY29uc3QgdW5zaWduZWQgY2hhciogc2VjdGlv bl9oZWFkZXJzX2RhdGEgPSBOVUxMOwogICBzZWN0aW9uX3NpemVfdHlwZSBz ZWN0aW9uX25hbWVzX3NpemU7CkBAIC0xMjIwLDcgKzEyMzgsNyBAQCBTaXpl ZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPjo6ZG9fCiAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIqIHN5bWJvbF9uYW1lc19kYXRhID0gTlVMTDsKICAg c2VjdGlvbl9zaXplX3R5cGUgc3ltYm9sX25hbWVzX3NpemU7CiAKLSAgaWYg KGlzX2djX29yX2ljZikKKyAgaWYgKGlzX3R3b19wYXNzKQogICAgIHsKICAg ICAgIHNlY3Rpb25faGVhZGVyc19kYXRhID0gZ2Nfc2QtPnNlY3Rpb25faGVh ZGVyc19kYXRhOwogICAgICAgc2VjdGlvbl9uYW1lc19zaXplID0gZ2Nfc2Qt PnNlY3Rpb25fbmFtZXNfc2l6ZTsKQEAgLTEyNDYsNyArMTI2NCw3IEBAIFNp emVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+Ojpkb18KICAgY29u c3QgdW5zaWduZWQgY2hhciogcHNoZHJzOwogCiAgIC8vIEdldCB0aGUgc2Vj dGlvbiBuYW1lcy4KLSAgY29uc3QgdW5zaWduZWQgY2hhciogcG5hbWVzdSA9 IChpc19nY19vcl9pY2YpCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHBuYW1l c3UgPSAoaXNfdHdvX3Bhc3MpCiAJCQkJID8gZ2Nfc2QtPnNlY3Rpb25fbmFt ZXNfZGF0YQogCQkJCSA6IHNkLT5zZWN0aW9uX25hbWVzLT5kYXRhKCk7CiAK QEAgLTEyOTgsNyArMTMxNiw3IEBAIFNpemVkX3JlbG9ial9maWxlPHNpemUs IGJpZ19lbmRpYW4+Ojpkb18KICAgT3V0cHV0X3NlY3Rpb25zJiBvdXRfc2Vj dGlvbnModGhpcy0+b3V0cHV0X3NlY3Rpb25zKCkpOwogICBzdGQ6OnZlY3Rv cjxBZGRyZXNzPiYgb3V0X3NlY3Rpb25fb2Zmc2V0cyh0aGlzLT5zZWN0aW9u X29mZnNldHMoKSk7CiAKLSAgaWYgKCFpc19nY19wYXNzX3R3bykKKyAgaWYg KCFpc19wYXNzX3R3bykKICAgICB7CiAgICAgICBvdXRfc2VjdGlvbnMucmVz aXplKHNobnVtKTsKICAgICAgIG91dF9zZWN0aW9uX29mZnNldHMucmVzaXpl KHNobnVtKTsKQEAgLTEzMDgsNyArMTMyNiw3IEBAIFNpemVkX3JlbG9ial9m aWxlPHNpemUsIGJpZ19lbmRpYW4+Ojpkb18KICAgLy8gZG8gaGVyZS4KICAg aWYgKHRoaXMtPmlucHV0X2ZpbGUoKS0+anVzdF9zeW1ib2xzKCkpCiAgICAg ewotICAgICAgaWYgKCFpc19nY19wYXNzX3R3bykKKyAgICAgIGlmICghaXNf cGFzc190d28pCiAJewogCSAgZGVsZXRlIHNkLT5zZWN0aW9uX2hlYWRlcnM7 CiAJICBzZC0+c2VjdGlvbl9oZWFkZXJzID0gTlVMTDsKQEAgLTEzNjAsNyAr MTM3OCw3IEBAIFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+ Ojpkb18KIAogICAgICAgY29uc3QgY2hhciogbmFtZSA9IHBuYW1lcyArIHNo ZHIuZ2V0X3NoX25hbWUoKTsKIAotICAgICAgaWYgKCFpc19nY19wYXNzX3R3 bykKKyAgICAgIGlmICghaXNfcGFzc190d28pCiAJewogCSAgaWYgKHRoaXMt PmhhbmRsZV9nbnVfd2FybmluZ19zZWN0aW9uKG5hbWUsIGksIHN5bXRhYikp CiAJICAgIHsKQEAgLTE0MzQsNyArMTQ1Miw3IEBAIFNpemVkX3JlbG9ial9m aWxlPHNpemUsIGJpZ19lbmRpYW4+Ojpkb18KIAkgICAgfQogCX0KIAotICAg ICAgaWYgKGlzX2djX3Bhc3Nfb25lICYmIHBhcmFtZXRlcnMtPm9wdGlvbnMo KS5nY19zZWN0aW9ucygpKQorICAgICAgaWYgKGlzX3Bhc3Nfb25lICYmIHBh cmFtZXRlcnMtPm9wdGlvbnMoKS5nY19zZWN0aW9ucygpKQogCXsKIAkgIGlm ICh0aGlzLT5pc19zZWN0aW9uX25hbWVfaW5jbHVkZWQobmFtZSkKIAkgICAg ICB8fCBzaGRyLmdldF9zaF90eXBlKCkgPT0gZWxmY3BwOjpTSFRfSU5JVF9B UlJBWQpAQCAtMTQ3OSw3ICsxNDk3LDcgQEAgU2l6ZWRfcmVsb2JqX2ZpbGU8 c2l6ZSwgYmlnX2VuZGlhbj46OmRvXwogCSAgJiYgc3RyY21wKG5hbWUsICIu ZWhfZnJhbWUiKSA9PSAwCiAJICAmJiB0aGlzLT5jaGVja19laF9mcmFtZV9m bGFncygmc2hkcikpCiAJewotCSAgaWYgKGlzX2djX3Bhc3Nfb25lKQorCSAg aWYgKGlzX3Bhc3Nfb25lKQogCSAgICB7CiAJICAgICAgb3V0X3NlY3Rpb25z W2ldID0gcmVpbnRlcnByZXRfY2FzdDxPdXRwdXRfc2VjdGlvbio+KDEpOwog CSAgICAgIG91dF9zZWN0aW9uX29mZnNldHNbaV0gPSBpbnZhbGlkX2FkZHJl c3M7CkBAIC0xNDk0LDcgKzE1MTIsNyBAQCBTaXplZF9yZWxvYmpfZmlsZTxz aXplLCBiaWdfZW5kaWFuPjo6ZG9fCiAJICBjb250aW51ZTsKIAl9CiAKLSAg ICAgIGlmIChpc19nY19wYXNzX3R3byAmJiBwYXJhbWV0ZXJzLT5vcHRpb25z KCkuZ2Nfc2VjdGlvbnMoKSkKKyAgICAgIGlmIChpc19wYXNzX3R3byAmJiBw YXJhbWV0ZXJzLT5vcHRpb25zKCkuZ2Nfc2VjdGlvbnMoKSkKIAl7CiAJICAv LyBUaGlzIGlzIGV4ZWN1dGVkIGR1cmluZyB0aGUgc2Vjb25kIHBhc3Mgb2Yg Z2FyYmFnZQogCSAgLy8gY29sbGVjdGlvbi4gZG9fbGF5b3V0IGhhcyBiZWVu IGNhbGxlZCBiZWZvcmUgYW5kIHNvbWUKQEAgLTE1MTksNyArMTUzNyw3IEBA IFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+Ojpkb18KIAkg ICAgICB9CiAJfQogCi0gICAgICBpZiAoaXNfZ2NfcGFzc190d28gJiYgcGFy YW1ldGVycy0+b3B0aW9ucygpLmljZl9lbmFibGVkKCkpCisgICAgICBpZiAo aXNfcGFzc190d28gJiYgcGFyYW1ldGVycy0+b3B0aW9ucygpLmljZl9lbmFi bGVkKCkpCiAJewogCSAgaWYgKG91dF9zZWN0aW9uc1tpXSA9PSBOVUxMKQog CSAgICB7CkBAIC0xNTUzLDcgKzE1NzEsNyBAQCBTaXplZF9yZWxvYmpfZmls ZTxzaXplLCBiaWdfZW5kaWFuPjo6ZG9fCiAgICAgICAvLyBzaG91bGRfZGVm ZXJfbGF5b3V0IHNob3VsZCBiZSBmYWxzZS4KICAgICAgIGlmIChzaG91bGRf ZGVmZXJfbGF5b3V0ICYmIChzaGRyLmdldF9zaF9mbGFncygpICYgZWxmY3Bw OjpTSEZfQUxMT0MpKQogCXsKLQkgIGdvbGRfYXNzZXJ0KCFpc19nY19wYXNz X3R3byk7CisJICBnb2xkX2Fzc2VydCghaXNfcGFzc190d28pOwogCSAgdGhp cy0+ZGVmZXJyZWRfbGF5b3V0Xy5wdXNoX2JhY2soRGVmZXJyZWRfbGF5b3V0 KGksIG5hbWUsCiAJCQkJCQkJICAgcHNoZHJzLAogCQkJCQkJCSAgIHJlbG9j X3NobmR4W2ldLApAQCAtMTU2OCwxMSArMTU4NiwxMSBAQCBTaXplZF9yZWxv YmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPjo6ZG9fCiAgICAgICAvLyBEdXJp bmcgZ2NfcGFzc190d28gaWYgYSBzZWN0aW9uIHRoYXQgd2FzIHByZXZpb3Vz bHkgZGVmZXJyZWQgaXMKICAgICAgIC8vIGZvdW5kLCBkbyBub3QgbGF5b3V0 IHRoZSBzZWN0aW9uIGFzIGxheW91dF9kZWZlcnJlZF9zZWN0aW9ucyB3aWxs CiAgICAgICAvLyBkbyBpdCBsYXRlciBmcm9tIGdvbGQuY2MuCi0gICAgICBp ZiAoaXNfZ2NfcGFzc190d28KKyAgICAgIGlmIChpc19wYXNzX3R3bwogCSAg JiYgKG91dF9zZWN0aW9uc1tpXSA9PSByZWludGVycHJldF9jYXN0PE91dHB1 dF9zZWN0aW9uKj4oMikpKQogCWNvbnRpbnVlOwogCi0gICAgICBpZiAoaXNf Z2NfcGFzc19vbmUpCisgICAgICBpZiAoaXNfcGFzc19vbmUpCiAJewogCSAg Ly8gVGhpcyBpcyBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGUgb3V0 X3NlY3Rpb25zIGFyZQogCSAgLy8gYXNzaWduZWQgaW4gdGhlIHNlY29uZCBj YWxsIHRvIHRoaXMgZnVuY3Rpb24uCkBAIC0xNjAzLDcgKzE2MjEsNyBAQCBT aXplZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPjo6ZG9fCiAJfQog ICAgIH0KIAotICBpZiAoIWlzX2djX3Bhc3NfdHdvKQorICBpZiAoIWlzX3Bh c3NfdHdvKQogICAgIGxheW91dC0+bGF5b3V0X2dudV9zdGFjayhzZWVuX2du dV9zdGFjaywgZ251X3N0YWNrX2ZsYWdzLCB0aGlzKTsKIAogICAvLyBXaGVu IGRvaW5nIGEgcmVsb2NhdGFibGUgbGluayBoYW5kbGUgdGhlIHJlbG9jIHNl Y3Rpb25zIGF0IHRoZQpAQCAtMTYxMiw3ICsxNjMwLDcgQEAgU2l6ZWRfcmVs b2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj46OmRvXwogICBpZiAoZW1pdF9y ZWxvY3MpCiAgICAgdGhpcy0+c2l6ZV9yZWxvY2F0YWJsZV9yZWxvY3MoKTsK IAotICBnb2xkX2Fzc2VydCghKGlzX2djX29yX2ljZikgfHwgcmVsb2Nfc2Vj dGlvbnMuZW1wdHkoKSk7CisgIGdvbGRfYXNzZXJ0KCEoaXNfdHdvX3Bhc3Mp IHx8IHJlbG9jX3NlY3Rpb25zLmVtcHR5KCkpOwogCiAgIGZvciAoc3RkOjp2 ZWN0b3I8dW5zaWduZWQgaW50Pjo6Y29uc3RfaXRlcmF0b3IgcCA9IHJlbG9j X3NlY3Rpb25zLmJlZ2luKCk7CiAgICAgICAgcCAhPSByZWxvY19zZWN0aW9u cy5lbmQoKTsKQEAgLTE2NTksNyArMTY3Nyw3IEBAIFNpemVkX3JlbG9ial9m aWxlPHNpemUsIGJpZ19lbmRpYW4+Ojpkb18KICAgICB9CiAKICAgLy8gSGFu ZGxlIHRoZSAuZWhfZnJhbWUgc2VjdGlvbnMgYXQgdGhlIGVuZC4KLSAgZ29s ZF9hc3NlcnQoIWlzX2djX3Bhc3Nfb25lIHx8IGVoX2ZyYW1lX3NlY3Rpb25z LmVtcHR5KCkpOworICBnb2xkX2Fzc2VydCghaXNfcGFzc19vbmUgfHwgZWhf ZnJhbWVfc2VjdGlvbnMuZW1wdHkoKSk7CiAgIGZvciAoc3RkOjp2ZWN0b3I8 dW5zaWduZWQgaW50Pjo6Y29uc3RfaXRlcmF0b3IgcCA9IGVoX2ZyYW1lX3Nl Y3Rpb25zLmJlZ2luKCk7CiAgICAgICAgcCAhPSBlaF9mcmFtZV9zZWN0aW9u cy5lbmQoKTsKICAgICAgICArK3ApCkBAIC0xNjgyLDcgKzE3MDAsNyBAQCBT aXplZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPjo6ZG9fCiAKICAg Ly8gV2hlbiBidWlsZGluZyBhIC5nZGJfaW5kZXggc2VjdGlvbiwgc2NhbiB0 aGUgLmRlYnVnX2luZm8gYW5kCiAgIC8vIC5kZWJ1Z190eXBlcyBzZWN0aW9u cy4KLSAgZ29sZF9hc3NlcnQoIWlzX2djX3Bhc3Nfb25lCisgIGdvbGRfYXNz ZXJ0KCFpc19wYXNzX29uZQogCSAgICAgIHx8IChkZWJ1Z19pbmZvX3NlY3Rp b25zLmVtcHR5KCkgJiYgZGVidWdfdHlwZXNfc2VjdGlvbnMuZW1wdHkoKSkp OwogICBmb3IgKHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGludD46OmNvbnN0X2l0 ZXJhdG9yIHAKIAkgICA9IGRlYnVnX2luZm9fc2VjdGlvbnMuYmVnaW4oKTsK QEAgLTE3MDMsNyArMTcyMSw3IEBAIFNpemVkX3JlbG9ial9maWxlPHNpemUs IGJpZ19lbmRpYW4+Ojpkb18KIAkJCSAgICAgICBpLCByZWxvY19zaG5keFtp XSwgcmVsb2NfdHlwZVtpXSk7CiAgICAgfQogCi0gIGlmIChpc19nY19wYXNz X3R3bykKKyAgaWYgKGlzX3Bhc3NfdHdvKQogICAgIHsKICAgICAgIGRlbGV0 ZVtdIGdjX3NkLT5zZWN0aW9uX2hlYWRlcnNfZGF0YTsKICAgICAgIGRlbGV0 ZVtdIGdjX3NkLT5zZWN0aW9uX25hbWVzX2RhdGE7CkluZGV4OiBnb2xkL291 dHB1dC5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz L3NyYy9zcmMvZ29sZC9vdXRwdXQuY2MsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMTY3CmRpZmYgLXUgLXUgLXAgLXIxLjE2NyBvdXRwdXQuY2MKLS0tIGdv bGQvb3V0cHV0LmNjCTYgSnVuIDIwMTIgMjI6MTI6NDcgLTAwMDAJMS4xNjcK KysrIGdvbGQvb3V0cHV0LmNjCTkgQXVnIDIwMTIgMjE6Mjg6MDMgLTAwMDAK QEAgLTIyNDUsNyArMjI0NSwxMCBAQCBPdXRwdXRfc2VjdGlvbjo6T3V0cHV0 X3NlY3Rpb24oY29uc3QgY2hhCiAgICAgYWx3YXlzX2tlZXBzX2lucHV0X3Nl Y3Rpb25zXyhmYWxzZSksCiAgICAgaGFzX2ZpeGVkX2xheW91dF8oZmFsc2Up LAogICAgIGlzX3BhdGNoX3NwYWNlX2FsbG93ZWRfKGZhbHNlKSwKKyAgICBp c191bmlxdWVfc2VnbWVudF8oZmFsc2UpLAogICAgIHRsc19vZmZzZXRfKDAp LAorICAgIGV4dHJhX3NlZ21lbnRfZmxhZ3NfKDApLAorICAgIHNlZ21lbnRf YWxpZ25tZW50XygwKSwKICAgICBjaGVja3BvaW50XyhOVUxMKSwKICAgICBs b29rdXBfbWFwc18obmV3IE91dHB1dF9zZWN0aW9uX2xvb2t1cF9tYXBzKSwK ICAgICBmcmVlX2xpc3RfKCksCkBAIC0zOTc5LDcgKzM5ODIsOCBAQCBPdXRw dXRfc2VnbWVudDo6T3V0cHV0X3NlZ21lbnQoZWxmY3BwOjpFCiAgICAgZmxh Z3NfKGZsYWdzKSwKICAgICBpc19tYXhfYWxpZ25fa25vd25fKGZhbHNlKSwK ICAgICBhcmVfYWRkcmVzc2VzX3NldF8oZmFsc2UpLAotICAgIGlzX2xhcmdl X2RhdGFfc2VnbWVudF8oZmFsc2UpCisgICAgaXNfbGFyZ2VfZGF0YV9zZWdt ZW50XyhmYWxzZSksCisgICAgaXNfdW5pcXVlX3NlZ21lbnRfKGZhbHNlKQog ewogICAvLyBUaGUgRUxGIEFCSSBzcGVjaWZpZXMgdGhhdCBhIFBUX1RMUyBz ZWdtZW50IGFsd2F5cyBoYXMgUEZfUiBhcwogICAvLyB0aGUgZmxhZ3MuCklu ZGV4OiBnb2xkL291dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9jdnMvc3JjL3NyYy9nb2xkL291dHB1dC5oLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjEzNQpkaWZmIC11IC11IC1wIC1yMS4xMzUgb3V0cHV0 LmgKLS0tIGdvbGQvb3V0cHV0LmgJMTAgSnVsIDIwMTIgMTQ6NTQ6MjkgLTAw MDAJMS4xMzUKKysrIGdvbGQvb3V0cHV0LmgJOSBBdWcgMjAxMiAyMToyODow MyAtMDAwMApAQCAtMzI0OSw2ICszMjQ5LDI5IEBAIGNsYXNzIE91dHB1dF9z ZWN0aW9uIDogcHVibGljIE91dHB1dF9kYXQKICAgcmVxdWlyZXNfcG9zdHBy b2Nlc3NpbmcoKSBjb25zdAogICB7IHJldHVybiB0aGlzLT5yZXF1aXJlc19w b3N0cHJvY2Vzc2luZ187IH0KIAorICBib29sCisgIGlzX3VuaXF1ZV9zZWdt ZW50KCkgY29uc3QKKyAgeyByZXR1cm4gdGhpcy0+aXNfdW5pcXVlX3NlZ21l bnRfOyB9CisKKyAgdm9pZAorICBzZXRfaXNfdW5pcXVlX3NlZ21lbnQoKQor ICB7IHRoaXMtPmlzX3VuaXF1ZV9zZWdtZW50XyA9IHRydWU7IH0KKworICB1 aW50NjRfdCBleHRyYV9zZWdtZW50X2ZsYWdzKCkgY29uc3QKKyAgeyByZXR1 cm4gZXh0cmFfc2VnbWVudF9mbGFnc187IH0KKworICB2b2lkCisgIHNldF9l eHRyYV9zZWdtZW50X2ZsYWdzKHVpbnQ2NF90IGZsYWdzKQorICB7IGV4dHJh X3NlZ21lbnRfZmxhZ3NfID0gZmxhZ3M7IH0KKworICB1aW50NjRfdCBzZWdt ZW50X2FsaWdubWVudCgpIGNvbnN0CisgIHsgcmV0dXJuIHNlZ21lbnRfYWxp Z25tZW50XzsgfQorCisgIHZvaWQKKyAgc2V0X3NlZ21lbnRfYWxpZ25tZW50 KHVpbnQ2NF90IGFsaWduKQorICB7IHNlZ21lbnRfYWxpZ25tZW50XyA9IGFs aWduOyB9CisgIAorCiAgIC8vIElmIGEgc2VjdGlvbiByZXF1aXJlcyBwb3N0 cHJvY2Vzc2luZywgcmV0dXJuIHRoZSBidWZmZXIgdG8gdXNlLgogICB1bnNp Z25lZCBjaGFyKgogICBwb3N0cHJvY2Vzc2luZ19idWZmZXIoKSBjb25zdApA QCAtNDIwMCw5ICs0MjIzLDE3IEBAIGNsYXNzIE91dHB1dF9zZWN0aW9uIDog cHVibGljIE91dHB1dF9kYXQKICAgYm9vbCBoYXNfZml4ZWRfbGF5b3V0XyA6 IDE7CiAgIC8vIFRydWUgaWYgd2UgY2FuIGFkZCBwYXRjaCBzcGFjZSB0byB0 aGlzIHNlY3Rpb24uCiAgIGJvb2wgaXNfcGF0Y2hfc3BhY2VfYWxsb3dlZF8g OiAxOworICAvLyBUcnVlIGlmIHRoaXMgb3V0cHV0IHNlY3Rpb24gZ29lcyBp bnRvIGEgdW5pcXVlIHNlZ21lbnQuCisgIGJvb2wgaXNfdW5pcXVlX3NlZ21l bnRfIDogMTsKICAgLy8gRm9yIFNIVF9UTFMgc2VjdGlvbnMsIHRoZSBvZmZz ZXQgb2YgdGhpcyBzZWN0aW9uIHJlbGF0aXZlIHRvIHRoZSBiYXNlCiAgIC8v IG9mIHRoZSBUTFMgc2VnbWVudC4KICAgdWludDY0X3QgdGxzX29mZnNldF87 CisgIC8vIEFkZGl0aW9uYWwgc2VnbWVudCBmbGFncywgc3BlY2lmaWVkIHZp YSBsaW5rZXIgcGx1Z2luLCB3aGVuIG1hcHBpbmcgc29tZQorICAvLyBpbnB1 dCBzZWN0aW9ucyB0byB1bmlxdWUgc2VnbWVudHMuCisgIHVpbnQ2NF90IGV4 dHJhX3NlZ21lbnRfZmxhZ3NfOyAKKyAgLy8gU2VnbWVudCBhbGlnbm1lbnQg c3BlY2lmaWVkIHZpYSBsaW5rZXIgcGx1Z2luLCB3aGVuIG1hcHBpbmcgc29t ZQorICAvLyBpbnB1dCBzZWN0aW9ucyB0byB1bmlxdWUgc2VnbWVudHMuCisg IHVpbnQ2NF90IHNlZ21lbnRfYWxpZ25tZW50XzsKICAgLy8gU2F2ZWQgY2hl Y2twb2ludC4KICAgQ2hlY2twb2ludF9vdXRwdXRfc2VjdGlvbiogY2hlY2tw b2ludF87CiAgIC8vIEZhc3QgbG9va3VwIG1hcHMgZm9yIG1lcmdlZCBhbmQg cmVsYXhlZCBpbnB1dCBzZWN0aW9ucy4KQEAgLTQyNzgsNiArNDMwOSwxNiBA QCBjbGFzcyBPdXRwdXRfc2VnbWVudAogICBzZXRfaXNfbGFyZ2VfZGF0YV9z ZWdtZW50KCkKICAgeyB0aGlzLT5pc19sYXJnZV9kYXRhX3NlZ21lbnRfID0g dHJ1ZTsgfQogCisgIGJvb2wKKyAgaXNfdW5pcXVlX3NlZ21lbnQoKSBjb25z dAorICB7IHJldHVybiBpc191bmlxdWVfc2VnbWVudF87IH0KKworICAvLyBN YXJrIHNlZ21lbnQgYXMgdW5pcXVlLCBoYXBwZW5zIHdoZW4gbGlua2VyIHBs dWdpbnMgcmVxdWVzdCB0aGF0CisgIC8vIGNlcnRhaW4gaW5wdXQgc2VjdGlv bnMgYmUgbWFwcGVkIHRvIHVuaXF1ZSBzZWdtZW50cy4KKyAgdm9pZAorICBz ZXRfaXNfdW5pcXVlX3NlZ21lbnQoKQorICB7IHRoaXMtPmlzX3VuaXF1ZV9z ZWdtZW50XyA9IHRydWU7IH0KKwogICAvLyBSZXR1cm4gdGhlIG1heGltdW0g YWxpZ25tZW50IG9mIHRoZSBPdXRwdXRfZGF0YS4KICAgdWludDY0X3QKICAg bWF4aW11bV9hbGlnbm1lbnQoKTsKQEAgLTQ0ODgsNiArNDUyOSw4IEBAIGNs YXNzIE91dHB1dF9zZWdtZW50CiAgIGJvb2wgYXJlX2FkZHJlc3Nlc19zZXRf IDogMTsKICAgLy8gV2hldGhlciB0aGlzIHNlZ21lbnQgaG9sZHMgbGFyZ2Ug ZGF0YSBzZWN0aW9ucy4KICAgYm9vbCBpc19sYXJnZV9kYXRhX3NlZ21lbnRf IDogMTsKKyAgLy8gV2hldGhlciB0aGlzIHdhcyBtYXJrZWQgYXMgYSB1bmlx dWUgc2VnbWVudCB2aWEgYSBsaW5rZXIgcGx1Z2luLgorICBib29sIGlzX3Vu aXF1ZV9zZWdtZW50XyA6IDE7CiB9OwogCiAvLyBUaGlzIGNsYXNzIHJlcHJl c2VudHMgdGhlIG91dHB1dCBmaWxlLgpJbmRleDogZ29sZC9wbHVnaW4uY2MK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3Jj L2dvbGQvcGx1Z2luLmNjLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU0CmRp ZmYgLXUgLXUgLXAgLXIxLjU0IHBsdWdpbi5jYwotLS0gZ29sZC9wbHVnaW4u Y2MJMTIgSnVuIDIwMTIgMjI6NTI6NDEgLTAwMDAJMS41NAorKysgZ29sZC9w bHVnaW4uY2MJOSBBdWcgMjAxMiAyMToyODowMyAtMDAwMApAQCAtMTE1LDYg KzExNSwxNSBAQCB1cGRhdGVfc2VjdGlvbl9vcmRlcihjb25zdCBzdHJ1Y3Qg bGRfcGx1CiBzdGF0aWMgZW51bSBsZF9wbHVnaW5fc3RhdHVzCiBhbGxvd19z ZWN0aW9uX29yZGVyaW5nKCk7CiAKK3N0YXRpYyBlbnVtIGxkX3BsdWdpbl9z dGF0dXMKK2FsbG93X3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucygpOwor CitzdGF0aWMgZW51bSBsZF9wbHVnaW5fc3RhdHVzCit1bmlxdWVfc2VnbWVu dF9mb3Jfc2VjdGlvbnMoY29uc3QgY2hhciogc2VnbWVudF9uYW1lLAorCQkJ ICAgIHVpbnQ2NF90IGZsYWdzLAorCQkJICAgIHVpbnQ2NF90IGFsaWduLAor CQkJICAgIGNvbnN0IHN0cnVjdCBsZF9wbHVnaW5fc2VjdGlvbiAqc2VjdGlv bl9saXN0LAorCQkJICAgIHVuc2lnbmVkIGludCBudW1fc2VjdGlvbnMpOwog fTsKIAogI2VuZGlmIC8vIEVOQUJMRV9QTFVHSU5TCkBAIC0xNTksNyArMTY4 LDcgQEAgUGx1Z2luOjpsb2FkKCkKICAgc3NjYW5mKHZlciwgIiVkLiVkIiwg Jm1ham9yLCAmbWlub3IpOwogCiAgIC8vIEFsbG9jYXRlIGFuZCBwb3B1bGF0 ZSBhIHRyYW5zZmVyIHZlY3Rvci4KLSAgY29uc3QgaW50IHR2X2ZpeGVkX3Np emUgPSAyNDsKKyAgY29uc3QgaW50IHR2X2ZpeGVkX3NpemUgPSAyNjsKIAog ICBpbnQgdHZfc2l6ZSA9IHRoaXMtPmFyZ3NfLnNpemUoKSArIHR2X2ZpeGVk X3NpemU7CiAgIGxkX3BsdWdpbl90diogdHYgPSBuZXcgbGRfcGx1Z2luX3R2 W3R2X3NpemVdOwpAQCAtMjczLDYgKzI4MiwxNSBAQCBQbHVnaW46OmxvYWQo KQogICB0dltpXS50dl91LnR2X2FsbG93X3NlY3Rpb25fb3JkZXJpbmcgPSBh bGxvd19zZWN0aW9uX29yZGVyaW5nOwogCiAgICsraTsKKyAgdHZbaV0udHZf dGFnID0gTERQVF9BTExPV19VTklRVUVfU0VHTUVOVF9GT1JfU0VDVElPTlM7 CisgIHR2W2ldLnR2X3UudHZfYWxsb3dfdW5pcXVlX3NlZ21lbnRfZm9yX3Nl Y3Rpb25zCisgICAgPSBhbGxvd191bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlv bnM7CisKKyAgKytpOworICB0dltpXS50dl90YWcgPSBMRFBUX1VOSVFVRV9T RUdNRU5UX0ZPUl9TRUNUSU9OUzsKKyAgdHZbaV0udHZfdS50dl91bmlxdWVf c2VnbWVudF9mb3Jfc2VjdGlvbnMgPSB1bmlxdWVfc2VnbWVudF9mb3Jfc2Vj dGlvbnM7CisKKyAgKytpOwogICB0dltpXS50dl90YWcgPSBMRFBUX05VTEw7 CiAgIHR2W2ldLnR2X3UudHZfdmFsID0gMDsKIApAQCAtMTY4NSw2ICsxNzAz LDY4IEBAIGFsbG93X3NlY3Rpb25fb3JkZXJpbmcoKQogICByZXR1cm4gTERQ U19PSzsKIH0KIAorLy8gTGV0IHRoZSBsaW5rZXIga25vdyB0aGF0IGEgc3Vi c2V0IG9mIHNlY3Rpb25zIGNvdWxkIGJlIG1hcHBlZAorLy8gdG8gYSB1bmlx dWUgc2VnbWVudC4KKworc3RhdGljIGVudW0gbGRfcGx1Z2luX3N0YXR1cwor YWxsb3dfdW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zKCkKK3sKKyAgZ29s ZF9hc3NlcnQocGFyYW1ldGVycy0+b3B0aW9ucygpLmhhc19wbHVnaW5zKCkp OworICBMYXlvdXQqIGxheW91dCA9IHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5w bHVnaW5zKCktPmxheW91dCgpOworICBsYXlvdXQtPnNldF91bmlxdWVfc2Vn bWVudF9mb3Jfc2VjdGlvbnNfc3BlY2lmaWVkKCk7CisgIHJldHVybiBMRFBT X09LOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBtYXAgdGhlIGxp c3Qgb2Ygc2VjdGlvbnMgc3BlY2lmaWVkIGluIHRoZQorLy8gU0VDVElPTl9M SVNUIHRvIGEgdW5pcXVlIHNlZ21lbnQuICBFTEYgc2VnbWVudHMgZG8gbm90 IGhhdmUgbmFtZXMKKy8vIGFuZCB0aGUgTkFNRSBpcyB1c2VkIHRvIGlkZW50 aWZ5IE91dHB1dCBTZWN0aW9uIHdoaWNoIHNob3VsZCBjb250YWluCisvLyB0 aGUgbGlzdCBvZiBzZWN0aW9ucy4gIFRoaXMgT3V0cHV0IFNlY3Rpb24gd2ls bCB0aGVuIGJlIG1hcHBlZCB0bworLy8gYSB1bmlxdWUgc2VnbWVudC4gIEZM QUdTIGlzIHVzZWQgdG8gc3BlY2lmeSBpZiBhbnkgYWRkaXRpb25hbCBzZWdt ZW50CisvLyBmbGFncyBuZWVkIHRvIGJlIHNldC4gIEZvciBpbnN0YW5jZSwg YSBzcGVjaWZpYyBzZWdtZW50IGZsYWcgY2FuIGJlCisvLyBzZXQgdG8gaWRl bnRpZnkgdGhpcyBzZWdtZW50LiAgVW5zZXR0aW5nIHNlZ21lbnQgZmxhZ3Mg aXMgbm90IHBvc3NpYmxlLgorLy8gQUxJR04gc3BlY2lmaWVzIHRoZSBhbGln bm1lbnQgb2YgdGhlIHNlZ21lbnQuCisKK3N0YXRpYyBlbnVtIGxkX3BsdWdp bl9zdGF0dXMKK3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucyhjb25zdCBj aGFyKiBzZWdtZW50X25hbWUsCisJCQkgICAgdWludDY0X3QgZmxhZ3MsCisJ CQkgICAgdWludDY0X3QgYWxpZ24sCisJCQkgICAgY29uc3Qgc3RydWN0IGxk X3BsdWdpbl9zZWN0aW9uKiBzZWN0aW9uX2xpc3QsCisJCQkgICAgdW5zaWdu ZWQgaW50IG51bV9zZWN0aW9ucykKK3sKKyAgZ29sZF9hc3NlcnQocGFyYW1l dGVycy0+b3B0aW9ucygpLmhhc19wbHVnaW5zKCkpOworCisgIGlmIChudW1f c2VjdGlvbnMgPT0gMCkKKyAgICByZXR1cm4gTERQU19PSzsKKworICBpZiAo c2VjdGlvbl9saXN0ID09IE5VTEwpCisgICAgcmV0dXJuIExEUFNfRVJSOwor CisgIExheW91dCogbGF5b3V0ID0gcGFyYW1ldGVycy0+b3B0aW9ucygpLnBs dWdpbnMoKS0+bGF5b3V0KCk7CisgIGdvbGRfYXNzZXJ0IChsYXlvdXQgIT0g TlVMTCk7CisKKyAgTGF5b3V0OjpTZWN0aW9uX3NlZ21lbnRfbWFwJiBzZWN0 aW9uX3NlZ21lbnRfbWFwCisgICAgICA9IGxheW91dC0+Z2V0X3NlY3Rpb25f c2VnbWVudF9tYXAoKTsKKworICBMYXlvdXQ6OlVuaXF1ZV9zZWdtZW50X2lu Zm8qIHMgPSBzdGF0aWNfY2FzdDxMYXlvdXQ6OlVuaXF1ZV9zZWdtZW50X2lu Zm8qPgorICAgICAgKG1hbGxvYyhzaXplb2YoTGF5b3V0OjpVbmlxdWVfc2Vn bWVudF9pbmZvKSkpOworICBzLT5uYW1lID0gc2VnbWVudF9uYW1lOworICBz LT5mbGFncyA9IGZsYWdzOworICBzLT5hbGlnbiA9IGFsaWduOworCisgIGZv ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtX3NlY3Rpb25zOyArK2kp CisgICAgeworICAgICAgT2JqZWN0KiBvYmogPSBwYXJhbWV0ZXJzLT5vcHRp b25zKCkucGx1Z2lucygpLT5nZXRfZWxmX29iamVjdCgKKyAgICAgICAgICBz ZWN0aW9uX2xpc3RbaV0uaGFuZGxlKTsKKyAgICAgIGlmIChvYmogPT0gTlVM TCkKKwlyZXR1cm4gTERQU19CQURfSEFORExFOworICAgICAgdW5zaWduZWQg aW50IHNobmR4ID0gc2VjdGlvbl9saXN0W2ldLnNobmR4OworICAgICAgQ29u c3Rfc2VjdGlvbl9pZCBzZWNuX2lkKG9iaiwgc2huZHgpOworICAgICAgc2Vj dGlvbl9zZWdtZW50X21hcFtzZWNuX2lkXSA9IHM7CisgICAgfQorCisgIHJl dHVybiBMRFBTX09LOworfQorCiAjZW5kaWYgLy8gRU5BQkxFX1BMVUdJTlMK IAogLy8gQWxsb2NhdGUgYSBQbHVnaW5vYmogb2JqZWN0IG9mIHRoZSBhcHBy b3ByaWF0ZSBzaXplIGFuZCBlbmRpYW5uZXNzLgpJbmRleDogZ29sZC90ZXN0 c3VpdGUvTWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFt LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5NApkaWZmIC11IC11IC1wIC1y MS4xOTQgTWFrZWZpbGUuYW0KLS0tIGdvbGQvdGVzdHN1aXRlL01ha2VmaWxl LmFtCTE5IEp1bCAyMDEyIDAwOjE5OjM0IC0wMDAwCTEuMTk0CisrKyBnb2xk L3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbQk5IEF1ZyAyMDEyIDIxOjI4OjAzIC0w MDAwCkBAIC0xNTE5LDEzICsxNTE5LDE1IEBAIHVudXNlZC5jOgogCUBjcCAv ZGV2L251bGwgJEAKIAogY2hlY2tfU0NSSVBUUyArPSBwbHVnaW5fZmluYWxf bGF5b3V0LnNoCi1jaGVja19EQVRBICs9IHBsdWdpbl9maW5hbF9sYXlvdXQu c3Rkb3V0CitjaGVja19EQVRBICs9IHBsdWdpbl9maW5hbF9sYXlvdXQuc3Rk b3V0IHBsdWdpbl9maW5hbF9sYXlvdXQucmVhZGVsZi5zdGRvdXQKIHBsdWdp bl9maW5hbF9sYXlvdXQubzogcGx1Z2luX2ZpbmFsX2xheW91dC5jYwogCSQo Q1hYQ09NUElMRSkgLU8wIC1jIC1mZnVuY3Rpb24tc2VjdGlvbnMgIC1mZGF0 YS1zZWN0aW9ucyAtZyAtbyAkQCAkPAogcGx1Z2luX2ZpbmFsX2xheW91dDog cGx1Z2luX2ZpbmFsX2xheW91dC5vIHBsdWdpbl9zZWN0aW9uX29yZGVyLnNv IGdjY3Rlc3RkaXIvbGQKIAkkKENYWExJTkspIC1CZ2NjdGVzdGRpci8gLVds LC0tcGx1Z2luLCIuL3BsdWdpbl9zZWN0aW9uX29yZGVyLnNvIiBwbHVnaW5f ZmluYWxfbGF5b3V0Lm8KIHBsdWdpbl9maW5hbF9sYXlvdXQuc3Rkb3V0OiBw bHVnaW5fZmluYWxfbGF5b3V0CiAJJChURVNUX05NKSAtbiBwbHVnaW5fZmlu YWxfbGF5b3V0ID4gcGx1Z2luX2ZpbmFsX2xheW91dC5zdGRvdXQKK3BsdWdp bl9maW5hbF9sYXlvdXQucmVhZGVsZi5zdGRvdXQ6IHBsdWdpbl9maW5hbF9s YXlvdXQKKwkkKFRFU1RfUkVBREVMRikgLWwgcGx1Z2luX2ZpbmFsX2xheW91 dCA+IHBsdWdpbl9maW5hbF9sYXlvdXQucmVhZGVsZi5zdGRvdXQKIAogcGx1 Z2luX3NlY3Rpb25fb3JkZXIuc286IHBsdWdpbl9zZWN0aW9uX29yZGVyLm8K IAkkKExJTkspIC1CZ2NjdGVzdGRpci8gLXNoYXJlZCBwbHVnaW5fc2VjdGlv bl9vcmRlci5vCkluZGV4OiBnb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMv Z29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuaW4sdgpyZXRyaWV2aW5nIHJldmlz aW9uIDEuMjA0CmRpZmYgLXUgLXUgLXAgLXIxLjIwNCBNYWtlZmlsZS5pbgot LS0gZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuaW4JMTkgSnVsIDIwMTIgMDA6 MTk6MzUgLTAwMDAJMS4yMDQKKysrIGdvbGQvdGVzdHN1aXRlL01ha2VmaWxl LmluCTkgQXVnIDIwMTIgMjE6Mjg6MDQgLTAwMDAKQEAgLTMyOSw3ICszMjks OCBAQCBjaGVja19QUk9HUkFNUyA9ICQoYW1fX0VYRUVYVF8xKSAkKGFtX19F CiBAR0NDX1RSVUVAQE5BVElWRV9MSU5LRVJfVFJVRUBAUExVR0lOU19UUlVF QAlwbHVnaW5fdGVzdF83LmVyciBcCiBAR0NDX1RSVUVAQE5BVElWRV9MSU5L RVJfVFJVRUBAUExVR0lOU19UUlVFQAlwbHVnaW5fdGVzdF83LnN5bXMgXAog QEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVAQFBMVUdJTlNfVFJVRUAJ cGx1Z2luX3Rlc3RfOS5lcnIgXAotQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VS X1RSVUVAQFBMVUdJTlNfVFJVRUAJcGx1Z2luX2ZpbmFsX2xheW91dC5zdGRv dXQKK0BHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQEBQTFVHSU5TX1RS VUVACXBsdWdpbl9maW5hbF9sYXlvdXQuc3Rkb3V0IFwKK0BHQ0NfVFJVRUBA TkFUSVZFX0xJTktFUl9UUlVFQEBQTFVHSU5TX1RSVUVACXBsdWdpbl9maW5h bF9sYXlvdXQucmVhZGVsZi5zdGRvdXQKICMgTWFrZSBhIGNvcHkgb2YgdHdv X2ZpbGVfdGVzdF8xLm8sIHdoaWNoIGRvZXMgbm90IGRlZmluZSB0aGUgc3lt Ym9sIF9aNHQxNmF2LgogQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVA QFBMVUdJTlNfVFJVRUBhbV9fYXBwZW5kXzM2ID0gIFwKIEBHQ0NfVFJVRUBA TkFUSVZFX0xJTktFUl9UUlVFQEBQTFVHSU5TX1RSVUVACXBsdWdpbl90ZXN0 XzEuZXJyIFwKQEAgLTQ4NjcsNiArNDg2OCw4IEBAIHVuaW5zdGFsbC1hbToK IEBHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQEBQTFVHSU5TX1RSVUVA CSQoQ1hYTElOSykgLUJnY2N0ZXN0ZGlyLyAtV2wsLS1wbHVnaW4sIi4vcGx1 Z2luX3NlY3Rpb25fb3JkZXIuc28iIHBsdWdpbl9maW5hbF9sYXlvdXQubwog QEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVAQFBMVUdJTlNfVFJVRUBw bHVnaW5fZmluYWxfbGF5b3V0LnN0ZG91dDogcGx1Z2luX2ZpbmFsX2xheW91 dAogQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVAQFBMVUdJTlNfVFJV RUAJJChURVNUX05NKSAtbiBwbHVnaW5fZmluYWxfbGF5b3V0ID4gcGx1Z2lu X2ZpbmFsX2xheW91dC5zdGRvdXQKK0BHQ0NfVFJVRUBATkFUSVZFX0xJTktF Ul9UUlVFQEBQTFVHSU5TX1RSVUVAcGx1Z2luX2ZpbmFsX2xheW91dC5yZWFk ZWxmLnN0ZG91dDogcGx1Z2luX2ZpbmFsX2xheW91dAorQEdDQ19UUlVFQEBO QVRJVkVfTElOS0VSX1RSVUVAQFBMVUdJTlNfVFJVRUAJJChURVNUX1JFQURF TEYpIC1sIHBsdWdpbl9maW5hbF9sYXlvdXQgPiBwbHVnaW5fZmluYWxfbGF5 b3V0LnJlYWRlbGYuc3Rkb3V0CiAKIEBHQ0NfVFJVRUBATkFUSVZFX0xJTktF Ul9UUlVFQEBQTFVHSU5TX1RSVUVAcGx1Z2luX3NlY3Rpb25fb3JkZXIuc286 IHBsdWdpbl9zZWN0aW9uX29yZGVyLm8KIEBHQ0NfVFJVRUBATkFUSVZFX0xJ TktFUl9UUlVFQEBQTFVHSU5TX1RSVUVACSQoTElOSykgLUJnY2N0ZXN0ZGly LyAtc2hhcmVkIHBsdWdpbl9zZWN0aW9uX29yZGVyLm8KSW5kZXg6IGdvbGQv dGVzdHN1aXRlL3BsdWdpbl9maW5hbF9sYXlvdXQuc2gKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dvbGQvdGVzdHN1 aXRlL3BsdWdpbl9maW5hbF9sYXlvdXQuc2gsdgpyZXRyaWV2aW5nIHJldmlz aW9uIDEuMQpkaWZmIC11IC11IC1wIC1yMS4xIHBsdWdpbl9maW5hbF9sYXlv dXQuc2gKLS0tIGdvbGQvdGVzdHN1aXRlL3BsdWdpbl9maW5hbF9sYXlvdXQu c2gJMjkgU2VwIDIwMTEgMjM6NDU6NTcgLTAwMDAJMS4xCisrKyBnb2xkL3Rl c3RzdWl0ZS9wbHVnaW5fZmluYWxfbGF5b3V0LnNoCTkgQXVnIDIwMTIgMjE6 Mjg6MDQgLTAwMDAKQEAgLTU2LDUgKzU2LDM1IEBAIEVORCB7CiAgICAgfSIg JDEKIH0KIAorIyBXaXRoIHJlYWRlbGYgLWwsIGFuIEVMRiBTZWN0aW9uIHRv IFNlZ21lbnQgbWFwcGluZyBpcyBwcmludGVkIGFzIDoKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIFNlY3Rp b24gdG8gU2VnbWVudCBtYXBwaW5nOgorIyAgU2VnbWVudCBTZWN0aW9ucy4u LgorIyAgLi4uCisjICAgICAweCAgICAgLnRleHQucGx1Z2luX2NyZWF0ZWRf dW5pcXVlCisjICAuLi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2hlY2sgb2YgLnRleHQucGx1Z2luX2Ny ZWF0ZWRfdW5pcXVlIGlzIHRoZSBvbmx5IHNlY3Rpb24gaW4gdGhlIHNlZ21l bnQuCitjaGVja191bmlxdWVfc2VnbWVudCgpCit7CisgICAgYXdrICIKK0JF R0lOIHsgc2F3X3NlY3Rpb24gPSAwOyBzYXdfdW5pcXVlID0gMDsgfQorLyQy LyB7IHNhd19zZWN0aW9uID0gMTsgfQorL1sgXSowWzAtOV1bIF0qJDJbIF0q XCQvIHsgc2F3X3VuaXF1ZSA9IDE7IH0KK0VORCB7CisgICAgICBpZiAoIXNh d19zZWN0aW9uKQorCXsKKwkgIHByaW50ZiBcIlNlY3Rpb24gJDIgbm90IHNl ZW4gaW4gb3V0cHV0XFxuXCI7CisJICBleGl0IDE7CisJfQorICAgICAgZWxz ZSBpZiAoIXNhd191bmlxdWUpCisJeworCSAgcHJpbnRmIFwiVW5pcXVlIHNl Z21lbnQgbm90IHNlZW4gZm9yOiAkMlxcblwiOworCSAgZXhpdCAxOworCX0K KyAgICB9IiAkMQorfQorCiBjaGVjayBwbHVnaW5fZmluYWxfbGF5b3V0LnN0 ZG91dCAiX1ozZm9vdiIgIl9aM2JhcnYiCiBjaGVjayBwbHVnaW5fZmluYWxf bGF5b3V0LnN0ZG91dCAiX1ozYmFydiIgIl9aM2JhenYiCitjaGVja191bmlx dWVfc2VnbWVudCBwbHVnaW5fZmluYWxfbGF5b3V0LnJlYWRlbGYuc3Rkb3V0 ICIudGV4dC5wbHVnaW5fY3JlYXRlZF91bmlxdWUiCkluZGV4OiBnb2xkL3Rl c3RzdWl0ZS9wbHVnaW5fc2VjdGlvbl9vcmRlci5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nb2xkL3Rlc3RzdWl0 ZS9wbHVnaW5fc2VjdGlvbl9vcmRlci5jLHYKcmV0cmlldmluZyByZXZpc2lv biAxLjEKZGlmZiAtdSAtdSAtcCAtcjEuMSBwbHVnaW5fc2VjdGlvbl9vcmRl ci5jCi0tLSBnb2xkL3Rlc3RzdWl0ZS9wbHVnaW5fc2VjdGlvbl9vcmRlci5j CTI5IFNlcCAyMDExIDIzOjQ1OjU3IC0wMDAwCTEuMQorKysgZ29sZC90ZXN0 c3VpdGUvcGx1Z2luX3NlY3Rpb25fb3JkZXIuYwk5IEF1ZyAyMDEyIDIxOjI4 OjA0IC0wMDAwCkBAIC0zNiw2ICszNiw5IEBAIHN0YXRpYyBsZF9wbHVnaW5f Z2V0X2lucHV0X3NlY3Rpb25fbmFtZSAKIHN0YXRpYyBsZF9wbHVnaW5fZ2V0 X2lucHV0X3NlY3Rpb25fY29udGVudHMgZ2V0X2lucHV0X3NlY3Rpb25fY29u dGVudHMgPSBOVUxMOwogc3RhdGljIGxkX3BsdWdpbl91cGRhdGVfc2VjdGlv bl9vcmRlciB1cGRhdGVfc2VjdGlvbl9vcmRlciA9IE5VTEw7CiBzdGF0aWMg bGRfcGx1Z2luX2FsbG93X3NlY3Rpb25fb3JkZXJpbmcgYWxsb3dfc2VjdGlv bl9vcmRlcmluZyA9IE5VTEw7CitzdGF0aWMgbGRfcGx1Z2luX2FsbG93X3Vu aXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucyAKKyAgICBhbGxvd191bmlxdWVf c2VnbWVudF9mb3Jfc2VjdGlvbnMgPSBOVUxMOworc3RhdGljIGxkX3BsdWdp bl91bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnMgdW5pcXVlX3NlZ21lbnRf Zm9yX3NlY3Rpb25zID0gTlVMTDsKIAogZW51bSBsZF9wbHVnaW5fc3RhdHVz IG9ubG9hZChzdHJ1Y3QgbGRfcGx1Z2luX3R2ICp0dik7CiBlbnVtIGxkX3Bs dWdpbl9zdGF0dXMgY2xhaW1fZmlsZV9ob29rKGNvbnN0IHN0cnVjdCBsZF9w bHVnaW5faW5wdXRfZmlsZSAqZmlsZSwKQEAgLTUyLDExICs1NSwxMyBAQCBv bmxvYWQoc3RydWN0IGxkX3BsdWdpbl90diAqdHYpCiAgICAgICBzd2l0Y2gg KGVudHJ5LT50dl90YWcpCiAgICAgICAgIHsKICAgICAgICAgY2FzZSBMRFBU X1JFR0lTVEVSX0NMQUlNX0ZJTEVfSE9PSzoKLSAgICAgICAgICBhc3NlcnQo KCplbnRyeS0+dHZfdS50dl9yZWdpc3Rlcl9jbGFpbV9maWxlKSAoY2xhaW1f ZmlsZV9ob29rKSA9PSBMRFBTX09LKTsKKyAgICAgICAgICBhc3NlcnQoKCpl bnRyeS0+dHZfdS50dl9yZWdpc3Rlcl9jbGFpbV9maWxlKSAoY2xhaW1fZmls ZV9ob29rKQorCQkgPT0gTERQU19PSyk7CiAgICAgICAgICAgYnJlYWs7CiAJ Y2FzZSBMRFBUX1JFR0lTVEVSX0FMTF9TWU1CT0xTX1JFQURfSE9PSzoKLSAg ICAgICAgICBhc3NlcnQoKCplbnRyeS0+dHZfdS50dl9yZWdpc3Rlcl9hbGxf c3ltYm9sc19yZWFkKSAoYWxsX3N5bWJvbHNfcmVhZF9ob29rKQotCQkgID09 IExEUFNfT0spOworICAgICAgICAgIGFzc2VydCgoKmVudHJ5LT50dl91LnR2 X3JlZ2lzdGVyX2FsbF9zeW1ib2xzX3JlYWQpCisJCSAgICAgKGFsbF9zeW1i b2xzX3JlYWRfaG9vaykKKwkJID09IExEUFNfT0spOwogICAgICAgICAgIGJy ZWFrOwogICAgICAgICBjYXNlIExEUFRfR0VUX0lOUFVUX1NFQ1RJT05fQ09V TlQ6CiAgICAgICAgICAgZ2V0X2lucHV0X3NlY3Rpb25fY291bnQgPSAqZW50 cnktPnR2X3UudHZfZ2V0X2lucHV0X3NlY3Rpb25fY291bnQ7CkBAIC02OCw3 ICs3Myw4IEBAIG9ubG9hZChzdHJ1Y3QgbGRfcGx1Z2luX3R2ICp0dikKICAg ICAgICAgICBnZXRfaW5wdXRfc2VjdGlvbl9uYW1lID0gKmVudHJ5LT50dl91 LnR2X2dldF9pbnB1dF9zZWN0aW9uX25hbWU7CiAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgIGNhc2UgTERQVF9HRVRfSU5QVVRfU0VDVElPTl9DT05URU5U UzoKLSAgICAgICAgICBnZXRfaW5wdXRfc2VjdGlvbl9jb250ZW50cyA9ICpl bnRyeS0+dHZfdS50dl9nZXRfaW5wdXRfc2VjdGlvbl9jb250ZW50czsKKyAg ICAgICAgICBnZXRfaW5wdXRfc2VjdGlvbl9jb250ZW50cworCSAgICAgID0g KmVudHJ5LT50dl91LnR2X2dldF9pbnB1dF9zZWN0aW9uX2NvbnRlbnRzOwog ICAgICAgICAgIGJyZWFrOwogCWNhc2UgTERQVF9VUERBVEVfU0VDVElPTl9P UkRFUjoKIAkgIHVwZGF0ZV9zZWN0aW9uX29yZGVyID0gKmVudHJ5LT50dl91 LnR2X3VwZGF0ZV9zZWN0aW9uX29yZGVyOwpAQCAtNzYsNiArODIsMTMgQEAg b25sb2FkKHN0cnVjdCBsZF9wbHVnaW5fdHYgKnR2KQogCWNhc2UgTERQVF9B TExPV19TRUNUSU9OX09SREVSSU5HOgogCSAgYWxsb3dfc2VjdGlvbl9vcmRl cmluZyA9ICplbnRyeS0+dHZfdS50dl9hbGxvd19zZWN0aW9uX29yZGVyaW5n OwogCSAgYnJlYWs7CisJY2FzZSBMRFBUX0FMTE9XX1VOSVFVRV9TRUdNRU5U X0ZPUl9TRUNUSU9OUzoKKwkgIGFsbG93X3VuaXF1ZV9zZWdtZW50X2Zvcl9z ZWN0aW9ucworCSAgICAgID0gKmVudHJ5LT50dl91LnR2X2FsbG93X3VuaXF1 ZV9zZWdtZW50X2Zvcl9zZWN0aW9uczsKKwljYXNlIExEUFRfVU5JUVVFX1NF R01FTlRfRk9SX1NFQ1RJT05TOgorCSAgdW5pcXVlX3NlZ21lbnRfZm9yX3Nl Y3Rpb25zCisJICAgICAgPSAqZW50cnktPnR2X3UudHZfdW5pcXVlX3NlZ21l bnRfZm9yX3NlY3Rpb25zOworCSAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6 CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTg2LDcgKzk5LDkg QEAgb25sb2FkKHN0cnVjdCBsZF9wbHVnaW5fdHYgKnR2KQogICAgICAgfHwg Z2V0X2lucHV0X3NlY3Rpb25fbmFtZSA9PSBOVUxMCiAgICAgICB8fCBnZXRf aW5wdXRfc2VjdGlvbl9jb250ZW50cyA9PSBOVUxMCiAgICAgICB8fCB1cGRh dGVfc2VjdGlvbl9vcmRlciA9PSBOVUxMCi0gICAgICB8fCBhbGxvd19zZWN0 aW9uX29yZGVyaW5nID09IE5VTEwpCisgICAgICB8fCBhbGxvd19zZWN0aW9u X29yZGVyaW5nID09IE5VTEwKKyAgICAgIHx8IGFsbG93X3VuaXF1ZV9zZWdt ZW50X2Zvcl9zZWN0aW9ucyA9PSBOVUxMCisgICAgICB8fCB1bmlxdWVfc2Vn bWVudF9mb3Jfc2VjdGlvbnMgPT0gTlVMTCkKICAgICB7CiAgICAgICBmcHJp bnRmKHN0ZGVyciwgIlNvbWUgaW50ZXJmYWNlcyBhcmUgbWlzc2luZ1xuIik7 CiAgICAgICByZXR1cm4gTERQU19FUlI7CkBAIC0xMTcsNiArMTMyLDkgQEAg Y2xhaW1fZmlsZV9ob29rKGNvbnN0IHN0cnVjdCBsZF9wbHVnaW5faQogICAg IHsKICAgICAgIC8qIEluZm9ybSB0aGUgbGlua2VyIHRvIHByZXBhcmUgZm9y IHNlY3Rpb24gcmVvcmRlcmluZy4gICovCiAgICAgICAoKmFsbG93X3NlY3Rp b25fb3JkZXJpbmcpKCk7CisgICAgICAvKiBJbmZvcm0gdGhlIGxpbmtlciB0 byBwcmVwYXJlIHRvIG1hcCBzb21lIHNlY3Rpb25zIHRvIHVuaXF1ZQorCSBz ZWdtZW50cy4gICovCisgICAgICAoKmFsbG93X3VuaXF1ZV9zZWdtZW50X2Zv cl9zZWN0aW9ucykoKTsgCiAgICAgICBpc19vcmRlcmluZ19zcGVjaWZpZWQg PSAxOwogICAgIH0KIApAQCAtMTYwLDggKzE3OCwxMSBAQCBlbnVtIGxkX3Bs dWdpbl9zdGF0dXMKIGFsbF9zeW1ib2xzX3JlYWRfaG9vayh2b2lkKQogewog ICBpZiAobnVtX2VudHJpZXMgPT0gMykKLSAgICB1cGRhdGVfc2VjdGlvbl9v cmRlcihzZWN0aW9uX2xpc3QsIG51bV9lbnRyaWVzKTsKKyAgICB7IAorICAg ICAgdXBkYXRlX3NlY3Rpb25fb3JkZXIoc2VjdGlvbl9saXN0LCBudW1fZW50 cmllcyk7CisgICAgICB1bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnMgKCIu dGV4dC5wbHVnaW5fY3JlYXRlZF91bmlxdWUiLCAwLCAweDEwMDAsCisJCQkJ ICAgc2VjdGlvbl9saXN0LCBudW1fZW50cmllcyk7CisgICAgfQogCiAgIHJl dHVybiBMRFBTX09LOwogfQotCkluZGV4OiBpbmNsdWRlL3BsdWdpbi1hcGku aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9z cmMvaW5jbHVkZS9wbHVnaW4tYXBpLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMTkKZGlmZiAtdSAtdSAtcCAtcjEuMTkgcGx1Z2luLWFwaS5oCi0tLSBp bmNsdWRlL3BsdWdpbi1hcGkuaAkxMiBKdW4gMjAxMiAyMjo1MDo0NCAtMDAw MAkxLjE5CisrKyBpbmNsdWRlL3BsdWdpbi1hcGkuaAk5IEF1ZyAyMDEyIDIx OjI4OjA0IC0wMDAwCkBAIC0zMTgsNiArMzE4LDMxIEBAIHR5cGVkZWYKIGVu dW0gbGRfcGx1Z2luX3N0YXR1cwogKCpsZF9wbHVnaW5fYWxsb3dfc2VjdGlv bl9vcmRlcmluZykgKHZvaWQpOwogCisvKiBUaGUgbGlua2VyJ3MgaW50ZXJm YWNlIGZvciBzcGVjaWZ5aW5nIHRoYXQgYSBzdWJzZXQgb2Ygc2VjdGlvbnMg aXMKKyAgIHRvIGJlIG1hcHBlZCB0byBhIHVuaXF1ZSBzZWdtZW50LiAgVGhp cyBzaG91bGQgYmUgaW52b2tlZCBiZWZvcmUKKyAgIHVuaXF1ZV9zZWdtZW50 X2Zvcl9zZWN0aW9ucywgcHJlZmVyYWJseSBpbiB0aGUgY2xhaW1fZmlsZSBo YW5kbGVyLiAgKi8KKwordHlwZWRlZgorZW51bSBsZF9wbHVnaW5fc3RhdHVz CisoKmxkX3BsdWdpbl9hbGxvd191bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlv bnMpICh2b2lkKTsKKworLyogVGhlIGxpbmtlcidzIGludGVyZmFjZSBmb3Ig c3BlY2lmeWluZyB0aGF0IGEgc3BlY2lmaWMgc2V0IG9mIHNlY3Rpb25zCisg ICBtdXN0IGJlIG1hcHBlZCB0byBhIHVuaXF1ZSBzZWdtZW50LiAgRUxGIHNl Z21lbnRzIGRvIG5vdCBoYXZlIG5hbWVzCisgICBhbmQgdGhlIE5BTUUgaXMg dXNlZCBhcyBhbiBpZGVudGlmaWVyIG9ubHkuICAgRkxBR1MgaXMgdXNlZCB0 byBzcGVjaWZ5CisgICBpZiBhbnkgYWRkaXRpb25hbCBzZWdtZW50IGZsYWdz IG5lZWQgdG8gYmUgc2V0LiAgRm9yIGluc3RhbmNlLCBhCisgICBzcGVjaWZp YyBzZWdtZW50IGZsYWcgY2FuIGJlIHNldCB0byBpZGVudGlmeSB0aGlzIHNl Z21lbnQuICBVbnNldHRpbmcKKyAgIHNlZ21lbnQgZmxhZ3MgdGhhdCB3b3Vs ZCBiZSBzZXQgYnkgZGVmYXVsdCBpcyBub3QgcG9zc2libGUuICBUaGUKKyAg IHBhcmFtZXRlciBTRUdNRU5UX0FMSUdOTUVOVCB3aGVuIG5vbi16ZXJvIHdp bGwgb3ZlcnJpZGUgdGhlIGRlZmF1bHQuICAqLworCit0eXBlZGVmCitlbnVt IGxkX3BsdWdpbl9zdGF0dXMKKygqbGRfcGx1Z2luX3VuaXF1ZV9zZWdtZW50 X2Zvcl9zZWN0aW9ucykgKAorICAgIGNvbnN0IGNoYXIqIHNlZ21lbnRfbmFt ZSwKKyAgICB1aW50NjRfdCBzZWdtZW50X2ZsYWdzLAorICAgIHVpbnQ2NF90 IHNlZ21lbnRfYWxpZ25tZW50LAorICAgIGNvbnN0IHN0cnVjdCBsZF9wbHVn aW5fc2VjdGlvbiAqIHNlY3Rpb25fbGlzdCwKKyAgICB1bnNpZ25lZCBpbnQg bnVtX3NlY3Rpb25zKTsKKwogZW51bSBsZF9wbHVnaW5fbGV2ZWwKIHsKICAg TERQTF9JTkZPLApAQCAtMzU1LDcgKzM4MCw5IEBAIGVudW0gbGRfcGx1Z2lu X3RhZwogICBMRFBUX0dFVF9JTlBVVF9TRUNUSU9OX0NPTlRFTlRTLAogICBM RFBUX1VQREFURV9TRUNUSU9OX09SREVSLAogICBMRFBUX0FMTE9XX1NFQ1RJ T05fT1JERVJJTkcsCi0gIExEUFRfR0VUX1NZTUJPTFNfVjIKKyAgTERQVF9H RVRfU1lNQk9MU19WMiwKKyAgTERQVF9BTExPV19VTklRVUVfU0VHTUVOVF9G T1JfU0VDVElPTlMsCisgIExEUFRfVU5JUVVFX1NFR01FTlRfRk9SX1NFQ1RJ T05TCiB9OwogCiAvKiBUaGUgcGx1Z2luIHRyYW5zZmVyIHZlY3Rvci4gICov CkBAIC0zODUsNiArNDEyLDggQEAgc3RydWN0IGxkX3BsdWdpbl90dgogICAg IGxkX3BsdWdpbl9nZXRfaW5wdXRfc2VjdGlvbl9jb250ZW50cyB0dl9nZXRf aW5wdXRfc2VjdGlvbl9jb250ZW50czsKICAgICBsZF9wbHVnaW5fdXBkYXRl X3NlY3Rpb25fb3JkZXIgdHZfdXBkYXRlX3NlY3Rpb25fb3JkZXI7CiAgICAg bGRfcGx1Z2luX2FsbG93X3NlY3Rpb25fb3JkZXJpbmcgdHZfYWxsb3dfc2Vj dGlvbl9vcmRlcmluZzsKKyAgICBsZF9wbHVnaW5fYWxsb3dfdW5pcXVlX3Nl Z21lbnRfZm9yX3NlY3Rpb25zIHR2X2FsbG93X3VuaXF1ZV9zZWdtZW50X2Zv cl9zZWN0aW9uczsgCisgICAgbGRfcGx1Z2luX3VuaXF1ZV9zZWdtZW50X2Zv cl9zZWN0aW9ucyB0dl91bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnM7CiAg IH0gdHZfdTsKIH07CiAK --e89a8ff1c72421aa3504c6dbf656--