From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 87349 invoked by alias); 8 Sep 2015 12:37:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 84826 invoked by uid 89); 8 Sep 2015 12:37:06 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-io0-f180.google.com Received: from mail-io0-f180.google.com (HELO mail-io0-f180.google.com) (209.85.223.180) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 08 Sep 2015 12:37:05 +0000 Received: by ioiz6 with SMTP id z6so115687311ioi.2 for ; Tue, 08 Sep 2015 05:37:02 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.107.150.196 with SMTP id y187mr40279675iod.91.1441715822764; Tue, 08 Sep 2015 05:37:02 -0700 (PDT) Received: by 10.36.202.66 with HTTP; Tue, 8 Sep 2015 05:37:02 -0700 (PDT) In-Reply-To: <55EA0230.3000102@redhat.com> References: <55D62076.8020105@redhat.com> <20150901130800.GA55610@msticlxl57.ims.intel.com> <55EA0230.3000102@redhat.com> Date: Tue, 08 Sep 2015 12:43:00 -0000 Message-ID: Subject: Re: [RFC] Try vector as a new representation for vector masks From: Ilya Enkovich To: Jeff Law Cc: Richard Biener , GCC Patches Content-Type: multipart/mixed; boundary=001a1140dbb47bddca051f3b9f06 X-IsSubscribed: yes X-SW-Source: 2015-09/txt/msg00499.txt.bz2 --001a1140dbb47bddca051f3b9f06 Content-Type: text/plain; charset=UTF-8 Content-length: 5513 2015-09-04 23:42 GMT+03:00 Jeff Law : > On 09/01/2015 07:08 AM, Ilya Enkovich wrote: >> >> On 27 Aug 09:55, Richard Biener wrote: >>> >>> I suggest you try modifying those parts first according to this >>> scheme that will most likely uncover issues we missed. >>> >>> Thanks, Richard. >>> >> >> I tried to implement this scheme and apply it for MASK_LOAD and >> MASK_STORE. There were no major issues (for now). > > So do we have enough confidence in this representation that we want to go > ahead and commit to it? I think new representation fits nice mostly. There are some places where I have to make some exceptions for vector of bools to make it work. This is mostly to avoid target modifications. I'd like to avoid necessity to change all targets currently supporting vec_cond. It makes me add some special handling of vec in GIMPLE, e.g. I add a special code in vect_init_vector to build vec invariants with proper casting to int. Otherwise I'd need to do it on a target side. I made several fixes and current patch (still allowing integer vector result for vector comparison and applying bool patterns) passes bootstrap and regression testing on x86_64. Now I'll try to fully switch to vec and see how it goes. Thanks, Ilya > >> >> I had to introduce significant number of new patterns in i386 target >> to support new optabs. The reason was vector compare was never >> expanded separately and always was a part of a vec_cond expansion. > > One could argue we should have fixed this already, so I don't see the new > patterns as a bad thing, but instead they're addressing a long term > mis-design. > >> >> >> For now I still don't disable bool patterns, thus new masks apply to >> masked loads and stores only. Patch is also not tested and tried on >> several small tests only. Could you please look at what I currently >> have and say if it's in sync with your view on vector masking? > > I'm going to let Richi run with this for the most part -- but I will chime > in with a thank you for being willing to bounce this around a bit while we > figure out the representational issues. > > > jeff gcc/ 2015-09-08 Ilya Enkovich * config/i386/i386-protos.h (ix86_expand_mask_vec_cmp): New. (ix86_expand_int_vec_cmp): New. (ix86_expand_fp_vec_cmp): New. * config/i386/i386.c (ix86_expand_sse_cmp): Allow NULL for op_true and op_false. (ix86_int_cmp_code_to_pcmp_immediate): New. (ix86_fp_cmp_code_to_pcmp_immediate): New. (ix86_cmp_code_to_pcmp_immediate): New. (ix86_expand_mask_vec_cmp): New. (ix86_expand_fp_vec_cmp): New. (ix86_expand_int_sse_cmp): New. (ix86_expand_int_vcond): Use ix86_expand_int_sse_cmp. (ix86_expand_int_vec_cmp): New. (ix86_get_mask_mode): New. (TARGET_VECTORIZE_GET_MASK_MODE): New. * config/i386/sse.md (avx512fmaskmodelower): New. (vec_cmp): New. (vec_cmp): New. (vec_cmpv2div2di): New. (vec_cmpu): New. (vec_cmpu): New. (vec_cmpuv2div2di): New. (maskload): Rename to ... (maskload): ... this. (maskstore): Rename to ... (maskstore): ... this. (maskload): New. (maskstore): New. * doc/tm.texi: Regenerated. * doc/tm.texi.in (TARGET_VECTORIZE_GET_MASK_MODE): New. * expr.c (do_store_flag): Use expand_vec_cmp_expr for mask results. * internal-fn.c (expand_MASK_LOAD): Adjust to optab changes. (expand_MASK_STORE): Likewise. * optabs.c (vector_compare_rtx): Add OPNO arg. (expand_vec_cond_expr): Adjust to vector_compare_rtx change. (get_vec_cmp_icode): New. (expand_vec_cmp_expr_p): New. (expand_vec_cmp_expr): New. (can_vec_mask_load_store_p): Add MASK_MODE arg. * optabs.def (vec_cmp_optab): New. (vec_cmpu_optab): New. (maskload_optab): Transform into convert optab. (maskstore_optab): Likewise. * optabs.h (expand_vec_cmp_expr_p): New. (expand_vec_cmp_expr): New. (can_vec_mask_load_store_p): Add MASK_MODE arg. * target.def (get_mask_mode): New. * targhooks.c (default_vector_alignment): Use mode alignment for vector masks. (default_get_mask_mode): New. * targhooks.h (default_get_mask_mode): New. * tree-cfg.c (verify_gimple_comparison): Support vector mask. * tree-if-conv.c (ifcvt_can_use_mask_load_store): Adjust to can_vec_mask_load_store_p signature change. (predicate_mem_writes): Use boolean mask. * tree-vect-data-refs.c (vect_get_new_vect_var): Support vect_mask_var. (vect_create_destination_var): Likewise. * tree-vect-generic.c (expand_vector_comparison): Use expand_vec_cmp_expr_p for comparison availability. (expand_vector_operations_1): Ignore mask statements with scalar mode. * tree-vect-loop.c (vect_determine_vectorization_factor): Ignore mask operations for VF. Add mask type computation. * tree-vect-stmts.c (vect_init_vector): Support mask invariants. (vect_get_vec_def_for_operand): Support mask constant. (vectorizable_mask_load_store): Adjust to can_vec_mask_load_store_p signature change. (vectorizable_comparison): New. (vect_analyze_stmt): Add vectorizable_comparison. (vect_transform_stmt): Likewise. (get_mask_type_for_scalar_type): New. * tree-vectorizer.h (enum stmt_vec_info_type): Add vect_mask_var (enum stmt_vec_info_type): Add comparison_vec_info_type. (get_mask_type_for_scalar_type): New. * tree.c (build_truth_vector_type): New. (truth_type_for): Use build_truth_vector_type for vectors. * tree.h (build_truth_vector_type): New. --001a1140dbb47bddca051f3b9f06 Content-Type: application/octet-stream; name="avx512-vec-bool.patch" Content-Disposition: attachment; filename="avx512-vec-bool.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iebcbhdl0 Content-length: 86722 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LXByb3Rvcy5oIGIv Z2NjL2NvbmZpZy9pMzg2L2kzODYtcHJvdG9zLmgKaW5kZXggNmExN2VmNC4u ZTIyYWE1NyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYtcHJv dG9zLmgKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYtcHJvdG9zLmgKQEAg LTEyOSw2ICsxMjksOSBAQCBleHRlcm4gYm9vbCBpeDg2X2V4cGFuZF9mcF92 Y29uZCAocnR4W10pOwogZXh0ZXJuIGJvb2wgaXg4Nl9leHBhbmRfaW50X3Zj b25kIChydHhbXSk7CiBleHRlcm4gdm9pZCBpeDg2X2V4cGFuZF92ZWNfcGVy bSAocnR4W10pOwogZXh0ZXJuIGJvb2wgaXg4Nl9leHBhbmRfdmVjX3Blcm1f Y29uc3QgKHJ0eFtdKTsKK2V4dGVybiBib29sIGl4ODZfZXhwYW5kX21hc2tf dmVjX2NtcCAocnR4W10pOworZXh0ZXJuIGJvb2wgaXg4Nl9leHBhbmRfaW50 X3ZlY19jbXAgKHJ0eFtdKTsKK2V4dGVybiBib29sIGl4ODZfZXhwYW5kX2Zw X3ZlY19jbXAgKHJ0eFtdKTsKIGV4dGVybiB2b2lkIGl4ODZfZXhwYW5kX3Nz ZV91bnBhY2sgKHJ0eCwgcnR4LCBib29sLCBib29sKTsKIGV4dGVybiBib29s IGl4ODZfZXhwYW5kX2ludF9hZGRjYyAocnR4W10pOwogZXh0ZXJuIHJ0eCBp eDg2X2V4cGFuZF9jYWxsIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgYm9v bCk7CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvaTM4Ni5jIGIvZ2Nj L2NvbmZpZy9pMzg2L2kzODYuYwppbmRleCAwNzA2MDVmLi5lNDRjZGI1IDEw MDY0NAotLS0gYS9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCisrKyBiL2djYy9j b25maWcvaTM4Ni9pMzg2LmMKQEAgLTIxNDQwLDggKzIxNDQwLDggQEAgaXg4 Nl9leHBhbmRfc3NlX2NtcCAocnR4IGRlc3QsIGVudW0gcnR4X2NvZGUgY29k ZSwgcnR4IGNtcF9vcDAsIHJ0eCBjbXBfb3AxLAogICAgIGNtcF9vcDEgPSBm b3JjZV9yZWcgKGNtcF9vcHNfbW9kZSwgY21wX29wMSk7CiAKICAgaWYgKG9w dGltaXplCi0gICAgICB8fCByZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCAoZGVz dCwgb3BfdHJ1ZSkKLSAgICAgIHx8IHJlZ19vdmVybGFwX21lbnRpb25lZF9w IChkZXN0LCBvcF9mYWxzZSkpCisgICAgICB8fCAob3BfdHJ1ZSAmJiByZWdf b3ZlcmxhcF9tZW50aW9uZWRfcCAoZGVzdCwgb3BfdHJ1ZSkpCisgICAgICB8 fCAob3BfZmFsc2UgJiYgcmVnX292ZXJsYXBfbWVudGlvbmVkX3AgKGRlc3Qs IG9wX2ZhbHNlKSkpCiAgICAgZGVzdCA9IGdlbl9yZWdfcnR4IChtYXNrY21w ID8gY21wX21vZGUgOiBtb2RlKTsKIAogICAvKiBDb21wYXJlIHBhdHRlcm5z IGZvciBpbnQgbW9kZXMgYXJlIHVuc3BlYyBpbiBBVlg1MTJGIG9ubHkuICAq LwpAQCAtMjE3MTMsMzQgKzIxNzEzLDEyNyBAQCBpeDg2X2V4cGFuZF9mcF9t b3ZjYyAocnR4IG9wZXJhbmRzW10pCiAgIHJldHVybiB0cnVlOwogfQogCi0v KiBFeHBhbmQgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IgY29uZGl0aW9uYWwg bW92ZTsgYSB2Y29uZCBvcGVyYXRpb24KLSAgIHJhdGhlciB0aGFuIGEgbW92 Y2Mgb3BlcmF0aW9uLiAgKi8KKy8qIEhlbHBlciBmb3IgaXg4Nl9jbXBfY29k ZV90b19wY21wX2ltbWVkaWF0ZSBmb3IgaW50IG1vZGVzLiAgKi8KKworc3Rh dGljIGludAoraXg4Nl9pbnRfY21wX2NvZGVfdG9fcGNtcF9pbW1lZGlhdGUg KGVudW0gcnR4X2NvZGUgY29kZSkKK3sKKyAgc3dpdGNoIChjb2RlKQorICAg IHsKKyAgICBjYXNlIEVROgorICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBM VDoKKyAgICBjYXNlIExUVToKKyAgICAgIHJldHVybiAxOworICAgIGNhc2Ug TEU6CisgICAgY2FzZSBMRVU6CisgICAgICByZXR1cm4gMjsKKyAgICBjYXNl IE5FOgorICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBHRToKKyAgICBjYXNl IEdFVToKKyAgICAgIHJldHVybiA1OworICAgIGNhc2UgR1Q6CisgICAgY2Fz ZSBHVFU6CisgICAgICByZXR1cm4gNjsKKyAgICBkZWZhdWx0OgorICAgICAg Z2NjX3VucmVhY2hhYmxlICgpOworICAgIH0KK30KKworLyogSGVscGVyIGZv ciBpeDg2X2NtcF9jb2RlX3RvX3BjbXBfaW1tZWRpYXRlIGZvciBmcCBtb2Rl cy4gICovCisKK3N0YXRpYyBpbnQKK2l4ODZfZnBfY21wX2NvZGVfdG9fcGNt cF9pbW1lZGlhdGUgKGVudW0gcnR4X2NvZGUgY29kZSkKK3sKKyAgc3dpdGNo IChjb2RlKQorICAgIHsKKyAgICBjYXNlIEVROgorICAgICAgcmV0dXJuIDB4 MDg7CisgICAgY2FzZSBORToKKyAgICAgIHJldHVybiAweDA0OworICAgIGNh c2UgR1Q6CisgICAgICByZXR1cm4gMHgxNjsKKyAgICBjYXNlIExFOgorICAg ICAgcmV0dXJuIDB4MWE7CisgICAgY2FzZSBHRToKKyAgICAgIHJldHVybiAw eDE1OworICAgIGNhc2UgTFQ6CisgICAgICByZXR1cm4gMHgxOTsKKyAgICBk ZWZhdWx0OgorICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOworICAgIH0KK30K KworLyogUmV0dXJuIGltbWVkaWF0ZSB2YWx1ZSB0byBiZSB1c2VkIGluIFVO U1BFQ19QQ01QCisgICBmb3IgY29tcGFyaXNvbiBDT0RFIGluIE1PREUuICAq LworCitzdGF0aWMgaW50CitpeDg2X2NtcF9jb2RlX3RvX3BjbXBfaW1tZWRp YXRlIChlbnVtIHJ0eF9jb2RlIGNvZGUsIG1hY2hpbmVfbW9kZSBtb2RlKQor eworICBpZiAoRkxPQVRfTU9ERV9QIChtb2RlKSkKKyAgICByZXR1cm4gaXg4 Nl9mcF9jbXBfY29kZV90b19wY21wX2ltbWVkaWF0ZSAoY29kZSk7CisgIHJl dHVybiBpeDg2X2ludF9jbXBfY29kZV90b19wY21wX2ltbWVkaWF0ZSAoY29k ZSk7Cit9CisKKy8qIEV4cGFuZCBBVlgtNTEyIHZlY3RvciBjb21wYXJpc29u LiAgKi8KIAogYm9vbAotaXg4Nl9leHBhbmRfZnBfdmNvbmQgKHJ0eCBvcGVy YW5kc1tdKQoraXg4Nl9leHBhbmRfbWFza192ZWNfY21wIChydHggb3BlcmFu ZHNbXSkKIHsKLSAgZW51bSBydHhfY29kZSBjb2RlID0gR0VUX0NPREUgKG9w ZXJhbmRzWzNdKTsKKyAgbWFjaGluZV9tb2RlIG1hc2tfbW9kZSA9IEdFVF9N T0RFIChvcGVyYW5kc1swXSk7CisgIG1hY2hpbmVfbW9kZSBjbXBfbW9kZSA9 IEdFVF9NT0RFIChvcGVyYW5kc1syXSk7CisgIGVudW0gcnR4X2NvZGUgY29k ZSA9IEdFVF9DT0RFIChvcGVyYW5kc1sxXSk7CisgIHJ0eCBpbW0gPSBHRU5f SU5UIChpeDg2X2NtcF9jb2RlX3RvX3BjbXBfaW1tZWRpYXRlIChjb2RlLCBj bXBfbW9kZSkpOworICBpbnQgdW5zcGVjX2NvZGU7CisgIHJ0eCB1bnNwZWM7 CisKKyAgc3dpdGNoIChjb2RlKQorICAgIHsKKyAgICBjYXNlIExFVToKKyAg ICBjYXNlIEdUVToKKyAgICBjYXNlIEdFVToKKyAgICBjYXNlIExUVToKKyAg ICAgIHVuc3BlY19jb2RlID0gVU5TUEVDX1VOU0lHTkVEX1BDTVA7CisgICAg ZGVmYXVsdDoKKyAgICAgIHVuc3BlY19jb2RlID0gVU5TUEVDX1BDTVA7Cisg ICAgfQorCisgIHVuc3BlYyA9IGdlbl9ydHhfVU5TUEVDIChtYXNrX21vZGUs IGdlbl9ydHZlYyAoMywgb3BlcmFuZHNbMl0sCisJCQkJCQkgb3BlcmFuZHNb M10sIGltbSksCisJCQkgICB1bnNwZWNfY29kZSk7CisgIGVtaXRfaW5zbiAo Z2VuX3J0eF9TRVQgKG9wZXJhbmRzWzBdLCB1bnNwZWMpKTsKKworICByZXR1 cm4gdHJ1ZTsKK30KKworLyogRXhwYW5kIGZwIHZlY3RvciBjb21wYXJpc29u LiAgKi8KKworYm9vbAoraXg4Nl9leHBhbmRfZnBfdmVjX2NtcCAocnR4IG9w ZXJhbmRzW10pCit7CisgIGVudW0gcnR4X2NvZGUgY29kZSA9IEdFVF9DT0RF IChvcGVyYW5kc1sxXSk7CiAgIHJ0eCBjbXA7CiAKICAgY29kZSA9IGl4ODZf cHJlcGFyZV9zc2VfZnBfY29tcGFyZV9hcmdzIChvcGVyYW5kc1swXSwgY29k ZSwKLQkJCQkJICAgJm9wZXJhbmRzWzRdLCAmb3BlcmFuZHNbNV0pOworCQkJ CQkgICAmb3BlcmFuZHNbMl0sICZvcGVyYW5kc1szXSk7CiAgIGlmIChjb2Rl ID09IFVOS05PV04pCiAgICAgewogICAgICAgcnR4IHRlbXA7Ci0gICAgICBz d2l0Y2ggKEdFVF9DT0RFIChvcGVyYW5kc1szXSkpCisgICAgICBzd2l0Y2gg KEdFVF9DT0RFIChvcGVyYW5kc1sxXSkpCiAJewogCWNhc2UgTFRHVDoKLQkg IHRlbXAgPSBpeDg2X2V4cGFuZF9zc2VfY21wIChvcGVyYW5kc1swXSwgT1JE RVJFRCwgb3BlcmFuZHNbNF0sCi0JCQkJICAgICAgb3BlcmFuZHNbNV0sIG9w ZXJhbmRzWzBdLCBvcGVyYW5kc1swXSk7Ci0JICBjbXAgPSBpeDg2X2V4cGFu ZF9zc2VfY21wIChvcGVyYW5kc1swXSwgTkUsIG9wZXJhbmRzWzRdLAotCQkJ CSAgICAgb3BlcmFuZHNbNV0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSk7 CisJICB0ZW1wID0gaXg4Nl9leHBhbmRfc3NlX2NtcCAob3BlcmFuZHNbMF0s IE9SREVSRUQsIG9wZXJhbmRzWzJdLAorCQkJCSAgICAgIG9wZXJhbmRzWzNd LCBOVUxMLCBOVUxMKTsKKwkgIGNtcCA9IGl4ODZfZXhwYW5kX3NzZV9jbXAg KG9wZXJhbmRzWzBdLCBORSwgb3BlcmFuZHNbMl0sCisJCQkJICAgICBvcGVy YW5kc1szXSwgTlVMTCwgTlVMTCk7CiAJICBjb2RlID0gQU5EOwogCSAgYnJl YWs7CiAJY2FzZSBVTkVROgotCSAgdGVtcCA9IGl4ODZfZXhwYW5kX3NzZV9j bXAgKG9wZXJhbmRzWzBdLCBVTk9SREVSRUQsIG9wZXJhbmRzWzRdLAotCQkJ CSAgICAgIG9wZXJhbmRzWzVdLCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMF0p OwotCSAgY21wID0gaXg4Nl9leHBhbmRfc3NlX2NtcCAob3BlcmFuZHNbMF0s IEVRLCBvcGVyYW5kc1s0XSwKLQkJCQkgICAgIG9wZXJhbmRzWzVdLCBvcGVy YW5kc1sxXSwgb3BlcmFuZHNbMl0pOworCSAgdGVtcCA9IGl4ODZfZXhwYW5k X3NzZV9jbXAgKG9wZXJhbmRzWzBdLCBVTk9SREVSRUQsIG9wZXJhbmRzWzJd LAorCQkJCSAgICAgIG9wZXJhbmRzWzNdLCBOVUxMLCBOVUxMKTsKKwkgIGNt cCA9IGl4ODZfZXhwYW5kX3NzZV9jbXAgKG9wZXJhbmRzWzBdLCBFUSwgb3Bl cmFuZHNbMl0sCisJCQkJICAgICBvcGVyYW5kc1szXSwgTlVMTCwgTlVMTCk7 CiAJICBjb2RlID0gSU9SOwogCSAgYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTIx NzQ4LDcyICsyMTg0MSwyNiBAQCBpeDg2X2V4cGFuZF9mcF92Y29uZCAocnR4 IG9wZXJhbmRzW10pCiAJfQogICAgICAgY21wID0gZXhwYW5kX3NpbXBsZV9i aW5vcCAoR0VUX01PREUgKGNtcCksIGNvZGUsIHRlbXAsIGNtcCwgY21wLCAx LAogCQkJCSBPUFRBQl9ESVJFQ1QpOwotICAgICAgaXg4Nl9leHBhbmRfc3Nl X21vdmNjIChvcGVyYW5kc1swXSwgY21wLCBvcGVyYW5kc1sxXSwgb3BlcmFu ZHNbMl0pOwotICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICBlbHNlCisg ICAgY21wID0gaXg4Nl9leHBhbmRfc3NlX2NtcCAob3BlcmFuZHNbMF0sIGNv ZGUsIG9wZXJhbmRzWzJdLCBvcGVyYW5kc1szXSwKKwkJCSAgICAgICBvcGVy YW5kc1sxXSwgb3BlcmFuZHNbMl0pOwogCi0gIGlmIChpeDg2X2V4cGFuZF9z c2VfZnBfbWlubWF4IChvcGVyYW5kc1swXSwgY29kZSwgb3BlcmFuZHNbNF0s Ci0JCQkJIG9wZXJhbmRzWzVdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0p KQotICAgIHJldHVybiB0cnVlOworICBpZiAob3BlcmFuZHNbMF0gIT0gY21w KQorICAgIGVtaXRfbW92ZV9pbnNuIChvcGVyYW5kc1swXSwgY21wKTsKIAot ICBjbXAgPSBpeDg2X2V4cGFuZF9zc2VfY21wIChvcGVyYW5kc1swXSwgY29k ZSwgb3BlcmFuZHNbNF0sIG9wZXJhbmRzWzVdLAotCQkJICAgICBvcGVyYW5k c1sxXSwgb3BlcmFuZHNbMl0pOwotICBpeDg2X2V4cGFuZF9zc2VfbW92Y2Mg KG9wZXJhbmRzWzBdLCBjbXAsIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSk7 CiAgIHJldHVybiB0cnVlOwogfQogCi0vKiBFeHBhbmQgYSBzaWduZWQvdW5z aWduZWQgaW50ZWdyYWwgdmVjdG9yIGNvbmRpdGlvbmFsIG1vdmUuICAqLwot Ci1ib29sCi1peDg2X2V4cGFuZF9pbnRfdmNvbmQgKHJ0eCBvcGVyYW5kc1td KQorc3RhdGljIHJ0eAoraXg4Nl9leHBhbmRfaW50X3NzZV9jbXAgKHJ0eCBk ZXN0LCBlbnVtIHJ0eF9jb2RlIGNvZGUsIHJ0eCBjb3AwLCBydHggY29wMSwK KwkJCSBydHggb3BfdHJ1ZSwgcnR4IG9wX2ZhbHNlLCBib29sICpuZWdhdGUp CiB7Ci0gIG1hY2hpbmVfbW9kZSBkYXRhX21vZGUgPSBHRVRfTU9ERSAob3Bl cmFuZHNbMF0pOwotICBtYWNoaW5lX21vZGUgbW9kZSA9IEdFVF9NT0RFIChv cGVyYW5kc1s0XSk7Ci0gIGVudW0gcnR4X2NvZGUgY29kZSA9IEdFVF9DT0RF IChvcGVyYW5kc1szXSk7Ci0gIGJvb2wgbmVnYXRlID0gZmFsc2U7Ci0gIHJ0 eCB4LCBjb3AwLCBjb3AxOwotCi0gIGNvcDAgPSBvcGVyYW5kc1s0XTsKLSAg Y29wMSA9IG9wZXJhbmRzWzVdOworICBtYWNoaW5lX21vZGUgZGF0YV9tb2Rl ID0gR0VUX01PREUgKGRlc3QpOworICBtYWNoaW5lX21vZGUgbW9kZSA9IEdF VF9NT0RFIChjb3AwKTsKKyAgcnR4IHg7CiAKLSAgLyogVHJ5IHRvIG9wdGlt aXplIHggPCAwID8gLTEgOiAwIGludG8gKHNpZ25lZCkgeCA+PiAzMQotICAg ICBhbmQgeCA8IDAgPyAxIDogMCBpbnRvICh1bnNpZ25lZCkgeCA+PiAzMS4g ICovCi0gIGlmICgoY29kZSA9PSBMVCB8fCBjb2RlID09IEdFKQotICAgICAg JiYgZGF0YV9tb2RlID09IG1vZGUKLSAgICAgICYmIGNvcDEgPT0gQ09OU1Qw X1JUWCAobW9kZSkKLSAgICAgICYmIG9wZXJhbmRzWzEgKyAoY29kZSA9PSBM VCldID09IENPTlNUMF9SVFggKGRhdGFfbW9kZSkKLSAgICAgICYmIEdFVF9N T0RFX1VOSVRfU0laRSAoZGF0YV9tb2RlKSA+IDEKLSAgICAgICYmIEdFVF9N T0RFX1VOSVRfU0laRSAoZGF0YV9tb2RlKSA8PSA4Ci0gICAgICAmJiAoR0VU X01PREVfU0laRSAoZGF0YV9tb2RlKSA9PSAxNgotCSAgfHwgKFRBUkdFVF9B VlgyICYmIEdFVF9NT0RFX1NJWkUgKGRhdGFfbW9kZSkgPT0gMzIpKSkKLSAg ICB7Ci0gICAgICBydHggbmVnb3AgPSBvcGVyYW5kc1syIC0gKGNvZGUgPT0g TFQpXTsKLSAgICAgIGludCBzaGlmdCA9IEdFVF9NT0RFX1VOSVRfQklUU0la RSAoZGF0YV9tb2RlKSAtIDE7Ci0gICAgICBpZiAobmVnb3AgPT0gQ09OU1Qx X1JUWCAoZGF0YV9tb2RlKSkKLQl7Ci0JICBydHggcmVzID0gZXhwYW5kX3Np bXBsZV9iaW5vcCAobW9kZSwgTFNISUZUUlQsIGNvcDAsIEdFTl9JTlQgKHNo aWZ0KSwKLQkJCQkJIG9wZXJhbmRzWzBdLCAxLCBPUFRBQl9ESVJFQ1QpOwot CSAgaWYgKHJlcyAhPSBvcGVyYW5kc1swXSkKLQkgICAgZW1pdF9tb3ZlX2lu c24gKG9wZXJhbmRzWzBdLCByZXMpOwotCSAgcmV0dXJuIHRydWU7Ci0JfQot ICAgICAgZWxzZSBpZiAoR0VUX01PREVfSU5ORVIgKGRhdGFfbW9kZSkgIT0g REltb2RlCi0JICAgICAgICYmIHZlY3Rvcl9hbGxfb25lc19vcGVyYW5kIChu ZWdvcCwgZGF0YV9tb2RlKSkKLQl7Ci0JICBydHggcmVzID0gZXhwYW5kX3Np bXBsZV9iaW5vcCAobW9kZSwgQVNISUZUUlQsIGNvcDAsIEdFTl9JTlQgKHNo aWZ0KSwKLQkJCQkJIG9wZXJhbmRzWzBdLCAwLCBPUFRBQl9ESVJFQ1QpOwot CSAgaWYgKHJlcyAhPSBvcGVyYW5kc1swXSkKLQkgICAgZW1pdF9tb3ZlX2lu c24gKG9wZXJhbmRzWzBdLCByZXMpOwotCSAgcmV0dXJuIHRydWU7Ci0JfQot ICAgIH0KLQotICBpZiAoIW5vbmltbWVkaWF0ZV9vcGVyYW5kIChjb3AxLCBt b2RlKSkKLSAgICBjb3AxID0gZm9yY2VfcmVnIChtb2RlLCBjb3AxKTsKLSAg aWYgKCFnZW5lcmFsX29wZXJhbmQgKG9wZXJhbmRzWzFdLCBkYXRhX21vZGUp KQotICAgIG9wZXJhbmRzWzFdID0gZm9yY2VfcmVnIChkYXRhX21vZGUsIG9w ZXJhbmRzWzFdKTsKLSAgaWYgKCFnZW5lcmFsX29wZXJhbmQgKG9wZXJhbmRz WzJdLCBkYXRhX21vZGUpKQotICAgIG9wZXJhbmRzWzJdID0gZm9yY2VfcmVn IChkYXRhX21vZGUsIG9wZXJhbmRzWzJdKTsKKyAgKm5lZ2F0ZSA9IGZhbHNl OwogCiAgIC8qIFhPUCBzdXBwb3J0cyBhbGwgb2YgdGhlIGNvbXBhcmlzb25z IG9uIGFsbCAxMjgtYml0IHZlY3RvciBpbnQgdHlwZXMuICAqLwogICBpZiAo VEFSR0VUX1hPUApAQCAtMjE4MzQsMTMgKzIxODgxLDEzIEBAIGl4ODZfZXhw YW5kX2ludF92Y29uZCAocnR4IG9wZXJhbmRzW10pCiAJY2FzZSBMRToKIAlj YXNlIExFVToKIAkgIGNvZGUgPSByZXZlcnNlX2NvbmRpdGlvbiAoY29kZSk7 Ci0JICBuZWdhdGUgPSB0cnVlOworCSAgKm5lZ2F0ZSA9IHRydWU7CiAJICBi cmVhazsKIAogCWNhc2UgR0U6CiAJY2FzZSBHRVU6CiAJICBjb2RlID0gcmV2 ZXJzZV9jb25kaXRpb24gKGNvZGUpOwotCSAgbmVnYXRlID0gdHJ1ZTsKKwkg ICpuZWdhdGUgPSB0cnVlOwogCSAgLyogRkFMTFRIUlUgKi8KIAogCWNhc2Ug TFQ6CkBAIC0yMTg2MSwxNCArMjE5MDgsMTQgQEAgaXg4Nl9leHBhbmRfaW50 X3Zjb25kIChydHggb3BlcmFuZHNbXSkKIAkgICAgY2FzZSBFUToKIAkgICAg ICAvKiBTU0U0LjEgc3VwcG9ydHMgRVEuICAqLwogCSAgICAgIGlmICghVEFS R0VUX1NTRTRfMSkKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsK IAkgICAgICBicmVhazsKIAogCSAgICBjYXNlIEdUOgogCSAgICBjYXNlIEdU VToKIAkgICAgICAvKiBTU0U0LjIgc3VwcG9ydHMgR1QvR1RVLiAgKi8KIAkg ICAgICBpZiAoIVRBUkdFVF9TU0U0XzIpCi0JCXJldHVybiBmYWxzZTsKKwkJ cmV0dXJuIE5VTEw7CiAJICAgICAgYnJlYWs7CiAKIAkgICAgZGVmYXVsdDoK QEAgLTIxOTI5LDEyICsyMTk3NiwxMyBAQCBpeDg2X2V4cGFuZF9pbnRfdmNv bmQgKHJ0eCBvcGVyYW5kc1tdKQogCSAgICBjYXNlIFY4SEltb2RlOgogCSAg ICAgIC8qIFBlcmZvcm0gYSBwYXJhbGxlbCB1bnNpZ25lZCBzYXR1cmF0aW5n IHN1YnRyYWN0aW9uLiAgKi8KIAkgICAgICB4ID0gZ2VuX3JlZ19ydHggKG1v ZGUpOwotCSAgICAgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKHgsIGdlbl9y dHhfVVNfTUlOVVMgKG1vZGUsIGNvcDAsIGNvcDEpKSk7CisJICAgICAgZW1p dF9pbnNuIChnZW5fcnR4X1NFVCAoeCwgZ2VuX3J0eF9VU19NSU5VUyAobW9k ZSwgY29wMCwKKwkJCQkJCQkgICBjb3AxKSkpOwogCiAJICAgICAgY29wMCA9 IHg7CiAJICAgICAgY29wMSA9IENPTlNUMF9SVFggKG1vZGUpOwogCSAgICAg IGNvZGUgPSBFUTsKLQkgICAgICBuZWdhdGUgPSAhbmVnYXRlOworCSAgICAg ICpuZWdhdGUgPSAhKm5lZ2F0ZTsKIAkgICAgICBicmVhazsKIAogCSAgICBk ZWZhdWx0OgpAQCAtMjE5NDMsMjIgKzIxOTkxLDE2MiBAQCBpeDg2X2V4cGFu ZF9pbnRfdmNvbmQgKHJ0eCBvcGVyYW5kc1tdKQogCX0KICAgICB9CiAKKyAg aWYgKCpuZWdhdGUpCisgICAgc3RkOjpzd2FwIChvcF90cnVlLCBvcF9mYWxz ZSk7CisKICAgLyogQWxsb3cgdGhlIGNvbXBhcmlzb24gdG8gYmUgZG9uZSBp biBvbmUgbW9kZSwgYnV0IHRoZSBtb3ZjYyB0bwogICAgICBoYXBwZW4gaW4g YW5vdGhlciBtb2RlLiAgKi8KICAgaWYgKGRhdGFfbW9kZSA9PSBtb2RlKQog ICAgIHsKLSAgICAgIHggPSBpeDg2X2V4cGFuZF9zc2VfY21wIChvcGVyYW5k c1swXSwgY29kZSwgY29wMCwgY29wMSwKLQkJCSAgICAgICBvcGVyYW5kc1sx K25lZ2F0ZV0sIG9wZXJhbmRzWzItbmVnYXRlXSk7CisgICAgICB4ID0gaXg4 Nl9leHBhbmRfc3NlX2NtcCAoZGVzdCwgY29kZSwgY29wMCwgY29wMSwKKwkJ CSAgICAgICBvcF90cnVlLCBvcF9mYWxzZSk7CiAgICAgfQogICBlbHNlCiAg ICAgewogICAgICAgZ2NjX2Fzc2VydCAoR0VUX01PREVfU0laRSAoZGF0YV9t b2RlKSA9PSBHRVRfTU9ERV9TSVpFIChtb2RlKSk7CiAgICAgICB4ID0gaXg4 Nl9leHBhbmRfc3NlX2NtcCAoZ2VuX3JlZ19ydHggKG1vZGUpLCBjb2RlLCBj b3AwLCBjb3AxLAotCQkJICAgICAgIG9wZXJhbmRzWzErbmVnYXRlXSwgb3Bl cmFuZHNbMi1uZWdhdGVdKTsKKwkJCSAgICAgICBvcF90cnVlLCBvcF9mYWxz ZSk7CiAgICAgICBpZiAoR0VUX01PREUgKHgpID09IG1vZGUpCiAJeCA9IGdl bl9sb3dwYXJ0IChkYXRhX21vZGUsIHgpOwogICAgIH0KIAorICByZXR1cm4g eDsKK30KKworLyogRXhwYW5kIGludGVnZXIgdmVjdG9yIGNvbXBhcmlzb24u ICAqLworCitib29sCitpeDg2X2V4cGFuZF9pbnRfdmVjX2NtcCAocnR4IG9w ZXJhbmRzW10pCit7CisgIHJ0eF9jb2RlIGNvZGUgPSBHRVRfQ09ERSAob3Bl cmFuZHNbMV0pOworICBib29sIG5lZ2F0ZSA9IGZhbHNlOworICBydHggY21w ID0gaXg4Nl9leHBhbmRfaW50X3NzZV9jbXAgKG9wZXJhbmRzWzBdLCBjb2Rl LCBvcGVyYW5kc1syXSwKKwkJCQkgICAgIG9wZXJhbmRzWzNdLCBOVUxMLCBO VUxMLCAmbmVnYXRlKTsKKworICBpZiAoIWNtcCkKKyAgICByZXR1cm4gZmFs c2U7CisKKyAgaWYgKG5lZ2F0ZSkKKyAgICBjbXAgPSBpeDg2X2V4cGFuZF9p bnRfc3NlX2NtcCAob3BlcmFuZHNbMF0sIEVRLCBjbXAsCisJCQkJICAgQ09O U1QwX1JUWCAoR0VUX01PREUgKGNtcCkpLAorCQkJCSAgIE5VTEwsIE5VTEws ICZuZWdhdGUpOworCisgIGdjY19hc3NlcnQgKCFuZWdhdGUpOworCisgIGlm IChvcGVyYW5kc1swXSAhPSBjbXApCisgICAgZW1pdF9tb3ZlX2luc24gKG9w ZXJhbmRzWzBdLCBjbXApOworCisgIHJldHVybiB0cnVlOworfQorCisvKiBF eHBhbmQgYSBmbG9hdGluZy1wb2ludCB2ZWN0b3IgY29uZGl0aW9uYWwgbW92 ZTsgYSB2Y29uZCBvcGVyYXRpb24KKyAgIHJhdGhlciB0aGFuIGEgbW92Y2Mg b3BlcmF0aW9uLiAgKi8KKworYm9vbAoraXg4Nl9leHBhbmRfZnBfdmNvbmQg KHJ0eCBvcGVyYW5kc1tdKQoreworICBlbnVtIHJ0eF9jb2RlIGNvZGUgPSBH RVRfQ09ERSAob3BlcmFuZHNbM10pOworICBydHggY21wOworCisgIGNvZGUg PSBpeDg2X3ByZXBhcmVfc3NlX2ZwX2NvbXBhcmVfYXJncyAob3BlcmFuZHNb MF0sIGNvZGUsCisJCQkJCSAgICZvcGVyYW5kc1s0XSwgJm9wZXJhbmRzWzVd KTsKKyAgaWYgKGNvZGUgPT0gVU5LTk9XTikKKyAgICB7CisgICAgICBydHgg dGVtcDsKKyAgICAgIHN3aXRjaCAoR0VUX0NPREUgKG9wZXJhbmRzWzNdKSkK Kwl7CisJY2FzZSBMVEdUOgorCSAgdGVtcCA9IGl4ODZfZXhwYW5kX3NzZV9j bXAgKG9wZXJhbmRzWzBdLCBPUkRFUkVELCBvcGVyYW5kc1s0XSwKKwkJCQkg ICAgICBvcGVyYW5kc1s1XSwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzBdKTsK KwkgIGNtcCA9IGl4ODZfZXhwYW5kX3NzZV9jbXAgKG9wZXJhbmRzWzBdLCBO RSwgb3BlcmFuZHNbNF0sCisJCQkJICAgICBvcGVyYW5kc1s1XSwgb3BlcmFu ZHNbMV0sIG9wZXJhbmRzWzJdKTsKKwkgIGNvZGUgPSBBTkQ7CisJICBicmVh azsKKwljYXNlIFVORVE6CisJICB0ZW1wID0gaXg4Nl9leHBhbmRfc3NlX2Nt cCAob3BlcmFuZHNbMF0sIFVOT1JERVJFRCwgb3BlcmFuZHNbNF0sCisJCQkJ ICAgICAgb3BlcmFuZHNbNV0sIG9wZXJhbmRzWzBdLCBvcGVyYW5kc1swXSk7 CisJICBjbXAgPSBpeDg2X2V4cGFuZF9zc2VfY21wIChvcGVyYW5kc1swXSwg RVEsIG9wZXJhbmRzWzRdLAorCQkJCSAgICAgb3BlcmFuZHNbNV0sIG9wZXJh bmRzWzFdLCBvcGVyYW5kc1syXSk7CisJICBjb2RlID0gSU9SOworCSAgYnJl YWs7CisJZGVmYXVsdDoKKwkgIGdjY191bnJlYWNoYWJsZSAoKTsKKwl9Cisg ICAgICBjbXAgPSBleHBhbmRfc2ltcGxlX2Jpbm9wIChHRVRfTU9ERSAoY21w KSwgY29kZSwgdGVtcCwgY21wLCBjbXAsIDEsCisJCQkJIE9QVEFCX0RJUkVD VCk7CisgICAgICBpeDg2X2V4cGFuZF9zc2VfbW92Y2MgKG9wZXJhbmRzWzBd LCBjbXAsIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSk7CisgICAgICByZXR1 cm4gdHJ1ZTsKKyAgICB9CisKKyAgaWYgKGl4ODZfZXhwYW5kX3NzZV9mcF9t aW5tYXggKG9wZXJhbmRzWzBdLCBjb2RlLCBvcGVyYW5kc1s0XSwKKwkJCQkg b3BlcmFuZHNbNV0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSkpCisgICAg cmV0dXJuIHRydWU7CisKKyAgY21wID0gaXg4Nl9leHBhbmRfc3NlX2NtcCAo b3BlcmFuZHNbMF0sIGNvZGUsIG9wZXJhbmRzWzRdLCBvcGVyYW5kc1s1XSwK KwkJCSAgICAgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKTsKKyAgaXg4Nl9l eHBhbmRfc3NlX21vdmNjIChvcGVyYW5kc1swXSwgY21wLCBvcGVyYW5kc1sx XSwgb3BlcmFuZHNbMl0pOworICByZXR1cm4gdHJ1ZTsKK30KKworLyogRXhw YW5kIGEgc2lnbmVkL3Vuc2lnbmVkIGludGVncmFsIHZlY3RvciBjb25kaXRp b25hbCBtb3ZlLiAgKi8KKworYm9vbAoraXg4Nl9leHBhbmRfaW50X3Zjb25k IChydHggb3BlcmFuZHNbXSkKK3sKKyAgbWFjaGluZV9tb2RlIGRhdGFfbW9k ZSA9IEdFVF9NT0RFIChvcGVyYW5kc1swXSk7CisgIG1hY2hpbmVfbW9kZSBt b2RlID0gR0VUX01PREUgKG9wZXJhbmRzWzRdKTsKKyAgZW51bSBydHhfY29k ZSBjb2RlID0gR0VUX0NPREUgKG9wZXJhbmRzWzNdKTsKKyAgYm9vbCBuZWdh dGUgPSBmYWxzZTsKKyAgcnR4IHgsIGNvcDAsIGNvcDE7CisKKyAgY29wMCA9 IG9wZXJhbmRzWzRdOworICBjb3AxID0gb3BlcmFuZHNbNV07CisKKyAgLyog VHJ5IHRvIG9wdGltaXplIHggPCAwID8gLTEgOiAwIGludG8gKHNpZ25lZCkg eCA+PiAzMQorICAgICBhbmQgeCA8IDAgPyAxIDogMCBpbnRvICh1bnNpZ25l ZCkgeCA+PiAzMS4gICovCisgIGlmICgoY29kZSA9PSBMVCB8fCBjb2RlID09 IEdFKQorICAgICAgJiYgZGF0YV9tb2RlID09IG1vZGUKKyAgICAgICYmIGNv cDEgPT0gQ09OU1QwX1JUWCAobW9kZSkKKyAgICAgICYmIG9wZXJhbmRzWzEg KyAoY29kZSA9PSBMVCldID09IENPTlNUMF9SVFggKGRhdGFfbW9kZSkKKyAg ICAgICYmIEdFVF9NT0RFX1VOSVRfU0laRSAoZGF0YV9tb2RlKSA+IDEKKyAg ICAgICYmIEdFVF9NT0RFX1VOSVRfU0laRSAoZGF0YV9tb2RlKSA8PSA4Cisg ICAgICAmJiAoR0VUX01PREVfU0laRSAoZGF0YV9tb2RlKSA9PSAxNgorCSAg fHwgKFRBUkdFVF9BVlgyICYmIEdFVF9NT0RFX1NJWkUgKGRhdGFfbW9kZSkg PT0gMzIpKSkKKyAgICB7CisgICAgICBydHggbmVnb3AgPSBvcGVyYW5kc1sy IC0gKGNvZGUgPT0gTFQpXTsKKyAgICAgIGludCBzaGlmdCA9IEdFVF9NT0RF X1VOSVRfQklUU0laRSAoZGF0YV9tb2RlKSAtIDE7CisgICAgICBpZiAobmVn b3AgPT0gQ09OU1QxX1JUWCAoZGF0YV9tb2RlKSkKKwl7CisJICBydHggcmVz ID0gZXhwYW5kX3NpbXBsZV9iaW5vcCAobW9kZSwgTFNISUZUUlQsIGNvcDAs IEdFTl9JTlQgKHNoaWZ0KSwKKwkJCQkJIG9wZXJhbmRzWzBdLCAxLCBPUFRB Ql9ESVJFQ1QpOworCSAgaWYgKHJlcyAhPSBvcGVyYW5kc1swXSkKKwkgICAg ZW1pdF9tb3ZlX2luc24gKG9wZXJhbmRzWzBdLCByZXMpOworCSAgcmV0dXJu IHRydWU7CisJfQorICAgICAgZWxzZSBpZiAoR0VUX01PREVfSU5ORVIgKGRh dGFfbW9kZSkgIT0gREltb2RlCisJICAgICAgICYmIHZlY3Rvcl9hbGxfb25l c19vcGVyYW5kIChuZWdvcCwgZGF0YV9tb2RlKSkKKwl7CisJICBydHggcmVz ID0gZXhwYW5kX3NpbXBsZV9iaW5vcCAobW9kZSwgQVNISUZUUlQsIGNvcDAs IEdFTl9JTlQgKHNoaWZ0KSwKKwkJCQkJIG9wZXJhbmRzWzBdLCAwLCBPUFRB Ql9ESVJFQ1QpOworCSAgaWYgKHJlcyAhPSBvcGVyYW5kc1swXSkKKwkgICAg ZW1pdF9tb3ZlX2luc24gKG9wZXJhbmRzWzBdLCByZXMpOworCSAgcmV0dXJu IHRydWU7CisJfQorICAgIH0KKworICBpZiAoIW5vbmltbWVkaWF0ZV9vcGVy YW5kIChjb3AxLCBtb2RlKSkKKyAgICBjb3AxID0gZm9yY2VfcmVnIChtb2Rl LCBjb3AxKTsKKyAgaWYgKCFnZW5lcmFsX29wZXJhbmQgKG9wZXJhbmRzWzFd LCBkYXRhX21vZGUpKQorICAgIG9wZXJhbmRzWzFdID0gZm9yY2VfcmVnIChk YXRhX21vZGUsIG9wZXJhbmRzWzFdKTsKKyAgaWYgKCFnZW5lcmFsX29wZXJh bmQgKG9wZXJhbmRzWzJdLCBkYXRhX21vZGUpKQorICAgIG9wZXJhbmRzWzJd ID0gZm9yY2VfcmVnIChkYXRhX21vZGUsIG9wZXJhbmRzWzJdKTsKKworICB4 ID0gaXg4Nl9leHBhbmRfaW50X3NzZV9jbXAgKG9wZXJhbmRzWzBdLCBjb2Rl LCBjb3AwLCBjb3AxLAorCQkJICAgICAgIG9wZXJhbmRzWzFdLCBvcGVyYW5k c1syXSwgJm5lZ2F0ZSk7CisKKyAgaWYgKCF4KQorICAgIHJldHVybiBmYWxz ZTsKKwogICBpeDg2X2V4cGFuZF9zc2VfbW92Y2MgKG9wZXJhbmRzWzBdLCB4 LCBvcGVyYW5kc1sxK25lZ2F0ZV0sCiAJCQkgb3BlcmFuZHNbMi1uZWdhdGVd KTsKICAgcmV0dXJuIHRydWU7CkBAIC01MTY3OCw2ICs1MTg2NiwyNSBAQCBp eDg2X2F1dG92ZWN0b3JpemVfdmVjdG9yX3NpemVzICh2b2lkKQogICAgIChU QVJHRVRfQVZYICYmICFUQVJHRVRfUFJFRkVSX0FWWDEyOCkgPyAzMiB8IDE2 IDogMDsKIH0KIAorLyogSW1wbGVtZW5hdGlvbiBvZiB0YXJnZXRtLnZlY3Rv cml6ZS5nZXRfbWFza19tb2RlLiAgKi8KKworc3RhdGljIG1hY2hpbmVfbW9k ZQoraXg4Nl9nZXRfbWFza19tb2RlICh1bnNpZ25lZCBudW5pdHMsIHVuc2ln bmVkIHZlY3Rvcl9zaXplKQoreworICAvKiBTY2FsYXIgbWFzayBjYXNlLiAg Ki8KKyAgaWYgKChUQVJHRVRfQVZYNTEyRiAmJiB2ZWN0b3Jfc2l6ZSA9PSA2 NCkKKyAgICAgIHx8IFRBUkdFVF9BVlg1MTJWTCkKKyAgICByZXR1cm4gc21h bGxlc3RfbW9kZV9mb3Jfc2l6ZSAobnVuaXRzLCBNT0RFX0lOVCk7CisKKyAg dW5zaWduZWQgZWxlbV9zaXplID0gdmVjdG9yX3NpemUgLyBudW5pdHM7Cisg IG1hY2hpbmVfbW9kZSBlbGVtX21vZGUKKyAgICA9IHNtYWxsZXN0X21vZGVf Zm9yX3NpemUgKGVsZW1fc2l6ZSAqIEJJVFNfUEVSX1VOSVQsIE1PREVfSU5U KTsKKworICBnY2NfYXNzZXJ0IChlbGVtX3NpemUgKiBudW5pdHMgPT0gdmVj dG9yX3NpemUpOworCisgIHJldHVybiBtb2RlX2Zvcl92ZWN0b3IgKGVsZW1f bW9kZSwgbnVuaXRzKTsKK30KKwogDAogCiAvKiBSZXR1cm4gY2xhc3Mgb2Yg cmVnaXN0ZXJzIHdoaWNoIGNvdWxkIGJlIHVzZWQgZm9yIHBzZXVkbyBvZiBN T0RFCkBAIC01MjYxMiw2ICs1MjgxOSw4IEBAIGl4ODZfb3BlcmFuZHNfb2tf Zm9yX21vdmVfbXVsdGlwbGUgKHJ0eCAqb3BlcmFuZHMsIGJvb2wgbG9hZCwK ICN1bmRlZiBUQVJHRVRfVkVDVE9SSVpFX0FVVE9WRUNUT1JJWkVfVkVDVE9S X1NJWkVTCiAjZGVmaW5lIFRBUkdFVF9WRUNUT1JJWkVfQVVUT1ZFQ1RPUkla RV9WRUNUT1JfU0laRVMgXAogICBpeDg2X2F1dG92ZWN0b3JpemVfdmVjdG9y X3NpemVzCisjdW5kZWYgVEFSR0VUX1ZFQ1RPUklaRV9HRVRfTUFTS19NT0RF CisjZGVmaW5lIFRBUkdFVF9WRUNUT1JJWkVfR0VUX01BU0tfTU9ERSBpeDg2 X2dldF9tYXNrX21vZGUKICN1bmRlZiBUQVJHRVRfVkVDVE9SSVpFX0lOSVRf Q09TVAogI2RlZmluZSBUQVJHRVRfVkVDVE9SSVpFX0lOSVRfQ09TVCBpeDg2 X2luaXRfY29zdAogI3VuZGVmIFRBUkdFVF9WRUNUT1JJWkVfQUREX1NUTVRf Q09TVApkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L3NzZS5tZCBiL2dj Yy9jb25maWcvaTM4Ni9zc2UubWQKaW5kZXggNDUzNTU3MC4uYThkNTVjYyAx MDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L3NzZS5tZAorKysgYi9nY2Mv Y29uZmlnL2kzODYvc3NlLm1kCkBAIC02MDUsNiArNjA1LDE1IEBACiAgICAo VjE2U0YgIkhJIikgKFY4U0YgICJRSSIpIChWNFNGICAiUUkiKQogICAgKFY4 REYgICJRSSIpIChWNERGICAiUUkiKSAoVjJERiAgIlFJIildKQogCis7OyBN YXBwaW5nIG9mIHZlY3RvciBtb2RlcyB0byBjb3JyZXNwb25kaW5nIG1hc2sg c2l6ZQorKGRlZmluZV9tb2RlX2F0dHIgYXZ4NTEyZm1hc2ttb2RlbG93ZXIK KyAgWyhWNjRRSSAiZGkiKSAoVjMyUUkgInNpIikgKFYxNlFJICJoaSIpCisg ICAoVjMySEkgInNpIikgKFYxNkhJICJoaSIpIChWOEhJICAicWkiKSAoVjRI SSAicWkiKQorICAgKFYxNlNJICJoaSIpIChWOFNJICAicWkiKSAoVjRTSSAg InFpIikKKyAgIChWOERJICAicWkiKSAoVjRESSAgInFpIikgKFYyREkgICJx aSIpCisgICAoVjE2U0YgImhpIikgKFY4U0YgICJxaSIpIChWNFNGICAicWki KQorICAgKFY4REYgICJxaSIpIChWNERGICAicWkiKSAoVjJERiAgInFpIild KQorCiA7OyBNYXBwaW5nIG9mIHZlY3RvciBmbG9hdCBtb2RlcyB0byBhbiBp bnRlZ2VyIG1vZGUgb2YgdGhlIHNhbWUgc2l6ZQogKGRlZmluZV9tb2RlX2F0 dHIgc3NlaW50dmVjbW9kZQogICBbKFYxNlNGICJWMTZTSSIpIChWOERGICAi VjhESSIpCkBAIC0yODAzLDYgKzI4MTIsMTUwIEBACiAJCSAgICAgIChjb25z dF9zdHJpbmcgIjAiKSkpCiAgICAoc2V0X2F0dHIgIm1vZGUiICI8TU9ERT4i KV0pCiAKKyhkZWZpbmVfZXhwYW5kICJ2ZWNfY21wPG1vZGU+PGF2eDUxMmZt YXNrbW9kZWxvd2VyPiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6PGF2eDUx MmZtYXNrbW9kZT4gMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisJKG1hdGNoX29w ZXJhdG9yOjxhdng1MTJmbWFza21vZGU+IDEgIiIKKwkgIFsobWF0Y2hfb3Bl cmFuZDpWNDhfQVZYNTEyVkwgMiAicmVnaXN0ZXJfb3BlcmFuZCIpCisJICAg KG1hdGNoX29wZXJhbmQ6VjQ4X0FWWDUxMlZMIDMgIm5vbmltbWVkaWF0ZV9v cGVyYW5kIildKSldCisgICJUQVJHRVRfQVZYNTEyRiIKK3sKKyAgYm9vbCBv ayA9IGl4ODZfZXhwYW5kX21hc2tfdmVjX2NtcCAob3BlcmFuZHMpOworICBn Y2NfYXNzZXJ0IChvayk7CisgIERPTkU7Cit9KQorCisoZGVmaW5lX2V4cGFu ZCAidmVjX2NtcDxtb2RlPjxhdng1MTJmbWFza21vZGVsb3dlcj4iCisgIFso c2V0IChtYXRjaF9vcGVyYW5kOjxhdng1MTJmbWFza21vZGU+IDAgInJlZ2lz dGVyX29wZXJhbmQiKQorCShtYXRjaF9vcGVyYXRvcjo8YXZ4NTEyZm1hc2tt b2RlPiAxICIiCisJICBbKG1hdGNoX29wZXJhbmQ6VkkxMl9BVlg1MTJWTCAy ICJyZWdpc3Rlcl9vcGVyYW5kIikKKwkgICAobWF0Y2hfb3BlcmFuZDpWSTEy X0FWWDUxMlZMIDMgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIildKSldCisgICJU QVJHRVRfQVZYNTEyQlciCit7CisgIGJvb2wgb2sgPSBpeDg2X2V4cGFuZF9t YXNrX3ZlY19jbXAgKG9wZXJhbmRzKTsKKyAgZ2NjX2Fzc2VydCAob2spOwor ICBET05FOworfSkKKworKGRlZmluZV9leHBhbmQgInZlY19jbXA8bW9kZT48 c3NlaW50dmVjbW9kZWxvd2VyPiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 PHNzZWludHZlY21vZGU+IDAgInJlZ2lzdGVyX29wZXJhbmQiKQorCShtYXRj aF9vcGVyYXRvcjo8c3NlaW50dmVjbW9kZT4gMSAiIgorCSAgWyhtYXRjaF9v cGVyYW5kOlZJXzI1NiAyICJyZWdpc3Rlcl9vcGVyYW5kIikKKwkgICAobWF0 Y2hfb3BlcmFuZDpWSV8yNTYgMyAibm9uaW1tZWRpYXRlX29wZXJhbmQiKV0p KV0KKyAgIlRBUkdFVF9BVlgyIgoreworICBib29sIG9rID0gaXg4Nl9leHBh bmRfaW50X3ZlY19jbXAgKG9wZXJhbmRzKTsKKyAgZ2NjX2Fzc2VydCAob2sp OworICBET05FOworfSkKKworKGRlZmluZV9leHBhbmQgInZlY19jbXA8bW9k ZT48c3NlaW50dmVjbW9kZWxvd2VyPiIKKyAgWyhzZXQgKG1hdGNoX29wZXJh bmQ6PHNzZWludHZlY21vZGU+IDAgInJlZ2lzdGVyX29wZXJhbmQiKQorCSht YXRjaF9vcGVyYXRvcjo8c3NlaW50dmVjbW9kZT4gMSAiIgorCSAgWyhtYXRj aF9vcGVyYW5kOlZJMTI0XzEyOCAyICJyZWdpc3Rlcl9vcGVyYW5kIikKKwkg ICAobWF0Y2hfb3BlcmFuZDpWSTEyNF8xMjggMyAibm9uaW1tZWRpYXRlX29w ZXJhbmQiKV0pKV0KKyAgIlRBUkdFVF9TU0UyIgoreworICBib29sIG9rID0g aXg4Nl9leHBhbmRfaW50X3ZlY19jbXAgKG9wZXJhbmRzKTsKKyAgZ2NjX2Fz c2VydCAob2spOworICBET05FOworfSkKKworKGRlZmluZV9leHBhbmQgInZl Y19jbXB2MmRpdjJkaSIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJESSAw ICJyZWdpc3Rlcl9vcGVyYW5kIikKKwkobWF0Y2hfb3BlcmF0b3I6VjJESSAx ICIiCisJICBbKG1hdGNoX29wZXJhbmQ6VjJESSAyICJyZWdpc3Rlcl9vcGVy YW5kIikKKwkgICAobWF0Y2hfb3BlcmFuZDpWMkRJIDMgIm5vbmltbWVkaWF0 ZV9vcGVyYW5kIildKSldCisgICJUQVJHRVRfU1NFNF8yIgoreworICBib29s IG9rID0gaXg4Nl9leHBhbmRfaW50X3ZlY19jbXAgKG9wZXJhbmRzKTsKKyAg Z2NjX2Fzc2VydCAob2spOworICBET05FOworfSkKKworKGRlZmluZV9leHBh bmQgInZlY19jbXA8bW9kZT48c3NlaW50dmVjbW9kZWxvd2VyPiIKKyAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6PHNzZWludHZlY21vZGU+IDAgInJlZ2lzdGVy X29wZXJhbmQiKQorCShtYXRjaF9vcGVyYXRvcjo8c3NlaW50dmVjbW9kZT4g MSAiIgorCSAgWyhtYXRjaF9vcGVyYW5kOlZGXzI1NiAyICJyZWdpc3Rlcl9v cGVyYW5kIikKKwkgICAobWF0Y2hfb3BlcmFuZDpWRl8yNTYgMyAibm9uaW1t ZWRpYXRlX29wZXJhbmQiKV0pKV0KKyAgIlRBUkdFVF9BVlgiCit7CisgIGJv b2wgb2sgPSBpeDg2X2V4cGFuZF9mcF92ZWNfY21wIChvcGVyYW5kcyk7Cisg IGdjY19hc3NlcnQgKG9rKTsKKyAgRE9ORTsKK30pCisKKyhkZWZpbmVfZXhw YW5kICJ2ZWNfY21wPG1vZGU+PHNzZWludHZlY21vZGVsb3dlcj4iCisgIFso c2V0IChtYXRjaF9vcGVyYW5kOjxzc2VpbnR2ZWNtb2RlPiAwICJyZWdpc3Rl cl9vcGVyYW5kIikKKwkobWF0Y2hfb3BlcmF0b3I6PHNzZWludHZlY21vZGU+ IDEgIiIKKwkgIFsobWF0Y2hfb3BlcmFuZDpWRl8xMjggMiAicmVnaXN0ZXJf b3BlcmFuZCIpCisJICAgKG1hdGNoX29wZXJhbmQ6VkZfMTI4IDMgIm5vbmlt bWVkaWF0ZV9vcGVyYW5kIildKSldCisgICJUQVJHRVRfU1NFIgoreworICBi b29sIG9rID0gaXg4Nl9leHBhbmRfZnBfdmVjX2NtcCAob3BlcmFuZHMpOwor ICBnY2NfYXNzZXJ0IChvayk7CisgIERPTkU7Cit9KQorCisoZGVmaW5lX2V4 cGFuZCAidmVjX2NtcHU8bW9kZT48YXZ4NTEyZm1hc2ttb2RlbG93ZXI+Igor ICBbKHNldCAobWF0Y2hfb3BlcmFuZDo8YXZ4NTEyZm1hc2ttb2RlPiAwICJy ZWdpc3Rlcl9vcGVyYW5kIikKKwkobWF0Y2hfb3BlcmF0b3I6PGF2eDUxMmZt YXNrbW9kZT4gMSAiIgorCSAgWyhtYXRjaF9vcGVyYW5kOlZJNDhfQVZYNTEy VkwgMiAicmVnaXN0ZXJfb3BlcmFuZCIpCisJICAgKG1hdGNoX29wZXJhbmQ6 Vkk0OF9BVlg1MTJWTCAzICJub25pbW1lZGlhdGVfb3BlcmFuZCIpXSkpXQor ICAiVEFSR0VUX0FWWDUxMkYiCit7CisgIGJvb2wgb2sgPSBpeDg2X2V4cGFu ZF9tYXNrX3ZlY19jbXAgKG9wZXJhbmRzKTsKKyAgZ2NjX2Fzc2VydCAob2sp OworICBET05FOworfSkKKworKGRlZmluZV9leHBhbmQgInZlY19jbXB1PG1v ZGU+PGF2eDUxMmZtYXNrbW9kZWxvd2VyPiIKKyAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6PGF2eDUxMmZtYXNrbW9kZT4gMCAicmVnaXN0ZXJfb3BlcmFuZCIp CisJKG1hdGNoX29wZXJhdG9yOjxhdng1MTJmbWFza21vZGU+IDEgIiIKKwkg IFsobWF0Y2hfb3BlcmFuZDpWSTEyX0FWWDUxMlZMIDIgInJlZ2lzdGVyX29w ZXJhbmQiKQorCSAgIChtYXRjaF9vcGVyYW5kOlZJMTJfQVZYNTEyVkwgMyAi bm9uaW1tZWRpYXRlX29wZXJhbmQiKV0pKV0KKyAgIlRBUkdFVF9BVlg1MTJC VyIKK3sKKyAgYm9vbCBvayA9IGl4ODZfZXhwYW5kX21hc2tfdmVjX2NtcCAo b3BlcmFuZHMpOworICBnY2NfYXNzZXJ0IChvayk7CisgIERPTkU7Cit9KQor CisoZGVmaW5lX2V4cGFuZCAidmVjX2NtcHU8bW9kZT48c3NlaW50dmVjbW9k ZWxvd2VyPiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6PHNzZWludHZlY21v ZGU+IDAgInJlZ2lzdGVyX29wZXJhbmQiKQorCShtYXRjaF9vcGVyYXRvcjo8 c3NlaW50dmVjbW9kZT4gMSAiIgorCSAgWyhtYXRjaF9vcGVyYW5kOlZJXzI1 NiAyICJyZWdpc3Rlcl9vcGVyYW5kIikKKwkgICAobWF0Y2hfb3BlcmFuZDpW SV8yNTYgMyAibm9uaW1tZWRpYXRlX29wZXJhbmQiKV0pKV0KKyAgIlRBUkdF VF9BVlgyIgoreworICBib29sIG9rID0gaXg4Nl9leHBhbmRfaW50X3ZlY19j bXAgKG9wZXJhbmRzKTsKKyAgZ2NjX2Fzc2VydCAob2spOworICBET05FOwor fSkKKworKGRlZmluZV9leHBhbmQgInZlY19jbXB1PG1vZGU+PHNzZWludHZl Y21vZGVsb3dlcj4iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOjxzc2VpbnR2 ZWNtb2RlPiAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKwkobWF0Y2hfb3BlcmF0 b3I6PHNzZWludHZlY21vZGU+IDEgIiIKKwkgIFsobWF0Y2hfb3BlcmFuZDpW STEyNF8xMjggMiAicmVnaXN0ZXJfb3BlcmFuZCIpCisJICAgKG1hdGNoX29w ZXJhbmQ6VkkxMjRfMTI4IDMgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIildKSld CisgICJUQVJHRVRfU1NFMiIKK3sKKyAgYm9vbCBvayA9IGl4ODZfZXhwYW5k X2ludF92ZWNfY21wIChvcGVyYW5kcyk7CisgIGdjY19hc3NlcnQgKG9rKTsK KyAgRE9ORTsKK30pCisKKyhkZWZpbmVfZXhwYW5kICJ2ZWNfY21wdXYyZGl2 MmRpIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMkRJIDAgInJlZ2lzdGVy X29wZXJhbmQiKQorCShtYXRjaF9vcGVyYXRvcjpWMkRJIDEgIiIKKwkgIFso bWF0Y2hfb3BlcmFuZDpWMkRJIDIgInJlZ2lzdGVyX29wZXJhbmQiKQorCSAg IChtYXRjaF9vcGVyYW5kOlYyREkgMyAibm9uaW1tZWRpYXRlX29wZXJhbmQi KV0pKV0KKyAgIlRBUkdFVF9TU0U0XzIiCit7CisgIGJvb2wgb2sgPSBpeDg2 X2V4cGFuZF9pbnRfdmVjX2NtcCAob3BlcmFuZHMpOworICBnY2NfYXNzZXJ0 IChvayk7CisgIERPTkU7Cit9KQorCiAoZGVmaW5lX2V4cGFuZCAidmNvbmQ8 Vl81MTI6bW9kZT48VkZfNTEyOm1vZGU+IgogICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpWXzUxMiAwICJyZWdpc3Rlcl9vcGVyYW5kIikKIAkoaWZfdGhlbl9l bHNlOlZfNTEyCkBAIC0xNzg5NSw3ICsxODA0OCw3IEBACiAgICAoc2V0X2F0 dHIgImJ0dmVyMl9kZWNvZGUiICJ2ZWN0b3IiKSAKICAgIChzZXRfYXR0ciAi bW9kZSIgIjxzc2VpbnNubW9kZT4iKV0pCiAKLShkZWZpbmVfZXhwYW5kICJt YXNrbG9hZDxtb2RlPiIKKyhkZWZpbmVfZXhwYW5kICJtYXNrbG9hZDxtb2Rl Pjxzc2VpbnR2ZWNtb2RlbG93ZXI+IgogICBbKHNldCAobWF0Y2hfb3BlcmFu ZDpWNDhfQVZYMiAwICJyZWdpc3Rlcl9vcGVyYW5kIikKIAkodW5zcGVjOlY0 OF9BVlgyCiAJICBbKG1hdGNoX29wZXJhbmQ6PHNzZWludHZlY21vZGU+IDIg InJlZ2lzdGVyX29wZXJhbmQiKQpAQCAtMTc5MDMsNyArMTgwNTYsMjMgQEAK IAkgIFVOU1BFQ19NQVNLTU9WKSldCiAgICJUQVJHRVRfQVZYIikKIAotKGRl ZmluZV9leHBhbmQgIm1hc2tzdG9yZTxtb2RlPiIKKyhkZWZpbmVfZXhwYW5k ICJtYXNrbG9hZDxtb2RlPjxhdng1MTJmbWFza21vZGVsb3dlcj4iCisgIFso c2V0IChtYXRjaF9vcGVyYW5kOlY0OF9BVlg1MTJWTCAwICJyZWdpc3Rlcl9v cGVyYW5kIikKKwkodmVjX21lcmdlOlY0OF9BVlg1MTJWTAorCSAgKG1hdGNo X29wZXJhbmQ6VjQ4X0FWWDUxMlZMIDEgIm1lbW9yeV9vcGVyYW5kIikKKwkg IChtYXRjaF9kdXAgMCkKKwkgIChtYXRjaF9vcGVyYW5kOjxhdng1MTJmbWFz a21vZGU+IDIgInJlZ2lzdGVyX29wZXJhbmQiKSkpXQorICAiVEFSR0VUX0FW WDUxMkYiKQorCisoZGVmaW5lX2V4cGFuZCAibWFza2xvYWQ8bW9kZT48YXZ4 NTEyZm1hc2ttb2RlbG93ZXI+IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpW STEyX0FWWDUxMlZMIDAgInJlZ2lzdGVyX29wZXJhbmQiKQorCSh2ZWNfbWVy Z2U6VkkxMl9BVlg1MTJWTAorCSAgKG1hdGNoX29wZXJhbmQ6VkkxMl9BVlg1 MTJWTCAxICJtZW1vcnlfb3BlcmFuZCIpCisJICAobWF0Y2hfZHVwIDApCisJ ICAobWF0Y2hfb3BlcmFuZDo8YXZ4NTEyZm1hc2ttb2RlPiAyICJyZWdpc3Rl cl9vcGVyYW5kIikpKV0KKyAgIlRBUkdFVF9BVlg1MTJCVyIpCisKKyhkZWZp bmVfZXhwYW5kICJtYXNrc3RvcmU8bW9kZT48c3NlaW50dmVjbW9kZWxvd2Vy PiIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjQ4X0FWWDIgMCAibWVtb3J5 X29wZXJhbmQiKQogCSh1bnNwZWM6VjQ4X0FWWDIKIAkgIFsobWF0Y2hfb3Bl cmFuZDo8c3NlaW50dmVjbW9kZT4gMiAicmVnaXN0ZXJfb3BlcmFuZCIpCkBA IC0xNzkxMiw2ICsxODA4MSwyMiBAQAogCSAgVU5TUEVDX01BU0tNT1YpKV0K ICAgIlRBUkdFVF9BVlgiKQogCisoZGVmaW5lX2V4cGFuZCAibWFza3N0b3Jl PG1vZGU+PGF2eDUxMmZtYXNrbW9kZWxvd2VyPiIKKyAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6VjQ4X0FWWDUxMlZMIDAgIm1lbW9yeV9vcGVyYW5kIikKKwko dmVjX21lcmdlOlY0OF9BVlg1MTJWTAorCSAgKG1hdGNoX29wZXJhbmQ6VjQ4 X0FWWDUxMlZMIDEgInJlZ2lzdGVyX29wZXJhbmQiKQorCSAgKG1hdGNoX2R1 cCAwKQorCSAgKG1hdGNoX29wZXJhbmQ6PGF2eDUxMmZtYXNrbW9kZT4gMiAi cmVnaXN0ZXJfb3BlcmFuZCIpKSldCisgICJUQVJHRVRfQVZYNTEyRiIpCisK KyhkZWZpbmVfZXhwYW5kICJtYXNrc3RvcmU8bW9kZT48YXZ4NTEyZm1hc2tt b2RlbG93ZXI+IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWSTEyX0FWWDUx MlZMIDAgIm1lbW9yeV9vcGVyYW5kIikKKwkodmVjX21lcmdlOlZJMTJfQVZY NTEyVkwKKwkgIChtYXRjaF9vcGVyYW5kOlZJMTJfQVZYNTEyVkwgMSAicmVn aXN0ZXJfb3BlcmFuZCIpCisJICAobWF0Y2hfZHVwIDApCisJICAobWF0Y2hf b3BlcmFuZDo8YXZ4NTEyZm1hc2ttb2RlPiAyICJyZWdpc3Rlcl9vcGVyYW5k IikpKV0KKyAgIlRBUkdFVF9BVlg1MTJCVyIpCisKIChkZWZpbmVfaW5zbl9h bmRfc3BsaXQgImF2eF88Y2FzdG1vZGU+PGF2eHNpemVzdWZmaXg+XzxjYXN0 bW9kZT4iCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkFWWDI1Nk1PREUyUCAw ICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIj14LG0iKQogCSh1bnNwZWM6QVZY MjU2TU9ERTJQCmRpZmYgLS1naXQgYS9nY2MvZG9jL3RtLnRleGkgYi9nY2Mv ZG9jL3RtLnRleGkKaW5kZXggZjVhMWY4NC4uYWNkZmNkNSAxMDA2NDQKLS0t IGEvZ2NjL2RvYy90bS50ZXhpCisrKyBiL2djYy9kb2MvdG0udGV4aQpAQCAt NTY4OCw2ICs1Njg4LDExIEBAIG1vZGUgcmV0dXJuZWQgYnkgQGNvZGV7VEFS R0VUX1ZFQ1RPUklaRV9QUkVGRVJSRURfU0lNRF9NT0RFfS4KIFRoZSBkZWZh dWx0IGlzIHplcm8gd2hpY2ggbWVhbnMgdG8gbm90IGl0ZXJhdGUgb3ZlciBv dGhlciB2ZWN0b3Igc2l6ZXMuCiBAZW5kIGRlZnR5cGVmbgogCitAZGVmdHlw ZWZuIHtUYXJnZXQgSG9va30gbWFjaGluZV9tb2RlIFRBUkdFVF9WRUNUT1JJ WkVfR0VUX01BU0tfTU9ERSAodW5zaWduZWQgQHZhcntudW5pdHN9LCB1bnNp Z25lZCBAdmFye2xlbmd0aH0pCitUaGlzIGhvb2sgcmV0dXJucyBtb2RlIHRv IGJlIHVzZWQgZm9yIGEgbWFzayB0byBiZSB1c2VkIGZvciBhIHZlY3Rvcgor b2Ygc3BlY2lmaWVkIEB2YXJ7bGVuZ3RofSB3aXRoIEB2YXJ7bnVuaXRzfSBl bGVtZW50cy4KK0BlbmQgZGVmdHlwZWZuCisKIEBkZWZ0eXBlZm4ge1Rhcmdl dCBIb29rfSB7dm9pZCAqfSBUQVJHRVRfVkVDVE9SSVpFX0lOSVRfQ09TVCAo c3RydWN0IGxvb3AgKkB2YXJ7bG9vcF9pbmZvfSkKIFRoaXMgaG9vayBzaG91 bGQgaW5pdGlhbGl6ZSB0YXJnZXQtc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVz IGluIHByZXBhcmF0aW9uIGZvciBtb2RlbGluZyB0aGUgY29zdHMgb2YgdmVj dG9yaXppbmcgYSBsb29wIG9yIGJhc2ljIGJsb2NrLiAgVGhlIGRlZmF1bHQg YWxsb2NhdGVzIHRocmVlIHVuc2lnbmVkIGludGVnZXJzIGZvciBhY2N1bXVs YXRpbmcgY29zdHMgZm9yIHRoZSBwcm9sb2d1ZSwgYm9keSwgYW5kIGVwaWxv Z3VlIG9mIHRoZSBsb29wIG9yIGJhc2ljIGJsb2NrLiAgSWYgQHZhcntsb29w X2luZm99IGlzIG5vbi1OVUxMLCBpdCBpZGVudGlmaWVzIHRoZSBsb29wIGJl aW5nIHZlY3Rvcml6ZWQ7IG90aGVyd2lzZSBhIHNpbmdsZSBibG9jayBpcyBi ZWluZyB2ZWN0b3JpemVkLgogQGVuZCBkZWZ0eXBlZm4KZGlmZiAtLWdpdCBh L2djYy9kb2MvdG0udGV4aS5pbiBiL2djYy9kb2MvdG0udGV4aS5pbgppbmRl eCA5ZDVhYzBhLi41MmU5MTJhIDEwMDY0NAotLS0gYS9nY2MvZG9jL3RtLnRl eGkuaW4KKysrIGIvZ2NjL2RvYy90bS50ZXhpLmluCkBAIC00MjI1LDYgKzQy MjUsOCBAQCBhZGRyZXNzOyAgYnV0IG9mdGVuIGEgbWFjaGluZS1kZXBlbmRl bnQgc3RyYXRlZ3kgY2FuIGdlbmVyYXRlIGJldHRlciBjb2RlLgogCiBAaG9v ayBUQVJHRVRfVkVDVE9SSVpFX0FVVE9WRUNUT1JJWkVfVkVDVE9SX1NJWkVT CiAKK0Bob29rIFRBUkdFVF9WRUNUT1JJWkVfR0VUX01BU0tfTU9ERQorCiBA aG9vayBUQVJHRVRfVkVDVE9SSVpFX0lOSVRfQ09TVAogCiBAaG9vayBUQVJH RVRfVkVDVE9SSVpFX0FERF9TVE1UX0NPU1QKZGlmZiAtLWdpdCBhL2djYy9l eHByLmMgYi9nY2MvZXhwci5jCmluZGV4IDFlODIwYjQuLmZhNDg0ODQgMTAw NjQ0Ci0tLSBhL2djYy9leHByLmMKKysrIGIvZ2NjL2V4cHIuYwpAQCAtMTEw MDAsOSArMTEwMDAsMTUgQEAgZG9fc3RvcmVfZmxhZyAoc2Vwb3BzIG9wcywg cnR4IHRhcmdldCwgbWFjaGluZV9tb2RlIG1vZGUpCiAgIGlmIChUUkVFX0NP REUgKG9wcy0+dHlwZSkgPT0gVkVDVE9SX1RZUEUpCiAgICAgewogICAgICAg dHJlZSBpZmV4cCA9IGJ1aWxkMiAob3BzLT5jb2RlLCBvcHMtPnR5cGUsIGFy ZzAsIGFyZzEpOwotICAgICAgdHJlZSBpZl90cnVlID0gY29uc3RhbnRfYm9v bGVhbl9ub2RlICh0cnVlLCBvcHMtPnR5cGUpOwotICAgICAgdHJlZSBpZl9m YWxzZSA9IGNvbnN0YW50X2Jvb2xlYW5fbm9kZSAoZmFsc2UsIG9wcy0+dHlw ZSk7Ci0gICAgICByZXR1cm4gZXhwYW5kX3ZlY19jb25kX2V4cHIgKG9wcy0+ dHlwZSwgaWZleHAsIGlmX3RydWUsIGlmX2ZhbHNlLCB0YXJnZXQpOworICAg ICAgaWYgKFRSRUVfVFlQRSAob3BzLT50eXBlKSA9PSBib29sZWFuX3R5cGVf bm9kZSkKKwlyZXR1cm4gZXhwYW5kX3ZlY19jbXBfZXhwciAob3BzLT50eXBl LCBpZmV4cCwgdGFyZ2V0KTsKKyAgICAgIGVsc2UKKwl7CisJICB0cmVlIGlm X3RydWUgPSBjb25zdGFudF9ib29sZWFuX25vZGUgKHRydWUsIG9wcy0+dHlw ZSk7CisJICB0cmVlIGlmX2ZhbHNlID0gY29uc3RhbnRfYm9vbGVhbl9ub2Rl IChmYWxzZSwgb3BzLT50eXBlKTsKKwkgIHJldHVybiBleHBhbmRfdmVjX2Nv bmRfZXhwciAob3BzLT50eXBlLCBpZmV4cCwgaWZfdHJ1ZSwKKwkJCQkgICAg ICAgaWZfZmFsc2UsIHRhcmdldCk7CisJfQogICAgIH0KIAogICAvKiBHZXQg dGhlIHJ0eCBjb21wYXJpc29uIGNvZGUgdG8gdXNlLiAgV2Uga25vdyB0aGF0 IEVYUCBpcyBhIGNvbXBhcmlzb24KZGlmZiAtLWdpdCBhL2djYy9pbnRlcm5h bC1mbi5jIGIvZ2NjL2ludGVybmFsLWZuLmMKaW5kZXggZTc4NTk0Ni4uNGNh MGE0MCAxMDA2NDQKLS0tIGEvZ2NjL2ludGVybmFsLWZuLmMKKysrIGIvZ2Nj L2ludGVybmFsLWZuLmMKQEAgLTE4ODUsNyArMTg4NSw5IEBAIGV4cGFuZF9N QVNLX0xPQUQgKGdjYWxsICpzdG10KQogICBjcmVhdGVfb3V0cHV0X29wZXJh bmQgKCZvcHNbMF0sIHRhcmdldCwgVFlQRV9NT0RFICh0eXBlKSk7CiAgIGNy ZWF0ZV9maXhlZF9vcGVyYW5kICgmb3BzWzFdLCBtZW0pOwogICBjcmVhdGVf aW5wdXRfb3BlcmFuZCAoJm9wc1syXSwgbWFzaywgVFlQRV9NT0RFIChUUkVF X1RZUEUgKG1hc2t0KSkpOwotICBleHBhbmRfaW5zbiAob3B0YWJfaGFuZGxl ciAobWFza2xvYWRfb3B0YWIsIFRZUEVfTU9ERSAodHlwZSkpLCAzLCBvcHMp OworICBleHBhbmRfaW5zbiAoY29udmVydF9vcHRhYl9oYW5kbGVyIChtYXNr bG9hZF9vcHRhYiwgVFlQRV9NT0RFICh0eXBlKSwKKwkJCQkgICAgICBUWVBF X01PREUgKFRSRUVfVFlQRSAobWFza3QpKSksCisJICAgICAgIDMsIG9wcyk7 CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xOTA4LDcgKzE5MTAsOSBAQCBleHBh bmRfTUFTS19TVE9SRSAoZ2NhbGwgKnN0bXQpCiAgIGNyZWF0ZV9maXhlZF9v cGVyYW5kICgmb3BzWzBdLCBtZW0pOwogICBjcmVhdGVfaW5wdXRfb3BlcmFu ZCAoJm9wc1sxXSwgcmVnLCBUWVBFX01PREUgKHR5cGUpKTsKICAgY3JlYXRl X2lucHV0X29wZXJhbmQgKCZvcHNbMl0sIG1hc2ssIFRZUEVfTU9ERSAoVFJF RV9UWVBFIChtYXNrdCkpKTsKLSAgZXhwYW5kX2luc24gKG9wdGFiX2hhbmRs ZXIgKG1hc2tzdG9yZV9vcHRhYiwgVFlQRV9NT0RFICh0eXBlKSksIDMsIG9w cyk7CisgIGV4cGFuZF9pbnNuIChjb252ZXJ0X29wdGFiX2hhbmRsZXIgKG1h c2tzdG9yZV9vcHRhYiwgVFlQRV9NT0RFICh0eXBlKSwKKwkJCQkgICAgICBU WVBFX01PREUgKFRSRUVfVFlQRSAobWFza3QpKSksCisJICAgICAgIDMsIG9w cyk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9nY2Mvb3B0YWJz LmMgYi9nY2Mvb3B0YWJzLmMKaW5kZXggZTUzM2U2ZS4uNDhmNzkxNCAxMDA2 NDQKLS0tIGEvZ2NjL29wdGFicy5jCisrKyBiL2djYy9vcHRhYnMuYwpAQCAt NjQ5MCwxMSArNjQ5MCwxMyBAQCBnZXRfcnR4X2NvZGUgKGVudW0gdHJlZV9j b2RlIHRjb2RlLCBib29sIHVuc2lnbmVkcCkKIH0KIAogLyogUmV0dXJuIGNv bXBhcmlzb24gcnR4IGZvciBDT05ELiBVc2UgVU5TSUdORURQIHRvIHNlbGVj dCBzaWduZWQgb3IKLSAgIHVuc2lnbmVkIG9wZXJhdG9ycy4gRG8gbm90IGdl bmVyYXRlIGNvbXBhcmUgaW5zdHJ1Y3Rpb24uICAqLworICAgdW5zaWduZWQg b3BlcmF0b3JzLiAgT1BOTyBob2xkcyBhbiBpbmRleCBvZiB0aGUgZmlyc3Qg Y29tcGFyaXNvbgorICAgb3BlcmFuZCBpbiBpbnNuIHdpdGggY29kZSBJQ09E RS4gIERvIG5vdCBnZW5lcmF0ZSBjb21wYXJlIGluc3RydWN0aW9uLiAgKi8K IAogc3RhdGljIHJ0eAogdmVjdG9yX2NvbXBhcmVfcnR4IChlbnVtIHRyZWVf Y29kZSB0Y29kZSwgdHJlZSB0X29wMCwgdHJlZSB0X29wMSwKLQkJICAgIGJv b2wgdW5zaWduZWRwLCBlbnVtIGluc25fY29kZSBpY29kZSkKKwkJICAgIGJv b2wgdW5zaWduZWRwLCBlbnVtIGluc25fY29kZSBpY29kZSwKKwkJICAgIHVu c2lnbmVkIGludCBvcG5vKQogewogICBzdHJ1Y3QgZXhwYW5kX29wZXJhbmQg b3BzWzJdOwogICBydHggcnR4X29wMCwgcnR4X29wMTsKQEAgLTY1MjAsNyAr NjUyMiw3IEBAIHZlY3Rvcl9jb21wYXJlX3J0eCAoZW51bSB0cmVlX2NvZGUg dGNvZGUsIHRyZWUgdF9vcDAsIHRyZWUgdF9vcDEsCiAKICAgY3JlYXRlX2lu cHV0X29wZXJhbmQgKCZvcHNbMF0sIHJ0eF9vcDAsIG0wKTsKICAgY3JlYXRl X2lucHV0X29wZXJhbmQgKCZvcHNbMV0sIHJ0eF9vcDEsIG0xKTsKLSAgaWYg KCFtYXliZV9sZWdpdGltaXplX29wZXJhbmRzIChpY29kZSwgNCwgMiwgb3Bz KSkKKyAgaWYgKCFtYXliZV9sZWdpdGltaXplX29wZXJhbmRzIChpY29kZSwg b3BubywgMiwgb3BzKSkKICAgICBnY2NfdW5yZWFjaGFibGUgKCk7CiAgIHJl dHVybiBnZW5fcnR4X2ZtdF9lZSAocmNvZGUsIFZPSURtb2RlLCBvcHNbMF0u dmFsdWUsIG9wc1sxXS52YWx1ZSk7CiB9CkBAIC02ODYzLDcgKzY4NjUsNyBA QCBleHBhbmRfdmVjX2NvbmRfZXhwciAodHJlZSB2ZWNfY29uZF90eXBlLCB0 cmVlIG9wMCwgdHJlZSBvcDEsIHRyZWUgb3AyLAogICBpZiAoaWNvZGUgPT0g Q09ERV9GT1Jfbm90aGluZykKICAgICByZXR1cm4gMDsKIAotICBjb21wYXJp c29uID0gdmVjdG9yX2NvbXBhcmVfcnR4ICh0Y29kZSwgb3AwYSwgb3AwYiwg dW5zaWduZWRwLCBpY29kZSk7CisgIGNvbXBhcmlzb24gPSB2ZWN0b3JfY29t cGFyZV9ydHggKHRjb2RlLCBvcDBhLCBvcDBiLCB1bnNpZ25lZHAsIGljb2Rl LCA0KTsKICAgcnR4X29wMSA9IGV4cGFuZF9ub3JtYWwgKG9wMSk7CiAgIHJ0 eF9vcDIgPSBleHBhbmRfbm9ybWFsIChvcDIpOwogCkBAIC02ODc3LDYgKzY4 NzksNjMgQEAgZXhwYW5kX3ZlY19jb25kX2V4cHIgKHRyZWUgdmVjX2NvbmRf dHlwZSwgdHJlZSBvcDAsIHRyZWUgb3AxLCB0cmVlIG9wMiwKICAgcmV0dXJu IG9wc1swXS52YWx1ZTsKIH0KIAorLyogUmV0dXJuIGluc24gY29kZSBmb3Ig YSBjb21wYXJpc29uIG9wZXJhdG9yIHdpdGggVk1PREUKKyAgIHJlc3VsdGlu IE1BU0tfTU9ERSwgdW5zaWduZWQgaWYgVU5TIGlzIHRydWUuICAqLworCitz dGF0aWMgaW5saW5lIGVudW0gaW5zbl9jb2RlCitnZXRfdmVjX2NtcF9pY29k ZSAobWFjaGluZV9tb2RlIHZtb2RlLCBtYWNoaW5lX21vZGUgbWFza19tb2Rl LCBib29sIHVucykKK3sKKyAgb3B0YWIgdGFiID0gdW5zID8gdmVjX2NtcHVf b3B0YWIgOiB2ZWNfY21wX29wdGFiOworICByZXR1cm4gY29udmVydF9vcHRh Yl9oYW5kbGVyICh0YWIsIHZtb2RlLCBtYXNrX21vZGUpOworfQorCisvKiBS ZXR1cm4gVFJVRSBpZiBhcHByb3ByaWF0ZSB2ZWN0b3IgaW5zbiBpcyBhdmFp bGFibGUKKyAgIGZvciB2ZWN0b3IgY29tcGFyaXNvbiBleHByIHdpdGggdmVj dG9yIHR5cGUgVkFMVUVfVFlQRQorICAgYW5kIHJlc3VsdGluZyBtYXNrIHdp dGggTUFTS19UWVBFLiAgKi8KKworYm9vbAorZXhwYW5kX3ZlY19jbXBfZXhw cl9wICh0cmVlIHZhbHVlX3R5cGUsIHRyZWUgbWFza190eXBlKQoreworICBl bnVtIGluc25fY29kZSBpY29kZSA9IGdldF92ZWNfY21wX2ljb2RlIChUWVBF X01PREUgKHZhbHVlX3R5cGUpLAorCQkJCQkgICAgVFlQRV9NT0RFIChtYXNr X3R5cGUpLAorCQkJCQkgICAgVFlQRV9VTlNJR05FRCAodmFsdWVfdHlwZSkp OworICByZXR1cm4gKGljb2RlICE9IENPREVfRk9SX25vdGhpbmcpOworfQor CisvKiBHZW5lcmF0ZSBpbnNucyBmb3IgYSB2ZWN0b3IgY29tcGFyaXNvbiBp bnRvIGEgbWFzay4gICovCisKK3J0eAorZXhwYW5kX3ZlY19jbXBfZXhwciAo dHJlZSB0eXBlLCB0cmVlIGV4cCwgcnR4IHRhcmdldCkKK3sKKyAgc3RydWN0 IGV4cGFuZF9vcGVyYW5kIG9wc1s0XTsKKyAgZW51bSBpbnNuX2NvZGUgaWNv ZGU7CisgIHJ0eCBjb21wYXJpc29uOworICBtYWNoaW5lX21vZGUgbWFza19t b2RlID0gVFlQRV9NT0RFICh0eXBlKTsKKyAgbWFjaGluZV9tb2RlIHZtb2Rl OworICBib29sIHVuc2lnbmVkcDsKKyAgdHJlZSBvcDBhLCBvcDBiOworICBl bnVtIHRyZWVfY29kZSB0Y29kZTsKKworICBvcDBhID0gVFJFRV9PUEVSQU5E IChleHAsIDApOworICBvcDBiID0gVFJFRV9PUEVSQU5EIChleHAsIDEpOwor ICB0Y29kZSA9IFRSRUVfQ09ERSAoZXhwKTsKKworICB1bnNpZ25lZHAgPSBU WVBFX1VOU0lHTkVEIChUUkVFX1RZUEUgKG9wMGEpKTsKKyAgdm1vZGUgPSBU WVBFX01PREUgKFRSRUVfVFlQRSAob3AwYSkpOworCisgIGljb2RlID0gZ2V0 X3ZlY19jbXBfaWNvZGUgKHZtb2RlLCBtYXNrX21vZGUsIHVuc2lnbmVkcCk7 CisgIGlmIChpY29kZSA9PSBDT0RFX0ZPUl9ub3RoaW5nKQorICAgIHJldHVy biAwOworCisgIGNvbXBhcmlzb24gPSB2ZWN0b3JfY29tcGFyZV9ydHggKHRj b2RlLCBvcDBhLCBvcDBiLCB1bnNpZ25lZHAsIGljb2RlLCAyKTsKKyAgY3Jl YXRlX291dHB1dF9vcGVyYW5kICgmb3BzWzBdLCB0YXJnZXQsIG1hc2tfbW9k ZSk7CisgIGNyZWF0ZV9maXhlZF9vcGVyYW5kICgmb3BzWzFdLCBjb21wYXJp c29uKTsKKyAgY3JlYXRlX2ZpeGVkX29wZXJhbmQgKCZvcHNbMl0sIFhFWFAg KGNvbXBhcmlzb24sIDApKTsKKyAgY3JlYXRlX2ZpeGVkX29wZXJhbmQgKCZv cHNbM10sIFhFWFAgKGNvbXBhcmlzb24sIDEpKTsKKyAgZXhwYW5kX2luc24g KGljb2RlLCA0LCBvcHMpOworICByZXR1cm4gb3BzWzBdLnZhbHVlOworfQor CiAvKiBSZXR1cm4gbm9uLXplcm8gaWYgYSBoaWdocGFydCBtdWx0aXBseSBp cyBzdXBwb3J0ZWQgb2YgY2FuIGJlIHN5bnRoaXNpemVkLgogICAgRm9yIHRo ZSBiZW5lZml0IG9mIGV4cGFuZF9tdWx0X2hpZ2hwYXJ0LCB0aGUgcmV0dXJu IHZhbHVlIGlzIDEgZm9yIGRpcmVjdCwKICAgIDIgZm9yIGV2ZW4vb2RkIHdp ZGVuaW5nLCBhbmQgMyBmb3IgaGkvbG8gd2lkZW5pbmcuICAqLwpAQCAtNzAw MiwyNiArNzA2MSwzMiBAQCBleHBhbmRfbXVsdF9oaWdocGFydCAobWFjaGlu ZV9tb2RlIG1vZGUsIHJ0eCBvcDAsIHJ0eCBvcDEsCiAKIC8qIFJldHVybiB0 cnVlIGlmIHRhcmdldCBzdXBwb3J0cyB2ZWN0b3IgbWFza2VkIGxvYWQvc3Rv cmUgZm9yIG1vZGUuICAqLwogYm9vbAotY2FuX3ZlY19tYXNrX2xvYWRfc3Rv cmVfcCAobWFjaGluZV9tb2RlIG1vZGUsIGJvb2wgaXNfbG9hZCkKK2Nhbl92 ZWNfbWFza19sb2FkX3N0b3JlX3AgKG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJ ICAgbWFjaGluZV9tb2RlIG1hc2tfbW9kZSwKKwkJCSAgIGJvb2wgaXNfbG9h ZCkKIHsKICAgb3B0YWIgb3AgPSBpc19sb2FkID8gbWFza2xvYWRfb3B0YWIg OiBtYXNrc3RvcmVfb3B0YWI7Ci0gIG1hY2hpbmVfbW9kZSB2bW9kZTsKICAg dW5zaWduZWQgaW50IHZlY3Rvcl9zaXplczsKIAogICAvKiBJZiBtb2RlIGlz IHZlY3RvciBtb2RlLCBjaGVjayBpdCBkaXJlY3RseS4gICovCiAgIGlmIChW RUNUT1JfTU9ERV9QIChtb2RlKSkKLSAgICByZXR1cm4gb3B0YWJfaGFuZGxl ciAob3AsIG1vZGUpICE9IENPREVfRk9SX25vdGhpbmc7CisgICAgcmV0dXJu IGNvbnZlcnRfb3B0YWJfaGFuZGxlciAob3AsIG1vZGUsIG1hc2tfbW9kZSkg IT0gQ09ERV9GT1Jfbm90aGluZzsKIAogICAvKiBPdGhlcndpc2UsIHJldHVy biB0cnVlIGlmIHRoZXJlIGlzIHNvbWUgdmVjdG9yIG1vZGUgd2l0aAogICAg ICB0aGUgbWFzayBsb2FkL3N0b3JlIHN1cHBvcnRlZC4gICovCiAKICAgLyog U2VlIGlmIHRoZXJlIGlzIGFueSBjaGFuY2UgdGhlIG1hc2sgbG9hZCBvciBz dG9yZSBtaWdodCBiZQogICAgICB2ZWN0b3JpemVkLiAgSWYgbm90LCBwdW50 LiAgKi8KLSAgdm1vZGUgPSB0YXJnZXRtLnZlY3Rvcml6ZS5wcmVmZXJyZWRf c2ltZF9tb2RlIChtb2RlKTsKLSAgaWYgKCFWRUNUT1JfTU9ERV9QICh2bW9k ZSkpCisgIG1vZGUgPSB0YXJnZXRtLnZlY3Rvcml6ZS5wcmVmZXJyZWRfc2lt ZF9tb2RlIChtb2RlKTsKKyAgaWYgKCFWRUNUT1JfTU9ERV9QIChtb2RlKSkK KyAgICByZXR1cm4gZmFsc2U7CisKKyAgbWFza19tb2RlID0gdGFyZ2V0bS52 ZWN0b3JpemUuZ2V0X21hc2tfbW9kZSAoR0VUX01PREVfTlVOSVRTIChtb2Rl KSwKKwkJCQkJICAgICAgIEdFVF9NT0RFX1NJWkUgKG1vZGUpKTsKKyAgaWYg KG1hc2tfbW9kZSA9PSBWT0lEbW9kZSkKICAgICByZXR1cm4gZmFsc2U7CiAK LSAgaWYgKG9wdGFiX2hhbmRsZXIgKG9wLCB2bW9kZSkgIT0gQ09ERV9GT1Jf bm90aGluZykKKyAgaWYgKGNvbnZlcnRfb3B0YWJfaGFuZGxlciAob3AsIG1v ZGUsIG1hc2tfbW9kZSkgIT0gQ09ERV9GT1Jfbm90aGluZykKICAgICByZXR1 cm4gdHJ1ZTsKIAogICB2ZWN0b3Jfc2l6ZXMgPSB0YXJnZXRtLnZlY3Rvcml6 ZS5hdXRvdmVjdG9yaXplX3ZlY3Rvcl9zaXplcyAoKTsKQEAgLTcwMzEsOSAr NzA5NiwxMiBAQCBjYW5fdmVjX21hc2tfbG9hZF9zdG9yZV9wIChtYWNoaW5l X21vZGUgbW9kZSwgYm9vbCBpc19sb2FkKQogICAgICAgdmVjdG9yX3NpemVz ICY9IH5jdXI7CiAgICAgICBpZiAoY3VyIDw9IEdFVF9NT0RFX1NJWkUgKG1v ZGUpKQogCWNvbnRpbnVlOwotICAgICAgdm1vZGUgPSBtb2RlX2Zvcl92ZWN0 b3IgKG1vZGUsIGN1ciAvIEdFVF9NT0RFX1NJWkUgKG1vZGUpKTsKLSAgICAg IGlmIChWRUNUT1JfTU9ERV9QICh2bW9kZSkKLQkgICYmIG9wdGFiX2hhbmRs ZXIgKG9wLCB2bW9kZSkgIT0gQ09ERV9GT1Jfbm90aGluZykKKyAgICAgIG1v ZGUgPSBtb2RlX2Zvcl92ZWN0b3IgKG1vZGUsIGN1ciAvIEdFVF9NT0RFX1NJ WkUgKG1vZGUpKTsKKyAgICAgIG1hc2tfbW9kZSA9IHRhcmdldG0udmVjdG9y aXplLmdldF9tYXNrX21vZGUgKEdFVF9NT0RFX05VTklUUyAobW9kZSksCisJ CQkJCQkgICBjdXIpOworICAgICAgaWYgKFZFQ1RPUl9NT0RFX1AgKG1vZGUp CisJICAmJiBtYXNrX21vZGUgIT0gVk9JRG1vZGUKKwkgICYmIGNvbnZlcnRf b3B0YWJfaGFuZGxlciAob3AsIG1vZGUsIG1hc2tfbW9kZSkgIT0gQ09ERV9G T1Jfbm90aGluZykKIAlyZXR1cm4gdHJ1ZTsKICAgICB9CiAgIHJldHVybiBm YWxzZTsKZGlmZiAtLWdpdCBhL2djYy9vcHRhYnMuZGVmIGIvZ2NjL29wdGFi cy5kZWYKaW5kZXggODg4YjIxYy4uOTgwNDM3OCAxMDA2NDQKLS0tIGEvZ2Nj L29wdGFicy5kZWYKKysrIGIvZ2NjL29wdGFicy5kZWYKQEAgLTYxLDYgKzYx LDEwIEBAIE9QVEFCX0NEKHZlY19sb2FkX2xhbmVzX29wdGFiLCAidmVjX2xv YWRfbGFuZXMkYSRiIikKIE9QVEFCX0NEKHZlY19zdG9yZV9sYW5lc19vcHRh YiwgInZlY19zdG9yZV9sYW5lcyRhJGIiKQogT1BUQUJfQ0QodmNvbmRfb3B0 YWIsICJ2Y29uZCRhJGIiKQogT1BUQUJfQ0QodmNvbmR1X29wdGFiLCAidmNv bmR1JGEkYiIpCitPUFRBQl9DRCh2ZWNfY21wX29wdGFiLCAidmVjX2NtcCRh JGIiKQorT1BUQUJfQ0QodmVjX2NtcHVfb3B0YWIsICJ2ZWNfY21wdSRhJGIi KQorT1BUQUJfQ0QobWFza2xvYWRfb3B0YWIsICJtYXNrbG9hZCRhJGIiKQor T1BUQUJfQ0QobWFza3N0b3JlX29wdGFiLCAibWFza3N0b3JlJGEkYiIpCiAK IE9QVEFCX05MKGFkZF9vcHRhYiwgImFkZCRQJGEzIiwgUExVUywgImFkZCIs ICczJywgZ2VuX2ludF9mcF9maXhlZF9saWJmdW5jKQogT1BUQUJfTlgoYWRk X29wdGFiLCAiYWRkJEYkYTMiKQpAQCAtMjY0LDggKzI2OCw2IEBAIE9QVEFC X0QgKHVkb3RfcHJvZF9vcHRhYiwgInVkb3RfcHJvZCRJJGEiKQogT1BUQUJf RCAodXN1bV93aWRlbl9vcHRhYiwgIndpZGVuX3VzdW0kSSRhMyIpCiBPUFRB Ql9EICh1c2FkX29wdGFiLCAidXNhZCRJJGEiKQogT1BUQUJfRCAoc3NhZF9v cHRhYiwgInNzYWQkSSRhIikKLU9QVEFCX0QgKG1hc2tsb2FkX29wdGFiLCAi bWFza2xvYWQkYSIpCi1PUFRBQl9EIChtYXNrc3RvcmVfb3B0YWIsICJtYXNr c3RvcmUkYSIpCiBPUFRBQl9EICh2ZWNfZXh0cmFjdF9vcHRhYiwgInZlY19l eHRyYWN0JGEiKQogT1BUQUJfRCAodmVjX2luaXRfb3B0YWIsICJ2ZWNfaW5p dCRhIikKIE9QVEFCX0QgKHZlY19wYWNrX3NmaXhfdHJ1bmNfb3B0YWIsICJ2 ZWNfcGFja19zZml4X3RydW5jXyRhIikKZGlmZiAtLWdpdCBhL2djYy9vcHRh YnMuaCBiL2djYy9vcHRhYnMuaAppbmRleCA5NWY1Y2JjLi5kZmU5ZWJmIDEw MDY0NAotLS0gYS9nY2Mvb3B0YWJzLmgKKysrIGIvZ2NjL29wdGFicy5oCkBA IC00OTYsNiArNDk2LDEyIEBAIGV4dGVybiBib29sIGNhbl92ZWNfcGVybV9w IChtYWNoaW5lX21vZGUsIGJvb2wsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKik7 CiBleHRlcm4gcnR4IGV4cGFuZF92ZWNfcGVybSAobWFjaGluZV9tb2RlLCBy dHgsIHJ0eCwgcnR4LCBydHgpOwogCiAvKiBSZXR1cm4gdHJlZSBpZiB0YXJn ZXQgc3VwcG9ydHMgdmVjdG9yIG9wZXJhdGlvbnMgZm9yIENPTkRfRVhQUi4g ICovCitib29sIGV4cGFuZF92ZWNfY21wX2V4cHJfcCAodHJlZSwgdHJlZSk7 CisKKy8qIEdlbmVyYXRlIGNvZGUgZm9yIFZFQ19DT05EX0VYUFIuICAqLwor ZXh0ZXJuIHJ0eCBleHBhbmRfdmVjX2NtcF9leHByICh0cmVlLCB0cmVlLCBy dHgpOworCisvKiBSZXR1cm4gdHJ1ZSBpZiB0YXJnZXQgc3VwcG9ydHMgdmVj dG9yIGNvbXBhcmlzb24uICAqLwogYm9vbCBleHBhbmRfdmVjX2NvbmRfZXhw cl9wICh0cmVlLCB0cmVlKTsKIAogLyogR2VuZXJhdGUgY29kZSBmb3IgVkVD X0NPTkRfRVhQUi4gICovCkBAIC01MDgsNyArNTE0LDcgQEAgZXh0ZXJuIGlu dCBjYW5fbXVsdF9oaWdocGFydF9wIChtYWNoaW5lX21vZGUsIGJvb2wpOwog ZXh0ZXJuIHJ0eCBleHBhbmRfbXVsdF9oaWdocGFydCAobWFjaGluZV9tb2Rl LCBydHgsIHJ0eCwgcnR4LCBib29sKTsKIAogLyogUmV0dXJuIHRydWUgaWYg dGFyZ2V0IHN1cHBvcnRzIHZlY3RvciBtYXNrZWQgbG9hZC9zdG9yZSBmb3Ig bW9kZS4gICovCi1leHRlcm4gYm9vbCBjYW5fdmVjX21hc2tfbG9hZF9zdG9y ZV9wIChtYWNoaW5lX21vZGUsIGJvb2wpOworZXh0ZXJuIGJvb2wgY2FuX3Zl Y19tYXNrX2xvYWRfc3RvcmVfcCAobWFjaGluZV9tb2RlLCBtYWNoaW5lX21v ZGUsIGJvb2wpOwogCiAvKiBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhbiBp bmxpbmUgY29tcGFyZSBhbmQgc3dhcCBwYXR0ZXJuLiAgKi8KIGV4dGVybiBi b29sIGNhbl9jb21wYXJlX2FuZF9zd2FwX3AgKG1hY2hpbmVfbW9kZSwgYm9v bCk7CmRpZmYgLS1naXQgYS9nY2MvdGFyZ2V0LmRlZiBiL2djYy90YXJnZXQu ZGVmCmluZGV4IDRlZGMyMDkuLmM1YjhlZDkgMTAwNjQ0Ci0tLSBhL2djYy90 YXJnZXQuZGVmCisrKyBiL2djYy90YXJnZXQuZGVmCkBAIC0xNzg5LDYgKzE3 ODksMTUgQEAgVGhlIGRlZmF1bHQgaXMgemVybyB3aGljaCBtZWFucyB0byBu b3QgaXRlcmF0ZSBvdmVyIG90aGVyIHZlY3RvciBzaXplcy4iLAogICh2b2lk KSwKICBkZWZhdWx0X2F1dG92ZWN0b3JpemVfdmVjdG9yX3NpemVzKQogCisv KiBGdW5jdGlvbiB0byBnZXQgYSB0YXJnZXQgbW9kZSBmb3IgYSB2ZWN0b3Ig bWFzay4gICovCitERUZIT09LCisoZ2V0X21hc2tfbW9kZSwKKyAiVGhpcyBo b29rIHJldHVybnMgbW9kZSB0byBiZSB1c2VkIGZvciBhIG1hc2sgdG8gYmUg dXNlZCBmb3IgYSB2ZWN0b3JcblwKK29mIHNwZWNpZmllZCBAdmFye2xlbmd0 aH0gd2l0aCBAdmFye251bml0c30gZWxlbWVudHMuIiwKKyBtYWNoaW5lX21v ZGUsCisgKHVuc2lnbmVkIG51bml0cywgdW5zaWduZWQgbGVuZ3RoKSwKKyBk ZWZhdWx0X2dldF9tYXNrX21vZGUpCisKIC8qIFRhcmdldCBidWlsdGluIHRo YXQgaW1wbGVtZW50cyB2ZWN0b3IgZ2F0aGVyIG9wZXJhdGlvbi4gICovCiBE RUZIT09LCiAoYnVpbHRpbl9nYXRoZXIsCmRpZmYgLS1naXQgYS9nY2MvdGFy Z2hvb2tzLmMgYi9nY2MvdGFyZ2hvb2tzLmMKaW5kZXggNzIzOGM4Zi4uNjFm Yjk3ZCAxMDA2NDQKLS0tIGEvZ2NjL3Rhcmdob29rcy5jCisrKyBiL2djYy90 YXJnaG9va3MuYwpAQCAtMTAzMyw2ICsxMDMzLDggQEAgdHJlZSBkZWZhdWx0 X21hbmdsZV9kZWNsX2Fzc2VtYmxlcl9uYW1lICh0cmVlIGRlY2wgQVRUUklC VVRFX1VOVVNFRCwKIEhPU1RfV0lERV9JTlQKIGRlZmF1bHRfdmVjdG9yX2Fs aWdubWVudCAoY29uc3RfdHJlZSB0eXBlKQogeworICBpZiAoVFJFRV9UWVBF ICh0eXBlKSA9PSBib29sZWFuX3R5cGVfbm9kZSkKKyAgICByZXR1cm4gR0VU X01PREVfQUxJR05NRU5UIChUWVBFX01PREUgKHR5cGUpKTsKICAgcmV0dXJu IHRyZWVfdG9fc2h3aSAoVFlQRV9TSVpFICh0eXBlKSk7CiB9CiAKQEAgLTEw ODcsNiArMTA4OSwyMCBAQCBkZWZhdWx0X2F1dG92ZWN0b3JpemVfdmVjdG9y X3NpemVzICh2b2lkKQogICByZXR1cm4gMDsKIH0KIAorLyogQnkgZGVmYXVs dHMgYSB2ZWN0b3Igb2YgaW50ZWdlcnMgaXMgdXNlZCBhcyBhIG1hc2suICAq LworCittYWNoaW5lX21vZGUKK2RlZmF1bHRfZ2V0X21hc2tfbW9kZSAodW5z aWduZWQgbnVuaXRzLCB1bnNpZ25lZCB2ZWN0b3Jfc2l6ZSkKK3sKKyAgdW5z aWduZWQgZWxlbV9zaXplID0gdmVjdG9yX3NpemUgLyBudW5pdHM7CisgIG1h Y2hpbmVfbW9kZSBlbGVtX21vZGUKKyAgICA9IHNtYWxsZXN0X21vZGVfZm9y X3NpemUgKGVsZW1fc2l6ZSAqIEJJVFNfUEVSX1VOSVQsIE1PREVfSU5UKTsK KworICBnY2NfYXNzZXJ0IChlbGVtX3NpemUgKiBudW5pdHMgPT0gdmVjdG9y X3NpemUpOworCisgIHJldHVybiBtb2RlX2Zvcl92ZWN0b3IgKGVsZW1fbW9k ZSwgbnVuaXRzKTsKK30KKwogLyogQnkgZGVmYXVsdCwgdGhlIGNvc3QgbW9k ZWwgYWNjdW11bGF0ZXMgdGhyZWUgc2VwYXJhdGUgY29zdHMgKHByb2xvZ3Vl LAogICAgbG9vcCBib2R5LCBhbmQgZXBpbG9ndWUpIGZvciBhIHZlY3Rvcml6 ZWQgbG9vcCBvciBibG9jay4gIFNvIGFsbG9jYXRlIGFuCiAgICBhcnJheSBv ZiB0aHJlZSB1bnNpZ25lZCBpbnRzLCBzZXQgaXQgdG8gemVybywgYW5kIHJl dHVybiBpdHMgYWRkcmVzcy4gICovCmRpZmYgLS1naXQgYS9nY2MvdGFyZ2hv b2tzLmggYi9nY2MvdGFyZ2hvb2tzLmgKaW5kZXggNWFlOTkxZC4uY2M3MjYz ZiAxMDA2NDQKLS0tIGEvZ2NjL3Rhcmdob29rcy5oCisrKyBiL2djYy90YXJn aG9va3MuaApAQCAtMTAwLDYgKzEwMCw3IEBAIGRlZmF1bHRfYnVpbHRpbl9z dXBwb3J0X3ZlY3Rvcl9taXNhbGlnbm1lbnQgKG1hY2hpbmVfbW9kZSBtb2Rl LAogCQkJCQkgICAgIGludCwgYm9vbCk7CiBleHRlcm4gbWFjaGluZV9tb2Rl IGRlZmF1bHRfcHJlZmVycmVkX3NpbWRfbW9kZSAobWFjaGluZV9tb2RlIG1v ZGUpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBkZWZhdWx0X2F1dG92ZWN0b3Jp emVfdmVjdG9yX3NpemVzICh2b2lkKTsKK2V4dGVybiBtYWNoaW5lX21vZGUg ZGVmYXVsdF9nZXRfbWFza19tb2RlICh1bnNpZ25lZCwgdW5zaWduZWQpOwog ZXh0ZXJuIHZvaWQgKmRlZmF1bHRfaW5pdF9jb3N0IChzdHJ1Y3QgbG9vcCAq KTsKIGV4dGVybiB1bnNpZ25lZCBkZWZhdWx0X2FkZF9zdG10X2Nvc3QgKHZv aWQgKiwgaW50LCBlbnVtIHZlY3RfY29zdF9mb3Jfc3RtdCwKIAkJCQkgICAg ICAgc3RydWN0IF9zdG10X3ZlY19pbmZvICosIGludCwKZGlmZiAtLWdpdCBh L2djYy90cmVlLWNmZy5jIGIvZ2NjL3RyZWUtY2ZnLmMKaW5kZXggNWFjNzNi My4uMWVlOGY5MyAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtY2ZnLmMKKysrIGIv Z2NjL3RyZWUtY2ZnLmMKQEAgLTM0OTAsNiArMzQ5MCwyNyBAQCB2ZXJpZnlf Z2ltcGxlX2NvbXBhcmlzb24gKHRyZWUgdHlwZSwgdHJlZSBvcDAsIHRyZWUg b3AxKQogICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg fQorICAvKiBPciBhIGJvb2xlYW4gdmVjdG9yIHR5cGUgd2l0aCB0aGUgc2Ft ZSBlbGVtZW50IGNvdW50CisgICAgIGFzIHRoZSBjb21wYXJpc29uIG9wZXJh bmQgdHlwZXMuICAqLworICBlbHNlIGlmIChUUkVFX0NPREUgKHR5cGUpID09 IFZFQ1RPUl9UWVBFCisJICAgJiYgVFJFRV9DT0RFIChUUkVFX1RZUEUgKHR5 cGUpKSA9PSBCT09MRUFOX1RZUEUpCisgICAgeworICAgICAgaWYgKFRSRUVf Q09ERSAob3AwX3R5cGUpICE9IFZFQ1RPUl9UWVBFCisJICB8fCBUUkVFX0NP REUgKG9wMV90eXBlKSAhPSBWRUNUT1JfVFlQRSkKKyAgICAgICAgeworICAg ICAgICAgIGVycm9yICgibm9uLXZlY3RvciBvcGVyYW5kcyBpbiB2ZWN0b3Ig Y29tcGFyaXNvbiIpOworICAgICAgICAgIGRlYnVnX2dlbmVyaWNfZXhwciAo b3AwX3R5cGUpOworICAgICAgICAgIGRlYnVnX2dlbmVyaWNfZXhwciAob3Ax X3R5cGUpOworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisK KyAgICAgIGlmIChUWVBFX1ZFQ1RPUl9TVUJQQVJUUyAodHlwZSkgIT0gVFlQ RV9WRUNUT1JfU1VCUEFSVFMgKG9wMF90eXBlKSkKKyAgICAgICAgeworICAg ICAgICAgIGVycm9yICgiaW52YWxpZCB2ZWN0b3IgY29tcGFyaXNvbiByZXN1 bHRpbmcgdHlwZSIpOworICAgICAgICAgIGRlYnVnX2dlbmVyaWNfZXhwciAo dHlwZSk7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg ICB9CiAgIGVsc2UKICAgICB7CiAgICAgICBlcnJvciAoImJvZ3VzIGNvbXBh cmlzb24gcmVzdWx0IHR5cGUiKTsKZGlmZiAtLWdpdCBhL2djYy90cmVlLWlm LWNvbnYuYyBiL2djYy90cmVlLWlmLWNvbnYuYwppbmRleCAyOTFlNjAyLi5k NjY1MTdkIDEwMDY0NAotLS0gYS9nY2MvdHJlZS1pZi1jb252LmMKKysrIGIv Z2NjL3RyZWUtaWYtY29udi5jCkBAIC04MTEsNyArODExLDcgQEAgaWZjdnRf Y2FuX3VzZV9tYXNrX2xvYWRfc3RvcmUgKGdpbXBsZSBzdG10KQogICAgICAg fHwgVkVDVE9SX01PREVfUCAobW9kZSkpCiAgICAgcmV0dXJuIGZhbHNlOwog Ci0gIGlmIChjYW5fdmVjX21hc2tfbG9hZF9zdG9yZV9wIChtb2RlLCBpc19s b2FkKSkKKyAgaWYgKGNhbl92ZWNfbWFza19sb2FkX3N0b3JlX3AgKG1vZGUs IFZPSURtb2RlLCBpc19sb2FkKSkKICAgICByZXR1cm4gdHJ1ZTsKIAogICBy ZXR1cm4gZmFsc2U7CkBAIC0yMDY4LDcgKzIwNjgsNyBAQCBwcmVkaWNhdGVf bWVtX3dyaXRlcyAobG9vcF9wIGxvb3ApCiAJICB7CiAJICAgIHRyZWUgbGhz ID0gZ2ltcGxlX2Fzc2lnbl9saHMgKHN0bXQpOwogCSAgICB0cmVlIHJocyA9 IGdpbXBsZV9hc3NpZ25fcmhzMSAoc3RtdCk7Ci0JICAgIHRyZWUgcmVmLCBh ZGRyLCBwdHIsIG1hc2t0eXBlLCBtYXNrX29wMCwgbWFza19vcDEsIG1hc2s7 CisJICAgIHRyZWUgcmVmLCBhZGRyLCBwdHIsIG1hc2t0eXBlLCBtYXNrOwog CSAgICBnaW1wbGUgbmV3X3N0bXQ7CiAJICAgIGludCBiaXRzaXplID0gR0VU X01PREVfQklUU0laRSAoVFlQRV9NT0RFIChUUkVFX1RZUEUgKGxocykpKTsK IAkgICAgcmVmID0gVFJFRV9DT0RFIChsaHMpID09IFNTQV9OQU1FID8gcmhz IDogbGhzOwpAQCAtMjA4MiwxNSArMjA4Miw0NyBAQCBwcmVkaWNhdGVfbWVt X3dyaXRlcyAobG9vcF9wIGxvb3ApCiAJICAgICAgbWFzayA9IHZlY3RfbWFz a3NbaW5kZXhdOwogCSAgICBlbHNlCiAJICAgICAgewotCQltYXNrdHlwZSA9 IGJ1aWxkX25vbnN0YW5kYXJkX2ludGVnZXJfdHlwZSAoYml0c2l6ZSwgMSk7 Ci0JCW1hc2tfb3AwID0gYnVpbGRfaW50X2NzdCAobWFza3R5cGUsIHN3YXAg PyAwIDogLTEpOwotCQltYXNrX29wMSA9IGJ1aWxkX2ludF9jc3QgKG1hc2t0 eXBlLCBzd2FwID8gLTEgOiAwKTsKLQkJY29uZCA9IGZvcmNlX2dpbXBsZV9v cGVyYW5kX2dzaV8xICgmZ3NpLCB1bnNoYXJlX2V4cHIgKGNvbmQpLAotCQkJ CQkJICAgaXNfZ2ltcGxlX2NvbmRleHByLAotCQkJCQkJICAgTlVMTF9UUkVF LAotCQkJCQkJICAgdHJ1ZSwgR1NJX1NBTUVfU1RNVCk7Ci0JCW1hc2sgPSBm b2xkX2J1aWxkX2NvbmRfZXhwciAobWFza3R5cGUsIHVuc2hhcmVfZXhwciAo Y29uZCksCi0JCQkJCSAgICAgbWFza19vcDAsIG1hc2tfb3AxKTsKKwkJbWFz a3R5cGUgPSBib29sZWFuX3R5cGVfbm9kZTsKKwkJaWYgKChUUkVFX0NPREUg KGNvbmQpID09IE5FX0VYUFIKKwkJICAgICB8fCBUUkVFX0NPREUgKGNvbmQp ID09IEVRX0VYUFIpCisJCSAgICAmJiAoaW50ZWdlcl96ZXJvcCAoVFJFRV9P UEVSQU5EIChjb25kLCAxKSkKKwkJCXx8IGludGVnZXJfb25lcCAoVFJFRV9P UEVSQU5EIChjb25kLCAxKSkpCisJCSAgICAmJiBUUkVFX0NPREUgKFRSRUVf VFlQRSAoVFJFRV9PUEVSQU5EIChjb25kLCAwKSkpCisJCSAgICAgICA9PSBC T09MRUFOX1RZUEUpCisJCSAgeworCQkgICAgYm9vbCBuZWdhdGUgPSAoVFJF RV9DT0RFIChjb25kKSA9PSBFUV9FWFBSKTsKKwkJICAgIGlmIChpbnRlZ2Vy X29uZXAgKFRSRUVfT1BFUkFORCAoY29uZCwgMSkpKQorCQkgICAgICBuZWdh dGUgPSAhbmVnYXRlOworCQkgICAgaWYgKHN3YXApCisJCSAgICAgIG5lZ2F0 ZSA9ICFuZWdhdGU7CisJCSAgICBtYXNrID0gVFJFRV9PUEVSQU5EIChjb25k LCAwKTsKKwkJICAgIGlmIChuZWdhdGUpCisJCSAgICAgIHsKKwkJCW1hc2sg PSBpZmNfdGVtcF92YXIgKG1hc2t0eXBlLCB1bnNoYXJlX2V4cHIgKGNvbmQp LAorCQkJCQkgICAgICZnc2kpOworCQkJbWFzayA9IGJ1aWxkMSAoVFJVVEhf Tk9UX0VYUFIsIG1hc2t0eXBlLCBtYXNrKTsKKwkJICAgICAgfQorCQkgIH0K KwkJZWxzZSBpZiAoc3dhcCAmJgorCQkJIFRSRUVfQ09ERV9DTEFTUyAoVFJF RV9DT0RFIChjb25kKSkgPT0gdGNjX2NvbXBhcmlzb24pCisJCSAgeworCQkg ICAgdHJlZSBvcF90eXBlID0gVFJFRV9UWVBFIChUUkVFX09QRVJBTkQgKGNv bmQsIDApKTsKKwkJICAgIHRyZWVfY29kZSBjb2RlCisJCSAgICAgID0gaW52 ZXJ0X3RyZWVfY29tcGFyaXNvbiAoVFJFRV9DT0RFIChjb25kKSwKKwkJCQkJ CUhPTk9SX05BTlMgKG9wX3R5cGUpKTsKKwkJICAgIGlmIChjb2RlICE9IEVS Uk9SX01BUkspCisJCQltYXNrID0gYnVpbGQyIChjb2RlLCBUUkVFX1RZUEUg KGNvbmQpLAorCQkJCSAgICAgICBUUkVFX09QRVJBTkQgKGNvbmQsIDApLAor CQkJCSAgICAgICBUUkVFX09QRVJBTkQgKGNvbmQsIDEpKTsKKwkJICAgIGVs c2UKKwkJICAgICAgeworCQkJbWFzayA9IGlmY190ZW1wX3ZhciAobWFza3R5 cGUsIHVuc2hhcmVfZXhwciAoY29uZCksCisJCQkJCSAgICAgJmdzaSk7CisJ CQltYXNrID0gYnVpbGQxIChUUlVUSF9OT1RfRVhQUiwgbWFza3R5cGUsIG1h c2spOworCQkgICAgICB9CisJCSAgfQorCQllbHNlCisJCSAgbWFzayA9IHVu c2hhcmVfZXhwciAoY29uZCk7CiAJCW1hc2sgPSBpZmNfdGVtcF92YXIgKG1h c2t0eXBlLCBtYXNrLCAmZ3NpKTsKIAkJLyogU2F2ZSBtYXNrIGFuZCBpdHMg c2l6ZSBmb3IgZnVydGhlciB1c2UuICAqLwogCSAgICAgICAgdmVjdF9zaXpl cy5zYWZlX3B1c2ggKGJpdHNpemUpOwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUt dmVjdC1kYXRhLXJlZnMuYyBiL2djYy90cmVlLXZlY3QtZGF0YS1yZWZzLmMK aW5kZXggZjFlYWVmNC4uYjNiOTcwYSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUt dmVjdC1kYXRhLXJlZnMuYworKysgYi9nY2MvdHJlZS12ZWN0LWRhdGEtcmVm cy5jCkBAIC0zODQ5LDYgKzM4NDksOSBAQCB2ZWN0X2dldF9uZXdfdmVjdF92 YXIgKHRyZWUgdHlwZSwgZW51bSB2ZWN0X3Zhcl9raW5kIHZhcl9raW5kLCBj b25zdCBjaGFyICpuYW1lKQogICBjYXNlIHZlY3Rfc2NhbGFyX3ZhcjoKICAg ICBwcmVmaXggPSAic3RtcCI7CiAgICAgYnJlYWs7CisgIGNhc2UgdmVjdF9t YXNrX3ZhcjoKKyAgICBwcmVmaXggPSAibWFzayI7CisgICAgYnJlYWs7CiAg IGNhc2UgdmVjdF9wb2ludGVyX3ZhcjoKICAgICBwcmVmaXggPSAidmVjdHAi OwogICAgIGJyZWFrOwpAQCAtNDQwMyw3ICs0NDA2LDExIEBAIHZlY3RfY3Jl YXRlX2Rlc3RpbmF0aW9uX3ZhciAodHJlZSBzY2FsYXJfZGVzdCwgdHJlZSB2 ZWN0eXBlKQogICB0cmVlIHR5cGU7CiAgIGVudW0gdmVjdF92YXJfa2luZCBr aW5kOwogCi0gIGtpbmQgPSB2ZWN0eXBlID8gdmVjdF9zaW1wbGVfdmFyIDog dmVjdF9zY2FsYXJfdmFyOworICBraW5kID0gdmVjdHlwZQorICAgID8gVFJF RV9UWVBFICh2ZWN0eXBlKSA9PSBib29sZWFuX3R5cGVfbm9kZQorICAgID8g dmVjdF9tYXNrX3ZhcgorICAgIDogdmVjdF9zaW1wbGVfdmFyCisgICAgOiB2 ZWN0X3NjYWxhcl92YXI7CiAgIHR5cGUgPSB2ZWN0eXBlID8gdmVjdHlwZSA6 IFRSRUVfVFlQRSAoc2NhbGFyX2Rlc3QpOwogCiAgIGdjY19hc3NlcnQgKFRS RUVfQ09ERSAoc2NhbGFyX2Rlc3QpID09IFNTQV9OQU1FKTsKZGlmZiAtLWdp dCBhL2djYy90cmVlLXZlY3QtZ2VuZXJpYy5jIGIvZ2NjL3RyZWUtdmVjdC1n ZW5lcmljLmMKaW5kZXggYmUzZDI3Zi4uOTIxOGNhNSAxMDA2NDQKLS0tIGEv Z2NjL3RyZWUtdmVjdC1nZW5lcmljLmMKKysrIGIvZ2NjL3RyZWUtdmVjdC1n ZW5lcmljLmMKQEAgLTM1MCw3ICszNTAsOCBAQCBleHBhbmRfdmVjdG9yX2Nv bXBhcmlzb24gKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksIHRyZWUgdHlw ZSwgdHJlZSBvcDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUg b3AxLCBlbnVtIHRyZWVfY29kZSBjb2RlKQogewogICB0cmVlIHQ7Ci0gIGlm ICghIGV4cGFuZF92ZWNfY29uZF9leHByX3AgKHR5cGUsIFRSRUVfVFlQRSAo b3AwKSkpCisgIGlmICghZXhwYW5kX3ZlY19jbXBfZXhwcl9wIChUUkVFX1RZ UEUgKG9wMCksIHR5cGUpCisgICAgICAmJiAhZXhwYW5kX3ZlY19jb25kX2V4 cHJfcCAodHlwZSwgVFJFRV9UWVBFIChvcDApKSkKICAgICB0ID0gZXhwYW5k X3ZlY3Rvcl9waWVjZXdpc2UgKGdzaSwgZG9fY29tcGFyZSwgdHlwZSwKIAkJ CQkgVFJFRV9UWVBFIChUUkVFX1RZUEUgKG9wMCkpLCBvcDAsIG9wMSwgY29k ZSk7CiAgIGVsc2UKQEAgLTE1MDYsNiArMTUwNywxMSBAQCBleHBhbmRfdmVj dG9yX29wZXJhdGlvbnNfMSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSkK ICAgaWYgKFRSRUVfQ09ERSAodHlwZSkgIT0gVkVDVE9SX1RZUEUpCiAgICAg cmV0dXJuOwogCisgIC8qIEEgc2NhbGFyIG9wZXJhdGlvbiBwcmV0ZW5kaW5n IHRvIGJlIGEgdmVjdG9yIG9uZS4gICovCisgIGlmIChUUkVFX1RZUEUgKHR5 cGUpID09IGJvb2xlYW5fdHlwZV9ub2RlCisgICAgICAmJiAhVkVDVE9SX01P REVfUCAoVFlQRV9NT0RFICh0eXBlKSkpCisgICAgcmV0dXJuOworCiAgIGlm IChDT05WRVJUX0VYUFJfQ09ERV9QIChjb2RlKQogICAgICAgfHwgY29kZSA9 PSBGTE9BVF9FWFBSCiAgICAgICB8fCBjb2RlID09IEZJWF9UUlVOQ19FWFBS CmRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0LWxvb3AuYyBiL2djYy90cmVl LXZlY3QtbG9vcC5jCmluZGV4IDU5Yzc1YWYuLmYyZGJjNGUgMTAwNjQ0Ci0t LSBhL2djYy90cmVlLXZlY3QtbG9vcC5jCisrKyBiL2djYy90cmVlLXZlY3Qt bG9vcC5jCkBAIC0xOTMsMTkgKzE5MywyMSBAQCB2ZWN0X2RldGVybWluZV92 ZWN0b3JpemF0aW9uX2ZhY3RvciAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZv KQogewogICBzdHJ1Y3QgbG9vcCAqbG9vcCA9IExPT1BfVklORk9fTE9PUCAo bG9vcF92aW5mbyk7CiAgIGJhc2ljX2Jsb2NrICpiYnMgPSBMT09QX1ZJTkZP X0JCUyAobG9vcF92aW5mbyk7Ci0gIGludCBuYmJzID0gbG9vcC0+bnVtX25v ZGVzOworICB1bnNpZ25lZCBuYmJzID0gbG9vcC0+bnVtX25vZGVzOwogICB1 bnNpZ25lZCBpbnQgdmVjdG9yaXphdGlvbl9mYWN0b3IgPSAwOwogICB0cmVl IHNjYWxhcl90eXBlOwogICBncGhpICpwaGk7CiAgIHRyZWUgdmVjdHlwZTsK ICAgdW5zaWduZWQgaW50IG51bml0czsKICAgc3RtdF92ZWNfaW5mbyBzdG10 X2luZm87Ci0gIGludCBpOworICB1bnNpZ25lZCBpOwogICBIT1NUX1dJREVf SU5UIGR1bW15OwogICBnaW1wbGUgc3RtdCwgcGF0dGVybl9zdG10ID0gTlVM TDsKICAgZ2ltcGxlX3NlcSBwYXR0ZXJuX2RlZl9zZXEgPSBOVUxMOwogICBn aW1wbGVfc3RtdF9pdGVyYXRvciBwYXR0ZXJuX2RlZl9zaSA9IGdzaV9ub25l ICgpOwogICBib29sIGFuYWx5emVfcGF0dGVybl9zdG10ID0gZmFsc2U7Cisg IGJvb2wgYm9vbF9yZXN1bHQ7CisgIGF1dG9fdmVjPHN0bXRfdmVjX2luZm8+ IG1hc2tfcHJvZHVjZXJzOwogCiAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkK ICAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9u LApAQCAtNDI0LDYgKzQyNiw4IEBAIHZlY3RfZGV0ZXJtaW5lX3ZlY3Rvcml6 YXRpb25fZmFjdG9yIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8pCiAJICAg ICAgcmV0dXJuIGZhbHNlOwogCSAgICB9CiAKKwkgIGJvb2xfcmVzdWx0ID0g ZmFsc2U7CisKIAkgIGlmIChTVE1UX1ZJTkZPX1ZFQ1RZUEUgKHN0bXRfaW5m bykpCiAJICAgIHsKIAkgICAgICAvKiBUaGUgb25seSBjYXNlIHdoZW4gYSB2 ZWN0eXBlIGhhZCBiZWVuIGFscmVhZHkgc2V0IGlzIGZvciBzdG10cwpAQCAt NDQ0LDYgKzQ0OCwzMCBAQCB2ZWN0X2RldGVybWluZV92ZWN0b3JpemF0aW9u X2ZhY3RvciAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvKQogCQlzY2FsYXJf dHlwZSA9IFRSRUVfVFlQRSAoZ2ltcGxlX2NhbGxfYXJnIChzdG10LCAzKSk7 CiAJICAgICAgZWxzZQogCQlzY2FsYXJfdHlwZSA9IFRSRUVfVFlQRSAoZ2lt cGxlX2dldF9saHMgKHN0bXQpKTsKKworCSAgICAgIC8qIEJvb2wgb3BzIGRv bid0IHBhcnRpY2lwYXRlIGluIHZlY3Rvcml6YXRpb24gZmFjdG9yCisJCSBj b21wdXRhdGlvbi4gIEZvciBjb21wYXJpc29uIHVzZSBjb21wYXJlZCB0eXBl cyB0bworCQkgY29tcHV0ZSBhIGZhY3Rvci4gICovCisJICAgICAgaWYgKHNj YWxhcl90eXBlID09IGJvb2xlYW5fdHlwZV9ub2RlKQorCQl7CisJCSAgbWFz a19wcm9kdWNlcnMuc2FmZV9wdXNoIChzdG10X2luZm8pOworCQkgIGJvb2xf cmVzdWx0ID0gdHJ1ZTsKKworCQkgIGlmIChnaW1wbGVfY29kZSAoc3RtdCkg PT0gR0lNUExFX0FTU0lHTgorCQkgICAgICAmJiBUUkVFX0NPREVfQ0xBU1Mg KGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKHN0bXQpKSA9PSB0Y2NfY29tcGFy aXNvbgorCQkgICAgICAmJiBUUkVFX1RZUEUgKGdpbXBsZV9hc3NpZ25fcmhz MSAoc3RtdCkpICE9IGJvb2xlYW5fdHlwZV9ub2RlKQorCQkgICAgc2NhbGFy X3R5cGUgPSBUUkVFX1RZUEUgKGdpbXBsZV9hc3NpZ25fcmhzMSAoc3RtdCkp OworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgaWYgKCFhbmFseXplX3Bh dHRlcm5fc3RtdCAmJiBnc2lfZW5kX3AgKHBhdHRlcm5fZGVmX3NpKSkKKwkJ CXsKKwkJCSAgcGF0dGVybl9kZWZfc2VxID0gTlVMTDsKKwkJCSAgZ3NpX25l eHQgKCZzaSk7CisJCQl9CisJCSAgICAgIGNvbnRpbnVlOworCQkgICAgfQor CQl9CisKIAkgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCiAJCXsKIAkJ ICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLApA QCAtNDY2LDcgKzQ5NCw4IEBAIHZlY3RfZGV0ZXJtaW5lX3ZlY3Rvcml6YXRp b25fZmFjdG9yIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8pCiAJCSAgcmV0 dXJuIGZhbHNlOwogCQl9CiAKLQkgICAgICBTVE1UX1ZJTkZPX1ZFQ1RZUEUg KHN0bXRfaW5mbykgPSB2ZWN0eXBlOworCSAgICAgIGlmICghYm9vbF9yZXN1 bHQpCisJCVNUTVRfVklORk9fVkVDVFlQRSAoc3RtdF9pbmZvKSA9IHZlY3R5 cGU7CiAKIAkgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCiAJCXsKQEAg LTQ3OSw4ICs1MDgsOSBAQCB2ZWN0X2RldGVybWluZV92ZWN0b3JpemF0aW9u X2ZhY3RvciAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvKQogCSAgLyogVGhl IHZlY3Rvcml6YXRpb24gZmFjdG9yIGlzIGFjY29yZGluZyB0byB0aGUgc21h bGxlc3QKIAkgICAgIHNjYWxhciB0eXBlIChvciB0aGUgbGFyZ2VzdCB2ZWN0 b3Igc2l6ZSwgYnV0IHdlIG9ubHkKIAkgICAgIHN1cHBvcnQgb25lIHZlY3Rv ciBzaXplIHBlciBsb29wKS4gICovCi0JICBzY2FsYXJfdHlwZSA9IHZlY3Rf Z2V0X3NtYWxsZXN0X3NjYWxhcl90eXBlIChzdG10LCAmZHVtbXksCi0JCQkJ CQkgICAgICAgJmR1bW15KTsKKwkgIGlmICghYm9vbF9yZXN1bHQpCisJICAg IHNjYWxhcl90eXBlID0gdmVjdF9nZXRfc21hbGxlc3Rfc2NhbGFyX3R5cGUg KHN0bXQsICZkdW1teSwKKwkJCQkJCQkgJmR1bW15KTsKIAkgIGlmIChkdW1w X2VuYWJsZWRfcCAoKSkKIAkgICAgewogCSAgICAgIGR1bXBfcHJpbnRmX2xv YyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sCkBAIC01NTUsNiArNTg1LDEw MCBAQCB2ZWN0X2RldGVybWluZV92ZWN0b3JpemF0aW9uX2ZhY3RvciAobG9v cF92ZWNfaW5mbyBsb29wX3ZpbmZvKQogICAgIH0KICAgTE9PUF9WSU5GT19W RUNUX0ZBQ1RPUiAobG9vcF92aW5mbykgPSB2ZWN0b3JpemF0aW9uX2ZhY3Rv cjsKIAorICBmb3IgKGkgPSAwOyBpIDwgbWFza19wcm9kdWNlcnMubGVuZ3Ro ICgpOyBpKyspCisgICAgeworICAgICAgdHJlZSBtYXNrX3R5cGUgPSBOVUxM OworICAgICAgYmJfdmVjX2luZm8gYmJfdmluZm8gPSBTVE1UX1ZJTkZPX0JC X1ZJTkZPIChtYXNrX3Byb2R1Y2Vyc1tpXSk7CisKKyAgICAgIHN0bXQgPSBT VE1UX1ZJTkZPX1NUTVQgKG1hc2tfcHJvZHVjZXJzW2ldKTsKKworICAgICAg aWYgKGdpbXBsZV9jb2RlIChzdG10KSA9PSBHSU1QTEVfQVNTSUdOCisJICAm JiBUUkVFX0NPREVfQ0xBU1MgKGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKHN0 bXQpKSA9PSB0Y2NfY29tcGFyaXNvbgorCSAgJiYgVFJFRV9UWVBFIChnaW1w bGVfYXNzaWduX3JoczEgKHN0bXQpKSAhPSBib29sZWFuX3R5cGVfbm9kZSkK Kwl7CisJICBzY2FsYXJfdHlwZSA9IFRSRUVfVFlQRSAoZ2ltcGxlX2Fzc2ln bl9yaHMxIChzdG10KSk7CisJICBtYXNrX3R5cGUgPSBnZXRfbWFza190eXBl X2Zvcl9zY2FsYXJfdHlwZSAoc2NhbGFyX3R5cGUpOworCisJICBpZiAoIW1h c2tfdHlwZSkKKwkgICAgeworCSAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAo KSkKKwkJZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElP TiwgdmVjdF9sb2NhdGlvbiwKKwkJCQkgIm5vdCB2ZWN0b3JpemVkOiB1bnN1 cHBvcnRlZCBtYXNrXG4iKTsKKwkgICAgICByZXR1cm4gZmFsc2U7CisJICAg IH0KKwl9CisgICAgICBlbHNlCisJeworCSAgdHJlZSByaHMsIGRlZjsKKwkg IHNzYV9vcF9pdGVyIGl0ZXI7CisJICBnaW1wbGUgZGVmX3N0bXQ7CisJICBl bnVtIHZlY3RfZGVmX3R5cGUgZHQ7CisKKwkgIEZPUl9FQUNIX1NTQV9UUkVF X09QRVJBTkQgKHJocywgc3RtdCwgaXRlciwgU1NBX09QX1VTRSkKKwkgICAg eworCSAgICAgIGlmICghdmVjdF9pc19zaW1wbGVfdXNlXzEgKHJocywgc3Rt dCwgbG9vcF92aW5mbywgYmJfdmluZm8sCisJCQkJCSAmZGVmX3N0bXQsICZk ZWYsICZkdCwgJnZlY3R5cGUpKQorCQl7CisJCSAgaWYgKGR1bXBfZW5hYmxl ZF9wICgpKQorCQkgICAgeworCQkgICAgICBkdW1wX3ByaW50Zl9sb2MgKE1T R19NSVNTRURfT1BUSU1JWkFUSU9OLCB2ZWN0X2xvY2F0aW9uLAorCQkJCSAg ICAgICAibm90IHZlY3Rvcml6ZWQ6IGNhbid0IGNvbXB1dGUgbWFzayB0eXBl ICIKKwkJCQkgICAgICAgImZvciBzdGF0ZW1lbnQsICIpOworCQkgICAgICBk dW1wX2dpbXBsZV9zdG10IChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgIFRE Rl9TTElNLCBzdG10LAorCQkJCQkwKTsKKwkJICAgICAgZHVtcF9wcmludGYg KE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCAiXG4iKTsKKwkJICAgIH0KKwkJ ICByZXR1cm4gZmFsc2U7CisJCX0KKworCSAgICAgIC8qIE5vIHZlY3R5cGUg cHJvYmFibHkgbWVhbnMgZXh0ZXJuYWwgZGVmaW5pdGlvbi4KKwkJIEFsbG93 IGl0IGluIGNhc2UgdGhlcmUgaXMgYW5vdGhlciBvcGVyYW5kIHdoaWNoCisJ CSBhbGxvd3MgdG8gZGV0ZXJtaW5lIG1hc2sgdHlwZS4gICovCisJICAgICAg aWYgKCF2ZWN0eXBlKQorCQljb250aW51ZTsKKworCSAgICAgIGlmICghbWFz a190eXBlKQorCQltYXNrX3R5cGUgPSB2ZWN0eXBlOworCSAgICAgIGVsc2Ug aWYgKFRZUEVfVkVDVE9SX1NVQlBBUlRTIChtYXNrX3R5cGUpCisJCSAgICAg ICAhPSBUWVBFX1ZFQ1RPUl9TVUJQQVJUUyAodmVjdHlwZSkpCisJCXsKKwkJ ICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCisJCSAgICB7CisJCSAgICAgIGR1 bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIHZlY3Rf bG9jYXRpb24sCisJCQkJICAgICAgICJub3QgdmVjdG9yaXplZDogZGlmZmVy ZW50IHNpemVkIG1hc2tzICIKKwkJCQkgICAgICAgInR5cGVzIGluIHN0YXRl bWVudCwgIik7CisJCSAgICAgIGR1bXBfZ2VuZXJpY19leHByIChNU0dfTUlT U0VEX09QVElNSVpBVElPTiwgVERGX1NMSU0sCisJCQkJCSBtYXNrX3R5cGUp OworCQkgICAgICBkdW1wX3ByaW50ZiAoTVNHX01JU1NFRF9PUFRJTUlaQVRJ T04sICIgYW5kICIpOworCQkgICAgICBkdW1wX2dlbmVyaWNfZXhwciAoTVNH X01JU1NFRF9PUFRJTUlaQVRJT04sIFRERl9TTElNLAorCQkJCQkgdmVjdHlw ZSk7CisJCSAgICAgIGR1bXBfcHJpbnRmIChNU0dfTUlTU0VEX09QVElNSVpB VElPTiwgIlxuIik7CisJCSAgICB9CisJCSAgcmV0dXJuIGZhbHNlOworCQl9 CisJICAgIH0KKwl9CisKKyAgICAgIC8qIE5vIG1hc2tfdHlwZSBzaG91bGQg bWVhbiBsb29wIGludmFyaWFudCBwcmVkaWNhdGUuCisJIFRoaXMgaXMgcHJv YmFibHkgYSBzdWJqZWN0IGZvciBvcHRpbWl6YXRpb24gaW4KKwkgaWYtY29u dmVyc2lvbi4gICovCisgICAgICBpZiAoIW1hc2tfdHlwZSkKKwl7CisJICBp ZiAoZHVtcF9lbmFibGVkX3AgKCkpCisJICAgIHsKKwkgICAgICBkdW1wX3By aW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCB2ZWN0X2xvY2F0 aW9uLAorCQkJICAgICAgICJub3QgdmVjdG9yaXplZDogY2FuJ3QgY29tcHV0 ZSBtYXNrIHR5cGUgIgorCQkJICAgICAgICJmb3Igc3RhdGVtZW50LCAiKTsK KwkgICAgICBkdW1wX2dpbXBsZV9zdG10IChNU0dfTUlTU0VEX09QVElNSVpB VElPTiwgIFRERl9TTElNLCBzdG10LAorCQkJCTApOworCSAgICAgIGR1bXBf cHJpbnRmIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgIlxuIik7CisJICAg IH0KKwkgIHJldHVybiBmYWxzZTsKKwl9CisKKyAgICAgIFNUTVRfVklORk9f VkVDVFlQRSAobWFza19wcm9kdWNlcnNbaV0pID0gbWFza190eXBlOworICAg IH0KKwogICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvZ2NjL3Ry ZWUtdmVjdC1zdG10cy5jIGIvZ2NjL3RyZWUtdmVjdC1zdG10cy5jCmluZGV4 IGY4N2MwNjYuLjg1MjU5ZDkgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXZlY3Qt c3RtdHMuYworKysgYi9nY2MvdHJlZS12ZWN0LXN0bXRzLmMKQEAgLTEzMTYs MjcgKzEzMTYsNjEgQEAgdmVjdF9pbml0X3ZlY3Rvcl8xIChnaW1wbGUgc3Rt dCwgZ2ltcGxlIG5ld19zdG10LCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3Np KQogdHJlZQogdmVjdF9pbml0X3ZlY3RvciAoZ2ltcGxlIHN0bXQsIHRyZWUg dmFsLCB0cmVlIHR5cGUsIGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2kpCiB7 CisgIHRyZWUgdmFsX3R5cGUgPSBUUkVFX1RZUEUgKHZhbCk7CisgIG1hY2hp bmVfbW9kZSBtb2RlID0gVFlQRV9NT0RFICh0eXBlKTsKKyAgbWFjaGluZV9t b2RlIHZhbF9tb2RlID0gVFlQRV9NT0RFKHZhbF90eXBlKTsKICAgdHJlZSBu ZXdfdmFyOwogICBnaW1wbGUgaW5pdF9zdG10OwogICB0cmVlIHZlY19vcHJu ZDsKICAgdHJlZSBuZXdfdGVtcDsKIAogICBpZiAoVFJFRV9DT0RFICh0eXBl KSA9PSBWRUNUT1JfVFlQRQotICAgICAgJiYgVFJFRV9DT0RFIChUUkVFX1RZ UEUgKHZhbCkpICE9IFZFQ1RPUl9UWVBFKQotICAgIHsKLSAgICAgIGlmICgh dHlwZXNfY29tcGF0aWJsZV9wIChUUkVFX1RZUEUgKHR5cGUpLCBUUkVFX1RZ UEUgKHZhbCkpKQorICAgICAgJiYgVFJFRV9DT0RFICh2YWxfdHlwZSkgIT0g VkVDVE9SX1RZUEUpCisgICAgeworICAgICAgLyogSGFuZGxlIHZlY3RvciBv ZiBib29sIHJlcHJlc2VudGVkIGFzIGEgdmVjdG9yIG9mCisJIGludGVnZXJz IGhlcmUgcmF0aGVyIHRoYW4gb24gZXhwYW5kIGJlY2F1c2UgaXQgaXMKKwkg YSBkZWZhdWx0IG1hc2sgdHlwZSBmb3IgdGFyZ2V0cy4gIFZlY3RvciBtYXNr IGlzCisJIGJ1aWx0IGluIGEgZm9sbG93aW5nIHdheToKKworCSB0bXAgPSAo aW50KXZhbAorCSB2ZWNfdG1wID0ge3RtcCwgLi4uLCB0bXB9CisJIHZlY19j c3QgPSBWSUVXX0NPTlZFUlRfRVhQUjx2ZWN0b3IoTikgX0Jvb2w+KHZlY190 bXApOyAgKi8KKyAgICAgIGlmICh2YWxfdHlwZSA9PSBib29sZWFuX3R5cGVf bm9kZQorCSAgJiYgVkVDVE9SX01PREVfUCAobW9kZSkKKwkgICYmIFNDQUxB Ul9JTlRfTU9ERV9QIChHRVRfTU9ERV9JTk5FUiAobW9kZSkpCisJICAmJiBH RVRfTU9ERV9JTk5FUiAobW9kZSkgIT0gdmFsX21vZGUpCiAJewotCSAgaWYg KENPTlNUQU5UX0NMQVNTX1AgKHZhbCkpCi0JICAgIHZhbCA9IGZvbGRfdW5h cnkgKFZJRVdfQ09OVkVSVF9FWFBSLCBUUkVFX1RZUEUgKHR5cGUpLCB2YWwp OwotCSAgZWxzZQorCSAgdW5zaWduZWQgc2l6ZSA9IEdFVF9NT0RFX0JJVFNJ WkUgKEdFVF9NT0RFX0lOTkVSIChtb2RlKSk7CisJICB0cmVlIHN0eXBlID0g YnVpbGRfbm9uc3RhbmRhcmRfaW50ZWdlcl90eXBlIChzaXplLCAxKTsKKwkg IHRyZWUgdmVjdHlwZSA9IGdldF92ZWN0eXBlX2Zvcl9zY2FsYXJfdHlwZSAo c3R5cGUpOworCisJICBuZXdfdGVtcCA9IG1ha2Vfc3NhX25hbWUgKHN0eXBl KTsKKwkgIGluaXRfc3RtdCA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKG5ld190 ZW1wLCBOT1BfRVhQUiwgdmFsKTsKKwkgIHZlY3RfaW5pdF92ZWN0b3JfMSAo c3RtdCwgaW5pdF9zdG10LCBnc2kpOworCisJICB2YWwgPSBtYWtlX3NzYV9u YW1lICh2ZWN0eXBlKTsKKwkgIG5ld190ZW1wID0gYnVpbGRfdmVjdG9yX2Zy b21fdmFsICh2ZWN0eXBlLCBuZXdfdGVtcCk7CisJICBpbml0X3N0bXQgPSBn aW1wbGVfYnVpbGRfYXNzaWduICh2YWwsIG5ld190ZW1wKTsKKwkgIHZlY3Rf aW5pdF92ZWN0b3JfMSAoc3RtdCwgaW5pdF9zdG10LCBnc2kpOworCisJICB2 YWwgPSBidWlsZDEgKFZJRVdfQ09OVkVSVF9FWFBSLCB0eXBlLCB2YWwpOwor CX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoIXR5cGVzX2NvbXBhdGlibGVf cCAoVFJFRV9UWVBFICh0eXBlKSwgdmFsX3R5cGUpKQogCSAgICB7Ci0JICAg ICAgbmV3X3RlbXAgPSBtYWtlX3NzYV9uYW1lIChUUkVFX1RZUEUgKHR5cGUp KTsKLQkgICAgICBpbml0X3N0bXQgPSBnaW1wbGVfYnVpbGRfYXNzaWduIChu ZXdfdGVtcCwgTk9QX0VYUFIsIHZhbCk7Ci0JICAgICAgdmVjdF9pbml0X3Zl Y3Rvcl8xIChzdG10LCBpbml0X3N0bXQsIGdzaSk7Ci0JICAgICAgdmFsID0g bmV3X3RlbXA7CisJICAgICAgaWYgKENPTlNUQU5UX0NMQVNTX1AgKHZhbCkp CisJCXZhbCA9IGZvbGRfdW5hcnkgKFZJRVdfQ09OVkVSVF9FWFBSLCBUUkVF X1RZUEUgKHR5cGUpLCB2YWwpOworCSAgICAgIGVsc2UKKwkJeworCQkgIG5l d190ZW1wID0gbWFrZV9zc2FfbmFtZSAoVFJFRV9UWVBFICh0eXBlKSk7CisJ CSAgaW5pdF9zdG10ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAobmV3X3RlbXAs IE5PUF9FWFBSLCB2YWwpOworCQkgIHZlY3RfaW5pdF92ZWN0b3JfMSAoc3Rt dCwgaW5pdF9zdG10LCBnc2kpOworCQkgIHZhbCA9IG5ld190ZW1wOworCQl9 CiAJICAgIH0KKwkgIHZhbCA9IGJ1aWxkX3ZlY3Rvcl9mcm9tX3ZhbCAodHlw ZSwgdmFsKTsKIAl9Ci0gICAgICB2YWwgPSBidWlsZF92ZWN0b3JfZnJvbV92 YWwgKHR5cGUsIHZhbCk7CiAgICAgfQogCiAgIG5ld192YXIgPSB2ZWN0X2dl dF9uZXdfdmVjdF92YXIgKHR5cGUsIHZlY3Rfc2ltcGxlX3ZhciwgImNzdF8i KTsKQEAgLTEzNjgsNiArMTQwMiw3IEBAIHZlY3RfZ2V0X3ZlY19kZWZfZm9y X29wZXJhbmQgKHRyZWUgb3AsIGdpbXBsZSBzdG10LCB0cmVlICpzY2FsYXJf ZGVmKQogICBnaW1wbGUgZGVmX3N0bXQ7CiAgIHN0bXRfdmVjX2luZm8gZGVm X3N0bXRfaW5mbyA9IE5VTEw7CiAgIHN0bXRfdmVjX2luZm8gc3RtdF92aW5m byA9IHZpbmZvX2Zvcl9zdG10IChzdG10KTsKKyAgdHJlZSBzdG10X3ZlY3R5 cGUgPSBTVE1UX1ZJTkZPX1ZFQ1RZUEUgKHN0bXRfdmluZm8pOwogICB1bnNp Z25lZCBpbnQgbnVuaXRzOwogICBsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8g PSBTVE1UX1ZJTkZPX0xPT1BfVklORk8gKHN0bXRfdmluZm8pOwogICB0cmVl IGRlZjsKQEAgLTE0MTEsNyArMTQ0NiwxMiBAQCB2ZWN0X2dldF92ZWNfZGVm X2Zvcl9vcGVyYW5kICh0cmVlIG9wLCBnaW1wbGUgc3RtdCwgdHJlZSAqc2Nh bGFyX2RlZikKICAgICAvKiBDYXNlIDE6IG9wZXJhbmQgaXMgYSBjb25zdGFu dC4gICovCiAgICAgY2FzZSB2ZWN0X2NvbnN0YW50X2RlZjoKICAgICAgIHsK LQl2ZWN0b3JfdHlwZSA9IGdldF92ZWN0eXBlX2Zvcl9zY2FsYXJfdHlwZSAo VFJFRV9UWVBFIChvcCkpOworCWlmIChUUkVFX1RZUEUgKG9wKSA9PSBib29s ZWFuX3R5cGVfbm9kZQorCSAgICAmJiBUUkVFX1RZUEUgKHN0bXRfdmVjdHlw ZSkgPT0gYm9vbGVhbl90eXBlX25vZGUpCisJICB2ZWN0b3JfdHlwZSA9IHN0 bXRfdmVjdHlwZTsKKwllbHNlCisJICB2ZWN0b3JfdHlwZSA9IGdldF92ZWN0 eXBlX2Zvcl9zY2FsYXJfdHlwZSAoVFJFRV9UWVBFIChvcCkpOworCiAJZ2Nj X2Fzc2VydCAodmVjdG9yX3R5cGUpOwogCW51bml0cyA9IFRZUEVfVkVDVE9S X1NVQlBBUlRTICh2ZWN0b3JfdHlwZSk7CiAKQEAgLTE0MjksNyArMTQ2OSwx MSBAQCB2ZWN0X2dldF92ZWNfZGVmX2Zvcl9vcGVyYW5kICh0cmVlIG9wLCBn aW1wbGUgc3RtdCwgdHJlZSAqc2NhbGFyX2RlZikKICAgICAvKiBDYXNlIDI6 IG9wZXJhbmQgaXMgZGVmaW5lZCBvdXRzaWRlIHRoZSBsb29wIC0gbG9vcCBp bnZhcmlhbnQuICAqLwogICAgIGNhc2UgdmVjdF9leHRlcm5hbF9kZWY6CiAg ICAgICB7Ci0JdmVjdG9yX3R5cGUgPSBnZXRfdmVjdHlwZV9mb3Jfc2NhbGFy X3R5cGUgKFRSRUVfVFlQRSAoZGVmKSk7CisJaWYgKFRSRUVfVFlQRSAob3Ap ID09IGJvb2xlYW5fdHlwZV9ub2RlCisJICAgICYmIFRSRUVfVFlQRSAoc3Rt dF92ZWN0eXBlKSA9PSBib29sZWFuX3R5cGVfbm9kZSkKKwkgIHZlY3Rvcl90 eXBlID0gc3RtdF92ZWN0eXBlOworCWVsc2UKKwkgIHZlY3Rvcl90eXBlID0g Z2V0X3ZlY3R5cGVfZm9yX3NjYWxhcl90eXBlIChUUkVFX1RZUEUgKGRlZikp OwogCWdjY19hc3NlcnQgKHZlY3Rvcl90eXBlKTsKIAogCWlmIChzY2FsYXJf ZGVmKQpAQCAtMTc1OCw2ICsxODAyLDcgQEAgdmVjdG9yaXphYmxlX21hc2tf bG9hZF9zdG9yZSAoZ2ltcGxlIHN0bXQsIGdpbXBsZV9zdG10X2l0ZXJhdG9y ICpnc2ksCiAgIGJvb2wgbmVzdGVkX2luX3ZlY3RfbG9vcCA9IG5lc3RlZF9p bl92ZWN0X2xvb3BfcCAobG9vcCwgc3RtdCk7CiAgIHN0cnVjdCBkYXRhX3Jl ZmVyZW5jZSAqZHIgPSBTVE1UX1ZJTkZPX0RBVEFfUkVGIChzdG10X2luZm8p OwogICB0cmVlIHZlY3R5cGUgPSBTVE1UX1ZJTkZPX1ZFQ1RZUEUgKHN0bXRf aW5mbyk7CisgIHRyZWUgbWFza192ZWN0eXBlOwogICB0cmVlIGVsZW1fdHlw ZTsKICAgZ2ltcGxlIG5ld19zdG10OwogICB0cmVlIGR1bW15OwpAQCAtMTc4 NSw4ICsxODMwLDggQEAgdmVjdG9yaXphYmxlX21hc2tfbG9hZF9zdG9yZSAo Z2ltcGxlIHN0bXQsIGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksCiAKICAg aXNfc3RvcmUgPSBnaW1wbGVfY2FsbF9pbnRlcm5hbF9mbiAoc3RtdCkgPT0g SUZOX01BU0tfU1RPUkU7CiAgIG1hc2sgPSBnaW1wbGVfY2FsbF9hcmcgKHN0 bXQsIDIpOwotICBpZiAoVFlQRV9QUkVDSVNJT04gKFRSRUVfVFlQRSAobWFz aykpCi0gICAgICAhPSBHRVRfTU9ERV9CSVRTSVpFIChUWVBFX01PREUgKFRS RUVfVFlQRSAodmVjdHlwZSkpKSkKKworICBpZiAoVFJFRV9UWVBFIChtYXNr KSAhPSBib29sZWFuX3R5cGVfbm9kZSkKICAgICByZXR1cm4gZmFsc2U7CiAK ICAgLyogRk9STk9XLiBUaGlzIHJlc3RyaWN0aW9uIHNob3VsZCBiZSByZWxh eGVkLiAgKi8KQEAgLTE4MTUsNiArMTg2MCwxOSBAQCB2ZWN0b3JpemFibGVf bWFza19sb2FkX3N0b3JlIChnaW1wbGUgc3RtdCwgZ2ltcGxlX3N0bXRfaXRl cmF0b3IgKmdzaSwKICAgaWYgKFNUTVRfVklORk9fU1RSSURFRF9QIChzdG10 X2luZm8pKQogICAgIHJldHVybiBmYWxzZTsKIAorICBpZiAoVFJFRV9DT0RF IChtYXNrKSAhPSBTU0FfTkFNRSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAg aWYgKCF2ZWN0X2lzX3NpbXBsZV91c2VfMSAobWFzaywgc3RtdCwgbG9vcF92 aW5mbywgTlVMTCwKKwkJCSAgICAgJmRlZl9zdG10LCAmZGVmLCAmZHQsICZt YXNrX3ZlY3R5cGUpKQorICAgIHJldHVybiBmYWxzZTsKKworICBpZiAoIW1h c2tfdmVjdHlwZSkKKyAgICBtYXNrX3ZlY3R5cGUgPSBnZXRfbWFza190eXBl X2Zvcl9zY2FsYXJfdHlwZSAoVFJFRV9UWVBFICh2ZWN0eXBlKSk7CisKKyAg aWYgKCFtYXNrX3ZlY3R5cGUpCisgICAgcmV0dXJuIGZhbHNlOworCiAgIGlm IChTVE1UX1ZJTkZPX0dBVEhFUl9QIChzdG10X2luZm8pKQogICAgIHsKICAg ICAgIGdpbXBsZSBkZWZfc3RtdDsKQEAgLTE4NDgsMTQgKzE5MDYsOSBAQCB2 ZWN0b3JpemFibGVfbWFza19sb2FkX3N0b3JlIChnaW1wbGUgc3RtdCwgZ2lt cGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwKIAkJCQkgOiBEUl9TVEVQIChkciks IHNpemVfemVyb19ub2RlKSA8PSAwKQogICAgIHJldHVybiBmYWxzZTsKICAg ZWxzZSBpZiAoIVZFQ1RPUl9NT0RFX1AgKFRZUEVfTU9ERSAodmVjdHlwZSkp Ci0JICAgfHwgIWNhbl92ZWNfbWFza19sb2FkX3N0b3JlX3AgKFRZUEVfTU9E RSAodmVjdHlwZSksICFpc19zdG9yZSkpCi0gICAgcmV0dXJuIGZhbHNlOwot Ci0gIGlmIChUUkVFX0NPREUgKG1hc2spICE9IFNTQV9OQU1FKQotICAgIHJl dHVybiBmYWxzZTsKLQotICBpZiAoIXZlY3RfaXNfc2ltcGxlX3VzZSAobWFz aywgc3RtdCwgbG9vcF92aW5mbywgTlVMTCwKLQkJCSAgICZkZWZfc3RtdCwg JmRlZiwgJmR0KSkKKwkgICB8fCAhY2FuX3ZlY19tYXNrX2xvYWRfc3RvcmVf cCAoVFlQRV9NT0RFICh2ZWN0eXBlKSwKKwkJCQkJICBUWVBFX01PREUgKG1h c2tfdmVjdHlwZSksCisJCQkJCSAgIWlzX3N0b3JlKSkKICAgICByZXR1cm4g ZmFsc2U7CiAKICAgaWYgKGlzX3N0b3JlKQpAQCAtNzM3Myw2ICs3NDI2LDIw MSBAQCB2ZWN0b3JpemFibGVfY29uZGl0aW9uIChnaW1wbGUgc3RtdCwgZ2lt cGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwKICAgcmV0dXJuIHRydWU7CiB9CiAK Ky8qIHZlY3Rvcml6YWJsZV9jb21wYXJpc29uLgorCisgICBDaGVjayBpZiBT VE1UIGlzIGNvbXBhcmlzb24gZXhwcmVzc2lvbiB0aGF0IGNhbiBiZSB2ZWN0 b3JpemVkLgorICAgSWYgVkVDX1NUTVQgaXMgYWxzbyBwYXNzZWQsIHZlY3Rv cml6ZSB0aGUgU1RNVDogY3JlYXRlIGEgdmVjdG9yaXplZAorICAgY29tcGFy aXNvbiwgcHV0IGl0IGluIFZFQ19TVE1ULCBhbmQgaW5zZXJ0IGl0IGF0IEdT SS4KKworICAgUmV0dXJuIEZBTFNFIGlmIG5vdCBhIHZlY3Rvcml6YWJsZSBT VE1ULCBUUlVFIG90aGVyd2lzZS4gICovCisKK2Jvb2wKK3ZlY3Rvcml6YWJs ZV9jb21wYXJpc29uIChnaW1wbGUgc3RtdCwgZ2ltcGxlX3N0bXRfaXRlcmF0 b3IgKmdzaSwKKwkJCSBnaW1wbGUgKnZlY19zdG10LCB0cmVlIHJlZHVjX2Rl ZiwKKwkJCSBzbHBfdHJlZSBzbHBfbm9kZSkKK3sKKyAgdHJlZSBsaHMsIHJo czEsIHJoczI7CisgIHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvID0gdmluZm9f Zm9yX3N0bXQgKHN0bXQpOworICB0cmVlIHZlY3R5cGUxLCB2ZWN0eXBlMjsK KyAgdHJlZSB2ZWN0eXBlID0gU1RNVF9WSU5GT19WRUNUWVBFIChzdG10X2lu Zm8pOworICB0cmVlIHZlY19yaHMxID0gTlVMTF9UUkVFLCB2ZWNfcmhzMiA9 IE5VTExfVFJFRTsKKyAgdHJlZSB2ZWNfY29tcGFyZTsKKyAgdHJlZSBuZXdf dGVtcDsKKyAgbG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvID0gU1RNVF9WSU5G T19MT09QX1ZJTkZPIChzdG10X2luZm8pOworICB0cmVlIGRlZjsKKyAgZW51 bSB2ZWN0X2RlZl90eXBlIGR0LCBkdHNbNF07CisgIHVuc2lnbmVkIG51bml0 czsKKyAgaW50IG5jb3BpZXM7CisgIGVudW0gdHJlZV9jb2RlIGNvZGU7Cisg IHN0bXRfdmVjX2luZm8gcHJldl9zdG10X2luZm8gPSBOVUxMOworICBpbnQg aSwgajsKKyAgYmJfdmVjX2luZm8gYmJfdmluZm8gPSBTVE1UX1ZJTkZPX0JC X1ZJTkZPIChzdG10X2luZm8pOworICB2ZWM8dHJlZT4gdmVjX29wcm5kczAg PSB2TlVMTDsKKyAgdmVjPHRyZWU+IHZlY19vcHJuZHMxID0gdk5VTEw7Cisg IHRyZWUgbWFza190eXBlOworICB0cmVlIG1hc2s7CisKKyAgaWYgKFRSRUVf VFlQRSAodmVjdHlwZSkgIT0gYm9vbGVhbl90eXBlX25vZGUpCisgICAgcmV0 dXJuIGZhbHNlOworCisgIG1hc2tfdHlwZSA9IHZlY3R5cGU7CisgIG51bml0 cyA9IFRZUEVfVkVDVE9SX1NVQlBBUlRTICh2ZWN0eXBlKTsKKworICBpZiAo c2xwX25vZGUgfHwgUFVSRV9TTFBfU1RNVCAoc3RtdF9pbmZvKSkKKyAgICBu Y29waWVzID0gMTsKKyAgZWxzZQorICAgIG5jb3BpZXMgPSBMT09QX1ZJTkZP X1ZFQ1RfRkFDVE9SIChsb29wX3ZpbmZvKSAvIG51bml0czsKKworICBnY2Nf YXNzZXJ0IChuY29waWVzID49IDEpOworICBpZiAoIVNUTVRfVklORk9fUkVM RVZBTlRfUCAoc3RtdF9pbmZvKSAmJiAhYmJfdmluZm8pCisgICAgcmV0dXJu IGZhbHNlOworCisgIGlmIChTVE1UX1ZJTkZPX0RFRl9UWVBFIChzdG10X2lu Zm8pICE9IHZlY3RfaW50ZXJuYWxfZGVmCisgICAgICAmJiAhKFNUTVRfVklO Rk9fREVGX1RZUEUgKHN0bXRfaW5mbykgPT0gdmVjdF9uZXN0ZWRfY3ljbGUK KwkgICAmJiByZWR1Y19kZWYpKQorICAgIHJldHVybiBmYWxzZTsKKworICBp ZiAoU1RNVF9WSU5GT19MSVZFX1AgKHN0bXRfaW5mbykpCisgICAgeworICAg ICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQorCWR1bXBfcHJpbnRmX2xvYyAo TVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIHZlY3RfbG9jYXRpb24sCisJCQkg InZhbHVlIHVzZWQgYWZ0ZXIgbG9vcC5cbiIpOworICAgICAgcmV0dXJuIGZh bHNlOworICAgIH0KKworICBpZiAoIWlzX2dpbXBsZV9hc3NpZ24gKHN0bXQp KQorICAgIHJldHVybiBmYWxzZTsKKworICBjb2RlID0gZ2ltcGxlX2Fzc2ln bl9yaHNfY29kZSAoc3RtdCk7CisKKyAgaWYgKFRSRUVfQ09ERV9DTEFTUyAo Y29kZSkgIT0gdGNjX2NvbXBhcmlzb24pCisgICAgcmV0dXJuIGZhbHNlOwor CisgIHJoczEgPSBnaW1wbGVfYXNzaWduX3JoczEgKHN0bXQpOworICByaHMy ID0gZ2ltcGxlX2Fzc2lnbl9yaHMyIChzdG10KTsKKworICBpZiAoVFJFRV9D T0RFIChyaHMxKSA9PSBTU0FfTkFNRSkKKyAgICB7CisgICAgICBnaW1wbGUg cmhzMV9kZWZfc3RtdCA9IFNTQV9OQU1FX0RFRl9TVE1UIChyaHMxKTsKKyAg ICAgIGlmICghdmVjdF9pc19zaW1wbGVfdXNlXzEgKHJoczEsIHN0bXQsIGxv b3BfdmluZm8sIGJiX3ZpbmZvLAorCQkJCSAmcmhzMV9kZWZfc3RtdCwgJmRl ZiwgJmR0LCAmdmVjdHlwZTEpKQorCXJldHVybiBmYWxzZTsKKyAgICB9Cisg IGVsc2UgaWYgKFRSRUVfQ09ERSAocmhzMSkgIT0gSU5URUdFUl9DU1QgJiYg VFJFRV9DT0RFIChyaHMxKSAhPSBSRUFMX0NTVAorCSAgICYmIFRSRUVfQ09E RSAocmhzMSkgIT0gRklYRURfQ1NUKQorICAgIHJldHVybiBmYWxzZTsKKwor ICBpZiAoVFJFRV9DT0RFIChyaHMyKSA9PSBTU0FfTkFNRSkKKyAgICB7Cisg ICAgICBnaW1wbGUgcmhzMl9kZWZfc3RtdCA9IFNTQV9OQU1FX0RFRl9TVE1U IChyaHMyKTsKKyAgICAgIGlmICghdmVjdF9pc19zaW1wbGVfdXNlXzEgKHJo czIsIHN0bXQsIGxvb3BfdmluZm8sIGJiX3ZpbmZvLAorCQkJCSAmcmhzMl9k ZWZfc3RtdCwgJmRlZiwgJmR0LCAmdmVjdHlwZTIpKQorCXJldHVybiBmYWxz ZTsKKyAgICB9CisgIGVsc2UgaWYgKFRSRUVfQ09ERSAocmhzMikgIT0gSU5U RUdFUl9DU1QgJiYgVFJFRV9DT0RFIChyaHMyKSAhPSBSRUFMX0NTVAorCSAg ICYmIFRSRUVfQ09ERSAocmhzMikgIT0gRklYRURfQ1NUKQorICAgIHJldHVy biBmYWxzZTsKKworICB2ZWN0eXBlID0gdmVjdHlwZTEgPyB2ZWN0eXBlMSA6 IHZlY3R5cGUyOworCisgIGlmICghdmVjdHlwZQorICAgICAgfHwgbnVuaXRz ICE9IFRZUEVfVkVDVE9SX1NVQlBBUlRTICh2ZWN0eXBlKSkKKyAgICByZXR1 cm4gZmFsc2U7CisKKyAgaWYgKCF2ZWNfc3RtdCkKKyAgICB7CisgICAgICBT VE1UX1ZJTkZPX1RZUEUgKHN0bXRfaW5mbykgPSBjb21wYXJpc29uX3ZlY19p bmZvX3R5cGU7CisgICAgICByZXR1cm4gZXhwYW5kX3ZlY19jbXBfZXhwcl9w ICh2ZWN0eXBlLCBtYXNrX3R5cGUpOworICAgIH0KKworICAvKiBUcmFuc2Zv cm0uICAqLworICBpZiAoIXNscF9ub2RlKQorICAgIHsKKyAgICAgIHZlY19v cHJuZHMwLmNyZWF0ZSAoMSk7CisgICAgICB2ZWNfb3BybmRzMS5jcmVhdGUg KDEpOworICAgIH0KKworICAvKiBIYW5kbGUgZGVmLiAgKi8KKyAgbGhzID0g Z2ltcGxlX2Fzc2lnbl9saHMgKHN0bXQpOworICBtYXNrID0gdmVjdF9jcmVh dGVfZGVzdGluYXRpb25fdmFyIChsaHMsIG1hc2tfdHlwZSk7CisKKyAgLyog SGFuZGxlIGNtcCBleHByLiAgKi8KKyAgZm9yIChqID0gMDsgaiA8IG5jb3Bp ZXM7IGorKykKKyAgICB7CisgICAgICBnYXNzaWduICpuZXdfc3RtdCA9IE5V TEw7CisgICAgICBpZiAoaiA9PSAwKQorCXsKKwkgIGlmIChzbHBfbm9kZSkK KwkgICAgeworCSAgICAgIGF1dG9fdmVjPHRyZWUsIDI+IG9wczsKKwkgICAg ICBhdXRvX3ZlYzx2ZWM8dHJlZT4sIDI+IHZlY19kZWZzOworCisJICAgICAg b3BzLnNhZmVfcHVzaCAocmhzMSk7CisJICAgICAgb3BzLnNhZmVfcHVzaCAo cmhzMik7CisJICAgICAgdmVjdF9nZXRfc2xwX2RlZnMgKG9wcywgc2xwX25v ZGUsICZ2ZWNfZGVmcywgLTEpOworCSAgICAgIHZlY19vcHJuZHMxID0gdmVj X2RlZnMucG9wICgpOworCSAgICAgIHZlY19vcHJuZHMwID0gdmVjX2RlZnMu cG9wICgpOworCisJICAgICAgb3BzLnJlbGVhc2UgKCk7CisJICAgICAgdmVj X2RlZnMucmVsZWFzZSAoKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJ ICAgICAgZ2ltcGxlIGd0ZW1wOworCSAgICAgIHZlY19yaHMxCisJCT0gdmVj dF9nZXRfdmVjX2RlZl9mb3Jfb3BlcmFuZCAocmhzMSwgc3RtdCwgTlVMTCk7 CisJICAgICAgdmVjdF9pc19zaW1wbGVfdXNlIChyaHMxLCBzdG10LCBsb29w X3ZpbmZvLCBOVUxMLAorCQkJCSAgJmd0ZW1wLCAmZGVmLCAmZHRzWzBdKTsK KwkgICAgICB2ZWNfcmhzMiA9CisJCXZlY3RfZ2V0X3ZlY19kZWZfZm9yX29w ZXJhbmQgKHJoczIsIHN0bXQsIE5VTEwpOworCSAgICAgIHZlY3RfaXNfc2lt cGxlX3VzZSAocmhzMiwgc3RtdCwgbG9vcF92aW5mbywgTlVMTCwKKwkJCQkg ICZndGVtcCwgJmRlZiwgJmR0c1sxXSk7CisJICAgIH0KKwl9CisgICAgICBl bHNlCisJeworCSAgdmVjX3JoczEgPSB2ZWN0X2dldF92ZWNfZGVmX2Zvcl9z dG10X2NvcHkgKGR0c1swXSwKKwkJCQkJCSAgICAgdmVjX29wcm5kczAucG9w ICgpKTsKKwkgIHZlY19yaHMyID0gdmVjdF9nZXRfdmVjX2RlZl9mb3Jfc3Rt dF9jb3B5IChkdHNbMV0sCisJCQkJCQkgICAgIHZlY19vcHJuZHMxLnBvcCAo KSk7CisJfQorCisgICAgICBpZiAoIXNscF9ub2RlKQorCXsKKwkgIHZlY19v cHJuZHMwLnF1aWNrX3B1c2ggKHZlY19yaHMxKTsKKwkgIHZlY19vcHJuZHMx LnF1aWNrX3B1c2ggKHZlY19yaHMyKTsKKwl9CisKKyAgICAgIC8qIEFyZ3Vt ZW50cyBhcmUgcmVhZHkuICBDcmVhdGUgdGhlIG5ldyB2ZWN0b3Igc3RtdC4g ICovCisgICAgICBGT1JfRUFDSF9WRUNfRUxUICh2ZWNfb3BybmRzMCwgaSwg dmVjX3JoczEpCisJeworCSAgdmVjX3JoczIgPSB2ZWNfb3BybmRzMVtpXTsK KworCSAgdmVjX2NvbXBhcmUgPSBidWlsZDIgKGNvZGUsIG1hc2tfdHlwZSwg dmVjX3JoczEsIHZlY19yaHMyKTsKKwkgIG5ld19zdG10ID0gZ2ltcGxlX2J1 aWxkX2Fzc2lnbiAobWFzaywgdmVjX2NvbXBhcmUpOworCSAgbmV3X3RlbXAg PSBtYWtlX3NzYV9uYW1lIChtYXNrLCBuZXdfc3RtdCk7CisJICBnaW1wbGVf YXNzaWduX3NldF9saHMgKG5ld19zdG10LCBuZXdfdGVtcCk7CisJICB2ZWN0 X2ZpbmlzaF9zdG10X2dlbmVyYXRpb24gKHN0bXQsIG5ld19zdG10LCBnc2kp OworCSAgaWYgKHNscF9ub2RlKQorCSAgICBTTFBfVFJFRV9WRUNfU1RNVFMg KHNscF9ub2RlKS5xdWlja19wdXNoIChuZXdfc3RtdCk7CisJfQorCisgICAg ICBpZiAoc2xwX25vZGUpCisJY29udGludWU7CisKKyAgICAgIGlmIChqID09 IDApCisJU1RNVF9WSU5GT19WRUNfU1RNVCAoc3RtdF9pbmZvKSA9ICp2ZWNf c3RtdCA9IG5ld19zdG10OworICAgICAgZWxzZQorCVNUTVRfVklORk9fUkVM QVRFRF9TVE1UIChwcmV2X3N0bXRfaW5mbykgPSBuZXdfc3RtdDsKKworICAg ICAgcHJldl9zdG10X2luZm8gPSB2aW5mb19mb3Jfc3RtdCAobmV3X3N0bXQp OworICAgIH0KKworICB2ZWNfb3BybmRzMC5yZWxlYXNlICgpOworICB2ZWNf b3BybmRzMS5yZWxlYXNlICgpOworCisgIHJldHVybiB0cnVlOworfQogCiAv KiBNYWtlIHN1cmUgdGhlIHN0YXRlbWVudCBpcyB2ZWN0b3JpemFibGUuICAq LwogCkBAIC03NTc2LDcgKzc4MjQsOCBAQCB2ZWN0X2FuYWx5emVfc3RtdCAo Z2ltcGxlIHN0bXQsIGJvb2wgKm5lZWRfdG9fdmVjdG9yaXplLCBzbHBfdHJl ZSBub2RlKQogCSAgfHwgdmVjdG9yaXphYmxlX2NhbGwgKHN0bXQsIE5VTEws IE5VTEwsIG5vZGUpCiAJICB8fCB2ZWN0b3JpemFibGVfc3RvcmUgKHN0bXQs IE5VTEwsIE5VTEwsIG5vZGUpCiAJICB8fCB2ZWN0b3JpemFibGVfcmVkdWN0 aW9uIChzdG10LCBOVUxMLCBOVUxMLCBub2RlKQotCSAgfHwgdmVjdG9yaXph YmxlX2NvbmRpdGlvbiAoc3RtdCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgbm9k ZSkpOworCSAgfHwgdmVjdG9yaXphYmxlX2NvbmRpdGlvbiAoc3RtdCwgTlVM TCwgTlVMTCwgTlVMTCwgMCwgbm9kZSkKKwkgIHx8IHZlY3Rvcml6YWJsZV9j b21wYXJpc29uIChzdG10LCBOVUxMLCBOVUxMLCBOVUxMLCBub2RlKSk7CiAg IGVsc2UKICAgICB7CiAgICAgICBpZiAoYmJfdmluZm8pCkBAIC03NTg4LDcg Kzc4MzcsOCBAQCB2ZWN0X2FuYWx5emVfc3RtdCAoZ2ltcGxlIHN0bXQsIGJv b2wgKm5lZWRfdG9fdmVjdG9yaXplLCBzbHBfdHJlZSBub2RlKQogCSAgICAg IHx8IHZlY3Rvcml6YWJsZV9sb2FkIChzdG10LCBOVUxMLCBOVUxMLCBub2Rl LCBOVUxMKQogCSAgICAgIHx8IHZlY3Rvcml6YWJsZV9jYWxsIChzdG10LCBO VUxMLCBOVUxMLCBub2RlKQogCSAgICAgIHx8IHZlY3Rvcml6YWJsZV9zdG9y ZSAoc3RtdCwgTlVMTCwgTlVMTCwgbm9kZSkKLQkgICAgICB8fCB2ZWN0b3Jp emFibGVfY29uZGl0aW9uIChzdG10LCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBu b2RlKSk7CisJICAgICAgfHwgdmVjdG9yaXphYmxlX2NvbmRpdGlvbiAoc3Rt dCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgbm9kZSkKKwkgICAgICB8fCB2ZWN0 b3JpemFibGVfY29tcGFyaXNvbiAoc3RtdCwgTlVMTCwgTlVMTCwgTlVMTCwg bm9kZSkpOwogICAgIH0KIAogICBpZiAoIW9rKQpAQCAtNzcwNCw2ICs3OTU0 LDExIEBAIHZlY3RfdHJhbnNmb3JtX3N0bXQgKGdpbXBsZSBzdG10LCBnaW1w bGVfc3RtdF9pdGVyYXRvciAqZ3NpLAogICAgICAgZ2NjX2Fzc2VydCAoZG9u ZSk7CiAgICAgICBicmVhazsKIAorICAgIGNhc2UgY29tcGFyaXNvbl92ZWNf aW5mb190eXBlOgorICAgICAgZG9uZSA9IHZlY3Rvcml6YWJsZV9jb21wYXJp c29uIChzdG10LCBnc2ksICZ2ZWNfc3RtdCwgTlVMTCwgc2xwX25vZGUpOwor ICAgICAgZ2NjX2Fzc2VydCAoZG9uZSk7CisgICAgICBicmVhazsKKwogICAg IGNhc2UgY2FsbF92ZWNfaW5mb190eXBlOgogICAgICAgZG9uZSA9IHZlY3Rv cml6YWJsZV9jYWxsIChzdG10LCBnc2ksICZ2ZWNfc3RtdCwgc2xwX25vZGUp OwogICAgICAgc3RtdCA9IGdzaV9zdG10ICgqZ3NpKTsKQEAgLTgwMzgsNiAr ODI5MywyMyBAQCBnZXRfdmVjdHlwZV9mb3Jfc2NhbGFyX3R5cGUgKHRyZWUg c2NhbGFyX3R5cGUpCiAgIHJldHVybiB2ZWN0eXBlOwogfQogCisvKiBGdW5j dGlvbiBnZXRfbWFza190eXBlX2Zvcl9zY2FsYXJfdHlwZS4KKworICAgUmV0 dXJucyB0aGUgbWFzayB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gYSByZXN1bHQg b2YgY29tcGFyaXNvbgorICAgb2YgdmVjdG9ycyBvZiBzcGVjaWZpZWQgU0NB TEFSX1RZUEUgYXMgc3VwcG9ydGVkIGJ5IHRhcmdldC4gICovCisKK3RyZWUK K2dldF9tYXNrX3R5cGVfZm9yX3NjYWxhcl90eXBlICh0cmVlIHNjYWxhcl90 eXBlKQoreworICB0cmVlIHZlY3R5cGUgPSBnZXRfdmVjdHlwZV9mb3Jfc2Nh bGFyX3R5cGUgKHNjYWxhcl90eXBlKTsKKworICBpZiAoIXZlY3R5cGUpCisg ICAgcmV0dXJuIE5VTEw7CisKKyAgcmV0dXJuIGJ1aWxkX3RydXRoX3ZlY3Rv cl90eXBlIChUWVBFX1ZFQ1RPUl9TVUJQQVJUUyAodmVjdHlwZSksCisJCQkJ ICBjdXJyZW50X3ZlY3Rvcl9zaXplKTsKK30KKwogLyogRnVuY3Rpb24gZ2V0 X3NhbWVfc2l6ZWRfdmVjdHlwZQogCiAgICBSZXR1cm5zIGEgdmVjdG9yIHR5 cGUgY29ycmVzcG9uZGluZyB0byBTQ0FMQVJfVFlQRSBvZiBzaXplCmRpZmYg LS1naXQgYS9nY2MvdHJlZS12ZWN0b3JpemVyLmggYi9nY2MvdHJlZS12ZWN0 b3JpemVyLmgKaW5kZXggNThlOGYxMC4uOTRhZWExYSAxMDA2NDQKLS0tIGEv Z2NjL3RyZWUtdmVjdG9yaXplci5oCisrKyBiL2djYy90cmVlLXZlY3Rvcml6 ZXIuaApAQCAtMjgsNyArMjgsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRo ZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogZW51bSB2ZWN0X3Zhcl9r aW5kIHsKICAgdmVjdF9zaW1wbGVfdmFyLAogICB2ZWN0X3BvaW50ZXJfdmFy LAotICB2ZWN0X3NjYWxhcl92YXIKKyAgdmVjdF9zY2FsYXJfdmFyLAorICB2 ZWN0X21hc2tfdmFyCiB9OwogCiAvKiBEZWZpbmVzIHR5cGUgb2Ygb3BlcmF0 aW9uLiAgKi8KQEAgLTQ4Miw2ICs0ODMsNyBAQCBlbnVtIHN0bXRfdmVjX2lu Zm9fdHlwZSB7CiAgIGNhbGxfc2ltZF9jbG9uZV92ZWNfaW5mb190eXBlLAog ICBhc3NpZ25tZW50X3ZlY19pbmZvX3R5cGUsCiAgIGNvbmRpdGlvbl92ZWNf aW5mb190eXBlLAorICBjb21wYXJpc29uX3ZlY19pbmZvX3R5cGUsCiAgIHJl ZHVjX3ZlY19pbmZvX3R5cGUsCiAgIGluZHVjX3ZlY19pbmZvX3R5cGUsCiAg IHR5cGVfcHJvbW90aW9uX3ZlY19pbmZvX3R5cGUsCkBAIC05OTUsNiArOTk3 LDcgQEAgZXh0ZXJuIGJvb2wgdmVjdF9jYW5fYWR2YW5jZV9pdnNfcCAobG9v cF92ZWNfaW5mbyk7CiAvKiBJbiB0cmVlLXZlY3Qtc3RtdHMuYy4gICovCiBl eHRlcm4gdW5zaWduZWQgaW50IGN1cnJlbnRfdmVjdG9yX3NpemU7CiBleHRl cm4gdHJlZSBnZXRfdmVjdHlwZV9mb3Jfc2NhbGFyX3R5cGUgKHRyZWUpOwor ZXh0ZXJuIHRyZWUgZ2V0X21hc2tfdHlwZV9mb3Jfc2NhbGFyX3R5cGUgKHRy ZWUpOwogZXh0ZXJuIHRyZWUgZ2V0X3NhbWVfc2l6ZWRfdmVjdHlwZSAodHJl ZSwgdHJlZSk7CiBleHRlcm4gYm9vbCB2ZWN0X2lzX3NpbXBsZV91c2UgKHRy ZWUsIGdpbXBsZSwgbG9vcF92ZWNfaW5mbywKIAkJCSAgICAgICAgYmJfdmVj X2luZm8sIGdpbXBsZSAqLApkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUuYyBiL2dj Yy90cmVlLmMKaW5kZXggYWYzYTZhMy4uMzAzOThlNSAxMDA2NDQKLS0tIGEv Z2NjL3RyZWUuYworKysgYi9nY2MvdHJlZS5jCkBAIC0xMDU2OCw2ICsxMDU2 OCwyMCBAQCBidWlsZF92ZWN0b3JfdHlwZSAodHJlZSBpbm5lcnR5cGUsIGlu dCBudW5pdHMpCiAgIHJldHVybiBtYWtlX3ZlY3Rvcl90eXBlIChpbm5lcnR5 cGUsIG51bml0cywgVk9JRG1vZGUpOwogfQogCisvKiBCdWlsZCB0cnV0aCB2 ZWN0b3Igd2l0aCBzcGVjaWZpZWQgbGVuZ3RoIGFuZCBudW1iZXIgb2YgdW5p dHMuICAqLworCit0cmVlCitidWlsZF90cnV0aF92ZWN0b3JfdHlwZSAodW5z aWduZWQgbnVuaXRzLCB1bnNpZ25lZCB2ZWN0b3Jfc2l6ZSkKK3sKKyAgbWFj aGluZV9tb2RlIG1hc2tfbW9kZSA9IHRhcmdldG0udmVjdG9yaXplLmdldF9t YXNrX21vZGUgKG51bml0cywKKwkJCQkJCQkgICAgdmVjdG9yX3NpemUpOwor CisgIGlmIChtYXNrX21vZGUgPT0gVk9JRG1vZGUpCisgICAgcmV0dXJuIE5V TEw7CisKKyAgcmV0dXJuIG1ha2VfdmVjdG9yX3R5cGUgKGJvb2xlYW5fdHlw ZV9ub2RlLCBudW5pdHMsIG1hc2tfbW9kZSk7Cit9CisKIC8qIFNpbWlsYXJs eSwgYnV0IGJ1aWxkcyBhIHZhcmlhbnQgdHlwZSB3aXRoIFRZUEVfVkVDVE9S X09QQVFVRSBzZXQuICAqLwogCiB0cmVlCkBAIC0xMTA1NCw5ICsxMTA2OCwx MCBAQCB0cnV0aF90eXBlX2ZvciAodHJlZSB0eXBlKQogewogICBpZiAoVFJF RV9DT0RFICh0eXBlKSA9PSBWRUNUT1JfVFlQRSkKICAgICB7Ci0gICAgICB0 cmVlIGVsZW0gPSBsYW5nX2hvb2tzLnR5cGVzLnR5cGVfZm9yX3NpemUKLSAg ICAgICAgKEdFVF9NT0RFX0JJVFNJWkUgKFRZUEVfTU9ERSAoVFJFRV9UWVBF ICh0eXBlKSkpLCAwKTsKLSAgICAgIHJldHVybiBidWlsZF9vcGFxdWVfdmVj dG9yX3R5cGUgKGVsZW0sIFRZUEVfVkVDVE9SX1NVQlBBUlRTICh0eXBlKSk7 CisgICAgICBpZiAoVFJFRV9UWVBFICh0eXBlKSA9PSBib29sZWFuX3R5cGVf bm9kZSkKKwlyZXR1cm4gdHlwZTsKKyAgICAgIHJldHVybiBidWlsZF90cnV0 aF92ZWN0b3JfdHlwZSAoVFlQRV9WRUNUT1JfU1VCUEFSVFMgKHR5cGUpLAor CQkJCSAgICAgIEdFVF9NT0RFX1NJWkUgKFRZUEVfTU9ERSAodHlwZSkpKTsK ICAgICB9CiAgIGVsc2UKICAgICByZXR1cm4gYm9vbGVhbl90eXBlX25vZGU7 CmRpZmYgLS1naXQgYS9nY2MvdHJlZS5oIGIvZ2NjL3RyZWUuaAppbmRleCAy Y2Q2ZWM0Li4xNjU3ZTA2IDEwMDY0NAotLS0gYS9nY2MvdHJlZS5oCisrKyBi L2djYy90cmVlLmgKQEAgLTM4MjAsNiArMzgyMCw3IEBAIGV4dGVybiB0cmVl IGJ1aWxkX3JlZmVyZW5jZV90eXBlX2Zvcl9tb2RlICh0cmVlLCBtYWNoaW5l X21vZGUsIGJvb2wpOwogZXh0ZXJuIHRyZWUgYnVpbGRfcmVmZXJlbmNlX3R5 cGUgKHRyZWUpOwogZXh0ZXJuIHRyZWUgYnVpbGRfdmVjdG9yX3R5cGVfZm9y X21vZGUgKHRyZWUsIG1hY2hpbmVfbW9kZSk7CiBleHRlcm4gdHJlZSBidWls ZF92ZWN0b3JfdHlwZSAodHJlZSBpbm5lcnR5cGUsIGludCBudW5pdHMpOwor ZXh0ZXJuIHRyZWUgYnVpbGRfdHJ1dGhfdmVjdG9yX3R5cGUgKHVuc2lnbmVk LCB1bnNpZ25lZCk7CiBleHRlcm4gdHJlZSBidWlsZF9vcGFxdWVfdmVjdG9y X3R5cGUgKHRyZWUgaW5uZXJ0eXBlLCBpbnQgbnVuaXRzKTsKIGV4dGVybiB0 cmVlIGJ1aWxkX2luZGV4X3R5cGUgKHRyZWUpOwogZXh0ZXJuIHRyZWUgYnVp bGRfYXJyYXlfdHlwZSAodHJlZSwgdHJlZSk7Cg== --001a1140dbb47bddca051f3b9f06--