From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 43196 invoked by alias); 11 Sep 2017 06:27:32 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 42586 invoked by uid 89); 11 Sep 2017 06:27:31 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.7 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=991, preview, 1698, 2627 X-HELO: mail-pf0-f176.google.com 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; bh=mCwYeYR7cI1xvZzVZ6y3SAd6+JBLKE8qfp2FwVu1E7I=; b=XnUTRAmZoQuyaOqOxJ3XZU4d/+XGUJjZRb1qqsCZvXyXxVLPJytm1x7rQqwXlT0bCQ r2NOUYmyOD5YmZdWsexpJuX8A2pAlgKpGaBZdTDDnjlJHjssZ4KhHzQwZ2vqslFVrS2t 7DD1E3/7/p1CUnfIokr7221P38RCzQCg7mF+ea9jP/kPPYGFi+EYWb8iq4USkg2zbIgt BRUXOqR0SiAj88Hb4jleBE/5y6+FIgKvAQy9oIhjck2G3UKOw27eghKxKIyj7IumWNNx iiPhEoNZyUdbZf4STFEZtqb1F+WXiF36DusSC9uCpXZ5F+IUY648bvgI9O3+g6MTXR6J +YUg== X-Gm-Message-State: AHPjjUg0fr5vUfDq9YbKm8PCljMd0li5PnQTF+z+nNrC6FhNSBGYOs5k BNjNHtNB/p7k5Woh1R7wnFdF2VBT5zuDfC3cuv/NAA== X-Google-Smtp-Source: ADKCNb4yyAJJBf6LQ5poDT5ArsyLwS39HPBcsoDs5/I6bkhLafzxrRubsa9tZDwpodC7qmCeUaB43Qgy46bGgno1Yt4= X-Received: by 10.101.78.131 with SMTP id b3mr10964159pgs.28.1505111232308; Sun, 10 Sep 2017 23:27:12 -0700 (PDT) MIME-Version: 1.0 From: George Burgess IV Date: Mon, 11 Sep 2017 06:27:00 -0000 Message-ID: Subject: [RFC][PATCH] Refactoring FORTIFY To: libc-alpha@sourceware.org Content-Type: multipart/mixed; boundary="089e082511ec59f6cb0558e40455" X-SW-Source: 2017-09/txt/msg00434.txt.bz2 --089e082511ec59f6cb0558e40455 Content-Type: text/plain; charset="UTF-8" Content-length: 4626 Hello, Attached is a patch that aims to substantially improve FORTIFY's usefulness with clang, and make defining FORTIFY'ed functions require less ceremony. I'm not looking for a thorough review at this time, nor do I hope to land this patch in one piece. The goal of this thread is to ensure that everyone's more or less happy with where I'd like to take glibc's FORTIFY implementation. Please note that this change is intended to be a functional nop for all compilers that aren't clang >= 5.0, which was just released last Thursday. Diving in: as said, this patch removes a lot of duplication from FORTIFY in the common case, and makes FORTIFY far more useful for those who use glibc with clang. Namely, with this patch, clang becomes capable of emitting compile-time diagnostics on par (*) with GCC's, and clang's ability to perform run-time checks is substantially improved over what we have today. It essentially does this by wrapping up the majority of the compiler-specific incantations (declaring __foo_chk_warn, conditionally calling it, ...) behind a macro, and uses that to stamp out FORTIFY's compile-time diagnostic bits. While this approach is the cleanest I've been able to come up with, it has potential downsides: - Compile-time diagnostics with GCC are somewhat different than what they are today. To show this, I've attached tst-chk2-output.diff, which is a diff of the diagnostics produced by running GCC 7.1 on debug/tst-chk2.c. I don't find the difference to be substantial, but it does exist. - In very rare cases, the code generated by GCC will be a bit worse (e.g. slower+larger) with this patch. I know this may be a tough sell, but please hear me out. :) With this patch, we sometimes emit diagnostics by emitting code like: if (should_emit_compile_time_warning) { volatile char c = 0; if (__glibc_unlikely (c)) function_with_warnattr (); } Where `should_emit_compile_time_warning` always folds to a constant during compilation. So, 0 diagnostics should mean 0 change in code quality. I don't believe this is a deal-breaker, since: - if you're using FORTIFY, you presumably care enough to fix FORTIFY-related warnings, which makes this regression nonexistent for you, - if you're using FORTIFY, you know there will be a (small, but present) performance penalty, - directly after each __glibc_unlikely(c) branch is call to a FORTIFY function with known broken input, which should abort the program anyway, and - this doesn't apply to *all* diagnostics (e.g. bad calls to open() don't have this penalty); just ones where we can unify clang's and GCC's diagnostic emission bits. In any case, please see binary-output.diff for an idea of the difference this makes on code compiled with GCC 7.1. The function being compiled was a call to wmemmove with an undersized buffer. With a sufficiently large buffer, both today's FORTIFY implementation and the proposed one produce identical bodies for the function in question. Other than that, I know of no regressions that this patch causes with GCC. For clang, in very rare cases (read: I've seen ~10 instances of this testing similar implementations across Android, ChromeOS, and another very large code base), it can also break existing code. For specifics on that, and an overview on how clang's FORTIFY implementation works, please see https://docs.google.com/document/d/1DFfZDICTbL7RqS74wJVIJ-YnjQOj1SaoqfhbgddFYSM/edit?usp=sharing The "How does clang handle it?" section covers the primary attributes this patch uses, and the "Incompatibilities between clang and GCC FORTIFY" section covers places where this patch might break existing clang users. Though I expect clang breakages to be very rare and trivial to fix, this patch introduces a _CLANG_FORTIFY_DISABLE macro, which can be used to turn this entire patch into a nop for clang >= 5.0. ----- I apologize if this is a lot to dump into one email. As said, if we decide this is an acceptable direction to head in, I hope to land this patch in many easily reviewable parts later on. If you have any questions, comments, concerns, etc. please don't hesitate to voice them. Thank you very much for your time, :) George (*) - This means that clang can catch almost as many *types* of bugs as GCC at compile-time. Due to architectural constraints, clang can only perform these checks prior to optimizing code. So, clang is still unable to statically diagnose bugs that require it to do more than simple constant folding. __builtin_object_size, however, isn't required to be folded until after we optimize code, so many dynamic checks can still take advantage of optimizations. --089e082511ec59f6cb0558e40455 Content-Type: text/plain; charset="US-ASCII"; name="glibc-new-fortify.diff" Content-Disposition: attachment; filename="glibc-new-fortify.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j7fo87hx0 Content-length: 141886 Y29tbWl0IDYyNTljNzgzYjQ0Yzg3NjMyOWJiMTc0MzI3Yjg5NTZjZDA3NGU1 Y2IKQXV0aG9yOiBHZW9yZ2UgQnVyZ2VzcyBJViA8Z2JpdkBnb29nbGUuY29t PgpEYXRlOiAgIFN1biBTZXAgMTAgMjA6NTE6NTEgMjAxNyAtMDcwMAoKICAg IFJlZmFjdG9yIEZPUlRJRlkgaW4gZ2xpYmMuCiAgICAKICAgIFRoaXMgaXMg aW50ZW5kZWQgdG8gYmUgYSBwcmV2aWV3LiAgQ2hhbmdlTG9nIGVudHJ5ICsg c2FuZSBjb21taXQKICAgIG1lc3NhZ2VzIHdpbGwgYmUgYWRkZWQuCgpkaWZm IC0tZ2l0IGEvaW8vYml0cy9mY250bDIuaCBiL2lvL2JpdHMvZmNudGwyLmgK aW5kZXggNDEwOWVhZDlhOC4uMGUwOGY1MWMyZCAxMDA2NDQKLS0tIGEvaW8v Yml0cy9mY250bDIuaAorKysgYi9pby9iaXRzL2ZjbnRsMi5oCkBAIC0zMiwx MCArMzIsMjggQEAgZXh0ZXJuIGludCBfX1JFRElSRUNUIChfX29wZW5fMiwg KGNvbnN0IGNoYXIgKl9fcGF0aCwgaW50IF9fb2ZsYWcpLAogZXh0ZXJuIGlu dCBfX1JFRElSRUNUIChfX29wZW5fYWxpYXMsIChjb25zdCBjaGFyICpfX3Bh dGgsIGludCBfX29mbGFnLCAuLi4pLAogCQkgICAgICAgb3BlbjY0KSBfX25v bm51bGwgKCgxKSk7CiAjZW5kaWYKLV9fZXJyb3JkZWNsIChfX29wZW5fdG9v X21hbnlfYXJncywKLQkgICAgICJvcGVuIGNhbiBiZSBjYWxsZWQgZWl0aGVy IHdpdGggMiBvciAzIGFyZ3VtZW50cywgbm90IG1vcmUiKTsKLV9fZXJyb3Jk ZWNsIChfX29wZW5fbWlzc2luZ19tb2RlLAotCSAgICAgIm9wZW4gd2l0aCBP X0NSRUFUIG9yIE9fVE1QRklMRSBpbiBzZWNvbmQgYXJndW1lbnQgbmVlZHMg MyBhcmd1bWVudHMiKTsKKworI2RlZmluZSBfX3dhcm5fb3Blbl90b29fbWFu eV9hcmdzIFwKKyAgIm9wZW4gY2FuIGJlIGNhbGxlZCBlaXRoZXIgd2l0aCAy IG9yIDMgYXJndW1lbnRzLCBub3QgbW9yZSIKKyNkZWZpbmUgX193YXJuX29w ZW5fbWlzc2luZ19tb2RlIFwKKyAgIm9wZW4gd2l0aCBPX0NSRUFUIGluIHNl Y29uZCBhcmd1bWVudCBuZWVkcyAzIGFyZ3VtZW50cyIKKyNpZmRlZiBfX3Vz ZV9jbGFuZ19mb3J0aWZ5CitfX2ZvcnRpZnlfb3ZlcmxvYWQgX19jbGFuZ19w cmVmZXJfdGhpc19vdmVybG9hZCBpbnQKK29wZW4gKGNvbnN0IGNoYXIgKmNv bnN0IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZSBfX3BhdGgsIGludCBfX29m bGFnKQorICAgICBfX2NsYW5nX2Vycm9yX2lmIChfX09QRU5fTkVFRFNfTU9E RSAoX19vZmxhZyksIF9fd2Fybl9vcGVuX21pc3NpbmdfbW9kZSkKK3sKKyAg cmV0dXJuIF9fb3Blbl8yIChfX3BhdGgsIF9fb2ZsYWcpOworfQorCitfX2Zv cnRpZnlfb3ZlcmxvYWQgaW50CitvcGVuIChjb25zdCBjaGFyICpjb25zdCBf X2NsYW5nX3Bhc3Nfb2JqZWN0X3NpemUgX19wYXRoLCBpbnQgX19vZmxhZywK KyAgICAgIG1vZGVfdCBfX21vZGUpCit7CisgIHJldHVybiBfX29wZW5fYWxp YXMgKF9fcGF0aCwgX19vZmxhZywgX19tb2RlKTsKK30KKyNlbHNlCitfX2Vy cm9yZGVjbCAoX19vcGVuX3Rvb19tYW55X2FyZ3MsIF9fd2Fybl9vcGVuX3Rv b19tYW55X2FyZ3MpOworX19lcnJvcmRlY2wgKF9fb3Blbl9taXNzaW5nX21v ZGUsIF9fd2Fybl9vcGVuX21pc3NpbmdfbW9kZSk7CiAKIF9fZm9ydGlmeV9m dW5jdGlvbiBpbnQKIG9wZW4gKGNvbnN0IGNoYXIgKl9fcGF0aCwgaW50IF9f b2ZsYWcsIC4uLikKQEAgLTU4LDE2ICs3NiwzNyBAQCBvcGVuIChjb25zdCBj aGFyICpfX3BhdGgsIGludCBfX29mbGFnLCAuLi4pCiAKICAgcmV0dXJuIF9f b3Blbl9hbGlhcyAoX19wYXRoLCBfX29mbGFnLCBfX3ZhX2FyZ19wYWNrICgp KTsKIH0KKyNlbmRpZgorI3VuZGVmIF9fd2Fybl9vcGVuX3Rvb19tYW55X2Fy Z3MKKyN1bmRlZiBfX3dhcm5fb3Blbl9taXNzaW5nX21vZGUKIAogCiAjaWZk ZWYgX19VU0VfTEFSR0VGSUxFNjQKIGV4dGVybiBpbnQgX19vcGVuNjRfMiAo Y29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19vZmxhZykgX19ub25udWxsICgo MSkpOwogZXh0ZXJuIGludCBfX1JFRElSRUNUIChfX29wZW42NF9hbGlhcywg KGNvbnN0IGNoYXIgKl9fcGF0aCwgaW50IF9fb2ZsYWcsCiAJCQkJCS4uLiks IG9wZW42NCkgX19ub25udWxsICgoMSkpOwotX19lcnJvcmRlY2wgKF9fb3Bl bjY0X3Rvb19tYW55X2FyZ3MsCi0JICAgICAib3BlbjY0IGNhbiBiZSBjYWxs ZWQgZWl0aGVyIHdpdGggMiBvciAzIGFyZ3VtZW50cywgbm90IG1vcmUiKTsK LV9fZXJyb3JkZWNsIChfX29wZW42NF9taXNzaW5nX21vZGUsCi0JICAgICAi b3BlbjY0IHdpdGggT19DUkVBVCBvciBPX1RNUEZJTEUgaW4gc2Vjb25kIGFy Z3VtZW50IG5lZWRzIDMgYXJndW1lbnRzIik7CisKKyMgZGVmaW5lIF9fd2Fy bl9vcGVuNjRfdG9vX21hbnlfYXJncyBcCisgICJvcGVuNjQgY2FuIGJlIGNh bGxlZCBlaXRoZXIgd2l0aCAyIG9yIDMgYXJndW1lbnRzLCBub3QgbW9yZSIK KyMgZGVmaW5lIF9fd2Fybl9vcGVuNjRfbWlzc2luZ19tb2RlIFwKKyAgIm9w ZW42NCB3aXRoIE9fQ1JFQVQgaW4gc2Vjb25kIGFyZ3VtZW50IG5lZWRzIDMg YXJndW1lbnRzIgorIyBpZmRlZiBfX3VzZV9jbGFuZ19mb3J0aWZ5CitfX2Zv cnRpZnlfb3ZlcmxvYWQgX19jbGFuZ19wcmVmZXJfdGhpc19vdmVybG9hZCBp bnQKK29wZW42NCAoY29uc3QgY2hhciAqY29uc3QgX19jbGFuZ19wYXNzX29i amVjdF9zaXplIF9fcGF0aCwgaW50IF9fb2ZsYWcpCisgICAgIF9fY2xhbmdf ZXJyb3JfaWYgKF9fT1BFTl9ORUVEU19NT0RFIChfX29mbGFnKSwgX193YXJu X29wZW42NF9taXNzaW5nX21vZGUpCit7CisgIHJldHVybiBfX29wZW42NF8y IChfX3BhdGgsIF9fb2ZsYWcpOworfQorCitfX2ZvcnRpZnlfb3ZlcmxvYWQg X19jbGFuZ19wcmVmZXJfdGhpc19vdmVybG9hZCBpbnQKK29wZW42NCAoY29u c3QgY2hhciAqY29uc3QgX19jbGFuZ19wYXNzX29iamVjdF9zaXplIF9fcGF0 aCwgaW50IF9fb2ZsYWcsCisJaW50IF9fbW9kZSkKK3sKKyAgcmV0dXJuIF9f b3BlbjY0X2FsaWFzIChfX3BhdGgsIF9fb2ZsYWcsIF9fbW9kZSk7Cit9Cisj IGVsc2UKK19fZXJyb3JkZWNsIChfX29wZW42NF90b29fbWFueV9hcmdzLCBf X3dhcm5fb3BlbjY0X3Rvb19tYW55X2FyZ3MpOworX19lcnJvcmRlY2wgKF9f b3BlbjY0X21pc3NpbmdfbW9kZSwgX193YXJuX29wZW42NF9taXNzaW5nX21v ZGUpOwogCiBfX2ZvcnRpZnlfZnVuY3Rpb24gaW50CiBvcGVuNjQgKGNvbnN0 IGNoYXIgKl9fcGF0aCwgaW50IF9fb2ZsYWcsIC4uLikKQEAgLTkwLDYgKzEy OSw5IEBAIG9wZW42NCAoY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19vZmxh ZywgLi4uKQogCiAgIHJldHVybiBfX29wZW42NF9hbGlhcyAoX19wYXRoLCBf X29mbGFnLCBfX3ZhX2FyZ19wYWNrICgpKTsKIH0KKyMgZW5kaWYKKyMgdW5k ZWYgX193YXJuX29wZW42NF90b29fbWFueV9hcmdzCisjIHVuZGVmIF9fd2Fy bl9vcGVuNjRfbWlzc2luZ19tb2RlCiAjZW5kaWYKIAogCkBAIC0xMDgsMTAg KzE1MCwzMiBAQCBleHRlcm4gaW50IF9fUkVESVJFQ1QgKF9fb3BlbmF0X2Fs aWFzLCAoaW50IF9fZmQsIGNvbnN0IGNoYXIgKl9fcGF0aCwKIAkJCQkJaW50 IF9fb2ZsYWcsIC4uLiksIG9wZW5hdDY0KQogICAgICBfX25vbm51bGwgKCgy KSk7CiAjIGVuZGlmCi1fX2Vycm9yZGVjbCAoX19vcGVuYXRfdG9vX21hbnlf YXJncywKLQkgICAgICJvcGVuYXQgY2FuIGJlIGNhbGxlZCBlaXRoZXIgd2l0 aCAzIG9yIDQgYXJndW1lbnRzLCBub3QgbW9yZSIpOwotX19lcnJvcmRlY2wg KF9fb3BlbmF0X21pc3NpbmdfbW9kZSwKLQkgICAgICJvcGVuYXQgd2l0aCBP X0NSRUFUIG9yIE9fVE1QRklMRSBpbiB0aGlyZCBhcmd1bWVudCBuZWVkcyA0 IGFyZ3VtZW50cyIpOworCisjIGRlZmluZSBfX3dhcm5fb3BlbmF0X3Rvb19t YW55X2FyZ3MgIm9wZW5hdCBjYW4gYmUgY2FsbGVkIGVpdGhlciB3aXRoIDMg b3IgIiBcCisgICAgICAgIjQgYXJndW1lbnRzLCBub3QgbW9yZSIKKyMgZGVm aW5lIF9fd2Fybl9vcGVuYXRfbWlzc2luZ19tb2RlICJvcGVuYXQgd2l0aCBP X0NSRUFUIGluIHRoaXJkIGFyZ3VtZW50ICIgXAorICAgICAgICJuZWVkcyA0 IGFyZ3VtZW50cyIKKyMgaWZkZWYgX191c2VfY2xhbmdfZm9ydGlmeQorX19m b3J0aWZ5X2Vycm9yX2Z1bmN0aW9uIF9fY2xhbmdfZXJyb3IgKF9fd2Fybl9v cGVuYXRfdG9vX21hbnlfYXJncykgaW50CitvcGVuYXQgKGludCBfX2ZkLCBj b25zdCBjaGFyICpfX3BhdGgsIGludCBfX29mbGFnLCBpbnQgX19tb2RlLCAu Li4pOworCitfX2ZvcnRpZnlfb3ZlcmxvYWQgX19jbGFuZ19wcmVmZXJfdGhp c19vdmVybG9hZCBpbnQKK29wZW5hdCAoaW50IF9fZmQsIGNvbnN0IGNoYXIg KmNvbnN0IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZSBfX3BhdGgsCisJaW50 IF9fb2ZsYWcpCisgICAgIF9fY2xhbmdfZXJyb3JfaWYgKF9fT1BFTl9ORUVE U19NT0RFIChfX29mbGFnKSwgX193YXJuX29wZW5hdF9taXNzaW5nX21vZGUp Cit7CisgIHJldHVybiBfX29wZW5hdF8yIChfX2ZkLCBfX3BhdGgsIF9fb2Zs YWcpOworfQorCitfX2ZvcnRpZnlfb3ZlcmxvYWQgX19jbGFuZ19wcmVmZXJf dGhpc19vdmVybG9hZCBpbnQKK29wZW5hdCAoaW50IF9fZmQsIGNvbnN0IGNo YXIgKmNvbnN0IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZSBfX3BhdGgsCisJ aW50IF9fb2ZsYWcsIGludCBfX21vZGUpCit7CisgIHJldHVybiBfX29wZW5h dF9hbGlhcyAoX19mZCwgX19wYXRoLCBfX29mbGFnLCBfX21vZGUpOworfQor IyBlbHNlCitfX2Vycm9yZGVjbCAoX19vcGVuYXRfdG9vX21hbnlfYXJncywg X193YXJuX29wZW5hdF90b29fbWFueV9hcmdzKTsKK19fZXJyb3JkZWNsIChf X29wZW5hdF9taXNzaW5nX21vZGUsIF9fd2Fybl9vcGVuYXRfbWlzc2luZ19t b2RlKTsKIAogX19mb3J0aWZ5X2Z1bmN0aW9uIGludAogb3BlbmF0IChpbnQg X19mZCwgY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19vZmxhZywgLi4uKQpA QCAtMTM0LDYgKzE5OCw5IEBAIG9wZW5hdCAoaW50IF9fZmQsIGNvbnN0IGNo YXIgKl9fcGF0aCwgaW50IF9fb2ZsYWcsIC4uLikKIAogICByZXR1cm4gX19v cGVuYXRfYWxpYXMgKF9fZmQsIF9fcGF0aCwgX19vZmxhZywgX192YV9hcmdf cGFjayAoKSk7CiB9CisjIGVuZGlmCisjIHVuZGVmIF9fd2Fybl9vcGVuYXRf dG9vX21hbnlfYXJncworIyB1bmRlZiBfX3dhcm5fb3BlbmF0X21pc3Npbmdf bW9kZQogCiAKICMgaWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKQEAgLTE0Miwx MSArMjA5LDM0IEBAIGV4dGVybiBpbnQgX19vcGVuYXQ2NF8yIChpbnQgX19m ZCwgY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19vZmxhZykKIGV4dGVybiBp bnQgX19SRURJUkVDVCAoX19vcGVuYXQ2NF9hbGlhcywgKGludCBfX2ZkLCBj b25zdCBjaGFyICpfX3BhdGgsCiAJCQkJCSAgaW50IF9fb2ZsYWcsIC4uLiks IG9wZW5hdDY0KQogICAgICBfX25vbm51bGwgKCgyKSk7Ci1fX2Vycm9yZGVj bCAoX19vcGVuYXQ2NF90b29fbWFueV9hcmdzLAotCSAgICAgIm9wZW5hdDY0 IGNhbiBiZSBjYWxsZWQgZWl0aGVyIHdpdGggMyBvciA0IGFyZ3VtZW50cywg bm90IG1vcmUiKTsKLV9fZXJyb3JkZWNsIChfX29wZW5hdDY0X21pc3Npbmdf bW9kZSwKLQkgICAgICJvcGVuYXQ2NCB3aXRoIE9fQ1JFQVQgb3IgT19UTVBG SUxFIGluIHRoaXJkIGFyZ3VtZW50IG5lZWRzIDQgYXJndW1lbnRzIik7CiAK KyMgIGRlZmluZSBfX3dhcm5fb3BlbmF0NjRfdG9vX21hbnlfYXJncyAib3Bl bmF0NjQgY2FuIGJlIGNhbGxlZCBlaXRoZXIgd2l0aCAiIFwKKyAgICAgICAi MyBvciA0IGFyZ3VtZW50cywgbm90IG1vcmUiCisjICBkZWZpbmUgX193YXJu X29wZW5hdDY0X21pc3NpbmdfbW9kZSAib3BlbmF0NjQgd2l0aCBPX0NSRUFU IGluIHRoaXJkICIgXAorICAgICAgICJhcmd1bWVudCBuZWVkcyA0IGFyZ3Vt ZW50cyIKKworIyAgaWZkZWYgX191c2VfY2xhbmdfZm9ydGlmeQorX19mb3J0 aWZ5X2Vycm9yX2Z1bmN0aW9uIF9fY2xhbmdfZXJyb3IgKF9fd2Fybl9vcGVu YXQ2NF90b29fbWFueV9hcmdzKSBpbnQKK29wZW5hdDY0IChpbnQgX19mZCwg Y29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19vZmxhZywgaW50IF9fbW9kZSwg Li4uKTsKKworX19mb3J0aWZ5X292ZXJsb2FkIF9fY2xhbmdfcHJlZmVyX3Ro aXNfb3ZlcmxvYWQgaW50CitvcGVuYXQ2NCAoaW50IF9fZmQsIGNvbnN0IGNo YXIgKmNvbnN0IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZSBfX3BhdGgsCisJ ICBpbnQgX19vZmxhZykKKyAgICAgX19jbGFuZ19lcnJvcl9pZiAoX19PUEVO X05FRURTX01PREUgKF9fb2ZsYWcpLAorICAgICAgICAgICAgICAgICAgICAg ICBfX3dhcm5fb3BlbmF0NjRfbWlzc2luZ19tb2RlKQoreworICByZXR1cm4g X19vcGVuYXQ2NF8yIChfX2ZkLCBfX3BhdGgsIF9fb2ZsYWcpOworfQorCitf X2ZvcnRpZnlfb3ZlcmxvYWQgX19jbGFuZ19wcmVmZXJfdGhpc19vdmVybG9h ZCBpbnQKK29wZW5hdDY0IChpbnQgX19mZCwgY29uc3QgY2hhciAqY29uc3Qg X19jbGFuZ19wYXNzX29iamVjdF9zaXplIF9fcGF0aCwKKwkgIGludCBfX29m bGFnLCBpbnQgX19tb2RlKQoreworICByZXR1cm4gX19vcGVuYXQ2NF9hbGlh cyAoX19mZCwgX19wYXRoLCBfX29mbGFnLCBfX21vZGUpOworfQorIyAgZWxz ZQorX19lcnJvcmRlY2wgKF9fb3BlbmF0NjRfdG9vX21hbnlfYXJncywgX193 YXJuX29wZW5hdDY0X3Rvb19tYW55X2FyZ3MpOworX19lcnJvcmRlY2wgKF9f b3BlbmF0NjRfbWlzc2luZ19tb2RlLCBfX3dhcm5fb3BlbmF0NjRfbWlzc2lu Z19tb2RlKTsKIF9fZm9ydGlmeV9mdW5jdGlvbiBpbnQKIG9wZW5hdDY0IChp bnQgX19mZCwgY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19vZmxhZywgLi4u KQogewpAQCAtMTY4LDUgKzI1OCw4IEBAIG9wZW5hdDY0IChpbnQgX19mZCwg Y29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19vZmxhZywgLi4uKQogCiAgIHJl dHVybiBfX29wZW5hdDY0X2FsaWFzIChfX2ZkLCBfX3BhdGgsIF9fb2ZsYWcs IF9fdmFfYXJnX3BhY2sgKCkpOwogfQorIyAgZW5kaWYKKyMgIHVuZGVmIF9f d2Fybl9vcGVuYXQ2NF90b29fbWFueV9hcmdzCisjICB1bmRlZiBfX3dhcm5f b3BlbmF0NjRfbWlzc2luZ19tb2RlCiAjIGVuZGlmCiAjZW5kaWYKZGlmZiAt LWdpdCBhL2lvL2JpdHMvcG9sbDIuaCBiL2lvL2JpdHMvcG9sbDIuaAppbmRl eCAwZmJiYTRmMzI1Li4wZjdjZWQ1ZmYzIDEwMDY0NAotLS0gYS9pby9iaXRz L3BvbGwyLmgKKysrIGIvaW8vYml0cy9wb2xsMi5oCkBAIC0yNywyNSArMjcs MjAgQEAgZXh0ZXJuIGludCBfX1JFRElSRUNUIChfX3BvbGxfYWxpYXMsIChz dHJ1Y3QgcG9sbGZkICpfX2ZkcywgbmZkc190IF9fbmZkcywKIAkJCQkgICAg ICBpbnQgX190aW1lb3V0KSwgcG9sbCk7CiBleHRlcm4gaW50IF9fcG9sbF9j aGsgKHN0cnVjdCBwb2xsZmQgKl9fZmRzLCBuZmRzX3QgX19uZmRzLCBpbnQg X190aW1lb3V0LAogCQkgICAgICAgX19TSVpFX1RZUEVfXyBfX2Zkc2xlbik7 Ci1leHRlcm4gaW50IF9fUkVESVJFQ1QgKF9fcG9sbF9jaGtfd2FybiwgKHN0 cnVjdCBwb2xsZmQgKl9fZmRzLCBuZmRzX3QgX19uZmRzLAotCQkJCQkgaW50 IF9fdGltZW91dCwgX19TSVpFX1RZUEVfXyBfX2Zkc2xlbiksCi0JCSAgICAg ICBfX3BvbGxfY2hrKQotICBfX3dhcm5hdHRyICgicG9sbCBjYWxsZWQgd2l0 aCBmZHMgYnVmZmVyIHRvbyBzbWFsbCBmaWxlIG5mZHMgZW50cmllcyIpOwog Ci1fX2ZvcnRpZnlfZnVuY3Rpb24gaW50Ci1wb2xsIChzdHJ1Y3QgcG9sbGZk ICpfX2ZkcywgbmZkc190IF9fbmZkcywgaW50IF9fdGltZW91dCkKK19fZm9y dGlmeV9wb3RlbnRpYWxfb3ZlcmxvYWQgaW50Citwb2xsIChzdHJ1Y3QgcG9s bGZkICpjb25zdCBfX2NsYW5nX3Bhc3Nfb2JqZWN0X3NpemUgX19mZHMsIG5m ZHNfdCBfX25mZHMsCisgICAgICBpbnQgX190aW1lb3V0KQorX19GT1JUSUZZ X1BSRUNPTkRJVElPTlMKKyAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05MWV9J Rl9CT1NfTFQyIChfX3BvbGxfd2FybiwgX19uZmRzLCBfX2ZkcywKKwkJCQkJ c2l6ZW9mICgqX19mZHMpLAorCQkJCQkicG9sbCBjYWxsZWQgd2l0aCBmZHMg YnVmZmVyIHRvbyBzbWFsbCIpCiB7Ci0gIGlmIChfX2JvcyAoX19mZHMpICE9 IChfX1NJWkVfVFlQRV9fKSAtMSkKLSAgICB7Ci0gICAgICBpZiAoISBfX2J1 aWx0aW5fY29uc3RhbnRfcCAoX19uZmRzKSkKLQlyZXR1cm4gX19wb2xsX2No ayAoX19mZHMsIF9fbmZkcywgX190aW1lb3V0LCBfX2JvcyAoX19mZHMpKTsK LSAgICAgIGVsc2UgaWYgKF9fYm9zIChfX2ZkcykgLyBzaXplb2YgKCpfX2Zk cykgPCBfX25mZHMpCi0JcmV0dXJuIF9fcG9sbF9jaGtfd2FybiAoX19mZHMs IF9fbmZkcywgX190aW1lb3V0LCBfX2JvcyAoX19mZHMpKTsKLSAgICB9Ci0K KyAgaWYgKF9fRk9SVElGWV9DQUxMX0NISyAmJiBfX2JvcyAoX19mZHMpICE9 IChfX1NJWkVfVFlQRV9fKSAtMSkKKyAgICByZXR1cm4gX19wb2xsX2NoayAo X19mZHMsIF9fbmZkcywgX190aW1lb3V0LCBfX2JvcyAoX19mZHMpKTsKICAg cmV0dXJuIF9fcG9sbF9hbGlhcyAoX19mZHMsIF9fbmZkcywgX190aW1lb3V0 KTsKIH0KLQorX19GT1JUSUZZX0ZVTkNUSU9OX0VORAogCiAjaWZkZWYgX19V U0VfR05VCiBleHRlcm4gaW50IF9fUkVESVJFQ1QgKF9fcHBvbGxfYWxpYXMs IChzdHJ1Y3QgcG9sbGZkICpfX2ZkcywgbmZkc190IF9fbmZkcywKQEAgLTU0 LDI4ICs0OSwyMSBAQCBleHRlcm4gaW50IF9fUkVESVJFQ1QgKF9fcHBvbGxf YWxpYXMsIChzdHJ1Y3QgcG9sbGZkICpfX2ZkcywgbmZkc190IF9fbmZkcywK IGV4dGVybiBpbnQgX19wcG9sbF9jaGsgKHN0cnVjdCBwb2xsZmQgKl9fZmRz LCBuZmRzX3QgX19uZmRzLAogCQkJY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf X3RpbWVvdXQsCiAJCQljb25zdCBfX3NpZ3NldF90ICpfX3NzLCBfX1NJWkVf VFlQRV9fIF9fZmRzbGVuKTsKLWV4dGVybiBpbnQgX19SRURJUkVDVCAoX19w cG9sbF9jaGtfd2FybiwgKHN0cnVjdCBwb2xsZmQgKl9fZmRzLCBuZmRzX3Qg X19uZmRzLAotCQkJCQkgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190aW1l b3V0LAotCQkJCQkgIGNvbnN0IF9fc2lnc2V0X3QgKl9fc3MsCi0JCQkJCSAg X19TSVpFX1RZUEVfXyBfX2Zkc2xlbiksCi0JCSAgICAgICBfX3Bwb2xsX2No aykKLSAgX193YXJuYXR0ciAoInBwb2xsIGNhbGxlZCB3aXRoIGZkcyBidWZm ZXIgdG9vIHNtYWxsIGZpbGUgbmZkcyBlbnRyaWVzIik7CiAKLV9fZm9ydGlm eV9mdW5jdGlvbiBpbnQKLXBwb2xsIChzdHJ1Y3QgcG9sbGZkICpfX2Zkcywg bmZkc190IF9fbmZkcywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RpbWVv dXQsCi0gICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19zcykKK19fZm9ydGlm eV9wb3RlbnRpYWxfb3ZlcmxvYWQgaW50CitwcG9sbCAoc3RydWN0IHBvbGxm ZCAqY29uc3QgX19jbGFuZ19wYXNzX29iamVjdF9zaXplIF9fZmRzLCBuZmRz X3QgX19uZmRzLAorICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190 aW1lb3V0LCBjb25zdCBfX3NpZ3NldF90ICpfX3NzKQorX19GT1JUSUZZX1BS RUNPTkRJVElPTlMKKyAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9C T1NfTFQyIChfX3Bwb2xsX3dhcm4sIF9fbmZkcywgX19mZHMsCisJCQkJCXNp emVvZiAoKl9fZmRzKSwKKwkJCQkJInBwb2xsIGNhbGxlZCB3aXRoIGZkcyBi dWZmZXIgdG9vICIKKwkJCQkJInNtYWxsIGZpbGUgbmZkcyBlbnRyaWVzIikK IHsKLSAgaWYgKF9fYm9zIChfX2ZkcykgIT0gKF9fU0laRV9UWVBFX18pIC0x KQotICAgIHsKLSAgICAgIGlmICghIF9fYnVpbHRpbl9jb25zdGFudF9wIChf X25mZHMpKQotCXJldHVybiBfX3Bwb2xsX2NoayAoX19mZHMsIF9fbmZkcywg X190aW1lb3V0LCBfX3NzLCBfX2JvcyAoX19mZHMpKTsKLSAgICAgIGVsc2Ug aWYgKF9fYm9zIChfX2ZkcykgLyBzaXplb2YgKCpfX2ZkcykgPCBfX25mZHMp Ci0JcmV0dXJuIF9fcHBvbGxfY2hrX3dhcm4gKF9fZmRzLCBfX25mZHMsIF9f dGltZW91dCwgX19zcywKLQkJCQkgX19ib3MgKF9fZmRzKSk7Ci0gICAgfQot CisgIGlmIChfX0ZPUlRJRllfQ0FMTF9DSEsgJiYgX19ib3MgKF9fZmRzKSAh PSAoX19TSVpFX1RZUEVfXykgLTEpCisgICAgcmV0dXJuIF9fcHBvbGxfY2hr IChfX2ZkcywgX19uZmRzLCBfX3RpbWVvdXQsIF9fc3MsIF9fYm9zIChfX2Zk cykpOwogICByZXR1cm4gX19wcG9sbF9hbGlhcyAoX19mZHMsIF9fbmZkcywg X190aW1lb3V0LCBfX3NzKTsKIH0KK19fRk9SVElGWV9GVU5DVElPTl9FTkQK ICNlbmRpZgogCiBfX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvaW8vZmNudGwu aCBiL2lvL2ZjbnRsLmgKaW5kZXggYTZjY2I5MGExNS4uY2U3MTJhNWM0YyAx MDA2NDQKLS0tIGEvaW8vZmNudGwuaAorKysgYi9pby9mY250bC5oCkBAIC0z MDksNyArMzA5LDcgQEAgZXh0ZXJuIGludCBwb3NpeF9mYWxsb2NhdGU2NCAo aW50IF9fZmQsIG9mZjY0X3QgX19vZmZzZXQsIG9mZjY0X3QgX19sZW4pOwog CiAvKiBEZWZpbmUgc29tZSBpbmxpbmVzIGhlbHBpbmcgdG8gY2F0Y2ggY29t bW9uIHByb2JsZW1zLiAgKi8KICNpZiBfX1VTRV9GT1JUSUZZX0xFVkVMID4g MCAmJiBkZWZpbmVkIF9fZm9ydGlmeV9mdW5jdGlvbiBcCi0gICAgJiYgZGVm aW5lZCBfX3ZhX2FyZ19wYWNrX2xlbgorICAgICYmIChkZWZpbmVkIF9fdmFf YXJnX3BhY2tfbGVuIHx8IGRlZmluZWQgX191c2VfY2xhbmdfZm9ydGlmeSkK ICMgaW5jbHVkZSA8Yml0cy9mY250bDIuaD4KICNlbmRpZgogCmRpZmYgLS1n aXQgYS9saWJpby9iaXRzL3N0ZGlvMi5oIGIvbGliaW8vYml0cy9zdGRpbzIu aAppbmRleCBlOWY5ZDY5NTJiLi4wNWUyZjAxNzdjIDEwMDY0NAotLS0gYS9s aWJpby9iaXRzL3N0ZGlvMi5oCisrKyBiL2xpYmlvL2JpdHMvc3RkaW8yLmgK QEAgLTI2LDEyICsyNiwyMyBAQCBleHRlcm4gaW50IF9fdnNwcmludGZfY2hr IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fZmxhZywgc2l6ZV90IF9f c2xlbiwKIAkJCSAgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs CiAJCQkgICBfR192YV9saXN0IF9fYXApIF9fVEhST1c7CiAKLSNpZmRlZiBf X3ZhX2FyZ19wYWNrCi1fX2ZvcnRpZnlfZnVuY3Rpb24gaW50Ci1fX05USCAo c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIGNvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19mbXQsIC4uLikpCisjZGVmaW5lIF9fbXVsX21heV9vdmVy ZmxvdyhzaXplLCBuKSBcCisgICgoc2l6ZSB8IG4pID49ICgoKHNpemVfdCkx KSA8PCAoOCAqIHNpemVvZiAoc2l6ZV90KSAvIDIpKSkKKworI2lmZGVmIF9f Rk9SVElGWV9BUkdfUEFDS19PSworLyogY2xhbmcgZG9lc24ndCBoYXZlIF9f dmFfYXJnX3BhY2ssIHNvIHdlIG5lZWQgdG8gZGVmZXIgdG8gdGhlIHZhX2Fy ZyB2ZXJzaW9ucworICAgb2YgdGhlc2UgZnVuY3Rpb25zLiAgKi8KK19fZm9y dGlmeV9wb3RlbnRpYWxfb3ZlcmxvYWQgaW50CitfX05USCAoc3ByaW50ZiAo Y2hhciAqX19yZXN0cmljdCBjb25zdCBfX2NsYW5nX3Bhc3Nfb2JqZWN0X3Np emUgX19zLAorCQljb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4p KQogewotICByZXR1cm4gX19idWlsdGluX19fc3ByaW50Zl9jaGsgKF9fcywg X19VU0VfRk9SVElGWV9MRVZFTCAtIDEsCi0JCQkJICBfX2JvcyAoX19zKSwg X19mbXQsIF9fdmFfYXJnX3BhY2sgKCkpOworICBfX0ZPUlRJRllfSU5JVF9B UkdfUEFDSyhfX2ZtdCk7CisgIGludCBfX3Jlc3VsdCA9IF9fRk9SVElGWV9D QUxMX1ZBX0JVSUxUSU4gKHNwcmludGYsIF9fcywKKwkJCQkJICAgIF9fVVNF X0ZPUlRJRllfTEVWRUwgLSAxLAorCQkJCQkgICAgX19ib3MgKF9fcyksIF9f Zm10LAorCQkJCQkgICAgX19GT1JUSUZZX0FSR19QQUNLKTsKKyAgX19GT1JU SUZZX0ZSRUVfQVJHX1BBQ0soKTsKKyAgcmV0dXJuIF9fcmVzdWx0OwogfQog I2VsaWYgIWRlZmluZWQgX19jcGx1c3BsdXMKICMgZGVmaW5lIHNwcmludGYo c3RyLCAuLi4pIFwKQEAgLTM5LDkgKzUwLDkgQEAgX19OVEggKHNwcmludGYg KGNoYXIgKl9fcmVzdHJpY3QgX19zLCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm10LCAuLi4pKQogCQkJICAgX19WQV9BUkdTX18pCiAjZW5kaWYKIAot X19mb3J0aWZ5X2Z1bmN0aW9uIGludAotX19OVEggKHZzcHJpbnRmIChjaGFy ICpfX3Jlc3RyaWN0IF9fcywgY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zt dCwKLQkJIF9HX3ZhX2xpc3QgX19hcCkpCitfX2ZvcnRpZnlfcG90ZW50aWFs X292ZXJsb2FkIGludAorX19OVEggKHZzcHJpbnRmIChjaGFyICpfX3Jlc3Ry aWN0IGNvbnN0IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZSBfX3MsCisJCSBj b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfR192YV9saXN0IF9fYXAp KQogewogICByZXR1cm4gX19idWlsdGluX19fdnNwcmludGZfY2hrIChfX3Ms IF9fVVNFX0ZPUlRJRllfTEVWRUwgLSAxLAogCQkJCSAgIF9fYm9zIChfX3Mp LCBfX2ZtdCwgX19hcCk7CkBAIC01NiwxMyArNjcsMjEgQEAgZXh0ZXJuIGlu dCBfX3ZzbnByaW50Zl9jaGsgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXpl X3QgX19uLCBpbnQgX19mbGFnLAogCQkJICAgIHNpemVfdCBfX3NsZW4sIGNv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAJCQkgICAgX0dfdmFf bGlzdCBfX2FwKSBfX1RIUk9XOwogCi0jIGlmZGVmIF9fdmFfYXJnX3BhY2sK LV9fZm9ydGlmeV9mdW5jdGlvbiBpbnQKLV9fTlRIIChzbnByaW50ZiAoY2hh ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCi0JCSBjb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pKQorIyBpZmRlZiBfX0ZPUlRJRllf QVJHX1BBQ0tfT0sKK19fZm9ydGlmeV9wb3RlbnRpYWxfb3ZlcmxvYWQgaW50 CitfX05USCAoc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgY29uc3QgX19j bGFuZ19wYXNzX29iamVjdF9zaXplIF9fcywKKwkJIHNpemVfdCBfX24sIGNv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikpCisgICAgIC8qIEdD QydzIGJ1aWx0aW4gd2lsbCBjYXRjaCB0aGlzLCBzbyB3ZSBqdXN0IG5lZWQg dG8gY292ZXIgY2xhbmcgaGVyZS4gICovCisgICAgIF9fY2xhbmdfd2Fybmlu Z19pZiAoX19ib3Nfc3RhdGljX2x0IChfX24sIF9fcyksCisJCQkgImNhbGwg dG8gc25wcmludGYgbWF5IG92ZXJmbG93IHRoZSBkZXN0aW5hdGlvbiBidWZm ZXIiKQogewotICByZXR1cm4gX19idWlsdGluX19fc25wcmludGZfY2hrIChf X3MsIF9fbiwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsCi0JCQkJICAgX19i b3MgKF9fcyksIF9fZm10LCBfX3ZhX2FyZ19wYWNrICgpKTsKKyAgX19GT1JU SUZZX0lOSVRfQVJHX1BBQ0soX19mbXQpOworICBpbnQgX19yZXN1bHQgPSBf X0ZPUlRJRllfQ0FMTF9WQV9CVUlMVElOIChzbnByaW50ZiwgX19zLCBfX24s CisJCQkJCSAgICBfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwKKwkJCQkJICAg IF9fYm9zIChfX3MpLCBfX2ZtdCwKKwkJCQkJICAgIF9fRk9SVElGWV9BUkdf UEFDSyk7CisgIF9fRk9SVElGWV9GUkVFX0FSR19QQUNLKCk7CisgIHJldHVy biBfX3Jlc3VsdDsKIH0KICMgZWxpZiAhZGVmaW5lZCBfX2NwbHVzcGx1cwog IyAgZGVmaW5lIHNucHJpbnRmKHN0ciwgbGVuLCAuLi4pIFwKQEAgLTcwLDkg Kzg5LDEyIEBAIF9fTlRIIChzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBf X3MsIHNpemVfdCBfX24sCiAJCQkgICAgX19WQV9BUkdTX18pCiAjIGVuZGlm CiAKLV9fZm9ydGlmeV9mdW5jdGlvbiBpbnQKLV9fTlRIICh2c25wcmludGYg KGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAotCQkgIGNvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9HX3ZhX2xpc3QgX19hcCkpCitf X2ZvcnRpZnlfcG90ZW50aWFsX292ZXJsb2FkIGludAorX19OVEggKHZzbnBy aW50ZiAoY2hhciAqX19yZXN0cmljdCBjb25zdCBfX2NsYW5nX3Bhc3Nfb2Jq ZWN0X3NpemUgX19zLAorCQkgIHNpemVfdCBfX24sIGNvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19mbXQsIF9HX3ZhX2xpc3QgX19hcCkpCisgICAgIF9fY2xh bmdfd2FybmluZ19pZiAoX19ib3Nfc3RhdGljX2x0IChfX24sIF9fcyksCisg ICAgICAgICAgICAgICAgICAgICAgICAgImNhbGwgdG8gdnNucHJpbnRmIG1h eSBvdmVyZmxvdyB0aGUgZGVzdGluYXRpb24gIgorICAgICAgICAgICAgICAg ICAgICAgICAgICJidWZmZXIiKQogewogICByZXR1cm4gX19idWlsdGluX19f dnNucHJpbnRmX2NoayAoX19zLCBfX24sIF9fVVNFX0ZPUlRJRllfTEVWRUwg LSAxLAogCQkJCSAgICBfX2JvcyAoX19zKSwgX19mbXQsIF9fYXApOwpAQCAt OTAsMTggKzExMiwyNyBAQCBleHRlcm4gaW50IF9fdmZwcmludGZfY2hrIChG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBpbnQgX19mbGFnLAogZXh0ZXJu IGludCBfX3ZwcmludGZfY2hrIChpbnQgX19mbGFnLCBjb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm9ybWF0LAogCQkJICBfR192YV9saXN0IF9fYXApOwog Ci0jIGlmZGVmIF9fdmFfYXJnX3BhY2sKLV9fZm9ydGlmeV9mdW5jdGlvbiBp bnQKLWZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKKyMgaWZkZWYgX19GT1JU SUZZX0FSR19QQUNLX09LCitfX2ZvcnRpZnlfcG90ZW50aWFsX292ZXJsb2Fk IGludAorZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBjb25zdCBfX2NsYW5n X3Bhc3Nfb2JqZWN0X3NpemUgX19zdHJlYW0sCisJIGNvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19mbXQsIC4uLikKIHsKLSAgcmV0dXJuIF9fZnByaW50Zl9j aGsgKF9fc3RyZWFtLCBfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwgX19mbXQs Ci0JCQlfX3ZhX2FyZ19wYWNrICgpKTsKKyAgX19GT1JUSUZZX0lOSVRfQVJH X1BBQ0soX19mbXQpOworICBpbnQgX19yZXN1bHQgPSBfX0ZPUlRJRllfQ0FM TF9WQV9DSEsgKGZwcmludGYsIF9fc3RyZWFtLAorCQkJCQlfX1VTRV9GT1JU SUZZX0xFVkVMIC0gMSwgX19mbXQsCisJCQkJCV9fRk9SVElGWV9BUkdfUEFD Syk7CisgIF9fRk9SVElGWV9GUkVFX0FSR19QQUNLKCk7CisgIHJldHVybiBf X3Jlc3VsdDsKIH0KIAotX19mb3J0aWZ5X2Z1bmN0aW9uIGludAotcHJpbnRm IChjb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCitfX2ZvcnRp ZnlfcG90ZW50aWFsX292ZXJsb2FkIGludAorcHJpbnRmIChjb25zdCBjaGFy ICpfX3Jlc3RyaWN0IGNvbnN0IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZSBf X2ZtdCwgLi4uKQogewotICByZXR1cm4gX19wcmludGZfY2hrIChfX1VTRV9G T1JUSUZZX0xFVkVMIC0gMSwgX19mbXQsIF9fdmFfYXJnX3BhY2sgKCkpOwor ICBfX0ZPUlRJRllfSU5JVF9BUkdfUEFDSyhfX2ZtdCk7CisgIGludCBfX3Jl c3VsdCA9IF9fRk9SVElGWV9DQUxMX1ZBX0NISyAocHJpbnRmLCBfX1VTRV9G T1JUSUZZX0xFVkVMIC0gMSwgX19mbXQsCisJCQkJCV9fRk9SVElGWV9BUkdf UEFDSyk7CisgIF9fRk9SVElGWV9GUkVFX0FSR19QQUNLKCk7CisgIHJldHVy biBfX3Jlc3VsdDsKIH0KICMgZWxpZiAhZGVmaW5lZCBfX2NwbHVzcGx1cwog IyAgZGVmaW5lIHByaW50ZiguLi4pIFwKQEAgLTExMCwxOCArMTQxLDE5IEBA IHByaW50ZiAoY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQog ICBfX2ZwcmludGZfY2hrIChzdHJlYW0sIF9fVVNFX0ZPUlRJRllfTEVWRUwg LSAxLCBfX1ZBX0FSR1NfXykKICMgZW5kaWYKIAotX19mb3J0aWZ5X2Z1bmN0 aW9uIGludAotdnByaW50ZiAoY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zt dCwgX0dfdmFfbGlzdCBfX2FwKQorX19mb3J0aWZ5X3BvdGVudGlhbF9vdmVy bG9hZCBpbnQKK3ZwcmludGYgKGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgY29u c3QgX19jbGFuZ19wYXNzX29iamVjdF9zaXplIF9fZm10LAorCSBfR192YV9s aXN0IF9fYXApCiB7Ci0jaWZkZWYgX19VU0VfRVhURVJOX0lOTElORVMKKyMg aWZkZWYgX19VU0VfRVhURVJOX0lOTElORVMKICAgcmV0dXJuIF9fdmZwcmlu dGZfY2hrIChzdGRvdXQsIF9fVVNFX0ZPUlRJRllfTEVWRUwgLSAxLCBfX2Zt dCwgX19hcCk7Ci0jZWxzZQorIyBlbHNlCiAgIHJldHVybiBfX3ZwcmludGZf Y2hrIChfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwgX19mbXQsIF9fYXApOwot I2VuZGlmCisjIGVuZGlmCiB9CiAKLV9fZm9ydGlmeV9mdW5jdGlvbiBpbnQK LXZmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAorX19mb3J0 aWZ5X3BvdGVudGlhbF9vdmVybG9hZCBpbnQKK3ZmcHJpbnRmIChGSUxFICpf X3Jlc3RyaWN0IGNvbnN0IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZSBfX3N0 cmVhbSwKIAkgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9HX3Zh X2xpc3QgX19hcCkKIHsKICAgcmV0dXJuIF9fdmZwcmludGZfY2hrIChfX3N0 cmVhbSwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fZm10LCBfX2FwKTsK QEAgLTEzNCwyMCArMTY2LDI2IEBAIGV4dGVybiBpbnQgX192ZHByaW50Zl9j aGsgKGludCBfX2ZkLCBpbnQgX19mbGFnLAogCQkJICAgY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2ZtdCwgX0dfdmFfbGlzdCBfX2FyZykKICAgICAgX19h dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7 CiAKLSMgIGlmZGVmIF9fdmFfYXJnX3BhY2sKLV9fZm9ydGlmeV9mdW5jdGlv biBpbnQKLWRwcmludGYgKGludCBfX2ZkLCBjb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm10LCAuLi4pCisjICBpZmRlZiBfX0ZPUlRJRllfQVJHX1BBQ0tf T0sKK19fZm9ydGlmeV9wb3RlbnRpYWxfb3ZlcmxvYWQgaW50CitkcHJpbnRm IChpbnQgX19mZCwgY29uc3QgY2hhciAqX19yZXN0cmljdCBjb25zdCBfX2Ns YW5nX3Bhc3Nfb2JqZWN0X3NpemUgX19mbXQsCisJIC4uLikKIHsKLSAgcmV0 dXJuIF9fZHByaW50Zl9jaGsgKF9fZmQsIF9fVVNFX0ZPUlRJRllfTEVWRUwg LSAxLCBfX2ZtdCwKLQkJCV9fdmFfYXJnX3BhY2sgKCkpOworICBfX0ZPUlRJ RllfSU5JVF9BUkdfUEFDSyhfX2ZtdCk7CisgIGludCBfX3Jlc3VsdCA9IF9f Rk9SVElGWV9DQUxMX1ZBX0NISyAoZHByaW50ZiwgX19mZCwgX19VU0VfRk9S VElGWV9MRVZFTCAtIDEsCisJCQkJCV9fZm10LCBfX0ZPUlRJRllfQVJHX1BB Q0spOworICBfX0ZPUlRJRllfRlJFRV9BUkdfUEFDSygpOworICByZXR1cm4g X19yZXN1bHQ7CiB9CiAjICBlbGlmICFkZWZpbmVkIF9fY3BsdXNwbHVzCiAj ICAgZGVmaW5lIGRwcmludGYoZmQsIC4uLikgXAogICBfX2RwcmludGZfY2hr IChmZCwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fVkFfQVJHU19fKQog IyAgZW5kaWYKIAotX19mb3J0aWZ5X2Z1bmN0aW9uIGludAotdmRwcmludGYg KGludCBfX2ZkLCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfR192 YV9saXN0IF9fYXApCitfX2ZvcnRpZnlfcG90ZW50aWFsX292ZXJsb2FkIGlu dAordmRwcmludGYgKGludCBfX2ZkLAorCSAgY29uc3QgY2hhciAqX19yZXN0 cmljdCBjb25zdCBfX2NsYW5nX3Bhc3Nfb2JqZWN0X3NpemUgX19mbXQsCisJ ICBfR192YV9saXN0IF9fYXApCiB7CiAgIHJldHVybiBfX3ZkcHJpbnRmX2No ayAoX19mZCwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fZm10LCBfX2Fw KTsKIH0KQEAgLTE3MSwyOCArMjA5LDQ3IEBAIGV4dGVybiBpbnQgX19vYnN0 YWNrX3ZwcmludGZfY2hrIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBf X29ic3RhY2ssCiAJCQkJICBfR192YV9saXN0IF9fYXJncykKICAgICAgX19U SFJPVyBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg MywgMCkpKTsKIAotIyAgaWZkZWYgX192YV9hcmdfcGFjawotX19mb3J0aWZ5 X2Z1bmN0aW9uIGludAotX19OVEggKGFzcHJpbnRmIChjaGFyICoqX19yZXN0 cmljdCBfX3B0ciwgY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4u KSkKKyMgIGlmZGVmIF9fRk9SVElGWV9BUkdfUEFDS19PSworX19mb3J0aWZ5 X3BvdGVudGlhbF9vdmVybG9hZCBpbnQKK19fTlRIIChhc3ByaW50ZiAoY2hh ciAqKl9fcmVzdHJpY3QgY29uc3QgX19jbGFuZ19wYXNzX29iamVjdF9zaXpl IF9fcHRyLAorCQkgY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4u KSkKIHsKLSAgcmV0dXJuIF9fYXNwcmludGZfY2hrIChfX3B0ciwgX19VU0Vf Rk9SVElGWV9MRVZFTCAtIDEsIF9fZm10LAotCQkJIF9fdmFfYXJnX3BhY2sg KCkpOworICBfX0ZPUlRJRllfSU5JVF9BUkdfUEFDSyhfX2ZtdCk7CisgIGlu dCBfX3Jlc3VsdCA9IF9fRk9SVElGWV9DQUxMX1ZBX0NISyAoYXNwcmludGYs IF9fcHRyLAorCQkJCQlfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwgX19mbXQs CisJCQkJCV9fRk9SVElGWV9BUkdfUEFDSyk7CisgIF9fRk9SVElGWV9GUkVF X0FSR19QQUNLKCk7CisgIHJldHVybiBfX3Jlc3VsdDsKIH0KIAotX19mb3J0 aWZ5X2Z1bmN0aW9uIGludAotX19OVEggKF9fYXNwcmludGYgKGNoYXIgKipf X3Jlc3RyaWN0IF9fcHRyLCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10 LAotCQkgICAuLi4pKQorX19mb3J0aWZ5X3BvdGVudGlhbF9vdmVybG9hZCBp bnQKK19fTlRIIChfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBjb25z dCBfX2NsYW5nX3Bhc3Nfb2JqZWN0X3NpemUgX19wdHIsCisJCSAgIGNvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikpCiB7Ci0gIHJldHVybiBf X2FzcHJpbnRmX2NoayAoX19wdHIsIF9fVVNFX0ZPUlRJRllfTEVWRUwgLSAx LCBfX2ZtdCwKLQkJCSBfX3ZhX2FyZ19wYWNrICgpKTsKKyAgX19GT1JUSUZZ X0lOSVRfQVJHX1BBQ0soX19mbXQpOworICBpbnQgX19yZXN1bHQgPSBfX0ZP UlRJRllfQ0FMTF9WQV9DSEsgKGFzcHJpbnRmLCBfX3B0ciwKKwkJCQkJX19V U0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fZm10LAorCQkJCQlfX0ZPUlRJRllf QVJHX1BBQ0spOworICBfX0ZPUlRJRllfRlJFRV9BUkdfUEFDSygpOworICBy ZXR1cm4gX19yZXN1bHQ7CiB9CiAKLV9fZm9ydGlmeV9mdW5jdGlvbiBpbnQK LV9fTlRIIChvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVz dHJpY3QgX19vYnN0YWNrLAorX19mb3J0aWZ5X3BvdGVudGlhbF9vdmVybG9h ZCBpbnQKK19fTlRIIChvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sg KgorCQkJIF9fcmVzdHJpY3QgY29uc3QgX19jbGFuZ19wYXNzX29iamVjdF9z aXplIF9fb2JzdGFjaywKIAkJICAgICAgIGNvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mbXQsIC4uLikpCiB7Ci0gIHJldHVybiBfX29ic3RhY2tfcHJpbnRm X2NoayAoX19vYnN0YWNrLCBfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwgX19m bXQsCi0JCQkgICAgICAgX192YV9hcmdfcGFjayAoKSk7CisgIF9fRk9SVElG WV9JTklUX0FSR19QQUNLKF9fZm10KTsKKyAgaW50IF9fcmVzdWx0ID0KKyMg ICBpZmRlZiBfX3VzZV9jbGFuZ19mb3J0aWZ5CisgICAgX19vYnN0YWNrX3Zw cmludGZfY2hrCisjICAgZWxzZQorICAgIF9fb2JzdGFja19wcmludGZfY2hr CisjICAgZW5kaWYKKyAgICAgIChfX29ic3RhY2ssIF9fVVNFX0ZPUlRJRllf TEVWRUwgLSAxLCBfX2ZtdCwKKwkJCSAgICAgX19GT1JUSUZZX0FSR19QQUNL KTsKKyAgX19GT1JUSUZZX0ZSRUVfQVJHX1BBQ0soKTsKKyAgcmV0dXJuIF9f cmVzdWx0OwogfQogIyAgZWxpZiAhZGVmaW5lZCBfX2NwbHVzcGx1cwogIyAg IGRlZmluZSBhc3ByaW50ZihwdHIsIC4uLikgXApAQCAtMjAzLDE1ICsyNjAs MTYgQEAgX19OVEggKG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAq X19yZXN0cmljdCBfX29ic3RhY2ssCiAgIF9fb2JzdGFja19wcmludGZfY2hr IChvYnN0YWNrLCBfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwgX19WQV9BUkdT X18pCiAjICBlbmRpZgogCi1fX2ZvcnRpZnlfZnVuY3Rpb24gaW50Ci1fX05U SCAodmFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwgY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2ZtdCwKLQkJICBfR192YV9saXN0IF9fYXAp KQorX19mb3J0aWZ5X3BvdGVudGlhbF9vdmVybG9hZCBpbnQKK19fTlRIICh2 YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IGNvbnN0IF9fY2xhbmdfcGFz c19vYmplY3Rfc2l6ZSBfX3B0ciwKKwkJICBjb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm10LCBfR192YV9saXN0IF9fYXApKQogewogICByZXR1cm4gX192 YXNwcmludGZfY2hrIChfX3B0ciwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEs IF9fZm10LCBfX2FwKTsKIH0KIAotX19mb3J0aWZ5X2Z1bmN0aW9uIGludAot X19OVEggKG9ic3RhY2tfdnByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVz dHJpY3QgX19vYnN0YWNrLAorX19mb3J0aWZ5X3BvdGVudGlhbF9vdmVybG9h ZCBpbnQKK19fTlRIIChvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNr ICoKKwkJCSAgX19yZXN0cmljdCBjb25zdCBfX2NsYW5nX3Bhc3Nfb2JqZWN0 X3NpemUgX19vYnN0YWNrLAogCQkJY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2ZtdCwgX0dfdmFfbGlzdCBfX2FwKSkKIHsKICAgcmV0dXJuIF9fb2JzdGFj a192cHJpbnRmX2NoayAoX19vYnN0YWNrLCBfX1VTRV9GT1JUSUZZX0xFVkVM IC0gMSwgX19mbXQsCkBAIC0yMjQsMTcgKzI4MiwyMCBAQCBfX05USCAob2Jz dGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29i c3RhY2ssCiAKICNpZiBfX0dMSUJDX1VTRSAoREVQUkVDQVRFRF9HRVRTKQog ZXh0ZXJuIGNoYXIgKl9fZ2V0c19jaGsgKGNoYXIgKl9fc3RyLCBzaXplX3Qp IF9fd3VyOwotZXh0ZXJuIGNoYXIgKl9fUkVESVJFQ1QgKF9fZ2V0c193YXJu LCAoY2hhciAqX19zdHIpLCBnZXRzKQotICAgICBfX3d1ciBfX3dhcm5hdHRy ICgicGxlYXNlIHVzZSBmZ2V0cyBvciBnZXRsaW5lIGluc3RlYWQsIGdldHMg Y2FuJ3QgIgotCQkgICAgICAgInNwZWNpZnkgYnVmZmVyIHNpemUiKTsKLQot X19mb3J0aWZ5X2Z1bmN0aW9uIF9fd3VyIGNoYXIgKgotZ2V0cyAoY2hhciAq X19zdHIpCitleHRlcm4gY2hhciAqX19SRURJUkVDVF9OVEggKF9fZ2V0c19h bGlhcywgKGNoYXIgKl9fYnVmKSwgZ2V0cykgX193dXI7CisKK19fZm9ydGlm eV9wb3RlbnRpYWxfb3ZlcmxvYWQgX193dXIgY2hhciAqCitnZXRzIChjaGFy ICpjb25zdCBfX2NsYW5nX3Bhc3Nfb2JqZWN0X3NpemUgX19zdHIpCitfX0ZP UlRJRllfUFJFQ09ORElUSU9OUworICAgICBfX0ZPUlRJRllfV0FSTklOR19J RiAoX19nZXRzX3dhcm4sIF9fYm9zIChfX3N0cikgPT0gKHNpemVfdCkgLTEs CisJCQkgICAicGxlYXNlIHVzZSBmZ2V0cyBvciBnZXRsaW5lIGluc3RlYWQs IGdldHMgY2FuJ3QgIgorCQkJICAgInNwZWNpZnkgYnVmZmVyIHNpemUiKQog ewogICBpZiAoX19ib3MgKF9fc3RyKSAhPSAoc2l6ZV90KSAtMSkKICAgICBy ZXR1cm4gX19nZXRzX2NoayAoX19zdHIsIF9fYm9zIChfX3N0cikpOwotICBy ZXR1cm4gX19nZXRzX3dhcm4gKF9fc3RyKTsKKyAgcmV0dXJuIF9fZ2V0c19h bGlhcyAoX19zdHIpOwogfQorX19GT1JUSUZZX0ZVTkNUSU9OX0VORAogI2Vu ZGlmCiAKIGV4dGVybiBjaGFyICpfX2ZnZXRzX2NoayAoY2hhciAqX19yZXN0 cmljdCBfX3MsIHNpemVfdCBfX3NpemUsIGludCBfX24sCkBAIC0yNDIsMjUg KzMwMywyMCBAQCBleHRlcm4gY2hhciAqX19mZ2V0c19jaGsgKGNoYXIgKl9f cmVzdHJpY3QgX19zLCBzaXplX3QgX19zaXplLCBpbnQgX19uLAogZXh0ZXJu IGNoYXIgKl9fUkVESVJFQ1QgKF9fZmdldHNfYWxpYXMsCiAJCQkgKGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogCQkJICBGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtKSwgZmdldHMpIF9fd3VyOwotZXh0ZXJuIGNoYXIgKl9f UkVESVJFQ1QgKF9fZmdldHNfY2hrX3dhcm4sCi0JCQkgKGNoYXIgKl9fcmVz dHJpY3QgX19zLCBzaXplX3QgX19zaXplLCBpbnQgX19uLAotCQkJICBGSUxF ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSwgX19mZ2V0c19jaGspCi0gICAgIF9f d3VyIF9fd2FybmF0dHIgKCJmZ2V0cyBjYWxsZWQgd2l0aCBiaWdnZXIgc2l6 ZSB0aGFuIGxlbmd0aCAiCi0JCSAgICAgICAib2YgZGVzdGluYXRpb24gYnVm ZmVyIik7Ci0KLV9fZm9ydGlmeV9mdW5jdGlvbiBfX3d1ciBjaGFyICoKLWZn ZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSkKKworX19mb3J0aWZ5X3BvdGVudGlhbF9vdmVy bG9hZCBfX3d1ciBjaGFyICoKK2ZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IGNv bnN0IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZSBfX3MsIGludCBfX24sCisg ICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKK19fRk9SVElGWV9Q UkVDT05ESVRJT05TCisgICAgIF9fRk9SVElGWV9XQVJOSU5HX0lGIChfX2Zn ZXRzX3dhcm4sIF9fYm9zX3N0YXRpY19sdCAoX19uLCBfX3MpICYmIF9fbiA+ IDAsCisJCQkgICAiZmdldHMgY2FsbGVkIHdpdGggYmlnZ2VyIHNpemUgdGhh biBsZW5ndGggb2YgIgorCQkJICAgImRlc3RpbmF0aW9uIGJ1ZmZlciIpCiB7 CiAgIGlmIChfX2JvcyAoX19zKSAhPSAoc2l6ZV90KSAtMSkKLSAgICB7Ci0g ICAgICBpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wIChfX24pIHx8IF9fbiA8 PSAwKQotCXJldHVybiBfX2ZnZXRzX2NoayAoX19zLCBfX2JvcyAoX19zKSwg X19uLCBfX3N0cmVhbSk7Ci0KLSAgICAgIGlmICgoc2l6ZV90KSBfX24gPiBf X2JvcyAoX19zKSkKLQlyZXR1cm4gX19mZ2V0c19jaGtfd2FybiAoX19zLCBf X2JvcyAoX19zKSwgX19uLCBfX3N0cmVhbSk7Ci0gICAgfQorICAgIHJldHVy biBfX2ZnZXRzX2NoayAoX19zLCBfX2JvcyAoX19zKSwgX19uLCBfX3N0cmVh bSk7CiAgIHJldHVybiBfX2ZnZXRzX2FsaWFzIChfX3MsIF9fbiwgX19zdHJl YW0pOwogfQorX19GT1JUSUZZX0ZVTkNUSU9OX0VORAogCiBleHRlcm4gc2l6 ZV90IF9fZnJlYWRfY2hrICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXpl X3QgX19wdHJsZW4sCiAJCQkgICBzaXplX3QgX19zaXplLCBzaXplX3QgX19u LApAQCAtMjY5LDMwICszMjUsMjEgQEAgZXh0ZXJuIHNpemVfdCBfX1JFRElS RUNUIChfX2ZyZWFkX2FsaWFzLAogCQkJICAodm9pZCAqX19yZXN0cmljdCBf X3B0ciwgc2l6ZV90IF9fc2l6ZSwKIAkJCSAgIHNpemVfdCBfX24sIEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pLAogCQkJICBmcmVhZCkgX193dXI7Ci1l eHRlcm4gc2l6ZV90IF9fUkVESVJFQ1QgKF9fZnJlYWRfY2hrX3dhcm4sCi0J CQkgICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19wdHJsZW4s Ci0JCQkgICBzaXplX3QgX19zaXplLCBzaXplX3QgX19uLAotCQkJICAgRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSksCi0JCQkgIF9fZnJlYWRfY2hrKQot ICAgICBfX3d1ciBfX3dhcm5hdHRyICgiZnJlYWQgY2FsbGVkIHdpdGggYmln Z2VyIHNpemUgKiBubWVtYiB0aGFuIGxlbmd0aCAiCi0JCSAgICAgICAib2Yg ZGVzdGluYXRpb24gYnVmZmVyIik7CiAKLV9fZm9ydGlmeV9mdW5jdGlvbiBf X3d1ciBzaXplX3QKLWZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBz aXplX3QgX19zaXplLCBzaXplX3QgX19uLAotICAgICAgIEZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0pCitfX2ZvcnRpZnlfcG90ZW50aWFsX292ZXJsb2Fk IF9fd3VyIHNpemVfdAorZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgY29uc3Qg X19jbGFuZ19wYXNzX29iamVjdF9zaXplMCBfX3B0ciwgc2l6ZV90IF9fc2l6 ZSwKKyAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry ZWFtKQorX19GT1JUSUZZX1BSRUNPTkRJVElPTlMKKyAgICAgX19GT1JUSUZZ X1dBUk5JTkdfSUYgKF9fZnJlYWRfd2FybiwgX19ib3MwX3N0YXRpY19sdCAo X19zaXplICogX19uLCBfX3B0cikKKwkJCSAgICAmJiAhX19tdWxfbWF5X292 ZXJmbG93IChfX3NpemUsIF9fbiksCisJCQkgICAiZnJlYWQgY2FsbGVkIHdp dGggYmlnZ2VyIHNpemUgKiBubWVtYiB0aGFuIGxlbmd0aCAiCisJCQkgICAi b2YgZGVzdGluYXRpb24gYnVmZmVyIikKIHsKICAgaWYgKF9fYm9zMCAoX19w dHIpICE9IChzaXplX3QpIC0xKQotICAgIHsKLSAgICAgIGlmICghX19idWls dGluX2NvbnN0YW50X3AgKF9fc2l6ZSkKLQkgIHx8ICFfX2J1aWx0aW5fY29u c3RhbnRfcCAoX19uKQotCSAgfHwgKF9fc2l6ZSB8IF9fbikgPj0gKCgoc2l6 ZV90KSAxKSA8PCAoOCAqIHNpemVvZiAoc2l6ZV90KSAvIDIpKSkKLQlyZXR1 cm4gX19mcmVhZF9jaGsgKF9fcHRyLCBfX2JvczAgKF9fcHRyKSwgX19zaXpl LCBfX24sIF9fc3RyZWFtKTsKLQotICAgICAgaWYgKF9fc2l6ZSAqIF9fbiA+ IF9fYm9zMCAoX19wdHIpKQotCXJldHVybiBfX2ZyZWFkX2Noa193YXJuIChf X3B0ciwgX19ib3MwIChfX3B0ciksIF9fc2l6ZSwgX19uLCBfX3N0cmVhbSk7 Ci0gICAgfQorICAgIHJldHVybiBfX2ZyZWFkX2NoayAoX19wdHIsIF9fYm9z MCAoX19wdHIpLCBfX3NpemUsIF9fbiwgX19zdHJlYW0pOwogICByZXR1cm4g X19mcmVhZF9hbGlhcyAoX19wdHIsIF9fc2l6ZSwgX19uLCBfX3N0cmVhbSk7 CiB9CitfX0ZPUlRJRllfRlVOQ1RJT05fRU5ECiAKICNpZmRlZiBfX1VTRV9H TlUKIGV4dGVybiBjaGFyICpfX2ZnZXRzX3VubG9ja2VkX2NoayAoY2hhciAq X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX3NpemUsCkBAIC0zMDAsMjUgKzM0 NywyMSBAQCBleHRlcm4gY2hhciAqX19mZ2V0c191bmxvY2tlZF9jaGsgKGNo YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19zaXplLAogZXh0ZXJuIGNo YXIgKl9fUkVESVJFQ1QgKF9fZmdldHNfdW5sb2NrZWRfYWxpYXMsCiAJCQkg KGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogCQkJICBGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtKSwgZmdldHNfdW5sb2NrZWQpIF9fd3VyOwot ZXh0ZXJuIGNoYXIgKl9fUkVESVJFQ1QgKF9fZmdldHNfdW5sb2NrZWRfY2hr X3dhcm4sCi0JCQkgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19z aXplLCBpbnQgX19uLAotCQkJICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt KSwgX19mZ2V0c191bmxvY2tlZF9jaGspCi0gICAgIF9fd3VyIF9fd2FybmF0 dHIgKCJmZ2V0c191bmxvY2tlZCBjYWxsZWQgd2l0aCBiaWdnZXIgc2l6ZSB0 aGFuIGxlbmd0aCAiCi0JCSAgICAgICAib2YgZGVzdGluYXRpb24gYnVmZmVy Iik7Ci0KLV9fZm9ydGlmeV9mdW5jdGlvbiBfX3d1ciBjaGFyICoKLWZnZXRz X3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSkKKworX19mb3J0aWZ5X3BvdGVudGlh bF9vdmVybG9hZCBfX3d1ciBjaGFyICoKK2ZnZXRzX3VubG9ja2VkIChjaGFy ICpfX3Jlc3RyaWN0IGNvbnN0IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZSBf X3MsIGludCBfX24sCisJCUZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCitf X0ZPUlRJRllfUFJFQ09ORElUSU9OUworICAgICBfX0ZPUlRJRllfV0FSTklO R19JRiAoX19mZ2V0c191bmxvY2tlZF93YXJuLAorCQkJICAgX19ib3Nfc3Rh dGljX2x0IChfX24sIF9fcykgJiYgX19uID4gMCwKKwkJCSAgICJmZ2V0c191 bmxvY2tlZCBjYWxsZWQgd2l0aCBiaWdnZXIgc2l6ZSB0aGFuIGxlbmd0aCAi CisJCQkgICAib2YgZGVzdGluYXRpb24gYnVmZmVyIikKIHsKICAgaWYgKF9f Ym9zIChfX3MpICE9IChzaXplX3QpIC0xKQotICAgIHsKLSAgICAgIGlmICgh X19idWlsdGluX2NvbnN0YW50X3AgKF9fbikgfHwgX19uIDw9IDApCi0JcmV0 dXJuIF9fZmdldHNfdW5sb2NrZWRfY2hrIChfX3MsIF9fYm9zIChfX3MpLCBf X24sIF9fc3RyZWFtKTsKLQotICAgICAgaWYgKChzaXplX3QpIF9fbiA+IF9f Ym9zIChfX3MpKQotCXJldHVybiBfX2ZnZXRzX3VubG9ja2VkX2Noa193YXJu IChfX3MsIF9fYm9zIChfX3MpLCBfX24sIF9fc3RyZWFtKTsKLSAgICB9Cisg ICAgcmV0dXJuIF9fZmdldHNfdW5sb2NrZWRfY2hrIChfX3MsIF9fYm9zIChf X3MpLCBfX24sIF9fc3RyZWFtKTsKICAgcmV0dXJuIF9fZmdldHNfdW5sb2Nr ZWRfYWxpYXMgKF9fcywgX19uLCBfX3N0cmVhbSk7CiB9CitfX0ZPUlRJRllf RlVOQ1RJT05fRU5ECiAjZW5kaWYKIAogI2lmZGVmIF9fVVNFX01JU0MKQEAg LTMzMCwzMCArMzczLDE5IEBAIGV4dGVybiBzaXplX3QgX19SRURJUkVDVCAo X19mcmVhZF91bmxvY2tlZF9hbGlhcywKIAkJCSAgKHZvaWQgKl9fcmVzdHJp Y3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAJCQkgICBzaXplX3QgX19uLCBG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSwKIAkJCSAgZnJlYWRfdW5sb2Nr ZWQpIF9fd3VyOwotZXh0ZXJuIHNpemVfdCBfX1JFRElSRUNUIChfX2ZyZWFk X3VubG9ja2VkX2Noa193YXJuLAotCQkJICAodm9pZCAqX19yZXN0cmljdCBf X3B0ciwgc2l6ZV90IF9fcHRybGVuLAotCQkJICAgc2l6ZV90IF9fc2l6ZSwg c2l6ZV90IF9fbiwKLQkJCSAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p LAotCQkJICBfX2ZyZWFkX3VubG9ja2VkX2NoaykKLSAgICAgX193dXIgX193 YXJuYXR0ciAoImZyZWFkX3VubG9ja2VkIGNhbGxlZCB3aXRoIGJpZ2dlciBz aXplICogbm1lbWIgdGhhbiAiCi0JCSAgICAgICAibGVuZ3RoIG9mIGRlc3Rp bmF0aW9uIGJ1ZmZlciIpOwogCi1fX2ZvcnRpZnlfZnVuY3Rpb24gX193dXIg c2l6ZV90Ci1mcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0 ciwgc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9fbiwKLQkJRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSkKK19fZm9ydGlmeV9wb3RlbnRpYWxfb3ZlcmxvYWQg X193dXIgc2l6ZV90CitmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmlj dCBjb25zdCBfX2NsYW5nX3Bhc3Nfb2JqZWN0X3NpemUwIF9fcHRyLAorCQlz aXplX3QgX19zaXplLCBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtKQorX19GT1JUSUZZX1BSRUNPTkRJVElPTlMKKyAgICAgX19GT1JU SUZZX1dBUk5JTkdfSUYgKF9fZnJlYWRfdW5sb2NrZWRfd2FybiwKKwkJCSAg IF9fYm9zMF9zdGF0aWNfbHQgKF9fc2l6ZSAqIF9fbiwgX19wdHIpCisJCQkg ICAgJiYgIV9fbXVsX21heV9vdmVyZmxvdyhfX3NpemUsIF9fbiksCisJCQkg ICAiZnJlYWRfdW5sb2NrZWQgY2FsbGVkIHdpdGggYmlnZ2VyIHNpemUgKiBu IHRoYW4gIgorCQkJICAgImxlbmd0aCBvZiBkZXN0aW5hdGlvbiBidWZmZXIi KQogewogICBpZiAoX19ib3MwIChfX3B0cikgIT0gKHNpemVfdCkgLTEpCi0g ICAgewotICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19zaXpl KQotCSAgfHwgIV9fYnVpbHRpbl9jb25zdGFudF9wIChfX24pCi0JICB8fCAo X19zaXplIHwgX19uKSA+PSAoKChzaXplX3QpIDEpIDw8ICg4ICogc2l6ZW9m IChzaXplX3QpIC8gMikpKQotCXJldHVybiBfX2ZyZWFkX3VubG9ja2VkX2No ayAoX19wdHIsIF9fYm9zMCAoX19wdHIpLCBfX3NpemUsIF9fbiwKLQkJCQkg ICAgIF9fc3RyZWFtKTsKLQotICAgICAgaWYgKF9fc2l6ZSAqIF9fbiA+IF9f Ym9zMCAoX19wdHIpKQotCXJldHVybiBfX2ZyZWFkX3VubG9ja2VkX2Noa193 YXJuIChfX3B0ciwgX19ib3MwIChfX3B0ciksIF9fc2l6ZSwgX19uLAotCQkJ CQkgIF9fc3RyZWFtKTsKLSAgICB9CisgICAgcmV0dXJuIF9fZnJlYWRfdW5s b2NrZWRfY2hrIChfX3B0ciwgX19ib3MwIChfX3B0ciksIF9fc2l6ZSwgX19u LCBfX3N0cmVhbSk7CiAKICMgaWZkZWYgX19VU0VfRVhURVJOX0lOTElORVMK ICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChfX3NpemUpCkBAIC0zNzgs NCArNDEwLDYgQEAgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3Qg X19wdHIsIHNpemVfdCBfX3NpemUsIHNpemVfdCBfX24sCiAjIGVuZGlmCiAg IHJldHVybiBfX2ZyZWFkX3VubG9ja2VkX2FsaWFzIChfX3B0ciwgX19zaXpl LCBfX24sIF9fc3RyZWFtKTsKIH0KK19fRk9SVElGWV9GVU5DVElPTl9FTkQK ICNlbmRpZgorI3VuZGVmIF9fbXVsX21heV9vdmVyZmxvdwpkaWZmIC0tZ2l0 IGEvbWlzYy9iaXRzL3N5c2xvZy5oIGIvbWlzYy9iaXRzL3N5c2xvZy5oCmlu ZGV4IDBiNmM5MTM1MTYuLjg2MThiZjFhNTYgMTAwNjQ0Ci0tLSBhL21pc2Mv Yml0cy9zeXNsb2cuaAorKysgYi9taXNjL2JpdHMvc3lzbG9nLmgKQEAgLTIw LDExICsyMCwzNCBAQAogIyBlcnJvciAiTmV2ZXIgaW5jbHVkZSA8Yml0cy9z eXNsb2cuaD4gZGlyZWN0bHk7IHVzZSA8c3lzL3N5c2xvZy5oPiBpbnN0ZWFk LiIKICNlbmRpZgogCisjaWZkZWYgX19VU0VfTUlTQworZXh0ZXJuIHZvaWQg X192c3lzbG9nX2NoayAoaW50IF9fcHJpLCBpbnQgX19mbGFnLCBjb25zdCBj aGFyICpfX2ZtdCwKKwkJCSAgIF9fZ251Y192YV9saXN0IF9fYXApCisgICAg IF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAw KSkpOworCitfX2ZvcnRpZnlfcG90ZW50aWFsX292ZXJsb2FkIHZvaWQKK3Zz eXNsb2cgKGludCBfX3ByaSwgY29uc3QgY2hhciAqY29uc3QgX19jbGFuZ19w YXNzX29iamVjdF9zaXplIF9fZm10LAorCSBfX2dudWNfdmFfbGlzdCBfX2Fw KQoreworICBfX3ZzeXNsb2dfY2hrIChfX3ByaSwgIF9fVVNFX0ZPUlRJRllf TEVWRUwgLSAxLCBfX2ZtdCwgX19hcCk7Cit9CisjZW5kaWYKIAogZXh0ZXJu IHZvaWQgX19zeXNsb2dfY2hrIChpbnQgX19wcmksIGludCBfX2ZsYWcsIGNv bnN0IGNoYXIgKl9fZm10LCAuLi4pCiAgICAgIF9fYXR0cmlidXRlX18gKChf X2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwogCi0jaWZkZWYgX192 YV9hcmdfcGFjaworI2lmIGRlZmluZWQgX191c2VfY2xhbmdfZm9ydGlmeSAm JiBfX1VTRV9NSVNDCisvKiBjbGFuZyBkb2Vzbid0IHN1cHBvcnQgX192YV9h cmdfcGFjaywgc28gdGhpcyBpcyBvbmx5IHBvc3NpYmxlIGlmIHdlIGhhdmUK KyAgIHZzeXNsb2cuICAqLworX19mb3J0aWZ5X292ZXJsb2FkIHZvaWQKK3N5 c2xvZyAoaW50IF9fcHJpLCBjb25zdCBjaGFyICpjb25zdCBfX2NsYW5nX3Bh c3Nfb2JqZWN0X3NpemUgX19mbXQsIC4uLikKK3sKKyAgX19nbnVjX3ZhX2xp c3QgX19hcDsKKyAgdmFfc3RhcnQgKF9fYXAsIF9fZm10KTsKKyAgX192c3lz bG9nX2NoayAoX19wcmksIF9fVVNFX0ZPUlRJRllfTEVWRUwgLSAxLCBfX2Zt dCwgX19hcCk7CisgIHZhX2VuZCAoX19hcCk7Cit9CisjZWxpZiBkZWZpbmVk IF9fdmFfYXJnX3BhY2sKIF9fZm9ydGlmeV9mdW5jdGlvbiB2b2lkCiBzeXNs b2cgKGludCBfX3ByaSwgY29uc3QgY2hhciAqX19mbXQsIC4uLikKIHsKQEAg LTM0LDE2ICs1NywzIEBAIHN5c2xvZyAoaW50IF9fcHJpLCBjb25zdCBjaGFy ICpfX2ZtdCwgLi4uKQogIyBkZWZpbmUgc3lzbG9nKHByaSwgLi4uKSBcCiAg IF9fc3lzbG9nX2NoayAocHJpLCBfX1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwg X19WQV9BUkdTX18pCiAjZW5kaWYKLQotCi0jaWZkZWYgX19VU0VfTUlTQwot ZXh0ZXJuIHZvaWQgX192c3lzbG9nX2NoayAoaW50IF9fcHJpLCBpbnQgX19m bGFnLCBjb25zdCBjaGFyICpfX2ZtdCwKLQkJCSAgIF9fZ251Y192YV9saXN0 IF9fYXApCi0gICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3By aW50Zl9fLCAzLCAwKSkpOwotCi1fX2ZvcnRpZnlfZnVuY3Rpb24gdm9pZAot dnN5c2xvZyAoaW50IF9fcHJpLCBjb25zdCBjaGFyICpfX2ZtdCwgX19nbnVj X3ZhX2xpc3QgX19hcCkKLXsKLSAgX192c3lzbG9nX2NoayAoX19wcmksICBf X1VTRV9GT1JUSUZZX0xFVkVMIC0gMSwgX19mbXQsIF9fYXApOwotfQotI2Vu ZGlmCmRpZmYgLS1naXQgYS9taXNjL3N5cy9jZGVmcy5oIGIvbWlzYy9zeXMv Y2RlZnMuaAppbmRleCBjZmQzOWQ1MzAyLi5lYjQ1ODM5MTEwIDEwMDY0NAot LS0gYS9taXNjL3N5cy9jZGVmcy5oCisrKyBiL21pc2Mvc3lzL2NkZWZzLmgK QEAgLTExMywxMSArMTEzLDE1MCBAQAogIyBkZWZpbmUgX19FTkRfREVDTFMK ICNlbmRpZgogCisjaWYgZGVmaW5lZCBfX2NsYW5nX18gJiYgZGVmaW5lZCBf X2hhc19leHRlbnNpb24KKyMgZGVmaW5lIF9fY2xhbmdfaGFzX2V4dGVuc2lv bih4KSBfX2hhc19leHRlbnNpb24gKHgpCisjZWxzZQorIyBkZWZpbmUgX19j bGFuZ19oYXNfZXh0ZW5zaW9uKHgpIDAKKyNlbmRpZgogCiAvKiBGb3J0aWZ5 IHN1cHBvcnQuICAqLwotI2RlZmluZSBfX2JvcyhwdHIpIF9fYnVpbHRpbl9v YmplY3Rfc2l6ZSAocHRyLCBfX1VTRV9GT1JUSUZZX0xFVkVMID4gMSkKKyNk ZWZpbmUgX19mb3J0aWZ5X2Z1bmN0aW9uIF9fZXh0ZXJuX2Fsd2F5c19pbmxp bmUgX19hdHRyaWJ1dGVfYXJ0aWZpY2lhbF9fCisjaWYgZGVmaW5lZCBfX2Ns YW5nX18gJiYgX19VU0VfRk9SVElGWV9MRVZFTCA+IDAgXAorICAgICYmICFk ZWZpbmVkIF9DTEFOR19GT1JUSUZZX0RJU0FCTEUgXAorICAgICYmIF9fY2xh bmdfaGFzX2V4dGVuc2lvbihvdmVybG9hZGFibGVfdW5tYXJrZWQpCisjIGRl ZmluZSBfX3VzZV9jbGFuZ19mb3J0aWZ5IDEKKy8qIENsYW5nLXN0eWxlIEZP UlRJRlkgY3JlYXRlcyBhIGRpZmZlcmVudCBzeW1ib2wgZm9yIGVhY2ggRk9S VElGWSdlZCBmdW5jdGlvbiwKKyAgIHdoZXJlYXMgR0NDLXN0eWxlIGRvZXNu J3QuICBUaHVzLCBHQ0MgY2FuIGFzc3VtZSB0aGF0IHRoZSBGT1JUSUZZJ2Vk CisgICBmdW5jdGlvbiBpcyBhbHdheXMgYXZhaWxhYmxlIGV4dGVybmFsbHks IGJ1dCBjbGFuZyBjYW4ndC4gICovCisjIGRlZmluZSBfX2F0dHJpYnV0ZV9v dmVybG9hZGFibGVfXyBfX2F0dHJpYnV0ZV9fICgoX19vdmVybG9hZGFibGVf XykpCisjIGRlZmluZSBfX2F0dHJpYnV0ZV90cmFuc3BhcmVudF9vdmVybG9h ZF9fIFwKKyAgX19hdHRyaWJ1dGVfXyAoKF9fb3ZlcmxvYWRhYmxlX18oInRy YW5zcGFyZW50IikpKQorIyBkZWZpbmUgX19mb3J0aWZ5X292ZXJsb2FkIHN0 YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19hdHRyaWJ1dGVfb3ZlcmxvYWRhYmxl X18KKy8qIEZvciBGT1JUSUZZIGZ1bmN0aW9ucyB0aGF0IGV4aXN0IG9ubHkg YXMgZGVjbHMuICAqLworIyBkZWZpbmUgX19mb3J0aWZ5X2Vycm9yX2Z1bmN0 aW9uIHN0YXRpYyBfX2F0dHJpYnV0ZV9vdmVybG9hZGFibGVfXworIyBkZWZp bmUgX19jbGFuZ19wYXNzX29iamVjdF9zaXplX24obikgX19hdHRyaWJ1dGVf XyAoKHBhc3Nfb2JqZWN0X3NpemUgKG4pKSkKKyMgZGVmaW5lIF9fY2xhbmdf d2FybmluZyh3aGF0KSBfX2F0dHJpYnV0ZV9fICgoZGVwcmVjYXRlZCh3aGF0 KSkpCisjIGRlZmluZSBfX2NsYW5nX3ByZWZlcl90aGlzX292ZXJsb2FkIF9f YXR0cmlidXRlX18gKChlbmFibGVfaWYgKDEsICIiKSkpCisjIGRlZmluZSBf X2NsYW5nX3dhcm5pbmdfaWYoYywgbSkgXAorICBfX2F0dHJpYnV0ZV9fICgo X19kaWFnbm9zZV9pZl9fICgoYyksIChtKSwgIndhcm5pbmciKSkpCisjIGRl ZmluZSBfX2NsYW5nX2Vycm9yKHdoYXQpIF9fYXR0cmlidXRlX18gKCh1bmF2 YWlsYWJsZSh3aGF0KSkpCisjIGRlZmluZSBfX2NsYW5nX2Vycm9yX2lmKGMs IG0pIFwKKyAgX19hdHRyaWJ1dGVfXyAoKF9fZGlhZ25vc2VfaWZfXyAoKGMp LCAobSksICJlcnJvciIpKSkKKyMgZGVmaW5lIF9fZm9ydGlmeV9wb3RlbnRp YWxfb3ZlcmxvYWQgX19mb3J0aWZ5X292ZXJsb2FkCisjZWxzZQorIyBkZWZp bmUgX19mb3J0aWZ5X3BvdGVudGlhbF9vdmVybG9hZCBfX2ZvcnRpZnlfZnVu Y3Rpb24KKy8qIFNvbWUgZnVuY3Rpb25zL2RlY2xzIGNhbiBiZSBzaGFyZWQg YmV0d2VlbiBjbGFuZyBhbmQgbm9uLWNsYW5nIEZPUlRJRlkuCisgICBUdXJu aW5nIHRoZXNlIGludG8gbm9wcyBtYWtlcyB0aGF0IHBvc3NpYmxlLiAgKi8K KyMgZGVmaW5lIF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZV9uKG4pCisjIGRl ZmluZSBfX2F0dHJpYnV0ZV9vdmVybG9hZGFibGVfXworIyBkZWZpbmUgX19i b3NfbihwdHIsIG4pIF9fYnVpbHRpbl9vYmplY3Rfc2l6ZSAocHRyLCBuKQor IyBkZWZpbmUgX19jbGFuZ193YXJuaW5nX2lmKGMsIG0pCisjIGRlZmluZSBf X2NsYW5nX2Vycm9yX2lmKGMsIG0pCisjZW5kaWYKKworI2RlZmluZSBfX2Jv c19sZXZlbCAoX19VU0VfRk9SVElGWV9MRVZFTCA+IDEpCisjZGVmaW5lIF9f Ym9zKHB0cikgX19idWlsdGluX29iamVjdF9zaXplIChwdHIsIF9fYm9zX2xl dmVsKQogI2RlZmluZSBfX2JvczAocHRyKSBfX2J1aWx0aW5fb2JqZWN0X3Np emUgKHB0ciwgMCkKIAorI2RlZmluZSBfX2NsYW5nX3Bhc3Nfb2JqZWN0X3Np emUwIF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZV9uICgwKQorI2RlZmluZSBf X2NsYW5nX3Bhc3Nfb2JqZWN0X3NpemUgX19jbGFuZ19wYXNzX29iamVjdF9z aXplX24gKF9fYm9zX2xldmVsKQorCisvKiBTb21lIG9mIHRoZXNlIG1hY3Jv cyBhcmUgYXdrd2FyZGx5IHdyaXR0ZW4sIGFuZCBtb3JlIHJlcGV0aXRpdmUg dGhhbiB0aGV5J2QKKyAgIGlkZWFsbHkgbmVlZCB0byBiZS4gIFRoaXMgaXMg YmVjYXVzZSBib3RoIGNsYW5nIGFuZCBnY2Mgd2lsbCBlbWl0ICdub3RlJ3MK KyAgIGFib3V0IHdoZXJlIHRoZXNlIHdhcm5pbmdzIG9yaWdpbmF0ZSBmcm9t LiBGb3IgZXZlcnkgbWFjcm8gdGhhdCdzIGV4cGFuZGVkLAorICAgdGhlIHVz ZXIgc2VlcyBhIG5vdGUgdGhhdCB1bHRpbWF0ZWx5IGRvZXNuJ3QgbWF0dGVy IHRvIHRoZW0uLi4gICovCisjaWZkZWYgX191c2VfY2xhbmdfZm9ydGlmeQor IyBkZWZpbmUgX19GT1JUSUZZX1BSRUNPTkRJVElPTlMKKyMgZGVmaW5lIF9f Rk9SVElGWV9GVU5DVElPTl9FTkQKKyMgZGVmaW5lIF9fRk9SVElGWV9XQVJO SU5HX0lGKF8sIGMsIG1zZykgX19jbGFuZ193YXJuaW5nX2lmKGMsIG1zZykK Ky8qIF9fYnVpbHRpbl9jb25zdGFudF9wIGlzbid0IG5lZWRlZDogdGhpcyBp cyBvbmx5IHVzZWQgaW4gY29uc3RydWN0cyB0aGF0CisgICBtdXN0IGJlIGZ1 bGx5IGV2YWx1YXRlZCBhdCBjb21waWxlLXRpbWUuICAqLworIyBkZWZpbmUg X19ib3Nfc3RhdGljX2x0X2ltcGwoYm9zX3ZhbCwgbiwgcykgXAorICAoKGJv c192YWwpICE9IC0xVUxMICYmIChuKSA+IChib3NfdmFsKSAvIChzKSkKKyMg ZGVmaW5lIF9fRk9SVElGWV9DQUxMX0NISyAxCisKKyMgZGVmaW5lIF9fRk9S VElGWV9CT1NOX0FSR1MoYm9zX2ZuLCBuLCBidWYsIGRpdiwgY29tcGxhaW50 KSBcCisgIChfX2Jvc19zdGF0aWNfbHRfaW1wbCAoYm9zX2ZuIChidWYpLCBu LCBkaXYpKSwgKGNvbXBsYWludCksICJ3YXJuaW5nIgorCisjZGVmaW5lIF9f Rk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9TMF9MVDIoZm5fbmFtZSwgbiwg YnVmLCBkaXYsIGNvbXBsYWludCkgXAorICBfX2F0dHJpYnV0ZV9fICgoX19k aWFnbm9zZV9pZl9fIFwKKwkoX19GT1JUSUZZX0JPU05fQVJHUyAoX19ib3Mw LCBuLCBidWYsIGRpdiwgY29tcGxhaW50KSkpKQorI2RlZmluZSBfX0ZPUlRJ RllfV0FSTklOR19PTkxZX0lGX0JPUzBfTFQoZm5fbmFtZSwgbiwgYnVmLCBj b21wbGFpbnQpIFwKKyAgX19hdHRyaWJ1dGVfXyAoKF9fZGlhZ25vc2VfaWZf XyBcCisJKF9fRk9SVElGWV9CT1NOX0FSR1MgKF9fYm9zMCwgbiwgYnVmLCAx LCBjb21wbGFpbnQpKSkpCisjZGVmaW5lIF9fRk9SVElGWV9XQVJOSU5HX09O TFlfSUZfQk9TX0xUMihmbl9uYW1lLCBuLCBidWYsIGRpdiwgY29tcGxhaW50 KSBcCisgIF9fYXR0cmlidXRlX18gKChfX2RpYWdub3NlX2lmX18gXAorCShf X0ZPUlRJRllfQk9TTl9BUkdTIChfX2JvcywgbiwgYnVmLCBkaXYsIGNvbXBs YWludCkpKSkKKyNkZWZpbmUgX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9C T1NfTFQoZm5fbmFtZSwgbiwgYnVmLCBjb21wbGFpbnQpIFwKKyAgX19hdHRy aWJ1dGVfXyAoKF9fZGlhZ25vc2VfaWZfXyBcCisJKF9fRk9SVElGWV9CT1NO X0FSR1MgKF9fYm9zLCBuLCBidWYsIDEsIGNvbXBsYWludCkpKSkKKyNlbHNl CisjIGRlZmluZSBfX0ZPUlRJRllfUFJFQ09ORElUSU9OUyB7CisjIGRlZmlu ZSBfX0ZPUlRJRllfRlVOQ1RJT05fRU5EIH0KKy8qIF9fY2hrX2ZhaWwgd2Fz IGNob3NlbiBhcmJpdHJhcmlseS4gVGhlIGZ1bmN0aW9uIHNob3VsZCBuZXZl ciBiZSBjYWxsZWQKKyAgIGFueXdheTsgaXQganVzdCBleGlzdHMgdG8gYmUg cmVhY2hhYmxlIGFmdGVyIG9wdGltaXphdGlvbnMuICAqLworIyBkZWZpbmUg X19GT1JUSUZZX0RFQ0xBUkVfV0FSTklOR19GVU5DVElPTihuYW1lLCBtc2cp IFwKKyAgX19hdHRyaWJ1dGUgKChfX3dhcm5pbmdfXyhtc2cpKSkgXAorICBl eHRlcm4gdm9pZCBfX1JFRElSRUNUX05USCAobmFtZSwgKHZvaWQpLCBfX2No a19mYWlsKQorCisjIGRlZmluZSBfX0ZPUlRJRllfV0FSTklOR19JRl9CRUdJ Tihmbl9uYW1lLCBjb25kLCBjb21wbGFpbnQsIGlmX2NvbmRfdHJ1ZSkgXAor ICB7IFwKKyAgICBpZiAoY29uZCkgeyBcCisgICAgICBpZl9jb25kX3RydWU7 IFwKKyAgICAgIF9fRk9SVElGWV9ERUNMQVJFX1dBUk5JTkdfRlVOQ1RJT04g KGZuX25hbWUsIGNvbXBsYWludCk7IFwKKyAgICAgIHZvbGF0aWxlIGNoYXIg X190ID0gMDsgXAorICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKF9fdCkp IFwKKyAgICAgIHsKKworIyBkZWZpbmUgX19GT1JUSUZZX1dBUk5JTkdfSUZf RU5EIFwKKyAgICAgIH0gXAorICAgIH0gXAorICB9CisKKyMgZGVmaW5lIF9f Rk9SVElGWV9XQVJOSU5HX0lGKGVycl9mbiwgY29uZCwgY29tcGxhaW50KSBc CisgIF9fRk9SVElGWV9XQVJOSU5HX0lGX0JFR0lOIChlcnJfZm4sIGNvbmQs IGNvbXBsYWludCwgKHZvaWQpMCkgXAorICAgIGVycl9mbiAoKTsgXAorICBf X0ZPUlRJRllfV0FSTklOR19JRl9FTkQKKworIyBkZWZpbmUgX19ib3Nfc3Rh dGljX2x0X2ltcGwoYm9zX3ZhbCwgbiwgcykgXAorICAoX19idWlsdGluX2Nv bnN0YW50X3AgKG4pICYmIChib3NfdmFsKSAhPSAtMVVMTCAmJiAobikgPiAo Ym9zX3ZhbCkgLyAocykpCisKKyNkZWZpbmUgX19GT1JUSUZZX0JPU19XQVJO SU5HX0JFR0lOKGZuX25hbWUsIGJvc19mbiwgbiwgYnVmLCBkaXYsIGNvbXBs YWludCkgXAorICBjaGFyIF9fbmVlZF9keW5hbWljX2NoZWNrID0gIV9fYnVp bHRpbl9jb25zdGFudF9wIChuKTsgXAorICBfX0ZPUlRJRllfV0FSTklOR19J Rl9CRUdJTiAoZm5fbmFtZSwgXAorCQkJICAgICAgX19ib3Nfc3RhdGljX2x0 X2ltcGwgKGJvc19mbiAoYnVmKSwgbiwgZGl2KSwgXAorCQkJICAgICAgY29t cGxhaW50LCAoX19uZWVkX2R5bmFtaWNfY2hlY2sgPSAxKSkKKworLyogRHVw bGljYXRlIHRoaXMgc28gdGhhdCB0aGUgZm5fbmFtZSBjYWxsIGhhcHBlbnMg d2l0aCB0aGUgc21hbGxlc3QgcG9zc2libGUKKyAgIG1hY3JvICJjYWxsIHN0 YWNrIi4gVGhpcyBtaW5pbWl6ZXMgZGlhZ25vc3RpY3MgYWJvdXQgZXhwYW5k aW5nIG1hY3Jvcy4gICovCisjZGVmaW5lIF9fRk9SVElGWV9XQVJOSU5HX09O TFlfSUZfQk9TMF9MVDIoZXJyX2ZuLCBuLCBidWYsIGRpdiwgY29tcGxhaW50 KSBcCisgIF9fRk9SVElGWV9CT1NfV0FSTklOR19CRUdJTiAoZXJyX2ZuLCBf X2JvczAsIG4sIGJ1ZiwgZGl2LCBjb21wbGFpbnQpIFwKKyAgICBlcnJfZm4g KCk7IFwKKyAgX19GT1JUSUZZX1dBUk5JTkdfSUZfRU5ECisKKyNkZWZpbmUg X19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1MwX0xUKGVycl9mbiwgbiwg YnVmLCBjb21wbGFpbnQpIFwKKyAgX19GT1JUSUZZX0JPU19XQVJOSU5HX0JF R0lOIChlcnJfZm4sIF9fYm9zMCwgbiwgYnVmLCAxLCBjb21wbGFpbnQpIFwK KyAgICBlcnJfZm4gKCk7IFwKKyAgX19GT1JUSUZZX1dBUk5JTkdfSUZfRU5E CisKKyNkZWZpbmUgX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1NfTFQy KGVycl9mbiwgbiwgYnVmLCBkaXYsIGNvbXBsYWludCkgXAorICBfX0ZPUlRJ RllfQk9TX1dBUk5JTkdfQkVHSU4gKGVycl9mbiwgX19ib3MsIG4sIGJ1Ziwg ZGl2LCBjb21wbGFpbnQpIFwKKyAgICBlcnJfZm4gKCk7IFwKKyAgX19GT1JU SUZZX1dBUk5JTkdfSUZfRU5ECisKKyNkZWZpbmUgX19GT1JUSUZZX1dBUk5J TkdfT05MWV9JRl9CT1NfTFQoZXJyX2ZuLCBuLCBidWYsIGNvbXBsYWludCkg XAorICBfX0ZPUlRJRllfQk9TX1dBUk5JTkdfQkVHSU4gKGVycl9mbiwgX19i b3MsIG4sIGJ1ZiwgMSwgY29tcGxhaW50KSBcCisgICAgZXJyX2ZuICgpOyBc CisgIF9fRk9SVElGWV9XQVJOSU5HX0lGX0VORAorCisjIGRlZmluZSBfX0ZP UlRJRllfQ0FMTF9DSEsgKF9fbmVlZF9keW5hbWljX2NoZWNrKQorI2VuZGlm CisKKyNkZWZpbmUgX19ib3Nfc3RhdGljX2x0MihuLCBlLCBzKSBfX2Jvc19z dGF0aWNfbHRfaW1wbCAoX19ib3MgKGUpLCBuLCBzKQorI2RlZmluZSBfX2Jv c19zdGF0aWNfbHQobiwgZSkgX19ib3Nfc3RhdGljX2x0MiAobiwgZSwgMSkK KyNkZWZpbmUgX19ib3MwX3N0YXRpY19sdDIobiwgZSwgcykgX19ib3Nfc3Rh dGljX2x0X2ltcGwgKF9fYm9zMCAoZSksIG4sIHMpCisjZGVmaW5lIF9fYm9z MF9zdGF0aWNfbHQobiwgZSkgX19ib3MwX3N0YXRpY19sdDIgKG4sIGUsIDEp CisKICNpZiBfX0dOVUNfUFJFUkVRICg0LDMpCiAjIGRlZmluZSBfX3dhcm5k ZWNsKG5hbWUsIG1zZykgXAogICBleHRlcm4gdm9pZCBuYW1lICh2b2lkKSBf X2F0dHJpYnV0ZV9fKChfX3dhcm5pbmdfXyAobXNnKSkpCkBAIC0zNTgsNiAr NDk3LDI5IEBACiAjIGRlZmluZSBfX3ZhX2FyZ19wYWNrX2xlbigpIF9fYnVp bHRpbl92YV9hcmdfcGFja19sZW4gKCkKICNlbmRpZgogCisjaWYgZGVmaW5l ZChfX3VzZV9jbGFuZ19mb3J0aWZ5KQorLyogY2xhbmcgZG9lc24ndCBzdXBw b3J0IF9fdmFfYXJnX3BhY2ssIHNvIHdlIG5lZWQgdG8gY2FsbCB0aGUgdiog dmVyc2lvbiBvZgorICAgRk9SVElGWSdlZCBmdW5jdGlvbnMuICAqLworI2Rl ZmluZSBfX0ZPUlRJRllfQVJHX1BBQ0sgX19mb3J0aWZ5X2FwCisjZGVmaW5l IF9fRk9SVElGWV9JTklUX0FSR19QQUNLKHZhX2FyZykgXAorICBfX2dudWNf dmFfbGlzdCBfX0ZPUlRJRllfQVJHX1BBQ0s7IFwKKyAgdmFfc3RhcnQgKF9f Rk9SVElGWV9BUkdfUEFDSywgdmFfYXJnKQorI2RlZmluZSBfX0ZPUlRJRllf Q0FMTF9WQV9BTElBUyhmbiwgLi4uKSBfX3YjI2ZuIyNfYWxpYXMgKF9fVkFf QVJHU19fKQorI2RlZmluZSBfX0ZPUlRJRllfQ0FMTF9WQV9DSEsoZm4sIC4u LikgX192IyNmbiMjX2NoayAoX19WQV9BUkdTX18pCisjZGVmaW5lIF9fRk9S VElGWV9DQUxMX1ZBX0JVSUxUSU4oZm4sIC4uLikgXAorICBfX2J1aWx0aW5f X192IyNmbiMjX2NoayAoX19WQV9BUkdTX18pCisjZGVmaW5lIF9fRk9SVElG WV9GUkVFX0FSR19QQUNLKCkgdmFfZW5kIChfX0ZPUlRJRllfQVJHX1BBQ0sp CisjZGVmaW5lIF9fRk9SVElGWV9BUkdfUEFDS19PSyAxCisjZWxpZiBkZWZp bmVkKF9fdmFfYXJnX3BhY2spCisjZGVmaW5lIF9fRk9SVElGWV9BUkdfUEFD SyBfX3ZhX2FyZ19wYWNrICgpCisjZGVmaW5lIF9fRk9SVElGWV9JTklUX0FS R19QQUNLKHZhX2FyZykKKyNkZWZpbmUgX19GT1JUSUZZX0NBTExfVkFfQUxJ QVMoZm4sIC4uLikgX18jI2ZuIyNfYWxpYXMgKF9fVkFfQVJHU19fKQorI2Rl ZmluZSBfX0ZPUlRJRllfQ0FMTF9WQV9DSEsoZm4sIC4uLikgX18jI2ZuIyNf Y2hrIChfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX19GT1JUSUZZX0NBTExfVkFf QlVJTFRJTihmbiwgLi4uKSBfX2J1aWx0aW5fX18jI2ZuIyNfY2hrIChfX1ZB X0FSR1NfXykKKyNkZWZpbmUgX19GT1JUSUZZX0ZSRUVfQVJHX1BBQ0soKQor I2RlZmluZSBfX0ZPUlRJRllfQVJHX1BBQ0tfT0sgMQorI2VuZGlmCisKIC8q IEl0IGlzIHBvc3NpYmxlIHRvIGNvbXBpbGUgY29udGFpbmluZyBHQ0MgZXh0 ZW5zaW9ucyBldmVuIGlmIEdDQyBpcwogICAgcnVuIGluIHBlZGFudGljIG1v ZGUgaWYgdGhlIHVzZXMgYXJlIGNhcmVmdWxseSBtYXJrZWQgdXNpbmcgdGhl CiAgICBgX19leHRlbnNpb25fXycga2V5d29yZC4gIEJ1dCB0aGlzIGlzIG5v dCBnZW5lcmFsbHkgYXZhaWxhYmxlIGJlZm9yZQpkaWZmIC0tZ2l0IGEvcG9z aXgvYml0cy91bmlzdGQuaCBiL3Bvc2l4L2JpdHMvdW5pc3RkLmgKaW5kZXgg NGU0MTUzYzk0Zi4uM2JkNGM4ZGU3NSAxMDA2NDQKLS0tIGEvcG9zaXgvYml0 cy91bmlzdGQuaAorKysgYi9wb3NpeC9iaXRzL3VuaXN0ZC5oCkBAIC0yNCwy NSArMjQsMTkgQEAgZXh0ZXJuIHNzaXplX3QgX19yZWFkX2NoayAoaW50IF9f ZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCiAJCQkgICBzaXpl X3QgX19idWZsZW4pIF9fd3VyOwogZXh0ZXJuIHNzaXplX3QgX19SRURJUkVD VCAoX19yZWFkX2FsaWFzLCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLAogCQkJ CQkgIHNpemVfdCBfX25ieXRlcyksIHJlYWQpIF9fd3VyOwotZXh0ZXJuIHNz aXplX3QgX19SRURJUkVDVCAoX19yZWFkX2Noa193YXJuLAotCQkJICAgKGlu dCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLAotCQkJICAg IHNpemVfdCBfX2J1ZmxlbiksIF9fcmVhZF9jaGspCi0gICAgIF9fd3VyIF9f d2FybmF0dHIgKCJyZWFkIGNhbGxlZCB3aXRoIGJpZ2dlciBsZW5ndGggdGhh biBzaXplIG9mICIKLQkJICAgICAgICJ0aGUgZGVzdGluYXRpb24gYnVmZmVy Iik7CiAKLV9fZm9ydGlmeV9mdW5jdGlvbiBfX3d1ciBzc2l6ZV90Ci1yZWFk IChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcykKK19f Zm9ydGlmeV9wb3RlbnRpYWxfb3ZlcmxvYWQgX193dXIgc3NpemVfdAorcmVh ZCAoaW50IF9fZmQsIHZvaWQgKmNvbnN0IF9fY2xhbmdfcGFzc19vYmplY3Rf c2l6ZTAgX19idWYsIHNpemVfdCBfX25ieXRlcykKK19fRk9SVElGWV9QUkVD T05ESVRJT05TCisgICAgIF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9T MF9MVCAoX19yZWFkX3dhcm4sIF9fbmJ5dGVzLCBfX2J1ZiwKKwkJCQkJInJl YWQgY2FsbGVkIHdpdGggYmlnZ2VyIGxlbmd0aCB0aGFuICIKKwkJCQkJInNp emUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciIpCiB7Ci0gIGlmIChfX2Jv czAgKF9fYnVmKSAhPSAoc2l6ZV90KSAtMSkKLSAgICB7Ci0gICAgICBpZiAo IV9fYnVpbHRpbl9jb25zdGFudF9wIChfX25ieXRlcykpCi0JcmV0dXJuIF9f cmVhZF9jaGsgKF9fZmQsIF9fYnVmLCBfX25ieXRlcywgX19ib3MwIChfX2J1 ZikpOwotCi0gICAgICBpZiAoX19uYnl0ZXMgPiBfX2JvczAgKF9fYnVmKSkK LQlyZXR1cm4gX19yZWFkX2Noa193YXJuIChfX2ZkLCBfX2J1ZiwgX19uYnl0 ZXMsIF9fYm9zMCAoX19idWYpKTsKLSAgICB9CisgIGlmIChfX0ZPUlRJRllf Q0FMTF9DSEsgJiYgX19ib3MwIChfX2J1ZikgIT0gKHNpemVfdCkgLTEpCisg ICAgcmV0dXJuIF9fcmVhZF9jaGsgKF9fZmQsIF9fYnVmLCBfX25ieXRlcywg X19ib3MwIChfX2J1ZikpOwogICByZXR1cm4gX19yZWFkX2FsaWFzIChfX2Zk LCBfX2J1ZiwgX19uYnl0ZXMpOwogfQorX19GT1JUSUZZX0ZVTkNUSU9OX0VO RAogCiAjaWZkZWYgX19VU0VfVU5JWDk4CiBleHRlcm4gc3NpemVfdCBfX3By ZWFkX2NoayAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0 ZXMsCkBAIC01NSw2NyArNDksNDkgQEAgZXh0ZXJuIHNzaXplX3QgX19SRURJ UkVDVCAoX19wcmVhZF9hbGlhcywKIGV4dGVybiBzc2l6ZV90IF9fUkVESVJF Q1QgKF9fcHJlYWQ2NF9hbGlhcywKIAkJCSAgIChpbnQgX19mZCwgdm9pZCAq X19idWYsIHNpemVfdCBfX25ieXRlcywKIAkJCSAgICBfX29mZjY0X3QgX19v ZmZzZXQpLCBwcmVhZDY0KSBfX3d1cjsKLWV4dGVybiBzc2l6ZV90IF9fUkVE SVJFQ1QgKF9fcHJlYWRfY2hrX3dhcm4sCi0JCQkgICAoaW50IF9fZmQsIHZv aWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCi0JCQkgICAgX19vZmZfdCBf X29mZnNldCwgc2l6ZV90IF9fYnVmc2l6ZSksIF9fcHJlYWRfY2hrKQotICAg ICBfX3d1ciBfX3dhcm5hdHRyICgicHJlYWQgY2FsbGVkIHdpdGggYmlnZ2Vy IGxlbmd0aCB0aGFuIHNpemUgb2YgIgotCQkgICAgICAgInRoZSBkZXN0aW5h dGlvbiBidWZmZXIiKTsKLWV4dGVybiBzc2l6ZV90IF9fUkVESVJFQ1QgKF9f cHJlYWQ2NF9jaGtfd2FybiwKLQkJCSAgIChpbnQgX19mZCwgdm9pZCAqX19i dWYsIHNpemVfdCBfX25ieXRlcywKLQkJCSAgICBfX29mZjY0X3QgX19vZmZz ZXQsIHNpemVfdCBfX2J1ZnNpemUpLAotCQkJICAgIF9fcHJlYWQ2NF9jaGsp Ci0gICAgIF9fd3VyIF9fd2FybmF0dHIgKCJwcmVhZDY0IGNhbGxlZCB3aXRo IGJpZ2dlciBsZW5ndGggdGhhbiBzaXplIG9mICIKLQkJICAgICAgICJ0aGUg ZGVzdGluYXRpb24gYnVmZmVyIik7CiAKICMgaWZuZGVmIF9fVVNFX0ZJTEVf T0ZGU0VUNjQKLV9fZm9ydGlmeV9mdW5jdGlvbiBfX3d1ciBzc2l6ZV90Ci1w cmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMs IF9fb2ZmX3QgX19vZmZzZXQpCi17Ci0gIGlmIChfX2JvczAgKF9fYnVmKSAh PSAoc2l6ZV90KSAtMSkKLSAgICB7Ci0gICAgICBpZiAoIV9fYnVpbHRpbl9j b25zdGFudF9wIChfX25ieXRlcykpCi0JcmV0dXJuIF9fcHJlYWRfY2hrIChf X2ZkLCBfX2J1ZiwgX19uYnl0ZXMsIF9fb2Zmc2V0LCBfX2JvczAgKF9fYnVm KSk7Ci0KLSAgICAgIGlmICggX19uYnl0ZXMgPiBfX2JvczAgKF9fYnVmKSkK LQlyZXR1cm4gX19wcmVhZF9jaGtfd2FybiAoX19mZCwgX19idWYsIF9fbmJ5 dGVzLCBfX29mZnNldCwKLQkJCQkgX19ib3MwIChfX2J1ZikpOwotICAgIH0K LSAgcmV0dXJuIF9fcHJlYWRfYWxpYXMgKF9fZmQsIF9fYnVmLCBfX25ieXRl cywgX19vZmZzZXQpOwotfQorIyAgZGVmaW5lIF9fZm9fcHJlYWRfY2hrIF9f cHJlYWRfY2hrCisjICBkZWZpbmUgX19mb19wcmVhZF9hbGlhcyBfX3ByZWFk X2FsaWFzCisjICBkZWZpbmUgX19mb19vZmZfdCBfX29mZl90CiAjIGVsc2UK LV9fZm9ydGlmeV9mdW5jdGlvbiBfX3d1ciBzc2l6ZV90Ci1wcmVhZCAoaW50 IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIF9fb2ZmNjRf dCBfX29mZnNldCkKLXsKLSAgaWYgKF9fYm9zMCAoX19idWYpICE9IChzaXpl X3QpIC0xKQotICAgIHsKLSAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50 X3AgKF9fbmJ5dGVzKSkKLQlyZXR1cm4gX19wcmVhZDY0X2NoayAoX19mZCwg X19idWYsIF9fbmJ5dGVzLCBfX29mZnNldCwgX19ib3MwIChfX2J1ZikpOwot Ci0gICAgICBpZiAoIF9fbmJ5dGVzID4gX19ib3MwIChfX2J1ZikpCi0JcmV0 dXJuIF9fcHJlYWQ2NF9jaGtfd2FybiAoX19mZCwgX19idWYsIF9fbmJ5dGVz LCBfX29mZnNldCwKLQkJCQkgICBfX2JvczAgKF9fYnVmKSk7Ci0gICAgfQot Ci0gIHJldHVybiBfX3ByZWFkNjRfYWxpYXMgKF9fZmQsIF9fYnVmLCBfX25i eXRlcywgX19vZmZzZXQpOwotfQorIyAgZGVmaW5lIF9fZm9fcHJlYWRfY2hr IF9fcHJlYWQ2NF9jaGsKKyMgIGRlZmluZSBfX2ZvX3ByZWFkX2FsaWFzIF9f cHJlYWQ2NF9hbGlhcworIyAgZGVmaW5lIF9fZm9fb2ZmX3QgX19vZmY2NF90 CiAjIGVuZGlmCiAKLSMgaWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKLV9fZm9y dGlmeV9mdW5jdGlvbiBfX3d1ciBzc2l6ZV90Ci1wcmVhZDY0IChpbnQgX19m ZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywgX19vZmY2NF90IF9f b2Zmc2V0KQorX19mb3J0aWZ5X3BvdGVudGlhbF9vdmVybG9hZCBfX3d1ciBz c2l6ZV90CitwcmVhZCAoaW50IF9fZmQsIHZvaWQgKmNvbnN0IF9fY2xhbmdf cGFzc19vYmplY3Rfc2l6ZTAgX19idWYsIHNpemVfdCBfX25ieXRlcywKKyAg ICAgICBfX2ZvX29mZl90IF9fb2Zmc2V0KQorX19GT1JUSUZZX1BSRUNPTkRJ VElPTlMKKyAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1MwX0xU IChfX3ByZWFkX2Noa193YXJuLCBfX25ieXRlcywgX19idWYsCisJCQkJCSJw cmVhZCBjYWxsZWQgd2l0aCBiaWdnZXIgbGVuZ3RoIHRoYW4gIgorCQkJCQki c2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIikKIHsKLSAgaWYgKF9f Ym9zMCAoX19idWYpICE9IChzaXplX3QpIC0xKQotICAgIHsKLSAgICAgIGlm ICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fbmJ5dGVzKSkKLQlyZXR1cm4g X19wcmVhZDY0X2NoayAoX19mZCwgX19idWYsIF9fbmJ5dGVzLCBfX29mZnNl dCwgX19ib3MwIChfX2J1ZikpOworICBpZiAoX19GT1JUSUZZX0NBTExfQ0hL ICYmIF9fYm9zMCAoX19idWYpICE9IChzaXplX3QpIC0xKQorICAgIHJldHVy biBfX2ZvX3ByZWFkX2NoayAoX19mZCwgX19idWYsIF9fbmJ5dGVzLCBfX29m ZnNldCwgX19ib3MwIChfX2J1ZikpOworICByZXR1cm4gX19mb19wcmVhZF9h bGlhcyAoX19mZCwgX19idWYsIF9fbmJ5dGVzLCBfX29mZnNldCk7Cit9Citf X0ZPUlRJRllfRlVOQ1RJT05fRU5ECiAKLSAgICAgIGlmICggX19uYnl0ZXMg PiBfX2JvczAgKF9fYnVmKSkKLQlyZXR1cm4gX19wcmVhZDY0X2Noa193YXJu IChfX2ZkLCBfX2J1ZiwgX19uYnl0ZXMsIF9fb2Zmc2V0LAotCQkJCSAgIF9f Ym9zMCAoX19idWYpKTsKLSAgICB9CisjdW5kZWYgX19mb19wcmVhZF9jaGsK KyN1bmRlZiBfX2ZvX3ByZWFkX2FsaWFzCisjdW5kZWYgX19mb19vZmZfdAog CisjIGlmZGVmIF9fVVNFX0xBUkdFRklMRTY0CitfX2ZvcnRpZnlfcG90ZW50 aWFsX292ZXJsb2FkIF9fd3VyIHNzaXplX3QKK3ByZWFkNjQgKGludCBfX2Zk LCB2b2lkICpjb25zdCBfX2NsYW5nX3Bhc3Nfb2JqZWN0X3NpemUwIF9fYnVm LAorCSAgc2l6ZV90IF9fbmJ5dGVzLCBfX29mZjY0X3QgX19vZmZzZXQpCitf X0ZPUlRJRllfUFJFQ09ORElUSU9OUworICAgICBfX0ZPUlRJRllfV0FSTklO R19PTkxZX0lGX0JPUzBfTFQgKF9fcHJlYWQ2NF93YXJuLCBfX25ieXRlcywg X19idWYsCisJCQkJCSJwcmVhZDY0IGNhbGxlZCB3aXRoIGJpZ2dlciBsZW5n dGggIgorCQkJCQkidGhhbiBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZm ZXIiKQoreworICBpZiAoX19GT1JUSUZZX0NBTExfQ0hLICYmIF9fYm9zMCAo X19idWYpICE9IChzaXplX3QpIC0xKQorICAgIHJldHVybiBfX3ByZWFkNjRf Y2hrIChfX2ZkLCBfX2J1ZiwgX19uYnl0ZXMsIF9fb2Zmc2V0LCBfX2JvczAg KF9fYnVmKSk7CiAgIHJldHVybiBfX3ByZWFkNjRfYWxpYXMgKF9fZmQsIF9f YnVmLCBfX25ieXRlcywgX19vZmZzZXQpOwogfQorX19GT1JUSUZZX0ZVTkNU SU9OX0VORAogIyBlbmRpZgogI2VuZGlmCiAKQEAgLTEyOCwyNyArMTA0LDIx IEBAIGV4dGVybiBzc2l6ZV90IF9fUkVESVJFQ1RfTlRIIChfX3JlYWRsaW5r X2FsaWFzLAogCQkJICAgICAgIChjb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f cGF0aCwKIAkJCQljaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19s ZW4pLCByZWFkbGluaykKICAgICAgX19ub25udWxsICgoMSwgMikpIF9fd3Vy OwotZXh0ZXJuIHNzaXplX3QgX19SRURJUkVDVF9OVEggKF9fcmVhZGxpbmtf Y2hrX3dhcm4sCi0JCQkgICAgICAgKGNvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19wYXRoLAotCQkJCWNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBf X2xlbiwKLQkJCQlzaXplX3QgX19idWZsZW4pLCBfX3JlYWRsaW5rX2NoaykK LSAgICAgX19ub25udWxsICgoMSwgMikpIF9fd3VyIF9fd2FybmF0dHIgKCJy ZWFkbGluayBjYWxsZWQgd2l0aCBiaWdnZXIgbGVuZ3RoICIKLQkJCQkJICAi dGhhbiBzaXplIG9mIGRlc3RpbmF0aW9uIGJ1ZmZlciIpOwogCi1fX2ZvcnRp ZnlfZnVuY3Rpb24gX19ub25udWxsICgoMSwgMikpIF9fd3VyIHNzaXplX3QK LV9fTlRIIChyZWFkbGluayAoY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Bh dGgsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCitfX2ZvcnRpZnlfcG90ZW50 aWFsX292ZXJsb2FkIF9fbm9ubnVsbCAoKDEsIDIpKSBfX3d1ciBzc2l6ZV90 CitfX05USCAocmVhZGxpbmsgKGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19w YXRoLAorCQkgY2hhciAqX19yZXN0cmljdCBjb25zdCBfX2NsYW5nX3Bhc3Nf b2JqZWN0X3NpemUgX19idWYsCiAJCSBzaXplX3QgX19sZW4pKQorX19GT1JU SUZZX1BSRUNPTkRJVElPTlMKKyAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05M WV9JRl9CT1NfTFQgKF9fcmVhZGxpbmtfd2FybiwgX19sZW4sIF9fYnVmLAor CQkJCSAgICAgICAicmVhZGxpbmsgY2FsbGVkIHdpdGggYmlnZ2VyIGxlbmd0 aCAiCisJCQkJICAgICAgICJ0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gYnVm ZmVyIikKIHsKLSAgaWYgKF9fYm9zIChfX2J1ZikgIT0gKHNpemVfdCkgLTEp Ci0gICAgewotICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19s ZW4pKQotCXJldHVybiBfX3JlYWRsaW5rX2NoayAoX19wYXRoLCBfX2J1Ziwg X19sZW4sIF9fYm9zIChfX2J1ZikpOwotCi0gICAgICBpZiAoIF9fbGVuID4g X19ib3MgKF9fYnVmKSkKLQlyZXR1cm4gX19yZWFkbGlua19jaGtfd2FybiAo X19wYXRoLCBfX2J1ZiwgX19sZW4sIF9fYm9zIChfX2J1ZikpOwotICAgIH0K KyAgaWYgKF9fRk9SVElGWV9DQUxMX0NISyAmJiBfX2JvcyAoX19idWYpICE9 IChzaXplX3QpIC0xKQorICAgIHJldHVybiBfX3JlYWRsaW5rX2NoayAoX19w YXRoLCBfX2J1ZiwgX19sZW4sIF9fYm9zIChfX2J1ZikpOwogICByZXR1cm4g X19yZWFkbGlua19hbGlhcyAoX19wYXRoLCBfX2J1ZiwgX19sZW4pOwogfQor X19GT1JUSUZZX0ZVTkNUSU9OX0VORAogI2VuZGlmCiAKICNpZmRlZiBfX1VT RV9BVEZJTEUKQEAgLTE2MSwxMTkgKzEzMSwxMDQgQEAgZXh0ZXJuIHNzaXpl X3QgX19SRURJUkVDVF9OVEggKF9fcmVhZGxpbmthdF9hbGlhcywKIAkJCQlj aGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pLAogCQkJICAg ICAgIHJlYWRsaW5rYXQpCiAgICAgIF9fbm9ubnVsbCAoKDIsIDMpKSBfX3d1 cjsKLWV4dGVybiBzc2l6ZV90IF9fUkVESVJFQ1RfTlRIIChfX3JlYWRsaW5r YXRfY2hrX3dhcm4sCi0JCQkgICAgICAgKGludCBfX2ZkLCBjb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fcGF0aCwKLQkJCQljaGFyICpfX3Jlc3RyaWN0IF9f YnVmLCBzaXplX3QgX19sZW4sCi0JCQkJc2l6ZV90IF9fYnVmbGVuKSwgX19y ZWFkbGlua2F0X2NoaykKLSAgICAgX19ub25udWxsICgoMiwgMykpIF9fd3Vy IF9fd2FybmF0dHIgKCJyZWFkbGlua2F0IGNhbGxlZCB3aXRoIGJpZ2dlciAi Ci0JCQkJCSAgImxlbmd0aCB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gIgot CQkJCQkgICJidWZmZXIiKTsKLQotX19mb3J0aWZ5X2Z1bmN0aW9uIF9fbm9u bnVsbCAoKDIsIDMpKSBfX3d1ciBzc2l6ZV90Ci1fX05USCAocmVhZGxpbmth dCAoaW50IF9fZmQsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXRoLAot CQkgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pKQor CitfX2ZvcnRpZnlfcG90ZW50aWFsX292ZXJsb2FkIF9fbm9ubnVsbCAoKDIs IDMpKSBfX3d1ciBzc2l6ZV90CitfX05USCAocmVhZGxpbmthdCAoaW50IF9f ZmQsCisJCSAgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXRoLAorCQkg ICBjaGFyICpfX3Jlc3RyaWN0IGNvbnN0IF9fY2xhbmdfcGFzc19vYmplY3Rf c2l6ZSBfX2J1ZiwKKwkJICAgc2l6ZV90IF9fbGVuKSkKK19fRk9SVElGWV9Q UkVDT05ESVRJT05TCisgICAgIF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZf Qk9TX0xUIChfX3JlYWRsaW5rYXRfd2FybiwgX19sZW4sIF9fYnVmLAorCQkJ CSAgICAgICAicmVhZGxpbmthdCBjYWxsZWQgd2l0aCBiaWdnZXIgbGVuZ3Ro ICIKKwkJCQkgICAgICAgInRoYW4gc2l6ZSBvZiBkZXN0aW5hdGlvbiBidWZm ZXIiKQogewotICBpZiAoX19ib3MgKF9fYnVmKSAhPSAoc2l6ZV90KSAtMSkK LSAgICB7Ci0gICAgICBpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wIChfX2xl bikpCi0JcmV0dXJuIF9fcmVhZGxpbmthdF9jaGsgKF9fZmQsIF9fcGF0aCwg X19idWYsIF9fbGVuLCBfX2JvcyAoX19idWYpKTsKLQotICAgICAgaWYgKF9f bGVuID4gX19ib3MgKF9fYnVmKSkKLQlyZXR1cm4gX19yZWFkbGlua2F0X2No a193YXJuIChfX2ZkLCBfX3BhdGgsIF9fYnVmLCBfX2xlbiwKLQkJCQkgICAg ICBfX2JvcyAoX19idWYpKTsKLSAgICB9CisgIGlmIChfX0ZPUlRJRllfQ0FM TF9DSEsgJiYgX19ib3MgKF9fYnVmKSAhPSAoc2l6ZV90KSAtMSkKKyAgICBy ZXR1cm4gX19yZWFkbGlua2F0X2NoayAoX19mZCwgX19wYXRoLCBfX2J1Ziwg X19sZW4sIF9fYm9zIChfX2J1ZikpOwogICByZXR1cm4gX19yZWFkbGlua2F0 X2FsaWFzIChfX2ZkLCBfX3BhdGgsIF9fYnVmLCBfX2xlbik7CiB9CitfX0ZP UlRJRllfRlVOQ1RJT05fRU5ECiAjZW5kaWYKIAogZXh0ZXJuIGNoYXIgKl9f Z2V0Y3dkX2NoayAoY2hhciAqX19idWYsIHNpemVfdCBfX3NpemUsIHNpemVf dCBfX2J1ZmxlbikKICAgICAgX19USFJPVyBfX3d1cjsKIGV4dGVybiBjaGFy ICpfX1JFRElSRUNUX05USCAoX19nZXRjd2RfYWxpYXMsCiAJCQkgICAgIChj aGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSksIGdldGN3ZCkgX193dXI7Ci1l eHRlcm4gY2hhciAqX19SRURJUkVDVF9OVEggKF9fZ2V0Y3dkX2Noa193YXJu LAotCQkJICAgICAoY2hhciAqX19idWYsIHNpemVfdCBfX3NpemUsIHNpemVf dCBfX2J1ZmxlbiksCi0JCQkgICAgIF9fZ2V0Y3dkX2NoaykKLSAgICAgX193 dXIgX193YXJuYXR0ciAoImdldGN3ZCBjYWxsZXIgd2l0aCBiaWdnZXIgbGVu Z3RoIHRoYW4gc2l6ZSBvZiAiCi0JCSAgICAgICAiZGVzdGluYXRpb24gYnVm ZmVyIik7Ci0KLV9fZm9ydGlmeV9mdW5jdGlvbiBfX3d1ciBjaGFyICoKLV9f TlRIIChnZXRjd2QgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19zaXplKSkKLXsK LSAgaWYgKF9fYm9zIChfX2J1ZikgIT0gKHNpemVfdCkgLTEpCi0gICAgewot ICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19zaXplKSkKLQly ZXR1cm4gX19nZXRjd2RfY2hrIChfX2J1ZiwgX19zaXplLCBfX2JvcyAoX19i dWYpKTsKIAotICAgICAgaWYgKF9fc2l6ZSA+IF9fYm9zIChfX2J1ZikpCi0J cmV0dXJuIF9fZ2V0Y3dkX2Noa193YXJuIChfX2J1ZiwgX19zaXplLCBfX2Jv cyAoX19idWYpKTsKLSAgICB9CitfX2ZvcnRpZnlfcG90ZW50aWFsX292ZXJs b2FkIF9fd3VyIGNoYXIgKgorX19OVEggKGdldGN3ZCAoY2hhciAqY29uc3Qg X19jbGFuZ19wYXNzX29iamVjdF9zaXplIF9fYnVmLCBzaXplX3QgX19zaXpl KSkKK19fRk9SVElGWV9QUkVDT05ESVRJT05TCisgICAgIF9fRk9SVElGWV9X QVJOSU5HX09OTFlfSUZfQk9TX0xUIChfX2dldGN3ZF93YXJuLCBfX3NpemUs IF9fYnVmLAorCQkJCSAgICAgICAiZ2V0Y3dkIGNhbGxlZCB3aXRoIGJpZ2dl ciBsZW5ndGggdGhhbiAiCisJCQkJICAgICAgICJzaXplIG9mIGRlc3RpbmF0 aW9uIGJ1ZmZlciIpCit7CisgIGlmIChfX0ZPUlRJRllfQ0FMTF9DSEsgJiYg X19ib3MgKF9fYnVmKSAhPSAoc2l6ZV90KSAtMSkKKyAgICByZXR1cm4gX19n ZXRjd2RfY2hrIChfX2J1ZiwgX19zaXplLCBfX2JvcyAoX19idWYpKTsKICAg cmV0dXJuIF9fZ2V0Y3dkX2FsaWFzIChfX2J1ZiwgX19zaXplKTsKIH0KK19f Rk9SVElGWV9GVU5DVElPTl9FTkQKIAogI2lmIGRlZmluZWQgX19VU0VfTUlT QyB8fCBkZWZpbmVkIF9fVVNFX1hPUEVOX0VYVEVOREVECisjIGRlZmluZSBf X3dhcm5fZ2V0d2RfdXNlX3NvbWV0aGluZ19lbHNlIFwKKyAgInBsZWFzZSB1 c2UgZ2V0Y3dkIGluc3RlYWQsIGFzIGdldHdkIGRvZXNuJ3Qgc3BlY2lmeSBi dWZmZXIgc2l6ZSIKKwogZXh0ZXJuIGNoYXIgKl9fZ2V0d2RfY2hrIChjaGFy ICpfX2J1Ziwgc2l6ZV90IGJ1ZmxlbikKICAgICAgX19USFJPVyBfX25vbm51 bGwgKCgxKSkgX193dXI7CiBleHRlcm4gY2hhciAqX19SRURJUkVDVF9OVEgg KF9fZ2V0d2Rfd2FybiwgKGNoYXIgKl9fYnVmKSwgZ2V0d2QpCi0gICAgIF9f bm9ubnVsbCAoKDEpKSBfX3d1ciBfX3dhcm5hdHRyICgicGxlYXNlIHVzZSBn ZXRjd2QgaW5zdGVhZCwgYXMgZ2V0d2QgIgotCQkJCSAgICAgICAiZG9lc24n dCBzcGVjaWZ5IGJ1ZmZlciBzaXplIik7CisgICAgIF9fbm9ubnVsbCAoKDEp KSBfX3d1ciBfX3dhcm5hdHRyIChfX3dhcm5fZ2V0d2RfdXNlX3NvbWV0aGlu Z19lbHNlKTsKIAotX19mb3J0aWZ5X2Z1bmN0aW9uIF9fbm9ubnVsbCAoKDEp KSBfX2F0dHJpYnV0ZV9kZXByZWNhdGVkX18gX193dXIgY2hhciAqCi1fX05U SCAoZ2V0d2QgKGNoYXIgKl9fYnVmKSkKK2V4dGVybiBjaGFyICpfX1JFRElS RUNUIChfX2dldHdkX2FsaWFzLCAoY2hhciAqX19zdHIpLCBnZXR3ZCkgX193 dXI7CisKK19fZm9ydGlmeV9wb3RlbnRpYWxfb3ZlcmxvYWQgX19ub25udWxs ICgoMSkpIF9fYXR0cmlidXRlX2RlcHJlY2F0ZWRfXyBfX3d1cgorY2hhciAq CitfX05USCAoZ2V0d2QgKGNoYXIgKmNvbnN0IF9fY2xhbmdfcGFzc19vYmpl Y3Rfc2l6ZSBfX2J1ZikpCisgICAgIF9fY2xhbmdfd2FybmluZ19pZiAoX19i b3MgKF9fYnVmKSA9PSAoc2l6ZV90KSAtMSwKKwkJCSBfX3dhcm5fZ2V0d2Rf dXNlX3NvbWV0aGluZ19lbHNlKQogewogICBpZiAoX19ib3MgKF9fYnVmKSAh PSAoc2l6ZV90KSAtMSkKICAgICByZXR1cm4gX19nZXR3ZF9jaGsgKF9fYnVm LCBfX2JvcyAoX19idWYpKTsKICAgcmV0dXJuIF9fZ2V0d2Rfd2FybiAoX19i dWYpOwogfQorIyB1bmRlZiBfX3dhcm5fZ2V0d2RfdXNlX3NvbWV0aGluZ19l bHNlCiAjZW5kaWYKIAogZXh0ZXJuIHNpemVfdCBfX2NvbmZzdHJfY2hrIChp bnQgX19uYW1lLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbGVuLAogCQkJICAg ICBzaXplX3QgX19idWZsZW4pIF9fVEhST1c7CiBleHRlcm4gc2l6ZV90IF9f UkVESVJFQ1RfTlRIIChfX2NvbmZzdHJfYWxpYXMsIChpbnQgX19uYW1lLCBj aGFyICpfX2J1ZiwKIAkJCQkJCXNpemVfdCBfX2xlbiksIGNvbmZzdHIpOwot ZXh0ZXJuIHNpemVfdCBfX1JFRElSRUNUX05USCAoX19jb25mc3RyX2Noa193 YXJuLAotCQkJICAgICAgKGludCBfX25hbWUsIGNoYXIgKl9fYnVmLCBzaXpl X3QgX19sZW4sCi0JCQkgICAgICAgc2l6ZV90IF9fYnVmbGVuKSwgX19jb25m c3RyX2NoaykKLSAgICAgX193YXJuYXR0ciAoImNvbmZzdHIgY2FsbGVkIHdp dGggYmlnZ2VyIGxlbmd0aCB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gIgot CQkgImJ1ZmZlciIpOwotCi1fX2ZvcnRpZnlfZnVuY3Rpb24gc2l6ZV90Ci1f X05USCAoY29uZnN0ciAoaW50IF9fbmFtZSwgY2hhciAqX19idWYsIHNpemVf dCBfX2xlbikpCi17Ci0gIGlmIChfX2JvcyAoX19idWYpICE9IChzaXplX3Qp IC0xKQotICAgIHsKLSAgICAgIGlmICghX19idWlsdGluX2NvbnN0YW50X3Ag KF9fbGVuKSkKLQlyZXR1cm4gX19jb25mc3RyX2NoayAoX19uYW1lLCBfX2J1 ZiwgX19sZW4sIF9fYm9zIChfX2J1ZikpOwogCi0gICAgICBpZiAoX19ib3Mg KF9fYnVmKSA8IF9fbGVuKQotCXJldHVybiBfX2NvbmZzdHJfY2hrX3dhcm4g KF9fbmFtZSwgX19idWYsIF9fbGVuLCBfX2JvcyAoX19idWYpKTsKLSAgICB9 CitfX2ZvcnRpZnlfcG90ZW50aWFsX292ZXJsb2FkIHNpemVfdAorX19OVEgg KGNvbmZzdHIgKGludCBfX25hbWUsIGNoYXIgKmNvbnN0IF9fY2xhbmdfcGFz c19vYmplY3Rfc2l6ZSBfX2J1ZiwKKwkJc2l6ZV90IF9fbGVuKSkKK19fRk9S VElGWV9QUkVDT05ESVRJT05TCisgICAgIF9fRk9SVElGWV9XQVJOSU5HX09O TFlfSUZfQk9TX0xUIChfX2NvbmZzdHJfd2FybiwgX19sZW4sIF9fYnVmLAor CQkJCSAgICAgICAiY29uZnN0ciBjYWxsZWQgd2l0aCBiaWdnZXIgbGVuZ3Ro IHRoYW4gIgorCQkJCSAgICAgICAic2l6ZSBvZiBkZXN0aW5hdGlvbiBidWZm ZXIiKQoreworICBpZiAoX19GT1JUSUZZX0NBTExfQ0hLICYmIF9fYm9zIChf X2J1ZikgIT0gKHNpemVfdCkgLTEpCisgICAgcmV0dXJuIF9fY29uZnN0cl9j aGsgKF9fbmFtZSwgX19idWYsIF9fbGVuLCBfX2JvcyAoX19idWYpKTsKICAg cmV0dXJuIF9fY29uZnN0cl9hbGlhcyAoX19uYW1lLCBfX2J1ZiwgX19sZW4p OwogfQotCitfX0ZPUlRJRllfRlVOQ1RJT05fRU5ECiAKIGV4dGVybiBpbnQg X19nZXRncm91cHNfY2hrIChpbnQgX19zaXplLCBfX2dpZF90IF9fbGlzdFtd LCBzaXplX3QgX19saXN0bGVuKQogICAgICBfX1RIUk9XIF9fd3VyOwogZXh0 ZXJuIGludCBfX1JFRElSRUNUX05USCAoX19nZXRncm91cHNfYWxpYXMsIChp bnQgX19zaXplLCBfX2dpZF90IF9fbGlzdFtdKSwKIAkJCSAgIGdldGdyb3Vw cykgX193dXI7Ci1leHRlcm4gaW50IF9fUkVESVJFQ1RfTlRIIChfX2dldGdy b3Vwc19jaGtfd2FybiwKLQkJCSAgIChpbnQgX19zaXplLCBfX2dpZF90IF9f bGlzdFtdLCBzaXplX3QgX19saXN0bGVuKSwKLQkJCSAgIF9fZ2V0Z3JvdXBz X2NoaykKLSAgICAgX193dXIgX193YXJuYXR0ciAoImdldGdyb3VwcyBjYWxs ZWQgd2l0aCBiaWdnZXIgZ3JvdXAgY291bnQgdGhhbiB3aGF0ICIKLQkJICAg ICAgICJjYW4gZml0IGludG8gZGVzdGluYXRpb24gYnVmZmVyIik7Ci0KLV9f Zm9ydGlmeV9mdW5jdGlvbiBpbnQKLV9fTlRIIChnZXRncm91cHMgKGludCBf X3NpemUsIF9fZ2lkX3QgX19saXN0W10pKQorCitfX2ZvcnRpZnlfcG90ZW50 aWFsX292ZXJsb2FkIGludAorX19OVEggKGdldGdyb3VwcyAoaW50IF9fc2l6 ZSwgX19naWRfdCAqY29uc3QgX19jbGFuZ19wYXNzX29iamVjdF9zaXplIF9f bGlzdCkpCitfX0ZPUlRJRllfUFJFQ09ORElUSU9OUworICAgICBfX0ZPUlRJ RllfV0FSTklOR19PTkxZX0lGX0JPU19MVCAoX19nZXRncm91cHNfd2FybiwK KwkJCQkgICAgICAgX19zaXplICogc2l6ZW9mIChfX2dpZF90KSwgX19saXN0 LAorCQkJCSAgICAgICAiZ2V0Z3JvdXBzIGNhbGxlZCB3aXRoIGJpZ2dlciBn cm91cCAiCisJCQkJICAgICAgICJjb3VudCB0aGFuIHdoYXQgY2FuIGZpdCBp bnRvICIKKwkJCQkgICAgICAgImRlc3RpbmF0aW9uIGJ1ZmZlciIpCiB7Ci0g IGlmIChfX2JvcyAoX19saXN0KSAhPSAoc2l6ZV90KSAtMSkKLSAgICB7Ci0g ICAgICBpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wIChfX3NpemUpIHx8IF9f c2l6ZSA8IDApCi0JcmV0dXJuIF9fZ2V0Z3JvdXBzX2NoayAoX19zaXplLCBf X2xpc3QsIF9fYm9zIChfX2xpc3QpKTsKLQotICAgICAgaWYgKF9fc2l6ZSAq IHNpemVvZiAoX19naWRfdCkgPiBfX2JvcyAoX19saXN0KSkKLQlyZXR1cm4g X19nZXRncm91cHNfY2hrX3dhcm4gKF9fc2l6ZSwgX19saXN0LCBfX2JvcyAo X19saXN0KSk7Ci0gICAgfQorICBpZiAoX19GT1JUSUZZX0NBTExfQ0hLICYm IF9fYm9zIChfX2xpc3QpICE9IChzaXplX3QpIC0xKQorICAgIHJldHVybiBf X2dldGdyb3Vwc19jaGsgKF9fc2l6ZSwgX19saXN0LCBfX2JvcyAoX19saXN0 KSk7CiAgIHJldHVybiBfX2dldGdyb3Vwc19hbGlhcyAoX19zaXplLCBfX2xp c3QpOwogfQorX19GT1JUSUZZX0ZVTkNUSU9OX0VORAogCiAKIGV4dGVybiBp bnQgX190dHluYW1lX3JfY2hrIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNp emVfdCBfX2J1ZmxlbiwKQEAgLTI4NywxOSArMjQyLDE5IEBAIGV4dGVybiBp bnQgX19SRURJUkVDVF9OVEggKF9fdHR5bmFtZV9yX2Noa193YXJuLAogICAg ICBfX25vbm51bGwgKCgyKSkgX193YXJuYXR0ciAoInR0eW5hbWVfciBjYWxs ZWQgd2l0aCBiaWdnZXIgYnVmbGVuIHRoYW4gIgogCQkJCSAic2l6ZSBvZiBk ZXN0aW5hdGlvbiBidWZmZXIiKTsKIAotX19mb3J0aWZ5X2Z1bmN0aW9uIGlu dAotX19OVEggKHR0eW5hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBz aXplX3QgX19idWZsZW4pKQorX19mb3J0aWZ5X3BvdGVudGlhbF9vdmVybG9h ZCBpbnQKK19fTlRIICh0dHluYW1lX3IgKGludCBfX2ZkLCBjaGFyICpjb25z dCBfX2NsYW5nX3Bhc3Nfb2JqZWN0X3NpemUgX19idWYsCisJCSAgc2l6ZV90 IF9fYnVmbGVuKSkKK19fRk9SVElGWV9QUkVDT05ESVRJT05TCisgICAgIF9f Rk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9TX0xUIChfX3R0eW5hbWVfcl93 YXJuLCBfX2J1ZmxlbiwgX19idWYsCisJCQkJICAgICAgICJ0dHluYW1lX3Ig Y2FsbGVkIHdpdGggYmlnZ2VyIGJ1ZmxlbiAiCisJCQkJICAgICAgICJ0aGFu IHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVyIikKIHsKLSAgaWYgKF9fYm9z IChfX2J1ZikgIT0gKHNpemVfdCkgLTEpCi0gICAgewotICAgICAgaWYgKCFf X2J1aWx0aW5fY29uc3RhbnRfcCAoX19idWZsZW4pKQotCXJldHVybiBfX3R0 eW5hbWVfcl9jaGsgKF9fZmQsIF9fYnVmLCBfX2J1ZmxlbiwgX19ib3MgKF9f YnVmKSk7Ci0KLSAgICAgIGlmIChfX2J1ZmxlbiA+IF9fYm9zIChfX2J1Zikp Ci0JcmV0dXJuIF9fdHR5bmFtZV9yX2Noa193YXJuIChfX2ZkLCBfX2J1Ziwg X19idWZsZW4sIF9fYm9zIChfX2J1ZikpOwotICAgIH0KLSAgcmV0dXJuIF9f dHR5bmFtZV9yX2FsaWFzIChfX2ZkLCBfX2J1ZiwgX19idWZsZW4pOwotfQor ICBpZiAoX19GT1JUSUZZX0NBTExfQ0hLICYmIF9fYm9zIChfX2J1ZikgIT0g KHNpemVfdCkgLTEpCisgICAgcmV0dXJuIF9fdHR5bmFtZV9yX2NoayAoX19m ZCwgX19idWYsIF9fYnVmbGVuLCBfX2JvcyAoX19idWYpKTsKKyAgIHJldHVy biBfX3R0eW5hbWVfcl9hbGlhcyAoX19mZCwgX19idWYsIF9fYnVmbGVuKTsK KyB9CitfX0ZPUlRJRllfRlVOQ1RJT05fRU5ECiAKIAogI2lmZGVmIF9fVVNF X1BPU0lYMTk5NTA2CkBAIC0zMDcsMjUgKzI2MiwxOSBAQCBleHRlcm4gaW50 IF9fZ2V0bG9naW5fcl9jaGsgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZs ZW4sIHNpemVfdCBfX25yZWFsKQogICAgICBfX25vbm51bGwgKCgxKSk7CiBl eHRlcm4gaW50IF9fUkVESVJFQ1QgKF9fZ2V0bG9naW5fcl9hbGlhcywgKGNo YXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pLAogCQkgICAgICAgZ2V0bG9n aW5fcikgX19ub25udWxsICgoMSkpOwotZXh0ZXJuIGludCBfX1JFRElSRUNU IChfX2dldGxvZ2luX3JfY2hrX3dhcm4sCi0JCSAgICAgICAoY2hhciAqX19i dWYsIHNpemVfdCBfX2J1Zmxlbiwgc2l6ZV90IF9fbnJlYWwpLAotCQkgICAg ICAgX19nZXRsb2dpbl9yX2NoaykKLSAgICAgX19ub25udWxsICgoMSkpIF9f d2FybmF0dHIgKCJnZXRsb2dpbl9yIGNhbGxlZCB3aXRoIGJpZ2dlciBidWZs ZW4gdGhhbiAiCi0JCQkJICJzaXplIG9mIGRlc3RpbmF0aW9uIGJ1ZmZlciIp OwogCi1fX2ZvcnRpZnlfZnVuY3Rpb24gaW50Ci1nZXRsb2dpbl9yIChjaGFy ICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKQorX19mb3J0aWZ5X3BvdGVudGlh bF9vdmVybG9hZCBpbnQKK2dldGxvZ2luX3IgKGNoYXIgKmNvbnN0IF9fY2xh bmdfcGFzc19vYmplY3Rfc2l6ZSBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKQor X19GT1JUSUZZX1BSRUNPTkRJVElPTlMKKyAgICAgX19GT1JUSUZZX1dBUk5J TkdfT05MWV9JRl9CT1NfTFQgKF9fZ2V0bG9naW5fcl93YXJuLCBfX2J1Zmxl biwgX19idWYsCisJCQkJICAgICAgICJnZXRsb2dpbl9yIGNhbGxlZCB3aXRo IGJpZ2dlciBidWZsZW4gIgorCQkJCSAgICAgICAidGhhbiBzaXplIG9mIGRl c3RpbmF0aW9uIGJ1ZmZlciIpCiB7Ci0gIGlmIChfX2JvcyAoX19idWYpICE9 IChzaXplX3QpIC0xKQotICAgIHsKLSAgICAgIGlmICghX19idWlsdGluX2Nv bnN0YW50X3AgKF9fYnVmbGVuKSkKLQlyZXR1cm4gX19nZXRsb2dpbl9yX2No ayAoX19idWYsIF9fYnVmbGVuLCBfX2JvcyAoX19idWYpKTsKLQotICAgICAg aWYgKF9fYnVmbGVuID4gX19ib3MgKF9fYnVmKSkKLQlyZXR1cm4gX19nZXRs b2dpbl9yX2Noa193YXJuIChfX2J1ZiwgX19idWZsZW4sIF9fYm9zIChfX2J1 ZikpOwotICAgIH0KKyAgaWYgKF9fRk9SVElGWV9DQUxMX0NISyAmJiBfX2Jv cyAoX19idWYpICE9IChzaXplX3QpIC0xKQorICAgIHJldHVybiBfX2dldGxv Z2luX3JfY2hrIChfX2J1ZiwgX19idWZsZW4sIF9fYm9zIChfX2J1ZikpOwog ICByZXR1cm4gX19nZXRsb2dpbl9yX2FsaWFzIChfX2J1ZiwgX19idWZsZW4p OwogfQorX19GT1JUSUZZX0ZVTkNUSU9OX0VORAogI2VuZGlmCiAKIApAQCAt MzM0LDI1ICsyODMsMjAgQEAgZXh0ZXJuIGludCBfX2dldGhvc3RuYW1lX2No ayAoY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbiwgc2l6ZV90IF9fbnJl YWwpCiAgICAgIF9fVEhST1cgX19ub25udWxsICgoMSkpOwogZXh0ZXJuIGlu dCBfX1JFRElSRUNUX05USCAoX19nZXRob3N0bmFtZV9hbGlhcywgKGNoYXIg Kl9fYnVmLCBzaXplX3QgX19idWZsZW4pLAogCQkJICAgZ2V0aG9zdG5hbWUp IF9fbm9ubnVsbCAoKDEpKTsKLWV4dGVybiBpbnQgX19SRURJUkVDVF9OVEgg KF9fZ2V0aG9zdG5hbWVfY2hrX3dhcm4sCi0JCQkgICAoY2hhciAqX19idWYs IHNpemVfdCBfX2J1Zmxlbiwgc2l6ZV90IF9fbnJlYWwpLAotCQkJICAgX19n ZXRob3N0bmFtZV9jaGspCi0gICAgIF9fbm9ubnVsbCAoKDEpKSBfX3dhcm5h dHRyICgiZ2V0aG9zdG5hbWUgY2FsbGVkIHdpdGggYmlnZ2VyIGJ1ZmxlbiB0 aGFuICIKLQkJCQkgInNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVyIik7CiAK LV9fZm9ydGlmeV9mdW5jdGlvbiBpbnQKLV9fTlRIIChnZXRob3N0bmFtZSAo Y2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikpCitfX2ZvcnRpZnlfcG90 ZW50aWFsX292ZXJsb2FkIGludAorX19OVEggKGdldGhvc3RuYW1lIChjaGFy ICpjb25zdCBfX2NsYW5nX3Bhc3Nfb2JqZWN0X3NpemUgX19idWYsCisJCSAg ICBzaXplX3QgX19idWZsZW4pKQorX19GT1JUSUZZX1BSRUNPTkRJVElPTlMK KyAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1NfTFQgKF9fZ2V0 aG9zdG5hbWVfd2FybiwgX19idWZsZW4sIF9fYnVmLAorCQkJCSAgICAgICAi Z2V0aG9zdG5hbWUgY2FsbGVkIHdpdGggYmlnZ2VyIGJ1ZmxlbiAiCisJCQkJ ICAgICAgICJ0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVyIikKIHsK LSAgaWYgKF9fYm9zIChfX2J1ZikgIT0gKHNpemVfdCkgLTEpCi0gICAgewot ICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19idWZsZW4pKQot CXJldHVybiBfX2dldGhvc3RuYW1lX2NoayAoX19idWYsIF9fYnVmbGVuLCBf X2JvcyAoX19idWYpKTsKLQotICAgICAgaWYgKF9fYnVmbGVuID4gX19ib3Mg KF9fYnVmKSkKLQlyZXR1cm4gX19nZXRob3N0bmFtZV9jaGtfd2FybiAoX19i dWYsIF9fYnVmbGVuLCBfX2JvcyAoX19idWYpKTsKLSAgICB9CisgIGlmIChf X0ZPUlRJRllfQ0FMTF9DSEsgJiYgX19ib3MgKF9fYnVmKSAhPSAoc2l6ZV90 KSAtMSkKKyAgICByZXR1cm4gX19nZXRob3N0bmFtZV9jaGsgKF9fYnVmLCBf X2J1ZmxlbiwgX19ib3MgKF9fYnVmKSk7CiAgIHJldHVybiBfX2dldGhvc3Ru YW1lX2FsaWFzIChfX2J1ZiwgX19idWZsZW4pOwogfQorX19GT1JUSUZZX0ZV TkNUSU9OX0VORAogI2VuZGlmCiAKIApAQCAtMzYyLDI0ICszMDYsMTggQEAg ZXh0ZXJuIGludCBfX2dldGRvbWFpbm5hbWVfY2hrIChjaGFyICpfX2J1Ziwg c2l6ZV90IF9fYnVmbGVuLCBzaXplX3QgX19ucmVhbCkKIGV4dGVybiBpbnQg X19SRURJUkVDVF9OVEggKF9fZ2V0ZG9tYWlubmFtZV9hbGlhcywgKGNoYXIg Kl9fYnVmLAogCQkJCQkJICAgc2l6ZV90IF9fYnVmbGVuKSwKIAkJCSAgIGdl dGRvbWFpbm5hbWUpIF9fbm9ubnVsbCAoKDEpKSBfX3d1cjsKLWV4dGVybiBp bnQgX19SRURJUkVDVF9OVEggKF9fZ2V0ZG9tYWlubmFtZV9jaGtfd2FybiwK LQkJCSAgIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLCBzaXplX3Qg X19ucmVhbCksCi0JCQkgICBfX2dldGRvbWFpbm5hbWVfY2hrKQotICAgICBf X25vbm51bGwgKCgxKSkgX193dXIgX193YXJuYXR0ciAoImdldGRvbWFpbm5h bWUgY2FsbGVkIHdpdGggYmlnZ2VyICIKLQkJCQkgICAgICAgImJ1ZmxlbiB0 aGFuIHNpemUgb2YgZGVzdGluYXRpb24gIgotCQkJCSAgICAgICAiYnVmZmVy Iik7Ci0KLV9fZm9ydGlmeV9mdW5jdGlvbiBpbnQKLV9fTlRIIChnZXRkb21h aW5uYW1lIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSkKLXsKLSAg aWYgKF9fYm9zIChfX2J1ZikgIT0gKHNpemVfdCkgLTEpCi0gICAgewotICAg ICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19idWZsZW4pKQotCXJl dHVybiBfX2dldGRvbWFpbm5hbWVfY2hrIChfX2J1ZiwgX19idWZsZW4sIF9f Ym9zIChfX2J1ZikpOwogCi0gICAgICBpZiAoX19idWZsZW4gPiBfX2JvcyAo X19idWYpKQotCXJldHVybiBfX2dldGRvbWFpbm5hbWVfY2hrX3dhcm4gKF9f YnVmLCBfX2J1ZmxlbiwgX19ib3MgKF9fYnVmKSk7Ci0gICAgfQorX19mb3J0 aWZ5X3BvdGVudGlhbF9vdmVybG9hZCBpbnQKK19fTlRIIChnZXRkb21haW5u YW1lIChjaGFyICpjb25zdCBfX2NsYW5nX3Bhc3Nfb2JqZWN0X3NpemUgX19i dWYsCisJCSAgICAgIHNpemVfdCBfX2J1ZmxlbikpCitfX0ZPUlRJRllfUFJF Q09ORElUSU9OUworICAgICBfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JP U19MVCAoX19nZXRkb21haW5uYW1lX3dhcm4sIF9fYnVmbGVuLCBfX2J1ZiwK KwkJCQkgICAgICAgImdldGRvbWFpbm5hbWUgY2FsbGVkIHdpdGggYmlnZ2Vy ICIKKwkJCQkgICAgICAgImJ1ZmxlbiB0aGFuIHNpemUgb2YgZGVzdGluYXRp b24gYnVmZmVyIikKK3sKKyAgaWYgKF9fRk9SVElGWV9DQUxMX0NISyAmJiBf X2JvcyAoX19idWYpICE9IChzaXplX3QpIC0xKQorICAgIHJldHVybiBfX2dl dGRvbWFpbm5hbWVfY2hrIChfX2J1ZiwgX19idWZsZW4sIF9fYm9zIChfX2J1 ZikpOwogICByZXR1cm4gX19nZXRkb21haW5uYW1lX2FsaWFzIChfX2J1Ziwg X19idWZsZW4pOwogfQorX19GT1JUSUZZX0ZVTkNUSU9OX0VORAogI2VuZGlm CmRpZmYgLS1naXQgYS9ydC9iaXRzL21xdWV1ZTIuaCBiL3J0L2JpdHMvbXF1 ZXVlMi5oCmluZGV4IDcwYWM2NTU1MGUuLjg4Njc0OWNiOWIgMTAwNjQ0Ci0t LSBhL3J0L2JpdHMvbXF1ZXVlMi5oCisrKyBiL3J0L2JpdHMvbXF1ZXVlMi5o CkBAIC0yOSwxMCArMjksNDcgQEAgZXh0ZXJuIG1xZF90IF9fbXFfb3Blbl8y IChjb25zdCBjaGFyICpfX25hbWUsIGludCBfX29mbGFnKQogZXh0ZXJuIG1x ZF90IF9fUkVESVJFQ1RfTlRIIChfX21xX29wZW5fYWxpYXMsIChjb25zdCBj aGFyICpfX25hbWUsCiAJCQkJCSAgICAgICBpbnQgX19vZmxhZywgLi4uKSwg bXFfb3BlbikKICAgICAgX19ub25udWxsICgoMSkpOworCisjZGVmaW5lIF9f d2Fybl9tcV9vcGVuX3dyb25nX251bWJlcl9vZl9hcmdzICJtcV9vcGVuIGNh biBiZSBjYWxsZWQgZWl0aGVyICIgXAorICAid2l0aCAyIG9yIDQgYXJndW1l bnRzIgorI2RlZmluZSBfX3dhcm5fbXFfb3Blbl9taXNzaW5nX21vZGVfYW5k X2F0dHIgIm1xX29wZW4gd2l0aCBPX0NSRUFUIGluICIgXAorICAic2Vjb25k IGFyZ3VtZW50IG5lZWRzIDQgYXJndW1lbnRzIgorI2lmZGVmIF9fdXNlX2Ns YW5nX2ZvcnRpZnkKK19fZm9ydGlmeV9vdmVybG9hZCBfX2NsYW5nX2Vycm9y IChfX3dhcm5fbXFfb3Blbl93cm9uZ19udW1iZXJfb2ZfYXJncykgbXFkX3QK K19fTlRIIChtcV9vcGVuIChjb25zdCBjaGFyICpjb25zdCBfX2NsYW5nX3Bh c3Nfb2JqZWN0X3NpemUgX19uYW1lLCBpbnQgX19vZmxhZywKKwkJaW50IF9f bW9kZSkpCit7CisgIHJldHVybiBfX21xX29wZW5fYWxpYXMgKF9fbmFtZSwg X19vZmxhZywgX19tb2RlKTsKK30KKworX19mb3J0aWZ5X292ZXJsb2FkIF9f Y2xhbmdfZXJyb3IgKF9fd2Fybl9tcV9vcGVuX3dyb25nX251bWJlcl9vZl9h cmdzKQorbXFkX3QKK19fTlRIIChtcV9vcGVuIChjb25zdCBjaGFyICpjb25z dCBfX2NsYW5nX3Bhc3Nfb2JqZWN0X3NpemUgX19uYW1lLCBpbnQgX19vZmxh ZywKKwkJaW50IF9fbW9kZSwgc3RydWN0IG1xX2F0dHIgKl9fYXR0ciwgLi4u KSkKK3sKKyAgcmV0dXJuIF9fbXFfb3Blbl9hbGlhcyAoX19uYW1lLCBfX29m bGFnLCBfX21vZGUsIF9fYXR0cik7Cit9CisKK19fZm9ydGlmeV9vdmVybG9h ZCBfX2NsYW5nX3ByZWZlcl90aGlzX292ZXJsb2FkIG1xZF90CitfX05USCAo bXFfb3BlbiAoY29uc3QgY2hhciAqY29uc3QgX19jbGFuZ19wYXNzX29iamVj dF9zaXplIF9fbmFtZSwKKwkJaW50IF9fb2ZsYWcpKQorICAgICBfX2NsYW5n X2Vycm9yX2lmICgoX19vZmxhZyAmIE9fQ1JFQVQpLAorICAgICAgICAgICAg ICAgICAgICAgICBfX3dhcm5fbXFfb3Blbl9taXNzaW5nX21vZGVfYW5kX2F0 dHIpCit7CisgIHJldHVybiBfX21xX29wZW5fYWxpYXMgKF9fbmFtZSwgX19v ZmxhZyk7Cit9CisKK19fZm9ydGlmeV9vdmVybG9hZCBfX2NsYW5nX3ByZWZl cl90aGlzX292ZXJsb2FkIG1xZF90CitfX05USCAobXFfb3BlbiAoY29uc3Qg Y2hhciAqY29uc3QgX19jbGFuZ19wYXNzX29iamVjdF9zaXplIF9fbmFtZSwg aW50IF9fb2ZsYWcsCisJCWludCBfX21vZGUsIHN0cnVjdCBtcV9hdHRyICpf X2F0dHIpKQoreworICByZXR1cm4gX19tcV9vcGVuX2FsaWFzIChfX25hbWUs IF9fb2ZsYWcsIF9fbW9kZSwgX19hdHRyKTsKK30KKyNlbHNlCiBfX2Vycm9y ZGVjbCAoX19tcV9vcGVuX3dyb25nX251bWJlcl9vZl9hcmdzLAotCSAgICAg Im1xX29wZW4gY2FuIGJlIGNhbGxlZCBlaXRoZXIgd2l0aCAyIG9yIDQgYXJn dW1lbnRzIik7CisgIF9fd2Fybl9tcV9vcGVuX3dyb25nX251bWJlcl9vZl9h cmdzKTsKIF9fZXJyb3JkZWNsIChfX21xX29wZW5fbWlzc2luZ19tb2RlX2Fu ZF9hdHRyLAotCSAgICAgIm1xX29wZW4gd2l0aCBPX0NSRUFUIGluIHNlY29u ZCBhcmd1bWVudCBuZWVkcyA0IGFyZ3VtZW50cyIpOworICBfX3dhcm5fbXFf b3Blbl9taXNzaW5nX21vZGVfYW5kX2F0dHIpOwogCiBfX2ZvcnRpZnlfZnVu Y3Rpb24gbXFkX3QKIF9fTlRIIChtcV9vcGVuIChjb25zdCBjaGFyICpfX25h bWUsIGludCBfX29mbGFnLCAuLi4pKQpAQCAtNTUsMyArOTIsNiBAQCBfX05U SCAobXFfb3BlbiAoY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX19vZmxhZywg Li4uKSkKIAogICByZXR1cm4gX19tcV9vcGVuX2FsaWFzIChfX25hbWUsIF9f b2ZsYWcsIF9fdmFfYXJnX3BhY2sgKCkpOwogfQorI2VuZGlmCisjdW5kZWYg X193YXJuX21xX29wZW5fd3JvbmdfbnVtYmVyX29mX2FyZ3MKKyN1bmRlZiBf X3dhcm5fbXFfb3Blbl9taXNzaW5nX21vZGVfYW5kX2F0dHIKZGlmZiAtLWdp dCBhL3J0L21xdWV1ZS5oIGIvcnQvbXF1ZXVlLmgKaW5kZXggYzc5YWE1M2I5 NC4uNGI3N2NkYTcxZiAxMDA2NDQKLS0tIGEvcnQvbXF1ZXVlLmgKKysrIGIv cnQvbXF1ZXVlLmgKQEAgLTg5LDcgKzg5LDcgQEAgZXh0ZXJuIGludCBtcV90 aW1lZHNlbmQgKG1xZF90IF9fbXFkZXMsIGNvbnN0IGNoYXIgKl9fbXNnX3B0 ciwKIAogLyogRGVmaW5lIHNvbWUgaW5saW5lcyBoZWxwaW5nIHRvIGNhdGNo IGNvbW1vbiBwcm9ibGVtcy4gICovCiAjaWYgX19VU0VfRk9SVElGWV9MRVZF TCA+IDAgJiYgZGVmaW5lZCBfX2ZvcnRpZnlfZnVuY3Rpb24gXAotICAgICYm IGRlZmluZWQgX192YV9hcmdfcGFja19sZW4KKyAgICAmJiAoZGVmaW5lZCBf X3ZhX2FyZ19wYWNrX2xlbiB8fCBkZWZpbmVkIF9fdXNlX2NsYW5nX2ZvcnRp ZnkpCiAjIGluY2x1ZGUgPGJpdHMvbXF1ZXVlMi5oPgogI2VuZGlmCiAKZGlm ZiAtLWdpdCBhL3NvY2tldC9iaXRzL3NvY2tldDIuaCBiL3NvY2tldC9iaXRz L3NvY2tldDIuaAppbmRleCA0ZjUyMGQ3MjdmLi41NDQzYWIwOGE1IDEwMDY0 NAotLS0gYS9zb2NrZXQvYml0cy9zb2NrZXQyLmgKKysrIGIvc29ja2V0L2Jp dHMvc29ja2V0Mi5oCkBAIC0yNCwyNSArMjQsMjAgQEAgZXh0ZXJuIHNzaXpl X3QgX19yZWN2X2NoayAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3Qg X19uLCBzaXplX3QgX19idWZsZW4sCiAJCQkgICBpbnQgX19mbGFncyk7CiBl eHRlcm4gc3NpemVfdCBfX1JFRElSRUNUIChfX3JlY3ZfYWxpYXMsIChpbnQg X19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX24sCiAJCQkJCSAgaW50IF9f ZmxhZ3MpLCByZWN2KTsKLWV4dGVybiBzc2l6ZV90IF9fUkVESVJFQ1QgKF9f cmVjdl9jaGtfd2FybiwKLQkJCSAgIChpbnQgX19mZCwgdm9pZCAqX19idWYs IHNpemVfdCBfX24sIHNpemVfdCBfX2J1ZmxlbiwKLQkJCSAgICBpbnQgX19m bGFncyksIF9fcmVjdl9jaGspCi0gICAgIF9fd2FybmF0dHIgKCJyZWN2IGNh bGxlZCB3aXRoIGJpZ2dlciBsZW5ndGggdGhhbiBzaXplIG9mIGRlc3RpbmF0 aW9uICIKLQkJICJidWZmZXIiKTsKIAotX19mb3J0aWZ5X2Z1bmN0aW9uIHNz aXplX3QKLXJlY3YgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9f biwgaW50IF9fZmxhZ3MpCitfX2ZvcnRpZnlfcG90ZW50aWFsX292ZXJsb2Fk IHNzaXplX3QKK3JlY3YgKGludCBfX2ZkLCB2b2lkICpjb25zdCBfX2NsYW5n X3Bhc3Nfb2JqZWN0X3NpemUwIF9fYnVmLCBzaXplX3QgX19uLAorICAgICAg aW50IF9fZmxhZ3MpCitfX0ZPUlRJRllfUFJFQ09ORElUSU9OUworICAgICBf X0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JPUzBfTFQgKF9fcmVjdl93YXJu LCBfX24sIF9fYnVmLAorCQkJCQkicmVjdiBjYWxsZWQgd2l0aCBiaWdnZXIg bGVuZ3RoIHRoYW4gIgorCQkJCQkic2l6ZSBvZiBkZXN0aW5hdGlvbiBidWZm ZXIiKQogewotICBpZiAoX19ib3MwIChfX2J1ZikgIT0gKHNpemVfdCkgLTEp Ci0gICAgewotICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19u KSkKLQlyZXR1cm4gX19yZWN2X2NoayAoX19mZCwgX19idWYsIF9fbiwgX19i b3MwIChfX2J1ZiksIF9fZmxhZ3MpOwotCi0gICAgICBpZiAoX19uID4gX19i b3MwIChfX2J1ZikpCi0JcmV0dXJuIF9fcmVjdl9jaGtfd2FybiAoX19mZCwg X19idWYsIF9fbiwgX19ib3MwIChfX2J1ZiksIF9fZmxhZ3MpOwotICAgIH0K KyAgaWYgKF9fRk9SVElGWV9DQUxMX0NISyAmJiBfX2JvczAgKF9fYnVmKSAh PSAoc2l6ZV90KSAtMSkKKyAgICByZXR1cm4gX19yZWN2X2NoayAoX19mZCwg X19idWYsIF9fbiwgX19ib3MwIChfX2J1ZiksIF9fZmxhZ3MpOwogICByZXR1 cm4gX19yZWN2X2FsaWFzIChfX2ZkLCBfX2J1ZiwgX19uLCBfX2ZsYWdzKTsK IH0KK19fRk9SVElGWV9GVU5DVElPTl9FTkQKIAogZXh0ZXJuIHNzaXplX3Qg X19yZWN2ZnJvbV9jaGsgKGludCBfX2ZkLCB2b2lkICpfX3Jlc3RyaWN0IF9f YnVmLCBzaXplX3QgX19uLAogCQkJICAgICAgIHNpemVfdCBfX2J1Zmxlbiwg aW50IF9fZmxhZ3MsCkBAIC01MiwyNiArNDcsMTkgQEAgZXh0ZXJuIHNzaXpl X3QgX19SRURJUkVDVCAoX19yZWN2ZnJvbV9hbGlhcywKIAkJCSAgIChpbnQg X19mZCwgdm9pZCAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbiwKIAkJ CSAgICBpbnQgX19mbGFncywgX19TT0NLQUREUl9BUkcgX19hZGRyLAogCQkJ ICAgIHNvY2tsZW5fdCAqX19yZXN0cmljdCBfX2FkZHJfbGVuKSwgcmVjdmZy b20pOwotZXh0ZXJuIHNzaXplX3QgX19SRURJUkVDVCAoX19yZWN2ZnJvbV9j aGtfd2FybiwKLQkJCSAgIChpbnQgX19mZCwgdm9pZCAqX19yZXN0cmljdCBf X2J1Ziwgc2l6ZV90IF9fbiwKLQkJCSAgICBzaXplX3QgX19idWZsZW4sIGlu dCBfX2ZsYWdzLAotCQkJICAgIF9fU09DS0FERFJfQVJHIF9fYWRkciwKLQkJ CSAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19hZGRyX2xlbiksIF9fcmVj dmZyb21fY2hrKQotICAgICBfX3dhcm5hdHRyICgicmVjdmZyb20gY2FsbGVk IHdpdGggYmlnZ2VyIGxlbmd0aCB0aGFuIHNpemUgb2YgIgotCQkgImRlc3Rp bmF0aW9uIGJ1ZmZlciIpOwogCi1fX2ZvcnRpZnlfZnVuY3Rpb24gc3NpemVf dAotcmVjdmZyb20gKGludCBfX2ZkLCB2b2lkICpfX3Jlc3RyaWN0IF9fYnVm LCBzaXplX3QgX19uLCBpbnQgX19mbGFncywKLQkgIF9fU09DS0FERFJfQVJH IF9fYWRkciwgc29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fYWRkcl9sZW4pCitf X2ZvcnRpZnlfcG90ZW50aWFsX292ZXJsb2FkIHNzaXplX3QKK3JlY3Zmcm9t IChpbnQgX19mZCwgdm9pZCAqX19yZXN0cmljdCBjb25zdCBfX2NsYW5nX3Bh c3Nfb2JqZWN0X3NpemUwIF9fYnVmLAorCSAgc2l6ZV90IF9fbiwgaW50IF9f ZmxhZ3MsIF9fU09DS0FERFJfQVJHIF9fYWRkciwKKwkgIHNvY2tsZW5fdCAq X19yZXN0cmljdCBfX2FkZHJfbGVuKQorX19GT1JUSUZZX1BSRUNPTkRJVElP TlMKKyAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1MwX0xUIChf X3JlY3Zmcm9tX3dhcm4sIF9fbiwgX19idWYsCisJCQkJCSJyZWN2ZnJvbSBj YWxsZWQgd2l0aCBiaWdnZXIgbGVuZ3RoICIKKwkJCQkJInRoYW4gc2l6ZSBv ZiBkZXN0aW5hdGlvbiBidWZmZXIiKQogewotICBpZiAoX19ib3MwIChfX2J1 ZikgIT0gKHNpemVfdCkgLTEpCi0gICAgewotICAgICAgaWYgKCFfX2J1aWx0 aW5fY29uc3RhbnRfcCAoX19uKSkKLQlyZXR1cm4gX19yZWN2ZnJvbV9jaGsg KF9fZmQsIF9fYnVmLCBfX24sIF9fYm9zMCAoX19idWYpLCBfX2ZsYWdzLAot CQkJICAgICAgIF9fYWRkciwgX19hZGRyX2xlbik7Ci0gICAgICBpZiAoX19u ID4gX19ib3MwIChfX2J1ZikpCi0JcmV0dXJuIF9fcmVjdmZyb21fY2hrX3dh cm4gKF9fZmQsIF9fYnVmLCBfX24sIF9fYm9zMCAoX19idWYpLCBfX2ZsYWdz LAotCQkJCSAgICBfX2FkZHIsIF9fYWRkcl9sZW4pOwotICAgIH0KKyAgaWYg KF9fRk9SVElGWV9DQUxMX0NISyAmJiBfX2JvczAgKF9fYnVmKSAhPSAoc2l6 ZV90KSAtMSkKKyAgICByZXR1cm4gX19yZWN2ZnJvbV9jaGsgKF9fZmQsIF9f YnVmLCBfX24sIF9fYm9zMCAoX19idWYpLCBfX2ZsYWdzLCBfX2FkZHIsCisJ CQkgICBfX2FkZHJfbGVuKTsKICAgcmV0dXJuIF9fcmVjdmZyb21fYWxpYXMg KF9fZmQsIF9fYnVmLCBfX24sIF9fZmxhZ3MsIF9fYWRkciwgX19hZGRyX2xl bik7CiB9CitfX0ZPUlRJRllfRlVOQ1RJT05fRU5ECmRpZmYgLS1naXQgYS9z dGRsaWIvYml0cy9zdGRsaWIuaCBiL3N0ZGxpYi9iaXRzL3N0ZGxpYi5oCmlu ZGV4IDg2NDI4NGZjNzQuLjQ4N2ZkYzM5MWIgMTAwNjQ0Ci0tLSBhL3N0ZGxp Yi9iaXRzL3N0ZGxpYi5oCisrKyBiL3N0ZGxpYi9iaXRzL3N0ZGxpYi5oCkBA IC0yNiwyNyArMjYsMjcgQEAgZXh0ZXJuIGNoYXIgKl9fcmVhbHBhdGhfY2hr IChjb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKIGV4dGVybiBjaGFy ICpfX1JFRElSRUNUX05USCAoX19yZWFscGF0aF9hbGlhcywKIAkJCSAgICAg KGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogCQkJICAgICAgY2hh ciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSwgcmVhbHBhdGgpIF9fd3VyOwot ZXh0ZXJuIGNoYXIgKl9fUkVESVJFQ1RfTlRIIChfX3JlYWxwYXRoX2Noa193 YXJuLAotCQkJICAgICAoY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUs Ci0JCQkgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQsCi0JCQkg ICAgICBzaXplX3QgX19yZXNvbHZlZGxlbiksIF9fcmVhbHBhdGhfY2hrKSBf X3d1cgotICAgICBfX3dhcm5hdHRyICgic2Vjb25kIGFyZ3VtZW50IG9mIHJl YWxwYXRoIG11c3QgYmUgZWl0aGVyIE5VTEwgb3IgYXQgIgotCQkgImxlYXN0 IFBBVEhfTUFYIGJ5dGVzIGxvbmcgYnVmZmVyIik7CiAKLV9fZm9ydGlmeV9m dW5jdGlvbiBfX3d1ciBjaGFyICoKLV9fTlRIIChyZWFscGF0aCAoY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25hbWUsIGNoYXIgKl9fcmVzdHJpY3QgX19y ZXNvbHZlZCkpCitfX2ZvcnRpZnlfcG90ZW50aWFsX292ZXJsb2FkIF9fd3Vy IGNoYXIgKgorX19OVEggKHJlYWxwYXRoIChjb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbmFtZSwKKwkJIGNoYXIgKl9fcmVzdHJpY3QgY29uc3QgX19jbGFu Z19wYXNzX29iamVjdF9zaXplIF9fcmVzb2x2ZWQpKQorX19GT1JUSUZZX1BS RUNPTkRJVElPTlMKKyNpZiBkZWZpbmVkIF9MSUJDX0xJTUlUU19IXyAmJiBk ZWZpbmVkIFBBVEhfTUFYCisgICAgIF9fRk9SVElGWV9XQVJOSU5HX09OTFlf SUZfQk9TX0xUIChfX3JlYWxwYXRoX3dhcm4sIFBBVEhfTUFYLCBfX3Jlc29s dmVkLAorCQkJCSAgICAgICAic2Vjb25kIGFyZ3VtZW50IG9mIHJlYWxwYXRo IG11c3QgYmUgIgorCQkJCSAgICAgICAiZWl0aGVyIE5VTEwgb3IgYXQgbGVh c3QgUEFUSF9NQVggIgorCQkJCSAgICAgICAiYnl0ZXMgbG9uZyBidWZmZXIi KQorI2VuZGlmCiB7Ci0gIGlmIChfX2JvcyAoX19yZXNvbHZlZCkgIT0gKHNp emVfdCkgLTEpCi0gICAgeworICBpZiAoCiAjaWYgZGVmaW5lZCBfTElCQ19M SU1JVFNfSF8gJiYgZGVmaW5lZCBQQVRIX01BWAotICAgICAgaWYgKF9fYm9z IChfX3Jlc29sdmVkKSA8IFBBVEhfTUFYKQotCXJldHVybiBfX3JlYWxwYXRo X2Noa193YXJuIChfX25hbWUsIF9fcmVzb2x2ZWQsIF9fYm9zIChfX3Jlc29s dmVkKSk7CisgICAgICBfX0ZPUlRJRllfQ0FMTF9DSEsgJiYKICNlbmRpZgot ICAgICAgcmV0dXJuIF9fcmVhbHBhdGhfY2hrIChfX25hbWUsIF9fcmVzb2x2 ZWQsIF9fYm9zIChfX3Jlc29sdmVkKSk7Ci0gICAgfQotCisgICAgICBfX2Jv cyAoX19yZXNvbHZlZCkgIT0gKHNpemVfdCkgLTEpCisgICAgcmV0dXJuIF9f cmVhbHBhdGhfY2hrIChfX25hbWUsIF9fcmVzb2x2ZWQsIF9fYm9zIChfX3Jl c29sdmVkKSk7CiAgIHJldHVybiBfX3JlYWxwYXRoX2FsaWFzIChfX25hbWUs IF9fcmVzb2x2ZWQpOwogfQorX19GT1JUSUZZX0ZVTkNUSU9OX0VORAogCiAK IGV4dGVybiBpbnQgX19wdHNuYW1lX3JfY2hrIChpbnQgX19mZCwgY2hhciAq X19idWYsIHNpemVfdCBfX2J1ZmxlbiwKQEAgLTU0LDMzICs1NCwyOCBAQCBl eHRlcm4gaW50IF9fcHRzbmFtZV9yX2NoayAoaW50IF9fZmQsIGNoYXIgKl9f YnVmLCBzaXplX3QgX19idWZsZW4sCiBleHRlcm4gaW50IF9fUkVESVJFQ1Rf TlRIIChfX3B0c25hbWVfcl9hbGlhcywgKGludCBfX2ZkLCBjaGFyICpfX2J1 ZiwKIAkJCQkJICAgICAgIHNpemVfdCBfX2J1ZmxlbiksIHB0c25hbWVfcikK ICAgICAgX19ub25udWxsICgoMikpOwotZXh0ZXJuIGludCBfX1JFRElSRUNU X05USCAoX19wdHNuYW1lX3JfY2hrX3dhcm4sCi0JCQkgICAoaW50IF9fZmQs IGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4sCi0JCQkgICAgc2l6ZV90 IF9fbnJlYWwpLCBfX3B0c25hbWVfcl9jaGspCi0gICAgIF9fbm9ubnVsbCAo KDIpKSBfX3dhcm5hdHRyICgicHRzbmFtZV9yIGNhbGxlZCB3aXRoIGJ1Zmxl biBiaWdnZXIgdGhhbiAiCi0JCQkJICJzaXplIG9mIGJ1ZiIpOwotCi1fX2Zv cnRpZnlfZnVuY3Rpb24gaW50Ci1fX05USCAocHRzbmFtZV9yIChpbnQgX19m ZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikpCisKK19fZm9ydGlm eV9wb3RlbnRpYWxfb3ZlcmxvYWQgaW50CitfX05USCAocHRzbmFtZV9yIChp bnQgX19mZCwgY2hhciAqY29uc3QgX19jbGFuZ19wYXNzX29iamVjdF9zaXpl IF9fYnVmLAorCQkgIHNpemVfdCBfX2J1ZmxlbikpCitfX0ZPUlRJRllfUFJF Q09ORElUSU9OUworICAgICBfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JP U19MVCAoX19wdHNuYW1lX3Jfd2FybiwgX19idWZsZW4sIF9fYnVmLAorCQkJ CSAgICAgICAicHRzbmFtZV9yIGNhbGxlZCB3aXRoIGJ1ZmxlbiAiCisJCQkJ ICAgICAgICJiaWdnZXIgdGhhbiBzaXplIG9mIGJ1ZiIpCiB7Ci0gIGlmIChf X2JvcyAoX19idWYpICE9IChzaXplX3QpIC0xKQotICAgIHsKLSAgICAgIGlm ICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fYnVmbGVuKSkKLQlyZXR1cm4g X19wdHNuYW1lX3JfY2hrIChfX2ZkLCBfX2J1ZiwgX19idWZsZW4sIF9fYm9z IChfX2J1ZikpOwotICAgICAgaWYgKF9fYnVmbGVuID4gX19ib3MgKF9fYnVm KSkKLQlyZXR1cm4gX19wdHNuYW1lX3JfY2hrX3dhcm4gKF9fZmQsIF9fYnVm LCBfX2J1ZmxlbiwgX19ib3MgKF9fYnVmKSk7Ci0gICAgfQorICBpZiAoX19G T1JUSUZZX0NBTExfQ0hLICYmIF9fYm9zIChfX2J1ZikgIT0gKHNpemVfdCkg LTEpCisgICAgcmV0dXJuIF9fcHRzbmFtZV9yX2NoayAoX19mZCwgX19idWYs IF9fYnVmbGVuLCBfX2JvcyAoX19idWYpKTsKICAgcmV0dXJuIF9fcHRzbmFt ZV9yX2FsaWFzIChfX2ZkLCBfX2J1ZiwgX19idWZsZW4pOwogfQotCitfX0ZP UlRJRllfRlVOQ1RJT05fRU5ECiAKIGV4dGVybiBpbnQgX193Y3RvbWJfY2hr IChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhciwgc2l6ZV90IF9fYnVmbGVu KQogICBfX1RIUk9XIF9fd3VyOwogZXh0ZXJuIGludCBfX1JFRElSRUNUX05U SCAoX193Y3RvbWJfYWxpYXMsIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hh ciksCiAJCQkgICB3Y3RvbWIpIF9fd3VyOwogCi1fX2ZvcnRpZnlfZnVuY3Rp b24gX193dXIgaW50Ci1fX05USCAod2N0b21iIChjaGFyICpfX3MsIHdjaGFy X3QgX193Y2hhcikpCitfX2ZvcnRpZnlfcG90ZW50aWFsX292ZXJsb2FkIF9f d3VyIGludAorX19OVEggKHdjdG9tYiAoY2hhciAqY29uc3QgX19jbGFuZ19w YXNzX29iamVjdF9zaXplIF9fcywgd2NoYXJfdCBfX3djaGFyKSkKIHsKICAg LyogV2Ugd291bGQgaGF2ZSB0byBpbmNsdWRlIDxsaW1pdHMuaD4gdG8gZ2V0 IGEgZGVmaW5pdGlvbiBvZiBNQl9MRU5fTUFYLgogICAgICBCdXQgdGhpcyB3 b3VsZCBvbmx5IGRpc3R1cmIgdGhlIG5hbWVzcGFjZS4gIFNvIHdlIGRlZmlu ZSBvdXIgb3duCkBAIC0xMDIsMjkgKzk3LDIyIEBAIGV4dGVybiBzaXplX3Qg X19SRURJUkVDVF9OVEggKF9fbWJzdG93Y3NfYWxpYXMsCiAJCQkgICAgICAo d2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKIAkJCSAgICAgICBjb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fc3JjLAogCQkJICAgICAgIHNpemVfdCBfX2xl biksIG1ic3Rvd2NzKTsKLWV4dGVybiBzaXplX3QgX19SRURJUkVDVF9OVEgg KF9fbWJzdG93Y3NfY2hrX3dhcm4sCi0JCQkgICAgICAod2NoYXJfdCAqX19y ZXN0cmljdCBfX2RzdCwKLQkJCSAgICAgICBjb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fc3JjLAotCQkJICAgICAgIHNpemVfdCBfX2xlbiwgc2l6ZV90IF9f ZHN0bGVuKSwgX19tYnN0b3djc19jaGspCi0gICAgIF9fd2FybmF0dHIgKCJt YnN0b3djcyBjYWxsZWQgd2l0aCBkc3QgYnVmZmVyIHNtYWxsZXIgdGhhbiBs ZW4gIgotCQkgIiogc2l6ZW9mICh3Y2hhcl90KSIpOwogCi1fX2ZvcnRpZnlf ZnVuY3Rpb24gc2l6ZV90Ci1fX05USCAobWJzdG93Y3MgKHdjaGFyX3QgKl9f cmVzdHJpY3QgX19kc3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMs Ci0JCSBzaXplX3QgX19sZW4pKQorX19mb3J0aWZ5X3BvdGVudGlhbF9vdmVy bG9hZCBzaXplX3QKK19fTlRIIChtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0 cmljdCBjb25zdCBfX2NsYW5nX3Bhc3Nfb2JqZWN0X3NpemUgX19kc3QsCisJ CSBjb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19sZW4p KQorX19GT1JUSUZZX1BSRUNPTkRJVElPTlMKKyAgICAgX19GT1JUSUZZX1dB Uk5JTkdfT05MWV9JRl9CT1NfTFQyIChfX21ic3Rvd2NzX3dhcm4sIF9fbGVu LCBfX2RzdCwKKwkJCQkJc2l6ZW9mICh3Y2hhcl90KSwKKwkJCQkJIm1ic3Rv d2NzIGNhbGxlZCB3aXRoIGRzdCBidWZmZXIgIgorCQkJCQkic21hbGxlciB0 aGFuIGxlbiAqIHNpemVvZiAod2NoYXJfdCkiKQogewotICBpZiAoX19ib3Mg KF9fZHN0KSAhPSAoc2l6ZV90KSAtMSkKLSAgICB7Ci0gICAgICBpZiAoIV9f YnVpbHRpbl9jb25zdGFudF9wIChfX2xlbikpCi0JcmV0dXJuIF9fbWJzdG93 Y3NfY2hrIChfX2RzdCwgX19zcmMsIF9fbGVuLAotCQkJICAgICAgIF9fYm9z IChfX2RzdCkgLyBzaXplb2YgKHdjaGFyX3QpKTsKLQotICAgICAgaWYgKF9f bGVuID4gX19ib3MgKF9fZHN0KSAvIHNpemVvZiAod2NoYXJfdCkpCi0JcmV0 dXJuIF9fbWJzdG93Y3NfY2hrX3dhcm4gKF9fZHN0LCBfX3NyYywgX19sZW4s Ci0JCQkJICAgICBfX2JvcyAoX19kc3QpIC8gc2l6ZW9mICh3Y2hhcl90KSk7 Ci0gICAgfQorICBpZiAoX19GT1JUSUZZX0NBTExfQ0hLICYmIF9fYm9zIChf X2RzdCkgIT0gKHNpemVfdCkgLTEpCisgICAgcmV0dXJuIF9fbWJzdG93Y3Nf Y2hrIChfX2RzdCwgX19zcmMsIF9fbGVuLAorCQkJICAgX19ib3MgKF9fZHN0 KSAvIHNpemVvZiAod2NoYXJfdCkpOwogICByZXR1cm4gX19tYnN0b3djc19h bGlhcyAoX19kc3QsIF9fc3JjLCBfX2xlbik7CiB9CitfX0ZPUlRJRllfRlVO Q1RJT05fRU5ECiAKIAogZXh0ZXJuIHNpemVfdCBfX3djc3RvbWJzX2NoayAo Y2hhciAqX19yZXN0cmljdCBfX2RzdCwKQEAgLTEzNCwyMiArMTIyLDE3IEBA IGV4dGVybiBzaXplX3QgX19SRURJUkVDVF9OVEggKF9fd2NzdG9tYnNfYWxp YXMsCiAJCQkgICAgICAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKIAkJCSAg ICAgICBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLAogCQkJICAg ICAgIHNpemVfdCBfX2xlbiksIHdjc3RvbWJzKTsKLWV4dGVybiBzaXplX3Qg X19SRURJUkVDVF9OVEggKF9fd2NzdG9tYnNfY2hrX3dhcm4sCi0JCQkgICAg ICAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKLQkJCSAgICAgICBjb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLAotCQkJICAgICAgIHNpemVfdCBf X2xlbiwgc2l6ZV90IF9fZHN0bGVuKSwgX193Y3N0b21ic19jaGspCi0gICAg IF9fd2FybmF0dHIgKCJ3Y3N0b21icyBjYWxsZWQgd2l0aCBkc3QgYnVmZmVy IHNtYWxsZXIgdGhhbiBsZW4iKTsKIAotX19mb3J0aWZ5X2Z1bmN0aW9uIHNp emVfdAotX19OVEggKHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0 LCBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLAotCQkgc2l6ZV90 IF9fbGVuKSkKK19fZm9ydGlmeV9wb3RlbnRpYWxfb3ZlcmxvYWQgc2l6ZV90 CitfX05USCAod2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgY29uc3QgX19j bGFuZ19wYXNzX29iamVjdF9zaXplIF9fZHN0LAorCQkgY29uc3Qgd2NoYXJf dCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuKSkKK19fRk9SVElG WV9QUkVDT05ESVRJT05TCisgICAgIF9fRk9SVElGWV9XQVJOSU5HX09OTFlf SUZfQk9TX0xUIChfX3djc3RvbWJzX3dhcm4sIF9fbGVuLCBfX2RzdCwKKwkJ CQkgICAgICAgIndjc3RvbWJzIGNhbGxlZCB3aXRoIGRzdCBidWZmZXIgIgor CQkJCSAgICAgICAic21hbGxlciB0aGFuIGxlbiIpCiB7Ci0gIGlmIChfX2Jv cyAoX19kc3QpICE9IChzaXplX3QpIC0xKQotICAgIHsKLSAgICAgIGlmICgh X19idWlsdGluX2NvbnN0YW50X3AgKF9fbGVuKSkKLQlyZXR1cm4gX193Y3N0 b21ic19jaGsgKF9fZHN0LCBfX3NyYywgX19sZW4sIF9fYm9zIChfX2RzdCkp OwotICAgICAgaWYgKF9fbGVuID4gX19ib3MgKF9fZHN0KSkKLQlyZXR1cm4g X193Y3N0b21ic19jaGtfd2FybiAoX19kc3QsIF9fc3JjLCBfX2xlbiwgX19i b3MgKF9fZHN0KSk7Ci0gICAgfQorICBpZiAoX19GT1JUSUZZX0NBTExfQ0hL ICYmIF9fYm9zIChfX2RzdCkgIT0gKHNpemVfdCkgLTEpCisgICAgcmV0dXJu IF9fd2NzdG9tYnNfY2hrIChfX2RzdCwgX19zcmMsIF9fbGVuLCBfX2JvcyAo X19kc3QpKTsKICAgcmV0dXJuIF9fd2NzdG9tYnNfYWxpYXMgKF9fZHN0LCBf X3NyYywgX19sZW4pOwogfQorX19GT1JUSUZZX0ZVTkNUSU9OX0VORApkaWZm IC0tZ2l0IGEvc3RyaW5nL2JpdHMvc3RyaW5nX2ZvcnRpZmllZC5oIGIvc3Ry aW5nL2JpdHMvc3RyaW5nX2ZvcnRpZmllZC5oCmluZGV4IGE4OWU3NTdjOWQu LjE5OWNlYzdhZDIgMTAwNjQ0Ci0tLSBhL3N0cmluZy9iaXRzL3N0cmluZ19m b3J0aWZpZWQuaAorKysgYi9zdHJpbmcvYml0cy9zdHJpbmdfZm9ydGlmaWVk LmgKQEAgLTIyLDQ1ICsyMiw3MCBAQAogIyBlcnJvciAiTmV2ZXIgdXNlIDxi aXRzL3N0cmluZ19mb3J0aWZpZWQuaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHN0 cmluZy5oPiBpbnN0ZWFkLiIKICNlbmRpZgogCi0jaWYgIV9fR05VQ19QUkVS RVEgKDUsMCkKLV9fd2FybmRlY2wgKF9fd2Fybl9tZW1zZXRfemVyb19sZW4s Ci0JICAgICJtZW1zZXQgdXNlZCB3aXRoIGNvbnN0YW50IHplcm8gbGVuZ3Ro IHBhcmFtZXRlcjsgdGhpcyBjb3VsZCBiZSBkdWUgdG8gdHJhbnNwb3NlZCBw YXJhbWV0ZXJzIik7Ci0jZW5kaWYKLQotX19mb3J0aWZ5X2Z1bmN0aW9uIHZv aWQgKgotX19OVEggKG1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3Qs IGNvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCi0JICAgICAgIHNpemVf dCBfX2xlbikpCisjZGVmaW5lIF9fd2Fybl9sZW5fdG9vX2xhcmdlIFwKKyAg ImZ1bmN0aW9uIGNhbGxlZCB3aXRoIGJpZ2dlciBsZW5ndGggdGhhbiB0aGUg ZGVzdGluYXRpb24gYnVmZmVyIgorLyogUmVwZWF0IGJvZGllcyBoZXJlIHRv IHJlZHVjZSAnbm90ZSdzIGlmIHdlIGRldGVjdCBhIHByb2JsZW0uICAqLwor I2RlZmluZSBfX3NpemVfdG9vX3NtYWxsKGJvcywgZGVzdCwgbGVuKSBcCisg IChib3MgKGRlc3QpICE9IChzaXplX3QpIC0xICYmIGJvcyAoZGVzdCkgPCBs ZW4pCisjZGVmaW5lIF9fd2Fybl9pZl9kZXN0X3Rvb19zbWFsbChkZXN0LCBs ZW4pIFwKKyAgX19jbGFuZ193YXJuaW5nX2lmIChfX3NpemVfdG9vX3NtYWxs IChfX2JvcywgZGVzdCwgbGVuKSwgXAorCQkJCQlfX3dhcm5fbGVuX3Rvb19s YXJnZSkKKyNkZWZpbmUgX193YXJuX2lmX2Rlc3RfdG9vX3NtYWxsMChkZXN0 LCBsZW4pIFwKKyAgX19jbGFuZ193YXJuaW5nX2lmIChfX3NpemVfdG9vX3Nt YWxsIChfX2JvczAsIGRlc3QsIGxlbiksIFwKKwkJCQkJX193YXJuX2xlbl90 b29fbGFyZ2UpCisKKyNkZWZpbmUgX193YXJuX2lucHV0X3N0cl90b29fbGFy Z2UgXAorICAiZGVzdGluYXRpb24gYnVmZmVyIHdpbGwgYWx3YXlzIGJlIG92 ZXJmbG93biBieSBzb3VyY2UiCisjZGVmaW5lIF9fd2Fybl9pZl9zcmNfdG9v X2xhcmdlKGRlc3QsIHNyYykgXAorICBfX2NsYW5nX3dhcm5pbmdfaWYgKF9f c2l6ZV90b29fc21hbGwgKF9fYm9zLCBkZXN0LCBfX2J1aWx0aW5fc3RybGVu IChzcmMpKSwgXAorCQkgICAgICBfX3dhcm5faW5wdXRfc3RyX3Rvb19sYXJn ZSkKKworX19mb3J0aWZ5X3BvdGVudGlhbF9vdmVybG9hZCB2b2lkICoKK19f TlRIIChtZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgY29uc3QgX19jbGFuZ19w YXNzX29iamVjdF9zaXplMCBfX2Rlc3QsCisJICAgICAgIGNvbnN0IHZvaWQg Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbikpCisgICAgIF9fd2Fy bl9pZl9kZXN0X3Rvb19zbWFsbDAgKF9fZGVzdCwgX19sZW4pCiB7CiAgIHJl dHVybiBfX2J1aWx0aW5fX19tZW1jcHlfY2hrIChfX2Rlc3QsIF9fc3JjLCBf X2xlbiwgX19ib3MwIChfX2Rlc3QpKTsKIH0KIAotX19mb3J0aWZ5X2Z1bmN0 aW9uIHZvaWQgKgotX19OVEggKG1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgY29u c3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX2xlbikpCitfX2ZvcnRpZnlfcG90 ZW50aWFsX292ZXJsb2FkIHZvaWQgKgorX19OVEggKG1lbW1vdmUgKHZvaWQg KmNvbnN0IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZTAgX19kZXN0LAorCQlj b25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbGVuKSkKKyAgICAgX193YXJu X2lmX2Rlc3RfdG9vX3NtYWxsMCAoX19kZXN0LCBfX2xlbikKIHsKICAgcmV0 dXJuIF9fYnVpbHRpbl9fX21lbW1vdmVfY2hrIChfX2Rlc3QsIF9fc3JjLCBf X2xlbiwgX19ib3MwIChfX2Rlc3QpKTsKIH0KIAogI2lmZGVmIF9fVVNFX0dO VQotX19mb3J0aWZ5X2Z1bmN0aW9uIHZvaWQgKgotX19OVEggKG1lbXBjcHkg KHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBjb25zdCB2b2lkICpfX3Jlc3Ry aWN0IF9fc3JjLAotCQlzaXplX3QgX19sZW4pKQorX19mb3J0aWZ5X3BvdGVu dGlhbF9vdmVybG9hZCB2b2lkICoKK19fTlRIIChtZW1wY3B5ICh2b2lkICpf X3Jlc3RyaWN0IGNvbnN0IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZTAgX19k ZXN0LAorCQljb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg X19sZW4pKQorICAgICBfX3dhcm5faWZfZGVzdF90b29fc21hbGwwIChfX2Rl c3QsIF9fbGVuKQogewogICByZXR1cm4gX19idWlsdGluX19fbWVtcGNweV9j aGsgKF9fZGVzdCwgX19zcmMsIF9fbGVuLCBfX2JvczAgKF9fZGVzdCkpOwog fQogI2VuZGlmCiAKLQogLyogVGhlIGZpcnN0IHR3byB0ZXN0cyBoZXJlIGhl bHAgdG8gY2F0Y2ggYSBzb21ld2hhdCBjb21tb24gcHJvYmxlbQogICAgd2hl cmUgdGhlIHNlY29uZCBhbmQgdGhpcmQgcGFyYW1ldGVyIGFyZSB0cmFuc3Bv c2VkLiAgVGhpcyBpcwogICAgZXNwZWNpYWxseSBwcm9ibGVtYXRpYyBpZiB0 aGUgaW50ZW5kZWQgZmlsbCB2YWx1ZSBpcyB6ZXJvLiAgSW4gdGhpcwogICAg Y2FzZSBubyB3b3JrIGlzIGRvbmUgYXQgYWxsLiAgV2UgZGV0ZWN0IHRoZXNl IHByb2JsZW1zIGJ5IHJlZmVycmluZwogICAgbm9uLWV4aXN0aW5nIGZ1bmN0 aW9ucy4gICovCi1fX2ZvcnRpZnlfZnVuY3Rpb24gdm9pZCAqCi1fX05USCAo bWVtc2V0ICh2b2lkICpfX2Rlc3QsIGludCBfX2NoLCBzaXplX3QgX19sZW4p KQorI2RlZmluZSBfX3dhcm5fbWVtc2V0X3plcm9fbGVuX21zZyBcCisgICJt ZW1zZXQgdXNlZCB3aXRoIGNvbnN0YW50IHplcm8gbGVuZ3RoIHBhcmFtZXRl cjsgdGhpcyBjb3VsZCBiZSBkdWUgdG8gIiBcCisgICJ0cmFuc3Bvc2VkIHBh cmFtZXRlcnMiCisjaWYgIV9fR05VQ19QUkVSRVEgKDUsMCkKK19fd2FybmRl Y2wgKF9fd2Fybl9tZW1zZXRfemVyb19sZW4sIF9fd2Fybl9tZW1zZXRfemVy b19sZW5fbXNnKTsKKyNlbmRpZgorX19mb3J0aWZ5X3BvdGVudGlhbF9vdmVy bG9hZCB2b2lkICoKK19fTlRIIChtZW1zZXQgKHZvaWQgKmNvbnN0IF9fY2xh bmdfcGFzc19vYmplY3Rfc2l6ZTAgX19kZXN0LCBpbnQgX19jaCwKKwkgICAg ICAgc2l6ZV90IF9fbGVuKSkKKyAgICAgX193YXJuX2lmX2Rlc3RfdG9vX3Nt YWxsMCAoX19kZXN0LCBfX2xlbikKKyAgICAgX19jbGFuZ193YXJuaW5nX2lm IChfX2xlbiA9PSAwICYmIF9fY2ggIT0gMCwgX193YXJuX21lbXNldF96ZXJv X2xlbl9tc2cpCiB7CiAgIC8qIEdDQy01LjAgYW5kIG5ld2VyIGltcGxlbWVu dHMgdGhlc2UgY2hlY2tzIGluIHRoZSBjb21waWxlciwgc28gd2UgZG9uJ3QK ICAgICAgbmVlZCB0aGVtIGhlcmUuICAqLwotI2lmICFfX0dOVUNfUFJFUkVR ICg1LDApCisjaWYgIV9fR05VQ19QUkVSRVEgKDUsMCkgJiYgIWRlZmluZWQg X191c2VfY2xhbmdfZm9ydGlmeQogICBpZiAoX19idWlsdGluX2NvbnN0YW50 X3AgKF9fbGVuKSAmJiBfX2xlbiA9PSAwCiAgICAgICAmJiAoIV9fYnVpbHRp bl9jb25zdGFudF9wIChfX2NoKSB8fCBfX2NoICE9IDApKQogICAgIHsKQEAg LTcwLDYgKzk1LDcgQEAgX19OVEggKG1lbXNldCAodm9pZCAqX19kZXN0LCBp bnQgX19jaCwgc2l6ZV90IF9fbGVuKSkKICNlbmRpZgogICByZXR1cm4gX19i dWlsdGluX19fbWVtc2V0X2NoayAoX19kZXN0LCBfX2NoLCBfX2xlbiwgX19i b3MwIChfX2Rlc3QpKTsKIH0KKyN1bmRlZiBfX3dhcm5fbWVtc2V0X3plcm9f bGVuX21zZwogCiAjaWZkZWYgX19VU0VfTUlTQwogIyBpbmNsdWRlIDxiaXRz L3N0cmluZ3NfZm9ydGlmaWVkLmg+CkBAIC04NCwyNCArMTEwLDMwIEBAIF9f TlRIIChleHBsaWNpdF9iemVybyAodm9pZCAqX19kZXN0LCBzaXplX3QgX19s ZW4pKQogfQogI2VuZGlmCiAKLV9fZm9ydGlmeV9mdW5jdGlvbiBjaGFyICoK LV9fTlRIIChzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBjb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKSkKK19fZm9ydGlmeV9wb3RlbnRp YWxfb3ZlcmxvYWQgY2hhciAqCitfX05USCAoc3RyY3B5IChjaGFyICpfX3Jl c3RyaWN0IGNvbnN0IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZSBfX2Rlc3Qs CisJICAgICAgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpKQorICAg ICBfX3dhcm5faWZfc3JjX3Rvb19sYXJnZSAoX19kZXN0LCBfX3NyYykKIHsK ICAgcmV0dXJuIF9fYnVpbHRpbl9fX3N0cmNweV9jaGsgKF9fZGVzdCwgX19z cmMsIF9fYm9zIChfX2Rlc3QpKTsKIH0KIAogI2lmZGVmIF9fVVNFX0dOVQot X19mb3J0aWZ5X2Z1bmN0aW9uIGNoYXIgKgotX19OVEggKHN0cGNweSAoY2hh ciAqX19yZXN0cmljdCBfX2Rlc3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zcmMpKQorX19mb3J0aWZ5X3BvdGVudGlhbF9vdmVybG9hZCBjaGFyICoK K19fTlRIIChzdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgY29uc3QgX19jbGFu Z19wYXNzX29iamVjdF9zaXplIF9fZGVzdCwKKwkgICAgICAgY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3NyYykpCisgICAgIF9fd2Fybl9pZl9zcmNfdG9v X2xhcmdlIChfX2Rlc3QsIF9fc3JjKQogewogICByZXR1cm4gX19idWlsdGlu X19fc3RwY3B5X2NoayAoX19kZXN0LCBfX3NyYywgX19ib3MgKF9fZGVzdCkp OwogfQogI2VuZGlmCiAKLQotX19mb3J0aWZ5X2Z1bmN0aW9uIGNoYXIgKgot X19OVEggKHN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBjb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAotCQlzaXplX3QgX19sZW4pKQor X19mb3J0aWZ5X3BvdGVudGlhbF9vdmVybG9hZCBjaGFyICoKK19fTlRIIChz dHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IGNvbnN0IF9fY2xhbmdfcGFzc19v YmplY3Rfc2l6ZSBfX2Rlc3QsCisJCWNvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zcmMsIHNpemVfdCBfX2xlbikpCisvKiBjbGFuZzogRG9uJ3Qgd2FybiB3 aGVuIF9fYnVpbHRpbl9zdHJsZW4gKF9fc3JjKSA8IF9fYm9zIChfX2Rlc3Qp LAorICAgYnV0IF9fbGVuID4gX19ib3MgKF9fZGVzdCkuICBUaGUgdXNlciBz aG91bGQgZml4IHRoZWlyIGNvZGUgaW5zdGVhZC4gICovCisgICAgIF9fd2Fy bl9pZl9kZXN0X3Rvb19zbWFsbCAoX19kZXN0LCBfX2xlbikKIHsKICAgcmV0 dXJuIF9fYnVpbHRpbl9fX3N0cm5jcHlfY2hrIChfX2Rlc3QsIF9fc3JjLCBf X2xlbiwgX19ib3MgKF9fZGVzdCkpOwogfQpAQCAtMTEyLDI4ICsxNDQsMzYg QEAgZXh0ZXJuIGNoYXIgKl9fc3RwbmNweV9jaGsgKGNoYXIgKl9fZGVzdCwg Y29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiBleHRlcm4gY2hhciAq X19SRURJUkVDVF9OVEggKF9fc3RwbmNweV9hbGlhcywgKGNoYXIgKl9fZGVz dCwgY29uc3QgY2hhciAqX19zcmMsCiAJCQkJCSAgICAgICBzaXplX3QgX19u KSwgc3RwbmNweSk7CiAKLV9fZm9ydGlmeV9mdW5jdGlvbiBjaGFyICoKLV9f TlRIIChzdHBuY3B5IChjaGFyICpfX2Rlc3QsIGNvbnN0IGNoYXIgKl9fc3Jj LCBzaXplX3QgX19uKSkKK19fZm9ydGlmeV9wb3RlbnRpYWxfb3ZlcmxvYWQg Y2hhciAqCitfX05USCAoc3RwbmNweSAoY2hhciAqY29uc3QgX19jbGFuZ19w YXNzX29iamVjdF9zaXplIF9fZGVzdCwgY29uc3QgY2hhciAqX19zcmMsCisJ CXNpemVfdCBfX24pKQorICAgICBfX3dhcm5faWZfZGVzdF90b29fc21hbGwg KF9fZGVzdCwgX19uKQogewotICBpZiAoX19ib3MgKF9fZGVzdCkgIT0gKHNp emVfdCkgLTEKLSAgICAgICYmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9f bikgfHwgX19uID4gX19ib3MgKF9fZGVzdCkpKQorICBpZiAoX19ib3MgKF9f ZGVzdCkgIT0gKHNpemVfdCkgLTEpCiAgICAgcmV0dXJuIF9fc3RwbmNweV9j aGsgKF9fZGVzdCwgX19zcmMsIF9fbiwgX19ib3MgKF9fZGVzdCkpOwogICBy ZXR1cm4gX19zdHBuY3B5X2FsaWFzIChfX2Rlc3QsIF9fc3JjLCBfX24pOwog fQogCi0KLV9fZm9ydGlmeV9mdW5jdGlvbiBjaGFyICoKLV9fTlRIIChzdHJj YXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBjb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fc3JjKSkKK19fZm9ydGlmeV9wb3RlbnRpYWxfb3ZlcmxvYWQg Y2hhciAqCitfX05USCAoc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IGNvbnN0 IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZSBfX2Rlc3QsCisJICAgICAgIGNv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpKQorICAgICBfX3dhcm5faWZf c3JjX3Rvb19sYXJnZSAoX19kZXN0LCBfX3NyYykKIHsKICAgcmV0dXJuIF9f YnVpbHRpbl9fX3N0cmNhdF9jaGsgKF9fZGVzdCwgX19zcmMsIF9fYm9zIChf X2Rlc3QpKTsKIH0KIAotCi1fX2ZvcnRpZnlfZnVuY3Rpb24gY2hhciAqCi1f X05USCAoc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIGNvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCi0JCXNpemVfdCBfX2xlbikpCitf X2ZvcnRpZnlfcG90ZW50aWFsX292ZXJsb2FkIGNoYXIgKgorX19OVEggKHN0 cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgY29uc3QgX19jbGFuZ19wYXNzX29i amVjdF9zaXplIF9fZGVzdCwKKwkJY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3NyYywgc2l6ZV90IF9fbGVuKSkKKyAgICAgX193YXJuX2lmX3NyY190b29f bGFyZ2UgKF9fZGVzdCwgX19zcmMpCiB7CiAgIHJldHVybiBfX2J1aWx0aW5f X19zdHJuY2F0X2NoayAoX19kZXN0LCBfX3NyYywgX19sZW4sIF9fYm9zIChf X2Rlc3QpKTsKIH0KIAorI3VuZGVmIF9fd2Fybl9sZW5fdG9vX2xhcmdlCisj dW5kZWYgX19zaXplX3Rvb19zbWFsbAorI3VuZGVmIF9fd2Fybl9pZl9kZXN0 X3Rvb19zbWFsbAorI3VuZGVmIF9fd2Fybl9pZl9kZXN0X3Rvb19zbWFsbDAK KyN1bmRlZiBfX3dhcm5faW5wdXRfc3RyX3Rvb19sYXJnZQorI3VuZGVmIF9f d2Fybl9pZl9zcmNfdG9vX2xhcmdlCiAjZW5kaWYgLyogYml0cy9zdHJpbmdf Zm9ydGlmaWVkLmggKi8KZGlmZiAtLWdpdCBhL3N0cmluZy9iaXRzL3N0cmlu Z3NfZm9ydGlmaWVkLmggYi9zdHJpbmcvYml0cy9zdHJpbmdzX2ZvcnRpZmll ZC5oCmluZGV4IDQxMWU3ODYzZDYuLjIwOThhMzZkYTQgMTAwNjQ0Ci0tLSBh L3N0cmluZy9iaXRzL3N0cmluZ3NfZm9ydGlmaWVkLmgKKysrIGIvc3RyaW5n L2JpdHMvc3RyaW5nc19mb3J0aWZpZWQuaApAQCAtMTksMTYgKzE5LDMwIEBA CiAjaWZuZGVmIF9fU1RSSU5HU19GT1JUSUZJRUQKICMgZGVmaW5lIF9fU1RS SU5HU19GT1JUSUZJRUQgMQogCi1fX2ZvcnRpZnlfZnVuY3Rpb24gdm9pZAot X19OVEggKGJjb3B5IChjb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0 LCBzaXplX3QgX19sZW4pKQorI2RlZmluZSBfX3dhcm5fbGVuX3Rvb19sYXJn ZSBcCisgICJmdW5jdGlvbiBjYWxsZWQgd2l0aCBiaWdnZXIgbGVuZ3RoIHRo YW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciIKKworI2RlZmluZSBfX3NpemVf dG9vX3NtYWxsKGRlc3QsIGxlbikgXAorICAoX19ib3MwIChkZXN0KSAhPSAo c2l6ZV90KSAtMSAmJiBfX2JvczAgKGRlc3QpIDwgbGVuKQorCitfX2ZvcnRp ZnlfcG90ZW50aWFsX292ZXJsb2FkIHZvaWQKK19fTlRIIChiY29weSAoY29u c3Qgdm9pZCAqX19zcmMsIHZvaWQgKmNvbnN0IF9fY2xhbmdfcGFzc19vYmpl Y3Rfc2l6ZTAgX19kZXN0LAorCSAgICAgIHNpemVfdCBfX2xlbikpCisgICAg IF9fY2xhbmdfd2FybmluZ19pZiAoX19zaXplX3Rvb19zbWFsbCAoX19kZXN0 LCBfX2xlbiksCisJCQkgX193YXJuX2xlbl90b29fbGFyZ2UpCiB7CiAgICh2 b2lkKSBfX2J1aWx0aW5fX19tZW1tb3ZlX2NoayAoX19kZXN0LCBfX3NyYywg X19sZW4sIF9fYm9zMCAoX19kZXN0KSk7CiB9CiAKLV9fZm9ydGlmeV9mdW5j dGlvbiB2b2lkCi1fX05USCAoYnplcm8gKHZvaWQgKl9fZGVzdCwgc2l6ZV90 IF9fbGVuKSkKK19fZm9ydGlmeV9wb3RlbnRpYWxfb3ZlcmxvYWQgdm9pZAor X19OVEggKGJ6ZXJvICh2b2lkICpjb25zdCBfX2NsYW5nX3Bhc3Nfb2JqZWN0 X3NpemUwIF9fZGVzdCwgc2l6ZV90IF9fbGVuKSkKKyAgICAgX19jbGFuZ193 YXJuaW5nX2lmIChfX3NpemVfdG9vX3NtYWxsIChfX2Rlc3QsIF9fbGVuKSwK KwkJCSBfX3dhcm5fbGVuX3Rvb19sYXJnZSkKIHsKICAgKHZvaWQpIF9fYnVp bHRpbl9fX21lbXNldF9jaGsgKF9fZGVzdCwgJ1wwJywgX19sZW4sIF9fYm9z MCAoX19kZXN0KSk7CiB9CiAKKworI3VuZGVmIF9fc2l6ZV90b29fc21hbGwK KyN1bmRlZiBfX3dhcm5fbGVuX3Rvb19sYXJnZQogI2VuZGlmCmRpZmYgLS1n aXQgYS93Y3NtYnMvYml0cy93Y2hhcjIuaCBiL3djc21icy9iaXRzL3djaGFy Mi5oCmluZGV4IDRhNDYxZTZlMjkuLjdiOWRiNzgwNmUgMTAwNjQ0Ci0tLSBh L3djc21icy9iaXRzL3djaGFyMi5oCisrKyBiL3djc21icy9iaXRzL3djaGFy Mi5oCkBAIC0yMCw3ICsyMCw2IEBACiAjIGVycm9yICJOZXZlciBpbmNsdWRl IDxiaXRzL3djaGFyMi5oPiBkaXJlY3RseTsgdXNlIDx3Y2hhci5oPiBpbnN0 ZWFkLiIKICNlbmRpZgogCi0KIGV4dGVybiB3Y2hhcl90ICpfX3dtZW1jcHlf Y2hrICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAJCQkgICAgICAgY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uLAogCQkJ ICAgICAgIHNpemVfdCBfX25zMSkgX19USFJPVzsKQEAgLTI4LDU3ICsyNyw0 MiBAQCBleHRlcm4gd2NoYXJfdCAqX19SRURJUkVDVF9OVEggKF9fd21lbWNw eV9hbGlhcywKIAkJCQkod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogCQkJ CSBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24p LAogCQkJCXdtZW1jcHkpOwotZXh0ZXJuIHdjaGFyX3QgKl9fUkVESVJFQ1Rf TlRIIChfX3dtZW1jcHlfY2hrX3dhcm4sCi0JCQkJKHdjaGFyX3QgKl9fcmVz dHJpY3QgX19zMSwKLQkJCQkgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X3MyLCBzaXplX3QgX19uLAotCQkJCSBzaXplX3QgX19uczEpLCBfX3dtZW1j cHlfY2hrKQotICAgICBfX3dhcm5hdHRyICgid21lbWNweSBjYWxsZWQgd2l0 aCBsZW5ndGggYmlnZ2VyIHRoYW4gc2l6ZSBvZiBkZXN0aW5hdGlvbiAiCi0J CSAiYnVmZmVyIik7CiAKLV9fZm9ydGlmeV9mdW5jdGlvbiB3Y2hhcl90ICoK LV9fTlRIICh3bWVtY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsIGNv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwKLQkJc2l6ZV90IF9fbikp CitfX2ZvcnRpZnlfcG90ZW50aWFsX292ZXJsb2FkIHdjaGFyX3QgKgorX19O VEggKHdtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgY29uc3QgX19jbGFu Z19wYXNzX29iamVjdF9zaXplMCBfX3MxLAorCSAgICAgIGNvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikpCitfX0ZPUlRJRllf UFJFQ09ORElUSU9OUworICAgICBfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lG X0JPUzBfTFQyIChfX3dtZW1jcHlfd2FybiwgX19uLCBfX3MxLAorCQkJCQkg c2l6ZW9mICh3Y2hhcl90KSwKKwkJCQkJICJ3bWVtY3B5IGNhbGxlZCB3aXRo IGxlbmd0aCBiaWdnZXIgIgorCQkJCQkgInRoYW4gc2l6ZSBvZiBkZXN0aW5h dGlvbiBidWZmZXIiKQogewotICBpZiAoX19ib3MwIChfX3MxKSAhPSAoc2l6 ZV90KSAtMSkKLSAgICB7Ci0gICAgICBpZiAoIV9fYnVpbHRpbl9jb25zdGFu dF9wIChfX24pKQotCXJldHVybiBfX3dtZW1jcHlfY2hrIChfX3MxLCBfX3My LCBfX24sCi0JCQkgICAgICBfX2JvczAgKF9fczEpIC8gc2l6ZW9mICh3Y2hh cl90KSk7Ci0KLSAgICAgIGlmIChfX24gPiBfX2JvczAgKF9fczEpIC8gc2l6 ZW9mICh3Y2hhcl90KSkKLQlyZXR1cm4gX193bWVtY3B5X2Noa193YXJuIChf X3MxLCBfX3MyLCBfX24sCi0JCQkJICAgX19ib3MwIChfX3MxKSAvIHNpemVv ZiAod2NoYXJfdCkpOwotICAgIH0KLSAgcmV0dXJuIF9fd21lbWNweV9hbGlh cyAoX19zMSwgX19zMiwgX19uKTsKKyAgaWYgKF9fRk9SVElGWV9DQUxMX0NI SyAmJiBfX2JvczAgKF9fczEpICE9IChzaXplX3QpLTEpCisgICAgcmV0dXJu IF9fd21lbWNweV9jaGsoX19zMSwgX19zMiwgX19uLCBfX2JvczAoX19zMSkg LyBzaXplb2YgKHdjaGFyX3QpKTsKKyAgcmV0dXJuIF9fd21lbWNweV9hbGlh cyhfX3MxLCBfX3MyLCBfX24pOwogfQotCitfX0ZPUlRJRllfRlVOQ1RJT05f RU5ECiAKIGV4dGVybiB3Y2hhcl90ICpfX3dtZW1tb3ZlX2NoayAod2NoYXJf dCAqX19zMSwgY29uc3Qgd2NoYXJfdCAqX19zMiwKIAkJCQlzaXplX3QgX19u LCBzaXplX3QgX19uczEpIF9fVEhST1c7CiBleHRlcm4gd2NoYXJfdCAqX19S RURJUkVDVF9OVEggKF9fd21lbW1vdmVfYWxpYXMsICh3Y2hhcl90ICpfX3Mx LAogCQkJCQkJICAgY29uc3Qgd2NoYXJfdCAqX19zMiwKIAkJCQkJCSAgIHNp emVfdCBfX24pLCB3bWVtbW92ZSk7Ci1leHRlcm4gd2NoYXJfdCAqX19SRURJ UkVDVF9OVEggKF9fd21lbW1vdmVfY2hrX3dhcm4sCi0JCQkJKHdjaGFyX3Qg Kl9fczEsIGNvbnN0IHdjaGFyX3QgKl9fczIsCi0JCQkJIHNpemVfdCBfX24s IHNpemVfdCBfX25zMSksIF9fd21lbW1vdmVfY2hrKQotICAgICBfX3dhcm5h dHRyICgid21lbW1vdmUgY2FsbGVkIHdpdGggbGVuZ3RoIGJpZ2dlciB0aGFu IHNpemUgb2YgZGVzdGluYXRpb24gIgotCQkgImJ1ZmZlciIpOwotCi1fX2Zv cnRpZnlfZnVuY3Rpb24gd2NoYXJfdCAqCi1fX05USCAod21lbW1vdmUgKHdj aGFyX3QgKl9fczEsIGNvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24p KQorCitfX2ZvcnRpZnlfcG90ZW50aWFsX292ZXJsb2FkIHdjaGFyX3QgKgor X19OVEggKHdtZW1tb3ZlICh3Y2hhcl90ICpjb25zdCBfX2NsYW5nX3Bhc3Nf b2JqZWN0X3NpemUwIF9fczEsCisJCSBjb25zdCB3Y2hhcl90ICpfX3MyLCBz aXplX3QgX19uKSkKK19fRk9SVElGWV9QUkVDT05ESVRJT05TCisgICAgIF9f Rk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9TMF9MVDIgKF9fd21lbW1vdmVf d2FybiwgX19uLCBfX3MxLAorCQkJCQkgc2l6ZW9mICh3Y2hhcl90KSwKKwkJ CQkJICJ3bWVtbW92ZSBjYWxsZWQgd2l0aCBsZW5ndGggYmlnZ2VyICIKKwkJ CQkJICJ0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVyIikKIHsKLSAg aWYgKF9fYm9zMCAoX19zMSkgIT0gKHNpemVfdCkgLTEpCi0gICAgewotICAg ICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uKSkKLQlyZXR1cm4g X193bWVtbW92ZV9jaGsgKF9fczEsIF9fczIsIF9fbiwKLQkJCSAgICAgICBf X2JvczAgKF9fczEpIC8gc2l6ZW9mICh3Y2hhcl90KSk7Ci0KLSAgICAgIGlm IChfX24gPiBfX2JvczAgKF9fczEpIC8gc2l6ZW9mICh3Y2hhcl90KSkKLQly ZXR1cm4gX193bWVtbW92ZV9jaGtfd2FybiAoX19zMSwgX19zMiwgX19uLAot CQkJCSAgICBfX2JvczAgKF9fczEpIC8gc2l6ZW9mICh3Y2hhcl90KSk7Ci0g ICAgfQorICBpZiAoX19GT1JUSUZZX0NBTExfQ0hLICYmIF9fYm9zMCAoX19z MSkgIT0gKHNpemVfdCkgLTEpCisgICAgcmV0dXJuIF9fd21lbW1vdmVfY2hr IChfX3MxLCBfX3MyLCBfX24sIF9fYm9zMCAoX19zMSkgLyBzaXplb2YgKHdj aGFyX3QpKTsKICAgcmV0dXJuIF9fd21lbW1vdmVfYWxpYXMgKF9fczEsIF9f czIsIF9fbik7CiB9CitfX0ZPUlRJRllfRlVOQ1RJT05fRU5ECiAKIAogI2lm ZGVmIF9fVVNFX0dOVQpAQCAtODksMjkgKzczLDIxIEBAIGV4dGVybiB3Y2hh cl90ICpfX1JFRElSRUNUX05USCAoX193bWVtcGNweV9hbGlhcywKIAkJCQko d2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogCQkJCSBjb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fczIsCiAJCQkJIHNpemVfdCBfX24pLCB3bWVtcGNw eSk7Ci1leHRlcm4gd2NoYXJfdCAqX19SRURJUkVDVF9OVEggKF9fd21lbXBj cHlfY2hrX3dhcm4sCi0JCQkJKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwK LQkJCQkgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3Qg X19uLAotCQkJCSBzaXplX3QgX19uczEpLCBfX3dtZW1wY3B5X2NoaykKLSAg ICAgX193YXJuYXR0ciAoIndtZW1wY3B5IGNhbGxlZCB3aXRoIGxlbmd0aCBi aWdnZXIgdGhhbiBzaXplIG9mIGRlc3RpbmF0aW9uICIKLQkJICJidWZmZXIi KTsKLQotX19mb3J0aWZ5X2Z1bmN0aW9uIHdjaGFyX3QgKgotX19OVEggKHdt ZW1wY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsIGNvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zMiwKLQkJIHNpemVfdCBfX24pKQorCitfX2Zv cnRpZnlfcG90ZW50aWFsX292ZXJsb2FkIHdjaGFyX3QgKgorX19OVEgod21l bXBjcHkod2NoYXJfdCAqX19yZXN0cmljdCBjb25zdCBfX2NsYW5nX3Bhc3Nf b2JqZWN0X3NpemUwIF9fczEsCisgICAgICAgICAgICAgICBjb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pKQorX19GT1JUSUZZ X1BSRUNPTkRJVElPTlMKKyAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05MWV9J Rl9CT1MwX0xUMiAoX193bWVtcGNweV93YXJuLCBfX24sIF9fczEsCisJCQkJ CSBzaXplb2YgKHdjaGFyX3QpLAorCQkJCQkgIndtZW1wY3B5IGNhbGxlZCB3 aXRoIGxlbmd0aCBiaWdnZXIgIgorCQkJCQkgInRoYW4gc2l6ZSBvZiBkZXN0 aW5hdGlvbiBidWZmZXIiKQogewotICBpZiAoX19ib3MwIChfX3MxKSAhPSAo c2l6ZV90KSAtMSkKLSAgICB7Ci0gICAgICBpZiAoIV9fYnVpbHRpbl9jb25z dGFudF9wIChfX24pKQotCXJldHVybiBfX3dtZW1wY3B5X2NoayAoX19zMSwg X19zMiwgX19uLAotCQkJICAgICAgIF9fYm9zMCAoX19zMSkgLyBzaXplb2Yg KHdjaGFyX3QpKTsKLQotICAgICAgaWYgKF9fbiA+IF9fYm9zMCAoX19zMSkg LyBzaXplb2YgKHdjaGFyX3QpKQotCXJldHVybiBfX3dtZW1wY3B5X2Noa193 YXJuIChfX3MxLCBfX3MyLCBfX24sCi0JCQkJICAgIF9fYm9zMCAoX19zMSkg LyBzaXplb2YgKHdjaGFyX3QpKTsKLSAgICB9Ci0gIHJldHVybiBfX3dtZW1w Y3B5X2FsaWFzIChfX3MxLCBfX3MyLCBfX24pOworICBpZiAoX19GT1JUSUZZ X0NBTExfQ0hLICYmIF9fYm9zMCAoX19zMSkgIT0gKHNpemVfdCktMSkKKyAg ICByZXR1cm4gX193bWVtcGNweV9jaGsoX19zMSwgX19zMiwgX19uLCBfX2Jv czAoX19zMSkgLyBzaXplb2YgKHdjaGFyX3QpKTsKKyAgcmV0dXJuIF9fd21l bXBjcHlfYWxpYXMoX19zMSwgX19zMiwgX19uKTsKIH0KK19fRk9SVElGWV9G VU5DVElPTl9FTkQKICNlbmRpZgogCiAKQEAgLTExOSwyNiArOTUsMjEgQEAg ZXh0ZXJuIHdjaGFyX3QgKl9fd21lbXNldF9jaGsgKHdjaGFyX3QgKl9fcywg d2NoYXJfdCBfX2MsIHNpemVfdCBfX24sCiAJCQkgICAgICAgc2l6ZV90IF9f bnMpIF9fVEhST1c7CiBleHRlcm4gd2NoYXJfdCAqX19SRURJUkVDVF9OVEgg KF9fd21lbXNldF9hbGlhcywgKHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2Ms CiAJCQkJCQkgIHNpemVfdCBfX24pLCB3bWVtc2V0KTsKLWV4dGVybiB3Y2hh cl90ICpfX1JFRElSRUNUX05USCAoX193bWVtc2V0X2Noa193YXJuLAotCQkJ CSh3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uLAotCQkJ CSBzaXplX3QgX19ucyksIF9fd21lbXNldF9jaGspCi0gICAgIF9fd2FybmF0 dHIgKCJ3bWVtc2V0IGNhbGxlZCB3aXRoIGxlbmd0aCBiaWdnZXIgdGhhbiBz aXplIG9mIGRlc3RpbmF0aW9uICIKLQkJICJidWZmZXIiKTsKLQotX19mb3J0 aWZ5X2Z1bmN0aW9uIHdjaGFyX3QgKgotX19OVEggKHdtZW1zZXQgKHdjaGFy X3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pKQorCitfX2ZvcnRp ZnlfcG90ZW50aWFsX292ZXJsb2FkIHdjaGFyX3QgKgorX19OVEggKHdtZW1z ZXQgKHdjaGFyX3QgKmNvbnN0IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZTAg X19zLCB3Y2hhcl90IF9fYywKKwkJc2l6ZV90IF9fbikpCitfX0ZPUlRJRllf UFJFQ09ORElUSU9OUworICAgICBfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lG X0JPUzBfTFQyIChfX3dtZW1zZXRfd2FybiwgX19uLCBfX3MsCisJCQkJCSBz aXplb2YgKHdjaGFyX3QpLAorCQkJCQkgIndtZW1zZXQgY2FsbGVkIHdpdGgg bGVuZ3RoIGJpZ2dlciAiCisJCQkJCSAidGhhbiBzaXplIG9mIGRlc3RpbmF0 aW9uIGJ1ZmZlciIpCiB7Ci0gIGlmIChfX2JvczAgKF9fcykgIT0gKHNpemVf dCkgLTEpCi0gICAgewotICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRf cCAoX19uKSkKLQlyZXR1cm4gX193bWVtc2V0X2NoayAoX19zLCBfX2MsIF9f biwgX19ib3MwIChfX3MpIC8gc2l6ZW9mICh3Y2hhcl90KSk7Ci0KLSAgICAg IGlmIChfX24gPiBfX2JvczAgKF9fcykgLyBzaXplb2YgKHdjaGFyX3QpKQot CXJldHVybiBfX3dtZW1zZXRfY2hrX3dhcm4gKF9fcywgX19jLCBfX24sCi0J CQkJICAgX19ib3MwIChfX3MpIC8gc2l6ZW9mICh3Y2hhcl90KSk7Ci0gICAg fQorICBpZiAoX19GT1JUSUZZX0NBTExfQ0hLICYmIF9fYm9zMCAoX19zKSAh PSAoc2l6ZV90KSAtMSkKKyAgICByZXR1cm4gX193bWVtc2V0X2NoayAoX19z LCBfX2MsIF9fbiwgX19ib3MwIChfX3MpIC8gc2l6ZW9mICh3Y2hhcl90KSk7 CiAgIHJldHVybiBfX3dtZW1zZXRfYWxpYXMgKF9fcywgX19jLCBfX24pOwog fQorX19GT1JUSUZZX0ZVTkNUSU9OX0VORAogCiAKIGV4dGVybiB3Y2hhcl90 ICpfX3djc2NweV9jaGsgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LApA QCAtMTQ4LDggKzExOSw5IEBAIGV4dGVybiB3Y2hhcl90ICpfX1JFRElSRUNU X05USCAoX193Y3NjcHlfYWxpYXMsCiAJCQkJKHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19kZXN0LAogCQkJCSBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f c3JjKSwgd2NzY3B5KTsKIAotX19mb3J0aWZ5X2Z1bmN0aW9uIHdjaGFyX3Qg KgotX19OVEggKHdjc2NweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3Qs IGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpKQorX19mb3J0aWZ5 X3BvdGVudGlhbF9vdmVybG9hZCB3Y2hhcl90ICoKK19fTlRIICh3Y3NjcHkg KHdjaGFyX3QgKl9fcmVzdHJpY3QgY29uc3QgX19jbGFuZ19wYXNzX29iamVj dF9zaXplIF9fZGVzdCwKKwkgICAgICAgY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX3NyYykpCiB7CiAgIGlmIChfX2JvcyAoX19kZXN0KSAhPSAoc2l6 ZV90KSAtMSkKICAgICByZXR1cm4gX193Y3NjcHlfY2hrIChfX2Rlc3QsIF9f c3JjLCBfX2JvcyAoX19kZXN0KSAvIHNpemVvZiAod2NoYXJfdCkpOwpAQCAt MTY0LDggKzEzNiw5IEBAIGV4dGVybiB3Y2hhcl90ICpfX1JFRElSRUNUX05U SCAoX193Y3BjcHlfYWxpYXMsCiAJCQkJKHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19kZXN0LAogCQkJCSBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3Jj KSwgd2NwY3B5KTsKIAotX19mb3J0aWZ5X2Z1bmN0aW9uIHdjaGFyX3QgKgot X19OVEggKHdjcGNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsIGNv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpKQorX19mb3J0aWZ5X3Bv dGVudGlhbF9vdmVybG9hZCB3Y2hhcl90ICoKK19fTlRIICh3Y3BjcHkgKHdj aGFyX3QgKl9fcmVzdHJpY3QgY29uc3QgX19jbGFuZ19wYXNzX29iamVjdF9z aXplIF9fZGVzdCwKKwkgICAgICAgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX3NyYykpCiB7CiAgIGlmIChfX2JvcyAoX19kZXN0KSAhPSAoc2l6ZV90 KSAtMSkKICAgICByZXR1cm4gX193Y3BjcHlfY2hrIChfX2Rlc3QsIF9fc3Jj LCBfX2JvcyAoX19kZXN0KSAvIHNpemVvZiAod2NoYXJfdCkpOwpAQCAtMTgw LDI4ICsxNTMsMjIgQEAgZXh0ZXJuIHdjaGFyX3QgKl9fUkVESVJFQ1RfTlRI IChfX3djc25jcHlfYWxpYXMsCiAJCQkJKHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19kZXN0LAogCQkJCSBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3Jj LAogCQkJCSBzaXplX3QgX19uKSwgd2NzbmNweSk7Ci1leHRlcm4gd2NoYXJf dCAqX19SRURJUkVDVF9OVEggKF9fd2NzbmNweV9jaGtfd2FybiwKLQkJCQko d2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCi0JCQkJIGNvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zcmMsCi0JCQkJIHNpemVfdCBfX24sIHNpemVf dCBfX2Rlc3RsZW4pLCBfX3djc25jcHlfY2hrKQotICAgICBfX3dhcm5hdHRy ICgid2NzbmNweSBjYWxsZWQgd2l0aCBsZW5ndGggYmlnZ2VyIHRoYW4gc2l6 ZSBvZiBkZXN0aW5hdGlvbiAiCi0JCSAiYnVmZmVyIik7CiAKLV9fZm9ydGlm eV9mdW5jdGlvbiB3Y2hhcl90ICoKLV9fTlRIICh3Y3NuY3B5ICh3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fZGVzdCwgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX3NyYywKLQkJc2l6ZV90IF9fbikpCitfX2ZvcnRpZnlfcG90ZW50aWFs X292ZXJsb2FkIHdjaGFyX3QgKgorX19OVEggKHdjc25jcHkgKHdjaGFyX3Qg Kl9fcmVzdHJpY3QgY29uc3QgX19jbGFuZ19wYXNzX29iamVjdF9zaXplIF9f ZGVzdCwKKwkJY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6 ZV90IF9fbikpCitfX0ZPUlRJRllfUFJFQ09ORElUSU9OUworICAgICBfX0ZP UlRJRllfV0FSTklOR19PTkxZX0lGX0JPU19MVDIgKF9fd2NzbmNweV93YXJu LCBfX24sIF9fZGVzdCwKKwkJCQkJc2l6ZW9mICh3Y2hhcl90KSwKKwkJCQkJ Indjc25jcHkgY2FsbGVkIHdpdGggbGVuZ3RoIGJpZ2dlciAiCisJCQkJCSJ0 aGFuIHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVyIikKIHsKLSAgaWYgKF9f Ym9zIChfX2Rlc3QpICE9IChzaXplX3QpIC0xKQotICAgIHsKLSAgICAgIGlm ICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fbikpCi0JcmV0dXJuIF9fd2Nz bmNweV9jaGsgKF9fZGVzdCwgX19zcmMsIF9fbiwKLQkJCSAgICAgIF9fYm9z IChfX2Rlc3QpIC8gc2l6ZW9mICh3Y2hhcl90KSk7Ci0gICAgICBpZiAoX19u ID4gX19ib3MgKF9fZGVzdCkgLyBzaXplb2YgKHdjaGFyX3QpKQotCXJldHVy biBfX3djc25jcHlfY2hrX3dhcm4gKF9fZGVzdCwgX19zcmMsIF9fbiwKLQkJ CQkgICBfX2JvcyAoX19kZXN0KSAvIHNpemVvZiAod2NoYXJfdCkpOwotICAg IH0KKyAgaWYgKF9fRk9SVElGWV9DQUxMX0NISyAmJiBfX2JvcyAoX19kZXN0 KSAhPSAoc2l6ZV90KSAtMSkKKyAgICByZXR1cm4gX193Y3NuY3B5X2NoayAo X19kZXN0LCBfX3NyYywgX19uLAorCQkJICBfX2JvcyAoX19kZXN0KSAvIHNp emVvZiAod2NoYXJfdCkpOwogICByZXR1cm4gX193Y3NuY3B5X2FsaWFzIChf X2Rlc3QsIF9fc3JjLCBfX24pOwogfQorX19GT1JUSUZZX0ZVTkNUSU9OX0VO RAogCiAKIGV4dGVybiB3Y2hhcl90ICpfX3djcG5jcHlfY2hrICh3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fZGVzdCwKQEAgLTIxMSwyOSArMTc4LDIyIEBAIGV4 dGVybiB3Y2hhcl90ICpfX1JFRElSRUNUX05USCAoX193Y3BuY3B5X2FsaWFz LAogCQkJCSh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKIAkJCQkgY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywKIAkJCQkgc2l6ZV90IF9f biksIHdjcG5jcHkpOwotZXh0ZXJuIHdjaGFyX3QgKl9fUkVESVJFQ1RfTlRI IChfX3djcG5jcHlfY2hrX3dhcm4sCi0JCQkJKHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19kZXN0LAotCQkJCSBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f c3JjLAotCQkJCSBzaXplX3QgX19uLCBzaXplX3QgX19kZXN0bGVuKSwgX193 Y3BuY3B5X2NoaykKLSAgICAgX193YXJuYXR0ciAoIndjcG5jcHkgY2FsbGVk IHdpdGggbGVuZ3RoIGJpZ2dlciB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24g IgotCQkgImJ1ZmZlciIpOwogCi1fX2ZvcnRpZnlfZnVuY3Rpb24gd2NoYXJf dCAqCi1fX05USCAod2NwbmNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rl c3QsIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsCi0JCXNpemVf dCBfX24pKQorX19mb3J0aWZ5X3BvdGVudGlhbF9vdmVybG9hZCB3Y2hhcl90 ICoKK19fTlRIICh3Y3BuY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IGNvbnN0 IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZSBfX2Rlc3QsCisJCWNvbnN0IHdj aGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pKQorX19GT1JU SUZZX1BSRUNPTkRJVElPTlMKKyAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05M WV9JRl9CT1NfTFQyIChfX3djcG5jcHlfd2FybiwgX19uLCBfX2Rlc3QsCisJ CQkJCXNpemVvZiAod2NoYXJfdCksCisJCQkJCSJ3Y3BuY3B5IGNhbGxlZCB3 aXRoIGxlbmd0aCBiaWdnZXIgIgorCQkJCQkidGhhbiBzaXplIG9mIGRlc3Rp bmF0aW9uIGJ1ZmZlciIpCiB7Ci0gIGlmIChfX2JvcyAoX19kZXN0KSAhPSAo c2l6ZV90KSAtMSkKLSAgICB7Ci0gICAgICBpZiAoIV9fYnVpbHRpbl9jb25z dGFudF9wIChfX24pKQotCXJldHVybiBfX3djcG5jcHlfY2hrIChfX2Rlc3Qs IF9fc3JjLCBfX24sCi0JCQkgICAgICBfX2JvcyAoX19kZXN0KSAvIHNpemVv ZiAod2NoYXJfdCkpOwotICAgICAgaWYgKF9fbiA+IF9fYm9zIChfX2Rlc3Qp IC8gc2l6ZW9mICh3Y2hhcl90KSkKLQlyZXR1cm4gX193Y3BuY3B5X2Noa193 YXJuIChfX2Rlc3QsIF9fc3JjLCBfX24sCi0JCQkJICAgX19ib3MgKF9fZGVz dCkgLyBzaXplb2YgKHdjaGFyX3QpKTsKLSAgICB9CisgIGlmIChfX0ZPUlRJ RllfQ0FMTF9DSEsgJiYgX19ib3MgKF9fZGVzdCkgIT0gKHNpemVfdCkgLTEp CisgICAgcmV0dXJuIF9fd2NwbmNweV9jaGsgKF9fZGVzdCwgX19zcmMsIF9f biwKKwkJCSAgX19ib3MgKF9fZGVzdCkgLyBzaXplb2YgKHdjaGFyX3QpKTsK ICAgcmV0dXJuIF9fd2NwbmNweV9hbGlhcyAoX19kZXN0LCBfX3NyYywgX19u KTsKIH0KLQorX19GT1JUSUZZX0ZVTkNUSU9OX0VORAogCiBleHRlcm4gd2No YXJfdCAqX193Y3NjYXRfY2hrICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVz dCwKIAkJCSAgICAgIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMs CkBAIC0yNDIsOCArMjAyLDkgQEAgZXh0ZXJuIHdjaGFyX3QgKl9fUkVESVJF Q1RfTlRIIChfX3djc2NhdF9hbGlhcywKIAkJCQkod2NoYXJfdCAqX19yZXN0 cmljdCBfX2Rlc3QsCiAJCQkJIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19zcmMpLCB3Y3NjYXQpOwogCi1fX2ZvcnRpZnlfZnVuY3Rpb24gd2NoYXJf dCAqCi1fX05USCAod2NzY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVz dCwgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykpCitfX2ZvcnRp ZnlfcG90ZW50aWFsX292ZXJsb2FkIHdjaGFyX3QgKgorX19OVEggKHdjc2Nh dCAod2NoYXJfdCAqX19yZXN0cmljdCBjb25zdCBfX2NsYW5nX3Bhc3Nfb2Jq ZWN0X3NpemUgX19kZXN0LAorCSAgICAgICBjb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fc3JjKSkKIHsKICAgaWYgKF9fYm9zIChfX2Rlc3QpICE9IChz aXplX3QpIC0xKQogICAgIHJldHVybiBfX3djc2NhdF9jaGsgKF9fZGVzdCwg X19zcmMsIF9fYm9zIChfX2Rlc3QpIC8gc2l6ZW9mICh3Y2hhcl90KSk7CkBA IC0yNTksOSArMjIwLDkgQEAgZXh0ZXJuIHdjaGFyX3QgKl9fUkVESVJFQ1Rf TlRIIChfX3djc25jYXRfYWxpYXMsCiAJCQkJIGNvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19zcmMsCiAJCQkJIHNpemVfdCBfX24pLCB3Y3NuY2F0KTsK IAotX19mb3J0aWZ5X2Z1bmN0aW9uIHdjaGFyX3QgKgotX19OVEggKHdjc25j YXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LCBjb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fc3JjLAotCQlzaXplX3QgX19uKSkKK19fZm9ydGlm eV9wb3RlbnRpYWxfb3ZlcmxvYWQgd2NoYXJfdCAqCitfX05USCAod2NzbmNh dCAod2NoYXJfdCAqX19yZXN0cmljdCBjb25zdCBfX2NsYW5nX3Bhc3Nfb2Jq ZWN0X3NpemUgX19kZXN0LAorCQljb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fc3JjLCBzaXplX3QgX19uKSkKIHsKICAgaWYgKF9fYm9zIChfX2Rlc3Qp ICE9IChzaXplX3QpIC0xKQogICAgIHJldHVybiBfX3djc25jYXRfY2hrIChf X2Rlc3QsIF9fc3JjLCBfX24sCkBAIC0yODAsMTYgKzI0MSwzNCBAQCBleHRl cm4gaW50IF9fUkVESVJFQ1RfTlRIX0xEQkwgKF9fc3dwcmludGZfYWxpYXMs CiAJCQkJIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mbXQsIC4uLiks CiAJCQkJc3dwcmludGYpOwogCi0jaWZkZWYgX192YV9hcmdfcGFjawotX19m b3J0aWZ5X2Z1bmN0aW9uIGludAotX19OVEggKHN3cHJpbnRmICh3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKLQkJIGNvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikpCitleHRlcm4gaW50IF9fdnN3 cHJpbnRmX2NoayAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBf X24sCisJCQkgICAgaW50IF9fZmxhZywgc2l6ZV90IF9fc19sZW4sCisJCQkg ICAgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKKwkJCSAg ICBfX2dudWNfdmFfbGlzdCBfX2FyZykKKyAgICAgX19USFJPVyAvKiBfX2F0 dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX193cHJpbnRmX18sIDUsIDApKSkg Ki87CisKK2V4dGVybiBpbnQgX19SRURJUkVDVF9OVEhfTERCTCAoX192c3dw cmludGZfYWxpYXMsCisJCQkJKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBz aXplX3QgX19uLAorCQkJCSBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f Zm10LAorCQkJCSBfX2dudWNfdmFfbGlzdCBfX2FwKSwgdnN3cHJpbnRmKTsK KworI2lmZGVmIF9fRk9SVElGWV9BUkdfUEFDS19PSworX19mb3J0aWZ5X3Bv dGVudGlhbF9vdmVybG9hZCBpbnQKK19fTlRIIChzd3ByaW50ZiAod2NoYXJf dCAqX19yZXN0cmljdCBjb25zdCBfX2NsYW5nX3Bhc3Nfb2JqZWN0X3NpemUg X19zLAorCQkgc2l6ZV90IF9fbiwgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX2ZtdCwgLi4uKSkKIHsKKyAgX19GT1JUSUZZX0lOSVRfQVJHX1BBQ0so X19mbXQpOworICBpbnQgX19yZXN1bHQ7CiAgIGlmIChfX2JvcyAoX19zKSAh PSAoc2l6ZV90KSAtMSB8fCBfX1VTRV9GT1JUSUZZX0xFVkVMID4gMSkKLSAg ICByZXR1cm4gX19zd3ByaW50Zl9jaGsgKF9fcywgX19uLCBfX1VTRV9GT1JU SUZZX0xFVkVMIC0gMSwKLQkJCSAgIF9fYm9zIChfX3MpIC8gc2l6ZW9mICh3 Y2hhcl90KSwKLQkJCSAgIF9fZm10LCBfX3ZhX2FyZ19wYWNrICgpKTsKLSAg cmV0dXJuIF9fc3dwcmludGZfYWxpYXMgKF9fcywgX19uLCBfX2ZtdCwgX192 YV9hcmdfcGFjayAoKSk7CisgICAgX19yZXN1bHQgPSBfX0ZPUlRJRllfQ0FM TF9WQV9DSEsoc3dwcmludGYsIF9fcywgX19uLAorCQkJCSAgICAgX19VU0Vf Rk9SVElGWV9MRVZFTCAtIDEsCisJCQkJICAgICBfX2JvcyAoX19zKSAvIHNp emVvZiAod2NoYXJfdCksIF9fZm10LAorCQkJCSAgICAgX19GT1JUSUZZX0FS R19QQUNLKTsKKyAgZWxzZQorICAgIF9fcmVzdWx0ID0gX19GT1JUSUZZX0NB TExfVkFfQUxJQVMoc3dwcmludGYsIF9fcywgX19uLCBfX2ZtdCwKKwkJCQkg ICAgICAgX19GT1JUSUZZX0FSR19QQUNLKTsKKyAgX19GT1JUSUZZX0ZSRUVf QVJHX1BBQ0soKTsKKyAgcmV0dXJuIF9fcmVzdWx0OwogfQogI2VsaWYgIWRl ZmluZWQgX19jcGx1c3BsdXMKIC8qIFhYWCBXZSBtaWdodCB3YW50IHRvIGhh dmUgc3VwcG9ydCBpbiBnY2MgZm9yIHN3cHJpbnRmLiAgKi8KQEAgLTMwMCwy MCArMjc5LDEwIEBAIF9fTlRIIChzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0 cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICA6IHN3cHJpbnRmIChzLCBuLCBf X1ZBX0FSR1NfXykpCiAjZW5kaWYKIAotZXh0ZXJuIGludCBfX3Zzd3ByaW50 Zl9jaGsgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAot CQkJICAgIGludCBfX2ZsYWcsIHNpemVfdCBfX3NfbGVuLAotCQkJICAgIGNv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCi0JCQkgICAgX19n bnVjX3ZhX2xpc3QgX19hcmcpCi0gICAgIF9fVEhST1cgLyogX19hdHRyaWJ1 dGVfXyAoKF9fZm9ybWF0X18gKF9fd3ByaW50Zl9fLCA1LCAwKSkpICovOwot Ci1leHRlcm4gaW50IF9fUkVESVJFQ1RfTlRIX0xEQkwgKF9fdnN3cHJpbnRm X2FsaWFzLAotCQkJCSh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90 IF9fbiwKLQkJCQkgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2ZtdCwK LQkJCQkgX19nbnVjX3ZhX2xpc3QgX19hcCksIHZzd3ByaW50Zik7Ci0KLV9f Zm9ydGlmeV9mdW5jdGlvbiBpbnQKLV9fTlRIICh2c3dwcmludGYgKHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAotCQkgIGNvbnN0IHdj aGFyX3QgKl9fcmVzdHJpY3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXAp KQorX19mb3J0aWZ5X3BvdGVudGlhbF9vdmVybG9hZCBpbnQKK19fTlRIICh2 c3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgY29uc3QgX19jbGFuZ19w YXNzX29iamVjdF9zaXplIF9fcywKKwkJICBzaXplX3QgX19uLCBjb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm10LAorCQkgIF9fZ251Y192YV9saXN0 IF9fYXApKQogewogICBpZiAoX19ib3MgKF9fcykgIT0gKHNpemVfdCkgLTEg fHwgX19VU0VfRk9SVElGWV9MRVZFTCA+IDEpCiAgICAgcmV0dXJuIF9fdnN3 cHJpbnRmX2NoayAoX19zLCBfX24sICBfX1VTRV9GT1JUSUZZX0xFVkVMIC0g MSwKQEAgLTMzNCwxOCArMzAzLDI3IEBAIGV4dGVybiBpbnQgX192Zndwcmlu dGZfY2hrIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGludCBfX2Zs YWcsCiBleHRlcm4gaW50IF9fdndwcmludGZfY2hrIChpbnQgX19mbGFnLCBj b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogCQkJICAgX19n bnVjX3ZhX2xpc3QgX19hcCk7CiAKLSMgaWZkZWYgX192YV9hcmdfcGFjawot X19mb3J0aWZ5X2Z1bmN0aW9uIGludAotd3ByaW50ZiAoY29uc3Qgd2NoYXJf dCAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQorCisjaWZkZWYgX19GT1JUSUZZ X0FSR19QQUNLX09LCitfX2ZvcnRpZnlfcG90ZW50aWFsX292ZXJsb2FkIGlu dAord3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBjb25zdCBf X2NsYW5nX3Bhc3Nfb2JqZWN0X3NpemUgX19mbXQsIC4uLikKIHsKLSAgcmV0 dXJuIF9fd3ByaW50Zl9jaGsgKF9fVVNFX0ZPUlRJRllfTEVWRUwgLSAxLCBf X2ZtdCwgX192YV9hcmdfcGFjayAoKSk7CisgIF9fRk9SVElGWV9JTklUX0FS R19QQUNLKF9fZm10KTsKKyAgaW50IF9fciA9IF9fRk9SVElGWV9DQUxMX1ZB X0NISyAod3ByaW50ZiwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fZm10 LAorCQkJCSAgIF9fRk9SVElGWV9BUkdfUEFDSyk7CisgIF9fRk9SVElGWV9G UkVFX0FSR19QQUNLKCk7CisgIHJldHVybiBfX3I7CiB9CiAKLV9fZm9ydGlm eV9mdW5jdGlvbiBpbnQKLWZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0sIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mbXQsIC4u LikKK19fZm9ydGlmeV9wb3RlbnRpYWxfb3ZlcmxvYWQgaW50Citmd3ByaW50 ZiAoX19GSUxFICpfX3Jlc3RyaWN0IGNvbnN0IF9fY2xhbmdfcGFzc19vYmpl Y3Rfc2l6ZSBfX3N0cmVhbSwKKwkgIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19mbXQsIC4uLikKIHsKLSAgcmV0dXJuIF9fZndwcmludGZfY2hrIChf X3N0cmVhbSwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEsIF9fZm10LAotCQkJ IF9fdmFfYXJnX3BhY2sgKCkpOworICBfX0ZPUlRJRllfSU5JVF9BUkdfUEFD SyhfX2ZtdCk7CisgIGludCBfX3IgPSBfX0ZPUlRJRllfQ0FMTF9WQV9DSEsg KGZ3cHJpbnRmLCBfX3N0cmVhbSwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEs CisJCQkJICAgX19mbXQsIF9fRk9SVElGWV9BUkdfUEFDSyk7CisgIF9fRk9S VElGWV9GUkVFX0FSR19QQUNLKCk7CisgIHJldHVybiBfX3I7CiB9CiAjIGVs aWYgIWRlZmluZWQgX19jcGx1c3BsdXMKICMgIGRlZmluZSB3cHJpbnRmKC4u LikgXApAQCAtMzU0LDE0ICszMzIsMTUgQEAgZndwcmludGYgKF9fRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSwgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX2ZtdCwgLi4uKQogICBfX2Z3cHJpbnRmX2NoayAoc3RyZWFtLCBfX1VT RV9GT1JUSUZZX0xFVkVMIC0gMSwgX19WQV9BUkdTX18pCiAjIGVuZGlmCiAK LV9fZm9ydGlmeV9mdW5jdGlvbiBpbnQKLXZ3cHJpbnRmIChjb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FwKQor X19mb3J0aWZ5X3BvdGVudGlhbF9vdmVybG9hZCBpbnQKK3Z3cHJpbnRmIChj b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IGNvbnN0IF9fY2xhbmdfcGFzc19v YmplY3Rfc2l6ZSBfX2ZtdCwKKwkgIF9fZ251Y192YV9saXN0IF9fYXApCiB7 CiAgIHJldHVybiBfX3Z3cHJpbnRmX2NoayAoX19VU0VfRk9SVElGWV9MRVZF TCAtIDEsIF9fZm10LCBfX2FwKTsKIH0KIAotX19mb3J0aWZ5X2Z1bmN0aW9u IGludAotdmZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s CitfX2ZvcnRpZnlfcG90ZW50aWFsX292ZXJsb2FkIGludAordmZ3cHJpbnRm IChfX0ZJTEUgKl9fcmVzdHJpY3QgY29uc3QgX19jbGFuZ19wYXNzX29iamVj dF9zaXplIF9fc3RyZWFtLAogCSAgIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXApCiB7CiAgIHJldHVybiBf X3Zmd3ByaW50Zl9jaGsgKF9fc3RyZWFtLCBfX1VTRV9GT1JUSUZZX0xFVkVM IC0gMSwgX19mbXQsIF9fYXApOwpAQCAtMzc0LDI3ICszNTMsMjEgQEAgZXh0 ZXJuIHdjaGFyX3QgKl9fZmdldHdzX2NoayAod2NoYXJfdCAqX19yZXN0cmlj dCBfX3MsIHNpemVfdCBfX3NpemUsIGludCBfX24sCiBleHRlcm4gd2NoYXJf dCAqX19SRURJUkVDVCAoX19mZ2V0d3NfYWxpYXMsCiAJCQkgICAgKHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogCQkJICAgICBfX0ZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pLCBmZ2V0d3MpIF9fd3VyOwotZXh0ZXJu IHdjaGFyX3QgKl9fUkVESVJFQ1QgKF9fZmdldHdzX2Noa193YXJuLAotCQkJ ICAgICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fc2l6ZSwg aW50IF9fbiwKLQkJCSAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt KSwgX19mZ2V0d3NfY2hrKQotICAgICBfX3d1ciBfX3dhcm5hdHRyICgiZmdl dHdzIGNhbGxlZCB3aXRoIGJpZ2dlciBzaXplIHRoYW4gbGVuZ3RoICIKLQkJ ICAgICAgICJvZiBkZXN0aW5hdGlvbiBidWZmZXIiKTsKLQotX19mb3J0aWZ5 X2Z1bmN0aW9uIF9fd3VyIHdjaGFyX3QgKgotZmdldHdzICh3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgX19GSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtKQotewotICBpZiAoX19ib3MgKF9fcykgIT0gKHNpemVfdCkgLTEp Ci0gICAgewotICAgICAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19u KSB8fCBfX24gPD0gMCkKLQlyZXR1cm4gX19mZ2V0d3NfY2hrIChfX3MsIF9f Ym9zIChfX3MpIC8gc2l6ZW9mICh3Y2hhcl90KSwKLQkJCSAgICAgX19uLCBf X3N0cmVhbSk7CiAKLSAgICAgIGlmICgoc2l6ZV90KSBfX24gPiBfX2JvcyAo X19zKSAvIHNpemVvZiAod2NoYXJfdCkpCi0JcmV0dXJuIF9fZmdldHdzX2No a193YXJuIChfX3MsIF9fYm9zIChfX3MpIC8gc2l6ZW9mICh3Y2hhcl90KSwK LQkJCQkgIF9fbiwgX19zdHJlYW0pOwotICAgIH0KK19fZm9ydGlmeV9wb3Rl bnRpYWxfb3ZlcmxvYWQgX193dXIgd2NoYXJfdCAqCitmZ2V0d3MgKHdjaGFy X3QgKl9fcmVzdHJpY3QgY29uc3QgX19jbGFuZ19wYXNzX29iamVjdF9zaXpl IF9fcywgaW50IF9fbiwKKwlfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p CitfX0ZPUlRJRllfUFJFQ09ORElUSU9OUworICAgICBfX0ZPUlRJRllfV0FS TklOR19PTkxZX0lGX0JPU19MVDIgKF9fZmdldHdzX3dhcm4sIF9fbiwgX19z LAorCQkJCQlzaXplb2YgKHdjaGFyX3QpLAorCQkJCQkiZmdldHdzIGNhbGxl ZCB3aXRoIGxlbmd0aCBiaWdnZXIgIgorCQkJCQkidGhhbiBzaXplIG9mIGRl c3RpbmF0aW9uIGJ1ZmZlciIpCit7CisgIGlmIChfX0ZPUlRJRllfQ0FMTF9D SEsgJiYgX19ib3MgKF9fcykgIT0gKHNpemVfdCkgLTEpCisgICAgcmV0dXJu IF9fZmdldHdzX2NoayAoX19zLCBfX2JvcyAoX19zKSAvIHNpemVvZiAod2No YXJfdCksIF9fbiwgX19zdHJlYW0pOwogICByZXR1cm4gX19mZ2V0d3NfYWxp YXMgKF9fcywgX19uLCBfX3N0cmVhbSk7CiB9CitfX0ZPUlRJRllfRlVOQ1RJ T05fRU5ECiAKICNpZmRlZiBfX1VTRV9HTlUKIGV4dGVybiB3Y2hhcl90ICpf X2ZnZXR3c191bmxvY2tlZF9jaGsgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z LCBzaXplX3QgX19zaXplLApAQCAtNDA0LDI4ICszNzcsMjMgQEAgZXh0ZXJu IHdjaGFyX3QgKl9fUkVESVJFQ1QgKF9fZmdldHdzX3VubG9ja2VkX2FsaWFz LAogCQkJICAgICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwK IAkJCSAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSwgZmdldHdz X3VubG9ja2VkKQogICBfX3d1cjsKLWV4dGVybiB3Y2hhcl90ICpfX1JFRElS RUNUIChfX2ZnZXR3c191bmxvY2tlZF9jaGtfd2FybiwKLQkJCSAgICAod2No YXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX3NpemUsIGludCBfX24s Ci0JCQkgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSksCi0JCQkg ICAgX19mZ2V0d3NfdW5sb2NrZWRfY2hrKQotICAgICBfX3d1ciBfX3dhcm5h dHRyICgiZmdldHdzX3VubG9ja2VkIGNhbGxlZCB3aXRoIGJpZ2dlciBzaXpl IHRoYW4gbGVuZ3RoICIKLQkJICAgICAgICJvZiBkZXN0aW5hdGlvbiBidWZm ZXIiKTsKLQotX19mb3J0aWZ5X2Z1bmN0aW9uIF9fd3VyIHdjaGFyX3QgKgot ZmdldHdzX3VubG9ja2VkICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgaW50 IF9fbiwgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQorCitfX2ZvcnRp ZnlfcG90ZW50aWFsX292ZXJsb2FkIF9fd3VyIHdjaGFyX3QgKgorZmdldHdz X3VubG9ja2VkICh3Y2hhcl90ICpfX3Jlc3RyaWN0IGNvbnN0IF9fY2xhbmdf cGFzc19vYmplY3Rfc2l6ZSBfX3MsCisJCSBpbnQgX19uLCBfX0ZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0pCitfX0ZPUlRJRllfUFJFQ09ORElUSU9OUwor ICAgICBfX0ZPUlRJRllfV0FSTklOR19JRiAoX19mZ2V0d3NfdW5sb2NrZWRf d2FybiwKKwkJCSAgIF9fbiA+IDAKKwkJCSAgICAmJiBfX2Jvc19zdGF0aWNf bHQyIChfX24sIF9fcywgc2l6ZW9mICh3Y2hhcl90KSksCisJCQkgICAiZmdl dHdzX3VubG9ja2VkIGNhbGxlZCB3aXRoIGJpZ2dlciBzaXplIHRoYW4gIgor CQkJICAgImxlbmd0aCBvZiBkZXN0aW5hdGlvbiBidWZmZXIiKQogewogICBp ZiAoX19ib3MgKF9fcykgIT0gKHNpemVfdCkgLTEpCi0gICAgewotICAgICAg aWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uKSB8fCBfX24gPD0gMCkK LQlyZXR1cm4gX19mZ2V0d3NfdW5sb2NrZWRfY2hrIChfX3MsIF9fYm9zIChf X3MpIC8gc2l6ZW9mICh3Y2hhcl90KSwKLQkJCQkgICAgICBfX24sIF9fc3Ry ZWFtKTsKLQotICAgICAgaWYgKChzaXplX3QpIF9fbiA+IF9fYm9zIChfX3Mp IC8gc2l6ZW9mICh3Y2hhcl90KSkKLQlyZXR1cm4gX19mZ2V0d3NfdW5sb2Nr ZWRfY2hrX3dhcm4gKF9fcywgX19ib3MgKF9fcykgLyBzaXplb2YgKHdjaGFy X3QpLAotCQkJCQkgICBfX24sIF9fc3RyZWFtKTsKLSAgICB9CisgICAgcmV0 dXJuIF9fZmdldHdzX3VubG9ja2VkX2NoayAoX19zLCBfX2JvcyAoX19zKSAv IHNpemVvZiAod2NoYXJfdCksCisJCQkJICBfX24sIF9fc3RyZWFtKTsKICAg cmV0dXJuIF9fZmdldHdzX3VubG9ja2VkX2FsaWFzIChfX3MsIF9fbiwgX19z dHJlYW0pOwogfQorX19GT1JUSUZZX0ZVTkNUSU9OX0VORAogI2VuZGlmCiAK IApAQCAtNDM2LDkgKzQwNCw5IEBAIGV4dGVybiBzaXplX3QgX19SRURJUkVD VF9OVEggKF9fd2NydG9tYl9hbGlhcywKIAkJCSAgICAgIChjaGFyICpfX3Jl c3RyaWN0IF9fcywgd2NoYXJfdCBfX3djaGFyLAogCQkJICAgICAgIG1ic3Rh dGVfdCAqX19yZXN0cmljdCBfX3BzKSwgd2NydG9tYikgX193dXI7CiAKLV9f Zm9ydGlmeV9mdW5jdGlvbiBfX3d1ciBzaXplX3QKLV9fTlRIICh3Y3J0b21i IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJfdCBfX3djaGFyLAotCQlt YnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykpCitfX2ZvcnRpZnlfcG90ZW50 aWFsX292ZXJsb2FkIF9fd3VyIHNpemVfdAorX19OVEggKHdjcnRvbWIgKGNo YXIgKl9fcmVzdHJpY3QgY29uc3QgX19jbGFuZ19wYXNzX29iamVjdF9zaXpl IF9fcywKKwkJd2NoYXJfdCBfX3djaGFyLCBtYnN0YXRlX3QgKl9fcmVzdHJp Y3QgX19wcykpCiB7CiAgIC8qIFdlIHdvdWxkIGhhdmUgdG8gaW5jbHVkZSA8 bGltaXRzLmg+IHRvIGdldCBhIGRlZmluaXRpb24gb2YgTUJfTEVOX01BWC4K ICAgICAgQnV0IHRoaXMgd291bGQgb25seSBkaXN0dXJiIHRoZSBuYW1lc3Bh Y2UuICBTbyB3ZSBkZWZpbmUgb3VyIG93bgpAQCAtNDYyLDMwICs0MzAsMjMg QEAgZXh0ZXJuIHNpemVfdCBfX1JFRElSRUNUX05USCAoX19tYnNydG93Y3Nf YWxpYXMsCiAJCQkgICAgICAgY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19z cmMsCiAJCQkgICAgICAgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVz dHJpY3QgX19wcyksCiAJCQkgICAgICBtYnNydG93Y3MpOwotZXh0ZXJuIHNp emVfdCBfX1JFRElSRUNUX05USCAoX19tYnNydG93Y3NfY2hrX3dhcm4sCi0J CQkgICAgICAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKLQkJCSAgICAg ICBjb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywKLQkJCSAgICAgICBz aXplX3QgX19sZW4sIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzLAotCQkJ ICAgICAgIHNpemVfdCBfX2RzdGxlbiksIF9fbWJzcnRvd2NzX2NoaykKLSAg ICAgX193YXJuYXR0ciAoIm1ic3J0b3djcyBjYWxsZWQgd2l0aCBkc3QgYnVm ZmVyIHNtYWxsZXIgdGhhbiBsZW4gIgotCQkgIiogc2l6ZW9mICh3Y2hhcl90 KSIpOwogCi1fX2ZvcnRpZnlfZnVuY3Rpb24gc2l6ZV90Ci1fX05USCAobWJz cnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LCBjb25zdCBjaGFy ICoqX19yZXN0cmljdCBfX3NyYywKLQkJICBzaXplX3QgX19sZW4sIG1ic3Rh dGVfdCAqX19yZXN0cmljdCBfX3BzKSkKK19fZm9ydGlmeV9wb3RlbnRpYWxf b3ZlcmxvYWQgc2l6ZV90CitfX05USCAobWJzcnRvd2NzICh3Y2hhcl90ICpf X3Jlc3RyaWN0IGNvbnN0IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZSBfX2Rz dCwKKwkJICBjb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90 IF9fbGVuLAorCQkgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSkKK19f Rk9SVElGWV9QUkVDT05ESVRJT05TCisgICAgIF9fRk9SVElGWV9XQVJOSU5H X09OTFlfSUZfQk9TX0xUMiAoX19tYnNydG93Y3Nfd2FybiwgX19sZW4sIF9f ZHN0LAorCQkJCQlzaXplb2YgKHdjaGFyX3QpLAorCQkJCQkibWJzcnRvd2Nz IGNhbGxlZCB3aXRoIGRzdCBidWZmZXIgIgorCQkJCQkic21hbGxlciB0aGFu IGxlbiAqIHNpemVvZiAod2NoYXJfdCkiKQogewotICBpZiAoX19ib3MgKF9f ZHN0KSAhPSAoc2l6ZV90KSAtMSkKLSAgICB7Ci0gICAgICBpZiAoIV9fYnVp bHRpbl9jb25zdGFudF9wIChfX2xlbikpCi0JcmV0dXJuIF9fbWJzcnRvd2Nz X2NoayAoX19kc3QsIF9fc3JjLCBfX2xlbiwgX19wcywKLQkJCQlfX2JvcyAo X19kc3QpIC8gc2l6ZW9mICh3Y2hhcl90KSk7Ci0KLSAgICAgIGlmIChfX2xl biA+IF9fYm9zIChfX2RzdCkgLyBzaXplb2YgKHdjaGFyX3QpKQotCXJldHVy biBfX21ic3J0b3djc19jaGtfd2FybiAoX19kc3QsIF9fc3JjLCBfX2xlbiwg X19wcywKLQkJCQkgICAgIF9fYm9zIChfX2RzdCkgLyBzaXplb2YgKHdjaGFy X3QpKTsKLSAgICB9CisgIGlmIChfX0ZPUlRJRllfQ0FMTF9DSEsgJiYgX19i b3MgKF9fZHN0KSAhPSAoc2l6ZV90KSAtMSkKKyAgICByZXR1cm4gX19tYnNy dG93Y3NfY2hrIChfX2RzdCwgX19zcmMsIF9fbGVuLCBfX3BzLAorCQkJICAg IF9fYm9zIChfX2RzdCkgLyBzaXplb2YgKHdjaGFyX3QpKTsKICAgcmV0dXJu IF9fbWJzcnRvd2NzX2FsaWFzIChfX2RzdCwgX19zcmMsIF9fbGVuLCBfX3Bz KTsKIH0KK19fRk9SVElGWV9GVU5DVElPTl9FTkQKIAogCiBleHRlcm4gc2l6 ZV90IF9fd2NzcnRvbWJzX2NoayAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwK QEAgLTQ5NywyNyArNDU4LDIxIEBAIGV4dGVybiBzaXplX3QgX19SRURJUkVD VF9OVEggKF9fd2NzcnRvbWJzX2FsaWFzLAogCQkJICAgICAgIGNvbnN0IHdj aGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLAogCQkJICAgICAgIHNpemVfdCBf X2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpLAogCQkJICAgICAg d2NzcnRvbWJzKTsKLWV4dGVybiBzaXplX3QgX19SRURJUkVDVF9OVEggKF9f d2NzcnRvbWJzX2Noa193YXJuLAotCQkJICAgICAgKGNoYXIgKl9fcmVzdHJp Y3QgX19kc3QsCi0JCQkgICAgICAgY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJp Y3QgX19zcmMsCi0JCQkgICAgICAgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3Qg Kl9fcmVzdHJpY3QgX19wcywKLQkJCSAgICAgICBzaXplX3QgX19kc3RsZW4p LCBfX3djc3J0b21ic19jaGspCi0gICAgX193YXJuYXR0ciAoIndjc3J0b21i cyBjYWxsZWQgd2l0aCBkc3QgYnVmZmVyIHNtYWxsZXIgdGhhbiBsZW4iKTsK IAotX19mb3J0aWZ5X2Z1bmN0aW9uIHNpemVfdAotX19OVEggKHdjc3J0b21i cyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwgY29uc3Qgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19zcmMsCi0JCSAgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3Qg Kl9fcmVzdHJpY3QgX19wcykpCitfX2ZvcnRpZnlfcG90ZW50aWFsX292ZXJs b2FkIHNpemVfdAorX19OVEggKHdjc3J0b21icyAoY2hhciAqX19yZXN0cmlj dCBjb25zdCBfX2NsYW5nX3Bhc3Nfb2JqZWN0X3NpemUgX19kc3QsCisJCSAg Y29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xl biwKKwkJICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykpCitfX0ZPUlRJ RllfUFJFQ09ORElUSU9OUworICAgICBfX0ZPUlRJRllfV0FSTklOR19PTkxZ X0lGX0JPU19MVCAoX193Y3NydG9tYnNfd2FybiwgX19sZW4sIF9fZHN0LAor CQkJCSAgICAgICAid2NzcnRvbWJzIGNhbGxlZCB3aXRoIGRzdCBidWZmZXIg IgorCQkJCSAgICAgICAic21hbGxlciB0aGFuIGxlbiIpCiB7Ci0gIGlmIChf X2JvcyAoX19kc3QpICE9IChzaXplX3QpIC0xKQotICAgIHsKLSAgICAgIGlm ICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fbGVuKSkKLQlyZXR1cm4gX193 Y3NydG9tYnNfY2hrIChfX2RzdCwgX19zcmMsIF9fbGVuLCBfX3BzLCBfX2Jv cyAoX19kc3QpKTsKLQotICAgICAgaWYgKF9fbGVuID4gX19ib3MgKF9fZHN0 KSkKLQlyZXR1cm4gX193Y3NydG9tYnNfY2hrX3dhcm4gKF9fZHN0LCBfX3Ny YywgX19sZW4sIF9fcHMsIF9fYm9zIChfX2RzdCkpOwotICAgIH0KKyAgaWYg KF9fRk9SVElGWV9DQUxMX0NISyAmJiBfX2JvcyAoX19kc3QpICE9IChzaXpl X3QpIC0xKQorICAgIHJldHVybiBfX3djc3J0b21ic19jaGsgKF9fZHN0LCBf X3NyYywgX19sZW4sIF9fcHMsIF9fYm9zIChfX2RzdCkpOwogICByZXR1cm4g X193Y3NydG9tYnNfYWxpYXMgKF9fZHN0LCBfX3NyYywgX19sZW4sIF9fcHMp OwogfQorX19GT1JUSUZZX0ZVTkNUSU9OX0VORAogCiAKICNpZmRlZiBfX1VT RV9HTlUKQEAgLTUzMCwzMCArNDg1LDIzIEBAIGV4dGVybiBzaXplX3QgX19S RURJUkVDVF9OVEggKF9fbWJzbnJ0b3djc19hbGlhcywKIAkJCSAgICAgICBj b25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbm1jLAog CQkJICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0 IF9fcHMpLAogCQkJICAgICAgbWJzbnJ0b3djcyk7Ci1leHRlcm4gc2l6ZV90 IF9fUkVESVJFQ1RfTlRIIChfX21ic25ydG93Y3NfY2hrX3dhcm4sCi0JCQkg ICAgICAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKLQkJCSAgICAgICBj b25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbm1jLAot CQkJICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0 IF9fcHMsCi0JCQkgICAgICAgc2l6ZV90IF9fZHN0bGVuKSwgX19tYnNucnRv d2NzX2NoaykKLSAgICAgX193YXJuYXR0ciAoIm1ic25ydG93Y3MgY2FsbGVk IHdpdGggZHN0IGJ1ZmZlciBzbWFsbGVyIHRoYW4gbGVuICIKLQkJICIqIHNp emVvZiAod2NoYXJfdCkiKTsKIAotX19mb3J0aWZ5X2Z1bmN0aW9uIHNpemVf dAotX19OVEggKG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19k c3QsIGNvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLAotCQkgICBzaXpl X3QgX19ubWMsIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0 IF9fcHMpKQorX19mb3J0aWZ5X3BvdGVudGlhbF9vdmVybG9hZCBzaXplX3QK K19fTlRIIChtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IGNvbnN0 IF9fY2xhbmdfcGFzc19vYmplY3Rfc2l6ZSBfX2RzdCwKKwkJICAgY29uc3Qg Y2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX25tYywgc2l6ZV90 IF9fbGVuLAorCQkgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykpCitf X0ZPUlRJRllfUFJFQ09ORElUSU9OUworICAgICBfX0ZPUlRJRllfV0FSTklO R19PTkxZX0lGX0JPU19MVCAoX19tYnNucnRvd2NzX3dhcm4sCisJCQkJICAg ICAgIHNpemVvZiAod2NoYXJfdCkgKiBfX2xlbiwgX19kc3QsCisJCQkJICAg ICAgICJtYnNucnRvd2NzIGNhbGxlZCB3aXRoIGRzdCBidWZmZXIgIgorCQkJ CSAgICAgICAic21hbGxlciB0aGFuIGxlbiAqIHNpemVvZiAod2NoYXJfdCki KQogewotICBpZiAoX19ib3MgKF9fZHN0KSAhPSAoc2l6ZV90KSAtMSkKLSAg ICB7Ci0gICAgICBpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wIChfX2xlbikp Ci0JcmV0dXJuIF9fbWJzbnJ0b3djc19jaGsgKF9fZHN0LCBfX3NyYywgX19u bWMsIF9fbGVuLCBfX3BzLAotCQkJCSBfX2JvcyAoX19kc3QpIC8gc2l6ZW9m ICh3Y2hhcl90KSk7Ci0KLSAgICAgIGlmIChfX2xlbiA+IF9fYm9zIChfX2Rz dCkgLyBzaXplb2YgKHdjaGFyX3QpKQotCXJldHVybiBfX21ic25ydG93Y3Nf Y2hrX3dhcm4gKF9fZHN0LCBfX3NyYywgX19ubWMsIF9fbGVuLCBfX3BzLAot CQkJCSAgICAgIF9fYm9zIChfX2RzdCkgLyBzaXplb2YgKHdjaGFyX3QpKTsK LSAgICB9CisgIGlmIChfX0ZPUlRJRllfQ0FMTF9DSEsgJiYgX19ib3MgKF9f ZHN0KSAhPSAoc2l6ZV90KSAtMSkKKyAgICByZXR1cm4gX19tYnNucnRvd2Nz X2NoayAoX19kc3QsIF9fc3JjLCBfX25tYywgX19sZW4sIF9fcHMsCisJCQkg ICAgIF9fYm9zIChfX2RzdCkgLyBzaXplb2YgKHdjaGFyX3QpKTsKICAgcmV0 dXJuIF9fbWJzbnJ0b3djc19hbGlhcyAoX19kc3QsIF9fc3JjLCBfX25tYywg X19sZW4sIF9fcHMpOwogfQorX19GT1JUSUZZX0ZVTkNUSU9OX0VORAogCiAK IGV4dGVybiBzaXplX3QgX193Y3NucnRvbWJzX2NoayAoY2hhciAqX19yZXN0 cmljdCBfX2RzdCwKQEAgLTU2NiwyOCArNTE0LDE5IEBAIGV4dGVybiBzaXpl X3QgX19SRURJUkVDVF9OVEggKF9fd2NzbnJ0b21ic19hbGlhcywKIAkJCSAg ICAgICBjb25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywKIAkJCSAg ICAgICBzaXplX3QgX19ud2MsIHNpemVfdCBfX2xlbiwKIAkJCSAgICAgICBt YnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcyksIHdjc25ydG9tYnMpOwotZXh0 ZXJuIHNpemVfdCBfX1JFRElSRUNUX05USCAoX193Y3NucnRvbWJzX2Noa193 YXJuLAotCQkJICAgICAgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCi0JCQkg ICAgICAgY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsCi0JCQkg ICAgICAgc2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4sCi0JCQkgICAgICAg bWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMsCi0JCQkgICAgICAgc2l6ZV90 IF9fZHN0bGVuKSwgX193Y3NucnRvbWJzX2NoaykKLSAgICAgX193YXJuYXR0 ciAoIndjc25ydG9tYnMgY2FsbGVkIHdpdGggZHN0IGJ1ZmZlciBzbWFsbGVy IHRoYW4gbGVuIik7CiAKLV9fZm9ydGlmeV9mdW5jdGlvbiBzaXplX3QKLV9f TlRIICh3Y3NucnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LCBjb25z dCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywKLQkJICAgc2l6ZV90IF9f bndjLCBzaXplX3QgX19sZW4sIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3Bz KSkKK19fZm9ydGlmeV9wb3RlbnRpYWxfb3ZlcmxvYWQgc2l6ZV90CitfX05U SCAod2NzbnJ0b21icyAoY2hhciAqX19yZXN0cmljdCBjb25zdCBfX2NsYW5n X3Bhc3Nfb2JqZWN0X3NpemUgX19kc3QsCisJCSAgIGNvbnN0IHdjaGFyX3Qg KipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19ud2MsIHNpemVfdCBfX2xl biwKKwkJICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpKQorX19GT1JU SUZZX1BSRUNPTkRJVElPTlMKKyAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05M WV9JRl9CT1NfTFQgKF9fd2NzbnJ0b21ic193YXJuLCBfX2xlbiwgX19kc3Qs CisJCQkJICAgICAgICJ3Y3NucnRvbWJzIGNhbGxlZCB3aXRoIGRzdCBidWZm ZXIgIgorCQkJCSAgICAgICAic21hbGxlciB0aGFuIGxlbiIpCiB7Ci0gIGlm IChfX2JvcyAoX19kc3QpICE9IChzaXplX3QpIC0xKQotICAgIHsKLSAgICAg IGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKF9fbGVuKSkKLQlyZXR1cm4g X193Y3NucnRvbWJzX2NoayAoX19kc3QsIF9fc3JjLCBfX253YywgX19sZW4s IF9fcHMsCi0JCQkJIF9fYm9zIChfX2RzdCkpOwotCi0gICAgICBpZiAoX19s ZW4gPiBfX2JvcyAoX19kc3QpKQotCXJldHVybiBfX3djc25ydG9tYnNfY2hr X3dhcm4gKF9fZHN0LCBfX3NyYywgX19ud2MsIF9fbGVuLCBfX3BzLAotCQkJ CSAgICAgIF9fYm9zIChfX2RzdCkpOwotICAgIH0KKyAgaWYgKF9fRk9SVElG WV9DQUxMX0NISyAmJiBfX2JvcyAoX19kc3QpICE9IChzaXplX3QpIC0xKQor ICAgIHJldHVybiBfX3djc25ydG9tYnNfY2hrIChfX2RzdCwgX19zcmMsIF9f bndjLCBfX2xlbiwgX19wcywgX19ib3MgKF9fZHN0KSk7CiAgIHJldHVybiBf X3djc25ydG9tYnNfYWxpYXMgKF9fZHN0LCBfX3NyYywgX19ud2MsIF9fbGVu LCBfX3BzKTsKIH0KK19fRk9SVElGWV9GVU5DVElPTl9FTkQKICNlbmRpZgo= --089e082511ec59f6cb0558e40455 Content-Type: text/plain; charset="US-ASCII"; name="binary-output.diff" Content-Disposition: attachment; filename="binary-output.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j7fo93bn1 Content-length: 1656 LS0tIC90bXAvZ2xpYmMtbWFzdGVyLWJpbmFyeS50eHQJMjAxNy0wOS0xMCAy MDozNjoxNy44MTMyMjA4MzUgLTA3MDAKKysrIC90bXAvZ2xpYmMtbmV3LWZv cnRpZnktYmluYXJ5LnR4dAkyMDE3LTA5LTEwIDIwOjM1OjU3Ljg1OTg4NjM0 MSAtMDcwMApAQCAtNiwxMCArNiwxNyBAQAogCiAwMDAwMDAwMDAwMDAwMDAw IDxmb28+OgogICAgMDoJNDggODMgZWMgMTggICAgICAgICAgCXN1YiAgICAk MHgxOCwlcnNwCi0gICA0OgliOSAwMSAwMCAwMCAwMCAgICAgICAJbW92ICAg ICQweDEsJWVjeAotICAgOToJYmEgMDIgMDAgMDAgMDAgICAgICAgCW1vdiAg ICAkMHgyLCVlZHgKLSAgIGU6CTQ4IDhkIDc0IDI0IDA4ICAgICAgIAlsZWEg ICAgMHg4KCVyc3ApLCVyc2kKLSAgMTM6CTQ4IDhkIDdlIDA0ICAgICAgICAg IAlsZWEgICAgMHg0KCVyc2kpLCVyZGkKLSAgMTc6CWU4IDAwIDAwIDAwIDAw ICAgICAgIAljYWxscSAgMWMgPGZvbysweDFjPgotICAxYzoJNDggODMgYzQg MTggICAgICAgICAgCWFkZCAgICAkMHgxOCwlcnNwCi0gIDIwOgljMyAgICAg ICAgICAgICAgICAgICAJcmV0cSAgIAorICAgNDoJYzYgNDQgMjQgMDcgMDAg ICAgICAgCW1vdmIgICAkMHgwLDB4NyglcnNwKQorICAgOToJMGYgYjYgNDQg MjQgMDcgICAgICAgCW1vdnpibCAweDcoJXJzcCksJWVheAorICAgZToJODQg YzAgICAgICAgICAgICAgICAgCXRlc3QgICAlYWwsJWFsCisgIDEwOgk3NSAx ZSAgICAgICAgICAgICAgICAJam5lICAgIDMwIDxmb28rMHgzMD4KKyAgMTI6 CTQ4IDhkIDc0IDI0IDA4ICAgICAgIAlsZWEgICAgMHg4KCVyc3ApLCVyc2kK KyAgMTc6CWI5IDAxIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4MSwlZWN4 CisgIDFjOgliYSAwMiAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDIsJWVk eAorICAyMToJNDggOGQgN2UgMDQgICAgICAgICAgCWxlYSAgICAweDQoJXJz aSksJXJkaQorICAyNToJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAy YSA8Zm9vKzB4MmE+CisgIDJhOgk0OCA4MyBjNCAxOCAgICAgICAgICAJYWRk ICAgICQweDE4LCVyc3AKKyAgMmU6CWMzICAgICAgICAgICAgICAgICAgIAly ZXRxICAgCisgIDJmOgk5MCAgICAgICAgICAgICAgICAgICAJbm9wCisgIDMw OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDM1IDxmb28rMHgzNT4K KyAgMzU6CWViIGRiICAgICAgICAgICAgICAgIAlqbXAgICAgMTIgPGZvbysw eDEyPgo= --089e082511ec59f6cb0558e40455 Content-Type: text/plain; charset="UTF-8"; name="tst-chk2-output.diff" Content-Disposition: attachment; filename="tst-chk2-output.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j7fo97cd2 Content-length: 64225 LS0tIC90bXAvZ2xpYmMtbWFzdGVyLW91dHB1dC50eHQJMjAxNy0wOS0xMCAy MDoxNTo0MS4zODMxNDg5MDMgLTA3MDAKKysrIC90bXAvZ2xpYmMtbmV3LWZv cnRpZnktb3V0cHV0LnR4dAkyMDE3LTA5LTEwIDIwOjE1OjMzLjM5NjQ4MTc3 MiAtMDcwMApAQCAtNDMsMTIgKzQzLDEyIEBACiAgICAgICAgICAgICAgICAg IGZyb20gdHN0LWNoazIuYzoyOgogSW4gZnVuY3Rpb24g4oCYbWVtY3B54oCZ LAogICAgIGlubGluZWQgZnJvbSDigJhkb190ZXN04oCZIGF0IHRzdC1jaGsx LmM6MzE4OjM6Ci0uLi9zdHJpbmcvYml0cy9zdHJpbmdfZm9ydGlmaWVkLmg6 MzQ6MTA6IHdhcm5pbmc6IOKAmF9fYnVpbHRpbl9fX21lbWNweV9jaGvigJkg d3JpdGluZyAxMCBieXRlcyBpbnRvIGEgcmVnaW9uIG9mIHNpemUgOSBvdmVy Zmxvd3MgdGhlIGRlc3RpbmF0aW9uIFstV3N0cmluZ29wLW92ZXJmbG93PV0K Ky4uL3N0cmluZy9iaXRzL3N0cmluZ19mb3J0aWZpZWQuaDo0ODoxMDogd2Fy bmluZzog4oCYX19idWlsdGluX19fbWVtY3B5X2Noa+KAmSB3cml0aW5nIDEw IGJ5dGVzIGludG8gYSByZWdpb24gb2Ygc2l6ZSA5IG92ZXJmbG93cyB0aGUg ZGVzdGluYXRpb24gWy1Xc3RyaW5nb3Atb3ZlcmZsb3c9XQogICAgcmV0dXJu IF9fYnVpbHRpbl9fX21lbWNweV9jaGsgKF9fZGVzdCwgX19zcmMsIF9fbGVu LCBfX2JvczAgKF9fZGVzdCkpOwogICAgICAgICAgIF5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+CiBJbiBmdW5jdGlvbiDigJhtZW1tb3Zl4oCZLAogICAgIGlubGluZWQg ZnJvbSDigJhkb190ZXN04oCZIGF0IHRzdC1jaGsxLmM6MzI2OjM6Ci0uLi9z dHJpbmcvYml0cy9zdHJpbmdfZm9ydGlmaWVkLmg6NDA6MTA6IHdhcm5pbmc6 IOKAmF9fYnVpbHRpbl9fX21lbW1vdmVfY2hr4oCZIHdyaXRpbmcgOSBieXRl cyBpbnRvIGEgcmVnaW9uIG9mIHNpemUgOCBvdmVyZmxvd3MgdGhlIGRlc3Rp bmF0aW9uIFstV3N0cmluZ29wLW92ZXJmbG93PV0KKy4uL3N0cmluZy9iaXRz L3N0cmluZ19mb3J0aWZpZWQuaDo1NjoxMDogd2FybmluZzog4oCYX19idWls dGluX19fbWVtbW92ZV9jaGvigJkgd3JpdGluZyA5IGJ5dGVzIGludG8gYSBy ZWdpb24gb2Ygc2l6ZSA4IG92ZXJmbG93cyB0aGUgZGVzdGluYXRpb24gWy1X c3RyaW5nb3Atb3ZlcmZsb3c9XQogICAgcmV0dXJuIF9fYnVpbHRpbl9fX21l bW1vdmVfY2hrIChfX2Rlc3QsIF9fc3JjLCBfX2xlbiwgX19ib3MwIChfX2Rl c3QpKTsKICAgICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIEluIGZpbGUg aW5jbHVkZWQgZnJvbSAuLi9pbmNsdWRlL2JpdHMvc3RyaW5nc19mb3J0aWZp ZWQuaDoxOjAsCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgICAgICAg IGZyb20gdHN0LWNoazIuYzoyOgogSW4gZnVuY3Rpb24g4oCYYmNvcHnigJks CiAgICAgaW5saW5lZCBmcm9tIOKAmGRvX3Rlc3TigJkgYXQgdHN0LWNoazEu YzozMzQ6MzoKLS4uL3N0cmluZy9iaXRzL3N0cmluZ3NfZm9ydGlmaWVkLmg6 MjU6Mzogd2FybmluZzog4oCYX19idWlsdGluX19fbWVtbW92ZV9jaGvigJkg d3JpdGluZyA5IGJ5dGVzIGludG8gYSByZWdpb24gb2Ygc2l6ZSA4IG92ZXJm bG93cyB0aGUgZGVzdGluYXRpb24gWy1Xc3RyaW5nb3Atb3ZlcmZsb3c9XQor Li4vc3RyaW5nL2JpdHMvc3RyaW5nc19mb3J0aWZpZWQuaDozNDozOiB3YXJu aW5nOiDigJhfX2J1aWx0aW5fX19tZW1tb3ZlX2Noa+KAmSB3cml0aW5nIDkg Ynl0ZXMgaW50byBhIHJlZ2lvbiBvZiBzaXplIDggb3ZlcmZsb3dzIHRoZSBk ZXN0aW5hdGlvbiBbLVdzdHJpbmdvcC1vdmVyZmxvdz1dCiAgICAodm9pZCkg X19idWlsdGluX19fbWVtbW92ZV9jaGsgKF9fZGVzdCwgX19zcmMsIF9fbGVu LCBfX2JvczAgKF9fZGVzdCkpOwogICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fgogSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uL2luY2x1ZGUvYml0cy9z dHJpbmdfZm9ydGlmaWVkLmg6MTowLApAQCAtNzQsMTIgKzc0LDEyIEBACiAg ICAgICAgICAgICAgICAgIGZyb20gdHN0LWNoazIuYzoyOgogSW4gZnVuY3Rp b24g4oCYbWVtcGNweeKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVz dOKAmSBhdCB0c3QtY2hrMS5jOjM0MjoxNjoKLS4uL3N0cmluZy9iaXRzL3N0 cmluZ19mb3J0aWZpZWQuaDo0ODoxMDogd2FybmluZzog4oCYX19idWlsdGlu X19fbWVtcGNweV9jaGvigJkgd3JpdGluZyA1IGJ5dGVzIGludG8gYSByZWdp b24gb2Ygc2l6ZSA0IG92ZXJmbG93cyB0aGUgZGVzdGluYXRpb24gWy1Xc3Ry aW5nb3Atb3ZlcmZsb3c9XQorLi4vc3RyaW5nL2JpdHMvc3RyaW5nX2ZvcnRp ZmllZC5oOjY1OjEwOiB3YXJuaW5nOiDigJhfX2J1aWx0aW5fX19tZW1wY3B5 X2Noa+KAmSB3cml0aW5nIDUgYnl0ZXMgaW50byBhIHJlZ2lvbiBvZiBzaXpl IDQgb3ZlcmZsb3dzIHRoZSBkZXN0aW5hdGlvbiBbLVdzdHJpbmdvcC1vdmVy Zmxvdz1dCiAgICByZXR1cm4gX19idWlsdGluX19fbWVtcGNweV9jaGsgKF9f ZGVzdCwgX19zcmMsIF9fbGVuLCBfX2JvczAgKF9fZGVzdCkpOwogICAgICAg ICAgIF5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogSW4gZnVuY3Rpb24g4oCYbWVtc2V0 4oCZLAogICAgIGlubGluZWQgZnJvbSDigJhkb190ZXN04oCZIGF0IHRzdC1j aGsxLmM6MzUwOjM6Ci0uLi9zdHJpbmcvYml0cy9zdHJpbmdfZm9ydGlmaWVk Lmg6NzE6MTA6IHdhcm5pbmc6IOKAmF9fYnVpbHRpbl9fX21lbXNldF9jaGvi gJkgd3JpdGluZyAyIGJ5dGVzIGludG8gYSByZWdpb24gb2Ygc2l6ZSAxIG92 ZXJmbG93cyB0aGUgZGVzdGluYXRpb24gWy1Xc3RyaW5nb3Atb3ZlcmZsb3c9 XQorLi4vc3RyaW5nL2JpdHMvc3RyaW5nX2ZvcnRpZmllZC5oOjk4OjEwOiB3 YXJuaW5nOiDigJhfX2J1aWx0aW5fX19tZW1zZXRfY2hr4oCZIHdyaXRpbmcg MiBieXRlcyBpbnRvIGEgcmVnaW9uIG9mIHNpemUgMSBvdmVyZmxvd3MgdGhl IGRlc3RpbmF0aW9uIFstV3N0cmluZ29wLW92ZXJmbG93PV0KICAgIHJldHVy biBfX2J1aWx0aW5fX19tZW1zZXRfY2hrIChfX2Rlc3QsIF9fY2gsIF9fbGVu LCBfX2JvczAgKF9fZGVzdCkpOwogICAgICAgICAgIF5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn4KIEluIGZpbGUgaW5jbHVkZWQgZnJvbSAuLi9pbmNsdWRlL2JpdHMvc3Ry aW5nc19mb3J0aWZpZWQuaDoxOjAsCkBAIC05Myw3ICs5Myw3IEBACiAgICAg ICAgICAgICAgICAgIGZyb20gdHN0LWNoazIuYzoyOgogSW4gZnVuY3Rpb24g 4oCYYnplcm/igJksCiAgICAgaW5saW5lZCBmcm9tIOKAmGRvX3Rlc3TigJkg YXQgdHN0LWNoazEuYzozNTg6MzoKLS4uL3N0cmluZy9iaXRzL3N0cmluZ3Nf Zm9ydGlmaWVkLmg6MzE6Mzogd2FybmluZzog4oCYX19idWlsdGluX19fbWVt c2V0X2Noa+KAmSB3cml0aW5nIDIgYnl0ZXMgaW50byBhIHJlZ2lvbiBvZiBz aXplIDEgb3ZlcmZsb3dzIHRoZSBkZXN0aW5hdGlvbiBbLVdzdHJpbmdvcC1v dmVyZmxvdz1dCisuLi9zdHJpbmcvYml0cy9zdHJpbmdzX2ZvcnRpZmllZC5o OjQyOjM6IHdhcm5pbmc6IOKAmF9fYnVpbHRpbl9fX21lbXNldF9jaGvigJkg d3JpdGluZyAyIGJ5dGVzIGludG8gYSByZWdpb24gb2Ygc2l6ZSAxIG92ZXJm bG93cyB0aGUgZGVzdGluYXRpb24gWy1Xc3RyaW5nb3Atb3ZlcmZsb3c9XQog ICAgKHZvaWQpIF9fYnVpbHRpbl9fX21lbXNldF9jaGsgKF9fZGVzdCwgJ1ww JywgX19sZW4sIF9fYm9zMCAoX19kZXN0KSk7CiAgICBefn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fgogSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uL2luY2x1ZGUv Yml0cy9zdHJpbmdfZm9ydGlmaWVkLmg6MTowLApAQCAtMTA1LDEyICsxMDUs MTIgQEAKICAgICAgICAgICAgICAgICAgZnJvbSB0c3QtY2hrMi5jOjI6CiBJ biBmdW5jdGlvbiDigJhzdHJuY3B54oCZLAogICAgIGlubGluZWQgZnJvbSDi gJhkb190ZXN04oCZIGF0IHRzdC1jaGsxLmM6MzgyOjM6Ci0uLi9zdHJpbmcv Yml0cy9zdHJpbmdfZm9ydGlmaWVkLmg6MTA2OjEwOiB3YXJuaW5nOiDigJhf X2J1aWx0aW5fX19zdHJuY3B5X2Noa+KAmTogc3BlY2lmaWVkIGJvdW5kIDQg ZXhjZWVkcyB0aGUgc2l6ZSAzIG9mIHRoZSBkZXN0aW5hdGlvbiBbLVdzdHJp bmdvcC1vdmVyZmxvdz1dCisuLi9zdHJpbmcvYml0cy9zdHJpbmdfZm9ydGlm aWVkLmg6MTQwOjEwOiB3YXJuaW5nOiDigJhfX2J1aWx0aW5fX19zdHJuY3B5 X2Noa+KAmTogc3BlY2lmaWVkIGJvdW5kIDQgZXhjZWVkcyB0aGUgc2l6ZSAz IG9mIHRoZSBkZXN0aW5hdGlvbiBbLVdzdHJpbmdvcC1vdmVyZmxvdz1dCiAg ICByZXR1cm4gX19idWlsdGluX19fc3RybmNweV9jaGsgKF9fZGVzdCwgX19z cmMsIF9fbGVuLCBfX2JvcyAoX19kZXN0KSk7CiAgICAgICAgICAgXn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn4KIEluIGZ1bmN0aW9uIOKAmHN0cG5jcHnigJksCiAgICAg aW5saW5lZCBmcm9tIOKAmGRvX3Rlc3TigJkgYXQgdHN0LWNoazEuYzozOTA6 MzoKLS4uL3N0cmluZy9iaXRzL3N0cmluZ19mb3J0aWZpZWQuaDoxMjA6MTI6 IHdhcm5pbmc6IOKAmF9fYnVpbHRpbl9fX3N0cm5jcHlfY2hr4oCZOiBzcGVj aWZpZWQgYm91bmQgNSBleGNlZWRzIHRoZSBzaXplIDQgb2YgdGhlIGRlc3Rp bmF0aW9uIFstV3N0cmluZ29wLW92ZXJmbG93PV0KKy4uL3N0cmluZy9iaXRz L3N0cmluZ19mb3J0aWZpZWQuaDoxNTU6MTI6IHdhcm5pbmc6IOKAmF9fYnVp bHRpbl9fX3N0cm5jcHlfY2hr4oCZOiBzcGVjaWZpZWQgYm91bmQgNSBleGNl ZWRzIHRoZSBzaXplIDQgb2YgdGhlIGRlc3RpbmF0aW9uIFstV3N0cmluZ29w LW92ZXJmbG93PV0KICAgICAgcmV0dXJuIF9fc3RwbmNweV9jaGsgKF9fZGVz dCwgX19zcmMsIF9fbiwgX19ib3MgKF9fZGVzdCkpOwogICAgICAgICAgICAg Xn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn4KIEluIGZpbGUgaW5jbHVkZWQgZnJvbSAuLi9saWJpby9zdGRpby5o Ojg2MjowLApAQCAtMTE5LDExICsxMTksOSBAQAogICAgICAgICAgICAgICAg ICBmcm9tIHRzdC1jaGsyLmM6MjoKIEluIGZ1bmN0aW9uIOKAmHNucHJpbnRm 4oCZLAogICAgIGlubGluZWQgZnJvbSDigJhkb190ZXN04oCZIGF0IHRzdC1j aGsxLmM6NDAzOjM6Ci0uLi9saWJpby9iaXRzL3N0ZGlvMi5oOjY0OjEwOiB3 YXJuaW5nOiDigJhfX2J1aWx0aW5fX19zbnByaW50Zl9jaGvigJk6IHNwZWNp ZmllZCBib3VuZCAzIGV4Y2VlZHMgdGhlIHNpemUgMiBvZiB0aGUgZGVzdGlu YXRpb24gWy1Xc3RyaW5nb3Atb3ZlcmZsb3c9XQotICAgcmV0dXJuIF9fYnVp bHRpbl9fX3NucHJpbnRmX2NoayAoX19zLCBfX24sIF9fVVNFX0ZPUlRJRllf TEVWRUwgLSAxLAotICAgICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotICAgICAg ICBfX2JvcyAoX19zKSwgX19mbXQsIF9fdmFfYXJnX3BhY2sgKCkpOwotICAg ICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cisu Li9saWJpby9iaXRzL3N0ZGlvMi5oOjc5Ojc6IHdhcm5pbmc6IOKAmF9fYnVp bHRpbl9fX3NucHJpbnRmX2Noa+KAmTogc3BlY2lmaWVkIGJvdW5kIDMgZXhj ZWVkcyB0aGUgc2l6ZSAyIG9mIHRoZSBkZXN0aW5hdGlvbiBbLVdzdHJpbmdv cC1vdmVyZmxvdz1dCisgICBpbnQgX19yZXN1bHQgPSBfX0ZPUlRJRllfQ0FM TF9WQV9CVUlMVElOIChzbnByaW50ZiwgX19zLCBfX24sCisgICAgICAgXn5+ fn5+fn4KIEluIGZpbGUgaW5jbHVkZWQgZnJvbSAuLi9pbmNsdWRlL2JpdHMv c3RyaW5nX2ZvcnRpZmllZC5oOjE6MCwKICAgICAgICAgICAgICAgICAgZnJv bSAuLi9zdHJpbmcvc3RyaW5nLmg6NDk0LAogICAgICAgICAgICAgICAgICBm cm9tIC4uL2luY2x1ZGUvc3RyaW5nLmg6NTYsCkBAIC0xMzMsMTIgKzEzMSwx MiBAQAogICAgICAgICAgICAgICAgICBmcm9tIHRzdC1jaGsyLmM6MjoKIElu IGZ1bmN0aW9uIOKAmG1lbWNweeKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCY ZG9fdGVzdOKAmSBhdCB0c3QtY2hrMS5jOjQzNTozOgotLi4vc3RyaW5nL2Jp dHMvc3RyaW5nX2ZvcnRpZmllZC5oOjM0OjEwOiB3YXJuaW5nOiDigJhfX2J1 aWx0aW5fX19tZW1jcHlfY2hr4oCZIHdyaXRpbmcgMTAgYnl0ZXMgaW50byBh IHJlZ2lvbiBvZiBzaXplIDkgb3ZlcmZsb3dzIHRoZSBkZXN0aW5hdGlvbiBb LVdzdHJpbmdvcC1vdmVyZmxvdz1dCisuLi9zdHJpbmcvYml0cy9zdHJpbmdf Zm9ydGlmaWVkLmg6NDg6MTA6IHdhcm5pbmc6IOKAmF9fYnVpbHRpbl9fX21l bWNweV9jaGvigJkgd3JpdGluZyAxMCBieXRlcyBpbnRvIGEgcmVnaW9uIG9m IHNpemUgOSBvdmVyZmxvd3MgdGhlIGRlc3RpbmF0aW9uIFstV3N0cmluZ29w LW92ZXJmbG93PV0KICAgIHJldHVybiBfX2J1aWx0aW5fX19tZW1jcHlfY2hr IChfX2Rlc3QsIF9fc3JjLCBfX2xlbiwgX19ib3MwIChfX2Rlc3QpKTsKICAg ICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogSW4gZnVuY3Rpb24g4oCYbWVt bW92ZeKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVzdOKAmSBhdCB0 c3QtY2hrMS5jOjQ0MzozOgotLi4vc3RyaW5nL2JpdHMvc3RyaW5nX2ZvcnRp ZmllZC5oOjQwOjEwOiB3YXJuaW5nOiDigJhfX2J1aWx0aW5fX19tZW1tb3Zl X2Noa+KAmSB3cml0aW5nIDkgYnl0ZXMgaW50byBhIHJlZ2lvbiBvZiBzaXpl IDggb3ZlcmZsb3dzIHRoZSBkZXN0aW5hdGlvbiBbLVdzdHJpbmdvcC1vdmVy Zmxvdz1dCisuLi9zdHJpbmcvYml0cy9zdHJpbmdfZm9ydGlmaWVkLmg6NTY6 MTA6IHdhcm5pbmc6IOKAmF9fYnVpbHRpbl9fX21lbW1vdmVfY2hr4oCZIHdy aXRpbmcgOSBieXRlcyBpbnRvIGEgcmVnaW9uIG9mIHNpemUgOCBvdmVyZmxv d3MgdGhlIGRlc3RpbmF0aW9uIFstV3N0cmluZ29wLW92ZXJmbG93PV0KICAg IHJldHVybiBfX2J1aWx0aW5fX19tZW1tb3ZlX2NoayAoX19kZXN0LCBfX3Ny YywgX19sZW4sIF9fYm9zMCAoX19kZXN0KSk7CiAgICAgICAgICAgXn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+CiBJbiBmaWxlIGluY2x1ZGVkIGZyb20gLi4vaW5jbHVk ZS9iaXRzL3N0cmluZ3NfZm9ydGlmaWVkLmg6MTowLApAQCAtMTUyLDcgKzE1 MCw3IEBACiAgICAgICAgICAgICAgICAgIGZyb20gdHN0LWNoazIuYzoyOgog SW4gZnVuY3Rpb24g4oCYYmNvcHnigJksCiAgICAgaW5saW5lZCBmcm9tIOKA mGRvX3Rlc3TigJkgYXQgdHN0LWNoazEuYzo0NTE6MzoKLS4uL3N0cmluZy9i aXRzL3N0cmluZ3NfZm9ydGlmaWVkLmg6MjU6Mzogd2FybmluZzog4oCYX19i dWlsdGluX19fbWVtbW92ZV9jaGvigJkgd3JpdGluZyA5IGJ5dGVzIGludG8g YSByZWdpb24gb2Ygc2l6ZSA4IG92ZXJmbG93cyB0aGUgZGVzdGluYXRpb24g Wy1Xc3RyaW5nb3Atb3ZlcmZsb3c9XQorLi4vc3RyaW5nL2JpdHMvc3RyaW5n c19mb3J0aWZpZWQuaDozNDozOiB3YXJuaW5nOiDigJhfX2J1aWx0aW5fX19t ZW1tb3ZlX2Noa+KAmSB3cml0aW5nIDkgYnl0ZXMgaW50byBhIHJlZ2lvbiBv ZiBzaXplIDggb3ZlcmZsb3dzIHRoZSBkZXN0aW5hdGlvbiBbLVdzdHJpbmdv cC1vdmVyZmxvdz1dCiAgICAodm9pZCkgX19idWlsdGluX19fbWVtbW92ZV9j aGsgKF9fZGVzdCwgX19zcmMsIF9fbGVuLCBfX2JvczAgKF9fZGVzdCkpOwog ICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogSW4gZmlsZSBpbmNsdWRl ZCBmcm9tIC4uL2luY2x1ZGUvYml0cy9zdHJpbmdfZm9ydGlmaWVkLmg6MTow LApAQCAtMTY0LDEyICsxNjIsMTIgQEAKICAgICAgICAgICAgICAgICAgZnJv bSB0c3QtY2hrMi5jOjI6CiBJbiBmdW5jdGlvbiDigJhtZW1wY3B54oCZLAog ICAgIGlubGluZWQgZnJvbSDigJhkb190ZXN04oCZIGF0IHRzdC1jaGsxLmM6 NDU5OjE2OgotLi4vc3RyaW5nL2JpdHMvc3RyaW5nX2ZvcnRpZmllZC5oOjQ4 OjEwOiB3YXJuaW5nOiDigJhfX2J1aWx0aW5fX19tZW1wY3B5X2Noa+KAmSB3 cml0aW5nIDUgYnl0ZXMgaW50byBhIHJlZ2lvbiBvZiBzaXplIDQgb3ZlcmZs b3dzIHRoZSBkZXN0aW5hdGlvbiBbLVdzdHJpbmdvcC1vdmVyZmxvdz1dCisu Li9zdHJpbmcvYml0cy9zdHJpbmdfZm9ydGlmaWVkLmg6NjU6MTA6IHdhcm5p bmc6IOKAmF9fYnVpbHRpbl9fX21lbXBjcHlfY2hr4oCZIHdyaXRpbmcgNSBi eXRlcyBpbnRvIGEgcmVnaW9uIG9mIHNpemUgNCBvdmVyZmxvd3MgdGhlIGRl c3RpbmF0aW9uIFstV3N0cmluZ29wLW92ZXJmbG93PV0KICAgIHJldHVybiBf X2J1aWx0aW5fX19tZW1wY3B5X2NoayAoX19kZXN0LCBfX3NyYywgX19sZW4s IF9fYm9zMCAoX19kZXN0KSk7CiAgICAgICAgICAgXn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+CiBJbiBmdW5jdGlvbiDigJhtZW1zZXTigJksCiAgICAgaW5saW5lZCBm cm9tIOKAmGRvX3Rlc3TigJkgYXQgdHN0LWNoazEuYzo0Njc6MzoKLS4uL3N0 cmluZy9iaXRzL3N0cmluZ19mb3J0aWZpZWQuaDo3MToxMDogd2FybmluZzog 4oCYX19idWlsdGluX19fbWVtc2V0X2Noa+KAmSB3cml0aW5nIDIgYnl0ZXMg aW50byBhIHJlZ2lvbiBvZiBzaXplIDEgb3ZlcmZsb3dzIHRoZSBkZXN0aW5h dGlvbiBbLVdzdHJpbmdvcC1vdmVyZmxvdz1dCisuLi9zdHJpbmcvYml0cy9z dHJpbmdfZm9ydGlmaWVkLmg6OTg6MTA6IHdhcm5pbmc6IOKAmF9fYnVpbHRp bl9fX21lbXNldF9jaGvigJkgd3JpdGluZyAyIGJ5dGVzIGludG8gYSByZWdp b24gb2Ygc2l6ZSAxIG92ZXJmbG93cyB0aGUgZGVzdGluYXRpb24gWy1Xc3Ry aW5nb3Atb3ZlcmZsb3c9XQogICAgcmV0dXJuIF9fYnVpbHRpbl9fX21lbXNl dF9jaGsgKF9fZGVzdCwgX19jaCwgX19sZW4sIF9fYm9zMCAoX19kZXN0KSk7 CiAgICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogSW4gZmlsZSBpbmNsdWRl ZCBmcm9tIC4uL2luY2x1ZGUvYml0cy9zdHJpbmdzX2ZvcnRpZmllZC5oOjE6 MCwKQEAgLTE4Myw3ICsxODEsNyBAQAogICAgICAgICAgICAgICAgICBmcm9t IHRzdC1jaGsyLmM6MjoKIEluIGZ1bmN0aW9uIOKAmGJ6ZXJv4oCZLAogICAg IGlubGluZWQgZnJvbSDigJhkb190ZXN04oCZIGF0IHRzdC1jaGsxLmM6NDc1 OjM6Ci0uLi9zdHJpbmcvYml0cy9zdHJpbmdzX2ZvcnRpZmllZC5oOjMxOjM6 IHdhcm5pbmc6IOKAmF9fYnVpbHRpbl9fX21lbXNldF9jaGvigJkgd3JpdGlu ZyAyIGJ5dGVzIGludG8gYSByZWdpb24gb2Ygc2l6ZSAxIG92ZXJmbG93cyB0 aGUgZGVzdGluYXRpb24gWy1Xc3RyaW5nb3Atb3ZlcmZsb3c9XQorLi4vc3Ry aW5nL2JpdHMvc3RyaW5nc19mb3J0aWZpZWQuaDo0MjozOiB3YXJuaW5nOiDi gJhfX2J1aWx0aW5fX19tZW1zZXRfY2hr4oCZIHdyaXRpbmcgMiBieXRlcyBp bnRvIGEgcmVnaW9uIG9mIHNpemUgMSBvdmVyZmxvd3MgdGhlIGRlc3RpbmF0 aW9uIFstV3N0cmluZ29wLW92ZXJmbG93PV0KICAgICh2b2lkKSBfX2J1aWx0 aW5fX19tZW1zZXRfY2hrIChfX2Rlc3QsICdcMCcsIF9fbGVuLCBfX2JvczAg KF9fZGVzdCkpOwogICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIEluIGZp bGUgaW5jbHVkZWQgZnJvbSAuLi9pbmNsdWRlL2JpdHMvc3RyaW5nX2ZvcnRp ZmllZC5oOjE6MCwKQEAgLTE5NSw3ICsxOTMsNyBAQAogICAgICAgICAgICAg ICAgICBmcm9tIHRzdC1jaGsyLmM6MjoKIEluIGZ1bmN0aW9uIOKAmHN0cm5j cHnigJksCiAgICAgaW5saW5lZCBmcm9tIOKAmGRvX3Rlc3TigJkgYXQgdHN0 LWNoazEuYzo1MDU6MzoKLS4uL3N0cmluZy9iaXRzL3N0cmluZ19mb3J0aWZp ZWQuaDoxMDY6MTA6IHdhcm5pbmc6IOKAmF9fYnVpbHRpbl9fX3N0cm5jcHlf Y2hr4oCZOiBzcGVjaWZpZWQgYm91bmQgNCBleGNlZWRzIHRoZSBzaXplIDMg b2YgdGhlIGRlc3RpbmF0aW9uIFstV3N0cmluZ29wLW92ZXJmbG93PV0KKy4u L3N0cmluZy9iaXRzL3N0cmluZ19mb3J0aWZpZWQuaDoxNDA6MTA6IHdhcm5p bmc6IOKAmF9fYnVpbHRpbl9fX3N0cm5jcHlfY2hr4oCZOiBzcGVjaWZpZWQg Ym91bmQgNCBleGNlZWRzIHRoZSBzaXplIDMgb2YgdGhlIGRlc3RpbmF0aW9u IFstV3N0cmluZ29wLW92ZXJmbG93PV0KICAgIHJldHVybiBfX2J1aWx0aW5f X19zdHJuY3B5X2NoayAoX19kZXN0LCBfX3NyYywgX19sZW4sIF9fYm9zIChf X2Rlc3QpKTsKICAgICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogSW4gZmls ZSBpbmNsdWRlZCBmcm9tIC4uL2xpYmlvL3N0ZGlvLmg6ODYyOjAsCkBAIC0y MDQsMzExICsyMDIsMjg2IEBACiAgICAgICAgICAgICAgICAgIGZyb20gdHN0 LWNoazIuYzoyOgogSW4gZnVuY3Rpb24g4oCYc25wcmludGbigJksCiAgICAg aW5saW5lZCBmcm9tIOKAmGRvX3Rlc3TigJkgYXQgdHN0LWNoazEuYzo1MTg6 MzoKLS4uL2xpYmlvL2JpdHMvc3RkaW8yLmg6NjQ6MTA6IHdhcm5pbmc6IOKA mF9fYnVpbHRpbl9fX3NucHJpbnRmX2Noa+KAmTogc3BlY2lmaWVkIGJvdW5k IDMgZXhjZWVkcyB0aGUgc2l6ZSAyIG9mIHRoZSBkZXN0aW5hdGlvbiBbLVdz dHJpbmdvcC1vdmVyZmxvdz1dCi0gICByZXR1cm4gX19idWlsdGluX19fc25w cmludGZfY2hrIChfX3MsIF9fbiwgX19VU0VfRk9SVElGWV9MRVZFTCAtIDEs Ci0gICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0gICAgICAgIF9fYm9zIChf X3MpLCBfX2ZtdCwgX192YV9hcmdfcGFjayAoKSk7Ci0gICAgICAgIH5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLUluIGZpbGUgaW5j bHVkZWQgZnJvbSAuLi9pbmNsdWRlL2JpdHMvd2NoYXIyLmg6MTowLAotICAg ICAgICAgICAgICAgICBmcm9tIC4uL3djc21icy93Y2hhci5oOjc4MywKLSAg ICAgICAgICAgICAgICAgZnJvbSAuLi9pbmNsdWRlL3djaGFyLmg6MiwKLSAg ICAgICAgICAgICAgICAgZnJvbSB0c3QtY2hrMS5jOjM0LAorLi4vbGliaW8v Yml0cy9zdGRpbzIuaDo3OTo3OiB3YXJuaW5nOiDigJhfX2J1aWx0aW5fX19z bnByaW50Zl9jaGvigJk6IHNwZWNpZmllZCBib3VuZCAzIGV4Y2VlZHMgdGhl IHNpemUgMiBvZiB0aGUgZGVzdGluYXRpb24gWy1Xc3RyaW5nb3Atb3ZlcmZs b3c9XQorICAgaW50IF9fcmVzdWx0ID0gX19GT1JUSUZZX0NBTExfVkFfQlVJ TFRJTiAoc25wcmludGYsIF9fcywgX19uLAorICAgICAgIF5+fn5+fn5+CitJ biBmaWxlIGluY2x1ZGVkIGZyb20gLi4vaW5jbHVkZS9zeXMvY2RlZnMuaDoz OjAsCisgICAgICAgICAgICAgICAgIGZyb20gLi4vaW5jbHVkZS9mZWF0dXJl cy5oOjQyMywKKyAgICAgICAgICAgICAgICAgZnJvbSB0c3QtY2hrMS5jOjIw LAogICAgICAgICAgICAgICAgICBmcm9tIHRzdC1jaGsyLmM6MjoKIEluIGZ1 bmN0aW9uIOKAmHdtZW1jcHnigJksCiAgICAgaW5saW5lZCBmcm9tIOKAmGRv X3Rlc3TigJkgYXQgdHN0LWNoazEuYzo2NjU6MzoKLS4uL3djc21icy9iaXRz L3djaGFyMi5oOjQ5Ojk6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX193bWVtY3B5 X2Noa193YXJu4oCZIGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6 IHdtZW1jcHkgY2FsbGVkIHdpdGggbGVuZ3RoIGJpZ2dlciB0aGFuIHNpemUg b2YgZGVzdGluYXRpb24gYnVmZmVyCi0gIHJldHVybiBfX3dtZW1jcHlfY2hr X3dhcm4gKF9fczEsIF9fczIsIF9fbiwKLSAgICAgICAgIF5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotICAgICAgICBfX2JvczAgKF9f czEpIC8gc2l6ZW9mICh3Y2hhcl90KSk7Ci0gICAgICAgIH5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorLi4vd2NzbWJzL2JpdHMvd2NoYXIy Lmg6MzU6NDI6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX193bWVtY3B5X3dhcm7i gJkgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2FybmluZzogd21lbWNweSBj YWxsZWQgd2l0aCBsZW5ndGggYmlnZ2VyIHRoYW4gc2l6ZSBvZiBkZXN0aW5h dGlvbiBidWZmZXIKKyAgICAgIF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZf Qk9TMF9MVDIgKF9fd21lbWNweV93YXJuLCBfX24sIF9fczEsCisuLi9taXNj L3N5cy9jZGVmcy5oOjIzNDo1OiBub3RlOiBpbiBkZWZpbml0aW9uIG9mIG1h Y3JvIOKAmF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9TMF9MVDLigJkK KyAgICAgZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+fgogSW4gZnVuY3Rpb24g 4oCYd21lbWNweeKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVzdOKA mSBhdCB0c3QtY2hrMS5jOjY3MzozOgotLi4vd2NzbWJzL2JpdHMvd2NoYXIy Lmg6NDk6OTogd2FybmluZzogY2FsbCB0byDigJhfX3dtZW1jcHlfY2hrX3dh cm7igJkgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2FybmluZzogd21lbWNw eSBjYWxsZWQgd2l0aCBsZW5ndGggYmlnZ2VyIHRoYW4gc2l6ZSBvZiBkZXN0 aW5hdGlvbiBidWZmZXIKLSAgcmV0dXJuIF9fd21lbWNweV9jaGtfd2FybiAo X19zMSwgX19zMiwgX19uLAotICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+Ci0gICAgICAgIF9fYm9zMCAoX19zMSkgLyBz aXplb2YgKHdjaGFyX3QpKTsKLSAgICAgICAgfn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+CisuLi93Y3NtYnMvYml0cy93Y2hhcjIuaDozNTo0 Mjogd2FybmluZzogY2FsbCB0byDigJhfX3dtZW1jcHlfd2FybuKAmSBkZWNs YXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJuaW5nOiB3bWVtY3B5IGNhbGxlZCB3 aXRoIGxlbmd0aCBiaWdnZXIgdGhhbiBzaXplIG9mIGRlc3RpbmF0aW9uIGJ1 ZmZlcgorICAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1MwX0xU MiAoX193bWVtY3B5X3dhcm4sIF9fbiwgX19zMSwKKy4uL21pc2Mvc3lzL2Nk ZWZzLmg6MjM0OjU6IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFjcm8g4oCY X19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1MwX0xUMuKAmQorICAgICBl cnJfZm4gKCk7IFwKKyAgICAgXn5+fn5+CiBJbiBmdW5jdGlvbiDigJh3bWVt bW92ZeKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVzdOKAmSBhdCB0 c3QtY2hrMS5jOjY4MTozOgotLi4vd2NzbWJzL2JpdHMvd2NoYXIyLmg6Nzc6 OTogd2FybmluZzogY2FsbCB0byDigJhfX3dtZW1tb3ZlX2Noa193YXJu4oCZ IGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IHdtZW1tb3ZlIGNh bGxlZCB3aXRoIGxlbmd0aCBiaWdnZXIgdGhhbiBzaXplIG9mIGRlc3RpbmF0 aW9uIGJ1ZmZlcgotICByZXR1cm4gX193bWVtbW92ZV9jaGtfd2FybiAoX19z MSwgX19zMiwgX19uLAotICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fgotICAgICAgICAgX19ib3MwIChfX3MxKSAvIHNp emVvZiAod2NoYXJfdCkpOwotICAgICAgICAgfn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+CisuLi93Y3NtYnMvYml0cy93Y2hhcjIuaDo1Njo0 Mjogd2FybmluZzogY2FsbCB0byDigJhfX3dtZW1tb3ZlX3dhcm7igJkgZGVj bGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2FybmluZzogd21lbW1vdmUgY2FsbGVk IHdpdGggbGVuZ3RoIGJpZ2dlciB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24g YnVmZmVyCisgICAgICBfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JPUzBf TFQyIChfX3dtZW1tb3ZlX3dhcm4sIF9fbiwgX19zMSwKKy4uL21pc2Mvc3lz L2NkZWZzLmg6MjM0OjU6IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFjcm8g 4oCYX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1MwX0xUMuKAmQorICAg ICBlcnJfZm4gKCk7IFwKKyAgICAgXn5+fn5+CiBJbiBmdW5jdGlvbiDigJh3 bWVtcGNweeKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVzdOKAmSBh dCB0c3QtY2hrMS5jOjY4OTo4OgotLi4vd2NzbWJzL2JpdHMvd2NoYXIyLmg6 MTEwOjk6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX193bWVtcGNweV9jaGtfd2Fy buKAmSBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJuaW5nOiB3bWVtcGNw eSBjYWxsZWQgd2l0aCBsZW5ndGggYmlnZ2VyIHRoYW4gc2l6ZSBvZiBkZXN0 aW5hdGlvbiBidWZmZXIKLSAgcmV0dXJuIF9fd21lbXBjcHlfY2hrX3dhcm4g KF9fczEsIF9fczIsIF9fbiwKLSAgICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn4KLSAgICAgICAgIF9fYm9zMCAoX19zMSkg LyBzaXplb2YgKHdjaGFyX3QpKTsKLSAgICAgICAgIH5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fgorLi4vd2NzbWJzL2JpdHMvd2NoYXIyLmg6 ODE6NDI6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX193bWVtcGNweV93YXJu4oCZ IGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IHdtZW1wY3B5IGNh bGxlZCB3aXRoIGxlbmd0aCBiaWdnZXIgdGhhbiBzaXplIG9mIGRlc3RpbmF0 aW9uIGJ1ZmZlcgorICAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9C T1MwX0xUMiAoX193bWVtcGNweV93YXJuLCBfX24sIF9fczEsCisuLi9taXNj L3N5cy9jZGVmcy5oOjIzNDo1OiBub3RlOiBpbiBkZWZpbml0aW9uIG9mIG1h Y3JvIOKAmF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9TMF9MVDLigJkK KyAgICAgZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+fgogSW4gZnVuY3Rpb24g 4oCYd21lbXNldOKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVzdOKA mSBhdCB0c3QtY2hrMS5jOjY5NzozOgotLi4vd2NzbWJzL2JpdHMvd2NoYXIy Lmg6MTM3Ojk6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX193bWVtc2V0X2Noa193 YXJu4oCZIGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IHdtZW1z ZXQgY2FsbGVkIHdpdGggbGVuZ3RoIGJpZ2dlciB0aGFuIHNpemUgb2YgZGVz dGluYXRpb24gYnVmZmVyCi0gIHJldHVybiBfX3dtZW1zZXRfY2hrX3dhcm4g KF9fcywgX19jLCBfX24sCi0gICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+Ci0gICAgICAgIF9fYm9zMCAoX19zKSAvIHNpemVv ZiAod2NoYXJfdCkpOwotICAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fgorLi4vd2NzbWJzL2JpdHMvd2NoYXIyLmg6MTAzOjQyOiB3 YXJuaW5nOiBjYWxsIHRvIOKAmF9fd21lbXNldF93YXJu4oCZIGRlY2xhcmVk IHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IHdtZW1zZXQgY2FsbGVkIHdpdGgg bGVuZ3RoIGJpZ2dlciB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVy CisgICAgICBfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JPUzBfTFQyIChf X3dtZW1zZXRfd2FybiwgX19uLCBfX3MsCisuLi9taXNjL3N5cy9jZGVmcy5o OjIzNDo1OiBub3RlOiBpbiBkZWZpbml0aW9uIG9mIG1hY3JvIOKAmF9fRk9S VElGWV9XQVJOSU5HX09OTFlfSUZfQk9TMF9MVDLigJkKKyAgICAgZXJyX2Zu ICgpOyBcCisgICAgIF5+fn5+fgogSW4gZnVuY3Rpb24g4oCYd2NzbmNweeKA mSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVzdOKAmSBhdCB0c3QtY2hr MS5jOjcxMzozOgotLi4vd2NzbWJzL2JpdHMvd2NoYXIyLmg6MjAwOjk6IHdh cm5pbmc6IGNhbGwgdG8g4oCYX193Y3NuY3B5X2Noa193YXJu4oCZIGRlY2xh cmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IHdjc25jcHkgY2FsbGVkIHdp dGggbGVuZ3RoIGJpZ2dlciB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gYnVm ZmVyCi0gIHJldHVybiBfX3djc25jcHlfY2hrX3dhcm4gKF9fZGVzdCwgX19z cmMsIF9fbiwKLSAgICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fgotICAgICAgICBfX2JvcyAoX19kZXN0KSAvIHNpemVv ZiAod2NoYXJfdCkpOwotICAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+CisuLi93Y3NtYnMvYml0cy93Y2hhcjIuaDoxNjE6NDE6 IHdhcm5pbmc6IGNhbGwgdG8g4oCYX193Y3NuY3B5X3dhcm7igJkgZGVjbGFy ZWQgd2l0aCBhdHRyaWJ1dGUgd2FybmluZzogd2NzbmNweSBjYWxsZWQgd2l0 aCBsZW5ndGggYmlnZ2VyIHRoYW4gc2l6ZSBvZiBkZXN0aW5hdGlvbiBidWZm ZXIKKyAgICAgIF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9TX0xUMiAo X193Y3NuY3B5X3dhcm4sIF9fbiwgX19kZXN0LAorLi4vbWlzYy9zeXMvY2Rl ZnMuaDoyNDQ6NTogbm90ZTogaW4gZGVmaW5pdGlvbiBvZiBtYWNybyDigJhf X0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JPU19MVDLigJkKKyAgICAgZXJy X2ZuICgpOyBcCisgICAgIF5+fn5+fgogSW4gZnVuY3Rpb24g4oCYd2NzbmNw eeKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVzdOKAmSBhdCB0c3Qt Y2hrMS5jOjcyMTozOgotLi4vd2NzbWJzL2JpdHMvd2NoYXIyLmg6MjAwOjk6 IHdhcm5pbmc6IGNhbGwgdG8g4oCYX193Y3NuY3B5X2Noa193YXJu4oCZIGRl Y2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IHdjc25jcHkgY2FsbGVk IHdpdGggbGVuZ3RoIGJpZ2dlciB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24g YnVmZmVyCi0gIHJldHVybiBfX3djc25jcHlfY2hrX3dhcm4gKF9fZGVzdCwg X19zcmMsIF9fbiwKLSAgICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fgotICAgICAgICBfX2JvcyAoX19kZXN0KSAvIHNp emVvZiAod2NoYXJfdCkpOwotICAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+CisuLi93Y3NtYnMvYml0cy93Y2hhcjIuaDoxNjE6 NDE6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX193Y3NuY3B5X3dhcm7igJkgZGVj bGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2FybmluZzogd2NzbmNweSBjYWxsZWQg d2l0aCBsZW5ndGggYmlnZ2VyIHRoYW4gc2l6ZSBvZiBkZXN0aW5hdGlvbiBi dWZmZXIKKyAgICAgIF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9TX0xU MiAoX193Y3NuY3B5X3dhcm4sIF9fbiwgX19kZXN0LAorLi4vbWlzYy9zeXMv Y2RlZnMuaDoyNDQ6NTogbm90ZTogaW4gZGVmaW5pdGlvbiBvZiBtYWNybyDi gJhfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JPU19MVDLigJkKKyAgICAg ZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+fgogSW4gZnVuY3Rpb24g4oCYd2Nw bmNweeKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVzdOKAmSBhdCB0 c3QtY2hrMS5jOjcyNTozOgotLi4vd2NzbWJzL2JpdHMvd2NoYXIyLmg6MjMx Ojk6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX193Y3BuY3B5X2Noa193YXJu4oCZ IGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IHdjcG5jcHkgY2Fs bGVkIHdpdGggbGVuZ3RoIGJpZ2dlciB0aGFuIHNpemUgb2YgZGVzdGluYXRp b24gYnVmZmVyCi0gIHJldHVybiBfX3djcG5jcHlfY2hrX3dhcm4gKF9fZGVz dCwgX19zcmMsIF9fbiwKLSAgICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fgotICAgICAgICBfX2JvcyAoX19kZXN0KSAv IHNpemVvZiAod2NoYXJfdCkpOwotICAgICAgICB+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+CisuLi93Y3NtYnMvYml0cy93Y2hhcjIuaDox ODY6NDE6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX193Y3BuY3B5X3dhcm7igJkg ZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2FybmluZzogd2NwbmNweSBjYWxs ZWQgd2l0aCBsZW5ndGggYmlnZ2VyIHRoYW4gc2l6ZSBvZiBkZXN0aW5hdGlv biBidWZmZXIKKyAgICAgIF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9T X0xUMiAoX193Y3BuY3B5X3dhcm4sIF9fbiwgX19kZXN0LAorLi4vbWlzYy9z eXMvY2RlZnMuaDoyNDQ6NTogbm90ZTogaW4gZGVmaW5pdGlvbiBvZiBtYWNy byDigJhfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JPU19MVDLigJkKKyAg ICAgZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+fgogSW4gZnVuY3Rpb24g4oCY d2NwbmNweeKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVzdOKAmSBh dCB0c3QtY2hrMS5jOjcyOTozOgotLi4vd2NzbWJzL2JpdHMvd2NoYXIyLmg6 MjMxOjk6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX193Y3BuY3B5X2Noa193YXJu 4oCZIGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IHdjcG5jcHkg Y2FsbGVkIHdpdGggbGVuZ3RoIGJpZ2dlciB0aGFuIHNpemUgb2YgZGVzdGlu YXRpb24gYnVmZmVyCi0gIHJldHVybiBfX3djcG5jcHlfY2hrX3dhcm4gKF9f ZGVzdCwgX19zcmMsIF9fbiwKLSAgICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotICAgICAgICBfX2JvcyAoX19kZXN0 KSAvIHNpemVvZiAod2NoYXJfdCkpOwotICAgICAgICB+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisuLi93Y3NtYnMvYml0cy93Y2hhcjIu aDoxODY6NDE6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX193Y3BuY3B5X3dhcm7i gJkgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2FybmluZzogd2NwbmNweSBj YWxsZWQgd2l0aCBsZW5ndGggYmlnZ2VyIHRoYW4gc2l6ZSBvZiBkZXN0aW5h dGlvbiBidWZmZXIKKyAgICAgIF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZf Qk9TX0xUMiAoX193Y3BuY3B5X3dhcm4sIF9fbiwgX19kZXN0LAorLi4vbWlz Yy9zeXMvY2RlZnMuaDoyNDQ6NTogbm90ZTogaW4gZGVmaW5pdGlvbiBvZiBt YWNybyDigJhfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JPU19MVDLigJkK KyAgICAgZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+fgogSW4gZnVuY3Rpb24g 4oCYd21lbWNweeKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVzdOKA mSBhdCB0c3QtY2hrMS5jOjc0NzozOgotLi4vd2NzbWJzL2JpdHMvd2NoYXIy Lmg6NDk6OTogd2FybmluZzogY2FsbCB0byDigJhfX3dtZW1jcHlfY2hrX3dh cm7igJkgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2FybmluZzogd21lbWNw eSBjYWxsZWQgd2l0aCBsZW5ndGggYmlnZ2VyIHRoYW4gc2l6ZSBvZiBkZXN0 aW5hdGlvbiBidWZmZXIKLSAgcmV0dXJuIF9fd21lbWNweV9jaGtfd2FybiAo X19zMSwgX19zMiwgX19uLAotICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+Ci0gICAgICAgIF9fYm9zMCAoX19zMSkgLyBz aXplb2YgKHdjaGFyX3QpKTsKLSAgICAgICAgfn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+CisuLi93Y3NtYnMvYml0cy93Y2hhcjIuaDozNTo0 Mjogd2FybmluZzogY2FsbCB0byDigJhfX3dtZW1jcHlfd2FybuKAmSBkZWNs YXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJuaW5nOiB3bWVtY3B5IGNhbGxlZCB3 aXRoIGxlbmd0aCBiaWdnZXIgdGhhbiBzaXplIG9mIGRlc3RpbmF0aW9uIGJ1 ZmZlcgorICAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1MwX0xU MiAoX193bWVtY3B5X3dhcm4sIF9fbiwgX19zMSwKKy4uL21pc2Mvc3lzL2Nk ZWZzLmg6MjM0OjU6IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFjcm8g4oCY X19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1MwX0xUMuKAmQorICAgICBl cnJfZm4gKCk7IFwKKyAgICAgXn5+fn5+CiBJbiBmdW5jdGlvbiDigJh3bWVt bW92ZeKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVzdOKAmSBhdCB0 c3QtY2hrMS5jOjc1NTozOgotLi4vd2NzbWJzL2JpdHMvd2NoYXIyLmg6Nzc6 OTogd2FybmluZzogY2FsbCB0byDigJhfX3dtZW1tb3ZlX2Noa193YXJu4oCZ IGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IHdtZW1tb3ZlIGNh bGxlZCB3aXRoIGxlbmd0aCBiaWdnZXIgdGhhbiBzaXplIG9mIGRlc3RpbmF0 aW9uIGJ1ZmZlcgotICByZXR1cm4gX193bWVtbW92ZV9jaGtfd2FybiAoX19z MSwgX19zMiwgX19uLAotICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fgotICAgICAgICAgX19ib3MwIChfX3MxKSAvIHNp emVvZiAod2NoYXJfdCkpOwotICAgICAgICAgfn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+CisuLi93Y3NtYnMvYml0cy93Y2hhcjIuaDo1Njo0 Mjogd2FybmluZzogY2FsbCB0byDigJhfX3dtZW1tb3ZlX3dhcm7igJkgZGVj bGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2FybmluZzogd21lbW1vdmUgY2FsbGVk IHdpdGggbGVuZ3RoIGJpZ2dlciB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24g YnVmZmVyCisgICAgICBfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JPUzBf TFQyIChfX3dtZW1tb3ZlX3dhcm4sIF9fbiwgX19zMSwKKy4uL21pc2Mvc3lz L2NkZWZzLmg6MjM0OjU6IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFjcm8g 4oCYX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1MwX0xUMuKAmQorICAg ICBlcnJfZm4gKCk7IFwKKyAgICAgXn5+fn5+CiBJbiBmdW5jdGlvbiDigJh3 bWVtcGNweeKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVzdOKAmSBh dCB0c3QtY2hrMS5jOjc2Mzo4OgotLi4vd2NzbWJzL2JpdHMvd2NoYXIyLmg6 MTEwOjk6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX193bWVtcGNweV9jaGtfd2Fy buKAmSBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJuaW5nOiB3bWVtcGNw eSBjYWxsZWQgd2l0aCBsZW5ndGggYmlnZ2VyIHRoYW4gc2l6ZSBvZiBkZXN0 aW5hdGlvbiBidWZmZXIKLSAgcmV0dXJuIF9fd21lbXBjcHlfY2hrX3dhcm4g KF9fczEsIF9fczIsIF9fbiwKLSAgICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn4KLSAgICAgICAgIF9fYm9zMCAoX19zMSkg LyBzaXplb2YgKHdjaGFyX3QpKTsKLSAgICAgICAgIH5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fgorLi4vd2NzbWJzL2JpdHMvd2NoYXIyLmg6 ODE6NDI6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX193bWVtcGNweV93YXJu4oCZ IGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IHdtZW1wY3B5IGNh bGxlZCB3aXRoIGxlbmd0aCBiaWdnZXIgdGhhbiBzaXplIG9mIGRlc3RpbmF0 aW9uIGJ1ZmZlcgorICAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9C T1MwX0xUMiAoX193bWVtcGNweV93YXJuLCBfX24sIF9fczEsCisuLi9taXNj L3N5cy9jZGVmcy5oOjIzNDo1OiBub3RlOiBpbiBkZWZpbml0aW9uIG9mIG1h Y3JvIOKAmF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9TMF9MVDLigJkK KyAgICAgZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+fgogSW4gZnVuY3Rpb24g 4oCYd21lbXNldOKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVzdOKA mSBhdCB0c3QtY2hrMS5jOjc3MTozOgotLi4vd2NzbWJzL2JpdHMvd2NoYXIy Lmg6MTM3Ojk6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX193bWVtc2V0X2Noa193 YXJu4oCZIGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IHdtZW1z ZXQgY2FsbGVkIHdpdGggbGVuZ3RoIGJpZ2dlciB0aGFuIHNpemUgb2YgZGVz dGluYXRpb24gYnVmZmVyCi0gIHJldHVybiBfX3dtZW1zZXRfY2hrX3dhcm4g KF9fcywgX19jLCBfX24sCi0gICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+Ci0gICAgICAgIF9fYm9zMCAoX19zKSAvIHNpemVv ZiAod2NoYXJfdCkpOwotICAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fgorLi4vd2NzbWJzL2JpdHMvd2NoYXIyLmg6MTAzOjQyOiB3 YXJuaW5nOiBjYWxsIHRvIOKAmF9fd21lbXNldF93YXJu4oCZIGRlY2xhcmVk IHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IHdtZW1zZXQgY2FsbGVkIHdpdGgg bGVuZ3RoIGJpZ2dlciB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVy CisgICAgICBfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JPUzBfTFQyIChf X3dtZW1zZXRfd2FybiwgX19uLCBfX3MsCisuLi9taXNjL3N5cy9jZGVmcy5o OjIzNDo1OiBub3RlOiBpbiBkZWZpbml0aW9uIG9mIG1hY3JvIOKAmF9fRk9S VElGWV9XQVJOSU5HX09OTFlfSUZfQk9TMF9MVDLigJkKKyAgICAgZXJyX2Zu ICgpOyBcCisgICAgIF5+fn5+fgogSW4gZnVuY3Rpb24g4oCYd2NzbmNweeKA mSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVzdOKAmSBhdCB0c3QtY2hr MS5jOjc5MzozOgotLi4vd2NzbWJzL2JpdHMvd2NoYXIyLmg6MjAwOjk6IHdh cm5pbmc6IGNhbGwgdG8g4oCYX193Y3NuY3B5X2Noa193YXJu4oCZIGRlY2xh cmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IHdjc25jcHkgY2FsbGVkIHdp dGggbGVuZ3RoIGJpZ2dlciB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gYnVm ZmVyCi0gIHJldHVybiBfX3djc25jcHlfY2hrX3dhcm4gKF9fZGVzdCwgX19z cmMsIF9fbiwKLSAgICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fgotICAgICAgICBfX2JvcyAoX19kZXN0KSAvIHNpemVv ZiAod2NoYXJfdCkpOwotICAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+Ci1JbiBmaWxlIGluY2x1ZGVkIGZyb20gLi4vbGliaW8v c3RkaW8uaDo4NjI6MCwKLSAgICAgICAgICAgICAgICAgZnJvbSAuLi9pbmNs dWRlL3N0ZGlvLmg6MiwKLSAgICAgICAgICAgICAgICAgZnJvbSB0c3QtY2hr MS5jOjMwLAotICAgICAgICAgICAgICAgICBmcm9tIHRzdC1jaGsyLmM6MjoK Ky4uL3djc21icy9iaXRzL3djaGFyMi5oOjE2MTo0MTogd2FybmluZzogY2Fs bCB0byDigJhfX3djc25jcHlfd2FybuKAmSBkZWNsYXJlZCB3aXRoIGF0dHJp YnV0ZSB3YXJuaW5nOiB3Y3NuY3B5IGNhbGxlZCB3aXRoIGxlbmd0aCBiaWdn ZXIgdGhhbiBzaXplIG9mIGRlc3RpbmF0aW9uIGJ1ZmZlcgorICAgICAgX19G T1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1NfTFQyIChfX3djc25jcHlfd2Fy biwgX19uLCBfX2Rlc3QsCisuLi9taXNjL3N5cy9jZGVmcy5oOjI0NDo1OiBu b3RlOiBpbiBkZWZpbml0aW9uIG9mIG1hY3JvIOKAmF9fRk9SVElGWV9XQVJO SU5HX09OTFlfSUZfQk9TX0xUMuKAmQorICAgICBlcnJfZm4gKCk7IFwKKyAg ICAgXn5+fn5+CiBJbiBmdW5jdGlvbiDigJhmZ2V0c+KAmSwKICAgICBpbmxp bmVkIGZyb20g4oCYZG9fdGVzdOKAmSBhdCB0c3QtY2hrMS5jOjk2NDo3Ogot Li4vbGliaW8vYml0cy9zdGRpbzIuaDoyNjA6OTogd2FybmluZzogY2FsbCB0 byDigJhfX2ZnZXRzX2Noa193YXJu4oCZIGRlY2xhcmVkIHdpdGggYXR0cmli dXRlIHdhcm5pbmc6IGZnZXRzIGNhbGxlZCB3aXRoIGJpZ2dlciBzaXplIHRo YW4gbGVuZ3RoIG9mIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICByZXR1cm4gX19m Z2V0c19jaGtfd2FybiAoX19zLCBfX2JvcyAoX19zKSwgX19uLCBfX3N0cmVh bSk7Ci0gICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fgorLi4vbGliaW8vYml0cy9zdGRpbzIuaDoz MTE6Mjg6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX19mZ2V0c193YXJu4oCZIGRl Y2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IGZnZXRzIGNhbGxlZCB3 aXRoIGJpZ2dlciBzaXplIHRoYW4gbGVuZ3RoIG9mIGRlc3RpbmF0aW9uIGJ1 ZmZlcgorICAgICAgX19GT1JUSUZZX1dBUk5JTkdfSUYgKF9fZmdldHNfd2Fy biwgX19ib3Nfc3RhdGljX2x0IChfX24sIF9fcykgJiYgX19uID4gMCwKKy4u L21pc2Mvc3lzL2NkZWZzLmg6MjE4OjU6IG5vdGU6IGluIGRlZmluaXRpb24g b2YgbWFjcm8g4oCYX19GT1JUSUZZX1dBUk5JTkdfSUbigJkKKyAgICAgZXJy X2ZuICgpOyBcCisgICAgIF5+fn5+fgogSW4gZnVuY3Rpb24g4oCYZmdldHNf dW5sb2NrZWTigJksCiAgICAgaW5saW5lZCBmcm9tIOKAmGRvX3Rlc3TigJkg YXQgdHN0LWNoazEuYzo5OTE6NzoKLS4uL2xpYmlvL2JpdHMvc3RkaW8yLmg6 MzE4Ojk6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX19mZ2V0c191bmxvY2tlZF9j aGtfd2FybuKAmSBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJuaW5nOiBm Z2V0c191bmxvY2tlZCBjYWxsZWQgd2l0aCBiaWdnZXIgc2l6ZSB0aGFuIGxl bmd0aCBvZiBkZXN0aW5hdGlvbiBidWZmZXIKLSAgcmV0dXJuIF9fZmdldHNf dW5sb2NrZWRfY2hrX3dhcm4gKF9fcywgX19ib3MgKF9fcyksIF9fbiwgX19z dHJlYW0pOwotICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKy4uL2xpYmlvL2Jp dHMvc3RkaW8yLmg6MzU1OjI4OiB3YXJuaW5nOiBjYWxsIHRvIOKAmF9fZmdl dHNfdW5sb2NrZWRfd2FybuKAmSBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0ZSB3 YXJuaW5nOiBmZ2V0c191bmxvY2tlZCBjYWxsZWQgd2l0aCBiaWdnZXIgc2l6 ZSB0aGFuIGxlbmd0aCBvZiBkZXN0aW5hdGlvbiBidWZmZXIKKyAgICAgIF9f Rk9SVElGWV9XQVJOSU5HX0lGIChfX2ZnZXRzX3VubG9ja2VkX3dhcm4sCisu Li9taXNjL3N5cy9jZGVmcy5oOjIxODo1OiBub3RlOiBpbiBkZWZpbml0aW9u IG9mIG1hY3JvIOKAmF9fRk9SVElGWV9XQVJOSU5HX0lG4oCZCisgICAgIGVy cl9mbiAoKTsgXAorICAgICBefn5+fn4KIEluIGZ1bmN0aW9uIOKAmGZyZWFk 4oCZLAogICAgIGlubGluZWQgZnJvbSDigJhkb190ZXN04oCZIGF0IHRzdC1j aGsxLmM6MTAyMTo3OgotLi4vbGliaW8vYml0cy9zdGRpbzIuaDoyOTI6OTog d2FybmluZzogY2FsbCB0byDigJhfX2ZyZWFkX2Noa193YXJu4oCZIGRlY2xh cmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IGZyZWFkIGNhbGxlZCB3aXRo IGJpZ2dlciBzaXplICogbm1lbWIgdGhhbiBsZW5ndGggb2YgZGVzdGluYXRp b24gYnVmZmVyCi0gIHJldHVybiBfX2ZyZWFkX2Noa193YXJuIChfX3B0ciwg X19ib3MwIChfX3B0ciksIF9fc2l6ZSwgX19uLCBfX3N0cmVhbSk7Ci0gICAg ICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKy4uL2xpYmlvL2JpdHMvc3RkaW8y Lmg6MzMzOjI4OiB3YXJuaW5nOiBjYWxsIHRvIOKAmF9fZnJlYWRfd2FybuKA mSBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJuaW5nOiBmcmVhZCBjYWxs ZWQgd2l0aCBiaWdnZXIgc2l6ZSAqIG5tZW1iIHRoYW4gbGVuZ3RoIG9mIGRl c3RpbmF0aW9uIGJ1ZmZlcgorICAgICAgX19GT1JUSUZZX1dBUk5JTkdfSUYg KF9fZnJlYWRfd2FybiwgX19ib3MwX3N0YXRpY19sdCAoX19zaXplICogX19u LCBfX3B0cikKKy4uL21pc2Mvc3lzL2NkZWZzLmg6MjE4OjU6IG5vdGU6IGlu IGRlZmluaXRpb24gb2YgbWFjcm8g4oCYX19GT1JUSUZZX1dBUk5JTkdfSUbi gJkKKyAgICAgZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+fgogSW4gZnVuY3Rp b24g4oCYZnJlYWRfdW5sb2NrZWTigJksCiAgICAgaW5saW5lZCBmcm9tIOKA mGRvX3Rlc3TigJkgYXQgdHN0LWNoazEuYzoxMDYwOjc6Ci0uLi9saWJpby9i aXRzL3N0ZGlvMi5oOjM1NDo5OiB3YXJuaW5nOiBjYWxsIHRvIOKAmF9fZnJl YWRfdW5sb2NrZWRfY2hrX3dhcm7igJkgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1 dGUgd2FybmluZzogZnJlYWRfdW5sb2NrZWQgY2FsbGVkIHdpdGggYmlnZ2Vy IHNpemUgKiBubWVtYiB0aGFuIGxlbmd0aCBvZiBkZXN0aW5hdGlvbiBidWZm ZXIKLSAgcmV0dXJuIF9fZnJlYWRfdW5sb2NrZWRfY2hrX3dhcm4gKF9fcHRy LCBfX2JvczAgKF9fcHRyKSwgX19zaXplLCBfX24sCi0gICAgICAgICBefn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fgotICAgICAgICBfX3N0cmVhbSk7Ci0gICAgICAgIH5+ fn5+fn5+fgotSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uL2luY2x1ZGUvYml0 cy91bmlzdGQuaDoxOjAsCi0gICAgICAgICAgICAgICAgIGZyb20gLi4vcG9z aXgvdW5pc3RkLmg6MTE2NywKLSAgICAgICAgICAgICAgICAgZnJvbSAuLi9p bmNsdWRlL3VuaXN0ZC5oOjIsCi0gICAgICAgICAgICAgICAgIGZyb20gdHN0 LWNoazEuYzozMywKLSAgICAgICAgICAgICAgICAgZnJvbSB0c3QtY2hrMi5j OjI6CisuLi9saWJpby9iaXRzL3N0ZGlvMi5oOjM4MToyODogd2FybmluZzog Y2FsbCB0byDigJhfX2ZyZWFkX3VubG9ja2VkX3dhcm7igJkgZGVjbGFyZWQg d2l0aCBhdHRyaWJ1dGUgd2FybmluZzogZnJlYWRfdW5sb2NrZWQgY2FsbGVk IHdpdGggYmlnZ2VyIHNpemUgKiBuIHRoYW4gbGVuZ3RoIG9mIGRlc3RpbmF0 aW9uIGJ1ZmZlcgorICAgICAgX19GT1JUSUZZX1dBUk5JTkdfSUYgKF9fZnJl YWRfdW5sb2NrZWRfd2FybiwKKy4uL21pc2Mvc3lzL2NkZWZzLmg6MjE4OjU6 IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFjcm8g4oCYX19GT1JUSUZZX1dB Uk5JTkdfSUbigJkKKyAgICAgZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+fgog SW4gZnVuY3Rpb24g4oCYcmVhZOKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCY ZG9fdGVzdOKAmSBhdCB0c3QtY2hrMS5jOjEwODc6NzoKLS4uL3Bvc2l4L2Jp dHMvdW5pc3RkLmg6NDI6OTogd2FybmluZzogY2FsbCB0byDigJhfX3JlYWRf Y2hrX3dhcm7igJkgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2FybmluZzog cmVhZCBjYWxsZWQgd2l0aCBiaWdnZXIgbGVuZ3RoIHRoYW4gc2l6ZSBvZiB0 aGUgZGVzdGluYXRpb24gYnVmZmVyCi0gIHJldHVybiBfX3JlYWRfY2hrX3dh cm4gKF9fZmQsIF9fYnVmLCBfX25ieXRlcywgX19ib3MwIChfX2J1ZikpOwot ICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fgorLi4vcG9zaXgvYml0cy91bmlzdGQuaDoz MTo0MTogd2FybmluZzogY2FsbCB0byDigJhfX3JlYWRfd2FybuKAmSBkZWNs YXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJuaW5nOiByZWFkIGNhbGxlZCB3aXRo IGJpZ2dlciBsZW5ndGggdGhhbiBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBi dWZmZXIKKyAgICAgIF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9TMF9M VCAoX19yZWFkX3dhcm4sIF9fbmJ5dGVzLCBfX2J1ZiwKKy4uL21pc2Mvc3lz L2NkZWZzLmg6MjM5OjU6IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFjcm8g 4oCYX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1MwX0xU4oCZCisgICAg IGVycl9mbiAoKTsgXAorICAgICBefn5+fn4KIEluIGZ1bmN0aW9uIOKAmHBy ZWFk4oCZLAogICAgIGlubGluZWQgZnJvbSDigJhkb190ZXN04oCZIGF0IHRz dC1jaGsxLmM6MTExMTo3OgotLi4vcG9zaXgvYml0cy91bmlzdGQuaDo4MDo5 OiB3YXJuaW5nOiBjYWxsIHRvIOKAmF9fcHJlYWRfY2hrX3dhcm7igJkgZGVj bGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2FybmluZzogcHJlYWQgY2FsbGVkIHdp dGggYmlnZ2VyIGxlbmd0aCB0aGFuIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9u IGJ1ZmZlcgotICByZXR1cm4gX19wcmVhZF9jaGtfd2FybiAoX19mZCwgX19i dWYsIF9fbmJ5dGVzLCBfX29mZnNldCwKLSAgICAgICAgIF5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0gICAg ICBfX2JvczAgKF9fYnVmKSk7Ci0gICAgICB+fn5+fn5+fn5+fn5+fn4KKy4u L3Bvc2l4L2JpdHMvdW5pc3RkLmg6Njc6NDE6IHdhcm5pbmc6IGNhbGwgdG8g 4oCYX19wcmVhZF9jaGtfd2FybuKAmSBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0 ZSB3YXJuaW5nOiBwcmVhZCBjYWxsZWQgd2l0aCBiaWdnZXIgbGVuZ3RoIHRo YW4gc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICBfX0ZP UlRJRllfV0FSTklOR19PTkxZX0lGX0JPUzBfTFQgKF9fcHJlYWRfY2hrX3dh cm4sIF9fbmJ5dGVzLCBfX2J1ZiwKKy4uL21pc2Mvc3lzL2NkZWZzLmg6MjM5 OjU6IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFjcm8g4oCYX19GT1JUSUZZ X1dBUk5JTkdfT05MWV9JRl9CT1MwX0xU4oCZCisgICAgIGVycl9mbiAoKTsg XAorICAgICBefn5+fn4KIEluIGZ1bmN0aW9uIOKAmHByZWFkNjTigJksCiAg ICAgaW5saW5lZCBmcm9tIOKAmGRvX3Rlc3TigJkgYXQgdHN0LWNoazEuYzox MTM3Ojc6Ci0uLi9wb3NpeC9iaXRzL3VuaXN0ZC5oOjExMzo5OiB3YXJuaW5n OiBjYWxsIHRvIOKAmF9fcHJlYWQ2NF9jaGtfd2FybuKAmSBkZWNsYXJlZCB3 aXRoIGF0dHJpYnV0ZSB3YXJuaW5nOiBwcmVhZDY0IGNhbGxlZCB3aXRoIGJp Z2dlciBsZW5ndGggdGhhbiBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZm ZXIKLSAgcmV0dXJuIF9fcHJlYWQ2NF9jaGtfd2FybiAoX19mZCwgX19idWYs IF9fbmJ5dGVzLCBfX29mZnNldCwKLSAgICAgICAgIF5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLSAgICAg ICAgX19ib3MwIChfX2J1ZikpOwotICAgICAgICB+fn5+fn5+fn5+fn5+fn4K LUluIGZpbGUgaW5jbHVkZWQgZnJvbSAuLi9pbmNsdWRlL2JpdHMvc29ja2V0 Mi5oOjE6MCwKLSAgICAgICAgICAgICAgICAgZnJvbSAuLi9zb2NrZXQvc3lz L3NvY2tldC5oOjI2OSwKLSAgICAgICAgICAgICAgICAgZnJvbSAuLi9pbmNs dWRlL3N5cy9zb2NrZXQuaDoyLAotICAgICAgICAgICAgICAgICBmcm9tIHRz dC1jaGsxLmM6MzcsCi0gICAgICAgICAgICAgICAgIGZyb20gdHN0LWNoazIu YzoyOgorLi4vcG9zaXgvYml0cy91bmlzdGQuaDo4Njo0MTogd2FybmluZzog Y2FsbCB0byDigJhfX3ByZWFkNjRfd2FybuKAmSBkZWNsYXJlZCB3aXRoIGF0 dHJpYnV0ZSB3YXJuaW5nOiBwcmVhZDY0IGNhbGxlZCB3aXRoIGJpZ2dlciBs ZW5ndGggdGhhbiBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIKKyAg ICAgIF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9TMF9MVCAoX19wcmVh ZDY0X3dhcm4sIF9fbmJ5dGVzLCBfX2J1ZiwKKy4uL21pc2Mvc3lzL2NkZWZz Lmg6MjM5OjU6IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFjcm8g4oCYX19G T1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1MwX0xU4oCZCisgICAgIGVycl9m biAoKTsgXAorICAgICBefn5+fn4KIEluIGZ1bmN0aW9uIOKAmHJlY3bigJks CiAgICAgaW5saW5lZCBmcm9tIOKAmGRvX3Rlc3TigJkgYXQgdHN0LWNoazEu YzoxMjA4OjExOgotLi4vc29ja2V0L2JpdHMvc29ja2V0Mi5oOjQyOjk6IHdh cm5pbmc6IGNhbGwgdG8g4oCYX19yZWN2X2Noa193YXJu4oCZIGRlY2xhcmVk IHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IHJlY3YgY2FsbGVkIHdpdGggYmln Z2VyIGxlbmd0aCB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVyCi0g IHJldHVybiBfX3JlY3ZfY2hrX3dhcm4gKF9fZmQsIF9fYnVmLCBfX24sIF9f Ym9zMCAoX19idWYpLCBfX2ZsYWdzKTsKLSAgICAgICAgIF5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+CisuLi9zb2NrZXQvYml0cy9zb2NrZXQyLmg6MzI6NDE6IHdhcm5pbmc6 IGNhbGwgdG8g4oCYX19yZWN2X3dhcm7igJkgZGVjbGFyZWQgd2l0aCBhdHRy aWJ1dGUgd2FybmluZzogcmVjdiBjYWxsZWQgd2l0aCBiaWdnZXIgbGVuZ3Ro IHRoYW4gc2l6ZSBvZiBkZXN0aW5hdGlvbiBidWZmZXIKKyAgICAgIF9fRk9S VElGWV9XQVJOSU5HX09OTFlfSUZfQk9TMF9MVCAoX19yZWN2X3dhcm4sIF9f biwgX19idWYsCisuLi9taXNjL3N5cy9jZGVmcy5oOjIzOTo1OiBub3RlOiBp biBkZWZpbml0aW9uIG9mIG1hY3JvIOKAmF9fRk9SVElGWV9XQVJOSU5HX09O TFlfSUZfQk9TMF9MVOKAmQorICAgICBlcnJfZm4gKCk7IFwKKyAgICAgXn5+ fn5+CiBJbiBmdW5jdGlvbiDigJhyZWN2ZnJvbeKAmSwKICAgICBpbmxpbmVk IGZyb20g4oCYZG9fdGVzdOKAmSBhdCB0c3QtY2hrMS5jOjEyMzk6MTE6Ci0u Li9zb2NrZXQvYml0cy9zb2NrZXQyLmg6NzM6OTogd2FybmluZzogY2FsbCB0 byDigJhfX3JlY3Zmcm9tX2Noa193YXJu4oCZIGRlY2xhcmVkIHdpdGggYXR0 cmlidXRlIHdhcm5pbmc6IHJlY3Zmcm9tIGNhbGxlZCB3aXRoIGJpZ2dlciBs ZW5ndGggdGhhbiBzaXplIG9mIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICByZXR1 cm4gX19yZWN2ZnJvbV9jaGtfd2FybiAoX19mZCwgX19idWYsIF9fbiwgX19i b3MwIChfX2J1ZiksIF9fZmxhZ3MsCi0gICAgICAgICBefn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn4KLSAgICAgICAgIF9fYWRkciwgX19hZGRyX2xlbik7Ci0gICAgICAg ICB+fn5+fn5+fn5+fn5+fn5+fn5+Ci1JbiBmaWxlIGluY2x1ZGVkIGZyb20g Li4vaW5jbHVkZS9iaXRzL3VuaXN0ZC5oOjE6MCwKLSAgICAgICAgICAgICAg ICAgZnJvbSAuLi9wb3NpeC91bmlzdGQuaDoxMTY3LAotICAgICAgICAgICAg ICAgICBmcm9tIC4uL2luY2x1ZGUvdW5pc3RkLmg6MiwKLSAgICAgICAgICAg ICAgICAgZnJvbSB0c3QtY2hrMS5jOjMzLAotICAgICAgICAgICAgICAgICBm cm9tIHRzdC1jaGsyLmM6MjoKKy4uL3NvY2tldC9iaXRzL3NvY2tldDIuaDo1 Njo0MTogd2FybmluZzogY2FsbCB0byDigJhfX3JlY3Zmcm9tX3dhcm7igJkg ZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2FybmluZzogcmVjdmZyb20gY2Fs bGVkIHdpdGggYmlnZ2VyIGxlbmd0aCB0aGFuIHNpemUgb2YgZGVzdGluYXRp b24gYnVmZmVyCisgICAgICBfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JP UzBfTFQgKF9fcmVjdmZyb21fd2FybiwgX19uLCBfX2J1ZiwKKy4uL21pc2Mv c3lzL2NkZWZzLmg6MjM5OjU6IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFj cm8g4oCYX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1MwX0xU4oCZCisg ICAgIGVycl9mbiAoKTsgXAorICAgICBefn5+fn4KIEluIGZ1bmN0aW9uIOKA mHJlYWRsaW5r4oCZLAogICAgIGlubGluZWQgZnJvbSDigJhkb190ZXN04oCZ IGF0IHRzdC1jaGsxLmM6MTI4Mjo3OgotLi4vcG9zaXgvYml0cy91bmlzdGQu aDoxNDg6OTogd2FybmluZzogY2FsbCB0byDigJhfX3JlYWRsaW5rX2Noa193 YXJu4oCZIGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IHJlYWRs aW5rIGNhbGxlZCB3aXRoIGJpZ2dlciBsZW5ndGggdGhhbiBzaXplIG9mIGRl c3RpbmF0aW9uIGJ1ZmZlcgotICByZXR1cm4gX19yZWFkbGlua19jaGtfd2Fy biAoX19wYXRoLCBfX2J1ZiwgX19sZW4sIF9fYm9zIChfX2J1ZikpOwotICAg ICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+CisuLi9wb3NpeC9iaXRzL3VuaXN0ZC5oOjEx Mzo0MDogd2FybmluZzogY2FsbCB0byDigJhfX3JlYWRsaW5rX3dhcm7igJkg ZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2FybmluZzogcmVhZGxpbmsgY2Fs bGVkIHdpdGggYmlnZ2VyIGxlbmd0aCB0aGFuIHNpemUgb2YgZGVzdGluYXRp b24gYnVmZmVyCisgICAgICBfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JP U19MVCAoX19yZWFkbGlua193YXJuLCBfX2xlbiwgX19idWYsCisuLi9taXNj L3N5cy9jZGVmcy5oOjI0OTo1OiBub3RlOiBpbiBkZWZpbml0aW9uIG9mIG1h Y3JvIOKAmF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9TX0xU4oCZCisg ICAgIGVycl9mbiAoKTsgXAorICAgICBefn5+fn4KIEluIGZ1bmN0aW9uIOKA mHJlYWRsaW5rYXTigJksCiAgICAgaW5saW5lZCBmcm9tIOKAmGRvX3Rlc3Ti gJkgYXQgdHN0LWNoazEuYzoxMzA3Ojc6Ci0uLi9wb3NpeC9iaXRzL3VuaXN0 ZC5oOjE4Mjo5OiB3YXJuaW5nOiBjYWxsIHRvIOKAmF9fcmVhZGxpbmthdF9j aGtfd2FybuKAmSBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJuaW5nOiBy ZWFkbGlua2F0IGNhbGxlZCB3aXRoIGJpZ2dlciBsZW5ndGggdGhhbiBzaXpl IG9mIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICByZXR1cm4gX19yZWFkbGlua2F0 X2Noa193YXJuIChfX2ZkLCBfX3BhdGgsIF9fYnVmLCBfX2xlbiwKLSAgICAg ICAgIF5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+Ci0gICAgICAgICAgIF9fYm9zIChfX2J1ZikpOwotICAgICAg ICAgICB+fn5+fn5+fn5+fn5+fgorLi4vcG9zaXgvYml0cy91bmlzdGQuaDox NDE6NDA6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX19yZWFkbGlua2F0X3dhcm7i gJkgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2FybmluZzogcmVhZGxpbmth dCBjYWxsZWQgd2l0aCBiaWdnZXIgbGVuZ3RoIHRoYW4gc2l6ZSBvZiBkZXN0 aW5hdGlvbiBidWZmZXIKKyAgICAgIF9fRk9SVElGWV9XQVJOSU5HX09OTFlf SUZfQk9TX0xUIChfX3JlYWRsaW5rYXRfd2FybiwgX19sZW4sIF9fYnVmLAor Li4vbWlzYy9zeXMvY2RlZnMuaDoyNDk6NTogbm90ZTogaW4gZGVmaW5pdGlv biBvZiBtYWNybyDigJhfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JPU19M VOKAmQorICAgICBlcnJfZm4gKCk7IFwKKyAgICAgXn5+fn5+CiBJbiBmdW5j dGlvbiDigJhnZXRjd2TigJksCiAgICAgaW5saW5lZCBmcm9tIOKAmGRvX3Rl c3TigJkgYXQgdHN0LWNoazEuYzoxMzYxOjg6Ci0uLi9wb3NpeC9iaXRzL3Vu aXN0ZC5oOjIwODo5OiB3YXJuaW5nOiBjYWxsIHRvIOKAmF9fZ2V0Y3dkX2No a193YXJu4oCZIGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IGdl dGN3ZCBjYWxsZXIgd2l0aCBiaWdnZXIgbGVuZ3RoIHRoYW4gc2l6ZSBvZiBk ZXN0aW5hdGlvbiBidWZmZXIKLSAgcmV0dXJuIF9fZ2V0Y3dkX2Noa193YXJu IChfX2J1ZiwgX19zaXplLCBfX2JvcyAoX19idWYpKTsKLSAgICAgICAgIF5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fgotSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uL2luY2x1ZGUvYml0cy93Y2hh cjIuaDoxOjAsCi0gICAgICAgICAgICAgICAgIGZyb20gLi4vd2NzbWJzL3dj aGFyLmg6NzgzLAotICAgICAgICAgICAgICAgICBmcm9tIC4uL2luY2x1ZGUv d2NoYXIuaDoyLAotICAgICAgICAgICAgICAgICBmcm9tIHRzdC1jaGsxLmM6 MzQsCi0gICAgICAgICAgICAgICAgIGZyb20gdHN0LWNoazIuYzoyOgorLi4v cG9zaXgvYml0cy91bmlzdGQuaDoxNjA6NDA6IHdhcm5pbmc6IGNhbGwgdG8g 4oCYX19nZXRjd2Rfd2FybuKAmSBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0ZSB3 YXJuaW5nOiBnZXRjd2QgY2FsbGVkIHdpdGggYmlnZ2VyIGxlbmd0aCB0aGFu IHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICBfX0ZPUlRJRllf V0FSTklOR19PTkxZX0lGX0JPU19MVCAoX19nZXRjd2Rfd2FybiwgX19zaXpl LCBfX2J1ZiwKKy4uL21pc2Mvc3lzL2NkZWZzLmg6MjQ5OjU6IG5vdGU6IGlu IGRlZmluaXRpb24gb2YgbWFjcm8g4oCYX19GT1JUSUZZX1dBUk5JTkdfT05M WV9JRl9CT1NfTFTigJkKKyAgICAgZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+ fgogSW4gZnVuY3Rpb24g4oCYbWJzcnRvd2Nz4oCZLAogICAgIGlubGluZWQg ZnJvbSDigJhkb190ZXN04oCZIGF0IHRzdC1jaGsxLmM6MTQ2Nzo3OgotLi4v d2NzbWJzL2JpdHMvd2NoYXIyLmg6NDg0Ojk6IHdhcm5pbmc6IGNhbGwgdG8g 4oCYX19tYnNydG93Y3NfY2hrX3dhcm7igJkgZGVjbGFyZWQgd2l0aCBhdHRy aWJ1dGUgd2FybmluZzogbWJzcnRvd2NzIGNhbGxlZCB3aXRoIGRzdCBidWZm ZXIgc21hbGxlciB0aGFuIGxlbiAqIHNpemVvZiAod2NoYXJfdCkKLSAgcmV0 dXJuIF9fbWJzcnRvd2NzX2Noa193YXJuIChfX2RzdCwgX19zcmMsIF9fbGVu LCBfX3BzLAotICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0gICAgICAgICAgX19ib3MgKF9fZHN0 KSAvIHNpemVvZiAod2NoYXJfdCkpOwotICAgICAgICAgIH5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotSW4gZmlsZSBpbmNsdWRlZCBmcm9t IC4uL2luY2x1ZGUvYml0cy9zdGRsaWIuaDoxOjAsCi0gICAgICAgICAgICAg ICAgIGZyb20gLi4vc3RkbGliL3N0ZGxpYi5oOjkwNSwKLSAgICAgICAgICAg ICAgICAgZnJvbSAuLi9pbmNsdWRlL3N0ZGxpYi5oOjYsCi0gICAgICAgICAg ICAgICAgIGZyb20gdHN0LWNoazEuYzozMSwKLSAgICAgICAgICAgICAgICAg ZnJvbSB0c3QtY2hrMi5jOjI6CisuLi93Y3NtYnMvYml0cy93Y2hhcjIuaDo0 Mzk6NDE6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX19tYnNydG93Y3Nfd2FybuKA mSBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJuaW5nOiBtYnNydG93Y3Mg Y2FsbGVkIHdpdGggZHN0IGJ1ZmZlciBzbWFsbGVyIHRoYW4gbGVuICogc2l6 ZW9mICh3Y2hhcl90KQorICAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05MWV9J Rl9CT1NfTFQyIChfX21ic3J0b3djc193YXJuLCBfX2xlbiwgX19kc3QsCisu Li9taXNjL3N5cy9jZGVmcy5oOjI0NDo1OiBub3RlOiBpbiBkZWZpbml0aW9u IG9mIG1hY3JvIOKAmF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9TX0xU MuKAmQorICAgICBlcnJfZm4gKCk7IFwKKyAgICAgXn5+fn5+CiBJbiBmdW5j dGlvbiDigJhtYnN0b3djc+KAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9f dGVzdOKAmSBhdCB0c3QtY2hrMS5jOjE0ODU6NzoKLS4uL3N0ZGxpYi9iaXRz L3N0ZGxpYi5oOjEyMzo5OiB3YXJuaW5nOiBjYWxsIHRvIOKAmF9fbWJzdG93 Y3NfY2hrX3dhcm7igJkgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2Fybmlu ZzogbWJzdG93Y3MgY2FsbGVkIHdpdGggZHN0IGJ1ZmZlciBzbWFsbGVyIHRo YW4gbGVuICogc2l6ZW9mICh3Y2hhcl90KQotICByZXR1cm4gX19tYnN0b3dj c19jaGtfd2FybiAoX19kc3QsIF9fc3JjLCBfX2xlbiwKLSAgICAgICAgIF5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0gICAg ICAgICAgX19ib3MgKF9fZHN0KSAvIHNpemVvZiAod2NoYXJfdCkpOwotICAg ICAgICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotSW4g ZmlsZSBpbmNsdWRlZCBmcm9tIC4uL2luY2x1ZGUvYml0cy93Y2hhcjIuaDox OjAsCi0gICAgICAgICAgICAgICAgIGZyb20gLi4vd2NzbWJzL3djaGFyLmg6 NzgzLAotICAgICAgICAgICAgICAgICBmcm9tIC4uL2luY2x1ZGUvd2NoYXIu aDoyLAotICAgICAgICAgICAgICAgICBmcm9tIHRzdC1jaGsxLmM6MzQsCi0g ICAgICAgICAgICAgICAgIGZyb20gdHN0LWNoazIuYzoyOgorLi4vc3RkbGli L2JpdHMvc3RkbGliLmg6MTA1OjQxOiB3YXJuaW5nOiBjYWxsIHRvIOKAmF9f bWJzdG93Y3Nfd2FybuKAmSBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJu aW5nOiBtYnN0b3djcyBjYWxsZWQgd2l0aCBkc3QgYnVmZmVyIHNtYWxsZXIg dGhhbiBsZW4gKiBzaXplb2YgKHdjaGFyX3QpCisgICAgICBfX0ZPUlRJRllf V0FSTklOR19PTkxZX0lGX0JPU19MVDIgKF9fbWJzdG93Y3Nfd2FybiwgX19s ZW4sIF9fZHN0LAorLi4vbWlzYy9zeXMvY2RlZnMuaDoyNDQ6NTogbm90ZTog aW4gZGVmaW5pdGlvbiBvZiBtYWNybyDigJhfX0ZPUlRJRllfV0FSTklOR19P TkxZX0lGX0JPU19MVDLigJkKKyAgICAgZXJyX2ZuICgpOyBcCisgICAgIF5+ fn5+fgogSW4gZnVuY3Rpb24g4oCYbWJzbnJ0b3djc+KAmSwKICAgICBpbmxp bmVkIGZyb20g4oCYZG9fdGVzdOKAmSBhdCB0c3QtY2hrMS5jOjE1MDU6NzoK LS4uL3djc21icy9iaXRzL3djaGFyMi5oOjU1Mjo5OiB3YXJuaW5nOiBjYWxs IHRvIOKAmF9fbWJzbnJ0b3djc19jaGtfd2FybuKAmSBkZWNsYXJlZCB3aXRo IGF0dHJpYnV0ZSB3YXJuaW5nOiBtYnNucnRvd2NzIGNhbGxlZCB3aXRoIGRz dCBidWZmZXIgc21hbGxlciB0aGFuIGxlbiAqIHNpemVvZiAod2NoYXJfdCkK LSAgcmV0dXJuIF9fbWJzbnJ0b3djc19jaGtfd2FybiAoX19kc3QsIF9fc3Jj LCBfX25tYywgX19sZW4sIF9fcHMsCi0gICAgICAgICBefn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgot ICAgICAgICAgICBfX2JvcyAoX19kc3QpIC8gc2l6ZW9mICh3Y2hhcl90KSk7 Ci0gICAgICAgICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fgorLi4vd2NzbWJzL2JpdHMvd2NoYXIyLmg6NDk0OjQwOiB3YXJuaW5nOiBj YWxsIHRvIOKAmF9fbWJzbnJ0b3djc193YXJu4oCZIGRlY2xhcmVkIHdpdGgg YXR0cmlidXRlIHdhcm5pbmc6IG1ic25ydG93Y3MgY2FsbGVkIHdpdGggZHN0 IGJ1ZmZlciBzbWFsbGVyIHRoYW4gbGVuICogc2l6ZW9mICh3Y2hhcl90KQor ICAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1NfTFQgKF9fbWJz bnJ0b3djc193YXJuLAorLi4vbWlzYy9zeXMvY2RlZnMuaDoyNDk6NTogbm90 ZTogaW4gZGVmaW5pdGlvbiBvZiBtYWNybyDigJhfX0ZPUlRJRllfV0FSTklO R19PTkxZX0lGX0JPU19MVOKAmQorICAgICBlcnJfZm4gKCk7IFwKKyAgICAg Xn5+fn5+CiBJbiBmdW5jdGlvbiDigJh3Y3NydG9tYnPigJksCiAgICAgaW5s aW5lZCBmcm9tIOKAmGRvX3Rlc3TigJkgYXQgdHN0LWNoazEuYzoxNTI0Ojc6 Ci0uLi93Y3NtYnMvYml0cy93Y2hhcjIuaDo1MTc6OTogd2FybmluZzogY2Fs bCB0byDigJhfX3djc3J0b21ic19jaGtfd2FybuKAmSBkZWNsYXJlZCB3aXRo IGF0dHJpYnV0ZSB3YXJuaW5nOiB3Y3NydG9tYnMgY2FsbGVkIHdpdGggZHN0 IGJ1ZmZlciBzbWFsbGVyIHRoYW4gbGVuCi0gIHJldHVybiBfX3djc3J0b21i c19jaGtfd2FybiAoX19kc3QsIF9fc3JjLCBfX2xlbiwgX19wcywgX19ib3Mg KF9fZHN0KSk7Ci0gICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLUluIGZp bGUgaW5jbHVkZWQgZnJvbSAuLi9pbmNsdWRlL2JpdHMvc3RkbGliLmg6MTow LAotICAgICAgICAgICAgICAgICBmcm9tIC4uL3N0ZGxpYi9zdGRsaWIuaDo5 MDUsCi0gICAgICAgICAgICAgICAgIGZyb20gLi4vaW5jbHVkZS9zdGRsaWIu aDo2LAotICAgICAgICAgICAgICAgICBmcm9tIHRzdC1jaGsxLmM6MzEsCi0g ICAgICAgICAgICAgICAgIGZyb20gdHN0LWNoazIuYzoyOgorLi4vd2NzbWJz L2JpdHMvd2NoYXIyLmg6NDY3OjQwOiB3YXJuaW5nOiBjYWxsIHRvIOKAmF9f d2NzcnRvbWJzX3dhcm7igJkgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2Fy bmluZzogd2NzcnRvbWJzIGNhbGxlZCB3aXRoIGRzdCBidWZmZXIgc21hbGxl ciB0aGFuIGxlbgorICAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9C T1NfTFQgKF9fd2NzcnRvbWJzX3dhcm4sIF9fbGVuLCBfX2RzdCwKKy4uL21p c2Mvc3lzL2NkZWZzLmg6MjQ5OjU6IG5vdGU6IGluIGRlZmluaXRpb24gb2Yg bWFjcm8g4oCYX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1NfTFTigJkK KyAgICAgZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+fgogSW4gZnVuY3Rpb24g 4oCYd2NzdG9tYnPigJksCiAgICAgaW5saW5lZCBmcm9tIOKAmGRvX3Rlc3Ti gJkgYXQgdHN0LWNoazEuYzoxNTQzOjc6Ci0uLi9zdGRsaWIvYml0cy9zdGRs aWIuaDoxNTI6OTogd2FybmluZzogY2FsbCB0byDigJhfX3djc3RvbWJzX2No a193YXJu4oCZIGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IHdj c3RvbWJzIGNhbGxlZCB3aXRoIGRzdCBidWZmZXIgc21hbGxlciB0aGFuIGxl bgotICByZXR1cm4gX193Y3N0b21ic19jaGtfd2FybiAoX19kc3QsIF9fc3Jj LCBfX2xlbiwgX19ib3MgKF9fZHN0KSk7Ci0gICAgICAgICBefn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fgotSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uL2luY2x1ZGUvYml0cy93Y2hh cjIuaDoxOjAsCi0gICAgICAgICAgICAgICAgIGZyb20gLi4vd2NzbWJzL3dj aGFyLmg6NzgzLAotICAgICAgICAgICAgICAgICBmcm9tIC4uL2luY2x1ZGUv d2NoYXIuaDoyLAotICAgICAgICAgICAgICAgICBmcm9tIHRzdC1jaGsxLmM6 MzQsCi0gICAgICAgICAgICAgICAgIGZyb20gdHN0LWNoazIuYzoyOgorLi4v c3RkbGliL2JpdHMvc3RkbGliLmg6MTMwOjQwOiB3YXJuaW5nOiBjYWxsIHRv IOKAmF9fd2NzdG9tYnNfd2FybuKAmSBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0 ZSB3YXJuaW5nOiB3Y3N0b21icyBjYWxsZWQgd2l0aCBkc3QgYnVmZmVyIHNt YWxsZXIgdGhhbiBsZW4KKyAgICAgIF9fRk9SVElGWV9XQVJOSU5HX09OTFlf SUZfQk9TX0xUIChfX3djc3RvbWJzX3dhcm4sIF9fbGVuLCBfX2RzdCwKKy4u L21pc2Mvc3lzL2NkZWZzLmg6MjQ5OjU6IG5vdGU6IGluIGRlZmluaXRpb24g b2YgbWFjcm8g4oCYX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1NfTFTi gJkKKyAgICAgZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+fgogSW4gZnVuY3Rp b24g4oCYd2NzbnJ0b21ic+KAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9f dGVzdOKAmSBhdCB0c3QtY2hrMS5jOjE1NjI6NzoKLS4uL3djc21icy9iaXRz L3djaGFyMi5oOjU4ODo5OiB3YXJuaW5nOiBjYWxsIHRvIOKAmF9fd2NzbnJ0 b21ic19jaGtfd2FybuKAmSBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJu aW5nOiB3Y3NucnRvbWJzIGNhbGxlZCB3aXRoIGRzdCBidWZmZXIgc21hbGxl ciB0aGFuIGxlbgotICByZXR1cm4gX193Y3NucnRvbWJzX2Noa193YXJuIChf X2RzdCwgX19zcmMsIF9fbndjLCBfX2xlbiwgX19wcywKLSAgICAgICAgIF5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+Ci0gICAgICAgICAgIF9fYm9zIChfX2RzdCkpOwotICAgICAg ICAgICB+fn5+fn5+fn5+fn5+fgotSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4u L2luY2x1ZGUvYml0cy9zdGRsaWIuaDoxOjAsCi0gICAgICAgICAgICAgICAg IGZyb20gLi4vc3RkbGliL3N0ZGxpYi5oOjkwNSwKLSAgICAgICAgICAgICAg ICAgZnJvbSAuLi9pbmNsdWRlL3N0ZGxpYi5oOjYsCi0gICAgICAgICAgICAg ICAgIGZyb20gdHN0LWNoazEuYzozMSwKLSAgICAgICAgICAgICAgICAgZnJv bSB0c3QtY2hrMi5jOjI6CisuLi93Y3NtYnMvYml0cy93Y2hhcjIuaDo1MjM6 NDA6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX193Y3NucnRvbWJzX3dhcm7igJkg ZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2FybmluZzogd2NzbnJ0b21icyBj YWxsZWQgd2l0aCBkc3QgYnVmZmVyIHNtYWxsZXIgdGhhbiBsZW4KKyAgICAg IF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9TX0xUIChfX3djc25ydG9t YnNfd2FybiwgX19sZW4sIF9fZHN0LAorLi4vbWlzYy9zeXMvY2RlZnMuaDoy NDk6NTogbm90ZTogaW4gZGVmaW5pdGlvbiBvZiBtYWNybyDigJhfX0ZPUlRJ RllfV0FSTklOR19PTkxZX0lGX0JPU19MVOKAmQorICAgICBlcnJfZm4gKCk7 IFwKKyAgICAgXn5+fn5+CiBJbiBmdW5jdGlvbiDigJhwdHNuYW1lX3LigJks CiAgICAgaW5saW5lZCBmcm9tIOKAmGRvX3Rlc3TigJkgYXQgdHN0LWNoazEu YzoxNTgyOjExOgotLi4vc3RkbGliL2JpdHMvc3RkbGliLmg6NzE6OTogd2Fy bmluZzogY2FsbCB0byDigJhfX3B0c25hbWVfcl9jaGtfd2FybuKAmSBkZWNs YXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJuaW5nOiBwdHNuYW1lX3IgY2FsbGVk IHdpdGggYnVmbGVuIGJpZ2dlciB0aGFuIHNpemUgb2YgYnVmCi0gIHJldHVy biBfX3B0c25hbWVfcl9jaGtfd2FybiAoX19mZCwgX19idWYsIF9fYnVmbGVu LCBfX2JvcyAoX19idWYpKTsKLSAgICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1J biBmaWxlIGluY2x1ZGVkIGZyb20gLi4vaW5jbHVkZS9iaXRzL3VuaXN0ZC5o OjE6MCwKLSAgICAgICAgICAgICAgICAgZnJvbSAuLi9wb3NpeC91bmlzdGQu aDoxMTY3LAotICAgICAgICAgICAgICAgICBmcm9tIC4uL2luY2x1ZGUvdW5p c3RkLmg6MiwKLSAgICAgICAgICAgICAgICAgZnJvbSB0c3QtY2hrMS5jOjMz LAotICAgICAgICAgICAgICAgICBmcm9tIHRzdC1jaGsyLmM6MjoKKy4uL3N0 ZGxpYi9iaXRzL3N0ZGxpYi5oOjYyOjQwOiB3YXJuaW5nOiBjYWxsIHRvIOKA mF9fcHRzbmFtZV9yX3dhcm7igJkgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUg d2FybmluZzogcHRzbmFtZV9yIGNhbGxlZCB3aXRoIGJ1ZmxlbiBiaWdnZXIg dGhhbiBzaXplIG9mIGJ1ZgorICAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05M WV9JRl9CT1NfTFQgKF9fcHRzbmFtZV9yX3dhcm4sIF9fYnVmbGVuLCBfX2J1 ZiwKKy4uL21pc2Mvc3lzL2NkZWZzLmg6MjQ5OjU6IG5vdGU6IGluIGRlZmlu aXRpb24gb2YgbWFjcm8g4oCYX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9C T1NfTFTigJkKKyAgICAgZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+fgogSW4g ZnVuY3Rpb24g4oCYY29uZnN0cuKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCY ZG9fdGVzdOKAmSBhdCB0c3QtY2hrMS5jOjE1OTQ6MzoKLS4uL3Bvc2l4L2Jp dHMvdW5pc3RkLmg6MjQ4Ojk6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX19jb25m c3RyX2Noa193YXJu4oCZIGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5p bmc6IGNvbmZzdHIgY2FsbGVkIHdpdGggYmlnZ2VyIGxlbmd0aCB0aGFuIHNp emUgb2YgZGVzdGluYXRpb24gYnVmZmVyCi0gIHJldHVybiBfX2NvbmZzdHJf Y2hrX3dhcm4gKF9fbmFtZSwgX19idWYsIF9fbGVuLCBfX2JvcyAoX19idWYp KTsKLSAgICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisuLi9wb3NpeC9iaXRzL3VuaXN0 ZC5oOjIwMzo0MDogd2FybmluZzogY2FsbCB0byDigJhfX2NvbmZzdHJfd2Fy buKAmSBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJuaW5nOiBjb25mc3Ry IGNhbGxlZCB3aXRoIGJpZ2dlciBsZW5ndGggdGhhbiBzaXplIG9mIGRlc3Rp bmF0aW9uIGJ1ZmZlcgorICAgICAgX19GT1JUSUZZX1dBUk5JTkdfT05MWV9J Rl9CT1NfTFQgKF9fY29uZnN0cl93YXJuLCBfX2xlbiwgX19idWYsCisuLi9t aXNjL3N5cy9jZGVmcy5oOjI0OTo1OiBub3RlOiBpbiBkZWZpbml0aW9uIG9m IG1hY3JvIOKAmF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9TX0xU4oCZ CisgICAgIGVycl9mbiAoKTsgXAorICAgICBefn5+fn4KIEluIGZ1bmN0aW9u IOKAmGdldGdyb3Vwc+KAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVz dOKAmSBhdCB0c3QtY2hrMS5jOjE2MDU6NzoKLS4uL3Bvc2l4L2JpdHMvdW5p c3RkLmg6MjczOjk6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX19nZXRncm91cHNf Y2hrX3dhcm7igJkgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2FybmluZzog Z2V0Z3JvdXBzIGNhbGxlZCB3aXRoIGJpZ2dlciBncm91cCBjb3VudCB0aGFu IHdoYXQgY2FuIGZpdCBpbnRvIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICByZXR1 cm4gX19nZXRncm91cHNfY2hrX3dhcm4gKF9fc2l6ZSwgX19saXN0LCBfX2Jv cyAoX19saXN0KSk7Ci0gICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorLi4vcG9zaXgvYml0 cy91bmlzdGQuaDoyMjE6NDA6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX19nZXRn cm91cHNfd2FybuKAmSBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJuaW5n OiBnZXRncm91cHMgY2FsbGVkIHdpdGggYmlnZ2VyIGdyb3VwIGNvdW50IHRo YW4gd2hhdCBjYW4gZml0IGludG8gZGVzdGluYXRpb24gYnVmZmVyCisgICAg ICBfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JPU19MVCAoX19nZXRncm91 cHNfd2FybiwKKy4uL21pc2Mvc3lzL2NkZWZzLmg6MjQ5OjU6IG5vdGU6IGlu IGRlZmluaXRpb24gb2YgbWFjcm8g4oCYX19GT1JUSUZZX1dBUk5JTkdfT05M WV9JRl9CT1NfTFTigJkKKyAgICAgZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+ fgogSW4gZnVuY3Rpb24g4oCYdHR5bmFtZV9y4oCZLAogICAgIGlubGluZWQg ZnJvbSDigJhkb190ZXN04oCZIGF0IHRzdC1jaGsxLmM6MTYyMDoxMToKLS4u L3Bvc2l4L2JpdHMvdW5pc3RkLmg6Mjk5Ojk6IHdhcm5pbmc6IGNhbGwgdG8g 4oCYX190dHluYW1lX3JfY2hrX3dhcm7igJkgZGVjbGFyZWQgd2l0aCBhdHRy aWJ1dGUgd2FybmluZzogdHR5bmFtZV9yIGNhbGxlZCB3aXRoIGJpZ2dlciBi dWZsZW4gdGhhbiBzaXplIG9mIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICByZXR1 cm4gX190dHluYW1lX3JfY2hrX3dhcm4gKF9fZmQsIF9fYnVmLCBfX2J1Zmxl biwgX19ib3MgKF9fYnVmKSk7Ci0gICAgICAgICBefn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgor Li4vcG9zaXgvYml0cy91bmlzdGQuaDoyNDk6NDA6IHdhcm5pbmc6IGNhbGwg dG8g4oCYX190dHluYW1lX3Jfd2FybuKAmSBkZWNsYXJlZCB3aXRoIGF0dHJp YnV0ZSB3YXJuaW5nOiB0dHluYW1lX3IgY2FsbGVkIHdpdGggYmlnZ2VyIGJ1 ZmxlbiB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVyCisgICAgICBf X0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JPU19MVCAoX190dHluYW1lX3Jf d2FybiwgX19idWZsZW4sIF9fYnVmLAorLi4vcG9zaXgvYml0cy91bmlzdGQu aDoyNDk6Njogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3JvIOKAmF9fRk9S VElGWV9XQVJOSU5HX09OTFlfSUZfQk9TX0xU4oCZCisgICAgICBfX0ZPUlRJ RllfV0FSTklOR19PTkxZX0lGX0JPU19MVCAoX190dHluYW1lX3Jfd2Fybiwg X19idWZsZW4sIF9fYnVmLAorICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn4KIEluIGZ1bmN0aW9uIOKAmGdldGhvc3RuYW1l4oCZLAog ICAgIGlubGluZWQgZnJvbSDigJhkb190ZXN04oCZIGF0IHRzdC1jaGsxLmM6 MTYzMjozOgotLi4vcG9zaXgvYml0cy91bmlzdGQuaDozNTI6OTogd2Fybmlu ZzogY2FsbCB0byDigJhfX2dldGhvc3RuYW1lX2Noa193YXJu4oCZIGRlY2xh cmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IGdldGhvc3RuYW1lIGNhbGxl ZCB3aXRoIGJpZ2dlciBidWZsZW4gdGhhbiBzaXplIG9mIGRlc3RpbmF0aW9u IGJ1ZmZlcgotICByZXR1cm4gX19nZXRob3N0bmFtZV9jaGtfd2FybiAoX19i dWYsIF9fYnVmbGVuLCBfX2JvcyAoX19idWYpKTsKLSAgICAgICAgIF5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn4KKy4uL3Bvc2l4L2JpdHMvdW5pc3RkLmg6MjkxOjQwOiB3YXJuaW5n OiBjYWxsIHRvIOKAmF9fZ2V0aG9zdG5hbWVfd2FybuKAmSBkZWNsYXJlZCB3 aXRoIGF0dHJpYnV0ZSB3YXJuaW5nOiBnZXRob3N0bmFtZSBjYWxsZWQgd2l0 aCBiaWdnZXIgYnVmbGVuIHRoYW4gc2l6ZSBvZiBkZXN0aW5hdGlvbiBidWZm ZXIKKyAgICAgIF9fRk9SVElGWV9XQVJOSU5HX09OTFlfSUZfQk9TX0xUIChf X2dldGhvc3RuYW1lX3dhcm4sIF9fYnVmbGVuLCBfX2J1ZiwKKy4uL21pc2Mv c3lzL2NkZWZzLmg6MjQ5OjU6IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFj cm8g4oCYX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1NfTFTigJkKKyAg ICAgZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+fgogSW4gZnVuY3Rpb24g4oCY Z2V0bG9naW5fcuKAmSwKICAgICBpbmxpbmVkIGZyb20g4oCYZG9fdGVzdOKA mSBhdCB0c3QtY2hrMS5jOjE2NDE6MzoKLS4uL3Bvc2l4L2JpdHMvdW5pc3Rk Lmg6MzI1Ojk6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX19nZXRsb2dpbl9yX2No a193YXJu4oCZIGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IGdl dGxvZ2luX3IgY2FsbGVkIHdpdGggYmlnZ2VyIGJ1ZmxlbiB0aGFuIHNpemUg b2YgZGVzdGluYXRpb24gYnVmZmVyCi0gIHJldHVybiBfX2dldGxvZ2luX3Jf Y2hrX3dhcm4gKF9fYnVmLCBfX2J1ZmxlbiwgX19ib3MgKF9fYnVmKSk7Ci0g ICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn4KKy4uL3Bvc2l4L2JpdHMvdW5pc3RkLmg6MjY5 OjQwOiB3YXJuaW5nOiBjYWxsIHRvIOKAmF9fZ2V0bG9naW5fcl93YXJu4oCZ IGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5pbmc6IGdldGxvZ2luX3Ig Y2FsbGVkIHdpdGggYmlnZ2VyIGJ1ZmxlbiB0aGFuIHNpemUgb2YgZGVzdGlu YXRpb24gYnVmZmVyCisgICAgICBfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lG X0JPU19MVCAoX19nZXRsb2dpbl9yX3dhcm4sIF9fYnVmbGVuLCBfX2J1ZiwK Ky4uL21pc2Mvc3lzL2NkZWZzLmg6MjQ5OjU6IG5vdGU6IGluIGRlZmluaXRp b24gb2YgbWFjcm8g4oCYX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1Nf TFTigJkKKyAgICAgZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+fgogSW4gZnVu Y3Rpb24g4oCYZ2V0ZG9tYWlubmFtZeKAmSwKICAgICBpbmxpbmVkIGZyb20g 4oCYZG9fdGVzdOKAmSBhdCB0c3QtY2hrMS5jOjE2NTE6NzoKLS4uL3Bvc2l4 L2JpdHMvdW5pc3RkLmg6MzgxOjk6IHdhcm5pbmc6IGNhbGwgdG8g4oCYX19n ZXRkb21haW5uYW1lX2Noa193YXJu4oCZIGRlY2xhcmVkIHdpdGggYXR0cmli dXRlIHdhcm5pbmc6IGdldGRvbWFpbm5hbWUgY2FsbGVkIHdpdGggYmlnZ2Vy IGJ1ZmxlbiB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVyCi0gIHJl dHVybiBfX2dldGRvbWFpbm5hbWVfY2hrX3dhcm4gKF9fYnVmLCBfX2J1Zmxl biwgX19ib3MgKF9fYnVmKSk7Ci0gICAgICAgICBefn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKy4u L3Bvc2l4L2JpdHMvdW5pc3RkLmg6MzE0OjQwOiB3YXJuaW5nOiBjYWxsIHRv IOKAmF9fZ2V0ZG9tYWlubmFtZV93YXJu4oCZIGRlY2xhcmVkIHdpdGggYXR0 cmlidXRlIHdhcm5pbmc6IGdldGRvbWFpbm5hbWUgY2FsbGVkIHdpdGggYmln Z2VyIGJ1ZmxlbiB0aGFuIHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVyCisg ICAgICBfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JPU19MVCAoX19nZXRk b21haW5uYW1lX3dhcm4sIF9fYnVmbGVuLCBfX2J1ZiwKKy4uL21pc2Mvc3lz L2NkZWZzLmg6MjQ5OjU6IG5vdGU6IGluIGRlZmluaXRpb24gb2YgbWFjcm8g 4oCYX19GT1JUSUZZX1dBUk5JTkdfT05MWV9JRl9CT1NfTFTigJkKKyAgICAg ZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+fgogSW4gZmlsZSBpbmNsdWRlZCBm cm9tIC4uL2luY2x1ZGUvYml0cy9zZWxlY3QyLmg6MTowLAogICAgICAgICAg ICAgICAgICBmcm9tIC4uL21pc2Mvc3lzL3NlbGVjdC5oOjEyMywKICAgICAg ICAgICAgICAgICAgZnJvbSAuLi9pbmNsdWRlL3N5cy9zZWxlY3QuaDoyLApA QCAtNTY3LDIwICs1NDAsMjEgQEAKIHRzdC1jaGsxLmM6MTY4NDozOiBub3Rl OiBpbiBleHBhbnNpb24gb2YgbWFjcm8g4oCYRkRfSVNTRVTigJkKICAgIEZE X0lTU0VUIChGRF9TRVRTSVpFLCAmcyk7CiAgICBefn5+fn5+fgotSW4gZmls ZSBpbmNsdWRlZCBmcm9tIC4uL2luY2x1ZGUvYml0cy9wb2xsMi5oOjE6MCwK LSAgICAgICAgICAgICAgICAgZnJvbSAuLi9pby9zeXMvcG9sbC5oOjczLAot ICAgICAgICAgICAgICAgICBmcm9tIC4uL2luY2x1ZGUvc3lzL3BvbGwuaDoy LAotICAgICAgICAgICAgICAgICBmcm9tIHRzdC1jaGsxLmM6MzUsCitJbiBm aWxlIGluY2x1ZGVkIGZyb20gLi4vaW5jbHVkZS9zeXMvY2RlZnMuaDozOjAs CisgICAgICAgICAgICAgICAgIGZyb20gLi4vaW5jbHVkZS9mZWF0dXJlcy5o OjQyMywKKyAgICAgICAgICAgICAgICAgZnJvbSB0c3QtY2hrMS5jOjIwLAog ICAgICAgICAgICAgICAgICBmcm9tIHRzdC1jaGsyLmM6MjoKIEluIGZ1bmN0 aW9uIOKAmHBvbGzigJksCiAgICAgaW5saW5lZCBmcm9tIOKAmGRvX3Rlc3Ti gJkgYXQgdHN0LWNoazEuYzoxNjk4OjM6Ci0uLi9pbmNsdWRlL2JpdHMvLi4v Li4vaW8vYml0cy9wb2xsMi5oOjQzOjk6IHdhcm5pbmc6IGNhbGwgdG8g4oCY X19wb2xsX2Noa193YXJu4oCZIGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdh cm5pbmc6IHBvbGwgY2FsbGVkIHdpdGggZmRzIGJ1ZmZlciB0b28gc21hbGwg ZmlsZSBuZmRzIGVudHJpZXMKLSAgcmV0dXJuIF9fcG9sbF9jaGtfd2FybiAo X19mZHMsIF9fbmZkcywgX190aW1lb3V0LCBfX2JvcyAoX19mZHMpKTsKLSAg ICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fgorLi4vaW5jbHVkZS9iaXRzLy4uLy4uL2lv L2JpdHMvcG9sbDIuaDozNjo0MTogd2FybmluZzogY2FsbCB0byDigJhfX3Bv bGxfd2FybuKAmSBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJuaW5nOiBw b2xsIGNhbGxlZCB3aXRoIGZkcyBidWZmZXIgdG9vIHNtYWxsCisgICAgICBf X0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JPU19MVDIgKF9fcG9sbF93YXJu LCBfX25mZHMsIF9fZmRzLAorLi4vbWlzYy9zeXMvY2RlZnMuaDoyNDQ6NTog bm90ZTogaW4gZGVmaW5pdGlvbiBvZiBtYWNybyDigJhfX0ZPUlRJRllfV0FS TklOR19PTkxZX0lGX0JPU19MVDLigJkKKyAgICAgZXJyX2ZuICgpOyBcCisg ICAgIF5+fn5+fgogSW4gZnVuY3Rpb24g4oCYcHBvbGzigJksCiAgICAgaW5s aW5lZCBmcm9tIOKAmGRvX3Rlc3TigJkgYXQgdHN0LWNoazEuYzoxNzA4OjM6 Ci0uLi9pbmNsdWRlL2JpdHMvLi4vLi4vaW8vYml0cy9wb2xsMi5oOjczOjk6 IHdhcm5pbmc6IGNhbGwgdG8g4oCYX19wcG9sbF9jaGtfd2FybuKAmSBkZWNs YXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJuaW5nOiBwcG9sbCBjYWxsZWQgd2l0 aCBmZHMgYnVmZmVyIHRvbyBzbWFsbCBmaWxlIG5mZHMgZW50cmllcwotICBy ZXR1cm4gX19wcG9sbF9jaGtfd2FybiAoX19mZHMsIF9fbmZkcywgX190aW1l b3V0LCBfX3NzLAotICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotICAgICAgX19ib3MgKF9fZmRz KSk7Ci0gICAgICB+fn5+fn5+fn5+fn5+fgorLi4vaW5jbHVkZS9iaXRzLy4u Ly4uL2lvL2JpdHMvcG9sbDIuaDo1ODo0MTogd2FybmluZzogY2FsbCB0byDi gJhfX3Bwb2xsX3dhcm7igJkgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2Fy bmluZzogcHBvbGwgY2FsbGVkIHdpdGggZmRzIGJ1ZmZlciB0b28gc21hbGwg ZmlsZSBuZmRzIGVudHJpZXMKKyAgICAgIF9fRk9SVElGWV9XQVJOSU5HX09O TFlfSUZfQk9TX0xUMiAoX19wcG9sbF93YXJuLCBfX25mZHMsIF9fZmRzLAor Li4vbWlzYy9zeXMvY2RlZnMuaDoyNDQ6NTogbm90ZTogaW4gZGVmaW5pdGlv biBvZiBtYWNybyDigJhfX0ZPUlRJRllfV0FSTklOR19PTkxZX0lGX0JPU19M VDLigJkKKyAgICAgZXJyX2ZuICgpOyBcCisgICAgIF5+fn5+fgo= --089e082511ec59f6cb0558e40455--