From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mo4-p00-ob.smtp.rzone.de (mo4-p00-ob.smtp.rzone.de [81.169.146.163]) by sourceware.org (Postfix) with ESMTPS id 37BFC3858404 for ; Wed, 7 Jun 2023 08:41:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 37BFC3858404 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gjlay.de Authentication-Results: sourceware.org; spf=none smtp.mailfrom=gjlay.de ARC-Seal: i=1; a=rsa-sha256; t=1686127261; cv=none; d=strato.com; s=strato-dkim-0002; b=D3MOi355Nav6a9LoGUb1rbk/plxztZg+bh9tC99AwbVN1r5ufwoJXNm+2JUfvl3TMT Ze96dtDYFkzz9W3gxwigjhG4Vlxyb0y6kPkgRNYyrfDmW8igYwwZX3jAz5RGcBStI2iX hDf13HGR7bqznrehpvXCtfmc8qaEfS0QKXRh9VleWd0J3Pm5di/lYHRcRbkdO5Pii5Za FdD4WDoA5BgWDTmwG7HsW+5xCbDOXv7vGehQ0a9bjkdtOpw7xu4VuEZBt8hQzfbBQpUH hK8M8BGcDuLM72Bd6IKOmRJD1xOHgKS287rosjLezFIVENN4JpkBDH4FWqkbFzqZj+1i 4OQg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; t=1686127261; s=strato-dkim-0002; d=strato.com; h=Cc:To:Subject:From:Date:Message-ID:Cc:Date:From:Subject:Sender; bh=eUm/Wsw/8KKzojjmzkzRFus+SqraPtHVsbjfivEbjrM=; b=lUa2huI375cf08u/46URTatcVo/peeIl4a79S5c1eVbh9ASqLnFaDnRiZaRj4lESgb CeQ0lj3zAYal2RBb+EKjxv4A80y0DrIqV7FRGU87f2NQ/wAlFU7NZXzd9AUk6eQXOwLs fG23TUqHUob88xHMzw5kbqPO69i5Tyt13Ss8fBiA1Fcv1njW6Db/lr+nyS5e98jaQK1V GjxdlOquniQDHDq1dLMDkTi9IFwuv45J7nfejy/EjOavmW4GOnvd+2U10F9Uq3rMN9qt 6teP/m1RB2jknPO2tTNUaFmy/l/6zn6HKyV1gKPEMuZC/wQaRTIoaj+SFPGaYiDElZfI uD2Q== ARC-Authentication-Results: i=1; strato.com; arc=none; dkim=none X-RZG-CLASS-ID: mo00 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1686127261; s=strato-dkim-0002; d=gjlay.de; h=Cc:To:Subject:From:Date:Message-ID:Cc:Date:From:Subject:Sender; bh=eUm/Wsw/8KKzojjmzkzRFus+SqraPtHVsbjfivEbjrM=; b=lCMAbVXEsa0+SJiYflYa5Gwwx/h56wMkUlzU8MgSJshIutiMlskxUuKQfKEsnkaxuW NBT22sEObP6T+966aQdeSV2+mqMjt0WJD1lcPUxKd7ZK0NJV2kEd8+3XZg5kW6FM8FTW S85QBQzdGzD//80zpqFDBff1lutMUmK0JdRmBTtF55kwPsJCLoaoZ3lGOhqnDNrjGZUj 7GvJ4e9iGCKAIVMWlkRPaIM4Px7GOQ6CwbGEn78HaM2lGafOgNMajf8Ln4ZclNTC3Y2Q jHBf2V/SdcDLaNOyIIJWqNmS886hlle1rsbbA9O/2uI2HgVtlx8OnrYPl0C5BuhCRB4r Ggag== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; t=1686127261; s=strato-dkim-0003; d=gjlay.de; h=Cc:To:Subject:From:Date:Message-ID:Cc:Date:From:Subject:Sender; bh=eUm/Wsw/8KKzojjmzkzRFus+SqraPtHVsbjfivEbjrM=; b=1rrOxgE8M/X0uFg/U+ekKWDFBKQuYrFYuh16jb058UAdPyxpCATyYNsdBRlCDJZ2iP x482ojXSIgerQFFPbUDg== X-RZG-AUTH: ":LXoWVUeid/7A29J/hMvvT3koxZnKT7Qq0xotTetVnKkRmM69o2y+LiO3MutATA==" Received: from [192.168.2.102] by smtp.strato.de (RZmta 49.5.3 DYNA|AUTH) with ESMTPSA id 638aecz578f0P9V (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Wed, 7 Jun 2023 10:41:00 +0200 (CEST) Content-Type: multipart/mixed; boundary="------------fI4GeG3MkLE0zw55JyQ3w9z0" Message-ID: <5829e492-0f43-138a-6e50-e3115a4abbf1@gjlay.de> Date: Wed, 7 Jun 2023 10:41:00 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Content-Language: en-US From: Georg-Johann Lay Subject: [patch,avr]: Improve bit-extractions as of PR109907. To: gcc-patches@gcc.gnu.org Cc: Jeff Law , Denis Chertykov Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-8.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,KAM_STOCKGEN,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SCC_10_SHORT_WORD_LINES,SCC_5_SHORT_WORD_LINES,SPF_HELO_PASS,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------fI4GeG3MkLE0zw55JyQ3w9z0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit This patch improves bit-extractions on AVR. Andrew added some patches so that more bit extractions are recognized in the middle-end and rtl optimizers. The patch adds pattern for "extzv" and replaces the deprecated "extzv". There are still situations where expensive shifts are passed down to the backend though , and in one situation the backend uses better sequences for right-shift with an offset of MSB: Instead of ROL/CLR/ROL sequence that needs constraint "0" for operand $1, BST/CLR/BLD just requires "r" for $1 thus less register pressure. Moreover, no scratch is required. Asm out for (inverted) bit-extraction was out-sourced to a C function which is more convenient. Ok for master? Johann -- target/19907: Overhaul bit extractions. o Logical right shift that shifts the MSB to position 0 can be performed in such a way that the input operand constraint can be relaxed from "0" to "r". This results in less register pressure. Moreover, no scratch register is required in that case. o The deprecated "extzv" pattern is replaced by "extzv" that allows inputs of scalar integer modes of different sizes (1 up to 4 bytes). o Existing patterns are adjusted to the more generic "extzv" pattern. Some patterns are added as the middle-end has been reworked to spot more bit-extraction opportunities. o A C function is used to print the asm for bit extractions, which is more convenient for complex output logic. gcc/ PR target/109907 * config/avr/avr.md (adjust_len) [extr, extr_not]: New elements. (MSB, SIZE): New mode attributes. (any_shift): New code iterator. (*lshr3_split, *lshr3, lshr3) (*lshr3_const_split): Add constraint alternative for the case of shift-offset = MSB. Ditch "length" attribute. (extzv, *extzv..subreg, *extzv.xor) (*extzv.ge, *neg.ashiftrt.msb, *extzv.io.lsr7): New. * config/avr/constraints.md (C15, C23, C31, Yil): New * config/avr/predicates.md (reg_or_low_io_operand) (const7_operand, reg_or_low_io_operand) (const15_operand, const_0_to_15_operand) (const23_operand, const_0_to_23_operand) (const31_operand, const_0_to_31_operand): New. * config/avr/avr-protos.h (avr_out_extr, avr_out_extr_not): New. * config/avr/avr.cc (avr_out_extr, avr_out_extr_not): New funcs. (lshrqi3_out, lshrhi3_out, lshrpsi3_out, lshrsi3_out): Adjust MSB case to new insn constraint "r" for operands[1]. (avr_adjust_insn_length) [ADJUST_LEN_EXTR_NOT, ADJUST_LEN_EXTR]: Handle these cases. (avr_rtx_costs_1): Adjust cost for a new pattern. gcc/testsuite/ * gcc.target/avr/pr109907.c: New test. * gcc.target/avr/torture/pr109907-1.c: New test. * gcc.target/avr/torture/pr109907-2.c: New test. --------------fI4GeG3MkLE0zw55JyQ3w9z0 Content-Type: text/x-patch; charset=UTF-8; name="pr109907-v2.diff" Content-Disposition: attachment; filename="pr109907-v2.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXZyL2F2ci1wcm90b3MuaCBiL2djYy9jb25maWcv YXZyL2F2ci1wcm90b3MuaAppbmRleCBlYzk2ZmQ0NTg2NS4uMjI5ODU0YTE5ZGIgMTAwNjQ0 Ci0tLSBhL2djYy9jb25maWcvYXZyL2F2ci1wcm90b3MuaAorKysgYi9nY2MvY29uZmlnL2F2 ci9hdnItcHJvdG9zLmgKQEAgLTU4LDYgKzU4LDggQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKnJl dF9jb25kX2JyYW5jaCAocnR4IHgsIGludCBsZW4sIGludCByZXZlcnNlKTsKIGV4dGVybiBj b25zdCBjaGFyICphdnJfb3V0X21vdnBzaSAocnR4X2luc24gKiwgcnR4KiwgaW50Kik7CiBl eHRlcm4gY29uc3QgY2hhciAqYXZyX291dF9zaWduX2V4dGVuZCAocnR4X2luc24gKiwgcnR4 KiwgaW50Kik7CiBleHRlcm4gY29uc3QgY2hhciAqYXZyX291dF9pbnNlcnRfbm90Yml0IChy dHhfaW5zbiAqLCBydHgqLCBydHgsIGludCopOworZXh0ZXJuIGNvbnN0IGNoYXIgKmF2cl9v dXRfZXh0ciAocnR4X2luc24gKiwgcnR4KiwgaW50Kik7CitleHRlcm4gY29uc3QgY2hhciAq YXZyX291dF9leHRyX25vdCAocnR4X2luc24gKiwgcnR4KiwgaW50Kik7CiAKIGV4dGVybiBj b25zdCBjaGFyICphc2hscWkzX291dCAocnR4X2luc24gKmluc24sIHJ0eCBvcGVyYW5kc1td LCBpbnQgKmxlbik7CiBleHRlcm4gY29uc3QgY2hhciAqYXNobGhpM19vdXQgKHJ0eF9pbnNu ICppbnNuLCBydHggb3BlcmFuZHNbXSwgaW50ICpsZW4pOwpkaWZmIC0tZ2l0IGEvZ2NjL2Nv bmZpZy9hdnIvYXZyLmNjIGIvZ2NjL2NvbmZpZy9hdnIvYXZyLmNjCmluZGV4IGE5MGNhZGUz NWM3Li5mNjlkNzliZjE0ZSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hdnIvYXZyLmNjCisr KyBiL2djYy9jb25maWcvYXZyL2F2ci5jYwpAQCAtNzE0Miw5ICs3MTQyLDkgQEAgbHNocnFp M19vdXQgKHJ0eF9pbnNuICppbnNuLCBydHggb3BlcmFuZHNbXSwgaW50ICpsZW4pCiAKIAlj YXNlIDc6CiAJICAqbGVuID0gMzsKLQkgIHJldHVybiAoInJvbCAlMCIgQ1JfVEFCCi0JCSAg ImNsciAlMCIgQ1JfVEFCCi0JCSAgInJvbCAlMCIpOworCSAgcmV0dXJuICgiYnN0ICUxLDci IENSX1RBQgorCQkgICJjbHIgJTAiICAgQ1JfVEFCCisJCSAgImJsZCAlMCwwIik7CiAJfQog ICAgIH0KICAgZWxzZSBpZiAoQ09OU1RBTlRfUCAob3BlcmFuZHNbMl0pKQpAQCAtNzQwMSwx MCArNzQwMSwxMCBAQCBsc2hyaGkzX291dCAocnR4X2luc24gKmluc24sIHJ0eCBvcGVyYW5k c1tdLCBpbnQgKmxlbikKIAogCWNhc2UgMTU6CiAJICAqbGVuID0gNDsKLQkgIHJldHVybiAo ImNsciAlQTAiIENSX1RBQgotCQkgICJsc2wgJUIwIiBDUl9UQUIKLQkJICAicm9sICVBMCIg Q1JfVEFCCi0JCSAgImNsciAlQjAiKTsKKwkgIHJldHVybiAoImJzdCAlQjEsNyIgQ1JfVEFC CisJCSAgImNsciAlQTAiICAgQ1JfVEFCCisJCSAgImNsciAlQjAiICAgQ1JfVEFCCisJCSAg ImJsZCAlQTAsMCIpOwogCX0KICAgICAgIGxlbiA9IHQ7CiAgICAgfQpAQCAtNzQ1MywxMSAr NzQ1MywxMSBAQCBhdnJfb3V0X2xzaHJwc2kzIChydHhfaW5zbiAqaW5zbiwgcnR4ICpvcCwg aW50ICpwbGVuKQogICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwogCiAgICAgICAgIGNh c2UgMjM6Ci0gICAgICAgICAgcmV0dXJuIGF2cl9hc21fbGVuICgiY2xyICVBMCIgICAgQ1Jf VEFCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2JyYyAlQzAsNyIgQ1JfVEFC Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jICVBMCIgICAgQ1JfVEFCCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xyICVCMCIgICAgQ1JfVEFCCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xyICVDMCIsIG9wLCBwbGVuLCA1KTsKKyAg ICAgICAgICByZXR1cm4gYXZyX2FzbV9sZW4gKCJic3QgJUMxLDciIENSX1RBQgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgImNsciAlQTAiICAgQ1JfVEFCCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiY2xyICVCMCIgICBDUl9UQUIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJjbHIgJUMwIiAgIENSX1RBQgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgImJsZCAlQTAsMCIsIG9wLCBwbGVuLCA1KTsKICAgICAgICAgfSAvKiBz d2l0Y2ggKi8KICAgICB9CiAKQEAgLTc1NDAsMTMgKzc1NDAsMTkgQEAgbHNocnNpM19vdXQg KHJ0eF9pbnNuICppbnNuLCBydHggb3BlcmFuZHNbXSwgaW50ICpsZW4pCiAJCQkgICAgImNs ciAlRDAiKTsKIAogCWNhc2UgMzE6CisJICBpZiAoQVZSX0hBVkVfTU9WVykKKwkgICAgcmV0 dXJuICpsZW4gPSA1LCAoImJzdCAlRDEsNyIgICAgQ1JfVEFCCisJCQkgICAgICAiY2xyICVB MCIgICAgICBDUl9UQUIKKwkJCSAgICAgICJjbHIgJUIwIiAgICAgIENSX1RBQgorCQkJICAg ICAgIm1vdncgJUMwLCVBMCIgQ1JfVEFCCisJCQkgICAgICAiYmxkICVBMCwwIik7CiAJICAq bGVuID0gNjsKLQkgIHJldHVybiAoImNsciAlQTAiICAgIENSX1RBQgotCQkgICJzYnJjICVE MCw3IiBDUl9UQUIKLQkJICAiaW5jICVBMCIgICAgQ1JfVEFCCi0JCSAgImNsciAlQjAiICAg IENSX1RBQgotCQkgICJjbHIgJUMwIiAgICBDUl9UQUIKLQkJICAiY2xyICVEMCIpOworCSAg cmV0dXJuICgiYnN0ICVEMSw3IiBDUl9UQUIKKwkJICAiY2xyICVBMCIgICBDUl9UQUIKKwkJ ICAiY2xyICVCMCIgICBDUl9UQUIKKwkJICAiY2xyICVDMCIgICBDUl9UQUIKKwkJICAiY2xy ICVEMCIgICBDUl9UQUIKKwkJICAiYmxkICVBMCwwIik7CiAJfQogICAgICAgbGVuID0gdDsK ICAgICB9CkBAIC04NDg1LDYgKzg0OTEsMTM1IEBAIGF2cl9vdXRfaW5zZXJ0X25vdGJpdCAo cnR4X2luc24gKmluc24sIHJ0eCBvcGVyYW5kc1tdLCBydHggeGJpdG5vLCBpbnQgKnBsZW4p CiB9CiAKIAorLyogT3V0cHV0IGluc3RydWN0aW9ucyB0byBleHRyYWN0IGEgYml0IHRvIDgt Yml0IHJlZ2lzdGVyIFhPUFswXS4KKyAgIFRoZSBpbnB1dCBYT1BbMV0gaXMgYSByZWdpc3Rl ciBvciBhbiA4LWJpdCBNRU0gaW4gdGhlIGxvd2VyIEkvTyByYW5nZS4KKyAgIFhPUFsyXSBp cyB0aGUgY29uc3RfaW50IGJpdCBwb3NpdGlvbi4gIFJldHVybiAiIi4KKworICAgUExFTiAh PSAwOiBTZXQgKlBMRU4gdG8gdGhlIGNvZGUgbGVuZ3RoIGluIHdvcmRzLiAgRG9uJ3Qgb3V0 cHV0IGFueXRoaW5nLgorICAgUExFTiA9PSAwOiBPdXRwdXQgaW5zdHJ1Y3Rpb25zLiAgKi8K KworY29uc3QgY2hhcioKK2F2cl9vdXRfZXh0ciAocnR4X2luc24gKmluc24sIHJ0eCB4b3Bb XSwgaW50ICpwbGVuKQoreworICBydHggZGVzdCA9IHhvcFswXTsKKyAgcnR4IHNyYyA9IHhv cFsxXTsKKyAgaW50IGJpdCA9IElOVFZBTCAoeG9wWzJdKTsKKworICBpZiAoR0VUX01PREUg KHNyYykgIT0gUUltb2RlKQorICAgIHsKKyAgICAgIHNyYyA9IHhvcFsxXSA9IHNpbXBsaWZ5 X2dlbl9zdWJyZWcgKFFJbW9kZSwgc3JjLCBHRVRfTU9ERSAoc3JjKSwgYml0IC8gOCk7Cisg ICAgICBiaXQgJT0gODsKKyAgICAgIHhvcFsyXSA9IEdFTl9JTlQgKGJpdCk7CisgICAgfQor CisgIGlmIChNRU1fUCAoc3JjKSkKKyAgICB7CisgICAgICB4b3BbMV0gPSBYRVhQIChzcmMs IDApOyAvLyBhZGRyZXNzCisgICAgICBnY2NfYXNzZXJ0IChsb3dfaW9fYWRkcmVzc19vcGVy YW5kICh4b3BbMV0sIFBtb2RlKSk7CisKKyAgICAgIHJldHVybiBhdnJfYXNtX2xlbiAoImNs ciAlMCIgICAgICBDUl9UQUIKKwkJCSAgInNiaWMgJWkxLCUyIiBDUl9UQUIKKwkJCSAgImlu YyAlMCIsIHhvcCwgcGxlbiwgLTMpOworICAgIH0KKworICBnY2NfYXNzZXJ0IChSRUdfUCAo c3JjKSk7CisKKyAgYm9vbCBsZF9kZXN0X3AgPSB0ZXN0X2hhcmRfcmVnX2NsYXNzIChMRF9S RUdTLCBkZXN0KTsKKyAgYm9vbCBsZF9zcmNfcCA9IHRlc3RfaGFyZF9yZWdfY2xhc3MgKExE X1JFR1MsIHNyYyk7CisKKyAgaWYgKGxkX2Rlc3RfcAorICAgICAgJiYgUkVHTk8gKHNyYykg PT0gUkVHTk8gKGRlc3QpKQorICAgIHsKKyAgICAgIGlmIChiaXQgPT0gMCkKKwlyZXR1cm4g YXZyX2FzbV9sZW4gKCJhbmRpICUwLDEiLCB4b3AsIHBsZW4sIC0xKTsKKyAgICAgIGlmIChi aXQgPT0gMSkKKwlyZXR1cm4gYXZyX2FzbV9sZW4gKCJsc3IgJTAiIENSX1RBQgorCQkJICAg ICJhbmRpICUwLDEiLCB4b3AsIHBsZW4sIC0yKTsKKyAgICAgIGlmIChiaXQgPT0gNCkKKwly ZXR1cm4gYXZyX2FzbV9sZW4gKCJzd2FwICUwIiBDUl9UQUIKKwkJCSAgICAiYW5kaSAlMCwx IiwgeG9wLCBwbGVuLCAtMik7CisgICAgfQorCisgIGlmIChiaXQgPT0gMAorICAgICAgJiYg UkVHTk8gKHNyYykgIT0gUkVHTk8gKGRlc3QpKQorICB7CisgICAgaWYgKGxkX2Rlc3RfcCkK KyAgICAgIHJldHVybiBhdnJfYXNtX2xlbiAoIm1vdiAlMCwlMSIgQ1JfVEFCCisJCQkgICJh bmRpICUwLDEiLCB4b3AsIHBsZW4sIC0yKTsKKyAgICBpZiAobGRfc3JjX3AKKwkmJiByZWdf dW51c2VkX2FmdGVyIChpbnNuLCBzcmMpKQorICAgICAgcmV0dXJuIGF2cl9hc21fbGVuICgi YW5kaSAlMSwxIiBDUl9UQUIKKwkJCSAgIm1vdiAlMCwlMSIsIHhvcCwgcGxlbiwgLTIpOwor ICB9CisKKyAgcmV0dXJuIGF2cl9hc21fbGVuICgiYnN0ICUxLCUyIiBDUl9UQUIKKwkJICAg ICAgImNsciAlMCIgICAgQ1JfVEFCCisJCSAgICAgICJibGQgJTAsMCIsIHhvcCwgcGxlbiwg LTMpOworfQorCisKKy8qIE91dHB1dCBpbnN0cnVjdGlvbnMgdG8gZXh0cmFjdCBhIG5lZ2F0 ZWQgYml0IHRvIDgtYml0IHJlZ2lzdGVyIFhPUFswXS4KKyAgIFRoZSBpbnB1dCBYT1BbMV0g aXMgYW4gOC1iaXQgcmVnaXN0ZXIgb3IgTUVNIGluIHRoZSBsb3dlciBJL08gcmFuZ2UuCisg ICBYT1BbMl0gaXMgdGhlIGNvbnN0X2ludCBiaXQgcG9zaXRpb24uICBSZXR1cm4gIiIuCisK KyAgIFBMRU4gIT0gMDogU2V0ICpQTEVOIHRvIHRoZSBjb2RlIGxlbmd0aCBpbiB3b3Jkcy4g IERvbid0IG91dHB1dCBhbnl0aGluZy4KKyAgIFBMRU4gPT0gMDogT3V0cHV0IGluc3RydWN0 aW9ucy4gICovCisKK2NvbnN0IGNoYXIqCithdnJfb3V0X2V4dHJfbm90IChydHhfaW5zbiog LyogaW5zbiAqLywgcnR4IHhvcFtdLCBpbnQgKnBsZW4pCit7CisgIHJ0eCBkZXN0ID0geG9w WzBdOworICBydHggc3JjID0geG9wWzFdOworICBpbnQgYml0ID0gSU5UVkFMICh4b3BbMl0p OworCisgIGlmIChNRU1fUCAoc3JjKSkKKyAgICB7CisgICAgICB4b3BbMV0gPSBYRVhQIChz cmMsIDApOyAvLyBhZGRyZXNzCisgICAgICBnY2NfYXNzZXJ0IChsb3dfaW9fYWRkcmVzc19v cGVyYW5kICh4b3BbMV0sIFBtb2RlKSk7CisKKyAgICAgIHJldHVybiBhdnJfYXNtX2xlbiAo ImNsciAlMCIgICAgICBDUl9UQUIKKwkJCSAgInNiaXMgJWkxLCUyIiBDUl9UQUIKKwkJCSAg ImluYyAlMCIsIHhvcCwgcGxlbiwgLTMpOworICAgIH0KKworICBnY2NfYXNzZXJ0IChSRUdf UCAoc3JjKSk7CisKKyAgYm9vbCBsZF9zcmNfcCA9IHRlc3RfaGFyZF9yZWdfY2xhc3MgKExE X1JFR1MsIHNyYyk7CisKKyAgaWYgKGxkX3NyY19wCisgICAgICAmJiBSRUdOTyAoc3JjKSA9 PSBSRUdOTyAoZGVzdCkpCisgICAgeworICAgICAgaWYgKGJpdCA9PSAwKQorCXJldHVybiBh dnJfYXNtX2xlbiAoImluYyAlMCIgQ1JfVEFCCisJCQkgICAgImFuZGkgJTAsMSIsIHhvcCwg cGxlbiwgLTIpOworICAgICAgaWYgKGJpdCA9PSAxKQorCXJldHVybiBhdnJfYXNtX2xlbiAo ImxzciAlMCIgQ1JfVEFCCisJCQkgICAgImluYyAlMCIgQ1JfVEFCCisJCQkgICAgImFuZGkg JTAsMSIsIHhvcCwgcGxlbiwgLTMpOworICAgICAgaWYgKGJpdCA9PSA0KQorCXJldHVybiBh dnJfYXNtX2xlbiAoInN3YXAgJTAiIENSX1RBQgorCQkJICAgICJpbmMgJTAiICBDUl9UQUIK KwkJCSAgICAiYW5kaSAlMCwxIiwgeG9wLCBwbGVuLCAtMyk7CisgICAgfQorCisgIGlmIChi aXQgPT0gNworICAgICAgJiYgbGRfc3JjX3ApCisgICAgcmV0dXJuIGF2cl9hc21fbGVuICgi Y3BpICUxLDB4ODAiIENSX1RBQgorCQkJInNiYyAlMCwlMCIgICBDUl9UQUIKKwkJCSJuZWcg JTAiLCB4b3AsIHBsZW4sIC0zKTsKKworICBpZiAoUkVHTk8gKHNyYykgIT0gUkVHTk8gKGRl c3QpKQorICAgIHJldHVybiBhdnJfYXNtX2xlbiAoImNsciAlMCIgICAgIENSX1RBQgorCQkJ InNicnMgJTEsJTIiIENSX1RBQgorCQkJImluYyAlMCIsIHhvcCwgcGxlbiwgLTMpOworCisg IHJldHVybiBhdnJfYXNtX2xlbiAoImNsciBfX3RtcF9yZWdfXyIgQ1JfVEFCCisJCSAgICAg ICJzYnJzICUxLCUyIiAgICAgIENSX1RBQgorCQkgICAgICAiaW5jIF9fdG1wX3JlZ19fIiBD Ul9UQUIKKwkJICAgICAgIm1vdiAlMCxfX3RtcF9yZWdfXyIsIHhvcCwgcGxlbiwgLTQpOwor fQorCisKIC8qIE91dHB1dHMgaW5zdHJ1Y3Rpb25zIG5lZWRlZCBmb3IgZml4ZWQgcG9pbnQg dHlwZSBjb252ZXJzaW9uLgogICAgVGhpcyBpbmNsdWRlcyBjb252ZXJ0aW5nIGJldHdlZW4g YW55IGZpeGVkIHBvaW50IHR5cGUsIGFzIHdlbGwKICAgIGFzIGNvbnZlcnRpbmcgdG8gYW55 IGludGVnZXIgdHlwZS4gIENvbnZlcnNpb24gYmV0d2VlbiBpbnRlZ2VyCkBAIC05MjgyLDYg Kzk0MTcsOCBAQCBhdnJfYWRqdXN0X2luc25fbGVuZ3RoIChydHhfaW5zbiAqaW5zbiwgaW50 IGxlbikKICAgICBjYXNlIEFESlVTVF9MRU5fUkVMT0FEX0lOMzI6IG91dHB1dF9yZWxvYWRf aW5zaXNmIChvcCwgb3BbMl0sICZsZW4pOyBicmVhazsKIAogICAgIGNhc2UgQURKVVNUX0xF Tl9PVVRfQklUT1A6IGF2cl9vdXRfYml0b3AgKGluc24sIG9wLCAmbGVuKTsgYnJlYWs7Cisg ICAgY2FzZSBBREpVU1RfTEVOX0VYVFJfTk9UOiBhdnJfb3V0X2V4dHJfbm90IChpbnNuLCBv cCwgJmxlbik7IGJyZWFrOworICAgIGNhc2UgQURKVVNUX0xFTl9FWFRSOiBhdnJfb3V0X2V4 dHIgKGluc24sIG9wLCAmbGVuKTsgYnJlYWs7CiAKICAgICBjYXNlIEFESlVTVF9MRU5fUExV UzogYXZyX291dF9wbHVzIChpbnNuLCBvcCwgJmxlbik7IGJyZWFrOwogICAgIGNhc2UgQURK VVNUX0xFTl9BRERUT19TUDogYXZyX291dF9hZGR0b19zcCAob3AsICZsZW4pOyBicmVhazsK QEAgLTEwODY1LDYgKzExMDAyLDE2IEBAIGF2cl9ydHhfY29zdHNfMSAocnR4IHgsIG1hY2hp bmVfbW9kZSBtb2RlLCBpbnQgb3V0ZXJfY29kZSwKICAgICAgICAgICAqdG90YWwgPSBDT1NU U19OX0lOU05TICgyKTsKICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQorICAg ICAgaWYgKEFORCA9PSBjb2RlCisgICAgICAgICAgJiYgc2luZ2xlX29uZV9vcGVyYW5kIChY RVhQICh4LCAxKSwgbW9kZSkKKyAgICAgICAgICAmJiAoQVNISUZUID09IEdFVF9DT0RFIChY RVhQICh4LCAwKSkKKyAgICAgICAgICAgICAgfHwgQVNISUZUUlQgPT0gR0VUX0NPREUgKFhF WFAgKHgsIDApKQorICAgICAgICAgICAgICB8fCBMU0hJRlRSVCA9PSBHRVRfQ09ERSAoWEVY UCAoeCwgMCkpKSkKKyAgICAgICAgeworICAgICAgICAgIC8vICIqaW5zdi5hbnlfc2hpZnQu PG1vZGU+CisgICAgICAgICAgKnRvdGFsID0gQ09TVFNfTl9JTlNOUyAoMSArIEdFVF9NT0RF X1NJWkUgKG1vZGUpKTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAg ICAgKnRvdGFsID0gQ09TVFNfTl9JTlNOUyAoR0VUX01PREVfU0laRSAobW9kZSkpOwogICAg ICAgKnRvdGFsICs9IGF2cl9vcGVyYW5kX3J0eF9jb3N0IChYRVhQICh4LCAwKSwgbW9kZSwg Y29kZSwgMCwgc3BlZWQpOwogICAgICAgaWYgKCFDT05TVF9JTlRfUCAoWEVYUCAoeCwgMSkp KQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hdnIvYXZyLm1kIGIvZ2NjL2NvbmZpZy9hdnIv YXZyLm1kCmluZGV4IDlmNWZhYmM4NjFmLi4wMWViZGYxYzMyMiAxMDA2NDQKLS0tIGEvZ2Nj L2NvbmZpZy9hdnIvYXZyLm1kCisrKyBiL2djYy9jb25maWcvYXZyL2F2ci5tZApAQCAtMTU1 LDcgKzE1NSw3IEBAIChkZWZpbmVfYXR0ciAibGVuZ3RoIiAiIgogOzsgT3RoZXJ3aXNlIGRv IHNwZWNpYWwgcHJvY2Vzc2luZyBkZXBlbmRpbmcgb24gdGhlIGF0dHJpYnV0ZS4KIAogKGRl ZmluZV9hdHRyICJhZGp1c3RfbGVuIgotICAib3V0X2JpdG9wLCBwbHVzLCBhZGR0b19zcCwg c2V4dCwKKyAgIm91dF9iaXRvcCwgcGx1cywgYWRkdG9fc3AsIHNleHQsIGV4dHIsIGV4dHJf bm90LAogICAgdHN0aGksIHRzdHBzaSwgdHN0c2ksIGNvbXBhcmUsIGNvbXBhcmU2NCwgY2Fs bCwKICAgIG1vdjgsIG1vdjE2LCBtb3YyNCwgbW92MzIsIHJlbG9hZF9pbjE2LCByZWxvYWRf aW4yNCwgcmVsb2FkX2luMzIsCiAgICB1ZnJhY3QsIHNmcmFjdCwgcm91bmQsCkBAIC0yNzIs MTIgKzI3MiwyNSBAQCAoZGVmaW5lX21vZGVfaXRlcmF0b3IgT1JERVJFRDIzNCBbSEkgU0kg UFNJCiAoZGVmaW5lX21vZGVfaXRlcmF0b3IgU1BMSVQzNCBbU0kgU0YgUFNJCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU1EgVVNRIFNBIFVTQV0pCiAKKzs7IFdoZXJlIHRo ZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpcyBsb2NhdGVkLgorKGRlZmluZV9tb2RlX2F0dHIg TVNCICBbKFFJICI3IikgKFFRICI3IikgKFVRUSAiNyIpCisgICAgICAgICAgICAgICAgICAg ICAgICAoSEkgIjE1IikgKEhRICIxNSIpIChVSFEgIjE1IikgKEhBICIxNSIpIChVSEEgIjE1 IikKKyAgICAgICAgICAgICAgICAgICAgICAgIChQU0kgIjIzIikKKyAgICAgICAgICAgICAg ICAgICAgICAgIChTSSAiMzEiKSAoU1EgIjMxIikgKFVTUSAiMzEiKSAoU0EgIjMxIikgKFVT QSAiMzEiKSAoU0YgIjMxIildKQorCis7OyBTaXplIGluIGJ5dGVzIG9mIHRoZSBtb2RlLgor KGRlZmluZV9tb2RlX2F0dHIgU0laRSBbKFFJICIxIikgKFFRICIxIikgKFVRUSAiMSIpCisg ICAgICAgICAgICAgICAgICAgICAgICAoSEkgIjIiKSAoSFEgIjIiKSAoVUhRICIyIikgKEhB ICIyIikgKFVIQSAiMiIpCisgICAgICAgICAgICAgICAgICAgICAgICAoUFNJICIzIikKKyAg ICAgICAgICAgICAgICAgICAgICAgIChTSSAiNCIpIChTUSAiNCIpIChVU1EgIjQiKSAoU0Eg IjQiKSAoVVNBICI0IikgKFNGICI0IildKQorCiA7OyBEZWZpbmUgY29kZSBpdGVyYXRvcnMK IDs7IERlZmluZSB0d28gaW5jYXJuYXRpb25zIHNvIHRoYXQgd2UgY2FuIGJ1aWxkIHRoZSBj cm9zcyBwcm9kdWN0LgogKGRlZmluZV9jb2RlX2l0ZXJhdG9yIGFueV9leHRlbmQgIFtzaWdu X2V4dGVuZCB6ZXJvX2V4dGVuZF0pCiAoZGVmaW5lX2NvZGVfaXRlcmF0b3IgYW55X2V4dGVu ZDIgW3NpZ25fZXh0ZW5kIHplcm9fZXh0ZW5kXSkKIChkZWZpbmVfY29kZV9pdGVyYXRvciBh bnlfZXh0cmFjdCBbc2lnbl9leHRyYWN0IHplcm9fZXh0cmFjdF0pCiAoZGVmaW5lX2NvZGVf aXRlcmF0b3IgYW55X3NoaWZ0cnQgW2xzaGlmdHJ0IGFzaGlmdHJ0XSkKKyhkZWZpbmVfY29k ZV9pdGVyYXRvciBhbnlfc2hpZnQgICBbbHNoaWZ0cnQgYXNoaWZ0cnQgYXNoaWZ0XSkKIAog KGRlZmluZV9jb2RlX2l0ZXJhdG9yIHBpYW9wIFtwbHVzIGlvciBhbmRdKQogKGRlZmluZV9j b2RlX2l0ZXJhdG9yIGJpdG9wIFt4b3IgaW9yIGFuZF0pCkBAIC01Njk2LDkgKzU3MDksOSBA QCAoZGVmaW5lX3NwbGl0CTsgbHNocnFpM19jb25zdDYKIDs7ICIqbHNocnFxMyIKIDs7ICIq bHNocnVxcTMiCiAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIqbHNocjxtb2RlPjNfc3BsaXQi Ci0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOkFMTDEgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAg ICAgICAgICAgICAgICAiPXIscixyLHIsIWQscixyIikKLSAgICAgICAgKGxzaGlmdHJ0OkFM TDEgKG1hdGNoX29wZXJhbmQ6QUxMMSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAiMCwwLDAs MCwwICwwLDAiKQotICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpRSSAy ICJub3BfZ2VuZXJhbF9vcGVyYW5kIiAgICJyLEwsUCxLLG4gLG4sUW0iKSkpXQorICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpBTEwxIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAgICAg ICAgICAgIj1yLHIscixyLHIgICwhZCxyLHIiKQorICAgICAgICAobHNoaWZ0cnQ6QUxMMSAo bWF0Y2hfb3BlcmFuZDpBTEwxIDEgInJlZ2lzdGVyX29wZXJhbmQiICAgICIwLDAsMCwwLHIg ICwwICwwLDAiKQorICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpRSSAy ICJub3BfZ2VuZXJhbF9vcGVyYW5kIiAgICJyLEwsUCxLLEMwNyxuICxuLFFtIikpKV0KICAg IiIKICAgIiMiCiAgICImJiByZWxvYWRfY29tcGxldGVkIgpAQCAtNTcwOCwyNCArNTcyMSwy MyBAQCAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIqbHNocjxtb2RlPjNfc3BsaXQiCiAgICAg ICAgICAgICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldKV0pCiAKIChkZWZpbmVfaW5z biAiKmxzaHI8bW9kZT4zIgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpBTEwxIDAgInJlZ2lz dGVyX29wZXJhbmQiICAgICAgICAgICAgICAgICAgIj1yLHIscixyLCFkLHIsciIpCi0gICAg ICAgIChsc2hpZnRydDpBTEwxIChtYXRjaF9vcGVyYW5kOkFMTDEgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgICAgIjAsMCwwLDAsMCAsMCwwIikKLSAgICAgICAgICAgICAgICAgICAgICAgKG1h dGNoX29wZXJhbmQ6UUkgMiAibm9wX2dlbmVyYWxfb3BlcmFuZCIgICAicixMLFAsSyxuICxu LFFtIikpKQorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpBTEwxIDAgInJlZ2lzdGVyX29wZXJh bmQiICAgICAgICAgICAgICAgICAgIj1yLHIscixyLHIgICwhZCxyLHIiKQorICAgICAgICAo bHNoaWZ0cnQ6QUxMMSAobWF0Y2hfb3BlcmFuZDpBTEwxIDEgInJlZ2lzdGVyX29wZXJhbmQi ICAgICIwLDAsMCwwLHIgICwwICwwLDAiKQorICAgICAgICAgICAgICAgICAgICAgICAobWF0 Y2hfb3BlcmFuZDpRSSAyICJub3BfZ2VuZXJhbF9vcGVyYW5kIiAgICJyLEwsUCxLLEMwNyxu ICxuLFFtIikpKQogICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0KICAgInJlbG9hZF9j b21wbGV0ZWQiCiAgIHsKICAgICByZXR1cm4gbHNocnFpM19vdXQgKGluc24sIG9wZXJhbmRz LCBOVUxMKTsKICAgfQotICBbKHNldF9hdHRyICJsZW5ndGgiICI1LDAsMSwyLDQsNiw5IikK LSAgIChzZXRfYXR0ciAiYWRqdXN0X2xlbiIgImxzaHJxaSIpXSkKKyAgWyhzZXRfYXR0ciAi YWRqdXN0X2xlbiIgImxzaHJxaSIpXSkKIAogOzsgImxzaHJoaTMiCiA7OyAibHNocmhxMyIg ICJsc2hydWhxMyIKIDs7ICJsc2hyaGEzIiAgImxzaHJ1aGEzIgogKGRlZmluZV9pbnNuX2Fu ZF9zcGxpdCAibHNocjxtb2RlPjMiCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOkFMTDIgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgICAgICAgIj1yLHIscixyLHIscixyIikKLSAg ICAgICAgKGxzaGlmdHJ0OkFMTDIgKG1hdGNoX29wZXJhbmQ6QUxMMiAxICJyZWdpc3Rlcl9v cGVyYW5kIiAgICAiMCwwLDAsciwwLDAsMCIpCi0gICAgICAgICAgICAgICAgICAgICAgICht YXRjaF9vcGVyYW5kOlFJIDIgIm5vcF9nZW5lcmFsX29wZXJhbmQiICJyLEwsUCxPLEssbixR bSIpKSldCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkFMTDIgMCAicmVnaXN0ZXJfb3BlcmFu ZCIgICAgICAgICAgICAgICAgIj1yLHIscixyLHIgICxyLHIsciIpCisgICAgICAgIChsc2hp ZnRydDpBTEwyIChtYXRjaF9vcGVyYW5kOkFMTDIgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICIw LDAsMCxyLHIgICwwLDAsMCIpCisgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVy YW5kOlFJIDIgIm5vcF9nZW5lcmFsX29wZXJhbmQiICJyLEwsUCxPLEMxNSxLLG4sUW0iKSkp XQogICAiIgogICAiIyIKICAgIiYmIHJlbG9hZF9jb21wbGV0ZWQiCkBAIC01NzM1LDIyICs1 NzQ3LDIxIEBAIChkZWZpbmVfaW5zbl9hbmRfc3BsaXQgImxzaHI8bW9kZT4zIgogICAgICAg ICAgICAgICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXSldKQogCiAoZGVmaW5lX2luc24g Iipsc2hyPG1vZGU+MyIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6QUxMMiAwICJyZWdpc3Rl cl9vcGVyYW5kIiAgICAgICAgICAgICAgICAiPXIscixyLHIscixyLHIiKQotICAgICAgICAo bHNoaWZ0cnQ6QUxMMiAobWF0Y2hfb3BlcmFuZDpBTEwyIDEgInJlZ2lzdGVyX29wZXJhbmQi ICAgICIwLDAsMCxyLDAsMCwwIikKLSAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29w ZXJhbmQ6UUkgMiAibm9wX2dlbmVyYWxfb3BlcmFuZCIgInIsTCxQLE8sSyxuLFFtIikpKQor ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpBTEwyIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAg ICAgICAgICAgICI9cixyLHIscixyICAscixyLHIiKQorICAgICAgICAobHNoaWZ0cnQ6QUxM MiAobWF0Y2hfb3BlcmFuZDpBTEwyIDEgInJlZ2lzdGVyX29wZXJhbmQiICAiMCwwLDAscixy ICAsMCwwLDAiKQorICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpRSSAy ICJub3BfZ2VuZXJhbF9vcGVyYW5kIiAicixMLFAsTyxDMTUsSyxuLFFtIikpKQogICAgKGNs b2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0KICAgInJlbG9hZF9jb21wbGV0ZWQiCiAgIHsKICAg ICByZXR1cm4gbHNocmhpM19vdXQgKGluc24sIG9wZXJhbmRzLCBOVUxMKTsKICAgfQotICBb KHNldF9hdHRyICJsZW5ndGgiICI2LDAsMiwyLDQsMTAsMTAiKQotICAgKHNldF9hdHRyICJh ZGp1c3RfbGVuIiAibHNocmhpIildKQorICBbKHNldF9hdHRyICJhZGp1c3RfbGVuIiAibHNo cmhpIildKQogCiAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJsc2hycHNpMyIKLSAgWyhzZXQg KG1hdGNoX29wZXJhbmQ6UFNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAgICAgICAg ICAiPXIscixyLHIsciIpCi0gICAgICAgIChsc2hpZnRydDpQU0kgKG1hdGNoX29wZXJhbmQ6 UFNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICAgICIwLDAsciwwLDAiKQotICAgICAgICAgICAg ICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAgICAi cixQLE8sSyxuIikpKQotICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkgMyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICI9WCxYLFgsWCwmZCIpKV0KKyAgWyhzZXQgKG1h dGNoX29wZXJhbmQ6UFNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAgICAgICAgICAi PXIscixyLHIgICxyLHIiKQorICAgICAgICAobHNoaWZ0cnQ6UFNJIChtYXRjaF9vcGVyYW5k OlBTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAiMCwwLHIsciAgLDAsMCIpCisgICAgICAg ICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAibm9ubWVtb3J5X29wZXJhbmQi ICAgICJyLFAsTyxDMjMsSyxuIikpKQorICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkg MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9WCxYLFgsWCAgLFgsJmQiKSld CiAgICIiCiAgICIjIgogICAiJiYgcmVsb2FkX2NvbXBsZXRlZCIKQEAgLTU3NjEsMTAgKzU3 NzIsMTAgQEAgKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAibHNocnBzaTMiCiAgICAgICAgICAg ICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldKV0pCiAKIChkZWZpbmVfaW5zbiAiKmxz aHJwc2kzIgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpQU0kgMCAicmVnaXN0ZXJfb3BlcmFu ZCIgICAgICAgICAgICAgICAgICI9cixyLHIscixyIikKLSAgICAgICAgKGxzaGlmdHJ0OlBT SSAobWF0Y2hfb3BlcmFuZDpQU0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICAgIjAsMCxyLDAs MCIpCi0gICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAibm9ubWVt b3J5X29wZXJhbmQiICAgICJyLFAsTyxLLG4iKSkpCi0gICAoY2xvYmJlciAobWF0Y2hfc2Ny YXRjaDpRSSAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1YLFgsWCxYLCZk IikpCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlBTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAg ICAgICAgICAgICAgICAgIj1yLHIscixyICAscixyIikKKyAgICAgICAgKGxzaGlmdHJ0OlBT SSAobWF0Y2hfb3BlcmFuZDpQU0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICAgIjAsMCxyLHIg ICwwLDAiKQorICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgIm5v bm1lbW9yeV9vcGVyYW5kIiAgICAicixQLE8sQzIzLEssbiIpKSkKKyAgIChjbG9iYmVyICht YXRjaF9zY3JhdGNoOlFJIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPVgs WCxYLFggICxYLCZkIikpCiAgICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXQogICAicmVs b2FkX2NvbXBsZXRlZCIKICAgewpAQCAtNTc3Niw5ICs1Nzg3LDkgQEAgKGRlZmluZV9pbnNu ICIqbHNocnBzaTMiCiA7OyAibHNocnNxMyIgICJsc2hydXNxMyIKIDs7ICJsc2hyc2EzIiAg ImxzaHJ1c2EzIgogKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAibHNocjxtb2RlPjMiCi0gIFso c2V0IChtYXRjaF9vcGVyYW5kOkFMTDQgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAg ICAgICAgICAiPXIscixyLHIscixyLHIiKQotICAgICAgICAobHNoaWZ0cnQ6QUxMNCAobWF0 Y2hfb3BlcmFuZDpBTEw0IDEgInJlZ2lzdGVyX29wZXJhbmQiICAgICIwLDAsMCxyLDAsMCww IikKLSAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAibm9wX2dl bmVyYWxfb3BlcmFuZCIgICAicixMLFAsTyxLLG4sUW0iKSkpXQorICBbKHNldCAobWF0Y2hf b3BlcmFuZDpBTEw0IDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAgICAgICAgICAgIj1y LHIscixyLHIsciAgLHIsciIpCisgICAgICAgIChsc2hpZnRydDpBTEw0IChtYXRjaF9vcGVy YW5kOkFMTDQgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICAgIjAsMCwwLHIsMCxyICAsMCwwIikK KyAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAibm9wX2dlbmVy YWxfb3BlcmFuZCIgICAicixMLFAsTyxLLEMzMSxuLFFtIikpKV0KICAgIiIKICAgIiMiCiAg ICImJiByZWxvYWRfY29tcGxldGVkIgpAQCAtNTc4OCwxNiArNTc5OSwxNSBAQCAoZGVmaW5l X2luc25fYW5kX3NwbGl0ICJsc2hyPG1vZGU+MyIKICAgICAgICAgICAgICAgKGNsb2JiZXIg KHJlZzpDQyBSRUdfQ0MpKV0pXSkKIAogKGRlZmluZV9pbnNuICIqbHNocjxtb2RlPjMiCi0g IFsoc2V0IChtYXRjaF9vcGVyYW5kOkFMTDQgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAg ICAgICAgICAgICAiPXIscixyLHIscixyLHIiKQotICAgICAgICAobHNoaWZ0cnQ6QUxMNCAo bWF0Y2hfb3BlcmFuZDpBTEw0IDEgInJlZ2lzdGVyX29wZXJhbmQiICAgICIwLDAsMCxyLDAs MCwwIikKLSAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAibm9w X2dlbmVyYWxfb3BlcmFuZCIgICAicixMLFAsTyxLLG4sUW0iKSkpCisgIFsoc2V0IChtYXRj aF9vcGVyYW5kOkFMTDQgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgICAgICAgICAi PXIscixyLHIscixyICAscixyIikKKyAgICAgICAgKGxzaGlmdHJ0OkFMTDQgKG1hdGNoX29w ZXJhbmQ6QUxMNCAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAiMCwwLDAsciwwLHIgICwwLDAi KQorICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJub3BfZ2Vu ZXJhbF9vcGVyYW5kIiAgICJyLEwsUCxPLEssQzMxLG4sUW0iKSkpCiAgICAoY2xvYmJlciAo cmVnOkNDIFJFR19DQykpXQogICAicmVsb2FkX2NvbXBsZXRlZCIKICAgewogICAgIHJldHVy biBsc2hyc2kzX291dCAoaW5zbiwgb3BlcmFuZHMsIE5VTEwpOwogICB9Ci0gIFsoc2V0X2F0 dHIgImxlbmd0aCIgIjgsMCw0LDQsOCwxMCwxMiIpCi0gICAoc2V0X2F0dHIgImFkanVzdF9s ZW4iICJsc2hyc2kiKV0pCisgIFsoc2V0X2F0dHIgImFkanVzdF9sZW4iICJsc2hyc2kiKV0p CiAKIDs7IE9wdGltaXplIGlmIGEgc2NyYXRjaCByZWdpc3RlciBmcm9tIExEX1JFR1MgaGFw cGVucyB0byBiZSBhdmFpbGFibGUuCiAKQEAgLTU4NTYsNyArNTg2Niw3IEBAIChkZWZpbmVf cGVlcGhvbGUyIDsgbHNocnFpM19sX2NvbnN0NgogICAgIG9wZXJhbmRzWzJdID0gYXZyX3Rv X2ludF9tb2RlIChvcGVyYW5kc1swXSk7CiAgIH0pCiAKLShkZWZpbmVfcGVlcGhvbGUyCiso ZGVmaW5lX3BlZXBob2xlMiA7ICIqbHNocmhpM19jb25zdCIKICAgWyhtYXRjaF9zY3JhdGNo OlFJIDMgImQiKQogICAgKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9vcGVyYW5kOkFMTDIgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgIiIpCiAgICAgICAgICAgICAgICAgICAgKGxzaGlmdHJ0OkFM TDIgKG1hdGNoX29wZXJhbmQ6QUxMMiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKQEAgLTU4 NzMsMTAgKzU4ODMsMTAgQEAgKGRlZmluZV9wZWVwaG9sZTIKIDs7ICIqbHNocmhxM19jb25z dCIgICIqbHNocnVocTNfY29uc3QiCiA7OyAiKmxzaHJoYTNfY29uc3QiICAiKmxzaHJ1aGEz X2NvbnN0IgogKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmxzaHI8bW9kZT4zX2NvbnN0X3Nw bGl0IgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpBTEwyIDAgInJlZ2lzdGVyX29wZXJhbmQi ICAgICAgICAgICAgICAgICI9cixyLHIscixyIikKLSAgICAgICAgKGxzaGlmdHJ0OkFMTDIg KG1hdGNoX29wZXJhbmQ6QUxMMiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgIjAsMCxyLDAsMCIp Ci0gICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgImNvbnN0X2lu dF9vcGVyYW5kIiAgICJMLFAsTyxLLG4iKSkpCi0gICAoY2xvYmJlciAobWF0Y2hfc2NyYXRj aDpRSSAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1YLFgsWCxYLCZkIikp XQorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpBTEwyIDAgInJlZ2lzdGVyX29wZXJhbmQiICAg ICAgICAgICAgICAgICI9cixyLHIsciAgLHIsciIpCisgICAgICAgIChsc2hpZnRydDpBTEwy IChtYXRjaF9vcGVyYW5kOkFMTDIgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICIwLDAscixyICAs MCwwIikKKyAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAiY29u c3RfaW50X29wZXJhbmQiICAgIkwsUCxPLEMxNSxLLG4iKSkpCisgICAoY2xvYmJlciAobWF0 Y2hfc2NyYXRjaDpRSSAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1YLFgs WCxYICAsWCwmZCIpKV0KICAgInJlbG9hZF9jb21wbGV0ZWQiCiAgICIjIgogICAiJiYgcmVs b2FkX2NvbXBsZXRlZCIKQEAgLTU4ODcsMTkgKzU4OTcsMTggQEAgKGRlZmluZV9pbnNuX2Fu ZF9zcGxpdCAiKmxzaHI8bW9kZT4zX2NvbnN0X3NwbGl0IgogICAgICAgICAgICAgICAoY2xv YmJlciAocmVnOkNDIFJFR19DQykpXSldKQogCiAoZGVmaW5lX2luc24gIipsc2hyPG1vZGU+ M19jb25zdCIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6QUxMMiAwICJyZWdpc3Rlcl9vcGVy YW5kIiAgICAgICAgICAgICAgICAiPXIscixyLHIsciIpCi0gICAgICAgIChsc2hpZnRydDpB TEwyIChtYXRjaF9vcGVyYW5kOkFMTDIgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICIwLDAsciww LDAiKQotICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJjb25z dF9pbnRfb3BlcmFuZCIgICAiTCxQLE8sSyxuIikpKQotICAgKGNsb2JiZXIgKG1hdGNoX3Nj cmF0Y2g6UUkgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9WCxYLFgsWCwm ZCIpKQorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpBTEwyIDAgInJlZ2lzdGVyX29wZXJhbmQi ICAgICAgICAgICAgICAgICI9cixyLHIsciAgLHIsciIpCisgICAgICAgIChsc2hpZnRydDpB TEwyIChtYXRjaF9vcGVyYW5kOkFMTDIgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICIwLDAscixy ICAsMCwwIikKKyAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAi Y29uc3RfaW50X29wZXJhbmQiICAgIkwsUCxPLEMxNSxLLG4iKSkpCisgICAoY2xvYmJlciAo bWF0Y2hfc2NyYXRjaDpRSSAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1Y LFgsWCxYICAsWCwmZCIpKQogICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0KICAgInJl bG9hZF9jb21wbGV0ZWQiCiAgIHsKICAgICByZXR1cm4gbHNocmhpM19vdXQgKGluc24sIG9w ZXJhbmRzLCBOVUxMKTsKICAgfQotICBbKHNldF9hdHRyICJsZW5ndGgiICIwLDIsMiw0LDEw IikKLSAgIChzZXRfYXR0ciAiYWRqdXN0X2xlbiIgImxzaHJoaSIpXSkKKyAgWyhzZXRfYXR0 ciAiYWRqdXN0X2xlbiIgImxzaHJoaSIpXSkKIAotKGRlZmluZV9wZWVwaG9sZTIKKyhkZWZp bmVfcGVlcGhvbGUyIDsgIipsc2hyc2kzX2NvbnN0IgogICBbKG1hdGNoX3NjcmF0Y2g6UUkg MyAiZCIpCiAgICAocGFyYWxsZWwgWyhzZXQgKG1hdGNoX29wZXJhbmQ6QUxMNCAwICJyZWdp c3Rlcl9vcGVyYW5kIiAiIikKICAgICAgICAgICAgICAgICAgICAobHNoaWZ0cnQ6QUxMNCAo bWF0Y2hfb3BlcmFuZDpBTEw0IDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKQpAQCAtNTkxNiwx MCArNTkyNSwxMCBAQCAoZGVmaW5lX3BlZXBob2xlMgogOzsgIipsc2hyc3EzX2NvbnN0IiAg Iipsc2hydXNxM19jb25zdCIKIDs7ICIqbHNocnNhM19jb25zdCIgICIqbHNocnVzYTNfY29u c3QiCiAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIqbHNocjxtb2RlPjNfY29uc3Rfc3BsaXQi Ci0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOkFMTDQgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAg ICAgICAgICAgICAiPXIscixyLHIiKQotICAgICAgICAobHNoaWZ0cnQ6QUxMNCAobWF0Y2hf b3BlcmFuZDpBTEw0IDEgInJlZ2lzdGVyX29wZXJhbmQiICIwLDAsciwwIikKLSAgICAgICAg ICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAiY29uc3RfaW50X29wZXJhbmQi ICAiTCxQLE8sbiIpKSkKLSAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOlFJIDMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICI9WCxYLFgsJmQiKSldCisgIFsoc2V0IChtYXRj aF9vcGVyYW5kOkFMTDQgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgICAgICAiPXIs cixyLHIgICxyIikKKyAgICAgICAgKGxzaGlmdHJ0OkFMTDQgKG1hdGNoX29wZXJhbmQ6QUxM NCAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCwwLHIsciAgLDAiKQorICAgICAgICAgICAgICAg ICAgICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJjb25zdF9pbnRfb3BlcmFuZCIgICJMLFAs TyxDMzEsbiIpKSkKKyAgIChjbG9iYmVyIChtYXRjaF9zY3JhdGNoOlFJIDMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICI9WCxYLFgsWCAgLCZkIikpXQogICAicmVsb2FkX2Nv bXBsZXRlZCIKICAgIiMiCiAgICImJiByZWxvYWRfY29tcGxldGVkIgpAQCAtNTkzMCwxNyAr NTkzOSwxNiBAQCAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIqbHNocjxtb2RlPjNfY29uc3Rf c3BsaXQiCiAgICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldKV0pCiAK IChkZWZpbmVfaW5zbiAiKmxzaHI8bW9kZT4zX2NvbnN0IgotICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpBTEw0IDAgInJlZ2lzdGVyX29wZXJhbmQiICAgICAgICAgICAgICAgIj1yLHIscixy IikKLSAgICAgICAgKGxzaGlmdHJ0OkFMTDQgKG1hdGNoX29wZXJhbmQ6QUxMNCAxICJyZWdp c3Rlcl9vcGVyYW5kIiAiMCwwLHIsMCIpCi0gICAgICAgICAgICAgICAgICAgICAgIChtYXRj aF9vcGVyYW5kOlFJIDIgImNvbnN0X2ludF9vcGVyYW5kIiAgIkwsUCxPLG4iKSkpCi0gICAo Y2xvYmJlciAobWF0Y2hfc2NyYXRjaDpRSSAzICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiPVgsWCxYLCZkIikpCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkFMTDQgMCAicmVn aXN0ZXJfb3BlcmFuZCIgICAgICAgICAgICAgICAiPXIscixyLHIgICxyIikKKyAgICAgICAg KGxzaGlmdHJ0OkFMTDQgKG1hdGNoX29wZXJhbmQ6QUxMNCAxICJyZWdpc3Rlcl9vcGVyYW5k IiAiMCwwLHIsciAgLDAiKQorICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFu ZDpRSSAyICJjb25zdF9pbnRfb3BlcmFuZCIgICJMLFAsTyxDMzEsbiIpKSkKKyAgIChjbG9i YmVyIChtYXRjaF9zY3JhdGNoOlFJIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICI9WCxYLFgsWCAgLCZkIikpCiAgICAoY2xvYmJlciAocmVnOkNDIFJFR19DQykpXQogICAi cmVsb2FkX2NvbXBsZXRlZCIKICAgewogICAgIHJldHVybiBsc2hyc2kzX291dCAoaW5zbiwg b3BlcmFuZHMsIE5VTEwpOwogICB9Ci0gIFsoc2V0X2F0dHIgImxlbmd0aCIgIjAsNCw0LDEw IikKLSAgIChzZXRfYXR0ciAiYWRqdXN0X2xlbiIgImxzaHJzaSIpXSkKKyAgWyhzZXRfYXR0 ciAiYWRqdXN0X2xlbiIgImxzaHJzaSIpXSkKIAogOzsgYWJzKHgpIGFicyh4KSBhYnMoeCkg YWJzKHgpIGFicyh4KSBhYnMoeCkgYWJzKHgpIGFicyh4KSBhYnMoeCkgYWJzKHgpIGFicyh4 KQogOzsgYWJzCkBAIC05NTMzLDE3ICs5NTQxLDE3IEBAIChkZWZpbmVfcGVlcGhvbGUyCiAg ICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldKV0pCiAKIAotKGRlZmlu ZV9leHBhbmQgImV4dHp2IgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rl cl9vcGVyYW5kIiAiIikKLSAgICAgICAgKHplcm9fZXh0cmFjdDpRSSAobWF0Y2hfb3BlcmFu ZDpRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgIiIpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAiY29uc3QxX29wZXJhbmQiICIiKQotICAgICAgICAg ICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJIDMgImNvbnN0XzBfdG9fN19vcGVy YW5kIiAiIikpKV0pCisoZGVmaW5lX2V4cGFuZCAiZXh0enY8bW9kZT4iCisgIFsoc2V0ICht YXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiKQorICAgICAgICAoemVyb19l eHRyYWN0OlFJIChtYXRjaF9vcGVyYW5kOlFJU0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIpCisg ICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAiY29uc3QxX29w ZXJhbmQiKQorICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJIDMg ImNvbnN0XzBfdG9fPE1TQj5fb3BlcmFuZCIpKSldKQogCi0oZGVmaW5lX2luc25fYW5kX3Nw bGl0ICIqZXh0enZfc3BsaXQiCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lz dGVyX29wZXJhbmQiICAgICAgICAgICAgICAgICAgICI9KmQsKmQsKmQsKmQsciIpCi0gICAg ICAgICh6ZXJvX2V4dHJhY3Q6UUkgKG1hdGNoX29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgICAgICIwLHIsMCwwLHIiKQorKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmV4dHp2 PG1vZGU+X3NwbGl0IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rlcl9v cGVyYW5kIiAiPXIiKQorICAgICAgICAoemVyb19leHRyYWN0OlFJIChtYXRjaF9vcGVyYW5k OlFJU0kgMSAicmVnX29yX2xvd19pb19vcGVyYW5kIiAiciBZaWwiKQogICAgICAgICAgICAg ICAgICAgICAgICAgIChjb25zdF9pbnQgMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAo bWF0Y2hfb3BlcmFuZDpRSSAyICJjb25zdF8wX3RvXzdfb3BlcmFuZCIgIkwsTCxQLEMwNCxu IikpKV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJj b25zdF8wX3RvXzxNU0I+X29wZXJhbmQiICJuIikpKV0KICAgIiIKICAgIiMiCiAgICImJiBy ZWxvYWRfY29tcGxldGVkIgpAQCAtOTU1MSwyMiArOTU1OSwyOCBAQCAoZGVmaW5lX2luc25f YW5kX3NwbGl0ICIqZXh0enZfc3BsaXQiCiAgICAgICAgICAgICAgICAgICAgKHplcm9fZXh0 cmFjdDpRSSAobWF0Y2hfZHVwIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY29uc3RfaW50IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobWF0Y2hfZHVwIDIpKSkKLSAgICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdf Q0MpKV0pXSkKKyAgICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXQor ICB7CisgICAgaWYgKCEgTUVNX1AgKG9wZXJhbmRzWzFdKSkKKyAgICAgIHsKKyAgICAgICAg aW50IGJpdG5vID0gSU5UVkFMIChvcGVyYW5kc1syXSk7CisgICAgICAgIG9wZXJhbmRzWzFd ID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAoUUltb2RlLCBvcGVyYW5kc1sxXSwgPE1PREU+bW9k ZSwgYml0bm8gLyA4KTsKKyAgICAgICAgb3BlcmFuZHNbMl0gPSBHRU5fSU5UIChiaXRubyAl IDgpOworICAgICAgfQorICB9KQogCi0oZGVmaW5lX2luc24gIipleHR6diIKLSAgWyhzZXQg KG1hdGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgICAgICAg ICAgIj0qZCwqZCwqZCwqZCxyIikKLSAgICAgICAgKHplcm9fZXh0cmFjdDpRSSAobWF0Y2hf b3BlcmFuZDpRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgIjAsciwwLDAsciIpCisoZGVm aW5lX2luc24gIipleHR6djxtb2RlPiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUkgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKyAgICAgICAgKHplcm9fZXh0cmFjdDpRSSAobWF0 Y2hfb3BlcmFuZDpRSVNJIDEgInJlZ19vcl9sb3dfaW9fb3BlcmFuZCIgInIgWWlsIikKICAg ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDEpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAiY29uc3RfMF90b183X29wZXJhbmQiICJM LEwsUCxDMDQsbiIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFu ZDpRSSAyICJjb25zdF8wX3RvXzxNU0I+X29wZXJhbmQiICJuIikpKQogICAgKGNsb2JiZXIg KHJlZzpDQyBSRUdfQ0MpKV0KICAgInJlbG9hZF9jb21wbGV0ZWQiCi0gICJACi0JYW5kaSAl MCwxCi0JbW92ICUwLCUxXDthbmRpICUwLDEKLQlsc3IgJTBcO2FuZGkgJTAsMQotCXN3YXAg JTBcO2FuZGkgJTAsMQotCWJzdCAlMSwlMlw7Y2xyICUwXDtibGQgJTAsMCIKLSAgWyhzZXRf YXR0ciAibGVuZ3RoIiAiMSwyLDIsMiwzIildKQorICB7CisgICAgcmV0dXJuIGF2cl9vdXRf ZXh0ciAoaW5zbiwgb3BlcmFuZHMsIG51bGxwdHIpOworICB9CisgIFsoc2V0X2F0dHIgImFk anVzdF9sZW4iICJleHRyIildKQorCiAKIChkZWZpbmVfaW5zbl9hbmRfc3BsaXQgIipleHR6 di5xaWhpMSIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFu ZCIgICAgICAgICAgICAgICAgICAgICAiPXIiKQpAQCAtOTU4NywxNiArOTYwMSwxOTcgQEAg KGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmV4dHp2LnFpaGkxIgogICAgIG9wZXJhbmRzWzRd ID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAoUUltb2RlLCBvcGVyYW5kc1swXSwgSEltb2RlLCAx KTsKICAgfSkKIAotKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmV4dHp2LnFpaGkyIgotICBb KHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAgICAg ICAgICAgICAgICAiPXIiKQotICAgICAgICAoemVyb19leHRlbmQ6SEkKLSAgICAgICAgICh6 ZXJvX2V4dHJhY3Q6UUkgKG1hdGNoX29wZXJhbmQ6UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIg ICAgICJyIikKKyhkZWZpbmVfaW5zbl9hbmRfc3BsaXQgIipleHR6di5ub3Rfc3BsaXQiCisg IFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisg ICAgICAgICh6ZXJvX2V4dHJhY3Q6UUkgKG5vdDpRSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJy ZWdfb3JfbG93X2lvX29wZXJhbmQiICJyIFlpbCIpKQorICAgICAgICAgICAgICAgICAgICAg ICAgIChjb25zdF9pbnQgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3Bl cmFuZDpRSSAyICJjb25zdF8wX3RvXzdfb3BlcmFuZCIgIm4iKSkpXQorICAiIgorICAiIyIK KyAgIiYmIHJlbG9hZF9jb21wbGV0ZWQiCisgIFsocGFyYWxsZWwgWyhzZXQgKG1hdGNoX2R1 cCAwKQorICAgICAgICAgICAgICAgICAgICh6ZXJvX2V4dHJhY3Q6UUkgKG5vdDpRSSAobWF0 Y2hfZHVwIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0 X2ludCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1 cCAyKSkpCisgICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldKV0pCisK KyhkZWZpbmVfaW5zbiAiKmV4dHp2Lm5vdCIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUkg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKyAgICAgICAgKHplcm9fZXh0cmFjdDpRSSAo bm90OlFJIChtYXRjaF9vcGVyYW5kOlFJIDEgInJlZ19vcl9sb3dfaW9fb3BlcmFuZCIgInIg WWlsIikpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAxKQorICAgICAg ICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgImNvbnN0XzBfdG9fN19v cGVyYW5kIiAibiIpKSkKKyAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldCisgICJyZWxv YWRfY29tcGxldGVkIgorICB7CisgICAgcmV0dXJuIGF2cl9vdXRfZXh0cl9ub3QgKGluc24s IG9wZXJhbmRzLCBudWxscHRyKTsKKyAgfQorICBbKHNldF9hdHRyICJhZGp1c3RfbGVuIiAi ZXh0cl9ub3QiKV0pCisKKyhkZWZpbmVfaW5zbl9hbmRfc3BsaXQgIipleHR6di5zdWJyZWcu PG1vZGU+IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1yIikKKyAgICAgICAgKHN1YnJl ZzpRSSAoemVyb19leHRyYWN0OkhJU0kgKG1hdGNoX29wZXJhbmQ6SElTSSAxICJyZWdpc3Rl cl9vcGVyYW5kIiAiciIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjb25zdF9pbnQgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KG1hdGNoX29wZXJhbmQ6UUkgMiAiY29uc3RfMF90b188TVNCPl9vcGVyYW5kIiAibiIpKQor ICAgICAgICAgICAgICAgICAgIDApKV0KKyAgICIhIHJlbG9hZF9jb21wbGV0ZWQiCisgICB7 IGdjY191bnJlYWNoYWJsZSgpOyB9CisgICAiJiYgMSIKKyAgIFs7ICIqZXh0enY8bW9kZT5f c3BsaXQiCisgICAgKHNldCAobWF0Y2hfZHVwIDApCisgICAgICAgICAoemVyb19leHRyYWN0 OlFJIChtYXRjaF9kdXAgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2lu dCAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJj b25zdF8wX3RvXzdfb3BlcmFuZCIgIm4iKSkpKV0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgKG1hdGNoX2R1cCAyKSkpXSkKKworOzsgUG9zc2libGUgc3VicmVnIGJ5dGVzLgorKGRl ZmluZV9pbnRfaXRlcmF0b3IgU3VSZUIgWzAgMSAyIDNdKQorCisoZGVmaW5lX2luc25fYW5k X3NwbGl0ICIqZXh0enYuPG1vZGU+LnN1YnJlZzxTdVJlQj4iCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisgICAgICAgICh6ZXJvX2V4 dHJhY3Q6UUkgKHN1YnJlZzpRSQorICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5kOkhJ U0kgKG1hdGNoX29wZXJhbmQ6SElTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpISVNJIDIg InNpbmdsZV9vbmVfb3BlcmFuZCIgIm4iKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg U3VSZUIpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAxKQorICAgICAg ICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJIDMgImNvbnN0XzBfdG9fN19v cGVyYW5kIiAibiIpKSldCisgICIhIHJlbG9hZF9jb21wbGV0ZWQKKyAgICYmIElOX1JBTkdF IChVSU5UVkFMKG9wZXJhbmRzWzJdKSAmIEdFVF9NT0RFX01BU0soPE1PREU+bW9kZSksCisg ICAgICAgICAgICAgICAgMVUgPDwgKDggKiA8U3VSZUI+KSwgMHg4MFUgPDwgKDggKiA8U3VS ZUI+KSkKKyAgICYmIGV4YWN0X2xvZzIgKFVJTlRWQUwob3BlcmFuZHNbMl0pICYgR0VUX01P REVfTUFTSyg8TU9ERT5tb2RlKSkKKyAgICAgID09IDggKiA8U3VSZUI+ICsgSU5UVkFMIChv cGVyYW5kc1szXSkiCisgIHsgZ2NjX3VucmVhY2hhYmxlKCk7IH0KKyAgIiYmIDEiCisgIFs7 ICIqZXh0enY8bW9kZT5fc3BsaXQiCisgICAoc2V0IChtYXRjaF9kdXAgMCkKKyAgICAgICAg KHplcm9fZXh0cmFjdDpRSSAobWF0Y2hfZHVwIDEpCisgICAgICAgICAgICAgICAgICAgICAg ICAgKGNvbnN0X2ludCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAg NCkpKV0KKyAgeworICAgIG9wZXJhbmRzWzRdID0gcGx1c19jb25zdGFudCAoUUltb2RlLCBv cGVyYW5kc1szXSwgOCAqIDxTdVJlQj4pOworICB9KQorCisKKyhkZWZpbmVfaW5zbl9hbmRf c3BsaXQgIipleHR6di54b3IiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lz dGVyX29wZXJhbmQiKQorICAgICAgICAoemVyb19leHRyYWN0OlFJICh4b3I6UUkgKG1hdGNo X29wZXJhbmQ6UUkgMSAicmVnX29yX2xvd19pb19vcGVyYW5kIikKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgInNpbmdsZV9vbmVfb3Bl cmFuZCIpKQorICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpRSSAzICJjb25zdF8wX3RvXzdf b3BlcmFuZCIpKSldCisgICIhIHJlbG9hZF9jb21wbGV0ZWQKKyAgICYmICgoMSA8PCBJTlRW QUwgKG9wZXJhbmRzWzNdKSkgJiBJTlRWQUwgKG9wZXJhbmRzWzJdKSkgIT0gMCIKKyAgeyBn Y2NfdW5yZWFjaGFibGUoKTsgfQorICAiJiYgMSIKKyAgWzsgIipleHR6di5ub3Rfc3BsaXQi CisgICAoc2V0IChtYXRjaF9kdXAgMCkKKyAgICAgICAgKHplcm9fZXh0cmFjdDpRSSAobm90 OlFJIChtYXRjaF9kdXAgMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2lu dCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgMykpKV0pCisKKwor KGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmV4dHp2PG1vZGU+LmdlIgorICBbKHNldCAobWF0 Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorICAgICAgICAoZ2U6 UUkgKG1hdGNoX29wZXJhbmQ6UUlTSSAxICJyZWdfb3JfbG93X2lvX29wZXJhbmQiICJyIFlp bCIpCisgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpRSVNJIDIgImNvbnN0MF9vcGVy YW5kIiAiWTAwIikpKV0KICAgIiIKICAgIiMiCisgICJyZWxvYWRfY29tcGxldGVkIgorICBb OyAiKmV4dHp2Lm5vdCIKKyAgIChwYXJhbGxlbCBbKHNldCAobWF0Y2hfZHVwIDApCisgICAg ICAgICAgICAgICAgICAgKHplcm9fZXh0cmFjdDpRSSAobm90OlFJIChtYXRjaF9kdXAgMSkp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDEpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDcpKSkKKyAg ICAgICAgICAgICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXQorICB7CisgICAgaWYg KCEgTUVNX1AgKG9wZXJhbmRzWzFdKSkKKyAgICAgIHsKKyAgICAgICAgaW50IG1zYiA9IDxT SVpFPiAtIDE7CisgICAgICAgIG9wZXJhbmRzWzFdID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAo UUltb2RlLCBvcGVyYW5kc1sxXSwgPE1PREU+bW9kZSwgbXNiKTsKKyAgICAgIH0KKyAgfSkK KworKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKm5lZy5hc2hpZnRydDxtb2RlPi5tc2IiCisg IFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisg ICAgICAgIChuZWc6UUkgKHN1YnJlZzpRSQorICAgICAgICAgICAgICAgICAoYXNoaWZ0cnQ6 UUlTSSAobWF0Y2hfb3BlcmFuZDpRSVNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAiY29u c3Q8TVNCPl9vcGVyYW5kIiAibiIpKQorICAgICAgICAgICAgICAgICAwKSkpXQorICAiISBy ZWxvYWRfY29tcGxldGVkIgorICB7IGdjY191bnJlYWNoYWJsZSgpOyB9CisgICImJiAxIgor ICBbOyAiKmV4dHp2PG1vZGU+X3NwbGl0IgorICAgKHNldCAobWF0Y2hfZHVwIDApCisgICAg ICAgICh6ZXJvX2V4dHJhY3Q6UUkgKG1hdGNoX2R1cCAxKQorICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zdF9pbnQgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hf ZHVwIDIpKSldKQorCisoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIqZXh0enYuaW8ubHNyNyIK KyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAg ICAgIChsc2hpZnRydDpRSSAobWF0Y2hfb3BlcmFuZDpRSSAxICJyZWdfb3JfbG93X2lvX29w ZXJhbmQiKQorICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCA3KSkpXQorICAiISBy ZWxvYWRfY29tcGxldGVkIgorICB7IGdjY191bnJlYWNoYWJsZSgpOyB9CisgICImJiAxIgor ICBbOyAiKmV4dHp2X3NwbGl0IgorICAgKHNldCAobWF0Y2hfZHVwIDApCisgICAgICAgICh6 ZXJvX2V4dHJhY3Q6UUkgKG1hdGNoX2R1cCAxKQorICAgICAgICAgICAgICAgICAgICAgICAg IChjb25zdF9pbnQgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50IDcp KSldKQorCisoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIqaW5zdi5hbnlfc2hpZnQuPG1vZGU+ X3NwbGl0IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpRSVNJIDAgInJlZ2lzdGVyX29wZXJh bmQiICI9ciIpCisgICAgICAgIChhbmQ6UUlTSSAoYW55X3NoaWZ0OlFJU0kgKG1hdGNoX29w ZXJhbmQ6UUlTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAiY29uc3RfMF90b188TVNC Pl9vcGVyYW5kIiAibiIpKQorICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUlT SSAzICJzaW5nbGVfb25lX29wZXJhbmQiICJuIikpKV0KICAgIiIKLSAgWyhzZXQgKG1hdGNo X2R1cCAzKQorICAiIyIKKyAgIiYmIHJlbG9hZF9jb21wbGV0ZWQiCisgIFsocGFyYWxsZWwg WyhzZXQgKG1hdGNoX2R1cCAwKQorICAgICAgICAgICAgICAgICAgIChhbmQ6UUlTSSAoYW55 X3NoaWZ0OlFJU0kgKG1hdGNoX2R1cCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAyKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKG1hdGNoX2R1cCAzKSkpCisgICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6 Q0MgUkVHX0NDKSldKV0pCisKKyhkZWZpbmVfaW5zbiAiKmluc3YuYW55X3NoaWZ0Ljxtb2Rl PiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUlTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAi PXIiKQorICAgICAgICAoYW5kOlFJU0kgKGFueV9zaGlmdDpRSVNJIChtYXRjaF9vcGVyYW5k OlFJU0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgImNvbnN0XzBfdG9fPE1TQj5fb3Bl cmFuZCIgIm4iKSkKKyAgICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJU0kgMyAi c2luZ2xlX29uZV9vcGVyYW5kIiAibiIpKSkKKyAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0ND KSldCisgICJyZWxvYWRfY29tcGxldGVkIgorICB7CisgICAgaW50IHNoaWZ0ID0gPENPREU+ ID09IEFTSElGVCA/IElOVFZBTCAob3BlcmFuZHNbMl0pIDogLUlOVFZBTCAob3BlcmFuZHNb Ml0pOworICAgIGludCBtYXNrID0gR0VUX01PREVfTUFTSyAoPE1PREU+bW9kZSkgJiBJTlRW QUwgKG9wZXJhbmRzWzNdKTsKKyAgICAvLyBQb3NpdGlvbiBvZiB0aGUgb3V0cHV0IC8gaW5w dXQgYml0LCByZXNwZWN0aXZlbHkuCisgICAgaW50IG9iaXQgPSBleGFjdF9sb2cyIChtYXNr KTsKKyAgICBpbnQgaWJpdCA9IG9iaXQgLSBzaGlmdDsKKyAgICBnY2NfYXNzZXJ0IChJTl9S QU5HRSAob2JpdCwgMCwgPE1TQj4pKTsKKyAgICBnY2NfYXNzZXJ0IChJTl9SQU5HRSAoaWJp dCwgMCwgPE1TQj4pKTsKKyAgICBvcGVyYW5kc1szXSA9IEdFTl9JTlQgKG9iaXQpOworICAg IG9wZXJhbmRzWzJdID0gR0VOX0lOVCAoaWJpdCk7CisKKyAgICBpZiAoPFNJWkU+ID09IDEp IHJldHVybiAiYnN0ICVUMSVUMlw7Y2xyICUwXDsiICAgICAgICAgICAgICAgICAiYmxkICVU MCVUMyI7CisgICAgaWYgKDxTSVpFPiA9PSAyKSByZXR1cm4gImJzdCAlVDElVDJcO2NsciAl QTBcO2NsciAlQjBcOyIgICAgICAgImJsZCAlVDAlVDMiOworICAgIGlmICg8U0laRT4gPT0g MykgcmV0dXJuICJic3QgJVQxJVQyXDtjbHIgJUEwXDtjbHIgJUIwXDtjbHIgJUMwXDtibGQg JVQwJVQzIjsKKyAgICByZXR1cm4gQVZSX0hBVkVfTU9WVworICAgICAgPyAiYnN0ICVUMSVU Mlw7Y2xyICVBMFw7Y2xyICVCMFw7bW92dyAlQzAsJUEwXDsiICAiYmxkICVUMCVUMyIKKyAg ICAgIDogImJzdCAlVDElVDJcO2NsciAlQTBcO2NsciAlQjBcO2NsciAlQzBcO2NsciAlRDBc O2JsZCAlVDAlVDMiOworICB9CisgIFsoc2V0IChhdHRyICJsZW5ndGgiKQorICAgICAgICAo bWludXMgKHN5bWJvbF9yZWYgIjIgKyA8U0laRT4iKQorICAgICAgICAgICAgICAgOyBPbmUg bGVzcyBpZiB3ZSBjYW4gdXNlIGEgTU9WVyB0byBjbGVhci4KKyAgICAgICAgICAgICAgIChz eW1ib2xfcmVmICI8U0laRT4gPT0gNCAmJiBBVlJfSEFWRV9NT1ZXIikpKV0pCisKKworKGRl ZmluZV9pbnNuX2FuZF9zcGxpdCAiKmV4dHp2Ljxtb2RlPmhpMiIKKyAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgICAgICAgICAgICAg Ij1yIikKKyAgICAgICAgKHplcm9fZXh0ZW5kOkhJCisgICAgICAgICAoemVyb19leHRyYWN0 OlFJIChtYXRjaF9vcGVyYW5kOlFJU0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICAiciIpCisg ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAiY29uc3RfMF90b188TVNCPl9vcGVy YW5kIiAibiIpKSkpXQorICAiISByZWxvYWRfY29tcGxldGVkIgorICB7IGdjY191bnJlYWNo YWJsZSgpOyB9CisgICImJiAxIgorICBbOyAiKmV4dHp2PG1vZGU+X3NwbGl0IgorICAgKHNl dCAobWF0Y2hfZHVwIDMpCiAgICAgICAgICh6ZXJvX2V4dHJhY3Q6UUkgKG1hdGNoX2R1cCAx KQogICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAobWF0Y2hfZHVwIDIpKSkKQEAgLTk2MTAsMjQgKzk4MDUsMjAgQEAg KGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmV4dHp2LnFpaGkyIgogOzsgPz8/IGRvX3N0b3Jl X2ZsYWcgZW1pdHMgYSBoYXJkLWNvZGVkIHJpZ2h0IHNoaWZ0IHRvIGV4dHJhY3QgYSBiaXQg d2l0aG91dAogOzsgZXZlbiBjb25zaWRlcmluZyBydHhfY29zdHMsIGV4dHp2LCBvciBhIGJp dC10ZXN0LiAgU2VlIFBSIDU1MTgxIGZvciBhbiBleGFtcGxlLgogKGRlZmluZV9pbnNuX2Fu ZF9zcGxpdCAiKmV4dHJhY3Quc3VicmVnLmJpdCIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiPXIiKQotICAgICAgICAoYW5kOlFJIChzdWJyZWc6UUkgKGFueV9zaGlmdHJ0 OkhJU0kgKG1hdGNoX29wZXJhbmQ6SElTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3Bl cmFuZDpRSSAyICJjb25zdF9pbnRfb3BlcmFuZCIgICJuIikpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAwKQorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rlcl9v cGVyYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj1yIikKKyAgICAg ICAgKGFuZDpRSSAoc3VicmVnOlFJCisgICAgICAgICAgICAgICAgIChhbnlfc2hpZnRydDpI SVNJIChtYXRjaF9vcGVyYW5kOkhJU0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgInIi KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpR SSAyICJjb25zdF8wX3RvXzxNU0I+X29wZXJhbmQiICJuIikpCisgICAgICAgICAgICAgICAg IDApCiAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAxKSkpXQotICAiSU5UVkFMIChvcGVy YW5kc1syXSkgPCBHRVRfTU9ERV9CSVRTSVpFICg8TU9ERT5tb2RlKSIKKyAgIiEgcmVsb2Fk X2NvbXBsZXRlZCIKICAgeyBnY2NfdW5yZWFjaGFibGUoKTsgfQotICAiJiYgcmVsb2FkX2Nv bXBsZXRlZCIKLSAgWzs7ICIqZXh0enYiCisgICImJiAxIgorICBbOzsgIipleHR6djxtb2Rl Pl9zcGxpdCIKICAgIChzZXQgKG1hdGNoX2R1cCAwKQotICAgICAgICAoemVyb19leHRyYWN0 OlFJIChtYXRjaF9kdXAgMykKKyAgICAgICAgKHplcm9fZXh0cmFjdDpRSSAobWF0Y2hfZHVw IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0X2ludCAxKQotICAgICAgICAg ICAgICAgICAgICAgICAgIChtYXRjaF9kdXAgNCkpKV0KLSAgewotICAgIGludCBiaXRubyA9 IElOVFZBTCAob3BlcmFuZHNbMl0pOwotICAgIG9wZXJhbmRzWzNdID0gc2ltcGxpZnlfZ2Vu X3N1YnJlZyAoUUltb2RlLCBvcGVyYW5kc1sxXSwgPE1PREU+bW9kZSwgYml0bm8gLyA4KTsK LSAgICBvcGVyYW5kc1s0XSA9IEdFTl9JTlQgKGJpdG5vICUgOCk7Ci0gIH0pCisgICAgICAg ICAgICAgICAgICAgICAgICAgKG1hdGNoX2R1cCAyKSkpXSkKIAogDAogOzsgRml4ZWQtcG9p bnQgaW5zdHJ1Y3Rpb25zCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2F2ci9jb25zdHJhaW50 cy5tZCBiL2djYy9jb25maWcvYXZyL2NvbnN0cmFpbnRzLm1kCmluZGV4IGFjNDM2Nzg4NzJk Li42Y2VkODA5MGQzMyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hdnIvY29uc3RyYWludHMu bWQKKysrIGIvZ2NjL2NvbmZpZy9hdnIvY29uc3RyYWludHMubWQKQEAgLTEzMyw2ICsxMzMs MjEgQEAgKGRlZmluZV9jb25zdHJhaW50ICJDMDciCiAgIChhbmQgKG1hdGNoX2NvZGUgImNv bnN0X2ludCIpCiAgICAgICAgKG1hdGNoX3Rlc3QgIml2YWwgPT0gNyIpKSkKIAorKGRlZmlu ZV9jb25zdHJhaW50ICJDMTUiCisgICJDb25zdGFudCBpbnRlZ2VyIDE1LiIKKyAgKGFuZCAo bWF0Y2hfY29kZSAiY29uc3RfaW50IikKKyAgICAgICAobWF0Y2hfdGVzdCAiaXZhbCA9PSAx NSIpKSkKKworKGRlZmluZV9jb25zdHJhaW50ICJDMjMiCisgICJDb25zdGFudCBpbnRlZ2Vy IDIzLiIKKyAgKGFuZCAobWF0Y2hfY29kZSAiY29uc3RfaW50IikKKyAgICAgICAobWF0Y2hf dGVzdCAiaXZhbCA9PSAyMyIpKSkKKworKGRlZmluZV9jb25zdHJhaW50ICJDMzEiCisgICJD b25zdGFudCBpbnRlZ2VyIDMxLiIKKyAgKGFuZCAobWF0Y2hfY29kZSAiY29uc3RfaW50IikK KyAgICAgICAobWF0Y2hfdGVzdCAiaXZhbCA9PSAzMSIpKSkKKwogKGRlZmluZV9jb25zdHJh aW50ICJDYTEiCiAgICJDb25zdGFudCAxLWJ5dGUgaW50ZWdlciB0aGF0IGFsbG93cyBBTkQg YnkgbWVhbnMgb2YgQ0xUICsgQkxELiIKICAgKGFuZCAobWF0Y2hfY29kZSAiY29uc3RfaW50 IikKQEAgLTI1NywzICsyNzIsOCBAQCAoZGVmaW5lX2NvbnN0cmFpbnQgIllJSiIKICAgIkZp eGVkLXBvaW50IGNvbnN0YW50IGZyb20gQG1pbnVze30weDAwM2YgdG8gMHgwMDNmLiIKICAg KGFuZCAobWF0Y2hfY29kZSAiY29uc3RfZml4ZWQiKQogICAgICAgIChtYXRjaF90ZXN0ICJJ Tl9SQU5HRSAoSU5UVkFMIChhdnJfdG9faW50X21vZGUgKG9wKSksIC02MywgNjMpIikpKQor CisoZGVmaW5lX2NvbnN0cmFpbnQgIllpbCIKKyAgIk1lbW9yeSBpbiB0aGUgbG93ZXIgaGFs ZiBvZiB0aGUgSS9PIHNwYWNlLiIKKyAgKGFuZCAobWF0Y2hfY29kZSAibWVtIikKKyAgICAg ICAobWF0Y2hfdGVzdCAibG93X2lvX2FkZHJlc3Nfb3BlcmFuZCAoWEVYUCAob3AsIDApLCBQ bW9kZSkiKSkpCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2F2ci9wcmVkaWNhdGVzLm1kIGIv Z2NjL2NvbmZpZy9hdnIvcHJlZGljYXRlcy5tZAppbmRleCBlMzUyMzI2NDY2Zi4uMjU3Njcz NTNiZTEgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYXZyL3ByZWRpY2F0ZXMubWQKKysrIGIv Z2NjL2NvbmZpZy9hdnIvcHJlZGljYXRlcy5tZApAQCAtNTAsNiArNTAsMTYgQEAgKGRlZmlu ZV9zcGVjaWFsX3ByZWRpY2F0ZSAibG93X2lvX2FkZHJlc3Nfb3BlcmFuZCIKICAgICAgICAo YW5kIChtYXRjaF9jb2RlICJzeW1ib2xfcmVmIikKIAkgICAgKG1hdGNoX3Rlc3QgIlNZTUJP TF9SRUZfRkxBR1MgKG9wKSAmIFNZTUJPTF9GTEFHX0lPX0xPVyIpKSkpCiAKKzs7IFJldHVy biB0cnVlIGlmIE9QIGlzIGEgcmVnaXN0ZXJfb3BlcmFuZCBvciBsb3dfaW9fb3BlcmFuZC4K KyhkZWZpbmVfcHJlZGljYXRlICJyZWdfb3JfbG93X2lvX29wZXJhbmQiCisgIChpb3IgKG1h dGNoX29wZXJhbmQgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisgICAgICAgKGFuZCAobWF0Y2hf Y29kZSAibWVtIikKKyAgICAgICAgICAgIDsgRGVsaWJlcmF0ZWx5IG9ubHkgYWxsb3cgUUlt b2RlIG5vIG1hdHRlciB3aGF0IHRoZSBtb2RlIG9mCisgICAgICAgICAgICA7IHRoZSBvcGVy YW5kIGlzLiAgVGhpcyBlZmZlY3RpdmVseSBkaXNhbGxvd3MgYW5kIEkvTyB0aGF0CisgICAg ICAgICAgICA7IGlzIG5vdCBRSW1vZGUgZm9yIHRoYXQgb3BlcmFuZC4KKyAgICAgICAgICAg IChtYXRjaF90ZXN0ICJHRVRfTU9ERSAob3ApID09IFFJbW9kZSIpCisgICAgICAgICAgICAo bWF0Y2hfdGVzdCAibG93X2lvX2FkZHJlc3Nfb3BlcmFuZCAoWEVYUCAob3AsIDApLCBQbW9k ZSkiKSkpKQorCiA7OyBSZXR1cm4gdHJ1ZSBpZiBPUCBpcyBhIHZhbGlkIGFkZHJlc3MgZm9y IGhpZ2ggaGFsZiBvZiBJL08gc3BhY2UuCiAoZGVmaW5lX3ByZWRpY2F0ZSAiaGlnaF9pb19h ZGRyZXNzX29wZXJhbmQiCiAgIChhbmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCkBAIC04 NiwxMiArOTYsNDcgQEAgKGRlZmluZV9wcmVkaWNhdGUgImNvbnN0MV9vcGVyYW5kIgogICAo YW5kIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQogICAgICAgIChtYXRjaF90ZXN0ICJvcCA9 PSBDT05TVDFfUlRYIChtb2RlKSIpKSkKIAorOzsgUmV0dXJuIDEgaWYgT1AgaXMgdGhlIGNv bnN0YW50IGludGVnZXIgNyBmb3IgTU9ERS4KKyhkZWZpbmVfcHJlZGljYXRlICJjb25zdDdf b3BlcmFuZCIKKyAgKGFuZCAobWF0Y2hfY29kZSAiY29uc3RfaW50IikKKyAgICAgICAobWF0 Y2hfdGVzdCAiSU5UVkFMKG9wKSA9PSA3IikpKQorCis7OyBSZXR1cm4gMSBpZiBPUCBpcyB0 aGUgY29uc3RhbnQgaW50ZWdlciAxNSBmb3IgTU9ERS4KKyhkZWZpbmVfcHJlZGljYXRlICJj b25zdDE1X29wZXJhbmQiCisgIChhbmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisgICAg ICAgKG1hdGNoX3Rlc3QgIklOVFZBTChvcCkgPT0gMTUiKSkpCisKKzs7IFJldHVybiAxIGlm IE9QIGlzIHRoZSBjb25zdGFudCBpbnRlZ2VyIDIzIGZvciBNT0RFLgorKGRlZmluZV9wcmVk aWNhdGUgImNvbnN0MjNfb3BlcmFuZCIKKyAgKGFuZCAobWF0Y2hfY29kZSAiY29uc3RfaW50 IikKKyAgICAgICAobWF0Y2hfdGVzdCAiSU5UVkFMKG9wKSA9PSAyMyIpKSkKKworOzsgUmV0 dXJuIDEgaWYgT1AgaXMgdGhlIGNvbnN0YW50IGludGVnZXIgMzEgZm9yIE1PREUuCisoZGVm aW5lX3ByZWRpY2F0ZSAiY29uc3QzMV9vcGVyYW5kIgorICAoYW5kIChtYXRjaF9jb2RlICJj b25zdF9pbnQiKQorICAgICAgIChtYXRjaF90ZXN0ICJJTlRWQUwob3ApID09IDMxIikpKQor CiAKIDs7IFJldHVybiAxIGlmIE9QIGlzIGNvbnN0YW50IGludGVnZXIgMC4uNyBmb3IgTU9E RS4KIChkZWZpbmVfcHJlZGljYXRlICJjb25zdF8wX3RvXzdfb3BlcmFuZCIKICAgKGFuZCAo bWF0Y2hfY29kZSAiY29uc3RfaW50IikKICAgICAgICAobWF0Y2hfdGVzdCAiSU5fUkFOR0Ug KElOVFZBTCAob3ApLCAwLCA3KSIpKSkKIAorOzsgUmV0dXJuIDEgaWYgT1AgaXMgY29uc3Rh bnQgaW50ZWdlciAwLi4xNSBmb3IgTU9ERS4KKyhkZWZpbmVfcHJlZGljYXRlICJjb25zdF8w X3RvXzE1X29wZXJhbmQiCisgIChhbmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisgICAg ICAgKG1hdGNoX3Rlc3QgIklOX1JBTkdFIChJTlRWQUwgKG9wKSwgMCwgMTUpIikpKQorCis7 OyBSZXR1cm4gMSBpZiBPUCBpcyBjb25zdGFudCBpbnRlZ2VyIDAuLjIzIGZvciBNT0RFLgor KGRlZmluZV9wcmVkaWNhdGUgImNvbnN0XzBfdG9fMjNfb3BlcmFuZCIKKyAgKGFuZCAobWF0 Y2hfY29kZSAiY29uc3RfaW50IikKKyAgICAgICAobWF0Y2hfdGVzdCAiSU5fUkFOR0UgKElO VFZBTCAob3ApLCAwLCAyMykiKSkpCisKKzs7IFJldHVybiAxIGlmIE9QIGlzIGNvbnN0YW50 IGludGVnZXIgMC4uMzEgZm9yIE1PREUuCisoZGVmaW5lX3ByZWRpY2F0ZSAiY29uc3RfMF90 b18zMV9vcGVyYW5kIgorICAoYW5kIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQorICAgICAg IChtYXRjaF90ZXN0ICJJTl9SQU5HRSAoSU5UVkFMIChvcCksIDAsIDMxKSIpKSkKKwogOzsg UmV0dXJuIDEgaWYgT1AgaXMgY29uc3RhbnQgaW50ZWdlciAyLi43IGZvciBNT0RFLgogKGRl ZmluZV9wcmVkaWNhdGUgImNvbnN0XzJfdG9fN19vcGVyYW5kIgogICAoYW5kIChtYXRjaF9j b2RlICJjb25zdF9pbnQiKQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2F2ci9wcjEwOTkwNy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2F2ci9wcjEwOTkw Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hN2NiNDdiYjEz MQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hdnIvcHIx MDk5MDcuYwpAQCAtMCwwICsxLDE1NiBAQAorLyogeyBkZy1vcHRpb25zIHsgLU9zIC1kcCB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3Qge3Nocn0gfSB9ICov CisKK3R5cGVkZWYgX19VSU5UOF9UWVBFX18gdWludDhfdDsKK3R5cGVkZWYgX19VSU5UMTZf VFlQRV9fIHVpbnQxNl90OwordHlwZWRlZiBfX1VJTlQzMl9UWVBFX18gdWludDMyX3Q7CisK KyNkZWZpbmUgU0ZSICgqICh2b2xhdGlsZSB1aW50OF90KikgKDAgKyBfX0FWUl9TRlJfT0ZG U0VUX18pKQorCisjZGVmaW5lIEhJU0ZSICgqICh2b2xhdGlsZSB1aW50OF90KikgKDB4MjAg KyBfX0FWUl9TRlJfT0ZGU0VUX18pKQorCit1aW50OF90IGNzZXRfMzJiaXQzMSAodWludDMy X3QgeCkKK3sKKyAgICByZXR1cm4gKHggJiAoMXVsIDw8IDMxKSkgPyAxIDogMDsKK30KKwor dWludDhfdCBjc2V0XzI0Yml0MjMgKF9fdWludDI0IHgpCit7CisgICAgcmV0dXJuICh4ICYg KDF1bCA8PCAyMykpID8gMSA6IDA7Cit9CisKK3VpbnQ4X3QgY3NldF8zMmJpdDMwICh1aW50 MzJfdCB4KQoreworICAgIHJldHVybiAoeCAmICgxdWwgPDwgMzApKSA/IDEgOiAwOworfQor Cit1aW50OF90IGNzZXRfMzJiaXQzMF9ub3QgKHVpbnQzMl90IHgpCit7CisgICAgcmV0dXJu ICh4ICYgKDF1bCA8PCAzMCkpID8gMCA6IDE7Cit9CisKK3VpbnQ4X3QgY3NldF8zMmJpdDMx X25vdCAodWludDMyX3QgeCkKK3sKKyAgICByZXR1cm4gKHggJiAoMXVsIDw8IDMxKSkgPyAw IDogMTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKwordWludDhfdCBjc2V0X3Nmcl83ICh1aW50MzJfdCB4KQoreworICAgIHJldHVy biAoU0ZSICYgKDEgPDwgNykpID8gMSA6IDA7Cit9CisKK3VpbnQ4X3QgY3NldF9zZnJfN25v dCAodm9pZCkKK3sKKyAgICByZXR1cm4gKFNGUiAmICgxIDw8IDcpKSA/IDAgOiAxOworfQor Cit1aW50OF90IGNzZXRfc2ZyXzUgKHZvaWQpCit7CisgICAgcmV0dXJuIChTRlIgJiAoMSA8 PCA1KSkgPyAxIDogMDsKK30KKwordWludDhfdCBjc2V0X3Nmcl81bm90ICh2b2lkKQorewor ICAgIHJldHVybiAoU0ZSICYgKDEgPDwgNSkpID8gMCA6IDE7Cit9CisKK2NoYXIgeno7CisK K3ZvaWQgc2V0MF9zZnJfNV8xICh2b2lkKQoreworICAgIGlmIChTRlIgJiAoMSA8PCA1KSkK KyAgICAgICAgenogPSAwOworfQorCit2b2lkIHNldDBfc2ZyXzVfMCAodm9pZCkKK3sKKyAg ICBpZiAoISAoU0ZSICYgKDEgPDwgNSkpKQorICAgICAgICB6eiA9IDA7Cit9CisKK3ZvaWQg c2V0MF9zZnJfN18xICh2b2lkKQoreworICAgIGlmIChTRlIgJiAoMSA8PCA3KSkKKyAgICAg ICAgenogPSAwOworfQorCit2b2lkIHNldDBfc2ZyXzdfMCAodm9pZCkKK3sKKyAgICBpZiAo ISAoU0ZSICYgKDEgPDwgNykpKQorICAgICAgICB6eiA9IDA7Cit9CisKK3ZvaWQgc2V0MF9z ZnJfMF8xICh2b2lkKQoreworICAgIGlmIChTRlIgJiAoMSA8PCAwKSkKKyAgICAgICAgenog PSAwOworfQorCit2b2lkIHNldDBfc2ZyXzBfMCAodm9pZCkKK3sKKyAgICBpZiAoISAoU0ZS ICYgKDEgPDwgMCkpKQorICAgICAgICB6eiA9IDA7Cit9CisKKworLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordWludDhfdCBjc2V0X2hpc2Zy XzcgKHVpbnQzMl90IHgpCit7CisgICAgcmV0dXJuIChISVNGUiAmICgxIDw8IDcpKSA/IDEg OiAwOworfQorCit1aW50OF90IGNzZXRfaGlzZnJfN25vdCAodm9pZCkKK3sKKyAgICByZXR1 cm4gKEhJU0ZSICYgKDEgPDwgNykpID8gMCA6IDE7Cit9CisKK3VpbnQ4X3QgY3NldF9oaXNm cl81ICh2b2lkKQoreworICAgIHJldHVybiAoSElTRlIgJiAoMSA8PCA1KSkgPyAxIDogMDsK K30KKwordWludDhfdCBjc2V0X2hpc2ZyXzVub3QgKHZvaWQpCit7CisgICAgcmV0dXJuIChI SVNGUiAmICgxIDw8IDUpKSA/IDAgOiAxOworfQorCitjaGFyIHp6OworCit2b2lkIHNldDBf aGlzZnJfNV8xICh2b2lkKQoreworICAgIGlmIChISVNGUiAmICgxIDw8IDUpKQorICAgICAg ICB6eiA9IDA7Cit9CisKK3ZvaWQgc2V0MF9oaXNmcl81XzAgKHZvaWQpCit7CisgICAgaWYg KCEgKEhJU0ZSICYgKDEgPDwgNSkpKQorICAgICAgICB6eiA9IDA7Cit9CisKK3ZvaWQgc2V0 MF9oaXNmcl83XzEgKHZvaWQpCit7CisgICAgaWYgKEhJU0ZSICYgKDEgPDwgNykpCisgICAg ICAgIHp6ID0gMDsKK30KKwordm9pZCBzZXQwX2hpc2ZyXzdfMCAodm9pZCkKK3sKKyAgICBp ZiAoISAoSElTRlIgJiAoMSA8PCA3KSkpCisgICAgICAgIHp6ID0gMDsKK30KKwordm9pZCBz ZXQwX2hpc2ZyXzBfMSAodm9pZCkKK3sKKyAgICBpZiAoSElTRlIgJiAoMSA8PCAwKSkKKyAg ICAgICAgenogPSAwOworfQorCit2b2lkIHNldDBfaGlzZnJfMF8wICh2b2lkKQoreworICAg IGlmICghIChISVNGUiAmICgxIDw8IDApKSkKKyAgICAgICAgenogPSAwOworfQpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2F2ci90b3J0dXJlL3ByMTA5OTA3LTEu YyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hdnIvdG9ydHVyZS9wcjEwOTkwNy0xLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk3NWFmYjI3NzAwCi0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2F2ci90b3J0dXJl L3ByMTA5OTA3LTEuYwpAQCAtMCwwICsxLDk1IEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisK KyNkZWZpbmUgTkkgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fLF9fbm9jbG9uZV9fKSkK KyNkZWZpbmUgQUkgc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18pKQorCit0eXBlZGVmIF9fVUlOVDhfVFlQRV9fIHVpbnQ4X3Q7Cit0eXBlZGVm IF9fVUlOVDE2X1RZUEVfXyB1aW50MTZfdDsKK3R5cGVkZWYgX191aW50MjQgdWludDI0X3Q7 Cit0eXBlZGVmIF9fVUlOVDMyX1RZUEVfXyB1aW50MzJfdDsKKworQUkgdWludDE2X3QgQXN3 YXAxNiAodWludDE2X3QgZGF0YSkKK3sKKyAgdWludDE2X3QgZCA9IDA7CisgIGlmIChkYXRh ICYgKDF1IDw8IDE1KSkgZCB8PSAxdSA8PCA2OworICBpZiAoZGF0YSAmICgxdSA8PCAxNCkp IGQgfD0gMXUgPDwgMTM7CisgIGlmIChkYXRhICYgKDF1IDw8IDEzKSkgZCB8PSAxdSA8PCAx NDsKKyAgaWYgKGRhdGEgJiAoMXUgPDwgMTIpKSBkIHw9IDF1IDw8IDE1OworICByZXR1cm4g ZDsKK30KKworQUkgdWludDMyX3QgQXN3YXAzMiAodWludDMyX3QgZGF0YSkKK3sKKyAgdWlu dDMyX3QgZCA9IDA7CisgIGlmIChkYXRhICYgKDF1bCA8PCAzMSkpIGQgfD0gMXVsIDw8IDY7 CisgIGlmIChkYXRhICYgKDF1bCA8PCAzMCkpIGQgfD0gMXVsIDw8IDEzOworICBpZiAoZGF0 YSAmICgxdWwgPDwgMTMpKSBkIHw9IDF1bCA8PCAzMDsKKyAgaWYgKGRhdGEgJiAoMXVsIDw8 IDEyKSkgZCB8PSAxdWwgPDwgMzE7CisgIHJldHVybiBkOworfQorCitBSSB1aW50MjRfdCBB c3dhcDI0ICh1aW50MjRfdCBkYXRhKQoreworICB1aW50MjRfdCBkID0gMDsKKyAgaWYgKGRh dGEgJiAoMXVsIDw8IDIzKSkgZCB8PSAxdWwgPDwgNjsKKyAgaWYgKGRhdGEgJiAoMXVsIDw8 IDIyKSkgZCB8PSAxdWwgPDwgMTM7CisgIGlmIChkYXRhICYgKDF1bCA8PCAxMykpIGQgfD0g MXVsIDw8IDIyOworICBpZiAoZGF0YSAmICgxdWwgPDwgMTIpKSBkIHw9IDF1bCA8PCAyMzsK KyAgcmV0dXJuIGQ7Cit9CisKK0FJIHVpbnQ4X3QgQXN3YXA4ICh1aW50OF90IGRhdGEpCit7 CisgIHVpbnQ4X3QgZCA9IDA7CisgIGlmIChkYXRhICYgKDEgPDwgNykpIGQgfD0gMSA8PCAy OworICBpZiAoZGF0YSAmICgxIDw8IDYpKSBkIHw9IDEgPDwgMzsKKyAgaWYgKGRhdGEgJiAo MSA8PCAzKSkgZCB8PSAxIDw8IDY7CisgIGlmIChkYXRhICYgKDEgPDwgMikpIGQgfD0gMSA8 PCA3OworICByZXR1cm4gZDsKK30KKworTkkgdWludDhfdCBOc3dhcDggKHVpbnQ4X3QgZGF0 YSkgeyByZXR1cm4gQXN3YXA4IChkYXRhKTsgfQorTkkgdWludDE2X3QgTnN3YXAxNiAodWlu dDE2X3QgZGF0YSkgeyByZXR1cm4gQXN3YXAxNiAoZGF0YSk7IH0KK05JIHVpbnQyNF90IE5z d2FwMjQgKHVpbnQyNF90IGRhdGEpIHsgcmV0dXJuIEFzd2FwMjQgKGRhdGEpOyB9CitOSSB1 aW50MzJfdCBOc3dhcDMyICh1aW50MzJfdCBkYXRhKSB7IHJldHVybiBBc3dhcDMyIChkYXRh KTsgfQorCit2b2lkIHRlc3Q4ICh2b2lkKQoreworICBpZiAoTnN3YXA4ICgweGFhKSAhPSBB c3dhcDggKDB4YWEpKSBfX2J1aWx0aW5fYWJvcnQoKTsKKyAgaWYgKE5zd2FwOCAoMHhjYykg IT0gQXN3YXA4ICgweGNjKSkgX19idWlsdGluX2Fib3J0KCk7CisgIGlmIChOc3dhcDggKDB4 ZjApICE9IEFzd2FwOCAoMHhmMCkpIF9fYnVpbHRpbl9hYm9ydCgpOworfQorCit2b2lkIHRl c3QxNiAodm9pZCkKK3sKKyAgaWYgKE5zd2FwMTYgKDB4YWFhYSkgIT0gQXN3YXAxNiAoMHhh YWFhKSkgX19idWlsdGluX2Fib3J0KCk7CisgIGlmIChOc3dhcDE2ICgweGNjY2MpICE9IEFz d2FwMTYgKDB4Y2NjYykpIF9fYnVpbHRpbl9hYm9ydCgpOworICBpZiAoTnN3YXAxNiAoMHhm MGYwKSAhPSBBc3dhcDE2ICgweGYwZjApKSBfX2J1aWx0aW5fYWJvcnQoKTsKKyAgaWYgKE5z d2FwMTYgKDB4ZmYwMCkgIT0gQXN3YXAxNiAoMHhmZjAwKSkgX19idWlsdGluX2Fib3J0KCk7 Cit9CisKK3ZvaWQgdGVzdDI0ICh2b2lkKQoreworICBpZiAoTnN3YXAyNCAoMHhhYWFhYWEp ICE9IEFzd2FwMjQgKDB4YWFhYWFhKSkgX19idWlsdGluX2Fib3J0KCk7CisgIGlmIChOc3dh cDI0ICgweGNjY2NjYykgIT0gQXN3YXAyNCAoMHhjY2NjY2MpKSBfX2J1aWx0aW5fYWJvcnQo KTsKKyAgaWYgKE5zd2FwMjQgKDB4ZjBmMGYwKSAhPSBBc3dhcDI0ICgweGYwZjBmMCkpIF9f YnVpbHRpbl9hYm9ydCgpOworICBpZiAoTnN3YXAyNCAoMHhmZmYwMDApICE9IEFzd2FwMjQg KDB4ZmZmMDAwKSkgX19idWlsdGluX2Fib3J0KCk7Cit9CisKK3ZvaWQgdGVzdDMyICh2b2lk KQoreworICBpZiAoTnN3YXAzMiAoMHhhYWFhYWFhYSkgIT0gQXN3YXAzMiAoMHhhYWFhYWFh YSkpIF9fYnVpbHRpbl9hYm9ydCgpOworICBpZiAoTnN3YXAzMiAoMHhjY2NjY2NjYykgIT0g QXN3YXAzMiAoMHhjY2NjY2NjYykpIF9fYnVpbHRpbl9hYm9ydCgpOworICBpZiAoTnN3YXAz MiAoMHhmMGYwZjBmMCkgIT0gQXN3YXAzMiAoMHhmMGYwZjBmMCkpIF9fYnVpbHRpbl9hYm9y dCgpOworICBpZiAoTnN3YXAzMiAoMHhmZjAwZmYwMCkgIT0gQXN3YXAzMiAoMHhmZjAwZmYw MCkpIF9fYnVpbHRpbl9hYm9ydCgpOworICBpZiAoTnN3YXAzMiAoMHhmZmZmMDAwMCkgIT0g QXN3YXAzMiAoMHhmZmZmMDAwMCkpIF9fYnVpbHRpbl9hYm9ydCgpOworfQorCitpbnQgbWFp biAodm9pZCkKK3sKKyAgdGVzdDggKCk7CisgIHRlc3QxNiAoKTsKKyAgdGVzdDI0ICgpOwor ICB0ZXN0MzIgKCk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2F2ci90b3J0dXJlL3ByMTA5OTA3LTIuYyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9hdnIvdG9ydHVyZS9wcjEwOTkwNy0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRiMGNjNzJlNTkwCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2F2ci90b3J0dXJlL3ByMTA5OTA3LTIuYwpAQCAt MCwwICsxLDI5NCBAQAorLyogeyBkZy1kbyBydW4gfSAqLworCisjZGVmaW5lIE5JIF9fYXR0 cmlidXRlX18oKF9fbm9pbmxpbmVfXyxfX25vY2xvbmVfXykpCisjZGVmaW5lIEFJIHN0YXRp YyBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKwordHlw ZWRlZiBfX1VJTlQ4X1RZUEVfXyB1aW50OF90OwordHlwZWRlZiBfX1VJTlQxNl9UWVBFX18g dWludDE2X3Q7Cit0eXBlZGVmIF9fdWludDI0IHVpbnQyNF90OwordHlwZWRlZiBfX1VJTlQz Ml9UWVBFX18gdWludDMyX3Q7CisKK3R5cGVkZWYgX19JTlQzMl9UWVBFX18gaW50MzJfdDsK KworI2RlZmluZSBBREQoVyxCLE4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg aWYgKCFjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBf X2FzbSAoInNicmMgJVQxJVQyICQgc3ViaSAlMCwlbjMiICAgICAgXAorICAgICAgICAgICAg ICAgOiAiK2QiIChiKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg OiAiciIgKG51bSksICJuIiAoQiksICJuIiAoTikpOyAgXAorICAgICAgZWxzZSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAobnVtICYgKCh1 aW50IyNXIyNfdCkgMSA8PCBCKSkgICAgICAgXAorICAgICAgICAgIGIgKz0gTjsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKK05JIHVpbnQ4 X3QgQWZ1bjEgKHVpbnQzMl90IG51bSkKK3sKKyAgdWludDhfdCBiID0gMDsKKyAgaW50IGMg PSAwOworICBBREQgKDMyLCAzMSwgMSk7CisgIEFERCAoMzIsIDI5LCAxKTsKKyAgQUREICgz MiwgMTMsIDEpOworICByZXR1cm4gYjsKK30KK05JIHVpbnQ4X3QgQ2Z1bjEgKHVpbnQzMl90 IG51bSkKK3sKKyAgdWludDhfdCBiID0gMDsKKyAgaW50IGMgPSAxOworICBBREQgKDMyLCAz MSwgMSk7CisgIEFERCAoMzIsIDI5LCAxKTsKKyAgQUREICgzMiwgMTMsIDEpOworICByZXR1 cm4gYjsKK30KKworTkkgdWludDhfdCBBZnVuMiAodWludDMyX3QgbnVtKQoreworICB1aW50 OF90IGIgPSAwOworICBpbnQgYyA9IDA7CisgIEFERCAoMzIsIDMxLCAtMSk7CisgIEFERCAo MzIsIDI5LCAxKTsKKyAgQUREICgzMiwgMTMsIDEpOworICByZXR1cm4gYjsKK30KK05JIHVp bnQ4X3QgQ2Z1bjIgKHVpbnQzMl90IG51bSkKK3sKKyAgdWludDhfdCBiID0gMDsKKyAgaW50 IGMgPSAxOworICBBREQgKDMyLCAzMSwgLTEpOworICBBREQgKDMyLCAyOSwgMSk7CisgIEFE RCAoMzIsIDEzLCAxKTsKKyAgcmV0dXJuIGI7Cit9CisKK05JIHVpbnQ4X3QgQWZ1bjMgKHVp bnQzMl90IG51bSkKK3sKKyAgdWludDhfdCBiID0gMDsKKyAgaW50IGMgPSAwOworICBBREQg KDMyLCAxMywgMSk7CisgIEFERCAoMzIsIDI5LCAxKTsKKyAgQUREICgzMiwgMzEsIDEpOwor ICByZXR1cm4gYjsKK30KK05JIHVpbnQ4X3QgQ2Z1bjMgKHVpbnQzMl90IG51bSkKK3sKKyAg dWludDhfdCBiID0gMDsKKyAgaW50IGMgPSAxOworICBBREQgKDMyLCAxMywgMSk7CisgIEFE RCAoMzIsIDI5LCAxKTsKKyAgQUREICgzMiwgMzEsIDEpOworICByZXR1cm4gYjsKK30KKwor TkkgdWludDhfdCBBZnVuNCAodWludDMyX3QgbnVtKQoreworICB1aW50OF90IGIgPSAwOwor ICBpbnQgYyA9IDA7CisgIEFERCAoMzIsIDEzLCAtMSk7CisgIEFERCAoMzIsIDI5LCAxKTsK KyAgQUREICgzMiwgMzEsIC0xKTsKKyAgcmV0dXJuIGI7Cit9CitOSSB1aW50OF90IENmdW40 ICh1aW50MzJfdCBudW0pCit7CisgIHVpbnQ4X3QgYiA9IDA7CisgIGludCBjID0gMTsKKyAg QUREICgzMiwgMTMsIC0xKTsKKyAgQUREICgzMiwgMjksIDEpOworICBBREQgKDMyLCAzMSwg LTEpOworICByZXR1cm4gYjsKK30KKwordm9pZCB0ZXN0MzJfMCAodWludDMyX3QgeCkKK3sK KyAgaWYgKEFmdW4xICh4KSAhPSBDZnVuMSAoeCkpIF9fYnVpbHRpbl9hYm9ydCgpOworICBp ZiAoQWZ1bjIgKHgpICE9IENmdW4yICh4KSkgX19idWlsdGluX2Fib3J0KCk7CisgIGlmIChB ZnVuMyAoeCkgIT0gQ2Z1bjMgKHgpKSBfX2J1aWx0aW5fYWJvcnQoKTsKKyAgaWYgKEFmdW40 ICh4KSAhPSBDZnVuNCAoeCkpIF9fYnVpbHRpbl9hYm9ydCgpOworfQorCit2b2lkIHRlc3Qz Ml8xICh1aW50MzJfdCB4KQoreworICB0ZXN0MzJfMCAoeCk7CisgIHRlc3QzMl8wICh+eCk7 Cit9CisKK3ZvaWQgdGVzdDMyICh2b2lkKQoreworICB0ZXN0MzJfMSAoMCk7CisgIHRlc3Qz Ml8xICgweDU1NTU1NTU1KTsKKyAgdGVzdDMyXzEgKDB4Y2NjY2NjY2MpOworICB0ZXN0MzJf MSAoMHgwZjBmMGYwZik7CisgIHRlc3QzMl8xICgweDAwZmYwMGZmKTsKKyAgdGVzdDMyXzEg KDB4MDAwMGZmZmYpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitOSSB1aW50OF90IEFm dW41ICh1aW50MjRfdCBudW0pCit7CisgIHVpbnQ4X3QgYiA9IDA7CisgIGludCBjID0gMDsK KyAgQUREICgyNCwgMjMsIDEpOworICBBREQgKDI0LCAyMSwgMSk7CisgIEFERCAoMjQsIDEz LCAxKTsKKyAgcmV0dXJuIGI7Cit9CitOSSB1aW50OF90IENmdW41ICh1aW50MjRfdCBudW0p Cit7CisgIHVpbnQ4X3QgYiA9IDA7CisgIGludCBjID0gMTsKKyAgQUREICgyNCwgMjMsIDEp OworICBBREQgKDI0LCAyMSwgMSk7CisgIEFERCAoMjQsIDEzLCAxKTsKKyAgcmV0dXJuIGI7 Cit9CisKK05JIHVpbnQ4X3QgQWZ1bjYgKHVpbnQyNF90IG51bSkKK3sKKyAgdWludDhfdCBi ID0gMDsKKyAgaW50IGMgPSAwOworICBBREQgKDI0LCAyMywgLTEpOworICBBREQgKDI0LCAy MSwgLTEpOworICBBREQgKDI0LCAxMywgMSk7CisgIHJldHVybiBiOworfQorTkkgdWludDhf dCBDZnVuNiAodWludDI0X3QgbnVtKQoreworICB1aW50OF90IGIgPSAwOworICBpbnQgYyA9 IDE7CisgIEFERCAoMjQsIDIzLCAtMSk7CisgIEFERCAoMjQsIDIxLCAtMSk7CisgIEFERCAo MjQsIDEzLCAxKTsKKyAgcmV0dXJuIGI7Cit9CisKK05JIHVpbnQ4X3QgQWZ1bjcgKHVpbnQy NF90IG51bSkKK3sKKyAgdWludDhfdCBiID0gMDsKKyAgaW50IGMgPSAwOworICBBREQgKDI0 LCAwLCAxKTsKKyAgQUREICgyNCwgMjEsIDEpOworICBBREQgKDI0LCAyMywgMSk7CisgIHJl dHVybiBiOworfQorTkkgdWludDhfdCBDZnVuNyAodWludDI0X3QgbnVtKQoreworICB1aW50 OF90IGIgPSAwOworICBpbnQgYyA9IDE7CisgIEFERCAoMjQsIDAsIDEpOworICBBREQgKDI0 LCAyMSwgMSk7CisgIEFERCAoMjQsIDIzLCAxKTsKKyAgcmV0dXJuIGI7Cit9CisKK3ZvaWQg dGVzdDI0XzAgKHVpbnQyNF90IHgpCit7CisgIGlmIChBZnVuNSAoeCkgIT0gQ2Z1bjUgKHgp KSBfX2J1aWx0aW5fYWJvcnQoKTsKKyAgaWYgKEFmdW42ICh4KSAhPSBDZnVuNiAoeCkpIF9f YnVpbHRpbl9hYm9ydCgpOworICBpZiAoQWZ1bjcgKHgpICE9IENmdW43ICh4KSkgX19idWls dGluX2Fib3J0KCk7Cit9CisKK3ZvaWQgdGVzdDI0XzEgKHVpbnQyNF90IHgpCit7CisgIHRl c3QyNF8wICh4KTsKKyAgdGVzdDI0XzAgKH54KTsKK30KKwordm9pZCB0ZXN0MjQgKHZvaWQp Cit7CisgIHRlc3QyNF8xICgwKTsKKyAgdGVzdDI0XzEgKDB4NTU1NTU1KTsKKyAgdGVzdDI0 XzEgKDB4Y2NjY2NjKTsKKyAgdGVzdDI0XzEgKDA3MDcwNzA3KTsKKyAgdGVzdDI0XzEgKDB4 MGYwZjBmKTsKKyAgdGVzdDI0XzEgKDB4MDAwZmZmKTsKK30KKworLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKworTkkgdWludDhfdCBBZnVuMTUgKHVpbnQxNl90IG51bSkKK3sKKyAgdWludDhfdCBi ID0gMDsKKyAgaW50IGMgPSAwOworICBBREQgKDE2LCAxNSwgMSk7CisgIEFERCAoMTYsICAy LCAxKTsKKyAgQUREICgxNiwgMTMsIDEpOworICByZXR1cm4gYjsKK30KK05JIHVpbnQ4X3Qg Q2Z1bjE1ICh1aW50MTZfdCBudW0pCit7CisgIHVpbnQ4X3QgYiA9IDA7CisgIGludCBjID0g MTsKKyAgQUREICgxNiwgMTUsIDEpOworICBBREQgKDE2LCAgMiwgMSk7CisgIEFERCAoMTYs IDEzLCAxKTsKKyAgcmV0dXJuIGI7Cit9CisKK05JIHVpbnQ4X3QgQWZ1bjE2ICh1aW50MTZf dCBudW0pCit7CisgIHVpbnQ4X3QgYiA9IDA7CisgIGludCBjID0gMDsKKyAgQUREICgxNiwg MTUsIC0xKTsKKyAgQUREICgxNiwgIDIsIDEpOworICBBREQgKDE2LCAxMywgMSk7CisgIHJl dHVybiBiOworfQorTkkgdWludDhfdCBDZnVuMTYgKHVpbnQxNl90IG51bSkKK3sKKyAgdWlu dDhfdCBiID0gMDsKKyAgaW50IGMgPSAxOworICBBREQgKDE2LCAxNSwgLTEpOworICBBREQg KDE2LCAgMiwgMSk7CisgIEFERCAoMTYsIDEzLCAxKTsKKyAgcmV0dXJuIGI7Cit9CisKK05J IHVpbnQ4X3QgQWZ1bjE3ICh1aW50MTZfdCBudW0pCit7CisgIHVpbnQ4X3QgYiA9IDA7Cisg IGludCBjID0gMDsKKyAgQUREICgxNiwgOSwgMSk7CisgIEFERCAoMTYsIDIsIDEpOworICBB REQgKDE2LCAxNSwgMSk7CisgIHJldHVybiBiOworfQorTkkgdWludDhfdCBDZnVuMTcgKHVp bnQxNl90IG51bSkKK3sKKyAgdWludDhfdCBiID0gMDsKKyAgaW50IGMgPSAxOworICBBREQg KDE2LCA5LCAxKTsKKyAgQUREICgxNiwgMiwgMSk7CisgIEFERCAoMTYsIDE1LCAxKTsKKyAg cmV0dXJuIGI7Cit9CisKK3ZvaWQgdGVzdDE2XzAgKHVpbnQxNl90IHgpCit7CisgIGlmIChB ZnVuMTUgKHgpICE9IENmdW4xNSAoeCkpIF9fYnVpbHRpbl9hYm9ydCgpOworICBpZiAoQWZ1 bjE2ICh4KSAhPSBDZnVuMTYgKHgpKSBfX2J1aWx0aW5fYWJvcnQoKTsKKyAgaWYgKEFmdW4x NyAoeCkgIT0gQ2Z1bjE3ICh4KSkgX19idWlsdGluX2Fib3J0KCk7Cit9CisKK3ZvaWQgdGVz dDE2XzEgKHVpbnQxNl90IHgpCit7CisgIHRlc3QxNl8wICh4KTsKKyAgdGVzdDE2XzAgKH54 KTsKK30KKwordm9pZCB0ZXN0MTYgKHZvaWQpCit7CisgIHRlc3QxNl8xICgwKTsKKyAgdGVz dDE2XzEgKDB4NTU1NSk7CisgIHRlc3QxNl8xICgweGNjY2MpOworICB0ZXN0MTZfMSAoMHgw ZjBmKTsKKyAgdGVzdDE2XzEgKDB4MDBmZik7Cit9CisKK2ludCBtYWluICh2b2lkKQorewor ICB0ZXN0MzIgKCk7CisgIHRlc3QyNCAoKTsKKyAgdGVzdDE2ICgpOworICByZXR1cm4gMDsK K30K --------------fI4GeG3MkLE0zw55JyQ3w9z0--