From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id 2E4D5385801D for ; Fri, 10 Dec 2021 17:33:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 2E4D5385801D Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com IronPort-SDR: aIYGsMxVgx4YahJpUjJrQfpb7wbwLPNBiUpHdrhLFHWp4zsCkEyzQTlg6CAbKzL2ipvWPZ4Wdp ZderGTkDYVD4ahlU9VzrQZMypUWzKXHQvmeLesf/qmsmPmWRVIkewGYRJbNnYVPf5B/iesvkQL NSn7nFD6knkZuZIgDtrG1rjmUNbGn+vFZkalaaVkRJ2Jan4L1fPyPMjN+FxPVwNoBh8YKrFbLB 3r7bnQoeOStjHYRtxY2ocporXEtM9GSQyipfgZggaiBYnDYGD+auuoO2WQCVKlhpVYfC84kZsq 37cW2nkVfcxztsMEsW6kv8ow X-IronPort-AV: E=Sophos;i="5.88,196,1635235200"; d="scan'208,223";a="69539954" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa2.mentor.iphmx.com with ESMTP; 10 Dec 2021 09:33:57 -0800 IronPort-SDR: dPCfseDxvx23j2+21ZbGG6L9UDgAJge74eRv5dbzmYaeFJ0DqpWcCdlskcUzUoNZZQe4rhXiqs 5+zV/bZ07nIF66hKsdTdZaAs6mNOzxpwQG3qOv8kP1l9XeVokkGHvTu2LsXPI0dASjQzXYMcpC QACU0SRGpPvhQmzVFYBMac/fcNprLX3urqcH6gwHx6WmR145gO/AhRQ6yJlID3ofOfhNW/Xp5b 8+z4IrHxy6LNiGNWxyt3t4HkCxeLZRcfIGhQ+hURDCDrcKupbx4eVDbqX823xh3FK+7YkO8v4F sRg= Content-Type: multipart/mixed; boundary="------------kqpTMpB1k72SsaprJ4FX5Y46" Message-ID: Date: Fri, 10 Dec 2021 17:33:25 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.0 To: gcc-patches , Jakub Jelinek References: Subject: [PATCH 2/7] openmp: Add middle-end support for metadirectives From: Kwok Cheung Yeung In-Reply-To: X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-11.mgc.mentorg.com (139.181.222.11) To SVR-IES-MBX-04.mgc.mentorg.com (139.181.222.4) X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP 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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Dec 2021 17:34:02 -0000 --------------kqpTMpB1k72SsaprJ4FX5Y46 Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit This patch contains the required support for metadirectives in the middle-end. The tree metadirective representation is gimplified into the high Gimple representation, which is structured like this: #pragma omp metadirective when (): goto body_label|end_label when (>: goto body_label|end_label default: goto body_label|end_label body_label: end_label: Each variant ends with an explicit goto to either the shared standalone body (if the variant uses it) or to the point after the body (if it does not). When lowered to low Gimple, the directive bodies move outside of the metadirective statement, retaining only the labels to the bodies, so it looks like this instead: #pragma omp metadirective when (): goto body1_label when (>: goto body2_label default: goto default_label body1_label: goto body_label|end_label body2_label: goto body_label|end_label default_label: goto body_label|end_label body_label: end_label: When scanning the OpenMP regions in the ompexp pass, we create a 'clone' of the surrounding context when recursively scanning the directive variants. If the same outer context was used for all variants, then it would appear as if all the variants were inside the region at the same time (only one variant of the metadirective is ever active at a time), which can lead to spurious errors. The rest of the code is the plumbing required to allow the Gimple metadirective statement to pass through the middle-end. GCC will emit an ICE if it makes it through to the back-end though, as the metadirective is supposed to be eliminated before it gets that far. Kwok --------------kqpTMpB1k72SsaprJ4FX5Y46 Content-Type: text/plain; charset="UTF-8"; name="0002-openmp-Add-middle-end-support-for-metadirectives.patch" Content-Disposition: attachment; filename="0002-openmp-Add-middle-end-support-for-metadirectives.patch" Content-Transfer-Encoding: base64 RnJvbSAxYTJmY2JiMjE5MWZkMWRkNjk0ZWE1NzMwZTU0ZmFiMTlkNjQ2NWI0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLd29rIENoZXVuZyBZZXVuZyA8a2N5QGNvZGVzb3Vy Y2VyeS5jb20+CkRhdGU6IE1vbiwgNiBEZWMgMjAyMSAyMjoyOTozNCArMDAwMApTdWJqZWN0 OiBbUEFUQ0ggMi83XSBvcGVubXA6IEFkZCBtaWRkbGUtZW5kIHN1cHBvcnQgZm9yIG1ldGFk aXJlY3RpdmVzCgpUaGlzIGFkZHMgYSBuZXcgR2ltcGxlIHN0YXRlbWVudCB0eXBlIEdJTVBM RV9PTVBfTUVUQURJUkVDVElWRSwgd2hpY2gKcmVwcmVzZW50cyB0aGUgbWV0YWRpcmVjdGl2 ZSBpbiBHaW1wbGUuIEluIGhpZ2ggR2ltcGxlLCB0aGUgc3RhdGVtZW50CmNvbnRhaW5zIHRo ZSBib2R5IG9mIHRoZSBkaXJlY3RpdmUgdmFyaWFudHMsIHdoZXJlYXMgaW4gbG93IEdpbXBs ZSwgaXQKb25seSBjb250YWlucyBsYWJlbHMgdG8gdGhlIGJvZGllcy4KClRoaXMgcGF0Y2gg YWRkcyBzdXBwb3J0IGZvciBjb252ZXJ0aW5nIG1ldGFkaXJlY3RpdmVzIGZyb20gdHJlZSB0 byBHaW1wbGUKZm9ybSwgYW5kIGhhbmRsaW5nIG9mIHRoZSBHaW1wbGUgZm9ybSAoR2ltcGxl IGxvd2VyaW5nLCBPcGVuTVAgbG93ZXJpbmcKYW5kIGV4cGFuc2lvbiwgaW5saW5pbmcsIFNT QSBoYW5kbGluZyBldGMpLgoKTWV0YWRpcmVjdGl2ZXMgc2hvdWxkIGJlIHJlc29sdmVkIGJl Zm9yZSB0aGV5IHJlYWNoIHRoZSBiYWNrLWVuZCwgb3RoZXJ3aXNlCnRoZSBjb21waWxlciB3 aWxsIGNyYXNoIGFzIEdDQyBkb2VzIG5vdCBrbm93IGhvdyB0byBjb252ZXJ0IG1ldGFkaXJl Y3RpdmUKR2ltcGxlIHN0YXRlbWVudHMgdG8gUlRYLgoKMjAyMS0xMi0xMCAgS3dvayBDaGV1 bmcgWWV1bmcgIDxrY3lAY29kZXNvdXJjZXJ5LmNvbT4KCglnY2MvCgkqIGdpbXBsZS1sb3cu YyAobG93ZXJfb21wX21ldGFkaXJlY3RpdmUpOiBOZXcuCgkobG93ZXJfc3RtdCk6IEhhbmRs ZSBHSU1QTEVfT01QX01FVEFESVJFQ1RJVkUuCgkqIGdpbXBsZS1wcmV0dHktcHJpbnQuYyAo ZHVtcF9naW1wbGVfb21wX21ldGFkaXJlY3RpdmUpOiBOZXcuCgkocHBfZ2ltcGxlX3N0bXRf MSk6IEhhbmRsZSBHSU1QTEVfT01QX01FVEFESVJFQ1RJVkUuCgkqIGdpbXBsZS13YWxrLmMg KHdhbGtfZ2ltcGxlX29wKTogSGFuZGxlIEdJTVBMRV9PTVBfTUVUQURJUkVDVElWRS4KCSh3 YWxrX2dpbXBsZV9zdG10KTogTGlrZXdpc2UuCgkqIGdpbXBsZS5jIChnaW1wbGVfYWxsb2Nf b21wX21ldGFkaXJlY3RpdmUpOiBOZXcuCgkoZ2ltcGxlX2J1aWxkX29tcF9tZXRhZGlyZWN0 aXZlKTogTmV3LgoJKGdpbXBsZV9idWlsZF9vbXBfbWV0YWRpcmVjdGl2ZV92YXJpYW50KTog TmV3LgoJKiBnaW1wbGUuZGVmIChHSU1QTEVfT01QX01FVEFESVJFQ1RJVkUpOiBOZXcuCgko R0lNUExFX09NUF9NRVRBRElSRUNUSVZFX1ZBUklBTlQpOiBOZXcuCgkqIGdpbXBsZS5oIChn b21wX21ldGFkaXJlY3RpdmVfdmFyaWFudCk6IE5ldy4KCShnb21wX21ldGFkaXJlY3RpdmUp OiBOZXcuCgkoaXNfYV9oZWxwZXIgPGdvbXBfbWV0YWRpcmVjdGl2ZSAqPjo6dGVzdCk6IE5l dy4KCShpc19hX2hlbHBlciA8Z29tcF9tZXRhZGlyZWN0aXZlX3ZhcmlhbnQgKj46OnRlc3Qp OiBOZXcuCgkoaXNfYV9oZWxwZXIgPGNvbnN0IGdvbXBfbWV0YWRpcmVjdGl2ZSAqPjo6dGVz dCk6IE5ldy4KCShpc19hX2hlbHBlciA8Y29uc3QgZ29tcF9tZXRhZGlyZWN0aXZlX3Zhcmlh bnQgKj46OnRlc3QpOiBOZXcuCgkoZ2ltcGxlX2FsbG9jX29tcF9tZXRhZGlyZWN0aXZlKTog TmV3IHByb3RvdHlwZS4KCShnaW1wbGVfYnVpbGRfb21wX21ldGFkaXJlY3RpdmUpOiBOZXcg cHJvdG90eXBlLgoJKGdpbXBsZV9idWlsZF9vbXBfbWV0YWRpcmVjdGl2ZV92YXJpYW50KTog TmV3IHByb3RvdHlwZS4KCShnaW1wbGVfaGFzX3N1YnN0YXRlbWVudHMpOiBBZGQgR0lNUExF X09NUF9NRVRBRElSRUNUSVZFIGNhc2UuCgkoZ2ltcGxlX2hhc19vcHMpOiBBZGQgR0lNUExF X09NUF9NRVRBRElSRUNUSVZFLgoJKGdpbXBsZV9vbXBfbWV0YWRpcmVjdGl2ZV9sYWJlbCk6 IE5ldy4KCShnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfc2V0X2xhYmVsKTogTmV3LgoJKGdp bXBsZV9vbXBfbWV0YWRpcmVjdGl2ZV92YXJpYW50cyk6IE5ldy4KCShnaW1wbGVfb21wX21l dGFkaXJlY3RpdmVfc2V0X3ZhcmlhbnRzKTogTmV3LgoJKENBU0VfR0lNUExFX09NUCk6IEFk ZCBHSU1QTEVfT01QX01FVEFESVJFQ1RJVkUuCgkqIGdpbXBsaWZ5LmMgKGlzX2dpbXBsZV9z dG10KTogQWRkIE9NUF9NRVRBRElSRUNUSVZFLgoJKGV4cGFuZF9vbXBfbWV0YWRpcmVjdGl2 ZSk6IE5ldy4KCShnaW1wbGlmeV9vbXBfbWV0YWRpcmVjdGl2ZSk6IE5ldy4KCShnaW1wbGlm eV9leHByKTogQWRkIGNhc2UgZm9yIE9NUF9NRVRBRElSRUNUSVZFLgoJKiBnc3N0cnVjdC5k ZWYgKEdTU19PTVBfTUVUQURJUkVDVElWRSk6IE5ldy4KCShHU1NfT01QX01FVEFESVJFQ1RJ VkVfVkFSSUFOVCk6IE5ldy4KCSogb21wLWV4cGFuZC5jIChidWlsZF9vbXBfcmVnaW9uc18x KTogSGFuZGxlIEdJTVBMRV9PTVBfTUVUQURJUkVDVElWRS4KCShvbXBfbWFrZV9naW1wbGVf ZWRnZXMpOiBMaWtld2lzZS4KCSogb21wLWxvdy5jIChzdHJ1Y3Qgb21wX2NvbnRleHQpOiBB ZGQgbmV4dF9jbG9uZSBmaWVsZC4KCShuZXdfb21wX2NvbnRleHQpOiBJbml0aWFsaXplIG5l eHRfY2xvbmUgZmllbGQuCgkoY2xvbmVfb21wX2NvbnRleHQpOiBOZXcuCgkoZGVsZXRlX29t cF9jb250ZXh0KTogRGVsZXRlIGNsb25lIGNvbnRleHRzLgoJKHNjYW5fb21wX21ldGFkaXJl Y3RpdmUpOiBOZXcuCgkoc2Nhbl9vbXBfMV9zdG10KTogSGFuZGxlIEdJTVBMRV9PTVBfTUVU QURJUkVDVElWRS4KCShsb3dlcl9vbXBfbWV0YWRpcmVjdGl2ZSk6IE5ldy4KCShsb3dlcl9v bXBfMSk6IEhhbmRsZSBHSU1QTEVfT01QX01FVEFESVJFQ1RJVkUuCgkqIHRyZWUtY2ZnLmMg KGNsZWFudXBfZGVhZF9sYWJlbHMpOiBIYW5kbGUgR0lNUExFX09NUF9NRVRBRElSRUNUSVZF LgoJKGdpbXBsZV9yZWRpcmVjdF9lZGdlX2FuZF9icmFuY2gpOiBMaWtld2lzZS4KCSogdHJl ZS1pbmxpbmUuYyAocmVtYXBfZ2ltcGxlX3N0bXQpOiBIYW5kbGUgR0lNUExFX09NUF9NRVRB RElSRUNUSVZFLgoJKGVzdGltYXRlX251bV9pbnNucyk6IExpa2V3aXNlLgoJKiB0cmVlLXBy ZXR0eS1wcmludC5jIChkdW1wX2dlbmVyaWNfbm9kZSk6IEhhbmRsZSBPTVBfTUVUQURJUkVD VElWRS4KCSogdHJlZS1zc2Etb3BlcmFuZHMuYyAocGFyc2Vfc3NhX29wZXJhbmRzKTogSGFu ZGxlCglHSU1QTEVfT01QX01FVEFESVJFQ1RJVkUuCi0tLQogZ2NjL2dpbXBsZS1sb3cuYyAg ICAgICAgICB8ICAzNCArKysrKysrKysrKysrCiBnY2MvZ2ltcGxlLXByZXR0eS1wcmludC5j IHwgIDYzICsrKysrKysrKysrKysrKysrKysrKysrKwogZ2NjL2dpbXBsZS13YWxrLmMgICAg ICAgICB8ICAzMSArKysrKysrKysrKysKIGdjYy9naW1wbGUuYyAgICAgICAgICAgICAgfCAg MzUgKysrKysrKysrKysrKwogZ2NjL2dpbXBsZS5kZWYgICAgICAgICAgICB8ICAgNyArKysK IGdjYy9naW1wbGUuaCAgICAgICAgICAgICAgfCAxMDAgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0KIGdjYy9naW1wbGlmeS5jICAgICAgICAgICAgfCAgOTQgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGdjYy9nc3N0cnVjdC5kZWYgICAg ICAgICAgfCAgIDIgKwogZ2NjL29tcC1leHBhbmQuYyAgICAgICAgICB8ICAyOCArKysrKysr KysrKwogZ2NjL29tcC1sb3cuYyAgICAgICAgICAgICB8ICA2NiArKysrKysrKysrKysrKysr KysrKysrKysrCiBnY2MvdHJlZS1jZmcuYyAgICAgICAgICAgIHwgIDI0ICsrKysrKysrKwog Z2NjL3RyZWUtaW5saW5lLmMgICAgICAgICB8ICAzNiArKysrKysrKysrKysrKwogZ2NjL3Ry ZWUtcHJldHR5LXByaW50LmMgICB8ICAzNCArKysrKysrKysrKysrCiBnY2MvdHJlZS1zc2Et b3BlcmFuZHMuYyAgIHwgIDI3ICsrKysrKysrKysKIDE0IGZpbGVzIGNoYW5nZWQsIDU4MCBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsZS1s b3cuYyBiL2djYy9naW1wbGUtbG93LmMKaW5kZXggN2UzOWMyMmRmNDQuLjcyM2M4YjFkNTE2 IDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLWxvdy5jCisrKyBiL2djYy9naW1wbGUtbG93LmMK QEAgLTIzNCw2ICsyMzQsMzQgQEAgbG93ZXJfb21wX2RpcmVjdGl2ZSAoZ2ltcGxlX3N0bXRf aXRlcmF0b3IgKmdzaSwgc3RydWN0IGxvd2VyX2RhdGEgKmRhdGEpCiAgIGdzaV9uZXh0IChn c2kpOwogfQogCisvKiBMb3dlciB0aGUgT3Blbk1QIG1ldGFkaXJlY3RpdmUgc3RhdGVtZW50 IHBvaW50ZWQgYnkgR1NJLiAgKi8KKworc3RhdGljIHZvaWQKK2xvd2VyX29tcF9tZXRhZGly ZWN0aXZlIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpLCBzdHJ1Y3QgbG93ZXJfZGF0YSAq ZGF0YSkKK3sKKyAgZ2ltcGxlICpzdG10ID0gZ3NpX3N0bXQgKCpnc2kpOworICBnaW1wbGUg KnZhcmlhbnQgPSBnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfdmFyaWFudHMgKHN0bXQpOwor ICB1bnNpZ25lZCBpOworCisgIC8qIFRoZSB2YXJpYW50cyBhcmUgbm90IHVzZWQgYWZ0ZXIg bG93ZXJpbmcuICAqLworICBnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfc2V0X3ZhcmlhbnRz IChzdG10LCBOVUxMKTsKKworICBmb3IgKGkgPSAwOyBpIDwgZ2ltcGxlX251bV9vcHMgKHN0 bXQpOyBpKyspCisgICAgeworICAgICAgdHJlZSBsYWJlbCA9IGNyZWF0ZV9hcnRpZmljaWFs X2xhYmVsIChVTktOT1dOX0xPQ0FUSU9OKTsKKyAgICAgIGdpbXBsZV9vbXBfbWV0YWRpcmVj dGl2ZV9zZXRfbGFiZWwgKHN0bXQsIGksIGxhYmVsKTsKKyAgICAgIGdzaV9pbnNlcnRfYWZ0 ZXIgKGdzaSwgZ2ltcGxlX2J1aWxkX2xhYmVsIChsYWJlbCksIEdTSV9DT05USU5VRV9MSU5L SU5HKTsKKworICAgICAgZ2ltcGxlX3NlcSAqZGlyZWN0aXZlX3B0ciA9IGdpbXBsZV9vbXBf Ym9keV9wdHIgKHZhcmlhbnQpOworICAgICAgbG93ZXJfc2VxdWVuY2UgKGRpcmVjdGl2ZV9w dHIsIGRhdGEpOworICAgICAgZ3NpX2luc2VydF9zZXFfYWZ0ZXIgKGdzaSwgKmRpcmVjdGl2 ZV9wdHIsIEdTSV9DT05USU5VRV9MSU5LSU5HKTsKKworICAgICAgdmFyaWFudCA9IHZhcmlh bnQtPm5leHQ7CisgICAgfQorCisgIGdzaV9uZXh0IChnc2kpOworfQorCiAKIC8qIExvd2Vy IHN0YXRlbWVudCBHU0kuICBEQVRBIGlzIHBhc3NlZCB0aHJvdWdoIHRoZSByZWN1cnNpb24u ICBXZSB0cnkgdG8KICAgIHRyYWNrIHRoZSBmYWxsdGhydW5lc3Mgb2Ygc3RhdGVtZW50cyBh bmQgZ2V0IHJpZCBvZiB1bnJlYWNoYWJsZSByZXR1cm4KQEAgLTQwMCw2ICs0MjgsMTIgQEAg bG93ZXJfc3RtdCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwgc3RydWN0IGxvd2VyX2Rh dGEgKmRhdGEpCiAgICAgICBkYXRhLT5jYW5ub3RfZmFsbHRocnUgPSBmYWxzZTsKICAgICAg IHJldHVybjsKIAorICAgIGNhc2UgR0lNUExFX09NUF9NRVRBRElSRUNUSVZFOgorICAgICAg ZGF0YS0+Y2Fubm90X2ZhbGx0aHJ1ID0gZmFsc2U7CisgICAgICBsb3dlcl9vbXBfbWV0YWRp cmVjdGl2ZSAoZ3NpLCBkYXRhKTsKKyAgICAgIGRhdGEtPmNhbm5vdF9mYWxsdGhydSA9IGZh bHNlOworICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBHSU1QTEVfVFJBTlNBQ1RJT046CiAg ICAgICBsb3dlcl9zZXF1ZW5jZSAoZ2ltcGxlX3RyYW5zYWN0aW9uX2JvZHlfcHRyICgKIAkJ CWFzX2EgPGd0cmFuc2FjdGlvbiAqPiAoc3RtdCkpLApkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBs ZS1wcmV0dHktcHJpbnQuYyBiL2djYy9naW1wbGUtcHJldHR5LXByaW50LmMKaW5kZXggMWNk MTU5NzM1OWUuLmRhMjYzMTM3ZjViIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXByZXR0eS1w cmludC5jCisrKyBiL2djYy9naW1wbGUtcHJldHR5LXByaW50LmMKQEAgLTIwNTEsNiArMjA1 MSw2MyBAQCBkdW1wX2dpbXBsZV9vbXBfcmV0dXJuIChwcmV0dHlfcHJpbnRlciAqYnVmZmVy LCBjb25zdCBnaW1wbGUgKmdzLCBpbnQgc3BjLAogICAgIH0KIH0KIAorLyogRHVtcCBhIEdJ TVBMRV9PTVBfTUVUQURJUkVDVElWRSB0dXBsZSBvbiB0aGUgcHJldHR5X3ByaW50ZXIgQlVG RkVSLiAgKi8KKworc3RhdGljIHZvaWQKK2R1bXBfZ2ltcGxlX29tcF9tZXRhZGlyZWN0aXZl IChwcmV0dHlfcHJpbnRlciAqYnVmZmVyLCBjb25zdCBnaW1wbGUgKmdzLAorCQkJICAgICAg IGludCBzcGMsIGR1bXBfZmxhZ3NfdCBmbGFncykKK3sKKyAgaWYgKGZsYWdzICYgVERGX1JB VykKKyAgICB7CisgICAgICBkdW1wX2dpbXBsZV9mbXQgKGJ1ZmZlciwgc3BjLCBmbGFncywg IiVHIDwlK0JPRFkgPCVTPiA+IiwgZ3MsCisJCSAgICAgICBnaW1wbGVfb21wX2JvZHkgKGdz KSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcHBfc3RyaW5nIChidWZmZXIsICIj cHJhZ21hIG9tcCBtZXRhZGlyZWN0aXZlIik7CisgICAgICBuZXdsaW5lX2FuZF9pbmRlbnQg KGJ1ZmZlciwgc3BjICsgMik7CisKKyAgICAgIGdpbXBsZSAqdmFyaWFudCA9IGdpbXBsZV9v bXBfbWV0YWRpcmVjdGl2ZV92YXJpYW50cyAoZ3MpOworCisgICAgICBmb3IgKHVuc2lnbmVk IGkgPSAwOyBpIDwgZ2ltcGxlX251bV9vcHMgKGdzKTsgaSsrKQorCXsKKwkgIHRyZWUgc2Vs ZWN0b3IgPSBnaW1wbGVfb3AgKGdzLCBpKTsKKworCSAgaWYgKHNlbGVjdG9yID09IE5VTExf VFJFRSkKKwkgICAgcHBfc3RyaW5nIChidWZmZXIsICJkZWZhdWx0OiIpOworCSAgZWxzZQor CSAgICB7CisJICAgICAgcHBfc3RyaW5nIChidWZmZXIsICJ3aGVuICgiKTsKKwkgICAgICBk dW1wX2dlbmVyaWNfbm9kZSAoYnVmZmVyLCBzZWxlY3Rvciwgc3BjLCBmbGFncywgZmFsc2Up OworCSAgICAgIHBwX3N0cmluZyAoYnVmZmVyLCAiKToiKTsKKwkgICAgfQorCisJICBpZiAo dmFyaWFudCAhPSBOVUxMKQorCSAgICB7CisJICAgICAgbmV3bGluZV9hbmRfaW5kZW50IChi dWZmZXIsIHNwYyArIDQpOworCSAgICAgIHBwX2xlZnRfYnJhY2UgKGJ1ZmZlcik7CisJICAg ICAgcHBfbmV3bGluZSAoYnVmZmVyKTsKKwkgICAgICBkdW1wX2dpbXBsZV9zZXEgKGJ1ZmZl ciwgZ2ltcGxlX29tcF9ib2R5ICh2YXJpYW50KSwgc3BjICsgNiwKKwkJCSAgICAgICBmbGFn cyk7CisJICAgICAgbmV3bGluZV9hbmRfaW5kZW50IChidWZmZXIsIHNwYyArIDQpOworCSAg ICAgIHBwX3JpZ2h0X2JyYWNlIChidWZmZXIpOworCisJICAgICAgdmFyaWFudCA9IHZhcmlh bnQtPm5leHQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHRyZWUgbGFiZWwg PSBnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfbGFiZWwgKGdzLCBpKTsKKworCSAgICAgIHBw X3N0cmluZyAoYnVmZmVyLCAiICIpOworCSAgICAgIGR1bXBfZ2VuZXJpY19ub2RlIChidWZm ZXIsIGxhYmVsLCBzcGMsIGZsYWdzLCBmYWxzZSk7CisJICAgIH0KKworCSAgaWYgKGkgIT0g Z2ltcGxlX251bV9vcHMgKGdzKSAtIDEpCisJICAgIG5ld2xpbmVfYW5kX2luZGVudCAoYnVm ZmVyLCBzcGMgKyAyKTsKKwl9CisgICAgfQorfQorCiAvKiBEdW1wIGEgR0lNUExFX1RSQU5T QUNUSU9OIHR1cGxlIG9uIHRoZSBwcmV0dHlfcHJpbnRlciBCVUZGRVIuICAqLwogCiBzdGF0 aWMgdm9pZApAQCAtMjgyMyw2ICsyODgwLDEyIEBAIHBwX2dpbXBsZV9zdG10XzEgKHByZXR0 eV9wcmludGVyICpidWZmZXIsIGNvbnN0IGdpbXBsZSAqZ3MsIGludCBzcGMsCiAJCQkJZmxh Z3MpOwogICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIEdJTVBMRV9PTVBfTUVUQURJUkVDVElW RToKKyAgICAgIGR1bXBfZ2ltcGxlX29tcF9tZXRhZGlyZWN0aXZlIChidWZmZXIsCisJCQkJ ICAgICBhc19hIDxjb25zdCBnb21wX21ldGFkaXJlY3RpdmUgKj4gKGdzKSwKKwkJCQkgICAg IHNwYywgZmxhZ3MpOworICAgICAgYnJlYWs7CisKICAgICBjYXNlIEdJTVBMRV9DQVRDSDoK ICAgICAgIGR1bXBfZ2ltcGxlX2NhdGNoIChidWZmZXIsIGFzX2EgPGNvbnN0IGdjYXRjaCAq PiAoZ3MpLCBzcGMsIGZsYWdzKTsKICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvZ2NjL2dp bXBsZS13YWxrLmMgYi9nY2MvZ2ltcGxlLXdhbGsuYwppbmRleCBlMTVmZDQ2OTdiYS4uYjhk YjBmZTM0YjIgMTAwNjQ0Ci0tLSBhL2djYy9naW1wbGUtd2Fsay5jCisrKyBiL2djYy9naW1w bGUtd2Fsay5jCkBAIC00ODUsNiArNDg1LDIxIEBAIHdhbGtfZ2ltcGxlX29wIChnaW1wbGUg KnN0bXQsIHdhbGtfdHJlZV9mbiBjYWxsYmFja19vcCwKICAgICAgIH0KICAgICAgIGJyZWFr OwogCisgICAgY2FzZSBHSU1QTEVfT01QX01FVEFESVJFQ1RJVkU6CisgICAgICB7CisJZ2lt cGxlICp2YXJpYW50ID0gZ2ltcGxlX29tcF9tZXRhZGlyZWN0aXZlX3ZhcmlhbnRzIChzdG10 KTsKKworCXdoaWxlICh2YXJpYW50KQorCSAgeworCSAgICByZXQgPSB3YWxrX2dpbXBsZV9v cCAoZ2ltcGxlX29tcF9ib2R5ICh2YXJpYW50KSwgY2FsbGJhY2tfb3AsIHdpKTsKKwkgICAg aWYgKHJldCkKKwkgICAgICByZXR1cm4gcmV0OworCisJICAgIHZhcmlhbnQgPSB2YXJpYW50 LT5uZXh0OworCSAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKICAgICBjYXNlIEdJTVBM RV9UUkFOU0FDVElPTjoKICAgICAgIHsKIAlndHJhbnNhY3Rpb24gKnR4biA9IGFzX2EgPGd0 cmFuc2FjdGlvbiAqPiAoc3RtdCk7CkBAIC03MDAsNiArNzE1LDIyIEBAIHdhbGtfZ2ltcGxl X3N0bXQgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksIHdhbGtfc3RtdF9mbiBjYWxsYmFj a19zdG10LAogCXJldHVybiB3aS0+Y2FsbGJhY2tfcmVzdWx0OwogICAgICAgYnJlYWs7CiAK KyAgICBjYXNlIEdJTVBMRV9PTVBfTUVUQURJUkVDVElWRToKKyAgICAgIHsKKwlnaW1wbGUg KnZhcmlhbnQgPSBnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfdmFyaWFudHMgKHN0bXQpOwor CisJd2hpbGUgKHZhcmlhbnQpCisJICB7CisJICAgIHJldCA9IHdhbGtfZ2ltcGxlX3NlcV9t b2QgKGdpbXBsZV9vbXBfYm9keV9wdHIgKHZhcmlhbnQpLAorCQkJCSAgICAgICBjYWxsYmFj a19zdG10LCBjYWxsYmFja19vcCwgd2kpOworCSAgICBpZiAocmV0KQorCSAgICAgIHJldHVy biB3aS0+Y2FsbGJhY2tfcmVzdWx0OworCisJICAgIHZhcmlhbnQgPSB2YXJpYW50LT5uZXh0 OworCSAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKICAgICBjYXNlIEdJTVBMRV9XSVRI X0NMRUFOVVBfRVhQUjoKICAgICAgIHJldCA9IHdhbGtfZ2ltcGxlX3NlcV9tb2QgKGdpbXBs ZV93Y2VfY2xlYW51cF9wdHIgKHN0bXQpLCBjYWxsYmFja19zdG10LAogCQkJICAgICBjYWxs YmFja19vcCwgd2kpOwpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsZS5jIGIvZ2NjL2dpbXBsZS5j CmluZGV4IDAzN2M2ZTRjODI3Li45OWYzYThkZTJlYSAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBs ZS5jCisrKyBiL2djYy9naW1wbGUuYwpAQCAtMTI2Nyw2ICsxMjY3LDQxIEBAIGdpbXBsZV9i dWlsZF9vbXBfYXRvbWljX3N0b3JlICh0cmVlIHZhbCwgZW51bSBvbXBfbWVtb3J5X29yZGVy IG1vKQogICByZXR1cm4gcDsKIH0KIAorLyogQWxsb2NhdGUgZXh0cmEgbWVtb3J5IGZvciBh IEdJTVBMRV9PTVBfTUVUQURJUkVDVElWRSBzdGF0ZW1lbnQuICAqLworCit2b2lkCitnaW1w bGVfYWxsb2Nfb21wX21ldGFkaXJlY3RpdmUgKGdpbXBsZSAqZykKK3sKKyAgZ29tcF9tZXRh ZGlyZWN0aXZlICpwID0gYXNfYSA8Z29tcF9tZXRhZGlyZWN0aXZlICo+IChnKTsKKworICBw LT5sYWJlbHMgPSBnZ2NfY2xlYXJlZF92ZWNfYWxsb2M8dHJlZT4gKGdpbXBsZV9udW1fb3Bz IChwKSk7Cit9CisKKy8qIEJ1aWxkIGEgR0lNUExFX09NUF9NRVRBRElSRUNUSVZFIHN0YXRl bWVudC4gICovCisKK2dvbXBfbWV0YWRpcmVjdGl2ZSAqCitnaW1wbGVfYnVpbGRfb21wX21l dGFkaXJlY3RpdmUgKGludCBudW1fdmFyaWFudHMpCit7CisgIGdvbXBfbWV0YWRpcmVjdGl2 ZSAqcAorICAgID0gYXNfYSA8Z29tcF9tZXRhZGlyZWN0aXZlICo+IChnaW1wbGVfYWxsb2Mg KEdJTVBMRV9PTVBfTUVUQURJUkVDVElWRSwKKwkJCQkJCSBudW1fdmFyaWFudHMpKTsKKyAg Z2ltcGxlX2FsbG9jX29tcF9tZXRhZGlyZWN0aXZlIChwKTsKKyAgZ2ltcGxlX29tcF9tZXRh ZGlyZWN0aXZlX3NldF92YXJpYW50cyAocCwgTlVMTCk7CisKKyAgcmV0dXJuIHA7Cit9CisK Ky8qIEJ1aWxkIGEgR0lNUExFX09NUF9NRVRBRElSRUNUSVZFX1ZBUklBTlQgc3RhdGVtZW50 LiAgKi8KKworZ29tcF9tZXRhZGlyZWN0aXZlX3ZhcmlhbnQgKgorZ2ltcGxlX2J1aWxkX29t cF9tZXRhZGlyZWN0aXZlX3ZhcmlhbnQgKGdpbXBsZV9zZXEgYm9keSkKK3sKKyAgZ29tcF9t ZXRhZGlyZWN0aXZlX3ZhcmlhbnQgKnZhcmlhbnQgPSBhc19hIDxnb21wX21ldGFkaXJlY3Rp dmVfdmFyaWFudCAqPgorICAgIChnaW1wbGVfYWxsb2MgKEdJTVBMRV9PTVBfTUVUQURJUkVD VElWRV9WQVJJQU5ULCAwKSk7CisgIGdpbXBsZV9vbXBfc2V0X2JvZHkgKHZhcmlhbnQsIGJv ZHkpOworICByZXR1cm4gdmFyaWFudDsKK30KKwogLyogQnVpbGQgYSBHSU1QTEVfVFJBTlNB Q1RJT04gc3RhdGVtZW50LiAgKi8KIAogZ3RyYW5zYWN0aW9uICoKZGlmZiAtLWdpdCBhL2dj Yy9naW1wbGUuZGVmIGIvZ2NjL2dpbXBsZS5kZWYKaW5kZXggMTkzYjI1MDY1MjMuLjU1ZmY5 ODgzMTkzIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLmRlZgorKysgYi9nY2MvZ2ltcGxlLmRl ZgpAQCAtMzkzLDYgKzM5MywxMyBAQCBERUZHU0NPREUoR0lNUExFX09NUF9URUFNUywgImdp bXBsZV9vbXBfdGVhbXMiLCBHU1NfT01QX1BBUkFMTEVMX0xBWU9VVCkKICAgIENMQVVTRVMg aXMgYW4gT01QX0NMQVVTRSBjaGFpbiBob2xkaW5nIHRoZSBhc3NvY2lhdGVkIGNsYXVzZXMu ICAqLwogREVGR1NDT0RFKEdJTVBMRV9PTVBfT1JERVJFRCwgImdpbXBsZV9vbXBfb3JkZXJl ZCIsIEdTU19PTVBfU0lOR0xFX0xBWU9VVCkKIAorLyogR0lNUExFX09NUF9NRVRBRElSRUNU SVZFIHJlcHJlc2VudHMgI3ByYWdtYSBvbXAgbWV0YWRpcmVjdGl2ZS4gICovCitERUZHU0NP REUoR0lNUExFX09NUF9NRVRBRElSRUNUSVZFLCAiZ2ltcGxlX29tcF9tZXRhZGlyZWN0aXZl IiwKKwkgIEdTU19PTVBfTUVUQURJUkVDVElWRSkKKworREVGR1NDT0RFKEdJTVBMRV9PTVBf TUVUQURJUkVDVElWRV9WQVJJQU5ULAorCSAgImdpbXBsZV9vbXBfbWV0YWRpcmVjdGl2ZV92 YXJpYW50IiwgR1NTX09NUF9NRVRBRElSRUNUSVZFX1ZBUklBTlQpCisKIC8qIEdJTVBMRV9Q UkVESUNUIDxQUkVESUNULCBPVVRDT01FPiBzcGVjaWZpZXMgYSBoaW50IGZvciBicmFuY2gg cHJlZGljdGlvbi4KIAogICAgUFJFRElDVCBpcyBvbmUgb2YgdGhlIHByZWRpY3RvcnMgZnJv bSBwcmVkaWN0LmRlZi4KZGlmZiAtLWdpdCBhL2djYy9naW1wbGUuaCBiL2djYy9naW1wbGUu aAppbmRleCBmN2ZkZWZjNTM2Mi4uODU1NGQyODhlNDIgMTAwNjQ0Ci0tLSBhL2djYy9naW1w bGUuaAorKysgYi9nY2MvZ2ltcGxlLmgKQEAgLTgyNCw2ICs4MjQsMzAgQEAgc3RydWN0IEdU WSgodGFnKCJHU1NfT01QX0FUT01JQ19TVE9SRV9MQVlPVVQiKSkpCiAgICAgICAgICBzdG10 LT5jb2RlID09IEdJTVBMRV9PTVBfUkVUVVJOLiAgKi8KIH07CiAKK3N0cnVjdCBHVFkoKHRh ZygiR1NTX09NUF9NRVRBRElSRUNUSVZFX1ZBUklBTlQiKSkpCisgIGdvbXBfbWV0YWRpcmVj dGl2ZV92YXJpYW50IDogcHVibGljIGdpbXBsZV9zdGF0ZW1lbnRfb21wCit7CisgIC8qIFRo ZSBib2R5IGluIHRoZSBiYXNlIGNsYXNzIGNvbnRhaW5zIHRoZSBkaXJlY3RpdmUgZm9yIHRo aXMgdmFyaWFudC4gICovCisKKyAgLyogTm8gZXh0cmEgZmllbGRzOyBhZGRzIGludmFyaWFu dDoKKyAgICAgICBzdG10LT5jb2RlID09IEdJTVBMRV9PTVBfTUVUQURJUkVDVElWRV9WQVJJ QU5ULiAgKi99OworCitzdHJ1Y3QgR1RZKCh0YWcoIkdTU19PTVBfTUVUQURJUkVDVElWRSIp KSkKKyAgZ29tcF9tZXRhZGlyZWN0aXZlIDogcHVibGljIGdpbXBsZV9zdGF0ZW1lbnRfd2l0 aF9vcHNfYmFzZQoreworICAvKiBbIFdPUkQgMS03IF0gOiBiYXNlIGNsYXNzICovCisKKyAg LyogWyBXT1JEIDggXSA6IGEgbGlzdCBvZiBib2RpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBk aXJlY3RpdmUgdmFyaWFudHMuICAqLworICBnb21wX21ldGFkaXJlY3RpdmVfdmFyaWFudCAq dmFyaWFudHM7CisKKyAgLyogWyBXT1JEIDkgXSA6IGxhYmVsIHZlY3Rvci4gICovCisgIHRy ZWUgKiBHVFkoKGxlbmd0aCAoIiVoLm51bV9vcHMiKSkpIGxhYmVsczsKKworICAvKiBbIFdP UkQgMTAgXSA6IG9wZXJhbmQgdmVjdG9yLiAgVXNlZCB0byBob2xkIHRoZSBzZWxlY3RvcnMg Zm9yIHRoZQorICAgICBkaXJlY3RpdmUgdmFyaWFudHMuICAqLworICB0cmVlIEdUWSgobGVu Z3RoICgiJWgubnVtX29wcyIpKSkgb3BbMV07Cit9OworCiAvKiBHSU1QTEVfVFJBTlNBQ1RJ T04uICAqLwogCiAvKiBCaXRzIHRvIGJlIHN0b3JlZCBpbiB0aGUgR0lNUExFX1RSQU5TQUNU SU9OIHN1YmNvZGUuICAqLwpAQCAtMTIzNSw2ICsxMjU5LDIyIEBAIGlzX2FfaGVscGVyIDxn b21wX3Rhc2sgKj46OnRlc3QgKGdpbXBsZSAqZ3MpCiAgIHJldHVybiBncy0+Y29kZSA9PSBH SU1QTEVfT01QX1RBU0s7CiB9CiAKK3RlbXBsYXRlIDw+Cit0ZW1wbGF0ZSA8PgoraW5saW5l IGJvb2wKK2lzX2FfaGVscGVyIDxnb21wX21ldGFkaXJlY3RpdmUgKj46OnRlc3QgKGdpbXBs ZSAqZ3MpCit7CisgIHJldHVybiBncy0+Y29kZSA9PSBHSU1QTEVfT01QX01FVEFESVJFQ1RJ VkU7Cit9CisKK3RlbXBsYXRlIDw+Cit0ZW1wbGF0ZSA8PgoraW5saW5lIGJvb2wKK2lzX2Ff aGVscGVyIDxnb21wX21ldGFkaXJlY3RpdmVfdmFyaWFudCAqPjo6dGVzdCAoZ2ltcGxlICpn cykKK3sKKyAgcmV0dXJuIGdzLT5jb2RlID09IEdJTVBMRV9PTVBfTUVUQURJUkVDVElWRV9W QVJJQU5UOworfQorCiB0ZW1wbGF0ZSA8PgogdGVtcGxhdGUgPD4KIGlubGluZSBib29sCkBA IC0xNDc3LDYgKzE1MTcsMjIgQEAgaXNfYV9oZWxwZXIgPGNvbnN0IGdvbXBfdGFzayAqPjo6 dGVzdCAoY29uc3QgZ2ltcGxlICpncykKICAgcmV0dXJuIGdzLT5jb2RlID09IEdJTVBMRV9P TVBfVEFTSzsKIH0KIAordGVtcGxhdGUgPD4KK3RlbXBsYXRlIDw+CitpbmxpbmUgYm9vbAor aXNfYV9oZWxwZXIgPGNvbnN0IGdvbXBfbWV0YWRpcmVjdGl2ZSAqPjo6dGVzdCAoY29uc3Qg Z2ltcGxlICpncykKK3sKKyAgcmV0dXJuIGdzLT5jb2RlID09IEdJTVBMRV9PTVBfTUVUQURJ UkVDVElWRTsKK30KKwordGVtcGxhdGUgPD4KK3RlbXBsYXRlIDw+CitpbmxpbmUgYm9vbAor aXNfYV9oZWxwZXIgPGNvbnN0IGdvbXBfbWV0YWRpcmVjdGl2ZV92YXJpYW50ICo+Ojp0ZXN0 IChjb25zdCBnaW1wbGUgKmdzKQoreworICByZXR1cm4gZ3MtPmNvZGUgPT0gR0lNUExFX09N UF9NRVRBRElSRUNUSVZFX1ZBUklBTlQ7Cit9CisKIHRlbXBsYXRlIDw+CiB0ZW1wbGF0ZSA8 PgogaW5saW5lIGJvb2wKQEAgLTE1NzYsNiArMTYzMiw5IEBAIGdvbXBfdGVhbXMgKmdpbXBs ZV9idWlsZF9vbXBfdGVhbXMgKGdpbXBsZV9zZXEsIHRyZWUpOwogZ29tcF9hdG9taWNfbG9h ZCAqZ2ltcGxlX2J1aWxkX29tcF9hdG9taWNfbG9hZCAodHJlZSwgdHJlZSwKIAkJCQkJCWVu dW0gb21wX21lbW9yeV9vcmRlcik7CiBnb21wX2F0b21pY19zdG9yZSAqZ2ltcGxlX2J1aWxk X29tcF9hdG9taWNfc3RvcmUgKHRyZWUsIGVudW0gb21wX21lbW9yeV9vcmRlcik7Cit2b2lk IGdpbXBsZV9hbGxvY19vbXBfbWV0YWRpcmVjdGl2ZSAoZ2ltcGxlICpnKTsKK2dvbXBfbWV0 YWRpcmVjdGl2ZSAqZ2ltcGxlX2J1aWxkX29tcF9tZXRhZGlyZWN0aXZlIChpbnQgbnVtX3Zh cmlhbnRzKTsKK2dvbXBfbWV0YWRpcmVjdGl2ZV92YXJpYW50ICpnaW1wbGVfYnVpbGRfb21w X21ldGFkaXJlY3RpdmVfdmFyaWFudCAoZ2ltcGxlX3NlcSBib2R5KTsKIGd0cmFuc2FjdGlv biAqZ2ltcGxlX2J1aWxkX3RyYW5zYWN0aW9uIChnaW1wbGVfc2VxKTsKIGV4dGVybiB2b2lk IGdpbXBsZV9zZXFfYWRkX3N0bXQgKGdpbXBsZV9zZXEgKiwgZ2ltcGxlICopOwogZXh0ZXJu IHZvaWQgZ2ltcGxlX3NlcV9hZGRfc3RtdF93aXRob3V0X3VwZGF0ZSAoZ2ltcGxlX3NlcSAq LCBnaW1wbGUgKik7CkBAIC0xODUzLDYgKzE5MTIsNyBAQCBnaW1wbGVfaGFzX3N1YnN0YXRl bWVudHMgKGdpbXBsZSAqZykKICAgICBjYXNlIEdJTVBMRV9PTVBfVEFSR0VUOgogICAgIGNh c2UgR0lNUExFX09NUF9URUFNUzoKICAgICBjYXNlIEdJTVBMRV9PTVBfQ1JJVElDQUw6Cisg ICAgY2FzZSBHSU1QTEVfT01QX01FVEFESVJFQ1RJVkU6CiAgICAgY2FzZSBHSU1QTEVfV0lU SF9DTEVBTlVQX0VYUFI6CiAgICAgY2FzZSBHSU1QTEVfVFJBTlNBQ1RJT046CiAgICAgICBy ZXR1cm4gdHJ1ZTsKQEAgLTIxMTAsNyArMjE3MCw4IEBAIGdpbXBsZV9pbml0X3NpbmdsZXRv biAoZ2ltcGxlICpnKQogc3RhdGljIGlubGluZSBib29sCiBnaW1wbGVfaGFzX29wcyAoY29u c3QgZ2ltcGxlICpnKQogewotICByZXR1cm4gZ2ltcGxlX2NvZGUgKGcpID49IEdJTVBMRV9D T05EICYmIGdpbXBsZV9jb2RlIChnKSA8PSBHSU1QTEVfUkVUVVJOOworICByZXR1cm4gKGdp bXBsZV9jb2RlIChnKSA+PSBHSU1QTEVfQ09ORCAmJiBnaW1wbGVfY29kZSAoZykgPD0gR0lN UExFX1JFVFVSTikKKyAgICAgIHx8IGdpbXBsZV9jb2RlIChnKSA9PSBHSU1QTEVfT01QX01F VEFESVJFQ1RJVkU7CiB9CiAKIHRlbXBsYXRlIDw+CkBAIC02NDg4LDYgKzY1NDksNDIgQEAg Z2ltcGxlX29tcF9jb250aW51ZV9zZXRfY29udHJvbF91c2UgKGdvbXBfY29udGludWUgKmNv bnRfc3RtdCwgdHJlZSB1c2UpCiAgIGNvbnRfc3RtdC0+Y29udHJvbF91c2UgPSB1c2U7CiB9 CiAKKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfbGFi ZWwgKGNvbnN0IGdpbXBsZSAqZywgdW5zaWduZWQgaSkKK3sKKyAgY29uc3QgZ29tcF9tZXRh ZGlyZWN0aXZlICpvbXBfbWV0YWRpcmVjdGl2ZQorICAgID0gYXNfYSA8Y29uc3QgZ29tcF9t ZXRhZGlyZWN0aXZlICo+IChnKTsKKyAgcmV0dXJuIG9tcF9tZXRhZGlyZWN0aXZlLT5sYWJl bHNbaV07Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX21ldGFkaXJl Y3RpdmVfc2V0X2xhYmVsIChnaW1wbGUgKmcsIHVuc2lnbmVkIGksIHRyZWUgbGFiZWwpCit7 CisgIGdvbXBfbWV0YWRpcmVjdGl2ZSAqb21wX21ldGFkaXJlY3RpdmUgPSBhc19hIDxnb21w X21ldGFkaXJlY3RpdmUgKj4gKGcpOworICBvbXBfbWV0YWRpcmVjdGl2ZS0+bGFiZWxzW2ld ID0gbGFiZWw7Cit9CisKKworc3RhdGljIGlubGluZSBnb21wX21ldGFkaXJlY3RpdmVfdmFy aWFudCAqCitnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfdmFyaWFudHMgKGNvbnN0IGdpbXBs ZSAqZykKK3sKKyAgY29uc3QgZ29tcF9tZXRhZGlyZWN0aXZlICpvbXBfbWV0YWRpcmVjdGl2 ZQorICAgID0gYXNfYSA8Y29uc3QgZ29tcF9tZXRhZGlyZWN0aXZlICo+IChnKTsKKyAgcmV0 dXJuIG9tcF9tZXRhZGlyZWN0aXZlLT52YXJpYW50czsKK30KKworCitzdGF0aWMgaW5saW5l IHZvaWQKK2dpbXBsZV9vbXBfbWV0YWRpcmVjdGl2ZV9zZXRfdmFyaWFudHMgKGdpbXBsZSAq ZywgZ2ltcGxlICp2YXJpYW50cykKK3sKKyAgZ29tcF9tZXRhZGlyZWN0aXZlICpvbXBfbWV0 YWRpcmVjdGl2ZSA9IGFzX2EgPGdvbXBfbWV0YWRpcmVjdGl2ZSAqPiAoZyk7CisgIG9tcF9t ZXRhZGlyZWN0aXZlLT52YXJpYW50cworICAgID0gdmFyaWFudHMgPyBhc19hIDxnb21wX21l dGFkaXJlY3RpdmVfdmFyaWFudCAqPiAodmFyaWFudHMpIDogTlVMTDsKK30KKworCiAvKiBS ZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBib2R5IGZvciB0aGUgR0lNUExFX1RSQU5TQUNUSU9O IHN0YXRlbWVudAogICAgVFJBTlNBQ1RJT05fU1RNVC4gICovCiAKQEAgLTY2MzgsNiArNjcz NSw3IEBAIGdpbXBsZV9yZXR1cm5fc2V0X3JldHZhbCAoZ3JldHVybiAqZ3MsIHRyZWUgcmV0 dmFsKQogICAgIGNhc2UgR0lNUExFX09NUF9SRVRVUk46CQkJXAogICAgIGNhc2UgR0lNUExF X09NUF9BVE9NSUNfTE9BRDoJCVwKICAgICBjYXNlIEdJTVBMRV9PTVBfQVRPTUlDX1NUT1JF OgkJXAorICAgIGNhc2UgR0lNUExFX09NUF9NRVRBRElSRUNUSVZFOgkJXAogICAgIGNhc2Ug R0lNUExFX09NUF9DT05USU5VRQogCiBzdGF0aWMgaW5saW5lIGJvb2wKZGlmZiAtLWdpdCBh L2djYy9naW1wbGlmeS5jIGIvZ2NjL2dpbXBsaWZ5LmMKaW5kZXggYjExOGM3MmY2MmMuLmVk NzIxNjJiYjdmIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxpZnkuYworKysgYi9nY2MvZ2ltcGxp ZnkuYwpAQCAtNTc4Nyw2ICs1Nzg3LDcgQEAgaXNfZ2ltcGxlX3N0bXQgKHRyZWUgdCkKICAg ICBjYXNlIE9NUF9UQVNLR1JPVVA6CiAgICAgY2FzZSBPTVBfT1JERVJFRDoKICAgICBjYXNl IE9NUF9DUklUSUNBTDoKKyAgICBjYXNlIE9NUF9NRVRBRElSRUNUSVZFOgogICAgIGNhc2Ug T01QX1RBU0s6CiAgICAgY2FzZSBPTVBfVEFSR0VUOgogICAgIGNhc2UgT01QX1RBUkdFVF9E QVRBOgpAQCAtMTQ2ODAsNiArMTQ2ODEsOTQgQEAgZ2ltcGxpZnlfb21wX29yZGVyZWQgKHRy ZWUgZXhwciwgZ2ltcGxlX3NlcSBib2R5KQogICByZXR1cm4gZ2ltcGxlX2J1aWxkX29tcF9v cmRlcmVkIChib2R5LCBPTVBfT1JERVJFRF9DTEFVU0VTIChleHByKSk7CiB9CiAKKy8qIFJl cGxhY2UgYSBtZXRhZGlyZWN0aXZlIHdpdGggdGhlIGNhbmRpZGF0ZSBkaXJlY3RpdmUgdmFy aWFudHMgaW4KKyAgIENBTkRJREFURVMuICAqLworCitzdGF0aWMgZW51bSBnaW1wbGlmeV9z dGF0dXMKK2V4cGFuZF9vbXBfbWV0YWRpcmVjdGl2ZSAodmVjPHN0cnVjdCBvbXBfbWV0YWRp cmVjdGl2ZV92YXJpYW50PiAmLAorCQkJICBnaW1wbGVfc2VxICopCit7CisgIHJldHVybiBH U19FUlJPUjsKK30KKworLyogR2ltcGxpZnkgYW4gT01QX01FVEFESVJFQ1RJVkUgY29uc3Ry dWN0LiAgIEVYUFIgaXMgdGhlIHRyZWUgdmVyc2lvbi4KKyAgIFRoZSBtZXRhZGlyZWN0aXZl IHdpbGwgYmUgcmVzb2x2ZWQgYXQgdGhpcyBwb2ludCBpZiBwb3NzaWJsZS4gICovCisKK3N0 YXRpYyBlbnVtIGdpbXBsaWZ5X3N0YXR1cworZ2ltcGxpZnlfb21wX21ldGFkaXJlY3RpdmUg KHRyZWUgKmV4cHJfcCwgZ2ltcGxlX3NlcSAqcHJlX3AsIGdpbXBsZV9zZXEgKiwKKwkJCSAg ICBib29sICgqKSAodHJlZSksIGZhbGxiYWNrX3QpCit7CisgIGF1dG9fdmVjPHRyZWU+IHNl bGVjdG9yczsKKworICAvKiBUcnkgdG8gcmVzb2x2ZSB0aGUgbWV0YWRpcmVjdGl2ZS4gICov CisgIHZlYzxzdHJ1Y3Qgb21wX21ldGFkaXJlY3RpdmVfdmFyaWFudD4gY2FuZGlkYXRlcwor ICAgID0gb21wX3Jlc29sdmVfbWV0YWRpcmVjdGl2ZSAoKmV4cHJfcCk7CisgIGlmICghY2Fu ZGlkYXRlcy5pc19lbXB0eSAoKSkKKyAgICByZXR1cm4gZXhwYW5kX29tcF9tZXRhZGlyZWN0 aXZlIChjYW5kaWRhdGVzLCBwcmVfcCk7CisKKyAgLyogVGhlIG1ldGFkaXJlY3RpdmUgY2Fu bm90IGJlIHJlc29sdmVkIHlldC4gICovCisKKyAgZ29tcF9tZXRhZGlyZWN0aXZlX3Zhcmlh bnQgKmZpcnN0X3ZhcmlhbnQgPSBOVUxMOworICBnb21wX21ldGFkaXJlY3RpdmVfdmFyaWFu dCAqcHJldl92YXJpYW50ID0gTlVMTDsKKyAgZ2ltcGxlX3NlcSBzdGFuZGFsb25lX2JvZHkg PSBOVUxMOworICB0cmVlIGJvZHlfbGFiZWwgPSBOVUxMOworICB0cmVlIGVuZF9sYWJlbCA9 IGNyZWF0ZV9hcnRpZmljaWFsX2xhYmVsIChVTktOT1dOX0xPQ0FUSU9OKTsKKworICBmb3Ig KHRyZWUgY2xhdXNlID0gT01QX01FVEFESVJFQ1RJVkVfQ0xBVVNFUyAoKmV4cHJfcCk7IGNs YXVzZSAhPSBOVUxMX1RSRUU7CisgICAgICAgY2xhdXNlID0gVFJFRV9DSEFJTiAoY2xhdXNl KSkKKyAgICB7CisgICAgICB0cmVlIHNlbGVjdG9yID0gVFJFRV9QVVJQT1NFIChjbGF1c2Up OworICAgICAgdHJlZSBkaXJlY3RpdmUgPSBUUkVFX1BVUlBPU0UgKFRSRUVfVkFMVUUgKGNs YXVzZSkpOworICAgICAgdHJlZSBib2R5ID0gVFJFRV9WQUxVRSAoVFJFRV9WQUxVRSAoY2xh dXNlKSk7CisKKyAgICAgIHNlbGVjdG9ycy5zYWZlX3B1c2ggKHNlbGVjdG9yKTsKKyAgICAg IGdvbXBfbWV0YWRpcmVjdGl2ZV92YXJpYW50ICp2YXJpYW50CisJPSBnaW1wbGVfYnVpbGRf b21wX21ldGFkaXJlY3RpdmVfdmFyaWFudCAoTlVMTCk7CisgICAgICBnaW1wbGVfc2VxICpk aXJlY3RpdmVfcCA9IGdpbXBsZV9vbXBfYm9keV9wdHIgKHZhcmlhbnQpOworCisgICAgICBn aW1wbGlmeV9zdG10ICgmZGlyZWN0aXZlLCBkaXJlY3RpdmVfcCk7CisgICAgICBpZiAoYm9k eSAhPSBOVUxMX1RSRUUpCisJeworCSAgaWYgKHN0YW5kYWxvbmVfYm9keSA9PSBOVUxMKQor CSAgICB7CisJICAgICAgZ2ltcGxpZnlfc3RtdCAoJmJvZHksICZzdGFuZGFsb25lX2JvZHkp OworCSAgICAgIGJvZHlfbGFiZWwgPSBjcmVhdGVfYXJ0aWZpY2lhbF9sYWJlbCAoVU5LTk9X Tl9MT0NBVElPTik7CisJICAgIH0KKwkgIGdpbXBsaWZ5X3NlcV9hZGRfc3RtdCAoZGlyZWN0 aXZlX3AsIGdpbXBsZV9idWlsZF9nb3RvIChib2R5X2xhYmVsKSk7CisJfQorICAgICAgZWxz ZQorCWdpbXBsaWZ5X3NlcV9hZGRfc3RtdCAoZGlyZWN0aXZlX3AsIGdpbXBsZV9idWlsZF9n b3RvIChlbmRfbGFiZWwpKTsKKworICAgICAgaWYgKCFmaXJzdF92YXJpYW50KQorCWZpcnN0 X3ZhcmlhbnQgPSB2YXJpYW50OworICAgICAgaWYgKHByZXZfdmFyaWFudCkKKwl7CisJICBw cmV2X3ZhcmlhbnQtPm5leHQgPSB2YXJpYW50OworCSAgdmFyaWFudC0+cHJldiA9IHByZXZf dmFyaWFudDsKKwl9CisgICAgICBwcmV2X3ZhcmlhbnQgPSB2YXJpYW50OworICAgIH0KKwor ICBnb21wX21ldGFkaXJlY3RpdmUgKnN0bXQKKyAgICA9IGdpbXBsZV9idWlsZF9vbXBfbWV0 YWRpcmVjdGl2ZSAoc2VsZWN0b3JzLmxlbmd0aCAoKSk7CisgIGdpbXBsZV9vbXBfbWV0YWRp cmVjdGl2ZV9zZXRfdmFyaWFudHMgKHN0bXQsIGZpcnN0X3ZhcmlhbnQpOworCisgIHRyZWUg c2VsZWN0b3I7CisgIHVuc2lnbmVkIGludCBpOworICBGT1JfRUFDSF9WRUNfRUxUIChzZWxl Y3RvcnMsIGksIHNlbGVjdG9yKQorICAgIGdpbXBsZV9zZXRfb3AgKHN0bXQsIGksIHNlbGVj dG9yKTsKKworICBnaW1wbGlmeV9zZXFfYWRkX3N0bXQgKHByZV9wLCBzdG10KTsKKyAgaWYg KHN0YW5kYWxvbmVfYm9keSkKKyAgICB7CisgICAgICBnaW1wbGlmeV9zZXFfYWRkX3N0bXQg KHByZV9wLCBnaW1wbGVfYnVpbGRfbGFiZWwgKGJvZHlfbGFiZWwpKTsKKyAgICAgIGdpbXBs aWZ5X3NlcV9hZGRfc3RtdCAocHJlX3AsIHN0YW5kYWxvbmVfYm9keSk7CisgICAgfQorICBn aW1wbGlmeV9zZXFfYWRkX3N0bXQgKHByZV9wLCBnaW1wbGVfYnVpbGRfbGFiZWwgKGVuZF9s YWJlbCkpOworCisgIHJldHVybiBHU19BTExfRE9ORTsKK30KKwogLyogQ29udmVydCB0aGUg R0VORVJJQyBleHByZXNzaW9uIHRyZWUgKkVYUFJfUCB0byBHSU1QTEUuICBJZiB0aGUKICAg IGV4cHJlc3Npb24gcHJvZHVjZXMgYSB2YWx1ZSB0byBiZSB1c2VkIGFzIGFuIG9wZXJhbmQg aW5zaWRlIGEgR0lNUExFCiAgICBzdGF0ZW1lbnQsIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3Jl ZCBiYWNrIGluICpFWFBSX1AuICBUaGlzIHZhbHVlIHdpbGwKQEAgLTE1NTg2LDYgKzE1Njc1 LDExIEBAIGdpbXBsaWZ5X2V4cHIgKHRyZWUgKmV4cHJfcCwgZ2ltcGxlX3NlcSAqcHJlX3As IGdpbXBsZV9zZXEgKnBvc3RfcCwKIAkgIHJldCA9IGdpbXBsaWZ5X29tcF9hdG9taWMgKGV4 cHJfcCwgcHJlX3ApOwogCSAgYnJlYWs7CiAKKwljYXNlIE9NUF9NRVRBRElSRUNUSVZFOgor CSAgcmV0ID0gZ2ltcGxpZnlfb21wX21ldGFkaXJlY3RpdmUgKGV4cHJfcCwgcHJlX3AsIHBv c3RfcCwKKwkJCQkJICAgIGdpbXBsZV90ZXN0X2YsIGZhbGxiYWNrKTsKKwkgIGJyZWFrOwor CiAJY2FzZSBUUkFOU0FDVElPTl9FWFBSOgogCSAgcmV0ID0gZ2ltcGxpZnlfdHJhbnNhY3Rp b24gKGV4cHJfcCwgcHJlX3ApOwogCSAgYnJlYWs7CmRpZmYgLS1naXQgYS9nY2MvZ3NzdHJ1 Y3QuZGVmIGIvZ2NjL2dzc3RydWN0LmRlZgppbmRleCA4Zjc3N2UyYmI5NS4uZmYxMDYwNWJh ZWMgMTAwNjQ0Ci0tLSBhL2djYy9nc3N0cnVjdC5kZWYKKysrIGIvZ2NjL2dzc3RydWN0LmRl ZgpAQCAtNTAsNCArNTAsNiBAQCBERUZHU1NUUlVDVChHU1NfT01QX1NJTkdMRV9MQVlPVVQs IGdpbXBsZV9zdGF0ZW1lbnRfb21wX3NpbmdsZV9sYXlvdXQsIGZhbHNlKQogREVGR1NTVFJV Q1QoR1NTX09NUF9DT05USU5VRSwgZ29tcF9jb250aW51ZSwgZmFsc2UpCiBERUZHU1NUUlVD VChHU1NfT01QX0FUT01JQ19MT0FELCBnb21wX2F0b21pY19sb2FkLCBmYWxzZSkKIERFRkdT U1RSVUNUKEdTU19PTVBfQVRPTUlDX1NUT1JFX0xBWU9VVCwgZ29tcF9hdG9taWNfc3RvcmUs IGZhbHNlKQorREVGR1NTVFJVQ1QoR1NTX09NUF9NRVRBRElSRUNUSVZFLCBnb21wX21ldGFk aXJlY3RpdmUsIHRydWUpCitERUZHU1NUUlVDVChHU1NfT01QX01FVEFESVJFQ1RJVkVfVkFS SUFOVCwgZ29tcF9tZXRhZGlyZWN0aXZlX3ZhcmlhbnQsIGZhbHNlKQogREVGR1NTVFJVQ1Qo R1NTX1RSQU5TQUNUSU9OLCBndHJhbnNhY3Rpb24sIGZhbHNlKQpkaWZmIC0tZ2l0IGEvZ2Nj L29tcC1leHBhbmQuYyBiL2djYy9vbXAtZXhwYW5kLmMKaW5kZXggYzVmYTVhMDFhYWMuLjNi ZjgxZTFhZTk1IDEwMDY0NAotLS0gYS9nY2Mvb21wLWV4cGFuZC5jCisrKyBiL2djYy9vbXAt ZXhwYW5kLmMKQEAgLTEwNDE4LDYgKzEwNDE4LDEwIEBAIGJ1aWxkX29tcF9yZWdpb25zXzEg KGJhc2ljX2Jsb2NrIGJiLCBzdHJ1Y3Qgb21wX3JlZ2lvbiAqcGFyZW50LAogCSAgLyogR0lN UExFX09NUF9TRUNUSU9OU19TV0lUQ0ggaXMgcGFydCBvZgogCSAgICAgR0lNUExFX09NUF9T RUNUSU9OUywgYW5kIHdlIGRvIG5vdGhpbmcgZm9yIGl0LiAgKi8KIAl9CisgICAgICBlbHNl IGlmIChjb2RlID09IEdJTVBMRV9PTVBfTUVUQURJUkVDVElWRSkKKwl7CisJICAvKiBEbyBu b3RoaW5nIGZvciBtZXRhZGlyZWN0aXZlcy4gICovCisJfQogICAgICAgZWxzZQogCXsKIAkg IHJlZ2lvbiA9IG5ld19vbXBfcmVnaW9uIChiYiwgY29kZSwgcGFyZW50KTsKQEAgLTEwNzkx LDYgKzEwNzk1LDMwIEBAIG9tcF9tYWtlX2dpbXBsZV9lZGdlcyAoYmFzaWNfYmxvY2sgYmIs IHN0cnVjdCBvbXBfcmVnaW9uICoqcmVnaW9uLAogCX0KICAgICAgIGJyZWFrOwogCisgICAg Y2FzZSBHSU1QTEVfT01QX01FVEFESVJFQ1RJVkU6CisgICAgICAvKiBDcmVhdGUgYW4gZWRn ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBib2R5IG9mIGVhY2ggY2FuZGlkYXRlCisJIGRp cmVjdGl2ZS4gICovCisgICAgICB7CisJZ2ltcGxlICpzdG10ID0gbGFzdF9zdG10IChiYik7 CisJdW5zaWduZWQgaTsKKwlib29sIHNlZW5fZGVmYXVsdCA9IGZhbHNlOworCisJZm9yIChp ID0gMDsgaSA8IGdpbXBsZV9udW1fb3BzIChzdG10KTsgaSsrKQorCSAgeworCSAgICB0cmVl IGRlc3QgPSBnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfbGFiZWwgKHN0bXQsIGkpOworCSAg ICBiYXNpY19ibG9jayBkZXN0X2JiID0gbGFiZWxfdG9fYmxvY2sgKGNmdW4sIGRlc3QpOwor CSAgICBtYWtlX2VkZ2UgKGJiLCBkZXN0X2JiLCAwKTsKKworCSAgICBpZiAoZ2ltcGxlX29w IChzdG10LCBpKSA9PSBOVUxMX1RSRUUpCisJICAgICAgc2Vlbl9kZWZhdWx0ID0gdHJ1ZTsK KwkgIH0KKworCWdjY19hc3NlcnQgKHNlZW5fZGVmYXVsdCk7CisKKwlmYWxsdGhydSA9IGZh bHNlOworICAgICAgfQorICAgICAgYnJlYWs7CisKICAgICBkZWZhdWx0OgogICAgICAgZ2Nj X3VucmVhY2hhYmxlICgpOwogICAgIH0KZGlmZiAtLWdpdCBhL2djYy9vbXAtbG93LmMgYi9n Y2Mvb21wLWxvdy5jCmluZGV4IDJhMDdiZWI0ZWFmLi5hY2NlYTgxZThhZiAxMDA2NDQKLS0t IGEvZ2NjL29tcC1sb3cuYworKysgYi9nY2Mvb21wLWxvdy5jCkBAIC0xODMsNiArMTgzLDEw IEBAIHN0cnVjdCBvbXBfY29udGV4dAogCiAgIC8qIENhbmRpZGF0ZXMgZm9yIGFkanVzdGlu ZyBPcGVuQUNDIHByaXZhdGl6YXRpb24gbGV2ZWwuICAqLwogICB2ZWM8dHJlZT4gb2FjY19w cml2YXRpemF0aW9uX2NhbmRpZGF0ZXM7CisKKyAgLyogT25seSB1c2VkIGZvciBvbXAgbWV0 YWRpcmVjdGl2ZXMuICBMaW5rcyB0byB0aGUgbmV4dCBzaGFsbG93CisgICAgIGNsb25lIG9m IHRoaXMgY29udGV4dC4gICovCisgIHN0cnVjdCBvbXBfY29udGV4dCAqbmV4dF9jbG9uZTsK IH07CiAKIHN0YXRpYyBzcGxheV90cmVlIGFsbF9jb250ZXh0czsKQEAgLTk4NSw2ICs5ODks NyBAQCBuZXdfb21wX2NvbnRleHQgKGdpbXBsZSAqc3RtdCwgb21wX2NvbnRleHQgKm91dGVy X2N0eCkKICAgc3BsYXlfdHJlZV9pbnNlcnQgKGFsbF9jb250ZXh0cywgKHNwbGF5X3RyZWVf a2V5KSBzdG10LAogCQkgICAgIChzcGxheV90cmVlX3ZhbHVlKSBjdHgpOwogICBjdHgtPnN0 bXQgPSBzdG10OworICBjdHgtPm5leHRfY2xvbmUgPSBOVUxMOwogCiAgIGlmIChvdXRlcl9j dHgpCiAgICAgewpAQCAtMTAxNCw2ICsxMDE5LDE4IEBAIG5ld19vbXBfY29udGV4dCAoZ2lt cGxlICpzdG10LCBvbXBfY29udGV4dCAqb3V0ZXJfY3R4KQogICByZXR1cm4gY3R4OwogfQog CitzdGF0aWMgb21wX2NvbnRleHQgKgorY2xvbmVfb21wX2NvbnRleHQgKG9tcF9jb250ZXh0 ICpjdHgpCit7CisgIG9tcF9jb250ZXh0ICpjbG9uZV9jdHggPSBYQ05FVyAob21wX2NvbnRl eHQpOworCisgIG1lbWNweSAoY2xvbmVfY3R4LCBjdHgsIHNpemVvZiAob21wX2NvbnRleHQp KTsKKyAgY3R4LT5uZXh0X2Nsb25lID0gY2xvbmVfY3R4OworICBjbG9uZV9jdHgtPm5leHRf Y2xvbmUgPSBOVUxMOworCisgIHJldHVybiBjbG9uZV9jdHg7Cit9CisKIHN0YXRpYyBnaW1w bGVfc2VxIG1heWJlX2NhdGNoX2V4Y2VwdGlvbiAoZ2ltcGxlX3NlcSk7CiAKIC8qIEZpbmFs aXplIHRhc2sgY29weWZuLiAgKi8KQEAgLTEwNjAsNiArMTA3NywxNSBAQCBkZWxldGVfb21w X2NvbnRleHQgKHNwbGF5X3RyZWVfdmFsdWUgdmFsdWUpCiB7CiAgIG9tcF9jb250ZXh0ICpj dHggPSAob21wX2NvbnRleHQgKikgdmFsdWU7CiAKKyAgLyogRGVsZXRlIGNsb25lcy4gICov CisgIG9tcF9jb250ZXh0ICpjbG9uZSA9IGN0eC0+bmV4dF9jbG9uZTsKKyAgd2hpbGUgKGNs b25lKQorICAgIHsKKyAgICAgIG9tcF9jb250ZXh0ICpuZXh0X2Nsb25lID0gY2xvbmUtPm5l eHRfY2xvbmU7CisgICAgICBYREVMRVRFIChjbG9uZSk7CisgICAgICBjbG9uZSA9IG5leHRf Y2xvbmU7CisgICAgfQorCiAgIGRlbGV0ZSBjdHgtPmNiLmRlY2xfbWFwOwogCiAgIGlmIChj dHgtPmZpZWxkX21hcCkKQEAgLTMwOTEsNiArMzExNywyNCBAQCBzY2FuX29tcF90ZWFtcyAo Z29tcF90ZWFtcyAqc3RtdCwgb21wX2NvbnRleHQgKm91dGVyX2N0eCkKICAgICBjdHgtPnJl Y29yZF90eXBlID0gY3R4LT5yZWNlaXZlcl9kZWNsID0gTlVMTDsKIH0KIAorLyogU2NhbiBh biBPcGVuTVAgbWV0YWRpcmVjdGl2ZS4gICovCisKK3N0YXRpYyB2b2lkCitzY2FuX29tcF9t ZXRhZGlyZWN0aXZlIChnb21wX21ldGFkaXJlY3RpdmUgKnN0bXQsIG9tcF9jb250ZXh0ICpv dXRlcl9jdHgpCit7CisgIGdvbXBfbWV0YWRpcmVjdGl2ZV92YXJpYW50ICp2YXJpYW50Cisg ICAgPSBnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfdmFyaWFudHMgKHN0bXQpOworCisgIHdo aWxlICh2YXJpYW50KQorICAgIHsKKyAgICAgIGdpbXBsZV9zZXEgKmRpcmVjdGl2ZV9wID0g Z2ltcGxlX29tcF9ib2R5X3B0ciAodmFyaWFudCk7CisgICAgICBvbXBfY29udGV4dCAqY3R4 ID0gb3V0ZXJfY3R4ID8gY2xvbmVfb21wX2NvbnRleHQgKG91dGVyX2N0eCkgOiBOVUxMOwor CisgICAgICBzY2FuX29tcCAoZGlyZWN0aXZlX3AsIGN0eCk7CisgICAgICB2YXJpYW50ID0g KGdvbXBfbWV0YWRpcmVjdGl2ZV92YXJpYW50ICopIHZhcmlhbnQtPm5leHQ7CisgICAgfQor fQorCiAvKiBDaGVjayBuZXN0aW5nIHJlc3RyaWN0aW9ucy4gICovCiBzdGF0aWMgYm9vbAog Y2hlY2tfb21wX25lc3RpbmdfcmVzdHJpY3Rpb25zIChnaW1wbGUgKnN0bXQsIG9tcF9jb250 ZXh0ICpjdHgpCkBAIC00MjM1LDYgKzQyNzksMTAgQEAgc2Nhbl9vbXBfMV9zdG10IChnaW1w bGVfc3RtdF9pdGVyYXRvciAqZ3NpLCBib29sICpoYW5kbGVkX29wc19wLAogCXNjYW5fb21w X3RlYW1zIChhc19hIDxnb21wX3RlYW1zICo+IChzdG10KSwgY3R4KTsKICAgICAgIGJyZWFr OwogCisgICAgY2FzZSBHSU1QTEVfT01QX01FVEFESVJFQ1RJVkU6CisgICAgICBzY2FuX29t cF9tZXRhZGlyZWN0aXZlIChhc19hIDxnb21wX21ldGFkaXJlY3RpdmUgKj4gKHN0bXQpLCBj dHgpOworICAgICAgYnJlYWs7CisKICAgICBjYXNlIEdJTVBMRV9CSU5EOgogICAgICAgewog CXRyZWUgdmFyOwpAQCAtMTA2NTQsNiArMTA3MDIsMjEgQEAgb2FjY19wcml2YXRpemF0aW9u X3NjYW5fZGVjbF9jaGFpbiAob21wX2NvbnRleHQgKmN0eCwgdHJlZSBkZWNscykKICAgICB9 CiB9CiAKK3N0YXRpYyB2b2lkCitsb3dlcl9vbXBfbWV0YWRpcmVjdGl2ZSAoZ2ltcGxlX3N0 bXRfaXRlcmF0b3IgKmdzaV9wLCBvbXBfY29udGV4dCAqY3R4KQoreworICBnaW1wbGUgKnN0 bXQgPSBnc2lfc3RtdCAoKmdzaV9wKTsKKyAgZ29tcF9tZXRhZGlyZWN0aXZlX3ZhcmlhbnQg KnZhcmlhbnQKKyAgICA9IGdpbXBsZV9vbXBfbWV0YWRpcmVjdGl2ZV92YXJpYW50cyAoc3Rt dCk7CisgIHdoaWxlICh2YXJpYW50KQorICAgIHsKKyAgICAgIGdpbXBsZV9zZXEgKmRpcmVj dGl2ZV9wID0gZ2ltcGxlX29tcF9ib2R5X3B0ciAodmFyaWFudCk7CisgICAgICBsb3dlcl9v bXAgKGRpcmVjdGl2ZV9wLCBjdHgpOworCisgICAgICB2YXJpYW50ID0gKGdvbXBfbWV0YWRp cmVjdGl2ZV92YXJpYW50ICopICh2YXJpYW50LT5uZXh0KTsKKyAgICB9Cit9CisKIC8qIENh bGxiYWNrIGZvciB3YWxrX2dpbXBsZV9zZXEuICBGaW5kICNwcmFnbWEgb21wIHNjYW4gc3Rh dGVtZW50LiAgKi8KIAogc3RhdGljIHRyZWUKQEAgLTE0MjMwLDYgKzE0MjkzLDkgQEAgbG93 ZXJfb21wXzEgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2lfcCwgb21wX2NvbnRleHQgKmN0 eCkKICAgICAgIGVsc2UKIAlsb3dlcl9vbXBfdGVhbXMgKGdzaV9wLCBjdHgpOwogICAgICAg YnJlYWs7CisgICAgY2FzZSBHSU1QTEVfT01QX01FVEFESVJFQ1RJVkU6CisgICAgICBsb3dl cl9vbXBfbWV0YWRpcmVjdGl2ZSAoZ3NpX3AsIGN0eCk7CisgICAgICBicmVhazsKICAgICBj YXNlIEdJTVBMRV9DQUxMOgogICAgICAgdHJlZSBmbmRlY2w7CiAgICAgICBjYWxsX3N0bXQg PSBhc19hIDxnY2FsbCAqPiAoc3RtdCk7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS1jZmcuYyBi L2djYy90cmVlLWNmZy5jCmluZGV4IGViYmQ4OTRhZTAzLi43MDY2ZDlmYjQ3MSAxMDA2NDQK LS0tIGEvZ2NjL3RyZWUtY2ZnLmMKKysrIGIvZ2NjL3RyZWUtY2ZnLmMKQEAgLTE2NzAsNiAr MTY3MCwxOCBAQCBjbGVhbnVwX2RlYWRfbGFiZWxzICh2b2lkKQogCSAgfQogCSAgYnJlYWs7 CiAKKwljYXNlIEdJTVBMRV9PTVBfTUVUQURJUkVDVElWRToKKwkgIHsKKwkgICAgZm9yICh1 bnNpZ25lZCBpID0gMDsgaSA8IGdpbXBsZV9udW1fb3BzIChzdG10KTsgaSsrKQorCSAgICAg IHsKKwkJbGFiZWwgPSBnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVfbGFiZWwgKHN0bXQsIGkp OworCQluZXdfbGFiZWwgPSBtYWluX2Jsb2NrX2xhYmVsIChsYWJlbCwgbGFiZWxfZm9yX2Ji KTsKKwkJaWYgKG5ld19sYWJlbCAhPSBsYWJlbCkKKwkJICBnaW1wbGVfb21wX21ldGFkaXJl Y3RpdmVfc2V0X2xhYmVsIChzdG10LCBpLCBuZXdfbGFiZWwpOworCSAgICAgIH0KKwkgIH0K KwkgIGJyZWFrOworCiAJZGVmYXVsdDoKIAkgIGJyZWFrOwogICAgICAgfQpAQCAtNjE0Nyw2 ICs2MTU5LDE4IEBAIGdpbXBsZV9yZWRpcmVjdF9lZGdlX2FuZF9icmFuY2ggKGVkZ2UgZSwg YmFzaWNfYmxvY2sgZGVzdCkKIAkJCQkgICAgICAgICAgIGdpbXBsZV9ibG9ja19sYWJlbCAo ZGVzdCkpOwogICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIEdJTVBMRV9PTVBfTUVUQURJUkVD VElWRToKKyAgICAgIHsKKwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ2ltcGxlX251bV9v cHMgKHN0bXQpOyBpKyspCisJICB7CisJICAgIHRyZWUgbGFiZWwgPSBnaW1wbGVfb21wX21l dGFkaXJlY3RpdmVfbGFiZWwgKHN0bXQsIGkpOworCSAgICBpZiAobGFiZWxfdG9fYmxvY2sg KGNmdW4sIGxhYmVsKSA9PSBlLT5kZXN0KQorCSAgICAgIGdpbXBsZV9vbXBfbWV0YWRpcmVj dGl2ZV9zZXRfbGFiZWwgKHN0bXQsIGksCisJCQkJCQkgIGdpbXBsZV9ibG9ja19sYWJlbCAo ZGVzdCkpOworCSAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKICAgICBkZWZhdWx0Ogog ICAgICAgLyogT3RoZXJ3aXNlIGl0IG11c3QgYmUgYSBmYWxsdGhydSBlZGdlLCBhbmQgd2Ug ZG9uJ3QgbmVlZCB0bwogCSBkbyBhbnl0aGluZyBiZXNpZGVzIHJlZGlyZWN0aW5nIGl0LiAg Ki8KZGlmZiAtLWdpdCBhL2djYy90cmVlLWlubGluZS5jIGIvZ2NjL3RyZWUtaW5saW5lLmMK aW5kZXggYmM1ZmYwYmIwNTIuLjBmMDAzNWZlZjNiIDEwMDY0NAotLS0gYS9nY2MvdHJlZS1p bmxpbmUuYworKysgYi9nY2MvdHJlZS1pbmxpbmUuYwpAQCAtMTY3NCw2ICsxNjc0LDM1IEBA IHJlbWFwX2dpbXBsZV9zdG10IChnaW1wbGUgKnN0bXQsIGNvcHlfYm9keV9kYXRhICppZCkK IAkJICAgKHMxLCBnaW1wbGVfb21wX21hc2tlZF9jbGF1c2VzIChzdG10KSk7CiAJICBicmVh azsKIAorCWNhc2UgR0lNUExFX09NUF9NRVRBRElSRUNUSVZFOgorCSAgY29weSA9IGdpbXBs ZV9idWlsZF9vbXBfbWV0YWRpcmVjdGl2ZSAoZ2ltcGxlX251bV9vcHMgKHN0bXQpKTsKKwkg IHsKKwkgICAgZ2ltcGxlICpmaXJzdF92YXJpYW50ID0gTlVMTDsKKwkgICAgZ2ltcGxlICoq cHJldl9uZXh0ID0gJmZpcnN0X3ZhcmlhbnQ7CisJICAgIGZvciAoZ2ltcGxlICp2YXJpYW50 ID0gZ2ltcGxlX29tcF9tZXRhZGlyZWN0aXZlX3ZhcmlhbnRzIChzdG10KTsKKwkJIHZhcmlh bnQ7IHZhcmlhbnQgPSB2YXJpYW50LT5uZXh0KQorCSAgICAgIHsKKwkJczEgPSByZW1hcF9n aW1wbGVfc2VxIChnaW1wbGVfb21wX2JvZHkgKHZhcmlhbnQpLCBpZCk7CisJCWdpbXBsZSAq bmV3X3ZhcmlhbnQKKwkJICA9IGdpbXBsZV9idWlsZF9vbXBfbWV0YWRpcmVjdGl2ZV92YXJp YW50IChzMSk7CisKKwkJKnByZXZfbmV4dCA9IG5ld192YXJpYW50OworCQlwcmV2X25leHQg PSAmbmV3X3ZhcmlhbnQtPm5leHQ7CisJICAgICAgfQorCSAgICBnaW1wbGVfb21wX21ldGFk aXJlY3RpdmVfc2V0X3ZhcmlhbnRzIChjb3B5LCBmaXJzdF92YXJpYW50KTsKKwkgIH0KKwor CSAgbWVtc2V0ICgmd2ksIDAsIHNpemVvZiAod2kpKTsKKwkgIHdpLmluZm8gPSBpZDsKKwkg IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBnaW1wbGVfbnVtX29wcyAoc3RtdCk7IGkrKykK KwkgICAgeworCSAgICAgIHRyZWUgbGFiZWwgPSBnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVf bGFiZWwgKHN0bXQsIGkpOworCSAgICAgIHdhbGtfdHJlZSAoJmxhYmVsLCByZW1hcF9naW1w bGVfb3BfciwgJndpLCBOVUxMKTsKKwkgICAgICBnaW1wbGVfb21wX21ldGFkaXJlY3RpdmVf c2V0X2xhYmVsIChjb3B5LCBpLCBsYWJlbCk7CisJICAgICAgZ2ltcGxlX3NldF9vcCAoY29w eSwgaSwgZ2ltcGxlX29wIChzdG10LCBpKSk7CisJICAgIH0KKwkgIGJyZWFrOworCiAJY2Fz ZSBHSU1QTEVfT01QX1NDT1BFOgogCSAgczEgPSByZW1hcF9naW1wbGVfc2VxIChnaW1wbGVf b21wX2JvZHkgKHN0bXQpLCBpZCk7CiAJICBjb3B5ID0gZ2ltcGxlX2J1aWxkX29tcF9zY29w ZQpAQCAtNDU5MCw2ICs0NjE5LDEzIEBAIGVzdGltYXRlX251bV9pbnNucyAoZ2ltcGxlICpz dG10LCBlbmlfd2VpZ2h0cyAqd2VpZ2h0cykKICAgICAgIHJldHVybiAod2VpZ2h0cy0+b21w X2Nvc3QKICAgICAgICAgICAgICAgKyBlc3RpbWF0ZV9udW1faW5zbnNfc2VxIChnaW1wbGVf b21wX2JvZHkgKHN0bXQpLCB3ZWlnaHRzKSk7CiAKKyAgICBjYXNlIEdJTVBMRV9PTVBfTUVU QURJUkVDVElWRToKKyAgICAgIC8qIFRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb24gd2lsbCBkaXNh cHBlYXIgZXZlbnR1YWxseSwgc28gbWV0YWRpcmVjdGl2ZQorCSBzdGF0ZW1lbnRzIGhhdmUg emVybyBhZGRpdGlvbmFsIGNvc3QgKGlmIG9ubHkgc3RhdGljIHNlbGVjdG9ycworCSBhcmUg dXNlZCkuICAqLworICAgICAgLyogVE9ETzogRXN0aW1hdGUgdGhlIGNvc3Qgb2YgZXZhbHVh dGluZyBkeW5hbWljIHNlbGVjdG9ycyAgKi8KKyAgICAgIHJldHVybiAwOworCiAgICAgY2Fz ZSBHSU1QTEVfVFJBTlNBQ1RJT046CiAgICAgICByZXR1cm4gKHdlaWdodHMtPnRtX2Nvc3QK IAkgICAgICArIGVzdGltYXRlX251bV9pbnNuc19zZXEgKGdpbXBsZV90cmFuc2FjdGlvbl9i b2R5ICgKZGlmZiAtLWdpdCBhL2djYy90cmVlLXByZXR0eS1wcmludC5jIGIvZ2NjL3RyZWUt cHJldHR5LXByaW50LmMKaW5kZXggYTgxYmE0MDFlZjkuLmViNDVmN2Q2YmRmIDEwMDY0NAot LS0gYS9nY2MvdHJlZS1wcmV0dHktcHJpbnQuYworKysgYi9nY2MvdHJlZS1wcmV0dHktcHJp bnQuYwpAQCAtMzc1MSw2ICszNzUxLDQwIEBAIGR1bXBfZ2VuZXJpY19ub2RlIChwcmV0dHlf cHJpbnRlciAqcHAsIHRyZWUgbm9kZSwgaW50IHNwYywgZHVtcF9mbGFnc190IGZsYWdzLAog ICAgICAgaXNfZXhwciA9IGZhbHNlOwogICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIE9NUF9N RVRBRElSRUNUSVZFOgorICAgICAgeworCXBwX3N0cmluZyAocHAsICIjcHJhZ21hIG9tcCBt ZXRhZGlyZWN0aXZlIik7CisJbmV3bGluZV9hbmRfaW5kZW50IChwcCwgc3BjICsgMik7CisJ cHBfbGVmdF9icmFjZSAocHApOworCisJdHJlZSBjbGF1c2UgPSBPTVBfTUVUQURJUkVDVElW RV9DTEFVU0VTIChub2RlKTsKKwl3aGlsZSAoY2xhdXNlICE9IE5VTExfVFJFRSkKKwkgIHsK KwkgICAgbmV3bGluZV9hbmRfaW5kZW50IChwcCwgc3BjICsgNCk7CisJICAgIGlmIChUUkVF X1BVUlBPU0UgKGNsYXVzZSkgPT0gTlVMTF9UUkVFKQorCSAgICAgIHBwX3N0cmluZyAocHAs ICJkZWZhdWx0OiIpOworCSAgICBlbHNlCisJICAgICAgeworCQlwcF9zdHJpbmcgKHBwLCAi d2hlbiAoIik7CisJCWR1bXBfZ2VuZXJpY19ub2RlIChwcCwgVFJFRV9QVVJQT1NFIChjbGF1 c2UpLCBzcGMgKyA0LCBmbGFncywKKwkJCQkgICBmYWxzZSk7CisJCXBwX3N0cmluZyAocHAs ICIpOiIpOworCSAgICAgIH0KKwkgICAgbmV3bGluZV9hbmRfaW5kZW50IChwcCwgc3BjICsg Nik7CisKKwkgICAgdHJlZSB2YXJpYW50ID0gVFJFRV9WQUxVRSAoY2xhdXNlKTsKKwkgICAg ZHVtcF9nZW5lcmljX25vZGUgKHBwLCBUUkVFX1BVUlBPU0UgKHZhcmlhbnQpLCBzcGMgKyA2 LCBmbGFncywKKwkJCSAgICAgICBmYWxzZSk7CisJICAgIG5ld2xpbmVfYW5kX2luZGVudCAo cHAsIHNwYyArIDYpOworCSAgICBkdW1wX2dlbmVyaWNfbm9kZSAocHAsIFRSRUVfVkFMVUUg KHZhcmlhbnQpLCBzcGMgKyA2LCBmbGFncywKKwkJCSAgICAgICBmYWxzZSk7CisJICAgIGNs YXVzZSA9IFRSRUVfQ0hBSU4gKGNsYXVzZSk7CisJICB9CisJbmV3bGluZV9hbmRfaW5kZW50 IChwcCwgc3BjICsgMik7CisJcHBfcmlnaHRfYnJhY2UgKHBwKTsKKyAgICAgIH0KKyAgICAg IGJyZWFrOworCiAgICAgY2FzZSBUUkFOU0FDVElPTl9FWFBSOgogICAgICAgaWYgKFRSQU5T QUNUSU9OX0VYUFJfT1VURVIgKG5vZGUpKQogCXBwX3N0cmluZyAocHAsICJfX3RyYW5zYWN0 aW9uX2F0b21pYyBbW291dGVyXV0iKTsKZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1vcGVy YW5kcy5jIGIvZ2NjL3RyZWUtc3NhLW9wZXJhbmRzLmMKaW5kZXggZWJmN2VlYTNiMDQuLmQx N2U0MTQ0ZGY3IDEwMDY0NAotLS0gYS9nY2MvdHJlZS1zc2Etb3BlcmFuZHMuYworKysgYi9n Y2MvdHJlZS1zc2Etb3BlcmFuZHMuYwpAQCAtOTczLDYgKzk3MywzMyBAQCBvcGVyYW5kc19z Y2FubmVyOjpwYXJzZV9zc2Ffb3BlcmFuZHMgKCkKICAgICAgIGFwcGVuZF92dXNlIChnaW1w bGVfdm9wIChmbikpOwogICAgICAgZ290byBkb19kZWZhdWx0OwogCisgICAgY2FzZSBHSU1Q TEVfT01QX01FVEFESVJFQ1RJVkU6CisgICAgICBuID0gZ2ltcGxlX251bV9vcHMgKHN0bXQp OworICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBuOyBpKyspCisJeworCSAgZm9yICh0cmVl IHNlbGVjdG9yID0gZ2ltcGxlX29wIChzdG10LCBpKTsKKwkgICAgICAgc2VsZWN0b3IgIT0g TlVMTDsKKwkgICAgICAgc2VsZWN0b3IgPSBUUkVFX0NIQUlOIChzZWxlY3RvcikpCisJICAg IHsKKwkgICAgICBpZiAoVFJFRV9QVVJQT1NFIChzZWxlY3RvcikgPT0gZ2V0X2lkZW50aWZp ZXIgKCJ1c2VyIikpCisJCXsKKwkJICBmb3IgKHRyZWUgcHJvcGVydHkgPSBUUkVFX1ZBTFVF IChzZWxlY3Rvcik7CisJCSAgICAgICBwcm9wZXJ0eSAhPSBOVUxMOworCQkgICAgICAgcHJv cGVydHkgPSBUUkVFX0NIQUlOIChwcm9wZXJ0eSkpCisJCSAgICBpZiAoVFJFRV9QVVJQT1NF IChwcm9wZXJ0eSkKKwkJCT09IGdldF9pZGVudGlmaWVyICgiY29uZGl0aW9uIikpCisJCSAg ICAgIHsKKwkJCWZvciAodHJlZSBjb25kaXRpb24gPSBUUkVFX1ZBTFVFIChwcm9wZXJ0eSk7 CisJCQkgICAgIGNvbmRpdGlvbiAhPSBOVUxMOworCQkJICAgICBjb25kaXRpb24gPSBUUkVF X0NIQUlOIChjb25kaXRpb24pKQorCQkJICBnZXRfZXhwcl9vcGVyYW5kcyAoJlRSRUVfVkFM VUUgKGNvbmRpdGlvbiksCisJCQkJCSAgICAgb3BmX3VzZSk7CisJCSAgICAgIH0KKwkJfQor CSAgICB9CisJfQorICAgICAgYnJlYWs7CisKICAgICBjYXNlIEdJTVBMRV9DQUxMOgogICAg ICAgLyogQWRkIGNhbGwtY2xvYmJlcmVkIG9wZXJhbmRzLCBpZiBuZWVkZWQuICAqLwogICAg ICAgbWF5YmVfYWRkX2NhbGxfdm9wcyAoYXNfYSA8Z2NhbGwgKj4gKHN0bXQpKTsKLS0gCjIu MjUuMQoK --------------kqpTMpB1k72SsaprJ4FX5Y46--