From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14684 invoked by alias); 23 Aug 2011 14:19:43 -0000 Received: (qmail 14674 invoked by uid 22791); 23 Aug 2011 14:19:42 -0000 X-SWARE-Spam-Status: No, hits=-0.5 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,TW_VF,TW_VX,TW_ZJ X-Spam-Check-By: sourceware.org Received: from mail-yx0-f175.google.com (HELO mail-yx0-f175.google.com) (209.85.213.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 23 Aug 2011 14:19:22 +0000 Received: by yxl11 with SMTP id 11so120128yxl.20 for ; Tue, 23 Aug 2011 07:19:21 -0700 (PDT) MIME-Version: 1.0 Received: by 10.236.179.72 with SMTP id g48mr23712228yhm.50.1314109161800; Tue, 23 Aug 2011 07:19:21 -0700 (PDT) Received: by 10.236.44.74 with HTTP; Tue, 23 Aug 2011 07:19:21 -0700 (PDT) In-Reply-To: References: Date: Tue, 23 Aug 2011 14:55:00 -0000 Message-ID: Subject: Re: [PATCH, i386, testsuite] FMA intrinsics From: Ilya Tocar To: Uros Bizjak Cc: gcc-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary=20cf303ddbc4c9031104ab2ce19b X-IsSubscribed: yes 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 X-SW-Source: 2011-08/txt/msg01893.txt.bz2 --20cf303ddbc4c9031104ab2ce19b Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 1719 I removed unnecessary expands/builtins and tests are now compiled with -O2. Is this version ok? 2011/8/22 Uros Bizjak : > On Mon, Aug 22, 2011 at 6:25 PM, Ilya Tocar wro= te: > >>> You don't need to add "negated" versions, one FMA builtin per mode is >>> enough, please see existing FMA4 descriptions. Just put unary minus >>> sign in the intrinsics header for "negated" operand and let GCC do its >>> job. Please see existing FMA4 intrinsics header. >>> >> Actually i tried that.But in such case =A0when i compile(FMA4 example) >> #include >> extern =A0__m128 a,b,c; >> void foo(){ >> =A0 a =3D _mm_nmsub_ps(a,b,c); >> } >> with -S -O0 -mfma4 >> The asm have >> >> =A0 =A0 =A0 =A0vxorps =A0%xmm1, %xmm0, %xmm0 >> =A0 =A0 =A0 =A0vmovaps -16(%rbp), %xmm1 >> =A0 =A0 =A0 =A0vmovaps .LC0(%rip), %xmm2 >> =A0 =A0 =A0 =A0vxorps =A0%xmm2, %xmm1, %xmm1 >> =A0 =A0 =A0 =A0vfmaddps =A0 =A0 =A0 =A0%xmm0, -32(%rbp), %xmm1, %xmm0 >> So vfmaddps of negated values is generated instead of vfnmsubps. >> I think it is bad that intrinsic for =A0instruction can generate code >> without this instruction. >> So to make sure that exact instruction is always generated i >> introduced additional expands and builtins. >> Is it wrong? > > This is artificial limitation. User requested the functionality of the > intrinsic, and should not bother with how the compiler realizes it. > With -O2, negation would propagate into the insn during combine pass, > and optimal instruction would be generated. > > So, to answer your question - it is wrong to expect exact instruction > from builtins. Maybe from using -O0, but this should not be used > anyway in the testsuite. > > Uros. > --20cf303ddbc4c9031104ab2ce19b Content-Type: application/octet-stream; name=patch Content-Disposition: attachment; filename=patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_groylg9g0 Content-length: 57767 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcuZ2NjIGIvZ2NjL2NvbmZpZy5nY2MK aW5kZXggZWMxM2Q5My4uMzg3OWEyYSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy5nY2MKKysrIGIvZ2NjL2NvbmZpZy5nY2MKQEAgLTM1Miw3ICszNTIsNyBA QCBpWzM0NTY3XTg2LSotKikKIAkJICAgICAgIG5tbWludHJpbi5oIGJtbWlu dHJpbi5oIGZtYTRpbnRyaW4uaCB3bW1pbnRyaW4uaAogCQkgICAgICAgaW1t aW50cmluLmggeDg2aW50cmluLmggYXZ4aW50cmluLmggeG9waW50cmluLmgK IAkJICAgICAgIGlhMzJpbnRyaW4uaCBjcm9zcy1zdGRhcmcuaCBsd3BpbnRy aW4uaCBwb3BjbnRpbnRyaW4uaAotCQkgICAgICAgbHpjbnRpbnRyaW4uaCBi bWlpbnRyaW4uaCB0Ym1pbnRyaW4uaCIKKwkJICAgICAgIGx6Y250aW50cmlu LmggYm1paW50cmluLmggdGJtaW50cmluLmggZm1haW50cmluLmgiCiAJOzsK IHg4Nl82NC0qLSopCiAJY3B1X3R5cGU9aTM4NgpAQCAtMzY0LDcgKzM2NCw3 IEBAIHg4Nl82NC0qLSopCiAJCSAgICAgICBubW1pbnRyaW4uaCBibW1pbnRy aW4uaCBmbWE0aW50cmluLmggd21taW50cmluLmgKIAkJICAgICAgIGltbWlu dHJpbi5oIHg4NmludHJpbi5oIGF2eGludHJpbi5oIHhvcGludHJpbi5oCiAJ CSAgICAgICBpYTMyaW50cmluLmggY3Jvc3Mtc3RkYXJnLmggbHdwaW50cmlu LmggcG9wY250aW50cmluLmgKLQkJICAgICAgIGx6Y250aW50cmluLmggYm1p aW50cmluLmggdGJtaW50cmluLmgiCisJCSAgICAgICBsemNudGludHJpbi5o IGJtaWludHJpbi5oIHRibWludHJpbi5oIGZtYWludHJpbi5oIgogCW5lZWRf NjRiaXRfaHdpbnQ9eWVzCiAJOzsKIGlhNjQtKi0qKQpkaWZmIC0tZ2l0IGEv Z2NjL2NvbmZpZy9pMzg2L2ZtYWludHJpbi5oIGIvZ2NjL2NvbmZpZy9pMzg2 L2ZtYWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjJjZGU1NjQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvY29uZmlnL2kz ODYvZm1haW50cmluLmgKQEAgLTAsMCArMSwyMzMgQEAKKy8qIENvcHlyaWdo dCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQg b2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFu eSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBVbmRl ciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVk IGFkZGl0aW9uYWwKKyAgIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUg R0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKyAgIDMu MSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorICAgYSBjb3B5 IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbTsKKyAgIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMg YW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNl ZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKwor I2lmbmRlZiBfWDg2SU5UUklOX0hfSU5DTFVERUQKKyMgZXJyb3IgIk5ldmVy IHVzZSA8Zm1haW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRy aW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfRk1BSU5UUklO X0hfSU5DTFVERUQKKyNkZWZpbmUgX0ZNQUlOVFJJTl9IX0lOQ0xVREVECisK KyNpZm5kZWYgX19GTUFfXworIyBlcnJvciAiRk1BIGluc3RydWN0aW9uIHNl dCBub3QgZW5hYmxlZCIKKyNlbHNlCisKKyNpbmNsdWRlIDxpbW1pbnRyaW4u aD4KKworCisKK2V4dGVybiBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRl X18oKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQorX21tX2ZtYWRkX3BkIChfX20xMjhkIF9fQSwgX19tMTI4 ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19i dWlsdGluX2lhMzJfdmZtYWRkcGQgKChfX3YyZGYpX19BLCAoX192MmRmKV9f QiwgKF9fdjJkZilfX0MpOworfQorCitleHRlcm4gX19pbmxpbmUgX19tMjU2 ZCBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5s aW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19tbTI1Nl9mbWFkZF9wZCAoX19t MjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0 dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMjU2ICgoX192 NGRmKV9fQSwgKF9fdjRkZilfX0IsIChfX3Y0ZGYpX19DKTsKK30KKworZXh0 ZXJuIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxp bmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19t bV9mbWFkZF9wcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9f QykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRk cHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOwor fQorCitleHRlcm4gX19pbmxpbmUgX19tMjU2IF9fYXR0cmlidXRlX18oKF9f Z251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFs X18pKQorX21tMjU2X2ZtYWRkX3BzIChfX20yNTYgX19BLCBfX20yNTYgX19C LCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5f aWEzMl92Zm1hZGRwczI1NiAoKF9fdjhzZilfX0EsIChfX3Y4c2YpX19CLCAo X192OHNmKV9fQyk7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX20xMjhkIF9f YXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQorX21tX2ZtYWRkX3NkIChfX20xMjhkIF9f QSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9f bTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkMyAoKF9fdjJkZilfX0Es IChfX3YyZGYpX19CLCAoX192MmRmKV9fQyk7Cit9CisKK2V4dGVybiBfX2lu bGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9f YWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfbW1fZm1hZGRf c3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7Cisg IHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzczMgKChf X3Y0c2YpX19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitl eHRlcm4gX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2dudV9p bmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkK K19tbV9mbXN1Yl9wZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20x MjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMy X3ZmbWFkZHBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIC0oX192MmRm KV9fQyk7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX20yNTZkIF9fYXR0cmli dXRlX18oKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQorX21tMjU2X2Ztc3ViX3BkIChfX20yNTZkIF9fQSwg X19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1 NmQpX19idWlsdGluX2lhMzJfdmZtYWRkcGQyNTYgKChfX3Y0ZGYpX19BLCAo X192NGRmKV9fQiwgLShfX3Y0ZGYpX19DKTsKK30KKworZXh0ZXJuIF9faW5s aW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywgX19h bHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19tbV9mbXN1Yl9w cyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAg cmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkcHMgKChfX3Y0 c2YpX19BLCAoX192NHNmKV9fQiwgLShfX3Y0c2YpX19DKTsKK30KKworZXh0 ZXJuIF9faW5saW5lIF9fbTI1NiBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxp bmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19t bTI1Nl9mbXN1Yl9wcyAoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2 IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZt YWRkcHMyNTYgKChfX3Y4c2YpX19BLCAoX192OHNmKV9fQiwgLShfX3Y4c2Yp X19DKTsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1 dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCitfbW1fZm1zdWJfc2QgKF9fbTEyOGQgX19BLCBfX20x MjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClf X2J1aWx0aW5faWEzMl92Zm1hZGRzZDMgKChfX3YyZGYpX19BLCAoX192MmRm KV9fQiwgLShfX3YyZGYpX19DKTsKK30KKworZXh0ZXJuIF9faW5saW5lIF9f bTEyOCBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19tbV9mbXN1Yl9zcyAoX19t MTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJu IChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkc3MzICgoX192NHNmKV9f QSwgKF9fdjRzZilfX0IsIC0oX192NHNmKV9fQyk7Cit9CisKK2V4dGVybiBf X2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9f LCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX21tX2Zu bWFkZF9wZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9f QykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFk ZHBkICgtKF9fdjJkZilfX0EsIChfX3YyZGYpX19CLCAoX192MmRmKV9fQyk7 Cit9CisKK2V4dGVybiBfX2lubGluZSBfX20yNTZkIF9fYXR0cmlidXRlX18o KF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQorX21tMjU2X2ZubWFkZF9wZCAoX19tMjU2ZCBfX0EsIF9fbTI1 NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9f YnVpbHRpbl9pYTMyX3ZmbWFkZHBkMjU2ICgtKF9fdjRkZilfX0EsIChfX3Y0 ZGYpX19CLCAoX192NGRmKV9fQyk7Cit9CisKK2V4dGVybiBfX2lubGluZSBf X20xMjggX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlz X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfbW1fZm5tYWRkX3BzIChf X20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1 cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRwcyAoLShfX3Y0c2Yp X19BLCAoX192NHNmKV9fQiwgKF9fdjRzZilfX0MpOworfQorCitleHRlcm4g X19pbmxpbmUgX19tMjU2IF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9f LCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX21tMjU2 X2ZubWFkZF9wcyAoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9f QykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZtYWRk cHMyNTYgKC0oX192OHNmKV9fQSwgKF9fdjhzZilfX0IsIChfX3Y4c2YpX19D KTsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVf XygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCitfbW1fZm5tYWRkX3NkIChfX20xMjhkIF9fQSwgX19tMTI4 ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19i dWlsdGluX2lhMzJfdmZtYWRkc2QzICgtKF9fdjJkZilfX0EsIChfX3YyZGYp X19CLCAoX192MmRmKV9fQyk7Cit9CisKK2V4dGVybiBfX2lubGluZSBfX20x MjggX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lu bGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfbW1fZm5tYWRkX3NzIChfX20x MjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4g KF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRzczMgKC0oX192NHNmKV9f QSwgKF9fdjRzZilfX0IsIChfX3Y0c2YpX19DKTsKK30KKworZXh0ZXJuIF9f aW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18s IF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfbW1fZm5t c3ViX3BkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19D KQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRk cGQgKC0oX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIC0oX192MmRmKV9fQyk7 Cit9CisKK2V4dGVybiBfX2lubGluZSBfX20yNTZkIF9fYXR0cmlidXRlX18o KF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQorX21tMjU2X2ZubXN1Yl9wZCAoX19tMjU2ZCBfX0EsIF9fbTI1 NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9f YnVpbHRpbl9pYTMyX3ZmbWFkZHBkMjU2ICgtKF9fdjRkZilfX0EsIChfX3Y0 ZGYpX19CLCAtKF9fdjRkZilfX0MpOworfQorCitleHRlcm4gX19pbmxpbmUg X19tMTI4IF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX21tX2ZubXN1Yl9wcyAo X19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0 dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkcHMgKC0oX192NHNm KV9fQSwgKF9fdjRzZilfX0IsIC0oX192NHNmKV9fQyk7Cit9CisKK2V4dGVy biBfX2lubGluZSBfX20yNTYgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5l X18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfbW0y NTZfZm5tc3ViX3BzIChfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYg X19DKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Zm1h ZGRwczI1NiAoLShfX3Y4c2YpX19BLCAoX192OHNmKV9fQiwgLShfX3Y4c2Yp X19DKTsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1 dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCitfbW1fZm5tc3ViX3NkIChfX20xMjhkIF9fQSwgX19t MTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQp X19idWlsdGluX2lhMzJfdmZtYWRkc2QzICgtKF9fdjJkZilfX0EsIChfX3Yy ZGYpX19CLCAtKF9fdjJkZilfX0MpOworfQorCitleHRlcm4gX19pbmxpbmUg X19tMTI4IF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX21tX2ZubXN1Yl9zcyAo X19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0 dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkc3MzICgtKF9fdjRz ZilfX0EsIChfX3Y0c2YpX19CLCAtKF9fdjRzZilfX0MpOworfQorCitleHRl cm4gX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxp bmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19t bV9mbWFkZHN1Yl9wZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20x MjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMy X3ZmbWFkZHN1YnBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX3Yy ZGYpX19DKTsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTI1NmQgX19hdHRy aWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCitfbW0yNTZfZm1hZGRzdWJfcGQgKF9fbTI1NmQg X19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAo X19tMjU2ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDI1NiAoKF9fdjRk ZilfX0EsIChfX3Y0ZGYpX19CLCAoX192NGRmKV9fQyk7Cit9CisKK2V4dGVy biBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5l X18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfbW1f Zm1hZGRzdWJfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBf X0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFk ZHN1YnBzICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IsIChfX3Y0c2YpX19D KTsKK30KKworZXh0ZXJuIF9faW5saW5lIF9fbTI1NiBfX2F0dHJpYnV0ZV9f KChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkKK19tbTI1Nl9mbWFkZHN1Yl9wcyAoX19tMjU2IF9fQSwgX19t MjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19i dWlsdGluX2lhMzJfdmZtYWRkc3VicHMyNTYgKChfX3Y4c2YpX19BLCAoX192 OHNmKV9fQiwgKF9fdjhzZilfX0MpOworfQorCitleHRlcm4gX19pbmxpbmUg X19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywgX19hbHdh eXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19tbV9mbXN1YmFkZF9w ZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sK KyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBk ICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIC0oX192MmRmKV9fQyk7Cit9 CisKK2V4dGVybiBfX2lubGluZSBfX20yNTZkIF9fYXR0cmlidXRlX18oKF9f Z251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFs X18pKQorX21tMjU2X2Ztc3ViYWRkX3BkIChfX20yNTZkIF9fQSwgX19tMjU2 ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpX19i dWlsdGluX2lhMzJfdmZtYWRkc3VicGQyNTYgKChfX3Y0ZGYpX19BLCAoX192 NGRmKV9fQiwgLShfX3Y0ZGYpX19DKTsKK30KKworZXh0ZXJuIF9faW5saW5l IF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywgX19hbHdh eXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19tbV9mbXN1YmFkZF9w cyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAg cmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMgKChf X3Y0c2YpX19BLCAoX192NHNmKV9fQiwgLShfX3Y0c2YpX19DKTsKK30KKwor ZXh0ZXJuIF9faW5saW5lIF9fbTI1NiBfX2F0dHJpYnV0ZV9fKChfX2dudV9p bmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkK K19tbTI1Nl9mbXN1YmFkZF9wcyAoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwg X19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lh MzJfdmZtYWRkc3VicHMyNTYgKChfX3Y4c2YpX19BLCAoX192OHNmKV9fQiwg LShfX3Y4c2YpX19DKTsKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYuYyBiL2djYy9jb25maWcvaTM4 Ni9pMzg2LmMKaW5kZXggZmU2Y2NiZS4uMDc0NjFlMyAxMDA2NDQKLS0tIGEv Z2NjL2NvbmZpZy9pMzg2L2kzODYuYworKysgYi9nY2MvY29uZmlnL2kzODYv aTM4Ni5jCkBAIC0yMzg4OCw3ICsyMzg4OCw3IEBAIGVudW0gaXg4Nl9idWls dGlucwogICBJWDg2X0JVSUxUSU5fVkVDX1BFUk1fVjRERiwKICAgSVg4Nl9C VUlMVElOX1ZFQ19QRVJNX1Y4U0YsCiAKLSAgLyogRk1BNCBhbmQgWE9QIGlu c3RydWN0aW9ucy4gICovCisgIC8qIEZNQTQgaW5zdHJ1Y3Rpb25zLiAgKi8K ICAgSVg4Nl9CVUlMVElOX1ZGTUFERFNTLAogICBJWDg2X0JVSUxUSU5fVkZN QUREU0QsCiAgIElYODZfQlVJTFRJTl9WRk1BRERQUywKQEAgLTIzOTAwLDYg KzIzOTAwLDExIEBAIGVudW0gaXg4Nl9idWlsdGlucwogICBJWDg2X0JVSUxU SU5fVkZNQUREU1VCUFMyNTYsCiAgIElYODZfQlVJTFRJTl9WRk1BRERTVUJQ RDI1NiwKIAorICAvKiBGTUEzIGluc3RydWN0aW9ucy4gICovCisgIElYODZf QlVJTFRJTl9WRk1BRERTUzMsCisgIElYODZfQlVJTFRJTl9WRk1BRERTRDMs CisKKyAgLyogWE9QIGluc3RydWN0aW9ucy4gICovCiAgIElYODZfQlVJTFRJ Tl9WUENNT1YsCiAgIElYODZfQlVJTFRJTl9WUENNT1ZfVjJESSwKICAgSVg4 Nl9CVUlMVElOX1ZQQ01PVl9WNFNJLApAQCAtMjUxMDAsNiArMjUxMDUsMTMg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidWlsdGluX2Rlc2NyaXB0aW9uIGJk ZXNjX211bHRpX2FyZ1tdID0KICAgICAiX19idWlsdGluX2lhMzJfdmZtYWRk c2QiLCBJWDg2X0JVSUxUSU5fVkZNQUREU0QsCiAgICAgVU5LTk9XTiwgKGlu dClNVUxUSV9BUkdfM19ERiB9LAogCisgIHsgT1BUSU9OX01BU0tfSVNBX0ZN QSwgQ09ERV9GT1JfZm1haV92bWZtYWRkX3Y0c2YsCisgICAgIl9fYnVpbHRp bl9pYTMyX3ZmbWFkZHNzMyIsIElYODZfQlVJTFRJTl9WRk1BRERTUzMsCisg ICAgVU5LTk9XTiwgKGludClNVUxUSV9BUkdfM19TRiB9LAorICB7IE9QVElP Tl9NQVNLX0lTQV9GTUEsIENPREVfRk9SX2ZtYWlfdm1mbWFkZF92MmRmLAor ICAgICJfX2J1aWx0aW5faWEzMl92Zm1hZGRzZDMiLCBJWDg2X0JVSUxUSU5f VkZNQUREU0QzLAorICAgIFVOS05PV04sIChpbnQpTVVMVElfQVJHXzNfREYg fSwKKwogICB7IE9QVElPTl9NQVNLX0lTQV9GTUEgfCBPUFRJT05fTUFTS19J U0FfRk1BNCwgQ09ERV9GT1JfZm1hNGlfZm1hZGRfdjRzZiwKICAgICAiX19i dWlsdGluX2lhMzJfdmZtYWRkcHMiLCBJWDg2X0JVSUxUSU5fVkZNQUREUFMs CiAgICAgVU5LTk9XTiwgKGludClNVUxUSV9BUkdfM19TRiB9LApAQCAtMjUx MTMsNiArMjUxMjUsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJ1aWx0aW5f ZGVzY3JpcHRpb24gYmRlc2NfbXVsdGlfYXJnW10gPQogICAgICJfX2J1aWx0 aW5faWEzMl92Zm1hZGRwZDI1NiIsIElYODZfQlVJTFRJTl9WRk1BRERQRDI1 NiwKICAgICBVTktOT1dOLCAoaW50KU1VTFRJX0FSR18zX0RGMiB9LAogCisK KworCiAgIHsgT1BUSU9OX01BU0tfSVNBX0ZNQSB8IE9QVElPTl9NQVNLX0lT QV9GTUE0LCBDT0RFX0ZPUl9mbWFkZHN1Yl92NHNmLAogICAgICJfX2J1aWx0 aW5faWEzMl92Zm1hZGRzdWJwcyIsIElYODZfQlVJTFRJTl9WRk1BRERTVUJQ UywKICAgICBVTktOT1dOLCAoaW50KU1VTFRJX0FSR18zX1NGIH0sCmRpZmYg LS1naXQgYS9nY2MvY29uZmlnL2kzODYvc3NlLm1kIGIvZ2NjL2NvbmZpZy9p Mzg2L3NzZS5tZAppbmRleCBlOWY2YzNkLi4zY2JlZmVlIDEwMDY0NAotLS0g YS9nY2MvY29uZmlnL2kzODYvc3NlLm1kCisrKyBiL2djYy9jb25maWcvaTM4 Ni9zc2UubWQKQEAgLTE1OTMsNiArMTU5Myw4OSBAQAogICBvcGVyYW5kc1s0 XSA9IENPTlNUMF9SVFggKDxNT0RFPm1vZGUpOwogfSkKIAorKGRlZmluZV9l eHBhbmQgImZtYWlfdm1mbWFkZF88bW9kZT4iCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOlZGXzEyOCAwICJyZWdpc3Rlcl9vcGVyYW5kIikKKwkodmVjX21l cmdlOlZGXzEyOAorCSAgKGZtYTpWRl8xMjgKKwkgICAgKG1hdGNoX29wZXJh bmQ6VkZfMTI4IDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikKKwkgICAgKG1h dGNoX29wZXJhbmQ6VkZfMTI4IDIgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikK KwkgICAgKG1hdGNoX29wZXJhbmQ6VkZfMTI4IDMgIm5vbmltbWVkaWF0ZV9v cGVyYW5kIikpCisJICAobWF0Y2hfZHVwIDApCisJICAoY29uc3RfaW50IDEp KSldCisgICJUQVJHRVRfRk1BIikKKworKGRlZmluZV9pbnNuICIqZm1haV9m bWFkZF88bW9kZT4iCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlZGXzEyOCAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXgseCx4IikKKyAgICAgICAgKHZlY19t ZXJnZTpWRl8xMjgKKwkgIChmbWE6VkZfMTI4CisJICAgIChtYXRjaF9vcGVy YW5kOlZGXzEyOCAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiUwLCAwLHgi KQorCSAgICAobWF0Y2hfb3BlcmFuZDpWRl8xMjggMiAibm9uaW1tZWRpYXRl X29wZXJhbmQiICJ4bSwgeCx4bSIpCisJICAgIChtYXRjaF9vcGVyYW5kOlZG XzEyOCAzICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiB4LHhtLDAiKSkKKwkg IChtYXRjaF9kdXAgMCkKKwkgIChjb25zdF9pbnQgMSkpKV0KKyAgIlRBUkdF VF9GTUEiCisgICJACisgICB2Zm1hZGQxMzI8c3Nlc2NhbGFybW9kZXN1ZmZp eD5cdHslMiwgJTMsICUwfCUwLCAlMywgJTJ9CisgICB2Zm1hZGQyMTM8c3Nl c2NhbGFybW9kZXN1ZmZpeD5cdHslMywgJTIsICUwfCUwLCAlMiwgJTN9Cisg ICB2Zm1hZGQyMzE8c3Nlc2NhbGFybW9kZXN1ZmZpeD5cdHslMiwgJTEsICUw fCUwLCAlMSwgJTJ9IgorICBbKHNldF9hdHRyICJ0eXBlIiAic3NlbXVsYWRk IikKKyAgIChzZXRfYXR0ciAibW9kZSIgIjxNT0RFPiIpXSkKKworKGRlZmlu ZV9pbnNuICIqZm1haV9mbXN1Yl88bW9kZT4iCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOlZGXzEyOCAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXgseCx4IikK KyAgICAgICAgKHZlY19tZXJnZTpWRl8xMjgKKwkgIChmbWE6VkZfMTI4CisJ ICAgIChtYXRjaF9vcGVyYW5kOlZGXzEyOCAgIDEgIm5vbmltbWVkaWF0ZV9v cGVyYW5kIiAiJTAsIDAseCIpCisJICAgIChtYXRjaF9vcGVyYW5kOlZGXzEy OCAgIDIgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAieG0sIHgseG0iKQorCSAg ICAobmVnOlZGXzEyOAorCSAgICAgIChtYXRjaF9vcGVyYW5kOlZGXzEyOCAz ICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIiB4LHhtLDAiKSkpCisJICAobWF0 Y2hfZHVwIDApCisJICAoY29uc3RfaW50IDEpKSldCisgICJUQVJHRVRfRk1B IgorICAiQAorICAgdmZtc3ViMTMyPHNzZXNjYWxhcm1vZGVzdWZmaXg+XHR7 JTIsICUzLCAlMHwlMCwgJTMsICUyfQorICAgdmZtc3ViMjEzPHNzZXNjYWxh cm1vZGVzdWZmaXg+XHR7JTMsICUyLCAlMHwlMCwgJTIsICUzfQorICAgdmZt c3ViMjMxPHNzZXNjYWxhcm1vZGVzdWZmaXg+XHR7JTIsICUxLCAlMHwlMCwg JTEsICUyfSIKKyAgWyhzZXRfYXR0ciAidHlwZSIgInNzZW11bGFkZCIpCisg ICAoc2V0X2F0dHIgIm1vZGUiICI8TU9ERT4iKV0pCisKKyhkZWZpbmVfaW5z biAiKmZtYWlfZm5tYWRkXzxtb2RlPiIKKyAgWyhzZXQgKG1hdGNoX29wZXJh bmQ6VkZfMTI4IDAgInJlZ2lzdGVyX29wZXJhbmQiICI9eCx4LHgiKQorICAg ICAgICAodmVjX21lcmdlOlZGXzEyOAorCSAgKGZtYTpWRl8xMjgKKwkgICAg KG5lZzpWRl8xMjgKKwkgICAgICAobWF0Y2hfb3BlcmFuZDpWRl8xMjggMSAi bm9uaW1tZWRpYXRlX29wZXJhbmQiICIlMCwgMCx4IikpCisJICAgIChtYXRj aF9vcGVyYW5kOlZGXzEyOCAgIDIgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAi eG0sIHgseG0iKQorCSAgICAobWF0Y2hfb3BlcmFuZDpWRl8xMjggICAzICJu b25pbW1lZGlhdGVfb3BlcmFuZCIgIiB4LHhtLDAiKSkKKwkgIChtYXRjaF9k dXAgMCkKKwkgIChjb25zdF9pbnQgMSkpKV0KKyAgIlRBUkdFVF9GTUEiCisg ICJACisgICB2Zm5tYWRkMTMyPHNzZXNjYWxhcm1vZGVzdWZmaXg+XHR7JTIs ICUzLCAlMHwlMCwgJTMsICUyfQorICAgdmZubWFkZDIxMzxzc2VzY2FsYXJt b2Rlc3VmZml4Plx0eyUzLCAlMiwgJTB8JTAsICUyLCAlM30KKyAgIHZmbm1h ZGQyMzE8c3Nlc2NhbGFybW9kZXN1ZmZpeD5cdHslMiwgJTEsICUwfCUwLCAl MSwgJTJ9IgorICBbKHNldF9hdHRyICJ0eXBlIiAic3NlbXVsYWRkIikKKyAg IChzZXRfYXR0ciAibW9kZSIgIjxNT0RFPiIpXSkKKworKGRlZmluZV9pbnNu ICIqZm1haV9mbm1zdWJfPG1vZGU+IgorICBbKHNldCAobWF0Y2hfb3BlcmFu ZDpWRl8xMjggMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj14LHgseCIpCisgICAg ICAgICh2ZWNfbWVyZ2U6VkZfMTI4CisJICAoZm1hOlZGXzEyOAorCSAgICAo bmVnOlZGXzEyOAorCSAgICAgIChtYXRjaF9vcGVyYW5kOlZGXzEyOCAxICJu b25pbW1lZGlhdGVfb3BlcmFuZCIgIiUwLCAwLHgiKSkKKwkgICAgKG1hdGNo X29wZXJhbmQ6VkZfMTI4ICAgMiAibm9uaW1tZWRpYXRlX29wZXJhbmQiICJ4 bSwgeCx4bSIpCisJICAgIChuZWc6VkZfMTI4CisJICAgICAgKG1hdGNoX29w ZXJhbmQ6VkZfMTI4IDMgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiIHgseG0s MCIpKSkKKwkgIChtYXRjaF9kdXAgMCkKKwkgIChjb25zdF9pbnQgMSkpKV0K KyAgIlRBUkdFVF9GTUEiCisgICJACisgICB2Zm5tc3ViMTMyPHNzZXNjYWxh cm1vZGVzdWZmaXg+XHR7JTIsICUzLCAlMHwlMCwgJTMsICUyfQorICAgdmZu bXN1YjIxMzxzc2VzY2FsYXJtb2Rlc3VmZml4Plx0eyUzLCAlMiwgJTB8JTAs ICUyLCAlM30KKyAgIHZmbm1zdWIyMzE8c3Nlc2NhbGFybW9kZXN1ZmZpeD5c dHslMiwgJTEsICUwfCUwLCAlMSwgJTJ9IgorICBbKHNldF9hdHRyICJ0eXBl IiAic3NlbXVsYWRkIikKKyAgIChzZXRfYXR0ciAibW9kZSIgIjxNT0RFPiIp XSkKKwogKGRlZmluZV9pbnNuICIqZm1hNGlfdm1mbWFkZF88bW9kZT4iCiAg IFsoc2V0IChtYXRjaF9vcGVyYW5kOlZGXzEyOCAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiPXgseCIpCiAJKHZlY19tZXJnZTpWRl8xMjgKQEAgLTE2NzcsNiAr MTc2MCw3IEBACiAJICBVTlNQRUNfRk1BRERTVUIpKV0KICAgIlRBUkdFVF9G TUEgfHwgVEFSR0VUX0ZNQTQiKQogCisKIChkZWZpbmVfaW5zbiAiKmZtYTRf Zm1hZGRzdWJfPG1vZGU+IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWRiAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXgseCIpCiAJKHVuc3BlYzpWRgpkaWZm IC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L3g4NmludHJpbi5oIGIvZ2NjL2Nv bmZpZy9pMzg2L3g4NmludHJpbi5oCmluZGV4IDg4NDU2ZjkuLjU0NmI4YTgg MTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni94ODZpbnRyaW4uaAorKysg Yi9nY2MvY29uZmlnL2kzODYveDg2aW50cmluLmgKQEAgLTkzLDQgKzkzLDgg QEAKICNpbmNsdWRlIDxwb3BjbnRpbnRyaW4uaD4KICNlbmRpZgogCisjaWZk ZWYgX19GTUFfXworI2luY2x1ZGUgPGZtYWludHJpbi5oPgorI2VuZGlmCisK ICNlbmRpZiAvKiBfWDg2SU5UUklOX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ZtYS0yNTYtZm1h ZGRYWC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvZm1hLTI1 Ni1mbWFkZFhYLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uYmU1NmI1YwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L2ZtYS0yNTYtZm1hZGRYWC5jCkBAIC0wLDAgKzEs NjEgQEAKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1l ZmZlY3RpdmUtdGFyZ2V0IGZtYSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1P MiAtbWZtYSIgfSAqLworCisjaW5jbHVkZSAiZm1hLWNoZWNrLmgiCisKKyNp bmNsdWRlIDx4ODZpbnRyaW4uaD4KKyNpbmNsdWRlICJtMjU2LWNoZWNrLmgi CisKK3ZvaWQKK2NoZWNrX21tMjU2X2ZtYWRkX3BkIChfX20yNTZkIF9fQSwg X19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICB1bmlvbjI1NmQgYSxi LGMsZTsKKyAgYS54ID0gX19BOworICBiLnggPSBfX0I7CisgIGMueCA9IF9f QzsKKyAgZG91YmxlIGRbNF07CisgIGludCBpOworICBlLnggPSBfbW0yNTZf Zm1hZGRfcGQgKF9fQSwgX19CLCBfX0MpOworICBmb3IgKGk9MDsgaSA8IDQ7 aSsrKQorICAgIHsKKyAgICAgIGRbaV0gPSBhLmFbaV0qYi5hW2ldK2MuYVtp XTsKKyAgICB9CisgIGlmIChjaGVja191bmlvbjI1NmQgKGUsIGQpKQorICAg IGFib3J0ICgpOworfQorCit2b2lkCitjaGVja19tbTI1Nl9mbWFkZF9wcyAo X19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgdW5p b24yNTYgYSxiLGMsZTsKKyAgYS54ID0gX19BOworICBiLnggPSBfX0I7Cisg IGMueCA9IF9fQzsKKyAgZmxvYXQgZFs4XTsKKyAgaW50IGk7CisgIGUueCA9 IF9tbTI1Nl9mbWFkZF9wcyAoX19BLCBfX0IsIF9fQyk7CisgIGZvciAoaT0w OyBpIDwgODtpKyspCisgICAgeworICAgICAgZFtpXSA9IGEuYVtpXSpiLmFb aV0rYy5hW2ldOworICAgIH0KKyAgaWYgKGNoZWNrX3VuaW9uMjU2IChlLCBk KSkKKyAgICBhYm9ydCAoKTsKK30KKworc3RhdGljIHZvaWQKK2ZtYV90ZXN0 ICh2b2lkKQoreworICB1bmlvbjI1NiBjWzNdOworICB1bmlvbjI1NmQgZFsz XTsKKyAgaW50IGksajsKKyAgZm9yIChpID0gMDtpIDwgMztpKyspCisgICAg eworICAgICAgZm9yIChqID0gMDtqIDwgODtqKyspCisgICAgICAgIGNbaV0u YVtqXSA9IGkqaiArIDMuNTsKKyAgICAgIGZvciAoaiA9IDA7aiA8IDQ7aisr KQorICAgICAgICBkW2ldLmFbal0gPSBpKmogKyAzLjU7CisgICAgfQorICBj aGVja19tbTI1Nl9mbWFkZF9wZCAoZFswXS54LCBkWzFdLngsIGRbMl0ueCk7 CisgIGNoZWNrX21tMjU2X2ZtYWRkX3BzIChjWzBdLngsIGNbMV0ueCwgY1sy XS54KTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L2ZtYS0yNTYtZm1hZGRzdWJYWC5jIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvZm1hLTI1Ni1mbWFkZHN1YlhYLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyNjFkZAotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ZtYS0y NTYtZm1hZGRzdWJYWC5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qIHsgZGctZG8g cnVuIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGZt YSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWZtYSIgfSAqLworCisj aW5jbHVkZSAiZm1hLWNoZWNrLmgiCisKKyNpbmNsdWRlIDx4ODZpbnRyaW4u aD4KKyNpbmNsdWRlICJtMjU2LWNoZWNrLmgiCisKK3ZvaWQKK2NoZWNrX21t MjU2X2ZtYWRkc3ViX3BzIChfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20y NTYgX19DKQoreworICB1bmlvbjI1NiBhLGIsYyxlOworICBhLnggPSBfX0E7 CisgIGIueCA9IF9fQjsKKyAgYy54ID0gX19DOworICBmbG9hdCBkWzhdOwor ICBpbnQgaTsKKyAgZS54ID0gX21tMjU2X2ZtYWRkc3ViX3BzIChfX0EsIF9f QiwgX19DKTsKKyAgZm9yIChpPTA7IGkgPCA4O2krKykKKyAgICB7CisgICAg ICBkW2ldID0gYS5hW2ldKmIuYVtpXSArIChpJTIgPT0gMSA/IGMuYVtpXSA6 IC1jLmFbaV0pOworICAgIH0KKyAgaWYgKGNoZWNrX3VuaW9uMjU2IChlLCBk KSkKKyAgICBhYm9ydCAoKTsKK30KKwordm9pZAorY2hlY2tfbW0yNTZfZm1h ZGRzdWJfcGQgKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBf X0MpCit7CisgIHVuaW9uMjU2ZCBhLGIsYyxlOworICBhLnggPSBfX0E7Cisg IGIueCA9IF9fQjsKKyAgYy54ID0gX19DOworICBkb3VibGUgZFs0XTsKKyAg aW50IGk7CisgIGUueCA9IF9tbTI1Nl9mbWFkZHN1Yl9wZCAoX19BLCBfX0Is IF9fQyk7CisgIGZvciAoaT0wOyBpIDwgNDtpKyspCisgICAgeworICAgICAg ZFtpXSA9IGEuYVtpXSpiLmFbaV0gKyAoaSUyID09IDEgPyBjLmFbaV0gOiAt Yy5hW2ldKTsKKyAgICB9CisgIGlmIChjaGVja191bmlvbjI1NmQgKGUsIGQp KQorICAgIGFib3J0ICgpOworfQorCitzdGF0aWMgdm9pZAorZm1hX3Rlc3Qg KHZvaWQpCit7CisgIHVuaW9uMjU2IGNbM107CisgIHVuaW9uMjU2ZCBkWzNd OworICBpbnQgaSxqOworICBmb3IgKGkgPSAwO2kgPCAzO2krKykKKyAgICB7 CisgICAgICBmb3IgKGogPSAwO2ogPCA4O2orKykKKyAgICAgICAgY1tpXS5h W2pdID0gaSpqICsgMy41OworICAgICAgZm9yIChqID0gMDtqIDwgNDtqKysp CisgICAgICAgIGRbaV0uYVtqXSA9IGkqaiArIDMuNTsKKyAgICB9CisgIGNo ZWNrX21tMjU2X2ZtYWRkc3ViX3BkIChkWzBdLngsIGRbMV0ueCwgZFsyXS54 KTsKKyAgY2hlY2tfbW0yNTZfZm1hZGRzdWJfcHMgKGNbMF0ueCwgY1sxXS54 LCBjWzJdLngpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvZm1hLTI1Ni1mbXN1YlhYLmMgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9mbWEtMjU2LWZtc3ViWFguYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWFlOTFiCi0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvZm1hLTI1 Ni1mbXN1YlhYLmMKQEAgLTAsMCArMSw2MiBAQAorLyogeyBkZy1kbyBydW4g fSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgZm1hIH0g Ki8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tZm1hIiB9ICovCisKKyNpbmNs dWRlICJmbWEtY2hlY2suaCIKKworI2luY2x1ZGUgPHg4NmludHJpbi5oPgor I2luY2x1ZGUgIm0yNTYtY2hlY2suaCIKKworCit2b2lkCitjaGVja19tbTI1 Nl9mbXN1Yl9wZCAoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZk IF9fQykKK3sKKyAgdW5pb24yNTZkIGEsYixjLGU7CisgIGEueCA9IF9fQTsK KyAgYi54ID0gX19COworICBjLnggPSBfX0M7CisgIGRvdWJsZSBkWzRdOwor ICBpbnQgaTsKKyAgZS54ID0gX21tMjU2X2Ztc3ViX3BkIChfX0EsIF9fQiwg X19DKTsKKyAgZm9yIChpPTA7IGkgPCA0O2krKykKKyAgICB7CisgICAgICBk W2ldID0gYS5hW2ldKmIuYVtpXS1jLmFbaV07CisgICAgfQorICBpZiAoY2hl Y2tfdW5pb24yNTZkIChlLCBkKSkKKyAgICBhYm9ydCAoKTsKK30KKwordm9p ZAorY2hlY2tfbW0yNTZfZm1zdWJfcHMgKF9fbTI1NiBfX0EsIF9fbTI1NiBf X0IsIF9fbTI1NiBfX0MpCit7CisgIHVuaW9uMjU2IGEsYixjLGU7CisgIGEu eCA9IF9fQTsKKyAgYi54ID0gX19COworICBjLnggPSBfX0M7CisgIGZsb2F0 IGRbOF07CisgIGludCBpOworICBlLnggPSBfbW0yNTZfZm1zdWJfcHMgKF9f QSwgX19CLCBfX0MpOworICBmb3IgKGk9MDsgaSA8IDg7aSsrKQorICAgIHsK KyAgICAgIGRbaV0gPSBhLmFbaV0qYi5hW2ldLWMuYVtpXTsKKyAgICB9Cisg IGlmIChjaGVja191bmlvbjI1NiAoZSwgZCkpCisgICAgYWJvcnQgKCk7Cit9 CisKK3N0YXRpYyB2b2lkCitmbWFfdGVzdCAodm9pZCkKK3sKKyAgdW5pb24y NTYgY1szXTsKKyAgdW5pb24yNTZkIGRbM107CisgIGludCBpLGo7CisgIGZv ciAoaSA9IDA7aSA8IDM7aSsrKQorICAgIHsKKyAgICAgIGZvciAoaiA9IDA7 aiA8IDg7aisrKQorICAgICAgICBjW2ldLmFbal0gPSBpKmogKyAzLjU7Cisg ICAgICBmb3IgKGogPSAwO2ogPCA0O2orKykKKyAgICAgICAgZFtpXS5hW2pd ID0gaSpqICsgMy41OworICAgIH0KKyAgY2hlY2tfbW0yNTZfZm1zdWJfcGQg KGRbMF0ueCwgZFsxXS54LCBkWzJdLngpOworICBjaGVja19tbTI1Nl9mbXN1 Yl9wcyAoY1swXS54LCBjWzFdLngsIGNbMl0ueCk7Cit9CmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9mbWEtMjU2LWZtc3Vi YWRkWFguYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ZtYS0y NTYtZm1zdWJhZGRYWC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjY4YmYzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9mbWEtMjU2LWZtc3ViYWRkWFguYwpAQCAt MCwwICsxLDYxIEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLXJl cXVpcmUtZWZmZWN0aXZlLXRhcmdldCBmbWEgfSAqLworLyogeyBkZy1vcHRp b25zICItTzIgLW1mbWEiIH0gKi8KKworI2luY2x1ZGUgImZtYS1jaGVjay5o IgorCisjaW5jbHVkZSA8eDg2aW50cmluLmg+CisjaW5jbHVkZSAibTI1Ni1j aGVjay5oIgorCit2b2lkCitjaGVja19tbTI1Nl9mbXN1YmFkZF9wcyAoX19t MjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgdW5pb24y NTYgYSxiLGMsZTsKKyAgYS54ID0gX19BOworICBiLnggPSBfX0I7CisgIGMu eCA9IF9fQzsKKyAgZmxvYXQgZFs4XTsKKyAgaW50IGk7CisgIGUueCA9IF9t bTI1Nl9mbXN1YmFkZF9wcyAoX19BLCBfX0IsIF9fQyk7CisgIGZvciAoaT0w OyBpIDwgODtpKyspCisgICAgeworICAgICAgZFtpXSA9IGEuYVtpXSpiLmFb aV0gKyAoaSUyID09IDEgPyAtYy5hW2ldIDogYy5hW2ldKTsKKyAgICB9Cisg IGlmIChjaGVja191bmlvbjI1NiAoZSwgZCkpCisgICAgYWJvcnQgKCk7Cit9 CisKK3ZvaWQKK2NoZWNrX21tMjU2X2Ztc3ViYWRkX3BkIChfX20yNTZkIF9f QSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICB1bmlvbjI1NmQg YSxiLGMsZTsKKyAgYS54ID0gX19BOworICBiLnggPSBfX0I7CisgIGMueCA9 IF9fQzsKKyAgZG91YmxlIGRbNF07CisgIGludCBpOworICBlLnggPSBfbW0y NTZfZm1zdWJhZGRfcGQgKF9fQSwgX19CLCBfX0MpOworICBmb3IgKGk9MDsg aSA8IDQ7aSsrKQorICAgIHsKKyAgICAgIGRbaV0gPSBhLmFbaV0qYi5hW2ld ICsgKGklMiA9PSAxID8gLWMuYVtpXSA6IGMuYVtpXSk7CisgICAgfQorICBp ZiAoY2hlY2tfdW5pb24yNTZkIChlLCBkKSkKKyAgICBhYm9ydCAoKTsKK30K Kworc3RhdGljIHZvaWQKK2ZtYV90ZXN0ICh2b2lkKQoreworICB1bmlvbjI1 NiBjWzNdOworICB1bmlvbjI1NmQgZFszXTsKKyAgaW50IGksajsKKyAgZm9y IChpID0gMDtpIDwgMztpKyspCisgICAgeworICAgICAgZm9yIChqID0gMDtq IDwgODtqKyspCisgICAgICAgIGNbaV0uYVtqXSA9IGkqaiArIDMuNTsKKyAg ICAgIGZvciAoaiA9IDA7aiA8IDQ7aisrKQorICAgICAgICBkW2ldLmFbal0g PSBpKmogKyAzLjU7CisgICAgfQorICBjaGVja19tbTI1Nl9mbXN1YmFkZF9w ZCAoZFswXS54LCBkWzFdLngsIGRbMl0ueCk7CisgIGNoZWNrX21tMjU2X2Zt c3ViYWRkX3BzIChjWzBdLngsIGNbMV0ueCwgY1syXS54KTsKK30KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ZtYS0yNTYt Zm5tYWRkWFguYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2Zt YS0yNTYtZm5tYWRkWFguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi43MjdlNTU3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2kzODYvZm1hLTI1Ni1mbm1hZGRYWC5jCkBAIC0w LDAgKzEsNjMgQEAKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctcmVx dWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGZtYSB9ICovCisvKiB7IGRnLW9wdGlv bnMgIi1PMiAtbWZtYSIgfSAqLworCisjaW5jbHVkZSAiZm1hLWNoZWNrLmgi CisKKyNpbmNsdWRlIDx4ODZpbnRyaW4uaD4KKyNpbmNsdWRlICJtMjU2LWNo ZWNrLmgiCisKK3ZvaWQKK2NoZWNrX21tMjU2X2ZubWFkZF9wZCAoX19tMjU2 ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgdW5pb24y NTZkIGEsYixjLGU7CisgIGEueCA9IF9fQTsKKyAgYi54ID0gX19COworICBj LnggPSBfX0M7CisgIGRvdWJsZSBkWzRdOworICBpbnQgaTsKKyAgZS54ID0g X21tMjU2X2ZubWFkZF9wZCAoX19BLCBfX0IsIF9fQyk7CisgIGZvciAoaT0w OyBpIDwgNDtpKyspCisgICAgeworICAgICAgZFtpXSA9IC1hLmFbaV0qYi5h W2ldK2MuYVtpXTsKKyAgICB9CisgIGlmIChjaGVja191bmlvbjI1NmQgKGUs IGQpKQorICAgIGFib3J0ICgpOworfQorCit2b2lkCitjaGVja19tbTI1Nl9m bm1hZGRfcHMgKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0Mp Cit7CisgIHVuaW9uMjU2IGEsYixjLGU7CisgIGEueCA9IF9fQTsKKyAgYi54 ID0gX19COworICBjLnggPSBfX0M7CisgIGZsb2F0IGRbOF07CisgIGludCBp OworICBlLnggPSBfbW0yNTZfZm5tYWRkX3BzIChfX0EsIF9fQiwgX19DKTsK KyAgZm9yIChpPTA7IGkgPCA4O2krKykKKyAgICB7CisgICAgICBkW2ldID0g LWEuYVtpXSpiLmFbaV0rYy5hW2ldOworICAgIH0KKyAgaWYgKGNoZWNrX3Vu aW9uMjU2IChlLCBkKSkKKyAgICBhYm9ydCAoKTsKK30KKworc3RhdGljIHZv aWQKK2ZtYV90ZXN0ICh2b2lkKQoreworICB1bmlvbjI1NiBjWzNdOworICB1 bmlvbjI1NmQgZFszXTsKKyAgaW50IGksajsKKyAgZm9yIChpID0gMDtpIDwg MztpKyspCisgICAgeworICAgICAgZm9yIChqID0gMDtqIDwgODtqKyspCisg ICAgICAgIGNbaV0uYVtqXSA9IGkqaiArIDMuNTsKKyAgICAgIGZvciAoaiA9 IDA7aiA8IDQ7aisrKQorICAgICAgICBkW2ldLmFbal0gPSBpKmogKyAzLjU7 CisgICAgfQorICBjaGVja19tbTI1Nl9mbm1hZGRfcGQgKGRbMF0ueCwgZFsx XS54LCBkWzJdLngpOworICBjaGVja19tbTI1Nl9mbm1hZGRfcHMgKGNbMF0u eCwgY1sxXS54LCBjWzJdLngpOworfQorCisKZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ZtYS0yNTYtZm5tc3ViWFguYyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ZtYS0yNTYtZm5tc3Vi WFguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDkz MDJjCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvZm1hLTI1Ni1mbm1zdWJYWC5jCkBAIC0wLDAgKzEsNjIgQEAK Ky8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3Rp dmUtdGFyZ2V0IGZtYSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWZt YSIgfSAqLworCisjaW5jbHVkZSAiZm1hLWNoZWNrLmgiCisKKyNpbmNsdWRl IDx4ODZpbnRyaW4uaD4KKyNpbmNsdWRlICJtMjU2LWNoZWNrLmgiCisKKwor dm9pZAorY2hlY2tfbW0yNTZfZm5tc3ViX3BkIChfX20yNTZkIF9fQSwgX19t MjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICB1bmlvbjI1NmQgYSxiLGMs ZTsKKyAgYS54ID0gX19BOworICBiLnggPSBfX0I7CisgIGMueCA9IF9fQzsK KyAgZG91YmxlIGRbNF07CisgIGludCBpOworICBlLnggPSBfbW0yNTZfZm5t c3ViX3BkIChfX0EsIF9fQiwgX19DKTsKKyAgZm9yIChpPTA7IGkgPCA0O2kr KykKKyAgICB7CisgICAgICBkW2ldID0gLWEuYVtpXSpiLmFbaV0tYy5hW2ld OworICAgIH0KKyAgaWYgKGNoZWNrX3VuaW9uMjU2ZCAoZSwgZCkpCisgICAg YWJvcnQgKCk7Cit9CisKK3ZvaWQKK2NoZWNrX21tMjU2X2ZubXN1Yl9wcyAo X19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgdW5p b24yNTYgYSxiLGMsZTsKKyAgYS54ID0gX19BOworICBiLnggPSBfX0I7Cisg IGMueCA9IF9fQzsKKyAgZmxvYXQgZFs4XTsKKyAgaW50IGk7CisgIGUueCA9 IF9tbTI1Nl9mbm1zdWJfcHMgKF9fQSwgX19CLCBfX0MpOworICBmb3IgKGk9 MDsgaSA8IDg7aSsrKQorICAgIHsKKyAgICAgIGRbaV0gPSAtYS5hW2ldKmIu YVtpXS1jLmFbaV07CisgICAgfQorICBpZiAoY2hlY2tfdW5pb24yNTYgKGUs IGQpKQorICAgIGFib3J0ICgpOworfQorCitzdGF0aWMgdm9pZAorZm1hX3Rl c3QgKHZvaWQpCit7CisgIHVuaW9uMjU2IGNbM107CisgIHVuaW9uMjU2ZCBk WzNdOworICBpbnQgaSxqOworICBmb3IgKGkgPSAwO2kgPCAzO2krKykKKyAg ICB7CisgICAgICBmb3IgKGogPSAwO2ogPCA4O2orKykKKyAgICAgICAgY1tp XS5hW2pdID0gaSpqICsgMy41OworICAgICAgZm9yIChqID0gMDtqIDwgNDtq KyspCisgICAgICAgIGRbaV0uYVtqXSA9IGkqaiArIDMuNTsKKyAgICB9Cisg IGNoZWNrX21tMjU2X2ZubXN1Yl9wZCAoZFswXS54LCBkWzFdLngsIGRbMl0u eCk7CisgIGNoZWNrX21tMjU2X2ZubXN1Yl9wcyAoY1swXS54LCBjWzFdLngs IGNbMl0ueCk7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9mbWEtY2hlY2suaCBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L2ZtYS1jaGVjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmRiOTBjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9mbWEtY2hlY2suaApAQCAtMCww ICsxLDI3IEBACisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJj cHVpZC5oIgorCitzdGF0aWMgdm9pZCBmbWFfdGVzdCAodm9pZCk7CisKK3N0 YXRpYyB2b2lkCitfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorZG9fdGVz dCAodm9pZCkKK3sKKyAgZm1hX3Rlc3QgKCk7Cit9CisKK2ludAorbWFpbiAo KQoreworICB1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OworCisg IGlmICghX19nZXRfY3B1aWQgKDEsICZlYXgsICZlYngsICZlY3gsICZlZHgp KQorICAgIHJldHVybiAwOworCisgIC8qIFJ1biBGTUEgdGVzdCBvbmx5IGlm IGhvc3QgaGFzIEZNQSBzdXBwb3J0LiAgKi8KKyAgaWYgKGVjeCAmIGJpdF9G TUEpCisgICAgZG9fdGVzdCAoKTsKKworICBleGl0ICgwKTsKK30KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ZtYS1jb21w aWxlLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9mbWEtY29t cGlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZl MTQ1YjUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9mbWEtY29tcGlsZS5jCkBAIC0wLDAgKzEsMjIxIEBACisv KiBUZXN0IHRoYXQgdGhlIGNvbXBpbGVyIHByb3Blcmx5IGdlbmVyYXRlcyBm bG9hdGluZyBwb2ludCBtdWx0aXBseQorICAgYW5kIGFkZCBpbnN0cnVjdGlv bnMgRk1BIHN5c3RlbXMuICAqLworCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAq LworLyogeyBkZy1vcHRpb25zICItTzIgLW1mbWEiIH0gKi8KKworI2luY2x1 ZGUgPHg4NmludHJpbi5oPgorCitfX20xMjhkCitjaGVja19tbV9mbWFkZF9w ZCAoX19tMTI4ZCBhLCBfX20xMjhkIGIsX19tMTI4ZCBjKQoreworICAgICAg cmV0dXJuIF9tbV9mbWFkZF9wZCAoYSwgYiwgYyk7Cit9CisKK19fbTI1NmQK K2NoZWNrX21tMjU2X2ZtYWRkX3BkIChfX20yNTZkIGEsIF9fbTI1NmQgYixf X20yNTZkIGMpCit7CisgICAgICByZXR1cm4gX21tMjU2X2ZtYWRkX3BkIChh LCBiLCBjKTsKK30KKworX19tMTI4CitjaGVja19tbV9mbWFkZF9wcyAoX19t MTI4IGEsIF9fbTEyOCBiLF9fbTEyOCBjKQoreworICAgICAgcmV0dXJuIF9t bV9mbWFkZF9wcyAoYSwgYiwgYyk7Cit9CisKK19fbTI1NgorY2hlY2tfbW0y NTZfZm1hZGRfcHMgKF9fbTI1NiBhLCBfX20yNTYgYixfX20yNTYgYykKK3sK KyAgICAgIHJldHVybiBfbW0yNTZfZm1hZGRfcHMgKGEsIGIsIGMpOworfQor CitfX20xMjhkCitjaGVja19tbV9mbWFkZF9zZCAoX19tMTI4ZCBhLCBfX20x MjhkIGIsX19tMTI4ZCBjKQoreworICAgICAgcmV0dXJuIF9tbV9mbWFkZF9z ZCAoYSwgYiwgYyk7Cit9CisKK19fbTEyOAorY2hlY2tfbW1fZm1hZGRfc3Mg KF9fbTEyOCBhLCBfX20xMjggYixfX20xMjggYykKK3sKKyAgICAgIHJldHVy biBfbW1fZm1hZGRfc3MgKGEsIGIsIGMpOworfQorCitfX20xMjhkCitjaGVj a19tbV9mbXN1Yl9wZCAoX19tMTI4ZCBhLCBfX20xMjhkIGIsX19tMTI4ZCBj KQoreworICAgICAgcmV0dXJuIF9tbV9mbXN1Yl9wZCAoYSwgYiwgYyk7Cit9 CisKK19fbTI1NmQKK2NoZWNrX21tMjU2X2Ztc3ViX3BkIChfX20yNTZkIGEs IF9fbTI1NmQgYixfX20yNTZkIGMpCit7CisgICAgICByZXR1cm4gX21tMjU2 X2Ztc3ViX3BkIChhLCBiLCBjKTsKK30KKworX19tMTI4CitjaGVja19tbV9m bXN1Yl9wcyAoX19tMTI4IGEsIF9fbTEyOCBiLF9fbTEyOCBjKQoreworICAg ICAgcmV0dXJuIF9tbV9mbXN1Yl9wcyAoYSwgYiwgYyk7Cit9CisKK19fbTI1 NgorY2hlY2tfbW0yNTZfZm1zdWJfcHMgKF9fbTI1NiBhLCBfX20yNTYgYixf X20yNTYgYykKK3sKKyAgICAgIHJldHVybiBfbW0yNTZfZm1zdWJfcHMgKGEs IGIsIGMpOworfQorCitfX20xMjhkCitjaGVja19tbV9mbXN1Yl9zZCAoX19t MTI4ZCBhLCBfX20xMjhkIGIsX19tMTI4ZCBjKQoreworICAgICAgcmV0dXJu IF9tbV9mbXN1Yl9zZCAoYSwgYiwgYyk7Cit9CisKK19fbTEyOAorY2hlY2tf bW1fZm1zdWJfc3MgKF9fbTEyOCBhLCBfX20xMjggYixfX20xMjggYykKK3sK KyAgICAgIHJldHVybiBfbW1fZm1zdWJfc3MgKGEsIGIsIGMpOworfQorCitf X20xMjhkCitjaGVja19tbV9mbm1hZGRfcGQgKF9fbTEyOGQgYSwgX19tMTI4 ZCBiLF9fbTEyOGQgYykKK3sKKyAgICAgIHJldHVybiBfbW1fZm5tYWRkX3Bk IChhLCBiLCBjKTsKK30KKworX19tMjU2ZAorY2hlY2tfbW0yNTZfZm5tYWRk X3BkIChfX20yNTZkIGEsIF9fbTI1NmQgYixfX20yNTZkIGMpCit7CisgICAg ICByZXR1cm4gX21tMjU2X2ZubWFkZF9wZCAoYSwgYiwgYyk7Cit9CisKK19f bTEyOAorY2hlY2tfbW1fZm5tYWRkX3BzIChfX20xMjggYSwgX19tMTI4IGIs X19tMTI4IGMpCit7CisgICAgICByZXR1cm4gX21tX2ZubWFkZF9wcyAoYSwg YiwgYyk7Cit9CisKK19fbTI1NgorY2hlY2tfbW0yNTZfZm5tYWRkX3BzIChf X20yNTYgYSwgX19tMjU2IGIsX19tMjU2IGMpCit7CisgICAgICByZXR1cm4g X21tMjU2X2ZubWFkZF9wcyAoYSwgYiwgYyk7Cit9CisKK19fbTEyOGQKK2No ZWNrX21tX2ZubWFkZF9zZCAoX19tMTI4ZCBhLCBfX20xMjhkIGIsX19tMTI4 ZCBjKQoreworICAgICAgcmV0dXJuIF9tbV9mbm1hZGRfc2QgKGEsIGIsIGMp OworfQorCitfX20xMjgKK2NoZWNrX21tX2ZubWFkZF9zcyAoX19tMTI4IGEs IF9fbTEyOCBiLF9fbTEyOCBjKQoreworICAgICAgcmV0dXJuIF9tbV9mbm1h ZGRfc3MgKGEsIGIsIGMpOworfQorCitfX20xMjhkCitjaGVja19tbV9mbm1z dWJfcGQgKF9fbTEyOGQgYSwgX19tMTI4ZCBiLF9fbTEyOGQgYykKK3sKKyAg ICAgIHJldHVybiBfbW1fZm5tc3ViX3BkIChhLCBiLCBjKTsKK30KKworX19t MjU2ZAorY2hlY2tfbW0yNTZfZm5tc3ViX3BkIChfX20yNTZkIGEsIF9fbTI1 NmQgYixfX20yNTZkIGMpCit7CisgICAgICByZXR1cm4gX21tMjU2X2ZubXN1 Yl9wZCAoYSwgYiwgYyk7Cit9CisKK19fbTEyOAorY2hlY2tfbW1fZm5tc3Vi X3BzIChfX20xMjggYSwgX19tMTI4IGIsX19tMTI4IGMpCit7CisgICAgICBy ZXR1cm4gX21tX2ZubXN1Yl9wcyAoYSwgYiwgYyk7Cit9CisKK19fbTI1Ngor Y2hlY2tfbW0yNTZfZm5tc3ViX3BzIChfX20yNTYgYSwgX19tMjU2IGIsX19t MjU2IGMpCit7CisgICAgICByZXR1cm4gX21tMjU2X2ZubXN1Yl9wcyAoYSwg YiwgYyk7Cit9CisKK19fbTEyOGQKK2NoZWNrX21tX2ZubXN1Yl9zZCAoX19t MTI4ZCBhLCBfX20xMjhkIGIsX19tMTI4ZCBjKQoreworICAgICAgcmV0dXJu IF9tbV9mbm1zdWJfc2QgKGEsIGIsIGMpOworfQorCitfX20xMjgKK2NoZWNr X21tX2ZubXN1Yl9zcyAoX19tMTI4IGEsIF9fbTEyOCBiLF9fbTEyOCBjKQor eworICAgICAgcmV0dXJuIF9tbV9mbm1zdWJfc3MgKGEsIGIsIGMpOworfQor CitfX20xMjhkCitjaGVja19tbV9mbWFkZHN1Yl9wZCAoX19tMTI4ZCBhLCBf X20xMjhkIGIsX19tMTI4ZCBjKQoreworICAgICAgcmV0dXJuIF9tbV9mbWFk ZHN1Yl9wZCAoYSwgYiwgYyk7Cit9CisKK19fbTI1NmQKK2NoZWNrX21tMjU2 X2ZtYWRkc3ViX3BkIChfX20yNTZkIGEsIF9fbTI1NmQgYixfX20yNTZkIGMp Cit7CisgICAgICByZXR1cm4gX21tMjU2X2ZtYWRkc3ViX3BkIChhLCBiLCBj KTsKK30KKworX19tMTI4CitjaGVja19tbV9mbWFkZHN1Yl9wcyAoX19tMTI4 IGEsIF9fbTEyOCBiLF9fbTEyOCBjKQoreworICAgICAgcmV0dXJuIF9tbV9m bWFkZHN1Yl9wcyAoYSwgYiwgYyk7Cit9CisKK19fbTI1NgorY2hlY2tfbW0y NTZfZm1hZGRzdWJfcHMgKF9fbTI1NiBhLCBfX20yNTYgYixfX20yNTYgYykK K3sKKyAgICAgIHJldHVybiBfbW0yNTZfZm1hZGRzdWJfcHMgKGEsIGIsIGMp OworfQorCitfX20xMjhkCitjaGVja19tbV9mbXN1YmFkZF9wZCAoX19tMTI4 ZCBhLCBfX20xMjhkIGIsX19tMTI4ZCBjKQoreworICAgICAgcmV0dXJuIF9t bV9mbXN1YmFkZF9wZCAoYSwgYiwgYyk7Cit9CisKK19fbTI1NmQKK2NoZWNr X21tMjU2X2Ztc3ViYWRkX3BkIChfX20yNTZkIGEsIF9fbTI1NmQgYixfX20y NTZkIGMpCit7CisgICAgICByZXR1cm4gX21tMjU2X2Ztc3ViYWRkX3BkIChh LCBiLCBjKTsKK30KKworX19tMTI4CitjaGVja19tbV9mbXN1YmFkZF9wcyAo X19tMTI4IGEsIF9fbTEyOCBiLF9fbTEyOCBjKQoreworICAgICAgcmV0dXJu IF9tbV9mbXN1YmFkZF9wcyAoYSwgYiwgYyk7Cit9CisKK19fbTI1NgorY2hl Y2tfbW0yNTZfZm1zdWJhZGRfcHMgKF9fbTI1NiBhLCBfX20yNTYgYixfX20y NTYgYykKK3sKKyAgICAgIHJldHVybiBfbW0yNTZfZm1zdWJhZGRfcHMgKGEs IGIsIGMpOworfQorCisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci10aW1lcyAidmZtYWRkW15zXS4ucHMiIDIgfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZmbXN1Yltec10uLnBzIiAy IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz ICJ2Zm5tYWRkLi4ucHMiIDIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMgInZmbm1zdWIuLi5wcyIgMiB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidmZtYWRkc3Vi Li4ucHMiIDIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItdGltZXMgInZmbXN1YmFkZC4uLnBzIiAyIH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2Zm1hZGRbXnNdLi5wZCIg MiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1l cyAidmZtc3ViW15zXS4ucGQiIDIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMgInZmbm1hZGQuLi5wZCIgMiB9IH0gKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidmZubXN1 Yi4uLnBkIiAyIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLXRpbWVzICJ2Zm1hZGRzdWIuLi5wZCIgMiB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidmZtc3ViYWRkLi4ucGQi IDIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGlt ZXMgInZmbWFkZFtec10uLnNzIiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2Zm1zdWJbXnNdLi5zcyIgMSB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidmZu bWFkZC4uLnNzIiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLXRpbWVzICJ2Zm5tc3ViLi4uc3MiIDEgfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZmbWFkZFtec10uLnNk IiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRp bWVzICJ2Zm1zdWJbXnNdLi5zZCIgMSB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyAidmZubWFkZC4uLnNkIiAxIH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2Zm5t c3ViLi4uc2QiIDEgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9mbWEtZm1hZGRYWC5jIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvZm1hLWZtYWRkWFguYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjFlYmM4Ci0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvZm1hLWZtYWRk WFguYwpAQCAtMCwwICsxLDEwMiBAQAorLyogeyBkZy1kbyBydW4gfSAqLwor LyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgZm1hIH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLU8yIC1tZm1hIiB9ICovCisKKyNpbmNsdWRlICJm bWEtY2hlY2suaCIKKworI2luY2x1ZGUgPHg4NmludHJpbi5oPgorI2luY2x1 ZGUgIm0yNTYtY2hlY2suaCIKKwordm9pZAorY2hlY2tfbW1fZm1hZGRfcGQg KF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7Cisg IHVuaW9uMTI4ZCBhLGIsYyxlOworICBhLnggPSBfX0E7CisgIGIueCA9IF9f QjsKKyAgYy54ID0gX19DOworICBkb3VibGUgZFsyXTsKKyAgaW50IGk7Cisg IGUueCA9IF9tbV9mbWFkZF9wZCAoX19BLCBfX0IsIF9fQyk7CisgIGZvciAo aT0wOyBpIDwgMjtpKyspCisgICAgeworICAgICAgZFtpXSA9IGEuYVtpXSpi LmFbaV0rYy5hW2ldOworICAgIH0KKworICBpZiAoY2hlY2tfdW5pb24xMjhk IChlLCBkKSkKKyAgICBhYm9ydCAoKTsKK30KKwordm9pZAorY2hlY2tfbW1f Zm1hZGRfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0Mp Cit7CisgIHVuaW9uMTI4IGEsYixjLGU7CisgIGEueCA9IF9fQTsKKyAgYi54 ID0gX19COworICBjLnggPSBfX0M7CisgIGZsb2F0IGRbNF07CisgIGludCBp OworICBlLnggPSBfbW1fZm1hZGRfcHMgKF9fQSwgX19CLCBfX0MpOworICBm b3IgKGk9MDsgaSA8IDQ7aSsrKQorICAgIHsKKyAgICAgIGRbaV0gPSBhLmFb aV0qYi5hW2ldK2MuYVtpXTsKKyAgICB9CisgIGlmIChjaGVja191bmlvbjEy OCAoZSwgZCkpCisgICAgYWJvcnQgKCk7Cit9CisKK3ZvaWQKK2NoZWNrX21t X2ZtYWRkX3NkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQg X19DKQoreworICB1bmlvbjEyOGQgYSxiLGMsZTsKKyAgYS54ID0gX19BOwor ICBiLnggPSBfX0I7CisgIGMueCA9IF9fQzsKKyAgZG91YmxlIGRbMl07Cisg IGludCBpOworICBlLnggPSBfbW1fZm1hZGRfc2QgKF9fQSwgX19CLCBfX0Mp OworICBmb3IgKGk9MTsgaSA8IDI7aSsrKQorICAgIHsKKyAgICAgIGRbaV0g PSBhLmFbaV07CisgICAgfQorICBkWzBdID0gYS5hWzBdKmIuYVswXStjLmFb MF07CisgIGlmIChjaGVja191bmlvbjEyOGQgKGUsIGQpKQorICAgIGFib3J0 ICgpOworfQorCit2b2lkCitjaGVja19tbV9mbWFkZF9zcyAoX19tMTI4IF9f QSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgdW5pb24xMjggYSxi LGMsZTsKKyAgYS54ID0gX19BOworICBiLnggPSBfX0I7CisgIGMueCA9IF9f QzsKKyAgZmxvYXQgZFs0XTsKKyAgaW50IGk7CisgIGUueCA9IF9tbV9mbWFk ZF9zcyAoX19BLCBfX0IsIF9fQyk7CisgIGZvciAoaT0xOyBpIDwgNDtpKysp CisgICAgeworICAgICAgZFtpXSA9IGEuYVtpXTsKKyAgICB9CisgIGRbMF0g PSBhLmFbMF0qYi5hWzBdK2MuYVswXTsKKyAgaWYgKGNoZWNrX3VuaW9uMTI4 IChlLCBkKSkKKyAgICBhYm9ydCAoKTsKK30KKworc3RhdGljIHZvaWQKK2Zt YV90ZXN0ICh2b2lkKQoreworICB1bmlvbjEyOCAgYVszXTsKKyAgdW5pb24x MjhkIGJbM107CisgIGludCBpLGo7CisgIGZvciAoaSA9IDA7aSA8IDM7aSsr KQorICAgIHsKKyAgICAgIGZvciAoaiA9IDA7aiA8IDQ7aisrKQorICAgICAg ICBhW2ldLmFbal0gPSBpKmogKyAzLjU7CisgICAgICBmb3IgKGogPSAwO2og PCAyO2orKykKKyAgICAgICAgYltpXS5hW2pdID0gaSpqICsgMy41OworICAg IH0KKyAgY2hlY2tfbW1fZm1hZGRfcGQgKGJbMF0ueCwgYlsxXS54LCBiWzJd LngpOworICBjaGVja19tbV9mbWFkZF9zZCAoYlswXS54LCBiWzFdLngsIGJb Ml0ueCk7CisgIGNoZWNrX21tX2ZtYWRkX3BzIChhWzBdLngsIGFbMV0ueCwg YVsyXS54KTsKKyAgY2hlY2tfbW1fZm1hZGRfc3MgKGFbMF0ueCwgYVsxXS54 LCBhWzJdLngpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvZm1hLWZtYWRkc3ViWFguYyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L2ZtYS1mbWFkZHN1YlhYLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEzNjc0NgotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ZtYS1mbWFk ZHN1YlhYLmMKQEAgLTAsMCArMSw2MSBAQAorLyogeyBkZy1kbyBydW4gfSAq LworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgZm1hIH0gKi8K Ky8qIHsgZGctb3B0aW9ucyAiLU8yIC1tZm1hIiB9ICovCisKKyNpbmNsdWRl ICJmbWEtY2hlY2suaCIKKworI2luY2x1ZGUgPHg4NmludHJpbi5oPgorI2lu Y2x1ZGUgIm0yNTYtY2hlY2suaCIKKwordm9pZAorY2hlY2tfbW1fZm1hZGRz dWJfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7 CisgIHVuaW9uMTI4IGEsYixjLGU7CisgIGEueCA9IF9fQTsKKyAgYi54ID0g X19COworICBjLnggPSBfX0M7CisgIGZsb2F0IGRbNF07CisgIGludCBpOwor ICBlLnggPSBfbW1fZm1hZGRzdWJfcHMgKF9fQSwgX19CLCBfX0MpOworICBm b3IgKGk9MDsgaSA8IDQ7aSsrKQorICAgIHsKKyAgICAgIGRbaV0gPSBhLmFb aV0qYi5hW2ldICsgKGklMiA9PSAxID8gYy5hW2ldIDogLWMuYVtpXSk7Cisg ICAgfQorICBpZiAoY2hlY2tfdW5pb24xMjggKGUsIGQpKQorICAgIGFib3J0 ICgpOworfQorCit2b2lkCitjaGVja19tbV9mbWFkZHN1Yl9wZCAoX19tMTI4 ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgdW5pb24x MjhkIGEsYixjLGU7CisgIGEueCA9IF9fQTsKKyAgYi54ID0gX19COworICBj LnggPSBfX0M7CisgIGRvdWJsZSBkWzJdOworICBpbnQgaTsKKyAgZS54ID0g X21tX2ZtYWRkc3ViX3BkIChfX0EsIF9fQiwgX19DKTsKKyAgZm9yIChpPTA7 IGkgPCAyO2krKykKKyAgICB7CisgICAgICBkW2ldID0gYS5hW2ldKmIuYVtp XSArIChpJTIgPT0gMSA/IGMuYVtpXSA6IC1jLmFbaV0pOworICAgIH0KKyAg aWYgKGNoZWNrX3VuaW9uMTI4ZCAoZSwgZCkpCisgICAgYWJvcnQgKCk7Cit9 CisKK3N0YXRpYyB2b2lkCitmbWFfdGVzdCAodm9pZCkKK3sKKyAgdW5pb24x MjggIGFbM107CisgIHVuaW9uMTI4ZCBiWzNdOworICBpbnQgaSxqOworICBm b3IgKGkgPSAwO2kgPCAzO2krKykKKyAgICB7CisgICAgICBmb3IgKGogPSAw O2ogPCA0O2orKykKKyAgICAgICAgYVtpXS5hW2pdID0gaSpqICsgMy41Owor ICAgICAgZm9yIChqID0gMDtqIDwgMjtqKyspCisgICAgICAgIGJbaV0uYVtq XSA9IGkqaiArIDMuNTsKKyAgICB9CisgIGNoZWNrX21tX2ZtYWRkc3ViX3Bk IChiWzBdLngsIGJbMV0ueCwgYlsyXS54KTsKKyAgY2hlY2tfbW1fZm1hZGRz dWJfcHMgKGFbMF0ueCwgYVsxXS54LCBhWzJdLngpOworfQpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvZm1hLWZtc3ViWFgu YyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2ZtYS1mbXN1YlhY LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM2MDE5 MwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L2ZtYS1mbXN1YlhYLmMKQEAgLTAsMCArMSwxMDEgQEAKKy8qIHsg ZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFy Z2V0IGZtYSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWZtYSIgfSAq LworCisjaW5jbHVkZSAiZm1hLWNoZWNrLmgiCisKKyNpbmNsdWRlIDx4ODZp bnRyaW4uaD4KKyNpbmNsdWRlICJtMjU2LWNoZWNrLmgiCisKK3ZvaWQKK2No ZWNrX21tX2Ztc3ViX3BkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9f bTEyOGQgX19DKQoreworICB1bmlvbjEyOGQgYSxiLGMsZTsKKyAgYS54ID0g X19BOworICBiLnggPSBfX0I7CisgIGMueCA9IF9fQzsKKyAgZG91YmxlIGRb Ml07CisgIGludCBpOworICBlLnggPSBfbW1fZm1zdWJfcGQgKF9fQSwgX19C LCBfX0MpOworICBmb3IgKGk9MDsgaSA8IDI7aSsrKQorICAgIHsKKyAgICAg IGRbaV0gPSBhLmFbaV0qYi5hW2ldLWMuYVtpXTsKKyAgICB9CisgIGlmIChj aGVja191bmlvbjEyOGQgKGUsIGQpKQorICAgIGFib3J0ICgpOworfQorCit2 b2lkCitjaGVja19tbV9mbXN1Yl9wcyAoX19tMTI4IF9fQSwgX19tMTI4IF9f QiwgX19tMTI4IF9fQykKK3sKKyAgdW5pb24xMjggYSxiLGMsZTsKKyAgYS54 ID0gX19BOworICBiLnggPSBfX0I7CisgIGMueCA9IF9fQzsKKyAgZmxvYXQg ZFs0XTsKKyAgaW50IGk7CisgIGUueCA9IF9tbV9mbXN1Yl9wcyAoX19BLCBf X0IsIF9fQyk7CisgIGZvciAoaT0wOyBpIDwgNDtpKyspCisgICAgeworICAg ICAgZFtpXSA9IGEuYVtpXSpiLmFbaV0tYy5hW2ldOworICAgIH0KKyAgaWYg KGNoZWNrX3VuaW9uMTI4IChlLCBkKSkKKyAgICBhYm9ydCAoKTsKK30KKwor dm9pZAorY2hlY2tfbW1fZm1zdWJfc2QgKF9fbTEyOGQgX19BLCBfX20xMjhk IF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHVuaW9uMTI4ZCBhLGIsYyxlOwor ICBhLnggPSBfX0E7CisgIGIueCA9IF9fQjsKKyAgYy54ID0gX19DOworICBk b3VibGUgZFsyXTsKKyAgaW50IGk7CisgIGUueCA9IF9tbV9mbXN1Yl9zZCAo X19BLCBfX0IsIF9fQyk7CisgIGZvciAoaT0xOyBpIDwgMjtpKyspCisgICAg eworICAgICAgZFtpXSA9IGEuYVtpXTsKKyAgICB9CisgIGRbMF0gPSBhLmFb MF0qYi5hWzBdLWMuYVswXTsKKyAgaWYgKGNoZWNrX3VuaW9uMTI4ZCAoZSwg ZCkpCisgICAgYWJvcnQgKCk7Cit9CisKK3ZvaWQKK2NoZWNrX21tX2Ztc3Vi X3NzIChfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQorewor ICB1bmlvbjEyOCBhLGIsYyxlOworICBhLnggPSBfX0E7CisgIGIueCA9IF9f QjsKKyAgYy54ID0gX19DOworICBmbG9hdCBkWzRdOworICBpbnQgaTsKKyAg ZS54ID0gX21tX2Ztc3ViX3NzIChfX0EsIF9fQiwgX19DKTsKKyAgZm9yIChp PTE7IGkgPCA0O2krKykKKyAgICB7CisgICAgICBkW2ldID0gYS5hW2ldOwor ICAgIH0KKyAgZFswXSA9IGEuYVswXSpiLmFbMF0tYy5hWzBdOworICBpZiAo Y2hlY2tfdW5pb24xMjggKGUsIGQpKQorICAgIGFib3J0ICgpOworfQorCitz dGF0aWMgdm9pZAorZm1hX3Rlc3QgKHZvaWQpCit7CisgIHVuaW9uMTI4ICBh WzNdOworICB1bmlvbjEyOGQgYlszXTsKKyAgaW50IGksajsKKyAgZm9yIChp ID0gMDtpIDwgMztpKyspCisgICAgeworICAgICAgZm9yIChqID0gMDtqIDwg NDtqKyspCisgICAgICAgIGFbaV0uYVtqXSA9IGkqaiArIDMuNTsKKyAgICAg IGZvciAoaiA9IDA7aiA8IDI7aisrKQorICAgICAgICBiW2ldLmFbal0gPSBp KmogKyAzLjU7CisgICAgfQorICBjaGVja19tbV9mbXN1Yl9wZCAoYlswXS54 LCBiWzFdLngsIGJbMl0ueCk7CisgIGNoZWNrX21tX2Ztc3ViX3NkIChiWzBd LngsIGJbMV0ueCwgYlsyXS54KTsKKyAgY2hlY2tfbW1fZm1zdWJfcHMgKGFb MF0ueCwgYVsxXS54LCBhWzJdLngpOworICBjaGVja19tbV9mbXN1Yl9zcyAo YVswXS54LCBhWzFdLngsIGFbMl0ueCk7Cit9CmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9mbWEtZm1zdWJhZGRYWC5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvZm1hLWZtc3ViYWRkWFgu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjNlNDgy Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvZm1hLWZtc3ViYWRkWFguYwpAQCAtMCwwICsxLDYxIEBACisvKiB7 IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRh cmdldCBmbWEgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLW1mbWEiIH0g Ki8KKworI2luY2x1ZGUgImZtYS1jaGVjay5oIgorCisjaW5jbHVkZSA8eDg2 aW50cmluLmg+CisjaW5jbHVkZSAibTI1Ni1jaGVjay5oIgorCit2b2lkCitj aGVja19tbV9mbXN1YmFkZF9wcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwg X19tMTI4IF9fQykKK3sKKyAgdW5pb24xMjggYSxiLGMsZTsKKyAgYS54ID0g X19BOworICBiLnggPSBfX0I7CisgIGMueCA9IF9fQzsKKyAgZmxvYXQgZFs0 XTsKKyAgaW50IGk7CisgIGUueCA9IF9tbV9mbXN1YmFkZF9wcyAoX19BLCBf X0IsIF9fQyk7CisgIGZvciAoaT0wOyBpIDwgNDtpKyspCisgICAgeworICAg ICAgZFtpXSA9IGEuYVtpXSpiLmFbaV0gKyAoaSUyID09IDEgPyAtYy5hW2ld IDogYy5hW2ldKTsKKyAgICB9CisgIGlmIChjaGVja191bmlvbjEyOCAoZSwg ZCkpCisgICAgYWJvcnQgKCk7Cit9CisKK3ZvaWQKK2NoZWNrX21tX2Ztc3Vi YWRkX3BkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19D KQoreworICB1bmlvbjEyOGQgYSxiLGMsZTsKKyAgYS54ID0gX19BOworICBi LnggPSBfX0I7CisgIGMueCA9IF9fQzsKKyAgZG91YmxlIGRbMl07CisgIGlu dCBpOworICBlLnggPSBfbW1fZm1zdWJhZGRfcGQgKF9fQSwgX19CLCBfX0Mp OworICBmb3IgKGk9MDsgaSA8IDI7aSsrKQorICAgIHsKKyAgICAgIGRbaV0g PSBhLmFbaV0qYi5hW2ldICsgKGklMiA9PSAxID8gLWMuYVtpXSA6IGMuYVtp XSk7CisgICAgfQorICBpZiAoY2hlY2tfdW5pb24xMjhkIChlLCBkKSkKKyAg ICBhYm9ydCAoKTsKK30KKworc3RhdGljIHZvaWQKK2ZtYV90ZXN0ICh2b2lk KQoreworICB1bmlvbjEyOCAgYVszXTsKKyAgdW5pb24xMjhkIGJbM107Cisg IGludCBpLGo7CisgIGZvciAoaSA9IDA7aSA8IDM7aSsrKQorICAgIHsKKyAg ICAgIGZvciAoaiA9IDA7aiA8IDQ7aisrKQorICAgICAgICBhW2ldLmFbal0g PSBpKmogKyAzLjU7CisgICAgICBmb3IgKGogPSAwO2ogPCAyO2orKykKKyAg ICAgICAgYltpXS5hW2pdID0gaSpqICsgMy41OworICAgIH0KKyAgY2hlY2tf bW1fZm1zdWJhZGRfcGQgKGJbMF0ueCwgYlsxXS54LCBiWzJdLngpOworICBj aGVja19tbV9mbXN1YmFkZF9wcyAoYVswXS54LCBhWzFdLngsIGFbMl0ueCk7 Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9mbWEtZm5tYWRkWFguYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9p Mzg2L2ZtYS1mbm1hZGRYWC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmQ3MDI5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9mbWEtZm5tYWRkWFguYwpAQCAtMCww ICsxLDEwMSBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1yZXF1 aXJlLWVmZmVjdGl2ZS10YXJnZXQgZm1hIH0gKi8KKy8qIHsgZGctb3B0aW9u cyAiLU8yIC1tZm1hIiB9ICovCisKKyNpbmNsdWRlICJmbWEtY2hlY2suaCIK KworI2luY2x1ZGUgPHg4NmludHJpbi5oPgorI2luY2x1ZGUgIm0yNTYtY2hl Y2suaCIKKwordm9pZAorY2hlY2tfbW1fZm5tYWRkX3BzIChfX20xMjggX19B LCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICB1bmlvbjEyOCBhLGIs YyxlOworICBhLnggPSBfX0E7CisgIGIueCA9IF9fQjsKKyAgYy54ID0gX19D OworICBmbG9hdCBkWzRdOworICBpbnQgaTsKKyAgZS54ID0gX21tX2ZubWFk ZF9wcyAoX19BLCBfX0IsIF9fQyk7CisgIGZvciAoaT0wOyBpIDwgNDtpKysp CisgICAgeworICAgICAgZFtpXSA9IC1hLmFbaV0qYi5hW2ldK2MuYVtpXTsK KyAgICB9CisgIGlmIChjaGVja191bmlvbjEyOCAoZSwgZCkpCisgICAgYWJv cnQgKCk7Cit9CisKK3ZvaWQKK2NoZWNrX21tX2ZubWFkZF9wZCAoX19tMTI4 ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgdW5pb24x MjhkIGEsYixjLGU7CisgIGEueCA9IF9fQTsKKyAgYi54ID0gX19COworICBj LnggPSBfX0M7CisgIGRvdWJsZSBkWzJdOworICBpbnQgaTsKKyAgZS54ID0g X21tX2ZubWFkZF9wZCAoX19BLCBfX0IsIF9fQyk7CisgIGZvciAoaT0wOyBp IDwgMjtpKyspCisgICAgeworICAgICAgZFtpXSA9IC1hLmFbaV0qYi5hW2ld K2MuYVtpXTsKKyAgICB9CisgIGlmIChjaGVja191bmlvbjEyOGQgKGUsIGQp KQorICAgIGFib3J0ICgpOworfQorCit2b2lkCitjaGVja19tbV9mbm1hZGRf c2QgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7 CisgIHVuaW9uMTI4ZCBhLGIsYyxlOworICBhLnggPSBfX0E7CisgIGIueCA9 IF9fQjsKKyAgYy54ID0gX19DOworICBkb3VibGUgZFsyXTsKKyAgaW50IGk7 CisgIGUueCA9IF9tbV9mbm1hZGRfc2QgKF9fQSwgX19CLCBfX0MpOworICBm b3IgKGk9MTsgaSA8IDI7aSsrKQorICAgIHsKKyAgICAgIGRbaV0gPSBhLmFb aV07CisgICAgfQorICBkWzBdID0gLWEuYVswXSpiLmFbMF0rYy5hWzBdOwor ICBpZiAoY2hlY2tfdW5pb24xMjhkIChlLCBkKSkKKyAgICBhYm9ydCAoKTsK K30KKwordm9pZAorY2hlY2tfbW1fZm5tYWRkX3NzIChfX20xMjggX19BLCBf X20xMjggX19CLCBfX20xMjggX19DKQoreworICB1bmlvbjEyOCBhLGIsYyxl OworICBhLnggPSBfX0E7CisgIGIueCA9IF9fQjsKKyAgYy54ID0gX19DOwor ICBmbG9hdCBkWzRdOworICBpbnQgaTsKKyAgZS54ID0gX21tX2ZubWFkZF9z cyAoX19BLCBfX0IsIF9fQyk7CisgIGZvciAoaT0xOyBpIDwgNDtpKyspCisg ICAgeworICAgICAgZFtpXSA9IGEuYVtpXTsKKyAgICB9CisgIGRbMF0gPSAt YS5hWzBdKmIuYVswXStjLmFbMF07CisgIGlmIChjaGVja191bmlvbjEyOCAo ZSwgZCkpCisgICAgYWJvcnQgKCk7Cit9CisKK3N0YXRpYyB2b2lkCitmbWFf dGVzdCAodm9pZCkKK3sKKyAgdW5pb24xMjggIGFbM107CisgIHVuaW9uMTI4 ZCBiWzNdOworICBpbnQgaSxqOworICBmb3IgKGkgPSAwO2kgPCAzO2krKykK KyAgICB7CisgICAgICBmb3IgKGogPSAwO2ogPCA0O2orKykKKyAgICAgICAg YVtpXS5hW2pdID0gaSpqICsgMy41OworICAgICAgZm9yIChqID0gMDtqIDwg MjtqKyspCisgICAgICAgIGJbaV0uYVtqXSA9IGkqaiArIDMuNTsKKyAgICB9 CisgIGNoZWNrX21tX2ZubWFkZF9wZCAoYlswXS54LCBiWzFdLngsIGJbMl0u eCk7CisgIGNoZWNrX21tX2ZubWFkZF9zZCAoYlswXS54LCBiWzFdLngsIGJb Ml0ueCk7CisgIGNoZWNrX21tX2ZubWFkZF9wcyAoYVswXS54LCBhWzFdLngs IGFbMl0ueCk7CisgIGNoZWNrX21tX2ZubWFkZF9zcyAoYVswXS54LCBhWzFd LngsIGFbMl0ueCk7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9mbWEtZm5tc3ViWFguYyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L2ZtYS1mbm1zdWJYWC5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmOGFmYmQKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9mbWEtZm5tc3Vi WFguYwpAQCAtMCwwICsxLDEwMSBAQAorLyogeyBkZy1kbyBydW4gfSAqLwor LyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgZm1hIH0gKi8KKy8q IHsgZGctb3B0aW9ucyAiLU8yIC1tZm1hIiB9ICovCisKKyNpbmNsdWRlICJm bWEtY2hlY2suaCIKKworI2luY2x1ZGUgPHg4NmludHJpbi5oPgorI2luY2x1 ZGUgIm0yNTYtY2hlY2suaCIKKwordm9pZAorY2hlY2tfbW1fZm5tc3ViX3Nk IChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQorewor ICB1bmlvbjEyOGQgYSxiLGMsZTsKKyAgYS54ID0gX19BOworICBiLnggPSBf X0I7CisgIGMueCA9IF9fQzsKKyAgZG91YmxlIGRbMl07CisgIGludCBpOwor ICBlLnggPSBfbW1fZm5tc3ViX3NkIChfX0EsIF9fQiwgX19DKTsKKyAgZm9y IChpPTE7IGkgPCAyO2krKykKKyAgICB7CisgICAgICBkW2ldID0gYS5hW2ld OworICAgIH0KKyAgZFswXSA9IC1hLmFbMF0qYi5hWzBdLWMuYVswXTsKKyAg aWYgKGNoZWNrX3VuaW9uMTI4ZCAoZSwgZCkpCisgICAgYWJvcnQgKCk7Cit9 CisKK3ZvaWQKK2NoZWNrX21tX2ZubXN1Yl9zcyAoX19tMTI4IF9fQSwgX19t MTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgdW5pb24xMjggYSxiLGMsZTsK KyAgYS54ID0gX19BOworICBiLnggPSBfX0I7CisgIGMueCA9IF9fQzsKKyAg ZmxvYXQgZFs0XTsKKyAgaW50IGk7CisgIGUueCA9IF9tbV9mbm1zdWJfc3Mg KF9fQSwgX19CLCBfX0MpOworICBmb3IgKGk9MTsgaSA8IDQ7aSsrKQorICAg IHsKKyAgICAgIGRbaV0gPSBhLmFbaV07CisgICAgfQorICBkWzBdID0gLWEu YVswXSpiLmFbMF0tYy5hWzBdOworICBpZiAoY2hlY2tfdW5pb24xMjggKGUs IGQpKQorICAgIGFib3J0ICgpOworfQorCit2b2lkCitjaGVja19tbV9mbm1z dWJfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7 CisgIHVuaW9uMTI4IGEsYixjLGU7CisgIGEueCA9IF9fQTsKKyAgYi54ID0g X19COworICBjLnggPSBfX0M7CisgIGZsb2F0IGRbNF07CisgIGludCBpOwor ICBlLnggPSBfbW1fZm5tc3ViX3BzIChfX0EsIF9fQiwgX19DKTsKKyAgZm9y IChpPTA7IGkgPCA0O2krKykKKyAgICB7CisgICAgICBkW2ldID0gLWEuYVtp XSpiLmFbaV0tYy5hW2ldOworICAgIH0KKyAgaWYgKGNoZWNrX3VuaW9uMTI4 IChlLCBkKSkKKyAgICBhYm9ydCAoKTsKK30KKwordm9pZAorY2hlY2tfbW1f Zm5tc3ViX3BkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQg X19DKQoreworICB1bmlvbjEyOGQgYSxiLGMsZTsKKyAgYS54ID0gX19BOwor ICBiLnggPSBfX0I7CisgIGMueCA9IF9fQzsKKyAgZG91YmxlIGRbMl07Cisg IGludCBpOworICBlLnggPSBfbW1fZm5tc3ViX3BkIChfX0EsIF9fQiwgX19D KTsKKyAgZm9yIChpPTA7IGkgPCAyO2krKykKKyAgICB7CisgICAgICBkW2ld ID0gLWEuYVtpXSpiLmFbaV0tYy5hW2ldOworICAgIH0KKyAgaWYgKGNoZWNr X3VuaW9uMTI4ZCAoZSwgZCkpCisgICAgYWJvcnQgKCk7Cit9CisKK3N0YXRp YyB2b2lkCitmbWFfdGVzdCAodm9pZCkKK3sKKyAgdW5pb24xMjggIGFbM107 CisgIHVuaW9uMTI4ZCBiWzNdOworICBpbnQgaSxqOworICBmb3IgKGkgPSAw O2kgPCAzO2krKykKKyAgICB7CisgICAgICBmb3IgKGogPSAwO2ogPCA0O2or KykKKyAgICAgICAgYVtpXS5hW2pdID0gaSpqICsgMy41OworICAgICAgZm9y IChqID0gMDtqIDwgMjtqKyspCisgICAgICAgIGJbaV0uYVtqXSA9IGkqaiAr IDMuNTsKKyAgICB9CisgIGNoZWNrX21tX2ZubXN1Yl9wZCAoYlswXS54LCBi WzFdLngsIGJbMl0ueCk7CisgIGNoZWNrX21tX2ZubXN1Yl9zZCAoYlswXS54 LCBiWzFdLngsIGJbMl0ueCk7CisgIGNoZWNrX21tX2ZubXN1Yl9wcyAoYVsw XS54LCBhWzFdLngsIGFbMl0ueCk7CisgIGNoZWNrX21tX2ZubXN1Yl9zcyAo YVswXS54LCBhWzFdLngsIGFbMl0ueCk7Cit9CmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9pMzg2LmV4cCBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2kzODYuZXhwCmluZGV4IDE2N2I3OWIu LjQzZWQ4NDEgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L2kzODYuZXhwCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L2kzODYuZXhwCkBAIC0xNzIsNiArMTcyLDIwIEBAIHByb2MgY2hl Y2tfZWZmZWN0aXZlX3RhcmdldF9mbWE0IHsgfSB7CiAgICAgfSAiLU8yIC1t Zm1hNCIgXQogfQogCisjIFJldHVybiAxIGlmIGZtYSBpbnN0cnVjdGlvbnMg Y2FuIGJlIGNvbXBpbGVkLgorcHJvYyBjaGVja19lZmZlY3RpdmVfdGFyZ2V0 X2ZtYSB7IH0geworICAgIHJldHVybiBbY2hlY2tfbm9fY29tcGlsZXJfbWVz c2FnZXMgZm1hIG9iamVjdCB7CisgICAgICAgIHR5cGVkZWYgZmxvYXQgX19t MTI4IF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwor CXR5cGVkZWYgZmxvYXQgX192NHNmIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rv cl9zaXplX18gKDE2KSkpOworCV9fbTEyOCBfbW1fbWFjY19wcyhfX20xMjgg X19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQorCXsKKwkgICAgcmV0dXJu IChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzICgoX192NHNmKV9f QSwKKwkJCQkJCSAgICAgKF9fdjRzZilfX0IsCisJCQkJCQkgICAgIChfX3Y0 c2YpX19DKTsKKwl9CisgICAgfSAiLU8yIC1tZm1hIiBdCit9CisKICMgUmV0 dXJuIDEgaWYgeG9wIGluc3RydWN0aW9ucyBjYW4gYmUgY29tcGlsZWQuCiBw cm9jIGNoZWNrX2VmZmVjdGl2ZV90YXJnZXRfeG9wIHsgfSB7CiAgICAgcmV0 dXJuIFtjaGVja19ub19jb21waWxlcl9tZXNzYWdlcyB4b3Agb2JqZWN0IHsK --20cf303ddbc4c9031104ab2ce19b--