From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) by sourceware.org (Postfix) with ESMTPS id C6681383E824 for ; Wed, 30 Mar 2022 19:30:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C6681383E824 Received: by mail-pj1-x102f.google.com with SMTP id gb19so21705270pjb.1 for ; Wed, 30 Mar 2022 12:30:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=rSRzhMyHVCsSc2UjdBbOaCU55oRZ5YdQxPDaq5TgwLo=; b=QrhxzU5W+X9Pi9LJkUunSoZJibQhby/6c7fxeVlN8Ak+PTUekzrvt3K4oCrjDtyNGd kkre+jMTF7fC3EcdsD8eqDgf+o8T57KmMImCO9lcNnREag6hxX1DA1bl2DS/P/CWaCt9 Oam0hQRLf/oConKqOSP6iLaj+kh/lgDOCbnRll1CLuBsW8/rfcH7d2P4bvGTmHydFzZt 3bMZpPTKMyKRRuwjw7cNDUN4t/4fNPGRBwpKmpDF4AU3qNUOb6fk2q3IKjniff972mCR 4U0les4TEWWjqDj8847lQPDnUIJxHxUoQ6Nl0J5FAaIoNjHYDlNWLY51WAqMFJqTuaIM uXwg== X-Gm-Message-State: AOAM533Ru99T2y034KYn22djMTA4rktbUY1AagIixgRu5PCSNEPL7PM3 tvwdlbSUSkcq1Refit0cOrWS2z0uJTE63aJVdP1ccXKTw3s= X-Google-Smtp-Source: ABdhPJx1iTv8nyZwO7J69z76QpFuiFwHWC6VOOZtEqhRLLUnbtVKZkWDXRX5Qen1K7lI9enfkBJYpppp79zd+pUZ86U= X-Received: by 2002:a17:90b:4c44:b0:1c7:1326:ec90 with SMTP id np4-20020a17090b4c4400b001c71326ec90mr1270626pjb.87.1648668650655; Wed, 30 Mar 2022 12:30:50 -0700 (PDT) MIME-Version: 1.0 References: <20220330170200.2867894-1-goldstein.w.n@gmail.com> <20220330181711.jeq2gvllahoz7or7@google.com> In-Reply-To: <20220330181711.jeq2gvllahoz7or7@google.com> From: Noah Goldstein Date: Wed, 30 Mar 2022 14:30:39 -0500 Message-ID: Subject: Re: [PATCH v2] Add .clang-format style file To: Fangrui Song Cc: GNU C Library Content-Type: multipart/mixed; boundary="00000000000046e70605db749558" X-Spam-Status: No, score=-9.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SCC_5_SHORT_WORD_LINES, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Mar 2022 19:30:58 -0000 --00000000000046e70605db749558 Content-Type: text/plain; charset="UTF-8" On Wed, Mar 30, 2022 at 1:17 PM Fangrui Song wrote: > > Looks good but I don't know I have the permission to add a Reviewed-by: > :) Think it's fine, not like it can break anything. You've certainly improved the patch. Unless objection I'll add before I push > > To justify this for others, it helps to attach some examples > how clang-format formatted files match or differ from the existing ones. > > Showing some patches also helps as the patch formatter helps users the > most: > > git diff -U0 --no-color 'HEAD^' -- | py3 > path/to/llvm-project/clang/tools/clang-format/clang-format-diff.py -i -p1 Added a comment. If desirable we can add a script for it later. Here are some diff examples: Attached are four examples reformatted with clang-format. They highlight some of the pros/cons of the new automated style. pthread_rwlock_common.c: clang-format cleans up excess whitespace before the first comment [MaxEmptyLinesToKeep: 1] and realigns part of the comments: - /* A reader--writer lock that fulfills the POSIX requirements (but operations on this lock are not necessarily full barriers, as one may interpret the POSIX requirement about "synchronizing memory"). All critical sections are @@ -71,18 +70,18 @@ #1 0 0 0 0 Lock is idle (and in a read phase). #2 0 0 >0 0 Readers have acquired the lock. #3 0 1 0 0 Lock is not acquired; a writer will try to start a - write phase. + write phase. It also fixes difficult to ready indentation: { rnew = r - (1 << PTHREAD_RWLOCK_READER_SHIFT); /* If we are the last reader, we also need to unblock any readers - that are waiting for a writer to go first (PTHREAD_RWLOCK_RWAITING) - so that they can register while the writer is active. */ + that are waiting for a writer to go first (PTHREAD_RWLOCK_RWAITING) + so that they can register while the writer is active. */ if ((rnew >> PTHREAD_RWLOCK_READER_SHIFT) == 0) - { - if ((rnew & PTHREAD_RWLOCK_WRLOCKED) != 0) - rnew |= PTHREAD_RWLOCK_WRPHASE; - rnew &= ~(unsigned int) PTHREAD_RWLOCK_RWAITING; - } + { + if ((rnew & PTHREAD_RWLOCK_WRLOCKED) != 0) + rnew |= PTHREAD_RWLOCK_WRPHASE; + rnew &= ~(unsigned int) PTHREAD_RWLOCK_RWAITING; + } aligns conditions nicely: while ((r & PTHREAD_RWLOCK_WRPHASE) == 0 - && (r & PTHREAD_RWLOCK_WRLOCKED) != 0 - && (r >> PTHREAD_RWLOCK_READER_SHIFT) > 0) + && (r & PTHREAD_RWLOCK_WRLOCKED) != 0 + && (r >> PTHREAD_RWLOCK_READER_SHIFT) > 0) and cleans up some obvious style mistakes - done: +done: pthread_self.c: This diff highlights a drawback: -libc_hidden_def (__pthread_self) -weak_alias (__pthread_self, pthread_self) +libc_hidden_def (__pthread_self) weak_alias (__pthread_self, pthread_self) clang-format doesn't do so well with macros and without a semi-colon breaking the line will concatenate the two lines which is undesirable in this case (and the many other equivilent cases in glibc). pthread_yield.c: -#if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_2, GLIBC_2_34) +#if OTHER_SHLIB_COMPAT(libpthread, GLIBC_2_2, GLIBC_2_34) This is another issue in clang-format. Inside in #ifdef the [SpaceBeforeParens: Always] configuration fails. bench_memcpy.c: Finally there is the issue of [IndentWidth: 2] applying to macros as well as code #ifndef MEMCPY_RESULT -# define MEMCPY_RESULT(dst, len) dst -# define MIN_PAGE_SIZE 131072 -# define TEST_MAIN -# define TEST_NAME "memcpy" -# include "bench-string.h" +# define MEMCPY_RESULT(dst, len) dst +# define MIN_PAGE_SIZE 131072 +# define TEST_MAIN +# define TEST_NAME "memcpy" +# include "bench-string.h" There are active issues with clang-format to allow a seperate IndentWidth for PP directives (https://github.com/llvm/llvm-project/issues/42264) but until that is fixed and we upgrade to a new version we are stuck either not indenting or over-indenting. > > On 2022-03-30, Noah Goldstein via Libc-alpha wrote: > >Went with version >= 9.0 since it covers most of the major features > >and should be pretty universally accessibly. > > 9.0 => 11.0 Fixed in v2: > > >There are some issues, particularly indention of preprocessor > >directives. Unfortunately there doesn't appear to be a switch for > >a seperate 'IndentWidth' for preprocessor directives vs. normal > >code so we are stuck either not indenting the directives or > >over-indenting them. Chose to over-indent as it generally seems easier > >to script halving all pre-processor indentations than counting the > >nested depth and indenting from scratch. > > > >Other than the pre-processor directives most of the changes it makes > >are cleaning up inconsistencies that already existed. > >--- > > .clang-format | 163 ++++++++++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 163 insertions(+) > > create mode 100644 .clang-format > > > >diff --git a/.clang-format b/.clang-format > >new file mode 100644 > >index 0000000000..0a8663a596 > >--- /dev/null > >+++ b/.clang-format > >@@ -0,0 +1,163 @@ > >+# clang-format file for GLIBC > > The first line seems unneeded. The filename self tells. > > >+# Copyright (C) 2022 Free Software Foundation, Inc. > >+# This file is part of the GNU C Library. > >+# > >+# The GNU C Library is free software; you can redistribute it and/or > >+# modify it under the terms of the GNU Lesser General Public > >+# License as published by the Free Software Foundation; either > >+# version 2.1 of the License, or (at your option) any later version. > >+# > >+# The GNU C Library is distributed in the hope that it will be useful, > >+# but WITHOUT ANY WARRANTY; without even the implied warranty of > >+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > >+# Lesser General Public License for more details. > >+# > >+# You should have received a copy of the GNU Lesser General Public > >+# License along with the GNU C Library; if not, see > >+# . > >+# > >+# Requires clang-format version >= 11.0 > >+# > >+# For more information, see: > >+# > >+# Documentation/process/clang-format.rst > >+# https://clang.llvm.org/docs/ClangFormat.html > >+# https://clang.llvm.org/docs/ClangFormatStyleOptions.html > >+# > >+# There are some known cases that this doesn't produce the desired > >+# style (i.e Preprocessor Directives are over-indented and not > >+# auto-commented). As a result, this is meant to be a utility to make > >+# formatting easier, not a definitive standard. > >+--- > >+# BasedOnStyle: GNU > >+AccessModifierOffset: -2 > >+AlignAfterOpenBracket: Align > >+AlignConsecutiveMacros: false > >+AlignConsecutiveAssignments: false > >+AlignConsecutiveBitFields: false > >+AlignConsecutiveDeclarations: false > >+AlignEscapedNewlines: Right > >+AlignOperands: true > >+AlignTrailingComments: true > >+AllowAllArgumentsOnNextLine: true > >+AllowAllConstructorInitializersOnNextLine: true > >+AllowAllParametersOfDeclarationOnNextLine: true > >+AllowShortEnumsOnASingleLine: true > >+AllowShortBlocksOnASingleLine: false > >+AllowShortCaseLabelsOnASingleLine: false > >+AllowShortFunctionsOnASingleLine: All > >+AllowShortLambdasOnASingleLine: All > >+AllowShortIfStatementsOnASingleLine: Never > >+AllowShortLoopsOnASingleLine: false > >+AlwaysBreakAfterDefinitionReturnType: All > >+AlwaysBreakAfterReturnType: AllDefinitions > >+AlwaysBreakBeforeMultilineStrings: false > >+AlwaysBreakTemplateDeclarations: MultiLine > >+BinPackArguments: true > >+BinPackParameters: true > >+BraceWrapping: > >+ AfterCaseLabel: true > >+ AfterClass: true > >+ AfterControlStatement: true > >+ AfterEnum: true > >+ AfterFunction: true > >+ AfterNamespace: true > >+ AfterStruct: true > >+ AfterUnion: true > >+ AfterExternBlock: true > >+ BeforeCatch: true > >+ BeforeElse: true > >+ BeforeWhile: true > >+ IndentBraces: true > >+ SplitEmptyFunction: true > >+ SplitEmptyRecord: true > >+ SplitEmptyNamespace: true > >+BreakBeforeBinaryOperators: All > >+BreakBeforeBraces: GNU > >+BreakBeforeInheritanceComma: false > >+BreakInheritanceList: BeforeColon > >+BreakBeforeTernaryOperators: true > >+BreakConstructorInitializersBeforeComma: false > >+BreakConstructorInitializers: BeforeColon > >+BreakStringLiterals: true > >+ColumnLimit: 79 > >+CommentPragmas: '^ IWYU pragma:' > >+CompactNamespaces: false > >+ConstructorInitializerAllOnOneLineOrOnePerLine: false > >+ConstructorInitializerIndentWidth: 4 > >+ContinuationIndentWidth: 4 > >+Cpp11BracedListStyle: false > >+DeriveLineEnding: true > >+DerivePointerAlignment: false > >+DisableFormat: false > >+ExperimentalAutoDetectBinPacking: false > >+FixNamespaceComments: false > >+ForEachMacros: > >+ - foreach > >+ - Q_FOREACH > >+ - BOOST_FOREACH > >+IncludeBlocks: Preserve > >+IncludeCategories: > >+ - Regex: '^"(llvm|llvm-c|clang|clang-c)/' > >+ Priority: 2 > >+ - Regex: '^(<|"(gtest|gmock|isl|json)/)' > >+ Priority: 3 > >+ - Regex: '.*' > >+ Priority: 1 > >+IncludeIsMainRegex: '(Test)?$' > >+IndentCaseLabels: false > >+IndentCaseBlocks: false > >+IndentGotoLabels: true > >+IndentWidth: 2 > >+IndentPPDirectives: AfterHash > >+IndentExternBlock: AfterExternBlock > >+IndentWrappedFunctionNames: false > >+InsertTrailingCommas: None > >+KeepEmptyLinesAtTheStartOfBlocks: true > >+MacroBlockBegin: '' > >+MacroBlockEnd: '' > >+MaxEmptyLinesToKeep: 1 > >+NamespaceIndentation: None > >+PenaltyBreakAssignment: 2 > >+PenaltyBreakBeforeFirstCallParameter: 19 > >+PenaltyBreakComment: 300 > >+PenaltyBreakFirstLessLess: 120 > >+PenaltyBreakString: 1000 > >+PenaltyBreakTemplateDeclaration: 10 > >+PenaltyExcessCharacter: 1000000 > >+PenaltyReturnTypeOnItsOwnLine: 60 > >+PointerAlignment: Right > >+ReflowComments: true > >+SortIncludes: false > >+SortUsingDeclarations: true > >+SpaceAfterCStyleCast: true > >+SpaceAfterLogicalNot: false > >+SpaceAfterTemplateKeyword: true > >+SpaceBeforeAssignmentOperators: true > >+SpaceBeforeCpp11BracedList: false > >+SpaceBeforeCtorInitializerColon: true > >+SpaceBeforeInheritanceColon: true > >+SpaceBeforeParens: Always > >+SpaceBeforeRangeBasedForLoopColon: true > >+SpaceInEmptyBlock: false > >+SpaceInEmptyParentheses: false > >+SpacesBeforeTrailingComments: 1 > >+SpacesInAngles: false > >+SpacesInConditionalStatement: false > >+SpacesInContainerLiterals: true > >+SpacesInCStyleCastParentheses: false > >+SpacesInParentheses: false > >+SpacesInSquareBrackets: false > >+SpaceBeforeSquareBrackets: false > >+Standard: Cpp03 > >+StatementMacros: > >+ - Q_UNUSED > >+ - QT_REQUIRE_VERSION > >+TabWidth: 8 > >+UseTab: Never > >+ForEachMacros: > >+ - 'FOR_EACH_IMPL' > >+ - 'list_for_each' > >+ - 'list_for_each_prev' > >+ - 'list_for_each_prev_safe' > >+... > >-- > >2.25.1 > > --00000000000046e70605db749558 Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0004-clang-format-bench-memcpy.c.patch" Content-Disposition: attachment; filename="v1-0004-clang-format-bench-memcpy.c.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1dyq9zs0 RnJvbSAxY2IxOWFjZmVmOTY1ZDk4YjdjYjQ4NzNkMTU1ZmEyZmI0ZmUxNjZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FoIEdvbGRzdGVpbiA8Z29sZHN0ZWluLncubkBnbWFpbC5j b20+CkRhdGU6IFdlZCwgMzAgTWFyIDIwMjIgMTQ6MDQ6MDEgLTA1MDAKU3ViamVjdDogW1BBVENI IHYxIDQvNF0gY2xhbmctZm9ybWF0IGJlbmNoLW1lbWNweS5jCgotLS0KIGJlbmNodGVzdHMvYmVu Y2gtbWVtY3B5LmMgfCAxNCArKysrKysrLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0 aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9iZW5jaHRlc3RzL2JlbmNoLW1l bWNweS5jIGIvYmVuY2h0ZXN0cy9iZW5jaC1tZW1jcHkuYwppbmRleCA0MTk0ZDVhZGQxLi4yZjU1 ZmE5MWRmIDEwMDY0NAotLS0gYS9iZW5jaHRlc3RzL2JlbmNoLW1lbWNweS5jCisrKyBiL2JlbmNo dGVzdHMvYmVuY2gtbWVtY3B5LmMKQEAgLTE3LDExICsxNywxMSBAQAogICAgPGh0dHBzOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpZm5kZWYgTUVNQ1BZX1JFU1VMVAotIyBkZWZp bmUgTUVNQ1BZX1JFU1VMVChkc3QsIGxlbikgZHN0Ci0jIGRlZmluZSBNSU5fUEFHRV9TSVpFIDEz MTA3MgotIyBkZWZpbmUgVEVTVF9NQUlOCi0jIGRlZmluZSBURVNUX05BTUUgIm1lbWNweSIKLSMg aW5jbHVkZSAiYmVuY2gtc3RyaW5nLmgiCisjICBkZWZpbmUgTUVNQ1BZX1JFU1VMVChkc3QsIGxl bikgZHN0CisjICBkZWZpbmUgTUlOX1BBR0VfU0laRSAxMzEwNzIKKyMgIGRlZmluZSBURVNUX01B SU4KKyMgIGRlZmluZSBURVNUX05BTUUgIm1lbWNweSIKKyMgIGluY2x1ZGUgImJlbmNoLXN0cmlu Zy5oIgogCiB2b2lkICpnZW5lcmljX21lbWNweSAodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVf dCk7CiAKQEAgLTMwLDEzICszMCwxMyBAQCBJTVBMIChnZW5lcmljX21lbWNweSwgMCkKIAogI2Vu ZGlmCiAKLSMgaW5jbHVkZSAianNvbi1saWIuaCIKKyNpbmNsdWRlICJqc29uLWxpYi5oIgogCiB0 eXBlZGVmIHZvaWQgKigqcHJvdG9fdCkgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwog CiBzdGF0aWMgdm9pZAogZG9fb25lX3Rlc3QgKGpzb25fY3R4X3QgKmpzb25fY3R4LCBpbXBsX3Qg KmltcGwsIGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLAotCSAgICAgc2l6ZV90IGxlbikKKyAg ICAgICAgICAgICBzaXplX3QgbGVuKQogewogICBzaXplX3QgaSwgaXRlcnMgPSBJTk5FUl9MT09Q X0lURVJTOwogICB0aW1pbmdfdCBzdGFydCwgc3RvcCwgY3VyOwotLSAKMi4yNS4xCgo= --00000000000046e70605db749558 Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0002-clang-format-pthread_self.c.patch" Content-Disposition: attachment; filename="v1-0002-clang-format-pthread_self.c.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1dyqa052 RnJvbSBhOTA1YjNmMjY5YTA3NjAwZTFjMDczMDhhMWIyNGU1MWViOWI2MWY0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FoIEdvbGRzdGVpbiA8Z29sZHN0ZWluLncubkBnbWFpbC5j b20+CkRhdGU6IFdlZCwgMzAgTWFyIDIwMjIgMTQ6MDI6MDIgLTA1MDAKU3ViamVjdDogW1BBVENI IHYxIDIvNF0gY2xhbmctZm9ybWF0IHB0aHJlYWRfc2VsZi5jCgotLS0KIG5wdGwvcHRocmVhZF9z ZWxmLmMgfCAzICstLQogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAyIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL25wdGwvcHRocmVhZF9zZWxmLmMgYi9ucHRsL3B0aHJlYWRfc2Vs Zi5jCmluZGV4IGRhYzg0N2Y2NTYuLmM5NTM3YTM1OGUgMTAwNjQ0Ci0tLSBhL25wdGwvcHRocmVh ZF9zZWxmLmMKKysrIGIvbnB0bC9wdGhyZWFkX3NlbGYuYwpAQCAtMjMsNSArMjMsNCBAQCBfX3B0 aHJlYWRfc2VsZiAodm9pZCkKIHsKICAgcmV0dXJuIChwdGhyZWFkX3QpIFRIUkVBRF9TRUxGOwog fQotbGliY19oaWRkZW5fZGVmIChfX3B0aHJlYWRfc2VsZikKLXdlYWtfYWxpYXMgKF9fcHRocmVh ZF9zZWxmLCBwdGhyZWFkX3NlbGYpCitsaWJjX2hpZGRlbl9kZWYgKF9fcHRocmVhZF9zZWxmKSB3 ZWFrX2FsaWFzIChfX3B0aHJlYWRfc2VsZiwgcHRocmVhZF9zZWxmKQotLSAKMi4yNS4xCgo= --00000000000046e70605db749558 Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0003-clang-format-pthread_yield.c.patch" Content-Disposition: attachment; filename="v1-0003-clang-format-pthread_yield.c.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1dyqa041 RnJvbSA3ODJjZGY4NWVkNTNhNWQxYWRmMTQ2NTQ2ODJmYzc3MjIxYTJkNGNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FoIEdvbGRzdGVpbiA8Z29sZHN0ZWluLncubkBnbWFpbC5j b20+CkRhdGU6IFdlZCwgMzAgTWFyIDIwMjIgMTQ6MDI6MjIgLTA1MDAKU3ViamVjdDogW1BBVENI IHYxIDMvNF0gY2xhbmctZm9ybWF0IHB0aHJlYWRfeWllbGQuYwoKLS0tCiBucHRsL3B0aHJlYWRf eWllbGQuYyB8IDIgKy0KIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlv bigtKQoKZGlmZiAtLWdpdCBhL25wdGwvcHRocmVhZF95aWVsZC5jIGIvbnB0bC9wdGhyZWFkX3lp ZWxkLmMKaW5kZXggZTgwMjI3MDI4Yy4uZjI5OWVhY2M0OSAxMDA2NDQKLS0tIGEvbnB0bC9wdGhy ZWFkX3lpZWxkLmMKKysrIGIvbnB0bC9wdGhyZWFkX3lpZWxkLmMKQEAgLTE5LDcgKzE5LDcgQEAK ICNpbmNsdWRlIDxzY2hlZC5oPgogI2luY2x1ZGUgPHNobGliLWNvbXBhdC5oPgogCi0jaWYgT1RI RVJfU0hMSUJfQ09NUEFUIChsaWJwdGhyZWFkLCBHTElCQ18yXzIsIEdMSUJDXzJfMzQpCisjaWYg T1RIRVJfU0hMSUJfQ09NUEFUKGxpYnB0aHJlYWQsIEdMSUJDXzJfMiwgR0xJQkNfMl8zNCkKIGlu dCBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgogX19wdGhyZWFkX3lpZWxkICh2b2lkKQog ewotLSAKMi4yNS4xCgo= --00000000000046e70605db749558 Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-clang-format-pthread_rwlock_common.c.patch" Content-Disposition: attachment; filename="v1-0001-clang-format-pthread_rwlock_common.c.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1dyqa053 RnJvbSBkNzE3NjIzNTM1OTU1ZTEyMTg3M2I3YzM5ZGIzYzM2Y2Q2M2Q3ZDVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FoIEdvbGRzdGVpbiA8Z29sZHN0ZWluLncubkBnbWFpbC5j b20+CkRhdGU6IFdlZCwgMzAgTWFyIDIwMjIgMTQ6MDE6NDEgLTA1MDAKU3ViamVjdDogW1BBVENI IHYxIDEvNF0gY2xhbmctZm9ybWF0IHB0aHJlYWRfcndsb2NrX2NvbW1vbi5jCgotLS0KIG5wdGwv cHRocmVhZF9yd2xvY2tfY29tbW9uLmMgfCA5NjYgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0t LS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0ODcgaW5zZXJ0aW9ucygrKSwgNDc5IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL25wdGwvcHRocmVhZF9yd2xvY2tfY29tbW9uLmMgYi9ucHRsL3B0 aHJlYWRfcndsb2NrX2NvbW1vbi5jCmluZGV4IGJkYzU1ZDk1OTIuLjY0NzRkOWVjNjUgMTAwNjQ0 Ci0tLSBhL25wdGwvcHRocmVhZF9yd2xvY2tfY29tbW9uLmMKKysrIGIvbnB0bC9wdGhyZWFkX3J3 bG9ja19jb21tb24uYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGZ1dGV4LWludGVybmFs Lmg+CiAjaW5jbHVkZSA8dGltZS5oPgogCi0KIC8qIEEgcmVhZGVyLS13cml0ZXIgbG9jayB0aGF0 IGZ1bGZpbGxzIHRoZSBQT1NJWCByZXF1aXJlbWVudHMgKGJ1dCBvcGVyYXRpb25zCiAgICBvbiB0 aGlzIGxvY2sgYXJlIG5vdCBuZWNlc3NhcmlseSBmdWxsIGJhcnJpZXJzLCBhcyBvbmUgbWF5IGlu dGVycHJldCB0aGUKICAgIFBPU0lYIHJlcXVpcmVtZW50IGFib3V0ICJzeW5jaHJvbml6aW5nIG1l bW9yeSIpLiAgQWxsIGNyaXRpY2FsIHNlY3Rpb25zIGFyZQpAQCAtNzEsMTggKzcwLDE4IEBACiAg ICAjMSAgICAwICAgMCAgIDAgICAwICAgTG9jayBpcyBpZGxlIChhbmQgaW4gYSByZWFkIHBoYXNl KS4KICAgICMyICAgIDAgICAwICAgPjAgIDAgICBSZWFkZXJzIGhhdmUgYWNxdWlyZWQgdGhlIGxv Y2suCiAgICAjMyAgICAwICAgMSAgIDAgICAwICAgTG9jayBpcyBub3QgYWNxdWlyZWQ7IGEgd3Jp dGVyIHdpbGwgdHJ5IHRvIHN0YXJ0IGEKLQkJCSB3cml0ZSBwaGFzZS4KKyAgICAgICAgICAgICAg ICAgICAgICAgICB3cml0ZSBwaGFzZS4KICAgICM0ICAgIDAgICAxICAgPjAgIDAgICBSZWFkZXJz IGhhdmUgYWNxdWlyZWQgdGhlIGxvY2s7IGEgd3JpdGVyIGlzIHdhaXRpbmcKLQkJCSBhbmQgZXhw bGljaXQgaGFuZC1vdmVyIHRvIHRoZSB3cml0ZXIgaXMgcmVxdWlyZWQuCisgICAgICAgICAgICAg ICAgICAgICAgICAgYW5kIGV4cGxpY2l0IGhhbmQtb3ZlciB0byB0aGUgd3JpdGVyIGlzIHJlcXVp cmVkLgogICAgIzRhICAgMCAgIDEgICA+MCAgMSAgIFNhbWUgYXMgIzQgZXhjZXB0IHRoYXQgdGhl cmUgYXJlIGZ1cnRoZXIgcmVhZGVycwotCQkJIHdhaXRpbmcgYmVjYXVzZSB0aGUgd3JpdGVyIGlz IHRvIGJlIHByZWZlcnJlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0aW5nIGJlY2F1 c2UgdGhlIHdyaXRlciBpcyB0byBiZSBwcmVmZXJyZWQuCiAgICAjNSAgICAxICAgMCAgIDAgICAw ICAgTG9jayBpcyBpZGxlIChhbmQgaW4gYSB3cml0ZSBwaGFzZSkuCiAgICAjNiAgICAxICAgMCAg ID4wICAwICAgV3JpdGUgcGhhc2U7IHJlYWRlcnMgd2lsbCB0cnkgdG8gc3RhcnQgYSByZWFkIHBo YXNlCi0JCQkgKHJlcXVpcmVzIGV4cGxpY2l0IGhhbmQtb3ZlciB0byBhbGwgcmVhZGVycyB0aGF0 Ci0JCQkgZG8gbm90IHN0YXJ0IHRoZSByZWFkIHBoYXNlKS4KKyAgICAgICAgICAgICAgICAgICAg ICAgICAocmVxdWlyZXMgZXhwbGljaXQgaGFuZC1vdmVyIHRvIGFsbCByZWFkZXJzIHRoYXQKKyAg ICAgICAgICAgICAgICAgICAgICAgICBkbyBub3Qgc3RhcnQgdGhlIHJlYWQgcGhhc2UpLgogICAg IzcgICAgMSAgIDEgICAwICAgMCAgIExvY2sgaXMgYWNxdWlyZWQgYnkgYSB3cml0ZXIuCiAgICAj OCAgICAxICAgMSAgID4wICAwICAgTG9jayBhY3F1aXJlZCBieSBhIHdyaXRlciBhbmQgcmVhZGVy cyBhcmUgd2FpdGluZzsKLQkJCSBleHBsaWNpdCBoYW5kLW92ZXIgdG8gdGhlIHJlYWRlcnMgaXMg cmVxdWlyZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGljaXQgaGFuZC1vdmVyIHRv IHRoZSByZWFkZXJzIGlzIHJlcXVpcmVkLgogCiAgICBXUCAoUFRIUkVBRF9SV0xPQ0tfV1JQSEFT RSkgaXMgdHJ1ZSBpZiB0aGUgbG9jayBpcyBpbiBhIHdyaXRlIHBoYXNlLCBzbwogICAgcG90ZW50 aWFsbHkgYWNxdWlyZWQgYnkgYSBwcmltYXJ5IHdyaXRlci4KQEAgLTIxNCw3ICsyMTMsNiBAQAog ICAgZGVjaWRpbmcgd2hlbiB0byB1c2UgZWxpc2lvbiBzbyB0aGF0IGVuYWJsaW5nIGl0IHdvdWxk IGxlYWQgdG8gY29uc2lzdGVudGx5CiAgICBiZXR0ZXIgcGVyZm9ybWFuY2UuICAqLwogCi0KIHN0 YXRpYyBpbnQKIF9fcHRocmVhZF9yd2xvY2tfZ2V0X3ByaXZhdGUgKHB0aHJlYWRfcndsb2NrX3Qg KnJ3bG9jaykKIHsKQEAgLTIzNSw0OCArMjMzLDQ4IEBAIF9fcHRocmVhZF9yd2xvY2tfcmR1bmxv Y2sgKHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaykKICAgICB7CiAgICAgICBybmV3ID0gciAtICgx IDw8IFBUSFJFQURfUldMT0NLX1JFQURFUl9TSElGVCk7CiAgICAgICAvKiBJZiB3ZSBhcmUgdGhl IGxhc3QgcmVhZGVyLCB3ZSBhbHNvIG5lZWQgdG8gdW5ibG9jayBhbnkgcmVhZGVycwotCSB0aGF0 IGFyZSB3YWl0aW5nIGZvciBhIHdyaXRlciB0byBnbyBmaXJzdCAoUFRIUkVBRF9SV0xPQ0tfUldB SVRJTkcpCi0JIHNvIHRoYXQgdGhleSBjYW4gcmVnaXN0ZXIgd2hpbGUgdGhlIHdyaXRlciBpcyBh Y3RpdmUuICAqLworICAgICAgICAgdGhhdCBhcmUgd2FpdGluZyBmb3IgYSB3cml0ZXIgdG8gZ28g Zmlyc3QgKFBUSFJFQURfUldMT0NLX1JXQUlUSU5HKQorICAgICAgICAgc28gdGhhdCB0aGV5IGNh biByZWdpc3RlciB3aGlsZSB0aGUgd3JpdGVyIGlzIGFjdGl2ZS4gICovCiAgICAgICBpZiAoKHJu ZXcgPj4gUFRIUkVBRF9SV0xPQ0tfUkVBREVSX1NISUZUKSA9PSAwKQotCXsKLQkgIGlmICgocm5l dyAmIFBUSFJFQURfUldMT0NLX1dSTE9DS0VEKSAhPSAwKQotCSAgICBybmV3IHw9IFBUSFJFQURf UldMT0NLX1dSUEhBU0U7Ci0JICBybmV3ICY9IH4odW5zaWduZWQgaW50KSBQVEhSRUFEX1JXTE9D S19SV0FJVElORzsKLQl9CisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKHJuZXcgJiBQVEhSRUFE X1JXTE9DS19XUkxPQ0tFRCkgIT0gMCkKKyAgICAgICAgICAgIHJuZXcgfD0gUFRIUkVBRF9SV0xP Q0tfV1JQSEFTRTsKKyAgICAgICAgICBybmV3ICY9IH4odW5zaWduZWQgaW50KSBQVEhSRUFEX1JX TE9DS19SV0FJVElORzsKKyAgICAgICAgfQogICAgICAgLyogV2UgbmVlZCByZWxlYXNlIE1PIGhl cmUgZm9yIHRocmVlIHJlYXNvbnMuICBGaXJzdCwgc28gdGhhdCB3ZQotCSBzeW5jaHJvbml6ZSB3 aXRoIHN1YnNlcXVlbnQgd3JpdGVycy4gIFNlY29uZCwgd2UgbWlnaHQgaGF2ZSBiZWVuIHRoZQot CSBmaXJzdCByZWFkZXIgYW5kIHNldCBfX3dycGhhc2VfZnV0ZXggdG8gMCwgc28gd2UgbmVlZCB0 byBzeW5jaHJvbml6ZQotCSB3aXRoIHRoZSBsYXN0IHJlYWRlciB0aGF0IHdpbGwgc2V0IGl0IHRv IDEgKG5vdGUgdGhhdCB3ZSB3aWxsIGFsd2F5cwotCSBjaGFuZ2UgX19yZWFkZXJzIGJlZm9yZSB0 aGUgbGFzdCByZWFkZXIsIG9yIHdlIGFyZSB0aGUgbGFzdCByZWFkZXIpLgotCSBUaGlyZCwgYSB3 cml0ZXIgdGhhdCB0YWtlcyBwYXJ0IGluIGV4cGxpY2l0IGhhbmQtb3ZlciBuZWVkcyB0byBzZWUK LQkgdGhlIGZpcnN0IHJlYWRlcidzIHN0b3JlIHRvIF9fd3JwaGFzZV9mdXRleCAob3IgYSBsYXRl ciB2YWx1ZSkgaWYKLQkgdGhlIHdyaXRlciBvYnNlcnZlcyB0aGF0IGEgd3JpdGUgcGhhc2UgaGFz IGJlZW4gc3RhcnRlZC4gICovCi0gICAgICBpZiAoYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vh a19yZWxlYXNlICgmcndsb2NrLT5fX2RhdGEuX19yZWFkZXJzLAotCQkJCQkJJnIsIHJuZXcpKQot CWJyZWFrOworICAgICAgICAgc3luY2hyb25pemUgd2l0aCBzdWJzZXF1ZW50IHdyaXRlcnMuICBT ZWNvbmQsIHdlIG1pZ2h0IGhhdmUgYmVlbiB0aGUKKyAgICAgICAgIGZpcnN0IHJlYWRlciBhbmQg c2V0IF9fd3JwaGFzZV9mdXRleCB0byAwLCBzbyB3ZSBuZWVkIHRvIHN5bmNocm9uaXplCisgICAg ICAgICB3aXRoIHRoZSBsYXN0IHJlYWRlciB0aGF0IHdpbGwgc2V0IGl0IHRvIDEgKG5vdGUgdGhh dCB3ZSB3aWxsIGFsd2F5cworICAgICAgICAgY2hhbmdlIF9fcmVhZGVycyBiZWZvcmUgdGhlIGxh c3QgcmVhZGVyLCBvciB3ZSBhcmUgdGhlIGxhc3QgcmVhZGVyKS4KKyAgICAgICAgIFRoaXJkLCBh IHdyaXRlciB0aGF0IHRha2VzIHBhcnQgaW4gZXhwbGljaXQgaGFuZC1vdmVyIG5lZWRzIHRvIHNl ZQorICAgICAgICAgdGhlIGZpcnN0IHJlYWRlcidzIHN0b3JlIHRvIF9fd3JwaGFzZV9mdXRleCAo b3IgYSBsYXRlciB2YWx1ZSkgaWYKKyAgICAgICAgIHRoZSB3cml0ZXIgb2JzZXJ2ZXMgdGhhdCBh IHdyaXRlIHBoYXNlIGhhcyBiZWVuIHN0YXJ0ZWQuICAqLworICAgICAgaWYgKGF0b21pY19jb21w YXJlX2V4Y2hhbmdlX3dlYWtfcmVsZWFzZSAoJnJ3bG9jay0+X19kYXRhLl9fcmVhZGVycywgJnIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybmV3KSkK KyAgICAgICAgYnJlYWs7CiAgICAgICAvKiBUT0RPIEJhY2stb2ZmLiAgKi8KICAgICB9CiAgIGlm ICgocm5ldyAmIFBUSFJFQURfUldMT0NLX1dSUEhBU0UpICE9IDApCiAgICAgewogICAgICAgLyog V2UgbmVlZCB0byBkbyBleHBsaWNpdCBoYW5kLW92ZXIuICBXZSBuZWVkIHRoZSBhY3F1aXJlIE1P IGZlbmNlIHNvCi0JIHRoYXQgb3VyIG1vZGlmaWNhdGlvbiBvZiBfd3JwaGFzZV9mdXRleCBoYXBw ZW5zIGFmdGVyIGEgc3RvcmUgYnkKLQkgYW5vdGhlciByZWFkZXIgdGhhdCBzdGFydGVkIGEgcmVh ZCBwaGFzZS4gIFJlbGF4ZWQgTU8gaXMgc3VmZmljaWVudAotCSBmb3IgdGhlIG1vZGlmaWNhdGlv biBvZiBfX3dycGhhc2VfZnV0ZXggYmVjYXVzZSBpdCBpcyBqdXN0IHVzZWQKLQkgdG8gZGVsYXkg YWNxdWlzaXRpb24gYnkgYSB3cml0ZXIgdW50aWwgYWxsIHRocmVhZHMgYXJlIHVuYmxvY2tlZAot CSBpcnJlc3BlY3RpdmUgb2Ygd2hldGhlciB0aGV5IGFyZSBsb29raW5nIGF0IF9fcmVhZGVycyBv cgotCSBfX3dycGhhc2VfZnV0ZXg7IGFueSBvdGhlciBzeW5jaHJvbml6ZXMtd2l0aCByZWxhdGlv bnMgdGhhdCBhcmUKLQkgbmVjZXNzYXJ5IGFyZSBlc3RhYmxpc2hlZCB0aHJvdWdoIF9fcmVhZGVy cy4gICovCisgICAgICAgICB0aGF0IG91ciBtb2RpZmljYXRpb24gb2YgX3dycGhhc2VfZnV0ZXgg aGFwcGVucyBhZnRlciBhIHN0b3JlIGJ5CisgICAgICAgICBhbm90aGVyIHJlYWRlciB0aGF0IHN0 YXJ0ZWQgYSByZWFkIHBoYXNlLiAgUmVsYXhlZCBNTyBpcyBzdWZmaWNpZW50CisgICAgICAgICBm b3IgdGhlIG1vZGlmaWNhdGlvbiBvZiBfX3dycGhhc2VfZnV0ZXggYmVjYXVzZSBpdCBpcyBqdXN0 IHVzZWQKKyAgICAgICAgIHRvIGRlbGF5IGFjcXVpc2l0aW9uIGJ5IGEgd3JpdGVyIHVudGlsIGFs bCB0aHJlYWRzIGFyZSB1bmJsb2NrZWQKKyAgICAgICAgIGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVy IHRoZXkgYXJlIGxvb2tpbmcgYXQgX19yZWFkZXJzIG9yCisgICAgICAgICBfX3dycGhhc2VfZnV0 ZXg7IGFueSBvdGhlciBzeW5jaHJvbml6ZXMtd2l0aCByZWxhdGlvbnMgdGhhdCBhcmUKKyAgICAg ICAgIG5lY2Vzc2FyeSBhcmUgZXN0YWJsaXNoZWQgdGhyb3VnaCBfX3JlYWRlcnMuICAqLwogICAg ICAgYXRvbWljX3RocmVhZF9mZW5jZV9hY3F1aXJlICgpOwogICAgICAgaWYgKChhdG9taWNfZXhj aGFuZ2VfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fd3JwaGFzZV9mdXRleCwgMSkKLQkgICAm IFBUSFJFQURfUldMT0NLX0ZVVEVYX1VTRUQpICE9IDApCi0JZnV0ZXhfd2FrZSAoJnJ3bG9jay0+ X19kYXRhLl9fd3JwaGFzZV9mdXRleCwgSU5UX01BWCwgcHJpdmF0ZSk7CisgICAgICAgICAgICYg UFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNFRCkKKyAgICAgICAgICAhPSAwKQorICAgICAgICBmdXRl eF93YWtlICgmcndsb2NrLT5fX2RhdGEuX193cnBoYXNlX2Z1dGV4LCBJTlRfTUFYLCBwcml2YXRl KTsKICAgICB9CiAgIC8qIEFsc28gd2FrZSB1cCB3YWl0aW5nIHJlYWRlcnMgaWYgd2UgZGlkIHJl c2V0IHRoZSBSV0FJVElORyBmbGFnLiAgKi8KICAgaWYgKChyICYgUFRIUkVBRF9SV0xPQ0tfUldB SVRJTkcpICE9IChybmV3ICYgUFRIUkVBRF9SV0xPQ0tfUldBSVRJTkcpKQogICAgIGZ1dGV4X3dh a2UgKCZyd2xvY2stPl9fZGF0YS5fX3JlYWRlcnMsIElOVF9NQVgsIHByaXZhdGUpOwogfQogCi0K IHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50CiBfX3B0aHJlYWRfcndsb2NrX3JkbG9ja19mdWxs NjQgKHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaywgY2xvY2tpZF90IGNsb2NraWQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBfX3RpbWVzcGVjNjQgKmFic3Rp bWUpCkBAIC0yODksMTQgKzI4NywxNSBAQCBfX3B0aHJlYWRfcndsb2NrX3JkbG9ja19mdWxsNjQg KHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaywgY2xvY2tpZF90IGNsb2NraWQsCiAgICAgIHJlcXVp cmVzIHRoYXQgInRoZSB2YWxpZGl0eSBvZiB0aGUgYWJzdGltZSBwYXJhbWV0ZXIgbmVlZCBub3Qg YmUgY2hlY2tlZAogICAgICBpZiB0aGUgbG9jayBjYW4gYmUgaW1tZWRpYXRlbHkgYWNxdWlyZWQi IChpLmUuLCB3ZSBuZWVkIG5vdCBidXQgbWF5IGNoZWNrCiAgICAgIGl0KS4gICovCi0gIGlmIChh YnN0aW1lICYmIF9fZ2xpYmNfdW5saWtlbHkgKCFmdXRleF9hYnN0aW1lZF9zdXBwb3J0ZWRfY2xv Y2tpZCAoY2xvY2tpZCkKLSAgICAgIHx8ICEgdmFsaWRfbmFub3NlY29uZHMgKGFic3RpbWUtPnR2 X25zZWMpKSkKKyAgaWYgKGFic3RpbWUKKyAgICAgICYmIF9fZ2xpYmNfdW5saWtlbHkgKCFmdXRl eF9hYnN0aW1lZF9zdXBwb3J0ZWRfY2xvY2tpZCAoY2xvY2tpZCkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIHx8ICF2YWxpZF9uYW5vc2Vjb25kcyAoYWJzdGltZS0+dHZfbnNlYykpKQogICAg IHJldHVybiBFSU5WQUw7CiAKICAgLyogTWFrZSBzdXJlIHdlIGFyZSBub3QgaG9sZGluZyB0aGUg cndsb2NrIGFzIGEgd3JpdGVyLiAgVGhpcyBpcyBhIGRlYWRsb2NrCiAgICAgIHNpdHVhdGlvbiB3 ZSByZWNvZ25pemUgYW5kIHJlcG9ydC4gICovCiAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChhdG9t aWNfbG9hZF9yZWxheGVkICgmcndsb2NrLT5fX2RhdGEuX19jdXJfd3JpdGVyKQotCQkJPT0gVEhS RUFEX0dFVE1FTSAoVEhSRUFEX1NFTEYsIHRpZCkpKQorICAgICAgICAgICAgICAgICAgICAgICAg PT0gVEhSRUFEX0dFVE1FTSAoVEhSRUFEX1NFTEYsIHRpZCkpKQogICAgIHJldHVybiBFREVBRExL OwogCiAgIC8qIElmIHdlIHByZWZlciB3cml0ZXJzLCByZWN1cnNpdmUgcmRsb2NrIGlzIGRpc2Fs bG93ZWQsIHdlIGFyZSBpbiBhIHJlYWQKQEAgLTMxMSw0NyArMzEwLDQ3IEBAIF9fcHRocmVhZF9y d2xvY2tfcmRsb2NrX2Z1bGw2NCAocHRocmVhZF9yd2xvY2tfdCAqcndsb2NrLCBjbG9ja2lkX3Qg Y2xvY2tpZCwKICAgICB7CiAgICAgICByID0gYXRvbWljX2xvYWRfcmVsYXhlZCAoJnJ3bG9jay0+ X19kYXRhLl9fcmVhZGVycyk7CiAgICAgICB3aGlsZSAoKHIgJiBQVEhSRUFEX1JXTE9DS19XUlBI QVNFKSA9PSAwCi0JICAgICAmJiAociAmIFBUSFJFQURfUldMT0NLX1dSTE9DS0VEKSAhPSAwCi0J ICAgICAmJiAociA+PiBQVEhSRUFEX1JXTE9DS19SRUFERVJfU0hJRlQpID4gMCkKLQl7Ci0JICAv KiBUT0RPIFNwaW4gZmlyc3QuICAqLwotCSAgLyogVHJ5IHNldHRpbmcgdGhlIGZsYWcgc2lnbmFs aW5nIHRoYXQgd2UgYXJlIHdhaXRpbmcgd2l0aG91dCBoYXZpbmcKLQkgICAgIGluY3JlbWVudGVk IHRoZSBudW1iZXIgb2YgcmVhZGVycy4gIFJlbGF4ZWQgTU8gaXMgZmluZSBiZWNhdXNlCi0JICAg ICB0aGlzIGlzIGp1c3QgYWJvdXQgd2FpdGluZyBmb3IgYSBzdGF0ZSBjaGFuZ2UgaW4gX19yZWFk ZXJzLiAgKi8KLQkgIGlmIChhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX3JlbGF4ZWQKLQkg ICAgICAoJnJ3bG9jay0+X19kYXRhLl9fcmVhZGVycywgJnIsIHIgfCBQVEhSRUFEX1JXTE9DS19S V0FJVElORykpCi0JICAgIHsKLQkgICAgICAvKiBXYWl0IGZvciBhcyBsb25nIGFzIHRoZSBmbGFn IGlzIHNldC4gIEFuIEFCQSBzaXR1YXRpb24gaXMKLQkJIGhhcm1sZXNzIGJlY2F1c2UgdGhlIGZs YWcgaXMganVzdCBhYm91dCB0aGUgc3RhdGUgb2YKLQkJIF9fcmVhZGVycywgYW5kIGFsbCB0aHJl YWRzIHNldCB0aGUgZmxhZyB1bmRlciB0aGUgc2FtZQotCQkgY29uZGl0aW9ucy4gICovCi0JICAg ICAgd2hpbGUgKCgociA9IGF0b21pY19sb2FkX3JlbGF4ZWQgKCZyd2xvY2stPl9fZGF0YS5fX3Jl YWRlcnMpKQotCQkgICAgICAmIFBUSFJFQURfUldMT0NLX1JXQUlUSU5HKSAhPSAwKQotCQl7Ci0J CSAgaW50IHByaXZhdGUgPSBfX3B0aHJlYWRfcndsb2NrX2dldF9wcml2YXRlIChyd2xvY2spOwot CQkgIGludCBlcnIgPSBfX2Z1dGV4X2Fic3RpbWVkX3dhaXQ2NCAoJnJ3bG9jay0+X19kYXRhLl9f cmVhZGVycywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsIGNsb2Nr aWQsIGFic3RpbWUsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2 YXRlKTsKLQkJICAvKiBXZSBpZ25vcmUgRUFHQUlOIGFuZCBFSU5UUi4gIE9uIHRpbWUtb3V0cywg d2UgY2FuIGp1c3QKLQkJICAgICByZXR1cm4gYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHRvIGNsZWFu IHVwIGFueXRoaW5nLiAgKi8KLQkJICBpZiAoZXJyID09IEVUSU1FRE9VVCB8fCBlcnIgPT0gRU9W RVJGTE9XKQotCQkgICAgcmV0dXJuIGVycjsKLQkJfQotCSAgICAgIC8qIEl0IG1ha2VzIHNlbnNl IHRvIG5vdCBicmVhayBvdXQgb2YgdGhlIG91dGVyIGxvb3AgaGVyZQotCQkgYmVjYXVzZSB3ZSBt aWdodCBiZSBpbiB0aGUgc2FtZSBzaXR1YXRpb24gYWdhaW4uICAqLwotCSAgICB9Ci0JICBlbHNl Ci0JICAgIHsKLQkgICAgICAvKiBUT0RPIEJhY2stb2ZmLiAgKi8KLQkgICAgfQotCX0KKyAgICAg ICAgICAgICAmJiAociAmIFBUSFJFQURfUldMT0NLX1dSTE9DS0VEKSAhPSAwCisgICAgICAgICAg ICAgJiYgKHIgPj4gUFRIUkVBRF9SV0xPQ0tfUkVBREVSX1NISUZUKSA+IDApCisgICAgICAgIHsK KyAgICAgICAgICAvKiBUT0RPIFNwaW4gZmlyc3QuICAqLworICAgICAgICAgIC8qIFRyeSBzZXR0 aW5nIHRoZSBmbGFnIHNpZ25hbGluZyB0aGF0IHdlIGFyZSB3YWl0aW5nIHdpdGhvdXQgaGF2aW5n CisgICAgICAgICAgICAgaW5jcmVtZW50ZWQgdGhlIG51bWJlciBvZiByZWFkZXJzLiAgUmVsYXhl ZCBNTyBpcyBmaW5lIGJlY2F1c2UKKyAgICAgICAgICAgICB0aGlzIGlzIGp1c3QgYWJvdXQgd2Fp dGluZyBmb3IgYSBzdGF0ZSBjaGFuZ2UgaW4gX19yZWFkZXJzLiAgKi8KKyAgICAgICAgICBpZiAo YXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19yZWxheGVkICgKKyAgICAgICAgICAgICAgICAg ICZyd2xvY2stPl9fZGF0YS5fX3JlYWRlcnMsICZyLCByIHwgUFRIUkVBRF9SV0xPQ0tfUldBSVRJ TkcpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBXYWl0IGZvciBhcyBsb25nIGFz IHRoZSBmbGFnIGlzIHNldC4gIEFuIEFCQSBzaXR1YXRpb24gaXMKKyAgICAgICAgICAgICAgICAg aGFybWxlc3MgYmVjYXVzZSB0aGUgZmxhZyBpcyBqdXN0IGFib3V0IHRoZSBzdGF0ZSBvZgorICAg ICAgICAgICAgICAgICBfX3JlYWRlcnMsIGFuZCBhbGwgdGhyZWFkcyBzZXQgdGhlIGZsYWcgdW5k ZXIgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgY29uZGl0aW9ucy4gICovCisgICAgICAgICAg ICAgIHdoaWxlICgoKHIgPSBhdG9taWNfbG9hZF9yZWxheGVkICgmcndsb2NrLT5fX2RhdGEuX19y ZWFkZXJzKSkKKyAgICAgICAgICAgICAgICAgICAgICAmIFBUSFJFQURfUldMT0NLX1JXQUlUSU5H KQorICAgICAgICAgICAgICAgICAgICAgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICBpbnQgcHJpdmF0ZSA9IF9fcHRocmVhZF9yd2xvY2tfZ2V0X3ByaXZhdGUgKHJ3 bG9jayk7CisgICAgICAgICAgICAgICAgICBpbnQgZXJyID0gX19mdXRleF9hYnN0aW1lZF93YWl0 NjQgKAorICAgICAgICAgICAgICAgICAgICAgICZyd2xvY2stPl9fZGF0YS5fX3JlYWRlcnMsIHIs IGNsb2NraWQsIGFic3RpbWUsIHByaXZhdGUpOworICAgICAgICAgICAgICAgICAgLyogV2UgaWdu b3JlIEVBR0FJTiBhbmQgRUlOVFIuICBPbiB0aW1lLW91dHMsIHdlIGNhbiBqdXN0CisgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHRvIGNsZWFuIHVwIGFu eXRoaW5nLiAgKi8KKyAgICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gRVRJTUVET1VUIHx8IGVy ciA9PSBFT1ZFUkZMT1cpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAvKiBJdCBtYWtlcyBzZW5zZSB0byBub3QgYnJlYWsg b3V0IG9mIHRoZSBvdXRlciBsb29wIGhlcmUKKyAgICAgICAgICAgICAgICAgYmVjYXVzZSB3ZSBt aWdodCBiZSBpbiB0aGUgc2FtZSBzaXR1YXRpb24gYWdhaW4uICAqLworICAgICAgICAgICAgfQor ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogVE9ETyBCYWNr LW9mZi4gICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgIC8qIFJlZ2lzdGVy IGFzIGEgcmVhZGVyLCB1c2luZyBhbiBhZGQtYW5kLWZldGNoIHNvIHRoYXQgUiBjYW4gYmUgdXNl ZCBhcwogICAgICBleHBlY3RlZCB2YWx1ZSBmb3IgZnV0dXJlIG9wZXJhdGlvbnMuICBBY3F1aXJl IE1PIHNvIHdlIHN5bmNocm9uaXplIHdpdGgKICAgICAgcHJpb3Igd3JpdGVycyBhcyB3ZWxsIGFz IHRoZSBsYXN0IHJlYWRlciBvZiB0aGUgcHJldmlvdXMgcmVhZCBwaGFzZSAoc2VlCiAgICAgIGJl bG93KS4gICovCiAgIHIgPSAoYXRvbWljX2ZldGNoX2FkZF9hY3F1aXJlICgmcndsb2NrLT5fX2Rh dGEuX19yZWFkZXJzLAotCQkJCSAoMSA8PCBQVEhSRUFEX1JXTE9DS19SRUFERVJfU0hJRlQpKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgUFRIUkVBRF9SV0xPQ0tfUkVB REVSX1NISUZUKSkKICAgICAgICArICgxIDw8IFBUSFJFQURfUldMT0NLX1JFQURFUl9TSElGVCkp OwogCiAgIC8qIENoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYW4gb3ZlcmZsb3cgaW4gdGhlIG51bWJl ciBvZiByZWFkZXJzLiAgV2UgYXNzdW1lCkBAIC0zNzAsMTIgKzM2OSwxMiBAQCBfX3B0aHJlYWRf cndsb2NrX3JkbG9ja19mdWxsNjQgKHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaywgY2xvY2tpZF90 IGNsb2NraWQsCiAgIHdoaWxlIChfX2dsaWJjX3VubGlrZWx5IChyID49IFBUSFJFQURfUldMT0NL X1JFQURFUl9PVkVSRkxPVykpCiAgICAgewogICAgICAgLyogUmVsYXhlZCBNTyBpcyBva2F5IGJl Y2F1c2Ugd2UganVzdCB3YW50IHRvIHVuZG8gb3VyIHJlZ2lzdHJhdGlvbiBhbmQKLQkgY2Fubm90 IGhhdmUgY2hhbmdlZCB0aGUgcndsb2NrIHN0YXRlIHN1YnN0YW50aWFsbHkgaWYgdGhlIENBUwot CSBzdWNjZWVkcy4gICovCi0gICAgICBpZiAoYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19y ZWxheGVkCi0JICAoJnJ3bG9jay0+X19kYXRhLl9fcmVhZGVycywKLQkgICAmciwgciAtICgxIDw8 IFBUSFJFQURfUldMT0NLX1JFQURFUl9TSElGVCkpKQotCXJldHVybiBFQUdBSU47CisgICAgICAg ICBjYW5ub3QgaGF2ZSBjaGFuZ2VkIHRoZSByd2xvY2sgc3RhdGUgc3Vic3RhbnRpYWxseSBpZiB0 aGUgQ0FTCisgICAgICAgICBzdWNjZWVkcy4gICovCisgICAgICBpZiAoYXRvbWljX2NvbXBhcmVf ZXhjaGFuZ2Vfd2Vha19yZWxheGVkICgKKyAgICAgICAgICAgICAgJnJ3bG9jay0+X19kYXRhLl9f cmVhZGVycywgJnIsCisgICAgICAgICAgICAgIHIgLSAoMSA8PCBQVEhSRUFEX1JXTE9DS19SRUFE RVJfU0hJRlQpKSkKKyAgICAgICAgcmV0dXJuIEVBR0FJTjsKICAgICB9CiAKICAgLyogV2UgaGF2 ZSByZWdpc3RlcmVkIGFzIGEgcmVhZGVyLCBzbyBpZiB3ZSBhcmUgaW4gYSByZWFkIHBoYXNlLCB3 ZSBoYXZlCkBAIC0zOTMsMzUgKzM5MiwzNiBAQCBfX3B0aHJlYWRfcndsb2NrX3JkbG9ja19mdWxs NjQgKHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaywgY2xvY2tpZF90IGNsb2NraWQsCiAgICAgIGZv ciBleHBsaWNpdCBoYW5kLW92ZXIgb2YgdGhlIHJlYWQgcGhhc2U7IHRoZSBvbmx5IGV4Y2VwdGlv biBpcyBpZiB3ZQogICAgICBjYW4gc3RhcnQgYSByZWFkIHBoYXNlIGlmIHRoZXJlIGlzIG5vIHBy aW1hcnkgd3JpdGVyIGN1cnJlbnRseS4gICovCiAgIHdoaWxlICgociAmIFBUSFJFQURfUldMT0NL X1dSUEhBU0UpICE9IDAKLQkgJiYgKHIgJiBQVEhSRUFEX1JXTE9DS19XUkxPQ0tFRCkgPT0gMCkK KyAgICAgICAgICYmIChyICYgUFRIUkVBRF9SV0xPQ0tfV1JMT0NLRUQpID09IDApCiAgICAgewog ICAgICAgLyogVHJ5IHRvIGVudGVyIGEgcmVhZCBwaGFzZTogSWYgdGhlIENBUyBiZWxvdyBzdWNj ZWVkcywgd2UgaGF2ZQotCSBvd25lcnNoaXA7IGlmIGl0IGZhaWxzLCB3ZSB3aWxsIHNpbXBseSBy ZXRyeSBhbmQgcmVhc3Nlc3MgdGhlCi0JIHNpdHVhdGlvbi4KLQkgQWNxdWlyZSBNTyBzbyB3ZSBz eW5jaHJvbml6ZSB3aXRoIHByaW9yIHdyaXRlcnMuICAqLworICAgICAgICAgb3duZXJzaGlwOyBp ZiBpdCBmYWlscywgd2Ugd2lsbCBzaW1wbHkgcmV0cnkgYW5kIHJlYXNzZXNzIHRoZQorICAgICAg ICAgc2l0dWF0aW9uLgorICAgICAgICAgQWNxdWlyZSBNTyBzbyB3ZSBzeW5jaHJvbml6ZSB3aXRo IHByaW9yIHdyaXRlcnMuICAqLwogICAgICAgaWYgKGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dl YWtfYWNxdWlyZSAoJnJ3bG9jay0+X19kYXRhLl9fcmVhZGVycywgJnIsCi0JCQkJCQlyIF4gUFRI UkVBRF9SV0xPQ0tfV1JQSEFTRSkpCi0JewotCSAgLyogV2Ugc3RhcnRlZCB0aGUgcmVhZCBwaGFz ZSwgc28gd2UgYXJlIGFsc28gcmVzcG9uc2libGUgZm9yCi0JICAgICB1cGRhdGluZyB0aGUgd3Jp dGUtcGhhc2UgZnV0ZXguICBSZWxheGVkIE1PIGlzIHN1ZmZpY2llbnQuCi0JICAgICBXZSBoYXZl IHRvIGRvIHRoZSBzYW1lIHN0ZXBzIGFzIGEgd3JpdGVyIHdvdWxkIHdoZW4gaGFuZGluZwotCSAg ICAgb3ZlciB0aGUgcmVhZCBwaGFzZSB0byB1cyBiZWNhdXNlIG90aGVyIHJlYWRlcnMgY2Fubm90 Ci0JICAgICBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVzIGFuZCB0aGUgd3JpdGVyOyB0aGlzIGluY2x1 ZGVzCi0JICAgICBleHBsaWNpdCBoYW5kLW92ZXIgYW5kIHBvdGVudGlhbGx5IGhhdmluZyB0byB3 YWtlIG90aGVyIHJlYWRlcnMKLQkgICAgIChidXQgd2UgY2FuIHByZXRlbmQgdG8gZG8gdGhlIHNl dHRpbmcgYW5kIHVuc2V0dGluZyBvZiBXUkxPQ0tFRAotCSAgICAgYXRvbWljYWxseSwgYW5kIHRo dXMgY2FuIHNraXAgdGhpcyBzdGVwKS4gICovCi0JICBpZiAoKGF0b21pY19leGNoYW5nZV9yZWxh eGVkICgmcndsb2NrLT5fX2RhdGEuX193cnBoYXNlX2Z1dGV4LCAwKQotCSAgICAgICAmIFBUSFJF QURfUldMT0NLX0ZVVEVYX1VTRUQpICE9IDApCi0JICAgIHsKLQkgICAgICBpbnQgcHJpdmF0ZSA9 IF9fcHRocmVhZF9yd2xvY2tfZ2V0X3ByaXZhdGUgKHJ3bG9jayk7Ci0JICAgICAgZnV0ZXhfd2Fr ZSAoJnJ3bG9jay0+X19kYXRhLl9fd3JwaGFzZV9mdXRleCwgSU5UX01BWCwgcHJpdmF0ZSk7Ci0J ICAgIH0KLQkgIHJldHVybiAwOwotCX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHIgXiBQVEhSRUFEX1JXTE9DS19XUlBIQVNFKSkKKyAgICAgICAgewor ICAgICAgICAgIC8qIFdlIHN0YXJ0ZWQgdGhlIHJlYWQgcGhhc2UsIHNvIHdlIGFyZSBhbHNvIHJl c3BvbnNpYmxlIGZvcgorICAgICAgICAgICAgIHVwZGF0aW5nIHRoZSB3cml0ZS1waGFzZSBmdXRl eC4gIFJlbGF4ZWQgTU8gaXMgc3VmZmljaWVudC4KKyAgICAgICAgICAgICBXZSBoYXZlIHRvIGRv IHRoZSBzYW1lIHN0ZXBzIGFzIGEgd3JpdGVyIHdvdWxkIHdoZW4gaGFuZGluZworICAgICAgICAg ICAgIG92ZXIgdGhlIHJlYWQgcGhhc2UgdG8gdXMgYmVjYXVzZSBvdGhlciByZWFkZXJzIGNhbm5v dAorICAgICAgICAgICAgIGRpc3Rpbmd1aXNoIGJldHdlZW4gdXMgYW5kIHRoZSB3cml0ZXI7IHRo aXMgaW5jbHVkZXMKKyAgICAgICAgICAgICBleHBsaWNpdCBoYW5kLW92ZXIgYW5kIHBvdGVudGlh bGx5IGhhdmluZyB0byB3YWtlIG90aGVyIHJlYWRlcnMKKyAgICAgICAgICAgICAoYnV0IHdlIGNh biBwcmV0ZW5kIHRvIGRvIHRoZSBzZXR0aW5nIGFuZCB1bnNldHRpbmcgb2YgV1JMT0NLRUQKKyAg ICAgICAgICAgICBhdG9taWNhbGx5LCBhbmQgdGh1cyBjYW4gc2tpcCB0aGlzIHN0ZXApLiAgKi8K KyAgICAgICAgICBpZiAoKGF0b21pY19leGNoYW5nZV9yZWxheGVkICgmcndsb2NrLT5fX2RhdGEu X193cnBoYXNlX2Z1dGV4LCAwKQorICAgICAgICAgICAgICAgJiBQVEhSRUFEX1JXTE9DS19GVVRF WF9VU0VEKQorICAgICAgICAgICAgICAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICBpbnQgcHJpdmF0ZSA9IF9fcHRocmVhZF9yd2xvY2tfZ2V0X3ByaXZhdGUgKHJ3bG9jayk7Cisg ICAgICAgICAgICAgIGZ1dGV4X3dha2UgKCZyd2xvY2stPl9fZGF0YS5fX3dycGhhc2VfZnV0ZXgs IElOVF9NQVgsIHByaXZhdGUpOworICAgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiAwOwor ICAgICAgICB9CiAgICAgICBlbHNlCi0JewotCSAgLyogVE9ETyBCYWNrIG9mZiBiZWZvcmUgcmV0 cnlpbmcuICBBbHNvIHNlZSBhYm92ZS4gICovCi0JfQorICAgICAgICB7CisgICAgICAgICAgLyog VE9ETyBCYWNrIG9mZiBiZWZvcmUgcmV0cnlpbmcuICBBbHNvIHNlZSBhYm92ZS4gICovCisgICAg ICAgIH0KICAgICB9CiAKICAgLyogV2Ugd2VyZSBpbiBhIHdyaXRlIHBoYXNlIGJ1dCBkaWQgbm90 IGluc3RhbGwgdGhlIHJlYWQgcGhhc2UuICBXZSBjYW5ub3QKQEAgLTQ0OSw4MCArNDQ5LDgxIEBA IF9fcHRocmVhZF9yd2xvY2tfcmRsb2NrX2Z1bGw2NCAocHRocmVhZF9yd2xvY2tfdCAqcndsb2Nr LCBjbG9ja2lkX3QgY2xvY2tpZCwKICAgZm9yICg7OykKICAgICB7CiAgICAgICB3aGlsZSAoKCh3 cGYgPSBhdG9taWNfbG9hZF9yZWxheGVkICgmcndsb2NrLT5fX2RhdGEuX193cnBoYXNlX2Z1dGV4 KSkKLQkgICAgICB8IFBUSFJFQURfUldMT0NLX0ZVVEVYX1VTRUQpID09ICgxIHwgUFRIUkVBRF9S V0xPQ0tfRlVURVhfVVNFRCkpCi0JewotCSAgaW50IHByaXZhdGUgPSBfX3B0aHJlYWRfcndsb2Nr X2dldF9wcml2YXRlIChyd2xvY2spOwotCSAgaWYgKCgod3BmICYgUFRIUkVBRF9SV0xPQ0tfRlVU RVhfVVNFRCkgPT0gMCkKLQkgICAgICAmJiAoIWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtf cmVsYXhlZAotCQkgICgmcndsb2NrLT5fX2RhdGEuX193cnBoYXNlX2Z1dGV4LAotCQkgICAmd3Bm LCB3cGYgfCBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VEKSkpCi0JICAgIGNvbnRpbnVlOwotCSAg aW50IGVyciA9IF9fZnV0ZXhfYWJzdGltZWRfd2FpdDY0ICgmcndsb2NrLT5fX2RhdGEuX193cnBo YXNlX2Z1dGV4LAotCQkJCQkgICAgIDEgfCBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VELAotCQkJ CQkgICAgIGNsb2NraWQsIGFic3RpbWUsIHByaXZhdGUpOwotCSAgaWYgKGVyciA9PSBFVElNRURP VVQgfHwgZXJyID09IEVPVkVSRkxPVykKLQkgICAgewotCSAgICAgIC8qIElmIHdlIHRpbWVkIG91 dCwgd2UgbmVlZCB0byB1bnJlZ2lzdGVyLiAgSWYgbm8gcmVhZCBwaGFzZQotCQkgaGFzIGJlZW4g aW5zdGFsbGVkIHdoaWxlIHdlIHdhaXRlZCwgd2UgY2FuIGp1c3QgZGVjcmVtZW50Ci0JCSB0aGUg bnVtYmVyIG9mIHJlYWRlcnMuICBPdGhlcndpc2UsIHdlIGp1c3QgYWNxdWlyZSB0aGUKLQkJIGxv Y2ssIHdoaWNoIGlzIGFsbG93ZWQgYmVjYXVzZSB3ZSBnaXZlIG5vIHByZWNpc2UgdGltaW5nCi0J CSBndWFyYW50ZWVzLCBhbmQgYmVjYXVzZSB0aGUgdGltZW91dCBpcyBvbmx5IHJlcXVpcmVkIHRv Ci0JCSBiZSBpbiBlZmZlY3QgaWYgd2Ugd291bGQgaGF2ZSBoYWQgdG8gd2FpdCBmb3Igb3RoZXIK LQkJIHRocmVhZHMgKGUuZy4sIGlmIGZ1dGV4X3dhaXQgd291bGQgdGltZS1vdXQgaW1tZWRpYXRl bHkKLQkJIGJlY2F1c2UgdGhlIGdpdmVuIGFic29sdXRlIHRpbWUgaXMgaW4gdGhlIHBhc3QpLiAg Ki8KLQkgICAgICByID0gYXRvbWljX2xvYWRfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fcmVh ZGVycyk7Ci0JICAgICAgd2hpbGUgKChyICYgUFRIUkVBRF9SV0xPQ0tfV1JQSEFTRSkgIT0gMCkK LQkJewotCQkgIC8qIFdlIGRvbid0IG5lZWQgdG8gbWFrZSBhbnl0aGluZyBlbHNlIHZpc2libGUg dG8KLQkJICAgICBvdGhlcnMgYmVzaWRlcyB1bnJlZ2lzdGVyaW5nLCBzbyByZWxheGVkIE1PIGlz Ci0JCSAgICAgc3VmZmljaWVudC4gICovCi0JCSAgaWYgKGF0b21pY19jb21wYXJlX2V4Y2hhbmdl X3dlYWtfcmVsYXhlZAotCQkgICAgICAoJnJ3bG9jay0+X19kYXRhLl9fcmVhZGVycywgJnIsCi0J CSAgICAgICByIC0gKDEgPDwgUFRIUkVBRF9SV0xPQ0tfUkVBREVSX1NISUZUKSkpCi0JCSAgICBy ZXR1cm4gZXJyOwotCQkgIC8qIFRPRE8gQmFjay1vZmYuICAqLwotCQl9Ci0JICAgICAgLyogVXNl IHRoZSBhY3F1aXJlIE1PIGZlbmNlIHRvIG1pcnJvciB0aGUgc3RlcHMgdGFrZW4gaW4gdGhlCi0J CSBub24tdGltZW91dCBjYXNlLiAgTm90ZSB0aGF0IHRoZSByZWFkIGNhbiBoYXBwZW4gYm90aAot CQkgaW4gdGhlIGF0b21pY19sb2FkIGFib3ZlIGFzIHdlbGwgYXMgaW4gdGhlIGZhaWx1cmUgY2Fz ZQotCQkgb2YgdGhlIENBUyBvcGVyYXRpb24uICAqLwotCSAgICAgIGF0b21pY190aHJlYWRfZmVu Y2VfYWNxdWlyZSAoKTsKLQkgICAgICAvKiBXZSBzdGlsbCBuZWVkIHRvIHdhaXQgZm9yIGV4cGxp Y2l0IGhhbmQtb3ZlciwgYnV0IHdlIG11c3QKLQkJIG5vdCB1c2UgZnV0ZXhfd2FpdCBhbnltb3Jl IGJlY2F1c2Ugd2Ugd291bGQganVzdCB0aW1lIG91dAotCQkgaW4gdGhpcyBjYXNlIGFuZCB0aHVz IG1ha2UgdGhlIHNwaW4td2FpdGluZyB3ZSBuZWVkCi0JCSB1bm5lY2Vzc2FyaWx5IGV4cGVuc2l2 ZS4gICovCi0JICAgICAgd2hpbGUgKChhdG9taWNfbG9hZF9yZWxheGVkICgmcndsb2NrLT5fX2Rh dGEuX193cnBoYXNlX2Z1dGV4KQotCQkgICAgICB8IFBUSFJFQURfUldMT0NLX0ZVVEVYX1VTRUQp Ci0JCSAgICAgPT0gKDEgfCBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VEKSkKLQkJewotCQkgIC8q IFRPRE8gQmFjay1vZmY/ICAqLwotCQl9Ci0JICAgICAgcmVhZHkgPSB0cnVlOwotCSAgICAgIGJy ZWFrOwotCSAgICB9Ci0JICAvKiBJZiB3ZSBnb3QgaW50ZXJydXB0ZWQgKEVJTlRSKSBvciB0aGUg ZnV0ZXggd29yZCBkb2VzIG5vdCBoYXZlIHRoZQotCSAgICAgZXhwZWN0ZWQgdmFsdWUgKEVBR0FJ TiksIHJldHJ5LiAgKi8KLQl9CisgICAgICAgICAgICAgIHwgUFRIUkVBRF9SV0xPQ0tfRlVURVhf VVNFRCkKKyAgICAgICAgICAgICA9PSAoMSB8IFBUSFJFQURfUldMT0NLX0ZVVEVYX1VTRUQpKQor ICAgICAgICB7CisgICAgICAgICAgaW50IHByaXZhdGUgPSBfX3B0aHJlYWRfcndsb2NrX2dldF9w cml2YXRlIChyd2xvY2spOworICAgICAgICAgIGlmICgoKHdwZiAmIFBUSFJFQURfUldMT0NLX0ZV VEVYX1VTRUQpID09IDApCisgICAgICAgICAgICAgICYmICghYXRvbWljX2NvbXBhcmVfZXhjaGFu Z2Vfd2Vha19yZWxheGVkICgKKyAgICAgICAgICAgICAgICAgICZyd2xvY2stPl9fZGF0YS5fX3dy cGhhc2VfZnV0ZXgsICZ3cGYsCisgICAgICAgICAgICAgICAgICB3cGYgfCBQVEhSRUFEX1JXTE9D S19GVVRFWF9VU0VEKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICBpbnQgZXJy ID0gX19mdXRleF9hYnN0aW1lZF93YWl0NjQgKCZyd2xvY2stPl9fZGF0YS5fX3dycGhhc2VfZnV0 ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIHwgUFRI UkVBRF9SV0xPQ0tfRlVURVhfVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNsb2NraWQsIGFic3RpbWUsIHByaXZhdGUpOworICAgICAgICAgIGlmIChl cnIgPT0gRVRJTUVET1VUIHx8IGVyciA9PSBFT1ZFUkZMT1cpCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgIC8qIElmIHdlIHRpbWVkIG91dCwgd2UgbmVlZCB0byB1bnJlZ2lzdGVyLiAgSWYg bm8gcmVhZCBwaGFzZQorICAgICAgICAgICAgICAgICBoYXMgYmVlbiBpbnN0YWxsZWQgd2hpbGUg d2Ugd2FpdGVkLCB3ZSBjYW4ganVzdCBkZWNyZW1lbnQKKyAgICAgICAgICAgICAgICAgdGhlIG51 bWJlciBvZiByZWFkZXJzLiAgT3RoZXJ3aXNlLCB3ZSBqdXN0IGFjcXVpcmUgdGhlCisgICAgICAg ICAgICAgICAgIGxvY2ssIHdoaWNoIGlzIGFsbG93ZWQgYmVjYXVzZSB3ZSBnaXZlIG5vIHByZWNp c2UgdGltaW5nCisgICAgICAgICAgICAgICAgIGd1YXJhbnRlZXMsIGFuZCBiZWNhdXNlIHRoZSB0 aW1lb3V0IGlzIG9ubHkgcmVxdWlyZWQgdG8KKyAgICAgICAgICAgICAgICAgYmUgaW4gZWZmZWN0 IGlmIHdlIHdvdWxkIGhhdmUgaGFkIHRvIHdhaXQgZm9yIG90aGVyCisgICAgICAgICAgICAgICAg IHRocmVhZHMgKGUuZy4sIGlmIGZ1dGV4X3dhaXQgd291bGQgdGltZS1vdXQgaW1tZWRpYXRlbHkK KyAgICAgICAgICAgICAgICAgYmVjYXVzZSB0aGUgZ2l2ZW4gYWJzb2x1dGUgdGltZSBpcyBpbiB0 aGUgcGFzdCkuICAqLworICAgICAgICAgICAgICByID0gYXRvbWljX2xvYWRfcmVsYXhlZCAoJnJ3 bG9jay0+X19kYXRhLl9fcmVhZGVycyk7CisgICAgICAgICAgICAgIHdoaWxlICgociAmIFBUSFJF QURfUldMT0NLX1dSUEhBU0UpICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgLyogV2UgZG9uJ3QgbmVlZCB0byBtYWtlIGFueXRoaW5nIGVsc2UgdmlzaWJsZSB0bwor ICAgICAgICAgICAgICAgICAgICAgb3RoZXJzIGJlc2lkZXMgdW5yZWdpc3RlcmluZywgc28gcmVs YXhlZCBNTyBpcworICAgICAgICAgICAgICAgICAgICAgc3VmZmljaWVudC4gICovCisgICAgICAg ICAgICAgICAgICBpZiAoYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19yZWxheGVkICgKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgJnJ3bG9jay0+X19kYXRhLl9fcmVhZGVycywgJnIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHIgLSAoMSA8PCBQVEhSRUFEX1JXTE9DS19SRUFERVJf U0hJRlQpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgICAg ICAgIC8qIFRPRE8gQmFjay1vZmYuICAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgLyogVXNlIHRoZSBhY3F1aXJlIE1PIGZlbmNlIHRvIG1pcnJvciB0aGUgc3RlcHMgdGFrZW4g aW4gdGhlCisgICAgICAgICAgICAgICAgIG5vbi10aW1lb3V0IGNhc2UuICBOb3RlIHRoYXQgdGhl IHJlYWQgY2FuIGhhcHBlbiBib3RoCisgICAgICAgICAgICAgICAgIGluIHRoZSBhdG9taWNfbG9h ZCBhYm92ZSBhcyB3ZWxsIGFzIGluIHRoZSBmYWlsdXJlIGNhc2UKKyAgICAgICAgICAgICAgICAg b2YgdGhlIENBUyBvcGVyYXRpb24uICAqLworICAgICAgICAgICAgICBhdG9taWNfdGhyZWFkX2Zl bmNlX2FjcXVpcmUgKCk7CisgICAgICAgICAgICAgIC8qIFdlIHN0aWxsIG5lZWQgdG8gd2FpdCBm b3IgZXhwbGljaXQgaGFuZC1vdmVyLCBidXQgd2UgbXVzdAorICAgICAgICAgICAgICAgICBub3Qg dXNlIGZ1dGV4X3dhaXQgYW55bW9yZSBiZWNhdXNlIHdlIHdvdWxkIGp1c3QgdGltZSBvdXQKKyAg ICAgICAgICAgICAgICAgaW4gdGhpcyBjYXNlIGFuZCB0aHVzIG1ha2UgdGhlIHNwaW4td2FpdGlu ZyB3ZSBuZWVkCisgICAgICAgICAgICAgICAgIHVubmVjZXNzYXJpbHkgZXhwZW5zaXZlLiAgKi8K KyAgICAgICAgICAgICAgd2hpbGUgKChhdG9taWNfbG9hZF9yZWxheGVkICgmcndsb2NrLT5fX2Rh dGEuX193cnBoYXNlX2Z1dGV4KQorICAgICAgICAgICAgICAgICAgICAgIHwgUFRIUkVBRF9SV0xP Q0tfRlVURVhfVVNFRCkKKyAgICAgICAgICAgICAgICAgICAgID09ICgxIHwgUFRIUkVBRF9SV0xP Q0tfRlVURVhfVVNFRCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLyog VE9ETyBCYWNrLW9mZj8gICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICByZWFk eSA9IHRydWU7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg IC8qIElmIHdlIGdvdCBpbnRlcnJ1cHRlZCAoRUlOVFIpIG9yIHRoZSBmdXRleCB3b3JkIGRvZXMg bm90IGhhdmUgdGhlCisgICAgICAgICAgICAgZXhwZWN0ZWQgdmFsdWUgKEVBR0FJTiksIHJldHJ5 LiAgKi8KKyAgICAgICAgfQogICAgICAgaWYgKHJlYWR5KQotCS8qIFNlZSBiZWxvdy4gICovCi0J YnJlYWs7CisgICAgICAgIC8qIFNlZSBiZWxvdy4gICovCisgICAgICAgIGJyZWFrOwogICAgICAg LyogV2UgbmVlZCBhY3F1aXJlIE1PIGhlcmUgc28gdGhhdCB3ZSBzeW5jaHJvbml6ZSB3aXRoIHRo ZSBsb2NrCi0JIHJlbGVhc2Ugb2YgdGhlIHdyaXRlciwgYW5kIHNvIHRoYXQgd2Ugb2JzZXJ2ZSBh IHJlY2VudCB2YWx1ZSBvZgotCSBfX3dycGhhc2VfZnV0ZXggKHNlZSBiZWxvdykuICAqLworICAg ICAgICAgcmVsZWFzZSBvZiB0aGUgd3JpdGVyLCBhbmQgc28gdGhhdCB3ZSBvYnNlcnZlIGEgcmVj ZW50IHZhbHVlIG9mCisgICAgICAgICBfX3dycGhhc2VfZnV0ZXggKHNlZSBiZWxvdykuICAqLwog ICAgICAgaWYgKChhdG9taWNfbG9hZF9hY3F1aXJlICgmcndsb2NrLT5fX2RhdGEuX19yZWFkZXJz KQotCSAgICYgUFRIUkVBRF9SV0xPQ0tfV1JQSEFTRSkgPT0gMCkKLQkvKiBXZSBhcmUgaW4gYSBy ZWFkIHBoYXNlIG5vdywgc28gdGhlIGxlYXN0IHJlY2VudCBtb2RpZmljYXRpb24gb2YKLQkgICBf X3dycGhhc2VfZnV0ZXggd2UgY2FuIHJlYWQgZnJvbSBpcyB0aGUgc3RvcmUgYnkgdGhlIHdyaXRl cgotCSAgIHdpdGggdmFsdWUgMS4gIFRodXMsIG9ubHkgbm93IHdlIGNhbiBhc3N1bWUgdGhhdCBp ZiB3ZSBvYnNlcnZlCi0JICAgYSB2YWx1ZSBvZiAwLCBleHBsaWNpdCBoYW5kLW92ZXIgaXMgZmlu aXNoZWQuIFJldHJ5IHRoZSBsb29wCi0JICAgYWJvdmUgb25lIG1vcmUgdGltZS4gICovCi0JcmVh ZHkgPSB0cnVlOworICAgICAgICAgICAmIFBUSFJFQURfUldMT0NLX1dSUEhBU0UpCisgICAgICAg ICAgPT0gMCkKKyAgICAgICAgLyogV2UgYXJlIGluIGEgcmVhZCBwaGFzZSBub3csIHNvIHRoZSBs ZWFzdCByZWNlbnQgbW9kaWZpY2F0aW9uIG9mCisgICAgICAgICAgIF9fd3JwaGFzZV9mdXRleCB3 ZSBjYW4gcmVhZCBmcm9tIGlzIHRoZSBzdG9yZSBieSB0aGUgd3JpdGVyCisgICAgICAgICAgIHdp dGggdmFsdWUgMS4gIFRodXMsIG9ubHkgbm93IHdlIGNhbiBhc3N1bWUgdGhhdCBpZiB3ZSBvYnNl cnZlCisgICAgICAgICAgIGEgdmFsdWUgb2YgMCwgZXhwbGljaXQgaGFuZC1vdmVyIGlzIGZpbmlz aGVkLiBSZXRyeSB0aGUgbG9vcAorICAgICAgICAgICBhYm92ZSBvbmUgbW9yZSB0aW1lLiAgKi8K KyAgICAgICAgcmVhZHkgPSB0cnVlOwogICAgIH0KIAogICByZXR1cm4gMDsKIH0KIAotCiBzdGF0 aWMgX19hbHdheXNfaW5saW5lIHZvaWQKIF9fcHRocmVhZF9yd2xvY2tfd3J1bmxvY2sgKHB0aHJl YWRfcndsb2NrX3QgKnJ3bG9jaykKIHsKQEAgLTUzMiwyNSArNTMzLDI3IEBAIF9fcHRocmVhZF9y d2xvY2tfd3J1bmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaykKICAgLyogRGlzYWJsZSB3 YWl0aW5nIGJ5IHdyaXRlcnMuICBXZSB3aWxsIHdha2UgdXAgYWZ0ZXIgd2UgZGVjaWRlZCBob3cg dG8KICAgICAgcHJvY2VlZC4gICovCiAgIGJvb2wgd2FrZV93cml0ZXJzCi0gICAgPSAoKGF0b21p Y19leGNoYW5nZV9yZWxheGVkICgmcndsb2NrLT5fX2RhdGEuX193cml0ZXJzX2Z1dGV4LCAwKQot CSYgUFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNFRCkgIT0gMCk7CisgICAgICA9ICgoYXRvbWljX2V4 Y2hhbmdlX3JlbGF4ZWQgKCZyd2xvY2stPl9fZGF0YS5fX3dyaXRlcnNfZnV0ZXgsIDApCisgICAg ICAgICAgJiBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VEKQorICAgICAgICAgIT0gMCk7CiAKICAg aWYgKHJ3bG9jay0+X19kYXRhLl9fZmxhZ3MgIT0gUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURF Ul9OUCkKICAgICB7CiAgICAgICAvKiBGaXJzdCwgdHJ5IHRvIGhhbmQgb3ZlciB0byBhbm90aGVy IHdyaXRlci4gICovCiAgICAgICB1bnNpZ25lZCBpbnQgdyA9IGF0b21pY19sb2FkX3JlbGF4ZWQg KCZyd2xvY2stPl9fZGF0YS5fX3dyaXRlcnMpOwogICAgICAgd2hpbGUgKHcgIT0gMCkKLQl7Ci0J ICAvKiBSZWxlYXNlIE1PIHNvIHRoYXQgYW5vdGhlciB3cml0ZXIgdGhhdCBnZXRzIFdSTE9DS0VE IGZyb20gdXMgd2lsbAotCSAgICAgc3luY2hyb25pemUgd2l0aCB1cyBhbmQgdGh1cyBjYW4gdGFr ZSBvdmVyIG91ciB2aWV3IG9mCi0JICAgICBfX3JlYWRlcnMgKGluY2x1ZGluZywgZm9yIGV4YW1w bGUsIHdoZXRoZXIgd2UgYXJlIGluIGEgd3JpdGUKLQkgICAgIHBoYXNlIG9yIG5vdCkuICAqLwot CSAgaWYgKGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfcmVsZWFzZQotCSAgICAgICgmcnds b2NrLT5fX2RhdGEuX193cml0ZXJzLCAmdywgdyB8IFBUSFJFQURfUldMT0NLX1dSSEFORE9WRVIp KQotCSAgICAvKiBBbm90aGVyIHdyaXRlciB3aWxsIHRha2Ugb3Zlci4gICovCi0JICAgIGdvdG8g ZG9uZTsKLQkgIC8qIFRPRE8gQmFjay1vZmYuICAqLwotCX0KKyAgICAgICAgeworICAgICAgICAg IC8qIFJlbGVhc2UgTU8gc28gdGhhdCBhbm90aGVyIHdyaXRlciB0aGF0IGdldHMgV1JMT0NLRUQg ZnJvbSB1cyB3aWxsCisgICAgICAgICAgICAgc3luY2hyb25pemUgd2l0aCB1cyBhbmQgdGh1cyBj YW4gdGFrZSBvdmVyIG91ciB2aWV3IG9mCisgICAgICAgICAgICAgX19yZWFkZXJzIChpbmNsdWRp bmcsIGZvciBleGFtcGxlLCB3aGV0aGVyIHdlIGFyZSBpbiBhIHdyaXRlCisgICAgICAgICAgICAg cGhhc2Ugb3Igbm90KS4gICovCisgICAgICAgICAgaWYgKGF0b21pY19jb21wYXJlX2V4Y2hhbmdl X3dlYWtfcmVsZWFzZSAoCisgICAgICAgICAgICAgICAgICAmcndsb2NrLT5fX2RhdGEuX193cml0 ZXJzLCAmdywKKyAgICAgICAgICAgICAgICAgIHcgfCBQVEhSRUFEX1JXTE9DS19XUkhBTkRPVkVS KSkKKyAgICAgICAgICAgIC8qIEFub3RoZXIgd3JpdGVyIHdpbGwgdGFrZSBvdmVyLiAgKi8KKyAg ICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAvKiBUT0RPIEJhY2stb2ZmLiAgKi8KKyAg ICAgICAgfQogICAgIH0KIAogICAvKiBXZSBoYXZlIGRvbmUgZXZlcnl0aGluZyB3ZSBuZWVkZWQg dG8gZG8gdG8gcHJlZmVyIHdyaXRlcnMsIHNvIG5vdyB3ZQpAQCAtNTU4LDMyICs1NjEsMzIgQEAg X19wdGhyZWFkX3J3bG9ja193cnVubG9jayAocHRocmVhZF9yd2xvY2tfdCAqcndsb2NrKQogICAg ICBzdGF5IGluIGEgd3JpdGUgcGhhc2UuICBTZWUgcHRocmVhZF9yd2xvY2tfcmR1bmxvY2sgZm9y IG1vcmUgZGV0YWlscy4gICovCiAgIHVuc2lnbmVkIGludCByID0gYXRvbWljX2xvYWRfcmVsYXhl ZCAoJnJ3bG9jay0+X19kYXRhLl9fcmVhZGVycyk7CiAgIC8qIFJlbGVhc2UgTU8gc28gdGhhdCBz dWJzZXF1ZW50IHJlYWRlcnMgb3Igd3JpdGVycyBzeW5jaHJvbml6ZSB3aXRoIHVzLiAgKi8KLSAg d2hpbGUgKCFhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX3JlbGVhc2UKLQkgKCZyd2xvY2st Pl9fZGF0YS5fX3JlYWRlcnMsICZyLAotCSAgKChyIF4gUFRIUkVBRF9SV0xPQ0tfV1JMT0NLRUQp Ci0JICAgXiAoKHIgPj4gUFRIUkVBRF9SV0xPQ0tfUkVBREVSX1NISUZUKSA9PSAwID8gMAotCSAg ICAgIDogUFRIUkVBRF9SV0xPQ0tfV1JQSEFTRSkpKSkKKyAgd2hpbGUgKCFhdG9taWNfY29tcGFy ZV9leGNoYW5nZV93ZWFrX3JlbGVhc2UgKAorICAgICAgJnJ3bG9jay0+X19kYXRhLl9fcmVhZGVy cywgJnIsCisgICAgICAoKHIgXiBQVEhSRUFEX1JXTE9DS19XUkxPQ0tFRCkKKyAgICAgICBeICgo ciA+PiBQVEhSRUFEX1JXTE9DS19SRUFERVJfU0hJRlQpID09IDAgPyAwCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUFRIUkVBRF9SV0xPQ0tfV1JQ SEFTRSkpKSkKICAgICB7CiAgICAgICAvKiBUT0RPIEJhY2stb2ZmLiAgKi8KICAgICB9CiAgIGlm ICgociA+PiBQVEhSRUFEX1JXTE9DS19SRUFERVJfU0hJRlQpICE9IDApCiAgICAgewogICAgICAg LyogV2UgbXVzdCBoYW5kIG92ZXIgZXhwbGljaXRseSB0aHJvdWdoIF9fd3JwaGFzZV9mdXRleC4g IFJlbGF4ZWQgTU8gaXMKLQkgc3VmZmljaWVudCBiZWNhdXNlIGl0IGlzIGp1c3QgdXNlZCB0byBk ZWxheSBhY3F1aXNpdGlvbiBieSBhIHdyaXRlcjsKLQkgYW55IG90aGVyIHN5bmNocm9uaXplcy13 aXRoIHJlbGF0aW9ucyB0aGF0IGFyZSBuZWNlc3NhcnkgYXJlCi0JIGVzdGFibGlzaGVkIHRocm91 Z2ggX19yZWFkZXJzLiAgKi8KKyAgICAgICAgIHN1ZmZpY2llbnQgYmVjYXVzZSBpdCBpcyBqdXN0 IHVzZWQgdG8gZGVsYXkgYWNxdWlzaXRpb24gYnkgYSB3cml0ZXI7CisgICAgICAgICBhbnkgb3Ro ZXIgc3luY2hyb25pemVzLXdpdGggcmVsYXRpb25zIHRoYXQgYXJlIG5lY2Vzc2FyeSBhcmUKKyAg ICAgICAgIGVzdGFibGlzaGVkIHRocm91Z2ggX19yZWFkZXJzLiAgKi8KICAgICAgIGlmICgoYXRv bWljX2V4Y2hhbmdlX3JlbGF4ZWQgKCZyd2xvY2stPl9fZGF0YS5fX3dycGhhc2VfZnV0ZXgsIDAp Ci0JICAgJiBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VEKSAhPSAwKQotCWZ1dGV4X3dha2UgKCZy d2xvY2stPl9fZGF0YS5fX3dycGhhc2VfZnV0ZXgsIElOVF9NQVgsIHByaXZhdGUpOworICAgICAg ICAgICAmIFBUSFJFQURfUldMT0NLX0ZVVEVYX1VTRUQpCisgICAgICAgICAgIT0gMCkKKyAgICAg ICAgZnV0ZXhfd2FrZSAoJnJ3bG9jay0+X19kYXRhLl9fd3JwaGFzZV9mdXRleCwgSU5UX01BWCwg cHJpdmF0ZSk7CiAgICAgfQogCi0gZG9uZToKK2RvbmU6CiAgIC8qIFdlIHJlbGVhc2VkIFdSTE9D S0VEIGluIHNvbWUgd2F5LCBzbyB3YWtlIGEgd3JpdGVyLiAgKi8KICAgaWYgKHdha2Vfd3JpdGVy cykKICAgICBmdXRleF93YWtlICgmcndsb2NrLT5fX2RhdGEuX193cml0ZXJzX2Z1dGV4LCAxLCBw cml2YXRlKTsKIH0KIAotCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludAogX19wdGhyZWFkX3J3 bG9ja193cmxvY2tfZnVsbDY0IChwdGhyZWFkX3J3bG9ja190ICpyd2xvY2ssIGNsb2NraWRfdCBj bG9ja2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgX190 aW1lc3BlYzY0ICphYnN0aW1lKQpAQCAtNTk0LDE0ICs1OTcsMTUgQEAgX19wdGhyZWFkX3J3bG9j a193cmxvY2tfZnVsbDY0IChwdGhyZWFkX3J3bG9ja190ICpyd2xvY2ssIGNsb2NraWRfdCBjbG9j a2lkLAogICAgICByZXF1aXJlcyB0aGF0ICJ0aGUgdmFsaWRpdHkgb2YgdGhlIGFic3RpbWUgcGFy YW1ldGVyIG5lZWQgbm90IGJlIGNoZWNrZWQKICAgICAgaWYgdGhlIGxvY2sgY2FuIGJlIGltbWVk aWF0ZWx5IGFjcXVpcmVkIiAoaS5lLiwgd2UgbmVlZCBub3QgYnV0IG1heSBjaGVjawogICAgICBp dCkuICAqLwotICBpZiAoYWJzdGltZSAmJiBfX2dsaWJjX3VubGlrZWx5ICghZnV0ZXhfYWJzdGlt ZWRfc3VwcG9ydGVkX2Nsb2NraWQgKGNsb2NraWQpCi0gICAgICB8fCAhIHZhbGlkX25hbm9zZWNv bmRzIChhYnN0aW1lLT50dl9uc2VjKSkpCisgIGlmIChhYnN0aW1lCisgICAgICAmJiBfX2dsaWJj X3VubGlrZWx5ICghZnV0ZXhfYWJzdGltZWRfc3VwcG9ydGVkX2Nsb2NraWQgKGNsb2NraWQpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhdmFsaWRfbmFub3NlY29uZHMgKGFic3RpbWUt PnR2X25zZWMpKSkKICAgICByZXR1cm4gRUlOVkFMOwogCiAgIC8qIE1ha2Ugc3VyZSB3ZSBhcmUg bm90IGhvbGRpbmcgdGhlIHJ3bG9jayBhcyBhIHdyaXRlci4gIFRoaXMgaXMgYSBkZWFkbG9jawog ICAgICBzaXR1YXRpb24gd2UgcmVjb2duaXplIGFuZCByZXBvcnQuICAqLwogICBpZiAoX19nbGli Y191bmxpa2VseSAoYXRvbWljX2xvYWRfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fY3VyX3dy aXRlcikKLQkJCT09IFRIUkVBRF9HRVRNRU0gKFRIUkVBRF9TRUxGLCB0aWQpKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgID09IFRIUkVBRF9HRVRNRU0gKFRIUkVBRF9TRUxGLCB0aWQpKSkKICAg ICByZXR1cm4gRURFQURMSzsKIAogICAvKiBGaXJzdCB3ZSB0cnkgdG8gYWNxdWlyZSB0aGUgcm9s ZSBvZiBwcmltYXJ5IHdyaXRlciBieSBzZXR0aW5nIFdSTE9DS0VEOwpAQCAtNjIwLDE1NCArNjI0 LDE1NSBAQCBfX3B0aHJlYWRfcndsb2NrX3dybG9ja19mdWxsNjQgKHB0aHJlYWRfcndsb2NrX3Qg KnJ3bG9jaywgY2xvY2tpZF90IGNsb2NraWQsCiAgICAgIHRoaXMgY291bGQgYmUgbGVzcyBzY2Fs YWJsZSBpZiByZWFkZXJzIGFycml2ZSBhbmQgbGVhdmUgZnJlcXVlbnRseS4gICovCiAgIGJvb2wg bWF5X3NoYXJlX2Z1dGV4X3VzZWRfZmxhZyA9IGZhbHNlOwogICB1bnNpZ25lZCBpbnQgciA9IGF0 b21pY19mZXRjaF9vcl9hY3F1aXJlICgmcndsb2NrLT5fX2RhdGEuX19yZWFkZXJzLAotCQkJCQkg ICAgUFRIUkVBRF9SV0xPQ0tfV1JMT0NLRUQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQVEhSRUFEX1JXTE9DS19XUkxPQ0tFRCk7CiAgIGlmIChfX2dsaWJj X3VubGlrZWx5ICgociAmIFBUSFJFQURfUldMT0NLX1dSTE9DS0VEKSAhPSAwKSkKICAgICB7CiAg ICAgICAvKiBUaGVyZSBpcyBhbm90aGVyIHByaW1hcnkgd3JpdGVyLiAgKi8KICAgICAgIGJvb2wg cHJlZmVyX3dyaXRlcgotCT0gKHJ3bG9jay0+X19kYXRhLl9fZmxhZ3MgIT0gUFRIUkVBRF9SV0xP Q0tfUFJFRkVSX1JFQURFUl9OUCk7CisgICAgICAgICAgPSAocndsb2NrLT5fX2RhdGEuX19mbGFn cyAhPSBQVEhSRUFEX1JXTE9DS19QUkVGRVJfUkVBREVSX05QKTsKICAgICAgIGlmIChwcmVmZXJf d3JpdGVyKQotCXsKLQkgIC8qIFdlIHJlZ2lzdGVyIGFzIGEgd2FpdGluZyB3cml0ZXIsIHNvIHRo YXQgd2UgY2FuIG1ha2UgdXNlIG9mCi0JICAgICB3cml0ZXItLXdyaXRlciBoYW5kLW92ZXIuICBS ZWxheGVkIE1PIGlzIGZpbmUgYmVjYXVzZSB3ZSBqdXN0Ci0JICAgICB3YW50IHRvIHJlZ2lzdGVy LiAgV2UgYXNzdW1lIHRoYXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMKLQkgICAgIGlz IGxlc3MgdGhhbiB0aGUgY2FwYWNpdHkgaW4gX193cml0ZXJzLiAgKi8KLQkgIGF0b21pY19mZXRj aF9hZGRfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fd3JpdGVycywgMSk7Ci0JfQorICAgICAg ICB7CisgICAgICAgICAgLyogV2UgcmVnaXN0ZXIgYXMgYSB3YWl0aW5nIHdyaXRlciwgc28gdGhh dCB3ZSBjYW4gbWFrZSB1c2Ugb2YKKyAgICAgICAgICAgICB3cml0ZXItLXdyaXRlciBoYW5kLW92 ZXIuICBSZWxheGVkIE1PIGlzIGZpbmUgYmVjYXVzZSB3ZSBqdXN0CisgICAgICAgICAgICAgd2Fu dCB0byByZWdpc3Rlci4gIFdlIGFzc3VtZSB0aGF0IHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJl YWRzCisgICAgICAgICAgICAgaXMgbGVzcyB0aGFuIHRoZSBjYXBhY2l0eSBpbiBfX3dyaXRlcnMu ICAqLworICAgICAgICAgIGF0b21pY19mZXRjaF9hZGRfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRh Ll9fd3JpdGVycywgMSk7CisgICAgICAgIH0KICAgICAgIGZvciAoOzspCi0JewotCSAgLyogVE9E TyBTcGluIHVudGlsIFdSTE9DS0VEIGlzIDAgYmVmb3JlIHRyeWluZyB0aGUgQ0FTIGJlbG93Lgot CSAgICAgQnV0IHBheSBhdHRlbnRpb24gdG8gbm90IGRlbGF5IHRyeWluZyB3cml0ZXItLXdyaXRl ciBoYW5kLW92ZXIKLQkgICAgIGZvciB0b28gbG9uZyAod2hpY2ggd2UgbXVzdCB0cnkgZXZlbnR1 YWxseSBhbnl3YXkpLiAgKi8KLQkgIGlmICgociAmIFBUSFJFQURfUldMT0NLX1dSTE9DS0VEKSA9 PSAwKQotCSAgICB7Ci0JICAgICAgLyogVHJ5IHRvIGJlY29tZSB0aGUgcHJpbWFyeSB3cml0ZXIg b3IgcmV0cnkuICBBY3F1aXJlIE1PIGFzIGluCi0JCSB0aGUgZmV0Y2hfb3IgYWJvdmUuICAqLwot CSAgICAgIGlmIChhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2FjcXVpcmUKLQkJICAoJnJ3 bG9jay0+X19kYXRhLl9fcmVhZGVycywgJnIsIHIgfCBQVEhSRUFEX1JXTE9DS19XUkxPQ0tFRCkp Ci0JCXsKLQkJICBpZiAocHJlZmVyX3dyaXRlcikKLQkJICAgIHsKLQkJICAgICAgLyogVW5yZWdp c3RlciBhcyBhIHdhaXRpbmcgd3JpdGVyLiAgTm90ZSB0aGF0IGJlY2F1c2Ugd2UKLQkJCSBhY3F1 aXJlZCBXUkxPQ0tFRCwgV1JIQU5ET1ZFUiB3aWxsIG5vdCBiZSBzZXQuCi0JCQkgQWNxdWlyZSBN TyBvbiB0aGUgQ0FTIGFib3ZlIGVuc3VyZXMgdGhhdAotCQkJIHVucmVnaXN0ZXJpbmcgaGFwcGVu cyBhZnRlciB0aGUgcHJldmlvdXMgd3JpdGVyOwotCQkJIHRoaXMgc29ydHMgdGhlIGFjY2Vzc2Vz IHRvIF9fd3JpdGVycyBieSBhbGwKLQkJCSBwcmltYXJ5IHdyaXRlcnMgaW4gYSB1c2VmdWwgd2F5 IChlLmcuLCBhbnkgb3RoZXIKLQkJCSBwcmltYXJ5IHdyaXRlciBhY3F1aXJpbmcgYWZ0ZXIgdXMg b3IgZ2V0dGluZyBpdCBmcm9tCi0JCQkgdXMgdGhyb3VnaCBXUkhBTkRPVkVSIHdpbGwgc2VlIGJv dGggb3VyIGNoYW5nZXMgdG8KLQkJCSBfX3dyaXRlcnMpLgotCQkJID8/PyBQZXJoYXBzIHRoaXMg aXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IKLQkJCSByZWFzb25zIHdlIGRvIG5vdCB5ZXQg a25vdyBvZi4gICovCi0JCSAgICAgIGF0b21pY19mZXRjaF9hZGRfcmVsYXhlZCAoJnJ3bG9jay0+ X19kYXRhLl9fd3JpdGVycywgLTEpOwotCQkgICAgfQotCQkgIGJyZWFrOwotCQl9Ci0JICAgICAg LyogUmV0cnkgaWYgdGhlIENBUyBmYWlscyAociB3aWxsIGhhdmUgYmVlbiB1cGRhdGVkKS4gICov Ci0JICAgICAgY29udGludWU7Ci0JICAgIH0KLQkgIC8qIElmIHdyaXRlci0td3JpdGVyIGhhbmQt b3ZlciBpcyBhdmFpbGFibGUsIHRyeSB0byBiZWNvbWUgdGhlCi0JICAgICBwcmltYXJ5IHdyaXRl ciB0aGlzIHdheSBieSBncmFiYmluZyB0aGUgV1JIQU5ET1ZFUiB0b2tlbi4gIElmIHdlCi0JICAg ICBzdWNjZWVkLCB3ZSBvd24gV1JMT0NLRUQuICAqLwotCSAgaWYgKHByZWZlcl93cml0ZXIpCi0J ICAgIHsKLQkgICAgICB1bnNpZ25lZCBpbnQgdyA9IGF0b21pY19sb2FkX3JlbGF4ZWQgKCZyd2xv Y2stPl9fZGF0YS5fX3dyaXRlcnMpOwotCSAgICAgIGlmICgodyAmIFBUSFJFQURfUldMT0NLX1dS SEFORE9WRVIpICE9IDApCi0JCXsKLQkJICAvKiBBY3F1aXJlIE1PIGlzIHJlcXVpcmVkIGhlcmUg c28gdGhhdCB3ZSBzeW5jaHJvbml6ZSB3aXRoCi0JCSAgICAgdGhlIHdyaXRlciB0aGF0IGhhbmRl ZCBvdmVyIFdSTE9DS0VELiAgV2UgYWxzbyBuZWVkIHRoaXMKLQkJICAgICBmb3IgdGhlIHJlbG9h ZCBvZiBfX3JlYWRlcnMgYmVsb3cgYmVjYXVzZSBvdXIgdmlldyBvZgotCQkgICAgIF9fcmVhZGVy cyBtdXN0IGJlIGF0IGxlYXN0IGFzIHJlY2VudCBhcyB0aGUgdmlldyBvZiB0aGUKLQkJICAgICB3 cml0ZXIgdGhhdCBoYW5kZWQgb3ZlciBXUkxPQ0tFRDsgd2UgbXVzdCBhdm9pZCBhbiBBQkEKLQkJ ICAgICB0aHJvdWdoIFdSSEFORE9WRVIsIHdoaWNoIGNvdWxkLCBmb3IgZXhhbXBsZSwgbGVhZCB0 byB1cwotCQkgICAgIGFzc3VtaW5nIHdlIGFyZSBzdGlsbCBpbiBhIHdyaXRlIHBoYXNlIHdoZW4g aW4gZmFjdCB3ZQotCQkgICAgIGFyZSBub3QuICAqLwotCQkgIGlmIChhdG9taWNfY29tcGFyZV9l eGNoYW5nZV93ZWFrX2FjcXVpcmUKLQkJICAgICAgKCZyd2xvY2stPl9fZGF0YS5fX3dyaXRlcnMs Ci0JCSAgICAgICAmdywgKHcgLSBQVEhSRUFEX1JXTE9DS19XUkhBTkRPVkVSIC0gMSkpKQotCQkg ICAgewotCQkgICAgICAvKiBSZWxvYWQgc28gb3VyIHZpZXcgaXMgY29uc2lzdGVudCB3aXRoIHRo ZSB2aWV3IG9mCi0JCQkgdGhlIHByZXZpb3VzIG93bmVyIG9mIFdSTE9DS0VELiAgU2VlIGFib3Zl LiAgKi8KLQkJICAgICAgciA9IGF0b21pY19sb2FkX3JlbGF4ZWQgKCZyd2xvY2stPl9fZGF0YS5f X3JlYWRlcnMpOwotCQkgICAgICBicmVhazsKLQkJICAgIH0KLQkJICAvKiBXZSBkbyBub3QgbmVl ZCB0byByZWxvYWQgX19yZWFkZXJzIGhlcmUuICBXZSBzaG91bGQgdHJ5Ci0JCSAgICAgdG8gcGVy Zm9ybSB3cml0ZXItLXdyaXRlciBoYW5kLW92ZXIgaWYgcG9zc2libGU7IGlmIGl0Ci0JCSAgICAg aXMgbm90IHBvc3NpYmxlIGFueW1vcmUsIHdlIHdpbGwgcmVsb2FkIF9fcmVhZGVycwotCQkgICAg IGVsc2V3aGVyZSBpbiB0aGlzIGxvb3AuICAqLwotCQkgIGNvbnRpbnVlOwotCQl9Ci0JICAgIH0K LQkgIC8qIFdlIGRpZCBub3QgYWNxdWlyZSBXUkxPQ0tFRCBub3Igd2VyZSBhYmxlIHRvIHVzZSB3 cml0ZXItLXdyaXRlcgotCSAgICAgaGFuZC1vdmVyLCBzbyB3ZSBibG9jayBvbiBfX3dyaXRlcnNf ZnV0ZXguICAqLwotCSAgaW50IHByaXZhdGUgPSBfX3B0aHJlYWRfcndsb2NrX2dldF9wcml2YXRl IChyd2xvY2spOwotCSAgdW5zaWduZWQgaW50IHdmCi0JICAgID0gYXRvbWljX2xvYWRfcmVsYXhl ZCAoJnJ3bG9jay0+X19kYXRhLl9fd3JpdGVyc19mdXRleCk7Ci0JICBpZiAoKCh3ZiAmIH4odW5z aWduZWQgaW50KSBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VEKSAhPSAxKQotCSAgICAgIHx8ICgo d2YgIT0gKDEgfCBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VEKSkKLQkJICAmJiAoIWF0b21pY19j b21wYXJlX2V4Y2hhbmdlX3dlYWtfcmVsYXhlZAotCQkgICAgICAoJnJ3bG9jay0+X19kYXRhLl9f d3JpdGVyc19mdXRleCwgJndmLAotCQkgICAgICAgMSB8IFBUSFJFQURfUldMT0NLX0ZVVEVYX1VT RUQpKSkpCi0JICAgIHsKLQkgICAgICAvKiBJZiB3ZSBjYW5ub3QgYmxvY2sgb24gX193cml0ZXJz X2Z1dGV4IGJlY2F1c2UgdGhlcmUgaXMgbm8KLQkJIHByaW1hcnkgd3JpdGVyLCBvciB3ZSBjYW5u b3Qgc2V0IFBUSFJFQURfUldMT0NLX0ZVVEVYX1VTRUQsCi0JCSB3ZSByZXRyeS4gIFdlIG11c3Qg cmVsb2FkIF9fcmVhZGVycyBoZXJlIGluIGNhc2Ugd2UgY2Fubm90Ci0JCSBibG9jayBvbiBfX3dy aXRlcnNfZnV0ZXggc28gdGhhdCB3ZSBjYW4gYmVjb21lIHRoZSBwcmltYXJ5Ci0JCSB3cml0ZXIg YW5kIGFyZSBub3Qgc3R1Y2sgaW4gYSBsb29wIHRoYXQganVzdCBjb250aW51b3VzbHkKLQkJIGZh aWxzIHRvIGJsb2NrIG9uIF9fd3JpdGVyc19mdXRleC4gICovCi0JICAgICAgciA9IGF0b21pY19s b2FkX3JlbGF4ZWQgKCZyd2xvY2stPl9fZGF0YS5fX3JlYWRlcnMpOwotCSAgICAgIGNvbnRpbnVl OwotCSAgICB9Ci0JICAvKiBXZSBzZXQgdGhlIGZsYWcgdGhhdCBzaWduYWxzIHRoYXQgdGhlIGZ1 dGV4IGlzIHVzZWQsIG9yIHdlIGNvdWxkCi0JICAgICBoYXZlIHNldCBpdCBpZiB3ZSBoYWQgYmVl biBmYXN0ZXIgdGhhbiBvdGhlciB3YWl0ZXJzLiAgQXMgYQotCSAgICAgcmVzdWx0LCB3ZSBtYXkg c2hhcmUgdGhlIGZsYWcgd2l0aCBhbiB1bmtub3duIG51bWJlciBvZiBvdGhlcgotCSAgICAgd3Jp dGVycy4gIFRoZXJlZm9yZSwgd2UgbXVzdCBrZWVwIHRoaXMgZmxhZyBzZXQgd2hlbiB3ZSBhY3F1 aXJlCi0JICAgICB0aGUgbG9jay4gIFdlIGRvIG5vdCBuZWVkIHRvIGRvIHRoaXMgd2hlbiB3ZSBk byBub3QgcmVhY2ggdGhpcwotCSAgICAgcG9pbnQgaGVyZSBiZWNhdXNlIHRoZW4gd2UgYXJlIG5v dCBwYXJ0IG9mIHRoZSBncm91cCB0aGF0IG1heQotCSAgICAgc2hhcmUgdGhlIGZsYWcsIGFuZCBh bm90aGVyIHdyaXRlciB3aWxsIHdha2Ugb25lIG9mIHRoZSB3cml0ZXJzCi0JICAgICBpbiB0aGlz IGdyb3VwLiAgKi8KLQkgIG1heV9zaGFyZV9mdXRleF91c2VkX2ZsYWcgPSB0cnVlOwotCSAgaW50 IGVyciA9IF9fZnV0ZXhfYWJzdGltZWRfd2FpdDY0ICgmcndsb2NrLT5fX2RhdGEuX193cml0ZXJz X2Z1dGV4LAotCQkJCQkgICAgIDEgfCBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VELAotCQkJCQkg ICAgIGNsb2NraWQsIGFic3RpbWUsIHByaXZhdGUpOwotCSAgaWYgKGVyciA9PSBFVElNRURPVVQg fHwgZXJyID09IEVPVkVSRkxPVykKLQkgICAgewotCSAgICAgIGlmIChwcmVmZXJfd3JpdGVyKQot CQl7Ci0JCSAgLyogV2UgbmVlZCB0byB1bnJlZ2lzdGVyIGFzIGEgd2FpdGluZyB3cml0ZXIuICBJ ZiB3ZSBhcmUgdGhlCi0JCSAgICAgbGFzdCB3cml0ZXIgYW5kIHdyaXRlci0td3JpdGVyIGhhbmQt b3ZlciBpcyBhdmFpbGFibGUsCi0JCSAgICAgd2UgbXVzdCBtYWtlIHVzZSBvZiBpdCBiZWNhdXNl IG5vYm9keSBlbHNlIHdpbGwgcmVzZXQKLQkJICAgICBXUkxPQ0tFRCBvdGhlcndpc2UuICAoSWYg d2UgdXNlIGl0LCB3ZSBzaW1wbHkgcHJldGVuZAotCQkgICAgIHRoYXQgdGhpcyBoYXBwZW5lZCBi ZWZvcmUgdGhlIHRpbWVvdXQ7IHNlZQotCQkgICAgIHB0aHJlYWRfcndsb2NrX3JkbG9ja19mdWxs IGZvciB0aGUgZnVsbCByZWFzb25pbmcuKQotCQkgICAgIEFsc28gc2VlIHRoZSBzaW1pbGFyIGNv ZGUgYWJvdmUuICAqLwotCQkgIHVuc2lnbmVkIGludCB3Ci0JCSAgICA9IGF0b21pY19sb2FkX3Jl bGF4ZWQgKCZyd2xvY2stPl9fZGF0YS5fX3dyaXRlcnMpOwotCQkgIHdoaWxlICghYXRvbWljX2Nv bXBhcmVfZXhjaGFuZ2Vfd2Vha19hY3F1aXJlCi0JCQkgKCZyd2xvY2stPl9fZGF0YS5fX3dyaXRl cnMsICZ3LAotCQkJICAodyA9PSBQVEhSRUFEX1JXTE9DS19XUkhBTkRPVkVSICsgMSA/IDAgOiB3 IC0gMSkpKQotCQkgICAgewotCQkgICAgICAvKiBUT0RPIEJhY2stb2ZmLiAgKi8KLQkJICAgIH0K LQkJICBpZiAodyA9PSBQVEhSRUFEX1JXTE9DS19XUkhBTkRPVkVSICsgMSkKLQkJICAgIHsKLQkJ ICAgICAgLyogV2UgbXVzdCBjb250aW51ZSBhcyBwcmltYXJ5IHdyaXRlci4gIFNlZSBhYm92ZS4g ICovCi0JCSAgICAgIHIgPSBhdG9taWNfbG9hZF9yZWxheGVkICgmcndsb2NrLT5fX2RhdGEuX19y ZWFkZXJzKTsKLQkJICAgICAgYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkgICAgICAvKiBXZSBjbGVh bmVkIHVwIGFuZCBjYW5ub3QgaGF2ZSBzdG9sZW4gYW5vdGhlciB3YWl0aW5nIHdyaXRlcidzCi0J CSBmdXRleCB3YWtlLXVwLCBzbyBqdXN0IHJldHVybi4gICovCi0JICAgICAgcmV0dXJuIGVycjsK LQkgICAgfQotCSAgLyogSWYgd2UgZ290IGludGVycnVwdGVkIChFSU5UUikgb3IgdGhlIGZ1dGV4 IHdvcmQgZG9lcyBub3QgaGF2ZSB0aGUKLQkgICAgIGV4cGVjdGVkIHZhbHVlIChFQUdBSU4pLCBy ZXRyeSBhZnRlciByZWxvYWRpbmcgX19yZWFkZXJzLiAgKi8KLQkgIHIgPSBhdG9taWNfbG9hZF9y ZWxheGVkICgmcndsb2NrLT5fX2RhdGEuX19yZWFkZXJzKTsKLQl9CisgICAgICAgIHsKKyAgICAg ICAgICAvKiBUT0RPIFNwaW4gdW50aWwgV1JMT0NLRUQgaXMgMCBiZWZvcmUgdHJ5aW5nIHRoZSBD QVMgYmVsb3cuCisgICAgICAgICAgICAgQnV0IHBheSBhdHRlbnRpb24gdG8gbm90IGRlbGF5IHRy eWluZyB3cml0ZXItLXdyaXRlciBoYW5kLW92ZXIKKyAgICAgICAgICAgICBmb3IgdG9vIGxvbmcg KHdoaWNoIHdlIG11c3QgdHJ5IGV2ZW50dWFsbHkgYW55d2F5KS4gICovCisgICAgICAgICAgaWYg KChyICYgUFRIUkVBRF9SV0xPQ0tfV1JMT0NLRUQpID09IDApCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgIC8qIFRyeSB0byBiZWNvbWUgdGhlIHByaW1hcnkgd3JpdGVyIG9yIHJldHJ5LiAg QWNxdWlyZSBNTyBhcyBpbgorICAgICAgICAgICAgICAgICB0aGUgZmV0Y2hfb3IgYWJvdmUuICAq LworICAgICAgICAgICAgICBpZiAoYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19hY3F1aXJl ICgKKyAgICAgICAgICAgICAgICAgICAgICAmcndsb2NrLT5fX2RhdGEuX19yZWFkZXJzLCAmciwK KyAgICAgICAgICAgICAgICAgICAgICByIHwgUFRIUkVBRF9SV0xPQ0tfV1JMT0NLRUQpKQorICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmIChwcmVmZXJfd3JpdGVyKQorICAg ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgLyogVW5yZWdpc3RlciBh cyBhIHdhaXRpbmcgd3JpdGVyLiAgTm90ZSB0aGF0IGJlY2F1c2Ugd2UKKyAgICAgICAgICAgICAg ICAgICAgICAgICBhY3F1aXJlZCBXUkxPQ0tFRCwgV1JIQU5ET1ZFUiB3aWxsIG5vdCBiZSBzZXQu CisgICAgICAgICAgICAgICAgICAgICAgICAgQWNxdWlyZSBNTyBvbiB0aGUgQ0FTIGFib3ZlIGVu c3VyZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJpbmcgaGFwcGVu cyBhZnRlciB0aGUgcHJldmlvdXMgd3JpdGVyOworICAgICAgICAgICAgICAgICAgICAgICAgIHRo aXMgc29ydHMgdGhlIGFjY2Vzc2VzIHRvIF9fd3JpdGVycyBieSBhbGwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBwcmltYXJ5IHdyaXRlcnMgaW4gYSB1c2VmdWwgd2F5IChlLmcuLCBhbnkgb3Ro ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5IHdyaXRlciBhY3F1aXJpbmcgYWZ0 ZXIgdXMgb3IgZ2V0dGluZyBpdCBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgdXMgdGhy b3VnaCBXUkhBTkRPVkVSIHdpbGwgc2VlIGJvdGggb3VyIGNoYW5nZXMgdG8KKyAgICAgICAgICAg ICAgICAgICAgICAgICBfX3dyaXRlcnMpLgorICAgICAgICAgICAgICAgICAgICAgICAgID8/PyBQ ZXJoYXBzIHRoaXMgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IKKyAgICAgICAgICAgICAg ICAgICAgICAgICByZWFzb25zIHdlIGRvIG5vdCB5ZXQga25vdyBvZi4gICovCisgICAgICAgICAg ICAgICAgICAgICAgYXRvbWljX2ZldGNoX2FkZF9yZWxheGVkICgmcndsb2NrLT5fX2RhdGEuX193 cml0ZXJzLCAtMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgLyogUmV0cnkgaWYgdGhlIENB UyBmYWlscyAociB3aWxsIGhhdmUgYmVlbiB1cGRhdGVkKS4gICovCisgICAgICAgICAgICAgIGNv bnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgIC8qIElmIHdyaXRlci0td3JpdGVyIGhh bmQtb3ZlciBpcyBhdmFpbGFibGUsIHRyeSB0byBiZWNvbWUgdGhlCisgICAgICAgICAgICAgcHJp bWFyeSB3cml0ZXIgdGhpcyB3YXkgYnkgZ3JhYmJpbmcgdGhlIFdSSEFORE9WRVIgdG9rZW4uICBJ ZiB3ZQorICAgICAgICAgICAgIHN1Y2NlZWQsIHdlIG93biBXUkxPQ0tFRC4gICovCisgICAgICAg ICAgaWYgKHByZWZlcl93cml0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHVuc2ln bmVkIGludCB3ID0gYXRvbWljX2xvYWRfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fd3JpdGVy cyk7CisgICAgICAgICAgICAgIGlmICgodyAmIFBUSFJFQURfUldMT0NLX1dSSEFORE9WRVIpICE9 IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLyogQWNxdWlyZSBNTyBp cyByZXF1aXJlZCBoZXJlIHNvIHRoYXQgd2Ugc3luY2hyb25pemUgd2l0aAorICAgICAgICAgICAg ICAgICAgICAgdGhlIHdyaXRlciB0aGF0IGhhbmRlZCBvdmVyIFdSTE9DS0VELiAgV2UgYWxzbyBu ZWVkIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcmVsb2FkIG9mIF9fcmVhZGVy cyBiZWxvdyBiZWNhdXNlIG91ciB2aWV3IG9mCisgICAgICAgICAgICAgICAgICAgICBfX3JlYWRl cnMgbXVzdCBiZSBhdCBsZWFzdCBhcyByZWNlbnQgYXMgdGhlIHZpZXcgb2YgdGhlCisgICAgICAg ICAgICAgICAgICAgICB3cml0ZXIgdGhhdCBoYW5kZWQgb3ZlciBXUkxPQ0tFRDsgd2UgbXVzdCBh dm9pZCBhbiBBQkEKKyAgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggV1JIQU5ET1ZFUiwgd2hp Y2ggY291bGQsIGZvciBleGFtcGxlLCBsZWFkIHRvIHVzCisgICAgICAgICAgICAgICAgICAgICBh c3N1bWluZyB3ZSBhcmUgc3RpbGwgaW4gYSB3cml0ZSBwaGFzZSB3aGVuIGluIGZhY3Qgd2UKKyAg ICAgICAgICAgICAgICAgICAgIGFyZSBub3QuICAqLworICAgICAgICAgICAgICAgICAgaWYgKGF0 b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfYWNxdWlyZSAoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICZyd2xvY2stPl9fZGF0YS5fX3dyaXRlcnMsICZ3LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAodyAtIFBUSFJFQURfUldMT0NLX1dSSEFORE9WRVIgLSAxKSkpCisgICAgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAvKiBSZWxvYWQgc28gb3VyIHZpZXcg aXMgY29uc2lzdGVudCB3aXRoIHRoZSB2aWV3IG9mCisgICAgICAgICAgICAgICAgICAgICAgICAg dGhlIHByZXZpb3VzIG93bmVyIG9mIFdSTE9DS0VELiAgU2VlIGFib3ZlLiAgKi8KKyAgICAgICAg ICAgICAgICAgICAgICByID0gYXRvbWljX2xvYWRfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9f cmVhZGVycyk7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgIC8qIFdlIGRvIG5vdCBuZWVkIHRvIHJlbG9hZCBfX3Jl YWRlcnMgaGVyZS4gIFdlIHNob3VsZCB0cnkKKyAgICAgICAgICAgICAgICAgICAgIHRvIHBlcmZv cm0gd3JpdGVyLS13cml0ZXIgaGFuZC1vdmVyIGlmIHBvc3NpYmxlOyBpZiBpdAorICAgICAgICAg ICAgICAgICAgICAgaXMgbm90IHBvc3NpYmxlIGFueW1vcmUsIHdlIHdpbGwgcmVsb2FkIF9fcmVh ZGVycworICAgICAgICAgICAgICAgICAgICAgZWxzZXdoZXJlIGluIHRoaXMgbG9vcC4gICovCisg ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgICAgLyogV2UgZGlkIG5vdCBhY3F1aXJlIFdSTE9DS0VEIG5vciB3ZXJlIGFi bGUgdG8gdXNlIHdyaXRlci0td3JpdGVyCisgICAgICAgICAgICAgaGFuZC1vdmVyLCBzbyB3ZSBi bG9jayBvbiBfX3dyaXRlcnNfZnV0ZXguICAqLworICAgICAgICAgIGludCBwcml2YXRlID0gX19w dGhyZWFkX3J3bG9ja19nZXRfcHJpdmF0ZSAocndsb2NrKTsKKyAgICAgICAgICB1bnNpZ25lZCBp bnQgd2YKKyAgICAgICAgICAgICAgPSBhdG9taWNfbG9hZF9yZWxheGVkICgmcndsb2NrLT5fX2Rh dGEuX193cml0ZXJzX2Z1dGV4KTsKKyAgICAgICAgICBpZiAoKCh3ZiAmIH4odW5zaWduZWQgaW50 KSBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VEKSAhPSAxKQorICAgICAgICAgICAgICB8fCAoKHdm ICE9ICgxIHwgUFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNFRCkpCisgICAgICAgICAgICAgICAgICAm JiAoIWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfcmVsYXhlZCAoCisgICAgICAgICAgICAg ICAgICAgICAgJnJ3bG9jay0+X19kYXRhLl9fd3JpdGVyc19mdXRleCwgJndmLAorICAgICAgICAg ICAgICAgICAgICAgIDEgfCBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VEKSkpKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICAvKiBJZiB3ZSBjYW5ub3QgYmxvY2sgb24gX193cml0ZXJzX2Z1 dGV4IGJlY2F1c2UgdGhlcmUgaXMgbm8KKyAgICAgICAgICAgICAgICAgcHJpbWFyeSB3cml0ZXIs IG9yIHdlIGNhbm5vdCBzZXQgUFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNFRCwKKyAgICAgICAgICAg ICAgICAgd2UgcmV0cnkuICBXZSBtdXN0IHJlbG9hZCBfX3JlYWRlcnMgaGVyZSBpbiBjYXNlIHdl IGNhbm5vdAorICAgICAgICAgICAgICAgICBibG9jayBvbiBfX3dyaXRlcnNfZnV0ZXggc28gdGhh dCB3ZSBjYW4gYmVjb21lIHRoZSBwcmltYXJ5CisgICAgICAgICAgICAgICAgIHdyaXRlciBhbmQg YXJlIG5vdCBzdHVjayBpbiBhIGxvb3AgdGhhdCBqdXN0IGNvbnRpbnVvdXNseQorICAgICAgICAg ICAgICAgICBmYWlscyB0byBibG9jayBvbiBfX3dyaXRlcnNfZnV0ZXguICAqLworICAgICAgICAg ICAgICByID0gYXRvbWljX2xvYWRfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fcmVhZGVycyk7 CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgIC8qIFdl IHNldCB0aGUgZmxhZyB0aGF0IHNpZ25hbHMgdGhhdCB0aGUgZnV0ZXggaXMgdXNlZCwgb3Igd2Ug Y291bGQKKyAgICAgICAgICAgICBoYXZlIHNldCBpdCBpZiB3ZSBoYWQgYmVlbiBmYXN0ZXIgdGhh biBvdGhlciB3YWl0ZXJzLiAgQXMgYQorICAgICAgICAgICAgIHJlc3VsdCwgd2UgbWF5IHNoYXJl IHRoZSBmbGFnIHdpdGggYW4gdW5rbm93biBudW1iZXIgb2Ygb3RoZXIKKyAgICAgICAgICAgICB3 cml0ZXJzLiAgVGhlcmVmb3JlLCB3ZSBtdXN0IGtlZXAgdGhpcyBmbGFnIHNldCB3aGVuIHdlIGFj cXVpcmUKKyAgICAgICAgICAgICB0aGUgbG9jay4gIFdlIGRvIG5vdCBuZWVkIHRvIGRvIHRoaXMg d2hlbiB3ZSBkbyBub3QgcmVhY2ggdGhpcworICAgICAgICAgICAgIHBvaW50IGhlcmUgYmVjYXVz ZSB0aGVuIHdlIGFyZSBub3QgcGFydCBvZiB0aGUgZ3JvdXAgdGhhdCBtYXkKKyAgICAgICAgICAg ICBzaGFyZSB0aGUgZmxhZywgYW5kIGFub3RoZXIgd3JpdGVyIHdpbGwgd2FrZSBvbmUgb2YgdGhl IHdyaXRlcnMKKyAgICAgICAgICAgICBpbiB0aGlzIGdyb3VwLiAgKi8KKyAgICAgICAgICBtYXlf c2hhcmVfZnV0ZXhfdXNlZF9mbGFnID0gdHJ1ZTsKKyAgICAgICAgICBpbnQgZXJyID0gX19mdXRl eF9hYnN0aW1lZF93YWl0NjQgKCZyd2xvY2stPl9fZGF0YS5fX3dyaXRlcnNfZnV0ZXgsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIHwgUFRIUkVBRF9SV0xP Q0tfRlVURVhfVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNsb2NraWQsIGFic3RpbWUsIHByaXZhdGUpOworICAgICAgICAgIGlmIChlcnIgPT0gRVRJ TUVET1VUIHx8IGVyciA9PSBFT1ZFUkZMT1cpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg IGlmIChwcmVmZXJfd3JpdGVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg IC8qIFdlIG5lZWQgdG8gdW5yZWdpc3RlciBhcyBhIHdhaXRpbmcgd3JpdGVyLiAgSWYgd2UgYXJl IHRoZQorICAgICAgICAgICAgICAgICAgICAgbGFzdCB3cml0ZXIgYW5kIHdyaXRlci0td3JpdGVy IGhhbmQtb3ZlciBpcyBhdmFpbGFibGUsCisgICAgICAgICAgICAgICAgICAgICB3ZSBtdXN0IG1h a2UgdXNlIG9mIGl0IGJlY2F1c2Ugbm9ib2R5IGVsc2Ugd2lsbCByZXNldAorICAgICAgICAgICAg ICAgICAgICAgV1JMT0NLRUQgb3RoZXJ3aXNlLiAgKElmIHdlIHVzZSBpdCwgd2Ugc2ltcGx5IHBy ZXRlbmQKKyAgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWZvcmUgdGhl IHRpbWVvdXQ7IHNlZQorICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9yd2xvY2tfcmRsb2Nr X2Z1bGwgZm9yIHRoZSBmdWxsIHJlYXNvbmluZy4pCisgICAgICAgICAgICAgICAgICAgICBBbHNv IHNlZSB0aGUgc2ltaWxhciBjb2RlIGFib3ZlLiAgKi8KKyAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCB3CisgICAgICAgICAgICAgICAgICAgICAgPSBhdG9taWNfbG9hZF9yZWxheGVkICgm cndsb2NrLT5fX2RhdGEuX193cml0ZXJzKTsKKyAgICAgICAgICAgICAgICAgIHdoaWxlICghYXRv bWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19hY3F1aXJlICgKKyAgICAgICAgICAgICAgICAgICAg ICAmcndsb2NrLT5fX2RhdGEuX193cml0ZXJzLCAmdywKKyAgICAgICAgICAgICAgICAgICAgICAo dyA9PSBQVEhSRUFEX1JXTE9DS19XUkhBTkRPVkVSICsgMSA/IDAgOiB3IC0gMSkpKQorICAgICAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgLyogVE9ETyBCYWNrLW9mZi4g ICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGlmICh3ID09IFBU SFJFQURfUldMT0NLX1dSSEFORE9WRVIgKyAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgICAgLyogV2UgbXVzdCBjb250aW51ZSBhcyBwcmltYXJ5IHdyaXRlci4g IFNlZSBhYm92ZS4gICovCisgICAgICAgICAgICAgICAgICAgICAgciA9IGF0b21pY19sb2FkX3Jl bGF4ZWQgKCZyd2xvY2stPl9fZGF0YS5fX3JlYWRlcnMpOworICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAvKiBXZSBjbGVhbmVkIHVwIGFuZCBjYW5ub3QgaGF2ZSBzdG9sZW4gYW5vdGhlciB3 YWl0aW5nIHdyaXRlcidzCisgICAgICAgICAgICAgICAgIGZ1dGV4IHdha2UtdXAsIHNvIGp1c3Qg cmV0dXJuLiAgKi8KKyAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAvKiBJZiB3ZSBnb3QgaW50ZXJydXB0ZWQgKEVJTlRSKSBvciB0aGUgZnV0ZXggd29y ZCBkb2VzIG5vdCBoYXZlIHRoZQorICAgICAgICAgICAgIGV4cGVjdGVkIHZhbHVlIChFQUdBSU4p LCByZXRyeSBhZnRlciByZWxvYWRpbmcgX19yZWFkZXJzLiAgKi8KKyAgICAgICAgICByID0gYXRv bWljX2xvYWRfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fcmVhZGVycyk7CisgICAgICAgIH0K ICAgICAgIC8qIE91ciBzbmFwc2hvdCBvZiBfX3JlYWRlcnMgaXMgdXAtdG8tZGF0ZSBhdCB0aGlz IHBvaW50IGJlY2F1c2Ugd2UKLQkgZWl0aGVyIHNldCBXUkxPQ0tFRCB1c2luZyBhIENBUyAoYW5k IHVwZGF0ZSByIGFjY29yZGluZ2x5IGJlbG93LAotCSB3aGljaCB3YXMgdXNlZCBhcyBleHBlY3Rl ZCB2YWx1ZSBmb3IgdGhlIENBUykgb3IgZ290IFdSTE9DS0VEIGZyb20KLQkgYW5vdGhlciB3cml0 ZXIgd2hvc2Ugc25hcHNob3Qgb2YgX19yZWFkZXJzIHdlIGluaGVyaXQuICAqLworICAgICAgICAg ZWl0aGVyIHNldCBXUkxPQ0tFRCB1c2luZyBhIENBUyAoYW5kIHVwZGF0ZSByIGFjY29yZGluZ2x5 IGJlbG93LAorICAgICAgICAgd2hpY2ggd2FzIHVzZWQgYXMgZXhwZWN0ZWQgdmFsdWUgZm9yIHRo ZSBDQVMpIG9yIGdvdCBXUkxPQ0tFRCBmcm9tCisgICAgICAgICBhbm90aGVyIHdyaXRlciB3aG9z ZSBzbmFwc2hvdCBvZiBfX3JlYWRlcnMgd2UgaW5oZXJpdC4gICovCiAgICAgICByIHw9IFBUSFJF QURfUldMT0NLX1dSTE9DS0VEOwogICAgIH0KIApAQCAtNzc1LDkgKzc4MCw5IEBAIF9fcHRocmVh ZF9yd2xvY2tfd3Jsb2NrX2Z1bGw2NCAocHRocmVhZF9yd2xvY2tfdCAqcndsb2NrLCBjbG9ja2lk X3QgY2xvY2tpZCwKICAgICAgTU8gaXMgc3VmZmljaWVudCBmb3IgZnV0ZXggd29yZHM7IGFjcXVp cmUgTU8gb24gdGhlIHByZXZpb3VzCiAgICAgIG1vZGlmaWNhdGlvbnMgb2YgX19yZWFkZXJzIGVu c3VyZXMgdGhhdCB0aGlzIHN0b3JlIGhhcHBlbnMgYWZ0ZXIgdGhlCiAgICAgIHN0b3JlIG9mIHZh bHVlIDAgYnkgdGhlIHByZXZpb3VzIHByaW1hcnkgd3JpdGVyLiAgKi8KLSAgYXRvbWljX3N0b3Jl X3JlbGF4ZWQgKCZyd2xvY2stPl9fZGF0YS5fX3dyaXRlcnNfZnV0ZXgsCi0JCQkxIHwgKG1heV9z aGFyZV9mdXRleF91c2VkX2ZsYWcKLQkJCSAgICAgPyBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VE IDogMCkpOworICBhdG9taWNfc3RvcmVfcmVsYXhlZCAoCisgICAgICAmcndsb2NrLT5fX2RhdGEu X193cml0ZXJzX2Z1dGV4LAorICAgICAgMSB8IChtYXlfc2hhcmVfZnV0ZXhfdXNlZF9mbGFnID8g UFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNFRCA6IDApKTsKIAogICAvKiBJZiB3ZSBhcmUgaW4gYSB3 cml0ZSBwaGFzZSwgd2UgaGF2ZSBhY3F1aXJlZCB0aGUgbG9jay4gICovCiAgIGlmICgociAmIFBU SFJFQURfUldMT0NLX1dSUEhBU0UpICE9IDApCkBAIC03ODYsMjMgKzc5MSwyMyBAQCBfX3B0aHJl YWRfcndsb2NrX3dybG9ja19mdWxsNjQgKHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaywgY2xvY2tp ZF90IGNsb2NraWQsCiAgIC8qIElmIHdlIGFyZSBpbiBhIHJlYWQgcGhhc2UgYW5kIHRoZXJlIGFy ZSBubyByZWFkZXJzLCB0cnkgdG8gc3RhcnQgYSB3cml0ZQogICAgICBwaGFzZS4gICovCiAgIHdo aWxlICgociAmIFBUSFJFQURfUldMT0NLX1dSUEhBU0UpID09IDAKLQkgJiYgKHIgPj4gUFRIUkVB RF9SV0xPQ0tfUkVBREVSX1NISUZUKSA9PSAwKQorICAgICAgICAgJiYgKHIgPj4gUFRIUkVBRF9S V0xPQ0tfUkVBREVSX1NISUZUKSA9PSAwKQogICAgIHsKICAgICAgIC8qIEFjcXVpcmUgTU8gc28g dGhhdCB3ZSBzeW5jaHJvbml6ZSB3aXRoIHByaW9yIHdyaXRlcnMgYW5kIGRvCi0JIG5vdCBpbnRl cmZlcmUgd2l0aCB0aGVpciB1cGRhdGVzIHRvIF9fd3JpdGVyc19mdXRleCwgYXMgd2VsbAotCSBh cyByZWdhcmRpbmcgcHJpb3IgcmVhZGVycyBhbmQgdGhlaXIgdXBkYXRlcyB0byBfX3dycGhhc2Vf ZnV0ZXgsCi0JIHJlc3BlY3RpdmVseS4gICovCi0gICAgICBpZiAoYXRvbWljX2NvbXBhcmVfZXhj aGFuZ2Vfd2Vha19hY3F1aXJlICgmcndsb2NrLT5fX2RhdGEuX19yZWFkZXJzLAotCQkJCQkJJnIs IHIgfCBQVEhSRUFEX1JXTE9DS19XUlBIQVNFKSkKLQl7Ci0JICAvKiBXZSBoYXZlIHN0YXJ0ZWQg YSB3cml0ZSBwaGFzZSwgc28gbmVlZCB0byBlbmFibGUgcmVhZGVycyB0byB3YWl0LgotCSAgICAg U2VlIHRoZSBzaW1pbGFyIGNhc2UgaW4gX19wdGhyZWFkX3J3bG9ja19yZGxvY2tfZnVsbC4gIFVu bGlrZSBpbgotCSAgICAgdGhhdCBzaW1pbGFyIGNhc2UsIHdlIGFyZSB0aGUgKG9ubHkpIHByaW1h cnkgd3JpdGVyIGFuZCBzbyBkbwotCSAgICAgbm90IG5lZWQgdG8gd2FrZSBhbm90aGVyIHdyaXRl ci4gICovCi0JICBhdG9taWNfc3RvcmVfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fd3JwaGFz ZV9mdXRleCwgMSk7Ci0KLQkgIGdvdG8gZG9uZTsKLQl9CisgICAgICAgICBub3QgaW50ZXJmZXJl IHdpdGggdGhlaXIgdXBkYXRlcyB0byBfX3dyaXRlcnNfZnV0ZXgsIGFzIHdlbGwKKyAgICAgICAg IGFzIHJlZ2FyZGluZyBwcmlvciByZWFkZXJzIGFuZCB0aGVpciB1cGRhdGVzIHRvIF9fd3JwaGFz ZV9mdXRleCwKKyAgICAgICAgIHJlc3BlY3RpdmVseS4gICovCisgICAgICBpZiAoYXRvbWljX2Nv bXBhcmVfZXhjaGFuZ2Vfd2Vha19hY3F1aXJlICgmcndsb2NrLT5fX2RhdGEuX19yZWFkZXJzLCAm ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgfCBQ VEhSRUFEX1JXTE9DS19XUlBIQVNFKSkKKyAgICAgICAgeworICAgICAgICAgIC8qIFdlIGhhdmUg c3RhcnRlZCBhIHdyaXRlIHBoYXNlLCBzbyBuZWVkIHRvIGVuYWJsZSByZWFkZXJzIHRvIHdhaXQu CisgICAgICAgICAgICAgU2VlIHRoZSBzaW1pbGFyIGNhc2UgaW4gX19wdGhyZWFkX3J3bG9ja19y ZGxvY2tfZnVsbC4gIFVubGlrZSBpbgorICAgICAgICAgICAgIHRoYXQgc2ltaWxhciBjYXNlLCB3 ZSBhcmUgdGhlIChvbmx5KSBwcmltYXJ5IHdyaXRlciBhbmQgc28gZG8KKyAgICAgICAgICAgICBu b3QgbmVlZCB0byB3YWtlIGFub3RoZXIgd3JpdGVyLiAgKi8KKyAgICAgICAgICBhdG9taWNfc3Rv cmVfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fd3JwaGFzZV9mdXRleCwgMSk7CisKKyAgICAg ICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KICAgICAgIC8qIFRPRE8gQmFjay1vZmYuICAqLwog ICAgIH0KIApAQCAtODE4LDEzMyArODIzLDEzNiBAQCBfX3B0aHJlYWRfcndsb2NrX3dybG9ja19m dWxsNjQgKHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaywgY2xvY2tpZF90IGNsb2NraWQsCiAgIGZv ciAoOzspCiAgICAgewogICAgICAgd2hpbGUgKCgod3BmID0gYXRvbWljX2xvYWRfcmVsYXhlZCAo JnJ3bG9jay0+X19kYXRhLl9fd3JwaGFzZV9mdXRleCkpCi0JICAgICAgfCBQVEhSRUFEX1JXTE9D S19GVVRFWF9VU0VEKSA9PSBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VEKQotCXsKLQkgIGludCBw cml2YXRlID0gX19wdGhyZWFkX3J3bG9ja19nZXRfcHJpdmF0ZSAocndsb2NrKTsKLQkgIGlmICgo d3BmICYgUFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNFRCkgPT0gMAotCSAgICAgICYmICghYXRvbWlj X2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19yZWxheGVkCi0JCSAgKCZyd2xvY2stPl9fZGF0YS5fX3dy cGhhc2VfZnV0ZXgsICZ3cGYsCi0JCSAgIFBUSFJFQURfUldMT0NLX0ZVVEVYX1VTRUQpKSkKLQkg ICAgY29udGludWU7Ci0JICBpbnQgZXJyID0gX19mdXRleF9hYnN0aW1lZF93YWl0NjQgKCZyd2xv Y2stPl9fZGF0YS5fX3dycGhhc2VfZnV0ZXgsCi0JCQkJCSAgICAgUFRIUkVBRF9SV0xPQ0tfRlVU RVhfVVNFRCwKLQkJCQkJICAgICBjbG9ja2lkLCBhYnN0aW1lLCBwcml2YXRlKTsKLQkgIGlmIChl cnIgPT0gRVRJTUVET1VUIHx8IGVyciA9PSBFT1ZFUkZMT1cpCi0JICAgIHsKLQkgICAgICBpZiAo cndsb2NrLT5fX2RhdGEuX19mbGFncyAhPSBQVEhSRUFEX1JXTE9DS19QUkVGRVJfUkVBREVSX05Q KQotCQl7Ci0JCSAgLyogV2UgdHJ5IHdyaXRlci0td3JpdGVyIGhhbmQtb3Zlci4gICovCi0JCSAg dW5zaWduZWQgaW50IHcKLQkJICAgID0gYXRvbWljX2xvYWRfcmVsYXhlZCAoJnJ3bG9jay0+X19k YXRhLl9fd3JpdGVycyk7Ci0JCSAgaWYgKHcgIT0gMCkKLQkJICAgIHsKLQkJICAgICAgLyogV2Ug YXJlIGFib3V0IHRvIGhhbmQgb3ZlciBXUkxPQ0tFRCwgc28gd2UgbXVzdAotCQkJIHJlbGVhc2Ug X193cml0ZXJzX2Z1dGV4IHRvbzsgb3RoZXJ3aXNlLCB3ZSdkIGhhdmUKLQkJCSBhIHBlbmRpbmcg c3RvcmUsIHdoaWNoIGNvdWxkIGF0IGxlYXN0IHByZXZlbnQKLQkJCSBvdGhlciB0aHJlYWRzIGZy b20gd2FpdGluZyB1c2luZyB0aGUgZnV0ZXgKLQkJCSBiZWNhdXNlIGl0IGNvdWxkIGludGVybGVh dmUgd2l0aCB0aGUgc3RvcmVzCi0JCQkgYnkgc3Vic2VxdWVudCB3cml0ZXJzLiAgSW4gdHVybiwg dGhpcyBtZWFucyB0aGF0Ci0JCQkgd2UgaGF2ZSB0byBjbGVhbiB1cCB3aGVuIHdlIGRvIG5vdCBo YW5kIG92ZXIKLQkJCSBXUkxPQ0tFRC4KLQkJCSBSZWxlYXNlIE1PIHNvIHRoYXQgYW5vdGhlciB3 cml0ZXIgdGhhdCBnZXRzCi0JCQkgV1JMT0NLRUQgZnJvbSB1cyBjYW4gdGFrZSBvdmVyIG91ciB2 aWV3IG9mCi0JCQkgX19yZWFkZXJzLiAgKi8KLQkJICAgICAgdW5zaWduZWQgaW50IHdmCi0JCQk9 IGF0b21pY19leGNoYW5nZV9yZWxheGVkICgmcndsb2NrLT5fX2RhdGEuX193cml0ZXJzX2Z1dGV4 LCAwKTsKLQkJICAgICAgd2hpbGUgKHcgIT0gMCkKLQkJCXsKLQkJCSAgaWYgKGF0b21pY19jb21w YXJlX2V4Y2hhbmdlX3dlYWtfcmVsZWFzZQotCQkJICAgICAgKCZyd2xvY2stPl9fZGF0YS5fX3dy aXRlcnMsICZ3LAotCQkJICAgICAgIHcgfCBQVEhSRUFEX1JXTE9DS19XUkhBTkRPVkVSKSkKLQkJ CSAgICB7Ci0JCQkgICAgICAvKiBXYWtlIG90aGVyIHdyaXRlcnMuICAqLwotCQkJICAgICAgaWYg KCh3ZiAmIFBUSFJFQURfUldMT0NLX0ZVVEVYX1VTRUQpICE9IDApCi0JCQkJZnV0ZXhfd2FrZSAo JnJ3bG9jay0+X19kYXRhLl9fd3JpdGVyc19mdXRleCwKLQkJCQkJICAgIDEsIHByaXZhdGUpOwot CQkJICAgICAgcmV0dXJuIGVycjsKLQkJCSAgICB9Ci0JCQkgIC8qIFRPRE8gQmFjay1vZmYuICAq LwotCQkJfQotCQkgICAgICAvKiBXZSBzdGlsbCBvd24gV1JMT0NLRUQgYW5kIHNvbWVvbmUgZWxz ZSBtaWdodCBzZXQKLQkJCSBhIHdyaXRlIHBoYXNlIGNvbmN1cnJlbnRseSwgc28gZW5hYmxlIHdh aXRpbmcKLQkJCSBhZ2Fpbi4gIE1ha2Ugc3VyZSB3ZSBkb24ndCBsb29zZSB0aGUgZmxhZyB0aGF0 Ci0JCQkgc2lnbmFscyB3aGV0aGVyIHRoZXJlIGFyZSB0aHJlYWRzIHdhaXRpbmcgb24KLQkJCSB0 aGlzIGZ1dGV4LiAgKi8KLQkJICAgICAgYXRvbWljX3N0b3JlX3JlbGF4ZWQgKCZyd2xvY2stPl9f ZGF0YS5fX3dyaXRlcnNfZnV0ZXgsIHdmKTsKLQkJICAgIH0KLQkJfQotCSAgICAgIC8qIElmIHdl IHRpbWVkIG91dCBhbmQgd2UgYXJlIG5vdCBpbiBhIHdyaXRlIHBoYXNlLCB3ZSBjYW4KLQkJIGp1 c3Qgc3RvcCBiZWluZyBhIHByaW1hcnkgd3JpdGVyLiAgT3RoZXJ3aXNlLCB3ZSBqdXN0Ci0JCSBh Y3F1aXJlIHRoZSBsb2NrLiAgKi8KLQkgICAgICByID0gYXRvbWljX2xvYWRfcmVsYXhlZCAoJnJ3 bG9jay0+X19kYXRhLl9fcmVhZGVycyk7Ci0JICAgICAgaWYgKChyICYgUFRIUkVBRF9SV0xPQ0tf V1JQSEFTRSkgPT0gMCkKLQkJewotCQkgIC8qIFdlIGFyZSBhYm91dCB0byByZWxlYXNlIFdSTE9D S0VELCBzbyB3ZSBtdXN0IHJlbGVhc2UKLQkJICAgICBfX3dyaXRlcnNfZnV0ZXggdG9vOyBzZWUg dGhlIGhhbmRsaW5nIG9mCi0JCSAgICAgd3JpdGVyLS13cml0ZXIgaGFuZC1vdmVyIGFib3ZlLiAg Ki8KLQkJICB1bnNpZ25lZCBpbnQgd2YKLQkJICAgID0gYXRvbWljX2V4Y2hhbmdlX3JlbGF4ZWQg KCZyd2xvY2stPl9fZGF0YS5fX3dyaXRlcnNfZnV0ZXgsIDApOwotCQkgIHdoaWxlICgociAmIFBU SFJFQURfUldMT0NLX1dSUEhBU0UpID09IDApCi0JCSAgICB7Ci0JCSAgICAgIC8qIFdoaWxlIHdl IGRvbid0IG5lZWQgdG8gbWFrZSBhbnl0aGluZyBmcm9tIGEKLQkJCSBjYWxsZXIncyBjcml0aWNh bCBzZWN0aW9uIHZpc2libGUgdG8gb3RoZXIKLQkJCSB0aHJlYWRzLCB3ZSBuZWVkIHRvIGVuc3Vy ZSB0aGF0IG91ciBjaGFuZ2VzIHRvCi0JCQkgX193cml0ZXJzX2Z1dGV4IGFyZSBwcm9wZXJseSBv cmRlcmVkLgotCQkJIFRoZXJlZm9yZSwgdXNlIHJlbGVhc2UgTU8gdG8gc3luY2hyb25pemUgd2l0 aAotCQkJIHN1YnNlcXVlbnQgcHJpbWFyeSB3cml0ZXJzLiAgQWxzbyB3YWtlIHVwIGFueQotCQkJ IHdhaXRpbmcgcmVhZGVycyBhcyB0aGV5IGFyZSB3YWl0aW5nIGJlY2F1c2Ugb2YKLQkJCSB1cy4g ICovCi0JCSAgICAgIGlmIChhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX3JlbGVhc2UKLQkJ CSAgKCZyd2xvY2stPl9fZGF0YS5fX3JlYWRlcnMsICZyLAotCQkJICAgKHIgXiBQVEhSRUFEX1JX TE9DS19XUkxPQ0tFRCkKLQkJCSAgICYgfih1bnNpZ25lZCBpbnQpIFBUSFJFQURfUldMT0NLX1JX QUlUSU5HKSkKLQkJCXsKLQkJCSAgLyogV2FrZSBvdGhlciB3cml0ZXJzLiAgKi8KLQkJCSAgaWYg KCh3ZiAmIFBUSFJFQURfUldMT0NLX0ZVVEVYX1VTRUQpICE9IDApCi0JCQkgICAgZnV0ZXhfd2Fr ZSAoJnJ3bG9jay0+X19kYXRhLl9fd3JpdGVyc19mdXRleCwKLQkJCQkJMSwgcHJpdmF0ZSk7Ci0J CQkgIC8qIFdha2Ugd2FpdGluZyByZWFkZXJzLiAgKi8KLQkJCSAgaWYgKChyICYgUFRIUkVBRF9S V0xPQ0tfUldBSVRJTkcpICE9IDApCi0JCQkgICAgZnV0ZXhfd2FrZSAoJnJ3bG9jay0+X19kYXRh Ll9fcmVhZGVycywKLQkJCQkJSU5UX01BWCwgcHJpdmF0ZSk7Ci0JCQkgIHJldHVybiBFVElNRURP VVQ7Ci0JCQl9Ci0JCSAgICB9Ci0JCSAgLyogV2Ugc3RpbGwgb3duIFdSTE9DS0VEIGFuZCBzb21l b25lIGVsc2UgbWlnaHQgc2V0IGEKLQkJICAgICB3cml0ZSBwaGFzZSBjb25jdXJyZW50bHksIHNv IGVuYWJsZSB3YWl0aW5nIGFnYWluLgotCQkgICAgIE1ha2Ugc3VyZSB3ZSBkb24ndCBsb29zZSB0 aGUgZmxhZyB0aGF0IHNpZ25hbHMKLQkJICAgICB3aGV0aGVyIHRoZXJlIGFyZSB0aHJlYWRzIHdh aXRpbmcgb24gdGhpcyBmdXRleC4gICovCi0JCSAgYXRvbWljX3N0b3JlX3JlbGF4ZWQgKCZyd2xv Y2stPl9fZGF0YS5fX3dyaXRlcnNfZnV0ZXgsIHdmKTsKLQkJfQotCSAgICAgIC8qIFVzZSB0aGUg YWNxdWlyZSBNTyBmZW5jZSB0byBtaXJyb3IgdGhlIHN0ZXBzIHRha2VuIGluIHRoZQotCQkgbm9u LXRpbWVvdXQgY2FzZS4gIE5vdGUgdGhhdCB0aGUgcmVhZCBjYW4gaGFwcGVuIGJvdGgKLQkJIGlu IHRoZSBhdG9taWNfbG9hZCBhYm92ZSBhcyB3ZWxsIGFzIGluIHRoZSBmYWlsdXJlIGNhc2UKLQkJ IG9mIHRoZSBDQVMgb3BlcmF0aW9uLiAgKi8KLQkgICAgICBhdG9taWNfdGhyZWFkX2ZlbmNlX2Fj cXVpcmUgKCk7Ci0JICAgICAgLyogV2Ugc3RpbGwgbmVlZCB0byB3YWl0IGZvciBleHBsaWNpdCBo YW5kLW92ZXIsIGJ1dCB3ZSBtdXN0Ci0JCSBub3QgdXNlIGZ1dGV4X3dhaXQgYW55bW9yZS4gICov Ci0JICAgICAgd2hpbGUgKChhdG9taWNfbG9hZF9yZWxheGVkICgmcndsb2NrLT5fX2RhdGEuX193 cnBoYXNlX2Z1dGV4KQotCQkgICAgICB8IFBUSFJFQURfUldMT0NLX0ZVVEVYX1VTRUQpCi0JCSAg ICAgPT0gUFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNFRCkKLQkJewotCQkgIC8qIFRPRE8gQmFjay1v ZmYuICAqLwotCQl9Ci0JICAgICAgcmVhZHkgPSB0cnVlOwotCSAgICAgIGJyZWFrOwotCSAgICB9 Ci0JICAvKiBJZiB3ZSBnb3QgaW50ZXJydXB0ZWQgKEVJTlRSKSBvciB0aGUgZnV0ZXggd29yZCBk b2VzIG5vdCBoYXZlCi0JICAgICB0aGUgZXhwZWN0ZWQgdmFsdWUgKEVBR0FJTiksIHJldHJ5LiAg Ki8KLQl9CisgICAgICAgICAgICAgIHwgUFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNFRCkKKyAgICAg ICAgICAgICA9PSBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VEKQorICAgICAgICB7CisgICAgICAg ICAgaW50IHByaXZhdGUgPSBfX3B0aHJlYWRfcndsb2NrX2dldF9wcml2YXRlIChyd2xvY2spOwor ICAgICAgICAgIGlmICgod3BmICYgUFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNFRCkgPT0gMAorICAg ICAgICAgICAgICAmJiAoIWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfcmVsYXhlZCAoCisg ICAgICAgICAgICAgICAgICAmcndsb2NrLT5fX2RhdGEuX193cnBoYXNlX2Z1dGV4LCAmd3BmLAor ICAgICAgICAgICAgICAgICAgUFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNFRCkpKQorICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgICAgaW50IGVyciA9IF9fZnV0ZXhfYWJzdGltZWRfd2FpdDY0 ICgmcndsb2NrLT5fX2RhdGEuX193cnBoYXNlX2Z1dGV4LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNFRCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NraWQsIGFic3RpbWUs IHByaXZhdGUpOworICAgICAgICAgIGlmIChlcnIgPT0gRVRJTUVET1VUIHx8IGVyciA9PSBFT1ZF UkZMT1cpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChyd2xvY2stPl9fZGF0YS5f X2ZsYWdzICE9IFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJfTlApCisgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgLyogV2UgdHJ5IHdyaXRlci0td3JpdGVyIGhhbmQtb3Zl ci4gICovCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdworICAgICAgICAgICAgICAg ICAgICAgID0gYXRvbWljX2xvYWRfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fd3JpdGVycyk7 CisgICAgICAgICAgICAgICAgICBpZiAodyAhPSAwKQorICAgICAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgICAgLyogV2UgYXJlIGFib3V0IHRvIGhhbmQgb3ZlciBXUkxPQ0tF RCwgc28gd2UgbXVzdAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgX193cml0ZXJz X2Z1dGV4IHRvbzsgb3RoZXJ3aXNlLCB3ZSdkIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAg ICBhIHBlbmRpbmcgc3RvcmUsIHdoaWNoIGNvdWxkIGF0IGxlYXN0IHByZXZlbnQKKyAgICAgICAg ICAgICAgICAgICAgICAgICBvdGhlciB0aHJlYWRzIGZyb20gd2FpdGluZyB1c2luZyB0aGUgZnV0 ZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIGl0IGNvdWxkIGludGVybGVhdmUg d2l0aCB0aGUgc3RvcmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgYnkgc3Vic2VxdWVudCB3 cml0ZXJzLiAgSW4gdHVybiwgdGhpcyBtZWFucyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAg ICAgd2UgaGF2ZSB0byBjbGVhbiB1cCB3aGVuIHdlIGRvIG5vdCBoYW5kIG92ZXIKKyAgICAgICAg ICAgICAgICAgICAgICAgICBXUkxPQ0tFRC4KKyAgICAgICAgICAgICAgICAgICAgICAgICBSZWxl YXNlIE1PIHNvIHRoYXQgYW5vdGhlciB3cml0ZXIgdGhhdCBnZXRzCisgICAgICAgICAgICAgICAg ICAgICAgICAgV1JMT0NLRUQgZnJvbSB1cyBjYW4gdGFrZSBvdmVyIG91ciB2aWV3IG9mCisgICAg ICAgICAgICAgICAgICAgICAgICAgX19yZWFkZXJzLiAgKi8KKyAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgd2YgPSBhdG9taWNfZXhjaGFuZ2VfcmVsYXhlZCAoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICZyd2xvY2stPl9fZGF0YS5fX3dyaXRlcnNfZnV0ZXgsIDApOworICAg ICAgICAgICAgICAgICAgICAgIHdoaWxlICh3ICE9IDApCisgICAgICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdG9taWNfY29tcGFyZV9leGNoYW5n ZV93ZWFrX3JlbGVhc2UgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyd2xv Y2stPl9fZGF0YS5fX3dyaXRlcnMsICZ3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHcgfCBQVEhSRUFEX1JXTE9DS19XUkhBTkRPVkVSKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXYWtlIG90aGVyIHdy aXRlcnMuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh3ZiAmIFBUSFJF QURfUldMT0NLX0ZVVEVYX1VTRUQpICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZ1dGV4X3dha2UgKCZyd2xvY2stPl9fZGF0YS5fX3dyaXRlcnNfZnV0ZXgsIDEsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGUpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRPRE8gQmFjay1vZmYuICAq LworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIC8qIFdl IHN0aWxsIG93biBXUkxPQ0tFRCBhbmQgc29tZW9uZSBlbHNlIG1pZ2h0IHNldAorICAgICAgICAg ICAgICAgICAgICAgICAgIGEgd3JpdGUgcGhhc2UgY29uY3VycmVudGx5LCBzbyBlbmFibGUgd2Fp dGluZworICAgICAgICAgICAgICAgICAgICAgICAgIGFnYWluLiAgTWFrZSBzdXJlIHdlIGRvbid0 IGxvb3NlIHRoZSBmbGFnIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWxzIHdo ZXRoZXIgdGhlcmUgYXJlIHRocmVhZHMgd2FpdGluZyBvbgorICAgICAgICAgICAgICAgICAgICAg ICAgIHRoaXMgZnV0ZXguICAqLworICAgICAgICAgICAgICAgICAgICAgIGF0b21pY19zdG9yZV9y ZWxheGVkICgmcndsb2NrLT5fX2RhdGEuX193cml0ZXJzX2Z1dGV4LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Zik7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIC8qIElmIHdlIHRpbWVkIG91dCBhbmQg d2UgYXJlIG5vdCBpbiBhIHdyaXRlIHBoYXNlLCB3ZSBjYW4KKyAgICAgICAgICAgICAgICAganVz dCBzdG9wIGJlaW5nIGEgcHJpbWFyeSB3cml0ZXIuICBPdGhlcndpc2UsIHdlIGp1c3QKKyAgICAg ICAgICAgICAgICAgYWNxdWlyZSB0aGUgbG9jay4gICovCisgICAgICAgICAgICAgIHIgPSBhdG9t aWNfbG9hZF9yZWxheGVkICgmcndsb2NrLT5fX2RhdGEuX19yZWFkZXJzKTsKKyAgICAgICAgICAg ICAgaWYgKChyICYgUFRIUkVBRF9SV0xPQ0tfV1JQSEFTRSkgPT0gMCkKKyAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAvKiBXZSBhcmUgYWJvdXQgdG8gcmVsZWFzZSBXUkxPQ0tF RCwgc28gd2UgbXVzdCByZWxlYXNlCisgICAgICAgICAgICAgICAgICAgICBfX3dyaXRlcnNfZnV0 ZXggdG9vOyBzZWUgdGhlIGhhbmRsaW5nIG9mCisgICAgICAgICAgICAgICAgICAgICB3cml0ZXIt LXdyaXRlciBoYW5kLW92ZXIgYWJvdmUuICAqLworICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IHdmID0gYXRvbWljX2V4Y2hhbmdlX3JlbGF4ZWQgKAorICAgICAgICAgICAgICAgICAgICAg ICZyd2xvY2stPl9fZGF0YS5fX3dyaXRlcnNfZnV0ZXgsIDApOworICAgICAgICAgICAgICAgICAg d2hpbGUgKChyICYgUFRIUkVBRF9SV0xPQ0tfV1JQSEFTRSkgPT0gMCkKKyAgICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIC8qIFdoaWxlIHdlIGRvbid0IG5lZWQgdG8g bWFrZSBhbnl0aGluZyBmcm9tIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZXIncyBj cml0aWNhbCBzZWN0aW9uIHZpc2libGUgdG8gb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAg ICB0aHJlYWRzLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IG91ciBjaGFuZ2VzIHRvCisgICAgICAg ICAgICAgICAgICAgICAgICAgX193cml0ZXJzX2Z1dGV4IGFyZSBwcm9wZXJseSBvcmRlcmVkLgor ICAgICAgICAgICAgICAgICAgICAgICAgIFRoZXJlZm9yZSwgdXNlIHJlbGVhc2UgTU8gdG8gc3lu Y2hyb25pemUgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNlcXVlbnQgcHJpbWFy eSB3cml0ZXJzLiAgQWxzbyB3YWtlIHVwIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgIHdh aXRpbmcgcmVhZGVycyBhcyB0aGV5IGFyZSB3YWl0aW5nIGJlY2F1c2Ugb2YKKyAgICAgICAgICAg ICAgICAgICAgICAgICB1cy4gICovCisgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0b21pY19j b21wYXJlX2V4Y2hhbmdlX3dlYWtfcmVsZWFzZSAoCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmcndsb2NrLT5fX2RhdGEuX19yZWFkZXJzLCAmciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChyIF4gUFRIUkVBRF9SV0xPQ0tfV1JMT0NLRUQpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJiB+KHVuc2lnbmVkIGludCkgUFRIUkVBRF9SV0xPQ0tfUldBSVRJ TkcpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBXYWtlIG90aGVyIHdyaXRlcnMuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoKHdmICYgUFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNFRCkgIT0gMCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBmdXRleF93YWtlICgmcndsb2NrLT5fX2RhdGEuX193cml0ZXJzX2Z1dGV4 LCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGUpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXYWtlIHdhaXRpbmcgcmVhZGVycy4gICovCisg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgociAmIFBUSFJFQURfUldMT0NLX1JXQUlUSU5H KSAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1dGV4X3dha2UgKCZyd2xvY2st Pl9fZGF0YS5fX3JlYWRlcnMsIElOVF9NQVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJpdmF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBF VElNRURPVVQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgIC8qIFdlIHN0aWxsIG93biBXUkxPQ0tFRCBhbmQgc29tZW9u ZSBlbHNlIG1pZ2h0IHNldCBhCisgICAgICAgICAgICAgICAgICAgICB3cml0ZSBwaGFzZSBjb25j dXJyZW50bHksIHNvIGVuYWJsZSB3YWl0aW5nIGFnYWluLgorICAgICAgICAgICAgICAgICAgICAg TWFrZSBzdXJlIHdlIGRvbid0IGxvb3NlIHRoZSBmbGFnIHRoYXQgc2lnbmFscworICAgICAgICAg ICAgICAgICAgICAgd2hldGhlciB0aGVyZSBhcmUgdGhyZWFkcyB3YWl0aW5nIG9uIHRoaXMgZnV0 ZXguICAqLworICAgICAgICAgICAgICAgICAgYXRvbWljX3N0b3JlX3JlbGF4ZWQgKCZyd2xvY2st Pl9fZGF0YS5fX3dyaXRlcnNfZnV0ZXgsIHdmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgIC8qIFVzZSB0aGUgYWNxdWlyZSBNTyBmZW5jZSB0byBtaXJyb3IgdGhlIHN0ZXBzIHRh a2VuIGluIHRoZQorICAgICAgICAgICAgICAgICBub24tdGltZW91dCBjYXNlLiAgTm90ZSB0aGF0 IHRoZSByZWFkIGNhbiBoYXBwZW4gYm90aAorICAgICAgICAgICAgICAgICBpbiB0aGUgYXRvbWlj X2xvYWQgYWJvdmUgYXMgd2VsbCBhcyBpbiB0aGUgZmFpbHVyZSBjYXNlCisgICAgICAgICAgICAg ICAgIG9mIHRoZSBDQVMgb3BlcmF0aW9uLiAgKi8KKyAgICAgICAgICAgICAgYXRvbWljX3RocmVh ZF9mZW5jZV9hY3F1aXJlICgpOworICAgICAgICAgICAgICAvKiBXZSBzdGlsbCBuZWVkIHRvIHdh aXQgZm9yIGV4cGxpY2l0IGhhbmQtb3ZlciwgYnV0IHdlIG11c3QKKyAgICAgICAgICAgICAgICAg bm90IHVzZSBmdXRleF93YWl0IGFueW1vcmUuICAqLworICAgICAgICAgICAgICB3aGlsZSAoKGF0 b21pY19sb2FkX3JlbGF4ZWQgKCZyd2xvY2stPl9fZGF0YS5fX3dycGhhc2VfZnV0ZXgpCisgICAg ICAgICAgICAgICAgICAgICAgfCBQVEhSRUFEX1JXTE9DS19GVVRFWF9VU0VEKQorICAgICAgICAg ICAgICAgICAgICAgPT0gUFRIUkVBRF9SV0xPQ0tfRlVURVhfVVNFRCkKKyAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAvKiBUT0RPIEJhY2stb2ZmLiAgKi8KKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgIHJlYWR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICB9CisgICAgICAgICAgLyogSWYgd2UgZ290IGludGVycnVwdGVkIChFSU5U Uikgb3IgdGhlIGZ1dGV4IHdvcmQgZG9lcyBub3QgaGF2ZQorICAgICAgICAgICAgIHRoZSBleHBl Y3RlZCB2YWx1ZSAoRUFHQUlOKSwgcmV0cnkuICAqLworICAgICAgICB9CiAgICAgICAvKiBTZWUg cHRocmVhZF9yd2xvY2tfcmRsb2NrX2Z1bGwuICAqLwogICAgICAgaWYgKHJlYWR5KQotCWJyZWFr OworICAgICAgICBicmVhazsKICAgICAgIGlmICgoYXRvbWljX2xvYWRfYWNxdWlyZSAoJnJ3bG9j ay0+X19kYXRhLl9fcmVhZGVycykKLQkgICAmIFBUSFJFQURfUldMT0NLX1dSUEhBU0UpICE9IDAp Ci0JcmVhZHkgPSB0cnVlOworICAgICAgICAgICAmIFBUSFJFQURfUldMT0NLX1dSUEhBU0UpCisg ICAgICAgICAgIT0gMCkKKyAgICAgICAgcmVhZHkgPSB0cnVlOwogICAgIH0KIAotIGRvbmU6Citk b25lOgogICBhdG9taWNfc3RvcmVfcmVsYXhlZCAoJnJ3bG9jay0+X19kYXRhLl9fY3VyX3dyaXRl ciwKLQkJCVRIUkVBRF9HRVRNRU0gKFRIUkVBRF9TRUxGLCB0aWQpKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIFRIUkVBRF9HRVRNRU0gKFRIUkVBRF9TRUxGLCB0aWQpKTsKICAgcmV0dXJuIDA7 CiB9Ci0tIAoyLjI1LjEKCg== --00000000000046e70605db749558--