From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 42742 invoked by alias); 6 May 2019 18:59:22 -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 42719 invoked by uid 89); 6 May 2019 18:59:22 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_50,FREEMAIL_FROM,GIT_PATCH_2,KAM_ASCII_DIVIDERS,KAM_NUMSUBJECT,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=cl, sk:pault@g, sk:paultg, paultgccgnuorg X-HELO: mail-lj1-f182.google.com Received: from mail-lj1-f182.google.com (HELO mail-lj1-f182.google.com) (209.85.208.182) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 06 May 2019 18:59:18 +0000 Received: by mail-lj1-f182.google.com with SMTP id k8so12032880lja.8; Mon, 06 May 2019 11:59:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=YebYvybOsiuYwNAsb0NmqL4sM521yhV3LRHSF9PYBrA=; b=PUvk/2JlfGZhVTkqXS8fh9b1VVf1u4IuKOa7Kv9OzuGiqh02FgW+3RetsKiz6HsgMX docg2EAPLNg+sdM4IE5Qwn5C2np/JUbXhSkcsiZSrudMmY0Rzuaoe3+h+upL9+korLhy 5anTLBRDEXbcHWzqlfB8s0SsfknU7egdDoN1vLN23sYt7J18ZNmjbuUOQTrCpwx6mnhK NwfsOKRhmD1tTDX9kNVKp5O8JrV6Q0aZ1LUl/AVgGAo7Vm1qTPuYf5/cukcxdeoqnbP+ 7cjdMQKJxfI4Q8WJTaqubp3Jx3otJr1EtdtnxitJcGvT2/70d8A6op1WRYOPrCgJJ/zO kS7Q== MIME-Version: 1.0 References: In-Reply-To: From: Paul Richard Thomas Date: Mon, 06 May 2019 18:59:00 -0000 Message-ID: Subject: Re: [Patch, fortran] ISO_Fortran_binding PRs 90093, 90352 & 90355 To: "fortran@gcc.gnu.org" , gcc-patches Content-Type: multipart/mixed; boundary="00000000000063175605883cb210" X-SW-Source: 2019-05/txt/msg00242.txt.bz2 --00000000000063175605883cb210 Content-Type: text/plain; charset="UTF-8" Content-length: 2690 It helps to attach the patch! On Mon, 6 May 2019 at 19:57, Paul Richard Thomas wrote: > > Unfortunately, this patch was still in the making at the release of > 9.1. It is more or less self explanatory with the ChangeLogs. > > It should be noted that gfc_conv_expr_present could not be used in the > fix for PR90093 because the passed descriptor is a CFI type. Instead, > the test is for a null pointer passed. > > The changes to trans-array.c(gfc_trans_create_temp_array) have an eye > on the future, as well as PR90355. I am progressing towards the point > where all descriptors have 'span' set correctly so that > trans.c(get_array_span) can be eliminated and much of the code in the > callers can be simplified. > > Bootstrapped and regtested on FC29/x86_64 - OK for trunk and 9-branch? > > Paul > > 2019-05-06 Paul Thomas > > PR fortran/90093 > * trans-decl.c (convert_CFI_desc): Test that the dummy is > present before doing any of the conversions. > > PR fortran/90352 > * decl.c (gfc_verify_c_interop_param): Restore the error for > charlen > 1 actual arguments passed to bind(C) procs. > Clean up trailing white space. > > PR fortran/90355 > * trans-array.c (gfc_trans_create_temp_array): Set the 'span' > field to the element length for all types. > (gfc_conv_expr_descriptor): The force_no_tmp flag is used to > prevent temporary creation, especially for substrings. > * trans-decl.c (gfc_trans_deferred_vars): Rather than assert > that the backend decl for the string length is non-null, use it > as a condition before calling gfc_trans_vla_type_sizes. > * trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): 'force_no_tmp' > is set before calling gfc_conv_expr_descriptor. > * trans.c (get_array_span): Move the code for extracting 'span' > from gfc_build_array_ref to this function. This is specific to > descriptors that are component and indirect references. > * trans.h : Add the force_no_tmp flag bitfield to gfc_se. > > 2019-05-06 Paul Thomas > > PR fortran/90093 > * gfortran.dg/ISO_Fortran_binding_12.f90: New test. > * gfortran.dg/ISO_Fortran_binding_12.c: Supplementary code. > > PR fortran/90352 > * gfortran.dg/iso_c_binding_char_1.f90: New test. > > PR fortran/90355 > * gfortran.dg/ISO_Fortran_binding_4.f90: Add 'substr' to test > the direct passing of substrings as descriptors to bind(C). > * gfortran.dg/assign_10.f90: Increase the tree_dump count of > 'atmp' to account for the setting of the 'span' field. > * gfortran.dg/transpose_optimization_2.f90: Ditto. --00000000000063175605883cb210 Content-Type: text/x-patch; charset="US-ASCII"; name="submit.diff" Content-Disposition: attachment; filename="submit.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jvcq9vo10 Content-length: 30033 SW5kZXg6IGdjYy9mb3J0cmFuL2RlY2wuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CioqKiBnY2MvZm9ydHJhbi9kZWNsLmMJKHJldmlzaW9uIDI3MDYyMikK LS0tIGdjYy9mb3J0cmFuL2RlY2wuYwkod29ya2luZyBjb3B5KQoqKioqKioq KioqKioqKiogbWF0Y2hfZGF0YV9jb25zdGFudCAoZ2ZjX2V4cHIgKipyZXN1 bHQpCioqKiA0MDYsNDEyICoqKioKICAJIGNvbnRhaW5zIHRoZSByaWdodCBj b25zdGFudCBleHByZXNzaW9uLiAgQ2hlY2sgaGVyZS4gICovCiAgICAgICAg aWYgKCgqcmVzdWx0KS0+c3ltdHJlZSA9PSBOVUxMCiAgCSAgJiYgKCpyZXN1 bHQpLT5leHByX3R5cGUgPT0gRVhQUl9DT05TVEFOVAohIAkgICYmICgoKnJl c3VsdCktPnRzLnR5cGUgPT0gQlRfSU5URUdFUiAKICAJICAgICAgfHwgKCpy ZXN1bHQpLT50cy50eXBlID09IEJUX1JFQUwpKQogIAlyZXR1cm4gbTsKICAK LS0tIDQwNiw0MTIgLS0tLQogIAkgY29udGFpbnMgdGhlIHJpZ2h0IGNvbnN0 YW50IGV4cHJlc3Npb24uICBDaGVjayBoZXJlLiAgKi8KICAgICAgICBpZiAo KCpyZXN1bHQpLT5zeW10cmVlID09IE5VTEwKICAJICAmJiAoKnJlc3VsdCkt PmV4cHJfdHlwZSA9PSBFWFBSX0NPTlNUQU5UCiEgCSAgJiYgKCgqcmVzdWx0 KS0+dHMudHlwZSA9PSBCVF9JTlRFR0VSCiAgCSAgICAgIHx8ICgqcmVzdWx0 KS0+dHMudHlwZSA9PSBCVF9SRUFMKSkKICAJcmV0dXJuIG07CiAgCioqKioq KioqKioqKioqKiBnZmNfdmVyaWZ5X2NfaW50ZXJvcF9wYXJhbSAoZ2ZjX3N5 bWJvbCAqCioqKiAxNDkzLDE1MTEgKioqKgogIAogICAgICAgICAgICAvKiBD aGFyYWN0ZXIgc3RyaW5ncyBhcmUgb25seSBDIGludGVyb3BlcmFibGUgaWYg dGhleSBoYXZlIGEKICAgICAgICAgICAgICAgbGVuZ3RoIG9mIDEuICAqLwoh ICAgICAgICAgICBpZiAoc3ltLT50cy50eXBlID09IEJUX0NIQVJBQ1RFUikK ICAJICAgIHsKICAJICAgICAgZ2ZjX2NoYXJsZW4gKmNsID0gc3ltLT50cy51 LmNsOwogIAkgICAgICBpZiAoIWNsIHx8ICFjbC0+bGVuZ3RoIHx8IGNsLT5s ZW5ndGgtPmV4cHJfdHlwZSAhPSBFWFBSX0NPTlNUQU5UCiAgICAgICAgICAg ICAgICAgICAgfHwgbXB6X2NtcF9zaSAoY2wtPmxlbmd0aC0+dmFsdWUuaW50 ZWdlciwgMSkgIT0gMCkKICAJCXsKISAJCSAgaWYgKCFnZmNfbm90aWZ5X3N0 ZCAoR0ZDX1NURF9GMjAxOCwKISAJCQkJICAgICAgICJDaGFyYWN0ZXIgYXJn dW1lbnQgJXFzIGF0ICVMICIKISAJCQkJICAgICAgICJtdXN0IGJlIGxlbmd0 aCAxIGJlY2F1c2UgIgohIAkJCQkgICAgICAgInByb2NlZHVyZSAlcXMgaXMg QklORChDKSIsCiEgCQkJCSAgICAgICBzeW0tPm5hbWUsICZzeW0tPmRlY2xh cmVkX2F0LAohIAkJCQkgICAgICAgc3ltLT5ucy0+cHJvY19uYW1lLT5uYW1l KSkKISAJCSAgICByZXR2YWwgPSBmYWxzZTsKICAJCX0KICAJICAgIH0KICAK LS0tIDE0OTMsMTUxMCAtLS0tCiAgCiAgICAgICAgICAgIC8qIENoYXJhY3Rl ciBzdHJpbmdzIGFyZSBvbmx5IEMgaW50ZXJvcGVyYWJsZSBpZiB0aGV5IGhh dmUgYQogICAgICAgICAgICAgICBsZW5ndGggb2YgMS4gICovCiEgICAgICAg ICAgIGlmIChzeW0tPnRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVSICYmICFzeW0t PmF0dHIuZGltZW5zaW9uKQogIAkgICAgewogIAkgICAgICBnZmNfY2hhcmxl biAqY2wgPSBzeW0tPnRzLnUuY2w7CiAgCSAgICAgIGlmICghY2wgfHwgIWNs LT5sZW5ndGggfHwgY2wtPmxlbmd0aC0+ZXhwcl90eXBlICE9IEVYUFJfQ09O U1RBTlQKICAgICAgICAgICAgICAgICAgICB8fCBtcHpfY21wX3NpIChjbC0+ bGVuZ3RoLT52YWx1ZS5pbnRlZ2VyLCAxKSAhPSAwKQogIAkJewohIAkJICBn ZmNfZXJyb3IgKCJDaGFyYWN0ZXIgYXJndW1lbnQgJXFzIGF0ICVMICIKISAJ CQkgICAgICJtdXN0IGJlIGxlbmd0aCAxIGJlY2F1c2UgIgohIAkJCSAgICAg InByb2NlZHVyZSAlcXMgaXMgQklORChDKSIsCiEgCQkJICAgICBzeW0tPm5h bWUsICZzeW0tPmRlY2xhcmVkX2F0LAohIAkJCSAgICAgc3ltLT5ucy0+cHJv Y19uYW1lLT5uYW1lKTsKISAJCSAgcmV0dmFsID0gZmFsc2U7CiAgCQl9CiAg CSAgICB9CiAgCioqKioqKioqKioqKioqKiBzdGF0aWMgYm9vbAoqKiogNjA3 NCw2MDgwICoqKioKICBpbl9tb2R1bGVfb3JfaW50ZXJmYWNlKHZvaWQpCiAg ewogICAgaWYgKGdmY19jdXJyZW50X3N0YXRlICgpID09IENPTVBfTU9EVUxF CiEgICAgICAgfHwgZ2ZjX2N1cnJlbnRfc3RhdGUgKCkgPT0gQ09NUF9TVUJN T0RVTEUgCiAgICAgICAgfHwgZ2ZjX2N1cnJlbnRfc3RhdGUgKCkgPT0gQ09N UF9JTlRFUkZBQ0UpCiAgICAgIHJldHVybiB0cnVlOwogIAotLS0gNjA3Myw2 MDc5IC0tLS0KICBpbl9tb2R1bGVfb3JfaW50ZXJmYWNlKHZvaWQpCiAgewog ICAgaWYgKGdmY19jdXJyZW50X3N0YXRlICgpID09IENPTVBfTU9EVUxFCiEg ICAgICAgfHwgZ2ZjX2N1cnJlbnRfc3RhdGUgKCkgPT0gQ09NUF9TVUJNT0RV TEUKICAgICAgICB8fCBnZmNfY3VycmVudF9zdGF0ZSAoKSA9PSBDT01QX0lO VEVSRkFDRSkKICAgICAgcmV0dXJuIHRydWU7CiAgCioqKioqKioqKioqKioq KiBpbl9tb2R1bGVfb3JfaW50ZXJmYWNlKHZvaWQpCioqKiA2MDg1LDYwOTEg KioqKgogICAgICAgIGdmY19zdGF0ZV9kYXRhICpwOwogICAgICAgIGZvciAo cCA9IGdmY19zdGF0ZV9zdGFjay0+cHJldmlvdXM7IHAgOyBwID0gcC0+cHJl dmlvdXMpCiAgCXsKISAJICBpZiAocC0+c3RhdGUgPT0gQ09NUF9NT0RVTEUg fHwgcC0+c3RhdGUgPT0gQ09NUF9TVUJNT0RVTEUgCiAgCSAgICAgIHx8IHAt PnN0YXRlID09IENPTVBfSU5URVJGQUNFKQogIAkgICAgcmV0dXJuIHRydWU7 CiAgCX0KLS0tIDYwODQsNjA5MCAtLS0tCiAgICAgICAgZ2ZjX3N0YXRlX2Rh dGEgKnA7CiAgICAgICAgZm9yIChwID0gZ2ZjX3N0YXRlX3N0YWNrLT5wcmV2 aW91czsgcCA7IHAgPSBwLT5wcmV2aW91cykKICAJewohIAkgIGlmIChwLT5z dGF0ZSA9PSBDT01QX01PRFVMRSB8fCBwLT5zdGF0ZSA9PSBDT01QX1NVQk1P RFVMRQogIAkgICAgICB8fCBwLT5zdGF0ZSA9PSBDT01QX0lOVEVSRkFDRSkK ICAJICAgIHJldHVybiB0cnVlOwogIAl9CioqKioqKioqKioqKioqKiBnZmNf bWF0Y2hfZm9ybWFsX2FyZ2xpc3QgKGdmY19zeW1ib2wgKnByCioqKiA2MzA0 LDYzMTAgKioqKgogICAgICB9CiAgCiAgICBpZiAoZ2ZjX21hdGNoX2NoYXIg KCcpJykgPT0gTUFUQ0hfWUVTKQohICAgeyAgICAgICAgCiAgICAgIGlmICh0 eXBlcGFyYW0pCiAgICAgICAgewogIAlnZmNfZXJyb3Jfbm93ICgiQSB0eXBl IHBhcmFtZXRlciBsaXN0IGlzIHJlcXVpcmVkIGF0ICVDIik7Ci0tLSA2MzAz LDYzMDkgLS0tLQogICAgICB9CiAgCiAgICBpZiAoZ2ZjX21hdGNoX2NoYXIg KCcpJykgPT0gTUFUQ0hfWUVTKQohICAgewogICAgICBpZiAodHlwZXBhcmFt KQogICAgICAgIHsKICAJZ2ZjX2Vycm9yX25vdyAoIkEgdHlwZSBwYXJhbWV0 ZXIgbGlzdCBpcyByZXF1aXJlZCBhdCAlQyIpOwoqKioqKioqKioqKioqKiog Z2ZjX21hdGNoX2VudHJ5ICh2b2lkKQoqKiogNzQ4OSw3NDk1ICoqKioKICAJ ICBpZiAoIWdmY19hZGRfaXNfYmluZF9jICgmKGVudHJ5LT5hdHRyKSwgZW50 cnktPm5hbWUsCiAgCQkJCSAgJihlbnRyeS0+ZGVjbGFyZWRfYXQpLCAxKSkK ICAJICAgIHJldHVybiBNQVRDSF9FUlJPUjsKISAJCiAgCX0KICAKICAgICAg ICBpZiAoIWdmY19jdXJyZW50X25zLT5wYXJlbnQKLS0tIDc0ODgsNzQ5NCAt LS0tCiAgCSAgaWYgKCFnZmNfYWRkX2lzX2JpbmRfYyAoJihlbnRyeS0+YXR0 ciksIGVudHJ5LT5uYW1lLAogIAkJCQkgICYoZW50cnktPmRlY2xhcmVkX2F0 KSwgMSkpCiAgCSAgICByZXR1cm4gTUFUQ0hfRVJST1I7CiEgCiAgCX0KICAK ICAgICAgICBpZiAoIWdmY19jdXJyZW50X25zLT5wYXJlbnQKSW5kZXg6IGdj Yy9mb3J0cmFuL3RyYW5zLWFycmF5LmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQoqKiogZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuYwkocmV2aXNpb24gMjcw NjIyKQotLS0gZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuYwkod29ya2luZyBj b3B5KQoqKioqKioqKioqKioqKiogZ2ZjX3RyYW5zX2NyZWF0ZV90ZW1wX2Fy cmF5IChzdG10YmxvY2tfdAoqKiogMTIzOSwxMjQ0ICoqKioKLS0tIDEyMzks MTI0NSAtLS0tCiAgICB0cmVlIG5lbGVtOwogICAgdHJlZSBjb25kOwogICAg dHJlZSBvcl9leHByOworICAgdHJlZSBlbGVtc2l6ZTsKICAgIHRyZWUgY2xh c3NfZXhwciA9IE5VTExfVFJFRTsKICAgIGludCBuLCBkaW0sIHRtcF9kaW07 CiAgICBpbnQgdG90YWxfZGltID0gMDsKKioqKioqKioqKioqKioqIGdmY190 cmFuc19jcmVhdGVfdGVtcF9hcnJheSAoc3RtdGJsb2NrX3QKKioqIDEzMzMs MTM0NyAqKioqCiAgICB0bXAgPSBnZmNfY29udl9kZXNjcmlwdG9yX2R0eXBl IChkZXNjKTsKICAgIGdmY19hZGRfbW9kaWZ5IChwcmUsIHRtcCwgZ2ZjX2dl dF9kdHlwZSAoVFJFRV9UWVBFIChkZXNjKSkpOwogIAotICAgLyogQWxzbyBz ZXQgdGhlIHNwYW4gZm9yIGRlcml2ZWQgdHlwZXMsIHNpbmNlIHRoZXkgY2Fu IGJlIHVzZWQgaW4KLSAgICAgIGNvbXBvbmVudCByZWZlcmVuY2VzIHRvIGFy cmF5cyBvZiB0aGlzIHR5cGUuICAqLwotICAgaWYgKFRSRUVfQ09ERSAoZWx0 eXBlKSA9PSBSRUNPUkRfVFlQRSkKLSAgICAgewotICAgICAgIHRtcCA9IFRZ UEVfU0laRV9VTklUIChlbHR5cGUpOwotICAgICAgIHRtcCA9IGZvbGRfY29u dmVydCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsIHRtcCk7Ci0gICAgICAgZ2Zj X2NvbnZfZGVzY3JpcHRvcl9zcGFuX3NldCAocHJlLCBkZXNjLCB0bXApOwot ICAgICB9Ci0gCiAgICAvKgogICAgICAgRmlsbCBpbiB0aGUgYm91bmRzIGFu ZCBzdHJpZGUuICBUaGlzIGlzIGEgcGFja2VkIGFycmF5LCBzbzoKICAKLS0t IDEzMzQsMTMzOSAtLS0tCioqKioqKioqKioqKioqKiBnZmNfdHJhbnNfY3Jl YXRlX3RlbXBfYXJyYXkgKHN0bXRibG9ja190CioqKiAxNDEzLDE0MzQgKioq KgogIAl9CiAgICAgIH0KICAKICAgIC8qIEdldCB0aGUgc2l6ZSBvZiB0aGUg YXJyYXkuICAqLwogICAgaWYgKHNpemUgJiYgIWNhbGxlZV9hbGxvYykKICAg ICAgewotICAgICAgIHRyZWUgZWxlbXNpemU7CiAgICAgICAgLyogSWYgb3Jf ZXhwciBpcyB0cnVlLCB0aGVuIHRoZSBleHRlbnQgaW4gYXQgbGVhc3Qgb25l CiAgCSBkaW1lbnNpb24gaXMgemVybyBhbmQgdGhlIHNpemUgaXMgc2V0IHRv IHplcm8uICAqLwogICAgICAgIHNpemUgPSBmb2xkX2J1aWxkM19sb2MgKGlu cHV0X2xvY2F0aW9uLCBDT05EX0VYUFIsIGdmY19hcnJheV9pbmRleF90eXBl LAogIAkJCSAgICAgIG9yX2V4cHIsIGdmY19pbmRleF96ZXJvX25vZGUsIHNp emUpOwogIAogICAgICAgIG5lbGVtID0gc2l6ZTsKLSAgICAgICBpZiAoY2xh c3NfZXhwciA9PSBOVUxMX1RSRUUpCi0gCWVsZW1zaXplID0gZm9sZF9jb252 ZXJ0IChnZmNfYXJyYXlfaW5kZXhfdHlwZSwKLSAJCQlUWVBFX1NJWkVfVU5J VCAoZ2ZjX2dldF9lbGVtZW50X3R5cGUgKHR5cGUpKSk7Ci0gICAgICAgZWxz ZQotIAllbGVtc2l6ZSA9IGdmY19jbGFzc192dGFiX3NpemVfZ2V0IChjbGFz c19leHByKTsKLSAKICAgICAgICBzaXplID0gZm9sZF9idWlsZDJfbG9jIChp bnB1dF9sb2NhdGlvbiwgTVVMVF9FWFBSLCBnZmNfYXJyYXlfaW5kZXhfdHlw ZSwKICAJCQkgICAgICBzaXplLCBlbGVtc2l6ZSk7CiAgICAgIH0KLS0tIDE0 MDUsMTQyNSAtLS0tCiAgCX0KICAgICAgfQogIAorICAgaWYgKGNsYXNzX2V4 cHIgPT0gTlVMTF9UUkVFKQorICAgICBlbGVtc2l6ZSA9IGZvbGRfY29udmVy dCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsCisgCQkJICAgICBUWVBFX1NJWkVf VU5JVCAoZ2ZjX2dldF9lbGVtZW50X3R5cGUgKHR5cGUpKSk7CisgICBlbHNl CisgICAgIGVsZW1zaXplID0gZ2ZjX2NsYXNzX3Z0YWJfc2l6ZV9nZXQgKGNs YXNzX2V4cHIpOworIAogICAgLyogR2V0IHRoZSBzaXplIG9mIHRoZSBhcnJh eS4gICovCiAgICBpZiAoc2l6ZSAmJiAhY2FsbGVlX2FsbG9jKQogICAgICB7 CiAgICAgICAgLyogSWYgb3JfZXhwciBpcyB0cnVlLCB0aGVuIHRoZSBleHRl bnQgaW4gYXQgbGVhc3Qgb25lCiAgCSBkaW1lbnNpb24gaXMgemVybyBhbmQg dGhlIHNpemUgaXMgc2V0IHRvIHplcm8uICAqLwogICAgICAgIHNpemUgPSBm b2xkX2J1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBDT05EX0VYUFIsIGdm Y19hcnJheV9pbmRleF90eXBlLAogIAkJCSAgICAgIG9yX2V4cHIsIGdmY19p bmRleF96ZXJvX25vZGUsIHNpemUpOwogIAogICAgICAgIG5lbGVtID0gc2l6 ZTsKICAgICAgICBzaXplID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2Nh dGlvbiwgTVVMVF9FWFBSLCBnZmNfYXJyYXlfaW5kZXhfdHlwZSwKICAJCQkg ICAgICBzaXplLCBlbGVtc2l6ZSk7CiAgICAgIH0KKioqKioqKioqKioqKioq IGdmY190cmFuc19jcmVhdGVfdGVtcF9hcnJheSAoc3RtdGJsb2NrX3QKKioq IDE0MzgsMTQ0MyAqKioqCi0tLSAxNDI5LDE0MzggLS0tLQogICAgICAgIHNp emUgPSBOVUxMX1RSRUU7CiAgICAgIH0KICAKKyAgIC8qIFNldCB0aGUgc3Bh bi4gICovCisgICB0bXAgPSBmb2xkX2NvbnZlcnQgKGdmY19hcnJheV9pbmRl eF90eXBlLCBlbGVtc2l6ZSk7CisgICBnZmNfY29udl9kZXNjcmlwdG9yX3Nw YW5fc2V0IChwcmUsIGRlc2MsIHRtcCk7CisgCiAgICBnZmNfdHJhbnNfYWxs b2NhdGVfYXJyYXlfc3RvcmFnZSAocHJlLCBwb3N0LCBpbmZvLCBzaXplLCBu ZWxlbSwgaW5pdGlhbCwKICAJCQkJICAgIGR5bmFtaWMsIGRlYWxsb2MpOwog IAoqKioqKioqKioqKioqKiogZ2ZjX2NvbnZfZXhwcl9kZXNjcmlwdG9yIChn ZmNfc2UgKnNlLCBnZgoqKiogNzI0OCw3MjUzICoqKioKLS0tIDcyNDMsNzI1 MCAtLS0tCiAgCiAgICAgICAgaWYgKHNlLT5mb3JjZV90bXApCiAgCW5lZWRf dG1wID0gMTsKKyAgICAgICBlbHNlIGlmIChzZS0+Zm9yY2Vfbm9fdG1wKQor IAluZWVkX3RtcCA9IDA7CiAgCiAgICAgICAgaWYgKG5lZWRfdG1wKQogIAlm dWxsID0gMDsKSW5kZXg6IGdjYy9mb3J0cmFuL3RyYW5zLWRlY2wuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CioqKiBnY2MvZm9ydHJhbi90cmFucy1kZWNs LmMJKHJldmlzaW9uIDI3MDYyMikKLS0tIGdjYy9mb3J0cmFuL3RyYW5zLWRl Y2wuYwkod29ya2luZyBjb3B5KQoqKioqKioqKioqKioqKiogY29udmVydF9D RklfZGVzYyAoZ2ZjX3dyYXBwZWRfYmxvY2sgKiBibAoqKiogNDI3OCw0Mjg1 ICoqKioKLS0tIDQyNzgsNDI4NyAtLS0tCiAgICB0cmVlIENGSV9kZXNjX3B0 cjsKICAgIHRyZWUgZHVtbXlfcHRyOwogICAgdHJlZSB0bXA7CisgICB0cmVl IHByZXNlbnQ7CiAgICB0cmVlIGluY29taW5nOwogICAgdHJlZSBvdXRnb2lu ZzsKKyAgIHN0bXRibG9ja190IG91dGVyX2Jsb2NrOwogICAgc3RtdGJsb2Nr X3QgdG1wYmxvY2s7CiAgCiAgICAvKiBkdW1teV9wdHIgd2lsbCBiZSB0aGUg cG9pbnRlciB0byB0aGUgcGFzc2VkIGFycmF5IGRlc2NyaXB0b3IsCioqKioq KioqKioqKioqKiBjb252ZXJ0X0NGSV9kZXNjIChnZmNfd3JhcHBlZF9ibG9j ayAqIGJsCioqKiA0MzAzLDQzMDggKioqKgotLS0gNDMwNSw0MzE2IC0tLS0K ICAgICAgICBnZmNfZGVzY19wdHIgPSBnZmNfY3JlYXRlX3ZhciAodG1wLCAi Z2ZjX2Rlc2NfcHRyIik7CiAgICAgICAgQ0ZJX2Rlc2NfcHRyID0gZ2ZjX2Ny ZWF0ZV92YXIgKHB2b2lkX3R5cGVfbm9kZSwgIkNGSV9kZXNjX3B0ciIpOwog IAorICAgICAgIC8qIEZpeCB0aGUgY29uZGl0aW9uIGZvciB0aGUgcHJlc2Vu Y2Ugb2YgdGhlIGFyZ3VtZW50LiAgKi8KKyAgICAgICBnZmNfaW5pdF9ibG9j ayAoJm91dGVyX2Jsb2NrKTsKKyAgICAgICBwcmVzZW50ID0gZm9sZF9idWls ZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTkVfRVhQUiwKKyAJCQkJIGxvZ2lj YWxfdHlwZV9ub2RlLCBkdW1teV9wdHIsCisgCQkJCSBidWlsZF9pbnRfY3N0 IChUUkVFX1RZUEUgKGR1bW15X3B0ciksIDApKTsKKyAKICAgICAgICBnZmNf aW5pdF9ibG9jayAoJnRtcGJsb2NrKTsKICAgICAgICAvKiBQb2ludGVyIHRv IHRoZSBnZmMgZGVzY3JpcHRvci4gICovCiAgICAgICAgZ2ZjX2FkZF9tb2Rp ZnkgKCZ0bXBibG9jaywgZ2ZjX2Rlc2NfcHRyLAoqKioqKioqKioqKioqKiog Y29udmVydF9DRklfZGVzYyAoZ2ZjX3dyYXBwZWRfYmxvY2sgKiBibAoqKiog NDMxOCw0MzMzICoqKioKICAgICAgICAvKiBTZXQgdGhlIGR1bW15IHBvaW50 ZXIgdG8gcG9pbnQgdG8gdGhlIGdmY19kZXNjcmlwdG9yLiAgKi8KICAgICAg ICBnZmNfYWRkX21vZGlmeSAoJnRtcGJsb2NrLCBkdW1teV9wdHIsCiAgCQkg ICAgICBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoZHVtbXlfcHRyKSwgZ2Zj X2Rlc2NfcHRyKSk7Ci0gICAgICAgaW5jb21pbmcgPSBnZmNfZmluaXNoX2Js b2NrICgmdG1wYmxvY2spOwogIAohICAgICAgIGdmY19pbml0X2Jsb2NrICgm dG1wYmxvY2spOwogICAgICAgIC8qIENvbnZlcnQgdGhlIGdmYyBkZXNjcmlw dG9yIGJhY2sgdG8gdGhlIENGSSB0eXBlIGJlZm9yZSBnb2luZwohIAkgb3V0 IG9mIHNjb3BlLiAgKi8KICAgICAgICB0bXAgPSBnZmNfYnVpbGRfYWRkcl9l eHByIChwcHZvaWRfdHlwZV9ub2RlLCBDRklfZGVzY19wdHIpOwogICAgICAg IG91dGdvaW5nID0gYnVpbGRfY2FsbF9leHByX2xvYyAoaW5wdXRfbG9jYXRp b24sCiAgCQkJZ2Zvcl9mbmRlY2xfZ2ZjX3RvX2NmaSwgMiwgdG1wLCBnZmNf ZGVzY19wdHIpOwogICAgICAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJnRt cGJsb2NrLCBvdXRnb2luZyk7CiEgICAgICAgb3V0Z29pbmcgPSBnZmNfZmlu aXNoX2Jsb2NrICgmdG1wYmxvY2spOwogIAogICAgICAgIC8qIEFkZCB0aGUg bG90IHRvIHRoZSBwcm9jZWR1cmUgaW5pdCBhbmQgZmluYWxseSBibG9ja3Mu ICAqLwogICAgICAgIGdmY19hZGRfaW5pdF9jbGVhbnVwIChibG9jaywgaW5j b21pbmcsIG91dGdvaW5nKTsKLS0tIDQzMjYsNDM2OCAtLS0tCiAgICAgICAg LyogU2V0IHRoZSBkdW1teSBwb2ludGVyIHRvIHBvaW50IHRvIHRoZSBnZmNf ZGVzY3JpcHRvci4gICovCiAgICAgICAgZ2ZjX2FkZF9tb2RpZnkgKCZ0bXBi bG9jaywgZHVtbXlfcHRyLAogIAkJICAgICAgZm9sZF9jb252ZXJ0IChUUkVF X1RZUEUgKGR1bW15X3B0ciksIGdmY19kZXNjX3B0cikpOwogIAohICAgICAg IC8qIFRoZSBoaWRkZW4gc3RyaW5nIGxlbmd0aCBpcyBub3QgcGFzc2VkIHRv IGJpbmQoQykgcHJvY2VkdXJlcyBzbyBzZXQKISAJIGl0IGZyb20gdGhlIGRl c2NyaXB0b3IgZWxlbWVudCBsZW5ndGguICAqLwohICAgICAgIGlmIChzeW0t PnRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVSCiEgCSAgJiYgc3ltLT50cy51LmNs LT5iYWNrZW5kX2RlY2wKISAJICAmJiBWQVJfUCAoc3ltLT50cy51LmNsLT5i YWNrZW5kX2RlY2wpKQohIAl7CiEgCSAgdG1wID0gYnVpbGRfZm9sZF9pbmRp cmVjdF9yZWZfbG9jIChpbnB1dF9sb2NhdGlvbiwgZHVtbXlfcHRyKTsKISAJ ICB0bXAgPSBnZmNfY29udl9kZXNjcmlwdG9yX2VsZW1fbGVuICh0bXApOwoh IAkgIGdmY19hZGRfbW9kaWZ5ICgmdG1wYmxvY2ssIHN5bS0+dHMudS5jbC0+ YmFja2VuZF9kZWNsLAohIAkJCSAgZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUg KHN5bS0+dHMudS5jbC0+YmFja2VuZF9kZWNsKSwKISAJCQkJICAgICAgICB0 bXApKTsKISAJfQohIAohICAgICAgIC8qIENoZWNrIHRoYXQgdGhlIGFyZ3Vt ZW50IGlzIHByZXNlbnQgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWJvdmUuICAq LwohICAgICAgIGluY29taW5nID0gYnVpbGQzX3YgKENPTkRfRVhQUiwgcHJl c2VudCwKISAJCQkgICBnZmNfZmluaXNoX2Jsb2NrICgmdG1wYmxvY2spLAoh IAkJCSAgIGJ1aWxkX2VtcHR5X3N0bXQgKGlucHV0X2xvY2F0aW9uKSk7CiEg ICAgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmb3V0ZXJfYmxvY2ssIGlu Y29taW5nKTsKISAgICAgICBpbmNvbWluZyA9IGdmY19maW5pc2hfYmxvY2sg KCZvdXRlcl9ibG9jayk7CiEgCiEgCiAgICAgICAgLyogQ29udmVydCB0aGUg Z2ZjIGRlc2NyaXB0b3IgYmFjayB0byB0aGUgQ0ZJIHR5cGUgYmVmb3JlIGdv aW5nCiEgCSBvdXQgb2Ygc2NvcGUsIGlmIHRoZSBDRkkgdHlwZSB3YXMgcHJl c2VudCBhdCBlbnRyeS4gICovCiEgICAgICAgZ2ZjX2luaXRfYmxvY2sgKCZv dXRlcl9ibG9jayk7CiEgICAgICAgZ2ZjX2luaXRfYmxvY2sgKCZ0bXBibG9j ayk7CiEgCiAgICAgICAgdG1wID0gZ2ZjX2J1aWxkX2FkZHJfZXhwciAocHB2 b2lkX3R5cGVfbm9kZSwgQ0ZJX2Rlc2NfcHRyKTsKICAgICAgICBvdXRnb2lu ZyA9IGJ1aWxkX2NhbGxfZXhwcl9sb2MgKGlucHV0X2xvY2F0aW9uLAogIAkJ CWdmb3JfZm5kZWNsX2dmY190b19jZmksIDIsIHRtcCwgZ2ZjX2Rlc2NfcHRy KTsKICAgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZ0bXBibG9jaywg b3V0Z29pbmcpOwohIAohICAgICAgIG91dGdvaW5nID0gYnVpbGQzX3YgKENP TkRfRVhQUiwgcHJlc2VudCwKISAJCQkgICBnZmNfZmluaXNoX2Jsb2NrICgm dG1wYmxvY2spLAohIAkJCSAgIGJ1aWxkX2VtcHR5X3N0bXQgKGlucHV0X2xv Y2F0aW9uKSk7CiEgICAgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmb3V0 ZXJfYmxvY2ssIG91dGdvaW5nKTsKISAgICAgICBvdXRnb2luZyA9IGdmY19m aW5pc2hfYmxvY2sgKCZvdXRlcl9ibG9jayk7CiAgCiAgICAgICAgLyogQWRk IHRoZSBsb3QgdG8gdGhlIHByb2NlZHVyZSBpbml0IGFuZCBmaW5hbGx5IGJs b2Nrcy4gICovCiAgICAgICAgZ2ZjX2FkZF9pbml0X2NsZWFudXAgKGJsb2Nr LCBpbmNvbWluZywgb3V0Z29pbmcpOwoqKioqKioqKioqKioqKiogZ2ZjX3Ry YW5zX2RlZmVycmVkX3ZhcnMgKGdmY19zeW1ib2wgKiBwcgoqKiogNDkyMyw0 OTMxICoqKioKICAKICAgIGZvciAoZiA9IGdmY19zeW1fZ2V0X2R1bW15X2Fy Z3MgKHByb2Nfc3ltKTsgZjsgZiA9IGYtPm5leHQpCiAgICAgIHsKISAgICAg ICBpZiAoZi0+c3ltICYmIGYtPnN5bS0+dGxpbmsgPT0gTlVMTCAmJiBmLT5z eW0tPnRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVSKQogIAl7Ci0gCSAgZ2NjX2Fz c2VydCAoZi0+c3ltLT50cy51LmNsLT5iYWNrZW5kX2RlY2wgIT0gTlVMTCk7 CiAgCSAgaWYgKFRSRUVfQ09ERSAoZi0+c3ltLT50cy51LmNsLT5iYWNrZW5k X2RlY2wpID09IFBBUk1fREVDTCkKICAJICAgIGdmY190cmFuc192bGFfdHlw ZV9zaXplcyAoZi0+c3ltLCAmdG1wYmxvY2spOwogIAl9Ci0tLSA0OTU4LDQ5 NjYgLS0tLQogIAogICAgZm9yIChmID0gZ2ZjX3N5bV9nZXRfZHVtbXlfYXJn cyAocHJvY19zeW0pOyBmOyBmID0gZi0+bmV4dCkKICAgICAgewohICAgICAg IGlmIChmLT5zeW0gJiYgZi0+c3ltLT50bGluayA9PSBOVUxMICYmIGYtPnN5 bS0+dHMudHlwZSA9PSBCVF9DSEFSQUNURVIKISAJICAmJiBmLT5zeW0tPnRz LnUuY2wtPmJhY2tlbmRfZGVjbCkKICAJewogIAkgIGlmIChUUkVFX0NPREUg KGYtPnN5bS0+dHMudS5jbC0+YmFja2VuZF9kZWNsKSA9PSBQQVJNX0RFQ0wp CiAgCSAgICBnZmNfdHJhbnNfdmxhX3R5cGVfc2l6ZXMgKGYtPnN5bSwgJnRt cGJsb2NrKTsKICAJfQpJbmRleDogZ2NjL2ZvcnRyYW4vdHJhbnMtZXhwci5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy9mb3J0cmFuL3RyYW5z LWV4cHIuYwkocmV2aXNpb24gMjcwNjIyKQotLS0gZ2NjL2ZvcnRyYW4vdHJh bnMtZXhwci5jCSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKiBnZmNf Y29udl9nZmNfZGVzY190b19jZmlfZGVzYyAoZ2ZjX3NlICpwCioqKiA1MDA2 LDUwMTEgKioqKgotLS0gNTAwNiw1MDEyIC0tLS0KICAKICAgIGlmIChlLT5y YW5rICE9IDApCiAgICAgIHsKKyAgICAgICBwYXJtc2UtPmZvcmNlX25vX3Rt cCA9IDE7CiAgICAgICAgaWYgKGZzeW0tPmF0dHIuY29udGlndW91cwogIAkg ICYmICFnZmNfaXNfc2ltcGx5X2NvbnRpZ3VvdXMgKGUsIGZhbHNlLCB0cnVl KSkKICAJZ2ZjX2NvbnZfc3VicmVmX2FycmF5X2FyZyAocGFybXNlLCBlLCBm YWxzZSwgZnN5bS0+YXR0ci5pbnRlbnQsCkluZGV4OiBnY2MvZm9ydHJhbi90 cmFucy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy9mb3J0cmFu L3RyYW5zLmMJKHJldmlzaW9uIDI3MDYyMikKLS0tIGdjYy9mb3J0cmFuL3Ry YW5zLmMJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqIGdldF9hcnJh eV9zcGFuICh0cmVlIHR5cGUsIHRyZWUgZGVjbCkKKioqIDI5MCwyOTcgKioq KgogIHsKICAgIHRyZWUgc3BhbjsKICAKICAgIC8qIFJldHVybiB0aGUgc3Bh biBmb3IgZGVmZXJyZWQgY2hhcmFjdGVyIGxlbmd0aCBhcnJheSByZWZlcmVu Y2VzLiAgKi8KISAgIGlmICh0eXBlICYmIFRSRUVfQ09ERSAodHlwZSkgPT0g QVJSQVlfVFlQRQogICAgICAgICYmIFRZUEVfTUFYX1ZBTFVFIChUWVBFX0RP TUFJTiAodHlwZSkpICE9IE5VTExfVFJFRQogICAgICAgICYmIChWQVJfUCAo VFlQRV9NQVhfVkFMVUUgKFRZUEVfRE9NQUlOICh0eXBlKSkpCiAgCSAgfHwg VFJFRV9DT0RFIChUWVBFX01BWF9WQUxVRSAoVFlQRV9ET01BSU4gKHR5cGUp KSkgPT0gSU5ESVJFQ1RfUkVGKQotLS0gMjkwLDMwNSAtLS0tCiAgewogICAg dHJlZSBzcGFuOwogIAorICAgaWYgKFRSRUVfQ09ERSAoZGVjbCkgPT0gQ09N UE9ORU5UX1JFRgorICAgICAgICYmIEdGQ19ERVNDUklQVE9SX1RZUEVfUCAo VFJFRV9UWVBFIChkZWNsKSkpCisgICAgIHJldHVybiBnZmNfY29udl9kZXNj cmlwdG9yX3NwYW5fZ2V0IChkZWNsKTsKKyAgIGVsc2UgaWYgKFRSRUVfQ09E RSAoZGVjbCkgPT0gSU5ESVJFQ1RfUkVGCisgCSAgICYmIEdGQ19ERVNDUklQ VE9SX1RZUEVfUCAoVFJFRV9UWVBFIChkZWNsKSkpCisgICAgIHJldHVybiBn ZmNfY29udl9kZXNjcmlwdG9yX3NwYW5fZ2V0IChkZWNsKTsKKyAKICAgIC8q IFJldHVybiB0aGUgc3BhbiBmb3IgZGVmZXJyZWQgY2hhcmFjdGVyIGxlbmd0 aCBhcnJheSByZWZlcmVuY2VzLiAgKi8KISAgIGlmIChUUkVFX0NPREUgKGRl Y2wpICE9IElORElSRUNUX1JFRgohICAgICAgICYmIHR5cGUgJiYgVFJFRV9D T0RFICh0eXBlKSA9PSBBUlJBWV9UWVBFCiAgICAgICAgJiYgVFlQRV9NQVhf VkFMVUUgKFRZUEVfRE9NQUlOICh0eXBlKSkgIT0gTlVMTF9UUkVFCiAgICAg ICAgJiYgKFZBUl9QIChUWVBFX01BWF9WQUxVRSAoVFlQRV9ET01BSU4gKHR5 cGUpKSkKICAJICB8fCBUUkVFX0NPREUgKFRZUEVfTUFYX1ZBTFVFIChUWVBF X0RPTUFJTiAodHlwZSkpKSA9PSBJTkRJUkVDVF9SRUYpCioqKioqKioqKioq KioqKiBnZXRfYXJyYXlfc3BhbiAodHJlZSB0eXBlLCB0cmVlIGRlY2wpCioq KiAzMDcsMzEzICoqKioKICAJCQkJCVRZUEVfU0laRV9VTklUIChUUkVFX1RZ UEUgKHR5cGUpKSksCiAgCQkJICBzcGFuKTsKICAgICAgfQohICAgZWxzZSBp ZiAodHlwZSAmJiBUUkVFX0NPREUgKHR5cGUpID09IEFSUkFZX1RZUEUKICAJ ICAgJiYgVFlQRV9NQVhfVkFMVUUgKFRZUEVfRE9NQUlOICh0eXBlKSkgIT0g TlVMTF9UUkVFCiAgCSAgICYmIGludGVnZXJfemVyb3AgKFRZUEVfTUFYX1ZB TFVFIChUWVBFX0RPTUFJTiAodHlwZSkpKSkKICAgICAgewotLS0gMzE1LDMy MiAtLS0tCiAgCQkJCQlUWVBFX1NJWkVfVU5JVCAoVFJFRV9UWVBFICh0eXBl KSkpLAogIAkJCSAgc3Bhbik7CiAgICAgIH0KISAgIGVsc2UgaWYgKFRSRUVf Q09ERSAoZGVjbCkgIT0gSU5ESVJFQ1RfUkVGCiEgCSAgICYmIHR5cGUgJiYg VFJFRV9DT0RFICh0eXBlKSA9PSBBUlJBWV9UWVBFCiAgCSAgICYmIFRZUEVf TUFYX1ZBTFVFIChUWVBFX0RPTUFJTiAodHlwZSkpICE9IE5VTExfVFJFRQog IAkgICAmJiBpbnRlZ2VyX3plcm9wIChUWVBFX01BWF9WQUxVRSAoVFlQRV9E T01BSU4gKHR5cGUpKSkpCiAgICAgIHsKKioqKioqKioqKioqKioqIGdmY19i dWlsZF9hcnJheV9yZWYgKHRyZWUgYmFzZSwgdHJlZSBvZmYKKioqIDM5OSw0 MTAgKioqKgogICAgaWYgKHZwdHIpCiAgICAgIHNwYW4gPSBnZmNfdnB0cl9z aXplX2dldCAodnB0cik7CiAgICBlbHNlIGlmIChkZWNsKQohICAgICB7CiEg ICAgICAgaWYgKFRSRUVfQ09ERSAoZGVjbCkgPT0gQ09NUE9ORU5UX1JFRikK ISAJc3BhbiA9IGdmY19jb252X2Rlc2NyaXB0b3Jfc3Bhbl9nZXQgKGRlY2wp OwohICAgICAgIGVsc2UKISAJc3BhbiA9IGdldF9hcnJheV9zcGFuICh0eXBl LCBkZWNsKTsKISAgICAgfQogIAogICAgLyogSWYgYSBub24tbnVsbCBzcGFu IGhhcyBiZWVuIGdlbmVyYXRlZCByZWZlcmVuY2UgdGhlIGVsZW1lbnQgd2l0 aAogICAgICAgcG9pbnRlciBhcml0aG1ldGljLiAgKi8KLS0tIDQwOCw0MTQg LS0tLQogICAgaWYgKHZwdHIpCiAgICAgIHNwYW4gPSBnZmNfdnB0cl9zaXpl X2dldCAodnB0cik7CiAgICBlbHNlIGlmIChkZWNsKQohICAgICBzcGFuID0g Z2V0X2FycmF5X3NwYW4gKHR5cGUsIGRlY2wpOwogIAogICAgLyogSWYgYSBu b24tbnVsbCBzcGFuIGhhcyBiZWVuIGdlbmVyYXRlZCByZWZlcmVuY2UgdGhl IGVsZW1lbnQgd2l0aAogICAgICAgcG9pbnRlciBhcml0aG1ldGljLiAgKi8K SW5kZXg6IGdjYy9mb3J0cmFuL3RyYW5zLmgKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQoqKiogZ2NjL2ZvcnRyYW4vdHJhbnMuaAkocmV2aXNpb24gMjcwNjIy KQotLS0gZ2NjL2ZvcnRyYW4vdHJhbnMuaAkod29ya2luZyBjb3B5KQoqKioq KioqKioqKioqKiogdHlwZWRlZiBzdHJ1Y3QgZ2ZjX3NlCioqKiA5MSw5NiAq KioqCi0tLSA5MSw5OSAtLS0tCiAgICAgICBhcmdzIGFsaWFzLiAgKi8KICAg IHVuc2lnbmVkIGZvcmNlX3RtcDoxOwogIAorICAgLyogSWYgc2V0LCB3aWxs IHBhc3Mgc3VicmVmIGRlc2NyaXB0b3JzIHdpdGhvdXQgYSB0ZW1wb3Jhcnku ICAqLworICAgdW5zaWduZWQgZm9yY2Vfbm9fdG1wOjE7CisgCiAgICAvKiBV bmNvbmRpdGlvbmFsbHkgY2FsY3VsYXRlIG9mZnNldCBmb3IgYXJyYXkgc2Vn bWVudHMgYW5kIGNvbnN0YW50CiAgICAgICBhcnJheXMgaW4gZ2ZjX2NvbnZf ZXhwcl9kZXNjcmlwdG9yLiAgKi8KICAgIHVuc2lnbmVkIHVzZV9vZmZzZXQ6 MTsKSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvSVNPX0ZvcnRy YW5fYmluZGluZ18xMi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdj Yy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvSVNPX0ZvcnRyYW5fYmluZGluZ18x Mi5jCShub25leGlzdGVudCkKLS0tIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4u ZGcvSVNPX0ZvcnRyYW5fYmluZGluZ18xMi5jCSh3b3JraW5nIGNvcHkpCioq KioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDI5IC0tLS0KKyAvKiBU ZXN0IHRoZSBmaXggZm9yIFBSOTAwOTMuICAqLworIAorICNpbmNsdWRlIDxz dGRpby5oPgorICNpbmNsdWRlIDxtYXRoLmg+CisgI2luY2x1ZGUgIi4uLy4u Ly4uL2xpYmdmb3J0cmFuL0lTT19Gb3J0cmFuX2JpbmRpbmcuaCIKKyAKKyAv KiBDb250cmlidXRlZCBieSBSZWluaG9sZCBCYWRlciAgPEJhZGVyQGxyei5k ZT4gICovCisgCisgdm9pZCBmb29fb3B0KENGSV9jZGVzY190ICosIGZsb2F0 ICosIGludCAqLCBpbnQpOworIHZvaWQgd3JpdGVfcmVzKCk7CisgCisgZmxv YXQgeFszNF07CisgCisgaW50IG1haW4oKSB7CisgICAgIENGSV9DREVTQ19U KDEpIHhkOworICAgICBDRklfaW5kZXhfdCBleHRbXSA9IHszNH07CisgICAg IGludCBzejsKKyAKKyAgICAgQ0ZJX2VzdGFibGlzaCgoQ0ZJX2NkZXNjX3Qg KikgJnhkLCAmeCwgQ0ZJX2F0dHJpYnV0ZV9vdGhlciwKKyAJCSAgQ0ZJX3R5 cGVfZmxvYXQsIDAsIDEsIGV4dCk7CisgCisgICAgIGZvb19vcHQoKENGSV9j ZGVzY190ICopICZ4ZCwgTlVMTCwgTlVMTCwgMCk7CisgICAgIHN6ID0gMTI7 CisgICAgIGZvb19vcHQoTlVMTCwgJnhbMTFdLCAmc3osIDEpOworIAorICAg ICB3cml0ZV9yZXMoKTsKKyAKKyAgICAgcmV0dXJuIDA7CisgfQpJbmRleDog Z2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9JU09fRm9ydHJhbl9iaW5kaW5n XzEyLmY5MAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2MvdGVzdHN1 aXRlL2dmb3J0cmFuLmRnL0lTT19Gb3J0cmFuX2JpbmRpbmdfMTIuZjkwCShu b25leGlzdGVudCkKLS0tIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvSVNP X0ZvcnRyYW5fYmluZGluZ18xMi5mOTAJKHdvcmtpbmcgY29weSkKKioqKioq KioqKioqKioqCioqKiAwICoqKioKLS0tIDEsNTMgLS0tLQorICEgeyBkZy1k byBydW4geyB0YXJnZXQgYzk5X3J1bnRpbWUgfSB9CisgISB7IGRnLWFkZGl0 aW9uYWwtc291cmNlcyBJU09fRm9ydHJhbl9iaW5kaW5nXzEyLmMgfQorICEK KyAhIFRlc3QgdGhlIGZpeCBmb3IgUFI5MDA5My4gVGhlIGFkZGl0aW9uYWwg c291cmNlIGlzIHRoZSBtYWluIHByb2dyYW0uCisgIQorICEgQ29udHJpYnV0 ZWQgYnkgUmVpbmhvbGQgQmFkZXIgIDxCYWRlckBscnouZGU+CisgIQorIG1v ZHVsZSBtb2Rfb3B0aW9uYWwKKyAgIHVzZSwgaW50cmluc2ljIDo6IGlzb19j X2JpbmRpbmcKKyAgIGltcGxpY2l0IG5vbmUKKyAgIGludGVnZXIgOjogc3Rh dHVzID0gMAorIAorIGNvbnRhaW5zCisgCisgICBzdWJyb3V0aW5lIGZvb19v cHQodGhpcywgdGhhdCwgc3osIGZsYWcpIGJpbmQoYykKKyAgICAgcmVhbChj X2Zsb2F0KSwgb3B0aW9uYWwgOjogdGhpcyg6KQorICAgICByZWFsKGNfZmxv YXQpLCBvcHRpb25hbCA6OiB0aGF0KCopCisgICAgIGludGVnZXIoY19pbnQp LCBvcHRpb25hbCA6OiBzegorICAgICBpbnRlZ2VyKGNfaW50KSwgdmFsdWUg OjogZmxhZworICAgICBpZiAoZmxhZyA9PSAwKSB0aGVuCisgICAgICAgIGlm ICgubm90LiBwcmVzZW50KHRoaXMpIC5vci4gcHJlc2VudCh0aGF0KSAub3Iu IHByZXNlbnQoc3opKSB0aGVuCisgICAgICAgICAgIHdyaXRlKCosKikgJ0ZB SUwgMScsIHByZXNlbnQodGhpcyksIHByZXNlbnQodGhhdCksIHByZXNlbnQo c3opCisgICAgICAgICAgIHN0YXR1cyA9IHN0YXR1cyArIDEKKyAgICAgICAg ZW5kIGlmCisgICAgIGVsc2UgaWYgKGZsYWcgPT0gMSkgdGhlbgorICAgICAg ICBpZiAocHJlc2VudCh0aGlzKSAub3IuIC5ub3QuIHByZXNlbnQodGhhdCkg Lm9yLiAubm90LiBwcmVzZW50KHN6KSkgdGhlbgorICAgICAgICAgICB3cml0 ZSgqLCopICdGQUlMIDInLCBwcmVzZW50KHRoaXMpLCBwcmVzZW50KHRoYXQp LCBwcmVzZW50KHN6KQorICAgICAgICAgICBzdGF0dXMgPSBzdGF0dXMgKyAx CisgICAgICAgIGVuZCBpZgorICAgICAgICBpZiAoc3ogLz0gMTIpIHRoZW4K KyAgICAgICAgICAgd3JpdGUoKiwqKSAnRkFJTCAzJworICAgICAgICAgICBz dGF0dXMgPSBzdGF0dXMgKyAxCisgICAgICAgIGVuZCBpZgorICAgICBlbHNl IGlmIChmbGFnID09IDIpIHRoZW4KKyAgICAgICAgaWYgKHByZXNlbnQodGhp cykgLm9yLiBwcmVzZW50KHRoYXQpIC5vci4gcHJlc2VudChzeikpIHRoZW4K KyAgICAgICAgICAgd3JpdGUoKiwqKSAnRkFJTCA0JywgcHJlc2VudCh0aGlz KSwgcHJlc2VudCh0aGF0KSwgcHJlc2VudChzeikKKyAgICAgICAgICAgc3Rh dHVzID0gc3RhdHVzICsgMQorICAgICAgICBlbmQgaWYKKyAgICAgZW5kIGlm CisgICBlbmQgc3Vicm91dGluZSBmb29fb3B0CisgCisgICBzdWJyb3V0aW5l IHdyaXRlX3JlcygpIEJJTkQoQykKKyAhIEFkZCBhIGNoZWNrIHRoYXQgdGhl IGZvcnRyYW4gbWlzc2luZyBvcHRpb25hbCBpcyBhY2NlcHRlZCBieSB0aGUK KyAhIGJpbmQoQykgcHJvY2VkdXJlLgorICAgICBjYWxsIGZvb19vcHQgKGZs YWcgPSAyKQorICAgICBpZiAoc3RhdHVzID09IDApIHRoZW4KKyAgICAgICAg d3JpdGUoKiwqKSAnT0snCisgICAgIGVsc2UKKyAgICAgICAgc3RvcCAxCisg ICAgIGVuZCBpZgorICAgZW5kIHN1YnJvdXRpbmUKKyAKKyBlbmQgbW9kdWxl IG1vZF9vcHRpb25hbApJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5k Zy9JU09fRm9ydHJhbl9iaW5kaW5nXzQuZjkwCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKioqIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvSVNPX0ZvcnRy YW5fYmluZGluZ180LmY5MAkocmV2aXNpb24gMjcwNjIyKQotLS0gZ2NjL3Rl c3RzdWl0ZS9nZm9ydHJhbi5kZy9JU09fRm9ydHJhbl9iaW5kaW5nXzQuZjkw CSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKgoqKiogMSwyOSAqKioq CiAgISB7IGRnLWRvICBydW4gfQogICEgUFIgZm9ydHJhbi84OTM4NCAtIHRo aXMgdXNlZCB0byBnaXZlIGEgd3JvbmcgcmVzdWx0cwogICEgd2l0aCBjb250 aWd1b3VzLgogICEgVGVzdCBjYXNlIGJ5IFJlaW5ob2xkIEJhZGVyLgogIG1v ZHVsZSBtb2RfY3RnCiAgICBpbXBsaWNpdCBub25lCiAgY29udGFpbnMKICAg IHN1YnJvdXRpbmUgY3RnKHgpIEJJTkQoQykKICAgICAgcmVhbCwgY29udGln dW91cyA6OiB4KDopCiEgCiEgICAgIGlmIChhbnkoYWJzKHggLSBbMi4sNC4s Ni5dKSA+IDEuZS02KSkgdGhlbgohICAgICAgICB3cml0ZSgqLCopICdGQUlM JwohICAgICAgICBzdG9wIDEKISAgICAgZWxzZQohICAgICAgICB3cml0ZSgq LCopICdPSycKISAgICAgZW5kIGlmCiAgICAgIHggPSBbMi4sNC4sNi5dKjEw LjAKICAgIGVuZCBzdWJyb3V0aW5lCiAgZW5kIG1vZHVsZQogIHByb2dyYW0g cAogICAgdXNlIG1vZF9jdGcKICAgIGltcGxpY2l0IG5vbmUKICAgIHJlYWwg OjogeCg2KQogICAgaW50ZWdlciA6OiBpCiAgCiAgICB4ID0gWyAocmVhbChp KSwgaT0xLCBzaXplKHgpKSBdCiAgICBjYWxsIGN0Zyh4KDI6OjIpKQohICAg aWYgKGFueSAoYWJzICh4IC0gWzEuLDIwLiwzLiw0MC4sNS4sNjAuXSkgPiAx LmUtNikpIHN0b3AgMgogIGVuZCBwcm9ncmFtCi0tLSAxLDQxIC0tLS0KICAh IHsgZGctZG8gIHJ1biB9CiAgISBQUiBmb3J0cmFuLzg5Mzg0IC0gdGhpcyB1 c2VkIHRvIGdpdmUgYSB3cm9uZyByZXN1bHRzCiAgISB3aXRoIGNvbnRpZ3Vv dXMuCisgISBUaGUgc3Vicm91dGluZSBzdWJzdHIgaXMgYSB0ZXN0IHRvIGNo ZWNrIGEgcHJvYmxlbSBmb3VuZCB3aGlsZQorICEgZGVidWdnaW5nIFBSOTAz NTUuCisgIQogICEgVGVzdCBjYXNlIGJ5IFJlaW5ob2xkIEJhZGVyLgorICEK ICBtb2R1bGUgbW9kX2N0ZwogICAgaW1wbGljaXQgbm9uZQorIAogIGNvbnRh aW5zCisgCiAgICBzdWJyb3V0aW5lIGN0Zyh4KSBCSU5EKEMpCiAgICAgIHJl YWwsIGNvbnRpZ3VvdXMgOjogeCg6KQohICAgICBpZiAoYW55KGFicyh4IC0g WzIuLDQuLDYuXSkgPiAxLmUtNikpIHN0b3AgMQogICAgICB4ID0gWzIuLDQu LDYuXSoxMC4wCiAgICBlbmQgc3Vicm91dGluZQorIAorICAgc3Vicm91dGlu ZSBzdWJzdHIoc3RyKSBCSU5EKEMpCisgICAgIGNoYXJhY3RlcigqKSA6OiBz dHIoOikKKyAgICAgaWYgKHN0cigyKSAubmUuICJnaGkiKSBzdG9wIDIKKyAg ICAgc3RyID0gWyd1dncnLCd4eXonXQorICAgZW5kIHN1YnJvdXRpbmUKKyAK ICBlbmQgbW9kdWxlCisgCiAgcHJvZ3JhbSBwCiAgICB1c2UgbW9kX2N0Zwog ICAgaW1wbGljaXQgbm9uZQogICAgcmVhbCA6OiB4KDYpCisgICBjaGFyYWN0 ZXIoNSkgOjogc3RyKDIpID0gWydhYmNkZScsJ2ZnaGlqJ10KICAgIGludGVn ZXIgOjogaQogIAogICAgeCA9IFsgKHJlYWwoaSksIGk9MSwgc2l6ZSh4KSkg XQogICAgY2FsbCBjdGcoeCgyOjoyKSkKISAgIGlmIChhbnkgKGFicyAoeCAt IFsxLiwyMC4sMy4sNDAuLDUuLDYwLl0pID4gMS5lLTYpKSBzdG9wIDMKISAK ISAgIGNhbGwgc3Vic3RyKHN0cig6KSgyOjQpKQohICAgaWYgKGFueSAoc3Ry IC5uZS4gWydhdXZ3ZScsJ2Z4eXpqJ10pKSBzdG9wIDQKICBlbmQgcHJvZ3Jh bQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9hc3NpZ25fMTAu ZjkwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy90ZXN0c3VpdGUv Z2ZvcnRyYW4uZGcvYXNzaWduXzEwLmY5MAkocmV2aXNpb24gMjcwNjIyKQot LS0gZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9hc3NpZ25fMTAuZjkwCSh3 b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKiBlbmQKKioqIDI0LDI3ICoq KioKICAhIE5vdGUgdGhhdCBpdCBpcyB0aGUga2luZCBjb252ZXJzaW9uIHRo YXQgZ2VuZXJhdGVzIHRoZSB0ZW1wLgogICEKICAhIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAicGFybSIgMjAgIm9yaWdpbmFsIiB9IH0K ISAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiYXRtcCIg MTggIm9yaWdpbmFsIiB9IH0KLS0tIDI0LDI3IC0tLS0KICAhIE5vdGUgdGhh dCBpdCBpcyB0aGUga2luZCBjb252ZXJzaW9uIHRoYXQgZ2VuZXJhdGVzIHRo ZSB0ZW1wLgogICEKICAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10 aW1lcyAicGFybSIgMjAgIm9yaWdpbmFsIiB9IH0KISAhIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiYXRtcCIgMjAgIm9yaWdpbmFsIiB9 IH0KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvaXNvX2NfYmlu ZGluZ19jaGFyXzEuZjkwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdj Yy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvaXNvX2NfYmluZGluZ19jaGFyXzEu ZjkwCShub25leGlzdGVudCkKLS0tIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4u ZGcvaXNvX2NfYmluZGluZ19jaGFyXzEuZjkwCSh3b3JraW5nIGNvcHkpCioq KioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDEwIC0tLS0KKyAhIHsg ZGctZG8gY29tcGlsZSB9CisgIQorICEgVGVzdCB0aGUgZml4IGZvciBQUjkw MzUyLgorICEKKyAhIENvbnRyaWJ1dGVkIGJ5IFRob21hcyBLb2VuaWcgIDx0 a29lbmlnQGdjYy5nbnUub3JnPgorICEKKyBzdWJyb3V0aW5lIGJhcihjLGQp IEJJTkQoQykKKyAgIGNoYXJhY3RlciAobGVuPSopIGMgISB7IGRnLWVycm9y ICJtdXN0IGJlIGxlbmd0aCAxIiB9CisgICBjaGFyYWN0ZXIgKGxlbj0yKSBk ICEgeyBkZy1lcnJvciAibXVzdCBiZSBsZW5ndGggMSIgfQorIGVuZApJbmRl eDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy90cmFuc3Bvc2Vfb3B0aW1p emF0aW9uXzIuZjkwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy90 ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvdHJhbnNwb3NlX29wdGltaXphdGlvbl8y LmY5MAkocmV2aXNpb24gMjcwNjIyKQotLS0gZ2NjL3Rlc3RzdWl0ZS9nZm9y dHJhbi5kZy90cmFuc3Bvc2Vfb3B0aW1pemF0aW9uXzIuZjkwCSh3b3JraW5n IGNvcHkpCioqKioqKioqKioqKioqKiBlbmQKKioqIDYxLDY0ICoqKioKICAh IFRoZSBjaGVjayBiZWxvdyBmb3IgdGVtcG9yYXJpZXMgZ2F2ZSAxNCBhbmQg MzMgZm9yICJwYXJtIiBhbmQgImF0bXAiLgogICEKICAhIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAicGFybSIgNzIgIm9yaWdpbmFsIiB9 IH0KISAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiYXRt cCIgMTIgIm9yaWdpbmFsIiB9IH0KLS0tIDYxLDY0IC0tLS0KICAhIFRoZSBj aGVjayBiZWxvdyBmb3IgdGVtcG9yYXJpZXMgZ2F2ZSAxNCBhbmQgMzMgZm9y ICJwYXJtIiBhbmQgImF0bXAiLgogICEKICAhIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcC10aW1lcyAicGFybSIgNzIgIm9yaWdpbmFsIiB9IH0KISAh IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiYXRtcCIgMTMg Im9yaWdpbmFsIiB9IH0K --00000000000063175605883cb210--