From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id 026773858016; Wed, 11 May 2022 17:33:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 026773858016 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.91,217,1647331200"; d="diff'?scan'208";a="75766308" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 11 May 2022 09:33:08 -0800 IronPort-SDR: +eH9+uteIQbSRu+PGten3U7u76w5sxTX+K69iJLGeog2yBmAbq++/eOdWVLRtQzK3+9iggZqiO HLtvTw9PnqvdAtHWBX4+5kYZYduOpc4NP7CBPdaqjBbmYIq3NuHelplo+ijHGSBjPfJKgUZriG h9Kgrd+5XHottTtdUmmKUPVQNu+T9uJVleWhOgAMeiSWVADowg3zKzsemiboGWXFAnvfpcHomB wiWdL1HYuo9YyR/bmMXHH2pKafcAf2PMO2KxCSF8XFIOHEXsXAizMNSABq1xOXEOeUlkso1/BW cnQ= Content-Type: multipart/mixed; boundary="------------gtEyFY0QOXafmSpAbLJpD600" Message-ID: Date: Wed, 11 May 2022 19:33:00 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 Content-Language: en-US To: gcc-patches , fortran , Jakub Jelinek From: Tobias Burnus Subject: [Patch] OpenMP: Handle descriptors in target's firstprivate [PR104949] X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_SHORT, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 11 May 2022 17:33:12 -0000 --------------gtEyFY0QOXafmSpAbLJpD600 Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable Dear all, dear Jakub, this patch handles (for target regions) firstprivate(array_descriptor) by not only firstprivatizing the descriptor but also the data it points to. This is done by turning it in omp-low.cc the clause into firstprivate(descr) firstprivate(descr.data) and then attaching the latter to the former. That works by adding an 'attach' after the last firstprivate (and checking for it in libgomp). The attached-to device address for a previous (here: the first) firstprivate is obtained by returning the device address inside the hostaddrs[i] alias omp_arr array, i.e. the compiler generates: omp_arr.1 =3D &descr; /* firstprivate */ omp_arr.2 =3D descr.data; /* firstprivate */ omp_arr.3 =3D &omp_arr.1; /* attach; bias: &desc.data-&desc */ and libgomp then knows that the device address is in the pointer. Not implemented, but this scheme can also be used for type integer, allocatable :: A(:),B(:) end type where multiple attachments have to be done to the same privatized variable. Side effect: For has_device_addr(array_descr) the pre-patch code changes this to firstprivate =E2=80=93 relying on the shallow copying. Thus= , has_device_addr had to be modified to still be shallow. OK? * * * Note: The code is not active for OpenACC. The existing code uses, e.g., 'goto oacc_firstprivate' =E2=80=93 thus, the new code would be partially active. I went for making it completely inactive for OpenACC by adding one '!is_gimple_omp_oacc'. I bet that a deep copy would be also useful for OpenACC, but I have neither checked what the current code does nor what the OpenACC spec says about this. * * * Some crossrefs: * https://gcc.gnu.org/PR104949 - the PR to this patch. * has_device_addr + array descriptor, see clarification for TR11/OpenMP 6 (passed 2nd vote): OpenMP Spec Issue #3180 / Pull Req. #3= 204 (related to 'firstprivate' above) * For a pending is_device_ptr(non-c_ptr) -> has_device_addr issue, see https://gcc.gnu.org/PR105318 * Regarding issues with reallocation of firstprivate, see: https://gcc.gnu.org/PR105538 (Not completely clear whether the code is valid; there are rules related (re,de)allocation for data mapping but not for firstprivate + issue about deallocation at the end of the scope in this case.) * Regarding array constructors with non-const length but constant items, see https://gcc.gnu.org/PR91544 (and testcase) * Deep mapping patch (but not firstprivate): https://gcc.gnu.org/pipermail/gcc-patches/2022-April/593704.html Tobias ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------gtEyFY0QOXafmSpAbLJpD600 Content-Type: text/x-patch; charset="UTF-8"; name="omp-firstprivate-alloc-v3.diff" Content-Disposition: attachment; filename="omp-firstprivate-alloc-v3.diff" Content-Transfer-Encoding: base64 T3Blbk1QOiBIYW5kbGUgZGVzY3JpcHRvcnMgaW4gdGFyZ2V0J3MgZmlyc3Rwcml2YXRlIFtQ UjEwNDk0OV0KCkZvciBhbGxvY2F0YWJsZS9wb2ludGVyIGFycmF5cywgYSBmaXJzdHByaXZh dGUgdG8gYSBkZXZpY2UKbm90IG9ubHkgbmVlZHMgdG8gcHJpdmF0aXplIHRoZSBkZXNjcmlw dG9yIGJ1dCBhbHNvIHRoZSBhY3R1YWwKZGF0YS4gVGhpcyBpcyBpbXBsZW1lbnRlZCBhczoK ICBmaXJzdHByaXZhdGUoeCkgZmlyc3Rwcml2YXRlKHguZGF0YSkgYXR0YWNoKHggW2JpYXM6 ICZ4LmRhdGEtJngpCndoZXJlIHRoZSBhZGRyZXNzIG9mIHggaW4gZGV2aWNlIG1lbW9yeSBp cyBzYXZlZCBpbiBob3N0YWRkcnNbaV0KYnkgbGliZ29tcCBhbmQgdGhlIG1pZGRsZSBlbmQg YWN0dWFsbHkgcGFzc2VzIGhvc3RhZGRyc1tpXScgdG8KYXR0YWNoLgoKQXMgc2lkZSBlZmZl Y3QsIGhhc19kZXZpY2VfYWRkcihhcnJheV9kZXNjKSBoYWQgdG8gYmUgY2hhbmdlZDoKYmVm b3JlLCBpdCB3YXMgY29udmVydGVkIHRvIGZpcnN0cHJpdmF0ZSBpbiB0aGUgZnJvbnQgZW5k OyBub3cKaXQgaXMgaGFuZGxlZCBpbiBvbXAtbG93LmNjIGFzIGhhc19kZXZpY2VfYWRkciBy ZXF1aXJlcyBhIHNoYWxsb3cKZmlyc3Rwcml2YXRlIChub3QgdG91Y2hpbmcgdGhlIGRhdGEg cG9pbnRlcikgd2hpbGUgdGhlIG5vcm1hbApmaXJzdHByaXZhdGUgcmVxdWlyZXMgKG5vdykg YSBkZWVwIGZpcnN0cHJpdmF0ZS4KCmdjYy9mb3J0cmFuL0NoYW5nZUxvZzoKCglQUiBmb3J0 cmFuLzEwNDk0OQoJKiBmOTUtbGFuZy5jYyAoTEFOR19IT09LU19PTVBfQVJSQVlfU0laRSk6 IFJlZGVmaW5lLgoJKiB0cmFucy1vcGVubXAuY2MgKGdmY19vbXBfYXJyYXlfc2l6ZSk6IE5l dy4KCShnZmNfdHJhbnNfb21wX3ZhcmlhYmxlX2xpc3QpOiBOZXZlciB0dXJuIGhhc19kZXZp Y2VfYWRkcgoJdG8gZmlyc3Rwcml2YXRlLgoJKiB0cmFucy5oIChnZmNfb21wX2FycmF5X3Np emUpOiBOZXcuCgpnY2MvQ2hhbmdlTG9nOgoKCVBSIGZvcnRyYW4vMTA0OTQ5CgkqIGxhbmdo b29rcy1kZWYuaCAobGhkX29tcF9hcnJheV9zaXplKTogTmV3LgoJKExBTkdfSE9PS1NfT01Q X0FSUkFZX1NJWkUpOiBEZWZpbmUKCShMQU5HX0hPT0tTX0RFQ0xTKTogQWRkIGl0LgoJKiBs YW5naG9va3MuY2MgKGxoZF9vbXBfYXJyYXlfc2l6ZSk6IE5ldy4KCSogbGFuZ2hvb2tzLmgg KHN0cnVjdCBsYW5nX2hvb2tzX2Zvcl9kZWNscyk6IEFkZCBob29rLgoJKiBvbXAtbG93LmNj IChzY2FuX3NoYXJpbmdfY2xhdXNlcywgbG93ZXJfb21wX3RhcmdldCk6CglIYW5kbGUgR09N UF9NQVBfRklSU1RQUklWQVRFIGZvciBhcnJheSBkZXNjcmlwdG9ycy4KCmxpYmdvbXAvQ2hh bmdlTG9nOgoKCVBSIGZvcnRyYW4vMTA0OTQ5CgkqIHRhcmdldC5jIChnb21wX21hcF92YXJz X2ludGVybmFsLCBjb3B5X2ZpcnN0cHJpdmF0ZV9kYXRhKToKCVN1cHBvcnQgYXR0YWNoIGZv ciBHT01QX01BUF9GSVJTVFBSSVZBVEUuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4v dGFyZ2V0LWZpcnN0cHJpdmF0ZS0xLmY5MDogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9saWJn b21wLmZvcnRyYW4vdGFyZ2V0LWZpcnN0cHJpdmF0ZS0yLmY5MDogTmV3IHRlc3QuCgkqIHRl c3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWZpcnN0cHJpdmF0ZS0zLmY5MDogTmV3 IHRlc3QuCgogZ2NjL2ZvcnRyYW4vZjk1LWxhbmcuY2MgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDIgKwogZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjICAgICAgICAgICAg ICAgICAgICAgICAgfCAgNTMgKysrKysrKystLQogZ2NjL2ZvcnRyYW4vdHJhbnMuaCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZ2NjL2xhbmdob29rcy1kZWYu aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKwogZ2NjL2xhbmdob29r cy5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDggKysKIGdjYy9s YW5naG9va3MuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1ICsK IGdjYy9vbXAtbG93LmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg MTAyICsrKysrKysrKysrKysrKysrKy0KIGxpYmdvbXAvdGFyZ2V0LmMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDIyICsrKysKIC4uLi9saWJnb21wLmZvcnRyYW4v dGFyZ2V0LWZpcnN0cHJpdmF0ZS0xLmY5MCAgICAgIHwgIDMzICsrKysrKwogLi4uL2xpYmdv bXAuZm9ydHJhbi90YXJnZXQtZmlyc3Rwcml2YXRlLTIuZjkwICAgICAgfCAxMTMgKysrKysr KysrKysrKysrKysrKysrCiAuLi4vbGliZ29tcC5mb3J0cmFuL3RhcmdldC1maXJzdHByaXZh dGUtMy5mOTAgICAgICB8ICAyNCArKysrKwogMTEgZmlsZXMgY2hhbmdlZCwgMzU1IGluc2Vy dGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL2Y5 NS1sYW5nLmNjIGIvZ2NjL2ZvcnRyYW4vZjk1LWxhbmcuY2MKaW5kZXggMWE4OTVhMjUxMzIu LmU4M2ZlZjM3OGJiIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi9mOTUtbGFuZy5jYworKysg Yi9nY2MvZm9ydHJhbi9mOTUtbGFuZy5jYwpAQCAtMTE0LDYgKzExNCw3IEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgZ2ZjX2F0dHJpYnV0ZV90YWJsZVtdID0KICN1 bmRlZiBMQU5HX0hPT0tTX1RZUEVfRk9SX1NJWkUKICN1bmRlZiBMQU5HX0hPT0tTX0lOSVRf VFMKICN1bmRlZiBMQU5HX0hPT0tTX09NUF9BUlJBWV9EQVRBCisjdW5kZWYgTEFOR19IT09L U19PTVBfQVJSQVlfU0laRQogI3VuZGVmIExBTkdfSE9PS1NfT01QX0lTX0FMTE9DQVRBQkxF X09SX1BUUgogI3VuZGVmIExBTkdfSE9PS1NfT01QX0NIRUNLX09QVElPTkFMX0FSR1VNRU5U CiAjdW5kZWYgTEFOR19IT09LU19PTVBfUFJJVkFUSVpFX0JZX1JFRkVSRU5DRQpAQCAtMTUy LDYgKzE1Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgZ2ZjX2F0 dHJpYnV0ZV90YWJsZVtdID0KICNkZWZpbmUgTEFOR19IT09LU19UWVBFX0ZPUl9TSVpFCWdm Y190eXBlX2Zvcl9zaXplCiAjZGVmaW5lIExBTkdfSE9PS1NfSU5JVF9UUwkJZ2ZjX2luaXRf dHMKICNkZWZpbmUgTEFOR19IT09LU19PTVBfQVJSQVlfREFUQQkJZ2ZjX29tcF9hcnJheV9k YXRhCisjZGVmaW5lIExBTkdfSE9PS1NfT01QX0FSUkFZX1NJWkUJCWdmY19vbXBfYXJyYXlf c2l6ZQogI2RlZmluZSBMQU5HX0hPT0tTX09NUF9JU19BTExPQ0FUQUJMRV9PUl9QVFIJZ2Zj X29tcF9pc19hbGxvY2F0YWJsZV9vcl9wdHIKICNkZWZpbmUgTEFOR19IT09LU19PTVBfQ0hF Q0tfT1BUSU9OQUxfQVJHVU1FTlQJZ2ZjX29tcF9jaGVja19vcHRpb25hbF9hcmd1bWVudAog I2RlZmluZSBMQU5HX0hPT0tTX09NUF9QUklWQVRJWkVfQllfUkVGRVJFTkNFCWdmY19vbXBf cHJpdmF0aXplX2J5X3JlZmVyZW5jZQpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMt b3Blbm1wLmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjCmluZGV4IGJhYTQ1Zjc4 YTBlLi41YzEzM2FiN2ZlMCAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1w LmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jYwpAQCAtMTY5LDYgKzE2OSw0 OCBAQCBnZmNfb21wX2FycmF5X2RhdGEgKHRyZWUgZGVjbCwgYm9vbCB0eXBlX29ubHkpCiAg IHJldHVybiBkZWNsOwogfQogCisvKiBSZXR1cm4gdGhlIGJ5dGUtc2l6ZSBvZiB0aGUgcGFz c2VkIGFycmF5IGRlc2NyaXB0b3IuICovCisKK3RyZWUKK2dmY19vbXBfYXJyYXlfc2l6ZSAo dHJlZSBkZWNsLCBnaW1wbGVfc2VxICpwcmVfcCkKK3sKKyAgc3RtdGJsb2NrX3QgYmxvY2s7 CisgIGlmIChQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFIChkZWNsKSkpCisgICAgZGVjbCA9 IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmIChkZWNsKTsKKyAgdHJlZSB0eXBlID0gVFJFRV9U WVBFIChkZWNsKTsKKyAgZ2NjX2Fzc2VydCAoR0ZDX0RFU0NSSVBUT1JfVFlQRV9QICh0eXBl KSk7CisgIGJvb2wgYWxsb2NhdGFibGUgPSAoR0ZDX1RZUEVfQVJSQVlfQUtJTkQgKHR5cGUp ID09IEdGQ19BUlJBWV9BTExPQ0FUQUJMRQorCQkgICAgICB8fCBHRkNfVFlQRV9BUlJBWV9B S0lORCAodHlwZSkgPT0gR0ZDX0FSUkFZX1BPSU5URVIKKwkJICAgICAgfHwgR0ZDX1RZUEVf QVJSQVlfQUtJTkQgKHR5cGUpID09IEdGQ19BUlJBWV9QT0lOVEVSX0NPTlQpOworICBnZmNf aW5pdF9ibG9jayAoJmJsb2NrKTsKKyAgdHJlZSBzaXplID0gZ2ZjX2Z1bGxfYXJyYXlfc2l6 ZSAoJmJsb2NrLCBkZWNsLAorCQkJCSAgIEdGQ19UWVBFX0FSUkFZX1JBTksgKFRSRUVfVFlQ RSAoZGVjbCkpKTsKKyAgc2l6ZSA9IGZvbGRfY29udmVydCAoc2l6ZV90eXBlX25vZGUsIHNp emUpOworICB0cmVlIGVsZW1zeiA9IGdmY19nZXRfZWxlbWVudF90eXBlIChUUkVFX1RZUEUg KGRlY2wpKTsKKyAgaWYgKFRSRUVfQ09ERSAoZWxlbXN6KSA9PSBBUlJBWV9UWVBFICYmIFRZ UEVfU1RSSU5HX0ZMQUcgKGVsZW1zeikpCisgICAgZWxlbXN6ID0gZ2ZjX2NvbnZfZGVzY3Jp cHRvcl9lbGVtX2xlbiAoZGVjbCk7CisgIGVsc2UKKyAgICBlbGVtc3ogPSBUWVBFX1NJWkVf VU5JVCAoZWxlbXN6KTsKKyAgc2l6ZSA9IGZvbGRfYnVpbGQyIChNVUxUX0VYUFIsIHNpemVf dHlwZV9ub2RlLCBzaXplLCBlbGVtc3opOworICBpZiAoIWFsbG9jYXRhYmxlKQorICAgIGdp bXBsaWZ5X2FuZF9hZGQgKGdmY19maW5pc2hfYmxvY2sgKCZibG9jayksIHByZV9wKTsKKyAg ZWxzZQorICAgIHsKKyAgICAgIHRyZWUgdmFyID0gY3JlYXRlX3RtcF92YXIgKHNpemVfdHlw ZV9ub2RlKTsKKyAgICAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJmJsb2NrLCBidWlsZDIg KE1PRElGWV9FWFBSLCBzaXpldHlwZSwgdmFyLCBzaXplKSk7CisgICAgICB0cmVlIHRtcCA9 IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIE5FX0VYUFIsIGJvb2xlYW5fdHlw ZV9ub2RlLAorCQkJCSAgZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kYXRhX2dldCAoZGVjbCksCisJ CQkJICBudWxsX3BvaW50ZXJfbm9kZSk7CisgICAgICB0bXAgPSBidWlsZDNfbG9jIChpbnB1 dF9sb2NhdGlvbiwgQ09ORF9FWFBSLCB2b2lkX3R5cGVfbm9kZSwgdG1wLAorCQkJZ2ZjX2Zp bmlzaF9ibG9jayAoJmJsb2NrKSwKKwkJCWJ1aWxkMiAoTU9ESUZZX0VYUFIsIHNpemV0eXBl LCB2YXIsIHNpemVfemVyb19ub2RlKSk7CisgICAgICBnaW1wbGlmeV9hbmRfYWRkICh0bXAs IHByZV9wKTsKKyAgICAgIHNpemUgPSB2YXI7CisgICAgfQorICByZXR1cm4gc2l6ZTsKK30K KworCiAvKiBUcnVlIGlmIE9wZW5NUCBzaG91bGQgcHJpdmF0aXplIHdoYXQgdGhpcyBERUNM IHBvaW50cyB0byByYXRoZXIKICAgIHRoYW4gdGhlIERFQ0wgaXRzZWxmLiAgKi8KIApAQCAt MTkyMiwxNiArMTk2NCw3IEBAIGdmY190cmFuc19vbXBfdmFyaWFibGVfbGlzdCAoZW51bSBv bXBfY2xhdXNlX2NvZGUgY29kZSwKIAlpZiAodCAhPSBlcnJvcl9tYXJrX25vZGUpCiAJICB7 CiAJICAgIHRyZWUgbm9kZTsKLQkgICAgLyogRm9yIEhBU19ERVZJQ0VfQUREUiBvZiBhbiBh cnJheSBkZXNjcmlwdG9yLCBmaXJzdHByaXZhdGl6ZSB0aGUKLQkgICAgICAgZGVzY3JpcHRv ciBzdWNoIHRoYXQgdGhlIGJvdW5kcyBhcmUgYXZhaWxhYmxlOyBpdHMgZGF0YSBjb21wb25l bnQKLQkgICAgICAgaXMgdW5tb2RpZmllZDsgaXQgaXMgaGFuZGxlZCBhcyBkZXZpY2UgYWRk cmVzcyBpbnNpZGUgdGFyZ2V0LiAqLwotCSAgICBpZiAoY29kZSA9PSBPTVBfQ0xBVVNFX0hB U19ERVZJQ0VfQUREUgotCQkmJiAoR0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZUEUg KHQpKQotCQkgICAgfHwgKFBPSU5URVJfVFlQRV9QIChUUkVFX1RZUEUgKHQpKQotCQkJJiYg R0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZUEUgKFRSRUVfVFlQRSAodCkpKSkpKQot CSAgICAgIG5vZGUgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwgT01QX0NM QVVTRV9GSVJTVFBSSVZBVEUpOwotCSAgICBlbHNlCi0JICAgICAgbm9kZSA9IGJ1aWxkX29t cF9jbGF1c2UgKGlucHV0X2xvY2F0aW9uLCBjb2RlKTsKKwkgICAgbm9kZSA9IGJ1aWxkX29t cF9jbGF1c2UgKGlucHV0X2xvY2F0aW9uLCBjb2RlKTsKIAkgICAgT01QX0NMQVVTRV9ERUNM IChub2RlKSA9IHQ7CiAJICAgIGxpc3QgPSBnZmNfdHJhbnNfYWRkX2NsYXVzZSAobm9kZSwg bGlzdCk7CiAKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3RyYW5zLmggYi9nY2MvZm9ydHJh bi90cmFucy5oCmluZGV4IDYyM2FjZWVkNTIwLi4wM2Q1Mjg4YWFkMiAxMDA2NDQKLS0tIGEv Z2NjL2ZvcnRyYW4vdHJhbnMuaAorKysgYi9nY2MvZm9ydHJhbi90cmFucy5oCkBAIC04MDgs NiArODA4LDcgQEAgYm9vbCBnZmNfZ2V0X2FycmF5X2Rlc2NyX2luZm8gKGNvbnN0X3RyZWUs IHN0cnVjdCBhcnJheV9kZXNjcl9pbmZvICopOwogYm9vbCBnZmNfb21wX2lzX2FsbG9jYXRh YmxlX29yX3B0ciAoY29uc3RfdHJlZSk7CiB0cmVlIGdmY19vbXBfY2hlY2tfb3B0aW9uYWxf YXJndW1lbnQgKHRyZWUsIGJvb2wpOwogdHJlZSBnZmNfb21wX2FycmF5X2RhdGEgKHRyZWUs IGJvb2wpOwordHJlZSBnZmNfb21wX2FycmF5X3NpemUgKHRyZWUsIGdpbXBsZV9zZXEgKik7 CiBib29sIGdmY19vbXBfcHJpdmF0aXplX2J5X3JlZmVyZW5jZSAoY29uc3RfdHJlZSk7CiBl bnVtIG9tcF9jbGF1c2VfZGVmYXVsdF9raW5kIGdmY19vbXBfcHJlZGV0ZXJtaW5lZF9zaGFy aW5nICh0cmVlKTsKIGVudW0gb21wX2NsYXVzZV9kZWZhdWx0bWFwX2tpbmQgZ2ZjX29tcF9w cmVkZXRlcm1pbmVkX21hcHBpbmcgKHRyZWUpOwpkaWZmIC0tZ2l0IGEvZ2NjL2xhbmdob29r cy1kZWYuaCBiL2djYy9sYW5naG9va3MtZGVmLmgKaW5kZXggZTIyNjM5NTE3MDkuLjk1ZDhk ZWM4Y2MzIDEwMDY0NAotLS0gYS9nY2MvbGFuZ2hvb2tzLWRlZi5oCisrKyBiL2djYy9sYW5n aG9va3MtZGVmLmgKQEAgLTg0LDYgKzg0LDcgQEAgZXh0ZXJuIGVudW0gb21wX2NsYXVzZV9k ZWZhdWx0X2tpbmQgbGhkX29tcF9wcmVkZXRlcm1pbmVkX3NoYXJpbmcgKHRyZWUpOwogZXh0 ZXJuIGVudW0gb21wX2NsYXVzZV9kZWZhdWx0bWFwX2tpbmQgbGhkX29tcF9wcmVkZXRlcm1p bmVkX21hcHBpbmcgKHRyZWUpOwogZXh0ZXJuIHRyZWUgbGhkX29tcF9hc3NpZ25tZW50ICh0 cmVlLCB0cmVlLCB0cmVlKTsKIGV4dGVybiB2b2lkIGxoZF9vbXBfZmluaXNoX2NsYXVzZSAo dHJlZSwgZ2ltcGxlX3NlcSAqLCBib29sKTsKK2V4dGVybiB0cmVlIGxoZF9vbXBfYXJyYXlf c2l6ZSAodHJlZSwgZ2ltcGxlX3NlcSAqKTsKIHN0cnVjdCBnaW1wbGlmeV9vbXBfY3R4Owog ZXh0ZXJuIHZvaWQgbGhkX29tcF9maXJzdHByaXZhdGl6ZV90eXBlX3NpemVzIChzdHJ1Y3Qg Z2ltcGxpZnlfb21wX2N0eCAqLAogCQkJCQkgICAgICAgdHJlZSk7CkBAIC0yNTcsNiArMjU4 LDcgQEAgZXh0ZXJuIHRyZWUgbGhkX3VuaXRfc2l6ZV93aXRob3V0X3JldXNhYmxlX3BhZGRp bmcgKHRyZWUpOwogI2RlZmluZSBMQU5HX0hPT0tTX1BPU1RfQ09NUElMQVRJT05fUEFSU0lO R19DTEVBTlVQUyBOVUxMCiAjZGVmaW5lIExBTkdfSE9PS1NfREVDTF9PS19GT1JfU0lCQ0FM TAlsaGRfZGVjbF9va19mb3Jfc2liY2FsbAogI2RlZmluZSBMQU5HX0hPT0tTX09NUF9BUlJB WV9EQVRBCWhvb2tfdHJlZV90cmVlX2Jvb2xfbnVsbAorI2RlZmluZSBMQU5HX0hPT0tTX09N UF9BUlJBWV9TSVpFCWxoZF9vbXBfYXJyYXlfc2l6ZQogI2RlZmluZSBMQU5HX0hPT0tTX09N UF9JU19BTExPQ0FUQUJMRV9PUl9QVFIgaG9va19ib29sX2NvbnN0X3RyZWVfZmFsc2UKICNk ZWZpbmUgTEFOR19IT09LU19PTVBfQ0hFQ0tfT1BUSU9OQUxfQVJHVU1FTlQgaG9va190cmVl X3RyZWVfYm9vbF9udWxsCiAjZGVmaW5lIExBTkdfSE9PS1NfT01QX1BSSVZBVElaRV9CWV9S RUZFUkVOQ0UgaG9va19ib29sX2NvbnN0X3RyZWVfZmFsc2UKQEAgLTI5MCw2ICsyOTIsNyBA QCBleHRlcm4gdHJlZSBsaGRfdW5pdF9zaXplX3dpdGhvdXRfcmV1c2FibGVfcGFkZGluZyAo dHJlZSk7CiAgIExBTkdfSE9PS1NfUE9TVF9DT01QSUxBVElPTl9QQVJTSU5HX0NMRUFOVVBT LCBcCiAgIExBTkdfSE9PS1NfREVDTF9PS19GT1JfU0lCQ0FMTCwgXAogICBMQU5HX0hPT0tT X09NUF9BUlJBWV9EQVRBLCBcCisgIExBTkdfSE9PS1NfT01QX0FSUkFZX1NJWkUsIFwKICAg TEFOR19IT09LU19PTVBfSVNfQUxMT0NBVEFCTEVfT1JfUFRSLCBcCiAgIExBTkdfSE9PS1Nf T01QX0NIRUNLX09QVElPTkFMX0FSR1VNRU5ULCBcCiAgIExBTkdfSE9PS1NfT01QX1BSSVZB VElaRV9CWV9SRUZFUkVOQ0UsIFwKZGlmZiAtLWdpdCBhL2djYy9sYW5naG9va3MuY2MgYi9n Y2MvbGFuZ2hvb2tzLmNjCmluZGV4IGRmOTcwNjc4YTA4Li45N2U1MTM5NjUyMSAxMDA2NDQK LS0tIGEvZ2NjL2xhbmdob29rcy5jYworKysgYi9nY2MvbGFuZ2hvb2tzLmNjCkBAIC02MzQs NiArNjM0LDE0IEBAIGxoZF9vbXBfZmluaXNoX2NsYXVzZSAodHJlZSwgZ2ltcGxlX3NlcSAq LCBib29sKQogewogfQogCisvKiBSZXR1cm4gYXJyYXkgc2l6ZTsgY2YuIG9tcF9hcnJheV9k YXRhLiAgKi8KKwordHJlZQorbGhkX29tcF9hcnJheV9zaXplICh0cmVlLCBnaW1wbGVfc2Vx ICopCit7CisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKIC8qIFJldHVybiB0cnVlIGlmIERF Q0wgaXMgYSBzY2FsYXIgdmFyaWFibGUgKGZvciB0aGUgcHVycG9zZSBvZgogICAgaW1wbGlj aXQgZmlyc3Rwcml2YXRpemF0aW9uICYgbWFwcGluZykuIE9ubHkgaWYgYWxsb2NfcHRyX29r CiAgICBhcmUgYWxsb2NhdGFibGVzIGFuZCBwb2ludGVycyBhY2NlcHRlZC4gKi8KZGlmZiAt LWdpdCBhL2djYy9sYW5naG9va3MuaCBiL2djYy9sYW5naG9va3MuaAppbmRleCA0NzMxZjA4 OWEyZS4uNzUwMjU1NTBhYTQgMTAwNjQ0Ci0tLSBhL2djYy9sYW5naG9va3MuaAorKysgYi9n Y2MvbGFuZ2hvb2tzLmgKQEAgLTI0Niw2ICsyNDYsMTEgQEAgc3RydWN0IGxhbmdfaG9va3Nf Zm9yX2RlY2xzCiAgICAgIGlzIHRydWUsIG9ubHkgdGhlIFRSRUVfVFlQRSBpcyByZXR1cm5l ZCB3aXRob3V0IGdlbmVyYXRpbmcgYSBuZXcgdHJlZS4gICovCiAgIHRyZWUgKCpvbXBfYXJy YXlfZGF0YSkgKHRyZWUsIGJvb2wpOwogCisgIC8qIFJldHVybiBhIHRyZWUgZm9yIHRoZSBh Y3R1YWwgZGF0YSBvZiBhbiBhcnJheSBkZXNjcmlwdG9yIC0gb3IgTlVMTF9UUkVFCisgICAg IGlmIG9yaWdpbmFsIHRyZWUgaXMgbm90IGFuIGFycmF5IGRlc2NyaXB0b3IuICBJZiB0aGUg c2Vjb25kIGFyZ3VtZW50CisgICAgIGlzIHRydWUsIG9ubHkgdGhlIFRSRUVfVFlQRSBpcyBy ZXR1cm5lZCB3aXRob3V0IGdlbmVyYXRpbmcgYSBuZXcgdHJlZS4gICovCisgIHRyZWUgKCpv bXBfYXJyYXlfc2l6ZSkgKHRyZWUsIGdpbXBsZV9zZXEgKnByZV9wKTsKKwogICAvKiBUcnVl IGlmIE9wZW5NUCBzaG91bGQgcmVnYXJkIHRoaXMgREVDTCBhcyBiZWluZyBhIHNjYWxhciB3 aGljaCBoYXMgRm9ydHJhbidzCiAgICAgIGFsbG9jYXRhYmxlIG9yIHBvaW50ZXIgYXR0cmli dXRlLiAgKi8KICAgYm9vbCAoKm9tcF9pc19hbGxvY2F0YWJsZV9vcl9wdHIpIChjb25zdF90 cmVlKTsKZGlmZiAtLWdpdCBhL2djYy9vbXAtbG93LmNjIGIvZ2NjL29tcC1sb3cuY2MKaW5k ZXggZTc4MThhOWFmNWYuLmFkZDk5YTQyZTkwIDEwMDY0NAotLS0gYS9nY2Mvb21wLWxvdy5j YworKysgYi9nY2Mvb21wLWxvdy5jYwpAQCAtMTM3Miw3ICsxMzcyLDkgQEAgc2Nhbl9zaGFy aW5nX2NsYXVzZXMgKHRyZWUgY2xhdXNlcywgb21wX2NvbnRleHQgKmN0eCkKIAkgICAgICAg fHwgT01QX0NMQVVTRV9DT0RFIChjKSA9PSBPTVBfQ0xBVVNFX0hBU19ERVZJQ0VfQUREUikK IAkgICAgICAmJiBpc19naW1wbGVfb21wX29mZmxvYWRlZCAoY3R4LT5zdG10KSkKIAkgICAg ewotCSAgICAgIGlmIChPTVBfQ0xBVVNFX0NPREUgKGMpID09IE9NUF9DTEFVU0VfRklSU1RQ UklWQVRFKQorCSAgICAgIGlmIChPTVBfQ0xBVVNFX0NPREUgKGMpID09IE9NUF9DTEFVU0Vf RklSU1RQUklWQVRFCisJCSAgfHwgKE9NUF9DTEFVU0VfQ09ERSAoYykgPT0gT01QX0NMQVVT RV9IQVNfREVWSUNFX0FERFIKKwkJICAgICAgJiYgbGFuZ19ob29rcy5kZWNscy5vbXBfYXJy YXlfZGF0YSAoZGVjbCwgdHJ1ZSkpKQogCQl7CiAJCSAgYnlfcmVmID0gIW9tcF9wcml2YXRp emVfYnlfcmVmZXJlbmNlIChkZWNsKTsKIAkJICBpbnN0YWxsX3Zhcl9maWVsZCAoZGVjbCwg YnlfcmVmLCAzLCBjdHgpOwpAQCAtMTQyNCw2ICsxNDI2LDE1IEBAIHNjYW5fc2hhcmluZ19j bGF1c2VzICh0cmVlIGNsYXVzZXMsIG9tcF9jb250ZXh0ICpjdHgpCiAJCWluc3RhbGxfdmFy X2ZpZWxkIChkZWNsLCBieV9yZWYsIDMsIGN0eCk7CiAJICAgIH0KIAkgIGluc3RhbGxfdmFy X2xvY2FsIChkZWNsLCBjdHgpOworCSAgLyogRm9yIGRlc2NyIGFycmF5cyBvbiB0YXJnZXQ6 IGZpcnN0cHJpdmF0aXplIGRhdGEgKyBhdHRhY2ggcHRyLiAgKi8KKwkgIGlmIChPTVBfQ0xB VVNFX0NPREUgKGMpID09IE9NUF9DTEFVU0VfRklSU1RQUklWQVRFCisJICAgICAgJiYgaXNf Z2ltcGxlX29tcF9vZmZsb2FkZWQgKGN0eC0+c3RtdCkKKwkgICAgICAmJiAhaXNfZ2ltcGxl X29tcF9vYWNjIChjdHgtPnN0bXQpCisJICAgICAgJiYgbGFuZ19ob29rcy5kZWNscy5vbXBf YXJyYXlfZGF0YSAoZGVjbCwgdHJ1ZSkpCisJICAgIHsKKwkgICAgICBpbnN0YWxsX3Zhcl9m aWVsZCAoZGVjbCwgZmFsc2UsIDE2IHwgMywgY3R4KTsKKwkgICAgICBpbnN0YWxsX3Zhcl9m aWVsZCAoZGVjbCwgdHJ1ZSwgOCB8IDMsIGN0eCk7CisJICAgIH0KIAkgIGJyZWFrOwogCiAJ Y2FzZSBPTVBfQ0xBVVNFX1VTRV9ERVZJQ0VfUFRSOgpAQCAtMTI4MjUsNiArMTI4MzYsNyBA QCBsb3dlcl9vbXBfdGFyZ2V0IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpX3AsIG9tcF9j b250ZXh0ICpjdHgpCiAJYnJlYWs7CiAKICAgICAgIGNhc2UgT01QX0NMQVVTRV9GSVJTVFBS SVZBVEU6CisgICAgICBvbXBfZmlyc3Rwcml2YXRlX3JlY3Y6CiAJZ2NjX2NoZWNraW5nX2Fz c2VydCAob2ZmbG9hZGVkKTsKIAlpZiAoaXNfZ2ltcGxlX29tcF9vYWNjIChjdHgtPnN0bXQp KQogCSAgewpAQCAtMTI4NTYsNiArMTI4NjgsMTAgQEAgbG93ZXJfb21wX3RhcmdldCAoZ2lt cGxlX3N0bXRfaXRlcmF0b3IgKmdzaV9wLCBvbXBfY29udGV4dCAqY3R4KQogCSAgICBTRVRf REVDTF9WQUxVRV9FWFBSIChuZXdfdmFyLCB4KTsKIAkgICAgREVDTF9IQVNfVkFMVUVfRVhQ Ul9QIChuZXdfdmFyKSA9IDE7CiAJICB9CisJICAvKiBGb3J0cmFuIGFycmF5IGRlc2NyaXB0 b3JzOiBmaXJzdHByaXZhdGUgb2YgZGF0YSArIGF0dGFjaC4gICovCisJICBpZiAoT01QX0NM QVVTRV9DT0RFIChjKSAhPSBPTVBfQ0xBVVNFX0hBU19ERVZJQ0VfQUREUgorCSAgICAgICYm IGxhbmdfaG9va3MuZGVjbHMub21wX2FycmF5X2RhdGEgKHZhciwgdHJ1ZSkpCisJICAgIG1h cF9jbnQgKz0gMjsKIAlicmVhazsKIAogICAgICAgY2FzZSBPTVBfQ0xBVVNFX1BSSVZBVEU6 CkBAIC0xMjg5NSw2ICsxMjkxMSw4IEBAIGxvd2VyX29tcF90YXJnZXQgKGdpbXBsZV9zdG10 X2l0ZXJhdG9yICpnc2lfcCwgb21wX2NvbnRleHQgKmN0eCkKIAkgICAgd2hpbGUgKFRSRUVf Q09ERSAodmFyKSA9PSBJTkRJUkVDVF9SRUYKIAkJICAgfHwgVFJFRV9DT0RFICh2YXIpID09 IEFSUkFZX1JFRikKIAkgICAgICB2YXIgPSBUUkVFX09QRVJBTkQgKHZhciwgMCk7CisJICAg IGlmIChsYW5nX2hvb2tzLmRlY2xzLm9tcF9hcnJheV9kYXRhICh2YXIsIHRydWUpKQorCSAg ICAgIGdvdG8gb21wX2ZpcnN0cHJpdmF0ZV9yZWN2OwogCSAgfQogCW1hcF9jbnQrKzsKIAlp ZiAoaXNfdmFyaWFibGVfc2l6ZWQgKHZhcikpCkBAIC0xMzMwOCw2ICsxMzMyNiw3IEBAIGxv d2VyX29tcF90YXJnZXQgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2lfcCwgb21wX2NvbnRl eHQgKmN0eCkKIAkgICAgYnJlYWs7CiAKIAkgIGNhc2UgT01QX0NMQVVTRV9GSVJTVFBSSVZB VEU6CisJICBvbXBfaGFzX2RldmljZV9hZGRyX2Rlc2NyOgogCSAgICBpZiAoaXNfZ2ltcGxl X29tcF9vYWNjIChjdHgtPnN0bXQpKQogCSAgICAgIGdvdG8gb2FjY19maXJzdHByaXZhdGVf bWFwOwogCSAgICBvdmFyID0gT01QX0NMQVVTRV9ERUNMIChjKTsKQEAgLTEzMzczLDYgKzEz MzkyLDgyIEBAIGxvd2VyX29tcF90YXJnZXQgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2lf cCwgb21wX2NvbnRleHQgKmN0eCkKIAkJCQkgPD0gdHJlZV90b191aHdpIChUWVBFX01BWF9W QUxVRSAodGtpbmRfdHlwZSkpKTsKIAkgICAgQ09OU1RSVUNUT1JfQVBQRU5EX0VMVCAodmtp bmQsIHB1cnBvc2UsCiAJCQkJICAgIGJ1aWxkX2ludF9jc3R1ICh0a2luZF90eXBlLCB0a2lu ZCkpOworCSAgICAvKiBGb3J0cmFuIGFycmF5IGRlc2NyaXB0b3JzOiBmaXJzdHByaXZhdGUg b2YgZGF0YSArIGF0dGFjaC4gICovCisJICAgIGlmIChPTVBfQ0xBVVNFX0NPREUgKGMpICE9 IE9NUF9DTEFVU0VfSEFTX0RFVklDRV9BRERSCisJCSYmIGxhbmdfaG9va3MuZGVjbHMub21w X2FycmF5X2RhdGEgKG92YXIsIHRydWUpKQorCSAgICAgIHsKKwkJdHJlZSBub3RfbnVsbF9s YiwgbnVsbF9sYiwgYWZ0ZXJfbGI7CisJCXRyZWUgdmFyMSwgdmFyMiwgc2l6ZTEsIHNpemUy OworCQl0cmVlIHByZXNlbnQgPSBvbXBfY2hlY2tfb3B0aW9uYWxfYXJndW1lbnQgKG92YXIs IHRydWUpOworCQlpZiAocHJlc2VudCkKKwkJICB7CisJCSAgICBsb2NhdGlvbl90IGNsYXVz ZV9sb2MgPSBPTVBfQ0xBVVNFX0xPQ0FUSU9OIChjKTsKKwkJICAgIG5vdF9udWxsX2xiID0g Y3JlYXRlX2FydGlmaWNpYWxfbGFiZWwgKGNsYXVzZV9sb2MpOworCQkgICAgbnVsbF9sYiA9 IGNyZWF0ZV9hcnRpZmljaWFsX2xhYmVsIChjbGF1c2VfbG9jKTsKKwkJICAgIGFmdGVyX2xi ID0gY3JlYXRlX2FydGlmaWNpYWxfbGFiZWwgKGNsYXVzZV9sb2MpOworCQkgICAgZ2ltcGxl X3NlcSBzZXEgPSBOVUxMOworCQkgICAgcHJlc2VudCA9IGZvcmNlX2dpbXBsZV9vcGVyYW5k IChwcmVzZW50LCAmc2VxLCB0cnVlLAorCQkJCQkJICAgIE5VTExfVFJFRSk7CisJCSAgICBn aW1wbGVfc2VxX2FkZF9zZXEgKCZpbGlzdCwgc2VxKTsKKwkJICAgIGdpbXBsZV9zZXFfYWRk X3N0bXQgKCZpbGlzdCwKKwkJICAgICAgZ2ltcGxlX2J1aWxkX2NvbmRfZnJvbV90cmVlIChw cmVzZW50LAorCQkJCQkJICAgbm90X251bGxfbGIsIG51bGxfbGIpKTsKKwkJICAgIGdpbXBs ZV9zZXFfYWRkX3N0bXQgKCZpbGlzdCwKKwkJCQkJIGdpbXBsZV9idWlsZF9sYWJlbCAobm90 X251bGxfbGIpKTsKKwkJICB9CisJCXZhcjEgPSBsYW5nX2hvb2tzLmRlY2xzLm9tcF9hcnJh eV9kYXRhICh2YXIsIGZhbHNlKTsKKwkJc2l6ZTEgPSBsYW5nX2hvb2tzLmRlY2xzLm9tcF9h cnJheV9zaXplICh2YXIsICZpbGlzdCk7CisJCXZhcjIgPSBidWlsZF9mb2xkX2FkZHJfZXhw ciAoeCk7CisJCWlmICghUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQRSAodmFyKSkpCisJCSAg dmFyID0gYnVpbGRfZm9sZF9hZGRyX2V4cHIgKHZhcik7CisJCXNpemUyID0gZm9sZF9idWls ZDIgKFBPSU5URVJfRElGRl9FWFBSLCBzc2l6ZXR5cGUsCisJCQkJICAgYnVpbGRfZm9sZF9h ZGRyX2V4cHIgKHZhcjEpLCB2YXIpOworCQlzaXplMiA9IGZvbGRfY29udmVydCAoc2l6ZXR5 cGUsIHNpemUyKTsKKwkJaWYgKHByZXNlbnQpCisJCSAgeworCQkgICAgdHJlZSB0bXAgPSBj cmVhdGVfdG1wX3ZhciAoVFJFRV9UWVBFICh2YXIxKSk7CisJCSAgICBnaW1wbGlmeV9hc3Np Z24gKHRtcCwgdmFyMSwgJmlsaXN0KTsKKwkJICAgIHZhcjEgPSB0bXA7CisJCSAgICB0bXAg PSBjcmVhdGVfdG1wX3ZhciAoVFJFRV9UWVBFICh2YXIyKSk7CisJCSAgICBnaW1wbGlmeV9h c3NpZ24gKHRtcCwgdmFyMiwgJmlsaXN0KTsKKwkJICAgIHZhcjIgPSB0bXA7CisJCSAgICB0 bXAgPSBjcmVhdGVfdG1wX3ZhciAoVFJFRV9UWVBFIChzaXplMSkpOworCQkgICAgZ2ltcGxp ZnlfYXNzaWduICh0bXAsIHNpemUxLCAmaWxpc3QpOworCQkgICAgc2l6ZTEgPSB0bXA7CisJ CSAgICB0bXAgPSBjcmVhdGVfdG1wX3ZhciAoVFJFRV9UWVBFIChzaXplMikpOworCQkgICAg Z2ltcGxpZnlfYXNzaWduICh0bXAsIHNpemUyLCAmaWxpc3QpOworCQkgICAgc2l6ZTIgPSB0 bXA7CisJCSAgICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmaWxpc3QsIGdpbXBsZV9idWlsZF9n b3RvIChhZnRlcl9sYikpOworCQkgICAgZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmlsaXN0LCBn aW1wbGVfYnVpbGRfbGFiZWwgKG51bGxfbGIpKTsKKwkJICAgIGdpbXBsaWZ5X2Fzc2lnbiAo dmFyMSwgbnVsbF9wb2ludGVyX25vZGUsICZpbGlzdCk7CisJCSAgICBnaW1wbGlmeV9hc3Np Z24gKHZhcjIsIG51bGxfcG9pbnRlcl9ub2RlLCAmaWxpc3QpOworCQkgICAgZ2ltcGxpZnlf YXNzaWduIChzaXplMSwgc2l6ZV96ZXJvX25vZGUsICZpbGlzdCk7CisJCSAgICBnaW1wbGlm eV9hc3NpZ24gKHNpemUyLCBzaXplX3plcm9fbm9kZSwgJmlsaXN0KTsKKwkJICAgIGdpbXBs ZV9zZXFfYWRkX3N0bXQgKCZpbGlzdCwgZ2ltcGxlX2J1aWxkX2xhYmVsIChhZnRlcl9sYikp OworCQkgIH0KKwkJeCA9IGJ1aWxkX3NlbmRlcl9yZWYgKChzcGxheV90cmVlX2tleSkgJkRF Q0xfTkFNRSAob3ZhciksIGN0eCk7CisJCWdpbXBsaWZ5X2Fzc2lnbiAoeCwgdmFyMSwgJmls aXN0KTsKKwkJdGtpbmQgPSBHT01QX01BUF9GSVJTVFBSSVZBVEU7CisJCXRhbGlnbiA9IERF Q0xfQUxJR05fVU5JVCAob3Zhcik7CisJCXRhbGlnbiA9IGNlaWxfbG9nMiAodGFsaWduKTsK KwkJdGtpbmQgfD0gdGFsaWduIDw8IHRhbGlnbl9zaGlmdDsKKwkJZ2NjX2NoZWNraW5nX2Fz c2VydCAodGtpbmQKKwkJCQkgICAgIDw9IHRyZWVfdG9fdWh3aSAoCisJCQkJCSAgVFlQRV9N QVhfVkFMVUUgKHRraW5kX3R5cGUpKSk7CisJCXB1cnBvc2UgPSBzaXplX2ludCAobWFwX2lk eCsrKTsKKwkJQ09OU1RSVUNUT1JfQVBQRU5EX0VMVCAodnNpemUsIHB1cnBvc2UsIHNpemUx KTsKKwkJaWYgKFRSRUVfQ09ERSAoc2l6ZTEpICE9IElOVEVHRVJfQ1NUKQorCQkgIFRSRUVf U1RBVElDIChUUkVFX1ZFQ19FTFQgKHQsIDEpKSA9IDA7CisJCUNPTlNUUlVDVE9SX0FQUEVO RF9FTFQgKHZraW5kLCBwdXJwb3NlLAorCQkJCQlidWlsZF9pbnRfY3N0dSAodGtpbmRfdHlw ZSwgdGtpbmQpKTsKKwkJeCA9IGJ1aWxkX3NlbmRlcl9yZWYgKChzcGxheV90cmVlX2tleSkg JkRFQ0xfVUlEIChvdmFyKSwgY3R4KTsKKwkJZ2ltcGxpZnlfYXNzaWduICh4LCB2YXIyLCAm aWxpc3QpOworCQl0a2luZCA9IEdPTVBfTUFQX0FUVEFDSDsKKwkJcHVycG9zZSA9IHNpemVf aW50IChtYXBfaWR4KyspOworCQlDT05TVFJVQ1RPUl9BUFBFTkRfRUxUICh2c2l6ZSwgcHVy cG9zZSwgc2l6ZTIpOworCQlDT05TVFJVQ1RPUl9BUFBFTkRfRUxUICh2a2luZCwgcHVycG9z ZSwKKwkJCQkJYnVpbGRfaW50X2NzdHUgKHRraW5kX3R5cGUsIHRraW5kKSk7CisJICAgICAg fQogCSAgICBicmVhazsKIAogCSAgY2FzZSBPTVBfQ0xBVVNFX1VTRV9ERVZJQ0VfUFRSOgpA QCAtMTMzODIsNiArMTM0NzcsOCBAQCBsb3dlcl9vbXBfdGFyZ2V0IChnaW1wbGVfc3RtdF9p dGVyYXRvciAqZ3NpX3AsIG9tcF9jb250ZXh0ICpjdHgpCiAJICAgIG92YXIgPSBPTVBfQ0xB VVNFX0RFQ0wgKGMpOwogCSAgICBpZiAoT01QX0NMQVVTRV9DT0RFIChjKSA9PSBPTVBfQ0xB VVNFX0hBU19ERVZJQ0VfQUREUikKIAkgICAgICB7CisJCWlmIChsYW5nX2hvb2tzLmRlY2xz Lm9tcF9hcnJheV9kYXRhIChvdmFyLCB0cnVlKSkKKwkJICBnb3RvIG9tcF9oYXNfZGV2aWNl X2FkZHJfZGVzY3I7CiAJCXdoaWxlIChUUkVFX0NPREUgKG92YXIpID09IElORElSRUNUX1JF RgogCQkgICAgICAgfHwgVFJFRV9DT0RFIChvdmFyKSA9PSBBUlJBWV9SRUYpCiAJCSAgb3Zh ciA9IFRSRUVfT1BFUkFORCAob3ZhciwgMCk7CkBAIC0xMzU0OCw2ICsxMzY0NSw3IEBAIGxv d2VyX29tcF90YXJnZXQgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2lfcCwgb21wX2NvbnRl eHQgKmN0eCkKIAkgIGRlZmF1bHQ6CiAJICAgIGJyZWFrOwogCSAgY2FzZSBPTVBfQ0xBVVNF X0ZJUlNUUFJJVkFURToKKwkgIG9tcF9maXJzdHByaXZhdGl6ZV9kYXRhX3JlZ2lvbjoKIAkg ICAgaWYgKGlzX2dpbXBsZV9vbXBfb2FjYyAoY3R4LT5zdG10KSkKIAkgICAgICBicmVhazsK IAkgICAgdmFyID0gT01QX0NMQVVTRV9ERUNMIChjKTsKQEAgLTEzNjQyLDYgKzEzNzQwLDgg QEAgbG93ZXJfb21wX3RhcmdldCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaV9wLCBvbXBf Y29udGV4dCAqY3R4KQogCSAgICBkb19vcHRpb25hbF9jaGVjayA9IGZhbHNlOwogCSAgICB2 YXIgPSBPTVBfQ0xBVVNFX0RFQ0wgKGMpOwogCSAgICBpc19hcnJheV9kYXRhID0gbGFuZ19o b29rcy5kZWNscy5vbXBfYXJyYXlfZGF0YSAodmFyLCB0cnVlKSAhPSBOVUxMOworCSAgICBp ZiAoT01QX0NMQVVTRV9DT0RFIChjKSA9PSBPTVBfQ0xBVVNFX0hBU19ERVZJQ0VfQUREUiAm JiBpc19hcnJheV9kYXRhKQorCSAgICAgIGdvdG8gb21wX2ZpcnN0cHJpdmF0aXplX2RhdGFf cmVnaW9uOwogCiAJICAgIGlmIChPTVBfQ0xBVVNFX0NPREUgKGMpICE9IE9NUF9DTEFVU0Vf SVNfREVWSUNFX1BUUgogCQkmJiBPTVBfQ0xBVVNFX0NPREUgKGMpICE9IE9NUF9DTEFVU0Vf SEFTX0RFVklDRV9BRERSKQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90YXJnZXQuYyBiL2xpYmdv bXAvdGFyZ2V0LmMKaW5kZXggNGQ2MmVmZGY1MjYuLjg5ZTdiN2I3YjBiIDEwMDY0NAotLS0g YS9saWJnb21wL3RhcmdldC5jCisrKyBiL2xpYmdvbXAvdGFyZ2V0LmMKQEAgLTEzNTAsNyAr MTM1MCwyNCBAQCBnb21wX21hcF92YXJzX2ludGVybmFsIChzdHJ1Y3QgZ29tcF9kZXZpY2Vf ZGVzY3IgKmRldmljZXAsCiAJCWdvbXBfY29weV9ob3N0MmRldiAoZGV2aWNlcCwgYXEsCiAJ CQkJICAgICh2b2lkICopICh0Z3QtPnRndF9zdGFydCArIHRndF9zaXplKSwKIAkJCQkgICAg KHZvaWQgKikgaG9zdGFkZHJzW2ldLCBsZW4sIGZhbHNlLCBjYnVmcCk7CisJCS8qIFNhdmUg ZGV2aWNlIGFkZHJlc3MgaW4gaG9zdGFkZHIgdG8gcGVybWl0IGxhdHRlciBhdmFpbGFibGl0 eQorCQkgICB3aGVuIGRvaW5nIGEgZGVlcC1maXJzdHByaXZhdGUgd2l0aCBwb2ludGVyIGF0 dGFjaC4gICovCisJCWhvc3RhZGRyc1tpXSA9ICh2b2lkICopICh0Z3QtPnRndF9zdGFydCAr IHRndF9zaXplKTsKIAkJdGd0X3NpemUgKz0gbGVuOworCisJCS8qIElmIGZvbGxvd2VkIGJ5 IEdPTVBfTUFQX0FUVEFDSCwgcG9pbnRlciBhc3NpZ24gdGhpcworCQkgICBmaXJzdHByaXZh dGUgdG8gaG9zdGFkZHJzW2krMV0sIHdoaWNoIGlzIGFzc3VtZWQgdG8gY29udGFpbiBhCisJ CSAgIGRldmljZSBhZGRyZXNzLiAgKi8KKwkJaWYgKGkgKyAxIDwgbWFwbnVtCisJCSAgICAm JiAoR09NUF9NQVBfQVRUQUNICisJCQk9PSAodHlwZW1hc2sgJiBnZXRfa2luZCAoc2hvcnRf bWFwa2luZCwga2luZHMsIGkrMSkpKSkKKwkJICB7CisJCSAgICB1aW50cHRyX3QgdGFyZ2V0 ID0gKHVpbnRwdHJfdCkgaG9zdGFkZHJzW2ldOworCQkgICAgdm9pZCAqZGV2cHRyID0gKih2 b2lkKiopIGhvc3RhZGRyc1tpKzFdICsgc2l6ZXNbaSsxXTsKKwkJICAgIGdvbXBfY29weV9o b3N0MmRldiAoZGV2aWNlcCwgYXEsIGRldnB0ciwgJnRhcmdldCwKKwkJCQkJc2l6ZW9mICh2 b2lkICopLCBmYWxzZSwgY2J1ZnApOworCQkgICAgKytpOworCQkgIH0KIAkJY29udGludWU7 CiAJICAgICAgY2FzZSBHT01QX01BUF9GSVJTVFBSSVZBVEVfSU5UOgogCSAgICAgIGNhc2Ug R09NUF9NQVBfWkVST19MRU5fQVJSQVlfU0VDVElPTjoKQEAgLTI1MTcsNiArMjUzNCwxMSBA QCBjb3B5X2ZpcnN0cHJpdmF0ZV9kYXRhIChjaGFyICp0Z3QsIHNpemVfdCBtYXBudW0sIHZv aWQgKipob3N0YWRkcnMsCiAJbWVtY3B5ICh0Z3QgKyB0Z3Rfc2l6ZSwgaG9zdGFkZHJzW2ld LCBzaXplc1tpXSk7CiAJaG9zdGFkZHJzW2ldID0gdGd0ICsgdGd0X3NpemU7CiAJdGd0X3Np emUgPSB0Z3Rfc2l6ZSArIHNpemVzW2ldOworCWlmIChpICsgMSA8IG1hcG51bSAmJiAoa2lu ZHNbaSsxXSAmIDB4ZmYpID09IEdPTVBfTUFQX0FUVEFDSCkKKwkgIHsKKwkgICAgKigqKHVp bnRwdHJfdCoqKSBob3N0YWRkcnNbaSsxXSArIHNpemVzW2krMV0pID0gKHVpbnRwdHJfdCkg aG9zdGFkZHJzW2ldOworCSAgICArK2k7CisJICB9CiAgICAgICB9CiB9CiAKZGlmZiAtLWdp dCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtZmlyc3Rwcml2 YXRlLTEuZjkwIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1m aXJzdHByaXZhdGUtMS5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjdiNzc5OTJhMjFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUv bGliZ29tcC5mb3J0cmFuL3RhcmdldC1maXJzdHByaXZhdGUtMS5mOTAKQEAgLTAsMCArMSwz MyBAQAorISBQUiBmb3J0cmFuLzEwNDk0OQorCitpbXBsaWNpdCBub25lICh0eXBlLGV4dGVy bmFsKQoraW50ZWdlciwgYWxsb2NhdGFibGUgOjogQSg6KQorQSA9IFsxLDIsMyw0LDUsNl0K KworISRvbXAgcGFyYWxsZWwgZmlyc3Rwcml2YXRlKEEpCishJG9tcCBtYXN0ZXIKKyAgaWYg KGFueSAoQSAvPSBbMSwyLDMsNCw1XSkpIGVycm9yIHN0b3AKKyAgQSg6KSA9IFs5OSw4OCw3 Nyw2Niw1NV0KKyEkb21wIGVuZCBtYXN0ZXIKKyEkb21wIGVuZCBwYXJhbGxlbAorCishJG9t cCB0YXJnZXQgZmlyc3Rwcml2YXRlKEEpCisgIGlmIChhbnkgKEEgLz0gWzEsMiwzLDQsNV0p KSBlcnJvciBzdG9wCisgIEEoOikgPSBbOTksODgsNzcsNjYsNTVdCishJG9tcCBlbmQgdGFy Z2V0CitpZiAoYW55IChBIC89IFsxLDIsMyw0LDVdKSkgZXJyb3Igc3RvcAorCishJG9tcCBw YXJhbGxlbCBkZWZhdWx0KGZpcnN0cHJpdmF0ZSkKKyEkb21wIG1hc3RlcgorICBpZiAoYW55 IChBIC89IFsxLDIsMyw0LDVdKSkgZXJyb3Igc3RvcAorICBBKDopID0gWzk5LDg4LDc3LDY2 LDU1XQorISRvbXAgZW5kIG1hc3RlcgorISRvbXAgZW5kIHBhcmFsbGVsCitpZiAoYW55IChB IC89IFsxLDIsMyw0LDVdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZGVmYXVsdG1h cChmaXJzdHByaXZhdGUpCisgIGlmIChhbnkgKEEgLz0gWzEsMiwzLDQsNV0pKSBlcnJvciBz dG9wCisgIEEoOikgPSBbOTksODgsNzcsNjYsNTVdCishJG9tcCBlbmQgdGFyZ2V0CitpZiAo YW55IChBIC89IFsxLDIsMyw0LDVdKSkgZXJyb3Igc3RvcAorZW5kCmRpZmYgLS1naXQgYS9s aWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWZpcnN0cHJpdmF0ZS0y LmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtZmlyc3Rw cml2YXRlLTIuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5k MDBiNDA3MGMxMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdv bXAuZm9ydHJhbi90YXJnZXQtZmlyc3Rwcml2YXRlLTIuZjkwCkBAIC0wLDAgKzEsMTEzIEBA CishIFBSIGZvcnRyYW4vMTA0OTQ5CisKK21vZHVsZSBtCit1c2Ugb21wX2xpYgoraW1wbGlj aXQgbm9uZSAodHlwZSwgZXh0ZXJuYWwpCisKK2NvbnRhaW5zCitzdWJyb3V0aW5lIG9uZQor ICBpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiB4KDopCisgIGludGVnZXIgOjogaQorCisgIGRv IGkgPSAxLCBvbXBfZ2V0X251bV9kZXZpY2VzKCkgKyAxCisgICAgISRvbXAgdGFyZ2V0IGZp cnN0cHJpdmF0ZSh4KQorICAgICAgaWYgKGFsbG9jYXRlZCh4KSkgZXJyb3Igc3RvcAorICAg ICEkb21wIGVuZCB0YXJnZXQKKyAgICBpZiAoYWxsb2NhdGVkKHgpKSBlcnJvciBzdG9wCisg IGVuZCBkbworCisgIGRvIGkgPSAxLCBvbXBfZ2V0X251bV9kZXZpY2VzKCkgKyAxCisgICAg ISRvbXAgdGFyZ2V0IGZpcnN0cHJpdmF0ZSh4LCBpKQorICAgICAgaWYgKGFsbG9jYXRlZCh4 KSkgZXJyb3Igc3RvcAorICAgICAgeCA9IFsxMCwyMCwzMCw0MF0gKyBpCisgICAgICBpZiAo YW55ICh4IC89IFsxMCwyMCwzMCw0MF0gKyBpKSkgZXJyb3Igc3RvcAorICAgICAgISBUaGlz IGxlYWtzIG1lbW9yeSEKKyAgICAgICEgZGVhbGxvY2F0ZSh4KQorICAgICEkb21wIGVuZCB0 YXJnZXQKKyAgICBpZiAoYWxsb2NhdGVkKHgpKSBlcnJvciBzdG9wCisgIGVuZCBkbworCisg IHggPSBbMSwyLDMsNF0KKworICBkbyBpID0gMSwgb21wX2dldF9udW1fZGV2aWNlcygpICsg MQorICAgICEkb21wIHRhcmdldCBmaXJzdHByaXZhdGUoeCwgaSkKKyAgICAgIGlmIChpIDw9 IDApIGVycm9yIHN0b3AKKyAgICAgIGlmICgubm90LmFsbG9jYXRlZCh4KSkgZXJyb3Igc3Rv cAorICAgICAgaWYgKHNpemUoeCkgLz0gNCkgZXJyb3Igc3RvcAorICAgICAgaWYgKGxib3Vu ZCh4LDEpIC89IDEpIGVycm9yIHN0b3AKKyAgICAgIGlmIChhbnkgKHggLz0gWzEsMiwzLDRd KSkgZXJyb3Igc3RvcAorICAgICAgISBubyByZWFsbG9jYXRpb24sIGp1c3QgbWFsbG9jZWQg KyBhc3NpZ25tZW50CisgICAgICB4ID0gWzEwLDIwLDMwLDQwXSArIGkKKyAgICAgIGlmIChh bnkgKHggLz0gWzEwLDIwLDMwLDQwXSArIGkpKSBlcnJvciBzdG9wCisgICAgICAhIFRoaXMg bGVha3MgbWVtb3J5IQorICAgICAgISBkZWFsbG9jYXRlKHgpCisgICAgISRvbXAgZW5kIHRh cmdldAorICAgIGlmICgubm90LmFsbG9jYXRlZCh4KSkgZXJyb3Igc3RvcAorICAgIGlmIChz aXplKHgpIC89IDQpIGVycm9yIHN0b3AKKyAgICBpZiAobGJvdW5kKHgsMSkgLz0gMSkgZXJy b3Igc3RvcAorICAgIGlmIChhbnkgKHggLz0gWzEsMiwzLDRdKSkgZXJyb3Igc3RvcAorICBl bmQgZG8KKyAgZGVhbGxvY2F0ZSh4KQorZW5kCisKK3N1YnJvdXRpbmUgdHdvCisgIGNoYXJh Y3RlcihsZW49OiksIGFsbG9jYXRhYmxlIDo6IHgoOikKKyAgY2hhcmFjdGVyKGxlbj01KSAg Ojogc3RyCisgIGludGVnZXIgOjogaQorCisgIHN0ciA9ICJhYmNkZSIgISB3b3JrIGFyb3Vu ZCBmb3IgUFIgZm9ydHJhbi85MTU0NAorICBkbyBpID0gMSwgb21wX2dldF9udW1fZGV2aWNl cygpICsgMQorICAgICEkb21wIHRhcmdldCBmaXJzdHByaXZhdGUoeCkKKyAgICAgIGlmIChh bGxvY2F0ZWQoeCkpIGVycm9yIHN0b3AKKyAgICAhJG9tcCBlbmQgdGFyZ2V0CisgICAgaWYg KGFsbG9jYXRlZCh4KSkgZXJyb3Igc3RvcAorICBlbmQgZG8KKworICBkbyBpID0gMSwgb21w X2dldF9udW1fZGV2aWNlcygpICsgMQorICAgICEkb21wIHRhcmdldCBmaXJzdHByaXZhdGUo eCwgaSkKKyAgICAgIGlmIChhbGxvY2F0ZWQoeCkpIGVycm9yIHN0b3AKKyAgICAgICEgbm8g cmVhbGxvY2F0aW9uLCBqdXN0IG1hbGxvY2VkICsgYXNzaWdubWVudAorICAgICAgeCA9IFtj aGFyYWN0ZXIobGVuPTIraSkgOjogc3RyLCJmaGppIiwia2xtbm8iXQorICAgICAgaWYgKGxl bih4KSAvPSAyK2kpIGVycm9yIHN0b3AKKyAgICAgIGlmIChhbnkgKHggLz0gW2NoYXJhY3Rl cihsZW49MitpKSA6OiBzdHIsImZoamkiLCJrbG1ubyJdKSkgZXJyb3Igc3RvcAorICAgICAg ISBUaGlzIGxlYWtzIG1lbW9yeSEKKyAgICAgICEgZGVhbGxvY2F0ZSh4KQorICAgICEkb21w IGVuZCB0YXJnZXQKKyAgICBpZiAoYWxsb2NhdGVkKHgpKSBlcnJvciBzdG9wCisgIGVuZCBk bworCisgIHggPSBbY2hhcmFjdGVyKGxlbj00KSA6OiAiQUJDREUiLCJGSEpJIiwiS0xNTk8i XQorCisgIGRvIGkgPSAxLCBvbXBfZ2V0X251bV9kZXZpY2VzKCkgKyAxCisgICAgISRvbXAg dGFyZ2V0IGZpcnN0cHJpdmF0ZSh4LCBpKQorICAgICAgaWYgKGkgPD0gMCkgZXJyb3Igc3Rv cAorICAgICAgaWYgKC5ub3QuYWxsb2NhdGVkKHgpKSBlcnJvciBzdG9wCisgICAgICBpZiAo c2l6ZSh4KSAvPSAzKSBlcnJvciBzdG9wCisgICAgICBpZiAobGJvdW5kKHgsMSkgLz0gMSkg ZXJyb3Igc3RvcAorICAgICAgaWYgKGxlbih4KSAvPSA0KSBlcnJvciBzdG9wCisgICAgICBp ZiAoYW55ICh4IC89IFtjaGFyYWN0ZXIobGVuPTQpIDo6ICJBQkNERSIsIkZISkkiLCJLTE1O TyJdKSkgZXJyb3Igc3RvcAorICAgICAgISEgUmVhbGxvY2F0aW9uIHJ1bnMgaW50byB0aGUg aXNzdWUgUFIgZm9ydHJhbi8xMDU1MzgKKyAgICAgICEhCisgICAgICAhIXggPSBbY2hhcmFj dGVyKGxlbj0yK2kpIDo6IHN0ciwiZmhqaSIsImtsbW5vIl0KKyAgICAgICEhaWYgKGxlbih4 KSAvPSAyK2kpIGVycm9yIHN0b3AKKyAgICAgICEhaWYgKGFueSAoeCAvPSBbY2hhcmFjdGVy KGxlbj0yK2kpIDo6IHN0ciwiZmhqaSIsImtsbW5vIl0pKSBlcnJvciBzdG9wCisgICAgICAh ISBUaGlzIGxlYWtzIG1lbW9yeSEKKyAgICAgICEhIGRlYWxsb2NhdGUoeCkKKyAgICAgICEg SnVzdCBhc3NpZ246CisgICAgICB4ID0gW2NoYXJhY3RlcihsZW49NCkgOjogImFiY2RlIiwi ZmhqaSIsImtsbW5vIl0KKyAgICAgIGlmIChhbnkgKHggLz0gW2NoYXJhY3RlcihsZW49NCkg OjogImFiY2RlIiwiZmhqaSIsImtsbW5vIl0pKSBlcnJvciBzdG9wCisgICAgISRvbXAgZW5k IHRhcmdldAorICAgIGlmICgubm90LmFsbG9jYXRlZCh4KSkgZXJyb3Igc3RvcAorICAgIGlm IChsYm91bmQoeCwxKSAvPSAxKSBlcnJvciBzdG9wCisgICAgaWYgKHNpemUoeCkgLz0gMykg ZXJyb3Igc3RvcAorICAgIGlmIChsZW4oeCkgLz0gNCkgZXJyb3Igc3RvcAorICAgIGlmIChh bnkgKHggLz0gW2NoYXJhY3RlcihsZW49NCkgOjogIkFCQ0RFIiwiRkhKSSIsIktMTU5PIl0p KSBlcnJvciBzdG9wCisgIGVuZCBkbworICBkZWFsbG9jYXRlKHgpCitlbmQKK2VuZCBtb2R1 bGUgbQorCit1c2UgbQorY2FsbCBvbmUKK2NhbGwgdHdvCitlbmQKZGlmZiAtLWdpdCBhL2xp YmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtZmlyc3Rwcml2YXRlLTMu ZjkwIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1maXJzdHBy aXZhdGUtMy5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc0 MDZjZGM0ZTQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29t cC5mb3J0cmFuL3RhcmdldC1maXJzdHByaXZhdGUtMy5mOTAKQEAgLTAsMCArMSwyNCBAQAor aW1wbGljaXQgbm9uZQorICBpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiB4KDopCisgIHggPSBb MSwyLDMsNF0KKyAgY2FsbCBmb28oeCkKKyAgaWYgKGFueSAoeCAvPSBbMSwyLDMsNF0pKSBl cnJvciBzdG9wCisgIGNhbGwgZm9vKCkKK2NvbnRhaW5zCitzdWJyb3V0aW5lIGZvbyhjKQor ICBpbnRlZ2VyLCBhbGxvY2F0YWJsZSwgb3B0aW9uYWwgOjogYyg6KQorICBsb2dpY2FsIDo6 IGlzX3ByZXNlbnQKKyAgaXNfcHJlc2VudCA9IHByZXNlbnQgKGMpCisgICEkb21wIHRhcmdl dCBmaXJzdHByaXZhdGUoYykKKyAgICBpZiAoaXNfcHJlc2VudCkgdGhlbgorICAgICAgaWYg KC5ub3QuIGFsbG9jYXRlZChjKSkgZXJyb3Igc3RvcAorICAgICAgaWYgKGFueSAoYyAvPSBb MSwyLDMsNF0pKSBlcnJvciBzdG9wCisgICAgICBjID0gWzk5LDg4LDc3LDY2XQorICAgICAg aWYgKGFueSAoYyAvPSBbOTksODgsNzcsNjZdKSkgZXJyb3Igc3RvcAorICAgIGVuZCBpZgor ICAhJG9tcCBlbmQgdGFyZ2V0CisgIGlmIChpc19wcmVzZW50KSB0aGVuCisgICAgaWYgKGFu eSAoYyAvPSBbMSwyLDMsNF0pKSBlcnJvciBzdG9wCisgIGVuZCBpZgorZW5kCitlbmQK --------------gtEyFY0QOXafmSpAbLJpD600--