Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pQ3eX-0008Cy-Mw for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Feb 2023 09:55:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pQ3eW-0004Ds-Gv for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Feb 2023 09:55:40 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pQ3eU-0004Dj-Tw for pgsql-hackers@lists.postgresql.org; Thu, 09 Feb 2023 09:55:39 +0000 Received: from mail-yw1-x112d.google.com ([2607:f8b0:4864:20::112d]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pQ3eM-0000Oz-SH for pgsql-hackers@lists.postgresql.org; Thu, 09 Feb 2023 09:55:37 +0000 Received: by mail-yw1-x112d.google.com with SMTP id 00721157ae682-527979e8670so17808007b3.10 for ; Thu, 09 Feb 2023 01:55:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=TkiqWqjCwUqIITBHRCr7Cb1esIKRlJFHw4B2Banl8DE=; b=Mw2o2MRsL+9aY/IW6Gey5TNACTcaab9bbQsCP04skVKc6wEdV1kjexS8RA0SfGSMdq zhO7ZXue5b+lK7chvY+b7CvrQUY8vXYGrK4NTg0qKetPpQep6BXZIY9Ym0R4Dtm/JTxG tgVMmDMHvmlLqpDoS/y2GG4rl/xrshN3zHLVZPXKCO9vKlCNChRjKeup4S/AtWVWBq4d pN/Cy+q39veFk7y+S5KvEX8zQHMNxeLF4X83XCbm+9/sH0TnxC657TMrIkPSoxPH3OMT OcWfpKm4C5GRt7gr16ExYKkj7PebQucbmVV2dvs/xHhckRtnqXi2mcay6RKwZyTfllus F+Ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=TkiqWqjCwUqIITBHRCr7Cb1esIKRlJFHw4B2Banl8DE=; b=Sjhee0YwF07wcXhRlFrpEFfo+PuJpqi+j8RO4wW/2+p32egjx4BSPcs2rLMJbqZhw6 Cn8EXC//O0ZT40tBDRcHduwBRKN5tYEj3bB8uPp1/6iWlKrVbkGa0s5jIlezsKvQSkDC a/nQg6yNLmUTWl0O2aEwNZJoQZTSWNpAm4hoWWKREWUOy91+Z3HsVh8ULN2SVswgxs1t Dv4FB4vB44JZbdB8rmvOidlANc1lZCBfTcW9pZ5d5uE4oSgMuLa6VDHSFhzsLLiBnEOJ QJXDGhZEiKbufUkZp9DRugdOMBgWVjF7wHxrLhJ4+DOE8J5J+J8BbQW0C4h1bMu0d0FX 1jKQ== X-Gm-Message-State: AO0yUKXBQJ2Zaigz6V8SnwDIPGV16N8IUy47TesRE88eSPuFcxiCaco0 fKfjTpbOcriS7/YJRXoT19a2AwhZrUGoLh+35oI= X-Google-Smtp-Source: AK7set+Q5Vtvn0M6z0z9HyDuiHybHOYd/k8KkXyOHhRsRdxs2VrBnRm9E0k53vnxG4CI8kLvc+6rJha06tAJ4i+d2xY= X-Received: by 2002:a0d:dac4:0:b0:524:ddb7:7896 with SMTP id c187-20020a0ddac4000000b00524ddb77896mr1261227ywe.356.1675936529626; Thu, 09 Feb 2023 01:55:29 -0800 (PST) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: Ajin Cherian Date: Thu, 9 Feb 2023 20:55:17 +1100 Message-ID: Subject: Re: Support logical replication of DDLs To: Peter Smith Cc: vignesh C , Zheng Li , li jie , Dilip Kumar , Alvaro Herrera , "houzj.fnst@fujitsu.com" , Amit Kapila , Masahiko Sawada , Japin Li , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000846be105f4416101" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000846be105f4416101 Content-Type: text/plain; charset="UTF-8" On Fri, Feb 3, 2023 at 11:41 AM Peter Smith wrote: > > Here are some review comments for patch v63-0001. > > ====== > General > > 1. > (This is not really a review comment - more just an observation...) > > This patch seemed mostly like an assortment of random changes that > don't seem to have anything in common except that some *later* patches > of this set are apparently going to want them. > > Now maybe doing it this way was the best and neatest thing to do -- > I'm not sure. But my first impression was I felt this has gone too far > in some places -- e.g. perhaps some of these changes would have been > better deferred until they are *really* needed instead of just > plonking a whole lot of un-called (i.e. untested) code into patch > 0001. > > Alvaro has replied to this. > ====== > Commit message > > 2. > 2) Some of the prototype and structures were moved from pg_publication.h > to publicationcmds.h as one of the later patch requires inclusion of > pg_publication.h and these prototype had references to server header > files. > > SUGGESTION (?) > 2) Some prototypes and structures were moved from pg_publication.h to > publicationcmds.h. This was because one of the later patches required > the inclusion of pg_publication.h and these prototypes had references > to server header files. > Changed. > > ====== > src/backend/catalog/aclchk.c > > 3. ExecuteGrantStmt > > + /* Copy the grantor id needed for DDL deparsing of Grant */ > + istmt.grantor_uid = grantor; > + > > SUGGESTION (comment) > Copy the grantor id to the parsetree, needed for DDL deparsing of Grant > didn't change this, as Alvaro said this was not a parsetree. > ====== > src/backend/catalog/objectaddress.c > > 4. getObjectIdentityParts > > @@ -5922,7 +5922,7 @@ getObjectIdentityParts(const ObjectAddress *object, > transformType = format_type_be_qualified(transform->trftype); > transformLang = get_language_name(transform->trflang, false); > > - appendStringInfo(&buffer, "for %s on language %s", > + appendStringInfo(&buffer, "for %s language %s", > transformType, > transformLang); > > There is no clue anywhere what this change was for. > > Perhaps this ought to be mentioned in the Commit Message. > added this in the commit message. > > ====== > src/backend/commands/collationcmds.c > > 5. > + /* > + * Make from existing collationid available to callers for statement such as > + * CREATE COLLATION any_name FROM any_name > + */ > + if (from_existing_collid && OidIsValid(collid)) > + ObjectAddressSet(*from_existing_collid, CollationRelationId, collid); > > "for statement such as" --> "for statements such as" > changed. > ====== > src/backend/commands/event_trigger.c > > 6. > +EventTriggerQueryState *currentEventTriggerState = NULL; > > It seems overkill to make this non-static here. I didn't find anybody > using this variable from outside this source, so unless this was a > mistake I guess it's preparing the ground for some future patch. > Either way, it didn't seem like this belonged in patch 0001. > The idea is to use this as a preparatory patch. > ====== > src/backend/commands/sequence.c > > 7. > +Form_pg_sequence_data > +get_sequence_values(Oid sequenceId) > +{ > + Buffer buf; > + SeqTable elm; > + Relation seqrel; > + HeapTupleData seqtuple; > + Form_pg_sequence_data seq; > + Form_pg_sequence_data retSeq; > + > + /* Open and AccessShareLock sequence */ > + init_sequence(sequenceId, &elm, &seqrel); > + > + if (pg_class_aclcheck(sequenceId, GetUserId(), > + ACL_SELECT | ACL_UPDATE | ACL_USAGE) != ACLCHECK_OK) > + ereport(ERROR, > + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), > + errmsg("permission denied for sequence %s", > + RelationGetRelationName(seqrel)))); > + > + seq = read_seq_tuple(seqrel, &buf, &seqtuple); > + retSeq = palloc(sizeof(FormData_pg_sequence_data)); > + > + memcpy(retSeq, seq, sizeof(FormData_pg_sequence_data)); > + > + UnlockReleaseBuffer(buf); > + relation_close(seqrel, NoLock); > + > + return retSeq; > +} > > IMO the palloc might be better done up-front when the retSeq was declared. > changed. > ====== > src/backend/tcop/utility.c > > 8. > +/* > + * Return the given object type as a string. > + */ > +const char * > +stringify_objtype(ObjectType objtype, bool isgrant) > +{ > + switch (objtype) > + { > + case OBJECT_AGGREGATE: > + return "AGGREGATE"; > + case OBJECT_CAST: > + return "CAST"; > + case OBJECT_COLLATION: > + return "COLLATION"; > + case OBJECT_COLUMN: > + return isgrant ? "TABLE" : "COLUMN"; > + case OBJECT_CONVERSION: > + return "CONVERSION"; > + case OBJECT_DATABASE: > + return "DATABASE"; > + case OBJECT_DOMAIN: > + return "DOMAIN"; > + case OBJECT_EVENT_TRIGGER: > + return "EVENT TRIGGER"; > + case OBJECT_EXTENSION: > + return "EXTENSION"; > + case OBJECT_FDW: > + return "FOREIGN DATA WRAPPER"; > + case OBJECT_FOREIGN_SERVER: > + return isgrant ? "FOREIGN SERVER" : "SERVER"; > + case OBJECT_FOREIGN_TABLE: > + return "FOREIGN TABLE"; > > That 'is_grant' param seemed a bit hacky. > > At least some comment should be given (maybe in the function header?) > to explain why this boolean is modifying the return string. > added comment in the function header. > ====== > src/backend/utils/adt/regproc.c > > 9. > + > +/* > + * Append the parenthesized arguments of the given pg_proc row into the output > + * buffer. force_qualify indicates whether to schema-qualify type names > + * regardless of visibility. > + */ > +static void > +format_procedure_args_internal(Form_pg_proc procform, StringInfo buf, > + bool force_qualify) > +{ > + int i; > + char* (*func[2])(Oid) = {format_type_be, format_type_be_qualified}; > + > + appendStringInfoChar(buf, '('); > + for (i = 0; i < procform->pronargs; i++) > + { > + Oid thisargtype = procform->proargtypes.values[i]; > + char *argtype = NULL; > + > + if (i > 0) > + appendStringInfoChar(buf, ','); > + > + argtype = func[force_qualify](thisargtype); > + appendStringInfoString(buf, argtype); > + pfree(argtype); > + } > + appendStringInfoChar(buf, ')'); > +} > > 9a. > Assign argtype = NULL looks redundant because it will always be > overwritten anyhow. > changed this. > ~ > > 9b. > I understand why this function was put here beside the other static > functions in "Support Routines" but IMO it really belongs nearby (i.e. > directly above) the only caller (format_procedure_args). Keeping both > those functional together will improve the readability of both, and > will also remove the need to have the static forward declaration. > > ====== > src/backend/utils/adt/ruleutils.c > > 10. > +void > +pg_get_ruledef_detailed(Datum ev_qual, Datum ev_action, > + char **whereClause, List **actions) > +{ > + int prettyFlags = 0; > + char *qualstr = TextDatumGetCString(ev_qual); > + char *actionstr = TextDatumGetCString(ev_action); > + List *actionNodeList = (List *) stringToNode(actionstr); > + StringInfoData buf; > + > + *whereClause = NULL; > + *actions = NIL; > + initStringInfo(&buf); > + if (strlen(qualstr) > 0 && strcmp(qualstr, "<>") != 0) > + { > > If you like, that condition could have been written more simply as: > > if (*qualstr && strcmp(qualstr, "<>") != 0) > fixed. > ~~~ > > 11. > +/* > + * Parse back the TriggerWhen clause of a trigger given the > pg_trigger record and > + * the expression tree (in nodeToString() representation) from > pg_trigger.tgqual > + * for the trigger's WHEN condition. > + */ > +char * > +pg_get_trigger_whenclause(Form_pg_trigger trigrec, Node *whenClause, > bool pretty) > +{ > > It seemed "Parse back" is a typo. > > I assume it was meant to say something like "Passes back", or maybe > just "Returns" is better. fixed. > > ====== > src/include/replication/logicalrelation.h > > 12. > @@ -14,6 +14,7 @@ > > #include "access/attmap.h" > #include "replication/logicalproto.h" > +#include "storage/lockdefs.h" > > What is this needed here for? I tried without this change and > everything still builds OK. > fixed. regards, Ajin Cherian Fujitsu Australia --000000000000846be105f4416101 Content-Type: application/octet-stream; name="v67-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Disposition: attachment; filename="v67-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ldwxbabz0 RnJvbSA5ZGFmYjAyNjk4YzVkMGUzMjBhYmNiY2JjYmNjNGJlNDQyNGMxNWMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgOSBGZWIgMjAyMyAwMzoxNToyMiAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djY3IDEvN10gSW5mcmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBEREwgZGVwYXJzaW5nLgoKSW5mcmFz dHJ1Y3R1cmUgdG8gc3VwcG9ydCBEREwgZGVwYXJzaW5nLgoxKSBTb21lIG9mIHRoZSBldmVudCB0 cmlnZ2VyIHN0cnVjdHVyZXMgd2VyZSBtb3ZlZCBmcm9tIGV2ZW50X3RyaWdnZXIuYwogICB0byBl dmVudF90cmlnZ2VyLmggYXMgdGhlc2Ugd2lsbCBiZSByZXF1aXJlZCBmb3IgcHVibGljYXRpb24g ZXZlbnQKICAgdHJpZ2dlciBjcmVhdGlvbi4KMikgU29tZSBvZiB0aGUgcHJvdG90eXBlcyBhbmQg c3RydWN0dXJlcyB3ZXJlIG1vdmVkIGZyb20gcGdfcHVibGljYXRpb24uaAogICB0byBwdWJsaWNh dGlvbmNtZHMuaC4gVGhpcyB3YXMgYmVjYXVzZSBvbmUgb2YgdGhlIGxhdGVyIHBhdGNoIHJlcXVp cmVkIHRoZSBpbmNsdXNpb24gb2YKICAgcGdfcHVibGljYXRpb24uaCBhbmQgdGhlc2UgcHJvdG90 eXBlIGhhZCByZWZlcmVuY2VzIHRvIHNlcnZlciBoZWFkZXIKICAgZmlsZXMuCjMpIENoYW5nZSB0 aGUgb2JqZWN0IGlkZW50aXR5IHRvIG1hdGNoIHdpdGggdGhlIHN5bnRheCBpbiBvYmplY3RhZGRy ZXNzLmMKICAgVGhpcyBpcyBzbyB0aGF0IHRoZSBkZXBhcnNlIGxvZ2ljIGNhbiB1c2UgdGhpcyBp ZGVudGl0eSBkaXJlY3RseSBpbiB0aGUgZGVwYXJzZSBsb2dpYy4KLS0tCiBzcmMvYmFja2VuZC9j YXRhbG9nL2FjbGNoay5jICAgICAgICAgICAgICAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvY2F0 YWxvZy9vYmplY3RhZGRyZXNzLmMgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2NvbGxhdGlvbmNtZHMuYyAgICAgICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmMgICAgICAgICB8ICA0MCArLS0tLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvc2VjbGFiZWwuYyAgICAgICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv c2VxdWVuY2UuYyAgICAgICAgICAgICAgfCAgMzIgKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vcGdvdXRwdXQvcGdvdXRwdXQuYyAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5 LmMgICAgICAgICAgICAgICAgICAgfCAgOTQgKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2Zvcm1hdF90eXBlLmMgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9yZWdwcm9jLmMgICAgICAgICAgICAgIHwgIDUzICsrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jICAgICAgICAgICAgfCAyNTggKysrKysrKysrKysrKysrKysrKystLS0t LS0tCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggICAgICAgICB8ICAxNyAr LQogc3JjL2luY2x1ZGUvY29tbWFuZHMvY29sbGF0aW9uY21kcy5oICAgICAgICAgfCAgIDMgKy0K IHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCAgICAgICAgIHwgIDM5ICsrKysK IHNyYy9pbmNsdWRlL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oICAgICAgIHwgIDE0ICsrCiBz cmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oICAgICAgICAgICAgICB8ICAgMSArCiBzcmMv aW5jbHVkZS90Y29wL3V0aWxpdHkuaCAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5j bHVkZS91dGlscy9hY2wuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVk ZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaCAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS91 dGlscy9idWlsdGlucy5oICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS91dGls cy9yZWwuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS91dGlscy9y dWxldXRpbHMuaCAgICAgICAgICAgICAgICB8ICAxOSArKwogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9vYmplY3RfYWRkcmVzcy5vdXQgfCAgIDIgKy0KIDIzIGZpbGVzIGNoYW5nZWQsIDQ3NSBp bnNlcnRpb25zKCspLCAxMzUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9hY2xjaGsuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMKaW5kZXggYzQy MzIzNC4uMzZhNjY3NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYwor KysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCkBAIC0xMjksNyArMTI5LDYgQEAgc3Rh dGljIHZvaWQgZXhwYW5kX2FsbF9jb2xfcHJpdmlsZWdlcyhPaWQgdGFibGVfb2lkLCBGb3JtX3Bn X2NsYXNzIGNsYXNzRm9ybSwKIAkJCQkJCQkJCSAgQWNsTW9kZSAqY29sX3ByaXZpbGVnZXMsCiAJ CQkJCQkJCQkgIGludCBudW1fY29sX3ByaXZpbGVnZXMpOwogc3RhdGljIEFjbE1vZGUgc3RyaW5n X3RvX3ByaXZpbGVnZShjb25zdCBjaGFyICpwcml2bmFtZSk7Ci1zdGF0aWMgY29uc3QgY2hhciAq cHJpdmlsZWdlX3RvX3N0cmluZyhBY2xNb2RlIHByaXZpbGVnZSk7CiBzdGF0aWMgQWNsTW9kZSBy ZXN0cmljdF9hbmRfY2hlY2tfZ3JhbnQoYm9vbCBpc19ncmFudCwgQWNsTW9kZSBhdmFpbF9nb3B0 aW9ucywKIAkJCQkJCQkJCQlib29sIGFsbF9wcml2cywgQWNsTW9kZSBwcml2aWxlZ2VzLAogCQkJ CQkJCQkJCU9pZCBvYmplY3RJZCwgT2lkIGdyYW50b3JJZCwKQEAgLTM4NSwxMSArMzg0LDEwIEBA IEV4ZWN1dGVHcmFudFN0bXQoR3JhbnRTdG10ICpzdG10KQogCUxpc3RDZWxsICAgKmNlbGw7CiAJ Y29uc3QgY2hhciAqZXJyb3Jtc2c7CiAJQWNsTW9kZQkJYWxsX3ByaXZpbGVnZXM7CisJT2lkCQkJ Z3JhbnRvciA9IEludmFsaWRPaWQ7CiAKIAlpZiAoc3RtdC0+Z3JhbnRvcikKIAl7Ci0JCU9pZAkJ CWdyYW50b3I7Ci0KIAkJZ3JhbnRvciA9IGdldF9yb2xlc3BlY19vaWQoc3RtdC0+Z3JhbnRvciwg ZmFsc2UpOwogCiAJCS8qCkBAIC00MDgsNiArNDA2LDkgQEAgRXhlY3V0ZUdyYW50U3RtdChHcmFu dFN0bXQgKnN0bXQpCiAJaXN0bXQuaXNfZ3JhbnQgPSBzdG10LT5pc19ncmFudDsKIAlpc3RtdC5v Ymp0eXBlID0gc3RtdC0+b2JqdHlwZTsKIAorCS8qIENvcHkgdGhlIGdyYW50b3IgaWQgbmVlZGVk IGZvciBEREwgZGVwYXJzaW5nIG9mIEdyYW50ICovCisJaXN0bXQuZ3JhbnRvcl91aWQgPSBncmFu dG9yOworCiAJLyogQ29sbGVjdCB0aGUgT0lEcyBvZiB0aGUgdGFyZ2V0IG9iamVjdHMgKi8KIAlz d2l0Y2ggKHN0bXQtPnRhcmd0eXBlKQogCXsKQEAgLTI2MjgsNyArMjYyOSw3IEBAIHN0cmluZ190 b19wcml2aWxlZ2UoY29uc3QgY2hhciAqcHJpdm5hbWUpCiAJcmV0dXJuIDA7CQkJCQkvKiBhcHBl YXNlIGNvbXBpbGVyICovCiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICoKK2NvbnN0IGNoYXIgKgog cHJpdmlsZWdlX3RvX3N0cmluZyhBY2xNb2RlIHByaXZpbGVnZSkKIHsKIAlzd2l0Y2ggKHByaXZp bGVnZSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMKaW5kZXggMjVjNTBkNi4uMmY2ODgx NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMKKysrIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMKQEAgLTU5MjIsNyArNTkyMiw3IEBA IGdldE9iamVjdElkZW50aXR5UGFydHMoY29uc3QgT2JqZWN0QWRkcmVzcyAqb2JqZWN0LAogCQkJ CXRyYW5zZm9ybVR5cGUgPSBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQodHJhbnNmb3JtLT50cmZ0 eXBlKTsKIAkJCQl0cmFuc2Zvcm1MYW5nID0gZ2V0X2xhbmd1YWdlX25hbWUodHJhbnNmb3JtLT50 cmZsYW5nLCBmYWxzZSk7CiAKLQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWZmZXIsICJmb3IgJXMg b24gbGFuZ3VhZ2UgJXMiLAorCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZmZlciwgImZvciAlcyBs YW5ndWFnZSAlcyIsCiAJCQkJCQkJCSB0cmFuc2Zvcm1UeXBlLAogCQkJCQkJCQkgdHJhbnNmb3Jt TGFuZyk7CiAJCQkJaWYgKG9iam5hbWUpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9jb2xsYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMK aW5kZXggZWI2MmQyOC4uZjQzZGUxNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29sbGF0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMu YwpAQCAtNTIsNyArNTIsOCBAQCB0eXBlZGVmIHN0cnVjdAogICogQ1JFQVRFIENPTExBVElPTgog ICovCiBPYmplY3RBZGRyZXNzCi1EZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBM aXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywgYm9vbCBpZl9ub3RfZXhpc3RzKQorRGVmaW5l Q29sbGF0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRl cnMsCisJCQkJIGJvb2wgaWZfbm90X2V4aXN0cywgT2JqZWN0QWRkcmVzcyAqZnJvbV9leGlzdGlu Z19jb2xsaWQpCiB7CiAJY2hhcgkgICAqY29sbE5hbWU7CiAJT2lkCQkJY29sbE5hbWVzcGFjZTsK QEAgLTEzOSw2ICsxNDAsMTMgQEAgRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwg TGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZfbm90X2UKIAkJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHRwKSkKIAkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBjb2xsYXRpb24gJXUiLCBjb2xsaWQpOwogCisJCS8qCisJCSAqIE1ha2UgZnJvbSBleGlzdGlu ZyBjb2xsYXRpb25pZCBhdmFpbGFibGUgdG8gY2FsbGVycyBmb3Igc3RhdGVtZW50cyBzdWNoIGFz CisJCSAqIENSRUFURSBDT0xMQVRJT04gYW55X25hbWUgRlJPTSBhbnlfbmFtZQorCQkgKi8KKwkJ aWYgKGZyb21fZXhpc3RpbmdfY29sbGlkICYmIE9pZElzVmFsaWQoY29sbGlkKSkKKwkJCU9iamVj dEFkZHJlc3NTZXQoKmZyb21fZXhpc3RpbmdfY29sbGlkLCBDb2xsYXRpb25SZWxhdGlvbklkLCBj b2xsaWQpOworCiAJCWNvbGxwcm92aWRlciA9ICgoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVD VCh0cCkpLT5jb2xscHJvdmlkZXI7CiAJCWNvbGxpc2RldGVybWluaXN0aWMgPSAoKEZvcm1fcGdf Y29sbGF0aW9uKSBHRVRTVFJVQ1QodHApKS0+Y29sbGlzZGV0ZXJtaW5pc3RpYzsKIAkJY29sbGVu Y29kaW5nID0gKChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKHRwKSktPmNvbGxlbmNvZGlu ZzsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCBkNGIwMGQxLi42OTAyNzA5 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC00OCw0NSArNDgsNyBAQAog I2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAKLXR5 cGVkZWYgc3RydWN0IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUKLXsKLQkvKiBtZW1vcnkgY29udGV4 dCBmb3IgdGhpcyBzdGF0ZSdzIG9iamVjdHMgKi8KLQlNZW1vcnlDb250ZXh0IGN4dDsKLQotCS8q IHNxbF9kcm9wICovCi0Jc2xpc3RfaGVhZAlTUUxEcm9wTGlzdDsKLQlib29sCQlpbl9zcWxfZHJv cDsKLQotCS8qIHRhYmxlX3Jld3JpdGUgKi8KLQlPaWQJCQl0YWJsZV9yZXdyaXRlX29pZDsJLyog SW52YWxpZE9pZCwgb3Igc2V0IGZvciB0YWJsZV9yZXdyaXRlCi0JCQkJCQkJCQkgKiBldmVudCAq LwotCWludAkJCXRhYmxlX3Jld3JpdGVfcmVhc29uOwkvKiBBVF9SRVdSSVRFIHJlYXNvbiAqLwot Ci0JLyogU3VwcG9ydCBmb3IgY29tbWFuZCBjb2xsZWN0aW9uICovCi0JYm9vbAkJY29tbWFuZENv bGxlY3Rpb25JbmhpYml0ZWQ7Ci0JQ29sbGVjdGVkQ29tbWFuZCAqY3VycmVudENvbW1hbmQ7Ci0J TGlzdAkgICAqY29tbWFuZExpc3Q7CS8qIGxpc3Qgb2YgQ29sbGVjdGVkQ29tbWFuZDsgc2VlCi0J CQkJCQkJCSAqIGRlcGFyc2VfdXRpbGl0eS5oICovCi0Jc3RydWN0IEV2ZW50VHJpZ2dlclF1ZXJ5 U3RhdGUgKnByZXZpb3VzOwotfSBFdmVudFRyaWdnZXJRdWVyeVN0YXRlOwotCi1zdGF0aWMgRXZl bnRUcmlnZ2VyUXVlcnlTdGF0ZSAqY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlID0gTlVMTDsKLQot LyogU3VwcG9ydCBmb3IgZHJvcHBlZCBvYmplY3RzICovCi10eXBlZGVmIHN0cnVjdCBTUUxEcm9w T2JqZWN0Ci17Ci0JT2JqZWN0QWRkcmVzcyBhZGRyZXNzOwotCWNvbnN0IGNoYXIgKnNjaGVtYW5h bWU7Ci0JY29uc3QgY2hhciAqb2JqbmFtZTsKLQljb25zdCBjaGFyICpvYmppZGVudGl0eTsKLQlj b25zdCBjaGFyICpvYmplY3R0eXBlOwotCUxpc3QJICAgKmFkZHJuYW1lczsKLQlMaXN0CSAgICph ZGRyYXJnczsKLQlib29sCQlvcmlnaW5hbDsKLQlib29sCQlub3JtYWw7Ci0JYm9vbAkJaXN0ZW1w OwotCXNsaXN0X25vZGUJbmV4dDsKLX0gU1FMRHJvcE9iamVjdDsKK0V2ZW50VHJpZ2dlclF1ZXJ5 U3RhdGUgKmN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSA9IE5VTEw7CiAKIHN0YXRpYyB2b2lkIEFs dGVyRXZlbnRUcmlnZ2VyT3duZXJfaW50ZXJuYWwoUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJCQlI ZWFwVHVwbGUgdHVwLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xhYmVsLmMKaW5kZXggN2ZmMTZlMy4uMWU4MzFm ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwuYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9zZWNsYWJlbC5jCkBAIC0xMzQsNiArMTM0LDkgQEAgRXhlY1NlY0xh YmVsU3RtdChTZWNMYWJlbFN0bXQgKnN0bXQpCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCQkgZXJybXNnKCJtdXN0IHNwZWNpZnkgcHJvdmlkZXIg d2hlbiBtdWx0aXBsZSBzZWN1cml0eSBsYWJlbCBwcm92aWRlcnMgaGF2ZSBiZWVuIGxvYWRlZCIp KSk7CiAJCXByb3ZpZGVyID0gKExhYmVsUHJvdmlkZXIgKikgbGluaXRpYWwobGFiZWxfcHJvdmlk ZXJfbGlzdCk7CisKKwkJLyogQ29weSB0aGUgcHJvdmlkZXIgbmFtZSB0byB0aGUgcGFyc2V0cmVl LCBuZWVkZWQgZm9yIERETCBkZXBhcnNpbmcgb2YgU2VjTGFiZWxTdG10ICovCisJCXN0bXQtPnBy b3ZpZGVyID0gcHN0cmR1cChwcm92aWRlci0+cHJvdmlkZXJfbmFtZSk7CiAJfQogCWVsc2UKIAl7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvc2VxdWVuY2UuYwppbmRleCBiZmUyNzljLi4yOWNmNzBlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3NlcXVlbmNlLmMKQEAgLTE3MDgsNiArMTcwOCwzOCBAQCBwcm9jZXNzX293bmVkX2J5KFJl bGF0aW9uIHNlcXJlbCwgTGlzdCAqb3duZWRfYnksIGJvb2wgZm9yX2lkZW50aXR5KQogCQlyZWxh dGlvbl9jbG9zZSh0YWJsZXJlbCwgTm9Mb2NrKTsKIH0KIAorLyoKKyAqIFJldHVybiBzZXF1ZW5j ZSBwYXJhbWV0ZXJzLCBkZXRhaWxlZAorICovCitGb3JtX3BnX3NlcXVlbmNlX2RhdGEKK2dldF9z ZXF1ZW5jZV92YWx1ZXMoT2lkIHNlcXVlbmNlSWQpCit7CisJQnVmZmVyICAgICAgYnVmOworCVNl cVRhYmxlICAgIGVsbTsKKwlSZWxhdGlvbiAgICBzZXFyZWw7CisJSGVhcFR1cGxlRGF0YSBzZXF0 dXBsZTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0 YSByZXRTZXEgPSBwYWxsb2Moc2l6ZW9mKEZvcm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKwor CS8qIE9wZW4gYW5kIEFjY2Vzc1NoYXJlTG9jayBzZXF1ZW5jZSAqLworCWluaXRfc2VxdWVuY2Uo c2VxdWVuY2VJZCwgJmVsbSwgJnNlcXJlbCk7CisKKwlpZiAocGdfY2xhc3NfYWNsY2hlY2soc2Vx dWVuY2VJZCwgR2V0VXNlcklkKCksCisJCQlBQ0xfU0VMRUNUIHwgQUNMX1VQREFURSB8IEFDTF9V U0FHRSkgIT0gQUNMQ0hFQ0tfT0spCisJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCisJCQkJCSBlcnJtc2coInBlcm1pc3Npb24g ZGVuaWVkIGZvciBzZXF1ZW5jZSAlcyIsCisJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo c2VxcmVsKSkpKTsKKworCXNlcSA9IHJlYWRfc2VxX3R1cGxlKHNlcXJlbCwgJmJ1ZiwgJnNlcXR1 cGxlKTsKKworCW1lbWNweShyZXRTZXEsIHNlcSwgc2l6ZW9mKEZvcm1EYXRhX3BnX3NlcXVlbmNl X2RhdGEpKTsKKworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsKKwlyZWxhdGlvbl9jbG9zZShz ZXFyZWwsIE5vTG9jayk7CisKKwlyZXR1cm4gcmV0U2VxOworfQogCiAvKgogICogUmV0dXJuIHNl cXVlbmNlIHBhcmFtZXRlcnMgaW4gYSBsaXN0IG9mIHRoZSBmb3JtIGNyZWF0ZWQgYnkgdGhlIHBh cnNlci4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0 cHV0LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmluZGV4 IDczYjA4MDAuLmY2MjkwZDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bn b3V0cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQv cGdvdXRwdXQuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHVibGlj YXRpb25fcmVsLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaCIKICNpbmNs dWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9wdWJsaWNhdGlvbmNt ZHMuaCIKICNpbmNsdWRlICJjb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmgiCiAjaW5jbHVkZSAi ZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJmbWdyLmgiCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC90Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4 IGM3ZDlkOTYuLjczMWE5ZTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5j CisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCkBAIC0xNDQ2LDcgKzE0NDYsOCBAQCBQ cm9jZXNzVXRpbGl0eVNsb3coUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCWFkZHJlc3MgPSBE ZWZpbmVDb2xsYXRpb24ocHN0YXRlLAogCQkJCQkJCQkJCQkJCSAgc3RtdC0+ZGVmbmFtZXMsCiAJ CQkJCQkJCQkJCQkJICBzdG10LT5kZWZpbml0aW9uLAotCQkJCQkJCQkJCQkJCSAgc3RtdC0+aWZf bm90X2V4aXN0cyk7CisJCQkJCQkJCQkJCQkJICBzdG10LT5pZl9ub3RfZXhpc3RzLAorCQkJCQkJ CQkJCQkJCSAgJnNlY29uZGFyeU9iamVjdCk7CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQlkZWZhdWx0 OgogCQkJCQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgZGVmaW5lIHN0bXQgdHlwZTogJWQi LApAQCAtMjE5Niw2ICsyMTk3LDk3IEBAIFV0aWxpdHlDb250YWluc1F1ZXJ5KE5vZGUgKnBhcnNl dHJlZSkKIAl9CiB9CiAKKy8qCisgKiBSZXR1cm4gdGhlIGdpdmVuIG9iamVjdCB0eXBlIGFzIGEg c3RyaW5nLgorICogSWYgaXNncmFudCBpcyB0cnVlLCB0aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkCisgKiB3aGlsZSBkZXBhcnNpbmcgR1JBTlQgc3RhdGVtZW50IGFuZCBzb21lIG9iamVjdAor ICogbmFtZXMgYXJlIHJlcGxhY2VkLgorICovCitjb25zdCBjaGFyICoKK3N0cmluZ2lmeV9vYmp0 eXBlKE9iamVjdFR5cGUgb2JqdHlwZSwgYm9vbCBpc2dyYW50KQoreworCXN3aXRjaCAob2JqdHlw ZSkKKwl7CisJCWNhc2UgT0JKRUNUX0FHR1JFR0FURToKKwkJCXJldHVybiAiQUdHUkVHQVRFIjsK KwkJY2FzZSBPQkpFQ1RfQ0FTVDoKKwkJCXJldHVybiAiQ0FTVCI7CisJCWNhc2UgT0JKRUNUX0NP TExBVElPTjoKKwkJCXJldHVybiAiQ09MTEFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgor CQkJcmV0dXJuIGlzZ3JhbnQgPyAiVEFCTEUiIDogIkNPTFVNTiI7CisJCWNhc2UgT0JKRUNUX0NP TlZFUlNJT046CisJCQlyZXR1cm4gIkNPTlZFUlNJT04iOworCQljYXNlIE9CSkVDVF9EQVRBQkFT RToKKwkJCXJldHVybiAiREFUQUJBU0UiOworCQljYXNlIE9CSkVDVF9ET01BSU46CisJCQlyZXR1 cm4gIkRPTUFJTiI7CisJCWNhc2UgT0JKRUNUX0VWRU5UX1RSSUdHRVI6CisJCQlyZXR1cm4gIkVW RU5UIFRSSUdHRVIiOworCQljYXNlIE9CSkVDVF9FWFRFTlNJT046CisJCQlyZXR1cm4gIkVYVEVO U0lPTiI7CisJCWNhc2UgT0JKRUNUX0ZEVzoKKwkJCXJldHVybiAiRk9SRUlHTiBEQVRBIFdSQVBQ RVIiOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1NFUlZFUjoKKwkJCXJldHVybiBpc2dyYW50ID8g IkZPUkVJR04gU0VSVkVSIiA6ICJTRVJWRVIiOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1RBQkxF OgorCQkJcmV0dXJuICJGT1JFSUdOIFRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJ CQlyZXR1cm4gIkZVTkNUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJCQlyZXR1cm4gIklO REVYIjsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQlyZXR1cm4gIkxBTkdVQUdFIjsKKwkJ Y2FzZSBPQkpFQ1RfTEFSR0VPQkpFQ1Q6CisJCQlyZXR1cm4gIkxBUkdFIE9CSkVDVCI7CisJCWNh c2UgT0JKRUNUX01BVFZJRVc6CisJCQlyZXR1cm4gIk1BVEVSSUFMSVpFRCBWSUVXIjsKKwkJY2Fz ZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXJldHVybiAiT1BFUkFUT1IgQ0xBU1MiOworCQljYXNlIE9C SkVDVF9PUEVSQVRPUjoKKwkJCXJldHVybiAiT1BFUkFUT1IiOworCQljYXNlIE9CSkVDVF9PUEZB TUlMWToKKwkJCXJldHVybiAiT1BFUkFUT1IgRkFNSUxZIjsKKwkJY2FzZSBPQkpFQ1RfUE9MSUNZ OgorCQkJcmV0dXJuICJQT0xJQ1kiOworCQljYXNlIE9CSkVDVF9QUk9DRURVUkU6CisJCQlyZXR1 cm4gIlBST0NFRFVSRSI7CisJCWNhc2UgT0JKRUNUX1JPTEU6CisJCQlyZXR1cm4gIlJPTEUiOwor CQljYXNlIE9CSkVDVF9ST1VUSU5FOgorCQkJcmV0dXJuICJST1VUSU5FIjsKKwkJY2FzZSBPQkpF Q1RfUlVMRToKKwkJCXJldHVybiAiUlVMRSI7CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJl dHVybiAiU0NIRU1BIjsKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlyZXR1cm4gIlNFUVVF TkNFIjsKKwkJY2FzZSBPQkpFQ1RfU1RBVElTVElDX0VYVDoKKwkJCXJldHVybiAiU1RBVElTVElD UyI7CisJCWNhc2UgT0JKRUNUX1RBQkxFOgorCQkJcmV0dXJuICJUQUJMRSI7CisJCWNhc2UgT0JK RUNUX1RBQkxFU1BBQ0U6CisJCQlyZXR1cm4gIlRBQkxFU1BBQ0UiOworCQljYXNlIE9CSkVDVF9U UklHR0VSOgorCQkJcmV0dXJuICJUUklHR0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFU SU9OOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIjsKKwkJY2FzZSBPQkpF Q1RfVFNESUNUSU9OQVJZOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBESUNUSU9OQVJZIjsKKwkJ Y2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIFBBUlNFUiI7CisJ CWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIFRFTVBMQVRF IjsKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCXJldHVybiAiVFlQRSI7CisJCWNhc2UgT0JKRUNU X1VTRVJfTUFQUElORzoKKwkJCXJldHVybiAiVVNFUiBNQVBQSU5HIjsKKwkJY2FzZSBPQkpFQ1Rf VklFVzoKKwkJCXJldHVybiAiVklFVyI7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5z dXBwb3J0ZWQgb2JqZWN0IHR5cGUgJWQiLCBvYmp0eXBlKTsKKwl9Cit9CiAKIC8qCiAgKiBBbHRl ck9iamVjdFR5cGVDb21tYW5kVGFnCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQv Zm9ybWF0X3R5cGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCmluZGV4 IDEyNDAyYTAuLjdiNDc2YWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3Jt YXRfdHlwZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCkBAIC0y Nyw4ICsyNyw2IEBACiAjaW5jbHVkZSAidXRpbHMvbnVtZXJpYy5oIgogI2luY2x1ZGUgInV0aWxz L3N5c2NhY2hlLmgiCiAKLXN0YXRpYyBjaGFyICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBu YW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQpOwotCiAKIC8qCiAgKiBTUUwgZnVuY3Rp b246IGZvcm1hdF90eXBlKHR5cGVfb2lkLCB0eXBlbW9kKQpAQCAtMzYzLDcgKzM2MSw3IEBAIGZv cm1hdF90eXBlX3dpdGhfdHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpCiAvKgog ICogQWRkIHR5cG1vZCBkZWNvcmF0aW9uIHRvIHRoZSBiYXNpYyB0eXBlIG5hbWUKICAqLwotc3Rh dGljIGNoYXIgKgorY2hhciAqCiBwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQz MiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQpCiB7CiAJY2hhcgkgICAqcmVzOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y ZWdwcm9jLmMKaW5kZXggMjk2OTMwZS4uYWIxYWY1NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3JlZ3Byb2MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5j CkBAIC00OSw2ICs0OSw4IEBAIHN0YXRpYyBib29sIHBhcnNlTmFtZUFuZEFyZ1R5cGVzKGNvbnN0 IGNoYXIgKnN0cmluZywgYm9vbCBhbGxvd05vbmUsCiAJCQkJCQkJCSBMaXN0ICoqbmFtZXMsIGlu dCAqbmFyZ3MsIE9pZCAqYXJndHlwZXMsCiAJCQkJCQkJCSBOb2RlICplc2NvbnRleHQpOwogCitz dGF0aWMgdm9pZCBmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwoRm9ybV9wZ19wcm9jIHBy b2Nmb3JtLAorCQkJCQkJCQkJCSAgIFN0cmluZ0luZm8gYnVmLCBib29sIGZvcmNlX3F1YWxpZnkp OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCSBVU0VSIEkvTyBST1VUSU5FUwkJCQkJCQkJ CQkJCQkJICoKQEAgLTMwOCw2ICszMTAsMjkgQEAgZm9ybWF0X3Byb2NlZHVyZV9xdWFsaWZpZWQo T2lkIHByb2NlZHVyZV9vaWQpCiB9CiAKIC8qCisgKiBmb3JtYXRfcHJvY2VkdXJlX2FyZ3MgICAt IGNvbnZlcnRzIHByb2MgT0lEIHRvICIoYXJncykiCisgKi8KK2NoYXIgKgorZm9ybWF0X3Byb2Nl ZHVyZV9hcmdzKE9pZCBwcm9jZWR1cmVfb2lkLCBib29sIGZvcmNlX3F1YWxpZnkpCit7CisJU3Ry aW5nSW5mb0RhdGEgYnVmOworCUhlYXBUdXBsZSAgIHByb2N0dXA7CisJRm9ybV9wZ19wcm9jIHBy b2Nmb3JtOworCisJcHJvY3R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdl dERhdHVtKHByb2NlZHVyZV9vaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY3R1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgJXUiLCBw cm9jZWR1cmVfb2lkKTsKKwlwcm9jZm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9j dHVwKTsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWZvcm1hdF9wcm9jZWR1cmVfYXJnc19p bnRlcm5hbChwcm9jZm9ybSwgJmJ1ZiwgZm9yY2VfcXVhbGlmeSk7CisKKwlSZWxlYXNlU3lzQ2Fj aGUocHJvY3R1cCk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKKy8qCiAgKiBmb3JtYXRfcHJv Y2VkdXJlX2V4dGVuZGVkIC0gY29udmVydHMgcHJvY2VkdXJlIE9JRCB0byAicHJvX25hbWUoYXJn cykiCiAgKgogICogVGhpcyBleHBvcnRzIHRoZSB1c2VmdWwgZnVuY3Rpb25hbGl0eSBvZiByZWdw cm9jZWR1cmVvdXQgZm9yIHVzZQpAQCAtMjAxNiwzICsyMDQxLDMxIEBAIHBhcnNlTmFtZUFuZEFy Z1R5cGVzKGNvbnN0IGNoYXIgKnN0cmluZywgYm9vbCBhbGxvd05vbmUsIExpc3QgKipuYW1lcywK IAogCXJldHVybiB0cnVlOwogfQorCisvKgorICogQXBwZW5kIHRoZSBwYXJlbnRoZXNpemVkIGFy Z3VtZW50cyBvZiB0aGUgZ2l2ZW4gcGdfcHJvYyByb3cgaW50byB0aGUgb3V0cHV0CisgKiBidWZm ZXIuIGZvcmNlX3F1YWxpZnkgaW5kaWNhdGVzIHdoZXRoZXIgdG8gc2NoZW1hLXF1YWxpZnkgdHlw ZSBuYW1lcworICogcmVnYXJkbGVzcyBvZiB2aXNpYmlsaXR5LgorICovCitzdGF0aWMgdm9pZAor Zm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFsKEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwgU3Ry aW5nSW5mbyBidWYsCisJCQkJCQkJICAgYm9vbCBmb3JjZV9xdWFsaWZ5KQoreworCWludAkJCWk7 CisJY2hhcioJCSgqZnVuY1syXSkoT2lkKSA9IHtmb3JtYXRfdHlwZV9iZSwgZm9ybWF0X3R5cGVf YmVfcXVhbGlmaWVkfTsKKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJygnKTsKKwlmb3Ig KGkgPSAwOyBpIDwgcHJvY2Zvcm0tPnByb25hcmdzOyBpKyspCisJeworCQlPaWQJCQl0aGlzYXJn dHlwZSA9IHByb2Nmb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV07CisJCWNoYXIJICAgKmFyZ3R5 cGU7CisKKwkJaWYgKGkgPiAwKQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnLCcpOwor CisJCWFyZ3R5cGUgPSBmdW5jW2ZvcmNlX3F1YWxpZnldKHRoaXNhcmd0eXBlKTsKKwkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZyhidWYsIGFyZ3R5cGUpOworCQlwZnJlZShhcmd0eXBlKTsKKwl9CisJ YXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKScpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGls cy5jCmluZGV4IDlhYzQyZWYuLjYyZDdmN2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMK QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19wYXJ0aXRpb25lZF90YWJsZS5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfcHJvYy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcmV3cml0ZS5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfc3RhdGlzdGljX2V4dC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJpZ2dlci5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgpAQCAtMzU4LDcgKzM1OSw2IEBAIHN0YXRp YyBpbnQJcHJpbnRfZnVuY3Rpb25fYXJndW1lbnRzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUg cHJvY3R1cCwKIAkJCQkJCQkJCSBib29sIHByaW50X3RhYmxlX2FyZ3MsIGJvb2wgcHJpbnRfZGVm YXVsdHMpOwogc3RhdGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fcmV0dHlwZShTdHJpbmdJbmZvIGJ1 ZiwgSGVhcFR1cGxlIHByb2N0dXApOwogc3RhdGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fdHJmdHlw ZXMoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKLXN0YXRpYyB2b2lkIHByaW50 X2Z1bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0 YXRpYyB2b2lkIHNldF9ydGFibGVfbmFtZXMoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIExpc3Qg KnBhcmVudF9uYW1lc3BhY2VzLAogCQkJCQkJCSBCaXRtYXBzZXQgKnJlbHNfdXNlZCk7CiBzdGF0 aWMgdm9pZCBzZXRfZGVwYXJzZV9mb3JfcXVlcnkoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIFF1 ZXJ5ICpxdWVyeSwKQEAgLTQ4MiwyMiArNDgyLDE1IEBAIHN0YXRpYyB2b2lkIGdldF9mcm9tX2Ns YXVzZV9jb2xkZWZsaXN0KFJhbmdlVGJsRnVuY3Rpb24gKnJ0ZnVuYywKIAkJCQkJCQkJCSAgIGRl cGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBnZXRfdGFibGVzYW1wbGVfZGVm KFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwKIAkJCQkJCQkJZGVwYXJzZV9jb250ZXh0 ICpjb250ZXh0KTsKLXN0YXRpYyB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9p ZCBhY3R1YWxfZGF0YXR5cGUsCi0JCQkJCQkJIFN0cmluZ0luZm8gYnVmKTsKIHN0YXRpYyBOb2Rl ICpwcm9jZXNzSW5kaXJlY3Rpb24oTm9kZSAqbm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0 KTsKIHN0YXRpYyB2b2lkIHByaW50U3Vic2NyaXB0cyhTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiwg ZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyBjaGFyICpnZXRfcmVsYXRpb25fbmFt ZShPaWQgcmVsaWQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX3JlbGF0aW9uX25hbWUoT2lkIHJl bGlkLCBMaXN0ICpuYW1lc3BhY2VzKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRf cmVsYXRpb25fbmFtZShPaWQgcmVsaWQpOwotc3RhdGljIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9u X25hbWUoT2lkIGZ1bmNpZCwgaW50IG5hcmdzLAotCQkJCQkJCQkJTGlzdCAqYXJnbmFtZXMsIE9p ZCAqYXJndHlwZXMsCi0JCQkJCQkJCQlib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3Zhcmlh ZGljX3AsCi0JCQkJCQkJCQlQYXJzZUV4cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogc3RhdGlj IGNoYXIgKmdlbmVyYXRlX29wZXJhdG9yX25hbWUoT2lkIG9wZXJpZCwgT2lkIGFyZzEsIE9pZCBh cmcyKTsKIHN0YXRpYyB2b2lkIGFkZF9jYXN0X3RvKFN0cmluZ0luZm8gYnVmLCBPaWQgdHlwaWQp Owogc3RhdGljIGNoYXIgKmdlbmVyYXRlX3F1YWxpZmllZF90eXBlX25hbWUoT2lkIHR5cGlkKTsK IHN0YXRpYyB0ZXh0ICpzdHJpbmdfdG9fdGV4dChjaGFyICpzdHIpOwotc3RhdGljIGNoYXIgKmZs YXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpOwogc3RhdGljIHZvaWQgZ2V0X3JlbG9wdGlvbnMo U3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpOwogCiAjZGVmaW5lIG9ubHlfbWFya2Vy KHJ0ZSkgICgocnRlKS0+aW5oID8gIiIgOiAiT05MWSAiKQpAQCAtNTQ1LDYgKzUzOCwxMDQgQEAg cGdfZ2V0X3J1bGVkZWZfZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChz dHJpbmdfdG9fdGV4dChyZXMpKTsKIH0KIAorLyoKKyAqIEdpdmVuIGEgcGFpciBvZiBEYXR1bSBj b3JyZXNwb25kaW5nIHRvIGEgcnVsZSdzIHBnX3Jld3JpdGUuZXZfcXVhbCBhbmQKKyAqIGV2X2Fj dGlvbiBjb2x1bW5zLCByZXR1cm4gdGhlaXIgdGV4dCByZXByZXNlbnRhdGlvbjsgZXZfcXVhbCBh cyBhIHNpbmdsZQorICogc3RyaW5nIGluIHdoZXJlQ2xhdXNlIGFuZCBldl9hY3Rpb24gYXMgYSBM aXN0IG9mIHN0cmluZ3MgKHdoaWNoIG1pZ2h0IGJlCisgKiBOSUwsIHNpZ25hbGxpbmcgTk9USElO RykgaW4gYWN0aW9ucy4KKyAqLwordm9pZAorcGdfZ2V0X3J1bGVkZWZfZGV0YWlsZWQoRGF0dW0g ZXZfcXVhbCwgRGF0dW0gZXZfYWN0aW9uLAorCQkJCQkJY2hhciAqKndoZXJlQ2xhdXNlLCBMaXN0 ICoqYWN0aW9ucykKK3sKKwlpbnQJCQlwcmV0dHlGbGFncyA9IDA7CisJY2hhcgkgICAqcXVhbHN0 ciA9IFRleHREYXR1bUdldENTdHJpbmcoZXZfcXVhbCk7CisJY2hhcgkgICAqYWN0aW9uc3RyID0g VGV4dERhdHVtR2V0Q1N0cmluZyhldl9hY3Rpb24pOworCUxpc3QJICAgKmFjdGlvbk5vZGVMaXN0 ID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGFjdGlvbnN0cik7CisJU3RyaW5nSW5mb0RhdGEgYnVm OworCisJKndoZXJlQ2xhdXNlID0gTlVMTDsKKwkqYWN0aW9ucyA9IE5JTDsKKwlpbml0U3RyaW5n SW5mbygmYnVmKTsKKwlpZiAoKnF1YWxzdHIgJiYgc3RyY21wKHF1YWxzdHIsICI8PiIpICE9IDAp CisJeworCQlOb2RlCSAgICpxdWFsOworCQlRdWVyeQkgICAqcXVlcnk7CisJCWRlcGFyc2VfY29u dGV4dCBjb250ZXh0OworCQlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOworCisJCXF1YWwgPSBzdHJp bmdUb05vZGUocXVhbHN0cik7CisKKwkJcXVlcnkgPSAoUXVlcnkgKikgbGluaXRpYWwoYWN0aW9u Tm9kZUxpc3QpOworCQlxdWVyeSA9IGdldEluc2VydFNlbGVjdFF1ZXJ5KHF1ZXJ5LCBOVUxMKTsK KworCQlBY3F1aXJlUmV3cml0ZUxvY2tzKHF1ZXJ5LCBmYWxzZSwgZmFsc2UpOworCisJCWNvbnRl eHQuYnVmID0gJmJ1ZjsKKwkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7 CisJCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOworCQljb250ZXh0LndpbmRvd1RMaXN0ID0g TklMOworCQljb250ZXh0LnZhcnByZWZpeCA9IChsaXN0X2xlbmd0aChxdWVyeS0+cnRhYmxlKSAh PSAxKTsKKwkJY29udGV4dC5wcmV0dHlGbGFncyA9IHByZXR0eUZsYWdzOworCQljb250ZXh0Lndy YXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxUOworCQljb250ZXh0LmluZGVudExldmVsID0g UFJFVFRZSU5ERU5UX1NURDsKKworCQlzZXRfZGVwYXJzZV9mb3JfcXVlcnkoJmRwbnMsIHF1ZXJ5 LCBOSUwpOworCisJCWdldF9ydWxlX2V4cHIocXVhbCwgJmNvbnRleHQsIGZhbHNlKTsKKworCQkq d2hlcmVDbGF1c2UgPSBwc3RyZHVwKGJ1Zi5kYXRhKTsKKwl9CisKKwlpZiAobGlzdF9sZW5ndGgo YWN0aW9uTm9kZUxpc3QpID4gMCkKKwl7CisJCUxpc3RDZWxsICAgKmNlbGw7CisKKwkJZm9yZWFj aChjZWxsLCBhY3Rpb25Ob2RlTGlzdCkKKwkJeworCQkJUXVlcnkJICAgKnF1ZXJ5ID0gKFF1ZXJ5 ICopIGxmaXJzdChjZWxsKTsKKworCQkJaWYgKHF1ZXJ5LT5jb21tYW5kVHlwZSA9PSBDTURfTk9U SElORykKKwkJCQljb250aW51ZTsKKworCQkJcmVzZXRTdHJpbmdJbmZvKCZidWYpOworCQkJZ2V0 X3F1ZXJ5X2RlZihxdWVyeSwgJmJ1ZiwgTklMLCBOVUxMLCB0cnVlLAorCQkJCQkJICBwcmV0dHlG bGFncywgV1JBUF9DT0xVTU5fREVGQVVMVCwgMCk7CisJCQkqYWN0aW9ucyA9IGxhcHBlbmQoKmFj dGlvbnMsIHBzdHJkdXAoYnVmLmRhdGEpKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFRvIGdldCB0 aGUgcmV3cml0ZSBydWxlIG9mIGEgdmlldyB3aGVuIHRoZSBDUkVBVEUgVklFVyBjb21tYW5kIGV4 ZWN1dGlvbiBpcworICogc3RpbGwgaW4gcHJvZ3Jlc3M6IHdlIHNlYXJjaCB0aGUgc3lzdGVtIGNh Y2hlIFJVTEVSRUxOQU1FIHRvIGdldCB0aGUgcmV3cml0ZQorICogcnVsZSBvZiB0aGUgdmlldyBh cyBvcHBvc2VkIHRvIHF1ZXJ5aW5nIHBnX3Jld3JpdGUgYXMgaW4gcGdfZ2V0X3ZpZXdkZWZfd29y a2VyKCksCisgKiB3aGljaCB3aWxsIHJldHVybiBlbXB0eSByZXN1bHQuCisgKi8KK2NoYXIgKgor cGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwoT2lkIHZpZXdvaWQpCit7CisJU3RyaW5nSW5mb0RhdGEg YnVmOworCVJlbGF0aW9uCXBnX3Jld3JpdGU7CisJSGVhcFR1cGxlCXJ1bGV0dXA7CisJVHVwbGVE ZXNjCXJ1bGV0dGM7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlwZ19yZXdyaXRlID0gdGFi bGVfb3BlbihSZXdyaXRlUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJ1bGV0dXAg PSBTZWFyY2hTeXNDYWNoZTIoUlVMRVJFTE5BTUUsCisJCQkJCQkJICBPYmplY3RJZEdldERhdHVt KHZpZXdvaWQpLAorCQkJCQkJCSAgUG9pbnRlckdldERhdHVtKFZpZXdTZWxlY3RSdWxlTmFtZSkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChydWxldHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIHJld3JpdGUgcnVsZSBmb3IgdmlldyB3aXRoIE9JRCAldSIsIHZp ZXdvaWQpOworCisJcnVsZXR0YyA9IHBnX3Jld3JpdGUtPnJkX2F0dDsKKwltYWtlX3ZpZXdkZWYo JmJ1ZiwgcnVsZXR1cCwgcnVsZXR0YywgMCwgV1JBUF9DT0xVTU5fREVGQVVMVCk7CisJUmVsZWFz ZVN5c0NhY2hlKHJ1bGV0dXApOworCXRhYmxlX2Nsb3NlKHBnX3Jld3JpdGUsIEFjY2Vzc1NoYXJl TG9jayk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CiAKIHN0YXRpYyBjaGFyICoKIHBnX2dldF9y dWxlZGVmX3dvcmtlcihPaWQgcnVsZW9pZCwgaW50IHByZXR0eUZsYWdzKQpAQCAtMTAxNSw2NSAr MTEwNiwxMiBAQCBwZ19nZXRfdHJpZ2dlcmRlZl93b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0 dHkpCiAJaWYgKCFpc251bGwpCiAJewogCQlOb2RlCSAgICpxdWFsOwotCQljaGFyCQlyZWxraW5k OwotCQlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsKLQkJZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsK LQkJUmFuZ2VUYmxFbnRyeSAqb2xkcnRlOwotCQlSYW5nZVRibEVudHJ5ICpuZXdydGU7Ci0KLQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiV0hFTiAoIik7CisJCWNoYXIJICAgKnF1YWxz dHI7CiAKIAkJcXVhbCA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7 CisJCXF1YWxzdHIgPSBwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKHRyaWdyZWMsIHF1YWwsIHBy ZXR0eSk7CiAKLQkJcmVsa2luZCA9IGdldF9yZWxfcmVsa2luZCh0cmlncmVjLT50Z3JlbGlkKTsK LQotCQkvKiBCdWlsZCBtaW5pbWFsIE9MRCBhbmQgTkVXIFJURXMgZm9yIHRoZSByZWwgKi8KLQkJ b2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7Ci0JCW9sZHJ0ZS0+cnRla2luZCA9IFJU RV9SRUxBVElPTjsKLQkJb2xkcnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7Ci0JCW9sZHJ0 ZS0+cmVsa2luZCA9IHJlbGtpbmQ7Ci0JCW9sZHJ0ZS0+cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFy ZUxvY2s7Ci0JCW9sZHJ0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm9sZCIsIE5JTCk7Ci0JCW9sZHJ0 ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7Ci0JCW9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQlv bGRydGUtPmluaCA9IGZhbHNlOwotCQlvbGRydGUtPmluRnJvbUNsID0gdHJ1ZTsKLQotCQluZXdy dGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKLQkJbmV3cnRlLT5ydGVraW5kID0gUlRFX1JF TEFUSU9OOwotCQluZXdydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKLQkJbmV3cnRlLT5y ZWxraW5kID0gcmVsa2luZDsKLQkJbmV3cnRlLT5yZWxsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9j azsKLQkJbmV3cnRlLT5hbGlhcyA9IG1ha2VBbGlhcygibmV3IiwgTklMKTsKLQkJbmV3cnRlLT5l cmVmID0gbmV3cnRlLT5hbGlhczsKLQkJbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7Ci0JCW5ld3J0 ZS0+aW5oID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5Gcm9tQ2wgPSB0cnVlOwotCi0JCS8qIEJ1aWxk IHR3by1lbGVtZW50IHJ0YWJsZSAqLwotCQltZW1zZXQoJmRwbnMsIDAsIHNpemVvZihkcG5zKSk7 Ci0JCWRwbnMucnRhYmxlID0gbGlzdF9tYWtlMihvbGRydGUsIG5ld3J0ZSk7Ci0JCWRwbnMuc3Vi cGxhbnMgPSBOSUw7Ci0JCWRwbnMuY3RlcyA9IE5JTDsKLQkJZHBucy5hcHBlbmRyZWxzID0gTlVM TDsKLQkJc2V0X3J0YWJsZV9uYW1lcygmZHBucywgTklMLCBOVUxMKTsKLQkJc2V0X3NpbXBsZV9j b2x1bW5fbmFtZXMoJmRwbnMpOwotCi0JCS8qIFNldCB1cCBjb250ZXh0IHdpdGggb25lLWRlZXAg bmFtZXNwYWNlIHN0YWNrICovCi0JCWNvbnRleHQuYnVmID0gJmJ1ZjsKLQkJY29udGV4dC5uYW1l c3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7Ci0JCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklM OwotCQljb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOwotCQljb250ZXh0LnZhcnByZWZpeCA9IHRy dWU7Ci0JCWNvbnRleHQucHJldHR5RmxhZ3MgPSBHRVRfUFJFVFRZX0ZMQUdTKHByZXR0eSk7Ci0J CWNvbnRleHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7Ci0JCWNvbnRleHQuaW5k ZW50TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1REOwotCQljb250ZXh0LnNwZWNpYWxfZXhwcmtpbmQg PSBFWFBSX0tJTkRfTk9ORTsKLQkJY29udGV4dC5hcHBlbmRwYXJlbnRzID0gTlVMTDsKLQotCQln ZXRfcnVsZV9leHByKHF1YWwsICZjb250ZXh0LCBmYWxzZSk7Ci0KLQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmYnVmLCAiKSAiKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiV0hFTiAoJXMp ICIsIHF1YWxzdHIpOwogCX0KIAogCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIkVYRUNVVEUgRlVO Q1RJT04gJXMoIiwKQEAgLTExMTQsNiArMTE1Miw2OSBAQCBwZ19nZXRfdHJpZ2dlcmRlZl93b3Jr ZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJcmV0dXJuIGJ1Zi5kYXRhOwogfQogCisvKgor ICogUGFzcyBiYWNrIHRoZSBUcmlnZ2VyV2hlbiBjbGF1c2Ugb2YgYSB0cmlnZ2VyIGdpdmVuIHRo ZSBwZ190cmlnZ2VyIHJlY29yZCBhbmQKKyAqIHRoZSBleHByZXNzaW9uIHRyZWUgKGluIG5vZGVU b1N0cmluZygpIHJlcHJlc2VudGF0aW9uKSBmcm9tIHBnX3RyaWdnZXIudGdxdWFsCisgKiBmb3Ig dGhlIHRyaWdnZXIncyBXSEVOIGNvbmRpdGlvbi4KKyAqLworY2hhciAqCitwZ19nZXRfdHJpZ2dl cl93aGVuY2xhdXNlKEZvcm1fcGdfdHJpZ2dlciB0cmlncmVjLCBOb2RlICp3aGVuQ2xhdXNlLCBi b29sIHByZXR0eSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJY2hhcgkJcmVsa2luZDsKKwlk ZXBhcnNlX2NvbnRleHQgY29udGV4dDsKKwlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOworCVJhbmdl VGJsRW50cnkgKm9sZHJ0ZTsKKwlSYW5nZVRibEVudHJ5ICpuZXdydGU7CisKKwlpbml0U3RyaW5n SW5mbygmYnVmKTsKKworCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQodHJpZ3JlYy0+dGdyZWxp ZCk7CisKKwkvKiBCdWlsZCBtaW5pbWFsIE9MRCBhbmQgTkVXIFJURXMgZm9yIHRoZSByZWwgKi8K KwlvbGRydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKwlvbGRydGUtPnJ0ZWtpbmQgPSBS VEVfUkVMQVRJT047CisJb2xkcnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7CisJb2xkcnRl LT5yZWxraW5kID0gcmVsa2luZDsKKwlvbGRydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJvbGQiLCBO SUwpOworCW9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7CisJb2xkcnRlLT5sYXRlcmFsID0g ZmFsc2U7CisJb2xkcnRlLT5pbmggPSBmYWxzZTsKKwlvbGRydGUtPmluRnJvbUNsID0gdHJ1ZTsK KworCW5ld3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOworCW5ld3J0ZS0+cnRla2luZCA9 IFJURV9SRUxBVElPTjsKKwluZXdydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKKwluZXdy dGUtPnJlbGtpbmQgPSByZWxraW5kOworCW5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm5ldyIs IE5JTCk7CisJbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsKKwluZXdydGUtPmxhdGVyYWwg PSBmYWxzZTsKKwluZXdydGUtPmluaCA9IGZhbHNlOworCW5ld3J0ZS0+aW5Gcm9tQ2wgPSB0cnVl OworCisJLyogQnVpbGQgdHdvLWVsZW1lbnQgcnRhYmxlICovCisJbWVtc2V0KCZkcG5zLCAwLCBz aXplb2YoZHBucykpOworCWRwbnMucnRhYmxlID0gbGlzdF9tYWtlMihvbGRydGUsIG5ld3J0ZSk7 CisJZHBucy5jdGVzID0gTklMOworCXNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwgTlVMTCk7 CisJc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRwbnMpOworCisJLyogU2V0IHVwIGNvbnRleHQg d2l0aCBvbmUtZGVlcCBuYW1lc3BhY2Ugc3RhY2sgKi8KKwljb250ZXh0LmJ1ZiA9ICZidWY7CisJ Y29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7CisJY29udGV4dC53aW5kb3dD bGF1c2UgPSBOSUw7CisJY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKKwljb250ZXh0LnZhcnBy ZWZpeCA9IHRydWU7CisJY29udGV4dC5wcmV0dHlGbGFncyA9IHByZXR0eSA/IFBSRVRUWUZMQUdf UEFSRU4gfCBQUkVUVFlGTEFHX0lOREVOVCA6IFBSRVRUWUZMQUdfSU5ERU5UOworCWNvbnRleHQu d3JhcENvbHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7CisJY29udGV4dC5pbmRlbnRMZXZlbCA9 IFBSRVRUWUlOREVOVF9TVEQ7CisJY29udGV4dC5zcGVjaWFsX2V4cHJraW5kID0gRVhQUl9LSU5E X05PTkU7CisKKwlnZXRfcnVsZV9leHByKHdoZW5DbGF1c2UsICZjb250ZXh0LCBmYWxzZSk7CisK KwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKIC8qIC0tLS0tLS0tLS0KICAqIHBnX2dldF9pbmRleGRl ZgkJCS0gR2V0IHRoZSBkZWZpbml0aW9uIG9mIGFuIGluZGV4CiAgKgpAQCAtMTg4MCw2ICsxOTgx LDEzIEBAIHBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSkK IAlyZXR1cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCBwcmV0dHlGbGFncywgdHJ1 ZSwgZmFsc2UpOwogfQogCisvKiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmVwb3J0cyB0aGUgZnVs bCBwYXJ0aXRpb24ga2V5IGRlZmluaXRpb24gKi8KK2NoYXIgKgorcGdfZ2V0X3BhcnRrZXlkZWZf c2ltcGxlKE9pZCByZWxpZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKHJl bGlkLCAwLCBmYWxzZSwgZmFsc2UpOworfQorCiAvKgogICogSW50ZXJuYWwgd29ya2hvcnNlIHRv IGRlY29tcGlsZSBhIHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlvbi4KICAqLwpAQCAtMjEzMiw2ICsy MjQwLDE1IEBAIHBnX2dldF9jb25zdHJhaW50ZGVmX2V4dChQR19GVU5DVElPTl9BUkdTKQogfQog CiAvKgorICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgdGhlIGRlZmluaXRpb24gb2Yg YSBDT05TVFJBSU5UIGNvbW1hbmQKKyAqLworY2hhciAqCitwZ19nZXRfY29uc3RyYWludGRlZl9j b21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKQoreworCXJldHVybiBwZ19nZXRfY29uc3Ry YWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwgMCwgZmFsc2UpOworfQorCisvKgog ICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgYSBmdWxsIEFMVEVSIFRBQkxFIC4uLiBB REQgQ09OU1RSQUlOVCBjb21tYW5kCiAgKi8KIGNoYXIgKgpAQCAtMzUwMSw3ICszNjE4LDEyIEBA IHBnX2dldF9mdW5jdGlvbl9hcmdfZGVmYXVsdChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVS Tl9URVhUX1Aoc3RyaW5nX3RvX3RleHQoc3RyKSk7CiB9CiAKLXN0YXRpYyB2b2lkCisvKgorICog UHJvZHVjZSB0aGUgZm9ybWF0dGVkIFNRTCBib2R5IChub3QgdGhlIHdob2xlIGZ1bmN0aW9uIGRl ZmluaXRpb24pCisgKiBvZiBhIGZ1bmN0aW9uIGdpdmVuIHRoZSBwZ19wcm9jIHR1cGxlLiBTYXZl IHRoZSBmb3JtYXR0ZWQgU1FMIGluIHRoZQorICogZ2l2ZW4gU3RyaW5nSW5mby4KKyAqLwordm9p ZAogcHJpbnRfZnVuY3Rpb25fc3FsYm9keShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0 dXApCiB7CiAJaW50CQkJbnVtYXJnczsKQEAgLTExMzU3LDcgKzExNDc5LDcgQEAgZ2V0X3RhYmxl c2FtcGxlX2RlZihUYWJsZVNhbXBsZUNsYXVzZSAqdGFibGVzYW1wbGUsIGRlcGFyc2VfY29udGV4 dCAqY29udGV4dCkKICAqIGFjdHVhbF9kYXRhdHlwZS4gIChJZiB5b3UgZG9uJ3Qgd2FudCB0aGlz IGJlaGF2aW9yLCBqdXN0IHBhc3MKICAqIEludmFsaWRPaWQgZm9yIGFjdHVhbF9kYXRhdHlwZS4p CiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBP aWQgYWN0dWFsX2RhdGF0eXBlLAogCQkJCSBTdHJpbmdJbmZvIGJ1ZikKIHsKQEAgLTExNzUxLDcg KzExODczLDcgQEAgZ2VuZXJhdGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKQog ICoKICAqIFRoZSByZXN1bHQgaW5jbHVkZXMgYWxsIG5lY2Vzc2FyeSBxdW90aW5nIGFuZCBzY2hl bWEtcHJlZml4aW5nLgogICovCi1zdGF0aWMgY2hhciAqCitjaGFyICoKIGdlbmVyYXRlX2Z1bmN0 aW9uX25hbWUoT2lkIGZ1bmNpZCwgaW50IG5hcmdzLCBMaXN0ICphcmduYW1lcywgT2lkICphcmd0 eXBlcywKIAkJCQkJICAgYm9vbCBoYXNfdmFyaWFkaWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAog CQkJCQkgICBQYXJzZUV4cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpCkBAIC0xMjEzNyw3ICsxMjI1 OSw3IEBAIGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKQog LyoKICAqIEdlbmVyYXRlIGEgQyBzdHJpbmcgcmVwcmVzZW50aW5nIGEgcmVsYXRpb24ncyByZWxv cHRpb25zLCBvciBOVUxMIGlmIG5vbmUuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZmxh dHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCkKIHsKIAljaGFyCSAgICpyZXN1bHQgPSBOVUxMOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCmluZGV4IDZlY2FhMmEuLjcxNWYyYTIgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAorKysgYi9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKQEAgLTE4LDggKzE4LDggQEAKICNkZWZp bmUgUEdfUFVCTElDQVRJT05fSAogCiAjaW5jbHVkZSAiY2F0YWxvZy9nZW5ia2kuaCIKLSNpbmNs dWRlICJjYXRhbG9nL29iamVjdGFkZHJlc3MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uX2QuaCIKKyNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCiAKIC8qIC0tLS0tLS0tLS0t LS0tLS0KICAqCQlwZ19wdWJsaWNhdGlvbiBkZWZpbml0aW9uLiAgY3BwIHR1cm5zIHRoaXMgaW50 bwpAQCAtMTAzLDEyICsxMDMsNiBAQCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbgogCVB1Ymxp Y2F0aW9uQWN0aW9ucyBwdWJhY3Rpb25zOwogfSBQdWJsaWNhdGlvbjsKIAotdHlwZWRlZiBzdHJ1 Y3QgUHVibGljYXRpb25SZWxJbmZvCi17Ci0JUmVsYXRpb24JcmVsYXRpb247Ci0JTm9kZQkgICAq d2hlcmVDbGF1c2U7Ci0JTGlzdAkgICAqY29sdW1uczsKLX0gUHVibGljYXRpb25SZWxJbmZvOwog CiBleHRlcm4gUHVibGljYXRpb24gKkdldFB1YmxpY2F0aW9uKE9pZCBwdWJpZCk7CiBleHRlcm4g UHVibGljYXRpb24gKkdldFB1YmxpY2F0aW9uQnlOYW1lKGNvbnN0IGNoYXIgKnB1Ym5hbWUsIGJv b2wgbWlzc2luZ19vayk7CkBAIC0xNDQsMTUgKzEzOCw2IEBAIGV4dGVybiBMaXN0ICpHZXRQdWJQ YXJ0aXRpb25PcHRpb25SZWxhdGlvbnMoTGlzdCAqcmVzdWx0LAogCQkJCQkJCQkJCQlPaWQgcmVs aWQpOwogZXh0ZXJuIE9pZAlHZXRUb3BNb3N0QW5jZXN0b3JJblB1YmxpY2F0aW9uKE9pZCBwdWJv aWQsIExpc3QgKmFuY2VzdG9ycywKIAkJCQkJCQkJCQkJaW50ICphbmNlc3Rvcl9sZXZlbCk7Ci0K LWV4dGVybiBib29sIGlzX3B1Ymxpc2hhYmxlX3JlbGF0aW9uKFJlbGF0aW9uIHJlbCk7CiBleHRl cm4gYm9vbCBpc19zY2hlbWFfcHVibGljYXRpb24oT2lkIHB1YmlkKTsKLWV4dGVybiBPYmplY3RB ZGRyZXNzIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQgcHViaWQsIFB1YmxpY2F0aW9uUmVs SW5mbyAqcHJpLAotCQkJCQkJCQkJCQkgIGJvb2wgaWZfbm90X2V4aXN0cyk7Ci1leHRlcm4gT2Jq ZWN0QWRkcmVzcyBwdWJsaWNhdGlvbl9hZGRfc2NoZW1hKE9pZCBwdWJpZCwgT2lkIHNjaGVtYWlk LAotCQkJCQkJCQkJCQlib29sIGlmX25vdF9leGlzdHMpOwotCi1leHRlcm4gQml0bWFwc2V0ICpw dWJfY29sbGlzdF90b19iaXRtYXBzZXQoQml0bWFwc2V0ICpjb2x1bW5zLCBEYXR1bSBwdWJjb2xz LAotCQkJCQkJCQkJCSAgIE1lbW9yeUNvbnRleHQgbWN4dCk7CiAKICNlbmRpZgkJCQkJCQkvKiBQ R19QVUJMSUNBVElPTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb2xs YXRpb25jbWRzLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmgKaW5kZXgg Yjc2YzdiMy4uNTNjNGExYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29sbGF0 aW9uY21kcy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaApAQCAt MTgsNyArMTgsOCBAQAogI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0YWRkcmVzcy5oIgogI2luY2x1 ZGUgInBhcnNlci9wYXJzZV9ub2RlLmgiCiAKLWV4dGVybiBPYmplY3RBZGRyZXNzIERlZmluZUNv bGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJz LCBib29sIGlmX25vdF9leGlzdHMpOworZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lQ29sbGF0 aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsCisJ CQkJCQkJCQkgIGJvb2wgaWZfbm90X2V4aXN0cywgT2JqZWN0QWRkcmVzcyAqZnJvbV9jb2xsaWQp OwogZXh0ZXJuIHZvaWQgSXNUaGVyZUNvbGxhdGlvbkluTmFtZXNwYWNlKGNvbnN0IGNoYXIgKmNv bGxuYW1lLCBPaWQgbnNwT2lkKTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIEFsdGVyQ29sbGF0aW9u KEFsdGVyQ29sbGF0aW9uU3RtdCAqc3RtdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuaAppbmRleCA1ZWQ2ZWNlLi40OGM2NWVmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21t YW5kcy9ldmVudF90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5oCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9kZXBlbmRlbmN5Lmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhZGRyZXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19ldmVudF90cmlnZ2VyLmgiCisjaW5jbHVkZSAibGliL2lsaXN0LmgiCiAjaW5jbHVkZSAibm9k ZXMvcGFyc2Vub2Rlcy5oIgogI2luY2x1ZGUgInRjb3AvY21kdGFnLmgiCiAjaW5jbHVkZSAidGNv cC9kZXBhcnNlX3V0aWxpdHkuaCIKQEAgLTI5LDYgKzMwLDQ0IEBAIHR5cGVkZWYgc3RydWN0IEV2 ZW50VHJpZ2dlckRhdGEKIAlDb21tYW5kVGFnCXRhZzsKIH0gRXZlbnRUcmlnZ2VyRGF0YTsKIAor dHlwZWRlZiBzdHJ1Y3QgRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZQoreworCS8qIG1lbW9yeSBjb250 ZXh0IGZvciB0aGlzIHN0YXRlJ3Mgb2JqZWN0cyAqLworCU1lbW9yeUNvbnRleHQgY3h0OworCisJ Lyogc3FsX2Ryb3AgKi8KKwlzbGlzdF9oZWFkCVNRTERyb3BMaXN0OworCWJvb2wJCWluX3NxbF9k cm9wOworCisJLyogdGFibGVfcmV3cml0ZSAqLworCU9pZAkJCXRhYmxlX3Jld3JpdGVfb2lkOwkv KiBJbnZhbGlkT2lkLCBvciBzZXQgZm9yIHRhYmxlX3Jld3JpdGUKKwkJCQkJCQkJCSAqIGV2ZW50 ICovCisJaW50CQkJdGFibGVfcmV3cml0ZV9yZWFzb247CS8qIEFUX1JFV1JJVEUgcmVhc29uICov CisKKwkvKiBTdXBwb3J0IGZvciBjb21tYW5kIGNvbGxlY3Rpb24gKi8KKwlib29sCQljb21tYW5k Q29sbGVjdGlvbkluaGliaXRlZDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjdXJyZW50Q29tbWFuZDsK KwlMaXN0CSAgICpjb21tYW5kTGlzdDsJLyogbGlzdCBvZiBDb2xsZWN0ZWRDb21tYW5kOyBzZWUK KwkJCQkJCQkJICogZGVwYXJzZV91dGlsaXR5LmggKi8KKwlzdHJ1Y3QgRXZlbnRUcmlnZ2VyUXVl cnlTdGF0ZSAqcHJldmlvdXM7Cit9IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGU7CisKKy8qIFN1cHBv cnQgZm9yIGRyb3BwZWQgb2JqZWN0cyAqLwordHlwZWRlZiBzdHJ1Y3QgU1FMRHJvcE9iamVjdAor eworCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwljb25zdCBjaGFyICpzY2hlbWFuYW1lOworCWNv bnN0IGNoYXIgKm9iam5hbWU7CisJY29uc3QgY2hhciAqb2JqaWRlbnRpdHk7CisJY29uc3QgY2hh ciAqb2JqZWN0dHlwZTsKKwlMaXN0CSAgICphZGRybmFtZXM7CisJTGlzdAkgICAqYWRkcmFyZ3M7 CisJYm9vbAkJb3JpZ2luYWw7CisJYm9vbAkJbm9ybWFsOworCWJvb2wJCWlzdGVtcDsKKwlzbGlz dF9ub2RlCW5leHQ7Cit9IFNRTERyb3BPYmplY3Q7CisKICNkZWZpbmUgQVRfUkVXUklURV9BTFRF Ul9QRVJTSVNURU5DRQkweDAxCiAjZGVmaW5lIEFUX1JFV1JJVEVfREVGQVVMVF9WQUwJCQkweDAy CiAjZGVmaW5lIEFUX1JFV1JJVEVfQ09MVU1OX1JFV1JJVEUJCTB4MDQKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oIGIvc3JjL2luY2x1ZGUvY29tbWFu ZHMvcHVibGljYXRpb25jbWRzLmgKaW5kZXggNzBkNWUzNi4uYTNmY2E5ZSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmgKKysrIGIvc3JjL2luY2x1ZGUv Y29tbWFuZHMvcHVibGljYXRpb25jbWRzLmgKQEAgLTIyLDYgKzIyLDEzIEBACiAvKiBTYW1lIGFz IE1BWE5VTU1FU1NBR0VTIGluIHNpbnZhbGFkdC5jICovCiAjZGVmaW5lIE1BWF9SRUxDQUNIRV9J TlZBTF9NU0dTIDQwOTYKIAordHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25SZWxJbmZvCit7CisJ UmVsYXRpb24JcmVsYXRpb247CisJTm9kZQkgICAqd2hlcmVDbGF1c2U7CisJTGlzdAkgICAqY29s dW1uczsKK30gUHVibGljYXRpb25SZWxJbmZvOworCiBleHRlcm4gT2JqZWN0QWRkcmVzcyBDcmVh dGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAq c3RtdCk7CiBleHRlcm4gdm9pZCBBbHRlclB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwg QWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQpOwogZXh0ZXJuIHZvaWQgUmVtb3ZlUHVibGljYXRp b25CeUlkKE9pZCBwdWJpZCk7CkBAIC0zNSw1ICs0MiwxMiBAQCBleHRlcm4gYm9vbCBwdWJfcmZf Y29udGFpbnNfaW52YWxpZF9jb2x1bW4oT2lkIHB1YmlkLCBSZWxhdGlvbiByZWxhdGlvbiwKIAkJ CQkJCQkJCQkgICBMaXN0ICphbmNlc3RvcnMsIGJvb2wgcHVidmlhcm9vdCk7CiBleHRlcm4gYm9v bCBwdWJfY29sbGlzdF9jb250YWluc19pbnZhbGlkX2NvbHVtbihPaWQgcHViaWQsIFJlbGF0aW9u IHJlbGF0aW9uLAogCQkJCQkJCQkJCQkJTGlzdCAqYW5jZXN0b3JzLCBib29sIHB1YnZpYXJvb3Qp OworZXh0ZXJuIEJpdG1hcHNldCAqcHViX2NvbGxpc3RfdG9fYml0bWFwc2V0KEJpdG1hcHNldCAq Y29sdW1ucywgRGF0dW0gcHViY29scywKKwkJCQkJCQkJCQkgICBNZW1vcnlDb250ZXh0IG1jeHQp OworZXh0ZXJuIE9iamVjdEFkZHJlc3MgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJp ZCwgUHVibGljYXRpb25SZWxJbmZvICpwcmksCisJCQkJCQkJCQkJCSAgYm9vbCBpZl9ub3RfZXhp c3RzKTsKK2V4dGVybiBPYmplY3RBZGRyZXNzIHB1YmxpY2F0aW9uX2FkZF9zY2hlbWEoT2lkIHB1 YmlkLCBPaWQgc2NoZW1haWQsCisJCQkJCQkJCQkJCWJvb2wgaWZfbm90X2V4aXN0cyk7CitleHRl cm4gYm9vbCBpc19wdWJsaXNoYWJsZV9yZWxhdGlvbihSZWxhdGlvbiByZWwpOwogCiAjZW5kaWYJ CQkJCQkJLyogUFVCTElDQVRJT05DTURTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL3NlcXVlbmNlLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCmluZGV4 IDdkYjdiM2QuLjMwOWRhMGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVl bmNlLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaApAQCAtNTQsNiArNTQs NyBAQCB0eXBlZGVmIHN0cnVjdCB4bF9zZXFfcmVjCiBleHRlcm4gaW50NjQgbmV4dHZhbF9pbnRl cm5hbChPaWQgcmVsaWQsIGJvb2wgY2hlY2tfcGVybWlzc2lvbnMpOwogZXh0ZXJuIERhdHVtIG5l eHR2YWwoUEdfRlVOQ1RJT05fQVJHUyk7CiBleHRlcm4gTGlzdCAqc2VxdWVuY2Vfb3B0aW9ucyhP aWQgcmVsaWQpOworZXh0ZXJuIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBnZXRfc2VxdWVuY2VfdmFs dWVzKE9pZCBzZXF1ZW5jZUlkKTsKIAogZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lU2VxdWVu Y2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTZXFTdG10ICpzZXEpOwogZXh0ZXJuIE9iamVj dEFkZHJlc3MgQWx0ZXJTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2VxU3RtdCAq c3RtdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL3V0aWxpdHkuaCBiL3NyYy9pbmNs dWRlL3Rjb3AvdXRpbGl0eS5oCmluZGV4IDU5ZTY0YWUuLmE2OGNlM2QgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5o CkBAIC05OSw2ICs5OSw4IEBAIGV4dGVybiBRdWVyeSAqVXRpbGl0eUNvbnRhaW5zUXVlcnkoTm9k ZSAqcGFyc2V0cmVlKTsKIAogZXh0ZXJuIENvbW1hbmRUYWcgQ3JlYXRlQ29tbWFuZFRhZyhOb2Rl ICpwYXJzZXRyZWUpOwogCitleHRlcm4gY29uc3QgY2hhciAqc3RyaW5naWZ5X29ianR5cGUoT2Jq ZWN0VHlwZSBvYmp0eXBlLCBib29sIGlzZ3JhbnQpOworCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNo YXIgKgogQ3JlYXRlQ29tbWFuZE5hbWUoTm9kZSAqcGFyc2V0cmVlKQogewpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvdXRpbHMvYWNsLmggYi9zcmMvaW5jbHVkZS91dGlscy9hY2wuaAppbmRleCBm OGUxMjM4Li5mMDU1NzhkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9hY2wuaAorKysg Yi9zcmMvaW5jbHVkZS91dGlscy9hY2wuaApAQCAtMjA5LDYgKzIwOSw4IEBAIGV4dGVybiBBY2xN b2RlIGFjbG1hc2soY29uc3QgQWNsICphY2wsIE9pZCByb2xlaWQsIE9pZCBvd25lcklkLAogCQkJ CQkgICBBY2xNb2RlIG1hc2ssIEFjbE1hc2tIb3cgaG93KTsKIGV4dGVybiBpbnQJYWNsbWVtYmVy cyhjb25zdCBBY2wgKmFjbCwgT2lkICoqcm9sZWlkcyk7CiAKK2V4dGVybiBjb25zdCBjaGFyICpw cml2aWxlZ2VfdG9fc3RyaW5nKEFjbE1vZGUgcHJpdmlsZWdlKTsKKwogZXh0ZXJuIGJvb2wgaGFz X3ByaXZzX29mX3JvbGUoT2lkIG1lbWJlciwgT2lkIHJvbGUpOwogZXh0ZXJuIGJvb2wgbWVtYmVy X2Nhbl9zZXRfcm9sZShPaWQgbWVtYmVyLCBPaWQgcm9sZSk7CiBleHRlcm4gdm9pZCBjaGVja19j YW5fc2V0X3JvbGUoT2lkIG1lbWJlciwgT2lkIHJvbGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdXRpbHMvYWNsY2hrX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50 ZXJuYWwuaAppbmRleCA1NWFmNjI0Li45NDY1NDVmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9hY2xjaGtfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50 ZXJuYWwuaApAQCAtMzksNiArMzksNyBAQCB0eXBlZGVmIHN0cnVjdAogCUxpc3QJICAgKmdyYW50 ZWVzOwogCWJvb2wJCWdyYW50X29wdGlvbjsKIAlEcm9wQmVoYXZpb3IgYmVoYXZpb3I7CisJT2lk CQkJZ3JhbnRvcl91aWQ7CiB9IEludGVybmFsR3JhbnQ7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKaW5k ZXggMmY4YjQ2ZC4uNDhiOGJmZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRp bnMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCkBAIC0xMjMsMTAgKzEyMywx MiBAQCBleHRlcm4gRGF0dW0gbnVtZXJpY19mbG9hdDhfbm9fb3ZlcmZsb3coUEdfRlVOQ1RJT05f QVJHUyk7CiAjZGVmaW5lIEZPUk1BVF9UWVBFX0ZPUkNFX1FVQUxJRlkJMHgwNAkvKiBmb3JjZSBx dWFsaWZpY2F0aW9uIG9mIHR5cGUgKi8KICNkZWZpbmUgRk9STUFUX1RZUEVfSU5WQUxJRF9BU19O VUxMCTB4MDgJLyogTlVMTCBpZiB1bmRlZmluZWQgKi8KIGV4dGVybiBjaGFyICpmb3JtYXRfdHlw ZV9leHRlbmRlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsIGJpdHMxNiBmbGFncyk7Citl eHRlcm4gY2hhciAqZm9ybWF0X3Byb2NlZHVyZV9hcmdzKE9pZCBwcm9jZWR1cmVfb2lkLCBib29s IGZvcmNlX3F1YWxpZnkpOwogCiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfYmUoT2lkIHR5cGVf b2lkKTsKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQoT2lkIHR5cGVfb2lk KTsKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBp bnQzMiB0eXBlbW9kKTsKK2V4dGVybiBjaGFyICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBu YW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQpOwogCiBleHRlcm4gaW50MzIgdHlwZV9t YXhpbXVtX3NpemUoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKIApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvdXRpbHMvcmVsLmggYi9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAppbmRleCBh Zjk3ODUwLi4xMDNiMzkyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAorKysg Yi9zcmMvaW5jbHVkZS91dGlscy9yZWwuaApAQCAtMTYsMTAgKzE2LDEyIEBACiAKICNpbmNsdWRl ICJhY2Nlc3MvdHVwZGVzYy5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9vYmplY3RhZGRyZXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfaW5kZXguaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmgiCiAjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCisjaW5jbHVkZSAibm9kZXMv bG9ja29wdGlvbnMuaCIKICNpbmNsdWRlICJwYXJ0aXRpb25pbmcvcGFydGRlZnMuaCIKICNpbmNs dWRlICJyZXdyaXRlL3ByczJsb2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5oIgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGls cy9ydWxldXRpbHMuaAppbmRleCAxYTQyZDlmLi5jMzNjOGQwIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS91dGlscy9ydWxldXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMu aApAQCAtMTMsOSArMTMsMTIgQEAKICNpZm5kZWYgUlVMRVVUSUxTX0gKICNkZWZpbmUgUlVMRVVU SUxTX0gKIAorI2luY2x1ZGUgImFjY2Vzcy9odHVwLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190 cmlnZ2VyLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJz ZW5vZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlci9w YXJzZV9ub2RlLmgiCiAKIHN0cnVjdCBQbGFuOwkJCQkJLyogYXZvaWQgaW5jbHVkaW5nIHBsYW5u b2Rlcy5oIGhlcmUgKi8KIHN0cnVjdCBQbGFubmVkU3RtdDsKQEAgLTIzLDEyICsyNiwyMCBAQCBz dHJ1Y3QgUGxhbm5lZFN0bXQ7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZfc3RyaW5n KE9pZCBpbmRleHJlbGlkKTsKIGV4dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZfY29sdW1ucyhP aWQgaW5kZXhyZWxpZCwgYm9vbCBwcmV0dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dldF90cmlnZ2Vy X3doZW5jbGF1c2UoRm9ybV9wZ190cmlnZ2VyIHRyaWdyZWMsCisJCQkJCQkJCQkgICBOb2RlICp3 aGVuQ2xhdXNlLCBib29sIHByZXR0eSk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3F1ZXJ5ZGVmKFF1 ZXJ5ICpxdWVyeSwgYm9vbCBwcmV0dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dldF92aWV3ZGVmX2lu dGVybmFsKE9pZCB2aWV3b2lkKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVmX2Nv bHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRr ZXlkZWZfc2ltcGxlKE9pZCByZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRjb25zdHJk ZWZfc3RyaW5nKE9pZCBwYXJ0aXRpb25JZCwgY2hhciAqYWxpYXNuYW1lKTsKIAogZXh0ZXJuIGNo YXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFpbnRJZCk7CitleHRl cm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoT2lkIGNvbnN0cmFp bnRJZCk7CitleHRlcm4gdm9pZCBwZ19nZXRfcnVsZWRlZl9kZXRhaWxlZChEYXR1bSBldl9xdWFs LCBEYXR1bSBldl9hY3Rpb24sCisJCQkJCQkJCQljaGFyICoqd2hlcmVDbGF1c2UsIExpc3QgKiph Y3Rpb25zKTsKKwogZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZXhwcmVzc2lvbihOb2RlICpleHByLCBM aXN0ICpkcGNvbnRleHQsCiAJCQkJCQkJCWJvb2wgZm9yY2VwcmVmaXgsIGJvb2wgc2hvd2ltcGxp Y2l0KTsKIGV4dGVybiBMaXN0ICpkZXBhcnNlX2NvbnRleHRfZm9yKGNvbnN0IGNoYXIgKmFsaWFz bmFtZSwgT2lkIHJlbGlkKTsKQEAgLTQwLDggKzUxLDE2IEBAIGV4dGVybiBMaXN0ICpzZWxlY3Rf cnRhYmxlX25hbWVzX2Zvcl9leHBsYWluKExpc3QgKnJ0YWJsZSwKIAkJCQkJCQkJCQkJIEJpdG1h cHNldCAqcmVsc191c2VkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9jb2xsYXRpb25fbmFtZShP aWQgY29sbGlkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9vcGNsYXNzX25hbWUoT2lkIG9wY2xh c3MpOworZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwgaW50 IG5hcmdzLCBMaXN0ICphcmduYW1lcywKKwkJCQkJCQkJCU9pZCAqYXJndHlwZXMsIGJvb2wgaGFz X3ZhcmlhZGljLAorCQkJCQkJCQkJYm9vbCAqdXNlX3ZhcmlhZGljX3AsCisJCQkJCQkJCQlQYXJz ZUV4cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogZXh0ZXJuIGNoYXIgKmdldF9yYW5nZV9wYXJ0 Ym91bmRfc3RyaW5nKExpc3QgKmJvdW5kX2RhdHVtcyk7CitleHRlcm4gdm9pZCBnZXRfb3BjbGFz c19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAorCQkJCQkJCSBTdHJpbmdJ bmZvIGJ1Zik7CitleHRlcm4gY2hhciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7CiAK IGV4dGVybiBjaGFyICpwZ19nZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmcoT2lkIHN0YXRleHRp ZCk7CitleHRlcm4gdm9pZCBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBI ZWFwVHVwbGUgcHJvY3R1cCk7CiAKICNlbmRpZgkJCQkJCQkvKiBSVUxFVVRJTFNfSCAqLwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3RfYWRkcmVzcy5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dAppbmRleCAyNWMxNzRm Li5mYzQyZDQxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9h ZGRyZXNzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNz Lm91dApAQCAtNDk2LDcgKzQ5Niw3IEBAIG9wZXJhdG9yIGZhbWlseXxwZ19jYXRhbG9nfGludGVn ZXJfb3BzfHBnX2NhdGFsb2cuaW50ZWdlcl9vcHMgVVNJTkcgYnRyZWV8dAogcG9saWN5fE5VTEx8 TlVMTHxnZW5wb2wgb24gYWRkcl9uc3AuZ2VudGFibGV8dAogc3RhdGlzdGljcyBvYmplY3R8YWRk cl9uc3B8Z2VudGFibGVfc3RhdHxhZGRyX25zcC5nZW50YWJsZV9zdGF0fHQKIGNvbGxhdGlvbnxw Z19jYXRhbG9nfCJkZWZhdWx0InxwZ19jYXRhbG9nLiJkZWZhdWx0Inx0Ci10cmFuc2Zvcm18TlVM THxOVUxMfGZvciBpbnRlZ2VyIG9uIGxhbmd1YWdlIHNxbHx0Cit0cmFuc2Zvcm18TlVMTHxOVUxM fGZvciBpbnRlZ2VyIGxhbmd1YWdlIHNxbHx0CiB0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5fGFkZHJf bnNwfGFkZHJfdHNfZGljdHxhZGRyX25zcC5hZGRyX3RzX2RpY3R8dAogdGV4dCBzZWFyY2ggcGFy c2VyfGFkZHJfbnNwfGFkZHJfdHNfcHJzfGFkZHJfbnNwLmFkZHJfdHNfcHJzfHQKIHRleHQgc2Vh cmNoIGNvbmZpZ3VyYXRpb258YWRkcl9uc3B8YWRkcl90c19jb25mfGFkZHJfbnNwLmFkZHJfdHNf Y29uZnx0Ci0tIAoxLjguMy4xCgo= --000000000000846be105f4416101 Content-Type: application/octet-stream; name="v67-0005-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Disposition: attachment; filename="v67-0005-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ldwxbacb4 RnJvbSA3YzEyNTMwOGUzZjA2NmE3ZjQwMGJmZTUxYzNjNjI2Y2Y4OWU5NTFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgOSBGZWIgMjAyMyAwMzo0NTozMyAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djY3IDUvN10gRERMIG1lc3NhZ2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgRERMIHJlcGxpY2F0aW9u LgoKRERMIG1lc3NhZ2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgRERMIHJlcGxpY2F0aW9uLgotLS0K IGNvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3RlZC9kZGwub3V0ICAgICAgICAgIHwgIDI2ICsr KysrCiBjb250cmliL3Rlc3RfZGVjb2Rpbmcvc3FsL2RkbC5zcWwgICAgICAgICAgICAgICB8ICAg NSArCiBjb250cmliL3Rlc3RfZGVjb2RpbmcvdGVzdF9kZWNvZGluZy5jICAgICAgICAgICB8ICA0 OCArKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSAgICAgICAg ICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVz Yy5jIHwgIDUyICsrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5i dWlsZCAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYyAg ICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFr ZWZpbGUgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRs bWVzc2FnZS5jICAgIHwgIDg0ICsrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvZGVjb2RlLmMgICAgICAgIHwgIDQxICsrKysrKysrCiBzcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYyAgICAgICB8ICA0NCArKysrKysrKwogc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsZnVuY3MuYyAgfCAgMjQgKysrKysKIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQgICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIHwgMTI3ICsrKysr KysrKysrKysrKysrKysrKysrKwogc3JjL2Jpbi9wZ193YWxkdW1wL2xvZ2ljYWxkZGxtc2dkZXNj LmMgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMgICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmggICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAg ICAgICAgICAgICAgfCAgIDggKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2Uu aCAgICAgICAgICAgIHwgIDYwICsrKysrKysrKysrCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9k ZWNvZGUuaCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9v dXRwdXRfcGx1Z2luLmggICAgICAgICB8ICAxNCArKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3Jlb3JkZXJidWZmZXIuaCAgICAgICAgIHwgIDI3ICsrKysrCiAyMiBmaWxlcyBjaGFuZ2VkLCA1 NjkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2FjY2Vzcy9y bWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKIGNyZWF0ZSBtb2RlIDEyMDAwMCBz cmMvYmluL3BnX3dhbGR1bXAvbG9naWNhbGRkbG1zZ2Rlc2MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaAoKZGlmZiAtLWdpdCBhL2NvbnRy aWIvdGVzdF9kZWNvZGluZy9leHBlY3RlZC9kZGwub3V0IGIvY29udHJpYi90ZXN0X2RlY29kaW5n L2V4cGVjdGVkL2RkbC5vdXQKaW5kZXggOWEyOGI1ZC4uMGY1MWYyYiAxMDA2NDQKLS0tIGEvY29u dHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL2RkbC5vdXQKKysrIGIvY29udHJpYi90ZXN0X2Rl Y29kaW5nL2V4cGVjdGVkL2RkbC5vdXQKQEAgLTgzMSw2ICs4MzEsMzIgQEAgU0VMRUNUIGRhdGEg RlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEws IE5VTEwsICdpbmMKIC0tLS0tLQogKDAgcm93cykKIAorU0VMRUNUICdkZGwgbXNnMScgRlJPTSBw Z19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2cxJywgMTYzOTQsIDEsICdtc2cxJyk7 CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgZGRsIG1zZzEKKygxIHJvdykKKworU0VMRUNUICdk ZGwgbXNnMicgRlJPTSBwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2cyJywgMTYz OTQsIDEsICd7ImZtdCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1J ICV7YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUiOiAiZm9vIiwgImF1dGhvcml6YXRpb24iOiB7ImZt dCI6ICJBVVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2VudCI6IGZh bHNlLCAiYXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiJ9Jyk7 CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgZGRsIG1zZzIKKygxIHJvdykKKworU0VMRUNUICdk ZGwgbXNnMycgRlJPTSBwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2czJywgMTYz OTQsIDEsICd7ImZtdCI6ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4 aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMg JXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21l dGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJmb28iLCAi c2NoZW1hbmFtZSI6ICJlbGVtZW50X3Rlc3QifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJ VFMgKCV7cGFyZW50czosIH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0s ICJvbl9jb21taXQiOiB7ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJw cmVzZW50IjogZmFsc2UsICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7 ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRh Ymxlc3BhY2UiOiBudWxsfSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10 IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBB UlRJVElPTiBCWSAle2RlZmluaXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9u IjogbnVsbH0sICJhY2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9k fUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4 aXN0cyI6ICIiLCAidGFibGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBl fVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAl e25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJp ZCIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5 IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9 LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9u dWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxz ZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJF U1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVz c2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFU RUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19XX19Jyk7CisgP2NvbHVtbj8gCistLS0t LS0tLS0tCisgZGRsIG1zZzMKKygxIHJvdykKKworU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2Fs X3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRl LXhpZHMnLCAnMCcsICdza2lwLWVtcHR5LXhhY3RzJywgJzEnKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBtZXNzYWdlOiBwcmVmaXg6IGRkbCBt c2cxLCByZWxpZDogMTYzOTQsIGNtZHR5cGU6IERyb3Agc3RhcnQsIHN6OiA0IGNvbnRlbnQ6bXNn MQorIG1lc3NhZ2U6IHByZWZpeDogZGRsIG1zZzIsIHJlbGlkOiAxNjM5NCwgY21kdHlwZTogRHJv cCBzdGFydCwgc3o6IDIxNyBjb250ZW50OnsiZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3Rf ZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMiLCAibmFtZSI6ICJmb28iLCAiYXV0 aG9yaXphdGlvbiI6IHsiZm10IjogIkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9 SSIsICJwcmVzZW50IjogZmFsc2UsICJhdXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25v dF9leGlzdHMiOiAiIn0KKyBtZXNzYWdlOiBwcmVmaXg6IGRkbCBtc2czLCByZWxpZDogMTYzOTQs IGNtZHR5cGU6IERyb3Agc3RhcnQsIHN6OiAxMzk2IGNvbnRlbnQ6eyJmbXQiOiAiQ1JFQVRFICV7 cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFi bGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0 fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAi aWRlbnRpdHkiOiB7Im9iam5hbWUiOiAiZm9vIiwgInNjaGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0 In0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFy ZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04g Q09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0 X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxl c3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0 ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxz ZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMi LCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6 IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFj Y2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRz IjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMg JXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7 Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29s dHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50 NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZB VUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJm bXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIs ICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9k fUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5l cmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50Ijog ZmFsc2V9fV19fQorKDMgcm93cykKKwogU0VMRUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgn cmVncmVzc2lvbl9zbG90Jyk7CiAgcGdfZHJvcF9yZXBsaWNhdGlvbl9zbG90IAogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9zcWwv ZGRsLnNxbCBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9zcWwvZGRsLnNxbAppbmRleCA0Zjc2YmVk Li4xZWE1YTRiIDEwMDY0NAotLS0gYS9jb250cmliL3Rlc3RfZGVjb2Rpbmcvc3FsL2RkbC5zcWwK KysrIGIvY29udHJpYi90ZXN0X2RlY29kaW5nL3NxbC9kZGwuc3FsCkBAIC00MzEsNiArNDMxLDEx IEBAIFNFTEVDVCBkYXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdyZWdyZXNz aW9uX3Nsb3QnLCBOVUxMLCBOVUxMLCAnaW5jCiAtLSBkb25lLCBmcmVlIGxvZ2ljYWwgcmVwbGlj YXRpb24gc2xvdAogU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMo J3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lw LWVtcHR5LXhhY3RzJywgJzEnKTsKIAorU0VMRUNUICdkZGwgbXNnMScgRlJPTSBwZ19sb2dpY2Fs X2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2cxJywgMTYzOTQsIDEsICdtc2cxJyk7CitTRUxFQ1Qg J2RkbCBtc2cyJyBGUk9NIHBnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZSgnZGRsIG1zZzInLCAx NjM5NCwgMSwgJ3siZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1l fUkgJXthdXRob3JpemF0aW9ufXMiLCAibmFtZSI6ICJmb28iLCAiYXV0aG9yaXphdGlvbiI6IHsi Zm10IjogIkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50Ijog ZmFsc2UsICJhdXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0n KTsKK1NFTEVDVCAnZGRsIG1zZzMnIEZST00gcGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlKCdk ZGwgbXNnMycsIDE2Mzk0LCAxLCAneyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJM RSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykg JXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9 cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5h bWUiOiAiZm9vIiwgInNjaGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJpbmhlcml0cyI6IHsi Zm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVz ZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0 X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0 YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50 IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9j bGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnki OiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNl LCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7 YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxs fSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFt ZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7 Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1z IiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjog IiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjog InBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBm YWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJw cmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsi Zm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZh bHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJm bXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19fScpOworU0VM RUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25fc2xv dCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lwLWVtcHR5LXhhY3RzJywg JzEnKTsKKwogU0VMRUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgncmVncmVzc2lvbl9zbG90 Jyk7CiAKIC8qIGNoZWNrIHRoYXQgdGhlIHNsb3QgaXMgZ29uZSAqLwpkaWZmIC0tZ2l0IGEvY29u dHJpYi90ZXN0X2RlY29kaW5nL3Rlc3RfZGVjb2RpbmcuYyBiL2NvbnRyaWIvdGVzdF9kZWNvZGlu Zy90ZXN0X2RlY29kaW5nLmMKaW5kZXggZTUyM2QyMi4uY2FiZjBiYyAxMDA2NDQKLS0tIGEvY29u dHJpYi90ZXN0X2RlY29kaW5nL3Rlc3RfZGVjb2RpbmcuYworKysgYi9jb250cmliL3Rlc3RfZGVj b2RpbmcvdGVzdF9kZWNvZGluZy5jCkBAIC0xNCw5ICsxNCwxMSBAQAogCiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ190eXBlLmgiCiAKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29y aWdpbi5oIgogCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgogI2luY2x1ZGUgInV0aWxz L2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRp bHMvbWVtdXRpbHMuaCIKQEAgLTcyLDYgKzc0LDEyIEBAIHN0YXRpYyB2b2lkIHBnX2RlY29kZV9t ZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkgIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJICBib29sIHRyYW5zYWN0aW9uYWws IGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJCQkJCQkgIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3Nh Z2UpOworc3RhdGljIHZvaWQgcGdfZGVjb2RlX2RkbF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwKKwkJCQkJCQkJICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCSAg WExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIE9p ZCByZWxpZCwKKwkJCQkJCQkJICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJ CSAgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgYm9vbCBwZ19kZWNvZGVf ZmlsdGVyX3ByZXBhcmUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCQkJIFRy YW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmdpZCk7CkBAIC0xMzcsNiAr MTQ1LDcgQEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNi KQogCWNiLT5maWx0ZXJfYnlfb3JpZ2luX2NiID0gcGdfZGVjb2RlX2ZpbHRlcjsKIAljYi0+c2h1 dGRvd25fY2IgPSBwZ19kZWNvZGVfc2h1dGRvd247CiAJY2ItPm1lc3NhZ2VfY2IgPSBwZ19kZWNv ZGVfbWVzc2FnZTsKKwljYi0+ZGRsX2NiID0gcGdfZGVjb2RlX2RkbF9tZXNzYWdlOwogCWNiLT5m aWx0ZXJfcHJlcGFyZV9jYiA9IHBnX2RlY29kZV9maWx0ZXJfcHJlcGFyZTsKIAljYi0+YmVnaW5f cHJlcGFyZV9jYiA9IHBnX2RlY29kZV9iZWdpbl9wcmVwYXJlX3R4bjsKIAljYi0+cHJlcGFyZV9j YiA9IHBnX2RlY29kZV9wcmVwYXJlX3R4bjsKQEAgLTc1Myw2ICs3NjIsNDUgQEAgcGdfZGVjb2Rl X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogfQogCiBzdGF0aWMgdm9pZAor cGdfZGVjb2RlX2RkbF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGNvbnN0IGNo YXIgKnByZWZpeCwgT2lkIHJlbGlkLAorCQkJCQkgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlw ZSwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlPdXRwdXRQbHVnaW5QcmVwYXJl V3JpdGUoY3R4LCB0cnVlKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGN0eC0+b3V0LCAibWVzc2FnZTog cHJlZml4OiAlcywgcmVsaWQ6ICV1LCAiLAorCQkJCQkgcHJlZml4LCByZWxpZCk7CisKKwlzd2l0 Y2goY21kdHlwZSkKKwl7CisJY2FzZSBEQ1RfU2ltcGxlQ21kOgorCQlhcHBlbmRTdHJpbmdJbmZv KGN0eC0+b3V0LCAiY21kdHlwZTogU2ltcGxlLCAiKTsKKwkJYnJlYWs7CisJY2FzZSBEQ1RfVGFi bGVEcm9wU3RhcnQ6CisJCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBEcm9w IHN0YXJ0LCAiKTsKKwkJYnJlYWs7CisJY2FzZSBEQ1RfVGFibGVEcm9wRW5kOgorCQlhcHBlbmRT dHJpbmdJbmZvKGN0eC0+b3V0LCAiY21kdHlwZTogRHJvcCBlbmQsICIpOworCQlicmVhazsKKwlj YXNlIERDVF9UYWJsZUFsdGVyOgorCQlhcHBlbmRTdHJpbmdJbmZvKGN0eC0+b3V0LCAiY21kdHlw ZTogQWx0ZXIgdGFibGUsICIpOworCQlicmVhazsKKwljYXNlIERDVF9PYmplY3RDcmVhdGU6CisJ CWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBDcmVhdGUsICIpOworCQlicmVh azsKKwljYXNlIERDVF9PYmplY3REcm9wOgorCQlhcHBlbmRTdHJpbmdJbmZvKGN0eC0+b3V0LCAi Y21kdHlwZTogRHJvcCwgIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWFwcGVuZFN0cmluZ0lu Zm8oY3R4LT5vdXQsICJjbWR0eXBlOiBJbnZhbGlkLCAiKTsKKwkJYnJlYWs7CisJfQorCisJYXBw ZW5kU3RyaW5nSW5mbyhjdHgtPm91dCwgInN6OiAlenUgY29udGVudDoiLCBzeik7CisJYXBwZW5k QmluYXJ5U3RyaW5nSW5mbyhjdHgtPm91dCwgbWVzc2FnZSwgc3opOworCU91dHB1dFBsdWdpbldy aXRlKGN0eCwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkCiBwZ19kZWNvZGVfc3RyZWFtX3N0YXJ0 KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAq dHhuKQogewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxl IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCmluZGV4IGY4OGQ3MmYuLjJm ZjAxZTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKQEAgLTE4LDYgKzE4LDcg QEAgT0JKUyA9IFwKIAlnaXN0ZGVzYy5vIFwKIAloYXNoZGVzYy5vIFwKIAloZWFwZGVzYy5vIFwK Kwlsb2dpY2FsZGRsbXNnZGVzYy5vIFwKIAlsb2dpY2FsbXNnZGVzYy5vIFwKIAlteGFjdGRlc2Mu byBcCiAJbmJ0ZGVzYy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVz Yy9sb2dpY2FsZGRsbXNnZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2lj YWxkZGxtc2dkZXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlOTMw YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2Fs ZGRsbXNnZGVzYy5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IGxvZ2ljYWxkZGxtc2dkZXNjLmMKKyAqCSAgcm1nciBkZXNjcmlwdG9yIHJvdXRpbmVzIGZvciBy ZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMjAxNS0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mv bG9naWNhbGRkbG1zZ2Rlc2MuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVk ZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKwor dm9pZAorbG9naWNhbGRkbG1zZ19kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUg KnJlY29yZCkKK3sKKwljaGFyCSAgICpyZWMgPSBYTG9nUmVjR2V0RGF0YShyZWNvcmQpOworCXVp bnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocmVjb3JkKSAmIH5YTFJfSU5GT19NQVNLOworCisJ aWYgKGluZm8gPT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCXsKKwkJeGxfbG9naWNhbF9k ZGxfbWVzc2FnZSAqeGxyZWMgPSAoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqKSByZWM7CisJCWNo YXIJICAgKnByZWZpeCA9IHhscmVjLT5tZXNzYWdlOworCQljaGFyCSAgICptZXNzYWdlID0geGxy ZWMtPm1lc3NhZ2UgKyB4bHJlYy0+cHJlZml4X3NpemU7CisJCWNoYXIJICAgKnNlcCA9ICIiOwor CisJCUFzc2VydChwcmVmaXhbeGxyZWMtPnByZWZpeF9zaXplXSAhPSAnXDAnKTsKKworCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgInByZWZpeCBcIiVzXCI7IHBheWxvYWQgKCV6dSBieXRlcyk6ICIs CisJCQkJCQkgcHJlZml4LCB4bHJlYy0+bWVzc2FnZV9zaXplKTsKKwkJYXBwZW5kU3RyaW5nSW5m byhidWYsICJyZWxpZCAldSBjbWR0eXBlICV1IiwgeGxyZWMtPnJlbGlkLCB4bHJlYy0+Y21kdHlw ZSk7CisJCS8qIFdyaXRlIG1lc3NhZ2UgcGF5bG9hZCBhcyBhIHNlcmllcyBvZiBoZXggYnl0ZXMg Ki8KKwkJZm9yIChpbnQgY250ID0gMDsgY250IDwgeGxyZWMtPm1lc3NhZ2Vfc2l6ZTsgY250Kysp CisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlMDJYIiwgc2VwLCAodW5zaWduZWQg Y2hhcikgbWVzc2FnZVtjbnRdKTsKKwkJCXNlcCA9ICIgIjsKKwkJfQorCX0KK30KKworY29uc3Qg Y2hhciAqCitsb2dpY2FsZGRsbXNnX2lkZW50aWZ5KHVpbnQ4IGluZm8pCit7CisJaWYgKChpbmZv ICYgflhMUl9JTkZPX01BU0spID09IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJcmV0dXJu ICJEREwiOworCisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3Mvcm1ncmRlc2MvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbWVz b24uYnVpbGQKaW5kZXggMTY2Y2VlNi4uNzgxZTJkNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9tZXNvbi5idWlsZApAQCAtMTEsNiArMTEsNyBAQCBybWdyX2Rlc2Nfc291cmNlcyA9IGZp bGVzKAogICAnZ2lzdGRlc2MuYycsCiAgICdoYXNoZGVzYy5jJywKICAgJ2hlYXBkZXNjLmMnLAor ICAnbG9naWNhbGRkbG1zZ2Rlc2MuYycsCiAgICdsb2dpY2FsbXNnZGVzYy5jJywKICAgJ214YWN0 ZGVzYy5jJywKICAgJ25idGRlc2MuYycsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS9ybWdyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMKaW5kZXgg N2Q2N2VkYS4uNjc4ZTgxYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v cm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYwpAQCAtMjcsNiAr MjcsNyBAQAogI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVk ZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3Nh Z2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL01ha2VmaWxlCmluZGV4IDJkYzI1ZTMuLmQzNjgwZTkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQpAQCAtMTYsNiArMTYsNyBAQCBvdmVycmlk ZSBDUFBGTEFHUyA6PSAtSSQoc3JjZGlyKSAkKENQUEZMQUdTKQogCiBPQkpTID0gXAogCWFwcGx5 cGFyYWxsZWx3b3JrZXIubyBcCisJZGRsbWVzc2FnZS5vIFwKIAlkZWNvZGUubyBcCiAJbGF1bmNo ZXIubyBcCiAJbG9naWNhbC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvZGRsbWVzc2FnZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZGxtZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExZTU2ZQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVz c2FnZS5jCkBAIC0wLDAgKzEsODQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbG1l c3NhZ2UuYworICoJICBMb2dpY2FsIERETCBtZXNzYWdlcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJ RklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdl LmMKKyAqCisgKiBOT1RFUworICoKKyAqIExvZ2ljYWwgRERMIG1lc3NhZ2VzIGFsbG93IFhMT0cg bG9nZ2luZyBvZiBEREwgY29tbWFuZCBzdHJpbmdzIHRoYXQKKyAqIGdldCBwYXNzZWQgdG8gdGhl IGxvZ2ljYWwgZGVjb2RpbmcgcGx1Z2luLiBJbiBub3JtYWwgWExPRyBwcm9jZXNzaW5nIHRoZXkK KyAqIGFyZSBzYW1lIGFzIE5PT1AuCisgKgorICogVW5saWtlIGdlbmVyaWMgbG9naWNhbCBtZXNz YWdlcywgdGhlc2UgRERMIG1lc3NhZ2VzIGhhdmUgb25seSB0cmFuc2FjdGlvbmFsCisgKiBtb2Rl LiBOb3RlIGJ5IGRlZmF1bHQgRERMcyBpbiBQb3N0Z3JlU1FMIGFyZSB0cmFuc2FjdGlvbmFsLgor ICoKKyAqIFRoZXNlIG1lc3NhZ2VzIGFyZSBwYXJ0IG9mIGN1cnJlbnQgdHJhbnNhY3Rpb24gYW5k IHdpbGwgYmUgc2VudCB0bworICogZGVjb2RpbmcgcGx1Z2luIHVzaW5nIGluIGEgc2FtZSB3YXkg YXMgRE1MIG9wZXJhdGlvbnMuCisgKgorICogRXZlcnkgbWVzc2FnZSBjYXJyaWVzIHByZWZpeCB0 byBhdm9pZCBjb25mbGljdHMgYmV0d2VlbiBkaWZmZXJlbnQgZGVjb2RpbmcKKyAqIHBsdWdpbnMu IFRoZSBwbHVnaW4gYXV0aG9ycyBtdXN0IHRha2UgZXh0cmEgY2FyZSB0byB1c2UgdW5pcXVlIHBy ZWZpeCwKKyAqIGdvb2Qgb3B0aW9ucyBzZWVtcyB0byBiZSBmb3IgZXhhbXBsZSB0byB1c2UgdGhl IG5hbWUgb2YgdGhlIGV4dGVuc2lvbi4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5j bHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5o IgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgor I2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9k ZGxtZXNzYWdlLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKworLyoKKyAqIFdyaXRl IGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2UgaW50byBYTG9nLgorICovCitYTG9nUmVjUHRy CitMb2dMb2dpY2FsRERMTWVzc2FnZShjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVw YXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSwgc2l6 ZV90IHNpemUpCit7CisJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSB4bHJlYzsKKworCSAvKiBFbnN1 cmUgd2UgaGF2ZSBhIHZhbGlkIHRyYW5zYWN0aW9uIGlkLiAqLworCUFzc2VydChJc1RyYW5zYWN0 aW9uU3RhdGUoKSk7CisJR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsKKworCXhscmVjLmRiSWQg PSBNeURhdGFiYXNlSWQ7CisJLyogVHJhaWxpbmcgemVybyBpcyBjcml0aWNhbDsgc2VlIGxvZ2lj YWxkZGxtc2dfZGVzYyAqLworCXhscmVjLnByZWZpeF9zaXplID0gc3RybGVuKHByZWZpeCkgKyAx OworCXhscmVjLm1lc3NhZ2Vfc2l6ZSA9IHNpemU7CisJeGxyZWMucmVsaWQgPSByZWxpZDsKKwl4 bHJlYy5jbWR0eXBlID0gY21kdHlwZTsKKworCVhMb2dCZWdpbkluc2VydCgpOworCVhMb2dSZWdp c3RlckRhdGEoKGNoYXIgKikgJnhscmVjLCBTaXplT2ZMb2dpY2FsRERMTWVzc2FnZSk7CisJWExv Z1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgcHJlZml4KSwgeGxyZWMucHJlZml4X3Np emUpOworCVhMb2dSZWdpc3RlckRhdGEodW5jb25zdGlmeShjaGFyICosIG1lc3NhZ2UpLCBzaXpl KTsKKworCS8qIEFsbG93IG9yaWdpbiBmaWx0ZXJpbmcgKi8KKwlYTG9nU2V0UmVjb3JkRmxhZ3Mo WExPR19JTkNMVURFX09SSUdJTik7CisKKwlyZXR1cm4gWExvZ0luc2VydChSTV9MT0dJQ0FMRERM TVNHX0lELCBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpOworfQorCisvKgorICogUmVkbyBpcyBi YXNpY2FsbHkganVzdCBub29wIGZvciBsb2dpY2FsIGRlY29kaW5nIGRkbCBtZXNzYWdlcy4KKyAq Lwordm9pZAorbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQorewor CXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocmVjb3JkKSAmIH5YTFJfSU5GT19NQVNLOwor CisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQllbG9nKFBBTklDLCAi bG9naWNhbGRkbG1zZ19yZWRvOiB1bmtub3duIG9wIGNvZGUgJXUiLCBpbmZvKTsKKworCS8qIFRo aXMgaXMgb25seSBpbnRlcmVzdGluZyBmb3IgbG9naWNhbCBkZWNvZGluZywgc2VlIGRlY29kZS5j LiAqLworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNv ZGUuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKaW5kZXggYTUz ZTIzYy4uNDE1MWFhNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9kZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5j CkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5o IgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNh dGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1 ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpAQCAtNjA0LDYgKzYwNSw0NiBAQCBsb2dpY2FsbXNn X2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1 ZikKIH0KIAogLyoKKyAqIEhhbmRsZSBybWdyIExPR0lDQUxERExNU0dfSUQgcmVjb3JkcyBmb3Ig RGVjb2RlUmVjb3JkSW50b1Jlb3JkZXJCdWZmZXIoKS4KKyAqLwordm9pZAorbG9naWNhbGRkbF9k ZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYp Cit7CisJU25hcEJ1aWxkICAqYnVpbGRlciA9IGN0eC0+c25hcHNob3RfYnVpbGRlcjsKKwlYTG9n UmVhZGVyU3RhdGUgKnIgPSBidWYtPnJlY29yZDsKKwlUcmFuc2FjdGlvbklkIHhpZCA9IFhMb2dS ZWNHZXRYaWQocik7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyKSAmIH5YTFJfSU5G T19NQVNLOworCVJlcE9yaWdpbklkIG9yaWdpbl9pZCA9IFhMb2dSZWNHZXRPcmlnaW4ocik7CisJ eGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqbWVzc2FnZTsKKworCWlmIChpbmZvICE9IFhMT0dfTE9H SUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgUk1fTE9HSUNBTERE TE1TR19JRCByZWNvcmQgdHlwZTogJXUiLCBpbmZvKTsKKworCVJlb3JkZXJCdWZmZXJQcm9jZXNz WGlkKGN0eC0+cmVvcmRlciwgWExvZ1JlY0dldFhpZChyKSwgYnVmLT5vcmlncHRyKTsKKworCS8q CisJICogSWYgd2UgZG9uJ3QgaGF2ZSBzbmFwc2hvdCBvciB3ZSBhcmUganVzdCBmYXN0LWZvcndh cmRpbmcsIHRoZXJlIGlzIG5vCisJICogcG9pbnQgaW4gZGVjb2RpbmcgZGRsIG1lc3NhZ2VzLgor CSAqLworCWlmIChTbmFwQnVpbGRDdXJyZW50U3RhdGUoYnVpbGRlcikgPCBTTkFQQlVJTERfRlVM TF9TTkFQU0hPVCB8fAorCQljdHgtPmZhc3RfZm9yd2FyZCkKKwkJcmV0dXJuOworCisJbWVzc2Fn ZSA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIFhMb2dSZWNHZXREYXRhKHIpOworCisJaWYg KG1lc3NhZ2UtPmRiSWQgIT0gY3R4LT5zbG90LT5kYXRhLmRhdGFiYXNlIHx8CisJCUZpbHRlckJ5 T3JpZ2luKGN0eCwgb3JpZ2luX2lkKSkKKwkJcmV0dXJuOworCisJaWYgKFNuYXBCdWlsZFByb2Nl c3NDaGFuZ2UoYnVpbGRlciwgeGlkLCBidWYtPm9yaWdwdHIpKQorCQlSZW9yZGVyQnVmZmVyUXVl dWVERExNZXNzYWdlKGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPmVuZHB0ciwKKwkJCQkJCQkJCSBt ZXNzYWdlLT5tZXNzYWdlLCAvKiBmaXJzdCBwYXJ0IG9mIG1lc3NhZ2UgaXMgcHJlZml4ICovCisJ CQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZV9zaXplLAorCQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3Nh Z2UgKyBtZXNzYWdlLT5wcmVmaXhfc2l6ZSwKKwkJCQkJCQkJCSBtZXNzYWdlLT5yZWxpZCwgbWVz c2FnZS0+Y21kdHlwZSk7Cit9CisKKy8qCiAgKiBDb25zb2xpZGF0ZWQgY29tbWl0IHJlY29yZCBo YW5kbGluZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgZm9ybSBvZiBjb21taXQKICAqIHJlY29yZHMu CiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2Fs LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwppbmRleCBjM2Vj OTdhLi4zOWU2ODYxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2xvZ2ljYWwuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwu YwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNz YWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpAQCAtNzMs NiArNzQsMTAgQEAgc3RhdGljIHZvaWQgdHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVy ICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogc3RhdGljIHZvaWQgbWVzc2FnZV9jYl93 cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJ CQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLAogCQkJCQkJ CSAgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1l c3NhZ2UpOworc3RhdGljIHZvaWQgZGRsX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUs IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNu LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCSAgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1h bmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIg Km1lc3NhZ2UpOwogCiAvKiBzdHJlYW1pbmcgY2FsbGJhY2tzICovCiBzdGF0aWMgdm9pZCBzdHJl YW1fc3RhcnRfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLApAQCAtMjIzLDYgKzIyOCw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAq b3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+YXBwbHlfdHJ1bmNhdGUgPSB0 cnVuY2F0ZV9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+Y29tbWl0ID0gY29tbWl0X2NiX3dy YXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5tZXNzYWdlID0gbWVzc2FnZV9jYl93cmFwcGVyOworCWN0 eC0+cmVvcmRlci0+ZGRsID0gZGRsX2NiX3dyYXBwZXI7CiAKIAkvKgogCSAqIFRvIHN1cHBvcnQg c3RyZWFtaW5nLCB3ZSByZXF1aXJlIHN0YXJ0L3N0b3AvYWJvcnQvY29tbWl0L2NoYW5nZQpAQCAt MTIzNCw2ICsxMjQwLDQ0IEBAIG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNo ZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogfQogCiBzdGF0aWMgdm9pZAorZGRsX2NiX3dyYXBw ZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJICBY TG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJl bGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSAgU2l6ZSBtZXNzYWdlX3Np emUsCisJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJvckNhbGxiYWNrU3Rh dGUgc3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisKKwlBc3NlcnQo IWN0eC0+ZmFzdF9mb3J3YXJkKTsKKworCWlmIChjdHgtPmNhbGxiYWNrcy5kZGxfY2IgPT0gTlVM TCkKKwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNv bnRleHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9 ICJkZGwiOworCXN0YXRlLnJlcG9ydF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCWVycmNhbGxi YWNrLmNhbGxiYWNrID0gb3V0cHV0X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsKKwllcnJjYWxsYmFj ay5hcmcgPSAodm9pZCAqKSAmc3RhdGU7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9j b250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwkv KiBzZXQgb3V0cHV0IHN0YXRlICovCisJY3R4LT5hY2NlcHRfd3JpdGVzID0gdHJ1ZTsKKwljdHgt PndyaXRlX3hpZCA9IHR4biAhPSBOVUxMID8gdHhuLT54aWQgOiBJbnZhbGlkVHJhbnNhY3Rpb25J ZDsKKwljdHgtPndyaXRlX2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisKKwkvKiBkbyB0aGUgYWN0 dWFsIHdvcms6IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5kZGxfY2IoY3R4LCB0 eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLCBjbWR0eXBlLAorCQkJCQkJCQkgbWVzc2Fn ZV9zaXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLwor CWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKK30KKworc3RhdGlj IHZvaWQKIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQlYTG9nUmVjUHRyIGZpcnN0X2xzbikKIHsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWxmdW5jcy5jCmluZGV4IGZhMWI2 NDEuLjkyZjVmOTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv bG9naWNhbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dp Y2FsZnVuY3MuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5o IgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L2xvZ2ljYWwuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVk ZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNs dWRlICJ1dGlscy9hcnJheS5oIgpAQCAtMzg4LDMgKzM4OSwyNiBAQCBwZ19sb2dpY2FsX2VtaXRf bWVzc2FnZV90ZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJLyogYnl0ZWEgYW5kIHRleHQgYXJlIGNv bXBhdGlibGUgKi8KIAlyZXR1cm4gcGdfbG9naWNhbF9lbWl0X21lc3NhZ2VfYnl0ZWEoZmNpbmZv KTsKIH0KKworLyoKKyAqIFNRTCBmdW5jdGlvbiBmb3Igd3JpdGluZyBsb2dpY2FsIGRlY29kaW5n IERETCBtZXNzYWdlIGludG8gV0FMLgorICovCitEYXR1bQorcGdfbG9naWNhbF9lbWl0X2RkbF9t ZXNzYWdlX2J5dGVhKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkgICAqcHJlZml4ID0gdGV4 dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwlPaWQJCQlyZWxpZCA9IFBHX0dF VEFSR19PSUQoMSk7CisJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlID0gUEdfR0VUQVJHX0lO VDE2KDIpOworCWNoYXIJICAgKmRhdGEgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRf UFAoMykpOworCVhMb2dSZWNQdHIJbHNuOworCisJbHNuID0gTG9nTG9naWNhbERETE1lc3NhZ2Uo cHJlZml4LCByZWxpZCwgY21kdHlwZSwgZGF0YSwgc3RybGVuKGRhdGEpKTsKKwlQR19SRVRVUk5f TFNOKGxzbik7Cit9CisKK0RhdHVtCitwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2VfdGV4dChQ R19GVU5DVElPTl9BUkdTKQoreworCS8qIGJ5dGVhIGFuZCB0ZXh0IGFyZSBjb21wYXRpYmxlICov CisJcmV0dXJuIHBnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZV9ieXRlYShmY2luZm8pOworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZCBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKaW5kZXggZDQ4Y2Q0 Yy4uOTljNjA4ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9t ZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1 aWxkCkBAIC0yLDYgKzIsNyBAQAogCiBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdhcHBs eXBhcmFsbGVsd29ya2VyLmMnLAorICAnZGRsbWVzc2FnZS5jJywKICAgJ2RlY29kZS5jJywKICAg J2xhdW5jaGVyLmMnLAogICAnbG9naWNhbC5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXggZDVmOTBhNS4uMmJlMDc1ZiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKKysr IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKQEAgLTk0 LDYgKzk0LDcgQEAKICNpbmNsdWRlICJsaWIvYmluYXJ5aGVhcC5oIgogI2luY2x1ZGUgIm1pc2Nh ZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1l c3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVw bGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3QuaCIK QEAgLTUxNiw2ICs1MTcsMTQgQEAgUmVvcmRlckJ1ZmZlclJldHVybkNoYW5nZShSZW9yZGVyQnVm ZmVyICpyYiwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLAogCQkJCXBmcmVlKGNoYW5nZS0+ ZGF0YS5tc2cubWVzc2FnZSk7CiAJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UgPSBOVUxMOwog CQkJYnJlYWs7CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETDoKKwkJCWlmIChjaGFu Z2UtPmRhdGEuZGRsLnByZWZpeCAhPSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5kZGwu cHJlZml4KTsKKwkJCWNoYW5nZS0+ZGF0YS5kZGwucHJlZml4ID0gTlVMTDsKKwkJCWlmIChjaGFu Z2UtPmRhdGEuZGRsLm1lc3NhZ2UgIT0gTlVMTCkKKwkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuZGRs Lm1lc3NhZ2UpOworCQkJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlID0gTlVMTDsKKwkJCWJyZWFr OwogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQlpZiAoY2hh bmdlLT5kYXRhLmludmFsLmludmFsaWRhdGlvbnMpCiAJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmlu dmFsLmludmFsaWRhdGlvbnMpOwpAQCAtODk1LDYgKzkwNCwzNiBAQCBSZW9yZGVyQnVmZmVyUXVl dWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIH0KIAogLyoK KyAqIEEgdHJhbnNhY3Rpb25hbCBEREwgbWVzc2FnZSBpcyBxdWV1ZWQgdG8gYmUgcHJvY2Vzc2Vk IHVwb24gY29tbWl0LgorICovCit2b2lkCitSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKFJl b3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKKwkJCQkJCQkgWExvZ1JlY1B0ciBs c24sIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0 IGNoYXIgKm1lc3NhZ2UsCisJCQkJCQkJIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBj bWR0eXBlKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlSZW9yZGVyQnVmZmVyQ2hh bmdlICpjaGFuZ2U7CisKKwlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSk7CisKKwlv bGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHJiLT5jb250ZXh0KTsKKworCWNoYW5n ZSA9IFJlb3JkZXJCdWZmZXJHZXRDaGFuZ2UocmIpOworCWNoYW5nZS0+YWN0aW9uID0gUkVPUkRF Ul9CVUZGRVJfQ0hBTkdFX0RETDsKKwljaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCA9IHBzdHJkdXAo cHJlZml4KTsKKwljaGFuZ2UtPmRhdGEuZGRsLnJlbGlkID0gcmVsaWQ7CisJY2hhbmdlLT5kYXRh LmRkbC5jbWR0eXBlID0gY21kdHlwZTsKKwljaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSA9 IG1lc3NhZ2Vfc2l6ZTsKKwljaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UgPSBwYWxsb2MobWVzc2Fn ZV9zaXplKTsKKwltZW1jcHkoY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlLCBtZXNzYWdlLCBtZXNz YWdlX3NpemUpOworCisJUmVvcmRlckJ1ZmZlclF1ZXVlQ2hhbmdlKHJiLCB4aWQsIGxzbiwgY2hh bmdlLCBmYWxzZSk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9CisK Ky8qCiAgKiBBc3NlcnRUWE5Mc25PcmRlcgogICoJCVZlcmlmeSBMU04gb3JkZXJpbmcgb2YgdHJh bnNhY3Rpb24gbGlzdHMgaW4gdGhlIHJlb3JkZXJidWZmZXIKICAqCkBAIC0xOTk3LDYgKzIwMzYs MjEgQEAgUmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLAogfQogCiAvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBSZW9yZGVy QnVmZmVyUHJvY2Vzc1RYTiBmb3IgYXBwbHlpbmcgdGhlIERETCBtZXNzYWdlLgorICovCitzdGF0 aWMgaW5saW5lIHZvaWQKK1Jlb3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZl ciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkgUmVvcmRlckJ1ZmZlckNoYW5n ZSAqY2hhbmdlLCBib29sIHN0cmVhbWluZykKK3sKKwlyYi0+ZGRsKHJiLCB0eG4sIGNoYW5nZS0+ bHNuLAorCQkJY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgsCisJCQljaGFuZ2UtPmRhdGEuZGRsLnJl bGlkLAorCQkJY2hhbmdlLT5kYXRhLmRkbC5jbWR0eXBlLAorCQkJY2hhbmdlLT5kYXRhLmRkbC5t ZXNzYWdlX3NpemUsCisJCQljaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UpOworfQorCisvKgogICog RnVuY3Rpb24gdG8gc3RvcmUgdGhlIGNvbW1hbmQgaWQgYW5kIHNuYXBzaG90IGF0IHRoZSBlbmQg b2YgdGhlIGN1cnJlbnQKICAqIHN0cmVhbSBzbyB0aGF0IHdlIGNhbiByZXVzZSB0aGUgc2FtZSB3 aGlsZSBzZW5kaW5nIHRoZSBuZXh0IHN0cmVhbS4KICAqLwpAQCAtMjM3OCw2ICsyNDMyLDEwIEBA IFJlb3JkZXJCdWZmZXJQcm9jZXNzVFhOKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiAJCQkJCVJlb3JkZXJCdWZmZXJBcHBseU1lc3NhZ2UocmIsIHR4biwgY2hhbmdl LCBzdHJlYW1pbmcpOwogCQkJCQlicmVhazsKIAorCQkJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hB TkdFX0RETDoKKwkJCQkJUmVvcmRlckJ1ZmZlckFwcGx5RERMTWVzc2FnZShyYiwgdHhuLCBjaGFu Z2UsIHN0cmVhbWluZyk7CisJCQkJCWJyZWFrOworCiAJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9D SEFOR0VfSU5WQUxJREFUSU9OOgogCQkJCQkvKiBFeGVjdXRlIHRoZSBpbnZhbGlkYXRpb24gbWVz c2FnZXMgbG9jYWxseSAqLwogCQkJCQlSZW9yZGVyQnVmZmVyRXhlY3V0ZUludmFsaWRhdGlvbnMo Y2hhbmdlLT5kYXRhLmludmFsLm5pbnZhbGlkYXRpb25zLApAQCAtMzgzNyw2ICszODk1LDM5IEBA IFJlb3JkZXJCdWZmZXJTZXJpYWxpemVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJC dWZmZXJUWE4gKnR4biwKIAogCQkJCWJyZWFrOwogCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVS X0NIQU5HRV9EREw6CisJCQl7CisJCQkJY2hhcgkgICAqZGF0YTsKKwkJCQlTaXplCQlwcmVmaXhf c2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCkgKyAxOworCisJCQkJc3ogKz0g cHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSArCisJCQkJCXNpemVv ZihTaXplKSArIHNpemVvZihPaWQpICsgc2l6ZW9mKGludCkgKyBzaXplb2YoU2l6ZSk7CisJCQkJ UmVvcmRlckJ1ZmZlclNlcmlhbGl6ZVJlc2VydmUocmIsIHN6KTsKKworCQkJCWRhdGEgPSAoKGNo YXIgKikgcmItPm91dGJ1ZikgKyBzaXplb2YoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UpOworCisJ CQkJLyogbWlnaHQgaGF2ZSBiZWVuIHJlYWxsb2NhdGVkIGFib3ZlICovCisJCQkJb25kaXNrID0g KFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlICopIHJiLT5vdXRidWY7CisKKwkJCQkvKiB3cml0ZSB0 aGUgcHJlZml4LCByZWxpZCBhbmQgY21kdHlwZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQlt ZW1jcHkoZGF0YSwgJnByZWZpeF9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6 ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCAmY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCwgc2l6 ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KGRhdGEsICZj aGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUsIHNpemVvZihEZXBhcnNlZENvbW1hbmRUeXBlKSk7CisJ CQkJZGF0YSArPSBzaXplb2YoaW50KTsKKwkJCQltZW1jcHkoZGF0YSwgY2hhbmdlLT5kYXRhLmRk bC5wcmVmaXgsIHByZWZpeF9zaXplKTsKKwkJCQlkYXRhICs9IHByZWZpeF9zaXplOworCisJCQkJ Lyogd3JpdGUgdGhlIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSBzaXplICovCisJCQkJbWVtY3B5KGRh dGEsICZjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlk YXRhICs9IHNpemVvZihTaXplKTsKKwkJCQltZW1jcHkoZGF0YSwgY2hhbmdlLT5kYXRhLmRkbC5t ZXNzYWdlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJZGF0 YSArPSBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZTsKKworCQkJCWJyZWFrOworCQkJfQog CQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQl7CiAJCQkJY2hh cgkgICAqZGF0YTsKQEAgLTQxNTEsNiArNDI0MiwxNSBAQCBSZW9yZGVyQnVmZmVyQ2hhbmdlU2l6 ZShSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpCiAKIAkJCQlicmVhazsKIAkJCX0KKwkJY2Fz ZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOgorCQkJeworCQkJCVNpemUJCXByZWZpeF9zaXpl ID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4KSArIDE7CisKKwkJCQlzeiArPSBwcmVm aXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplICsKKwkJCQkJc2l6ZW9mKFNp emUpICsgc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoRGVwYXJzZWRDb21tYW5k VHlwZSk7CisKKwkJCQlicmVhazsKKwkJCX0KIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0Vf SU5WQUxJREFUSU9OOgogCQkJewogCQkJCXN6ICs9IHNpemVvZihTaGFyZWRJbnZhbGlkYXRpb25N ZXNzYWdlKSAqCkBAIC00NDI4LDYgKzQ1MjgsMzMgQEAgUmVvcmRlckJ1ZmZlclJlc3RvcmVDaGFu Z2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAogCQkJCWJyZWFr OwogCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw6CisJCQl7CisJCQkJU2l6 ZQkJcHJlZml4X3NpemU7CisKKwkJCQkvKiByZWFkIHByZWZpeCAqLworCQkJCW1lbWNweSgmcHJl Zml4X3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7 CisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsLnJlbGlkLCBkYXRhLCBzaXplb2YoT2lkKSk7 CisJCQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5kZGwu Y21kdHlwZSwgZGF0YSwgc2l6ZW9mKERlcGFyc2VkQ29tbWFuZFR5cGUpKTsKKwkJCQlkYXRhICs9 IHNpemVvZihpbnQpOworCQkJCWNoYW5nZS0+ZGF0YS5kZGwucHJlZml4ID0gTWVtb3J5Q29udGV4 dEFsbG9jKHJiLT5jb250ZXh0LCBwcmVmaXhfc2l6ZSk7CisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0 YS5kZGwucHJlZml4LCBkYXRhLCBwcmVmaXhfc2l6ZSk7CisJCQkJQXNzZXJ0KGNoYW5nZS0+ZGF0 YS5kZGwucHJlZml4W3ByZWZpeF9zaXplIC0gMV0gPT0gJ1wwJyk7CisJCQkJZGF0YSArPSBwcmVm aXhfc2l6ZTsKKworCQkJCS8qIHJlYWQgdGhlIG1lc3NhZ2UgKi8KKwkJCQltZW1jcHkoJmNoYW5n ZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplLCBkYXRhLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEg Kz0gc2l6ZW9mKFNpemUpOworCQkJCWNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSA9IE1lbW9yeUNv bnRleHRBbGxvYyhyYi0+Y29udGV4dCwKKwkJCQkJCQkJCQkJCQkJCSAgY2hhbmdlLT5kYXRhLm1z Zy5tZXNzYWdlX3NpemUpOworCQkJCW1lbWNweShjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UsIGRh dGEsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKKwkJCQlkYXRhICs9 IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplOworCisJCQkJYnJlYWs7CisJCQl9CiAJCWNh c2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCXsKIAkJCQlTaXplCQlp bnZhbF9zaXplID0gc2l6ZW9mKFNoYXJlZEludmFsaWRhdGlvbk1lc3NhZ2UpICoKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfd2FsZHVtcC9sb2dpY2FsZGRsbXNnZGVzYy5jIGIvc3JjL2Jpbi9wZ193 YWxkdW1wL2xvZ2ljYWxkZGxtc2dkZXNjLmMKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAw MDAwMC4uOWI2MjdkNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9sb2dp Y2FsZGRsbXNnZGVzYy5jCkBAIC0wLDAgKzEgQEAKKy4uLy4uLy4uL3NyYy9iYWNrZW5kL2FjY2Vz cy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls ZQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMgYi9zcmMvYmluL3Bn X3dhbGR1bXAvcm1ncmRlc2MuYwppbmRleCA2YjhjMTdiLi5kYWYxNzMwIDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYworKysgYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1n cmRlc2MuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL2RiY29tbWFuZHNf eGxvZy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNlLmgiCiAjaW5jbHVkZSAiY29tbWFu ZHMvdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNp bmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3Jp Z2luLmgiCiAjaW5jbHVkZSAicm1ncmRlc2MuaCIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9ybWdybGlzdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKaW5kZXggNDYz YmNiNi4uYWJjYmU5NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKQEAgLTQ3LDMgKzQ3LDQgQEAgUEdf Uk1HUihSTV9DT01NSVRfVFNfSUQsICJDb21taXRUcyIsIGNvbW1pdF90c19yZWRvLCBjb21taXRf dHNfZGVzYywgY29tbWl0X3RzX2kKIFBHX1JNR1IoUk1fUkVQTE9SSUdJTl9JRCwgIlJlcGxpY2F0 aW9uT3JpZ2luIiwgcmVwbG9yaWdpbl9yZWRvLCByZXBsb3JpZ2luX2Rlc2MsIHJlcGxvcmlnaW5f aWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCiBQR19STUdSKFJNX0dFTkVSSUNfSUQs ICJHZW5lcmljIiwgZ2VuZXJpY19yZWRvLCBnZW5lcmljX2Rlc2MsIGdlbmVyaWNfaWRlbnRpZnks IE5VTEwsIE5VTEwsIGdlbmVyaWNfbWFzaywgTlVMTCkKIFBHX1JNR1IoUk1fTE9HSUNBTE1TR19J RCwgIkxvZ2ljYWxNZXNzYWdlIiwgbG9naWNhbG1zZ19yZWRvLCBsb2dpY2FsbXNnX2Rlc2MsIGxv Z2ljYWxtc2dfaWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxtc2dfZGVjb2RlKQor UEdfUk1HUihSTV9MT0dJQ0FMRERMTVNHX0lELCAiTG9naWNhbERETE1lc3NhZ2UiLCBsb2dpY2Fs ZGRsbXNnX3JlZG8sIGxvZ2ljYWxkZGxtc2dfZGVzYywgbG9naWNhbGRkbG1zZ19pZGVudGlmeSwg TlVMTCwgTlVMTCwgTlVMTCwgbG9naWNhbGRkbF9kZWNvZGUpCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dAppbmRleCBmYTMxZjFkLi40OGFmOWUwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTEx MDMxLDYgKzExMDMxLDE0IEBACiAgIHByb25hbWUgPT4gJ3BnX2xvZ2ljYWxfZW1pdF9tZXNzYWdl JywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAndScsCiAgIHByb3JldHR5cGUg PT4gJ3BnX2xzbicsIHByb2FyZ3R5cGVzID0+ICdib29sIHRleHQgYnl0ZWEnLAogICBwcm9zcmMg PT4gJ3BnX2xvZ2ljYWxfZW1pdF9tZXNzYWdlX2J5dGVhJyB9LAoreyBvaWQgPT4gJzM4MTMnLCBk ZXNjciA9PiAnZW1pdCBhIHRleHR1YWwgbG9naWNhbCBkZWNvZGluZyBtZXNzYWdlJywKKyAgcHJv bmFtZSA9PiAncGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlJywgcHJvdm9sYXRpbGUgPT4gJ3Yn LCBwcm9wYXJhbGxlbCA9PiAndScsCisgIHByb3JldHR5cGUgPT4gJ3BnX2xzbicsIHByb2FyZ3R5 cGVzID0+ICdib29sIHRleHQgdGV4dCcsCisgIHByb3NyYyA9PiAncGdfbG9naWNhbF9lbWl0X2Rk bF9tZXNzYWdlX3RleHQnIH0sCit7IG9pZCA9PiAnMzgxNCcsIGRlc2NyID0+ICdlbWl0IGEgYmlu YXJ5IGxvZ2ljYWwgZGVjb2RpbmcgbWVzc2FnZScsCisgIHByb25hbWUgPT4gJ3BnX2xvZ2ljYWxf ZW1pdF9kZGxfbWVzc2FnZScsIHByb3ZvbGF0aWxlID0+ICd2JywgcHJvcGFyYWxsZWwgPT4gJ3Un LAorICBwcm9yZXR0eXBlID0+ICdwZ19sc24nLCBwcm9hcmd0eXBlcyA9PiAndGV4dCByZWdjbGFz cyBpbnQ0IHRleHQnLAorICBwcm9zcmMgPT4gJ3BnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZV9i eXRlYScgfSwKIAogIyBldmVudCB0cmlnZ2VycwogeyBvaWQgPT4gJzM1NjYnLCBkZXNjciA9PiAn bGlzdCBvYmplY3RzIGRyb3BwZWQgYnkgdGhlIGN1cnJlbnQgY29tbWFuZCcsCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmggYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9kZGxtZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NzdkZjZlYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1l c3NhZ2UuaApAQCAtMCwwICsxLDYwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGRkbG1lc3Nh Z2UuaAorICoJICAgRXhwb3J0cyBmcm9tIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5j CisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICoKKyAqIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaAorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisj ZGVmaW5lIFBHX0xPR0lDQUxfRERMX01FU1NBR0VfSAorCisjaW5jbHVkZSAiYWNjZXNzL3hsb2cu aCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ3Jl YWRlci5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCisKKworLyoKKyAqIFN1cHBvcnQgZm9y IGtlZXBpbmcgdHJhY2sgb2YgZGVwYXJzZWQgY29tbWFuZHMuCisgKi8KK3R5cGVkZWYgZW51bSBE ZXBhcnNlZENvbW1hbmRUeXBlCit7CisJRENUX1NpbXBsZUNtZCwKKwlEQ1RfVGFibGVEcm9wU3Rh cnQsCisJRENUX1RhYmxlRHJvcEVuZCwKKwlEQ1RfVGFibGVBbHRlciwKKwlEQ1RfT2JqZWN0Q3Jl YXRlLAorCURDVF9PYmplY3REcm9wCit9IERlcGFyc2VkQ29tbWFuZFR5cGU7CisKKy8qCisgKiBH ZW5lcmljIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2Ugd2FsIHJlY29yZC4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgeGxfbG9naWNhbF9kZGxfbWVzc2FnZQoreworCU9pZAkJCWRiSWQ7CQkJLyog ZGF0YWJhc2UgT2lkIGVtaXR0ZWQgZnJvbSAqLworCVNpemUJCXByZWZpeF9zaXplOwkvKiBsZW5n dGggb2YgcHJlZml4IGluY2x1ZGluZyBudWxsIHRlcm1pbmF0b3IgKi8KKwlPaWQJCQlyZWxpZDsJ CQkvKiBpZCBvZiB0aGUgdGFibGUgKi8KKwlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGU7CS8q IHR5cGUgb2Ygc3FsIGNvbW1hbmQgKi8KKwlTaXplCQltZXNzYWdlX3NpemU7CS8qIHNpemUgb2Yg dGhlIG1lc3NhZ2UgKi8KKworCS8qCisJICogcGF5bG9hZCwgaW5jbHVkaW5nIG51bGwtdGVybWlu YXRlZCBwcmVmaXggb2YgbGVuZ3RoIHByZWZpeF9zaXplCisJICovCisJY2hhcgkJbWVzc2FnZVtG TEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlOworCisjZGVm aW5lIFNpemVPZkxvZ2ljYWxERExNZXNzYWdlCShvZmZzZXRvZih4bF9sb2dpY2FsX2RkbF9tZXNz YWdlLCBtZXNzYWdlKSkKKworZXh0ZXJuIFhMb2dSZWNQdHIgTG9nTG9naWNhbERETE1lc3NhZ2Uo Y29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlw ZSwKKwkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmRkbF9tZXNzYWdlLCBzaXplX3Qgc2l6ZSk7CisK Ky8qIFJNR1IgQVBJKi8KKyNkZWZpbmUgWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFCTB4MDAKK3Zv aWQJCWxvZ2ljYWxkZGxtc2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7Cit2b2lkCQls b2dpY2FsZGRsbXNnX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3Jk KTsKK2NvbnN0IGNoYXIgKmxvZ2ljYWxkZGxtc2dfaWRlbnRpZnkodWludDggaW5mbyk7CisKKyNl bmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmggYi9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaAppbmRleCAxNGZhOTIxLi5jOWFjNzA4IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaAorKysgYi9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9kZWNvZGUuaApAQCAtMjcsNiArMjcsNyBAQCBleHRlcm4gdm9pZCBoZWFw Ml9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpi dWYpOwogZXh0ZXJuIHZvaWQgeGFjdF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgc3RhbmRieV9kZWNvZGUoTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJu IHZvaWQgbG9naWNhbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9n UmVjb3JkQnVmZmVyICpidWYpOworZXh0ZXJuIHZvaWQgbG9naWNhbGRkbF9kZWNvZGUoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogCiBleHRlcm4g dm9pZCBMb2dpY2FsRGVjb2RpbmdQcm9jZXNzUmVjb3JkKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwKIAkJCQkJCQkJCQkgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCmluZGV4IDJkODlkMjYuLjVlZDVlNmEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaAorKysgYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKQEAgLTksNiArOSw3IEBACiAjaWZuZGVm IE9VVFBVVF9QTFVHSU5fSAogI2RlZmluZSBPVVRQVVRfUExVR0lOX0gKIAorI2luY2x1ZGUgInJl cGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9yZW9yZGVyYnVm ZmVyLmgiCiAKIHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0OwpAQCAtOTEsNiArOTIsMTgg QEAgdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCQkJY29uc3QgY2hhciAqbWVzc2FnZSk7CiAK IC8qCisgKiBDYWxsZWQgZm9yIHRoZSBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlcy4KKyAq LwordHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZURETE1lc3NhZ2VDQikgKHN0cnVjdCBMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAq dHhuLAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAg Y29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkg ICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBtZXNzYWdl X3NpemUsCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKKy8qCiAgKiBGaWx0 ZXIgY2hhbmdlcyBieSBvcmlnaW4uCiAgKi8KIHR5cGVkZWYgYm9vbCAoKkxvZ2ljYWxEZWNvZGVG aWx0ZXJCeU9yaWdpbkNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKQEAg LTIyMSw2ICsyMzQsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQbHVnaW5DYWxsYmFja3MKIAlM b2dpY2FsRGVjb2RlVHJ1bmNhdGVDQiB0cnVuY2F0ZV9jYjsKIAlMb2dpY2FsRGVjb2RlQ29tbWl0 Q0IgY29tbWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVNZXNzYWdlQ0IgbWVzc2FnZV9jYjsKKwlMb2dp Y2FsRGVjb2RlRERMTWVzc2FnZUNCIGRkbF9jYjsKIAlMb2dpY2FsRGVjb2RlRmlsdGVyQnlPcmln aW5DQiBmaWx0ZXJfYnlfb3JpZ2luX2NiOwogCUxvZ2ljYWxEZWNvZGVTaHV0ZG93bkNCIHNodXRk b3duX2NiOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVm ZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKaW5kZXggMjE1 ZDE0OS4uZTkyYjgxNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRl cmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApA QCAtMTEsNiArMTEsOCBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2lu Y2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCisjaW5jbHVkZSAi cmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsLmgiCiAj aW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCkBA IC02NSw2ICs2Nyw3IEBAIHR5cGVkZWYgZW51bSBSZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZQogCVJF T1JERVJfQlVGRkVSX0NIQU5HRV9JTlNFUlQsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFU RSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfREVMRVRFLAorCVJFT1JERVJfQlVGRkVSX0NIQU5H RV9EREwsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX01FU1NBR0UsCiAJUkVPUkRFUl9CVUZGRVJf Q0hBTkdFX0lOVkFMSURBVElPTiwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5URVJOQUxfU05B UFNIT1QsCkBAIC0xMzksNiArMTQyLDE2IEBAIHR5cGVkZWYgc3RydWN0IFJlb3JkZXJCdWZmZXJD aGFuZ2UKIAkJCWNoYXIJICAgKm1lc3NhZ2U7CiAJCX0JCQltc2c7CiAKKwkJLyogRERMICovCisJ CXN0cnVjdAorCQl7CisJCQljaGFyCSAgICpwcmVmaXg7CisJCQlTaXplCQltZXNzYWdlX3NpemU7 CisJCQljaGFyCSAgICptZXNzYWdlOworCQkJT2lkCQkJcmVsaWQ7CisJCQlEZXBhcnNlZENvbW1h bmRUeXBlIGNtZHR5cGU7CisJCX0JCQlkZGw7CisKIAkJLyogTmV3IHNuYXBzaG90LCBzZXQgd2hl biBhY3Rpb24gPT0gKl9JTlRFUk5BTF9TTkFQU0hPVCAqLwogCQlTbmFwc2hvdAlzbmFwc2hvdDsK IApAQCAtNDUyLDYgKzQ2NSwxNiBAQCB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyTWVzc2Fn ZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJCQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBT aXplIHN6LAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisvKiBEREwgbWVzc2Fn ZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KK3R5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJERExN ZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJ CQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJ CQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIHN6 LAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCiAvKiBiZWdpbiBwcmVwYXJl IGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlckJlZ2lu UHJlcGFyZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVy VFhOICp0eG4pOwpAQCAtNTc0LDYgKzU5Nyw3IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJUmVv cmRlckJ1ZmZlckFwcGx5VHJ1bmNhdGVDQiBhcHBseV90cnVuY2F0ZTsKIAlSZW9yZGVyQnVmZmVy Q29tbWl0Q0IgY29tbWl0OwogCVJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IgbWVzc2FnZTsKKwlSZW9y ZGVyQnVmZmVyRERMTWVzc2FnZUNCIGRkbDsKIAogCS8qCiAJICogQ2FsbGJhY2tzIHRvIGJlIGNh bGxlZCB3aGVuIHN0cmVhbWluZyBhIHRyYW5zYWN0aW9uIGF0IHByZXBhcmUgdGltZS4KQEAgLTY3 OCw2ICs3MDIsOSBAQCBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJlb3Jk ZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCSAgU25hcHNob3Qgc25h cCwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJCQkgIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3Qg Y2hhciAqcHJlZml4LAogCQkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAq bWVzc2FnZSk7CitleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKFJlb3Jk ZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJIGNv bnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJIGNvbnN0IGNo YXIgKm1lc3NhZ2UsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlKTsKIGV4 dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJDb21taXQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0 aW9uSWQgeGlkLAogCQkJCQkJCQlYTG9nUmVjUHRyIGNvbW1pdF9sc24sIFhMb2dSZWNQdHIgZW5k X2xzbiwKIAkJCQkJCQkJVGltZXN0YW1wVHogY29tbWl0X3RpbWUsIFJlcE9yaWdpbklkIG9yaWdp bl9pZCwgWExvZ1JlY1B0ciBvcmlnaW5fbHNuKTsKLS0gCjEuOC4zLjEKCg== --000000000000846be105f4416101 Content-Type: application/octet-stream; name="v67-0004-Introduce-the-test_ddl_deparse_regress-test-modu.patch" Content-Disposition: attachment; filename="v67-0004-Introduce-the-test_ddl_deparse_regress-test-modu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ldwxbac93 RnJvbSAwMTQyM2IxYmViNWFhZTg4ODZjZWJiYWYxMzc5OTI2ZDk4NDQxMGM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgOSBGZWIgMjAyMyAwMzoyODoyNiAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djY3IDQvN10gSW50cm9kdWNlIHRoZSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgdGVzdCBtb2R1 bGUuCgpUaGlzIHRlc3RpbmcgbW9kdWxlIGFpbXMgdG8gYWNoaWV2ZSB0aGUgZm9sbG93aW5nIGZv dXIgdGVzdGluZyBnb2FscyBmb3IgdGhlIERETCBkZXBhcnNlcjoKMS4gVGVzdCB0aGF0IHRoZSBn ZW5lcmF0ZWQgSlNPTiBibG9iIGlzIGV4cGVjdGVkIHVzaW5nIFNRTCB0ZXN0cy4KMi4gVGVzdCB0 aGF0IHRoZSByZS1mb3JtZWQgRERMIGNvbW1hbmQgaXMgZXhwZWN0ZWQgdXNpbmcgU1FMIHRlc3Rz LgozLiBUZXN0IHRoYXQgdGhlIHJlLWZvcm1lZCBEREwgY29tbWFuZCBoYXMgdGhlIHNhbWUgZWZm ZWN0IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kIGJ5IGNvbXBhcmluZwogICB0aGUgcmVzdWx0cyBv ZiBwZ19kdW1wLCB1c2luZyB0aGUgU1FMIHRlc3RzIGluIDEgYW5kIDIuCjQuIFRlc3QgdGhhdCBu ZXcgRERMIHN5bnRheCBpcyBoYW5kbGVkIGJ5IHRoZSBEREwgZGVwYXJzZXIgYnkgY2FwdHVyaW5n IGFuZCBkZXBhcmluZyBEREwgY29tbWFuZHMKICAgcmFuIGJ5IHBnX3JlZ3Jlc3MuCgoxIGFuZCAy IGlzIHRlc3RlZCB3aXRoIFNRTCB0ZXN0cywgYnkgcHJpbnRpbmcgdGhlIGRlcGFyc2VkIEpTT04g YmxvYiBhbmQgdGhlIHJlLWZvcm1lZCBjb21tYW5kLgoKR29hbCAzIGlzIHRlc3RlZCB3aXRoIFRB UCBmcmFtZXdvcmsgaW4gdC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbAoKR29hbCA0IGlz IHRlc3RlZCB3aXRoIFRBUCBmcmFtZXdvcmsgYW5kIHBnX3JlZ3Jlc3MgaW4gMDAyX3JlZ3Jlc3Nf dGVzdHMucGwsIHRoZSBleGVjdXRpb24gaXMgY3VycmVudGx5IGNvbW1lbnRlZCBvdXQgYmVjYXVz ZSBpdCB3aWxsIGZhaWwgZHVlIHVuaW1wbGVtZW50ZWQgY29tbWFuZHMgaW4gdGhlIERETCBkZXBh cnNlci4KLS0tCiBzcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgMSArCiAuLi4vbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvLmdpdGln bm9yZSAgICB8ICAgNCArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy9NYWtlZmlsZSB8ICA0NCArKysrKwogLi4uL21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzL1JFQURNRS5tZCAgICAgfCAgMjIgKysrCiAuLi4vZXhwZWN0ZWQvYWdncmVnYXRlLm91dCAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgOCArCiAuLi4vZXhwZWN0ZWQvY3JlYXRlX2V4dGVu c2lvbi5vdXQgICAgICAgICAgICAgICAgICB8ICAgNiArCiAuLi4vZXhwZWN0ZWQvY3JlYXRlX3Nj aGVtYS5vdXQgICAgICAgICAgICAgICAgICAgICB8ICAyMiArKysKIC4uLi9leHBlY3RlZC9jcmVh dGVfdGFibGUub3V0ICAgICAgICAgICAgICAgICAgICAgIHwgIDM2ICsrKysKIC4uLi9leHBlY3Rl ZC90ZXN0X2RkbF9kZXBhcnNlLm91dCAgICAgICAgICAgICAgICAgIHwgIDE4ICsrCiAuLi4vbW9k dWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQgICB8ICA0MiArKysrKwog Li4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvYWdncmVnYXRlLnNxbCAgICAgfCAgIDcg KwogLi4uL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbCAgICAgICAgICAgICAgICAgICAgICAgfCAg IDUgKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3NjaGVtYS5zcWwg fCAgMTYgKysKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5z cWwgIHwgIDE2ICsrCiAuLi4vc3FsL3Rlc3RfZGRsX2RlcGFyc2Uuc3FsICAgICAgICAgICAgICAg ICAgICAgICB8ICAyMCArKwogLi4uL3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwgICAg ICAgICAgICAgICAgfCAxODEgKysrKysrKysrKysrKysrKysrCiAuLi4vdC8wMDJfcmVncmVzc190 ZXN0cy5wbCAgICAgICAgICAgICAgICAgICAgICAgICB8IDIwNyArKysrKysrKysrKysrKysrKysr KysKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwgICAgICAgICAgICAgIHwg ICA5ICsKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYyAgICAgICAgICAgICAgICAgICAg IHwgIDU5ICsrKysrKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jb250cm9sICAgICAg ICAgICAgICAgfCAgIDQgKwogMjAgZmlsZXMgY2hhbmdlZCwgNzI3IGluc2VydGlvbnMoKykKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy8uZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9h Z2dyZWdhdGUub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2V4dGVuc2lvbi5vdXQKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBl Y3RlZC9jcmVhdGVfc2NoZW1hLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy9leHBlY3RlZC90ZXN0X2RkbF9kZXBhcnNlLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90 ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1aWxkCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3Fs L2FnZ3JlZ2F0ZS5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX2V4dGVuc2lvbi5zcWwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3Jl YXRlX3NjaGVtYS5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbAogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC90ZXN0X2Rk bF9kZXBhcnNlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90 LzAwMl9yZWdyZXNzX3Rlc3RzLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAu c3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MuY29udHJvbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUg Yi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCmluZGV4IGM2MjljYmUuLmMyNzJjNjQgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9N YWtlZmlsZQpAQCAtMTgsNiArMTgsNyBAQCBTVUJESVJTID0gXAogCQkgIHRlc3RfY29weV9jYWxs YmFja3MgXAogCQkgIHRlc3RfY3VzdG9tX3JtZ3JzIFwKIAkJICB0ZXN0X2RkbF9kZXBhcnNlIFwK KwkJICB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgXAogCQkgIHRlc3RfZXh0ZW5zaW9ucyBcCiAJ CSAgdGVzdF9naW5wb3N0aW5nbGlzdCBcCiAJCSAgdGVzdF9pbnRlZ2Vyc2V0IFwKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLy5naXRpZ25vcmUg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy8uZ2l0aWdub3JlCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkY2IzZmYKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy8uZ2l0aWdub3Jl CkBAIC0wLDAgKzEsNCBAQAorIyBHZW5lcmF0ZWQgc3ViZGlyZWN0b3JpZXMKKy9sb2cvCisvcmVz dWx0cy8KKy90bXBfY2hlY2svCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjVkNWE5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy9NYWtlZmlsZQpAQCAtMCwwICsxLDQ0IEBACisjLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIworIyBNYWtlZmlsZSBmb3Igc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MKKyMKKyMgUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisjIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwg UmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisjCisjIHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL01ha2VmaWxlCisjCisjLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorCisKK01PRFVMRVMgPSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MKK1BHRklMRURFU0Mg PSAidGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIC0gcmVncmVzc2lvbiB0ZXN0aW5nIGZvciBEREwg ZGVwYXJzaW5nIgorCitFWFRFTlNJT04gPSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MKK0RBVEEg PSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwKKworIyB0ZXN0X2RkbF9kZXBhcnNl IG11c3QgYmUgZmlyc3QKK1JFR1JFU1MgPSB0ZXN0X2RkbF9kZXBhcnNlIFwKKwljcmVhdGVfZXh0 ZW5zaW9uIFwKKwljcmVhdGVfc2NoZW1hIFwKKwljcmVhdGVfdGFibGUgXAorCWFnZ3JlZ2F0ZQor CitleHBvcnQgUkVHUkVTUworCitFWFRSQV9JTlNUQUxMID0gY29udHJpYi9wZ19zdGF0X3N0YXRl bWVudHMKKworVEFQX1RFU1RTID0gMQorCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdf Y29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQ R1hTKQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGly KS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250 cmliLWdsb2JhbC5taworZW5kaWYKKworUkVHUkVTU19TSExJQj0kKGFic190b3BfYnVpbGRkaXIp L3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcyQoRExTVUZGSVgpCitleHBvcnQgUkVHUkVTU19TSExJ QgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv UkVBRE1FLm1kIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvUkVB RE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMjUxOTgKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9S RUFETUUubWQKQEAgLTAsMCArMSwyMiBAQAorIyBUZXN0aW5nIGhhcm5lc3MgZm9yIERETCBkZXBh cnNlcgorCisjIyBUZXN0aW5nIGdvYWxzCisKK0RETCBEZXBhcnNlciBwcm92aWRlcyB0aGUgYWJp bGl0eSB0byBlbmNvZGUgdGhlIG9yaWdpbmFsIERETCBjb21tYW5kIHRvIGEgSlNPTiBzdHJpbmcs IHRoZW4gZGVjb2RlIGl0IHRvIGEgZnVsbHkgc2NoZW1hLXF1YWxpZmllZCBEREwgY29tbWFuZCB3 aGljaCBpcyBzdXBwb3NlZCB0byBoYXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgb3JpZ2luYWwg Y29tbWFuZC4gVGhpcyB0ZXN0aW5nIG1vZHVsZSBhaW1zIHRvIGFjaGlldmUgdGhlIGZvbGxvd2lu ZyBmb3VyIHRlc3RpbmcgZm9yIHRoZSBEREwgZGVwYXJzZXI6CisKKzEuIFRlc3QgdGhhdCB0aGUg Z2VuZXJhdGVkIEpTT04gYmxvYiBpcyBleHBlY3RlZCB1c2luZyBTUUwgdGVzdHMuCisyLiBUZXN0 IHRoYXQgdGhlIHJlLWZvcm1lZCBEREwgY29tbWFuZCBpcyBleHBlY3RlZCB1c2luZyBTUUwgdGVz dHMuCiszLiBUZXN0CXRoYXQgdGhlIHJlLWZvcm1lZCBEREwgY29tbWFuZCBoYXMgdGhlIHNhbWUg ZWZmZWN0IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kCisgICBieSBjb21wYXJpbmcJdGhlIHJlc3Vs dHMgb2YgcGdfZHVtcCwJdXNpbmcgdGhlIFNRTCB0ZXN0cyBpbiAxIGFuZCAyLgorNC4gVGVzdAl0 aGF0IG5ldyBEREwgc3ludGF4IGlzIGhhbmRsZWQgYnkgdGhlIERETCBkZXBhcnNlciBieSBjYXB0 dXJpbmcgYW5kIGRlcGFyaW5nCisgICBEREwgY29tbWFuZHMJcmFuIGJ5IHBnX3JlZ3Jlc3MuCisK KzEgYW5kIDIgaXMgdGVzdGVkIHdpdGggU1FMIHRlc3RzLCBieSBub3RpY2luZyB0aGUgZGVwYXJz ZWQgSlNPTiBibG9iIGFuZCB0aGUgcmUtZm9ybWVkIGNvbW1hbmQuCisKK0dvYWwgMyBpcyB0ZXN0 ZWQgd2l0aCBUQVAgZnJhbWV3b3JrIGluIHQvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwK KworR29hbCA0IGlzIHRlc3RlZCB3aXRoIFRBUCBmcmFtZXdvcmsgYW5kIHBnX3JlZ3Jlc3MgaW4g MDAyX3JlZ3Jlc3NfdGVzdHMucGwKKworIyMgVXNhZ2UKKworUnVuIGBtYWtlIGNoZWNrYCwgaXQg d2lsbCBydW4gdGhlIFNRTCB0ZXN0cyBmaXJzdCwgdGhlbiBpdCB3aWxsIHJ1biB0aGUgVEFQIHRl c3RzLiBUaGUgZXhlY3V0aW9uIG9mIDAwMl9yZWdyZXNzX3Rlc3RzLnBsIGlzIGN1cnJlbnRseSBj b21tZW50ZWQgb3V0IGJlY2F1c2UgaXQgd2lsbCBmYWlsIGR1ZSB0byB1bmltcGxlbWVudGVkIGNv bW1hbmRzIGluIHRoZSBEREwgZGVwYXJzZXIuCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGUub3V0IGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlLm91 dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTM5NWQwCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0 ZWQvYWdncmVnYXRlLm91dApAQCAtMCwwICsxLDggQEAKK0NSRUFURSBBR0dSRUdBVEUgbmV3YXZn KGludDQpICgKKyAgIHNmdW5jID0gaW50NF9hdmdfYWNjdW0sIHN0eXBlID0gX2ludDgsCisgICBm aW5hbGZ1bmMgPSBpbnQ4X2F2ZywKKyAgIGluaXRjb25kMSA9ICd7MCwwfScKKyk7CitOT1RJQ0U6 ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgQUdHUkVHQVRFICV7aWRlbnRpdHl9RCAo JXt0eXBlc31zKSAoJXtlbGVtczosIH1zKSIsICJlbGVtcyI6IFt7ImZtdCI6ICJTRlVOQz0le3By b2NlZHVyZX1EIiwgInByb2NlZHVyZSI6IHsib2JqbmFtZSI6ICJpbnQ0X2F2Z19hY2N1bSIsICJz Y2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sIHsiZm10IjogIlNUWVBFPSV7dHlwZX1UIiwgInR5 cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiB0cnVlLCAidHlwZW5hbWUiOiAiaW50OCIs ICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sIHsiZm10IjogIlNTUEFDRT0le3NwYWNlfW4i LCAicHJlc2VudCI6IGZhbHNlfSwgeyJmbXQiOiAiRklOQUxGVU5DPSV7cHJvY2VkdXJlfUQiLCAi cHJvY2VkdXJlIjogeyJvYmpuYW1lIjogImludDhfYXZnIiwgInNjaGVtYW5hbWUiOiAicGdfY2F0 YWxvZyJ9fSwgeyJmbXQiOiAiRklOQUxGVU5DX0VYVFJBPSV7dmFsdWV9cyIsICJ2YWx1ZSI6ICJm YWxzZSJ9LCB7ImZtdCI6ICJJTklUQ09ORD0le2luaXR2YWx9TCIsICJpbml0dmFsIjogInswLDB9 In0sIHsiZm10IjogIk1TRlVOQz0le3Byb2NlZHVyZX1EIiwgInByZXNlbnQiOiBmYWxzZX0sIHsi Zm10IjogIk1TVFlQRT0le3R5cGV9VCIsICJwcmVzZW50IjogZmFsc2V9LCB7ImZtdCI6ICJNU1NQ QUNFPSV7c3BhY2V9biIsICJwcmVzZW50IjogZmFsc2V9LCB7ImZtdCI6ICJNSU5WRlVOQz09JXt0 eXBlfVQiLCAicHJlc2VudCI6IGZhbHNlfSwgeyJmbXQiOiAiTUZJTkFMRlVOQz0le3Byb2NlZHVy ZX1EIiwgInByZXNlbnQiOiBmYWxzZX0sIHsiZm10IjogIk1GSU5BTEZVTkNfRVhUUkE9JXt2YWx1 ZX1zIiwgInByZXNlbnQiOiBmYWxzZX0sIHsiZm10IjogIk1JTklUQ09ORD0le2luaXR2YWx9TCIs ICJwcmVzZW50IjogZmFsc2V9LCB7ImZtdCI6ICJIWVBPVEhFVElDQUw9JXt2YWx1ZX1zIiwgInBy ZXNlbnQiOiBmYWxzZX0sIHsiZm10IjogIlNPUlRPUD0le29wZXJhdG9yfUQiLCAicHJlc2VudCI6 IGZhbHNlfV0sICJ0eXBlcyI6IHsiZm10IjogIiV7ZGlyZWN0OiwgfXMiLCAiZGlyZWN0IjogW3si Zm10IjogIiV7bW9kZX1zICV7bmFtZX1zICV7dHlwZX1UIiwgIm1vZGUiOiAiIiwgIm5hbWUiOiAi IiwgInR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjog ImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19XX0sICJpZGVudGl0eSI6IHsib2Jq bmFtZSI6ICJuZXdhdmciLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifX0KK05PVElDRTogIHJlLWZv cm1lZCBjb21tYW5kOiBDUkVBVEUgQUdHUkVHQVRFIHB1YmxpYy5uZXdhdmcgKCAgcGdfY2F0YWxv Zy5pbnQ0KSAoU0ZVTkM9cGdfY2F0YWxvZy5pbnQ0X2F2Z19hY2N1bSwgU1RZUEU9cGdfY2F0YWxv Zy5pbnQ4W10sIEZJTkFMRlVOQz1wZ19jYXRhbG9nLmludDhfYXZnLCBGSU5BTEZVTkNfRVhUUkE9 ZmFsc2UsIElOSVRDT05EPSd7MCwwfScpCitEUk9QIEFHR1JFR0FURSBuZXdhdmcoaW50NCk7CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBl Y3RlZC9jcmVhdGVfZXh0ZW5zaW9uLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9leHRlbnNpb24ub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2Y2NjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfZXh0ZW5z aW9uLm91dApAQCAtMCwwICsxLDYgQEAKKy0tLQorLS0tIENSRUFURV9FWFRFTlNJT04KKy0tLQor Q1JFQVRFIEVYVEVOU0lPTiBwZ19zdGF0X3N0YXRlbWVudHM7CitOT1RJQ0U6ICBkZXBhcnNlZCBq c29uOiB7ImZtdCI6ICJDUkVBVEUgRVhURU5TSU9OICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1J ICV7b3B0aW9uczogfXMiLCAibmFtZSI6ICJwZ19zdGF0X3N0YXRlbWVudHMiLCAib3B0aW9ucyI6 IFt7ImZtdCI6ICJTQ0hFTUEgJXtzY2hlbWF9SSIsICJ0eXBlIjogInNjaGVtYSIsICJzY2hlbWEi OiAicHVibGljIn1dLCAiaWZfbm90X2V4aXN0cyI6ICIifQorTk9USUNFOiAgcmUtZm9ybWVkIGNv bW1hbmQ6IENSRUFURSBFWFRFTlNJT04gIHBnX3N0YXRfc3RhdGVtZW50cyBTQ0hFTUEgcHVibGlj CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9l eHBlY3RlZC9jcmVhdGVfc2NoZW1hLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9zY2hlbWEub3V0Cm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjFlMDlkYTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfc2NoZW1hLm91 dApAQCAtMCwwICsxLDIyIEBACistLQorLS0gQ1JFQVRFX1NDSEVNQQorLS0KK0NSRUFURSBTQ0hF TUEgZm9vOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFIFNDSEVNQSAl e2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle2F1dGhvcml6YXRpb259cyIsICJuYW1lIjogImZv byIsICJhdXRob3JpemF0aW9uIjogeyJmbXQiOiAiQVVUSE9SSVpBVElPTiAle2F1dGhvcml6YXRp b25fcm9sZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgImF1dGhvcml6YXRpb25fcm9sZSI6IG51bGx9 LCAiaWZfbm90X2V4aXN0cyI6ICIifQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFU RSBTQ0hFTUEgIGZvbyAKK0NSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyBiYXI7CitOT1RJQ0U6 ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31z ICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUiOiAiYmFyIiwgImF1dGhvcml6YXRp b24iOiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJl c2VudCI6IGZhbHNlLCAiYXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3Rz IjogIklGIE5PVCBFWElTVFMifQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBT Q0hFTUEgSUYgTk9UIEVYSVNUUyBiYXIgCitDUkVBVEUgU0NIRU1BIGJhejsKK05PVElDRTogIGRl cGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtu YW1lfUkgJXthdXRob3JpemF0aW9ufXMiLCAibmFtZSI6ICJiYXoiLCAiYXV0aG9yaXphdGlvbiI6 IHsiZm10IjogIkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50 IjogZmFsc2UsICJhdXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAi In0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgU0NIRU1BICBiYXogCistLSBX aWxsIG5vdCBiZSBjcmVhdGVkLCBhbmQgd2lsbCBub3QgYmUgaGFuZGxlZCBieSB0aGUKKy0tIGV2 ZW50IHRyaWdnZXIKK0NSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyBiYXo7CitOT1RJQ0U6ICBz Y2hlbWEgImJheiIgYWxyZWFkeSBleGlzdHMsIHNraXBwaW5nCitDUkVBVEUgU0NIRU1BIGVsZW1l bnRfdGVzdAorICBDUkVBVEUgVEFCTEUgZm9vIChpZCBpbnQpCitOT1RJQ0U6ICBkZXBhcnNlZCBq c29uOiB7ImZtdCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7 YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUiOiAiZWxlbWVudF90ZXN0IiwgImF1dGhvcml6YXRpb24i OiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2Vu dCI6IGZhbHNlLCAiYXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjog IiJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFIFNDSEVNQSAgZWxlbWVudF90 ZXN0IAorTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVu Y2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVu dHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0 aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHki OiB7Im9iam5hbWUiOiAiZm9vIiwgInNjaGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJpbmhl cml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51 bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7 b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjog bnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIs ICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIi LCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0 aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2Vu dCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10Ijog IlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRo b2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10 IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVz c2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVk X2NvbHVtbn1zIiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsi dHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hl bWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInBy ZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09M TEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVz c2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJl c2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29s dW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19 CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFICBUQUJMRSAgZWxlbWVudF90ZXN0 LmZvbyAoaWQgcGdfY2F0YWxvZy5pbnQ0IFNUT1JBR0UgcGxhaW4gICAgICkgICAgICAKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVk L2NyZWF0ZV90YWJsZS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjllZWFhMWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0CkBAIC0wLDAg KzEsMzYgQEAKK0NSRUFURSBUQUJMRSBzaW1wbGVfdGFibGUoCisgICAgaWQgaW50LAorICAgIG5h bWUgdmFyY2hhcig1KQorKTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFU RSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgl e3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2Nv bW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1z IiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogInNpbXBsZV90YWJsZSIsICJzY2hlbWFuYW1lIjog InB1YmxpYyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQp IiwgInBhcmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10 IjogIk9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9u X2NvbW1pdF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0Ug JXt0YWJsZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAi cGVyc2lzdGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50 IjogZmFsc2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5p dGlvbn1zIiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19t ZXRob2QiOiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFs c2UsICJhY2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9l bGVtZW50cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3Rv cmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1 bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImlkIiwgInR5cGUiOiAiY29sdW1u IiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1l IjogImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQi OiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlv biI6IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAi cGxhaW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9u X21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9 LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJl c2VudCI6IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtj b2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7 ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAibmFtZSIsICJ0eXBlIjog ImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiKDUpIiwgInR5cGFycmF5IjogZmFsc2Us ICJ0eXBlbmFtZSI6ICJ2YXJjaGFyIiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVm YXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjog IiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9i am5hbWUiOiAiZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9y YWdlIjogImV4dGVuZGVkIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtj b21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRo b2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlT IEFTIiwgInByZXNlbnQiOiBmYWxzZX19XX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBD UkVBVEUgIFRBQkxFICBwdWJsaWMuc2ltcGxlX3RhYmxlIChpZCBwZ19jYXRhbG9nLmludDQgU1RP UkFHRSBwbGFpbiAgICAgLCBuYW1lIHBnX2NhdGFsb2cuInZhcmNoYXIiKDUpIFNUT1JBR0UgZXh0 ZW5kZWQgIENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgICApICAgICAgCistLSBUZXN0IENS RUFURSBJTkRFWCB3aXRoIGFuIElOQ0xVREUgQ0xBVVNFCitDUkVBVEUgVU5JUVVFIElOREVYIGNv dmVyaW5nX2luZGV4IG9uIHNpbXBsZV90YWJsZSAoaWQpIElOQ0xVREUgKG5hbWUpOworTk9USUNF OiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7dW5pcXVlfXMgSU5ERVggJXtjb25j dXJyZW50bHl9cyAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSBPTiAle3RhYmxlfUQgVVNJTkcg JXtpbmRleF9hbX1zICV7ZGVmaW5pdGlvbn1zICV7d2l0aH1zICV7dGFibGVzcGFjZX1zICV7d2hl cmVfY2xhdXNlfXMiLCAibmFtZSI6ICJjb3ZlcmluZ19pbmRleCIsICJ3aXRoIjogeyJmbXQiOiAi V0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAidGFibGUiOiB7Im9iam5hbWUiOiAic2ltcGxlX3Rh YmxlIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0sICJ1bmlxdWUiOiAiVU5JUVVFIiwgImluZGV4 X2FtIjogImJ0cmVlIiwgImRlZmluaXRpb24iOiAiKGlkIHBnX2NhdGFsb2cuaW50NF9vcHMpIElO Q0xVREUgKG5hbWUpIiwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFIiwgInByZXNl bnQiOiBmYWxzZX0sICJjb25jdXJyZW50bHkiOiAiIiwgIndoZXJlX2NsYXVzZSI6IHsiZm10Ijog IldIRVJFIiwgInByZXNlbnQiOiBmYWxzZX0sICJpZl9ub3RfZXhpc3RzIjogIiJ9CitOT1RJQ0U6 ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFIFVOSVFVRSBJTkRFWCAgIGNvdmVyaW5nX2luZGV4 IE9OIHB1YmxpYy5zaW1wbGVfdGFibGUgVVNJTkcgYnRyZWUgKGlkIHBnX2NhdGFsb2cuaW50NF9v cHMpIElOQ0xVREUgKG5hbWUpICAgCistLSBUZXN0IFRhYmxlTGlrZUNsYXVzZSBpcyBoYW5kbGVk IHByb3Blcmx5CitDUkVBVEUgVEFCTEUgY3RsdDEgKGEgdGV4dCBDSEVDSyAobGVuZ3RoKGEpID4g MikgUFJJTUFSWSBLRVksIGIgdGV4dCk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6 ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRp dHl9RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMg JXtvbl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9j bGF1c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJjdGx0MSIsICJzY2hlbWFuYW1lIjog InB1YmxpYyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQp IiwgInBhcmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10 IjogIk9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9u X2NvbW1pdF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0Ug JXt0YWJsZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAi cGVyc2lzdGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50 IjogZmFsc2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5p dGlvbn1zIiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19t ZXRob2QiOiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFs c2UsICJhY2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9l bGVtZW50cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3Rv cmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1 bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImEiLCAidHlwZSI6ICJjb2x1bW4i LCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUi OiAidGV4dCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6 ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9u IjogeyJmbXQiOiAiQ09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1 bHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRlbmRl ZCIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0 aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJn ZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50 IjogZmFsc2V9fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0 b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZh dWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJiIiwgInR5cGUiOiAiY29sdW1u IiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1l IjogInRleHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQi OiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlv biI6IHsiZm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6ICJkZWZh dWx0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAiZXh0ZW5k ZWQiLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21l dGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAi Z2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2Vu dCI6IGZhbHNlfX0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMi LCAibmFtZSI6ICJjdGx0MV9hX2NoZWNrIiwgInR5cGUiOiAiY29uc3RyYWludCIsICJjb250eXBl IjogImNoZWNrIiwgImRlZmluaXRpb24iOiAiQ0hFQ0sgKChwZ19jYXRhbG9nLmxlbmd0aChhKSBP UEVSQVRPUihwZ19jYXRhbG9nLj4pIDIpKSJ9LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1J ICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAiY3RsdDFfcGtleSIsICJ0eXBlIjogImNvbnN0cmFp bnQiLCAiY29udHlwZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZ IChhKSJ9XX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBwdWJs aWMuY3RsdDEgKGEgcGdfY2F0YWxvZy50ZXh0IFNUT1JBR0UgZXh0ZW5kZWQgIENPTExBVEUgcGdf Y2F0YWxvZy4iZGVmYXVsdCIgICAsIGIgcGdfY2F0YWxvZy50ZXh0IFNUT1JBR0UgZXh0ZW5kZWQg IENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgICAsIENPTlNUUkFJTlQgY3RsdDFfYV9jaGVj ayBDSEVDSyAoKHBnX2NhdGFsb2cubGVuZ3RoKGEpIE9QRVJBVE9SKHBnX2NhdGFsb2cuPikgMikp LCBDT05TVFJBSU5UIGN0bHQxX3BrZXkgUFJJTUFSWSBLRVkgKGEpKSAgICAgIAorTk9USUNFOiAg ZGVwYXJzZWQganNvbjogPE5VTEw+CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogPE5VTEw+ CitBTFRFUiBUQUJMRSBjdGx0MSBBTFRFUiBDT0xVTU4gYSBTRVQgU1RPUkFHRSBNQUlOOworTk9U SUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0 eX1EICV7c3ViY21kczosIH1zIiwgIm9ianR5cGUiOiAiVEFCTEUiLCAic3ViY21kcyI6IFt7ImZt dCI6ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsICJ0 eXBlIjogInNldCBzdG9yYWdlIiwgImNvbHVtbiI6ICJhIiwgInN0b3JhZ2UiOiAibWFpbiJ9XSwg ImlkZW50aXR5IjogeyJvYmpuYW1lIjogImN0bHQxIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn19 CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQUxURVIgVEFCTEUgcHVibGljLmN0bHQxIEFM VEVSIENPTFVNTiBhIFNFVCBTVE9SQUdFIG1haW4KK0FMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENP TFVNTiBiIFNFVCBTVE9SQUdFIEVYVEVSTkFMOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJm bXQiOiAiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zIiwgIm9i anR5cGUiOiAiVEFCTEUiLCAic3ViY21kcyI6IFt7ImZtdCI6ICJBTFRFUiBDT0xVTU4gJXtjb2x1 bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsICJ0eXBlIjogInNldCBzdG9yYWdlIiwgImNv bHVtbiI6ICJiIiwgInN0b3JhZ2UiOiAiZXh0ZXJuYWwifV0sICJpZGVudGl0eSI6IHsib2JqbmFt ZSI6ICJjdGx0MSIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9fQorTk9USUNFOiAgcmUtZm9ybWVk IGNvbW1hbmQ6IEFMVEVSIFRBQkxFIHB1YmxpYy5jdGx0MSBBTFRFUiBDT0xVTU4gYiBTRVQgU1RP UkFHRSBleHRlcm5hbAorLS0gVGVzdCBmb3JlaWduIGtleSBjb25zdHJhaW50IGlzIGhhbmRsZWQg aW4gYSBmb2xsb3dpbmcgQUxURVIgVEFCTEUgQUREIENPTlNUUkFJTlQgRk9SRUlHTiBLRVkgUkVG RVJFTkNFUyBzdWJjb21tYW5kCitDUkVBVEUgVEFCTEUgcHJvZHVjdCAoaWQgaW50IFBSSU1BUlkg S0VZLCBuYW1lIHRleHQpOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRF ICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7 dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29t bWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMi LCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAicHJvZHVjdCIsICJzY2hlbWFuYW1lIjogInB1Ymxp YyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBh cmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9O IENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1p dF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJs ZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lz dGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFs c2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1z IiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2Qi OiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJh Y2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50 cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1z ICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAl e2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImlkIiwgInR5cGUiOiAiY29sdW1uIiwgImNv bHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImlu dDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVG QVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsi Zm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4i LCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhv ZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2Vu ZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6 IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9y YWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVs dH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAibmFtZSIsICJ0eXBlIjogImNvbHVt biIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFt ZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10 IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRp b24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVm YXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVu ZGVkIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9t ZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwg ImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNl bnQiOiBmYWxzZX19LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1z IiwgIm5hbWUiOiAicHJvZHVjdF9wa2V5IiwgInR5cGUiOiAiY29uc3RyYWludCIsICJjb250eXBl IjogInByaW1hcnkga2V5IiwgImRlZmluaXRpb24iOiAiUFJJTUFSWSBLRVkgKGlkKSJ9XX0KK05P VElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBwdWJsaWMucHJvZHVjdCAo aWQgcGdfY2F0YWxvZy5pbnQ0IFNUT1JBR0UgcGxhaW4gICAgICwgbmFtZSBwZ19jYXRhbG9nLnRl eHQgU1RPUkFHRSBleHRlbmRlZCAgQ09MTEFURSBwZ19jYXRhbG9nLiJkZWZhdWx0IiAgICwgQ09O U1RSQUlOVCBwcm9kdWN0X3BrZXkgUFJJTUFSWSBLRVkgKGlkKSkgICAgICAKK05PVElDRTogIGRl cGFyc2VkIGpzb246IDxOVUxMPgorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IDxOVUxMPgor Q1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBSSU1BUlkgS0VZLCBwcm9kdWN0X2lk IGludAorUkVGRVJFTkNFUyBwcm9kdWN0IChpZCkpOworTk9USUNFOiAgZGVwYXJzZWQganNvbjog eyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAl e2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVz cGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAl e3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAib3JkZXJzIiwgInNjaGVt YW5hbWUiOiAicHVibGljIn0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVu dHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0 IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZh bHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFC TEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjog bnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwg InByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkg JXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAi YWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNl bnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwg InRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0Ug JXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1z ICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAib3JkZXJfaWQiLCAi dHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZh bHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRl ZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6 ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAi Y29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9O ICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25f bWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFM V0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBl fVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAl e25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJw cm9kdWN0X2lkIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAi dHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19j YXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9 LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2Vu dCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6 ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwg ImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10Ijog IkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIkNPTlNU UkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAibmFtZSI6ICJvcmRlcnNfcGtleSIsICJ0 eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlwZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9u IjogIlBSSU1BUlkgS0VZIChvcmRlcl9pZCkifV19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFu ZDogQ1JFQVRFICBUQUJMRSAgcHVibGljLm9yZGVycyAob3JkZXJfaWQgcGdfY2F0YWxvZy5pbnQ0 IFNUT1JBR0UgcGxhaW4gICAgICwgcHJvZHVjdF9pZCBwZ19jYXRhbG9nLmludDQgU1RPUkFHRSBw bGFpbiAgICAgLCBDT05TVFJBSU5UIG9yZGVyc19wa2V5IFBSSU1BUlkgS0VZIChvcmRlcl9pZCkp ICAgICAgCitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiA8TlVMTD4KK05PVElDRTogIHJlLWZvcm1l ZCBjb21tYW5kOiA8TlVMTD4KK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkFMVEVS ICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9cyIsICJvYmp0eXBlIjogIlRB QkxFIiwgInN1YmNtZHMiOiBbeyJmbXQiOiAiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZp bml0aW9ufXMiLCAibmFtZSI6ICJvcmRlcnNfcHJvZHVjdF9pZF9ma2V5IiwgInR5cGUiOiAiYWRk IGNvbnN0cmFpbnQiLCAiZGVmaW5pdGlvbiI6ICJGT1JFSUdOIEtFWSAocHJvZHVjdF9pZCkgUkVG RVJFTkNFUyBwdWJsaWMucHJvZHVjdChpZCkifV0sICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJv cmRlcnMiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21t YW5kOiBBTFRFUiBUQUJMRSBwdWJsaWMub3JkZXJzIEFERCBDT05TVFJBSU5UIG9yZGVyc19wcm9k dWN0X2lkX2ZrZXkgRk9SRUlHTiBLRVkgKHByb2R1Y3RfaWQpIFJFRkVSRU5DRVMgcHVibGljLnBy b2R1Y3QoaWQpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy9leHBlY3RlZC90ZXN0X2RkbF9kZXBhcnNlLm91dCBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL3Rlc3RfZGRsX2RlcGFyc2Uub3V0Cm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZTJiZjIKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC90 ZXN0X2RkbF9kZXBhcnNlLm91dApAQCAtMCwwICsxLDE4IEBACitDUkVBVEUgRVhURU5TSU9OIHRl c3RfZGRsX2RlcGFyc2VfcmVncmVzczsKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHRlc3Rf ZGRsX2RlcGFyc2UoKQorICBSRVRVUk5TIGV2ZW50X3RyaWdnZXIgTEFOR1VBR0UgcGxwZ3NxbCBB UworJCQKK0RFQ0xBUkUKKwlyIHJlY29yZDsKKwlkZXBhcnNlZF9qc29uIHRleHQ7CitCRUdJTgor CUZPUiByIElOIFNFTEVDVCAqIEZST00gcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoKQor CUxPT1AKKwkJZGVwYXJzZWRfanNvbiA9IHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfdG9fanNvbihy LmNvbW1hbmQpOworCQlSQUlTRSBOT1RJQ0UgJ2RlcGFyc2VkIGpzb246ICUnLCBkZXBhcnNlZF9q c29uOworCQlSQUlTRSBOT1RJQ0UgJ3JlLWZvcm1lZCBjb21tYW5kOiAlJywgcGdfY2F0YWxvZy5k ZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZChkZXBhcnNlZF9qc29uKTsKKwlFTkQgTE9PUDsKK0VO RDsKKyQkOworQ1JFQVRFIEVWRU5UIFRSSUdHRVIgdGVzdF9kZGxfZGVwYXJzZQorT04gZGRsX2Nv bW1hbmRfZW5kIEVYRUNVVEUgUFJPQ0VEVVJFIHRlc3RfZGRsX2RlcGFyc2UoKTsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1aWxk IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ExNTJhMgotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1 aWxkCkBAIC0wLDAgKzEsNDIgQEAKKyMgRklYTUU6IHByZXZlbnQgaW5zdGFsbCBkdXJpbmcgbWFp biBpbnN0YWxsLCBidXQgbm90IGR1cmluZyB0ZXN0IDovCisKK3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzc19zb3VyY2VzID0gZmlsZXMoCisgICd0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYycsCisp CisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3Nfc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6 IFsKKyAgICAnLS1OQU1FJywgJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcycsCisgICAgJy0tRklM RURFU0MnLCAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIC0gcmVncmVzc2lvbiB0ZXN0aW5nIGZv ciBEREwgZGVwYXJzaW5nJyxdKQorZW5kaWYKKwordGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzID0g c2hhcmVkX21vZHVsZSgndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzJywKKyAgdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzX3NvdXJjZXMsCisgIGt3YXJnczogcGdfbW9kX2FyZ3MsCispCit0ZXN0cHJl cF90YXJnZXRzICs9IHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcworCitpbnN0YWxsX2RhdGEoCisg ICd0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbCcsCisgICd0ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MtLTEuMC5zcWwnLAorICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdzLAorKQorCit0 ZXN0cyArPSB7CisgICduYW1lJzogJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcycsCisgICdzZCc6 IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxk X2RpcigpLAorICAncmVncmVzcyc6IHsKKyAgICAnc3FsJzogWworICAgICAgJ3Rlc3RfZGRsX2Rl cGFyc2UnLAorICAgICAgJ2NyZWF0ZV9leHRlbnNpb24nLAorICAgICAgJ2NyZWF0ZV9zY2hlbWEn LAorICAgICAgJ2NyZWF0ZV90YWJsZScsCisgICAgXSwKKyAgfSwKKyAgJ3RhcCc6IHsKKyAgICAn dGVzdHMnOiBbCisgICAgICAndC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbCcsCisgICAg XSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzL3NxbC9hZ2dyZWdhdGUuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNTYxYjRlMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9hZ2dyZWdhdGUuc3FsCkBAIC0wLDAgKzEsNyBA QAorQ1JFQVRFIEFHR1JFR0FURSBuZXdhdmcoaW50NCkgKAorICAgc2Z1bmMgPSBpbnQ0X2F2Z19h Y2N1bSwgc3R5cGUgPSBfaW50OCwKKyAgIGZpbmFsZnVuYyA9IGludDhfYXZnLAorICAgaW5pdGNv bmQxID0gJ3swLDB9JworKTsKKworRFJPUCBBR0dSRUdBVEUgbmV3YXZnKGludDQpOwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0 ZV9leHRlbnNpb24uc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3Mvc3FsL2NyZWF0ZV9leHRlbnNpb24uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmQyM2U3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX2V4dGVuc2lvbi5zcWwKQEAgLTAsMCArMSw1 IEBACistLS0KKy0tLSBDUkVBVEVfRVhURU5TSU9OCistLS0KKworQ1JFQVRFIEVYVEVOU0lPTiBw Z19zdGF0X3N0YXRlbWVudHM7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3NjaGVtYS5zcWwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3NjaGVtYS5zcWwKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiMTNmMAotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfc2NoZW1h LnNxbApAQCAtMCwwICsxLDE2IEBACistLQorLS0gQ1JFQVRFX1NDSEVNQQorLS0KKworQ1JFQVRF IFNDSEVNQSBmb287CisKK0NSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyBiYXI7CisKK0NSRUFU RSBTQ0hFTUEgYmF6OworCistLSBXaWxsIG5vdCBiZSBjcmVhdGVkLCBhbmQgd2lsbCBub3QgYmUg aGFuZGxlZCBieSB0aGUKKy0tIGV2ZW50IHRyaWdnZXIKK0NSRUFURSBTQ0hFTUEgSUYgTk9UIEVY SVNUUyBiYXo7CisKK0NSRUFURSBTQ0hFTUEgZWxlbWVudF90ZXN0CisgIENSRUFURSBUQUJMRSBm b28gKGlkIGludCkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uOTk3ZDJmNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCkBAIC0w LDAgKzEsMTYgQEAKK0NSRUFURSBUQUJMRSBzaW1wbGVfdGFibGUoCisgICAgaWQgaW50LAorICAg IG5hbWUgdmFyY2hhcig1KQorKTsKKy0tIFRlc3QgQ1JFQVRFIElOREVYIHdpdGggYW4gSU5DTFVE RSBDTEFVU0UKK0NSRUFURSBVTklRVUUgSU5ERVggY292ZXJpbmdfaW5kZXggb24gc2ltcGxlX3Rh YmxlIChpZCkgSU5DTFVERSAobmFtZSk7CisKKy0tIFRlc3QgVGFibGVMaWtlQ2xhdXNlIGlzIGhh bmRsZWQgcHJvcGVybHkKK0NSRUFURSBUQUJMRSBjdGx0MSAoYSB0ZXh0IENIRUNLIChsZW5ndGgo YSkgPiAyKSBQUklNQVJZIEtFWSwgYiB0ZXh0KTsKK0FMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENP TFVNTiBhIFNFVCBTVE9SQUdFIE1BSU47CitBTFRFUiBUQUJMRSBjdGx0MSBBTFRFUiBDT0xVTU4g YiBTRVQgU1RPUkFHRSBFWFRFUk5BTDsKKworLS0gVGVzdCBmb3JlaWduIGtleSBjb25zdHJhaW50 IGlzIGhhbmRsZWQgaW4gYSBmb2xsb3dpbmcgQUxURVIgVEFCTEUgQUREIENPTlNUUkFJTlQgRk9S RUlHTiBLRVkgUkVGRVJFTkNFUyBzdWJjb21tYW5kCitDUkVBVEUgVEFCTEUgcHJvZHVjdCAoaWQg aW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOworQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJf aWQgaW50IFBSSU1BUlkgS0VZLCBwcm9kdWN0X2lkIGludAorUkVGRVJFTkNFUyBwcm9kdWN0IChp ZCkpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3Mvc3FsL3Rlc3RfZGRsX2RlcGFyc2Uuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3Mvc3FsL3Rlc3RfZGRsX2RlcGFyc2Uuc3FsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjA4ODlmYTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvdGVzdF9kZGxfZGVwYXJzZS5zcWwK QEAgLTAsMCArMSwyMCBAQAorQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3M7CisKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHRlc3RfZGRsX2RlcGFyc2UoKQorICBS RVRVUk5TIGV2ZW50X3RyaWdnZXIgTEFOR1VBR0UgcGxwZ3NxbCBBUworJCQKK0RFQ0xBUkUKKwly IHJlY29yZDsKKwlkZXBhcnNlZF9qc29uIHRleHQ7CitCRUdJTgorCUZPUiByIElOIFNFTEVDVCAq IEZST00gcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoKQorCUxPT1AKKwkJZGVwYXJzZWRf anNvbiA9IHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfdG9fanNvbihyLmNvbW1hbmQpOworCQlSQUlT RSBOT1RJQ0UgJ2RlcGFyc2VkIGpzb246ICUnLCBkZXBhcnNlZF9qc29uOworCQlSQUlTRSBOT1RJ Q0UgJ3JlLWZvcm1lZCBjb21tYW5kOiAlJywgcGdfY2F0YWxvZy5kZGxfZGVwYXJzZV9leHBhbmRf Y29tbWFuZChkZXBhcnNlZF9qc29uKTsKKwlFTkQgTE9PUDsKK0VORDsKKyQkOworCitDUkVBVEUg RVZFTlQgVFJJR0dFUiB0ZXN0X2RkbF9kZXBhcnNlCitPTiBkZGxfY29tbWFuZF9lbmQgRVhFQ1VU RSBQUk9DRURVUkUgdGVzdF9kZGxfZGVwYXJzZSgpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0 cy5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAxX2Nv bXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uNjY0YWQzNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKQEAgLTAsMCAr MSwxODEgQEAKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgRW52OwordXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2Ug VGVzdDo6TW9yZTsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKKworc3ViIGV4ZWN1dGVfdGVzdF9jYXNl IHsKKyAgICBteSAkdGVzdF9uYW1lID0gJF9bMF07CisgICAgbXkgJHB1Yl9ub2RlID0gJF9bMV07 CisgICAgbXkgJHN1Yl9ub2RlID0gJF9bMl07CisgICAgbXkgJGRibmFtZSA9ICRfWzNdOworICAg IG15ICRvdXRwdXRkaXIgPSAkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRtcF9jaGVjazsKKwor ICAgICMgc2V0IHVwIGRlcGFyc2UgdGVzdGluZyByZXNvdXJjZXMKKyAgICBjcmVhdGVfZGVwYXJz ZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSgkcHViX25vZGUsICRkYm5hbWUpOworCisg ICAgbXkgJHRlc3RfZmlsZSA9ICIuL3NxbC8ke3Rlc3RfbmFtZX0uc3FsIjsKKyAgICBteSAkY29u dGVudCA9IGRve2xvY2FsKEBBUkdWLCQvKT0kdGVzdF9maWxlOzw+fTsKKworICAgICRwdWJfbm9k ZSAtPiBwc3FsKCRkYm5hbWUsICRjb250ZW50KTsKKworICAgICMgcmV0cmlldmUgU1FMIGNvbW1h bmRzIGdlbmVyYXRlZCBmcm9tIGRlcGFyc2VkIERETHMgb24gcHViIG5vZGUKKyAgICBteSAkZGRs X3NxbCA9ICcnOworICAgICRwdWJfbm9kZSAtPiBwc3FsKCRkYm5hbWUscSgKKyAgICAgICAgc2Vs ZWN0IGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kKGRkbCkgfHwgJzsnIGZyb20gZGVwYXJzZWRf ZGRscyBPUkRFUiBCWSBpZCBBU0MpLAorICAgICAgICBzdGRvdXQgPT4gXCRkZGxfc3FsKTsKKwor ICAgIHByaW50ICJcbnN0YXJ0IHByaW50aW5nIHJlLWZvcm1lZCBzcWxcbiI7CisgICAgcHJpbnQg JGRkbF9zcWw7CisgICAgcHJpbnQgIlxuZW5kIHByaW50aW5nIHJlLWZvcm1lZCBzcWxcbiI7Cisg ICAgIyBleGVjdXRlIFNRTCBjb21tYW5kcyBvbiBzdWIgbm9kZQorICAgICRzdWJfbm9kZSAtPiBw c3FsKCRkYm5hbWUsICRkZGxfc3FsKTsKKworICAgICMgY2xlYW4gdXAgZGVwYXJzZSB0ZXN0aW5n IHJlc291cmNlcworICAgIGNsZWFuX2RlcGFyc2VfdGVzdGluZ19yZXNvdXJjZXNfb25fcHViX25v ZGUoJHB1Yl9ub2RlLCAkZGJuYW1lKTsKKworICAgICMgZHVtcCBmcm9tIHB1YiBub2RlIGFuZCBz dWIgbm9kZQorICAgIG1rZGlyICR7b3V0cHV0ZGlyfS4iL2R1bXBzIiwgMDc1NTsKKyAgICBteSAk cHViX2R1bXAgPSAke291dHB1dGRpcn0uIi9kdW1wcy8ke3Rlc3RfbmFtZX1fcHViLmR1bXAiOwor ICAgIG15ICRzdWJfZHVtcCA9ICR7b3V0cHV0ZGlyfS4iL2R1bXBzLyR7dGVzdF9uYW1lfV9zdWIu ZHVtcCI7CisgICAgc3lzdGVtKCJwZ19kdW1wYWxsICIKKyAgICAgICAgLiAiLXMgIgorICAgICAg ICAuICItZiAiCisgICAgICAgIC4gJHB1Yl9kdW1wIC4gIiAiCisgICAgICAgIC4gIi0tbm8tc3lu YyAiCisgICAgICAgIC4gICctcCAnCisgICAgICAgIC4gJHB1Yl9ub2RlLT5wb3J0KSAgPT0gMCBv ciBkaWUgIkR1bXAgcHViIG5vZGUgZmFpbGVkIGluICR7dGVzdF9uYW1lfSI7CisgICAgc3lzdGVt KCJwZ19kdW1wYWxsICIKKyAgICAgICAgLiAiLXMgIgorICAgICAgICAuICItZiAiCisgICAgICAg IC4gJHN1Yl9kdW1wIC4gIiAiCisgICAgICAgIC4gIi0tbm8tc3luYyAiCisgICAgICAgIC4gICct cCAnCisgICAgICAgIC4gJHN1Yl9ub2RlLT5wb3J0KSAgPT0gMCBvciBkaWUgIkR1bXAgc3ViIG5v ZGUgZmFpbGVkIGluICR7dGVzdF9uYW1lfSI7CisKKyAgICAjIGNvbXBhcmUgZHVtcGVkIHJlc3Vs dHMKKyAgICBpcyhzeXN0ZW0oImRpZmYgIgorICAgIC4gJHB1Yl9kdW1wIC4gIiAiCisgICAgLiAk c3ViX2R1bXApLCAwLCAiRHVtcGVkIHJlc3VsdHMgZGlmZiBpbiAke3Rlc3RfbmFtZX0iKTsKK30K Kworc3ViIGluaXRfbm9kZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9ICRfWzBdOworICAgIG15ICRu b2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCRub2RlX25hbWUpOworICAgICRu b2RlLT5pbml0OworICAgICMgaW5jcmVhc2Ugc29tZSBzZXR0aW5ncyB0aGF0IENsdXN0ZXItPm5l dyBtYWtlcyB0b28gbG93IGJ5IGRlZmF1bHQuCisgICAgJG5vZGUtPmFkanVzdF9jb25mKCdwb3N0 Z3Jlc3FsLmNvbmYnLCAnbWF4X2Nvbm5lY3Rpb25zJywgJzI1Jyk7CisgICAgJG5vZGUtPmFwcGVu ZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkgICAnbWF4X3ByZXBhcmVkX3RyYW5zYWN0aW9u cyA9IDEwJyk7CisgICAgcmV0dXJuICRub2RlOworfQorCitzdWIgaW5pdF9wdWJfbm9kZSB7Cisg ICAgbXkgJG5vZGVfbmFtZSA9ICRfWzBdLiJfcHViIjsKKyAgICByZXR1cm4gaW5pdF9ub2RlKCRu b2RlX25hbWUpCit9CisKK3N1YiBpbml0X3N1Yl9ub2RlIHsKKyAgICBteSAkbm9kZV9uYW1lID0g JF9bMF0uIl9zdWIiOworICAgIHJldHVybiBpbml0X25vZGUoJG5vZGVfbmFtZSkKK30KKworc3Vi IGNyZWF0ZV9kZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlIHsKKyAgICBteSAk bm9kZSA9ICRfWzBdOworICAgIG15ICRkYm5hbWUgPSAkX1sxXTsKKyAgICAkbm9kZSAtPiBwc3Fs KCRkYm5hbWUsIHEoCisgICAgICAgIGJlZ2luOworICAgICAgICBDUkVBVEUgRVhURU5TSU9OIHRl c3RfZGRsX2RlcGFyc2VfcmVncmVzczsKKyAgICAgICAgY3JlYXRlIHRhYmxlIGRlcGFyc2VkX2Rk bHMoaWQgU0VSSUFMIFBSSU1BUlkgS0VZLCB0YWcgdGV4dCwgb2JqZWN0X2lkZW50aXR5IHRleHQs IGRkbCB0ZXh0KTsKKworICAgICAgICBjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBkZXBhcnNl X3RvX2pzb24oKQorICAgICAgICAgICAgcmV0dXJucyBldmVudF90cmlnZ2VyIGxhbmd1YWdlIHBs cGdzcWwgYXMKKyAgICAgICAgJCQKKyAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgciByZWNv cmQ7CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBmb3IgciBpbiBzZWxlY3QgKiBmcm9tIHBn X2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKCkKKyAgICAgICAgICAgIGxvb3AKKyAgICAgICAg ICAgICAgICBpbnNlcnQgaW50byBkZXBhcnNlZF9kZGxzKHRhZywgb2JqZWN0X2lkZW50aXR5LCBk ZGwpIHZhbHVlcyAoci5jb21tYW5kX3RhZywgci5vYmplY3RfaWRlbnRpdHksIHBnX2NhdGFsb2cu ZGRsX2RlcGFyc2VfdG9fanNvbihyLmNvbW1hbmQpKTsKKyAgICAgICAgICAgIGVuZCBsb29wOwor ICAgICAgICBFTkQ7CisgICAgICAgICQkOworCisgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIGZ1 bmN0aW9uIGRlcGFyc2VfZHJvcHNfdG9fanNvbigpCisgICAgICAgICAgICByZXR1cm5zIGV2ZW50 X3RyaWdnZXIgbGFuZ3VhZ2UgcGxwZ3NxbCBhcworICAgICAgICAkJAorICAgICAgICBkZWNsYXJl CisgICAgICAgICAgICByIHJlY29yZDsKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGZvciBy IGluIHNlbGVjdCAqIGZyb20gcGdfZXZlbnRfdHJpZ2dlcl9kcm9wcGVkX29iamVjdHMoKQorICAg ICAgICAgICAgbG9vcAorICAgICAgICAgICAgICAgIGluc2VydCBpbnRvIGRlcGFyc2VkX2RkbHMo dGFnLCBvYmplY3RfaWRlbnRpdHksIGRkbCkgdmFsdWVzIChyLm9iamVjdF90eXBlLCByLm9iamVj dF9pZGVudGl0eSwgcHVibGljLmRlcGFyc2VfZHJvcF9kZGwoci5vYmplY3RfaWRlbnRpdHksIHIu b2JqZWN0X3R5cGUpKTsKKyAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICBFTkQ7CisgICAg ICAgICQkOworCisgICAgICAgIGNyZWF0ZSBldmVudCB0cmlnZ2VyIGRkbF9kZXBhcnNlX3RyaWcK KyAgICAgICAgb24gZGRsX2NvbW1hbmRfZW5kIGV4ZWN1dGUgcHJvY2VkdXJlIGRlcGFyc2VfdG9f anNvbigpOworCisgICAgICAgIGNyZWF0ZSBldmVudCB0cmlnZ2VyIGRkbF9kcm9wc19kZXBhcnNl X3RyaWcKKyAgICAgICAgb24gc3FsX2Ryb3AgZXhlY3V0ZSBwcm9jZWR1cmUgZGVwYXJzZV9kcm9w c190b19qc29uKCk7CisKKyAgICAgICAgY29tbWl0OworICAgICkpOworfQorCitzdWIgY2xlYW5f ZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGUgPSAk X1swXTsKKyAgICBteSAkZGJuYW1lID0gJF9bMV07CisgICAgIyBEcm9wIHRoZSBldmVudCB0cmln Z2VyIGFuZCB0aGUgZnVuY3Rpb24gYmVmb3JlIHRha2luZyBhIGxvZ2ljYWwgZHVtcC4KKyAgICAk bm9kZSAtPiBzYWZlX3BzcWwoJGRibmFtZSxxKAorICAgICAgICBkcm9wIGV2ZW50IHRyaWdnZXIg ZGRsX2RlcGFyc2VfdHJpZzsKKyAgICAgICAgZHJvcCBldmVudCB0cmlnZ2VyIGRkbF9kcm9wc19k ZXBhcnNlX3RyaWc7CisgICAgICAgIGRyb3AgZnVuY3Rpb24gZGVwYXJzZV90b19qc29uKCk7Cisg ICAgICAgIGRyb3AgZnVuY3Rpb24gZGVwYXJzZV9kcm9wc190b19qc29uKCk7CisgICAgICAgIGRy b3AgdGFibGUgZGVwYXJzZWRfZGRsczsKKyAgICAgICAgRFJPUCBFWFRFTlNJT04gdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzOworICAgICkpOworfQorCitzdWIgdHJpbSB7CisgICAgbXkgQG91dCA9 IEBfOworICAgIGZvciAoQG91dCkgeworICAgICAgICBzL15ccysvLzsKKyAgICAgICAgcy9ccysk Ly87CisgICAgfQorICAgIHJldHVybiB3YW50YXJyYXkgPyBAb3V0IDogJG91dFswXTsKK30KKwor IyBDcmVhdGUgYW5kIHN0YXJ0IHB1YiBzdWIgbm9kZXMKK215ICRwdWJfbm9kZSA9IGluaXRfcHVi X25vZGUoInRlc3QiKTsKK215ICRzdWJfbm9kZSA9IGluaXRfc3ViX25vZGUoInRlc3QiKTsKK215 ICRkYm5hbWUgPSAicG9zdGdyZXMiOworJHB1Yl9ub2RlIC0+IHN0YXJ0OworJHN1Yl9ub2RlIC0+ IHN0YXJ0OworCisjIGxvYWQgdGVzdCBjYXNlcyBmcm9tIHRoZSByZWdyZXNzaW9uIHRlc3RzCitt eSBAcmVncmVzc190ZXN0cyA9IHNwbGl0IC9ccysvLCAkRU5We1JFR1JFU1N9OworCitmb3JlYWNo KEByZWdyZXNzX3Rlc3RzKSB7CisgICAgbXkgJHRlc3RfbmFtZSA9IHRyaW0oJF8pOworICAgICMg c2tpcCBpZiBpdCdzIHJlZ3Jlc3Npb24gdGVzdCBwcmVwYXJhdGlvbiBvciBlbXB0eSBzdHJpbmcK KyAgICBpZiAoJHRlc3RfbmFtZSBlcSAiIiBvciAkdGVzdF9uYW1lIGVxICJ0ZXN0X2RkbF9kZXBh cnNlIikKKyAgICB7CisgICAgICAgIG5leHQ7CisgICAgfQorICAgIGV2YWwge2V4ZWN1dGVfdGVz dF9jYXNlKCR0ZXN0X25hbWUsICRwdWJfbm9kZSwgJHN1Yl9ub2RlLCAkZGJuYW1lKTt9OworICAg IGlmICgkQCBuZSAiIikKKyAgICB7CisgICAgICAgIGZhaWwoJEApOworICAgIH0KK30KK2Nsb3Nl OworCisjIENsb3NlIG5vZGVzCiskcHViX25vZGUtPnN0b3A7Ciskc3ViX25vZGUtPnN0b3A7CisK K2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3MvdC8wMDJfcmVncmVzc190ZXN0cy5wbCBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAyX3JlZ3Jlc3NfdGVzdHMucGwKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E4NzVjMwotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAyX3JlZ3Jlc3NfdGVz dHMucGwKQEAgLTAsMCArMSwyMDcgQEAKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2Ug RW52OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKKworc3ViIGV4 ZWN1dGVfcmVncmVzc190ZXN0IHsKKyAgICBteSAkcHViX25vZGUgPSAkX1swXTsKKyAgICBteSAk c3ViX25vZGUgPSAkX1sxXTsKKyAgICBteSAkZGJuYW1lID0gInBvc3RncmVzIjsKKyAgICBteSAk ZGxwYXRoICAgID0gZGlybmFtZSgkRU5We1JFR1JFU1NfU0hMSUJ9KTsKKyAgICBteSAkaW5wdXRk aXIgPSAiLi4vLi4vcmVncmVzcyI7CisgICAgbXkgJG91dHB1dGRpciA9ICRQb3N0Z3JlU1FMOjpU ZXN0OjpVdGlsczo6dG1wX2NoZWNrOworCisgICAgIyBzZXQgdXAgZGVwYXJzZSB0ZXN0aW5nIHJl c291cmNlcworICAgIGNyZWF0ZV9kZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2Rl KCRwdWJfbm9kZSwgJGRibmFtZSk7CisKKyAgICAjIGV4ZWN1dGUgY29yZSByZWdyZXNzaW9uIHRl c3RzIG9uIHB1YiBub2RlCisgICAgbXkgJHJlZ3Jlc3NfY21kID0gJEVOVntQR19SRUdSRVNTfQor ICAgICAgICAuICIgIgorICAgICAgICAuICItLWRscGF0aD1cIiRkbHBhdGhcIiAiCisgICAgICAg IC4gIi0tbWF4LWNvbmN1cnJlbnQtdGVzdHM9MjAgIgorICAgICAgICAuICItLWRibmFtZT0iCisg ICAgICAgIC4gJGRibmFtZSAuICIgIgorICAgICAgICAuICItLXVzZS1leGlzdGluZyAiCisgICAg ICAgIC4gIi0taG9zdD0iCisgICAgICAgIC4gJHB1Yl9ub2RlLT5ob3N0IC4gIiAiCisgICAgICAg IC4gIi0tcG9ydD0iCisgICAgICAgIC4gJHB1Yl9ub2RlLT5wb3J0IC4gIiAiCisgICAgICAgIC4g Ii0taW5wdXRkaXI9JGlucHV0ZGlyICIKKyAgICAgICAgLiAiLS1vdXRwdXRkaXI9XCIkb3V0cHV0 ZGlyXCIgIgorICAgICAgICAuICItLXNjaGVkdWxlPSRpbnB1dGRpci9wYXJhbGxlbF9zY2hlZHVs ZSI7CisgICAgcHJpbnQgIlJlZ3Jlc3Npb24gdGVzdCBjb21tYW5kIGlzICRyZWdyZXNzX2NtZCI7 CisgICAgbXkgJHJjID0gc3lzdGVtKCRyZWdyZXNzX2NtZCk7CisgICAgaWYgKCRyYyAhPSAwKQor ICAgIHsKKyAgICAgICAgIyBJZiByZWdyZXNzaW9uIHRlc3QgZmFpbHMsIGR1bXAgb3V0IHRoZSBy ZWdyZXNzaW9uIGRpZmZzIGZpbGUKKyAgICAgICAgbXkgJGRpZmZzID0gIiR7b3V0cHV0ZGlyfS9y ZWdyZXNzaW9uL3JlZ3Jlc3Npb24uZGlmZnMiOworICAgICAgICBpZiAoLWUgJGRpZmZzKQorICAg ICAgICB7CisgICAgICAgICAgICBwcmludCAiPT09IGR1bXBpbmcgJGRpZmZzID09PVxuIjsKKyAg ICAgICAgICAgIHByaW50IHNsdXJwX2ZpbGUoJGRpZmZzKTsKKyAgICAgICAgICAgIHByaW50ICI9 PT0gRU9GID09PVxuIjsKKyAgICAgICAgfQorICAgICAgICBkaWUgIlJlZ3Jlc3Npb24gdGVzdCBm YWlsZWQiOworICAgIH0KKworICAgICMgUmV0cmlldmUgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCBm cm9tIGRlcGFyc2VkIERETHMgb24gcHViIG5vZGUKKyAgICBteSAkZGRsX3NxbCA9ICcnOworICAg ICRwdWJfbm9kZSAtPiBwc3FsKCRkYm5hbWUscSgKKyAgICAgICAgc2VsZWN0IGRkbF9kZXBhcnNl X2V4cGFuZF9jb21tYW5kKGRkbCkgfHwgJzsnIGZyb20gZGVwYXJzZWRfZGRscyBPUkRFUiBCWSBp ZCBBU0MpLAorICAgICAgICBzdGRvdXQgPT4gXCRkZGxfc3FsKTsKKworICAgICMgRXhlY3V0ZSBT UUwgY29tbWFuZHMgb24gc3ViIG5vZGUKKyAgICAkc3ViX25vZGUgLT4gcHNxbCgkZGJuYW1lLCAk ZGRsX3NxbCk7CisKKyAgICAjIENsZWFuIHVwIGRlcGFyc2UgdGVzdGluZyByZXNvdXJjZXMKKyAg ICBjbGVhbl9kZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlKCRwdWJfbm9kZSwg JGRibmFtZSk7CisKKyAgICAjIER1bXAgZnJvbSBwdWIgbm9kZSBhbmQgc3ViIG5vZGUKKyAgICBt a2RpciAke291dHB1dGRpcn0uIi9kdW1wcyIsIDA3NTU7CisgICAgbXkgJHB1Yl9kdW1wID0gJHtv dXRwdXRkaXJ9LiIvZHVtcHMvcmVncmVzc19wdWIuZHVtcCI7CisgICAgbXkgJHN1Yl9kdW1wID0g JHtvdXRwdXRkaXJ9LiIvZHVtcHMvcmVncmVzc19zdWIuZHVtcCI7CisgICAgc3lzdGVtKCJwZ19k dW1wYWxsICIKKyAgICAgICAgLiAiLXMgIgorICAgICAgICAuICItZiAiCisgICAgICAgIC4gJHB1 Yl9kdW1wIC4gIiAiCisgICAgICAgIC4gIi0tbm8tc3luYyAiCisgICAgICAgIC4gICctcCAnCisg ICAgICAgIC4gJHB1Yl9ub2RlLT5wb3J0KSAgPT0gMCBvciBkaWUgIkR1bXAgcHViIG5vZGUgZmFp bGVkIjsKKyAgICBzeXN0ZW0oInBnX2R1bXBhbGwgIgorICAgICAgICAuICItcyAiCisgICAgICAg IC4gIi1mICIKKyAgICAgICAgLiAkc3ViX2R1bXAgLiAiICIKKyAgICAgICAgLiAiLS1uby1zeW5j ICIKKyAgICAgICAgLiAgJy1wICcKKyAgICAgICAgLiAkc3ViX25vZGUtPnBvcnQpICA9PSAwIG9y IGRpZSAiRHVtcCBzdWIgbm9kZSBmYWlsZWQiOworCisgICAgIyBDb21wYXJlIGR1bXBlZCByZXN1 bHRzCisgICAgaXMoc3lzdGVtKCJkaWZmICIKKyAgICAuICRwdWJfZHVtcCAuICIgIgorICAgIC4g JHN1Yl9kdW1wKSwgMCwgIkNvbXBhcmluZyBkdW1wZWQgb3V0cHV0Iik7CisKKyAgICAjIENsb3Nl IG5vZGVzCisgICAgJHB1Yl9ub2RlLT5zdG9wOworICAgICRzdWJfbm9kZS0+c3RvcDsKK30KKwor c3ViIGluaXRfbm9kZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9ICRfWzBdOworICAgIG15ICRub2Rl ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCRub2RlX25hbWUpOworICAgICRub2Rl LT5pbml0OworICAgICMgaW5jcmVhc2Ugc29tZSBzZXR0aW5ncyB0aGF0IENsdXN0ZXItPm5ldyBt YWtlcyB0b28gbG93IGJ5IGRlZmF1bHQuCisgICAgJG5vZGUtPmFkanVzdF9jb25mKCdwb3N0Z3Jl c3FsLmNvbmYnLCAnbWF4X2Nvbm5lY3Rpb25zJywgJzI1Jyk7CisgICAgJG5vZGUtPmFwcGVuZF9j b25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkgICAnbWF4X3ByZXBhcmVkX3RyYW5zYWN0aW9ucyA9 IDEwJyk7CisgICAgcmV0dXJuICRub2RlOworfQorCitzdWIgaW5pdF9wdWJfbm9kZSB7CisgICAg bXkgJG5vZGVfbmFtZSA9ICRfWzBdLiJfcHViIjsKKyAgICByZXR1cm4gaW5pdF9ub2RlKCRub2Rl X25hbWUpCit9CisKK3N1YiBpbml0X3N1Yl9ub2RlIHsKKyAgICBteSAkbm9kZV9uYW1lID0gJF9b MF0uIl9zdWIiOworICAgIHJldHVybiBpbml0X25vZGUoJG5vZGVfbmFtZSkKK30KKworc3ViIGNy ZWF0ZV9kZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlIHsKKyAgICBteSAkbm9k ZSA9ICRfWzBdOworICAgIG15ICRkYm5hbWUgPSAkX1sxXTsKKyAgICAkbm9kZSAtPiBwc3FsKCRk Ym5hbWUsIHEoCisgICAgICAgIGJlZ2luOworICAgICAgICBDUkVBVEUgRVhURU5TSU9OIHRlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzczsKKyAgICAgICAgY3JlYXRlIHRhYmxlIGRlcGFyc2VkX2RkbHMo aWQgU0VSSUFMIFBSSU1BUlkgS0VZLCB0YWcgdGV4dCwgb2JqZWN0X2lkZW50aXR5IHRleHQsIGRk bCB0ZXh0KTsKKyAgICAgICAgY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gZGVwYXJzZV90b19q c29uKCkKKyAgICAgICAgICAgIHJldHVybnMgZXZlbnRfdHJpZ2dlciBsYW5ndWFnZSBwbHBnc3Fs IGFzCisgICAgICAgICQkCisgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIHIgcmVjb3JkOwor ICAgICAgICBiZWdpbgorICAgICAgICAgICAgZm9yIHIgaW4gc2VsZWN0ICogZnJvbSBwZ19ldmVu dF90cmlnZ2VyX2RkbF9jb21tYW5kcygpCisgICAgICAgICAgICBsb29wCisgICAgICAgICAgICAg ICAgaW5zZXJ0IGludG8gZGVwYXJzZWRfZGRscyh0YWcsIG9iamVjdF9pZGVudGl0eSwgZGRsKSB2 YWx1ZXMgKHIuY29tbWFuZF90YWcsIHIub2JqZWN0X2lkZW50aXR5LCBwZ19jYXRhbG9nLmRkbF9k ZXBhcnNlX3RvX2pzb24oci5jb21tYW5kKSk7CisgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAg ICAgRU5EOworICAgICAgICAkJDsKKyAgICAgICAgY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24g ZGVwYXJzZV9kcm9wc190b19qc29uKCkKKyAgICAgICAgICAgIHJldHVybnMgZXZlbnRfdHJpZ2dl ciBsYW5ndWFnZSBwbHBnc3FsIGFzCisgICAgICAgICQkCisgICAgICAgIGRlY2xhcmUKKyAgICAg ICAgICAgIHIgcmVjb3JkOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgZm9yIHIgaW4gc2Vs ZWN0ICogZnJvbSBwZ19ldmVudF90cmlnZ2VyX2Ryb3BwZWRfb2JqZWN0cygpCisgICAgICAgICAg ICBsb29wCisgICAgICAgICAgICAgICAgaW5zZXJ0IGludG8gZGVwYXJzZWRfZGRscyh0YWcsIG9i amVjdF9pZGVudGl0eSwgZGRsKSB2YWx1ZXMgKHIub2JqZWN0X3R5cGUsIHIub2JqZWN0X2lkZW50 aXR5LCBwdWJsaWMuZGVwYXJzZV9kcm9wX2RkbChyLm9iamVjdF9pZGVudGl0eSwgci5vYmplY3Rf dHlwZSkpOworICAgICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgIEVORDsKKyAgICAgICAgJCQ7 CisgICAgICAgIGNyZWF0ZSBldmVudCB0cmlnZ2VyIGRkbF9kZXBhcnNlX3RyaWcKKyAgICAgICAg b24gZGRsX2NvbW1hbmRfZW5kIGV4ZWN1dGUgcHJvY2VkdXJlIGRlcGFyc2VfdG9fanNvbigpOwor ICAgICAgICBjcmVhdGUgZXZlbnQgdHJpZ2dlciBkZGxfZHJvcHNfZGVwYXJzZV90cmlnCisgICAg ICAgIG9uIHNxbF9kcm9wIGV4ZWN1dGUgcHJvY2VkdXJlIGRlcGFyc2VfZHJvcHNfdG9fanNvbigp OworICAgICAgICBjb21taXQ7CisgICAgKSk7Cit9CisKK3N1YiBjbGVhbl9kZXBhcnNlX3Rlc3Rp bmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlIHsKKyAgICBteSAkbm9kZSA9ICRfWzBdOworICAgIG15 ICRkYm5hbWUgPSAkX1sxXTsKKyAgICAjIERyb3AgdGhlIGV2ZW50IHRyaWdnZXIgYW5kIHRoZSBm dW5jdGlvbiBiZWZvcmUgdGFraW5nIGEgbG9naWNhbCBkdW1wLgorICAgICRub2RlIC0+IHNhZmVf cHNxbCgkZGJuYW1lLHEoCisgICAgICAgIGRyb3AgZXZlbnQgdHJpZ2dlciBkZGxfZGVwYXJzZV90 cmlnOworICAgICAgICBkcm9wIGV2ZW50IHRyaWdnZXIgZGRsX2Ryb3BzX2RlcGFyc2VfdHJpZzsK KyAgICAgICAgZHJvcCBmdW5jdGlvbiBkZXBhcnNlX3RvX2pzb24oKTsKKyAgICAgICAgZHJvcCBm dW5jdGlvbiBkZXBhcnNlX2Ryb3BzX3RvX2pzb24oKTsKKyAgICAgICAgZHJvcCB0YWJsZSBkZXBh cnNlZF9kZGxzOworICAgICAgICBEUk9QIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3M7CisgICAgKSk7Cit9CisKK3N1YiB0cmltIHsKKyAgICBteSBAb3V0ID0gQF87CisgICAgZm9y IChAb3V0KSB7CisgICAgICAgIHMvXlxzKy8vOworICAgICAgICBzL1xzKyQvLzsKKyAgICB9Cisg ICAgcmV0dXJuIHdhbnRhcnJheSA/IEBvdXQgOiAkb3V0WzBdOworfQorCisjIENyZWF0ZSBhbmQg c3RhcnQgcHViIHN1YiBub2RlcworbXkgJHB1Yl9ub2RlID0gaW5pdF9wdWJfbm9kZSgicmVncmVz cyIpOworbXkgJHN1Yl9ub2RlID0gaW5pdF9zdWJfbm9kZSgicmVncmVzcyIpOworJHB1Yl9ub2Rl IC0+IHN0YXJ0OworJHN1Yl9ub2RlIC0+IHN0YXJ0OworCisjIENvbW1lbnQgdGhlIGV4ZWN1dGlv biB0ZW1wb3JhcmlseSwgYW4gZXJyb3IgaW4gZGRsX2RlcGFyc2UuYyB3aWxsIGNhdXNlIHRoZSBk YXRhYmFzZSBleGl0cyBhYm5vcm1hbGx5LCBlcnJvciBzaWduYXR1cmU6CisjCisjIDIwMjItMTIt MDMgMjM6MDI6NDQuNzc4IFVUQyBbMTI5MTAyXSBwZ19yZWdyZXNzL3RhYmxlc3BhY2UgTE9HOiAg c3RhdGVtZW50OiBBTFRFUiBUQUJMRSBBTEwgSU4gVEFCTEVTUEFDRSByZWdyZXNzX3RibHNwYWNl X3JlbmFtZWQgU0VUIFRBQkxFU1BBQ0UgcGdfZGVmYXVsdDsKKyMgVFJBUDogZmFpbGVkIEFzc2Vy dCgiSXNBKHN0bXQsIEFsdGVyVGFibGVTdG10KSIpLCBGaWxlOiAiZGRsX2RlcGFyc2UuYyIsIExp bmU6IDMzNzEsIFBJRDogMTI5MTAyCisjIHBvc3RncmVzOiByZWdyZXNzX3B1YjogcnVucWkgcG9z dGdyZXMgW2xvY2FsXSBBTFRFUiBUQUJMRShFeGNlcHRpb25hbENvbmRpdGlvbisweGJiKVsweDU2 M2JkNmVhNWIwZF0KKyMgLi4uCisjIC9saWIveDg2XzY0LWxpbnV4LWdudS9saWJjLnNvLjYoKzB4 MjlkOTApWzB4N2ZkNmE3NGE2ZDkwXQorIyAvbGliL3g4Nl82NC1saW51eC1nbnUvbGliYy5zby42 KF9fbGliY19zdGFydF9tYWluKzB4ODApWzB4N2ZkNmE3NGE2ZTQwXQorIyBwb3N0Z3JlczogcmVn cmVzc19wdWI6IHJ1bnFpIHBvc3RncmVzIFtsb2NhbF0gQUxURVIgVEFCTEUoX3N0YXJ0KzB4MjUp WzB4NTYzYmQ2NzJmMWU1XQorIyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MCBVVEMgWzEyOTA1OF0g TE9HOiAgc2VydmVyIHByb2Nlc3MgKFBJRCAxMjkxMDIpIHdhcyB0ZXJtaW5hdGVkIGJ5IHNpZ25h bCA2OiBBYm9ydGVkCisjIDIwMjItMTItMDMgMjM6MDI6NDQuODUwIFVUQyBbMTI5MDU4XSBERVRB SUw6ICBGYWlsZWQgcHJvY2VzcyB3YXMgcnVubmluZzogQUxURVIgVEFCTEUgQUxMIElOIFRBQkxF U1BBQ0UgcmVncmVzc190YmxzcGFjZV9yZW5hbWVkIFNFVCBUQUJMRVNQQUNFIHBnX2RlZmF1bHQ7 CisjIDIwMjItMTItMDMgMjM6MDI6NDQuODUwIFVUQyBbMTI5MDU4XSBMT0c6ICB0ZXJtaW5hdGlu ZyBhbnkgb3RoZXIgYWN0aXZlIHNlcnZlciBwcm9jZXNzZXMKKyMgMjAyMi0xMi0wMyAyMzowMjo0 NC44NTEgVVRDIFsxMjkwNThdIExPRzogIHNodXR0aW5nIGRvd24gYmVjYXVzZSByZXN0YXJ0X2Fm dGVyX2NyYXNoIGlzIG9mZgorIyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MiBVVEMgWzEyOTA1OF0g TE9HOiAgZGF0YWJhc2Ugc3lzdGVtIGlzIHNodXQgZG93bgorCisjIGV2YWwge2V4ZWN1dGVfcmVn cmVzc190ZXN0KCRwdWJfbm9kZSwgJHN1Yl9ub2RlKTt9OworIyBpZiAoJEAgbmUgIiIpCisjIHsK KyMgICAgIGZhaWwoJEApOworIyB9CisKKyMgQ2xvc2Ugbm9kZXMKKyRwdWJfbm9kZS0+c3RvcDsK KyRzdWJfbm9kZS0+c3RvcDsKKworcGFzcygicmVncmVzc3Npb24gdGVzdCBwYXNzZWQiKTsKKwor ZG9uZV90ZXN0aW5nKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjE0MDcwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mt LTEuMC5zcWwKQEAgLTAsMCArMSw5IEBACisvKiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwgKi8KKworLS0g Y29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENS RUFURSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MiIHRvIGxvYWQgdGhpcyBmaWxlLiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04g ZGVwYXJzZV9kcm9wX2RkbChJTiBvYmppZGVudGl0eSB0ZXh0LAorICAgIElOIG9iamVjdHR5cGUg dGV4dCkKKyAgUkVUVVJOUyB0ZXh0IElNTVVUQUJMRSBTVFJJQ1QKKyAgQVMgJ01PRFVMRV9QQVRI TkFNRScgTEFOR1VBR0UgQzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MuYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmJkNjk5MmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYwpAQCAtMCwwICsx LDU5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jCisg KgkJU3VwcG9ydCBmdW5jdGlvbnMgZm9yIHRoZSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgbW9k dWxlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUg ImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJub2Rl cy9leGVjbm9kZXMuaCIKKyNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgorI2luY2x1 ZGUgInRjb3AvdXRpbGl0eS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVk ZSAidGNvcC9kZGxfZGVwYXJzZS5oIgorCitQR19NT0RVTEVfTUFHSUM7CisKK1BHX0ZVTkNUSU9O X0lORk9fVjEoZGVwYXJzZV9kcm9wX2RkbCk7CisKKy8qCisgKiBHaXZlbiBvYmplY3RfaWRlbnRp dHkgYW5kIG9iamVjdF90eXBlIG9mIGRyb3BwZWQgb2JqZWN0LCByZXR1cm4gYSBKU09OIHJlcHJl c2VudGF0aW9uIG9mIERST1AgY29tbWFuZC4KKyAqLworRGF0dW0KK2RlcGFyc2VfZHJvcF9kZGwo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwl0ZXh0CSAgICpvYmppZGVudGl0eSA9IFBHX0dFVEFSR19U RVhUX1AoMCk7CisJY29uc3QgY2hhcgkgICAqb2JqaWRlbnRpdHlfc3RyID0gdGV4dF90b19jc3Ry aW5nKG9iamlkZW50aXR5KTsKKwl0ZXh0CSAgICpvYmplY3R0eXBlID0gUEdfR0VUQVJHX1RFWFRf UCgxKTsKKwljb25zdCBjaGFyCSAgICpvYmplY3R0eXBlX3N0ciA9IHRleHRfdG9fY3N0cmluZyhv YmplY3R0eXBlKTsKKworCWNoYXIJCSAgICpjb21tYW5kOworCisJLy8gY29uc3RyYWludCBpcyBw YXJ0IG9mIGFsdGVyIHRhYmxlIGNvbW1hbmQsIG5vIG5lZWQgdG8gZHJvcCBpbiBEUk9QIGNvbW1h bmQKKwlpZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAidGFibGUgY29uc3RyYWludCIpID09IDAp IHsKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwl9IGVsc2UgaWYgKHN0cmNtcChvYmplY3R0eXBlX3N0 ciwgInRvYXN0IHRhYmxlIikgPT0gMCkgeworCQlvYmplY3R0eXBlX3N0ciA9ICJ0YWJsZSI7CisJ fSAgZWxzZSBpZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAiZGVmYXVsdCB2YWx1ZSIpID09IDAp IHsKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwl9IGVsc2UgaWYgKHN0cmNtcChvYmplY3R0eXBlX3N0 ciwgIm9wZXJhdG9yIG9mIGFjY2VzcyBtZXRob2QiKSA9PSAwKSB7CisJCVBHX1JFVFVSTl9OVUxM KCk7CisJfSBlbHNlIGlmIChzdHJjbXAob2JqZWN0dHlwZV9zdHIsICJmdW5jdGlvbiBvZiBhY2Nl c3MgbWV0aG9kIikgPT0gMCkgeworCQlQR19SRVRVUk5fTlVMTCgpOworCX0gZWxzZSBpZiAoc3Ry Y21wKG9iamVjdHR5cGVfc3RyLCAidGFibGUgY29sdW1uIikgPT0gMCkgeworCQlQR19SRVRVUk5f TlVMTCgpOworCX0KKworCWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3BfY29tbWFuZChvYmppZGVudGl0 eV9zdHIsIG9iamVjdHR5cGVfc3RyLCBEUk9QX0NBU0NBREUpOworCisJaWYgKGNvbW1hbmQpCisJ CVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KGNvbW1hbmQpKTsKKworCVBHX1JFVFVS Tl9OVUxMKCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzLmNvbnRyb2wgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5hMWY5MzRlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmNvbnRy b2wKQEAgLTAsMCArMSw0IEBACitjb21tZW50ID0gJ1Rlc3QgY29kZSBmb3IgRERMIGRlcGFyc2Ug cmVncmVzcyBmZWF0dXJlJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFt ZSA9ICckbGliZGlyL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcycKK3JlbG9jYXRhYmxlID0gdHJ1 ZQotLSAKMS44LjMuMQoK --000000000000846be105f4416101 Content-Type: application/octet-stream; name="v67-0002-Functions-to-deparse-Table-DDL-commands.patch" Content-Disposition: attachment; filename="v67-0002-Functions-to-deparse-Table-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ldwxbac61 RnJvbSA2YThiYjRhMmQwZWMzODA3YzE1ZjIyYjEyNTE3ZjdmMGU0ODRiZmZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgOSBGZWIgMjAyMyAwMzoxNzoyOSAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djY3IDIvN10gRnVuY3Rpb25zIHRvIGRlcGFyc2UgVGFibGUgRERMIGNvbW1hbmRzLgoKVGhpcyBw YXRjaCBjb25zdHJ1Y3RzIEpTT04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5kcywgd2hp Y2ggY2FuCmxhdGVyIGJlIHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmluZ3MgYnkgd2VsbC1k ZWZpbmVkIHNwcmludGYtbGlrZQpleHBhbnNpb24uIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50 ZW5kZWQgdG8gYWxsb3cgZm9yIG1hY2hpbmUtZWRpdGluZyBvZgp0aGUgY29tbWFuZHMsIGJ5IHJl cGxhY2luZyBjZXJ0YWluIG5vZGVzIHdpdGhpbiB0aGUgb2JqZWN0cy4KCk11Y2ggb2YgdGhlIGlu Zm9ybWF0aW9uIGluIHRoZSBvdXRwdXQgYmxvYiBhY3R1YWxseSBjb21lcyBmcm9tIHN5c3RlbQpj YXRhbG9ncywgbm90IGZyb20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQgaXMgaW1wb3Nz aWJsZSB0byByZWxpYWJseQpjb25zdHJ1Y3QgYSBmdWxseS1zcGVjaWZpZWQgY29tbWFuZCAoaS5l LiBvbmUgbm90IGRlcGVuZGVudCBvbiBzZWFyY2hfcGF0aApldGMpIGxvb2tpbmcgb25seSBhdCB0 aGUgcGFyc2Ugbm9kZS4KClRoaXMgcHJvdmlkZXMgYSBiYXNlIGZvciBsb2dpY2FsIHJlcGxpY2F0 aW9uIG9mIERETCBzdGF0ZW1lbnRzLiBDdXJyZW50bHksCnRoZSBwYXRjaCBoYXMgc3VwcG9ydCBm b3I6CgpDUkVBVEUvQUxURVIvRFJPUCBUQUJMRSAtLSBOb3RlICMxLCBOb3RlICMyCgooTm90ZSAj MSkgU29tZSByZWNlbnRseSBpbnRyb2R1Y2VkIERETHMoZS5nLiBERExzIHJlbGF0ZWQgdG8KUEFS VElUSU9ORUQgVEFCTEUpIGFyZSB1bnN1cHBvcnRlZC4gV2UgY2FuIGV4dGVuZCBpdCBhcyB3ZSBu ZWVkIG1vcmUKZnVuY3Rpb25hbGl0eSBmb3IgRERMIHJlcGxpY2F0aW9uLgoKKE5vdGUgIzIpIEZv ciBBVFRBQ0gvREVUQUNIIFBBUlRJVElPTiwgd2UgaGF2ZW4ndCBhZGRlZCBleHRyYSBsb2dpYyBv bgp0aGUgc3Vic2NyaWJlciB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHRhYmxlIG9uIHRo ZSBwdWJsaXNoZXIgaXMgYSBQQVJUSVRJT05FRApUQUJMRSB3aGlsZSB0aGUgdGFyZ2V0IHRhYmxl IG9uIHRoZSBzdWJjcmliZXIgc2lkZSBpcyBhIE5PUk1BTCB0YWJsZS4gV2Ugd2lsbApyZXNlYXJj aCB0aGlzIG1vcmUgYW5kIGltcHJvdmUgaXQgbGF0ZXIuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvTWFrZWZpbGUgICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVw YXJzZS5jICAgfCAzNjE2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9i YWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgICAgICB8ICA3NzEgKysrKysrKysKIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyB8ICAgIDMgKwogc3JjL2JhY2tlbmQvY29tbWFu ZHMvbWVzb24uYnVpbGQgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0ICAgICAgfCAgICA2ICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICB8 ICAgIDEgKwogc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oICAgICAgIHwgICAyMiArCiBz cmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oICAgfCAgIDEyICstCiBzcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgfCAgICA0ICsKIDEwIGZpbGVzIGNoYW5nZWQsIDQ0 MzggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNzU1IHNyYy9i YWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFj a2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUv dGNvcC9kZGxfZGVwYXJzZS5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFr ZWZpbGUgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQppbmRleCA0OGY3MzQ4Li4xNzFk ZmIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQorKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQpAQCAtMjksNiArMjksOCBAQCBPQkpTID0gXAogCWNv cHl0by5vIFwKIAljcmVhdGVhcy5vIFwKIAlkYmNvbW1hbmRzLm8gXAorCWRkbF9kZXBhcnNlLm8g XAorCWRkbF9qc29uLm8gXAogCWRlZmluZS5vIFwKIAlkaXNjYXJkLm8gXAogCWRyb3BjbWRzLm8g XApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg MDAwMDAwMC4uMmQzYzliNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9kZXBhcnNlLmMKQEAgLTAsMCArMSwzNjE2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBkZGxfZGVwYXJzZS5jCisgKgkgIEZ1bmN0aW9ucyB0byBjb252ZXJ0IHV0aWxpdHkgY29t bWFuZHMgdG8gbWFjaGluZS1wYXJzZWFibGUKKyAqCSAgcmVwcmVzZW50YXRpb24KKyAqCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0 aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogTk9URVMKKyAqCisgKiBUaGlzIGlz IGludGVuZGVkIHRvIHByb3ZpZGUgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRz LCB3aGljaCBjYW4KKyAqIGxhdGVyIGJlIHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmluZ3Mg Ynkgd2VsbC1kZWZpbmVkIHNwcmludGYtbGlrZQorICogZXhwYW5zaW9uLiAgVGhlc2UgSlNPTiBv YmplY3RzIGFyZSBpbnRlbmRlZCB0byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCisgKiB0 aGUgY29tbWFuZHMsIGJ5IHJlcGxhY2luZyBjZXJ0YWluIG5vZGVzIHdpdGhpbiB0aGUgb2JqZWN0 cy4KKyAqCisgKiBNdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgb3V0cHV0IGJsb2IgYWN0 dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KKyAqIGNhdGFsb2dzLCBub3QgZnJvbSB0aGUgY29tbWFu ZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRvIHJlbGlhYmx5CisgKiBjb25zdHJ1 Y3QgYSBmdWxseS1zcGVjaWZpZWQgY29tbWFuZCAoaS5lLiBvbmUgbm90IGRlcGVuZGVudCBvbiBz ZWFyY2hfcGF0aAorICogZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5vZGUuCisgKgor ICogRGVwYXJzZSBvYmplY3QgdHJlZSBpcyBjcmVhdGVkIGJ5IHVzaW5nOgorICogCWEpIG5ld19v Ymp0cmVlKCJrbm93IGNvbnRlbnRzIikgd2hlcmUgdGhlIGNvbXBsZXRlIHRyZWUgY29udGVudCBp cyBrbm93biBvcgorICogICAgIHRoZSBpbml0aWFsIHRyZWUgY29udGVudCBpcyBrbm93bi4KKyAq IAliKSBuZXdfb2JqdHJlZSgiIikgZm9yIHRoZSBzeW50YXggd2hlcmUgdGhlIG9iamVjdCB0cmVl IHdpbGwgYmUgZGVyaXZlZAorICogICAgIGJhc2VkIG9uIHNvbWUgY29uZGl0aW9uYWwgY2hlY2tz LgorICogCWMpIG5ld19vYmp0cmVlX1ZBIHdoZXJlIHRoZSBjb21wbGV0ZSB0cmVlIGNhbiBiZSBk ZXJpdmVkIHVzaW5nIHNvbWUgZml4ZWQKKyAqICAgICBjb250ZW50IGFuZC9vciBzb21lIHZhcmlh YmxlIGFyZ3VtZW50cy4KKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9j b21tYW5kcy9kZGxfZGVwYXJzZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNs dWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAi YWNjZXNzL3JlbGF0aW9uLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19hZ2dyZWdhdGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2F1dGhpZC5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY2FzdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29s bGF0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19jb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19kZXBlbmQuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX2V4dGVuc2lvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf Zm9yZWlnbl9kYXRhX3dyYXBwZXIuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVpZ25fc2Vy dmVyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhlcml0cy5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfbGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2xhcmdlb2JqZWN0LmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29w Y2xhc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19vcGZhbWlseS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcG9saWN5LmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19yYW5nZS5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfcmV3cml0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc2Vx dWVuY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19leHQuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX3RyYW5zZm9ybS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfY29uZmln LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c19kaWN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z190c19wYXJzZXIuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX3RlbXBsYXRlLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ191c2VyX21hcHBp bmcuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9z ZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKKyNpbmNsdWRlICJm b3JlaWduL2ZvcmVpZ24uaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibWIvcGdf d2NoYXIuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9w YXJzZW5vZGVzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1ZGUg InBhcnNlci9wYXJzZV90eXBlLmgiCisjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5o IgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxpdHku aCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRz LmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKyNp bmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNs dWRlICJ1dGlscy9ydWxldXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorCisv KiBFc3RpbWF0ZWQgbGVuZ3RoIG9mIHRoZSBnZW5lcmF0ZWQganNvbmIgc3RyaW5nICovCisjZGVm aW5lIEpTT05CX0VTVElNQVRFRF9MRU4gMTI4CisKKy8qCisgKiBCZWZvcmUgdGhleSBhcmUgdHVy bmVkIGludG8gSlNPTkIgcmVwcmVzZW50YXRpb24sIGVhY2ggY29tbWFuZCBpcworICogcmVwcmVz ZW50ZWQgYXMgYW4gb2JqZWN0IHRyZWUsIHVzaW5nIHRoZSBzdHJ1Y3RzIGJlbG93LgorICovCit0 eXBlZGVmIGVudW0KK3sKKwlPYmpUeXBlTnVsbCwKKwlPYmpUeXBlQm9vbCwKKwlPYmpUeXBlU3Ry aW5nLAorCU9ialR5cGVBcnJheSwKKwlPYmpUeXBlSW50ZWdlciwKKwlPYmpUeXBlRmxvYXQsCisJ T2JqVHlwZU9iamVjdAorfSBPYmpUeXBlOworCisvKgorICogUmVwcmVzZW50IHRoZSBjb21tYW5k IGFzIGFuIG9iamVjdCB0cmVlLgorICovCit0eXBlZGVmIHN0cnVjdCBPYmpUcmVlCit7CisJc2xp c3RfaGVhZAlwYXJhbXM7CQkJLyogT2JqZWN0IHRyZWUgcGFyYW1ldGVycyAqLworCWludAkJCW51 bVBhcmFtczsJCS8qIE51bWJlciBvZiBwYXJhbWV0ZXJzIGluIHRoZSBvYmplY3QgdHJlZSAqLwor CVN0cmluZ0luZm8JZm10aW5mbzsJCS8qIEZvcm1hdCBzdHJpbmcgb2YgdGhlIE9ialRyZWUgKi8K Kwlib29sCQlwcmVzZW50OwkJLyogSW5kaWNhdGVzIGlmIGJvb2xlYW4gdmFsdWUgc2hvdWxkIGJl IHN0b3JlZCAqLworfSBPYmpUcmVlOworCisvKgorICogQW4gZWxlbWVudCBvZiBhbiBvYmplY3Qg dHJlZSAoT2JqVHJlZSkuCisgKi8KK3R5cGVkZWYgc3RydWN0IE9iakVsZW0KK3sKKwljaGFyCSAg ICpuYW1lOwkJCS8qIE5hbWUgb2Ygb2JqZWN0IGVsZW1lbnQgKi8KKwlPYmpUeXBlCQlvYmp0eXBl OwkJLyogT2JqZWN0IHR5cGUgKi8KKworCXVuaW9uCisJeworCQlib29sCQlib29sZWFuOworCQlj aGFyCSAgICpzdHJpbmc7CisJCWludDY0CQlpbnRlZ2VyOworCQlmbG9hdDgJCWZsdDsKKwkJT2Jq VHJlZSAgICAqb2JqZWN0OworCQlMaXN0CSAgICphcnJheTsKKwl9CQkJdmFsdWU7CQkJLyogU3Rv cmUgdGhlIG9iamVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgb2JqZWN0CisJCQkJCQkJCSAqIHR5cGUg Ki8KKwlzbGlzdF9ub2RlCW5vZGU7CQkJLyogVXNlZCBpbiBjb252ZXJ0aW5nIGJhY2sgdG8gT2Jq RWxlbQorCQkJCQkJCQkgKiBzdHJ1Y3R1cmUgKi8KK30gT2JqRWxlbTsKKworLyoKKyAqIFJlZHVj ZSBzb21lIHVubmVjZXNzYXJ5IHN0cmluZ3MgZnJvbSB0aGUgb3V0cHV0IGpzb24gd2hlbiB2ZXJi b3NlCisgKiBhbmQgInByZXNlbnQiIG1lbWJlciBpcyBmYWxzZS4gVGhpcyBtZWFucyB0aGVzZSBz dHJpbmdzIHdvbid0IGJlIG1lcmdlZCBpbnRvCisgKiB0aGUgbGFzdCBEREwgY29tbWFuZC4KKyAq LworYm9vbAkJdmVyYm9zZSA9IHRydWU7CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9hcnJheV9vYmpl Y3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgTGlzdCAqYXJyYXkpOworc3RhdGljIHZv aWQgYXBwZW5kX2Jvb2xfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGJvb2wg dmFsdWUpOworc3RhdGljIHZvaWQgYXBwZW5kX251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNo YXIgKnN1Yl9mbXQpOworc3RhdGljIHZvaWQgYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAq dHJlZSwgY2hhciAqc3ViX2ZtdCwgT2JqVHJlZSAqdmFsdWUpOworc3RhdGljIGNoYXIgKmFwcGVu ZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KTsK K3N0YXRpYyB2b2lkIGFwcGVuZF9wcmVtYWRlX29iamVjdChPYmpUcmVlICp0cmVlLCBPYmpFbGVt ICplbGVtKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdHJpbmdfb2JqZWN0KE9ialRyZWUgKnRyZWUs IGNoYXIgKnN1Yl9mbXQsIGNoYXIgKm5hbWUsCisJCQkJCQkJCSBjaGFyICp2YWx1ZSk7CitzdGF0 aWMgdm9pZCBmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2Qs CisJCQkJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwbmFtZSwgY2hhciAqKnR5cGVtb2RzdHIs CisJCQkJCQkJCSBib29sICp0eXBhcnJheSk7CitzdGF0aWMgT2JqRWxlbSAqbmV3X29iamVjdChP YmpUeXBlIHR5cGUsIGNoYXIgKm5hbWUpOworc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChPaWQgY2xhc3NJZCwgT2lkIG9iamVjdElkKTsKK3N0YXRpYyBPYmpFbGVt ICpuZXdfb2JqZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgT2JqVHJlZSAqbmV3 X29ianRyZWVfVkEoY2hhciAqZm10LCBpbnQgbnVtb2JqcywuLi4pOworc3RhdGljIEpzb25iVmFs dWUgKm9ianRyZWVfdG9fanNvbmJfcmVjKE9ialRyZWUgKnRyZWUsIEpzb25iUGFyc2VTdGF0ZSAq c3RhdGUpOworc3RhdGljIHZvaWQgcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJl bGlkLAorCQkJCQkJCQkJIGNoYXIgKippbmRleF9hbSwKKwkJCQkJCQkJCSBjaGFyICoqZGVmaW5p dGlvbiwKKwkJCQkJCQkJCSBjaGFyICoqcmVsb3B0aW9ucywKKwkJCQkJCQkJCSBjaGFyICoqdGFi bGVzcGFjZSwKKwkJCQkJCQkJCSBjaGFyICoqd2hlcmVDbGF1c2UpOworc3RhdGljIGNoYXIgKlJl bGF0aW9uR2V0Q29sdW1uRGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8sCisJ CQkJCQkJCQkgIExpc3QgKmRwY29udGV4dCwgTGlzdCAqKmV4cHJzKTsKKworc3RhdGljIE9ialRy ZWUgKmRlcGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQs IGJvb2wgY29tcG9zaXRlLAorCQkJCQkJCQkgIENvbHVtbkRlZiAqY29sZGVmLCBib29sIGlzX2Fs dGVyLCBMaXN0ICoqZXhwcnMpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uSWRlbnRp dHkoT2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5LCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRp YyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21k KTsKKworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmRWxlbShEZWZFbGVtICplbGVtLCBib29s IGlzX3Jlc2V0KTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKE9uQ29t bWl0QWN0aW9uIG9wdGlvbik7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9SZWxTZXRPcHRpb25z KEFsdGVyVGFibGVDbWQgKnN1YmNtZCk7CisKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJz ZV9TZXFfQ2FjaGUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsK K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQ3ljbGUoRm9ybV9wZ19zZXF1ZW5j ZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVw YXJzZV9TZXFfSW5jcmVtZW50QnkoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVy X3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfTWludmFsdWUoRm9y bV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqZGVwYXJzZV9TZXFfTWF4dmFsdWUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBi b29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfUmVz dGFydChGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YSk7CitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKmRlcGFyc2VfU2VxX1N0YXJ0d2l0aChGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wg YWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9BcyhEZWZF bGVtICplbGVtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1N0b3JhZ2Uo Rm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5 cGVfUmVjZWl2ZShGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0g KmRlcGFyc2VfVHlwZV9TZW5kKEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqZGVwYXJzZV9UeXBlX1R5cG1vZF9JbihGb3JtX3BnX3R5cGUgdHlwRm9ybSk7Citz dGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KEZvcm1fcGdfdHlw ZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX0FuYWx5emUo Rm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5 cGVfU3Vic2NyaXB0KEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKKworc3RhdGljIExpc3QgKmRlcGFy c2VfSW5oUmVsYXRpb25zKE9pZCBvYmplY3RJZCk7CitzdGF0aWMgTGlzdCAqZGVwYXJzZV9UYWJs ZUVsZW1lbnRzKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBMaXN0ICpk cGNvbnRleHQsCisJCQkJCQkJCSAgIGJvb2wgdHlwZWQsIGJvb2wgY29tcG9zaXRlKTsKKworLyoK KyAqIEFwcGVuZCBwcmVzZW50IGFzIGZhbHNlIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQK K2FwcGVuZF9ub3RfcHJlc2VudChPYmpUcmVlICp0cmVlKQoreworCWFwcGVuZF9ib29sX29iamVj dCh0cmVlLCAicHJlc2VudCIsIGZhbHNlKTsKK30KKworLyoKKyAqIEFwcGVuZCBhbiBhcnJheSBw YXJhbWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2FycmF5X29iamVj dChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBMaXN0ICphcnJheSkKK3sKKwlPYmpFbGVt ICAgICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsK KworCWlmIChsaXN0X2xlbmd0aChhcnJheSkgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKCF2ZXJi b3NlKQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJLyogUmVtb3ZlIGVsZW1lbnRzIHdoZXJl IHByZXNlbnQgZmxhZyBpcyBmYWxzZSAqLworCQlmb3JlYWNoKGxjLCBhcnJheSkKKwkJeworCQkJ T2JqRWxlbSAgICAqZWxlbSA9IChPYmpFbGVtICopIGxmaXJzdChsYyk7CisKKwkJCUFzc2VydChl bGVtLT5vYmp0eXBlID09IE9ialR5cGVPYmplY3QgfHwKKwkJCQkgICBlbGVtLT5vYmp0eXBlID09 IE9ialR5cGVTdHJpbmcpOworCisJCQlpZiAoIWVsZW0tPnZhbHVlLm9iamVjdC0+cHJlc2VudCAm JgorCQkJCWVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCkKKwkJCQlhcnJheSA9IGZvcmVh Y2hfZGVsZXRlX2N1cnJlbnQoYXJyYXksIGxjKTsKKwkJfQorCisJfQorCisJLyogQ2hlY2sgZm9y IGVtcHR5IGxpc3QgYWZ0ZXIgcmVtb3ZpbmcgZWxlbWVudHMgKi8KKwlpZiAobGlzdF9sZW5ndGgo YXJyYXkpID09IDApCisJCXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90 b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9i alR5cGVBcnJheSwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5hcnJheSA9IGFycmF5Owor CWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBBcHBlbmQg YSBib29sZWFuIHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRf Ym9vbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgYm9vbCB2YWx1ZSkKK3sK KwlPYmpFbGVtICAgICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZSA9IHN1Yl9mbXQ7CisJ Ym9vbAkJaXNfcHJlc2VudF9mbGFnID0gZmFsc2U7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwkv KgorCSAqIENoZWNrIGlmIHRoZSBmb3JtYXQgc3RyaW5nIGlzICdwcmVzZW50JyBhbmQgaWYgeWVz LCBzdG9yZSB0aGUgYm9vbGVhbgorCSAqIHZhbHVlCisJICovCisJaWYgKHN0cmNtcChzdWJfZm10 LCAicHJlc2VudCIpID09IDApCisJeworCQlpc19wcmVzZW50X2ZsYWcgPSB0cnVlOworCQl0cmVl LT5wcmVzZW50ID0gdmFsdWU7CisJfQorCisJaWYgKCF2ZXJib3NlICYmICF0cmVlLT5wcmVzZW50 KQorCQlyZXR1cm47CisKKwlpZiAoIWlzX3ByZXNlbnRfZmxhZykKKwkJb2JqZWN0X25hbWUgPSBh cHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9 IG5ld19vYmplY3QoT2JqVHlwZUJvb2wsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuYm9v bGVhbiA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisK Ky8qCisgKiBBcHBlbmQgdGhlIGlucHV0IGZvcm1hdCBzdHJpbmcgdG8gdGhlIE9ialRyZWUuCisg Ki8KK3N0YXRpYyB2b2lkCithcHBlbmRfZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFy ICpzdWJfZm10KQoreworCWludAkJCWxlbjsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAodHJlZS0+ Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmbXQgPSB0cmVlLT5mbXRpbmZvLT5kYXRh OworCWxlbiA9IHRyZWUtPmZtdGluZm8tPmxlbjsKKworCS8qIEFkZCBhIHNlcGFyYXRvciBpZiBu ZWNlc3NhcnkgKi8KKwlpZiAobGVuID4gMCAmJiBmbXRbbGVuIC0gMV0gIT0gJyAnKQorCQlhcHBl bmRTdHJpbmdJbmZvU3BhY2VzKHRyZWUtPmZtdGluZm8sIDEpOworCisJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyh0cmVlLT5mbXRpbmZvLCBzdWJfZm10KTsKK30KKworLyoKKyAqIEFwcGVuZCBhIE5V TEwgb2JqZWN0IHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9udWxsX29iamVj dChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KQoreworCWNoYXIJICAgKm9iamVjdF9uYW1l OworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKCF2ZXJib3NlKQorCQlyZXR1cm47CisKKwlv YmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10 KTsKKworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBuZXdfb2JqZWN0KE9ialR5cGVOdWxs LCBvYmplY3RfbmFtZSkpOworfQorCisvKgorICogQXBwZW5kIGFuIG9iamVjdCBwYXJhbWV0ZXIg dG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJl ZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgT2JqVHJlZSAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAq cGFyYW07CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlp ZiAoIXZlcmJvc2UgJiYgIXZhbHVlLT5wcmVzZW50KQorCQlyZXR1cm47CisKKwlvYmplY3RfbmFt ZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBh cmFtID0gbmV3X29iamVjdChPYmpUeXBlT2JqZWN0LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZh bHVlLm9iamVjdCA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7 Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG9iamVjdCBuYW1lIHdoaWNoIGlzIGV4dHJhY3RlZCBm cm9tIHRoZSBpbnB1dCAiKiV7bmFtZVs6Ll19KiIKKyAqIHN0eWxlIHN0cmluZy4gQW5kIGFwcGVu ZCB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJlZS4KKyAqLworc3RhdGljIGNo YXIgKgorYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIg KnN1Yl9mbXQpCit7CisJU3RyaW5nSW5mb0RhdGEgb2JqZWN0X25hbWU7CisJY29uc3QgY2hhciAq ZW5kX3B0ciwgKnN0YXJ0X3B0cjsKKwlpbnQgICAgICAgICBsZW5ndGg7CisJY2hhciAgICAgICAg KnRtcF9zdHI7CisKKwlpZiAoc3ViX2ZtdCA9PSBOVUxMIHx8IHRyZWUtPmZtdGluZm8gPT0gTlVM TCkKKwkJcmV0dXJuIHN1Yl9mbXQ7CisKKwlpbml0U3RyaW5nSW5mbygmb2JqZWN0X25hbWUpOwor CisJc3RhcnRfcHRyID0gc3RyY2hyKHN1Yl9mbXQsICd7Jyk7CisJZW5kX3B0ciA9IHN0cmNocihz dWJfZm10LCAnOicpOworCWlmIChlbmRfcHRyID09IE5VTEwpCisJCWVuZF9wdHIgPSBzdHJjaHIo c3ViX2ZtdCwgJ30nKTsKKworCWlmIChzdGFydF9wdHIgIT0gTlVMTCAmJiBlbmRfcHRyICE9IE5V TEwpCisJeworCQlsZW5ndGggPSBlbmRfcHRyIC0gc3RhcnRfcHRyIC0gMTsKKwkJdG1wX3N0ciA9 IChjaGFyICopIHBhbGxvYyhsZW5ndGggKyAxKTsKKwkJc3RybmNweSh0bXBfc3RyLCBzdGFydF9w dHIgKyAxLCBsZW5ndGgpOworCQl0bXBfc3RyW2xlbmd0aF0gPSAnXDAnOworCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZvYmplY3RfbmFtZSwgdG1wX3N0cik7CisJCXBmcmVlKHRtcF9zdHIpOwor CX0KKworCWlmIChvYmplY3RfbmFtZS5sZW4gPT0gMCkKKwkJZWxvZyhFUlJPUiwgIm9iamVjdCBu YW1lIG5vdCBmb3VuZCIpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7 CisKKwlyZXR1cm4gb2JqZWN0X25hbWUuZGF0YTsKKworfQorCisvKgorICogQXBwZW5kIGEgcHJl YWxsb2NhdGVkIHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAor YXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9iakVsZW0gKmVsZW0pCit7CisJ c2xpc3RfcHVzaF9oZWFkKCZ0cmVlLT5wYXJhbXMsICZlbGVtLT5ub2RlKTsKKwl0cmVlLT5udW1Q YXJhbXMrKzsKK30KKworLyoKKyAqIEFwcGVuZCBhIHN0cmluZyBwYXJhbWV0ZXIgdG8gYSB0cmVl LgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwg Y2hhciAqc3ViX2ZtdCwgY2hhciAqIG9iamVjdF9uYW1lLAorCQkJCQkgY2hhciAqdmFsdWUpCit7 CisJT2JqRWxlbSAgICAqcGFyYW07CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJv c2UgJiYgKHZhbHVlID09IE5VTEwgfHwgdmFsdWVbMF0gPT0gJ1wwJykpCisJCXJldHVybjsKKwor CWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCXBhcmFtID0gbmV3X29iamVj dChPYmpUeXBlU3RyaW5nLCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLnN0cmluZyA9IHZh bHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBT aW1pbGFyIHRvIGZvcm1hdF90eXBlX2V4dGVuZGVkLCBleGNlcHQgd2UgcmV0dXJuIGVhY2ggYml0 IG9mIGluZm9ybWF0aW9uCisgKiBzZXBhcmF0ZWx5OgorICoKKyAqIC0gbnNwaWQgaXMgdGhlIHNj aGVtYSBPSUQuICBGb3IgY2VydGFpbiBTUUwtc3RhbmRhcmQgdHlwZXMgd2hpY2ggaGF2ZSB3ZWly ZAorICogICB0eXBtb2QgcnVsZXMsIHdlIHJldHVybiBJbnZhbGlkT2lkOyB0aGUgY2FsbGVyIGlz IGV4cGVjdGVkIHRvIG5vdCBzY2hlbWEtCisgKiAgIHF1YWxpZnkgdGhlIG5hbWUgbm9yIGFkZCBx dW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGlzIGNhc2UuCisgKgorICogLSB0eXBuYW1lIGlz IHNldCB0byB0aGUgdHlwZSBuYW1lLCB3aXRob3V0IHF1b3RlcworICoKKyAqIC0gdHlwZW1vZHN0 ciBpcyBzZXQgdG8gdGhlIHR5cGVtb2QsIGlmIGFueSwgYXMgYSBzdHJpbmcgd2l0aCBwYXJlbnRo ZXNlcworICoKKyAqIC0gdHlwYXJyYXkgaW5kaWNhdGVzIHdoZXRoZXIgW11zIG11c3QgYmUgYWRk ZWQKKyAqCisgKiBXZSBkb24ndCB0cnkgdG8gZGVjb2RlIHR5cGUgbmFtZXMgdG8gdGhlaXIgc3Rh bmRhcmQtbWFuZGF0ZWQgbmFtZXMsIGV4Y2VwdAorICogaW4gdGhlIGNhc2VzIG9mIHR5cGVzIHdp dGggdW51c3VhbCB0eXBtb2QgcnVsZXMuCisgKi8KK3N0YXRpYyB2b2lkCitmb3JtYXRfdHlwZV9k ZXRhaWxlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCisJCQkJCSBPaWQgKm5zcGlkLCBj aGFyICoqdHlwZW5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkgYm9vbCAqdHlwZWFycmF5 KQoreworCUhlYXBUdXBsZQl0dXBsZTsKKwlGb3JtX3BnX3R5cGUgdHlwZWZvcm07CisJT2lkCQkJ YXJyYXlfYmFzZV90eXBlOworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2Jq ZWN0SWRHZXREYXR1bSh0eXBlX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1 IiwgdHlwZV9vaWQpOworCisJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVw bGUpOworCisJLyoKKwkgKiBDaGVjayBpZiBpdCdzIGEgcmVndWxhciAodmFyaWFibGUgbGVuZ3Ro KSBhcnJheSB0eXBlLiAgQXMgYWJvdmUsCisJICogZml4ZWQtbGVuZ3RoIGFycmF5IHR5cGVzIHN1 Y2ggYXMgIm5hbWUiIHNob3VsZG4ndCBnZXQgZGVjb25zdHJ1Y3RlZC4KKwkgKi8KKwlhcnJheV9i YXNlX3R5cGUgPSB0eXBlZm9ybS0+dHlwZWxlbTsKKworCSp0eXBlYXJyYXkgPSAoSXNUcnVlQXJy YXlUeXBlKHR5cGVmb3JtKSAmJiB0eXBlZm9ybS0+dHlwc3RvcmFnZSAhPSBUWVBTVE9SQUdFX1BM QUlOKTsKKworCWlmICgqdHlwZWFycmF5KQorCXsKKwkJLyogU3dpdGNoIG91ciBhdHRlbnRpb24g dG8gdGhlIGFycmF5IGVsZW1lbnQgdHlwZSAqLworCQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwor CQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKGFycmF5 X2Jhc2VfdHlwZSkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCB0eXBlX29p ZCk7CisKKwkJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCQl0 eXBlX29pZCA9IGFycmF5X2Jhc2VfdHlwZTsKKwl9CisKKwkvKgorCSAqIFNwZWNpYWwtY2FzZSBj cm9jayBmb3IgdHlwZXMgd2l0aCBzdHJhbmdlIHR5cG1vZCBydWxlcyB3aGVyZSB3ZSBwdXQKKwkg KiB0eXBlbW9kIGF0IHRoZSBtaWRkbGUgb2YgbmFtZSAoZS5nLiBUSU1FKDYpIHdpdGggdGltZSB6 b25lKS4gV2UgY2Fubm90CisJICogc2NoZW1hLXF1YWxpZnkgbm9yIGFkZCBxdW90ZXMgdG8gdGhl IHR5cGUgbmFtZSBpbiB0aGVzZSBjYXNlcy4KKwkgKi8KKwkqbnNwaWQgPSBJbnZhbGlkT2lkOwor CisJc3dpdGNoICh0eXBlX29pZCkKKwl7CisJCWNhc2UgSU5URVJWQUxPSUQ6CisJCQkqdHlwZW5h bWUgPSBwc3RyZHVwKCJJTlRFUlZBTCIpOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVNUQU1QVFpP SUQ6CisJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJKnR5cGVuYW1lID0gcHN0cmR1cCgiVElNRVNU QU1QIFdJVEggVElNRSBaT05FIik7CisJCQllbHNlCisJCQkJLyogb3RoZXJ3aXNlLCBXSVRIIFRa IGlzIGFkZGVkIGJ5IHR5cG1vZC4gKi8KKwkJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJUSU1FU1RB TVAiKTsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJCSp0eXBlbmFtZSA9IHBz dHJkdXAoIlRJTUVTVEFNUCIpOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVRaT0lEOgorCQkJaWYg KHR5cGVtb2QgPCAwKQorCQkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUUgV0lUSCBUSU1FIFpP TkUiKTsKKwkJCWVsc2UKKwkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFogaXMgYWRkZWQgYnkgdHlw bW9kLiAqLworCQkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCWJyZWFrOworCQlj YXNlIFRJTUVPSUQ6CisJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQlicmVhazsK KwkJZGVmYXVsdDoKKworCQkJLyoKKwkJCSAqIE5vIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBpcyBy ZXF1aXJlZCBmb3Igb3RoZXIgdHlwZXMsIHNvIGdldAorCQkJICogdGhlIHR5cGUgbmFtZSBhbmQg c2NoZW1hIGRpcmVjdGx5IGZyb20gdGhlIGNhdGFsb2cuCisJCQkgKi8KKwkJCSpuc3BpZCA9IHR5 cGVmb3JtLT50eXBuYW1lc3BhY2U7CisJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKE5hbWVTdHIodHlw ZWZvcm0tPnR5cG5hbWUpKTsKKwl9CisKKwlpZiAodHlwZW1vZCA+PSAwKQorCQkqdHlwZW1vZHN0 ciA9IHByaW50VHlwbW9kKCIiLCB0eXBlbW9kLCB0eXBlZm9ybS0+dHlwbW9kb3V0KTsKKwllbHNl CisJCSp0eXBlbW9kc3RyID0gcHN0cmR1cCgiIik7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUp OworfQorCisvKgorICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdp dmVuIFJFTFBFUlNJU1RFTkNFIHZhbHVlLgorICovCitzdGF0aWMgY2hhciAqCitnZXRfcGVyc2lz dGVuY2Vfc3RyKGNoYXIgcGVyc2lzdGVuY2UpCit7CisJc3dpdGNoIChwZXJzaXN0ZW5jZSkKKwl7 CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfVEVNUDoKKwkJCXJldHVybiAiVEVNUE9SQVJZIjsKKwkJ Y2FzZSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRDoKKwkJCXJldHVybiAiVU5MT0dHRUQiOworCQlj YXNlIFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVDoKKwkJCXJldHVybiAiIjsKKwkJZGVmYXVsdDoK KwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHBlcnNpc3RlbmNlIG1hcmtpbmcgJWMiLCBwZXJz aXN0ZW5jZSk7CisJCQlyZXR1cm4gIiI7CQkJLyogbWFrZSBjb21waWxlciBoYXBweSAqLworCX0K K30KKworLyoKKyAqIFJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZl biBzdG9yYWdldHlwZSB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSBjaGFyICoKK2dldF90eXBl X3N0b3JhZ2UoY2hhciBzdG9yYWdldHlwZSkKK3sKKwlzd2l0Y2ggKHN0b3JhZ2V0eXBlKQorCXsK KwkJY2FzZSAncCc6CisJCQlyZXR1cm4gInBsYWluIjsKKwkJY2FzZSAnZSc6CisJCQlyZXR1cm4g ImV4dGVybmFsIjsKKwkJY2FzZSAneCc6CisJCQlyZXR1cm4gImV4dGVuZGVkIjsKKwkJY2FzZSAn bSc6CisJCQlyZXR1cm4gIm1haW4iOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFs aWQgc3RvcmFnZSBzcGVjaWZpZXIgJWMiLCBzdG9yYWdldHlwZSk7CisJfQorfQorCisvKgorICog QWxsb2NhdGUgYSBuZXcgcGFyYW1ldGVyLgorICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdfb2Jq ZWN0KE9ialR5cGUgdHlwZSwgY2hhciAqbmFtZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKwor CXBhcmFtID0gcGFsbG9jMChzaXplb2YoT2JqRWxlbSkpOworCXBhcmFtLT5uYW1lID0gbmFtZTsK KwlwYXJhbS0+b2JqdHlwZSA9IHR5cGU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKKy8qCisgKiBB bGxvY2F0ZSBhIG5ldyBvYmplY3QgcGFyYW1ldGVyLgorICovCitzdGF0aWMgT2JqRWxlbSAqCitu ZXdfb2JqZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsK KworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlT2JqZWN0LCBOVUxMKTsKKwlwYXJhbS0+dmFs dWUub2JqZWN0ID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKKy8qCisgKiBBbGxvY2F0 ZSBhIG5ldyBvYmplY3QgdHJlZSB0byBzdG9yZSBwYXJhbWV0ZXIgdmFsdWVzLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZShjaGFyICpmbXQpCit7CisJT2JqVHJlZSAgICAqcGFy YW1zOworCisJcGFyYW1zID0gcGFsbG9jMChzaXplb2YoT2JqVHJlZSkpOworCXBhcmFtcy0+cHJl c2VudCA9IHRydWU7CisJc2xpc3RfaW5pdCgmcGFyYW1zLT5wYXJhbXMpOworCisJaWYgKGZtdCkK Kwl7CisJCXBhcmFtcy0+Zm10aW5mbyA9IG1ha2VTdHJpbmdJbmZvKCk7CisJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcocGFyYW1zLT5mbXRpbmZvLCBmbXQpOworCX0KKworCXJldHVybiBwYXJhbXM7 Cit9CisKKy8qCisgKiBBIGhlbHBlciByb3V0aW5lIHRvIHNldCB1cCAle31EIGFuZCAle31PIGVs ZW1lbnRzLgorICoKKyAqIEVsZW1lbnRzICJzY2hlbWFfbmFtZSIgYW5kICJvYmpfbmFtZSIgYXJl IHNldC4gIElmIHRoZSBuYW1lc3BhY2UgT0lECisgKiBjb3JyZXNwb25kcyB0byBhIHRlbXAgc2No ZW1hLCB0aGF0J3Mgc2V0IHRvICJwZ190ZW1wIi4KKyAqCisgKiBUaGUgZGlmZmVyZW5jZSBiZXR3 ZWVuIHRob3NlIHR3byBlbGVtZW50IHR5cGVzIGlzIHdoZXRoZXIgdGhlIG9ial9uYW1lIHdpbGwK KyAqIGJlIHF1b3RlZCBhcyBhbiBpZGVudGlmaWVyIG9yIG5vdCwgd2hpY2ggaXMgbm90IHNvbWV0 aGluZyB0aGF0IHRoaXMgcm91dGluZQorICogY29uY2VybnMgaXRzZWxmIHdpdGg7IHRoYXQgd2ls bCBiZSB1cCB0byB0aGUgZXhwYW5kIGZ1bmN0aW9uLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoT2lkIG5zcGlkLCBjaGFyICpuYW1lKQoreworCU9ialRy ZWUgICAgKnF1YWxpZmllZDsKKwljaGFyCSAgICpuYW1lc3BhY2U7CisKKwlpZiAoaXNBbnlUZW1w TmFtZXNwYWNlKG5zcGlkKSkKKwkJbmFtZXNwYWNlID0gcHN0cmR1cCgicGdfdGVtcCIpOworCWVs c2UKKwkJbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9uYW1lKG5zcGlkKTsKKworCXF1YWxpZmll ZCA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsIDIsCisJCQkJCQkJICAgInNjaGVtYW5hbWUiLCBPYmpU eXBlU3RyaW5nLCBuYW1lc3BhY2UsCisJCQkJCQkJICAgIm9iam5hbWUiLCBPYmpUeXBlU3RyaW5n LCBwc3RyZHVwKG5hbWUpKTsKKworCXJldHVybiBxdWFsaWZpZWQ7Cit9CisKKy8qCisgKiBBIGhl bHBlciByb3V0aW5lIHRvIHNldCB1cCAle31EIGFuZCAle31PIGVsZW1lbnRzLCB3aXRoIHRoZSBv YmplY3Qgc3BlY2lmaWVkCisgKiBieSBjbGFzc0lkL29iaklkLgorICovCitzdGF0aWMgT2JqVHJl ZSAqCituZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT2lkIGNsYXNzSWQsIE9pZCBvYmplY3RJ ZCkKK3sKKwlPYmpUcmVlICAgICpxdWFsaWZpZWQ7CisJUmVsYXRpb24JY2F0YWxvZzsKKwlIZWFw VHVwbGUJY2F0b2JqOworCURhdHVtCQlvYmpfbnNwOworCURhdHVtCQlvYmpfbmFtZTsKKwlBdHRy TnVtYmVyCUFudW1fbmFtZTsKKwlBdHRyTnVtYmVyCUFudW1fbmFtZXNwYWNlOworCUF0dHJOdW1i ZXIJQW51bV9vaWQgPSBnZXRfb2JqZWN0X2F0dG51bV9vaWQoY2xhc3NJZCk7CisJYm9vbAkJaXNu dWxsOworCisJY2F0YWxvZyA9IHRhYmxlX29wZW4oY2xhc3NJZCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCWNhdG9iaiA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY2F0YWxvZywgQW51bV9vaWQs IG9iamVjdElkKTsKKwlpZiAoIWNhdG9iaikKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIG9iamVjdCB3aXRoIE9JRCAldSBvZiBjYXRhbG9nIFwiJXNcIiIsCisJCQkgb2Jq ZWN0SWQsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGNhdGFsb2cpKTsKKwlBbnVtX25hbWUgPSBn ZXRfb2JqZWN0X2F0dG51bV9uYW1lKGNsYXNzSWQpOworCUFudW1fbmFtZXNwYWNlID0gZ2V0X29i amVjdF9hdHRudW1fbmFtZXNwYWNlKGNsYXNzSWQpOworCisJb2JqX25zcCA9IGhlYXBfZ2V0YXR0 cihjYXRvYmosIEFudW1fbmFtZXNwYWNlLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAorCQkJ CQkJICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAibnVsbCBuYW1lc3Bh Y2UgZm9yIG9iamVjdCAldSIsIG9iamVjdElkKTsKKworCW9ial9uYW1lID0gaGVhcF9nZXRhdHRy KGNhdG9iaiwgQW51bV9uYW1lLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAorCQkJCQkJICAg JmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgIm51bGwgYXR0cmlidXRlIG5h bWUgZm9yIG9iamVjdCAldSIsIG9iamVjdElkKTsKKworCXF1YWxpZmllZCA9IG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShEYXR1bUdldE9iamVjdElkKG9ial9uc3ApLAorCQkJCQkJCQkJCSBOYW1l U3RyKCpEYXR1bUdldE5hbWUob2JqX25hbWUpKSk7CisJdGFibGVfY2xvc2UoY2F0YWxvZywgQWNj ZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBxdWFsaWZpZWQ7Cit9CisKKy8qCisgKiBBIGhlbHBl ciByb3V0aW5lIHRvIHNldHVwICV7fVQgZWxlbWVudHMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K25ld19vYmp0cmVlX2Zvcl90eXBlKE9pZCB0eXBlSWQsIGludDMyIHR5cG1vZCkKK3sKKwlPaWQJ CQl0eXBuc3BpZDsKKwljaGFyCSAgICp0eXBlX25zcDsKKwljaGFyCSAgICp0eXBlX25hbWUgPSBO VUxMOworCWNoYXIJICAgKnR5cG1vZHN0cjsKKwlib29sCQl0eXBlX2FycmF5OworCisJZm9ybWF0 X3R5cGVfZGV0YWlsZWQodHlwZUlkLCB0eXBtb2QsCisJCQkJCQkgJnR5cG5zcGlkLCAmdHlwZV9u YW1lLCAmdHlwbW9kc3RyLCAmdHlwZV9hcnJheSk7CisKKwlpZiAoT2lkSXNWYWxpZCh0eXBuc3Bp ZCkpCisJCXR5cGVfbnNwID0gZ2V0X25hbWVzcGFjZV9uYW1lX29yX3RlbXAodHlwbnNwaWQpOwor CWVsc2UKKwkJdHlwZV9uc3AgPSBwc3RyZHVwKCIiKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9W QShOVUxMLCA0LAorCQkJCQkJICAic2NoZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcsIHR5cGVfbnNw LAorCQkJCQkJICAidHlwZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlX25hbWUsCisJCQkJCQkg ICJ0eXBtb2QiLCBPYmpUeXBlU3RyaW5nLCB0eXBtb2RzdHIsCisJCQkJCQkgICJ0eXBhcnJheSIs IE9ialR5cGVCb29sLCB0eXBlX2FycmF5KTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9i amVjdCB0cmVlIHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMgLS0gdmFyYXJncyB2ZXJzaW9uLgor ICoKKyAqIFRoZSAiZm10IiBhcmd1bWVudCBpcyB1c2VkIHRvIGFwcGVuZCBhcyBhICJmbXQiIGVs ZW1lbnQgaW4gdGhlIG91dHB1dCBibG9iLgorICogbnVtb2JqcyBpbmRpY2F0ZXMgdGhlIG51bWJl ciBvZiBleHRyYSBlbGVtZW50cyB0byBhcHBlbmQ7IGZvciBlYWNoIG9uZSwgYQorICogbmFtZSAo c3RyaW5nKSwgdHlwZSAoZnJvbSB0aGUgT2JqVHlwZSBlbnVtKSBhbmQgdmFsdWUgbXVzdCBiZSBz dXBwbGllZC4gIFRoZQorICogdmFsdWUgbXVzdCBtYXRjaCB0aGUgdHlwZSBnaXZlbjsgZm9yIGlu c3RhbmNlLCBPYmpUeXBlSW50ZWdlciByZXF1aXJlcyBhbgorICogaW50NjQsIE9ialR5cGVTdHJp bmcgcmVxdWlyZXMgYSBjaGFyICosIE9ialR5cGVBcnJheSByZXF1aXJlcyBhIGxpc3QgKG9mCisg KiBPYmpFbGVtKSwgT2JqVHlwZU9iamVjdCByZXF1aXJlcyBhbiBPYmpUcmVlLCBhbmQgc28gb24u ICBFYWNoIGVsZW1lbnQgdHlwZSAqCisgKiBtdXN0IG1hdGNoIHRoZSBjb252ZXJzaW9uIHNwZWNp ZmllciBnaXZlbiBpbiB0aGUgZm9ybWF0IHN0cmluZywgYXMgZGVzY3JpYmVkCisgKiBpbiBkZGxf ZGVwYXJzZV9leHBhbmRfY29tbWFuZCwgcS52LgorICoKKyAqIE5vdGUgd2UgZG9uJ3QgaGF2ZSB0 aGUgbHV4dXJ5IG9mIHNwcmludGYtbGlrZSBjb21waWxlciB3YXJuaW5ncyBmb3IKKyAqIG1hbGZv cm1lZCBhcmd1bWVudCBsaXN0cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVf VkEoY2hhciAqZm10LCBpbnQgbnVtb2JqcywuLi4pCit7CisJT2JqVHJlZSAgICAqdHJlZTsKKwl2 YV9saXN0CQlhcmdzOworCWludAkJCWk7CisKKwkvKiBTZXQgdXAgdGhlIHRvcGxldmVsIG9iamVj dCBhbmQgaXRzICJmbXQiICovCisJdHJlZSA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwkvKiBBbmQg cHJvY2VzcyB0aGUgZ2l2ZW4gdmFyYXJncyAqLworCXZhX3N0YXJ0KGFyZ3MsIG51bW9ianMpOwor CWZvciAoaSA9IDA7IGkgPCBudW1vYmpzOyBpKyspCisJeworCQljaGFyCSAgICpuYW1lOworCQlP YmpUeXBlCQl0eXBlOworCQlPYmpFbGVtICAgICplbGVtOworCisJCW5hbWUgPSB2YV9hcmcoYXJn cywgY2hhciAqKTsKKwkJdHlwZSA9IHZhX2FyZyhhcmdzLCBPYmpUeXBlKTsKKwkJZWxlbSA9IG5l d19vYmplY3QodHlwZSwgTlVMTCk7CisKKwkJLyoKKwkJICogRm9yIGFsbCBwYXJhbSB0eXBlcyBv dGhlciB0aGFuIE9ialR5cGVOdWxsLCB0aGVyZSBtdXN0IGJlIGEgdmFsdWUgaW4KKwkJICogdGhl IHZhcmFyZ3MuIEZldGNoIGl0IGFuZCBhZGQgdGhlIGZ1bGx5IGZvcm1lZCBzdWJvYmplY3QgaW50 byB0aGUKKwkJICogbWFpbiBvYmplY3QuCisJCSAqLworCQlzd2l0Y2ggKHR5cGUpCisJCXsKKwkJ CWNhc2UgT2JqVHlwZU51bGw6CisJCQkJLyogTnVsbCBwYXJhbXMgZG9uJ3QgaGF2ZSBhIHZhbHVl IChvYnZpb3VzbHkpICovCisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVCb29sOgorCQkJCWVs ZW0tPnZhbHVlLmJvb2xlYW4gPSB2YV9hcmcoYXJncywgaW50KTsKKwkJCQlicmVhazsKKwkJCWNh c2UgT2JqVHlwZVN0cmluZzoKKwkJCQllbGVtLT52YWx1ZS5zdHJpbmcgPSB2YV9hcmcoYXJncywg Y2hhciAqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUFycmF5OgorCQkJCWVsZW0tPnZh bHVlLmFycmF5ID0gdmFfYXJnKGFyZ3MsIExpc3QgKik7CisJCQkJYnJlYWs7CisJCQljYXNlIE9i alR5cGVJbnRlZ2VyOgorCQkJCWVsZW0tPnZhbHVlLmludGVnZXIgPSB2YV9hcmcoYXJncywgaW50 KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUZsb2F0OgorCQkJCWVsZW0tPnZhbHVlLmZs dCA9IHZhX2FyZyhhcmdzLCBkb3VibGUpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlT2Jq ZWN0OgorCQkJCWVsZW0tPnZhbHVlLm9iamVjdCA9IHZhX2FyZyhhcmdzLCBPYmpUcmVlICopOwor CQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBPYmpUcmVl IGVsZW1lbnQgdHlwZSAlZCIsIHR5cGUpOworCQl9CisKKwkJZWxlbS0+bmFtZSA9IG5hbWU7CisJ CWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBlbGVtKTsKKwl9CisKKwl2YV9lbmQoYXJncyk7 CisJcmV0dXJuIHRyZWU7Cit9CisKKy8qCisgKiBQcm9jZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0 IHN0cmluZyBmcm9tIHRoZSBPYmpUcmVlIGludG8gdGhlIG91dHB1dCBwYXJzZQorICogc3RhdGUu CisgKi8KK3N0YXRpYyB2b2lkCitvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KEpzb25iUGFy c2VTdGF0ZSAqc3RhdGUsIE9ialRyZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNv bmJWYWx1ZQl2YWw7CisKKwlpZiAodHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisK KwkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXku dmFsLnN0cmluZy52YWwgPSAiZm10IjsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5 LnZhbC5zdHJpbmcudmFsKTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9LRVksICZrZXkp OworCisJLyogVGhlbiBwcm9jZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyAqLworCXZh bC50eXBlID0gamJ2U3RyaW5nOworCXZhbC52YWwuc3RyaW5nLmxlbiA9IHRyZWUtPmZtdGluZm8t PmxlbjsKKwl2YWwudmFsLnN0cmluZy52YWwgPSB0cmVlLT5mbXRpbmZvLT5kYXRhOworCXB1c2hK c29uYlZhbHVlKCZzdGF0ZSwgV0pCX1ZBTFVFLCAmdmFsKTsKK30KKworLyoKKyAqIENyZWF0ZSBh IEpTT05CIHJlcHJlc2VudGF0aW9uIGZyb20gYW4gT2JqVHJlZS4KKyAqLworc3RhdGljIEpzb25i ICoKK29ianRyZWVfdG9fanNvbmIoT2JqVHJlZSAqdHJlZSkKK3sKKwlKc29uYlZhbHVlICp2YWx1 ZTsKKworCXZhbHVlID0gb2JqdHJlZV90b19qc29uYl9yZWModHJlZSwgTlVMTCk7CisJcmV0dXJu IEpzb25iVmFsdWVUb0pzb25iKHZhbHVlKTsKK30KKworLyoKKyAqIEhlbHBlciBmb3Igb2JqdHJl ZV90b19qc29uYjogcHJvY2VzcyBhbiBpbmRpdmlkdWFsIGVsZW1lbnQgZnJvbSBhbiBvYmplY3Qg b3IKKyAqIGFuIGFycmF5IGludG8gdGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4KKyAqLworc3RhdGlj IHZvaWQKK29ianRyZWVfdG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBP YmpFbGVtICpvYmplY3QsCisJCQkJCQkgSnNvbmJJdGVyYXRvclRva2VuIGVsZW1fdG9rZW4pCit7 CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlzd2l0Y2ggKG9iamVjdC0+b2JqdHlwZSkKKwl7CisJCWNh c2UgT2JqVHlwZU51bGw6CisJCQl2YWwudHlwZSA9IGpidk51bGw7CisJCQlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBl U3RyaW5nOgorCQkJdmFsLnR5cGUgPSBqYnZTdHJpbmc7CisJCQl2YWwudmFsLnN0cmluZy5sZW4g PSBzdHJsZW4ob2JqZWN0LT52YWx1ZS5zdHJpbmcpOworCQkJdmFsLnZhbC5zdHJpbmcudmFsID0g b2JqZWN0LT52YWx1ZS5zdHJpbmc7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9r ZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJCXZhbC50 eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQorCQkJCURh dHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGludDhfbnVtZXJpYywKKwkJCQkJCQkJ CQkJCQlvYmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwg ZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVGbG9hdDoKKwkJ CXZhbC50eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQor CQkJCURhdHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGZsb2F0OF9udW1lcmljLAor CQkJCQkJCQkJCQkJCW9iamVjdC0+dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUJv b2w6CisJCQl2YWwudHlwZSA9IGpidkJvb2w7CisJCQl2YWwudmFsLmJvb2xlYW4gPSBvYmplY3Qt PnZhbHVlLmJvb2xlYW47CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2 YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlT2JqZWN0OgorCQkJLyogUmVjdXJzaXZl bHkgYWRkIHRoZSBvYmplY3QgaW50byB0aGUgZXhpc3RpbmcgcGFyc2Ugc3RhdGUgKi8KKwkJCW9i anRyZWVfdG9fanNvbmJfcmVjKG9iamVjdC0+dmFsdWUub2JqZWN0LCBzdGF0ZSk7CisJCQlicmVh azsKKworCQljYXNlIE9ialR5cGVBcnJheToKKwkJCXsKKwkJCQlMaXN0Q2VsbCAgICpjZWxsOwor CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fQVJSQVksIE5VTEwpOworCQkJ CWZvcmVhY2goY2VsbCwgb2JqZWN0LT52YWx1ZS5hcnJheSkKKwkJCQl7CisJCQkJCU9iakVsZW0g ICAgKmVsZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJCQkJb2JqdHJlZV90b19qc29uYl9lbGVtZW50 KHN0YXRlLCBlbGVtLCBXSkJfRUxFTSk7CisJCQkJfQorCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0 ZSwgV0pCX0VORF9BUlJBWSwgTlVMTCk7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBvYmplY3QgdHlwZSAlZCIsIG9iamVjdC0+b2Jq dHlwZSk7CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBv Ymp0cmVlX3RvX2pzb25iLgorICovCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitvYmp0cmVlX3RvX2pz b25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKQoreworCXNsaXN0 X2l0ZXIJaXRlcjsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwg TlVMTCk7CisKKwlvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KHN0YXRlLCB0cmVlKTsKKwor CXNsaXN0X2ZvcmVhY2goaXRlciwgJnRyZWUtPnBhcmFtcykKKwl7CisJCU9iakVsZW0gICAgKm9i amVjdCA9IHNsaXN0X2NvbnRhaW5lcihPYmpFbGVtLCBub2RlLCBpdGVyLmN1cik7CisJCUpzb25i VmFsdWUJa2V5OworCisJCS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCQlrZXkudHlwZSA9IGpi dlN0cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKG9iamVjdC0+bmFtZSk7CisJ CWtleS52YWwuc3RyaW5nLnZhbCA9IG9iamVjdC0+bmFtZTsKKwkJcHVzaEpzb25iVmFsdWUoJnN0 YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCQkvKiBUaGVuIHByb2Nlc3MgdGhlIHZhbHVlIGFjY29y ZGluZyB0byBpdHMgdHlwZSAqLworCQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIG9i amVjdCwgV0pCX1ZBTFVFKTsKKwl9CisKKwlyZXR1cm4gcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBX SkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUg VEFCTEUvQ1JFQVRFIERPTUFJTiBkZXBhcnNpbmcuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQg b3IgZG9tYWluIE9JRCwgb2J0YWluIGl0cyBjb25zdHJhaW50cyBhbmQgYXBwZW5kIHRoZW0gdG8K KyAqIHRoZSBnaXZlbiBlbGVtZW50cyBsaXN0LiAgVGhlIHVwZGF0ZWQgbGlzdCBpcyByZXR1cm5l ZC4KKyAqCisgKiBUaGlzIHdvcmtzIGZvciB0eXBlZCB0YWJsZXMsIHJlZ3VsYXIgdGFibGVzLCBh bmQgZG9tYWlucy4KKyAqCisgKiBOb3RlIHRoYXQgQ09OU1RSQUlOVF9GT1JFSUdOIGNvbnN0cmFp bnRzIGFyZSBhbHdheXMgaWdub3JlZC4KKyAqLworc3RhdGljIExpc3QgKgorb2J0YWluQ29uc3Ry YWludHMoTGlzdCAqZWxlbWVudHMsIE9pZCByZWxhdGlvbklkLCBPaWQgZG9tYWluSWQpCit7CisJ UmVsYXRpb24JY29uUmVsOworCVNjYW5LZXlEYXRhIGtleTsKKwlTeXNTY2FuRGVzYyBzY2FuOwor CUhlYXBUdXBsZQl0dXBsZTsKKwlPYmpUcmVlICAgICpjb25zdHI7CisKKwkvKiBPbmx5IG9uZSBt YXkgYmUgdmFsaWQgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChyZWxhdGlvbklkKSBeIE9pZElzVmFs aWQoZG9tYWluSWQpKTsKKworCS8qCisJICogU2NhbiBwZ19jb25zdHJhaW50IHRvIGZldGNoIGFs bCBjb25zdHJhaW50cyBsaW5rZWQgdG8gdGhlIGdpdmVuCisJICogcmVsYXRpb24uCisJICovCisJ Y29uUmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwlpZiAoT2lkSXNWYWxpZChyZWxhdGlvbklkKSkKKwl7CisJCVNjYW5LZXlJbml0KCZrZXks CisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKHJlbGF0aW9uSWQpKTsKKwkJ c2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFt ZUluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQorCWVsc2UKKwl7 CisJCVNjYW5LZXlJbml0KCZrZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb250eXBpZCwK KwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERh dHVtKGRvbWFpbklkKSk7CisJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25z dHJhaW50VHlwaWRJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0K KworCS8qCisJICogRm9yIGVhY2ggY29uc3RyYWludCwgYWRkIGEgbm9kZSB0byB0aGUgbGlzdCBv ZiB0YWJsZSBlbGVtZW50cy4gIEluCisJICogdGhlc2Ugbm9kZXMgd2UgaW5jbHVkZSBub3Qgb25s eSB0aGUgcHJpbnRhYmxlIGluZm9ybWF0aW9uICgiZm10IiksIGJ1dAorCSAqIGFsc28gc2VwYXJh dGUgYXR0cmlidXRlcyB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBjb25zdHJhaW50LCBmb3IKKwkg KiBhdXRvbWF0aWMgcHJvY2Vzc2luZy4KKwkgKi8KKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0 dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50 IGNvbnN0ckZvcm07CisJCWNoYXIJICAgKmNvbnR5cGU7CisKKwkJY29uc3RyRm9ybSA9IChGb3Jt X3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJc3dpdGNoIChjb25zdHJGb3Jt LT5jb250eXBlKQorCQl7CisJCQljYXNlIENPTlNUUkFJTlRfQ0hFQ0s6CisJCQkJY29udHlwZSA9 ICJjaGVjayI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfRk9SRUlHTjoKKwkJCQlj b250aW51ZTsJCS8qIG5vdCBoZXJlICovCisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJ CQljb250eXBlID0gInByaW1hcnkga2V5IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlO VF9VTklRVUU6CisJCQkJY29udHlwZSA9ICJ1bmlxdWUiOworCQkJCWJyZWFrOworCQkJY2FzZSBD T05TVFJBSU5UX1RSSUdHRVI6CisJCQkJY29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsK KwkJCWNhc2UgQ09OU1RSQUlOVF9FWENMVVNJT046CisJCQkJY29udHlwZSA9ICJleGNsdXNpb24i OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVk IGNvbnN0cmFpbnQgdHlwZSIpOworCQl9CisKKwkJLyoKKwkJICogInR5cGUiIGFuZCAiY29udHlw ZSIgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwcmludGFibGUgb3V0cHV0LCBidXQgYXJlCisJCSAqIHVz ZWZ1bCB0byBwcm9ncmFtbWF0aWNhbGx5IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gY29sdW1ucyBh bmQgYW1vbmcKKwkJICogZGlmZmVyZW50IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAqCisJCSAqIFhY WCBpdCBtaWdodCBiZSB1c2VmdWwgdG8gYWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQ SywgZXRjLgorCQkgKi8KKwkJY29uc3RyID0gbmV3X29ianRyZWVfVkEoIkNPTlNUUkFJTlQgJXtu YW1lfUkgJXtkZWZpbml0aW9ufXMiLCA0LAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJjb25zdHJhaW50IiwKKwkJCQkJCQkJImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250eXBl LAorCQkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9ybS0+Y29u bmFtZSksCisJCQkJCQkJCSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJcGdf Z2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyRm9ybS0+b2lkKSk7CisJCWVs ZW1lbnRzID0gbGFwcGVuZChlbGVtZW50cywgbmV3X29iamVjdF9vYmplY3QoY29uc3RyKSk7CisJ fQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlyZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBSZXR1cm4gYW4g aW5kZXggZGVmaW5pdGlvbiwgc3BsaXQgaW50byBzZXZlcmFsIHBpZWNlcy4KKyAqCisgKiBBIGxh cmdlIGFtb3VudCBvZiBjb2RlIGlzIGR1cGxpY2F0ZWQgZnJvbSAgcGdfZ2V0X2luZGV4ZGVmX3dv cmtlciwgYnV0CisgKiBjb250cm9sIGZsb3cgaXMgZGlmZmVyZW50IGVub3VnaCB0aGF0IGl0IGRv ZXNuJ3Qgc2VlbSB3b3J0aCBrZWVwaW5nIHRoZW0KKyAqIHRvZ2V0aGVyLgorICovCitzdGF0aWMg dm9pZAorcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJlbGlkLAorCQkJCQkJIGNo YXIgKippbmRleF9hbSwKKwkJCQkJCSBjaGFyICoqZGVmaW5pdGlvbiwKKwkJCQkJCSBjaGFyICoq cmVsb3B0aW9ucywKKwkJCQkJCSBjaGFyICoqdGFibGVzcGFjZSwKKwkJCQkJCSBjaGFyICoqd2hl cmVDbGF1c2UpCit7CisJSGVhcFR1cGxlCWh0X2lkeDsKKwlIZWFwVHVwbGUJaHRfaWR4cmVsOwor CUhlYXBUdXBsZQlodF9hbTsKKwlGb3JtX3BnX2luZGV4IGlkeHJlYzsKKwlGb3JtX3BnX2NsYXNz IGlkeHJlbHJlYzsKKwlGb3JtX3BnX2FtCWFtcmVjOworCUluZGV4QW1Sb3V0aW5lICphbXJvdXRp bmU7CisJTGlzdAkgICAqaW5kZXhwcnM7CisJTGlzdENlbGwgICAqaW5kZXhwcl9pdGVtOworCUxp c3QJICAgKmNvbnRleHQ7CisJT2lkCQkJaW5kcmVsaWQ7CisJaW50CQkJa2V5bm87CisJRGF0dW0J CWluZGNvbGxEYXR1bTsKKwlEYXR1bQkJaW5kY2xhc3NEYXR1bTsKKwlEYXR1bQkJaW5kb3B0aW9u RGF0dW07CisJYm9vbAkJaXNudWxsOworCW9pZHZlY3RvciAgKmluZGNvbGxhdGlvbjsKKwlvaWR2 ZWN0b3IgICppbmRjbGFzczsKKwlpbnQydmVjdG9yICppbmRvcHRpb247CisJU3RyaW5nSW5mb0Rh dGEgZGVmaW5pdGlvbkJ1ZjsKKworCSp0YWJsZXNwYWNlID0gTlVMTDsKKwkqd2hlcmVDbGF1c2Ug PSBOVUxMOworCisJLyogRmV0Y2ggdGhlIHBnX2luZGV4IHR1cGxlIGJ5IHRoZSBPaWQgb2YgdGhl IGluZGV4ICovCisJaHRfaWR4ID0gU2VhcmNoU3lzQ2FjaGUxKElOREVYUkVMSUQsIE9iamVjdElk R2V0RGF0dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9pZHgpKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgaW5kZXggd2l0aCBPSUQgJXUi LCBpbmRleHJlbGlkKTsKKwlpZHhyZWMgPSAoRm9ybV9wZ19pbmRleCkgR0VUU1RSVUNUKGh0X2lk eCk7CisKKwlpbmRyZWxpZCA9IGlkeHJlYy0+aW5kcmVsaWQ7CisJQXNzZXJ0KGluZGV4cmVsaWQg PT0gaWR4cmVjLT5pbmRleHJlbGlkKTsKKworCS8qIE11c3QgZ2V0IGluZGNvbGxhdGlvbiwgaW5k Y2xhc3MsIGFuZCBpbmRvcHRpb24gdGhlIGhhcmQgd2F5ICovCisJaW5kY29sbERhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJICAgQW51bV9wZ19pbmRl eF9pbmRjb2xsYXRpb24sICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRjb2xsYXRp b24gPSAob2lkdmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjb2xsRGF0dW0pOworCisJaW5k Y2xhc3NEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJ CQlBbnVtX3BnX2luZGV4X2luZGNsYXNzLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJ aW5kY2xhc3MgPSAob2lkdmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjbGFzc0RhdHVtKTsK KworCWluZG9wdGlvbkRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwK KwkJCQkJCQkJCSBBbnVtX3BnX2luZGV4X2luZG9wdGlvbiwgJmlzbnVsbCk7CisJQXNzZXJ0KCFp c251bGwpOworCWluZG9wdGlvbiA9IChpbnQydmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRv cHRpb25EYXR1bSk7CisKKwkvKiBGZXRjaCB0aGUgcGdfY2xhc3MgdHVwbGUgb2YgdGhlIGluZGV4 IHJlbGF0aW9uICovCisJaHRfaWR4cmVsID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0 SWRHZXREYXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2lkeHJl bCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiB3aXRo IE9JRCAldSIsIGluZGV4cmVsaWQpOworCWlkeHJlbHJlYyA9IChGb3JtX3BnX2NsYXNzKSBHRVRT VFJVQ1QoaHRfaWR4cmVsKTsKKworCS8qIEZldGNoIHRoZSBwZ19hbSB0dXBsZSBvZiB0aGUgaW5k ZXgnIGFjY2VzcyBtZXRob2QgKi8KKwlodF9hbSA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2Jq ZWN0SWRHZXREYXR1bShpZHhyZWxyZWMtPnJlbGFtKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KGh0X2FtKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBt ZXRob2Qgd2l0aCBPSUQgJXUiLAorCQkJIGlkeHJlbHJlYy0+cmVsYW0pOworCWFtcmVjID0gKEZv cm1fcGdfYW0pIEdFVFNUUlVDVChodF9hbSk7CisKKwkvKgorCSAqIEdldCB0aGUgaW5kZXggZXhw cmVzc2lvbnMsIGlmIGFueS4gIChOT1RFOiB3ZSBkbyBub3QgdXNlIHRoZSByZWxjYWNoZQorCSAq IHZlcnNpb25zIG9mIHRoZSBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlLCBiZWNhdXNlIHdlIHdh bnQgdG8gZGlzcGxheQorCSAqIG5vbi1jb25zdC1mb2xkZWQgZXhwcmVzc2lvbnMuKQorCSAqLwor CWlmICghaGVhcF9hdHRpc251bGwoaHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCBOVUxM KSkKKwl7CisJCURhdHVtCQlleHByc0RhdHVtOworCQljaGFyCSAgICpleHByc1N0cmluZzsKKwor CQlleHByc0RhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJ CQkJCSBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCAmaXNudWxsKTsKKwkJQXNzZXJ0KCFpc251bGwp OworCQlleHByc1N0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcoZXhwcnNEYXR1bSk7CisJCWlu ZGV4cHJzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGV4cHJzU3RyaW5nKTsKKwkJcGZyZWUoZXhw cnNTdHJpbmcpOworCX0KKwllbHNlCisJCWluZGV4cHJzID0gTklMOworCisJaW5kZXhwcl9pdGVt ID0gbGlzdF9oZWFkKGluZGV4cHJzKTsKKworCWNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9y KGdldF9yZWxfbmFtZShpbmRyZWxpZCksIGluZHJlbGlkKTsKKworCWluaXRTdHJpbmdJbmZvKCZk ZWZpbml0aW9uQnVmKTsKKworCS8qIE91dHB1dCBpbmRleCBBTSAqLworCSppbmRleF9hbSA9IHBz dHJkdXAocXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGFtcmVjLT5hbW5hbWUpKSk7CisKKwkvKiBG ZXRjaCB0aGUgaW5kZXggQU0ncyBBUEkgc3RydWN0ICovCisJYW1yb3V0aW5lID0gR2V0SW5kZXhB bVJvdXRpbmUoYW1yZWMtPmFtaGFuZGxlcik7CisKKwkvKgorCSAqIE91dHB1dCBpbmRleCBkZWZp bml0aW9uLiAgTm90ZSB0aGUgb3V0ZXIgcGFyZW5zIG11c3QgYmUgc3VwcGxpZWQgYnkKKwkgKiBj YWxsZXIuCisJICovCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIigi KTsKKwlmb3IgKGtleW5vID0gMDsga2V5bm8gPCBpZHhyZWMtPmluZG5hdHRzOyBrZXlubysrKQor CXsKKwkJQXR0ck51bWJlcglhdHRudW0gPSBpZHhyZWMtPmluZGtleS52YWx1ZXNba2V5bm9dOwor CQlpbnQxNgkJb3B0ID0gaW5kb3B0aW9uLT52YWx1ZXNba2V5bm9dOworCQlPaWQJCQlrZXljb2x0 eXBlOworCQlPaWQJCQlrZXljb2xjb2xsYXRpb247CisKKwkJLyogUHJpbnQgSU5DTFVERSB0byBk aXZpZGUga2V5IGFuZCBub24ta2V5IGF0dHJzLiAqLworCQlpZiAoa2V5bm8gPT0gaWR4cmVjLT5p bmRua2V5YXR0cykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1 ZiwgIikgSU5DTFVERSAoIik7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmZGVmaW5pdGlvbkJ1Ziwga2V5bm8gPT0gMCA/ICIiIDogIiwgIik7CisKKwkJaWYgKGF0dG51 bSAhPSAwKQorCQl7CisJCQkvKiBTaW1wbGUgaW5kZXggY29sdW1uICovCisJCQljaGFyCSAgICph dHRuYW1lOworCQkJaW50MzIJCWtleWNvbHR5cG1vZDsKKworCQkJYXR0bmFtZSA9IGdldF9hdHRu YW1lKGluZHJlbGlkLCBhdHRudW0sIGZhbHNlKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmRlZmluaXRpb25CdWYsIHF1b3RlX2lkZW50aWZpZXIoYXR0bmFtZSkpOworCQkJZ2V0X2F0dHR5 cGV0eXBtb2Rjb2xsKGluZHJlbGlkLCBhdHRudW0sCisJCQkJCQkJCSAgJmtleWNvbHR5cGUsICZr ZXljb2x0eXBtb2QsCisJCQkJCQkJCSAgJmtleWNvbGNvbGxhdGlvbik7CisJCX0KKwkJZWxzZQor CQl7CisJCQkvKiBFeHByZXNzaW9uYWwgaW5kZXggKi8KKwkJCU5vZGUJICAgKmluZGV4a2V5Owor CQkJY2hhcgkgICAqc3RyOworCisJCQlpZiAoaW5kZXhwcl9pdGVtID09IE5VTEwpCisJCQkJZWxv ZyhFUlJPUiwgInRvbyBmZXcgZW50cmllcyBpbiBpbmRleHBycyBsaXN0Iik7CisJCQlpbmRleGtl eSA9IChOb2RlICopIGxmaXJzdChpbmRleHByX2l0ZW0pOworCQkJaW5kZXhwcl9pdGVtID0gbG5l eHQoaW5kZXhwcnMsIGluZGV4cHJfaXRlbSk7CisKKwkJCS8qIERlcGFyc2UgKi8KKwkJCXN0ciA9 IGRlcGFyc2VfZXhwcmVzc2lvbihpbmRleGtleSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwor CQkJLyogTmVlZCBwYXJlbnMgaWYgaXQncyBub3QgYSBiYXJlIGZ1bmN0aW9uIGNhbGwgKi8KKwkJ CWlmIChpbmRleGtleSAmJiBJc0EoaW5kZXhrZXksIEZ1bmNFeHByKSAmJgorCQkJCSgoRnVuY0V4 cHIgKikgaW5kZXhrZXkpLT5mdW5jZm9ybWF0ID09IENPRVJDRV9FWFBMSUNJVF9DQUxMKQorCQkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHN0cik7CisJCQllbHNlCisJ CQkJYXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIiglcykiLCBzdHIpOworCisJCQlr ZXljb2x0eXBlID0gZXhwclR5cGUoaW5kZXhrZXkpOworCQkJa2V5Y29sY29sbGF0aW9uID0gZXhw ckNvbGxhdGlvbihpbmRleGtleSk7CisJCX0KKworCQkvKiBQcmludCBhZGRpdGlvbmFsIGRlY29y YXRpb24gZm9yIChzZWxlY3RlZCkga2V5IGNvbHVtbnMsIGV2ZW4gaWYgZGVmYXVsdCAqLworCQlp ZiAoa2V5bm8gPCBpZHhyZWMtPmluZG5rZXlhdHRzKQorCQl7CisJCQlPaWQgaW5kY29sbCA9IGlu ZGNvbGxhdGlvbi0+dmFsdWVzW2tleW5vXTsKKwkJCWlmIChPaWRJc1ZhbGlkKGluZGNvbGwpKQor CQkJCWFwcGVuZFN0cmluZ0luZm8oJmRlZmluaXRpb25CdWYsICIgQ09MTEFURSAlcyIsCisJCQkJ CQkJCWdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKChpbmRjb2xsKSkpOworCisJCQkvKiBBZGQgdGhl IG9wZXJhdG9yIGNsYXNzIG5hbWUsIGV2ZW4gaWYgZGVmYXVsdCAqLworCQkJZ2V0X29wY2xhc3Nf bmFtZShpbmRjbGFzcy0+dmFsdWVzW2tleW5vXSwgSW52YWxpZE9pZCwgJmRlZmluaXRpb25CdWYp OworCisJCQkvKiBBZGQgb3B0aW9ucyBpZiByZWxldmFudCAqLworCQkJaWYgKGFtcm91dGluZS0+ YW1jYW5vcmRlcikKKwkJCXsKKwkJCQkvKiBJZiBpdCBzdXBwb3J0cyBzb3J0IG9yZGVyaW5nLCBy ZXBvcnQgREVTQyBhbmQgTlVMTFMgb3B0cyAqLworCQkJCWlmIChvcHQgJiBJTkRPUFRJT05fREVT QykKKwkJCQl7CisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIg REVTQyIpOworCQkJCQkvKiBOVUxMUyBGSVJTVCBpcyB0aGUgZGVmYXVsdCBpbiB0aGlzIGNhc2Ug Ki8KKwkJCQkJaWYgKCEob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKSkKKwkJCQkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIgTlVMTFMgTEFTVCIpOworCQkJCX0K KwkJCQllbHNlCisJCQkJeworCQkJCQlpZiAob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKQor CQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBGSVJT VCIpOworCQkJCX0KKwkJCX0KKworCQkJLyogWFhYIGV4Y2x1ZGVPcHMgdGhpbmd5IHdhcyBoZXJl OyBkbyB3ZSBuZWVkIGFueXRoaW5nPyAqLworCQl9CisJfQorCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmRlZmluaXRpb25CdWYsICIpIik7CisJKmRlZmluaXRpb24gPSBkZWZpbml0aW9uQnVmLmRh dGE7CisKKwkvKiBPdXRwdXQgcmVsb3B0aW9ucyAqLworCSpyZWxvcHRpb25zID0gZmxhdHRlbl9y ZWxvcHRpb25zKGluZGV4cmVsaWQpOworCisJLyogT3V0cHV0IHRhYmxlc3BhY2UgKi8KKwl7CisJ CU9pZAkJCXRibHNwYzsKKworCQl0YmxzcGMgPSBnZXRfcmVsX3RhYmxlc3BhY2UoaW5kZXhyZWxp ZCk7CisJCWlmIChPaWRJc1ZhbGlkKHRibHNwYykpCisJCQkqdGFibGVzcGFjZSA9IHBzdHJkdXAo cXVvdGVfaWRlbnRpZmllcihnZXRfdGFibGVzcGFjZV9uYW1lKHRibHNwYykpKTsKKwl9CisKKwkv KiBSZXBvcnQgaW5kZXggcHJlZGljYXRlLCBpZiBhbnkgKi8KKwlpZiAoIWhlYXBfYXR0aXNudWxs KGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRwcmVkLCBOVUxMKSkKKwl7CisJCU5vZGUJICAgKm5v ZGU7CisJCURhdHVtCQlwcmVkRGF0dW07CisJCWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJLyog Q29udmVydCB0ZXh0IHN0cmluZyB0byBub2RlIHRyZWUgKi8KKwkJcHJlZERhdHVtID0gU3lzQ2Fj aGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCUFudW1fcGdfaW5kZXhfaW5k cHJlZCwgJmlzbnVsbCk7CisJCUFzc2VydCghaXNudWxsKTsKKwkJcHJlZFN0cmluZyA9IFRleHRE YXR1bUdldENTdHJpbmcocHJlZERhdHVtKTsKKwkJbm9kZSA9IChOb2RlICopIHN0cmluZ1RvTm9k ZShwcmVkU3RyaW5nKTsKKwkJcGZyZWUocHJlZFN0cmluZyk7CisKKwkJLyogRGVwYXJzZSAqLwor CQkqd2hlcmVDbGF1c2UgPSBkZXBhcnNlX2V4cHJlc3Npb24obm9kZSwgY29udGV4dCwgZmFsc2Us IGZhbHNlKTsKKwl9CisKKwkvKiBDbGVhbiB1cCAqLworCVJlbGVhc2VTeXNDYWNoZShodF9pZHgp OworCVJlbGVhc2VTeXNDYWNoZShodF9pZHhyZWwpOworCVJlbGVhc2VTeXNDYWNoZShodF9hbSk7 Cit9CisKKy8qCisgKiBPYnRhaW4gdGhlIGRlcGFyc2VkIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBn aXZlbiBjb2x1bW4gb2YgdGhlIGdpdmVuIHRhYmxlLgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUg c2V0IGEgY29ycmVjdCBkZXBhcnNlIGNvbnRleHQuCisgKi8KK3N0YXRpYyBjaGFyICoKK1JlbGF0 aW9uR2V0Q29sdW1uRGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8sIExpc3Qg KmRwY29udGV4dCwKKwkJCQkJCSBMaXN0ICoqZXhwcnMpCit7CisJTm9kZQkgICAqZGVmdmFsOwor CWNoYXIJICAgKmRlZnN0cjsKKworCWRlZnZhbCA9IGJ1aWxkX2NvbHVtbl9kZWZhdWx0KHJlbCwg YXR0bm8pOworCWRlZnN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihkZWZ2YWwsIGRwY29udGV4dCwg ZmFsc2UsIGZhbHNlKTsKKworCS8qIENvbGxlY3QgdGhlIGV4cHJlc3Npb24gZm9yIGxhdGVyIHJl cGxpY2F0aW9uIHNhZmV0eSBjaGVja3MgKi8KKwlpZiAoZXhwcnMpCisJCSpleHBycyA9IGxhcHBl bmQoKmV4cHJzLCBkZWZ2YWwpOworCisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAqIE9idGFp biB0aGUgZGVwYXJzZWQgcGFydGl0aW9uIGJvdW5kIGV4cHJlc3Npb24gZm9yIHRoZSBnaXZlbiB0 YWJsZS4KKyAqLworc3RhdGljIGNoYXIgKgorUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChPaWQg cmVsaWQpCit7CisJRGF0dW0JCWRlcGFyc2VkOworCURhdHVtCQlib3VuZERhdHVtOworCWJvb2wJ CWlzbnVsbDsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShS RUxPSUQsIHJlbGlkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24gd2l0aCBPSUQgJXUiLCByZWxp ZCk7CisKKwlib3VuZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwgdHVwbGUsCisJCQkJ CQkJCSBBbnVtX3BnX2NsYXNzX3JlbHBhcnRib3VuZCwKKwkJCQkJCQkJICZpc251bGwpOworCisJ ZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAorCQkJCQkJCQkgICBD U3RyaW5nR2V0VGV4dERhdHVtKFRleHREYXR1bUdldENTdHJpbmcoYm91bmREYXR1bSkpLAorCQkJ CQkJCQkgICByZWxpZCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCisJcmV0dXJuIFRl eHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpOworfQorCisvKgorICogRGVwYXJzZSBhIENvbHVt bkRlZiBub2RlIHdpdGhpbiBhIHJlZ3VsYXIgKG5vbi10eXBlZCkgdGFibGUgY3JlYXRpb24uCisg KgorICogTk9UIE5VTEwgY29uc3RyYWludHMgaW4gdGhlIGNvbHVtbiBkZWZpbml0aW9uIGFyZSBl bWl0dGVkIGRpcmVjdGx5IGluIHRoZQorICogY29sdW1uIGRlZmluaXRpb24gYnkgdGhpcyByb3V0 aW5lOyBvdGhlciBjb25zdHJhaW50cyBtdXN0IGJlIGVtaXR0ZWQKKyAqIGVsc2V3aGVyZSAodGhl IGluZm8gaW4gdGhlIHBhcnNlIG5vZGUgaXMgaW5jb21wbGV0ZSBhbnl3YXkpLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiAle25hbWV9SSAle2NvbHR5cGV9VCAle2NvbXByZXNzaW9ufXMgJXtk ZWZhdWx0fXMgJXtub3RfbnVsbH1zICV7Y29sbGF0aW9ufXMKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9Db2x1bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwg Ym9vbCBjb21wb3NpdGUsCisJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRlciwg TGlzdCAqKmV4cHJzKQoreworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2Jq OworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CisJSGVhcFR1cGxl CWF0dHJUdXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ckZvcm07CisJT2lkCQkJdHlwaWQ7CisJ aW50MzIJCXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xsYXRpb247CisJYm9vbAkJc2F3X25vdG51bGw7 CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qCisJICogSW5oZXJpdGVkIGNvbHVtbnMgd2l0aG91 dCBsb2NhbCBkZWZpbml0aW9ucyBtdXN0IG5vdCBiZSBlbWl0dGVkLgorCSAqCisJICogWFhYIG1h eWJlIGl0IGlzIHVzZWZ1bCB0byBoYXZlIHRoZW0gd2l0aCAicHJlc2VudCA9IGZhbHNlIiBvciBz b21lCisJICogc3VjaD8KKwkgKi8KKwlpZiAoIWNvbGRlZi0+aXNfbG9jYWwpCisJCXJldHVybiBO VUxMOworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5j b2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1Is ICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlv biAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9w Z19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29s bChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlw Y29sbGF0aW9uKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSAle2NvbHR5cGV9 VCIsIDMsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwKKwkJCQkJCSAi bmFtZSIsIE9ialR5cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFtZSwKKwkJCQkJCSAiY29sdHlwZSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwaWQsIHR5cG1v ZCkpOworCisJaWYgKCFjb21wb3NpdGUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlNU T1JBR0UgJXtjb2xzdG9yYWdlfXMiLCAiY29sc3RvcmFnZSIsCisJCQkJCQkJIGdldF90eXBlX3N0 b3JhZ2UoYXR0ckZvcm0tPmF0dHN0b3JhZ2UpKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRt cF9vYmogPSBuZXdfb2JqdHJlZSgiQ09NUFJFU1NJT04iKTsKKwlpZiAoY29sZGVmLT5jb21wcmVz c2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7Y29tcHJlc3Npb25fbWV0 aG9kfUkiLAorCQkJCQkJCSAiY29tcHJlc3Npb25fbWV0aG9kIiwgY29sZGVmLT5jb21wcmVzc2lv bik7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcF9vYmosICIle2NvbXByZXNz aW9uX21ldGhvZH1JIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwl9CisJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjb21wcmVzc2lvbn1zIiwgdG1wX29iaik7CisKKwl0 bXBfb2JqID0gbmV3X29ianRyZWUoIkNPTExBVEUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBjb2xs YXRpb24pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtuYW1lfUQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIHR5cGNvbGxhdGlvbikpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50 KHRtcF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29sbGF0aW9ufXMiLCB0 bXBfb2JqKTsKKworCWlmICghY29tcG9zaXRlKQorCXsKKwkJT2lkCQkJc2VxcmVsaWQgPSBJbnZh bGlkT2lkOworCisJCS8qCisJCSAqIEVtaXQgYSBOT1QgTlVMTCBkZWNsYXJhdGlvbiBpZiBuZWNl c3NhcnkuICBOb3RlIHRoYXQgd2UgY2Fubm90CisJCSAqIHRydXN0IHBnX2F0dHJpYnV0ZS5hdHRu b3RudWxsIGhlcmUsIGJlY2F1c2UgdGhhdCBiaXQgaXMgYWxzbyBzZXQKKwkJICogd2hlbiBwcmlt YXJ5IGtleXMgYXJlIHNwZWNpZmllZDsgd2UgbXVzdCBub3QgZW1pdCBhIE5PVCBOVUxMCisJCSAq IGNvbnN0cmFpbnQgaW4gdGhhdCBjYXNlLCB1bmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQuICBU aGVyZWZvcmUsCisJCSAqIHdlIHNjYW4gdGhlIGxpc3Qgb2YgY29uc3RyYWludHMgYXR0YWNoZWQg dG8gdGhpcyBjb2x1bW4gdG8KKwkJICogZGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBlbWl0 IGFueXRoaW5nLiAoRm9ydHVuYXRlbHksIE5PVCBOVUxMCisJCSAqIGNvbnN0cmFpbnRzIGNhbm5v dCBiZSB0YWJsZSBjb25zdHJhaW50cy4pCisJCSAqCisJCSAqIEluIHRoZSBBTFRFUiBUQUJMRSBj YXNlcywgd2UgYWxzbyBhZGQgYSBOT1QgTlVMTCBpZiB0aGUgY29sRGVmIGlzCisJCSAqIG1hcmtl ZCBpc19ub3RfbnVsbC4KKwkJICovCisJCXNhd19ub3RudWxsID0gZmFsc2U7CisJCWZvcmVhY2go Y2VsbCwgY29sZGVmLT5jb25zdHJhaW50cykKKwkJeworCQkJQ29uc3RyYWludCAqY29uc3RyID0g KENvbnN0cmFpbnQgKikgbGZpcnN0KGNlbGwpOworCisJCQlpZiAoY29uc3RyLT5jb250eXBlID09 IENPTlNUUl9OT1ROVUxMKQorCQkJeworCQkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKwkJCQlicmVh azsKKwkJCX0KKwkJfQorCisJCWlmIChpc19hbHRlciAmJiBjb2xkZWYtPmlzX25vdF9udWxsKQor CQkJc2F3X25vdG51bGwgPSB0cnVlOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7 bm90X251bGx9cyIsICJub3RfbnVsbCIsCisJCQkJCQkJIHNhd19ub3RudWxsID8gIk5PVCBOVUxM IiA6ICIiKTsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwkJaWYgKGF0 dHJGb3JtLT5hdHRoYXNkZWYgJiYKKwkJCWNvbGRlZi0+Z2VuZXJhdGVkICE9IEFUVFJJQlVURV9H RU5FUkFURURfU1RPUkVEKQorCQl7CisJCQljaGFyCSAgICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9 IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJ CQkJCQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wX29iaiwgIiV7ZGVmYXVsdH1zIiwgImRlZmF1bHQiLCBkZWZzdHIpOworCQl9CisJCWVsc2UK KwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiJXtkZWZhdWx0fXMiLCB0bXBfb2JqKTsKKworCQkvKiBJREVOVElUWSBDT0xVTU4gKi8K KwkJaWYgKGNvbGRlZi0+aWRlbnRpdHkpCisJCXsKKwkJCU9pZAkJCWF0dG5vID0gZ2V0X2F0dG51 bShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKworCQkJc2VxcmVsaWQgPSBnZXRJZGVudGl0eVNl cXVlbmNlKHJlbGlkLCBhdHRubywgZmFsc2UpOworCQl9CisKKwkJaWYgKE9pZElzVmFsaWQoc2Vx cmVsaWQpKQorCQl7CisJCQl0bXBfb2JqID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzZXFyZWxp ZCwgY29sZGVmLT5pZGVudGl0eSwgaXNfYWx0ZXIpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiJXtpZGVudGl0eV9jb2x1bW59cyIsIHRtcF9vYmopOworCQl9CisKKwkJLyogR0VORVJB VEVEIENPTFVNTiBFWFBSRVNTSU9OICovCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiR0VORVJB VEVEIEFMV0FZUyBBUyIpOworCQlpZiAoY29sZGVmLT5nZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dF TkVSQVRFRF9TVE9SRUQpCisJCXsKKwkJCWNoYXIJICAgKmRlZnN0cjsKKworCQkJZGVmc3RyID0g UmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJ CQkJCQkJCQkgIGRwY29udGV4dCwgZXhwcnMpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w X29iaiwgIiV7Z2VuZXJhdGlvbl9leHByfXMgU1RPUkVEIiwKKwkJCQkJCQkJICJnZW5lcmF0aW9u X2V4cHIiLCBkZWZzdHIpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBf b2JqKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2dlbmVyYXRlZF9jb2x1bW59 cyIsIHRtcF9vYmopOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKworCXJldHVy biByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ29sdW1uRGVmIG5vZGUgd2l0aGluIGEgdHlw ZWQgdGFibGUgY3JlYXRpb24uCVRoaXMgaXMgc2ltcGxlcgorICogdGhhbiB0aGUgcmVndWxhciBj YXNlLCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gZW1pdCB0aGUgdHlwZSBkZWNsYXJhdGlvbiwK KyAqIGNvbGxhdGlvbiwgb3IgZGVmYXVsdC4gIEhlcmUgd2Ugb25seSByZXR1cm4gc29tZXRoaW5n IGlmIHRoZSBjb2x1bW4gaXMgYmVpbmcKKyAqIGRlY2xhcmVkIE5PVCBOVUxMLgorICoKKyAqIEFz IGluIGRlcGFyc2VfQ29sdW1uRGVmLCBhbnkgb3RoZXIgY29uc3RyYWludCBpcyBwcm9jZXNzZWQg ZWxzZXdoZXJlLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiAle25hbWV9SSBXSVRIIE9QVElP TlMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1zLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0NvbHVtbkRlZl90eXBlZChSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBD b2x1bW5EZWYgKmNvbGRlZikKK3sKKwlPYmpUcmVlICAgICpyZXQgPSBOVUxMOworCU9ialRyZWUg ICAgKnRtcF9vYmo7CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsK KwlIZWFwVHVwbGUJYXR0clR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJ CQl0eXBpZDsKKwlpbnQzMgkJdHlwbW9kOworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlz YXdfbm90bnVsbDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJYXR0clR1cCA9IFNlYXJjaFN5c0Nh Y2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQoYXR0clR1cCkpCisJCWVsb2coRVJST1IsICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBm b3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCBy ZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVw KTsKKworCWdldF9hdHR0eXBldHlwbW9kY29sbChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJ CQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlwY29sbGF0aW9uKTsKKworCS8qCisJICogU2VhcmNo IGZvciBhIE5PVCBOVUxMIGRlY2xhcmF0aW9uLiAgQXMgaW4gZGVwYXJzZV9Db2x1bW5EZWYsIHdl IHJlbHkgb24KKwkgKiBmaW5kaW5nIGEgY29uc3RyYWludCBvbiB0aGUgY29sdW1uIHJhdGhlciB0 aGFuIGNvbGRlZi0+aXNfbm90X251bGwuCisJICogKFRoaXMgcm91dGluZSBpcyBuZXZlciB1c2Vk IGZvciBBTFRFUiBjYXNlcy4pCisJICovCisJc2F3X25vdG51bGwgPSBmYWxzZTsKKwlmb3JlYWNo KGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJeworCQlDb25zdHJhaW50ICpjb25zdHIgPSAo Q29uc3RyYWludCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBD T05TVFJfTk9UTlVMTCkKKwkJeworCQkJc2F3X25vdG51bGwgPSB0cnVlOworCQkJYnJlYWs7CisJ CX0KKwl9CisKKwlpZiAoIXNhd19ub3RudWxsICYmICFhdHRyRm9ybS0+YXR0aGFzZGVmKQorCXsK KwkJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl0bXBf b2JqID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZikK Kwl7CisJCWNoYXIJICAgKmRlZnN0cjsKKworCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRl ZmF1bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJICBkcGNvbnRleHQs IE5VTEwpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2RlZmF1bHR9cyIs ICJkZWZhdWx0IiwgZGVmc3RyKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1w X29iaik7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiJXtuYW1lfUkgV0lUSCBPUFRJT05TICV7 bm90X251bGx9cyAle2RlZmF1bHR9cyIsIDQsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiY29sdW1uIiwKKwkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFt ZSwKKwkJCQkJCSAibm90X251bGwiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIHNhd19ub3RudWxs ID8gIk5PVCBOVUxMIiA6ICIiLAorCQkJCQkJICJkZWZhdWx0IiwgT2JqVHlwZU9iamVjdCwgdG1w X29iaik7CisKKwkvKiBHZW5lcmF0ZWQgY29sdW1ucyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0eXBl ZCB0YWJsZXMsIHNvIHdlIGFyZSBkb25lICovCisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7 CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSB0aGUgZGVmaW5pdGlvbiBvZiBj b2x1bW4gaWRlbnRpdHkuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBHRU5FUkFURUQg JXtvcHRpb259cyAle2lkZW50aXR5X3R5cGV9cyAle3NlcV9kZWZpbml0aW9uOiB9cworICogCU9S CisgKiBHRU5FUkFURUQgJXtvcHRpb259cyBBUyBJREVOVElUWSAle2lkZW50aXR5X3R5cGV9cyAo ICV7c2VxX2RlZmluaXRpb246IH1zICkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9D b2x1bW5JZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJfdGFi bGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKmlkZW50X29iajsKKwlMaXN0 CSAgICplbGVtcyA9IE5JTDsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxlOwor CUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0 YTsKKwljaGFyCSAgICppZGVudGZtdDsKKwljaGFyCSAgICpvYmpmbXQ7CisKKwlpZiAoYWx0ZXJf dGFibGUpCisJeworCQlpZGVudGZtdCA9ICJTRVQgR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIl e29wdGlvbn1zIjsKKwl9CisJZWxzZQorCXsKKwkJaWRlbnRmbXQgPSAiR0VORVJBVEVEICI7CisJ CW9iamZtdCA9ICIle29wdGlvbn1zIEFTIElERU5USVRZIjsKKwl9CisKKwlpZGVudF9vYmogPSBu ZXdfb2JqdHJlZShpZGVudGZtdCk7CisKKwlpZiAoaWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5U SVRZX0FMV0FZUykKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoaWRlbnRfb2JqLCBvYmpmbXQsICJv cHRpb24iLCAiQUxXQVlTIik7CisJZWxzZSBpZiAoaWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5U SVRZX0JZX0RFRkFVTFQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50X29iaiwgb2JqZm10 LCAib3B0aW9uIiwgIkJZIERFRkFVTFQiKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChp ZGVudF9vYmopOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHlfdHlwZX1zIiwg MSwKKwkJCQkJCSAiaWRlbnRpdHlfdHlwZSIsIE9ialR5cGVPYmplY3QsIGlkZW50X29iaik7CisK KwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7 CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELCBzZXFyZWxpZCk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlIHdpdGggT0lEICV1IiwKKwkJCSBzZXFyZWxpZCk7CisK KwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisJc2Vx ZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMoc2VxcmVsaWQpOworCisJLyogRGVmaW5pdGlvbiBl bGVtZW50cyAqLworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ2FjaGUoc2Vx Zm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2Vx X0N5Y2xlKHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBk ZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0g bGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWludmFsdWUoc2VxZm9ybSwgYWx0ZXJfdGFibGUp KTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01heHZhbHVlKHNlcWZvcm0s IGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9TdGFy dHdpdGgoc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRl cGFyc2VfU2VxX1Jlc3RhcnQoc2VxZGF0YSkpOworCS8qIFdlIHB1cnBvc2VmdWxseSBkbyBub3Qg ZW1pdCBPV05FRCBCWSBoZXJlICovCisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWFwcGVuZF9hcnJh eV9vYmplY3QocmV0LCAiJXtzZXFfZGVmaW5pdGlvbjogfXMiLCBlbGVtcyk7CisJZWxzZQorCQlh cHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiggJXtzZXFfZGVmaW5pdGlvbjogfXMgKSIsIGVsZW1z KTsKKworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gcmV0 OworfQorCisvKgorICogLi4uIEFMVEVSIENPTFVNTiAuLi4gU0VUL1JFU0VUICguLi4pCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFJFU0VUfFNFVCAo JXtvcHRpb25zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uU2V0 T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpCit7CisJTGlzdAkgICAqc2V0cyA9IE5JTDsK KwlMaXN0Q2VsbCAgICpjZWxsOworCU9ialRyZWUgICAgKnJldDsKKwlib29sCQlpc19yZXNldCA9 IHN1YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNldE9wdGlvbnM7CisKKwlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgJXtvcHRpb259cyIsIDIsCisJCQkJCQkgImNv bHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCSAib3B0aW9uIiwgT2Jq VHlwZVN0cmluZywgaXNfcmVzZXQgPyAiUkVTRVQiIDogIlNFVCIpOworCisJZm9yZWFjaChjZWxs LCAoTGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7CisJCURlZkVsZW0gICAgKmVsZW07CisJCU9ialRy ZWUgICAgKnNldDsKKworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlzZXQg PSBkZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNfcmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChzZXRz LCBuZXdfb2JqZWN0X29iamVjdChzZXQpKTsKKwl9CisKKwlBc3NlcnQoc2V0cyk7CisJYXBwZW5k X2FycmF5X29iamVjdChyZXQsICIoJXtvcHRpb25zOiwgfXMpIiwgc2V0cyk7CisKKwlyZXR1cm4g cmV0OworfQorCisvKgorICogLi4uIEFMVEVSIENPTFVNTiAuLi4gU0VUL1JFU0VUICguLi4pCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUmVsU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpz dWJjbWQpCit7CisJTGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWJv b2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0UmVsT3B0aW9uczsKKwor CWZvcmVhY2goY2VsbCwgKExpc3QgKikgc3ViY21kLT5kZWYpCisJeworCQlEZWZFbGVtICAgICpl bGVtOworCQlPYmpUcmVlICAgICpzZXQ7CisKKwkJZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChj ZWxsKTsKKwkJc2V0ID0gZGVwYXJzZV9EZWZFbGVtKGVsZW0sIGlzX3Jlc2V0KTsKKwkJc2V0cyA9 IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3Qoc2V0KSk7CisJfQorCisJQXNzZXJ0KHNl dHMpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCIle3NldF9yZXNldH1zICgle29wdGlvbnM6 LCB9cykiLCAyLAorCQkJCQkJICAic2V0X3Jlc2V0IiwgT2JqVHlwZVN0cmluZywgaXNfcmVzZXQg PyAiUkVTRVQiIDogIlNFVCIsCisJCQkJCQkgICJvcHRpb25zIiwgT2JqVHlwZUFycmF5LCBzZXRz KTsKK30KKworLyoKKyAqIERlcGFyc2UgRGVmRWxlbXMsIGFzIHVzZWQgZS5nLiBieSBBTFRFUiBD T0xVTU4gLi4uIFNFVCwgaW50byBhIGxpc3Qgb2YgU0VUCisgKiAoLi4uKSAgb3IgUkVTRVQgKC4u LikgY29udGVudHMuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqICV7bGFiZWx9cyA9ICV7dmFs dWV9TAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxl bSwgYm9vbCBpc19yZXNldCkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqb3B0 bmFtZSA9IG5ld19vYmp0cmVlKCIiKTsKKworCWlmIChlbGVtLT5kZWZuYW1lc3BhY2UgIT0gTlVM TCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qob3B0bmFtZSwgIiV7c2NoZW1hfUkuIiwgInNjaGVt YSIsCisJCQkJCQkJIGVsZW0tPmRlZm5hbWVzcGFjZSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVj dChvcHRuYW1lLCAiJXtsYWJlbH1JIiwgImxhYmVsIiwgZWxlbS0+ZGVmbmFtZSk7CisKKwlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiJXtsYWJlbH1zIiwgMSwKKwkJCQkJCSAibGFiZWwiLCBPYmpUeXBl T2JqZWN0LCBvcHRuYW1lKTsKKworCWlmICghaXNfcmVzZXQpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJldCwgIj0gJXt2YWx1ZX1MIiwgInZhbHVlIiwKKwkJCQkJCQkgZWxlbS0+YXJnID8gZGVm R2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6 ICJGQUxTRSIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIElOSEVS SVRTIHJlbGF0aW9ucy4KKyAqCisgKiBHaXZlbiBhIHRhYmxlIE9JRCwgcmV0dXJuIGEgc2NoZW1h LXF1YWxpZmllZCB0YWJsZSBsaXN0IHJlcHJlc2VudGluZworICogdGhlIHBhcmVudCB0YWJsZXMu CisgKi8KK3N0YXRpYyBMaXN0ICoKK2RlcGFyc2VfSW5oUmVsYXRpb25zKE9pZCBvYmplY3RJZCkK K3sKKwlMaXN0CSAgICpwYXJlbnRzID0gTklMOworCVJlbGF0aW9uCWluaFJlbDsKKwlTeXNTY2Fu RGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleTsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwlpbmhS ZWwgPSB0YWJsZV9vcGVuKEluaGVyaXRzUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisK KwlTY2FuS2V5SW5pdCgma2V5LAorCQkJCUFudW1fcGdfaW5oZXJpdHNfaW5ocmVsaWQsCisJCQkJ QlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ob2Jq ZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oaW5oUmVsLCBJbmhlcml0c1Jl bGlkU2Vxbm9JbmRleElkLAorCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisKKwl3aGls ZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsK KwkJT2JqVHJlZSAgICAqcGFyZW50OworCQlGb3JtX3BnX2luaGVyaXRzIGZvcm1JbmggPSAoRm9y bV9wZ19pbmhlcml0cykgR0VUU1RSVUNUKHR1cGxlKTsKKworCQlwYXJlbnQgPSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkgZm9ybUlu aC0+aW5ocGFyZW50KTsKKwkJcGFyZW50cyA9IGxhcHBlbmQocGFyZW50cywgbmV3X29iamVjdF9v YmplY3QocGFyZW50KSk7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9j bG9zZShpbmhSZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHBhcmVudHM7Cit9CisK Ky8qCisgKiBEZXBhcnNlIHRoZSBPTiBDT01NSVQgLi4uIGNsYXVzZSBmb3IgQ1JFQVRFIC4uLiBU RU1QT1JBUlkgLi4uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIE9OIENPTU1JVCAle29uX2Nv bW1pdF92YWx1ZX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfT25Db21taXRDbGF1 c2UoT25Db21taXRBY3Rpb24gb3B0aW9uKQoreworCU9ialRyZWUgICAgKnJldCAgPSBuZXdfb2Jq dHJlZSgiT04gQ09NTUlUIik7CisJc3dpdGNoIChvcHRpb24pCisJeworCQljYXNlIE9OQ09NTUlU X0RST1A6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle29uX2NvbW1pdF92YWx1ZX1z IiwKKwkJCQkJCQkJICJvbl9jb21taXRfdmFsdWUiLCAiRFJPUCIpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBPTkNPTU1JVF9ERUxFVEVfUk9XUzoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwg IiV7b25fY29tbWl0X3ZhbHVlfXMiLAorCQkJCQkJCQkgIm9uX2NvbW1pdF92YWx1ZSIsICJERUxF VEUgUk9XUyIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPTkNPTU1JVF9QUkVTRVJWRV9ST1dTOgor CQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIsCisJCQkJ CQkJCSAib25fY29tbWl0X3ZhbHVlIiwgIlBSRVNFUlZFIFJPV1MiKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgT05DT01NSVRfTk9PUDoKKwkJCWFwcGVuZF9udWxsX29iamVjdChyZXQsICIle29uX2Nv bW1pdF92YWx1ZX1zIik7CisJCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKwkJCWJyZWFrOwor CX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBDQUNI RSBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBDQUNIRSAle3ZhbHVlfXMK KyAqIE9SCisgKiBDQUNIRSAle3ZhbHVlfQorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgor ZGVwYXJzZV9TZXFfQ2FjaGUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3Rh YmxlKQoreworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAq Zm10OworCisJZm10ID0gYWx0ZXJfdGFibGUgPyAiU0VUIENBQ0hFICV7dmFsdWV9cyIgOiAiQ0FD SEUgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0 YS0+c2VxY2FjaGUpOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgImNhY2hlIiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3Ry aW5nLCB0bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8q CisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBDWUNMRSBvcHRpb24uCisgKgorICogVmVyYm9zZSBz eW50YXgKKyAqIFNFVCAle25vfXMgQ1lDTEUKKyAqIE9SCisgKiAle25vfXMgQ1lDTEUKKyAqLwor c3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0N5Y2xlKEZvcm1fcGdfc2VxdWVu Y2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hh cgkgICAqZm10OworCisJZm10ID0gYWx0ZXJfdGFibGUgPyAiU0VUICV7bm99cyBDWUNMRSIgOiAi JXtub31zIENZQ0xFIjsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImN5Y2xlIiwKKwkJCQkJCSAibm8iLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJIHNlcWRhdGEtPnNlcWN5Y2xlID8gIiIgOiAiTk8iKTsKKworCXJldHVybiBu ZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2Ug SU5DUkVNRU5UIEJZIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU0VUIElOQ1JF TUVOVCBCWSAle3ZhbHVlfXMKKyAqIE9SCisgKiBJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zCisgKi8K K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShGb3JtX3Bn X3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0 OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJs ZSA/ICJTRVQgSU5DUkVNRU5UIEJZICV7dmFsdWV9cyIgOiAiSU5DUkVNRU5UIEJZICV7dmFsdWV9 cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWluY3Jl bWVudCk7CisJcmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAic2VxaW5jcmVtZW50IiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3Ry aW5nLCB0bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8q CisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBNQVhWQUxVRSBvcHRpb24uCisgKgorICogVmVyYm9z ZSBzeW50YXgKKyAqIFNFVCBNQVhWQUxVRSAle3ZhbHVlfXMKKyAqIE9SCisgKiBNQVhWQUxVRSAl e3ZhbHVlfXMKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01heHZh bHVlKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpU cmVlICAgICpyZXQ7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9 IGFsdGVyX3RhYmxlID8gIlNFVCBNQVhWQUxVRSAle3ZhbHVlfXMiIDogIk1BWFZBTFVFICV7dmFs dWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1h eCk7CisJcmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAibWF4dmFsdWUiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRt cHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERl cGFyc2UgdGhlIHNlcXVlbmNlIE1JTlZBTFVFIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRh eAorICogU0VUIE1JTlZBTFVFICV7dmFsdWV9cworICogT1IKKyAqIE1JTlZBTFVFICV7dmFsdWV9 cworICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfTWludmFsdWUoRm9y bV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAg KnJldDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJZm10ID0gYWx0ZXJf dGFibGUgPyAiU0VUIE1JTlZBTFVFICV7dmFsdWV9cyIgOiAiTUlOVkFMVUUgJXt2YWx1ZX1zIjsK KworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxbWluKTsKKwly ZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJtaW52YWx1ZSIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsK KworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0 aGUgc2VxdWVuY2UgUkVTVEFSVCBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFJF U1RBUlQgJXt2YWx1ZX1zCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1Nl cV9SZXN0YXJ0KEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhKQoreworCU9ialRyZWUgICAg KnJldDsKKwljaGFyCSAgICp0bXBzdHI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JN QVQsIHNlcWRhdGEtPmxhc3RfdmFsdWUpOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJSRVNUQVJU ICV7dmFsdWV9cyIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0YXJ0 IiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCisJcmV0dXJuIG5l d19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBB UyBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFTICV7aWRlbnRpdHl9RAorICov CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfQXMoRGVmRWxlbSAqZWxlbSkK K3sKKwlPYmpUcmVlICAgICpyZXQ7CisJVHlwZQkJbGlrZVR5cGU7CisJRm9ybV9wZ190eXBlIGxp a2VGb3JtOworCisJbGlrZVR5cGUgPSB0eXBlbmFtZVR5cGUoTlVMTCwgZGVmR2V0VHlwZU5hbWUo ZWxlbSksIE5VTEwpOworCWxpa2VGb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKGxpa2VU eXBlKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBUyAle2lkZW50aXR5fUQiLCAxLAorCQkJ CQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKGxpa2VGb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIobGlr ZUZvcm0tPnR5cG5hbWUpKSk7CisJUmVsZWFzZVN5c0NhY2hlKGxpa2VUeXBlKTsKKworCXJldHVy biBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVu Y2UgU1RBUlQgV0lUSCBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBTVEFS VCBXSVRIICV7dmFsdWV9cworICogT1IKKyAqIFNUQVJUIFdJVEggJXt2YWx1ZX1zCisgKi8KK3N0 YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9TdGFydHdpdGgoRm9ybV9wZ19zZXF1 ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKnJldDsKKwlj aGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJZm10ID0gYWx0ZXJfdGFibGUgPyAi U0VUIFNUQVJUIFdJVEggJXt2YWx1ZX1zIiA6ICJTVEFSVCBXSVRIICV7dmFsdWV9cyI7CisKKwl0 bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcXN0YXJ0KTsKKwlyZXQg PSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJzdGFydCIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJl dHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlw ZSBTVE9SQUdFIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU1RPUkFHRT0le3Zh bHVlfXMKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9TdG9yYWdl KEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKwlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiU1RPUkFHRSA9ICV7dmFsdWV9cyIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJzdG9yYWdlIiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCBn ZXRfdHlwZV9zdG9yYWdlKHR5cEZvcm0tPnR5cHN0b3JhZ2UpKTsKKworCXJldHVybiBuZXdfb2Jq ZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBSRUNFSVZFIG9w dGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogUkVDRUlWRT0le3Byb2NlZHVyZX1ECisg Ki8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfUmVjZWl2ZShGb3JtX3Bn X3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiUkVDRUlWRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVj ZWl2ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHJlY2VpdmUpKQorCQlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBG b3JtLT50eXByZWNlaXZlKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKwor CXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUg dHlwZSBTRU5EIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU0VORD0le3Byb2Nl ZHVyZX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU2VuZChG b3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiU0VORD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi c2VuZCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHNlbmQpKQorCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChyZXQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3Jt LT50eXBzZW5kKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCXJldHVy biBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSB0 eXBtb2RfaW4gb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBUWVBNT0RfSU49JXtw cm9jZWR1cmV9RAorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1R5 cG1vZF9JbihGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisKKwly ZXQgPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX0lOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJ0eXBtb2RfaW4iKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBt b2RpbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZGluKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3By ZXNlbnQocmV0KTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgor ICogRGVwYXJzZSB0aGUgdHlwZSB0eXBtb2Rfb3V0IG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogVFlQTU9EX09VVD0le3Byb2NlZHVyZX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqCitkZXBhcnNlX1R5cGVfVHlwbW9kX091dChGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sK KwlPYmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX09VVD0i LCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX291dCIpOworCWlm IChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZG91dCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZG91 dCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgYW5hbHl6ZSBv cHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFOQUxZWkU9JXtwcm9jZWR1cmV9RAor ICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX0FuYWx5emUoRm9ybV9w Z190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkFOQUxZWkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImFu YWx5emUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBhbmFseXplKSkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QocmV0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlw Rm9ybS0+dHlwYW5hbHl6ZSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisK KwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhl IHR5cGUgc3Vic2NyaXB0IG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU1VCU0NS SVBUPSV7cHJvY2VkdXJlfUQKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2Vf VHlwZV9TdWJzY3JpcHQoRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0 OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlNVQlNDUklQVD0iLCAxLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAic3Vic2NyaXB0Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9y bS0+dHlwc3Vic2NyaXB0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtwcm9jZWR1 cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwc3Vic2NyaXB0KSk7CisJZWxzZQor CQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChy ZXQpOworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxFIGRlcGFyc2luZy4K KyAqCisgKiBEZWFsIHdpdGggYWxsIHRoZSB0YWJsZSBlbGVtZW50cyAoY29sdW1ucyBhbmQgY29u c3RyYWludHMpLgorICoKKyAqIE5vdGUgd2UgaWdub3JlIGNvbnN0cmFpbnRzIGluIHRoZSBwYXJz ZSBub2RlIGhlcmU7IHRoZXkgYXJlIGV4dHJhY3RlZCBmcm9tCisgKiBzeXN0ZW0gY2F0YWxvZ3Mg aW5zdGVhZC4KKyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZV9UYWJsZUVsZW1lbnRzKFJlbGF0 aW9uIHJlbGF0aW9uLCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBMaXN0ICpkcGNvbnRleHQsCisJCQkJ CSAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUpCit7CisJTGlzdAkgICAqZWxlbWVudHMgPSBO SUw7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCB0YWJsZUVsZW1lbnRzKQorCXsK KwkJTm9kZQkgICAqZWx0ID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKKworCQlzd2l0Y2ggKG5vZGVU YWcoZWx0KSkKKwkJeworCQkJY2FzZSBUX0NvbHVtbkRlZjoKKwkJCQl7CisJCQkJCU9ialRyZWUg ICAgKnRyZWU7CisKKwkJCQkJdHJlZSA9IHR5cGVkID8KKwkJCQkJCWRlcGFyc2VfQ29sdW1uRGVm X3R5cGVkKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJCQkoQ29sdW1uRGVmICopIGVs dCkgOgorCQkJCQkJZGVwYXJzZV9Db2x1bW5EZWYocmVsYXRpb24sIGRwY29udGV4dCwKKwkJCQkJ CQkJCQkgIGNvbXBvc2l0ZSwgKENvbHVtbkRlZiAqKSBlbHQsCisJCQkJCQkJCQkJICBmYWxzZSwg TlVMTCk7CisJCQkJCWlmICh0cmVlICE9IE5VTEwpCisJCQkJCQllbGVtZW50cyA9IGxhcHBlbmQo ZWxlbWVudHMsIG5ld19vYmplY3Rfb2JqZWN0KHRyZWUpKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJ CQljYXNlIFRfQ29uc3RyYWludDoKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhF UlJPUiwgImludmFsaWQgbm9kZSB0eXBlICVkIiwgbm9kZVRhZyhlbHQpKTsKKwkJfQorCX0KKwor CXJldHVybiBlbGVtZW50czsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTZXFTdG10Lgor ICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0 ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNv bW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMg U0VRVUVOQ0UgJXtpZGVudGl0eX1ECisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3Jl YXRlU2VxU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAg ICpyZXQ7CisJUmVsYXRpb24JcmVsYXRpb247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRh dGE7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOwor CVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQ3JlYXRlU2VxU3RtdCAqY3Jl YXRlU2VxU3RtdCA9IChDcmVhdGVTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2Vx dWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSAodmlhIENSRUFURSBU QUJMRSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJICovCisJaWYg KGNyZWF0ZVNlcVN0bXQtPmZvcl9pZGVudGl0eSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXFkYXRh ID0gZ2V0X3NlcXVlbmNlX3ZhbHVlcyhvYmplY3RJZCk7CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9u X29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJcmVsID0gdGFibGVfb3BlbihTZXF1 ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2VhcmNoU3lz Q2FjaGVDb3B5MShTRVFSRUxJRCwKKwkJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJ ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBzZXF1ZW5jZSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0 SWQpOworCisJc2VxZm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUp OworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWVsZW1zID0gbGFwcGVuZChlbGVtcywg ZGVwYXJzZV9TZXFfQ2FjaGUoc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxl bXMsIGRlcGFyc2VfU2VxX0N5Y2xlKHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5k KGVsZW1zLCBkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1z ID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWludmFsdWUoc2VxZm9ybSwgZmFsc2UpKTsK KwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01heHZhbHVlKHNlcWZvcm0sIGZh bHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9TdGFydHdpdGgoc2Vx Zm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3Rh cnQoc2VxZGF0YSkpOworCisJLyogV2UgcHVycG9zZWZ1bGx5IGRvIG5vdCBlbWl0IE9XTkVEIEJZ IGhlcmUgKi8KKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1z IFNFUVVFTkNFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAle2RlZmluaXRpb246IH1z IiwgNCwKKwkJCQkJCSAicGVyc2lzdGVuY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9w ZXJzaXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpLAorCQkJCQkJ ICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBjcmVhdGVTZXFTdG10LT5p Zl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkgImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24t PnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWxhdGlvbikpLAorCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZUFycmF5LCBlbGVt cyk7CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXJlbGF0aW9uX2Ns b3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoK KyAqIERlcGFyc2UgYW4gSW5kZXhTdG10LgorICoKKyAqIEdpdmVuIGFuIGluZGV4IE9JRCBhbmQg dGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVw cmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIElmIHRoZSBpbmRleCBjb3Jy ZXNwb25kcyB0byBhIGNvbnN0cmFpbnQsIE5VTEwgaXMgcmV0dXJuZWQuCisgKgorICogVmVyYm9z ZSBzeW50YXgKKyAqIENSRUFURSAle3VuaXF1ZX1zIElOREVYICV7Y29uY3VycmVudGx5fXMgJXtp Zl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgT04KKyAqICV7dGFibGV9RCBVU0lORyAle2luZGV4X2Ft fXMgJXtkZWZpbml0aW9ufXMgJXt3aXRofXMgJXt0YWJsZXNwYWNlfXMKKyAqICV7d2hlcmVfY2xh dXNlfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9JbmRleFN0bXQoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJSW5kZXhTdG10ICAqbm9kZSA9IChJbmRleFN0bXQg KikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOwor CVJlbGF0aW9uCWlkeHJlbDsKKwlSZWxhdGlvbgloZWFwcmVsOworCWNoYXIJICAgKmluZGV4X2Ft OworCWNoYXIJICAgKmRlZmluaXRpb247CisJY2hhcgkgICAqcmVsb3B0aW9uczsKKwljaGFyCSAg ICp0YWJsZXNwYWNlOworCWNoYXIJICAgKndoZXJlQ2xhdXNlOworCisJaWYgKG5vZGUtPnByaW1h cnkgfHwgbm9kZS0+aXNjb25zdHJhaW50KQorCXsKKwkJLyoKKwkJICogSW5kZXhlcyBmb3IgUFJJ TUFSWSBLRVkgYW5kIG90aGVyIGNvbnN0cmFpbnRzIGFyZSBvdXRwdXQKKwkJICogc2VwYXJhdGVs eTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJCSAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZHhy ZWwgPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCWhlYXByZWwg PSByZWxhdGlvbl9vcGVuKGlkeHJlbC0+cmRfaW5kZXgtPmluZHJlbGlkLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKG9iamVjdElkLAorCQkJCQkJCSAmaW5k ZXhfYW0sICZkZWZpbml0aW9uLCAmcmVsb3B0aW9ucywKKwkJCQkJCQkgJnRhYmxlc3BhY2UsICZ3 aGVyZUNsYXVzZSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7dW5pcXVlfXMg SU5ERVggJXtjb25jdXJyZW50bHl9cyAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSBPTiAle3Rh YmxlfUQgVVNJTkcgJXtpbmRleF9hbX1zICV7ZGVmaW5pdGlvbn1zIiwgNywKKwkJCQkJCSAidW5p cXVlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT51bmlxdWUgPyAiVU5JUVVFIiA6ICIi LAorCQkJCQkJICJjb25jdXJyZW50bHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmNv bmN1cnJlbnQgPyAiQ09OQ1VSUkVOVExZIiA6ICIiLAorCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElT VFMiIDogIiIsCisJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIFJlbGF0aW9u R2V0UmVsYXRpb25OYW1lKGlkeHJlbCksCisJCQkJCQkgInRhYmxlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoaGVhcHJlbC0+cmRfcmVsLT5yZWxuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGhlYXByZWwpKSwK KwkJCQkJCSAiaW5kZXhfYW0iLCBPYmpUeXBlU3RyaW5nLCBpbmRleF9hbSwKKwkJCQkJCSAiZGVm aW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsIGRlZmluaXRpb24pOworCisJLyogcmVsb3B0aW9ucyAq LworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCWlmIChyZWxvcHRpb25zKQorCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiKCV7b3B0c31zKSIsICJvcHRzIiwgcmVsb3B0 aW9ucyk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXt3aXRofXMiLCB0bXBfb2JqKTsKKworCS8qIHRhYmxlc3BhY2Ug Ki8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIlRBQkxFU1BBQ0UiKTsKKwlpZiAodGFibGVzcGFj ZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7dGFibGVzcGFjZX1zIiwgInRh Ymxlc3BhY2UiLCB0YWJsZXNwYWNlKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBf b2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcF9v YmopOworCisJLyogV0hFUkUgY2xhdXNlICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJXSEVS RSIpOworCWlmICh3aGVyZUNsYXVzZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwg IiV7d2hlcmV9cyIsICJ3aGVyZSIsIHdoZXJlQ2xhdXNlKTsKKwllbHNlCisJCWFwcGVuZF9ub3Rf cHJlc2VudCh0bXBfb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3doZXJlX2Ns YXVzZX1zIiwgdG1wX29iaik7CisKKwl0YWJsZV9jbG9zZShpZHhyZWwsIEFjY2Vzc1NoYXJlTG9j ayk7CisJdGFibGVfY2xvc2UoaGVhcHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU3RtdCAoQ1JFQVRFIFRBQkxFKS4KKyAq CisgKiBHaXZlbiBhIHRhYmxlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0 LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5k LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxF ICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCBbT0YKKyAqICV7b2ZfdHlwZX1UIHwgUEFS VElUSU9OIE9GICV7cGFyZW50X2lkZW50aXR5fURdICV7dGFibGVfZWxlbWVudHN9cworICogJXtp bmhlcml0c31zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVz ZX1zCisgKiAle29uX2NvbW1pdH1zICV7dGFibGVzcGFjZX1zCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQ3JlYXRlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sK KwlDcmVhdGVTdG10ICpub2RlID0gKENyZWF0ZVN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9u CXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlM aXN0CSAgICpkcGNvbnRleHQ7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9v Ymo7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJcmV0ID0g bmV3X29ianRyZWVfVkEoIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhp c3RzfXMgJXtpZGVudGl0eX1EIiwgMywKKwkJCQkJCSAicGVyc2lzdGVuY2UiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJIGdldF9wZXJzaXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVy c2lzdGVuY2UpLAorCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo cmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShyZWxhdGlvbikpKTsKKworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4 dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pLAorCQkJCQkJCQkJb2JqZWN0 SWQpOworCisJLyoKKwkgKiBUeXBlZCB0YWJsZXMgYW5kIHBhcnRpdGlvbnMgdXNlIGEgc2xpZ2h0 bHkgZGlmZmVyZW50IGZvcm1hdCBzdHJpbmc6IHdlCisJICogbXVzdCBub3QgcHV0IHRhYmxlX2Vs ZW1lbnRzIHdpdGggcGFyZW50cyBkaXJlY3RseSBpbiB0aGUgZm10IHN0cmluZywKKwkgKiBiZWNh dXNlIGlmIHRoZXJlIGFyZSBubyBvcHRpb25zIHRoZSBwYXJlbnRoZXNlcyBtdXN0IG5vdCBiZSBl bWl0dGVkOworCSAqIGFuZCBhbHNvLCB0eXBlZCB0YWJsZXMgZG8gbm90IGFsbG93IGZvciBpbmhl cml0YW5jZS4KKwkgKi8KKwlpZiAobm9kZS0+b2ZUeXBlbmFtZSB8fCBub2RlLT5wYXJ0Ym91bmQp CisJeworCQlMaXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogV2UgY2FuJ3Qg cHV0IHRhYmxlIGVsZW1lbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nIGFzIGFuIGFycmF5 CisJCSAqIHN1cnJvdW5kZWQgYnkgcGFyZW50aGVzZXMgaGVyZSwgYmVjYXVzZSBhbiBlbXB0eSBj bGF1c2Ugd291bGQgY2F1c2UKKwkJICogYSBzeW50YXggZXJyb3IuICBUaGVyZWZvcmUsIHdlIHVz ZSBhbiBpbmRpcmVjdGlvbiBlbGVtZW50IGFuZCBzZXQKKwkJICogcHJlc2VudD1mYWxzZSB3aGVu IHRoZXJlIGFyZSBubyBlbGVtZW50cy4KKwkJICovCisJCWlmIChub2RlLT5vZlR5cGVuYW1lKQor CQl7CisJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfZm9yX3R5cGUocmVsYXRpb24tPnJkX3JlbC0+ cmVsb2Z0eXBlLCAtMSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJPRiAle29mX3R5 cGV9VCIsIHRtcF9vYmopOworCQl9CisJCWVsc2UKKwkJeworCQkJTGlzdAkgICAqcGFyZW50czsK KwkJCU9iakVsZW0gICAgKmVsZW07CisKKwkJCXBhcmVudHMgPSBkZXBhcnNlX0luaFJlbGF0aW9u cyhvYmplY3RJZCk7CisJCQllbGVtID0gKE9iakVsZW0gKikgbGluaXRpYWwocGFyZW50cyk7CisK KwkJCUFzc2VydChsaXN0X2xlbmd0aChwYXJlbnRzKSA9PSAxKTsKKworCQkJYXBwZW5kX2Zvcm1h dF9zdHJpbmcocmV0LCAiUEFSVElUSU9OIE9GIik7CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7cGFyZW50X2lkZW50aXR5fUQiLAorCQkJCQkJCQkgZWxlbS0+dmFsdWUub2JqZWN0 KTsKKwkJfQorCisJCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyhyZWxhdGlvbiwg bm9kZS0+dGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICB0cnVlLCAvKiB0eXBlZCB0 YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOwkvKiBub3QgY29tcG9zaXRlICovCisJCXRhYmxl ZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywgb2JqZWN0SWQsIEludmFsaWRPaWQp OworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCWlmICh0YWJsZWVsdHMpCisJCQlh cHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIoJXtlbGVtZW50czosIH1zKSIsIHRhYmxlZWx0 cyk7CisJCWVsc2UKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKworCQlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIle3RhYmxlX2VsZW1lbnRzfXMiLCB0bXBfb2JqKTsKKwl9CisJ ZWxzZQorCXsKKwkJTGlzdAkgICAqdGFibGVlbHRzID0gTklMOworCisJCS8qCisJCSAqIFRoZXJl IGlzIG5vIG5lZWQgdG8gcHJvY2VzcyBMSUtFIGNsYXVzZXMgc2VwYXJhdGVseTsgdGhleSBoYXZl CisJCSAqIGFscmVhZHkgYmVlbiB0cmFuc2Zvcm1lZCBpbnRvIGNvbHVtbnMgYW5kIGNvbnN0cmFp bnRzLgorCQkgKi8KKworCQkvKgorCQkgKiBQcm9jZXNzIHRhYmxlIGVsZW1lbnRzOiBjb2x1bW4g ZGVmaW5pdGlvbnMgYW5kIGNvbnN0cmFpbnRzLiAgT25seQorCQkgKiB0aGUgY29sdW1uIGRlZmlu aXRpb25zIGFyZSBvYnRhaW5lZCBmcm9tIHRoZSBwYXJzZSBub2RlIGl0c2VsZi4gIFRvCisJCSAq IGdldCBjb25zdHJhaW50cyB3ZSByZWx5IG9uIHBnX2NvbnN0cmFpbnQsIGJlY2F1c2UgdGhlIHBh cnNlIG5vZGUKKwkJICogbWlnaHQgYmUgbWlzc2luZyBzb21lIHRoaW5ncyBzdWNoIGFzIHRoZSBu YW1lIG9mIHRoZSBjb25zdHJhaW50cy4KKwkJICovCisJCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFi bGVFbGVtZW50cyhyZWxhdGlvbiwgbm9kZS0+dGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJ CQkJICBmYWxzZSwJLyogbm90IHR5cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7CS8q IG5vdCBjb21wb3NpdGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVl bHRzLCBvYmplY3RJZCwgSW52YWxpZE9pZCk7CisKKwkJaWYgKHRhYmxlZWx0cykKKwkJCWFwcGVu ZF9hcnJheV9vYmplY3QocmV0LCAiKCV7dGFibGVfZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMp OworCQllbHNlCisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICIoKSIpOworCisJCS8qCisJ CSAqIEFkZCBpbmhlcml0YW5jZSBzcGVjaWZpY2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2Fu IHRoZSBsaXN0IG9mCisJCSAqIHBhcmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2Ug dGhhdCBtYXkgbGFjayB0aGUgYWN0dWFsCisJCSAqIHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFy ZW50IHJlbGF0aW9ucy4gIFJhdGhlciB0aGFuIHRyeWluZyB0bworCQkgKiByZS1yZXNvbHZlIHRo ZW0gZnJvbSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSAq IG1vcmUgYWNjdXJhdGUgYW5kIGNvbnZlbmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRz LgorCQkgKi8KKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJJTkhFUklUUyIpOworCQlpZiAobm9k ZS0+aW5oUmVsYXRpb25zICE9IE5JTCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwg Iigle3BhcmVudHM6LCB9RCkiLCBkZXBhcnNlX0luaFJlbGF0aW9ucyhvYmplY3RJZCkpOworCQll bHNlCisJCXsKKwkJCWFwcGVuZF9udWxsX29iamVjdCh0bXBfb2JqLCAiKCV7cGFyZW50czosIH1E KSIpOworCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCQl9CisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIiV7aW5oZXJpdHN9cyIsIHRtcF9vYmopOworCX0KKworCXRtcF9vYmog PSBuZXdfb2JqdHJlZSgiVEFCTEVTUEFDRSIpOworCWlmIChub2RlLT50YWJsZXNwYWNlbmFtZSkK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7dGFibGVzcGFjZX1JIiwgInRhYmxl c3BhY2UiLAorCQkJCQkJCSBub2RlLT50YWJsZXNwYWNlbmFtZSk7CisJZWxzZQorCXsKKwkJYXBw ZW5kX251bGxfb2JqZWN0KHRtcF9vYmosICIle3RhYmxlc3BhY2V9SSIpOworCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wX29iaik7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dGFi bGVzcGFjZX1zIiwgdG1wX29iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtvbl9j b21taXR9cyIsCisJCQkJCQkgZGVwYXJzZV9PbkNvbW1pdENsYXVzZShub2RlLT5vbmNvbW1pdCkp OworCisJLyogRk9SIFZBTFVFUyBjbGF1c2UgKi8KKwlpZiAobm9kZS0+cGFydGJvdW5kKQorCXsK KwkJLyoKKwkJICogR2V0IHBnX2NsYXNzLnJlbHBhcnRib3VuZC4gV2UgY2Fubm90IHVzZSBwYXJ0 Ym91bmQgaW4gdGhlIHBhcnNldHJlZQorCQkgKiBkaXJlY3RseSBhcyBpdCdzIHRoZSBvcmlnaW5h bCBwYXJ0Ym91bmQgZXhwcmVzc2lvbiB3aGljaCBoYXZlbid0CisJCSAqIGJlZW4gdHJhbnNmb3Jt ZWQuCisJCSAqLworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3BhcnRpdGlvbl9ib3Vu ZH1zIiwgInBhcnRpdGlvbl9ib3VuZCIsCisJCQkJCQkJIFJlbGF0aW9uR2V0UGFydGl0aW9uQm91 bmQob2JqZWN0SWQpKTsKKwl9CisKKwkvKiBQQVJUSVRJT04gQlkgY2xhdXNlICovCisJdG1wX29i aiA9IG5ld19vYmp0cmVlKCJQQVJUSVRJT04gQlkiKTsKKwlpZiAocmVsYXRpb24tPnJkX3JlbC0+ cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXBfb2JqLCAiJXtkZWZpbml0aW9ufXMiLCAiZGVmaW5pdGlvbiIsCisJCQkJCQkJIHBn X2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShvYmplY3RJZCkpOworCWVsc2UKKwl7CisJCWFwcGVuZF9u dWxsX29iamVjdCh0bXBfb2JqLCAiJXtkZWZpbml0aW9ufXMiKTsKKwkJYXBwZW5kX25vdF9wcmVz ZW50KHRtcF9vYmopOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3BhcnRpdGlv bl9ieX1zIiwgdG1wX29iaik7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXBfb2JqID0gbmV3 X29ianRyZWUoIlVTSU5HIik7CisJaWYgKG5vZGUtPmFjY2Vzc01ldGhvZCkKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wX29iaiwgIiV7YWNjZXNzX21ldGhvZH1JIiwgImFjY2Vzc19tZXRob2Qi LAorCQkJCQkJCSBub2RlLT5hY2Nlc3NNZXRob2QpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxs X29iamVjdCh0bXBfb2JqLCAiJXthY2Nlc3NfbWV0aG9kfUkiKTsKKwkJYXBwZW5kX25vdF9wcmVz ZW50KHRtcF9vYmopOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2FjY2Vzc19t ZXRob2R9cyIsIHRtcF9vYmopOworCisJLyogV0lUSCBjbGF1c2UgKi8KKwl0bXBfb2JqID0gbmV3 X29ianRyZWUoIldJVEgiKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJ CU9ialRyZWUgICAgKnRtcF9vYmoyOworCQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxlbSAqKSBs Zmlyc3QoY2VsbCk7CisKKwkJdG1wX29iajIgPSBkZXBhcnNlX0RlZkVsZW0ob3B0LCBmYWxzZSk7 CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmoyKSk7CisJ fQorCisJaWYgKGxpc3QpCisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIigle3dpdGg6 LCB9cykiLCBsaXN0KTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7d2l0aF9jbGF1c2V9cyIsIHRtcF9vYmopOwor CisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4g cmV0OworfQorCisvKgorICogRGVwYXJzZSBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqCisg KiBkZXBhcnNlX0NyZWF0ZVN0bXQgZG8gdGhlIGFjdHVhbCB3b3JrIGFzIHdlIGRlcGFyc2UgdGhl IGZpbmFsIENyZWF0ZVN0bXQgZm9yCisgKiBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdChDb2xsZWN0ZWRDb21t YW5kICpjbWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJ QXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfQ3JlYXRlVGFibGVBcyk7CisKKwlwYXJzZXRyZWUgPSBj bWQtPmQuY3Rhcy5yZWFsX2NyZWF0ZTsKKwlvYmplY3RJZCA9IGNtZC0+ZC5jdGFzLmFkZHJlc3Mu b2JqZWN0SWQ7CisKKwlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUpOworfQorCisvKgorICogRGVwYXJzZSBhbGwgdGhlIGNvbGxlY3RlZCBzdWJjb21tYW5kcyBh bmQgcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZQorICogYWx0ZXIgY29tbWFuZC4K KyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgcmVsdHlwZSAle2lkZW50aXR5fUQgJXtz dWJjbWRzOiwgfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclJlbGF0aW9u KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAg ICAqdG1wX29iajsKKwlPYmpUcmVlICAgICp0bXBfb2JqMjsKKwlMaXN0CSAgICpkcGNvbnRleHQ7 CisJUmVsYXRpb24JcmVsOworCUxpc3QJICAgKnN1YmNtZHMgPSBOSUw7CisJTGlzdENlbGwgICAq Y2VsbDsKKwljb25zdCBjaGFyICpyZWx0eXBlOworCWJvb2wJCWlzdHlwZSA9IGZhbHNlOworCWJv b2wJCWlzdGFibGUgPSBmYWxzZTsKKwlMaXN0CSAgICpleHBycyA9IE5JTDsKKwlPaWQJCQlyZWxJ ZCA9IGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkOworCUFsdGVyVGFibGVTdG10ICpzdG10ID0g TlVMTDsKKworCUFzc2VydChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVGFibGUpOworCXN0bXQgPSAo QWx0ZXJUYWJsZVN0bXQgKikgY21kLT5wYXJzZXRyZWU7CisJQXNzZXJ0KElzQShzdG10LCBBbHRl clRhYmxlU3RtdCkpOworCisJLyoKKwkgKiBBTFRFUiBUQUJMRSBzdWJjb21tYW5kcyBnZW5lcmF0 ZWQgZm9yIFRhYmxlTGlrZUNsYXVzZSBpcyBwcm9jZXNzZWQgaW4KKwkgKiB0aGUgdG9wIGxldmVs IENSRUFURSBUQUJMRSBjb21tYW5kOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoc3Rt dC0+dGFibGVfbGlrZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZWwgPSByZWxhdGlvbl9vcGVuKHJl bElkLCBBY2Nlc3NTaGFyZUxvY2spOworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3Io UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCXJlbElkKTsKKworCXN3aXRj aCAocmVsLT5yZF9yZWwtPnJlbGtpbmQpCisJeworCQljYXNlIFJFTEtJTkRfUkVMQVRJT046CisJ CWNhc2UgUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRToKKwkJCXJlbHR5cGUgPSAiVEFCTEUiOwor CQkJaXN0YWJsZSA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0lOREVYOgorCQlj YXNlIFJFTEtJTkRfUEFSVElUSU9ORURfSU5ERVg6CisJCQlyZWx0eXBlID0gIklOREVYIjsKKwkJ CWJyZWFrOworCQljYXNlIFJFTEtJTkRfVklFVzoKKwkJCXJlbHR5cGUgPSAiVklFVyI7CisJCQli cmVhazsKKwkJY2FzZSBSRUxLSU5EX0NPTVBPU0lURV9UWVBFOgorCQkJcmVsdHlwZSA9ICJUWVBF IjsKKwkJCWlzdHlwZSA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0ZPUkVJR05f VEFCTEU6CisJCQlyZWx0eXBlID0gIkZPUkVJR04gVEFCTEUiOworCQkJYnJlYWs7CisJCWNhc2Ug UkVMS0lORF9NQVRWSUVXOgorCQkJcmVsdHlwZSA9ICJNQVRFUklBTElaRUQgVklFVyI7CisJCQli cmVhazsKKworCQkJLyogVE9ETyBzdXBwb3J0IGZvciBwYXJ0aXRpb25lZCB0YWJsZSAqLworCisJ CWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCByZWxraW5kICVkIiwgcmVsLT5y ZF9yZWwtPnJlbGtpbmQpOworCX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29i anR5cGV9cyAle2lkZW50aXR5fUQiLCAyLAorCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmlu ZywgcmVsdHlwZSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWwtPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSk7CisKKwlmb3JlYWNoKGNlbGws IGNtZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMpCisJeworCQlDb2xsZWN0ZWRBVFN1YmNtZCAqc3Vi ID0gKENvbGxlY3RlZEFUU3ViY21kICopIGxmaXJzdChjZWxsKTsKKwkJQWx0ZXJUYWJsZUNtZCAq c3ViY21kID0gKEFsdGVyVGFibGVDbWQgKikgc3ViLT5wYXJzZXRyZWU7CisJCU9ialRyZWUgICAg KnRyZWU7CisKKwkJQXNzZXJ0KElzQShzdWJjbWQsIEFsdGVyVGFibGVDbWQpKTsKKworCSAgIC8q CisJCSogU2tpcCBkZXBhcnNlIG9mIHRoZSBzdWJjb21tYW5kIGlmIHRoZSBvYmplY3RJZCBkb2Vz bid0IG1hdGNoIHRoZQorCQkqIHRhcmdldCByZWxhdGlvbiBJRC4gSXQgY2FuIGhhcHBlbiBmb3Ig aW5oZXJpdGVkIHRhYmxlcyB3aGVuCisJCSogc3ViY29tbWFuZHMgZm9yIGluaGVyaXRlZCB0YWJs ZXMgYW5kIHRoZSBwYXJlbnQgdGFibGUgYXJlIGJvdGgKKwkJKiBjb2xsZWN0ZWQgaW4gdGhlIEFM VEVSIFRBTEJFIGNvbW1hbmQgZm9yIHRoZSBwYXJlbnQgdGFibGUuIFdpdGggdGhlCisJCSogZXhj ZXB0aW9uIG9mIHRoZSBpbnRlcm5hbGx5IGdlbmVyYXRlZCBBZGRDb25zdHJhaW50IChmb3IKKwkJ KiBBTFRFUiBUQUJMRSBBREQgQ09OU1RSQUlOVCBGT1JFSUdOIEtFWSBSRUZFUkVOQ0VTKSB3aGVy ZSB0aGUKKwkJKiBvYmplY3RJZHMgY291bGQgbWlzbWF0Y2ggKGZvcmVpbiB0YWJsZSBpZCBhbmQg dGhlIHJlZmVyZW5jZWQgdGFibGUKKwkJKiBpZCkuCisJCSovCisJCWlmICgoc3ViLT5hZGRyZXNz Lm9iamVjdElkICE9IHJlbElkICYmCisJCQkgc3ViLT5hZGRyZXNzLm9iamVjdElkICE9IEludmFs aWRPaWQpICYmCisJCQkhKHN1YmNtZC0+c3VidHlwZSA9PSBBVF9BZGRDb25zdHJhaW50ICYmCisJ CQkgIHN1YmNtZC0+cmVjdXJzZSkgJiYKKwkJCWlzdGFibGUpCisJCQljb250aW51ZTsKKworCQlz d2l0Y2ggKHN1YmNtZC0+c3VidHlwZSkKKwkJeworCQkJY2FzZSBBVF9BZGRDb2x1bW46CisJCQkJ LyogWFhYIG5lZWQgdG8gc2V0IHRoZSAicmVjdXJzZSIgYml0IHNvbWV3aGVyZT8gKi8KKwkJCQlB c3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBDb2x1bW5EZWYpKTsKKwkJCQl0cmVlID0gZGVwYXJzZV9D b2x1bW5EZWYocmVsLCBkcGNvbnRleHQsIGZhbHNlLAorCQkJCQkJCQkJCSAoQ29sdW1uRGVmICop IHN1YmNtZC0+ZGVmLCB0cnVlLCAmZXhwcnMpOworCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9W QSgiQUREICV7b2JqdHlwZX1zICV7aWZfbm90X2V4aXN0c31zICV7ZGVmaW5pdGlvbn1zIiwgNCwK KwkJCQkJCQkJCQkib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJaXN0eXBlID8g IkFUVFJJQlVURSIgOiAiQ09MVU1OIiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJhZGQgY29sdW1uIiwKKwkJCQkJCQkJCQkiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkJCQkJc3ViY21kLT5taXNzaW5nX29rID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJ CQkJCQkJCQkJImRlZmluaXRpb24iLCBPYmpUeXBlT2JqZWN0LCB0cmVlKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfQWRkSW5kZXhDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJSW5kZXhT dG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJT2lkCQkJY29uc3RyT2lkID0g c3ViLT5hZGRyZXNzLm9iamVjdElkOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIElu ZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisKKwkJ CQkJQXNzZXJ0KGlzdG10LT5pc2NvbnN0cmFpbnQgJiYgaXN0bXQtPnVuaXF1ZSk7CisKKwkJCQkJ aWR4ID0gcmVsYXRpb25fb3Blbihpc3RtdC0+aW5kZXhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCQkJICoKKwkJCQkJICogQUREIENP TlNUUkFJTlQgJXtuYW1lfUkgJXtjb25zdHJhaW50X3R5cGV9cyBVU0lORyBJTkRFWAorCQkJCQkg KiAlaW5kZXhfbmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zCisJCQkJCSAq LworCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1J ICV7Y29uc3RyYWludF90eXBlfXMgVVNJTkcgSU5ERVggJXtpbmRleF9uYW1lfUkgJXtkZWZlcnJh YmxlfXMgJXtpbml0X2RlZmVycmVkfXMiLCA2LAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVT dHJpbmcsICJhZGQgY29uc3RyYWludCB1c2luZyBpbmRleCIsCisJCQkJCQkJCQkJCSJuYW1lIiwg T2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJ CQkiY29uc3RyYWludF90eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJaXN0bXQtPnBy aW1hcnkgPyAiUFJJTUFSWSBLRVkiIDogIlVOSVFVRSIsCisJCQkJCQkJCQkJCSJpbmRleF9uYW1l IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4 KSwKKwkJCQkJCQkJCQkJImRlZmVycmFibGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlp c3RtdC0+ZGVmZXJyYWJsZSA/ICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIsCisJCQkJ CQkJCQkJCSJpbml0X2RlZmVycmVkIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJaXN0bXQt PmluaXRkZWZlcnJlZCA/ICJJTklUSUFMTFkgREVGRVJSRUQiIDogIklOSVRJQUxMWSBJTU1FRElB VEUiKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisKKwkJCQkJcmVsYXRpb25fY2xvc2UoaWR4LCBBY2Nlc3NTaGFyZUxvY2sp OworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9SZUFkZEluZGV4OgorCQkJY2FzZSBB VF9SZUFkZENvbnN0cmFpbnQ6CisJCQljYXNlIEFUX1JlQWRkQ29tbWVudDoKKwkJCWNhc2UgQVRf UmVwbGFjZVJlbE9wdGlvbnM6CisJCQljYXNlIEFUX0NoZWNrTm90TnVsbDoKKwkJCWNhc2UgQVRf UmVBZGRTdGF0aXN0aWNzOgorCQkJCS8qIFN1YnR5cGVzIHVzZWQgZm9yIGludGVybmFsIG9wZXJh dGlvbnM7IG5vdGhpbmcgdG8gZG8gaGVyZSAqLworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Nv b2tlZENvbHVtbkRlZmF1bHQ6CisJCQkJeworCQkJCQlSZWxhdGlvbglhdHRycmVsOworCQkJCQlI ZWFwVHVwbGUJYXR0dHVwOworCQkJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRTdHJ1Y3Q7CisKKwkJ CQkJYXR0cnJlbCA9IHRhYmxlX29wZW4oQXR0cmlidXRlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZl TG9jayk7CisJCQkJCWF0dHR1cCA9IFNlYXJjaFN5c0NhY2hlQ29weTIoQVRUTlVNLAorCQkJCQkJ CQkJCQkJIE9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZChyZWwpKSwKKwkJCQkJCQkJ CQkJCSBJbnQxNkdldERhdHVtKHN1YmNtZC0+bnVtKSk7CisJCQkJCWlmICghSGVhcFR1cGxlSXNW YWxpZChhdHR0dXApKQorCQkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IGF0dHJpYnV0ZSAlZCBvZiByZWxhdGlvbiB3aXRoIE9JRCAldSIsCisJCQkJCQkJIHN1YmNtZC0+ bnVtLCBSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQlhdHRTdHJ1Y3QgPSAoRm9ybV9wZ19h dHRyaWJ1dGUpIEdFVFNUUlVDVChhdHR0dXApOworCisJCQkJCS8qCisJCQkJCSAqIEJvdGggZGVm YXVsdCBhbmQgZ2VuZXJhdGlvbiBleHByZXNzaW9uIG5vdCBzdXBwb3J0ZWQKKwkJCQkJICogdG9n ZXRoZXIuCisJCQkJCSAqLworCQkJCQlpZiAoIWF0dFN0cnVjdC0+YXR0Z2VuZXJhdGVkKQorCQkJ CQkJZWxvZyhXQVJOSU5HLCAidW5zdXBwb3J0ZWQgYWx0ZXIgdGFibGUgc3VidHlwZSAlZCIsCisJ CQkJCQkJIHN1YmNtZC0+c3VidHlwZSk7CisKKwkJCQkJaGVhcF9mcmVldHVwbGUoYXR0dHVwKTsK KwkJCQkJdGFibGVfY2xvc2UoYXR0cnJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJCQkJCWJyZWFr OworCQkJCX0KKworCQkJY2FzZSBBVF9BZGRDb2x1bW5Ub1ZpZXc6CisJCQkJLyogQ1JFQVRFIE9S IFJFUExBQ0UgVklFVyAtLSBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9Db2x1bW5EZWZhdWx0OgorCQkJCWlmIChzdWJjbWQtPmRlZiA9PSBOVUxMKQorCQkJ CQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1Ag REVGQVVMVCIsIDIsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgZGVm YXVsdCIsCisJCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUp OworCQkJCWVsc2UKKwkJCQl7CisJCQkJCUxpc3QJICAgKmRwY29udGV4dF9yZWw7CisJCQkJCUhl YXBUdXBsZQlhdHRydHVwOworCQkJCQlBdHRyTnVtYmVyCWF0dG5vOworCisJCQkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIERFRkFVTFQiLCAy LAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgZGVmYXVsdCIsCisJCQkJ CQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWRw Y29udGV4dF9yZWwgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbCksCisJCQkJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJCQkJCWF0dHJ0 dXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQt Pm5hbWUpOworCQkJCQlhdHRubyA9ICgoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRy dHVwKSktPmF0dG51bTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7ZGVm aW5pdGlvbn1zIiwgImRlZmluaXRpb24iLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldENvbHVtbkRl ZmF1bHQocmVsLCBhdHRubywKKwkJCQkJCQkJCQkJCQkJCQkgIGRwY29udGV4dF9yZWwsCisJCQkJ CQkJCQkJCQkJCQkJICBOVUxMKSk7CisJCQkJCVJlbGVhc2VTeXNDYWNoZShhdHRydHVwKTsKKwkJ CQl9CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE5vdE51bGw6CisJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIE5PVCBO VUxMIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIG5vdCBudWxs IiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRm9yY2VSb3dTZWN1cml0eToKKwkJCQl0bXBfb2Jq ID0gbmV3X29ianRyZWUoIkZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWSIpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9Ob0ZvcmNlUm93U2VjdXJpdHk6CisJCQkJdG1wX29iaiA9IG5ld19v Ymp0cmVlKCJOTyBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkiKTsKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfU2V0Tm90TnVsbDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBOT1QgTlVMTCIsIDIsCisJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAic2V0IG5vdCBudWxsIiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2Jq VHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RHJvcEV4cHJlc3Npb246CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xV TU4gJXtjb2x1bW59SSBEUk9QIEVYUFJFU1NJT04gJXtpZl9leGlzdHN9cyIsIDMsCisJCQkJCQkJ CQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBleHByZXNzaW9uIiwKKwkJCQkJCQkJCQki Y29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJCSJpZl9leGlz dHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCXN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBF WElTVFMiIDogIiIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRTdGF0aXN0aWNz OgorCQkJCXsKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW50ZWdlcikpOworCQkJCQlp ZiAoc3ViY21kLT5uYW1lKQorCQkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBD T0xVTU4gJXtjb2x1bW59SSBTRVQgU1RBVElTVElDUyAle3N0YXRpc3RpY3N9biIsIDMsCisJCQkJ CQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RhdGlzdGljcyIsCisJCQkJCQkJ CQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJCQkJ InN0YXRpc3RpY3MiLCBPYmpUeXBlSW50ZWdlciwKKwkJCQkJCQkJCQkJCWludFZhbCgoSW50ZWdl ciAqKSBzdWJjbWQtPmRlZikpOworCQkJCQllbHNlCisJCQkJCQl0bXBfb2JqID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1uIFNFVCBTVEFUSVNUSUNTICV7c3RhdGlzdGlj c31uIiwgMywKKwkJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBzdGF0aXN0 aWNzIiwKKwkJCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlSW50ZWdlciwgc3ViY21kLT5udW0s CisJCQkJCQkJCQkJCQkic3RhdGlzdGljcyIsIE9ialR5cGVJbnRlZ2VyLAorCQkJCQkJCQkJCQkJ aW50VmFsKChJbnRlZ2VyICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfU2V0T3B0aW9uczoKKwkJCWNhc2UgQVRfUmVzZXRPcHRpb25zOgorCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KAorCQkJCQkJCQkJ CQkJCQkJIGRlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhzdWJjbWQpKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfU2V0U3RvcmFnZToKKwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBTdHJp bmcpKTsKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVt bn1JIFNFVCBTVE9SQUdFICV7c3RvcmFnZX1zIiwgMywKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJzZXQgc3RvcmFnZSIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkic3RvcmFnZSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkJCQkJc3RyVmFsKChTdHJpbmcgKikgc3ViY21kLT5kZWYpKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfU2V0Q29tcHJlc3Npb246CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRl ZiwgU3RyaW5nKSk7CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4g JXtjb2x1bW59SSBTRVQgQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9cyIsIDMsCisJ CQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGNvbXByZXNzaW9uIiwKKwkJCQkJ CQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJCSJj b21wcmVzc2lvbl9tZXRob2QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCXN0clZhbCgoU3Ry aW5nICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BD b2x1bW46CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QICV7b2JqdHlwZX1zICV7 aWZfbm90X2V4aXN0c31zICV7Y29sdW1ufUkiLCA0LAorCQkJCQkJCQkJCSJvYmp0eXBlIiwgT2Jq VHlwZVN0cmluZywKKwkJCQkJCQkJCQlpc3R5cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xVTU4iLAor CQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgY29sdW1uIiwKKwkJCQkJCQkJ CQkiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJc3ViY21kLT5taXNz aW5nX29rID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5 cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJdG1wX29iajIgPSBuZXdfb2JqdHJlZV9WQSgi Q0FTQ0FERSIsIDEsCisJCQkJCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIHN1YmNtZC0+ YmVoYXZpb3IpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle2Nhc2NhZGV9 cyIsIHRtcF9vYmoyKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJbmRleDoK KwkJCQl7CisJCQkJCU9pZAkJCWlkeE9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJ SW5kZXhTdG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJY29uc3QgY2hhciAq aWR4bmFtZTsKKwkJCQkJT2lkCQkJY29uc3RyT2lkOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21k LT5kZWYsIEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQgKikgc3ViY21kLT5k ZWY7CisKKwkJCQkJaWYgKCFpc3RtdC0+aXNjb25zdHJhaW50KQorCQkJCQkJYnJlYWs7CisKKwkJ CQkJaWR4ID0gcmVsYXRpb25fb3BlbihpZHhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJCWlk eG5hbWUgPSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgpOworCisJCQkJCWNvbnN0ck9pZCA9 IGdldF9yZWxhdGlvbl9jb25zdHJhaW50X29pZCgKKwkJCQkJCQkJCQkJCQkJCWNtZC0+ZC5hbHRl clRhYmxlLm9iamVjdElkLCBpZHhuYW1lLCBmYWxzZSk7CisKKwkJCQkJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsIDMsCisJ CQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IiwKKwkJCQkJ CQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBpZHhuYW1lLAorCQkJCQkJCQkJCQkiZGVmaW5p dGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCXBnX2dldF9jb25zdHJhaW50ZGVmX2Nv bW1hbmRfc2ltcGxlKGNvbnN0ck9pZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkJCQkJcmVsYXRpb25fY2xvc2UoaWR4 LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRD b25zdHJhaW50OgorCQkJCXsKKwkJCQkJLyogWFhYIG5lZWQgdG8gc2V0IHRoZSAicmVjdXJzZSIg Yml0IHNvbWV3aGVyZT8gKi8KKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9i amVjdElkOworCQkJCQlib29sCQlpc251bGw7CisJCQkJCUhlYXBUdXBsZQl0dXA7CisJCQkJCURh dHVtCQl2YWw7CisJCQkJCUNvbnN0cmFpbnQgKmNvbnN0cjsKKworCQkJCQlBc3NlcnQoSXNBKHN1 YmNtZC0+ZGVmLCBDb25zdHJhaW50KSk7CisJCQkJCWNvbnN0ciA9IGNhc3ROb2RlKENvbnN0cmFp bnQsIHN1YmNtZC0+ZGVmKTsKKworCQkJCQlpZiAoIWNvbnN0ci0+c2tpcF92YWxpZGF0aW9uKQor CQkJCQl7CisJCQkJCQl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBPYmplY3RJZEdl dERhdHVtKGNvbnN0ck9pZCkpOworCisJCQkJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXApKQor CQkJCQkJeworCQkJCQkJCWNoYXIJICAgKmNvbmJpbjsKKworCQkJCQkJCS8qIEZldGNoIGNvbnN0 cmFpbnQgZXhwcmVzc2lvbiBpbiBwYXJzZXRyZWUgZm9ybSAqLworCQkJCQkJCXZhbCA9IFN5c0Nh Y2hlR2V0QXR0cihDT05TVFJPSUQsIHR1cCwKKwkJCQkJCQkJCQkJCSAgQW51bV9wZ19jb25zdHJh aW50X2NvbmJpbiwgJmlzbnVsbCk7CisKKwkJCQkJCQlpZiAoIWlzbnVsbCkKKwkJCQkJCQl7CisJ CQkJCQkJCWNvbmJpbiA9IFRleHREYXR1bUdldENTdHJpbmcodmFsKTsKKwkJCQkJCQkJZXhwcnMg PSBsYXBwZW5kKGV4cHJzLCBzdHJpbmdUb05vZGUoY29uYmluKSk7CisJCQkJCQkJfQorCisJCQkJ CQkJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQl0bXBfb2Jq ID0gbmV3X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1z IiwgMywKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQi LAorCQkJCQkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUo Y29uc3RyT2lkKSwKKwkJCQkJCQkJCQkJImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJCQkJCQlwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJPaWQpKTsK KwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29i aikpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BbHRlckNvbnN0cmFpbnQ6CisJ CQkJeworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJ CUNvbnN0cmFpbnQgKmMgPSAoQ29uc3RyYWludCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkvKiBJ ZiBubyBjb25zdHJhaW50IHdhcyBhbHRlcmVkLCBzaWxlbnRseSBza2lwIGl0ICovCisJCQkJCWlm ICghT2lkSXNWYWxpZChjb25zdHJPaWQpKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJQXNzZXJ0KElz QShjLCBDb25zdHJhaW50KSk7CisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg Q09OU1RSQUlOVCAle25hbWV9SSAle2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cyIsIDQs CisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbnN0cmFpbnQiLAor CQkJCQkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29u c3RyT2lkKSwKKwkJCQkJCQkJCQkJImRlZmVycmFibGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJ CQkJCQljLT5kZWZlcnJhYmxlID8gIkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIiwKKwkJ CQkJCQkJCQkJImluaXRfZGVmZXJyZWQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQljLT5p bml0ZGVmZXJyZWQgPyAiSU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRF Iik7CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9WYWxpZGF0ZUNvbnN0 cmFpbnQ6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFURSBDT05TVFJBSU5U ICV7Y29uc3RyYWludH1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2 YWxpZGF0ZSBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkiY29uc3RyYWludCIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDb25z dHJhaW50OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCBDT05TVFJBSU5UICV7 Y29uc3RyYWludH1JICV7aWZfbm90X2V4aXN0c31zIiwgMywKKwkJCQkJCQkJCQkidHlwZSIsIE9i alR5cGVTdHJpbmcsICJkcm9wIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSJpZl9ub3RfZXhpc3Rz IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgTk9U IEVYSVNUUyIgOiAiIiwKKwkJCQkJCQkJCQkiY29uc3RyYWludCIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlw ZToKKwkJCQl7CisJCQkJCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwp OworCQkJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQ7CisJCQkJCUNvbHVtbkRlZiAgKmRlZjsKKwor CQkJCQlhdHQgPSAmKHR1cGRlc2MtPmF0dHJzW3N1Yi0+YWRkcmVzcy5vYmplY3RTdWJJZCAtIDFd KTsKKwkJCQkJZGVmID0gKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKwkJCQkJQXNzZXJ0KElz QShkZWYsIENvbHVtbkRlZikpOworCisJCQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ugc3ludGF4CisJ CQkJCSAqCisJCQkJCSAqIENvbXBvc2l0ZSB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1J IFNFVCBEQVRBIFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQVRUUklC VVRFICV7Y2FzY2FkZX1zCisJCQkJCSAqCisJCQkJCSAqIE5vcm1hbCB0eXBlczogQUxURVIgcmVs dHlwZSAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29s bGF0aW9ufXMgQ09MVU1OICV7dXNpbmd9cworCQkJCQkgKi8KKwkJCQkJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUgJXtk YXRhdHlwZX1UIiwgNCwKKwkJCQkJCQkJCQkJIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJCQkJCQlpc3R5cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xVTU4iLAorCQkJCQkJCQkJCQkidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJhbHRlciBjb2x1bW4gdHlwZSIsCisJCQkJCQkJCQkJCSJjb2x1 bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJCSJkYXRhdHlwZSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKGF0dC0+YXR0 dHlwaWQsCisJCQkJCQkJCQkJCQkJCQkJIGF0dC0+YXR0dHlwbW9kKSk7CisKKwkJCQkJLyogQWRk IGEgQ09MTEFURSBjbGF1c2UsIGlmIG5lZWRlZCAqLworCQkJCQl0bXBfb2JqMiA9IG5ld19vYmp0 cmVlKCJDT0xMQVRFIik7CisJCQkJCWlmIChPaWRJc1ZhbGlkKGF0dC0+YXR0Y29sbGF0aW9uKSkK KwkJCQkJeworCQkJCQkJT2JqVHJlZSAgICAqY29sbG5hbWU7CisKKwkJCQkJCWNvbGxuYW1lID0g bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJCQkgICBhdHQtPmF0dGNvbGxhdGlvbik7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBfb2JqMiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJ CQkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqMik7CisJCQkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcF9vYmosICIle2NvbGxhdGlvbn1zIiwgdG1wX29iajIpOworCisJCQkJCS8qIElmIG5v dCBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhlIFVTSU5HIGNsYXVzZSAqLworCQkJCQlpZiAoIWlz dHlwZSkKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIElmIHRoZXJlJ3MgYSBVU0lORyBjbGF1 c2UsIHRyYW5zZm9ybUFsdGVyVGFibGVTdG10CisJCQkJCQkgKiByYW4gaXQgdGhyb3VnaCB0cmFu c2Zvcm1FeHByIGFuZCBzdG9yZWQgdGhlCisJCQkJCQkgKiByZXN1bHRpbmcgbm9kZSBpbiBjb29r ZWRfZGVmYXVsdCwgd2hpY2ggd2UgY2FuIHVzZQorCQkJCQkJICogaGVyZS4KKwkJCQkJCSAqLwor CQkJCQkJdG1wX29iajIgPSBuZXdfb2JqdHJlZSgiVVNJTkciKTsKKwkJCQkJCWlmIChkZWYtPnJh d19kZWZhdWx0KQorCQkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmoyLCAiJXtleHBy ZXNzaW9ufXMiLAorCQkJCQkJCQkJCQkJICJleHByZXNzaW9uIiwKKwkJCQkJCQkJCQkJCSBzdWIt PnVzaW5nZXhwcik7CisJCQkJCQllbHNlCisJCQkJCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9v YmoyKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3VzaW5nfXMiLCB0 bXBfb2JqMik7CisJCQkJCX0KKworCQkJCQkvKiBJZiBpdCdzIGEgY29tcG9zaXRlIHR5cGUsIGFk ZCB0aGUgQ0FTQ0FERSBjbGF1c2UgKi8KKwkJCQkJaWYgKGlzdHlwZSkKKwkJCQkJeworCQkJCQkJ dG1wX29iajIgPSBuZXdfb2JqdHJlZSgiQ0FTQ0FERSIpOworCQkJCQkJaWYgKHN1YmNtZC0+YmVo YXZpb3IgIT0gRFJPUF9DQVNDQURFKQorCQkJCQkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2Jq Mik7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtjYXNjYWRlfXMiLCB0 bXBfb2JqMik7CisJCQkJCX0KKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisjaWZkZWYgVE9E T0xJU1QKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5HZW5lcmljT3B0aW9uczoKKwkJCQl0bXBfb2Jq ID0gZGVwYXJzZV9GZHdPcHRpb25zKChMaXN0ICopIHN1YmNtZC0+ZGVmLAorCQkJCQkJCQkJCQlz dWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJY2FzZSBBVF9DaGFuZ2VP d25lcjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk9XTkVSIFRPICV7b3duZXJ9SSIs IDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2hhbmdlIG93bmVyIiwKKwkJ CQkJCQkJCQkib3duZXIiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCWdldF9yb2xlc3BlY19u YW1lKHN1YmNtZC0+bmV3b3duZXIpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ2x1 c3Rlck9uOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQ0xVU1RFUiBPTiAle2luZGV4 fUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNsdXN0ZXIgb24iLAor CQkJCQkJCQkJCSJpbmRleCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDbHVzdGVyOgorCQkJCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiU0VUIFdJVEhPVVQgQ0xVU1RFUiIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAic2V0IHdpdGhvdXQgY2x1c3RlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9TZXRMb2dnZWQ6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgTE9H R0VEIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbG9nZ2VkIik7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29i aikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFVuTG9nZ2VkOgorCQkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9WQSgiU0VUIFVOTE9HR0VEIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9i alR5cGVTdHJpbmcsICJzZXQgdW5sb2dnZWQiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfRHJvcE9pZHM6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgV0lUSE9VVCBP SURTIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgd2l0aG91dCBv aWRzIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9TZXRBY2Nlc3NNZXRob2Q6CisJCQkJ dG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgQUNDRVNTIE1FVEhPRCAle2FjY2Vzc19tZXRo b2R9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGFjY2VzcyBt ZXRob2QiLAorCQkJCQkJCQkJCSJhY2Nlc3NfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywgc3ViY21k LT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldFRhYmxlU3BhY2U6CisJCQkJ dG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIs IDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHRhYmxlc3BhY2UiLAor CQkJCQkJCQkJCSJ0YWJsZXNwYWNlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0UmVsT3B0aW9uczoKKwkJCWNhc2UgQVRfUmVz ZXRSZWxPcHRpb25zOgorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KAorCQkJCQkJCQkJCQkJCQkJIGRlcGFyc2VfUmVsU2V0T3B0aW9ucyhzdWJjbWQpKSk7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZzoKKwkJCQl0bXBfb2JqID0gbmV3 X29ianRyZWVfVkEoIkVOQUJMRSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdn ZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9FbmFibGVBbHdheXNUcmlnOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgi RU5BQkxFIEFMV0FZUyBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJlbmFibGUgYWx3YXlzIHRyaWdnZXIiLAorCQkJCQkJCQkJCSJ0cmln Z2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfRW5hYmxlUmVwbGljYVRyaWc6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCJFTkFCTEUgUkVQTElDQSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCQkidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcmVwbGljYSB0cmlnZ2VyIiwKKwkJCQkJCQkJCQki dHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0Rpc2FibGVUcmlnOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgi RElTQUJMRSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJCSJ0cmlnZ2VyIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5h YmxlVHJpZ0FsbDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBUUklHR0VS IEFMTCIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdn ZXIgYWxsIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVUcmlnQWxsOgor CQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklHR0VSIEFMTCIsIDEsCisJ CQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIGFsbCIpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmop KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnVXNlcjoKKwkJCQl0bXBfb2Jq ID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBUUklHR0VSIFVTRVIiLCAxLAorCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWdVc2VyOgorCQkJCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiRElTQUJMRSBUUklHR0VSIFVTRVIiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0VuYWJsZVJ1bGU6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFC TEUgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZW5hYmxlIHJ1bGUiLAorCQkJCQkJCQkJCSJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5u YW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlQWx3YXlzUnVsZToKKwkJ CQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBBTFdBWVMgUlVMRSAle3J1bGV9SSIs IDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIGFsd2F5cyBydWxl IiwKKwkJCQkJCQkJCQkicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJlcGxpY2FSdWxlOgorCQkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJFUExJQ0EgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJ CQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJlcGxpY2EgcnVsZSIsCisJCQkJ CQkJCQkJInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9EaXNhYmxlUnVsZToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVf VkEoIkRJU0FCTEUgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZGlzYWJsZSBydWxlIiwKKwkJCQkJCQkJCQkicnVsZSIsIE9ialR5cGVTdHJpbmcs IHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluaGVyaXQ6 CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJJTkhFUklUICV7cGFyZW50fUQiLCAyLAor CQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImluaGVyaXQiLAorCQkJCQkJCQkJCSJw YXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+YWRkcmVzcy5v YmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wSW5oZXJpdDoKKwkJ CQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk5PIElOSEVSSVQgJXtwYXJlbnR9RCIsIDIsCisJ CQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBpbmhlcml0IiwKKwkJCQkJCQkJ CQkicGFyZW50IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlzdWItPmFkZHJl c3Mub2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkT2Y6CisJCQkJ dG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJPRiAle3R5cGVfb2Z9VCIsIDIsCisJCQkJCQkJCQkJ InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIG9mIiwKKwkJCQkJCQkJCQkidHlwZV9vZiIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUoc3ViLT5hZGRyZXNz Lm9iamVjdElkLCAtMSkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wT2Y6CisJ CQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJOT1QgT0YiLCAxLAorCQkJCQkJCQkJCSJ0eXBl IiwgT2JqVHlwZVN0cmluZywgIm5vdCBvZiIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9SZXBsaWNhSWRlbnRpdHk6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJSRVBMSUNB IElERU5USVRZIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJyZXBsaWNh IGlkZW50aXR5Iik7CisJCQkJc3dpdGNoICgoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21k LT5kZWYpLT5pZGVudGl0eV90eXBlKQorCQkJCXsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZ X0RFRkFVTFQ6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtpZGVudH1z IiwgImlkZW50IiwKKwkJCQkJCQkJCQkJICJERUZBVUxUIik7CisJCQkJCQlicmVhazsKKwkJCQkJ Y2FzZSBSRVBMSUNBX0lERU5USVRZX0ZVTEw6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0 bXBfb2JqLCAiJXtpZGVudH1zIiwgImlkZW50IiwKKwkJCQkJCQkJCQkJICJGVUxMIik7CisJCQkJ CQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZX05PVEhJTkc6CisJCQkJCQlhcHBl bmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtpZGVudH1zIiwgImlkZW50IiwKKwkJCQkJCQkJ CQkJICJOT1RISU5HIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZ X0lOREVYOgorCQkJCQkJdG1wX29iajIgPSBuZXdfb2JqdHJlZV9WQSgiVVNJTkcgSU5ERVggJXtp bmRleH1JIiwgMSwKKwkJCQkJCQkJCQkJCSAiaW5kZXgiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJ CQkJCQkJICgoUmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPm5hbWUpOworCQkJ CQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7aWRlbnR9cyIsIHRtcF9vYmoyKTsK KwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxl Um93U2VjdXJpdHk6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUk9XIExF VkVMIFNFQ1VSSVRZIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFi bGUgcm93IHNlY3VyaXR5Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVS b3dTZWN1cml0eToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUk9XIExF VkVMIFNFQ1VSSVRZIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNh YmxlIHJvdyBzZWN1cml0eSIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKyNpZmRlZiBUT0RPTElTVAorCQkJ Y2FzZSBBVF9HZW5lcmljT3B0aW9uczoKKwkJCQl0bXBfb2JqID0gZGVwYXJzZV9GZHdPcHRpb25z KChMaXN0ICopIHN1YmNtZC0+ZGVmLCBOVUxMKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJ CWNhc2UgQVRfQXR0YWNoUGFydGl0aW9uOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgi QVRUQUNIIFBBUlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJhdHRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCQkicGFy dGl0aW9uX2lkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlzdWIt PmFkZHJlc3Mub2JqZWN0SWQpKTsKKworCQkJCWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBS RUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBf b2JqLCAiJXtwYXJ0aXRpb25fYm91bmR9cyIsCisJCQkJCQkJCQkJICJwYXJ0aXRpb25fYm91bmQi LAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKHN1Yi0+YWRkcmVzcy5vYmpl Y3RJZCkpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9EZXRhY2hQYXJ0aXRpb246CisJ CQl7CisJCQkJUGFydGl0aW9uQ21kICpjbWQ7CisKKwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVm LCBQYXJ0aXRpb25DbWQpKTsKKwkJCQljbWQgPSAoUGFydGl0aW9uQ21kICopIHN1YmNtZC0+ZGVm OworCisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJERVRBQ0ggUEFSVElUSU9OICV7cGFy dGl0aW9uX2lkZW50aXR5fUQgJXtjb25jdXJyZW50fXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkiZGV0YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkJ InBhcnRpdGlvbl9pZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJ c3ViLT5hZGRyZXNzLm9iamVjdElkKSwKKwkJCQkJCQkJCQljbWQtPmNvbmN1cnJlbnQgPyAiQ09O Q1VSUkVOVExZIiA6ICIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIEFUX0RldGFj aFBhcnRpdGlvbkZpbmFsaXplOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNI IFBBUlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIEZJTkFMSVpFIiwgMiwKKwkJCQkJCQkJ CQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkZXRhY2ggcGFydGl0aW9uIGZpbmFsaXplIiwKKwkJ CQkJCQkJCQkicGFydGl0aW9uX2lkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQlu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQkJCQlzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNl IEFUX0FkZElkZW50aXR5OgorCQkJCXsKKwkJCQkJQXR0ck51bWJlcglhdHRudW07CisJCQkJCU9p ZAkJCXNlcV9yZWxpZDsKKwkJCQkJT2JqVHJlZSAgICAqc2VxZGVmOworCQkJCQlDb2x1bW5EZWYg ICpjb2xkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCisJCQkJCXRtcF9vYmogPSBu ZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkiLCAyLAorCQkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgaWRlbnRpdHkiLAorCQkJCQkJCQkJCQkiY29sdW1u IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlhdHRudW0gPSBnZXRfYXR0 bnVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2VxX3JlbGlk ID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwgdHJ1 ZSk7CisKKwkJCQkJaWYgKE9pZElzVmFsaWQoc2VxX3JlbGlkKSkKKwkJCQkJeworCQkJCQkJc2Vx ZGVmID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzZXFfcmVsaWQsIGNvbGRlZi0+aWRlbnRpdHks IGZhbHNlKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICJBREQgJXtpZGVu dGl0eV9jb2x1bW59cyIsIHNlcWRlZik7CisJCQkJCX0KKworCQkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJfQorCQkJCWJyZWFr OworCQkJY2FzZSBBVF9TZXRJZGVudGl0eToKKwkJCQl7CisJCQkJCURlZkVsZW0gICAgKmRlZmVs OworCQkJCQljaGFyCQlpZGVudGl0eSA9IDA7CisJCQkJCU9ialRyZWUgICAgKnNlcWRlZjsKKwkJ CQkJQXR0ck51bWJlcglhdHRudW07CisJCQkJCU9pZAkJCXNlcV9yZWxpZDsKKworCisJCQkJCXRt cF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkiLCAyLAorCQkJ CQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgaWRlbnRpdHkiLAorCQkJCQkJCQkJ CQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlpZiAoc3Vi Y21kLT5kZWYpCisJCQkJCXsKKwkJCQkJCUxpc3QJICAgKmRlZiA9IChMaXN0ICopIHN1YmNtZC0+ ZGVmOworCisJCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBMaXN0KSk7CisKKwkJCQkJCWRl ZmVsID0gbGluaXRpYWxfbm9kZShEZWZFbGVtLCBkZWYpOworCQkJCQkJaWRlbnRpdHkgPSBkZWZH ZXRJbnQzMihkZWZlbCk7CisJCQkJCX0KKworCQkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0 aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2VxX3JlbGlkID0gZ2V0SWRl bnRpdHlTZXF1ZW5jZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwgdHJ1ZSk7CisKKwkJ CQkJaWYgKE9pZElzVmFsaWQoc2VxX3JlbGlkKSkKKwkJCQkJeworCQkJCQkJc2VxZGVmID0gZGVw YXJzZV9Db2x1bW5JZGVudGl0eShzZXFfcmVsaWQsIGlkZW50aXR5LCB0cnVlKTsKKwkJCQkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle2RlZmluaXRpb259cyIsIHNlcWRlZik7CisJ CQkJCX0KKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCWNhc2UgQVRfRHJvcElkZW50aXR5 OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkg RFJPUCBJREVOVElUWSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJv cCBpZGVudGl0eSIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+ bmFtZSk7CisKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtpZl9leGlzdHN9 cyIsCisJCQkJCQkJCQkgImlmX2V4aXN0cyIsCisJCQkJCQkJCQkgc3ViY21kLT5taXNzaW5nX29r ID8gIklGIEVYSVNUUyIgOiAiIik7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJ CWVsb2coV0FSTklORywgInVuc3VwcG9ydGVkIGFsdGVyIHRhYmxlIHN1YnR5cGUgJWQiLAorCQkJ CQkgc3ViY21kLT5zdWJ0eXBlKTsKKwkJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFdlIGRv bid0IHN1cHBvcnQgcmVwbGljYXRpbmcgQUxURVIgVEFCTEUgd2hpY2ggY29udGFpbnMgdm9sYXRp bGUKKwkJICogZnVuY3Rpb25zIGJlY2F1c2UgSXQncyBwb3NzaWJsZSB0aGUgZnVuY3Rpb25zIGNv bnRhaW4gRERML0RNTCBpbgorCQkgKiB3aGljaCBjYXNlIHRoZXNlIG9wZXJhdGlvbnMgd2lsbCBi ZSBleGVjdXRlZCB0d2ljZSBhbmQgY2F1c2UKKwkJICogZHVwbGljYXRlIGRhdGEuIEluIGFkZGl0 aW9uLCB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIHRhYmxlcyBiZWluZworCQkgKiBhY2Nlc3Nl ZCBieSB0aGVzZSBEREwvRE1MIGFyZSBwdWJsaXNoZWQgb3Igbm90LiBTbyBibGluZGx5IGFsbG93 aW5nCisJCSAqIHN1Y2ggZnVuY3Rpb25zIGNhbiBhbGxvdyB1bmludGVuZGVkIGNsYXVzZXMgbGlr ZSB0aGUgdGFibGVzCisJCSAqIGFjY2Vzc2VkIGluIHRob3NlIGZ1bmN0aW9ucyBtYXkgbm90IGV2 ZW4gZXhpc3Qgb24gdGhlIHN1YnNjcmliZXIuCisJCSAqLworCQlpZiAoY29udGFpbl92b2xhdGls ZV9mdW5jdGlvbnMoKE5vZGUgKikgZXhwcnMpKQorCQkJZWxvZyhFUlJPUiwgIkFMVEVSIFRBQkxF IGNvbW1hbmQgdXNpbmcgdm9sYXRpbGUgZnVuY3Rpb24gY2Fubm90IGJlIHJlcGxpY2F0ZWQiKTsK KworCQkvKgorCQkgKiBDbGVhbiB0aGUgbGlzdCBhcyB3ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGVy ZSBpcyBubyB2b2xhdGlsZQorCQkgKiBmdW5jdGlvbi4KKwkJICovCisJCWxpc3RfZnJlZShleHBy cyk7CisJCWV4cHJzID0gTklMOworCX0KKworCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVM b2NrKTsKKworCWlmIChsaXN0X2xlbmd0aChzdWJjbWRzKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsK KworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtzdWJjbWRzOiwgfXMiLCBzdWJjbWRzKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIERST1AgY29t bWFuZHMuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIERST1AgJXMgSUYgRVhJU1RTICUle29i amlkZW50aXR5fXMgJXtjYXNjYWRlfXMKKyAqLworY2hhciAqCitkZXBhcnNlX2Ryb3BfY29tbWFu ZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAqb2JqZWN0dHlwZSwKKwkJCQkJ IERyb3BCZWhhdmlvciBiZWhhdmlvcikKK3sKKwlTdHJpbmdJbmZvRGF0YSBzdHI7CisJY2hhcgkg ICAqY29tbWFuZDsKKwljaGFyCSAgICppZGVudGl0eSA9IChjaGFyICopIG9iamlkZW50aXR5Owor CU9ialRyZWUgICAgKnN0bXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlKc29uYgkgICAqanNv bmI7CisKKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgi RFJPUCAle29ianR5cGV9cyBJRiBFWElTVFMgJXtvYmppZGVudGl0eX1zIiwgMiwKKwkJCQkJCSAg Im9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLCBvYmplY3R0eXBlLAorCQkJCQkJICAib2JqaWRlbnRp dHkiLCBPYmpUeXBlU3RyaW5nLCBpZGVudGl0eSk7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWVf VkEoIkNBU0NBREUiLCAxLAorCQkJCQkJCSJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGJlaGF2aW9y ID09IERST1BfQ0FTQ0FERSk7CisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7Y2FzY2Fk ZX1zIiwgdG1wX29iaik7CisKKwlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIoc3RtdCk7CisJY29t bWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwgSlNPTkJfRVNUSU1BVEVE X0xFTik7CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcg b2Ygc2ltcGxlIGNvbW1hbmRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGNvdmVyIGFs bCBjYXNlcyBoYW5kbGVkIGluIFByb2Nlc3NVdGlsaXR5U2xvdy4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJ T2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJQXNzZXJ0KGNtZC0+dHlw ZSA9PSBTQ1RfU2ltcGxlKTsKKworCXBhcnNldHJlZSA9IGNtZC0+cGFyc2V0cmVlOworCW9iamVj dElkID0gY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkOworCisJaWYgKGNtZC0+aW5fZXh0 ZW5zaW9uICYmIChub2RlVGFnKHBhcnNldHJlZSkgIT0gVF9DcmVhdGVFeHRlbnNpb25TdG10KSkK KwkJcmV0dXJuIE5VTEw7CisKKwkvKiBUaGlzIHN3aXRjaCBuZWVkcyB0byBoYW5kbGUgZXZlcnl0 aGluZyB0aGF0IFByb2Nlc3NVdGlsaXR5U2xvdyBkb2VzICovCisJc3dpdGNoIChub2RlVGFnKHBh cnNldHJlZSkpCisJeworCQljYXNlIFRfQ3JlYXRlU2VxU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0NyZWF0ZVNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVN0 bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwor CisJCWNhc2UgVF9JbmRleFN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9JbmRleFN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coTE9HLCAidW5yZWNvZ25pemVk IG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJCQkgKGludCkgbm9kZVRhZyhw YXJzZXRyZWUpKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFdvcmtob3JzZSB0 byBkZXBhcnNlIGEgQ29sbGVjdGVkQ29tbWFuZC4KKyAqLworY2hhciAqCitkZXBhcnNlX3V0aWxp dHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKQorewor CU92ZXJyaWRlU2VhcmNoUGF0aCAqb3ZlcnJpZGVQYXRoOworCU1lbW9yeUNvbnRleHQgb2xkY3h0 OworCU1lbW9yeUNvbnRleHQgdG1wY3h0OworCU9ialRyZWUgICAgKnRyZWU7CisJY2hhcgkgICAq Y29tbWFuZCA9IE5VTEw7CisJU3RyaW5nSW5mb0RhdGEgc3RyOworCisJLyoKKwkgKiBBbGxvY2F0 ZSBldmVyeXRoaW5nIGRvbmUgYnkgdGhlIGRlcGFyc2luZyByb3V0aW5lcyBpbnRvIGEgdGVtcCBj b250ZXh0LAorCSAqIHRvIGF2b2lkIGhhdmluZyB0byBzcHJpbmtsZSB0aGVtIHdpdGggbWVtb3J5 IGhhbmRsaW5nIGNvZGUsIGJ1dAorCSAqIGFsbG9jYXRlIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBi ZWZvcmUgc3dpdGNoaW5nLgorCSAqLworCWluaXRTdHJpbmdJbmZvKCZzdHIpOworCXRtcGN4dCA9 IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJICAg ImRlcGFyc2UgY3R4IiwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAorCQkJ CQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX0lOSVRTSVpFLAorCQkJCQkJCQkgICBBTExPQ1NFVF9E RUZBVUxUX01BWFNJWkUpOworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjeHQp OworCisJLyoKKwkgKiBNYW55IHJvdXRpbmVzIHVuZGVybHlpbmcgdGhpcyBvbmUgd2lsbCBpbnZv a2UgcnVsZXV0aWxzLmMgZnVuY3Rpb25hbGl0eQorCSAqIHRvIG9idGFpbiBkZXBhcnNlZCB2ZXJz aW9ucyBvZiBleHByZXNzaW9ucy4gIEluIHN1Y2ggcmVzdWx0cywgd2Ugd2FudAorCSAqIGFsbCBv YmplY3QgbmFtZXMgdG8gYmUgcXVhbGlmaWVkLCBzbyB0aGF0IHJlc3VsdHMgYXJlICJwb3J0YWJs ZSIgdG8KKwkgKiBlbnZpcm9ubWVudHMgd2l0aCBkaWZmZXJlbnQgc2VhcmNoX3BhdGggc2V0dGlu Z3MuICBSYXRoZXIgdGhhbiBpbmplY3QKKwkgKiB3aGF0IHdvdWxkIGJlIHJlcGV0aXRpdmUgY2Fs bHMgdG8gb3ZlcnJpZGUgc2VhcmNoIHBhdGggYWxsIG92ZXIgdGhlCisJICogcGxhY2UsIHdlIGRv IGl0IGNlbnRyYWxseSBoZXJlLgorCSAqLworCW92ZXJyaWRlUGF0aCA9IEdldE92ZXJyaWRlU2Vh cmNoUGF0aChDdXJyZW50TWVtb3J5Q29udGV4dCk7CisJb3ZlcnJpZGVQYXRoLT5zY2hlbWFzID0g TklMOworCW92ZXJyaWRlUGF0aC0+YWRkQ2F0YWxvZyA9IGZhbHNlOworCW92ZXJyaWRlUGF0aC0+ YWRkVGVtcCA9IHRydWU7CisJUHVzaE92ZXJyaWRlU2VhcmNoUGF0aChvdmVycmlkZVBhdGgpOwor CisJdmVyYm9zZSA9IHZlcmJvc2VfbW9kZTsKKworCXN3aXRjaCAoY21kLT50eXBlKQorCXsKKwkJ Y2FzZSBTQ1RfU2ltcGxlOgorCQkJdHJlZSA9IGRlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoY21kKTsK KwkJCWJyZWFrOworCQljYXNlIFNDVF9BbHRlclRhYmxlOgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0 ZXJSZWxhdGlvbihjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CisJ CQl0cmVlID0gZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWRl ZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBkZXBhcnNlIG5vZGUgdHlwZSAlZCIs IGNtZC0+dHlwZSk7CisJfQorCisJUG9wT3ZlcnJpZGVTZWFyY2hQYXRoKCk7CisKKwlpZiAodHJl ZSkKKwl7CisJCUpzb25iCSAgICpqc29uYjsKKworCQlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIo dHJlZSk7CisJCWNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpT T05CX0VTVElNQVRFRF9MRU4pOworCX0KKworCS8qCisJICogQ2xlYW4gdXAuICBOb3RlIHRoYXQg c2luY2Ugd2UgY3JlYXRlZCB0aGUgU3RyaW5nSW5mbyBpbiB0aGUgY2FsbGVyJ3MKKwkgKiBjb250 ZXh0LCB0aGUgb3V0cHV0IHN0cmluZyBpcyBub3QgZGVsZXRlZCBoZXJlLgorCSAqLworCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCU1lbW9yeUNvbnRleHREZWxldGUodG1wY3h0KTsK KworCXJldHVybiBjb21tYW5kOworfQorCisvKgorICogR2l2ZW4gYSBDb2xsZWN0ZWRDb21tYW5k LCByZXR1cm4gYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGl0LgorICoKKyAqIFRoZSBjb21tYW5k IGlzIGV4cGFuZGVkIGZ1bGx5IHNvIHRoYXQgdGhlcmUgYXJlIG5vIGFtYmlndWl0aWVzIGV2ZW4g aW4gdGhlCisgKiBmYWNlIG9mIHNlYXJjaF9wYXRoIGNoYW5nZXMuCisgKi8KK0RhdHVtCitkZGxf ZGVwYXJzZV90b19qc29uKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQ29sbGVjdGVkQ29tbWFuZCAq Y21kID0gKENvbGxlY3RlZENvbW1hbmQgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisJY2hhcgkg ICAqY29tbWFuZDsKKworCWNvbW1hbmQgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIHRy dWUpOworCisJaWYgKGNvbW1hbmQpCisJCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0 KGNvbW1hbmQpKTsKKworCVBHX1JFVFVSTl9OVUxMKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9kZGxfanNvbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24u YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Q4ZjYwCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYwpAQCAtMCwwICsxLDc3MSBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2pzb24uYworICoJICBKU09OIGNvZGUg cmVsYXRlZCB0byBEREwgY29tbWFuZCBkZXBhcnNpbmcKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBv ZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvY29t bWFuZHMvZGRsX2pzb24uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAi cG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCisjaW5jbHVkZSAidGNv cC9kZGxfZGVwYXJzZS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAi dXRpbHMvanNvbmIuaCIKKworCisvKgorICogQ29udmVyc2lvbiBzcGVjaWZpZXIgd2hpY2ggZGV0 ZXJtaW5lcyBob3cgdG8gZXhwYW5kIHRoZSBKU09OIGVsZW1lbnQKKyAqIGludG8gYSBzdHJpbmcu CisgKi8KK3R5cGVkZWYgZW51bQoreworCVNwZWNEb3R0ZWROYW1lLAorCVNwZWNJZGVudGlmaWVy LAorCVNwZWNOdW1iZXIsCisJU3BlY09wZXJhdG9yTmFtZSwKKwlTcGVjUm9sZSwKKwlTcGVjU3Ry aW5nLAorCVNwZWNTdHJpbmdMaXRlcmFsLAorCVNwZWNUeXBlTmFtZQorfSBjb252U3BlY2lmaWVy OworCisvKgorICogQSB0ZXJuYXJ5IHZhbHVlIHRoYXQgcmVwcmVzZW50cyBhIGJvb2xlYW4gdHlw ZSBKc29uYlZhbHVlLgorICovCit0eXBlZGVmIGVudW0KK3sKKwl0dl9hYnNlbnQsCisJdHZfdHJ1 ZSwKKwl0dl9mYWxzZQorfQkJCWpzb25fdHJpdmFsdWU7CisKK3N0YXRpYyBib29sIGV4cGFuZF9v bmVfanNvbmJfZWxlbWVudChTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJCQkJCQkg SnNvbmJWYWx1ZSAqanNvbnZhbCwgY29udlNwZWNpZmllciBzcGVjaWZpZXIsCisJCQkJCQkJCQkg Y29uc3QgY2hhciAqZm10KTsKK3N0YXRpYyB2b2lkIGV4cGFuZF9qc29uYl9hcnJheShTdHJpbmdJ bmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJCQkJICAgSnNvbmJWYWx1ZSAqanNvbmFyciwgY2hh ciAqYXJyYXlzZXAsCisJCQkJCQkJICAgY29udlNwZWNpZmllciBzcGVjaWZpZXIsIGNvbnN0IGNo YXIgKmZtdCk7CitzdGF0aWMgdm9pZCBmbXRzdHJfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKTsK KworLyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWluZXIsIGZpbmQgdGhlIEpzb25iVmFsdWUgd2l0 aCB0aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisgKiBJZiBpdCdzIG9mIGEgdHlwZSBvdGhlciB0 aGFuIGpidkJvb2wsIGFuIGVycm9yIGlzIHJhaXNlZC4gSWYgaXQgZG9lc24ndAorICogZXhpc3Qs IHR2X2Fic2VudCBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlIHJldHVybiB0aGUgYWN0dWFsIGpzb25f dHJpdmFsdWUuCisgKi8KK3N0YXRpYyBqc29uX3RyaXZhbHVlCitmaW5kX2Jvb2xfaW5fanNvbmJj b250YWluZXIoSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwgY2hhciAqa2V5bmFtZSkKK3sKKwlK c29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwlqc29uX3RyaXZhbHVlIHJlc3Vs dDsKKworCWtleS50eXBlID0gamJ2U3RyaW5nOworCWtleS52YWwuc3RyaW5nLnZhbCA9IGtleW5h bWU7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleW5hbWUpOworCXZhbHVlID0gZmlu ZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwKKwkJCQkJCQkJCQlKQl9GT0JKRUNU LCAma2V5KTsKKwlpZiAodmFsdWUgPT0gTlVMTCkKKwkJcmV0dXJuIHR2X2Fic2VudDsKKwlpZiAo dmFsdWUtPnR5cGUgIT0gamJ2Qm9vbCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwi JXNcIiBpcyBub3Qgb2YgdHlwZSBib29sZWFuIiwKKwkJCQkJCWtleW5hbWUpKSk7CisJcmVzdWx0 ID0gdmFsdWUtPnZhbC5ib29sZWFuID8gdHZfdHJ1ZSA6IHR2X2ZhbHNlOworCXBmcmVlKHZhbHVl KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBHaXZlbiBhIEpzb25iQ29udGFpbmVy LCBmaW5kIHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtleSBuYW1lIGluIGl0LgorICog SWYgaXQncyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZTdHJpbmcsIGFuIGVycm9yIGlzIHJhaXNl ZC4gIElmIGl0IGRvZXNuJ3QKKyAqIGV4aXN0LCBhbiBlcnJvciBpcyByYWlzZWQgdW5sZXNzIG1p c3Npbmdfb2s7IG90aGVyd2lzZSByZXR1cm4gTlVMTC4KKyAqCisgKiBJZiBpdCBleGlzdHMgYW5k IGlzIGEgc3RyaW5nLCBhIGZyZXNobHkgcGFsbG9jJ2VkIGNvcHkgaXMgcmV0dXJuZWQuCisgKgor ICogSWYgKmxlbmd0aCBpcyBub3QgTlVMTCwgaXQgaXMgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhl IHN0cmluZy4KKyAqLworc3RhdGljIGNoYXIgKgorZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWlu ZXIoSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwgY2hhciAqa2V5bmFtZSwKKwkJCQkJCQkgIGJv b2wgbWlzc2luZ19vaywgaW50ICpsZW5ndGgpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJW YWx1ZSAqdmFsdWU7CisJY2hhcgkgICAqc3RyOworCisJLyogWFhYIHZlcmlmeSB0aGF0IHRoaXMg aXMgYW4gb2JqZWN0LCBub3QgYW4gYXJyYXkgKi8KKworCWtleS50eXBlID0gamJ2U3RyaW5nOwor CWtleS52YWwuc3RyaW5nLnZhbCA9IGtleW5hbWU7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3Ry bGVuKGtleW5hbWUpOworCXZhbHVlID0gZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRh aW5lciwKKwkJCQkJCQkJCQlKQl9GT0JKRUNULCAma2V5KTsKKwlpZiAodmFsdWUgPT0gTlVMTCkK Kwl7CisJCWlmIChtaXNzaW5nX29rKQorCQkJcmV0dXJuIE5VTEw7CisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVy cm1zZygibWlzc2luZyBlbGVtZW50IFwiJXNcIiBpbiBKU09OIG9iamVjdCIsIGtleW5hbWUpKSk7 CisJfQorCisJaWYgKHZhbHVlLT50eXBlICE9IGpidlN0cmluZykKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJy bXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3Qgb2YgdHlwZSBzdHJpbmciLCBrZXluYW1lKSkpOwor CisJc3RyID0gcG5zdHJkdXAodmFsdWUtPnZhbC5zdHJpbmcudmFsLCB2YWx1ZS0+dmFsLnN0cmlu Zy5sZW4pOworCWlmIChsZW5ndGgpCisJCSpsZW5ndGggPSB2YWx1ZS0+dmFsLnN0cmluZy5sZW47 CisJcGZyZWUodmFsdWUpOworCXJldHVybiBzdHI7Cit9CisKKyNkZWZpbmUgQURWQU5DRV9QQVJT RV9QT0lOVEVSKHB0cixlbmRfcHRyKSBcCisJZG8geyBcCisJCWlmICgrKyhwdHIpID49IChlbmRf cHRyKSkgXAorCQkJZXJlcG9ydChFUlJPUiwgXAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwgXAorCQkJCQkgZXJybXNnKCJ1bnRlcm1pbmF0ZWQgZm9ybWF0 IHNwZWNpZmllciIpKSk7IFwKKwl9IHdoaWxlICgwKQorCisvKgorICogUmVjdXJzaXZlIGhlbHBl ciBmb3IgZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcuCisgKgorICogRmluZCB0aGUgImZtdCIg ZWxlbWVudCBpbiB0aGUgZ2l2ZW4gY29udGFpbmVyLCBhbmQgZXhwYW5kIGl0IGludG8gdGhlCisg KiBwcm92aWRlZCBTdHJpbmdJbmZvLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2ZtdF9yZWN1 cnNpdmUoU3RyaW5nSW5mbyBidWYsIEpzb25iQ29udGFpbmVyICpjb250YWluZXIpCit7CisJSnNv bmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJY29uc3QgY2hhciAqY3A7CisJY29u c3QgY2hhciAqc3RhcnRfcHRyOworCWNvbnN0IGNoYXIgKmVuZF9wdHI7CisJaW50CQkJbGVuOwor CisJc3RhcnRfcHRyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoY29udGFpbmVyLCAi Zm10IiwgZmFsc2UsICZsZW4pOworCWVuZF9wdHIgPSBzdGFydF9wdHIgKyBsZW47CisKKwlmb3Ig KGNwID0gc3RhcnRfcHRyOyBjcCA8IGVuZF9wdHI7IGNwKyspCisJeworCQljb252U3BlY2lmaWVy IHNwZWNpZmllcjsKKwkJYm9vbAkJaXNfYXJyYXkgPSBmYWxzZTsKKwkJY2hhcgkgICAqcGFyYW0g PSBOVUxMOworCQljaGFyCSAgICphcnJheXNlcCA9IE5VTEw7CisKKwkJaWYgKCpjcCAhPSAnJScp CisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmLCAqY3ApOworCQkJY29udGlu dWU7CisJCX0KKworCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCisJCS8q IEVhc3kgY2FzZTogJSUgb3V0cHV0cyBhIHNpbmdsZSAlICovCisJCWlmICgqY3AgPT0gJyUnKQor CQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZiwgKmNwKTsKKwkJCWNvbnRpbnVl OworCQl9CisKKwkJLyoKKwkJICogU2NhbiB0aGUgbWFuZGF0b3J5IGVsZW1lbnQgbmFtZS4gIEFs bG93IGZvciBhbiBhcnJheSBzZXBhcmF0b3IKKwkJICogKHdoaWNoIG1heSBiZSB0aGUgZW1wdHkg c3RyaW5nKSB0byBiZSBzcGVjaWZpZWQgYWZ0ZXIgYSBjb2xvbi4KKwkJICovCisJCWlmICgqY3Ag PT0gJ3snKQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBwYXJidWY7CisJCQlTdHJpbmdJbmZvRGF0 YSBhcnJheXNlcGJ1ZjsKKwkJCVN0cmluZ0luZm8JYXBwZW5kVG87CisKKwkJCWluaXRTdHJpbmdJ bmZvKCZwYXJidWYpOworCQkJYXBwZW5kVG8gPSAmcGFyYnVmOworCisJCQlBRFZBTkNFX1BBUlNF X1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJd2hpbGUgKGNwIDwgZW5kX3B0cikKKwkJCXsKKwkJ CQlpZiAoKmNwID09ICc6JykKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZvdW5kIGFycmF5IHNl cGFyYXRvciBkZWxpbWl0ZXI7IGVsZW1lbnQgbmFtZSBpcyBub3cKKwkJCQkJICogY29tcGxldGUs IHN0YXJ0IGZpbGxpbmcgdGhlIHNlcGFyYXRvci4KKwkJCQkJICovCisJCQkJCWluaXRTdHJpbmdJ bmZvKCZhcnJheXNlcGJ1Zik7CisJCQkJCWFwcGVuZFRvID0gJmFycmF5c2VwYnVmOworCQkJCQlp c19hcnJheSA9IHRydWU7CisJCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7 CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCWlmICgqY3AgPT0gJ30nKQorCQkJCXsKKwkJ CQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCQkJYnJlYWs7CisJCQkJ fQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYXBwZW5kVG8sICpjcCk7CisJCQkJQURW QU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCX0KKwkJCXBhcmFtID0gcGFyYnVm LmRhdGE7CisJCQlpZiAoaXNfYXJyYXkpCisJCQkJYXJyYXlzZXAgPSBhcnJheXNlcGJ1Zi5kYXRh OworCQl9CisJCWlmIChwYXJhbSA9PSBOVUxMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIm1p c3NpbmcgY29udmVyc2lvbiBuYW1lIGluIGNvbnZlcnNpb24gc3BlY2lmaWVyIikpKTsKKworCQlz d2l0Y2ggKCpjcCkKKwkJeworCQkJY2FzZSAnSSc6CisJCQkJc3BlY2lmaWVyID0gU3BlY0lkZW50 aWZpZXI7CisJCQkJYnJlYWs7CisJCQljYXNlICdEJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjRG90 dGVkTmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3MnOgorCQkJCXNwZWNpZmllciA9IFNwZWNT dHJpbmc7CisJCQkJYnJlYWs7CisJCQljYXNlICdMJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjU3Ry aW5nTGl0ZXJhbDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1QnOgorCQkJCXNwZWNpZmllciA9IFNw ZWNUeXBlTmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ08nOgorCQkJCXNwZWNpZmllciA9IFNw ZWNPcGVyYXRvck5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICduJzoKKwkJCQlzcGVjaWZpZXIg PSBTcGVjTnVtYmVyOworCQkJCWJyZWFrOworCQkJY2FzZSAnUic6CisJCQkJc3BlY2lmaWVyID0g U3BlY1JvbGU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBl cnJtc2coImludmFsaWQgY29udmVyc2lvbiBzcGVjaWZpZXIgXCIlY1wiIiwgKmNwKSkpOworCQl9 CisKKwkJLyoKKwkJICogT2J0YWluIHRoZSBlbGVtZW50IHRvIGJlIGV4cGFuZGVkLgorCQkgKi8K KwkJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJCWtleS52YWwuc3RyaW5nLnZhbCA9IHBhcmFtOwor CQlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ocGFyYW0pOworCisJCXZhbHVlID0gZmluZEpz b25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgSkJfRk9CSkVDVCwgJmtleSk7CisKKwkJ LyoKKwkJICogRXhwYW5kIHRoZSBkYXRhIChwb3NzaWJseSBhbiBhcnJheSkgaW50byB0aGUgb3V0 cHV0IFN0cmluZ0luZm8uCisJCSAqLworCQlpZiAoaXNfYXJyYXkpCisJCQlleHBhbmRfanNvbmJf YXJyYXkoYnVmLCBwYXJhbSwgdmFsdWUsIGFycmF5c2VwLCBzcGVjaWZpZXIsIHN0YXJ0X3B0cik7 CisJCWVsc2UKKwkJCWV4cGFuZF9vbmVfanNvbmJfZWxlbWVudChidWYsIHBhcmFtLCB2YWx1ZSwg c3BlY2lmaWVyLCBzdGFydF9wdHIpOworCX0KK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFs dWUgYXMgYSBxdW90ZWQgaWRlbnRpZmllci4gIFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUgc3Ry aW5nLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfaWRlbnRpZmllcihTdHJpbmdJ bmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisKKwlBc3Nl cnQoanNvbnZhbC0+dHlwZSA9PSBqYnZTdHJpbmcpOworCisJc3RyID0gcG5zdHJkdXAoanNvbnZh bC0+dmFsLnN0cmluZy52YWwsIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKwlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwlwZnJlZShzdHIpOwor fQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIGRvdC1zZXBhcmF0ZWQtbmFtZS4g IFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUKKyAqIGJpbmFyeSBhbmQgbWF5IGNvbnRhaW4gZWxl bWVudHMgInNjaGVtYW5hbWUiIChvcHRpb25hbCksICJvYmpuYW1lIgorICogKG1hbmRhdG9yeSks ICJhdHRybmFtZSIgKG9wdGlvbmFsKS4gIERvdWJsZSBxdW90ZXMgYXJlIGFkZGVkIHRvIGVhY2gg ZWxlbWVudAorICogYXMgbmVjZXNzYXJ5LCBhbmQgZG90IHNlcGFyYXRvcnMgd2hlcmUgbmVlZGVk LgorICoKKyAqIE9uZSBkYXkgd2UgbWlnaHQgbmVlZCBhICJjYXRhbG9nIiBlbGVtZW50IGFzIHdl bGwsIGJ1dCBubyBjdXJyZW50IHVzZSBjYXNlCisgKiBuZWVkcyB0aGF0LgorICovCitzdGF0aWMg dm9pZAorZXhwYW5kX2pzb252YWxfZG90dGVkbmFtZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1 ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisJSnNvbmJDb250YWluZXIgKmRhdGEgPSBq c29udmFsLT52YWwuYmluYXJ5LmRhdGE7CisKKwlBc3NlcnQoanNvbnZhbC0+dHlwZSA9PSBqYnZC aW5hcnkpOworCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoZGF0YSwgInNj aGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5m byhidWYsICIlcy4iLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0K KworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGRhdGEsICJvYmpuYW1lIiwg ZmFsc2UsIE5VTEwpOworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCBxdW90ZV9pZGVudGlm aWVyKHN0cikpOworCXBmcmVlKHN0cik7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNv bnRhaW5lcihkYXRhLCAiYXR0cm5hbWUiLCB0cnVlLCBOVUxMKTsKKwlpZiAoc3RyKQorCXsKKwkJ YXBwZW5kU3RyaW5nSW5mbyhidWYsICIuJXMiLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCQlw ZnJlZShzdHIpOworCX0KK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMgYSB0eXBl IG5hbWUuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF90eXBlbmFtZShTdHJpbmdJ bmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzY2hlbWEgPSBOVUxM OworCWNoYXIJICAgKnR5cGVuYW1lOworCWNoYXIJICAgKnR5cG1vZHN0cjsKKwlqc29uX3RyaXZh bHVlIGlzX2FycmF5OworCWNoYXIJICAgKmFycmF5X2RlY29yOworCUpzb25iQ29udGFpbmVyICpk YXRhID0ganNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhOworCisJLyoKKwkgKiBXZSBvbWl0IHNjaGVt YS1xdWFsaWZ5aW5nIHRoZSBvdXRwdXQgbmFtZSBpZiB0aGUgc2NoZW1hIGVsZW1lbnQgaXMKKwkg KiBlaXRoZXIgdGhlIGVtcHR5IHN0cmluZyBvciBOVUxMOyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVu IHRob3NlIHR3byBjYXNlcworCSAqIGlzIHRoYXQgaW4gdGhlIGxhdHRlciB3ZSBxdW90ZSB0aGUg dHlwZSBuYW1lLCBpbiB0aGUgZm9ybWVyIHdlIGRvbid0LgorCSAqIFRoaXMgYWxsb3dzIGZvciB0 eXBlcyB3aXRoIHNwZWNpYWwgdHlwbW9kIG5lZWRzLCBzdWNoIGFzIGludGVydmFsIGFuZAorCSAq IHRpbWVzdGFtcCAoc2VlIGZvcm1hdF90eXBlX2RldGFpbGVkKSwgd2hpbGUgYXQgdGhlIHNhbWUg dGltZSBhbGxvd2luZworCSAqIGZvciB0aGUgc2NoZW1hIG5hbWUgdG8gYmUgb21pdHRlZCBmcm9t IHR5cGUgbmFtZXMgdGhhdCByZXF1aXJlIHF1b3RlcworCSAqIGJ1dCBhcmUgdG8gYmUgb2J0YWlu ZWQgZnJvbSBhIHVzZXIgc2NoZW1hLgorCSAqLworCisJc2NoZW1hID0gZmluZF9zdHJpbmdfaW5f anNvbmJjb250YWluZXIoZGF0YSwgInNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwl0eXBlbmFt ZSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGRhdGEsICJ0eXBlbmFtZSIsIGZhbHNl LCBOVUxMKTsKKwl0eXBtb2RzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihkYXRh LCAidHlwbW9kIiwgdHJ1ZSwgTlVMTCk7CisJaXNfYXJyYXkgPSBmaW5kX2Jvb2xfaW5fanNvbmJj b250YWluZXIoZGF0YSwgInR5cGFycmF5Iik7CisJc3dpdGNoIChpc19hcnJheSkKKwl7CisJCWNh c2UgdHZfdHJ1ZToKKwkJCWFycmF5X2RlY29yID0gIltdIjsKKwkJCWJyZWFrOworCisJCWNhc2Ug dHZfZmFsc2U6CisJCQlhcnJheV9kZWNvciA9ICIiOworCQkJYnJlYWs7CisKKwkJY2FzZSB0dl9h YnNlbnQ6CisJCWRlZmF1bHQ6CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygibWlzc2luZyB0eXBh cnJheSBlbGVtZW50IikpKTsKKwl9CisKKwlpZiAoc2NoZW1hID09IE5VTEwpCisJCWFwcGVuZFN0 cmluZ0luZm8oYnVmLCAiJXMiLCBxdW90ZV9pZGVudGlmaWVyKHR5cGVuYW1lKSk7CisJZWxzZSBp ZiAoc2NoZW1hWzBdID09ICdcMCcpCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCB0eXBl bmFtZSk7CS8qIFNwZWNpYWwgdHlwbW9kIG5lZWRzICovCisJZWxzZQorCQlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIiVzLiVzIiwgcXVvdGVfaWRlbnRpZmllcihzY2hlbWEpLAorCQkJCQkJIHF1b3Rl X2lkZW50aWZpZXIodHlwZW5hbWUpKTsKKworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyIs IHR5cG1vZHN0ciA/IHR5cG1vZHN0ciA6ICIiLCBhcnJheV9kZWNvcik7CisJcGZyZWUoc2NoZW1h KTsKKwlwZnJlZSh0eXBlbmFtZSk7CisJcGZyZWUodHlwbW9kc3RyKTsKK30KKworLyoKKyAqIEV4 cGFuZCBhIEpTT04gdmFsdWUgYXMgYW4gb3BlcmF0b3IgbmFtZS4gVGhlIHZhbHVlIG1heSBjb250 YWluIGVsZW1lbnRzCisgKiAic2NoZW1hbmFtZSIgKG9wdGlvbmFsKSBhbmQgIm9iam5hbWUiIChv cHRpb25hbCkuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9vcGVyYXRvcihTdHJp bmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisJSnNv bmJDb250YWluZXIgKmRhdGEgPSBqc29udmFsLT52YWwuYmluYXJ5LmRhdGE7CisKKwlzdHIgPSBm aW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihkYXRhLCAic2NoZW1hbmFtZSIsIHRydWUsIE5V TEwpOworCS8qIFNjaGVtYSBtaWdodCBiZSBOVUxMIG9yIGVtcHR5ICovCisJaWYgKHN0ciAhPSBO VUxMICYmIHN0clswXSAhPSAnXDAnKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4i LCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0KKworCXN0ciA9IGZp bmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGRhdGEsICJvYmpuYW1lIiwgZmFsc2UsIE5VTEwp OworCWlmIChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwgc3RyKTsKKwkJ cGZyZWUoc3RyKTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGEgc3Ry aW5nLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3Igb2YKKyAqIHR5cGUgQmlu YXJ5LiAgSW4gdGhlIGxhdHRlciBjYXNlLCBpdCBtdXN0IGNvbnRhaW4gYSAiZm10IiBlbGVtZW50 IHdoaWNoIHdpbGwKKyAqIGJlIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkOyBhbHNvLCBpZiB0aGUgb2Jq ZWN0IGNvbnRhaW5zIGFuIGVsZW1lbnQgInByZXNlbnQiCisgKiBhbmQgaXQgaXMgc2V0IHRvIGZh bHNlLCB0aGUgZXhwYW5zaW9uIGlzIHRoZSBlbXB0eSBzdHJpbmcuCisgKgorICogUmV0dXJucyBm YWxzZSBpZiBubyBhY3R1YWwgZXhwYW5zaW9uIHdhcyBtYWRlIGR1ZSB0byB0aGUgInByZXNlbnQi IGZsYWcKKyAqIGJlaW5nIHNldCB0byAiZmFsc2UiLgorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVz cG9uc2libGUgdG8gY2hlY2sganNvbnZhbCBpcyBvZiB0eXBlIGpidlN0cmluZyBvciBqYnZCaW5h cnkuCisgKi8KK3N0YXRpYyBib29sCitleHBhbmRfanNvbnZhbF9zdHJpbmcoU3RyaW5nSW5mbyBi dWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2U3Ry aW5nKQorCXsKKwkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsIGpzb252YWwtPnZhbC5zdHJp bmcudmFsLAorCQkJCQkJCSAgIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKwl9CisJZWxzZSBp ZiAoanNvbnZhbC0+dHlwZSA9PSBqYnZCaW5hcnkpCisJeworCQlqc29uX3RyaXZhbHVlIHByZXNl bnQ7CisKKwkJcHJlc2VudCA9IGZpbmRfYm9vbF9pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52 YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSAgInByZXNlbnQiKTsKKworCQkvKgorCQkgKiBJ ZiAicHJlc2VudCIgaXMgc2V0IHRvIGZhbHNlLCB0aGlzIGVsZW1lbnQgZXhwYW5kcyB0byBlbXB0 eTsKKwkJICogb3RoZXJ3aXNlIChlaXRoZXIgdHJ1ZSBvciBhYnNlbnQpLCBmYWxsIHRocm91Z2gg dG8gZXhwYW5kICJmbXQiLgorCQkgKi8KKwkJaWYgKHByZXNlbnQgPT0gdHZfZmFsc2UpCisJCQly ZXR1cm4gZmFsc2U7CisKKwkJZXhwYW5kX2ZtdF9yZWN1cnNpdmUoYnVmLCBqc29udmFsLT52YWwu YmluYXJ5LmRhdGEpOworCX0KKwllbHNlCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVl OworfQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhIHN0cmluZyBsaXRlcmFsLgor ICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfc3RybGl0KFN0cmluZ0luZm8gYnVmLCBK c29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKwlTdHJpbmdJbmZvRGF0YSBk cWRlbGltOworCXN0YXRpYyBjb25zdCBjaGFyIGRxc3VmZml4ZXNbXSA9ICJfWFlaWllYXyI7CisJ aW50CQkJZHFuZXh0Y2hhciA9IDA7CisKKwlzdHIgPSBwbnN0cmR1cChqc29udmFsLT52YWwuc3Ry aW5nLnZhbCwganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCisJLyogRWFzeSBjYXNlOiBpZiB0 aGVyZSBhcmUgbm8gJyBhbmQgbm8gXCwganVzdCB1c2UgYSBzaW5nbGUgcXVvdGUgKi8KKwlpZiAo c3RycGJyayhzdHIsICJcJ1xcIikgPT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVm LCAiJyVzJyIsIHN0cik7CisJCXBmcmVlKHN0cik7CisJCXJldHVybjsKKwl9CisKKwkvKiBPdGhl cndpc2UgbmVlZCB0byBmaW5kIGEgdXNlZnVsIGRvbGxhci1xdW90ZSBkZWxpbWl0ZXIgKi8KKwlp bml0U3RyaW5nSW5mbygmZHFkZWxpbSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZHFkZWxp bSwgIiQiKTsKKwl3aGlsZSAoc3Ryc3RyKHN0ciwgZHFkZWxpbS5kYXRhKSAhPSBOVUxMKQorCXsK KwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRxZGVsaW0sIGRxc3VmZml4ZXNbZHFuZXh0Y2hhcisr XSk7CisJCWRxbmV4dGNoYXIgPSBkcW5leHRjaGFyICUgKHNpemVvZihkcXN1ZmZpeGVzKSAtIDEp OworCX0KKwkvKiBBZGQgdHJhaWxpbmcgJCAqLworCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkcWRl bGltLCAnJCcpOworCisJLyogQW5kIGZpbmFsbHkgcHJvZHVjZSB0aGUgcXVvdGVkIGxpdGVyYWwg aW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8gKi8KKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVz JXMlcyIsIGRxZGVsaW0uZGF0YSwgc3RyLCBkcWRlbGltLmRhdGEpOworCXBmcmVlKGRxZGVsaW0u ZGF0YSk7CisJcGZyZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMg YW4gaW50ZWdlciBxdWFudGl0eS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX251 bWJlcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpz dHJkYXR1bTsKKworCUFzc2VydChqc29udmFsLT50eXBlID09IGpidk51bWVyaWMpOworCisJc3Ry ZGF0dW0gPSBEYXR1bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxsMShudW1lcmljX291dCwK KwkJCQkJCQkJCQkJCSAgIE51bWVyaWNHZXREYXR1bShqc29udmFsLT52YWwubnVtZXJpYykpKTsK KwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwgc3RyZGF0dW0pOworCXBmcmVlKHN0cmRhdHVt KTsKK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMgYSByb2xlIG5hbWUuICBJZiB0 aGUgJ2lzX3B1YmxpYycgZWxlbWVudCBpcyBzZXQgdG8KKyAqIHRydWUsIFBVQkxJQyBpcyBleHBh bmRlZCAobm8gcXVvdGVzKTsgb3RoZXJ3aXNlLCBleHBhbmQgdGhlIGdpdmVuIHJvbGUgbmFtZSwK KyAqIHF1b3RpbmcgYXMgYW4gaWRlbnRpZmllci4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9q c29udmFsX3JvbGUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJanNv bl90cml2YWx1ZSBpc19wdWJsaWM7CisKKwlpc19wdWJsaWMgPSBmaW5kX2Jvb2xfaW5fanNvbmJj b250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkiaXNfcHVibGlj Iik7CisJaWYgKGlzX3B1YmxpYyA9PSB0dl90cnVlKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGJ1ZiwgIlBVQkxJQyIpOworCWVsc2UKKwl7CisJCWNoYXIJICAgKnJvbGVuYW1lOworCisJCXJv bGVuYW1lID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFy eS5kYXRhLAorCQkJCQkJCQkJCQkJICJyb2xlbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwkJaWYgKHJv bGVuYW1lKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRp Zmllcihyb2xlbmFtZSkpOworCQkJcGZyZWUocm9sZW5hbWUpOworCQl9CisJfQorfQorCisvKgor ICogRXhwYW5kIG9uZSBKU09OIGVsZW1lbnQgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYWNj b3JkaW5nIHRvIHRoZQorICogY29udmVyc2lvbiBzcGVjaWZpZXIuICBUaGUgZWxlbWVudCB0eXBl IGlzIHZhbGlkYXRlZCwgYW5kIGFuIGVycm9yIGlzIHJhaXNlZAorICogaWYgaXQgZG9lc24ndCBt YXRjaCB3aGF0IHdlIGV4cGVjdCBmb3IgdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVyLgorICoKKyAq IFJldHVybnMgdHJ1ZSwgZXhjZXB0IGZvciB0aGUgZm9ybWF0dGVkIHN0cmluZyBjYXNlIGlmIG5v IGFjdHVhbCBleHBhbnNpb24KKyAqIHdhcyBtYWRlIChkdWUgdG8gdGhlICJwcmVzZW50IiBmbGFn IGJlaW5nIHNldCB0byAiZmFsc2UiKS4KKyAqLworc3RhdGljIGJvb2wKK2V4cGFuZF9vbmVfanNv bmJfZWxlbWVudChTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sIEpzb25iVmFsdWUgKmpzb252 YWwsCisJCQkJCQkgY29udlNwZWNpZmllciBzcGVjaWZpZXIsIGNvbnN0IGNoYXIgKmZtdCkKK3sK Kwlib29sCQlzdHJpbmdfZXhwYW5kZWQgPSB0cnVlOworCUVycm9yQ29udGV4dENhbGxiYWNrIHNx bGVycmNvbnRleHQ7CisKKwkvKiBJZiB3ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywgc2V0 dXAgYW4gZXJlcG9ydCgpIGNvbnRleHQgY2FsbGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJc3Fs ZXJyY29udGV4dC5jYWxsYmFjayA9IGZtdHN0cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJyY29u dGV4dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJCXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJv cl9jb250ZXh0X3N0YWNrOworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7 CisJfQorCisJaWYgKCFqc29udmFsKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIl c1wiIG5vdCBmb3VuZCIsIHBhcmFtKSkpOworCisJc3dpdGNoIChzcGVjaWZpZXIpCisJeworCQlj YXNlIFNwZWNJZGVudGlmaWVyOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQor CQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUkg ZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkp OworCQkJZXhwYW5kX2pzb252YWxfaWRlbnRpZmllcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBTcGVjRG90dGVkTmFtZToKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJp bmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cnVjdCBm b3IgJSVEIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+ dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX2RvdHRlZG5hbWUoYnVmLCBqc29udmFsKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgU3BlY1N0cmluZzoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpi dlN0cmluZyAmJgorCQkJCWpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQo RVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIG9yIHN0cnVjdCBmb3IgJSVzIGVs ZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsK KwkJCXN0cmluZ19leHBhbmRlZCA9IGV4cGFuZF9qc29udmFsX3N0cmluZyhidWYsIGpzb252YWwp OworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nTGl0ZXJhbDoKKwkJCWlmIChqc29udmFs LT50eXBlICE9IGpidlN0cmluZykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3Rl ZCBKU09OIHN0cmluZyBmb3IgJSVMIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlw YXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3N0cmxpdChidWYsIGpz b252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjVHlwZU5hbWU6CisJCQlpZiAoanNvbnZh bC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0 ZWQgSlNPTiBzdHJ1Y3QgZm9yICUlVCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJ cGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF90eXBlbmFtZShidWYs IGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjT3BlcmF0b3JOYW1lOgorCQkJaWYg KGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2co ImV4cGVjdGVkIEpTT04gc3RydWN0IGZvciAlJU8gZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJ CQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfb3BlcmF0 b3IoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY051bWJlcjoKKwkJCWlm IChqc29udmFsLT50eXBlICE9IGpidk51bWVyaWMpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1z ZygiZXhwZWN0ZWQgSlNPTiBudW1lcmljIGZvciAlJW4gZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIs CisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfbnVt YmVyKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNSb2xlOgorCQkJaWYg KGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2co ImV4cGVjdGVkIEpTT04gc3RydWN0IGZvciAlJVIgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJ CQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfcm9sZShi dWYsIGpzb252YWwpOworCQkJYnJlYWs7CisJfQorCisJaWYgKGZtdCkKKwkJZXJyb3JfY29udGV4 dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7CisKKwlyZXR1cm4gc3RyaW5nX2V4cGFu ZGVkOworfQorCisvKgorICogSXRlcmF0ZSBvbiB0aGUgZWxlbWVudHMgb2YgYSBKU09OIGFycmF5 LCBleHBhbmRpbmcgZWFjaCBvbmUgaW50byB0aGUgb3V0cHV0CisgKiBTdHJpbmdJbmZvIHBlciB0 aGUgZ2l2ZW4gY29udmVyc2lvbiBzcGVjaWZpZXIsIHNlcGFyYXRlZCBieSB0aGUgZ2l2ZW4KKyAq IHNlcGFyYXRvci4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29uYl9hcnJheShTdHJpbmdJ bmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJICAgSnNvbmJWYWx1ZSAqanNvbmFyciwgY2hhciAq YXJyYXlzZXAsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZt dCkKK3sKKwlFcnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJjb250ZXh0OworCUpzb25iQ29udGFp bmVyICpjb250YWluZXI7CisJSnNvbmJJdGVyYXRvciAqaXQ7CisJSnNvbmJWYWx1ZQl2OworCWlu dAkJCXR5cGU7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCVN0cmluZ0luZm9EYXRhIGFycmF5ZWxl bTsKKworCS8qIElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVw b3J0KCkgY29udGV4dCBjYWxsYmFjayAqLworCWlmIChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0 LmNhbGxiYWNrID0gZm10c3RyX2Vycm9yX2NhbGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9 ICh2b2lkICopIGZtdDsKKwkJc3FsZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRf c3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlp ZiAoanNvbmFyci0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxl bWVudCBcIiVzXCIgaXMgbm90IGEgSlNPTiBhcnJheSIsIHBhcmFtKSkpOworCisJY29udGFpbmVy ID0ganNvbmFyci0+dmFsLmJpbmFyeS5kYXRhOworCWlmICghSnNvbkNvbnRhaW5lcklzQXJyYXko Y29udGFpbmVyKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3Qg YSBKU09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwlpbml0U3RyaW5nSW5mbygmYXJyYXllbGVtKTsK KworCWl0ID0gSnNvbmJJdGVyYXRvckluaXQoY29udGFpbmVyKTsKKwl3aGlsZSAoKHR5cGUgPSBK c29uYkl0ZXJhdG9yTmV4dCgmaXQsICZ2LCB0cnVlKSkgIT0gV0pCX0RPTkUpCisJeworCQlpZiAo dHlwZSA9PSBXSkJfRUxFTSkKKwkJeworCQkJcmVzZXRTdHJpbmdJbmZvKCZhcnJheWVsZW0pOwor CisJCQlpZiAoZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KCZhcnJheWVsZW0sIHBhcmFtLCAmdiwg c3BlY2lmaWVyLCBOVUxMKSkKKwkJCXsKKwkJCQlpZiAoIWZpcnN0KQorCQkJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKGJ1ZiwgYXJyYXlzZXApOworCisJCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5m byhidWYsIGFycmF5ZWxlbS5kYXRhLCBhcnJheWVsZW0ubGVuKTsKKwkJCQlmaXJzdCA9IGZhbHNl OworCQkJfQorCQl9CisJfQorCisJaWYgKGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNx bGVycmNvbnRleHQucHJldmlvdXM7Cit9CisKKy8qCisgKiBXb3JraG9yc2UgZm9yIGRkbF9kZXBh cnNlX2V4cGFuZF9jb21tYW5kLgorICovCitjaGFyICoKK2RlcGFyc2VfZGRsX2pzb25fdG9fc3Ry aW5nKGNoYXIgKmpzb25fc3RyKQoreworCURhdHVtCQlkOworCUpzb25iCSAgICpqc29uYjsKKwlT dHJpbmdJbmZvCWJ1ZiA9IChTdHJpbmdJbmZvKSBwYWxsb2MwKHNpemVvZihTdHJpbmdJbmZvRGF0 YSkpOworCisJaW5pdFN0cmluZ0luZm8oYnVmKTsKKworCWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwx KGpzb25iX2luLCBQb2ludGVyR2V0RGF0dW0oanNvbl9zdHIpKTsKKwlqc29uYiA9IChKc29uYiAq KSBEYXR1bUdldFBvaW50ZXIoZCk7CisKKwlleHBhbmRfZm10X3JlY3Vyc2l2ZShidWYsICZqc29u Yi0+cm9vdCk7CisKKwlyZXR1cm4gYnVmLT5kYXRhOworfQorCisvKi0tLS0tLQorICogUmV0dXJu cyBhIGZvcm1hdHRlZCBzdHJpbmcgZnJvbSBhIEpTT04gb2JqZWN0LgorICoKKyAqIFRoZSBzdGFy dGluZyBwb2ludCBpcyB0aGUgZWxlbWVudCBuYW1lZCAiZm10IiAod2hpY2ggbXVzdCBiZSBhIHN0 cmluZykuCisgKiBUaGlzIGZvcm1hdCBzdHJpbmcgbWF5IGNvbnRhaW4gemVybyBvciBtb3JlICUt ZXNjYXBlcywgd2hpY2ggY29uc2lzdCBvZiBhbgorICogZWxlbWVudCBuYW1lIGVuY2xvc2VkIGlu IHsgfSwgcG9zc2libHkgZm9sbG93ZWQgYnkgYSBjb252ZXJzaW9uIG1vZGlmaWVyLAorICogZm9s bG93ZWQgYnkgYSBjb252ZXJzaW9uIHNwZWNpZmllci4gIFBvc3NpYmxlIGNvbnZlcnNpb24gc3Bl Y2lmaWVycyBhcmU6CisgKgorICogJQkJZXhwYW5kIHRvIGEgbGl0ZXJhbCAlCisgKiBJCQlleHBh bmQgYXMgYSBzaW5nbGUsIG5vbi1xdWFsaWZpZWQgaWRlbnRpZmllcgorICogRAkJZXhwYW5kIGFz IGEgcG9zc2libHktcXVhbGlmaWVkIGlkZW50aWZpZXIKKyAqIFQJCWV4cGFuZCBhcyBhIHR5cGUg bmFtZQorICogTwkJZXhwYW5kIGFzIGFuIG9wZXJhdG9yIG5hbWUKKyAqIEwJCWV4cGFuZCBhcyBh IHN0cmluZyBsaXRlcmFsIChxdW90ZSB1c2luZyBzaW5nbGUgcXVvdGVzKQorICogcwkJZXhwYW5k IGFzIGEgc2ltcGxlIHN0cmluZyAobm8gcXVvdGluZykKKyAqIG4JCWV4cGFuZCBhcyBhIHNpbXBs ZSBudW1iZXIgKG5vIHF1b3RpbmcpCisgKiBSCQlleHBhbmQgYXMgYSByb2xlIG5hbWUgKHBvc3Np Ymx5IHF1b3RlZCBuYW1lLCBvciBQVUJMSUMpCisgKgorICogVGhlIGVsZW1lbnQgbmFtZSBtYXkg aGF2ZSBhbiBvcHRpb25hbCBzZXBhcmF0b3Igc3BlY2lmaWNhdGlvbiBwcmVjZWRlZAorICogYnkg YSBjb2xvbi4gIEl0cyBwcmVzZW5jZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBleHBl Y3RlZCB0byBiZQorICogYW4gYXJyYXk7IHRoZSBzcGVjaWZpZWQgc2VwYXJhdG9yIGlzIHVzZWQg dG8gam9pbiB0aGUgYXJyYXkgZWxlbWVudHMuCisgKi0tLS0tLQorICovCitEYXR1bQorZGRsX2Rl cGFyc2VfZXhwYW5kX2NvbW1hbmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwl0ZXh0CSAgICpqc29u ID0gUEdfR0VUQVJHX1RFWFRfUCgwKTsKKwljaGFyCSAgICpqc29uX3N0cjsKKworCWpzb25fc3Ry ID0gdGV4dF90b19jc3RyaW5nKGpzb24pOworCisJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3Rv X3RleHQoZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoanNvbl9zdHIpKSk7Cit9CisKKy8qCisg KiBFcnJvciBjb250ZXh0IGNhbGxiYWNrIGZvciBKU09OIGZvcm1hdCBzdHJpbmcgZXhwYW5zaW9u LgorICoKKyAqIFhYWDogaW5kaWNhdGUgd2hpY2ggZWxlbWVudCB3ZSdyZSBleHBhbmRpbmcsIGlm IGFwcGxpY2FibGUuCisgKi8KK3N0YXRpYyB2b2lkCitmbXRzdHJfZXJyb3JfY2FsbGJhY2sodm9p ZCAqYXJnKQoreworCWVycmNvbnRleHQoIndoaWxlIGV4cGFuZGluZyBmb3JtYXQgc3RyaW5nIFwi JXNcIiIsIChjaGFyICopIGFyZyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMK aW5kZXggNjkwMjcwOS4uNDQ3MmUyOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu YwpAQCAtMTgyNSw2ICsxODI1LDcgQEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoUEdf RlVOQ1RJT05fQVJHUykKIAkJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CiAJCQljYXNlIFNDVF9D cmVhdGVPcENsYXNzOgogCQkJY2FzZSBTQ1RfQWx0ZXJUU0NvbmZpZzoKKwkJCWNhc2UgU0NUX0Ny ZWF0ZVRhYmxlQXM6CiAJCQkJewogCQkJCQljaGFyCSAgICppZGVudGl0eTsKIAkJCQkJY2hhcgkg ICAqdHlwZTsKQEAgLTE4NDIsNiArMTg0Myw4IEBAIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1h bmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQlhZGRyID0gY21kLT5kLmNyZWF0ZW9wYy5hZGRy ZXNzOwogCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCiAJCQkJ CQlhZGRyID0gY21kLT5kLmF0c2NmZy5hZGRyZXNzOworCQkJCQllbHNlIGlmIChjbWQtPnR5cGUg PT0gU0NUX0NyZWF0ZVRhYmxlQXMpCisJCQkJCQlhZGRyID0gY21kLT5kLmN0YXMuYWRkcmVzczsK IAogCQkJCQkvKgogCQkJCQkgKiBJZiBhbiBvYmplY3Qgd2FzIGRyb3BwZWQgaW4gdGhlIHNhbWUg Y29tbWFuZCB3ZSBtYXkgZW5kCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNv bi5idWlsZCBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCmluZGV4IDQyY2NlZDku LjI4NDRkMzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCkBAIC0xNyw2ICsxNyw4IEBAIGJh Y2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2NvcHl0by5jJywKICAgJ2NyZWF0ZWFzLmMnLAog ICAnZGJjb21tYW5kcy5jJywKKyAgJ2RkbF9kZXBhcnNlLmMnLAorICAnZGRsX2pzb24uYycsCiAg ICdkZWZpbmUuYycsCiAgICdkaXNjYXJkLmMnLAogICAnZHJvcGNtZHMuYycsCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdAppbmRleCBjMGYyYThhLi5mYTMxZjFkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKQEAgLTExOTE4LDQgKzExOTE4LDEwIEBACiAgIHByb3JldHR5cGUgPT4gJ2J5dGVhJywgcHJv YXJndHlwZXMgPT4gJ3BnX2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnknLAogICBwcm9zcmMgPT4g J2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnlfc2VuZCcgfSwKIAoreyBvaWQgPT4gJzQ2NDInLCBk ZXNjciA9PiAnZGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgaW50byBhIEpTT04gZm9ybWF0IHN0cmlu ZycsCisgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX3RvX2pzb24nLCBwcm9yZXR0eXBlID0+ICd0 ZXh0JywKKyAgcHJvYXJndHlwZXMgPT4gJ3BnX2RkbF9jb21tYW5kJywgcHJvc3JjID0+ICdkZGxf ZGVwYXJzZV90b19qc29uJyB9LAoreyBvaWQgPT4gJzQ2NDMnLCBkZXNjciA9PiAnZXhwYW5kIEpT T04gZm9ybWF0IERETCB0byBhIHBsYWluIHRleHQgRERMIGNvbW1hbmQnLAorICBwcm9uYW1lID0+ ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAorICBw cm9hcmd0eXBlcyA9PiAndGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1h bmQnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggODU1ZGE5OS4uNmQwN2ZjMiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRl L25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMjA1NSw2ICsyMDU1LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg QWx0ZXJUYWJsZVN0bXQKIAlMaXN0CSAgICpjbWRzOwkJCS8qIGxpc3Qgb2Ygc3ViY29tbWFuZHMg Ki8KIAlPYmplY3RUeXBlCW9ianR5cGU7CQkvKiB0eXBlIG9mIG9iamVjdCAqLwogCWJvb2wJCW1p c3Npbmdfb2s7CQkvKiBza2lwIGVycm9yIGlmIHRhYmxlIG1pc3NpbmcgKi8KKwlib29sICAgICAg ICB0YWJsZV9saWtlOwkJLyogaW50ZXJuYWxseSBnZW5lcmF0ZWQgZm9yIFRhYmxlTGlrZUNsYXVz ZSAqLwogfSBBbHRlclRhYmxlU3RtdDsKIAogdHlwZWRlZiBlbnVtIEFsdGVyVGFibGVUeXBlCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVkZS90 Y29wL2RkbF9kZXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEy NzAyYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApA QCAtMCwwICsxLDIyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJzZS5o CisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJl Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRl L3Rjb3AvZGRsX2RlcGFyc2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVm IERETF9ERVBBUlNFX0gKKyNkZWZpbmUgRERMX0RFUEFSU0VfSAorCisjaW5jbHVkZSAidGNvcC9k ZXBhcnNlX3V0aWxpdHkuaCIKKworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9jb21tYW5k KENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOworZXh0ZXJuIGNoYXIg KmRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKK2V4dGVybiBjaGFyICpk ZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAq b2JqZWN0dHlwZSwKKwkJCQkJCQkJICBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOworCisjZW5kaWYJ CQkJCQkJLyogRERMX0RFUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9k ZXBhcnNlX3V0aWxpdHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKaW5k ZXggYjU4NTgxMC4uYTRhMTIzNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNl X3V0aWxpdHkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCkBAIC0y OSw3ICsyOSw4IEBAIHR5cGVkZWYgZW51bSBDb2xsZWN0ZWRDb21tYW5kVHlwZQogCVNDVF9BbHRl ck9wRmFtaWx5LAogCVNDVF9BbHRlckRlZmF1bHRQcml2aWxlZ2VzLAogCVNDVF9DcmVhdGVPcENs YXNzLAotCVNDVF9BbHRlclRTQ29uZmlnCisJU0NUX0FsdGVyVFNDb25maWcsCisJU0NUX0NyZWF0 ZVRhYmxlQXMKIH0gQ29sbGVjdGVkQ29tbWFuZFR5cGU7CiAKIC8qCkBAIC0zOSw2ICs0MCw3IEBA IHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZEFUU3ViY21kCiB7CiAJT2JqZWN0QWRkcmVzcyBhZGRy ZXNzOwkJLyogYWZmZWN0ZWQgY29sdW1uLCBjb25zdHJhaW50LCBpbmRleCwgLi4uICovCiAJTm9k ZQkgICAqcGFyc2V0cmVlOworCWNoYXIJICAgKnVzaW5nZXhwcjsKIH0gQ29sbGVjdGVkQVRTdWJj bWQ7CiAKIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKQEAgLTYyLDYgKzY0LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZAogCQl7CiAJCQlPaWQJCQlvYmplY3RJZDsK IAkJCU9pZAkJCWNsYXNzSWQ7CisJCQlib29sCQlyZXdyaXRlOwogCQkJTGlzdAkgICAqc3ViY21k czsKIAkJfQkJCWFsdGVyVGFibGU7CiAKQEAgLTEwMCw2ICsxMDMsMTMgQEAgdHlwZWRlZiBzdHJ1 Y3QgQ29sbGVjdGVkQ29tbWFuZAogCQl7CiAJCQlPYmplY3RUeXBlCW9ianR5cGU7CiAJCX0JCQlk ZWZwcml2czsKKworCQkvKiBDUkVBVEUgVEFCTEUgQVMgKi8KKwkJc3RydWN0CisJCXsKKwkJCU9i amVjdEFkZHJlc3MgYWRkcmVzczsKKwkJCU5vZGUJCSAqcmVhbF9jcmVhdGU7CisJCX0JCQljdGFz OwogCX0JCQlkOwogCiAJc3RydWN0IENvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsJLyogd2hlbiBu ZXN0ZWQgKi8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggZDMyMjRkZi4uNTQ2MDgxYSAx MDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2MTQsNiArMTYxNCw5IEBAIE9TSW5mbwog T1NTTENpcGhlcgogT1NTTERpZ2VzdAogT1ZFUkxBUFBFRAorT2JqRWxlbQorT2JqVHJlZQorT2Jq VHlwZQogT2JqZWN0QWNjZXNzRHJvcAogT2JqZWN0QWNjZXNzTmFtZXNwYWNlU2VhcmNoCiBPYmpl Y3RBY2Nlc3NQb3N0QWx0ZXIKQEAgLTMxODYsNiArMzE4OSw3IEBAIGNvbXBhcmVfY29udGV4dAog Y29uZmlnX3Zhcl92YWx1ZQogY29udGFpbl9hZ2dzX29mX2xldmVsX2NvbnRleHQKIGNvbnZlcnRf dGVzdGV4cHJfY29udGV4dAorY29udlNwZWNpZmllcgogY29weV9kYXRhX2Rlc3RfY2IKIGNvcHlf ZGF0YV9zb3VyY2VfY2IKIGNvcmVfWVlTVFlQRQotLSAKMS44LjMuMQoK --000000000000846be105f4416101 Content-Type: application/octet-stream; name="v67-0003-Support-DDL-deparse-of-the-rest-commands.patch" Content-Disposition: attachment; filename="v67-0003-Support-DDL-deparse-of-the-rest-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ldwxbac72 RnJvbSBlMDNiNGFmYzFiOWVkNjMxYzc0NjIxMGUzODE4Y2VhYmI0YmI2MTk3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgOSBGZWIgMjAyMyAwMzoxOTo0NiAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djY3IDMvN10gU3VwcG9ydCBEREwgZGVwYXJzZSBvZiB0aGUgcmVzdCBjb21tYW5kcy4KCiAgICBD UkVBVEUvRFJPUCBBQ0NFU1MgTUVUSE9ECiAgICBDUkVBVEUvQUxURVIvRFJPUCBBR0dSRUdBVEUK ICAgIENSRUFURS9BTFRFUi9EUk9QIENBU1QKICAgIENSRUFURS9BTFRFUi9EUk9QIENPTExBVElP TgogICAgQ09NTUVOVAogICAgQ1JFQVRFL0FMVEVSL0RST1AgQ09OVkVSU0lPTgogICAgQUxURVIg REVGQVVMVCBQUklWSUxFR0VTCiAgICBDUkVBVEUvQUxURVIvRFJPUCBET01BSU4KICAgIENSRUFU RS9BTFRFUi9EUk9QIEVYVEVOU0lPTgogICAgQ1JFQVRFL0FMVEVSL0RST1AgRk9SRUlHTiBEQVRB IFdSQVBQRVIKICAgIENSRUFURS9BTFRFUi9EUk9QIEZPUkVJR04gVEFCTEUKICAgIENSRUFURS9B TFRFUiBGVU5DVElPTi9QUk9DRURVUkUKICAgIEdSQU5UCiAgICBDUkVBVEUvRFJPUCBJTkRFWAog ICAgQ1JFQVRFL0FMVEVSL0RST1AgTEFOR1VBR0UKICAgIENSRUFURS9BTFRFUi9EUk9QIE1BVEVS SUFMSVpFRCBWSUVXCiAgICBDUkVBVEUvRFJPUCBPUEVSQVRPUiBbQ0xBU1MvRkFNSUxZXQogICAg Q1JFQVRFL0FMVEVSL0RST1AgUFVCTElDQVRJT04KICAgIENSRUFURS9BTFRFUi9EUk9QIFBPTElD WQogICAgUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVwogICAgUkVWT0tFCiAgICBBTFRFUi9EUk9Q IFJPVVRJTkUKICAgIENSRUFURS9BTFRFUi9EUk9QIFJVTEUKICAgIENSRUFURS9BTFRFUi9EUk9Q IFNDSEVNQQogICAgU0VDVVJJVFkgTEFCRUwKICAgIENSRUFURS9BTFRFUi9EUk9QIFNFUVVFTkNF CiAgICBDUkVBVEUvQUxURVIvRFJPUCBTRVJWRVIKICAgIENSRUFURS9BTFRFUi9EUk9QIFNUQVRJ U1RJQ1MKICAgIENSRUFURS9BTFRFUi9EUk9QIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04vUEFS U0VSL0RJQ1RJT05BUlkvVEVNUExBVEUKICAgIENSRUFURS9EUk9QIFRSQU5TRk9STQogICAgQ1JF QVRFL0FMVEVSIFRSSUdHRVIKICAgIENSRUFURS9BTFRFUi9EUk9QIFRZUEUKICAgIENSRUFURS9B TFRFUi9EUk9QIFVTRVIgTUFQUElORwogICAgQ1JFQVRFL0FMVEVSL0RST1AgVklFVyAtLSBOb3Rl ICM0CgooTm90ZSAjMykgUmVtb3ZlZCBhbiB1bmRlc2lyYWJsZSAnb24nIGZyb20gdGhlIGlkZW50 aXR5IHN0cmluZyBmb3IgVFJBTlNGT1JNCmluIGdldE9iamVjdElkZW50aXR5UGFydHMuIFRoaXMg aXMgbmVlZGVkIHRvIG1ha2UgZGVwYXJzZSBvZiBEUk9QClRSQU5TRk9STSBjb21tYW5kIHdvcmsg c2luY2UgJ29uJyBpcyBub3QgcHJlc2VudCBpbiB0aGUgY3VycmVudApEUk9QIFRSQU5TRk9STSBz eW50YXguIEZvciBleGFtcGxlLCB0aGUgY29ycmVjdCBzeW50YXggaXMKRFJPUCBUUkFOU0ZPUk0g dHJmIEZPUiBJTlQgTEFOR1VBR0UgU1FMOwppbnN0ZWFkIG9mIERST1AgVFJBTlNGT1JNIHRyZiBG T1IgSU5UIE9OIExBTkdVQUdFIFNRTDsKCihOb3RlICM0KSBGb3IgVklFV1NUTVQsIHdlIGNyZWF0 ZWQgcGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwgdG8gZ2V0IHRoZQpTRUxFQ1QgcXVlcnkgb2YgdGhl IHBlbmRpbmcgVklFV1NUTVQuIEluIHRoZSBjYXNlIHRoYXQgdGhlIENSRUFURSBWSUVXIGNvbW1h bmQKaXMgc3RpbGwgaW4gcHJvZ3Jlc3MsIHdlIHdvdWxkIG5lZWQgdG8gc2VhcmNoIHRoZSBzeXN0 ZW0gY2FjaGUgUlVMRVJFTE5BTUUgdG8gZ2V0IHRoZQpyZXdyaXRlIHJ1bGUgb2YgdGhlIHZpZXcg YXMgb3Bwb3NlIHRvIHF1ZXJ5aW5nIHBnX3Jld3JpdGUgYXMgaW4gcGdfZ2V0X3ZpZXdkZWZfd29y a2VyKCksCnRoZSBsYXR0ZXIgd2lsbCByZXR1cm4gZW1wdHkgcmVzdWx0LgotLS0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgICB8IDYzOTQgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIHwgICAg NiArCiBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggICAgICAgfCAgIDEwICsKIHNyYy9p bmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggICB8ICAgMjAgKy0KIDQgZmlsZXMgY2hhbmdl ZCwgNjM2OCBpbnNlcnRpb25zKCspLCA2MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYwppbmRleCAyZDNjOWI0Li43NGU5MWZlIDEwMDc1NQotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9k ZXBhcnNlLmMKQEAgLTE1MSw2ICsxNTEsNyBAQCBib29sCQl2ZXJib3NlID0gdHJ1ZTsKIAogc3Rh dGljIHZvaWQgYXBwZW5kX2FycmF5X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10 LCBMaXN0ICphcnJheSk7CiBzdGF0aWMgdm9pZCBhcHBlbmRfYm9vbF9vYmplY3QoT2JqVHJlZSAq dHJlZSwgY2hhciAqc3ViX2ZtdCwgYm9vbCB2YWx1ZSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfZmxv YXRfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGZsb2F0OCB2YWx1ZSk7CiBz dGF0aWMgdm9pZCBhcHBlbmRfbnVsbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2Zt dCk7CiBzdGF0aWMgdm9pZCBhcHBlbmRfb2JqZWN0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFy ICpzdWJfZm10LCBPYmpUcmVlICp2YWx1ZSk7CiBzdGF0aWMgY2hhciAqYXBwZW5kX29iamVjdF90 b19mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpOwpAQCAtMTYwLDEw ICsxNjEsMTQgQEAgc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJl ZSwgY2hhciAqc3ViX2ZtdCwgY2hhciAqbmFtZSwKIHN0YXRpYyB2b2lkIGZvcm1hdF90eXBlX2Rl dGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwKIAkJCQkJCQkJIE9pZCAqbnNwaWQs IGNoYXIgKip0eXBuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwKIAkJCQkJCQkJIGJvb2wgKnR5cGFy cmF5KTsKK3N0YXRpYyBMaXN0ICpGdW5jdGlvbkdldERlZmF1bHRzKHRleHQgKnByb2FyZ2RlZmF1 bHRzKTsKIHN0YXRpYyBPYmpFbGVtICpuZXdfb2JqZWN0KE9ialR5cGUgdHlwZSwgY2hhciAqbmFt ZSk7CiBzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9pZCBjbGFz c0lkLCBPaWQgb2JqZWN0SWQpOworc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlX2Zvcl9yb2xl c3BlYyhSb2xlU3BlYyAqc3BlYyk7CiBzdGF0aWMgT2JqRWxlbSAqbmV3X29iamVjdF9vYmplY3Qo T2JqVHJlZSAqdmFsdWUpOwogc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlX1ZBKGNoYXIgKmZt dCwgaW50IG51bW9ianMsLi4uKTsKK3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZShjaGFyICpm bXQpOworc3RhdGljIE9iakVsZW0gKm5ld19zdHJpbmdfb2JqZWN0KGNoYXIgKnZhbHVlKTsKIHN0 YXRpYyBKc29uYlZhbHVlICpvYmp0cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29u YlBhcnNlU3RhdGUgKnN0YXRlKTsKIHN0YXRpYyB2b2lkIHBnX2dldF9pbmRleGRlZl9kZXRhaWxl ZChPaWQgaW5kZXhyZWxpZCwKIAkJCQkJCQkJCSBjaGFyICoqaW5kZXhfYW0sCkBAIC0xNzgsOCAr MTgzLDE4IEBAIHN0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtbkRlZihSZWxhdGlvbiByZWxh dGlvbiwgTGlzdCAqZHBjb250ZXh0LCBib29sIGNvbXBvCiAJCQkJCQkJCSAgQ29sdW1uRGVmICpj b2xkZWYsIGJvb2wgaXNfYWx0ZXIsIExpc3QgKipleHBycyk7CiBzdGF0aWMgT2JqVHJlZSAqZGVw YXJzZV9Db2x1bW5JZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0 ZXJfdGFibGUpOwogc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRl clRhYmxlQ21kICpzdWJjbWQpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9B Z2dyZWdhdGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGljIE9ialRy ZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9Db2xsYXRpb24oT2lkIG9iamVjdElkLCBEZWZpbmVTdG10 ICpkZWZpbmUsCisJCQkJCQkJCQkJCSBPYmplY3RBZGRyZXNzIGZyb21Db2xsaWQpOworc3RhdGlj IE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRvcihPaWQgb2JqZWN0SWQsIERlZmlu ZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUo T2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGljIE9ialRyZWUgKmRlcGFy c2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSwg T2JqZWN0QWRkcmVzcyBjb3BpZWQpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3Rt dF9UU1BhcnNlcihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2Jq VHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTRGljdGlvbmFyeShPaWQgb2JqZWN0SWQsIERlZmlu ZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTVGVt cGxhdGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOwogCiBzdGF0aWMgT2JqVHJl ZSAqZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0sIGJvb2wgaXNfcmVzZXQpOworc3RhdGlj IE9ialRyZWUgKmRlcGFyc2VfRnVuY3Rpb25TZXQoVmFyaWFibGVTZXRLaW5kIGtpbmQsIGNoYXIg Km5hbWUsIGNoYXIgKnZhbHVlKTsKIHN0YXRpYyBPYmpUcmVlICpkZXBhcnNlX09uQ29tbWl0Q2xh dXNlKE9uQ29tbWl0QWN0aW9uIG9wdGlvbik7CiBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9SZWxT ZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCk7CiAKQEAgLTE4OCw2ICsyMDMsNyBAQCBz dGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0N5Y2xlKEZvcm1fcGdfc2VxdWVuY2Ug c2VxZGF0YSwgYm9vbCBhbHRlcl90YQogc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1Nl cV9JbmNyZW1lbnRCeShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUp Owogc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9NaW52YWx1ZShGb3JtX3BnX3Nl cXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOwogc3RhdGljIGlubGluZSBPYmpFbGVt ICpkZXBhcnNlX1NlcV9NYXh2YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0 ZXJfdGFibGUpOworc3RhdGljIE9iakVsZW0gKmRlcGFyc2VfU2VxX093bmVkQnkoT2lkIHNlcXVl bmNlSWQsIGJvb2wgYWx0ZXJfdGFibGUpOwogc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNl X1NlcV9SZXN0YXJ0KEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhKTsKIHN0YXRpYyBpbmxp bmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfU3RhcnR3aXRoKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0 YSwgYm9vbCBhbHRlcl90YWJsZSk7CiBzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2Vx X0FzKERlZkVsZW0gKmVsZW0pOwpAQCAtMjAzLDYgKzIxOSw4IEBAIHN0YXRpYyBMaXN0ICpkZXBh cnNlX0luaFJlbGF0aW9ucyhPaWQgb2JqZWN0SWQpOwogc3RhdGljIExpc3QgKmRlcGFyc2VfVGFi bGVFbGVtZW50cyhSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqdGFibGVFbGVtZW50cywgTGlzdCAq ZHBjb250ZXh0LAogCQkJCQkJCQkgICBib29sIHR5cGVkLCBib29sIGNvbXBvc2l0ZSk7CiAKK3N0 YXRpYyBjaGFyICpEb21haW5HZXREZWZhdWx0KEhlYXBUdXBsZSBkb21UdXAsIGJvb2wgbWlzc2lu Z19vayk7CisKIC8qCiAgKiBBcHBlbmQgcHJlc2VudCBhcyBmYWxzZSB0byBhIHRyZWUuCiAgKi8K QEAgLTIxMyw2ICsyMzEsMjQgQEAgYXBwZW5kX25vdF9wcmVzZW50KE9ialRyZWUgKnRyZWUpCiB9 CiAKIC8qCisgKiBBcHBlbmQgYSBmbG9hdDggcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3Rh dGljIHZvaWQKK2FwcGVuZF9mbG9hdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2Zt dCwgZmxvYXQ4IHZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVj dF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2Jq ZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmpl Y3QoT2JqVHlwZUZsb2F0LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmZsdCA9IHZhbHVl OworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCiAgKiBBcHBl bmQgYW4gYXJyYXkgcGFyYW1ldGVyIHRvIGEgdHJlZS4KICAqLwogc3RhdGljIHZvaWQKQEAgLTQy Miw2ICs0NTgsMzQgQEAgYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAq c3ViX2ZtdCwgY2hhciAqIG9iamVjdF9uYW1lLAogfQogCiAvKgorICogQXBwZW5kIGEgTlVMTC1v ci1xdW90ZWQtbGl0ZXJhbCBjbGF1c2UuICBVc2VmdWwgZm9yIENPTU1FTlQgYW5kIFNFQ1VSSVRZ CisgKiBMQUJFTC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogJXtudWxsfXMgJXtsaXRlcmFs fXMKKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9saXRlcmFsX29yX251bGwoT2JqVHJlZSAqcGFy ZW50LCBjaGFyICplbGVtbmFtZSwgY2hhciAqdmFsdWUpCit7CisJT2JqVHJlZSAgICAqdG9wOwor CU9ialRyZWUgICAgKnBhcnQ7CisKKwl0b3AgPSBuZXdfb2JqdHJlZSgiIik7CisJcGFydCA9IG5l d19vYmp0cmVlX1ZBKCJOVUxMIiwgMSwKKwkJCQkJCSAgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwg IXZhbHVlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0b3AsICIle251bGx9cyIsIHBhcnQpOwor CisJcGFydCA9IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJICAicHJlc2VudCIsIE9ialR5 cGVCb29sLCB2YWx1ZSAhPSBOVUxMKTsKKworCWlmICh2YWx1ZSkKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QocGFydCwgIiV7dmFsdWV9TCIsICJ2YWx1ZSIsIHZhbHVlKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdCh0b3AsICIle2xpdGVyYWx9cyIsIHBhcnQpOworCisJYXBwZW5kX29iamVjdF9vYmpl Y3QocGFyZW50LCBlbGVtbmFtZSwgdG9wKTsKK30KKworLyoKICAqIFNpbWlsYXIgdG8gZm9ybWF0 X3R5cGVfZXh0ZW5kZWQsIGV4Y2VwdCB3ZSByZXR1cm4gZWFjaCBiaXQgb2YgaW5mb3JtYXRpb24K ICAqIHNlcGFyYXRlbHk6CiAgKgpAQCAtNTI0LDYgKzU4OCwzMSBAQCBmb3JtYXRfdHlwZV9kZXRh aWxlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCiB9CiAKIC8qCisgKiBSZXR1cm4gdGhl IGRlZmF1bHQgdmFsdWVzIG9mIGFyZ3VtZW50cyB0byBhIGZ1bmN0aW9uLCBhcyBhIGxpc3Qgb2YK KyAqIGRlcGFyc2VkIGV4cHJlc3Npb25zLgorICovCitzdGF0aWMgTGlzdCAqCitGdW5jdGlvbkdl dERlZmF1bHRzKHRleHQgKnByb2FyZ2RlZmF1bHRzKQoreworCUxpc3QJICAgKm5vZGVkZWZzOwor CUxpc3QJICAgKnN0cmRlZnMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCW5vZGVkZWZz ID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKHRleHRfdG9fY3N0cmluZyhwcm9hcmdkZWZhdWx0cykp OworCWlmICghSXNBKG5vZGVkZWZzLCBMaXN0KSkKKwkJZWxvZyhFUlJPUiwgInByb2FyZ2RlZmF1 bHRzIGlzIG5vdCBhIGxpc3QiKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZWRlZnMpCisJeworCQlO b2RlCSAgICpvbmVkZWYgPSBsZmlyc3QoY2VsbCk7CisKKwkJc3RyZGVmcyA9IGxhcHBlbmQoc3Ry ZGVmcywgZGVwYXJzZV9leHByZXNzaW9uKG9uZWRlZiwgTklMLCBmYWxzZSwgZmFsc2UpKTsKKwl9 CisKKwlyZXR1cm4gc3RyZGVmczsKK30KKworLyoKICAqIFJldHVybiB0aGUgc3RyaW5nIHJlcHJl c2VudGF0aW9uIG9mIHRoZSBnaXZlbiBSRUxQRVJTSVNURU5DRSB2YWx1ZS4KICAqLwogc3RhdGlj IGNoYXIgKgpAQCAtNzEzLDYgKzgwMiw1NyBAQCBuZXdfb2JqdHJlZV9mb3JfdHlwZShPaWQgdHlw ZUlkLCBpbnQzMiB0eXBtb2QpCiB9CiAKIC8qCisgKiBIZWxwZXIgcm91dGluZSBmb3IgJXt9UiBv YmplY3RzLCB3aXRoIHJvbGUgc3BlY2lmaWVkIGJ5IFJvbGVTcGVjIG5vZGUuCisgKiBTcGVjaWFs IHZhbHVlcyBzdWNoIGFzIFJPTEVTUEVDX0NVUlJFTlRfVVNFUiBhcmUgZXhwYW5kZWQgdG8gdGhl aXIgZmluYWwKKyAqIG5hbWVzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9m b3Jfcm9sZXNwZWMoUm9sZVNwZWMgKnNwZWMpCit7CisJY2hhcgkgICAqcm9sZXR5cGU7CisKKwlp ZiAoc3BlYy0+cm9sZXR5cGUgIT0gUk9MRVNQRUNfUFVCTElDKQorCQlyb2xldHlwZSA9IGdldF9y b2xlc3BlY19uYW1lKHNwZWMpOworCWVsc2UKKwkJcm9sZXR5cGUgPSBwc3RyZHVwKCIiKTsKKwor CXJldHVybiBuZXdfb2JqdHJlZV9WQShOVUxMLCAyLAorCQkJCQkJICAiaXNfcHVibGljIiwgT2Jq VHlwZUJvb2wsIHNwZWMtPnJvbGV0eXBlID09IFJPTEVTUEVDX1BVQkxJQywKKwkJCQkJCSAgInJv bGVuYW1lIiwgT2JqVHlwZVN0cmluZywgcm9sZXR5cGUpOworfQorCisvKgorICogSGVscGVyIHJv dXRpbmUgZm9yICV7fVIgb2JqZWN0cywgd2l0aCByb2xlIHNwZWNpZmllZCBieSBPSUQuIChBQ0xf SURfUFVCTElDCisgKiBtZWFucyB0byB1c2UgInB1YmxpYyIpLgorICovCitzdGF0aWMgT2JqVHJl ZSAqCituZXdfb2JqdHJlZV9mb3Jfcm9sZV9pZChPaWQgcm9sZW9pZCkKK3sKKwlPYmpUcmVlICAg ICpyb2xlOworCisJaWYgKHJvbGVvaWQgIT0gQUNMX0lEX1BVQkxJQykKKwl7CisJCUhlYXBUdXBs ZQlyb2x0dXA7CisJCWNoYXIJICAgKnJvbGVfbmFtZTsKKworCQlyb2x0dXAgPSBTZWFyY2hTeXND YWNoZTEoQVVUSE9JRCwgT2JqZWN0SWRHZXREYXR1bShyb2xlb2lkKSk7CisJCWlmICghSGVhcFR1 cGxlSXNWYWxpZChyb2x0dXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIHJvbGUgd2l0aCBPSUQgJXUiLCByb2xlb2lkKTsKKworCQlyb2xlX25hbWUgPSBOYW1lU3Ry KCgoRm9ybV9wZ19hdXRoaWQpIEdFVFNUUlVDVChyb2x0dXApKS0+cm9sbmFtZSk7CisJCXJvbGUg PSBuZXdfb2JqdHJlZV9WQSgiJXtyb2xlbmFtZX1JIiwgMSwKKwkJCQkJCQkgICJyb2xlbmFtZSIs IE9ialR5cGVTdHJpbmcsIHBzdHJkdXAocm9sZV9uYW1lKSk7CisKKwkJUmVsZWFzZVN5c0NhY2hl KHJvbHR1cCk7CisJfQorCWVsc2UKKwkJcm9sZSA9IG5ld19vYmp0cmVlX1ZBKCIle3JvbGVuYW1l fUkiLCAxLAorCQkJCQkJCSAgInJvbGVuYW1lIiwgT2JqVHlwZVN0cmluZywgInB1YmxpYyIpOwor CisJcmV0dXJuIHJvbGU7Cit9CisKKy8qCiAgKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgdHJlZSB0 byBzdG9yZSBwYXJhbWV0ZXIgdmFsdWVzIC0tIHZhcmFyZ3MgdmVyc2lvbi4KICAqCiAgKiBUaGUg ImZtdCIgYXJndW1lbnQgaXMgdXNlZCB0byBhcHBlbmQgYXMgYSAiZm10IiBlbGVtZW50IGluIHRo ZSBvdXRwdXQgYmxvYi4KQEAgLTc5MCw2ICs5MzAsMjIgQEAgbmV3X29ianRyZWVfVkEoY2hhciAq Zm10LCBpbnQgbnVtb2JqcywuLi4pCiB9CiAKIC8qCisgKiBBbGxvY2F0ZSBhIG5ldyBzdHJpbmcg b2JqZWN0LgorICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdfc3RyaW5nX29iamVjdChjaGFyICp2 YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKworCUFzc2VydCh2YWx1ZSk7CisKKwlwYXJh bSA9IG5ld19vYmplY3QoT2JqVHlwZVN0cmluZywgTlVMTCk7CisJcGFyYW0tPnZhbHVlLnN0cmlu ZyA9IHZhbHVlOworCisJcmV0dXJuIHBhcmFtOworfQorCisvKgogICogUHJvY2VzcyB0aGUgcHJl LWJ1aWx0IGZvcm1hdCBzdHJpbmcgZnJvbSB0aGUgT2JqVHJlZSBpbnRvIHRoZSBvdXRwdXQgcGFy c2UKICAqIHN0YXRlLgogICovCkBAIC0xOTMzLDYgKzIwODksODMgQEAgZGVwYXJzZV9TZXFfTWlu dmFsdWUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQogfQogCiAv KgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgT1dORUQgQlkgY29tbWFuZC4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogT1dORUQgQlkgJXtvd25lcn1ECisgKi8KK3N0YXRpYyBPYmpFbGVtICoK K2RlcGFyc2VfU2VxX093bmVkQnkoT2lkIHNlcXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFibGUpCit7 CisJT2JqVHJlZSAgICAqcmV0ID0gTlVMTDsKKwlSZWxhdGlvbglkZXBSZWw7CisJU3lzU2NhbkRl c2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXlzWzNdOworCUhlYXBUdXBsZQl0dXBsZTsKKworCWRl cFJlbCA9IHRhYmxlX29wZW4oRGVwZW5kUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlT Y2FuS2V5SW5pdCgma2V5c1swXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9jbGFzc2lkLAorCQkJCUJU RXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKFJlbGF0 aW9uUmVsYXRpb25JZCkpOworCVNjYW5LZXlJbml0KCZrZXlzWzFdLAorCQkJCUFudW1fcGdfZGVw ZW5kX29iamlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmpl Y3RJZEdldERhdHVtKHNlcXVlbmNlSWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5c1syXSwKKwkJCQlB bnVtX3BnX2RlcGVuZF9vYmpzdWJpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfSU5U NEVRLAorCQkJCUludDMyR2V0RGF0dW0oMCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nh bihkZXBSZWwsIERlcGVuZERlcGVuZGVySW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDMs IGtleXMpOworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4 dChzY2FuKSkpCisJeworCQlPaWQJCQlvd25lcklkOworCQlGb3JtX3BnX2RlcGVuZCBkZXBmb3Jt OworCQlPYmpUcmVlICAgICp0bXBfb2JqOworCQljaGFyCSAgICpjb2xuYW1lOworCisJCWRlcGZv cm0gPSAoRm9ybV9wZ19kZXBlbmQpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJLyogT25seSBjb25z aWRlciBBVVRPIGRlcGVuZGVuY2llcyBvbiBwZ19jbGFzcyAqLworCQlpZiAoZGVwZm9ybS0+ZGVw dHlwZSAhPSBERVBFTkRFTkNZX0FVVE8pCisJCQljb250aW51ZTsKKwkJaWYgKGRlcGZvcm0tPnJl ZmNsYXNzaWQgIT0gUmVsYXRpb25SZWxhdGlvbklkKQorCQkJY29udGludWU7CisJCWlmIChkZXBm b3JtLT5yZWZvYmpzdWJpZCA8PSAwKQorCQkJY29udGludWU7CisKKwkJb3duZXJJZCA9IGRlcGZv cm0tPnJlZm9iamlkOworCQljb2xuYW1lID0gZ2V0X2F0dG5hbWUob3duZXJJZCwgZGVwZm9ybS0+ cmVmb2Jqc3ViaWQsIGZhbHNlKTsKKwkJaWYgKGNvbG5hbWUgPT0gTlVMTCkKKwkJCWNvbnRpbnVl OworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxh dGlvbklkLCBvd25lcklkKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgImF0dHJu YW1lIiwgImF0dHJuYW1lIiwgY29sbmFtZSk7CisJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJPV05F RCBCWSAle293bmVyfUQiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm93 bmVkIiwKKwkJCQkJCQkgIm93bmVyIiwgT2JqVHlwZU9iamVjdCwgdG1wX29iaik7CisJfQorCisJ c3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwlyZWxhdGlvbl9jbG9zZShkZXBSZWwsIEFjY2Vzc1No YXJlTG9jayk7CisKKwkvKgorCSAqIElmIHRoZXJlJ3Mgbm8gb3duZXIgY29sdW1uLCBlbWl0IGFu IGVtcHR5IE9XTkVEIEJZIGVsZW1lbnQsIHNldCB1cCBzbworCSAqIHRoYXQgaXQgd29uJ3QgcHJp bnQgYW55dGhpbmcuCisJICovCisJaWYgKCFyZXQpCisJCS8qIFhYWCB0aGlzIHNob3VsZG4ndCBo YXBwZW4gLi4uICovCisJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJPV05FRCBCWSAle293bmVyfUQi LCAzLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm93bmVkIiwKKwkJCQkJCQkg Im93bmVyIiwgT2JqVHlwZU51bGwsCisJCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGZh bHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgogICogRGVw YXJzZSB0aGUgc2VxdWVuY2UgUkVTVEFSVCBvcHRpb24uCiAgKgogICogVmVyYm9zZSBzeW50YXgK QEAgLTM0ODAsOTYgKzM3MTMsNjEzNSBAQCBkZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFy ICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAqb2JqZWN0dHlwZSwKIH0KIAogLyoKLSAqIEhhbmRs ZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNvbW1hbmRzLgorICogRGVwYXJzZSBhbiBBbHRlckNvbGxh dGlvblN0bXQgKEFMVEVSIENPTExBVElPTikKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBj b3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNsb3cuCisgKiBHaXZlbiBh IGNvbGxhdGlvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJu IGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBW ZXJib3NlIHN5bnRheDoKKyAqIEFMVEVSIENPTExBVElPTiAle2lkZW50aXR5fU8gUkVGUkVTSCBW RVJTSU9OCiAgKi8KIHN0YXRpYyBPYmpUcmVlICoKLWRlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29s bGVjdGVkQ29tbWFuZCAqY21kKQorZGVwYXJzZV9BbHRlckNvbGxhdGlvbihPaWQgb2JqZWN0SWQs IE5vZGUgKnBhcnNldHJlZSkKIHsKLQlPaWQJCQlvYmplY3RJZDsKLQlOb2RlCSAgICpwYXJzZXRy ZWU7CisJT2JqVHJlZSAgICAqcmV0OworCUhlYXBUdXBsZQljb2xUdXA7CisJRm9ybV9wZ19jb2xs YXRpb24gY29sRm9ybTsKIAotCUFzc2VydChjbWQtPnR5cGUgPT0gU0NUX1NpbXBsZSk7CisJY29s VHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTExPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29sVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIGNvbGxhdGlvbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlj b2xGb3JtID0gKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1QoY29sVHVwKTsKIAotCXBhcnNl dHJlZSA9IGNtZC0+cGFyc2V0cmVlOwotCW9iamVjdElkID0gY21kLT5kLnNpbXBsZS5hZGRyZXNz Lm9iamVjdElkOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xMQVRJT04gJXtpZGVu dGl0eX1PIFJFRlJFU0ggVkVSU0lPTiIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoY29sRm9ybS0+Y29sbG5hbWVz cGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihjb2xGb3JtLT5jb2xsbmFtZSkpKTsKIAotCWlm IChjbWQtPmluX2V4dGVuc2lvbiAmJiAobm9kZVRhZyhwYXJzZXRyZWUpICE9IFRfQ3JlYXRlRXh0 ZW5zaW9uU3RtdCkpCi0JCXJldHVybiBOVUxMOworCVJlbGVhc2VTeXNDYWNoZShjb2xUdXApOwog Ci0JLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFuZGxlIGV2ZXJ5dGhpbmcgdGhhdCBQcm9jZXNz VXRpbGl0eVNsb3cgZG9lcyAqLwotCXN3aXRjaCAobm9kZVRhZyhwYXJzZXRyZWUpKQotCXsKLQkJ Y2FzZSBUX0NyZWF0ZVNlcVN0bXQ6Ci0JCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTZXFTdG10KG9i amVjdElkLCBwYXJzZXRyZWUpOworCXJldHVybiByZXQ7Cit9CiAKLQkJY2FzZSBUX0NyZWF0ZVN0 bXQ6Ci0JCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwor LyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgc2V0dGluZyBvZiBGdW5jdGlvbgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBSRVNFVCBBTEwKKyAqIE9SCisgKiBTRVQgJXtzZXRfbmFtZX1JIFRPICV7 c2V0X3ZhbHVlfXMKKyAqIE9SCisgKiBSRVNFVCAle3NldF9uYW1lfUkKKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9GdW5jdGlvblNldChWYXJpYWJsZVNldEtpbmQga2luZCwgY2hhciAq bmFtZSwgY2hhciAqdmFsdWUpCit7CisJT2JqVHJlZSAgICAqcmV0OwogCi0JCWNhc2UgVF9JbmRl eFN0bXQ6Ci0JCQlyZXR1cm4gZGVwYXJzZV9JbmRleFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisJaWYgKGtpbmQgPT0gVkFSX1JFU0VUX0FMTCkKKwkJcmV0ID0gbmV3X29ianRyZWUoIlJFU0VU IEFMTCIpOworCWVsc2UgaWYgKGtpbmQgPT0gVkFSX1NFVF9WQUxVRSkKKwl7CisJCXJldCA9IG5l d19vYmp0cmVlX1ZBKCJTRVQgJXtzZXRfbmFtZX1JIiwgMSwKKwkJCQkJCQkgInNldF9uYW1lIiwg T2JqVHlwZVN0cmluZywgbmFtZSk7CiAKLQkJZGVmYXVsdDoKLQkJCWVsb2coTE9HLCAidW5yZWNv Z25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKLQkJCQkgKGludCkgbm9k ZVRhZyhwYXJzZXRyZWUpKTsKKwkJLyoKKwkJICogU29tZSBHVUMgdmFyaWFibGUgbmFtZXMgYXJl ICdMSVNUJyB0eXBlIGFuZCBoZW5jZSBtdXN0IG5vdCBiZQorCQkgKiBxdW90ZWQuCisJCSAqLwor CQlpZiAoR2V0Q29uZmlnT3B0aW9uRmxhZ3MobmFtZSwgdHJ1ZSkgJiBHVUNfTElTVF9RVU9URSkK KwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlRPICV7c2V0X3ZhbHVlfXMiLCAic2V0X3Zh bHVlIiwgdmFsdWUpOworCQllbHNlCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJUTyAl e3NldF92YWx1ZX1MIiwgInNldF92YWx1ZSIsIHZhbHVlKTsKIAl9CisJZWxzZQorCQlyZXQgPSBu ZXdfb2JqdHJlZV9WQSgiUkVTRVQgJXtzZXRfbmFtZX1JIiwgMSwKKwkJCQkJCQkgInNldF9uYW1l IiwgT2JqVHlwZVN0cmluZywgbmFtZSk7CiAKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcmV0Owog fQogCiAvKgotICogV29ya2hvcnNlIHRvIGRlcGFyc2UgYSBDb2xsZWN0ZWRDb21tYW5kLgorICog RGVwYXJzZSBhbiBBbHRlckZ1bmN0aW9uU3RtdCAoQUxURVIgRlVOQ1RJT04vUk9VVElORS9QUk9D RURVUkUpCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0 ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheDoKKyAqIEFMVEVSIEZVTkNUSU9OL1JP VVRJTkUvUFJPQ0VEVVJFICV7c2lnbmF0dXJlfXMgJXtkZWZpbml0aW9uOiB9cwogICovCi1jaGFy ICoKLWRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2 ZXJib3NlX21vZGUpCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRnVuY3Rpb24oT2lk IG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCiB7Ci0JT3ZlcnJpZGVTZWFyY2hQYXRoICpvdmVy cmlkZVBhdGg7Ci0JTWVtb3J5Q29udGV4dCBvbGRjeHQ7Ci0JTWVtb3J5Q29udGV4dCB0bXBjeHQ7 Ci0JT2JqVHJlZSAgICAqdHJlZTsKLQljaGFyCSAgICpjb21tYW5kID0gTlVMTDsKLQlTdHJpbmdJ bmZvRGF0YSBzdHI7CisJQWx0ZXJGdW5jdGlvblN0bXQgKm5vZGUgPSAoQWx0ZXJGdW5jdGlvblN0 bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICpzaWduOwor CUhlYXBUdXBsZQlwcm9jVHVwOworCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlMaXN0CSAgICpw YXJhbXMgPSBOSUw7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsK KwlpbnQJCQlpOworCisJLyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlICovCisJcHJvY1R1cCA9IFNl YXJjaFN5c0NhY2hlMShQUk9DT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHByb2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZnVuY3Rp b24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBH RVRTVFJVQ1QocHJvY1R1cCk7CisKKwlpZiAocHJvY0Zvcm0tPnByb2tpbmQgPT0gUFJPS0lORF9Q Uk9DRURVUkUpCisJCXJldCA9IG5ld19vYmp0cmVlKCJBTFRFUiBQUk9DRURVUkUiKTsKKwllbHNl CisJCXJldCA9IG5ld19vYmp0cmVlKG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX1JPVVRJTkUgPwor CQkJCQkJICAiQUxURVIgUk9VVElORSIgOiAiQUxURVIgRlVOQ1RJT04iKTsKIAogCS8qCi0JICog QWxsb2NhdGUgZXZlcnl0aGluZyBkb25lIGJ5IHRoZSBkZXBhcnNpbmcgcm91dGluZXMgaW50byBh IHRlbXAgY29udGV4dCwKLQkgKiB0byBhdm9pZCBoYXZpbmcgdG8gc3ByaW5rbGUgdGhlbSB3aXRo IG1lbW9yeSBoYW5kbGluZyBjb2RlLCBidXQKLQkgKiBhbGxvY2F0ZSB0aGUgb3V0cHV0IFN0cmlu Z0luZm8gYmVmb3JlIHN3aXRjaGluZy4KKwkgKiBBTFRFUiBGVU5DVElPTiBkb2VzIG5vdCBjaGFu Z2Ugc2lnbmF0dXJlIHNvIHdlIGNhbiB1c2UgY2F0YWxvZyB0byBnZXQKKwkgKiBpbnB1dCB0eXBl IE9pZHMuCiAJICovCi0JaW5pdFN0cmluZ0luZm8oJnN0cik7Ci0JdG1wY3h0ID0gQWxsb2NTZXRD b250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAotCQkJCQkJCQkgICAiZGVwYXJzZSBj dHgiLAotCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01JTlNJWkUsCi0JCQkJCQkJCSAgIEFM TE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCi0JCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUFY U0laRSk7Ci0Jb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGN4dCk7CisJZm9yIChp ID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCXsKKwkJT2JqVHJlZSAgICAqdG1w X29iajsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIiV7dHlwZX1UIiwgMSwKKwkJCQkJ CQkJInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShw cm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldLCAtMSkpOworCQlwYXJhbXMgPSBsYXBwZW5k KHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCX0KKworCXNpZ24gPSBuZXdf b2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EICgle2FyZ3VtZW50czosIH1zKSIsIDIsCisJCQkJCQkg ICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLCBvYmplY3RJZCksCisJCQkJCQkgICJhcmd1bWVu dHMiLCBPYmpUeXBlQXJyYXksIHBhcmFtcyk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQs ICIle3NpZ25hdHVyZX1zIiwgc2lnbik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPmFjdGlvbnMp CisJeworCQlEZWZFbGVtICAgICpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJ T2JqVHJlZSAgICAqdG1wX29iaiA9IE5VTEw7CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgInZvbGF0aWxpdHkiKSA9PSAwKQorCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKHN0clZhbChk ZWZlbC0+YXJnKSk7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN0cmljdCIp ID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoYm9vbFZhbChkZWZlbC0+YXJnKSA/CisJ CQkJCQkJCSAiUkVUVVJOUyBOVUxMIE9OIE5VTEwgSU5QVVQiIDoKKwkJCQkJCQkJICJDQUxMRUQg T04gTlVMTCBJTlBVVCIpOworCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZWN1 cml0eSIpID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoYm9vbFZhbChkZWZlbC0+YXJn KSA/CisJCQkJCQkJCSAiU0VDVVJJVFkgREVGSU5FUiIgOiAiU0VDVVJJVFkgSU5WT0tFUiIpOwor CQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJsZWFrcHJvb2YiKSA9PSAwKQorCQkJ dG1wX29iaiA9IG5ld19vYmp0cmVlKGJvb2xWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIkxF QUtQUk9PRiIgOiAiTk9UIExFQUtQUk9PRiIpOworCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJjb3N0IikgPT0gMCkKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQ09TVCAl e2Nvc3R9biIsIDEsCisJCQkJCQkJCQkiY29zdCIsIE9ialR5cGVGbG9hdCwKKwkJCQkJCQkJCWRl ZkdldE51bWVyaWMoZGVmZWwpKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAi cm93cyIpID09IDApCisJCXsKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiUk9XUyIpOworCQkJ aWYgKGRlZkdldE51bWVyaWMoZGVmZWwpID09IDApCisJCQkJYXBwZW5kX25vdF9wcmVzZW50KHRt cF9vYmopOworCQkJZWxzZQorCQkJCWFwcGVuZF9mbG9hdF9vYmplY3QodG1wX29iaiwgIiV7cm93 c31uIiwKKwkJCQkJCQkJCWRlZkdldE51bWVyaWMoZGVmZWwpKTsKKwkJfQorCQllbHNlIGlmIChz dHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZXQiKSA9PSAwKQorCQl7CisJCQlWYXJpYWJsZVNldFN0 bXQgKnNzdG10ID0gKFZhcmlhYmxlU2V0U3RtdCAqKSBkZWZlbC0+YXJnOworCQkJY2hhcgkgICAq dmFsdWUgPSBFeHRyYWN0U2V0VmFyaWFibGVBcmdzKHNzdG10KTsKKworCQkJdG1wX29iaiA9IGRl cGFyc2VfRnVuY3Rpb25TZXQoc3N0bXQtPmtpbmQsIHNzdG10LT5uYW1lLCB2YWx1ZSk7CisJCX0K KwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3VwcG9ydCIpID09IDApCisJCXsK KwkJCU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIlNVUFBP UlQiKTsKKworCQkJQXNzZXJ0KHByb2NGb3JtLT5wcm9zdXBwb3J0KTsKKworCQkJLyoKKwkJCSAq IFdlIHNob3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3MgbmFtZSBpZiBpdCB3b3Vs ZG4ndCBiZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGluIHRoZSBjdXJyZW50IHNlYXJjaCBw YXRoLgorCQkJICovCisJCQlhcmd0eXBlc1swXSA9IElOVEVSTkFMT0lEOworCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wX29iaiwgIiV7bmFtZX1zIiwgIm5hbWUiLAorCQkJCQkJCQkgZ2VuZXJh dGVfZnVuY3Rpb25fbmFtZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwKKwkJCQkJCQkJCQkJCQkJ TklMLCBhcmd0eXBlcywKKwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEwsCisJCQkJCQkJCQkJCQkJ CUVYUFJfS0lORF9OT05FKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1l LCAicGFyYWxsZWwiKSA9PSAwKQorCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJQQVJBTExF TCAle3ZhbHVlfXMiLCAxLAorCQkJCQkJCQkJInZhbHVlIiwgT2JqVHlwZVN0cmluZywgc3RyVmFs KGRlZmVsLT5hcmcpKTsKKworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcF9vYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7ZGVmaW5p dGlvbjogfXMiLCBlbGVtcyk7CisKKwlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwlyZXR1 cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlck9iamVjdFNjaGVtYVN0bXQgKEFM VEVSIC4uLiBTRVQgU0NIRU1BIGNvbW1hbmQpCisgKgorICogR2l2ZW4gdGhlIG9iamVjdCBhZGRy ZXNzIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2Jq VHJlZSByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIEFMVEVSICVzICV7aWRlbnRpdHl9cyBTRVQgU0NIRU1BICV7bmV3c2NoZW1hfUkKKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck9iamVjdFNjaGVtYVN0bXQoT2JqZWN0 QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQkJICBPYmplY3RBZGRyZXNz IG9sZF9zY2hlbWEpCit7CisJQWx0ZXJPYmplY3RTY2hlbWFTdG10ICpub2RlID0gKEFsdGVyT2Jq ZWN0U2NoZW1hU3RtdCAqKSBwYXJzZXRyZWU7CisJY2hhcgkgICAqaWRlbnRpdHk7CisJY2hhcgkg ICAqbmV3X3NjaGVtYSA9IG5vZGUtPm5ld3NjaGVtYTsKKwljaGFyCSAgICpvbGRfc2NobmFtZTsK KwljaGFyCSAgICppZGVudDsKIAogCS8qCi0JICogTWFueSByb3V0aW5lcyB1bmRlcmx5aW5nIHRo aXMgb25lIHdpbGwgaW52b2tlIHJ1bGV1dGlscy5jIGZ1bmN0aW9uYWxpdHkKLQkgKiB0byBvYnRh aW4gZGVwYXJzZWQgdmVyc2lvbnMgb2YgZXhwcmVzc2lvbnMuICBJbiBzdWNoIHJlc3VsdHMsIHdl IHdhbnQKLQkgKiBhbGwgb2JqZWN0IG5hbWVzIHRvIGJlIHF1YWxpZmllZCwgc28gdGhhdCByZXN1 bHRzIGFyZSAicG9ydGFibGUiIHRvCi0JICogZW52aXJvbm1lbnRzIHdpdGggZGlmZmVyZW50IHNl YXJjaF9wYXRoIHNldHRpbmdzLiAgUmF0aGVyIHRoYW4gaW5qZWN0Ci0JICogd2hhdCB3b3VsZCBi ZSByZXBldGl0aXZlIGNhbGxzIHRvIG92ZXJyaWRlIHNlYXJjaCBwYXRoIGFsbCBvdmVyIHRoZQot CSAqIHBsYWNlLCB3ZSBkbyBpdCBjZW50cmFsbHkgaGVyZS4KKwkgKiBTaW5jZSB0aGUgY29tbWFu ZCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mCisJICog Y2F0YWxvZ3MsIGdldE9iamVjdElkZW50aXR5IHJldHVybnMgdGhlIG9iamVjdCBuYW1lIHdpdGgg dGhlIGFscmVhZHkKKwkgKiBjaGFuZ2VkIHNjaGVtYS4gIFRoZSBvdXRwdXQgb2Ygb3VyIGRlcGFy c2luZyBtdXN0IHJldHVybiB0aGUgb3JpZ2luYWwKKwkgKiBzY2hlbWEgbmFtZSwgaG93ZXZlciwg c28gd2UgY2hvcCB0aGUgc2NoZW1hIG5hbWUgb2ZmIHRoZSBpZGVudGl0eQorCSAqIHN0cmluZyBh bmQgdGhlbiBwcmVwZW5kIHRoZSBxdW90ZWQgc2NoZW1hIG5hbWUuCisJICoKKwkgKiBYWFggVGhp cyBpcyBwcmV0dHkgY2x1bmt5LiBDYW4gd2UgZG8gYmV0dGVyPwogCSAqLwotCW92ZXJyaWRlUGF0 aCA9IEdldE92ZXJyaWRlU2VhcmNoUGF0aChDdXJyZW50TWVtb3J5Q29udGV4dCk7Ci0Jb3ZlcnJp ZGVQYXRoLT5zY2hlbWFzID0gTklMOwotCW92ZXJyaWRlUGF0aC0+YWRkQ2F0YWxvZyA9IGZhbHNl OwotCW92ZXJyaWRlUGF0aC0+YWRkVGVtcCA9IHRydWU7Ci0JUHVzaE92ZXJyaWRlU2VhcmNoUGF0 aChvdmVycmlkZVBhdGgpOworCWlkZW50aXR5ID0gZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3Ms IGZhbHNlKTsKKwlvbGRfc2NobmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShvbGRfc2NoZW1hLm9i amVjdElkKTsKKwlpZiAoIW9sZF9zY2huYW1lKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3Igc2NoZW1hIHdpdGggT0lEICV1IiwKKwkJCSBvbGRfc2NoZW1hLm9iamVjdElk KTsKKworCWlkZW50ID0gcHNwcmludGYoIiVzJXMiLCBxdW90ZV9pZGVudGlmaWVyKG9sZF9zY2hu YW1lKSwKKwkJCQkJIGlkZW50aXR5ICsgc3RybGVuKHF1b3RlX2lkZW50aWZpZXIobmV3X3NjaGVt YSkpKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVu dGl0eX1zIFNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SSIsIDMsCisJCQkJCQkgICJvYmp0eXBlIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2JqZWN0VHlw ZSwgZmFsc2UpLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBpZGVudCwKKwkJ CQkJCSAgIm5ld3NjaGVtYSIsIE9ialR5cGVTdHJpbmcsIG5ld19zY2hlbWEpOworfQogCi0JdmVy Ym9zZSA9IHZlcmJvc2VfbW9kZTsKKy8qCisgKiBEZXBhcnNlIGEgR1JBTlQvUkVWT0tFIGNvbW1h bmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEdSQU5UICV7cHJpdmlsZWdlczosIH1zIE9O IiAle29ianR5cGV9cyAle3ByaXZ0YXJnZXQ6LCB9cyBUTyAle2dyYW50ZWVzOiwgfXMKKyAqICV7 Z3JhbnRfb3B0aW9ufXMgR1JBTlRFRCBCWSAle3JvbGVuYW1lfXMKKyAqIAkJT1IKKyAqIFJFVk9L RSAle3ByaXZpbGVnZXM6LCB9cyBPTiIgJXtvYmp0eXBlfXMgJXtwcml2dGFyZ2V0OiwgfXMKKyAq IEZST00gJXtncmFudGVlczosIH1zICV7Z3JhbnRfb3B0aW9ufXMgJXtjYXNjYWRlfXMKKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9HcmFudFN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21k KQoreworCUludGVybmFsR3JhbnQgKmlzdG10OworCU9ialRyZWUgICAgKnJldDsKKwlMaXN0CSAg ICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJT2lkCQkJY2xhc3NJZDsKKwlPYmpU cmVlICAgICp0bXA7CiAKLQlzd2l0Y2ggKGNtZC0+dHlwZSkKKwkvKiBEb24ndCBkZXBhcnNlIFNR TCBjb21tYW5kcyBnZW5lcmF0ZWQgd2hpbGUgY3JlYXRpbmcgZXh0ZW5zaW9uICovCisJaWYgKGNt ZC0+aW5fZXh0ZW5zaW9uKQorCQlyZXR1cm4gTlVMTDsKKworCWlzdG10ID0gY21kLT5kLmdyYW50 LmlzdG10OworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gb2JqZWN0cyBmcm9tICJBTEwgLi4u IElOIFNDSEVNQSIgdG8gYmUgZ3JhbnRlZCwgdGhlbgorCSAqIG5vdGhpbmcgdG8gZG8uCisJICov CisJaWYgKGlzdG10LT5vYmplY3RzID09IE5JTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzd2l0Y2gg KGlzdG10LT5vYmp0eXBlKQogCXsKLQkJY2FzZSBTQ1RfU2ltcGxlOgotCQkJdHJlZSA9IGRlcGFy c2Vfc2ltcGxlX2NvbW1hbmQoY21kKTsKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQljYXNlIE9C SkVDVF9UQUJMRToKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQljbGFzc0lkID0gUmVsYXRp b25SZWxhdGlvbklkOwogCQkJYnJlYWs7Ci0JCWNhc2UgU0NUX0FsdGVyVGFibGU6Ci0JCQl0cmVl ID0gZGVwYXJzZV9BbHRlclJlbGF0aW9uKGNtZCk7CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJ Y2FzZSBPQkpFQ1RfVFlQRToKKwkJCWNsYXNzSWQgPSBUeXBlUmVsYXRpb25JZDsKIAkJCWJyZWFr OwotCQljYXNlIFNDVF9DcmVhdGVUYWJsZUFzOgotCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlVGFi bGVBc1N0bXQoY21kKTsKKwkJY2FzZSBPQkpFQ1RfRkRXOgorCQkJY2xhc3NJZCA9IEZvcmVpZ25E YXRhV3JhcHBlclJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9T RVJWRVI6CisJCQljbGFzc0lkID0gRm9yZWlnblNlcnZlclJlbGF0aW9uSWQ7CisJCQlicmVhazsK KwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJCWNhc2UgT0JKRUNUX1BST0NFRFVSRToKKwkJY2Fz ZSBPQkpFQ1RfUk9VVElORToKKwkJCWNsYXNzSWQgPSBQcm9jZWR1cmVSZWxhdGlvbklkOworCQkJ YnJlYWs7CisJCWNhc2UgT0JKRUNUX0xBTkdVQUdFOgorCQkJY2xhc3NJZCA9IExhbmd1YWdlUmVs YXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9MQVJHRU9CSkVDVDoKKwkJCWNsYXNz SWQgPSBMYXJnZU9iamVjdFJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfU0NI RU1BOgorCQkJY2xhc3NJZCA9IE5hbWVzcGFjZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2Fz ZSBPQkpFQ1RfREFUQUJBU0U6CisJCWNhc2UgT0JKRUNUX1RBQkxFU1BBQ0U6CisJCQljbGFzc0lk ID0gSW52YWxpZE9pZDsKKwkJCWVsb2coRVJST1IsICJnbG9iYWwgb2JqZWN0cyBub3Qgc3VwcG9y dGVkIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9C SkVDVCB2YWx1ZSAlZCIsIGlzdG10LT5vYmp0eXBlKTsKKwl9CisKKwkvKiBHUkFOVCBUTyBvciBS RVZPS0UgRlJPTSAqLworCXJldCA9IG5ld19vYmp0cmVlKGlzdG10LT5pc19ncmFudCA/ICJHUkFO VCIgOiAiUkVWT0tFIik7CisKKwkvKiBCdWlsZCBhIGxpc3Qgb2YgcHJpdmlsZWdlcyB0byBncmFu dC9yZXZva2UgKi8KKwlpZiAoaXN0bXQtPmFsbF9wcml2cykKKwl7CisJCXRtcCA9IG5ld19vYmp0 cmVlKCJBTEwgUFJJVklMRUdFUyIpOworCQlsaXN0ID0gbGlzdF9tYWtlMShuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKwl9CisJZWxzZQorCXsKKwkJY2hhciAqcHJpdjsKKwkJaWYgKGlzdG10LT5w cml2aWxlZ2VzICYgQUNMX0lOU0VSVCkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdl X3RvX3N0cmluZyhBQ0xfSU5TRVJUKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJp bmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfU0VM RUNUKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9TRUxF Q1QpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOwor CQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9VUERBVEUpCisJCXsKKwkJCXByaXYg PSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX1VQREFURSk7CisJCQlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5w cml2aWxlZ2VzICYgQUNMX0RFTEVURSkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdl X3RvX3N0cmluZyhBQ0xfREVMRVRFKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJp bmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVFJV TkNBVEUpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX1RS VU5DQVRFKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYp KTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfUkVGRVJFTkNFUykKKwkJewor CQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfUkVGRVJFTkNFUyk7CisJ CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJ aWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1RSSUdHRVIpCisJCXsKKwkJCXByaXYgPSAoY2hh ciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX1RSSUdHRVIpOworCQkJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmls ZWdlcyAmIEFDTF9FWEVDVVRFKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9f c3RyaW5nKEFDTF9FWEVDVVRFKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdf b2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVVNBR0Up CisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX1VTQUdFKTsK KwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQor CQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfQ1JFQVRFKQorCQl7CisJCQlwcml2ID0gKGNo YXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9DUkVBVEUpOworCQkJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmls ZWdlcyAmIEFDTF9DUkVBVEVfVEVNUCkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdl X3RvX3N0cmluZyhBQ0xfQ1JFQVRFX1RFTVApOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFD TF9DT05ORUNUKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFD TF9DT05ORUNUKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHBy aXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfTUFJTlRBSU4pCisJCXsK KwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX01BSU5UQUlOKTsKKwkJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCisJ CWlmICghaXN0bXQtPmlzX2dyYW50ICYmIGlzdG10LT5ncmFudF9vcHRpb24pCisJCQlhcHBlbmRf c3RyaW5nX29iamVjdChyZXQsICIle2dyYW50X29wdGlvbn1zIiwgImdyYW50X29wdGlvbiIsCisJ CQkJCQkJCSBpc3RtdC0+Z3JhbnRfb3B0aW9uID8gIkdSQU5UIE9QVElPTiBGT1IiIDogIiIpOwor CisJCWlmIChpc3RtdC0+Y29sX3ByaXZzICE9IE5JTCkKKwkJeworCQkJTGlzdENlbGwgICAqb2Nl bGw7CisKKwkJCWZvcmVhY2gob2NlbGwsIGlzdG10LT5jb2xfcHJpdnMpCisJCQl7CisJCQkJQWNj ZXNzUHJpdiAqcHJpdiA9IGxmaXJzdChvY2VsbCk7CisJCQkJTGlzdAkgICAqY29scyA9IE5JTDsK KworCQkJCWZvcmVhY2goY2VsbCwgcHJpdi0+Y29scykKKwkJCQl7CisJCQkJCVN0cmluZwkgICAq Y29sbmFtZSA9IGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbCk7CisKKwkJCQkJY29scyA9IGxhcHBl bmQoY29scywKKwkJCQkJCQkJICAgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKGNvbG5hbWUpKSk7 CisJCQkJfQorCisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIigle2NvbHM6LCB9cykgJXtwcml2 fXMiLCAyLAorCQkJCQkJCQkJICJjb2xzIiwgT2JqVHlwZUFycmF5LCBjb2xzLAorCQkJCQkJCQkJ ICJwcml2IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSAgcHJpdi0+cHJpdl9uYW1lID8gcHJp di0+cHJpdl9uYW1lIDogIkFMTCBQUklWSUxFR0VTIik7CisKKwkJCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCX0KKwkJfQorCX0KKwlhcHBlbmRfYXJy YXlfb2JqZWN0KHJldCwgIiV7cHJpdmlsZWdlczosIH1zIE9OIiwgbGlzdCk7CisKKwlhcHBlbmRf c3RyaW5nX29iamVjdChyZXQsICIle29ianR5cGV9cyIsICJvYmp0eXBlIiwKKwkJCQkJCSAoY2hh ciAqKXN0cmluZ2lmeV9vYmp0eXBlKGlzdG10LT5vYmp0eXBlLCB0cnVlKSk7CisKKwkvKiBUYXJn ZXQgb2JqZWN0cy4gIFdlIHVzZSBvYmplY3QgaWRlbnRpdGllcyBoZXJlICovCisJbGlzdCA9IE5J TDsKKwlmb3JlYWNoKGNlbGwsIGlzdG10LT5vYmplY3RzKQorCXsKKwkJT2lkCQkJb2JqaWQgPSBs Zmlyc3Rfb2lkKGNlbGwpOworCQlPYmplY3RBZGRyZXNzIGFkZHI7CisKKwkJYWRkci5jbGFzc0lk ID0gY2xhc3NJZDsKKwkJYWRkci5vYmplY3RJZCA9IG9iamlkOworCQlhZGRyLm9iamVjdFN1Yklk ID0gMDsKKworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1zIiwgMSwKKwkJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgZ2V0T2JqZWN0SWRlbnRpdHko JmFkZHIsIGZhbHNlKSk7CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtwcml2dGFyZ2V0Oiwg fXMiLCBsaXN0KTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgaXN0bXQtPmlzX2dyYW50 ID8gIlRPIiA6ICJGUk9NIik7CisKKwkvKiBMaXN0IG9mIGdyYW50ZWVzICovCisJbGlzdCA9IE5J TDsKKwlmb3JlYWNoKGNlbGwsIGlzdG10LT5ncmFudGVlcykKKwl7CisJCU9pZAkJCWdyYW50ZWUg PSBsZmlyc3Rfb2lkKGNlbGwpOworCisJCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKGdy YW50ZWUpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK Kwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7Z3JhbnRlZXM6LCB9cyIsIGxpc3Qp OworCisJLyogVGhlIHdvcmRpbmcgb2YgdGhlIGdyYW50IG9wdGlvbiBpcyB2YXJpYWJsZSAuLi4g Ki8KKwlpZiAoaXN0bXQtPmlzX2dyYW50KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIl e2dyYW50X29wdGlvbn1zIiwgImdyYW50X29wdGlvbiIsCisJCQkJCQkJIGlzdG10LT5ncmFudF9v cHRpb24gPyAiV0lUSCBHUkFOVCBPUFRJT04iIDogIiIpOworCisJaWYgKGlzdG10LT5ncmFudG9y X3VpZCkKKwl7CisJCUhlYXBUdXBsZQlyb2x0dXA7CisJCWNoYXIJICAgKnJvbGVuYW1lOworCisJ CXJvbHR1cCA9IFNlYXJjaFN5c0NhY2hlMShBVVRIT0lELCBPYmplY3RJZEdldERhdHVtKGlzdG10 LT5ncmFudG9yX3VpZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocm9sdHVwKSkKKwkJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByb2xlIHdpdGggT0lEICV1IiwKKwkJ CQkgaXN0bXQtPmdyYW50b3JfdWlkKTsKKworCQlyb2xlbmFtZSA9IE5hbWVTdHIoKChGb3JtX3Bn X2F1dGhpZCkgR0VUU1RSVUNUKHJvbHR1cCkpLT5yb2xuYW1lKTsKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QocmV0LCAiR1JBTlRFRCBCWSAle3JvbGVuYW1lfXMiLAorCQkJCQkJCSAicm9sZW5hbWUi LCByb2xlbmFtZSk7CisJCVJlbGVhc2VTeXNDYWNoZShyb2x0dXApOworCX0KKworCWlmICghaXN0 bXQtPmlzX2dyYW50KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2Nhc2NhZGV9cyIs ICJjYXNjYWRlIiwKKwkJCQkJCQkgaXN0bXQtPmJlaGF2aW9yID09IERST1BfQ0FTQ0FERSA/ICJD QVNDQURFIiA6ICIiKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFs dGVyT3BlcmF0b3JTdG10IChBTFRFUiBPUEVSQVRPUiAuLi4gU0VUIC4uLikuCisgKgorICogR2l2 ZW4gYW4gb3BlcmF0b3IgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJl dHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIE9QRVJBVE9SICV7aWRlbnRpdHl9TyAoJXtsZWZ0 X3R5cGV9VCwgJXtyaWdodF90eXBlfVQpCisgKiBTRVQgKCV7ZWxlbXM6LCB9cykKKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck9wZXJhdG9yU3RtdChPaWQgb2JqZWN0SWQsIE5v ZGUgKnBhcnNldHJlZSkKK3sKKwlIZWFwVHVwbGUJb3ByVHVwOworCUFsdGVyT3BlcmF0b3JTdG10 ICpub2RlID0gKEFsdGVyT3BlcmF0b3JTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpy ZXQ7CisJRm9ybV9wZ19vcGVyYXRvciBvcHJGb3JtOworCUxpc3RDZWxsICAgKmNlbGw7CisJTGlz dAkgICAqbGlzdCA9IE5JTDsKKworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVST0lELCBP YmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wclR1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3aXRo IE9JRCAldSIsIG9iamVjdElkKTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0b3IpIEdFVFNU UlVDVChvcHJUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIE9QRVJBVE9SICV7 aWRlbnRpdHl9TyIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3ByRm9ybS0+b3BybmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJICBOYW1lU3RyKG9wckZvcm0tPm9wcm5hbWUpKSk7CisKKwkvKiBMRUZUQVJHICovCisJ aWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIigle2xlZnRfdHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3By Rm9ybS0+b3BybGVmdCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwg Iigle2xlZnRfdHlwZX1zIiwgImxlZnRfdHlwZSIsICJOT05FIik7CisKKwkvKiBSSUdIVEFSRyAq LworCUFzc2VydChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChyZXQsICIsICV7cmlnaHRfdHlwZX1UKSIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9y X3R5cGUob3ByRm9ybS0+b3BycmlnaHQsIC0xKSk7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9w dGlvbnMpCisJeworCQlEZWZFbGVtICAgICplbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwp OworCQlPYmpUcmVlICAgICp0bXBfb2JqID0gTlVMTDsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRl Zm5hbWUsICJyZXN0cmljdCIpID09IDApCisJCXsKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9W QSgiUkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVz dHJpY3QiKTsKKwkJCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJlc3QpKQorCQkJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkJCQkgb3ByRm9ybS0+b3BycmVzdCkpOworCQkJZWxzZQorCQkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcF9vYmosICIle3Byb2NlZHVyZX1zIiwgInByb2NlZHVyZSIsCisJCQkJCQkJCQkgIk5P TkUiKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImpvaW4iKSA9PSAw KQorCQl7CisJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkpPSU49IiwgMSwKKwkJCQkJCQkJ CSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiam9pbiIpOworCQkJaWYgKE9pZElzVmFsaWQob3By Rm9ybS0+b3Byam9pbikpCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7cHJv Y2VkdXJlfUQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1 cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJqb2luKSk7CisJCQll bHNlCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfXMiLCAi cHJvY2VkdXJlIiwKKwkJCQkJCQkJCSAiTk9ORSIpOworCQl9CisKKwkJQXNzZXJ0KHRtcF9vYmop OworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJ fQorCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICJTRVQgKCV7ZWxlbXM6LCB9cykiLCBsaXN0 KTsKKworCVJlbGVhc2VTeXNDYWNoZShvcHJUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoK KyAqIERlcGFyc2UgYW4gQUxURVIgT1BFUkFUT1IgRkFNSUxZIEFERC9EUk9QIGNvbW1hbmQuCisg KgorICogR2l2ZW4gdGhlIENvbGxlY3RlZENvbW1hbmQsIHJldHVybiBhbiBPYmpUcmVlIHJlcHJl c2VudGluZyB0aGUgQWx0ZXIKKyAqIE9wZXJhdG9yIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBz eW50YXgKKyAqIEFMVEVSIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXthbW5h bWV9SSBBREQvRFJPUCAle2l0ZW1zOix9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0FsdGVyT3BGYW1pbHkoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9ialRyZWUgICAgKnJl dDsKKwlBbHRlck9wRmFtaWx5U3RtdCAqc3RtdCA9IChBbHRlck9wRmFtaWx5U3RtdCAqKSBjbWQt PnBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZnRwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsK KwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKiBEb24ndCBk ZXBhcnNlIFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQgd2hpbGUgY3JlYXRpbmcgZXh0ZW5zaW9uICov CisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uKQorCQlyZXR1cm4gTlVMTDsKKworCWZ0cCA9IFNlYXJj aFN5c0NhY2hlMShPUEZBTUlMWU9JRCwKKwkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShjbWQtPmQu b3BmYW0uYWRkcmVzcy5vYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChmdHApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdp dGggT0lEICV1IiwKKwkJCSBjbWQtPmQub3BmYW0uYWRkcmVzcy5vYmplY3RJZCk7CisJb3BmRm9y bSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1QoZnRwKTsKKworCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1l fUkiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAg TmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSksCisJCQkJCQkgImFtbmFtZSIsIE9ialR5cGVTdHJp bmcsIHN0bXQtPmFtbmFtZSk7CisKKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5vcGZhbS5vcGVyYXRv cnMpCisJeworCQlPcEZhbWlseU1lbWJlciAqb3BlciA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJl ZSAgICAqdG1wX29iajsKKworCQkvKgorCQkgKiBWZXJib3NlIHN5bnRheAorCQkgKgorCQkgKiBP UEVSQVRPUiAle251bX1uICV7b3BlcmF0b3J9Tygle2x0eXBlfVQsICV7cnR5cGV9VCkgJXtwdXJw b3NlfXMKKwkJICovCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiT1BFUkFUT1IgJXtudW19 biIsIDEsCisJCQkJCQkJCSJudW0iLCBPYmpUeXBlSW50ZWdlciwgb3Blci0+bnVtYmVyKTsKKwor CQkvKiBBZGQgdGhlIG9wZXJhdG9yIG5hbWU7IHRoZSBEUk9QIGNhc2UgZG9lc24ndCBoYXZlIHRo aXMgKi8KKwkJaWYgKCFzdG10LT5pc0Ryb3ApCisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBf b2JqLCAiJXtvcGVyYXRvcn1PIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgb3Blci0+b2JqZWN0KSk7CisK KwkJLyogQWRkIHRoZSB0eXBlcyAqLworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAi KCV7bHR5cGV9VCwiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5sZWZ0dHlw ZSwgLTEpKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7cnR5cGV9VCkiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5yaWdodHR5cGUsIC0xKSk7CisKKwkJ LyogQWRkIHRoZSBGT1IgU0VBUkNIIC8gRk9SIE9SREVSIEJZIGNsYXVzZTsgbm90IGluIHRoZSBE Uk9QIGNhc2UgKi8KKwkJaWYgKCFzdG10LT5pc0Ryb3ApCisJCXsKKwkJCWlmIChvcGVyLT5zb3J0 ZmFtaWx5ID09IEludmFsaWRPaWQpCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwg IiV7cHVycG9zZX1zIiwgInB1cnBvc2UiLAorCQkJCQkJCQkJICJGT1IgU0VBUkNIIik7CisJCQll bHNlCisJCQl7CisJCQkJT2JqVHJlZSAgICAqb3JkZXJieV9vYmo7CisKKwkJCQlvcmRlcmJ5X29i aiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgT1JERVIgQlkgJXtvcGZhbWlseX1EIiwgMSwKKwkJCQkJ CQkJCQkJIm9wZmFtaWx5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yRmFtaWx5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ CQkJCW9wZXItPnNvcnRmYW1pbHkpKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2Jq LCAiJXtwdXJwb3NlfXMiLCBvcmRlcmJ5X29iaik7CisJCQl9CisJCX0KKworCQlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJfQorCisJZm9yZWFjaChj ZWxsLCBjbWQtPmQub3BmYW0ucHJvY2VkdXJlcykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpwcm9j ID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlICAgICp0bXBfb2JqOworCisJCXRtcF9vYmogPSBu ZXdfb2JqdHJlZV9WQSgiRlVOQ1RJT04gJXtudW19biAoJXtsdHlwZX1ULCAle3J0eXBlfVQpIiwg MywKKwkJCQkJCQkJIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBwcm9jLT5udW1iZXIsCisJCQkJCQkJ CSJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHBy b2MtPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJCSJydHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKgor CQkgKiBBZGQgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGFyZyB0eXBlczsgdGhlIERST1AgY2FzZSBk b2Vzbid0IGhhdmUKKwkJICogdGhpcworCQkgKi8KKwkJaWYgKCFzdG10LT5pc0Ryb3ApCisJCXsK KwkJCUhlYXBUdXBsZQlwcm9jVHVwOworCQkJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCQkJT2lk CQkgICAqcHJvYXJndHlwZXM7CisJCQlMaXN0CSAgICphcmdsaXN0ID0gTklMOworCQkJaW50CQkJ aTsKKworCQkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERh dHVtKHByb2MtPm9iamVjdCkpOworCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQor CQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgd2l0aCBP SUQgJXUiLAorCQkJCQkgcHJvYy0+b2JqZWN0KTsKKwkJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJv YykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCQlwcm9hcmd0eXBlcyA9IHByb2NGb3JtLT5wcm9h cmd0eXBlcy52YWx1ZXM7CisJCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBp KyspCisJCQl7CisJCQkJT2JqVHJlZSAgICAqYXJnOworCisJCQkJYXJnID0gbmV3X29ianRyZWVf Zm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCQlhcmdsaXN0ID0gbGFwcGVuZChhcmds aXN0LCBuZXdfb2JqZWN0X29iamVjdChhcmcpKTsKKwkJCX0KKworCQkJYXBwZW5kX29iamVjdF9v YmplY3QodG1wX29iaiwgIiV7ZnVuY3Rpb259RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3Ry KHByb2NGb3JtLT5wcm9uYW1lKSkpOworCisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBfb2Jq LCAiKCIpOworCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiJXthcmd0eXBlczosIH1U IiwgYXJnbGlzdCk7CisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBfb2JqLCAiKSIpOworCisJ CQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJCX0KKworCQlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJfQorCisJaWYgKHN0bXQtPmlzRHJvcCkK KwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCAiRFJPUCIpOworCWVsc2UKKwkJYXBwZW5kX2Zv cm1hdF9zdHJpbmcocmV0LCAiQUREIik7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7 aXRlbXM6LCB9cyIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKGZ0cCk7CisKKwlyZXR1cm4g cmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlck93bmVyU3RtdCAoQUxURVIgLi4uIE9X TkVSIFRPIC4uLikuCisgKgorICogR2l2ZW4gdGhlIG9iamVjdCBhZGRyZXNzIGFuZCB0aGUgcGFy c2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRp bmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSICVz ICV7aWRlbnRpdHl9cyBPV05FUiBUTyAle25ld293bmVyfUkKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9BbHRlck93bmVyU3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBh cnNldHJlZSkKK3sKKwlBbHRlck93bmVyU3RtdCAqbm9kZSA9IChBbHRlck93bmVyU3RtdCAqKSBw YXJzZXRyZWU7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7 aWRlbnRpdHl9cyBPV05FUiBUTyAle25ld293bmVyfUkiLCAzLAorCQkJCQkJICAib2JqdHlwZSIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9iamVjdFR5 cGUsIGZhbHNlKSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAg Z2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKSwKKwkJCQkJCSAgIm5ld293bmVyIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSAgZ2V0X3JvbGVzcGVjX25hbWUobm9kZS0+bmV3b3duZXIp KTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJTZXFTdG10LgorICoKKyAqIEdpdmVuIGEg c2VxdWVuY2UgT0lEIGFuZCBhIHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFu IE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogQUxURVIgU0VRVUVOQ0UgJXtpZGVudGl0eX1EICV7ZGVmaW5pdGlvbjog fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclNlcVN0bXQoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCVJlbGF0aW9uCXJl bGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCUxpc3QJICAgKmVsZW1z ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOwor CVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQWx0ZXJTZXFTdG10ICphbHRl clNlcVN0bXQgPSAoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVu Y2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSAodmlhIENSRUFURSBUQUJM RSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJICovCisJaWYgKGFs dGVyU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCXNlcWRhdGEgPSBn ZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElkKTsKKworCXJlbGF0aW9uID0gcmVsYXRpb25fb3Bl bihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNl UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNo ZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlIHdpdGggT0lEICAldSIsIG9iamVjdElkKTsKKwor CXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxlKTsKKworCWZv cmVhY2goY2VsbCwgKChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlKS0+b3B0aW9ucykKKwl7CisJ CURlZkVsZW0gICAgKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9iakVsZW0g ICAgKm5ld2VsbTsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjYWNoZSIpID09IDAp CisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DYWNoZShzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2Ug aWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiY3ljbGUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVw YXJzZV9TZXFfQ3ljbGUoc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ ZGVmbmFtZSwgImluY3JlbWVudCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9JbmNy ZW1lbnRCeShzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1l LCAibWludmFsdWUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWludmFsdWUoc2Vx Zm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm1heHZhbHVl IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX01heHZhbHVlKHNlcWZvcm0sIGZhbHNl KTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJzdGFydCIpID09IDApCisJCQlu ZXdlbG0gPSBkZXBhcnNlX1NlcV9TdGFydHdpdGgoc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlm IChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RhcnQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVw YXJzZV9TZXFfUmVzdGFydChzZXFkYXRhKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5h bWUsICJvd25lZF9ieSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9Pd25lZEJ5KG9i amVjdElkLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiYXMiKSA9 PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfQXMoZWxlbSk7CisJCWVsc2UKKwkJCWVsb2co RVJST1IsICJpbnZhbGlkIHNlcXVlbmNlIG9wdGlvbiAlcyIsIGVsZW0tPmRlZm5hbWUpOworCisJ CWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3ZWxtKTsKKwl9CisKKwlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgU0VRVUVOQ0UgJXtpZGVudGl0eX1EICV7ZGVmaW5pdGlvbjogfXMiLCAyLAor CQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAg UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKSwKKwkJCQkJCSAiZGVmaW5pdGlvbiIs IE9ialR5cGVBcnJheSwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVM b2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJl dHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyVHlwZVN0bXQuCisgKgorICog R2l2ZW4gYSB0eXBlIE9JRCBhbmQgYSBwYXJzZSB0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVy biBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUuCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIEFMVEVSIFRZUEUgJXtpZGVudGl0eX1EICgle2RlZmluaXRpb246IH1z KQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVHlwZVNldFN0bXQoT2lkIG9i amVjdElkLCBOb2RlICpjbWQpCit7CisJQWx0ZXJUeXBlU3RtdCAqYWx0ZXJUeXBlU2V0U3RtdCA9 IChBbHRlclR5cGVTdG10ICopIGNtZDsKKwlMaXN0Q2VsbCAgICpwbDsKKwlMaXN0CSAgICplbGVt cyA9IE5JTDsKKwlIZWFwVHVwbGUJdHlwVHVwOworCUZvcm1fcGdfdHlwZSB0eXBGb3JtOworCisJ dHlwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0 SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlw Rm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJZm9yZWFjaChwbCwg YWx0ZXJUeXBlU2V0U3RtdC0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmRlZmVsID0gKERl ZkVsZW0gKikgbGZpcnN0KHBsKTsKKwkJT2JqRWxlbSAgICAqbmV3ZWxtOworCisJCWlmIChzdHJj bXAoZGVmZWwtPmRlZm5hbWUsICJzdG9yYWdlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2Vf VHlwZV9TdG9yYWdlKHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAicmVj ZWl2ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfUmVjZWl2ZSh0eXBGb3JtKTsK KwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNlbmQiKSA9PSAwKQorCQkJbmV3ZWxtID0g ZGVwYXJzZV9UeXBlX1NlbmQodHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUs ICJ0eXBtb2RfaW4iKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1R5cG1vZF9Jbih0 eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInR5cG1vZF9vdXQiKSA9PSAw KQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQodHlwRm9ybSk7CisJCWlmIChz dHJjbXAoZGVmZWwtPmRlZm5hbWUsICJhbmFseXplIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFy c2VfVHlwZV9BbmFseXplKHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAi c3Vic2NyaXB0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9TdWJzY3JpcHQodHlw Rm9ybSk7CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHR5cGUgb3B0aW9uICVzIiwg ZGVmZWwtPmRlZm5hbWUpOworCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3ZWxtKTsKKwl9 CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgi QUxURVIgVFlQRSAle2lkZW50aXR5fUQgU0VUICgle2RlZmluaXRpb246IH1zKSIsIDIsCisJCQkJ CQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgIG9iamVjdElkKSwKKwkJ CQkJCSAgImRlZmluaXRpb24iLCBPYmpUeXBlQXJyYXksIGVsZW1zKTsKK30KKworLyoKKyAqIERl cGFyc2UgYSBDb21wb3NpdGVUeXBlU3RtdCAoQ1JFQVRFIFRZUEUgQVMpCisgKgorICogR2l2ZW4g YSBDb21wb3NpdGUgdHlwZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwg cmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4K KyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFTICgl e2NvbHVtbnM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db21wb3NpdGVU eXBlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDb21wb3NpdGVUeXBl U3RtdCAqbm9kZSA9IChDb21wb3NpdGVUeXBlU3RtdCAqKSBwYXJzZXRyZWU7CisJSGVhcFR1cGxl CXR5cHR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwZm9ybTsKKwlSZWxhdGlvbgl0eXBlcmVsOworCUxp c3QJICAgKmRwY29udGV4dDsKKwlMaXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkvKiBGaW5k IHRoZSBwZ190eXBlIGVudHJ5IGFuZCBvcGVuIHRoZSBjb3JyZXNwb25kaW5nIHJlbGF0aW9uICov CisJdHlwdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2Jq ZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwdHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJ dHlwZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXB0dXApOworCXR5cGVyZWwgPSBy ZWxhdGlvbl9vcGVuKHR5cGZvcm0tPnR5cHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJZHBj b250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0eXBl cmVsKSwKKwkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQodHlwZXJlbCkpOworCisJdGFibGVlbHRz ID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHR5cGVyZWwsIG5vZGUtPmNvbGRlZmxpc3QsIGRwY29u dGV4dCwKKwkJCQkJCQkJCSAgZmFsc2UsCS8qIG5vdCB0eXBlZCAqLworCQkJCQkJCQkJICB0cnVl KTsJLyogY29tcG9zaXRlIHR5cGUgKi8KKworCXRhYmxlX2Nsb3NlKHR5cGVyZWwsIEFjY2Vzc1No YXJlTG9jayk7CisJUmVsZWFzZVN5c0NhY2hlKHR5cHR1cCk7CisKKwlyZXR1cm4gbmV3X29ianRy ZWVfVkEoIkNSRUFURSBUWVBFICV7aWRlbnRpdHl9RCBBUyAoJXtjb2x1bW5zOiwgfXMpIiwgMiwK KwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLCBvYmplY3RJZCksCisJCQkJCQkgICJjb2x1 bW5zIiwgT2JqVHlwZUFycmF5LCB0YWJsZWVsdHMpOworfQorCisvKgorICogRGVwYXJzZSBhIENy ZWF0ZUNvbnZlcnNpb25TdG10CisgKgorICogR2l2ZW4gYSBjb252ZXJzaW9uIE9JRCBhbmQgdGhl IHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVz ZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBD UkVBVEUgJXtkZWZhdWx0fXMgQ09OVkVSU0lPTiAle2lkZW50aXR5fUQgRk9SICV7c291cmNlfUwg VE8gJXtkZXN0fUwKKyAqIEZST00gJXtmdW5jdGlvbn1ECisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQ3JlYXRlQ29udmVyc2lvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlIZWFwVHVwbGUJY29uVHVwOworCVJlbGF0aW9uCWNvbnZyZWw7CisJRm9ybV9wZ19jb252 ZXJzaW9uIGNvbkZvcm07CisJT2JqVHJlZSAgICAqcmV0OworCisJY29udnJlbCA9IHRhYmxlX29w ZW4oQ29udmVyc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJY29uVHVwID0gZ2V0 X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjb252cmVsLCBBbnVtX3BnX2NvbnZlcnNpb25fb2lkLCBv YmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCkpCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb252ZXJzaW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0 SWQpOworCWNvbkZvcm0gPSAoRm9ybV9wZ19jb252ZXJzaW9uKSBHRVRTVFJVQ1QoY29uVHVwKTsK KworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtkZWZhdWx0fXMgQ09OVkVSU0lPTiAl e2lkZW50aXR5fUQgRk9SICV7c291cmNlfUwgVE8gJXtkZXN0fUwgRlJPTSAle2Z1bmN0aW9ufUQi LCA1LAorCQkJCQkJICAiZGVmYXVsdCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIGNvbkZvcm0t PmNvbmRlZmF1bHQgPyAiREVGQVVMVCIgOiAiIiwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGNvbkZvcm0tPmNvbm5h bWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgIE5hbWVTdHIoY29uRm9ybS0+Y29ubmFtZSkpLAorCQkJ CQkJICAic291cmNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgKGNoYXIgKilwZ19lbmNvZGlu Z190b19jaGFyKGNvbkZvcm0tPmNvbmZvcmVuY29kaW5nKSwKKwkJCQkJCSAgImRlc3QiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJICAoY2hhciAqKXBnX2VuY29kaW5nX3RvX2NoYXIoY29uRm9ybS0+ Y29udG9lbmNvZGluZyksCisJCQkJCQkgICJmdW5jdGlvbiIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCSAgY29uRm9ybS0+Y29ucHJvYykpOworCisJdGFibGVfY2xvc2UoY29udnJlbCwg QWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEg Q3JlYXRlRW51bVN0bXQgKENSRUFURSBUWVBFIEFTIEVOVU0pCisgKgorICogR2l2ZW4gYSBFbnVt IHR5cGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBP YmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIENSRUFURSBUWVBFICV7aWRlbnRpdHl9RCBBUyBFTlVNICgle3ZhbHVl czosIH1MKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUVudW1TdG10KE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUVudW1TdG10ICpub2RlID0g KENyZWF0ZUVudW1TdG10ICopIHBhcnNldHJlZTsKKwlMaXN0CSAgICp2YWx1ZXMgPSBOSUw7CisJ TGlzdENlbGwgICAqY2VsbDsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+dmFscykKKwkJdmFsdWVz ID0gbGFwcGVuZCh2YWx1ZXMsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbChsZmlyc3Rfbm9kZShT dHJpbmcsIGNlbGwpKSkpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSAl e2lkZW50aXR5fUQgQVMgRU5VTSAoJXt2YWx1ZXM6LCB9TCkiLCAyLAorCQkJCQkJICAiaWRlbnRp dHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo VHlwZVJlbGF0aW9uSWQsIG9iamVjdElkKSwKKwkJCQkJCSAgInZhbHVlcyIsIE9ialR5cGVBcnJh eSwgdmFsdWVzKTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVFeHRlbnNpb25TdG10Cisg KgorICogR2l2ZW4gYW4gZXh0ZW5zaW9uIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVh dGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBj b21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgRVhURU5TSU9OICV7aWZf bm90X2V4aXN0c31zICV7bmFtZX1JICV7b3B0aW9uczogfXMKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9DcmVhdGVFeHRlbnNpb25TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0 cmVlKQoreworCUNyZWF0ZUV4dGVuc2lvblN0bXQgKm5vZGUgPSAoQ3JlYXRlRXh0ZW5zaW9uU3Rt dCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcGdfZXh0ZW5zaW9uOworCUhlYXBUdXBsZQlleHRU dXA7CisJRm9ybV9wZ19leHRlbnNpb24gZXh0Rm9ybTsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlz dAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJcGdfZXh0ZW5zaW9uID0g dGFibGVfb3BlbihFeHRlbnNpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWV4dFR1 cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfZXh0ZW5zaW9uLCBBbnVtX3BnX2V4dGVu c2lvbl9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZXh0VHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGV4dGVuc2lvbiB3aXRoIE9JRCAl dSIsIG9iamVjdElkKTsKKwlleHRGb3JtID0gKEZvcm1fcGdfZXh0ZW5zaW9uKSBHRVRTVFJVQ1Qo ZXh0VHVwKTsKKworCS8qIExpc3Qgb2Ygb3B0aW9ucyAqLworCWZvcmVhY2goY2VsbCwgbm9kZS0+ b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxs KTsKKworCQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgInNjaGVtYSIpID09IDApCisJCXsKKwkJ CS8qIFNraXAgdGhpcyBvbmU7IHdlIGFkZCBvbmUgdW5jb25kaXRpb25hbGx5IGJlbG93ICovCisJ CQljb250aW51ZTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAibmV3X3Zl cnNpb24iKSA9PSAwKQorCQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkVSU0lPTiAle3Zl cnNpb259TCIsIDIsCisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2ZXJzaW9uIiwK KwkJCQkJCQkJICJ2ZXJzaW9uIiwgT2JqVHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOwor CQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJ ZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm9sZF92ZXJzaW9uIikgPT0gMCkKKwkJewor CQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkZST00gJXt2ZXJzaW9ufUwiLCAyLAorCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZnJvbSIsCisJCQkJCQkJCSAidmVyc2lvbiIsIE9ialR5 cGVTdHJpbmcsIGRlZkdldFN0cmluZyhvcHQpKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJ1bnN1 cHBvcnRlZCBvcHRpb24gJXMiLCBvcHQtPmRlZm5hbWUpOworCX0KKworCS8qIEFkZCB0aGUgU0NI RU1BIG9wdGlvbiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTQ0hFTUEgJXtzY2hlbWF9SSIs IDIsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2NoZW1hIiwKKwkJCQkJCSAic2No ZW1hIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRfbmFtZXNwYWNlX25hbWUoZXh0Rm9ybS0+ ZXh0bmFtZXNwYWNlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisJdGFibGVfY2xvc2UocGdfZXh0ZW5zaW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJ cmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgRVhURU5TSU9OICV7aWZfbm90X2V4aXN0c31z ICV7bmFtZX1JICV7b3B0aW9uczogfXMiLCAzLAorCQkJCQkJICAiaWZfbm90X2V4aXN0cyIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkgIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNU UyIgOiAiIiwKKwkJCQkJCSAgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5leHRuYW1lLAor CQkJCQkJICAib3B0aW9ucyIsIE9ialR5cGVBcnJheSwgbGlzdCk7Cit9CisKKy8qCisgKiBJZiBh IGNvbHVtbiBuYW1lIGlzIHNwZWNpZmllZCwgYWRkIGFuIGVsZW1lbnQgZm9yIGl0OyBvdGhlcndp c2UgaXQncyBhCisgKiB0YWJsZS1sZXZlbCBvcHRpb24uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfRmR3T3B0aW9ucyhMaXN0ICpvcHRpb25zLCBjaGFyICpjb2xuYW1lKQoreworCU9i alRyZWUgICAgKnJldDsKKworCWlmIChjb2xuYW1lKQorCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgQ09MVU1OICV7Y29sdW1ufUkiLCAxLAorCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0 cmluZywgY29sbmFtZSk7CisJZWxzZQorCQlyZXQgPSBuZXdfb2JqdHJlZSgiT1BUSU9OUyIpOwor CisJaWYgKG9wdGlvbnMgIT0gTklMKQorCXsKKwkJTGlzdAkgICAqb3B0b3V0ID0gTklMOworCQlM aXN0Q2VsbCAgICpjZWxsOworCisJCWZvcmVhY2goY2VsbCwgb3B0aW9ucykKKwkJeworCQkJRGVm RWxlbSAgICAqZWxlbTsKKwkJCU9ialRyZWUgICAgKm9wdDsKKworCQkJZWxlbSA9IChEZWZFbGVt ICopIGxmaXJzdChjZWxsKTsKKworCQkJc3dpdGNoIChlbGVtLT5kZWZhY3Rpb24pCisJCQl7CisJ CQkJY2FzZSBERUZFTEVNX1VOU1BFQzoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIiV7bGFi ZWx9SSAle3ZhbHVlfUwiLCAyLAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBl bGVtLT5kZWZuYW1lLAorCQkJCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJ CQkJCSBlbGVtLT5hcmcgPyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRC b29sZWFuKGVsZW0pID8gIlRSVUUiIDogIkZBTFNFIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2Ug REVGRUxFTV9TRVQ6CisJCQkJCW9wdCA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgJXtsYWJlbH1JICV7 dmFsdWV9TCIsIDIsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcsIGVsZW0tPmRl Zm5hbWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGVs ZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJCQkJIGRlZkdldEJvb2xlYW4o ZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBERUZFTEVN X0FERDoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIkFERCAle2xhYmVsfUkgJXt2YWx1ZX1M IiwgMiwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ZGVmbmFtZSwK KwkJCQkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgZWxlbS0+YXJn ID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVtKSA/ ICJUUlVFIiA6ICJGQUxTRSIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIERFRkVMRU1fRFJPUDoK KwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIkRST1AgJXtsYWJlbH1JIiwgMSwKKwkJCQkJCQkJ CQkgImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ZGVmbmFtZSk7CisJCQkJCWJyZWFrOwor CQkJCWRlZmF1bHQ6CisJCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIGRlZiBhY3Rpb24gJWQiLCBl bGVtLT5kZWZhY3Rpb24pOworCQkJCQlvcHQgPSBOVUxMOworCQkJfQorCisJCQlvcHRvdXQgPSBs YXBwZW5kKG9wdG91dCwgbmV3X29iamVjdF9vYmplY3Qob3B0KSk7CisJCX0KKworCQlhcHBlbmRf YXJyYXlfb2JqZWN0KHJldCwgIigle29wdGlvbjogLH1zKSIsIG9wdG91dCk7CisJfQorCWVsc2UK KwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog RGVwYXJzZSBhIENyZWF0ZUZkd1N0bXQgKENSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUikKKyAq CisgKiBHaXZlbiBhbiBGRFcgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQu CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUiAl e2lkZW50aXR5fUkgJXtoYW5kbGVyfXMgJXt2YWxpZGF0b3J9cyAle2dlbmVyaWNfb3B0aW9uc31z CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRmR3U3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGZHdTdG10ICpub2RlID0gKENyZWF0ZUZk d1N0bXQgKikgcGFyc2V0cmVlOworCUhlYXBUdXBsZQlmZHdUdXA7CisJRm9ybV9wZ19mb3JlaWdu X2RhdGFfd3JhcHBlciBmZHdGb3JtOworCVJlbGF0aW9uCXJlbDsKKwlPYmpUcmVlICAgICpyZXQ7 CisJT2JqVHJlZSAgICAqdG1wOworCisJcmVsID0gdGFibGVfb3BlbihGb3JlaWduRGF0YVdyYXBw ZXJSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCWZkd1R1cCA9IFNlYXJjaFN5c0Nh Y2hlMShGT1JFSUdOREFUQVdSQVBQRVJPSUQsCisJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0ob2Jq ZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZmR3VHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZvcmVpZ24tZGF0YSB3cmFwcGVyIHdpdGggT0lEICV1 IiwKKwkJCSBvYmplY3RJZCk7CisKKwlmZHdGb3JtID0gKEZvcm1fcGdfZm9yZWlnbl9kYXRhX3dy YXBwZXIpIEdFVFNUUlVDVChmZHdUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSBGT1JFSUdOIERBVEEgV1JBUFBFUiAle2lkZW50aXR5fUkiLCAxLAorCQkJCQkJICJpZGVudGl0 eSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoZmR3Rm9ybS0+ZmR3bmFtZSkpOworCisJLyogQWRk IEhBTkRMRVIgY2xhdXNlICovCisJaWYgKCFPaWRJc1ZhbGlkKGZkd0Zvcm0tPmZkd2hhbmRsZXIp KQorCQl0bXAgPSBuZXdfb2JqdHJlZSgiTk8gSEFORExFUiIpOworCWVsc2UKKwl7CisJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJIQU5ETEVSICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCSAicHJv Y2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHdoYW5k bGVyKSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aGFuZGxlcn1zIiwgdG1w KTsKKworCS8qIEFkZCBWQUxJREFUT1IgY2xhdXNlICovCisJaWYgKCFPaWRJc1ZhbGlkKGZkd0Zv cm0tPmZkd3ZhbGlkYXRvcikpCisJCXRtcCA9IG5ld19vYmp0cmVlKCJOTyBWQUxJREFUT1IiKTsK KwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVE9SICV7cHJvY2VkdXJl fUQiLCAxLAorCQkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCSBmZHdGb3JtLT5mZHd2YWxpZGF0b3IpKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiJXt2YWxpZGF0b3J9cyIsIHRtcCk7CisKKwkvKiBBZGQgYW4gT1BUSU9OUyBjbGF1c2Us IGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Z2VuZXJpY19vcHRpb25z fXMiLAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisK KwlSZWxlYXNlU3lzQ2FjaGUoZmR3VHVwKTsKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2 ZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJGZHdT dG10IChBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUikKKyAqCisgKiBHaXZlbiBhbiBGRFcgT0lE IGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisg KiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIEFMVEVSIEZPUkVJR04gREFUQSBXUkFQUEVSICV7aWRlbnRpdHl9SSAle2Zkd19vcHRpb25z OiB9cyAle2dlbmVyaWNfb3B0aW9uc31ECisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJGZHdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRmR3 U3RtdCAqbm9kZSA9IChBbHRlckZkd1N0bXQgKikgcGFyc2V0cmVlOworCUhlYXBUdXBsZQlmZHdU dXA7CisJRm9ybV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlciBmZHdGb3JtOworCVJlbGF0aW9uCXJl bDsKKwlPYmpUcmVlICAgICpyZXQ7CisJTGlzdAkgICAqZmR3X29wdGlvbnMgPSBOSUw7CisJTGlz dENlbGwgICAqY2VsbDsKKworCXJlbCA9IHRhYmxlX29wZW4oRm9yZWlnbkRhdGFXcmFwcGVyUmVs YXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlmZHdUdXAgPSBTZWFyY2hTeXNDYWNoZTEo Rk9SRUlHTkRBVEFXUkFQUEVST0lELAorCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKG9iamVjdElk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZkd1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBmb3JlaWduLWRhdGEgd3JhcHBlciB3aXRoIE9JRCAldSIsCisJ CQkgb2JqZWN0SWQpOworCisJZmR3Rm9ybSA9IChGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVy KSBHRVRTVFJVQ1QoZmR3VHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBGT1JF SUdOIERBVEEgV1JBUFBFUiAle2lkZW50aXR5fUkiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9i alR5cGVTdHJpbmcsIE5hbWVTdHIoZmR3Rm9ybS0+ZmR3bmFtZSkpOworCisJLyoKKwkgKiBJdGVy YXRlIHRocm91Z2ggb3B0aW9ucywgdG8gc2VlIHdoYXQgY2hhbmdlZCwgYnV0IHVzZSBjYXRhbG9n IGFzIGEKKwkgKiBiYXNpcyBmb3IgbmV3IHZhbHVlcy4KKwkgKi8KKwlmb3JlYWNoKGNlbGwsIG5v ZGUtPmZ1bmNfb3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmVsZW07CisJCU9ialRyZWUgICAg KnRtcDsKKworCQllbGVtID0gbGZpcnN0KGNlbGwpOworCisJCWlmIChwZ19zdHJjYXNlY21wKGVs ZW0tPmRlZm5hbWUsICJoYW5kbGVyIikgPT0gMCkKKwkJeworCQkJLyogYWRkIEhBTkRMRVIgY2xh dXNlICovCisJCQlpZiAoIU9pZElzVmFsaWQoZmR3Rm9ybS0+ZmR3aGFuZGxlcikpCisJCQkJdG1w ID0gbmV3X29ianRyZWUoIk5PIEhBTkRMRVIiKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiSEFORExFUiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkJCSAicHJv Y2VkdXJlIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3aGFuZGxlcikpOworCQkJ fQorCQkJZmR3X29wdGlvbnMgPSBsYXBwZW5kKGZkd19vcHRpb25zLCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKwkJfQorCQllbHNlIGlmIChwZ19zdHJjYXNlY21wKGVsZW0tPmRlZm5hbWUsICJ2 YWxpZGF0b3IiKSA9PSAwKQorCQl7CisJCQkvKiBhZGQgVkFMSURBVE9SIGNsYXVzZSAqLworCQkJ aWYgKCFPaWRJc1ZhbGlkKGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikpCisJCQkJdG1wID0gbmV3X29i anRyZWUoIk5PIFZBTElEQVRPUiIpOworCQkJZWxzZQorCQkJeworCQkJCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJWQUxJREFUT1IgJXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJCQkgInByb2NlZHVy ZSIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikpOworCQkJfQor CQkJZmR3X29wdGlvbnMgPSBsYXBwZW5kKGZkd19vcHRpb25zLCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKwkJfQorCX0KKworCS8qIEFkZCBIQU5ETEVSL1ZBTElEQVRPUiBpZiBzcGVjaWZpZWQg Ki8KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7ZmR3X29wdGlvbnM6IH1zIiwgZmR3X29w dGlvbnMpOworCisJLyogQWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIle2dlbmVyaWNfb3B0aW9uc31EIiwKKwkJCQkJCSBkZXBhcnNl X0Zkd09wdGlvbnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOworCisJUmVsZWFzZVN5c0NhY2hlKGZk d1R1cCk7CisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRZUEUgQVMgUkFOR0Ugc3RhdGVtZW50 CisgKgorICogR2l2ZW4gYSBSYW5nZSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBj cmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlv biBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVFlQRSAle2lkZW50 aXR5fUQgQVMgUkFOR0UgKCV7ZGVmaW5pdGlvbjosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0NyZWF0ZVJhbmdlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqZGVmaW5pdGlvbiA9IE5JTDsKKwlSZWxh dGlvbglwZ19yYW5nZTsKKwlIZWFwVHVwbGUJcmFuZ2VUdXA7CisJRm9ybV9wZ19yYW5nZSByYW5n ZUZvcm07CisJU2NhbktleURhdGEga2V5WzFdOworCVN5c1NjYW5EZXNjIHNjYW47CisKKwlwZ19y YW5nZSA9IHRhYmxlX29wZW4oUmFuZ2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwor CVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51bV9wZ19yYW5nZV9ybmd0eXBpZCwKKwkJCQlC VEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShvYmpl Y3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19yYW5nZSwgUmFuZ2VUeXBp ZEluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCBrZXkpOworCisJcmFuZ2VUdXAgPSBz eXN0YWJsZV9nZXRuZXh0KHNjYW4pOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChyYW5nZVR1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByYW5nZSB3aXRoIHR5cGUg T0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlyYW5nZUZvcm0gPSAoRm9ybV9wZ19yYW5nZSkg R0VUU1RSVUNUKHJhbmdlVHVwKTsKKworCS8qIFNVQlRZUEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiU1VCVFlQRSA9ICV7dHlwZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInN1YnR5cGUiLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIHJhbmdlRm9ybS0+cm5n c3VidHlwZSkpOworCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJLyogU1VCVFlQRV9PUENMQVNTICovCisJaWYgKE9pZElzVmFsaWQo cmFuZ2VGb3JtLT5ybmdzdWJvcGMpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlNVQlRZ UEVfT1BDTEFTUyA9ICV7b3BjbGFzc31EIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJvcGNsYXNzIiwKKwkJCQkJCQkgIm9wY2xhc3MiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JDbGFzc1JlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCSByYW5nZUZvcm0tPnJuZ3N1Ym9wYykpOworCQlkZWZpbml0aW9uID0g bGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBD T0xMQVRJT04gKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ2NvbGxhdGlvbikpCisJ eworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ09MTEFUSU9OID0gJXtjb2xsYXRpb259RCIsIDIs CisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29sbGF0aW9uIiwKKwkJCQkJCQkg ImNvbGxhdGlvbiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgcmFuZ2VGb3JtLT5y bmdjb2xsYXRpb24pKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogQ0FOT05JQ0FMICovCisJaWYgKE9pZElzVmFs aWQocmFuZ2VGb3JtLT5ybmdjYW5vbmljYWwpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEo IkNBTk9OSUNBTCA9ICV7Y2Fub25pY2FsfUQiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImNhbm9uaWNhbCIsCisJCQkJCQkJICJjYW5vbmljYWwiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJIHJhbmdlRm9ybS0+cm5nY2Fub25pY2FsKSk7CisJCWRlZmluaXRp b24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKwor CS8qIFNVQlRZUEVfRElGRiAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nc3ViZGlm ZikpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRV9ESUZGID0gJXtzdWJ0eXBl X2RpZmZ9RCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3VidHlwZV9k aWZmIiwKKwkJCQkJCQkgInN1YnR5cGVfZGlmZiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQkgcmFuZ2VGb3JtLT5ybmdzdWJkaWZmKSk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRl ZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCXN5c3RhYmxlX2VuZHNj YW4oc2Nhbik7CisJdGFibGVfY2xvc2UocGdfcmFuZ2UsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJ cmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQgQVMgUkFOR0Ug KCV7ZGVmaW5pdGlvbjosIH1zKSIsIDIsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwg b2JqZWN0SWQpLAorCQkJCQkJICAiZGVmaW5pdGlvbiIsIE9ialR5cGVBcnJheSwgZGVmaW5pdGlv bik7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRW51bVN0bXQuCisgKgorICogR2l2ZW4g YW4gZW51bSBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICoKKyAqIFZlcmJvc2Ug c3ludGF4CisgKiBBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCBBREQgVkFMVUUgJXtpZl9ub3RfZXhp c3RzfXMgJXt2YWx1ZX1MCisgKiAle2FmdGVyX29yX2JlZm9yZX1zICV7bmVpZ2hib3J9TAorICog CU9SCisgKiBBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCBSRU5BTUUgVkFMVUUgJXt2YWx1ZX1MIFRP ICV7bmV3dmFsdWV9TAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRW51bVN0 bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJFbnVtU3RtdCAqbm9k ZSA9IChBbHRlckVudW1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisKKwly ZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVFlQRSAle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJ ICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJaWYg KCFub2RlLT5vbGRWYWwpCisJeworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICJBREQgVkFM VUUiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtpZl9ub3RfZXhpc3RzfXMiLCAi aWZfbm90X2V4aXN0cyIsCisJCQkJCQkJIG5vZGUtPnNraXBJZk5ld1ZhbEV4aXN0cyA/ICJJRiBO T1QgRVhJU1RTIiA6ICIiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3ZhbHVl fUwiLCAidmFsdWUiLCBub2RlLT5uZXdWYWwpOworCisJCWlmIChub2RlLT5uZXdWYWxOZWlnaGJv cikKKwkJeworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXthZnRlcl9vcl9iZWZvcmV9 cyIsCisJCQkJCQkJCSAiYWZ0ZXJfb3JfYmVmb3JlIiwKKwkJCQkJCQkJIG5vZGUtPm5ld1ZhbElz QWZ0ZXIgPyAiQUZURVIiIDogIkJFRk9SRSIpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0 LCAiJXtuZWlnaGJvcn1MIiwgIm5laWdoYm9yIiwKKwkJCQkJCQkJIG5vZGUtPm5ld1ZhbE5laWdo Ym9yKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJS RU5BTUUgVkFMVUUgJXt2YWx1ZX1MIFRPIiwgInZhbHVlIiwKKwkJCQkJCQkgbm9kZS0+b2xkVmFs KTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtuZXd2YWx1ZX1MIiwgIm5ld3ZhbHVl Iiwgbm9kZS0+bmV3VmFsKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJz ZSBhbiBBbHRlckV4dGVuc2lvblN0bXQgKEFMVEVSIEVYVEVOU0lPTiAuLiBVUERBVEUgVE8gVkVS U0lPTikKKyAqCisgKiBHaXZlbiBhbiBleHRlbnNpb24gT0lEIGFuZCBhIHBhcnNlIHRyZWUgdGhh dCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0 ZXIgdHlwZS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgRVhURU5TSU9OICV7aWRl bnRpdHl9SSBVUERBVEUgJXtvcHRpb25zOiB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0FsdGVyRXh0ZW5zaW9uU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sK KwlBbHRlckV4dGVuc2lvblN0bXQgKm5vZGUgPSAoQWx0ZXJFeHRlbnNpb25TdG10ICopIHBhcnNl dHJlZTsKKwlSZWxhdGlvbglwZ19leHRlbnNpb247CisJSGVhcFR1cGxlCWV4dFR1cDsKKwlGb3Jt X3BnX2V4dGVuc2lvbiBleHRGb3JtOworCU9ialRyZWUgICAgKnJldDsKKwlMaXN0CSAgICpsaXN0 ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRGVmRWxlbSAgICAqZF9uZXdfdmVyc2lvbiA9 IE5VTEw7CisKKwlwZ19leHRlbnNpb24gPSB0YWJsZV9vcGVuKEV4dGVuc2lvblJlbGF0aW9uSWQs IEFjY2Vzc1NoYXJlTG9jayk7CisJZXh0VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChw Z19leHRlbnNpb24sIEFudW1fcGdfZXh0ZW5zaW9uX29pZCwgb2JqZWN0SWQpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChleHRUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgZXh0ZW5zaW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJZXh0Rm9ybSA9 IChGb3JtX3BnX2V4dGVuc2lvbikgR0VUU1RSVUNUKGV4dFR1cCk7CisKKwlmb3JlYWNoKGNlbGws IG5vZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmly c3QoY2VsbCk7CisKKwkJaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJuZXdfdmVyc2lvbiIpID09 IDApCisJCXsKKwkJCU9ialRyZWUgICAgKnRtcDsKKworCQkJaWYgKGRfbmV3X3ZlcnNpb24pCisJ CQkJZWxvZyhFUlJPUiwgImNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBvcHRpb25zIGZvciBleHRl bnNpb24gd2l0aCBPSUQgJXUiLAorCQkJCQkgb2JqZWN0SWQpOworCisJCQlkX25ld192ZXJzaW9u ID0gb3B0OworCisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVE8gJXt2ZXJzaW9ufUwiLCAyLAor CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmVyc2lvbiIsCisJCQkJCQkJCSAidmVy c2lvbiIsIE9ialR5cGVTdHJpbmcsIGRlZkdldFN0cmluZyhvcHQpKTsKKwkJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVsc2UKKwkJCWVsb2co RVJST1IsICJ1bnN1cHBvcnRlZCBvcHRpb24gJXMiLCBvcHQtPmRlZm5hbWUpOworCX0KKworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBFWFRFTlNJT04gJXtpZGVudGl0eX1JIFVQREFURSAl e29wdGlvbnM6IH1zIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBOYW1l U3RyKGV4dEZvcm0tPmV4dG5hbWUpLAorCQkJCQkJICJvcHRpb25zIiwgT2JqVHlwZUFycmF5LCBs aXN0KTsKKworCXRhYmxlX2Nsb3NlKHBnX2V4dGVuc2lvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRXh0ZW5zaW9uQ29udGVu dHNTdG10IChBTFRFUiBFWFRFTlNJT04gZXh0IEFERC9EUk9QIG9iamVjdCkKKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogQUxURVIgRVhURU5TSU9OICV7ZXh0aWRlbnRpdHl9SSBBREQvRFJPUCAl e29iamlkZW50aXR5fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckV4dGVu c2lvbkNvbnRlbnRzU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJCQkJ ICAgT2JqZWN0QWRkcmVzcyBvYmplY3RBZGRyZXNzKQoreworCUFsdGVyRXh0ZW5zaW9uQ29udGVu dHNTdG10ICpub2RlID0gKEFsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10ICopIHBhcnNldHJlZTsK KworCUFzc2VydChub2RlLT5hY3Rpb24gPT0gKzEgfHwgbm9kZS0+YWN0aW9uID09IC0xKTsKKwor CXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRVhURU5TSU9OICV7ZXh0aWRlbnRpdHl9SSAl e2V4dG9wdGlvbn1zICV7ZXh0b2JqdHlwZX1zICV7b2JqaWRlbnRpdHl9cyIsIDQsCisJCQkJCQkg ICJleHRpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPmV4dG5hbWUsCisJCQkJCQkgICJl eHRvcHRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBub2RlLT5hY3Rpb24gPT0gKzEgPyAi QUREIiA6ICJEUk9QIiwKKwkJCQkJCSAgImV4dG9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmp0eXBlLCBmYWxzZSksCisJCQkJCQkgICJv YmppZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIGdldE9iamVjdElkZW50aXR5KCZv YmplY3RBZGRyZXNzLCBmYWxzZSkpOworfQorCisvKgorICogRGVwYXJzZSBhbiBDcmVhdGVDYXN0 U3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJzZSB0cmVlIHRoYXQg bW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0 aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBDQVNUICgle3Nv dXJjZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9VCkgJXttZWNoYW5pc219cyAle2NvbnRleHR9cwor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUNhc3RTdG10KE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUNhc3RTdG10ICpub2RlID0gKENyZWF0ZUNh c3RTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbgljYXN0cmVsOworCUhlYXBUdXBsZQljYXN0 VHVwOworCUZvcm1fcGdfY2FzdCBjYXN0Rm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkg ICAqY29udGV4dDsKKworCWNhc3RyZWwgPSB0YWJsZV9vcGVuKENhc3RSZWxhdGlvbklkLCBBY2Nl c3NTaGFyZUxvY2spOworCWNhc3RUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhc3Ry ZWwsIEFudW1fcGdfY2FzdF9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo Y2FzdFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjYXN0IHdp dGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNhc3RGb3JtID0gKEZvcm1fcGdfY2FzdCkgR0VUU1RS VUNUKGNhc3RUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBDQVNUICgle3Nv dXJjZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9VCkiLCAyLAorCQkJCQkJICJzb3VyY2V0eXBlIiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShjYXN0Rm9ybS0+Y2Fz dHNvdXJjZSwgLTEpLAorCQkJCQkJICJ0YXJnZXR0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfdHlwZShjYXN0Rm9ybS0+Y2FzdHRhcmdldCwgLTEpKTsKKworCWlm IChub2RlLT5pbm91dCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXttZWNoYW5pc219 cyIsICJtZWNoYW5pc20iLAorCQkJCQkJCSAiV0lUSCBJTk9VVCIpOworCWVsc2UgaWYgKG5vZGUt PmZ1bmMgPT0gTlVMTCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXttZWNoYW5pc219 cyIsICJtZWNoYW5pc20iLAorCQkJCQkJCSAiV0lUSE9VVCBGVU5DVElPTiIpOworCWVsc2UKKwl7 CisJCU9ialRyZWUgICAgKnRtcF9vYmo7CisJCVN0cmluZ0luZm9EYXRhIGZ1bmM7CisJCUhlYXBU dXBsZQlmdW5jVHVwOworCQlGb3JtX3BnX3Byb2MgZnVuY0Zvcm07CisJCWludAkJCWk7CisKKwkJ ZnVuY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBjYXN0Rm9ybS0+Y2FzdGZ1bmMpOwor CQlmdW5jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChmdW5jVHVwKTsKKworCQlpbml0 U3RyaW5nSW5mbygmZnVuYyk7CisJCWFwcGVuZFN0cmluZ0luZm8oJmZ1bmMsICIlcygiLAorCQkJ CQkJIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShmdW5jRm9y bS0+cHJvbmFtZXNwYWNlKSwKKwkJCQkJCQkJCQkJCQlOYW1lU3RyKGZ1bmNGb3JtLT5wcm9uYW1l KSkpOworCQlmb3IgKGkgPSAwOyBpIDwgZnVuY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCXsKKwkJ CWlmIChpICE9IDApCisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmZ1bmMsICcsJyk7CisKKwkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZ1bmMsCisJCQkJCQkJCSAgIGZvcm1hdF90eXBlX2Jl X3F1YWxpZmllZChmdW5jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldKSk7CisJCX0KKwkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoJmZ1bmMsICcpJyk7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVl X1ZBKCJXSVRIIEZVTkNUSU9OICV7Y2FzdGZ1bmN0aW9ufXMiLCAxLAorCQkJCQkJCQkiY2FzdGZ1 bmN0aW9uIiwgT2JqVHlwZVN0cmluZywgZnVuYy5kYXRhKTsKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiJXttZWNoYW5pc219cyIsIHRtcF9vYmopOworCisJCVJlbGVhc2VTeXNDYWNoZShm dW5jVHVwKTsKKwl9CisKKwlzd2l0Y2ggKG5vZGUtPmNvbnRleHQpCisJeworCQljYXNlIENPRVJD SU9OX0lNUExJQ0lUOgorCQkJY29udGV4dCA9ICJBUyBJTVBMSUNJVCI7CisJCQlicmVhazsKKwkJ Y2FzZSBDT0VSQ0lPTl9BU1NJR05NRU5UOgorCQkJY29udGV4dCA9ICJBUyBBU1NJR05NRU5UIjsK KwkJCWJyZWFrOworCQljYXNlIENPRVJDSU9OX0VYUExJQ0lUOgorCQkJY29udGV4dCA9ICIiOwor CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBjb2VyY2lvbiBj b2RlICVjIiwgbm9kZS0+Y29udGV4dCk7CisJCQlyZXR1cm4gTlVMTDsJCS8qIGtlZXAgY29tcGls ZXIgcXVpZXQgKi8KKwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtjb250ZXh0fXMi LCAiY29udGV4dCIsIGNvbnRleHQpOworCisJdGFibGVfY2xvc2UoY2FzdHJlbCwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFMVEVSIERF RkFVTFQgUFJJVklMRUdFUyBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFM VEVSIERFRkFVTFQgUFJJVklMRUdFUyAle2luX3NjaGVtYX1zICV7Zm9yX3JvbGVzfXMgJXtncmFu dH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJEZWZhdWx0UHJpdmlsZWdl c1N0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9ialRyZWUgICAgKnJldDsKKwlBbHRl ckRlZmF1bHRQcml2aWxlZ2VzU3RtdCAqc3RtdCA9IChBbHRlckRlZmF1bHRQcml2aWxlZ2VzU3Rt dCAqKSBjbWQtPnBhcnNldHJlZTsKKwlMaXN0CSAgICpyb2xlcyA9IE5JTDsKKwlMaXN0CSAgICpz Y2hlbWFzID0gTklMOworCUxpc3QJICAgKmdyYW50ZWVzOworCUxpc3QJICAgKnByaXZzOworCUxp c3RDZWxsICAgKmNlbGw7CisJT2JqVHJlZSAgICAqdG1wOworCU9ialRyZWUgICAgKmdyYW50Owor CWNoYXIJICAgKm9ianR5cGU7CisKKwlyZXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgREVGQVVMVCBQ UklWSUxFR0VTIik7CisKKwkvKiBTY2FuIHRoZSBwYXJzZSBub2RlIHRvIGRpZyBvdXQgdGhlIEZP UiBST0xFIGFuZCBJTiBTQ0hFTUEgY2xhdXNlcyAqLworCWZvcmVhY2goY2VsbCwgc3RtdC0+b3B0 aW9ucykKKwl7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsK KwkJTGlzdENlbGwgICAqY2VsbDI7CisKKwkJQXNzZXJ0KElzQShvcHQsIERlZkVsZW0pKTsKKwkJ QXNzZXJ0KElzQShvcHQtPmFyZywgTGlzdCkpOworCQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwg InJvbGVzIikgPT0gMCkKKwkJeworCQkJZm9yZWFjaChjZWxsMiwgKExpc3QgKikgb3B0LT5hcmcp CisJCQl7CisJCQkJUm9sZVNwZWMgICAqcm9sZXNwZWMgPSBsZmlyc3QoY2VsbDIpOworCQkJCU9i alRyZWUgICAgKm9iaiA9IG5ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhyb2xlc3BlYyk7CisKKwkJ CQlyb2xlcyA9IGxhcHBlbmQocm9sZXMsIG5ld19vYmplY3Rfb2JqZWN0KG9iaikpOworCQkJfQor CQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJzY2hlbWFzIikgPT0gMCkKKwkJ eworCQkJZm9yZWFjaChjZWxsMiwgKExpc3QgKikgb3B0LT5hcmcpCisJCQl7CisJCQkJU3RyaW5n CSAgICp2YWwgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGNlbGwyKTsKKworCQkJCXNjaGVtYXMgPSBs YXBwZW5kKHNjaGVtYXMsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbCh2YWwpKSk7CisJCQl9CisJ CX0KKwl9CisKKwkvKiBBZGQgdGhlIElOIFNDSEVNQSBjbGF1c2UsIGlmIGFueSAqLworCXRtcCA9 IG5ld19vYmp0cmVlKCJJTiBTQ0hFTUEiKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwgIiV7 c2NoZW1hczosIH1JIiwgc2NoZW1hcyk7CisJaWYgKHNjaGVtYXMgPT0gTklMKQorCQlhcHBlbmRf bm90X3ByZXNlbnQodG1wKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2luX3NjaGVt YX1zIiwgdG1wKTsKKworCS8qIEFkZCB0aGUgRk9SIFJPTEUgY2xhdXNlLCBpZiBhbnkgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZSgiRk9SIFJPTEUiKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwg IiV7cm9sZXM6LCB9UiIsIHJvbGVzKTsKKwlpZiAocm9sZXMgPT0gTklMKQorCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2Zvcl9yb2xlc31z IiwgdG1wKTsKKworCS8qCisJICogQWRkIHRoZSBHUkFOVCBzdWJjb21tYW5kCisJICogVmVyYm9z ZSBzeW50YXgKKwkgKiBHUkFOVCAle3ByaXZpbGVnZXM6LCB9cyBPTiAle3RhcmdldH1zIFRPICV7 Z3JhbnRlZXM6LCB9UiAle2dyYW50X29wdGlvbn1zCisJICogb3IKKwkgKiBSRVZPS0UgJXtncmFu dF9vcHRpb259cyAle3ByaXZpbGVnZXM6LCB9cyBPTiAle3RhcmdldH1zIEZST00gJXtncmFudGVl czosIH1SCisJICovCisJaWYgKHN0bXQtPmFjdGlvbi0+aXNfZ3JhbnQpCisJCWdyYW50ID0gbmV3 X29ianRyZWUoIkdSQU5UIik7CisJZWxzZQorCXsKKwkJZ3JhbnQgPSBuZXdfb2JqdHJlZSgiUkVW T0tFIik7CisKKwkJLyogQWRkIHRoZSBHUkFOVCBPUFRJT04gY2xhdXNlIGZvciBSRVZPS0Ugc3Vi Y29tbWFuZCAqLworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiR1JBTlQgT1BUSU9OIEZPUiIsIDEs CisJCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkJIHN0bXQtPmFjdGlvbi0+ Z3JhbnRfb3B0aW9uKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoZ3JhbnQsICIle2dyYW50X29w dGlvbn1zIiwgdG1wKTsKKwl9CisKKwkvKgorCSAqIEFkZCB0aGUgcHJpdmlsZWdlcyBsaXN0LiAg VGhpcyB1c2VzIHRoZSBwYXJzZXIgc3RydWN0LCBhcyBvcHBvc2VkIHRvCisJICogdGhlIEludGVy bmFsR3JhbnQgZm9ybWF0IHVzZWQgYnkgR1JBTlQuICBUaGVyZSBhcmUgZW5vdWdoIG90aGVyCisJ ICogZGlmZmVyZW5jZXMgdGhhdCB0aGlzIGRvZXNuJ3Qgc2VlbSB3b3J0aCBpbXByb3ZpbmcuCisJ ICovCisJaWYgKHN0bXQtPmFjdGlvbi0+cHJpdmlsZWdlcyA9PSBOSUwpCisJCXByaXZzID0gbGlz dF9tYWtlMShuZXdfc3RyaW5nX29iamVjdCgiQUxMIFBSSVZJTEVHRVMiKSk7CisJZWxzZQorCXsK KwkJcHJpdnMgPSBOSUw7CisKKwkJZm9yZWFjaChjZWxsLCBzdG10LT5hY3Rpb24tPnByaXZpbGVn ZXMpCisJCXsKKwkJCUFjY2Vzc1ByaXYgKnByaXYgPSBsZmlyc3QoY2VsbCk7CisKKwkJCUFzc2Vy dChwcml2LT5jb2xzID09IE5JTCk7CisJCQlwcml2cyA9IGxhcHBlbmQocHJpdnMsIG5ld19zdHJp bmdfb2JqZWN0KHByaXYtPnByaXZfbmFtZSkpOworCQl9CisJfQorCisJYXBwZW5kX2FycmF5X29i amVjdChncmFudCwgIiV7cHJpdmlsZWdlczosIH1zIiwgcHJpdnMpOworCisJc3dpdGNoIChjbWQt PmQuZGVmcHJpdnMub2JqdHlwZSkKKwl7CisJCWNhc2UgT0JKRUNUX1RBQkxFOgorCQkJb2JqdHlw ZSA9ICJUQUJMRVMiOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgorCQkJb2Jq dHlwZSA9ICJGVU5DVElPTlMiOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1JPVVRJTkU6CisJ CQlvYmp0eXBlID0gIlJPVVRJTkVTIjsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9TRVFVRU5D RToKKwkJCW9ianR5cGUgPSAiU0VRVUVOQ0VTIjsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9U WVBFOgorCQkJb2JqdHlwZSA9ICJUWVBFUyI7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfU0NI RU1BOgorCQkJb2JqdHlwZSA9ICJTQ0hFTUFTIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ ZWxvZyhFUlJPUiwgImludmFsaWQgT0JKRUNUIHZhbHVlICVkIGZvciBkZWZhdWx0IHByaXZpbGVn ZXMiLCBjbWQtPmQuZGVmcHJpdnMub2JqdHlwZSk7CisJfQorCisJLyogQWRkIHRoZSB0YXJnZXQg b2JqZWN0IHR5cGUgKi8KKwlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudCwgIk9OICV7dGFyZ2V0 fXMiLCAidGFyZ2V0Iiwgb2JqdHlwZSk7CisKKwkvKiBBZGQgdGhlIGdyYW50ZWUgbGlzdCAqLwor CWdyYW50ZWVzID0gTklMOworCWZvcmVhY2goY2VsbCwgc3RtdC0+YWN0aW9uLT5ncmFudGVlcykK Kwl7CisJCVJvbGVTcGVjICAgKnNwZWMgPSAoUm9sZVNwZWMgKikgbGZpcnN0KGNlbGwpOworCQlP YmpUcmVlICAgICpvYmogPSBuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoc3BlYyk7CisKKwkJZ3Jh bnRlZXMgPSBsYXBwZW5kKGdyYW50ZWVzLCBuZXdfb2JqZWN0X29iamVjdChvYmopKTsKKwl9CisK KwlpZiAoc3RtdC0+YWN0aW9uLT5pc19ncmFudCkKKwl7CisJCWFwcGVuZF9hcnJheV9vYmplY3Qo Z3JhbnQsICJUTyAle2dyYW50ZWVzOiwgfVIiLCBncmFudGVlcyk7CisKKwkJLyogQWRkIHRoZSBX SVRIIEdSQU5UIE9QVElPTiBjbGF1c2UgZm9yIEdSQU5UIHN1YmNvbW1hbmQgKi8KKwkJdG1wID0g bmV3X29ianRyZWVfVkEoIldJVEggR1JBTlQgT1BUSU9OIiwgMSwKKwkJCQkJCQkgInByZXNlbnQi LCBPYmpUeXBlQm9vbCwKKwkJCQkJCQkgc3RtdC0+YWN0aW9uLT5ncmFudF9vcHRpb24pOworCQlh cHBlbmRfb2JqZWN0X29iamVjdChncmFudCwgIiV7Z3JhbnRfb3B0aW9ufXMiLCB0bXApOworCX0K KwllbHNlCisJCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnQsICJGUk9NICV7Z3JhbnRlZXM6LCB9 UiIsIGdyYW50ZWVzKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Z3JhbnR9cyIs IGdyYW50KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBDUkVBVEUg RE9NQUlOCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3Jl YXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIERPTUFJTiAl e2lkZW50aXR5fUQgQVMgJXt0eXBlfVQgJXtub3RfbnVsbH1zICV7Y29uc3RyYWludHN9cworICog JXtjb2xsYXRpb259cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZURvbWFp bihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJ T2JqVHJlZSAgICAqdG1wX29iajsKKwlIZWFwVHVwbGUJdHlwVHVwOworCUZvcm1fcGdfdHlwZSB0 eXBGb3JtOworCUxpc3QJICAgKmNvbnN0cmFpbnRzOworCWNoYXIJICAgKmRlZnZhbDsKKworCXR5 cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBkb21haW4gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5 cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBE T01BSU4gJXtpZGVudGl0eX1EIEFTICV7dHlwZX1UICV7bm90X251bGx9cyIsIDMsCisJCQkJCQkg ImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoVHlwZVJlbGF0aW9uSWQsIG9iamVjdElkKSwKKwkJCQkJCSAidHlwZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwYmFzZXR5cGUs CisJCQkJCQkJCQkJCSAgdHlwRm9ybS0+dHlwdHlwbW9kKSwKKwkJCQkJCSAibm90X251bGwiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJIHR5cEZvcm0tPnR5cG5vdG51bGwgPyAiTk9UIE5VTEwiIDog IiIpOworCisJY29uc3RyYWludHMgPSBvYnRhaW5Db25zdHJhaW50cyhOSUwsIEludmFsaWRPaWQs IG9iamVjdElkKTsKKwlpZiAoY29uc3RyYWludHMgPT0gTklMKQorCXsKKwkJdG1wX29iaiA9IG5l d19vYmp0cmVlKCIiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCX0KKwllbHNl CisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtlbGVtZW50czosIH1zIiwgMSwKKwkJCQkJ CQkJImVsZW1lbnRzIiwgT2JqVHlwZUFycmF5LCBjb25zdHJhaW50cyk7CisJYXBwZW5kX29iamVj dF9vYmplY3QocmV0LCAiJXtjb25zdHJhaW50c31zIiwgdG1wX29iaik7CisKKwl0bXBfb2JqID0g bmV3X29ianRyZWUoIkNPTExBVEUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBjb2xs YXRpb24pKQorCXsKKwkJT2JqVHJlZSAgICAqY29sbG5hbWU7CisKKwkJY29sbG5hbWUgPSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ ICAgdHlwRm9ybS0+dHlwY29sbGF0aW9uKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29i aiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXBfb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2NvbGxhdGlvbn1zIiwg dG1wX29iaik7CisKKwlkZWZ2YWwgPSBEb21haW5HZXREZWZhdWx0KHR5cFR1cCwgdHJ1ZSk7CisJ aWYgKGRlZnZhbCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiREVGQVVMVCAle2RlZmF1 bHR9cyIsICJkZWZhdWx0IiwgZGVmdmFsKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOwor CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVGdW5jdGlvblN0bXQg KENSRUFURSBGVU5DVElPTikKKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBh cnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50 aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKgorICog Q1JFQVRFICV7b3JfcmVwbGFjZX1zIEZVTkNUSU9OICV7c2lnbmF0dXJlfXMgUkVUVVJOUyAle3Jl dHVybl90eXBlfXMKKyAqIExBTkdVQUdFICV7dHJhbnNmb3JtX3R5cGV9cyAle2xhbmd1YWdlfUkg JXt3aW5kb3d9cyAle3ZvbGF0aWxpdHl9cworICogJXtwYXJhbGxlbF9zYWZldHl9cyAle2xlYWtw cm9vZn1zICV7c3RyaWN0fXMgJXtzZWN1cml0eV9kZWZpbmVyfXMKKyAqICV7Y29zdH1zICV7cm93 c31zICV7c3VwcG9ydH1zICV7c2V0X29wdGlvbnM6IH1zIEFTICV7b2JqZmlsZX1MLAorICogJXtz eW1ib2x9TAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZ1bmN0aW9uKE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZ1bmN0aW9uU3RtdCAqbm9k ZSA9IChDcmVhdGVGdW5jdGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsK KwlPYmpUcmVlICAgICp0bXBfb2JqOworCURhdHVtCQl0bXBkYXR1bTsKKwljaGFyCSAgICpzb3Vy Y2U7CisJY2hhcgkgICAqcHJvYmluID0gTlVMTDsKKwlMaXN0CSAgICpwYXJhbXM7CisJTGlzdAkg ICAqZGVmYXVsdHM7CisJTGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0CSAgICp0eXBlcyA9IE5J TDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUxpc3RDZWxsICAgKmN1cmRlZjsKKwlMaXN0Q2VsbCAg ICp0YWJsZV9wYXJhbXMgPSBOVUxMOworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZvcm1fcGdfcHJv YyBwcm9jRm9ybTsKKwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlPaWQJCSAgICp0eXBhcnJheTsKKwlP aWQJCSAgICp0cmZ0eXBlczsKKwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdGb3JtOworCWludAkJCWk7 CisJaW50CQkJdHlwbnVtOworCWludAkJCW50eXBlczsKKwlpbnQJCQlwYXJhbWNvdW50ID0gbGlz dF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycyk7CisJYm9vbAkJaXNudWxsOworCWJvb2wJCWlzZnVu Y3Rpb247CisKKwkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgKi8KKwlwcm9jVHVwID0gU2VhcmNo U3lzQ2FjaGUxKFBST0NPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJv Y1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmdW5jdGlvbiB3 aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykg R0VUU1RSVUNUKHByb2NUdXApOworCisJLyogR2V0IHRoZSBjb3JyZXNwb25kaW5nIHBnX2xhbmd1 YWdlIHR1cGxlICovCisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShMQU5HT0lELCBwcm9jRm9y bS0+cHJvbGFuZyk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxhbmdUdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgbGFuZ3VhZ2Ugd2l0aCBPSUQgJXUiLAorCQkJ IHByb2NGb3JtLT5wcm9sYW5nKTsKKwlsYW5nRm9ybSA9IChGb3JtX3BnX2xhbmd1YWdlKSBHRVRT VFJVQ1QobGFuZ1R1cCk7CisKKwkvKgorCSAqIERldGVybWluZSB1c2VmdWwgdmFsdWVzIGZvciBw cm9zcmMgYW5kIHByb2Jpbi4gIFdlIGNvcGUgd2l0aCBwcm9iaW4KKwkgKiBiZWluZyBlaXRoZXIg TlVMTCBvciAiLSIsIGJ1dCBwcm9zcmMgbXVzdCBoYXZlIGEgdmFsaWQgdmFsdWUuCisJICovCisJ dG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkgICBB bnVtX3BnX3Byb2NfcHJvc3JjLCAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9S LCAibnVsbCBwcm9zcmMgaW4gZnVuY3Rpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJc291 cmNlID0gVGV4dERhdHVtR2V0Q1N0cmluZyh0bXBkYXR1bSk7CisKKwkvKiBEZXRlcm1pbmUgYSB1 c2VmdWwgdmFsdWUgZm9yIHByb2JpbiAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBS T0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2JpbiwgJmlzbnVsbCk7 CisJaWYgKCFpc251bGwpCisJeworCQlwcm9iaW4gPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHRtcGRh dHVtKTsKKwkJaWYgKHByb2JpblswXSA9PSAnXDAnIHx8IHN0cmNtcChwcm9iaW4sICItIikgPT0g MCkKKwkJCXByb2JpbiA9IE5VTEw7CisJfQorCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSAle29yX3JlcGxhY2V9cyIsIDEsCisJCQkJCQkgIm9yX3JlcGxhY2UiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIik7CisKKwkvKgorCSAq IFRvIGNvbnN0cnVjdCB0aGUgYXJndW1lbnRzIGFycmF5LCBleHRyYWN0IHRoZSB0eXBlIE9JRHMg ZnJvbSB0aGUKKwkgKiBmdW5jdGlvbidzIHBnX3Byb2MgZW50cnkuICBJZiBwcm9uYXJncyBlcXVh bHMgdGhlIHBhcmFtZXRlciBsaXN0CisJICogbGVuZ3RoLCB0aGVyZSBhcmUgbm8gT1VUIHBhcmFt ZXRlcnMgYW5kIHRodXMgd2UgY2FuIGV4dHJhY3QgdGhlIHR5cGUKKwkgKiBPSUQgZnJvbSBwcm9h cmd0eXBlczsgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gZGVjb2RlIHByb2FsbGFyZ3R5cGVzLCB3aGlj aAorCSAqIGlzIGEgYml0IG1vcmUgaW52b2x2ZWQuCisJICovCisJdHlwYXJyYXkgPSBwYWxsb2Mo cGFyYW1jb3VudCAqIHNpemVvZihPaWQpKTsKKwlpZiAocGFyYW1jb3VudCA+IHByb2NGb3JtLT5w cm9uYXJncykKKwl7CisJCURhdHVtCQlhbGx0eXBlczsKKwkJRGF0dW0JICAgKnZhbHVlczsKKwkJ Ym9vbAkgICAqbnVsbHM7CisJCWludAkJCW5lbGVtczsKKworCQlhbGx0eXBlcyA9IFN5c0NhY2hl R2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYWxs YXJndHlwZXMsICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgIm51bGwg cHJvYWxsYXJndHlwZXMsIG1vcmUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgdGhhbiBhcmdzIGluIGZ1 bmN0aW9uIHdpdGggT0lEICV1IiwKKwkJCQkgb2JqZWN0SWQpOworCQlkZWNvbnN0cnVjdF9hcnJh eShEYXR1bUdldEFycmF5VHlwZVAoYWxsdHlwZXMpLAorCQkJCQkJICBPSURPSUQsIDQsICd0Jywg J2knLAorCQkJCQkJICAmdmFsdWVzLCAmbnVsbHMsICZuZWxlbXMpOworCQlpZiAobmVsZW1zICE9 IHBhcmFtY291bnQpCisJCQllbG9nKEVSUk9SLCAibWlzbWF0Y2hlZCBwcm9hbGxhcmdhdHlwZXMi KTsKKwkJZm9yIChpID0gMDsgaSA8IHBhcmFtY291bnQ7IGkrKykKKwkJCXR5cGFycmF5W2ldID0g dmFsdWVzW2ldOworCX0KKwllbHNlCisJeworCQlmb3IgKGkgPSAwOyBpIDwgcGFyYW1jb3VudDsg aSsrKQorCQkJdHlwYXJyYXlbaV0gPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldOwor CX0KKworCS8qCisJICogSWYgdGhlcmUgYXJlIGFueSBkZWZhdWx0IGV4cHJlc3Npb25zLCB3ZSBy ZWFkIHRoZSBkZXBhcnNlZCBleHByZXNzaW9uCisJICogYXMgYSBsaXN0IHNvIHRoYXQgd2UgY2Fu IGF0dGFjaCB0aGVtIHRvIGVhY2ggYXJndW1lbnQuCisJICovCisJdG1wZGF0dW0gPSBTeXNDYWNo ZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYXJn ZGVmYXVsdHMsICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJZGVmYXVsdHMgPSBGdW5j dGlvbkdldERlZmF1bHRzKERhdHVtR2V0VGV4dFAodG1wZGF0dW0pKTsKKwkJY3VyZGVmID0gbGlz dF9oZWFkKGRlZmF1bHRzKTsKKwl9CisJZWxzZQorCXsKKwkJZGVmYXVsdHMgPSBOSUw7CisJCWN1 cmRlZiA9IE5VTEw7CisJfQorCisJLyoKKwkgKiBOb3cgaXRlcmF0ZSBvdmVyIGVhY2ggcGFyYW1l dGVyIGluIHRoZSBwYXJzZSB0cmVlIHRvIGNyZWF0ZSB0aGUKKwkgKiBwYXJhbWV0ZXJzIGFycmF5 LgorCSAqLworCXBhcmFtcyA9IE5JTDsKKwl0eXBudW0gPSAwOworCWZvcmVhY2goY2VsbCwgbm9k ZS0+cGFyYW1ldGVycykKKwl7CisJCUZ1bmN0aW9uUGFyYW1ldGVyICpwYXJhbSA9IChGdW5jdGlv blBhcmFtZXRlciAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUgICAgKnBhcmFtX29iajsKKwkJ T2JqVHJlZSAgICAqZGVmYXVsdHZhbDsKKwkJT2JqVHJlZSAgICAqbmFtZTsKKworCQkvKgorCQkg KiBBIFBBUkFNX1RBQkxFIHBhcmFtZXRlciBpbmRpY2F0ZXMgdGhlIGVuZCBvZiBpbnB1dCBhcmd1 bWVudHM7IHRoZQorCQkgKiBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgcGFydCBvZiB0aGUgcmV0 dXJuIHR5cGUuICBXZSBpZ25vcmUgdGhlbQorCQkgKiBoZXJlLCBidXQga2VlcCB0cmFjayBvZiB0 aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgbGlzdCBzbyB0aGF0IHdlCisJCSAqIGNhbiBlYXNp bHkgcHJvZHVjZSB0aGUgcmV0dXJuIHR5cGUgYmVsb3cuCisJCSAqLworCQlpZiAocGFyYW0tPm1v ZGUgPT0gRlVOQ19QQVJBTV9UQUJMRSkKKwkJeworCQkJdGFibGVfcGFyYW1zID0gY2VsbDsKKwkJ CWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogVmVyYm9zZSBzeW50YXggZm9yIHBhcmFtYXRlcjog JXttb2RlfXMgJXtuYW1lfXMgJXt0eXBlfVQKKwkJICogJXtkZWZhdWx0fXMKKwkJICovCisJCXBh cmFtX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle21vZGV9cyIsIDEsCisJCQkJCQkJCSAgIm1vZGUi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fT1VU ID8gIk9VVCIgOgorCQkJCQkJCQkgIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fSU5PVVQgPyAi SU5PVVQiIDoKKwkJCQkJCQkJICBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX1ZBUklBRElDID8g IlZBUklBRElDIiA6CisJCQkJCQkJCSAgIklOIik7CisKKwkJLyogT3B0aW9uYWwgd2hvbGVzYWxl IHN1cHByZXNzaW9uIG9mICJuYW1lIiBvY2N1cnMgaGVyZSAqLworCQluYW1lID0gbmV3X29ianRy ZWUoIiIpOworCQlpZiAocGFyYW0tPm5hbWUpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChuYW1l LCAiJXtuYW1lfUkiLCAibmFtZSIsIHBhcmFtLT5uYW1lKTsKKwkJZWxzZQorCQl7CisJCQlhcHBl bmRfbnVsbF9vYmplY3QobmFtZSwgIiV7bmFtZX1JIik7CisJCQlhcHBlbmRfbm90X3ByZXNlbnQo bmFtZSk7CisJCX0KKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbV9vYmosICIle25hbWV9 cyIsIG5hbWUpOworCisJCWRlZmF1bHR2YWwgPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCQlp ZiAoUG9pbnRlcklzVmFsaWQocGFyYW0tPmRlZmV4cHIpKQorCQl7CisJCQljaGFyCSAgICpleHBy OworCisJCQlpZiAoY3VyZGVmID09IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInByb2FyZ2RlZmF1 bHRzIGxpc3QgdG9vIHNob3J0Iik7CisJCQlleHByID0gbGZpcnN0KGN1cmRlZik7CisKKwkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGRlZmF1bHR2YWwsICIle3ZhbHVlfXMiLCAidmFsdWUiLCBleHBy KTsKKwkJCWN1cmRlZiA9IGxuZXh0KGRlZmF1bHRzLCBjdXJkZWYpOworCQl9CisJCWVsc2UKKwkJ CWFwcGVuZF9ub3RfcHJlc2VudChkZWZhdWx0dmFsKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVj dChwYXJhbV9vYmosICIle3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5 cGFycmF5W3R5cG51bSsrXSwgLTEpKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbV9v YmosICIle2RlZmF1bHR9cyIsIGRlZmF1bHR2YWwpOworCisJCXBhcmFtcyA9IGxhcHBlbmQocGFy YW1zLCBuZXdfb2JqZWN0X29iamVjdChwYXJhbV9vYmopKTsKKwl9CisKKwl0bXBfb2JqID0gbmV3 X29ianRyZWVfVkEoIiV7aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJb2JqZWN0SWQpKTsKKworCWFwcGVuZF9mb3JtYXRfc3Ry aW5nKHRtcF9vYmosICIoIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiJXthcmd1 bWVudHM6LCB9cyIsIHBhcmFtcyk7CisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIiki KTsKKworCWlzZnVuY3Rpb24gPSAocHJvY0Zvcm0tPnByb2tpbmQgIT0gUFJPS0lORF9QUk9DRURV UkUpOworCisJaWYgKGlzZnVuY3Rpb24pCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIkZV TkNUSU9OICV7c2lnbmF0dXJlfXMiLCB0bXBfb2JqKTsKKwllbHNlCisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIlBST0NFRFVSRSAle3NpZ25hdHVyZX1zIiwgdG1wX29iaik7CisKKwkvKgor CSAqIEEgcmV0dXJuIHR5cGUgY2FuIGFkb3B0IG9uZSBvZiB0d28gZm9ybXM6IGVpdGhlciBhIFtT RVRPRl0gc29tZV90eXBlLAorCSAqIG9yIGEgVEFCTEUobGlzdC1vZi10eXBlcykuICBXZSBjYW4g dGVsbCB0aGUgc2Vjb25kIGZvcm0gYmVjYXVzZSB3ZSBzYXcKKwkgKiBhIHRhYmxlIHBhcmFtIGFi b3ZlIHdoaWxlIHNjYW5uaW5nIHRoZSBhcmd1bWVudCBsaXN0LgorCSAqLworCWlmICh0YWJsZV9w YXJhbXMgPT0gTlVMTCkKKwl7CisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiIiwgMSwKKwkJ CQkJCQkJInJldHVybl9mb3JtIiwgT2JqVHlwZVN0cmluZywgInBsYWluIik7CisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcF9vYmosICIle3NldG9mfXMiLCAic2V0b2YiLAorCQkJCQkJCSBwcm9j Rm9ybS0+cHJvcmV0c2V0ID8gIlNFVE9GIiA6ICIiKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wX29iaiwgIiV7cmV0dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJv Y0Zvcm0tPnByb3JldHR5cGUsIC0xKSk7CisJfQorCWVsc2UKKwl7CisJCUxpc3QJICAgKnJldHR5 cGVzID0gTklMOworCQlPYmpUcmVlICAgICpwYXJhbV9vYmo7CisKKwkJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJUQUJMRSIsIDEsCisJCQkJCQkJCSJyZXR1cm5fZm9ybSIsIE9ialR5cGVTdHJp bmcsICJ0YWJsZSIpOworCQlmb3IgKDsgdGFibGVfcGFyYW1zICE9IE5VTEw7IHRhYmxlX3BhcmFt cyA9IGxuZXh0KG5vZGUtPnBhcmFtZXRlcnMsIHRhYmxlX3BhcmFtcykpCisJCXsKKwkJCUZ1bmN0 aW9uUGFyYW1ldGVyICpwYXJhbSA9IGxmaXJzdCh0YWJsZV9wYXJhbXMpOworCisJCQlwYXJhbV9v YmogPSBuZXdfb2JqdHJlZV9WQSgiJXtuYW1lfUkgJXt0eXBlfVQiLCAyLAorCQkJCQkJCQkJICAi bmFtZSIsIE9ialR5cGVTdHJpbmcsIHBhcmFtLT5uYW1lLAorCQkJCQkJCQkJICAidHlwZSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGFycmF5W3R5 cG51bSsrXSwgLTEpKTsKKwkJCXJldHR5cGVzID0gbGFwcGVuZChyZXR0eXBlcywgbmV3X29iamVj dF9vYmplY3QocGFyYW1fb2JqKSk7CisJCX0KKworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9v YmosICIoJXtyZXR0eXBlczosIH1zKSIsIHJldHR5cGVzKTsKKwl9CisKKwlpZiAoaXNmdW5jdGlv bikKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiUkVUVVJOUyAle3JldHVybl90eXBlfXMi LCB0bXBfb2JqKTsKKworCS8qIFRSQU5TRk9STSBGT1IgVFlQRSAqLworCXRtcF9vYmogPSBuZXdf b2JqdHJlZSgiVFJBTlNGT1JNIik7CisKKwludHlwZXMgPSBnZXRfZnVuY190cmZ0eXBlcyhwcm9j VHVwLCAmdHJmdHlwZXMpOworCWZvciAoaSA9IDA7IGkgPCBudHlwZXM7IGkrKykKKwl7CisJCXRt cF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRk9SIFRZUEUgJXt0eXBlfVQiLCAxLAorCQkJCQkJCQki dHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHRyZnR5 cGVzW2ldLCAtMSkpOworCQl0eXBlcyA9IGxhcHBlbmQodHlwZXMsIHRtcF9vYmopOworCX0KKwor CWlmICh0eXBlcykKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiJXtmb3JfdHlwZTos IH1zIiwgdHlwZXMpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJ YXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt0cmFuc2Zvcm1fdHlwZX1zIiwgdG1wX29iaik7 CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJMQU5HVUFHRSAle2xhbmd1YWdlfUkiLCAi bGFuZ3VhZ2UiLAorCQkJCQkJIE5hbWVTdHIobGFuZ0Zvcm0tPmxhbm5hbWUpKTsKKworCWlmIChp c2Z1bmN0aW9uKQorCXsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXt3aW5kb3d9cyIs ICJ3aW5kb3ciLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJva2luZCA9PSBQUk9LSU5EX1dJTkRPVyA/ ICJXSU5ET1ciIDogIiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3ZvbGF0aWxp dHl9cyIsICJ2b2xhdGlsaXR5IiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09IFBS T1ZPTEFUSUxFX1ZPTEFUSUxFID8KKwkJCQkJCQkgIlZPTEFUSUxFIiA6CisJCQkJCQkJIHByb2NG b3JtLT5wcm92b2xhdGlsZSA9PSBQUk9WT0xBVElMRV9TVEFCTEUgPworCQkJCQkJCSAiU1RBQkxF IiA6ICJJTU1VVEFCTEUiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3BhcmFs bGVsX3NhZmV0eX1zIiwKKwkJCQkJCQkgInBhcmFsbGVsX3NhZmV0eSIsCisJCQkJCQkJIHByb2NG b3JtLT5wcm9wYXJhbGxlbCA9PSBQUk9QQVJBTExFTF9TQUZFID8KKwkJCQkJCQkgIlBBUkFMTEVM IFNBRkUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3BhcmFsbGVsID09IFBST1BBUkFMTEVMX1JF U1RSSUNURUQgPworCQkJCQkJCSAiUEFSQUxMRUwgUkVTVFJJQ1RFRCIgOiAiUEFSQUxMRUwgVU5T QUZFIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtsZWFrcHJvb2Z9cyIsICJs ZWFrcHJvb2YiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvbGVha3Byb29mID8gIkxFQUtQUk9PRiIg OiAiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7c3RyaWN0fXMiLCAic3RyaWN0 IiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2lzc3RyaWN0ID8KKwkJCQkJCQkgIlJFVFVSTlMgTlVM TCBPTiBOVUxMIElOUFVUIiA6CisJCQkJCQkJICJDQUxMRUQgT04gTlVMTCBJTlBVVCIpOworCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7c2VjdXJpdHlfZGVmaW5lcn1zIiwKKwkJCQkJ CQkgInNlY3VyaXR5X2RlZmluZXIiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvc2VjZGVmID8KKwkJ CQkJCQkgIlNFQ1VSSVRZIERFRklORVIiIDogIlNFQ1VSSVRZIElOVk9LRVIiKTsKKworCQlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle2Nvc3R9cyIsCisJCQkJCQkJIG5ld19vYmp0cmVlX1ZB KCJDT1NUICV7Y29zdH1uIiwgMSwKKwkJCQkJCQkJCQkJImNvc3QiLCBPYmpUeXBlRmxvYXQsCisJ CQkJCQkJCQkJCXByb2NGb3JtLT5wcm9jb3N0KSk7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVl KCJST1dTIik7CisJCWlmIChwcm9jRm9ybS0+cHJvcm93cyA9PSAwKQorCQkJYXBwZW5kX25vdF9w cmVzZW50KHRtcF9vYmopOworCQllbHNlCisJCQlhcHBlbmRfZmxvYXRfb2JqZWN0KHRtcF9vYmos ICIle3Jvd3N9biIsIHByb2NGb3JtLT5wcm9yb3dzKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiJXtyb3dzfXMiLCB0bXBfb2JqKTsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIlNV UFBPUlQgJXtuYW1lfXMiKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9zdXBwb3J0KQorCQl7CisJCQlP aWQJCQlhcmd0eXBlc1tdID0geyBJTlRFUk5BTE9JRCB9OworCisJCQkvKgorCQkJICogV2Ugc2hv dWxkIHF1YWxpZnkgdGhlIHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1lIGlmIGl0IHdvdWxkbid0IGJl CisJCQkgKiByZXNvbHZlZCBieSBsb29rdXAgaW4gdGhlIGN1cnJlbnQgc2VhcmNoIHBhdGguCisJ CQkgKi8KKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle25hbWV9cyIsICJuYW1l IiwKKwkJCQkJCQkJIGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUocHJvY0Zvcm0tPnByb3N1cHBvcnQs IDEsCisJCQkJCQkJCQkJCQkJCU5JTCwgYXJndHlwZXMsCisJCQkJCQkJCQkJCQkJCWZhbHNlLCBO VUxMLAorCQkJCQkJCQkJCQkJCQlFWFBSX0tJTkRfTk9ORSkpOworCQl9CisJCWVsc2UKKwkJCWFw cGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQs ICIle3N1cHBvcnR9cyIsIHRtcF9vYmopOworCX0KKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0 aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwp OworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZXQiKSA9PSAwKQorCQl7CisJCQlW YXJpYWJsZVNldFN0bXQgKnNzdG10ID0gKFZhcmlhYmxlU2V0U3RtdCAqKSBkZWZlbC0+YXJnOwor CQkJY2hhcgkgICAqdmFsdWUgPSBFeHRyYWN0U2V0VmFyaWFibGVBcmdzKHNzdG10KTsKKworCQkJ dG1wX29iaiA9IGRlcGFyc2VfRnVuY3Rpb25TZXQoc3N0bXQtPmtpbmQsIHNzdG10LT5uYW1lLCB2 YWx1ZSk7CisJCQlzZXRzID0gbGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisJCX0KKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle3NldF9vcHRpb25zOiB9 cyIsIHNldHMpOworCisJLyogQWRkIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uICovCisJKHZvaWQp IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLCBBbnVtX3BnX3Byb2NfcHJvc3FsYm9k eSwgJmlzbnVsbCk7CisJaWYgKHByb2NGb3JtLT5wcm9sYW5nID09IFNRTGxhbmd1YWdlSWQgJiYg IWlzbnVsbCkKKwl7CisJCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCQlpbml0U3RyaW5nSW5mbygm YnVmKTsKKwkJcHJpbnRfZnVuY3Rpb25fc3FsYm9keSgmYnVmLCBwcm9jVHVwKTsKKworCQlhcHBl bmRfc3RyaW5nX29iamVjdChyZXQsICIle2RlZmluaXRpb259cyIsICJkZWZpbml0aW9uIiwKKwkJ CQkJCQkgYnVmLmRhdGEpOworCX0KKwllbHNlIGlmIChwcm9iaW4gPT0gTlVMTCkKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QocmV0LCAiQVMgJXtkZWZpbml0aW9ufUwiLCAiZGVmaW5pdGlvbiIsIHNv dXJjZSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiQVMgJXtvYmpm aWxlfUwiLCAib2JqZmlsZSIsIHByb2Jpbik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwg IiwgJXtzeW1ib2x9TCIsICJzeW1ib2wiLCBzb3VyY2UpOworCX0KKworCVJlbGVhc2VTeXNDYWNo ZShsYW5nVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwlyZXR1cm4gcmV0Owor fQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBPUEVSQVRPUiBDTEFTUyBjb21tYW5kLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgJXtpZGVudGl0eX1E ICV7ZGVmYXVsdH1zIEZPUiBUWVBFICV7dHlwZX1UIFVTSU5HCisgKiAle2FtbmFtZX1JICV7b3Bm YW1pbHl9cyBBUyAle2l0ZW1zOiwgfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9D cmVhdGVPcENsYXNzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb3Bjb2lk ID0gY21kLT5kLmNyZWF0ZW9wYy5hZGRyZXNzLm9iamVjdElkOworCUhlYXBUdXBsZQlvcGNUdXA7 CisJSGVhcFR1cGxlCW9wZlR1cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJRm9ybV9w Z19vcGNsYXNzIG9wY0Zvcm07CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9v Ymo7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyogRG9uJ3QgZGVw YXJzZSBTUUwgY29tbWFuZHMgZ2VuZXJhdGVkIHdoaWxlIGNyZWF0aW5nIGV4dGVuc2lvbiAqLwor CWlmIChjbWQtPmluX2V4dGVuc2lvbikKKwkJcmV0dXJuIE5VTEw7CisKKwlvcGNUdXAgPSBTZWFy Y2hTeXNDYWNoZTEoQ0xBT0lELCBPYmplY3RJZEdldERhdHVtKG9wY29pZCkpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChvcGNUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3Igb3BjbGFzcyB3aXRoIE9JRCAldSIsIG9wY29pZCk7CisJb3BjRm9ybSA9IChGb3JtX3Bn X29wY2xhc3MpIEdFVFNUUlVDVChvcGNUdXApOworCisJb3BmVHVwID0gU2VhcmNoU3lzQ2FjaGUx KE9QRkFNSUxZT0lELCBvcGNGb3JtLT5vcGNmYW1pbHkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChvcGZUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0 b3IgZmFtaWx5IHdpdGggT0lEICV1Iiwgb3BjRm9ybS0+b3BjZmFtaWx5KTsKKwlvcGZGb3JtID0g KEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChvcGZUdXApOworCisJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkNSRUFURSBPUEVSQVRPUiBDTEFTUyAle2lkZW50aXR5fUQgJXtkZWZhdWx0fXMgRk9S IFRZUEUgJXt0eXBlfVQgVVNJTkcgJXthbW5hbWV9SSIsIDQsCisJCQkJCQkgImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BjRm9ybS0+ b3BjbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wY0Zvcm0tPm9wY25hbWUpKSwK KwkJCQkJCSAiZGVmYXVsdCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgb3BjRm9ybS0+b3BjZGVm YXVsdCA/ICJERUZBVUxUIiA6ICIiLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGNGb3JtLT5vcGNpbnR5cGUsIC0xKSwKKwkJCQkJ CSAiYW1uYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2FtX25hbWUob3BjRm9ybS0+b3BjbWV0aG9k KSk7CisKKwkvKgorCSAqIEFkZCB0aGUgRkFNSUxZIGNsYXVzZSwgYnV0IGlmIGl0IGhhcyB0aGUg c2FtZSBuYW1lIGFuZCBuYW1lc3BhY2UgYXMgdGhlCisJICogb3BjbGFzcywgdGhlbiBoYXZlIGl0 IGV4cGFuZCB0byBlbXB0eSBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIGEgZmFpbHVyZQorCSAqIGlm IHRoZSBvcGZhbWlseSB3YXMgY3JlYXRlZCBpbnRlcm5hbGx5LgorCSAqLworCXRtcF9vYmogPSBu ZXdfb2JqdHJlZV9WQSgiRkFNSUxZICV7b3BmYW1pbHl9RCIsIDEsCisJCQkJCQkJIm9wZmFtaWx5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9y bS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUp KSk7CisKKwlpZiAoc3RyY21wKE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSksIE5hbWVTdHIob3Bj Rm9ybS0+b3BjbmFtZSkpID09IDAgJiYKKwkJb3BmRm9ybS0+b3BmbmFtZXNwYWNlID09IG9wY0Zv cm0tPm9wY25hbWVzcGFjZSkKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtvcGZhbWlseX1zIiwgdG1wX29iaik7CisKKwkvKgor CSAqIEFkZCB0aGUgaW5pdGlhbCBpdGVtIGxpc3QuICBOb3RlIHdlIGFsd2F5cyBhZGQgdGhlIFNU T1JBR0UgY2xhdXNlLCBldmVuCisJICogd2hlbiBpdCBpcyBpbXBsaWNpdCBpbiB0aGUgb3JpZ2lu YWwgY29tbWFuZC4KKwkgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIlNUT1JBR0UiKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl90eXBlKE9pZElzVmFsaWQob3BjRm9ybS0+b3Bja2V5dHlwZSkgPworCQkJCQkJCQkJ CQkgIG9wY0Zvcm0tPm9wY2tleXR5cGUgOiBvcGNGb3JtLT5vcGNpbnR5cGUsCisJCQkJCQkJCQkJ CSAgLTEpKTsKKwlsaXN0ID0gbGlzdF9tYWtlMShuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7 CisKKwkvKiBBZGQgdGhlIGRlY2xhcmVkIG9wZXJhdG9ycyAqLworCWZvcmVhY2goY2VsbCwgY21k LT5kLmNyZWF0ZW9wYy5vcGVyYXRvcnMpCisJeworCQlPcEZhbWlseU1lbWJlciAqb3BlciA9IGxm aXJzdChjZWxsKTsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk9QRVJBVE9SICV7bnVt fW4gJXtvcGVyYXRvcn1PKCV7bHR5cGV9VCwgJXtydHlwZX1UKSIsIDQsCisJCQkJCQkJCSJudW0i LCBPYmpUeXBlSW50ZWdlciwgb3Blci0+bnVtYmVyLAorCQkJCQkJCQkib3BlcmF0b3IiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JS ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJb3Blci0+b2JqZWN0KSwKKwkJCQkJCQkJImx0eXBl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+bGVm dHR5cGUsIC0xKSwKKwkJCQkJCQkJInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3 X29ianRyZWVfZm9yX3R5cGUob3Blci0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUg Rk9SIFNFQVJDSCAvIEZPUiBPUkRFUiBCWSBjbGF1c2UgKi8KKwkJaWYgKG9wZXItPnNvcnRmYW1p bHkgPT0gSW52YWxpZE9pZCkKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle3B1 cnBvc2V9cyIsICJwdXJwb3NlIiwKKwkJCQkJCQkJICJGT1IgU0VBUkNIIik7CisJCWVsc2UKKwkJ eworCQkJT2JqVHJlZSAgICAqdG1wX29iajI7CisKKwkJCXRtcF9vYmoyID0gbmV3X29ianRyZWUo IkZPUiBPUkRFUiBCWSAle29wZmFtaWx5fUQiKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cF9vYmoyLCAib3BmYW1pbHkiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KE9wZXJhdG9yRmFtaWx5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBvcGVyLT5zb3J0ZmFt aWx5KSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtwdXJwb3NlfXMiLCB0 bXBfb2JqMik7CisJCX0KKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisJfQorCisJLyogQWRkIHRoZSBkZWNsYXJlZCBzdXBwb3J0IGZ1bmN0aW9u cyAqLworCWZvcmVhY2goY2VsbCwgY21kLT5kLmNyZWF0ZW9wYy5wcm9jZWR1cmVzKQorCXsKKwkJ T3BGYW1pbHlNZW1iZXIgKnByb2MgPSBsZmlyc3QoY2VsbCk7CisJCUhlYXBUdXBsZQlwcm9jVHVw OworCQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJCU9pZAkJICAgKnByb2FyZ3R5cGVzOworCQlM aXN0CSAgICphcmdsaXN0ID0gTklMOworCQlpbnQJCQlpOworCisJCXByb2NUdXAgPSBTZWFyY2hT eXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jLT5vYmplY3QpKTsKKwkJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIHByb2NlZHVyZSB3aXRoIE9JRCAldSIsCisJCQkJIHByb2MtPm9iamVjdCk7 CisJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCXRt cF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRlVOQ1RJT04gJXtudW19biAoJXtsdHlwZX1ULCAle3J0 eXBlfVQpICV7ZnVuY3Rpb259RCIsIDQsCisJCQkJCQkJCSJudW0iLCBPYmpUeXBlSW50ZWdlciwg cHJvYy0+bnVtYmVyLAorCQkJCQkJCQkibHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQlu ZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jLT5sZWZ0dHlwZSwgLTEpLAorCQkJCQkJCQkicnR5cGUi LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jLT5yaWdo dHR5cGUsIC0xKSwKKwkJCQkJCQkJImZ1bmN0aW9uIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJ bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkJCSBOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSkpOworCisJCXByb2FyZ3R5cGVzID0g cHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlczsKKwkJZm9yIChpID0gMDsgaSA8IHByb2NGb3Jt LT5wcm9uYXJnczsgaSsrKQorCQl7CisJCQlPYmpUcmVlICAgICphcmc7CisKKwkJCWFyZyA9IG5l d19vYmp0cmVlX2Zvcl90eXBlKHByb2FyZ3R5cGVzW2ldLCAtMSk7CisJCQlhcmdsaXN0ID0gbGFw cGVuZChhcmdsaXN0LCBuZXdfb2JqZWN0X29iamVjdChhcmcpKTsKKwkJfQorCisJCWFwcGVuZF9m b3JtYXRfc3RyaW5nKHRtcF9vYmosICIoIik7CisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29i aiwgIiV7YXJndHlwZXM6LCB9VCIsIGFyZ2xpc3QpOworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0 bXBfb2JqLCAiKSIpOworCisJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKworCQlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJfQorCisJYXBwZW5k X2FycmF5X29iamVjdChyZXQsICJBUyAle2l0ZW1zOiwgfXMiLCBsaXN0KTsKKworCVJlbGVhc2VT eXNDYWNoZShvcGZUdXApOworCVJlbGVhc2VTeXNDYWNoZShvcGNUdXApOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVPcEZhbWlseVN0bXQgKENSRUFURSBPUEVS QVRPUiBGQU1JTFkpCisgKgorICogR2l2ZW4gYSBvcGVyYXRvciBmYW1pbHkgT0lEIGFuZCB0aGUg cGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNl bnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENS RUFURSBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1lfUkKKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVPcEZhbWlseShPaWQgb2JqZWN0SWQsIE5v ZGUgKnBhcnNldHJlZSkKK3sKKwlIZWFwVHVwbGUJb3BmVHVwOworCUhlYXBUdXBsZQlhbVR1cDsK KwlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJRm9ybV9wZ19hbQlhbUZvcm07CisJT2JqVHJl ZSAgICAqcmV0OworCisJb3BmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELCBPYmpl Y3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkg d2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBH RVRTVFJVQ1Qob3BmVHVwKTsKKworCWFtVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmpl Y3RJZEdldERhdHVtKG9wZkZvcm0tPm9wZm1ldGhvZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChhbVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3Mg bWV0aG9kIHdpdGggT0lEICV1IiwKKwkJCSBvcGZGb3JtLT5vcGZtZXRob2QpOworCWFtRm9ybSA9 IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEo IkNSRUFURSBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1lfUkiLCAy LAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0 cihvcGZGb3JtLT5vcGZuYW1lKSksCisJCQkJCQkgImFtbmFtZSIsIE9ialR5cGVTdHJpbmcsIE5h bWVTdHIoYW1Gb3JtLT5hbW5hbWUpKTsKKworCVJlbGVhc2VTeXNDYWNoZShhbVR1cCk7CisJUmVs ZWFzZVN5c0NhY2hlKG9wZlR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQWRkIGNv bW1vbiBjbGF1c2VzIHRvIENyZWF0ZVBvbGljeSBvciBBbHRlclBvbGljeSBkZXBhcnNlIG9iamVj dHMuCisgKi8KK3N0YXRpYyB2b2lkCithZGRfcG9saWN5X2NsYXVzZXMoT2JqVHJlZSAqcmV0LCBP aWQgcG9saWN5T2lkLCBMaXN0ICpyb2xlcywgYm9vbCBkb19xdWFsLAorCQkJCSAgIGJvb2wgZG9f d2l0aF9jaGVjaykKK3sKKwlSZWxhdGlvbglwb2xSZWwgPSB0YWJsZV9vcGVuKFBvbGljeVJlbGF0 aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJSGVhcFR1cGxlCXBvbFR1cCA9IGdldF9jYXRhbG9n X29iamVjdF9ieV9vaWQocG9sUmVsLCBBbnVtX3BnX3BvbGljeV9vaWQsIHBvbGljeU9pZCk7CisJ Rm9ybV9wZ19wb2xpY3kgcG9sRm9ybTsKKworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwb2xUdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcG9saWN5IHdpdGggT0lE ICV1IiwgcG9saWN5T2lkKTsKKworCXBvbEZvcm0gPSAoRm9ybV9wZ19wb2xpY3kpIEdFVFNUUlVD VChwb2xUdXApOworCisJLyogQWRkIHRoZSAiT04gdGFibGUiIGNsYXVzZSAqLworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIk9OICV7dGFibGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgcG9sRm9ybS0+ cG9scmVsaWQpKTsKKworCS8qCisJICogQWRkIHRoZSAiVE8gcm9sZSIgY2xhdXNlLCBpZiBhbnku ICBJbiB0aGUgQ1JFQVRFIGNhc2UsIGl0IGFsd2F5cworCSAqIGNvbnRhaW5zIGF0IGxlYXN0IFBV QkxJQywgYnV0IGluIHRoZSBBTFRFUiBjYXNlIGl0IG1pZ2h0IGJlIGVtcHR5LgorCSAqLworCWlm IChyb2xlcykKKwl7CisJCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJCUxpc3RDZWxsICAgKmNlbGw7 CisKKwkJZm9yZWFjaChjZWxsLCByb2xlcykKKwkJeworCQkJUm9sZVNwZWMgICAqc3BlYyA9IChS b2xlU3BlYyAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJ CQkgICBuZXdfb2JqZWN0X29iamVjdChuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoc3BlYykpKTsK KwkJfQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIlRPICV7cm9sZTosIH1SIiwgbGlzdCk7 CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwkvKiBBZGQgdGhlIFVT SU5HIGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRvX3F1YWwpCisJeworCQlEYXR1bQkJZGVwYXJz ZWQ7CisJCURhdHVtCQlzdG9yZWRleHByOworCQlib29sCQlpc251bGw7CisKKwkJc3RvcmVkZXhw ciA9IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1fcGdfcG9saWN5X3BvbHF1YWwsCisJCQkJCQkJ CSAgUmVsYXRpb25HZXREZXNjcihwb2xSZWwpLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJ CWVsb2coRVJST1IsICJudWxsIHBvbHF1YWwgZXhwcmVzc2lvbiBpbiBwb2xpY3kgJXUiLCBwb2xp Y3lPaWQpOworCQlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsIHN0 b3JlZGV4cHIsIHBvbEZvcm0tPnBvbHJlbGlkKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0 LCAiVVNJTkcgKCV7ZXhwcmVzc2lvbn1zKSIsICJleHByZXNzaW9uIiwKKwkJCQkJCQkgVGV4dERh dHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2Vu dChyZXQpOworCisJLyogQWRkIHRoZSBXSVRIIENIRUNLIGNsYXVzZSwgaWYgYW55ICovCisJaWYg KGRvX3dpdGhfY2hlY2spCisJeworCQlEYXR1bQkJZGVwYXJzZWQ7CisJCURhdHVtCQlzdG9yZWRl eHByOworCQlib29sCQlpc251bGw7CisKKwkJc3RvcmVkZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xU dXAsIEFudW1fcGdfcG9saWN5X3BvbHdpdGhjaGVjaywKKwkJCQkJCQkJICBSZWxhdGlvbkdldERl c2NyKHBvbFJlbCksICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgIm51 bGwgcG9sd2l0aGNoZWNrIGV4cHJlc3Npb24gaW4gcG9saWN5ICV1IiwgcG9saWN5T2lkKTsKKwkJ ZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLCBzdG9yZWRleHByLCBw b2xGb3JtLT5wb2xyZWxpZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIldJVEggQ0hF Q0sgKCV7ZXhwcmVzc2lvbn1zKSIsCisJCQkJCQkJICJleHByZXNzaW9uIiwgVGV4dERhdHVtR2V0 Q1N0cmluZyhkZXBhcnNlZCkpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQp OworCisJcmVsYXRpb25fY2xvc2UocG9sUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisvKgor ICogRGVwYXJzZSBhIENyZWF0ZVBvbGljeVN0bXQgKENSRUFURSBQT0xJQ1kpCisgKgorICogR2l2 ZW4gYSBwb2xpY3kgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVy biBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBQT0xJQ1kgJXtpZGVudGl0eX1JCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlUG9saWN5U3RtdChPaWQgb2JqZWN0SWQsIE5v ZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVQb2xpY3lTdG10ICpub2RlID0gKENyZWF0ZVBvbGlj eVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJDUkVBVEUgUE9MSUNZICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkgImlkZW50aXR5 IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cG9saWN5X25hbWUpOworCisJLyogQWRkIHRoZSByZXN0 IG9mIHRoZSBzdHVmZiAqLworCWFkZF9wb2xpY3lfY2xhdXNlcyhyZXQsIG9iamVjdElkLCBub2Rl LT5yb2xlcywgbm9kZS0+cXVhbCAhPSBOVUxMLAorCQkJCQkgICBub2RlLT53aXRoX2NoZWNrICE9 IE5VTEwpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBBbHRlclBvbGlj eVN0bXQgKEFMVEVSIFBPTElDWSkKKyAqCisgKiBHaXZlbiBhIHBvbGljeSBPSUQgYW5kIHRoZSBw YXJzZSB0cmVlIG9mIHRoZSBBTFRFUiBQT0xJQ1kgY29tbWFuZCwgcmV0dXJuCisgKiBhbiBPYmpU cmVlIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRh eAorICogQUxURVIgUE9MSUNZICV7aWRlbnRpdHl9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0FsdGVyUG9saWN5U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sK KwlBbHRlclBvbGljeVN0bXQgKm5vZGUgPSAoQWx0ZXJQb2xpY3lTdG10ICopIHBhcnNldHJlZTsK KwlPYmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgUE9MSUNZ ICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9k ZS0+cG9saWN5X25hbWUpOworCisJLyogQWRkIHRoZSByZXN0IG9mIHRoZSBzdHVmZiAqLworCWFk ZF9wb2xpY3lfY2xhdXNlcyhyZXQsIG9iamVjdElkLCBub2RlLT5yb2xlcywgbm9kZS0+cXVhbCAh PSBOVUxMLAorCQkJCQkgICBub2RlLT53aXRoX2NoZWNrICE9IE5VTEwpOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTY2hlbWFTdG10LgorICoKKyAqIEdpdmVu IGEgc2NoZW1hIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4g YW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAq IFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFt ZX1JICV7YXV0aG9yaXphdGlvbn1zCisqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVh dGVTY2hlbWFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVNj aGVtYVN0bXQgKm5vZGUgPSAoQ3JlYXRlU2NoZW1hU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJl ZSAgICAqcmV0OworCU9ialRyZWUgICAgKmF1dGg7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi Q1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSIsIDIsCisJCQkJCQkgImlm X25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMg PyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkgbm9kZS0+c2NoZW1hbmFtZSA/IG5vZGUtPnNjaGVtYW5hbWUgOiAiIik7CisKKwlhdXRo ID0gbmV3X29ianRyZWUoIkFVVEhPUklaQVRJT04iKTsKKwlpZiAobm9kZS0+YXV0aHJvbGUpCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGF1dGgsICIle2F1dGhvcml6YXRpb25fcm9sZX1JIiwKKwkJ CQkJCQkgImF1dGhvcml6YXRpb25fcm9sZSIsCisJCQkJCQkJIGdldF9yb2xlc3BlY19uYW1lKG5v ZGUtPmF1dGhyb2xlKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KGF1dGgsICIl e2F1dGhvcml6YXRpb25fcm9sZX1JIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudChhdXRoKTsKKwl9 CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXthdXRob3JpemF0aW9ufXMiLCBhdXRoKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUgb2Yg YSBkb21haW4uCisgKi8KK3N0YXRpYyBjaGFyICoKK0RvbWFpbkdldERlZmF1bHQoSGVhcFR1cGxl IGRvbVR1cCwgYm9vbCBtaXNzaW5nX29rKQoreworCURhdHVtCQlkZWY7CisJTm9kZQkgICAqZGVm dmFsOworCWNoYXIJICAgKmRlZnN0cjsKKwlib29sCQlpc251bGw7CisKKwlkZWYgPSBTeXNDYWNo ZUdldEF0dHIoVFlQRU9JRCwgZG9tVHVwLCBBbnVtX3BnX3R5cGVfdHlwZGVmYXVsdGJpbiwKKwkJ CQkJCSAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwl7CisJCWlmICghbWlzc2luZ19vaykKKwkJ CWVsb2coRVJST1IsICJkb21haW4gXCIlc1wiIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVl IiwKKwkJCQlOYW1lU3RyKCgoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QoZG9tVHVwKSktPnR5cG5h bWUpKTsKKwkJZWxzZQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJZGVmdmFsID0gc3RyaW5nVG9O b2RlKFRleHREYXR1bUdldENTdHJpbmcoZGVmKSk7CisJZGVmc3RyID0gZGVwYXJzZV9leHByZXNz aW9uKGRlZnZhbCwgTlVMTCAvKiBkcGNvbnRleHQ/ICovICwKKwkJCQkJCQkJZmFsc2UsIGZhbHNl KTsKKworCXJldHVybiBkZWZzdHI7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJEb21haW5T dG10LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1E IERST1AgREVGQVVMVAorICogT1IKKyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgU0VUIERF RkFVTFQgJXtkZWZhdWx0fXMKKyAqIE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIERS T1AgTk9UIE5VTEwKKyAqIE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFNFVCBOT1Qg TlVMTAorICogT1IKKyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgQUREIENPTlNUUkFJTlQg JXtjb25zdHJhaW50X25hbWV9cyAle2RlZmluaXRpb259cworICogT1IKKyAqIEFMVEVSIERPTUFJ TiAle2lkZW50aXR5fUQgRFJPUCBDT05TVFJBSU5UIElGIEVYSVNUUyAle2NvbnN0cmFpbnRfbmFt ZX1zICV7Y2FzY2FkZX1zCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBWQUxJ REFURSBDT05TVFJBSU5UICV7Y29uc3RyYWludF9uYW1lfXMKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9BbHRlckRvbWFpblN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUs CisJCQkJCQlPYmplY3RBZGRyZXNzIGNvbnN0cmFpbnRBZGRyKQoreworCUFsdGVyRG9tYWluU3Rt dCAqbm9kZSA9IChBbHRlckRvbWFpblN0bXQgKikgcGFyc2V0cmVlOworCUhlYXBUdXBsZQlkb21U dXA7CisJRm9ybV9wZ190eXBlIGRvbUZvcm07CisJT2JqVHJlZSAgICAqcmV0OworCisJZG9tVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQoZG9tVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGRv bWFpbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlkb21Gb3JtID0gKEZvcm1fcGdfdHlwZSkg R0VUU1RSVUNUKGRvbVR1cCk7CisKKwlzd2l0Y2ggKG5vZGUtPnN1YnR5cGUpCisJeworCQljYXNl ICdUJzoKKwkJCS8qIFNFVCBERUZBVUxUIC8gRFJPUCBERUZBVUxUICovCisJCQlpZiAobm9kZS0+ ZGVmID09IE5VTEwpCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lk ZW50aXR5fUQgRFJPUCBERUZBVUxUIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJkcm9wIGRlZmF1bHQiLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJZWxz ZQorCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFNF VCBERUZBVUxUICV7ZGVmYXVsdH1zIiwgMywKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJzZXQgZGVmYXVsdCIsCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSwKKwkJCQkJCQkJ CSAiZGVmYXVsdCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgRG9tYWluR2V0RGVmYXVsdChk b21UdXAsIGZhbHNlKSk7CisJCQlicmVhazsKKwkJY2FzZSAnTic6CisJCQkvKiBEUk9QIE5PVCBO VUxMICovCisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9 RCBEUk9QIE5PVCBOVUxMIiwgMiwKKwkJCQkJCQkJCSAgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZHJvcCBub3QgbnVsbCIsCisJCQkJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2Us CisJCQkJCQkJCQkJCQkJCQkgICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQlicmVh azsKKwkJY2FzZSAnTyc6CisJCQkvKiBTRVQgTk9UIE5VTEwgKi8KKwkJCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFNFVCBOT1QgTlVMTCIsIDIsCisJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbm90IG51bGwiLAorCQkJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3Jt LT50eXBuYW1lKSkpOworCQkJYnJlYWs7CisJCWNhc2UgJ0MnOgorCQkJLyoKKwkJCSAqIEFERCBD T05TVFJBSU5ULiAgT25seSBDSEVDSyBjb25zdHJhaW50cyBhcmUgc3VwcG9ydGVkIGJ5CisJCQkg KiBkb21haW5zCisJCQkgKi8KKwkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4g JXtpZGVudGl0eX1EIEFERCBDT05TVFJBSU5UICV7Y29uc3RyYWludF9uYW1lfXMgJXtkZWZpbml0 aW9ufXMiLCA0LAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFp bnQiLAorCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJ CSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSksCisJCQkJCQkJCSAiY29uc3RyYWludF9uYW1l IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyYWlu dEFkZHIub2JqZWN0SWQpLAorCQkJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyYWludEFk ZHIub2JqZWN0SWQpKTsKKwkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCS8qIFZBTElEQVRFIENP TlNUUkFJTlQgKi8KKwkJCS8qCisJCQkgKiBQcm9jZXNzIHN1YnR5cGU9c3BlY2lmaWMgb3B0aW9u cy4gVmFsaWRhdGlvbiBhIGNvbnN0cmFpbnQKKwkJCSAqIHJlcXVpcmVzIGl0cyBuYW1lLgorCQkJ ICovCisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBW QUxJREFURSBDT05TVFJBSU5UICV7Y29uc3RyYWludF9uYW1lfXMiLCAzLAorCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAidmFsaWRhdGUgY29uc3RyYWludCIsCisJCQkJCQkJCSAiaWRl bnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0t PnR5cG5hbWUpKSwKKwkJCQkJCQkJICJjb25zdHJhaW50X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBu b2RlLT5uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlICdYJzoKKwkJCXsKKwkJCQlPYmpUcmVlICAg ICp0bXBfb2JqOworCisJCQkJLyogRFJPUCBDT05TVFJBSU5UICovCisJCQkJcmV0ID0gbmV3X29i anRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgRFJPUCBDT05TVFJBSU5UIElGIEVY SVNUUyAle2NvbnN0cmFpbnRfbmFtZX1zIiwgMywKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVT dHJpbmcsICJkcm9wIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5h bWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCQlOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSwKKwkJ CQkJCQkJCQkiY29uc3RyYWludF9uYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmFtZSk7CisK KwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJCQkJCSJw cmVzZW50IiwgT2JqVHlwZUJvb2wsIG5vZGUtPmJlaGF2aW9yID09IERST1BfQ0FTQ0FERSk7CisK KwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2Nhc2NhZGV9cyIsIHRtcF9vYmopOwor CQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzdWJ0 eXBlICVjIiwgbm9kZS0+c3VidHlwZSk7CisJfQorCisJLyogRG9uZSAqLworCVJlbGVhc2VTeXND YWNoZShkb21UdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVh dGVTdGF0c1N0bXQuCisgKgorICogR2l2ZW4gYSBzdGF0aXN0aWNzIE9JRCBhbmQgdGhlIHBhcnNl IHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5n IHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUg U1RBVElTVElDUyAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgT04gJXtleHByOiwgfXMg RlJPTSAle3N0YXRfdGFibGVfaWRlbnRpdHl9RAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0NyZWF0ZVN0YXRpc3RpY3NTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQor eworCUNyZWF0ZVN0YXRzU3RtdCAqbm9kZSA9IChDcmVhdGVTdGF0c1N0bXQgKikgcGFyc2V0cmVl OworCUZvcm1fcGdfc3RhdGlzdGljX2V4dCBzdGF0Zm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisJ SGVhcFR1cGxlCXR1cDsKKwlEYXR1bQkJZGF0dW07CisJYm9vbAkJaXNudWxsOworCUxpc3QJICAg KnN0YXRleHBycyA9IE5JTDsKKworCXR1cCA9IFNlYXJjaFN5c0NhY2hlMShTVEFURVhUT0lELCBP YmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzdGF0aXN0aWMgd2l0aCBP SUQgJXUiLCBvYmplY3RJZCk7CisKKwlzdGF0Zm9ybSA9IChGb3JtX3BnX3N0YXRpc3RpY19leHQp IEdFVFNUUlVDVCh0dXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBTVEFUSVNU SUNTICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCIsIDIsCisJCQkJCQkgImlmX25vdF9l eGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYg Tk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzdGF0Zm9ybS0+c3R4bmFtZXNwYWNlLAorCQkJ CQkJCQkJCQkJICBOYW1lU3RyKHN0YXRmb3JtLT5zdHhuYW1lKSkpOworCisJZGF0dW0gPSBTeXND YWNoZUdldEF0dHIoU1RBVEVYVE9JRCwgdHVwLCBBbnVtX3BnX3N0YXRpc3RpY19leHRfc3R4ZXhw cnMsCisJCQkJCQkJJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQlMaXN0Q2VsbCAgICps YzsKKwkJUmVsYXRpb24Jc3RhdHNyZWw7CisJCUxpc3QJICAgKmNvbnRleHQ7CisJCUxpc3QJICAg KmV4cHJzID0gTklMOworCQljaGFyCSAgICpleHByc1N0cmluZzsKKworCQlzdGF0c3JlbCA9IHJl bGF0aW9uX29wZW4oc3RhdGZvcm0tPnN0eHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCQljb250 ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzdGF0c3Jl bCksCisJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsaWQoc3RhdHNyZWwpKTsKKworCQlleHByc1N0 cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOworCQlleHBycyA9IChMaXN0ICopIHN0 cmluZ1RvTm9kZShleHByc1N0cmluZyk7CisKKwkJZm9yZWFjaChsYywgZXhwcnMpCisJCXsKKwkJ CU5vZGUJICAgKmV4cHIgPSAoTm9kZSAqKSBsZmlyc3QobGMpOworCQkJY2hhcgkgICAqc3RhdGV4 cHI7CisKKwkJCXN0YXRleHByID0gZGVwYXJzZV9leHByZXNzaW9uKGV4cHIsIGNvbnRleHQsIGZh bHNlLCBmYWxzZSk7CisJCQlzdGF0ZXhwcnMgPSBsYXBwZW5kKHN0YXRleHBycywgbmV3X3N0cmlu Z19vYmplY3Qoc3RhdGV4cHIpKTsKKwkJfQorCisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAi T04gJXtleHByOiwgfXMiLCBzdGF0ZXhwcnMpOworCQlwZnJlZShleHByc1N0cmluZyk7CisJCXJl bGF0aW9uX2Nsb3NlKHN0YXRzcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCX0KKworCWRhdHVtID0g U3lzQ2FjaGVHZXRBdHRyKFNUQVRFWFRPSUQsIHR1cCwgQW51bV9wZ19zdGF0aXN0aWNfZXh0X3N0 eGtleXMsCisJCQkJCQkJJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQlpbnQJCQlrZXlu bzsKKwkJY2hhcgkgICAqYXR0bmFtZTsKKwkJTGlzdAkgICAqc3RhdGNvbHMgPSBOSUw7CisJCWlu dDJ2ZWN0b3IgKmluZG9wdGlvbjsKKworCQlpbmRvcHRpb24gPSAoaW50MnZlY3RvciAqKSBEYXR1 bUdldFBvaW50ZXIoZGF0dW0pOworCisJCWZvciAoa2V5bm8gPSAwOyBrZXlubyA8IGluZG9wdGlv bi0+ZGltMTsga2V5bm8rKykKKwkJeworCQkJYXR0bmFtZSA9IGdldF9hdHRuYW1lKHN0YXRmb3Jt LT5zdHhyZWxpZCwgaW5kb3B0aW9uLT52YWx1ZXNba2V5bm9dLAorCQkJCQkJCQkgIGZhbHNlKTsK KwkJCXN0YXRjb2xzID0gbGFwcGVuZChzdGF0Y29scywgbmV3X3N0cmluZ19vYmplY3QoYXR0bmFt ZSkpOworCQl9CisKKwkJaWYgKGluZG9wdGlvbi0+ZGltMSkKKwkJeworCQkJLyogQXBwZW5kIGEg JywnIGlmIHN0YXRleHBycyBpcyBwcmVzZW50IGVsc2UgYXBwZW5kICdPTicgKi8KKwkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7Y29tbWF9cyIsICJjb21tYSIsCisJCQkJCQkJCSBzdGF0 ZXhwcnMgPyAiLCIgOiAiT04iKTsKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtjb2xz OiwgfXMiLCBzdGF0Y29scyk7CisJCX0KKwl9CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQs ICJGUk9NICV7c3RhdF90YWJsZV9pZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUoZ2V0X3JlbF9uYW1lc3BhY2Uoc3RhdGZvcm0tPnN0eHJlbGlkKSwKKwkJCQkJCQkJ CQkJCSAgZ2V0X3JlbF9uYW1lKHN0YXRmb3JtLT5zdHhyZWxpZCkpKTsKKworCVJlbGVhc2VTeXND YWNoZSh0dXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQ3JlYXRl Rm9yZWlnblNlcnZlclN0bXQgKENSRUFURSBTRVJWRVIpCisgKgorICogR2l2ZW4gYSBzZXJ2ZXIg T0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVl CisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIENSRUFURSBTRVJWRVIgJXtpZGVudGl0eX1JICV7dHlwZX1zICV7dmVyc2lvbn1zIEZP UkVJR04gREFUQSBXUkFQUEVSICV7ZmR3fUkKKyAqICV7Z2VuZXJpY19vcHRpb25zfXMKKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGb3JlaWduU2VydmVyU3RtdChPaWQgb2Jq ZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGb3JlaWduU2VydmVyU3RtdCAqbm9k ZSA9IChDcmVhdGVGb3JlaWduU2VydmVyU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAq cmV0OworCU9ialRyZWUgICAgKnRtcDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUg U0VSVkVSICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmlu Zywgbm9kZS0+c2VydmVybmFtZSk7CisKKwkvKiBBZGQgYSBUWVBFIGNsYXVzZSwgaWYgYW55ICov CisJdG1wID0gbmV3X29ianRyZWUoIlRZUEUiKTsKKwlpZiAobm9kZS0+c2VydmVydHlwZSkKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt0eXBlfUwiLCAidHlwZSIsIG5vZGUtPnNlcnZl cnR5cGUpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJYXBwZW5kX29iamVj dF9vYmplY3QocmV0LCAiJXt0eXBlfXMiLCB0bXApOworCisJLyogQWRkIGEgVkVSU0lPTiBjbGF1 c2UsIGlmIGFueSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJWRVJTSU9OIik7CisJaWYgKG5vZGUt PnZlcnNpb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7dmVyc2lvbn1MIiwgInZl cnNpb24iLCBub2RlLT52ZXJzaW9uKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXAp OworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dmVyc2lvbn1zIiwgdG1wKTsKKworCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkZPUkVJR04gREFUQSBXUkFQUEVSICV7ZmR3fUkiLCAi ZmR3IiwKKwkJCQkJCSBub2RlLT5mZHduYW1lKTsKKworCS8qIEFkZCBhbiBPUFRJT05TIGNsYXVz ZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtnZW5lcmljX29wdGlv bnN9cyIsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRm9yZWlnblNlcnZl clN0bXQgKEFMVEVSIFNFUlZFUikKKyAqCisgKiBHaXZlbiBhIHNlcnZlciBPSUQgYW5kIHRoZSBw YXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2Vu dGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIg U0VSVkVSICV7aWRlbnRpdHl9SSAle3ZlcnNpb259cyAle2dlbmVyaWNfb3B0aW9uc31zCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJGb3JlaWduU2VydmVyU3RtdChPaWQgb2Jq ZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckZvcmVpZ25TZXJ2ZXJTdG10ICpub2Rl ID0gKEFsdGVyRm9yZWlnblNlcnZlclN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnRt cDsKKworCS8qIEFkZCBhIFZFUlNJT04gY2xhdXNlLCBpZiBhbnkgKi8KKwl0bXAgPSBuZXdfb2Jq dHJlZSgiVkVSU0lPTiIpOworCWlmIChub2RlLT5oYXNfdmVyc2lvbiAmJiBub2RlLT52ZXJzaW9u KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle3ZlcnNpb259TCIsICJ2ZXJzaW9uIiwg bm9kZS0+dmVyc2lvbik7CisJZWxzZSBpZiAobm9kZS0+aGFzX3ZlcnNpb24pCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcCwgInZlcnNpb24iLCAidmVyc2lvbiIsICJOVUxMIik7CisJZWxzZQor CQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgU0VSVkVSICV7aWRlbnRpdHl9SSAle3ZlcnNpb259cyAle2dlbmVyaWNfb3B0aW9uc31zIiwg MywKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c2VydmVybmFtZSwK KwkJCQkJCSAgInZlcnNpb24iLCBPYmpUeXBlT2JqZWN0LCB0bXAsCisJCQkJCQkgICJnZW5lcmlj X29wdGlvbnMiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBkZXBhcnNlX0Zkd09wdGlvbnMobm9k ZS0+b3B0aW9ucywgTlVMTCkpOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVBMYW5nU3Rt dC4KKyAqCisgKiBHaXZlbiBhIGxhbmd1YWdlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBj cmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlv biBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtvcl9yZXBsYWNl fXMgJXt0cnVzdGVkfXMgTEFOR1VBR0UgJXtpZGVudGl0eX1zIEhBTkRMRVIgJXtoYW5kbGVyfUQK KyAqICV7aW5saW5lfXMgJXt2YWxpZGF0b3J9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0NyZWF0ZUxhbmdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNy ZWF0ZVBMYW5nU3RtdCAqbm9kZSA9IChDcmVhdGVQTGFuZ1N0bXQgKikgcGFyc2V0cmVlOworCU9i alRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJSGVhcFR1cGxlCWxhbmdUdXA7CisJ Rm9ybV9wZ19sYW5ndWFnZSBsYW5nRm9ybTsKKworCWxhbmdUdXAgPSBTZWFyY2hTeXNDYWNoZTEo TEFOR09JRCwKKwkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQobGFuZ1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciBsYW5ndWFnZSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlsYW5nRm9ybSA9IChG b3JtX3BnX2xhbmd1YWdlKSBHRVRTVFJVQ1QobGFuZ1R1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQ1JFQVRFICV7b3JfcmVwbGFjZX1zICV7dHJ1c3RlZH1zIExBTkdVQUdFICV7aWRlbnRp dHl9cyIsIDMsCisJCQkJCQkgIm9yX3JlcGxhY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5v ZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIiwKKwkJCQkJCSAidHJ1c3RlZCIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkgbGFuZ0Zvcm0tPmxhbnBsdHJ1c3RlZCA/ICJUUlVTVEVEIiA6ICIi LAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnBsbmFtZSk7CisKKwlp ZiAobm9kZS0+cGxoYW5kbGVyICE9IE5JTCkKKwl7CisJCS8qIEFkZCB0aGUgSEFORExFUiBjbGF1 c2UgKi8KKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiSEFORExFUiAle2hhbmRsZXJ9RCIs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkgbGFuZ0Zvcm0tPmxhbnBsY2FsbGZvaWQpKTsKKworCQkvKiBBZGQg dGhlIElOTElORSBjbGF1c2UsIGlmIGFueSAqLworCQl0bXAgPSBuZXdfb2JqdHJlZSgiSU5MSU5F Iik7CisJCWlmIChPaWRJc1ZhbGlkKGxhbmdGb3JtLT5sYW5pbmxpbmUpKQorCQl7CisJCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXAsICIle2hhbmRsZXJfbmFtZX1EIiwKKwkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkJIGxhbmdGb3JtLT5sYW5pbmxpbmUpKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90X3By ZXNlbnQodG1wKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpbmxpbmV9cyIsIHRt cCk7CisKKwkJLyogQWRkIHRoZSBWQUxJREFUT1IgY2xhdXNlLCBpZiBhbnkgKi8KKwkJdG1wID0g bmV3X29ianRyZWUoIlZBTElEQVRPUiIpOworCQlpZiAoT2lkSXNWYWxpZChsYW5nRm9ybS0+bGFu dmFsaWRhdG9yKSkKKwkJeworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtoYW5kbGVy X25hbWV9RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBsYW5nRm9ybS0+bGFudmFsaWRhdG9yKSk7CisJ CX0KKwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIiV7dmFsaWRhdG9yfXMiLCB0bXApOworCX0KKworCVJlbGVhc2VTeXNDYWNo ZShsYW5nVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRl Rm9yZWlnblRhYmxlU3RtdCAoQ1JFQVRFIEZPUkVJR04gVEFCTEUpLgorICoKKyAqIEdpdmVuIGEg dGFibGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBP YmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogQ1JF QVRFIEZPUkVJR04gVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1ECisgKiBbKCV7 dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zCisgKiAgfCBQQVJUSVRJT04gT0YgJXtw YXJlbnRfaWRlbnRpdHl9RCAoJXt0eXBlZF90YWJsZV9lbGVtZW50czosIH1zKSAle3BhcnRpdGlv bl9ib3VuZH1zXQorICogU0VSVkVSICV7c2VydmVyfUkgJXtnZW5lcmljX29wdGlvbnN9cworICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZvcmVpZ25UYWJsZVN0bXQoT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCAqc3Rt dCA9IChDcmVhdGVGb3JlaWduVGFibGVTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglyZWxh dGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJTGlzdAkg ICAqZHBjb250ZXh0OworCU9ialRyZWUgICAgKmNyZWF0ZVN0bXQ7CisJT2JqVHJlZSAgICAqdG1w b2JqOworCUxpc3QJICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCWNyZWF0ZVN0bXQgPSBuZXdfb2Jq dHJlZSgiQ1JFQVRFIEZPUkVJR04gVEFCTEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZVN0bXQsICIle2lmX25vdF9leGlzdHN9cyIsICJpZl9ub3RfZXhpc3RzIiwKKwkJCQkJCSBz dG10LT5iYXNlLmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwl0bXBv YmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNw YWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2lkZW50aXR5fUQiLCB0bXBvYmopOwor CisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShyZWxhdGlvbiksCisJCQkJCQkJCQlvYmplY3RJZCk7CisJaWYgKHN0bXQtPmJhc2UucGFydGJv dW5kKQorCXsKKwkJLyogUGFydGl0aW9uZWQgdGFibGUgKi8KKwkJTGlzdAkgICAqcGFyZW50czsK KwkJT2JqRWxlbSAgICAqZWxlbTsKKworCQlwYXJlbnRzID0gZGVwYXJzZV9JbmhSZWxhdGlvbnMo b2JqZWN0SWQpOworCQllbGVtID0gKE9iakVsZW0gKikgbGluaXRpYWwocGFyZW50cyk7CisKKwkJ QXNzZXJ0KGxpc3RfbGVuZ3RoKHBhcmVudHMpID09IDEpOworCisJCWFwcGVuZF9mb3JtYXRfc3Ry aW5nKGNyZWF0ZVN0bXQsICJQQVJUSVRJT04gT0YiKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVTdG10LCAiJXtwYXJlbnRfaWRlbnRpdHl9RCIsCisJCQkJCQkJCQkJIGVsZW0tPnZh bHVlLm9iamVjdCk7CisKKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0 aW9uLCBzdG10LT5iYXNlLnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSAgdHJ1ZSwg LyogdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsJLyogbm90IGNvbXBvc2l0ZSAq LworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJsZWVsdHMsIG9iamVjdElkLCBJ bnZhbGlkT2lkKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCWlmICh0YWJsZWVs dHMpCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle2VsZW1lbnRzOiwgfXMpIiwg dGFibGVlbHRzKTsKKwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcG9iaik7CisKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7dHlwZWRfdGFibGVfZWxlbWVudHN9 cyIsIHRtcG9iaik7CisKKwkJLyoKKwkJICogQWRkIHRoZSBwYXJ0aXRpb25fYm91bmRfc3BlYywg aS5lLiB0aGUgRk9SIFZBTFVFUyBjbGF1c2UuCisJCSAqIEdldCBwZ19jbGFzcy5yZWxwYXJ0Ym91 bmQuIFdlIGNhbm5vdCB1c2UgcGFydGJvdW5kIGluIHRoZSBwYXJzZXRyZWUKKwkJICogZGlyZWN0 bHkgYXMgaXQncyB0aGUgb3JpZ2luYWwgcGFydGJvdW5kIGV4cHJlc3Npb24gd2hpY2ggaGF2ZW4n dAorCQkgKiBiZWVuIHRyYW5zZm9ybWVkLgorCQkgKi8KKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo Y3JlYXRlU3RtdCwgIiV7cGFydGl0aW9uX2JvdW5kfXMiLCAicGFydGl0aW9uX2JvdW5kIiwKKwkJ CQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChvYmplY3RJZCkpOworCisJCS8qIE5vIFBB UlRJVElPTiBCWSBjbGF1c2UgZm9yIENSRUFURSBGT1JFSUdOIFRBQkxFICovCisJfQorCWVsc2UK Kwl7CisJCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyhyZWxhdGlvbiwgc3RtdC0+ YmFzZS50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIGZhbHNlLAkJLyogbm90IHR5 cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7CS8qIG5vdCBjb21wb3NpdGUgKi8KKwkJ dGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxp ZE9pZCk7CisKKwkJaWYgKHRhYmxlZWx0cykKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QoY3JlYXRl U3RtdCwgIigle3RhYmxlX2VsZW1lbnRzOiwgfXMpIiwgdGFibGVlbHRzKTsKKwkJZWxzZQorCQkJ YXBwZW5kX2Zvcm1hdF9zdHJpbmcoY3JlYXRlU3RtdCwgIigpIik7CisKKwkJLyoKKwkJKiBBZGQg aW5oZXJpdGFuY2Ugc3BlY2lmaWNhdGlvbi4gIFdlIGNhbm5vdCBzaW1wbHkgc2NhbiB0aGUgbGlz dCBvZgorCQkqIHBhcmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhhdCBtYXkg bGFjayB0aGUgYWN0dWFsCisJCSogcXVhbGlmaWVkIG5hbWVzIG9mIHRoZSBwYXJlbnQgcmVsYXRp b25zLiAgUmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisJCSogcmUtcmVzb2x2ZSB0aGVtIGZyb20gdGhl IGluZm9ybWF0aW9uIGluIHRoZSBwYXJzZSBub2RlLCBpdCBzZWVtcworCQkqIG1vcmUgYWNjdXJh dGUgYW5kIGNvbnZlbmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgorCQkqLworCQl0 bXBvYmogPSBuZXdfb2JqdHJlZSgiSU5IRVJJVFMiKTsKKwkJaWYgKHN0bXQtPmJhc2UuaW5oUmVs YXRpb25zICE9IE5JTCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7cGFyZW50 czosIH1EKSIsIGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKSk7CisJCWVsc2UKKwkJewor CQkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIigle3BhcmVudHM6LCB9RCkiKTsKKwkJCWFw cGVuZF9ub3RfcHJlc2VudCh0bXBvYmopOworCQl9CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNy ZWF0ZVN0bXQsICIle2luaGVyaXRzfXMiLCB0bXBvYmopOworCX0KKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZVN0bXQsICJTRVJWRVIgJXtzZXJ2ZXJ9SSIsICJzZXJ2ZXIiLCBzdG10LT5z ZXJ2ZXJuYW1lKTsKKworCS8qIGFkZCBhbiBPUFRJT05TIGNsYXVzZSwgaWYgYW55ICovCisJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7Z2VuZXJpY19vcHRpb25zfXMiLAorCQkJ CQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhzdG10LT5vcHRpb25zLCBOVUxMKSk7CisKKwlyZWxhdGlv bl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVTdG10 OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfRGVmaW5lU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwgT2Jq ZWN0QWRkcmVzcyBzZWNvbmRhcnlPYmopCit7CisJRGVmaW5lU3RtdCAqZGVmaW5lID0gKERlZmlu ZVN0bXQgKikgcGFyc2V0cmVlOworCisJc3dpdGNoIChkZWZpbmUtPmtpbmQpCisJeworCQljYXNl IE9CSkVDVF9BR0dSRUdBVEU6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X0FnZ3JlZ2F0 ZShvYmplY3RJZCwgZGVmaW5lKTsKKworCQljYXNlIE9CSkVDVF9DT0xMQVRJT046CisJCQlyZXR1 cm4gZGVwYXJzZV9EZWZpbmVTdG10X0NvbGxhdGlvbihvYmplY3RJZCwgZGVmaW5lLCBzZWNvbmRh cnlPYmopOworCisJCWNhc2UgT0JKRUNUX09QRVJBVE9SOgorCQkJcmV0dXJuIGRlcGFyc2VfRGVm aW5lU3RtdF9PcGVyYXRvcihvYmplY3RJZCwgZGVmaW5lKTsKKworCQljYXNlIE9CSkVDVF9UU0NP TkZJR1VSQVRJT046CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKG9iamVj dElkLCBkZWZpbmUsIHNlY29uZGFyeU9iaik7CisKKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZ OgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25hcnkob2JqZWN0SWQsIGRl ZmluZSk7CisKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZp bmVTdG10X1RTUGFyc2VyKG9iamVjdElkLCBkZWZpbmUpOworCisJCWNhc2UgT0JKRUNUX1RTVEVN UExBVEU6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X1RTVGVtcGxhdGUob2JqZWN0SWQs IGRlZmluZSk7CisKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCXJldHVybiBkZXBhcnNlX0RlZmlu ZVN0bXRfVHlwZShvYmplY3RJZCwgZGVmaW5lKTsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJP UiwgInVuc3VwcG9ydGVkIG9iamVjdCBraW5kOiAlZCIsIGRlZmluZS0+a2luZCk7CisJfQorCisJ cmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBGb3JtIGFuIE9iakVsZW0gdG8gYmUgdXNlZCBhcyBh IHNpbmdsZSBhcmd1bWVudCBpbiBhbiBhZ2dyZWdhdGUgYXJndW1lbnQKKyAqIGxpc3QKKyAqLwor c3RhdGljIE9iakVsZW0gKgorZm9ybV9hZ2dfYXJndW1lbnQoaW50IGlkeCwgY2hhciAqbW9kZXMs IGNoYXIgKipuYW1lcywgT2lkICp0eXBlcykKK3sKKwlPYmpUcmVlCSAgICphcmc7CisKKwlhcmcg PSBuZXdfb2JqdHJlZSgiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChhcmcsICIle21vZGV9 cyIsICJtb2RlIiwKKwkJCQkJCSAobW9kZXMgJiYgbW9kZXNbaWR4XSA9PSAndicpID8gIlZBUklB RElDIiA6ICIiKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChhcmcsICIle25hbWV9cyIsICJuYW1l IiwgbmFtZXMgPyBuYW1lc1tpZHhdIDogIiIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFyZywg IiV7dHlwZX1UIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBlc1tpZHhdLCAtMSkp OworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KGFyZyk7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgRGVmaW5lU3RtdCAoQ1JFQVRFIEFHR1JFR0FURSkKKyAqCisgKiBHaXZlbiBhIGFnZ3JlZ2F0 ZSBPSUQsIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgQ1JFQVRFIGNvbW1hbmQu CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBBR0dSRUdBVEUgJXtpZGVudGl0eX1E KCV7dHlwZXN9cykgKCV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9EZWZpbmVTdG10X0FnZ3JlZ2F0ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkK K3sKKwlIZWFwVHVwbGUgICBhZ2dUdXA7CisJSGVhcFR1cGxlICAgcHJvY1R1cDsKKwlPYmpUcmVl CSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0OworCURhdHVtCQlp bml0dmFsOworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3BnX2FnZ3JlZ2F0ZSBhZ2c7CisJRm9ybV9w Z19wcm9jIHByb2M7CisJRm9ybV9wZ19vcGVyYXRvciBvcDsKKwlIZWFwVHVwbGUJdHVwOworCisJ YWdnVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFHR0ZOT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVj dElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGFnZ1R1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBhZ2dyZWdhdGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7 CisJYWdnID0gKEZvcm1fcGdfYWdncmVnYXRlKSBHRVRTVFJVQ1QoYWdnVHVwKTsKKworCXByb2NU dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShhZ2ctPmFnZ2Zu b2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlIHdpdGggT0lEICV1IiwKKwkJCSBhZ2ct PmFnZ2Zub2lkKTsKKwlwcm9jID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOwor CisJc3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUgQUdHUkVHQVRFIik7CisKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChzdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUocHJvYy0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHByb2Mt PnByb25hbWUpKSk7CisKKwkvKgorCSAqIEFkZCB0aGUgYXJndW1lbnQgbGlzdC4gIFRoZXJlIGFy ZSB0aHJlZSBjYXNlcyB0byBjb25zaWRlcjoKKwkgKgorCSAqIDEuIG5vIGFyZ3VtZW50cywgaW4g d2hpY2ggY2FzZSB0aGUgc2lnbmF0dXJlIGlzICgqKS4KKwkgKgorCSAqIDIuIE5vdCBhbiBvcmRl cmVkLXNldCBhZ2dyZWdhdGUuICBJbiB0aGlzIGNhc2UgdGhlcmUncyBvbmUgb3IgbW9yZQorCSAq IGFyZ3VtZW50cy4KKwkgKgorCSAqIDMuIE9yZGVyZWQtc2V0IGFnZ3JlZ2F0ZXMuIFRoZXNlIGhh dmUgemVybyBvciBtb3JlIGRpcmVjdCBhcmd1bWVudHMsIGFuZAorCSAqIG9uZSBvciBtb3JlIG9y ZGVyZWQgYXJndW1lbnRzLgorCSAqCisJICogV2UgZG9uJ3QgbmVlZCB0byBjb25zaWRlciBkZWZh dWx0IHZhbHVlcyBvciB0YWJsZSBwYXJhbWV0ZXJzLCBhbmQgdGhlCisJICogb25seSBtb2RlIHRo YXQgd2UgbmVlZCB0byBjb25zaWRlciBpcyBWQVJJQURJQy4KKwkgKi8KKworCWlmIChwcm9jLT5w cm9uYXJncyA9PSAwKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChzdG10LCAiKCV7dHlwZXN9cyki LCAidHlwZXMiLCAiKiIpOworCWVsc2UgaWYgKCFBR0dLSU5EX0lTX09SREVSRURfU0VUKGFnZy0+ YWdna2luZCkpCisJeworCQlpbnQJCQlpOworCQlpbnQJCQluYXJnczsKKwkJT2lkCQkgICAqdHlw ZXM7CisJCWNoYXIJICAgKm1vZGVzOworCQljaGFyCSAgKipuYW1lczsKKworCQluYXJncyA9IGdl dF9mdW5jX2FyZ19pbmZvKHByb2NUdXAsICZ0eXBlcywgJm5hbWVzLCAmbW9kZXMpOworCisJCS8q IG9ubHkgZGlyZWN0IGFyZ3VtZW50cyBpbiB0aGlzIGNhc2UgKi8KKwkJbGlzdCA9IE5JTDsKKwkJ Zm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKyspCisJCXsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IGZvcm1fYWdnX2FyZ3VtZW50KGksIG1vZGVzLCBuYW1lcywgdHlwZXMpKTsKKwkJfQorCisJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCIle2RpcmVjdDosIH1zIiwgMSwKKwkJCQkJCQkgImRpcmVjdCIs IE9ialR5cGVBcnJheSwgbGlzdCk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIoJXt0 eXBlc31zKSIsIHRtcCk7CisJfQorCWVsc2UKKwl7CisJCWludAkJCWk7CisJCWludAkJCW5hcmdz OworCQlPaWQJCSAgICp0eXBlczsKKwkJY2hhcgkgICAqbW9kZXM7CisJCWNoYXIJICAqKm5hbWVz OworCisJCW5hcmdzID0gZ2V0X2Z1bmNfYXJnX2luZm8ocHJvY1R1cCwgJnR5cGVzLCAmbmFtZXMs ICZtb2Rlcyk7CisKKwkJLyogZGlyZWN0IGFyZ3VtZW50cyAuLi4gKi8KKwkJbGlzdCA9IE5JTDsK KwkJZm9yIChpID0gMDsgaSA8IGFnZy0+YWdnbnVtZGlyZWN0YXJnczsgaSsrKQorCQl7CisJCQls aXN0ID0gbGFwcGVuZChsaXN0LCBmb3JtX2FnZ19hcmd1bWVudChpLCBtb2RlcywgbmFtZXMsIHR5 cGVzKSk7CisJCX0KKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIiV7ZGlyZWN0OiwgfXMiLCAxLAor CQkJCQkJCSAiZGlyZWN0IiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKKworCQkvKgorCQkgKiAuLi4g YW5kIGFnZ3JlZ2F0ZWQgYXJndW1lbnRzLiAgSWYgdGhlIGxhc3QgZGlyZWN0IGFyZ3VtZW50IGlz CisJCSAqIFZBUklBRElDLCB3ZSBuZWVkIHRvIHJlcGVhdCBpdCBoZXJlIHJhdGhlciB0aGFuIHNl YXJjaGluZyBmb3IgbW9yZQorCQkgKiBhcmd1bWVudHMuICAoU2VlIGFnZ3JfYXJncyBwcm9kdWN0 aW9uIGluIGdyYW0ueSBmb3IgYW4gZXhwbGFuYXRpb24uKQorCQkgKi8KKwkJaWYgKG1vZGVzICYm IG1vZGVzW2FnZy0+YWdnbnVtZGlyZWN0YXJncyAtIDFdID09ICd2JykKKwkJeworCQkJbGlzdCA9 IGxpc3RfbWFrZTEoZm9ybV9hZ2dfYXJndW1lbnQoYWdnLT5hZ2dudW1kaXJlY3RhcmdzIC0gMSwK KwkJCQkJCQkJCQkJCW1vZGVzLCBuYW1lcywgdHlwZXMpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJ CWxpc3QgPSBOSUw7CisJCQlmb3IgKGkgPSBhZ2ctPmFnZ251bWRpcmVjdGFyZ3M7IGkgPCBuYXJn czsgaSsrKQorCQkJeworCQkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIGZvcm1fYWdnX2FyZ3VtZW50 KGksIG1vZGVzLCBuYW1lcywgdHlwZXMpKTsKKwkJCX0KKwkJfQorCQlhcHBlbmRfYXJyYXlfb2Jq ZWN0KHRtcCwgIk9SREVSIEJZICV7YWdncmVnYXRlZDosIH1zIiwgbGlzdCk7CisKKwkJYXBwZW5k X29iamVjdF9vYmplY3Qoc3RtdCwgIigle3R5cGVzfXMpIiwgdG1wKTsKKwl9CisKKwkvKiBBZGQg dGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJbGlzdCA9IE5JTDsKKworCS8qIFNGVU5DICovCisJ dG1wID0gbmV3X29ianRyZWVfVkEoIlNGVU5DPSV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJICJw cm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLCBhZ2ctPmFnZ3RyYW5zZm4pKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFNUWVBFICovCisJdG1w ID0gbmV3X29ianRyZWVfVkEoIlNUWVBFPSV7dHlwZX1UIiwgMSwKKwkJCQkJCSAidHlwZSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUoYWdnLT5hZ2d0cmFuc3R5 cGUsIC0xKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwkvKiBTU1BBQ0UgKi8KKwlpZiAoYWdnLT5hZ2d0cmFuc3NwYWNlICE9IDApCisJeworCQl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1NQQUNFPSV7c3BhY2V9biIsIDEsCisJCQkJCQkJICJzcGFj ZSIsIE9ialR5cGVJbnRlZ2VyLCBhZ2ctPmFnZ3RyYW5zc3BhY2UpOworCX0KKwllbHNlCisJewor CQl0bXAgPSBuZXdfb2JqdHJlZSgiU1NQQUNFPSV7c3BhY2V9biIpOworCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBGSU5BTEZVTkMgKi8KKwlpZiAoT2lkSXNW YWxpZChhZ2ctPmFnZ2ZpbmFsZm4pKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRklOQUxGVU5D PSV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCSBhZ2ctPmFnZ2ZpbmFsZm4pKTsKKwllbHNlCisJeworCQl0bXAgPSBu ZXdfb2JqdHJlZSgiRklOQUxGVU5DPSV7cHJvY2VkdXJlfUQiKTsKKwkJYXBwZW5kX2Jvb2xfb2Jq ZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRklOQUxGVU5DX0VYVFJBICovCisJaWYgKGFn Zy0+YWdnZmluYWxleHRyYSkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkZJTkFMRlVOQ19FWFRS QT0le3ZhbHVlfXMiLCAxLAorCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCAidHJ1ZSIp OworCWVsc2UKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkZJTkFMRlVOQ19FWFRSQT0le3ZhbHVl fXMiLCAxLAorCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCAiZmFsc2UiKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIElOSVRDT05E ICovCisJaW5pdHZhbCA9IFN5c0NhY2hlR2V0QXR0cihBR0dGTk9JRCwgYWdnVHVwLAorCQkJCQkJ CSAgQW51bV9wZ19hZ2dyZWdhdGVfYWdnaW5pdHZhbCwKKwkJCQkJCQkgICZpc251bGwpOworCXRt cCA9IG5ld19vYmp0cmVlKCJJTklUQ09ORD0iKTsKKwlpZiAoIWlzbnVsbCkKKwkJdG1wID0gbmV3 X29ianRyZWVfVkEoIklOSVRDT05EPSV7aW5pdHZhbH1MIiwgMSwKKwkJCQkJCQkgImluaXR2YWwi LCBPYmpUeXBlU3RyaW5nLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGluaXR2YWwpKTsKKwllbHNlCisJ eworCQl0bXAgPSBuZXdfb2JqdHJlZSgiSU5JVENPTkQ9JXtpbml0dmFsfUwiKTsKKwkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTVNGVU5DICovCisJaWYgKE9p ZElzVmFsaWQoYWdnLT5hZ2dtdHJhbnNmbikpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJNU0ZV TkM9JXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwgYWdnLT5hZ2dtdHJhbnNmbikpOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlKCJN U0ZVTkM9JXtwcm9jZWR1cmV9RCIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwl9CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisKKwkvKiBNU1RZUEUgKi8KKwlpZiAoT2lkSXNWYWxpZChhZ2ctPmFnZ210cmFuc3R5 cGUpKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTVNUWVBFPSV7dHlwZX1UIiwgMSwKKwkJCQkJ CQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LCBuZXdfb2JqdHJlZV9mb3JfdHlwZShhZ2ctPmFnZ210 cmFuc3R5cGUsIC0xKSk7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUoIk1TVFlQRT0l e3R5cGV9VCIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsK Kwl9CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkv KiBNU1NQQUNFICovCisJaWYgKGFnZy0+YWdnbXRyYW5zc3BhY2UgIT0gMCkKKwkJdG1wID0gbmV3 X29ianRyZWVfVkEoIk1TU1BBQ0U9JXtzcGFjZX1uIiwgMSwKKwkJCQkJCQkgInNwYWNlIiwgT2Jq VHlwZUludGVnZXIsYWdnLT5hZ2dtdHJhbnNzcGFjZSk7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3 X29ianRyZWUoIk1TU1BBQ0U9JXtzcGFjZX1uIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAs ICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0 X29iamVjdCh0bXApKTsKKworCS8qIE1JTlZGVU5DICovCisJaWYgKE9pZElzVmFsaWQoYWdnLT5h Z2dtaW52dHJhbnNmbikpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJNSU5WRlVOQz0le3R5cGV9 VCIsIDEsCisJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBh Z2ctPmFnZ21pbnZ0cmFuc2ZuKSk7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUoIk1J TlZGVU5DPT0le3R5cGV9VCIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIs IGZhbHNlKTsKKwl9CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisKKwkvKiBNRklOQUxGVU5DICovCisJaWYgKE9pZElzVmFsaWQoYWdnLT5hZ2dtZmluYWxm bikpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJNRklOQUxGVU5DPSV7cHJvY2VkdXJlfUQiLCAx LAorCQkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBh Z2ctPmFnZ21maW5hbGZuKSk7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUoIk1GSU5B TEZVTkM9JXtwcm9jZWR1cmV9RCIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwl9CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisKKwkvKiBNRklOQUxGVU5DX0VYVFJBICovCisJaWYgKGFnZy0+YWdnbWZpbmFsZXh0 cmEpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJNRklOQUxGVU5DX0VYVFJBPSV7dmFsdWV9cyIs IDEsCisJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsICJ0cnVlIik7CisJZWxzZQorCXsK KwkJdG1wID0gbmV3X29ianRyZWUoIk1GSU5BTEZVTkNfRVhUUkE9JXt2YWx1ZX1zIik7CisJCWFw cGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIE1JTklUQ09ORCAqLwor CWluaXR2YWwgPSBTeXNDYWNoZUdldEF0dHIoQUdHRk5PSUQsIGFnZ1R1cCwKKwkJCQkJCQkgIEFu dW1fcGdfYWdncmVnYXRlX2FnZ21pbml0dmFsLAorCQkJCQkJCSAgJmlzbnVsbCk7CisJaWYgKCFp c251bGwpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJNSU5JVENPTkQ9JXtpbml0dmFsfUwiLCAx LAorCQkJCQkJCSAiaW5pdHZhbCIsIE9ialR5cGVTdHJpbmcsIFRleHREYXR1bUdldENTdHJpbmco aW5pdHZhbCkpOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlKCJNSU5JVENPTkQ9JXtp bml0dmFsfUwiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7 CisJfQorCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJ LyogSFlQT1RIRVRJQ0FMICovCisJaWYgKGFnZy0+YWdna2luZCA9PSBBR0dLSU5EX0hZUE9USEVU SUNBTCkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkhZUE9USEVUSUNBTD0le3ZhbHVlfXMiLCAx LAorCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCAidHJ1ZSIpOworCWVsc2UKKwl7CisJ CXRtcCA9IG5ld19vYmp0cmVlKCJIWVBPVEhFVElDQUw9JXt2YWx1ZX1zIik7CisJCWFwcGVuZF9i b29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFNPUlRPUCAqLworCWlmIChPaWRJ c1ZhbGlkKGFnZy0+YWdnc29ydG9wKSkKKwl7CisJCXR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVS T0lELCBPYmplY3RJZEdldERhdHVtKGFnZy0+YWdnc29ydG9wKSk7CisJCWlmICghSGVhcFR1cGxl SXNWYWxpZCh0dXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9w ZXJhdG9yIHdpdGggT0lEICV1IiwgYWdnLT5hZ2dzb3J0b3ApOworCQlvcCA9IChGb3JtX3BnX29w ZXJhdG9yKSBHRVRTVFJVQ1QodHVwKTsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlNPUlRPUD0l e29wZXJhdG9yfUQiLCAxLAorCQkJCQkJCSAib3BlcmF0b3IiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3AtPm9wcm5hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCQkgIE5hbWVTdHIob3AtPm9wcm5hbWUpKSk7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHR1cCk7 CisJfQorCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlKCJTT1JUT1A9JXtvcGVyYXRvcn1E Iik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIERvbmUg d2l0aCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQs ICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOwor CVJlbGVhc2VTeXNDYWNoZShhZ2dUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRFIENPTExBVElPTikKKyAqCisgKiBHaXZlbiBhIGNv bGxhdGlvbiBPSUQsIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgQ1JFQVRFIGNv bW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBDT0xMQVRJT04gJXtpZGVu dGl0eX1EIEZST00gJXtmcm9tX2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X0NvbGxhdGlvbihPaWQgb2JqZWN0SWQsIERl ZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJCQkgT2JqZWN0QWRkcmVzcyBmcm9tQ29sbGlkKQorewor CU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVwbGUJY29sVHVwOworCUZvcm1fcGdfY29sbGF0aW9u IGNvbEZvcm07CisJRGF0dW0JCWRhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlPYmpUcmVlICAgICp0 bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKworCWNvbFR1cCA9IFNlYXJjaFN5c0NhY2hlMShD T0xMT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGNvbFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb2xs YXRpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJY29sRm9ybSA9IChGb3JtX3BnX2NvbGxh dGlvbikgR0VUU1RSVUNUKGNvbFR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRF IENPTExBVElPTiAle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGNvbEZvcm0tPmNvbGxuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIoY29sRm9ybS0+Y29sbG5hbWUpKSk7CisKKwlp ZiAoT2lkSXNWYWxpZChmcm9tQ29sbGlkLm9iamVjdElkKSkKKwl7CisJCU9pZAkJCWNvbGxpZCA9 IGZyb21Db2xsaWQub2JqZWN0SWQ7CisJCUhlYXBUdXBsZQl0cDsKKwkJRm9ybV9wZ19jb2xsYXRp b24gZnJvbUNvbEZvcm07CisKKwkJLyoKKwkJICogQ1JFQVRFIENPTExBVElPTiAle2lkZW50aXR5 fUQgRlJPTSBleGlzdGluZ19jb2xsYXRpb247CisJCSAqLworCQl0cCA9IFNlYXJjaFN5c0NhY2hl MShDT0xMT0lELCBPYmplY3RJZEdldERhdHVtKGNvbGxpZCkpOworCQlpZiAoIUhlYXBUdXBsZUlz VmFsaWQodHApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbGxh dGlvbiB3aXRoIE9JRCAldSIsIGNvbGxpZCk7CisKKwkJZnJvbUNvbEZvcm0gPSAoRm9ybV9wZ19j b2xsYXRpb24pIEdFVFNUUlVDVCh0cCk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAi RlJPTSAle2Zyb21faWRlbnRpdHl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShmcm9tQ29sRm9ybS0+Y29sbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZnJv bUNvbEZvcm0tPmNvbGxuYW1lKSkpOworCisJCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJCVJlbGVh c2VTeXNDYWNoZShjb2xUdXApOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIExPQ0FMRSAqLwor CWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIGNvbFR1cCwgQW51bV9wZ19jb2xsYXRp b25fY29sbGljdWxvY2FsZSwgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiTE9DQUxFPSV7bG9jYWxlfUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgImxvY2FsZSIsCisJCQkJCQkJICJsb2NhbGUiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKSkpOwor CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkv KiBMQ19DT0xMQVRFICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgY29sVHVw LCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsY29sbGF0ZSwgJmlzbnVsbCk7CisJaWYgKCFpc251bGwp CisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTENfQ09MTEFURT0le2NvbGxhdGV9TCIsIDIs CisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29sbGF0ZSIsCisJCQkJCQkJICJj b2xsYXRlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgVGV4dERhdHVt R2V0Q1N0cmluZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisJfQorCisJLyogTENfQ1RZUEUgKi8KKwlkYXR1bSA9IFN5c0NhY2hlR2V0 QXR0cihDT0xMT0lELCBjb2xUdXAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGxjdHlwZSwgJmlzbnVs bCk7CisJaWYgKCFpc251bGwpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTENfQ1RZUEU9 JXtjdHlwZX1MIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjdHlwZSIs CisJCQkJCQkJICJjdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIHBzcHJpbnRmKCIlcyIs IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIFBST1ZJREVSICovCisJaWYgKGNvbEZv cm0tPmNvbGxwcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCXsKKwkJdG1wID0gbmV3X29i anRyZWVfVkEoIlBST1ZJREVSPSV7cHJvdmlkZXJ9TCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAicHJvdmlkZXIiLAorCQkJCQkJCSAicHJvdmlkZXIiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCAiaWN1IikpOworCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisJZWxzZSBpZiAoY29sRm9ybS0+Y29s bHByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVf VkEoIlBST1ZJREVSPSV7cHJvdmlkZXJ9TCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAicHJvdmlkZXIiLAorCQkJCQkJCSAicHJvdmlkZXIiLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJCSBwc3ByaW50ZigiJXMiLCAibGliYyIpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogREVURVJNSU5JU1RJQyAqLworCWlm IChjb2xGb3JtLT5jb2xsaXNkZXRlcm1pbmlzdGljKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVf VkEoIkRFVEVSTUlOSVNUSUM9JXtkZXRlcm1pbmlzdGljfUwiLCAyLAorCQkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgImRldGVybWluaXN0aWMiLAorCQkJCQkJCSAiZGV0ZXJtaW5pc3Rp YyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsICJ0cnVlIikpOworCQls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBW RVJTSU9OICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgY29sVHVwLCBBbnVt X3BnX2NvbGxhdGlvbl9jb2xsdmVyc2lvbiwgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJewor CQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkVSU0lPTj0le3ZlcnNpb259TCIsIDIsCisJCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidmVyc2lvbiIsCisJCQkJCQkJICJ2ZXJzaW9uIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgVGV4dERhdHVtR2V0Q1N0cmlu ZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIoJXtlbGVtczosIH1zKSIsIGxp c3QpOworCVJlbGVhc2VTeXNDYWNoZShjb2xUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoK KyAqIERlcGFyc2UgYSBEZWZpbmVTdG10IChDUkVBVEUgT1BFUkFUT1IpCisgKgorICogR2l2ZW4g YSBvcGVyYXRvciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJu IGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIE9QRVJBVE9SICV7aWRlbnRpdHl9TyAoJXtlbGVt czosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0 b3IoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlCW9wclR1 cDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlMaXN0CSAgICps aXN0ID0gTklMOworCUZvcm1fcGdfb3BlcmF0b3Igb3ByRm9ybTsKKworCW9wclR1cCA9IFNlYXJj aFN5c0NhY2hlMShPUEVST0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKG9wclR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciBvcGVyYXRvciB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcHJGb3JtID0gKEZv cm1fcGdfb3BlcmF0b3IpIEdFVFNUUlVDVChvcHJUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVf VkEoIkNSRUFURSBPUEVSQVRPUiAle2lkZW50aXR5fU8iLCAxLAorCQkJCQkJICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0t Pm9wcm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihvcHJGb3JtLT5vcHJuYW1lKSkp OworCisJLyogUFJPQ0VEVVJFICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJQUk9DRURV UkU9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJw cm9jZWR1cmUiLAorCQkJCQkJCSJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQlvcHJGb3JtLT5vcHJjb2RlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCisJLyogTEVGVEFSRyAqLworCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiTEVGVEFSRz0iLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi bGVmdGFyZyIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKQorCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfdHlwZShvcHJGb3JtLT5vcHJsZWZ0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVz ZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKworCS8qIFJJR0hUQVJHICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJS SUdIVEFSRz0iLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmlnaHRhcmci KTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyaWdodCkpCisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcF9vYmosICIle3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBl KG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRt cF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmop KTsKKworCS8qIENPTU1VVEFUT1IgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkNPTU1V VEFUT1I9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbW11dGF0b3Ii KTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJjb20pKQorCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXBfb2JqLCAiJXtvcGVyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3ByY29t KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJLyogTkVHQVRPUiAqLwor CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiTkVHQVRPUj0iLCAxLAorCQkJCQkJCSJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAibmVnYXRvciIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9w cm5lZ2F0ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle29wZXJ9RCIsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJuZWdhdGUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3Rf cHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisKKwkvKiBSRVNUUklDVCAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9W QSgiUkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3Ry aWN0Iik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkpCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRtcF9vYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJG b3JtLT5vcHJyZXN0KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJLyog Sk9JTiAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiSk9JTj0iLCAxLAorCQkJCQkJCSJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiam9pbiIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0t Pm9wcmpvaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtwcm9jZWR1cmV9 RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3Byam9pbikpOworCWVsc2UKKwkJYXBwZW5k X25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKworCS8qIEhBU0hFUyAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJl ZV9WQSgiSEFTSEVTIiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImhhc2hl cyIpOworCWlmICghb3ByRm9ybS0+b3ByY2FuaGFzaCkKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRt cF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmop KTsKKworCS8qIE1FUkdFUyAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiTUVSR0VTIiwg MSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1lcmdlcyIpOworCWlmICghb3By Rm9ybS0+b3ByY2FubWVyZ2UpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwlhcHBlbmRf YXJyYXlfb2JqZWN0KHJldCwgIigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lz Q2FjaGUob3ByVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JF QVRFIFRZUEUgc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVFlQ RSAle2lkZW50aXR5fUQgJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0RlZmluZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sK KwlIZWFwVHVwbGUJdHlwVHVwOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7 CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwljaGFyCSAgICpzdHI7CisJRGF0dW0JCWRmbHQ7CisJ Ym9vbAkJaXNudWxsOworCUZvcm1fcGdfdHlwZSB0eXBGb3JtOworCisJdHlwVHVwID0gU2VhcmNo U3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3Bn X3R5cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSBUWVBFICV7aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHlwRm9ybS0+dHlwbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHR5cEZvcm0tPnR5cG5hbWUpKSk7CisKKwkvKiBTaGVs bCB0eXBlcy4gKi8KKwlpZiAoIXR5cEZvcm0tPnR5cGlzZGVmaW5lZCkKKwl7CisJCVJlbGVhc2VT eXNDYWNoZSh0eXBUdXApOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEFkZCB0aGUgZGVmaW5p dGlvbiBjbGF1c2UgKi8KKwkvKiBJTlBVVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIoSU5Q VVQ9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJp bnB1dCIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ IHR5cEZvcm0tPnR5cGlucHV0KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwkvKiBPVVRQVVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiT1VU UFVUPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi b3V0cHV0IiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkgdHlwRm9ybS0+dHlwb3V0cHV0KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisKKwkvKiBSRUNFSVZFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEo IlJFQ0VJVkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlY2VpdmUi KTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXByZWNlaXZlKSkKKwkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+ dHlwcmVjZWl2ZSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTRU5EICovCisJ dG1wID0gbmV3X29ianRyZWVfVkEoIlNFTkQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgInNlbmQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBzZW5kKSkKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkgdHlwRm9ybS0+dHlwc2VuZCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBU WVBNT0RfSU4gKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX0lOPSIsIDEsCisJCQkJ CQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2RfaW4iKTsKKwlpZiAoT2lkSXNWYWxp ZCh0eXBGb3JtLT50eXBtb2RpbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJv Y2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZGluKSk7CisJZWxzZQor CQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIFRZUE1PRF9PVVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiVFlQTU9EX09VVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi dHlwbW9kX291dCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZG91dCkpCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ IHR5cEZvcm0tPnR5cG1vZG91dCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBB TkFMWVpFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkFOQUxZWkU9IiwgMSwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImFuYWx5emUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBG b3JtLT50eXBhbmFseXplKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1 cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwYW5hbHl6ZSkpOworCWVsc2UKKwkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisKKwkvKiBJTlRFUk5BTExFTkdUSCAqLworCWlmICh0eXBGb3JtLT50 eXBsZW4gPT0gLTEpCisJCXRtcCA9IG5ld19vYmp0cmVlKCJJTlRFUk5BTExFTkdUSD1WQVJJQUJM RSIpOworCWVsc2UKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIklOVEVSTkFMTEVOR1RIPSV7dHlw bGVufW4iLCAxLAorCQkJCQkJCSAidHlwbGVuIiwgT2JqVHlwZUludGVnZXIsIHR5cEZvcm0tPnR5 cGxlbik7CisKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KworCS8qIFBBU1NFREJZVkFMVUUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFTU0VEQllW QUxVRSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwYXNzZWRieXZhbHVl Iik7CisJaWYgKCF0eXBGb3JtLT50eXBieXZhbCkKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBY WFggaXQncyBvZGQgdG8gcmVwcmVzZW50IGFsaWdubWVudCB3aXRoIHNjaGVtYS1xdWFsaWZpZWQg dHlwZSBuYW1lcyAqLworCXN3aXRjaCAodHlwRm9ybS0+dHlwYWxpZ24pCisJeworCQljYXNlICdk JzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmZsb2F0OCI7CisJCQlicmVhazsKKwkJY2FzZSAnaSc6 CisJCQlzdHIgPSAicGdfY2F0YWxvZy5pbnQ0IjsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJ CXN0ciA9ICJwZ19jYXRhbG9nLmludDIiOworCQkJYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkJc3Ry ID0gInBnX2NhdGFsb2cuYnBjaGFyIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhF UlJPUiwgImludmFsaWQgYWxpZ25tZW50ICVjIiwgdHlwRm9ybS0+dHlwYWxpZ24pOworCX0KKwor CS8qIEFMSUdOTUVOVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTElHTk1FTlQ9JXthbGln bn1zIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImFsaWdubWVudCIsCisJ CQkJCQkgImFsaWduIiwgT2JqVHlwZVN0cmluZywgc3RyKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFNUT1JBR0UgKi8KKwl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiU1RPUkFHRT0le3N0b3JhZ2V9cyIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJzdG9yYWdlIiwKKwkJCQkJCSAic3RvcmFnZSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkgZ2V0X3R5cGVfc3RvcmFnZSh0eXBGb3JtLT50eXBzdG9yYWdlKSk7CisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBDQVRFR09SWSAq LworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDQVRFR09SWT0le2NhdGVnb3J5fXMiLCAyLAorCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY2F0ZWdvcnkiLAorCQkJCQkJICJjYXRlZ29y eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgcHNwcmludGYoIiVjIiwgdHlwRm9ybS0+dHlwY2F0 ZWdvcnkpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KworCS8qIFBSRUZFUlJFRCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQUkVGRVJSRUQ9Iiwg MSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInByZWZlcnJlZCIpOworCWlmICgh dHlwRm9ybS0+dHlwaXNwcmVmZXJyZWQpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogREVGQVVM VCAqLworCWRmbHQgPSBTeXNDYWNoZUdldEF0dHIoVFlQRU9JRCwgdHlwVHVwLAorCQkJCQkJICAg QW51bV9wZ190eXBlX3R5cGRlZmF1bHQsCisJCQkJCQkgICAmaXNudWxsKTsKKwl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiREVGQVVMVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAiZGVmYXVsdCIpOworCWlmICghaXNudWxsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAs ICIle2RlZmF1bHR9cyIsICJkZWZhdWx0IiwKKwkJCQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhk Zmx0KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEVMRU1FTlQgKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiRUxFTUVOVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAiZWxlbWVudCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGVsZW0pKQor CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICJlbGVtIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3R5cGUodHlwRm9ybS0+dHlwZWxlbSwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJl c2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCisJLyogREVMSU1JVEVSICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkRFTElNSVRFUj0i LCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZGVsaW1pdGVyIik7CisJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtkZWxpbX1MIiwgImRlbGltIiwKKwkJCQkJCSBwc3By aW50ZigiJWMiLCB0eXBGb3JtLT50eXBkZWxpbSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ09MTEFUQUJMRSAqLworCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJDT0xMQVRBQkxFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJjb2xsYXRhYmxlIik7CisJaWYgKCFPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGNvbGxhdGlv bikpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle2Vs ZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVy biByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VS QVRJT04gc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVEVYVCBT RUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykKKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKE9pZCBvYmplY3RJZCwg RGVmaW5lU3RtdCAqZGVmaW5lLAorCQkJCQkJCU9iamVjdEFkZHJlc3MgY29waWVkKQoreworCUhl YXBUdXBsZQl0c2NUdXA7CisJSGVhcFR1cGxlCXRzcFR1cDsKKwlPYmpUcmVlICAgICpyZXQ7CisJ T2JqVHJlZSAgICAqdG1wOworCUZvcm1fcGdfdHNfY29uZmlnIHRzY0Zvcm07CisJRm9ybV9wZ190 c19wYXJzZXIgdHNwRm9ybTsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCisJdHNjVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKFRTQ09ORklHT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBjb25maWd1cmF0aW9uIHdpdGggT0lEICV1IiwKKwkJ CSBvYmplY3RJZCk7CisJdHNjRm9ybSA9IChGb3JtX3BnX3RzX2NvbmZpZykgR0VUU1RSVUNUKHRz Y1R1cCk7CisKKwl0c3BUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNQQVJTRVJPSUQsIE9iamVjdElk R2V0RGF0dW0odHNjRm9ybS0+Y2ZncGFyc2VyKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRz cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJj aCBwYXJzZXIgJXUiLAorCQkJIHRzY0Zvcm0tPmNmZ3BhcnNlcik7CisJdHNwRm9ybSA9IChGb3Jt X3BnX3RzX3BhcnNlcikgR0VUU1RSVUNUKHRzcFR1cCk7CisKKwkvKgorCSAqIEFkZCB0aGUgZGVm aW5pdGlvbiBjbGF1c2UuICBJZiB3ZSBoYXZlIENPUFknZWQgYW4gZXhpc3RpbmcgY29uZmlnLCBh ZGQKKwkgKiBhIENPUFkgY2xhdXNlOyBvdGhlcndpc2UgYWRkIGEgUEFSU0VSIGNsYXVzZS4KKwkg Ki8KKwkvKiBDT1BZICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkNPUFk9IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvcHkiKTsKKwlpZiAoT2lkSXNWYWxpZChjb3Bp ZWQub2JqZWN0SWQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3RzY29uZmlnfUQi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVFNDb25maWdSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkgY29waWVkLm9iamVjdElkKSk7CisJZWxzZQorCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCS8qIFBBUlNFUiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQQVJTRVI9Iiwg MSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInBhcnNlciIpOworCWlmIChjb3Bp ZWQub2JqZWN0SWQgPT0gSW52YWxpZE9pZCkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAi JXtwYXJzZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3BGb3JtLT5w cnNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzcEZvcm0tPnByc25hbWUpKSk7 CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVB VEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9cyki LCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKHRzY0Zvcm0tPmNmZ25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFt ZVN0cih0c2NGb3JtLT5jZmduYW1lKSksCisJCQkJCQkgImVsZW1zIiwgT2JqVHlwZUFycmF5LCBs aXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c3BUdXApOworCVJlbGVhc2VTeXNDYWNoZSh0c2NU dXApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRFWFQgU0VB UkNIIFBBUlNFUiBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBU RVhUIFNFQVJDSCBQQVJTRVIgJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU1BhcnNlcihPaWQgb2JqZWN0SWQsIERl ZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUJdHNwVHVwOworCU9ialRyZWUgICAgKnJl dDsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlGb3JtX3BnX3Rz X3BhcnNlciB0c3BGb3JtOworCisJdHNwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTUEFSU0VST0lE LCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRz cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJj aCBwYXJzZXIgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0c3BGb3JtID0gKEZvcm1f cGdfdHNfcGFyc2VyKSBHRVRTVFJVQ1QodHNwVHVwKTsKKworCS8qIEFkZCB0aGUgZGVmaW5pdGlv biBjbGF1c2UgKi8KKwkvKiBTVEFSVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVEFSVD0l e3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN0YXJ0 IiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNw Rm9ybS0+cHJzc3RhcnQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKworCS8qIEdFVFRPS0VOICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkdFVFRP S0VOPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi Z2V0dG9rZW4iLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCSB0c3BGb3JtLT5wcnN0b2tlbikpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCisJLyogRU5EICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkVO RD0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImVu ZCIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRz cEZvcm0tPnByc2VuZCkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJLyogTEVYVFlQRVMgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTEVYVFlQ RVM9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJs ZXh0eXBlcyIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJIHRzcEZvcm0tPnByc2xleHR5cGUpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIEhFQURMSU5FICovCisJdG1wID0gbmV3X29ianRyZWVf VkEoIkhFQURMSU5FPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJoZWFk bGluZSIpOworCWlmIChPaWRJc1ZhbGlkKHRzcEZvcm0tPnByc2hlYWRsaW5lKSkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHNw Rm9ybS0+cHJzaGVhZGxpbmUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJcmV0ID0g bmV3X29ianRyZWVfVkEoIkNSRUFURSBURVhUIFNFQVJDSCBQQVJTRVIgJXtpZGVudGl0eX1EICgl e2VsZW1zOiwgfXMpIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3BGb3JtLT5wcnNuYW1lc3BhY2UsCisJCQkJ CQkJCQkJCQkgIE5hbWVTdHIodHNwRm9ybS0+cHJzbmFtZSkpLAorCQkJCQkJICJlbGVtcyIsIE9i alR5cGVBcnJheSwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNwVHVwKTsKKwlyZXR1cm4g cmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBURVhUIFNFQVJDSCBESUNUSU9OQVJZ IHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRFWFQgU0VBUkNI IERJQ1RJT05BUlkgJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25hcnkoT2lkIG9iamVjdElkLCBEZWZp bmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlCXRzZFR1cDsKKwlPYmpUcmVlICAgICpyZXQ7 CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJRGF0dW0JCW9wdGlv bnM7CisJYm9vbAkJaXNudWxsOworCUZvcm1fcGdfdHNfZGljdCB0c2RGb3JtOworCisJdHNkVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKFRTRElDVE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c2RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggZGljdGlvbmFyeSB3aXRoIE9JRCAldSIsCisJ CQkgb2JqZWN0SWQpOworCXRzZEZvcm0gPSAoRm9ybV9wZ190c19kaWN0KSBHRVRTVFJVQ1QodHNk VHVwKTsKKworCisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJLyogVEVNUExB VEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVEVNUExBVEU9IiwgMSwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgInRlbXBsYXRlIik7CisJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wLCAiJXt0ZW1wbGF0ZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo VFNUZW1wbGF0ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzZEZvcm0tPmRpY3R0ZW1wbGF0 ZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJ LyoKKwkgKiBvcHRpb25zLiAgWFhYIHRoaXMgaXMgYSBwcmV0dHkgdXNlbGVzcyByZXByZXNlbnRh dGlvbiwgYnV0IHdlIGNhbid0IGRvCisJICogYmV0dGVyIHdpdGhvdXQgbW9yZSB0c19jYWNoZS5j IGNvb3BlcmF0aW9uIC4uLgorCSAqLworCW9wdGlvbnMgPSBTeXNDYWNoZUdldEF0dHIoVFNESUNU T0lELCB0c2RUdXAsCisJCQkJCQkJICBBbnVtX3BnX3RzX2RpY3RfZGljdGluaXRvcHRpb24sCisJ CQkJCQkJICAmaXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZSgiIik7CisJaWYgKCFpc251bGwp CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7b3B0aW9uc31zIiwgIm9wdGlvbnMiLAor CQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKG9wdGlvbnMpKTsKKwllbHNlCisJCWFwcGVuZF9u b3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBURVhUIFNFQVJDSCBESUNU SU9OQVJZICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKSIsIDIsCisJCQkJCQkgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNkRm9y bS0+ZGljdG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c2RGb3JtLT5kaWN0bmFt ZSkpLAorCQkJCQkJICJlbGVtcyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwlSZWxlYXNlU3lz Q2FjaGUodHNkVHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFU RSBURVhUIFNFQVJDSCBURU1QTEFURSBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIENSRUFURSBURVhUIFNFQVJDSCBURU1QTEFURSAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9 cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTVGVtcGxhdGUo T2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlCXRzdFR1cDsK KwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBO SUw7CisJRm9ybV9wZ190c190ZW1wbGF0ZSB0c3RGb3JtOworCisJdHN0VHVwID0gU2VhcmNoU3lz Q2FjaGUxKFRTVEVNUExBVEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQodHN0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIHRleHQgc2VhcmNoIHRlbXBsYXRlIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJ ZCk7CisJdHN0Rm9ybSA9IChGb3JtX3BnX3RzX3RlbXBsYXRlKSBHRVRTVFJVQ1QodHN0VHVwKTsK KworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwkvKiBJTklUICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIklOSVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgImluaXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0c3RGb3JtLT50bXBsaW5pdCkpCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHRz dEZvcm0tPnRtcGxpbml0KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIExFWEla RSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJMRVhJWkU9JXtwcm9jZWR1cmV9RCIsIDIsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJsZXhpemUiLAorCQkJCQkJICJwcm9jZWR1 cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQ cm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3RGb3JtLT50bXBsbGV4aXplKSk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRFWFQgU0VBUkNIIFRFTVBMQVRFICV7aWRlbnRpdHl9 RCAoJXtlbGVtczosIH1zKSIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHN0Rm9ybS0+dG1wbG5hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3RGb3JtLT50bXBsbmFtZSkpLAorCQkJCQkJICJlbGVt cyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHN0VHVwKTsKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBTFRFUiBURVhUIFNFQVJDSCBDT05G SUdVUkFUSU9OIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgVEVY VCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUREIE1BUFBJTkcKKyAqIEZPUiAl e3Rva2VudHlwZTosIH1JIFdJVEggJXtkaWN0aW9uYXJpZXM6LCB9RAorICoJT1IKKyAqIEFMVEVS IFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIERST1AgTUFQUElORyAle2lm X2V4aXN0c31zCisgKiBGT1IgJXt0b2tlbnR5cGV9SQorICoJT1IKKyAqIEFMVEVSIFRFWFQgU0VB UkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkcKKyAqIEZPUiAle3Rv a2VudHlwZTosIH1JIFdJVEggJXtkaWN0aW9uYXJpZXM6LCB9RAorICoJT1IKKyAqIEFMVEVSIFRF WFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkcKKyAqIFJF UExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIFdJVEggJXtuZXdfZGljdGlvbmFyeX1ECisgKglPUgor ICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUxURVIgTUFQ UElORworICogRk9SICV7dG9rZW50eXBlOiwgfUkgUkVQTEFDRSAle29sZF9kaWN0aW9uYXJ5fUQg V0lUSCAle25ld19kaWN0aW9uYXJ5fUQKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9B bHRlclRTQ29uZmlndXJhdGlvblN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCUFsdGVy VFNDb25maWd1cmF0aW9uU3RtdCAqbm9kZSA9IChBbHRlclRTQ29uZmlndXJhdGlvblN0bXQgKikg Y21kLT5wYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlM aXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJaW50CQkJaTsKKworCXJl dCA9IG5ld19vYmp0cmVlKCJBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIik7CisKKwkv KiBEZXRlcm1pbmUgdGhlIGZvcm1hdCBzdHJpbmcgYXBwcm9wcmlhdGUgdG8gZWFjaCBzdWJjb21t YW5kICovCisJc3dpdGNoIChub2RlLT5raW5kKQorCXsKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19B RERfTUFQUElORzoKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aWRlbnRpdHl9RCBB REQgTUFQUElORyIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5k LmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5h ZGRyZXNzLm9iamVjdElkKSk7CisJCQlicmVhazsKKworCQljYXNlIEFMVEVSX1RTQ09ORklHX0RS T1BfTUFQUElORzoKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aWRlbnRpdHl9RCBE Uk9QIE1BUFBJTkciLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcu YWRkcmVzcy5vYmplY3RJZCkpOworCQkJdG1wID0gbmV3X29ianRyZWUoIklGIEVYSVNUUyIpOwor CQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBub2RlLT5taXNzaW5nX29rKTsK KwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aWZfZXhpc3RzfXMiLCB0bXApOworCQkJ YnJlYWs7CisKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19BTFRFUl9NQVBQSU5HX0ZPUl9UT0tFTjoK KwkJY2FzZSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1Q6CisJCWNhc2UgQUxURVJfVFNDT05G SUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTjoKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwg IiV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJCQkJCQkJCQkJ CSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCWJyZWFrOworCX0KKworCS8q IEFkZCB0aGUgYWZmZWN0ZWQgdG9rZW4gbGlzdCwgZm9yIHN1YmNvbW1hbmRzIHRoYXQgaGF2ZSBv bmUgKi8KKwlpZiAobm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORyB8fAor CQlub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOIHx8 CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTiB8 fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX0RST1BfTUFQUElORykKKwl7CisJCWZv cmVhY2goY2VsbCwgbm9kZS0+dG9rZW50eXBlKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X3N0cmluZ19vYmplY3Qoc3RyVmFsKGxmaXJzdChjZWxsKSkpKTsKKwkJYXBwZW5kX2FycmF5X29i amVjdChyZXQsICJGT1IgJXt0b2tlbnR5cGU6LCB9SSIsIGxpc3QpOworCX0KKworCS8qIEFkZCBm dXJ0aGVyIHN1YmNvbW1hbmQtc3BlY2lmaWMgZWxlbWVudHMgKi8KKwlpZiAobm9kZS0+a2luZCA9 PSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORyB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RT Q09ORklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOKQorCXsKKwkJLyogQUREIE1BUFBJTkcgYW5k IEFMVEVSIE1BUFBJTkcgRk9SIG5lZWQgYSBsaXN0IG9mIGRpY3Rpb25hcmllcyAqLworCQlsaXN0 ID0gTklMOworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5kLmF0c2NmZy5uZGljdHM7IGkrKykKKwkJ eworCQkJT2JqVHJlZSAgICAqZGljdF9vYmo7CisKKwkJCWRpY3Rfb2JqID0gbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFRTRGljdGlvbmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkgIGNt ZC0+ZC5hdHNjZmcuZGljdElkc1tpXSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkJ ICAgbmV3X29iamVjdF9vYmplY3QoZGljdF9vYmopKTsKKwkJfQorCQlhcHBlbmRfYXJyYXlfb2Jq ZWN0KHJldCwgIldJVEggJXtkaWN0aW9uYXJpZXM6LCB9RCIsIGxpc3QpOworCX0KKwllbHNlIGlm IChub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVCB8fAorCQkJIG5vZGUt PmtpbmQgPT0gQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTikKKwl7CisJCS8q IFRoZSBSRVBMQUNFIGZvcm1zIHdhbnQgb2xkIGFuZCBuZXcgZGljdGlvbmFyaWVzICovCisJCUFz c2VydChjbWQtPmQuYXRzY2ZnLm5kaWN0cyA9PSAyKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiUkVQTEFDRSAle29sZF9kaWN0aW9uYXJ5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNt ZC0+ZC5hdHNjZmcuZGljdElkc1swXSkpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJX SVRIICV7bmV3X2RpY3Rpb25hcnl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2Nm Zy5kaWN0SWRzWzFdKSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2Ug YW4gQUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9z ZSBzeW50YXgKKyAqIEFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkgJXtpZGVudGl0eX1EICgl e2RlZmluaXRpb246LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclRT RGljdGlvbmFyeVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJl ZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlEYXR1bQkJb3B0aW9uczsKKwlMaXN0CSAg ICpkZWZpbml0aW9uID0gTklMOworCWJvb2wJCWlzbnVsbDsKKwlIZWFwVHVwbGUJdHNkVHVwOwor CUZvcm1fcGdfdHNfZGljdCB0c2RGb3JtOworCisJdHNkVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRT RElDVE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNW YWxpZCh0c2RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4 dCBzZWFyY2ggZGljdGlvbmFyeSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzZEZv cm0gPSAoRm9ybV9wZ190c19kaWN0KSBHRVRTVFJVQ1QodHNkVHVwKTsKKworCS8qCisJICogQWRk IHRoZSBkZWZpbml0aW9uIGxpc3QgYWNjb3JkaW5nIHRvIHRoZSBwZ190c19kaWN0IGRpY3Rpbml0 b3B0aW9uCisJICogY29sdW1uCisJICovCisJb3B0aW9ucyA9IFN5c0NhY2hlR2V0QXR0cihUU0RJ Q1RPSUQsIHRzZFR1cCwKKwkJCQkJCQkgIEFudW1fcGdfdHNfZGljdF9kaWN0aW5pdG9wdGlvbiwK KwkJCQkJCQkgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVlKCIiKTsKKwlpZiAoIWlzbnVs bCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtvcHRpb25zfXMiLCAib3B0aW9ucyIs CisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcob3B0aW9ucykpOworCWVsc2UKKwkJYXBwZW5k X25vdF9wcmVzZW50KHRtcCk7CisKKwlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBU RVhUIFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRpdHl9RCAoJXtkZWZpbml0aW9uOiwgfXMpIiwg MiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZSh0c2RGb3JtLT5kaWN0bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1l U3RyKHRzZEZvcm0tPmRpY3RuYW1lKSksCisJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlQXJy YXksIGRlZmluaXRpb24pOworCisJUmVsZWFzZVN5c0NhY2hlKHRzZFR1cCk7CisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIGRlcGFyc2VfVmlld1N0bXQKKyAqCQlkZXBhcnNlIGEgVmlld1N0bXQK KyAqCisgKiBHaXZlbiBhIHZpZXcgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1h bmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle29yX3JlcGxhY2V9cyAle3Bl cnNpc3RlbmNlfXMgVklFVyAle2lkZW50aXR5fUQgQVMgJXtxdWVyeX1zCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfVmlld1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJVmlld1N0bXQgICAqbm9kZSA9IChWaWV3U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJl ZSAgICAqcmV0OworCVJlbGF0aW9uCXJlbGF0aW9uOworCisJcmVsYXRpb24gPSByZWxhdGlvbl9v cGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEo IkNSRUFURSAle29yX3JlcGxhY2V9cyAle3BlcnNpc3RlbmNlfXMgVklFVyAle2lkZW50aXR5fUQg QVMgJXtxdWVyeX1zIiwgNCwKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiLAorCQkJCQkJICJwZXJzaXN0 ZW5jZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlv bi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSksCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+ cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxh dGlvbikpLAorCQkJCQkJICJxdWVyeSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgcGdfZ2V0X3Zp ZXdkZWZfaW50ZXJuYWwob2JqZWN0SWQpKTsKKworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBB Y2Nlc3NTaGFyZUxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIENSRUFU RSBNYXRlcmlhbGl6ZWQgVmlldyBzdGF0ZW1lbnQsIGl0IGlzIGEgdmFyaWFudCBvZgorICogQ3Jl YXRlVGFibGVBc1N0bXQKKyAqCisgKiBOb3RlIHRoYXQgQ1JFQVRFIFRBQkxFIEFTIFNFTEVDVCBJ TlRPIGNhbiBhbHNvIGJlIGRlcGFyc2VkIGJ5CisgKiBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10 IHRvIHJlbW92ZSB0aGUgU0VMRUNUIElOVE8gY2xhdXNlLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 CisgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFtNQVRFUklBTElaRUQgVklFVyB8IFRBQkxFXSAl e2lmX25vdF9leGlzdHN9cworICogCQkle2lkZW50aXR5fUQgJXtjb2x1bW5zfXMgWyV7b25fY29t bWl0fXNdICV7dGFibGVzcGFjZX1zCisgKiAgCQlBUyAle3F1ZXJ5fXMgJXt3aXRoX25vX2RhdGF9 cyIKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdF92YW5p bGxhKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRhYmxlQXNTdG10 ICpub2RlID0gKENyZWF0ZVRhYmxlQXNTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglyZWxh dGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJT2JqVHJl ZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlPYmpUcmVlICAgICp0bXAyOworCWNoYXIJ ICAgKmZtdDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkv KiBSZWplY3QgdW5zdXBwb3J0ZWQgY2FzZSByaWdodCBhd2F5LiAqLworCWlmICgoKFF1ZXJ5ICop IChub2RlLT5xdWVyeSkpLT5jb21tYW5kVHlwZSA9PSBDTURfVVRJTElUWSkKKwkJZWxvZyhFUlJP UiwgInVuaW1wbGVtZW50ZWQgZGVwYXJzZSBvZiBDUkVBVEUgVEFCTEUgQVMgRVhFQ1VURSIpOwor CisJLyoKKwkgKiBOb3RlIHRoYXQgSU5TRVJUIElOVE8gaXMgZGVwYXJzZWQgYXMgQ1JFQVRFIFRB QkxFIEFTLiAgVGhleSBhcmUKKwkgKiBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBzeW5vbnltcyBz byB0aGVyZSBpcyBubyBoYXJtIGZyb20gdGhpcy4KKwkgKi8KKwlpZiAobm9kZS0+b2JqdHlwZSA9 PSBPQkpFQ1RfTUFUVklFVykKKwkJZm10ID0gIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgTUFURVJJ QUxJWkVEIFZJRVcgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIjsKKwllbHNlCisJCWZt dCA9ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRl bnRpdHl9RCI7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDMsCisJCQkJCQkgInBlcnNp c3RlbmNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vfc3RyKG5vZGUt PmludG8tPnJlbC0+cmVscGVyc2lzdGVuY2UpLAorCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwgT2Jq VHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMi IDogIiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBv YmplY3RJZCkpOworCisJLyogQ09MVU1OUyBjbGF1c2UgKi8KKwlpZiAobm9kZS0+aW50by0+Y29s TmFtZXMpCisJeworCQlmb3JlYWNoKGNlbGwsIG5vZGUtPmludG8tPmNvbE5hbWVzKQorCQkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKGxmaXJzdChjZWxsKSkp KTsKKworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiKCV7Y29sdW1uczosIH1JKSIsIDEsCisJCQkJ CQkJICJjb2x1bW5zIiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKKwl9CisJZWxzZQorCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiIiwgMSwKKwkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgZmFs c2UpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjb2x1bW5zfXMiLCB0bXApOwor CisJLyogVVNJTkcgY2xhdXNlICovCisJdG1wID0gbmV3X29ianRyZWUoIlVTSU5HIik7CisJaWYg KG5vZGUtPmludG8tPmFjY2Vzc01ldGhvZCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAi JXthY2Nlc3NfbWV0aG9kfUkiLCAiYWNjZXNzX21ldGhvZCIsCisJCQkJCQkJIG5vZGUtPmludG8t PmFjY2Vzc01ldGhvZCk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcCwgIiV7 YWNjZXNzX21ldGhvZH1JIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCX0KKwlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle2FjY2Vzc19tZXRob2R9cyIsIHRtcCk7CisKKwkvKiBX SVRIIGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJXSVRIIik7CisJbGlzdCA9IE5JTDsK KworCWZvcmVhY2goY2VsbCwgbm9kZS0+aW50by0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAg Km9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQl0bXAyID0gZGVwYXJzZV9EZWZF bGVtKG9wdCwgZmFsc2UpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXAyKSk7CisJfQorCisJaWYgKGxpc3QpCisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wLCAi KCV7d2l0aDosIH1zKSIsIGxpc3QpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7 CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3dpdGhfY2xhdXNlfXMiLCB0bXApOwor CisJLyogT04gQ09NTUlUIGNsYXVzZS4gIENSRUFURSBNQVRFUklBTElaRUQgVklFVyBkb2Vzbid0 IGhhdmUgb25lICovCisJaWYgKG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX1RBQkxFKQorCQlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle29uX2NvbW1pdH1zIiwKKwkJCQkJCQkgZGVwYXJzZV9P bkNvbW1pdENsYXVzZShub2RlLT5pbnRvLT5vbkNvbW1pdCkpOworCisJLyogVEFCTEVTUEFDRSBj bGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIp OworCWlmIChub2RlLT5pbnRvLT50YWJsZVNwYWNlTmFtZSkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wLCAiJXt0YWJsZXNwYWNlfXMiLCAidGFibGVzcGFjZSIsCisJCQkJCQkJIG5vZGUtPmlu dG8tPnRhYmxlU3BhY2VOYW1lKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1w LCAiJXt0YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJfQorCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dGFibGVzcGFjZX1zIiwgdG1wKTsKKworCS8qIEFk ZCB0aGUgcXVlcnkgKi8KKwlBc3NlcnQoSXNBKG5vZGUtPnF1ZXJ5LCBRdWVyeSkpOworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHJldCwgIkFTICV7cXVlcnl9cyIsICJxdWVyeSIsCisJCQkJCQkgcGdf Z2V0X3F1ZXJ5ZGVmKChRdWVyeSAqKSBub2RlLT5xdWVyeSwgZmFsc2UpKTsKKworCS8qIEFkZCBh IFdJVEggTk8gREFUQSBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCBOTyBE QVRBIiwgMSwKKwkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJCQkJIG5vZGUtPmlu dG8tPnNraXBEYXRhID8gdHJ1ZSA6IGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQs ICIle3dpdGhfbm9fZGF0YX1zIiwgdG1wKTsKKworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBB Y2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBD cmVhdGVUcmlnU3RtdCAoQ1JFQVRFIFRSSUdHRVIpCisgKgorICogR2l2ZW4gYSB0cmlnZ2VyIE9J RCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQor ICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBDUkVBVEUgJXtjb25zdHJhaW50fXMgVFJJR0dFUiAle25hbWV9SSAle3RpbWV9cyAl e2V2ZW50czogT1IgfXMgT04KKyAqICV7cmVsYXRpb259RCAle2Zyb21fdGFibGV9cyAle2NvbnN0 cmFpbnRfYXR0cnM6IH1zIEZPUiBFQUNICisgKiAle2Zvcl9lYWNofXMgJXt3aGVufXMgRVhFQ1VU RSBQUk9DRURVUkUgJXtmdW5jdGlvbn1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q3JlYXRlVHJpZ1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRl VHJpZ1N0bXQgKm5vZGUgPSAoQ3JlYXRlVHJpZ1N0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9u CXBnX3RyaWdnZXI7CisJSGVhcFR1cGxlCXRyaWdUdXA7CisJRm9ybV9wZ190cmlnZ2VyIHRyaWdG b3JtOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCWludAkJCXRn bmFyZ3M7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0CSAgICpldmVudHM7CisJY2hhcgkg ICAqdHJpZ3RpbWluZzsKKworCXBnX3RyaWdnZXIgPSB0YWJsZV9vcGVuKFRyaWdnZXJSZWxhdGlv bklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJdHJpZ1R1cCA9IGdldF9jYXRhbG9nX29iamVjdF9i eV9vaWQocGdfdHJpZ2dlciwgQW51bV9wZ190cmlnZ2VyX29pZCwgb2JqZWN0SWQpOworCXRyaWdG b3JtID0gKEZvcm1fcGdfdHJpZ2dlcikgR0VUU1RSVUNUKHRyaWdUdXApOworCisJdHJpZ3RpbWlu ZyA9IG5vZGUtPnRpbWluZyA9PSBUUklHR0VSX1RZUEVfQkVGT1JFID8gIkJFRk9SRSIgOgorCQlu b2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0FGVEVSID8gIkFGVEVSIiA6CisJCW5vZGUtPnRp bWluZyA9PSBUUklHR0VSX1RZUEVfSU5TVEVBRCA/ICJJTlNURUFEIE9GIiA6CisJCU5VTEw7CisJ aWYgKCF0cmlndGltaW5nKQorCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIHRyaWdnZXIgdGlt aW5nIHR5cGUgJWQiLCBub2RlLT50aW1pbmcpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNS RUFURSAle2NvbnN0cmFpbnR9cyBUUklHR0VSICV7bmFtZX1JICV7dGltZX1zIiwgMywKKwkJCQkJ CSAiY29uc3RyYWludCIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPmlzY29uc3RyYWludCA/ICJDT05T VFJBSU5UIiA6ICIiLAorCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+dHJpZ25h bWUsCisJCQkJCQkgInRpbWUiLCBPYmpUeXBlU3RyaW5nLCB0cmlndGltaW5nKTsKKworCS8qCisJ ICogRGVjb2RlIHRoZSBldmVudHMgdGhhdCB0aGUgdHJpZ2dlciBmaXJlcyBmb3IuICBUaGUgb3V0 cHV0IGlzIGEgbGlzdDsgaW4KKwkgKiBtb3N0IGNhc2VzIGl0IHdpbGwganVzdCBiZSBhIHN0cmlu ZyB3aXRoIHRoZSBldmVudCBuYW1lLCBidXQgd2hlbgorCSAqIHRoZXJlJ3MgYW4gVVBEQVRFIHdp dGggYSBsaXN0IG9mIGNvbHVtbnMsIHdlIHJldHVybiBhIEpTT04gb2JqZWN0LgorCSAqLworCWV2 ZW50cyA9IE5JTDsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX0lOU0VSVCkKKwkJ ZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJJTlNFUlQiKSk7CisJ aWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9ERUxFVEUpCisJCWV2ZW50cyA9IGxhcHBl bmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiREVMRVRFIikpOworCWlmIChub2RlLT5ldmVu dHMgJiBUUklHR0VSX1RZUEVfVFJVTkNBVEUpCisJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBu ZXdfc3RyaW5nX29iamVjdCgiVFJVTkNBVEUiKSk7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdH RVJfVFlQRV9VUERBVEUpCisJeworCQlpZiAobm9kZS0+Y29sdW1ucyA9PSBOSUwpCisJCXsKKwkJ CWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiVVBEQVRFIikpOwor CQl9CisJCWVsc2UKKwkJeworCQkJT2JqVHJlZSAgICAqdXBkYXRlOworCQkJTGlzdENlbGwgICAq Y2VsbDsKKwkJCUxpc3QJICAgKmNvbHMgPSBOSUw7CisKKwkJCS8qCisJCQkgKiBDdXJyZW50bHkg b25seSBVUERBVEUgT0YgY2FuIGJlIG9iamVjdHMgaW4gdGhlIG91dHB1dCBKU09OLCBidXQKKwkJ CSAqIHdlIGFkZCBhICJraW5kIiBlbGVtZW50IHNvIHRoYXQgdXNlciBjb2RlIGNhbiBkaXN0aW5n dWlzaAorCQkJICogcG9zc2libGUgZnV0dXJlIG5ldyBldmVudCB0eXBlcy4KKwkJCSAqLworCQkJ dXBkYXRlID0gbmV3X29ianRyZWVfVkEoIlVQREFURSBPRiIsIDEsCisJCQkJCQkJCQkia2luZCIs IE9ialR5cGVTdHJpbmcsICJ1cGRhdGVfb2YiKTsKKworCQkJZm9yZWFjaChjZWxsLCBub2RlLT5j b2x1bW5zKQorCQkJeworCQkJCWNoYXIJICAgKmNvbG5hbWUgPSBzdHJWYWwobGZpcnN0KGNlbGwp KTsKKworCQkJCWNvbHMgPSBsYXBwZW5kKGNvbHMsIG5ld19zdHJpbmdfb2JqZWN0KGNvbG5hbWUp KTsKKwkJCX0KKworCQkJYXBwZW5kX2FycmF5X29iamVjdCh1cGRhdGUsICIle2NvbHVtbnM6LCB9 SSIsIGNvbHMpOworCisJCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X29iamVjdF9vYmpl Y3QodXBkYXRlKSk7CisJCX0KKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle2V2ZW50 czogT1IgfXMiLCBldmVudHMpOworCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJIHRyaWdGb3JtLT50Z3JlbGlkKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJPTiAle3JlbGF0aW9ufUQiLCB0bXBfb2JqKTsK KworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiRlJPTSIpOworCWlmICh0cmlnRm9ybS0+dGdjb25z dHJyZWxpZCkKKwl7CisJCU9ialRyZWUgICAgKnJlbDsKKworCQlyZWwgPSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgdHJpZ0Zvcm0t PnRnY29uc3RycmVsaWQpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtyZWxh dGlvbn1EIiwgcmVsKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7 CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtmcm9tX3RhYmxlfXMiLCB0bXBfb2JqKTsK KworCWlmIChub2RlLT5kZWZlcnJhYmxlKQorCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3Ry aW5nX29iamVjdCgiREVGRVJSQUJMRSIpKTsKKwlpZiAobm9kZS0+aW5pdGRlZmVycmVkKQorCQls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiSU5JVElBTExZIERFRkVSUkVE IikpOworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtjb25zdHJhaW50X2F0dHJzOiB9cyIs IGxpc3QpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiRk9SIEVBQ0ggJXtmb3JfZWFj aH1zIiwgImZvcl9lYWNoIiwKKwkJCQkJCSBub2RlLT5yb3cgPyAiUk9XIiA6ICJTVEFURU1FTlQi KTsKKworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiV0hFTiIpOworCWlmIChub2RlLT53aGVuQ2xh dXNlKQorCXsKKwkJTm9kZQkgICAqd2hlbkNsYXVzZTsKKwkJRGF0dW0JCXZhbHVlOworCQlib29s CQlpc251bGw7CisKKwkJdmFsdWUgPSBmYXN0Z2V0YXR0cih0cmlnVHVwLCBBbnVtX3BnX3RyaWdn ZXJfdGdxdWFsLAorCQkJCQkJCVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksICZpc251bGwp OworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgIm51bGwgdGdxdWFsIGZvciB0cmlnZ2Vy IFwiJXNcIiIsCisJCQkJIE5hbWVTdHIodHJpZ0Zvcm0tPnRnbmFtZSkpOworCisJCXdoZW5DbGF1 c2UgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyh2YWx1ZSkpOworCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBfb2JqLCAiKCV7Y2xhdXNlfXMpIiwgImNsYXVzZSIsCisJCQkJCQkJ IHBnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UodHJpZ0Zvcm0sCisJCQkJCQkJCQkJCQkJICAgd2hl bkNsYXVzZSwKKwkJCQkJCQkJCQkJCQkgICBmYWxzZSkpOworCX0KKwllbHNlCisJCWFwcGVuZF9u b3RfcHJlc2VudCh0bXBfb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3doZW59 cyIsIHRtcF9vYmopOworCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2Z1bmNuYW1lfUQi LCAxLAorCQkJCQkJCSJmdW5jbmFtZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCXRy aWdGb3JtLT50Z2ZvaWQpKTsKKwlsaXN0ID0gTklMOworCXRnbmFyZ3MgPSB0cmlnRm9ybS0+dGdu YXJnczsKKwlpZiAodGduYXJncyA+IDApCisJeworCQlieXRlYQkgICAqdGdhcmdzOworCQljaGFy CSAgICphcmdzdHI7CisJCWJvb2wJCWlzbnVsbDsKKwkJaW50CQkJZmluZHg7CisJCWludAkJCWxl bnRnYXJnczsKKwkJY2hhcgkgICAqcDsKKworCQl0Z2FyZ3MgPSBEYXR1bUdldEJ5dGVhUChmYXN0 Z2V0YXR0cih0cmlnVHVwLAorCQkJCQkJCQkJCQlBbnVtX3BnX3RyaWdnZXJfdGdhcmdzLAorCQkJ CQkJCQkJCQlSZWxhdGlvbkdldERlc2NyKHBnX3RyaWdnZXIpLAorCQkJCQkJCQkJCQkmaXNudWxs KSk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAibnVsbCB0Z2FyZ3MgZm9yIHRyaWdn ZXIgXCIlc1wiIiwKKwkJCQkgTmFtZVN0cih0cmlnRm9ybS0+dGduYW1lKSk7CisJCWFyZ3N0ciA9 IChjaGFyICopIFZBUkRBVEEodGdhcmdzKTsKKwkJbGVudGdhcmdzID0gVkFSU0laRV9BTllfRVhI RFIodGdhcmdzKTsKKworCQlwID0gYXJnc3RyOworCQlmb3IgKGZpbmR4ID0gMDsgZmluZHggPCB0 Z25hcmdzOyBmaW5keCsrKQorCQl7CisJCQlzaXplX3QJCXRsZW47CisKKwkJCS8qIFZlcmlmeSB0 aGF0IHRoZSBhcmd1bWVudCBlbmNvZGluZyBpcyBjb3JyZWN0ICovCisJCQl0bGVuID0gc3RybGVu KHApOworCQkJaWYgKHAgKyB0bGVuID49IGFyZ3N0ciArIGxlbnRnYXJncykKKwkJCQllbG9nKEVS Uk9SLCAiaW52YWxpZCBhcmd1bWVudCBzdHJpbmcgKCVzKSBmb3IgdHJpZ2dlciBcIiVzXCIiLAor CQkJCQkgYXJnc3RyLCBOYW1lU3RyKHRyaWdGb3JtLT50Z25hbWUpKTsKKworCQkJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocCkpOworCisJCQlwICs9IHRsZW4gKyAxOwor CQl9CisJfQorCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIigiKTsKKwlhcHBlbmRf YXJyYXlfb2JqZWN0KHRtcF9vYmosICIle2FyZ3M6LCB9TCIsIGxpc3QpOwkvKiBtaWdodCBiZSBO SUwgKi8KKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBfb2JqLCAiKSIpOworCisJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiRVhFQ1VURSBQUk9DRURVUkUgJXtmdW5jdGlvbn1zIiwgdG1wX29i aik7CisKKwl0YWJsZV9jbG9zZShwZ190cmlnZ2VyLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0 dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVVc2VyTWFwcGluZ1N0bXQgKENS RUFURSBVU0VSIE1BUFBJTkcpCisgKgorICogR2l2ZW4gYSBVc2VyIE1hcHBpbmcgT0lEIGFuZCB0 aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsCisgKiByZXR1cm4gYW4gT2JqVHJlZSByZXBy ZXNlbnRpbmcgdGhlIENSRUFURSBVU0VSIE1BUFBJTkcgY29tbWFuZC4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogQ1JFQVRFIFVTRVIgTUFQUElORyBGT1IgJXtyb2xlfVIgU0VSVkVSICV7c2Vy dmVyfUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVVc2VyTWFwcGluZ1N0 bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVXNlck1hcHBpbmdT dG10ICpub2RlID0gKENyZWF0ZVVzZXJNYXBwaW5nU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJl ZSAgICAqcmV0OworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJdHA7CisJRm9ybV9wZ191c2Vy X21hcHBpbmcgZm9ybTsKKwlGb3JlaWduU2VydmVyICpzZXJ2ZXI7CisKKwlyZWwgPSB0YWJsZV9v cGVuKFVzZXJNYXBwaW5nUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwkvKgorCSAq IExvb2t1cCBvYmplY3QgaW4gdGhlIGNhdGFsb2csIHNvIHdlIGRvbid0IGhhdmUgdG8gZGVhbCB3 aXRoCisJICogY3VycmVudF91c2VyIGFuZCBzdWNoLgorCSAqLworCXRwID0gU2VhcmNoU3lzQ2Fj aGUxKFVTRVJNQVBQSU5HT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIHVzZXIgbWFwcGluZyB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJZm9ybSA9 IChGb3JtX3BnX3VzZXJfbWFwcGluZykgR0VUU1RSVUNUKHRwKTsKKworCXNlcnZlciA9IEdldEZv cmVpZ25TZXJ2ZXIoZm9ybS0+dW1zZXJ2ZXIpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNS RUFURSBVU0VSIE1BUFBJTkcgRk9SICV7cm9sZX1SIFNFUlZFUiAle3NlcnZlcn1JICV7Z2VuZXJp Y19vcHRpb25zfXMiLCAzLAorCQkJCQkJICJyb2xlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3Jfcm9sZV9pZChmb3JtLT51bXVzZXIpLAorCQkJCQkJICJzZXJ2ZXIiLCBP YmpUeXBlU3RyaW5nLCBzZXJ2ZXItPnNlcnZlcm5hbWUsCisJCQkJCQkgImdlbmVyaWNfb3B0aW9u cyIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlv bnMsIE5VTEwpKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJdGFibGVfY2xvc2UocmVsLCBS b3dFeGNsdXNpdmVMb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZGVwYXJzZV9BbHRl clVzZXJNYXBwaW5nCisgKgorICogR2l2ZW4gYSBVc2VyIE1hcHBpbmcgT0lEIGFuZCB0aGUgcGFy c2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRp bmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFVT RVIgTUFQUElORyBGT1IgJXtyb2xlfVIgU0VSVkVSICV7c2VydmVyfUkKKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9BbHRlclVzZXJNYXBwaW5nU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlBbHRlclVzZXJNYXBwaW5nU3RtdCAqbm9kZSA9IChBbHRlclVzZXJN YXBwaW5nU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCVJlbGF0aW9uCXJl bDsKKwlIZWFwVHVwbGUJdHA7CisJRm9ybV9wZ191c2VyX21hcHBpbmcgZm9ybTsKKwlGb3JlaWdu U2VydmVyICpzZXJ2ZXI7CisKKwlyZWwgPSB0YWJsZV9vcGVuKFVzZXJNYXBwaW5nUmVsYXRpb25J ZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwkvKgorCSAqIExvb2t1cCBvYmplY3QgaW4gdGhlIGNh dGFsb2csIHNvIHdlIGRvbid0IGhhdmUgdG8gZGVhbCB3aXRoCisJICogY3VycmVudF91c2VyIGFu ZCBzdWNoLgorCSAqLworCXRwID0gU2VhcmNoU3lzQ2FjaGUxKFVTRVJNQVBQSU5HT0lELCBPYmpl Y3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHVzZXIgbWFwcGluZyB3aXRoIE9J RCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJZm9ybSA9IChGb3JtX3BnX3VzZXJfbWFwcGluZykg R0VUU1RSVUNUKHRwKTsKKworCXNlcnZlciA9IEdldEZvcmVpZ25TZXJ2ZXIoZm9ybS0+dW1zZXJ2 ZXIpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFVTRVIgTUFQUElORyBGT1IgJXty b2xlfVIgU0VSVkVSICV7c2VydmVyfUkgJXtnZW5lcmljX29wdGlvbnN9cyIsIDMsCisJCQkJCQkg InJvbGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKGZv cm0tPnVtdXNlciksCisJCQkJCQkgInNlcnZlciIsIE9ialR5cGVTdHJpbmcsIHNlcnZlci0+c2Vy dmVybmFtZSwKKwkJCQkJCSAiZ2VuZXJpY19vcHRpb25zIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CSBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOworCisJUmVsZWFzZVN5 c0NhY2hlKHRwKTsKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXJldHVy biByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyU3RhdHNTdG10IChBTFRFUiBTVEFU SVNUSUNTKQorICoKKyAqIEdpdmVuIGEgYWx0ZXIgc3RhdGlzdGljcyBPSUQgYW5kIHRoZSBwYXJz ZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGlu ZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgU1RB VElTVElDUyAle2lkZW50aXR5fUQgU0VUIFNUQVRJU1RJQ1MgJXt0YXJnZXR9bgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyU3RhdHNTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUFsdGVyU3RhdHNTdG10ICpub2RlID0gKEFsdGVyU3RhdHNTdG10ICop IHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJSGVhcFR1cGxlCXRwOworCUZvcm1fcGdf c3RhdGlzdGljX2V4dCBzdGF0Zm9ybTsKKworCWlmICghbm9kZS0+c3R4c3RhdHRhcmdldCkKKwkJ cmV0dXJuIE5VTEw7CisKKwkvKiBMb29rdXAgb2JqZWN0IGluIHRoZSBjYXRhbG9nICovCisJdHAg PSBTZWFyY2hTeXNDYWNoZTEoU1RBVEVYVE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBzdGF0aXN0aWMgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisKKwlzdGF0 Zm9ybSA9IChGb3JtX3BnX3N0YXRpc3RpY19leHQpIEdFVFNUUlVDVCh0cCk7CisJcmV0ID0gbmV3 X29ianRyZWVfVkEoIkFMVEVSIFNUQVRJU1RJQ1MgJXtpZGVudGl0eX1EIFNFVCBTVEFUSVNUSUNT ICV7dGFyZ2V0fW4iLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHN0YXRmb3JtLT5zdHhuYW1lc3BhY2UsCisJCQkJ CQkJCQkJCQkgIE5hbWVTdHIoc3RhdGZvcm0tPnN0eG5hbWUpKSwKKwkJCQkJCSAidGFyZ2V0Iiwg T2JqVHlwZUludGVnZXIsIG5vZGUtPnN0eHN0YXR0YXJnZXQpOworCisJUmVsZWFzZVN5c0NhY2hl KHRwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIFJlZnJlc2hNYXRWaWV3 U3RtdCAoUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVykKKyAqCisgKiBHaXZlbiBhIG1hdGVyaWFs aXplZCB2aWV3IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4g YW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSByZWZyZXNoIGNvbW1hbmQuCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIFJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcgJXtjb25jdXJyZW50 bHl9cyAle2lkZW50aXR5fUQgJXt3aXRoX25vX2RhdGF9cworICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX1JlZnJlc2hNYXRWaWV3U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJl ZSkKK3sKKwlSZWZyZXNoTWF0Vmlld1N0bXQgKm5vZGUgPSAoUmVmcmVzaE1hdFZpZXdTdG10ICop IHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCisJcmV0 ID0gbmV3X29ianRyZWVfVkEoIlJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcgJXtjb25jdXJyZW50 bHl9cyAle2lkZW50aXR5fUQiLCAyLAorCQkJCQkJICJjb25jdXJyZW50bHkiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJIG5vZGUtPmNvbmN1cnJlbnQgPyAiQ09OQ1VSUkVOVExZIiA6ICIiLAorCQkJ CQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsK KworCS8qIEFkZCBhIFdJVEggTk8gREFUQSBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiV0lUSCBOTyBEQVRBIiwgMSwKKwkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJ CQkJIG5vZGUtPnNraXBEYXRhID8gdHJ1ZSA6IGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVj dChyZXQsICIle3dpdGhfbm9fZGF0YX1zIiwgdG1wKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8q CisgKiBEZXBhcnNlIGEgUmVuYW1lU3RtdC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxU RVIgJXMgJXtpZl9leGlzdHN9cyAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisg KiBPUgorICogQUxURVIgUE9MSUNZICV7aWZfZXhpc3RzfXMgJXtwb2xpY3luYW1lfUkgT04gJXtp ZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSIG9ianR5cGUg JXtpZGVudGl0eX1EIFJFTkFNRSBBVFRSSUJVVEUgJXtjb2xuYW1lfUkgVE8gJXtuZXduYW1lfUkg JXtjYXNjYWRlfXMKKyAqIE9SCisgKiBBTFRFUiBvYmp0eXBlICV7aWZfZXhpc3RzfXMgJSV7aWRl bnRpdHl9RCBSRU5BTUUgQ09MVU1OICV7Y29sbmFtZX1JIFRPICV7bmV3bmFtZX1JCisgKiBPUgor ICogQUxURVIgJXMgJSV7aWRlbnRpdHl9cyBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JCisgKiBPUgor ICogQUxURVIgJXMgJSV7aWRlbnRpdHl9RCBVU0lORyAlJXtpbmRleF9tZXRob2R9cyBSRU5BTUUg VE8gJSV7bmV3bmFtZX1JCisgKiBPUgorICogQUxURVIgU0NIRU1BICV7aWRlbnRpdHl9SSBSRU5B TUUgVE8gJXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiBSVUxFICV7cnVsZW5hbWV9SSBPTiAl e2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisgKiBPUgorICogQUxURVIgVFJJR0dF UiAle3RyaWdnZXJuYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SQor ICogT1IKKyAqIEFMVEVSICVzICUle2lkZW50aXR5fUQgUkVOQU1FIFRPICUle25ld25hbWV9SQor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbmFtZVN0bXQoT2JqZWN0QWRkcmVzcyBh ZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUpCit7CisJUmVuYW1lU3RtdCAqbm9kZSA9IChSZW5hbWVT dG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJUmVsYXRpb24JcmVsYXRpb247 CisJT2lkCQkJc2NoZW1hSWQ7CisKKwkvKgorCSAqIEluIGFuIEFMVEVSIC4uIFJFTkFNRSBjb21t YW5kLCB3ZSBkb24ndCBoYXZlIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZQorCSAqIG9iamVjdCBp biBzeXN0ZW0gY2F0YWxvZ3M6IHNpbmNlIHdlIGluc3BlY3QgdGhlbSBhZnRlciB0aGUgY29tbWFu ZCBoYXMKKwkgKiBleGVjdXRlZCwgdGhlIG9sZCBuYW1lIGlzIGFscmVhZHkgZ29uZS4gIFRoZXJl Zm9yZSwgd2UgZXh0cmFjdCBpdCBmcm9tCisJICogdGhlIHBhcnNlIG5vZGUuICBOb3RlIHdlIHN0 aWxsIGV4dHJhY3QgdGhlIHNjaGVtYSBuYW1lIGZyb20gdGhlIGNhdGFsb2cKKwkgKiAoaXQgbWln aHQgbm90IGJlIHByZXNlbnQgaW4gdGhlIHBhcnNlIG5vZGUpOyBpdCBjYW5ub3QgcG9zc2libHkg aGF2ZQorCSAqIGNoYW5nZWQgYW55d2F5LgorCSAqLworCXN3aXRjaCAobm9kZS0+cmVuYW1lVHlw ZSkKKwl7CisJCWNhc2UgT0JKRUNUX1RBQkxFOgorCQljYXNlIE9CSkVDVF9JTkRFWDoKKwkJY2Fz ZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCWNhc2UgT0JKRUNUX1ZJRVc6CisJCWNhc2UgT0JKRUNUX01B VFZJRVc6CisJCQlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5vYmplY3RJZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwkJCXNjaGVtYUlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRp b24pOworCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWZfZXhp c3RzfXMgJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDQsCisJCQkJCQkJCSAi b2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2Rl LT5yZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJCQkJCSAiaWZfZXhpc3RzIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiLAorCQkJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVsbmFt ZSksCisJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBub2RlLT5u ZXduYW1lKTsKKwkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOwor CQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfUE9MSUNZOgorCQkJeworCQkJCUhlYXBUdXBsZQlw b2xUdXA7CisJCQkJRm9ybV9wZ19wb2xpY3kgcG9sRm9ybTsKKwkJCQlSZWxhdGlvbglwZ19wb2xp Y3k7CisJCQkJU2NhbktleURhdGEga2V5OworCQkJCVN5c1NjYW5EZXNjIHNjYW47CisKKwkJCQlw Z19wb2xpY3kgPSByZWxhdGlvbl9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJCQkJU2NhbktleUluaXQoJmtleSwgQW51bV9wZ19wb2xpY3lfb2lkLAorCQkJCQkJCUJU RXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJCQlPYmplY3RJZEdldERhdHVtKGFk ZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3BvbGlj eSwgUG9saWN5T2lkSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkJCQkgIE5VTEwsIDEsICZrZXkpOwor CQkJCXBvbFR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJCQkJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHBvbFR1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBwb2xpY3kgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXBv bEZvcm0gPSAoRm9ybV9wZ19wb2xpY3kpIEdFVFNUUlVDVChwb2xUdXApOworCisJCQkJcmV0ID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIFBPTElDWSAle2lmX2V4aXN0c31zICV7cG9saWN5bmFtZX1J IE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCA0LAorCQkJCQkJCQkJICJp Zl9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAi SUYgRVhJU1RTIiA6ICIiLAorCQkJCQkJCQkJICJwb2xpY3luYW1lIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCQkJCSBub2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgcG9sRm9ybS0+cG9scmVsaWQpLAorCQkJCQkJCQkJ ICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBub2RlLT5uZXduYW1lKTsKKwkJ CQlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3BvbGljeSwg QWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX0FUVFJJ QlVURToKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQkJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVu KGFkZHJlc3Mub2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlzY2hlbWFJZCA9IFJlbGF0 aW9uR2V0TmFtZXNwYWNlKHJlbGF0aW9uKTsKKworCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0g T0JKRUNUX0FUVFJJQlVURSkKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVFlQRSAl e2lkZW50aXR5fUQgUkVOQU1FIEFUVFJJQlVURSAle2NvbG5hbWV9SSIsIDIsCisJCQkJCQkJCQkg ImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1l KSwKKwkJCQkJCQkJCSAiY29sbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUpOwor CQkJZWxzZQorCQkJeworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9 cyIsIDEsCisJCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0 cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbGF0aW9uVHlwZSwgZmFsc2UpKTsKKworCQkJCS8qIENv bXBvc2l0ZSB0eXBlcyBkbyBub3Qgc3VwcG9ydCBJRiBFWElTVFMgKi8KKwkJCQlpZiAobm9kZS0+ cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQ09MVU1OKQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChy ZXQsICIle2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJCQkgImlmX2V4aXN0cyIsCisJCQkJCQkJCQkJ IG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKworCQkJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVs bmFtZSkpOworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlJFTkFNRSBDT0xVTU4gJXtj b2xuYW1lfUkiLAorCQkJCQkJCQkJICJjb2xuYW1lIiwgbm9kZS0+c3VibmFtZSk7CisJCQl9CisK KwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlRPICV7bmV3bmFtZX1JIiwgIm5ld25hbWUi LAorCQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7CisKKwkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09 IE9CSkVDVF9BVFRSSUJVVEUpCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjYXNj YWRlfXMiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkJ CQkJCQkicHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJCQkJCQkJCQkJCW5vZGUtPmJlaGF2aW9y ID09IERST1BfQ0FTQ0FERSkpOworCisJCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNz U2hhcmVMb2NrKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX0FHR1JFR0FURToKKwkJY2Fz ZSBPQkpFQ1RfRlVOQ1RJT046CisJCWNhc2UgT0JKRUNUX1JPVVRJTkU6CisJCQl7CisJCQkJY2hh cgkgICAqaWRlbnQ7CisJCQkJSGVhcFR1cGxlCXByb2N0dXA7CisJCQkJRm9ybV9wZ19wcm9jIHBy b2Nmb3JtOworCQkJCUxpc3QJICAgKmlkZW50aXR5OworCisJCQkJQXNzZXJ0KElzQShub2RlLT5v YmplY3QsIE9iamVjdFdpdGhBcmdzKSk7CisJCQkJaWRlbnRpdHkgPSAoKE9iamVjdFdpdGhBcmdz ICopIG5vZGUtPm9iamVjdCktPm9iam5hbWU7CisKKwkJCQlwcm9jdHVwID0gU2VhcmNoU3lzQ2Fj aGUxKFBST0NPSUQsCisJCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0 SWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY3R1cCkpCisJCQkJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgd2l0aCBPSUQgJXUiLAorCQkJ CQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXByb2Nmb3JtID0gKEZvcm1fcGdfcHJvYykgR0VU U1RSVUNUKHByb2N0dXApOworCisJCQkJLyogWFhYIGRvZXMgdGhpcyB3b3JrIGZvciBvcmRlcmVk LXNldCBhZ2dyZWdhdGVzPyAqLworCQkJCWlkZW50ID0gcHNwcmludGYoIiVzJXMiLAorCQkJCQkJ CQkgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKHByb2Nmb3Jt LT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJCQkJc3RyVmFsKGxsYXN0KGlkZW50aXR5KSkp LAorCQkJCQkJCQkgZm9ybWF0X3Byb2NlZHVyZV9hcmdzKGFkZHJlc3Mub2JqZWN0SWQsIHRydWUp KTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lkZW50 aXR5fXMgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJCSAib2JqdHlwZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlw ZSwgZmFsc2UpLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50LAor CQkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJ CQlSZWxlYXNlU3lzQ2FjaGUocHJvY3R1cCk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9C SkVDVF9PUENMQVNTOgorCQkJeworCQkJCUhlYXBUdXBsZQlvcGNUdXA7CisJCQkJRm9ybV9wZ19v cGNsYXNzIG9wY0Zvcm07CisJCQkJTGlzdAkgICAqb2xkbmFtZXM7CisJCQkJY2hhcgkgICAqc2No ZW1hbmFtZTsKKwkJCQljaGFyCSAgICpvcGNuYW1lOworCisJCQkJb3BjVHVwID0gU2VhcmNoU3lz Q2FjaGUxKENMQU9JRCwgT2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wY1R1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBvcGNsYXNzIHdpdGggT0lEICV1IiwKKwkJCQkJCSBhZGRyZXNzLm9i amVjdElkKTsKKworCQkJCW9wY0Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJVQ1Qob3Bj VHVwKTsKKworCQkJCW9sZG5hbWVzID0gbGlzdF9jb3B5X3RhaWwoKExpc3QgKikgbm9kZS0+b2Jq ZWN0LCAxKTsKKworCQkJCS8qIERlY29uc3RydWN0IHRoZSBuYW1lIGxpc3QgKi8KKwkJCQlEZWNv bnN0cnVjdFF1YWxpZmllZE5hbWUob2xkbmFtZXMsICZzY2hlbWFuYW1lLCAmb3BjbmFtZSk7CisK KwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1E IFVTSU5HICV7aW5kZXhfbWV0aG9kfXMgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgNCwKKwkJCQkJ CQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5 cGUobm9kZS0+cmVuYW1lVHlwZSwgZmFsc2UpLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wY0Zvcm0tPm9w Y25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCSAgb3BjbmFtZSksCisJCQkJCQkJCQkgImluZGV4 X21ldGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgZ2V0X2FtX25hbWUob3BjRm9ybS0+ b3BjbWV0aG9kKSwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5l d25hbWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKG9wY1R1cCk7CisJCQl9CisJCQlicmVhazsK KworCQljYXNlIE9CSkVDVF9PUEZBTUlMWToKKwkJCXsKKwkJCQlIZWFwVHVwbGUJb3BmVHVwOwor CQkJCUhlYXBUdXBsZQlhbVR1cDsKKwkJCQlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJCQkJ Rm9ybV9wZ19hbQlhbUZvcm07CisJCQkJTGlzdAkgICAqb2xkbmFtZXM7CisJCQkJY2hhcgkgICAq c2NoZW1hbmFtZTsKKwkJCQljaGFyCSAgICpvcGZuYW1lOworCisJCQkJb3BmVHVwID0gU2VhcmNo U3lzQ2FjaGUxKE9QRkFNSUxZT0lELCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlpZiAoIUhlYXBU dXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmpl Y3RJZCk7CisJCQkJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVw KTsKKworCQkJCWFtVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVt KG9wZkZvcm0tPm9wZm1ldGhvZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChhbVR1cCkp CisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9k IHdpdGggT0lEICV1IiwKKwkJCQkJCSBvcGZGb3JtLT5vcGZtZXRob2QpOworCisJCQkJYW1Gb3Jt ID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwkJCQlvbGRuYW1lcyA9IGxpc3Rf Y29weV90YWlsKChMaXN0ICopIG5vZGUtPm9iamVjdCwgMSk7CisKKwkJCQkvKiBEZWNvbnN0cnVj dCB0aGUgbmFtZSBsaXN0ICovCisJCQkJRGVjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKG9sZG5hbWVz LCAmc2NoZW1hbmFtZSwgJm9wZm5hbWUpOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFM VEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCBVU0lORyAle2luZGV4X21ldGhvZH1zIFJFTkFN RSBUTyAle25ld25hbWV9SSIsIDQsCisJCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNlKSwK KwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkg IG9wZm5hbWUpLAorCQkJCQkJCQkJICJpbmRleF9tZXRob2QiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJCQkJIE5hbWVTdHIoYW1Gb3JtLT5hbW5hbWUpLAorCQkJCQkJCQkJICJuZXduYW1lIiwgT2Jq VHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUoYW1UdXAp OworCQkJCVJlbGVhc2VTeXNDYWNoZShvcGZUdXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2Fz ZSBPQkpFQ1RfU0NIRU1BOgorCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFNDSEVNQSAl e2lkZW50aXR5fUkgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMiwKKwkJCQkJCQkJICJpZGVudGl0 eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJCSAibmV3bmFtZSIsIE9i alR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1Rf RkRXOgorCQljYXNlIE9CSkVDVF9MQU5HVUFHRToKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9TRVJW RVI6CisJCWNhc2UgT0JKRUNUX1BVQkxJQ0FUSU9OOgorCQkJcmV0ID0gbmV3X29ianRyZWVfVkEo IkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9cyBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCAz LAorCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgc3RyaW5naWZ5 X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSwgZmFsc2UpLAorCQkJCQkJCQkgImlkZW50aXR5Iiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHN0clZhbChjYXN0Tm9kZShTdHJpbmcsIG5vZGUtPm9i amVjdCkpLAorCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1l KTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1JVTEU6CisJCQl7CisJCQkJSGVhcFR1cGxl CXJld3JUdXA7CisJCQkJRm9ybV9wZ19yZXdyaXRlIHJld3JGb3JtOworCQkJCVJlbGF0aW9uCXBn X3Jld3JpdGU7CisKKwkJCQlwZ19yZXdyaXRlID0gcmVsYXRpb25fb3BlbihSZXdyaXRlUmVsYXRp b25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlyZXdyVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0 X2J5X29pZChwZ19yZXdyaXRlLCBBbnVtX3BnX3Jld3JpdGVfb2lkLCBhZGRyZXNzLm9iamVjdElk KTsKKwkJCQlyZXdyRm9ybSA9IChGb3JtX3BnX3Jld3JpdGUpIEdFVFNUUlVDVChyZXdyVHVwKTsK KworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBSVUxFICV7cnVsZW5hbWV9SSBPTiAl e2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJCSAicnVsZW5h bWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJl bGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgcmV3ckZvcm0tPmV2X2NsYXNzKSwK KwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCQkJ CXJlbGF0aW9uX2Nsb3NlKHBnX3Jld3JpdGUsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9CisJCQli cmVhazsKKworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJeworCQkJCUhlYXBUdXBsZQl0cmln VHVwOworCQkJCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsKKwkJCQlSZWxhdGlvbglwZ190cmln Z2VyOworCisJCQkJcGdfdHJpZ2dlciA9IHJlbGF0aW9uX29wZW4oVHJpZ2dlclJlbGF0aW9uSWQs IEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJdHJpZ1R1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9v aWQocGdfdHJpZ2dlciwgZ2V0X29iamVjdF9hdHRudW1fb2lkKGFkZHJlc3MuY2xhc3NJZCksIGFk ZHJlc3Mub2JqZWN0SWQpOworCQkJCXRyaWdGb3JtID0gKEZvcm1fcGdfdHJpZ2dlcikgR0VUU1RS VUNUKHRyaWdUdXApOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFRSSUdHRVIg JXt0cmlnZ2VybmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCAz LAorCQkJCQkJCQkJICJ0cmlnZ2VybmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUs CisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJ CSB0cmlnRm9ybS0+dGdyZWxpZCksCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5n LCBub2RlLT5uZXduYW1lKTsKKworCQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3RyaWdnZXIsIEFjY2Vz c1NoYXJlTG9jayk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9DT0xMQVRJT046 CisJCWNhc2UgT0JKRUNUX1NUQVRJU1RJQ19FWFQ6CisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCWNh c2UgT0JKRUNUX0NPTlZFUlNJT046CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJY2FzZSBPQkpF Q1RfVFNESUNUSU9OQVJZOgorCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJY2FzZSBPQkpFQ1Rf VFNURU1QTEFURToKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJeworCQkJCUhl YXBUdXBsZQlvYmpUdXA7CisJCQkJUmVsYXRpb24JY2F0YWxvZzsKKwkJCQlEYXR1bQkJb2JqbnNw OworCQkJCWJvb2wJCWlzbnVsbDsKKwkJCQlBdHRyTnVtYmVyCUFudW1fbmFtZXNwYWNlOworCQkJ CUxpc3QJICAgKmlkZW50aXR5ID0gY2FzdE5vZGUoTGlzdCwgbm9kZS0+b2JqZWN0KTsKKworCQkJ CS8qIE9idGFpbiBvYmplY3QgdHVwbGUgKi8KKwkJCQljYXRhbG9nID0gcmVsYXRpb25fb3Blbihh ZGRyZXNzLmNsYXNzSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJb2JqVHVwID0gZ2V0X2NhdGFs b2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBnZXRfb2JqZWN0X2F0dG51bV9vaWQoYWRkcmVzcy5j bGFzc0lkKSwgYWRkcmVzcy5vYmplY3RJZCk7CisKKwkJCQkvKiBPYnRhaW4gbmFtZXNwYWNlICov CisJCQkJQW51bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lc3BhY2UoYWRkcmVz cy5jbGFzc0lkKTsKKwkJCQlvYmpuc3AgPSBoZWFwX2dldGF0dHIob2JqVHVwLCBBbnVtX25hbWVz cGFjZSwKKwkJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwgJmlzbnVsbCk7CisJ CQkJaWYgKGlzbnVsbCkKKwkJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTlVMTCBuYW1lc3BhY2Ui KTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lkZW50 aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJCSAib2JqdHlwZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlw ZSwgZmFsc2UpLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKERhdHVtR2V0T2JqZWN0SWQob2JqbnNwKSwKKwkJ CQkJCQkJCQkJCQkJCSAgc3RyVmFsKGxsYXN0KGlkZW50aXR5KSkpLAorCQkJCQkJCQkJICJuZXdu YW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQkJcmVsYXRpb25fY2xvc2Uo Y2F0YWxvZywgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6 CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgJWQiLCBub2RlLT5yZW5h bWVUeXBlKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIEFsdGVy T2JqZWN0RGVwZW5kc1N0bXQgKEFMVEVSIC4uLiBERVBFTkRTIE9OIC4uLikuCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIEFMVEVSIElOREVYICV7aWRlbnRpdHl9RCAle25vfXMgREVQRU5EUyBP TiBFWFRFTlNJT04gJXtuZXduYW1lfUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9B bHRlckRlcGVuZFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJP YmplY3REZXBlbmRzU3RtdCAqbm9kZSA9IChBbHRlck9iamVjdERlcGVuZHNTdG10ICopIHBhcnNl dHJlZTsKKwlPYmpUcmVlICAgICpyZXQgPSBOVUxMOworCisJaWYgKG5vZGUtPm9iamVjdFR5cGUg PT0gT0JKRUNUX0lOREVYKQorCXsKKwkJT2JqVHJlZSAgICAqcXVhbGlmaWVkOworCQlSZWxhdGlv bglyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwkJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwt PnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKTsKKwkJ cmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJcmV0ID0gbmV3 X29ianRyZWVfVkEoIkFMVEVSIElOREVYICV7aWRlbnRpdHl9RCAle25vfXMgREVQRU5EUyBPTiBF WFRFTlNJT04gJXtuZXduYW1lfUkiLCAzLAorCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LCBxdWFsaWZpZWQsCisJCQkJCQkJICJubyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIG5v ZGUtPnJlbW92ZSA/ICJOTyIgOiAiIiwKKwkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5n LCBzdHJWYWwobm9kZS0+ZXh0bmFtZSkpOworCX0KKwllbHNlCisJCWVsb2coTE9HLCAidW5yZWNv Z25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJCSAoaW50KSBub2Rl VGFnKHBhcnNldHJlZSkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEhlbHBlciBmb3Ig ZGVwYXJzZV9DcmVhdGVQdWJsaWNhdGlvblN0bXQgYW5kIGRlcGFyc2VfQWx0ZXJQdWJsaWNhdGlv blN0bXQuCisgKi8KK3N0YXRpYyB2b2lkCitkZXBhcnNlX1B1YmxpY2F0aW9uT2JqZWN0cyhMaXN0 ICpyZWxzLCBMaXN0ICpzY2hlbWFzLAorCQkJCQkJICAgTGlzdCAqKnB1YnJlbHMsIExpc3QgKipw dWJzY2hlbWFzKQoreworCUxpc3RDZWxsICAgKmxjMTsKKwlMaXN0Q2VsbCAgICpsYzI7CisKKwkq cHVicmVscyA9IE5JTDsKKwkqcHVic2NoZW1hcyA9IE5JTDsKKworCWZvcmVhY2gobGMxLCByZWxz KQorCXsKKwkJT2JqVHJlZSAgICAqdG1wX3JlbDsKKwkJTGlzdAkgICAqY29sbGlzdCA9IE5JTDsK KwkJUmVsYXRpb24JcmVsYXRpb247CisKKwkJcHVibGljYXRpb25fcmVsICpwdWJfcmVsID0gKHB1 YmxpY2F0aW9uX3JlbCAqKSBsZmlyc3QobGMxKTsKKworCQlyZWxhdGlvbiA9IHJlbGF0aW9uX29w ZW4ocHViX3JlbC0+cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJdG1wX3JlbCA9IG5ld19v Ymp0cmVlX1ZBKCIle3RhYmxlbmFtZX1EIiwgMSwKKwkJCQkJCQkJICJ0YWJsZW5hbWUiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5y ZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWxhdGlvbikpKTsKKworCQlpZiAocHViX3JlbC0+Y29sdW1uTGlzdCkKKwkJeworCQkJ Zm9yZWFjaChsYzIsIHB1Yl9yZWwtPmNvbHVtbkxpc3QpCisJCQkJY29sbGlzdCA9IGxhcHBlbmQo Y29sbGlzdCwKKwkJCQkJCQkJICBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwobGZpcnN0KGxjMikp KSk7CisKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX3JlbCwgIigle2NvbHM6LCB9cykiLCBj b2xsaXN0KTsKKwkJfQorCisJCWlmIChwdWJfcmVsLT53aGVyZUNsYXVzZSkKKwkJeworCQkJTGlz dAkgICAqY29udGV4dDsKKwkJCWNoYXIJICAgKndoZXJlQ2xhdXNlOworCisJCQljb250ZXh0ID0g ZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJ CQkJCQkJCQkJICBwdWJfcmVsLT5yZWxpZCk7CisKKwkJCS8qIERlcGFyc2UgdGhlIGV4cHJlc3Np b24gKi8KKwkJCXdoZXJlQ2xhdXNlID0KKwkJCQlkZXBhcnNlX2V4cHJlc3Npb24ocHViX3JlbC0+ d2hlcmVDbGF1c2UsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcF9yZWwsICJXSEVSRSAle3doZXJlfXMiLCAid2hlcmUiLCB3aGVyZUNsYXVzZSk7 CisJCX0KKworCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CQkqcHVicmVscyA9IGxhcHBlbmQoKnB1YnJlbHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9yZWwp KTsKKwl9CisKKwlmb3JlYWNoKGxjMSwgc2NoZW1hcykKKwkJKiBwdWJzY2hlbWFzID0gbGFwcGVu ZCgqcHVic2NoZW1hcywKKwkJCQkJCQkgICBuZXdfc3RyaW5nX29iamVjdChnZXRfbmFtZXNwYWNl X25hbWUobGZpcnN0X29pZChsYzEpKSkpOworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBQ VUJMSUNBVElPTiBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBQ VUJMSUNBVElPTiAle2lkZW50aXR5fXMgRk9SIEFMTCBUQUJMRVMgV0lUSCAoJXt3aXRoOiwgfXMp CisgKglPUgorICogQ1JFQVRFIFBVQkxJQ0FUSU9OICV7aWRlbnRpdHl9cyBGT1IgVEFCTEUgJXt0 YWJsZXM6LCB9cyBXSVRIICgle3dpdGg6LCB9cykKKyAqCU9SCisgKiBDUkVBVEUgUFVCTElDQVRJ T04gJXtpZGVudGl0eX1zIEZPUiBUQUJMRVMgSU4gU0NIRU1BICV7c2NoZW1hczosIH1zCisgKiBX SVRIICgle3dpdGg6LCB9cykKKyAqCU9SCisgKiBDUkVBVEUgUFVCTElDQVRJT04gJXtpZGVudGl0 eX1zIEZPUiBUQUJMRSAle3RhYmxlczosIH1zLAorICogVEFCTEVTIElOIFNDSEVNQSAle3NjaGVt YXM6LCB9cyBXSVRIICgle3dpdGg6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9DcmVhdGVQdWJsaWNhdGlvblN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJ CW9iamVjdElkID0gY21kLT5kLmNyZWF0ZXB1Yi5hZGRyZXNzLm9iamVjdElkOworCUNyZWF0ZVB1 YmxpY2F0aW9uU3RtdCAqbm9kZSA9IChDcmVhdGVQdWJsaWNhdGlvblN0bXQgKikgY21kLT5wYXJz ZXRyZWU7CisJT2JqVHJlZSAgICAqY3JlYXRlUHViOworCUhlYXBUdXBsZQlwdWJ0dXA7CisJRm9y bV9wZ19wdWJsaWNhdGlvbiBwdWJmb3JtOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENl bGwgICAqY2VsbDsKKwlMaXN0CSAgICpyZWxsaXN0ID0gTklMOworCUxpc3QJICAgKnNjaGxpc3Qg PSBOSUw7CisKKwkvKiBEb24ndCBkZXBhcnNlIHNxbCBjb21tYW5kcyBnZW5lcmF0ZWQgd2hpbGUg Y3JlYXRpbmcgZXh0ZW5zaW9uICovCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uKQorCQlyZXR1cm4g TlVMTDsKKworCS8qIEZpbmQgdGhlIHBnX3B1YmxpY2F0aW9uIGVudHJ5IGFuZCBvcGVuIHRoZSBj b3JyZXNwb25kaW5nIHJlbGF0aW9uICovCisJcHVidHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBVQkxJ Q0FUSU9OT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHB1YnR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBw dWJsaWNhdGlvbiB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJcHViZm9ybSA9IChG b3JtX3BnX3B1YmxpY2F0aW9uKSBHRVRTVFJVQ1QocHVidHVwKTsKKwlwdWJmb3JtLT5vaWQgPSBw dWJmb3JtLT5vaWQ7CisKKwljcmVhdGVQdWIgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFBVQkxJ Q0FUSU9OICV7aWRlbnRpdHl9cyIsIDEsCisJCQkJCQkJICAgImlkZW50aXR5IiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCQkgICBOYW1lU3RyKHB1YmZvcm0tPnB1Ym5hbWUpKTsKKworCS8qIEZPUiBB TEwgVEFCTEVTIHB1YmxpY2F0aW9uICovCisJaWYgKHB1YmZvcm0tPnB1YmFsbHRhYmxlcykKKwkJ YXBwZW5kX2Zvcm1hdF9zdHJpbmcoY3JlYXRlUHViLCAiRk9SIEFMTCBUQUJMRVMiKTsKKwllbHNl CisJeworCQlkZXBhcnNlX1B1YmxpY2F0aW9uT2JqZWN0cyhjbWQtPmQuY3JlYXRlcHViLnJlbHMs CisJCQkJCQkJCSAgIGNtZC0+ZC5jcmVhdGVwdWIuc2NoZW1hcywKKwkJCQkJCQkJICAgJnJlbGxp c3QsICZzY2hsaXN0KTsKKworCQkvKiBBcHBlbmQgdGhlIHB1YmxpY2F0aW9uIHRhYmxlcyAqLwor CQlpZiAocmVsbGlzdCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QoY3JlYXRlUHViLCAiRk9SIFRB QkxFICV7dGFibGVzOiwgfXMiLCByZWxsaXN0KTsKKworCQkvKiBBcHBlbmQgdGhlIHB1YmxpY2F0 aW9uIHNjaGVtYXMgKi8KKwkJaWYgKHNjaGxpc3QpCisJCXsKKwkJCWlmIChyZWxsaXN0KQorCQkJ CWFwcGVuZF9mb3JtYXRfc3RyaW5nKGNyZWF0ZVB1YiwgIiwgVEFCTEVTIElOIFNDSEVNQSIpOwor CQkJZWxzZQorCQkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGNyZWF0ZVB1YiwgIkZPUiBUQUJMRVMg SU4gU0NIRU1BIik7CisKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QoY3JlYXRlUHViLCAiJXtzY2hl bWFzOiwgfXMiLCBzY2hsaXN0KTsKKwkJfQorCX0KKworCS8qIFdJVEggY2xhdXNlICovCisJZm9y ZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJT2JqVHJlZSAgICAqdG1wX29iajsKKwkJ RGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCXRtcF9vYmog PSBkZXBhcnNlX0RlZkVsZW0ob3B0LCBmYWxzZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGNy ZWF0ZVB1YiwgIldJVEggKCV7d2l0aDosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hl KHB1YnR1cCk7CisJcmV0dXJuIGNyZWF0ZVB1YjsKK30KKworLyoKKyAqIERlcGFyc2UgYSBBTFRF UiBQVUJMSUNBVElPTiBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVS IFBVQkxJQ0FUSU9OICV7aWRlbnRpdHl9cyBBRER8RFJPUHxTRVQgVEFCTEUgJXt0YWJsZXM6LCB9 cworICogCU9SCisgKiBBTFRFUiBQVUJMSUNBVElPTiAle2lkZW50aXR5fXMgQUREfERST1B8U0VU IFRBQkxFUyBJTiBTQ0hFTUEgJXtzY2hlbWFzOiwgfXMKKyAqCU9SCisgKiBBTFRFUiBQVUJMSUNB VElPTiAle2lkZW50aXR5fXMgQUREfERST1B8U0VUIFRBQkxFICV7dGFibGVzOiwgfXMsCisgKiBU QUJMRVMgSU4gU0NIRU1BICV7c2NoZW1hczosIH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQWx0ZXJQdWJsaWNhdGlvblN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9p ZAkJCW9iamVjdElkID0gY21kLT5kLmNyZWF0ZXB1Yi5hZGRyZXNzLm9iamVjdElkOworCUFsdGVy UHVibGljYXRpb25TdG10ICpub2RlID0gKEFsdGVyUHVibGljYXRpb25TdG10ICopIGNtZC0+cGFy c2V0cmVlOworCU9ialRyZWUgICAgKmFsdGVycHViOworCUhlYXBUdXBsZQlwdWJ0dXA7CisJRm9y bV9wZ19wdWJsaWNhdGlvbiBwdWJmb3JtOworCUxpc3RDZWxsICAgKmNlbGw7CisJTGlzdAkgICAq cmVsbGlzdCA9IE5JTDsKKwlMaXN0CSAgICpzY2hsaXN0ID0gTklMOworCisJLyogRG9uJ3QgZGVw YXJzZSBzcWwgY29tbWFuZHMgZ2VuZXJhdGVkIHdoaWxlIGNyZWF0aW5nIGV4dGVuc2lvbiAqLwor CWlmIChjbWQtPmluX2V4dGVuc2lvbikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBGaW5kIHRoZSBw Z19wdWJsaWNhdGlvbiBlbnRyeSBhbmQgb3BlbiB0aGUgY29ycmVzcG9uZGluZyByZWxhdGlvbiAq LworCXB1YnR1cCA9IFNlYXJjaFN5c0NhY2hlMShQVUJMSUNBVElPTk9JRCwgT2JqZWN0SWRHZXRE YXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwdWJ0dXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHVibGljYXRpb24gd2l0aCBPSUQgJXUi LAorCQkJIG9iamVjdElkKTsKKwlwdWJmb3JtID0gKEZvcm1fcGdfcHVibGljYXRpb24pIEdFVFNU UlVDVChwdWJ0dXApOworCisJcHViZm9ybS0+b2lkID0gcHViZm9ybS0+b2lkOworCisJYWx0ZXJw dWIgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgUFVCTElDQVRJT04gJXtpZGVudGl0eX1zIiwgMSwK KwkJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJICBOYW1lU3RyKHB1 YmZvcm0tPnB1Ym5hbWUpKTsKKworCWlmIChub2RlLT5vcHRpb25zKQorCXsKKwkJLyogU0VUIG9w dGlvbiAqLworCQlMaXN0CSAgICpsaXN0ID0gTklMOworCisJCWZvcmVhY2goY2VsbCwgbm9kZS0+ b3B0aW9ucykKKwkJeworCQkJT2JqVHJlZSAgICAqdG1wX29iajsKKwkJCURlZkVsZW0gICAgKm9w dCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQkJdG1wX29iaiA9IGRlcGFyc2VfRGVm RWxlbShvcHQsIGZhbHNlKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcF9vYmopKTsKKwkJfQorCisJCS8qIEFwcGVuZCB0aGUgcHVibGljYXRpb24gb3B0aW9u cyAqLworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVycHViLCAiU0VUICgle29wdGlvbnM6LCB9 cykiLCBsaXN0KTsKKworCQlSZWxlYXNlU3lzQ2FjaGUocHVidHVwKTsKKwkJcmV0dXJuIGFsdGVy cHViOworCX0KKworCWlmIChub2RlLT5hY3Rpb24gPT0gQVBfQWRkT2JqZWN0cykKKwkJYXBwZW5k X2Zvcm1hdF9zdHJpbmcoYWx0ZXJwdWIsICJBREQiKTsKKwllbHNlIGlmIChub2RlLT5hY3Rpb24g PT0gQVBfRHJvcE9iamVjdHMpCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVycHViLCAiRFJP UCIpOworCWVsc2UKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJwdWIsICJTRVQiKTsKKwor CWRlcGFyc2VfUHVibGljYXRpb25PYmplY3RzKGNtZC0+ZC5hbHRlcnB1Yi5yZWxzLCBjbWQtPmQu YWx0ZXJwdWIuc2NoZW1hcywKKwkJCQkJCQkgICAmcmVsbGlzdCwgJnNjaGxpc3QpOworCisJLyog QXBwZW5kIHRoZSBwdWJsaWNhdGlvbiB0YWJsZXMgKi8KKwlpZiAocmVsbGlzdCkKKwkJYXBwZW5k X2FycmF5X29iamVjdChhbHRlcnB1YiwgIlRBQkxFICV7dGFibGVzOiwgfXMiLCByZWxsaXN0KTsK KworCWlmIChzY2hsaXN0KQorCXsKKwkJaWYgKGNtZC0+ZC5jcmVhdGVwdWIucmVscykKKwkJCWFw cGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVycHViLCAiLCBUQUJMRVMgSU4gU0NIRU1BIik7CisJCWVs c2UKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVycHViLCAiVEFCTEVTIElOIFNDSEVNQSIp OworCisJCS8qIEFwcGVuZCB0aGUgcHVibGljYXRpb24gc2NoZW1hcyAqLworCQlhcHBlbmRfYXJy YXlfb2JqZWN0KGFsdGVycHViLCAiJXtzY2hlbWFzOiwgfXMiLCBzY2hsaXN0KTsKKwl9CisKKwlS ZWxlYXNlU3lzQ2FjaGUocHVidHVwKTsKKwlyZXR1cm4gYWx0ZXJwdWI7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgUnVsZVN0bXQgKENSRUFURSBSVUxFKS4KKyAqCisgKiBHaXZlbiBhIHJ1bGUgT0lE IGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisg KiByZXByZXNlbnRpbmcgdGhlIHJ1bGUgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogQ1JFQVRFIFJVTEUgJXtvcl9yZXBsYWNlfXMgJXtpZGVudGl0eX1JIEFTIE9OICV7ZXZlbnR9 cyBUTyAle3RhYmxlfUQKKyAqICV7d2hlcmVfY2xhdXNlfXMgRE8gJXtpbnN0ZWFkfXMgJXthY3Rp b25zOiwgfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SdWxlU3RtdChPaWQgb2Jq ZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlSdWxlU3RtdCAgICpub2RlID0gKFJ1bGVTdG10 ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCVJl bGF0aW9uCXBnX3Jld3JpdGU7CisJRm9ybV9wZ19yZXdyaXRlIHJld3JGb3JtOworCUhlYXBUdXBs ZQlyZXdyVHVwOworCVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5OworCURhdHVt CQlldl9xdWFsOworCURhdHVtCQlldl9hY3Rpb25zOworCWJvb2wJCWlzbnVsbDsKKwljaGFyCSAg ICpxdWFsOworCUxpc3QJICAgKmFjdGlvbnM7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0 Q2VsbCAgICpjZWxsOworCWNoYXIJICAgKmV2ZW50X3N0cjsKKworCXBnX3Jld3JpdGUgPSB0YWJs ZV9vcGVuKFJld3JpdGVSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0 KCZrZXksCisJCQkJQW51bV9wZ19yZXdyaXRlX29pZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1i ZXIsCisJCQkJRl9PSURFUSwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9 IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19yZXdyaXRlLCBSZXdyaXRlT2lkSW5kZXhJZCwgdHJ1ZSwK KwkJCQkJCQkgIE5VTEwsIDEsICZrZXkpOworCXJld3JUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNj YW4pOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChyZXdyVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJld3JpdGUgcnVsZSB3aXRoIE9JRCAldSIsCisJCQkgb2Jq ZWN0SWQpOworCisJcmV3ckZvcm0gPSAoRm9ybV9wZ19yZXdyaXRlKSBHRVRTVFJVQ1QocmV3clR1 cCk7CisKKwlldmVudF9zdHIgPSBub2RlLT5ldmVudCA9PSBDTURfU0VMRUNUID8gIlNFTEVDVCIg OgorCQlub2RlLT5ldmVudCA9PSBDTURfVVBEQVRFID8gIlVQREFURSIgOgorCQlub2RlLT5ldmVu dCA9PSBDTURfREVMRVRFID8gIkRFTEVURSIgOgorCQlub2RlLT5ldmVudCA9PSBDTURfSU5TRVJU ID8gIklOU0VSVCIgOiBOVUxMOworCUFzc2VydChldmVudF9zdHIgIT0gTlVMTCk7CisKKwlldl9x dWFsID0gaGVhcF9nZXRhdHRyKHJld3JUdXAsIEFudW1fcGdfcmV3cml0ZV9ldl9xdWFsLAorCQkJ CQkJICAgUmVsYXRpb25HZXREZXNjcihwZ19yZXdyaXRlKSwgJmlzbnVsbCk7CisJZXZfYWN0aW9u cyA9IGhlYXBfZ2V0YXR0cihyZXdyVHVwLCBBbnVtX3BnX3Jld3JpdGVfZXZfYWN0aW9uLAorCQkJ CQkJCSAgUmVsYXRpb25HZXREZXNjcihwZ19yZXdyaXRlKSwgJmlzbnVsbCk7CisKKwlwZ19nZXRf cnVsZWRlZl9kZXRhaWxlZChldl9xdWFsLCBldl9hY3Rpb25zLCAmcXVhbCwgJmFjdGlvbnMpOwor CisJdG1wID0gbmV3X29ianRyZWUoIiIpOworCWlmIChxdWFsKQorCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXAsICJXSEVSRSAle2NsYXVzZX1zIiwgImNsYXVzZSIsIHF1YWwpOworCWVsc2UKKwl7 CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXAsICJXSEVSRSAle2NsYXVzZX1zIik7CisJCWFwcGVu ZF9ub3RfcHJlc2VudCh0bXApOworCX0KKworCWlmIChhY3Rpb25zID09IE5JTCkKKwkJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIk5PVEhJTkciKSk7CisJZWxzZQorCXsK KwkJZm9yZWFjaChjZWxsLCBhY3Rpb25zKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0 cmluZ19vYmplY3QobGZpcnN0KGNlbGwpKSk7CisJfQorCisJcmV0ID0gbmV3X29ianRyZWVfVkEo IkNSRUFURSBSVUxFICV7b3JfcmVwbGFjZX1zICV7aWRlbnRpdHl9SSBBUyBPTiAle2V2ZW50fXMg VE8gJXt0YWJsZX1EICV7d2hlcmVfY2xhdXNlfXMgRE8gJXtpbnN0ZWFkfXMgJXthY3Rpb25zOiwg fXMiLCA3LAorCQkJCQkJICJvcl9yZXBsYWNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2Rl LT5yZXBsYWNlID8gIk9SIFJFUExBQ0UiIDogIiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlw ZVN0cmluZywgbm9kZS0+cnVsZW5hbWUsCisJCQkJCQkgImV2ZW50IiwgT2JqVHlwZVN0cmluZywg ZXZlbnRfc3RyLAorCQkJCQkJICJ0YWJsZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkg cmV3ckZvcm0tPmV2X2NsYXNzKSwKKwkJCQkJCSAid2hlcmVfY2xhdXNlIiwgT2JqVHlwZU9iamVj dCwgdG1wLAorCQkJCQkJICJpbnN0ZWFkIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5p bnN0ZWFkID8gIklOU1RFQUQiIDogIkFMU08iLAorCQkJCQkJICJhY3Rpb25zIiwgT2JqVHlwZUFy cmF5LCBsaXN0KTsKKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UocGdf cmV3cml0ZSwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgQ3JlYXRlVHJhbnNmb3JtU3RtdCAoQ1JFQVRFIFRSQU5TRk9STSkuCisgKgorICog R2l2ZW4gYSB0cmFuc2Zvcm0gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIENSRUFURSBUUkFOU0ZPUk0g Y29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7b3JfcmVwbGFjZX1z IFRSQU5TRk9STSBGT1IgJXt0eXBlbmFtZX1EIExBTkdVQUdFICV7bGFuZ3VhZ2V9SQorICogKCBG Uk9NIFNRTCBXSVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlfXMsIFRPIFNRTCBXSVRIIEZVTkNUSU9O CisgKiAle3NpZ25hdHVyZV90b2Z9cyApCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q3JlYXRlVHJhbnNmb3JtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlD cmVhdGVUcmFuc2Zvcm1TdG10ICpub2RlID0gKENyZWF0ZVRyYW5zZm9ybVN0bXQgKikgcGFyc2V0 cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICpzaWduYXR1cmU7CisJSGVhcFR1 cGxlCXRyZlR1cDsKKwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlG b3JtX3BnX3RyYW5zZm9ybSB0cmZGb3JtOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07CisJ Rm9ybV9wZ19wcm9jIHByb2NGb3JtOworCWludAkJCWk7CisKKwkvKiBHZXQgdGhlIHBnX3RyYW5z Zm9ybSB0dXBsZSAqLworCXRyZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShUUkZPSUQsIE9iamVjdElk R2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHJmVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRyYW5zZm9ybSB3aXRoIE9JRCAl dSIsCisJCQkgb2JqZWN0SWQpOworCXRyZkZvcm0gPSAoRm9ybV9wZ190cmFuc2Zvcm0pIEdFVFNU UlVDVCh0cmZUdXApOworCisJLyogR2V0IHRoZSBjb3JyZXNwb25kaW5nIHBnX2xhbmd1YWdlIHR1 cGxlICovCisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShMQU5HT0lELCB0cmZGb3JtLT50cmZs YW5nKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQobGFuZ1R1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBsYW5ndWFnZSB3aXRoIE9JRCAldSIsCisJCQkgdHJmRm9y bS0+dHJmbGFuZyk7CisJbGFuZ0Zvcm0gPSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VUU1RSVUNUKGxh bmdUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSAle29yX3JlcGxhY2V9cyBU UkFOU0ZPUk0gRk9SICV7dHlwZW5hbWV9RCBMQU5HVUFHRSAle2xhbmd1YWdlfUkiLCAzLAorCQkJ CQkJICJvcl9yZXBsYWNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8g Ik9SIFJFUExBQ0UiIDogIiIsCisJCQkJCQkgInR5cGVuYW1lIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJIHRyZkZvcm0tPnRyZnR5cGUpLAorCQkJCQkJICJsYW5ndWFnZSIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkgTmFtZVN0cihsYW5nRm9ybS0+bGFubmFtZSkpOworCisJLyogRGVwYXJzZSB0 aGUgdHJhbnNmb3JtX2VsZW1lbnRfbGlzdCAqLworCWlmIChPaWRJc1ZhbGlkKHRyZkZvcm0tPnRy ZmZyb21zcWwpKQorCXsKKwkJTGlzdAkgICAqcGFyYW1zID0gTklMOworCisJCS8qIEdldCB0aGUg cGdfcHJvYyB0dXBsZSBmb3IgdGhlIEZST00gRlVOQ1RJT04gKi8KKwkJcHJvY1R1cCA9IFNlYXJj aFN5c0NhY2hlMShQUk9DT0lELCB0cmZGb3JtLT50cmZmcm9tc3FsKTsKKwkJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1IiwKKwkJCQkgdHJmRm9ybS0+dHJmZnJvbXNxbCk7CisJ CXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCS8qCisJ CSAqIENSRUFURSBUUkFOU0ZPUk0gZG9lcyBub3QgY2hhbmdlIGZ1bmN0aW9uIHNpZ25hdHVyZSBz byB3ZSBjYW4gdXNlCisJCSAqIGNhdGFsb2cgdG8gZ2V0IGlucHV0IHR5cGUgT2lkcy4KKwkJICov CisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2Jq VHJlZSAgICAqcGFyYW1fb2JqOworCisJCQlwYXJhbV9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXt0 eXBlfVQiLCAxLAorCQkJCQkJCQkJICAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldLCAtMSkp OworCQkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtX29i aikpOworCQl9CisKKwkJc2lnbmF0dXJlID0gbmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHl9RCAo JXthcmd1bWVudHM6LCB9cykiLCAyLAorCQkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCQkgICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25h bWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCU5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSwKKwkJ CQkJCQkJICAgImFyZ3VtZW50cyIsIE9ialR5cGVBcnJheSwgcGFyYW1zKTsKKworCQlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIoRlJPTSBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZX1z IiwKKwkJCQkJCQkgc2lnbmF0dXJlKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCX0K KwlpZiAoT2lkSXNWYWxpZCh0cmZGb3JtLT50cmZ0b3NxbCkpCisJeworCQlMaXN0CSAgICpwYXJh bXMgPSBOSUw7CisKKwkJLyogQXBwZW5kIGEgJywnIGlmIHRyZmZyb21zcWwgaXMgcHJlc2VudCwg ZWxzZSBhcHBlbmQgJygnICovCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgT2lkSXNWYWxp ZCh0cmZGb3JtLT50cmZmcm9tc3FsKSA/ICIsIiA6ICIoIik7CisKKwkJLyogR2V0IHRoZSBwZ19w cm9jIHR1cGxlIGZvciB0aGUgVE8gRlVOQ1RJT04gKi8KKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0Nh Y2hlMShQUk9DT0lELCB0cmZGb3JtLT50cmZ0b3NxbCk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxp ZChwcm9jVHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmdW5j dGlvbiB3aXRoIE9JRCAldSIsCisJCQkJIHRyZkZvcm0tPnRyZnRvc3FsKTsKKwkJcHJvY0Zvcm0g PSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJLyoKKwkJICogQ1JFQVRF IFRSQU5TRk9STSBkb2VzIG5vdCBjaGFuZ2UgZnVuY3Rpb24gc2lnbmF0dXJlIHNvIHdlIGNhbiB1 c2UKKwkJICogY2F0YWxvZyB0byBnZXQgaW5wdXQgdHlwZSBPaWRzLgorCQkgKi8KKwkJZm9yIChp ID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCQl7CisJCQlPYmpUcmVlICAgICpw YXJhbV9vYmogPSBuZXdfb2JqdHJlZSgiIik7CisKKwkJCXBhcmFtX29iaiA9IG5ld19vYmp0cmVl X1ZBKCIle3R5cGV9VCIsIDEsCisJCQkJCQkJCQkgICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVl c1tpXSwgLTEpKTsKKwkJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVj dChwYXJhbV9vYmopKTsKKwkJfQorCisJCXNpZ25hdHVyZSA9IG5ld19vYmp0cmVlX1ZBKCIle2lk ZW50aXR5fUQgKCV7YXJndW1lbnRzOiwgfXMpIiwgMiwKKwkJCQkJCQkJICAgImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJICAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHByb2NG b3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQlOYW1lU3RyKHByb2NGb3JtLT5wcm9u YW1lKSksCisJCQkJCQkJCSAgICJhcmd1bWVudHMiLCBPYmpUeXBlQXJyYXksIHBhcmFtcyk7CisK KwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiVE8gU1FMIFdJVEggRlVOQ1RJT04gJXtzaWdu YXR1cmVfdG9mfXMiLAorCQkJCQkJCSBzaWduYXR1cmUpOworCQlSZWxlYXNlU3lzQ2FjaGUocHJv Y1R1cCk7CisJfQorCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCAiKSIpOworCisJUmVsZWFz ZVN5c0NhY2hlKGxhbmdUdXApOworCVJlbGVhc2VTeXNDYWNoZSh0cmZUdXApOworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ29tbWVudFN0bXQgd2hlbiBpdCBwZXJ0YWlucyB0 byBhIGNvbnN0cmFpbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENPTU1FTlQgT04gQ09O U1RSQUlOVCAle2lkZW50aXR5fXMgT04gW0RPTUFJTl0gJXtwYXJlbnRvYmp9cyBJUyAle2NvbW1l bnR9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbW1lbnRPbkNvbnN0cmFpbnRT bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ29tbWVudFN0bXQgKm5vZGUg PSAoQ29tbWVudFN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVw bGUJY29uc3RyVHVwOworCUZvcm1fcGdfY29uc3RyYWludCBjb25zdHJGb3JtOworCU9iamVjdEFk ZHJlc3MgYWRkcjsKKworCUFzc2VydChub2RlLT5vYmp0eXBlID09IE9CSkVDVF9UQUJDT05TVFJB SU5UIHx8IG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX0RPTUNPTlNUUkFJTlQpOworCisJY29uc3Ry VHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChjb25zdHJUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgY29uc3RyYWludCB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwljb25zdHJGb3JtID0g KEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvbnN0clR1cCk7CisKKwlpZiAoT2lkSXNW YWxpZChjb25zdHJGb3JtLT5jb25yZWxpZCkpCisJCU9iamVjdEFkZHJlc3NTZXQoYWRkciwgUmVs YXRpb25SZWxhdGlvbklkLCBjb25zdHJGb3JtLT5jb25yZWxpZCk7CisJZWxzZQorCQlPYmplY3RB ZGRyZXNzU2V0KGFkZHIsIFR5cGVSZWxhdGlvbklkLCBjb25zdHJGb3JtLT5jb250eXBpZCk7CisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ09NTUVOVCBPTiBDT05TVFJBSU5UICV7aWRlbnRpdHl9 cyBPTiAle2RvbWFpbn1zICV7cGFyZW50b2JqfXMiLCAzLAorCQkJCQkJICJpZGVudGl0eSIsIE9i alR5cGVTdHJpbmcsIHBzdHJkdXAoTmFtZVN0cihjb25zdHJGb3JtLT5jb25uYW1lKSksCisJCQkJ CQkgImRvbWFpbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgKG5vZGUtPm9ianR5cGUgPT0gT0JK RUNUX0RPTUNPTlNUUkFJTlQpID8gIkRPTUFJTiIgOiAiIiwKKwkJCQkJCSAicGFyZW50b2JqIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRPYmplY3RJZGVudGl0eSgmYWRkciwgZmFsc2UpKTsK KworCS8qIEFkZCB0aGUgY29tbWVudCBjbGF1c2UgKi8KKwlhcHBlbmRfbGl0ZXJhbF9vcl9udWxs KHJldCwgIklTICV7Y29tbWVudH1zIiwgbm9kZS0+Y29tbWVudCk7CisKKwlSZWxlYXNlU3lzQ2Fj aGUoY29uc3RyVHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBDb21t ZW50U3RtdCAoQ09NTUVOVCBPTiAuLi4pLgorICoKKyAqIEdpdmVuIHRoZSBvYmplY3QgYWRkcmVz cyBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRy ZWUgcmVwcmVzZW50aW5nIHRoZSBjb21tZW50IGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIENPTU1FTlQgT04gJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1zIElTICV7Y29tbWVudH1z CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29tbWVudFN0bXQoT2JqZWN0QWRkcmVz cyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ29tbWVudFN0bXQgKm5vZGUgPSAoQ29t bWVudFN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICppZGVu dGl0eTsKKworCS8qCisJICogQ29uc3RyYWludHMgYXJlIHN1ZmZpY2llbnRseSBkaWZmZXJlbnQg dGhhdCBpdCBpcyBlYXNpZXIgdG8gaGFuZGxlIHRoZW0KKwkgKiBzZXBhcmF0ZWx5LgorCSAqLwor CWlmIChub2RlLT5vYmp0eXBlID09IE9CSkVDVF9ET01DT05TVFJBSU5UIHx8CisJCW5vZGUtPm9i anR5cGUgPT0gT0JKRUNUX1RBQkNPTlNUUkFJTlQpCisJeworCQlBc3NlcnQoYWRkcmVzcy5jbGFz c0lkID09IENvbnN0cmFpbnRSZWxhdGlvbklkKTsKKwkJcmV0dXJuIGRlcGFyc2VfQ29tbWVudE9u Q29uc3RyYWludFNtdChhZGRyZXNzLm9iamVjdElkLCBwYXJzZXRyZWUpOworCX0KKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJDT01NRU5UIE9OICV7b2JqdHlwZX1zIiwgMSwKKwkJCQkJCSAib2Jq dHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgKGNoYXIgKikgc3RyaW5naWZ5X29ianR5cGUo bm9kZS0+b2JqdHlwZSwgZmFsc2UpKTsKKworCS8qCisJICogQWRkIHRoZSBvYmplY3QgaWRlbnRp dHkgY2xhdXNlLiAgRm9yIHplcm8gYXJndW1lbnQgYWdncmVnYXRlcyB3ZSBuZWVkCisJICogdG8g YWRkIHRoZSAoKikgYml0OyBpbiBhbGwgb3RoZXIgY2FzZXMgd2UgY2FuIGp1c3QgdXNlCisJICog Z2V0T2JqZWN0SWRlbnRpdHkuCisJICoKKwkgKiBYWFggc2hvdWxkbid0IHdlIGluc3RlYWQgZml4 IHRoZSBvYmplY3QgaWRlbnRpdGllcyBmb3IgemVyby1hcmd1bWVudAorCSAqIGFnZ3JlZ2F0ZXM/ CisJICovCisJaWYgKG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX0FHR1JFR0FURSkKKwl7CisJCUhl YXBUdXBsZQlwcm9jVHVwOworCQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisKKwkJcHJvY1R1cCA9 IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0 SWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSB3aXRoIE9JRCAldSIsCisJCQkJIGFk ZHJlc3Mub2JqZWN0SWQpOworCQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChw cm9jVHVwKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9uYXJncyA9PSAwKQorCQkJaWRlbnRpdHkgPSBw c3ByaW50ZigiJXMoKikiLAorCQkJCQkJCQlxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRf bmFtZXNwYWNlX25hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSksCisJCQkJCQkJCQkJCQkJCSAg IE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisJCWVsc2UKKwkJCWlkZW50aXR5ID0gZ2V0 T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NU dXApOworCX0KKwllbHNlCisJCWlkZW50aXR5ID0gZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3Ms IGZhbHNlKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7aWRlbnRpdHl9cyIsICJp ZGVudGl0eSIsIGlkZW50aXR5KTsKKworCS8qIEFkZCB0aGUgY29tbWVudCBjbGF1c2U7IGNhbiBi ZSBlaXRoZXIgTlVMTCBvciBhIHF1b3RlZCBsaXRlcmFsLiAqLworCWFwcGVuZF9saXRlcmFsX29y X251bGwocmV0LCAiSVMgJXtjb21tZW50fXMiLCBub2RlLT5jb21tZW50KTsKKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgU2VjTGFiZWxTdG10IChTRUNVUklUWSBMQUJFTCkK KyAqCisgKiBHaXZlbiB0aGUgT2JqZWN0QWRkcmVzcyBvZiB0aGUgdGFyZ2V0IG9iamVjdCBhbmQg dGhlIHBhcnNlIHRyZWUgb2YgdGhlCisgKiBTRUNVUklUWSBMQUJFTCBjb21tYW5kLCByZXR1cm4g YW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIFNFQ1VSSVRZIExBQkVMCisgKiBjb21tYW5kLgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRUNVUklUWSBMQUJFTCBGT1IgJXtwcm92aWRlcn1z IE9OICV7b2JqZWN0X3R5cGVfbmFtZX1zICV7aWRlbnRpdHl9cyBJUyAle2xhYmVsfXMKKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9TZWNMYWJlbFN0bXQoT2JqZWN0QWRkcmVzcyBhZGRy ZXNzLCBOb2RlICpwYXJzZXRyZWUpCit7CisJU2VjTGFiZWxTdG10ICpub2RlID0gKFNlY0xhYmVs U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqcmV0OworCisJQXNzZXJ0KG5vZGUtPnBy b3ZpZGVyKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJTRUNVUklUWSBMQUJFTCBGT1IgJXtw cm92aWRlcn1zIE9OICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9cyIsIDMsCisJCQkJCQkgInByb3Zp ZGVyIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cHJvdmlkZXIsCisJCQkJCQkgIm9ianR5cGUiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9ianR5cGUsIGZh bHNlKSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBnZXRPYmplY3RJZGVudGl0 eSgmYWRkcmVzcywgZmFsc2UpKTsKKworCS8qIEFkZCB0aGUgbGFiZWwgY2xhdXNlOyBjYW4gYmUg ZWl0aGVyIE5VTEwgb3IgYSBxdW90ZWQgbGl0ZXJhbC4gKi8KKwlhcHBlbmRfbGl0ZXJhbF9vcl9u dWxsKHJldCwgIklTICV7bGFiZWx9cyIsIG5vZGUtPmxhYmVsKTsKKworCXJldHVybiByZXQ7Cit9 CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlQW1TdG10IChDUkVBVEUgQUNDRVNTIE1FVEhPRCku CisgKgorICogR2l2ZW4gYW4gYWNjZXNzIG1ldGhvZCBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgQ1JF QVRFIEFDQ0VTUyBNRVRIT0QgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JF QVRFIEFDQ0VTUyBNRVRIT0QgJXtpZGVudGl0eX1JIFRZUEUgJXthbV90eXBlfXMgSEFORExFUiAl e2hhbmRsZXJ9RAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUFtU3RtdChP aWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJSGVh cFR1cGxlCWFtVHVwOworCUZvcm1fcGdfYW0JYW1Gb3JtOworCWNoYXIJICAgKmFtdHlwZTsKKwor CWFtVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGFtVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBtZXRob2Qgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVj dElkKTsKKwlhbUZvcm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFtVHVwKTsKKworCXN3aXRj aCAoYW1Gb3JtLT5hbXR5cGUpCisJeworCQljYXNlICdpJzoKKwkJCWFtdHlwZSA9ICJJTkRFWCI7 CisJCQlicmVhazsKKwkJY2FzZSAndCc6CisJCQlhbXR5cGUgPSAiVEFCTEUiOworCQkJYnJlYWs7 CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCB0eXBlICVjIGZvciBhY2Nlc3Mg bWV0aG9kIiwgYW1Gb3JtLT5hbXR5cGUpOworCX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJD UkVBVEUgQUNDRVNTIE1FVEhPRCAle2lkZW50aXR5fUkgVFlQRSAle2FtX3R5cGV9cyBIQU5ETEVS ICV7aGFuZGxlcn1EIiwgMywKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJIE5hbWVTdHIoYW1Gb3JtLT5hbW5hbWUpLAorCQkJCQkJICJhbV90eXBlIiwgT2JqVHlwZVN0 cmluZywgYW10eXBlLAorCQkJCQkJICJoYW5kbGVyIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkgYW1Gb3JtLT5hbWhhbmRsZXIpKTsKKworCVJlbGVhc2VTeXNDYWNoZShhbVR1cCk7CisK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2luZyBvZiBzaW1wbGUgY29t bWFuZHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgY292ZXIgYWxsIGNhc2VzIGhhbmRs ZWQgaW4gUHJvY2Vzc1V0aWxpdHlTbG93LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X3NpbXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJ ZDsKKwlOb2RlCSAgICpwYXJzZXRyZWU7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9TaW1w bGUpOworCisJcGFyc2V0cmVlID0gY21kLT5wYXJzZXRyZWU7CisJb2JqZWN0SWQgPSBjbWQtPmQu c2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlpZiAoY21kLT5pbl9leHRlbnNpb24gJiYgKG5v ZGVUYWcocGFyc2V0cmVlKSAhPSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQpKQorCQlyZXR1cm4gTlVM TDsKKworCS8qIFRoaXMgc3dpdGNoIG5lZWRzIHRvIGhhbmRsZSBldmVyeXRoaW5nIHRoYXQgUHJv Y2Vzc1V0aWxpdHlTbG93IGRvZXMgKi8KKwlzd2l0Y2ggKG5vZGVUYWcocGFyc2V0cmVlKSkKKwl7 CisJCWNhc2UgVF9BbHRlckNvbGxhdGlvblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckNv bGxhdGlvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJEb21haW5TdG10 OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJEb21haW5TdG10KG9iamVjdElkLCBwYXJzZXRyZWUs CisJCQkJCQkJCQkJICAgY21kLT5kLnNpbXBsZS5zZWNvbmRhcnlPYmplY3QpOworCisJCWNhc2Ug VF9BbHRlckVudW1TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJFbnVtU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQ6CisJ CQlyZXR1cm4gZGVwYXJzZV9BbHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdChvYmplY3RJZCwgcGFy c2V0cmVlLAorCQkJCQkJCQkJCQkJCSAgY21kLT5kLnNpbXBsZS5zZWNvbmRhcnlPYmplY3QpOwor CisJCWNhc2UgVF9BbHRlckV4dGVuc2lvblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckV4 dGVuc2lvblN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyRmR3U3Rt dDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyRmR3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KworCQljYXNlIFRfQWx0ZXJGb3JlaWduU2VydmVyU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0Fs dGVyRm9yZWlnblNlcnZlclN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0Fs dGVyRnVuY3Rpb25TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJGdW5jdGlvbihvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJPYmplY3REZXBlbmRzU3RtdDoKKwkJCXJl dHVybiBkZXBhcnNlX0FsdGVyRGVwZW5kU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQlj YXNlIFRfQWx0ZXJPYmplY3RTY2hlbWFTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJPYmpl Y3RTY2hlbWFTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywKKwkJCQkJCQkJCQkJCSBwYXJzZXRy ZWUsCisJCQkJCQkJCQkJCQkgY21kLT5kLnNpbXBsZS5zZWNvbmRhcnlPYmplY3QpOworCisJCWNh c2UgVF9BbHRlck9wZXJhdG9yU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyT3BlcmF0b3JT dG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlck93bmVyU3RtdDoKKwkJ CXJldHVybiBkZXBhcnNlX0FsdGVyT3duZXJTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFy c2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJQb2xpY3lTdG10OgorCQkJcmV0dXJuIGRlcGFyc2Vf QWx0ZXJQb2xpY3lTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlclNl cVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlclNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJl ZSk7CisKKwkJY2FzZSBUX0FsdGVyU3RhdHNTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJT dGF0c1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyVFNEaWN0aW9u YXJ5U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyVFNEaWN0aW9uYXJ5U3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJUeXBlU3RtdDoKKwkJCXJldHVybiBkZXBh cnNlX0FsdGVyVHlwZVNldFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0Fs dGVyVXNlck1hcHBpbmdTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJVc2VyTWFwcGluZ1N0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NvbW1lbnRTdG10OgorCQkJcmV0 dXJuIGRlcGFyc2VfQ29tbWVudFN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUp OworCisJCWNhc2UgVF9Db21wb3NpdGVUeXBlU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NvbXBv c2l0ZVR5cGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVBbVN0 bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVBbVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisKKwkJY2FzZSBUX0NyZWF0ZUNhc3RTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlQ2Fz dFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUNvbnZlcnNpb25T dG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlQ29udmVyc2lvbihvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlRG9tYWluU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0Ny ZWF0ZURvbWFpbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlRW51bVN0 bXQ6CS8qIENSRUFURSBUWVBFIEFTIEVOVU0gKi8KKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUVu dW1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVFeHRlbnNpb25T dG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRXh0ZW5zaW9uU3RtdChvYmplY3RJZCwgcGFy c2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlRmR3U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0Ny ZWF0ZUZkd1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUZvcmVp Z25TZXJ2ZXJTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUZ1bmN0aW9uU3RtdDoKKwkJ CXJldHVybiBkZXBhcnNlX0NyZWF0ZUZ1bmN0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJ CWNhc2UgVF9DcmVhdGVPcEZhbWlseVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVPcEZh bWlseShvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlUExhbmdTdG10Ogor CQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlTGFuZ1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisK KwkJY2FzZSBUX0NyZWF0ZVBvbGljeVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVQb2xp Y3lTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVSYW5nZVN0bXQ6 IC8qIENSRUFURSBUWVBFIEFTIFJBTkdFICovCisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVSYW5n ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVNjaGVtYVN0bXQ6 CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTY2hlbWFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUp OworCisJCWNhc2UgVF9DcmVhdGVTZXFTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU2Vx U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlU3RhdHNTdG10Ogor CQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU3RhdGlzdGljc1N0bXQob2JqZWN0SWQsIHBhcnNldHJl ZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdG10 KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVGb3JlaWduVGFibGVTdG10 OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRm9yZWlnblRhYmxlU3RtdChvYmplY3RJZCwgcGFy c2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlVGFibGVBc1N0bXQ6CS8qIENSRUFURSBNQVRFUklB TElaRUQgVklFVyAqLworCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXRfdmFuaWxs YShvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlVHJhbnNmb3JtU3RtdDoK KwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVRyYW5zZm9ybVN0bXQob2JqZWN0SWQsIHBhcnNldHJl ZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVRyaWdTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRl VHJpZ1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVVzZXJNYXBw aW5nU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVVzZXJNYXBwaW5nU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfRGVmaW5lU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0RlZmluZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCSAgY21kLT5kLnNpbXBs ZS5zZWNvbmRhcnlPYmplY3QpOworCisJCWNhc2UgVF9JbmRleFN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9JbmRleFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX1JlZnJlc2hN YXRWaWV3U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX1JlZnJlc2hNYXRWaWV3U3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfUmVuYW1lU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X1JlbmFtZVN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUpOworCisJCWNhc2Ug VF9SdWxlU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX1J1bGVTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUpOworCisJCWNhc2UgVF9WaWV3U3RtdDoJCS8qIENSRUFURSBWSUVXICovCisJCQlyZXR1cm4g ZGVwYXJzZV9WaWV3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfU2VjTGFi ZWxTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfU2VjTGFiZWxTdG10KGNtZC0+ZC5zaW1wbGUuYWRk cmVzcywgcGFyc2V0cmVlKTsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhMT0csICJ1bnJlY29nbml6 ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLAorCQkJCSAoaW50KSBub2RlVGFn KHBhcnNldHJlZSkpOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogV29ya2hvcnNl IHRvIGRlcGFyc2UgYSBDb2xsZWN0ZWRDb21tYW5kLgorICovCitjaGFyICoKK2RlcGFyc2VfdXRp bGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpCit7 CisJT3ZlcnJpZGVTZWFyY2hQYXRoICpvdmVycmlkZVBhdGg7CisJTWVtb3J5Q29udGV4dCBvbGRj eHQ7CisJTWVtb3J5Q29udGV4dCB0bXBjeHQ7CisJT2JqVHJlZSAgICAqdHJlZTsKKwljaGFyCSAg ICpjb21tYW5kID0gTlVMTDsKKwlTdHJpbmdJbmZvRGF0YSBzdHI7CisKKwkvKgorCSAqIEFsbG9j YXRlIGV2ZXJ5dGhpbmcgZG9uZSBieSB0aGUgZGVwYXJzaW5nIHJvdXRpbmVzIGludG8gYSB0ZW1w IGNvbnRleHQsCisJICogdG8gYXZvaWQgaGF2aW5nIHRvIHNwcmlua2xlIHRoZW0gd2l0aCBtZW1v cnkgaGFuZGxpbmcgY29kZSwgYnV0CisJICogYWxsb2NhdGUgdGhlIG91dHB1dCBTdHJpbmdJbmZv IGJlZm9yZSBzd2l0Y2hpbmcuCisJICovCisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisJdG1wY3h0 ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkg ICAiZGVwYXJzZSBjdHgiLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01JTlNJWkUsCisJ CQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VU X0RFRkFVTFRfTUFYU0laRSk7CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGN4 dCk7CisKKwkvKgorCSAqIE1hbnkgcm91dGluZXMgdW5kZXJseWluZyB0aGlzIG9uZSB3aWxsIGlu dm9rZSBydWxldXRpbHMuYyBmdW5jdGlvbmFsaXR5CisJICogdG8gb2J0YWluIGRlcGFyc2VkIHZl cnNpb25zIG9mIGV4cHJlc3Npb25zLiAgSW4gc3VjaCByZXN1bHRzLCB3ZSB3YW50CisJICogYWxs IG9iamVjdCBuYW1lcyB0byBiZSBxdWFsaWZpZWQsIHNvIHRoYXQgcmVzdWx0cyBhcmUgInBvcnRh YmxlIiB0bworCSAqIGVudmlyb25tZW50cyB3aXRoIGRpZmZlcmVudCBzZWFyY2hfcGF0aCBzZXR0 aW5ncy4gIFJhdGhlciB0aGFuIGluamVjdAorCSAqIHdoYXQgd291bGQgYmUgcmVwZXRpdGl2ZSBj YWxscyB0byBvdmVycmlkZSBzZWFyY2ggcGF0aCBhbGwgb3ZlciB0aGUKKwkgKiBwbGFjZSwgd2Ug ZG8gaXQgY2VudHJhbGx5IGhlcmUuCisJICovCisJb3ZlcnJpZGVQYXRoID0gR2V0T3ZlcnJpZGVT ZWFyY2hQYXRoKEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKKwlvdmVycmlkZVBhdGgtPnNjaGVtYXMg PSBOSUw7CisJb3ZlcnJpZGVQYXRoLT5hZGRDYXRhbG9nID0gZmFsc2U7CisJb3ZlcnJpZGVQYXRo LT5hZGRUZW1wID0gdHJ1ZTsKKwlQdXNoT3ZlcnJpZGVTZWFyY2hQYXRoKG92ZXJyaWRlUGF0aCk7 CisKKwl2ZXJib3NlID0gdmVyYm9zZV9tb2RlOworCisJc3dpdGNoIChjbWQtPnR5cGUpCisJewor CQljYXNlIFNDVF9TaW1wbGU6CisJCQl0cmVlID0gZGVwYXJzZV9zaW1wbGVfY29tbWFuZChjbWQp OworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyVGFibGU6CisJCQl0cmVlID0gZGVwYXJzZV9B bHRlclJlbGF0aW9uKGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfR3JhbnQ6CisJCQl0cmVl ID0gZGVwYXJzZV9HcmFudFN0bXQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVhdGVU YWJsZUFzOgorCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoY21kKTsKKwkJCWJy ZWFrOworCQljYXNlIFNDVF9BbHRlck9wRmFtaWx5OgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJP cEZhbWlseShjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xhc3M6CisJCQl0 cmVlID0gZGVwYXJzZV9DcmVhdGVPcENsYXNzU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWNhc2Ug U0NUX0FsdGVyRGVmYXVsdFByaXZpbGVnZXM6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlckRlZmF1 bHRQcml2aWxlZ2VzU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0NyZWF0ZVB1Ymxp Y2F0aW9uOgorCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlUHVibGljYXRpb25TdG10KGNtZCk7CisJ CQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJQdWJsaWNhdGlvbjoKKwkJCXRyZWUgPSBkZXBhcnNl X0FsdGVyUHVibGljYXRpb25TdG10KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJU U0NvbmZpZzoKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyVFNDb25maWd1cmF0aW9uU3RtdChjbWQp OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBkZXBh cnNlIG5vZGUgdHlwZSAlZCIsIGNtZC0+dHlwZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmln Z2VyLmMKaW5kZXggNDQ3MmUyOC4uYmMwNzJmMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuYwpAQCAtMTgyNiw2ICsxODI2LDggQEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFu ZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xhc3M6CiAJCQljYXNl IFNDVF9BbHRlclRTQ29uZmlnOgogCQkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKKwkJCWNhc2Ug U0NUX0NyZWF0ZVB1YmxpY2F0aW9uOgorCQkJY2FzZSBTQ1RfQWx0ZXJQdWJsaWNhdGlvbjoKIAkJ CQl7CiAJCQkJCWNoYXIJICAgKmlkZW50aXR5OwogCQkJCQljaGFyCSAgICp0eXBlOwpAQCAtMTg0 NSw2ICsxODQ3LDEwIEBAIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCQkJCQlhZGRyID0gY21kLT5kLmF0c2NmZy5hZGRyZXNzOwogCQkJCQllbHNlIGlm IChjbWQtPnR5cGUgPT0gU0NUX0NyZWF0ZVRhYmxlQXMpCiAJCQkJCQlhZGRyID0gY21kLT5kLmN0 YXMuYWRkcmVzczsKKwkJCQkJZWxzZSBpZiAoY21kLT50eXBlID09IFNDVF9DcmVhdGVQdWJsaWNh dGlvbikKKwkJCQkJCWFkZHIgPSBjbWQtPmQuY3JlYXRlcHViLmFkZHJlc3M7CisJCQkJCWVsc2Ug aWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJQdWJsaWNhdGlvbikKKwkJCQkJCWFkZHIgPSBjbWQt PmQuYWx0ZXJwdWIuYWRkcmVzczsKIAogCQkJCQkvKgogCQkJCQkgKiBJZiBhbiBvYmplY3Qgd2Fz IGRyb3BwZWQgaW4gdGhlIHNhbWUgY29tbWFuZCB3ZSBtYXkgZW5kCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNl LmgKaW5kZXggMWEyNzAyYy4uZDUxOWNjNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9k ZGxfZGVwYXJzZS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApAQCAtMTQs NiArMTQsMTYgQEAKIAogI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5LmgiCiAKKy8qCisg KiBSZXByZXNlbnQgdGhlIHB1YmxpY2F0aW9uIHJlbGF0aW9uIGZvciBkZXBhcnNpbmcuCisgKi8K K3R5cGVkZWYgc3RydWN0IHB1YmxpY2F0aW9uX3JlbAoreworCU9pZAkJCXJlbGlkOwkJCS8qIHJl bGF0aW9uIGlkICovCisJTm9kZQkgICAqd2hlcmVDbGF1c2U7CS8qIHJvdyBmaWx0ZXIgKi8KKwlM aXN0CSAgICpjb2x1bW5MaXN0OwkJLyogY29sdW1uIGxpc3QgKi8KK30JCQlwdWJsaWNhdGlvbl9y ZWw7CisKIGV4dGVybiBjaGFyICpkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21t YW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKTsKIGV4dGVybiBjaGFyICpkZXBhcnNlX2RkbF9q c29uX3RvX3N0cmluZyhjaGFyICpqc29uYik7CiBleHRlcm4gY2hhciAqZGVwYXJzZV9kcm9wX2Nv bW1hbmQoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1 ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCBhNGExMjM3Li45NjI1MTMzIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRl L3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKQEAgLTMwLDcgKzMwLDkgQEAgdHlwZWRlZiBlbnVtIENv bGxlY3RlZENvbW1hbmRUeXBlCiAJU0NUX0FsdGVyRGVmYXVsdFByaXZpbGVnZXMsCiAJU0NUX0Ny ZWF0ZU9wQ2xhc3MsCiAJU0NUX0FsdGVyVFNDb25maWcsCi0JU0NUX0NyZWF0ZVRhYmxlQXMKKwlT Q1RfQ3JlYXRlVGFibGVBcywKKwlTQ1RfQ3JlYXRlUHVibGljYXRpb24sCisJU0NUX0FsdGVyUHVi bGljYXRpb24KIH0gQ29sbGVjdGVkQ29tbWFuZFR5cGU7CiAKIC8qCkBAIC05MCw2ICs5MiwyMiBA QCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCQlMaXN0CSAgICpwcm9jZWR1cmVz OwogCQl9CQkJY3JlYXRlb3BjOwogCisJCS8qIENSRUFURSBQVUJMSUNBVElPTiAqLworCQlzdHJ1 Y3QKKwkJeworCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQkJTGlzdAkgICAqcmVsczsKKwkJ CUxpc3QJICAgKnNjaGVtYXM7CisJCX0JCQljcmVhdGVwdWI7CisKKwkJLyogQUxURVIgUFVCTElD QVRJT04gKi8KKwkJc3RydWN0IGFsdGVycHViCisJCXsKKwkJCU9iamVjdEFkZHJlc3MgYWRkcmVz czsKKwkJCUxpc3QJICAgKnJlbHM7CisJCQlMaXN0CSAgICpzY2hlbWFzOworCQl9CQkJYWx0ZXJw dWI7CisKIAkJLyogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiBBREQvQUxURVIvRFJP UCBNQVBQSU5HICovCiAJCXN0cnVjdAogCQl7Ci0tIAoxLjguMy4xCgo= --000000000000846be105f4416101 Content-Type: application/octet-stream; name="v67-0007-Document-DDL-replication-and-DDL-deparser.patch" Content-Disposition: attachment; filename="v67-0007-Document-DDL-replication-and-DDL-deparser.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ldwxbace6 RnJvbSA1NzM3NjljZmI4MGQzMDVkYmI3ZGVhZGEzNjliZjQ4MGY2NzQ2ODZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgOSBGZWIgMjAyMyAwNDoyNzo1MSAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djY3IDcvN10gRG9jdW1lbnQgRERMIHJlcGxpY2F0aW9uIGFuZCBEREwgZGVwYXJzZXIuCgotLS0K IGRvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgfCAxMDU3ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDEwNTcgaW5zZXJ0aW9ucygr KQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgYi9k b2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCmluZGV4IDFiZDU2NjAuLjkyOGUw ZWYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbApAQCAtMTQzNyw2ICsxNDM3 LDEwNjMgQEAgdGVzdF9zdWI9IyBTRUxFQ1QgKiBGUk9NIHQxIE9SREVSIEJZIGlkOwogCiAgPC9z ZWN0MT4KIAorIDxzZWN0MSBpZD0ibG9naWNhbC1yZXBsaWNhdGlvbi1kZGwiPgorICA8dGl0bGU+ RERMIFJlcGxpY2F0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisgICAgRGF0YSBEZWZpbml0aW9uIENv bW1hbmRzIChERExzKSBjYW4gYmUgcmVwbGljYXRlZCB1c2luZyBsb2dpY2FsIHJlcGxpY2F0aW9u LgorICAgIFdoaWxlIGVuYWJsZWQgdGhpcyBmZWF0dXJlIGF1dG9tYXRpY2FsbHkgcmVwbGljYXRl cyBzdXBwb3J0ZWQgRERMIGNvbW1hbmRzCisgICAgdGhhdCBhcmUgc3VjY2Vzc2Z1bGx5IGV4ZWN1 dGVkIG9uIGEgcHVibGlzaGVyIHRvIGEgc3Vic2NyaWJlci4gVGhpcyBpcworICAgIGVzcGVjaWFs bHkgdXNlZnVsIGlmIHlvdSBoYXZlIGxvdHMgc2NoZW1hIGNoYW5nZXMgb3ZlciB0aW1lIHRoYXQg bmVlZCByZXBsaWNhdGlvbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgIEZvciBleGFtcGxl LCB3aGVuIGVuYWJsZWQgYSBDUkVBVEUgVEFCTEUgY29tbWFuZCBleGVjdXRlZCBvbiB0aGUgcHVi bGlzaGVyIGdldHMKKyAgICBXQUwtbG9nZ2VkLCBhbmQgZm9yd2FyZGVkIHRvIHRoZSBzdWJzY3Jp YmVyIHRvIHJlcGxheTsgYSBzdWJzZXF1ZW50ICJBTFRFUgorICAgIFNVQlNDUklQVElPTiAuLi4g UkVGUkVTSCBQVUJMSUNBVElPTiIgaXMgcnVuIG9uIHRoZSBzdWJzY3JpZXIgZGF0YWJhc2Ugc28g YW55CisgICAgZm9sbG93aW5nIERNTCBjaGFuZ2VzIG9uIHRoZSBuZXcgdGFibGUgY2FuIGJlIHJl cGxpY2F0ZWQgd2l0aG91dCBhIGhpdGNoLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICAgRERM IHJlcGxpY2F0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGl0IGNhbiBiZSBlbmFibGVkIGF0 IGRpZmZlcmVudCBsZXZlbHMKKyAgICB1c2luZyB0aGUgZGRsIFBVQkxJQ0FUSU9OIG9wdGlvbi4g VGhpcyBvcHRpb24gY3VycmVudGx5IGhhcyB0d28gbGV2ZWxzIGFuZCBhcmUKKyAgICBvbmx5IGFs bG93ZWQgdG8gYmUgc2V0IGlmIHRoZSBQVUJMSUNBVElPTiBpcyBGT1IgQUxMIFRBQkxFUy4KKyAg PC9wYXJhPgorCisgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+ CisgICAgICAgIGFsbDogdGhpcyBvcHRpb24gZW5hYmxlcyByZXBsaWNhdGlvbiBvZiBhbGwgc3Vw cG9ydGVkIERETCBjb21tYW5kcy4KKyAgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorCisg ICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgIHRhYmxlOiB0aGlzIG9wdGlvbiBl bmFibGVzIHJlcGxpY2F0aW9uIG9mIFRhYmxlIERETCBjb21tYW5kcywKKyAgICAgICAgd2hpY2gg aW5jbHVkZToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgQ1JFQVRFL0FMVEVSL0RST1AgVEFCTEUK KyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorCisgICAgICAgICAg PGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIENSRUFURSBUQUJM RSBBUworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAg ICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgPC9p dGVtaXplZGxpc3Q+CisKKyAgPHNlY3QyIGlkPSJkZGwtcmVwbGljYXRpb24tb3B0aW9uLWV4YW1w bGVzIj4KKyAgICA8dGl0bGU+RXhhbXBsZXMgLSBTZXR1cCBEREwgUmVwbGljYXRpb24gb24gdGhl IFB1Ymxpc2hlcjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIENyZWF0ZSBhIG5ldyBwdWJs aWNhdGlvbiB3aXRoIGFsbCBkZGwgcmVwbGljYXRpb24gZW5hYmxlZDoKKzxwcm9ncmFtbGlzdGlu Zz4KK0NSRUFURSBQVUJMSUNBVElPTiBteXB1YiBGT1IgQUxMIFRBQkxFUyB3aXRoIChkZGwgPSAn YWxsJyk7Cis8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgRW5h YmxlIHRhYmxlIGRkbCByZXBsaWNhdGlvbiBmb3IgYW4gZXhpc3RpbmcgUHVibGljYXRpb246Cis8 cHJvZ3JhbWxpc3Rpbmc+CitBTFRFUiBQVUJMSUNBVElPTiBteXB1YiBTRVQgKGRkbCA9ICd0YWJs ZScpOworPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+CisKKyAgPC9zZWN0Mj4KKworICA8c2VjdDIg aWQ9ImRkbC1yZXBsaWNhdGlvbi1zdXBwb3J0ZWQtY29tbWFuZHMiPgorICAgIDx0aXRsZT5TdXBw b3J0ZWQgRERMIGNvbW1hbmRzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgVGhlIERETCBj b21tYW5kcyBzdXBwb3J0ZWQgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gYXJlIGxpc3RlZCBpbiB0 aGUgZm9sbG93aW5nCisgICAgICBtYXRyaXguIE5vdGUgdGhhdCBnbG9iYWwgY29tbWFuZHMgY2Fu IGJlIGV4ZWN1dGVkIGF0IGFueSBkYXRhYmFzZSBhbmQgYXJlIGN1cnJlbnRseQorICAgICAgbm90 IHN1cHBvcnRlZCBmb3IgcmVwbGljYXRpb24sIGdsb2JhbCBjb21tYW5kcyBpbmNsdWRlIFJPTEUg c3RhdGVtZW50cywgRGF0YWJhc2UKKyAgICAgIHN0YXRlbWVudHMsIFRhYmxlU3BhY2Ugc3RhdGVt ZW50cyBhbmQgc29tZSBvZiB0aGUgR3JhbnRTdG10L1Jldm9rZVN0bXQgaWYgdGhlIHRhcmdldAor ICAgICAgb2JqZWN0IGlzIGEgZ2xvYmFsIG9iamVjdC4KKyAgICA8L3BhcmE+CisKKyAgICA8dGFi bGUgaWQ9ImRkbC1yZXBsaWNhdGlvbi1ieS1jb21tYW5kLXRhZyI+CisgICAgICA8dGl0bGU+RERM IFJlcGxpY2F0aW9uIFN1cHBvcnQgYnkgQ29tbWFuZCBUYWc8L3RpdGxlPgorICAgICAgPHRncm91 cCBjb2xzPSIzIj4KKyAgICAgICAgPGNvbHNwZWMgY29sbmFtZT0iY29sMSIgY29sd2lkdGg9IjIq Ii8+CisgICAgICAgIDxjb2xzcGVjIGNvbG5hbWU9ImNvbDIiIGNvbHdpZHRoPSIxKiIvPgorICAg ICAgICA8Y29sc3BlYyBjb2xuYW1lPSJjb2wzIiBjb2x3aWR0aD0iMSoiLz4KKyAgICAgIDx0aGVh ZD4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+Q29tbWFuZCBUYWc8L2VudHJ5PgorICAg ICAgICA8ZW50cnk+Rm9yIFJlcGxpY2F0aW9uPC9lbnRyeT4KKyAgICAgICAgPGVudHJ5Pk5vdGVz PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgIDwvdGhlYWQ+CisgICAgICA8dGJvZHk+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBB R0dSRUdBVEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgQ0FTVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBDT0xMQVRJ T048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+QUxURVIgQ09OVkVSU0lPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBEQVRBQkFT RTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5BTFRFUiBERUZBVUxUIFBSSVZJTEVHRVM8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIg RE9NQUlOPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIEVWRU5UIFRSSUdHRVI8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIg RVhURU5TSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIEZPUkVJR04gREFUQSBXUkFQUEVSPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkFMVEVSIEZPUkVJR04gVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgRlVOQ1RJT048L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+QUxURVIgSU5ERVg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgTEFOR1VBR0U8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ QUxURVIgTEFSR0UgT0JKRUNUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIE1BVEVSSUFMSVpFRCBWSUVXPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5Y PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkFMVEVSIE9QRVJBVE9SPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIE9QRVJBVE9SIENMQVNT PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkFMVEVSIE9QRVJBVE9SIEZBTUlMWTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBQT0xJ Q1k8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+QUxURVIgUFJPQ0VEVVJFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFBVQkxJQ0FU SU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFJPTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgUk9VVElORTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5BTFRFUiBSVUxFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBTQ0hFTUE8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ QUxURVIgU0VRVUVOQ0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgU0VSVkVSPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVS IFNUQVRJU1RJQ1M8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgU1VCU0NSSVBUSU9OPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFM VEVSIFNZU1RFTTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBUQUJMRTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBUQUJM RVNQQUNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT048L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+QUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBURVhU IFNFQVJDSCBQQVJTRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVEVYVCBTRUFSQ0ggVEVNUExBVEU8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+QUxURVIgVFJBTlNGT1JNPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFRSSUdHRVI8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+QUxURVIgVFlQRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBVU0VSIE1BUFBJTkc8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+QUxURVIgVklFVzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTkFMWVpFPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkJFR0lOPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkNBTEw8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q0hFQ0tQT0lOVDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DTE9TRTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5DTE9TRSBDVVJTT1I8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q0xPU0UgQ1VSU09SIEFMTDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5DTFVTVEVSPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNPTU1FTlQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q09NTUlUPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkNPTU1JVCBQUkVQQVJFRDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DT1BZPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNPUFkg RlJPTTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgQUNDRVNTIE1FVEhPRDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUg QUdHUkVHQVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBDQVNUPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBDT0xM QVRJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIENPTlNUUkFJTlQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIENP TlZFUlNJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIERBVEFCQVNFPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBE T01BSU48L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIEVWRU5UIFRSSUdHRVI8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRF IEVYVEVOU0lPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVI8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+Q1JFQVRFIEZPUkVJR04gVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIEZVTkNUSU9OPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5Y PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkNSRUFURSBJTkRFWDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgTEFOR1VBR0U8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+Q1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBPUEVSQVRP UjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgT1BFUkFUT1IgQ0xBU1M8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIE9Q RVJBVE9SIEZBTUlMWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgUE9MSUNZPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFU RSBQUk9DRURVUkU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFBVQkxJQ0FUSU9OPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNS RUFURSBST0xFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBSVUxFPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBTQ0hF TUE8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFNFUVVFTkNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBTRVJWRVI8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Plg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+Q1JFQVRFIFNUQVRJU1RJQ1M8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFNVQlNDUklQ VElPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFRBQkxFIEFT PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkNSRUFURSBUQUJMRVNQQUNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBURVhUIFNF QVJDSCBDT05GSUdVUkFUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBURVhUIFNFQVJDSCBESUNUSU9O QVJZPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBURVhUIFNFQVJDSCBQQVJTRVI8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JF QVRFIFRFWFQgU0VBUkNIIFRFTVBMQVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBUUkFOU0ZPUk08L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+Q1JFQVRFIFRSSUdHRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFRZUEU8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+Q1JFQVRFIFVTRVIgTUFQUElORzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVklFVzwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5ERUFMTE9DQVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRFQUxMT0NBVEUgQUxMPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRFQ0xB UkUgQ1VSU09SPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkRFTEVURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ESVNDQVJEPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkRJU0NBUkQgQUxMPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRJU0NBUkQgUExBTlM8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RElT Q0FSRCBTRVFVRU5DRVM8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RElTQ0FSRCBURU1QPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRPPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4t PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkRST1AgQUNDRVNTIE1FVEhPRDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIEFHR1JFR0FURTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5EUk9QIENBU1Q8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBDT0xMQVRJT048L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+RFJPUCBDT05TVFJBSU5UPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgQ09OVkVSU0lPTjwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5EUk9QIERBVEFCQVNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgRE9NQUlOPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1Ag RVZFTlQgVFJJR0dFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIEVYVEVOU0lPTjwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9Q IEZPUkVJR04gREFUQSBXUkFQUEVSPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgRk9SRUlHTiBUQUJMRTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5EUk9QIEZVTkNUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgSU5ERVg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ RFJPUCBMQU5HVUFHRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIE1BVEVSSUFMSVpFRCBWSUVXPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkRST1AgT1BFUkFUT1I8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBPUEVSQVRPUiBDTEFTUzwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5EUk9QIE9QRVJBVE9SIEZBTUlMWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIE9XTkVEPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkRST1AgUE9MSUNZPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgUFJPQ0VEVVJFPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRS T1AgUFVCTElDQVRJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBST0xFPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgUk9V VElORTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFJVTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBTQ0hFTUE8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+RFJPUCBTRVFVRU5DRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFNFUlZFUjwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5E Uk9QIFNUQVRJU1RJQ1M8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBTVUJTQ1JJUFRJT048L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ RFJPUCBUQUJMRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFRBQkxFU1BBQ0U8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBU RVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgVEVYVCBTRUFSQ0ggRElD VElPTkFSWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFRFWFQgU0VBUkNIIFBBUlNFUjwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5E Uk9QIFRFWFQgU0VBUkNIIFRFTVBMQVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgVFJBTlNGT1JNPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkRST1AgVFJJR0dFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFRZUEU8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJP UCBVU0VSIE1BUFBJTkc8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBWSUVXPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkVYRUNVVEU8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Pi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5GRVRDSDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5HUkFOVDwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5HUkFOVCBST0xFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPklNUE9SVCBGT1JFSUdOIFNDSEVNQTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5JTlNFUlQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+TElTVEVOPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkxPQUQ8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+TE9DSyBUQUJMRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5NRVJHRTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5NT1ZFPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4t PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPk5PVElGWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5QUkVQQVJFPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlBSRVBBUkUg VFJBTlNBQ1RJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UkVBU1NJR04gT1dORUQ8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UkVGUkVT SCBNQVRFUklBTElaRUQgVklFVzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5SRUlOREVYPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJFTEVB U0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+UkVTRVQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UkVWT0tFPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJFVk9L RSBST0xFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPlJPTExCQUNLPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJPTExCQUNLIFBSRVBBUkVE PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPlNBVkVQT0lOVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5TRUNVUklUWSBMQUJFTDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5TRVQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+U0VUIENPTlNUUkFJTlRTPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlNIT1c8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+U1RBUlQgVFJBTlNBQ1RJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+VU5MSVNURU48L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+VVBEQVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPlZBQ1VVTTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgPC90Ym9k eT4KKyAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3NlY3QyPgorCisgIDxzZWN0MiBp ZD0iZGRsLXJlcGxpY2F0aW9uLWRkbC1kZXBhcnNlciI+CisgICAgPHRpdGxlPkRETCBEZXBhcnNl cjwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBUaGUgRERMIGRlcGFyc2VyIHV0aWxpdHkgaXMg aW52b2tlZCBkdXJpbmcgdGhlIHJlcGxpY2F0aW9uIG9mIERETHMuIFRoZSBEREwKKyAgICAgIGRl cGFyc2VyIGlzIGNhcGFibGUgb2YgY29udmVydGluZyBhIERETCBjb21tYW5kIGludG8gZm9ybWF0 dGVkIEpTT04gYmxvYiwgd2l0aAorICAgICAgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBy ZWNvbnN0cnVjdCB0aGUgRERMIGNvbW1hbmRzIGF0IHRoZSBkZXN0aW5hdGlvbi4gVGhlCisgICAg ICBiZW5lZml0IG9mIHVzaW5nIHRoZSBkZXBhcnNlciBvdXRwdXQgY29tcGFyZWQgdG8gdGhlIG9y aWdpbmFsIGNvbW1hbmQgc3RyaW5nCisgICAgICBpbmNsdWRlczoKKyAgICAgIDxpdGVtaXplZGxp c3Q+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEV2 ZXJ5IGRhdGFiYXNlIG9iamVjdCBpbiB0aGUgZGVwYXJzZWQgb3V0cHV0IGlzIHNjaGVtYS1xdWFs aWZpZWQsIHNvIHRoYXQKKyAgICAgICAgICAgIHRoZXJlIGFyZSBubyBhbWJpZ3VpdGllcyBldmVu IGluIHRoZSBmYWNlIG9mIHNlYXJjaF9wYXRoIGNoYW5nZXMuCisgICAgICAgICAgPC9wYXJhPgor ICAgICAgICA8L2xpc3RpdGVtPgorCisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFy YT4KKyAgICAgICAgICAgIFRoZSBzdHJ1Y3R1cmVkIEpTT04gYW5kIHRoZSBmb3JtYXR0ZWQgb3V0 cHV0IG1ha2VzIGl0IHBvc3NpYmxlIGZvcgorICAgICAgICAgICAgbWFjaGluZSBlZGl0aW5nLiBU aGlzIGNhbiBiZSB1c2VmdWwgaWYgdGhlIHN1YnNjcmliZXIgaXMgb24gYSBkaWZmZXJlbnQKKyAg ICAgICAgICAgIFBHIHZlcnNpb24gYW5kIGhhcyBjZXJ0YWluIERETCBzeW50YXggZGlmZmVyZW5j ZXMgd2hpY2ggbmVlZCB0byBiZQorICAgICAgICAgICAgcmVzb2x2ZWQgYmVmb3JlIGFwcGx5Lgor ICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKworICAgICAgPC9pdGVtaXpl ZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGUgRERMIGRlcGFyc2Vy IGV4cG9zZXMgdHdvIFNRTCBmdW5jdGlvbnM6CisgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBkZGxfZGVwYXJzZV90 b19qc29uOiBnaXZlbiBhIENvbGxlY3RlZENvbW1hbmQgZnJvbSBldmVudCB0cmlnZ2VyLAorICAg ICAgICAgICAgcmV0dXJucyBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgaXQuIFRoZSBjb21tYW5k IGlzIGV4cGFuZGVkIGZ1bGx5CisgICAgICAgICAgICBzbyB0aGF0IHRoZXJlIGFyZSBubyBhbWJp Z3VpdGllcyBldmVuIGluIHRoZSBmYWNlIG9mIHNlYXJjaF9wYXRoCisgICAgICAgICAgICBjaGFu Z2VzLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRl bWl6ZWRsaXN0PgorCisgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZDog RXhwYW5kIEpTT04gZm9ybWF0IERETCBnZW5lcmF0ZWQgYnkKKyAgICAgICAgICAgIGRkbF9kZXBh cnNlX3RvX2pzb24gdG8gYSBwbGFpbiBEREwgY29tbWFuZC4KKyAgICAgICAgICA8L3BhcmE+Cisg ICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cisg IDwvc2VjdDI+CisKKyA8L3NlY3QxPgorCiAgPHNlY3QxIGlkPSJsb2dpY2FsLXJlcGxpY2F0aW9u LWNvbmZsaWN0cyI+CiAgIDx0aXRsZT5Db25mbGljdHM8L3RpdGxlPgogCi0tIAoxLjguMy4xCgo= --000000000000846be105f4416101 Content-Type: application/octet-stream; name="v67-0006-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v67-0006-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ldwxbacc5 RnJvbSBkYzVmODU2NjA5NTY5NmVkNmY2YWZjOGRlY2ZkZjJiMjhlMjY1MTA3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgOSBGZWIgMjAyMyAwNDowMDoyNCAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djY3IDYvN10gU3VwcG9ydCBEREwgcmVwbGljYXRpb24uCgpUbyBzdXBwb3J0IERETCByZXBsaWNh dGlvbiwgd2UgdXNlIGV2ZW50IHRyaWdnZXIgYW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcy4g RHVyaW5nIENSRUFURSBQVUJMSUNBVElPTiB3ZSByZWdpc3RlciBhIGNvbW1hbmQgZW5kIHRyaWdn ZXIgdGhhdApkZXBhcnNlcyB0aGUgRERMIChpZiB0aGUgRERMIGlzIGFubm90YXRlZCBhcyBkZGxy ZXBsb2sgZm9yIERETCByZXBsaWNhdGlvbiBpbgpjbWR0YWdsaXN0LmgpIGFzIGEgSlNPTiBibG9i LCBhbmQgV0FMIGxvZ3MgaXQuIFRoZSBldmVudCB0cmlnZ2VyIGlzIGF1dG9tYXRpY2FsbHkKcmVt b3ZlZCBhdCB0aGUgdGltZSBvZiBEUk9QIFBVQkxJQ0FUSU9OLiBUaGUgV0FMU2VuZGVyIGRlY29k ZXMgdGhlIFdBTCBhbmQgc2VuZHMKaXQgZG93bnN0cmVhbSBzaW1pbGFyIHRvIG90aGVyIERNTCBj b21tYW5kcy4gVGhlIHN1YnNjcmliZXIgdGhlbiBjb252ZXJ0cyBKU09OCmJhY2sgdG8gdGhlIERE TCBjb21tYW5kIHN0cmluZyBhbmQgZXhlY3V0ZXMgaXQuIEluIHRoZSBzdWJzY3JpYmVyLCB3ZSBh bHNvIGFkZAp0aGUgbmV3bHkgYWRkZWQgcmVsIHRvIHBnX3N1YnNjcmlwdGlvbl9yZWwgc28gdGhh dCB0aGUgRE1MIGNoYW5nZXMgb24gdGhlIG5ldwp0YWJsZSBjYW4gYmUgcmVwbGljYXRlZCB3aXRo b3V0IGhhdmluZyB0byBtYW51YWxseSBydW4KIkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVT SCBQVUJMSUNBVElPTiIuCgotIEZvciBub24tcmV3cml0ZSBBTFRFUiBvYmplY3QgY29tbWFuZCBh bmQKLSAgICAgQ1JFQVRFIG9iamVjdCBjb21tYW5kOgp3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGF0 IGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2VyIGFuZCBXQUwgbG9nIHRoZQpkZXBhcnNlZCBq c29uIHN0cmluZy4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwgYW5kIHNlbmRzIGl0IHRv CnN1YnNjcmliZXIgaWYgdGhlIGNyZWF0ZWQvYWx0ZXJlZCB0YWJsZSBpcyBwdWJsaXNoZWQuIEl0 IHN1cHBvcnRzIG1vc3Qgb2YKQUxURVIgVEFCTEUgY29tbWFuZCBleGNlcHQgc29tZSBjb21tYW5k cyhEREwgcmVsYXRlZCB0byBQQVJUSVRJT05FRCBUQUJMRQouLi4pIHRoYXQgaW50cm9kdWNlZCBy ZWNlbnRseSB3aGljaCBoYXZlbid0IGJlZW4gc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50CmRkbF9k ZXBhcnNlciwgd2Ugd2lsbCBzdXBwb3J0IHRoYXQgbGF0ZXIuCgotIEZvciBEUk9QIG9iamVjdDoK VGhlICdjb21tYW5kIHN0YXJ0JyBldmVudCBoYW5kbGVyIGxvZ3MgYSBkZGwgbWVzc2FnZSB3aXRo IHRoZSByZWxpZHMgb2YKdGhlIHRhYmxlcyB0aGF0IGFyZSBkcm9wcGVkIHdoaWNoIHRoZSBvdXRw dXQgcGx1Z2luIChwZ291dHB1dCkgc3RvcmVzIGluCml0cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVy ZSBhZnRlciB2ZXJpZnlpbmcgdGhhdCBpdCBpcyBmb3IgYSB0YWJsZSB0aGF0IGlzCnBhcnQgb2Yg dGhlIHB1YmxpY2F0aW9uLiBMYXRlciB0aGUgJ2NvbW1hbmQgZW5kJyBldmVudCBoYW5kbGVyIHNl bmRzIHRoZQphY3R1YWwgZHJvcCBtZXNzYWdlLiBQZ291dHB1dCBvbiByZWNlaXZpbmcgdGhlIGNv bW1hbmQgZW5kLCBvbmx5IHNlbmRzIG91dAp0aGUgZHJvcCBjb21tYW5kIG9ubHkgaWYgaXQgaXMg Zm9yIG9uZSBvZiB0aGUgcmVsaWRzIG1hcmtlZCBmb3IgZGVsZXRpbmcuClRoZSByZWFzb24gd2Ug aGF2ZSB0byBkbyB0aGlzIGlzIGJlY2F1c2UsIG9uY2UgdGhlIGxvZ2ljYWwgZGVjb2RlcgpyZWNl aXZlcyB0aGUgJ2NvbW1hbmQgZW5kJyBtZXNzYWdlLCAgdGhlIHJlbGlkIG9mIHRoZSB0YWJsZSBp cyBubyBsb25nZXIKdmFsaWQgYXMgaXQgaGFzIGJlZW4gZGVsZXRlZCBhcyBwYXJ0IG9mIGludmFs aWRhdGlvbnMgcmVjZWl2ZWQgZm9yIHRoZQpkcm9wIHRhYmxlIGNvbW1hbmQuIEl0IGlzIG5vIGxv bmdlciBwb3NzaWJsZSB0byB2ZXJpZnkgaWYgdGhlIHRhYmxlIGlzCnBhcnQgb2YgdGhlIHB1Ymxp Y2F0aW9uIGxpc3Qgb3Igbm90LiBUbyBtYWtlIHRoaXMgcG9zc2libGUsIEkgaGF2ZSBhZGRlZAp0 d28gbW9yZSBlbGVtZW50cyB0byB0aGUgZGRsIHhsb2cgYW5kIGRkbCBtZXNzYWdlLCAocmVsaWQg YW5kIGNtZHR5cGUpLgoKV2UgY291bGQgaGF2ZSBhbHNvIGhhbmRsZWQgYWxsIHRoaXMgb24gdGhl IHN1YnNjcmliZXIgc2lkZSBhcyB3ZWxsLCBidXQKdGhhdCB3b3VsZCBtZWFuIHNlbmRpbmcgc3B1 cmlvdXMgZGRsIG1lc3NhZ2VzIGZvciB0YWJsZXMgdGhhdCBhcmUgbm90IHBhcnQKb2YgdGhlIHB1 YmxpY2F0aW9uLgoKLSBGb3IgdGFibGVfcmV3cml0ZSBBTFRFUiBUQUJMRSBjb21tYW5kOgooQUxU RVIgQ09MVU1OIFRZUEUsIEFERCBDT0xVTU4gREVGQVVMVCwgU0VUIExPR0dFRCwgU0VUIEFDQ0VT UyBNRVRIT0QpCgp3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGFuZCBXQUwgbG9nIHRoZSBkZXBhcnNl ZCBqc29uIHN0cmluZyBhdAp0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIuIFRoZSBXQUxTZW5k ZXIgZGVjb2RlcyB0aGUgV0FMIGFuZCBzZW5kcyBpdCB0bwpzdWJzY3JpYmVyIGlmIHRoZSBhbHRl cmVkIHRhYmxlIGlzIHB1Ymxpc2hlZC4gVGhlbiwgdGhlIFdBTFNlbmRlciB3aWxsCmNvbnZlcnQg dGhlIHVwY29taW5nIHJld3JpdGUgSU5TRVJUcyB0byBVUERBVEVzIGFuZCBzZW5kIHRoZW0gdG8K c3Vic2NyaWJlciBzbyB0aGF0IHRoZSBkYXRhIGJldHdlZW4gcHVibGlzaGVyIGFuZCBzdWJzY3Jp YmVyIGNhbiBhbHdheXMgYmUKY29uc2lzdGVudC4gTm90ZSB0aGF0IHRoZSB0YWJsZXMgdGhhdCBw dWJsaXNoIHJld3JpdGUgZGRsIG11c3QgaGF2ZSBhCnJlcGxpY2EgaWRlbnRpdHkgY29uZmlndXJl ZCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHJlcGxpY2F0ZSB0aGUgdXBjb21pbmcKcmV3cml0ZSBV UERBVEVzLgoKV2UgZG8gdGhpcyB3YXkgYmVjYXVzZSBvZiB0d28gcmVhc29uOgooMSkgVGhlIGRh dGEgYmVmb3JlIHRoZSByZXdyaXRlIGRkbCBjb3VsZCBhbHJlYWR5IGJlIGRpZmZlcmVudCBhbW9u ZwpwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIuIFRvIG1ha2Ugc3VyZSB0aGUgZXh0cmEgZGF0YSBp biBzdWJzY3JpYmVyIHdoaWNoCmRvZXNuJ3QgZXhpc3QgaW4gcHVibGlzaGVyIGFsc28gZ2V0IHJl d3JpdHRlbiwgd2UgbmVlZCB0byBsZXQgdGhlCnN1YnNjcmliZXIgZXhlY3V0ZSB0aGUgb3JpZ2lu YWwgcmV3cml0ZSBkZGwgdG8gcmV3cml0ZSBhbGwgdGhlIGRhdGEgYXQKZmlyc3QuCgooMikgdGhl IGRhdGEgYWZ0ZXIgZXhlY3V0aW5nIHJld3JpdGUgZGRsIGNvdWxkIGJlIGRpZmZlcmVudCBhbW9u ZwpwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIoZHVlIHRvIGRpZmZlcmVudCBmdW5jdGlvbnMvb3Bl cmF0b3JzIHVzZWQgZHVyaW5nCnJld3JpdGUpLCBzbyB3ZSBuZWVkIHRvIHJlcGxpY2F0ZSB0aGUg cmV3cml0ZSBVUERBVEVzIHRvIGtlZXAgdGhlIGRhdGEKY29uc2lzdGVudC4KClRPIElNUFJPVkU6 ClRoaXMgYXBwcm9hY2ggY291bGQgYmUgaW1wcm92ZWQgYnkgbGV0dGluZyB0aGUgc3Vic2NyaWJl ciB0cnkgdG8gdXBkYXRlCnRoZSBleHRyYSBkYXRhIGl0c2VsZiBpbnN0ZWFkIG9mIGRvaW5nIGZ1 bGx5IHJld3JpdGUgZGRsIGFuZCB1c2UgdGhlCnVwY29taW5nIHJld3JpdGUgVVBEQVRFcyB0byBy ZXdyaXRlIHRoZSByZXN0IGRhdGEuIFRvIGFjaGlldmUgdGhpcywgd2UKY291bGQgbW9kaWZ5IHRo ZSBkZXBhcnNlZCBqc29uIHN0cmluZyB0byB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIHJld3JpdGUK cGFydCBhbmQgYWRkIHNvbWUgbG9naWMgaW4gc3Vic2NyaWJlciB0byB1cGRhdGUgdGhlIGV4dHJh IGRhdGEuCkJlc2lkZXMsIHdlIG1heSBub3QgbmVlZCB0byBzZW5kIHJld3JpdGUgY2hhbmdlcyBm b3IgYWxsIHR5cGUgb2YgcmV3cml0ZQpkZGwsIGZvciBleGFtcGxlLCBpdCBzZWVtcyBmaW5lIHRv IHNraXAgc2VuZGluZyByZXdyaXRlIGNoYW5nZXMgZm9yIEFMVEVSClRBQkxFIFNFVCBMT0dHRUQg YXMgdGhlIGRhdGEgaW4gdGhlIHRhYmxlIGRvZXNuJ3QgYWN0dWFsbHkgYmUgY2hhbmdlZC4gV2UK Y291bGQgdXNlIHRoZSBkZXBhcnNlciBhbmQgZXZlbnQgdHJpZ2dlciB0byBmaWx0ZXIgdGhlc2Ug ZGRscyBhbmQgc2tpcApzZW5kaW5nIHJld3JpdGUgY2hhbmdlcyBmb3IgdGhlbS4KLS0tCiBzcmMv YmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICAgICAgICAgICB8ICAgMiArCiBz cmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jICAgICAgICAgICAgICAgICAgICB8ICAxMCAr CiBzcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgICAgICAgICAgICAgICB8IDQw OSArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21k cy5jICAgICAgICAgICAgIHwgMjc5ICsrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jICAgICAgICAgICAgICAgICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC9wYXJz ZXIvcGFyc2VfdXRpbGNtZC5jICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbHRyaWdnZXIuYyAgICAgICB8IDM1OCArKysrKysrKysr KysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYyAgICAgICAg ICB8ICA0OSArKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQg ICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAg ICAgICAgICAgIHwgIDQzICsrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3Jk ZXJidWZmZXIuYyAgICB8ICAyMCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93 b3JrZXIuYyAgICAgICAgICAgfCAyNDAgKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgICAgICAgIHwgMTkxICsrKysrKysrLQogc3JjL2JhY2tl bmQvdGNvcC9jbWR0YWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjYgKy0KIHNyYy9i YWNrZW5kL3Rjb3AvdXRpbGl0eS5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE1ICstCiBz cmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jICAgICAgICAgICAgICAgICB8ICAgMiAr CiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgICAgICB8ICAg MiArCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICA5MCArKystCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgMiArCiBzcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAgICAgICAgICAg ICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgNDQgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAg ICAgICAgICAgICAgICAgIHwgIDEyICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRp b24uaCAgICAgICAgICAgICAgIHwgIDE3ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuaCAgICAgICAgICAgICAgIHwgIDE3ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9s b2dpY2FscHJvdG8uaCAgICAgICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9vdXRwdXRfcGx1Z2luLmggICAgICAgICAgICB8ICAxNSArLQogc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vcGdvdXRwdXQuaCAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oICAgICAgICAgICAgfCAgMTIgKwogc3JjL2luY2x1ZGUv dGNvcC9jbWR0YWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNs dWRlL3Rjb3AvY21kdGFnbGlzdC5oICAgICAgICAgICAgICAgICAgICAgIHwgMzg2ICsrKysrKysr LS0tLS0tLS0tCiBzcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oICAgICAgICAgICAgICAgICAg ICAgICB8ICAgMyArLQogLi4uL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQgICAgICAgICAgICAg ICAgICAgICAgfCAgIDcgKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRl X3RhYmxlLnNxbCAgfCAgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dCAg ICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGlj YXRpb24ub3V0ICAgICAgICAgIHwgNDIwICsrKysrKysrKy0tLS0tLS0tLS0KIHNyYy90ZXN0L3N1 YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGljYXRpb24ucGwgICAgIHwgNDY1ICsrKysrKysrKysr KysrKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAg ICAgICAgfCAgIDYgKwogMzggZmlsZXMgY2hhbmdlZCwgMjY4OSBpbnNlcnRpb25zKCspLCA0ODQg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9kZGx0cmlnZ2VyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3Jp cHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5jCmluZGV4IGE5OGZjYWQuLmM1MDVmMjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmMKQEAgLTEwMDUsNiArMTAwNSw4IEBAIEdldFB1YmxpY2F0aW9uKE9pZCBwdWJpZCkK IAlwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlID0gcHViZm9ybS0+cHVidXBkYXRlOwogCXB1Yi0+ cHViYWN0aW9ucy5wdWJkZWxldGUgPSBwdWJmb3JtLT5wdWJkZWxldGU7CiAJcHViLT5wdWJhY3Rp b25zLnB1YnRydW5jYXRlID0gcHViZm9ybS0+cHVidHJ1bmNhdGU7CisJcHViLT5wdWJhY3Rpb25z LnB1YmRkbF9hbGwgPSBwdWJmb3JtLT5wdWJkZGxfYWxsOworCXB1Yi0+cHViYWN0aW9ucy5wdWJk ZGxfdGFibGUgPSBwdWJmb3JtLT5wdWJkZGxfdGFibGU7CiAJcHViLT5wdWJ2aWFyb290ID0gcHVi Zm9ybS0+cHVidmlhcm9vdDsKIAogCVJlbGVhc2VTeXNDYWNoZSh0dXApOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ny ZWF0ZWFzLmMKaW5kZXggZDZjNmQ1MS4uNzdkY2I5YzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMu YwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy90b2FzdGluZy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2NyZWF0ZWFzLmgi CisjaW5jbHVkZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIgogI2luY2x1ZGUgImNvbW1hbmRz L21hdHZpZXcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcmVwYXJlLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvdGFibGVjbWRzLmgiCkBAIC0xNDMsNiArMTQ0LDE1IEBAIGNyZWF0ZV9jdGFzX2ludGVy bmFsKExpc3QgKmF0dHJMaXN0LCBJbnRvQ2xhdXNlICppbnRvKQogCQlTdG9yZVZpZXdRdWVyeShp bnRvUmVsYXRpb25BZGRyLm9iamVjdElkLCBxdWVyeSwgZmFsc2UpOwogCQlDb21tYW5kQ291bnRl ckluY3JlbWVudCgpOwogCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBGaXJlIHRoZSB0cmlnZ2Vy IGZvciB0YWJsZV9pbml0X3dyaXRlIGFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBzbworCQkgKiB0 aGF0IHdlIGNhbiBhY2Nlc3MgdGhlIGNhdGFsb2cgaW5mbyBhYm91dCB0aGUgbmV3bHkgY3JlYXRl ZCB0YWJsZQorCQkgKiBpbiB0aGUgdHJpZ2dlciBmdW5jdGlvbi4KKwkJICovCisJCUV2ZW50VHJp Z2dlclRhYmxlSW5pdFdyaXRlKChOb2RlICopIGNyZWF0ZSwgaW50b1JlbGF0aW9uQWRkcik7CisJ fQogCiAJcmV0dXJuIGludG9SZWxhdGlvbkFkZHI7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90 cmlnZ2VyLmMKaW5kZXggYmMwNzJmMC4uNDIxNjEzMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuYwpAQCAtMzYsOSArMzYsMTMgQEAKICNpbmNsdWRlICJsaWIvaWxpc3QuaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfZnVuYy5oIgorI2lu Y2x1ZGUgInBhcnNlci9wYXJzZXIuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJy ZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5o IgogI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5LmgiCiAjaW5jbHVkZSAidGNvcC91dGls aXR5LmgiCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgogI2luY2x1ZGUgInV0aWxzL2Fj bC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZXZ0Y2Fj aGUuaCIKQEAgLTkyLDcgKzk2LDggQEAgQ3JlYXRlRXZlbnRUcmlnZ2VyKENyZWF0ZUV2ZW50VHJp Z1N0bXQgKnN0bXQpCiAJaWYgKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9z dGFydCIpICE9IDAgJiYKIAkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX2Vu ZCIpICE9IDAgJiYKIAkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgIT0gMCAm JgotCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDApCisJCXN0 cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9yZXdyaXRlIikgIT0gMCAmJgorCQlzdHJjbXAo c3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfaW5pdF93cml0ZSIpICE9IDApCiAJCWVyZXBvcnQoRVJS T1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCSBlcnJtc2coInVu cmVjb2duaXplZCBldmVudCBuYW1lIFwiJXNcIiIsCkBAIC0xMTgsNyArMTIzLDggQEAgQ3JlYXRl RXZlbnRUcmlnZ2VyKENyZWF0ZUV2ZW50VHJpZ1N0bXQgKnN0bXQpCiAJLyogVmFsaWRhdGUgdGFn IGxpc3QsIGlmIGFueS4gKi8KIAlpZiAoKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29t bWFuZF9zdGFydCIpID09IDAgfHwKIAkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29t bWFuZF9lbmQiKSA9PSAwIHx8Ci0JCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ryb3Ai KSA9PSAwKQorCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgPT0gMCB8fAor CQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSA9PSAwKQogCQkm JiB0YWdzICE9IE5VTEwpCiAJCXZhbGlkYXRlX2RkbF90YWdzKCJ0YWciLCB0YWdzKTsKIAllbHNl IGlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpID09IDAKQEAgLTUy Miw2ICs1MjgsNyBAQCBFdmVudFRyaWdnZXJDb21tb25TZXR1cChOb2RlICpwYXJzZXRyZWUsCiAJ TGlzdAkgICAqY2FjaGVsaXN0OwogCUxpc3RDZWxsICAgKmxjOwogCUxpc3QJICAgKnJ1bmxpc3Qg PSBOSUw7CisJaW50CQkJcHViX2RlcGFyc2VfZnVuY19jbnQgPSAwOwogCiAJLyoKIAkgKiBXZSB3 YW50IHRoZSBsaXN0IG9mIGNvbW1hbmQgdGFncyBmb3Igd2hpY2ggdGhpcyBwcm9jZWR1cmUgaXMg YWN0dWFsbHkKQEAgLTU0NCw3ICs1NTEsOCBAQCBFdmVudFRyaWdnZXJDb21tb25TZXR1cChOb2Rl ICpwYXJzZXRyZWUsCiAJCWRiZ3RhZyA9IENyZWF0ZUNvbW1hbmRUYWcocGFyc2V0cmVlKTsKIAkJ aWYgKGV2ZW50ID09IEVWVF9ERExDb21tYW5kU3RhcnQgfHwKIAkJCWV2ZW50ID09IEVWVF9ERExD b21tYW5kRW5kIHx8Ci0JCQlldmVudCA9PSBFVlRfU1FMRHJvcCkKKwkJCWV2ZW50ID09IEVWVF9T UUxEcm9wIHx8CisJCQlldmVudCA9PSBFVlRfVGFibGVJbml0V3JpdGUpCiAJCXsKIAkJCWlmICgh Y29tbWFuZF90YWdfZXZlbnRfdHJpZ2dlcl9vayhkYmd0YWcpKQogCQkJCWVsb2coRVJST1IsICJ1 bmV4cGVjdGVkIGNvbW1hbmQgdGFnIFwiJXNcIiIsIEdldENvbW1hbmRUYWdOYW1lKGRiZ3RhZykp OwpAQCAtNTcxLDYgKzU3OSwxMiBAQCBFdmVudFRyaWdnZXJDb21tb25TZXR1cChOb2RlICpwYXJz ZXRyZWUsCiAJICogb25jZSB3ZSBkbyBhbnl0aGluZyBhdCBhbGwgdGhhdCB0b3VjaGVzIHRoZSBj YXRhbG9ncywgYW4gaW52YWxpZGF0aW9uCiAJICogbWlnaHQgbGVhdmUgY2FjaGVsaXN0IHBvaW50 aW5nIGF0IGdhcmJhZ2UsIHNvIHdlIG11c3QgZG8gdGhpcyBiZWZvcmUgd2UKIAkgKiBjYW4gZG8g bXVjaCBlbHNlLgorCSAqCisJICogU3BlY2lhbCBoYW5kbGluZyBmb3IgZXZlbnQgdHJpZ2dlcnMg Y3JlYXRlZCBhcyBwYXJ0IG9mIHB1YmxpY2F0aW9ucy4KKwkgKiBJZiB0aGVyZSBhcmUgbXVsdGlw bGUgcHVibGljYXRpb25zIHdoaWNoIHB1Ymxpc2ggZGRscywgb25seSBvbmUgc2V0IG9mIHRoZQor CSAqIGV2ZW50IHRyaWdnZXIgZnVuY3Rpb25zIG5lZWQgdG8gYmUgaW52b2tlZC4gVGhlIGRkbCBk ZXBhcnNlIGV2ZW50IHRyaWdnZXJzCisJICogd3JpdGUgdG8gV0FMLCBzbyBubyBuZWVkIHRvIGR1 cGxpY2F0ZSBpdCBhcyBhbGwgd2Fsc2VuZGVycyB3aWxsIHJlYWQgdGhlIHNhbWUKKwkgKiBXQUwu CiAJICovCiAJZm9yZWFjaChsYywgY2FjaGVsaXN0KQogCXsKQEAgLTU3OCw4ICs1OTIsMjUgQEAg RXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAqcGFyc2V0cmVlLAogCiAJCWlmIChmaWx0ZXJf ZXZlbnRfdHJpZ2dlcih0YWcsIGl0ZW0pKQogCQl7Ci0JCQkvKiBXZSBtdXN0IHBsYW4gdG8gZmly ZSB0aGlzIHRyaWdnZXIuICovCi0JCQlydW5saXN0ID0gbGFwcGVuZF9vaWQocnVubGlzdCwgaXRl bS0+Zm5vaWQpOworCQkJc3RhdGljIGNvbnN0IGNoYXIgKnRyaWdnZXJfZnVuY19wcmVmaXggPSAi cHVibGljYXRpb25fZGVwYXJzZV8lcyI7CisJCQljaGFyCQl0cmlnZ2VyX2Z1bmNfbmFtZVtOQU1F REFUQUxFTl07CisJCQlPaWQJCQlwdWJfZnVuY29pZDsKKwkJCUxpc3QgCQkqcHViZnVuY25hbWU7 CisKKwkJCS8qIEdldCBmdW5jdGlvbiBvaWQgb2YgdGhlIHB1YmxpY2F0aW9uJ3MgZGRsIGRlcGFy c2UgZXZlbnQgdHJpZ2dlciAqLworCQkJc25wcmludGYodHJpZ2dlcl9mdW5jX25hbWUsIHNpemVv Zih0cmlnZ2VyX2Z1bmNfbmFtZSksIHRyaWdnZXJfZnVuY19wcmVmaXgsCisJCQkJCSBldmVudHN0 cik7CisJCQlwdWJmdW5jbmFtZSA9IFN5c3RlbUZ1bmNOYW1lKHRyaWdnZXJfZnVuY19uYW1lKTsK KwkJCXB1Yl9mdW5jb2lkID0gTG9va3VwRnVuY05hbWUocHViZnVuY25hbWUsIDAsIE5VTEwsIHRy dWUpOworCisJCQlpZiAoaXRlbS0+Zm5vaWQgIT0gcHViX2Z1bmNvaWQpCisJCQkJcnVubGlzdCA9 IGxhcHBlbmRfb2lkKHJ1bmxpc3QsIGl0ZW0tPmZub2lkKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQkv KiBPbmx5IHRoZSBmaXJzdCBkZGwgZGVwYXJzZSBldmVudCB0cmlnZ2VyIG5lZWRzIHRvIGJlIGlu dm9rZWQgKi8KKwkJCQlpZiAocHViX2RlcGFyc2VfZnVuY19jbnQrKyA9PSAwKQorCQkJCQlydW5s aXN0ID0gbGFwcGVuZF9vaWQocnVubGlzdCwgaXRlbS0+Zm5vaWQpOworCQkJfQogCQl9CiAJfQog CkBAIC04MjcsNiArODU4LDE0MSBAQCBFdmVudFRyaWdnZXJUYWJsZVJld3JpdGUoTm9kZSAqcGFy c2V0cmVlLCBPaWQgdGFibGVPaWQsIGludCByZWFzb24pCiAJQ29tbWFuZENvdW50ZXJJbmNyZW1l bnQoKTsKIH0KIAorCisvKgorICogRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydAorICog ICAgIFByZXBhcmUgdG8gcmVjZWl2ZSBkYXRhIG9uIGFuIENSRUFURSBUQUJMRSBBUy9TRUxFVCBJ TlRPIGNvbW1hbmQgYWJvdXQKKyAqICAgICB0byBiZSBleGVjdXRlZC4KKyAqLwordm9pZAorRXZl bnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChOb2RlICpwYXJzZXRyZWUpCit7CisJTWVtb3J5 Q29udGV4dCBvbGRjeHQ7CisJQ29sbGVjdGVkQ29tbWFuZCAqY29tbWFuZDsKKwlDcmVhdGVUYWJs ZUFzU3RtdCAqc3RtdCA9IChDcmVhdGVUYWJsZUFzU3RtdCAqKXBhcnNldHJlZTsKKworCS8qIGln bm9yZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNh YmxlZCAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKwor CW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUt PmN4dCk7CisKKwljb21tYW5kID0gcGFsbG9jKHNpemVvZihDb2xsZWN0ZWRDb21tYW5kKSk7CisK Kwljb21tYW5kLT50eXBlID0gKHN0bXQtPm9ianR5cGUgPT0gT0JKRUNUX1RBQkxFKSA/IFNDVF9D cmVhdGVUYWJsZUFzIDogU0NUX1NpbXBsZTsKKwljb21tYW5kLT5pbl9leHRlbnNpb24gPSBjcmVh dGluZ19leHRlbnNpb247CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBJbnZhbGlkT2JqZWN0 QWRkcmVzczsKKwljb21tYW5kLT5kLmN0YXMucmVhbF9jcmVhdGUgPSBOVUxMOworCWNvbW1hbmQt PnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKKworCWNvbW1hbmQtPnBhcmVudCA9 IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IGNvbW1hbmQ7CisKKwlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY3h0KTsKK30KKworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRl RW5kCisgKgkJRmluaXNoIHVwIHNhdmluZyBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRUNUIElOVE8g Y29tbWFuZC4KKyAqCisgKiBGSVhNRSB0aGlzIEFQSSBpc24ndCBjb25zaWRlcmluZyB0aGUgcG9z c2liaWxpdHkgdGhhdCBhbiB4YWN0L3N1YnhhY3QgaXMKKyAqIGFib3J0ZWQgcGFydHdheSB0aHJv dWdoLiAgUHJvYmFibHkgaXQncyBiZXN0IHRvIGFkZCBhbgorICogQXRFT1N1YlhhY3RfRXZlbnRU cmlnZ2VycygpIHRvIGZpeCB0aGlzLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRX cml0ZUVuZChPYmplY3RBZGRyZXNzIGFkZHJlc3MpCit7CisJQ29sbGVjdGVkQ29tbWFuZCAqcGFy ZW50OworCUNyZWF0ZVRhYmxlQXNTdG10ICpzdG10OworCisJLyogaWdub3JlIGlmIGV2ZW50IHRy aWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFj dXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5j b21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJc3RtdCA9ICAoQ3JlYXRl VGFibGVBc1N0bXQgKiljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5w YXJzZXRyZWU7CisKKwlpZiAoc3RtdC0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUpCisJeworCQlw YXJlbnQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5wYXJlbnQ7 CisKKwkJcGZyZWUoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCk7CisK KwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IHBhcmVudDsKKwl9 CisJZWxzZQorCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisKKwkJb2xkY3h0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCQljdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLnNpbXBsZS5hZGRyZXNzID0g YWRkcmVzczsKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kTGlzdCA9CisJCQls YXBwZW5kKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QsCisJCQkJCWN1cnJl bnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpOworCisJCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjeHQpOworCX0KK30KKworLyoKKyAqIEZpcmUgdGFibGVfaW5pdF9yZXdyaXRl IHRyaWdnZXJzLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpy ZWFsX2NyZWF0ZSwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQoreworCUxpc3QJICAgKnJ1bmxpc3Q7 CisJRXZlbnRUcmlnZ2VyRGF0YSB0cmlnZGF0YTsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5k OworCisJLyoKKwkgKiBTZWUgRXZlbnRUcmlnZ2VyRERMQ29tbWFuZFN0YXJ0IGZvciBhIGRpc2N1 c3Npb24gYWJvdXQgd2h5IGV2ZW50CisJICogdHJpZ2dlcnMgYXJlIGRpc2FibGVkIGluIHNpbmds ZSB1c2VyIG1vZGUuCisJICovCisJaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKKwkJcmV0dXJuOwor CisJLyoKKwkgKiBBbHNvIGRvIG5vdGhpbmcgaWYgb3VyIHN0YXRlIGlzbid0IHNldCB1cCwgd2hp Y2ggaXQgd29uJ3QgYmUgaWYgdGhlcmUKKwkgKiB3ZXJlbid0IGFueSByZWxldmFudCBldmVudCB0 cmlnZ2VycyBhdCB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgRERMCisJICogY29tbWFuZC4gIFRo aXMgdGVzdCBtaWdodCB0aGVyZWZvcmUgc2VlbSBvcHRpb25hbCwgYnV0IGl0J3MKKwkgKiAqbmVj ZXNzYXJ5KiwgYmVjYXVzZSBFdmVudFRyaWdnZXJDb21tb25TZXR1cCBtaWdodCBmaW5kIHRyaWdn ZXJzIHRoYXQKKwkgKiBkaWRuJ3QgZXhpc3QgYXQgdGhlIHRpbWUgdGhlIGNvbW1hbmQgc3RhcnRl ZC4KKwkgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSkKKwkJcmV0dXJuOworCisJ LyogRG8gbm90aGluZyBpZiBubyBjb21tYW5kIHdhcyBjb2xsZWN0ZWQuICovCisJaWYgKCFjdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kKQorCQlyZXR1cm47CisKKwljb21t YW5kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCXJ1bmxp c3QgPSBFdmVudFRyaWdnZXJDb21tb25TZXR1cChjb21tYW5kLT5wYXJzZXRyZWUsCisJCQkJCQkJ CQkgIEVWVF9UYWJsZUluaXRXcml0ZSwKKwkJCQkJCQkJCSAgInRhYmxlX2luaXRfd3JpdGUiLAor CQkJCQkJCQkJICAmdHJpZ2RhdGEpOworCWlmIChydW5saXN0ID09IE5JTCkKKwkJcmV0dXJuOwor CisJLyogU2V0IHRoZSByZWFsIENyZWF0ZVRhYmxlIHN0YXRtZW50IGFuZCBvYmplY3QgYWRkcmVz cyAqLworCWNvbW1hbmQtPmQuY3Rhcy5yZWFsX2NyZWF0ZSA9IHJlYWxfY3JlYXRlOworCWNvbW1h bmQtPmQuY3Rhcy5hZGRyZXNzID0gYWRkcmVzczsKKworCS8qIFJ1biB0aGUgdHJpZ2dlcnMuICov CisJRXZlbnRUcmlnZ2VySW52b2tlKHJ1bmxpc3QsICZ0cmlnZGF0YSk7CisKKwkvKiBDbGVhbnVw LiAqLworCWxpc3RfZnJlZShydW5saXN0KTsKKworCS8qCisJICogTWFrZSBzdXJlIGFueXRoaW5n IHRoZSBldmVudCB0cmlnZ2VycyBkaWQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBtYWluCisJICog Y29tbWFuZC4KKwkgKi8KKwlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworfQorCiAvKgogICog SW52b2tlIGVhY2ggZXZlbnQgdHJpZ2dlciBpbiBhIGxpc3Qgb2YgZXZlbnQgdHJpZ2dlcnMuCiAg Ki8KQEAgLTExMDgsNyArMTI3NCw4IEBAIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCkK IAkgKi8KIAlyZXR1cm4gKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1NRTERyb3ApICE9IE5JTCkgfHwK IAkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1RhYmxlUmV3cml0ZSkgIT0gTklMKSB8fAotCQkoRXZl bnRDYWNoZUxvb2t1cChFVlRfRERMQ29tbWFuZEVuZCkgIT0gTklMKTsKKwkJKEV2ZW50Q2FjaGVM b29rdXAoRVZUX0RETENvbW1hbmRFbmQpICE9IE5JTCkgfHwKKwkJKEV2ZW50Q2FjaGVMb29rdXAo RVZUX1RhYmxlSW5pdFdyaXRlKSAhPSBOSUwpOwogfQogCiAvKgpAQCAtMTQ5OSw2ICsxNjY2LDcg QEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKIAogCWNvbW1h bmQtPmQuYWx0ZXJUYWJsZS5jbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOwogCWNvbW1hbmQt PmQuYWx0ZXJUYWJsZS5vYmplY3RJZCA9IEludmFsaWRPaWQ7CisJY29tbWFuZC0+ZC5hbHRlclRh YmxlLnJld3JpdGUgPSBmYWxzZTsKIAljb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9IE5J TDsKIAljb21tYW5kLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHBhcnNldHJlZSk7CiAKQEAgLTE1 MzIsNyArMTcwMCw3IEBAIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQgb2JqZWN0SWQp CiAgKiBpbnRlcm5hbGx5LCBzbyB0aGF0J3MgYWxsIHRoYXQgdGhpcyBjb2RlIG5lZWRzIHRvIGhh bmRsZSBhdCB0aGUgbW9tZW50LgogICovCiB2b2lkCi1FdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJU YWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcykKK0V2ZW50VHJp Z2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBh ZGRyZXNzLCBib29sIHJld3JpdGUpCiB7CiAJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAJQ29sbGVj dGVkQVRTdWJjbWQgKm5ld3N1YjsKQEAgLTE1NTIsNiArMTcyMCw3IEBAIEV2ZW50VHJpZ2dlckNv bGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNz KQogCW5ld3N1Yi0+YWRkcmVzcyA9IGFkZHJlc3M7CiAJbmV3c3ViLT5wYXJzZXRyZWUgPSBjb3B5 T2JqZWN0KHN1YmNtZCk7CiAKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21t YW5kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8PSByZXdyaXRlOwogCWN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0KIAkJbGFwcGVu ZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUu c3ViY21kcywgbmV3c3ViKTsKIApAQCAtMTU1OSw2ICsxNzI4LDEzMyBAQCBFdmVudFRyaWdnZXJD b2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVz cykKIH0KIAogLyoKKyAqIEV2ZW50VHJpZ2dlckFsdGVyVHlwZVN0YXJ0CisgKgkJU2F2ZSBkYXRh IGFib3V0IGEgc2luZ2xlIHBhcnQgb2YgYW4gQUxURVIgVFlQRS4KKyAqCisgKiBBTFRFUiBUQUJM RSBjYW4gaGF2ZSBtdWx0aXBsZSBzdWJjb21tYW5kcyB3aGljaCBtaWdodCBpbmNsdWRlIERST1Ag Q09MVU1OCisgKiBjb21tYW5kIGFuZCBBTFRFUiBUWVBFIHJlZmVycmluZyB0aGUgZHJvcCBjb2x1 bW4gaW4gVVNJTkcgZXhwcmVzc2lvbi4KKyAqIEFzIHRoZSBkcm9wcGVkIGNvbHVtbiBjYW5ub3Qg YmUgYWNjZXNzZWQgYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiBEUk9QIENPTFVNTiwKKyAqIGEgc3Bl Y2lhbCB0cmlnZ2VyIGlzIHJlcXVpcmVkIHRvIGhhbmRsZSB0aGlzIGNhc2UgYmVmb3JlIHRoZSBk cm9wIGNvbHVtbiBpcworICogZXhlY3V0ZWQuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlckFsdGVy VHlwZVN0YXJ0KEFsdGVyVGFibGVDbWQgKnN1YmNtZCwgUmVsYXRpb24gcmVsKQoreworCU1lbW9y eUNvbnRleHQgb2xkY3h0OworCUNvbGxlY3RlZEFUU3ViY21kICpuZXdzdWI7CisJQ29sdW1uRGVm ICAqZGVmOworCVJlbGF0aW9uCWF0dHJlbGF0aW9uOworCUhlYXBUdXBsZQloZWFwVHVwOworCUZv cm1fcGdfYXR0cmlidXRlIGF0dFR1cDsKKwlBdHRyTnVtYmVyCWF0dG51bTsKKwlPYmplY3RBZGRy ZXNzIGFkZHJlc3M7CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQgdHJpZ2dlciBjb250ZXh0IG5vdCBz ZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJT dGF0ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRDb2xsZWN0aW9uSW5o aWJpdGVkKQorCQlyZXR1cm47CisKKwlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJUYWJsZUNtZCkp OworCUFzc2VydChzdWJjbWQtPnN1YnR5cGUgPT0gQVRfQWx0ZXJDb2x1bW5UeXBlKTsKKwlBc3Nl cnQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCAhPSBOVUxMKTsKKwlB c3NlcnQoT2lkSXNWYWxpZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5k LT5kLmFsdGVyVGFibGUub2JqZWN0SWQpKTsKKworCWRlZiA9IChDb2x1bW5EZWYgKikgc3ViY21k LT5kZWY7CisJQXNzZXJ0KElzQShkZWYsIENvbHVtbkRlZikpOworCisJb2xkY3h0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCW5ld3N1 YiA9IHBhbGxvYyhzaXplb2YoQ29sbGVjdGVkQVRTdWJjbWQpKTsKKwluZXdzdWItPnBhcnNldHJl ZSA9IChOb2RlICopY29weU9iamVjdChzdWJjbWQpOworCisJYXR0cmVsYXRpb24gPSB0YWJsZV9v cGVuKEF0dHJpYnV0ZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJLyogTG9vayB1 cCB0aGUgdGFyZ2V0IGNvbHVtbiAqLworCWhlYXBUdXAgPSBTZWFyY2hTeXNDYWNoZUNvcHlBdHRO YW1lKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQoaGVhcFR1cCkpIC8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwkJZXJlcG9ydChFUlJP UiwKKwkJCQllcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX0NPTFVNTiksCisJCQkJZXJybXNnKCJj b2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsCisJCQkJCSAg IHN1YmNtZC0+bmFtZSwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkpOworCWF0dFR1cCA9 IChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGhlYXBUdXApOworCWF0dG51bSA9IGF0dFR1 cC0+YXR0bnVtOworCisJT2JqZWN0QWRkcmVzc1N1YlNldChhZGRyZXNzLCBSZWxhdGlvblJlbGF0 aW9uSWQsCisJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSk7CisJaGVhcF9mcmVl dHVwbGUoaGVhcFR1cCk7CisJdGFibGVfY2xvc2UoYXR0cmVsYXRpb24sIFJvd0V4Y2x1c2l2ZUxv Y2spOworCW5ld3N1Yi0+YWRkcmVzcyA9IGFkZHJlc3M7CisKKwlpZiAoZGVmLT5yYXdfZGVmYXVs dCkKKwl7CisJCWNoYXIJICAgKmRlZmV4cHI7CisKKwkJZGVmZXhwciA9IG5vZGVUb1N0cmluZyhk ZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJbmV3c3ViLT51c2luZ2V4cHIgPSBUZXh0RGF0dW1HZXRD U3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsCisJCQkJCQkJCQkJCQkJCQkJ CUNTdHJpbmdHZXRUZXh0RGF0dW0oZGVmZXhwciksCisJCQkJCQkJCQkJCQkJCQkJCVJlbGF0aW9u R2V0UmVsaWQocmVsKSkpOworCX0KKwllbHNlCisJCW5ld3N1Yi0+dXNpbmdleHByID0gTlVMTDsK KworCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJs ZS5zdWJjbWRzID0KKwkJbGFwcGVuZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRD b21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcywgbmV3c3ViKTsKKworCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjeHQpOworfQorCisvKgorICogRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlRW5kCisg KgkJRmluaXNoIHVwIHNhdmluZyBhbiBBTFRFUiBUWVBFIGNvbW1hbmQsIGFuZCBhZGQgaXQgdG8g Y29tbWFuZCBsaXN0LgorICovCit2b2lkCitFdmVudFRyaWdnZXJBbHRlclR5cGVFbmQoTm9kZSAq c3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MsIGJvb2wgcmV3cml0ZSkKK3sKKwlNZW1vcnlD b250ZXh0IG9sZGN4dDsKKwlDb2xsZWN0ZWRBVFN1YmNtZCAqbmV3c3ViOworCUxpc3RDZWxsICAg KmNlbGw7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kOworCUFsdGVyVGFibGVDbWQgKmFsdHN1YmNt ZCA9IChBbHRlclRhYmxlQ21kICopc3ViY21kOworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdn ZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21t YW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJY21kID0gY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCUFzc2VydChJc0Eoc3ViY21kLCBBbHRl clRhYmxlQ21kKSk7CisJQXNzZXJ0KGNtZCAhPSBOVUxMKTsKKwlBc3NlcnQoT2lkSXNWYWxpZChj bWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCkpOworCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuYWx0 ZXJUYWJsZS5zdWJjbWRzKQorCXsKKwkJQ29sbGVjdGVkQVRTdWJjbWQgKnN1YiA9IChDb2xsZWN0 ZWRBVFN1YmNtZCAqKSBsZmlyc3QoY2VsbCk7CisJCUFsdGVyVGFibGVDbWQgKmNvbGxjbWQgPSAo QWx0ZXJUYWJsZUNtZCAqKSBzdWItPnBhcnNldHJlZTsKKworCQlpZiAoY29sbGNtZC0+c3VidHlw ZSA9PSBhbHRzdWJjbWQtPnN1YnR5cGUgJiYKKwkJCWFkZHJlc3MuY2xhc3NJZCA9PSBzdWItPmFk ZHJlc3MuY2xhc3NJZCAmJgorCQkJYWRkcmVzcy5vYmplY3RJZCA9PSBzdWItPmFkZHJlc3Mub2Jq ZWN0SWQgJiYKKwkJCWFkZHJlc3Mub2JqZWN0U3ViSWQgPT0gc3ViLT5hZGRyZXNzLm9iamVjdFN1 YklkKQorCQl7CisJCQljbWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9IHJld3JpdGU7CisJCQly ZXR1cm47CisJCX0KKwl9CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3VycmVu dEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOworCisJbmV3c3ViID0gcGFsbG9jKHNpemVvZihDb2xs ZWN0ZWRBVFN1YmNtZCkpOworCW5ld3N1Yi0+YWRkcmVzcyA9IGFkZHJlc3M7CisJbmV3c3ViLT5w YXJzZXRyZWUgPSBjb3B5T2JqZWN0KHN1YmNtZCk7CisKKwljbWQtPmQuYWx0ZXJUYWJsZS5yZXdy aXRlIHw9IHJld3JpdGU7CisJY21kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9IGxhcHBlbmQoY21k LT5kLmFsdGVyVGFibGUuc3ViY21kcywgbmV3c3ViKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjeHQpOworfQorCisvKgogICogRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZUVuZAogICoJCUZp bmlzaCB1cCBzYXZpbmcgYW4gQUxURVIgVEFCTEUgY29tbWFuZCwgYW5kIGFkZCBpdCB0byBjb21t YW5kIGxpc3QuCiAgKgpAQCAtMTcxMSw2ICsyMDA3LDEwNSBAQCBFdmVudFRyaWdnZXJDb2xsZWN0 Q3JlYXRlT3BDbGFzcyhDcmVhdGVPcENsYXNzU3RtdCAqc3RtdCwgT2lkIG9wY29pZCwKIH0KIAog LyoKKyAqIEV2ZW50VHJpZ2dlckNvbGxlY3RDcmVhdGVQdWJsaWNhdGlvbgorICoJCVNhdmUgZGF0 YSBhYm91dCBhIENSRUFURSBQVUJMSUNBVElPTiBjb21tYW5kIGJlaW5nIGV4ZWN1dGVkCisgKi8K K3ZvaWQKK0V2ZW50VHJpZ2dlckNvbGxlY3RDcmVhdGVQdWJsaWNhdGlvbihDcmVhdGVQdWJsaWNh dGlvblN0bXQgKnN0bXQsCisJCQkJCQkJCQkgT2lkIHB1YmlkLCBMaXN0ICpyZWxhdGlvbnMsCisJ CQkJCQkJCQkgTGlzdCAqc2NoZW1hcykKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlDb2xs ZWN0ZWRDb21tYW5kICpjb21tYW5kOworCUxpc3RDZWxsICAgKmxjOworCisJLyogaWdub3JlIGlm IGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICov CisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJb2xkY3h0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsK KworCWNvbW1hbmQgPSBwYWxsb2MwKHNpemVvZihDb2xsZWN0ZWRDb21tYW5kKSk7CisJY29tbWFu ZC0+dHlwZSA9IFNDVF9DcmVhdGVQdWJsaWNhdGlvbjsKKwljb21tYW5kLT5pbl9leHRlbnNpb24g PSBjcmVhdGluZ19leHRlbnNpb247CisJT2JqZWN0QWRkcmVzc1NldChjb21tYW5kLT5kLmNyZWF0 ZXB1Yi5hZGRyZXNzLAorCQkJCQkgUHVibGljYXRpb25SZWxhdGlvbklkLCBwdWJpZCk7CisJY29t bWFuZC0+cGFyc2V0cmVlID0gKE5vZGUgKikgY29weU9iamVjdChzdG10KTsKKworCWZvcmVhY2go bGMsIHJlbGF0aW9ucykKKwl7CisJCVB1YmxpY2F0aW9uVGFibGUgKnB1Yl9yZWwgPSAoUHVibGlj YXRpb25UYWJsZSAqKSBsZmlyc3QobGMpOworCisJCXB1YmxpY2F0aW9uX3JlbCAqYWRkcmVsID0g KHB1YmxpY2F0aW9uX3JlbCAqKSBwYWxsb2Moc2l6ZW9mKHB1YmxpY2F0aW9uX3JlbCkpOworCisJ CVJlbGF0aW9uCXJlbCA9IHRhYmxlX29wZW5ydihwdWJfcmVsLT5yZWxhdGlvbiwgQWNjZXNzU2hh cmVMb2NrKTsKKworCQlhZGRyZWwtPnJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOworCQlh ZGRyZWwtPndoZXJlQ2xhdXNlID0gY29weU9iamVjdChwdWJfcmVsLT53aGVyZUNsYXVzZSk7CisJ CWFkZHJlbC0+Y29sdW1uTGlzdCA9IGxpc3RfY29weV9kZWVwKHB1Yl9yZWwtPmNvbHVtbnMpOwor CQljb21tYW5kLT5kLmNyZWF0ZXB1Yi5yZWxzID0gbGFwcGVuZChjb21tYW5kLT5kLmNyZWF0ZXB1 Yi5yZWxzLCBhZGRyZWwpOworCQl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJ fQorCisJY29tbWFuZC0+ZC5jcmVhdGVwdWIuc2NoZW1hcyA9IGxpc3RfY29weShzY2hlbWFzKTsK KworCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QgPQorCQlsYXBwZW5kKGN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QsIGNvbW1hbmQpOworCisJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7Cit9CisKKy8qCisgKiBFdmVudFRyaWdnZXJDb2xsZWN0 QWx0ZXJQdWJsaWNhdGlvbgorICoJCVNhdmUgZGF0YSBhYm91dCBhIEFMVEVSIFBVQkxJQ0FUSU9O IGNvbW1hbmQgYmVpbmcgZXhlY3V0ZWQKKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyQ29sbGVjdEFs dGVyUHVibGljYXRpb24oQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsIE9pZCBwdWJpZCwKKwkJ CQkJCQkJCUxpc3QgKnJlbGF0aW9ucywgTGlzdCAqc2NoZW1hcykKK3sKKwlNZW1vcnlDb250ZXh0 IG9sZGN4dDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCUxpc3RDZWxsICAgKmxjOwor CisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0 aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0 dXJuOworCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y3h0KTsKKworCWNvbW1hbmQgPSBwYWxsb2MwKHNpemVvZihDb2xsZWN0ZWRDb21t YW5kKSk7CisJY29tbWFuZC0+dHlwZSA9IFNDVF9BbHRlclB1YmxpY2F0aW9uOworCWNvbW1hbmQt PmluX2V4dGVuc2lvbiA9IGNyZWF0aW5nX2V4dGVuc2lvbjsKKwlPYmplY3RBZGRyZXNzU2V0KGNv bW1hbmQtPmQuYWx0ZXJwdWIuYWRkcmVzcywKKwkJCQkJIFB1YmxpY2F0aW9uUmVsYXRpb25JZCwg cHViaWQpOworCWNvbW1hbmQtPnBhcnNldHJlZSA9IChOb2RlICopIGNvcHlPYmplY3Qoc3RtdCk7 CisKKwlmb3JlYWNoKGxjLCByZWxhdGlvbnMpCisJeworCQlQdWJsaWNhdGlvblRhYmxlICpwdWJf cmVsID0gKFB1YmxpY2F0aW9uVGFibGUgKikgbGZpcnN0KGxjKTsKKworCQlwdWJsaWNhdGlvbl9y ZWwgKmFkZHJlbCA9IChwdWJsaWNhdGlvbl9yZWwgKikgcGFsbG9jKHNpemVvZihwdWJsaWNhdGlv bl9yZWwpKTsKKworCQlSZWxhdGlvbglyZWwgPSB0YWJsZV9vcGVucnYocHViX3JlbC0+cmVsYXRp b24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJYWRkcmVsLT5yZWxpZCA9IFJlbGF0aW9uR2V0UmVs aWQocmVsKTsKKwkJYWRkcmVsLT53aGVyZUNsYXVzZSA9IGNvcHlPYmplY3QocHViX3JlbC0+d2hl cmVDbGF1c2UpOworCQlhZGRyZWwtPmNvbHVtbkxpc3QgPSBsaXN0X2NvcHlfZGVlcChwdWJfcmVs LT5jb2x1bW5zKTsKKwkJY29tbWFuZC0+ZC5hbHRlcnB1Yi5yZWxzID0gbGFwcGVuZChjb21tYW5k LT5kLmFsdGVycHViLnJlbHMsIGFkZHJlbCk7CisJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hh cmVMb2NrKTsKKwl9CisKKwljb21tYW5kLT5kLmFsdGVycHViLnNjaGVtYXMgPSBsaXN0X2NvcHko c2NoZW1hcyk7CisKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0ID0KKwkJ bGFwcGVuZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0LCBjb21tYW5kKTsK KworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQorCisvKgogICogRXZlbnRUcmln Z2VyQ29sbGVjdEFsdGVyVFNDb25maWcKICAqCQlTYXZlIGRhdGEgYWJvdXQgYW4gQUxURVIgVEVY VCBTRUFSQ0ggQ09ORklHVVJBVElPTiBjb21tYW5kIGJlaW5nCiAgKgkJZXhlY3V0ZWQKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXggZjRiYTU3Mi4uYmZlNGJiZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTM4LDEwICszOCwxMiBAQAog I2luY2x1ZGUgImNvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oIgogI2luY2x1ZGUgImZ1bmNhcGku aCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIK ICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY2xh dXNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NvbGxhdGUuaCIKICNpbmNsdWRlICJwYXJz ZXIvcGFyc2VfcmVsYXRpb24uaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VyLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRp bHMvYXJyYXkuaCIKQEAgLTgyLDIxICs4NCwyNiBAQCBzdGF0aWMgdm9pZCBQdWJsaWNhdGlvbkRy b3BTY2hlbWFzKE9pZCBwdWJpZCwgTGlzdCAqc2NoZW1hcywgYm9vbCBtaXNzaW5nX29rKTsKIHN0 YXRpYyB2b2lkCiBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwK IAkJCQkJCSAgTGlzdCAqb3B0aW9ucywKKwkJCQkJCSAgYm9vbCBmb3JfYWxsX3RhYmxlcywKIAkJ CQkJCSAgYm9vbCAqcHVibGlzaF9naXZlbiwKIAkJCQkJCSAgUHVibGljYXRpb25BY3Rpb25zICpw dWJhY3Rpb25zLAogCQkJCQkJICBib29sICpwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZl biwKLQkJCQkJCSAgYm9vbCAqcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpCisJCQkJCQkgIGJv b2wgKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290LAorCQkJCQkJICBib29sICpkZGxfdHlwZV9n aXZlbikKIHsKIAlMaXN0Q2VsbCAgICpsYzsKIAogCSpwdWJsaXNoX2dpdmVuID0gZmFsc2U7CiAJ KnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuID0gZmFsc2U7CisJKmRkbF90eXBlX2dp dmVuID0gZmFsc2U7CiAKIAkvKiBkZWZhdWx0cyAqLwogCXB1YmFjdGlvbnMtPnB1Ymluc2VydCA9 IHRydWU7CiAJcHViYWN0aW9ucy0+cHVidXBkYXRlID0gdHJ1ZTsKIAlwdWJhY3Rpb25zLT5wdWJk ZWxldGUgPSB0cnVlOwogCXB1YmFjdGlvbnMtPnB1YnRydW5jYXRlID0gdHJ1ZTsKKwlwdWJhY3Rp b25zLT5wdWJkZGxfYWxsID0gZmFsc2U7CisJcHViYWN0aW9ucy0+cHViZGRsX3RhYmxlID0gZmFs c2U7CiAJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2U7CiAKIAkvKiBQYXJzZSBv cHRpb25zICovCkBAIC0xMjMsNyArMTMwLDcgQEAgcGFyc2VfcHVibGljYXRpb25fb3B0aW9ucyhQ YXJzZVN0YXRlICpwc3RhdGUsCiAJCQlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IGZhbHNlOwog CiAJCQkqcHVibGlzaF9naXZlbiA9IHRydWU7Ci0JCQlwdWJsaXNoID0gZGVmR2V0U3RyaW5nKGRl ZmVsKTsKKwkJCXB1Ymxpc2ggPSBwc3RyZHVwKGRlZkdldFN0cmluZyhkZWZlbCkpOwogCiAJCQlp ZiAoIVNwbGl0SWRlbnRpZmllclN0cmluZyhwdWJsaXNoLCAnLCcsICZwdWJsaXNoX2xpc3QpKQog CQkJCWVyZXBvcnQoRVJST1IsCkBAIC0xNTgsNiArMTY1LDUyIEBAIHBhcnNlX3B1YmxpY2F0aW9u X29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290X2dpdmVuID0gdHJ1ZTsKIAkJCSpwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGRlZkdl dEJvb2xlYW4oZGVmZWwpOwogCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwg ImRkbCIpID09IDApCisJCXsKKwkJCWNoYXIJICAgKmRkbF9sZXZlbDsKKwkJCUxpc3QJICAgKmRk bF9saXN0OworCQkJTGlzdENlbGwgICAqbGMzOworCisJCQlpZiAoKmRkbF90eXBlX2dpdmVuKQor CQkJCWVycm9yQ29uZmxpY3RpbmdEZWZFbGVtKGRlZmVsLCBwc3RhdGUpOworCisJCQlpZiAoIWZv cl9hbGxfdGFibGVzKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RF X1NZTlRBWF9FUlJPUiksCisJCQkJCQkgZXJybXNnKCJEREwgcmVwbGljYXRpb24gaXMgb25seSBz dXBwb3J0ZWQgaW4gRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24iKSkpOworCQkJLyoKKwkJCSAq IElmIGRkbCBvcHRpb24gd2FzIGdpdmVuIG9ubHkgdGhlIGV4cGxpY2l0bHkgbGlzdGVkIGRkbCB0 eXBlcworCQkJICogc2hvdWxkIGJlIHB1Ymxpc2hlZC4KKwkJCSAqLworCQkJcHViYWN0aW9ucy0+ cHViZGRsX2FsbCA9IGZhbHNlOworCQkJcHViYWN0aW9ucy0+cHViZGRsX3RhYmxlID0gZmFsc2U7 CisKKwkJCSpkZGxfdHlwZV9naXZlbiA9IHRydWU7CisJCQlkZGxfbGV2ZWwgPSBkZWZHZXRTdHJp bmcoZGVmZWwpOworCisJCQlpZiAoIVNwbGl0SWRlbnRpZmllclN0cmluZyhkZGxfbGV2ZWwsICcs JywgJmRkbF9saXN0KSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9TWU5UQVhfRVJST1IpLAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBsaXN0IHN5bnRheCBmb3Ig XCJkZGxcIiBvcHRpb24iKSkpOworCisJCQkvKiBQcm9jZXNzIHRoZSBvcHRpb24gbGlzdC4gKi8K KwkJCWZvcmVhY2gobGMzLCBkZGxfbGlzdCkKKwkJCXsKKwkJCQljaGFyCSAgICpwdWJsaXNoX29w dCA9IChjaGFyICopIGxmaXJzdChsYzMpOworCisJCQkJaWYgKHN0cmNtcChwdWJsaXNoX29wdCwg ImFsbCIpID09IDApCisJCQkJeworCQkJCQlwdWJhY3Rpb25zLT5wdWJkZGxfYWxsID0gdHJ1ZTsK KwkJCQkJcHViYWN0aW9ucy0+cHViZGRsX3RhYmxlID0gdHJ1ZTsKKwkJCQl9CisJCQkJZWxzZSBp ZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAidGFibGUiKSA9PSAwKQorCQkJCQlwdWJhY3Rpb25zLT5w dWJkZGxfdGFibGUgPSB0cnVlOworCQkJCWVsc2UKKwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ CQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkJIGVycm1zZygidW5yZWNv Z25pemVkIFwiZGRsXCIgdmFsdWU6IFwiJXNcIiIsIHB1Ymxpc2hfb3B0KSkpOworCQkJfQorCQl9 CiAJCWVsc2UKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFY X0VSUk9SKSwKQEAgLTYwMCwxMyArNjUzLDU2IEBAIGNoZWNrX3NpbXBsZV9yb3dmaWx0ZXJfZXhw cihOb2RlICpub2RlLCBQYXJzZVN0YXRlICpwc3RhdGUpCiB9CiAKIC8qCisgKiBIZWxwZXIgZnVu Y3Rpb24gdG8gdHJhbmZvcm0gYSB3aGVyZSBjbGF1c2UuCisgKgorICogQWxzbyBjaGVjayB0aGUg cHVibGljYXRpb24gcm93IGZpbHRlciBleHByZXNzaW9uIGFuZCB0aHJvdyBhbiBlcnJvciBpZgor ICogYW55dGhpbmcgbm90IHBlcm1pdHRlZCBvciB1bmV4cGVjdGVkIGlzIGVuY291bnRlcmVkLgor ICovCitzdGF0aWMgTm9kZSAqCitHZXRUcmFuc2Zvcm1XaGVyZUNsYXVzZXMoY29uc3QgY2hhciAq cXVlcnlTdHJpbmcsIFJlbGF0aW9uIHJlbGF0aW9uLAorCQkJCQkJIE5vZGUgKndoZXJlQ2xhdXNl LCBib29sIGNoZWNrX2V4cHIpCit7CisJTm9kZQkgICAqdHJhbnNmb3JtZWRXaGVyZUNsYXVzZSA9 IE5VTEw7CisJUGFyc2VOYW1lc3BhY2VJdGVtICpuc2l0ZW07CisJUGFyc2VTdGF0ZSAqcHN0YXRl OworCisJLyoKKwkgKiBBIGZyZXNoIHBzdGF0ZSBpcyByZXF1aXJlZCBzbyB0aGF0IHdlIG9ubHkg aGF2ZSAidGhpcyIgdGFibGUgaW4gaXRzCisJICogcmFuZ2V0YWJsZQorCSAqLworCXBzdGF0ZSA9 IG1ha2VfcGFyc2VzdGF0ZShOVUxMKTsKKwlwc3RhdGUtPnBfc291cmNldGV4dCA9IHF1ZXJ5U3Ry aW5nOworCW5zaXRlbSA9IGFkZFJhbmdlVGFibGVFbnRyeUZvclJlbGF0aW9uKHBzdGF0ZSwgcmVs YXRpb24sCisJCQkJCQkJCQkJICAgQWNjZXNzU2hhcmVMb2NrLCBOVUxMLAorCQkJCQkJCQkJCSAg IGZhbHNlLCBmYWxzZSk7CisJYWRkTlNJdGVtVG9RdWVyeShwc3RhdGUsIG5zaXRlbSwgZmFsc2Us IHRydWUsIHRydWUpOworCisJdHJhbnNmb3JtZWRXaGVyZUNsYXVzZSA9IHRyYW5zZm9ybVdoZXJl Q2xhdXNlKHBzdGF0ZSwKKwkJCQkJCQkJCQkJCSAgY29weU9iamVjdCh3aGVyZUNsYXVzZSksCisJ CQkJCQkJCQkJCQkgIEVYUFJfS0lORF9XSEVSRSwKKwkJCQkJCQkJCQkJCSAgIlBVQkxJQ0FUSU9O IFdIRVJFIik7CisKKwkvKiBGaXggdXAgY29sbGF0aW9uIGluZm9ybWF0aW9uICovCisJYXNzaWdu X2V4cHJfY29sbGF0aW9ucyhwc3RhdGUsIHRyYW5zZm9ybWVkV2hlcmVDbGF1c2UpOworCisJLyoK KwkgKiBXZSBhbGxvdyBvbmx5IHNpbXBsZSBleHByZXNzaW9ucyBpbiByb3cgZmlsdGVycy4gU2Vl CisJICogY2hlY2tfc2ltcGxlX3Jvd2ZpbHRlcl9leHByX3dhbGtlci4KKwkgKi8KKwlpZiAoY2hl Y2tfZXhwcikKKwkJY2hlY2tfc2ltcGxlX3Jvd2ZpbHRlcl9leHByKHRyYW5zZm9ybWVkV2hlcmVD bGF1c2UsIHBzdGF0ZSk7CisKKwlmcmVlX3BhcnNlc3RhdGUocHN0YXRlKTsKKworCXJldHVybiB0 cmFuc2Zvcm1lZFdoZXJlQ2xhdXNlOworfQorCisvKgogICogVHJhbnNmb3JtIHRoZSBwdWJsaWNh dGlvbiBXSEVSRSBleHByZXNzaW9uIGZvciBhbGwgdGhlIHJlbGF0aW9ucyBpbiB0aGUgbGlzdCwK ICAqIGVuc3VyaW5nIGl0IGlzIGNvZXJjZWQgdG8gYm9vbGVhbiBhbmQgbmVjZXNzYXJ5IGNvbGxh dGlvbiBpbmZvcm1hdGlvbiBpcwogICogYWRkZWQgaWYgcmVxdWlyZWQsIGFuZCBhZGQgYSBuZXcg bnNpdGVtL1JURSBmb3IgdGhlIGFzc29jaWF0ZWQgcmVsYXRpb24gdG8KICAqIHRoZSBQYXJzZVN0 YXRlJ3MgbmFtZXNwYWNlIGxpc3QuCiAgKgotICogQWxzbyBjaGVjayB0aGUgcHVibGljYXRpb24g cm93IGZpbHRlciBleHByZXNzaW9uIGFuZCB0aHJvdyBhbiBlcnJvciBpZgotICogYW55dGhpbmcg bm90IHBlcm1pdHRlZCBvciB1bmV4cGVjdGVkIGlzIGVuY291bnRlcmVkLgogICovCiBzdGF0aWMg dm9pZAogVHJhbnNmb3JtUHViV2hlcmVDbGF1c2VzKExpc3QgKnRhYmxlcywgY29uc3QgY2hhciAq cXVlcnlTdHJpbmcsCkBAIC02MTYsOSArNzEyLDcgQEAgVHJhbnNmb3JtUHViV2hlcmVDbGF1c2Vz KExpc3QgKnRhYmxlcywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCiAKIAlmb3JlYWNoKGxjLCB0 YWJsZXMpCiAJewotCQlQYXJzZU5hbWVzcGFjZUl0ZW0gKm5zaXRlbTsKLQkJTm9kZQkgICAqd2hl cmVjbGF1c2UgPSBOVUxMOwotCQlQYXJzZVN0YXRlICpwc3RhdGU7CisKIAkJUHVibGljYXRpb25S ZWxJbmZvICpwcmkgPSAoUHVibGljYXRpb25SZWxJbmZvICopIGxmaXJzdChsYyk7CiAKIAkJaWYg KHByaS0+d2hlcmVDbGF1c2UgPT0gTlVMTCkKQEAgLTYzOCwzOCArNzMyLDM4IEBAIFRyYW5zZm9y bVB1YldoZXJlQ2xhdXNlcyhMaXN0ICp0YWJsZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAog CQkJCQkgZXJyZGV0YWlsKCJXSEVSRSBjbGF1c2UgY2Fubm90IGJlIHVzZWQgZm9yIGEgcGFydGl0 aW9uZWQgdGFibGUgd2hlbiAlcyBpcyBmYWxzZS4iLAogCQkJCQkJCSAgICJwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCIpKSk7CiAKLQkJLyoKLQkJICogQSBmcmVzaCBwc3RhdGUgaXMgcmVxdWly ZWQgc28gdGhhdCB3ZSBvbmx5IGhhdmUgInRoaXMiIHRhYmxlIGluIGl0cwotCQkgKiByYW5nZXRh YmxlCi0JCSAqLwotCQlwc3RhdGUgPSBtYWtlX3BhcnNlc3RhdGUoTlVMTCk7Ci0JCXBzdGF0ZS0+ cF9zb3VyY2V0ZXh0ID0gcXVlcnlTdHJpbmc7Ci0JCW5zaXRlbSA9IGFkZFJhbmdlVGFibGVFbnRy eUZvclJlbGF0aW9uKHBzdGF0ZSwgcHJpLT5yZWxhdGlvbiwKLQkJCQkJCQkJCQkJICAgQWNjZXNz U2hhcmVMb2NrLCBOVUxMLAotCQkJCQkJCQkJCQkgICBmYWxzZSwgZmFsc2UpOwotCQlhZGROU0l0 ZW1Ub1F1ZXJ5KHBzdGF0ZSwgbnNpdGVtLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7CisJCXByaS0+d2hl cmVDbGF1c2UgPSBHZXRUcmFuc2Zvcm1XaGVyZUNsYXVzZXMocXVlcnlTdHJpbmcsIHByaS0+cmVs YXRpb24sCisJCQkJCQkJCQkJCQkJcHJpLT53aGVyZUNsYXVzZSwgdHJ1ZSk7CisJfQorfQogCi0J CXdoZXJlY2xhdXNlID0gdHJhbnNmb3JtV2hlcmVDbGF1c2UocHN0YXRlLAotCQkJCQkJCQkJCSAg IGNvcHlPYmplY3QocHJpLT53aGVyZUNsYXVzZSksCi0JCQkJCQkJCQkJICAgRVhQUl9LSU5EX1dI RVJFLAotCQkJCQkJCQkJCSAgICJQVUJMSUNBVElPTiBXSEVSRSIpOworLyoKKyAqIFRyYW5zZm9y bSB0aGUgcHVibGljYXRpb24gV0hFUkUgZXhwcmVzc2lvbiBmb3IgYWxsIHRoZSByZWxhdGlvbnMg aW4gdGhlIGxpc3QsCisgKiBlbnN1cmluZyBpdCBpcyBjb2VyY2VkIHRvIGJvb2xlYW4gYW5kIG5l Y2Vzc2FyeSBjb2xsYXRpb24gaW5mb3JtYXRpb24gaXMKKyAqIGFkZGVkIGlmIHJlcXVpcmVkLCBh bmQgYWRkIGEgbmV3IG5zaXRlbS9SVEUgZm9yIHRoZSBhc3NvY2lhdGVkIHJlbGF0aW9uIHRvCisg KiB0aGUgUGFyc2VTdGF0ZSdzIG5hbWVzcGFjZSBsaXN0LgorICovCitzdGF0aWMgdm9pZAorVHJh bnNmb3JtUHViVGFibGVXaGVyZUNsYXVzZXMoTGlzdCAqdGFibGVzLCBjb25zdCBjaGFyICpxdWVy eVN0cmluZykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKIAotCQkvKiBGaXggdXAgY29sbGF0aW9uIGlu Zm9ybWF0aW9uICovCi0JCWFzc2lnbl9leHByX2NvbGxhdGlvbnMocHN0YXRlLCB3aGVyZWNsYXVz ZSk7CisJZm9yZWFjaChsYywgdGFibGVzKQorCXsKKwkJUHVibGljYXRpb25UYWJsZSAqcHJpID0g KFB1YmxpY2F0aW9uVGFibGUgKikgbGZpcnN0KGxjKTsKKwkJUmVsYXRpb24JcmVsOwogCi0JCS8q Ci0JCSAqIFdlIGFsbG93IG9ubHkgc2ltcGxlIGV4cHJlc3Npb25zIGluIHJvdyBmaWx0ZXJzLiBT ZWUKLQkJICogY2hlY2tfc2ltcGxlX3Jvd2ZpbHRlcl9leHByX3dhbGtlci4KLQkJICovCi0JCWNo ZWNrX3NpbXBsZV9yb3dmaWx0ZXJfZXhwcih3aGVyZWNsYXVzZSwgcHN0YXRlKTsKKwkJaWYgKHBy aS0+d2hlcmVDbGF1c2UgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOwogCi0JCWZyZWVfcGFyc2VzdGF0 ZShwc3RhdGUpOworCQlyZWwgPSB0YWJsZV9vcGVucnYocHJpLT5yZWxhdGlvbiwgQWNjZXNzU2hh cmVMb2NrKTsKIAotCQlwcmktPndoZXJlQ2xhdXNlID0gd2hlcmVjbGF1c2U7CisJCXByaS0+d2hl cmVDbGF1c2UgPSBHZXRUcmFuc2Zvcm1XaGVyZUNsYXVzZXMocXVlcnlTdHJpbmcsIHJlbCwKKwkJ CQkJCQkJCQkJCQlwcmktPndoZXJlQ2xhdXNlLCBmYWxzZSk7CisJCXRhYmxlX2Nsb3NlKHJlbCwg QWNjZXNzU2hhcmVMb2NrKTsKIAl9CiB9CiAKLQogLyoKICAqIEdpdmVuIGEgbGlzdCBvZiB0YWJs ZXMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgYWRkZWQgdG8gYSBwdWJsaWNhdGlvbiwKICAqIHZlcmlm eSB0aGF0IHRoZXkgZnVsZmlsbCB0aGUgbmVjZXNzYXJ5IHByZWNvbmRpdGlvbnMsIG5hbWVseTog bm8gdGFibGVzCkBAIC03MjksNiArODIzLDUyIEBAIENoZWNrUHViUmVsYXRpb25Db2x1bW5MaXN0 KGNoYXIgKnB1Ym5hbWUsIExpc3QgKnRhYmxlcywKIH0KIAogLyoKKyAqIENyZWF0ZSBldmVudCB0 cmlnZ2VyIHdoaWNoIGlzIHVzZWQgZm9yIERETCByZXBsaWNhdGlvbi4KKyAqLworc3RhdGljIHZv aWQKK0NyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoY2hhciAqZXZlbnRuYW1lLCBDb21tYW5k VGFnICpjb21tYW5kcywKKwkJCQkJCQkgaW50IG5jb21tYW5kcywgT2JqZWN0QWRkcmVzcyBwdWJh ZGRyZXNzLAorCQkJCQkJCSBPaWQgcHVib2lkKQoreworCWludAkJCWk7CisJTGlzdAkgICAqdGFn cyA9IE5JTDsKKwlPaWQJCQl0cmlnZ2VyX2lkOworCU9iamVjdEFkZHJlc3MgcmVmZXJlbmNlZDsK KwlDcmVhdGVFdmVudFRyaWdTdG10ICpkZGxfdHJpZ2dlcjsKKwljaGFyCQl0cmlnZ2VyX25hbWVb TkFNRURBVEFMRU5dOworCWNoYXIJCXRyaWdnZXJfZnVuY19uYW1lW05BTUVEQVRBTEVOXTsKKwlz dGF0aWMgY29uc3QgY2hhciAqdHJpZ2dlcl9mdW5jX3ByZWZpeCA9ICJwdWJsaWNhdGlvbl9kZXBh cnNlXyVzIjsKKworCWRkbF90cmlnZ2VyID0gbWFrZU5vZGUoQ3JlYXRlRXZlbnRUcmlnU3RtdCk7 CisKKwlzbnByaW50Zih0cmlnZ2VyX25hbWUsIHNpemVvZih0cmlnZ2VyX25hbWUpLCBQVUJfRVZF TlRfVFJJR19QUkVGSVgsCisJCQkgZXZlbnRuYW1lLCBwdWJvaWQpOworCXNucHJpbnRmKHRyaWdn ZXJfZnVuY19uYW1lLCBzaXplb2YodHJpZ2dlcl9mdW5jX25hbWUpLCB0cmlnZ2VyX2Z1bmNfcHJl Zml4LAorCQkJIGV2ZW50bmFtZSk7CisKKwlkZGxfdHJpZ2dlci0+dHJpZ25hbWUgPSBwc3RyZHVw KHRyaWdnZXJfbmFtZSk7CisJZGRsX3RyaWdnZXItPmV2ZW50bmFtZSA9IGV2ZW50bmFtZTsKKwlk ZGxfdHJpZ2dlci0+ZnVuY25hbWUgPSBTeXN0ZW1GdW5jTmFtZSh0cmlnZ2VyX2Z1bmNfbmFtZSk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgbmNvbW1hbmRzOyBpKyspCisJeworCQlTdHJpbmcJICAgKnRh ZyA9IG1ha2VTdHJpbmcocHN0cmR1cChHZXRDb21tYW5kVGFnTmFtZShjb21tYW5kc1tpXSkpKTsK KworCQl0YWdzID0gbGFwcGVuZCh0YWdzLCB0YWcpOworCX0KKworCWRkbF90cmlnZ2VyLT53aGVu Y2xhdXNlID0gbGlzdF9tYWtlMShtYWtlRGVmRWxlbSgidGFnIiwgKE5vZGUgKikgdGFncywgLTEp KTsKKworCXRyaWdnZXJfaWQgPSBDcmVhdGVFdmVudFRyaWdnZXIoZGRsX3RyaWdnZXIpOworCisJ LyoKKwkgKiBSZWdpc3RlciB0aGUgZXZlbnQgdHJpZ2dlcnMgYXMgaW50ZXJuYWxseSBkZXBlbmRl bnQgb24gdGhlIHB1YmxpY2F0aW9uLgorCSAqLworCU9iamVjdEFkZHJlc3NTZXQocmVmZXJlbmNl ZCwgRXZlbnRUcmlnZ2VyUmVsYXRpb25JZCwgdHJpZ2dlcl9pZCk7CisJcmVjb3JkRGVwZW5kZW5j eU9uKCZyZWZlcmVuY2VkLCAmcHViYWRkcmVzcywgREVQRU5ERU5DWV9JTlRFUk5BTCk7Cit9CisK Ky8qCiAgKiBDcmVhdGUgbmV3IHB1YmxpY2F0aW9uLgogICovCiBPYmplY3RBZGRyZXNzCkBAIC03 NDEsNiArODgxLDcgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVh dGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJRGF0dW0JCXZhbHVlc1tOYXR0c19wZ19wdWJsaWNh dGlvbl07CiAJSGVhcFR1cGxlCXR1cDsKIAlib29sCQlwdWJsaXNoX2dpdmVuOworCWJvb2wJCWRk bF90eXBlX2dpdmVuOwogCVB1YmxpY2F0aW9uQWN0aW9ucyBwdWJhY3Rpb25zOwogCWJvb2wJCXB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuOwogCWJvb2wJCXB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290OwpAQCAtNzgxLDkgKzkyMiwxMSBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0 YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAogCXBhcnNlX3B1Ymxp Y2F0aW9uX29wdGlvbnMocHN0YXRlLAogCQkJCQkJCSAgc3RtdC0+b3B0aW9ucywKKwkJCQkJCQkg IHN0bXQtPmZvcl9hbGxfdGFibGVzLAogCQkJCQkJCSAgJnB1Ymxpc2hfZ2l2ZW4sICZwdWJhY3Rp b25zLAogCQkJCQkJCSAgJnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuLAotCQkJCQkJ CSAgJnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKwkJCQkJCQkgICZwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCwKKwkJCQkJCQkgICZkZGxfdHlwZV9naXZlbik7CiAKIAlwdWJvaWQgPSBH ZXROZXdPaWRXaXRoSW5kZXgocmVsLCBQdWJsaWNhdGlvbk9iamVjdEluZGV4SWQsCiAJCQkJCQkJ CUFudW1fcGdfcHVibGljYXRpb25fb2lkKTsKQEAgLTc5OCw2ICs5NDEsMTAgQEAgQ3JlYXRlUHVi bGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQp CiAJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRlbGV0ZSk7CiAJdmFsdWVzW0FudW1fcGdf cHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9CiAJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25z LnB1YnRydW5jYXRlKTsKKwl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGxfYWxsIC0g MV0gPQorCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGxfYWxsKTsKKwl2YWx1ZXNbQW51 bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGxfdGFibGUgLSAxXSA9CisJQm9vbEdldERhdHVtKHB1YmFj dGlvbnMucHViZGRsX3RhYmxlKTsKIAl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ2aWFy b290IC0gMV0gPQogCQlCb29sR2V0RGF0dW0ocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOwog CkBAIC04NTgsNiArMTAwNSw1MyBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3Rh dGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJfQogCX0KIAorCVRyYW5zZm9ybVB1 YlRhYmxlV2hlcmVDbGF1c2VzKHJlbGF0aW9ucywgcHN0YXRlLT5wX3NvdXJjZXRleHQpOworCUV2 ZW50VHJpZ2dlckNvbGxlY3RDcmVhdGVQdWJsaWNhdGlvbihzdG10LCBwdWJvaWQsIHJlbGF0aW9u cywgc2NoZW1haWRsaXN0KTsKKworCS8qCisJICogQ3JlYXRlIGFuIGV2ZW50IHRyaWdnZXIgdG8g YWxsb3cgbG9nZ2luZyBvZiBEREwgc3RhdGVtZW50cy4KKwkgKgorCSAqLworCWlmIChwdWJhY3Rp b25zLnB1YmRkbF90YWJsZSB8fCBwdWJhY3Rpb25zLnB1YmRkbF9hbGwpCisJeworCQlDb21tYW5k VGFnCXN0YXJ0X2NvbW1hbmRzW10gPSB7Q01EVEFHX0RST1BfVEFCTEV9OworCQlDb21tYW5kVGFn CXJld3JpdGVfY29tbWFuZHNbXSA9IHtDTURUQUdfQUxURVJfVEFCTEV9OworCQlDb21tYW5kVGFn CWluaXRfY29tbWFuZHNbXSA9IHsKKwkJCUNNRFRBR19DUkVBVEVfVEFCTEVfQVMsCisJCQlDTURU QUdfU0VMRUNUX0lOVE8KKwkJfTsKKwkJaW50IG5jb21tYW5kcyA9IDA7CisJCUNvbW1hbmRUYWcg KmVuZF9jb21tYW5kcyA9IE5VTEw7CisKKwkJaWYgKHB1YmFjdGlvbnMucHViZGRsX2FsbCkKKwkJ CWVuZF9jb21tYW5kcyA9IEdldENvbW1hbmRUYWdzRm9yRERMUmVwbCgmbmNvbW1hbmRzKTsKKwkJ ZWxzZSBpZiAocHViYWN0aW9ucy5wdWJkZGxfdGFibGUpCisJCXsKKwkJCW5jb21tYW5kcyA9IDM7 CisJCQllbmRfY29tbWFuZHMgPSBwYWxsb2MwKG5jb21tYW5kcyAqIHNpemVvZihDb21tYW5kVGFn KSk7CisJCQllbmRfY29tbWFuZHNbMF0gPSBDTURUQUdfQ1JFQVRFX1RBQkxFOworCQkJZW5kX2Nv bW1hbmRzWzFdID0gQ01EVEFHX0FMVEVSX1RBQkxFOworCQkJZW5kX2NvbW1hbmRzWzJdID0gQ01E VEFHX0RST1BfVEFCTEU7CisJCX0KKworCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX2VuZCBl dmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoUFVCX1RSSUdf RVZFTlQxLCBlbmRfY29tbWFuZHMsCisJCQkJCQkJCQkgbmNvbW1hbmRzLCBteXNlbGYsIHB1Ym9p ZCk7CisJCXBmcmVlKGVuZF9jb21tYW5kcyk7CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFu ZF9zdGFydCBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIo UFVCX1RSSUdfRVZFTlQyLCBzdGFydF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihzdGFy dF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIHRhYmxlX3Jl d3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKFBV Ql9UUklHX0VWRU5UMywgcmV3cml0ZV9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihyZXdy aXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUgdGFibGVf aW5pdF93cml0ZSBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdn ZXIoUFVCX1RSSUdfRVZFTlQ0LCBpbml0X2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKGlu aXRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisJfQorCiAJdGFibGVfY2xvc2UocmVsLCBS b3dFeGNsdXNpdmVMb2NrKTsKIAogCUludm9rZU9iamVjdFBvc3RDcmVhdGVIb29rKFB1YmxpY2F0 aW9uUmVsYXRpb25JZCwgcHVib2lkLCAwKTsKQEAgLTg4Miw2ICsxMDc2LDcgQEAgQWx0ZXJQdWJs aWNhdGlvbk9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAq c3RtdCwKIAlib29sCQlyZXBsYWNlc1tOYXR0c19wZ19wdWJsaWNhdGlvbl07CiAJRGF0dW0JCXZh bHVlc1tOYXR0c19wZ19wdWJsaWNhdGlvbl07CiAJYm9vbAkJcHVibGlzaF9naXZlbjsKKwlib29s CQlkZGxfdHlwZV9naXZlbjsKIAlQdWJsaWNhdGlvbkFjdGlvbnMgcHViYWN0aW9uczsKIAlib29s CQlwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbjsKIAlib29sCQlwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdDsKQEAgLTg5MCwxMSArMTA4NSwxNSBAQCBBbHRlclB1YmxpY2F0aW9uT3B0 aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCUxp c3QJICAgKnJvb3RfcmVsaWRzID0gTklMOwogCUxpc3RDZWxsICAgKmxjOwogCisJcHViZm9ybSA9 IChGb3JtX3BnX3B1YmxpY2F0aW9uKSBHRVRTVFJVQ1QodHVwKTsKKwogCXBhcnNlX3B1YmxpY2F0 aW9uX29wdGlvbnMocHN0YXRlLAogCQkJCQkJCSAgc3RtdC0+b3B0aW9ucywKKwkJCQkJCQkgIHB1 YmZvcm0tPnB1YmFsbHRhYmxlcywKIAkJCQkJCQkgICZwdWJsaXNoX2dpdmVuLCAmcHViYWN0aW9u cywKIAkJCQkJCQkgICZwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbiwKLQkJCQkJCQkg ICZwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CisJCQkJCQkJICAmcHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QsCisJCQkJCQkJICAmZGRsX3R5cGVfZ2l2ZW4pOwogCiAJcHViZm9ybSA9IChG b3JtX3BnX3B1YmxpY2F0aW9uKSBHRVRTVFJVQ1QodHVwKTsKIApAQCAtOTk2LDYgKzExOTUsMTIg QEAgQWx0ZXJQdWJsaWNhdGlvbk9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1Ymxp Y2F0aW9uU3RtdCAqc3RtdCwKIAogCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVu Y2F0ZSAtIDFdID0gQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHVidHJ1bmNhdGUpOwogCQlyZXBs YWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPSB0cnVlOworCisJCXZh bHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbF9hbGwgLSAxXSA9IEJvb2xHZXREYXR1bShw dWJhY3Rpb25zLnB1YmRkbF9hbGwpOworCQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1 YmRkbF9hbGwgLSAxXSA9IHRydWU7CisKKwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVi ZGRsX3RhYmxlIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGxfdGFibGUpOwor CQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbF90YWJsZSAtIDFdID0gdHJ1ZTsK IAl9CiAKIAlpZiAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4pCkBAIC0xMzgwLDYg KzE1ODUsOCBAQCBBbHRlclB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJs aWNhdGlvblN0bXQgKnN0bXQpCiAJUmVsYXRpb24JcmVsOwogCUhlYXBUdXBsZQl0dXA7CiAJRm9y bV9wZ19wdWJsaWNhdGlvbiBwdWJmb3JtOworCUxpc3QJICAgKnJlbGF0aW9ucyA9IE5JTDsKKwlM aXN0CSAgICpzY2hlbWFpZGxpc3QgPSBOSUw7CiAKIAlyZWwgPSB0YWJsZV9vcGVuKFB1YmxpY2F0 aW9uUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CiAKQEAgLTE0MDMsOCArMTYxMCw2IEBA IEFsdGVyUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3Rt dCAqc3RtdCkKIAkJQWx0ZXJQdWJsaWNhdGlvbk9wdGlvbnMocHN0YXRlLCBzdG10LCByZWwsIHR1 cCk7CiAJZWxzZQogCXsKLQkJTGlzdAkgICAqcmVsYXRpb25zID0gTklMOwotCQlMaXN0CSAgICpz Y2hlbWFpZGxpc3QgPSBOSUw7CiAJCU9pZAkJCXB1YmlkID0gcHViZm9ybS0+b2lkOwogCiAJCU9i amVjdHNJblB1YmxpY2F0aW9uVG9PaWRzKHN0bXQtPnB1Ym9iamVjdHMsIHBzdGF0ZSwgJnJlbGF0 aW9ucywKQEAgLTE0MzYsNiArMTY0MSwxMCBAQCBBbHRlclB1YmxpY2F0aW9uKFBhcnNlU3RhdGUg KnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCUFsdGVyUHVibGljYXRpb25T Y2hlbWFzKHN0bXQsIHR1cCwgc2NoZW1haWRsaXN0KTsKIAl9CiAKKwlUcmFuc2Zvcm1QdWJUYWJs ZVdoZXJlQ2xhdXNlcyhyZWxhdGlvbnMsIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0KTsKKwlFdmVudFRy aWdnZXJDb2xsZWN0QWx0ZXJQdWJsaWNhdGlvbihzdG10LCBwdWJmb3JtLT5vaWQsIHJlbGF0aW9u cywKKwkJCQkJCQkJCQlzY2hlbWFpZGxpc3QpOworCiAJLyogQ2xlYW51cC4gKi8KIAloZWFwX2Zy ZWV0dXBsZSh0dXApOwogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDEyOTM1NDUuLmZhY2VkNjggMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jCkBAIC00NjY1LDYgKzQ2NjUsOSBAQCBBVFByZXBDbWQoTGlzdCAqKndxdWV1 ZSwgUmVsYXRpb24gcmVsLCBBbHRlclRhYmxlQ21kICpjbWQsCiAJCQljbWQgPSBBVFBhcnNlVHJh bnNmb3JtQ21kKHdxdWV1ZSwgdGFiLCByZWwsIGNtZCwgcmVjdXJzZSwgbG9ja21vZGUsCiAJCQkJ CQkJCQkgIEFUX1BBU1NfVU5TRVQsIGNvbnRleHQpOwogCQkJQXNzZXJ0KGNtZCAhPSBOVUxMKTsK KworCQkJRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlU3RhcnQoY21kLCByZWwpOworCiAJCQkvKiBQZXJm b3JtcyBvd24gcmVjdXJzaW9uICovCiAJCQlBVFByZXBBbHRlckNvbHVtblR5cGUod3F1ZXVlLCB0 YWIsIHJlbCwgcmVjdXJzZSwgcmVjdXJzaW5nLCBjbWQsCiAJCQkJCQkJCSAgbG9ja21vZGUsIGNv bnRleHQpOwpAQCAtNDkzNiw2ICs0OTM5LDcgQEAgQVRFeGVjQ21kKExpc3QgKip3cXVldWUsIEFs dGVyZWRUYWJsZUluZm8gKnRhYiwKIHsKIAlPYmplY3RBZGRyZXNzIGFkZHJlc3MgPSBJbnZhbGlk T2JqZWN0QWRkcmVzczsKIAlSZWxhdGlvbglyZWwgPSB0YWItPnJlbDsKKwlib29sCQljb21tYW5k Q29sbGVjdGVkID0gZmFsc2U7CiAKIAlzd2l0Y2ggKGNtZC0+c3VidHlwZSkKIAl7CkBAIC01MDU5 LDYgKzUwNjMsOCBAQCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAq dGFiLAogCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlwZToJLyogQUxURVIgQ09MVU1OIFRZUEUgKi8K IAkJCS8qIHBhcnNlIHRyYW5zZm9ybWF0aW9uIHdhcyBkb25lIGVhcmxpZXIgKi8KIAkJCWFkZHJl c3MgPSBBVEV4ZWNBbHRlckNvbHVtblR5cGUodGFiLCByZWwsIGNtZCwgbG9ja21vZGUpOworCQkJ RXZlbnRUcmlnZ2VyQWx0ZXJUeXBlRW5kKChOb2RlICopIGNtZCwgYWRkcmVzcywgdGFiLT5yZXdy aXRlKTsKKwkJCWNvbW1hbmRDb2xsZWN0ZWQgPSB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRf QWx0ZXJDb2x1bW5HZW5lcmljT3B0aW9uczoJLyogQUxURVIgQ09MVU1OIE9QVElPTlMgKi8KIAkJ CWFkZHJlc3MgPQpAQCAtNTIzMSw4ICs1MjM3LDggQEAgQVRFeGVjQ21kKExpc3QgKip3cXVldWUs IEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIAkvKgogCSAqIFJlcG9ydCB0aGUgc3ViY29tbWFuZCB0 byBpbnRlcmVzdGVkIGV2ZW50IHRyaWdnZXJzLgogCSAqLwotCWlmIChjbWQpCi0JCUV2ZW50VHJp Z2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcyk7CisJaWYg KGNtZCAmJiAhY29tbWFuZENvbGxlY3RlZCkKKwkJRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFi bGVTdWJjbWQoKE5vZGUgKikgY21kLCBhZGRyZXNzLCB0YWItPnJld3JpdGUpOwogCiAJLyoKIAkg KiBCdW1wIHRoZSBjb21tYW5kIGNvdW50ZXIgdG8gZW5zdXJlIHRoZSBuZXh0IHN1YmNvbW1hbmQg aW4gdGhlIHNlcXVlbmNlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRp bGNtZC5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwppbmRleCBmOTIxOGY0 Li44YjUzYjQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5j CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMKQEAgLTEzOTIsNiArMTM5 Miw3IEBAIGV4cGFuZFRhYmxlTGlrZUNsYXVzZShSYW5nZVZhciAqaGVhcFJlbCwgVGFibGVMaWtl Q2xhdXNlICp0YWJsZV9saWtlX2NsYXVzZSkKIAkJYXRjbWQtPmNtZHMgPSBhdHN1YmNtZHM7CiAJ CWF0Y21kLT5vYmp0eXBlID0gT0JKRUNUX1RBQkxFOwogCQlhdGNtZC0+bWlzc2luZ19vayA9IGZh bHNlOworCQlhdGNtZC0+dGFibGVfbGlrZSA9IHRydWU7CiAJCXJlc3VsdCA9IGxjb25zKGF0Y21k LCByZXN1bHQpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUK aW5kZXggZDM2ODBlOS4uYjc5ZGRkOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3IEBAIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChzcmNk aXIpICQoQ1BQRkxBR1MpCiBPQkpTID0gXAogCWFwcGx5cGFyYWxsZWx3b3JrZXIubyBcCiAJZGRs bWVzc2FnZS5vIFwKKwlkZGx0cmlnZ2VyLm8gXAogCWRlY29kZS5vIFwKIAlsYXVuY2hlci5vIFwK IAlsb2dpY2FsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9kZGx0cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbHRyaWdn ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2FkNDY5Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMK QEAgLTAsMCArMSwzNTggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbHRyaWdnZXIu YworICoJICBMb2dpY2FsIERETCBtZXNzYWdlcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJ T04KKyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMKKyAq CisgKiBOT1RFUworICoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21tYW5kIGFuZCBsb2cgaXQuCisg KgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisK KyNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgi CisjaW5jbHVkZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIgorI2luY2x1ZGUgImZ1bmNhcGku aCIKKyNpbmNsdWRlICJsaWIvaWxpc3QuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNz YWdlLmgiCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgorI2luY2x1ZGUgInV0aWxzL2Zt Z3Jwcm90b3MuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKworZXh0ZXJuIEV2ZW50 VHJpZ2dlclF1ZXJ5U3RhdGUgKmN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZTsKKworLyoKKyAqIERl cGFyc2UgdGhlIGRkbCBjb21tYW5kIGFuZCBsb2cgaXQgcHJpb3IgdG8KKyAqIGV4ZWN1dGlvbi4g Q3VycmVudGx5IG9ubHkgdXNlZCBmb3IgRFJPUCBUQUJMRSBjb21tYW5kCisgKiBzbyB0aGF0IGNh dGFsb2cgY2FuIGJlIGFjY2Vzc2VkIGJlZm9yZSBiZWluZyBkZWxldGVkLgorICogVGhpcyBpcyB0 byBjaGVjayBpZiB0aGUgdGFibGUgaXMgcGFydCBvZiB0aGUgcHVibGljYXRpb24KKyAqIG9yIG5v dC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwlFdmVudFRyaWdnZXJEYXRhICp0cmlnZGF0YTsKKwljaGFyCSAg ICpjb21tYW5kID0gcHNwcmludGYoIkRyb3AgdGFibGUgY29tbWFuZCBzdGFydCIpOworCURyb3BT dG10ICAgKnN0bXQ7CisJTGlzdENlbGwgICAqY2VsbDE7CisKKwlpZiAoIUNBTExFRF9BU19FVkVO VF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJp Z2dlciBtYW5hZ2VyIik7CisKKwl0cmlnZGF0YSA9IChFdmVudFRyaWdnZXJEYXRhICopIGZjaW5m by0+Y29udGV4dDsKKwlzdG10ID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7CisK KwkvKiBFeHRyYWN0IHRoZSByZWxpZCBmcm9tIHRoZSBwYXJzZSB0cmVlICovCisJZm9yZWFjaChj ZWxsMSwgc3RtdC0+b2JqZWN0cykKKwl7CisJCWNoYXIJCXJlbHBlcnNpc3Q7CisJCU5vZGUJICAg Km9iamVjdCA9IGxmaXJzdChjZWxsMSk7CisJCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwkJUmVs YXRpb24JcmVsYXRpb24gPSBOVUxMOworCisJCWFkZHJlc3MgPSBnZXRfb2JqZWN0X2FkZHJlc3Mo c3RtdC0+cmVtb3ZlVHlwZSwKKwkJCQkJCQkJCSBvYmplY3QsCisJCQkJCQkJCQkgJnJlbGF0aW9u LAorCQkJCQkJCQkJIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssCisJCQkJCQkJCQkgdHJ1ZSk7CisKKwkJ LyogT2JqZWN0IGRvZXMgbm90IGV4aXN0LCBub3RoaW5nIHRvIGRvICovCisJCWlmICghcmVsYXRp b24pCisJCQljb250aW51ZTsKKworCQlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShh ZGRyZXNzLm9iamVjdElkKTsKKworCQkvKgorCQkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBm b3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxl LgorCQkgKgorCQkgKiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJs ZXMgc28gdGhhdCB1bmxvZ2dlZAorCQkgKiB0YWJsZXMgY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQg YWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzCisJCSAqIG1ha2VzIGl0IHBvc3Np YmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUKKwkJ ICogaW5jb21pbmcgcmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUu CisJCSAqLworCQlpZiAocmVscGVyc2lzdCAhPSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQkJTG9n TG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBhZGRyZXNzLm9iamVjdElkLCBEQ1RfVGFibGVE cm9wU3RhcnQsCisJCQkJCQkJCSBjb21tYW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKworCQlp ZiAocmVsYXRpb24pCisJCQl0YWJsZV9jbG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKKwl9CisJcmV0 dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFy c2VfdGFibGVfcmV3cml0ZQorICoKKyAqIERlcGFyc2UgdGhlIGRkbCB0YWJsZSByZXdyaXRlIGNv bW1hbmQgYW5kIGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVf cmV3cml0ZShQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJCXJlbHBlcnNpc3Q7CisJQ29sbGVj dGVkQ29tbWFuZCAqY21kOworCWNoYXIJICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURf QVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2 ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl LT5jdXJyZW50Q29tbWFuZDsKKworCUFzc2VydChjbWQgJiYgY21kLT5kLmFsdGVyVGFibGUucmV3 cml0ZSk7CisKKwlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuYWx0ZXJU YWJsZS5vYmplY3RJZCk7CisKKwkvKgorCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBj b21tYW5kcyB3aG9zZSB0YXJnZXQgdGFibGUgaXMgYSB0ZW1wb3JhcnkKKwkgKiB0YWJsZS4KKwkg KgorCSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0 aGF0IHVubG9nZ2VkIHRhYmxlcworCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQg b24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcyBtYWtlcyBpdAorCSAqIHBvc3NpYmxlIHRvIGRp cmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkg KiByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkgKi8KKwlp ZiAocmVscGVyc2lzdCAhPSBSRUxQRVJTSVNURU5DRV9URU1QKQorCXsKKwkJLyogRGVwYXJzZSB0 aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlIHNh bWUuICovCisJCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxz ZSk7CisKKwkJaWYgKGpzb25fc3RyaW5nICE9IE5VTEwpCisJCQlMb2dMb2dpY2FsRERMTWVzc2Fn ZSgiZGVwYXJzZSIsIGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkLCBEQ1RfVGFibGVBbHRlciwK KwkJCQkJCQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisJfQorCisJ cmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIGRk bCBjb21tYW5kIGFuZCBsb2cgaXQuIFRoaXMgZnVuY3Rpb24KKyAqIGlzIGNhbGxlZCBhZnRlciB0 aGUgZXhlY3V0aW9uIG9mIHRoZSBjb21tYW5kIGJ1dCBiZWZvcmUgdGhlCisgKiB0cmFuc2FjdGlv biBjb21taXRzLgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9l bmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlzbGlzdF9pdGVyCWl0 ZXI7CisJRGVwYXJzZWRDb21tYW5kVHlwZSB0eXBlOworCU9pZAkJCXJlbGlkOworCWNoYXIJCXJl bGtpbmQ7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2co RVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwlmb3JlYWNo KGxjLCBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0KQorCXsKKwkJY2hhcgkJ cmVscGVyc2lzdCA9IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVDsKKwkJQ29sbGVjdGVkQ29tbWFu ZCAqY21kID0gbGZpcnN0KGxjKTsKKwkJY2hhcgkgICAqanNvbl9zdHJpbmc7CisKKwkJLyogUmV3 cml0ZSBEREwgaGFzIGJlZW4gaGFuZGxlZCBpbiB0YWJsZV9yZXdyaXRlIHRyaWdnZXIgKi8KKwkJ aWYgKGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUpCisJCXsKKwkJCVJlbmFtZVN0bXQgKnJlbmFt ZVN0bXQgPSAoUmVuYW1lU3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKworCQkJaWYgKHJlbmFtZVN0 bXQgJiYgcmVuYW1lU3RtdC0+cmVsYXRpb25UeXBlICE9IE9CSkVDVF9UWVBFICYmCisJCQkJcmVu YW1lU3RtdC0+cmVsYXRpb25UeXBlICE9IE9CSkVDVF9UQUJMRSkKKwkJCQljb250aW51ZTsKKwkJ fQorCisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX1NpbXBsZSAmJgorCQkJIU9pZElzVmFsaWQoY21k LT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQt PnR5cGUgPT0gU0NUX0FsdGVyVGFibGUpCisJCXsKKwkJCXJlbGlkID0gY21kLT5kLmFsdGVyVGFi bGUub2JqZWN0SWQ7CisJCQl0eXBlID0gRENUX1RhYmxlQWx0ZXI7CisJCX0KKwkJZWxzZQorCQl7 CisJCQkvKiBPbmx5IFNDVF9TaW1wbGUgZm9yIG5vdyAqLworCQkJcmVsaWQgPSBjbWQtPmQuc2lt cGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisJCQl0eXBlID0gRENUX1NpbXBsZUNtZDsKKwkJfQorCisJ CXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQocmVsaWQpOworCQlpZiAocmVsa2luZCkKKwkJCXJl bHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKHJlbGlkKTsKKworCQkvKgorCQkgKiBEbyBu b3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEK KwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkgKiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBs b2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZAorCQkgKiB0YWJsZXMgY2Fu IGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlz CisJCSAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dF RCBjb21tYW5kIGFuZCB0aGUKKwkJICogaW5jb21pbmcgcmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQg Y3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlpZiAocmVscGVyc2lzdCAhPSBSRUxQRVJT SVNURU5DRV9URU1QKQorCQl7CisJCQkvKgorCQkJICogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQg YW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlCisJCQkgKiBzYW1lLgorCQkJ ICovCisJCQlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2Up OworCisJCQlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJCQlMb2dMb2dpY2FsRERMTWVzc2Fn ZSgiZGVwYXJzZSIsIHJlbGlkLCB0eXBlLCBqc29uX3N0cmluZywKKwkJCQkJCQkJCSBzdHJsZW4o anNvbl9zdHJpbmcpICsgMSk7CisJCX0KKwl9CisKKwlzbGlzdF9mb3JlYWNoKGl0ZXIsICYoY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5TUUxEcm9wTGlzdCkpCisJeworCQl2b2xhdGlsZSBTUUxE cm9wT2JqZWN0ICpvYmo7CisJCURyb3BTdG10ICAgKnN0bXQ7CisJCUV2ZW50VHJpZ2dlckRhdGEg KnRyaWdkYXRhOworCQljaGFyCSAgICpjb21tYW5kOworCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNt ZHR5cGU7CisJCWNvbnN0IGNoYXIgKnRtcHR5cGU7CisJCU9iamVjdENsYXNzCW9iamNsYXNzOwor CQlPYmplY3RBZGRyZXNzIG9iamFkZHI7CisKKwkJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0 YSAqKSBmY2luZm8tPmNvbnRleHQ7CisJCXN0bXQgPSAoRHJvcFN0bXQgKikgdHJpZ2RhdGEtPnBh cnNldHJlZTsKKworCQlvYmogPSBzbGlzdF9jb250YWluZXIoU1FMRHJvcE9iamVjdCwgbmV4dCwg aXRlci5jdXIpOworCQlvYmphZGRyID0gb2JqLT5hZGRyZXNzOworCQlvYmpjbGFzcyA9IGdldE9i amVjdENsYXNzKCZvYmphZGRyKTsKKworCQlpZiAoc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRh YmxlIikgPT0gMCkKKwkJCWNtZHR5cGUgPSBEQ1RfVGFibGVEcm9wRW5kOworCQllbHNlIGlmIChv YmpjbGFzcyA9PSBPQ0xBU1NfU0NIRU1BIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19PUEVS QVRPUiB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfT1BDTEFTUyB8fAorCQkJCSBvYmpjbGFz cyA9PSBPQ0xBU1NfT1BGQU1JTFkgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX0NBU1QgfHwK KwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RZUEUgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNT X1RSSUdHRVIgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX0NPTlZFUlNJT04gfHwKKwkJCQkg b2JqY2xhc3MgPT0gT0NMQVNTX1BPTElDWSB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfUkVX UklURSB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfRVhURU5TSU9OIHx8CisJCQkJIG9iamNs YXNzID09IE9DTEFTU19GRFcgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RTQ09ORklHIHx8 CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19UU0RJQ1QgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NM QVNTX1RTVEVNUExBVEUgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RTUEFSU0VSIHx8CisJ CQkJIG9iamNsYXNzID09IE9DTEFTU19UUkFOU0ZPUk0gfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NM QVNTX0ZPUkVJR05fU0VSVkVSIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19DT0xMQVRJT04g fHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1VTRVJfTUFQUElORyB8fAorCQkJCSBvYmpjbGFz cyA9PSBPQ0xBU1NfTEFOR1VBR0UgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1NUQVRJU1RJ Q19FWFQgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX0FNIHx8CisJCQkJIG9iamNsYXNzID09 IE9DTEFTU19QVUJMSUNBVElPTiB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiZm9y ZWlnbiB0YWJsZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImluZGV4 IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAic2VxdWVuY2UiKSA9PSAw IHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ2aWV3IikgPT0gMCB8fAorCQkJCSBz dHJjbXAob2JqLT5vYmplY3R0eXBlLCAiZnVuY3Rpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJtYXRlcmlhbGl6ZWQgdmlldyIpID09IDAgfHwKKwkJCQkgc3RyY21w KG9iai0+b2JqZWN0dHlwZSwgInByb2NlZHVyZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+ b2JqZWN0dHlwZSwgInJvdXRpbmUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5 cGUsICJhZ2dyZWdhdGUiKSA9PSAwKQorCQkJY21kdHlwZSA9IERDVF9PYmplY3REcm9wOworCQll bHNlCisJCQljb250aW51ZTsKKworCQkvKiBDaGFuZ2UgZm9yZWlnbi1kYXRhIHdyYXBwZXIgdG8g Zm9yZWlnbiBkYXRhIHdyYXBwZXIgKi8KKwkJaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBlLCAi Zm9yZWlnbi1kYXRhIHdyYXBwZXIiLCAyMCkgPT0gMCkKKwkJeworCQkJdG1wdHlwZSA9IHBzdHJk dXAoImZvcmVpZ24gZGF0YSB3cmFwcGVyIik7CisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2Nv bW1hbmQob2JqLT5vYmppZGVudGl0eSwgdG1wdHlwZSwKKwkJCQkJCQkJCQkgICBzdG10LT5iZWhh dmlvcik7CisJCX0KKworCQkvKiBDaGFuZ2Ugc3RhdGlzdGljcyBvYmplY3QgdG8gc3RhdGlzdGlj cyAqLworCQllbHNlIGlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgInN0YXRpc3RpY3Mgb2Jq ZWN0IiwKKwkJCQkJCSBzdHJsZW4oInN0YXRpc3RpY3Mgb2JqZWN0IikpID09IDApCisJCXsKKwkJ CXRtcHR5cGUgPSBwc3RyZHVwKCJzdGF0aXN0aWNzIik7CisJCQljb21tYW5kID0gZGVwYXJzZV9k cm9wX2NvbW1hbmQob2JqLT5vYmppZGVudGl0eSwgdG1wdHlwZSwKKwkJCQkJCQkJCQkgICBzdG10 LT5iZWhhdmlvcik7CisJCX0KKworCQkvKgorCQkgKiBPYmplY3QgaWRlbnRpdHkgbmVlZHMgdG8g YmUgbW9kaWZpZWQgdG8gbWFrZSB0aGUgZHJvcCB3b3JrCisJCSAqCisJCSAqIEZST006IDxyb2xl PiBvbiBzZXJ2ZXIgPHNlcnZlcm5hbWU+IFRPICA6IGZvciA8cm9sZT4gc2VydmVyCisJCSAqIDxz ZXJ2ZXJuYW1lPgorCQkgKgorCQkgKi8KKwkJZWxzZSBpZiAoc3RybmNtcChvYmotPm9iamVjdHR5 cGUsICJ1c2VyIG1hcHBpbmciLCAxMikgPT0gMCkKKwkJeworCQkJY2hhcgkgICAqb25fc2VydmVy OworCisJCQl0bXB0eXBlID0gcGFsbG9jKHN0cmxlbihvYmotPm9iamlkZW50aXR5KSArIDIpOwor CQkJb25fc2VydmVyID0gc3Ryc3RyKG9iai0+b2JqaWRlbnRpdHksICJvbiBzZXJ2ZXIiKTsKKwor CQkJc3ByaW50ZigoY2hhciAqKSB0bXB0eXBlLCAiZm9yICIpOworCQkJc3RybmNhdCgoY2hhciAq KSB0bXB0eXBlLCBvYmotPm9iamlkZW50aXR5LCBvbl9zZXJ2ZXIgLSBvYmotPm9iamlkZW50aXR5 KTsKKwkJCXN0cmNhdCgoY2hhciAqKSB0bXB0eXBlLCBvbl9zZXJ2ZXIgKyAzKTsKKwkJCWNvbW1h bmQgPSBkZXBhcnNlX2Ryb3BfY29tbWFuZCh0bXB0eXBlLCBvYmotPm9iamVjdHR5cGUsCisJCQkJ CQkJCQkJICAgc3RtdC0+YmVoYXZpb3IpOworCQl9CisJCWVsc2UKKwkJCWNvbW1hbmQgPSBkZXBh cnNlX2Ryb3BfY29tbWFuZChvYmotPm9iamlkZW50aXR5LCBvYmotPm9iamVjdHR5cGUsCisJCQkJ CQkJCQkJICAgc3RtdC0+YmVoYXZpb3IpOworCisJCWlmIChjb21tYW5kKQorCQkJTG9nTG9naWNh bERETE1lc3NhZ2UoImRlcGFyc2UiLCBvYmotPmFkZHJlc3Mub2JqZWN0SWQsIGNtZHR5cGUsCisJ CQkJCQkJCSBjb21tYW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKwl9CisKKwlyZXR1cm4gUG9p bnRlckdldERhdHVtKE5VTEwpOworfQorCisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX3Rh YmxlX2luaXRfd3JpdGUKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgdGFibGUgY3JlYXRlIGNvbW1h bmQgYW5kIGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5p dF93cml0ZShQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJCXJlbHBlcnNpc3Q7CisJQ29sbGVj dGVkQ29tbWFuZCAqY21kOworCWNoYXIJICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURf QVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2 ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl LT5jdXJyZW50Q29tbWFuZDsKKwlBc3NlcnQoY21kKTsKKworCXJlbHBlcnNpc3QgPSBnZXRfcmVs X3BlcnNpc3RlbmNlKGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZCk7CisKKwkvKgorCSAq IERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFibGUg aXMgYSB0ZW1wb3JhcnkKKwkgKiB0YWJsZS4KKwkgKgorCSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2Fs IGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxlcworCSAqIGNh biBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhp cyBtYWtlcyBpdAorCSAqIHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dF RCBjb21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkgKiByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBj cmVhdGluZyBhIG5ldyB0YWJsZS4KKwkgKi8KKwlpZiAocmVscGVyc2lzdCA9PSBSRUxQRVJTSVNU RU5DRV9URU1QKQorCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworCisJLyogRGVwYXJz ZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhl IHNhbWUuICovCisJanNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIGZh bHNlKTsKKworCWlmIChqc29uX3N0cmluZyAhPSBOVUxMKQorCQlMb2dMb2dpY2FsRERMTWVzc2Fn ZSgiZGVwYXJzZSIsIGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZCwgRENUX1NpbXBsZUNt ZCwKKwkJCQkJCQkganNvbl9zdHJpbmcsIHN0cmxlbihqc29uX3N0cmluZykgKyAxKTsKKworCXJl dHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvbG9naWNhbC5jCmluZGV4IDM5ZTY4NjEuLmY1NmE3MTYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCisrKyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCkBAIC05NSw2ICs5NSwxMSBAQCBzdGF0aWMgdm9p ZCBzdHJlYW1fY2hhbmdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJC dWZmZXJUWE4gKnR4bgogc3RhdGljIHZvaWQgc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcihSZW9y ZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCQkJICBYTG9n UmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWwsCiAJCQkJCQkJCQkgIGNvbnN0 IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwor c3RhdGljIHZvaWQgc3RyZWFtX2RkbF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24s CisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgT2lkIHJlbGlkLCBE ZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXpl LCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyB2b2lkIHN0cmVhbV90cnVuY2F0ZV9jYl93 cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJ CQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRpb25zW10sIFJlb3JkZXJCdWZm ZXJDaGFuZ2UgKmNoYW5nZSk7CiAKQEAgLTI0NSw2ICsyNTAsNyBAQCBTdGFydHVwRGVjb2RpbmdD b250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0 cmVhbV9jb21taXRfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9jaGFu Z2VfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9tZXNzYWdlX2NiICE9 IE5VTEwpIHx8CisJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsX2NiICE9IE5VTEwpIHx8CiAJ CShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fdHJ1bmNhdGVfY2IgIT0gTlVMTCk7CiAKIAkvKgpAQCAt MjYyLDYgKzI2OCw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdp bl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+c3RyZWFtX2NvbW1pdCA9IHN0cmVhbV9jb21taXRf Y2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9jaGFuZ2UgPSBzdHJlYW1fY2hhbmdl X2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fbWVzc2FnZSA9IHN0cmVhbV9tZXNz YWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVyLT5zdHJlYW1fZGRsID0gc3RyZWFtX2RkbF9j Yl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX3RydW5jYXRlID0gc3RyZWFtX3RydW5j YXRlX2NiX3dyYXBwZXI7CiAKIApAQCAtMTU5Myw2ICsxNjAwLDQ4IEBAIHN0cmVhbV9tZXNzYWdl X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK IH0KIAogc3RhdGljIHZvaWQKK3N0cmVhbV9kZGxfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpj YWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLAorCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21t YW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkgY29u c3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHggPSBjYWNo ZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJvckNhbGxiYWNrU3RhdGUgc3RhdGU7CisJRXJy b3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisKKwlBc3NlcnQoIWN0eC0+ZmFzdF9mb3J3 YXJkKTsKKworCS8qIFdlJ3JlIG9ubHkgc3VwcG9zZWQgdG8gY2FsbCB0aGlzIHdoZW4gc3RyZWFt aW5nIGlzIHN1cHBvcnRlZC4gKi8KKwlBc3NlcnQoY3R4LT5zdHJlYW1pbmcpOworCisJLyogdGhp cyBjYWxsYmFjayBpcyBvcHRpb25hbCAqLworCWlmIChjdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRs X2NiID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRo ZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNhbGxi YWNrX25hbWUgPSAic3RyZWFtX2RkbCI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2Fn ZV9sc247CisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxi YWNrOworCWVycmNhbGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5w cmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZl cnJjYWxsYmFjazsKKworCS8qIHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0 ZXMgPSB0cnVlOworCWN0eC0+d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IElu dmFsaWRUcmFuc2FjdGlvbklkOworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsK KworCS8qIGRvIHRoZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJh Y2tzLnN0cmVhbV9kZGxfY2IoY3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLAor CQkJCQkJCQkJCWNtZHR5cGUsIG1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3AgdGhl IGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJh Y2sucHJldmlvdXM7Cit9CisKK3N0YXRpYyB2b2lkCiBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBl cihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJICAg aW50IG5yZWxhdGlvbnMsIFJlbGF0aW9uIHJlbGF0aW9uc1tdLAogCQkJCQkJICAgUmVvcmRlckJ1 ZmZlckNoYW5nZSAqY2hhbmdlKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVz b24uYnVpbGQKaW5kZXggOTljNjA4ZC4uMDVlNzc1NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCkBAIC0zLDYgKzMsNyBAQAogYmFja2VuZF9zb3VyY2Vz ICs9IGZpbGVzKAogICAnYXBwbHlwYXJhbGxlbHdvcmtlci5jJywKICAgJ2RkbG1lc3NhZ2UuYycs CisgICdkZGx0cmlnZ2VyLmMnLAogICAnZGVjb2RlLmMnLAogICAnbGF1bmNoZXIuYycsCiAgICds b2dpY2FsLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9w cm90by5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IDNh OWQ1M2EuLmRlODc0YzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcHJvdG8uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMK QEAgLTY2NCw2ICs2NjQsNDcgQEAgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8g b3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCiB9CiAKIC8qCisgKiBSZWFk IERETCBNRVNTQUdFIGZyb20gc3RyZWFtCisgKi8KK2NoYXIgKgorbG9naWNhbHJlcF9yZWFkX2Rk bChTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sCisJCQkJCQkgICBjb25zdCBjaGFyICoq cHJlZml4LAorCQkJCQkJICAgU2l6ZSAqc3opCit7CisJdWludDggZmxhZ3M7CisJY2hhciAqbXNn OworCisJZmxhZ3MgPSBwcV9nZXRtc2dpbnQoaW4sIDEpOworCWlmIChmbGFncyAhPSAwKQorCQll bG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGZsYWdzICV1IGluIGRkbCBtZXNzYWdlIiwgZmxhZ3Mp OworCisJKmxzbiA9IHBxX2dldG1zZ2ludDY0KGluKTsKKwkqcHJlZml4ID0gcHFfZ2V0bXNnc3Ry aW5nKGluKTsKKwkqc3ogPSBwcV9nZXRtc2dpbnQoaW4sIDQpOworCW1zZyA9IChjaGFyICopIHBx X2dldG1zZ2J5dGVzKGluLCAqc3opOworCisJcmV0dXJuIG1zZzsKK30KKworLyoKKyAqIFdyaXRl IERETCBNRVNTQUdFIHRvIHN0cmVhbQorICovCit2b2lkCitsb2dpY2FscmVwX3dyaXRlX2RkbChT dHJpbmdJbmZvIG91dCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4 LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKQoreworCXVpbnQ4CQlmbGFncyA9IDA7CisK KwlwcV9zZW5kYnl0ZShvdXQsIExPR0lDQUxfUkVQX01TR19EREwpOworCisJcHFfc2VuZGludDgo b3V0LCBmbGFncyk7CisJcHFfc2VuZGludDY0KG91dCwgbHNuKTsKKwlwcV9zZW5kc3RyaW5nKG91 dCwgcHJlZml4KTsKKwlwcV9zZW5kaW50MzIob3V0LCBzeik7CisJcHFfc2VuZGJ5dGVzKG91dCwg bWVzc2FnZSwgc3opOworfQorCisvKgogICogV3JpdGUgcmVsYXRpb24gZGVzY3JpcHRpb24gdG8g dGhlIG91dHB1dCBzdHJlYW0uCiAgKi8KIHZvaWQKQEAgLTEyNDQsNiArMTI4NSw4IEBAIGxvZ2lj YWxyZXBfbWVzc2FnZV90eXBlKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbikKIAkJCXJldHVybiAi VFlQRSI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX01FU1NBR0U6CiAJCQlyZXR1cm4gIk1FU1NB R0UiOworCQljYXNlIExPR0lDQUxfUkVQX01TR19EREw6CisJCQlyZXR1cm4gIkRETCI7CiAJCWNh c2UgTE9HSUNBTF9SRVBfTVNHX0JFR0lOX1BSRVBBUkU6CiAJCQlyZXR1cm4gIkJFR0lOIFBSRVBB UkUiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19QUkVQQVJFOgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwppbmRleCAyYmUwNzVmLi5lNThhMWQx IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZm ZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIu YwpAQCAtMjA0MiwxMiArMjA0MiwyMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQKIFJlb3JkZXJCdWZm ZXJBcHBseURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKIAkJCQkJCQkgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLCBib29sIHN0cmVhbWluZykK IHsKLQlyYi0+ZGRsKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAotCQkJY2hhbmdlLT5kYXRhLmRkbC5w cmVmaXgsCi0JCQljaGFuZ2UtPmRhdGEuZGRsLnJlbGlkLAotCQkJY2hhbmdlLT5kYXRhLmRkbC5j bWR0eXBlLAotCQkJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUsCi0JCQljaGFuZ2UtPmRh dGEuZGRsLm1lc3NhZ2UpOworCWlmIChzdHJlYW1pbmcpCisJCXJiLT5zdHJlYW1fZGRsKHJiLCB0 eG4sIGNoYW5nZS0+bHNuLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgsCisJCQkJ CQkJICBjaGFuZ2UtPmRhdGEuZGRsLnJlbGlkLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5j bWR0eXBlLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUsCisJCQkJCQkJ ICBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UpOworCWVsc2UKKwkJcmItPmRkbChyYiwgdHhuLCBj aGFuZ2UtPmxzbiwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgsCisJCQkJCSAgIGNo YW5nZS0+ZGF0YS5kZGwucmVsaWQsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSwK KwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUsCisJCQkJCSAgIGNoYW5nZS0+ ZGF0YS5kZGwubWVzc2FnZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC93b3JrZXIuYwppbmRleCBjZmIyYWI2Li4xYThhZmI5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvd29ya2VyLmMKQEAgLTE2Niw2ICsxNjYsNyBAQAogI2luY2x1ZGUgIm1pc2Nh ZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXpl ci9vcHRpbWl6ZXIuaCIKKyNpbmNsdWRlICJwYXJzZXIvYW5hbHl6ZS5oIgogI2luY2x1ZGUgInBh cnNlci9wYXJzZV9yZWxhdGlvbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBv c3RtYXN0ZXIvYmd3b3JrZXIuaCIKQEAgLTE5MSw3ICsxOTIsMTAgQEAKICNpbmNsdWRlICJzdG9y YWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdl L3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKyNpbmNsdWRlICJ0 Y29wL3BxdWVyeS5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRlICJ0Y29w L3V0aWxpdHkuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2NhdGNhY2hlLmgiCkBAIC0zMjM2LDYgKzMyNDAsMjM4 IEBAIGFwcGx5X2hhbmRsZV90cnVuY2F0ZShTdHJpbmdJbmZvIHMpCiAJZW5kX3JlcGxpY2F0aW9u X3N0ZXAoKTsKIH0KIAorLyoKKyAqIFNwZWNpYWwgaGFuZGxpbmcgZm9yIENSRUFURSBUQUJMRSBB UyBhbmQgU0VMRUNUIElOVE8KKyAqIHRvIG5vdCBwb3B1bGF0ZSBkYXRhIGZyb20gdGhlIHNvdXJj ZSB0YWJsZSBvbiB0aGUgc3Vic2NyaWJlci4KKyAqIEFsbG93IHRoZSBkYXRhIHRvIGJlIHJlcGxp Y2F0ZWQgdGhyb3VnaCBJTlNFUlRzIG9uIHRoZSBwdWJsaXNoZXIuCisgKi8KK3N0YXRpYyB2b2lk CitwcmVwcm9jZXNzX2NyZWF0ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQoreworCUNvbW1hbmRU YWcJY29tbWFuZFRhZzsKKworCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICop IGNvbW1hbmQpOworCisJc3dpdGNoIChjb21tYW5kVGFnKQorCXsKKwkJY2FzZSBDTURUQUdfQ1JF QVRFX1RBQkxFX0FTOgorCQljYXNlIENNRFRBR19TRUxFQ1RfSU5UTzoKKwkJCXsKKwkJCQlDcmVh dGVUYWJsZUFzU3RtdCAqY2FzdG10ID0gKENyZWF0ZVRhYmxlQXNTdG10ICopIGNvbW1hbmQtPnN0 bXQ7CisKKwkJCQlpZiAoY2FzdG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkKKwkJCQl7CisJ CQkJCS8qCisJCQkJCSAqIEZvcmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0byBhdm9pZCBk YXRhCisJCQkJCSAqIGluY29uc2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxpY2F0ZWQgZnJv bSB0aGUKKwkJCQkJICogcHVibGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJCQljYXN0bXQt PmludG8tPnNraXBEYXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBD TURUQUdfU0VMRUNUOgorCQkJeworCQkJCVNlbGVjdFN0bXQgKnNzdG10ID0gKFNlbGVjdFN0bXQg KikgY29tbWFuZC0+c3RtdDsKKworCQkJCWlmIChzc3RtdC0+aW50b0NsYXVzZSAhPSBOVUxMKQor CQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRv IGF2b2lkIGRhdGEKKwkJCQkJICogaW5jb25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUgcmVwbGlj YXRlZCBmcm9tIHRoZQorCQkJCQkgKiBwdWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJ CXNzdG10LT5pbnRvQ2xhdXNlLT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJYnJl YWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBIYW5kbGUgQ1JFQVRF IFRBQkxFIGNvbW1hbmQKKyAqCisgKiBDYWxsIEFkZFN1YnNjcmlwdGlvblJlbFN0YXRlIGZvciBD UkVBVEUgTEFCRUwgY29tbWFuZCB0byBzZXQgdGhlIHJlbHN0YXRlIHRvCisgKiBTVUJSRUxfU1RB VEVfUkVBRFkgc28gRE1MIGNoYW5nZXMgb24gdGhpcyBuZXcgdGFibGUgY2FuIGJlIHJlcGxpY2F0 ZWQgd2l0aG91dAorICogaGF2aW5nIHRvIG1hbnVhbGx5IHJ1biAiYWx0ZXIgc3Vic2NyaXB0aW9u IC4uLiByZWZyZXNoIHB1YmxpY2F0aW9uIgorICovCitzdGF0aWMgdm9pZAoraGFuZGxlX2NyZWF0 ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQoreworCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwlS YW5nZVZhciAgICpydiA9IE5VTEw7CisJT2lkCQkJcmVsaWQ7CisJT2lkCQkJcmVsbmFtZXNwYWNl ID0gSW52YWxpZE9pZDsKKwlDcmVhdGVTdG10ICpjc3RtdDsKKwljaGFyCSAgICpzY2hlbWFuYW1l ID0gTlVMTDsKKwljaGFyCSAgICpyZWxuYW1lID0gTlVMTDsKKworCWNvbW1hbmRUYWcgPSBDcmVh dGVDb21tYW5kVGFnKChOb2RlICopIGNvbW1hbmQpOworCWNzdG10ID0gKENyZWF0ZVN0bXQgKikg Y29tbWFuZC0+c3RtdDsKKwlydiA9IGNzdG10LT5yZWxhdGlvbjsKKworCWlmIChjb21tYW5kVGFn ID09IENNRFRBR19DUkVBVEVfVEFCTEUpCisJeworCQljc3RtdCA9IChDcmVhdGVTdG10ICopIGNv bW1hbmQtPnN0bXQ7CisJCXJ2ID0gY3N0bXQtPnJlbGF0aW9uOworCX0KKwllbHNlCisJeworCQly ZXR1cm47CisJfQorCisJaWYgKCFydikKKwkJcmV0dXJuOworCisJc2NoZW1hbmFtZSA9IHJ2LT5z Y2hlbWFuYW1lOworCXJlbG5hbWUgPSBydi0+cmVsbmFtZTsKKworCWlmIChzY2hlbWFuYW1lICE9 IE5VTEwpCisJCXJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2Vfb2lkKHNjaGVtYW5hbWUsIGZh bHNlKTsKKworCWlmIChyZWxuYW1lc3BhY2UgIT0gSW52YWxpZE9pZCkKKwkJcmVsaWQgPSBnZXRf cmVsbmFtZV9yZWxpZChyZWxuYW1lLCByZWxuYW1lc3BhY2UpOworCWVsc2UKKwkJcmVsaWQgPSBS ZWxuYW1lR2V0UmVsaWQocmVsbmFtZSk7CisKKwlpZiAoT2lkSXNWYWxpZChyZWxpZCkpCisJewor CQlBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZShNeVN1YnNjcmlwdGlvbi0+b2lkLCByZWxpZCwKKwkJ CQkJCQkJU1VCUkVMX1NUQVRFX1JFQURZLAorCQkJCQkJCQlJbnZhbGlkWExvZ1JlY1B0cik7CisJ CWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2dfaW50ZXJuYWwoInRhYmxlIFwiJXNcIiBhZGRl ZCB0byBzdWJzY3JpcHRpb24gXCIlc1wiIiwKKwkJCQkJCQkJIHJlbG5hbWUsIE15U3Vic2NyaXB0 aW9uLT5uYW1lKSkpOworCX0KK30KKworLyoKKyAqIEhhbmRsZSBEREwgcmVwbGljYXRpb24gbWVz c2FnZXMuCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9oYW5kbGVfZGRsKFN0cmluZ0luZm8gcykK K3sKKwlYTG9nUmVjUHRyCWxzbjsKKwljb25zdCBjaGFyICpwcmVmaXggPSBOVUxMOworCWNoYXIJ ICAgKm1lc3NhZ2UgPSBOVUxMOworCWNoYXIJICAgKmRkbF9jb21tYW5kOworCVNpemUJCXN6Owor CUxpc3QJICAgKnBhcnNldHJlZV9saXN0OworCUxpc3RDZWxsICAgKnBhcnNldHJlZV9pdGVtOwor CURlc3RSZWNlaXZlciAqcmVjZWl2ZXI7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCWNv bnN0IGNoYXIgKnNhdmVfZGVidWdfcXVlcnlfc3RyaW5nID0gZGVidWdfcXVlcnlfc3RyaW5nOwor CisJbWVzc2FnZSA9IGxvZ2ljYWxyZXBfcmVhZF9kZGwocywgJmxzbiwgJnByZWZpeCwgJnN6KTsK KworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb21tYW5kICovCisJYmVn aW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJZGRsX2NvbW1hbmQgPSBkZXBhcnNlX2RkbF9qc29u X3RvX3N0cmluZyhtZXNzYWdlKTsKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZGxfY29tbWFuZDsK KworCS8qIERlc3ROb25lIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uICovCisJcmVjZWl2ZXIgPSBD cmVhdGVEZXN0UmVjZWl2ZXIoRGVzdE5vbmUpOworCXBhcnNldHJlZV9saXN0ID0gcGdfcGFyc2Vf cXVlcnkoZGRsX2NvbW1hbmQpOworCisJZm9yZWFjaChwYXJzZXRyZWVfaXRlbSwgcGFyc2V0cmVl X2xpc3QpCisJeworCQlMaXN0CSAgICpwbGFudHJlZV9saXN0OworCQlMaXN0CSAgICpxdWVyeXRy ZWVfbGlzdDsKKwkJUmF3U3RtdCAgICAqY29tbWFuZCA9IChSYXdTdG10ICopIGxmaXJzdChwYXJz ZXRyZWVfaXRlbSk7CisJCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwkJTWVtb3J5Q29udGV4dCBw ZXJfcGFyc2V0cmVlX2NvbnRleHQgPSBOVUxMOworCQlQb3J0YWwJCXBvcnRhbDsKKwkJYm9vbAkJ c25hcHNob3Rfc2V0ID0gZmFsc2U7CisKKwkJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWco KE5vZGUgKikgY29tbWFuZCk7CisKKwkJLyogSWYgd2UgZ290IGEgY2FuY2VsIHNpZ25hbCBpbiBw YXJzaW5nIG9yIHByaW9yIGNvbW1hbmQsIHF1aXQgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKKworCQkvKiBSZW1vdmUgZGF0YSBwb3B1bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQgKi8KKwkJ cHJlcHJvY2Vzc19jcmVhdGVfdGFibGUoY29tbWFuZCk7CisKKwkJLyoKKwkJICogU2V0IHVwIGEg c25hcHNob3QgaWYgcGFyc2UgYW5hbHlzaXMvcGxhbm5pbmcgd2lsbCBuZWVkIG9uZS4KKwkJICov CisJCWlmIChhbmFseXplX3JlcXVpcmVzX3NuYXBzaG90KGNvbW1hbmQpKQorCQl7CisJCQlQdXNo QWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJCXNuYXBzaG90X3Nl dCA9IHRydWU7CisJCX0KKworCQkvKgorCQkgKiBXZSBkbyB0aGUgd29yayBmb3IgZWFjaCBwYXJz ZXRyZWUgaW4gYSBzaG9ydC1saXZlZCBjb250ZXh0LCB0bworCQkgKiBsaW1pdCB0aGUgbWVtb3J5 IHVzZWQgd2hlbiB0aGVyZSBhcmUgbWFueSBjb21tYW5kcyBpbiB0aGUgc3RyaW5nLgorCQkgKi8K KwkJcGVyX3BhcnNldHJlZV9jb250ZXh0ID0KKwkJCUFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJy ZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJICAiZXhlY3V0ZV9zcWxfc3RyaW5nIHBlci1zdGF0 ZW1lbnQgY29udGV4dCIsCisJCQkJCQkJCSAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJCW9s ZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGVyX3BhcnNldHJlZV9jb250ZXh0KTsK KworCQlxdWVyeXRyZWVfbGlzdCA9IHBnX2FuYWx5emVfYW5kX3Jld3JpdGVfZml4ZWRwYXJhbXMo Y29tbWFuZCwKKwkJCQkJCQkJCQkJCQkJCWRkbF9jb21tYW5kLAorCQkJCQkJCQkJCQkJCQkJTlVM TCwgMCwgTlVMTCk7CisKKwkJcGxhbnRyZWVfbGlzdCA9IHBnX3BsYW5fcXVlcmllcyhxdWVyeXRy ZWVfbGlzdCwgZGRsX2NvbW1hbmQsIDAsIE5VTEwpOworCisJCS8qIERvbmUgd2l0aCB0aGUgc25h cHNob3QgdXNlZCBmb3IgcGFyc2luZy9wbGFubmluZyAqLworCQlpZiAoc25hcHNob3Rfc2V0KQor CQkJUG9wQWN0aXZlU25hcHNob3QoKTsKKworCQlwb3J0YWwgPSBDcmVhdGVQb3J0YWwoImxvZ2lj YWwgcmVwbGljYXRpb24iLCB0cnVlLCB0cnVlKTsKKworCQkvKgorCQkgKiBXZSBkb24ndCBoYXZl IHRvIGNvcHkgYW55dGhpbmcgaW50byB0aGUgcG9ydGFsLCBiZWNhdXNlIGV2ZXJ5dGhpbmcKKwkJ ICogd2UgYXJlIHBhc3NpbmcgaGVyZSBpcyBpbiBBcHBseU1lc3NhZ2VDb250ZXh0IG9yIHRoZQor CQkgKiBwZXJfcGFyc2V0cmVlX2NvbnRleHQsIGFuZCBzbyB3aWxsIG91dGxpdmUgdGhlIHBvcnRh bCBhbnl3YXkuCisJCSAqLworCQlQb3J0YWxEZWZpbmVRdWVyeShwb3J0YWwsCisJCQkJCQkgIE5V TEwsCisJCQkJCQkgIGRkbF9jb21tYW5kLAorCQkJCQkJICBjb21tYW5kVGFnLAorCQkJCQkJICBw bGFudHJlZV9saXN0LAorCQkJCQkJICBOVUxMKTsKKworCQkvKgorCQkgKiBTdGFydCB0aGUgcG9y dGFsLiAgTm8gcGFyYW1ldGVycyBoZXJlLgorCQkgKi8KKwkJUG9ydGFsU3RhcnQocG9ydGFsLCBO VUxMLCAwLCBJbnZhbGlkU25hcHNob3QpOworCisJCS8qCisJCSAqIFN3aXRjaCBiYWNrIHRvIHRy YW5zYWN0aW9uIGNvbnRleHQgZm9yIGV4ZWN1dGlvbi4KKwkJICovCisJCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCQkodm9pZCkgUG9ydGFsUnVuKHBvcnRhbCwKKwkJCQkJ CSBGRVRDSF9BTEwsCisJCQkJCQkgdHJ1ZSwKKwkJCQkJCSB0cnVlLAorCQkJCQkJIHJlY2VpdmVy LAorCQkJCQkJIHJlY2VpdmVyLAorCQkJCQkJIE5VTEwpOworCisJCVBvcnRhbERyb3AocG9ydGFs LCBmYWxzZSk7CisKKwkJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKworCQkvKgorCQkgKiBU YWJsZSBjcmVhdGVkIGJ5IERETCByZXBsaWNhdGlvbiAoZGF0YWJhc2UgbGV2ZWwpIGlzIGF1dG9t YXRpY2FsbHkKKwkJICogYWRkZWQgdG8gdGhlIHN1YnNjcmlwdGlvbiBoZXJlLgorCQkgKi8KKwkJ aGFuZGxlX2NyZWF0ZV90YWJsZShjb21tYW5kKTsKKworCQkvKiBOb3cgd2UgbWF5IGRyb3AgdGhl IHBlci1wYXJzZXRyZWUgY29udGV4dCwgaWYgb25lIHdhcyBjcmVhdGVkLiAqLworCQlNZW1vcnlD b250ZXh0RGVsZXRlKHBlcl9wYXJzZXRyZWVfY29udGV4dCk7CisJfQorCisJZGVidWdfcXVlcnlf c3RyaW5nID0gc2F2ZV9kZWJ1Z19xdWVyeV9zdHJpbmc7CisJZW5kX3JlcGxpY2F0aW9uX3N0ZXAo KTsKK30KIAogLyoKICAqIExvZ2ljYWwgcmVwbGljYXRpb24gcHJvdG9jb2wgbWVzc2FnZSBkaXNw YXRjaGVyLgpAQCAtMzMwMSw2ICszNTM3LDEwIEBAIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8g cykKIAkJCSAqLwogCQkJYnJlYWs7CiAKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERMOgorCQkJ YXBwbHlfaGFuZGxlX2RkbChzKTsKKwkJCWJyZWFrOworCiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNH X1NUUkVBTV9TVEFSVDoKIAkJCWFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQocyk7CiAJCQlicmVh azsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0 LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmluZGV4IGY2 MjkwZDYuLmVkMDE1M2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0 cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdv dXRwdXQuYwpAQCAtNTUsNiArNTUsMTEgQEAgc3RhdGljIHZvaWQgcGdvdXRwdXRfbWVzc2FnZShM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKIAkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBj b25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2Up Oworc3RhdGljIHZvaWQgcGdvdXRwdXRfZGRsKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwK KwkJCQkJCQkJUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAor CQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwKKwkJCQkJCQkJRGVwYXJzZWRD b21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdl KTsKIHN0YXRpYyBib29sIHBnb3V0cHV0X29yaWdpbl9maWx0ZXIoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LAogCQkJCQkJCQkgICBSZXBPcmlnaW5JZCBvcmlnaW5faWQpOwogc3RhdGljIHZv aWQgcGdvdXRwdXRfYmVnaW5fcHJlcGFyZV90eG4oTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 LApAQCAtMjU2LDYgKzI2MSw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2lu Q2FsbGJhY2tzICpjYikKIAljYi0+Y2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT50 cnVuY2F0ZV9jYiA9IHBnb3V0cHV0X3RydW5jYXRlOwogCWNiLT5tZXNzYWdlX2NiID0gcGdvdXRw dXRfbWVzc2FnZTsKKwljYi0+ZGRsX2NiID0gcGdvdXRwdXRfZGRsOwogCWNiLT5jb21taXRfY2Ig PSBwZ291dHB1dF9jb21taXRfdHhuOwogCiAJY2ItPmJlZ2luX3ByZXBhcmVfY2IgPSBwZ291dHB1 dF9iZWdpbl9wcmVwYXJlX3R4bjsKQEAgLTI3Miw2ICsyNzgsNyBAQCBfUEdfb3V0cHV0X3BsdWdp bl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAqY2IpCiAJY2ItPnN0cmVhbV9jb21taXRfY2Ig PSBwZ291dHB1dF9zdHJlYW1fY29tbWl0OwogCWNiLT5zdHJlYW1fY2hhbmdlX2NiID0gcGdvdXRw dXRfY2hhbmdlOwogCWNiLT5zdHJlYW1fbWVzc2FnZV9jYiA9IHBnb3V0cHV0X21lc3NhZ2U7CisJ Y2ItPnN0cmVhbV9kZGxfY2IgPSBwZ291dHB1dF9kZGw7CiAJY2ItPnN0cmVhbV90cnVuY2F0ZV9j YiA9IHBnb3V0cHV0X3RydW5jYXRlOwogCS8qIHRyYW5zYWN0aW9uIHN0cmVhbWluZyAtIHR3by1w aGFzZSBjb21taXQgKi8KIAljYi0+c3RyZWFtX3ByZXBhcmVfY2IgPSBwZ291dHB1dF9zdHJlYW1f cHJlcGFyZV90eG47CkBAIC00MjYsNiArNDMzLDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCS8qIFRo aXMgcGx1Z2luIHVzZXMgYmluYXJ5IHByb3RvY29sLiAqLwogCW9wdC0+b3V0cHV0X3R5cGUgPSBP VVRQVVRfUExVR0lOX0JJTkFSWV9PVVRQVVQ7CisJb3B0LT5yZWNlaXZlX3Jld3JpdGVzID0gdHJ1 ZTsKIAogCS8qCiAJICogVGhpcyBpcyByZXBsaWNhdGlvbiBzdGFydCBhbmQgbm90IHNsb3QgaW5p dGlhbGl6YXRpb24uCkBAIC01MDYsNiArNTE0LDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCQkvKiBJ bml0IHB1YmxpY2F0aW9uIHN0YXRlLiAqLwogCQlkYXRhLT5wdWJsaWNhdGlvbnMgPSBOSUw7CisJ CWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0gTklMOwogCQlwdWJsaWNhdGlvbnNfdmFsaWQgPSBmYWxz ZTsKIAkJQ2FjaGVSZWdpc3RlclN5c2NhY2hlQ2FsbGJhY2soUFVCTElDQVRJT05PSUQsCiAJCQkJ CQkJCQkgIHB1YmxpY2F0aW9uX2ludmFsaWRhdGlvbl9jYiwKQEAgLTEzOTksNiArMTQwOCwyMCBA QCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJUmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUgYWN0aW9uID0gY2hhbmdlLT5h Y3Rpb247CiAJVHVwbGVUYWJsZVNsb3QgKm9sZF9zbG90ID0gTlVMTDsKIAlUdXBsZVRhYmxlU2xv dCAqbmV3X3Nsb3QgPSBOVUxMOworCWJvb2wgICAgICAgIHRhYmxlX3Jld3JpdGUgPSBmYWxzZTsK KworCS8qCisJICogRm9yIGhlYXAgcmV3cml0ZXMsIHdlIG1pZ2h0IG5lZWQgdG8gcmVwbGljYXRl IHRoZW0gaWYgdGhlIHJld3JpdHRlbgorCSAqIHRhYmxlIHB1Ymxpc2hlcyByZXdyaXRlIGRkbCBt ZXNzYWdlLiBTbyBnZXQgdGhlIGFjdHVhbCByZWxhdGlvbiBoZXJlCisJICogYW5kIGNoZWNrIHRo ZSBwdWJhY3Rpb24gbGF0ZXIuCisJICovCisJaWYgKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHJld3Jp dGUpCisJeworCQl0YWJsZV9yZXdyaXRlID0gdHJ1ZTsKKwkJcmVsYXRpb24gPSBSZWxhdGlvbklk R2V0UmVsYXRpb24ocmVsYXRpb24tPnJkX3JlbC0+cmVscmV3cml0ZSk7CisJCXRhcmdldHJlbCA9 IHJlbGF0aW9uOworCX0KKwogCiAJaWYgKCFpc19wdWJsaXNoYWJsZV9yZWxhdGlvbihyZWxhdGlv bikpCiAJCXJldHVybjsKQEAgLTE0MzMsNiArMTQ1NiwxMyBAQCBwZ291dHB1dF9jaGFuZ2UoTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQlBc3Nl cnQoZmFsc2UpOwogCX0KIAorCS8qCisJICogV2UgZG9uJ3QgcHVibGlzaCB0YWJsZSByZXdyaXRl IGNoYW5nZSB1bmxlc3Mgd2UgcHVibGlzaCB0aGUgcmV3cml0ZSBkZGwKKwkgKiBtZXNzYWdlLgor CSAqLworCWlmICh0YWJsZV9yZXdyaXRlICYmICFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGxf dGFibGUpCisJCXJldHVybjsKKwogCS8qIEF2b2lkIGxlYWtpbmcgbWVtb3J5IGJ5IHVzaW5nIGFu ZCByZXNldHRpbmcgb3VyIG93biBjb250ZXh0ICovCiAJb2xkID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKGRhdGEtPmNvbnRleHQpOwogCkBAIC0xNDYyLDggKzE0OTIsOCBAQCBwZ291dHB1dF9jaGFu Z2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJ CQl9CiAKIAkJCS8qIENoZWNrIHJvdyBmaWx0ZXIgKi8KLQkJCWlmICghcGdvdXRwdXRfcm93X2Zp bHRlcih0YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVsZW50cnksCi0JCQkJCQkJCQkgJmFj dGlvbikpCisJCQlpZiAoIXRhYmxlX3Jld3JpdGUgJiYKKwkJCQkhcGdvdXRwdXRfcm93X2ZpbHRl cih0YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVsZW50cnksICZhY3Rpb24pKQogCQkJCWJy ZWFrOwogCiAJCQkvKgpAQCAtMTQ4Myw4ICsxNTEzLDE5IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCW1heWJl X3NlbmRfc2NoZW1hKGN0eCwgY2hhbmdlLCByZWxhdGlvbiwgcmVsZW50cnkpOwogCiAJCQlPdXRw dXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVlKTsKLQkJCWxvZ2ljYWxyZXBfd3JpdGVfaW5z ZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwgbmV3X3Nsb3QsCi0JCQkJCQkJCQlkYXRhLT5i aW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKKworCQkJLyoKKwkJCSAqIENvbnZlcnQgdGhlIHJl d3JpdGUgaW5zZXJ0cyB0byB1cGRhdGVzIHNvIHRoYXQgdGhlIHN1YnNjcmliZXIKKwkJCSAqIGNh biByZXBsYXkgaXQuIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBiZXR3ZWVu CisJCQkgKiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgaXMgY29uc2lzdGVudC4KKwkJCSAqLwor CQkJaWYgKHRhYmxlX3Jld3JpdGUpCisJCQkJbG9naWNhbHJlcF93cml0ZV91cGRhdGUoY3R4LT5v dXQsIHhpZCwgdGFyZ2V0cmVsLAorCQkJCQkJCQkJCU5VTEwsIG5ld19zbG90LCBkYXRhLT5iaW5h cnksCisJCQkJCQkJCQkJcmVsZW50cnktPmNvbHVtbnMpOworCQkJZWxzZQorCQkJCWxvZ2ljYWxy ZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwgbmV3X3Nsb3QsCisJCQkJ CQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CiAJCQlPdXRwdXRQbHVnaW5X cml0ZShjdHgsIHRydWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdF X1VQREFURToKQEAgLTE2MTYsNiArMTY1Nyw5IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJYW5jZXN0b3IgPSBO VUxMOwogCX0KIAorCWlmICh0YWJsZV9yZXdyaXRlKQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9u KTsKKwogCS8qIENsZWFudXAgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkKTsKIAlNZW1v cnlDb250ZXh0UmVzZXQoZGF0YS0+Y29udGV4dCk7CkBAIC0xNzMxLDYgKzE3NzUsMTM4IEBAIHBn b3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiB9CiAKIC8qCisgKiBTZW5kIHRoZSBkZWNvZGVkIERETCBvdmVyIHdpcmUuCisg Ki8KK3N0YXRpYyB2b2lkCitwZ291dHB1dF9kZGwoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCVhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJ CQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNt ZHR5cGUsCisJCQkJCVNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJUEdPdXRwdXRE YXRhICpkYXRhID0gKFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsK KwlQR091dHB1dFR4bkRhdGEgKnR4bmRhdGEgPSAoUEdPdXRwdXRUeG5EYXRhICopIHR4bi0+b3V0 cHV0X3BsdWdpbl9wcml2YXRlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gTlVMTDsKKwlSZWxhdGlv blN5bmNFbnRyeSAqcmVsZW50cnk7CisKKwlzd2l0Y2ggKGNtZHR5cGUpCisJeworCQljYXNlIERD VF9UYWJsZURyb3BTdGFydDoKKworCQkJLyoKKwkJCSAqIE9uIERST1Agc3RhcnQsIGFkZCB0aGUg cmVsaWQgdG8gYSBkZWxldGVkX3JlbGlkIGxpc3QgaWYgdGhlCisJCQkgKiByZWxpZCBpcyBwYXJ0 IG9mIGEgcHVibGljYXRpb24gdGhhdCBzdXBwb3J0cyBkZGwgcHVibGljYXRpb24uCisJCQkgKiBX ZSBuZWVkIHRoaXMgYmVjYXVzZSBvbiBEUk9QIGVuZCwgdGhlIHJlbGlkIHdpbGwgbm8gbG9uZ2Vy IGJlCisJCQkgKiB2YWxpZC4gTGF0ZXIgb24gRHJvcCBlbmQsIHZlcmlmeSB0aGF0IHRoZSBkcm9w IGlzIGZvciBhIHJlbGlkCisJCQkgKiB0aGF0IGlzIG9uIHRoZSBkZWxldGVkX3JpZCBsaXN0LCBh bmQgb25seSB0aGVuIHNlbmQgdGhlIGRkbAorCQkJICogbWVzc2FnZS4KKwkJCSAqLworCQkJcmVs YXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlBc3NlcnQocmVsYXRp b24pOworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOwor CisJCQlpZiAocmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsX3RhYmxlKQorCQkJCWRhdGEtPmRl bGV0ZWRfcmVsaWRzID0gbGFwcGVuZF9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsK KworCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQlyZXR1cm47CisKKwkJY2FzZSBEQ1Rf VGFibGVEcm9wRW5kOgorCQkJaWYgKCFsaXN0X21lbWJlcl9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxp ZHMsIHJlbGlkKSkKKwkJCQlyZXR1cm47CisJCQllbHNlCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxp ZHMgPSBsaXN0X2RlbGV0ZV9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgRENUX1RhYmxlQWx0ZXI6CisKKwkJCS8qCisJCQkgKiBGb3IgdGFibGUg cmV3cml0ZSBkZGwsIHdlIGZpcnN0IHNlbmQgdGhlIG9yaWdpbmFsIGRkbCBtZXNzYWdlCisJCQkg KiB0byBzdWJzY3JpYmVyLCB0aGVuIGNvbnZlcnQgdGhlIHVwY29taW5nIHJld3JpdGUgSU5TRVJU IHRvCisJCQkgKiBVUERBVEUgYW5kIHNlbmQgdGhlbSB0byBzdWJzY3JpYmVyIHNvIHRoYXQgdGhl IGRhdGEgYmV0d2VlbgorCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGNhbiBhbHdheXMg YmUgY29uc2lzdGVudC4KKwkJCSAqCisJCQkgKiBXZSBkbyB0aGlzIHdheSBiZWNhdXNlIG9mIHR3 byByZWFzb246CisJCQkgKgorCQkJICogKDEpIFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBk ZGwgY291bGQgYWxyZWFkeSBiZSBkaWZmZXJlbnQKKwkJCSAqIGFtb25nIHB1Ymxpc2hlciBhbmQg c3Vic2NyaWJlci4gVG8gbWFrZSBzdXJlIHRoZSBleHRyYSBkYXRhIGluCisJCQkgKiBzdWJzY3Jp YmVyIHdoaWNoIGRvZXNuJ3QgZXhpc3QgaW4gcHVibGlzaGVyIGFsc28gZ2V0IHJld3JpdHRlbiwK KwkJCSAqIHdlIG5lZWQgdG8gbGV0IHRoZSBzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFs IHJld3JpdGUgZGRsCisJCQkgKiB0byByZXdyaXRlIGFsbCB0aGUgZGF0YSBhdCBmaXJzdC4KKwkJ CSAqCisJCQkgKiAoMikgdGhlIGRhdGEgYWZ0ZXIgZXhlY3V0aW5nIHJld3JpdGUgZGRsIGNvdWxk IGJlIGRpZmZlcmVudAorCQkJICogYW1vbmcgcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyKGR1ZSB0 byBkaWZmZXJlbnQKKwkJCSAqIGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNlZCBkdXJpbmcgcmV3cml0 ZSksIHNvIHdlIG5lZWQgdG8KKwkJCSAqIHJlcGxpY2F0ZSB0aGUgcmV3cml0ZSBVUERBVEVzIHRv IGtlZXAgdGhlIGRhdGEgY29uc2lzdGVudC4KKwkJCSAqCisJCQkgKiBUTyBJTVBST1ZFOiBXZSBj b3VsZCBpbXByb3ZlIHRoaXMgYnkgbGV0dGluZyB0aGUgc3Vic2NyaWJlcgorCQkJICogb25seSBy ZXdyaXRlIHRoZSBleHRyYSBkYXRhIGluc3RlYWQgb2YgZG9pbmcgZnVsbHkgcmV3cml0ZSBhbmQK KwkJCSAqIHVzZSB0aGUgdXBjb21pbmcgcmV3cml0ZSBVUERBVEVzIHRvIHJld3JpdGUgdGhlIHJl c3QgZGF0YS4KKwkJCSAqIEJlc2lkZXMsIHdlIG1heSBub3QgbmVlZCB0byBzZW5kIHJld3JpdGUg Y2hhbmdlcyBmb3IgYWxsIHR5cGUKKwkJCSAqIG9mIHJld3JpdGUgZGRsLCBmb3IgZXhhbXBsZSwg aXQgc2VlbXMgZmluZSB0byBza2lwIHNlbmRpbmcKKwkJCSAqIHJld3JpdGUgY2hhbmdlcyBmb3Ig QUxURVIgVEFCTEUgU0VUIExPR0dFRCBhcyB0aGUgZGF0YSBpbiB0aGUKKwkJCSAqIHRhYmxlIGRv ZXNuJ3QgYWN0dWFsbHkgYmUgY2hhbmdlZC4KKwkJCSAqLworCQkJcmVsYXRpb24gPSBSZWxhdGlv bklkR2V0UmVsYXRpb24ocmVsaWQpOworCQkJQXNzZXJ0KHJlbGF0aW9uKTsKKworCQkJcmVsZW50 cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQkvKgorCQkJICog U2tpcCBzZW5kaW5nIHRoaXMgZGRsIGlmIHdlIGRvbid0IHB1Ymxpc2ggZGRsIG1lc3NhZ2Ugb3Ig dGhlCisJCQkgKiBkZGwgbmVlZCB0byBiZSBwdWJsaXNoZWQgdmlhIGl0cyByb290IHJlbGF0aW9u LgorCQkJICovCisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbF90YWJsZSB8fAor CQkJCXJlbGVudHJ5LT5wdWJsaXNoX2FzX3JlbGlkICE9IHJlbGlkKQorCQkJeworCQkJCVJlbGF0 aW9uQ2xvc2UocmVsYXRpb24pOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJYnJlYWs7CisKKwkJ Y2FzZSBEQ1RfU2ltcGxlQ21kOgorCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24o cmVsaWQpOworCisJCQlpZiAocmVsYXRpb24gPT0gTlVMTCkKKwkJCQlicmVhazsKKworCQkJcmVs ZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQlpZiAoIXJl bGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbF90YWJsZSkKKwkJCXsKKwkJCQlSZWxhdGlvbkNsb3Nl KHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgRENU X09iamVjdERyb3A6CisJCQkvKiBkbyBub3RoaW5nICovCisJCQlicmVhazsKKworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIHR5cGUgJWQiLCBjbWR0eXBlKTsKKwkJCWJy ZWFrOworCX0KKworCS8qIFNlbmQgQkVHSU4gaWYgd2UgaGF2ZW4ndCB5ZXQgKi8KKwlpZiAodHhu ZGF0YSAmJiAhdHhuZGF0YS0+c2VudF9iZWdpbl90eG4pCisJCXBnb3V0cHV0X3NlbmRfYmVnaW4o Y3R4LCB0eG4pOworCisJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7CisJbG9n aWNhbHJlcF93cml0ZV9kZGwoY3R4LT5vdXQsCisJCQkJCQkJCW1lc3NhZ2VfbHNuLAorCQkJCQkJ CQlwcmVmaXgsCisJCQkJCQkJCXN6LAorCQkJCQkJCQltZXNzYWdlKTsKKwlPdXRwdXRQbHVnaW5X cml0ZShjdHgsIHRydWUpOworCisJaWYgKHJlbGF0aW9uKQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0 aW9uKTsKK30KKworLyoKICAqIFJldHVybiB0cnVlIGlmIHRoZSBkYXRhIGlzIGFzc29jaWF0ZWQg d2l0aCBhbiBvcmlnaW4gYW5kIHRoZSB1c2VyIGhhcwogICogcmVxdWVzdGVkIHRoZSBjaGFuZ2Vz IHRoYXQgZG9uJ3QgaGF2ZSBhbiBvcmlnaW4sIGZhbHNlIG90aGVyd2lzZS4KICAqLwpAQCAtMjAz MCw3ICsyMjA2LDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVs YXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5zY2hlbWFfc2VudCA9IGZhbHNlOwogCQllbnRyeS0+ c3RyZWFtZWRfdHhucyA9IE5JTDsKIAkJZW50cnktPnB1YmFjdGlvbnMucHViaW5zZXJ0ID0gZW50 cnktPnB1YmFjdGlvbnMucHVidXBkYXRlID0KLQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0 ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gZmFsc2U7CisJCQllbnRyeS0+cHVi YWN0aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9CisJCQll bnRyeS0+cHViYWN0aW9ucy5wdWJkZGxfYWxsID0gZW50cnktPnB1YmFjdGlvbnMucHViZGRsX3Rh YmxlID0gZmFsc2U7CiAJCWVudHJ5LT5uZXdfc2xvdCA9IE5VTEw7CiAJCWVudHJ5LT5vbGRfc2xv dCA9IE5VTEw7CiAJCW1lbXNldChlbnRyeS0+ZXhwcnN0YXRlLCAwLCBzaXplb2YoZW50cnktPmV4 cHJzdGF0ZSkpOwpAQCAtMjA4OCw2ICsyMjY1LDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0 cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1 YnVwZGF0ZSA9IGZhbHNlOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBmYWxzZTsK IAkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsKKwkJZW50cnktPnB1YmFj dGlvbnMucHViZGRsX2FsbCA9IGZhbHNlOworCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGxfdGFi bGUgPSBmYWxzZTsKIAogCQkvKgogCQkgKiBUdXBsZSBzbG90cyBjbGVhbnVwcy4gKFdpbGwgYmUg cmVidWlsdCBsYXRlciBpZiBuZWVkZWQpLgpAQCAtMjIwMSw2ICsyMzgwLDggQEAgZ2V0X3JlbF9z eW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQkJZW50 cnktPnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGU7CiAJ CQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZWxl dGU7CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgfD0gcHViLT5wdWJhY3Rpb25z LnB1YnRydW5jYXRlOworCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbF9hbGwgfD0gcHViLT5w dWJhY3Rpb25zLnB1YmRkbF9hbGw7CisJCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsX3RhYmxl IHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZGxfdGFibGU7CiAKIAkJCQkvKgogCQkJCSAqIFdlIHdh bnQgdG8gcHVibGlzaCB0aGUgY2hhbmdlcyBhcyB0aGUgdG9wLW1vc3QgYW5jZXN0b3IKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvY21kdGFnLmMgYi9zcmMvYmFja2VuZC90Y29wL2NtZHRh Zy5jCmluZGV4IDRiZDcxM2EuLmNlMDljNWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3Av Y21kdGFnLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9jbWR0YWcuYwpAQCAtMjYsMTAgKzI2LDEx IEBAIHR5cGVkZWYgc3RydWN0IENvbW1hbmRUYWdCZWhhdmlvcgogCWNvbnN0IGJvb2wJdGFibGVf cmV3cml0ZV9vazsKIAljb25zdCBib29sCWRpc3BsYXlfcm93Y291bnQ7CS8qIHNob3VsZCB0aGUg bnVtYmVyIG9mIHJvd3MgYWZmZWN0ZWQgYmUKIAkJCQkJCQkJCSAqIHNob3duIGluIHRoZSBjb21t YW5kIGNvbXBsZXRpb24gc3RyaW5nICovCisJY29uc3QgYm9vbAlkZGxfcmVwbGljYXRpb25fb2s7 CiB9IENvbW1hbmRUYWdCZWhhdmlvcjsKIAotI2RlZmluZSBQR19DTURUQUcodGFnLCBuYW1lLCBl dnRyZ29rLCByd3Jvaywgcm93Y250KSBcCi0JeyBuYW1lLCAodWludDgpIChzaXplb2YobmFtZSkg LSAxKSwgZXZ0cmdvaywgcndyb2ssIHJvd2NudCB9LAorI2RlZmluZSBQR19DTURUQUcodGFnLCBu YW1lLCBldnRyZ29rLCByd3Jvaywgcm93Y250LCBkZGxyZXBsb2spIFwKKwl7IG5hbWUsICh1aW50 OCkgKHNpemVvZihuYW1lKSAtIDEpLCBldnRyZ29rLCByd3Jvaywgcm93Y250LCBkZGxyZXBsb2sg fSwKIAogc3RhdGljIGNvbnN0IENvbW1hbmRUYWdCZWhhdmlvciB0YWdfYmVoYXZpb3JbQ09NTUFO RF9UQUdfTkVYVFRBR10gPSB7CiAjaW5jbHVkZSAidGNvcC9jbWR0YWdsaXN0LmgiCkBAIC01Nyw2 ICs1OCwyMSBAQCBHZXRDb21tYW5kVGFnTmFtZUFuZExlbihDb21tYW5kVGFnIGNvbW1hbmRUYWcs IFNpemUgKmxlbikKIAlyZXR1cm4gdGFnX2JlaGF2aW9yW2NvbW1hbmRUYWddLm5hbWU7CiB9CiAK K0NvbW1hbmRUYWcgKgorR2V0Q29tbWFuZFRhZ3NGb3JERExSZXBsKGludCAqbmNvbW1hbmRzKQor eworCUNvbW1hbmRUYWcgKmRkbHJlcGxfY29tbWFuZHMgPSBwYWxsb2MwKENPTU1BTkRfVEFHX05F WFRUQUcgKiBzaXplb2YoQ29tbWFuZFRhZykpOworCSpuY29tbWFuZHMgPSAwOworCisJZm9yKGlu dCBpID0gMDsgaSA8IENPTU1BTkRfVEFHX05FWFRUQUc7IGkrKykKKwl7CisJCWlmICh0YWdfYmVo YXZpb3JbaV0uZGRsX3JlcGxpY2F0aW9uX29rKQorCQkJZGRscmVwbF9jb21tYW5kc1soKm5jb21t YW5kcykrK10gPSAoQ29tbWFuZFRhZykgaTsKKwl9CisKKwlyZXR1cm4gZGRscmVwbF9jb21tYW5k czsKK30KKwogYm9vbAogY29tbWFuZF90YWdfZGlzcGxheV9yb3djb3VudChDb21tYW5kVGFnIGNv bW1hbmRUYWcpCiB7CkBAIC03NSw2ICs5MSwxMiBAQCBjb21tYW5kX3RhZ190YWJsZV9yZXdyaXRl X29rKENvbW1hbmRUYWcgY29tbWFuZFRhZykKIAlyZXR1cm4gdGFnX2JlaGF2aW9yW2NvbW1hbmRU YWddLnRhYmxlX3Jld3JpdGVfb2s7CiB9CiAKK2Jvb2wKK2NvbW1hbmRfdGFnX2RkbF9yZXBsaWNh dGlvbl9vayhDb21tYW5kVGFnIGNvbW1hbmRUYWcpCit7CisJcmV0dXJuIHRhZ19iZWhhdmlvcltj b21tYW5kVGFnXS5kZGxfcmVwbGljYXRpb25fb2s7Cit9CisKIC8qCiAgKiBTZWFyY2ggQ29tbWFu ZFRhZyBieSBuYW1lCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMg Yi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCA3MzFhOWUyLi40NjQwY2I5IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9zcmMvYmFja2VuZC90Y29w L3V0aWxpdHkuYwpAQCAtMTY2Niw4ICsxNjY2LDExIEBAIFByb2Nlc3NVdGlsaXR5U2xvdyhQYXJz ZVN0YXRlICpwc3RhdGUsCiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgVF9DcmVhdGVUYWJsZUFzU3Rt dDoKKwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KHBhcnNldHJlZSk7CiAJCQkJ YWRkcmVzcyA9IEV4ZWNDcmVhdGVUYWJsZUFzKHBzdGF0ZSwgKENyZWF0ZVRhYmxlQXNTdG10ICop IHBhcnNldHJlZSwKIAkJCQkJCQkJCQkJcGFyYW1zLCBxdWVyeUVudiwgcWMpOworCQkJCUV2ZW50 VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKGFkZHJlc3MpOworCQkJCWNvbW1hbmRDb2xsZWN0ZWQg PSB0cnVlOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgpAQCAt MTgzNSwxNCArMTgzOCwyMCBAQCBQcm9jZXNzVXRpbGl0eVNsb3coUGFyc2VTdGF0ZSAqcHN0YXRl LAogCiAJCQljYXNlIFRfQ3JlYXRlUHVibGljYXRpb25TdG10OgogCQkJCWFkZHJlc3MgPSBDcmVh dGVQdWJsaWNhdGlvbihwc3RhdGUsIChDcmVhdGVQdWJsaWNhdGlvblN0bXQgKikgcGFyc2V0cmVl KTsKKworCQkJCS8qCisJCQkJICogQ3JlYXRlUHVibGljYXRpb24gY2FsbHMgRXZlbnRUcmlnZ2Vy Q29sbGVjdENyZWF0ZVB1YmxpY2F0aW9uCisJCQkJICogZGlyZWN0bHkKKwkJCQkgKi8KKwkJCQlj b21tYW5kQ29sbGVjdGVkID0gdHJ1ZTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBUX0FsdGVyUHVi bGljYXRpb25TdG10OgogCQkJCUFsdGVyUHVibGljYXRpb24ocHN0YXRlLCAoQWx0ZXJQdWJsaWNh dGlvblN0bXQgKikgcGFyc2V0cmVlKTsKIAogCQkJCS8qCi0JCQkJICogQWx0ZXJQdWJsaWNhdGlv biBjYWxscyBFdmVudFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFuZAotCQkJCSAqIGRpcmVjdGx5 CisJCQkJICogQWx0ZXJQdWJsaWNhdGlvbiBjYWxscyBFdmVudFRyaWdnZXJDb2xsZWN0U2ltcGxl Q29tbWFuZCBhbmQKKwkJCQkgKiBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJQdWJsaWNhdGlvbiBk aXJlY3RseQogCQkJCSAqLwogCQkJCWNvbW1hbmRDb2xsZWN0ZWQgPSB0cnVlOwogCQkJCWJyZWFr OwpAQCAtMjI1Miw2ICsyMjYxLDggQEAgc3RyaW5naWZ5X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0 eXBlLCBib29sIGlzZ3JhbnQpCiAJCQlyZXR1cm4gIlBPTElDWSI7CiAJCWNhc2UgT0JKRUNUX1BS T0NFRFVSRToKIAkJCXJldHVybiAiUFJPQ0VEVVJFIjsKKwkJY2FzZSBPQkpFQ1RfUFVCTElDQVRJ T046CisJCQlyZXR1cm4gIlBVQkxJQ0FUSU9OIjsKIAkJY2FzZSBPQkpFQ1RfUk9MRToKIAkJCXJl dHVybiAiUk9MRSI7CiAJCWNhc2UgT0JKRUNUX1JPVVRJTkU6CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0 Y2FjaGUuYwppbmRleCAxZjVlN2ViLi5mMmE5ZjVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9ldnRjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNh Y2hlLmMKQEAgLTE2Nyw2ICsxNjcsOCBAQCBCdWlsZEV2ZW50VHJpZ2dlckNhY2hlKHZvaWQpCiAJ CQlldmVudCA9IEVWVF9TUUxEcm9wOwogCQllbHNlIGlmIChzdHJjbXAoZXZ0ZXZlbnQsICJ0YWJs ZV9yZXdyaXRlIikgPT0gMCkKIAkJCWV2ZW50ID0gRVZUX1RhYmxlUmV3cml0ZTsKKwkJZWxzZSBp ZiAoc3RyY21wKGV2dGV2ZW50LCAidGFibGVfaW5pdF93cml0ZSIpID09IDApCisJCQlldmVudCA9 IEVWVF9UYWJsZUluaXRXcml0ZTsKIAkJZWxzZQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9yZWxjYWNoZS5jCmluZGV4IDEzZjc5ODcuLmNmNzZkMzggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2Fj aGUvcmVsY2FjaGUuYwpAQCAtNTY5MCw2ICs1NjkwLDggQEAgUmVsYXRpb25CdWlsZFB1YmxpY2F0 aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNjKQogCQlw dWJkZXNjLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWJmb3JtLT5wdWJ1cGRhdGU7CiAJCXB1 YmRlc2MtPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1YmZvcm0tPnB1YmRlbGV0ZTsKIAkJcHVi ZGVzYy0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWJmb3JtLT5wdWJ0cnVuY2F0ZTsKKwkJ cHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZGxfYWxsIHw9IHB1YmZvcm0tPnB1YmRkbF9hbGw7CisJ CXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGRsX3RhYmxlIHw9IHB1YmZvcm0tPnB1YmRkbF90YWJs ZTsKIAogCQkvKgogCQkgKiBDaGVjayBpZiBhbGwgY29sdW1ucyByZWZlcmVuY2VkIGluIHRoZSBm aWx0ZXIgZXhwcmVzc2lvbiBhcmUgcGFydApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggNTI3Yzc2NS4uNzg1YjUw NyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19s YXJnZW9iamVjdF9kLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYXJnZW9iamVjdF9tZXRhZGF0 YV9kLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jX2QuaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX3B1YmxpY2F0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXJfZC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf dHlwZV9kLmgiCkBAIC0zOTQ5LDYgKzM5NTAsOCBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAq Zm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJaW50CQkJaV9wdWJ1cGRhdGU7CiAJaW50CQkJ aV9wdWJkZWxldGU7CiAJaW50CQkJaV9wdWJ0cnVuY2F0ZTsKKwlpbnQJCQlpX3B1YmRkbF9hbGw7 CisJaW50CQkJaV9wdWJkZGxfdGFibGU7CiAJaW50CQkJaV9wdWJ2aWFyb290OwogCWludAkJCWks CiAJCQkJbnR1cHM7CkBAIC0zOTY0LDIzICszOTY3LDIzIEBAIGdldFB1YmxpY2F0aW9ucyhBcmNo aXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5 KTsKIAogCS8qIEdldCB0aGUgcHVibGljYXRpb25zLiAqLwotCWlmIChmb3V0LT5yZW1vdGVWZXJz aW9uID49IDEzMDAwMCkKKwlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNjAwMDApCiAJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNUIHAudGFibGVvaWQsIHAu b2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkgInAucHVib3duZXIsICIKLQkJCQkJCQkgInAucHVi YWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRy dW5jYXRlLCBwLnB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5z ZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIHAucHViZGRsX2Fs bCwgcC5wdWJkZGxfdGFibGUsIHAucHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1Ymxp Y2F0aW9uIHAiKTsKIAllbHNlIGlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDExMDAwMCkKIAkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwg cC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5w dWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVi dHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMs IHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZh bHNlIGFzIHAucHViZGRsX2FsbCwgZmFsc2UgYXMgcC5wdWJkZGxfdGFibGUsIGZhbHNlIEFTIHB1 YnZpYXJvb3QgIgogCQkJCQkJCSAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAJZWxzZQogCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBw Lm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkJICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1 YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2Ug QVMgcHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0 YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1 YnRydW5jYXRlLCBmYWxzZSBhcyBwLnB1YmRkbF9hbGwsIGZhbHNlIGFzIHAucHViZGRsX3RhYmxl LCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIp OwogCiAJcmVzID0gRXhlY3V0ZVNxbFF1ZXJ5KGZvdXQsIHF1ZXJ5LT5kYXRhLCBQR1JFU19UVVBM RVNfT0spOwpAQCAtMzk5Niw2ICszOTk5LDggQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZv dXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCWlfcHVidXBkYXRlID0gUFFmbnVtYmVyKHJlcywg InB1YnVwZGF0ZSIpOwogCWlfcHViZGVsZXRlID0gUFFmbnVtYmVyKHJlcywgInB1YmRlbGV0ZSIp OwogCWlfcHVidHJ1bmNhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidHJ1bmNhdGUiKTsKKwlpX3B1 YmRkbF9hbGwgPSBQUWZudW1iZXIocmVzLCAicHViZGRsX2FsbCIpOworCWlfcHViZGRsX3RhYmxl ID0gUFFmbnVtYmVyKHJlcywgInB1YmRkbF90YWJsZSIpOwogCWlfcHVidmlhcm9vdCA9IFBRZm51 bWJlcihyZXMsICJwdWJ2aWFyb290Iik7CiAKIAlwdWJpbmZvID0gcGdfbWFsbG9jKG50dXBzICog c2l6ZW9mKFB1YmxpY2F0aW9uSW5mbykpOwpAQCAtNDAxOSw2ICs0MDI0LDEwIEBAIGdldFB1Ymxp Y2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAkJCShzdHJjbXAo UFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGVsZXRlKSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tp XS5wdWJ0cnVuY2F0ZSA9CiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YnRydW5j YXRlKSwgInQiKSA9PSAwKTsKKwkJcHViaW5mb1tpXS5wdWJkZGxfYWxsID0KKwkJCShzdHJjbXAo UFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGRsX2FsbCksICJ0IikgPT0gMCk7CisJCXB1YmluZm9b aV0ucHViZGRsX3RhYmxlID0KKwkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGRs X3RhYmxlKSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ2aWFyb290ID0KIAkJCShzdHJj bXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidmlhcm9vdCksICJ0IikgPT0gMCk7CiAKQEAgLTQw OTgsNyArNDEwNywyNCBAQCBkdW1wUHVibGljYXRpb24oQXJjaGl2ZSAqZm91dCwgY29uc3QgUHVi bGljYXRpb25JbmZvICpwdWJpbmZvKQogCQlmaXJzdCA9IGZhbHNlOwogCX0KIAotCWFwcGVuZFBR RXhwQnVmZmVyQ2hhcihxdWVyeSwgJ1wnJyk7CisJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnks ICInIik7CisKKwlpZiAocHViaW5mby0+cHViZGRsX2FsbCB8fCBwdWJpbmZvLT5wdWJkZGxfdGFi bGUpCisJeworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgZGRsID0gJyIpOworCQlp ZiAocHViaW5mby0+cHViZGRsX2FsbCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAi YWxsIik7CisKKwkJaWYgKHB1YmluZm8tPnB1YmRkbF90YWJsZSkKKwkJeworCQkJaWYgKHB1Ymlu Zm8tPnB1YmRkbF9hbGwpCisJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsICIpOwor CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgInRhYmxlIik7CisJCX0KKworCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiciKTsKKwl9CiAKIAlpZiAocHViaW5mby0+cHVidmlh cm9vdCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290ID0gdHJ1ZSIpOwpAQCAtNzc4MSw2ICs3ODA3LDUwIEBAIGdldFRyaWdnZXJzKEFy Y2hpdmUgKmZvdXQsIFRhYmxlSW5mbyB0YmxpbmZvW10sIGludCBudW1UYWJsZXMpCiB9CiAKIC8q CisgKiBnZXRQdWJsaWNhdGlvbkV2ZW50VHJpZ2dlcnMKKyAqCSAgZ2V0IHRoZSBwdWJsaWNhdGlv biBldmVudCB0cmlnZ2VycyB0aGF0IHNob3VsZCBiZSBza2lwcGVkCisgKi8KK3N0YXRpYyB2b2lk CitnZXRQdWJsaWNhdGlvbkV2ZW50VHJpZ2dlcnMoQXJjaGl2ZSAqZm91dCwgU2ltcGxlU3RyaW5n TGlzdCAqc2tpcFRyaWdnZXJzKQoreworCVBRRXhwQnVmZmVyIHF1ZXJ5OworCVBHcmVzdWx0ICAg KnJlczsKKwlpbnQJCQlpOworCWludAkJCW50dXBzOworCisJcXVlcnkgPSBjcmVhdGVQUUV4cEJ1 ZmZlcigpOworCisJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCisJCQkJCQkgIlNFTEVDVCBv aWQgRlJPTSBwZ19wdWJsaWNhdGlvbiAiCisJCQkJCQkgIldIRVJFIHB1YmRkbF9hbGwgT1IgcHVi ZGRsX3RhYmxlIik7CisKKwlyZXMgPSBFeGVjdXRlU3FsUXVlcnkoZm91dCwgcXVlcnktPmRhdGEs IFBHUkVTX1RVUExFU19PSyk7CisJbnR1cHMgPSBQUW50dXBsZXMocmVzKTsKKworCWZvciAoaSA9 IDA7IGkgPCBudHVwczsgaSsrKQorCXsKKwkJY2hhciAqdHJpZ25hbWU7CisJCU9pZCBwdWJpZCA9 IGF0b29pZChQUWdldHZhbHVlKHJlcywgMCwgMCkpOworCisJCXRyaWduYW1lID0gcHNwcmludGYo UFVCX0VWRU5UX1RSSUdfUFJFRklYLCBQVUJfVFJJR19FVkVOVDEsIHB1YmlkKTsKKwkJc2ltcGxl X3N0cmluZ19saXN0X2FwcGVuZChza2lwVHJpZ2dlcnMsIHRyaWduYW1lKTsKKworCQl0cmlnbmFt ZSA9IHBzcHJpbnRmKFBVQl9FVkVOVF9UUklHX1BSRUZJWCwgUFVCX1RSSUdfRVZFTlQyLCBwdWJp ZCk7CisJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoc2tpcFRyaWdnZXJzLCB0cmlnbmFtZSk7 CisKKwkJdHJpZ25hbWUgPSBwc3ByaW50ZihQVUJfRVZFTlRfVFJJR19QUkVGSVgsIFBVQl9UUklH X0VWRU5UMywgcHViaWQpOworCQlzaW1wbGVfc3RyaW5nX2xpc3RfYXBwZW5kKHNraXBUcmlnZ2Vy cywgdHJpZ25hbWUpOworCisJCXRyaWduYW1lID0gcHNwcmludGYoUFVCX0VWRU5UX1RSSUdfUFJF RklYLCBQVUJfVFJJR19FVkVOVDQsIHB1YmlkKTsKKwkJc2ltcGxlX3N0cmluZ19saXN0X2FwcGVu ZChza2lwVHJpZ2dlcnMsIHRyaWduYW1lKTsKKwl9CisKKwlQUWNsZWFyKHJlcyk7CisKKwlkZXN0 cm95UFFFeHBCdWZmZXIocXVlcnkpOworfQorCisvKgogICogZ2V0RXZlbnRUcmlnZ2VycwogICoJ ICBnZXQgaW5mb3JtYXRpb24gYWJvdXQgZXZlbnQgdHJpZ2dlcnMKICAqLwpAQCAtNzgwMCw2ICs3 ODcwLDcgQEAgZ2V0RXZlbnRUcmlnZ2VycyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bUV2ZW50VHJp Z2dlcnMpCiAJCQkJaV9ldnRmbmFtZSwKIAkJCQlpX2V2dGVuYWJsZWQ7CiAJaW50CQkJbnR1cHM7 CisJU2ltcGxlU3RyaW5nTGlzdCBza2lwVHJpZ2dlcnMgPSB7TlVMTCwgTlVMTH07CiAKIAkvKiBC ZWZvcmUgOS4zLCB0aGVyZSBhcmUgbm8gZXZlbnQgdHJpZ2dlcnMgKi8KIAlpZiAoZm91dC0+cmVt b3RlVmVyc2lvbiA8IDkwMzAwKQpAQCAtNzgwOCw2ICs3ODc5LDggQEAgZ2V0RXZlbnRUcmlnZ2Vy cyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bUV2ZW50VHJpZ2dlcnMpCiAJCXJldHVybiBOVUxMOwog CX0KIAorCWdldFB1YmxpY2F0aW9uRXZlbnRUcmlnZ2Vycyhmb3V0LCAmc2tpcFRyaWdnZXJzKTsK KwogCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAogCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KHF1ZXJ5LApAQCAtNzg1Miw5ICs3OTI1LDE0IEBAIGdldEV2ZW50VHJpZ2dlcnMoQXJjaGl2ZSAq Zm91dCwgaW50ICpudW1FdmVudFRyaWdnZXJzKQogCQlldnRpbmZvW2ldLmV2dGVuYWJsZWQgPSAq KFBRZ2V0dmFsdWUocmVzLCBpLCBpX2V2dGVuYWJsZWQpKTsKIAogCQkvKiBEZWNpZGUgd2hldGhl ciB3ZSB3YW50IHRvIGR1bXAgaXQgKi8KLQkJc2VsZWN0RHVtcGFibGVPYmplY3QoJihldnRpbmZv W2ldLmRvYmopLCBmb3V0KTsKKwkJaWYgKHNpbXBsZV9zdHJpbmdfbGlzdF9tZW1iZXIoJnNraXBU cmlnZ2VycywgZXZ0aW5mb1tpXS5ldnRuYW1lKSkKKwkJCWV2dGluZm9baV0uZG9iai5kdW1wPSBE VU1QX0NPTVBPTkVOVF9OT05FOworCQllbHNlCisJCQlzZWxlY3REdW1wYWJsZU9iamVjdCgmKGV2 dGluZm9baV0uZG9iaiksIGZvdXQpOwogCX0KIAorCXNpbXBsZV9zdHJpbmdfbGlzdF9kZXN0cm95 KCZza2lwVHJpZ2dlcnMpOworCiAJUFFjbGVhcihyZXMpOwogCiAJZGVzdHJveVBRRXhwQnVmZmVy KHF1ZXJ5KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmggYi9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IGU3Y2JkOGQuLmUzMjY3NDBkIDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgK QEAgLTYxOSw2ICs2MTksOCBAQCB0eXBlZGVmIHN0cnVjdCBfUHVibGljYXRpb25JbmZvCiAJYm9v bAkJcHVidXBkYXRlOwogCWJvb2wJCXB1YmRlbGV0ZTsKIAlib29sCQlwdWJ0cnVuY2F0ZTsKKwli b29sCQlwdWJkZGxfYWxsOworCWJvb2wJCXB1YmRkbF90YWJsZTsKIAlib29sCQlwdWJ2aWFyb290 OwogfSBQdWJsaWNhdGlvbkluZm87CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAw Ml9wZ19kdW1wLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKaW5kZXggZDky MjQ3Yy4uZmFjMjg2MSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAu cGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKQEAgLTI0OTMsNyArMjQ5 Myw3IEBAIG15ICV0ZXN0cyA9ICgKIAkJY3JlYXRlX29yZGVyID0+IDUwLAogCQljcmVhdGVfc3Fs ICAgPT4gJ0NSRUFURSBQVUJMSUNBVElPTiBwdWIyCiAJCQkJCQkgRk9SIEFMTCBUQUJMRVMKLQkJ CQkJCSBXSVRIIChwdWJsaXNoID0gXCdcJyk7JywKKwkJCQkJCSBXSVRIIChwdWJsaXNoID0gXCdc JywgZGRsID0gXCdcJyk7JywKIAkJcmVnZXhwID0+IHFyL14KIAkJCVxRQ1JFQVRFIFBVQkxJQ0FU SU9OIHB1YjIgRk9SIEFMTCBUQUJMRVMgV0lUSCAocHVibGlzaCA9ICcnKTtcRQogCQkJL3htLApk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3Jp YmUuYwppbmRleCBjOGEwYmI3Li43ODMyZWYwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVz Y3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpAQCAtNjE2Miw3ICs2MTYyLDcg QEAgbGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCVBRRXhwQnVmZmVyRGF0 YSBidWY7CiAJUEdyZXN1bHQgICAqcmVzOwogCXByaW50UXVlcnlPcHQgbXlvcHQgPSBwc2V0LnBv cHQ7Ci0Jc3RhdGljIGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OworCXN0YXRpYyBj b25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OwogCiAJaWYgKHBz ZXQuc3ZlcnNpb24gPCAxMDAwMDApCiAJewpAQCAtNjE3OSwxMyArNjE3OSwyMyBAQCBsaXN0UHVi bGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwK IAkJCQkJICAiU0VMRUNUIHB1Ym5hbWUgQVMgXCIlc1wiLFxuIgogCQkJCQkgICIgIHBnX2NhdGFs b2cucGdfZ2V0X3VzZXJieWlkKHB1Ym93bmVyKSBBUyBcIiVzXCIsXG4iCi0JCQkJCSAgIiAgcHVi YWxsdGFibGVzIEFTIFwiJXNcIixcbiIKLQkJCQkJICAiICBwdWJpbnNlcnQgQVMgXCIlc1wiLFxu IgotCQkJCQkgICIgIHB1YnVwZGF0ZSBBUyBcIiVzXCIsXG4iCi0JCQkJCSAgIiAgcHViZGVsZXRl IEFTIFwiJXNcIiIsCisJCQkJCSAgIiAgcHViYWxsdGFibGVzIEFTIFwiJXNcIiIsCiAJCQkJCSAg Z2V0dGV4dF9ub29wKCJOYW1lIiksCiAJCQkJCSAgZ2V0dGV4dF9ub29wKCJPd25lciIpLAotCQkJ CQkgIGdldHRleHRfbm9vcCgiQWxsIHRhYmxlcyIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiQWxs IHRhYmxlcyIpKTsKKwlpZiAocHNldC5zdmVyc2lvbiA+PSAxNjAwMDApCisJeworCQlhcHBlbmRQ UUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJICAiLFxuICBwdWJkZGxfYWxsIEFTIFwiJXNcIiIsCisJ CQkJCQkgIGdldHRleHRfbm9vcCgiQWxsIERETHMiKSk7CisJCWFwcGVuZFBRRXhwQnVmZmVyKCZi dWYsCisJCQkJCQkgICIsXG4gIHB1YmRkbF90YWJsZSBBUyBcIiVzXCIiLAorCQkJCQkJICBnZXR0 ZXh0X25vb3AoIlRhYmxlIERETHMiKSk7CisJfQorCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJ CQkJCSAgIixcbiAgcHViaW5zZXJ0IEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBwdWJ1cGRhdGUg QVMgXCIlc1wiLFxuIgorCQkJCQkgICIgIHB1YmRlbGV0ZSBBUyBcIiVzXCIiLAogCQkJCQkgIGdl dHRleHRfbm9vcCgiSW5zZXJ0cyIpLAogCQkJCQkgIGdldHRleHRfbm9vcCgiVXBkYXRlcyIpLAog CQkJCQkgIGdldHRleHRfbm9vcCgiRGVsZXRlcyIpKTsKQEAgLTYxOTcsNyArNjIwNyw2IEBAIGxp c3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJYXBwZW5kUFFFeHBCdWZmZXIo JmJ1ZiwKIAkJCQkJCSAgIixcbiAgcHVidmlhcm9vdCBBUyBcIiVzXCIiLAogCQkJCQkJICBnZXR0 ZXh0X25vb3AoIlZpYSByb290IikpOwotCiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJ CQkJCSAiXG5GUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25cbiIpOwogCkBAIC02Mjg3LDYg KzYyOTYsNyBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCVBH cmVzdWx0ICAgKnJlczsKIAlib29sCQloYXNfcHVidHJ1bmNhdGU7CiAJYm9vbAkJaGFzX3B1YnZp YXJvb3Q7CisJYm9vbAkJaGFzX3B1YmRkbDsKIAogCVBRRXhwQnVmZmVyRGF0YSB0aXRsZTsKIAlw cmludFRhYmxlQ29udGVudCBjb250OwpAQCAtNjMwMywxMyArNjMxMywxOSBAQCBkZXNjcmliZVB1 YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCiAJaGFzX3B1YnRydW5jYXRlID0gKHBz ZXQuc3ZlcnNpb24gPj0gMTEwMDAwKTsKIAloYXNfcHVidmlhcm9vdCA9IChwc2V0LnN2ZXJzaW9u ID49IDEzMDAwMCk7CisJaGFzX3B1YmRkbCA9ICAocHNldC5zdmVyc2lvbiA+PSAxNjAwMDApOwog CiAJaW5pdFBRRXhwQnVmZmVyKCZidWYpOwogCiAJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJ CQkJICAiU0VMRUNUIG9pZCwgcHVibmFtZSxcbiIKIAkJCQkJICAiICBwZ19jYXRhbG9nLnBnX2dl dF91c2VyYnlpZChwdWJvd25lcikgQVMgb3duZXIsXG4iCi0JCQkJCSAgIiAgcHViYWxsdGFibGVz LCBwdWJpbnNlcnQsIHB1YnVwZGF0ZSwgcHViZGVsZXRlIik7CisJCQkJCSAgIiAgcHViYWxsdGFi bGVzIik7CisJaWYgKGhhc19wdWJkZGwpCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJ CQkJCQkJICIsIHB1YmRkbF9hbGwsIHB1YmRkbF90YWJsZSIpOworCWFwcGVuZFBRRXhwQnVmZmVy U3RyKCZidWYsCisJCQkJCQkgIiwgIHB1Ymluc2VydCwgcHVidXBkYXRlLCBwdWJkZWxldGUiKTsK IAlpZiAoaGFzX3B1YnRydW5jYXRlKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJ CQkJCSAiLCBwdWJ0cnVuY2F0ZSIpOwpAQCAtNjM2Nyw2ICs2MzgzLDggQEAgZGVzY3JpYmVQdWJs aWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCW5jb2xzKys7CiAJCWlmIChoYXNfcHVi dmlhcm9vdCkKIAkJCW5jb2xzKys7CisJCWlmIChoYXNfcHViZGRsKQorCQkJbmNvbHMgKz0gMjsK IAogCQlpbml0UFFFeHBCdWZmZXIoJnRpdGxlKTsKIAkJcHJpbnRmUFFFeHBCdWZmZXIoJnRpdGxl LCBfKCJQdWJsaWNhdGlvbiAlcyIpLCBwdWJuYW1lKTsKQEAgLTYzNzQsNiArNjM5MiwxMSBAQCBk ZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCiAJCXByaW50VGFibGVB ZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiT3duZXIiKSwgdHJ1ZSwgYWxpZ24pOwogCQlw cmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIkFsbCB0YWJsZXMiKSwgdHJ1 ZSwgYWxpZ24pOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJeworCQkJcHJpbnRUYWJsZUFkZEhlYWRl cigmY29udCwgZ2V0dGV4dF9ub29wKCJBbGwgRERMcyIpLCB0cnVlLCBhbGlnbik7CisJCQlwcmlu dFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIlRhYmxlIERETHMiKSwgdHJ1ZSwg YWxpZ24pOworCQl9CiAJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgi SW5zZXJ0cyIpLCB0cnVlLCBhbGlnbik7CiAJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdl dHRleHRfbm9vcCgiVXBkYXRlcyIpLCB0cnVlLCBhbGlnbik7CiAJCXByaW50VGFibGVBZGRIZWFk ZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiRGVsZXRlcyIpLCB0cnVlLCBhbGlnbik7CkBAIC02Mzkx LDYgKzY0MTQsMTEgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikK IAkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgNyksIGZhbHNl LCBmYWxzZSk7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCXByaW50VGFibGVBZGRDZWxsKCZj b250LCBQUWdldHZhbHVlKHJlcywgaSwgOCksIGZhbHNlLCBmYWxzZSk7CisJCWlmIChoYXNfcHVi ZGRsKQorCQl7CisJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGks IDkpLCBmYWxzZSwgZmFsc2UpOworCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFs dWUocmVzLCBpLCAxMCksIGZhbHNlLCBmYWxzZSk7CisJCX0KIAogCQlpZiAoIXB1YmFsbHRhYmxl cykKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggNDhhZjllMC4uMjVlMDljZiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMTkzMiw0ICsxMTkzMiwxNiBAQAogeyBvaWQgPT4g JzQ2NDMnLCBkZXNjciA9PiAnZXhwYW5kIEpTT04gZm9ybWF0IERETCB0byBhIHBsYWluIHRleHQg RERMIGNvbW1hbmQnLAogICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcs IHByb3JldHR5cGUgPT4gJ3RleHQnLAogICBwcm9hcmd0eXBlcyA9PiAndGV4dCcsIHByb3NyYyA9 PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnIH0sCit7IG9pZCA9PiAnNDY0NCcsIGRlc2Ny ID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIGVuZCcsCisgIHByb25hbWUgPT4g J3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kJywgcHJvcmV0dHlwZSA9PiAnZXZl bnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9u X2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kJyB9LAoreyBvaWQgPT4gJzQ2NDUnLCBkZXNjciA9PiAn dHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSBzdGFydCcsCisgIHByb25hbWUgPT4gJ3B1 YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQnLCBwcm9yZXR0eXBlID0+ICdldmVu dF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25f ZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydCcgfSwKK3sgb2lkID0+ICc0NjQ2JywgZGVzY3IgPT4g J3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UgdGFibGUgcmV3cml0ZScsCisgIHByb25h bWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZScsIHByb3JldHR5cGUgPT4g J2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNh dGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnIH0sCit7IG9pZCA9PiAnNDY0NycsIGRlc2NyID0+ ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIGluaXQnLAorICBwcm9uYW1l ID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUnLCBwcm9yZXR0eXBlID0+ ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGlj YXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w dWJsaWNhdGlvbi5oCmluZGV4IDcxNWYyYTIuLjFjZjAyYTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3B1YmxpY2F0aW9uLmgKQEAgLTIxLDYgKzIxLDE1IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19w dWJsaWNhdGlvbl9kLmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgogCisvKiBQdWJsaWNh dGlvbiB0cmlnZ2VyIGV2ZW50cyAqLworI2RlZmluZSBQVUJfVFJJR19FVkVOVDEgImRkbF9jb21t YW5kX2VuZCIKKyNkZWZpbmUgUFVCX1RSSUdfRVZFTlQyICJkZGxfY29tbWFuZF9zdGFydCIKKyNk ZWZpbmUgUFVCX1RSSUdfRVZFTlQzICJ0YWJsZV9yZXdyaXRlIgorI2RlZmluZSBQVUJfVFJJR19F VkVOVDQgInRhYmxlX2luaXRfd3JpdGUiCisKKy8qIFB1YmxpY2F0aW9uIGV2ZW50IHRyaWdnZXIg cHJlZml4ICovCisjZGVmaW5lIFBVQl9FVkVOVF9UUklHX1BSRUZJWCAicGdfZGVwYXJzZV90cmln XyVzXyV1IgorCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJcGdfcHVibGljYXRpb24gZGVmaW5p dGlvbi4gIGNwcCB0dXJucyB0aGlzIGludG8KICAqCQl0eXBlZGVmIHN0cnVjdCBGb3JtRGF0YV9w Z19wdWJsaWNhdGlvbgpAQCAtNTQsNiArNjMsMTIgQEAgQ0FUQUxPRyhwZ19wdWJsaWNhdGlvbiw2 MTA0LFB1YmxpY2F0aW9uUmVsYXRpb25JZCkKIAogCS8qIHRydWUgaWYgcGFydGl0aW9uIGNoYW5n ZXMgYXJlIHB1Ymxpc2hlZCB1c2luZyByb290IHNjaGVtYSAqLwogCWJvb2wJCXB1YnZpYXJvb3Q7 CisKKwkvKiB0cnVlIGlmIGFsbCBzdXBwb3J0ZWQgZGRscyBhcmUgcHVibGlzaGVkICovCisJYm9v bAkJcHViZGRsX2FsbDsKKworCS8qIHRydWUgaWYgdGFibGUgZGRscyBhcmUgcHVibGlzaGVkICov CisJYm9vbAkJcHViZGRsX3RhYmxlOwogfSBGb3JtRGF0YV9wZ19wdWJsaWNhdGlvbjsKIAogLyog LS0tLS0tLS0tLS0tLS0tLQpAQCAtNzIsNiArODcsOCBAQCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNh dGlvbkFjdGlvbnMKIAlib29sCQlwdWJ1cGRhdGU7CiAJYm9vbAkJcHViZGVsZXRlOwogCWJvb2wJ CXB1YnRydW5jYXRlOworCWJvb2wJCXB1YmRkbF9hbGw7CisJYm9vbAkJcHViZGRsX3RhYmxlOwog fSBQdWJsaWNhdGlvbkFjdGlvbnM7CiAKIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uRGVzYwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IDQ4YzY1ZWYuLmJhYWUxZGMgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysgYi9zcmMv aW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTk0LDYgKzk0LDEwIEBAIGV4dGVy biB2b2lkIEV2ZW50VHJpZ2dlckRETENvbW1hbmRFbmQoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVy biB2b2lkIEV2ZW50VHJpZ2dlclNRTERyb3AoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lk IEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9pZCB0YWJsZU9pZCwg aW50IHJlYXNvbik7CiAKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3Rh cnQoTm9kZSAqcGFyc2V0cmVlKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdy aXRlKE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKK2V4dGVybiB2b2lk IEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKE9iamVjdEFkZHJlc3MgYWRkcmVzcyk7CisK IGV4dGVybiBib29sIEV2ZW50VHJpZ2dlckJlZ2luQ29tcGxldGVRdWVyeSh2b2lkKTsKIGV4dGVy biB2b2lkIEV2ZW50VHJpZ2dlckVuZENvbXBsZXRlUXVlcnkodm9pZCk7CiBleHRlcm4gYm9vbCB0 cmFja0Ryb3BwZWRPYmplY3RzTmVlZGVkKHZvaWQpOwpAQCAtMTEwLDcgKzExNCwxMiBAQCBleHRl cm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFuZChPYmplY3RBZGRyZXNzIGFk ZHJlc3MsCiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFy c2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQgb2Jq ZWN0SWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQo Tm9kZSAqc3ViY21kLAotCQkJCQkJCQkJCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKKwkJCQkJ CQkJCQkJCU9iamVjdEFkZHJlc3MgYWRkcmVzcywKKwkJCQkJCQkJCQkJCWJvb2wgcmV3cml0ZSk7 CisKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVHlwZVN0YXJ0KEFsdGVyVGFibGVDbWQg KnN1YmNtZCwgUmVsYXRpb24gcmVsKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVHlw ZUVuZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcywKKwkJCQkJCQkJCSBib29s IHJld3JpdGUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZUVuZCh2b2lkKTsK IAogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEdyYW50KEludGVybmFsR3JhbnQgKmlz dG10KTsKQEAgLTEyMCw2ICsxMjksMTIgQEAgZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVj dEFsdGVyT3BGYW0oQWx0ZXJPcEZhbWlseVN0bXQgKnN0bXQsCiBleHRlcm4gdm9pZCBFdmVudFRy aWdnZXJDb2xsZWN0Q3JlYXRlT3BDbGFzcyhDcmVhdGVPcENsYXNzU3RtdCAqc3RtdCwKIAkJCQkJ CQkJCQkJIE9pZCBvcGNvaWQsIExpc3QgKm9wZXJhdG9ycywKIAkJCQkJCQkJCQkJIExpc3QgKnBy b2NlZHVyZXMpOworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdENyZWF0ZVB1YmxpY2F0 aW9uKENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKKwkJCQkJCQkJCQkJCSBPaWQgcHViaWQs IExpc3QgKnJlbGF0aW9ucywKKwkJCQkJCQkJCQkJCSBMaXN0ICpzY2hlbWFzKTsKK2V4dGVybiB2 b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclB1YmxpY2F0aW9uKEFsdGVyUHVibGljYXRpb25T dG10ICpzdG10LAorCQkJCQkJCQkJCQkJT2lkIHB1YmlkLCBMaXN0ICpyZWxhdGlvbnMsCisJCQkJ CQkJCQkJCQlMaXN0ICpzY2hlbWFzKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RB bHRlclRTQ29uZmlnKEFsdGVyVFNDb25maWd1cmF0aW9uU3RtdCAqc3RtdCwKIAkJCQkJCQkJCQkJ IE9pZCBjZmdJZCwgT2lkICpkaWN0SWRzLCBpbnQgbmRpY3RzKTsKIGV4dGVybiB2b2lkIEV2ZW50 VHJpZ2dlckNvbGxlY3RBbHRlckRlZlByaXZzKEFsdGVyRGVmYXVsdFByaXZpbGVnZXNTdG10ICpz dG10KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5o IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggMGVhMmRmNS4u NWZiM2JhYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3Rv LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTY2LDYg KzY2LDcgQEAgdHlwZWRlZiBlbnVtIExvZ2ljYWxSZXBNc2dUeXBlCiAJTE9HSUNBTF9SRVBfTVNH X1JFTEFUSU9OID0gJ1InLAogCUxPR0lDQUxfUkVQX01TR19UWVBFID0gJ1knLAogCUxPR0lDQUxf UkVQX01TR19NRVNTQUdFID0gJ00nLAorCUxPR0lDQUxfUkVQX01TR19EREwgPSAnTCcsCiAJTE9H SUNBTF9SRVBfTVNHX0JFR0lOX1BSRVBBUkUgPSAnYicsCiAJTE9HSUNBTF9SRVBfTVNHX1BSRVBB UkUgPSAnUCcsCiAJTE9HSUNBTF9SRVBfTVNHX0NPTU1JVF9QUkVQQVJFRCA9ICdLJywKQEAgLTI0 Niw2ICsyNDcsOSBAQCBleHRlcm4gTGlzdCAqbG9naWNhbHJlcF9yZWFkX3RydW5jYXRlKFN0cmlu Z0luZm8gaW4sCiAJCQkJCQkJCQkgIGJvb2wgKmNhc2NhZGUsIGJvb2wgKnJlc3RhcnRfc2Vxcyk7 CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRy YW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSBib29sIHRyYW5zYWN0 aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7 CitleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX2RkbChTdHJpbmdJbmZvIG91dCwgWExvZ1Jl Y1B0ciBsc24sCisJCQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBj aGFyICptZXNzYWdlKTsKK2V4dGVybiBjaGFyICpsb2dpY2FscmVwX3JlYWRfZGRsKFN0cmluZ0lu Zm8gaW4sIFhMb2dSZWNQdHIgKmxzbiwgY29uc3QgY2hhciAqKnByZWZpeCwgU2l6ZSAqc3opOwog ZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0 aW9uSWQgeGlkLAogCQkJCQkJCQkgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQgKmNvbHVtbnMpOwog ZXh0ZXJuIExvZ2ljYWxSZXBSZWxhdGlvbiAqbG9naWNhbHJlcF9yZWFkX3JlbChTdHJpbmdJbmZv IGluKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4u aCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaAppbmRleCA1ZWQ1ZTZh Li40NGJhZjQwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1 Z2luLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCkBAIC05 LDcgKzksNiBAQAogI2lmbmRlZiBPVVRQVVRfUExVR0lOX0gKICNkZWZpbmUgT1VUUFVUX1BMVUdJ Tl9ICiAKLSNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVw bGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIgogCiBzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4 dDsKQEAgLTIxNSw2ICsyMTQsMTkgQEAgdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZVN0cmVh bU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgKIAkJCQkJCQkJ CQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyoKKyAqIENhbGxiYWNrIGZvciBzdHJlYW1p bmcgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZXMgZnJvbSBpbi1wcm9ncmVzcworICogdHJh bnNhY3Rpb25zLgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFtRERMTWVz c2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJCQkJ CSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdl X2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJCQkgT2lk IHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJ CQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICptZXNz YWdlKTsKKworLyoKICAqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgdHJ1bmNhdGVzIGZyb20gaW4t cHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLgogICovCiB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2Rl U3RyZWFtVHJ1bmNhdGVDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCkBA IC0yNTMsNiArMjY1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3V0cHV0UGx1Z2luQ2FsbGJhY2tzCiAJ TG9naWNhbERlY29kZVN0cmVhbUNvbW1pdENCIHN0cmVhbV9jb21taXRfY2I7CiAJTG9naWNhbERl Y29kZVN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2VfY2I7CiAJTG9naWNhbERlY29kZVN0cmVh bU1lc3NhZ2VDQiBzdHJlYW1fbWVzc2FnZV9jYjsKKwlMb2dpY2FsRGVjb2RlU3RyZWFtRERMTWVz c2FnZUNCIHN0cmVhbV9kZGxfY2I7CiAJTG9naWNhbERlY29kZVN0cmVhbVRydW5jYXRlQ0Igc3Ry ZWFtX3RydW5jYXRlX2NiOwogfSBPdXRwdXRQbHVnaW5DYWxsYmFja3M7CiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9wZ291dHB1dC5oCmluZGV4IGI0YTgwMTUuLmEyY2Y5OWIgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vcGdvdXRwdXQuaApAQCAtMjUsNiArMjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQR091dHB1dERh dGEKIAl1aW50MzIJCXByb3RvY29sX3ZlcnNpb247CiAJTGlzdAkgICAqcHVibGljYXRpb25fbmFt ZXM7CiAJTGlzdAkgICAqcHVibGljYXRpb25zOworCUxpc3QJICAgKmRlbGV0ZWRfcmVsaWRzOwog CWJvb2wJCWJpbmFyeTsKIAljaGFyCQlzdHJlYW1pbmc7CiAJYm9vbAkJbWVzc2FnZXM7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKaW5kZXggZTkyYjgxNi4uYjBmYWRlNyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBi L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApAQCAtNTQxLDYgKzU0MSwx NyBAQCB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCKSAoCiAJCQkJ CQkJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAogCQkJCQkJCQkJCQkgIGNvbnN0 IGNoYXIgKm1lc3NhZ2UpOwogCisvKiBzdHJlYW0gRERMIG1lc3NhZ2UgY2FsbGJhY2sgc2lnbmF0 dXJlICovCit0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNCKSAo CisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlciAqcmIsCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJ CQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJ CQkJCQkJCQkJCSBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6 ZSBzeiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyogc3RyZWFtIHRy dW5jYXRlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZl clN0cmVhbVRydW5jYXRlQ0IpICgKIAkJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlciAqcmIsCkBA IC02MTcsNiArNjI4LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyU3Ry ZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1pdDsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ2hhbmdlQ0Ig c3RyZWFtX2NoYW5nZTsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNz YWdlOworCVJlb3JkZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbDsKIAlSZW9y ZGVyQnVmZmVyU3RyZWFtVHJ1bmNhdGVDQiBzdHJlYW1fdHJ1bmNhdGU7CiAKIAkvKgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9jbWR0YWcuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFn LmgKaW5kZXggMWU3NTE0ZC4uMDc2YzI3ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9j bWR0YWcuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZy5oCkBAIC0xNiw3ICsxNiw3IEBA CiAvKiBidWZmZXIgc2l6ZSByZXF1aXJlZCBmb3IgY29tbWFuZCBjb21wbGV0aW9uIHRhZ3MgKi8K ICNkZWZpbmUgQ09NUExFVElPTl9UQUdfQlVGU0laRQk2NAogCi0jZGVmaW5lIFBHX0NNRFRBRyh0 YWcsIG5hbWUsIGV2dHJnb2ssIHJ3cm9rLCByb3djbnQpIFwKKyNkZWZpbmUgUEdfQ01EVEFHKHRh ZywgbmFtZSwgZXZ0cmdvaywgcndyb2ssIHJvd2NudCwgZGRscmVwbG9rKSBcCiAJdGFnLAogCiB0 eXBlZGVmIGVudW0gQ29tbWFuZFRhZwpAQCAtNTMsOSArNTMsMTEgQEAgQ29weVF1ZXJ5Q29tcGxl dGlvbihRdWVyeUNvbXBsZXRpb24gKmRzdCwgY29uc3QgUXVlcnlDb21wbGV0aW9uICpzcmMpCiBl eHRlcm4gdm9pZCBJbml0aWFsaXplUXVlcnlDb21wbGV0aW9uKFF1ZXJ5Q29tcGxldGlvbiAqcWMp OwogZXh0ZXJuIGNvbnN0IGNoYXIgKkdldENvbW1hbmRUYWdOYW1lKENvbW1hbmRUYWcgY29tbWFu ZFRhZyk7CiBleHRlcm4gY29uc3QgY2hhciAqR2V0Q29tbWFuZFRhZ05hbWVBbmRMZW4oQ29tbWFu ZFRhZyBjb21tYW5kVGFnLCBTaXplICpsZW4pOworZXh0ZXJuIENvbW1hbmRUYWcgKkdldENvbW1h bmRUYWdzRm9yRERMUmVwbChpbnQgKm5jb21tYW5kcyk7CiBleHRlcm4gYm9vbCBjb21tYW5kX3Rh Z19kaXNwbGF5X3Jvd2NvdW50KENvbW1hbmRUYWcgY29tbWFuZFRhZyk7CiBleHRlcm4gYm9vbCBj b21tYW5kX3RhZ19ldmVudF90cmlnZ2VyX29rKENvbW1hbmRUYWcgY29tbWFuZFRhZyk7CiBleHRl cm4gYm9vbCBjb21tYW5kX3RhZ190YWJsZV9yZXdyaXRlX29rKENvbW1hbmRUYWcgY29tbWFuZFRh Zyk7CitleHRlcm4gYm9vbCBjb21tYW5kX3RhZ19kZGxfcmVwbGljYXRpb25fb2soQ29tbWFuZFRh ZyBjb21tYW5kVGFnKTsKIGV4dGVybiBDb21tYW5kVGFnIEdldENvbW1hbmRUYWdFbnVtKGNvbnN0 IGNoYXIgKmNvbW1hbmRuYW1lKTsKIGV4dGVybiBTaXplIEJ1aWxkUXVlcnlDb21wbGV0aW9uU3Ry aW5nKGNoYXIgKmJ1ZmYsIGNvbnN0IFF1ZXJ5Q29tcGxldGlvbiAqcWMsCiAJCQkJCQkJCQkgICBi b29sIG5hbWVvbmx5KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5o IGIvc3JjL2luY2x1ZGUvdGNvcC9jbWR0YWdsaXN0LmgKaW5kZXggZTczOGFjMS4uMThiNjllNCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9jbWR0YWdsaXN0LmgKKysrIGIvc3JjL2luY2x1 ZGUvdGNvcC9jbWR0YWdsaXN0LmgKQEAgLTIzLDE5NiArMjMsMTk2IEBACiAgKiB0ZXh0dWFsIG5h bWUsIHNvIHRoYXQgd2UgY2FuIGJzZWFyY2ggb24gaXQ7IHNlZSBHZXRDb21tYW5kVGFnRW51bSgp LgogICovCiAKLS8qIHN5bWJvbCBuYW1lLCB0ZXh0dWFsIG5hbWUsIGV2ZW50X3RyaWdnZXJfb2ss IHRhYmxlX3Jld3JpdGVfb2ssIHJvd2NvdW50ICovCi1QR19DTURUQUcoQ01EVEFHX1VOS05PV04s ICI/Pz8iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9BQ0NF U1NfTUVUSE9ELCAiQUxURVIgQUNDRVNTIE1FVEhPRCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQUxURVJfQUdHUkVHQVRFLCAiQUxURVIgQUdHUkVHQVRFIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9DQVNULCAiQUxURVIgQ0FTVCIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfQ09MTEFUSU9OLCAi QUxURVIgQ09MTEFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19B TFRFUl9DT05TVFJBSU5ULCAiQUxURVIgQ09OU1RSQUlOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQUxURVJfQ09OVkVSU0lPTiwgIkFMVEVSIENPTlZFUlNJT04iLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0RBVEFCQVNFLCAiQUxU RVIgREFUQUJBU0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9ERUZBVUxUX1BSSVZJTEVHRVMsICJBTFRFUiBERUZBVUxUIFBSSVZJTEVHRVMiLCB0cnVlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0RPTUFJTiwgIkFMVEVSIERPTUFJ TiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfRVZFTlRfVFJJ R0dFUiwgIkFMVEVSIEVWRU5UIFRSSUdHRVIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19BTFRFUl9FWFRFTlNJT04sICJBTFRFUiBFWFRFTlNJT04iLCB0cnVlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0ZPUkVJR05fREFUQV9XUkFQUEVSLCAi QUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0FMVEVSX0ZPUkVJR05fVEFCTEUsICJBTFRFUiBGT1JFSUdOIFRBQkxFIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9GVU5DVElPTiwgIkFMVEVS IEZVTkNUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9J TkRFWCwgIkFMVEVSIElOREVYIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19BTFRFUl9MQU5HVUFHRSwgIkFMVEVSIExBTkdVQUdFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19BTFRFUl9MQVJHRV9PQkpFQ1QsICJBTFRFUiBMQVJHRSBPQkpFQ1Qi LCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX01BVEVSSUFMSVpF RF9WSUVXLCAiQUxURVIgTUFURVJJQUxJWkVEIFZJRVciLCB0cnVlLCB0cnVlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQUxURVJfT1BFUkFUT1IsICJBTFRFUiBPUEVSQVRPUiIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfT1BFUkFUT1JfQ0xBU1MsICJBTFRF UiBPUEVSQVRPUiBDTEFTUyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf QUxURVJfT1BFUkFUT1JfRkFNSUxZLCAiQUxURVIgT1BFUkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9QT0xJQ1ksICJBTFRFUiBQT0xJQ1ki LCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1BST0NFRFVSRSwg IkFMVEVSIFBST0NFRFVSRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf QUxURVJfUFVCTElDQVRJT04sICJBTFRFUiBQVUJMSUNBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfUk9MRSwgIkFMVEVSIFJPTEUiLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9ST1VUSU5FLCAiQUxURVIgUk9VVElO RSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfUlVMRSwgIkFM VEVSIFJVTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1ND SEVNQSwgIkFMVEVSIFNDSEVNQSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfQUxURVJfU0VRVUVOQ0UsICJBTFRFUiBTRVFVRU5DRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQUxURVJfU0VSVkVSLCAiQUxURVIgU0VSVkVSIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TVEFUSVNUSUNTLCAiQUxURVIgU1RB VElTVElDUyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfU1VC U0NSSVBUSU9OLCAiQUxURVIgU1VCU0NSSVBUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19BTFRFUl9TWVNURU0sICJBTFRFUiBTWVNURU0iLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9UQUJMRSwgIkFMVEVSIFRBQkxFIiwgdHJ1 ZSwgdHJ1ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1RBQkxFU1BBQ0UsICJBTFRF UiBUQUJMRVNQQUNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxU RVJfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwgIkFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VS QVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1RFWFRf U0VBUkNIX0RJQ1RJT05BUlksICJBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9QQVJTRVIs ICJBTFRFUiBURVhUIFNFQVJDSCBQQVJTRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX1RFTVBMQVRFLCAiQUxURVIgVEVYVCBTRUFSQ0gg VEVNUExBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1RS QU5TRk9STSwgIkFMVEVSIFRSQU5TRk9STSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfQUxURVJfVFJJR0dFUiwgIkFMVEVSIFRSSUdHRVIiLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1RZUEUsICJBTFRFUiBUWVBFIiwgdHJ1ZSwgdHJ1 ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1VTRVJfTUFQUElORywgIkFMVEVSIFVT RVIgTUFQUElORyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJf VklFVywgIkFMVEVSIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0FOQUxZWkUsICJBTkFMWVpFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfQkVHSU4sICJCRUdJTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0NBTEwsICJDQUxMIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ0hF Q0tQT0lOVCwgIkNIRUNLUE9JTlQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DTE9TRSwgIkNMT1NFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfQ0xPU0VfQ1VSU09SLCAiQ0xPU0UgQ1VSU09SIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQ0xPU0VfQ1VSU09SX0FMTCwgIkNMT1NFIENVUlNPUiBBTEwiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DTFVTVEVSLCAiQ0xVU1RFUiIsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NPTU1FTlQsICJDT01NRU5UIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DT01NSVQsICJDT01NSVQiLCBm YWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DT01NSVRfUFJFUEFSRUQsICJD T01NSVQgUFJFUEFSRUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19D T1BZLCAiQ09QWSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRBRyhDTURUQUdfQ09QWV9G Uk9NLCAiQ09QWSBGUk9NIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf Q1JFQVRFX0FDQ0VTU19NRVRIT0QsICJDUkVBVEUgQUNDRVNTIE1FVEhPRCIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0FHR1JFR0FURSwgIkNSRUFURSBBR0dS RUdBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9DQVNU LCAiQ1JFQVRFIENBU1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NS RUFURV9DT0xMQVRJT04sICJDUkVBVEUgQ09MTEFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ09OU1RSQUlOVCwgIkNSRUFURSBDT05TVFJBSU5UIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ09OVkVSU0lPTiwg IkNSRUFURSBDT05WRVJTSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19DUkVBVEVfREFUQUJBU0UsICJDUkVBVEUgREFUQUJBU0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRE9NQUlOLCAiQ1JFQVRFIERPTUFJTiIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0VWRU5UX1RSSUdHRVIsICJD UkVBVEUgRVZFTlQgVFJJR0dFUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0NSRUFURV9FWFRFTlNJT04sICJDUkVBVEUgRVhURU5TSU9OIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJDUkVB VEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0NSRUFURV9GT1JFSUdOX1RBQkxFLCAiQ1JFQVRFIEZPUkVJR04gVEFCTEUiLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9GVU5DVElPTiwgIkNSRUFU RSBGVU5DVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRF X0lOREVYLCAiQ1JFQVRFIElOREVYIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfTEFOR1VBR0UsICJDUkVBVEUgTEFOR1VBR0UiLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9NQVRFUklBTElaRURfVklFVywgIkNSRUFURSBN QVRFUklBTElaRUQgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf Q1JFQVRFX09QRVJBVE9SLCAiQ1JFQVRFIE9QRVJBVE9SIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19DUkVBVEVfT1BFUkFUT1JfQ0xBU1MsICJDUkVBVEUgT1BFUkFUT1Ig Q0xBU1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9PUEVS QVRPUl9GQU1JTFksICJDUkVBVEUgT1BFUkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUE9MSUNZLCAiQ1JFQVRFIFBPTElDWSIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BST0NFRFVSRSwgIkNSRUFU RSBQUk9DRURVUkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFU RV9QVUJMSUNBVElPTiwgIkNSRUFURSBQVUJMSUNBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1JPTEUsICJDUkVBVEUgUk9MRSIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9ST1VUSU5FLCAiQ1JFQVRFIFJPVVRJ TkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9SVUxFLCAi Q1JFQVRFIFJVTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFU RV9TQ0hFTUEsICJDUkVBVEUgU0NIRU1BIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfU0VRVUVOQ0UsICJDUkVBVEUgU0VRVUVOQ0UiLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9TRVJWRVIsICJDUkVBVEUgU0VSVkVSIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU1RBVElTVElDUywg IkNSRUFURSBTVEFUSVNUSUNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19DUkVBVEVfU1VCU0NSSVBUSU9OLCAiQ1JFQVRFIFNVQlNDUklQVElPTiIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RBQkxFLCAiQ1JFQVRFIFRBQkxFIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEFCTEVfQVMsICJD UkVBVEUgVEFCTEUgQVMiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NS RUFURV9UQUJMRVNQQUNFLCAiQ1JFQVRFIFRBQkxFU1BBQ0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwgIkNS RUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkNSRUFURSBURVhU IFNFQVJDSCBESUNUSU9OQVJZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19DUkVBVEVfVEVYVF9TRUFSQ0hfUEFSU0VSLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNI X1RFTVBMQVRFLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIFRFTVBMQVRFIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVFJBTlNGT1JNLCAiQ1JFQVRFIFRSQU5TRk9S TSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RSSUdHRVIs ICJDUkVBVEUgVFJJR0dFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf Q1JFQVRFX1RZUEUsICJDUkVBVEUgVFlQRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfQ1JFQVRFX1VTRVJfTUFQUElORywgIkNSRUFURSBVU0VSIE1BUFBJTkciLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9WSUVXLCAiQ1JFQVRFIFZJ RVciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RFQUxMT0NBVEUsICJE RUFMTE9DQVRFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfREVBTExP Q0FURV9BTEwsICJERUFMTE9DQVRFIEFMTCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0RFQ0xBUkVfQ1VSU09SLCAiREVDTEFSRSBDVVJTT1IiLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19ERUxFVEUsICJERUxFVEUiLCBmYWxzZSwgZmFsc2Us IHRydWUpCi1QR19DTURUQUcoQ01EVEFHX0RJU0NBUkQsICJESVNDQVJEIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRElTQ0FSRF9BTEwsICJESVNDQVJEIEFMTCIsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfUExBTlMsICJESVND QVJEIFBMQU5TIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRElTQ0FS RF9TRVFVRU5DRVMsICJESVNDQVJEIFNFUVVFTkNFUyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0RJU0NBUkRfVEVNUCwgIkRJU0NBUkQgVEVNUCIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RPLCAiRE8iLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0FDQ0VTU19NRVRIT0QsICJEUk9QIEFDQ0VTUyBNRVRI T0QiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfQUdHUkVHQVRF LCAiRFJPUCBBR0dSRUdBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0RST1BfQ0FTVCwgIkRST1AgQ0FTVCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfRFJPUF9DT0xMQVRJT04sICJEUk9QIENPTExBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9DT05TVFJBSU5ULCAiRFJPUCBDT05TVFJBSU5UIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0NPTlZFUlNJT04sICJE Uk9QIENPTlZFUlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RS T1BfREFUQUJBU0UsICJEUk9QIERBVEFCQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NN RFRBRyhDTURUQUdfRFJPUF9ET01BSU4sICJEUk9QIERPTUFJTiIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9FVkVOVF9UUklHR0VSLCAiRFJPUCBFVkVOVCBUUklH R0VSIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9FWFRFTlNJ T04sICJEUk9QIEVYVEVOU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfRFJPUF9GT1JFSUdOX0RBVEFfV1JBUFBFUiwgIkRST1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIi LCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfRk9SRUlHTl9UQUJM RSwgIkRST1AgRk9SRUlHTiBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfRFJPUF9GVU5DVElPTiwgIkRST1AgRlVOQ1RJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0RST1BfSU5ERVgsICJEUk9QIElOREVYIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0xBTkdVQUdFLCAiRFJPUCBMQU5HVUFHRSIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9NQVRFUklBTElaRURf VklFVywgIkRST1AgTUFURVJJQUxJWkVEIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0RST1BfT1BFUkFUT1IsICJEUk9QIE9QRVJBVE9SIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX09QRVJBVE9SX0NMQVNTLCAiRFJPUCBPUEVS QVRPUiBDTEFTUyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9P UEVSQVRPUl9GQU1JTFksICJEUk9QIE9QRVJBVE9SIEZBTUlMWSIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9PV05FRCwgIkRST1AgT1dORUQiLCB0cnVlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfUE9MSUNZLCAiRFJPUCBQT0xJQ1kiLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfUFJPQ0VEVVJFLCAiRFJP UCBQUk9DRURVUkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1Bf UFVCTElDQVRJT04sICJEUk9QIFBVQkxJQ0FUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19EUk9QX1JPTEUsICJEUk9QIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1JPVVRJTkUsICJEUk9QIFJPVVRJTkUiLCB0cnVlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfUlVMRSwgIkRST1AgUlVMRSIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9TQ0hFTUEsICJEUk9QIFND SEVNQSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9TRVFVRU5D RSwgIkRST1AgU0VRVUVOQ0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0RST1BfU0VSVkVSLCAiRFJPUCBTRVJWRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0RST1BfU1RBVElTVElDUywgIkRST1AgU1RBVElTVElDUyIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9TVUJTQ1JJUFRJT04sICJEUk9QIFNVQlND UklQVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9UQUJM RSwgIkRST1AgVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RS T1BfVEFCTEVTUEFDRSwgIkRST1AgVEFCTEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwgIkRST1AgVEVY VCBTRUFSQ0ggQ09ORklHVVJBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfRFJPUF9URVhUX1NFQVJDSF9ESUNUSU9OQVJZLCAiRFJPUCBURVhUIFNFQVJDSCBESUNU SU9OQVJZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1RFWFRf U0VBUkNIX1BBUlNFUiwgIkRST1AgVEVYVCBTRUFSQ0ggUEFSU0VSIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1RFWFRfU0VBUkNIX1RFTVBMQVRFLCAiRFJPUCBU RVhUIFNFQVJDSCBURU1QTEFURSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfRFJPUF9UUkFOU0ZPUk0sICJEUk9QIFRSQU5TRk9STSIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfRFJPUF9UUklHR0VSLCAiRFJPUCBUUklHR0VSIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1RZUEUsICJEUk9QIFRZUEUiLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVVNFUl9NQVBQSU5HLCAiRFJP UCBVU0VSIE1BUFBJTkciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RS T1BfVklFVywgIkRST1AgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfRVhFQ1VURSwgIkVYRUNVVEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19FWFBMQUlOLCAiRVhQTEFJTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0ZFVENILCAiRkVUQ0giLCBmYWxzZSwgZmFsc2UsIHRydWUpCi1QR19DTURUQUcoQ01E VEFHX0dSQU5ULCAiR1JBTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0dSQU5UX1JPTEUsICJHUkFOVCBST0xFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfSU1QT1JUX0ZPUkVJR05fU0NIRU1BLCAiSU1QT1JUIEZPUkVJR04gU0NIRU1BIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19JTlNFUlQsICJJTlNFUlQiLCBm YWxzZSwgZmFsc2UsIHRydWUpCi1QR19DTURUQUcoQ01EVEFHX0xJU1RFTiwgIkxJU1RFTiIsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0xPQUQsICJMT0FEIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfTE9DS19UQUJMRSwgIkxPQ0sgVEFCTEUi LCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19NRVJHRSwgIk1FUkdFIiwg ZmFsc2UsIGZhbHNlLCB0cnVlKQotUEdfQ01EVEFHKENNRFRBR19NT1ZFLCAiTU9WRSIsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRBRyhDTURUQUdfTk9USUZZLCAiTk9USUZZIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUFJFUEFSRSwgIlBSRVBBUkUiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19QUkVQQVJFX1RSQU5TQUNUSU9OLCAi UFJFUEFSRSBUUkFOU0FDVElPTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX1JFQVNTSUdOX09XTkVELCAiUkVBU1NJR04gT1dORUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19SRUZSRVNIX01BVEVSSUFMSVpFRF9WSUVXLCAiUkVGUkVTSCBN QVRFUklBTElaRUQgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf UkVJTkRFWCwgIlJFSU5ERVgiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19SRUxFQVNFLCAiUkVMRUFTRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX1JFU0VULCAiUkVTRVQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19SRVZPS0UsICJSRVZPS0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X1JFVk9LRV9ST0xFLCAiUkVWT0tFIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19ST0xMQkFDSywgIlJPTExCQUNLIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfUk9MTEJBQ0tfUFJFUEFSRUQsICJST0xMQkFDSyBQUkVQQVJFRCIsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NBVkVQT0lOVCwgIlNBVkVQT0lO VCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFQ1VSSVRZX0xBQkVM LCAiU0VDVVJJVFkgTEFCRUwiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X1NFTEVDVCwgIlNFTEVDVCIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRBRyhDTURUQUdf U0VMRUNUX0ZPUl9LRVlfU0hBUkUsICJTRUxFQ1QgRk9SIEtFWSBTSEFSRSIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfTk9fS0VZX1VQREFURSwgIlNF TEVDVCBGT1IgTk8gS0VZIFVQREFURSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX1NFTEVDVF9GT1JfU0hBUkUsICJTRUxFQ1QgRk9SIFNIQVJFIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfU0VMRUNUX0ZPUl9VUERBVEUsICJTRUxFQ1QgRk9S IFVQREFURSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFTEVDVF9J TlRPLCAiU0VMRUNUIElOVE8iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X1NFVCwgIlNFVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFVF9D T05TVFJBSU5UUywgIlNFVCBDT05TVFJBSU5UUyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX1NIT1csICJTSE9XIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfU1RBUlRfVFJBTlNBQ1RJT04sICJTVEFSVCBUUkFOU0FDVElPTiIsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1RSVU5DQVRFX1RBQkxFLCAiVFJVTkNBVEUg VEFCTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19VTkxJU1RFTiwg IlVOTElTVEVOIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfVVBEQVRF LCAiVVBEQVRFIiwgZmFsc2UsIGZhbHNlLCB0cnVlKQotUEdfQ01EVEFHKENNRFRBR19WQUNVVU0s ICJWQUNVVU0iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorLyogc3ltYm9sIG5hbWUsIHRleHR1YWwg bmFtZSwgZXZlbnRfdHJpZ2dlcl9vaywgdGFibGVfcmV3cml0ZV9vaywgcm93Y291bnQsIGRkbHJl cGxvayAqLworUEdfQ01EVEFHKENNRFRBR19VTktOT1dOLCAiPz8/IiwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0FDQ0VTU19NRVRIT0QsICJBTFRF UiBBQ0NFU1MgTUVUSE9EIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfQUxURVJfQUdHUkVHQVRFLCAiQUxURVIgQUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9DQVNULCAiQUxURVIgQ0FTVCIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfQ09MTEFUSU9O LCAiQUxURVIgQ09MTEFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19BTFRFUl9DT05TVFJBSU5ULCAiQUxURVIgQ09OU1RSQUlOVCIsIHRydWUsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0NPTlZFUlNJT04sICJBTFRF UiBDT05WRVJTSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRB R19BTFRFUl9EQVRBQkFTRSwgIkFMVEVSIERBVEFCQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0RFRkFVTFRfUFJJVklMRUdFUywgIkFMVEVS IERFRkFVTFQgUFJJVklMRUdFUyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfQUxURVJfRE9NQUlOLCAiQUxURVIgRE9NQUlOIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl LCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9FVkVOVF9UUklHR0VSLCAiQUxURVIgRVZF TlQgVFJJR0dFUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRB R19BTFRFUl9FWFRFTlNJT04sICJBTFRFUiBFWFRFTlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2Us IHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0ZPUkVJR05fREFUQV9XUkFQUEVSLCAiQUxU RVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0FMVEVSX0ZPUkVJR05fVEFCTEUsICJBTFRFUiBGT1JFSUdOIFRBQkxFIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9GVU5DVElP TiwgIkFMVEVSIEZVTkNUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19BTFRFUl9JTkRFWCwgIkFMVEVSIElOREVYIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0 cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9MQU5HVUFHRSwgIkFMVEVSIExBTkdVQUdFIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9MQVJHRV9P QkpFQ1QsICJBTFRFUiBMQVJHRSBPQkpFQ1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19BTFRFUl9NQVRFUklBTElaRURfVklFVywgIkFMVEVSIE1BVEVSSUFM SVpFRCBWSUVXIiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FM VEVSX09QRVJBVE9SLCAiQUxURVIgT1BFUkFUT1IiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0FMVEVSX09QRVJBVE9SX0NMQVNTLCAiQUxURVIgT1BFUkFUT1Ig Q0xBU1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVS X09QRVJBVE9SX0ZBTUlMWSwgIkFMVEVSIE9QRVJBVE9SIEZBTUlMWSIsIHRydWUsIGZhbHNlLCBm YWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfUE9MSUNZLCAiQUxURVIgUE9MSUNZ IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9QUk9D RURVUkUsICJBTFRFUiBQUk9DRURVUkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0FMVEVSX1BVQkxJQ0FUSU9OLCAiQUxURVIgUFVCTElDQVRJT04iLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1JPTEUsICJBTFRF UiBST0xFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FM VEVSX1JPVVRJTkUsICJBTFRFUiBST1VUSU5FIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19BTFRFUl9SVUxFLCAiQUxURVIgUlVMRSIsIHRydWUsIGZhbHNlLCBm YWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfU0NIRU1BLCAiQUxURVIgU0NIRU1B IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TRVFV RU5DRSwgIkFMVEVSIFNFUVVFTkNFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01E VEFHKENNRFRBR19BTFRFUl9TRVJWRVIsICJBTFRFUiBTRVJWRVIiLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1NUQVRJU1RJQ1MsICJBTFRFUiBTVEFU SVNUSUNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9TVUJTQ1JJUFRJT04sICJBTFRFUiBTVUJTQ1JJUFRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TWVNURU0sICJBTFRFUiBTWVNURU0iLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVEFCTEUs ICJBTFRFUiBUQUJMRSIsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRB R19BTFRFUl9UQUJMRVNQQUNFLCAiQUxURVIgVEFCTEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9DT05GSUdVUkFU SU9OLCAiQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwg IkFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX1BBUlNFUiwgIkFMVEVSIFRFWFQg U0VBUkNIIFBBUlNFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURU QUdfQUxURVJfVEVYVF9TRUFSQ0hfVEVNUExBVEUsICJBTFRFUiBURVhUIFNFQVJDSCBURU1QTEFU RSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVFJB TlNGT1JNLCAiQUxURVIgVFJBTlNGT1JNIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BH X0NNRFRBRyhDTURUQUdfQUxURVJfVFJJR0dFUiwgIkFMVEVSIFRSSUdHRVIiLCB0cnVlLCBmYWxz ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1RZUEUsICJBTFRFUiBUWVBF IiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1VTRVJf TUFQUElORywgIkFMVEVSIFVTRVIgTUFQUElORyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkK K1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVklFVywgIkFMVEVSIFZJRVciLCB0cnVlLCBmYWxzZSwg ZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FOQUxZWkUsICJBTkFMWVpFIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0JFR0lOLCAiQkVHSU4iLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0FMTCwgIkNBTEwi LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0hFQ0tQT0lO VCwgIkNIRUNLUE9JTlQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfQ0xPU0UsICJDTE9TRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01E VEFHKENNRFRBR19DTE9TRV9DVVJTT1IsICJDTE9TRSBDVVJTT1IiLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0xPU0VfQ1VSU09SX0FMTCwgIkNMT1NFIENV UlNPUiBBTEwiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdf Q0xVU1RFUiwgIkNMVVNURVIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRB RyhDTURUQUdfQ09NTUVOVCwgIkNPTU1FTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0NPTU1JVCwgIkNPTU1JVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQorUEdfQ01EVEFHKENNRFRBR19DT01NSVRfUFJFUEFSRUQsICJDT01NSVQgUFJFUEFSRUQi LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ09QWSwgIkNP UFkiLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DT1BZX0ZS T00sICJDT1BZIEZST00iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfQ1JFQVRFX0FDQ0VTU19NRVRIT0QsICJDUkVBVEUgQUNDRVNTIE1FVEhPRCIsIHRydWUs IGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0FHR1JFR0FURSwg IkNSRUFURSBBR0dSRUdBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0NSRUFURV9DQVNULCAiQ1JFQVRFIENBU1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9DT0xMQVRJT04sICJDUkVBVEUgQ09MTEFUSU9O IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ09O U1RSQUlOVCwgIkNSRUFURSBDT05TVFJBSU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK K1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0NPTlZFUlNJT04sICJDUkVBVEUgQ09OVkVSU0lPTiIs IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0RBVEFC QVNFLCAiQ1JFQVRFIERBVEFCQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19D TURUQUcoQ01EVEFHX0NSRUFURV9ET01BSU4sICJDUkVBVEUgRE9NQUlOIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRVZFTlRfVFJJR0dFUiwgIkNS RUFURSBFVkVOVCBUUklHR0VSIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURU QUcoQ01EVEFHX0NSRUFURV9FWFRFTlNJT04sICJDUkVBVEUgRVhURU5TSU9OIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRk9SRUlHTl9EQVRBX1dS QVBQRVIsICJDUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2Us IHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9GT1JFSUdOX1RBQkxFLCAiQ1JFQVRFIEZP UkVJR04gVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0NSRUFURV9GVU5DVElPTiwgIkNSRUFURSBGVU5DVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwg dHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0lOREVYLCAiQ1JFQVRFIElOREVYIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfTEFOR1VBR0Us ICJDUkVBVEUgTEFOR1VBR0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0NSRUFURV9NQVRFUklBTElaRURfVklFVywgIkNSRUFURSBNQVRFUklBTElaRUQgVklF VyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX09Q RVJBVE9SLCAiQ1JFQVRFIE9QRVJBVE9SIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19DUkVBVEVfT1BFUkFUT1JfQ0xBU1MsICJDUkVBVEUgT1BFUkFUT1IgQ0xB U1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9P UEVSQVRPUl9GQU1JTFksICJDUkVBVEUgT1BFUkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUE9MSUNZLCAiQ1JFQVRFIFBPTElD WSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BS T0NFRFVSRSwgIkNSRUFURSBQUk9DRURVUkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0NSRUFURV9QVUJMSUNBVElPTiwgIkNSRUFURSBQVUJMSUNBVElPTiIs IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1JPTEUs ICJDUkVBVEUgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfUk9VVElORSwgIkNSRUFURSBST1VUSU5FIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1JVTEUsICJDUkVBVEUgUlVMRSIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1NDSEVNQSwg IkNSRUFURSBTQ0hFTUEiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0NSRUFURV9TRVFVRU5DRSwgIkNSRUFURSBTRVFVRU5DRSIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1NFUlZFUiwgIkNSRUFURSBTRVJWRVIi LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9TVEFU SVNUSUNTLCAiQ1JFQVRFIFNUQVRJU1RJQ1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0NSRUFURV9TVUJTQ1JJUFRJT04sICJDUkVBVEUgU1VCU0NSSVBUSU9O IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RB QkxFLCAiQ1JFQVRFIFRBQkxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfVEFCTEVfQVMsICJDUkVBVEUgVEFCTEUgQVMiLCB0cnVlLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEFCTEVTUEFDRSwgIkNSRUFU RSBUQUJMRVNQQUNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01E VEFHX0NSRUFURV9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLCAiQ1JFQVRFIFRFWFQgU0VBUkNI IENPTkZJR1VSQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0NSRUFURV9URVhUX1NFQVJDSF9ESUNUSU9OQVJZLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIERJ Q1RJT05BUlkiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NS RUFURV9URVhUX1NFQVJDSF9QQVJTRVIsICJDUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFS Q0hfVEVNUExBVEUsICJDUkVBVEUgVEVYVCBTRUFSQ0ggVEVNUExBVEUiLCB0cnVlLCBmYWxzZSwg ZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9UUkFOU0ZPUk0sICJDUkVBVEUg VFJBTlNGT1JNIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19D UkVBVEVfVFJJR0dFUiwgIkNSRUFURSBUUklHR0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVFlQRSwgIkNSRUFURSBUWVBFIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVVNFUl9NQVBQSU5HLCAi Q1JFQVRFIFVTRVIgTUFQUElORyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfQ1JFQVRFX1ZJRVcsICJDUkVBVEUgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSwg dHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfREVBTExPQ0FURSwgIkRFQUxMT0NBVEUiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfREVBTExPQ0FURV9BTEwsICJE RUFMTE9DQVRFIEFMTCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19ERUNMQVJFX0NVUlNPUiwgIkRFQ0xBUkUgQ1VSU09SIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RFTEVURSwgIkRFTEVURSIsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RJU0NBUkQsICJESVNDQVJEIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfQUxMLCAi RElTQ0FSRCBBTEwiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURU QUdfRElTQ0FSRF9QTEFOUywgIkRJU0NBUkQgUExBTlMiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRElTQ0FSRF9TRVFVRU5DRVMsICJESVNDQVJEIFNFUVVF TkNFUyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ESVND QVJEX1RFTVAsICJESVNDQVJEIFRFTVAiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BH X0NNRFRBRyhDTURUQUdfRE8sICJETyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdf Q01EVEFHKENNRFRBR19EUk9QX0FDQ0VTU19NRVRIT0QsICJEUk9QIEFDQ0VTUyBNRVRIT0QiLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfQUdHUkVHQVRF LCAiRFJPUCBBR0dSRUdBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0RST1BfQ0FTVCwgIkRST1AgQ0FTVCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkK K1BHX0NNRFRBRyhDTURUQUdfRFJPUF9DT0xMQVRJT04sICJEUk9QIENPTExBVElPTiIsIHRydWUs IGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9DT05TVFJBSU5ULCAi RFJPUCBDT05TVFJBSU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfRFJPUF9DT05WRVJTSU9OLCAiRFJPUCBDT05WRVJTSU9OIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0RBVEFCQVNFLCAiRFJPUCBEQVRBQkFT RSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0RP TUFJTiwgIkRST1AgRE9NQUlOIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19EUk9QX0VWRU5UX1RSSUdHRVIsICJEUk9QIEVWRU5UIFRSSUdHRVIiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9FWFRFTlNJT04sICJE Uk9QIEVYVEVOU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURU QUdfRFJPUF9GT1JFSUdOX0RBVEFfV1JBUFBFUiwgIkRST1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIi LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfRk9SRUlH Tl9UQUJMRSwgIkRST1AgRk9SRUlHTiBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkK K1BHX0NNRFRBRyhDTURUQUdfRFJPUF9GVU5DVElPTiwgIkRST1AgRlVOQ1RJT04iLCB0cnVlLCBm YWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfSU5ERVgsICJEUk9QIElO REVYIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0xB TkdVQUdFLCAiRFJPUCBMQU5HVUFHRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NN RFRBRyhDTURUQUdfRFJPUF9NQVRFUklBTElaRURfVklFVywgIkRST1AgTUFURVJJQUxJWkVEIFZJ RVciLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfT1BF UkFUT1IsICJEUk9QIE9QRVJBVE9SIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01E VEFHKENNRFRBR19EUk9QX09QRVJBVE9SX0NMQVNTLCAiRFJPUCBPUEVSQVRPUiBDTEFTUyIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9PUEVSQVRPUl9G QU1JTFksICJEUk9QIE9QRVJBVE9SIEZBTUlMWSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkK K1BHX0NNRFRBRyhDTURUQUdfRFJPUF9PV05FRCwgIkRST1AgT1dORUQiLCB0cnVlLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1BPTElDWSwgIkRST1AgUE9MSUNZ IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1BST0NF RFVSRSwgIkRST1AgUFJPQ0VEVVJFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01E VEFHKENNRFRBR19EUk9QX1BVQkxJQ0FUSU9OLCAiRFJPUCBQVUJMSUNBVElPTiIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9ST0xFLCAiRFJPUCBST0xF IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RST1BfUk9V VElORSwgIkRST1AgUk9VVElORSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfRFJPUF9SVUxFLCAiRFJPUCBSVUxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1NDSEVNQSwgIkRST1AgU0NIRU1BIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1NFUVVFTkNFLCAiRFJPUCBT RVFVRU5DRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJP UF9TRVJWRVIsICJEUk9QIFNFUlZFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NN RFRBRyhDTURUQUdfRFJPUF9TVEFUSVNUSUNTLCAiRFJPUCBTVEFUSVNUSUNTIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1NVQlNDUklQVElPTiwgIkRS T1AgU1VCU0NSSVBUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfRFJPUF9UQUJMRSwgIkRST1AgVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0RST1BfVEFCTEVTUEFDRSwgIkRST1AgVEFCTEVTUEFDRSIsIGZh bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1RFWFRfU0VB UkNIX0NPTkZJR1VSQVRJT04sICJEUk9QIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04iLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hf RElDVElPTkFSWSwgIkRST1AgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSIsIHRydWUsIGZhbHNlLCBm YWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9QQVJTRVIsICJE Uk9QIFRFWFQgU0VBUkNIIFBBUlNFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NN RFRBRyhDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9URU1QTEFURSwgIkRST1AgVEVYVCBTRUFSQ0gg VEVNUExBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RS T1BfVFJBTlNGT1JNLCAiRFJPUCBUUkFOU0ZPUk0iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0RST1BfVFJJR0dFUiwgIkRST1AgVFJJR0dFUiIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9UWVBFLCAiRFJPUCBUWVBF IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1VTRVJf TUFQUElORywgIkRST1AgVVNFUiBNQVBQSU5HIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19EUk9QX1ZJRVcsICJEUk9QIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0VYRUNVVEUsICJFWEVDVVRFIiwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0VYUExBSU4sICJFWFBMQUlOIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0ZFVENILCAiRkVU Q0giLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19HUkFOVCwg IkdSQU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19HUkFO VF9ST0xFLCAiR1JBTlQgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01E VEFHKENNRFRBR19JTVBPUlRfRk9SRUlHTl9TQ0hFTUEsICJJTVBPUlQgRk9SRUlHTiBTQ0hFTUEi LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0lOU0VSVCwgIklO U0VSVCIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0xJU1RF TiwgIkxJU1RFTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRB R19MT0FELCAiTE9BRCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19MT0NLX1RBQkxFLCAiTE9DSyBUQUJMRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQorUEdfQ01EVEFHKENNRFRBR19NRVJHRSwgIk1FUkdFIiwgZmFsc2UsIGZhbHNlLCB0cnVlLCBm YWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfTU9WRSwgIk1PVkUiLCBmYWxzZSwgZmFsc2UsIHRydWUs IGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19OT1RJRlksICJOT1RJRlkiLCBmYWxzZSwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfUFJFUEFSRSwgIlBSRVBBUkUiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfUFJFUEFSRV9UUkFOU0FD VElPTiwgIlBSRVBBUkUgVFJBTlNBQ1RJT04iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK K1BHX0NNRFRBRyhDTURUQUdfUkVBU1NJR05fT1dORUQsICJSRUFTU0lHTiBPV05FRCIsIGZhbHNl LCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19SRUZSRVNIX01BVEVSSUFM SVpFRF9WSUVXLCAiUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfUkVJTkRFWCwgIlJFSU5ERVgiLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfUkVMRUFTRSwgIlJFTEVBU0UiLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfUkVTRVQsICJSRVNF VCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19SRVZPS0Us ICJSRVZPS0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX1JF Vk9LRV9ST0xFLCAiUkVWT0tFIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BH X0NNRFRBRyhDTURUQUdfUk9MTEJBQ0ssICJST0xMQkFDSyIsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ST0xMQkFDS19QUkVQQVJFRCwgIlJPTExCQUNLIFBS RVBBUkVEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NB VkVQT0lOVCwgIlNBVkVQT0lOVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01E VEFHKENNRFRBR19TRUNVUklUWV9MQUJFTCwgIlNFQ1VSSVRZIExBQkVMIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19TRUxFQ1QsICJTRUxFQ1QiLCBmYWxzZSwg ZmFsc2UsIHRydWUsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfRk9SX0tFWV9TSEFS RSwgIlNFTEVDVCBGT1IgS0VZIFNIQVJFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQ R19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfTk9fS0VZX1VQREFURSwgIlNFTEVDVCBGT1IgTk8g S0VZIFVQREFURSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRB R19TRUxFQ1RfRk9SX1NIQVJFLCAiU0VMRUNUIEZPUiBTSEFSRSIsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfRk9SX1VQREFURSwgIlNFTEVDVCBG T1IgVVBEQVRFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFH X1NFTEVDVF9JTlRPLCAiU0VMRUNUIElOVE8iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19TRVQsICJTRVQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK K1BHX0NNRFRBRyhDTURUQUdfU0VUX0NPTlNUUkFJTlRTLCAiU0VUIENPTlNUUkFJTlRTIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NIT1csICJTSE9XIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NUQVJUX1RSQU5T QUNUSU9OLCAiU1RBUlQgVFJBTlNBQ1RJT04iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK K1BHX0NNRFRBRyhDTURUQUdfVFJVTkNBVEVfVEFCTEUsICJUUlVOQ0FURSBUQUJMRSIsIGZhbHNl LCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19VTkxJU1RFTiwgIlVOTElT VEVOIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1VQREFU RSwgIlVQREFURSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFH X1ZBQ1VVTSwgIlZBQ1VVTSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNh Y2hlLmgKaW5kZXggZDM0MDAyNi4uOTFkNGJkZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRp bHMvZXZ0Y2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCkBAIC0yMiw3 ICsyMiw4IEBAIHR5cGVkZWYgZW51bQogCUVWVF9ERExDb21tYW5kU3RhcnQsCiAJRVZUX0RETENv bW1hbmRFbmQsCiAJRVZUX1NRTERyb3AsCi0JRVZUX1RhYmxlUmV3cml0ZQorCUVWVF9UYWJsZVJl d3JpdGUsCisJRVZUX1RhYmxlSW5pdFdyaXRlCiB9IEV2ZW50VHJpZ2dlckV2ZW50OwogCiB0eXBl ZGVmIHN0cnVjdApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQKaW5kZXggOWVl YWExYy4uOGU2ZmZhOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0CkBA IC0yMCw2ICsyMCwxMyBAQCBOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQUxURVIgVEFCTEUg cHVibGljLmN0bHQxIEFMVEVSIENPTFVNTiBhIFNFVCBTVE9SQUdFCiBBTFRFUiBUQUJMRSBjdGx0 MSBBTFRFUiBDT0xVTU4gYiBTRVQgU1RPUkFHRSBFWFRFUk5BTDsKIE5PVElDRTogIGRlcGFyc2Vk IGpzb246IHsiZm10IjogIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6 LCB9cyIsICJvYmp0eXBlIjogIlRBQkxFIiwgInN1YmNtZHMiOiBbeyJmbXQiOiAiQUxURVIgQ09M VU1OICV7Y29sdW1ufUkgU0VUIFNUT1JBR0UgJXtzdG9yYWdlfXMiLCAidHlwZSI6ICJzZXQgc3Rv cmFnZSIsICJjb2x1bW4iOiAiYiIsICJzdG9yYWdlIjogImV4dGVybmFsIn1dLCAiaWRlbnRpdHki OiB7Im9iam5hbWUiOiAiY3RsdDEiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifX0KIE5PVElDRTog IHJlLWZvcm1lZCBjb21tYW5kOiBBTFRFUiBUQUJMRSBwdWJsaWMuY3RsdDEgQUxURVIgQ09MVU1O IGIgU0VUIFNUT1JBR0UgZXh0ZXJuYWwKK0NSRUFURSBUQUJMRSBjdGx0MV9saWtlIChMSUtFIGN0 bHQxIElOQ0xVRElORyBBTEwpOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JF QVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQg KCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25f Y29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNl fXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAiY3RsdDFfbGlrZSIsICJzY2hlbWFuYW1lIjog InB1YmxpYyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQp IiwgInBhcmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10 IjogIk9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9u X2NvbW1pdF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0Ug JXt0YWJsZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAi cGVyc2lzdGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50 IjogZmFsc2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5p dGlvbn1zIiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19t ZXRob2QiOiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFs c2UsICJhY2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9l bGVtZW50cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3Rv cmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1 bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImEiLCAidHlwZSI6ICJjb2x1bW4i LCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUi OiAidGV4dCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6 ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9u IjogeyJmbXQiOiAiQ09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1 bHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJtYWluIiwg ImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9 SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVy YXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBm YWxzZX19LCB7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFn ZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9 cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImIiLCAidHlwZSI6ICJjb2x1bW4iLCAi Y29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAi dGV4dCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJE RUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjog eyJmbXQiOiAiQ09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQi LCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRlcm5hbCIs ICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9k fUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5l cmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50Ijog ZmFsc2V9fSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsICJu YW1lIjogImN0bHQxX2FfY2hlY2siLCAidHlwZSI6ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAi Y2hlY2siLCAiZGVmaW5pdGlvbiI6ICJDSEVDSyAoKHBnX2NhdGFsb2cubGVuZ3RoKGEpIE9QRVJB VE9SKHBnX2NhdGFsb2cuPikgMikpIn0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtk ZWZpbml0aW9ufXMiLCAibmFtZSI6ICJjdGx0MV9saWtlX3BrZXkiLCAidHlwZSI6ICJjb25zdHJh aW50IiwgImNvbnR5cGUiOiAicHJpbWFyeSBrZXkiLCAiZGVmaW5pdGlvbiI6ICJQUklNQVJZIEtF WSAoYSkifV19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFICBUQUJMRSAgcHVi bGljLmN0bHQxX2xpa2UgKGEgcGdfY2F0YWxvZy50ZXh0IFNUT1JBR0UgbWFpbiAgQ09MTEFURSBw Z19jYXRhbG9nLiJkZWZhdWx0IiAgICwgYiBwZ19jYXRhbG9nLnRleHQgU1RPUkFHRSBleHRlcm5h bCAgQ09MTEFURSBwZ19jYXRhbG9nLiJkZWZhdWx0IiAgICwgQ09OU1RSQUlOVCBjdGx0MV9hX2No ZWNrIENIRUNLICgocGdfY2F0YWxvZy5sZW5ndGgoYSkgT1BFUkFUT1IocGdfY2F0YWxvZy4+KSAy KSksIENPTlNUUkFJTlQgY3RsdDFfbGlrZV9wa2V5IFBSSU1BUlkgS0VZIChhKSkgICAgICAKK05P VElDRTogIGRlcGFyc2VkIGpzb246IDxOVUxMPgorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6 IDxOVUxMPgorTk9USUNFOiAgZGVwYXJzZWQganNvbjogPE5VTEw+CitOT1RJQ0U6ICByZS1mb3Jt ZWQgY29tbWFuZDogPE5VTEw+CiAtLSBUZXN0IGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgaXMgaGFu ZGxlZCBpbiBhIGZvbGxvd2luZyBBTFRFUiBUQUJMRSBBREQgQ09OU1RSQUlOVCBGT1JFSUdOIEtF WSBSRUZFUkVOQ0VTIHN1YmNvbW1hbmQKIENSRUFURSBUQUJMRSBwcm9kdWN0IChpZCBpbnQgUFJJ TUFSWSBLRVksIG5hbWUgdGV4dCk7CiBOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJD UkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9 RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtv bl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1 c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJwcm9kdWN0IiwgInNjaGVtYW5hbWUiOiAi cHVibGljIn0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCki LCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQi OiAiT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25f Y29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAl e3RhYmxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJw ZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQi OiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0 aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21l dGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxz ZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2Vs ZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9y YWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVs dH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4i LCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUi OiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6 ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9u IjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJw bGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25f bWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0s ICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVz ZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2Nv bHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtk ZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJuYW1lIiwgInR5cGUiOiAi Y29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5 cGVuYW1lIjogInRleHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0Ijog eyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNv bGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6 ICJkZWZhdWx0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAi ZXh0ZW5kZWQiLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNz aW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51 bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAi cHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0 aW9ufXMiLCAibmFtZSI6ICJwcm9kdWN0X3BrZXkiLCAidHlwZSI6ICJjb25zdHJhaW50IiwgImNv bnR5cGUiOiAicHJpbWFyeSBrZXkiLCAiZGVmaW5pdGlvbiI6ICJQUklNQVJZIEtFWSAoaWQpIn1d fQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv c3FsL2NyZWF0ZV90YWJsZS5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbAppbmRleCA5OTdkMmY1Li4xYzVmMGMyIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3Jl YXRlX3RhYmxlLnNxbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbApAQCAtOSw2ICs5LDcgQEAgQ1JFQVRFIFVOSVFVRSBJ TkRFWCBjb3ZlcmluZ19pbmRleCBvbiBzaW1wbGVfdGFibGUgKGlkKSBJTkNMVURFIChuYW1lKTsK IENSRUFURSBUQUJMRSBjdGx0MSAoYSB0ZXh0IENIRUNLIChsZW5ndGgoYSkgPiAyKSBQUklNQVJZ IEtFWSwgYiB0ZXh0KTsKIEFMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENPTFVNTiBhIFNFVCBTVE9S QUdFIE1BSU47CiBBTFRFUiBUQUJMRSBjdGx0MSBBTFRFUiBDT0xVTU4gYiBTRVQgU1RPUkFHRSBF WFRFUk5BTDsKK0NSRUFURSBUQUJMRSBjdGx0MV9saWtlIChMSUtFIGN0bHQxIElOQ0xVRElORyBB TEwpOwogCiAtLSBUZXN0IGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgaXMgaGFuZGxlZCBpbiBhIGZv bGxvd2luZyBBTFRFUiBUQUJMRSBBREQgQ09OU1RSQUlOVCBGT1JFSUdOIEtFWSBSRUZFUkVOQ0VT IHN1YmNvbW1hbmQKIENSRUFURSBUQUJMRSBwcm9kdWN0IChpZCBpbnQgUFJJTUFSWSBLRVksIG5h bWUgdGV4dCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dAppbmRleCA4ZmM2MmNlLi5kOGFm ZmFlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKQEAgLTYxOTQsOSArNjE5NCw5IEBA IExpc3Qgb2Ygc2NoZW1hcwogKDAgcm93cykKIAogXGRScCAibm8uc3VjaC5wdWJsaWNhdGlvbiIK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gTmFt ZSB8IE93bmVyIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgTmFt ZSB8IE93bmVyIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tKy0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KICgwIHJvd3MpCiAKIFxkUnMgIm5v LnN1Y2guc3Vic2NyaXB0aW9uIgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9wdWJsaWNhdGlvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9u Lm91dAppbmRleCA0MjdmODdlLi5iMjMxN2U3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3B1YmxpY2F0aW9uLm91dApAQCAtMzAsMjAgKzMwLDIwIEBAIEVSUk9SOiAgY29uZmxpY3Rpbmcg b3IgcmVkdW5kYW50IG9wdGlvbnMKIExJTkUgMTogLi4udWJfeHh4IFdJVEggKHB1Ymxpc2hfdmlh X3BhcnRpdGlvbl9yb290ID0gJ3RydWUnLCBwdWJsaXNoX3ZpLi4uCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogXGRScAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGlj YXRpb25zCi0gICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwg ZgotIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCBmICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlz dCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQorIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8 IGYgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKICgyIHJvd3MpCiAK IEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVmYXVsdCBTRVQgKHB1Ymxpc2ggPSAnaW5zZXJ0 LCB1cGRhdGUsIGRlbGV0ZScpOwogXGRScAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAgICAgIE5hbWUgICAgICAg IHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cGliX2luc190cnVu Y3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgotIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgICAg TmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxs IERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHRlc3RwaWJfaW5zX3Ry dW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBm CisgdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgICB8IGYKICgyIHJvd3MpCiAKIC0tLSBhZGRpbmcgdGFibGVzCkBAIC04Nywx MCArODcsMTAgQEAgUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIC0tIHNob3VsZCBiZSBhYmxl IHRvIGFkZCBzY2hlbWEgdG8gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJw KyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50 ZXN0cHViX3RibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtOTksMjAgKzk5LDIwIEBAIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBzaG91bGQgYmUgYWJsZSB0byBkcm9wIHNjaGVtYSBmcm9t ICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRh YmxlIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFi bGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBB bGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKIAog LS0gc2hvdWxkIGJlIGFibGUgdG8gc2V0IHNjaGVtYSB0byAnRk9SIFRBQkxFJyBwdWJsaWNhdGlv bgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBTRVQgVEFCTEVTIElOIFNDSEVN QSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0IgogCkBAIC0xMjMsMTAgKzEyMywxMCBAQCBD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEg cHViX3Rlc3Q7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYSBGT1Ig VEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdCwgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwog UkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfZm9yX3RibF9zY2hlbWEK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JfdGJs X3NjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3JfdGJsX3NjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3Br IgogVGFibGVzIGZyb20gc2NoZW1hczoKQEAgLTEzNSwxMCArMTM1LDEwIEBAIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAtLSBzaG91bGQgYmUgYWJsZSB0byBhZGQgYSB0YWJsZSBvZiB0aGUgc2FtZSBz Y2hlbWEgdG8gdGhlIHNjaGVtYSBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb3JzY2hlbWEgQUREIFRBQkxFIHB1Yl90ZXN0LnRlc3RwdWJfbm9wazsKIFxkUnArIHRlc3Rw dWJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3Rw dWJfbm9wayIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC0xNDcsMTAgKzE0NywxMCBAQCBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUgdG8gZHJvcCB0aGUgdGFibGUKIEFM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIERST1AgVEFCTEUgcHViX3Rlc3QudGVz dHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0IgogCkBAIC0xNjEsMTAgKzE2MSwxMCBAQCBF UlJPUjogIHJlbGF0aW9uICJ0ZXN0cHViX25vcGsiIGlzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWNh dGlvbgogLS0gc2hvdWxkIGJlIGFibGUgdG8gc2V0IHRhYmxlIHRvIHNjaGVtYSBwdWJsaWNhdGlv bgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgU0VUIFRBQkxFIHB1Yl90ZXN0 LnRlc3RwdWJfbm9wazsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKIApAQCAtMTg2LDEwICsxODYsMTAg QEAgUHVibGljYXRpb25zOgogICAgICJ0ZXN0cHViX2ZvcmFsbHRhYmxlcyIKIAogXGRScCsgdGVz dHB1Yl9mb3JhbGx0YWJsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9yYWxsdGFibGVzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXMKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IHQgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCiAoMSByb3cpCiAKIERST1AgVEFC TEUgdGVzdHB1Yl90YmwyOwpAQCAtMjAxLDE5ICsyMDEsMTkgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9O IHRlc3RwdWIzIEZPUiBUQUJMRSB0ZXN0cHViX3RibDM7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVz dHB1YjQgRk9SIFRBQkxFIE9OTFkgdGVzdHB1Yl90YmwzOwogUkVTRVQgY2xpZW50X21pbl9tZXNz YWdlczsKIFxkUnArIHRlc3RwdWIzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1 Yl90YmwzIgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzYSIKIAogXGRScCsgdGVzdHB1YjQKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0Ci0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJs ZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAg ICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDMiCiAKQEAgLTIzNCwxMCArMjM0 LDEwIEBAIFVQREFURSB0ZXN0cHViX3BhcnRlZDEgU0VUIGEgPSAxOwogLS0gb25seSBwYXJlbnQg aXMgbGlzdGVkIGFzIGJlaW5nIGluIHB1YmxpY2F0aW9uLCBub3QgdGhlIHBhcnRpdGlvbgogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JwYXJ0ZWQgQUREIFRBQkxFIHRlc3RwdWJfcGFydGVk OwogXGRScCsgdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAi cHVibGljLnRlc3RwdWJfcGFydGVkIgogCkBAIC0yNTIsMTAgKzI1MiwxMCBAQCBBTFRFUiBUQUJM RSB0ZXN0cHViX3BhcnRlZCBERVRBQ0ggUEFSVElUSU9OIHRlc3RwdWJfcGFydGVkMTsKIFVQREFU RSB0ZXN0cHViX3BhcnRlZDEgU0VUIGEgPSAxOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9m b3JwYXJ0ZWQgU0VUIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOwogXGRScCsg dGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IHQKIFRhYmxlczoKICAgICAicHVibGljLnRl c3RwdWJfcGFydGVkIgogCkBAIC0yODQsMTAgKzI4NCwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNz YWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjUgRk9SIFRBQkxFIHRl c3RwdWJfcmZfdGJsMSwgdGVzdHB1Yl9yZl90YmwyIFdIRVJFIChjIDw+ICd0ZXN0JyBBTkQgZCA8 IDUpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2Vz OwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgfCBmICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3Jm X3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDIiIFdIRVJFICgoYyA8PiAndGVzdCc6 OnRleHQpIEFORCAoZCA8IDUpKQpAQCAtMzAwLDEwICszMDAsMTAgQEAgVGFibGVzOgogCiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViNSBBREQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChl ID4gMTAwMCBBTkQgZSA8IDIwMDApOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCiBUYWJsZXM6CiAg ICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDIi IFdIRVJFICgoYyA8PiAndGVzdCc6OnRleHQpIEFORCAoZCA8IDUpKQpAQCAtMzE5LDEwICszMTks MTAgQEAgUHVibGljYXRpb25zOgogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBEUk9QIFRB QkxFIHRlc3RwdWJfcmZfdGJsMjsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwzIiBX SEVSRSAoKGUgPiAxMDAwKSBBTkQgKGUgPCAyMDAwKSkKQEAgLTMzMCwxMCArMzMwLDEwIEBAIFRh YmxlczoKIC0tIHJlbW92ZSB0ZXN0cHViX3JmX3RibDEgYW5kIGFkZCB0ZXN0cHViX3JmX3RibDMg YWdhaW4gKGFub3RoZXIgV0hFUkUgZXhwcmVzc2lvbikKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPiAzMDAgQU5EIGUgPCA1MDAp OwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgfCBmICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3Jm X3RibDMiIFdIRVJFICgoZSA+IDMwMCkgQU5EIChlIDwgNTAwKSkKIApAQCAtMzY2LDEwICszNjYs MTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FU SU9OIHRlc3RwdWJfc3ludGF4MSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCBPTkxZIHRlc3Rw dWJfcmZfdGJsMyBXSEVSRSAoZSA8IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJF U0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX3N5bnRheDEKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgxCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJs ZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAg ICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAg fCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50 ZXN0cHViX3JmX3RibDMiIFdIRVJFIChlIDwgOTk5KQpAQCAtMzc5LDEwICszNzksMTAgQEAgU0VU IGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfc3ludGF4MiBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3NjaGVtYTEu dGVzdHB1Yl9yZl90Ymw1IFdIRVJFIChoIDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcp OwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4MgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDIK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3lu dGF4MgorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8 IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYg ICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAidGVz dHB1Yl9yZl9zY2hlbWExLnRlc3RwdWJfcmZfdGJsNSIgV0hFUkUgKGggPCA5OTkpCkBAIC00OTcs MTAgKzQ5NywxMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjYgRk9SIFRBQkxFUyBJTiBT Q0hFTUEgdGVzdHB1Yl9yZl9zY2hlbWEyOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VU IFRBQkxFUyBJTiBTQ0hFTUEgdGVzdHB1Yl9yZl9zY2hlbWEyLCBUQUJMRSB0ZXN0cHViX3JmX3Nj aGVtYTIudGVzdHB1Yl9yZl90Ymw2IFdIRVJFIChpIDwgOTkpOwogUkVTRVQgY2xpZW50X21pbl9t ZXNzYWdlczsKIFxkUnArIHRlc3RwdWI2Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNgotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJ0ZXN0cHViX3Jm X3NjaGVtYTIudGVzdHB1Yl9yZl90Ymw2IiBXSEVSRSAoaSA8IDk5KQogVGFibGVzIGZyb20gc2No ZW1hczoKQEAgLTcxNCwxMCArNzE0LDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3Rh YmxlX2lucyBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdHJ1bmNhdGUnKTsKIFJFU0VUIGNsaWVu dF9taW5fbWVzc2FnZXM7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX3RhYmxlX2lucyBBREQg VEFCTEUgdGVzdHB1Yl90Ymw1IChhKTsJCS0tIG9rCiBcZFJwKyB0ZXN0cHViX3RhYmxlX2lucwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfdGFibGVf aW5zCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf dGFibGVfaW5zCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBE RExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwg dCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90Ymw1IiAoYSkKIApA QCAtODkxLDEwICs4OTEsMTAgQEAgQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVy cyAoYSBpbnQsIGIgaW50LCBjIGludCwgUFJJTUFSWSBLRVkgKGEsYykpOwogQUxURVIgVEFCTEUg dGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVz dHB1Yl90YmxfYm90aF9maWx0ZXJzX3BrZXk7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2Jv dGhfZmlsdGVycyBBREQgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChhLGMpIFdIRVJF IChjICE9IDEpOwogXGRScCsgdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJzCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBE RExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMiIChhLCBjKSBX SEVSRSAoYyA8PiAxKQogCkBAIC0xMDk5LDEwICsxMDk5LDEwIEBAIEVSUk9SOiAgcmVsYXRpb24g InRlc3RwdWJfdGJsMSIgaXMgYWxyZWFkeSBtZW1iZXIgb2YgcHVibGljYXRpb24gInRlc3RwdWJf Zm9ydGJsCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YmwgRk9SIFRBQkxFIHRlc3Rw dWJfdGJsMTsKIEVSUk9SOiAgcHVibGljYXRpb24gInRlc3RwdWJfZm9ydGJsIiBhbHJlYWR5IGV4 aXN0cwogXGRScCsgdGVzdHB1Yl9mb3J0YmwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGJsCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YmwKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1 Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKQEAgLTExNDAs MTAgKzExNDAsMTAgQEAgUHVibGljYXRpb25zOgogICAgICJ0ZXN0cHViX2ZvcnRibCIKIAogXGRS cCsgdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50 ZXN0cHViX25vcGsiCiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCkBAIC0xMjIxLDEwICsxMjIx LDEwIEBAIFJFVk9LRSBDUkVBVEUgT04gREFUQUJBU0UgcmVncmVzc2lvbiBGUk9NIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlcjI7CiBEUk9QIFRBQkxFIHRlc3RwdWJfcGFydGVkOwogRFJPUCBUQUJM RSB0ZXN0cHViX3RibDE7CiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCiAoMSBy b3cpCiAKIC0tIGZhaWwgLSBtdXN0IGJlIG93bmVyIG9mIHB1YmxpY2F0aW9uCkBAIC0xMjM0LDIw ICsxMjM0LDIwIEBAIEVSUk9SOiAgbXVzdCBiZSBvd25lciBvZiBwdWJsaWNhdGlvbiB0ZXN0cHVi X2RlZmF1bHQKIFJFU0VUIFJPTEU7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2RlZmF1bHQg UkVOQU1FIFRPIHRlc3RwdWJfZm9vOwogXGRScCB0ZXN0cHViX2ZvbwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAgTmFt ZSAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHB1Yl9mb28gfCByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgTmFtZSAgICAg fCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJs ZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCisgdGVzdHB1Yl9mb28gfCByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSByZW5hbWUgYmFj ayB0byBrZWVwIHRoZSByZXN0IHNpbXBsZQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb28g UkVOQU1FIFRPIHRlc3RwdWJfZGVmYXVsdDsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVm YXVsdCBPV05FUiBUTyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogXGRScCB0ZXN0cHViX2Rl ZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qg b2YgcHVibGljYXRpb25zCi0gICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHRlc3RwdWJfZGVmYXVsdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl cjIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCisgdGVzdHB1Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyMiB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIGFkZGluZyBzY2hl bWFzIGFuZCB0YWJsZXMKQEAgLTEyNjMsMTkgKzEyNjMsMTkgQEAgQ1JFQVRFIFRBQkxFICJDVVJS RU5UX1NDSEVNQSIuIkNVUlJFTlRfU0NIRU1BIihpZCBpbnQpOwogU0VUIGNsaWVudF9taW5fbWVz c2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBG T1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3Jz Y2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFs bCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgog CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjJfZm9yc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NI RU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QyLCBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0cHViMl9mb3Jz Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi Ml9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rl c3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMjg5LDQ0ICsxMjg5LDQ0IEBAIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViNl9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgIkNVUlJFTlRf U0NIRU1BIiwgQ1VSCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBGT1IgVEFC TEUgIkNVUlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hFTUEiOwogUkVTRVQgY2xpZW50X21pbl9t ZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWI0X2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0X2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViNF9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg QWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1ND SEVNQSIKIAogXGRScCsgdGVzdHB1YjVfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjVfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogICAgICJwdWJsaWMiCiAKIFxk UnArIHRlc3RwdWI2X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hl bWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIKICAgICAicHVibGljIgogCiBcZFJwKyB0ZXN0cHVi X2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BLkNV UlJFTlRfU0NIRU1BIgogCkBAIC0xMzYwLDEwICsxMzYwLDEwIEBAIEVSUk9SOiAgc2NoZW1hICJ0 ZXN0cHViX3ZpZXciIGRvZXMgbm90IGV4aXN0CiAtLSBkcm9wcGluZyB0aGUgc2NoZW1hIHNob3Vs ZCByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRpb24KIERST1AgU0NIRU1BIHB1Yl90ZXN0 MzsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJv bSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzNzEsMjAg KzEzNzEsMjAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHJlbmFtaW5nIHRoZSBzY2hlbWEg c2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJsaWNhdGlvbgogQUxURVIgU0NIRU1BIHB1 Yl90ZXN0MSBSRU5BTUUgdG8gcHViX3Rlc3QxX3JlbmFtZWQ7CiBcZFJwKyB0ZXN0cHViMl9mb3Jz Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi Ml9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rl c3QxX3JlbmFtZWQiCiAgICAgInB1Yl90ZXN0MiIKIAogQUxURVIgU0NIRU1BIHB1Yl90ZXN0MV9y ZW5hbWVkIFJFTkFNRSB0byBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBE RExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAg ICJwdWJfdGVzdDIiCkBAIC0xMzkyLDEwICsxMzkyLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBhZGQgc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViMV9mb3JzY2hlbWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QyOwogXGRScCsgdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAg ICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQwNCwxMCArMTQwNCwxMCBAQCBU YWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1h IEFERCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVt YSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJf dGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0MTYsMTAgKzE0MTYsMTAgQEAgVGFibGVzIGZy b20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgVEFC TEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBFUlJPUjogIHNjaGVtYSAicHViX3Rlc3QxIiBpcyBh bHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1YjFfZm9yc2NoZW1hIgogXGRScCsg dGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQyNywxMCArMTQyNywxMCBA QCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIgcHVibGljYXRpb24gZHJvcCBzY2hlbWEK IEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hF TUEgcHViX3Rlc3QyOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERE THMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTQzOCwxMCArMTQz OCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFf Zm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBFUlJPUjogIHRhYmxl cyBmcm9tIHNjaGVtYSAicHViX3Rlc3QyIiBhcmUgbm90IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9u CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNDQ5LDI5ICsxNDQ5LDI5IEBAIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJP UCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAi bm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNj aGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIx X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVz dDEiCiAKIC0tIGRyb3AgYWxsIHNjaGVtYXMKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2Zv cnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjFf Zm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gYWx0ZXIgcHVibGljYXRp b24gc2V0IG11bHRpcGxlIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2No ZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QyOwogXGRScCsgdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAg ICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQ4MCwxMCArMTQ4MCwxMCBAQCBU YWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1h IFNFVCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVt YSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJf dGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0OTIsMTAgKzE0OTIsMTAgQEAgVGFibGVzIGZy b20gc2NoZW1hczoKIC0tIHJlbW92aW5nIHRoZSBkdXBsaWNhdGUgc2NoZW1hcwogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0 MSwgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERE THMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTU3NCwxOCArMTU3 NCwxOCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxk UnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiAoMSByb3cpCiAKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWIzX2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVNQSBwdWJf dGVzdDE7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVz IGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTk1LDIwICsxNTk1LDIwIEBA IENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZSBGT1IgVEFCTEVT IElOIFNDSEVNQSBwdWJfdGVzdDEsIFRBCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0 YWJsZV9mb3JzY2hlbWEgRk9SIFRBQkxFIHB1Yl90ZXN0Mi50YmwxLCBUQUJMRVMgSU4gU0NIRU1B IHB1Yl90ZXN0MTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX2Zv cnNjaGVtYV9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAi cHViX3Rlc3QyLnRibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAK IFxkUnArIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYQotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUg RERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgogVGFibGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBs IGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmM0ZmYyCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbApAQCAtMCwwICsx LDQ2NSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisjIFJlZ3Jlc3Npb24gdGVzdHMgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gb2Yg RERMcworIwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7 CisKK215ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygn cHVibGlzaGVyJyk7Ciskbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAn bG9naWNhbCcpOworJG5vZGVfcHVibGlzaGVyLT5zdGFydDsKKworbXkgJG5vZGVfc3Vic2NyaWJl ciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJlcicpOworJG5vZGVf c3Vic2NyaWJlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5zdGFydDsKKworbXkgJGRkbCA9ICJDUkVBVEUgVEFCTEUgdGVzdF9yZXAoaWQg aW50IHByaW1hcnkga2V5LCBuYW1lIHZhcmNoYXIsIHZhbHVlIGludGVnZXIpOyI7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDEsICdk YXRhMScsIDEpOyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICRk ZGwpOworCitteSAkcHVibGlzaGVyX2Nvbm5zdHIgPSAkbm9kZV9wdWJsaXNoZXItPmNvbm5zdHIg LiAnIGRibmFtZT1wb3N0Z3Jlcyc7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJDUkVBVEUgUFVCTElDQVRJT04gbXlwdWIgRk9SIEFMTCBUQUJMRVMgd2l0aCAocHVi bGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlJywgZGRsID0gJ2FsbCcpOyIpOworJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04g bXlzdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElPTiBteXB1Yjsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKworIyBNYWtl IHN1cmUgd2UgaGF2ZSBmdWxseSBzeW5jaHJvbml6ZWQgdGhlIHRhYmxlLgorIyBUaGlzIHByZXZl bnRzIEFMVEVSIFRBQkxFIGNvbW1hbmQgYmVsb3cgZnJvbSBiZWluZyBleGVjdXRlZCBkdXJpbmcg dGFibGUgc3luY2hyb25pemF0aW9uLgorJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRp bCgncG9zdGdyZXMnLAorICAgIlNFTEVDVCBDT1VOVCgxKSA9IDAgRlJPTSBwZ19zdWJzY3JpcHRp b25fcmVsIHNyIFdIRVJFIHNyLnNyc3Vic3RhdGUgTk9UIElOICgncycsICdyJykgQU5EIHNyLnNy cmVsaWQgPSAndGVzdF9yZXAnOjpyZWdjbGFzcyIKKyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBB REQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0 ZXN0X3JlcCBBREQgYzQgaW50OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoMiwgJ2RhdGEyJywgMiwgMik7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CitteSAkcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBjNCA9IDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0FM VEVSIHRlc3RfcmVwIEFERCByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBEUk9Q Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVz dF9yZXAgRFJPUCBjNDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJERUxFVEUgRlJPTSB0ZXN0X3JlcCB3aGVyZSBpZCA9IDI7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0ZXN0X3JlcDsiKTsK K2lzKCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgRFJPUCByZXBsaWNhdGVkJyk7CisK KyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBUWVBFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgdmFsdWUgVFlQRSB2YXJj aGFyIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElO VE8gdGVzdF9yZXAgVkFMVUVTICgzLCAnZGF0YTMnLCAnMycpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hF UkUgdmFsdWUgPSAnMyc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIEFM VEVSIENPTFVNTiBUWVBFIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVS IFNFVCBERUZBVUxUCisjIENoZWNrIGlmIHdlIGhhdmUgdGhlIGRlZmF1bHQgdmFsdWUgYWZ0ZXIg dGhlIGRpcmVjdCBpbnNlcnQgdG8gc3Vic2NyaWJlciBub2RlLgorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIENPTFVNTiB2 YWx1ZSBTRVQgREVGQVVMVCAnZm9vJyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDQsICdkYXRhNCcpOyIpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVlIEZST00g dGVzdF9yZXAgV0hFUkUgaWQgPSA0OyIpOworaXMoJHJlc3VsdCwgJ2ZvbycsICdBTFRFUiB0ZXN0 X3JlcCBBTFRFUiBTRVQgREVGQVVMVCByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJM RSBBTFRFUiBEUk9QIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgZG9uJ3QgaGF2ZSB0aGUgZGVmYXVs dCB2YWx1ZSBwcmV2aW91c2x5IGRlZmluZWQuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgQ09MVU1OIHZhbHVlIERST1Ag REVGQVVMVDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVz dF9yZXAgVkFMVUVTICg1LCAnZGF0YTUnKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCB2YWx1ZSBJUyBOVUxMIEZST00gdGVzdF9y ZXAgV0hFUkUgaWQgPSA1OyIpOworaXMoJHJlc3VsdCwgcSh0KSwgJ0FMVEVSIHRlc3RfcmVwIEFM VEVSIERST1AgREVGQVVMVCByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRF UiBTRVQgTk9UIE5VTEwKKyMgUmVtb3ZlIHRoZSBleGlzdGluZyByZWNvcmQgdGhhdCBjb250YWlu cyBudWxsIHZhbHVlIGZpcnN0LgorbXkgKCRzdGRvdXQsICRzdGRlcnIpOworJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBp ZCA9IDU7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIg VEFCTEUgdGVzdF9yZXAgQUxURVIgdmFsdWUgU0VUIE5PVCBOVUxMOyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg2LCAnZGF0YTYnKTsiLAor CQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwK KwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbnVsbCB2 YWx1ZSBpbiBjb2x1bW4gXCJ2YWx1ZVwiIG9mIHJlbGF0aW9uIFwidGVzdF9yZXBcIiB2aW9sYXRl cyBub3QtbnVsbCBjb25zdHJhaW50LworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgQUxU RVIgVEFCTEUgQUxURVIgU0VUIE5PVCBOVUxMIjsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVS IERST1AgTk9UIE5VTEwKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJB TFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBEUk9QIE5PVCBOVUxMOyIpOworJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworIyBJbnNlcnQgc2FtZSBkYXRh IHRoYXQgaGFzIE5VTEwgdmFsdWUuIFRoaXMgZmFpbGVkIGJlZm9yZSBidXQgbm93IHNob3VsZCBz dWNjZWVkLgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDYsICdkYXRhNicpOyIpOworJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVlIElTIE5VTEwgRlJP TSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDY7Iik7CitpcygkcmVzdWx0LCBxKHQpLCAiQUxURVIgdGVz dF9yZXAgQUxURVIgRFJPUCBOT1QgTlVMTCByZXBsaWNhdGVkIik7CisKKyMgVGVzdCBBTFRFUiBU QUJMRSBTRVQgVU5MT0dHRUQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICdBTFRFUiBUQUJMRSB0ZXN0X3JlcCBTRVQgVU5MT0dHRUQ7Jyk7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg3LCAnZGF0YTcnLCAnNycp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA3OyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdB TFRFUiB0ZXN0X3JlcCBTRVQgVU5MT0dHRUQgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQUxURVIg VEFCTEUgU0VUIExPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg J0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBMT0dHRUQ7Jyk7Ciskbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg4LCAnZGF0YTgnLCAnOCcpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA4OyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRF UiB0ZXN0X3JlcCBTRVQgTE9HR0VEIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJM RSBhbmQgRE1MIGNoYW5nZXMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJDUkVBVEUgVEFCTEUgdG1wIChhIGludCwgYiB2YXJjaGFyKTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHBnX3RhYmxlcyB3 aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIHRt cCBpcyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIHZhbHVlcyAoMSwgJ2EnKSIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCB2YWx1ZXMgKDIsICdiJykiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBm cm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDIpLCAnRE1MIENoYW5nZXMgdG8gdG1wIGFyZSBy ZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgSU5IRVJJVFMKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wMiAoYzMgaW50KSBJ TkhFUklUUyAodG1wKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJJTlNFUlQgSU5UTyB0bXAyIFZBTFVFUyAoMSwgJ2EnLCAxKTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHBnX3RhYmxlcyB3 aGVyZSB0YWJsZW5hbWUgPSAndG1wMic7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBU QUJMRSBJTkhFUklUUyBpcyByZXBsaWNhdGVkJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXAyOyIpOwor aXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnRpbmcgc29tZSBkYXRhIHRvIGluaGVyaXRlZCB0YWJs ZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi RFJPUCBUQUJMRSB0bXAyIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgTElLRQorJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAzIChjMyBpbnQs IExJS0UgdG1wKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAzIFZBTFVFUyAoMSwgMSwgJ2EnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVy ZSB0YWJsZW5hbWUgPSAndG1wMyc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJM RSBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDM7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ2luc2VydCBzb21lIGRhdGEgdG8gYSB0YWJsZSBkZWZpbmVkIHdpdGggTElLRSBy ZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXAzIik7CisKKyMgVGVzdCBEUk9QIFRBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJsZXMgd2hl cmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgwKSwgJ1RBQkxFIHRtcCBp cyBkcm9wcGVkJyk7CisKKyMgVGVzdCBDUkVBVEUgVU5MT0dHRUQgVEFCTEUKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVU5MT0dHRUQgVEFCTEUgdG1wIChp ZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9 ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUgVU5MT0dHRUQgVEFCTEUgaXMg cmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1 bHQsIHFxKDApLCAnaW5zZXJ0aW5nIGRhdGEgdG8gdW5sb2dnZWQgdGFibGUgaXMgbm90IHJlcGxp Y2F0ZWQgY29ycmVjdGx5Jyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElG IE5PVCBFWElTVFMgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gcGdfdGFibGVz IHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUg VEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7 CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBkYXRhIHRvIGEgdGFibGUgcmVwbGljYXRl ZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUg dG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAoY2hlY2sgaWYgd2Ug c2tpcCB0byBjcmVhdGUgYSB0YWJsZQorIyB3aGVuIHdlIGhhdmUgdGhlIHRhYmxlIG9uIHRoZSBz dWJzY3JpYmVyIGluIGFkdmFuY2UsIGFuZCBpZiB3ZSBzdWNjZWVkCisjIGluIHJlcGxpY2F0aW5n IGNoYW5nZXMuKQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRtcCAoaWQgaW50KTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFM VUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxF IElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgSUYg Tk9UIEVYSVNUUyAoY2hlY2sgaWYgd2Ugc2tpcCB0byBjcmVhdGUgYSB0YWJsZQorIyB3aGVuIHdl IGhhdmUgdGhlIHRhYmxlIG9uIHRoZSBwdWJsaXNoZXIsIGJ1dCBub3Qgb24gdGhlIHN1YnNjcmli ZXIuKQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJM RSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9U IEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSB3aXRoIGNvbGxh dGUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUg dG1wIChuYW1lIHRleHQgQ09MTEFURSBcIkNcIik7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoJ2ZvbycpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvbGxhdGlvbl9uYW1l IEZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgV0hFUkUgdGFibGVfbmFtZSA9ICd0bXAn OyIpOworaXMoJHJlc3VsdCwgcXEoQyksICdDUkVBVEUgVEFCTEUgd2l0aCBjb2xsYXRlIHJlcGxp Y2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRB QkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggbmFtZWQgY29uc3RyYWludAor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAg KGlkIGludCBDT05TVFJBSU5UIFwibXVzdCBiZSBiaWdnZXIgdGhhbiAxMFwiIENIRUNLIChpZCA+ IDEwKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk bm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVT ICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBc JHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAi bXVzdCBiZSBiaWdnZXIgdGhhbiAxMCIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBu YW1lZCBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBU QUJMRSB3aXRoIHZhcmlvdXMgdHlwZXMgb2YgY29uc3RyYWludHMuCisjIE5PVCBOVUxMIGNvbnN0 cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBOT1QgTlVMTCk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9z dG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+ IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gIm5h bWUiIG9mIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9y IGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBub24gbnVsbCBjb25zdHJhaW50IGF0IGNyZWF0aW5n IHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRB QkxFIHRtcDsiKTsKKworIyBOVUxMIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBOVUxM KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVF UyAoMSk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgbmFtZSBJUyBOVUxMIEZST00gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEodCks ICJDUkVBVEUgVEFCTEUgd2l0aCBOVUxMIGNvbnN0cmFpbnQgcmVwbGljYXRlZCIpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMg Q0hFQ0sgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgcHJvZHVjdF9hbWUgdGV4dCwgcHJpY2UgaW50IENI RUNLIChwcmljZSA+IDApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRP IHRtcCBWQUxVRVMgKDEsICdmb28nLCAtMTAwKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+ IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rk b3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRtcCIgdmlv bGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX3ByaWNlX2NoZWNrIi8KKyAgb3IgZGllICJmYWls ZWQgdG8gcmVwbGljYXRlIENIRUNLIGNvbnN0cmFpbnQiOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIERFRkFVTFQKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBp bnQsIG5hbWUgdGV4dCBERUZBVUxUICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgbmFtZSBmcm9tIHRtcDsiKTsK K2lzKCRyZXN1bHQsIHFxKGZvbyksICJDUkVBVEUgVEFCTEUgd2l0aCBkZWZhdWx0IHZhbHVlIHJl cGxpY2F0ZWQiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRBQkxFIHRtcCIpOworCisjIFVOSVFVRSBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IFVOSVFVRSk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1w IFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3Vi Jyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAg VkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVy ciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4g L0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAi dG1wX2lkX2tleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBjb25zdHJhaW50IGF0 IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBQUklNQVJZIEtFWQorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtF WSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnYmFyJyk7IiwKKwkJCQkJICAgb25f ZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0 ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFs dWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRtcF9wa2V5Ii8KKyAgb3IgZGllICJmYWls ZWQgdG8gcmVwbGljYXRlIHByaW1hcnkga2V5IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBF WENMVURFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIGNpcmNsZXMgKGMgY2lyY2xlLCBFWENMVURFIFVTSU5HIGdpc3QgKGMgV0lUSCAmJikpOyIp OworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGNp cmNsZXMgVkFMVUVTICgnPCgxLCAxKSwgMT4nOjpjaXJjbGUpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNs ZSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRz dGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjog IGNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRlcyBleGNsdXNpb24gY29uc3RyYWludCAiY2ly Y2xlc19jX2V4Y2wiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgRVhDTFVERSBhdCBj cmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi RFJPUCBUQUJMRSBjaXJjbGVzIik7CisKKyMgUkVGRVJFTkNFUworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBwcm9kdWN0IChpZCBpbnQgUFJJTUFS WSBLRVksIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gcHJvZHVjdCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVF UyAoMiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBUQUJMRSBvcmRlcnMgKG9yZGVyX2lkIGludCBQUklNQVJZIEtFWSwgcHJvZHVjdF9p ZCBpbnQgUkVGRVJFTkNFUyBwcm9kdWN0IChpZCkpIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3Jlcycs ICJJTlNFUlQgSU5UTyBvcmRlcnMgVkFMVUVTICgxLCAxMCkiLAorCQkJCQkgICBvbl9lcnJvcl9z dG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+ IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJs ZSAib3JkZXJzIiB2aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJvcmRlcnNfcHJvZHVj dF9pZF9ma2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIFJFRkVSRU5DRVMgYXQg Y3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgb3JkZXJzIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiRFJPUCBUQUJMRSBwcm9kdWN0Iik7CisKKyMgREVGRVJSQUJMRQorJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBQUklN QVJZIEtFWSBERUZFUlJBQkxFLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAg VkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CisjIFF1aWNrIGNoZWNrIG9mIGRlZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAx OyIpOworIyBBbHNvLCBleGVjdXRlIGEgdGVzdCB0aGF0IHNob3VsZCBmYWlsIGZvciBJTklUSUFM TFkgSU1NRURJQVRFKHRoZSBkZWZhdWx0KQorJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdy ZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRtcCBTRVQgaWQgPSBpZCArIDE7CitJTlNFUlQgSU5U TyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7CitERUxFVEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAz OworQ09NTUlUOworKSwgb25fZXJyb3Jfc3RvcCA9PiAwLCBzdGRlcnIgPT4gXCRzdGRlcnIsIHN0 ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFs dWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRtcF9wa2V5Ii8KKyAgb3IgZGllICJmYWls ZWQgdG8gcmVwbGljYXRlIERFRkVSUkFCTEUgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5P VCBERUZFUlJBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRBQkxFIHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIE5PVCBERUZFUlJBQkxFLCBuYW1lIHRl eHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVy LT5wc3FsKCdwb3N0Z3JlcycsICJVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsgMTsiLAorCQkJCQkg ICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJ ICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVwbGljYXRlIGtl eSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXkiLworICBvciBkaWUg ImZhaWxlZCB0byByZXBsaWNhdGUgTk9UIERFRkVSUkFCTEUgYXQgY3JlYXRpbmcgdGFibGUiOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIp OworCisjIERFRkVSUkFCTEUgYW5kIElOSVRJQUxMWSBERUZFUlJFRAorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBQUklNQVJZ IEtFWSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRCwgbmFtZSB0ZXh0KTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVT ICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworIyBRdWljayBjaGVjayBvZiBkZWZlcnJhYmxlIGNs YXVzZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJVUERBVEUgdG1w IFNFVCBpZCA9IGlkICsgMTsiKTsKKyMgQWxzbywgZXhlY3V0ZSBhIHRlc3QgdGhhdCBzaG91bGQg c3VjY2VlZCBmb3IgSU5JVElBTExZIERFRkVSUkVECiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcXEoCitCRUdJTjsKK1VQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOwor SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMywgJ2Zvb2JhcicpOworREVMRVRFIEZST00gdG1wIFdI RVJFIGlkID0gMzsKK0NPTU1JVDsKKykpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGgg dGFibGUgY29uc3RyYWludAorIyBXZSB3aWxsIHNldCB0d28gY2hlY2tzIGFuZCBjb25kdWN0IHR3 byBpbnNlcnRzIHRoYXQgc2hvdWxkIGZhaWwgcmVzcGVjdGl2ZWx5LgorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRtcCAocHJpY2UgaW50LCBk aXNjb3VudGVkX3ByaWNlIGludCwgQ0hFQ0sgKGRpc2NvdW50ZWRfcHJpY2UgPiAwIEFORCBwcmlj ZSA+IGRpc2NvdW50ZWRfcHJpY2UpKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHRtcCBWQUxVRVMgKDEwMCwgMCk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAw LAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91 dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0bXAiIHZpb2xh dGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJl cGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChmaXJzdCBjb25kaXRpb24pIGF0IGNyZWF0aW5nIHRh YmxlIjsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRt cCBWQUxVRVMgKDUwLCAxMDApOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJ ICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0 ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVj ayBjb25zdHJhaW50ICJ0bXBfY2hlY2siLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUg dGFibGUgY29uc3RyYWludCAoc2Vjb25kIGNvbmRpdGlvbikgYXQgY3JlYXRpbmcgdGFibGUiOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIp OworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFdJVEggc3Ryb3JhZ2VfcGFyYW1ldGVyCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50 KSBXSVRIIChmaWxsZmFjdG9yID0gODApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19jbGFzcyBXSEVSRSByZWxuYW1l ID0gJ3RtcCc7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIg PT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3Rkb3V0ID1+IC97 ZmlsbGZhY3Rvcj04MH0vCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBzdG9yYWdlIG9w dGlvbiI7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFU RSBUQUJMRSB3aXRoIHN0b3JhZ2VfcGFyYW1ldGVyIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0 IENSRUFURSBUQUJMRSBUQUJMRVNQQUNFIChjcmVhdGluZyBhIHRhYmxlc3BhY2UgaXMgbm90IHJl cGxpY2F0ZWQpCisjIFByZXBhcmUgdGhlIGRpcmVjdG9yaWVzIGZvciB0aGUgcHVibGlzaGVyIGFu ZCBzdWJzY3JpYmVyIGZpcnN0LgorbXkgKCRiYXNlZGlyLCAkdGFibGVzcGFjZV9kaXIpOworCisk YmFzZWRpciA9ICRub2RlX3B1Ymxpc2hlci0+YmFzZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIk YmFzZWRpci90YmxzcGNfcHViIjsKK21rZGlyKCR0YWJsZXNwYWNlX2Rpcik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFU1BBQ0UgbXl0YmxzcGMg TE9DQVRJT04gJyR0YWJsZXNwYWNlX2Rpcic7Iik7CiskYmFzZWRpciA9ICRub2RlX3N1YnNjcmli ZXItPmJhc2VkaXI7CiskdGFibGVzcGFjZV9kaXIgPSAiJGJhc2VkaXIvdGJsc3BjX3N1YiI7Citt a2RpciAoJHRhYmxlc3BhY2VfZGlyKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFU1BBQ0UgbXl0YmxzcGMgTE9DQVRJT04gJyR0YWJsZXNwYWNl X2Rpcic7Iik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVEFCTEUgdG1wIChpZCBpbnQpIFRBQkxFU1BBQ0UgbXl0YmxzcGM7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBUQUJMRVNQ QUNFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUWVBFCiskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXl0eXBlIEFTIChpZCBpbnQs IG5hbWUgdGV4dCwgYWdlIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRBQkxFIHRtcCBPRiBteXR5cGU7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2JhcicpOyIpOworJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1w OyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUWVBFIG15dHlw ZSIpOworCisjIFRlc3QgQ1JFQVRFIEVOVU0gVFlQRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUWVBFIG15ZW51bXR5cGUgQVMgRU5VTSAoJ25ldycsICdv cGVuJywgJ2Nsb3NlZCcpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAgKHN0YXR1cyBteWVudW10eXBlKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgnbmV3Jyk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBmcm9tIHRtcDsiKTsK K2lzKCRyZXN1bHQsIHFxKG5ldyksICdDUkVBVEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUWVBFIG15ZW51bXR5 cGUiKTsKKworIyBUZXN0IENSRUFURSBSQU5HRSBUWVBFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgZmxvYXQ4X3JhbmdlIEFTIFJBTkdFIChzdWJ0 eXBlID0gZmxvYXQ4LCBzdWJ0eXBlX2RpZmYgPSBmbG9hdDhtaSk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAodmFsIGZsb2F0OF9yYW5nZSk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiaW5zZXJ0IGludG8gdG1wIHZh bHVlcyhmbG9hdDhfcmFuZ2UoLTEyLjM0LCAnMS4xMTExMTNlMycpKTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIGZyb20gdG1wOyIpOworaXMoJHJl c3VsdCwgcXEoWy0xMi4zNCwxMTExLjExM1wpKSwgJ0NSRUFURSBUQUJMRSBPRiByZXBsaWNhdGVk Jyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0 bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRZUEUg ZmxvYXQ4X3JhbmdlIik7CisKKyMgVGVzdCBDUkVBVEUgQkFTRSBEQVRBIFRZUEUgYW5kIHVzZSBp dCBpbiB0YWJsZSBkZWZpbml0aW9uCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiCitDUkVBVEUgVFlQRSBpbnQ0MjsKK0NSRUFURSBGVU5DVElPTiBpbnQ0Ml9pbihjc3Ry aW5nKQorICAgUkVUVVJOUyBpbnQ0MgorICAgQVMgJ2ludDRpbicKKyAgIExBTkdVQUdFIGludGVy bmFsIFNUUklDVCBJTU1VVEFCTEU7CitDUkVBVEUgRlVOQ1RJT04gaW50NDJfb3V0KGludDQyKQor ICAgUkVUVVJOUyBjc3RyaW5nCisgICBBUyAnaW50NG91dCcKKyAgIExBTkdVQUdFIGludGVybmFs IFNUUklDVCBJTU1VVEFCTEU7CitDUkVBVEUgVFlQRSBpbnQ0MiAoCisgICBpbnRlcm5hbGxlbmd0 aCA9IDQsCisgICBpbnB1dCA9IGludDQyX2luLAorICAgb3V0cHV0ID0gaW50NDJfb3V0LAorICAg YWxpZ25tZW50ID0gaW50NCwKKyAgIGRlZmF1bHQgPSA0MiwKKyAgIHBhc3NlZGJ5dmFsdWUKKyk7 CitDUkVBVEUgVEFCTEUgdG1wIChmMSBpbnQ0Mik7CitJTlNFUlQgSU5UTyB0bXAgREVGQVVMVCBW QUxVRVM7CisiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCAqIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoNDIpLCAnQ1JFQVRFIFRBQkxFIE9GIHJl cGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRS T1AgVFlQRSBpbnQ0MiBjYXNjYWRlIik7CisKK3Bhc3MgIkRETCByZXBsaWNhdGlvbiB0ZXN0cyBw YXNzZWQ6IjsKKworJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKKyRub2RlX3B1Ymxpc2hlci0+c3Rv cDsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDU0NjA4 MWEuLjkxZGUyZjIgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC01NTksNiArNTU5LDcg QEAgRGVmRWxlbUFjdGlvbgogRGVmYXVsdEFDTEluZm8KIERlZmluZVN0bXQKIERlbGV0ZVN0bXQK K0RlcGFyc2VkQ29tbWFuZFR5cGUKIERlcGVuZGVuY3lHZW5lcmF0b3IKIERlcGVuZGVuY3lHZW5l cmF0b3JEYXRhCiBEZXBlbmRlbmN5VHlwZQpAQCAtMTQ0MSw2ICsxNDQyLDggQEAgTG9naWNhbERl Y29kZUJlZ2luUHJlcGFyZUNCCiBMb2dpY2FsRGVjb2RlQ2hhbmdlQ0IKIExvZ2ljYWxEZWNvZGVD b21taXRDQgogTG9naWNhbERlY29kZUNvbW1pdFByZXBhcmVkQ0IKK0xvZ2ljYWxEZWNvZGVERExN ZXNzYWdlQ0IKK0xvZ2ljYWxEZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0IKIExvZ2ljYWxEZWNvZGVG aWx0ZXJCeU9yaWdpbkNCCiBMb2dpY2FsRGVjb2RlRmlsdGVyUHJlcGFyZUNCCiBMb2dpY2FsRGVj b2RlTWVzc2FnZUNCCkBAIC0yMjk0LDYgKzIyOTcsOCBAQCBSZW9yZGVyQnVmZmVyQ2hhbmdlCiBS ZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZQogUmVvcmRlckJ1ZmZlckNvbW1pdENCCiBSZW9yZGVyQnVm ZmVyQ29tbWl0UHJlcGFyZWRDQgorUmVvcmRlckJ1ZmZlckRETE1lc3NhZ2VDQgorUmVvcmRlckJ1 ZmZlclN0cmVhbURETE1lc3NhZ2VDQgogUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UKIFJlb3JkZXJC dWZmZXJJdGVyVFhORW50cnkKIFJlb3JkZXJCdWZmZXJJdGVyVFhOU3RhdGUKQEAgLTM1OTQsNiAr MzU5OSw3IEBAIHB0aHJlYWRfbXV0ZXhfdAogcHRocmVhZF9vbmNlX3QKIHB0aHJlYWRfdAogcHRy ZGlmZl90CitwdWJsaWNhdGlvbl9yZWwKIHB1bGxfdmFyX2NsYXVzZV9jb250ZXh0CiBwdWxsX3Zh cmF0dG5vc19jb250ZXh0CiBwdWxsX3Zhcm5vc19jb250ZXh0Ci0tIAoxLjguMy4xCgo= --000000000000846be105f4416101--