From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 516 invoked by alias); 4 Oct 2012 18:10:57 -0000 Received: (qmail 359 invoked by uid 22791); 4 Oct 2012 18:10:19 -0000 X-SWARE-Spam-Status: No, hits=-8.7 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_SPAMHAUS_DROP,KHOP_THREADED,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,RP_MATCHES_RCVD,TW_BJ,TW_TM X-Spam-Check-By: sourceware.org Received: from mga09.intel.com (HELO mga09.intel.com) (134.134.136.24) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 04 Oct 2012 18:09:53 +0000 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP; 04 Oct 2012 11:09:33 -0700 X-ExtLoop1: 1 Received: from fmsmsx107.amr.corp.intel.com ([10.19.9.54]) by orsmga001.jf.intel.com with ESMTP; 04 Oct 2012 11:09:50 -0700 Received: from fmsmsx101.amr.corp.intel.com (10.19.9.52) by FMSMSX107.amr.corp.intel.com (10.19.9.54) with Microsoft SMTP Server (TLS) id 14.1.355.2; Thu, 4 Oct 2012 11:09:49 -0700 Received: from fmsmsx102.amr.corp.intel.com ([169.254.2.79]) by FMSMSX101.amr.corp.intel.com ([169.254.1.150]) with mapi id 14.01.0355.002; Thu, 4 Oct 2012 11:09:49 -0700 From: "Iyer, Balaji V" To: Richard Guenther CC: "Joseph S. Myers" , "gcc-patches@gcc.gnu.org" Subject: RE: [Ping]FW: [PATCH] Cilk Plus merging to trunk (2 of n) Date: Thu, 04 Oct 2012 18:10:00 -0000 Message-ID: References: In-Reply-To: Content-Type: multipart/mixed; boundary="_002_BF230D13CA30DD48930C31D40993300016C842FBFMSMSX102amrcor_" MIME-Version: 1.0 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-10/txt/msg00431.txt.bz2 --_002_BF230D13CA30DD48930C31D40993300016C842FBFMSMSX102amrcor_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 26724 Hello Richard, Please see my responses below. Also attached, please find a fixed patch. I= s this OK for trunk? Here are the ChangeLog entries: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D gcc/ChangeLog 2012-10-04 Balaji V. Iyer * Makefile.in (C_COMMON_OBJS): Added c-family/array-notation-common.o. * doc/passes.texi (Cilk Plus Transformation): Documented array=20 notation and overall transformations for Cilk Plus. * doc/invoke.texi (C Dialect Options): Documented -fcilkplus flag. * doc/generic.texi (Storage References): Documented ARRAY_NOTATION_REF tree addition. gcc/c-family/ChangeLog 2012-10-04 Balaji V. Iyer * c-common.h (build_array_notation_expr): New function declaration. (ARRAY_NOTATION_ARRAY): Added new #define. (ARRAY_NOTATION_CHECK): Likewise. (ARRAY_NOTATION_START): Likewise. (ARRAY_NOTATION_LENGTH): Likewise. (ARRAY_NOTATION_STRIDE): Likewise. (ARRAY_NOTATION_TYPE): Likewise. (enum array_notation_reduce_type): Added new enumerator. * c-common.def: Added new tree ARRAY_NOTATION_REF. * c-common.c (c_define_builtins): Added a call to initialize array notation builtin functions. (c_common_init_ts): Set ARRAY_NOTATION_REF as typed. * c-pretty-print.c (pp_c_postfix_expression): Added ARRAY_NOTATION_REF case. * c.opt (-fcilkplus): Define new command line switch.=20 * array-notation-common.c: New file. gcc/c/ChangeLog 2012-10-04 Balaji V. Iyer * c-typeck.c (convert_arguments): Added a check if tree contains array notation expressions before throwing errors or doing anything. (convert_for_assignments): Likewise. * Make-lang.in (C_AND_OBJC_OBJS): Added c-array-notation.o. * c-parser.c (c_parser_compound_statement): Check if array notation code is used in tree, if so, then transform them into appropriate C code. (c_parser_expr_no_commas): Check if array notation is used in LHS or RHS, if so, then build array notation expression instead of regular modify. (c_parser_postfix_expression_after_primary): Added a check for colon(s) after square braces, if so then handle it like an array notation. Also, break up array notations in unary op if found. (c_parser_array_notation): New function. * c-array-notation.c: New file. gcc/testsuite/ChangeLog 2012-10-04 Balaji V. Iyer * gcc.dg/cilk-plus/array_notation/execute/execute.exp: New script. * gcc.dg/cilk-plus/array_notation/compile/compile.exp: Likewise. * gcc.dg/cilk-plus/array_notation/errors/errors.exp: Likewise. * gcc.dg/cilk-plus/array_notation/execute/sec_implicit_ex.c: New test. * gcc.dg/cilk-plus/array_notation/execute/if_test.c: Likewise. * gcc.dg/cilk-plus/array_notation/execute/gather_scatter.c: Likewise. * gcc.dg/cilk-plus/array_notation/execute/builtin_func_double2.c:=20 Likewise. * gcc.dg/cilk-plus/array_notation/execute/builtin_func_double.c: Likewise. * gcc.dg/cilk-plus/array_notation/execute/builtin_fn_custom.c: Likewise. * gcc.dg/cilk-plus/array_notation/execute/builtin_fn_mutating.c:=20 Likewise. * gcc.dg/cilk-plus/array_notation/execute/array_test_ND.c: Likewise. * gcc.dg/cilk-plus/array_notation/execute/array_test2.c: Likewise. * gcc.dg/cilk-plus/array_notation/execute/array_test1.c: Likewise. * gcc.dg/cilk-plus/array_notation/compile/sec_implicit_ex.c: Likewise. * gcc.dg/cilk-plus/array_notation/compile/gather_scatter.c: Likewise. * gcc.dg/cilk-plus/array_notation/compile/builtin_func_double2.c: Likewise. * gcc.dg/cilk-plus/array_notation/compile/array_test_ND.c: Likewise. * gcc.dg/cilk-plus/array_notation/compile/if_test.c: Likewise. * gcc.dg/cilk-plus/array_notation/compile/builtin_func_double.c: Likewise. * gcc.dg/cilk-plus/array_notation/compile/array_test1.c: Likewise * gcc.dg/cilk-plus/array_notation/compile/array_test2.c: Likewise. * gcc.dg/cilk-plus/array_notation/errors/sec_implicit.c: Likewise. * gcc.dg/cilk-plus/array_notation/errors/sec_implicit2.c: Likewise. * gcc.dg/cilk-plus/array_notation/errors/rank_mismatch.c: Likewise. * gcc.dg/cilk-plus/array_notation/errors/parse_error.c: Likewise. * gcc.dg/cilk-plus/array_notation/errors/parse_error2.c: Likewise. * gcc.dg/cilk-plus/array_notation/errors/parse_error3.c: Likewise. * gcc.dg/cilk-plus/array_notation/errors/parse_error4.c: Likewise. * gcc.dg/cilk-plus/array_notation/errors/sec_reduce_max_min_ind.c:=20 Likewise. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >-----Original Message----- >From: Richard Guenther [mailto:richard.guenther@gmail.com] >Sent: Thursday, October 04, 2012 4:29 AM >To: Iyer, Balaji V >Cc: Joseph S. Myers; gcc-patches@gcc.gnu.org >Subject: Re: [Ping]FW: [PATCH] Cilk Plus merging to trunk (2 of n) > >On Thu, Oct 4, 2012 at 2:22 AM, Iyer, Balaji V w= rote: >> Hi Joseph, >> Did you get a chance to look at this submission? I think I have = fixed all the >changes you have mentioned. Is it OK for trunk? >> >> Thanks, >> >> Balaji V. Iyer. >> >>>-----Original Message----- >>>From: gcc-patches-owner@gcc.gnu.org [mailto:gcc-patches- >>>owner@gcc.gnu.org] On Behalf Of Iyer, Balaji V >>>Sent: Wednesday, September 26, 2012 7:16 PM >>>To: Joseph Myers >>>Cc: gcc-patches@gcc.gnu.org; aldyh@redhat.com; rth@redhat.com; >>>law@redhat.com >>>Subject: RE: [PATCH] Cilk Plus merging to trunk (2 of n) >>> >>>Hello Joseph, >>> In my last patch, I forgot to add the change Richard Guenther >>>wanted me to make. He wanted me to move the ARRAY_NOTATION_REF node >>>from tree.def to c-family/c-common.def. Here is a new one that has >>>this change. I am sorry for this. >>> >>>Here are ChangeLog entries: >>> >>>gcc/ChangeLog >>>2012-09-26 Balaji V. Iyer >>> >>> * tree.h (array_notation_reduce_type): Added new enumerator. > >This should be moved to c-tree.h then, and ... I hope it is OK that I moved this to c-common.h. This way I can use it for = C++ also when that patch comes out. > >>> * Makefile.in (OBJS): Added array-notation-common.o. >>> * doc/passes.texi (Cilk Plus Transformation): Documented array >>> notation and overall transformations for Cilk Plus. >>> * doc/invoke.texi (C Dialect Options): Documented -fcilkplus fla= g. >>> * doc/generic.texi (Storage References): Documented >>>ARRAY_NOTATION_REF >>> tree addition. >>> * tree-pretty-pretty.c (dump_generic_node): Added >ARRAY_NOTATION_REF >>> case. > >... this to c-pretty-print.c and DONE! > >>> * array-notation-common.c: New file. > >... this to the c-common/ directory. DONE! (I hope you meant c-family directory). > >Basically this should be a completely frontend-only patch. > >Richard. Thanks, Balaji V. Iyer. > >>>gcc/c-family/ChangeLog >>>2012-09-26 Balaji V. Iyer >>> >>> * c-common.h (build_array_notation_expr): New function declarati= on. >>> (ARRAY_NOTATION_ARRAY): Added new #define. >>> (ARRAY_NOTATION_CHECK): Likewise. >>> (ARRAY_NOTATION_START): Likewise. >>> (ARRAY_NOTATION_LENGTH): Likewise. >>> (ARRAY_NOTATION_STRIDE): Likewise. >>> (ARRAY_NOTATION_TYPE): Likewise. >>> * c-common.def: Added new tree ARRAY_NOTATION_REF. >>> * c-common.c (c_define_builtins): Added a call to initialize arr= ay >>> notation builtin functions. >>> (c_common_init_ts): Set ARRAY_NOTATION_REF as typed. >>> * c.opt (-fcilkplus): Define new command line switch. >>> >>>gcc/c/ChangeLog >>>2012-09-26 Balaji V. Iyer >>> >>> * c-typeck.c (convert_arguments): Added a check if tree contains >>> array notation expressions before throwing errors or doing anyth= ing. >>> * Make-lang.in (C_AND_OBJC_OBJS): Added c-array-notation.o. >>> * c-parser.c (c_parser_compound_statement): Check if array notat= ion >code >>> is used in tree, if so, then transform them into appropriate C c= ode. >>> (c_parser_expr_no_commas): Check if array notation is used in LH= S or >>> RHS, if so, then build array notation expression instead of regu= lar >>> modify. >>> (c_parser_postfix_expression_after_primary): Added a check for c= olon(s) >>> after square braces, if so then handle it like an array notation= . Also, >>> break up array notations in unary op if found. >>> (c_parser_array_notation): New function. >>> * c-array-notation.c: New file. >>> >>>gcc/testsuite/ChangeLog >>>2012-09-26 Balaji V. Iyer >>> >>> * gcc.dg/cilk-plus/array_notation/execute/execute.exp: New scrip= t. >>> * gcc.dg/cilk-plus/array_notation/compile/compile.exp: Likewise. >>> * gcc.dg/cilk-plus/array_notation/errors/errors.exp: Likewise. >>> * gcc.dg/cilk-plus/array_notation/execute/sec_implicit_ex.c: New= test. >>> * gcc.dg/cilk-plus/array_notation/execute/if_test.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/execute/gather_scatter.c: Like= wise. >>> * gcc.dg/cilk-plus/array_notation/execute/builtin_func_double2.c: >>> Likewise. >>> * gcc.dg/cilk-plus/array_notation/execute/builtin_func_double.c: >>> Likewise. >>> * gcc.dg/cilk-plus/array_notation/execute/builtin_fn_custom.c: L= ikewise. >>> * gcc.dg/cilk-plus/array_notation/execute/builtin_fn_mutating.c: >>> Likewise. >>> * gcc.dg/cilk-plus/array_notation/execute/array_test_ND.c: Likew= ise. >>> * gcc.dg/cilk-plus/array_notation/execute/array_test2.c: Likewis= e. >>> * gcc.dg/cilk-plus/array_notation/execute/array_test1.c: Likewis= e. >>> * gcc.dg/cilk-plus/array_notation/compile/sec_implicit_ex.c: Lik= ewise. >>> * gcc.dg/cilk-plus/array_notation/compile/gather_scatter.c: Like= wise. >>> * gcc.dg/cilk-plus/array_notation/compile/builtin_func_double2.c: >>> Likewise. >>> * gcc.dg/cilk-plus/array_notation/compile/array_test_ND.c: Likew= ise. >>> * gcc.dg/cilk-plus/array_notation/compile/if_test.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/compile/builtin_func_double.c: >>> Likewise. >>> * gcc.dg/cilk-plus/array_notation/compile/array_test1.c: Likewise >>> * gcc.dg/cilk-plus/array_notation/compile/array_test2.c: Likewis= e. >>> * gcc.dg/cilk-plus/array_notation/errors/sec_implicit.c: Likewis= e. >>> * gcc.dg/cilk-plus/array_notation/errors/sec_implicit2.c: Likewi= se. >>> * gcc.dg/cilk-plus/array_notation/errors/rank_mismatch.c: Likewi= se. >>> * gcc.dg/cilk-plus/array_notation/errors/parse_error.c: Likewise. >>> * gcc.dg/cilk-plus/array_notation/errors/parse_error2.c: Likewis= e. >>> * gcc.dg/cilk-plus/array_notation/errors/parse_error3.c: Likewis= e. >>> * gcc.dg/cilk-plus/array_notation/errors/parse_error4.c: Likewis= e. >>> * gcc.dg/cilk-plus/array_notation/errors/sec_reduce_max_min_ind.= c: >>> Likewise. >>> >>>Thanks, >>> >>>Balaji V. Iyer. >>> >>>>-----Original Message----- >>>>From: Iyer, Balaji V >>>>Sent: Wednesday, September 26, 2012 5:54 PM >>>>To: 'Joseph Myers' >>>>Cc: gcc-patches@gcc.gnu.org; aldyh@redhat.com; rth@redhat.com; >>>>law@redhat.com >>>>Subject: RE: [PATCH] Cilk Plus merging to trunk (2 of n) >>>> >>>>Hello Joseph, >>>> Please see my responses below and I have attached a fixed patch: >>>> >>>>>-----Original Message----- >>>>>From: Joseph Myers [mailto:joseph@codesourcery.com] >>>>>Sent: Sunday, September 23, 2012 4:45 PM >>>>>To: Iyer, Balaji V >>>>>Cc: gcc-patches@gcc.gnu.org; aldyh@redhat.com; rth@redhat.com; >>>>>law@redhat.com >>>>>Subject: Re: [PATCH] Cilk Plus merging to trunk (2 of n) >>>>> >>>>>On Sun, 23 Sep 2012, Iyer, Balaji V wrote: >>>>> >>>>>> Hello Everyone, >>>>>> Attached, please find a patch that will implement Cilk Plus >>>>>> Array Notations for the C compiler. Array notations are indented >>>>>> to allow programmers to directly express parallelism in their progra= ms. >>>>>> Array notations can be used to possibly see a more predictable >>>>>> performance improvement, hardware resource-utilization and >>>>>> vectorization. To enable the compiler recognize array notation >>>>>> syntax, we have added a flag "-fcilkplus." If this flag is not >>>>>> used, none of these changes are visible to the compiler user. For >>>>>> more information and examples about array notations please see >>>>>> Chapter 4 in the Cilk Plus Specification >>>>>> >>>>>(http://software.intel.com/sites/default/files/m/6/3/1/cilk_plus_lan >>>>>gu >>>>>a >>>>>ge_specif >>>>>ication.pdf). >>>>> >>>>>There seem to be a lot of deficiencies in this specification. I >>>>>list some here - I don't want answers in email explaining what is >>>>>intended (unless it's already explained in the specification and I >>>>>missed it), I want the specification revised to describe things in >>>>>closer relation to C standard terms, and then you can answer in >>>>>email pointing to the relevant wording in the improved specification >>>>>- and to the testcases in your patch verifying that the semantics >>>>>are properly implemented, but without needing to elaborate beyond >>>>>pointing to specification text and >>>>testcases for each question. >>>>> >>>>>What syntax productions, in C11 terms, are , >>>>bound>, and in the syntax given for section >>>>>operators? Are there constraints that , and >>>>> must be of integer >>>>type? >>>>>Are there other constraints on their types and values? >>>>>(For example, must anything be constant? If there isn't such a >>>>>requirement, what exactly is the requirement that "The right-hand >>>>>side expression must have the same rank and size as the array >>>>>context." - if a constraint, in what cases is it a constraint? >>>>>Maybe a constraint that values must match if integer constant >>>>>expressions, with non-matching runtime values, at least one not an >>>>>integer constant expression, being undefined behavior at runtime, >>>>>for example? What anyway is "size" in that quoted sentence? Unlike >>>>>"rank" and "shape", it doesn't seem to be a defined term.) >>>>> >>>>>What do you mean, in standard terms, by "must have a declared size"? >>>>>How is this defined in relation to standard C array-to-pointer decay? >>>>>What about adjustment of function parameter types? What about array >>>>>sizes >>>>declared as [*]? >>>>>What if the is in parentheses? >>>>> >>>>>Should I take it, from the absence of any restrictions mentioned on >>>>>this subject, that the array that is sectioned may have elements of >>>>>arbitrary type - so it's valid to operate this way on arrays of >>>>>pointers, complex numbers or structures, for example? But that the >>>>>usual constraints on assignment apply, so that if you try A[:] =3D >>>>>B[:] where A and B are two-dimensional arrays, this is a constraint >>>>>violation, because the elements that would be assigned elementwise >>>>>are >>>>themselves still arrays and C doesn't allow array assignment? >>>>> >>>>>Is it valid or invalid to have an expression of the form >>>>>(A[1:2])[1:2] with parentheses around a partial array section >>>>>expression, of which a further section is taken? It's not in the >>>>>syntax given, but that syntax doesn't actually show the precise syntax >productions added to C11. >>>>> >>>>>What is the type of an array section expression? What is the result >>>>>of applying sizeof to such an expression? What about GNU C typeof? >>>>>Use in >>>>>C11 _Generic? >>>>> >>>>>Can such expressions be used in conditional expressions, scalar ? >>>>>section >>>>>: other-section? If you'd defined types, at least this could be >>>>>deduced from the existing C rules on conditional expressions that >>>>>say what the >>>>permitted types are. >>>>>Can you use them with comma operators, A[:] =3D (B, C[:])? It's far >>>>>from clear from the document as-is to what extent such expressions >>>>>have an existence with types and values like normal expressions, in >>>>>which case this would of course be permitted, as opposed to being >>>>>special-case things for >>>>the RHS of assignments. >>>>> >>>>>You say (4.3.2.2) that certain operators are applied with the same >>>>>precedence and rules on permitted operands as for scalars. What >>>>>promotions apply? If operations are carried out on two signed char >>>>>arrays, for example, are the elements considered to be promoted to >>>>>int, resulting in an expression whose type is thought of as a >>>>>section of an array of int, which may then be converted back to >>>>>signed char if stored in a signed char array? (Thus, internal >>>>>operations take place in int and what would have been overflow in >>>>>signed char would not cause undefined >>>>>behavior.) >>>>> >>>>>In general, do such conversions apply between different operands, >>>>>and on assignment? >>>>> >>>>>I note you do not mention shift operators in the list in 4.3.2.2 of >>>>>those permitted - obviously that requires testcases that they are duly >rejected. >>>>> >>>>>Are functions such as __sec_reduce_add defined to apply the relevant >>>>>operation to an accumulated value and each element of the section in >>>>>turn, in some unspecified order? Or may it evaluate, for example, a >>>>>sum of four elements as (a >>>>>+ b) + (c + d)? What about if a user function is provided? >>>>> >>>>>I take it each function has constraints corresponding to those on >>>>>the relevant arithmetic operation? (For example, __sec_reduce_add >>>>>couldn't be called for >>>>>pointers.) Can the *zero functions be called for pointers (testing >>>>>whether they are NULL)? What about the *max* and *min* functions? >>>>>What about those functions for floating-point - do they follow the >>>>>semantics of fmax / fmin regarding NaNs? Are the results >>>>>unspecified if the answer is a floating-point zero and both +0.0 and -= 0.0 are >present? >>>> >>>>Here is a link to the latest spec. This should clear several of the >>>>questions you are seeking. >>>>(http://software.intel.com/sites/default/files/m/4/e/7/3/1/40297- >>>>Intel_Cilk_plus_lang_spec_2.htm#array) >>>> >>>>> >>>>>(Regarding the patch itself, see my previous comments on previous >>>>>patches in this series. For example: >>>>> >>>>>* All functions should have comments explaining the semantics of >>>>>their arguments and return values. >>>> >>>>Fixed. Please see attached patch. >>>> >>>>> >>>>>* Diagnostic function calls should have explicit locations passed. >>>> >>>>Fixed. >>>> >>>>> >>>>>* Every diagnostic (that's not an ICE) should have a corresponding >>>>>testcase in the testsuite for the associated cases of invalid code - >>>>>I see no tests using dg-error at all in this patch. Every case >>>>>where the specification says something is not permitted should have >>>>>an associated check in the compiler, diagnostic and testcase. >>>> >>>>Added. Please see testsuite/gcc.dg/cilk-plus/errors directory in the pa= tch. >>>> >>>>> >>>>>* Diagnostic formatting also needs fixing to follow the GNU Coding >Standards. >>>>> >>>>>* The usage >>>>> >>>>>+ error ("__sec_implicit_index parameter must be constant integer= " >>>>>+ "expression"); >>>>>+ error ("Bailing out due to previous error"); >>>>>+ exit (ICE_EXIT_CODE); >>>>> >>>>>should be avoided. Front-end code should never need to call exit >>>>>directly. If you have an internal error - something that should not >>>>>be possible for any user code, valid or invalid - use internal_error. >>>>>If an error can occur for invalid user code, just call error_at and >>>>>allow the compiler to continue execution to find further problems in >>>>>the user's code, >>>>without bailing out. >>>> >>>>Fixed. >>>> >>>>> >>>>>* There should be nothing x86-specific about the testcases so they >>>>>shouldn't need to be conditioned on x86 targets. >>>> >>>>OK, removed from the scripts. >>>> >>>>> >>>>>* Avoid using "int" as a type in the compiler to count the number of >>>>>some entity on the host, use size_t instead, there's no need to add >>>>>new cases that will cause trouble when someone wants to build a >>>>>program with 2^31 of something, although there are plenty of such >>>>>cases >>>already. >>>> >>>>OK. >>>> >>>>> >>>>>* Instead of casting the result of xmalloc, use existing macros such >>>>>as >>>>XNEWVEC. >>>> >>>>Fixed. >>>> >>>>> >>>>>* Use @option not @code for option named in the manual. >>>> >>>>Fixed. >>>> >>>>> >>>>>* Instead of declaring non-static functions >>>>> >>>>>+int extract_sec_implicit_index_arg (tree); bool >>>>>+is_sec_implicit_index_fn (tree); void array_notation_init_builtins >>>>>+(void); >>>>> >>>>>in a source file (array-notation-common.c), either make them static >>>>>or declare them in an appropriate header included everywhere needing >>>>>those >>>>declarations. >>>> >>>>Fixed. >>>> >>>>> >>>> >>>>Attached, please find a fixed patch for array notation for C. OK for tr= unk? >>>> >>>>Here is the ChangeLog for the Changes: >>>> >>>>gcc/ChangeLog >>>>2012-09-26 Balaji V. Iyer >>>> >>>> * tree.h (array_notation_reduce_type): Added new enumerator. >>>> (ARRAY_NOTATION_ARRAY): Added new #define. >>>> (ARRAY_NOTATION_CHECK): Likewise. >>>> (ARRAY_NOTATION_START): Likewise. >>>> (ARRAY_NOTATION_LENGTH): Likewise. >>>> (ARRAY_NOTATION_STRIDE): Likewise. >>>> (ARRAY_NOTATION_TYPE): Likewise. >>>> * tree.def: Added new tree ARRAY_NOTATION_REF. >>>> * Makefile.in (OBJS): Added array-notation-common.o. >>>> * doc/passes.texi (Cilk Plus Transformation): Documented array >>>> notation and overall transformations for Cilk Plus. >>>> * doc/invoke.texi (C Dialect Options): Documented -fcilkplus fl= ag. >>>> * doc/generic.texi (Storage References): Documented >>>>ARRAY_NOTATION_REF >>>> tree addition. >>>> * tree-pretty-pretty.c (dump_generic_node): Added >ARRAY_NOTATION_REF >>>> case. >>>> * array-notation-common.c: New file. >>>> >>>>gcc/c-family/ChangeLog >>>> >>>>2012-09-26 Balaji V. Iyer >>>> >>>> * c-common.h (build_array_notation_expr): New function declarat= ion. >>>> * c-common.c (c_define_builtins): Added a call to initialize ar= ray >>>> notation builtin functions. >>>> * c.opt (-fcilkplus): Define new command line switch. >>>> >>>>gcc/c/ChangeLog >>>> >>>>2012-09-26 Balaji V. Iyer >>>> >>>> * c-typeck.c (convert_arguments): Added a check if tree contains >>>> array notation expressions before throwing errors or doing anyt= hing. >>>> * Make-lang.in (C_AND_OBJC_OBJS): Added c-array-notation.o. >>>> * c-parser.c (c_parser_compound_statement): Check if array nota= tion >code >>>> is used in tree, if so, then transform them into appropriate C = code. >>>> (c_parser_expr_no_commas): Check if array notation is used in L= HS or >>>> RHS, if so, then build array notation expression instead of reg= ular >>>> modify. >>>> (c_parser_postfix_expression_after_primary): Added a check for = colon(s) >>>> after square braces, if so then handle it like an array notatio= n. Also, >>>> break up array notations in unary op if found. >>>> (c_parser_array_notation): New function. >>>> * c-array-notation.c: New file. >>>> >>>> >>>>gcc/testsuite/ChangeLog >>>>2012-09-26 Balaji V. Iyer >>>> >>>> * gcc.dg/cilk-plus/array_notation/execute/execute.exp: New scri= pt. >>>> * gcc.dg/cilk-plus/array_notation/compile/compile.exp: Likewise. >>>> * gcc.dg/cilk-plus/array_notation/errors/errors.exp: Likewise. >>>> * gcc.dg/cilk-plus/array_notation/execute/sec_implicit_ex.c: Ne= w test. >>>> * gcc.dg/cilk-plus/array_notation/execute/if_test.c: Likewise. >>>> * gcc.dg/cilk-plus/array_notation/execute/gather_scatter.c: Lik= ewise. >>>> * gcc.dg/cilk-plus/array_notation/execute/builtin_func_double2.= c: >>>> Likewise. >>>> * gcc.dg/cilk-plus/array_notation/execute/builtin_func_double.c: >>>> Likewise. >>>> * gcc.dg/cilk-plus/array_notation/execute/builtin_fn_custom.c: = Likewise. >>>> * gcc.dg/cilk-plus/array_notation/execute/builtin_fn_mutating.c: >>>> Likewise. >>>> * gcc.dg/cilk-plus/array_notation/execute/array_test_ND.c: Like= wise. >>>> * gcc.dg/cilk-plus/array_notation/execute/array_test2.c: Likewi= se. >>>> * gcc.dg/cilk-plus/array_notation/execute/array_test1.c: Likewi= se. >>>> * gcc.dg/cilk-plus/array_notation/compile/sec_implicit_ex.c: Li= kewise. >>>> * gcc.dg/cilk-plus/array_notation/compile/gather_scatter.c: Lik= ewise. >>>> * gcc.dg/cilk-plus/array_notation/compile/builtin_func_double2.= c: >>>> Likewise. >>>> * gcc.dg/cilk-plus/array_notation/compile/array_test_ND.c: Like= wise. >>>> * gcc.dg/cilk-plus/array_notation/compile/if_test.c: Likewise. >>>> * gcc.dg/cilk-plus/array_notation/compile/builtin_func_double.c: >>>> Likewise. >>>> * gcc.dg/cilk-plus/array_notation/compile/array_test1.c: Likewi= se >>>> * gcc.dg/cilk-plus/array_notation/compile/array_test2.c: Likewi= se. >>>> * gcc.dg/cilk-plus/array_notation/errors/sec_implicit.c: Likewi= se. >>>> * gcc.dg/cilk-plus/array_notation/errors/sec_implicit2.c: Likew= ise. >>>> * gcc.dg/cilk-plus/array_notation/errors/rank_mismatch.c: Likew= ise. >>>> * gcc.dg/cilk-plus/array_notation/errors/parse_error.c: Likewis= e. >>>> * gcc.dg/cilk-plus/array_notation/errors/parse_error2.c: Likewi= se. >>>> * gcc.dg/cilk-plus/array_notation/errors/parse_error3.c: Likewi= se. >>>> * gcc.dg/cilk-plus/array_notation/errors/parse_error4.c: Likewi= se. >>>> * gcc.dg/cilk-plus/array_notation/errors/sec_reduce_max_min_ind= .c: >>>> Likewise. >>>> >>>>Thanks, >>>> >>>>Balaji V. Iyer. >>>> >>>>>There may also be other issues.) >>>>> >>>>>-- >>>>>Joseph S. Myers >>>>>joseph@codesourcery.com --_002_BF230D13CA30DD48930C31D40993300016C842FBFMSMSX102amrcor_ Content-Type: text/plain; name="array_notation_c_patch4.txt" Content-Description: array_notation_c_patch4.txt Content-Disposition: attachment; filename="array_notation_c_patch4.txt"; size=173898; creation-date="Thu, 04 Oct 2012 17:57:21 GMT"; modification-date="Thu, 04 Oct 2012 17:55:00 GMT" Content-Transfer-Encoding: base64 Content-length: 235729 ZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5p bgppbmRleCA3N2JhNGRmLi42MzM5NTcwIDEwMDY0NAotLS0gYS9nY2MvTWFr ZWZpbGUuaW4KKysrIGIvZ2NjL01ha2VmaWxlLmluCkBAIC0xMTIyLDcgKzEx MjIsOCBAQCBDX0NPTU1PTl9PQkpTID0gYy1mYW1pbHkvYy1jb21tb24ubyBj LWZhbWlseS9jLWNwcGJ1aWx0aW4ubyBjLWZhbWlseS9jLWR1bXAubyBcCiAg IGMtZmFtaWx5L2MtZm9ybWF0Lm8gYy1mYW1pbHkvYy1naW1wbGlmeS5vIGMt ZmFtaWx5L2MtbGV4Lm8gXAogICBjLWZhbWlseS9jLW9tcC5vIGMtZmFtaWx5 L2Mtb3B0cy5vIGMtZmFtaWx5L2MtcGNoLm8gXAogICBjLWZhbWlseS9jLXBw b3V0cHV0Lm8gYy1mYW1pbHkvYy1wcmFnbWEubyBjLWZhbWlseS9jLXByZXR0 eS1wcmludC5vIFwKLSAgYy1mYW1pbHkvYy1zZW1hbnRpY3MubyBjLWZhbWls eS9jLWFkYS1zcGVjLm8gdHJlZS1tdWRmbGFwLm8KKyAgYy1mYW1pbHkvYy1z ZW1hbnRpY3MubyBjLWZhbWlseS9jLWFkYS1zcGVjLm8gdHJlZS1tdWRmbGFw Lm8gXAorICBjLWZhbWlseS9hcnJheS1ub3RhdGlvbi1jb21tb24ubwogCiAj IExhbmd1YWdlLWluZGVwZW5kZW50IG9iamVjdCBmaWxlcy4KICMgV2UgcHV0 IHRoZSBpbnNuLSoubyBmaWxlcyBmaXJzdCBzbyB0aGF0IGEgcGFyYWxsZWwg bWFrZSB3aWxsIGJ1aWxkCkBAIC0xOTcxLDYgKzE5NzIsOSBAQCBjLWZhbWls eS9jLXNlbWFudGljcy5vIDogYy1mYW1pbHkvYy1zZW1hbnRpY3MuYyAkKENP TkZJR19IKSAkKFNZU1RFTV9IKSBcCiBjLWZhbWlseS9jLWFkYS1zcGVjLm8g OiBjLWZhbWlseS9jLWFkYS1zcGVjLmMgYy1mYW1pbHkvYy1hZGEtc3BlYy5o IFwKIAkkKENPTkZJR19IKSAkKFNZU1RFTV9IKSAkKFRSRUVfSCkgJChDUFBf SURfREFUQV9IKSAkKFRNX0gpIFwKIAljb3JldHlwZXMuaCB0cmVlLWl0ZXJh dG9yLmggZHVtcGZpbGUuaAorICAKK2MtZmFtaWx5L2FycmF5LW5vdGF0aW9u LWNvbW1vbi5vIDogYy1mYW1pbHkvYXJyYXktbm90YXRpb24tY29tbW9uLmMg JChUUkVFX0gpIFwKKwkkKFNZU1RFTV9IKSAkKFRSRUVfSCkgY29yZXR5cGVz LmggdHJlZS1pdGVyYXRvci5oICQoRElBR05PU1RJQ19DT1JFX0gpCiAKIGMt ZmFtaWx5L3N0dWItb2JqYy5vIDogYy1mYW1pbHkvc3R1Yi1vYmpjLmMgJChD T05GSUdfSCkgJChTWVNURU1fSCkgXAogCWNvcmV0eXBlcy5oICQoVFJFRV9I KSAkKENfQ09NTU9OX0gpIGMtZmFtaWx5L2Mtb2JqYy5oCmRpZmYgLS1naXQg YS9nY2MvYy1mYW1pbHkvYXJyYXktbm90YXRpb24tY29tbW9uLmMgYi9nY2Mv Yy1mYW1pbHkvYXJyYXktbm90YXRpb24tY29tbW9uLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmZDgwYgotLS0gL2Rldi9udWxs CisrKyBiL2djYy9jLWZhbWlseS9hcnJheS1ub3RhdGlvbi1jb21tb24uYwpA QCAtMCwwICsxLDE5MyBAQAorLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl IEludGVsKFIpIENpbGsoVE0pIFBsdXMgc3VwcG9ydAorICAgVGhpcyBmaWxl IGNvbnRhaW5zIHRoZSBidWlsdGluIGZ1bmN0aW9ucyBmb3IgQXJyYXkKKyAg IG5vdGF0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMjAxMiAgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBCYWxh amkgVi4gSXllciA8YmFsYWppLnYuaXllckBpbnRlbC5jb20+LAorICAgICAg ICAgICAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKworVGhpcyBmaWxlIGlz IHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRl ciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIEdOVQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxv bmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBz ZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNp bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzeXN0ZW0uaCIgCisjaW5j bHVkZSAiY29yZXR5cGVzLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1 ZGUgImxhbmdob29rcy5oIiAKKyNpbmNsdWRlICJ0cmVlLWl0ZXJhdG9yLmgi CisjaW5jbHVkZSAiZGlhZ25vc3RpYy1jb3JlLmgiCisKK2ludCBleHRyYWN0 X3NlY19pbXBsaWNpdF9pbmRleF9hcmcgKGxvY2F0aW9uX3QsIHRyZWUpOwor Ym9vbCBpc19zZWNfaW1wbGljaXRfaW5kZXhfZm4gKHRyZWUpOwordm9pZCBh cnJheV9ub3RhdGlvbl9pbml0X2J1aWx0aW5zICh2b2lkKTsKKworLyogTWFy ayB0aGUgRk5ERUNMIGFzIGNvbGQsIG1lYW5pbmcgdGhhdCB0aGUgZnVuY3Rp b24gc3BlY2lmaWVkIGJ5IEZOREVDTCBpcworICAgbm90IHJ1biBhcyBpcy4g ICovCisKK3N0YXRpYyB2b2lkCittYXJrX2NvbGQgKHRyZWUgZm5kZWNsKQor eworICBERUNMX0FUVFJJQlVURVMgKGZuZGVjbCkgPSB0cmVlX2NvbnMgKGdl dF9pZGVudGlmaWVyICgiY29sZCIpLCBOVUxMX1RSRUUsCisJCQkJCURFQ0xf QVRUUklCVVRFUyAoZm5kZWNsKSk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24g aW5pdGl0aWFsaXplcyBhcnJheSBub3RhdGlvbiBzcGVjaWZpYyBidWlsdGlu IGluZm9ybWF0aW9uLiAgKi8KKworCit2b2lkCithcnJheV9ub3RhdGlvbl9p bml0X2J1aWx0aW5zICh2b2lkKQoreworICB0cmVlIGZ1bmNfdHlwZSA9IE5V TExfVFJFRTsKKyAgdHJlZSBuZXdfZnVuYyA9IE5VTExfVFJFRTsKKyAgZnVu Y190eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZV9saXN0IChpbnRlZ2VyX3R5 cGVfbm9kZSwgcHRyX3R5cGVfbm9kZSwKKwkJCQkJTlVMTF9UUkVFKTsKKyAg bmV3X2Z1bmMgPSBidWlsZF9mbl9kZWNsICgiX19zZWNfcmVkdWNlX2FkZCIs IGZ1bmNfdHlwZSk7CisgIG1hcmtfY29sZCAobmV3X2Z1bmMpOworICBuZXdf ZnVuYyA9IGxhbmdfaG9va3MuZGVjbHMucHVzaGRlY2wgKG5ld19mdW5jKTsK KworICBmdW5jX3R5cGUgPSBidWlsZF9mdW5jdGlvbl90eXBlX2xpc3QgKGlu dGVnZXJfdHlwZV9ub2RlLCBwdHJfdHlwZV9ub2RlLAorCQkJCQlOVUxMX1RS RUUpOworICBuZXdfZnVuYyA9IGJ1aWxkX2ZuX2RlY2wgKCJfX3NlY19yZWR1 Y2VfbXVsIiwgZnVuY190eXBlKTsKKyAgbWFya19jb2xkIChuZXdfZnVuYyk7 CisgIG5ld19mdW5jID0gbGFuZ19ob29rcy5kZWNscy5wdXNoZGVjbCAobmV3 X2Z1bmMpOworCisgIGZ1bmNfdHlwZSA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGVf bGlzdCAoaW50ZWdlcl90eXBlX25vZGUsIHB0cl90eXBlX25vZGUsCisJCQkJ CU5VTExfVFJFRSk7CisgIG5ld19mdW5jID0gYnVpbGRfZm5fZGVjbCAoIl9f c2VjX3JlZHVjZV9hbGxfemVybyIsIGZ1bmNfdHlwZSk7CisgIG1hcmtfY29s ZCAobmV3X2Z1bmMpOworICBuZXdfZnVuYyA9IGxhbmdfaG9va3MuZGVjbHMu cHVzaGRlY2wgKG5ld19mdW5jKTsKKworICBmdW5jX3R5cGUgPSBidWlsZF9m dW5jdGlvbl90eXBlX2xpc3QgKGludGVnZXJfdHlwZV9ub2RlLCBwdHJfdHlw ZV9ub2RlLAorCQkJCQlOVUxMX1RSRUUpOworICBuZXdfZnVuYyA9IGJ1aWxk X2ZuX2RlY2wgKCJfX3NlY19yZWR1Y2VfYW55X3plcm8iLCBmdW5jX3R5cGUp OworICBtYXJrX2NvbGQgKG5ld19mdW5jKTsKKyAgbmV3X2Z1bmMgPSBsYW5n X2hvb2tzLmRlY2xzLnB1c2hkZWNsIChuZXdfZnVuYyk7CisKKyAgZnVuY190 eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZV9saXN0IChpbnRlZ2VyX3R5cGVf bm9kZSwgcHRyX3R5cGVfbm9kZSwKKwkJCQkJTlVMTF9UUkVFKTsKKyAgbmV3 X2Z1bmMgPSBidWlsZF9mbl9kZWNsICgiX19zZWNfcmVkdWNlX21heCIsIGZ1 bmNfdHlwZSk7CisgIG1hcmtfY29sZCAobmV3X2Z1bmMpOworICBuZXdfZnVu YyA9IGxhbmdfaG9va3MuZGVjbHMucHVzaGRlY2wgKG5ld19mdW5jKTsKKyAg CisgIGZ1bmNfdHlwZSA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGVfbGlzdCAoaW50 ZWdlcl90eXBlX25vZGUsIHB0cl90eXBlX25vZGUsCisJCQkJCU5VTExfVFJF RSk7CisgIG5ld19mdW5jID0gYnVpbGRfZm5fZGVjbCAoIl9fc2VjX3JlZHVj ZV9taW4iLCBmdW5jX3R5cGUpOworICBtYXJrX2NvbGQgKG5ld19mdW5jKTsK KyAgbmV3X2Z1bmMgPSBsYW5nX2hvb2tzLmRlY2xzLnB1c2hkZWNsIChuZXdf ZnVuYyk7CisKKyAgZnVuY190eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZV9s aXN0IChpbnRlZ2VyX3R5cGVfbm9kZSwgcHRyX3R5cGVfbm9kZSwKKwkJCQkJ TlVMTF9UUkVFKTsKKyAgbmV3X2Z1bmMgPSBidWlsZF9mbl9kZWNsICgiX19z ZWNfcmVkdWNlX21pbl9pbmQiLCBmdW5jX3R5cGUpOworICBtYXJrX2NvbGQg KG5ld19mdW5jKTsKKyAgbmV3X2Z1bmMgPSBsYW5nX2hvb2tzLmRlY2xzLnB1 c2hkZWNsIChuZXdfZnVuYyk7CisKKyAgZnVuY190eXBlID0gYnVpbGRfZnVu Y3Rpb25fdHlwZV9saXN0IChpbnRlZ2VyX3R5cGVfbm9kZSwgcHRyX3R5cGVf bm9kZSwKKwkJCQkJTlVMTF9UUkVFKTsKKyAgbmV3X2Z1bmMgPSBidWlsZF9m bl9kZWNsICgiX19zZWNfcmVkdWNlX21heF9pbmQiLCBmdW5jX3R5cGUpOwor ICBtYXJrX2NvbGQgKG5ld19mdW5jKTsKKyAgbmV3X2Z1bmMgPSBsYW5nX2hv b2tzLmRlY2xzLnB1c2hkZWNsIChuZXdfZnVuYyk7CisKKyAgZnVuY190eXBl ID0gYnVpbGRfZnVuY3Rpb25fdHlwZV9saXN0IChpbnRlZ2VyX3R5cGVfbm9k ZSwgcHRyX3R5cGVfbm9kZSwKKwkJCQkgICAgICAgTlVMTF9UUkVFKTsKKyAg bmV3X2Z1bmMgPSBidWlsZF9mbl9kZWNsICgiX19zZWNfcmVkdWNlX2FueV9u b256ZXJvIiwgZnVuY190eXBlKTsKKyAgbWFya19jb2xkIChuZXdfZnVuYyk7 CisgIG5ld19mdW5jID0gbGFuZ19ob29rcy5kZWNscy5wdXNoZGVjbCAobmV3 X2Z1bmMpOworCisgIGZ1bmNfdHlwZSA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGVf bGlzdCAoaW50ZWdlcl90eXBlX25vZGUsIHB0cl90eXBlX25vZGUsCisJCQkJ CU5VTExfVFJFRSk7CisgIG5ld19mdW5jID0gYnVpbGRfZm5fZGVjbCAoIl9f c2VjX3JlZHVjZV9hbGxfbm9uemVybyIsIGZ1bmNfdHlwZSk7CisgIG1hcmtf Y29sZCAobmV3X2Z1bmMpOworICBuZXdfZnVuYyA9IGxhbmdfaG9va3MuZGVj bHMucHVzaGRlY2wgKG5ld19mdW5jKTsKKyAgCisgIGZ1bmNfdHlwZSA9IGJ1 aWxkX2Z1bmN0aW9uX3R5cGVfbGlzdCAoaW50ZWdlcl90eXBlX25vZGUsIGlu dGVnZXJfdHlwZV9ub2RlLAorCQkJCQlOVUxMX1RSRUUpOworICBuZXdfZnVu YyA9IGJ1aWxkX2ZuX2RlY2wgKCJfX3NlY19pbXBsaWNpdF9pbmRleCIsIGZ1 bmNfdHlwZSk7CisgIG1hcmtfY29sZCAobmV3X2Z1bmMpOworICBuZXdfZnVu YyA9IGxhbmdfaG9va3MuZGVjbHMucHVzaGRlY2wgKG5ld19mdW5jKTsKKwor ICBmdW5jX3R5cGUgPSBidWlsZF9mdW5jdGlvbl90eXBlX2xpc3QgKGludGVn ZXJfdHlwZV9ub2RlLCBwdHJfdHlwZV9ub2RlLAorCQkJCQlwdHJfdHlwZV9u b2RlLCBwdHJfdHlwZV9ub2RlLAorCQkJCQlOVUxMX1RSRUUpOworICBuZXdf ZnVuYyA9IGJ1aWxkX2ZuX2RlY2wgKCJfX3NlY19yZWR1Y2UiLCBmdW5jX3R5 cGUpOworICBuZXdfZnVuYyA9IGxhbmdfaG9va3MuZGVjbHMucHVzaGRlY2wg KG5ld19mdW5jKTsKKworICBmdW5jX3R5cGUgPSBidWlsZF9mdW5jdGlvbl90 eXBlX2xpc3QgKHB0cl90eXBlX25vZGUsIHB0cl90eXBlX25vZGUsCisJCQkJ CXB0cl90eXBlX25vZGUsIHB0cl90eXBlX25vZGUsCisJCQkJCU5VTExfVFJF RSk7CisgIG5ld19mdW5jID0gYnVpbGRfZm5fZGVjbCAoIl9fc2VjX3JlZHVj ZV9tdXRhdGluZyIsIGZ1bmNfdHlwZSk7CisgIG5ld19mdW5jID0gbGFuZ19o b29rcy5kZWNscy5wdXNoZGVjbCAobmV3X2Z1bmMpOworICByZXR1cm47Cit9 CisKKy8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgZnVuY3Rpb24gY2FsbCBzcGVj aWZpZWQgaW4gRlVOQ19OQU1FIGlzCisgICBfX3NlY19pbXBsaWNpdF9pbmRl eC4gICovCisKK2Jvb2wKK2lzX3NlY19pbXBsaWNpdF9pbmRleF9mbiAodHJl ZSBmdW5jX25hbWUpCit7CisgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uX25hbWUg PSBOVUxMOworCisgIGlmICghZnVuY19uYW1lKQorICAgIHJldHVybiBmYWxz ZTsKKworICBpZiAoVFJFRV9DT0RFIChmdW5jX25hbWUpID09IEZVTkNUSU9O X0RFQ0wpCisgICAgZnVuY19uYW1lID0gREVDTF9OQU1FIChmdW5jX25hbWUp OworICAKKyAgaWYgKFRSRUVfQ09ERSAoZnVuY19uYW1lKSA9PSBJREVOVElG SUVSX05PREUpCisgICAgZnVuY3Rpb25fbmFtZSA9IElERU5USUZJRVJfUE9J TlRFUiAoZnVuY19uYW1lKTsKKyAgZWxzZSBpZiAoVFJFRV9DT0RFIChmdW5j X25hbWUpID09IEFERFJfRVhQUikKKyAgICB7CisgICAgICBmdW5jX25hbWUg PSBUUkVFX09QRVJBTkQgKGZ1bmNfbmFtZSwgMCk7CisgICAgICBpZiAoVFJF RV9DT0RFIChmdW5jX25hbWUpID09IEZVTkNUSU9OX0RFQ0wpCisJaWYgKERF Q0xfTkFNRSAoZnVuY19uYW1lKSkKKwkgIGZ1bmN0aW9uX25hbWUgPSBJREVO VElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoZnVuY19uYW1lKSk7CisgICAg fQorCisgIGlmICghZnVuY3Rpb25fbmFtZSkKKyAgICByZXR1cm4gZmFsc2U7 CisgIGVsc2UgaWYgKCFzdHJjbXAgKGZ1bmN0aW9uX25hbWUsICJfX3NlY19p bXBsaWNpdF9pbmRleCIpKQorICAgIHJldHVybiB0cnVlOworICBlbHNlCisg ICAgcmV0dXJuIGZhbHNlOworfQorCisvKiBSZXR1cm5zIHRoZSBmaXJzdCBh bmQgb25seSBhcmd1bWVudCBmb3IgRk4sIHdoaWNoIHNob3VsZCBiZSBhCisg ICBzZWNfaW1wbGljaXRfaW5kZXggZnVuY3Rpb24uICBGTidzIGxvY2F0aW9u IGluIHRoZSBzb3VyY2UgZmlsZSBpcyBpcyAKKyAgIGluZGljYXRlZCBieSBM T0NBVElPTi4gICovCisKK2ludAorZXh0cmFjdF9zZWNfaW1wbGljaXRfaW5k ZXhfYXJnIChsb2NhdGlvbl90IGxvY2F0aW9uLCB0cmVlIGZuKQoreworICB0 cmVlIGZuX2FyZzsKKyAgSE9TVF9XSURFX0lOVCByZXR1cm5faW50ID0gMDsK KyAgaWYgKCFmbikKKyAgICByZXR1cm4gLTE7CisKKyAgaWYgKFRSRUVfQ09E RSAoZm4pID09IENBTExfRVhQUikKKyAgICB7CisgICAgICBmbl9hcmcgPSBD QUxMX0VYUFJfQVJHIChmbiwgMCk7CisgICAgICBpZiAocmVhbGx5X2NvbnN0 YW50X3AgKGZuX2FyZykpCisJcmV0dXJuX2ludCA9IChpbnQpIGludF9jc3Rf dmFsdWUgKGZuX2FyZyk7CisgICAgICBlbHNlCisJeworCSAgaWYgKGxvY2F0 aW9uID09IFVOS05PV05fTE9DQVRJT04gJiYgRVhQUl9IQVNfTE9DQVRJT04g KGZuKSkKKwkgICAgbG9jYXRpb24gPSBFWFBSX0xPQ0FUSU9OIChmbik7CisJ ICBlcnJvcl9hdCAobG9jYXRpb24sICJfX3NlY19pbXBsaWNpdF9pbmRleCBw YXJhbWV0ZXIgbXVzdCBiZSBhICIgCisJCSAgICAiY29uc3RhbnQgaW50ZWdl ciBleHByZXNzaW9uIik7CisJICByZXR1cm4gLTE7CisJfQorICAgIH0KKyAg cmV0dXJuIHJldHVybl9pbnQ7Cit9CmRpZmYgLS1naXQgYS9nY2MvYy1mYW1p bHkvYy1jb21tb24uYyBiL2djYy9jLWZhbWlseS9jLWNvbW1vbi5jCmluZGV4 IDZkZTJmMWMuLjdjNDI1YTMgMTAwNjQ0Ci0tLSBhL2djYy9jLWZhbWlseS9j LWNvbW1vbi5jCisrKyBiL2djYy9jLWZhbWlseS9jLWNvbW1vbi5jCkBAIC01 MDE0LDYgKzUwMTQsOSBAQCBjX2RlZmluZV9idWlsdGlucyAodHJlZSB2YV9s aXN0X3JlZl90eXBlX25vZGUsIHRyZWUgdmFfbGlzdF9hcmdfdHlwZV9ub2Rl KQogI2luY2x1ZGUgImJ1aWx0aW5zLmRlZiIKICN1bmRlZiBERUZfQlVJTFRJ TgogCisgIC8qIEluaXRpYWxpemUgYnVpbHRpbiBmdW5jdGlvbnMgZm9yIENp bGsgUGx1cy4gICovCisgIGlmIChmbGFnX2VuYWJsZV9jaWxrcGx1cykKKyAg ICBhcnJheV9ub3RhdGlvbl9pbml0X2J1aWx0aW5zICgpOwogICB0YXJnZXRt LmluaXRfYnVpbHRpbnMgKCk7CiAKICAgYnVpbGRfY29tbW9uX2J1aWx0aW5f bm9kZXMgKCk7CkBAIC0xMTExMyw2ICsxMTExNiw3IEBAIGNfY29tbW9uX2lu aXRfdHMgKHZvaWQpCiB7CiAgIE1BUktfVFNfVFlQRUQgKENfTUFZQkVfQ09O U1RfRVhQUik7CiAgIE1BUktfVFNfVFlQRUQgKEVYQ0VTU19QUkVDSVNJT05f RVhQUik7CisgIE1BUktfVFNfVFlQRUQgKEFSUkFZX05PVEFUSU9OX1JFRik7 CiB9CiAKIC8qIEJ1aWxkIGEgdXNlci1kZWZpbmVkIG51bWVyaWMgbGl0ZXJh bCBvdXQgb2YgYW4gaW50ZWdlciBjb25zdGFudCB0eXBlIFZBTFVFCmRpZmYg LS1naXQgYS9nY2MvYy1mYW1pbHkvYy1jb21tb24uZGVmIGIvZ2NjL2MtZmFt aWx5L2MtY29tbW9uLmRlZgppbmRleCBiNmRmOWEzLi4yNGU2ZmY5IDEwMDY0 NAotLS0gYS9nY2MvYy1mYW1pbHkvYy1jb21tb24uZGVmCisrKyBiL2djYy9j LWZhbWlseS9jLWNvbW1vbi5kZWYKQEAgLTU3LDYgKzU3LDE0IEBAIERFRlRS RUVDT0RFIChVU0VSREVGX0xJVEVSQUwsICJ1c2VyZGVmX2xpdGVyYWwiLCB0 Y2NfZXhjZXB0aW9uYWwsIDMpCiAgICBvciBmb3IgdGhlIHB1cnBvc2Ugb2Yg LVdzaXplb2YtcG9pbnRlci1tZW1hY2Nlc3Mgd2FybmluZy4gICovCiBERUZU UkVFQ09ERSAoU0laRU9GX0VYUFIsICJzaXplb2ZfZXhwciIsIHRjY19leHBy ZXNzaW9uLCAxKQogCisvKiBBcnJheSBOb3RhdGlvbiBleHByZXNzaW9uLgor ICAgT3BlcmFuZCAwIGlzIHRoZSBhcnJheTsgb3BlcmFuZCAxIGlzIHRoZSBz dGFydGluZyBhcnJheSBpbmRleAorICAgT3BlcmFuZCAyIGNvbnRhaW5zIHRo ZSBudW1iZXIgb2YgZWxlbWVudHMgeW91IG5lZWQgdG8gYWNjZXNzLgorICAg T3BlcmFuZCAzIGlzIHRoZSBzdHJpZGUuCisgICBPcGVyYW5kIDQgaXMgdGhl IGVsZW1lbnQgc2l6ZSBtZWFzdXJlZCBpbiB1bml0cyBvZiBhbGlnbm1lbnRz IG9mCisgICBlbGVtZW50IHR5cGUuICovCitERUZUUkVFQ09ERSAoQVJSQVlf Tk9UQVRJT05fUkVGLCAiYXJyYXlfbm90YXRpb25fcmVmIiwgdGNjX3JlZmVy ZW5jZSwgNSkgCisKIC8qCiBMb2NhbCB2YXJpYWJsZXM6CiBtb2RlOmMKZGlm ZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLWNvbW1vbi5oIGIvZ2NjL2MtZmFt aWx5L2MtY29tbW9uLmgKaW5kZXggY2VmZTkyZC4uNmM1NTY4YyAxMDA2NDQK LS0tIGEvZ2NjL2MtZmFtaWx5L2MtY29tbW9uLmgKKysrIGIvZ2NjL2MtZmFt aWx5L2MtY29tbW9uLmgKQEAgLTU0Miw2ICs1NDIsOCBAQCBleHRlcm4gdHJl ZSBwdXNoZGVjbF90b3BfbGV2ZWwgKHRyZWUpOwogZXh0ZXJuIHRyZWUgcHVz aGRlY2wgKHRyZWUpOwogZXh0ZXJuIHRyZWUgYnVpbGRfbW9kaWZ5X2V4cHIg KGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIGVudW0gdHJlZV9jb2RlLAogCQkJ ICAgICAgIGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUg YnVpbGRfYXJyYXlfbm90YXRpb25fZXhwciAobG9jYXRpb25fdCwgdHJlZSwg dHJlZSwgZW51bSB0cmVlX2NvZGUsCisJCQkJICAgICAgIGxvY2F0aW9uX3Qs IHRyZWUsIHRyZWUpOwogZXh0ZXJuIHRyZWUgYnVpbGRfaW5kaXJlY3RfcmVm IChsb2NhdGlvbl90LCB0cmVlLCByZWZfb3BlcmF0b3IpOwogCiBleHRlcm4g aW50IGZpZWxkX2RlY2xfY21wIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQg Kik7CkBAIC0xMTIyLDQgKzExMjQsNDEgQEAgZXh0ZXJuIHRyZWUgYnVpbGRf dXNlcmRlZl9saXRlcmFsICh0cmVlIHN1ZmZpeF9pZCwgdHJlZSB2YWx1ZSwg dHJlZSBudW1fc3RyaW5nKTsKIAogZXh0ZXJuIHZvaWQgY29udmVydF92ZWN0 b3JfdG9fcG9pbnRlcl9mb3Jfc3Vic2NyaXB0IChsb2NhdGlvbl90LCB0cmVl KiwgdHJlZSk7CiAKKy8qIFRoZXNlICNkZWZpbmVzIGFsbG93IHVzZXJzIHRv IGFjY2VzcyBkaWZmZXJlbnQgb3BlcmFuZHMgb2YgdGhlIAorICAgICAgYXJy YXkgbm90YXRpb24gdHJlZS4gICovCisKKyNkZWZpbmUgQVJSQVlfTk9UQVRJ T05fQ0hFQ0soTk9ERSkgVFJFRV9DSEVDSyAoTk9ERSwgQVJSQVlfTk9UQVRJ T05fUkVGKQorI2RlZmluZSBBUlJBWV9OT1RBVElPTl9BUlJBWShOT0RFKSBc CisgIFRSRUVfT1BFUkFORCAoQVJSQVlfTk9UQVRJT05fQ0hFQ0sgKE5PREUp LCAwKQorI2RlZmluZSBBUlJBWV9OT1RBVElPTl9TVEFSVChOT0RFKSBcCisg IFRSRUVfT1BFUkFORCAoQVJSQVlfTk9UQVRJT05fQ0hFQ0sgKE5PREUpLCAx KQorI2RlZmluZSBBUlJBWV9OT1RBVElPTl9MRU5HVEgoTk9ERSkgXAorICBU UkVFX09QRVJBTkQgKEFSUkFZX05PVEFUSU9OX0NIRUNLIChOT0RFKSwgMikK KyNkZWZpbmUgQVJSQVlfTk9UQVRJT05fU1RSSURFKE5PREUpIFwKKyAgVFJF RV9PUEVSQU5EIChBUlJBWV9OT1RBVElPTl9DSEVDSyAoTk9ERSksIDMpCisj ZGVmaW5lIEFSUkFZX05PVEFUSU9OX1RZUEUoTk9ERSkgXAorICBUUkVFX09Q RVJBTkQgKEFSUkFZX05PVEFUSU9OX0NIRUNLIChOT0RFKSwgNCkKKworLyog SG9sZHMgdG8gdHlwZSBvZiB0aGUgcmVkdWN0aW9uIGZ1bmN0aW9ucyB1c2Vk IGluIEFycmF5IG5vdGF0aW9ucywgdGhhdCBpcworICAgcGFydCBvZiB0aGUg Q2lsayBQbHVzIGxhbmd1YWdlIGV4dGVuc2lvbnMuICAqLwordHlwZWRlZiBl bnVtIGFycmF5X25vdGF0aW9uX3JlZHVjZV90eXBlIHsKKyAgUkVEVUNFX1VO S05PV04gPSAwLAorICBSRURVQ0VfQURELAorICBSRURVQ0VfTVVMLAorICBS RURVQ0VfQUxMX1pFUk9TLAorICBSRURVQ0VfQUxMX05PTlpFUk9TLAorICBS RURVQ0VfQU5ZX1pFUk9TLAorICBSRURVQ0VfQU5ZX05PTlpFUk9TLAorICBS RURVQ0VfTUFYLAorICBSRURVQ0VfTUlOLAorICBSRURVQ0VfTUFYX0lOREVY LAorICBSRURVQ0VfTUlOX0lOREVYLAorICBSRURVQ0VfQ1VTVE9NLAorICBS RURVQ0VfTVVUQVRJTkcKK30gYW5fcmVkdWNlX3R5cGU7CisKK2V4dGVybiBp bnQgZXh0cmFjdF9zZWNfaW1wbGljaXRfaW5kZXhfYXJnIChsb2NhdGlvbl90 LCB0cmVlKTsKK2V4dGVybiBib29sIGlzX3NlY19pbXBsaWNpdF9pbmRleF9m biAodHJlZSk7CitleHRlcm4gdm9pZCBhcnJheV9ub3RhdGlvbl9pbml0X2J1 aWx0aW5zICh2b2lkKTsKKwogI2VuZGlmIC8qICEgR0NDX0NfQ09NTU9OX0gg Ki8KZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLXByZXR0eS1wcmludC5j IGIvZ2NjL2MtZmFtaWx5L2MtcHJldHR5LXByaW50LmMKaW5kZXggZWRlY2Nj ZS4uYTJiN2ViNCAxMDA2NDQKLS0tIGEvZ2NjL2MtZmFtaWx5L2MtcHJldHR5 LXByaW50LmMKKysrIGIvZ2NjL2MtZmFtaWx5L2MtcHJldHR5LXByaW50LmMK QEAgLTE0NzcsNiArMTQ3NywxNyBAQCBwcF9jX3Bvc3RmaXhfZXhwcmVzc2lv biAoY19wcmV0dHlfcHJpbnRlciAqcHAsIHRyZWUgZSkKICAgICAgIHBwX2Nf cmlnaHRfYnJhY2tldCAocHApOwogICAgICAgYnJlYWs7CiAKKyAgICBjYXNl IEFSUkFZX05PVEFUSU9OX1JFRjoKKyAgICAgIHBwX3Bvc3RmaXhfZXhwcmVz c2lvbiAocHAsIEFSUkFZX05PVEFUSU9OX0FSUkFZIChlKSk7CisgICAgICBw cF9jX2xlZnRfYnJhY2tldCAocHApOworICAgICAgcHBfcG9zdGZpeF9leHBy ZXNzaW9uIChwcCwgQVJSQVlfTk9UQVRJT05fU1RBUlQgKGUpKTsKKyAgICAg IHBwX2NvbG9uIChwcCk7CisgICAgICBwcF9wb3N0Zml4X2V4cHJlc3Npb24g KHBwLCBBUlJBWV9OT1RBVElPTl9MRU5HVEggKGUpKTsKKyAgICAgIHBwX2Nv bG9uIChwcCk7CisgICAgICBwcF9wb3N0Zml4X2V4cHJlc3Npb24gKHBwLCBB UlJBWV9OT1RBVElPTl9TVFJJREUgKGUpKTsKKyAgICAgIHBwX2NfcmlnaHRf YnJhY2tldCAocHApOworICAgICAgYnJlYWs7CisgICAgICAKICAgICBjYXNl IENBTExfRVhQUjoKICAgICAgIHsKIAljYWxsX2V4cHJfYXJnX2l0ZXJhdG9y IGl0ZXI7CmRpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy5vcHQgYi9nY2Mv Yy1mYW1pbHkvYy5vcHQKaW5kZXggYjAyYzUxNS4uNGJiMTliOSAxMDA2NDQK LS0tIGEvZ2NjL2MtZmFtaWx5L2Mub3B0CisrKyBiL2djYy9jLWZhbWlseS9j Lm9wdApAQCAtNzU5LDYgKzc1OSwxMCBAQCBSZWNvZ25pemUgYnVpbHQtaW4g ZnVuY3Rpb25zCiBmYnVpbHRpbi0KIEMgT2JqQyBDKysgT2JqQysrIEpvaW5l ZAogCitmY2lsa3BsdXMKK0MgT2JqQyBDKysgT2JqQysrIExUTyBSZXBvcnQg VmFyKGZsYWdfZW5hYmxlX2NpbGtwbHVzKSBJbml0KDApCitFbmFibGUgQ2ls ayBQbHVzCisKIGZjaGVjay1uZXcKIEMrKyBPYmpDKysgVmFyKGZsYWdfY2hl Y2tfbmV3KQogQ2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiBuZXcKZGlmZiAt LWdpdCBhL2djYy9jL01ha2UtbGFuZy5pbiBiL2djYy9jL01ha2UtbGFuZy5p bgppbmRleCBhMzljOTFjLi41ODJhYWY2IDEwMDY0NAotLS0gYS9nY2MvYy9N YWtlLWxhbmcuaW4KKysrIGIvZ2NjL2MvTWFrZS1sYW5nLmluCkBAIC01OCw3 ICs1OCw3IEBAIGMvZ2Njc3BlYy5vOiBjL2djY3NwZWMuYyAkKENPTkZJR19I KSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaCAkKFRNX0gpICQoR0NDX0gpIFwK ICMgTGFuZ3VhZ2Utc3BlY2lmaWMgb2JqZWN0IGZpbGVzIGZvciBDIGFuZCBP YmplY3RpdmUgQy4KIENfQU5EX09CSkNfT0JKUyA9IGF0dHJpYnMubyBjL2Mt ZXJyb3JzLm8gYy9jLWRlY2wubyBjL2MtdHlwZWNrLm8gXAogICBjL2MtY29u dmVydC5vIGMvYy1hdXgtaW5mby5vIGMvYy1vYmpjLWNvbW1vbi5vIGMvYy1w YXJzZXIubyBcCi0gICQoQ19DT01NT05fT0JKUykgJChDX1RBUkdFVF9PQkpT KQorICBjL2MtYXJyYXktbm90YXRpb24ubyAkKENfQ09NTU9OX09CSlMpICQo Q19UQVJHRVRfT0JKUykKIAogIyBMYW5ndWFnZS1zcGVjaWZpYyBvYmplY3Qg ZmlsZXMgZm9yIEMuCiBDX09CSlMgPSBjL2MtbGFuZy5vIGMtZmFtaWx5L3N0 dWItb2JqYy5vICQoQ19BTkRfT0JKQ19PQkpTKQpAQCAtMTk0LDMgKzE5NCw4 IEBAIGMvYy10eXBlY2subyA6IGMvYy10eXBlY2suYyBjL2MtbGFuZy5oICQo Q09ORklHX0gpICQoU1lTVEVNX0gpIGNvcmV0eXBlcy5oICQoVE1fCiAJbGFu Z2hvb2tzLmggdHJlZS1pdGVyYXRvci5oICQoQklUTUFQX0gpICQoR0lNUExF X0gpIFwKIAljLWZhbWlseS9jLW9iamMuaAogCitjL2MtYXJyYXktbm90YXRp b24ubzogYy9jLWFycmF5LW5vdGF0aW9uLmMgYy9jLWxhbmcuaCAkKENPTkZJ R19IKSBcCisJJChTWVNURU1fSCkgY29yZXR5cGVzLmggJChUUkVFX0gpICQo Q19UUkVFX0gpICQoVEFSR0VUX0gpIFwKKwlpbnRsLmggb3V0cHV0LmggJChF WFBSX0gpIGxhbmdob29rcy5oIHRyZWUtaXRlcmF0b3IuaCAkKEJJVE1BUF9I KSBcCisJJChHSU1QTEVfSCkgYy1mYW1pbHkvYy1vYmpjLmgKKwpkaWZmIC0t Z2l0IGEvZ2NjL2MvYy1hcnJheS1ub3RhdGlvbi5jIGIvZ2NjL2MvYy1hcnJh eS1ub3RhdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjk3ZjNkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvYy9jLWFycmF5 LW5vdGF0aW9uLmMKQEAgLTAsMCArMSwyNDcyIEBACisvKiBUaGlzIGZpbGUg aXMgcGFydCBvZiB0aGUgSW50ZWwoUikgQ2lsayhUTSkgUGx1cyBzdXBwb3J0 CisgICBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gaGFuZGxlIEFy cmF5IE5vdGF0aW9uIGV4cHJlc3Npb24KKyAgIGhhbmRsaW5nIHJvdXRpbmVz IGluIHRoZSBDIENvbXBpbGVyLgorICAgQ29weXJpZ2h0IChDKSAyMDExLCAy MDEyICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRy aWJ1dGVkIGJ5IEJhbGFqaSBWLiBJeWVyIDxiYWxhamkudi5peWVyQGludGVs LmNvbT4sCisgICAgICAgICAgICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbi4K KworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9y IChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisg ICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwgYnV0CisgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg YWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5v dCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICov CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzeXN0ZW0uaCIK KyNpbmNsdWRlICJjb3JldHlwZXMuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisj aW5jbHVkZSAiYy10cmVlLmgiCisjaW5jbHVkZSAidHJlZS1pdGVyYXRvci5o IgorI2luY2x1ZGUgIm9wdHMuaCIKKyNpbmNsdWRlICJnY2MuaCIKKyNpbmNs dWRlICJjLWZhbWlseS9jLWNvbW1vbi5oIgorCit2b2lkIHJlcGxhY2VfYXJy YXlfbm90YXRpb25zICh0cmVlICosIGJvb2wsIHRyZWUgKiwgdHJlZSAqLCBp bnQpOwordm9pZCBmaW5kX3JhbmsgKHRyZWUsIGJvb2wsIGludCAqKTsKK3Zv aWQgZXh0cmFjdF9hcnJheV9ub3RhdGlvbl9leHBycyAodHJlZSwgYm9vbCwg dHJlZSAqKiwgaW50ICopOwordHJlZSBmaXhfY29uZGl0aW9uYWxfYXJyYXlf bm90YXRpb25zICh0cmVlKTsKK3N0cnVjdCBjX2V4cHIgZml4X2FycmF5X25v dGF0aW9uX2V4cHIgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLAorCQkJ CSAgICAgICBzdHJ1Y3QgY19leHByKTsKK3N0YXRpYyBib29sIGlzX2J1aWx0 aW5fYXJyYXlfbm90YXRpb25fZm4gKHRyZWUgZnVuY19uYW1lLCBhbl9yZWR1 Y2VfdHlwZSAqdHlwZSk7CitzdGF0aWMgdHJlZSBmaXhfYnVpbHRpbl9hcnJh eV9ub3RhdGlvbl9mbiAodHJlZSBhbl9idWlsdGluX2ZuLCB0cmVlICpuZXdf dmFyKTsKK2Jvb2wgY29udGFpbnNfYXJyYXlfbm90YXRpb25fZXhwciAodHJl ZSBleHByKTsKK3RyZWUgZXhwYW5kX2FycmF5X25vdGF0aW9uX2V4cHJzICh0 cmVlIHQpOworCisKKy8qIFJldHVybnMgdGhlIHJhbmsgb2YgQVJSQVkgdGhy b3VnaCB0aGUgKlJBTksuICBUaGUgdXNlciBjYW4gc3BlY2lmeSB3aGV0aGVy CisgICAocyloZSB3YW50cyB0byBzdGVwIGludG8gYXJyYXlfbm90YXRpb24t c3BlY2lmaWMgYnVpbHRpbiBmdW5jdGlvbnMKKyAgIChzcGVjaWZpZWQgYnkg dGhlIElHTk9SRV9CVUlMVElOX0ZOKS4KKworICAgRm9yIGV4YW1wbGUsIGFu IGFycmF5IG5vdGF0aW9uIG9mIEFbOl1bOl0gb3IgQlswOjEwXVswOjU6Ml0g b3IgQ1s1XVs6XVsxOjBdCisgICBhbGwgaGF2ZSBhIHJhbmsgb2YgMi4gICov CisKK3ZvaWQKK2ZpbmRfcmFuayAodHJlZSBhcnJheSwgYm9vbCBpZ25vcmVf YnVpbHRpbl9mbiwgaW50ICpyYW5rKQoreworICB0cmVlIGlpX3RyZWU7Cisg IGludCBjdXJyZW50X3JhbmsgPSAwLCBpaSA9IDA7CisgIGFuX3JlZHVjZV90 eXBlIGR1bW15X3R5cGUgPSBSRURVQ0VfVU5LTk9XTjsKKyAgaWYgKCFhcnJh eSkKKyAgICByZXR1cm47CisgIGVsc2UgaWYgKFRSRUVfQ09ERSAoYXJyYXkp ID09IEFSUkFZX05PVEFUSU9OX1JFRikKKyAgICB7CisgICAgICBmb3IgKGlp X3RyZWUgPSBhcnJheTsKKwkgICBpaV90cmVlICYmIFRSRUVfQ09ERSAoaWlf dHJlZSkgPT0gQVJSQVlfTk9UQVRJT05fUkVGOworCSAgIGlpX3RyZWUgPSBB UlJBWV9OT1RBVElPTl9BUlJBWSAoaWlfdHJlZSkpCisJY3VycmVudF9yYW5r Kys7CisgICAgICAKKyAgICAgIGlmICgqcmFuayAhPSAwICYmICpyYW5rICE9 IGN1cnJlbnRfcmFuaykKKwllcnJvciAoIlJhbmsgTWlzbWF0Y2ghIik7Cisg ICAgICBlbHNlIGlmICgqcmFuayA9PSAwKQorCSpyYW5rID0gY3VycmVudF9y YW5rOworICAgIH0KKyAgZWxzZSBpZiAoVFJFRV9DT0RFIChhcnJheSkgPT0g U1RBVEVNRU5UX0xJU1QpCisgICAgeworICAgICAgdHJlZV9zdG10X2l0ZXJh dG9yIGlpX3RzaTsKKyAgICAgIGZvciAoaWlfdHNpID0gdHNpX3N0YXJ0IChh cnJheSk7ICF0c2lfZW5kX3AgKGlpX3RzaSk7CisJICAgdHNpX25leHQgKCZp aV90c2kpKQorCWZpbmRfcmFuayAoKnRzaV9zdG10X3B0ciAoaWlfdHNpKSwg aWdub3JlX2J1aWx0aW5fZm4sIHJhbmspOworICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIGlmIChUUkVFX0NPREUgKGFycmF5KSA9PSBDQUxMX0VYUFIp CisJeworCSAgdHJlZSBmdW5jX25hbWUgPSBDQUxMX0VYUFJfRk4gKGFycmF5 KTsKKwkgIGlmIChUUkVFX0NPREUgKGZ1bmNfbmFtZSkgPT0gQUREUl9FWFBS KQorCSAgICBpZiAoIWlnbm9yZV9idWlsdGluX2ZuKQorCSAgICAgIGlmIChp c19idWlsdGluX2FycmF5X25vdGF0aW9uX2ZuIChmdW5jX25hbWUsICZkdW1t eV90eXBlKSkKKwkJLyogSWYgaXQgaXMgYSBidWlsdGluIGZ1bmN0aW9uLCB0 aGVuIHdlIGtub3cgaXQgcmV0dXJucyBhIAorCQkgICBzY2FsYXIuICAqLwor CQlyZXR1cm47CisJICBpZiAoVFJFRV9DT0RFIChUUkVFX09QRVJBTkQgKGFy cmF5LCAwKSkgPT0gSU5URUdFUl9DU1QpCisJICAgIHsKKwkgICAgICBpbnQg bGVuZ3RoID0gVFJFRV9JTlRfQ1NUX0xPVyAoVFJFRV9PUEVSQU5EIChhcnJh eSwgMCkpOworCSAgICAgIGZvciAoaWkgPSAwOyBpaSA8IGxlbmd0aDsgaWkr KykKKwkJZmluZF9yYW5rIChUUkVFX09QRVJBTkQgKGFycmF5LCBpaSksIGln bm9yZV9idWlsdGluX2ZuLCByYW5rKTsKKwkgICAgfQorCSAgZWxzZQorCSAg ICBnY2NfdW5yZWFjaGFibGUgKCk7CisJfQorICAgICAgZWxzZSAKKwlmb3Ig KGlpID0gMDsgaWkgPCBUUkVFX0NPREVfTEVOR1RIIChUUkVFX0NPREUgKGFy cmF5KSk7IGlpKyspIAorCSAgZmluZF9yYW5rIChUUkVFX09QRVJBTkQgKGFy cmF5LCBpaSksIGlnbm9yZV9idWlsdGluX2ZuLCByYW5rKTsKKyAgICB9Cisg IHJldHVybjsKK30KKworCisvKiBFeHRyYWN0cyBhbGwgdGhlIGFycmF5IG5v dGF0aW9ucyBzcGVjaWZpZWQgaW4gTk9ERSBhbmQgc3RvcmVzIHRoZW0gaW4g YQorICAgZHluYW1pYyB0cmVlIGFycmF5IG9mIEFSUkFZX0xJU1Qgd2hvc2Ug c2l6ZSBpcyBzdG9yZWQgaW4gKkxJU1RfU0laRS4gIFRoZQorICAgdXNlciBj YW4gc3BlY2lmeSBpZiAocyloZSB3YW50cyB0byBpZ25vcmUgdGhlIGFycmF5 IG5vdGF0aW9ucyBpbnNpZGUgdGhlCisgICBhcnJheS1ub3RhdGlvbiBzcGVj aWZpYyBidWlsdGluIGZ1bmN0aW9ucyAoYnkgc2V0dGluZyBJR05PUkVfQlVJ TFRJTl9GTiB0bworICAgdHJ1ZSkuICAqLworCit2b2lkCitleHRyYWN0X2Fy cmF5X25vdGF0aW9uX2V4cHJzICh0cmVlIG5vZGUsIGJvb2wgaWdub3JlX2J1 aWx0aW5fZm4sCisJCQkgICAgICB0cmVlICoqYXJyYXlfbGlzdCwgaW50ICps aXN0X3NpemUpCit7CisgIGludCBpaSA9IDA7CisgIHRyZWUgKm5ld19hcnJh eV9saXN0ID0gTlVMTDsKKyAgYW5fcmVkdWNlX3R5cGUgZHVtbXlfdHlwZSA9 IFJFRFVDRV9VTktOT1dOOworICAKKyAgaWYgKCFub2RlKQorICAgIHJldHVy bjsKKyAgZWxzZSBpZiAoVFJFRV9DT0RFIChub2RlKSA9PSBBUlJBWV9OT1RB VElPTl9SRUYpCisgICAgeworICAgICAgaWkgPSAqbGlzdF9zaXplOworICAg ICAgbmV3X2FycmF5X2xpc3QgPSBYUkVTSVpFVkVDICh0cmVlLCAqYXJyYXlf bGlzdCwgaWkgKyAxKTsKKyAgICAgIGdjY19hc3NlcnQgKG5ld19hcnJheV9s aXN0KTsKKyAgICAgIG5ld19hcnJheV9saXN0W2lpXSA9IG5vZGU7CisgICAg ICBpaSsrOworICAgICAgKmxpc3Rfc2l6ZSA9IGlpOworICAgICAgKmFycmF5 X2xpc3QgPSBuZXdfYXJyYXlfbGlzdDsKKyAgICAgIHJldHVybjsKKyAgICB9 CisgIGVsc2UgaWYgKFRSRUVfQ09ERSAobm9kZSkgPT0gVFJFRV9MSVNUKQor ICAgIHsKKyAgICAgIGV4dHJhY3RfYXJyYXlfbm90YXRpb25fZXhwcnMgKFRS RUVfUFVSUE9TRSAobm9kZSksIGlnbm9yZV9idWlsdGluX2ZuLAorCQkJCSAg ICBhcnJheV9saXN0LCBsaXN0X3NpemUpOworICAgICAgZXh0cmFjdF9hcnJh eV9ub3RhdGlvbl9leHBycyAoVFJFRV9WQUxVRSAobm9kZSksIGlnbm9yZV9i dWlsdGluX2ZuLAorCQkJCSAgICBhcnJheV9saXN0LCBsaXN0X3NpemUpOwor ICAgICAgZXh0cmFjdF9hcnJheV9ub3RhdGlvbl9leHBycyAoVFJFRV9DSEFJ TiAobm9kZSksIGlnbm9yZV9idWlsdGluX2ZuLAorCQkJCSAgICBhcnJheV9s aXN0LCBsaXN0X3NpemUpOworICAgIH0KKyAgZWxzZSBpZiAoVFJFRV9DT0RF IChub2RlKSA9PSBTVEFURU1FTlRfTElTVCkKKyAgICB7CisgICAgICB0cmVl X3N0bXRfaXRlcmF0b3IgaWlfdHNpOworICAgICAgZm9yIChpaV90c2kgPSB0 c2lfc3RhcnQgKG5vZGUpOyAhdHNpX2VuZF9wIChpaV90c2kpOyB0c2lfbmV4 dCAoJmlpX3RzaSkpCisJZXh0cmFjdF9hcnJheV9ub3RhdGlvbl9leHBycyAo KnRzaV9zdG10X3B0ciAoaWlfdHNpKSwKKwkJCQkgICAgICBpZ25vcmVfYnVp bHRpbl9mbiwgYXJyYXlfbGlzdCwKKwkJCQkgICAgICBsaXN0X3NpemUpOwor ICAgIH0KKyAgZWxzZSBpZiAoVFJFRV9DT0RFIChub2RlKSA9PSBDQUxMX0VY UFIpCisgICAgeworICAgICAgaWYgKGlzX2J1aWx0aW5fYXJyYXlfbm90YXRp b25fZm4gKENBTExfRVhQUl9GTiAobm9kZSksICZkdW1teV90eXBlKSkKKwl7 CisJICBpZiAoaWdub3JlX2J1aWx0aW5fZm4pCisJICAgIHJldHVybjsKKwkg IGVsc2UKKwkgICAgeworCSAgICAgIGlpID0gKmxpc3Rfc2l6ZTsKKwkgICAg ICBuZXdfYXJyYXlfbGlzdCA9IFhSRVNJWkVWRUMgKHRyZWUsICphcnJheV9s aXN0LCBpaSArIDEpOworCSAgICAgIGdjY19hc3NlcnQgKG5ld19hcnJheV9s aXN0KTsKKwkgICAgICBuZXdfYXJyYXlfbGlzdFtpaV0gPSBub2RlOworCSAg ICAgIGlpKys7CisJICAgICAgKmxpc3Rfc2l6ZSA9IGlpOworCSAgICAgICph cnJheV9saXN0ID0gbmV3X2FycmF5X2xpc3Q7CisJICAgICAgcmV0dXJuOwor CSAgICB9CisJfQorICAgICAgaWYgKGlzX3NlY19pbXBsaWNpdF9pbmRleF9m biAoQ0FMTF9FWFBSX0ZOIChub2RlKSkpCisJeworCSAgaWkgPSAqbGlzdF9z aXplOworCSAgbmV3X2FycmF5X2xpc3QgPSBYUkVTSVpFVkVDICh0cmVlLCAq YXJyYXlfbGlzdCwgaWkgKyAxKTsKKwkgIGdjY19hc3NlcnQgKG5ld19hcnJh eV9saXN0KTsgCisJICBuZXdfYXJyYXlfbGlzdFtpaV0gPSBub2RlOworCSAg aWkrKzsKKwkgICpsaXN0X3NpemUgPSBpaTsKKwkgICphcnJheV9saXN0ID0g bmV3X2FycmF5X2xpc3Q7CisJICByZXR1cm47CisJfQorICAgICAgaWYgKFRS RUVfQ09ERSAoVFJFRV9PUEVSQU5EIChub2RlLCAwKSkgPT0gSU5URUdFUl9D U1QpCisJeworCSAgaW50IGxlbmd0aCA9IFRSRUVfSU5UX0NTVF9MT1cgKFRS RUVfT1BFUkFORCAobm9kZSwgMCkpOworCisJICBmb3IgKGlpID0gMDsgaWkg PCBsZW5ndGg7IGlpKyspCisJICAgIGV4dHJhY3RfYXJyYXlfbm90YXRpb25f ZXhwcnMKKwkgICAgICAoVFJFRV9PUEVSQU5EIChub2RlLCBpaSksIGlnbm9y ZV9idWlsdGluX2ZuLCBhcnJheV9saXN0LAorCSAgICAgICBsaXN0X3NpemUp OworCX0KKyAgICAgIGVsc2UKKwlnY2NfdW5yZWFjaGFibGUgKCk7IC8qIFdl IHNob3VsZCBub3QgZ2V0IGhlcmUuICAqLworCSAgCisgICAgfSAKKyAgZWxz ZSAKKyAgICBmb3IgKGlpID0gMDsgaWkgPCBUUkVFX0NPREVfTEVOR1RIIChU UkVFX0NPREUgKG5vZGUpKTsgaWkrKykgCisgICAgICBleHRyYWN0X2FycmF5 X25vdGF0aW9uX2V4cHJzIChUUkVFX09QRVJBTkQgKG5vZGUsIGlpKSwgCisJ CQkJICAgIGlnbm9yZV9idWlsdGluX2ZuLCBhcnJheV9saXN0LCBsaXN0X3Np emUpOworICByZXR1cm47Cit9CisKKworLyogUmVwbGFjZXMgYWxsIG9jY3Vy YW5jZXMgb2YgYXJyYXkgbm90YXRpb25zIGluIHRyZWUgT1JJRyB0aGF0IG1h dGNoZXMgdGhlCisgICBvbmVzIGluIExJU1Qgd2l0aCB0aGUgb25lIGluIEFS UkFZX09QRVJBTkQuICBUaGUgc2l6ZSBvZiBsaXN0IGFuZAorICAgQVJSQVlf T1BFUkFORCBpcyBBUlJBWV9TSVpFLiAgRm9yIGV4YW1wbGUsIEFSUkFZX09Q RVJBTkRbeF0gZm9yIHNvbWUgaW5kZXgKKyAgICd4JyB3aWxsIGhhdmUgdGhl IGVxdWl2YWxlbnQgQVJSQVlfUkVGIGZvciB0aGUgQVJSQVlfTk9UQVRJT05f UkVGIHNwZWNpZmllZAorICAgaW4gTElTVFt4XS4gICBUaGUgIHVzZXIgY2Fu IHNwZWNpZnkgaWYgKHMpaGUgd2FudHMgdG8gaWdub3JlIHRoZSBhcnJheQor ICAgbm90YXRpb25zIGluc2lkZSB0aGUgYXJyYXktbm90YXRpb24gc3BlY2lm aWMgYnVpbHRpbiBmdW5jdGlvbnMgKHVzaW5nIHRoZQorICAgYm9vbCB2YXJp YWJsZSBJR05PUkVfQlVJTFRJTl9GTikuICAqLworCit2b2lkCityZXBsYWNl X2FycmF5X25vdGF0aW9ucyAodHJlZSAqb3JpZywgYm9vbCBpZ25vcmVfYnVp bHRpbl9mbiwgdHJlZSAqbGlzdCwKKwkJCSB0cmVlICphcnJheV9vcGVyYW5k LCBpbnQgYXJyYXlfc2l6ZSkKK3sKKyAgaW50IGlpID0gMDsKKyAgYW5fcmVk dWNlX3R5cGUgZHVtbXlfdHlwZSA9IFJFRFVDRV9VTktOT1dOOworICAKKyAg aWYgKGFycmF5X3NpemUgPT0gMCB8fCAqbGlzdCA9PSBOVUxMIHx8ICEqb3Jp ZykKKyAgICByZXR1cm47CisKKyAgaWYgKFRSRUVfQ09ERSAoKm9yaWcpID09 IEFSUkFZX05PVEFUSU9OX1JFRikKKyAgICB7CisgICAgICBmb3IgKGlpID0g MDsgaWkgPCBhcnJheV9zaXplOyBpaSsrKQorCXsKKwkgIGlmICgqb3JpZyA9 PSBsaXN0W2lpXSkKKwkgICAgKm9yaWcgPSBhcnJheV9vcGVyYW5kW2lpXTsK Kwl9CisgICAgfQorICBlbHNlIGlmIChUUkVFX0NPREUgKCpvcmlnKSA9PSBT VEFURU1FTlRfTElTVCkKKyAgICB7CisgICAgICB0cmVlX3N0bXRfaXRlcmF0 b3IgaWlfdHNpOworICAgICAgZm9yIChpaV90c2kgPSB0c2lfc3RhcnQgKCpv cmlnKTsgIXRzaV9lbmRfcCAoaWlfdHNpKTsgdHNpX25leHQgKCZpaV90c2kp KQorCXJlcGxhY2VfYXJyYXlfbm90YXRpb25zICh0c2lfc3RtdF9wdHIgKGlp X3RzaSksIGlnbm9yZV9idWlsdGluX2ZuLAorCQkJCSBsaXN0LCBhcnJheV9v cGVyYW5kLCBhcnJheV9zaXplKTsKKyAgICB9CisgIGVsc2UgaWYgKFRSRUVf Q09ERSAoKm9yaWcpID09IENBTExfRVhQUikKKyAgICB7CisgICAgICBpZiAo aXNfYnVpbHRpbl9hcnJheV9ub3RhdGlvbl9mbiAoQ0FMTF9FWFBSX0ZOICgq b3JpZyksICZkdW1teV90eXBlKSkKKwl7CisJICBpZiAoIWlnbm9yZV9idWls dGluX2ZuKQorCSAgICB7CisJICAgICAgZm9yIChpaSA9IDA7IGlpIDwgYXJy YXlfc2l6ZTsgaWkrKykKKwkJeworCQkgIGlmICgqb3JpZyA9PSBsaXN0W2lp XSkKKwkJICAgICpvcmlnID0gYXJyYXlfb3BlcmFuZFtpaV07CisJCX0KKwkg ICAgfQorCSAgcmV0dXJuOworCX0KKyAgICAgIGlmIChpc19zZWNfaW1wbGlj aXRfaW5kZXhfZm4gKENBTExfRVhQUl9GTiAoKm9yaWcpKSkKKwl7CisJICBm b3IgKGlpID0gMDsgaWkgPCBhcnJheV9zaXplOyBpaSsrKQorCSAgICB7CisJ ICAgICAgaWYgKCpvcmlnID09IGxpc3RbaWldKQorCQkqb3JpZyA9IGFycmF5 X29wZXJhbmRbaWldOworCSAgICB9CisJICByZXR1cm47CisJfQorICAgICAg aWYgKFRSRUVfQ09ERSAoVFJFRV9PUEVSQU5EICgqb3JpZywgMCkpID09IElO VEVHRVJfQ1NUKQorCXsKKwkgIGludCBsZW5ndGggPSBUUkVFX0lOVF9DU1Rf TE9XIChUUkVFX09QRVJBTkQgKCpvcmlnLCAwKSk7CisJICBmb3IgKGlpID0g MDsgaWkgPCBsZW5ndGg7IGlpKyspCisJICAgIHJlcGxhY2VfYXJyYXlfbm90 YXRpb25zCisJICAgICAgKCZUUkVFX09QRVJBTkQgKCpvcmlnLCBpaSksIGln bm9yZV9idWlsdGluX2ZuLCBsaXN0LAorCSAgICAgICBhcnJheV9vcGVyYW5k LCBhcnJheV9zaXplKTsKKwl9CisgICAgICBlbHNlCisJZ2NjX3VucmVhY2hh YmxlICgpOyAvKiBXZSBzaG91bGQgbm90IGdldCBoZXJlISAgKi8KKyAgICB9 CisgIGVsc2UKKyAgICB7CisgICAgICBmb3IgKGlpID0gMDsgaWkgPCBUUkVF X0NPREVfTEVOR1RIIChUUkVFX0NPREUgKCpvcmlnKSk7IGlpKyspIAorCXJl cGxhY2VfYXJyYXlfbm90YXRpb25zICgmVFJFRV9PUEVSQU5EICgqb3JpZywg aWkpLCBpZ25vcmVfYnVpbHRpbl9mbiwgCisJCQkJIGxpc3QsIGFycmF5X29w ZXJhbmQsIGFycmF5X3NpemUpOworICAgIH0KKyAgcmV0dXJuOworfQorCisv KiBSZXR1cm5zIGEgbG9vcCB3aXRoIEFSUkFZX1JFRiBpbnNpZGUgaXQgd2l0 aCBhbiBhcHByb3ByaWF0ZSBtb2RpZnkgZXhwci4KKyAgIFRoZSBMSFMgYW5k L29yIFJIUyB3aWxsIGJlIGFycmF5IG5vdGF0aW9uIGV4cHJlc3Npb25zIHRo YXQgaGF2ZSBhIE1PRElGWUNPREUKKyAgIFRoZWlyIGxvY2F0aW9ucyBhcmUg c3BlY2lmaWVkIGJ5IExIU19MT0MsIFJIU19MT0MuICBUaGUgbG9jYXRpb24g b2YgdGhlCisgICBtb2RpZnkgZXhwcmVzc2lvbiBpcyBsb2NhdGlvbi4gIFRo ZSBvcmlnaW5hbCB0eXBlIG9mIExIUyBhbmQgUkhTIGFyZSBwYXNzZWQKKyAg IGluIExIU19PUklHVFlQRSBhbmQgUkhTX09SSUdUWVBFLiAgKi8KKwordHJl ZQorYnVpbGRfYXJyYXlfbm90YXRpb25fZXhwciAobG9jYXRpb25fdCBsb2Nh dGlvbiwgdHJlZSBsaHMsIHRyZWUgbGhzX29yaWd0eXBlLAorCQkJICAgZW51 bSB0cmVlX2NvZGUgbW9kaWZ5Y29kZSwgbG9jYXRpb25fdCByaHNfbG9jLAor CQkJICAgdHJlZSByaHMsIHRyZWUgcmhzX29yaWd0eXBlKQoreworICBib29s ICoqbGhzX3ZlY3RvciA9IE5VTEwsICoqcmhzX3ZlY3RvciA9IE5VTEwsIGZv dW5kX2J1aWx0aW5fZm4gPSBmYWxzZTsKKyAgdHJlZSAqKmxoc19hcnJheSA9 IE5VTEwsICoqcmhzX2FycmF5ID0gTlVMTDsKKyAgdHJlZSBhcnJheV9leHBy X2xocyA9IE5VTExfVFJFRSwgYXJyYXlfZXhwcl9yaHMgPSBOVUxMX1RSRUU7 CisgIHRyZWUgYXJyYXlfZXhwciA9IE5VTExfVFJFRTsKKyAgdHJlZSAqKmxo c192YWx1ZSA9IE5VTEwsICoqcmhzX3ZhbHVlID0gTlVMTDsKKyAgdHJlZSAq Kmxoc19zdHJpZGUgPSBOVUxMLCAqKmxoc19sZW5ndGggPSBOVUxMLCAqKmxo c19zdGFydCA9IE5VTEw7CisgIHRyZWUgKipyaHNfc3RyaWRlID0gTlVMTCwg KipyaHNfbGVuZ3RoID0gTlVMTCwgKipyaHNfc3RhcnQgPSBOVUxMOworICB0 cmVlIGxvb3AgPSBOVUxMX1RSRUUsICpsaHNfdmFyID0gTlVMTCwgKnJoc192 YXIgPSBOVUxMOworICB0cmVlICpib2R5X2xhYmVsID0gTlVMTCwgKmJvZHlf bGFiZWxfZXhwciA9IE5VTEw7CisgIHRyZWUgKmV4aXRfbGFiZWwgPSBOVUxM LCAqZXhpdF9sYWJlbF9leHByID0gTlVMTCwgKmNvbmRfZXhwciA9IE5VTEw7 CisgIHRyZWUgKmlmX3N0bXRfbGFiZWwgPSBOVUxMOworICB0cmVlICpsaHNf ZXhwcl9pbmNyID0gTlVMTCwgKnJoc19leHByX2luY3IgPSBOVUxMOworICB0 cmVlICpsaHNfaW5kX2luaXQgPSBOVUxMLCAqcmhzX2luZF9pbml0ID0gTlVM TDsKKyAgYm9vbCAqKmxoc19jb3VudF9kb3duID0gTlVMTCwgKipyaHNfY291 bnRfZG93biA9IE5VTEw7CisgIHRyZWUgKmxoc19jb21wYXJlID0gTlVMTCwg KnJoc19jb21wYXJlID0gTlVMTCwgKnJoc19hcnJheV9vcGVyYW5kID0gTlVM TDsKKyAgdHJlZSAqbGhzX2FycmF5X29wZXJhbmQgPSBOVUxMOworICBpbnQg bGhzX3JhbmsgPSAwLCByaHNfcmFuayA9IDAsIGlpID0gMCwgamogPSAwOwor ICB0cmVlIGlpX3RyZWUgPSBOVUxMX1RSRUUsIG5ld19tb2RpZnlfZXhwciwg Kmxoc19saXN0ID0gTlVMTDsKKyAgdHJlZSAqcmhzX2xpc3QgPSBOVUxMLCBu ZXdfdmFyID0gTlVMTF9UUkVFLCBidWlsdGluX2xvb3AgPSBOVUxMX1RSRUU7 CisgIGludCByaHNfbGlzdF9zaXplID0gMCwgbGhzX2xpc3Rfc2l6ZSA9IDA7 CisKKyAgZmluZF9yYW5rIChyaHMsIGZhbHNlLCAmcmhzX3JhbmspOworICBl eHRyYWN0X2FycmF5X25vdGF0aW9uX2V4cHJzIChyaHMsIGZhbHNlLCAmcmhz X2xpc3QsICZyaHNfbGlzdF9zaXplKTsKKyAgbG9vcCA9IHB1c2hfc3RtdF9s aXN0ICgpOworCisgIGZvciAoaWkgPSAwOyBpaSA8IHJoc19saXN0X3NpemU7 IGlpKyspCisgICAgeworICAgICAgaWYgKFRSRUVfQ09ERSAocmhzX2xpc3Rb aWldKSA9PSBDQUxMX0VYUFIpCisJeworCSAgYnVpbHRpbl9sb29wID0gZml4 X2J1aWx0aW5fYXJyYXlfbm90YXRpb25fZm4gKHJoc19saXN0W2lpXSwKKwkJ CQkJCQkmbmV3X3Zhcik7CisJICBpZiAoYnVpbHRpbl9sb29wID09IGVycm9y X21hcmtfbm9kZSkKKwkgICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKKwkg IGVsc2UgaWYgKGJ1aWx0aW5fbG9vcCkKKwkgICAgeworCSAgICAgIGFkZF9z dG10IChidWlsdGluX2xvb3ApOworCSAgICAgIGZvdW5kX2J1aWx0aW5fZm4g PSB0cnVlOworCSAgICAgIGlmIChuZXdfdmFyKQorCQlyZXBsYWNlX2FycmF5 X25vdGF0aW9ucyAoJnJocywgZmFsc2UsICZyaHNfbGlzdFtpaV0sCisJCQkJ CSAmbmV3X3ZhciwgMSk7CisJICAgIH0KKwl9CisgICAgfQorCisgIGxoc19y YW5rID0gMDsKKyAgcmhzX3JhbmsgPSAwOworICBmaW5kX3JhbmsgKGxocywg dHJ1ZSwgJmxoc19yYW5rKTsKKyAgZmluZF9yYW5rIChyaHMsIHRydWUsICZy aHNfcmFuayk7CisKKyAgaWYgKGxoc19yYW5rID09IDAgJiYgcmhzX3Jhbmsg PT0gMCkKKyAgICB7CisgICAgICBpZiAoZm91bmRfYnVpbHRpbl9mbikKKwl7 CisJICBuZXdfbW9kaWZ5X2V4cHIgPSBidWlsZF9tb2RpZnlfZXhwciAobG9j YXRpb24sIGxocywgbGhzX29yaWd0eXBlLAorCQkJCQkgICAgICAgbW9kaWZ5 Y29kZSwgcmhzX2xvYywgcmhzLAorCQkJCQkgICAgICAgcmhzX29yaWd0eXBl KTsKKwkgIGFkZF9zdG10IChuZXdfbW9kaWZ5X2V4cHIpOworCSAgcG9wX3N0 bXRfbGlzdCAobG9vcCk7CisJICAKKwkgIHJldHVybiBsb29wOworCX0KKyAg ICAgIGVsc2UKKwl7CisJICBwb3Bfc3RtdF9saXN0IChsb29wKTsKKwkgIHJl dHVybiBOVUxMX1RSRUU7CisJfQorICAgIH0KKyAgcmhzX2xpc3Rfc2l6ZSA9 IDA7CisgIHJoc19saXN0ID0gTlVMTDsKKyAgZXh0cmFjdF9hcnJheV9ub3Rh dGlvbl9leHBycyAocmhzLCB0cnVlLCAmcmhzX2xpc3QsICZyaHNfbGlzdF9z aXplKTsKKyAgZXh0cmFjdF9hcnJheV9ub3RhdGlvbl9leHBycyAobGhzLCB0 cnVlLCAmbGhzX2xpc3QsICZsaHNfbGlzdF9zaXplKTsKKyAgCisgIGlmIChs aHNfcmFuayA9PSAwICYmIHJoc19yYW5rICE9IDApCisgICAgeworICAgICAg dHJlZSByaHNfYmFzZSA9IHJoczsKKyAgICAgIGZvciAoaWkgPSAwOyBpaSA8 IHJoc19yYW5rOyBpaSsrKQorCXJoc19iYXNlID0gQVJSQVlfTk9UQVRJT05f QVJSQVkgKHJocyk7CisgICAgICAKKyAgICAgIGVycm9yX2F0IChsb2NhdGlv biwgIiVxRCBjYW5ub3QgYmUgc2NhbGFyIHdoZW4gJXFEIGlzIG5vdCIsIGxo cywKKwkJcmhzX2Jhc2UpOworICAgICAgcmV0dXJuIGVycm9yX21hcmtfbm9k ZTsKKyAgICB9CisgIGlmIChsaHNfcmFuayAhPSAwICYmIHJoc19yYW5rICE9 IDAgJiYgbGhzX3JhbmsgIT0gcmhzX3JhbmspCisgICAgeworICAgICAgdHJl ZSBsaHNfYmFzZSA9IGxoczsKKyAgICAgIHRyZWUgcmhzX2Jhc2UgPSByaHM7 CisgIAorICAgICAgZm9yIChpaSA9IDA7IGlpIDwgbGhzX3Jhbms7IGlpKysp CisJbGhzX2Jhc2UgPSBBUlJBWV9OT1RBVElPTl9BUlJBWSAobGhzX2Jhc2Up OworICAgICAgZm9yIChpaSA9IDA7IGlpIDwgcmhzX3Jhbms7IGlpKyspCisJ cmhzX2Jhc2UgPSBBUlJBWV9OT1RBVElPTl9BUlJBWSAocmhzX2Jhc2UpOwor ICAgICAgCisgICAgICBlcnJvcl9hdCAobG9jYXRpb24sICJyYW5rIG1pc21h dGNoIGJldHdlZW4gJXFEIGFuZCAlcUQiLCBsaHNfYmFzZSwKKwkJcmhzX2Jh c2UpOworICAgICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKKyAgICB9Cisg IAorICBsaHNfdmVjdG9yID0gWE5FV1ZFQyAoYm9vbCAqLCBsaHNfbGlzdF9z aXplKTsKKyAgZm9yIChpaSA9IDA7IGlpIDwgbGhzX2xpc3Rfc2l6ZTsgaWkr KykKKyAgICBsaHNfdmVjdG9yW2lpXSA9IFhORVdWRUMgKGJvb2wsIGxoc19y YW5rKTsKKyAgCisgIHJoc192ZWN0b3IgPSBYTkVXVkVDIChib29sICosIHJo c19saXN0X3NpemUpOworICBmb3IgKGlpID0gMDsgaWkgPCByaHNfbGlzdF9z aXplOyBpaSsrKQorICAgIHJoc192ZWN0b3JbaWldID0gWE5FV1ZFQyAoYm9v bCwgcmhzX3JhbmspOworICAKKyAgbGhzX2FycmF5ID0gWE5FV1ZFQyAodHJl ZSAqLCBsaHNfbGlzdF9zaXplKTsKKyAgZm9yIChpaSA9IDA7IGlpIDwgbGhz X2xpc3Rfc2l6ZTsgaWkrKykKKyAgICBsaHNfYXJyYXlbaWldID0gWE5FV1ZF QyAodHJlZSwgbGhzX3JhbmspOworICAKKyAgcmhzX2FycmF5ID0gWE5FV1ZF QyAodHJlZSAqLCByaHNfbGlzdF9zaXplKTsKKyAgZm9yIChpaSA9IDA7IGlp IDwgcmhzX2xpc3Rfc2l6ZTsgaWkrKykKKyAgICByaHNfYXJyYXlbaWldID0g WE5FV1ZFQyAodHJlZSwgcmhzX3JhbmspOworCisgIGxoc192YWx1ZSA9IFhO RVdWRUMgKHRyZWUgKiwgbGhzX2xpc3Rfc2l6ZSk7CisgIGZvciAoaWkgPSAw OyBpaSA8IGxoc19saXN0X3NpemU7IGlpKyspCisgICAgbGhzX3ZhbHVlW2lp XSA9IFhORVdWRUMgKHRyZWUsIGxoc19yYW5rKTsKKyAgCisgIHJoc192YWx1 ZSA9IFhORVdWRUMgKHRyZWUgKiwgcmhzX2xpc3Rfc2l6ZSk7CisgIGZvciAo aWkgPSAwOyBpaSA8IHJoc19saXN0X3NpemU7IGlpKyspCisgICAgcmhzX3Zh bHVlW2lpXSA9IFhORVdWRUMgKHRyZWUsIHJoc19yYW5rKTsKKworICBsaHNf c3RyaWRlID0gWE5FV1ZFQyAodHJlZSAqLCBsaHNfbGlzdF9zaXplKTsKKyAg Zm9yIChpaSA9IDA7IGlpIDwgbGhzX2xpc3Rfc2l6ZTsgaWkrKykKKyAgICBs aHNfc3RyaWRlW2lpXSA9IFhORVdWRUMgKHRyZWUsIGxoc19yYW5rKTsKKyAg CisgIHJoc19zdHJpZGUgPSBYTkVXVkVDICh0cmVlICosIHJoc19saXN0X3Np emUpOworICBmb3IgKGlpID0gMDsgaWkgPCByaHNfbGlzdF9zaXplOyBpaSsr KQorICAgIHJoc19zdHJpZGVbaWldID0gWE5FV1ZFQyAodHJlZSwgcmhzX3Jh bmspOworCisgIGxoc19sZW5ndGggPSBYTkVXVkVDICh0cmVlICosIGxoc19s aXN0X3NpemUpOworICBmb3IgKGlpID0gMDsgaWkgPCBsaHNfbGlzdF9zaXpl OyBpaSsrKQorICAgIGxoc19sZW5ndGhbaWldID0gWE5FV1ZFQyAodHJlZSwg bGhzX3JhbmspOworICAKKyAgcmhzX2xlbmd0aCA9IFhORVdWRUMgKHRyZWUg KiwgcmhzX2xpc3Rfc2l6ZSk7CisgIGZvciAoaWkgPSAwOyBpaSA8IHJoc19s aXN0X3NpemU7IGlpKyspCisgICAgcmhzX2xlbmd0aFtpaV0gPSBYTkVXVkVD ICh0cmVlLCByaHNfcmFuayk7CisgIAorICBsaHNfc3RhcnQgPSBYTkVXVkVD ICh0cmVlICosIGxoc19saXN0X3NpemUpOworICBmb3IgKGlpID0gMDsgaWkg PCBsaHNfbGlzdF9zaXplOyBpaSsrKQorICAgIGxoc19zdGFydFtpaV0gPSBY TkVXVkVDICh0cmVlLCBsaHNfcmFuayk7CisgIAorICByaHNfc3RhcnQgPSBY TkVXVkVDICh0cmVlICosIHJoc19saXN0X3NpemUpOworICBmb3IgKGlpID0g MDsgaWkgPCByaHNfbGlzdF9zaXplOyBpaSsrKQorICAgIHJoc19zdGFydFtp aV0gPSBYTkVXVkVDICh0cmVlLCByaHNfcmFuayk7CisKKyAgbGhzX3ZhciA9 IFhORVdWRUMgKHRyZWUsIGxoc19yYW5rKTsKKyAgcmhzX3ZhciA9IFhORVdW RUMgKHRyZWUsIHJoc19yYW5rKTsKKyAgCisKKyAgLyogVGhlIHJlYXNvbiB3 aHkgd2UgYXJlIGp1c3QgdXNpbmcgbGhzX3JhbmsgZm9yIHRoaXMgaXMgYmVj YXVzZSB3ZSBoYXZlIHRoZQorICAgIGZvbGxvd2luZyBzY2VuYXJpb3M6IAor ICAgIDEuIExIU19SQU5LID09IFJIU19SQU5LCisgICAgMi4gTEhTX1JBTksg IT0gUkhTX1JBTksgJiYgUkhTX1JBTksgPSAwIAorICAgIAorICAgIEluIGJv dGggdGhlIHNjZW5hcmlvcywganVzdCBjaGVja2luZyB0aGUgTEhTX1JBTksg aXMgT0suICAqLworCisgIGJvZHlfbGFiZWwgPSBYTkVXVkVDICh0cmVlLCBN QVggKGxoc19yYW5rLCByaHNfcmFuaykpOworICBib2R5X2xhYmVsX2V4cHIg PSBYTkVXVkVDICh0cmVlLCBNQVggKGxoc19yYW5rLCByaHNfcmFuaykpOwor ICBleGl0X2xhYmVsID0gWE5FV1ZFQyAodHJlZSwgTUFYIChsaHNfcmFuaywg cmhzX3JhbmspKTsKKyAgZXhpdF9sYWJlbF9leHByID0gWE5FV1ZFQyAodHJl ZSwgTUFYIChsaHNfcmFuaywgcmhzX3JhbmspKTsKKyAgY29uZF9leHByID0g WE5FV1ZFQyAodHJlZSwgTUFYIChsaHNfcmFuaywgcmhzX3JhbmspKTsKKyAg aWZfc3RtdF9sYWJlbCA9IFhORVdWRUMgKHRyZWUsIE1BWCAobGhzX3Jhbmss IHJoc19yYW5rKSk7CisKKyAgbGhzX2V4cHJfaW5jciA9IFhORVdWRUMgKHRy ZWUsIGxoc19yYW5rKTsKKyAgcmhzX2V4cHJfaW5jciA9WE5FV1ZFQyAodHJl ZSwgcmhzX3JhbmspOworCisgIGxoc19pbmRfaW5pdCA9IFhORVdWRUMgKHRy ZWUsIGxoc19yYW5rKTsKKyAgcmhzX2luZF9pbml0ID0gWE5FV1ZFQyAodHJl ZSwgcmhzX3JhbmspOworCisgIGxoc19jb3VudF9kb3duID0gWE5FV1ZFQyAo Ym9vbCAqLCBsaHNfbGlzdF9zaXplKTsKKyAgZm9yIChpaSA9IDA7IGlpIDwg bGhzX2xpc3Rfc2l6ZTsgaWkrKykKKyAgICBsaHNfY291bnRfZG93bltpaV0g PSAgWE5FV1ZFQyAoYm9vbCwgbGhzX3JhbmspOworICAKKyAgcmhzX2NvdW50 X2Rvd24gPSAgWE5FV1ZFQyAoYm9vbCAqLCByaHNfbGlzdF9zaXplKTsKKyAg Zm9yIChpaSA9IDA7IGlpIDwgcmhzX2xpc3Rfc2l6ZTsgaWkrKykKKyAgICBy aHNfY291bnRfZG93bltpaV0gPSBYTkVXVkVDIChib29sLCByaHNfcmFuayk7 CisKKyAgbGhzX2NvbXBhcmUgPSAgWE5FV1ZFQyAodHJlZSwgbGhzX3Jhbmsp OworICByaHNfY29tcGFyZSA9ICBYTkVXVkVDICh0cmVlLCByaHNfcmFuayk7 CisKKyAgcmhzX2FycmF5X29wZXJhbmQgPSAgWE5FV1ZFQyAodHJlZSwgcmhz X2xpc3Rfc2l6ZSk7CisgIGxoc19hcnJheV9vcGVyYW5kID0gIFhORVdWRUMg KHRyZWUsIGxoc19saXN0X3NpemUpOworCisgIGlmIChsaHNfcmFuaykKKyAg ICB7CisgICAgICBmb3IgKGlpID0gMDsgaWkgPCBsaHNfbGlzdF9zaXplOyBp aSsrKQorCXsKKwkgIGpqID0gMDsKKwkgIGZvciAoaWlfdHJlZSA9IGxoc19s aXN0W2lpXTsKKwkgICAgICAgaWlfdHJlZSAmJiBUUkVFX0NPREUgKGlpX3Ry ZWUpID09IEFSUkFZX05PVEFUSU9OX1JFRjsKKwkgICAgICAgaWlfdHJlZSA9 IEFSUkFZX05PVEFUSU9OX0FSUkFZIChpaV90cmVlKSkKKwkgICAgeworCSAg ICAgIGxoc19hcnJheVtpaV1bampdID0gaWlfdHJlZTsKKwkgICAgICBqaisr OworCSAgICB9CisJfQorICAgIH0KKyAgZWxzZQorICAgIGxoc19hcnJheVsw XVswXSA9IE5VTExfVFJFRTsKKyAgCisgIGlmIChyaHNfcmFuaykKKyAgICB7 CisgICAgICBmb3IgKGlpID0gMDsgaWkgPCByaHNfbGlzdF9zaXplOyBpaSsr KQorCXsgCisJICBqaiA9IDA7IAorCSAgZm9yIChpaV90cmVlID0gcmhzX2xp c3RbaWldOworCSAgICAgICBpaV90cmVlICYmIFRSRUVfQ09ERSAoaWlfdHJl ZSkgPT0gQVJSQVlfTk9UQVRJT05fUkVGOworCSAgICAgICBpaV90cmVlID0g QVJSQVlfTk9UQVRJT05fQVJSQVkgKGlpX3RyZWUpKQorCSAgICB7CisJICAg ICAgcmhzX2FycmF5W2lpXVtqal0gPSBpaV90cmVlOworCSAgICAgIGpqKys7 CisJICAgIH0KKwl9CisgICAgfQorCisgIGZvciAoaWkgPSAwOyBpaSA8IGxo c19saXN0X3NpemU7IGlpKyspCisgICAgeworICAgICAgaWYgKFRSRUVfQ09E RSAobGhzX2xpc3RbaWldKSA9PSBBUlJBWV9OT1RBVElPTl9SRUYpCisJewor CSAgZm9yIChqaiA9IDA7IGpqIDwgbGhzX3Jhbms7IGpqKyspCisJICAgIHsK KwkgICAgICBpZiAoVFJFRV9DT0RFIChsaHNfYXJyYXlbaWldW2pqXSkgPT0g QVJSQVlfTk9UQVRJT05fUkVGKQorCQl7CisJCSAgbGhzX3ZhbHVlW2lpXVtq al0gPSBBUlJBWV9OT1RBVElPTl9BUlJBWSAobGhzX2FycmF5W2lpXVtqal0p OworCQkgIGxoc19zdGFydFtpaV1bampdID0gQVJSQVlfTk9UQVRJT05fU1RB UlQgKGxoc19hcnJheVtpaV1bampdKTsKKwkJICBsaHNfbGVuZ3RoW2lpXVtq al0gPQorCQkgICAgQVJSQVlfTk9UQVRJT05fTEVOR1RIIChsaHNfYXJyYXlb aWldW2pqXSk7CisJCSAgbGhzX3N0cmlkZVtpaV1bampdID0KKwkJICAgIEFS UkFZX05PVEFUSU9OX1NUUklERSAobGhzX2FycmF5W2lpXVtqal0pOworCQkg IGxoc192ZWN0b3JbaWldW2pqXSA9IHRydWU7CisJCSAgLyogSUYgdGhlIHN0 cmlkZSB2YWx1ZSBpcyB2YXJpYWJsZSAoaS5lLiBub3QgY29uc3RhbnQpIHRo ZW4gCisJCSAgICAgYXNzdW1lIHRoYXQgdGhlIGxlbmd0aCBpcyBwb3NpdGl2 ZS4gICovCisJCSAgaWYgKCFUUkVFX0NPTlNUQU5UIChsaHNfbGVuZ3RoW2lp XVtqal0pKQorCQkgICAgbGhzX2NvdW50X2Rvd25baWldW2pqXSA9IGZhbHNl OworCQkgIGVsc2UgaWYgKHRyZWVfaW50X2NzdF9sdAorCQkJICAgKGxoc19s ZW5ndGhbaWldW2pqXSwKKwkJCSAgICBidWlsZF96ZXJvX2NzdCAoVFJFRV9U WVBFIChsaHNfbGVuZ3RoW2lpXVtqal0pKSkpCisJCSAgICBsaHNfY291bnRf ZG93bltpaV1bampdID0gdHJ1ZTsKKwkJICBlbHNlCisJCSAgICBsaHNfY291 bnRfZG93bltpaV1bampdID0gZmFsc2U7CisJCX0KKwkgICAgICBlbHNlCisJ CWxoc192ZWN0b3JbaWldW2pqXSA9IGZhbHNlOworCSAgICB9CisJfQorICAg IH0KKworICBmb3IgKGlpID0gMDsgaWkgPCByaHNfbGlzdF9zaXplOyBpaSsr KQorICAgIHsKKyAgICAgIGlmIChUUkVFX0NPREUgKHJoc19saXN0W2lpXSkg PT0gQVJSQVlfTk9UQVRJT05fUkVGKQorCXsKKwkgIGZvciAoamogPSAwOyBq aiA8IHJoc19yYW5rOyBqaisrKQorCSAgICB7CisJICAgICAgaWYgKFRSRUVf Q09ERSAocmhzX2FycmF5W2lpXVtqal0pID09IEFSUkFZX05PVEFUSU9OX1JF RikKKwkJeworCQkgIHJoc192YWx1ZVtpaV1bampdICA9IEFSUkFZX05PVEFU SU9OX0FSUkFZIChyaHNfYXJyYXlbaWldW2pqXSk7CisJCSAgcmhzX3N0YXJ0 W2lpXVtqal0gID0gQVJSQVlfTk9UQVRJT05fU1RBUlQgKHJoc19hcnJheVtp aV1bampdKTsKKwkJICByaHNfbGVuZ3RoW2lpXVtqal0gPQorCQkgICAgQVJS QVlfTk9UQVRJT05fTEVOR1RIIChyaHNfYXJyYXlbaWldW2pqXSk7CisJCSAg cmhzX3N0cmlkZVtpaV1bampdID0KKwkJICAgIEFSUkFZX05PVEFUSU9OX1NU UklERSAocmhzX2FycmF5W2lpXVtqal0pOworCQkgIHJoc192ZWN0b3JbaWld W2pqXSA9IHRydWU7CisJCSAgLyogSWYgdGhlIHN0cmlkZSB2YWx1ZSBpcyB2 YXJpYWJsZSAoaS5lLiBub3QgY29uc3RhbnQpIHRoZW4gCisJCSAgICAgYXNz dW1lIHRoYXQgdGhlIGxlbmd0aCBpcyBwb3NpdGl2ZS4gICovCisJCSAgaWYg KCFUUkVFX0NPTlNUQU5UIChyaHNfbGVuZ3RoW2lpXVtqal0pKQorCQkgICAg cmhzX2NvdW50X2Rvd25baWldW2pqXSA9IGZhbHNlOworCQkgIGVsc2UgaWYg KHRyZWVfaW50X2NzdF9sdAorCQkJICAgKHJoc19sZW5ndGhbaWldW2pqXSwK KwkJCSAgICBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKHJoc19sZW5ndGhb aWldW2pqXSksIDApKSkKKwkJICAgIHJoc19jb3VudF9kb3duW2lpXVtqal0g PSB0cnVlOworCQkgIGVsc2UKKwkJICAgIHJoc19jb3VudF9kb3duW2lpXVtq al0gPSBmYWxzZTsJCisJCX0KKwkgICAgICBlbHNlCisJCXJoc192ZWN0b3Jb aWldW2pqXSA9IGZhbHNlOworCSAgICB9CisJfQorICAgICAgZWxzZQorCWZv ciAoamogPSAwOyBqaiA8IHJoc19yYW5rOyBqaisrKQorCSAgcmhzX3ZlY3Rv cltpaV1bampdID0gZmFsc2U7CisgICAgfQorCisKKworICBmb3IgKGlpID0g MDsgaWkgPCBsaHNfcmFuazsgaWkrKykKKyAgICB7CisgICAgICBpZiAobGhz X3ZlY3RvclswXVtpaV0pCisJeworCSAgbGhzX3ZhcltpaV0gPSBidWlsZF9k ZWNsIChsb2NhdGlvbiwgVkFSX0RFQ0wsIE5VTExfVFJFRSwKKwkJCQkgICAg aW50ZWdlcl90eXBlX25vZGUpOworCSAgbGhzX2luZF9pbml0W2lpXSA9IGJ1 aWxkX21vZGlmeV9leHByCisJICAgIChsb2NhdGlvbiwgbGhzX3ZhcltpaV0s IFRSRUVfVFlQRSAobGhzX3ZhcltpaV0pLAorCSAgICAgTk9QX0VYUFIsCisJ ICAgICBsb2NhdGlvbiwgYnVpbGRfemVyb19jc3QgKFRSRUVfVFlQRSAobGhz X3ZhcltpaV0pKSwKKwkgICAgIFRSRUVfVFlQRSAobGhzX3ZhcltpaV0pKTsK KwkgIAorCX0KKyAgICB9CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgcmhzX3Jh bms7IGlpKyspCisgICAgeworICAgICAgLyogV2hlbiB3ZSBoYXZlIGEgcG9s eW5vbWlhbCwgd2UgYXNzdW1lIHRoYXQgdGhlIGluZGljZXMgYXJlIG9mIHR5 cGUgCisJIGludGVnZXIuICAqLworICAgICAgcmhzX3ZhcltpaV0gPSBidWls ZF9kZWNsIChsb2NhdGlvbiwgVkFSX0RFQ0wsIE5VTExfVFJFRSwKKwkJCQlp bnRlZ2VyX3R5cGVfbm9kZSk7CisgICAgICByaHNfaW5kX2luaXRbaWldID0g YnVpbGRfbW9kaWZ5X2V4cHIKKwkobG9jYXRpb24sIHJoc192YXJbaWldLCBU UkVFX1RZUEUgKHJoc192YXJbaWldKSwKKwkgbW9kaWZ5Y29kZSwKKwkgbG9j YXRpb24sIGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAocmhzX3ZhcltpaV0p LCAwKSwKKwkgVFJFRV9UWVBFIChyaHNfdmFyW2lpXSkpOworICAgIH0KKyAg CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgTUFYIChsaHNfcmFuaywgcmhzX3Jh bmspOyBpaSsrKQorICAgIHsKKyAgICAgIC8qIFRoaXMgd2lsbCBjcmVhdGUg dGhlIGlmIHN0YXRlbWVudCBsYWJlbC4gICovCisgICAgICBpZl9zdG10X2xh YmVsW2lpXSA9IGJ1aWxkX2RlY2wgKGxvY2F0aW9uLCBMQUJFTF9ERUNMLCBO VUxMX1RSRUUsCisJCQkJICAgICAgdm9pZF90eXBlX25vZGUpOworICAgICAg REVDTF9DT05URVhUIChpZl9zdG10X2xhYmVsW2lpXSkgPSBjdXJyZW50X2Z1 bmN0aW9uX2RlY2w7CisgICAgICBERUNMX0FSVElGSUNJQUwgKGlmX3N0bXRf bGFiZWxbaWldKSA9IDA7CisgICAgICBERUNMX0lHTk9SRURfUCAoaWZfc3Rt dF9sYWJlbFtpaV0pID0gMTsKKyAgCisgICAgICAvKiBUaGlzIGxhYmVsIHN0 YXRlbWVudCB3aWxsIHBvaW50IHRvIHRoZSBsb29wIGJvZHkuICAqLworICAg ICAgYm9keV9sYWJlbFtpaV0gPSBidWlsZF9kZWNsIChsb2NhdGlvbiwgTEFC RUxfREVDTCwgTlVMTF9UUkVFLAorCQkJCSAgIHZvaWRfdHlwZV9ub2RlKTsK KyAgICAgIERFQ0xfQ09OVEVYVCAoYm9keV9sYWJlbFtpaV0pID0gY3VycmVu dF9mdW5jdGlvbl9kZWNsOworICAgICAgREVDTF9BUlRJRklDSUFMIChib2R5 X2xhYmVsW2lpXSkgPSAwOworICAgICAgREVDTF9JR05PUkVEX1AgKGJvZHlf bGFiZWxbaWldKSA9IDE7CisgICAgICBib2R5X2xhYmVsX2V4cHJbaWldID0g YnVpbGQxIChMQUJFTF9FWFBSLCB2b2lkX3R5cGVfbm9kZSwgYm9keV9sYWJl bFtpaV0pOworCisgICAgICAvKiBUaGlzIHdpbGwgY3JlYXRlIHRoZSBleGl0 IGxhYmVsLi5pLmUuIHdoZXJlIHRoZSB3aGlsZSBsb29wIHdpbGwgYnJhbmNo CisJIG91dCBvZi4gICovCisgICAgICBleGl0X2xhYmVsW2lpXSA9IGJ1aWxk X2RlY2wgKGxvY2F0aW9uLCBMQUJFTF9ERUNMLCBOVUxMX1RSRUUsCisJCQkJ ICAgdm9pZF90eXBlX25vZGUpOworICAgICAgREVDTF9DT05URVhUIChleGl0 X2xhYmVsW2lpXSkgPSBjdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisgICAgICBE RUNMX0FSVElGSUNJQUwgKGV4aXRfbGFiZWxbaWldKSA9IDA7CisgICAgICBE RUNMX0lHTk9SRURfUCAoZXhpdF9sYWJlbFtpaV0pID0gMTsKKyAgICAgIGV4 aXRfbGFiZWxfZXhwcltpaV0gPSBidWlsZDEgKExBQkVMX0VYUFIsIHZvaWRf dHlwZV9ub2RlLCBleGl0X2xhYmVsW2lpXSk7CisgICAgfQorCisgIGlmIChs aHNfcmFuaykKKyAgICB7CisgICAgICBmb3IgKGlpID0gMDsgaWkgPCBsaHNf bGlzdF9zaXplOyBpaSsrKQorCXsKKwkgIGlmIChsaHNfdmVjdG9yW2lpXVsw XSkKKwkgICAgeyAKKwkgICAgICAvKiBUaGUgbGFzdCBBUlJBWV9OT1RBVElP TiBlbGVtZW50J3MgQVJSQVkgY29tcG9uZW50IHNob3VsZCBiZSAKKwkJIHRo ZSBhcnJheSdzIGJhc2UgdmFsdWUuICAqLworCSAgICAgIGxoc19hcnJheV9v cGVyYW5kW2lpXSA9IGxoc192YWx1ZVtpaV1bbGhzX3JhbmsgLSAxXTsKKwkg ICAgICBnY2NfYXNzZXJ0IChsaHNfYXJyYXlfb3BlcmFuZFtpaV0pOworCSAg ICAgIGZvciAoamogPSBsaHNfcmFuayAtIDE7IGpqID49IDA7IGpqLS0pCisJ CXsKKwkJICBpZiAobGhzX2NvdW50X2Rvd25baWldW2pqXSkKKwkJICAgICAg LyogQXJyYXlbc3RhcnRfaW5kZXggKyAoaW5kdWN0aW9uX3ZhciAqIHN0cmlk ZSldLiAgKi8KKwkJICAgICAgbGhzX2FycmF5X29wZXJhbmRbaWldID0gYnVp bGRfYXJyYXlfcmVmCisJCQkobG9jYXRpb24sIGxoc19hcnJheV9vcGVyYW5k W2lpXSwKKwkJCSBidWlsZDIgKE1JTlVTX0VYUFIsIFRSRUVfVFlQRSAobGhz X3Zhcltqal0pLAorCQkJCSBsaHNfc3RhcnRbaWldW2pqXSwKKwkJCQkgYnVp bGQyIChNVUxUX0VYUFIsIFRSRUVfVFlQRSAobGhzX3Zhcltqal0pLAorCQkJ CQkgbGhzX3Zhcltqal0sCisJCQkJCSBsaHNfc3RyaWRlW2lpXVtqal0pKSk7 CisJCSAgZWxzZQorCQkgICAgbGhzX2FycmF5X29wZXJhbmRbaWldID0gYnVp bGRfYXJyYXlfcmVmCisJCSAgICAgIChsb2NhdGlvbiwgbGhzX2FycmF5X29w ZXJhbmRbaWldLAorCQkgICAgICAgYnVpbGQyIChQTFVTX0VYUFIsIFRSRUVf VFlQRSAobGhzX3Zhcltqal0pLAorCQkJICAgICAgIGxoc19zdGFydFtpaV1b ampdLAorCQkJICAgICAgIGJ1aWxkMiAoTVVMVF9FWFBSLCBUUkVFX1RZUEUg KGxoc192YXJbampdKSwKKwkJCQkgICAgICAgbGhzX3Zhcltqal0sCisJCQkJ ICAgICAgIGxoc19zdHJpZGVbaWldW2pqXSkpKTsKKwkJfQorCSAgICB9CisJ fQorICAgICAgcmVwbGFjZV9hcnJheV9ub3RhdGlvbnMgKCZsaHMsIHRydWUs IGxoc19saXN0LCBsaHNfYXJyYXlfb3BlcmFuZCwKKwkJCSAgICAgICBsaHNf bGlzdF9zaXplKTsKKyAgICAgIGFycmF5X2V4cHJfbGhzID0gbGhzOworICAg IH0KKworICBpZiAocmhzX3JhbmspCisgICAgeworICAgICAgZm9yIChpaSA9 IDA7IGlpIDwgcmhzX2xpc3Rfc2l6ZTsgaWkrKykKKwl7CisJICBpZiAocmhz X3ZlY3RvcltpaV1bMF0pCisJICAgIHsKKwkgICAgICByaHNfYXJyYXlfb3Bl cmFuZFtpaV0gPSByaHNfdmFsdWVbaWldW3Joc19yYW5rIC0gMV07CisJICAg ICAgZ2NjX2Fzc2VydCAocmhzX2FycmF5X29wZXJhbmRbaWldKTsKKwkgICAg ICBmb3IgKGpqID0gcmhzX3JhbmsgLSAxOyBqaiA+PSAwOyBqai0tKQorCQl7 CisJCSAgaWYgKHJoc19jb3VudF9kb3duW2lpXVtqal0pCisJCSAgICB7CisJ CSAgICAgIC8qIEFycmF5W3N0YXJ0X2luZGV4IC0gKGluZHVjdGlvbl92YXIg KiBzdHJpZGUpXSAqLworCQkgICAgICByaHNfYXJyYXlfb3BlcmFuZFtpaV0g PSBidWlsZF9hcnJheV9yZWYKKwkJCShsb2NhdGlvbiwgcmhzX2FycmF5X29w ZXJhbmRbaWldLAorCQkJIGJ1aWxkMiAoTUlOVVNfRVhQUiwgVFJFRV9UWVBF IChyaHNfdmFyW2pqXSksCisJCQkJIHJoc19zdGFydFtpaV1bampdLAorCQkJ CSBidWlsZDIgKE1VTFRfRVhQUiwgVFJFRV9UWVBFIChyaHNfdmFyW2pqXSks CisJCQkJCSByaHNfdmFyW2pqXSwKKwkJCQkJIHJoc19zdHJpZGVbaWldW2pq XSkpKTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIC8q IEFycmF5W3N0YXJ0X2luZGV4ICArIChpbmR1Y3Rpb25fdmFyICogc3RyaWRl KV0gKi8KKwkJICAgICAgcmhzX2FycmF5X29wZXJhbmRbaWldID0gYnVpbGRf YXJyYXlfcmVmCisJCQkobG9jYXRpb24sIHJoc19hcnJheV9vcGVyYW5kW2lp XSwKKwkJCSBidWlsZDIgKFBMVVNfRVhQUiwgVFJFRV9UWVBFIChyaHNfdmFy W2pqXSksCisJCQkJIHJoc19zdGFydFtpaV1bampdLAorCQkJCSBidWlsZDIg KE1VTFRfRVhQUiwgVFJFRV9UWVBFIChyaHNfdmFyW2pqXSksCisJCQkJCSBy aHNfdmFyW2pqXSwKKwkJCQkJIHJoc19zdHJpZGVbaWldW2pqXSkpKTsKKwkJ ICAgIH0KKwkJfQorCSAgICB9CisJfQorCisgICAgICBmb3IgKGlpID0gMDsg aWkgPCByaHNfbGlzdF9zaXplOyBpaSsrKQorCXsKKwkgIGlmIChUUkVFX0NP REUgKHJoc19saXN0W2lpXSkgPT0gQ0FMTF9FWFBSKQorCSAgICB7CisJICAg ICAgaW50IGlkeF92YWx1ZSA9IDA7CisJICAgICAgdHJlZSBmdW5jX25hbWUg PSBDQUxMX0VYUFJfRk4gKHJoc19saXN0W2lpXSk7CisJICAgICAgaWYgKFRS RUVfQ09ERSAoZnVuY19uYW1lKSA9PSBBRERSX0VYUFIpCisJCWlmIChpc19z ZWNfaW1wbGljaXRfaW5kZXhfZm4gKGZ1bmNfbmFtZSkpCisJCSAgeworCQkg ICAgaWR4X3ZhbHVlID0gCisJCSAgICAgIGV4dHJhY3Rfc2VjX2ltcGxpY2l0 X2luZGV4X2FyZyAobG9jYXRpb24sIHJoc19saXN0W2lpXSk7CisJCSAgICBp ZiAoaWR4X3ZhbHVlID09IC0xKSAvKiBUaGlzIG1lYW5zIHdlIGhhdmUgYW4g ZXJyb3IuICAqLworCQkgICAgICByZXR1cm4gZXJyb3JfbWFya19ub2RlOwor CQkgICAgZWxzZSBpZiAoaWR4X3ZhbHVlIDwgbGhzX3JhbmsgJiYgaWR4X3Zh bHVlID49IDApCisJCSAgICAgIHJoc19hcnJheV9vcGVyYW5kW2lpXSA9IGxo c192YXJbaWR4X3ZhbHVlXTsKKwkJICAgIGVsc2UKKwkJICAgICAgeworCQkJ aW50IGVlID0gMDsKKwkJCXRyZWUgbGhzX2Jhc2UgPSBsaHNfbGlzdFtpaV07 CisJCQlmb3IgKGVlID0gMDsgZWUgPCBsaHNfcmFuazsgZWUrKykKKwkJCSAg bGhzX2Jhc2UgPSBBUlJBWV9OT1RBVElPTl9BUlJBWSAobGhzX2Jhc2UpOwor CQkJZXJyb3JfYXQgKGxvY2F0aW9uLCAiX19zZWNfaW1wbGljaXRfaW5kZXgg YXJndW1lbnQgJWQgIgorCQkJCSAgIm11c3QgYmUgbGVzcyB0aGFuIHJhbmsg b2YgJXFEIiwgaWR4X3ZhbHVlLAorCQkJCSAgbGhzX2Jhc2UpOworCQkJcmV0 dXJuIGVycm9yX21hcmtfbm9kZTsKKwkJICAgICAgfQorCQkgIH0gIAorCSAg ICB9CisJfQorICAgICAgcmVwbGFjZV9hcnJheV9ub3RhdGlvbnMgKCZyaHMs IHRydWUsIHJoc19saXN0LCByaHNfYXJyYXlfb3BlcmFuZCwKKwkJCSAgICAg ICByaHNfbGlzdF9zaXplKTsKKyAgICAgIGFycmF5X2V4cHJfcmhzID0gcmhz OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZvciAoaWkgPSAwOyBp aSA8IHJoc19saXN0X3NpemU7IGlpKyspCisJeworCSAgaWYgKFRSRUVfQ09E RSAocmhzX2xpc3RbaWldKSA9PSBDQUxMX0VYUFIpCisJICAgIHsKKwkgICAg ICBpbnQgaWR4X3ZhbHVlID0gMDsKKwkgICAgICB0cmVlIGZ1bmNfbmFtZSA9 IENBTExfRVhQUl9GTiAocmhzX2xpc3RbaWldKTsKKwkgICAgICBpZiAoVFJF RV9DT0RFIChmdW5jX25hbWUpID09IEFERFJfRVhQUikKKwkJaWYgKGlzX3Nl Y19pbXBsaWNpdF9pbmRleF9mbiAoZnVuY19uYW1lKSkKKwkJICB7CisJCSAg ICBpZHhfdmFsdWUgPSAKKwkJICAgICAgZXh0cmFjdF9zZWNfaW1wbGljaXRf aW5kZXhfYXJnIChsb2NhdGlvbiwgcmhzX2xpc3RbaWldKTsKKwkJICAgIGlm IChpZHhfdmFsdWUgPT0gLTEpIC8qIFRoaXMgbWVhbnMgd2UgaGF2ZSBhbiBl cnJvci4gICovCisJCSAgICAgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7CisJ CSAgICBlbHNlIGlmIChpZHhfdmFsdWUgPCBsaHNfcmFuayAmJiBpZHhfdmFs dWUgPj0gMCkKKwkJICAgICAgcmhzX2FycmF5X29wZXJhbmRbaWldID0gbGhz X3ZhcltpZHhfdmFsdWVdOworCQkgICAgZWxzZQorCQkgICAgICB7CisJCQlp bnQgZWUgPSAwOworCQkJdHJlZSBsaHNfYmFzZSA9IGxoc19saXN0W2lpXTsK KwkJCWZvciAoZWUgPSAwOyBlZSA8IGxoc19yYW5rOyBlZSsrKQorCQkJICBs aHNfYmFzZSA9IEFSUkFZX05PVEFUSU9OX0FSUkFZIChsaHNfYmFzZSk7CisJ CQllcnJvcl9hdCAobG9jYXRpb24sICJfX3NlY19pbXBsaWNpdF9pbmRleCBh cmd1bWVudCAlZCAiCisJCQkJICAibXVzdCBiZSBsZXNzIHRoYW4gcmFuayBv ZiAlcUQiLCBpZHhfdmFsdWUsCisJCQkJICBsaHNfYmFzZSk7CisJCQlyZXR1 cm4gZXJyb3JfbWFya19ub2RlOworCQkgICAgICB9CisJCSAgfSAgCisJICAg IH0KKwl9CisgICAgICByZXBsYWNlX2FycmF5X25vdGF0aW9ucyAoJnJocywg dHJ1ZSwgcmhzX2xpc3QsIHJoc19hcnJheV9vcGVyYW5kLAorCQkJICAgICAg IHJoc19saXN0X3NpemUpOworICAgICAgYXJyYXlfZXhwcl9yaHMgPSByaHM7 CisgICAgICByaHNfZXhwcl9pbmNyWzBdID0gTlVMTF9UUkVFOworICAgIH0K KworICBmb3IgKGlpID0gMDsgaWkgPCByaHNfcmFuazsgaWkrKykgCisgICAg cmhzX2V4cHJfaW5jcltpaV0gPSBidWlsZDIgKE1PRElGWV9FWFBSLCB2b2lk X3R5cGVfbm9kZSwgcmhzX3ZhcltpaV0sIAorCQkJCWJ1aWxkMiAKKwkJCQko UExVU19FWFBSLCBUUkVFX1RZUEUgKHJoc192YXJbaWldKSwgCisJCQkJIHJo c192YXJbaWldLCAKKwkJCQkgYnVpbGRfb25lX2NzdCAoVFJFRV9UWVBFIChy aHNfdmFyW2lpXSkpKSk7CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgbGhzX3Jh bms7IGlpKyspIAorICAgIGxoc19leHByX2luY3JbaWldID0gYnVpbGQyIAor ICAgICAgKE1PRElGWV9FWFBSLCB2b2lkX3R5cGVfbm9kZSwgbGhzX3Zhcltp aV0sIAorICAgICAgIGJ1aWxkMiAoUExVU19FWFBSLCBUUkVFX1RZUEUgKGxo c192YXJbaWldKSwgbGhzX3ZhcltpaV0sIAorCSAgICAgICBidWlsZF9vbmVf Y3N0IChUUkVFX1RZUEUgKGxoc192YXJbaWldKSkpKTsKKyAgCisgIGlmICgh YXJyYXlfZXhwcl9saHMpCisgICAgYXJyYXlfZXhwcl9saHMgPSBsaHM7CisK KyAgYXJyYXlfZXhwciA9IGJ1aWxkX21vZGlmeV9leHByIChsb2NhdGlvbiwg YXJyYXlfZXhwcl9saHMsIGxoc19vcmlndHlwZSwgCisJCQkJICBtb2RpZnlj b2RlLCByaHNfbG9jLCBhcnJheV9leHByX3JocywgCisJCQkJICByaHNfb3Jp Z3R5cGUpOworCisgIGZvciAoamogPSAwOyBqaiA8IE1BWCAobGhzX3Jhbmss IHJoc19yYW5rKTsgamorKykKKyAgICB7CisgICAgICBpZiAocmhzX3Jhbmsg JiYgcmhzX2V4cHJfaW5jcltqal0pCisJeworCSAgaW50IGlpaSA9IDA7CisJ ICBpZiAobGhzX2NvdW50X2Rvd25bMF1bampdKQorCSAgICBsaHNfY29tcGFy ZVtqal0gPSBidWlsZDIKKwkgICAgICAoR1RfRVhQUiwgYm9vbGVhbl90eXBl X25vZGUsIGxoc192YXJbampdLCBsaHNfbGVuZ3RoWzBdW2pqXSk7CisJICBl bHNlCisJICAgIGxoc19jb21wYXJlW2pqXSA9IGJ1aWxkMgorCSAgICAgIChM VF9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwgbGhzX3Zhcltqal0sIGxoc19s ZW5ndGhbMF1bampdKTsKKworCisJICAvKiBUaGUgcmVhc29uIHdoeSB3ZSBo YXZlIHRoaXMgaGVyZSBpcyBmb3IgdGhlIGZvbGxvd2luZyBjYXNlOgorCSAg ICAgICAgIEFycmF5WzpdWzpdID0gZnVuY3Rpb25fY2FsbChzb21ldGhpbmcp ICsgQXJyYXkyWzpdWzpdOworCisJICAgICBTbywgd2Ugd2lsbCBza2lwIHRo ZSBmaXJzdCBvcGVyYW5kIG9mIFJIUyBhbmQgdGhlbiBnbyB0byB0aGUKKwkg ICAgIDJuZCB0byBmaW5kIHdoZXRoZXIgd2Ugc2hvdWxkIGNvdW50IHVwIG9y IGRvd24uICAqLworCSAKKwkgIGZvciAoaWlpID0gMDsgaWlpIDwgcmhzX2xp c3Rfc2l6ZTsgaWlpKyspCisJICAgIGlmIChyaHNfdmVjdG9yW2lpaV1bampd KQorCSAgICAgIGJyZWFrOworCSAgICAgIAorCSAgLyogV2hhdCB3ZSBhcmUg ZG9pbmcgaGVyZSBpcyB0aGlzOgorCSAgICAgV2UgYWx3YXlzIGNvdW50IHVw LCBzbzoKKwkgICAgICAgaWYgKGxlbmd0aCBpcyBuZWdhdGl2ZSA9PT4gd2hp Y2ggbWVhbnMgd2UgY291bnQgZG93bikKKwkgICAgICAgICAgd2UgbXVsdGlw bHkgbGVuZ3RoIGJ5IC0xIGFuZCBjb3VudCB1cCA9PiBpaSA8IC1MRU5HVEgK KwkgICAgICAgZWxzZQorCSAgICAgICAgICB3ZSBqdXN0IGNvdW50IHVwLCBz byB3ZSBjb21wYXJlIGZvciAgaWkgPCBMRU5HVEgKKwkgICAqLworCSAgaWYg KHJoc19jb3VudF9kb3duW2lpaV1bampdKQorCSAgICAvKiBXZSB1c2UgaWlp IGZvciByaHNfbGVuZ3RoIGJlY2F1c2UgdGhhdCBpcyB0aGUgY29ycmVjdCBj b3VudGRvd24KKwkgICAgICAgd2UgaGF2ZSB0byB1c2UuICAqLworCSAgICAg IHJoc19jb21wYXJlW2pqXSA9IGJ1aWxkMgorCQkoTFRfRVhQUiwgYm9vbGVh bl90eXBlX25vZGUsIHJoc192YXJbampdLAorCQkgYnVpbGQyIChNVUxUX0VY UFIsIFRSRUVfVFlQRSAocmhzX3Zhcltqal0pLAorCQkJIHJoc19sZW5ndGhb aWlpXVtqal0sCisJCQkgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChyaHNf dmFyW2pqXSksIC0xKSkpOworCSAgZWxzZQorCSAgICByaHNfY29tcGFyZVtq al0gPSBidWlsZDIgKExUX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLCByaHNf dmFyW2pqXSwKKwkJCQkgICAgICByaHNfbGVuZ3RoW2lpaV1bampdKTsKKwkg IGNvbmRfZXhwcltqal0gPSBidWlsZDIgKFRSVVRIX0FORElGX0VYUFIsIHZv aWRfdHlwZV9ub2RlLAorCQkJCSAgbGhzX2NvbXBhcmVbampdLCByaHNfY29t cGFyZVtqal0pOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAobGhzX2Nv dW50X2Rvd25bMF1bampdKQorCSAgICBjb25kX2V4cHJbampdID0gYnVpbGQy CisJICAgICAgKEdUX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLCBsaHNfdmFy W2pqXSwgbGhzX2xlbmd0aFswXVtqal0pOworCSAgZWxzZQorCSAgICBjb25k X2V4cHJbampdID0gYnVpbGQyCisJICAgICAgKExUX0VYUFIsIGJvb2xlYW5f dHlwZV9ub2RlLCBsaHNfdmFyW2pqXSwgbGhzX2xlbmd0aFswXVtqal0pOwor CX0KKyAgICB9CisgIAorICAvKiBUaGUgZm9sbG93aW5nIHN0YXRlbWVudHMg d2lsbCBkbyB0aGUgZm9sbG93aW5nOgorICAgKiA8aWZfc3RtdF9sYWJlbD46 IChpbiBvcmRlciBmcm9tIG91dGVybW9zdCB0byBpbm5lcm1vc3QpCisgICAq ICAgICAgICAgICAgICAgICAgaWYgKGNvbmRfZXhwcikgdGhlbiBnbyB0byBi b2R5X2xhYmVsCisgICAqICAgICAgICAgICAgICAgICAgZWxzZSAgICAgICAg ICAgICAgICBnbyB0byBleGl0X2xhYmVsCisgICAqIDxib2R5X2xhYmVsPjoK KyAgICogICAgICAgICAgICAgICAgICBhcnJheSBleHByZXNzaW9uCisgICAq CisgICAqICAgICAgICAgICAgICAgICAgKHRoZSBpbmNyZW1lbnQsIGdvdG8g YW5kIGV4aXRfbGFiZWwgZ29lcyBmcm9tIGlubmVybW9zdCB0bworICAgKiAg ICAgICAgICAgICAgICAgICBvdXRlcm1vc3QpLgorICAgKiAgICAgICAgICAg ICAgICAgIGlpKysgYW5kIGpqKysKKyAgICogICAgICAgICAgICAgICAgICBn byB0byBpZl9zdG10X2xhYmVsCisgICAqIDxleGl0X2xhYmVsPjoKKyAgICog ICAgICAgICAgICAgICAgICA8UkVTVCBPRiBDT0RFPgorICAgKi8KKworICAK KyAgZm9yIChpaSA9IDA7IGlpIDwgTUFYIChsaHNfcmFuaywgcmhzX3Jhbmsp OyBpaSsrKQorICAgIHsKKyAgICAgIGFkZF9zdG10IChsaHNfaW5kX2luaXQg W2lpXSk7CisgICAgICBpZiAocmhzX3JhbmspCisJYWRkX3N0bXQgKHJoc19p bmRfaW5pdFtpaV0pOworICAgICAgYWRkX3N0bXQgKGJ1aWxkMSAoTEFCRUxf RVhQUiwgdm9pZF90eXBlX25vZGUsIGlmX3N0bXRfbGFiZWxbaWldKSk7Cisg ICAgICBhZGRfc3RtdCAoYnVpbGQzIChDT05EX0VYUFIsIHZvaWRfdHlwZV9u b2RlLCBjb25kX2V4cHJbaWldLAorCQkJYnVpbGQxIChHT1RPX0VYUFIsIHZv aWRfdHlwZV9ub2RlLCBib2R5X2xhYmVsW2lpXSksCisJCQlidWlsZDEgKEdP VE9fRVhQUiwgdm9pZF90eXBlX25vZGUsIGV4aXRfbGFiZWxbaWldKSkpOwor ICAgICAgYWRkX3N0bXQgKGJvZHlfbGFiZWxfZXhwcltpaV0pOworICAgIH0K KworICBpZiAoTUFYIChsaHNfcmFuaywgcmhzX3JhbmspKQorICAgIGFkZF9z dG10IChhcnJheV9leHByKTsKKworICBmb3IgKGlpID0gTUFYIChsaHNfcmFu aywgcmhzX3JhbmspIC0gMTsgaWkgPj0gMDsgaWktLSkKKyAgICB7CisgICAg ICBhZGRfc3RtdCAobGhzX2V4cHJfaW5jcltpaV0pOworICAgICAgaWYgKHJo c19yYW5rICYmIHJoc19leHByX2luY3JbaWldKQorCWFkZF9zdG10IChyaHNf ZXhwcl9pbmNyW2lpXSk7CisgICAgICBhZGRfc3RtdCAoYnVpbGQxIChHT1RP X0VYUFIsIHZvaWRfdHlwZV9ub2RlLCBpZl9zdG10X2xhYmVsW2lpXSkpOwor ICAgICAgYWRkX3N0bXQgKGV4aXRfbGFiZWxfZXhwcltpaV0pOworICAgIH0K KyAgcG9wX3N0bXRfbGlzdCAobG9vcCk7CisgIHJldHVybiBsb29wOworfQor CisvKiBFbmNsb3NlcyB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50IHBhc3Nl ZCBpbiBTVE1UIHdpdGggYSBsb29wIGFyb3VuZCBpdAorICAgYW5kIHJlcGxh Y2VzIHRoZSBjb25kaXRpb24gaW4gU1RNVCB3aXRoIGEgQVJSQVlfUkVGIHRy ZWUtbm9kZSB0byB0aGUgYXJyYXkuCisgICBUaGUgY29uZGl0aW9uIG11c3Qg aGF2ZSBhIEFSUkFZX05PVEFUSU9OX1JFRiB0cmVlLiAgKi8KKworc3RhdGlj IHRyZWUKK2ZpeF9jb25kaXRpb25hbF9hcnJheV9ub3RhdGlvbnNfMSAodHJl ZSBzdG10KQoreworICB0cmVlICphcnJheV9saXN0ID0gTlVMTDsKKyAgaW50 IGxpc3Rfc2l6ZSA9IDA7CisgIHRyZWUgY29uZCA9IE5VTEw7CisgIGludCBy YW5rID0gMCwgaWkgPSAwLCBqaiA9IDA7CisgIHRyZWUgKiphcnJheV9vcHMs ICphcnJheV92YXIsICphcnJheV9vcGVyYW5kLCBqal90cmVlLCBsb29wOwor ICB0cmVlICoqYXJyYXlfdmFsdWUsICoqYXJyYXlfc3RyaWRlLCAqKmFycmF5 X2xlbmd0aCwgKiphcnJheV9zdGFydDsKKyAgdHJlZSAqYm9keV9sYWJlbCwg KmJvZHlfbGFiZWxfZXhwciwgKmV4aXRfbGFiZWwsICpleGl0X2xhYmVsX2V4 cHI7CisgIHRyZWUgKmNvbXBhcmVfZXhwciwgKmlmX3N0bXRfbGFiZWwsICpl eHByX2luY3IsICppbmRfaW5pdDsKKyAgYm9vbCAqKmNvdW50X2Rvd24sICoq YXJyYXlfdmVjdG9yOworICBsb2NhdGlvbl90IGxvY2F0aW9uID0gVU5LTk9X Tl9MT0NBVElPTjsKKworICBpZiAoVFJFRV9DT0RFIChzdG10KSA9PSBDT05E X0VYUFIpCisgICAgY29uZCA9IENPTkRfRVhQUl9DT05EIChzdG10KTsKKyAg ZWxzZSBpZiAoVFJFRV9DT0RFIChzdG10KSA9PSBTV0lUQ0hfRVhQUikKKyAg ICBjb25kID0gU1dJVENIX0NPTkQgKHN0bXQpOworICAvKiBGSVhNRTogSGFu ZGxlIHRoZSBjYXNlIGZvciBDSUxLX0ZPUl9TVE1UIGFsc28gaGVyZSB3aGVu IENpbGsgRm9yIGlzIAorICAgICBpbXBsZW1lbnRlZC4gICovCisgIGVsc2UK KyAgICAvKiBPdGhlcndpc2UgZG9udCBldmVuIHRvdWNoIHRoZSBzdGF0ZW1l bnQuICAqLworICAgIHJldHVybiBzdG10OworCisgIGZpbmRfcmFuayAoY29u ZCwgdHJ1ZSwgJnJhbmspOworICBpZiAocmFuayA9PSAwKQorICAgIHJldHVy biBzdG10OyAgCisgIAorICBleHRyYWN0X2FycmF5X25vdGF0aW9uX2V4cHJz IChjb25kLCB0cnVlLCAmYXJyYXlfbGlzdCwgJmxpc3Rfc2l6ZSk7CisKKyAg aWYgKCphcnJheV9saXN0ID09IE5VTExfVFJFRSB8fCBsaXN0X3NpemUgPT0g MCkKKyAgICByZXR1cm4gc3RtdDsKKworICBsb2NhdGlvbiA9IEVYUFJfTE9D QVRJT04gKHN0bXQpOworICAKKyAgYXJyYXlfb3BzID0gIFhORVdWRUMgKHRy ZWUgKiwgbGlzdF9zaXplKTsKKyAgZm9yIChpaSA9IDA7IGlpIDwgbGlzdF9z aXplOyBpaSsrKQorICAgIGFycmF5X29wc1tpaV0gPSAgWE5FV1ZFQyAodHJl ZSwgcmFuayk7CisgIAorICBhcnJheV92ZWN0b3IgPSAgWE5FV1ZFQyAoYm9v bCAqLCBsaXN0X3NpemUpOworICBmb3IgKGlpID0gMDsgaWkgPCBsaXN0X3Np emU7IGlpKyspCisgICAgYXJyYXlfdmVjdG9yW2lpXSA9ICBYTkVXVkVDIChi b29sLCByYW5rKTsKKworICBhcnJheV92YWx1ZSA9IFhORVdWRUMgKHRyZWUg KiwgbGlzdF9zaXplKTsKKyAgYXJyYXlfc3RyaWRlID0gWE5FV1ZFQyAodHJl ZSAqLCBsaXN0X3NpemUpOworICBhcnJheV9sZW5ndGggPSBYTkVXVkVDICh0 cmVlICosIGxpc3Rfc2l6ZSk7CisgIGFycmF5X3N0YXJ0ID0gIFhORVdWRUMg KHRyZWUgKiwgbGlzdF9zaXplKTsKKworICBmb3IgKGlpID0gMDsgaWkgPCBs aXN0X3NpemU7IGlpKyspCisgICAgeworICAgICAgYXJyYXlfdmFsdWVbaWld ICA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICAgICAgYXJyYXlfc3RyaWRl W2lpXSA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICAgICAgYXJyYXlfbGVu Z3RoW2lpXSA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICAgICAgYXJyYXlf c3RhcnRbaWldICA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICAgIH0KKwor ICBib2R5X2xhYmVsID0gWE5FV1ZFQyAodHJlZSwgcmFuayk7CisgIGJvZHlf bGFiZWxfZXhwciA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICBleGl0X2xh YmVsID0gWE5FV1ZFQyAodHJlZSwgIHJhbmspOworICBleGl0X2xhYmVsX2V4 cHIgPSBYTkVXVkVDICh0cmVlLCByYW5rKTsKKyAgY29tcGFyZV9leHByID0g WE5FV1ZFQyAodHJlZSwgcmFuayk7CisgIGlmX3N0bXRfbGFiZWwgPSBYTkVX VkVDICh0cmVlLCByYW5rKTsKKyAgCisgIGV4cHJfaW5jciA9IFhORVdWRUMg KHRyZWUsIHJhbmspOworICBpbmRfaW5pdCA9IFhORVdWRUMgKHRyZWUsICBy YW5rKTsKKyAgCisgIGNvdW50X2Rvd24gPSBYTkVXVkVDIChib29sICosIGxp c3Rfc2l6ZSk7CisgIGZvciAoaWkgPSAwOyBpaSA8IGxpc3Rfc2l6ZTsgaWkr KykKKyAgICBjb3VudF9kb3duW2lpXSA9IFhORVdWRUMgKGJvb2wsIHJhbmsp OworCisgIGFycmF5X29wZXJhbmQgPSAgWE5FV1ZFQyAodHJlZSwgbGlzdF9z aXplKTsKKyAgCisgIGFycmF5X3ZhciA9IFhORVdWRUMgKHRyZWUsIHJhbmsp OworICAKKyAgZm9yIChpaSA9IDA7IGlpIDwgbGlzdF9zaXplOyBpaSsrKQor ICAgIHsKKyAgICAgIGpqID0gMDsKKyAgICAgIGZvciAoampfdHJlZSA9IGFy cmF5X2xpc3RbaWldOworCSAgIGpqX3RyZWUgJiYgVFJFRV9DT0RFIChqal90 cmVlKSA9PSBBUlJBWV9OT1RBVElPTl9SRUY7CisJICAgampfdHJlZSA9IEFS UkFZX05PVEFUSU9OX0FSUkFZIChqal90cmVlKSkKKwl7CisJICBhcnJheV9v cHNbaWldW2pqXSA9IGpqX3RyZWU7CisJICBqaisrOworCX0KKyAgICB9Cisg IGZvciAoaWkgPSAwOyBpaSA8IGxpc3Rfc2l6ZTsgaWkrKykKKyAgICB7Cisg ICAgICBpZiAoVFJFRV9DT0RFIChhcnJheV9saXN0W2lpXSkgPT0gQVJSQVlf Tk9UQVRJT05fUkVGKQorCXsKKwkgIGZvciAoamogPSAwOyBqaiA8IHJhbms7 IGpqKyspCisJICAgIHsKKwkgICAgICBpZiAoVFJFRV9DT0RFIChhcnJheV9v cHNbaWldW2pqXSkgPT0gQVJSQVlfTk9UQVRJT05fUkVGKQorCQl7CisJCSAg YXJyYXlfdmFsdWVbaWldW2pqXSA9CisJCSAgICBBUlJBWV9OT1RBVElPTl9B UlJBWSAoYXJyYXlfb3BzW2lpXVtqal0pOworCQkgIGFycmF5X3N0YXJ0W2lp XVtqal0gPQorCQkgICAgQVJSQVlfTk9UQVRJT05fU1RBUlQgKGFycmF5X29w c1tpaV1bampdKTsKKwkJICBhcnJheV9sZW5ndGhbaWldW2pqXSA9CisJCSAg ICBBUlJBWV9OT1RBVElPTl9MRU5HVEggKGFycmF5X29wc1tpaV1bampdKTsK KwkJICBhcnJheV9zdHJpZGVbaWldW2pqXSA9CisJCSAgICBBUlJBWV9OT1RB VElPTl9TVFJJREUgKGFycmF5X29wc1tpaV1bampdKTsKKwkJICBhcnJheV92 ZWN0b3JbaWldW2pqXSA9IHRydWU7CisKKwkJICBpZiAoIVRSRUVfQ09OU1RB TlQgKGFycmF5X2xlbmd0aFtpaV1bampdKSkKKwkJICAgICAgY291bnRfZG93 bltpaV1bampdID0gZmFsc2U7CisJCSAgZWxzZSBpZiAodHJlZV9pbnRfY3N0 X2x0CisJCQkgICAoYXJyYXlfbGVuZ3RoW2lpXVtqal0sCisJCQkgICAgYnVp bGRfaW50X2NzdCAoVFJFRV9UWVBFIChhcnJheV9sZW5ndGhbaWldW2pqXSks CisJCQkJCSAgIDApKSkKKwkJICAgIGNvdW50X2Rvd25baWldW2pqXSA9IHRy dWU7CisJCSAgZWxzZQorCQkgICAgY291bnRfZG93bltpaV1bampdID0gZmFs c2U7CisJCX0KKwkgICAgICBlbHNlCisJCWFycmF5X3ZlY3RvcltpaV1bampd ID0gZmFsc2U7CisJICAgIH0KKwl9CisgICAgfQorCisgIGxvb3AgPSBwdXNo X3N0bXRfbGlzdCgpOworCisgIGZvciAoaWkgPSAwOyBpaSA8IHJhbms7IGlp KyspCisgICAgeworICAgICAgYXJyYXlfdmFyW2lpXSA9IGJ1aWxkX2RlY2wg KGxvY2F0aW9uLCBWQVJfREVDTCwgTlVMTF9UUkVFLAorCQkJCSAgaW50ZWdl cl90eXBlX25vZGUpOworICAgICAgaW5kX2luaXRbaWldID0KKwlidWlsZF9t b2RpZnlfZXhwciAobG9jYXRpb24sIGFycmF5X3ZhcltpaV0sCisJCQkgICBU UkVFX1RZUEUgKGFycmF5X3ZhcltpaV0pLCBOT1BfRVhQUiwKKwkJCSAgIGxv Y2F0aW9uLAorCQkJICAgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChhcnJh eV92YXJbaWldKSwgMCksCisJCQkgICBUUkVFX1RZUEUgKGFycmF5X3Zhcltp aV0pKTsKKwkKKyAgICB9CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgcmFuayA7 IGlpKyspCisgICAgeworICAgICAgLyogVGhpcyB3aWxsIGNyZWF0ZSB0aGUg aWYgc3RhdGVtZW50IGxhYmVsLiAgKi8KKyAgICAgIGlmX3N0bXRfbGFiZWxb aWldID0gYnVpbGRfZGVjbCAobG9jYXRpb24sIExBQkVMX0RFQ0wsIE5VTExf VFJFRSwKKwkJCQkgICAgICB2b2lkX3R5cGVfbm9kZSk7CisgICAgICBERUNM X0NPTlRFWFQgKGlmX3N0bXRfbGFiZWxbaWldKSA9IGN1cnJlbnRfZnVuY3Rp b25fZGVjbDsKKyAgICAgIERFQ0xfQVJUSUZJQ0lBTCAoaWZfc3RtdF9sYWJl bFtpaV0pID0gMDsKKyAgICAgIERFQ0xfSUdOT1JFRF9QIChpZl9zdG10X2xh YmVsW2lpXSkgPSAxOworICAKKyAgICAgIC8qIFRoaXMgbGFiZWwgc3RhdG1l bnQgd2lsbCBwb2ludCB0byB0aGUgbG9vcCBib2R5LiAgKi8KKyAgICAgIGJv ZHlfbGFiZWxbaWldID0gYnVpbGRfZGVjbCAobG9jYXRpb24sIExBQkVMX0RF Q0wsIE5VTExfVFJFRSwKKwkJCQkgICB2b2lkX3R5cGVfbm9kZSk7CisgICAg ICBERUNMX0NPTlRFWFQgKGJvZHlfbGFiZWxbaWldKSA9IGN1cnJlbnRfZnVu Y3Rpb25fZGVjbDsKKyAgICAgIERFQ0xfQVJUSUZJQ0lBTCAoYm9keV9sYWJl bFtpaV0pID0gMDsKKyAgICAgIERFQ0xfSUdOT1JFRF9QIChib2R5X2xhYmVs W2lpXSkgPSAxOworICAgICAgYm9keV9sYWJlbF9leHByW2lpXSA9IGJ1aWxk MSAoTEFCRUxfRVhQUiwgdm9pZF90eXBlX25vZGUsIGJvZHlfbGFiZWxbaWld KTsKKworICAgICAgLyogVGhpcyB3aWxsIGNyZWF0ZSB0aGUgZXhpdCBsYWJl bC4uaS5lLiB3aGVyZSB0aGUgd2hpbGUgbG9vcCB3aWxsIGJyYW5jaAorCSBv dXQgb2YuICovCisgICAgICBleGl0X2xhYmVsW2lpXSA9IGJ1aWxkX2RlY2wg KGxvY2F0aW9uLCBMQUJFTF9ERUNMLCBOVUxMX1RSRUUsCisJCQkJICAgdm9p ZF90eXBlX25vZGUpOworICAgICAgREVDTF9DT05URVhUIChleGl0X2xhYmVs W2lpXSkgPSBjdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisgICAgICBERUNMX0FS VElGSUNJQUwgKGV4aXRfbGFiZWxbaWldKSA9IDA7CisgICAgICBERUNMX0lH Tk9SRURfUCAoZXhpdF9sYWJlbFtpaV0pID0gMTsKKyAgICAgIGV4aXRfbGFi ZWxfZXhwcltpaV0gPSBidWlsZDEgKExBQkVMX0VYUFIsIHZvaWRfdHlwZV9u b2RlLCBleGl0X2xhYmVsW2lpXSk7CisgICAgfQorCisgIGZvciAoaWkgPSAw OyBpaSA8IGxpc3Rfc2l6ZTsgaWkrKykKKyAgICB7CisgICAgICBpZiAoYXJy YXlfdmVjdG9yW2lpXVswXSkKKwl7CisJICBhcnJheV9vcGVyYW5kW2lpXSA9 IGFycmF5X3ZhbHVlW2lpXVtyYW5rIC0gMV07CisJICBnY2NfYXNzZXJ0IChh cnJheV9vcGVyYW5kW2lpXSk7CisJICBmb3IgKGpqID0gcmFuayAtIDE7IGpq ID49IDA7IGpqLS0pCisJICAgIHsKKwkgICAgICBpZiAoY291bnRfZG93bltp aV1bampdKQorCQl7CisJCSAgLyogQXJyYXlbc3RhcnRfaW5kZXggLSAoaW5k dWN0aW9uX3ZhciAqIHN0cmlkZSldICovCisJCSAgYXJyYXlfb3BlcmFuZFtp aV0gPSBidWlsZF9hcnJheV9yZWYKKwkJICAgIChsb2NhdGlvbiwgYXJyYXlf b3BlcmFuZFtpaV0sCisJCSAgICAgYnVpbGQyIChNSU5VU19FWFBSLCBUUkVF X1RZUEUgKGFycmF5X3Zhcltqal0pLAorCQkJICAgICBhcnJheV9zdGFydFtp aV1bampdLAorCQkJICAgICBidWlsZDIgKE1VTFRfRVhQUiwgVFJFRV9UWVBF IChhcnJheV92YXJbampdKSwKKwkJCQkgICAgIGFycmF5X3Zhcltqal0sIGFy cmF5X3N0cmlkZVtpaV1bampdKSkpOworCQl9CisJICAgICAgZWxzZQorCQl7 CisJCSAgLyogQXJyYXlbc3RhcnRfaW5kZXggKyAoaW5kdWN0aW9uX3ZhciAq IHN0cmlkZSldICovCisJCSAgYXJyYXlfb3BlcmFuZFtpaV0gPSBidWlsZF9h cnJheV9yZWYKKwkJICAgIChsb2NhdGlvbiwgYXJyYXlfb3BlcmFuZFtpaV0s CisJCSAgICAgYnVpbGQyIChQTFVTX0VYUFIsIFRSRUVfVFlQRSAoYXJyYXlf dmFyW2pqXSksCisJCQkgICAgIGFycmF5X3N0YXJ0W2lpXVtqal0sCisJCQkg ICAgIGJ1aWxkMiAoTVVMVF9FWFBSLCBUUkVFX1RZUEUgKGFycmF5X3Zhcltq al0pLAorCQkJCSAgICAgYXJyYXlfdmFyW2pqXSwgYXJyYXlfc3RyaWRlW2lp XVtqal0pKSk7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgIHJlcGxhY2Vf YXJyYXlfbm90YXRpb25zICgmc3RtdCwgdHJ1ZSwgYXJyYXlfbGlzdCwgYXJy YXlfb3BlcmFuZCwgbGlzdF9zaXplKTsKKworICBmb3IgKGlpID0gMDsgaWkg PCByYW5rOyBpaSsrKSAKKyAgICBleHByX2luY3JbaWldID0gYnVpbGQyIChN T0RJRllfRVhQUiwgdm9pZF90eXBlX25vZGUsIGFycmF5X3ZhcltpaV0sIAor CQkJICAgIGJ1aWxkMiAoUExVU19FWFBSLCBUUkVFX1RZUEUgKGFycmF5X3Zh cltpaV0pLCAKKwkJCQkgICAgYXJyYXlfdmFyW2lpXSwgCisJCQkJICAgIGJ1 aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAoYXJyYXlfdmFyW2lpXSksIAorCQkJ CQkJICAgMSkpKTsKKyAgZm9yIChqaiA9IDA7IGpqIDwgcmFuazsgamorKykK KyAgICB7CisgICAgICBpZiAocmFuayAmJiBleHByX2luY3JbampdKQorCXsK KwkgIGlmIChjb3VudF9kb3duWzBdW2pqXSkKKwkgICAgY29tcGFyZV9leHBy W2pqXSA9CisJICAgICAgYnVpbGQyIChMVF9FWFBSLCBib29sZWFuX3R5cGVf bm9kZSwgYXJyYXlfdmFyW2pqXSwKKwkJICAgICAgYnVpbGQyIChNVUxUX0VY UFIsIFRSRUVfVFlQRSAoYXJyYXlfdmFyW2pqXSksCisJCQkgICAgICBhcnJh eV9sZW5ndGhbMF1bampdLAorCQkJICAgICAgYnVpbGRfaW50X2NzdCAoVFJF RV9UWVBFIChhcnJheV92YXJbampdKSwgLTEpKSk7CisJICBlbHNlCisJICAg IGNvbXBhcmVfZXhwcltqal0gPSBidWlsZDIgKExUX0VYUFIsIGJvb2xlYW5f dHlwZV9ub2RlLAorCQkJCSAgICAgICBhcnJheV92YXJbampdLCBhcnJheV9s ZW5ndGhbMF1bampdKTsKKwl9CisgICAgfQorICAKKyAgZm9yIChpaSA9IDA7 IGlpIDwgcmFuazsgaWkrKykKKyAgICB7CisgICAgICBhZGRfc3RtdCAoaW5k X2luaXQgW2lpXSk7CisgICAgICBhZGRfc3RtdCAoYnVpbGQxIChMQUJFTF9F WFBSLCB2b2lkX3R5cGVfbm9kZSwgaWZfc3RtdF9sYWJlbFtpaV0pKTsKKyAg ICAgIGFkZF9zdG10IChidWlsZDMgKENPTkRfRVhQUiwgdm9pZF90eXBlX25v ZGUsIGNvbXBhcmVfZXhwcltpaV0sCisJCQlidWlsZDEgKEdPVE9fRVhQUiwg dm9pZF90eXBlX25vZGUsIGJvZHlfbGFiZWxbaWldKSwKKwkJCWJ1aWxkMSAo R09UT19FWFBSLCB2b2lkX3R5cGVfbm9kZSwgZXhpdF9sYWJlbFtpaV0pKSk7 CisgICAgICBhZGRfc3RtdCAoYm9keV9sYWJlbF9leHByW2lpXSk7CisgICAg fQorCisgIGFkZF9zdG10IChzdG10KTsKKworICBmb3IgKGlpID0gcmFuayAt IDE7IGlpID49IDA7IGlpLS0pCisgICAgeworICAgICAgYWRkX3N0bXQgKGV4 cHJfaW5jcltpaV0pOworICAgICAgYWRkX3N0bXQgKGJ1aWxkMSAoR09UT19F WFBSLCB2b2lkX3R5cGVfbm9kZSwgaWZfc3RtdF9sYWJlbFtpaV0pKTsKKyAg ICAgIGFkZF9zdG10IChleGl0X2xhYmVsX2V4cHJbaWldKTsKKyAgICB9CisK KyAgcG9wX3N0bXRfbGlzdCAobG9vcCk7CisKKyAgWERFTEVURVZFQyAoYm9k eV9sYWJlbCk7CisgIFhERUxFVEVWRUMgKGJvZHlfbGFiZWxfZXhwcik7Cisg IFhERUxFVEVWRUMgKGV4aXRfbGFiZWwpOworICBYREVMRVRFVkVDIChleGl0 X2xhYmVsX2V4cHIpOworICBYREVMRVRFVkVDIChjb21wYXJlX2V4cHIpOwor ICBYREVMRVRFVkVDIChpZl9zdG10X2xhYmVsKTsKKyAgWERFTEVURVZFQyAo ZXhwcl9pbmNyKTsKKyAgWERFTEVURVZFQyAoaW5kX2luaXQpOworICBYREVM RVRFVkVDIChhcnJheV9vcGVyYW5kKTsKKyAgWERFTEVURVZFQyAoYXJyYXlf dmFyKTsKKyAgCisgIGZvciAoaWkgPSAwOyBpaSA8IGxpc3Rfc2l6ZTsgaWkr KykKKyAgICB7CisgICAgICBYREVMRVRFVkVDIChjb3VudF9kb3duW2lpXSk7 CisgICAgICBYREVMRVRFVkVDIChhcnJheV92YWx1ZVtpaV0pOworICAgICAg WERFTEVURVZFQyAoYXJyYXlfc3RyaWRlW2lpXSk7CisgICAgICBYREVMRVRF VkVDIChhcnJheV9sZW5ndGhbaWldKTsKKyAgICAgIFhERUxFVEVWRUMgKGFy cmF5X3N0YXJ0W2lpXSk7CisgICAgICBYREVMRVRFVkVDIChhcnJheV9vcHNb aWldKTsKKyAgICAgIFhERUxFVEVWRUMgKGFycmF5X3ZlY3RvcltpaV0pOwor ICAgIH0KKworICBYREVMRVRFVkVDIChjb3VudF9kb3duKTsKKyAgWERFTEVU RVZFQyAoYXJyYXlfdmFsdWUpOworICBYREVMRVRFVkVDIChhcnJheV9zdHJp ZGUpOworICBYREVMRVRFVkVDIChhcnJheV9sZW5ndGgpOworICBYREVMRVRF VkVDIChhcnJheV9zdGFydCk7CisgIFhERUxFVEVWRUMgKGFycmF5X29wcyk7 CisgIFhERUxFVEVWRUMgKGFycmF5X3ZlY3Rvcik7CisKKyAgcmV0dXJuIGxv b3A7Cit9CisKKy8qIFRvcC1sZXZlbCBmdW5jdGlvbiB0byByZXBsYWNlIEFS UkFZX05PVEFUSU9OX1JFRiBpbiBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudAor ICAgaW4gU1RNVC4gICovCisKK3RyZWUKK2ZpeF9jb25kaXRpb25hbF9hcnJh eV9ub3RhdGlvbnMgKHRyZWUgc3RtdCkKK3sKKyAgaWYgKFRSRUVfQ09ERSAo c3RtdCkgPT0gU1RBVEVNRU5UX0xJU1QpCisgICAgeworICAgICAgdHJlZV9z dG10X2l0ZXJhdG9yIHRzaTsKKyAgICAgIGZvciAodHNpID0gdHNpX3N0YXJ0 IChzdG10KTsgIXRzaV9lbmRfcCAodHNpKTsgdHNpX25leHQgKCZ0c2kpKQor CXsKKwkgIHRyZWUgc2luZ2xlX3N0bXQgPSAqdHNpX3N0bXRfcHRyICh0c2kp OworCSAgKnRzaV9zdG10X3B0ciAodHNpKSA9CisJICAgIGZpeF9jb25kaXRp b25hbF9hcnJheV9ub3RhdGlvbnNfMSAoc2luZ2xlX3N0bXQpOworCX0KKyAg ICAgIHJldHVybiBzdG10OworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBm aXhfY29uZGl0aW9uYWxfYXJyYXlfbm90YXRpb25zXzEgKHN0bXQpOworfQor CisvKiBDcmVhdGUgYSBzdHJ1Y3QgY19leHByIHRoYXQgY29udGFpbnMgYSBs b29wIHdpdGggQVJSQVlfUkVGIGV4cHIgYXQgbG9jYXRpb24KKyAgIExPQ0FU SU9OIHdpdGggdGhlIHRyZWVfY29kZSBDT0RFIGFuZCB0aGUgYXJyYXkgbm90 YXRpb24gZXhwciBpcworICAgcGFzc2VkIGluIEFSRy4gIFJldHVybnMgdGhl IGZpeGVkIGNfZXhwciBpbiBBUkcgaXRzZWxmLiAgKi8KKworc3RydWN0IGNf ZXhwciAKK2ZpeF9hcnJheV9ub3RhdGlvbl9leHByIChsb2NhdGlvbl90IGxv Y2F0aW9uLCBlbnVtIHRyZWVfY29kZSBjb2RlLAorCQkJIHN0cnVjdCBjX2V4 cHIgYXJnKQoreworCisgIHRyZWUgKmFycmF5X2xpc3QgPSBOVUxMOworICBp bnQgbGlzdF9zaXplID0gMDsKKyAgaW50IHJhbmsgPSAwLCBpaSA9IDAsIGpq ID0gMDsKKyAgdHJlZSAqKmFycmF5X29wcywgKmFycmF5X3ZhciwgKmFycmF5 X29wZXJhbmQsIGpqX3RyZWUsIGxvb3A7CisgIHRyZWUgKiphcnJheV92YWx1 ZSwgKiphcnJheV9zdHJpZGUsICoqYXJyYXlfbGVuZ3RoLCAqKmFycmF5X3N0 YXJ0OworICB0cmVlICpib2R5X2xhYmVsLCAqYm9keV9sYWJlbF9leHByLCAq ZXhpdF9sYWJlbCwgKmV4aXRfbGFiZWxfZXhwcjsKKyAgdHJlZSAqY29tcGFy ZV9leHByLCAqaWZfc3RtdF9sYWJlbCwgKmV4cHJfaW5jciwgKmluZF9pbml0 OworICBib29sICoqY291bnRfZG93biwgKiphcnJheV92ZWN0b3I7CisgIAor ICBmaW5kX3JhbmsgKGFyZy52YWx1ZSwgZmFsc2UsICZyYW5rKTsKKyAgaWYg KHJhbmsgPT0gMCkKKyAgICByZXR1cm4gYXJnOworCisgIGV4dHJhY3RfYXJy YXlfbm90YXRpb25fZXhwcnMgKGFyZy52YWx1ZSwgdHJ1ZSwgJmFycmF5X2xp c3QsICZsaXN0X3NpemUpOworCisgIGlmIChsaXN0X3NpemUgPT0gMCB8fCAq YXJyYXlfbGlzdCA9PSBOVUxMX1RSRUUpCisgICAgcmV0dXJuIGFyZzsKKwor ICBhcnJheV9vcHMgPSBYTkVXVkVDICh0cmVlICosIGxpc3Rfc2l6ZSk7Cisg IGZvciAoaWkgPSAwOyBpaSA8IGxpc3Rfc2l6ZTsgaWkrKykKKyAgICBhcnJh eV9vcHNbaWldID0gWE5FV1ZFQyAodHJlZSwgIHJhbmspOworICAKKyAgYXJy YXlfdmVjdG9yID0gIFhORVdWRUMgKGJvb2wgKiwgbGlzdF9zaXplKTsKKyAg Zm9yIChpaSA9IDA7IGlpIDwgbGlzdF9zaXplOyBpaSsrKQorICAgIGFycmF5 X3ZlY3RvcltpaV0gPSBYTkVXVkVDIChib29sLCByYW5rKTsKKworICBhcnJh eV92YWx1ZSA9IFhORVdWRUMgKHRyZWUgKiwgbGlzdF9zaXplKTsKKyAgYXJy YXlfc3RyaWRlID0gWE5FV1ZFQyAodHJlZSAqLCBsaXN0X3NpemUpOworICBh cnJheV9sZW5ndGggPSBYTkVXVkVDICh0cmVlICosIGxpc3Rfc2l6ZSk7Cisg IGFycmF5X3N0YXJ0ID0gWE5FV1ZFQyAodHJlZSAqLCBsaXN0X3NpemUpOwor CisgIGZvciAoaWkgPSAwOyBpaSA8IGxpc3Rfc2l6ZTsgaWkrKykKKyAgICB7 CisgICAgICBhcnJheV92YWx1ZVtpaV0gID0gWE5FV1ZFQyAodHJlZSwgcmFu ayk7CisgICAgICBhcnJheV9zdHJpZGVbaWldID0gWE5FV1ZFQyAodHJlZSwg cmFuayk7CisgICAgICBhcnJheV9sZW5ndGhbaWldID0gWE5FV1ZFQyAodHJl ZSwgcmFuayk7CisgICAgICBhcnJheV9zdGFydFtpaV0gID0gWE5FV1ZFQyAo dHJlZSwgcmFuayk7CisgICAgfQorCisgIGJvZHlfbGFiZWwgPSBYTkVXVkVD ICh0cmVlLCByYW5rKTsKKyAgYm9keV9sYWJlbF9leHByID0gWE5FV1ZFQyAo dHJlZSwgcmFuayk7CisgIGV4aXRfbGFiZWwgPSBYTkVXVkVDICh0cmVlLCBy YW5rKTsKKyAgZXhpdF9sYWJlbF9leHByID0gWE5FV1ZFQyAodHJlZSwgcmFu ayk7CisgIGNvbXBhcmVfZXhwciA9IFhORVdWRUMgKHRyZWUsIHJhbmspOwor ICBpZl9zdG10X2xhYmVsID0gWE5FV1ZFQyAodHJlZSwgcmFuayk7CisgIAor ICBleHByX2luY3IgPSBYTkVXVkVDICh0cmVlLCByYW5rKTsKKyAgaW5kX2lu aXQgPSBYTkVXVkVDICh0cmVlLCByYW5rKTsKKyAgCisgIGNvdW50X2Rvd24g PSBYTkVXVkVDIChib29sICosIGxpc3Rfc2l6ZSk7CisgIGZvciAoaWkgPSAw OyBpaSA8IGxpc3Rfc2l6ZTsgaWkrKykKKyAgICBjb3VudF9kb3duW2lpXSA9 IFhORVdWRUMgKGJvb2wsIHJhbmspOworCisgIGFycmF5X29wZXJhbmQgPSBY TkVXVkVDICh0cmVlLCBsaXN0X3NpemUpOworICBhcnJheV92YXIgPSBYTkVX VkVDICh0cmVlLCByYW5rKTsKKworICBmb3IgKGlpID0gMDsgaWkgPCBsaXN0 X3NpemU7IGlpKyspCisgICAgeworICAgICAgamogPSAwOworICAgICAgZm9y IChqal90cmVlID0gYXJyYXlfbGlzdFtpaV07CisJICAgampfdHJlZSAmJiBU UkVFX0NPREUgKGpqX3RyZWUpID09IEFSUkFZX05PVEFUSU9OX1JFRjsKKwkg ICBqal90cmVlID0gQVJSQVlfTk9UQVRJT05fQVJSQVkgKGpqX3RyZWUpKQor CXsKKwkgIGFycmF5X29wc1tpaV1bampdID0gampfdHJlZTsKKwkgIGpqKys7 CisJfQorICAgIH0KKworICBmb3IgKGlpID0gMDsgaWkgPCBsaXN0X3NpemU7 IGlpKyspCisgICAgeworICAgICAgaWYgKFRSRUVfQ09ERSAoYXJyYXlfbGlz dFtpaV0pID09IEFSUkFZX05PVEFUSU9OX1JFRikKKwl7CisJICBmb3IgKGpq ID0gMDsgamogPCByYW5rOyBqaisrKQorCSAgICB7CisJICAgICAgaWYgKFRS RUVfQ09ERSAoYXJyYXlfb3BzW2lpXVtqal0pID09IEFSUkFZX05PVEFUSU9O X1JFRikKKwkJeworCQkgIGFycmF5X3ZhbHVlW2lpXVtqal0gPQorCQkgICAg QVJSQVlfTk9UQVRJT05fQVJSQVkgKGFycmF5X29wc1tpaV1bampdKTsKKwkJ ICBhcnJheV9zdGFydFtpaV1bampdID0KKwkJICAgIEFSUkFZX05PVEFUSU9O X1NUQVJUIChhcnJheV9vcHNbaWldW2pqXSk7CisJCSAgYXJyYXlfbGVuZ3Ro W2lpXVtqal0gPQorCQkgICAgQVJSQVlfTk9UQVRJT05fTEVOR1RIIChhcnJh eV9vcHNbaWldW2pqXSk7CisJCSAgYXJyYXlfc3RyaWRlW2lpXVtqal0gPQor CQkgICAgQVJSQVlfTk9UQVRJT05fU1RSSURFIChhcnJheV9vcHNbaWldW2pq XSk7CisJCSAgYXJyYXlfdmVjdG9yW2lpXVtqal0gPSB0cnVlOworCisJCSAg aWYgKCFUUkVFX0NPTlNUQU5UIChhcnJheV9sZW5ndGhbaWldW2pqXSkpIAor CQkgICAgY291bnRfZG93bltpaV1bampdID0gZmFsc2U7CisJCSAgZWxzZSBp ZiAodHJlZV9pbnRfY3N0X2x0CisJCQkgICAoYXJyYXlfbGVuZ3RoW2lpXVtq al0sCisJCQkgICAgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChhcnJheV9s ZW5ndGhbaWldW2pqXSksCisJCQkJCSAgIDApKSkKKwkJICAgIGNvdW50X2Rv d25baWldW2pqXSA9IHRydWU7CisJCSAgZWxzZQorCQkgICAgY291bnRfZG93 bltpaV1bampdID0gZmFsc2U7CisJCX0KKwkgICAgICBlbHNlCisJCWFycmF5 X3ZlY3RvcltpaV1bampdID0gZmFsc2U7CisJICAgIH0KKwl9CisgICAgfQor CisgIGxvb3AgPSBwdXNoX3N0bXRfbGlzdCAoKTsKKworICBmb3IgKGlpID0g MDsgaWkgPCByYW5rOyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5X3Zhcltp aV0gPSBidWlsZF9kZWNsIChsb2NhdGlvbiwgVkFSX0RFQ0wsIE5VTExfVFJF RSwKKwkJCQkgIGludGVnZXJfdHlwZV9ub2RlKTsKKyAgICAgIGluZF9pbml0 W2lpXSA9CisJYnVpbGRfbW9kaWZ5X2V4cHIgKGxvY2F0aW9uLCBhcnJheV92 YXJbaWldLAorCQkJICAgVFJFRV9UWVBFIChhcnJheV92YXJbaWldKSwgTk9Q X0VYUFIsCisJCQkgICBsb2NhdGlvbiwKKwkJCSAgIGJ1aWxkX2ludF9jc3Qg KFRSRUVfVFlQRSAoYXJyYXlfdmFyW2lpXSksIDApLAorCQkJICAgVFJFRV9U WVBFIChhcnJheV92YXJbaWldKSk7CisJCisgICAgfQorCisgIGZvciAoaWkg PSAwOyBpaSA8IHJhbmsgOyBpaSsrKQorICAgIHsKKyAgICAgIC8qIFRoaXMg d2lsbCBjcmVhdGUgdGhlIGlmIHN0YXRlbWVudCBsYWJlbC4gICovCisgICAg ICBpZl9zdG10X2xhYmVsW2lpXSA9IGJ1aWxkX2RlY2wgKGxvY2F0aW9uLCBM QUJFTF9ERUNMLCBOVUxMX1RSRUUsCisJCQkJICAgICAgdm9pZF90eXBlX25v ZGUpOworICAgICAgREVDTF9DT05URVhUIChpZl9zdG10X2xhYmVsW2lpXSkg PSBjdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisgICAgICBERUNMX0FSVElGSUNJ QUwgKGlmX3N0bXRfbGFiZWxbaWldKSA9IDA7CisgICAgICBERUNMX0lHTk9S RURfUCAoaWZfc3RtdF9sYWJlbFtpaV0pID0gMTsKKyAgCisgICAgICAvKiBU aGlzIGxhYmVsIHN0YXRtZW50IHdpbGwgcG9pbnQgdG8gdGhlIGxvb3AgYm9k eS4gICovCisgICAgICBib2R5X2xhYmVsW2lpXSA9IGJ1aWxkX2RlY2wgKGxv Y2F0aW9uLCBMQUJFTF9ERUNMLCBOVUxMX1RSRUUsCisJCQkJICAgdm9pZF90 eXBlX25vZGUpOworICAgICAgREVDTF9DT05URVhUIChib2R5X2xhYmVsW2lp XSkgPSBjdXJyZW50X2Z1bmN0aW9uX2RlY2w7CisgICAgICBERUNMX0FSVElG SUNJQUwgKGJvZHlfbGFiZWxbaWldKSA9IDA7CisgICAgICBERUNMX0lHTk9S RURfUCAoYm9keV9sYWJlbFtpaV0pID0gMTsKKyAgICAgIGJvZHlfbGFiZWxf ZXhwcltpaV0gPSBidWlsZDEgKExBQkVMX0VYUFIsIHZvaWRfdHlwZV9ub2Rl LCBib2R5X2xhYmVsW2lpXSk7CisKKyAgICAgIC8qIFRoaXMgd2lsbCBjcmVh dGUgdGhlIGV4aXQgbGFiZWwsIGkuZS4gd2hlcmUgdGhlIHdoaWxlIGxvb3Ag d2lsbCBicmFuY2gKKwkgb3V0IG9mLiAgKi8KKyAgICAgIGV4aXRfbGFiZWxb aWldID0gYnVpbGRfZGVjbCAobG9jYXRpb24sIExBQkVMX0RFQ0wsIE5VTExf VFJFRSwKKwkJCQkgICB2b2lkX3R5cGVfbm9kZSk7CisgICAgICBERUNMX0NP TlRFWFQgKGV4aXRfbGFiZWxbaWldKSA9IGN1cnJlbnRfZnVuY3Rpb25fZGVj bDsKKyAgICAgIERFQ0xfQVJUSUZJQ0lBTCAoZXhpdF9sYWJlbFtpaV0pID0g MDsKKyAgICAgIERFQ0xfSUdOT1JFRF9QIChleGl0X2xhYmVsW2lpXSkgPSAx OworICAgICAgZXhpdF9sYWJlbF9leHByW2lpXSA9IGJ1aWxkMSAoTEFCRUxf RVhQUiwgdm9pZF90eXBlX25vZGUsIGV4aXRfbGFiZWxbaWldKTsKKyAgICB9 CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgbGlzdF9zaXplOyBpaSsrKQorICAg IHsKKyAgICAgIGlmIChhcnJheV92ZWN0b3JbaWldWzBdKQorCXsKKwkgIGFy cmF5X29wZXJhbmRbaWldID0gYXJyYXlfdmFsdWVbaWldW3JhbmsgLSAxXTsK KwkgIGdjY19hc3NlcnQgKGFycmF5X29wZXJhbmRbaWldKTsKKwkgIGZvciAo amogPSByYW5rIC0gMTsgamogPj0gMDsgamotLSkKKwkgICAgeworCSAgICAg IGlmIChjb3VudF9kb3duW2lpXVtqal0pCisJCXsKKwkJICAvKiBBcnJheVtz dGFydF9pbmRleCAtIChpbmR1Y3Rpb25fdmFyICogc3RyaWRlKV0gKi8KKwkJ ICBhcnJheV9vcGVyYW5kW2lpXSA9IGJ1aWxkX2FycmF5X3JlZgorCQkgICAg KGxvY2F0aW9uLCBhcnJheV9vcGVyYW5kW2lpXSwKKwkJICAgICBidWlsZDIg KE1JTlVTX0VYUFIsIFRSRUVfVFlQRSAoYXJyYXlfdmFyW2pqXSksCisJCQkg ICAgIGFycmF5X3N0YXJ0W2lpXVtqal0sCisJCQkgICAgIGJ1aWxkMiAoTVVM VF9FWFBSLCBUUkVFX1RZUEUgKGFycmF5X3Zhcltqal0pLAorCQkJCSAgICAg YXJyYXlfdmFyW2pqXSwgYXJyYXlfc3RyaWRlW2lpXVtqal0pKSk7CisJCX0K KwkgICAgICBlbHNlCisJCXsKKwkJICAvKiBBcnJheVtzdGFydF9pbmRleCAr IChpbmR1Y3Rpb25fdmFyICogc3RyaWRlKV0gKi8KKwkJICBhcnJheV9vcGVy YW5kW2lpXSA9IGJ1aWxkX2FycmF5X3JlZgorCQkgICAgKGxvY2F0aW9uLCBh cnJheV9vcGVyYW5kW2lpXSwKKwkJICAgICBidWlsZDIgKFBMVVNfRVhQUiwg VFJFRV9UWVBFIChhcnJheV92YXJbampdKSwKKwkJCSAgICAgYXJyYXlfc3Rh cnRbaWldW2pqXSwKKwkJCSAgICAgYnVpbGQyIChNVUxUX0VYUFIsIFRSRUVf VFlQRSAoYXJyYXlfdmFyW2pqXSksCisJCQkJICAgICBhcnJheV92YXJbampd LCBhcnJheV9zdHJpZGVbaWldW2pqXSkpKTsKKwkJfQorCSAgICB9CisJfQor ICAgIH0KKyAgcmVwbGFjZV9hcnJheV9ub3RhdGlvbnMgKCZhcmcudmFsdWUs IHRydWUsIGFycmF5X2xpc3QsIGFycmF5X29wZXJhbmQsCisJCQkgICBsaXN0 X3NpemUpOworCisgIGZvciAoaWkgPSAwOyBpaSA8IHJhbms7IGlpKyspCisg ICAgeworICAgICAgZXhwcl9pbmNyW2lpXSA9CisJYnVpbGQyIChNT0RJRllf RVhQUiwgdm9pZF90eXBlX25vZGUsIGFycmF5X3ZhcltpaV0sCisJCWJ1aWxk MiAoUExVU19FWFBSLCBUUkVFX1RZUEUgKGFycmF5X3ZhcltpaV0pLCBhcnJh eV92YXJbaWldLAorCQkJYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChhcnJh eV92YXJbaWldKSwgMSkpKTsKKyAgICB9CisgIAorICBmb3IgKGpqID0gMDsg amogPCByYW5rOyBqaisrKQorICAgIHsKKyAgICAgIGlmIChyYW5rICYmIGV4 cHJfaW5jcltqal0pCisJeworCSAgaWYgKGNvdW50X2Rvd25bMF1bampdKQor CSAgICBjb21wYXJlX2V4cHJbampdID0KKwkgICAgICBidWlsZDIgKExUX0VY UFIsIGJvb2xlYW5fdHlwZV9ub2RlLCBhcnJheV92YXJbampdLAorCQkgICAg ICBidWlsZDIgKE1VTFRfRVhQUiwgVFJFRV9UWVBFIChhcnJheV92YXJbampd KSwKKwkJCSAgICAgIGFycmF5X2xlbmd0aFswXVtqal0sCisJCQkgICAgICBi dWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKGFycmF5X3Zhcltqal0pLCAtMSkp KTsKKwkgIGVsc2UKKwkgICAgY29tcGFyZV9leHByW2pqXSA9IGJ1aWxkMiAo TFRfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsCisJCQkJICAgICAgIGFycmF5 X3Zhcltqal0sIGFycmF5X2xlbmd0aFswXVtqal0pOworCX0KKyAgICB9CisK KyAgCisgIGZvciAoaWkgPSAwOyBpaSA8IHJhbms7IGlpKyspCisgICAgewor ICAgICAgYWRkX3N0bXQgKGluZF9pbml0IFtpaV0pOworICAgICAgYWRkX3N0 bXQgKGJ1aWxkMSAoTEFCRUxfRVhQUiwgdm9pZF90eXBlX25vZGUsIGlmX3N0 bXRfbGFiZWxbaWldKSk7CisgICAgICBhZGRfc3RtdCAoYnVpbGQzIChDT05E X0VYUFIsIHZvaWRfdHlwZV9ub2RlLCBjb21wYXJlX2V4cHJbaWldLAorCQkJ YnVpbGQxIChHT1RPX0VYUFIsIHZvaWRfdHlwZV9ub2RlLCBib2R5X2xhYmVs W2lpXSksCisJCQlidWlsZDEgKEdPVE9fRVhQUiwgdm9pZF90eXBlX25vZGUs IGV4aXRfbGFiZWxbaWldKSkpOworICAgICAgYWRkX3N0bXQgKGJvZHlfbGFi ZWxfZXhwcltpaV0pOworICAgIH0KKworICBpZiAoY29kZSA9PSBQT1NUSU5D UkVNRU5UX0VYUFIgfHwgY29kZSA9PSBQT1NUREVDUkVNRU5UX0VYUFIpCisg ICAgeworICAgICAgYXJnID0gZGVmYXVsdF9mdW5jdGlvbl9hcnJheV9yZWFk X2NvbnZlcnNpb24gKGxvY2F0aW9uLCBhcmcpOworICAgICAgYXJnLnZhbHVl ID0gYnVpbGRfdW5hcnlfb3AgKGxvY2F0aW9uLCBjb2RlLCBhcmcudmFsdWUs IDApOworICAgIH0KKyAgZWxzZSBpZiAoY29kZSA9PSBQUkVJTkNSRU1FTlRf RVhQUiB8fCBjb2RlID09IFBSRURFQ1JFTUVOVF9FWFBSKQorICAgIHsKKyAg ICAgIGFyZyA9IGRlZmF1bHRfZnVuY3Rpb25fYXJyYXlfcmVhZF9jb252ZXJz aW9uIChsb2NhdGlvbiwgYXJnKTsKKyAgICAgIGFyZyA9IHBhcnNlcl9idWls ZF91bmFyeV9vcCAobG9jYXRpb24sIGNvZGUsIGFyZyk7CisgICAgfQorCisg IGFkZF9zdG10IChhcmcudmFsdWUpOworICAKKyAgZm9yIChpaSA9IHJhbmsg LSAxOyBpaSA+PSAwOyBpaS0tKQorICAgIHsKKyAgICAgIGFkZF9zdG10IChl eHByX2luY3JbaWldKTsKKyAgICAgIGFkZF9zdG10IChidWlsZDEgKEdPVE9f RVhQUiwgdm9pZF90eXBlX25vZGUsIGlmX3N0bXRfbGFiZWxbaWldKSk7Cisg ICAgICBhZGRfc3RtdCAoZXhpdF9sYWJlbF9leHByW2lpXSk7CisgICAgfQor CisgIHBvcF9zdG10X2xpc3QgKGxvb3ApOworCisgIFhERUxFVEVWRUMgKGJv ZHlfbGFiZWwpOworICBYREVMRVRFVkVDIChib2R5X2xhYmVsX2V4cHIpOwor ICBYREVMRVRFVkVDIChleGl0X2xhYmVsKTsKKyAgWERFTEVURVZFQyAoZXhp dF9sYWJlbF9leHByKTsKKyAgWERFTEVURVZFQyAoY29tcGFyZV9leHByKTsK KyAgWERFTEVURVZFQyAoaWZfc3RtdF9sYWJlbCk7CisgIFhERUxFVEVWRUMg KGV4cHJfaW5jcik7CisgIFhERUxFVEVWRUMgKGluZF9pbml0KTsKKyAgWERF TEVURVZFQyAoYXJyYXlfb3BlcmFuZCk7CisgIFhERUxFVEVWRUMgKGFycmF5 X3Zhcik7CisgIAorICBmb3IgKGlpID0gMDsgaWkgPCBsaXN0X3NpemU7IGlp KyspCisgICAgeworICAgICAgWERFTEVURVZFQyAoY291bnRfZG93bltpaV0p OworICAgICAgWERFTEVURVZFQyAoYXJyYXlfdmFsdWVbaWldKTsKKyAgICAg IFhERUxFVEVWRUMgKGFycmF5X3N0cmlkZVtpaV0pOworICAgICAgWERFTEVU RVZFQyAoYXJyYXlfbGVuZ3RoW2lpXSk7CisgICAgICBYREVMRVRFVkVDIChh cnJheV9zdGFydFtpaV0pOworICAgICAgWERFTEVURVZFQyAoYXJyYXlfb3Bz W2lpXSk7CisgICAgICBYREVMRVRFVkVDIChhcnJheV92ZWN0b3JbaWldKTsK KyAgICB9CisKKyAgWERFTEVURVZFQyAoY291bnRfZG93bik7CisgIFhERUxF VEVWRUMgKGFycmF5X3ZhbHVlKTsKKyAgWERFTEVURVZFQyAoYXJyYXlfc3Ry aWRlKTsKKyAgWERFTEVURVZFQyAoYXJyYXlfbGVuZ3RoKTsKKyAgWERFTEVU RVZFQyAoYXJyYXlfc3RhcnQpOworICBYREVMRVRFVkVDIChhcnJheV9vcHMp OworICBYREVMRVRFVkVDIChhcnJheV92ZWN0b3IpOworCisgIGFyZy52YWx1 ZSA9IGxvb3A7CisgIHJldHVybiBhcmc7Cit9CisKKy8qIFJlcGxhY2UgYXJy YXkgbm90YXRpb24ncyBidWlsdC1pbiBmdW5jdGlvbiBwYXNzZWQgaW4gQU5f QlVJTFRJTl9GTiB3aXRoCisgICB0aGUgYXBwcm9wcmlhdGUgbG9vcCBhbmQg Y29tcHV0YXRpb24gKGFsbCBzdG9yZWQgaW4gdmFyaWFibGUgTE9PUCBvZiB0 eXBlCisgICB0cmVlIG5vZGUpLiAgVGhlIG91dHB1dCBvZiB0aGUgZnVuY3Rp b24gZnVuY3Rpb24gaXMgYWx3YXlzIGEgc2NhbGFyIGFuZCB0aGF0CisgICBy ZXN1bHQgaXMgcmV0dXJuZWQgaW4gKk5FV19WQVIuICAqTkVXX1ZBUiBpcyBO VUxMX1RSRUUgaWYgdGhlIGZ1bmN0aW9uIGlzCisgICBfX3NlY19yZWR1Y2Vf bXV0YXRpbmcuICAqLworCitzdGF0aWMgdHJlZQorZml4X2J1aWx0aW5fYXJy YXlfbm90YXRpb25fZm4gKHRyZWUgYW5fYnVpbHRpbl9mbiwgdHJlZSAqbmV3 X3ZhcikKK3sKKyAgdHJlZSBuZXdfdmFyX3R5cGUgPSBOVUxMX1RSRUUsIGZ1 bmNfcGFybSwgbmV3X2V4cHIsIG5ld195ZXNfZXhwciwgbmV3X25vX2V4cHI7 CisgIHRyZWUgYXJyYXlfaW5kX3ZhbHVlID0gTlVMTF9UUkVFLCBuZXdfbm9f aW5kLCBuZXdfeWVzX2luZCwgbmV3X25vX2xpc3Q7CisgIHRyZWUgbmV3X3ll c19saXN0LCBuZXdfY29uZF9leHByLCBuZXdfdmFyX2luaXQgPSBOVUxMX1RS RUU7CisgIHRyZWUgbmV3X2V4cF9pbml0ID0gTlVMTF9UUkVFOworICBhbl9y ZWR1Y2VfdHlwZSBhbl90eXBlID0gUkVEVUNFX1VOS05PV047CisgIHRyZWUg KmFycmF5X2xpc3QgPSBOVUxMOworICBpbnQgbGlzdF9zaXplID0gMDsKKyAg aW50IHJhbmsgPSAwLCBpaSA9IDAsIGpqID0gMDsKKyAgdHJlZSAqKmFycmF5 X29wcywgKmFycmF5X3ZhciwgKmFycmF5X29wZXJhbmQsIGpqX3RyZWUsIGxv b3A7CisgIHRyZWUgKiphcnJheV92YWx1ZSwgKiphcnJheV9zdHJpZGUsICoq YXJyYXlfbGVuZ3RoLCAqKmFycmF5X3N0YXJ0OworICB0cmVlICpib2R5X2xh YmVsLCAqYm9keV9sYWJlbF9leHByLCAqZXhpdF9sYWJlbCwgKmV4aXRfbGFi ZWxfZXhwcjsKKyAgdHJlZSAqY29tcGFyZV9leHByLCAqaWZfc3RtdF9sYWJl bCwgKmV4cHJfaW5jciwgKmluZF9pbml0OworICB0cmVlIGlkZW50aXR5X3Zh bHVlID0gTlVMTF9UUkVFLCBjYWxsX2ZuID0gTlVMTF9UUkVFLCBuZXdfY2Fs bF9leHByOworICBib29sICoqY291bnRfZG93biwgKiphcnJheV92ZWN0b3I7 CisgIGxvY2F0aW9uX3QgbG9jYXRpb24gPSBVTktOT1dOX0xPQ0FUSU9OOwor ICAKKyAgaWYgKCFpc19idWlsdGluX2FycmF5X25vdGF0aW9uX2ZuIChDQUxM X0VYUFJfRk4gKGFuX2J1aWx0aW5fZm4pLCAmYW5fdHlwZSkpCisgICAgcmV0 dXJuIE5VTExfVFJFRTsKKworICBpZiAoYW5fdHlwZSAhPSBSRURVQ0VfQ1VT VE9NICYmIGFuX3R5cGUgIT0gUkVEVUNFX01VVEFUSU5HKQorICAgIGZ1bmNf cGFybSA9IENBTExfRVhQUl9BUkcgKGFuX2J1aWx0aW5fZm4sIDApOworICBl bHNlCisgICAgeworICAgICAgY2FsbF9mbiA9IENBTExfRVhQUl9BUkcgKGFu X2J1aWx0aW5fZm4sIDIpOworICAgICAgd2hpbGUgKFRSRUVfQ09ERSAoY2Fs bF9mbikgPT0gQ09OVkVSVF9FWFBSCisJICAgICB8fCBUUkVFX0NPREUgKGNh bGxfZm4pID09IE5PUF9FWFBSKQorCWNhbGxfZm4gPSBUUkVFX09QRVJBTkQg KGNhbGxfZm4sIDApOworICAgICAgY2FsbF9mbiA9IFRSRUVfT1BFUkFORCAo Y2FsbF9mbiwgMCk7CisgICAgICAKKyAgICAgIGlkZW50aXR5X3ZhbHVlID0g Q0FMTF9FWFBSX0FSRyAoYW5fYnVpbHRpbl9mbiwgMCk7CisgICAgICB3aGls ZSAoVFJFRV9DT0RFIChpZGVudGl0eV92YWx1ZSkgPT0gQ09OVkVSVF9FWFBS CisJICAgICB8fCBUUkVFX0NPREUgKGlkZW50aXR5X3ZhbHVlKSA9PSBOT1Bf RVhQUikKKwlpZGVudGl0eV92YWx1ZSA9IFRSRUVfT1BFUkFORCAoaWRlbnRp dHlfdmFsdWUsIDApOworICAgICAgZnVuY19wYXJtID0gQ0FMTF9FWFBSX0FS RyAoYW5fYnVpbHRpbl9mbiwgMSk7CisgICAgfQorICAKKyAgd2hpbGUgKFRS RUVfQ09ERSAoZnVuY19wYXJtKSA9PSBDT05WRVJUX0VYUFIKKwkgfHwgVFJF RV9DT0RFIChmdW5jX3Bhcm0pID09IE5PUF9FWFBSKQorICAgIGZ1bmNfcGFy bSA9IFRSRUVfT1BFUkFORCAoZnVuY19wYXJtLCAwKTsKKyAgCisgIGZpbmRf cmFuayAoYW5fYnVpbHRpbl9mbiwgdHJ1ZSwgJnJhbmspOworCisgIGxvY2F0 aW9uID0gRVhQUl9MT0NBVElPTiAoYW5fYnVpbHRpbl9mbik7CisgCisgIGlm IChyYW5rID09IDApCisgICAgcmV0dXJuIGFuX2J1aWx0aW5fZm47CisgIGVs c2UgaWYgKHJhbmsgPiAxIAorCSAgICYmIChhbl90eXBlID09IFJFRFVDRV9N QVhfSU5ERVggIHx8IGFuX3R5cGUgPT0gUkVEVUNFX01JTl9JTkRFWCkpCisg ICAgeworICAgICAgZXJyb3JfYXQgKGxvY2F0aW9uLCAiX19zZWNfcmVkdWNl X21pbl9pbmQgb3IgX19zZWNfcmVkdWNlX21heF9pbmQgY2Fubm90IgorCQki IGhhdmUgYXJyYXlzIHdpdGggZGltZW5zaW9uIGdyZWF0ZXIgdGhhbiAxLiIp OworICAgICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKKyAgICB9CisgIGV4 dHJhY3RfYXJyYXlfbm90YXRpb25fZXhwcnMgKGZ1bmNfcGFybSwgdHJ1ZSwg JmFycmF5X2xpc3QsICZsaXN0X3NpemUpOworICBzd2l0Y2ggKGFuX3R5cGUp CisgICAgeworICAgIGNhc2UgUkVEVUNFX0FERDoKKyAgICBjYXNlIFJFRFVD RV9NVUw6CisgICAgY2FzZSBSRURVQ0VfTUFYOgorICAgIGNhc2UgUkVEVUNF X01JTjoKKyAgICAgIG5ld192YXJfdHlwZSA9IEFSUkFZX05PVEFUSU9OX1RZ UEUgKGFycmF5X2xpc3RbMF0pOworICAgICAgYnJlYWs7CisgICAgY2FzZSBS RURVQ0VfQUxMX1pFUk9TOgorICAgIGNhc2UgUkVEVUNFX0FMTF9OT05aRVJP UzoKKyAgICBjYXNlIFJFRFVDRV9BTllfWkVST1M6CisgICAgY2FzZSBSRURV Q0VfQU5ZX05PTlpFUk9TOgorICAgICAgbmV3X3Zhcl90eXBlID0gaW50ZWdl cl90eXBlX25vZGU7CisgICAgICBicmVhazsKKyAgICBjYXNlIFJFRFVDRV9N QVhfSU5ERVg6CisgICAgY2FzZSBSRURVQ0VfTUlOX0lOREVYOgorICAgICAg bmV3X3Zhcl90eXBlID0gaW50ZWdlcl90eXBlX25vZGU7CisgICAgICBicmVh azsKKyAgICBjYXNlIFJFRFVDRV9DVVNUT006CisgICAgICBpZiAoY2FsbF9m biAmJiBpZGVudGl0eV92YWx1ZSkgCisJbmV3X3Zhcl90eXBlID0gQVJSQVlf Tk9UQVRJT05fVFlQRSAoYXJyYXlfbGlzdFswXSk7CisgICAgICBicmVhazsK KyAgICBjYXNlIFJFRFVDRV9NVVRBVElORzoKKyAgICAgIG5ld192YXJfdHlw ZSA9IE5VTExfVFJFRTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg ICAgICBnY2NfdW5yZWFjaGFibGUgKCk7ICAvKiBZb3Ugc2hvdWxkIG5vdCBy ZWFjaCBoZXJlLiAgKi8KKyAgICB9CisgIAorICBhcnJheV9vcHMgPSBYTkVX VkVDICh0cmVlICosIGxpc3Rfc2l6ZSk7CisgIGZvciAoaWkgPSAwOyBpaSA8 IGxpc3Rfc2l6ZTsgaWkrKykKKyAgICBhcnJheV9vcHNbaWldID0gWE5FV1ZF QyAodHJlZSwgcmFuayk7CisgIAorICBhcnJheV92ZWN0b3IgPSBYTkVXVkVD IChib29sICosIGxpc3Rfc2l6ZSk7CisgIGZvciAoaWkgPSAwOyBpaSA8IGxp c3Rfc2l6ZTsgaWkrKykKKyAgICBhcnJheV92ZWN0b3JbaWldID0gWE5FV1ZF QyAoYm9vbCwgcmFuayk7CisKKyAgYXJyYXlfdmFsdWUgPSBYTkVXVkVDICh0 cmVlICosIGxpc3Rfc2l6ZSk7CisgIGFycmF5X3N0cmlkZSA9IFhORVdWRUMg KHRyZWUgKiwgbGlzdF9zaXplKTsKKyAgYXJyYXlfbGVuZ3RoID0gWE5FV1ZF QyAodHJlZSAqLCBsaXN0X3NpemUpOworICBhcnJheV9zdGFydCA9IFhORVdW RUMgKHRyZWUgKiwgbGlzdF9zaXplKTsKKworICBmb3IgKGlpID0gMDsgaWkg PCBsaXN0X3NpemU7IGlpKyspCisgICAgeworICAgICAgYXJyYXlfdmFsdWVb aWldICA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICAgICAgYXJyYXlfc3Ry aWRlW2lpXSA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICAgICAgYXJyYXlf bGVuZ3RoW2lpXSA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICAgICAgYXJy YXlfc3RhcnRbaWldICA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICAgIH0K KworICBib2R5X2xhYmVsID0gWE5FV1ZFQyAodHJlZSwgcmFuayk7CisgIGJv ZHlfbGFiZWxfZXhwciA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICBleGl0 X2xhYmVsID0gWE5FV1ZFQyAodHJlZSwgcmFuayk7CisgIGV4aXRfbGFiZWxf ZXhwciA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICBjb21wYXJlX2V4cHIg PSBYTkVXVkVDICh0cmVlLCByYW5rKTsKKyAgaWZfc3RtdF9sYWJlbCA9IFhO RVdWRUMgKHRyZWUsIHJhbmspOworICAKKyAgZXhwcl9pbmNyID0gWE5FV1ZF QyAodHJlZSwgIHJhbmspOworICBpbmRfaW5pdCA9IFhORVdWRUMgKHRyZWUs IHJhbmspOworICAKKyAgY291bnRfZG93biA9IFhORVdWRUMgKGJvb2wgKiwg bGlzdF9zaXplKTsKKyAgZm9yIChpaSA9IDA7IGlpIDwgbGlzdF9zaXplOyBp aSsrKQorICAgIGNvdW50X2Rvd25baWldID0gWE5FV1ZFQyAoYm9vbCwgIHJh bmspOworCisgIGFycmF5X29wZXJhbmQgPSBYTkVXVkVDICh0cmVlLCBsaXN0 X3NpemUpOworICAKKyAgYXJyYXlfdmFyID0gWE5FV1ZFQyAodHJlZSwgcmFu ayk7CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgbGlzdF9zaXplOyBpaSsrKQor ICAgIHsKKyAgICAgIGpqID0gMDsKKyAgICAgIGZvciAoampfdHJlZSA9IGFy cmF5X2xpc3RbaWldOworCSAgIGpqX3RyZWUgJiYgVFJFRV9DT0RFIChqal90 cmVlKSA9PSBBUlJBWV9OT1RBVElPTl9SRUY7CisJICAgampfdHJlZSA9IEFS UkFZX05PVEFUSU9OX0FSUkFZIChqal90cmVlKSkKKwl7CisJICBhcnJheV9v cHNbaWldW2pqXSA9IGpqX3RyZWU7CisJICBqaisrOworCX0KKyAgICB9CisK KyAgZm9yIChpaSA9IDA7IGlpIDwgbGlzdF9zaXplOyBpaSsrKQorICAgIHsK KyAgICAgIGlmIChUUkVFX0NPREUgKGFycmF5X2xpc3RbaWldKSA9PSBBUlJB WV9OT1RBVElPTl9SRUYpCisJeworCSAgZm9yIChqaiA9IDA7IGpqIDwgcmFu azsgamorKykKKwkgICAgeworCSAgICAgIGlmIChUUkVFX0NPREUgKGFycmF5 X29wc1tpaV1bampdKSA9PSBBUlJBWV9OT1RBVElPTl9SRUYpCisJCXsKKwkJ ICBhcnJheV92YWx1ZVtpaV1bampdID0KKwkJICAgIEFSUkFZX05PVEFUSU9O X0FSUkFZIChhcnJheV9vcHNbaWldW2pqXSk7CisJCSAgYXJyYXlfc3RhcnRb aWldW2pqXSA9CisJCSAgICBBUlJBWV9OT1RBVElPTl9TVEFSVCAoYXJyYXlf b3BzW2lpXVtqal0pOworCQkgIGFycmF5X2xlbmd0aFtpaV1bampdID0KKwkJ ICAgIEFSUkFZX05PVEFUSU9OX0xFTkdUSCAoYXJyYXlfb3BzW2lpXVtqal0p OworCQkgIGFycmF5X3N0cmlkZVtpaV1bampdID0KKwkJICAgIEFSUkFZX05P VEFUSU9OX1NUUklERSAoYXJyYXlfb3BzW2lpXVtqal0pOworCQkgIGFycmF5 X3ZlY3RvcltpaV1bampdID0gdHJ1ZTsKKworCQkgIGlmICghVFJFRV9DT05T VEFOVCAoYXJyYXlfbGVuZ3RoW2lpXVtqal0pKQorCQkgICAgY291bnRfZG93 bltpaV1bampdID0gZmFsc2U7CisJCSAgZWxzZSBpZiAodHJlZV9pbnRfY3N0 X2x0CisJCQkgICAoYXJyYXlfbGVuZ3RoW2lpXVtqal0sCisJCQkgICAgYnVp bGRfaW50X2NzdCAoVFJFRV9UWVBFIChhcnJheV9sZW5ndGhbaWldW2pqXSks CisJCQkJCSAgIDApKSkKKwkJICAgIGNvdW50X2Rvd25baWldW2pqXSA9IHRy dWU7CisJCSAgZWxzZQorCQkgICAgY291bnRfZG93bltpaV1bampdID0gZmFs c2U7CisJCX0KKwkgICAgICBlbHNlCisJCWFycmF5X3ZlY3RvcltpaV1bampd ID0gZmFsc2U7CisJICAgIH0KKwl9CisgICAgfQorCisgIGxvb3AgPSBhbGxv Y19zdG10X2xpc3QgKCk7CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgcmFuazsg aWkrKykKKyAgICB7CisgICAgICBhcnJheV92YXJbaWldID0gYnVpbGRfZGVj bCAobG9jYXRpb24sIFZBUl9ERUNMLCBOVUxMX1RSRUUsCisJCQkJICBpbnRl Z2VyX3R5cGVfbm9kZSk7CisgICAgICBpbmRfaW5pdFtpaV0gPQorCWJ1aWxk X21vZGlmeV9leHByIChsb2NhdGlvbiwgYXJyYXlfdmFyW2lpXSwKKwkJCSAg IFRSRUVfVFlQRSAoYXJyYXlfdmFyW2lpXSksIE5PUF9FWFBSLAorCQkJICAg bG9jYXRpb24sCisJCQkgICBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKGFy cmF5X3ZhcltpaV0pLCAwKSwKKwkJCSAgIFRSRUVfVFlQRSAoYXJyYXlfdmFy W2lpXSkpOwkKKyAgICB9CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgcmFuayA7 IGlpKyspCisgICAgeworICAgICAgLyogVGhpcyB3aWxsIGNyZWF0ZSB0aGUg aWYgc3RhdGVtZW50IGxhYmVsLiAgKi8KKyAgICAgIGlmX3N0bXRfbGFiZWxb aWldID0gYnVpbGRfZGVjbCAobG9jYXRpb24sIExBQkVMX0RFQ0wsIE5VTExf VFJFRSwKKwkJCQkgICAgICB2b2lkX3R5cGVfbm9kZSk7CisgICAgICBERUNM X0NPTlRFWFQgKGlmX3N0bXRfbGFiZWxbaWldKSA9IGN1cnJlbnRfZnVuY3Rp b25fZGVjbDsKKyAgICAgIERFQ0xfQVJUSUZJQ0lBTCAoaWZfc3RtdF9sYWJl bFtpaV0pID0gMDsKKyAgICAgIERFQ0xfSUdOT1JFRF9QIChpZl9zdG10X2xh YmVsW2lpXSkgPSAxOworICAKKyAgICAgIC8qIFRoaXMgbGFiZWwgc3RhdG1l bnQgd2lsbCBwb2ludCB0byB0aGUgbG9vcCBib2R5LiAgKi8KKyAgICAgIGJv ZHlfbGFiZWxbaWldID0gYnVpbGRfZGVjbCAobG9jYXRpb24sIExBQkVMX0RF Q0wsIE5VTExfVFJFRSwKKwkJCQkgICB2b2lkX3R5cGVfbm9kZSk7CisgICAg ICBERUNMX0NPTlRFWFQgKGJvZHlfbGFiZWxbaWldKSA9IGN1cnJlbnRfZnVu Y3Rpb25fZGVjbDsKKyAgICAgIERFQ0xfQVJUSUZJQ0lBTCAoYm9keV9sYWJl bFtpaV0pID0gMDsKKyAgICAgIERFQ0xfSUdOT1JFRF9QIChib2R5X2xhYmVs W2lpXSkgPSAxOworICAgICAgYm9keV9sYWJlbF9leHByW2lpXSA9IGJ1aWxk MSAoTEFCRUxfRVhQUiwgdm9pZF90eXBlX25vZGUsIGJvZHlfbGFiZWxbaWld KTsKKworICAgICAgLyogVGhpcyB3aWxsIGNyZWF0ZSB0aGUgZXhpdCBsYWJl bC4uaS5lLiB3aGVyZSB0aGUgd2hpbGUgbG9vcCB3aWxsIGJyYW5jaAorCSBv dXQgb2YuICAqLworICAgICAgZXhpdF9sYWJlbFtpaV0gPSBidWlsZF9kZWNs IChsb2NhdGlvbiwgTEFCRUxfREVDTCwgTlVMTF9UUkVFLAorCQkJCSAgIHZv aWRfdHlwZV9ub2RlKTsKKyAgICAgIERFQ0xfQ09OVEVYVCAoZXhpdF9sYWJl bFtpaV0pID0gY3VycmVudF9mdW5jdGlvbl9kZWNsOworICAgICAgREVDTF9B UlRJRklDSUFMIChleGl0X2xhYmVsW2lpXSkgPSAwOworICAgICAgREVDTF9J R05PUkVEX1AgKGV4aXRfbGFiZWxbaWldKSA9IDE7CisgICAgICBleGl0X2xh YmVsX2V4cHJbaWldID0gYnVpbGQxIChMQUJFTF9FWFBSLCB2b2lkX3R5cGVf bm9kZSwgZXhpdF9sYWJlbFtpaV0pOworICAgIH0KKworICBmb3IgKGlpID0g MDsgaWkgPCBsaXN0X3NpemU7IGlpKyspCisgICAgeworICAgICAgaWYgKGFy cmF5X3ZlY3RvcltpaV1bMF0pCisJeworCSAgYXJyYXlfb3BlcmFuZFtpaV0g PSBhcnJheV92YWx1ZVtpaV1bcmFuayAtIDFdOworCSAgZ2NjX2Fzc2VydCAo YXJyYXlfb3BlcmFuZFtpaV0pOworCSAgZm9yIChqaiA9IHJhbmsgLSAxOyBq aiA+PSAwOyBqai0tKQorCSAgICB7CisJICAgICAgaWYgKGNvdW50X2Rvd25b aWldW2pqXSkKKwkJeworCQkgIC8qIEFycmF5W3N0YXJ0X2luZGV4IC0gKGlu ZHVjdGlvbl92YXIgKiBzdHJpZGUpXSAqLworCQkgIGFycmF5X29wZXJhbmRb aWldID0gYnVpbGRfYXJyYXlfcmVmCisJCSAgICAobG9jYXRpb24sIGFycmF5 X29wZXJhbmRbaWldLAorCQkgICAgIGJ1aWxkMiAoTUlOVVNfRVhQUiwgVFJF RV9UWVBFIChhcnJheV92YXJbampdKSwKKwkJCSAgICAgYXJyYXlfc3RhcnRb aWldW2pqXSwKKwkJCSAgICAgYnVpbGQyIChNVUxUX0VYUFIsIFRSRUVfVFlQ RSAoYXJyYXlfdmFyW2pqXSksCisJCQkJICAgICBhcnJheV92YXJbampdLCBh cnJheV9zdHJpZGVbaWldW2pqXSkpKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJ eworCQkgIC8qIEFycmF5W3N0YXJ0X2luZGV4ICsgKGluZHVjdGlvbl92YXIg KiBzdHJpZGUpXSAqLworCQkgIGFycmF5X29wZXJhbmRbaWldID0gYnVpbGRf YXJyYXlfcmVmCisJCSAgICAobG9jYXRpb24sIGFycmF5X29wZXJhbmRbaWld LAorCQkgICAgIGJ1aWxkMiAoUExVU19FWFBSLCBUUkVFX1RZUEUgKGFycmF5 X3Zhcltqal0pLAorCQkJICAgICBhcnJheV9zdGFydFtpaV1bampdLAorCQkJ ICAgICBidWlsZDIgKE1VTFRfRVhQUiwgVFJFRV9UWVBFIChhcnJheV92YXJb ampdKSwKKwkJCQkgICAgIGFycmF5X3Zhcltqal0sIGFycmF5X3N0cmlkZVtp aV1bampdKSkpOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICByZXBsYWNl X2FycmF5X25vdGF0aW9ucyAoJmZ1bmNfcGFybSwgdHJ1ZSwgYXJyYXlfbGlz dCwgYXJyYXlfb3BlcmFuZCwKKwkJCSAgIGxpc3Rfc2l6ZSk7CisgIGZvciAo aWkgPSAwOyBpaSA8IHJhbms7IGlpKyspCisgICAgeworICAgICAgZXhwcl9p bmNyW2lpXSA9CisJYnVpbGQyIChNT0RJRllfRVhQUiwgdm9pZF90eXBlX25v ZGUsIGFycmF5X3ZhcltpaV0sCisJCWJ1aWxkMiAoUExVU19FWFBSLCBUUkVF X1RZUEUgKGFycmF5X3ZhcltpaV0pLCBhcnJheV92YXJbaWldLAorCQkJYnVp bGRfaW50X2NzdCAoVFJFRV9UWVBFIChhcnJheV92YXJbaWldKSwgMSkpKTsK KyAgICB9CisgIAorICBmb3IgKGpqID0gMDsgamogPCByYW5rOyBqaisrKQor ICAgIHsKKyAgICAgIGlmIChyYW5rICYmIGV4cHJfaW5jcltqal0pCisJewor CSAgaWYgKGNvdW50X2Rvd25bMF1bampdKQorCSAgICBjb21wYXJlX2V4cHJb ampdID0KKwkgICAgICBidWlsZDIgKExUX0VYUFIsIGJvb2xlYW5fdHlwZV9u b2RlLCBhcnJheV92YXJbampdLAorCQkgICAgICBidWlsZDIgKE1VTFRfRVhQ UiwgVFJFRV9UWVBFIChhcnJheV92YXJbampdKSwKKwkJCSAgICAgIGFycmF5 X2xlbmd0aFswXVtqal0sCisJCQkgICAgICBidWlsZF9pbnRfY3N0IChUUkVF X1RZUEUgKGFycmF5X3Zhcltqal0pLCAtMSkpKTsKKwkgIGVsc2UKKwkgICAg Y29tcGFyZV9leHByW2pqXSA9IGJ1aWxkMiAoTFRfRVhQUiwgYm9vbGVhbl90 eXBlX25vZGUsCisJCQkJICAgICAgIGFycmF5X3Zhcltqal0sIGFycmF5X2xl bmd0aFswXVtqal0pOworCX0KKyAgICB9CisKKyAgaWYgKGFuX3R5cGUgIT0g UkVEVUNFX01VVEFUSU5HKQorICAgIHsKKyAgICAgICpuZXdfdmFyID0gYnVp bGRfZGVjbCAobG9jYXRpb24sIFZBUl9ERUNMLCBOVUxMX1RSRUUsIG5ld192 YXJfdHlwZSk7CisgICAgICBnY2NfYXNzZXJ0ICgqbmV3X3ZhciAmJiAqbmV3 X3ZhciAhPSBlcnJvcl9tYXJrX25vZGUpOworICAgIH0KKyAgZWxzZQorICAg ICpuZXdfdmFyID0gTlVMTF9UUkVFOworICAKKyAgaWYgKGFuX3R5cGUgPT0g UkVEVUNFX01BWF9JTkRFWCB8fCBhbl90eXBlID09IFJFRFVDRV9NSU5fSU5E RVgpCisgICAgYXJyYXlfaW5kX3ZhbHVlID0gYnVpbGRfZGVjbCAobG9jYXRp b24sIFZBUl9ERUNMLCBOVUxMX1RSRUUsIAorCQkJCSAgVFJFRV9UWVBFIChm dW5jX3Bhcm0pKTsKKwkJCSAgICAgIAorICBzd2l0Y2ggKGFuX3R5cGUpCisg ICAgeworICAgIGNhc2UgUkVEVUNFX0FERDoKKyAgICAgIG5ld192YXJfaW5p dCA9IGJ1aWxkX21vZGlmeV9leHByCisJKGxvY2F0aW9uLCAqbmV3X3Zhciwg VFJFRV9UWVBFICgqbmV3X3ZhciksIE5PUF9FWFBSLAorCSBsb2NhdGlvbiwg YnVpbGRfemVyb19jc3QgKG5ld192YXJfdHlwZSksIG5ld192YXJfdHlwZSk7 CisgICAgICBuZXdfZXhwciA9IGJ1aWxkX21vZGlmeV9leHByCisJKGxvY2F0 aW9uLCAqbmV3X3ZhciwgVFJFRV9UWVBFICgqbmV3X3ZhciksIFBMVVNfRVhQ UiwKKwkgbG9jYXRpb24sIGZ1bmNfcGFybSwgVFJFRV9UWVBFIChmdW5jX3Bh cm0pKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUkVEVUNFX01VTDoKKyAg ICAgIG5ld192YXJfaW5pdCA9IGJ1aWxkX21vZGlmeV9leHByCisJKGxvY2F0 aW9uLCAqbmV3X3ZhciwgVFJFRV9UWVBFICgqbmV3X3ZhciksIE5PUF9FWFBS LAorCSBsb2NhdGlvbiwgYnVpbGRfb25lX2NzdCAobmV3X3Zhcl90eXBlKSwg bmV3X3Zhcl90eXBlKTsKKyAgICAgIG5ld19leHByID0gYnVpbGRfbW9kaWZ5 X2V4cHIKKwkobG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpuZXdf dmFyKSwgTVVMVF9FWFBSLAorCSBsb2NhdGlvbiwgZnVuY19wYXJtLCBUUkVF X1RZUEUgKGZ1bmNfcGFybSkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBS RURVQ0VfQUxMX1pFUk9TOgorICAgICAgbmV3X3Zhcl9pbml0ID0gYnVpbGRf bW9kaWZ5X2V4cHIKKwkobG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZUEUg KCpuZXdfdmFyKSwgTk9QX0VYUFIsCisJIGxvY2F0aW9uLCBidWlsZF9vbmVf Y3N0IChuZXdfdmFyX3R5cGUpLCBuZXdfdmFyX3R5cGUpOworICAgICAgLyog SW5pdGlhbGx5IHlvdSBhc3N1bWUgZXZlcnl0aGluZyBpcyB6ZXJvLCBub3cg aWYgd2UgZmluZCBhIGNhc2Ugd2hlcmUgCisJIGl0IGlzIE5PVCB0cnVlLCB0 aGVuIHdlIHNldCB0aGUgcmVzdWx0IHRvIGZhbHNlLiBPdGhlcndpc2UgCisJ IHdlIGp1c3Qga2VlcCB0aGUgcHJldmlvdXMgdmFsdWUuICAqLworICAgICAg bmV3X3llc19leHByID0gYnVpbGRfbW9kaWZ5X2V4cHIKKwkobG9jYXRpb24s ICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpuZXdfdmFyKSwgTk9QX0VYUFIsCisJ IGxvY2F0aW9uLCBidWlsZF96ZXJvX2NzdCAoVFJFRV9UWVBFICgqbmV3X3Zh cikpLAorCSBUUkVFX1RZUEUgKCpuZXdfdmFyKSk7CisgICAgICBuZXdfbm9f ZXhwciA9IGJ1aWxkX21vZGlmeV9leHByCisJKGxvY2F0aW9uLCAqbmV3X3Zh ciwgVFJFRV9UWVBFICgqbmV3X3ZhciksIE5PUF9FWFBSLAorCSBsb2NhdGlv biwgKm5ld192YXIsIFRSRUVfVFlQRSAoKm5ld192YXIpKTsKKyAgICAgIG5l d19jb25kX2V4cHIgPSBidWlsZDIgKE5FX0VYUFIsIFRSRUVfVFlQRSAoZnVu Y19wYXJtKSwgZnVuY19wYXJtLAorCQkJICAgICAgYnVpbGRfemVyb19jc3Qg KFRSRUVfVFlQRSAoZnVuY19wYXJtKSkpOworICAgICAgbmV3X2V4cHIgPSBi dWlsZF9jb25kaXRpb25hbF9leHByCisJKGxvY2F0aW9uLCBuZXdfY29uZF9l eHByLCBmYWxzZSwgbmV3X3llc19leHByLAorCSBUUkVFX1RZUEUgKG5ld195 ZXNfZXhwciksIG5ld19ub19leHByLCBUUkVFX1RZUEUgKG5ld19ub19leHBy KSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFJFRFVDRV9BTExfTk9OWkVS T1M6CisgICAgICBuZXdfdmFyX2luaXQgPSBidWlsZF9tb2RpZnlfZXhwcgor CShsb2NhdGlvbiwgKm5ld192YXIsIFRSRUVfVFlQRSAoKm5ld192YXIpLCBO T1BfRVhQUiwKKwkgbG9jYXRpb24sIGJ1aWxkX29uZV9jc3QgKG5ld192YXJf dHlwZSksIG5ld192YXJfdHlwZSk7CisgICAgICAvKiBJbml0aWFsbHkgeW91 IGFzc3VtZSBldmVyeXRoaW5nIGlzIG5vbi16ZXJvLCBub3cgaWYgd2UgZmlu ZCBhIGNhc2UKKwkgd2hlcmUgaXQgaXMgTk9UIHRydWUsIHRoZW4gd2Ugc2V0 IHRoZSByZXN1bHQgdG8gZmFsc2UuICBPdGhlcndpc2UKKwkgd2UganVzdCBr ZWVwIHRoZSBwcmV2aW91cyB2YWx1ZS4gICovCisgICAgICBuZXdfeWVzX2V4 cHIgPSBidWlsZF9tb2RpZnlfZXhwcgorCShsb2NhdGlvbiwgKm5ld192YXIs IFRSRUVfVFlQRSAoKm5ld192YXIpLCBOT1BfRVhQUiwKKwkgbG9jYXRpb24s IGJ1aWxkX3plcm9fY3N0IChUUkVFX1RZUEUgKCpuZXdfdmFyKSksCisJIFRS RUVfVFlQRSAoKm5ld192YXIpKTsKKyAgICAgIG5ld19ub19leHByID0gYnVp bGRfbW9kaWZ5X2V4cHIKKwkobG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZ UEUgKCpuZXdfdmFyKSwgTk9QX0VYUFIsCisJIGxvY2F0aW9uLCAqbmV3X3Zh ciwgVFJFRV9UWVBFICgqbmV3X3ZhcikpOworICAgICAgbmV3X2NvbmRfZXhw ciA9IGJ1aWxkMiAoRVFfRVhQUiwgVFJFRV9UWVBFIChmdW5jX3Bhcm0pLCBm dW5jX3Bhcm0sCisJCQkgICAgICBidWlsZF96ZXJvX2NzdCAoVFJFRV9UWVBF IChmdW5jX3Bhcm0pKSk7CisgICAgICBuZXdfZXhwciA9IGJ1aWxkX2NvbmRp dGlvbmFsX2V4cHIKKwkobG9jYXRpb24sIG5ld19jb25kX2V4cHIsIGZhbHNl LCBuZXdfeWVzX2V4cHIsCisJIFRSRUVfVFlQRSAobmV3X3llc19leHByKSwg bmV3X25vX2V4cHIsIFRSRUVfVFlQRSAobmV3X25vX2V4cHIpKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgUkVEVUNFX0FOWV9aRVJPUzoKKyAgICAgIG5l d192YXJfaW5pdCA9IGJ1aWxkX21vZGlmeV9leHByCisJKGxvY2F0aW9uLCAq bmV3X3ZhciwgVFJFRV9UWVBFICgqbmV3X3ZhciksIE5PUF9FWFBSLAorCSBs b2NhdGlvbiwgYnVpbGRfemVyb19jc3QgKG5ld192YXJfdHlwZSksIG5ld192 YXJfdHlwZSk7CisgICAgICAvKiBJbml0aWFsbHkgd2UgYXNzdW1lIHRoZXJl IGFyZSBOTyB6ZXJvcyBpbiB0aGUgbGlzdC4gV2hlbiB3ZSBmaW5kIAorCSBh IG5vbi16ZXJvLCB3ZSBrZWVwIHRoZSBwcmV2aW91cyB2YWx1ZS4gIElmIHdl IGZpbmQgYSB6ZXJvLCB3ZSAKKwkgc2V0IHRoZSB2YWx1ZSB0byB0cnVlLiAg Ki8KKyAgICAgIG5ld195ZXNfZXhwciA9IGJ1aWxkX21vZGlmeV9leHByCisJ KGxvY2F0aW9uLCAqbmV3X3ZhciwgVFJFRV9UWVBFICgqbmV3X3ZhciksIE5P UF9FWFBSLAorCSBsb2NhdGlvbiwgYnVpbGRfb25lX2NzdCAobmV3X3Zhcl90 eXBlKSwgbmV3X3Zhcl90eXBlKTsKKyAgICAgIG5ld19ub19leHByID0gYnVp bGRfbW9kaWZ5X2V4cHIKKwkobG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZ UEUgKCpuZXdfdmFyKSwgTk9QX0VYUFIsCisJIGxvY2F0aW9uLCAqbmV3X3Zh ciwgVFJFRV9UWVBFICgqbmV3X3ZhcikpOworICAgICAgbmV3X2NvbmRfZXhw ciA9IGJ1aWxkMiAoRVFfRVhQUiwgVFJFRV9UWVBFIChmdW5jX3Bhcm0pLCBm dW5jX3Bhcm0sCisJCQkgICAgICBidWlsZF96ZXJvX2NzdCAoVFJFRV9UWVBF IChmdW5jX3Bhcm0pKSk7CisgICAgICBuZXdfZXhwciA9IGJ1aWxkX2NvbmRp dGlvbmFsX2V4cHIKKwkobG9jYXRpb24sIG5ld19jb25kX2V4cHIsIGZhbHNl LCBuZXdfeWVzX2V4cHIsCisJIFRSRUVfVFlQRSAobmV3X3llc19leHByKSwg bmV3X25vX2V4cHIsIFRSRUVfVFlQRSAobmV3X25vX2V4cHIpKTsgICAKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgUkVEVUNFX0FOWV9OT05aRVJPUzoKKyAg ICAgIG5ld192YXJfaW5pdCA9IGJ1aWxkX21vZGlmeV9leHByCisJKGxvY2F0 aW9uLCAqbmV3X3ZhciwgVFJFRV9UWVBFICgqbmV3X3ZhciksIE5PUF9FWFBS LAorCSBsb2NhdGlvbiwgYnVpbGRfemVyb19jc3QgKG5ld192YXJfdHlwZSks IG5ld192YXJfdHlwZSk7CisgICAgICAvKiBJbml0aWFsbHkgd2UgYXNzdW1l IHRoZXJlIGFyZSBOTyBub24temVyb3MgaW4gdGhlIGxpc3QuIFdoZW4gd2Ug ZmluZCAKKwkgYSB6ZXJvLCB3ZSBrZWVwIHRoZSBwcmV2aW91cyB2YWx1ZS4g IElmIHdlIGZpbmQgYSBub24temVybywgd2Ugc2V0IAorCSB0aGUgdmFsdWUg dG8gdHJ1ZS4gICovCisgICAgICBuZXdfeWVzX2V4cHIgPSBidWlsZF9tb2Rp ZnlfZXhwcgorCShsb2NhdGlvbiwgKm5ld192YXIsIFRSRUVfVFlQRSAoKm5l d192YXIpLCBOT1BfRVhQUiwKKwkgbG9jYXRpb24sIGJ1aWxkX29uZV9jc3Qg KG5ld192YXJfdHlwZSksIG5ld192YXJfdHlwZSk7CisgICAgICBuZXdfbm9f ZXhwciA9IGJ1aWxkX21vZGlmeV9leHByCisJKGxvY2F0aW9uLCAqbmV3X3Zh ciwgVFJFRV9UWVBFICgqbmV3X3ZhciksIE5PUF9FWFBSLAorCSBsb2NhdGlv biwgKm5ld192YXIsIFRSRUVfVFlQRSAoKm5ld192YXIpKTsKKyAgICAgIG5l d19jb25kX2V4cHIgPSBidWlsZDIgKE5FX0VYUFIsIFRSRUVfVFlQRSAoZnVu Y19wYXJtKSwgZnVuY19wYXJtLAorCQkJICAgICAgYnVpbGRfemVyb19jc3Qg KFRSRUVfVFlQRSAoZnVuY19wYXJtKSkpOworICAgICAgbmV3X2V4cHIgPSBi dWlsZF9jb25kaXRpb25hbF9leHByCisJKGxvY2F0aW9uLCBuZXdfY29uZF9l eHByLCBmYWxzZSwgbmV3X3llc19leHByLAorCSBUUkVFX1RZUEUgKG5ld195 ZXNfZXhwciksIG5ld19ub19leHByLCBUUkVFX1RZUEUgKG5ld19ub19leHBy KSk7ICAgCisgICAgICBicmVhazsKKyAgICBjYXNlIFJFRFVDRV9NQVg6Cisg ICAgICBuZXdfdmFyX2luaXQgPSBidWlsZF9tb2RpZnlfZXhwcgorCShsb2Nh dGlvbiwgKm5ld192YXIsIFRSRUVfVFlQRSAoKm5ld192YXIpLCBOT1BfRVhQ UiwKKwkgbG9jYXRpb24sIGZ1bmNfcGFybSwgbmV3X3Zhcl90eXBlKTsKKyAg ICAgIG5ld19ub19leHByID0gYnVpbGRfbW9kaWZ5X2V4cHIKKwkobG9jYXRp b24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpuZXdfdmFyKSwgTk9QX0VYUFIs CisJIGxvY2F0aW9uLCAqbmV3X3ZhciwgVFJFRV9UWVBFICgqbmV3X3Zhcikp OworICAgICAgbmV3X3llc19leHByID0gYnVpbGRfbW9kaWZ5X2V4cHIKKwko bG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpuZXdfdmFyKSwgTk9Q X0VYUFIsCisJIGxvY2F0aW9uLCBmdW5jX3Bhcm0sIFRSRUVfVFlQRSAoKm5l d192YXIpKTsKKyAgICAgIG5ld19leHByID0gYnVpbGRfY29uZGl0aW9uYWxf ZXhwcgorCShsb2NhdGlvbiwKKwkgYnVpbGQyIChMVF9FWFBSLCBUUkVFX1RZ UEUgKCpuZXdfdmFyKSwgKm5ld192YXIsIGZ1bmNfcGFybSksIGZhbHNlLAor CSBuZXdfeWVzX2V4cHIsIFRSRUVfVFlQRSAoKm5ld192YXIpLCBuZXdfbm9f ZXhwciwgVFJFRV9UWVBFICgqbmV3X3ZhcikpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSBSRURVQ0VfTUlOOgorICAgICAgbmV3X3Zhcl9pbml0ID0gYnVp bGRfbW9kaWZ5X2V4cHIKKwkobG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZ UEUgKCpuZXdfdmFyKSwgTk9QX0VYUFIsCisJIGxvY2F0aW9uLCBmdW5jX3Bh cm0sIG5ld192YXJfdHlwZSk7CisgICAgICBuZXdfbm9fZXhwciA9IGJ1aWxk X21vZGlmeV9leHByCisJKGxvY2F0aW9uLCAqbmV3X3ZhciwgVFJFRV9UWVBF ICgqbmV3X3ZhciksIE5PUF9FWFBSLAorCSBsb2NhdGlvbiwgKm5ld192YXIs IFRSRUVfVFlQRSAoKm5ld192YXIpKTsKKyAgICAgIG5ld195ZXNfZXhwciA9 IGJ1aWxkX21vZGlmeV9leHByCisJKGxvY2F0aW9uLCAqbmV3X3ZhciwgVFJF RV9UWVBFICgqbmV3X3ZhciksIE5PUF9FWFBSLAorCSBsb2NhdGlvbiwgZnVu Y19wYXJtLCBUUkVFX1RZUEUgKCpuZXdfdmFyKSk7CisgICAgICBuZXdfZXhw ciA9IGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIKKwkobG9jYXRpb24sCisJIGJ1 aWxkMiAoR1RfRVhQUiwgVFJFRV9UWVBFICgqbmV3X3ZhciksICpuZXdfdmFy LCBmdW5jX3Bhcm0pLCBmYWxzZSwKKwkgbmV3X3llc19leHByLCBUUkVFX1RZ UEUgKCpuZXdfdmFyKSwgbmV3X25vX2V4cHIsIFRSRUVfVFlQRSAoKm5ld192 YXIpKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUkVEVUNFX01BWF9JTkRF WDoKKyAgICAgIG5ld192YXJfaW5pdCA9IGJ1aWxkX21vZGlmeV9leHByCisJ KGxvY2F0aW9uLCAqbmV3X3ZhciwgVFJFRV9UWVBFICgqbmV3X3ZhciksIE5P UF9FWFBSLAorCSBsb2NhdGlvbiwgYnVpbGRfemVyb19jc3QgKG5ld192YXJf dHlwZSksIG5ld192YXJfdHlwZSk7CisgICAgICBuZXdfZXhwX2luaXQgPSBi dWlsZF9tb2RpZnlfZXhwcgorCShsb2NhdGlvbiwgYXJyYXlfaW5kX3ZhbHVl LCBUUkVFX1RZUEUgKGFycmF5X2luZF92YWx1ZSksCisJIE5PUF9FWFBSLCBs b2NhdGlvbiwgZnVuY19wYXJtLCBUUkVFX1RZUEUgKGZ1bmNfcGFybSkpOwor ICAgICAgbmV3X25vX2luZCA9IGJ1aWxkX21vZGlmeV9leHByCisJKGxvY2F0 aW9uLCAqbmV3X3ZhciwgVFJFRV9UWVBFICgqbmV3X3ZhciksIE5PUF9FWFBS LAorCSBsb2NhdGlvbiwgKm5ld192YXIsIFRSRUVfVFlQRSAoKm5ld192YXIp KTsKKyAgICAgIG5ld19ub19leHByID0gYnVpbGRfbW9kaWZ5X2V4cHIKKwko bG9jYXRpb24sIGFycmF5X2luZF92YWx1ZSwgVFJFRV9UWVBFIChhcnJheV9p bmRfdmFsdWUpLAorCSBOT1BfRVhQUiwKKwkgbG9jYXRpb24sIGFycmF5X2lu ZF92YWx1ZSwgVFJFRV9UWVBFIChhcnJheV9pbmRfdmFsdWUpKTsKKyAgICAg IGlmIChsaXN0X3NpemUgPiAxKQorCXsKKwkgIG5ld195ZXNfaW5kID0gYnVp bGRfbW9kaWZ5X2V4cHIKKwkgICAgKGxvY2F0aW9uLCAqbmV3X3ZhciwgVFJF RV9UWVBFICgqbmV3X3ZhciksIE5PUF9FWFBSLAorCSAgICAgbG9jYXRpb24s IGFycmF5X3ZhclswXSwgVFJFRV9UWVBFIChhcnJheV92YXJbMF0pKTsKKwkg IG5ld195ZXNfZXhwciA9IGJ1aWxkX21vZGlmeV9leHByCisJICAgIChsb2Nh dGlvbiwgYXJyYXlfaW5kX3ZhbHVlLCBUUkVFX1RZUEUgKGFycmF5X2luZF92 YWx1ZSksCisJICAgICBOT1BfRVhQUiwKKwkgICAgIGxvY2F0aW9uLCBmdW5j X3Bhcm0sIFRSRUVfVFlQRSAoYXJyYXlfb3BlcmFuZFswXSkpOworCX0KKyAg ICAgIGVsc2UKKwl7CisJICBuZXdfeWVzX2luZCA9IGJ1aWxkX21vZGlmeV9l eHByCisJICAgIChsb2NhdGlvbiwgKm5ld192YXIsIFRSRUVfVFlQRSAoKm5l d192YXIpLCBOT1BfRVhQUiwKKwkgICAgIGxvY2F0aW9uLCBUUkVFX09QRVJB TkQgKGFycmF5X29wZXJhbmRbMF0sIDEpLAorCSAgICAgVFJFRV9UWVBFIChU UkVFX09QRVJBTkQgKGFycmF5X29wZXJhbmRbMF0sIDEpKSk7CisJICBuZXdf eWVzX2V4cHIgPSBidWlsZF9tb2RpZnlfZXhwcgorCSAgICAobG9jYXRpb24s IGFycmF5X2luZF92YWx1ZSwgVFJFRV9UWVBFIChhcnJheV9pbmRfdmFsdWUp LAorCSAgICAgTk9QX0VYUFIsCisJICAgICBsb2NhdGlvbiwgZnVuY19wYXJt LCBUUkVFX09QRVJBTkQgKGFycmF5X29wZXJhbmRbMF0sIDEpKTsKKwl9Cisg ICAgICBuZXdfeWVzX2xpc3QgPSBhbGxvY19zdG10X2xpc3QgKCk7CisgICAg ICBhcHBlbmRfdG9fc3RhdGVtZW50X2xpc3QgKG5ld195ZXNfaW5kLCAmbmV3 X3llc19saXN0KTsKKyAgICAgIGFwcGVuZF90b19zdGF0ZW1lbnRfbGlzdCAo bmV3X3llc19leHByLCAmbmV3X3llc19saXN0KTsKKworICAgICAgbmV3X25v X2xpc3QgPSBhbGxvY19zdG10X2xpc3QgKCk7CisgICAgICBhcHBlbmRfdG9f c3RhdGVtZW50X2xpc3QgKG5ld19ub19pbmQsICZuZXdfbm9fbGlzdCk7Cisg ICAgICBhcHBlbmRfdG9fc3RhdGVtZW50X2xpc3QgKG5ld19ub19leHByLCAm bmV3X25vX2xpc3QpOworIAorICAgICAgbmV3X2V4cHIgPSBidWlsZF9jb25k aXRpb25hbF9leHByCisJKGxvY2F0aW9uLAorCSBidWlsZDIgKExUX0VYUFIs IFRSRUVfVFlQRSAoYXJyYXlfaW5kX3ZhbHVlKSwgYXJyYXlfaW5kX3ZhbHVl LAorCQkgZnVuY19wYXJtKSwKKwkgZmFsc2UsCisJIG5ld195ZXNfbGlzdCwg VFJFRV9UWVBFICgqbmV3X3ZhciksIG5ld19ub19saXN0LCBUUkVFX1RZUEUg KCpuZXdfdmFyKSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFJFRFVDRV9N SU5fSU5ERVg6CisgICAgICBuZXdfdmFyX2luaXQgPSBidWlsZF9tb2RpZnlf ZXhwcgorCShsb2NhdGlvbiwgKm5ld192YXIsIFRSRUVfVFlQRSAoKm5ld192 YXIpLCBOT1BfRVhQUiwKKwkgbG9jYXRpb24sIGJ1aWxkX3plcm9fY3N0IChu ZXdfdmFyX3R5cGUpLCBuZXdfdmFyX3R5cGUpOworICAgICAgbmV3X2V4cF9p bml0ID0gYnVpbGRfbW9kaWZ5X2V4cHIKKwkobG9jYXRpb24sIGFycmF5X2lu ZF92YWx1ZSwgVFJFRV9UWVBFIChhcnJheV9pbmRfdmFsdWUpLAorCSBOT1Bf RVhQUiwgbG9jYXRpb24sIGZ1bmNfcGFybSwgVFJFRV9UWVBFIChmdW5jX3Bh cm0pKTsKKyAgICAgIG5ld19ub19pbmQgPSBidWlsZF9tb2RpZnlfZXhwcgor CShsb2NhdGlvbiwgKm5ld192YXIsIFRSRUVfVFlQRSAoKm5ld192YXIpLCBO T1BfRVhQUiwKKwkgbG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpu ZXdfdmFyKSk7CisgICAgICBuZXdfbm9fZXhwciA9IGJ1aWxkX21vZGlmeV9l eHByCisJKGxvY2F0aW9uLCBhcnJheV9pbmRfdmFsdWUsIFRSRUVfVFlQRSAo YXJyYXlfaW5kX3ZhbHVlKSwKKwkgTk9QX0VYUFIsCisJIGxvY2F0aW9uLCBh cnJheV9pbmRfdmFsdWUsIFRSRUVfVFlQRSAoYXJyYXlfaW5kX3ZhbHVlKSk7 CisgICAgICBpZiAobGlzdF9zaXplID4gMSkKKwl7CisJICBuZXdfeWVzX2lu ZCA9IGJ1aWxkX21vZGlmeV9leHByCisJICAgIChsb2NhdGlvbiwgKm5ld192 YXIsIFRSRUVfVFlQRSAoKm5ld192YXIpLCBOT1BfRVhQUiwKKwkgICAgIGxv Y2F0aW9uLCBhcnJheV92YXJbMF0sIFRSRUVfVFlQRSAoYXJyYXlfdmFyWzBd KSk7CisJICBuZXdfeWVzX2V4cHIgPSBidWlsZF9tb2RpZnlfZXhwcgorCSAg ICAobG9jYXRpb24sIGFycmF5X2luZF92YWx1ZSwgVFJFRV9UWVBFIChhcnJh eV9pbmRfdmFsdWUpLAorCSAgICAgTk9QX0VYUFIsCisJICAgICBsb2NhdGlv biwgZnVuY19wYXJtLCBUUkVFX1RZUEUgKGFycmF5X29wZXJhbmRbMF0pKTsK Kwl9CisgICAgICBlbHNlCisJeworCSAgbmV3X3llc19pbmQgPSBidWlsZF9t b2RpZnlfZXhwcgorCSAgICAobG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZ UEUgKCpuZXdfdmFyKSwgTk9QX0VYUFIsCisJICAgICBsb2NhdGlvbiwgVFJF RV9PUEVSQU5EIChhcnJheV9vcGVyYW5kWzBdLCAxKSwKKwkgICAgIFRSRUVf VFlQRSAoVFJFRV9PUEVSQU5EIChhcnJheV9vcGVyYW5kWzBdLCAxKSkpOwor CSAgbmV3X3llc19leHByID0gYnVpbGRfbW9kaWZ5X2V4cHIKKwkgICAgKGxv Y2F0aW9uLCBhcnJheV9pbmRfdmFsdWUsIFRSRUVfVFlQRSAoYXJyYXlfaW5k X3ZhbHVlKSwKKwkgICAgIE5PUF9FWFBSLAorCSAgICAgbG9jYXRpb24sIGZ1 bmNfcGFybSwgVFJFRV9PUEVSQU5EIChhcnJheV9vcGVyYW5kWzBdLCAxKSk7 CisJfQorICAgICAgbmV3X3llc19saXN0ID0gYWxsb2Nfc3RtdF9saXN0ICgp OworICAgICAgYXBwZW5kX3RvX3N0YXRlbWVudF9saXN0IChuZXdfeWVzX2lu ZCwgJm5ld195ZXNfbGlzdCk7CisgICAgICBhcHBlbmRfdG9fc3RhdGVtZW50 X2xpc3QgKG5ld195ZXNfZXhwciwgJm5ld195ZXNfbGlzdCk7CisKKyAgICAg IG5ld19ub19saXN0ID0gYWxsb2Nfc3RtdF9saXN0ICgpOworICAgICAgYXBw ZW5kX3RvX3N0YXRlbWVudF9saXN0IChuZXdfbm9faW5kLCAmbmV3X25vX2xp c3QpOworICAgICAgYXBwZW5kX3RvX3N0YXRlbWVudF9saXN0IChuZXdfbm9f ZXhwciwgJm5ld19ub19saXN0KTsKKyAKKyAgICAgIG5ld19leHByID0gYnVp bGRfY29uZGl0aW9uYWxfZXhwcgorCShsb2NhdGlvbiwKKwkgYnVpbGQyIChH VF9FWFBSLCBUUkVFX1RZUEUgKGFycmF5X2luZF92YWx1ZSksIGFycmF5X2lu ZF92YWx1ZSwKKwkJIGZ1bmNfcGFybSksCisJIGZhbHNlLAorCSBuZXdfeWVz X2xpc3QsIFRSRUVfVFlQRSAoKm5ld192YXIpLCBuZXdfbm9fbGlzdCwgVFJF RV9UWVBFICgqbmV3X3ZhcikpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBS RURVQ0VfQ1VTVE9NOgorICAgICAgbmV3X3Zhcl9pbml0ID0gYnVpbGRfbW9k aWZ5X2V4cHIKKwkobG9jYXRpb24sICpuZXdfdmFyLCBUUkVFX1RZUEUgKCpu ZXdfdmFyKSwgTk9QX0VYUFIsCisJIGxvY2F0aW9uLCBpZGVudGl0eV92YWx1 ZSwgbmV3X3Zhcl90eXBlKTsKKyAgICAgIG5ld19jYWxsX2V4cHIgPSBidWls ZF9jYWxsX2V4cHIgKGNhbGxfZm4sIDIsICpuZXdfdmFyLCBmdW5jX3Bhcm0p OworICAgICAgbmV3X2V4cHIgPSBidWlsZF9tb2RpZnlfZXhwcgorCShsb2Nh dGlvbiwgKm5ld192YXIsIFRSRUVfVFlQRSAoKm5ld192YXIpLCBOT1BfRVhQ UiwKKwkgbG9jYXRpb24sIG5ld19jYWxsX2V4cHIsIFRSRUVfVFlQRSAoKm5l d192YXIpKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUkVEVUNFX01VVEFU SU5HOgorICAgICAgbmV3X2V4cHIgPSBidWlsZF9jYWxsX2V4cHIgKGNhbGxf Zm4sIDIsIGlkZW50aXR5X3ZhbHVlLCBmdW5jX3Bhcm0pOworICAgICAgYnJl YWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsK KyAgICAgIGJyZWFrOworICAgIH0KKworICBmb3IgKGlpID0gMDsgaWkgPCBy YW5rOyBpaSsrKQorICAgIGFwcGVuZF90b19zdGF0ZW1lbnRfbGlzdCAoaW5k X2luaXQgW2lpXSwgJmxvb3ApOworCisgIGlmIChhbl90eXBlID09IFJFRFVD RV9NQVhfSU5ERVggfHwgYW5fdHlwZSA9PSBSRURVQ0VfTUlOX0lOREVYKQor ICAgIGFwcGVuZF90b19zdGF0ZW1lbnRfbGlzdCAobmV3X2V4cF9pbml0LCAm bG9vcCk7CisgIGlmIChhbl90eXBlICE9IFJFRFVDRV9NVVRBVElORykKKyAg ICBhcHBlbmRfdG9fc3RhdGVtZW50X2xpc3QgKG5ld192YXJfaW5pdCwgJmxv b3ApOworICAKKyAgZm9yIChpaSA9IDA7IGlpIDwgcmFuazsgaWkrKykKKyAg ICB7CisgICAgICBhcHBlbmRfdG9fc3RhdGVtZW50X2xpc3QKKwkoYnVpbGQx IChMQUJFTF9FWFBSLCB2b2lkX3R5cGVfbm9kZSwgaWZfc3RtdF9sYWJlbFtp aV0pLCAmbG9vcCk7CisgICAgICBhcHBlbmRfdG9fc3RhdGVtZW50X2xpc3QK KwkoYnVpbGQzIChDT05EX0VYUFIsIHZvaWRfdHlwZV9ub2RlLCBjb21wYXJl X2V4cHJbaWldLAorCQkgYnVpbGQxIChHT1RPX0VYUFIsIHZvaWRfdHlwZV9u b2RlLCBib2R5X2xhYmVsW2lpXSksCisJCSBidWlsZDEgKEdPVE9fRVhQUiwg dm9pZF90eXBlX25vZGUsIGV4aXRfbGFiZWxbaWldKSksICZsb29wKTsKKyAg ICAgIGFwcGVuZF90b19zdGF0ZW1lbnRfbGlzdCAoYm9keV9sYWJlbF9leHBy W2lpXSwgJmxvb3ApOworICAgIH0KKwkJCQkJICAgCisgIGFwcGVuZF90b19z dGF0ZW1lbnRfbGlzdCAobmV3X2V4cHIsICZsb29wKTsKKyAgCisgIGZvciAo aWkgPSByYW5rIC0gMTsgaWkgPj0gMDsgaWktLSkKKyAgICB7CisgICAgICBh cHBlbmRfdG9fc3RhdGVtZW50X2xpc3QgKGV4cHJfaW5jcltpaV0sICZsb29w KTsKKyAgICAgIGFwcGVuZF90b19zdGF0ZW1lbnRfbGlzdAorCShidWlsZDEg KEdPVE9fRVhQUiwgdm9pZF90eXBlX25vZGUsIGlmX3N0bXRfbGFiZWxbaWld KSwgJmxvb3ApOworICAgICAgYXBwZW5kX3RvX3N0YXRlbWVudF9saXN0IChl eGl0X2xhYmVsX2V4cHJbaWldLCAmbG9vcCk7CisgICAgfQorCisgIFhERUxF VEVWRUMgKGJvZHlfbGFiZWwpOworICBYREVMRVRFVkVDIChib2R5X2xhYmVs X2V4cHIpOworICBYREVMRVRFVkVDIChleGl0X2xhYmVsKTsKKyAgWERFTEVU RVZFQyAoZXhpdF9sYWJlbF9leHByKTsKKyAgWERFTEVURVZFQyAoY29tcGFy ZV9leHByKTsKKyAgWERFTEVURVZFQyAoaWZfc3RtdF9sYWJlbCk7CisgIFhE RUxFVEVWRUMgKGV4cHJfaW5jcik7CisgIFhERUxFVEVWRUMgKGluZF9pbml0 KTsKKyAgWERFTEVURVZFQyAoYXJyYXlfb3BlcmFuZCk7CisgIFhERUxFVEVW RUMgKGFycmF5X3Zhcik7CisgIAorICBmb3IgKGlpID0gMDsgaWkgPCBsaXN0 X3NpemU7IGlpKyspCisgICAgeworICAgICAgWERFTEVURVZFQyAoY291bnRf ZG93bltpaV0pOworICAgICAgWERFTEVURVZFQyAoYXJyYXlfdmFsdWVbaWld KTsKKyAgICAgIFhERUxFVEVWRUMgKGFycmF5X3N0cmlkZVtpaV0pOworICAg ICAgWERFTEVURVZFQyAoYXJyYXlfbGVuZ3RoW2lpXSk7CisgICAgICBYREVM RVRFVkVDIChhcnJheV9zdGFydFtpaV0pOworICAgICAgWERFTEVURVZFQyAo YXJyYXlfb3BzW2lpXSk7CisgICAgICBYREVMRVRFVkVDIChhcnJheV92ZWN0 b3JbaWldKTsKKyAgICB9CisKKyAgWERFTEVURVZFQyAoY291bnRfZG93bik7 CisgIFhERUxFVEVWRUMgKGFycmF5X3ZhbHVlKTsKKyAgWERFTEVURVZFQyAo YXJyYXlfc3RyaWRlKTsKKyAgWERFTEVURVZFQyAoYXJyYXlfbGVuZ3RoKTsK KyAgWERFTEVURVZFQyAoYXJyYXlfc3RhcnQpOworICBYREVMRVRFVkVDIChh cnJheV9vcHMpOworICBYREVMRVRFVkVDIChhcnJheV92ZWN0b3IpOworICAK KyAgcmV0dXJuIGxvb3A7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBvZiBGVU5D X05BTUUgaXMgYSBidWlsdGluIGFycmF5IG5vdGF0aW9uIGZ1bmN0aW9uLiAg VGhlIHR5cGUgb2YKKyAgIGZ1bmN0aW9uIGlzIHJldHVybmVkIGluICpUWVBF LiAgKi8KKworc3RhdGljIGJvb2wKK2lzX2J1aWx0aW5fYXJyYXlfbm90YXRp b25fZm4gKHRyZWUgZnVuY19uYW1lLCBhbl9yZWR1Y2VfdHlwZSAqdHlwZSkK K3sKKyAgY29uc3QgY2hhciAqZnVuY3Rpb25fbmFtZSA9IE5VTEw7CisKKyAg aWYgKCFmdW5jX25hbWUpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGlmIChU UkVFX0NPREUgKGZ1bmNfbmFtZSkgPT0gSURFTlRJRklFUl9OT0RFKQorICAg IGZ1bmN0aW9uX25hbWUgPSBJREVOVElGSUVSX1BPSU5URVIgKGZ1bmNfbmFt ZSk7CisgIGVsc2UgaWYgKFRSRUVfQ09ERSAoZnVuY19uYW1lKSA9PSBBRERS X0VYUFIpCisgICAgeworICAgICAgZnVuY19uYW1lID0gVFJFRV9PUEVSQU5E IChmdW5jX25hbWUsIDApOworICAgICAgaWYgKFRSRUVfQ09ERSAoZnVuY19u YW1lKSA9PSBGVU5DVElPTl9ERUNMKQorCWZ1bmN0aW9uX25hbWUgPSBJREVO VElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoZnVuY19uYW1lKSk7CisgICAg fQorICAKKyAgaWYgKCFmdW5jdGlvbl9uYW1lKQorICAgIHJldHVybiBmYWxz ZTsKKworICBpZiAoIXN0cmNtcCAoZnVuY3Rpb25fbmFtZSwgIl9fc2VjX3Jl ZHVjZV9hZGQiKSkKKyAgICB7CisgICAgICAqdHlwZSA9IFJFRFVDRV9BREQ7 CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIGVsc2UgaWYgKCFzdHJj bXAgKGZ1bmN0aW9uX25hbWUsICJfX3NlY19yZWR1Y2VfbXVsIikpCisgICAg eworICAgICAgKnR5cGUgPSBSRURVQ0VfTVVMOworICAgICAgcmV0dXJuIHRy dWU7CisgICAgfQorICBlbHNlIGlmICghc3RyY21wIChmdW5jdGlvbl9uYW1l LCAiX19zZWNfcmVkdWNlX2FsbF96ZXJvIikpCisgICAgeworICAgICAgKnR5 cGUgPSBSRURVQ0VfQUxMX1pFUk9TOworICAgICAgcmV0dXJuIHRydWU7Cisg ICAgfQorICBlbHNlIGlmICghc3RyY21wIChmdW5jdGlvbl9uYW1lLCAiX19z ZWNfcmVkdWNlX2FsbF9ub256ZXJvIikpCisgICAgeworICAgICAgKnR5cGUg PSBSRURVQ0VfQUxMX05PTlpFUk9TOworICAgICAgcmV0dXJuIHRydWU7Cisg ICAgfQorICBlbHNlIGlmICghc3RyY21wIChmdW5jdGlvbl9uYW1lLCAiX19z ZWNfcmVkdWNlX2FueV96ZXJvIikpCisgICAgeworICAgICAgKnR5cGUgPSBS RURVQ0VfQU5ZX1pFUk9TOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor ICBlbHNlIGlmICghc3RyY21wIChmdW5jdGlvbl9uYW1lLCAiX19zZWNfcmVk dWNlX2FueV9ub256ZXJvIikpCisgICAgeworICAgICAgKnR5cGUgPSBSRURV Q0VfQU5ZX05PTlpFUk9TOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor ICBlbHNlIGlmICghc3RyY21wIChmdW5jdGlvbl9uYW1lLCAiX19zZWNfcmVk dWNlX21heCIpKQorICAgIHsKKyAgICAgICp0eXBlID0gUkVEVUNFX01BWDsK KyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgZWxzZSBpZiAoIXN0cmNt cCAoZnVuY3Rpb25fbmFtZSwgIl9fc2VjX3JlZHVjZV9taW4iKSkKKyAgICB7 CisgICAgICAqdHlwZSA9IFJFRFVDRV9NSU47CisgICAgICByZXR1cm4gdHJ1 ZTsKKyAgICB9CisgIGVsc2UgaWYgKCFzdHJjbXAgKGZ1bmN0aW9uX25hbWUs ICJfX3NlY19yZWR1Y2VfbWluX2luZCIpKQorICAgIHsKKyAgICAgICp0eXBl ID0gUkVEVUNFX01JTl9JTkRFWDsKKyAgICAgIHJldHVybiB0cnVlOworICAg IH0KKyAgZWxzZSBpZiAoIXN0cmNtcCAoZnVuY3Rpb25fbmFtZSwgIl9fc2Vj X3JlZHVjZV9tYXhfaW5kIikpCisgICAgeworICAgICAgKnR5cGUgPSBSRURV Q0VfTUFYX0lOREVYOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICBl bHNlIGlmICghc3RyY21wIChmdW5jdGlvbl9uYW1lLCAiX19zZWNfcmVkdWNl IikpCisgICAgeworICAgICAgKnR5cGUgPSBSRURVQ0VfQ1VTVE9NOworICAg ICAgcmV0dXJuIHRydWU7CisgICAgfQorICBlbHNlIGlmICghc3RyY21wIChm dW5jdGlvbl9uYW1lLCAiX19zZWNfcmVkdWNlX211dGF0aW5nIikpCisgICAg eworICAgICAgKnR5cGUgPSBSRURVQ0VfTVVUQVRJTkc7CisgICAgICByZXR1 cm4gdHJ1ZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAqdHlwZSA9 IFJFRFVDRV9VTktOT1dOOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K KyAgcmV0dXJuIGZhbHNlOworfQorCisKKy8qIFJldHVybnMgdHJ1ZSBvZiBF WFBSIChhbmQgaXRzIHN1YnRyZWVzKSBjb250YWluIEFSUkFZX05PVEFUSU9O X0VYUFIgbm9kZS4gICovCisKK2Jvb2wKK2NvbnRhaW5zX2FycmF5X25vdGF0 aW9uX2V4cHIgKHRyZWUgZXhwcikKK3sKKyAgdHJlZSAqYXJyYXlfbGlzdCA9 IE5VTEw7CisgIGludCBsaXN0X3NpemUgPSAwOworICBhbl9yZWR1Y2VfdHlw ZSB0eXBlID0gUkVEVUNFX1VOS05PV047CisKKyAgaWYgKCFleHByKQorICAg IHJldHVybiBmYWxzZTsKKyAgaWYgKFRSRUVfQ09ERSAoZXhwcikgPT0gRlVO Q1RJT05fREVDTCkKKyAgICBpZiAoaXNfYnVpbHRpbl9hcnJheV9ub3RhdGlv bl9mbiAoREVDTF9OQU1FIChleHByKSwgJnR5cGUpKQorICAgICAgcmV0dXJu IHRydWU7CisgIAorICBleHRyYWN0X2FycmF5X25vdGF0aW9uX2V4cHJzIChl eHByLCBmYWxzZSwgJmFycmF5X2xpc3QsICZsaXN0X3NpemUpOworICBpZiAo YXJyYXlfbGlzdCA9PSBOVUxMIHx8IGxpc3Rfc2l6ZSA9PSAwKQorICAgIHJl dHVybiBmYWxzZTsKKyAgZWxzZQorICAgIHJldHVybiB0cnVlOworfQorCisK Ky8qIFJlcGxhY2VzIGFycmF5IG5vdGF0aW9ucyBpbiB2b2lkIGZ1bmN0aW9u IGNhbGwgYXJndW1lbnRzIGluIEFSRyB3aXRoIGxvb3AgYW5kCisgICB0cmVl LW5vZGUgQVJSQVlfUkVGIGFuZCByZXR1cm5zIHRoYXQgdmFsdWUgaW4gYSB0 cmVlIG5vZGUgdmFyaWFibGUgY2FsbGVkCisgICBMT09QLiAgKi8KKworc3Rh dGljIHRyZWUKK2ZpeF9hcnJheV9ub3RhdGlvbl9jYWxsX2V4cHIgKHRyZWUg YXJnKQoreworICB0cmVlICphcnJheV9saXN0ID0gTlVMTCwgbmV3X3ZhciA9 IE5VTExfVFJFRTsKKyAgaW50IGxpc3Rfc2l6ZSA9IDA7CisgIGludCByYW5r ID0gMCwgaWkgPSAwLCBqaiA9IDA7CisgIHRyZWUgKiphcnJheV9vcHMsICph cnJheV92YXIsICphcnJheV9vcGVyYW5kLCBqal90cmVlLCBsb29wOworICB0 cmVlICoqYXJyYXlfdmFsdWUsICoqYXJyYXlfc3RyaWRlLCAqKmFycmF5X2xl bmd0aCwgKiphcnJheV9zdGFydDsKKyAgdHJlZSAqYm9keV9sYWJlbCwgKmJv ZHlfbGFiZWxfZXhwciwgKmV4aXRfbGFiZWwsICpleGl0X2xhYmVsX2V4cHI7 CisgIHRyZWUgKmNvbXBhcmVfZXhwciwgKmlmX3N0bXRfbGFiZWwsICpleHBy X2luY3IsICppbmRfaW5pdDsKKyAgYm9vbCAqKmNvdW50X2Rvd24sICoqYXJy YXlfdmVjdG9yOworICBhbl9yZWR1Y2VfdHlwZSBhbl90eXBlID0gUkVEVUNF X1VOS05PV047CisgIGxvY2F0aW9uX3QgbG9jYXRpb24gPSBVTktOT1dOX0xP Q0FUSU9OOworCisgIGlmIChpc19idWlsdGluX2FycmF5X25vdGF0aW9uX2Zu IChDQUxMX0VYUFJfRk4gKGFyZyksICZhbl90eXBlKSkKKyAgICB7CisgICAg ICBsb29wID0gZml4X2J1aWx0aW5fYXJyYXlfbm90YXRpb25fZm4gKGFyZywg Jm5ld192YXIpOworICAgICAgLyogV2UgYXJlIGlnbm9yaW5nIHRoZSBuZXcg dmFyIGJlY2F1c2UgZWl0aGVyIHRoZSB1c2VyIGRvZXMgbm90IHdhbnQgdG8K KwkgY2FwdHVyZSBpdCBPUiBoZSBpcyB1c2luZyBzZWNfcmVkdWNlX211dGF0 aW5nIGZ1bmN0aW9uLiAgKi8KKyAgICAgIHJldHVybiBsb29wOworICAgIH0K KyAgCisgIGZpbmRfcmFuayAoYXJnLCBmYWxzZSwgJnJhbmspOworICBpZiAo cmFuayA9PSAwKQorICAgIHJldHVybiBhcmc7CisgIAorICBleHRyYWN0X2Fy cmF5X25vdGF0aW9uX2V4cHJzIChhcmcsIHRydWUsICZhcnJheV9saXN0LCAm bGlzdF9zaXplKTsKKworICBpZiAobGlzdF9zaXplID09IDAgfHwgKmFycmF5 X2xpc3QgPT0gTlVMTF9UUkVFKQorICAgIHJldHVybiBhcmc7CisKKyAgbG9j YXRpb24gPSBFWFBSX0xPQ0FUSU9OIChhcmcpOworCisgIGFycmF5X29wcyA9 IFhORVdWRUMgKHRyZWUgKiwgbGlzdF9zaXplKTsKKyAgZm9yIChpaSA9IDA7 IGlpIDwgbGlzdF9zaXplOyBpaSsrKQorICAgIGFycmF5X29wc1tpaV0gPSBY TkVXVkVDICh0cmVlLCByYW5rKTsKKyAgCisgIGFycmF5X3ZlY3RvciA9IFhO RVdWRUMgKGJvb2wgKiwgbGlzdF9zaXplKTsKKyAgZm9yIChpaSA9IDA7IGlp IDwgbGlzdF9zaXplOyBpaSsrKQorICAgIGFycmF5X3ZlY3RvcltpaV0gPSAo Ym9vbCAqKSBYTkVXVkVDIChib29sLCByYW5rKTsKKworICBhcnJheV92YWx1 ZSA9IFhORVdWRUMgKHRyZWUgKiwgbGlzdF9zaXplKTsKKyAgYXJyYXlfc3Ry aWRlID0gWE5FV1ZFQyAodHJlZSAqLCBsaXN0X3NpemUpOworICBhcnJheV9s ZW5ndGggPSBYTkVXVkVDICh0cmVlICosIGxpc3Rfc2l6ZSk7CisgIGFycmF5 X3N0YXJ0ID0gWE5FV1ZFQyAodHJlZSAqLCBsaXN0X3NpemUpOworCisgIGZv ciAoaWkgPSAwOyBpaSA8IGxpc3Rfc2l6ZTsgaWkrKykKKyAgICB7CisgICAg ICBhcnJheV92YWx1ZVtpaV0gID0gWE5FV1ZFQyAodHJlZSwgcmFuayk7Cisg ICAgICBhcnJheV9zdHJpZGVbaWldID0gWE5FV1ZFQyAodHJlZSwgcmFuayk7 CisgICAgICBhcnJheV9sZW5ndGhbaWldID0gWE5FV1ZFQyAodHJlZSwgcmFu ayk7CisgICAgICBhcnJheV9zdGFydFtpaV0gID0gWE5FV1ZFQyAodHJlZSwg cmFuayk7CisgICAgfQorCisgIGJvZHlfbGFiZWwgPSBYTkVXVkVDICh0cmVl LCByYW5rKTsKKyAgYm9keV9sYWJlbF9leHByID0gWE5FV1ZFQyAodHJlZSwg cmFuayk7CisgIGV4aXRfbGFiZWwgPSBYTkVXVkVDICh0cmVlLCByYW5rKTsK KyAgZXhpdF9sYWJlbF9leHByID0gWE5FV1ZFQyAodHJlZSwgcmFuayk7Cisg IGNvbXBhcmVfZXhwciA9IFhORVdWRUMgKHRyZWUsIHJhbmspOworICBpZl9z dG10X2xhYmVsID0gWE5FV1ZFQyAodHJlZSwgcmFuayk7CisgIAorICBleHBy X2luY3IgPSBYTkVXVkVDICh0cmVlLCByYW5rKTsKKyAgaW5kX2luaXQgPSBY TkVXVkVDICh0cmVlLCByYW5rKTsKKyAgCisgIGNvdW50X2Rvd24gPSAgWE5F V1ZFQyAoYm9vbCAqLCBsaXN0X3NpemUpOworICBmb3IgKGlpID0gMDsgaWkg PCBsaXN0X3NpemU7IGlpKyspCisgICAgY291bnRfZG93bltpaV0gPSBYTkVX VkVDIChib29sLCByYW5rKTsKKworICBhcnJheV9vcGVyYW5kID0gWE5FV1ZF QyAodHJlZSwgbGlzdF9zaXplKTsKKyAgCisgIGFycmF5X3ZhciA9IFhORVdW RUMgKHRyZWUsIHJhbmspOworCisgIGZvciAoaWkgPSAwOyBpaSA8IGxpc3Rf c2l6ZTsgaWkrKykKKyAgICB7CisgICAgICBqaiA9IDA7CisgICAgICBmb3Ig KGpqX3RyZWUgPSBhcnJheV9saXN0W2lpXTsKKwkgICBqal90cmVlICYmIFRS RUVfQ09ERSAoampfdHJlZSkgPT0gQVJSQVlfTk9UQVRJT05fUkVGOworCSAg IGpqX3RyZWUgPSBBUlJBWV9OT1RBVElPTl9BUlJBWSAoampfdHJlZSkpCisJ eworCSAgYXJyYXlfb3BzW2lpXVtqal0gPSBqal90cmVlOworCSAgamorKzsK Kwl9CisgICAgfQorCisgIGZvciAoaWkgPSAwOyBpaSA8IGxpc3Rfc2l6ZTsg aWkrKykKKyAgICB7CisgICAgICBpZiAoVFJFRV9DT0RFIChhcnJheV9saXN0 W2lpXSkgPT0gQVJSQVlfTk9UQVRJT05fUkVGKQorCXsKKwkgIGZvciAoamog PSAwOyBqaiA8IHJhbms7IGpqKyspCisJICAgIHsKKwkgICAgICBpZiAoVFJF RV9DT0RFIChhcnJheV9vcHNbaWldW2pqXSkgPT0gQVJSQVlfTk9UQVRJT05f UkVGKQorCQl7CisJCSAgYXJyYXlfdmFsdWVbaWldW2pqXSA9CisJCSAgICBB UlJBWV9OT1RBVElPTl9BUlJBWSAoYXJyYXlfb3BzW2lpXVtqal0pOworCQkg IGFycmF5X3N0YXJ0W2lpXVtqal0gPQorCQkgICAgQVJSQVlfTk9UQVRJT05f U1RBUlQgKGFycmF5X29wc1tpaV1bampdKTsKKwkJICBhcnJheV9sZW5ndGhb aWldW2pqXSA9CisJCSAgICBBUlJBWV9OT1RBVElPTl9MRU5HVEggKGFycmF5 X29wc1tpaV1bampdKTsKKwkJICBhcnJheV9zdHJpZGVbaWldW2pqXSA9CisJ CSAgICBBUlJBWV9OT1RBVElPTl9TVFJJREUgKGFycmF5X29wc1tpaV1bampd KTsKKwkJICBhcnJheV92ZWN0b3JbaWldW2pqXSA9IHRydWU7CisKKwkJICBp ZiAoIVRSRUVfQ09OU1RBTlQgKGFycmF5X2xlbmd0aFtpaV1bampdKSkgCisJ CSAgICBjb3VudF9kb3duW2lpXVtqal0gPSBmYWxzZTsKKwkJICBlbHNlIGlm ICh0cmVlX2ludF9jc3RfbHQKKwkJCSAgIChhcnJheV9sZW5ndGhbaWldW2pq XSwKKwkJCSAgICBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKGFycmF5X2xl bmd0aFtpaV1bampdKSwKKwkJCQkJICAgMCkpKQorCQkgICAgY291bnRfZG93 bltpaV1bampdID0gdHJ1ZTsKKwkJICBlbHNlCisJCSAgICBjb3VudF9kb3du W2lpXVtqal0gPSBmYWxzZTsKKwkJfQorCSAgICAgIGVsc2UKKwkJYXJyYXlf dmVjdG9yW2lpXVtqal0gPSBmYWxzZTsKKwkgICAgfQorCX0KKyAgICB9CisK KyAgbG9vcCA9IHB1c2hfc3RtdF9saXN0ICgpOworCisgIGZvciAoaWkgPSAw OyBpaSA8IHJhbms7IGlpKyspCisgICAgeworICAgICAgYXJyYXlfdmFyW2lp XSA9IGJ1aWxkX2RlY2wgKGxvY2F0aW9uLCBWQVJfREVDTCwgTlVMTF9UUkVF LAorCQkJCSAgaW50ZWdlcl90eXBlX25vZGUpOworICAgICAgaW5kX2luaXRb aWldID0KKwlidWlsZF9tb2RpZnlfZXhwciAobG9jYXRpb24sIGFycmF5X3Zh cltpaV0sCisJCQkgICBUUkVFX1RZUEUgKGFycmF5X3ZhcltpaV0pLCBOT1Bf RVhQUiwKKwkJCSAgIGxvY2F0aW9uLAorCQkJICAgYnVpbGRfaW50X2NzdCAo VFJFRV9UWVBFIChhcnJheV92YXJbaWldKSwgMCksCisJCQkgICBUUkVFX1RZ UEUgKGFycmF5X3ZhcltpaV0pKTsKKwkKKyAgICB9CisKKyAgZm9yIChpaSA9 IDA7IGlpIDwgcmFuayA7IGlpKyspCisgICAgeworICAgICAgLyogVGhpcyB3 aWxsIGNyZWF0ZSB0aGUgaWYgc3RhdGVtZW50IGxhYmVsLiAgKi8KKyAgICAg IGlmX3N0bXRfbGFiZWxbaWldID0gYnVpbGRfZGVjbCAobG9jYXRpb24sIExB QkVMX0RFQ0wsIE5VTExfVFJFRSwKKwkJCQkgICAgICB2b2lkX3R5cGVfbm9k ZSk7CisgICAgICBERUNMX0NPTlRFWFQgKGlmX3N0bXRfbGFiZWxbaWldKSA9 IGN1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKyAgICAgIERFQ0xfQVJUSUZJQ0lB TCAoaWZfc3RtdF9sYWJlbFtpaV0pID0gMDsKKyAgICAgIERFQ0xfSUdOT1JF RF9QIChpZl9zdG10X2xhYmVsW2lpXSkgPSAxOworICAKKyAgICAgIC8qIFRo aXMgbGFiZWwgc3RhdG1lbnQgd2lsbCBwb2ludCB0byB0aGUgbG9vcCBib2R5 LiAgKi8KKyAgICAgIGJvZHlfbGFiZWxbaWldID0gYnVpbGRfZGVjbCAobG9j YXRpb24sIExBQkVMX0RFQ0wsIE5VTExfVFJFRSwKKwkJCQkgICB2b2lkX3R5 cGVfbm9kZSk7CisgICAgICBERUNMX0NPTlRFWFQgKGJvZHlfbGFiZWxbaWld KSA9IGN1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKyAgICAgIERFQ0xfQVJUSUZJ Q0lBTCAoYm9keV9sYWJlbFtpaV0pID0gMDsKKyAgICAgIERFQ0xfSUdOT1JF RF9QIChib2R5X2xhYmVsW2lpXSkgPSAxOworICAgICAgYm9keV9sYWJlbF9l eHByW2lpXSA9IGJ1aWxkMSAoTEFCRUxfRVhQUiwgdm9pZF90eXBlX25vZGUs IGJvZHlfbGFiZWxbaWldKTsKKworICAgICAgLyogVGhpcyB3aWxsIGNyZWF0 ZSB0aGUgZXhpdCBsYWJlbC4uaS5lLiB3aGVyZSB0aGUgd2hpbGUgbG9vcCB3 aWxsIGJyYW5jaAorCSBvdXQgb2YuICAqLworICAgICAgZXhpdF9sYWJlbFtp aV0gPSBidWlsZF9kZWNsIChsb2NhdGlvbiwgTEFCRUxfREVDTCwgTlVMTF9U UkVFLAorCQkJCSAgIHZvaWRfdHlwZV9ub2RlKTsKKyAgICAgIERFQ0xfQ09O VEVYVCAoZXhpdF9sYWJlbFtpaV0pID0gY3VycmVudF9mdW5jdGlvbl9kZWNs OworICAgICAgREVDTF9BUlRJRklDSUFMIChleGl0X2xhYmVsW2lpXSkgPSAw OworICAgICAgREVDTF9JR05PUkVEX1AgKGV4aXRfbGFiZWxbaWldKSA9IDE7 CisgICAgICBleGl0X2xhYmVsX2V4cHJbaWldID0gYnVpbGQxIChMQUJFTF9F WFBSLCB2b2lkX3R5cGVfbm9kZSwgZXhpdF9sYWJlbFtpaV0pOworICAgIH0K KworICBmb3IgKGlpID0gMDsgaWkgPCBsaXN0X3NpemU7IGlpKyspCisgICAg eworICAgICAgaWYgKGFycmF5X3ZlY3RvcltpaV1bMF0pCisJeworCSAgYXJy YXlfb3BlcmFuZFtpaV0gPSBhcnJheV92YWx1ZVtpaV1bcmFuayAtIDFdOwor CSAgZ2NjX2Fzc2VydCAoYXJyYXlfb3BlcmFuZFtpaV0pOworCisJICBmb3Ig KGpqID0gcmFuayAtIDE7IGpqID49IDA7IGpqLS0pCisJICAgIHsKKwkgICAg ICBpZiAoY291bnRfZG93bltpaV1bampdKQorCQl7CisJCSAgLyogQXJyYXlb c3RhcnRfaW5kZXggLSAoaW5kdWN0aW9uX3ZhciAqIHN0cmlkZSldICovCisJ CSAgYXJyYXlfb3BlcmFuZFtpaV0gPSBidWlsZF9hcnJheV9yZWYKKwkJICAg IChsb2NhdGlvbiwgYXJyYXlfb3BlcmFuZFtpaV0sCisJCSAgICAgYnVpbGQy IChNSU5VU19FWFBSLCBUUkVFX1RZUEUgKGFycmF5X3Zhcltqal0pLAorCQkJ ICAgICBhcnJheV9zdGFydFtpaV1bampdLAorCQkJICAgICBidWlsZDIgKE1V TFRfRVhQUiwgVFJFRV9UWVBFIChhcnJheV92YXJbampdKSwKKwkJCQkgICAg IGFycmF5X3Zhcltqal0sIGFycmF5X3N0cmlkZVtpaV1bampdKSkpOworCQl9 CisJICAgICAgZWxzZQorCQl7CisJCSAgLyogQXJyYXlbc3RhcnRfaW5kZXgg KyAoaW5kdWN0aW9uX3ZhciAqIHN0cmlkZSldICovCisJCSAgYXJyYXlfb3Bl cmFuZFtpaV0gPSBidWlsZF9hcnJheV9yZWYKKwkJICAgIChsb2NhdGlvbiwg YXJyYXlfb3BlcmFuZFtpaV0sCisJCSAgICAgYnVpbGQyIChQTFVTX0VYUFIs IFRSRUVfVFlQRSAoYXJyYXlfdmFyW2pqXSksCisJCQkgICAgIGFycmF5X3N0 YXJ0W2lpXVtqal0sCisJCQkgICAgIGJ1aWxkMiAoTVVMVF9FWFBSLCBUUkVF X1RZUEUgKGFycmF5X3Zhcltqal0pLAorCQkJCSAgICAgYXJyYXlfdmFyW2pq XSwgYXJyYXlfc3RyaWRlW2lpXVtqal0pKSk7CisJCX0KKwkgICAgfQorCX0K KyAgICB9CisgIHJlcGxhY2VfYXJyYXlfbm90YXRpb25zICgmYXJnLCB0cnVl LCBhcnJheV9saXN0LCBhcnJheV9vcGVyYW5kLAorCQkJICAgbGlzdF9zaXpl KTsKKyAgZm9yIChpaSA9IDA7IGlpIDwgcmFuazsgaWkrKykgCisgICAgZXhw cl9pbmNyW2lpXSA9IAorICAgICAgYnVpbGQyIChNT0RJRllfRVhQUiwgdm9p ZF90eXBlX25vZGUsIGFycmF5X3ZhcltpaV0sIAorCSAgICAgIGJ1aWxkMiAo UExVU19FWFBSLCBUUkVFX1RZUEUgKGFycmF5X3ZhcltpaV0pLCBhcnJheV92 YXJbaWldLCAKKwkJICAgICAgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChh cnJheV92YXJbaWldKSwgMSkpKTsKKyAgCisgIGZvciAoamogPSAwOyBqaiA8 IHJhbms7IGpqKyspCisgICAgeworICAgICAgaWYgKHJhbmsgJiYgZXhwcl9p bmNyW2pqXSkKKwl7CisJICBpZiAoY291bnRfZG93blswXVtqal0pCisJICAg IGNvbXBhcmVfZXhwcltqal0gPQorCSAgICAgIGJ1aWxkMiAoTFRfRVhQUiwg Ym9vbGVhbl90eXBlX25vZGUsIGFycmF5X3Zhcltqal0sCisJCSAgICAgIGJ1 aWxkMiAoTVVMVF9FWFBSLCBUUkVFX1RZUEUgKGFycmF5X3Zhcltqal0pLAor CQkJICAgICAgYXJyYXlfbGVuZ3RoWzBdW2pqXSwKKwkJCSAgICAgIGJ1aWxk X2ludF9jc3QgKFRSRUVfVFlQRSAoYXJyYXlfdmFyW2pqXSksIC0xKSkpOwor CSAgZWxzZQorCSAgICBjb21wYXJlX2V4cHJbampdID0gYnVpbGQyIChMVF9F WFBSLCBib29sZWFuX3R5cGVfbm9kZSwKKwkJCQkgICAgICAgYXJyYXlfdmFy W2pqXSwgYXJyYXlfbGVuZ3RoWzBdW2pqXSk7CisJfQorICAgIH0KKyAgZm9y IChpaSA9IDA7IGlpIDwgcmFuazsgaWkrKykKKyAgICB7CisgICAgICBhZGRf c3RtdCAoaW5kX2luaXQgW2lpXSk7CisgICAgICBhZGRfc3RtdCAoYnVpbGQx IChMQUJFTF9FWFBSLCB2b2lkX3R5cGVfbm9kZSwgaWZfc3RtdF9sYWJlbFtp aV0pKTsKKyAgICAgIGFkZF9zdG10IChidWlsZDMgKENPTkRfRVhQUiwgdm9p ZF90eXBlX25vZGUsIGNvbXBhcmVfZXhwcltpaV0sCisJCQlidWlsZDEgKEdP VE9fRVhQUiwgdm9pZF90eXBlX25vZGUsIGJvZHlfbGFiZWxbaWldKSwKKwkJ CWJ1aWxkMSAoR09UT19FWFBSLCB2b2lkX3R5cGVfbm9kZSwgZXhpdF9sYWJl bFtpaV0pKSk7CisgICAgICBhZGRfc3RtdCAoYm9keV9sYWJlbF9leHByW2lp XSk7CisgICAgfQorICBhZGRfc3RtdCAoYXJnKTsKKyAgZm9yIChpaSA9IHJh bmsgLSAxOyBpaSA+PSAwOyBpaS0tKQorICAgIHsKKyAgICAgIGFkZF9zdG10 IChleHByX2luY3JbaWldKTsKKyAgICAgIGFkZF9zdG10IChidWlsZDEgKEdP VE9fRVhQUiwgdm9pZF90eXBlX25vZGUsIGlmX3N0bXRfbGFiZWxbaWldKSk7 CisgICAgICBhZGRfc3RtdCAoZXhpdF9sYWJlbF9leHByW2lpXSk7CisgICAg fQorCisgIHBvcF9zdG10X2xpc3QgKGxvb3ApOworCisgIFhERUxFVEVWRUMg KGJvZHlfbGFiZWwpOworICBYREVMRVRFVkVDIChib2R5X2xhYmVsX2V4cHIp OworICBYREVMRVRFVkVDIChleGl0X2xhYmVsKTsKKyAgWERFTEVURVZFQyAo ZXhpdF9sYWJlbF9leHByKTsKKyAgWERFTEVURVZFQyAoY29tcGFyZV9leHBy KTsKKyAgWERFTEVURVZFQyAoaWZfc3RtdF9sYWJlbCk7CisgIFhERUxFVEVW RUMgKGV4cHJfaW5jcik7CisgIFhERUxFVEVWRUMgKGluZF9pbml0KTsKKyAg WERFTEVURVZFQyAoYXJyYXlfb3BlcmFuZCk7CisgIFhERUxFVEVWRUMgKGFy cmF5X3Zhcik7CisgIAorICBmb3IgKGlpID0gMDsgaWkgPCBsaXN0X3NpemU7 IGlpKyspCisgICAgeworICAgICAgWERFTEVURVZFQyAoY291bnRfZG93bltp aV0pOworICAgICAgWERFTEVURVZFQyAoYXJyYXlfdmFsdWVbaWldKTsKKyAg ICAgIFhERUxFVEVWRUMgKGFycmF5X3N0cmlkZVtpaV0pOworICAgICAgWERF TEVURVZFQyAoYXJyYXlfbGVuZ3RoW2lpXSk7CisgICAgICBYREVMRVRFVkVD IChhcnJheV9zdGFydFtpaV0pOworICAgICAgWERFTEVURVZFQyAoYXJyYXlf b3BzW2lpXSk7CisgICAgICBYREVMRVRFVkVDIChhcnJheV92ZWN0b3JbaWld KTsKKyAgICB9CisKKyAgWERFTEVURVZFQyAoY291bnRfZG93bik7CisgIFhE RUxFVEVWRUMgKGFycmF5X3ZhbHVlKTsKKyAgWERFTEVURVZFQyAoYXJyYXlf c3RyaWRlKTsKKyAgWERFTEVURVZFQyAoYXJyYXlfbGVuZ3RoKTsKKyAgWERF TEVURVZFQyAoYXJyYXlfc3RhcnQpOworICBYREVMRVRFVkVDIChhcnJheV9v cHMpOworICBYREVMRVRFVkVDIChhcnJheV92ZWN0b3IpOworCisgIGFyZyA9 IGxvb3A7CisgIHJldHVybiBhcmc7Cit9CisKKworLyogV2Fsa3MgdGhyb3Vn aCB0cmVlIG5vZGUgVCBhbmQgZmluZCBhbGwgdGhlIGNhbGwtc3RhdG1lbnRz IHRoYXQgZG8gbm90IHJldHVybgorICAgYW55dGhpbmcgYW5kIGZpeCB1cCBh bnkgYXJyYXkgbm90YXRpb25zIHRoZXkgbWF5IGNhcnJ5LiAgKi8KKwordHJl ZQorZXhwYW5kX2FycmF5X25vdGF0aW9uX2V4cHJzICh0cmVlIHQpCit7Cisg IGlmICghdCB8fCAhY29udGFpbnNfYXJyYXlfbm90YXRpb25fZXhwciAodCkp CisgICAgcmV0dXJuIHQ7CisKKyAgc3dpdGNoIChUUkVFX0NPREUgKHQpKQor ICAgIHsKKyAgICBjYXNlIEJJTkRfRVhQUjoKKyAgICAgIHQgPSBleHBhbmRf YXJyYXlfbm90YXRpb25fZXhwcnMgKEJJTkRfRVhQUl9CT0RZICh0KSk7Cisg ICAgICByZXR1cm4gdDsKKyAgICBjYXNlIFNUQVRFTUVOVF9MSVNUOgorICAg ICAgeworCXRyZWVfc3RtdF9pdGVyYXRvciBpaV90c2k7CisJZm9yIChpaV90 c2kgPSB0c2lfc3RhcnQgKHQpOyAhdHNpX2VuZF9wIChpaV90c2kpOyB0c2lf bmV4dCAoJmlpX3RzaSkpCisJICAqdHNpX3N0bXRfcHRyIChpaV90c2kpID0g CisJICAgIGV4cGFuZF9hcnJheV9ub3RhdGlvbl9leHBycyAoKnRzaV9zdG10 X3B0ciAoaWlfdHNpKSk7CisgICAgICB9CisgICAgICByZXR1cm4gdDsKKyAg ICBjYXNlIENBTExfRVhQUjoKKyAgICAgIHQgPSBmaXhfYXJyYXlfbm90YXRp b25fY2FsbF9leHByICh0KTsKKyAgICAgIHJldHVybiB0OworICAgIGRlZmF1 bHQ6CisgICAgICByZXR1cm4gdDsKKyAgICB9CisgIHJldHVybiB0OworfQpk aWZmIC0tZ2l0IGEvZ2NjL2MvYy1wYXJzZXIuYyBiL2djYy9jL2MtcGFyc2Vy LmMKaW5kZXggYmVhOTc5MS4uN2UwNDQzOSAxMDA2NDQKLS0tIGEvZ2NjL2Mv Yy1wYXJzZXIuYworKysgYi9nY2MvYy9jLXBhcnNlci5jCkBAIC01Nyw2ICs1 NywxMyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcz LiAgSWYgbm90IHNlZQogI2luY2x1ZGUgImNncmFwaC5oIgogI2luY2x1ZGUg InBsdWdpbi5oIgogCisKK2V4dGVybiBib29sIGNvbnRhaW5zX2FycmF5X25v dGF0aW9uX2V4cHIgKHRyZWUpOworZXh0ZXJuIHN0cnVjdCBjX2V4cHIgZml4 X2FycmF5X25vdGF0aW9uX2V4cHIgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9j b2RlLAorCQkJCQkgICAgICBzdHJ1Y3QgY19leHByKTsKK2V4dGVybiB0cmVl IGZpeF9jb25kaXRpb25hbF9hcnJheV9ub3RhdGlvbnMgKHRyZWUpOworZXh0 ZXJuIHRyZWUgZXhwYW5kX2FycmF5X25vdGF0aW9uX2V4cHJzICh0cmVlKTsK KwogDAogLyogSW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgdGhpcyBmaWxl LiAgKi8KIApAQCAtMTIyNCw2ICsxMjMxLDggQEAgc3RhdGljIHZvaWQgY19w YXJzZXJfb2JqY19hdF9keW5hbWljX2RlY2xhcmF0aW9uIChjX3BhcnNlciAq KTsKIHN0YXRpYyBib29sIGNfcGFyc2VyX29iamNfZGlhZ25vc2VfYmFkX2Vs ZW1lbnRfcHJlZml4CiAgIChjX3BhcnNlciAqLCBzdHJ1Y3QgY19kZWNsc3Bl Y3MgKik7CiAKK3N0YXRpYyB0cmVlIGNfcGFyc2VyX2FycmF5X25vdGF0aW9u IChjX3BhcnNlciAqLCB0cmVlLCB0cmVlKTsKKwogLyogUGFyc2UgYSB0cmFu c2xhdGlvbiB1bml0IChDOTAgNi43LCBDOTkgNi45KS4KIAogICAgdHJhbnNs YXRpb24tdW5pdDoKQEAgLTQwNzksNiArNDA4OCwxMCBAQCBjX3BhcnNlcl9j b21wb3VuZF9zdGF0ZW1lbnQgKGNfcGFyc2VyICpwYXJzZXIpCiAgICAgfQog ICBzdG10ID0gY19iZWdpbl9jb21wb3VuZF9zdG10ICh0cnVlKTsKICAgY19w YXJzZXJfY29tcG91bmRfc3RhdGVtZW50X25vc3RhcnQgKHBhcnNlcik7CisK KyAgLyogSWYgdGhlIGNvbXBvdW5kIHN0bXQgY29udGFpbnMgYXJyYXkgbm90 YXRpb25zLCB0aGVuIHdlIGV4cGFuZCB0aGVtLiAgKi8KKyAgaWYgKGZsYWdf ZW5hYmxlX2NpbGtwbHVzICYmIGNvbnRhaW5zX2FycmF5X25vdGF0aW9uX2V4 cHIgKHN0bXQpKQorICAgIHN0bXQgPSBleHBhbmRfYXJyYXlfbm90YXRpb25f ZXhwcnMgKHN0bXQpOwogICByZXR1cm4gY19lbmRfY29tcG91bmRfc3RtdCAo YnJhY2VfbG9jLCBzdG10LCB0cnVlKTsKIH0KIApAQCAtNDcyMiw2ICs0NzM1 LDcgQEAgY19wYXJzZXJfaWZfc3RhdGVtZW50IChjX3BhcnNlciAqcGFyc2Vy KQogICBib29sIGZpcnN0X2lmID0gZmFsc2U7CiAgIHRyZWUgZmlyc3RfYm9k eSwgc2Vjb25kX2JvZHk7CiAgIGJvb2wgaW5faWZfYmxvY2s7CisgIHRyZWUg aWZfc3RtdDsKIAogICBnY2NfYXNzZXJ0IChjX3BhcnNlcl9uZXh0X3Rva2Vu X2lzX2tleXdvcmQgKHBhcnNlciwgUklEX0lGKSk7CiAgIGNfcGFyc2VyX2Nv bnN1bWVfdG9rZW4gKHBhcnNlcik7CkBAIC00NzQwLDcgKzQ3NTQsMTIgQEAg Y19wYXJzZXJfaWZfc3RhdGVtZW50IChjX3BhcnNlciAqcGFyc2VyKQogICBl bHNlCiAgICAgc2Vjb25kX2JvZHkgPSBOVUxMX1RSRUU7CiAgIGNfZmluaXNo X2lmX3N0bXQgKGxvYywgY29uZCwgZmlyc3RfYm9keSwgc2Vjb25kX2JvZHks IGZpcnN0X2lmKTsKLSAgYWRkX3N0bXQgKGNfZW5kX2NvbXBvdW5kX3N0bXQg KGxvYywgYmxvY2ssIGZsYWdfaXNvYzk5KSk7CisgIGlmX3N0bXQgPSBjX2Vu ZF9jb21wb3VuZF9zdG10IChsb2MsIGJsb2NrLCBmbGFnX2lzb2M5OSk7CisK KyAgLyogSWYgdGhlIGlmIHN0YXRlbWVudCBjb250YWlucyBhcnJheSBub3Rh dGlvbnMsIHRoZW4gd2UgZXhwYW5kIHRoZW0uICAqLworICBpZiAoZmxhZ19l bmFibGVfY2lsa3BsdXMgJiYgY29udGFpbnNfYXJyYXlfbm90YXRpb25fZXhw ciAoaWZfc3RtdCkpCisgICAgaWZfc3RtdCA9IGZpeF9jb25kaXRpb25hbF9h cnJheV9ub3RhdGlvbnMgKGlmX3N0bXQpOworICBhZGRfc3RtdCAoaWZfc3Rt dCk7CiB9CiAKIC8qIFBhcnNlIGEgc3dpdGNoIHN0YXRlbWVudCAoQzkwIDYu Ni40LCBDOTkgNi44LjQpLgpAQCAtNTQwMyw5ICs1NDIyLDIxIEBAIGNfcGFy c2VyX2V4cHJfbm9fY29tbWFzIChjX3BhcnNlciAqcGFyc2VyLCBzdHJ1Y3Qg Y19leHByICphZnRlcikKICAgZXhwX2xvY2F0aW9uID0gY19wYXJzZXJfcGVl a190b2tlbiAocGFyc2VyKS0+bG9jYXRpb247CiAgIHJocyA9IGNfcGFyc2Vy X2V4cHJfbm9fY29tbWFzIChwYXJzZXIsIE5VTEwpOwogICByaHMgPSBkZWZh dWx0X2Z1bmN0aW9uX2FycmF5X3JlYWRfY29udmVyc2lvbiAoZXhwX2xvY2F0 aW9uLCByaHMpOwotICByZXQudmFsdWUgPSBidWlsZF9tb2RpZnlfZXhwciAo b3BfbG9jYXRpb24sIGxocy52YWx1ZSwgbGhzLm9yaWdpbmFsX3R5cGUsCi0J CQkJIGNvZGUsIGV4cF9sb2NhdGlvbiwgcmhzLnZhbHVlLAotCQkJCSByaHMu b3JpZ2luYWxfdHlwZSk7CisgIAorICAvKiBUaGUgbGluZSBiZWxvdyBpcyB3 aGVyZSB0aGUgc3RhdGVtZW50IGhhcyB0aGUgZm9ybToKKyAgICAgQSA9IEIs IHdoZXJlIEEgYW5kIEIgY29udGFpbiBhcnJheSBub3RhdGlvbiBleHBycy4g U28gdGhpcyBpcyB3aGVyZQorICAgICB3ZSBoYW5kbGUgdGhvc2UuICAqLwor ICBpZiAoZmxhZ19lbmFibGVfY2lsa3BsdXMKKyAgICAgICYmIChjb250YWlu c19hcnJheV9ub3RhdGlvbl9leHByIChsaHMudmFsdWUpCisJICB8fCBjb250 YWluc19hcnJheV9ub3RhdGlvbl9leHByIChyaHMudmFsdWUpKSkKKyAgICBy ZXQudmFsdWUgPSBidWlsZF9hcnJheV9ub3RhdGlvbl9leHByIChvcF9sb2Nh dGlvbiwgbGhzLnZhbHVlLAorCQkJCQkgICBsaHMub3JpZ2luYWxfdHlwZSwg Y29kZSwKKwkJCQkJICAgZXhwX2xvY2F0aW9uLCByaHMudmFsdWUsCisJCQkJ CSAgIHJocy5vcmlnaW5hbF90eXBlKTsKKyAgZWxzZQorICAgIHJldC52YWx1 ZSA9IGJ1aWxkX21vZGlmeV9leHByIChvcF9sb2NhdGlvbiwgbGhzLnZhbHVl LCBsaHMub3JpZ2luYWxfdHlwZSwKKwkJCQkgICBjb2RlLCBleHBfbG9jYXRp b24sIHJocy52YWx1ZSwKKwkJCQkgICByaHMub3JpZ2luYWxfdHlwZSk7CiAg IGlmIChjb2RlID09IE5PUF9FWFBSKQogICAgIHJldC5vcmlnaW5hbF9jb2Rl ID0gTU9ESUZZX0VYUFI7CiAgIGVsc2UKQEAgLTU4ODUsMTQgKzU5MTYsMjYg QEAgY19wYXJzZXJfdW5hcnlfZXhwcmVzc2lvbiAoY19wYXJzZXIgKnBhcnNl cikKICAgICAgIGNfcGFyc2VyX2NvbnN1bWVfdG9rZW4gKHBhcnNlcik7CiAg ICAgICBleHBfbG9jID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKS0+ bG9jYXRpb247CiAgICAgICBvcCA9IGNfcGFyc2VyX2Nhc3RfZXhwcmVzc2lv biAocGFyc2VyLCBOVUxMKTsKLSAgICAgIG9wID0gZGVmYXVsdF9mdW5jdGlv bl9hcnJheV9yZWFkX2NvbnZlcnNpb24gKGV4cF9sb2MsIG9wKTsKLSAgICAg IHJldHVybiBwYXJzZXJfYnVpbGRfdW5hcnlfb3AgKG9wX2xvYywgUFJFSU5D UkVNRU5UX0VYUFIsIG9wKTsKKyAgICAgIC8qIElmIHRoZSB1bmFyeSBleHBy ZXNzaW9uIGhhcyBhcnJheSBub3RhdGlvbnMsIHRoZW4gd2UgZXhwYW5kIHRo ZW0uICAqLworICAgICAgaWYgKGZsYWdfZW5hYmxlX2NpbGtwbHVzICYmIFRS RUVfQ09ERSAob3AudmFsdWUpID09IEFSUkFZX05PVEFUSU9OX1JFRikKKwly ZXR1cm4gZml4X2FycmF5X25vdGF0aW9uX2V4cHIgKGV4cF9sb2MsIFBSRUlO Q1JFTUVOVF9FWFBSLCBvcCk7CisgICAgICBlbHNlCisJeworCSAgb3AgPSBk ZWZhdWx0X2Z1bmN0aW9uX2FycmF5X3JlYWRfY29udmVyc2lvbiAoZXhwX2xv Yywgb3ApOworCSAgcmV0dXJuIHBhcnNlcl9idWlsZF91bmFyeV9vcCAob3Bf bG9jLCBQUkVJTkNSRU1FTlRfRVhQUiwgb3ApOworCX0KICAgICBjYXNlIENQ UF9NSU5VU19NSU5VUzoKICAgICAgIGNfcGFyc2VyX2NvbnN1bWVfdG9rZW4g KHBhcnNlcik7CiAgICAgICBleHBfbG9jID0gY19wYXJzZXJfcGVla190b2tl biAocGFyc2VyKS0+bG9jYXRpb247CiAgICAgICBvcCA9IGNfcGFyc2VyX2Nh c3RfZXhwcmVzc2lvbiAocGFyc2VyLCBOVUxMKTsKLSAgICAgIG9wID0gZGVm YXVsdF9mdW5jdGlvbl9hcnJheV9yZWFkX2NvbnZlcnNpb24gKGV4cF9sb2Ms IG9wKTsKLSAgICAgIHJldHVybiBwYXJzZXJfYnVpbGRfdW5hcnlfb3AgKG9w X2xvYywgUFJFREVDUkVNRU5UX0VYUFIsIG9wKTsKKyAgICAgIC8qIElmIHRo ZSB1bmFyeSBleHByZXNzaW9uIGhhcyBhcnJheSBub3RhdGlvbnMsIHRoZW4g d2UgZXhwYW5kIHRoZW0uICAqLworICAgICAgaWYgKGZsYWdfZW5hYmxlX2Np bGtwbHVzICYmIFRSRUVfQ09ERSAob3AudmFsdWUpID09IEFSUkFZX05PVEFU SU9OX1JFRikKKwlyZXR1cm4gZml4X2FycmF5X25vdGF0aW9uX2V4cHIgKGV4 cF9sb2MsIFBSRURFQ1JFTUVOVF9FWFBSLCBvcCk7CisgICAgICBlbHNlCisJ eworCSAgb3AgPSBkZWZhdWx0X2Z1bmN0aW9uX2FycmF5X3JlYWRfY29udmVy c2lvbiAoZXhwX2xvYywgb3ApOworCSAgcmV0dXJuIHBhcnNlcl9idWlsZF91 bmFyeV9vcCAob3BfbG9jLCBQUkVERUNSRU1FTlRfRVhQUiwgb3ApOworCX0K ICAgICBjYXNlIENQUF9BTkQ6CiAgICAgICBjX3BhcnNlcl9jb25zdW1lX3Rv a2VuIChwYXJzZXIpOwogICAgICAgb3AgPSBjX3BhcnNlcl9jYXN0X2V4cHJl c3Npb24gKHBhcnNlciwgTlVMTCk7CkBAIC02ODg2LDEwICs2OTI5LDM1IEBA IGNfcGFyc2VyX3Bvc3RmaXhfZXhwcmVzc2lvbl9hZnRlcl9wcmltYXJ5IChj X3BhcnNlciAqcGFyc2VyLAogCWNhc2UgQ1BQX09QRU5fU1FVQVJFOgogCSAg LyogQXJyYXkgcmVmZXJlbmNlLiAgKi8KIAkgIGNfcGFyc2VyX2NvbnN1bWVf dG9rZW4gKHBhcnNlcik7Ci0JICBpZHggPSBjX3BhcnNlcl9leHByZXNzaW9u IChwYXJzZXIpLnZhbHVlOwotCSAgY19wYXJzZXJfc2tpcF91bnRpbF9mb3Vu ZCAocGFyc2VyLCBDUFBfQ0xPU0VfU1FVQVJFLAotCQkJCSAgICAgImV4cGVj dGVkICU8XSU+Iik7Ci0JICBleHByLnZhbHVlID0gYnVpbGRfYXJyYXlfcmVm IChvcF9sb2MsIGV4cHIudmFsdWUsIGlkeCk7CisJICBpZiAoZmxhZ19lbmFi bGVfY2lsa3BsdXMKKwkgICAgICAmJiBjX3BhcnNlcl9wZWVrX3Rva2VuIChw YXJzZXIpLT50eXBlID09IENQUF9DT0xPTikKKwkgICAgLyogSWYgd2UgYXJl IGhlcmUsIHRoZW53ZSBoYXZlIHNvbWV0aGluZyBsaWtlIHRoaXM6CisJICAg ICAgIEFycmF5IFsgOiBdCisJICAgICovCisJICAgIGV4cHIudmFsdWUgPSBj X3BhcnNlcl9hcnJheV9ub3RhdGlvbiAocGFyc2VyLCBOVUxMX1RSRUUsCisJ CQkJCQkgIGV4cHIudmFsdWUpOworCSAgZWxzZQorCSAgICB7CSAgICAgIAor CSAgICAgIGlkeCA9IGNfcGFyc2VyX2V4cHJlc3Npb24gKHBhcnNlcikudmFs dWU7CisJICAgICAgLyogSGVyZSB3ZSBoYXZlIDMgb3B0aW9uczoKKwkJIDEu IEFycmF5IFtFWFBSXSAtLSBOb3JtYWwgQXJyYXkgY2FsbC4KKwkJIDIuIEFy cmF5IFtFWFBSIDogRVhQUl0gLS0gQXJyYXkgbm90YXRpb24gd2l0aG91dCBz dHJpZGUuCisJCSAzLiBBcnJheSBbRVhQUiA6IEVYUFIgOiBFWFBSXSAtLSBB cnJheSBub3RhdGlvbiB3aXRoIHN0cmlkZS4KKworCQkgRm9yIDEsIHdlIGp1 c3QgaGFuZGxlIGl0IGp1c3QgbGlrZSBhIG5vcm1hbCBhcnJheSBleHByZXNz aW9uLgorCQkgRm9yIDIgYW5kIDMgd2UgaGFuZGxlIGl0IGxpa2Ugd2UgaGFu ZGxlIGFycmF5IG5vdGF0aW9ucy4gIFRoZQorCQkgaWR4IHZhbHVlIHdlIGhh dmUgYWJvdmUgYmVjb21lcyB0aGUgaW5pdGlhbC9zdGFydCBpbmRleC4KKwkg ICAgICAqLworCSAgICAgIGlmIChmbGFnX2VuYWJsZV9jaWxrcGx1cworCQkg ICYmIGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPnR5cGUgPT0gQ1BQ X0NPTE9OKQorCQlleHByLnZhbHVlID0gY19wYXJzZXJfYXJyYXlfbm90YXRp b24gKHBhcnNlciwgaWR4LCBleHByLnZhbHVlKTsKKwkgICAgICBlbHNlCisJ CXsKKwkJICBjX3BhcnNlcl9za2lwX3VudGlsX2ZvdW5kIChwYXJzZXIsIENQ UF9DTE9TRV9TUVVBUkUsCisJCQkJCSAgICAgImV4cGVjdGVkICU8XSU+Iik7 CisJCSAgZXhwci52YWx1ZSA9IGJ1aWxkX2FycmF5X3JlZiAob3BfbG9jLCBl eHByLnZhbHVlLCBpZHgpOworCQl9CisJICAgIH0KIAkgIGV4cHIub3JpZ2lu YWxfY29kZSA9IEVSUk9SX01BUks7CiAJICBleHByLm9yaWdpbmFsX3R5cGUg PSBOVUxMOwogCSAgYnJlYWs7CkBAIC02OTk0LDE4ICs3MDYyLDMyIEBAIGNf cGFyc2VyX3Bvc3RmaXhfZXhwcmVzc2lvbl9hZnRlcl9wcmltYXJ5IChjX3Bh cnNlciAqcGFyc2VyLAogCWNhc2UgQ1BQX1BMVVNfUExVUzoKIAkgIC8qIFBv c3RpbmNyZW1lbnQuICAqLwogCSAgY19wYXJzZXJfY29uc3VtZV90b2tlbiAo cGFyc2VyKTsKLQkgIGV4cHIgPSBkZWZhdWx0X2Z1bmN0aW9uX2FycmF5X3Jl YWRfY29udmVyc2lvbiAoZXhwcl9sb2MsIGV4cHIpOwotCSAgZXhwci52YWx1 ZSA9IGJ1aWxkX3VuYXJ5X29wIChvcF9sb2MsCi0JCQkJICAgICAgIFBPU1RJ TkNSRU1FTlRfRVhQUiwgZXhwci52YWx1ZSwgMCk7CisJICAvKiBJZiB0aGUg ZXhwcmVzc2lvbiBoYXMgYXJyYXkgbm90YXRpb25zLCB3ZSBleHBhbmQgdGhl bS4gICovCisJICBpZiAoZmxhZ19lbmFibGVfY2lsa3BsdXMKKwkgICAgICAm JiBUUkVFX0NPREUgKGV4cHIudmFsdWUpID09IEFSUkFZX05PVEFUSU9OX1JF RikKKwkgICAgZXhwciA9IGZpeF9hcnJheV9ub3RhdGlvbl9leHByIChleHBy X2xvYywgUE9TVElOQ1JFTUVOVF9FWFBSLCBleHByKTsKKwkgIGVsc2UKKwkg ICAgeworCSAgICAgIGV4cHIgPSBkZWZhdWx0X2Z1bmN0aW9uX2FycmF5X3Jl YWRfY29udmVyc2lvbiAoZXhwcl9sb2MsIGV4cHIpOworCSAgICAgIGV4cHIu dmFsdWUgPSBidWlsZF91bmFyeV9vcCAob3BfbG9jLAorCQkJCQkgICBQT1NU SU5DUkVNRU5UX0VYUFIsIGV4cHIudmFsdWUsIDApOworCSAgICB9CiAJICBl eHByLm9yaWdpbmFsX2NvZGUgPSBFUlJPUl9NQVJLOwogCSAgZXhwci5vcmln aW5hbF90eXBlID0gTlVMTDsKIAkgIGJyZWFrOwogCWNhc2UgQ1BQX01JTlVT X01JTlVTOgogCSAgLyogUG9zdGRlY3JlbWVudC4gICovCiAJICBjX3BhcnNl cl9jb25zdW1lX3Rva2VuIChwYXJzZXIpOwotCSAgZXhwciA9IGRlZmF1bHRf ZnVuY3Rpb25fYXJyYXlfcmVhZF9jb252ZXJzaW9uIChleHByX2xvYywgZXhw cik7Ci0JICBleHByLnZhbHVlID0gYnVpbGRfdW5hcnlfb3AgKG9wX2xvYywK LQkJCQkgICAgICAgUE9TVERFQ1JFTUVOVF9FWFBSLCBleHByLnZhbHVlLCAw KTsKKwkgIC8qIElmIHRoZSBleHByZXNzaW9uIGhhcyBhcnJheSBub3RhdGlv bnMsIHdlIGV4cGFuZCB0aGVtLiAgKi8KKwkgIGlmIChmbGFnX2VuYWJsZV9j aWxrcGx1cworCSAgICAgICYmIFRSRUVfQ09ERSAoZXhwci52YWx1ZSkgPT0g QVJSQVlfTk9UQVRJT05fUkVGKQorCSAgICBleHByID0gZml4X2FycmF5X25v dGF0aW9uX2V4cHIgKGV4cHJfbG9jLCBQT1NUREVDUkVNRU5UX0VYUFIsIGV4 cHIpOworCSAgZWxzZQorCSAgICB7CisJICAgICAgZXhwciA9IGRlZmF1bHRf ZnVuY3Rpb25fYXJyYXlfcmVhZF9jb252ZXJzaW9uIChleHByX2xvYywgZXhw cik7CisJICAgICAgZXhwci52YWx1ZSA9IGJ1aWxkX3VuYXJ5X29wIChvcF9s b2MsCisJCQkJCSAgIFBPU1RERUNSRU1FTlRfRVhQUiwgZXhwci52YWx1ZSwg MCk7CisJICAgIH0KIAkgIGV4cHIub3JpZ2luYWxfY29kZSA9IEVSUk9SX01B Uks7CiAJICBleHByLm9yaWdpbmFsX3R5cGUgPSBOVUxMOwogCSAgYnJlYWs7 CkBAIC0xMDg4OSw0ICsxMDk3MSwxMDIgQEAgY19wYXJzZV9maWxlICh2b2lk KQogICB0aGVfcGFyc2VyID0gTlVMTDsKIH0KIAorLyogVGhpcyBmdW5jdGlv biBwYXJzZXMgQ2lsayBQbHVzIGFycmF5IG5vdGF0aW9uLiAgVGhlIHN0YXJ0 aW5nIGluZGV4IGlzCisgICBwYXNzZWQgaW4gSU5JVElBTF9JTkRFWCBhbmQg dGhlIGFycmF5IG5hbWUgaXMgcGFzc2VzIGluIEFSUkFZX1ZBTFVFLiAgVGhl CisgICByZXR1cm4gdmFsdWUgb2YgdGhpcyBmdW5jdGlvbiBpcyBhIHRyZWVf bm9kZSBjYWxsZWQgVkFMVUVfVFJFRSBvZiB0eXBlCisgICBBUlJBWV9OT1RB VElPTl9SRUYuICAqLworCitzdGF0aWMgdHJlZSAKK2NfcGFyc2VyX2FycmF5 X25vdGF0aW9uIChjX3BhcnNlciAqcGFyc2VyLCB0cmVlIGluaXRpYWxfaW5k ZXgsIHRyZWUgYXJyYXlfdmFsdWUpCit7CisgIGNfdG9rZW4gKnRva2VuID0g TlVMTDsKKyAgdHJlZSBzdGFydF9pbmRleCA9IE5VTExfVFJFRSwgZW5kX2lu ZGV4ID0gTlVMTF9UUkVFLCBzdHJpZGUgPSBOVUxMX1RSRUU7CisgIHRyZWUg dmFsdWVfdHJlZSA9IE5VTExfVFJFRSwgdHlwZSA9IE5VTExfVFJFRSwgYXJy YXlfdHlwZSA9IE5VTExfVFJFRTsKKyAgdHJlZSBhcnJheV90eXBlX2RvbWFp biA9IE5VTExfVFJFRTsgCisgIGRvdWJsZV9pbnQgeDsKKworICBhcnJheV90 eXBlID0gVFJFRV9UWVBFIChhcnJheV92YWx1ZSk7CisgIGdjY19hc3NlcnQg KGFycmF5X3R5cGUpOworICB0eXBlID0gVFJFRV9UWVBFIChhcnJheV90eXBl KTsKKyAgdG9rZW4gPSBjX3BhcnNlcl9wZWVrX3Rva2VuIChwYXJzZXIpOwor ICAKKyAgaWYgKHRva2VuID09IE5VTEwpCisgICAgeworICAgICAgY19wYXJz ZXJfZXJyb3IgKHBhcnNlciwgImV4cGVjdGVkICU8OiU+IG9yIG51bWVyYWwi KTsKKyAgICAgIHJldHVybiB2YWx1ZV90cmVlOworICAgIH0KKyAgZWxzZSBp ZiAodG9rZW4tPnR5cGUgPT0gQ1BQX0NPTE9OKQorICAgIHsKKyAgICAgIGlm ICghaW5pdGlhbF9pbmRleCkKKwl7CisJICAvKiBJZiB3ZSBhcmUgaGVyZSwg dGhlbiB3ZSBoYXZlIGEgY2FzZSBsaWtlIHRoaXMgQVs6XS4gICovCisJICBj X3BhcnNlcl9jb25zdW1lX3Rva2VuIChwYXJzZXIpOworCSAgYXJyYXlfdHlw ZV9kb21haW4gPSBUWVBFX0RPTUFJTiAoYXJyYXlfdHlwZSk7CisJICBnY2Nf YXNzZXJ0IChhcnJheV90eXBlX2RvbWFpbik7CisJICBzdGFydF9pbmRleCA9 IFRZUEVfTUlOVkFMIChhcnJheV90eXBlX2RvbWFpbik7CisJICBzdGFydF9p bmRleCA9IGZvbGRfYnVpbGQxIChDT05WRVJUX0VYUFIsIGludGVnZXJfdHlw ZV9ub2RlLAorCQkJCSAgICAgc3RhcnRfaW5kZXgpOworCSAgeCA9IFRSRUVf SU5UX0NTVCAoVFlQRV9NQVhWQUwgKGFycmF5X3R5cGVfZG9tYWluKSk7CisJ ICB4LmxvdysrOworCSAgZW5kX2luZGV4ID0gZG91YmxlX2ludF90b190cmVl IChpbnRlZ2VyX3R5cGVfbm9kZSwgeCk7CisJICAKKwkgIGlmICh0cmVlX2lu dF9jc3RfbHQgKGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAoZW5kX2luZGV4 KSwgMCksCisJCQkgICAgICAgZW5kX2luZGV4KSkKKwkgICAgc3RyaWRlID0g YnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChzdGFydF9pbmRleCksIDEpOwor CSAgZWxzZQorCSAgICBzdHJpZGUgPSBidWlsZF9pbnRfY3N0IChUUkVFX1RZ UEUgKHN0YXJ0X2luZGV4KSwgLTEpOworCX0KKyAgICAgIGVsc2UgaWYgKGlu aXRpYWxfaW5kZXggIT0gZXJyb3JfbWFya19ub2RlKQorCXsKKwkgIC8qIElm IHdlIGFyZSBoZXJlLCB0aGVuIHRoZXJlIHNob3VsZCBiZSAyIHBvc3NpYmls aXRpZXM6CisJICAgICAxLiBBcnJheSBbRVhQUiA6IEVYUFJdCisJICAgICAy LiBBcnJheSBbRVhQUiA6IEVYUFIgOiBFWFBSXQorCSAgKi8KKwkgIHN0YXJ0 X2luZGV4ID0gaW5pdGlhbF9pbmRleDsKKworCSAgY19wYXJzZXJfY29uc3Vt ZV90b2tlbiAocGFyc2VyKTsgLyogY29uc3VtZSB0aGUgJzonICovCisJICBl bmRfaW5kZXggPSBjX3BhcnNlcl9leHByZXNzaW9uIChwYXJzZXIpLnZhbHVl OworCSAgaWYgKCFlbmRfaW5kZXggfHwgZW5kX2luZGV4ID09IGVycm9yX21h cmtfbm9kZSkKKwkgICAgeworCSAgICAgIGNfcGFyc2VyX3NraXBfdG9fZW5k X29mX2Jsb2NrX29yX3N0YXRlbWVudCAocGFyc2VyKTsKKwkgICAgICByZXR1 cm4gZXJyb3JfbWFya19ub2RlOworCSAgICB9CisJICBpZiAoY19wYXJzZXJf cGVla190b2tlbiAocGFyc2VyKS0+dHlwZSA9PSBDUFBfQ09MT04pCisJICAg IHsKKwkgICAgICBjX3BhcnNlcl9jb25zdW1lX3Rva2VuIChwYXJzZXIpOwor CSAgICAgIHN0cmlkZSA9IGNfcGFyc2VyX2V4cHJlc3Npb24gKHBhcnNlciku dmFsdWU7CisJICAgICAgaWYgKCFzdHJpZGUgfHwgc3RyaWRlID09IGVycm9y X21hcmtfbm9kZSkKKwkJeworCQkgIGNfcGFyc2VyX3NraXBfdG9fZW5kX29m X2Jsb2NrX29yX3N0YXRlbWVudCAocGFyc2VyKTsKKwkJICByZXR1cm4gZXJy b3JfbWFya19ub2RlOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgaWYg KFRSRUVfQ09OU1RBTlQgKHN0YXJ0X2luZGV4KSAmJiBUUkVFX0NPTlNUQU5U IChlbmRfaW5kZXgpCisJCSYmIHRyZWVfaW50X2NzdF9sdCAoZW5kX2luZGV4 LCBzdGFydF9pbmRleCkpCisJICAgICAgc3RyaWRlID0gYnVpbGRfaW50X2Nz dCAoVFJFRV9UWVBFIChzdGFydF9pbmRleCksIC0xKTsKKwkgICAgZWxzZQor CSAgICAgIHN0cmlkZSA9IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAoc3Rh cnRfaW5kZXgpLCAxKTsKKwl9CisgICAgICBlbHNlCisJY19wYXJzZXJfZXJy b3IgKHBhcnNlciwgImV4cGVjdGVkIGFycmF5IG5vdGF0aW9uIGV4cHJlc3Np b24iKTsKKyAgICB9CisgIGVsc2UKKyAgICBjX3BhcnNlcl9lcnJvciAocGFy c2VyLCAiZXhwZWN0ZWQgYXJyYXkgbm90YXRpb24gZXhwcmVzc2lvbiIpOwor ICAKKyAgY19wYXJzZXJfc2tpcF91bnRpbF9mb3VuZCAocGFyc2VyLCBDUFBf Q0xPU0VfU1FVQVJFLCAiZXhwZWN0ZWQgJTxdJT4iKTsKKyAgICAKKworICB2 YWx1ZV90cmVlID0gYnVpbGQ1IChBUlJBWV9OT1RBVElPTl9SRUYsIE5VTExf VFJFRSwgTlVMTF9UUkVFLCBOVUxMX1RSRUUsCisJCSAgICAgICBOVUxMX1RS RUUsIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKKyAgQVJSQVlfTk9UQVRJT05f QVJSQVkgKHZhbHVlX3RyZWUpID0gYXJyYXlfdmFsdWU7CisgIEFSUkFZX05P VEFUSU9OX1NUQVJUICh2YWx1ZV90cmVlKSA9IHN0YXJ0X2luZGV4OworICBB UlJBWV9OT1RBVElPTl9MRU5HVEggKHZhbHVlX3RyZWUpID0gZW5kX2luZGV4 OworICBBUlJBWV9OT1RBVElPTl9TVFJJREUgKHZhbHVlX3RyZWUpID0gc3Ry aWRlOworICBBUlJBWV9OT1RBVElPTl9UWVBFICh2YWx1ZV90cmVlKSA9IHR5 cGU7CisKKyAgVFJFRV9UWVBFICh2YWx1ZV90cmVlKSA9IHR5cGU7CisgIHJl dHVybiB2YWx1ZV90cmVlOworfQorCiAjaW5jbHVkZSAiZ3QtYy1jLXBhcnNl ci5oIgpkaWZmIC0tZ2l0IGEvZ2NjL2MvYy10eXBlY2suYyBiL2djYy9jL2Mt dHlwZWNrLmMKaW5kZXggNWI0YWQyOC4uNTA3NDM5OCAxMDA2NDQKLS0tIGEv Z2NjL2MvYy10eXBlY2suYworKysgYi9nY2MvYy9jLXR5cGVjay5jCkBAIC0x MTIsNiArMTEyLDggQEAgc3RhdGljIHZvaWQgcmVhZG9ubHlfd2FybmluZyAo dHJlZSwgZW51bSBsdmFsdWVfdXNlKTsKIHN0YXRpYyBpbnQgbHZhbHVlX29y X2Vsc2UgKGxvY2F0aW9uX3QsIGNvbnN0X3RyZWUsIGVudW0gbHZhbHVlX3Vz ZSk7CiBzdGF0aWMgdm9pZCByZWNvcmRfbWF5YmVfdXNlZF9kZWNsICh0cmVl KTsKIHN0YXRpYyBpbnQgY29tcHR5cGVzX2ludGVybmFsIChjb25zdF90cmVl LCBjb25zdF90cmVlLCBib29sICosIGJvb2wgKik7CitleHRlcm4gYm9vbCBj b250YWluc19hcnJheV9ub3RhdGlvbl9leHByICh0cmVlKTsKKwogDAogLyog UmV0dXJuIHRydWUgaWYgRVhQIGlzIGEgbnVsbCBwb2ludGVyIGNvbnN0YW50 LCBmYWxzZSBvdGhlcndpc2UuICAqLwogCkBAIC0yOTUzLDYgKzI5NTUsMTMg QEAgY29udmVydF9hcmd1bWVudHMgKHRyZWUgdHlwZWxpc3QsIFZFQyh0cmVl LGdjKSAqdmFsdWVzLAogICAgICAgYm9vbCBucGM7CiAgICAgICB0cmVlIHBh cm12YWw7CiAKKyAgICAgIC8qIElmIGFycmF5IG5vdGF0aW9ucyBhcmUgdXNl ZCwgdGhlbiB3ZSBkbyBub3Qgd29ycnkgYWJvdXQgdGhpcyBub3cuICBXZQor CSB3aWxsIHRha2UgY2FyZSBvZiB0aGVtIGxhdGVyLiAgKi8KKyAgICAgIGlm IChmbGFnX2VuYWJsZV9jaWxrcGx1cworCSAgJiYgKGNvbnRhaW5zX2FycmF5 X25vdGF0aW9uX2V4cHIgKHZhbCkKKwkgICAgICB8fCBjb250YWluc19hcnJh eV9ub3RhdGlvbl9leHByIChmdW5kZWNsKSkpCisJY29udGludWU7CisgICAg ICAKICAgICAgIGlmICh0eXBlID09IHZvaWRfdHlwZV9ub2RlKQogCXsKIAkg IGlmIChzZWxlY3RvcikKQEAgLTMxOTIsMTAgKzMyMDEsMTkgQEAgY29udmVy dF9hcmd1bWVudHMgKHRyZWUgdHlwZWxpc3QsIFZFQyh0cmVlLGdjKSAqdmFs dWVzLAogCiAgIGlmICh0eXBldGFpbCAhPSAwICYmIFRSRUVfVkFMVUUgKHR5 cGV0YWlsKSAhPSB2b2lkX3R5cGVfbm9kZSkKICAgICB7Ci0gICAgICBlcnJv cl9hdCAoaW5wdXRfbG9jYXRpb24sCi0JCSJ0b28gZmV3IGFyZ3VtZW50cyB0 byBmdW5jdGlvbiAlcUUiLCBmdW5jdGlvbik7Ci0gICAgICBpbmZvcm1fZGVj bGFyYXRpb24gKGZ1bmRlY2wpOwotICAgICAgcmV0dXJuIC0xOworICAgICAg LyogSWYgYXJyYXkgbm90YXRpb24gaXMgdXNlZCBhbmQgQ2lsayBQbHVzIGlz IGVuYWJsZWQsIHRoZW4gd2UgZG8gbm90CisJIHdvcnJ5IGFib3V0IHRoaXMg ZXJyb3Igbm93LiAgV2Ugd2lsbCBoYW5kbGUgdGhlbSBpbiBhIGxhdGVyIHBs YWNlLiAgKi8KKyAgICAgIGlmIChmbGFnX2VuYWJsZV9jaWxrcGx1cworCSAg JiYgKGNvbnRhaW5zX2FycmF5X25vdGF0aW9uX2V4cHIgKGZ1bmN0aW9uKQor CSAgICAgIHx8IGNvbnRhaW5zX2FycmF5X25vdGF0aW9uX2V4cHIgKGJ1aWxk X3RyZWVfbGlzdF92ZWMgKHZhbHVlcykpKSkKKwk7CisgICAgICBlbHNlCisJ eworCSAgZXJyb3JfYXQgKGlucHV0X2xvY2F0aW9uLAorCQkgICAgInRvbyBm ZXcgYXJndW1lbnRzIHRvIGZ1bmN0aW9uICVxRSIsIGZ1bmN0aW9uKTsKKwkg IGluZm9ybV9kZWNsYXJhdGlvbiAoZnVuZGVjbCk7CisJICByZXR1cm4gLTE7 CisJfQogICAgIH0KIAogICByZXR1cm4gZXJyb3JfYXJncyA/IC0xIDogKGlu dCkgcGFybW51bTsKQEAgLTUxMDgsNiArNTEyNiw5IEBAIGNvbnZlcnRfZm9y X2Fzc2lnbm1lbnQgKGxvY2F0aW9uX3QgbG9jYXRpb24sIHRyZWUgdHlwZSwg dHJlZSByaHMsCiAgIHRyZWUgcm5hbWUgPSBOVUxMX1RSRUU7CiAgIGJvb2wg b2JqY19vayA9IGZhbHNlOwogCisgIC8qIFdlIHdpbGwgYnJlYWsgdXAgYXJy YXkgbm90YXRpb25zIGluIGEgbGF0ZXIgcGxhY2UuICAqLworICBpZiAoZmxh Z19lbmFibGVfY2lsa3BsdXMgJiYgY29udGFpbnNfYXJyYXlfbm90YXRpb25f ZXhwciAocmhzKSkKKyAgICByZXR1cm4gcmhzOwogICBpZiAoZXJydHlwZSA9 PSBpY19hcmdwYXNzKQogICAgIHsKICAgICAgIHRyZWUgc2VsZWN0b3I7CkBA IC01NjU0LDE2ICs1Njc1LDIwIEBAIGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQg KGxvY2F0aW9uX3QgbG9jYXRpb24sIHRyZWUgdHlwZSwgdHJlZSByaHMsCiAJ IG9yIG9uZSB0aGF0IHJlc3VsdHMgZnJvbSBhcml0aG1ldGljLCBldmVuIGlu Y2x1ZGluZwogCSBhIGNhc3QgdG8gaW50ZWdlciB0eXBlLiAgKi8KICAgICAg IGlmICghbnVsbF9wb2ludGVyX2NvbnN0YW50KQotCVdBUk5fRk9SX0FTU0lH Tk1FTlQgKGxvY2F0aW9uLCAwLAotCQkJICAgICBHXygicGFzc2luZyBhcmd1 bWVudCAlZCBvZiAlcUUgbWFrZXMgIgotCQkJCSJwb2ludGVyIGZyb20gaW50 ZWdlciB3aXRob3V0IGEgY2FzdCIpLAotCQkJICAgICBHXygiYXNzaWdubWVu dCBtYWtlcyBwb2ludGVyIGZyb20gaW50ZWdlciAiCi0JCQkJIndpdGhvdXQg YSBjYXN0IiksCi0JCQkgICAgIEdfKCJpbml0aWFsaXphdGlvbiBtYWtlcyBw b2ludGVyIGZyb20gIgotCQkJCSJpbnRlZ2VyIHdpdGhvdXQgYSBjYXN0Iiks Ci0JCQkgICAgIEdfKCJyZXR1cm4gbWFrZXMgcG9pbnRlciBmcm9tIGludGVn ZXIgIgotCQkJCSJ3aXRob3V0IGEgY2FzdCIpKTsKLQorCXsKKwkgIGlmIChm bGFnX2VuYWJsZV9jaWxrcGx1cyAmJiBjb250YWluc19hcnJheV9ub3RhdGlv bl9leHByIChyaHMpKQorCSAgICA7CisJICBlbHNlCisJICAgIFdBUk5fRk9S X0FTU0lHTk1FTlQgKGxvY2F0aW9uLCAwLAorCQkJCSBHXygicGFzc2luZyBh cmd1bWVudCAlZCBvZiAlcUUgbWFrZXMgIgorCQkJCSAgICAicG9pbnRlciBm cm9tIGludGVnZXIgd2l0aG91dCBhIGNhc3QiKSwKKwkJCQkgR18oImFzc2ln bm1lbnQgbWFrZXMgcG9pbnRlciBmcm9tIGludGVnZXIgIgorCQkJCSAgICAi d2l0aG91dCBhIGNhc3QiKSwKKwkJCQkgR18oImluaXRpYWxpemF0aW9uIG1h a2VzIHBvaW50ZXIgZnJvbSAiCisJCQkJICAgICJpbnRlZ2VyIHdpdGhvdXQg YSBjYXN0IiksCisJCQkJIEdfKCJyZXR1cm4gbWFrZXMgcG9pbnRlciBmcm9t IGludGVnZXIgIgorCQkJCSAgICAid2l0aG91dCBhIGNhc3QiKSk7CisJfQog ICAgICAgcmV0dXJuIGNvbnZlcnQgKHR5cGUsIHJocyk7CiAgICAgfQogICBl bHNlIGlmIChjb2RlbCA9PSBJTlRFR0VSX1RZUEUgJiYgY29kZXIgPT0gUE9J TlRFUl9UWVBFKQpkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9nZW5lcmljLnRleGkg Yi9nY2MvZG9jL2dlbmVyaWMudGV4aQppbmRleCBjNDhiNjYzLi44OTYzMTQ3 IDEwMDY0NAotLS0gYS9nY2MvZG9jL2dlbmVyaWMudGV4aQorKysgYi9nY2Mv ZG9jL2dlbmVyaWMudGV4aQpAQCAtMTEyNCw2ICsxMTI0LDcgQEAgdGFyZ2V0 IHN5c3RlbSBieXRlcyBhcmUgbm90IHRoZSBzYW1lIHdpZHRoIGFzIGhvc3Qg c3lzdGVtIGJ5dGVzLgogQHRpbmRleCBJTkRJUkVDVF9SRUYKIEB0aW5kZXgg TUVNX1JFRgogQHRpbmRleCBBUlJBWV9SRUYKK0B0aW5kZXggQVJSQVlfTk9U QVRJT05fUkVGCiBAdGluZGV4IEFSUkFZX1JBTkdFX1JFRgogQHRpbmRleCBU QVJHRVRfTUVNX1JFRgogQHRpbmRleCBDT01QT05FTlRfUkVGCkBAIC0xMTM5 LDYgKzExNDAsMTUgQEAgdG8gcmVwcmVzZW50IHRoZSBsb3dlciBib3VuZCBh bmQgY29tcG9uZW50IHNpemUgYnV0IHNob3VsZCBub3QgYmUgdXNlZAogZGly ZWN0bHk7IGNhbGwgQGNvZGV7YXJyYXlfcmVmX2xvd19ib3VuZH0gYW5kIEBj b2Rle2FycmF5X3JlZl9lbGVtZW50X3NpemV9CiBpbnN0ZWFkLgogCitAaXRl bSBBUlJBWV9OT1RBVElPTl9SRUYKK1RoZXNlIG5vZGVzIHJlcHJlc2VudCBh cnJheSBub3RhdGlvbiBleHByZXNzaW9ucyB0aGF0IGFyZSBwYXJ0IG9mIHRo ZSBDaWxrIFBsdXMKK2xhbmd1YWdlIGV4dGVuc2lvbnMgKGVuYWJsZWQgYnkg QG9wdGlvbnstZmNpbGtwbHVzfSBmbGFnKS4gIFRoZSBmaXJzdCBvcGVyYW5k IAoraXMgdGhlIGFycmF5LiAgU2Vjb25kLCB0aGlyZCBhbmQgZm91cnRoIG9w ZXJhbmRzIGFyZSB0aGUgc3RhcnQtaW5kZXgsIG51bWJlciBvZgorZWxlbWVu dHMgYWNjZXNzZWQgKGFsc28gY2FsbGVkIGxlbmd0aCkgYW5kIHRoZSBzdHJp ZGUsIHJlc3BlY3RpdmVseS4gIFRoZSAKK2ZpZnRoIG9wZXJhbmQgaG9sZHMg dGhlIGFycmF5IHR5cGUuICBBcm91bmQgdGhlIGVuZCBvZiB0aGUgcGFyc2lu ZyBzdGFnZSwgCit0aGVzZSBhcnJheSBub3RhdGlvbnMgYXJlIGJyb2tlbiB1 cCBpbnRvIGFycmF5IHJlZmVyZW5jZXMgKEBjb2Rle0FSUkFZX1JFRn0pCitl bmNsb3NlZCBpbnNpZGUgYSBsb29wIGl0ZXJhdGluZyBmcm9tIDAgdG8gdGhl IG51bWJlciBvZiBlbGVtZW50cyBhY2Nlc3NlZC4KKwogQGl0ZW0gQVJSQVlf UkFOR0VfUkVGCiBUaGVzZSBub2RlcyByZXByZXNlbnQgYWNjZXNzIHRvIGEg cmFuZ2UgKG9yIGBgc2xpY2UnJykgb2YgYW4gYXJyYXkuICBUaGUKIG9wZXJh bmRzIGFyZSB0aGUgc2FtZSBhcyB0aGF0IGZvciBAY29kZXtBUlJBWV9SRUZ9 IGFuZCBoYXZlIHRoZSBzYW1lCmRpZmYgLS1naXQgYS9nY2MvZG9jL2ludm9r ZS50ZXhpIGIvZ2NjL2RvYy9pbnZva2UudGV4aQppbmRleCAyOTdiNjUxLi44 MjFjOTgzIDEwMDY0NAotLS0gYS9nY2MvZG9jL2ludm9rZS50ZXhpCisrKyBi L2djYy9kb2MvaW52b2tlLnRleGkKQEAgLTE3NzcsNiArMTc3NywxNyBAQCBQ cm9ncmFtIEludGVyZmFjZSB2My4wIEB3e0B1cmVme2h0dHA6Ly93d3cub3Bl bm1wLm9yZy99fS4gIFRoaXMgb3B0aW9uCiBpbXBsaWVzIEBvcHRpb257LXB0 aHJlYWR9LCBhbmQgdGh1cyBpcyBvbmx5IHN1cHBvcnRlZCBvbiB0YXJnZXRz IHRoYXQKIGhhdmUgc3VwcG9ydCBmb3IgQG9wdGlvbnstcHRocmVhZH0uCiAK K0BpdGVtIC1mY2lsa3BsdXMKK0BvcGluZGV4IGZsYWdfZW5hYmxlX2NpbGtw bHVzCitAY2luZGV4IEVuYWJsZSBDaWxrIFBsdXMKK0VuYWJsZSB0aGUgdXNh Z2Ugb2YgQ2lsayBMYW5ndWFnZSBleHRlbnNpb24gZmVhdHVyZXMgZm9yIEMv QysrLiAgV2hlbiB0aGUgZmxhZworQG9wdGlvbnstZmNpbGtwbHVzfSBpcyBz cGVjaWZpZWQsIGFsbCB0aGUgQ2lsayBQbHVzIGNvbXBvbmVudHMgYXJlIGNv bnZlcnRlZCAKK3RvIHRoZSBhcHByb3ByaWF0ZSBDL0MrKyBjb2RlLiAgVGhl IHByZXNlbnQgaW1wbGVtZW50YXRpb24gZm9sbG93cyBBQkkgdmVyc2lvbiAK KzAuOS4gIFRoZXJlIGFyZSBmb3VyIG1ham9yIHBhcnRzIHRvIENpbGsgUGx1 cyBsYW5ndWFnZSAKK2V4dGVuc2lvbjogQXJyYXkgTm90YXRpb25zLCBDaWxr IEtleXdvcmRzLCBTSU1EIGFubm90YXRpb25zIGFuZCBlbGVtZW50YWwgCitm dW5jdGlvbnMuICBEZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBDaWxrIFBs dXMgY2FuIGJlIGZvdW5kIGF0IAorQHd7QHVyZWZ7aHR0cDovL3d3dy5jaWxr LmNvbX19LiAKKwogQGl0ZW0gLWZnbnUtdG0KIEBvcGluZGV4IGZnbnUtdG0K IFdoZW4gdGhlIG9wdGlvbiBAb3B0aW9uey1mZ251LXRtfSBpcyBzcGVjaWZp ZWQsIHRoZSBjb21waWxlcgpkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9wYXNzZXMu dGV4aSBiL2djYy9kb2MvcGFzc2VzLnRleGkKaW5kZXggODMyOWRkZC4uY2Nk NzNhYyAxMDA2NDQKLS0tIGEvZ2NjL2RvYy9wYXNzZXMudGV4aQorKysgYi9n Y2MvZG9jL3Bhc3Nlcy50ZXhpCkBAIC0xOSw2ICsxOSw3IEBAIHdoZXJlIG5l YXIgY29tcGxldGUuCiAKIEBtZW51CiAqIFBhcnNpbmcgcGFzczo6ICAgICAg ICAgVGhlIGxhbmd1YWdlIGZyb250IGVuZCB0dXJucyB0ZXh0IGludG8gYml0 cy4KKyogQ2lsayBQbHVzIFRyYW5zZm9ybWF0aW9uOjogVHJhbnNmb3JtIENp bGsgUGx1cyBDb2RlIHRvIGVxdWl2YWxlbnQgQy9DKysuCiAqIEdpbXBsaWZp Y2F0aW9uIHBhc3M6OiAgVGhlIGJpdHMgYXJlIHR1cm5lZCBpbnRvIHNvbWV0 aGluZyB3ZSBjYW4gb3B0aW1pemUuCiAqIFBhc3MgbWFuYWdlcjo6ICAgICAg ICAgU2VxdWVuY2luZyB0aGUgb3B0aW1pemF0aW9uIHBhc3Nlcy4KICogVHJl ZSBTU0EgcGFzc2VzOjogICAgICBPcHRpbWl6YXRpb25zIG9uIGEgaGlnaC1s ZXZlbCByZXByZXNlbnRhdGlvbi4KQEAgLTEwMyw2ICsxMDQsMzggQEAgdGhh dCBpcyBtb3JlIGRlc2NyaXB0aXZlIHRoYW4gInJlc3Rfb2YiLgogVGhlIG1p ZGRsZS1lbmQgd2lsbCwgYXQgaXRzIG9wdGlvbiwgZW1pdCB0aGUgZnVuY3Rp b24gYW5kIGRhdGEKIGRlZmluaXRpb25zIGltbWVkaWF0ZWx5IG9yIHF1ZXVl IHRoZW0gZm9yIGxhdGVyIHByb2Nlc3NpbmcuCiAKK0Bub2RlIENpbGsgUGx1 cyBUcmFuc2Zvcm1hdGlvbgorQHNlY3Rpb24gQ2lsayBQbHVzIFRyYW5zZm9y bWF0aW9uCitAY2luZGV4IENJTEtfUExVUworCitJZiBDaWxrIFBsdXMgZ2Vu ZXJhdGlvbiAoZmxhZyBAb3B0aW9uey1mY2lsa3BsdXN9KSBpcyBlbmFibGVk LCBhbGwgdGhlIENpbGsgCitQbHVzIGNvZGUgaXMgdHJhbnNmb3JtZWQgaW50 byBlcXVpdmFsZW50IEMgYW5kIEMrKyBmdW5jdGlvbnMuICBJbiBhZGRpdGlv biwgYWxsCit0aGUgbmVjZXNzYXJ5IGZ1bmN0aW9uIGNhbGxzIHRvIHRoZSBD aWxrIHJ1bnRpbWUgbGlicmFyeQorKGxvY2F0ZWQgaW4gbGliY2lsa3J0cyBk aXJlY3RvcnkpIGFyZSBpbnNlcnRlZCAob25seSB1c2VkIGJ5IENpbGsga2V5 d29yZHMpLiAgCitNYWpvcml0eSBvZiB0aGlzIHRyYW5zZm9ybWF0aW9uIG9j Y3VycyB0b3dhcmQgdGhlIGVuZCBvZiB0aGUgcGFyc2luZyBhbmQgCityaWdo dCBiZWZvcmUgdGhlIGdpbXBsaWZpY2F0aW9uIHBhc3MuICAKKworVGhlc2Ug YXJlIHRoZSBtYWpvciBjb21wb25lbnRzIHRvIHRoZSBDaWxrIFBsdXMgbGFu Z3VhZ2UgZXh0ZW5zaW9uOgorQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0gQXJy YXkgTm90YXRpb25zOgorRHVyaW5nIHBhcnNpbmcgcGhhc2UsIGFsbCB0aGUg YXJyYXkgbm90YXRpb24gc3BlY2lmaWMgaW5mb3JtYXRpb24gaXMgc3RvcmVk IGluIAorQGNvZGV7QVJSQVlfTk9UQVRJT05fUkVGfSB0cmVlIHVzaW5nIHRo ZSBmdW5jdGlvbiAKK0Bjb2Rle2NfcGFyc2VyX2FycmF5X25vdGF0aW9ufS4g IER1cmluZyB0aGUgZW5kIG9mIHBhcnNpbmcsIHdlIGNoZWNrIHRoZSBlbnRp cmUKK2Z1bmN0aW9uIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGFycmF5IG5v dGF0aW9uIHNwZWNpZmljIGNvZGUgKHVzaW5nIHRoZSAKK2Z1bmN0aW9uIEBj b2Rle2NvbnRhaW5zX2FycmF5X25vdGF0aW9uX2V4cHJ9KS4gIElmIHRoaXMg ZnVuY3Rpb24gcmV0dXJucyAKK3RydWUsIHRoZW4gd2UgZXhwYW5kIHRoZW0g dXNpbmcgZWl0aGVyIEBjb2Rle2V4cGFuZF9hcnJheV9ub3RhdGlvbl9leHBy c30gb3IKK0Bjb2Rle2J1aWxkX2FycmF5X25vdGF0aW9uX2V4cHJ9LiAgRm9y IHRoZSBjYXNlcyB3aGVyZSBhcnJheSBub3RhdGlvbnMgYXJlIAoraW5zaWRl IGNvbmRpdGlvbnMsIHRoZXkgYXJlIHRyYW5zZm9ybWVkIHVzaW5nIHRoZSBm dW5jdGlvbiAKK0Bjb2Rle2ZpeF9jb25kaXRpb25hbF9hcnJheV9ub3RhdGlv bnN9LiAgVGhlIEMgbGFuZ3VhZ2Utc3BlY2lmaWMgcm91dGluZXMgYXJlIAor bG9jYXRlZCBpbiBAZmlsZXtjL2MtYXJyYXktbm90YXRpb24uY30gYW5kIHRo ZSBlcXVpdmFsZW50IEMrKyByb3V0aW5lcyBhcmUgaW4gCitmaWxlIEBmaWxl e2NwL2NwLWFycmF5LW5vdGF0aW9uLmN9LiAgQ29tbW9uIHJvdXRpbmVzIHN1 Y2ggYXMgZnVuY3Rpb25zIHRvIAoraW5pdGlhbGl6ZSBidWlsdGluIGZ1bmN0 aW9ucyBhcmUgc3RvcmVkIGluIEBmaWxle2FycmF5LW5vdGF0aW9uLWNvbW1v bi5jfS4KK0BlbmQgaXRlbWl6ZQorCitEZXRhaWxlZCBpbmZvcm1hdGlvbiBh Ym91dCBDaWxrIFBsdXMgYW5kIGxhbmd1YWdlIHNwZWNpZmljYXRpb24gaXMg cHJvdmlkZWQgaW4gCitAd3tAdXJlZntodHRwOi8vd3d3LmNpbGsuY29tL319 LiAgSXQgaXMgd29ydGggbWVudGlvbmluZyB0aGF0IHRoZSBjdXJyZW50IAor aW1wbGVtZW50YXRpb24gZm9sbG93cyBBQkkgMC45LgorCiBAbm9kZSBHaW1w bGlmaWNhdGlvbiBwYXNzCiBAc2VjdGlvbiBHaW1wbGlmaWNhdGlvbiBwYXNz CiAKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1 cy9hcnJheV9ub3RhdGlvbi9jb21waWxlL2FycmF5X3Rlc3QxLmMgYi9nY2Mv dGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vY29t cGlsZS9hcnJheV90ZXN0MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjBjNWQ3NDIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vY29tcGls ZS9hcnJheV90ZXN0MS5jCkBAIC0wLDAgKzEsNzQgQEAKKyNpbmNsdWRlIDxz dGRpby5oPgoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorewor ICBpbnQgYXJyYXlbMTBdLCBpaSA9IDAsIHggPSAyLCB6PSAwICwgeSA9IDAg OworCisgIGlmIChhcmdjIDwgMikKKyAgICB7CisgICAgICBmcHJpbnRmKHN0 ZGVyciwiVXNhZ2U6JXMgPE5VTUJFUj5cbiIsIGFyZ3ZbMF0pOworICAgICAg cmV0dXJuIC0xOworICAgIH0KKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlp KyspCisgICAgYXJyYXlbaWldID0gMTA7CisKKyAgYXJyYXlbMDoxMDoxXSA9 IDE1OworCisgIHByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PVxuIik7CisgIGZvciAoaWkgPSAwOyBpaTwx MDsgaWkrKykKKyAgICBwcmludGYoImFycmF5WyUyZF0gPSAlMmRcbiIsIGlp LCBhcnJheVtpaV0pOworCisgIGFycmF5WzA6MTA6Ml0gPSAyMDsKKworICBw cmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT1cbiIpOworICBmb3IgKGlpID0gMDsgaWk8MTA7IGlpKyspCisg ICAgcHJpbnRmKCJhcnJheVslMmRdID0gJTJkXG4iLCBpaSwgYXJyYXlbaWld KTsKKworCisgIHggPSBhdG9pKGFyZ3ZbMV0pOworICB6ID0gKDEwLWF0b2ko YXJndlsxXSkpL2F0b2koYXJndlsxXSk7CisgIHByaW50ZigiPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7Cisg IHByaW50ZigieCA9ICUyZFx0eiA9ICUyZFxuIiwgeCwgeik7CisgIGFycmF5 W3g6NTp6XSA9IDUwOworICBmb3IgKGlpID0gMDsgaWk8MTA7IGlpKyspCisg ICAgcHJpbnRmKCJhcnJheVslMmRdID0gJTJkXG4iLCBpaSwgYXJyYXlbaWld KTsKKworICB4ID0gYXRvaShhcmd2WzFdKTsKKyAgeiA9ICgxMC1hdG9pKGFy Z3ZbMV0pKS9hdG9pKGFyZ3ZbMV0pOworICB5ID0gMTAtYXRvaShhcmd2WzFd KTsKKyAgcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09XG4iKTsKKyAgcHJpbnRmKCJ4ID0gJTJkXHR5ID0g JTJkXHR6ID0gJTJkXG4iLCB4LCB5LCB6KTsKKyAgYXJyYXlbeDp5OnpdID0g NTA1OworICBmb3IgKGlpID0gMDsgaWk8MTA7IGlpKyspCisgICAgcHJpbnRm KCJhcnJheVslMmRdID0gJTJkXG4iLCBpaSwgYXJyYXlbaWldKTsKKworICB4 ID0gYXRvaShhcmd2WzFdKTsKKyAgeiA9ICgxMC1hdG9pKGFyZ3ZbMV0pKS9h dG9pKGFyZ3ZbMV0pOworICB5ID0gMTAtYXRvaShhcmd2WzFdKTsKKyAgcHJp bnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09XG4iKTsKKyAgcHJpbnRmKCJ4ID0gJTJkXHR5ID0gJTJkXHR6ID0g JTJkXG4iLCB4LCB5LCB6KTsKKyAgYXJyYXlbeDp5OigoMTAtYXRvaShhcmd2 WzFdKSkvYXRvaShhcmd2WzFdKSldID0gMjU7CisgIGZvciAoaWkgPSAwOyBp aTwxMDsgaWkrKykKKyAgICBwcmludGYoImFycmF5WyUyZF0gPSAlMmRcbiIs IGlpLCBhcnJheVtpaV0pOworCisgIHggPSBhdG9pKGFyZ3ZbMV0pOworICB6 ID0gKDEwLWF0b2koYXJndlsxXSkpL2F0b2koYXJndlsxXSk7CisgIHkgPSAx MC1hdG9pKGFyZ3ZbMV0pOworICBwcmludGYoIj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworICBwcmludGYo InggPSAlMmRcdHkgPSAlMmRcdHogPSAlMmRcbiIsIHgsIHksIHopOworICBh cnJheVthdG9pKGFyZ3ZbMV0pOigxMC1hdG9pKGFyZ3ZbMV0pKTooKDEwLWF0 b2koYXJndlsxXSkpL2F0b2koYXJndlsxXSkpXSA9CisJCQkJCSAxNDAwOwor ICBmb3IgKGlpID0gMDsgaWk8MTA7IGlpKyspCisgICAgcHJpbnRmKCJhcnJh eVslMmRdID0gJTJkXG4iLCBpaSwgYXJyYXlbaWldKTsKKworICBhcnJheVth dG9pKCI1Iik6NToxXSA9IDU1NTU7CisgIHByaW50ZigiPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisgIGZv ciAoaWkgPSAwOyBpaTwxMDsgaWkrKykKKyAgICBwcmludGYoImFycmF5WyUy ZF0gPSAlMmRcbiIsIGlpLCBhcnJheVtpaV0pOworCisgIGFycmF5W2F0b2ko IjUiKTphdG9pKCI1Iik6YXRvaSgiMSIpXSA9IDk5OTk7CisgIHByaW50Zigi PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PVxuIik7CisgIGZvciAoaWkgPSAwOyBpaTwxMDsgaWkrKykKKyAgICBwcmlu dGYoImFycmF5WyUyZF0gPSAlMmRcbiIsIGlpLCBhcnJheVtpaV0pOworCisg IHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2NvbXBpbGUvYXJyYXlfdGVz dDIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9u b3RhdGlvbi9jb21waWxlL2FycmF5X3Rlc3QyLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiMzY4MAotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3Rh dGlvbi9jb21waWxlL2FycmF5X3Rlc3QyLmMKQEAgLTAsMCArMSwxMjIgQEAK KyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQoreworICBpbnQgYXJyYXlbMTBdLCBhcnJheTJbMTBdLCBpaSA9 IDAsIHggPSAyLCB6PSAwICwgeSA9IDAgOworICBpZiAoYXJnYyA8IDIpCisg ICAgeworICAgICAgZnByaW50ZihzdGRlcnIsIlVzYWdlOiVzIDxOVU1CRVI+ XG4iLCBhcmd2WzBdKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAg Zm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgeworICAgICAgYXJy YXlbaWldID0gMTA7CisgICAgICBhcnJheTJbaWldID0gNTAwMDAwMDsKKyAg ICB9CisKKyAgYXJyYXkyWzA6MTA6MV0gPSBhcnJheVswOjEwOjFdOworCisg IHByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PVxuIik7CisgIGZvciAoaWkgPSAwOyBpaTwxMDsgaWkrKykK KyAgICBwcmludGYoImFycmF5WyUyZF0gPSAlN2RcdGFycmF5MlslMmRdID0g JTdkXG4iLCBpaSwgYXJyYXlbaWldLCAKKwkgICBpaSwgYXJyYXkyW2lpXSk7 CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgeworICAg ICAgYXJyYXlbaWldID0gMTA7CisgICAgICBhcnJheTJbaWldID0gNTAwMDAw MDsKKyAgICB9CisgIGFycmF5MlswOjEwOjJdID0gYXJyYXlbMDoxMDoyXTsK KworICBwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT1cbiIpOworICBmb3IgKGlpID0gMDsgaWk8MTA7IGlp KyspCisgICAgcHJpbnRmKCJhcnJheVslMmRdID0gJTdkXHRhcnJheTJbJTJk XSA9ICU3ZFxuIiwgaWksIGFycmF5W2lpXSwgCisJICAgaWksIGFycmF5Mltp aV0pOworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIHsK KyAgICAgIGFycmF5W2lpXSA9IDEwOworICAgICAgYXJyYXkyW2lpXSA9IDUw MDAwMDA7CisgICAgfQorICB4ID0gYXRvaShhcmd2WzFdKTsKKyAgeiA9ICgx MC1hdG9pKGFyZ3ZbMV0pKS9hdG9pKGFyZ3ZbMV0pOworICBwcmludGYoIj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1c biIpOworICBwcmludGYoInggPSAlMmRcdHogPSAlMmRcbiIsIHgsIHopOwor ICBhcnJheTJbeDo1OnpdID0gYXJyYXlbeDo1OnpdOworICBmb3IgKGlpID0g MDsgaWk8MTA7IGlpKyspCisgICAgcHJpbnRmKCJhcnJheVslMmRdID0gJTdk XHRhcnJheTJbJTJkXSA9ICU3ZFxuIiwgaWksIGFycmF5W2lpXSwgCisJICAg aWksIGFycmF5MltpaV0pOworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBp aSsrKQorICAgIHsKKyAgICAgIGFycmF5W2lpXSA9IDUwMDsKKyAgICAgIGFy cmF5MltpaV0gPSAxMDAwMDAwOworICAgIH0KKyAgeCA9IGF0b2koYXJndlsx XSk7CisgIHogPSAoMTAtYXRvaShhcmd2WzFdKSkvYXRvaShhcmd2WzFdKTsK KyAgeSA9IDEwLWF0b2koYXJndlsxXSk7CisgIHByaW50ZigiPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7Cisg IHByaW50ZigieCA9ICUyZFx0eSA9ICUyZFx0eiA9ICUyZFxuIiwgeCwgeSwg eik7CisgIGFycmF5Mlt4Onk6el0gPSBhcnJheVt4Onk6el07CisgIGZvciAo aWkgPSAwOyBpaTwxMDsgaWkrKykKKyAgICBwcmludGYoImFycmF5WyUyZF0g PSAlN2RcdGFycmF5MlslMmRdID0gJTdkXG4iLCBpaSwgYXJyYXlbaWldLCAK KwkgICBpaSwgYXJyYXkyW2lpXSk7CisKKyAgZm9yIChpaSA9IDA7IGlpIDwg MTA7IGlpKyspCisgICAgeworICAgICAgYXJyYXlbaWldICA9IDUwMDsKKyAg ICAgIGFycmF5MltpaV0gPSAxMDAwMDAwOworICAgIH0KKyAgeCA9IGF0b2ko YXJndlsxXSk7CisgIHogPSAoMTAtYXRvaShhcmd2WzFdKSkvYXRvaShhcmd2 WzFdKTsKKyAgeSA9IDEwLWF0b2koYXJndlsxXSk7CisgIHByaW50ZigiPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxu Iik7CisgIHByaW50ZigieCA9ICUyZFx0eSA9ICUyZFx0eiA9ICUyZFxuIiwg eCwgeSwgeik7CisgIGFycmF5W3g6eTooKDEwLWF0b2koYXJndlsxXSkpL2F0 b2koYXJndlsxXSkpXSA9IAorICAgIGFycmF5Mlt4Onk6KCgxMC1hdG9pKGFy Z3ZbMV0pKS9hdG9pKGFyZ3ZbMV0pKV07CisgIGZvciAoaWkgPSAwOyBpaTwx MDsgaWkrKykKKyAgICBwcmludGYoImFycmF5WyUyZF0gPSAlN2RcdGFycmF5 MlslMmRdID0gJTdkXG4iLCBpaSwgYXJyYXlbaWldLCAKKwkgICBpaSwgYXJy YXkyW2lpXSk7CisKKyAgeCA9IGF0b2koYXJndlsxXSk7CisgIHogPSAoMTAt YXRvaShhcmd2WzFdKSkvYXRvaShhcmd2WzFdKTsKKyAgeSA9IDEwLWF0b2ko YXJndlsxXSk7CisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAg IHsKKyAgICAgIGFycmF5W2lpXSAgPSA1MDA7CisgICAgICBhcnJheTJbaWld ID0gMTAwMDAwMDsKKyAgICB9CisgIHByaW50ZigiPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisgIHByaW50 ZigieCA9ICUyZFx0eSA9ICUyZFx0eiA9ICUyZFxuIiwgeCwgeSwgeik7Cisg IGFycmF5W2F0b2koYXJndlsxXSk6KDEwLWF0b2koYXJndlsxXSkpOigoMTAt YXRvaShhcmd2WzFdKSkvYXRvaShhcmd2WzFdKSldID0KKyAgYXJyYXkyW2F0 b2koYXJndlsxXSk6KDEwLWF0b2koYXJndlsxXSkpOigoMTAtYXRvaShhcmd2 WzFdKSkvYXRvaShhcmd2WzFdKSldOworICBmb3IgKGlpID0gMDsgaWk8MTA7 IGlpKyspCisgICAgcHJpbnRmKCJhcnJheVslMmRdID0gJTdkXHRhcnJheTJb JTJkXSA9ICU3ZFxuIiwgaWksIGFycmF5W2lpXSwgCisJICAgaWksIGFycmF5 MltpaV0pOworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAg IHsKKyAgICAgIGFycmF5W2lpXSAgPSA0OworICAgICAgYXJyYXkyW2lpXSA9 IDI7CisgICAgfQorCisgIGFycmF5W2F0b2koIjUiKTo1OjFdID0gYXJyYXky W2F0b2koIjUiKTo1OjFdOworICBwcmludGYoIj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworICBmb3IgKGlp ID0gMDsgaWk8MTA7IGlpKyspCisgICAgcHJpbnRmKCJhcnJheVslMmRdID0g JTJkXHRhcnJheTJbJTJkXSA9ICUyZFxuIiwgaWksIGFycmF5W2lpXSwgCisJ ICAgaWksIGFycmF5MltpaV0pOworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEw OyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5W2lpXSAgPSA1OworICAgICAg YXJyYXkyW2lpXSA9IDE7CisgICAgfQorICBhcnJheVthdG9pKCI1Iik6YXRv aSgiNSIpOmF0b2koIjEiKV0gPSAKKwkJCSAgICAgYXJyYXkyW2F0b2koIjUi KTphdG9pKCI1Iik6YXRvaSgiMSIpXTsKKyAgcHJpbnRmKCI9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKyAg Zm9yIChpaSA9IDA7IGlpPDEwOyBpaSsrKQorICAgIHByaW50ZigiYXJyYXlb JTJkXSA9ICUyZFx0YXJyYXkyWyUyZF0gPSAlMmRcbiIsIGlpLCBhcnJheVtp aV0sIAorCSAgIGlpLCBhcnJheTJbaWldKTsKKworICByZXR1cm4gMDsKK30K ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9h cnJheV9ub3RhdGlvbi9jb21waWxlL2FycmF5X3Rlc3RfTkQuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9jb21w aWxlL2FycmF5X3Rlc3RfTkQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5lOGUzODgyCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2NvbXBp bGUvYXJyYXlfdGVzdF9ORC5jCkBAIC0wLDAgKzEsOTggQEAKKyNpbmNsdWRl IDxzdGRpby5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp Cit7CisgIGludCBhcnJheVsxMF1bMTVdLCBpaSA9IDAsIGpqID0gMCx4ID0g MCwgej0gMSAsIHkgPSAxMCA7CisgIGludCBhcnJheV8yWzEwXVsxNV07Cisg CisgIGlmIChhcmdjICE9IDMpCisgICAgeworICAgICAgZnByaW50ZihzdGRl cnIsICJVc2FnZTogJXMgMTAgMTVcbiIsIGFyZ3ZbMF0pOworICAgICAgcmV0 dXJuIC0xOworICAgIH0KKyAgcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsgCisgIGZvciAoaWkg PSAwOyBpaSA8IDEwOyBpaSsrKSB7CisgICAgZm9yIChqaiA9IDA7IGpqPCAx NTsgamorKykgeworICAgICAgYXJyYXlbaWldW2pqXSA9IGlpK2pqOworICAg ICAgYXJyYXlfMltpaV1bampdID0gMDsKKyAgICB9CisgIH0KKyAgYXJyYXlf MlswOjU6Ml1bMDo1OjNdID0gYXJyYXlbMDo1OjJdWzA6NTozXSArIDEgKyA1 ICsgYXJyYXlbMF1bNV0gKyB4OworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEw OyBpaSsrKQorICAgIHsKKyAgICAgIGZvciAoamogPSAwOyBqaiA8IDE1OyBq aisrKQorCXsKKwkgIHByaW50ZigiJTJkICIsIGFycmF5XzJbaWldW2pqXSk7 CisJfQorICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KKworCisgIHByaW50 ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PVxuIik7IAorICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykgewor ICAgIGZvciAoamogPSAwOyBqajwgMTU7IGpqKyspIHsKKyAgICAgIGFycmF5 W2lpXVtqal0gPSBpaStqajsKKyAgICAgIGFycmF5XzJbaWldW2pqXSA9IDA7 CisgICAgfQorICB9CisgIHggPSBhdG9pKGFyZ3ZbMV0pOworICB5ID0gYXRv aShhcmd2WzJdKTsKKyAgYXJyYXlfMlswOng6MV1bMDp5OjFdID0gYXJyYXlb MDp4OjFdWzA6eToxXSArIHggKyB5ICsgYXJyYXlbMDp4OjFdWzA6eToxXTsK KworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICB7CisgICAg ICBmb3IgKGpqID0gMDsgamogPCAxNTsgamorKykKKwl7CisJICBwcmludGYo IiUyZCAiLCBhcnJheV8yW2lpXVtqal0pOworCX0KKyAgICAgIHByaW50Zigi XG4iKTsKKyAgICB9CisKKyAgcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsgCisgIGZvciAoaWkg PSAwOyBpaSA8IDEwOyBpaSsrKSB7CisgICAgZm9yIChqaiA9IDA7IGpqPCAx NTsgamorKykgeworICAgICAgYXJyYXlbaWldW2pqXSA9IGlpK2pqOworICAg ICAgYXJyYXlfMltpaV1bampdID0gMDsKKyAgICB9CisgIH0KKyAgeCA9IGF0 b2koYXJndlsxXSk7CisgIHkgPSBhdG9pKGFyZ3ZbMl0pOworICB6ID0gKDIw LSBhdG9pIChhcmd2WzFdKSkvYXRvaShhcmd2WzFdKTsKKyAgLyogKDIwLTEw KS8xMCBldmFsdWF0ZXMgdG8gMSBhbGwgdGhlIHRpbWUgOi0pLiAqLworICBh cnJheV8yWzA6eDp6XVswOnk6el0gPSBhcnJheVswOng6el1bMDp5OnpdICsg YXJyYXlbMDp4OnpdWzA6eTp6XSArIHkgKyB6OworICBwcmludGYoInggPSAl MmRcdHkgPSAlMmRcdHogPSAlMmRcbiIsIHgsIHksIHopOworICBmb3IgKGlp ID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICB7CisgICAgICBmb3IgKGpqID0g MDsgamogPCAxNTsgamorKykKKwl7CisJICBwcmludGYoIiUyZCAiLCBhcnJh eV8yW2lpXVtqal0pOworCX0KKyAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9 CisKKyNpZiAxCisgIHByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PVxuIik7IAorICBmb3IgKGlpID0gMDsg aWkgPCAxMDsgaWkrKykgeworICAgIGZvciAoamogPSAwOyBqajwgMTU7IGpq KyspIHsKKyAgICAgIGFycmF5W2lpXVtqal0gPSBpaStqajsKKyAgICAgIGFy cmF5XzJbaWldW2pqXSA9IDA7CisgICAgfQorICB9CisgIHggPSBhcmdjLTM7 CisgIHkgPSAyMC1hdG9pKGFyZ3ZbMV0pOworICB6ID0gKDIwLSBhdG9pIChh cmd2WzFdKSkvYXRvaShhcmd2WzFdKTsKKyAgLyogKDIwLTEwKS8xMCBldmFs dWF0ZXMgdG8gMSBhbGwgdGhlIHRpbWUgOi0pLiAqLworICBhcnJheV8yWyhh cmdjLTMpOigyMC1hdG9pKGFyZ3ZbMV0pKTooMjAtYXRvaShhcmd2WzFdKSkv YXRvaShhcmd2WzFdKV1bKGFyZ2MtMyk6KDMwLWF0b2koYXJndlsyXSkpOiAo KDMwLWF0b2koYXJndlsyXSkpL2F0b2koYXJndlsyXSkpXSA9IGFycmF5Wyhh cmdjLTMpOjIwLWF0b2koYXJndlsxXSk6KDIwLWF0b2koYXJndlsxXSkpL2F0 b2koYXJndlsxXSldWyhhcmdjLTMpOigzMC1hdG9pKGFyZ3ZbMl0pKTogKDMw LWF0b2koYXJndlsyXSkpL2F0b2koYXJndlsyXSldICsgYXJyYXlbKGFyZ2Mt Myk6MjAtYXRvaShhcmd2WzFdKTooMjAtYXRvaShhcmd2WzFdKSkvYXRvaShh cmd2WzFdKV1bKGFyZ2MtMyk6KDMwLWF0b2koYXJndlsyXSkpOiAoMzAtYXRv aShhcmd2WzJdKSkvYXRvaShhcmd2WzJdKV0gKiBhcnJheVsoYXJnYy0zKToy MC1hdG9pKGFyZ3ZbMV0pOigyMC1hdG9pKGFyZ3ZbMV0pKS9hdG9pKGFyZ3Zb MV0pXVsoYXJnYy0zKTooMzAtYXRvaShhcmd2WzJdKSk6ICgzMC1hdG9pKGFy Z3ZbMl0pKS9hdG9pKGFyZ3ZbMl0pXTsKKyAgcHJpbnRmKCJ4ID0gJTJkXHR5 ID0gJTJkXHR6ID0gJTJkXG4iLCB4LCB5LCB6KTsKKyAgZm9yIChpaSA9IDA7 IGlpIDwgMTA7IGlpKyspCisgICAgeworICAgICAgZm9yIChqaiA9IDA7IGpq IDwgMTU7IGpqKyspCisJeworCSAgcHJpbnRmKCIlNGQgIiwgYXJyYXlfMltp aV1bampdKTsKKwl9CisgICAgICBwcmludGYoIlxuIik7CisgICAgfQorI2Vu ZGlmCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2NvbXBpbGUvYnVp bHRpbl9mdW5jX2RvdWJsZS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2ls ay1wbHVzL2FycmF5X25vdGF0aW9uL2NvbXBpbGUvYnVpbHRpbl9mdW5jX2Rv dWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNi Y2M2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vY29tcGlsZS9idWlsdGluX2Z1 bmNfZG91YmxlLmMKQEAgLTAsMCArMSw3MyBAQAorI2RlZmluZSBIQVZFX0lP IDEKKworI2lmIEhBVkVfSU8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlm CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIGNoYXIgX19zZWNfcmVkdWNl X2FkZCAoaW50ICopOyAqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQoreworICBpbnQgaWksYXJyYXlbMTBdLCB5ID0gMCwgeV9pbnQgPSAw LCBhcnJheTJbMTBdOworICBkb3VibGUgeCwgeXksIGFycmF5M1sxMF0sIGFy cmF5NFsxMF07CisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAg IHsKKyAgICAgIGFycmF5W2lpXSA9IDEraWk7CisgICAgICBhcnJheTJbaWld PSAyOyAKKyAgICB9CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKysp CisgICAgeworICAgICAgaWYgKGlpJTIgJiYgaWkpCisJYXJyYXkzW2lpXSA9 IChkb3VibGUpKDEuMDAwMC8oZG91YmxlKWlpKTsKKyAgICAgIGVsc2UKKwlh cnJheTNbaWldID0gKGRvdWJsZSkgaWkgKyAwLjEwOworICAgICAgYXJyYXk0 W2lpXSA9IChkb3VibGUpICgxLjAwMDAwLyAoZG91YmxlKShpaSsxKSk7Cisg ICAgfQorCisgIC8qIGFycmF5WzpdID0gNTsgKi8KKyAgeCA9IF9fc2VjX3Jl ZHVjZV9tYXggKGFycmF5M1s6XSAqIGFycmF5NFs6XSk7IAorICB5ID0gX19z ZWNfcmVkdWNlX21heF9pbmQgKCBhcnJheTNbOl0gKiBhcnJheTRbOl0pOyAK KyNpZiBIQVZFX0lPCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKSAK KyAgICBwcmludGYoIiU1LjNmICIsIGFycmF5M1tpaV0gKiBhcnJheTRbaWld KTsKKyAgcHJpbnRmKCJcbiIpOworICBwcmludGYoIk1heCA9ICU1LjNmXHQg TWF4IEluZGV4ID0gJTJkXG4iLCB4LCB5KTsKKyNlbmRpZgorCisgIHggPSBf X3NlY19yZWR1Y2VfbWluIChhcnJheTNbOl0gKiBhcnJheTRbOl0pOyAKKyAg eSA9IF9fc2VjX3JlZHVjZV9taW5faW5kICggYXJyYXkzWzpdICogYXJyYXk0 WzpdKTsgCisjaWYgSEFWRV9JTworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsg aWkrKykgCisgICAgcHJpbnRmKCIlNS4zZiAiLCBhcnJheTNbaWldICogYXJy YXk0W2lpXSk7CisgIHByaW50ZigiXG4iKTsKKyAgcHJpbnRmKCJNaW4gPSAl NS4zZlx0IE1pbiBJbmRleCA9ICUyZFxuIiwgeCwgeSk7CisjZW5kaWYKKwor ICB4ID0gX19zZWNfcmVkdWNlX2FkZCAoYXJyYXkzWzpdICogYXJyYXk0Wzpd KTsgCisgIHl5ID0gX19zZWNfcmVkdWNlX211bCAoIGFycmF5M1s6XSAqIGFy cmF5NFs6XSk7IAorI2lmIEhBVkVfSU8KKyAgZm9yIChpaSA9IDA7IGlpIDwg MTA7IGlpKyspIAorICAgIHByaW50ZigiJTUuM2YgIiwgYXJyYXkzW2lpXSAq IGFycmF5NFtpaV0pOworICBwcmludGYoIlxuIik7CisgIHByaW50ZigiQWRk ID0gJTUuM2ZcdCBNdWwgPSAlZlxuIiwgeCwgeXkpOworI2VuZGlmCisKKyAg Zm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgeworICAgICAgaWYg KGlpJTIgJiYgaWkpCisJYXJyYXkzW2lpXSA9IChkb3VibGUpKDEuMDAwMC8o ZG91YmxlKWlpKTsKKyAgICAgIGVsc2UKKwlhcnJheTNbaWldID0gKGRvdWJs ZSkgaWkgKyAwLjAwOworICAgICAgYXJyYXk0W2lpXSA9IChkb3VibGUpICgx LjAwMDAwLyAoZG91YmxlKShpaSsxKSk7CisgICAgfQorICB5X2ludCA9IF9f c2VjX3JlZHVjZV9hbnlfemVybyAoYXJyYXkzWzpdICogYXJyYXk0WzpdKTsg CisgIHkgPSBfX3NlY19yZWR1Y2VfYWxsX3plcm8gKCBhcnJheTNbOl0gKiBh cnJheTRbOl0pOyAKKyNpZiBIQVZFX0lPCisgIGZvciAoaWkgPSAwOyBpaSA8 IDEwOyBpaSsrKSAKKyAgICBwcmludGYoIiU1LjNmICIsIGFycmF5M1tpaV0g KiBhcnJheTRbaWldKTsKKyAgcHJpbnRmKCJcbiIpOworICBwcmludGYoIkFu eSBaZXJvcyA9ICVkXHQgQWxsIFplcm9zID0gJWRcbiIsIHlfaW50LCB5KTsK KyNlbmRpZgorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9jb21waWxl L2J1aWx0aW5fZnVuY19kb3VibGUyLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vY29tcGlsZS9idWlsdGluX2Z1 bmNfZG91YmxlMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjhlNjU5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vY29tcGlsZS9idWls dGluX2Z1bmNfZG91YmxlMi5jCkBAIC0wLDAgKzEsMTAxIEBACisjZGVmaW5l IEhBVkVfSU8gMQorCisjaWYgSEFWRV9JTworI2luY2x1ZGUgPHN0ZGlvLmg+ CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogY2hhciBfX3Nl Y19yZWR1Y2VfYWRkIChpbnQgKik7ICovCitpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCit7CisgIGludCBpaSxhcnJheVsxMF0sIHkgPSAwLCB5 X2ludCA9IDAsIGFycmF5MlsxMF0sIHlfaW50Mj0wLCB5Mj0wOworICBkb3Vi bGUgeCwgeXksIGFycmF5M1sxMF0sIGFycmF5NFsxMF07CisgIGZvciAoaWkg PSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5W2lpXSA9 IDEraWk7CisgICAgICBhcnJheTJbaWldPSAyOyAKKyAgICB9CisKKyAgZm9y IChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgeworICAgICAgaWYgKGlp JTIgJiYgaWkpCisJYXJyYXkzW2lpXSA9IChkb3VibGUpKDEuMDAwMC8oZG91 YmxlKWlpKTsKKyAgICAgIGVsc2UKKwlhcnJheTNbaWldID0gKGRvdWJsZSkg aWkgKyAwLjEwOworICAgICAgYXJyYXk0W2lpXSA9IChkb3VibGUpICgxLjAw MDAwLyAoZG91YmxlKShpaSsxKSk7CisgICAgfQorCisgIC8qIGFycmF5Wzpd ID0gNTsgKi8KKyAgeCA9IF9fc2VjX3JlZHVjZV9tYXggKGFycmF5M1s6XSAq IGFycmF5NFs6XSk7IAorICB5ID0gX19zZWNfcmVkdWNlX21heF9pbmQgKCBh cnJheTNbOl0gKiBhcnJheTRbOl0pOyAKKyNpZiBIQVZFX0lPCisgIGZvciAo aWkgPSAwOyBpaSA8IDEwOyBpaSsrKSAKKyAgICBwcmludGYoIiU1LjNmICIs IGFycmF5M1tpaV0gKiBhcnJheTRbaWldKTsKKyAgcHJpbnRmKCJcbiIpOwor ICBwcmludGYoIk1heCA9ICU1LjNmXHQgTWF4IEluZGV4ID0gJTJkXG4iLCB4 LCB5KTsKKyNlbmRpZgorCisgIHggPSBfX3NlY19yZWR1Y2VfbWluIChhcnJh eTNbOl0gKiBhcnJheTRbOl0pOyAKKyAgeSA9IF9fc2VjX3JlZHVjZV9taW5f aW5kICggYXJyYXkzWzpdICogYXJyYXk0WzpdKTsgCisjaWYgSEFWRV9JTwor ICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykgCisgICAgcHJpbnRmKCIl NS4zZiAiLCBhcnJheTNbaWldICogYXJyYXk0W2lpXSk7CisgIHByaW50Zigi XG4iKTsKKyAgcHJpbnRmKCJNaW4gPSAlNS4zZlx0IE1pbiBJbmRleCA9ICUy ZFxuIiwgeCwgeSk7CisjZW5kaWYKKworICB4ID0gX19zZWNfcmVkdWNlX2Fk ZCAoYXJyYXkzWzpdICogYXJyYXk0WzpdKTsgCisgIHl5ID0gX19zZWNfcmVk dWNlX211bCAoIGFycmF5M1s6XSAqIGFycmF5NFs6XSk7IAorI2lmIEhBVkVf SU8KKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspIAorICAgIHByaW50 ZigiJTUuM2YgIiwgYXJyYXkzW2lpXSAqIGFycmF5NFtpaV0pOworICBwcmlu dGYoIlxuIik7CisgIHByaW50ZigiQWRkID0gJTUuM2ZcdCBNdWwgPSAlZlxu IiwgeCwgeXkpOworI2VuZGlmCisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7 IGlpKyspCisgICAgeworICAgICAgaWYgKGlpJTIgJiYgaWkpCisJYXJyYXkz W2lpXSA9IChkb3VibGUpKDEuMDAwMC8oZG91YmxlKWlpKTsKKyAgICAgIGVs c2UKKwlhcnJheTNbaWldID0gKGRvdWJsZSkgaWkgKyAwLjAwOworICAgICAg YXJyYXk0W2lpXSA9IChkb3VibGUpICgxLjAwMDAwLyAoZG91YmxlKShpaSsx KSk7CisgICAgfQorICB5X2ludCA9IF9fc2VjX3JlZHVjZV9hbnlfemVybyAo YXJyYXkzWzpdICogYXJyYXk0WzpdKTsgCisgIHkgPSBfX3NlY19yZWR1Y2Vf YWxsX3plcm8gKCBhcnJheTNbOl0gKiBhcnJheTRbOl0pOyAKKyNpZiBIQVZF X0lPCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKSAKKyAgICBwcmlu dGYoIiU1LjNmICIsIGFycmF5M1tpaV0gKiBhcnJheTRbaWldKTsKKyAgcHJp bnRmKCJcbiIpOworICBwcmludGYoIkFueSBaZXJvcyA9ICVkXHQgQWxsIFpl cm9zID0gJWRcbiIsIHlfaW50LCB5KTsKKyNlbmRpZgorCisgIGZvciAoaWkg PSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5W2lpXSA9 IDA7CisgICAgICBhcnJheTJbaWldID0gNTsKKyAgICAgIGlmIChpaSUyICYm IGlpKQorCWFycmF5M1tpaV0gPSAoZG91YmxlKSgxLjAwMDAvKGRvdWJsZSlp aSk7CisgICAgICBlbHNlCisJYXJyYXkzW2lpXSA9IChkb3VibGUpIGlpICsg MC4wMDsKKyAgICAgIGFycmF5NFtpaV0gPSAoZG91YmxlKSAoMS4wMDAwMC8g KGRvdWJsZSkoaWkrMSkpOworICAgIH0KKyAgeV9pbnQgPSBfX3NlY19yZWR1 Y2VfYW55X25vbnplcm8gKGFycmF5M1s6XSArIGFycmF5WzRdKTsgCisgIHlf aW50MiA9IF9fc2VjX3JlZHVjZV9hbnlfemVybyAoYXJyYXkzWzpdICsgYXJy YXlbNF0pOyAKKyAgeSA9IF9fc2VjX3JlZHVjZV9hbGxfbm9uemVybyAoKGFy cmF5M1s6XSArIGFycmF5NFs6XSkgKiAoYXJnYy0xKSk7IAorICB5MiA9IF9f c2VjX3JlZHVjZV9hbGxfemVybyAoKGFycmF5M1s6XSArIGFycmF5NFs6XSkg KiAoYXJnYy0xKSk7IAorI2lmIEhBVkVfSU8KKyAgZm9yIChpaSA9IDA7IGlp IDwgMTA7IGlpKyspIHsKKyAgICBwcmludGYoIiU1LjNmICIsIGFycmF5M1tp aV0gK2FycmF5NFtpaV0pOworICB9CisgIHByaW50ZigiXG4iKTsKKyAgZm9y IChpaSA9IDA7IGlpIDwgMTA7IGlpKyspIHsKKyAgICBwcmludGYoIiU1LjNm ICIsIChhcnJheTNbaWldICsgYXJyYXk0W2lpXSkgKiAoYXJnYy0xKSk7Cisg IH0KKyAgcHJpbnRmKCJcbiIpOworICBwcmludGYoIkFueSBOb24temVyb3Mg KDFzdCBsaW5lKSA9ICVkXHQgQWxsIG5vbi16ZXJvcyAoMm5kIGxpbmUpID0g JWRcbiIsIAorCSB5X2ludCwgeSk7CisgIHByaW50ZigiQW55IHplcm9zICgx c3QgbGluZSkgPSAlZFx0IEFsbCB6ZXJvcyAoMm5kIGxpbmUpID0gJWRcbiIs IHlfaW50MiwgeTIpOworI2VuZGlmCisgIHJldHVybiAwOworfQpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25v dGF0aW9uL2NvbXBpbGUvY29tcGlsZS5leHAgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vY29tcGlsZS9jb21waWxl LmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjkz YTgyCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv Y2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2NvbXBpbGUvY29tcGlsZS5leHAK QEAgLTAsMCArMSw2NSBAQAorIyAgIENvcHlyaWdodCAoQykgMjAxMiBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorIyAKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMgCisjIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggR0NDOyBzZWUgdGhl IGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisjIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKworIyBXcml0dGVuIGJ5IEJhbGFqaSBWLiBJ eWVyIDxiYWxhamkudi5peWVyQGludGVsLmNvbT4KKworCitsb2FkX2xpYiBn Y2MtZGcuZXhwCisKK2RnLWluaXQKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9i IC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLmNdXSAiIC1mY2lsa3Bs dXMiICIgIgorZGctZmluaXNoCisKK2RnLWluaXQKK2RnLXJ1bnRlc3QgW2xz b3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLmNdXSAi IC1PMCAtZmNpbGtwbHVzIiAiICIKK2RnLWZpbmlzaAorCitkZy1pbml0Citk Zy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRz dWJkaXIvKi5jXV0gIiAtTzEgLWZjaWxrcGx1cyIgIiAiCitkZy1maW5pc2gK KworZGctaW5pdAorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxh aW4gJHNyY2Rpci8kc3ViZGlyLyouY11dICIgLU8yIC1mdHJlZS12ZWN0b3Jp emUgLWZjaWxrcGx1cyIgIiAiCitkZy1maW5pc2gKKworZGctaW5pdAorZGct cnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3Vi ZGlyLyouY11dICIgLU8zIC1mY2lsa3BsdXMiICIgIgorZGctZmluaXNoCisK KworZGctaW5pdAorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxh aW4gJHNyY2Rpci8kc3ViZGlyLyouY11dICIgLWcgLWZjaWxrcGx1cyIgIiAi CitkZy1maW5pc2gKKworZGctaW5pdAorZGctcnVudGVzdCBbbHNvcnQgW2ds b2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouY11dICIgLWcgLU8w IC1mY2lsa3BsdXMiICIgIgorZGctZmluaXNoCisKK2RnLWluaXQKK2RnLXJ1 bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRp ci8qLmNdXSAiIC1nIC1PMSAtZmNpbGtwbHVzIiAiICIKK2RnLWZpbmlzaAor CitkZy1pbml0CitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFp biAkc3JjZGlyLyRzdWJkaXIvKi5jXV0gIiAtZyAtTzIgLWZ0cmVlLXZlY3Rv cml6ZSAtZmNpbGtwbHVzIiAiICIKK2RnLWZpbmlzaAorCitkZy1pbml0Citk Zy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRz dWJkaXIvKi5jXV0gIiAtZyAtTzMgLWZjaWxrcGx1cyIgIiAiCitkZy1maW5p c2gKKworZGctaW5pdAorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29t cGxhaW4gJHNyY2Rpci8kc3ViZGlyL2FycmF5X25vdGF0aW9uX3Rlc3RzL2Vy cm9ycy8qLmNdXSAiIC1PMyAtZnRyZWUtdmVjdG9yaXplIC1mY2lsa3BsdXMg LWciICIgIgorZGctZmluaXNoCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vY29tcGlsZS9nYXRo ZXJfc2NhdHRlci5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVz L2FycmF5X25vdGF0aW9uL2NvbXBpbGUvZ2F0aGVyX3NjYXR0ZXIuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTdhYzI4Ci0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVz L2FycmF5X25vdGF0aW9uL2NvbXBpbGUvZ2F0aGVyX3NjYXR0ZXIuYwpAQCAt MCwwICsxLDQ3IEBACisjaWYgSEFWRV9JTworI2luY2x1ZGUgPHN0ZGlvLmg+ CisjZW5kaWYKKy8qICNpbmNsdWRlIDxjc3RkbGliPiAqLworCitpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCBhcnJheVsxMF1b MTBdLCBhcnJheTJbMTBdLCBhcnJheTNbMTBdLCB4ID0gMCwgeTsKKyAgaW50 IHhfY29ycmVjdCwgeV9jb3JyZWN0LCBpaSwgamogPSAwOworICBmbG9hdCBh cnJheTRbMTBdWzEwXVsxMF1bMTBdOworICBmb3IgKGlpID0gMDsgaWkgPCAx MDsgaWkrKykKKyAgICB7CisgICAgICBmb3IgKGpqID0gMDsgamogPCAxMDsg amorKykKKwl7CisJICBhcnJheVtpaV1bampdID0gMStpaTsKKwkgIGFycmF5 MltpaV09IDI7CisJICBhcnJheTNbaWldPSAzOworCX0KKyAgICB9CisgIAor ICBhcnJheVthcnJheTJbOl1dW2FycmF5M1s6XV0gPSAxMDAwOworICAKKyNp ZiBIQVZFX0lPCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKSB7Cisg ICAgZm9yIChqaiA9IDA7IGpqIDwgMTA7IGpqKyspIHsKKyAgICAgIHByaW50 ZigiJTRkXHQiLCBhcnJheVtpaV1bampdKTsKKyAgICB9CisgICAgcHJpbnRm KCJcbiIpOworICB9CisjZW5kaWYKKworICBhcnJheTRbYXJyYXkyWzpdXVth cnJheTNbMDoxMDoxXV1bYXJyYXkyWzA6MTA6MV1dW2FycmF5M1swOjEwOjFd XSA9CisgICAgKGZsb2F0KWFycmF5W2FycmF5Mls6XV1bYXJyYXkzWzpdXTsg CisKKyNpZiBIQVZFX0lPCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsr KSB7CisgICAgICBmb3IgKGpqID0gMDsgamogPCAxMDsgamorKykgeworCSAg Zm9yIChrayA9IDA7IGtrIDwgMTA7IGtrKyspIHsKKwkgICAgICBmb3IgKGxs ID0gMDsgbGwgPCAxMDsgbGwrKykgeworCQkgIHByaW50ZigiJTRkXG4iLCBh cnJheTRbaWldW2pqXVtra11bbGxdKTsKKwkgICAgICB9CisJICB9CisgICAg ICB9CisgIH0KKyNlbmRpZiAgCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0 aW9uL2NvbXBpbGUvaWZfdGVzdC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv Y2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2NvbXBpbGUvaWZfdGVzdC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMzM3OWIKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBs dXMvYXJyYXlfbm90YXRpb24vY29tcGlsZS9pZl90ZXN0LmMKQEAgLTAsMCAr MSwxNjIgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbiAoaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgeCA9IDMsIHksIHosIGFy cmF5WzEwXSwgYXJyYXkyWzEwXSwgVHdvZEFycmF5WzEwXVsxMF0sIGpqLGtr LGxsIDsKKyAgaW50IEZvdXJEQXJyYXlbMTBdWzEwXVsxMF1bMTBdOworICBp bnQgaWkgPSAwOyAKKworICBpZiAoYXJnYyAhPSAzKQorICAgIHsKKyAgICAg IGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIDEwIDE1XG4iLCBhcmd2WzBd KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgZm9yIChpaSA9IDA7IGlp IDwgMTA7IGlpKyspCisgICAgeworICAgICAgYXJyYXlbaWldID0gYXJnYyUz OworICAgICAgYXJyYXkyW2lpXT0gMTA7CisgICAgfQorICAKKyAgZm9yIChp aSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgcHJpbnRmKCIlNGQgIiwgYXJy YXlbaWldKTsKKyAgcHJpbnRmKCJcbiIpOworCisgIGlmICghYXJyYXlbOl0p CisgICAgYXJyYXkyWzpdID0gNTsKKyAgZWxzZQorICAgIGFycmF5Mls6XSA9 IDEwOworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIHBy aW50ZigiJTRkICIsIGFycmF5MltpaV0pOworICBwcmludGYoIlxuIik7CisK KyAgaWYgKCEoYXJyYXlbMDoxMDoxXSArIGFycmF5WzA6MTA6MV0pKQorICAg IGFycmF5Mls6XSA9IDU7CisgIGVsc2UKKyAgICBhcnJheTJbOl0gPSAxMDsK KworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBwcmludGYo IiU0ZCAiLCBhcnJheTJbaWldKTsKKyAgcHJpbnRmKCJcbiIpOworCisgIHgg PSBhdG9pIChhcmd2WzFdKS0xMDsKKyAgeSA9IGF0b2kgKGFyZ3ZbMV0pLzI7 CisgIHogPSAoYXRvaSAoYXJndlsxXSkpLzU7CisKKyAgZm9yIChpaSA9IDA7 IGlpIDwgMTA7IGlpKyspCisgICAgeworICAgICAgaWYgKGlpICUgMikKKwlh cnJheVtpaV0gPSAwOworICAgICAgZWxzZQorCWFycmF5W2lpXSA9IDE7Cisg ICAgfQorCisgIC8qcHJpbnRmKCJ4ID0gJTJkIHkgPSAlMmQgeiA9ICUyZFxu IiwgeCwgeSwgeik7ICovCisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlp KyspCisgICAgYXJyYXlbaWldID0gMTA7CisKKyAgLyogVGhpcyBpZiBsb29w IHdpbGwgY2hhbmdlIGFsbCB0aGUgMTAncyB0byA1J3MgKi8KKyAgaWYgKGFy cmF5W3g6eTp6XSAhPSA5KQorICAgIGFycmF5Mls6XSA9IDU7CisgIGVsc2UK KyAgICBhcnJheTJbOl0gPSAxMDsKKworICBmb3IgKGlpID0gMDsgaWkgPCAx MDsgaWkrKykKKyAgICBwcmludGYoIiU0ZCAiLCBhcnJheTJbaWldKTsKKyAg cHJpbnRmKCJcbiIpOworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsr KQorICAgIGFycmF5MltpaV0gPSAxMDsKKworICAvKiBUaGlzIGlmIGxvb3Ag d2lsbCBjaGFuZ2UgYWxsIHRoZSAxMCdzIHRvIDUncyAqLworICBpZiAoYXJy YXlbYXRvaShhcmd2WzFdKS0xMDphdG9pKGFyZ3ZbMV0pOiBhdG9pKGFyZ3Zb MV0pLzVdKQorICAgIGFycmF5Mls6XSA9IDU7CisgIGVsc2UKKyAgICBhcnJh eTJbOl0gPSAxMDsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykK KyAgICBwcmludGYoIiU0ZCAiLCBhcnJheTJbaWldKTsKKyAgcHJpbnRmKCJc biIpOworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIGZv ciAoamogPSAwOyBqaiA8IDEwOyBqaisrKQorICAgICAgVHdvZEFycmF5W2lp XVtqal0gPSBhdG9pKGFyZ3ZbMV0pOworCisKKyAgZm9yIChpaSA9IDA7IGlp IDwgMTA7IGlpKyspCisgICAgYXJyYXkyW2lpXSA9IDEwOworCisgIC8qIGF0 b2koYXJndlsxXSkgPT0gMTAsIHNvIGl0IHdpbGwgY29udmVydCBhbGwgMTAn cyB0byA1J3MgKi8KKyAgaWYgKFR3b2RBcnJheVs6XVs6XSAhPSAxMCkgCisg ICAgYXJyYXkyWzpdID0gMTA7IAorICBlbHNlCisgICAgYXJyYXkyWzpdID0g NTsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBwcmlu dGYoIiU0ZCAiLCBhcnJheTJbaWldKTsKKyAgcHJpbnRmKCJcbiIpOworCisg IGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIGFycmF5MltpaV0g PSAxMDsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBm b3IgKGpqID0gMDsgamogPCAxMDsgamorKykKKyAgICAgIGZvciAoa2sgPSAw OyBrayA8IDEwOyBraysrKQorCWZvciAobGwgPSAwOyBsbCA8IDEwOyBsbCsr KSAKKwkgIEZvdXJEQXJyYXlbaWldW2pqXVtra11bbGxdID0gYXRvaShhcmd2 WzFdKTsKKyAgCisgIC8qIGF0b2koYXJndlsxXSkgPT0gMTAsIHNvIGl0IHdp bGwgY29udmVydCBhbGwgMTAncyB0byA1J3MgKi8KKyAgaWYgKEZvdXJEQXJy YXlbOl1bOl1bOl1bOl0gIT0gMTApIAorICAgIGFycmF5Mls6XSA9IDEwOyAK KyAgZWxzZQorICAgIGFycmF5Mls6XSA9IDU7CisKKyAgZm9yIChpaSA9IDA7 IGlpIDwgMTA7IGlpKyspCisgICAgcHJpbnRmKCIlNGQgIiwgYXJyYXkyW2lp XSk7CisgIHByaW50ZigiXG4iKTsKKworICAKKyAgZm9yIChpaSA9IDA7IGlp IDwgMTA7IGlpKyspCisgICAgYXJyYXkyW2lpXSA9IDEwOworCisgIGZvciAo aWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIGZvciAoamogPSAwOyBqaiA8 IDEwOyBqaisrKQorICAgICAgZm9yIChrayA9IDA7IGtrIDwgMTA7IGtrKysp CisJZm9yIChsbCA9IDA7IGxsIDwgMTA7IGxsKyspIAorCSAgRm91ckRBcnJh eVtpaV1bampdW2trXVtsbF0gPSBhdG9pKGFyZ3ZbMV0pOworICAKKyAgLyog YXRvaShhcmd2WzFdKSA9PSAxMCwgc28gaXQgd2lsbCBjb252ZXJ0IGFsbCAx MCdzIHRvIDUncyAqLworICBpZiAoRm91ckRBcnJheVswOjEwOjFdWzA6NToy XVs5OjEwOi0xXVt4Onk6el0gIT0gMTApIAorICAgIGFycmF5Mls6XSA9IDEw OyAKKyAgZWxzZQorICAgIGFycmF5Mls6XSA9IDU7CisKKyAgZm9yIChpaSA9 IDA7IGlpIDwgMTA7IGlpKyspCisgICAgcHJpbnRmKCIlNGQgIiwgYXJyYXky W2lpXSk7CisgIHByaW50ZigiXG4iKTsKKworICAgIGZvciAoaWkgPSAwOyBp aSA8IDEwOyBpaSsrKQorICAgIGFycmF5MltpaV0gPSAxMDsKKworICBmb3Ig KGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBmb3IgKGpqID0gMDsgamog PCAxMDsgamorKykKKyAgICAgIGZvciAoa2sgPSAwOyBrayA8IDEwOyBraysr KQorCWZvciAobGwgPSAwOyBsbCA8IDEwOyBsbCsrKSAKKwkgIEZvdXJEQXJy YXlbaWldW2pqXVtra11bbGxdID0gYXRvaShhcmd2WzFdKTsKKyAgCisgIC8q IGF0b2koYXJndlsxXSkgPT0gMTAsIHNvIGl0IHdpbGwgY29udmVydCBhbGwg MTAncyB0byA1J3MgKi8KKyAgaWYgKEZvdXJEQXJyYXlbMDoxMDoxXVswOjU6 Ml1bOToxMDotMV1beDp5OnpdICsKKyAgICAgIEZvdXJEQXJyYXlbMDoxMDox XVswOjU6Ml1bOTotMTA6MV1beDp5OnpdICAhPSAyMCkgCisgICAgYXJyYXky WzpdID0gMTA7IAorICBlbHNlCisgICAgYXJyYXkyWzpdID0gNTsKKworICBm b3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBwcmludGYoIiU0ZCAi LCBhcnJheTJbaWldKTsKKyAgcHJpbnRmKCJcbiIpOworCisgIAorICByZXR1 cm4gMDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2Np bGstcGx1cy9hcnJheV9ub3RhdGlvbi9jb21waWxlL3NlY19pbXBsaWNpdF9l eC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25v dGF0aW9uL2NvbXBpbGUvc2VjX2ltcGxpY2l0X2V4LmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE0ZDgwNgotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9u b3RhdGlvbi9jb21waWxlL3NlY19pbXBsaWNpdF9leC5jCkBAIC0wLDAgKzEs NDEgQEAKKyNkZWZpbmUgSEFWRV9JTyAxCisKKyNpZiBIQVZFX0lPCisjaW5j bHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor CisvKiBjaGFyIF9fc2VjX3JlZHVjZV9hZGQgKGludCAqKTsgKi8KK2ludCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGpqLCBraywg YXJyYXlfM0NbMTBdWzEwXVsxMF07CisgIGludCBpaSxhcnJheVsxMF0sIHkg PSAwLCB5X2ludCA9IDAsIGFycmF5MlsxMF0sIGFycmF5XzNbMTBdWzEwXVsx MF07CisgIGRvdWJsZSB4LCB5eSwgYXJyYXkzWzEwXSwgYXJyYXk0WzEwXTsK KworICBhcnJheVs6XSA9IF9fc2VjX2ltcGxpY2l0X2luZGV4ICgwKTsKKyAg YXJyYXlfM1s6XVs6XVs6XSA9IF9fc2VjX2ltcGxpY2l0X2luZGV4ICgxKSAr IF9fc2VjX2ltcGxpY2l0X2luZGV4KDApICsKKyAgICBfX3NlY19pbXBsaWNp dF9pbmRleCAoMik7CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKysp CisgICAgZm9yIChqaiA9IDA7IGpqIDwgMTA7IGpqKyspCisgICAgICBmb3Ig KGtrID0gMDsga2sgPCAxMDsga2srKykKKwl7CisJICBhcnJheV8zQ1tpaV1b ampdW2trXSA9IGlpK2pqK2trOworCX0KKyNpZiBIQVZFX0lPCisgIGZvciAo aWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIGZvciAoamogPSAwOyBqaiA8 IDEwOyBqaisrKQorICAgICAgZm9yIChrayA9IDA7IGtrIDwgMTA7IGtrKysp CisJeworCSAgcHJpbnRmKCJDb21wdXRlZDogJTNkXHQgQ29ycmVjdDogJTNk XHQiLCBhcnJheV8zW2lpXVtqal1ba2tdLCAKKwkJIGFycmF5XzNDW2lpXVtq al1ba2tdKTsKKwkgIGlmIChhcnJheV8zW2lpXVtqal1ba2tdID09IGFycmF5 XzNDW2lpXVtqal1ba2tdKQorCSAgICBwcmludGYoIk9LXG4iKTsKKwkgIGVs c2UKKwkgICAgcHJpbnRmKCJFUlJPUlxuIik7CisJfQorI2VuZGlmCisKKyAg CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2Vycm9ycy9lcnJvcnMu ZXhwIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25v dGF0aW9uL2Vycm9ycy9lcnJvcnMuZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjBmOTNhODIKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24v ZXJyb3JzL2Vycm9ycy5leHAKQEAgLTAsMCArMSw2NSBAQAorIyAgIENvcHly aWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyAKKyMgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyMgCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25n IHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2Vl CisjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBXcml0 dGVuIGJ5IEJhbGFqaSBWLiBJeWVyIDxiYWxhamkudi5peWVyQGludGVsLmNv bT4KKworCitsb2FkX2xpYiBnY2MtZGcuZXhwCisKK2RnLWluaXQKK2RnLXJ1 bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRp ci8qLmNdXSAiIC1mY2lsa3BsdXMiICIgIgorZGctZmluaXNoCisKK2RnLWlu aXQKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNk aXIvJHN1YmRpci8qLmNdXSAiIC1PMCAtZmNpbGtwbHVzIiAiICIKK2RnLWZp bmlzaAorCitkZy1pbml0CitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9j b21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5jXV0gIiAtTzEgLWZjaWxrcGx1 cyIgIiAiCitkZy1maW5pc2gKKworZGctaW5pdAorZGctcnVudGVzdCBbbHNv cnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouY11dICIg LU8yIC1mdHJlZS12ZWN0b3JpemUgLWZjaWxrcGx1cyIgIiAiCitkZy1maW5p c2gKKworZGctaW5pdAorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29t cGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouY11dICIgLU8zIC1mY2lsa3BsdXMi ICIgIgorZGctZmluaXNoCisKKworZGctaW5pdAorZGctcnVudGVzdCBbbHNv cnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouY11dICIg LWcgLWZjaWxrcGx1cyIgIiAiCitkZy1maW5pc2gKKworZGctaW5pdAorZGct cnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3Vi ZGlyLyouY11dICIgLWcgLU8wIC1mY2lsa3BsdXMiICIgIgorZGctZmluaXNo CisKK2RnLWluaXQKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBs YWluICRzcmNkaXIvJHN1YmRpci8qLmNdXSAiIC1nIC1PMSAtZmNpbGtwbHVz IiAiICIKK2RnLWZpbmlzaAorCitkZy1pbml0CitkZy1ydW50ZXN0IFtsc29y dCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5jXV0gIiAt ZyAtTzIgLWZ0cmVlLXZlY3Rvcml6ZSAtZmNpbGtwbHVzIiAiICIKK2RnLWZp bmlzaAorCitkZy1pbml0CitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9j b21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5jXV0gIiAtZyAtTzMgLWZjaWxr cGx1cyIgIiAiCitkZy1maW5pc2gKKworZGctaW5pdAorZGctcnVudGVzdCBb bHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyL2FycmF5 X25vdGF0aW9uX3Rlc3RzL2Vycm9ycy8qLmNdXSAiIC1PMyAtZnRyZWUtdmVj dG9yaXplIC1mY2lsa3BsdXMgLWciICIgIgorZGctZmluaXNoCmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90 YXRpb24vZXJyb3JzL3BhcnNlcl9lcnJvcnMuYyBiL2djYy90ZXN0c3VpdGUv Z2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9lcnJvcnMvcGFyc2Vy X2Vycm9ycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjU4MTA4ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXJyb3JzL3BhcnNlcl9l cnJvcnMuYwpAQCAtMCwwICsxLDI1IEBACisvKiB7ZGctZG8gY29tcGlsZSB9 ICovCisvKiB7ZGctb3B0aW9ucyB9ICovCisKK2ludCBtYWluIChpbnQgYXJn YywgY2hhciAqKmFyZ3YpCit7CisgIGludCB4ID0gMDsKKyAgaWYgKGFyZ2Mg PT0gMSkKKyAgICB7CisgICAgICBjb25zdCBjaGFyICphcnJheVtdID0geyJh Lm91dCIsICI1In07CisgICAgICB4ID0gbWFpbjIgKDIsIGFycmF5KTsKKyAg ICB9CisgIGVsc2UKKyAgICB4ID0gbWFpbjIgKGFyZ2MsIGFyZ3YpOworCisg IHJldHVybiB4OworfQorCitpbnQgbWFpbjIgKGludCBhcmdjLCBjaGFyICoq YXJndikKK3sKKyAgaW50IGFycmF5WzEwXVsxMF0sIGFycmF5MlsxMF07Cisg IAorICBhcnJheTJbOl0gPSBhcnJheTJbOiA7ICAvKiB7IGRnLWVycm9yICJl eHBlY3RlZCAnXSciIH0gKi8KKworICByZXR1cm4gMDsKK30gLyogeyBkZy1l cnJvciAiZXhwZWN0ZWQgJzsnIGJlZm9yZSIgfSAqLwpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9u L2Vycm9ycy9wYXJzZXJfZXJyb3JzMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2Vycm9ycy9wYXJzZXJfZXJy b3JzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3 M2ZkMzAKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXJyb3JzL3BhcnNlcl9lcnJv cnMyLmMKQEAgLTAsMCArMSwyNSBAQAorLyoge2RnLWRvIGNvbXBpbGUgfSAq LworLyoge2RnLW9wdGlvbnMgfSAqLworCitpbnQgbWFpbiAoaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQoreworICBpbnQgeCA9IDA7CisgIGlmIChhcmdjID09 IDEpCisgICAgeworICAgICAgY29uc3QgY2hhciAqYXJyYXlbXSA9IHsiYS5v dXQiLCAiNSJ9OworICAgICAgeCA9IG1haW4yICgyLCBhcnJheSk7CisgICAg fQorICBlbHNlCisgICAgeCA9IG1haW4yIChhcmdjLCBhcmd2KTsKKworICBy ZXR1cm4geDsKK30KKworaW50IG1haW4yIChpbnQgYXJnYywgY2hhciAqKmFy Z3YpCit7CisgIGludCBhcnJheVsxMF1bMTBdLCBhcnJheTJbMTBdOworICAK KyAgYXJyYXkyWzpdID0gYXJyYXkyWzE6MjpdIDsgIC8qIHsgZGctZXJyb3Ig ImV4cGVjdGVkIGV4cHJlc3Npb24gYmVmb3JlIiB9ICovCisKKyAgcmV0dXJu IDA7IC8qIHsgZGctZXJyb3IgImV4cGVjdGVkICc7JyBiZWZvcmUiIH0gKi8K K30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1 cy9hcnJheV9ub3RhdGlvbi9lcnJvcnMvcGFyc2VyX2Vycm9yczMuYyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9l cnJvcnMvcGFyc2VyX2Vycm9yczMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5lNWIxMGE0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2Vy cm9ycy9wYXJzZXJfZXJyb3JzMy5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qIHtk Zy1kbyBjb21waWxlIH0gKi8KKy8qIHtkZy1vcHRpb25zIH0gKi8KKworaW50 IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IHggPSAw OworICBpZiAoYXJnYyA9PSAxKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIg KmFycmF5W10gPSB7ImEub3V0IiwgIjUifTsKKyAgICAgIHggPSBtYWluMiAo MiwgYXJyYXkpOworICAgIH0KKyAgZWxzZQorICAgIHggPSBtYWluMiAoYXJn YywgYXJndik7CisKKyAgcmV0dXJuIHg7Cit9CisKK2ludCBtYWluMiAoaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgYXJyYXlbMTBdWzEwXSwg YXJyYXkyWzEwXTsKKyAgCisgIGFycmF5Mls6XSA9IGFycmF5MlsxOjpdIDsg IC8qIHsgZGctZXJyb3IgImV4cGVjdGVkIGV4cHJlc3Npb24gYmVmb3JlIiB9 ICovCisKKyAgcmV0dXJuIDA7IC8qIHsgZGctZXJyb3IgImV4cGVjdGVkICc7 JyBiZWZvcmUiIH0gKi8KK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9lcnJvcnMvcGFyc2Vy X2Vycm9yczQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9h cnJheV9ub3RhdGlvbi9lcnJvcnMvcGFyc2VyX2Vycm9yczQuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTc0OWQ5Ci0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2Fy cmF5X25vdGF0aW9uL2Vycm9ycy9wYXJzZXJfZXJyb3JzNC5jCkBAIC0wLDAg KzEsMjUgQEAKKy8qIHtkZy1kbyBjb21waWxlIH0gKi8KKy8qIHtkZy1vcHRp b25zIH0gKi8KKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikK K3sKKyAgaW50IHggPSAwOworICBpZiAoYXJnYyA9PSAxKQorICAgIHsKKyAg ICAgIGNvbnN0IGNoYXIgKmFycmF5W10gPSB7ImEub3V0IiwgIjUifTsKKyAg ICAgIHggPSBtYWluMiAoMiwgYXJyYXkpOworICAgIH0KKyAgZWxzZQorICAg IHggPSBtYWluMiAoYXJnYywgYXJndik7CisKKyAgcmV0dXJuIHg7Cit9CisK K2ludCBtYWluMiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQg YXJyYXlbMTBdWzEwXSwgYXJyYXkyWzEwXTsKKyAgCisgIGFycmF5Mls6XSA9 IGFycmF5Mls6Ol0gOyAgLyogeyBkZy1lcnJvciAiIGV4cGVjdGVkICddJyBi ZWZvcmUgJzonIHRva2VuIiB9ICovCisKKyAgcmV0dXJuIDA7Cit9CmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlf bm90YXRpb24vZXJyb3JzL3JhbmtfbWlzbWF0Y2guYyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9lcnJvcnMvcmFu a19taXNtYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjE3M2E2MDUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXJyb3JzL3Jhbmtf bWlzbWF0Y2guYwpAQCAtMCwwICsxLDI4IEBACisvKiB7ZGctZG8gY29tcGls ZSB9ICovCisvKiB7ZGctb3B0aW9ucyB9ICovCisKK2ludCBtYWluIChpbnQg YXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCB4ID0gMDsKKyAgaWYgKGFy Z2MgPT0gMSkKKyAgICB7CisgICAgICBjb25zdCBjaGFyICphcnJheVtdID0g eyJhLm91dCIsICI1In07CisgICAgICB4ID0gbWFpbjIgKDIsIGFycmF5KTsK KyAgICB9CisgIGVsc2UKKyAgICB4ID0gbWFpbjIgKGFyZ2MsIGFyZ3YpOwor CisgIHJldHVybiB4OworfQorCitpbnQgbWFpbjIgKGludCBhcmdjLCBjaGFy ICoqYXJndikKK3sKKyAgaW50IHggPSAwOworICBpbnQgYXJyYXlbMTBdWzEw XSwgYXJyYXkyWzEwXTsKKworICBhcnJheVs6XVs6XSA9IGFycmF5WzpdOyAv KiB7IGRnLWVycm9yICJyYW5rIG1pc21hdGNoIGJldHdlZW4iIH0gKi8KKwor ICB4ID0gYXJyYXkyWzpdOyAvKiB7IGRnLWVycm9yICJjYW5ub3QgYmUgc2Nh bGFyIHdoZW4iIH0gKi8KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlv bi9lcnJvcnMvc2VjX2ltcGxpY2l0LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXJyb3JzL3NlY19pbXBsaWNp dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNTI5 M2IKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9j aWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXJyb3JzL3NlY19pbXBsaWNpdC5j CkBAIC0wLDAgKzEsMjUgQEAKKy8qIHtkZy1kbyBjb21waWxlIH0gKi8KKy8q IHtkZy1vcHRpb25zIH0gKi8KKworaW50IG1haW4gKGludCBhcmdjLCBjaGFy ICoqYXJndikKK3sKKyAgaW50IHggPSAwOworICBpZiAoYXJnYyA9PSAxKQor ICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmFycmF5W10gPSB7ImEub3V0Iiwg IjUifTsKKyAgICAgIHggPSBtYWluMiAoMiwgYXJyYXkpOworICAgIH0KKyAg ZWxzZQorICAgIHggPSBtYWluMiAoYXJnYywgYXJndik7CisKKyAgcmV0dXJu IHg7Cit9CisKK2ludCBtYWluMiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQor eworICBpbnQgYXJyYXlbMTBdWzEwXSwgYXJyYXkyWzEwXTsKKworICBhcnJh eVs6XVs6XSA9IF9fc2VjX2ltcGxpY2l0X2luZGV4KDUpICsgYXJyYXlbOl1b Ol07IC8qIHsgZGctZXJyb3IgIl9fc2VjX2ltcGxpY2l0X2luZGV4IGFyZ3Vt ZW50IiB9ICovCisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXJy b3JzL3NlY19pbXBsaWNpdDIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2Np bGstcGx1cy9hcnJheV9ub3RhdGlvbi9lcnJvcnMvc2VjX2ltcGxpY2l0Mi5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MmRhOTcK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxr LXBsdXMvYXJyYXlfbm90YXRpb24vZXJyb3JzL3NlY19pbXBsaWNpdDIuYwpA QCAtMCwwICsxLDI0IEBACisvKiB7ZGctZG8gY29tcGlsZSB9ICovCisvKiB7 ZGctb3B0aW9ucyB9ICovCisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAq KmFyZ3YpCit7CisgIGludCB4ID0gMDsKKyAgaWYgKGFyZ2MgPT0gMSkKKyAg ICB7CisgICAgICBjb25zdCBjaGFyICphcnJheVtdID0geyJhLm91dCIsICI1 In07CisgICAgICB4ID0gbWFpbjIgKDIsIGFycmF5KTsKKyAgICB9CisgIGVs c2UKKyAgICB4ID0gbWFpbjIgKGFyZ2MsIGFyZ3YpOworCisgIHJldHVybiB4 OworfQorCitpbnQgbWFpbjIgKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sK KyAgaW50IGFycmF5WzEwXVsxMF0sIGFycmF5MlsxMF07CisKKyAgYXJyYXlb Ol1bOl0gPSBfX3NlY19pbXBsaWNpdF9pbmRleChhcmdjKSArIGFycmF5Wzpd WzpdOyAvKiB7IGRnLWVycm9yICJfX3NlY19pbXBsaWNpdF9pbmRleCBwYXJh bWV0ZXIiIH0gKi8KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXJy b3JzL3NlY19yZWR1Y2VfbWF4X21pbl9pbmQuYyBiL2djYy90ZXN0c3VpdGUv Z2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9lcnJvcnMvc2VjX3Jl ZHVjZV9tYXhfbWluX2luZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjJlNzRlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXJyb3Jz L3NlY19yZWR1Y2VfbWF4X21pbl9pbmQuYwpAQCAtMCwwICsxLDMxIEBACisv KiB7ZGctZG8gY29tcGlsZSB9ICovCisvKiB7ZGctb3B0aW9ucyB9ICovCisK K2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCB4 ID0gMDsKKyAgaWYgKGFyZ2MgPT0gMSkKKyAgICB7CisgICAgICBjb25zdCBj aGFyICphcnJheVtdID0geyJhLm91dCIsICI1In07CisgICAgICB4ID0gbWFp bjIgKDIsIGFycmF5KTsKKyAgICB9CisgIGVsc2UKKyAgICB4ID0gbWFpbjIg KGFyZ2MsIGFyZ3YpOworCisgIHJldHVybiB4OworfQorCitpbnQgbWFpbjIg KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGFycmF5WzEwXVsx MF0sIGFycmF5MlsxMF07CisgIGludCB4LCB5OworICB4ID0gX19zZWNfcmVk dWNlX21heF9pbmQgKGFycmF5WzpdWzpdKTsgLyogeyBkZy1lcnJvciAiY2Fu bm90IGhhdmUgYXJyYXlzIHdpdGggZGltZW5zaW9uIGdyZWF0ZXIgdGhhbiIg fSAqLworCisgIHkgPSBfX3NlY19yZWR1Y2VfbWF4X2luZCAoYXJyYXkyWzpd KTsgLyogdGhpcyBzaG91bGQgYmUgT0suICovCisKKyAgeCA9IF9fc2VjX3Jl ZHVjZV9taW5faW5kIChhcnJheVs6XVs6XSk7IC8qIHsgZGctZXJyb3IgImNh bm5vdCBoYXZlIGFycmF5cyB3aXRoIGRpbWVuc2lvbiBncmVhdGVyIHRoYW4i IH0gKi8KKworICB5ID0gX19zZWNfcmVkdWNlX21pbl9pbmQgKGFycmF5Mls6 XSk7IC8qIHRoaXMgc2hvdWxkIGJlIE9LLiAqLworCisgIHJldHVybiAwOwor fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVz L2FycmF5X25vdGF0aW9uL2V4ZWN1dGUvYXJyYXlfdGVzdDEuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9leGVj dXRlL2FycmF5X3Rlc3QxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uNzQ1MDJhMwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9leGVjdXRl L2FycmF5X3Rlc3QxLmMKQEAgLTAsMCArMSw5MiBAQAordm9pZCBhYm9ydCAo dm9pZCk7Cit2b2lkIGV4aXQoaW50KTsKKworaW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQoreworICBpbnQgeCA9IDA7CisgIGlmIChhcmdjID09 IDEpCisgICAgeworICAgICAgY29uc3QgY2hhciAqYXJyYXlbXSA9IHsiYS5v dXQiLCAiNSJ9OwkgICAgIAorICAgICAgeCA9IG1haW4yICgyLCBhcnJheSk7 CisgICAgfQorICBlbHNlCisgICAgeCA9IG1haW4yIChhcmdjLCBhcmd2KTsK KyAgICAgIAorICByZXR1cm4geDsKK30KKworaW50IG1haW4yIChpbnQgYXJn YywgY2hhciAqKmFyZ3YpCit7CisgIGludCBhcnJheVsxMF0sIGlpID0gMCwg eCA9IDIsIHo9IDAgLCB5ID0gMCA7CisKKyAgZm9yIChpaSA9IDA7IGlpIDwg MTA7IGlpKyspCisgICAgYXJyYXlbaWldID0gMTA7CisKKyAgYXJyYXlbMDox MDoxXSA9IDE1OworCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQor ICAgIGlmIChhcnJheVtpaV0gIT0gMTUpCisgICAgICBhYm9ydCAoKTsKKyAg CisKKyAgYXJyYXlbMDo1OjJdID0gMjA7CisKKyAgZm9yIChpaSA9IDA7IGlp IDwgMTA7IGlpICs9IDIpCisgICAgaWYgKGFycmF5W2lpXSAhPSAyMCkKKyAg ICAgIGFib3J0ICgpOworCisKKyAgeCA9IGF0b2koYXJndlsxXSk7CisgIHog PSAoMTAtYXRvaShhcmd2WzFdKSkvYXRvaShhcmd2WzFdKTsKKworICBhcnJh eVt4OjU6el0gPSA1MDsKKyAgCisgIGZvciAoaWkgPSB4OyBpaSA8IDEwOyBp aSArPSB6KQorICAgIGlmIChhcnJheVtpaV0gIT0gNTApCisgICAgICBhYm9y dCAoKTsKKworICB4ID0gYXRvaShhcmd2WzFdKTsKKyAgeiA9ICgxMC1hdG9p KGFyZ3ZbMV0pKS9hdG9pKGFyZ3ZbMV0pOworICB5ID0gMTAtYXRvaShhcmd2 WzFdKTsKKyAgCisgIGFycmF5W3g6eTp6XSA9IDUwNTsKKyAgZm9yIChpaSA9 IHg7IGlpIDwgMTA7IGlpICs9IHopCisgICAgaWYgKGFycmF5W2lpXSAhPSA1 MDUpCisgICAgICBhYm9ydCAoKTsKKyAgICAKKworICB4ID0gYXRvaShhcmd2 WzFdKTsKKyAgeiA9ICgxMC1hdG9pKGFyZ3ZbMV0pKS9hdG9pKGFyZ3ZbMV0p OworICB5ID0gMTAtYXRvaShhcmd2WzFdKTsKKyAgCisgIGFycmF5W3g6eToo KDEwLWF0b2koYXJndlsxXSkpL2F0b2koYXJndlsxXSkpXSA9IDI1OworCisg IGZvciAoaWkgPSB4OyBpaSA8IDEwOyBpaSArPSB6KQorICAgIGlmIChhcnJh eVtpaV0gIT0gMjUpCisgICAgICBhYm9ydCAoKTsKKyAgCisgIHggPSBhdG9p KGFyZ3ZbMV0pOworICB6ID0gKDEwLWF0b2koYXJndlsxXSkpL2F0b2koYXJn dlsxXSk7CisgIHkgPSAxMC1hdG9pKGFyZ3ZbMV0pOworIAorICBhcnJheVth dG9pKGFyZ3ZbMV0pOigxMC1hdG9pKGFyZ3ZbMV0pKTooKDEwLWF0b2koYXJn dlsxXSkpL2F0b2koYXJndlsxXSkpXSA9CisgICAgMTQwMDsKKyAgZm9yIChp aSA9IHg7IGlpIDwgMTA7IGlpICs9IHopCisgICAgaWYgKGFycmF5W2lpXSAh PSAxNDAwKQorICAgICAgYWJvcnQgKCk7CisgIAorCisgIGFycmF5W2F0b2ko IjUiKTo1OjFdID0gNTU1NTsKKyAgCisgIGZvciAoaWkgPSBhdG9pICgiNSIp OyBpaSA8IDEwOyBpaSsrKQorICAgIGlmIChhcnJheVtpaV0gIT0gNTU1NSkK KyAgICAgIGFib3J0ICgpOworICAKKworICBhcnJheVthdG9pKCI1Iik6YXRv aSgiNSIpOmF0b2koIjEiKV0gPSA5OTk5OworICBmb3IgKGlpID0gYXRvaSAo IjUiKTsgaWkgPCAoYXRvaSAoIjUiKSArIGF0b2kgKCI1IikpOyBpaSArPSBh dG9pICgiMSIpKQorICAgIGlmIChhcnJheVtpaV0gIT0gOTk5OSkKKyAgICAg IGFib3J0ICgpOworICBleGl0ICgwKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlf bm90YXRpb24vZXhlY3V0ZS9hcnJheV90ZXN0Mi5jIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2V4ZWN1dGUvYXJy YXlfdGVzdDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4wODlmMGY1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2V4ZWN1dGUvYXJyYXlf dGVzdDIuYwpAQCAtMCwwICsxLDEzMiBAQAordm9pZCBhYm9ydCAodm9pZCk7 Cit2b2lkIGV4aXQoaW50KTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQoreworICBpbnQgeCA9IDA7CisgIGlmIChhcmdjID09IDEpCisg ICAgeworICAgICAgY29uc3QgY2hhciAqYXJyYXlbXSA9IHsiYS5vdXQiLCAi NSJ9OwkgICAgIAorICAgICAgeCA9IG1haW4yICgyLCBhcnJheSk7CisgICAg fQorICBlbHNlCisgICAgeCA9IG1haW4yIChhcmdjLCBhcmd2KTsKKyAgICAg IAorICByZXR1cm4geDsKK30KKworCitpbnQgbWFpbjIoaW50IGFyZ2MsIGNo YXIgKiphcmd2KQoreworICBpbnQgYXJyYXlbMTBdLCBhcnJheTJbMTBdLCBp aSA9IDAsIHggPSAyLCB6PSAwICwgeSA9IDAgOworCisgIGZvciAoaWkgPSAw OyBpaSA8IDEwOyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5W2lpXSA9IDEw OworICAgICAgYXJyYXkyW2lpXSA9IDUwMDAwMDA7CisgICAgfQorCisgIGFy cmF5MlswOjEwOjFdID0gYXJyYXlbMDoxMDoxXTsKKworICBmb3IgKGlpID0g MDsgaWkgPCAxMDsgaWkrKykKKyAgICBpZiAoYXJyYXkyW2lpXSAhPSBhcnJh eVtpaV0pCisgICAgICBhYm9ydCAoKTsKKworICBmb3IgKGlpID0gMDsgaWkg PCAxMDsgaWkrKykKKyAgICB7CisgICAgICBhcnJheVtpaV0gPSAxMDsKKyAg ICAgIGFycmF5MltpaV0gPSA1MDAwMDAwOworICAgIH0KKyAgCisgIGFycmF5 MlswOjU6Ml0gPSBhcnJheVswOjU6Ml07CisKKyAgZm9yIChpaSA9IDA7IGlp IDwgMTA7IGlpICs9IDIpCisgICAgaWYgKGFycmF5W2lpXSAhPSBhcnJheTJb aWldKQorICAgICAgYWJvcnQgKCk7CisgIAorICBmb3IgKGlpID0gMDsgaWkg PCAxMDsgaWkrKykKKyAgICB7CisgICAgICBhcnJheVtpaV0gPSAxMDsKKyAg ICAgIGFycmF5MltpaV0gPSA1MDAwMDAwOworICAgIH0KKyAgeCA9IGF0b2ko YXJndlsxXSk7CisgIHogPSAoMTAtYXRvaShhcmd2WzFdKSkvYXRvaShhcmd2 WzFdKTsKKyAKKyAgYXJyYXkyW3g6NTp6XSA9IGFycmF5W3g6NTp6XTsKKwor ICBmb3IgKGlpID0geDsgaWkgPCA1OyBpaSArPSB6KQorICAgIGlmIChhcnJh eTJbaWldICE9IGFycmF5W2lpXSkKKyAgICAgIGFib3J0ICgpOworCisgIGZv ciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5 W2lpXSA9IDUwMDsKKyAgICAgIGFycmF5MltpaV0gPSAxMDAwMDAwOworICAg IH0KKyAgeCA9IGF0b2koYXJndlsxXSk7CisgIHogPSAoMTAtYXRvaShhcmd2 WzFdKSkvYXRvaShhcmd2WzFdKTsKKyAgeSA9IDEwLWF0b2koYXJndlsxXSk7 CisKKyAgYXJyYXkyW3g6eTp6XSA9IGFycmF5W3g6eTp6XTsKKyAgZm9yIChp aSA9IHg7IGlpIDwgMTA7IGlpID0gaWkgKyB6KQorICAgIGlmIChhcnJheTJb aWldICE9IGFycmF5W2lpXSkKKyAgICAgIGFib3J0ICgpOworCisgIGZvciAo aWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5W2lp XSAgPSA1MDA7CisgICAgICBhcnJheTJbaWldID0gMTAwMDAwMDsKKyAgICB9 CisgIHggPSBhdG9pKGFyZ3ZbMV0pOworICB6ID0gKDEwLWF0b2koYXJndlsx XSkpL2F0b2koYXJndlsxXSk7CisgIHkgPSAxMC1hdG9pKGFyZ3ZbMV0pOwor CisgIGFycmF5W3g6eTooKDEwLWF0b2koYXJndlsxXSkpL2F0b2koYXJndlsx XSkpXSA9IAorICAgIGFycmF5Mlt4Onk6KCgxMC1hdG9pKGFyZ3ZbMV0pKS9h dG9pKGFyZ3ZbMV0pKV07CisKKyAgZm9yIChpaSA9IHg7IGlpIDwgMTA7IGlp ICs9IHopCisgICAgaWYgKGFycmF5W2lpXSAhPSBhcnJheTJbaWldKQorICAg ICAgYWJvcnQgKCk7CisgIAorICAKKyAgeCA9IGF0b2koYXJndlsxXSk7Cisg IHogPSAoMTAtYXRvaShhcmd2WzFdKSkvYXRvaShhcmd2WzFdKTsKKyAgeSA9 IDEwLWF0b2koYXJndlsxXSk7CisgIAorICBmb3IgKGlpID0gMDsgaWkgPCAx MDsgaWkrKykKKyAgICB7CisgICAgICBhcnJheVtpaV0gID0gNTAwOworICAg ICAgYXJyYXkyW2lpXSA9IDEwMDAwMDA7CisgICAgfQorICAKKyAgYXJyYXlb YXRvaShhcmd2WzFdKTooMTAtYXRvaShhcmd2WzFdKSk6KCgxMC1hdG9pKGFy Z3ZbMV0pKS9hdG9pKGFyZ3ZbMV0pKV0gPQorICAgIGFycmF5MlthdG9pKGFy Z3ZbMV0pOigxMC1hdG9pKGFyZ3ZbMV0pKTooKDEwLWF0b2koYXJndlsxXSkp L2F0b2koYXJndlsxXSkpXTsKKyAgZm9yIChpaSA9IHg7IGlpIDwgMTA7IGlp ICs9IHopCisgICAgaWYgKGFycmF5W2lpXSAhPSBhcnJheTJbaWldKQorICAg ICAgYWJvcnQgKCk7CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKysp CisgICAgeworICAgICAgYXJyYXlbaWldICA9IDQ7CisgICAgICBhcnJheTJb aWldID0gMjsKKyAgICB9CisKKyAgYXJyYXlbYXRvaSgiNSIpOjU6MV0gPSBh cnJheTJbYXRvaSgiNSIpOjU6MV07CisKKyAgZm9yIChpaSA9IGF0b2kgKCI1 Iik7IGlpIDwgMTA7IGlpKyspCisgICAgaWYgKGFycmF5W2lpXSAhPSBhcnJh eTJbaWldKQorICAgICAgYWJvcnQgKCk7CisgIAorICBmb3IgKGlpID0gMDsg aWkgPCAxMDsgaWkrKykKKyAgICB7CisgICAgICBhcnJheVtpaV0gID0gNTsK KyAgICAgIGFycmF5MltpaV0gPSAxOworICAgIH0KKyAgYXJyYXlbYXRvaSgi NSIpOmF0b2koIjUiKTphdG9pKCIxIildID0gYXJyYXkyW2F0b2koIjUiKTph dG9pKCI1Iik6YXRvaSgiMSIpXTsKKworICBmb3IgKGlpID0gNTsgaWkgPCAx MDsgaWkrKykKKyAgICBpZiAoYXJyYXkyW2lpXSAhPSBhcnJheVtpaV0pCisg ICAgICBhYm9ydCAoKTsKKyAKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRp b24vZXhlY3V0ZS9hcnJheV90ZXN0X05ELmMgYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXhlY3V0ZS9hcnJheV90 ZXN0X05ELmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u M2Y3NWYxNAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9leGVjdXRlL2FycmF5X3Rl c3RfTkQuYwpAQCAtMCwwICsxLDEwOCBAQAordm9pZCBhYm9ydCAodm9pZCk7 Cit2b2lkIGV4aXQoaW50KTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQoreworICBpbnQgeCA9IDA7CisgIGlmIChhcmdjID09IDEpCisg ICAgeworICAgICAgY29uc3QgY2hhciAqYXJyYXlbXSA9IHsiYS5vdXQiLCAi MTAiLCAiMTUifTsJICAgICAKKyAgICAgIHggPSBtYWluMiAoMywgYXJyYXkp OworICAgIH0KKyAgZWxzZSBpZiAoYXJnYyA9PSAzKQorICAgIHggPSBtYWlu MiAoYXJnYywgYXJndik7CisgIGVsc2UKKyAgICBhYm9ydCAoKTsKKyAgICAg IAorICByZXR1cm4geDsKK30KKworaW50IG1haW4yKGludCBhcmdjLCBjaGFy ICoqYXJndikKK3sgIAorICBpbnQgYXJyYXlbMTBdWzE1XSwgaWkgPSAwLCBq aiA9IDAseCA9IDAsIHo9IDEgLCB5ID0gMTAgOworICBpbnQgYXJyYXlfMlsx MF1bMTVdOworIAorCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKSB7 CisgICAgZm9yIChqaiA9IDA7IGpqPCAxNTsgamorKykgeworICAgICAgYXJy YXlbaWldW2pqXSA9IGlpK2pqOworICAgICAgYXJyYXlfMltpaV1bampdID0g MDsKKyAgICB9CisgIH0KKyAgYXJyYXlfMlswOjU6Ml1bMDo1OjNdID0gYXJy YXlbMDo1OjJdWzA6NTozXSArIDEgKyA1ICsgYXJyYXlbMF1bNV0gKyB4Owor CisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSArPSAyKQorICAgIHsKKyAg ICAgIGZvciAoamogPSAwOyBqaiA8IDE1OyBqaiArPSAzKQorCXsKKwkgIGlm IChhcnJheV8yW2lpXVtqal0gIT0gYXJyYXlbaWldW2pqXSArIDEgKyA1ICsg YXJyYXlbMF1bNV0gKyB4KQorCSAgICBhYm9ydCAoKTsKKwl9CisgICAgfQor CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspIHsKKyAgICBmb3Ig KGpqID0gMDsgamo8IDE1OyBqaisrKSB7CisgICAgICBhcnJheVtpaV1bampd ID0gaWkramo7CisgICAgICBhcnJheV8yW2lpXVtqal0gPSAwOworICAgIH0K KyAgfQorICB4ID0gYXRvaShhcmd2WzFdKTsKKyAgeSA9IGF0b2koYXJndlsy XSk7CisgIGFycmF5XzJbMDp4OjFdWzA6eToxXSA9IGFycmF5WzA6eDoxXVsw Onk6MV0gKyB4ICsgeSArIGFycmF5WzA6eDoxXVswOnk6MV07CisKKyAgZm9y IChpaSA9IDA7IGlpIDwgeDsgaWkrKykKKyAgICB7CisgICAgICBmb3IgKGpq ID0gMDsgamogPCB5OyBqaisrKQorCXsKKwkgIGlmIChhcnJheV8yW2lpXVtq al0gIT0gYXJyYXlbaWldW2pqXSArIHggKyB5ICsgYXJyYXlbaWldW2pqXSkK KwkgICAgYWJvcnQgKCk7CisJfQorICAgIH0KKworICBmb3IgKGlpID0gMDsg aWkgPCAxMDsgaWkrKykgeworICAgIGZvciAoamogPSAwOyBqajwgMTU7IGpq KyspIHsKKyAgICAgIGFycmF5W2lpXVtqal0gPSBpaStqajsKKyAgICAgIGFy cmF5XzJbaWldW2pqXSA9IDA7CisgICAgfQorICB9CisgIHggPSBhdG9pKGFy Z3ZbMV0pOworICB5ID0gYXRvaShhcmd2WzJdKTsKKyAgeiA9ICgyMC0gYXRv aSAoYXJndlsxXSkpL2F0b2koYXJndlsxXSk7CisgIC8qICgyMC0xMCkvMTAg ZXZhbHVhdGVzIHRvIDEgYWxsIHRoZSB0aW1lIDotKS4gKi8KKyAgYXJyYXlf MlswOng6el1bMDp5OnpdID0gYXJyYXlbMDp4OnpdWzA6eTp6XSArIGFycmF5 WzA6eDp6XVswOnk6el0gKyB5ICsgejsKKyAgCisgIGZvciAoaWkgPSAwOyBp aSA8IHg7IGlpICs9IHopCisgICAgeworICAgICAgZm9yIChqaiA9IDA7IGpq IDwgeTsgamogKz0geikKKwl7CisJICBpZiAoYXJyYXlfMltpaV1bampdICE9 IGFycmF5W2lpXVtqal0gKyBhcnJheVtpaV1bampdICsgeSArIHopCisJICAg IGFib3J0ICgpOworCX0KKyAgICB9CisKKworIAorICBmb3IgKGlpID0gMDsg aWkgPCAxMDsgaWkrKykgeworICAgIGZvciAoamogPSAwOyBqajwgMTU7IGpq KyspIHsKKyAgICAgIGFycmF5W2lpXVtqal0gPSBpaStqajsKKyAgICAgIGFy cmF5XzJbaWldW2pqXSA9IDA7CisgICAgfQorICB9CisgIHggPSBhcmdjLTM7 CisgIHkgPSAyMC1hdG9pKGFyZ3ZbMV0pOworICB6ID0gKDIwLSBhdG9pIChh cmd2WzFdKSkvYXRvaShhcmd2WzFdKTsKKyAgLyogKDIwLTEwKS8xMCBldmFs dWF0ZXMgdG8gMSBhbGwgdGhlIHRpbWUgOi0pLiAqLworICBhcnJheV8yWyhh cmdjLTMpOigyMC1hdG9pKGFyZ3ZbMV0pKTooMjAtYXRvaShhcmd2WzFdKSkv YXRvaShhcmd2WzFdKV1bKGFyZ2MtMyk6KDMwLWF0b2koYXJndlsyXSkpOiAo KDMwLWF0b2koYXJndlsyXSkpL2F0b2koYXJndlsyXSkpXSA9IGFycmF5Wyhh cmdjLTMpOjIwLWF0b2koYXJndlsxXSk6KDIwLWF0b2koYXJndlsxXSkpL2F0 b2koYXJndlsxXSldWyhhcmdjLTMpOigzMC1hdG9pKGFyZ3ZbMl0pKTogKDMw LWF0b2koYXJndlsyXSkpL2F0b2koYXJndlsyXSldICsgYXJyYXlbKGFyZ2Mt Myk6MjAtYXRvaShhcmd2WzFdKTooMjAtYXRvaShhcmd2WzFdKSkvYXRvaShh cmd2WzFdKV1bKGFyZ2MtMyk6KDMwLWF0b2koYXJndlsyXSkpOiAoMzAtYXRv aShhcmd2WzJdKSkvYXRvaShhcmd2WzJdKV0gKiBhcnJheVsoYXJnYy0zKToy MC1hdG9pKGFyZ3ZbMV0pOigyMC1hdG9pKGFyZ3ZbMV0pKS9hdG9pKGFyZ3Zb MV0pXVsoYXJnYy0zKTooMzAtYXRvaShhcmd2WzJdKSk6ICgzMC1hdG9pKGFy Z3ZbMl0pKS9hdG9pKGFyZ3ZbMl0pXTsKKyAgCisgIGZvciAoaWkgPSAwOyBp aSA8IDEwOyBpaSsrKQorICAgIHsKKyAgICAgIGZvciAoamogPSAwOyBqaiA8 IDE1OyBqaisrKQorCXsKKwkgIGlmIChhcnJheV8yW2lpXVtqal0gIT0gYXJy YXlbaWldW2pqXSArIGFycmF5W2lpXVtqal0gKiBhcnJheVtpaV1bampdKQor CSAgICBhYm9ydCAoKTsKKwl9CisgICAgfQorICBleGl0ICgwKTsKKyAgcmV0 dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9j aWxrLXBsdXMvYXJyYXlfbm90YXRpb24vZXhlY3V0ZS9idWlsdGluX2ZuX2N1 c3RvbS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5 X25vdGF0aW9uL2V4ZWN1dGUvYnVpbHRpbl9mbl9jdXN0b20uYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGUwOTI0Ci0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2Fy cmF5X25vdGF0aW9uL2V4ZWN1dGUvYnVpbHRpbl9mbl9jdXN0b20uYwpAQCAt MCwwICsxLDcwIEBACisjZGVmaW5lIEhBVkVfSU8gMAorCisjaWYgSEFWRV9J TworI2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKy8qICNpbmNsdWRlIDxz dGRsaWIuaD4gKi8KKwordm9pZCBhYm9ydCAodm9pZCk7Cit2b2lkIGV4aXQg KGludCk7CisKK2RvdWJsZSBteV9mdW5jIChkb3VibGUgeCwgZG91YmxlIHkp Cit7CisgIGlmICh4ID4geSkKKyAgICByZXR1cm4geDsKKyAgZWxzZQorICAg IHJldHVybiB5OworfQorCisKKy8qIGNoYXIgX19zZWNfcmVkdWNlX2FkZCAo aW50ICopOyAqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQor eworICBpbnQgaWksYXJyYXlbMTBdLCB5ID0gMCwgeV9pbnQgPSAwLCBhcnJh eTJbMTBdOworICBkb3VibGUgeCwgeXksIGFycmF5M1sxMF0sIGFycmF5NFsx MF07CisgIGRvdWJsZSBtYXhfdmFsdWUgPSAwLjAwMCwgbWluX3ZhbHVlID0g MC4wMDAsIGFkZF92YWx1ZSwgbXVsX3ZhbHVlID0gMS4wMDsKKyAgaW50IG1h eF9pbmRleCA9IDAsIG1pbl9pbmRleCA9IDA7CisgIGZvciAoaWkgPSAwOyBp aSA8IDEwOyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5W2lpXSA9IDEraWk7 CisgICAgICBhcnJheTJbaWldPSAyOyAKKyAgICB9CisKKyAgZm9yIChpaSA9 IDA7IGlpIDwgMTA7IGlpKyspCisgICAgeworICAgICAgaWYgKGlpJTIgJiYg aWkpCisJYXJyYXkzW2lpXSA9IChkb3VibGUpKDEuMDAwMC8oZG91YmxlKWlp KTsKKyAgICAgIGVsc2UKKwlhcnJheTNbaWldID0gKGRvdWJsZSkgaWkgKyAw LjEwOworICAgICAgYXJyYXk0W2lpXSA9IChkb3VibGUpICgxLjAwMDAwLyAo ZG91YmxlKShpaSsxKSk7CisgICAgfQorCisgIC8qIGFycmF5WzpdID0gNTsg Ki8KKyAgeCA9IF9fc2VjX3JlZHVjZSAoMCwgYXJyYXkzWzpdICogYXJyYXk0 WzpdLCBteV9mdW5jKTsgCisgIHkgPSBfX3NlY19yZWR1Y2VfbWF4X2luZCAo IGFycmF5M1s6XSAqIGFycmF5NFs6XSk7CisKKyAgLyogSW5pdGlhbGl6ZSBp dCB0byB0aGUgZmlyc3QgdmFyaWFibGUuICAqLworICBtYXhfdmFsdWUgPSBh cnJheTNbMF0gKiBhcnJheTRbMF07CisgIGZvciAoaWkgPSAwOyBpaSA8IDEw OyBpaSsrKQorICAgIGlmIChhcnJheTNbaWldICogYXJyYXk0W2lpXSA+IG1h eF92YWx1ZSkgeworICAgICAgbWF4X3ZhbHVlID0gYXJyYXkzW2lpXSAqIGFy cmF5NFtpaV07CisgICAgICBtYXhfaW5kZXggPSBpaTsKKyAgICB9CisgICAg CisgIAorICAKKyNpZiBIQVZFX0lPCisgIGZvciAoaWkgPSAwOyBpaSA8IDEw OyBpaSsrKSAKKyAgICBwcmludGYoIiU1LjNmICIsIGFycmF5M1tpaV0gKiBh cnJheTRbaWldKTsKKyAgcHJpbnRmKCJcbiIpOworICBwcmludGYoIk1heCA9 ICU1LjNmXHQgTWF4IEluZGV4ID0gJTJkXG4iLCB4LCB5KTsKKyNlbmRpZgor CisgIGlmICh4ICE9IG1heF92YWx1ZSkKKyAgICBhYm9ydCAoKTsKKworICBp ZiAoeSAhPSBtYXhfaW5kZXgpCisgICAgYWJvcnQgKCk7CisKKyAgcmV0dXJu IDA7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxr LXBsdXMvYXJyYXlfbm90YXRpb24vZXhlY3V0ZS9idWlsdGluX2ZuX211dGF0 aW5nLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlf bm90YXRpb24vZXhlY3V0ZS9idWlsdGluX2ZuX211dGF0aW5nLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwNGE0ZgotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9h cnJheV9ub3RhdGlvbi9leGVjdXRlL2J1aWx0aW5fZm5fbXV0YXRpbmcuYwpA QCAtMCwwICsxLDcwIEBACisjZGVmaW5lIEhBVkVfSU8gMAorCisjaWYgSEFW RV9JTworI2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKy8qICNpbmNsdWRl IDxzdGRsaWIuaD4gKi8KKwordm9pZCBhYm9ydCAodm9pZCk7Cit2b2lkIGV4 aXQgKGludCk7CisKK3ZvaWQgbXlfZnVuYyAoZG91YmxlICp4LCBkb3VibGUg eSkKK3sKKyAgaWYgKCp4IDwgeSkKKyAgICAqeCA9IHk7Cit9CisKKworaW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgaWksYXJy YXlbMTBdLCB5ID0gMCwgeV9pbnQgPSAwLCBhcnJheTJbMTBdOworICBkb3Vi bGUgeCwgeXksIGFycmF5M1sxMF0sIGFycmF5NFsxMF07CisgIGRvdWJsZSBt YXhfdmFsdWUgPSAwLjAwMCwgbWluX3ZhbHVlID0gMC4wMDAsIGFkZF92YWx1 ZSwgbXVsX3ZhbHVlID0gMS4wMDsKKyAgaW50IG1heF9pbmRleCA9IDAsIG1p bl9pbmRleCA9IDA7CisjaWYgMSAKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7 IGlpKyspCisgICAgeworICAgICAgYXJyYXlbaWldID0gMStpaTsKKyAgICAg IGFycmF5MltpaV09IDI7IAorICAgIH0KKworICBmb3IgKGlpID0gMDsgaWkg PCAxMDsgaWkrKykKKyAgICB7CisgICAgICBpZiAoaWklMiAmJiBpaSkKKwlh cnJheTNbaWldID0gKGRvdWJsZSkoMS4wMDAwLyhkb3VibGUpaWkpOworICAg ICAgZWxzZQorCWFycmF5M1tpaV0gPSAoZG91YmxlKSBpaSArIDAuMTA7Cisg ICAgICBhcnJheTRbaWldID0gKGRvdWJsZSkgKDEuMDAwMDAvIChkb3VibGUp KGlpKzEpKTsKKyAgICB9CisjZW5kaWYgCisgIC8qIGFycmF5WzpdID0gNTsg Ki8KKyAgX19zZWNfcmVkdWNlX211dGF0aW5nICgmeCwgYXJyYXkzWzpdICog YXJyYXk0WzpdLCBteV9mdW5jKTsgCisjaWYgMQorICB5ID0gX19zZWNfcmVk dWNlX21heF9pbmQgKCBhcnJheTNbOl0gKiBhcnJheTRbOl0pOworCisgIC8q IEluaXRpYWxpemUgaXQgdG8gdGhlIGZpcnN0IHZhcmlhYmxlLiAgKi8KKyAg bWF4X3ZhbHVlID0gYXJyYXkzWzBdICogYXJyYXk0WzBdOworICBmb3IgKGlp ID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBpZiAoYXJyYXkzW2lpXSAqIGFy cmF5NFtpaV0gPiBtYXhfdmFsdWUpIHsKKyAgICAgIG1heF92YWx1ZSA9IGFy cmF5M1tpaV0gKiBhcnJheTRbaWldOworICAgICAgbWF4X2luZGV4ID0gaWk7 CisgICAgfQorICAgIAorICAKKyAgCisjaWYgSEFWRV9JTworICBmb3IgKGlp ID0gMDsgaWkgPCAxMDsgaWkrKykgCisgICAgcHJpbnRmKCIlNS4zZiAiLCBh cnJheTNbaWldICogYXJyYXk0W2lpXSk7CisgIHByaW50ZigiXG4iKTsKKyAg cHJpbnRmKCJNYXggPSAlNS4zZlx0IE1heCBJbmRleCA9ICUyZFxuIiwgeCwg eSk7CisgIHByaW50ZigiTWF4ID0gJTUuM2ZcdCBNYXggSW5kZXggPSAlMmRc biIsIG1heF92YWx1ZSwgbWF4X2luZGV4KTsKKyNlbmRpZgorCisgIGlmICh4 ICE9IG1heF92YWx1ZSkKKyAgICBhYm9ydCAoKTsKKworICBpZiAoeSAhPSBt YXhfaW5kZXgpCisgICAgYWJvcnQgKCk7CisjZW5kaWYKKyAgcmV0dXJuIDA7 Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBs dXMvYXJyYXlfbm90YXRpb24vZXhlY3V0ZS9idWlsdGluX2Z1bmNfZG91Ymxl LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90 YXRpb24vZXhlY3V0ZS9idWlsdGluX2Z1bmNfZG91YmxlLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyMDNiZgotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJh eV9ub3RhdGlvbi9leGVjdXRlL2J1aWx0aW5fZnVuY19kb3VibGUuYwpAQCAt MCwwICsxLDEyOSBAQAorI2RlZmluZSBIQVZFX0lPIDAKKworI2lmIEhBVkVf SU8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCisvKiAjaW5jbHVkZSA8 c3RkbGliLmg+ICovCisKK3ZvaWQgYWJvcnQgKHZvaWQpOwordm9pZCBleGl0 IChpbnQpOworCisvKiBjaGFyIF9fc2VjX3JlZHVjZV9hZGQgKGludCAqKTsg Ki8KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50 IGlpLGFycmF5WzEwXSwgeSA9IDAsIHlfaW50ID0gMCwgYXJyYXkyWzEwXTsK KyAgZG91YmxlIHgsIHl5LCBhcnJheTNbMTBdLCBhcnJheTRbMTBdOworICBk b3VibGUgbWF4X3ZhbHVlID0gMC4wMDAsIG1pbl92YWx1ZSA9IDAuMDAwLCBh ZGRfdmFsdWUsIG11bF92YWx1ZSA9IDEuMDA7CisgIGludCBtYXhfaW5kZXgg PSAwLCBtaW5faW5kZXggPSAwOworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsg aWkrKykKKyAgICB7CisgICAgICBhcnJheVtpaV0gPSAxK2lpOworICAgICAg YXJyYXkyW2lpXT0gMjsgCisgICAgfQorCisgIGZvciAoaWkgPSAwOyBpaSA8 IDEwOyBpaSsrKQorICAgIHsKKyAgICAgIGlmIChpaSUyICYmIGlpKQorCWFy cmF5M1tpaV0gPSAoZG91YmxlKSgxLjAwMDAvKGRvdWJsZSlpaSk7CisgICAg ICBlbHNlCisJYXJyYXkzW2lpXSA9IChkb3VibGUpIGlpICsgMC4xMDsKKyAg ICAgIGFycmF5NFtpaV0gPSAoZG91YmxlKSAoMS4wMDAwMC8gKGRvdWJsZSko aWkrMSkpOworICAgIH0KKworICAvKiBhcnJheVs6XSA9IDU7ICovCisgIHgg PSBfX3NlY19yZWR1Y2VfbWF4IChhcnJheTNbOl0gKiBhcnJheTRbOl0pOyAK KyAgeSA9IF9fc2VjX3JlZHVjZV9tYXhfaW5kICggYXJyYXkzWzpdICogYXJy YXk0WzpdKTsKKworICAvKiBJbml0aWFsaXplIGl0IHRvIHRoZSBmaXJzdCB2 YXJpYWJsZS4gICovCisgIG1heF92YWx1ZSA9IGFycmF5M1swXSAqIGFycmF5 NFswXTsKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgaWYg KGFycmF5M1tpaV0gKiBhcnJheTRbaWldID4gbWF4X3ZhbHVlKSB7CisgICAg ICBtYXhfdmFsdWUgPSBhcnJheTNbaWldICogYXJyYXk0W2lpXTsKKyAgICAg IG1heF9pbmRleCA9IGlpOworICAgIH0KKyAgICAKKyAgCisgIAorI2lmIEhB VkVfSU8KKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspIAorICAgIHBy aW50ZigiJTUuM2YgIiwgYXJyYXkzW2lpXSAqIGFycmF5NFtpaV0pOworICBw cmludGYoIlxuIik7CisgIHByaW50ZigiTWF4ID0gJTUuM2ZcdCBNYXggSW5k ZXggPSAlMmRcbiIsIHgsIHkpOworI2VuZGlmCisKKyAgaWYgKHggIT0gbWF4 X3ZhbHVlKQorICAgIGFib3J0ICgpOworCisgIGlmICh5ICE9IG1heF9pbmRl eCkKKyAgICBhYm9ydCAoKTsKKworICB4ID0gX19zZWNfcmVkdWNlX21pbiAo YXJyYXkzWzpdICogYXJyYXk0WzpdKTsgCisgIHkgPSBfX3NlY19yZWR1Y2Vf bWluX2luZCAoIGFycmF5M1s6XSAqIGFycmF5NFs6XSk7IAorI2lmIEhBVkVf SU8KKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspIAorICAgIHByaW50 ZigiJTUuM2YgIiwgYXJyYXkzW2lpXSAqIGFycmF5NFtpaV0pOworICBwcmlu dGYoIlxuIik7CisgIHByaW50ZigiTWluID0gJTUuM2ZcdCBNaW4gSW5kZXgg PSAlMmRcbiIsIHgsIHkpOworI2VuZGlmCisKKyAgLyogSW5pdGlhbGl6ZSBp dCB0byB0aGUgZmlyc3QgdmFyaWFibGUuICAqLworICBtaW5fdmFsdWUgPSBh cnJheTNbMF0gKiBhcnJheTRbMF07CisgIGZvciAoaWkgPSAwOyBpaSA8IDEw OyBpaSsrKQorICAgIGlmIChhcnJheTNbaWldICogYXJyYXk0W2lpXSA8IG1p bl92YWx1ZSkgeworICAgICAgbWluX3ZhbHVlID0gYXJyYXkzW2lpXSAqIGFy cmF5NFtpaV07CisgICAgICBtaW5faW5kZXggPSBpaTsKKyAgICB9CisKKyAg aWYgKHggIT0gbWluX3ZhbHVlKQorICAgIGFib3J0ICgpOworICBpZiAoeSAh PSBtaW5faW5kZXgpCisgICAgYWJvcnQgKCk7CisKKyAgeCA9IF9fc2VjX3Jl ZHVjZV9hZGQgKGFycmF5M1s6XSAqIGFycmF5NFs6XSk7IAorICB5eSA9IF9f c2VjX3JlZHVjZV9tdWwgKCBhcnJheTNbOl0gKiBhcnJheTRbOl0pOyAKKyNp ZiBIQVZFX0lPCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKSAKKyAg ICBwcmludGYoIiU1LjNmICIsIGFycmF5M1tpaV0gKiBhcnJheTRbaWldKTsK KyAgcHJpbnRmKCJcbiIpOworICBwcmludGYoIkFkZCA9ICU1LjNmXHQgTXVs ID0gJWZcbiIsIHgsIHl5KTsKKyNlbmRpZgorCisgICAvKiBJbml0aWFsaXpl IGl0IHRvIHRoZSBmaXJzdCB2YXJpYWJsZS4gICovCisgIGFkZF92YWx1ZSA9 IDAuMDAwMDsKKyAgbXVsX3ZhbHVlID0gMS4wMDAwOworICBmb3IgKGlpID0g MDsgaWkgPCAxMDsgaWkrKykKKyAgICB7CisgICAgICBhZGRfdmFsdWUgKz0g KGFycmF5M1tpaV0gKiBhcnJheTRbaWldKTsKKyAgICAgIG11bF92YWx1ZSAq PSAoYXJyYXkzW2lpXSAqIGFycmF5NFtpaV0pOworICAgIH0KKworICBpZiAo eCAhPSBhZGRfdmFsdWUpCisgICAgYWJvcnQgKCk7CisgIGlmICh5eSAhPSBt dWxfdmFsdWUpCisgICAgYWJvcnQgKCk7CisgIAorICBmb3IgKGlpID0gMDsg aWkgPCAxMDsgaWkrKykKKyAgICB7CisgICAgICBpZiAoaWklMiAmJiBpaSkK KwlhcnJheTNbaWldID0gKGRvdWJsZSkoMS4wMDAwLyhkb3VibGUpaWkpOwor ICAgICAgZWxzZQorCWFycmF5M1tpaV0gPSAoZG91YmxlKSBpaSArIDAuMDA7 CisgICAgICBhcnJheTRbaWldID0gKGRvdWJsZSkgKDEuMDAwMDAvIChkb3Vi bGUpKGlpKzEpKTsKKyAgICB9CisgIHlfaW50ID0gX19zZWNfcmVkdWNlX2Fu eV96ZXJvIChhcnJheTNbOl0gKiBhcnJheTRbOl0pOyAKKyAgeSA9IF9fc2Vj X3JlZHVjZV9hbGxfemVybyAoIGFycmF5M1s6XSAqIGFycmF5NFs6XSk7CisK KyAgaWYgKHlfaW50ICE9IDEpCisgICAgYWJvcnQgKCk7CisKKyAgaWYgKHkg IT0gMCkKKyAgICBhYm9ydCAoKTsKKyAgCisjaWYgSEFWRV9JTworICBmb3Ig KGlpID0gMDsgaWkgPCAxMDsgaWkrKykgCisgICAgcHJpbnRmKCIlNS4zZiAi LCBhcnJheTNbaWldICogYXJyYXk0W2lpXSk7CisgIHByaW50ZigiXG4iKTsK KyAgcHJpbnRmKCJBbnkgWmVyb3MgPSAlZFx0IEFsbCBaZXJvcyA9ICVkXG4i LCB5X2ludCwgeSk7CisjZW5kaWYKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90 YXRpb24vZXhlY3V0ZS9idWlsdGluX2Z1bmNfZG91YmxlMi5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2V4ZWN1 dGUvYnVpbHRpbl9mdW5jX2RvdWJsZTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi44MmFlNjM4Ci0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0aW9u L2V4ZWN1dGUvYnVpbHRpbl9mdW5jX2RvdWJsZTIuYwpAQCAtMCwwICsxLDc3 IEBACisjZGVmaW5lIEhBVkVfSU8gMAorCisjaWYgSEFWRV9JTworI2luY2x1 ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKwordm9pZCBleGl0IChpbnQpOwordm9p ZCBhYm9ydCAodm9pZCk7CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQoreworICBpbnQgaWksYXJyYXlbMTBdLCB5ID0gMCwgeV9pbnQg PSAwLCBhcnJheTJbMTBdLCB5X2ludDI9MCwgeTI9MDsKKyAgZG91YmxlIHgs IHl5LCBhcnJheTNbMTBdLCBhcnJheTRbMTBdOworICBpbnQgYWxsX3plcm8s IGFsbF9ub256ZXJvLCBhbnlfemVybywgYW55X25vbnplcm87CisgIGZvciAo aWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5W2lp XSA9IDA7CisgICAgICBhcnJheTJbaWldID0gNTsKKyAgICAgIGlmIChpaSUy ICYmIGlpKQorCWFycmF5M1tpaV0gPSAoZG91YmxlKSgxLjAwMDAvKGRvdWJs ZSlpaSk7CisgICAgICBlbHNlCisJYXJyYXkzW2lpXSA9IChkb3VibGUpIGlp ICsgMC4wMDsKKyAgICAgIGFycmF5NFtpaV0gPSAoZG91YmxlKSAoMS4wMDAw MC8gKGRvdWJsZSkoaWkrMSkpOworICAgIH0KKyAgeV9pbnQgPSBfX3NlY19y ZWR1Y2VfYW55X25vbnplcm8gKGFycmF5M1s6XSArIGFycmF5WzRdKTsgCisg IHlfaW50MiA9IF9fc2VjX3JlZHVjZV9hbnlfemVybyAoYXJyYXkzWzpdICsg YXJyYXlbNF0pOyAKKyAgeSA9IF9fc2VjX3JlZHVjZV9hbGxfbm9uemVybyAo KGFycmF5M1s6XSArIGFycmF5NFs6XSkgKiAoYXJnYy0xKSk7IAorICB5MiA9 IF9fc2VjX3JlZHVjZV9hbGxfemVybyAoKGFycmF5M1s6XSArIGFycmF5NFs6 XSkgKiAoYXJnYy0xKSk7CisKKyAgYW55X3plcm8gPSAwOworICBhbnlfbm9u emVybyA9IDA7CisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAg IHsKKyAgICAgIGlmICgoYXJyYXkzW2lpXSArIGFycmF5WzRdKSA9PSAwKQor CWFueV96ZXJvID0gMTsKKyAgICAgIGVsc2UKKwlhbnlfbm9uemVybyA9IDE7 CisgICAgfQorCisgIGlmIChhbnlfbm9uemVybyAhPSB5X2ludCkKKyAgICBh Ym9ydCAoKTsKKyAgaWYgKGFueV96ZXJvICE9IHlfaW50MikKKyAgICBhYm9y dCAoKTsKKworCisgIGFsbF96ZXJvID0gMDsKKyAgYWxsX25vbnplcm8gPSAw OworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICB7CisgICAg ICBpZiAoKChhcnJheTNbaWldICsgYXJyYXk0W2lpXSkgKiAoYXJnYy0xKSkg PT0gMCkKKwlhbGxfemVybyA9IDE7CisgICAgICBlbHNlCisJYWxsX25vbnpl cm8gPSAxOworICAgIH0KKworICBpZiAoeSAhPSBhbGxfbm9uemVybykKKyAg ICBhYm9ydCAoKTsKKyAgaWYgKGFsbF96ZXJvICE9IHkyKQorICAgIGFib3J0 ICgpOworIAorCisjaWYgSEFWRV9JTworICBmb3IgKGlpID0gMDsgaWkgPCAx MDsgaWkrKykgeworICAgIHByaW50ZigiJTUuM2YgIiwgYXJyYXkzW2lpXSAr YXJyYXk0W2lpXSk7CisgIH0KKyAgcHJpbnRmKCJcbiIpOworICBmb3IgKGlp ID0gMDsgaWkgPCAxMDsgaWkrKykgeworICAgIHByaW50ZigiJTUuM2YgIiwg KGFycmF5M1tpaV0gKyBhcnJheTRbaWldKSAqIChhcmdjLTEpKTsKKyAgfQor ICBwcmludGYoIlxuIik7CisgIHByaW50ZigiQW55IE5vbi16ZXJvcyAoMXN0 IGxpbmUpID0gJWRcdCBBbGwgbm9uLXplcm9zICgxc3QgbGluZSkgPSAlZFxu IiwgCisJIHlfaW50LCB5KTsKKyAgcHJpbnRmKCJBbnkgemVyb3MgKDJuZCBs aW5lKSA9ICVkXHQgQWxsIHplcm9zICgybmQgbGluZSkgPSAlZFxuIiwgeV9p bnQyLCB5Mik7CisjZW5kaWYKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRp b24vZXhlY3V0ZS9leGVjdXRlLmV4cCBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9leGVjdXRlL2V4ZWN1dGUuZXhw Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZDNkYmQK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxr LXBsdXMvYXJyYXlfbm90YXRpb24vZXhlY3V0ZS9leGVjdXRlLmV4cApAQCAt MCwwICsxLDYwIEBACisjIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorIyAKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMgCisjIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUg Q09QWUlORzMuICBJZiBub3Qgc2VlCisjIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgd2FzIHdyaXR0ZW4gYnkgQmFs YWppIFYuIEl5ZXIgPGJhbGFqaS52Lml5ZXJAaW50ZWwuY29tPgorIyBNYW55 IHRoYW5rcyB0byB0aGUgR0NDIEMtdG9ydHVyZSBjb250cmlidXRvcnMuCisK K3ZlcmJvc2UgIiR0b29sICRsaWJkaXIiIDEKKworc2V0IGxpYnJhcnlfdmFy IFtnZXRfbXVsdGlsaWJzXQorZGctaW5pdAorc2V0IENJTEtfVE9SVFVSRV9P UFRJT05TIFtsaXN0IFwKKwkJCSAgIHsgLU8wIC1mY2lsa3BsdXMgIC1zdGQ9 Yzk5fSBcCisJCQkgICB7IC1PMSAtZmNpbGtwbHVzICAtc3RkPWM5OX0gXAor CQkJICAgeyAtTzIgLWZjaWxrcGx1cyAgLXN0ZD1jOTl9IFwKKwkJCSAgIHsg LU8zIC1mY2lsa3BsdXMgIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mdW5yb2xs LWxvb3BzIC1zdGQ9Yzk5fSBcCisJCQkgICB7IC1PMyAtZmNpbGtwbHVzICAt Zm9taXQtZnJhbWUtcG9pbnRlciAtZnVucm9sbC1hbGwtbG9vcHMgLWZpbmxp bmUtZnVuY3Rpb25zIC1zdGQ9Yzk5IH0gXAorCQkJICAgeyAtTzMgLWZjaWxr cGx1cyAgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZ1bnJvbGwtYWxsLWxvb3Bz IC1maW5saW5lLWZ1bmN0aW9ucyAtZnRyZWUtdmVjdG9yaXplIC1zdGQ9Yzk5 IH0gXAorCQkJICAgeyAtTzMgLWcgLWZjaWxrcGx1cyAgLXN0ZD1jOTl9IFwK KwkJCSAgIHsgLU9zIC1mY2lsa3BsdXMgIC1zdGQ9Yzk5fSBdCisKKworCitp ZiAkdHJhY2VsZXZlbCB0aGVuIHsKKyAgICBzdHJhY2UgJHRyYWNlbGV2ZWwK K30KKworIyBsb2FkIHN1cHBvcnQgcHJvY3MKK2xvYWRfbGliIHRvcnR1cmUt b3B0aW9ucy5leHAKK2xvYWRfbGliIGMtdG9ydHVyZS5leHAKKwordG9ydHVy ZS1pbml0CitzZXQtdG9ydHVyZS1vcHRpb25zICRDSUxLX1RPUlRVUkVfT1BU SU9OUyB7e319ICRDSUxLX1RPUlRVUkVfT1BUSU9OUworCisjCisjIG1haW4g dGVzdCBsb29wCisjCisKK2ZvcmVhY2ggc3JjIFtsc29ydCBbZ2xvYiAtbm9j b21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5jXV0gIHsKKyAgICAjIElmIHdl J3JlIG9ubHkgdGVzdGluZyBzcGVjaWZpYyBmaWxlcyBhbmQgdGhpcyBpc24n dCBvbmUgb2YgdGhlbSwgc2tpcCBpdC4KKyAgICBpZiAhW3J1bnRlc3RfZmls ZV9wICRydW50ZXN0cyAkc3JjXSB0aGVuIHsKKwljb250aW51ZQorICAgIH0K KworICAgIGMtdG9ydHVyZS1leGVjdXRlICRzcmMKK30KKwordG9ydHVyZS1m aW5pc2gKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGst cGx1cy9hcnJheV9ub3RhdGlvbi9leGVjdXRlL2dhdGhlcl9zY2F0dGVyLmMg Yi9nY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRp b24vZXhlY3V0ZS9nYXRoZXJfc2NhdHRlci5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmMyMTdjYTkKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvYXJyYXlfbm90YXRp b24vZXhlY3V0ZS9nYXRoZXJfc2NhdHRlci5jCkBAIC0wLDAgKzEsNjAgQEAK KyNpZiBIQVZFX0lPCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCit2 b2lkIGV4aXQgKGludCk7Cit2b2lkIGFib3J0KHZvaWQpOworCitpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGludCBhcnJheVsxMF1b MTBdLCBhcnJheTJbMTBdLCBhcnJheTNbMTBdLCB4ID0gMCwgeTsKKyAgaW50 IHhfY29ycmVjdCwgeV9jb3JyZWN0LCBpaSwgamogPSAwOworICBmbG9hdCBh cnJheTRbMTBdWzEwXVsxMF1bMTBdOworICBmb3IgKGlpID0gMDsgaWkgPCAx MDsgaWkrKykKKyAgICB7CisgICAgICBmb3IgKGpqID0gMDsgamogPCAxMDsg amorKykKKwl7CisJICBhcnJheVtpaV1bampdID0gMStpaTsKKwkgIGFycmF5 MltpaV09IDI7CisJICBhcnJheTNbaWldPSAzOworCX0KKyAgICB9CisgIAor ICBhcnJheVthcnJheTJbOl1dW2FycmF5M1s6XV0gPSAxMDAwOworCisgIGZv ciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIGlmIChhcnJheVthcnJh eTJbaWldXVthcnJheTNbaWldXSAhPSAxMDAwKQorICAgICAgYWJvcnQgKCk7 CisgIAorI2lmIEhBVkVfSU8KKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlp KyspIHsKKyAgICBmb3IgKGpqID0gMDsgamogPCAxMDsgamorKykgeworICAg ICAgcHJpbnRmKCIlNGRcdCIsIGFycmF5W2lpXVtqal0pOworICAgIH0KKyAg ICBwcmludGYoIlxuIik7CisgIH0KKyNlbmRpZgorCisgIGFycmF5NFthcnJh eTJbOl1dW2FycmF5M1swOjEwOjFdXVthcnJheTJbMDoxMDoxXV1bYXJyYXkz WzA6MTA6MV1dID0KKyAgICAoZmxvYXQpYXJyYXlbYXJyYXkyWzpdXVthcnJh eTNbOl1dOyAKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAg ICBpZiAoYXJyYXk0W2FycmF5MltpaV1dW2FycmF5M1tpaV1dW2FycmF5Mltp aV1dW2FycmF5M1tpaV1dICE9CisJKGZsb2F0KWFycmF5W2FycmF5MltpaV1d W2FycmF5M1tpaV1dKQorICAgICAgYWJvcnQgKCk7CisgIAorI2lmIEhBVkVf SU8KKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspIHsKKyAgICAgIGZv ciAoamogPSAwOyBqaiA8IDEwOyBqaisrKSB7CisJICBmb3IgKGtrID0gMDsg a2sgPCAxMDsga2srKykgeworCSAgICAgIGZvciAobGwgPSAwOyBsbCA8IDEw OyBsbCsrKSB7CisJCSAgcHJpbnRmKCIlNGRcbiIsIGFycmF5NFtpaV1bampd W2trXVtsbF0pOworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKyAgfQorI2Vu ZGlmCisKKyAgZXhpdCAoMCk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1wbHVzL2FycmF5X25vdGF0 aW9uL2V4ZWN1dGUvaWZfdGVzdC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv Y2lsay1wbHVzL2FycmF5X25vdGF0aW9uL2V4ZWN1dGUvaWZfdGVzdC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNDg3NDIKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBs dXMvYXJyYXlfbm90YXRpb24vZXhlY3V0ZS9pZl90ZXN0LmMKQEAgLTAsMCAr MSwyNTAgQEAKKwordm9pZCBhYm9ydCAodm9pZCk7Cit2b2lkIGV4aXQoaW50 KTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBp bnQgeCA9IDA7CisgIGlmIChhcmdjID09IDEpCisgICAgeworICAgICAgY29u c3QgY2hhciAqYXJyYXlbXSA9IHsiYS5vdXQiLCAiMTAiLCAiMTUifTsJICAg ICAKKyAgICAgIHggPSBtYWluMiAoMywgYXJyYXkpOworICAgIH0KKyAgZWxz ZSBpZiAoYXJnYyA9PSAzKQorICAgIHggPSBtYWluMiAoYXJnYywgYXJndik7 CisgIGVsc2UKKyAgICBhYm9ydCAoKTsKKyAKKyAgcmV0dXJuIHg7Cit9CisK KworaW50IG1haW4yIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGlu dCB4ID0gMywgeSwgeiwgYXJyYXlbMTBdLCBhcnJheTJbMTBdLCBUd29kQXJy YXlbMTBdWzEwXSwgamosa2ssbGwgOworICBpbnQgYXJyYXkyX2NoZWNrWzEw XTsKKyAgaW50IEZvdXJEQXJyYXlbMTBdWzEwXVsxMF1bMTBdOworICBpbnQg aWkgPSAwOyAKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAg ICB7CisgICAgICBhcnJheVtpaV0gPSBhcmdjJTM7CisgICAgICBhcnJheTJb aWldPSAxMDsKKyAgICAgIGFycmF5Ml9jaGVja1tpaV0gPSAxMDsKKyAgICB9 CisKKyAgaWYgKCFhcnJheVs6XSkKKyAgICBhcnJheTJbOl0gPSA1OworICBl bHNlCisgICAgYXJyYXkyWzpdID0gMTA7CisKKworICBmb3IgKGlpID0gMDsg aWkgPCAxMDsgaWkrKykKKyAgICB7CisgICAgICBpZiAoIWFycmF5W2lpXSkK KwlhcnJheTJfY2hlY2tbaWldID0gNTsKKyAgICAgIGVsc2UKKwlhcnJheTJf Y2hlY2tbaWldID0gMTA7CisgICAgfQorCisgIGZvciAoaWkgPSAwOyBpaSA8 IDEwOyBpaSsrKQorICAgIGlmIChhcnJheTJfY2hlY2tbaWldICE9IGFycmF5 MltpaV0pCisgICAgICBhYm9ydCAoKTsKKyAgCisKKyAgCisgIGlmICghKGFy cmF5WzA6MTA6MV0gKyBhcnJheVswOjEwOjFdKSkKKyAgICBhcnJheTJbOl0g PSA1OworICBlbHNlCisgICAgYXJyYXkyWzpdID0gMTA7CisKKyAgZm9yIChp aSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgeworICAgICAgaWYgKCEoYXJy YXlbaWldKyBhcnJheVtpaV0pKQorCWFycmF5Ml9jaGVja1tpaV0gPSA1Owor ICAgICAgZWxzZQorCWFycmF5Ml9jaGVja1tpaV0gPSAxMDsKKyAgICB9CisK KyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgaWYgKGFycmF5 Ml9jaGVja1tpaV0gIT0gYXJyYXkyW2lpXSkKKyAgICAgIGFib3J0ICgpOwor ICAKKworICAgICAgCisgICAgICAgCisKKyAgeCA9IGF0b2kgKGFyZ3ZbMV0p LTEwOworICB5ID0gYXRvaSAoYXJndlsxXSkvMjsKKyAgeiA9IChhdG9pIChh cmd2WzFdKSkvNTsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykK KyAgICB7CisgICAgICBpZiAoaWkgJSAyKQorCWFycmF5W2lpXSA9IDA7Cisg ICAgICBlbHNlCisJYXJyYXlbaWldID0gMTsKKyAgICB9CisKKyAgLypwcmlu dGYoInggPSAlMmQgeSA9ICUyZCB6ID0gJTJkXG4iLCB4LCB5LCB6KTsgKi8K KworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBhcnJheVtp aV0gPSAxMDsKKworICAvKiBUaGlzIGlmIGxvb3Agd2lsbCBjaGFuZ2UgYWxs IHRoZSAxMCdzIHRvIDUncyAqLworICBpZiAoYXJyYXlbeDp5OnpdICE9IDkp CisgICAgYXJyYXkyWzpdID0gNTsKKyAgZWxzZQorICAgIGFycmF5Mls6XSA9 IDEwOworCisgIGZvciAoaWkgPSB4OyBpaSA8ICh4K3kpOyBpaSArPSB6KQor ICAgIHsKKyAgICAgIGlmIChhcnJheVtpaV0gIT0gOSkKKwlhcnJheTJfY2hl Y2tbaWldID0gNTsKKyAgICAgIGVsc2UKKwlhcnJheTJfY2hlY2tbaWldID0g MTA7CisgICAgfQorCisgIGZvciAoaWkgPSAwOyBpaSA8IDEwOyBpaSsrKQor ICAgIGlmIChhcnJheTJfY2hlY2tbaWldICE9IGFycmF5MltpaV0pCisgICAg ICBhYm9ydCAoKTsKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykK KyAgICBhcnJheTJbaWldID0gMTA7CisKKyAgLyogVGhpcyBpZiBsb29wIHdp bGwgY2hhbmdlIGFsbCB0aGUgMTAncyB0byA1J3MgKi8KKyAgaWYgKGFycmF5 W2F0b2koYXJndlsxXSktMTA6YXRvaShhcmd2WzFdKTogYXRvaShhcmd2WzFd KS81XSkKKyAgICBhcnJheTJbOl0gPSA1OworICBlbHNlCisgICAgYXJyYXky WzpdID0gMTA7CisKKyAgZm9yIChpaSA9IGF0b2koYXJndlsxXSktMTA7IGlp IDwgYXRvaShhcmd2WzFdKSArIChhdG9pIChhcmd2WzFdKS0xMCk7CisgICAg ICAgaWkgKz1hdG9pKGFyZ3ZbMV0pLzUpCisgICAgaWYgKGFycmF5W2lpXSkK KyAgICAgIGFycmF5Ml9jaGVja1tpaV0gPSA1OworICAgIGVsc2UKKyAgICAg IGFycmF5Ml9jaGVja1tpaV0gPSAxMDsKKworICBmb3IgKGlpID0gMDsgaWkg PCAxMDsgaWkrKykKKyAgICBpZiAoYXJyYXkyX2NoZWNrW2lpXSAhPSBhcnJh eTJbaWldKQorICAgICAgYWJvcnQgKCk7CisgCisKKyAgZm9yIChpaSA9IDA7 IGlpIDwgMTA7IGlpKyspCisgICAgZm9yIChqaiA9IDA7IGpqIDwgMTA7IGpq KyspCisgICAgICBUd29kQXJyYXlbaWldW2pqXSA9IGF0b2koYXJndlsxXSk7 CisKKworICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICB7Cisg ICAgICBhcnJheTJbaWldID0gMTA7CisgICAgICBhcnJheTJfY2hlY2tbaWld ID0gMTA7CisgICAgfQorCisgIC8qIGF0b2koYXJndlsxXSkgPT0gMTAsIHNv IGl0IHdpbGwgY29udmVydCBhbGwgMTAncyB0byA1J3MgKi8KKyAgaWYgKFR3 b2RBcnJheVs6XVs6XSAhPSAxMCkgCisgICAgYXJyYXkyWzpdID0gMTA7IAor ICBlbHNlCisgICAgYXJyYXkyWzpdID0gNTsKKworICBmb3IgKGlpID0gMDsg aWkgPCAxMDsgaWkrKykgeworICAgIGZvciAoamogPSAwOyBqaiA8IDEwOyBq aisrKSB7CisgICAgICBpZiAoVHdvZEFycmF5W2lpXVtqal0gIT0gMTApCisJ YXJyYXkyX2NoZWNrW2lpXSA9IDEwOworICAgIH0KKyAgfQorCisgIGZvciAo aWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5Mltp aV0gPSAxMDsKKyAgICAgIGFycmF5Ml9jaGVja1tpaV0gPSAxMDsKKyAgICB9 CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgZm9yIChq aiA9IDA7IGpqIDwgMTA7IGpqKyspCisgICAgICBmb3IgKGtrID0gMDsga2sg PCAxMDsga2srKykKKwlmb3IgKGxsID0gMDsgbGwgPCAxMDsgbGwrKykgCisJ ICBGb3VyREFycmF5W2lpXVtqal1ba2tdW2xsXSA9IGF0b2koYXJndlsxXSk7 CisgIAorICAvKiBhdG9pKGFyZ3ZbMV0pID09IDEwLCBzbyBpdCB3aWxsIGNv bnZlcnQgYWxsIDEwJ3MgdG8gNSdzICovCisgIGlmIChGb3VyREFycmF5Wzpd WzpdWzpdWzpdICE9IDEwKSAKKyAgICBhcnJheTJbOl0gPSAxMDsgCisgIGVs c2UKKyAgICBhcnJheTJbOl0gPSA1OworCisgIGZvciAoaWkgPSAwOyBpaSA8 IDEwOyBpaSsrKSB7CisgICAgZm9yIChqaiA9IDA7IGpqIDwgMTA7IGpqKysp IHsKKyAgICAgIGZvciAoa2sgPSAwOyBrayA8IDEwOyBraysrKSB7CisJZm9y IChsbCA9IDA7IGxsIDwgMTA7IGxsKyspIHsKKwkgIGlmIChGb3VyREFycmF5 W2lpXVtqal1ba2tdW2xsXSAhPSAxMCkKKwkgICAgYXJyYXkyX2NoZWNrW2lp XSA9IDEwOworCX0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgCisgIGZvciAo aWkgPSAwOyBpaSA8IDEwOyBpaSsrKQorICAgIHsKKyAgICAgIGFycmF5Mltp aV0gPSAxMDsKKyAgICAgIGFycmF5Ml9jaGVja1tpaV0gPSAxMDsKKyAgICB9 CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgZm9yIChq aiA9IDA7IGpqIDwgMTA7IGpqKyspCisgICAgICBmb3IgKGtrID0gMDsga2sg PCAxMDsga2srKykKKwlmb3IgKGxsID0gMDsgbGwgPCAxMDsgbGwrKykgCisJ ICBGb3VyREFycmF5W2lpXVtqal1ba2tdW2xsXSA9IGF0b2koYXJndlsxXSk7 CisgIAorICAvKiBhdG9pKGFyZ3ZbMV0pID09IDEwLCBzbyBpdCB3aWxsIGNv bnZlcnQgYWxsIDEwJ3MgdG8gNSdzICovCisgIGlmIChGb3VyREFycmF5WzA6 MTA6MV1bMDo1OjJdWzk6MTA6LTFdW3g6eTp6XSAhPSAxMCkgCisgICAgYXJy YXkyWzpdID0gMTA7IAorICBlbHNlCisgICAgYXJyYXkyWzpdID0gNTsKKwor ICBmb3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykgeworICAgIGZvciAoamog PSAwOyBqaiA8IDEwOyBqaiArPSAyKSB7CisgICAgICBmb3IgKGtrID0gOTsg a2sgPj0gMDsga2stLSkgeworCWZvciAobGwgPSB4OyBsbCA8IDEwOyBsbCA9 IGxsICs9IHopIHsKKwkgIGlmIChGb3VyREFycmF5W2lpXVtqal1ba2tdW2xs XSAhPSAxMCkKKwkgICAgYXJyYXkyX2NoZWNrW2lpXSA9IDEwOworCSAgZWxz ZQorCSAgICBhcnJheTJfY2hlY2tbaWldID0gNTsKKwl9CisgICAgICB9Cisg ICAgfQorICB9CisKKyAgZm9yIChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisg ICAgeworICAgICAgYXJyYXkyW2lpXSA9IDEwOworICAgICAgYXJyYXkyX2No ZWNrW2lpXSA9IDEwOworICAgIH0KKworICBmb3IgKGlpID0gMDsgaWkgPCAx MDsgaWkrKykKKyAgICBmb3IgKGpqID0gMDsgamogPCAxMDsgamorKykKKyAg ICAgIGZvciAoa2sgPSAwOyBrayA8IDEwOyBraysrKQorCWZvciAobGwgPSAw OyBsbCA8IDEwOyBsbCsrKSAKKwkgIEZvdXJEQXJyYXlbaWldW2pqXVtra11b bGxdID0gYXRvaShhcmd2WzFdKTsKKyAgCisgIC8qIGF0b2koYXJndlsxXSkg PT0gMTAsIHNvIGl0IHdpbGwgY29udmVydCBhbGwgMTAncyB0byA1J3MgKi8K KyAgaWYgKEZvdXJEQXJyYXlbMDoxMDoxXVswOjU6Ml1bOToxMDotMV1beDp5 OnpdICsKKyAgICAgIEZvdXJEQXJyYXlbMDoxMDoxXVswOjU6Ml1bOTotMTA6 MV1beDp5OnpdICAhPSAyMCkgCisgICAgYXJyYXkyWzpdID0gMTA7IAorICBl bHNlCisgICAgYXJyYXkyWzpdID0gNTsKKworICBmb3IgKGlpID0gMDsgaWkg PCAxMDsgaWkrKykgeworICAgIGZvciAoamogPSAwOyBqaiA8IDEwOyBqaiAr PSAyKSB7CisgICAgICBmb3IgKGtrID0gOTsga2sgPj0gMDsga2stLSkgewor CWZvciAobGwgPSB4OyBsbCA8IDEwOyBsbCA9IGxsICs9IHopIHsKKwkgIGlm IChGb3VyREFycmF5W2lpXVtqal1ba2tdW2xsXSAhPSAxMCkKKwkgICAgYXJy YXkyX2NoZWNrW2lpXSA9IDEwOworCSAgZWxzZQorCSAgICBhcnJheTJfY2hl Y2tbaWldID0gNTsKKwl9CisgICAgICB9CisgICAgfQorICB9CisgIGV4aXQg KDApOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL2NpbGstcGx1cy9hcnJheV9ub3RhdGlvbi9leGVjdXRlL3Nl Y19pbXBsaWNpdF9leC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvY2lsay1w bHVzL2FycmF5X25vdGF0aW9uL2V4ZWN1dGUvc2VjX2ltcGxpY2l0X2V4LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ3ZjU1Nwot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGst cGx1cy9hcnJheV9ub3RhdGlvbi9leGVjdXRlL3NlY19pbXBsaWNpdF9leC5j CkBAIC0wLDAgKzEsMzEgQEAKKwordm9pZCBhYm9ydCAodm9pZCk7Cit2b2lk IGV4aXQgIChpbnQpOworCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKK3sKKyAgaW50IGpqLCBraywgYXJyYXlfM0NbMTBdWzEwXVsxMF07 CisgIGludCBpaSxhcnJheVsxMF0sIHkgPSAwLCB5X2ludCA9IDAsIGFycmF5 MlsxMF0sIGFycmF5XzNbMTBdWzEwXVsxMF07CisgIGRvdWJsZSB4LCB5eSwg YXJyYXkzWzEwXSwgYXJyYXk0WzEwXTsKKworICBhcnJheVs6XSA9IF9fc2Vj X2ltcGxpY2l0X2luZGV4ICgwKTsKKyAgYXJyYXlfM1s6XVs6XVs6XSA9IF9f c2VjX2ltcGxpY2l0X2luZGV4ICgxKSArIF9fc2VjX2ltcGxpY2l0X2luZGV4 KDApICsKKyAgICBfX3NlY19pbXBsaWNpdF9pbmRleCAoMik7CisKKyAgZm9y IChpaSA9IDA7IGlpIDwgMTA7IGlpKyspCisgICAgZm9yIChqaiA9IDA7IGpq IDwgMTA7IGpqKyspCisgICAgICBmb3IgKGtrID0gMDsga2sgPCAxMDsga2sr KykKKwlhcnJheV8zQ1tpaV1bampdW2trXSA9IGlpK2pqK2trOworCQorICBm b3IgKGlpID0gMDsgaWkgPCAxMDsgaWkrKykKKyAgICBmb3IgKGpqID0gMDsg amogPCAxMDsgamorKykKKyAgICAgIGZvciAoa2sgPSAwOyBrayA8IDEwOyBr aysrKQorCWlmIChhcnJheV8zW2lpXVtqal1ba2tdICE9IGFycmF5XzNDW2lp XVtqal1ba2tdKQorCSAgYWJvcnQgKCk7CisJCisKKyAgZXhpdCAoMCk7Cisg IAorICByZXR1cm4gMDsKK30K --_002_BF230D13CA30DD48930C31D40993300016C842FBFMSMSX102amrcor_--