From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 90244 invoked by alias); 11 Jul 2017 07:29:35 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 90208 invoked by uid 89); 11 Jul 2017 07:29:33 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.2 required=5.0 tests=AWL,BAYES_00,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=no version=3.3.2 spammy= X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-yw0-f181.google.com Received: from mail-yw0-f181.google.com (HELO mail-yw0-f181.google.com) (209.85.161.181) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 11 Jul 2017 07:29:32 +0000 Received: by mail-yw0-f181.google.com with SMTP id a12so45275205ywh.3; Tue, 11 Jul 2017 00:29:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=RkbJYfyJaI70++4hJXPJVr648CQ7HAiRF6Tu/VqkXFw=; b=VZZpfZdFI+6bkotyRtGV2FbfG6DJ+JuflXJVyDQtHEn1dmA9AtPzH4g3mLTbDu/JHR ncQqRYDgBewR32jhnvX+ASzdGu6bZIbT+QEUUqruqpNp/vGYGeRfOrhv90iFRbpN5ABJ JvfvelZchiJ6hnU992V/q6t+gO9XvxXkB2wKKBNjegKSI6Hq++KOGKc+n6HjbuQzbDir nwo9SbojhwpeKKuL8btxXONCVp0bvg1c06HNsDkK+haA/beYFaE7zuPiiY/jT/1EsLwB YeyJxZjjQG/or8d5o5pS3A21kRlFX8n53LvxYh50+IKWWNGNOf8HOebRj6ECLPsu7/uC xP4A== X-Gm-Message-State: AIVw111D4hB4UIbQtyoRlqihMNVJgguw/HlmDNRDkLkdQ1MHcdedXL21 0mua3wce297h4ANWFbt37dC+vDfcG7dK X-Received: by 10.129.137.198 with SMTP id z189mr3849333ywf.56.1499758170473; Tue, 11 Jul 2017 00:29:30 -0700 (PDT) MIME-Version: 1.0 Received: by 10.129.40.3 with HTTP; Tue, 11 Jul 2017 00:29:29 -0700 (PDT) From: Yuri Gribov Date: Tue, 11 Jul 2017 07:29:00 -0000 Message-ID: Subject: [PATCHv4][PR 57371] Remove useless floating point casts in comparisons To: GCC Patches Cc: Joseph Myers , glisse@gcc.gnu.org Content-Type: multipart/mixed; boundary="94eb2c06bf26003b16055405a932" X-IsSubscribed: yes X-SW-Source: 2017-07/txt/msg00498.txt.bz2 --94eb2c06bf26003b16055405a932 Content-Type: text/plain; charset="UTF-8" Content-length: 477 Hi all, This is an updated version of patch in https://gcc.gnu.org/ml/gcc-patches/2017-07/msg00409.html . It prevents optimization in presense of sNaNs (and qNaNs when comparison operator is > >= < <=) to preserve FP exceptions. Note that I had to use -fsignaling-nans in pr57371-5.c test because by default this option is off and some existing patterns in match.pd happily optimize NaN comparisons, even with sNaNs (!). Bootstrapped and regtested on x64. Ok for trunk? -Y --94eb2c06bf26003b16055405a932 Content-Type: application/octet-stream; name="pr57371-4.patch" Content-Disposition: attachment; filename="pr57371-4.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j4z99etq1 Content-length: 23461 MjAxNy0wNy0xMCAgWXVyeSBHcmlib3YgIDx0ZXRyYTIwMDVAZ21haWwuY29t PgoKCVBSIHRyZWUtb3B0aW1pemF0aW9uLzU3MzcxCgkqIG1hdGNoLnBkOiBO ZXcgcGF0dGVybi4KCSogdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjU3Mzcx LTEuYzogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1 NzM3MS0yLmM6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvYy1jKystY29tbW9u L3ByNTczNzEtMy5jOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2MtYysrLWNv bW1vbi9wcjU3MzcxLTQuYzogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9nY2Mu ZGcvcHI1NzM3MS01LmM6IE5ldyB0ZXN0LgoKZGlmZiAtcnVwTiBnY2MvZ2Nj L21hdGNoLnBkIGdjYy01NzM3MS9nY2MvbWF0Y2gucGQKLS0tIGdjYy9nY2Mv bWF0Y2gucGQJMjAxNy0wNy0wNyAwOTo0Nzo0Mi4wMDAwMDAwMDAgKzAyMDAK KysrIGdjYy01NzM3MS9nY2MvbWF0Y2gucGQJMjAxNy0wNy0xMCAyMjoxOTo0 Mi4wMDAwMDAwMDAgKzAyMDAKQEAgLTI4MDQsNiArMjgwNCwxMDEgQEAgREVG SU5FX0lOVF9BTkRfRkxPQVRfUk9VTkRfRk4gKFJJTlQpCiAgICAgICAoaWYg KCEgSE9OT1JfTkFOUyAoQDApKQogCShjbXAgQDAgQDEpKSkpKSkKIAorLyog T3B0aW1pemUgdmFyaW91cyBzcGVjaWFsIGNhc2VzIG9mIChGVFlQRSkgTiBD TVAgQ1NULiAgKi8KKyhmb3IgY21wICAobHQgbGUgZXEgbmUgZ2UgZ3QpCisg ICAgIGljbXAgKGxlIGxlIGVxIG5lIGdlIGdlKQorIChzaW1wbGlmeQorICAo Y21wIChmbG9hdCBAMCkgUkVBTF9DU1RAMSkKKyAgIChpZiAoU0NBTEFSX0ZM T0FUX1RZUEVfUCAoVFJFRV9UWVBFIChAMSkpCisJJiYgISBERUNJTUFMX0ZM T0FUX1RZUEVfUCAoVFJFRV9UWVBFIChAMSkpKQorICAgICh3aXRoCisgICAg IHsKKyAgICAgICB0cmVlIGl0eXBlID0gVFJFRV9UWVBFIChAMCk7CisgICAg ICAgZ2NjX2Fzc2VydCAoSU5URUdSQUxfVFlQRV9QIChpdHlwZSkpOworICAg ICAgIHNpZ25vcCBpc2lnbiA9IFRZUEVfU0lHTiAoaXR5cGUpOworCisgICAg ICAgZm9ybWF0X2hlbHBlciBmbXQgKFJFQUxfTU9ERV9GT1JNQVQgKFRZUEVf TU9ERSAoVFJFRV9UWVBFIChAMSkpKSk7CisKKyAgICAgICBjb25zdCBSRUFM X1ZBTFVFX1RZUEUgKmNzdCA9IFRSRUVfUkVBTF9DU1RfUFRSIChAMSk7CisK KyAgICAgICAvKiBCZSBjYXJlZnVsIHRvIHByZXNlcnZlIGFueSBwb3RlbnRp YWwgZXhjZXB0aW9ucyBkdWUgdG8KKwkgIE5hTnMuICBxTmFOcyBhcmUgb2sg aW4gPT0gb3IgIT0gY29udGV4dC4KKworCSAgVE9ETzogcmVsYXggdW5kZXIg LWZuby10cmFwcGluZy1tYXRoIG9yCisJICAtZm5vLXNpZ25hbGluZy1uYW5z LiAgKi8KKyAgICAgICBib29sIGV4Y2VwdGlvbl9wCisgICAgICAgICA9IHJl YWxfaXNuYW4gKGNzdCkgJiYgKGNzdC0+c2lnbmFsbGluZworCQkJICAgICAg fHwgKGNtcCAhPSBFUV9FWFBSIHx8IGNtcCAhPSBORV9FWFBSKSk7CisKKyAg ICAgICAvKiBJTlQ/X01JTiBpcyBwb3dlci1vZi10d28gc28gaXQgdGFrZXMK KwkgIG9ubHkgb25lIG1hbnRpc3NhIGJpdC4gICovCisgICAgICAgYm9vbCBz aWduZWRfcCA9IGlzaWduID09IFNJR05FRDsKKyAgICAgICBib29sIGl0eXBl X2ZpdHNfZnR5cGVfcAorCT0gVFlQRV9QUkVDSVNJT04gKGl0eXBlKSAtIHNp Z25lZF9wIDw9IHNpZ25pZmljYW5kX3NpemUgKGZtdCk7CisgICAgIH0KKwor ICAgICAvKiBUT0RPOiBhbGxvdyBub24tZml0dGluZyBpdHlwZSBhbmQgU05h TnMgd2hlbgorCS1mbm8tdHJhcHBpbmctbWF0aC4gICovCisgICAgIChpZiAo aXR5cGVfZml0c19mdHlwZV9wICYmICEgZXhjZXB0aW9uX3ApCisgICAgICAo d2l0aAorICAgICAgIHsKKwkgUkVBTF9WQUxVRV9UWVBFIGltaW4sIGltYXg7 CisJIHJlYWxfZnJvbV9pbnRlZ2VyICgmaW1pbiwgZm10LCB3aTo6bWluX3Zh bHVlIChpdHlwZSksIGlzaWduKTsKKwkgcmVhbF9mcm9tX2ludGVnZXIgKCZp bWF4LCBmbXQsIHdpOjptYXhfdmFsdWUgKGl0eXBlKSwgaXNpZ24pOworCisJ IFJFQUxfVkFMVUVfVFlQRSBpY3N0OworCSBpZiAoY21wID09IEdUX0VYUFIg fHwgY21wID09IEdFX0VYUFIpCisJICAgcmVhbF9jZWlsICgmaWNzdCwgZm10 LCBjc3QpOworCSBlbHNlIGlmIChjbXAgPT0gTFRfRVhQUiB8fCBjbXAgPT0g TEVfRVhQUikKKwkgICByZWFsX2Zsb29yICgmaWNzdCwgZm10LCBjc3QpOwor CSBlbHNlCisJICAgcmVhbF90cnVuYyAoJmljc3QsIGZtdCwgY3N0KTsKKwor CSBib29sIGNzdF9pbnRfcCA9IHJlYWxfaWRlbnRpY2FsICgmaWNzdCwgY3N0 KTsKKworCSBpZiAoIWNzdF9pbnRfcCAmJiBjbXAgPT0gR1RfRVhQUikKKwkg ICBpY21wID0gR0VfRVhQUjsKKwkgZWxzZSBpZiAoIWNzdF9pbnRfcCAmJiBj bXAgPT0gTFRfRVhQUikKKwkgICBpY21wID0gTEVfRVhQUjsKKworCSBib29s IG92ZXJmbG93X3AgPSBmYWxzZTsKKwkgd2lkZV9pbnQgaWNzdF92YWwKKwkg ICA9IHJlYWxfdG9faW50ZWdlciAoJmljc3QsICZvdmVyZmxvd19wLCBUWVBF X1BSRUNJU0lPTiAoaXR5cGUpKTsKKyAgICAgICB9CisKKyAgICAgICAoc3dp dGNoCisKKwkvKiBPcHRpbWl6ZSBjYXNlcyB3aGVuIENTVCBpcyBvdXRzaWRl IG9mIElUWVBFJ3MgcmFuZ2UuICAqLworCShpZiAocmVhbF9jb21wYXJlIChM VF9FWFBSLCBjc3QsICZpbWluKSkKKwkgeyBjb25zdGFudF9ib29sZWFuX25v ZGUgKGNtcCA9PSBHVF9FWFBSIHx8IGNtcCA9PSBHRV9FWFBSIHx8IGNtcCA9 PSBORV9FWFBSLAorCQkJCSAgdHlwZSk7IH0pCisJKGlmIChyZWFsX2NvbXBh cmUgKEdUX0VYUFIsIGNzdCwgJmltYXgpKQorCSB7IGNvbnN0YW50X2Jvb2xl YW5fbm9kZSAoY21wID09IExUX0VYUFIgfHwgY21wID09IExFX0VYUFIgfHwg Y21wID09IE5FX0VYUFIsCisJCQkJICB0eXBlKTsgfSkKKworCS8qIFJlbW92 ZSBjYXN0IGlmIENTVCBpcyBhbiBpbnRlZ2VyIHJlcHJlc2VudGFibGUgYnkg SVRZUEUuICAqLworCShpZiAoY3N0X2ludF9wKQorCSAoY21wIEAwIHsgZ2Nj X2Fzc2VydCAoIW92ZXJmbG93X3ApOworCQkgICB3aWRlX2ludF90b190cmVl IChpdHlwZSwgaWNzdF92YWwpOyB9KQorCSkKKworCS8qIFdoZW4gQ1NUIGlz IGZyYWN0aW9uYWwsIG9wdGltaXplCisJICAgIChGVFlQRSkgTiA9PSBDU1Qg LT4gMAorCSAgICAoRlRZUEUpIE4gIT0gQ1NUIC0+IDEuICAqLworCShpZiAo Y21wID09IEVRX0VYUFIgfHwgY21wID09IE5FX0VYUFIpCisJIHsgY29uc3Rh bnRfYm9vbGVhbl9ub2RlIChjbXAgPT0gTkVfRVhQUiwgdHlwZSk7IH0pIAor CisJLyogT3RoZXJ3aXNlIHJlcGxhY2Ugd2l0aCBzZW5zaWJsZSBpbnRlZ2Vy IGNvbnN0YW50LiAgKi8KKwkod2l0aAorCSB7CisJICAgZ2NjX2Fzc2VydCAo IW92ZXJmbG93X3ApOworCSAgIGdjY19hc3NlcnQgKHJlYWxfY29tcGFyZSAo R0VfRVhQUiwgJmljc3QsICZpbWluKQorCQkgICAgICAgJiYgcmVhbF9jb21w YXJlIChMRV9FWFBSLCAmaWNzdCwgJmltYXgpKTsKKwkgICBnY2NfYXNzZXJ0 ICh3aTo6Z2VfcCAoaWNzdF92YWwsIHdpOjptaW5fdmFsdWUgKGl0eXBlKSwg aXNpZ24pCisJCSAgICAgICAmJiB3aTo6bGVfcCAoaWNzdF92YWwsIHdpOjpt YXhfdmFsdWUgKGl0eXBlKSwgaXNpZ24pKTsKKwkgfQorCSAoaWNtcCBAMCB7 IHdpZGVfaW50X3RvX3RyZWUgKGl0eXBlLCBpY3N0X3ZhbCk7IH0pKSkpKSkp KSkKKwogLyogRm9sZCBBIC9bZXhdIEIgQ01QIEMgdG8gQSBDTVAgQiAqIEMu ICAqLwogKGZvciBjbXAgKGVxIG5lKQogIChzaW1wbGlmeQpkaWZmIC1ydXBO IGdjYy9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjU3MzcxLTEuYyBn Y2MtNTczNzEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vcHI1NzM3MS0x LmMKLS0tIGdjYy9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9wcjU3Mzcx LTEuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysg Z2NjLTU3MzcxL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTczNzEt MS5jCTIwMTctMDctMTAgMjE6NDY6MDIuMDAwMDAwMDAwICswMjAwCkBAIC0w LDAgKzEsMzQxIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBk Zy1vcHRpb25zICItTzIgLWZkdW1wLXRyZWUtb3JpZ2luYWwiIH0gKi8KKwor I2luY2x1ZGUgPGxpbWl0cy5oPgorCisvKiBPcmlnaW5hbCB0ZXN0Y2FzZSBm cm9tIFBSLiAgKi8KKworaW50IGZvbzEgKHNob3J0IHgpIHsKKyAgcmV0dXJu IChkb3VibGUpIHggIT0gMDsKKyAgLyogeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wICJyZXR1cm4gKDxyZXR2YWw+ID0gKT94ICE9IDAiICJvcmlnaW5h bCIgfSB9ICovCit9CisKK2ludCBmb28yIChzaG9ydCB4KSB7CisgIHJldHVy biAoZmxvYXQpIHggIT0gMDsKKyAgLyogeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wICJyZXR1cm4gKDxyZXR2YWw+ID0gKT94ICE9IDAiICJvcmlnaW5h bCIgfSB9ICovCit9CisKK2ludCBmb28zIChpbnQgeCkgeworICByZXR1cm4g KGRvdWJsZSkgeCAhPSAwOworICAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAgInJldHVybiAoPHJldHZhbD4gPSApP3ggIT0gMCIgIm9yaWdpbmFs IiB9IH0gKi8KK30KKworLyogVGVzdHMgd2hlbiBSSFMgaXMgd2l0aGluIHJh bmdlIG9mIGludGVnZXIgdHlwZS4gICovCisKK3ZvaWQgaW5fcmFuZ2UgKHVu c2lnbmVkIHNob3J0IHgpCit7CisgIHsKKyAgICB2b2xhdGlsZSBpbnQgaW5f cmFuZ2VfMTsKKyAgICBpbl9yYW5nZV8xID0gKGZsb2F0KSB4ID4gMTAwLjBm OworICAgIC8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiaW5fcmFu Z2VfMSA9IHggPiAxMDAiICJvcmlnaW5hbCIgfSB9ICovCisgIH0KKworICB7 CisgICAgdm9sYXRpbGUgaW50IGluX3JhbmdlXzI7CisgICAgaW5fcmFuZ2Vf MiA9IChmbG9hdCkgeCA8IDEwMC4wZjsKKyAgICAvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAgImluX3JhbmdlXzIgPSB4IDw9IDk5IiAib3JpZ2lu YWwiIH0gfSAqLworICB9CisKKyAgeworICAgIHZvbGF0aWxlIGludCBpbl9y YW5nZV8zOworICAgIGluX3JhbmdlXzMgPSAoZmxvYXQpIHggPiAxMDAuNWY7 CisgICAgLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJpbl9yYW5n ZV8zID0geCAoPj0gMTAxfD4gMTAwKSIgIm9yaWdpbmFsIiB9IH0gKi8KKyAg fQorCisgIHsKKyAgICB2b2xhdGlsZSBpbnQgaW5fcmFuZ2VfNDsKKyAgICBp bl9yYW5nZV80ID0gKGZsb2F0KSB4IDwgMTAwLjVmOworICAgIC8qIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiaW5fcmFuZ2VfNCA9IHggPD0gMTAw IiAib3JpZ2luYWwiIH0gfSAqLworICB9CisKKyAgeworICAgIHZvbGF0aWxl IGludCBpbl9yYW5nZV81OworICAgIGluX3JhbmdlXzUgPSAoZmxvYXQpIHgg PT0gMTAwLjBmOworICAgIC8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cCAiaW5fcmFuZ2VfNSA9IHggPT0gMTAwIiAib3JpZ2luYWwiIH0gfSAqLwor ICB9CisKKyAgeworICAgIHZvbGF0aWxlIGludCBpbl9yYW5nZV82OworICAg IGluX3JhbmdlXzYgPSAoZmxvYXQpIHggIT0gMTAwLjBmOworICAgIC8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiaW5fcmFuZ2VfNiA9IHggIT0g MTAwIiAib3JpZ2luYWwiIH0gfSAqLworICB9CisKKyAgeworICAgIHZvbGF0 aWxlIGludCBpbl9yYW5nZV83OworICAgIGluX3JhbmdlXzcgPSAoZmxvYXQp IHggPT0gMTAwLjVmOworICAgIC8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcCAiaW5fcmFuZ2VfNyA9IDAiICJvcmlnaW5hbCIgfSB9ICovCisgIH0K KworICB7CisgICAgdm9sYXRpbGUgaW50IGluX3JhbmdlXzg7CisgICAgaW5f cmFuZ2VfOCA9IChmbG9hdCkgeCAhPSAxMDAuNWY7CisgICAgLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wICJpbl9yYW5nZV84ID0gMSIgIm9yaWdp bmFsIiB9IH0gKi8KKyAgfQorfQorCisvKiBUZXN0cyBmb3IgY2FzZXMgd2hl cmUgUkhTIGlzIG91dCBvZiByYW5nZSBvZiBpbnRlZ2VyIHR5cGUuICAqLwor Cit2b2lkIG91dF9yYW5nZSAodW5zaWduZWQgc2hvcnQgeCkKK3sKKyAgewor ICAgIHZvbGF0aWxlIGludCBvdXRfcmFuZ2VfMTsKKyAgICBvdXRfcmFuZ2Vf MSA9IChmbG9hdCkgeCA+IC0xMDAuNWY7CisgICAgLyogeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wICJvdXRfcmFuZ2VfMSA9IDEiICJvcmlnaW5hbCIg fSB9ICovCisgIH0KKworICB7CisgICAgdm9sYXRpbGUgaW50IG91dF9yYW5n ZV8yOworICAgIG91dF9yYW5nZV8yID0gKGZsb2F0KSB4ID49IC0xMDAuNWY7 CisgICAgLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJvdXRfcmFu Z2VfMiA9IDEiICJvcmlnaW5hbCIgfSB9ICovCisgIH0KKworICB7CisgICAg dm9sYXRpbGUgaW50IG91dF9yYW5nZV8zOworICAgIG91dF9yYW5nZV8zID0g KGZsb2F0KSB4IDwgLTEwMC41ZjsKKyAgICAvKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAgIm91dF9yYW5nZV8zID0gMCIgIm9yaWdpbmFsIiB9IH0g Ki8KKyAgfQorCisgIHsKKyAgICB2b2xhdGlsZSBpbnQgb3V0X3JhbmdlXzQ7 CisgICAgb3V0X3JhbmdlXzQgPSAoZmxvYXQpIHggPD0gLTEwMC41ZjsKKyAg ICAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIm91dF9yYW5nZV80 ID0gMCIgIm9yaWdpbmFsIiB9IH0gKi8KKyAgfQorCisgIHsKKyAgICB2b2xh dGlsZSBpbnQgb3V0X3JhbmdlXzU7CisgICAgb3V0X3JhbmdlXzUgPSAoZmxv YXQpIHggPT0gLTEwMC41ZjsKKyAgICAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAgIm91dF9yYW5nZV81ID0gMCIgIm9yaWdpbmFsIiB9IH0gKi8K KyAgfQorCisgIHsKKyAgICB2b2xhdGlsZSBpbnQgb3V0X3JhbmdlXzY7Cisg ICAgb3V0X3JhbmdlXzYgPSAoZmxvYXQpIHggIT0gLTEwMC41ZjsKKyAgICAv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIm91dF9yYW5nZV82ID0g MSIgIm9yaWdpbmFsIiB9IH0gKi8KKyAgfQorfQorCisvKiBUZXN0cyB3aGVu IFJIUyBpcyBhdCBib3VuZGFyeSBvZiBpbnRlZ2VyIHR5cGUuICAqLworCit2 b2lkIGxvX2JvdW5kcyAodW5zaWduZWQgc2hvcnQgeCkKK3sKKyAgeworICAg IHZvbGF0aWxlIGludCBsb19ib3VuZHNfMTsKKyAgICBsb19ib3VuZHNfMSA9 IChmbG9hdCkgeCA+IDB4MDsKKyAgICAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAgImxvX2JvdW5kc18xID0geCAoPnwhPSkgMCIgIm9yaWdpbmFs IiB9IH0gKi8KKyAgfQorCisgIHsKKyAgICB2b2xhdGlsZSBpbnQgbG9fYm91 bmRzXzI7CisgICAgbG9fYm91bmRzXzIgPSAoZmxvYXQpIHggPj0gMHgwOwor ICAgIC8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAibG9fYm91bmRz XzIgPSAxIiAib3JpZ2luYWwiIH0gfSAqLworICB9CisKKyAgeworICAgIHZv bGF0aWxlIGludCBsb19ib3VuZHNfMzsKKyAgICBsb19ib3VuZHNfMyA9IChm bG9hdCkgeCA8IDB4MDsKKyAgICAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAgImxvX2JvdW5kc18zID0gMCIgIm9yaWdpbmFsIiB9IH0gKi8KKyAg fQorCisgIHsKKyAgICB2b2xhdGlsZSBpbnQgbG9fYm91bmRzXzQ7CisgICAg bG9fYm91bmRzXzQgPSAoZmxvYXQpIHggPD0gMHgwOworICAgIC8qIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAibG9fYm91bmRzXzQgPSB4ICg8PXw9 PSkgMCIgIm9yaWdpbmFsIiB9IH0gKi8KKyAgfQorCisgIHsKKyAgICB2b2xh dGlsZSBpbnQgbG9fYm91bmRzXzU7CisgICAgbG9fYm91bmRzXzUgPSAoZmxv YXQpIHggPiAweDAgLSAwLjVmOworICAgIC8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcCAibG9fYm91bmRzXzUgPSAxIiAib3JpZ2luYWwiIH0gfSAq LworICB9CisKKyAgeworICAgIHZvbGF0aWxlIGludCBsb19ib3VuZHNfNjsK KyAgICBsb19ib3VuZHNfNiA9IChmbG9hdCkgeCA+PSAweDAgLSAwLjVmOwor ICAgIC8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAibG9fYm91bmRz XzYgPSAxIiAib3JpZ2luYWwiIH0gfSAqLworICB9CisKKyAgeworICAgIHZv bGF0aWxlIGludCBsb19ib3VuZHNfNzsKKyAgICBsb19ib3VuZHNfNyA9IChm bG9hdCkgeCA8IDB4MCAtIDAuNWY7CisgICAgLyogeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wICJsb19ib3VuZHNfNyA9IDAiICJvcmlnaW5hbCIgfSB9 ICovCisgIH0KKworICB7CisgICAgdm9sYXRpbGUgaW50IGxvX2JvdW5kc184 OworICAgIGxvX2JvdW5kc184ID0gKGZsb2F0KSB4IDw9IDB4MCAtIDAuNWY7 CisgICAgLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJsb19ib3Vu ZHNfOCA9IDAiICJvcmlnaW5hbCIgfSB9ICovCisgIH0KKworICB7CisgICAg dm9sYXRpbGUgaW50IGxvX2JvdW5kc185OworICAgIGxvX2JvdW5kc185ID0g KGZsb2F0KSB4ID4gMHgwICsgMC41ZjsKKyAgICAvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAgImxvX2JvdW5kc185ID0geCAoPj0gMXwhPSAwKSIg Im9yaWdpbmFsIiB9IH0gKi8KKyAgfQorCisgIHsKKyAgICB2b2xhdGlsZSBp bnQgbG9fYm91bmRzXzEwOworICAgIGxvX2JvdW5kc18xMCA9IChmbG9hdCkg eCA+PSAweDAgKyAwLjVmOworICAgIC8qIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcCAibG9fYm91bmRzXzEwID0geCAoPj0gMXwhPSAwKSIgIm9yaWdp bmFsIiB9IH0gKi8KKyAgfQorCisgIHsKKyAgICB2b2xhdGlsZSBpbnQgbG9f Ym91bmRzXzExOworICAgIGxvX2JvdW5kc18xMSA9IChmbG9hdCkgeCA8IDB4 MCArIDAuNWY7CisgICAgLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w ICJsb19ib3VuZHNfMTEgPSB4ICg8PXw9PSkgMCIgIm9yaWdpbmFsIiB9IH0g Ki8KKyAgfQorCisgIHsKKyAgICB2b2xhdGlsZSBpbnQgbG9fYm91bmRzXzEy OworICAgIGxvX2JvdW5kc18xMiA9IChmbG9hdCkgeCA8PSAweDAgKyAwLjVm OworICAgIC8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAibG9fYm91 bmRzXzEyID0geCAoPD18PT0pIDAiICJvcmlnaW5hbCIgfSB9ICovCisgIH0K K30KKwordm9pZCBoaV9ib3VuZHMgKHVuc2lnbmVkIHNob3J0IHgpCit7Cisg IHsKKyAgICB2b2xhdGlsZSBpbnQgaGlfYm91bmRzXzE7CisgICAgaGlfYm91 bmRzXzEgPSAoZmxvYXQpIHggPiBVU0hSVF9NQVg7CisgICAgLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wICJoaV9ib3VuZHNfMSA9IDAiICJvcmln aW5hbCIgfSB9ICovCisgIH0KKworICB7CisgICAgdm9sYXRpbGUgaW50IGhp X2JvdW5kc18yOworICAgIGhpX2JvdW5kc18yID0gKGZsb2F0KSB4ID49IFVT SFJUX01BWDsKKyAgICAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAg ImhpX2JvdW5kc18yID0geCAoPj18PT0pIDY1NTM1IiAib3JpZ2luYWwiIH0g fSAqLworICB9CisKKyAgeworICAgIHZvbGF0aWxlIGludCBoaV9ib3VuZHNf MzsKKyAgICBoaV9ib3VuZHNfMyA9IChmbG9hdCkgeCA8IFVTSFJUX01BWDsK KyAgICAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgImhpX2JvdW5k c18zID0geCAoPHwhPSkgNjU1MzUiICJvcmlnaW5hbCIgfSB9ICovCisgIH0K KworICB7CisgICAgdm9sYXRpbGUgaW50IGhpX2JvdW5kc180OworICAgIGhp X2JvdW5kc180ID0gKGZsb2F0KSB4IDw9IFVTSFJUX01BWDsKKyAgICAvKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgImhpX2JvdW5kc180ID0gMSIg Im9yaWdpbmFsIiB9IH0gKi8KKyAgfQorCisgIHsKKyAgICB2b2xhdGlsZSBp bnQgaGlfYm91bmRzXzU7CisgICAgaGlfYm91bmRzXzUgPSAoZmxvYXQpIHgg PiBVU0hSVF9NQVggLSAwLjVmOworICAgIC8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcCAiaGlfYm91bmRzXzUgPSB4ICg+PXw9PSkgNjU1MzUiICJv cmlnaW5hbCIgfSB9ICovCisgIH0KKworICB7CisgICAgdm9sYXRpbGUgaW50 IGhpX2JvdW5kc182OworICAgIGhpX2JvdW5kc182ID0gKGZsb2F0KSB4ID49 IFVTSFJUX01BWCAtIDAuNWY7CisgICAgLyogeyBkZy1maW5hbCB7IHNjYW4t dHJlZS1kdW1wICJoaV9ib3VuZHNfNiA9IHggKD49fD09KSA2NTUzNSIgIm9y aWdpbmFsIiB9IH0gKi8KKyAgfQorCisgIHsKKyAgICB2b2xhdGlsZSBpbnQg aGlfYm91bmRzXzc7CisgICAgaGlfYm91bmRzXzcgPSAoZmxvYXQpIHggPCBV U0hSVF9NQVggLSAwLjVmOworICAgIC8qIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcCAiaGlfYm91bmRzXzcgPSB4ICg8PSA2NTUzNHwhPSA2NTUzNSki ICJvcmlnaW5hbCIgfSB9ICovCisgIH0KKworICB7CisgICAgdm9sYXRpbGUg aW50IGhpX2JvdW5kc184OworICAgIGhpX2JvdW5kc184ID0gKGZsb2F0KSB4 IDw9IFVTSFJUX01BWCAtIDAuNWY7CisgICAgLyogeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wICJoaV9ib3VuZHNfOCA9IHggKDw9IDY1NTM0fCE9IDY1 NTM1KSIgIm9yaWdpbmFsIiB9IH0gKi8KKyAgfQorCisgIHsKKyAgICB2b2xh dGlsZSBpbnQgaGlfYm91bmRzXzk7CisgICAgaGlfYm91bmRzXzkgPSAoZmxv YXQpIHggPiBVU0hSVF9NQVggKyAwLjVmOworICAgIC8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcCAiaGlfYm91bmRzXzkgPSAwIiAib3JpZ2luYWwi IH0gfSAqLworICB9CisKKyAgeworICAgIHZvbGF0aWxlIGludCBoaV9ib3Vu ZHNfMTA7CisgICAgaGlfYm91bmRzXzEwID0gKGZsb2F0KSB4ID49IFVTSFJU X01BWCArIDAuNWY7CisgICAgLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wICJoaV9ib3VuZHNfMTAgPSAwIiAib3JpZ2luYWwiIH0gfSAqLworICB9 CisKKyAgeworICAgIHZvbGF0aWxlIGludCBoaV9ib3VuZHNfMTE7CisgICAg aGlfYm91bmRzXzExID0gKGZsb2F0KSB4IDwgVVNIUlRfTUFYICsgMC41ZjsK KyAgICAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgImhpX2JvdW5k c18xMSA9IDEiICJvcmlnaW5hbCIgfSB9ICovCisgIH0KKworICB7CisgICAg dm9sYXRpbGUgaW50IGhpX2JvdW5kc18xMjsKKyAgICBoaV9ib3VuZHNfMTIg PSAoZmxvYXQpIHggPD0gVVNIUlRfTUFYICsgMC41ZjsKKyAgICAvKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgImhpX2JvdW5kc18xMiA9IDEiICJv cmlnaW5hbCIgfSB9ICovCisgIH0KK30KKworLyogVGVzdHMgd2l0aCBub24t ZmluaXRlIGZsb2F0IGNvbnN0cy4gICovCisKK3ZvaWQgbm9uZmluaXRlICh1 bnNpZ25lZCBzaG9ydCB4KQoreworI2RlZmluZSBJTkZJTklUWSBfX2J1aWx0 aW5faW5mZiAoKQorCisgIHsKKyAgICB2b2xhdGlsZSBpbnQgbm9uZmluaXRl XzE7CisgICAgbm9uZmluaXRlXzEgPSAoZmxvYXQpIHggPiBJTkZJTklUWTsK KyAgICAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIm5vbmZpbml0 ZV8xID0gMCIgIm9yaWdpbmFsIiB9IH0gKi8KKyAgfQorCisgIHsKKyAgICB2 b2xhdGlsZSBpbnQgbm9uZmluaXRlXzI7CisgICAgbm9uZmluaXRlXzIgPSAo ZmxvYXQpIHggPj0gSU5GSU5JVFk7CisgICAgLyogeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wICJub25maW5pdGVfMiA9IDAiICJvcmlnaW5hbCIgfSB9 ICovCisgIH0KKworICB7CisgICAgdm9sYXRpbGUgaW50IG5vbmZpbml0ZV8z OworICAgIG5vbmZpbml0ZV8zID0gKGZsb2F0KSB4IDwgSU5GSU5JVFk7Cisg ICAgLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJub25maW5pdGVf MyA9IDEiICJvcmlnaW5hbCIgfSB9ICovCisgIH0KKworICB7CisgICAgdm9s YXRpbGUgaW50IG5vbmZpbml0ZV80OworICAgIG5vbmZpbml0ZV80ID0gKGZs b2F0KSB4IDw9IElORklOSVRZOworICAgIC8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcCAibm9uZmluaXRlXzQgPSAxIiAib3JpZ2luYWwiIH0gfSAq LworICB9CisKKyAgeworICAgIHZvbGF0aWxlIGludCBub25maW5pdGVfNTsK KyAgICBub25maW5pdGVfNSA9IChmbG9hdCkgeCA+IC1JTkZJTklUWTsKKyAg ICAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIm5vbmZpbml0ZV81 ID0gMSIgIm9yaWdpbmFsIiB9IH0gKi8KKyAgfQorCisgIHsKKyAgICB2b2xh dGlsZSBpbnQgbm9uZmluaXRlXzY7CisgICAgbm9uZmluaXRlXzYgPSAoZmxv YXQpIHggPj0gLUlORklOSVRZOworICAgIC8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcCAibm9uZmluaXRlXzYgPSAxIiAib3JpZ2luYWwiIH0gfSAq LworICB9CisKKyAgeworICAgIHZvbGF0aWxlIGludCBub25maW5pdGVfNzsK KyAgICBub25maW5pdGVfNyA9IChmbG9hdCkgeCA8IC1JTkZJTklUWTsKKyAg ICAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIm5vbmZpbml0ZV83 ID0gMCIgIm9yaWdpbmFsIiB9IH0gKi8KKyAgfQorCisgIHsKKyAgICB2b2xh dGlsZSBpbnQgbm9uZmluaXRlXzg7CisgICAgbm9uZmluaXRlXzggPSAoZmxv YXQpIHggPD0gLUlORklOSVRZOworICAgIC8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcCAibm9uZmluaXRlXzggPSAwIiAib3JpZ2luYWwiIH0gfSAq LworICB9CisKKyNkZWZpbmUgUU5BTiBfX2J1aWx0aW5fbmFuZiAoIjAiKQor CisgIC8qIEV2ZW4gZm9yIHFOYU5zLCBvbmx5ID09IGFuZCAhPSBhcmUgcXVp ZXQuICAqLworCisgIHsKKyAgICB2b2xhdGlsZSBpbnQgbm9uZmluaXRlXzk7 CisgICAgbm9uZmluaXRlXzkgPSAoZmxvYXQpIHggPT0gUU5BTjsKKyAgICAv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIm5vbmZpbml0ZV85ID0g MCIgIm9yaWdpbmFsIiB9IH0gKi8KKyAgfQorCisgIHsKKyAgICB2b2xhdGls ZSBpbnQgbm9uZmluaXRlXzEwOworICAgIG5vbmZpbml0ZV8xMCA9IChmbG9h dCkgeCAhPSBRTkFOOworICAgIC8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcCAibm9uZmluaXRlXzEwID0gMSIgIm9yaWdpbmFsIiB9IH0gKi8KKyAg fQorfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtbm90ICJc XChmbG9hdFxcKSIgIm9yaWdpbmFsIiB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC1ub3QgIlxcKGRvdWJsZVxcKSIgIm9yaWdpbmFs IiB9IH0gKi8KZGlmZiAtcnVwTiBnY2MvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vcHI1NzM3MS0yLmMgZ2NjLTU3MzcxL2djYy90ZXN0c3VpdGUvYy1j KystY29tbW9uL3ByNTczNzEtMi5jCi0tLSBnY2MvZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vcHI1NzM3MS0yLmMJMTk3MC0wMS0wMSAwMTowMDowMC4w MDAwMDAwMDAgKzAxMDAKKysrIGdjYy01NzM3MS9nY2MvdGVzdHN1aXRlL2Mt YysrLWNvbW1vbi9wcjU3MzcxLTIuYwkyMDE3LTA3LTEwIDE1OjIzOjI2LjAw MDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDE3IEBACisvKiB7IGRnLWRvIGNv bXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTyAtZmR1bXAtdHJlZS1v cHRpbWl6ZWQiIH0gKi8KKworLyogV2UgY2FuIG5vdCBnZXQgcmlkIG9mIGNv bXBhcmlzb24gaW4gdGVzdHMgYmVsb3cgYmVjYXVzZSBvZgorICAgcG90ZW50 aWFsIGluZXhhY3QgZXhjZXB0aW9uLgorCisgICBUT0RPOiBlbmFibGUgd2hl biAtZm5vLXRyYXBwaW5nLW1hdGguICAqLworCitpbnQgZm9vMShpbnQgeCkg eworICByZXR1cm4gKGZsb2F0KSB4ICE9IDA7CisgIC8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcCAiXFwoZmxvYXRcXCkiICJvcHRpbWl6ZWQiIH0g fSAqLworfQorCitpbnQgZm9vMihsb25nIGxvbmcgeCkgeworICAvKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIlxcKGRvdWJsZVxcKSIgIm9wdGlt aXplZCIgfSB9ICovCisgIHJldHVybiAoZG91YmxlKSB4ICE9IDA7Cit9CmRp ZmYgLXJ1cE4gZ2NjL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL3ByNTcz NzEtMy5jIGdjYy01NzM3MS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9w cjU3MzcxLTMuYwotLS0gZ2NjL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9u L3ByNTczNzEtMy5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICsw MTAwCisrKyBnY2MtNTczNzEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24v cHI1NzM3MS0zLmMJMjAxNy0wNy0wNiAxOToyOTo1NS4wMDAwMDAwMDAgKzAy MDAKQEAgLTAsMCArMSwxMyBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8K Ky8qIHsgZGctb3B0aW9ucyAiLU8gLWZkdW1wLXRyZWUtb3B0aW1pemVkIiB9 ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBpbnQxMjgg fSAqLworCisvKiBXZSBjYW4gbm90IGdldCByaWQgb2YgY29tcGFyaXNvbiBp biB0ZXN0cyBiZWxvdyBiZWNhdXNlIG9mCisgICBwb3RlbnRpYWwgb3ZlcmZs b3cgZXhjZXB0aW9uLgorCisgICBUT0RPOiBlbmFibGUgd2hlbiAtZm5vLXRy YXBwaW5nLW1hdGguICAqLworCitpbnQgZm9vKF9faW50MTI4X3QgeCkgewor ICAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIlxcKGZsb2F0XFwp IiAib3B0aW1pemVkIiB9IH0gKi8KKyAgcmV0dXJuIChmbG9hdCkgeCAhPSAw OworfQpkaWZmIC1ydXBOIGdjYy9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1v bi9wcjU3MzcxLTQuYyBnY2MtNTczNzEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vcHI1NzM3MS00LmMKLS0tIGdjYy9nY2MvdGVzdHN1aXRlL2MtYysr LWNvbW1vbi9wcjU3MzcxLTQuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw MDAwMCArMDEwMAorKysgZ2NjLTU3MzcxL2djYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL3ByNTczNzEtNC5jCTIwMTctMDctMTAgMjI6MTc6NTkuMDAwMDAw MDAwICswMjAwCkBAIC0wLDAgKzEsNzIgQEAKKy8qIHsgZGctZG8gY29tcGls ZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIC1mc2lnbmFsaW5nLW5hbnMg LWZkdW1wLXRyZWUtb3JpZ2luYWwiIH0gKi8KKworLyogV2UgY2FuIG5vdCBn ZXQgcmlkIG9mIGNvbXBhcmlzb24gaW4gdGVzdHMgYmVsb3cgYmVjYXVzZSBv ZgorICAgcGVuZGluZyBOYU4gZXhjZXB0aW9ucy4KKworICAgVE9ETzogYXZv aWQgdW5kZXIgLWZuby10cmFwcGluZy1tYXRoLiAgKi8KKworI2RlZmluZSBR TkFOIF9fYnVpbHRpbl9uYW5mICgiMCIpCisjZGVmaW5lIFNOQU4gX19idWls dGluX25hbnNmICgiMCIpCisKK3ZvaWQgbm9uZmluaXRlKHVuc2lnbmVkIHNo b3J0IHgpIHsKKyAgeworICAgIHZvbGF0aWxlIGludCBub25maW5pdGVfMTsK KyAgICBub25maW5pdGVfMSA9IChmbG9hdCkgeCA+IFFOQU47CisgICAgLyog eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJub25maW5pdGVfMSA9IFxc KGZsb2F0XFwpIiAib3JpZ2luYWwiIH0gfSAqLworICB9CisKKyAgeworICAg IHZvbGF0aWxlIGludCBub25maW5pdGVfMjsKKyAgICBub25maW5pdGVfMiA9 IChmbG9hdCkgeCA+PSBRTkFOOworICAgIC8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcCAibm9uZmluaXRlXzIgPSBcXChmbG9hdFxcKSIgIm9yaWdp bmFsIiB9IH0gKi8KKyAgfQorCisgIHsKKyAgICB2b2xhdGlsZSBpbnQgbm9u ZmluaXRlXzM7CisgICAgbm9uZmluaXRlXzMgPSAoZmxvYXQpIHggPCBRTkFO OworICAgIC8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAibm9uZmlu aXRlXzMgPSBcXChmbG9hdFxcKSIgIm9yaWdpbmFsIiB9IH0gKi8KKyAgfQor CisgIHsKKyAgICB2b2xhdGlsZSBpbnQgbm9uZmluaXRlXzQ7CisgICAgbm9u ZmluaXRlXzQgPSAoZmxvYXQpIHggPD0gUU5BTjsKKyAgICAvKiB7IGRnLWZp bmFsIHsgc2Nhbi10cmVlLWR1bXAgIm5vbmZpbml0ZV80ID0gXFwoZmxvYXRc XCkiICJvcmlnaW5hbCIgfSB9ICovCisgIH0KKworICB7CisgICAgdm9sYXRp bGUgaW50IG5vbmZpbml0ZV81OworICAgIG5vbmZpbml0ZV81ID0gKGZsb2F0 KSB4ID4gU05BTjsKKyAgICAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAgIm5vbmZpbml0ZV81ID0gXFwoZmxvYXRcXCkiICJvcmlnaW5hbCIgfSB9 ICovCisgIH0KKworICB7CisgICAgdm9sYXRpbGUgaW50IG5vbmZpbml0ZV82 OworICAgIG5vbmZpbml0ZV82ID0gKGZsb2F0KSB4ID49IFNOQU47CisgICAg LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJub25maW5pdGVfNiA9 IFxcKGZsb2F0XFwpIiAib3JpZ2luYWwiIH0gfSAqLworICB9CisKKyAgewor ICAgIHZvbGF0aWxlIGludCBub25maW5pdGVfNzsKKyAgICBub25maW5pdGVf NyA9IChmbG9hdCkgeCA8IFNOQU47CisgICAgLyogeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wICJub25maW5pdGVfNyA9IFxcKGZsb2F0XFwpIiAib3Jp Z2luYWwiIH0gfSAqLworICB9CisKKyAgeworICAgIHZvbGF0aWxlIGludCBu b25maW5pdGVfODsKKyAgICBub25maW5pdGVfOCA9IChmbG9hdCkgeCA8PSBT TkFOOworICAgIC8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAibm9u ZmluaXRlXzggPSBcXChmbG9hdFxcKSIgIm9yaWdpbmFsIiB9IH0gKi8KKyAg fQorCisgIHsKKyAgICB2b2xhdGlsZSBpbnQgbm9uZmluaXRlXzk7CisgICAg bm9uZmluaXRlXzkgPSAoZmxvYXQpIHggPT0gU05BTjsKKyAgICAvKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIm5vbmZpbml0ZV85ID0gXFwoZmxv YXRcXCkiICJvcmlnaW5hbCIgfSB9ICovCisgIH0KKworICB7CisgICAgdm9s YXRpbGUgaW50IG5vbmZpbml0ZV8xMDsKKyAgICBub25maW5pdGVfMTAgPSAo ZmxvYXQpIHggIT0gU05BTjsKKyAgICAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAgIm5vbmZpbml0ZV8xMCA9IFxcKGZsb2F0XFwpIiAib3JpZ2lu YWwiIH0gfSAqLworICB9Cit9CmRpZmYgLXJ1cE4gZ2NjL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3ByNTczNzEtNS5jIGdjYy01NzM3MS9nY2MvdGVzdHN1aXRl L2djYy5kZy9wcjU3MzcxLTUuYwotLS0gZ2NjL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ByNTczNzEtNS5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw ICswMTAwCisrKyBnY2MtNTczNzEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI1 NzM3MS01LmMJMjAxNy0wNy0wNiAxOToyOTo1OC4wMDAwMDAwMDAgKzAyMDAK QEAgLTAsMCArMSwxMCBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLU8gLWZkdW1wLXRyZWUtb3B0aW1pemVkIiB9ICov CisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBkZnAgfSAqLwor CisvKiBXZSBkbyBub3Qgc3VwcG9ydCBERlBzLiAgKi8KKworaW50IGZvbyhz aG9ydCB4KSB7CisgIC8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAi XFwoX0RlY2ltYWwzMlxcKSIgIm9wdGltaXplZCIgfSB9ICovCisgIHJldHVy biAoX0RlY2ltYWwzMikgeCAhPSAwOworfQo= --94eb2c06bf26003b16055405a932--